package main import ( "golang.org/x/sys/unix" ) type tty struct { fd int termios *unix.Termios } func newTTY(fd uintptr) *tty { termios, _ := unix.IoctlGetTermios(int(fd), unix.TCGETS) return &tty{int(fd), termios} } func (t *tty) EchoOff() { if t.termios == nil { return } newState := *t.termios newState.Lflag &^= unix.ECHO newState.Lflag |= unix.ICANON | unix.ISIG newState.Iflag |= unix.ICRNL unix.IoctlSetTermios(t.fd, unix.TCSETS, &newState) } func (t *tty) Restore() { if t.termios == nil { return } unix.IoctlSetTermios(t.fd, unix.TCSETS, t.termios) }