ysmrr

package module
v0.0.0-...-04856c9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2023 License: MIT Imports: 13 Imported by: 0

README

You spin me right round

Go Reference Go Version GoReportCard

You Spin Me Right Round (ysmrr) is a package that provides simple multi-line compatible spinners for Go applications.

Installing

go get -u github.com/chelnak/ysmrr

Usage

SpinnerManager

A 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.

Starting a spinner group
sm.Start()
Stopping a spinner group
sm.Stop()
Spinners

SpinnerManagers 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.

Updating the message

Thoughout the lifecycle of a spinner, you can update the message of the spinner.

spinner.UpdateMessage("Downloading...")
Spinner state

A spinner can be set to either Complete or Error to indicate the current state of a task.

spinner.Complete()
spinner.Error()
Example

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.

Inspiration

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.

Documentation

Overview

Package ysmrr provides a simple interface for creating and managing multiple spinners.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func WithAnimation

func WithAnimation(a animations.Animation) managerOption

WithAnimation sets the animation used for the spinners. Available spinner types can be found in the package github.com/zioc/ysmrr/pkg/animations. The default spinner animation is the Dots.

func WithCompleteColor

func WithCompleteColor(c colors.Color) managerOption

WithCompleteColor sets the color of the complete icon. Available colors can be found in the package github.com/zioc/ysmrr/pkg/colors. The default color is FgHiGreen.

func WithContext

func WithContext(context context.Context) managerOption

WithContext sets the context for spinner

func WithErrorColor

func WithErrorColor(c colors.Color) managerOption

WithErrorColor sets the color of the error icon. Available colors can be found in the package github.com/zioc/ysmrr/pkg/colors. The default color is FgHiRed.

func WithFrameDuration

func WithFrameDuration(d time.Duration) managerOption

WithFrameDuration sets the duration of each frame. The default duration is 250 milliseconds.

func WithMessageColor

func WithMessageColor(c colors.Color) managerOption

WithMessageColor sets the color of the message. Available colors can be found in the package github.com/zioc/ysmrr/pkg/colors. The default color is NoColor.

func WithSpinnerColor

func WithSpinnerColor(c colors.Color) managerOption

WithSpinnerColor sets the color of the spinners. Available colors can be found in the package github.com/zioc/ysmrr/pkg/colors. The default color is FgHiGreen.

func WithWriter

func WithWriter(w io.Writer) managerOption

WithWriter sets the writer used for the spinners. The writer can be anything that implements the io.Writer interface. The default writer is os.Stdout.

Types

type Spinner

type Spinner struct {
	// contains filtered or unexported fields
}

Spinner manages a single spinner

func NewSpinner

func NewSpinner(options SpinnerOptions) *Spinner

NewSpinner creates a new spinner instance.

func (*Spinner) Complete

func (s *Spinner) Complete()

Complete marks the spinner as complete.

func (*Spinner) Error

func (s *Spinner) Error()

Error marks the spinner as error.

func (*Spinner) GetMessage

func (s *Spinner) GetMessage() string

GetMessage returns the current spinner message.

func (*Spinner) IsComplete

func (s *Spinner) IsComplete() bool

IsComplete returns true if the spinner is complete.

func (*Spinner) IsError

func (s *Spinner) IsError() bool

IsError returns true if the spinner is in error state.

func (*Spinner) Print

func (s *Spinner) Print(w io.Writer, char string)

Print prints the spinner at a given position.

func (*Spinner) UpdateMessage

func (s *Spinner) UpdateMessage(message string)

UpdateMessage updates the spinner message.

func (*Spinner) UpdateMessagef

func (s *Spinner) UpdateMessagef(format string, a ...interface{})

UpdateMessagef updates the spinner message with a formatted string.

type SpinnerManager

type SpinnerManager interface {
	AddSpinner(msg string) *Spinner
	GetSpinners() []*Spinner
	SetSpinnersCount(count int)
	GetWriter() io.Writer
	GetAnimation() []string
	GetFrameDuration() time.Duration
	GetSpinnerColor() colors.Color
	GetErrorColor() colors.Color
	GetCompleteColor() colors.Color
	GetMessageColor() colors.Color
	Start()
	Stop()
}

SpinnerManager manages spinners

func NewSpinnerManager

func NewSpinnerManager(options ...managerOption) SpinnerManager

NewSpinnerManager is the constructor for the SpinnerManager. You can create a new manager with sensible defaults or you can pass in your own options using the provided methods.

For example, this will initialize a default manager:

sm := NewSpinnerManager()

Or this will initialize a manager with a custom animation:

sm := NewSpinnerManager(
	WithAnimation(animations.Arrows)
)

You can pass in multiple options to the constructor:

sm := NewSpinnerManager(
	WithAnimation(animations.Arrows),
	WithFrameDuration(time.Millisecond * 100),
	WithSpinnerColor(colors.Red),
)

type SpinnerOptions

type SpinnerOptions struct {
	SpinnerColor  colors.Color
	CompleteColor colors.Color
	ErrorColor    colors.Color
	MessageColor  colors.Color
	Message       string
	HasUpdate     chan bool
}

Directories

Path Synopsis
examples
pkg
animations
Package animations provides a collection of spinner animations.
Package animations provides a collection of spinner animations.
colors
Package colors provides a collection of color definitions for use with a spinner.
Package colors provides a collection of color definitions for use with a spinner.
tput
Package tput provides convenience functions for sending escape sequences to the terminal.
Package tput provides convenience functions for sending escape sequences to the terminal.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL