zk/adapter/term/term.go

36 lines
833 B
Go
Raw Normal View History

package term
import (
"os"
"strings"
"github.com/mattn/go-isatty"
)
// Terminal offers utilities to interact with the terminal.
type Terminal struct {
NoInput bool
}
func New() *Terminal {
return &Terminal{}
}
// IsInteractive returns whether the app is attached to an interactive terminal
// and can prompt the user.
func (t *Terminal) IsInteractive() bool {
2021-02-24 20:49:56 +00:00
return !t.NoInput && t.IsTTY()
}
// IsTTY returns whether the app is attached to an interactive terminal.
func (t *Terminal) IsTTY() bool {
return isatty.IsTerminal(os.Stdin.Fd())
}
// SupportsUTF8 returns whether the computer is configured to support UTF-8.
func (t *Terminal) SupportsUTF8() bool {
lang := strings.ToUpper(os.Getenv("LANG"))
lc := strings.ToUpper(os.Getenv("LC_ALL"))
return strings.Contains(lang, "UTF") || strings.Contains(lc, "UTF")
}