Skip to content

Commit 0e6fb6c

Browse files
committed
Fix ANSI escape codes on Windows PowerShell/cmd.exe
1 parent 4ad4edc commit 0e6fb6c

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

cmd/console_windows.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package main
2+
3+
import (
4+
"os"
5+
"syscall"
6+
"unsafe"
7+
)
8+
9+
const enableVirtualTerminalProcessing = 0x0004
10+
11+
func init() {
12+
enableANSI(os.Stderr)
13+
enableANSI(os.Stdout)
14+
}
15+
16+
func enableANSI(f *os.File) {
17+
var mode uint32
18+
h := syscall.Handle(f.Fd())
19+
kernel32 := syscall.NewLazyDLL("kernel32.dll")
20+
getMode := kernel32.NewProc("GetConsoleMode")
21+
setMode := kernel32.NewProc("SetConsoleMode")
22+
23+
r, _, _ := getMode.Call(uintptr(h), uintptr(unsafe.Pointer(&mode)))
24+
if r == 0 {
25+
return
26+
}
27+
setMode.Call(uintptr(h), uintptr(mode|enableVirtualTerminalProcessing))
28+
}

0 commit comments

Comments
 (0)