foot-ctlseqs(7) # NAME foot-ctlseqs - terminal control sequences supported by foot # DESCRIPTION This document describes all the control sequences supported by foot. - Control characters - Sequences beginning with ESC - CSI - Control Sequence Introducer - SGR - Indexed and RGB colors (256-color palette and 24-bit colors) - Private modes - Window manipulation - Other - OSC - Operating System Command - DCS - Device Control String # Control characters [[ *Sequence* :[ *Name* :< *Description* | \\a : BEL : Depends on what *bell* in *foot.ini*(5) is set to. | \\b : BS : Backspace; move the cursor left one step. Wrap if _bw_ is enabled. | \\t : HT : Horizontal tab; move the cursor to the next tab stop. | \\n : LF : Line feed; move the cursor down one step, or scroll content up if at the bottom line. | \\v : VT : Vertical tab; identical to _LF_. | \\f : FF : Form feed; identical to _LF_. | \\r : CR : Carriage ret; move the cursor to the leftmost column. | \\x0E : SO : Shift out; select the _G1_ character set. | \\x0F : SI : Shift in; select the _G0_ character set. # Sequences beginning with ESC Note: this table excludes sequences where ESC is part of a 7-bit equivalent to 8-bit C1 controls. [[ *Sequence* :[ *Name* :[ *Origin* :< *Description* | \\E 7 : DECSC : VT100 : Save cursor position. | \\E 8 : DECRC : VT100 : Restore cursor position. | \\E c : RIS : VT100 : Reset terminal to initial state. | \\E D : IND : VT100 : Line feed; move the cursor down one step, or scroll content up if at the bottom margin. | \\E E : NEL : VT100 : Next line; move the cursor down one step, and to the first column. Content is scrolled up if at the bottom line. | \\E H : HTS : VT100 : Set one horizontal tab stop at the current position. | \\E M : RI : VT100 : Reverse index; move the cursor up one step, or scroll content down if at the top margin. | \\E N : SS2 : VT220 : Single shift select of G2 character set (affects next character only). | \\E O : SS3 : VT220 : Single shift select of G3 character set (affects next character only). | \\E = : DECKPAM : VT100 : Switch keypad to _application_ mode. | \\E > : DECKPNM : VT100 : Switch keypad to _numeric_ mode. | \\E ( _C_ : SCS : VT100 : Designate G0 character set. Supported values for _C_ are: *0* (DEC Special Character and Line Drawing Set), and *B* (USASCII). | \\E ) _C_ : SCS : VT100 : Designate G1 character set. Same supported values for _C_ as in _G0_. | \\E \* _C_ : SCS : VT220 : Designate G2 character set. Same supported values for _C_ as in _G0_. | \\E + _C_ : SCS : VT220 : Designate G3 character set. Same supported values for _C_ as in _G0_. # CSI All sequences begin with *\\E[*, sometimes abbreviated "CSI". Spaces are used in the sequence strings to make them easier to read, but are not actually part of the string (i.e. *\\E[ 1 m* is really *\\E[1m*). ## SGR All SGR sequences are in the form *\\E[* _N_ *m*, where _N_ is a decimal number - the _parameter_. Multiple parameters can be combined in a single CSI sequence by separating them with semicolons: *\\E[ 1;2;3 m*. [[ *Parameter* :< *Description* | 0 : Reset all attributes | 1 : Bold | 2 : Dim | 3 : Italic | 4 : Underline, including styled underlines | 5 : Blink | 7 : Reverse video; swap foreground and background colors | 8 : Conceal; text is not visible, but is copiable | 9 : Crossed-out/strike | 21 : Double underline | 22 : Disable *bold* and *dim* | 23 : Disable italic | 24 : Disable underline | 25 : Disable blink | 27 : Disable reverse video | 28 : Disable conceal | 29 : Disable crossed-out | 30-37 : Select foreground color (using *regularN* in *foot.ini*(5)) | 38 : Select foreground color, see "indexed and RGB colors" below | 39 : Use the default foreground color (*foreground* in *foot.ini*(5)) | 40-47 : Select background color (using *regularN* in *foot.ini*(5)) | 48 : Select background color, see "indexed and RGB colors" below | 49 : Use the default background color (*background* in *foot.ini*(5)) | 58 : Select underline color, see "indexed and RGB colors" below | 59 : Use the default underline color | 90-97 : Select foreground color (using *brightN* in *foot.ini*(5)) | 100-107 : Select background color (using *brightN* in *foot.ini*(5)) ## Indexed and RGB colors (256-color palette and 24-bit colors) Foot supports both the new sub-parameter based variants, and the older parameter based variants for setting foreground and background colors. Indexed colors: - *\\E[ 38 : 5 :* _idx_ *m* - *\\E[ 38 ; 5 ;* _idx_ *m* RGB colors: - *\\E[ 38 : 2 :* _cs_ *:* _r_ *:* _g_ *:* _b_ *m* - *\\E[ 38 : 2 :* _r_ *:* _g_ *:* _b_ *m* - *\\E[ 38 ; 2 ;* _r_ *;* _g_ *;* _b_ *m* The first variant is the "correct" one (and foot also recognizes, but ignores, the optional _tolerance_ parameters). The second one is allowed since many programs "forget" the color space ID, _cs_. The sub-parameter based variants are preferred, and are what foot's *terminfo*(5) entry uses. ## Private Modes There are several Boolean-like "modes" that affect certain aspects of the terminal's behavior. These modes can be manipulated with the following 4 escape sequences: [[ *Sequence* :[ *Name* :< *Description* | \\E[ ? _Pm_ h : DECSET : Enable private mode | \\E[ ? _Pm_ l : DECRST : Disable private mode | \\E[ ? _Pm_ s : XTSAVE : Save private mode | \\E[ ? _Pm_ r : XTRESTORE : Restore private mode The _Pm_ parameter in the above sequences denotes a numerical ID that corresponds to one of the following modes: [[ *Parameter* :[ *Origin* :< *Description* | 1 : VT100 : Cursor keys mode (DECCKM) | 5 : VT100 : Reverse video (DECSCNM) | 6 : VT100 : Origin mode (DECOM) | 7 : VT100 : Auto-wrap mode (DECAWM) | 12 : AT&T 610 : Cursor blink | 25 : VT220 : Cursor visibility (DECTCEM) | 45 : xterm : Reverse-wraparound mode | 47 : xterm : Same as 1047 (see below) | 66 : VT320 : Numeric keypad mode (DECNKM); same as DECKPAM/DECKPNM when enabled/disabled | 1000 : xterm : Send mouse x/y on button press/release | 1001 : xterm : Use hilite mouse tracking | 1002 : xterm : Use cell motion mouse tracking | 1003 : xterm : Use all motion mouse tracking | 1004 : xterm : Send FocusIn/FocusOut events | 1006 : xterm : SGR mouse mode | 1007 : xterm : Alternate scroll mode | 1015 : urxvt : urxvt mouse mode | 1016 : xterm : SGR-Pixels mouse mode | 1034 : xterm : 8-bit Meta mode | 1035 : xterm : Num Lock modifier (see xterm numLock option) | 1036 : xterm : Send ESC when Meta modifies a key (see xterm metaSendsEscape option) | 1042 : xterm : Perform action for BEL character (see *bell* in *foot.ini*(5)) | 1047 : xterm : Use alternate screen buffer | 1048 : xterm : Save/restore cursor (DECSET=save, DECRST=restore) | 1049 : xterm : Equivalent to 1048 and 1047 combined | 1070 : xterm : Use private color registers for each sixel | 2004 : xterm : Wrap pasted text with start/end delimiters (bracketed paste mode) | 2026 : terminal-wg : Application synchronized updates mode | 2027 : contour : Grapheme cluster processing | 2031 : contour : Request color theme updates | 2048 : TODO : In-band window resize notifications | 8452 : xterm : Position cursor to the right of sixels, instead of on the next line | 737769 : foot : Input Method Editor (IME) mode ## Window manipulation Foot implements a sub-set of XTerm's (originally dtterm's) window manipulation sequences. The generic format is: *\\E[ *_Ps_* ; *_Ps_* ; *_Ps_* t* [[ *Parameter 1* :[ *Parameter 2* :< *Description* | 11 : - : Report if window is iconified. Foot always reports *1* - not iconified. | 13 : - : Report window position. Foot always reports (0,0), due to Wayland limitations. | 13 : 2 : Report text area position. Foot always reports (0,0) due to Wayland limitations. | 14 : - : Report text area size, in pixels. Foot reports the grid size, excluding the margins. | 14 : 2 : Report window size, in pixels. Foot reports the grid size plus the margins. | 15 : - : Report the screen size, in pixels. | 16 : - : Report the cell size, in pixels. | 18 : - : Report text area size, in characters. | 19 : - : Report screen size, in characters. | 20 : - : Report icon label. | 22 : - : Push window title+icon. | 22 : 1 : Push window icon. | 22 : 2 : Push window title. | 23 : - : Pop window title+icon. | 23 : 1 : Pop window icon. | 23 : 2 : Pop window title. ## Other [[ *Parameter* :[ *Name* :[ *Origin* :< *Description* | \\E[ _Ps_ c : DA : VT100 : Send primary device attributes. Foot responds with "I'm a VT220 with sixel and ANSI color support". | \\E[ _Ps_ A : CUU : VT100 : Cursor up - move cursor up _Ps_ times. | \\E[ _Ps_ B : CUD : VT100 : Cursor down - move cursor down _Ps_ times. | \\E[ _Ps_ C : CUF : VT100 : Cursor forward - move cursor to the right _Ps_ times. | \\E[ _Ps_ D : CUB : VT100 : Cursor backward - move cursor to the left _Ps_ times. | \\E[ _Ps_ g : TBC : VT100 : Tab clear. _Ps_=0 -> clear current column. _Ps_=3 -> clear all. | \\E[ _Ps_ ; _Ps_ f : HVP : VT100 : Horizontal and vertical position - move cursor to _row_ ; _column_. | \\E[ _Ps_ ; _Ps_ H : CUP : VT100 : Cursor position - move cursor to _row_ ; _column_. | \\E[ _Ps_ J : ED : VT100 : Erase in display. _Ps_=0 -> below cursor. _Ps_=1 -> above | \\E[ _Ps_ K : EL : VT100 : Erase in line. _Ps_=0 -> right of cursor. _Ps_=1 -> left of cursor. _Ps_=2 -> all. | \\E[ _Pm_ h : SM : VT100 : Set mode. _Pm_=4 -> enable IRM (Insertion Replacement Mode). All other values of _Pm_ are unsupported. | \\E[ _Pm_ l : RM : VT100 : Reset mode. _Pm_=4 -> disable IRM (Insertion Replacement Mode). All other values of _Pm_ are unsupported. | \\E[ _Ps_ n : DSR : VT100 : Device status report. _Ps_=5 -> device status. _Ps_=6 -> cursor position. | \\E[ _Ps_ L : IL : VT220 : Insert _Ps_ lines. | \\E[ _Ps_ M : DL : VT220 : Delete _Ps_ lines. | \\E[ _Ps_ P : DCH : VT220 : Delete _Ps_ characters. | \\E[ _Ps_ @ : ICH : VT220 : Insert _Ps_ blank characters. | \\E[ _Ps_ X : ECH : VT220 : Erase _Ps_ characters. | \\E[ > c : DA2 : VT220 : Send secondary device attributes. Foot responds with "I'm a VT220 and here's my version number". | \\E[ ! p : DECSTR : VT220 : Soft terminal reset. | \\E[ ? _Ps_ $ p : DECRQM : VT320 : Request status of DEC private mode. The _Ps_ parameter corresponds to one of the values mentioned in the "Private Modes" section above (as set with DECSET/DECRST). | \\E[ _Ps_ $ p : DECRQM : VT320 : Request status of ECMA-48/ANSI mode. See the descriptions for SM/RM above for recognized _Ps_ values. | \\E[ _Pt_ ; _Pl_ ; _Pb_ ; _Pr_ ; _Pm_ $ r : DECCARA : VT400 : Change attributes in rectangular area. _Pt_, _Pl_, _Pb_ and _Pr_ denotes the rectangle, _Pm_ denotes the SGR attributes. | \\E[ _Pt_ ; _Pl_ ; _Pb_ ; _Pr_ ; _Pm_ $ t : DECRARA : VT400 : Invert attributes in rectangular area. _Pt_, _Pl_, _Pb_ and _Pr_ denotes the rectangle, _Pm_ denotes the SGR attributes. | \\E[ _Pt_ ; _Pl_ ; _Pb_ ; _Pr_ ; _Pp_ ; _Pt_ ; _Pl_ ; _Pp_ $ v : DECCRA : VT400 : Copy rectangular area. _Pt_, _Pl_, _Pb_ and _Pr_ denotes the rectangle, _Pt_ and _Pl_ denotes the target location. | \\E[ _Pc_ ; _Pt_ ; _Pl_ ; _Pb_ ; _Pr_ $ x : DECFRA : VT420 : Fill rectangular area. _Pc_ is the character to use, _Pt_, _Pl_, _Pb_ and _Pr_ denotes the rectangle. | \\E[ _Pt_ ; _Pl_ ; _Pb_ ; _Pr_ $ z : DECERA : VT400 : Erase rectangular area. _Pt_, _Pl_, _Pb_ and _Pr_ denotes the rectangle. | \\E[ _Ps_ T : SD : VT420 : Scroll down _Ps_ lines. | \\E[ s : SCOSC : SCO, VT510 : Save cursor position. | \\E[ u : SCORC : SCO, VT510 : Restore cursor position. | \\E[ _Ps_ SP q : DECSCUSR : VT510 : Set cursor style. In foot, _Ps_=0 means "use style from foot.ini". | \\E[ = _Ps_ c : DA3 : VT510 : Send tertiary device attributes. Foot responds with "FOOT", in hexadecimal. | \\E[ _Pm_ d : VPA : ECMA-48 : Line position absolute - move cursor to line _Pm_. | \\E[ _Pm_ e : VPR : ECMA-48 : Line position relative - move cursor down _Pm_ lines. | \\E[ _Pm_ a : HPR : ECMA-48 : Character position relative - move cursor to the right _Pm_ times. | \\E[ _Ps_ E : CNL : ECMA-48 : Cursor next line - move the cursor down _Ps_ times. | \\E[ _Ps_ F : CPL : ECMA-48 : Cursor preceding line - move the cursor up _Ps_ times. | \\E[ _Pm_ ` : HPA : ECMA-48 : Character position absolute - move cursor to column _Pm_. | \\E[ _Ps_ G : CHA : ECMA-48 : Cursor character absolute - move cursor to column _Ps_. cursor. _Ps_=2 -> all. _Ps_=3 -> saved lines. | \\E[ _Ps_ S : SU : ECMA-48 : Scroll up _Ps_ lines. | \\E[ _Ps_ I : CHT : ECMA-48 : Cursor forward tabulation _Ps_ tab stops. | \\E[ _Ps_ Z : CBT : ECMA-48 : Cursor backward tabulation _Ps_ tab stops. | \\E[ _Ps_ b : REP : ECMA-48 : Repeat the preceding printable character _Ps_ times. | \\E[ ? _Pi_ ; _Pa_ ; _Pv_ S : XTSMGRAPHICS : xterm : Set or request sixel attributes. | \\E[ > _Ps_ q : XTVERSION : xterm : _Ps_=0 -> report terminal name and version, in the form *\\EP>|foot(version)\\E\\*. | \\E[ > 4 ; _Pv_ m : XTMODKEYS : xterm : Set level of the _modifyOtherKeys_ property to _Pv_. Note that foot only supports level 1 and 2, where level 1 is the default setting. | \\E[ ? _Pp_ m : XTQMODKEYS : xterm : Query key modifier options | \\E[ > 4 n : : xterm : Resets the _modifyOtherKeys_ property to level 1. Note that in foot, this sequence does not completely disable _modifyOtherKeys_, since foot only supports level 1 and level 2 (and not level 0). | \\E[ ? u : : kitty : Query current values of the Kitty keyboard flags. | \\E[ > _flags_ u : : kitty : Push a new entry, _flags_, to the Kitty keyboard stack. | \\E[ < _number_ u : : kitty : Pop _number_ of entries from the Kitty keyboard stack. | \\E[ = _flags_ ; _mode_ u : : kitty : Update current Kitty keyboard flags, according to _mode_. | \\E[ # P : XTPUSHCOLORS : xterm : Push current color palette onto stack | \\E[ # Q : XTPOPCOLORS : xterm : Pop color palette from stack | \\E[ # R : XTREPORTCOLORS : xterm : Report the current entry on the palette stack, and the number of palettes stored on the stack. | \\E[ ? 996 n : Query the current (color) theme mode : contour : The current color theme mode (light or dark) is reported as *CSI ? 997 ; 1|2 n*, where *1* means dark and *2* light. By convention, the primary theme in foot is considered dark, and the alternative theme light. # OSC All _OSC_ sequences begin with *\\E]*, sometimes abbreviated _OSC_. [[ *Sequence* :[ *Origin* :< *Description* | \\E] 0 ; _Pt_ \\E\\ : xterm : Set window icon and title to _Pt_. | \\E] 1 ; _Pt_ \\E\\ : xterm : Set window icon to _Pt_. | \\E] 2 ; _Pt_ \\E\\ : xterm : Set window title to _Pt_ | \\E] 4 ; _c_ ; _spec_ \\E\\ : xterm : Change color number _c_ to _spec_, where _spec_ is a color in XParseColor format. foot only supports RGB colors; either *rgb://*, or the legacy format (*#rgb*). | \\E] 7 ; _Uri_ \\E\\ : iTerm2 : Update the terminal's current working directory. Newly spawned terminals will launch in this directory. _Uri_ must be in the format *file:///*. *hostname* must refer to your local host. | \\E] 8 ; id=_ID_ ; _Uri_ \\E\\ : VTE+iTerm2 : Hyperlink (a.k.a HTML-like anchors). id=_ID_ is optional; if assigned, all URIs with the same _ID_ will be treated as a single hyperlink. An empty URI closes the hyperlink. | \\E] 9 ; _msg_ \\E\\ : iTerm2 : Desktop notification, uses *notify* in *foot.ini*(5). | \\E] 10 ; _spec_ \\E\\ : xterm : Change the default foreground color to _spec_, a color in XParseColor format. | \\E] 11 ; _spec_ \\E\\ : xterm : Change the default background color to _spec_, a color in XParseColor format. Foot implements URxvt's transparency extension; e.g. _spec_=*[75]#ff00ff* or _spec_=*rgba:ff/00/ff/bf* (pink with 75% alpha). | \\E] 12 ; _spec_ \\E\\ : xterm : Change cursor color to _spec_, a color in XParseColor format. | \\E] 17 ; _spec_ \\E\\ : xterm : Change selection background color to _spec_, a color in XParseColor format. | \\E] 19 ; _spec_ \\E\\ : xterm : Change selection foreground color to _spec_, a color in XParseColor format. | \\E] 22 ; _xcursor-pointer-name_ \\E\\ : xterm : Sets the xcursor pointer. An empty name, or an invalid name resets it. | \\E] 52 ; _Pc_ ; ? \\E\\ : xterm : Send clipboard data. _Pc_ can be either *c*, *s* or *p*. *c* uses the clipboard as source, and *s* and *p* uses the primary selection. The response is *\\E] 52 ; Pc ; \E\\*, where _Pc_ denotes the source used. | \\E] 52 ; _Pc_ ; _Pd_ \\E\\ : xterm : Copy _Pd_ (base64 encoded text) to the clipboard. _Pc_ denotes the target: *c* targets the clipboard and *s* and *p* the primary selection. | \\E] 66 ; _params_ ; text \\E\\ : kitty : Text sizing protocol (only 'w', width, supported) | \\E] 99 ; _params_ ; _payload_ \\E\\ : kitty : Desktop notification; uses *desktop-notifications.command* in *foot.ini*(5). | \\E] 104 ; _c_ \\E\\ : xterm : Reset color number _c_ (multiple semicolon separated _c_ values may be provided), or all colors (excluding the default foreground/background colors) if _c_ is omitted. | \\E] 110 \\E\\ : xterm : Reset default foreground color | \\E] 111 \\E\\ : xterm : Reset default background color | \\E] 112 \\E\\ : xterm : Reset cursor color | \\E] 117 \\E\\ : xterm : Reset selection background color | \\E] 119 \\E\\ : xterm : Reset selection foreground color | \\E] 133 ; A \\E\\ : FinalTerm : Mark start of shell prompt | \\E] 133 ; C \\E\\ : FinalTerm : Mark start of command output | \\E] 133 ; D \\E\\ : FinalTerm : Mark end of command output | \\E] 176 ; _app-id_ \\E\\ : foot : Set app ID. _app-id_ is optional; if assigned, the terminal window App ID will be set to the value. An empty App ID resets the value to the default. | \\E] 555 \\E\\ : foot : Flash the entire terminal (foot extension) | \\E] 777;notify;_title_;_msg_ \\E\\ : urxvt : Desktop notification, uses *desktop-notifications.command* in *foot.ini*(5). # DCS All _DCS_ sequences begin with *\\EP* (sometimes abbreviated _DCS_), and are terminated by *\\E\\* (ST). [[ *Sequence* :< *Description* | \\EP q \\E\\ : Emit a sixel image at the current cursor position | \\EP $ q \\E\\ : Request selection or setting (DECRQSS). Implemented queries: DECSTBM, SGR and DECSCUSR. | \\EP = _C_ s \\E\\ : Begin (_C_=*1*) or end (_C_=*2*) application synchronized updates. This sequence is supported for compatibility reasons, but it's recommended to use private mode 2026 (see above) instead. | \\EP + q \\E\\ : Query builtin terminfo database (XTGETTCAP) # FOOTNOTE Foot does not support 8-bit control characters ("C1").