io_ansi (stdlib v7.0.1)

View Source

Controlling 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.

The format string that can be passed to format/3 and fwrite/4

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 owerwrite text.

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.

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 foreground (aka text) color to blue.

Change background color to blue.

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 equivilant to the named colors in foreground_color/0 in the order that they are listed.

Change foreground (aka text) color to RGB color.

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.

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.

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 background color to the default color.

Change foreground (aka text) color to the default color.

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.

Check if io:user/0 can interpret ANSI escape sequences.

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.

Returns a character list that represents Data formatted in accordance with Format.

Writes the items in Data on the IoDevice in accordance with Format.

Change foreground (aka text) color to green.

Change background color to green.

Stop emitting a hyperlink.

Start a hyperlink pointing to the given URL using Params.

Insert Chars at cursor.

Insert 1 line at cursor.

Insert Lines lines at cursor.

Enable keypad transmit mode.

Disable keypad transmit mode.

Change foreground (aka text) color to light black.

Change background color to light black.

Change foreground (aka text) color to light blue.

Change background color to light blue.

Change foreground (aka text) color to light cyan.

Change background color to light cyan.

Change foreground (aka text) color to light green.

Change background color to light green.

Change foreground (aka text) color to light magenta.

Change background color to light magenta.

Change foreground (aka text) color to light red.

Change background color to light red.

Change foreground (aka text) color to light white.

Change background color to light white.

Change foreground (aka text) color to light yellow.

Change background color to light yellow.

Change foreground (aka text) color to magenta.

Change background color to magenta.

Modify the color referenced by Index to be RGB.

Turn on negative text style.

Turn off negative text style.

Change foreground (aka text) color to red.

Change background color to red.

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.

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.

Turn off underline text style.

Change foreground (aka text) color to white.

Change background color to white.

Change foreground (aka text) color to yellow.

Change background color to yellow.

Functions: terminfo

Returns the 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.

Returns the string representing the action taken by the given terminal capability.

Types

background_color()

(not exported)
-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 |
          {color_background, 0..255} |
          {color_background, R :: 0..255, G :: 0..255, B :: 0..255}.

Virtual terminal sequences that control the background color.

color()

(not exported)
-type color() ::
          foreground_color() |
          background_color() |
          {modify_color, Index :: 0..255, R :: 0..255, G :: 0..255, B :: 0..255}.

Virtual terminal sequences that control color.

cursor()

(not exported)
-type cursor() ::
          {cursor, Line :: non_neg_integer(), Column :: non_neg_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.

foreground_color()

(not exported)
-type foreground_color() ::
          black | blue | cyan | green | magenta | red | white | yellow | light_black | light_blue |
          light_cyan | light_green | light_magenta | light_red | light_white | light_yellow |
          {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.

format()

(not exported)
-type format() :: [string() | vts()].

The format string that can be passed to format/3 and fwrite/4

hyperlink()

(not exported)
-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.

input()

(not exported)
-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.

option()

(not exported)
-type option() :: {reset, boolean()} | {enabled, boolean()} | io_lib:format_options().

options()

(not exported)
-type options() :: [option()].

style()

(not exported)
-type style() :: bold | bold_off | underline | underline_off | negative | negative_off.

Virtual terminal sequences that control text style.

tab()

(not exported)
-type tab() :: tab | tab_backward | tab_set | tab_clear | tab_clear_all.

Virtual terminal sequences that works with tabs.

text()

(not exported)
-type text() ::
          text_formatting() |
          text_modification() |
          alternate_character_set_mode | alternate_character_set_mode_off.

Virtual terminal sequences that works on text.

text_formatting()

(not exported)
-type text_formatting() :: color() | style() | hyperlink().

Virtual terminal sequences that control text formatting.

text_modification()

(not exported)
-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 owerwrite text.

vts()

-type vts() :: text() | cursor() | window() | tab() | input() | reset | device_report_attributes.

Virtual terminal sequences.

window()

(not exported)
-type window() ::
          alternate_screen | alternate_screen_off | scroll_forward | scroll_backward |
          scroll_change_region.

Virtual terminal sequences that controls the screen.

Functions

alternate_character_set_mode()

-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

alternate_character_set_mode_off()

-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">>

alternate_screen()

-spec alternate_screen() -> unicode:chardata().

Activate the alternate screen.

Example:

1> io_ansi:alternate_screen().
<<"\e[?1049h\e[22;0;0t">>

alternate_screen_off()

-spec alternate_screen_off() -> unicode:chardata().

Deactivate the alternate screen.

Example:

1> io_ansi:alternate_screen_off().
<<"\e[?1049l\e[23;0;0t">>

background(Index)

-spec background(Index :: 0..255 | 0..87) -> 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">>

background(Red, Green, Blue)

-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">>

black()

-spec black() -> unicode:chardata().

Change foreground (aka text) color to black.

Example:

1> io_ansi:black().
<<"\e[30m">>

black_background()

-spec black_background() -> unicode:chardata().

Change background color to black.

Example:

1> io_ansi:black_background().
<<"\e[40m">>

blue()

-spec blue() -> unicode:chardata().

Change foreground (aka text) color to blue.

Example:

1> io_ansi:blue().
<<"\e[34m">>

blue_background()

-spec blue_background() -> unicode:chardata().

Change background color to blue.

Example:

1> io_ansi:blue_background().
<<"\e[44m">>

bold()

-spec bold() -> unicode:chardata().

Turn on bold text style.

Example:

1> io_ansi:bold().
<<"\e[1m">>

bold_off()

-spec bold_off() -> unicode:chardata().

Turn off bold text style.

Example:

1> io_ansi:bold_off().
<<"\e[22m">>

clear()

-spec clear() -> unicode:chardata().

Clear screen and set cursor to home.

Example:

1> io_ansi:clear().
<<"\e[H\e[2J">>

color(Index)

-spec color(Index :: 0..255 | 0..87) -> unicode:chardata().

Change foreground (aka text) color to index color. Index 0-15 are equivilant 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">>

color(Red, Green, Blue)

-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">>

cursor(Line, Column)

-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">>

cursor_backward()

-spec cursor_backward() -> unicode:chardata().

Move the cursor backward N characters.

Example:

1> io_ansi:cursor_backward().
<<"\b">>

cursor_backward(N)

-spec cursor_backward(N :: integer()) -> unicode:chardata().

Move the cursor backward N characters.

Example:

1> io_ansi:cursor_backward(42).
<<"\e[42D">>

cursor_down()

-spec cursor_down() -> unicode:chardata().

Move the cursor down one line.

Example:

1> io_ansi:cursor_down().
<<"\n">>

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">>

cursor_forward()

-spec cursor_forward() -> unicode:chardata().

Move the cursor forward one character.

Example:

1> io_ansi:cursor_forward().
<<"\e[C">>

cursor_forward(N)

-spec cursor_forward(N :: integer()) -> unicode:chardata().

Move the cursor forward N characters.

Example:

1> io_ansi:cursor_forward().
<<"\e[C">>

cursor_hide()

-spec cursor_hide() -> unicode:chardata().

Hide the cursor.

Example:

1> io_ansi:cursor_hide().
<<"\e[?25l">>

cursor_home()

-spec cursor_home() -> unicode:chardata().

Move the cursor to the start of the current line.

Example:

1> io_ansi:cursor_home().
<<"\e[H">>

cursor_horizontal_absolute(X)

-spec cursor_horizontal_absolute(X :: integer()) -> unicode:chardata().

Move the cursor to column X.

Example:

1> io_ansi:cursor_horizontal_absolute(10).
<<"\e[11G">>

cursor_horizontal_vertical(X, Y)

-spec cursor_horizontal_vertical(X :: integer(), Y :: integer()) -> unicode:chardata().

Move the cursor to line X and column Y.

Example:

1> io_ansi:cursor_horizontal_vertical(10, 20).
<<"\e[10;20f">>

cursor_next_line()

-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">>

cursor_previous_line()

-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">>

cursor_report_position()

-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 curson 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"

cursor_restore()

-spec cursor_restore() -> unicode:chardata().

Restore a saved cursor position.

Example:

1> io_ansi:cursor_restore().
<<"\e8">>

cursor_save()

-spec cursor_save() -> unicode:chardata().

Save the current cursor position.

Example:

1> io_ansi:cursor_save().
<<"\e7">>

cursor_show()

-spec cursor_show() -> unicode:chardata().

Show the cursor.

Example:

1> io_ansi:cursor_show().
<<"\e[?12;25h">>

cursor_up()

-spec cursor_up() -> unicode:chardata().

Move the cursor up one line.

Example:

1> io_ansi:cursor_up().
<<"\e[A">>

cursor_up(N)

-spec cursor_up(N :: integer()) -> unicode:chardata().

Move the cursor up N lines.

Example:

1> io_ansi:cursor_up(42).
<<"\e[42A">>

cursor_vertical_absolute(X)

-spec cursor_vertical_absolute(X :: integer()) -> unicode:chardata().

Move the cursor to line X.

Example:

1> io_ansi:cursor_vertical_absolute(20).
<<"\e[21d">>

cyan()

-spec cyan() -> unicode:chardata().

Change foreground (aka text) color to cyan.

Example:

1> io_ansi:cyan().
<<"\e[36m">>

cyan_background()

-spec cyan_background() -> unicode:chardata().

Change background color to cyan.

Example:

1> io_ansi:cyan_background().
<<"\e[46m">>

default_background()

-spec default_background() -> unicode:chardata().

Change background color to the default color.

Example:

1> io_ansi:default_background().
<<"\e[49m">>

default_color()

-spec default_color() -> unicode:chardata().

Change foreground (aka text) color to the default color.

Example:

1> io_ansi:default_color().
<<"\e[39m">>

delete_character()

-spec delete_character() -> unicode:chardata().

Delete 1 character at cursor.

Example:

1> io_ansi:delete_character().
<<"\e[P">>

delete_character(Chars)

-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">>

delete_line()

-spec delete_line() -> unicode:chardata().

Delete 1 line at cursor.

Example:

1> io_ansi:delete_line().
<<"\e[M">>

delete_line(Lines)

-spec delete_line(Lines :: integer()) -> unicode:chardata().

Delete Lines lines at cursor.

Example:

1> io_ansi:delete_line(3).
<<"\e[3M">>

device_report_attributes()

-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"

enabled()

-spec enabled() -> boolean().

Check if io:user/0 can interpret ANSI escape sequences.

Example:

1> io_ansi:enabled().
true

enabled(Device)

-spec enabled(io:device()) -> boolean().

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

erase_character(Chars)

-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">>

erase_display()

-spec erase_display() -> unicode:chardata().

Clear screen after cursor.

Example:

1> io_ansi:erase_display().
<<"\e[J">>

erase_line()

-spec erase_line() -> unicode:chardata().

Erase line at cursor.

Example:

1> io_ansi:erase_line().
<<"\e[K">>

format(Format)

-spec format(format()) -> unicode:unicode_binary().

Equivalent to format(Format, []).

format(Format, Data)

-spec format(format(), Data :: [term()]) -> unicode:unicode_binary().

Equivalent to format(Format, [], []).

format(Format, Data, Options)

-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.

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([invalid_code, "Hello world"]).
** exception error: {invalid_code,invalid_code}
     in function  io_ansi:format_internal/3

For a detailed description of the available formatting options, see io:fwrite/3.

fwrite(Format)

-spec fwrite(Format :: format()) -> ok.

Equivalent to fwrite(standard_io, Format, [], []).

fwrite(Format, Data)

-spec fwrite(Format :: format(), [term()]) -> ok.

Equivalent to fwrite(standard_io, Format, Data, []).

fwrite(Format, Data, Options)

-spec fwrite(Format :: format(), [term()], options()) -> ok.

Equivalent to fwrite(standard_io, Format, Data, Options).

fwrite(Device, Format, Data, Options)

-spec fwrite(IODevice :: io:device(), Format :: format(), [term()], options()) -> ok.

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.

green()

-spec green() -> unicode:chardata().

Change foreground (aka text) color to green.

Example:

1> io_ansi:green().
<<"\e[32m">>

green_background()

-spec green_background() -> unicode:chardata().

Change background color to green.

Example:

1> io_ansi:green_background().
<<"\e[42m">>

insert_character(Chars)

-spec insert_character(Chars :: integer()) -> unicode:chardata().

Insert Chars at cursor.

Example:

1> io_ansi:insert_character(3).
<<"\e[3@">>

insert_line()

-spec insert_line() -> unicode:chardata().

Insert 1 line at cursor.

Example:

1> io_ansi:insert_line().
<<"\e[L">>

insert_line(Lines)

-spec insert_line(Lines :: integer()) -> unicode:chardata().

Insert Lines lines at cursor.

Example:

1> io_ansi:insert_line(2).
<<"\e[2L">>

keypad_transmit_mode()

-spec keypad_transmit_mode() -> unicode:chardata().

Enable keypad transmit mode.

Example:

1> io_ansi:keypad_transmit_mode().
<<"\e[?1h\e=">>

keypad_transmit_mode_off()

-spec keypad_transmit_mode_off() -> unicode:chardata().

Disable keypad transmit mode.

Example:

1> io_ansi:keypad_transmit_mode_off().
<<"\e[?1l\e>">>

light_black()

-spec light_black() -> unicode:chardata().

Change foreground (aka text) color to light black.

Example:

1> io_ansi:light_black().
<<"\e[90m">>

light_black_background()

-spec light_black_background() -> unicode:chardata().

Change background color to light black.

Example:

1> io_ansi:light_black_background().
<<"\e[100m">>

light_blue()

-spec light_blue() -> unicode:chardata().

Change foreground (aka text) color to light blue.

Example:

1> io_ansi:light_blue().
<<"\e[94m">>

light_blue_background()

-spec light_blue_background() -> unicode:chardata().

Change background color to light blue.

Example:

1> io_ansi:light_blue_background().
<<"\e[104m">>

light_cyan()

-spec light_cyan() -> unicode:chardata().

Change foreground (aka text) color to light cyan.

Example:

1> io_ansi:light_cyan().
<<"\e[96m">>

light_cyan_background()

-spec light_cyan_background() -> unicode:chardata().

Change background color to light cyan.

Example:

1> io_ansi:light_cyan_background().
<<"\e[106m">>

light_green()

-spec light_green() -> unicode:chardata().

Change foreground (aka text) color to light green.

Example:

1> io_ansi:light_green().
<<"\e[92m">>

light_green_background()

-spec light_green_background() -> unicode:chardata().

Change background color to light green.

Example:

1> io_ansi:light_green_background().
<<"\e[102m">>

light_magenta()

-spec light_magenta() -> unicode:chardata().

Change foreground (aka text) color to light magenta.

Example:

1> io_ansi:light_magenta().
<<"\e[95m">>

light_magenta_background()

-spec light_magenta_background() -> unicode:chardata().

Change background color to light magenta.

Example:

1> io_ansi:light_magenta_background().
<<"\e[105m">>

light_red()

-spec light_red() -> unicode:chardata().

Change foreground (aka text) color to light red.

Example:

1> io_ansi:light_red().
<<"\e[91m">>

light_red_background()

-spec light_red_background() -> unicode:chardata().

Change background color to light red.

Example:

1> io_ansi:light_red_background().
<<"\e[101m">>

light_white()

-spec light_white() -> unicode:chardata().

Change foreground (aka text) color to light white.

Example:

1> io_ansi:light_white().
<<"\e[97m">>

light_white_background()

-spec light_white_background() -> unicode:chardata().

Change background color to light white.

Example:

1> io_ansi:light_white_background().
<<"\e[107m">>

light_yellow()

-spec light_yellow() -> unicode:chardata().

Change foreground (aka text) color to light yellow.

Example:

1> io_ansi:light_yellow().
<<"\e[93m">>

light_yellow_background()

-spec light_yellow_background() -> unicode:chardata().

Change background color to light yellow.

Example:

1> io_ansi:light_yellow_background().
<<"\e[103m">>

magenta()

-spec magenta() -> unicode:chardata().

Change foreground (aka text) color to magenta.

Example:

1> io_ansi:magenta().
<<"\e[35m">>

magenta_background()

-spec magenta_background() -> unicode:chardata().

Change background color to magenta.

Example:

1> io_ansi:magenta_background().
<<"\e[45m">>

modify_color(Index, R, G, B)

-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\\">>

negative()

-spec negative() -> unicode:chardata().

Turn on negative text style.

Example:

1> io_ansi:negative().
<<"\e[7m">>

negative_off()

-spec negative_off() -> unicode:chardata().

Turn off negative text style.

Example:

1> io_ansi:negative_off().
<<"\e[27m">>

red()

-spec red() -> unicode:chardata().

Change foreground (aka text) color to red.

Example:

1> io_ansi:red().
<<"\e[31m">>

red_background()

-spec red_background() -> unicode:chardata().

Change background color to red.

Example:

1> io_ansi:red_background().
<<"\e[41m">>

reset()

-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">>

reverse_index()

-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">>

scan(Data)

-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]

scroll_backward()

-spec scroll_backward() -> unicode:chardata().

Scroll the screen backward 1 step.

Example:

1> io_ansi:scroll_backward().
<<"\e[1T">>

scroll_backward(Steps)

-spec scroll_backward(Steps :: integer()) -> unicode:chardata().

Scroll the screen backward N step.

Example:

1> io_ansi:scroll_backward(42).
<<"\e[42T">>

scroll_change_region(Line1, Line2)

-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">>

scroll_forward()

-spec scroll_forward() -> unicode:chardata().

Scroll the screen forward 1 step.

Example:

1> io_ansi:scroll_forward().
<<"\e[1S">>

scroll_forward(N)

-spec scroll_forward(N :: integer()) -> unicode:chardata().

Scroll the screen forward N step.

Example:

1> io_ansi:scroll_forward(42).
<<"\e[42S">>

tab()

-spec tab() -> unicode:chardata().

Move cursor one tab forward.

Example:

1> io_ansi:tab().
<<"\t">>

tab_backward()

-spec tab_backward() -> unicode:chardata().

Move cursor one tab backward.

Example:

1> io_ansi:tab_backward().
<<"\e[Z">>

tab_clear()

-spec tab_clear() -> unicode:chardata().

Clear any tab location at the current cursor location.

Example:

1> io_ansi:tab_clear().
<<"\e[0g">>

tab_clear_all()

-spec tab_clear_all() -> unicode:chardata().

Clear all tab locations.

Example:

1> io_ansi:tab_clear_all().
<<"\e[3g">>

tab_set()

-spec tab_set() -> unicode:chardata().

Set a new tab location at the current cursor location.

Example:

1> io_ansi:tab_set().
<<"\eH">>

underline()

-spec underline() -> unicode:chardata().

Turn on underline text style.

Example:

1> io_ansi:underline().
<<"\e[4m">>

underline_off()

-spec underline_off() -> unicode:chardata().

Turn off underline text style.

Example:

1> io_ansi:underline_off().
<<"\e[24m">>

white()

-spec white() -> unicode:chardata().

Change foreground (aka text) color to white.

Example:

1> io_ansi:white().
<<"\e[37m">>

white_background()

-spec white_background() -> unicode:chardata().

Change background color to white.

Example:

1> io_ansi:white_background().
<<"\e[47m">>

yellow()

-spec yellow() -> unicode:chardata().

Change foreground (aka text) color to yellow.

Example:

1> io_ansi:yellow().
<<"\e[33m">>

yellow_background()

-spec yellow_background() -> unicode:chardata().

Change background color to yellow.

Example:

1> io_ansi:yellow_background().
<<"\e[43m">>

Functions: terminfo

tigetflag(TermInfoCapName)

-spec tigetflag(TermInfoCapName :: string()) -> boolean().

Returns the 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

tigetnum(TermInfoCapName)

-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

tinfo()

-spec tinfo() -> #{bool := [#{code := string(), name := string(), full_name := string()}]}.

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"} | ...]
 }

tput(TermInfoCap)

-spec tput(TermInfoCap :: string()) -> unicode:unicode_binary().

Equivalent to tput(TermInfoCap, []).

tput(TermInfoCapName, Args)

-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