---
name: "foot-ctlseqs"
section: "7"
platform: "linux"
package: "foot"
version: "1.28.0-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/foot-ctlseqs"
---

# foot-ctlseqs(7)

terminal control sequences supported by foot

## 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)](/foot.ini/5.md) 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)](/foot.ini/5.md)) |
| 38 | Select foreground color, see "indexed and RGB colors" below |
| 39 | Use the default foreground color (**foreground** in [**foot.ini**(5)](/foot.ini/5.md)) |
| 40-47 | Select background color (using **regularN** in [**foot.ini**(5)](/foot.ini/5.md)) |
| 48 | Select background color, see "indexed and RGB colors" below |
| 49 | Use the default background color (**background** in [**foot.ini**(5)](/foot.ini/5.md)) |
| 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)](/foot.ini/5.md)) |
| 100-107 | Select background color (using **brightN** in [**foot.ini**(5)](/foot.ini/5.md)) |

### 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)](/terminfo/5.md) 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)](/foot.ini/5.md)) |
| 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 |
| 2033 | rockorager | Request terminal visibility reports. Enabling this mode immediately reports the current visibility as **CSI ? 999 ; 1\|2 n**, where **1** means potentially visible and **2** means not visible. Further reports are sent whenever the visibility changes. |
| 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 | \<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. |
| \\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. |
| \\E\[ ? 998 n | Query terminal visibility | rockorager | The current terminal visibility is reported as **CSI ? 999 ; 1\|2 n**, where **1** means potentially visible and **2** means not visible. This does not enable private mode 2033. |

## 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:\<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)](/foot.ini/5.md). |
| \\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\] 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)](/foot.ini/5.md). |
| \\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)](/foot.ini/5.md). |

## 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").
