github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/osutils/termsize/termsize_windows.go (about) 1 // +build windows 2 3 package termsize 4 5 import ( 6 "syscall" 7 8 "github.com/Azure/go-ansiterm/winterm" 9 ) 10 11 func getStdHandle(stdhandle int) (uintptr, error) { 12 handle, err := syscall.GetStdHandle(stdhandle) 13 if err != nil { 14 return 0, err 15 } 16 return uintptr(handle), nil 17 } 18 19 // GetTerminalColumns returns the number of columns available in the current terminal 20 func GetTerminalColumns() int { 21 defaultWidth := 80 22 23 stdoutHandle, err := getStdHandle(syscall.STD_OUTPUT_HANDLE) 24 if err != nil { 25 return defaultWidth 26 } 27 28 info, err := winterm.GetConsoleScreenBufferInfo(stdoutHandle) 29 if err != nil { 30 return defaultWidth 31 } 32 33 if info.MaximumWindowSize.X > 0 { 34 return int(info.MaximumWindowSize.X) 35 } 36 37 return defaultWidth 38 }