blob: 7b23cd9067768d0a4c7c8322e05055c75453c493 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package ui
import (
"os"
log "github.com/golang/glog"
"golang.org/x/sys/windows"
)
var consoleMode uint32
// Init initializes the stdout settings.
// It enables virtual terminal processing for ANSI escape sequence.
func Init() {
var mode uint32
err := windows.GetConsoleMode(windows.Handle(os.Stdout.Fd()), &mode)
if err != nil {
log.Warningf("GetConsoleMode %v", err)
return
}
log.Infof("console mode=0x%x", mode)
consoleMode = mode
if mode&windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 {
return
}
mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
err = windows.SetConsoleMode(windows.Handle(os.Stdout.Fd()), mode)
log.Infof("set console mode 0x%0x: %v", mode, err)
if err != nil {
log.Errorf("SetConsoleMode 0x%x: %v", mode, err)
}
}
// Restore restores the stdout settings.
func Restore() {
if consoleMode == 0 {
return
}
err := windows.SetConsoleMode(windows.Handle(os.Stdout.Fd()), consoleMode)
if err != nil {
log.Errorf("SetConsoleMode 0x%x: %v", consoleMode, err)
}
}