83 lines
1.2 KiB
Go
83 lines
1.2 KiB
Go
|
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
|
||
|
}
|