//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) }