From bad4fb7feaf0d6c4b6f5f3d2b406754f071ee181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 23 Apr 2020 15:01:48 +0200 Subject: [PATCH 1/2] Allow `%` characters in FinalMSG FinalMSG is not intended to be a format string for `printf`, so it should not be passed as such. --- spinner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinner.go b/spinner.go index 9d0c128..f981708 100644 --- a/spinner.go +++ b/spinner.go @@ -334,7 +334,7 @@ func (s *Spinner) Stop() { } s.erase() if s.FinalMSG != "" { - fmt.Fprintf(s.Writer, s.FinalMSG) + fmt.Fprint(s.Writer, s.FinalMSG) } s.stopChan <- struct{}{} } From 35cf5721cf696ef78ab8cddaaad16343f853f6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 23 Apr 2020 15:02:31 +0200 Subject: [PATCH 2/2] Simplify printing in `erase()` - `print` instead of `printf` since there is no format string - use `strings.Repeat` instead of a printing loop --- spinner.go | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/spinner.go b/spinner.go index f981708..b009cf7 100644 --- a/spinner.go +++ b/spinner.go @@ -14,13 +14,13 @@ package spinner import ( - "encoding/hex" "errors" "fmt" "io" "os" "runtime" "strconv" + "strings" "sync" "time" "unicode/utf8" @@ -393,20 +393,13 @@ func (s *Spinner) UpdateCharSet(cs []string) { func (s *Spinner) erase() { n := utf8.RuneCountInString(s.lastOutput) if runtime.GOOS == "windows" { - clearString := "\r" - for i := 0; i < n; i++ { - clearString += " " - } - clearString += "\r" - fmt.Fprintf(s.Writer, clearString) + clearString := "\r" + strings.Repeat(" ", n) + "\r" + fmt.Fprint(s.Writer, clearString) s.lastOutput = "" return } - del, _ := hex.DecodeString("7f") - for _, c := range []string{"\b", string(del), "\b", "\033[K"} { // "\033[K" for macOS Terminal - for i := 0; i < n; i++ { - fmt.Fprintf(s.Writer, c) - } + for _, c := range []string{"\b", "\127", "\b", "\033[K"} { // "\033[K" for macOS Terminal + fmt.Fprint(s.Writer, strings.Repeat(c, n)) } s.lastOutput = "" }