Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
package clispinner
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/briandowns/spinner"
|
|
)
|
|
|
|
var (
|
|
terminalCharset = spinner.CharSets[4]
|
|
terminalRefreshRate = time.Millisecond * 200
|
|
terminalColor = "blue"
|
|
)
|
|
|
|
type TermSpinner struct {
|
|
sp *spinner.Spinner
|
|
charset []string
|
|
}
|
|
|
|
// newTermSpinner creates a new terminal spinner.
|
|
func newTermSpinner(o Options) *TermSpinner {
|
|
text := o.text
|
|
if text == "" {
|
|
text = DefaultText
|
|
}
|
|
|
|
charset := o.charset
|
|
if len(charset) == 0 {
|
|
charset = terminalCharset
|
|
}
|
|
|
|
spOptions := []spinner.Option{
|
|
spinner.WithColor(terminalColor),
|
|
spinner.WithSuffix(" " + text),
|
|
}
|
|
|
|
if o.writer != nil {
|
|
spOptions = append(spOptions, spinner.WithWriter(o.writer))
|
|
}
|
|
|
|
return &TermSpinner{
|
|
sp: spinner.New(charset, terminalRefreshRate, spOptions...),
|
|
charset: charset,
|
|
}
|
|
}
|
|
|
|
// SetText sets the text for spinner.
|
|
func (s *TermSpinner) SetText(text string) Spinner {
|
|
s.sp.Lock()
|
|
s.sp.Suffix = " " + text
|
|
s.sp.Unlock()
|
|
return s
|
|
}
|
|
|
|
// SetPrefix sets the prefix for spinner.
|
|
func (s *TermSpinner) SetPrefix(text string) Spinner {
|
|
s.sp.Lock()
|
|
s.sp.Prefix = text + " "
|
|
s.sp.Unlock()
|
|
return s
|
|
}
|
|
|
|
// SetCharset sets the prefix for spinner.
|
|
func (s *TermSpinner) SetCharset(charset []string) Spinner {
|
|
s.sp.UpdateCharSet(charset)
|
|
return s
|
|
}
|
|
|
|
// SetColor sets the prefix for spinner.
|
|
func (s *TermSpinner) SetColor(color string) Spinner {
|
|
_ = s.sp.Color(color)
|
|
return s
|
|
}
|
|
|
|
// Start starts spinning.
|
|
func (s *TermSpinner) Start() Spinner {
|
|
s.sp.Start()
|
|
return s
|
|
}
|
|
|
|
// Stop stops spinning.
|
|
func (s *TermSpinner) Stop() Spinner {
|
|
s.sp.Stop()
|
|
s.sp.Prefix = ""
|
|
_ = s.sp.Color(terminalColor)
|
|
s.sp.UpdateCharSet(s.charset)
|
|
s.sp.Stop()
|
|
return s
|
|
}
|
|
|
|
// IsActive returns whether the spinner is currently active.
|
|
func (s *TermSpinner) IsActive() bool {
|
|
return s.sp.Active()
|
|
}
|
|
|
|
// Writer returns the spinner writer.
|
|
func (s *TermSpinner) Writer() io.Writer {
|
|
return s.sp.Writer
|
|
}
|