The progress-stream Library

Many text-mode programs that perform long-running, non-interactive tasks (such as compilers) provide a running indication of what fraction of the task is complete using a bar graph drawn using text characters. This library implements a wrapper stream that interleaves the progress bar graph with any status output. When output is not directed to a console then progress updates are ignored.

<progress-stream> Abstract Instantiable Class
Superclasses:

<wrapper-stream>

Init-Keywords:
  • force? – If true, forces the wrapped stream to be treated as a console, allowing textual progress bar output.

Keyword:

bar-width: An instance of <integer> representing the number of bar characters to be included in textual progress bar output. Defaults to 40.

Keyword:

line-width: An instance of <integer> representing the total line width (including both progress bar and label) in characters. Defaults to 79.

show-progress Generic function
Signature:

show-progress (stream position range #key label) => ()

Parameters:
Discussion:

Graphically displays the current progress, proportional to position divided by range, to the given stream. In the case where stream is a console (i.e., unredirected *standard-output*), show-progress will draw a textual progress bar with overall width configured in the <progress-stream> instance.

stream-supports-show-progress? Generic function
Signature:

stream-supports-show-progress? (stream) => (supports-show-progress?)

Parameters:
Values:
  • supports-show-progress? – An instance of <boolean>.

Discussion:

Returns a true value if the stream argument can usefully support the show-progress operation.