cl-progress-bar

2021-12-09

Display progress bars directly in REPL.

Upstream URL

github.com/sirherrbatka/cl-progress-bar

Author

Marek Kochanowicz

Maintainer

Marek Kochanowicz

License

MIT
README

cl-progress-bar

Progress bars, just like in the quicklisp!

Description

This library provides almost the same code as used inside quicklisp for drawning progress bars. Differences includeare:

  • Different API.
  • Thread safety.
  • Does not assume that progress bar is representing download progress. Finish message contains just formatted duration (in hours, minutes, seconds format).

Examples

Basic exapmle demonstrated below:

(defun perform-step () ; Calls to the update can occur anywhere.
  (sleep 1)
  (cl-progress-bar:update 1))

(setf cl-progress-bar:*progress-bar-enabled* t) ; nil by default, must be t to actually display anything.
(cl-progress-bar:with-progress-bar (5 "This is just a example. Number of steps is ~a." 5)
  (dotimes (i 5) (perform-step)))

The above should print the following message after execution.

This is just a example. Number of steps is 5.
==================================================
Finished in 5.00 seconds

The progress bar itself is composed from '=' and will grow gradually.

Full blown example can be seen in cl-data-structures

Establishing progress bar: https://github.com/sirherrbatka/cl-data-structures/blob/2b3d8489819b18a1f914777fe1d13da7a72223c2/src/utils/clustering/external-functions.lisp#L71

Updating progress bar: https://github.com/sirherrbatka/cl-data-structures/blob/2b3d8489819b18a1f914777fe1d13da7a72223c2/src/utils/clustering/internal-functions.lisp#L355

Threads

Because progress bar instance is bound to the special variable, in case of calling the update function on different thread you should ensure that cl-progress-bar:progress-bar is bound yourself.

Dependencies (2)

  • bordeaux-threads
  • documentation-utils-extensions

Dependents (0)

    • GitHub
    • Quicklisp