2018-12-17 17:59:59 +00:00
|
|
|
// +build !windows
|
|
|
|
|
|
|
|
package term
|
|
|
|
|
|
|
|
import (
|
|
|
|
"syscall"
|
|
|
|
|
|
|
|
"github.com/pkg/term/termios"
|
2020-09-18 13:53:50 +00:00
|
|
|
"golang.org/x/sys/unix"
|
2018-12-17 17:59:59 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// SetRaw put terminal into a raw mode
|
|
|
|
func SetRaw(fd int) error {
|
|
|
|
n, err := getOriginalTermios(fd)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
n.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK |
|
|
|
|
syscall.ISTRIP | syscall.INLCR | syscall.IGNCR |
|
|
|
|
syscall.ICRNL | syscall.IXON
|
|
|
|
n.Lflag &^= syscall.ECHO | syscall.ICANON | syscall.IEXTEN | syscall.ISIG | syscall.ECHONL
|
|
|
|
n.Cflag &^= syscall.CSIZE | syscall.PARENB
|
2020-06-05 22:31:07 +00:00
|
|
|
n.Cflag |= syscall.CS8 // Set to 8-bit wide. Typical value for displaying characters.
|
2018-12-17 17:59:59 +00:00
|
|
|
n.Cc[syscall.VMIN] = 1
|
|
|
|
n.Cc[syscall.VTIME] = 0
|
2020-06-05 22:31:07 +00:00
|
|
|
|
2020-09-18 13:53:50 +00:00
|
|
|
return termios.Tcsetattr(uintptr(fd), termios.TCSANOW, (*unix.Termios)(&n))
|
2018-12-17 17:59:59 +00:00
|
|
|
}
|