io_ansi (stdlib v7.3)
View SourceControlling the terminal using virtual terminal sequences (aka ANSI escape codes).
This module provides an interface to emit and parse virtual terminal sequences (VTS), also known as ANSI escape codes. VTS can be used to:
- change the style of text or background in the terminal by adding color or emphasis.
- delete printed characters or lines.
- move, hide or show the cursor
and more things. As different terminals are interpret VTSs slightly
differently, io_ansi uses the local terminfo database together with
predefined sequences to emit the correct sequence for the terminal that is
currently used. To fetch values directly from the terminfo database you can use
tput/2, tigetnum/1 and tigetflag/1.
io_ansi provides two interfaces to emit sequences. You can either call the
function representing the sequence you want to emit, for example io_ansi:blue()
and it will return the sequence representing blue.
1> io_ansi:blue().
<<"\e[34m">>This will use the terminfo database locally where the call is made, so it may not be correct if used across nodes.
You can also use the io_ansi:format/1,2,3 functions
which works just as io_lib:bformat/3, except that it also accepts atoms and
tuples that represent VTSs. For example:
1> io_ansi:format([blue,"~p"], [red]).
<<"\e[34mred\e(B\e[m">>io_ansi:format/3 will automatically reset the terminal to its original state
and strip any VTSs that are not supported by the terminal. It can also be disabled
through an option. For example:
1> io_ansi:format([blue,"~p"], [red], [{enabled, false}]).
<<"red">>Finally there is io_ansi:fwrite/1,2,3,4 which does not
return the string to be printed, but instead sends it to the io:device/0
that should handle it. io_ansi:fwrite/4 works across nodes and will use the
terminfo database where the data is outputted to decide what to emit.
Summary
Types
Virtual terminal sequences that control the background color.
Virtual terminal sequences that control color.
Virtual terminal sequences that controls the cursor.
Virtual terminal sequences that control the foreground (aka text) color.
Virtual terminal sequences that control whether emitted text shall be a hyper link or not.
Virtual terminal sequences for cursor input.
Virtual terminal sequences that control text style.
Virtual terminal sequences that works with tabs.
Virtual terminal sequences that works on text.
Virtual terminal sequences that control text formatting.
Virtual terminal sequences that can erase or overwrite text.
Virtual terminal sequences that control underline color.
Virtual terminal sequences that control underline style.
Virtual terminal sequences.
Virtual terminal sequences that controls the screen.
Functions
Enable the alternate characters set mode
Disable the alternate characters set mode
Activate the alternate screen buffer.
Deactivate the alternate screen.
Change background color to index color. Index 0-15 are equivilant to
the named colors in background_color/0 in the order that they are listed.
Change background color to RGB color.
Change foreground (aka text) color to black.
Change background color to black.
Change underline color to black. Not widely supported.
Turn on blink text style. Not widely supported.
Turn off blink text style.
Change foreground (aka text) color to blue.
Change background color to blue.
Change underline color to blue. Not widely supported.
Turn on bold text style.
Turn off bold text style.
Clear screen and set cursor to home.
Change foreground (aka text) color to index color. Index 0-15 are equivalent to
the named colors in foreground_color/0 in the order that they are listed.
Change foreground (aka text) color to RGB color.
Convert a color atom to its corresponding index (0-15).
Turn on curly underline text style. Not widely supported.
Move the cursor to the given position. Position 0,0 is at the top left of the terminal.
Move the cursor backward N characters.
Move the cursor backward N characters.
Move the cursor down one line.
Move the cursor down N lines.
Move the cursor forward one character.
Move the cursor forward N characters.
Get the current cursor position as {Row, Column}. Example
Hide the cursor.
Move the cursor to the start of the current line.
Move the cursor to column X.
Move the cursor to line X and column Y. Position 1,1 is at the top left of the
terminal.
Move the cursor relative to its current position.
Move the cursor down one line and then returns it to home.
Move the cursor up one line and then returns it to home.
Instruct the terminal to report the current cursor position.
Restore a saved cursor position.
Save the current cursor position.
Show the cursor.
Move the cursor up one line.
Move the cursor up N lines.
Move the cursor to line X.
Change foreground (aka text) color to cyan.
Change background color to cyan.
Change underline color to cyan. Not widely supported.
Turn on dashed underline text style. Not widely supported.
Change background color to the default color.
Change foreground (aka text) color to the default color.
Reset underline color to the default.
Delete 1 character at cursor.
Delete Chars characters at cursor by shifting the text Chars characters to the left.
Delete 1 line at cursor.
Delete Lines lines at cursor.
Tell the terminal emulator to report its device attributes.
Turn on dim text style. Not widely supported.
Turn off dim text style.
Turn on dotted underline text style. Not widely supported.
Turn on double underline text style. Not widely supported.
Check if Device can interpret ANSI escape sequences.
Erase Chars characters at cursor by making Chars characters before the cursor blank.
Clear screen after cursor.
Erase line at cursor.
Equivalent to format(Format, []).
Equivalent to format(Format, Data, []).
Returns a character list that represents Data formatted in accordance with
Format.
Equivalent to fwrite(standard_io, Format, [], []).
Equivalent to fwrite(standard_io, Format, Data, []).
Writes the items in Data on the IoDevice in accordance with Format.
Change foreground (aka text) color to green.
Change background color to green.
Change underline color to green. Not widely supported.
Stop emitting a hyperlink.
Equivalent to hyperlink_start(URL, []).
Start a hyperlink pointing to the given URL using Params.
Insert Chars at cursor.
Insert 1 line at cursor.
Insert Lines lines at cursor.
Turn on inverse text style.
Turn off inverse text style.
Turn on invisible text style. Not widely supported.
Turn off invisible text style.
Turn on italic text style. Not widely supported.
Turn off italic text style.
Enable keypad transmit mode.
Disable keypad transmit mode.
Change foreground (aka text) color to light black.
Change background color to light black.
Change underline color to light black. Not widely supported.
Change foreground (aka text) color to light blue.
Change background color to light blue.
Change underline color to light blue. Not widely supported.
Change foreground (aka text) color to light cyan.
Change background color to light cyan.
Change underline color to light cyan. Not widely supported.
Change foreground (aka text) color to light green.
Change background color to light green.
Change underline color to light green. Not widely supported.
Change foreground (aka text) color to light magenta.
Change background color to light magenta.
Change underline color to light magenta. Not widely supported.
Change foreground (aka text) color to light red.
Change background color to light red.
Change underline color to light red. Not widely supported.
Change foreground (aka text) color to light white.
Change background color to light white.
Change underline color to light white. Not widely supported.
Change foreground (aka text) color to light yellow.
Change background color to light yellow.
Change underline color to light yellow. Not widely supported.
Change foreground (aka text) color to magenta.
Change background color to magenta.
Change underline color to magenta. Not widely supported.
Modify the color referenced by Index to be RGB.
Turn on overline text style.
Turn off overline text style.
Change foreground (aka text) color to red.
Change background color to red.
Change underline color to red. Not widely supported.
Reset virtual terminal sequences to their original state.
Move the cursor up one line, but keeps the cursor on the same location on the screen by scrolling the screen down.
Scan the string for virtial terminal sequences.
Scroll the screen backward 1 step.
Scroll the screen backward N step.
Change the scolling region to be from Line1 to Line2.
Scroll the screen forward 1 step.
Scroll the screen forward N step.
Turn on strikethrough text style. Not widely supported.
Turn off strikethrough text style.
Move cursor one tab forward.
Move cursor one tab backward.
Clear any tab location at the current cursor location.
Clear all tab locations.
Set a new tab location at the current cursor location.
Turn on underline text style.
Set underline color to a named color or index color. Not widely supported.
Set underline color to RGB color. Not widely supported.
Turn off underline text style.
Change foreground (aka text) color to white.
Change background color to white.
Change underline color to white. Not widely supported.
Change foreground (aka text) color to yellow.
Change background color to yellow.
Change underline color to yellow. Not widely supported.
Functions: terminfo
Returns true if the terminfo capability is available, otherwise false.
Returns the number representing a terminfo capability.
Returns information about all available terminfo capabilities. See the terminfo documentation for details on each.
Equivalent to tput(TermInfoCap, []).
Returns the string representing the action taken by the given terminal capability.
Types
-type background_color() ::
black_background | blue_background | cyan_background | green_background | magenta_background |
red_background | white_background | yellow_background | default_background |
light_black_background | light_blue_background | light_cyan_background |
light_green_background | light_magenta_background | light_red_background |
light_white_background | light_yellow_background |
{background, 0..255} |
{background, R :: 0..255, G :: 0..255, B :: 0..255}.
Virtual terminal sequences that control the background color.
-type color() :: foreground_color() | background_color() | underline_color() | {modify_color, Index :: 0..255, R :: 0..255, G :: 0..255, B :: 0..255}.
Virtual terminal sequences that control color.
-type color_atom() ::
black | blue | cyan | green | magenta | red | white | yellow | light_black | light_blue |
light_cyan | light_green | light_magenta | light_red | light_white | light_yellow.
-type cursor() :: {cursor, Line :: non_neg_integer(), Column :: non_neg_integer()} | {cursor_move, DeltaLine :: integer(), DeltaColumn :: integer()} | cursor_down | cursor_up | cursor_backward | cursor_forward | {cursor_down | cursor_backward | cursor_forward | cursor_up, N :: non_neg_integer()} | cursor_home | reverse_index | cursor_save | cursor_restore | cursor_show | cursor_hide | cursor_next_line | cursor_previous_line | cursor_horizontal_absolute | cursor_vertical_absolute | cursor_horizontal_vertical | cursor_report_position.
Virtual terminal sequences that controls the cursor.
-type foreground_color() :: color_atom() | {color, 0..255} | {color, R :: 0..255, G :: 0..255, B :: 0..255} | default_color.
Virtual terminal sequences that control the foreground (aka text) color.
The format string that can be passed to format/3 and fwrite/4
-type hyperlink() :: {hyperlink, URL :: uri_string:uri_string(), Text :: unicode:chardata()} | {hyperlink, URL :: uri_string:uri_string(), hyperlink_params(), Text :: unicode:chardata()} | {hyperlink_start, URL :: uri_string:uri_string()} | {hyperlink_start, URL :: uri_string:uri_string(), hyperlink_params()} | hyperlink_reset.
Virtual terminal sequences that control whether emitted text shall be a hyper link or not.
-type hyperlink_params() :: [{Key :: unicode:chardata(), Value :: unicode:chardata()}].
-type input() ::
keypad_transmit_mode | keypad_transmit_mode_off | kcursor_down | kcursor_up |
kcursor_backward | kcursor_forward | kcursor_home | kcursor_end.
Virtual terminal sequences for cursor input.
-type option() :: {reset, boolean()} | {enabled, boolean()} | {color, boolean()} | io_lib:format_options().
-type options() :: [option()].
-type style() :: bold | bold_off | blink | blink_off | dim | dim_off | invisible | invisible_off | italic | italic_off | inverse | inverse_off | overline | overline_off | strikethrough | strikethrough_off | underline_style().
Virtual terminal sequences that control text style.
-type tab() :: tab | tab_backward | tab_set | tab_clear | tab_clear_all.
Virtual terminal sequences that works with tabs.
-type text() :: text_formatting() | text_modification() | alternate_character_set_mode | alternate_character_set_mode_off.
Virtual terminal sequences that works on text.
Virtual terminal sequences that control text formatting.
-type text_modification() ::
clear | erase_display | insert_character | delete_character | erase_character | insert_line |
delete_line | erase_line.
Virtual terminal sequences that can erase or overwrite text.
-type underline_color() ::
black_underline | blue_underline | cyan_underline | green_underline | magenta_underline |
red_underline | white_underline | yellow_underline | default_underline |
light_black_underline | light_blue_underline | light_cyan_underline | light_green_underline |
light_magenta_underline | light_red_underline | light_white_underline |
light_yellow_underline |
{underline_color, 0..255} |
{underline_color, R :: 0..255, G :: 0..255, B :: 0..255}.
Virtual terminal sequences that control underline color.
-type underline_style() ::
underline | underline_off | double_underline | curly_underline | dotted_underline |
dashed_underline.
Virtual terminal sequences that control underline style.
Virtual terminal sequences.
-type window() ::
alternate_screen | alternate_screen_off | scroll_forward | scroll_backward |
scroll_change_region.
Virtual terminal sequences that controls the screen.
Functions
-spec alternate_character_set_mode() -> unicode:chardata().
Enable the alternate characters set mode
Example:
1> io_ansi:alternate_character_set_mode().
<<"\e(0">>
2> io_ansi:fwrite(["%%", alternate_character_set_mode, " tqqu\n"]).
%% ├──┤
ok
-spec alternate_character_set_mode_off() -> unicode:chardata().
Disable the alternate characters set mode
Example:
1> io_ansi:alternate_character_set_mode_off().
<<"\e(B">>
-spec alternate_screen() -> unicode:chardata().
Activate the alternate screen buffer.
The alternate screen buffer is a separate screen buffer that full-screen terminal
applications (like vim, less, htop, or man) use to display their content.
When activated, the current screen content and cursor position are saved. When
deactivated with alternate_screen_off/0, the original screen content is restored,
making it appear as if the full-screen application was never there.
Example:
1> io_ansi:alternate_screen().
<<"\e[?1049h\e[22;0;0t">>
-spec alternate_screen_off() -> unicode:chardata().
Deactivate the alternate screen.
Example:
1> io_ansi:alternate_screen_off().
<<"\e[?1049l\e[23;0;0t">>
-spec background(Index :: 0..255 | 0..87 | color_atom()) -> unicode:chardata().
Change background color to index color. Index 0-15 are equivilant to
the named colors in background_color/0 in the order that they are listed.
Example:
1> io_ansi:background(2).
<<"\e[42m">>
2> io_ansi:background(80).
<<"\e[48;5;80m">>
-spec background(0..255, 0..255, 0..255) -> unicode:chardata().
Change background color to RGB color.
Example:
1> io_ansi:background(255, 255, 0).
<<"\e[48;2;255;255;0m">>
-spec black() -> unicode:chardata().
Change foreground (aka text) color to black.
Example:
1> io_ansi:black().
<<"\e[30m">>
-spec black_background() -> unicode:chardata().
Change background color to black.
Example:
1> io_ansi:black_background().
<<"\e[40m">>
-spec black_underline() -> unicode:chardata().
Change underline color to black. Not widely supported.
Example:
1> io_ansi:black_underline().
<<"\e[58;5;0m">>
-spec blink() -> unicode:chardata().
Turn on blink text style. Not widely supported.
Example:
1> io_ansi:blink().
<<"\e[5m">>
-spec blink_off() -> unicode:chardata().
Turn off blink text style.
Example:
1> io_ansi:blink_off().
<<"\e[25m">>
-spec blue() -> unicode:chardata().
Change foreground (aka text) color to blue.
Example:
1> io_ansi:blue().
<<"\e[34m">>
-spec blue_background() -> unicode:chardata().
Change background color to blue.
Example:
1> io_ansi:blue_background().
<<"\e[44m">>
-spec blue_underline() -> unicode:chardata().
Change underline color to blue. Not widely supported.
Example:
1> io_ansi:blue_underline().
<<"\e[58;5;4m">>
-spec bold() -> unicode:chardata().
Turn on bold text style.
Example:
1> io_ansi:bold().
<<"\e[1m">>
-spec bold_off() -> unicode:chardata().
Turn off bold text style.
Example:
1> io_ansi:bold_off().
<<"\e[22m">>
-spec clear() -> unicode:chardata().
Clear screen and set cursor to home.
Example:
1> io_ansi:clear().
<<"\e[H\e[2J">>
-spec color(Index :: 0..255 | 0..87 | color_atom()) -> unicode:chardata().
Change foreground (aka text) color to index color. Index 0-15 are equivalent to
the named colors in foreground_color/0 in the order that they are listed.
Example:
1> io_ansi:color(5).
<<"\e[35m">>
2> io_ansi:color(80).
<<"\e[38;5;80m">>
-spec color(0..255, 0..255, 0..255) -> unicode:chardata().
Change foreground (aka text) color to RGB color.
Example:
1> io_ansi:color(255, 0, 0).
<<"\e[38;2;255;0;0m">>
-spec color_name_to_index(Color :: color_atom()) -> 0..15.
Convert a color atom to its corresponding index (0-15).
Example:
1> io_ansi:color_name_to_index(red).
1
-spec curly_underline() -> unicode:chardata().
Turn on curly underline text style. Not widely supported.
Example:
1> io_ansi:curly_underline().
<<"\e[4:3m">>
-spec cursor(Line :: integer(), Column :: integer()) -> unicode:chardata().
Move the cursor to the given position. Position 0,0 is at the top left of the terminal.
Example:
1> io_ansi:cursor(5, 10).
<<"\e[6;11H">>
-spec cursor_backward() -> unicode:chardata().
Move the cursor backward N characters.
Example:
1> io_ansi:cursor_backward().
<<"\b">>
-spec cursor_backward(N :: integer()) -> unicode:chardata().
Move the cursor backward N characters.
Example:
1> io_ansi:cursor_backward(42).
<<"\e[42D">>
-spec cursor_down() -> unicode:chardata().
Move the cursor down one line.
Example:
1> io_ansi:cursor_down().
<<"\n">>
-spec cursor_down(N :: integer()) -> unicode:chardata().
Move the cursor down N lines.
Example:
1> io_ansi:cursor_down(42).
<<"\e[42B">>
-spec cursor_forward() -> unicode:chardata().
Move the cursor forward one character.
Example:
1> io_ansi:cursor_forward().
<<"\e[C">>
-spec cursor_forward(N :: integer()) -> unicode:chardata().
Move the cursor forward N characters.
Example:
1> io_ansi:cursor_forward().
<<"\e[C">>
-spec cursor_get_position() -> {Row :: non_neg_integer(), Column :: non_neg_integer()} | {error, string()}.
Get the current cursor position as {Row, Column}. Example:
## Enter noshell-raw mode and request cursor location and then print
## the reply to stdout.
$ erl -noshell -eval 'shell:start_interactive({noshell,raw}),
{Row,Col} = io_ansi:cursor_get_position(),
io:format("~p",[{Row,Col}])' -s init stop
{58,1}
-spec cursor_hide() -> unicode:chardata().
Hide the cursor.
Example:
1> io_ansi:cursor_hide().
<<"\e[?25l">>
-spec cursor_home() -> unicode:chardata().
Move the cursor to the start of the current line.
Example:
1> io_ansi:cursor_home().
<<"\e[H">>
-spec cursor_horizontal_absolute(X :: integer()) -> unicode:chardata().
Move the cursor to column X.
Example:
1> io_ansi:cursor_horizontal_absolute(10).
<<"\e[11G">>
-spec cursor_horizontal_vertical(X :: integer(), Y :: integer()) -> unicode:chardata().
Move the cursor to line X and column Y. Position 1,1 is at the top left of the
terminal.
Example:
1> io_ansi:cursor_horizontal_vertical(10, 20).
<<"\e[10;20f">>
-spec cursor_move(DeltaLine :: integer(), DeltaColumn :: integer()) -> unicode:chardata().
Move the cursor relative to its current position.
Positive DeltaLine moves down, negative moves up.
Positive DeltaColumn moves right (forward), negative moves left (backward).
Example:
1> io_ansi:cursor_move(-5, 0).
<<"\e[5A">>
2> io_ansi:cursor_move(0, 10).
<<"\e[10C">>
3> io_ansi:cursor_move(3, -2).
<<"\e[3B\e[2D">>
4> io_ansi:cursor_move(0, 0).
<<>>
-spec cursor_next_line() -> unicode:chardata().
Move the cursor down one line and then returns it to home.
Example:
1> io_ansi:cursor_next_line().
<<"\eE">>
-spec cursor_previous_line() -> unicode:chardata().
Move the cursor up one line and then returns it to home.
Example:
1> io_ansi:cursor_previous_line().
<<"\e[F">>
-spec cursor_report_position() -> unicode:chardata().
Instruct the terminal to report the current cursor position.
Examples:
1> io_ansi:cursor_report_position().
~"\e[6n"## Enter noshell-raw mode and request cursor location and then print
## the reply to stdout.
$ erl -noshell -eval 'shell:start_interactive({noshell,raw}),
io_ansi:fwrite([cursor_report_position]),
io:format("~p",[io:get_chars("",20)])' -s init stop
"\e[58;1R"
The reported cursor position in the example is row 58 and column 1 both are 1 index based.
-spec cursor_restore() -> unicode:chardata().
Restore a saved cursor position.
Example:
1> io_ansi:cursor_restore().
<<"\e8">>
-spec cursor_save() -> unicode:chardata().
Save the current cursor position.
Example:
1> io_ansi:cursor_save().
<<"\e7">>
-spec cursor_show() -> unicode:chardata().
Show the cursor.
Example:
1> io_ansi:cursor_show().
<<"\e[?12;25h">>
-spec cursor_up() -> unicode:chardata().
Move the cursor up one line.
Example:
1> io_ansi:cursor_up().
<<"\e[A">>
-spec cursor_up(N :: integer()) -> unicode:chardata().
Move the cursor up N lines.
Example:
1> io_ansi:cursor_up(42).
<<"\e[42A">>
-spec cursor_vertical_absolute(X :: integer()) -> unicode:chardata().
Move the cursor to line X.
Example:
1> io_ansi:cursor_vertical_absolute(20).
<<"\e[21d">>
-spec cyan() -> unicode:chardata().
Change foreground (aka text) color to cyan.
Example:
1> io_ansi:cyan().
<<"\e[36m">>
-spec cyan_background() -> unicode:chardata().
Change background color to cyan.
Example:
1> io_ansi:cyan_background().
<<"\e[46m">>
-spec cyan_underline() -> unicode:chardata().
Change underline color to cyan. Not widely supported.
Example:
1> io_ansi:cyan_underline().
<<"\e[58;5;6m">>
-spec dashed_underline() -> unicode:chardata().
Turn on dashed underline text style. Not widely supported.
Example:
1> io_ansi:dashed_underline().
<<"\e[4:5m">>
-spec default_background() -> unicode:chardata().
Change background color to the default color.
Example:
1> io_ansi:default_background().
<<"\e[49m">>
-spec default_color() -> unicode:chardata().
Change foreground (aka text) color to the default color.
Example:
1> io_ansi:default_color().
<<"\e[39m">>
-spec default_underline_color() -> unicode:chardata().
Reset underline color to the default.
Example:
1> io_ansi:default_underline_color().
<<"\e[59m">>
-spec delete_character() -> unicode:chardata().
Delete 1 character at cursor.
Example:
1> io_ansi:delete_character().
<<"\e[P">>
-spec delete_character(Chars :: integer()) -> unicode:chardata().
Delete Chars characters at cursor by shifting the text Chars characters to the left.
Example:
1> io_ansi:delete_character(2).
<<"\e[2P">>
-spec delete_line() -> unicode:chardata().
Delete 1 line at cursor.
Example:
1> io_ansi:delete_line().
<<"\e[M">>
-spec delete_line(Lines :: integer()) -> unicode:chardata().
Delete Lines lines at cursor.
Example:
1> io_ansi:delete_line(3).
<<"\e[3M">>
-spec device_report_attributes() -> unicode:chardata().
Tell the terminal emulator to report its device attributes.
Examples:
1> io_ansi:device_report_attributes().
<<"\e[0c">>## Enter noshell-raw mode and request device attributes and then print
## the reply to stdout.
$ erl -noshell -eval 'shell:start_interactive({noshell,raw}),
io_ansi:fwrite([device_report_attributes]),
io:format("~p",[io:get_chars("",20)])' -s init stop
"\e[?65;1;9c"
-spec dim() -> unicode:chardata().
Turn on dim text style. Not widely supported.
Example:
1> io_ansi:dim().
<<"\e[2m">>
-spec dim_off() -> unicode:chardata().
Turn off dim text style.
Example:
1> io_ansi:dim_off().
<<"\e[22m">>
-spec dotted_underline() -> unicode:chardata().
Turn on dotted underline text style. Not widely supported.
Example:
1> io_ansi:dotted_underline().
<<"\e[4:4m">>
-spec double_underline() -> unicode:chardata().
Turn on double underline text style. Not widely supported.
Example:
1> io_ansi:double_underline().
<<"\e[4:2m">>
-spec enabled() -> boolean().
Check if io:user/0 can interpret ANSI escape sequences.
Example:
1> io_ansi:enabled().
true
Check if Device can interpret ANSI escape sequences.
This is done by checking if Device represents a terminal and if the TERM
environment variable is set to a terminal type that supports virtual terminal
sequences.
Example:
1> io_ansi:enabled(standard_error).
true
2> {ok, File} = file:open("tmp",[write]), io_ansi:enabled(File).
false
-spec erase_character(Chars :: integer()) -> unicode:chardata().
Erase Chars characters at cursor by making Chars characters before the cursor blank.
Example:
1> io_ansi:erase_character(4).
<<"\e[4X">>
-spec erase_display() -> unicode:chardata().
Clear screen after cursor.
Example:
1> io_ansi:erase_display().
<<"\e[J">>
-spec erase_line() -> unicode:chardata().
Erase line at cursor.
Example:
1> io_ansi:erase_line().
<<"\e[K">>
-spec format(format()) -> unicode:unicode_binary().
Equivalent to format(Format, []).
-spec format(format(), Data :: [term()]) -> unicode:unicode_binary().
Equivalent to format(Format, Data, []).
-spec format(format(), Data :: [term()], options()) -> unicode:unicode_binary().
Returns a character list that represents Data formatted in accordance with
Format.
This function works just as io_lib:bformat/2, except that it also allows
atoms and tuples represeting virtual terminal sequences as part of the
Format string.
Calling format/3 will always emit a reset/0 VTS at the end of the returned
string. To not emit this, set the reset option to false.
To force enabling or disabling of emitting VTSs set the enabled option to
true or false. By default the emitting of VTSs is enabled if enabled/0 returns true
and disabled otherwise.
To disable emitting of color VTSs but still emit other VTSs, set the color option to false.
The default color option is true unless the NO_COLOR environment variable is set to a non-empty value,
in which case the default is false.
Example:
1> io_ansi:format([blue, underline, "Hello world"]).
~"\e[34m\e[4mHello world\e(B\e[m"
2> io_ansi:format([blue, underline, "Hello ~p"],[world]).
~"\e[34m\e[4mHello world\e(B\e[m"
3> io_ansi:format([blue, underline, "Hello ~p"],[world],[{reset,false}]).
~"\e[34m\e[4mHello world"
4> io_ansi:format([blue, underline, "Hello ~p"],[world],[{enabled,false}]).
~"Hello world"
5> io_ansi:format([blue, underline, "Hello ~p"],[world],[{color,false}]).
~"\e[4mHello world\e(B\e[m"
6> io_ansi:format([invalid_code, "Hello world"]).
** exception error: {invalid_code,invalid_code}
in function io_ansi:format_internal/3For a detailed description of the available formatting options, see io:fwrite/3.
-spec fwrite(Format :: format()) -> ok.
Equivalent to fwrite(standard_io, Format, [], []).
Equivalent to fwrite(standard_io, Format, Data, []).
Equivalent to fwrite(standard_io, Format, Data, Options).
Writes the items in Data on the IoDevice in accordance with Format.
This function works just as io:fwrite/2, except that it also allows atoms and
tuples representing virtual terminal sequences (VTS) as part of the Format string.
See format/3 for details on how the different Options can be used.
Example:
1> io_ansi:fwrite([blue, "%% Hello world\n"]).
%% Hello world
ok
2> io_ansi:fwrite([underline, "%% Hello ~p\n"], [world]).
%% Hello world
ok
3> io_ansi:fwrite([invalid_code, "%% Hello ~p\n"], [world]).
** exception error: {error,{put_ansi,unicode,invalid_code}}
in function io_ansi:fwrite/4
called as io_ansi:fwrite(standard_io,[invalid_code,"%% Hello ~p\n"],[world],[])The decision what each VTS should be converted to is done by the destination I/O device. This means that if the I/O device is on a remote node, the terminfo database loaded into that remote node will be used.
All VTSs are stripped if the target I/O device does not support handling VTSs,
either because it is not implemented by the device (for example if the device
is a file:io_server/0) or if the device does not support a certain VTS.
If you want to force usage of VTSs you can pass {enabled, true} and that will
use the local defintions to translate.
-spec green() -> unicode:chardata().
Change foreground (aka text) color to green.
Example:
1> io_ansi:green().
<<"\e[32m">>
-spec green_background() -> unicode:chardata().
Change background color to green.
Example:
1> io_ansi:green_background().
<<"\e[42m">>
-spec green_underline() -> unicode:chardata().
Change underline color to green. Not widely supported.
Example:
1> io_ansi:green_underline().
<<"\e[58;5;2m">>
-spec hyperlink_reset() -> unicode:chardata().
Stop emitting a hyperlink.
Example:
1> io_ansi:hyperlink_reset().
<<"\e]8;;\e\\">>
-spec hyperlink_start(uri_string:uri_string()) -> unicode:chardata().
Equivalent to hyperlink_start(URL, []).
-spec hyperlink_start(uri_string:uri_string(), [{Key :: unicode:chardata(), Value :: unicode:chardata()}]) -> unicode:chardata().
Start a hyperlink pointing to the given URL using Params.
The hyperlink can be any type of URL, but typically it would be a file or http URL.
Example:
1> io_ansi:hyperlink_start("https://erlang.org").
<<"\e]8;https://erlang.org;\e\\">>
2> io_ansi:format([{hyperlink_start, "file://tmp/debug.log"},"debug log",hyperlink_reset]).
~"\e]8;file://tmp/debug.log;\e\\debug log\e]8;;\e\\\e(B\e[m"See Hyperlinks (a.k.a. HTML-like anchors) in terminal emulators for more details on limitations and usage of terminal hyperlinks.
-spec insert_character(Chars :: integer()) -> unicode:chardata().
Insert Chars at cursor.
Example:
1> io_ansi:insert_character(3).
<<"\e[3@">>
-spec insert_line() -> unicode:chardata().
Insert 1 line at cursor.
Example:
1> io_ansi:insert_line().
<<"\e[L">>
-spec insert_line(Lines :: integer()) -> unicode:chardata().
Insert Lines lines at cursor.
Example:
1> io_ansi:insert_line(2).
<<"\e[2L">>
-spec inverse() -> unicode:chardata().
Turn on inverse text style.
Inverse is also called reverse video or standout mode.
Example:
1> io_ansi:inverse().
<<"\e[7m">>
-spec inverse_off() -> unicode:chardata().
Turn off inverse text style.
Inverse is also called reverse video or standout mode.
Example:
1> io_ansi:inverse_off().
<<"\e[27m">>
-spec invisible() -> unicode:chardata().
Turn on invisible text style. Not widely supported.
Example:
1> io_ansi:invisible().
<<"\e[8m">>
-spec invisible_off() -> unicode:chardata().
Turn off invisible text style.
Example:
1> io_ansi:invisible_off().
<<"\e[28m">>
-spec italic() -> unicode:chardata().
Turn on italic text style. Not widely supported.
Example:
1> io_ansi:italic().
<<"\e[3m">>
-spec italic_off() -> unicode:chardata().
Turn off italic text style.
Example:
1> io_ansi:italic_off().
<<"\e[23m">>
-spec keypad_transmit_mode() -> unicode:chardata().
Enable keypad transmit mode.
Example:
1> io_ansi:keypad_transmit_mode().
<<"\e[?1h\e=">>
-spec keypad_transmit_mode_off() -> unicode:chardata().
Disable keypad transmit mode.
Example:
1> io_ansi:keypad_transmit_mode_off().
<<"\e[?1l\e>">>
-spec light_black() -> unicode:chardata().
Change foreground (aka text) color to light black.
Example:
1> io_ansi:light_black().
<<"\e[90m">>
-spec light_black_background() -> unicode:chardata().
Change background color to light black.
Example:
1> io_ansi:light_black_background().
<<"\e[100m">>
-spec light_black_underline() -> unicode:chardata().
Change underline color to light black. Not widely supported.
Example:
1> io_ansi:light_black_underline().
<<"\e[58;5;8m">>
-spec light_blue() -> unicode:chardata().
Change foreground (aka text) color to light blue.
Example:
1> io_ansi:light_blue().
<<"\e[94m">>
-spec light_blue_background() -> unicode:chardata().
Change background color to light blue.
Example:
1> io_ansi:light_blue_background().
<<"\e[104m">>
-spec light_blue_underline() -> unicode:chardata().
Change underline color to light blue. Not widely supported.
Example:
1> io_ansi:light_blue_underline().
<<"\e[58;5;12m">>
-spec light_cyan() -> unicode:chardata().
Change foreground (aka text) color to light cyan.
Example:
1> io_ansi:light_cyan().
<<"\e[96m">>
-spec light_cyan_background() -> unicode:chardata().
Change background color to light cyan.
Example:
1> io_ansi:light_cyan_background().
<<"\e[106m">>
-spec light_cyan_underline() -> unicode:chardata().
Change underline color to light cyan. Not widely supported.
Example:
1> io_ansi:light_cyan_underline().
<<"\e[58;5;14m">>
-spec light_green() -> unicode:chardata().
Change foreground (aka text) color to light green.
Example:
1> io_ansi:light_green().
<<"\e[92m">>
-spec light_green_background() -> unicode:chardata().
Change background color to light green.
Example:
1> io_ansi:light_green_background().
<<"\e[102m">>
-spec light_green_underline() -> unicode:chardata().
Change underline color to light green. Not widely supported.
Example:
1> io_ansi:light_green_underline().
<<"\e[58;5;10m">>
-spec light_magenta() -> unicode:chardata().
Change foreground (aka text) color to light magenta.
Example:
1> io_ansi:light_magenta().
<<"\e[95m">>
-spec light_magenta_background() -> unicode:chardata().
Change background color to light magenta.
Example:
1> io_ansi:light_magenta_background().
<<"\e[105m">>
-spec light_magenta_underline() -> unicode:chardata().
Change underline color to light magenta. Not widely supported.
Example:
1> io_ansi:light_magenta_underline().
<<"\e[58;5;13m">>
-spec light_red() -> unicode:chardata().
Change foreground (aka text) color to light red.
Example:
1> io_ansi:light_red().
<<"\e[91m">>
-spec light_red_background() -> unicode:chardata().
Change background color to light red.
Example:
1> io_ansi:light_red_background().
<<"\e[101m">>
-spec light_red_underline() -> unicode:chardata().
Change underline color to light red. Not widely supported.
Example:
1> io_ansi:light_red_underline().
<<"\e[58;5;9m">>
-spec light_white() -> unicode:chardata().
Change foreground (aka text) color to light white.
Example:
1> io_ansi:light_white().
<<"\e[97m">>
-spec light_white_background() -> unicode:chardata().
Change background color to light white.
Example:
1> io_ansi:light_white_background().
<<"\e[107m">>
-spec light_white_underline() -> unicode:chardata().
Change underline color to light white. Not widely supported.
Example:
1> io_ansi:light_white_underline().
<<"\e[58;5;15m">>
-spec light_yellow() -> unicode:chardata().
Change foreground (aka text) color to light yellow.
Example:
1> io_ansi:light_yellow().
<<"\e[93m">>
-spec light_yellow_background() -> unicode:chardata().
Change background color to light yellow.
Example:
1> io_ansi:light_yellow_background().
<<"\e[103m">>
-spec light_yellow_underline() -> unicode:chardata().
Change underline color to light yellow. Not widely supported.
Example:
1> io_ansi:light_yellow_underline().
<<"\e[58;5;11m">>
-spec magenta() -> unicode:chardata().
Change foreground (aka text) color to magenta.
Example:
1> io_ansi:magenta().
<<"\e[35m">>
-spec magenta_background() -> unicode:chardata().
Change background color to magenta.
Example:
1> io_ansi:magenta_background().
<<"\e[45m">>
-spec magenta_underline() -> unicode:chardata().
Change underline color to magenta. Not widely supported.
Example:
1> io_ansi:magenta_underline().
<<"\e[58;5;5m">>
-spec modify_color(Index :: 0..255, R :: 0..255, G :: 0..255, B :: 0..255) -> unicode:chardata().
Modify the color referenced by Index to be RGB.
Calling this function for Index 0-15 will change the color of the named colors
in foreground_color/0 and background_color/0.
Example:
1> io_ansi:modify_color(1, 255, 100, 0).
<<"\e]4;1;rgb:41/19/00\e\\">>
-spec overline() -> unicode:chardata().
Turn on overline text style.
Example:
1> io_ansi:overline().
<<"\e[53m">>
-spec overline_off() -> unicode:chardata().
Turn off overline text style.
Example:
1> io_ansi:overline_off().
<<"\e[55m">>
-spec red() -> unicode:chardata().
Change foreground (aka text) color to red.
Example:
1> io_ansi:red().
<<"\e[31m">>
-spec red_background() -> unicode:chardata().
Change background color to red.
Example:
1> io_ansi:red_background().
<<"\e[41m">>
-spec red_underline() -> unicode:chardata().
Change underline color to red. Not widely supported.
Example:
1> io_ansi:red_underline().
<<"\e[58;5;1m">>
-spec reset() -> unicode:chardata().
Reset virtual terminal sequences to their original state.
This only resets the things supported by the loaded terminfo database,
which means that OSCs such as hyperlink_start/2 are not reset but have
to be reset by emitting hyperlink_reset/0.
Example:
1> io_ansi:reset().
<<"\e(B\e[m">>
-spec reverse_index() -> unicode:chardata().
Move the cursor up one line, but keeps the cursor on the same location on the screen by scrolling the screen down.
Example:
1> io_ansi:reverse_index().
<<"\eM">>
-spec scan(unicode:chardata()) -> [unicode:unicode_binary() | vts() | {csi, unicode:unicode_binary()}].
Scan the string for virtial terminal sequences.
The recognized VTSs will be converted into the corresponding vts/0.
If you intend to parse arrow keys it is recommended that you first set the terminal in
application mode by using keypad_transmit_mode/0. This will make it easier for
io_ansi to correctly detect arrow keys.
Any unrecognized control sequence introducers,
will be placed in a tuple tagged with csi.
Example:
1> io_ansi:scan("\eOA").
[kcursor_up]
2> io_ansi:scan("\eOB").
[kcursor_down]
3> io_ansi:scan(io_ansi:format([bold, "text"])).
[bold, ~"text", reset]
4> io_ansi:scan(io_ansi:format([{cursor, 0, 0}])).
[{csi, ~"\e[1;1H"}, reset]
-spec scroll_backward() -> unicode:chardata().
Scroll the screen backward 1 step.
Example:
1> io_ansi:scroll_backward().
<<"\e[1T">>
-spec scroll_backward(Steps :: integer()) -> unicode:chardata().
Scroll the screen backward N step.
Example:
1> io_ansi:scroll_backward(42).
<<"\e[42T">>
-spec scroll_change_region(Line1 :: integer(), Line2 :: integer()) -> unicode:chardata().
Change the scolling region to be from Line1 to Line2.
Example:
1> io_ansi:scroll_change_region(10, 20).
<<"\e[11;21r">>
-spec scroll_forward() -> unicode:chardata().
Scroll the screen forward 1 step.
Example:
1> io_ansi:scroll_forward().
<<"\e[1S">>
-spec scroll_forward(N :: integer()) -> unicode:chardata().
Scroll the screen forward N step.
Example:
1> io_ansi:scroll_forward(42).
<<"\e[42S">>
-spec strikethrough() -> unicode:chardata().
Turn on strikethrough text style. Not widely supported.
Example:
1> io_ansi:strikethrough().
<<"\e[9m">>
-spec strikethrough_off() -> unicode:chardata().
Turn off strikethrough text style.
Example:
1> io_ansi:strikethrough_off().
<<"\e[29m">>
-spec tab() -> unicode:chardata().
Move cursor one tab forward.
Example:
1> io_ansi:tab().
<<"\t">>
-spec tab_backward() -> unicode:chardata().
Move cursor one tab backward.
Example:
1> io_ansi:tab_backward().
<<"\e[Z">>
-spec tab_clear() -> unicode:chardata().
Clear any tab location at the current cursor location.
Example:
1> io_ansi:tab_clear().
<<"\e[0g">>
-spec tab_clear_all() -> unicode:chardata().
Clear all tab locations.
Example:
1> io_ansi:tab_clear_all().
<<"\e[3g">>
-spec tab_set() -> unicode:chardata().
Set a new tab location at the current cursor location.
Example:
1> io_ansi:tab_set().
<<"\eH">>
-spec underline() -> unicode:chardata().
Turn on underline text style.
Example:
1> io_ansi:underline().
<<"\e[4m">>
-spec underline_color(Index :: 0..255 | color_atom()) -> unicode:chardata().
Set underline color to a named color or index color. Not widely supported.
Accepts color atoms (red, blue, light_green, etc.) or index colors (0-255).
Index 0-15 correspond to the named colors in color_atom/0.
Example:
1> io_ansi:underline_color(red).
<<"\e[58;5;1m">>
2> io_ansi:underline_color(light_cyan).
<<"\e[58;5;14m">>
3> io_ansi:underline_color(196).
<<"\e[58;5;196m">>
-spec underline_color(0..255, 0..255, 0..255) -> unicode:chardata().
Set underline color to RGB color. Not widely supported.
Example:
1> io_ansi:underline_color(255, 0, 0).
<<"\e[58;2;255;0;0m">>
-spec underline_off() -> unicode:chardata().
Turn off underline text style.
Example:
1> io_ansi:underline_off().
<<"\e[24m">>
-spec white() -> unicode:chardata().
Change foreground (aka text) color to white.
Example:
1> io_ansi:white().
<<"\e[37m">>
-spec white_background() -> unicode:chardata().
Change background color to white.
Example:
1> io_ansi:white_background().
<<"\e[47m">>
-spec white_underline() -> unicode:chardata().
Change underline color to white. Not widely supported.
Example:
1> io_ansi:white_underline().
<<"\e[58;5;7m">>
-spec yellow() -> unicode:chardata().
Change foreground (aka text) color to yellow.
Example:
1> io_ansi:yellow().
<<"\e[33m">>
-spec yellow_background() -> unicode:chardata().
Change background color to yellow.
Example:
1> io_ansi:yellow_background().
<<"\e[43m">>
-spec yellow_underline() -> unicode:chardata().
Change underline color to yellow. Not widely supported.
Example:
1> io_ansi:yellow_underline().
<<"\e[58;5;3m">>
Functions: terminfo
Returns true if the terminfo capability is available, otherwise false.
The names of the terminal capabilities can be found in the terminfo
documentation, or by calling tinfo/0. tigetflag/1 will use the terminfo
definition associated with the TERM environment variable when the Erlang VM is
started. It is not possible to change after startup.
Example:
1> io_ansi:tigetflag("xn").
true
2> io_ansi:tigetflag("foobar").
false
-spec tigetnum(TermInfoCapName :: string()) -> -1 | non_neg_integer().
Returns the number representing a terminfo capability.
The names of the terminal capabilities can be found in the terminfo
documentation, or by calling tinfo/0. tigetnum/1 will use the terminfo
definition associated with the TERM environment variable when the Erlang VM is
started. It is not possible to change after startup.
Returns -1 if the capability is not available.
Example:
1> io_ansi:tigetnum("co").
80
2> io_ansi:tigetnum("foobar").
-1
Returns information about all available terminfo capabilities. See the terminfo documentation for details on each.
tinfo/0 will use the terminfo definition associated with the TERM environment
variable when the Erlang VM is started. It is not possible to change after startup.
When calling tput/2, tigetnum/1 and tigetflag/1 you should provide the name
of the capability you want.
Example:
1> io_ansi:tinfo().
#{ bool => [#{code => "xr",name => "OTxr",full_name => "return_does_clr_eol"} | ...],
str => [#{code => "bx",name => "box1",full_name => "box_chars_1"} | ...],
num => [#{code => "kn",name => "OTkn", full_name => "number_of_function_keys"} | ...]
}
-spec tput(TermInfoCap :: string()) -> unicode:unicode_binary().
Equivalent to tput(TermInfoCap, []).
-spec tput(TermInfoCapName :: string(), Args :: [integer()]) -> unicode:unicode_binary().
Returns the string representing the action taken by the given terminal capability.
The names of the terminal capabilities can be found in the terminfo
documentation, or by calling tinfo/0. tput/2 will use the terminfo definition
associated with the TERM environment variable when the Erlang VM is started.
It is not possible to change after startup.
If the given capability is not defined in the terminfo database an enotsup
error is generated, if the given capability is invalid a badarg error is
generated.
This function does not work on Windows and will always generate a badarg
exception.
Example:
%% Set the foreground color to 3
1> io_ansi:tput("setaf",[3]).
<<"\e[33m">>
%% Move the cursor up 2 spaces
2> io_ansi:tput("cuu",[2]).
<<"\e[2A">>
%% Move the cursor down 1 space
3> io_ansi:tput("cud1").
<<"\n">>
%% unsupported capability
4> io_ansi:tput("slm").
** exception error: {enotsup,"slm"}
in function io_ansi:tput/2
%% unknown capability
5> io_ansi:tput("foobar").
** exception error: {einval,"foobar",[]}
in function io_ansi:tput/2