52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
//
|
|
|
|
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)
|
|
}
|