2022-03-13 17:48:49 +00:00
|
|
|
package readline
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TUI colors & effects, from evilsocket's github.com/evilsocket/islazy/tui package
|
|
|
|
// These are exported as an easy-to-use quick effect/color library, and also will
|
|
|
|
// integrate nicely with the readline shell itself (ex: transport no_color mode with Disable())
|
|
|
|
|
|
|
|
// https://misc.flogisoft.com/bash/tip_colors_and_formatting
|
|
|
|
var (
|
|
|
|
// effects
|
|
|
|
BOLD = "\033[1m"
|
|
|
|
DIM = "\033[2m"
|
2023-03-26 00:14:26 +00:00
|
|
|
UNDERLINE = "\033[4m"
|
2022-03-13 17:48:49 +00:00
|
|
|
RESET = "\033[0m"
|
|
|
|
// colors
|
|
|
|
RED = "\033[31m"
|
|
|
|
GREEN = "\033[32m"
|
|
|
|
BLUE = "\033[34m"
|
|
|
|
YELLOW = "\033[33m"
|
|
|
|
// foreground colors
|
|
|
|
FOREBLACK = "\033[30m"
|
|
|
|
FOREWHITE = "\033[97m"
|
|
|
|
// background colors
|
|
|
|
BACKDARKGRAY = "\033[100m"
|
|
|
|
BACKRED = "\033[41m"
|
|
|
|
BACKGREEN = "\033[42m"
|
|
|
|
BACKYELLOW = "\033[43m"
|
|
|
|
BACKLIGHTBLUE = "\033[104m"
|
|
|
|
|
|
|
|
ctrl = []string{"\x033", "\\e", "\x1b"}
|
|
|
|
)
|
|
|
|
|
|
|
|
// Effects returns true if colors and effects are supported
|
|
|
|
// on the current terminal.
|
|
|
|
func Effects() bool {
|
|
|
|
if term := os.Getenv("TERM"); term == "" {
|
|
|
|
return false
|
|
|
|
} else if term == "dumb" {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
// Disable will disable all colors and effects.
|
|
|
|
func Disable() {
|
|
|
|
BOLD = ""
|
|
|
|
DIM = ""
|
|
|
|
RESET = ""
|
|
|
|
RED = ""
|
|
|
|
GREEN = ""
|
|
|
|
BLUE = ""
|
|
|
|
YELLOW = ""
|
|
|
|
FOREBLACK = ""
|
|
|
|
FOREWHITE = ""
|
|
|
|
BACKDARKGRAY = ""
|
|
|
|
BACKRED = ""
|
|
|
|
BACKGREEN = ""
|
|
|
|
BACKYELLOW = ""
|
|
|
|
BACKLIGHTBLUE = ""
|
|
|
|
}
|
|
|
|
|
|
|
|
// HasEffect returns true if the string has any shell control codes in it.
|
|
|
|
func HasEffect(s string) bool {
|
|
|
|
for _, ch := range ctrl {
|
|
|
|
if strings.Contains(s, ch) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// Wrap wraps a string with an effect or color and appends a reset control code.
|
|
|
|
func Wrap(e, s string) string {
|
|
|
|
return e + s + RESET
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bold makes the string Bold.
|
|
|
|
func Bold(s string) string {
|
|
|
|
return Wrap(BOLD, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Dim makes the string Diminished.
|
|
|
|
func Dim(s string) string {
|
|
|
|
return Wrap(DIM, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Red makes the string Red.
|
|
|
|
func Red(s string) string {
|
|
|
|
return Wrap(RED, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Green makes the string Green.
|
|
|
|
func Green(s string) string {
|
|
|
|
return Wrap(GREEN, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Blue makes the string Green.
|
|
|
|
func Blue(s string) string {
|
|
|
|
return Wrap(BLUE, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Yellow makes the string Green.
|
|
|
|
func Yellow(s string) string {
|
|
|
|
return Wrap(YELLOW, s)
|
|
|
|
}
|