// package pty import ( "os" "golang.org/x/sys/unix" ) const ( TIOCGWINSZ = 21608 // 'T' << 8 | 104 TIOCSWINSZ = 21607 // 'T' << 8 | 103 ) // Winsize describes the terminal size. type Winsize struct { Rows uint16 // ws_row: Number of rows (in cells) Cols uint16 // ws_col: Number of columns (in cells) X uint16 // ws_xpixel: Width in pixels Y uint16 // ws_ypixel: Height in pixels } // GetsizeFull returns the full terminal size description. func GetsizeFull(t *os.File) (size *Winsize, err error) { var wsz *unix.Winsize wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ) if err != nil { return nil, err } else { return &Winsize{wsz.Row, wsz.Col, wsz.Xpixel, wsz.Ypixel}, nil } } // Get Windows Size func Getsize(t *os.File) (rows, cols int, err error) { var wsz *unix.Winsize wsz, err = unix.IoctlGetWinsize(int(t.Fd()), TIOCGWINSZ) if err != nil { return 80, 25, err } else { return int(wsz.Row), int(wsz.Col), nil } } // Setsize resizes t to s. func Setsize(t *os.File, ws *Winsize) error { wsz := unix.Winsize{ws.Rows, ws.Cols, ws.X, ws.Y} return unix.IoctlSetWinsize(int(t.Fd()), TIOCSWINSZ, &wsz) }