github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/terminal/console_windows.go (about) 1 //go:build windows 2 // +build windows 3 4 package terminal 5 6 import ( 7 "github.com/sirupsen/logrus" 8 "golang.org/x/sys/windows" 9 ) 10 11 // SetConsole switches the windows terminal mode to be able to handle colors, etc 12 func SetConsole() error { 13 if err := setConsoleMode(windows.Stdout, windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING); err != nil { 14 return err 15 } 16 if err := setConsoleMode(windows.Stderr, windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING); err != nil { 17 return err 18 } 19 if err := setConsoleMode(windows.Stdin, windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING); err != nil { 20 return err 21 } 22 return nil 23 } 24 25 func setConsoleMode(handle windows.Handle, flags uint32) error { 26 var mode uint32 27 err := windows.GetConsoleMode(handle, &mode) 28 if err != nil { 29 return nil // not a terminal 30 } 31 if err := windows.SetConsoleMode(handle, mode|flags); err != nil { 32 // In similar code, it is not considered an error if we cannot set the 33 // console mode. Following same line of thinking here. 34 logrus.WithError(err).Debug("Failed to set console mode for cli") 35 } 36 37 return nil 38 }