copy langext & termext from ffsclient
This commit is contained in:
90
termext/termcolor.go
Normal file
90
termext/termcolor.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package termext
|
||||
|
||||
import (
|
||||
"golang.org/x/term"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// -> partly copied from [ https://github.com/jwalton/go-supportscolor/tree/master ]
|
||||
|
||||
func SupportsColors() bool {
|
||||
|
||||
if isatty := term.IsTerminal(int(os.Stdout.Fd())); !isatty {
|
||||
return false
|
||||
}
|
||||
|
||||
termenv := os.Getenv("TERM")
|
||||
|
||||
if termenv == "dumb" {
|
||||
return false
|
||||
}
|
||||
|
||||
if osColorEnabled := enableColor(); !osColorEnabled {
|
||||
return false
|
||||
}
|
||||
|
||||
if _, ci := os.LookupEnv("CI"); ci {
|
||||
var ciEnvNames = []string{"TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE", "DRONE"}
|
||||
for _, ciEnvName := range ciEnvNames {
|
||||
_, exists := os.LookupEnv(ciEnvName)
|
||||
if exists {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if os.Getenv("CI_NAME") == "codeship" {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
if teamCityVersion, isTeamCity := os.LookupEnv("TEAMCITY_VERSION"); isTeamCity {
|
||||
versionRegex := regexp.MustCompile(`^(9\.(0*[1-9]\d*)\.|\d{2,}\.)`)
|
||||
if versionRegex.MatchString(teamCityVersion) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
if os.Getenv("COLORTERM") == "truecolor" {
|
||||
return true
|
||||
}
|
||||
|
||||
if termProgram, termProgramPreset := os.LookupEnv("TERM_PROGRAM"); termProgramPreset {
|
||||
switch termProgram {
|
||||
case "iTerm.app":
|
||||
termProgramVersion := strings.Split(os.Getenv("TERM_PROGRAM_VERSION"), ".")
|
||||
version, err := strconv.ParseInt(termProgramVersion[0], 10, 64)
|
||||
if err == nil && version >= 3 {
|
||||
return true
|
||||
}
|
||||
return true
|
||||
case "Apple_Terminal":
|
||||
return true
|
||||
|
||||
default:
|
||||
// No default
|
||||
}
|
||||
}
|
||||
|
||||
var term256Regex = regexp.MustCompile("(?i)-256(color)?$")
|
||||
if term256Regex.MatchString(termenv) {
|
||||
return true
|
||||
}
|
||||
|
||||
var termBasicRegex = regexp.MustCompile("(?i)^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux")
|
||||
|
||||
if termBasicRegex.MatchString(termenv) {
|
||||
return true
|
||||
}
|
||||
|
||||
if _, colorTerm := os.LookupEnv("COLORTERM"); colorTerm {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
Reference in New Issue
Block a user