Change Code to Color, add better terminal support
This commit is contained in:
parent
cf14f3468e
commit
c93f6e0af0
54
color.go
54
color.go
|
@ -3,17 +3,15 @@ package color
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Whether the terminal supports true color
|
||||
var TrueColor = os.Getenv("COLORTERM") == "truecolor"
|
||||
|
||||
// Color code
|
||||
type Code int
|
||||
// Color type
|
||||
type Color int
|
||||
|
||||
// Color codes
|
||||
const (
|
||||
Black Code = iota + 30
|
||||
Black Color = iota + 30
|
||||
Red
|
||||
Green
|
||||
Yellow
|
||||
|
@ -23,33 +21,55 @@ const (
|
|||
White
|
||||
)
|
||||
|
||||
func (code Code) String(args ...any) string {
|
||||
return fmt.Sprintf("\x1b[%dm%s\x1b[0m", code, fmt.Sprint(args...))
|
||||
func (c Color) String(args ...any) string {
|
||||
return fmt.Sprintf("\x1b[%dm%s\x1b[0m", c, fmt.Sprint(args...))
|
||||
}
|
||||
|
||||
func (code Code) Print(args ...any) {
|
||||
if !TrueColor {
|
||||
func (c Color) Print(args ...any) {
|
||||
if !supportsColors() {
|
||||
fmt.Print(args...)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m", code, fmt.Sprint(args...))
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m", c, fmt.Sprint(args...))
|
||||
}
|
||||
|
||||
func (code Code) Printf(format string, args ...any) {
|
||||
if !TrueColor {
|
||||
func (c Color) Printf(format string, args ...any) {
|
||||
if !supportsColors() {
|
||||
fmt.Printf(format, args...)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m", code, fmt.Sprintf(format, args...))
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m", c, fmt.Sprintf(format, args...))
|
||||
}
|
||||
|
||||
func (code Code) Println(args ...any) {
|
||||
if !TrueColor {
|
||||
func (c Color) Println(args ...any) {
|
||||
if !supportsColors() {
|
||||
fmt.Println(args...)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m\n", code, fmt.Sprint(args...))
|
||||
fmt.Printf("\x1b[%dm%s\x1b[0m\n", c, fmt.Sprint(args...))
|
||||
}
|
||||
|
||||
func supportsColors() bool {
|
||||
colorterm := os.Getenv("COLORTERM")
|
||||
term := os.Getenv("TERM")
|
||||
|
||||
// Check for true color (24-bit support)
|
||||
if strings.Contains(colorterm, "truecolor") || strings.Contains(colorterm, "24bit") {
|
||||
return true
|
||||
}
|
||||
|
||||
// Check for 256 colors support
|
||||
if strings.Contains(term, "256color") {
|
||||
return true
|
||||
}
|
||||
|
||||
// Check for basic color support
|
||||
if term == "xterm" || term == "screen" || term == "vt100" || strings.Contains(term, "color") {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user