]>
Commit | Line | Data |
---|---|---|
fea681da MK |
1 | '\" t |
2 | .\" Copyright (c) 1996 Andries Brouwer <aeb@cwi.nl>, Mon Oct 31 22:13:04 1996 | |
3 | .\" | |
89e3ffe9 | 4 | .\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA) |
fea681da MK |
5 | .\" This is free documentation; you can redistribute it and/or |
6 | .\" modify it under the terms of the GNU General Public License as | |
7 | .\" published by the Free Software Foundation; either version 2 of | |
8 | .\" the License, or (at your option) any later version. | |
8f8359d8 | 9 | .\" %%%LICENSE_END |
fea681da MK |
10 | .\" |
11 | .\" This is combined from many sources. | |
12 | .\" For Linux, the definitive source is of course console.c. | |
13 | .\" About vt100-like escape sequences in general there are | |
14 | .\" the ISO 6429 and ISO 2022 norms, the descriptions of | |
15 | .\" an actual vt100, and the xterm docs (ctlseqs.ms). | |
16 | .\" Substantial portions of this text are derived from a write-up | |
17 | .\" by Eric S. Raymond <esr@thyrsus.com>. | |
18 | .\" | |
19 | .\" Tiny correction, aeb, 961107. | |
20 | .\" | |
2866cb53 MK |
21 | .\" 2006-05-27, Several corrections - Thomas E. Dickey |
22 | .\" | |
9ba01802 | 23 | .TH CONSOLE_CODES 4 2019-03-06 "Linux" "Linux Programmer's Manual" |
fea681da MK |
24 | .SH NAME |
25 | console_codes \- Linux console escape and control sequences | |
26 | .SH DESCRIPTION | |
27 | The Linux console implements a large subset of the VT102 and ECMA-48/ISO | |
28 | 6429/ANSI X3.64 terminal controls, plus certain private-mode sequences | |
28b3cbc5 | 29 | for changing the color palette, character-set mapping, and so on. |
fea681da MK |
30 | In the tabular descriptions below, the second column gives ECMA-48 or DEC |
31 | mnemonics (the latter if prefixed with DEC) for the given function. | |
32 | Sequences without a mnemonic are neither ECMA-48 nor VT102. | |
dd3568a1 | 33 | .PP |
fea681da MK |
34 | After all the normal output processing has been done, and a |
35 | stream of characters arrives at the console driver for actual | |
36 | printing, the first thing that happens is a translation from | |
37 | the code used for processing to the code used for printing. | |
dd3568a1 | 38 | .PP |
fea681da | 39 | If the console is in UTF-8 mode, then the incoming bytes are |
c13182ef | 40 | first assembled into 16-bit Unicode codes. |
2b9b829d | 41 | Otherwise, each byte is transformed according to the current mapping table |
2866cb53 | 42 | (which translates it to a Unicode value). |
511bfbc9 | 43 | See the \fBCharacter Sets\fP section below for discussion. |
dd3568a1 | 44 | .PP |
fea681da MK |
45 | In the normal case, the Unicode value is converted to a font index, |
46 | and this is stored in video memory, so that the corresponding glyph | |
47 | (as found in video ROM) appears on the screen. | |
48 | Note that the use of Unicode (and the design of the PC hardware) | |
49 | allows us to use 512 different glyphs simultaneously. | |
dd3568a1 | 50 | .PP |
fea681da MK |
51 | If the current Unicode value is a control character, or we are |
52 | currently processing an escape sequence, the value will treated | |
c13182ef MK |
53 | specially. |
54 | Instead of being turned into a font index and rendered as | |
fea681da | 55 | a glyph, it may trigger cursor movement or other control functions. |
511bfbc9 | 56 | See the \fBLinux Console Controls\fP section below for discussion. |
dd3568a1 | 57 | .PP |
fea681da | 58 | It is generally not good practice to hard-wire terminal controls into |
c13182ef MK |
59 | programs. |
60 | Linux supports a | |
fea681da | 61 | .BR terminfo (5) |
c13182ef | 62 | database of terminal capabilities. |
fea681da MK |
63 | Rather than emitting console escape sequences by hand, you will almost |
64 | always want to use a terminfo-aware screen library or utility such as | |
65 | .BR ncurses (3), | |
c13182ef | 66 | .BR tput (1), |
fea681da MK |
67 | or |
68 | .BR reset (1). | |
73d8cece | 69 | .SS Linux console controls |
fea681da | 70 | This section describes all the control characters and escape sequences |
75b94dc3 | 71 | that invoke special functions (i.e., anything other than writing a |
c13182ef | 72 | glyph at the current cursor location) on the Linux console. |
1a947a96 MK |
73 | .PP |
74 | .B "Control characters" | |
bdd915e2 | 75 | .PP |
fea681da MK |
76 | A character is a control character if (before transformation |
77 | according to the mapping table) it has one of the 14 codes | |
78 | 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT), | |
79 | 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), | |
80 | 1b (ESC), 7f (DEL). | |
84c517a4 | 81 | One can set a "display control characters" mode (see below), |
fea681da | 82 | and allow 07, 09, 0b, 18, 1a, 7f to be displayed as glyphs. |
9bc87ed0 | 83 | On the other hand, in UTF-8 mode all codes 00\(en1f are regarded |
84c517a4 | 84 | as control characters, regardless of any "display control characters" |
fea681da | 85 | mode. |
2866cb53 | 86 | .PP |
fea681da MK |
87 | If we have a control character, it is acted upon immediately |
88 | and then discarded (even in the middle of an escape sequence) | |
89 | and the escape sequence continues with the next character. | |
90 | (However, ESC starts a new escape sequence, possibly aborting a previous | |
91 | unfinished one, and CAN and SUB abort any escape sequence.) | |
92 | The recognized control characters are BEL, BS, HT, LF, VT, FF, | |
c13182ef MK |
93 | CR, SO, SI, CAN, SUB, ESC, DEL, CSI. |
94 | They do what one would expect: | |
fea681da | 95 | .HP |
8bb93cd4 | 96 | BEL (0x07, \fB^G\fP) beeps; |
fea681da | 97 | .HP |
8bb93cd4 | 98 | BS (0x08, \fB^H\fP) backspaces one column |
fea681da MK |
99 | (but not past the beginning of the line); |
100 | .HP | |
8bb93cd4 | 101 | HT (0x09, \fB^I\fP) goes to the next tab stop or to the end of the line |
fea681da MK |
102 | if there is no earlier tab stop; |
103 | .HP | |
8bb93cd4 MK |
104 | LF (0x0A, \fB^J\fP), VT (0x0B, \fB^K\fP) and |
105 | FF (0x0C, \fB^L\fP) all give a linefeed, | |
d4aa1c16 | 106 | and if LF/NL (new-line mode) is set also a carriage return; |
fea681da | 107 | .HP |
8bb93cd4 | 108 | CR (0x0D, \fB^M\fP) gives a carriage return; |
fea681da | 109 | .HP |
8bb93cd4 | 110 | SO (0x0E, \fB^N\fP) activates the G1 character set; |
fea681da | 111 | .HP |
8bb93cd4 | 112 | SI (0x0F, \fB^O\fP) activates the G0 character set; |
fea681da | 113 | .HP |
8bb93cd4 | 114 | CAN (0x18, \fB^X\fP) and SUB (0x1A, \fB^Z\fP) interrupt escape sequences; |
fea681da | 115 | .HP |
8bb93cd4 | 116 | ESC (0x1B, \fB^[\fP) starts an escape sequence; |
fea681da MK |
117 | .HP |
118 | DEL (0x7F) is ignored; | |
119 | .HP | |
120 | CSI (0x9B) is equivalent to ESC [. | |
1a947a96 MK |
121 | .PP |
122 | .B "ESC- but not CSI-sequences" | |
fea681da MK |
123 | .TS |
124 | l l l. | |
125 | ESC c RIS Reset. | |
126 | ESC D IND Linefeed. | |
127 | ESC E NEL Newline. | |
128 | ESC H HTS Set tab stop at current column. | |
129 | ESC M RI Reverse linefeed. | |
2866cb53 MK |
130 | ESC Z DECID T{ |
131 | DEC private identification. The kernel | |
132 | returns the string ESC [ ? 6 c, claiming | |
133 | that it is a VT102. | |
134 | T} | |
135 | ESC 7 DECSC T{ | |
136 | Save current state (cursor coordinates, | |
137 | attributes, character sets pointed at by G0, G1). | |
138 | T} | |
fea681da MK |
139 | ESC 8 DECRC Restore state most recently saved by ESC 7. |
140 | ESC [ CSI Control sequence introducer | |
141 | ESC % Start sequence selecting character set | |
142 | ESC % @ \0\0\0Select default (ISO 646 / ISO 8859-1) | |
143 | ESC % G \0\0\0Select UTF-8 | |
144 | ESC % 8 \0\0\0Select UTF-8 (obsolete) | |
2bc2f479 | 145 | ESC # 8 DECALN DEC screen alignment test \- fill screen with E's. |
fea681da MK |
146 | ESC ( Start sequence defining G0 character set |
147 | ESC ( B \0\0\0Select default (ISO 8859-1 mapping) | |
2866cb53 | 148 | ESC ( 0 \0\0\0Select VT100 graphics mapping |
2bc2f479 MK |
149 | ESC ( U \0\0\0Select null mapping \- straight to character ROM |
150 | ESC ( K \0\0\0Select user mapping \- the map that is loaded by | |
a4401275 | 151 | \0\0\0the utility \fBmapscrn\fP(8). |
fea681da MK |
152 | ESC ) Start sequence defining G1 |
153 | (followed by one of B, 0, U, K, as above). | |
154 | ESC > DECPNM Set numeric keypad mode | |
155 | ESC = DECPAM Set application keypad mode | |
2866cb53 MK |
156 | ESC ] OSC T{ |
157 | (Should be: Operating system command) | |
158 | ESC ] P \fInrrggbb\fP: set palette, with parameter | |
159 | given in 7 hexadecimal digits after the final P :-(. | |
9bc87ed0 MK |
160 | Here \fIn\fP is the color (0\(en15), and \fIrrggbb\fP indicates |
161 | the red/green/blue values (0\(en255). | |
2866cb53 MK |
162 | ESC ] R: reset palette |
163 | T} | |
fea681da | 164 | .TE |
1a947a96 MK |
165 | .PP |
166 | .B "ECMA-48 CSI sequences" | |
bdd915e2 | 167 | .PP |
fea681da MK |
168 | CSI (or ESC [) is followed by a sequence of parameters, |
169 | at most NPAR (16), that are decimal numbers separated by | |
c13182ef MK |
170 | semicolons. |
171 | An empty or absent parameter is taken to be 0. | |
fea681da | 172 | The sequence of parameters may be preceded by a single question mark. |
2866cb53 | 173 | .PP |
fea681da | 174 | However, after CSI [ (or ESC [ [) a single character is read |
c13182ef MK |
175 | and this entire sequence is ignored. |
176 | (The idea is to ignore an echoed function key.) | |
2866cb53 | 177 | .PP |
fea681da | 178 | The action of a CSI sequence is determined by its final character. |
fea681da | 179 | .TS |
759e590d | 180 | l l l. |
fea681da MK |
181 | @ ICH Insert the indicated # of blank characters. |
182 | A CUU Move cursor up the indicated # of rows. | |
183 | B CUD Move cursor down the indicated # of rows. | |
184 | C CUF Move cursor right the indicated # of columns. | |
185 | D CUB Move cursor left the indicated # of columns. | |
186 | E CNL Move cursor down the indicated # of rows, to column 1. | |
187 | F CPL Move cursor up the indicated # of rows, to column 1. | |
188 | G CHA Move cursor to indicated column in current row. | |
189 | H CUP Move cursor to the indicated row, column (origin at 1,1). | |
190 | J ED Erase display (default: from cursor to end of display). | |
191 | ESC [ 1 J: erase from start to cursor. | |
192 | ESC [ 2 J: erase whole display. | |
31483837 PP |
193 | ESC [ 3 J: erase whole display including scroll-back |
194 | buffer (since Linux 3.0). | |
195 | .\" ESC [ 3 J: commit f8df13e0a901fe55631fed66562369b4dba40f8b | |
fea681da MK |
196 | K EL Erase line (default: from cursor to end of line). |
197 | ESC [ 1 K: erase from start of line to cursor. | |
198 | ESC [ 2 K: erase whole line. | |
199 | L IL Insert the indicated # of blank lines. | |
200 | M DL Delete the indicated # of lines. | |
759e590d MK |
201 | P DCH Delete the indicated # of characters on current line. |
202 | X ECH Erase the indicated # of characters on current line. | |
fea681da | 203 | a HPR Move cursor right the indicated # of columns. |
84c517a4 | 204 | c DA Answer ESC [ ? 6 c: "I am a VT102". |
fea681da MK |
205 | d VPA Move cursor to the indicated row, current column. |
206 | e VPR Move cursor down the indicated # of rows. | |
207 | f HVP Move cursor to the indicated row, column. | |
759e590d | 208 | g TBC Without parameter: clear tab stop at current position. |
fea681da MK |
209 | ESC [ 3 g: delete all tab stops. |
210 | h SM Set Mode (see below). | |
211 | l RM Reset Mode (see below). | |
212 | m SGR Set attributes (see below). | |
213 | n DSR Status report (see below). | |
214 | q DECLL Set keyboard LEDs. | |
215 | ESC [ 0 q: clear all LEDs | |
216 | ESC [ 1 q: set Scroll Lock LED | |
217 | ESC [ 2 q: set Num Lock LED | |
218 | ESC [ 3 q: set Caps Lock LED | |
219 | r DECSTBM Set scrolling region; parameters are top and bottom row. | |
220 | s ? Save cursor location. | |
221 | u ? Restore cursor location. | |
26868e5b | 222 | \` HPA Move cursor to indicated column in current row. |
fea681da | 223 | .TE |
1a947a96 MK |
224 | .PP |
225 | .B ECMA-48 Set Graphics Rendition | |
bdd915e2 | 226 | .PP |
c13182ef | 227 | The ECMA-48 SGR sequence ESC [ \fIparameters\fP m sets display |
2866cb53 | 228 | attributes. |
c13182ef | 229 | Several attributes can be set in the same sequence, separated by |
2866cb53 | 230 | semicolons. |
c13182ef | 231 | An empty parameter (between semicolons or string initiator or |
2866cb53 | 232 | terminator) is interpreted as a zero. |
fea681da MK |
233 | .TS |
234 | l l. | |
2866cb53 | 235 | param result |
fea681da MK |
236 | 0 reset all attributes to their defaults |
237 | 1 set bold | |
238 | 2 set half-bright (simulated with color on a color display) | |
2866cb53 MK |
239 | 4 T{ |
240 | set underscore (simulated with color on a color display) | |
241 | (the colors used to simulate dim or underline are set | |
242 | using ESC ] ...) | |
243 | T} | |
fea681da MK |
244 | 5 set blink |
245 | 7 set reverse video | |
2866cb53 MK |
246 | 10 T{ |
247 | reset selected mapping, display control flag, | |
248 | and toggle meta flag (ECMA-48 says "primary font"). | |
249 | T} | |
250 | 11 T{ | |
251 | select null mapping, set display control flag, | |
252 | reset toggle meta flag (ECMA-48 says "first alternate font"). | |
253 | T} | |
254 | 12 T{ | |
255 | select null mapping, set display control flag, | |
256 | set toggle meta flag (ECMA-48 says "second alternate font"). | |
257 | The toggle meta flag | |
258 | causes the high bit of a byte to be toggled | |
259 | before the mapping table translation is done. | |
260 | T} | |
261 | 21 set normal intensity (ECMA-48 says "doubly underlined") | |
fea681da MK |
262 | 22 set normal intensity |
263 | 24 underline off | |
264 | 25 blink off | |
265 | 27 reverse video off | |
266 | 30 set black foreground | |
267 | 31 set red foreground | |
268 | 32 set green foreground | |
269 | 33 set brown foreground | |
270 | 34 set blue foreground | |
271 | 35 set magenta foreground | |
272 | 36 set cyan foreground | |
273 | 37 set white foreground | |
274 | 38 set underscore on, set default foreground color | |
275 | 39 set underscore off, set default foreground color | |
276 | 40 set black background | |
277 | 41 set red background | |
278 | 42 set green background | |
279 | 43 set brown background | |
280 | 44 set blue background | |
281 | 45 set magenta background | |
282 | 46 set cyan background | |
283 | 47 set white background | |
284 | 49 set default background color | |
285 | .TE | |
1a947a96 MK |
286 | .PP |
287 | .B ECMA-48 Mode Switches | |
fea681da MK |
288 | .TP |
289 | ESC [ 3 h | |
290 | DECCRM (default off): Display control chars. | |
291 | .TP | |
292 | ESC [ 4 h | |
293 | DECIM (default off): Set insert mode. | |
294 | .TP | |
295 | ESC [ 20 h | |
296 | LF/NL (default off): Automatically follow echo of LF, VT or FF with CR. | |
297 | .\" | |
1a947a96 MK |
298 | .PP |
299 | .B ECMA-48 Status Report Commands | |
fea681da MK |
300 | .\" |
301 | .TP | |
302 | ESC [ 5 n | |
303 | Device status report (DSR): Answer is ESC [ 0 n (Terminal OK). | |
304 | .TP | |
305 | ESC [ 6 n | |
306 | Cursor position report (CPR): Answer is ESC [ \fIy\fP ; \fIx\fP R, | |
307 | where \fIx,y\fP is the cursor location. | |
308 | .\" | |
1a947a96 MK |
309 | .PP |
310 | .B DEC Private Mode (DECSET/DECRST) sequences | |
bdd915e2 | 311 | .PP |
fea681da | 312 | .\" |
c13182ef MK |
313 | These are not described in ECMA-48. |
314 | We list the Set Mode sequences; | |
f81fb444 MK |
315 | the Reset Mode sequences are obtained by replacing the final \(aqh\(aq |
316 | by \(aql\(aq. | |
fea681da MK |
317 | .TP |
318 | ESC [ ? 1 h | |
319 | DECCKM (default off): When set, the cursor keys send an ESC O prefix, | |
320 | rather than ESC [. | |
321 | .TP | |
322 | ESC [ ? 3 h | |
c13182ef MK |
323 | DECCOLM (default off = 80 columns): 80/132 col mode switch. |
324 | The driver sources note that this alone does not suffice; some user-mode | |
fea681da MK |
325 | utility such as |
326 | .BR resizecons (8) | |
327 | has to change the hardware registers on the console video card. | |
328 | .TP | |
329 | ESC [ ? 5 h | |
330 | DECSCNM (default off): Set reverse-video mode. | |
331 | .TP | |
332 | ESC [ ? 6 h | |
333 | DECOM (default off): When set, cursor addressing is relative to | |
334 | the upper left corner of the scrolling region. | |
335 | .TP | |
336 | ESC [ ? 7 h | |
c13182ef MK |
337 | DECAWM (default on): Set autowrap on. |
338 | In this mode, a graphic | |
fea681da MK |
339 | character emitted after column 80 (or column 132 of DECCOLM is on) |
340 | forces a wrap to the beginning of the following line first. | |
341 | .TP | |
342 | ESC [ ? 8 h | |
e3e12155 | 343 | DECARM (default on): Set keyboard autorepeat on. |
fea681da MK |
344 | .TP |
345 | ESC [ ? 9 h | |
346 | X10 Mouse Reporting (default off): Set reporting mode to 1 (or reset to | |
5503c85e | 347 | 0)\(emsee below. |
fea681da MK |
348 | .TP |
349 | ESC [ ? 25 h | |
2866cb53 | 350 | DECTECM (default on): Make cursor visible. |
fea681da MK |
351 | .TP |
352 | ESC [ ? 1000 h | |
353 | X11 Mouse Reporting (default off): Set reporting mode to 2 (or reset | |
5503c85e | 354 | to 0)\(emsee below. |
fea681da | 355 | .\" |
1a947a96 MK |
356 | .PP |
357 | .B Linux Console Private CSI Sequences | |
bdd915e2 | 358 | .PP |
fea681da | 359 | .\" |
c13182ef MK |
360 | The following sequences are neither ECMA-48 nor native VT102. |
361 | They are native to the Linux console driver. | |
362 | Colors are in SGR parameters: | |
fea681da | 363 | 0 = black, 1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 = |
e224cfce | 364 | cyan, 7 = white; 8\(en15 = bright versions of 0\(en7. |
fea681da MK |
365 | .TS |
366 | l l. | |
db2280ee JW |
367 | ESC [ 1 ; \fIn\fP ] Set color \fIn\fP as the underline color. |
368 | ESC [ 2 ; \fIn\fP ] Set color \fIn\fP as the dim color. | |
fea681da MK |
369 | ESC [ 8 ] Make the current color pair the default attributes. |
370 | ESC [ 9 ; \fIn\fP ] Set screen blank timeout to \fIn\fP minutes. | |
371 | ESC [ 10 ; \fIn\fP ] Set bell frequency in Hz. | |
372 | ESC [ 11 ; \fIn\fP ] Set bell duration in msec. | |
373 | ESC [ 12 ; \fIn\fP ] Bring specified console to the front. | |
374 | ESC [ 13 ] Unblank the screen. | |
375 | ESC [ 14 ; \fIn\fP ] Set the VESA powerdown interval in minutes. | |
f8db29e8 MK |
376 | ESC [ 15 ] T{ |
377 | Bring the previous console to the front | |
378 | (since Linux 2.6.0). | |
379 | T} | |
8e085a68 MK |
380 | ESC [ 16 ; \fIn\fP ] T{ |
381 | Set the cursor blink interval in milliseconds | |
db2280ee | 382 | (since Linux 4.2). |
8e085a68 MK |
383 | T} |
384 | .\" commit bd63364caa8df38bad2b25b11b2a1b849475cce5 | |
fea681da | 385 | .TE |
73d8cece | 386 | .SS Character sets |
c13182ef | 387 | The kernel knows about 4 translations of bytes into console-screen |
2866cb53 | 388 | symbols. |
4d9b6984 MK |
389 | The four tables are: a) Latin1 \-> PC, |
390 | b) VT100 graphics \-> PC, c) PC \-> PC, d) user-defined. | |
2866cb53 | 391 | .PP |
fea681da | 392 | There are two character sets, called G0 and G1, and one of them |
6387216b MK |
393 | is the current character set. |
394 | (Initially G0.) | |
8bb93cd4 MK |
395 | Typing \fB^N\fP causes G1 to become current, |
396 | \fB^O\fP causes G0 to become current. | |
2866cb53 | 397 | .PP |
c13182ef MK |
398 | These variables G0 and G1 point at a translation table, and can be |
399 | changed by the user. | |
2866cb53 | 400 | Initially they point at tables a) and b), respectively. |
c13182ef | 401 | The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC ( K cause G0 to |
2866cb53 | 402 | point at translation table a), b), c) and d), respectively. |
c13182ef | 403 | The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause G1 to |
2866cb53 MK |
404 | point at translation table a), b), c) and d), respectively. |
405 | .PP | |
fea681da | 406 | The sequence ESC c causes a terminal reset, which is what you want if the |
c13182ef | 407 | screen is all garbled. |
33a0ccb2 | 408 | The oft-advised "echo ^V^O" will make only G0 current, |
fea681da MK |
409 | but there is no guarantee that G0 points at table a). |
410 | In some distributions there is a program | |
411 | .BR reset (1) | |
412 | that just does "echo ^[c". | |
c13182ef | 413 | If your terminfo entry for the console is correct |
d1a71985 | 414 | (and has an entry rs1=\eEc), then "tput reset" will also work. |
2866cb53 | 415 | .PP |
fea681da MK |
416 | The user-defined mapping table can be set using |
417 | .BR mapscrn (8). | |
418 | The result of the mapping is that if a symbol c is printed, the symbol | |
c13182ef MK |
419 | s = map[c] is sent to the video memory. |
420 | The bitmap that corresponds to | |
fea681da | 421 | s is found in the character ROM, and can be changed using |
a5e0a0e4 | 422 | .BR setfont (8). |
73d8cece | 423 | .SS Mouse tracking |
511bfbc9 | 424 | The mouse tracking facility is intended to return |