refactor: add a clean termstyle file for styling

This commit is contained in:
2026-03-21 05:58:44 +00:00
parent e2d29aa9d8
commit 1a5364a696
2 changed files with 72 additions and 12 deletions
+2 -12
View File
@@ -7,12 +7,6 @@ import (
"strings" "strings"
) )
const (
bold = "\x1b[1m"
italic = "\x1b[3m"
reset = "\x1b[0m"
)
var ( var (
palette = struct { palette = struct {
miroPrefixGreen uint32 miroPrefixGreen uint32
@@ -22,18 +16,14 @@ var (
miroChevronTeal: 0x1DD3B0, miroChevronTeal: 0x1DD3B0,
} }
chevron = ansiColor(palette.miroChevronTeal) chevron = NewStyle().FG(palette.miroChevronTeal).Bold().Italic().Apply("")
prefix = ansiColor(palette.miroPrefixGreen) + bold + italic + "miro" + reset + " " + chevron + bold + italic + "" + reset + " " prefix = NewStyle().FG(palette.miroPrefixGreen).Bold().Italic().Apply("miro") + " " + chevron + " "
) )
func Prefix() string { func Prefix() string {
return prefix return prefix
} }
func ansiColor(rgb uint32) string {
return fmt.Sprintf("\x1b[38;2;%d;%d;%dm", byte(rgb>>16), byte(rgb>>8), byte(rgb))
}
func Format(msg string) string { func Format(msg string) string {
body := strings.TrimRight(msg, "\n") body := strings.TrimRight(msg, "\n")
suffix := msg[len(body):] suffix := msg[len(body):]
+70
View File
@@ -0,0 +1,70 @@
package output
import "fmt"
const (
ansiBold = "\x1b[1m"
ansiItalic = "\x1b[3m"
ansiReset = "\x1b[0m"
)
type Style struct {
bold bool
italic bool
fg *uint32
bg *uint32
}
func NewStyle() Style {
return Style{}
}
func (s Style) Bold() Style {
s.bold = true
return s
}
func (s Style) Italic() Style {
s.italic = true
return s
}
func (s Style) FG(rgb uint32) Style {
s.fg = &rgb
return s
}
func (s Style) BG(rgb uint32) Style {
s.bg = &rgb
return s
}
func (s Style) Apply(text string) string {
if !s.bold && !s.italic && s.fg == nil && s.bg == nil {
return text
}
style := ""
if s.bold {
style += ansiBold
}
if s.italic {
style += ansiItalic
}
if s.fg != nil {
style += ansiFG(*s.fg)
}
if s.bg != nil {
style += ansiBG(*s.bg)
}
return style + text + ansiReset
}
func ansiFG(rgb uint32) string {
return fmt.Sprintf("\x1b[38;2;%d;%d;%dm", byte(rgb>>16), byte(rgb>>8), byte(rgb))
}
func ansiBG(rgb uint32) string {
return fmt.Sprintf("\x1b[48;2;%d;%d;%dm", byte(rgb>>16), byte(rgb>>8), byte(rgb))
}