Check if the terminal supports UTF-8 before outputting unicode symbols

pull/6/head
Mickaël Menu 3 years ago
parent fbbf8e53dc
commit 5a00a56984
No known key found for this signature in database
GPG Key ID: 53D73664CD359895

@ -12,10 +12,10 @@ import (
"github.com/mickael-menu/zk/util/errors" "github.com/mickael-menu/zk/util/errors"
) )
func Init(lang string, logger util.Logger, styler style.Styler) { func Init(lang string, supportsUTF8 bool, logger util.Logger, styler style.Styler) {
helpers.RegisterConcat() helpers.RegisterConcat()
helpers.RegisterDate(logger) helpers.RegisterDate(logger)
helpers.RegisterList() helpers.RegisterList(supportsUTF8)
helpers.RegisterPrepend(logger) helpers.RegisterPrepend(logger)
helpers.RegisterShell(logger) helpers.RegisterShell(logger)
helpers.RegisterSlug(lang, logger) helpers.RegisterSlug(lang, logger)

@ -8,10 +8,15 @@ import (
// RegisterList registers a {{list}} template helper which formats a slice of // RegisterList registers a {{list}} template helper which formats a slice of
// strings into a bulleted list. // strings into a bulleted list.
func RegisterList() { func RegisterList(supportsUTF8 bool) {
itemify := func(text string) string { itemify := func(text string) string {
bullet := "-"
if supportsUTF8 {
bullet = "‣"
}
lines := strings.SplitAfter(strings.TrimRight(text, "\n"), "\n") lines := strings.SplitAfter(strings.TrimRight(text, "\n"), "\n")
return " ‣ " + strings.Join(lines, " ") return " " + bullet + " " + strings.Join(lines, " ")
} }
raymond.RegisterHelper("list", func(items []string) string { raymond.RegisterHelper("list", func(items []string) string {

@ -2,6 +2,7 @@ package term
import ( import (
"os" "os"
"strings"
"github.com/mattn/go-isatty" "github.com/mattn/go-isatty"
) )
@ -25,3 +26,10 @@ func (t *Terminal) IsInteractive() bool {
func (t *Terminal) IsTTY() bool { func (t *Terminal) IsTTY() bool {
return isatty.IsTerminal(os.Stdin.Fd()) 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")
}

@ -51,7 +51,7 @@ func (c *Container) OpenZk() (*zk.Zk, error) {
func (c *Container) TemplateLoader(lang string) *handlebars.Loader { func (c *Container) TemplateLoader(lang string) *handlebars.Loader {
if c.templateLoader == nil { if c.templateLoader == nil {
handlebars.Init(lang, c.Logger, c.Terminal) handlebars.Init(lang, c.Terminal.SupportsUTF8(), c.Logger, c.Terminal)
c.templateLoader = handlebars.NewLoader() c.templateLoader = handlebars.NewLoader()
} }
return c.templateLoader return c.templateLoader

Loading…
Cancel
Save