36 lines
670 B
Go
36 lines
670 B
Go
//go:build windows
|
|
|
|
package term
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
const enableVirtualTerminalProcessing = 0x0004
|
|
|
|
var (
|
|
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
|
|
procSetConsoleMode = kernel32.NewProc("SetConsoleMode")
|
|
)
|
|
|
|
func EnableConsoleANSI() {
|
|
enableHandleANSI(os.Stdout)
|
|
enableHandleANSI(os.Stderr)
|
|
}
|
|
|
|
func enableHandleANSI(f *os.File) {
|
|
if f == nil {
|
|
return
|
|
}
|
|
var mode uint32
|
|
fd := f.Fd()
|
|
r1, _, _ := procGetConsoleMode.Call(fd, uintptr(unsafe.Pointer(&mode)))
|
|
if r1 == 0 {
|
|
return
|
|
}
|
|
_, _, _ = procSetConsoleMode.Call(fd, uintptr(mode|enableVirtualTerminalProcessing))
|
|
}
|