+// terminalColumns returns the current terminal width, or zero for other output.
+// A terminal that reports no columns uses 80.
+func terminalColumns(out io.Writer) int {
+ file, ok := out.(interface{ Fd() uintptr })
+ if !ok {
+ return 0
+ }
+
+ size, err := unix.IoctlGetWinsize(int(file.Fd()), unix.TIOCGWINSZ)
+ if err != nil {
+ return 0
+ }
+
+ if size.Col == 0 {
+ return 80
+ }
+
+ return int(size.Col)
+}
+