// +build !windows package pty import ( "os" "syscall" "unsafe" ) // Getsize returns the number of rows (lines) and cols (positions // in each line) in terminal t. func Getsize(t *os.File) (rows, cols int, err error) { var ws winsize err = windowrect(&ws, t.Fd()) return int(ws.ws_row), int(ws.ws_col), err } type winsize struct { ws_row uint16 ws_col uint16 ws_xpixel uint16 ws_ypixel uint16 } func windowrect(ws *winsize, fd uintptr) error { _, _, errno := syscall.Syscall( syscall.SYS_IOCTL, fd, syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(ws)), ) if errno != 0 { return syscall.Errno(errno) } return nil }