Spinny is a tiny terminal spinner package for Nim Programming Language.
You can use Nimble to install the package by running:
nimble install spinny
This library uses threads for spinners, so you have to compile your application
(or add to your nim.cfg
):
--threads:on
Spinny is quite easy to use. You can set the color, text or symbol of an already running spinner.
import spinny, os
var spinner1 = newSpinny("Loading file..".fgWhite, Dots)
spinner1.setSymbolColor(fgBlue)
spinner1.start()
# do some work here
for x in countup(5, 10):
sleep(500)
spinner1.success("File was loaded successfully.")
var spinner2 = newSpinny("Downloading files..".fgBlue, Dots5)
spinner2.setSymbolColor(fgLightBlue)
spinner2.start()
# do some work here
for x in countup(5, 10):
sleep(500)
spinner2.error("Sorry, something went wrong during downloading!")
You can even use custom spinners if predefined ones aren't suitable for your needs.
import spinny, os
# makeSpinner accepts two arguments - the interval between different frames,
# and frames themselves (as a sequence of strings)
var spinner3 = newSpinny("I'm custom.", makeSpinner(100, @["x", "y"]))
spinner3.setSymbolColor(fgGreen)
spinner3.start()
# do some magnificent work here
for x in countup(1, 5):
sleep(500)
spinner3.success("Looks like it's working!")
Spinny embeds the colorize library for terminal colors.
For spinners to use, take a look at the src/spinners.nim
file. (Credit goes to sindresorhus)
The following procs are available on a Spinny
object:
setSymbolColor*(spinny: Spinny, color: proc(x: string): string)
setSymbol*(spinny: Spinny, symbol: string)
setText*(spinny: Spinny, text: string)
start*(spinny: Spinny)
stop*(spinny: Spinny)
success*(spinny: Spinny, msg: string)
error*(spinny: Spinny, msg: string)
All contributions are welcome. Feel free to make this project better. :)
- Mark Molnar
- MIT