forked from cloudfoundry/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
color.go
141 lines (110 loc) · 2.91 KB
/
color.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package terminal
import (
"fmt"
"os"
"regexp"
"runtime"
"golang.org/x/crypto/ssh/terminal"
)
type Color uint
const (
red Color = 31
green = 32
yellow = 33
// blue = 34
magenta = 35
cyan = 36
grey = 37
white = 38
)
var (
colorize func(message string, color Color, bold int) string
OsSupportsColors = runtime.GOOS != "windows"
TerminalSupportsColors = isTerminal()
UserAskedForColors = ""
)
func init() {
InitColorSupport()
}
func InitColorSupport() {
if colorsEnabled() {
colorize = func(message string, color Color, bold int) string {
return fmt.Sprintf("\033[%d;%dm%s\033[0m", bold, color, message)
}
} else {
colorize = func(message string, _ Color, _ int) string {
return message
}
}
}
func colorsEnabled() bool {
return userDidNotDisableColor() &&
(userEnabledColors() || (TerminalSupportsColors && OsSupportsColors))
}
func userEnabledColors() bool {
return UserAskedForColors == "true" || os.Getenv("CF_COLOR") == "true"
}
func userDidNotDisableColor() bool {
return os.Getenv("CF_COLOR") != "false" && (UserAskedForColors != "false" || os.Getenv("CF_COLOR") == "true")
}
func Colorize(message string, color Color) string {
return colorize(message, color, 0)
}
func ColorizeBold(message string, color Color) string {
return colorize(message, color, 1)
}
var decolorizerRegex = regexp.MustCompile(`\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]`)
func Decolorize(message string) string {
return string(decolorizerRegex.ReplaceAll([]byte(message), []byte("")))
}
func HeaderColor(message string) string {
return ColorizeBold(message, white)
}
func CommandColor(message string) string {
return ColorizeBold(message, yellow)
}
func StoppedColor(message string) string {
return ColorizeBold(message, grey)
}
func AdvisoryColor(message string) string {
return ColorizeBold(message, yellow)
}
func CrashedColor(message string) string {
return ColorizeBold(message, red)
}
func FailureColor(message string) string {
return ColorizeBold(message, red)
}
func SuccessColor(message string) string {
return ColorizeBold(message, green)
}
func EntityNameColor(message string) string {
return ColorizeBold(message, cyan)
}
func PromptColor(message string) string {
return ColorizeBold(message, cyan)
}
func TableContentHeaderColor(message string) string {
return ColorizeBold(message, cyan)
}
func WarningColor(message string) string {
return ColorizeBold(message, magenta)
}
func LogStdoutColor(message string) string {
return Colorize(message, white)
}
func LogStderrColor(message string) string {
return Colorize(message, red)
}
func LogHealthHeaderColor(message string) string {
return Colorize(message, grey)
}
func LogAppHeaderColor(message string) string {
return ColorizeBold(message, yellow)
}
func LogSysHeaderColor(message string) string {
return ColorizeBold(message, cyan)
}
func isTerminal() bool {
return terminal.IsTerminal(1)
}