Пример #1
0
// RawMode places the terminal into raw mode.
func RawMode(t *Term) error {
	var a attr
	if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil {
		return err
	}
	termios.Cfmakeraw((*syscall.Termios)(&a))
	return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a))
}
Пример #2
0
func (t *Term) setSpeed(baud int) error {
	var a attr
	if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil {
		return err
	}
	a.setSpeed(baud)
	return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a))
}
Пример #3
0
func (t *Term) setReadTimeout(d time.Duration) error {
	var a attr
	if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil {
		return err
	}
	a.Cc[syscall.VMIN], a.Cc[syscall.VTIME] = timeoutVals(d)
	return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a))
}
Пример #4
0
func SetRaw(tty *os.File) error {
	var attr syscall.Termios

	err := termios.Tcgetattr(uintptr(tty.Fd()), (*syscall.Termios)(&attr))
	if err != nil {
		return err
	}

	termios.Cfmakeraw((*syscall.Termios)(&attr))

	return termios.Tcsetattr(uintptr(tty.Fd()), termios.TCSANOW, (*syscall.Termios)(&attr))
}
Пример #5
0
func (p *Pty) Copy(o *os.File) (err error) {
	var attr syscall.Termios
	if err = termios.Tcgetattr(o.Fd(), &attr); err != nil {
		return err
	}
	w, h, err := GetSize(o.Fd())
	if err != nil {
		return err
	}

	if err = SetSize(p.tty.Fd(), w, h); err != nil {
		return err
	}

	err = termios.Tcsetattr(p.tty.Fd(), termios.TCSADRAIN, &attr)
	if err != nil {
		return err
	}
	return nil
}
Пример #6
0
func (t *Term) setFlowControl(kind int) error {
	var a attr
	if err := termios.Tcgetattr(uintptr(t.fd), (*syscall.Termios)(&a)); err != nil {
		return err
	}
	switch kind {
	case NONE:
		a.Iflag &^= termios.IXON | termios.IXOFF | termios.IXANY
		a.Cflag &^= termios.CRTSCTS

	case XONXOFF:
		a.Cflag &^= termios.CRTSCTS
		a.Iflag |= termios.IXON | termios.IXOFF | termios.IXANY

	case HARDWARE:
		a.Iflag &^= termios.IXON | termios.IXOFF | termios.IXANY
		a.Cflag |= termios.CRTSCTS
	}
	return termios.Tcsetattr(uintptr(t.fd), termios.TCSANOW, (*syscall.Termios)(&a))
}
Пример #7
0
// Restore restores the state of the terminal captured at the point that
// the terminal was originally opened.
func (t *Term) Restore() error {
	return termios.Tcsetattr(uintptr(t.fd), termios.TCIOFLUSH, &t.orig)
}
Пример #8
0
func setTerm(term syscall.Termios) {
	if err := termios.Tcsetattr(uintptr(syscall.Stdin), termios.TCSAFLUSH, &term); err != nil {
		panic(err)
	}
}
Пример #9
0
func tcsetattr(fd uintptr, t syscall.Termios) error {
	if err := termios.Tcsetattr(fd, termios.TCSAFLUSH, &t); err != nil {
		return fmt.Errorf("tcsetattr: %v", err)
	}
	return nil
}