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