github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/terminal/console_windows.go (about)

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