123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- //
- 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)
- }
|