From 5a00a569846ae291b48b77fb13c0aa0b39456063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 25 Feb 2021 20:46:19 +0100 Subject: [PATCH] Check if the terminal supports UTF-8 before outputting unicode symbols --- adapter/handlebars/handlebars.go | 4 ++-- adapter/handlebars/helpers/list.go | 9 +++++++-- adapter/term/term.go | 8 ++++++++ cmd/container.go | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/adapter/handlebars/handlebars.go b/adapter/handlebars/handlebars.go index 60cc353..e565041 100644 --- a/adapter/handlebars/handlebars.go +++ b/adapter/handlebars/handlebars.go @@ -12,10 +12,10 @@ import ( "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.RegisterDate(logger) - helpers.RegisterList() + helpers.RegisterList(supportsUTF8) helpers.RegisterPrepend(logger) helpers.RegisterShell(logger) helpers.RegisterSlug(lang, logger) diff --git a/adapter/handlebars/helpers/list.go b/adapter/handlebars/helpers/list.go index cab9432..1243165 100644 --- a/adapter/handlebars/helpers/list.go +++ b/adapter/handlebars/helpers/list.go @@ -8,10 +8,15 @@ import ( // RegisterList registers a {{list}} template helper which formats a slice of // strings into a bulleted list. -func RegisterList() { +func RegisterList(supportsUTF8 bool) { itemify := func(text string) string { + bullet := "-" + if supportsUTF8 { + bullet = "‣" + } + lines := strings.SplitAfter(strings.TrimRight(text, "\n"), "\n") - return " ‣ " + strings.Join(lines, " ") + return " " + bullet + " " + strings.Join(lines, " ") } raymond.RegisterHelper("list", func(items []string) string { diff --git a/adapter/term/term.go b/adapter/term/term.go index ee0f227..4aa97bc 100644 --- a/adapter/term/term.go +++ b/adapter/term/term.go @@ -2,6 +2,7 @@ package term import ( "os" + "strings" "github.com/mattn/go-isatty" ) @@ -25,3 +26,10 @@ func (t *Terminal) IsInteractive() bool { 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") +} diff --git a/cmd/container.go b/cmd/container.go index 102ccfa..31e755f 100644 --- a/cmd/container.go +++ b/cmd/container.go @@ -51,7 +51,7 @@ func (c *Container) OpenZk() (*zk.Zk, error) { func (c *Container) TemplateLoader(lang string) *handlebars.Loader { 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() } return c.templateLoader