progress.determinate

Determine progress indicator (aka a "progress bar"), for the case where the
progress of a long-running task can be determined.

animate!

macro

(animate! a & body)
Wraps execution of the given forms in a determinate progress indicator,
monitoring atom `a` (a number between 0 and (:total opts), representing
progress). If the first form is the keyword `:opts`, the second form must be an
opts map.

The opts map (if present) may optionally contain these keys:
   :style     - a map defining the style (characters, colours, and attributes)
                to use when printing the progress indicator
                Optional, default: (:ascii-basic styles)
   :label     - a String to display before the progress indicator - this could
                be the filename for a lengthy file download, for example
                Optional, default: nil
   :line      - the line number on the screen at which to display the progress
                indicator (note: 1-based)
                Optional, default: nil (display at current location)
   :width     - the (approximate) desired width of the progress indicator,
                including any labels and counters.  This is approximate because
                emoji-based styles may not take up an even fraction of the
                desired width
                Optional, default: 72
   :total     - the final number that the atom will reach
                Optional, default: 100 (i.e. the atom represents a %age)
   :units     - a unit label (String) to display after the counter
                Optional, default: nil
   :preserve? - flag indicating whether to preserve the progress indicator on
                screen after it finishes (vs erasing it)
                Optional, default: false (erase it)
   :counter?  - whether to display a counter to the right of the progress
                indicator
                Optional, default: true (display a counter)

animatef!

(animatef! a f)(animatef! a opts f)
Wraps execution of the given function in a determinate progress indicator,
monitoring atom `a` (a number between 0 and (:total opts), representing
progress). An optional options map (`opts`) may also be provided.

Note that the `animate!` macro is preferred over this function.

opts is a map, optionally containing these keys:
   :style     - a map defining the style (characters, colours, and attributes)
                to use when printing the progress indicator
                Optional, default: (:ascii-basic styles)
   :label     - a String to display before the progress indicator - this could
                be the filename for a lengthy file download, for example
                Optional, default: nil
   :line      - the line number on the screen at which to display the progress
                indicator (note: 1-based)
                Optional, default: nil (display at current location)
   :width     - the (approximate) desired width of the progress indicator,
                including any labels and counters.  This is approximate because
                emoji-based styles may not take up an even fraction of the
                desired width
                Optional, default: 72
   :total     - the final number that the atom will reach
                Optional, default: 100 (i.e. the atom represents a %age)
   :units     - a unit label (String) to display after the counter
                Optional, default: nil
   :preserve? - flag indicating whether to preserve the progress indicator on
                screen after it finishes (vs erasing it)
                Optional, default: false (erase it)
   :counter?  - whether to display a counter to the right of the progress
                indicator
                Optional, default: true (display a counter)

default-style

The default determinate progress indicator style used, if one isn't
specified.  This is known to function on all platforms.

styles

A selection of predefined styles of determinate progress indicators. Only
ASCII progress indicators are known to work reliably - other styles depend on
the operating system, terminal font & encoding, phase of the moon, and how long
since your dog last pooped.