mirror of
https://github.com/docker/cli.git
synced 2026-01-26 15:41:42 +03:00
Do not use the fancy colored output if NO_COLOR variable is set to 1 following the https://no-color.org/ convention. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
|
|
//go:build go1.24
|
|
|
|
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/docker/cli/cli/streams"
|
|
"github.com/morikuni/aec"
|
|
)
|
|
|
|
type Output struct {
|
|
*streams.Out
|
|
noColor bool
|
|
}
|
|
|
|
type terminalPrintable interface {
|
|
String(isTerminal bool) string
|
|
}
|
|
|
|
func NewOutput(out *streams.Out) Output {
|
|
noColor := !out.IsTerminal()
|
|
if os.Getenv("NO_COLOR") != "" {
|
|
noColor = true
|
|
}
|
|
return Output{
|
|
Out: out,
|
|
noColor: noColor,
|
|
}
|
|
}
|
|
|
|
func (o Output) Color(clr aec.ANSI) aec.ANSI {
|
|
if o.noColor {
|
|
return ColorNone
|
|
}
|
|
return clr
|
|
}
|
|
|
|
func (o Output) Sprint(all ...any) string {
|
|
var out []any
|
|
for _, p := range all {
|
|
if s, ok := p.(terminalPrintable); ok {
|
|
out = append(out, s.String(!o.noColor))
|
|
} else {
|
|
out = append(out, p)
|
|
}
|
|
}
|
|
return fmt.Sprint(out...)
|
|
}
|
|
|
|
func (o Output) PrintlnWithColor(clr aec.ANSI, args ...any) {
|
|
msg := o.Sprint(args...)
|
|
if !o.noColor {
|
|
msg = clr.Apply(msg)
|
|
}
|
|
_, _ = fmt.Fprintln(o.Out, msg)
|
|
}
|
|
|
|
func (o Output) Println(p ...any) {
|
|
_, _ = fmt.Fprintln(o.Out, o.Sprint(p...))
|
|
}
|
|
|
|
func (o Output) Print(p ...any) {
|
|
_, _ = fmt.Print(o.Out, o.Sprint(p...))
|
|
}
|