From ae15eda5467543bdab178d5bcf56eb301a870ec7 Mon Sep 17 00:00:00 2001 From: Michael Kelley Date: Tue, 1 Sep 2020 21:47:13 -0700 Subject: [PATCH] Add truecolor support for Windows, if available (#2156) - Update to latest tcell which has 24 bit Windows support - light renderer under Windows defaults to Dark256, if possible - Respect TCELL_TRUECOLOR - Remove tcell 1.3 references --- go.mod | 2 +- go.sum | 5 +++-- src/tui/light.go | 12 ------------ src/tui/light_unix.go | 13 +++++++++++++ src/tui/light_windows.go | 8 ++++++++ 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index c2e79aa..89fdebf 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/junegunn/fzf require ( - github.com/gdamore/tcell v1.3.0 + github.com/gdamore/tcell v1.4.0 github.com/lucasb-eyer/go-colorful v1.0.3 // indirect github.com/mattn/go-isatty v0.0.12 github.com/mattn/go-runewidth v0.0.8 diff --git a/go.sum b/go.sum index 9ae9acf..41b4688 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell v1.3.0 h1:r35w0JBADPZCVQijYebl6YMWWtHRqVEGt7kL2eBADRM= -github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= +github.com/gdamore/tcell v1.4.0 h1:vUnHwJRvcPQa3tzi+0QI4U9JINXYJlOz9yiaiPQ2wMU= +github.com/gdamore/tcell v1.4.0/go.mod h1:vxEiSDZdW3L+Uhjii9c3375IlDmR05bzxY404ZVSMo0= github.com/lucasb-eyer/go-colorful v1.0.2 h1:mCMFu6PgSozg9tDNMMK3g18oJBX7oYGrC09mS6CXfO4= github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= @@ -11,6 +11,7 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-shellwords v1.0.9 h1:eaB5JspOwiKKcHdqcjbfe5lA9cNn/4NRRtddXJCimqk= diff --git a/src/tui/light.go b/src/tui/light.go index a2a0515..9af19b8 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -3,7 +3,6 @@ package tui import ( "fmt" "os" - "os/exec" "regexp" "strconv" "strings" @@ -126,17 +125,6 @@ func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop in return &r } -func (r *LightRenderer) defaultTheme() *ColorTheme { - if strings.Contains(os.Getenv("TERM"), "256") { - return Dark256 - } - colors, err := exec.Command("tput", "colors").Output() - if err == nil && atoi(strings.TrimSpace(string(colors)), 16) > 16 { - return Dark256 - } - return Default16 -} - func repeat(r rune, times int) string { if times > 0 { return strings.Repeat(string(r), times) diff --git a/src/tui/light_unix.go b/src/tui/light_unix.go index e4ce631..1878870 100644 --- a/src/tui/light_unix.go +++ b/src/tui/light_unix.go @@ -5,6 +5,8 @@ package tui import ( "fmt" "os" + "os/exec" + "strings" "syscall" "github.com/junegunn/fzf/src/util" @@ -15,6 +17,17 @@ func IsLightRendererSupported() bool { return true } +func (r *LightRenderer) defaultTheme() *ColorTheme { + if strings.Contains(os.Getenv("TERM"), "256") { + return Dark256 + } + colors, err := exec.Command("tput", "colors").Output() + if err == nil && atoi(strings.TrimSpace(string(colors)), 16) > 16 { + return Dark256 + } + return Default16 +} + func (r *LightRenderer) fd() int { return int(r.ttyin.Fd()) } diff --git a/src/tui/light_windows.go b/src/tui/light_windows.go index 6f876af..aa15a8a 100644 --- a/src/tui/light_windows.go +++ b/src/tui/light_windows.go @@ -34,6 +34,14 @@ func IsLightRendererSupported() bool { return canSetVt100 } +func (r *LightRenderer) defaultTheme() *ColorTheme { + // the getenv check is borrowed from here: https://github.com/gdamore/tcell/commit/0c473b86d82f68226a142e96cc5a34c5a29b3690#diff-b008fcd5e6934bf31bc3d33bf49f47d8R178: + if !IsLightRendererSupported() || os.Getenv("ConEmuPID") != "" || os.Getenv("TCELL_TRUECOLOR") == "disable" { + return Default16 + } + return Dark256 +} + func (r *LightRenderer) initPlatform() error { //outHandle := windows.Stdout outHandle, _ := syscall.Open("CONOUT$", syscall.O_RDWR, 0)