38 lines
645 B
Go
38 lines
645 B
Go
// +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
|
|
}
|