forked from toolshed/abra
We were running behind and there were quite some deprecations to update. This was mostly in the upstream copy/pasta package but seems quite minimal.
63 lines
1.1 KiB
Go
63 lines
1.1 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.22
|
|
|
|
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/docker/cli/cli/streams"
|
|
"github.com/morikuni/aec"
|
|
)
|
|
|
|
type Output struct {
|
|
*streams.Out
|
|
isTerminal bool
|
|
}
|
|
|
|
type terminalPrintable interface {
|
|
String(isTerminal bool) string
|
|
}
|
|
|
|
func NewOutput(out *streams.Out) Output {
|
|
return Output{
|
|
Out: out,
|
|
isTerminal: out.IsTerminal(),
|
|
}
|
|
}
|
|
|
|
func (o Output) Color(clr aec.ANSI) aec.ANSI {
|
|
if o.isTerminal {
|
|
return clr
|
|
}
|
|
return ColorNone
|
|
}
|
|
|
|
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.isTerminal))
|
|
} else {
|
|
out = append(out, p)
|
|
}
|
|
}
|
|
return fmt.Sprint(out...)
|
|
}
|
|
|
|
func (o Output) PrintlnWithColor(clr aec.ANSI, args ...any) {
|
|
msg := o.Sprint(args...)
|
|
if o.isTerminal {
|
|
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...))
|
|
}
|