github.com/rck/u-root@v0.0.0-20180106144920-7eb602e381bb/pkg/termios/termios_linux.go (about) 1 // Copyright 2015-2017 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package termios 6 7 import ( 8 "os" 9 10 "golang.org/x/sys/unix" 11 ) 12 13 type TTY struct { 14 f *os.File 15 } 16 17 func New() (*TTY, error) { 18 f, err := os.OpenFile("/dev/tty", os.O_RDWR, 0) 19 if err != nil { 20 return nil, err 21 } 22 t := &TTY{f: f} 23 24 return t, nil 25 } 26 27 func GetTermios(fd uintptr) (*unix.Termios, error) { 28 return unix.IoctlGetTermios(int(fd), unix.TCGETS) 29 } 30 31 func (t *TTY) Get() (*unix.Termios, error) { 32 return GetTermios(t.f.Fd()) 33 } 34 35 func SetTermios(fd uintptr, ti *unix.Termios) error { 36 return unix.IoctlSetTermios(int(fd), unix.TCSETS, ti) 37 } 38 39 func (t *TTY) Set(ti *unix.Termios) error { 40 return SetTermios(t.f.Fd(), ti) 41 } 42 43 func MakeRaw(term *unix.Termios) *unix.Termios { 44 raw := *term 45 raw.Iflag &^= unix.IGNBRK | unix.BRKINT | unix.PARMRK | unix.ISTRIP | unix.INLCR | unix.IGNCR | unix.ICRNL | unix.IXON 46 raw.Oflag &^= unix.OPOST 47 raw.Lflag &^= unix.ECHO | unix.ECHONL | unix.ICANON | unix.ISIG | unix.IEXTEN 48 raw.Cflag &^= unix.CSIZE | unix.PARENB 49 raw.Cflag |= unix.CS8 50 51 raw.Cc[unix.VMIN] = 1 52 raw.Cc[unix.VTIME] = 0 53 54 return &raw 55 } 56 57 func GetWinSize(fd uintptr) (*unix.Winsize, error) { 58 return unix.IoctlGetWinsize(int(fd), unix.TIOCGWINSZ) 59 } 60 61 func (t *TTY) GetWinSize() (*unix.Winsize, error) { 62 return GetWinSize(t.f.Fd()) 63 } 64 65 func SetWinSize(fd uintptr, w *unix.Winsize) error { 66 return unix.IoctlSetWinsize(int(fd), unix.TIOCSWINSZ, w) 67 } 68 69 func (t *TTY) SetWinSize(w *unix.Winsize) error { 70 return SetWinSize(t.f.Fd(), w) 71 }