mirror of https://github.com/ollama/ollama.git
				
				
				
			
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| //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
 | |
| }
 |