1234567891011121314151617181920212223242526272829303132333435363738 |
- //go:build aix || darwin || dragonfly || freebsd || (linux && !appengine) || netbsd || openbsd || os400 || solaris
- package readline
- import (
- "syscall"
- )
- type Termios syscall.Termios
- func SetRawMode(fd uintptr) (*Termios, error) {
- termios, err := getTermios(fd)
- if err != nil {
- return nil, err
- }
- newTermios := *termios
- newTermios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON
- newTermios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN
- newTermios.Cflag &^= syscall.CSIZE | syscall.PARENB
- newTermios.Cflag |= syscall.CS8
- newTermios.Cc[syscall.VMIN] = 1
- newTermios.Cc[syscall.VTIME] = 0
- return termios, setTermios(fd, &newTermios)
- }
- func UnsetRawMode(fd uintptr, termios any) error {
- t := termios.(*Termios)
- return setTermios(fd, t)
- }
- // IsTerminal returns true if the given file descriptor is a terminal.
- func IsTerminal(fd uintptr) bool {
- _, err := getTermios(fd)
- return err == nil
- }
|