From 6e3af646b2e39c510a70c26f7a77c87e691e577c Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 15 Jan 2020 10:43:09 +0900 Subject: [PATCH] Draw spinner with Unicode characters --- src/constants.go | 2 +- src/terminal.go | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/constants.go b/src/constants.go index 5b85d8a..c568932 100644 --- a/src/constants.go +++ b/src/constants.go @@ -25,7 +25,7 @@ const ( // Terminal initialDelay = 20 * time.Millisecond initialDelayTac = 100 * time.Millisecond - spinnerDuration = 200 * time.Millisecond + spinnerDuration = 100 * time.Millisecond previewCancelWait = 500 * time.Millisecond maxPatternLength = 300 maxMulti = math.MaxInt32 diff --git a/src/terminal.go b/src/terminal.go index 9a72d08..f31ed1e 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -61,6 +61,7 @@ var emptyLine = itemLine{} type Terminal struct { initDelay time.Duration infoStyle infoStyle + spinner []string prompt string promptLen int queryLen [2]int @@ -145,8 +146,6 @@ func (a byTimeOrder) Less(i, j int) bool { return a[i].at.Before(a[j].at) } -var _spinner = []string{`-`, `\`, `|`, `/`, `-`, `\`, `|`, `/`} - const ( reqPrompt util.EventType = iota reqInfo @@ -380,9 +379,14 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal { wordRubout = fmt.Sprintf("%s[^%s]", sep, sep) wordNext = fmt.Sprintf("[^%s]%s|(.$)", sep, sep) } + spinner := []string{`⠋`, `⠙`, `⠹`, `⠸`, `⠼`, `⠴`, `⠦`, `⠧`, `⠇`, `⠏`} + if !opts.Unicode { + spinner = []string{`-`, `\`, `|`, `/`, `-`, `\`, `|`, `/`} + } t := Terminal{ initDelay: delay, infoStyle: opts.InfoStyle, + spinner: spinner, queryLen: [2]int{0, 0}, layout: opts.Layout, fullscreen: fullscreen, @@ -744,8 +748,8 @@ func (t *Terminal) printInfo() { t.move(1, 0, true) if t.reading { duration := int64(spinnerDuration) - idx := (time.Now().UnixNano() % (duration * int64(len(_spinner)))) / duration - t.window.CPrint(tui.ColSpinner, t.strong, _spinner[idx]) + idx := (time.Now().UnixNano() % (duration * int64(len(t.spinner)))) / duration + t.window.CPrint(tui.ColSpinner, t.strong, t.spinner[idx]) } t.move(1, 2, false) pos = 2