Files
terminal/detect_windows.go
T
2026-07-12 18:41:05 -04:00

51 lines
1.2 KiB
Go

//go:build windows
package terminal
import (
"os"
"golang.org/x/sys/windows"
)
func DetectColorMode() ColorMode {
if os.Getenv("WT_SESSION") != "" || os.Getenv("WT_PROFILE_ID") != "" {
return ColorModeTrueColor
}
if ct := os.Getenv("COLORTERM"); ct == "truecolor" || ct == "24bit" {
return ColorModeTrueColor
}
return ColorMode256
}
func resetTerminalMode() {
saneIn := uint32(windows.ENABLE_PROCESSED_INPUT |
windows.ENABLE_LINE_INPUT |
windows.ENABLE_ECHO_INPUT |
windows.ENABLE_MOUSE_INPUT |
windows.ENABLE_QUICK_EDIT_MODE |
windows.ENABLE_EXTENDED_FLAGS)
saneOut := uint32(windows.ENABLE_PROCESSED_OUTPUT | windows.ENABLE_WRAP_AT_EOL_OUTPUT)
if h, err := openConsoleDev("CONIN$"); err == nil {
windows.SetConsoleMode(h, saneIn)
windows.CloseHandle(h)
}
if h, err := openConsoleDev("CONOUT$"); err == nil {
windows.SetConsoleMode(h, saneOut)
windows.CloseHandle(h)
}
}
func openConsoleDev(name string) (windows.Handle, error) {
return windows.CreateFile(
windows.StringToUTF16Ptr(name),
windows.GENERIC_READ|windows.GENERIC_WRITE,
windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE,
nil,
windows.OPEN_EXISTING,
0,
0,
)
}