terminal: Use go-colorable

Add fallback to display colors on Windows.
This commit is contained in:
Yasuhiro Matsumoto
2016-03-24 19:55:48 +09:00
committed by Derek Parker
parent af4798e2a9
commit f6836cbcf1
51 changed files with 1073 additions and 4251 deletions

View File

@ -1,31 +1,35 @@
package terminal
import (
"io"
"os"
"strings"
"syscall"
"github.com/mattn/go-colorable"
)
// supportsEscapeCodes returns true if console handles escape codes.
func supportsEscapeCodes() bool {
if strings.ToLower(os.Getenv("TERM")) == "dumb" {
return false
}
// getColorableWriter returns two values. First is Writer supported colors.
// If return nil, colors will be disabled.
func getColorableWriter() io.Writer {
if strings.ToLower(os.Getenv("ConEmuANSI")) == "on" {
// The ConEmu terminal is installed. Use it.
return true
return os.Stdout
}
const ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
h, err := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
if err != nil {
return false
return os.Stdout
}
var m uint32
err = syscall.GetConsoleMode(h, &m)
if err != nil {
return false
return os.Stdout
}
return m&ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0
if m&ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 {
return os.Stdout
}
return colorable.NewColorableStdout()
}