'\" t
.\" Copyright (c) 1996 Andries Brouwer <aeb@cwi.nl>, Mon Oct 31 22:13:04 1996
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\" %%%LICENSE_END
.\"
.\" This is combined from many sources.
.\" For Linux, the definitive source is of course console.c.
.\" About vt100-like escape sequences in general there are
.\" the ISO 6429 and ISO 2022 norms, the descriptions of
.\" an actual vt100, and the xterm docs (ctlseqs.ms).
.\" Substantial portions of this text are derived from a write-up
.\" by Eric S. Raymond <esr@thyrsus.com>.
.\"
.\" Tiny correction, aeb, 961107.
.\"
.\" 2006-05-27, Several corrections - Thomas E. Dickey
.\"
.TH CONSOLE_CODES 4 2015-07-23 "Linux" "Linux Programmer's Manual"
.SH NAME
console_codes \- Linux console escape and control sequences
.SH DESCRIPTION
The Linux console implements a large subset of the VT102 and ECMA-48/ISO
6429/ANSI X3.64 terminal controls, plus certain private-mode sequences
for changing the color palette, character-set mapping, and so on.
In the tabular descriptions below, the second column gives ECMA-48 or DEC
mnemonics (the latter if prefixed with DEC) for the given function.
Sequences without a mnemonic are neither ECMA-48 nor VT102.
.LP
After all the normal output processing has been done, and a
stream of characters arrives at the console driver for actual
printing, the first thing that happens is a translation from
the code used for processing to the code used for printing.
.LP
If the console is in UTF-8 mode, then the incoming bytes are
first assembled into 16-bit Unicode codes.
Otherwise, each byte is transformed according to the current mapping table
(which translates it to a Unicode value).
See the \fBCharacter Sets\fP section below for discussion.
.LP
In the normal case, the Unicode value is converted to a font index,
and this is stored in video memory, so that the corresponding glyph
(as found in video ROM) appears on the screen.
Note that the use of Unicode (and the design of the PC hardware)
allows us to use 512 different glyphs simultaneously.
.LP
If the current Unicode value is a control character, or we are
currently processing an escape sequence, the value will treated
specially.
Instead of being turned into a font index and rendered as
a glyph, it may trigger cursor movement or other control functions.
See the \fBLinux Console Controls\fP section below for discussion.
.LP
It is generally not good practice to hard-wire terminal controls into
programs.
Linux supports a
.BR terminfo (5)
database of terminal capabilities.
Rather than emitting console escape sequences by hand, you will almost
always want to use a terminfo-aware screen library or utility such as
.BR ncurses (3),
.BR tput (1),
or
.BR reset (1).
.SS Linux console controls
This section describes all the control characters and escape sequences
that invoke special functions (i.e., anything other than writing a
glyph at the current cursor location) on the Linux console.
.PP
.B "Control characters"
.sp
A character is a control character if (before transformation
according to the mapping table) it has one of the 14 codes
00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT),
0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB),
1b (ESC), 7f (DEL).
One can set a "display control characters" mode (see below),
and allow 07, 09, 0b, 18, 1a, 7f to be displayed as glyphs.
On the other hand, in UTF-8 mode all codes 00-1f are regarded
as control characters, regardless of any "display control characters"
mode.
.PP
If we have a control character, it is acted upon immediately
and then discarded (even in the middle of an escape sequence)
and the escape sequence continues with the next character.
(However, ESC starts a new escape sequence, possibly aborting a previous
unfinished one, and CAN and SUB abort any escape sequence.)
The recognized control characters are BEL, BS, HT, LF, VT, FF,
CR, SO, SI, CAN, SUB, ESC, DEL, CSI.
They do what one would expect:
.HP
BEL (0x07, \fB^G\fP) beeps;
.HP
BS (0x08, \fB^H\fP) backspaces one column
(but not past the beginning of the line);
.HP
HT (0x09, \fB^I\fP) goes to the next tab stop or to the end of the line
if there is no earlier tab stop;
.HP
LF (0x0A, \fB^J\fP), VT (0x0B, \fB^K\fP) and
FF (0x0C, \fB^L\fP) all give a linefeed,
and if LF/NL (new-line mode) is set also a carriage return;
.HP
CR (0x0D, \fB^M\fP) gives a carriage return;
.HP
SO (0x0E, \fB^N\fP) activates the G1 character set;
.HP
SI (0x0F, \fB^O\fP) activates the G0 character set;
.HP
CAN (0x18, \fB^X\fP) and SUB (0x1A, \fB^Z\fP) interrupt escape sequences;
.HP
ESC (0x1B, \fB^[\fP) starts an escape sequence;
.HP
DEL (0x7F) is ignored;
.HP
CSI (0x9B) is equivalent to ESC [.
.PP
.B "ESC- but not CSI-sequences"
.TS
l l l.
ESC c	RIS	Reset.
ESC D	IND	Linefeed.
ESC E	NEL	Newline.
ESC H	HTS	Set tab stop at current column.
ESC M	RI	Reverse linefeed.
ESC Z	DECID	T{
DEC private identification. The kernel
returns the string  ESC [ ? 6 c, claiming
that it is a VT102.
T}
ESC 7	DECSC	T{
Save current state (cursor coordinates,
attributes, character sets pointed at by G0, G1).
T}
ESC 8	DECRC	Restore state most recently saved by ESC 7.
ESC [	CSI	Control sequence introducer
ESC %		Start sequence selecting character set
ESC % @		\0\0\0Select default (ISO 646 / ISO 8859-1)
ESC % G		\0\0\0Select UTF-8
ESC % 8		\0\0\0Select UTF-8 (obsolete)
ESC # 8	DECALN	DEC screen alignment test \- fill screen with E's.
ESC (		Start sequence defining G0 character set
ESC ( B		\0\0\0Select default (ISO 8859-1 mapping)
ESC ( 0		\0\0\0Select VT100 graphics mapping
ESC ( U		\0\0\0Select null mapping \- straight to character ROM
ESC ( K		\0\0\0Select user mapping \- the map that is loaded by
		\0\0\0the utility \fBmapscrn\fP(8).
ESC )		Start sequence defining G1
		(followed by one of B, 0, U, K, as above).
ESC >	DECPNM	Set numeric keypad mode
ESC =	DECPAM	Set application keypad mode
ESC ]	OSC	T{
(Should be: Operating system command)
ESC ] P \fInrrggbb\fP: set palette, with parameter
given in 7 hexadecimal digits after the final P :-(.
Here \fIn\fP is the color (0-15), and \fIrrggbb\fP indicates
the red/green/blue values (0-255).
ESC ] R: reset palette
T}
.TE
.PP
.B "ECMA-48 CSI sequences"
.sp
CSI (or ESC [) is followed by a sequence of parameters,
at most NPAR (16), that are decimal numbers separated by
semicolons.
An empty or absent parameter is taken to be 0.
The sequence of parameters may be preceded by a single question mark.
.PP
However, after CSI [ (or ESC [ [) a single character is read
and this entire sequence is ignored.
(The idea is to ignore an echoed function key.)
.PP
The action of a CSI sequence is determined by its final character.
.TS
l l l.
@	ICH	Insert the indicated # of blank characters.
A	CUU	Move cursor up the indicated # of rows.
B	CUD	Move cursor down the indicated # of rows.
C	CUF	Move cursor right the indicated # of columns.
D	CUB	Move cursor left the indicated # of columns.
E	CNL	Move cursor down the indicated # of rows, to column 1.
F	CPL	Move cursor up the indicated # of rows, to column 1.
G	CHA	Move cursor to indicated column in current row.
H	CUP	Move cursor to the indicated row, column (origin at 1,1).
J	ED	Erase display (default: from cursor to end of display).
		ESC [ 1 J: erase from start to cursor.
		ESC [ 2 J: erase whole display.
		ESC [ 3 J: erase whole display including scroll-back
		           buffer (since Linux 3.0).
.\" ESC [ 3 J: commit f8df13e0a901fe55631fed66562369b4dba40f8b
K	EL	Erase line (default: from cursor to end of line).
		ESC [ 1 K: erase from start of line to cursor.
		ESC [ 2 K: erase whole line.
L	IL	Insert the indicated # of blank lines.
M	DL	Delete the indicated # of lines.
P	DCH	Delete the indicated # of characters on current line.
X	ECH	Erase the indicated # of characters on current line.
a	HPR	Move cursor right the indicated # of columns.
c	DA	Answer ESC [ ? 6 c: "I am a VT102".
d	VPA	Move cursor to the indicated row, current column.
e	VPR	Move cursor down the indicated # of rows.
f	HVP	Move cursor to the indicated row, column.
g	TBC	Without parameter: clear tab stop at current position.
		ESC [ 3 g: delete all tab stops.
h	SM	Set Mode (see below).
l	RM	Reset Mode (see below).
m	SGR	Set attributes (see below).
n	DSR	Status report (see below).
q	DECLL	Set keyboard LEDs.
		ESC [ 0 q: clear all LEDs
		ESC [ 1 q: set Scroll Lock LED
		ESC [ 2 q: set Num Lock LED
		ESC [ 3 q: set Caps Lock LED
r	DECSTBM	Set scrolling region; parameters are top and bottom row.
s	?	Save cursor location.
u	?	Restore cursor location.
\`	HPA	Move cursor to indicated column in current row.
.TE
.PP
.B ECMA-48 Set Graphics Rendition
.sp
The ECMA-48 SGR sequence ESC [ \fIparameters\fP m sets display
attributes.
Several attributes can be set in the same sequence, separated by
semicolons.
An empty parameter (between semicolons or string initiator or
terminator) is interpreted as a zero.
.TS
l l.
param	result
0	reset all attributes to their defaults
1	set bold
2	set half-bright (simulated with color on a color display)
4	T{
set underscore (simulated with color on a color display)
(the colors used to simulate dim or underline are set
using ESC ] ...)
T}
5	set blink
7	set reverse video
10	T{
reset selected mapping, display control flag,
and toggle meta flag (ECMA-48 says "primary font").
T}
11	T{
select null mapping, set display control flag,
reset toggle meta flag (ECMA-48 says "first alternate font").
T}
12	T{
select null mapping, set display control flag,
set toggle meta flag (ECMA-48 says "second alternate font").
The toggle meta flag
causes the high bit of a byte to be toggled
before the mapping table translation is done.
T}
21	set normal intensity (ECMA-48 says "doubly underlined")
22	set normal intensity
24	underline off
25	blink off
27	reverse video off
30	set black foreground
31	set red foreground
32	set green foreground
33	set brown foreground
34	set blue foreground
35	set magenta foreground
36	set cyan foreground
37	set white foreground
38	set underscore on, set default foreground color
39	set underscore off, set default foreground color
40	set black background
41	set red background
42	set green background
43	set brown background
44	set blue background
45	set magenta background
46	set cyan background
47	set white background
49	set default background color
.TE
.PP
.B ECMA-48 Mode Switches
.TP
ESC [ 3 h
DECCRM (default off): Display control chars.
.TP
ESC [ 4 h
DECIM (default off): Set insert mode.
.TP
ESC [ 20 h
LF/NL (default off): Automatically follow echo of LF, VT or FF with CR.
.\"
.PP
.B ECMA-48 Status Report Commands
.\"
.TP
ESC [ 5 n
Device status report (DSR): Answer is ESC [ 0 n (Terminal OK).
.TP
ESC [ 6 n
Cursor position report (CPR): Answer is ESC [ \fIy\fP ; \fIx\fP R,
where \fIx,y\fP is the cursor location.
.\"
.PP
.B DEC Private Mode (DECSET/DECRST) sequences
.sp
.\"
These are not described in ECMA-48.
We list the Set Mode sequences;
the Reset Mode sequences are obtained by replacing the final \(aqh\(aq
by \(aql\(aq.
.TP
ESC [ ? 1 h
DECCKM (default off): When set, the cursor keys send an ESC O prefix,
rather than ESC [.
.TP
ESC [ ? 3 h
DECCOLM (default off = 80 columns): 80/132 col mode switch.
The driver sources note that this alone does not suffice; some user-mode
utility such as
.BR resizecons (8)
has to change the hardware registers on the console video card.
.TP
ESC [ ? 5 h
DECSCNM (default off): Set reverse-video mode.
.TP
ESC [ ? 6 h
DECOM (default off): When set, cursor addressing is relative to
the upper left corner of the scrolling region.
.TP
ESC [ ? 7 h
DECAWM (default on): Set autowrap on.
In this mode, a graphic
character emitted after column 80 (or column 132 of DECCOLM is on)
forces a wrap to the beginning of the following line first.
.TP
ESC [ ? 8 h
DECARM (default on): Set keyboard autorepeat on.
.TP
ESC [ ? 9 h
X10 Mouse Reporting (default off): Set reporting mode to 1 (or reset to
0)\(emsee below.
.TP
ESC [ ? 25 h
DECTECM (default on): Make cursor visible.
.TP
ESC [ ? 1000 h
X11 Mouse Reporting (default off): Set reporting mode to 2 (or reset
to 0)\(emsee below.
.\"
.PP
.B Linux Console Private CSI Sequences
.sp
.\"
The following sequences are neither ECMA-48 nor native VT102.
They are native to the Linux console driver.
Colors are in SGR parameters:
0 = black, 1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 =
cyan, 7 = white.
.TS
l l.
ESC [ 1 ; \fIn\fP ]	Set color \fIn\fP as the underline color
ESC [ 2 ; \fIn\fP ]	Set color \fIn\fP as the dim color
ESC [ 8 ]       	Make the current color pair the default attributes.
ESC [ 9 ; \fIn\fP ]	Set screen blank timeout to \fIn\fP minutes.
ESC [ 10 ; \fIn\fP ]	Set bell frequency in Hz.
ESC [ 11 ; \fIn\fP ]	Set bell duration in msec.
ESC [ 12 ; \fIn\fP ]	Bring specified console to the front.
ESC [ 13 ]      	Unblank the screen.
ESC [ 14 ; \fIn\fP ]   	Set the VESA powerdown interval in minutes.
ESC [ 15 ]      	T{
Bring the previous console to the front
(since Linux 2.6.0).
T}
ESC [ 16 ; \fIn\fP ]   	T{
Set the cursor blink interval in milliseconds
(since Linux 4.2)
T}
.\" commit bd63364caa8df38bad2b25b11b2a1b849475cce5
.TE
.SS Character sets
The kernel knows about 4 translations of bytes into console-screen
symbols.
The four tables are: a) Latin1 \-> PC,
b) VT100 graphics \-> PC, c) PC \-> PC, d) user-defined.
.PP
There are two character sets, called G0 and G1, and one of them
is the current character set.
(Initially G0.)
Typing \fB^N\fP causes G1 to become current,
\fB^O\fP causes G0 to become current.
.PP
These variables G0 and G1 point at a translation table, and can be
changed by the user.
Initially they point at tables a) and b), respectively.
The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC ( K cause G0 to
point at translation table a), b), c) and d), respectively.
The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause G1 to
point at translation table a), b), c) and d), respectively.
.PP
The sequence ESC c causes a terminal reset, which is what you want if the
screen is all garbled.
The oft-advised "echo ^V^O" will make only G0 current,
but there is no guarantee that G0 points at table a).
In some distributions there is a program
.BR reset (1)
that just does "echo ^[c".
If your terminfo entry for the console is correct
(and has an entry rs1=\\Ec), then "tput reset" will also work.
.PP
The user-defined mapping table can be set using
.BR mapscrn (8).
The result of the mapping is that if a symbol c is printed, the symbol
s = map[c] is sent to the video memory.
The bitmap that corresponds to
s is found in the character ROM, and can be changed using
.BR setfont (8).
.SS Mouse tracking
The mouse tracking facility is intended to return
.BR xterm (1)-compatible
mouse status reports.
Because the console driver has no way to know
the device or type of the mouse, these reports are returned in the
console input stream only when the virtual terminal driver receives
a mouse update ioctl.
These ioctls must be generated by a mouse-aware
user-mode application such as the
.BR gpm (8)
daemon.
.PP
The mouse tracking escape sequences generated by
\fBxterm\fP(1) encode numeric parameters in a single character as
\fIvalue\fP+040.
For example, \(aq!\(aq is 1.
The screen coordinate system is 1-based.
.PP
The X10 compatibility mode sends an escape sequence on button press
encoding the location and the mouse button pressed.
It is enabled by sending ESC [ ? 9 h and disabled with ESC [ ? 9 l.
On button press, \fBxterm\fP(1) sends
ESC [ M \fIbxy\fP (6 characters).
Here \fIb\fP is button\-1,
and \fIx\fP and \fIy\fP are the x and y coordinates of the mouse
when the button was pressed.
This is the same code the kernel also produces.
.PP
Normal tracking mode (not implemented in Linux 2.0.24) sends an escape
sequence on both button press and release.
Modifier information is also sent.
It is enabled by sending ESC [ ? 1000 h and disabled with
ESC [ ? 1000 l.
On button press or release, \fBxterm\fP(1) sends ESC [ M
\fIbxy\fP.
The low two bits of \fIb\fP encode button information:
0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release.
The upper bits encode what modifiers were down when the button was
pressed and are added together: 4=Shift, 8=Meta, 16=Control.
Again \fIx\fP and
\fIy\fP are the x and y coordinates of the mouse event.
The upper left corner is (1,1).
.SS Comparisons with other terminals
Many different terminal types are described, like the Linux console,
as being "VT100-compatible".
Here we discuss differences between the
Linux console and the two most important others, the DEC VT102 and
.BR xterm (1).
.\"
.PP
.B Control-character handling
.sp
The VT102 also recognized the following control characters:
.HP
NUL (0x00) was ignored;
.HP
ENQ (0x05) triggered an answerback message;
.HP
DC1 (0x11, \fB^Q\fP, XON) resumed transmission;
.HP
DC3 (0x13, \fB^S\fP, XOFF) caused VT100 to ignore (and stop transmitting)
all codes except XOFF and XON.
.LP
VT100-like DC1/DC3 processing may be enabled by the terminal driver.
.LP
The
.BR xterm (1)
program (in VT100 mode) recognizes the control characters
BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC.
.\"
.PP
.B Escape sequences
.sp
VT100 console sequences not implemented on the Linux console:
.TS
l l l.
ESC N	SS2	Single shift 2. (Select G2 character set for the next
		character only.)
ESC O	SS3	Single shift 3. (Select G3 character set for the next
		character only.)
ESC P	DCS	Device control string (ended by ESC \\)
ESC X	SOS	Start of string.
ESC ^	PM	Privacy message (ended by ESC \\)
ESC \\	ST	String terminator
ESC * ...		Designate G2 character set
ESC + ...		Designate G3 character set
.TE
.PP
The program
.BR xterm (1)
(in VT100 mode) recognizes ESC c, ESC # 8, ESC >, ESC =,
ESC D, ESC E, ESC H, ESC M, ESC N, ESC O, ESC P ... ESC \\,
ESC Z (it answers ESC [ ? 1 ; 2 c, "I am a VT100 with
advanced video option")
and ESC ^ ... ESC \\ with the same meanings as indicated above.
It accepts ESC (, ESC ), ESC *,  ESC + followed by 0, A, B for
the DEC special character and line drawing set, UK, and US-ASCII,
respectively.
.PP
The user can configure \fBxterm\fP(1) to respond to VT220-specific
control sequences, and it will identify itself as a VT52, VT100, and
up depending on the way it is configured and initialized.
.PP
It accepts ESC ] (OSC) for the setting of certain resources.
In addition to the ECMA-48 string terminator (ST),
\fBxterm\fP(1) accepts a BEL to terminate an OSC string.
These are a few of the OSC control sequences recognized by \fBxterm\fP(1):
.TS
l l.
ESC ] 0 ; \fItxt\fP ST	Set icon name and window title to \fItxt\fP.
ESC ] 1 ; \fItxt\fP ST	Set icon name to \fItxt\fP.
ESC ] 2 ; \fItxt\fP ST	Set window title to \fItxt\fP.
ESC ] 4 ; \fInum\fP; \fItxt\fP ST	Set ANSI color \fInum\fP to \fItxt\fP.
ESC ] 10 ; \fItxt\fP ST	Set dynamic text color to \fItxt\fP.
ESC ] 4 6 ; \fIname\fP ST	Change log file to \fIname\fP (normally disabled
	by a compile-time option)
ESC ] 5 0 ; \fIfn\fP ST	Set font to \fIfn\fP.
.TE
.PP
It recognizes the following with slightly modified meaning
(saving more state, behaving closer to VT100/VT220):
.TS
l l l.
ESC 7  DECSC	Save cursor
ESC 8  DECRC	Restore cursor
.TE
.PP
It also recognizes
.TS
l l l.
ESC F		Cursor to lower left corner of screen (if enabled by
		\fBxterm\fP(1)'s \fBhpLowerleftBugCompat\fP resource)
ESC l		Memory lock (per HP terminals).
		Locks memory above the cursor.
ESC m		Memory unlock (per HP terminals).
ESC n	LS2	Invoke the G2 character set.
ESC o	LS3	Invoke the G3 character set.
ESC |	LS3R	Invoke the G3 character set as GR.
ESC }	LS2R	Invoke the G2 character set as GR.
ESC ~	LS1R	Invoke the G1 character set as GR.
.TE
.PP
It also recognizes ESC % and provides a more complete UTF-8
implementation than Linux console.
.\"
.PP
.B CSI Sequences
.sp
Old versions of \fBxterm\fP(1), for example, from X11R5,
interpret the blink SGR as a bold SGR.
Later versions which implemented ANSI colors, for example,
XFree86 3.1.2A in 1995, improved this by allowing
the blink attribute to be displayed as a color.
Modern versions of xterm implement blink SGR as blinking text
and still allow colored text as an alternate rendering of SGRs.
Stock X11R6 versions did not recognize the color-setting SGRs until
the X11R6.8 release, which incorporated XFree86 xterm.
All ECMA-48 CSI sequences recognized by Linux are also recognized by
.IR xterm ,
however \fBxterm\fP(1) implements several ECMA-48 and DEC control sequences
not recognized by Linux.
.PP
The \fBxterm\fP(1)
program recognizes all of the DEC Private Mode sequences listed
above, but none of the Linux private-mode sequences.
For discussion of \fBxterm\fP(1)'s
own private-mode sequences, refer to the
\fIXterm Control Sequences\fP
document by
Edward Moy,
Stephen Gildea,
and Thomas E. Dickey
available with the X distribution.
That document, though terse, is much longer than this manual page.
For a chronological overview,
.PP
.RS
.UR http://invisible-island.net\:/xterm\:/xterm.log.html
.UE
.RE
.PP
details changes to xterm.
.PP
The \fIvttest\fP program
.PP
.RS
.UR http://invisible-island.net\:/vttest/
.UE
.RE
.PP
demonstrates many of these control sequences.
The \fBxterm\fP(1) source distribution also contains sample
scripts which exercise other features.
.SH NOTES
ESC 8 (DECRC) is not able to restore the character set changed with
ESC %.
.SH BUGS
In 2.0.23, CSI is broken, and NUL is not ignored inside
escape sequences.
.PP
Some older kernel versions (after 2.0) interpret 8-bit control
sequences.
These "C1 controls" use codes between 128 and 159 to replace
ESC [, ESC ] and similar two-byte control sequence initiators.
There are fragments of that in modern kernels (either overlooked or
broken by changes to support UTF-8),
but the implementation is incomplete and should be regarded
as unreliable.
.PP
Linux "private mode" sequences do not follow the rules in ECMA-48
for private mode control sequences.
In particular, those ending with ] do not use a standard terminating
character.
The OSC (set palette) sequence is a greater problem,
since \fBxterm\fP(1) may interpret this as a control sequence
which requires a string terminator (ST).
Unlike the \fBsetterm\fP(1) sequences which will be ignored (since
they are invalid control sequences), the palette sequence will make
\fBxterm\fP(1) appear to hang (though pressing the return-key
will fix that).
To accommodate applications which have been hardcoded to use Linux
control sequences,
set the \fBxterm\fP(1) resource \fBbrokenLinuxOSC\fP to true.
.PP
An older version of this document implied that Linux recognizes the
ECMA-48 control sequence for invisible text.
It is ignored.
.SH SEE ALSO
.BR console (4),
.BR console_ioctl (4),
.BR charsets (7)
