diff options
Diffstat (limited to 'internal/cli/termwidth_unix.go')
| -rw-r--r-- | internal/cli/termwidth_unix.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/internal/cli/termwidth_unix.go b/internal/cli/termwidth_unix.go new file mode 100644 index 0000000..9d1b47d --- /dev/null +++ b/internal/cli/termwidth_unix.go @@ -0,0 +1,23 @@ +//go:build unix + +package cli + +import ( + "os" + "syscall" + "unsafe" +) + +// ttyWidth returns f's terminal column width via the TIOCGWINSZ ioctl, or 0 +// if f isn't a terminal (redirected to a file/pipe, as in tests) or the +// ioctl fails. +func ttyWidth(f *os.File) int { + var ws struct { + Row, Col, Xpixel, Ypixel uint16 + } + _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, f.Fd(), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))) + if errno != 0 || ws.Col == 0 { + return 0 + } + return int(ws.Col) +} |
