Skip to content

Commit d591655

Browse files
committed
Guard legacy Windows vt100 setup syscall on more recent builds of Windows
1 parent 0671a3d commit d591655

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

utils/sysutils/sysutils_windows.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,21 @@ import (
1010

1111
func init() {
1212
var inMode, outMode uint32
13-
if err := windows.GetConsoleMode(windows.Stdin, &inMode); err == nil {
14-
inMode |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT
15-
if err := windows.SetConsoleMode(windows.Stdin, inMode); err != nil {
16-
fmt.Fprintf(os.Stderr, "Failed to set console mode: %v", err)
13+
maj, _, build := windows.RtlGetNtVersionNumbers()
14+
if maj < 10 || (maj == 10 && build <= 14393) {
15+
// the Windows 10 Anniversary Edition added VT100 support
16+
// enable vterm support in older versions of the Windows terminal
17+
if err := windows.GetConsoleMode(windows.Stdin, &inMode); err == nil {
18+
inMode |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT
19+
if err := windows.SetConsoleMode(windows.Stdin, inMode); err != nil {
20+
fmt.Fprintf(os.Stderr, "Failed to set console mode: %v", err)
21+
}
1722
}
18-
}
19-
if err := windows.GetConsoleMode(windows.Stdout, &outMode); err == nil {
20-
outMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
21-
if err := windows.SetConsoleMode(windows.Stdout, outMode); err != nil {
22-
fmt.Fprintf(os.Stderr, "Failed to set console mode: %v", err)
23+
if err := windows.GetConsoleMode(windows.Stdout, &outMode); err == nil {
24+
outMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
25+
if err := windows.SetConsoleMode(windows.Stdout, outMode); err != nil {
26+
fmt.Fprintf(os.Stderr, "Failed to set console mode: %v", err)
27+
}
2328
}
2429
}
2530
}

0 commit comments

Comments
 (0)