Terminal::Spinners
Simple spinners and progress bars for Raku.
Install
zef install Terminal::Spinners
Usage
Classic Spinner |/-\
my $spinner = Spinner.new; # a new default (classic) spinner my $promise = Promise.start: { sleep 2; 40 + 2 }; # promise of your long running process my $result = $spinner.await: $promise; # await returns the promise result
-or-
my $classic = Spinner.new; # a new default (classic) spinner my $promise = start sleep 2; # promise of your long running process until $promise.status { $classic.next; # prints the next spinner frame }
Hash Progress Bar [##########..........] 50.00%
my $hash-bar = Bar.new; # defaults to the hash progress bar $hash-bar.show: 0; # print a 0% progress bar for 1 .. 3000 { my $percent = $_ / 3000 * 100; # calculate a percentage sleep 0.0002; # do iterative work here $hash-bar.show: $percent; # print the progress bar and percent }
More options
For spinners you can set the speed:
my $spinner = Spinner.new: speed => 0; # speed in seconds # defaults to 0.08. this provides smooth animation for use as in the example above. # 0 seconds can be useful if you want to print the next frame each time an action occurs.
And change the type of spinner:
my $spinner = Spinner.new: type => 'bounce';
Choose from these types:
classic | / - \ bounce [= ] [== ] [=== ] [ ===] [ ==] [ =] [ ] [ =] [ ==] [ ===] [====] [=== ] [== ] [= ] [ ] bounce2 ( ● ) ( ● ) ( ● ) ( ● ) ( ●) ( ● ) ( ● ) ( ● ) ( ● ) (● ) dots ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ dots2 ⢄ ⢂ ⢁ ⡁ ⡈ ⡐ ⡠ dots3 ⠈ ⠐ ⠠ ⢀ ⡀ ⠄ ⠂ ⠁ three-dots . .. ... three-dots2 . .. ... .. . bar ▁ ▃ ▄ ▅ ▆ ▇ ▆ ▅ ▄ ▃ ▁ bar2 ▏ ▎ ▍ ▌ ▊ ▉ ▊ ▋ ▌ ▍ ▎
For bars you can change the length:
my $bar = Bar.new: length => 50;
And you can change the type:
my $bar = Bar.new: type => 'equals';
Choose from these types:
hash [##########..........] 50.00% hash-dash [##########----------] 50.00% equals [========== ] 50.00% bar ███████████░░░░░░░░░░░ 50.00%
Adverbs
:no-overwrite
or :now
:
Suppresses overwriting the previous spinner/bar. Works with next()
, await()
, and show()
methods. Particularly useful on Windows where the formatting is not as expected when printing in combination with other text.
:no-print
or :nop
:
Suppresses printing and also skips any animation delays. Works with the next()
and show()
methods, which also return the spinner-frame or progress-bar, respectively, as a string.
:no-final-newline
or :non
:
By default, await()
will print a newline when it's done waiting for the promise. This suppresses that newline. Only works with the await()
method.
Copyright
Copyright (c) 2018-2020, ryn1x
License
Terminal::Spinners is released under the Artistic License 2.0.