From 004ab1e9db2979ce6813d1e2c27175cb48331b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Wed, 27 Nov 2019 18:58:23 +0100 Subject: [PATCH] Fix color output to Git Bash --- utils/color.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/utils/color.go b/utils/color.go index fb8479734..0a7e346a0 100644 --- a/utils/color.go +++ b/utils/color.go @@ -1,15 +1,28 @@ package utils import ( + "os" + "github.com/mattn/go-isatty" "github.com/mgutz/ansi" - "os" ) +var _isStdoutTerminal = false +var checkedTerminal = false + +func isStdoutTerminal() bool { + if !checkedTerminal { + fd := os.Stdout.Fd() + _isStdoutTerminal = isatty.IsTerminal(fd) || isatty.IsCygwinTerminal(fd) + checkedTerminal = true + } + return _isStdoutTerminal +} + func makeColorFunc(color string) func(string) string { return func(arg string) string { output := arg - if isatty.IsTerminal(os.Stdout.Fd()) { + if isStdoutTerminal() { output = ansi.Color(color+arg+ansi.Reset, "") } @@ -29,7 +42,7 @@ var Gray = makeColorFunc(ansi.LightBlack) func Bold(arg string) string { output := arg - if isatty.IsTerminal(os.Stdout.Fd()) { + if isStdoutTerminal() { // This is really annoying. If you just define Bold as ColorFunc("+b") it will properly bold but // will not use the default color, resulting in black and probably unreadable text. This forces // the default color before bolding.