1//go:build !windows 2//+build !windows 3 4package pty 5 6import ( 7 "os" 8 "syscall" 9 "unsafe" 10) 11 12// Winsize describes the terminal size. 13type Winsize struct { 14 Rows uint16 // ws_row: Number of rows (in cells) 15 Cols uint16 // ws_col: Number of columns (in cells) 16 X uint16 // ws_xpixel: Width in pixels 17 Y uint16 // ws_ypixel: Height in pixels 18} 19 20// Setsize resizes t to s. 21func Setsize(t *os.File, ws *Winsize) error { 22 //nolint:gosec // Expected unsafe pointer for Syscall call. 23 return ioctl(t.Fd(), syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws))) 24} 25 26// GetsizeFull returns the full terminal size description. 27func GetsizeFull(t *os.File) (size *Winsize, err error) { 28 var ws Winsize 29 30 //nolint:gosec // Expected unsafe pointer for Syscall call. 31 if err := ioctl(t.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil { 32 return nil, err 33 } 34 return &ws, nil 35} 36