You Spin Me Right Round (ysmrr) is a package that provides simple multi-line compatible spinners for Go applications.
go get -u github.com/chelnak/ysmrrA SpinnerManager is a collection of spinners that share a common configuration.
They can be created as follows:
sm := ysmrr.NewSpinnerManager()The NewSpinnerManager method also accepts multiple options. For example, you can change the animation and the color of the spinner:
sm := ysmrr.NewSpinnerManager(
ysmrr.WithAnimation(animations.Pipe),
ysmrr.WithSpinnerColor(colors.FgHiBlue),
)A SpinnerManager is also responsible for starting and stopping a group of spinners.
sm.Start()sm.Stop()Running Stop() on a stopped spinner group is a noop operation.
sm := ysmrr.NewSpinnerManager()
sm.Start()
isRunning := sm.Running() // true
sm.Stop()
isRunning = sm.Running() // falseSpinnerManagers are great but pretty useless on their own. You need to add at least one spinner.
Adding a new spinner is as simple as using the AddSpinner method on a SpinnerManager instance.
It expects a string that will be displayed as the initial message of a spinner.
spinner := sm.AddSpinner("Downloading...")AddSpinner will return a spinner instance that you can use to control the spinner.
Thoughout the lifecycle of a spinner, you can update the message of the spinner.
spinner.UpdateMessage("Downloading...")A spinner can be set to either Complete or Error to indicate the current state of a task.
spinner.Complete()spinner.Error()To tie everything together, here is an example that shows how to build a basic spinner app.
// Create a new spinner manager
sm := ysmrr.NewSpinnerManager()
// Add a spinner
mySpinner := sm.AddSpinner("Spinny things...")
// Start the spinners that have been added to the group
sm.Start()
// Set the spinner to complete
time.Sleep(2 * time.Second)
mySpinner.Complete()
// Stop the spinners in the group
time.Sleep(2 * time.Second)
sm.Stop()For more usage examples, check out the examples directory.
Ysmrr was inspired by the following projects:
It also uses github.com/fatih/color for the underlying color system and github.com/mattn/go-colorable for Windows support.
