From b3e5db93f7b59c7b80706ae30b505cb6b7945ec3 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 23 Jul 2026 13:47:25 +0200 Subject: cli: subcommand dispatch --- internal/cli/termwidth_unix.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 internal/cli/termwidth_unix.go (limited to 'internal/cli/termwidth_unix.go') 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) +} -- cgit v1.3