go/ui/colors.go

307 lines
6.0 KiB
Go

package cdmnky.dev/cdmnky/go
import (
"fmt"
"os"
"runtime"
"strings"
)
const (
// Reset ...
Reset = "\x1b[0m"
// Bright ...
Bright = "\x1b[1m"
// Dim ...
Dim = "\x1b[2m"
// Underscore ...
Underscore = "\x1b[4m"
// Blink ...
Blink = "\x1b[5m"
// Reverse ...
Reverse = "\x1b[7m"
// Hidden ...
Hidden = "\x1b[8m"
)
const (
// FgBlack - Black foreground
FgBlack = "\x1b[30m"
// FgRed - Red foreground
FgRed = "\x1b[91m"
// FgGreen - Green foreground
FgGreen = "\x1b[92m"
// FgYellow - Yellow foreground
FgYellow = "\x1b[93m"
// FgBlue - Blue foreground
FgBlue = "\x1b[94m"
// FgMagenta - Magenta foreground
FgMagenta = "\x1b[95m"
// FgCyan - Cyan foreground
FgCyan = "\x1b[96m"
// FgWhite - White foreground
FgWhite = "\x1b[97m"
// FgOrange - Orange foreground
FgOrange = "\x1b[33m"
)
const (
// BgBlack - Black background
BgBlack = "\x1b[40m"
// BgRed - Red background
BgRed = "\x1b[41m"
// BgGreen - Green background
BgGreen = "\x1b[42m"
// BgYellow - Yellow background
BgYellow = "\x1b[43m"
// BgBlue - Blue background
BgBlue = "\x1b[44m"
// BgMagenta - Magenta background
BgMagenta = "\x1b[45m"
// BgCyan - Cyan background
BgCyan = "\x1b[46m"
// BgWhite - White background
BgWhite = "\x1b[47m"
)
// Color ...
type Color struct {
nocolor bool
}
// NewColor ...
func NewColor(nocolor bool) *Color {
return &Color{nocolor}
}
// color ...
func (c *Color) color(color string, msg ...interface{}) {
if !c.nocolor && colorterm() {
fmt.Print(color)
msg = append(msg, Reset)
}
fmt.Print(msg...)
}
// colorln ...
func (c *Color) colorln(color string, msg ...interface{}) {
if !c.nocolor && colorterm() {
fmt.Print(color)
msg = append(msg, Reset)
}
fmt.Println(msg...)
}
// colorf ...
func (c *Color) colorf(color, format string, i ...interface{}) {
if !c.nocolor && colorterm() {
fmt.Print(color)
format += Reset
}
fmt.Printf(format, i...)
}
// scolorf ...
func (c *Color) scolorf(color, format string, i ...interface{}) string {
if !c.nocolor && colorterm() {
format = color + format
format += Reset
}
return fmt.Sprintf(format, i...)
}
// colorterm
func colorterm() (supportscolor bool) {
term := os.Getenv("TERM")
supportscolor = true // going to assume yes
if len(term) > 0 {
if !(strings.Contains(term, "xterm-color") || strings.Contains(term, "256color")) {
supportscolor = false
}
}
if runtime.GOOS == "windows" {
supportscolor = false
}
return
}
// Black ...
func (c *Color) Black(msg ...interface{}) {
c.color(FgBlack, msg...)
}
// Blackln ...
func (c *Color) Blackln(msg ...interface{}) {
c.colorln(FgBlack, msg...)
}
// Blackf ...
func (c *Color) Blackf(format string, i ...interface{}) {
c.colorf(FgBlack, format, i...)
}
// Sblackf ...
func (c *Color) Sblackf(format string, i ...interface{}) {
c.scolorf(FgBlack, format, i...)
}
// Red ...
func (c *Color) Red(msg ...interface{}) {
c.color(FgRed, msg...)
}
// Redln ...
func (c *Color) Redln(msg ...interface{}) {
c.colorln(FgRed, msg...)
}
// Redf ...
func (c *Color) Redf(format string, i ...interface{}) {
c.colorf(FgRed, format, i...)
}
// Sredf ...
func (c *Color) Sredf(format string, i ...interface{}) string {
return c.scolorf(FgRed, format, i...)
}
// Green ...
func (c *Color) Green(msg ...interface{}) {
c.color(FgGreen, msg...)
}
// Greenln ...
func (c *Color) Greenln(msg ...interface{}) {
c.colorln(FgGreen, msg...)
}
// Greenf ...
func (c *Color) Greenf(format string, i ...interface{}) {
c.colorf(FgGreen, format, i...)
}
// Sgreenf ...
func (c *Color) Sgreenf(format string, i ...interface{}) string {
return c.scolorf(FgGreen, format, i...)
}
// Yellow ...
func (c *Color) Yellow(msg ...interface{}) {
c.color(FgYellow, msg...)
}
// Yellowln ...
func (c *Color) Yellowln(msg ...interface{}) {
c.colorln(FgYellow, msg...)
}
// Yellowf ...
func (c *Color) Yellowf(format string, i ...interface{}) {
c.colorf(FgYellow, format, i...)
}
// Syellowf ...
func (c *Color) Syellowf(format string, i ...interface{}) string {
return c.scolorf(FgYellow, format, i...)
}
// Blue ...
func (c *Color) Blue(msg ...interface{}) {
c.color(FgBlue, msg...)
}
// Blueln ...
func (c *Color) Blueln(msg ...interface{}) {
c.colorln(FgBlue, msg...)
}
// Bluef ...
func (c *Color) Bluef(format string, i ...interface{}) {
c.colorf(FgBlue, format, i...)
}
// Sbluef ...
func (c *Color) Sbluef(format string, i ...interface{}) string {
return c.scolorf(FgBlue, format, i...)
}
// Magenta ...
func (c *Color) Magenta(msg ...interface{}) {
c.color(FgMagenta, msg...)
}
// Magentaln ...
func (c *Color) Magentaln(msg ...interface{}) {
c.colorln(FgMagenta, msg...)
}
// Magentaf ...
func (c *Color) Magentaf(format string, i ...interface{}) {
c.colorf(FgMagenta, format, i...)
}
// Smagentaf ...
func (c *Color) Smagentaf(format string, i ...interface{}) string {
return c.scolorf(FgMagenta, format, i...)
}
// Cyan ...
func (c *Color) Cyan(msg ...interface{}) {
c.color(FgCyan, msg...)
}
// Cyanln ...
func (c *Color) Cyanln(msg ...interface{}) {
c.colorln(FgCyan, msg...)
}
// Cyanf ...
func (c *Color) Cyanf(format string, i ...interface{}) {
c.colorf(FgCyan, format, i...)
}
// Scyanf ...
func (c *Color) Scyanf(format string, i ...interface{}) string {
return c.scolorf(FgCyan, format, i...)
}
// Orange ...
func (c *Color) Orange(msg ...interface{}) {
c.color(FgOrange, msg...)
}
// Orangeln ...
func (c *Color) Orangeln(msg ...interface{}) {
c.colorln(FgOrange, msg...)
}
// Orangef ...
func (c *Color) Orangef(format string, i ...interface{}) {
c.colorf(FgOrange, format, i...)
}
// Sorangef ...
func (c *Color) Sorangef(format string, i ...interface{}) string {
return c.scolorf(FgOrange, format, i...)
}
// White ...
func (c *Color) White(msg ...interface{}) {
c.color(FgWhite, msg...)
}
// Whiteln ...
func (c *Color) Whiteln(msg ...interface{}) {
c.colorln(FgWhite, msg...)
}
// Whitef ...
func (c *Color) Whitef(format string, i ...interface{}) {
c.colorf(FgWhite, format, i...)
}
// Swhitef ...
func (c *Color) Swhitef(format string, i ...interface{}) string {
return c.scolorf(FgWhite, format, i...)
}