ollama
1//go:build aix || darwin || dragonfly || freebsd || (linux && !appengine) || netbsd || openbsd || os400 || solaris
2
3package readline4
5import (6"syscall"7)
8
9type Termios syscall.Termios10
11func SetRawMode(fd int) (*Termios, error) {12termios, err := getTermios(fd)13if err != nil {14return nil, err15}16
17newTermios := *termios18newTermios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON19newTermios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN20newTermios.Cflag &^= syscall.CSIZE | syscall.PARENB21newTermios.Cflag |= syscall.CS822newTermios.Cc[syscall.VMIN] = 123newTermios.Cc[syscall.VTIME] = 024
25return termios, setTermios(fd, &newTermios)26}
27
28func UnsetRawMode(fd int, termios any) error {29t := termios.(*Termios)30return setTermios(fd, t)31}
32
33// IsTerminal returns true if the given file descriptor is a terminal.
34func IsTerminal(fd int) bool {35_, err := getTermios(fd)36return err == nil37}
38