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
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.
22 | - | Push window title+icon. Foot does not support pushing the icon.
22 | 2 | Push window title.
23 | - | Pop window title+icon. Foot does not support popping the 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 | <unnamed> | 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 | <unnamed> | kitty | Query current values of the Kitty keyboard flags.
\E[ > flags u | <unnamed> | kitty | Push a new entry, flags, to the Kitty keyboard stack.
\E[ < number u | <unnamed> | kitty | Pop number of entries from the Kitty keyboard stack.
\E[ = flags ; mode u | <unnamed> | 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.

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 (foot does not support setting the icon)
\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:<red>/<green>/<blue>, 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>/<path>. 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 ; <base64-encoded data> 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] 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 <sixel data> \E\ | Emit a sixel image at the current cursor position
\EP $ q <query> \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 <hex encoded capability name> \E\ | Query builtin terminfo database (XTGETTCAP)

FOOTNOTE

Foot does not support 8-bit control characters ("C1").