chkbit/term/term.go

83 lines
1.2 KiB
Go
Raw Normal View History

2024-08-15 23:30:29 +02:00
package term
import (
"fmt"
"os"
"golang.org/x/term"
)
var (
isTerm = false
noColor = false
stdoutFd = 0
)
func init() {
stdoutFd = int(os.Stdout.Fd())
isTerm = term.IsTerminal(stdoutFd)
if isTerm {
noColor = os.Getenv("NO_COLOR") != ""
} else {
noColor = true
}
}
const (
Reset = "\033[0m"
Bold = "\033[01m"
Disable = "\033[02m"
Underline = "\033[04m"
Reverse = "\033[07m"
Strikethrough = "\033[09m"
Invisible = "\033[08m"
)
func Write(text ...interface{}) {
fmt.Print(text...)
}
func Printline(text ...interface{}) {
fmt.Print(text...)
fmt.Println(ClearLine(0))
}
func Fg4(col int) string {
if noColor {
return ""
}
if col < 8 {
return fmt.Sprintf("\033[%dm", 30+col)
}
return fmt.Sprintf("\033[%dm", 90-8+col)
}
func Fg8(col int) string {
if noColor {
return ""
}
return fmt.Sprintf("\033[38;5;%dm", col)
}
func Bg8(col int) string {
if noColor {
return ""
}
return fmt.Sprintf("\033[48;5;%dm", col)
}
func ClearLine(opt int) string {
// 0=to end, 1=from start, 2=all
return fmt.Sprintf("\033[%dK", opt)
}
func GetWidth() int {
if isTerm {
width, _, err := term.GetSize(stdoutFd)
if err == nil {
return width
}
}
return 80
}