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  }