SWI-Prolog 8.0.3 Reference Manual: Section A.2

## A.2 library(ansi_term): Print decorated text to ANSI consoles

See also
  http://en.wikipedia.org/wiki/ANSI_escape_code

This library allows for exploiting the color and attribute facilities of most modern terminals using ANSI escape sequences. This library provides the following:

- ansi_format/3 allows writing messages to the terminal with ansi attributes.
- It defines the hook prolog:message_line_element/2, which provides ansi attributes for print_message/2.

[det]ansi_format(+Attributes, +Format, +Args)
  Format text with ANSI attributes. This predicate behaves as format/2 using Format and Args, but if the `current_output` is a terminal, it adds ANSI escape sequences according to Attributes. For example, to print a text in bold cyan, do

      ?- ansi_format([bold,fg(cyan)], 'Hello ~w', [world]).

  Attributes is either a single attribute or a list thereof. The attribute names are derived from the ANSI specification. See the source for sgr_code/2 for details. Some commonly used attributes are:

  - bold
  - underline
  - `fg(Color)`, `bg(Color)`, `hfg(Color)`, `hbg(Color)`

  Defined color constants are below. `default` can be used to access the default color of the terminal.

  - black, red, green, yellow, blue, magenta, cyan, white

  ANSI sequences are sent if and only if

  - The `current_output` has the property `tty(true)` (see stream_property/2).
  - The Prolog flag `color_term` is `true`.
[semidet,multifile]prolog:message_line_element(+Stream, +Term)
  Hook implementation that deals with `ansi(+Attr, +Fmt, +Args)` in message specifications.