macroman / terminal-progress-bar
Flexible ascii progress bar.
Installs: 37 270
Dependents: 1
Suggesters: 0
Security: 0
Stars: 52
Watchers: 2
Forks: 8
Open Issues: 0
pkg:composer/macroman/terminal-progress-bar
Requires
- php: >=7.0|>=8.0
README
Flexible ascii progress bar.
Installation
composer require macroman/terminal-progress-bar
Usage
First we create a Bar, giving it a format string
as well as the total, telling the progress bar when it will
be considered complete. Then call tick() when needed.
// examples/basic.php use TerminalProgress\Bar; $pg = new Bar(1000); for ($i = 0; $i < 1000; $i++) { usleep(10000); $pg->tick(); }
You can also use update(amount) to set the current tick value instead of ticking each time there is an increment:
// examples/update.php use TerminalProgress\Bar; $pg = new Bar(1000); for ($i = 0; $i < 1000; $i++) { usleep(10000); $pg->update($i); }
Options
These are properties in the object you can read/set:
symbolCompleteCompletion character defaulting to "="symbolIncompleteIncomplete character defaulting to " "throttleMinimum time between updates in seconds defaulting to 0.016currentCurrent ticktotalSame value passed in when initialisingsecondPrecisionNumber of decimal digits to use in "seconds" unitspercentPrecisionNumber of decimal digits to use in "percentage" unitspercent(read only) Current percentage completioneta(read only) Estimate seconds until completionrate(read only) Number of ticks per secondelapsed(read only) Seconds since initialisation
Tokens
These are tokens you can use in the format of your progress bar.
:barthe progress bar itself:currentcurrent tick number:totaltotal ticks:elapsedtime elapsed in seconds:percentcompletion percentage:etaestimated completion time in seconds:raterate of ticks per second
Format example
// examples/format.php // Full options new Bar(10, "Progress: [:bar] - :current/:total - :percent% - Elapsed::elapseds - ETA::etas - Rate::rate/s");
// examples/format_percent.php // Just percentage plus the bar new Bar(10, ":bar :percent%");
// examples/format_no_bar.php // You don't even have to have a bar new Bar(10, "Look mum, no bar! :current/:total - :percent% - Elapsed::elapseds - ETA::etas - Rate::rate/s");
Interrupt example
To display a message during progress bar execution, use interrupt()
// examples/interrupt.php $pg = new Bar(1000); for ($i = 0; $i < 1000; $i++) { usleep(10000); if ($i % 100 == 0) { // Interupt every 100th tick $pg->interupt($i); } $pg->tick(); }
Symbols/Precision example
To change the symbols or precision used on the progress bar
// examples/symbols.php $pg = new Bar(1000); $pg->symbolComplete = "#"; $pg->symbolIncomplete = "-"; $pg->secondPrecision = 2; $pg->percentPrecision = 4;
Throttle example
The draw interval is throttled at once per 100ms for performance. You can change this value if desired, eg lower for a smoother animation or higher if your work is resource intensive.
// examples/throttle.php $pg = new Bar(1000); $pg->throttle = 0.05; // Set a 50 millisecond throttle
License
See LICENSE