|
|
@@ -44,8 +44,13 @@ func MakeRaw(fd int) (*State, error) {
|
|
|
}
|
|
|
|
|
|
newState := oldState.termios
|
|
|
- newState.Iflag &^= syscall.ISTRIP | syscall.INLCR | syscall.ICRNL | syscall.IGNCR | syscall.IXON | syscall.IXOFF
|
|
|
- newState.Lflag &^= syscall.ECHO | syscall.ICANON | syscall.ISIG
|
|
|
+ // This attempts to replicate the behaviour documented for cfmakeraw in
|
|
|
+ // the termios(3) manpage.
|
|
|
+ newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON
|
|
|
+ newState.Oflag &^= syscall.OPOST
|
|
|
+ newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN
|
|
|
+ newState.Cflag &^= syscall.CSIZE | syscall.PARENB
|
|
|
+ newState.Cflag |= syscall.CS8
|
|
|
if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {
|
|
|
return nil, err
|
|
|
}
|