This library allows for exploiting the color and attribute facilities of
most modern terminals using ANSI escape sequences. This library provides
the following:
The behavior of this library is controlled by two Prolog flags:
- [99, 111, 108, 111, 114, 95, 116, 101, 114, 109]
- When
true
, activate the color output for this library. Otherwise
simply call format/3.
- [104, 121, 112, 101, 114, 108, 105, 110, 107, 95, 116, 101, 114, 109]
- Emit terminal hyperlinks for
url(Location)
and url(URL, Label)
elements of Prolog messages.
- See also
- - http://en.wikipedia.org/wiki/ANSI_escape_code
- ansi_format(+ClassOrAttributes, +Format, +Args) is det
- 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, a list thereof or a term
that is mapped to concrete attributes based on the current theme
(see prolog:console_color/2). 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)
- For
fg(Color)
and bg(Color)
, the colour name can be '#RGB' or
'#RRGGBB'
- fg8(Spec),bg8(Spec)
- 8-bit color specification. Spec is a colour name,
h(Color)
or an integer 0..255.
- fg(R,G,B),bg(R,G,B)
- 24-bit (direct color) specification. The components are
integers in the range 0..255.
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
.
- prolog:console_color(+Term, -AnsiAttributes) is semidet[multifile]
- Hook that allows for mapping abstract terms to concrete ANSI
attributes. This hook is used by theme files to adjust the
rendering based on user preferences and context. Defaults are
defined in the file
boot/messages.pl
.
- See also
- - library(theme/dark) for an example implementation and the Term
values used by the system messages.
- prolog:message_line_element(+Stream, +Term) is semidet[multifile]
- Hook implementation that deals with
ansi(+Attr, +Fmt, +Args)
in
message specifications.
- ansi_hyperlink(+Stream, +Location) is det
- ansi_hyperlink(+Stream, +URL, +Label) is det
- Create a hyperlink for a terminal emulator. The file is fairly easy,
but getting the line and column across is not as there seems to be
no established standard. The current implementation emits, i.e.,
inserting a capital
L
before the line.
``file://AbsFileName[#LLine[:Column]]``
- See also
- - https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
- ansi_get_color(+Which, -RGB) is semidet
- Obtain the RGB color for an ANSI color parameter. Which is either a
color alias or an integer ANSI color id. Defined aliases are
foreground
and background
. This predicate sends a request to the
console (user_output
) and reads the reply. This assumes an xterm
compatible terminal.
- Arguments:
-
RGB | - is a term rgb(Red,Green,Blue) . The color components are
integers in the range 0..65535. |
Re-exported predicates
The following predicates are exported from this file while their implementation is defined in imported modules or non-module files loaded by this module.
- ansi_hyperlink(+Stream, +Location) is det
- ansi_hyperlink(+Stream, +URL, +Label) is det
- Create a hyperlink for a terminal emulator. The file is fairly easy,
but getting the line and column across is not as there seems to be
no established standard. The current implementation emits, i.e.,
inserting a capital
L
before the line.
``file://AbsFileName[#LLine[:Column]]``
- See also
- - https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda