foot-ctlseqs(7)

πŸ’– NAME πŸ’–

foot-ctlseqs β€” terminal control sequences supported by foot

No cap, this is the whole cheat sheet for every control sequence foot supports. Bestie, it's giving terminal lore and you're gonna eat it up. πŸ’…

✨ DESCRIPTION ✨

This document describes all the control sequences supported by foot. Here's the master list of what's inside, so you know the vibe:

  • 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 πŸŽ€

Okay so these are the tiny single-byte gremlins. Here's every one foot knows about:

  • \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.

Here's the ESC fam, with their names, origin, and what they do:

  • \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).

That's the whole vibe: spaces are just there for readability, bestie.

✨ 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.

And N is literally the parameter, so don't @ me. πŸ’…

okay bestie, this parameter table is literally the terminal’s whole styling menu, and you’re gonna want to bookmark it. πŸ’… Every number is a whole vibe:

  • 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))

and that’s every single parameter, no skipping, no cap. 🫢

🎨 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. Obsessed with options, honestly. πŸ’–

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) β€” icon behavior, honestly. ✨

The second one is allowed since many programs "forget" the color space ID, cs. Lowkey relatable. 😭

The sub-parameter based variants are preferred, and are what foot’s terminfo(5) entry uses. Periodt. πŸ‘‘

πŸ”’ Private Modes πŸ”’

There are several Boolean-like "modes" that affect certain aspects of the terminal’s behavior. You manipulate these modes with the following 4 escape sequences:

πŸŽ€ Private modes: the ? girlies

Okay so these four are the private-mode besties β€” that ? in the middle? That's literally what makes them private modes, and it is not optional, okay. Here's the whole squad:

  • \E[ ? Pm h β€” DECSET β€” turns a private mode on. Enable private mode, slay.
  • \E[ ? Pm l β€” DECRST β€” turns a private mode off. Disable private mode, bye bestie.
  • \E[ ? Pm s β€” XTSAVE β€” saves the current state of a private mode. So you can be like "remember this for me" πŸ’Ύ
  • \E[ ? Pm r β€” XTRESTORE β€” restores a private mode to whatever you saved with XTSAVE. The comeback era ✨

The Pm parameter in all four of the above is a numerical ID β€” like, an actual number β€” and each ID corresponds to one of the modes in the list coming up next:


okay so here's the parameter table bestie, get comfy because there's like a lot of them and every single one matters πŸ’…

  • 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) β€” yes this is the one that makes your cursor vanish, iconic
  • 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
  • 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 πŸŽ€
ngl bestie, 737769 is doing the absolute most but it's the IME mode so we respect it 🫢

πŸͺŸ Window manipulation πŸŽ€

Okay so here's the tea: Foot does a sub-set of XTerm's window manipulation sequences (and those originally came from dtterm, iykyk). Not all of them, just a curated little collection. The generic format is, and I'm quoting, this:

\E[ Ps ; Ps ; Ps t

So you've got your Ps parameters lined up between the \E[ and the t, separated by semicolons. Now for the big mood board of what each parameter combo actually does β€” every single one, no skips πŸ’…

  • Parameter 1 = 11, Parameter 2 = - β€” Report if window is iconified. Foot always reports 1 β€” not iconified. (Foot's just out here living its best un-iconified life ✨)
  • Parameter 1 = 13, Parameter 2 = - β€” Report window position. Foot always reports (0,0), due to Wayland limitations. 😭
  • Parameter 1 = 13, Parameter 2 = 2 β€” Report text area position. Foot always reports (0,0) due to Wayland limitations. Yeah. Same energy. πŸ™ˆ
  • Parameter 1 = 14, Parameter 2 = - β€” Report text area size, in pixels. Foot reports the grid size, excluding the margins.
  • Parameter 1 = 14, Parameter 2 = 2 β€” Report window size, in pixels. Foot reports the grid size plus the margins. (Margins are back in the chat, bestie 🫢)
  • Parameter 1 = 15, Parameter 2 = - β€” Report the screen size, in pixels.
  • Parameter 1 = 16, Parameter 2 = - β€” Report the cell size, in pixels.
  • Parameter 1 = 18, Parameter 2 = - β€” Report text area size, in characters.
  • Parameter 1 = 19, Parameter 2 = - β€” Report screen size, in characters.
  • Parameter 1 = 20, Parameter 2 = - β€” Report icon label.
  • Parameter 1 = 22, Parameter 2 = - β€” Push window title+icon.
  • Parameter 1 = 22, Parameter 2 = 1 β€” Push window icon.
  • Parameter 1 = 22, Parameter 2 = 2 β€” Push window title.
  • Parameter 1 = 23, Parameter 2 = - β€” Pop window title+icon.
  • Parameter 1 = 23, Parameter 2 = 1 β€” Pop window icon.
  • Parameter 1 = 23, Parameter 2 = 2 β€” Pop window title.

Push and pop, push and pop β€” it's giving stack energy, honestly iconic πŸ‘‘

✨ Other ✨

Okay bestie, this is the grab-bag section β€” the iconic mix-and-match of cursor moves, erases, and mode toggles that don't fit anywhere else. Every single one of these is literally in the table, so let's get into it πŸ’…

  • \E[ Ps c β€” DA, origin VT100. Send primary device attributes. Foot responds with "I'm a VT220 with sixel and ANSI color support". πŸ¦‹ (yes, she's that girl)
  • \E[ Ps A β€” CUU, origin VT100. Cursor up β€” move cursor up Ps times.
  • \E[ Ps B β€” CUD, origin VT100. Cursor down β€” move cursor down Ps times.
  • \E[ Ps C β€” CUF, origin VT100. Cursor forward β€” move cursor to the right Ps times.
  • \E[ Ps D β€” CUB, origin VT100. Cursor backward β€” move cursor to the left Ps times.
  • \E[ Ps g β€” TBC, origin VT100. Tab clear. Ps=0 β†’ clear current column. Ps=3 β†’ clear all. πŸ’€
  • \E[ Ps ; Ps f β€” HVP, origin VT100. Horizontal and vertical position β€” move cursor to row ; column.
  • \E[ Ps ; Ps H β€” CUP, origin VT100. Cursor position β€” move cursor to row ; column. (same energy, different acronym, iykyk)
  • \E[ Ps J β€” ED, origin VT100. Erase in display. Ps=0 β†’ below cursor. Ps=1 β†’ above
  • \E[ Ps K β€” EL, origin VT100. Erase in line. Ps=0 β†’ right of cursor. Ps=1 β†’ left of cursor. Ps=2 β†’ all. ✨
  • \E[ Pm h β€” SM, origin VT100. Set mode. Pm=4 β†’ enable IRM (Insertion Replacement Mode). All other values of Pm are unsupported. πŸ™ˆ
  • \E[ Pm l β€” RM, origin VT100. Reset mode. Pm=4 β†’ disable IRM (Insertion Replacement Mode). All other values of Pm are unsupported. πŸ™ˆ
  • \E[ Ps n β€” DSR, origin VT100. Device status report. Ps=5 β†’ device status. Ps=6 β†’ cursor position. πŸ‘‘
  • \E[ Ps L β€” IL, origin VT220. Insert Ps lines.
  • \E[ Ps M β€” DL, origin VT220. Delete Ps lines.
  • \E[ Ps P β€” DCH, origin VT220. Delete Ps characters.
  • \E[ Ps @ β€” ICH, origin VT220. Insert Ps blank characters. πŸŽ€
  • \E[ Ps X β€” ECH, origin VT220. Erase Ps characters.
  • \E[ > c β€” DA2, origin VT220. Send secondary device attributes. Foot responds with "I'm a VT220 and here's my version number". 🌸
  • \E[ ! p β€” DECSTR, origin VT220. Soft terminal reset. 🧚
Ngl, that DA / DA2 pair is giving main character energy β€” foot literally introduces herself twice, once with her feature list and once with her version number. Iconic. πŸ’–

more CSI sequences, because we’re still in the table and we’re thriving:

  • \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

okay bestie, we're still deep in the CSI table and honestly it's giving "terminal lore drops" πŸ’… picking up right where we left off β€” every sequence, name, origin, and caveat stays exactly as it was, just with main character energy ✨

  • \E[ Ps G β€” (CHA, ECMA-48) Cursor character absolute - move cursor to column Ps. cursor. Ps=2 -> all. Ps=3 -> saved lines. yes the "cursor." is really in there, don't come for me 😭
  • \E[ Ps S β€” (SU, ECMA-48) Scroll up Ps lines. simple, clean, iconic 🫢
  • \E[ Ps I β€” (CHT, ECMA-48) Cursor forward tabulation Ps tab stops. tab girlies stay winning ✨
  • \E[ Ps Z β€” (CBT, ECMA-48) Cursor backward tabulation Ps tab stops. back it up, back it up πŸŽ€
  • \E[ Ps b β€” (REP, ECMA-48) Repeat the preceding printable character Ps times. spam that character, respectfully πŸ’…
  • \E[ ? Pi ; Pa ; Pv S β€” (XTSMGRAPHICS, xterm) Set or request sixel attributes. sixel business, very demure πŸ¦‹
  • \E[ > Ps q β€” (XTVERSION, xterm) Ps=0 -> report terminal name and version, in the form \EP>|foot(version)\E\. identity check, slay πŸ‘‘
  • \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. levels, but make it limited β€” no level 0 erasure here πŸ™ˆ
  • \E[ ? Pp m β€” (XTQMODKEYS, xterm) Query key modifier options. just asking the terminal nicely for the receipts πŸ‘€
  • \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). important caveat bestie β€” it resets, it does NOT fully disable πŸ’€
  • \E[ ? u β€” (<unnamed>, kitty) Query current values of the Kitty keyboard flags. kitty keyboard lore, we love to see it 🐱
  • \E[ > flags u β€” (<unnamed>, kitty) Push a new entry, flags, to the Kitty keyboard stack. stack it like a boss πŸ“š
  • \E[ < number u β€” (<unnamed>, kitty) Pop number of entries from the Kitty keyboard stack. pop pop pop, no cap 🫧
  • \E[ = flags ; mode u β€” (<unnamed>, kitty) Update current Kitty keyboard flags, according to mode. mode-activated glow-up ✨
  • \E[ # P β€” (XTPUSHCOLORS, xterm) Push current color palette onto stack. palette preservation station 🎨
  • \E[ # Q β€” (XTPOPCOLORS, xterm) Pop color palette from stack. and pop! back to your regularly scheduled colors πŸ’œ
  • \E[ # R β€” (XTREPORTCOLORS, xterm) Report the current entry on the palette stack, and the number of palettes stored on the stack. receipts on receipts, we love a full report 🧾
  • \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. theme mode check! dark mode girlies rise πŸŒ™βœ¨
  • \E[ ? 998 n β€” query terminal visibility, bestie πŸ‘€ submitted by rockorager (yes, honor the icon). The current terminal visibility gets reported back as CSI ? 999 ; 1|2 n, where 1 means potentially visible and 2 means not visible. Quick heads up though β€” this does not enable private mode 2033, so don't go thinking it does. It's just a peek, not a switch πŸ’…

🌈 OSC 🌈

Okay so every single OSC sequence starts with \E] β€” and yeah, people sometimes just abbreviate it to OSC, iykyk. πŸ¦‹

  • \E] 0 ; Pt \E\ β€” xterm. Sets the window icon and the title to Pt in one go. Two birds, one iconic move. πŸ’…
  • \E] 1 ; Pt \E\ β€” xterm. Sets just the window icon to Pt. πŸŽ€
  • \E] 2 ; Pt \E\ β€” xterm. Sets just the window title to Pt. 🌸
  • \E] 4 ; c ; spec \E\ β€” xterm. Changes the color number c to spec, where spec is a color in XParseColor format. Heads up bestie: foot only supports RGB colors here β€” either rgb:<red>/<green>/<blue>, or the legacy format #rgb. That's it, no cap.
  • \E] 7 ; Uri \E\ β€” iTerm2. Updates the terminal's current working directory, and newly spawned terminals will launch in this directory. Uri must be in the format file://<hostname>/<path>, and hostname must refer to your local host. πŸ”₯
  • \E] 8 ; id=ID ; Uri \E\ β€” VTE+iTerm2. Hyperlink (a.k.a HTML-like anchors), the moment the terminal ate. 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 β€” it uses notify in foot.ini(5). πŸŽ€
  • \E] 10 ; spec \E\ β€” xterm. Changes the default foreground color to spec, a color in XParseColor format. ✨
  • \E] 11 ; spec \E\ β€” xterm. Changes the default background color to spec, a color in XParseColor format. And here's the slay: foot implements URxvt's transparency extension, so you can do spec=[75]#ff00ff or spec=rgba:ff/00/ff/bf (that's pink with 75% alpha, lowkey gorgeous). πŸ’–
  • \E] 12 ; spec \E\ β€” xterm. Changes the cursor color to spec, a color in XParseColor format. 🎯
  • \E] 17 ; spec \E\ β€” xterm. Changes the selection background color to spec, a color in XParseColor format. 🌈
  • \E] 19 ; spec \E\ β€” xterm. Changes the 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. Sends clipboard data. Pc can be either c, s or p β€” c uses the clipboard as source, and s and p use 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. Copies 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, is supported. (Read the fine print, bestie.) πŸ“
  • \E] 99 ; params ; payload \E\ β€” kitty. Desktop notification; uses desktop-notifications.command in foot.ini(5). πŸ””
  • \E] 104 ; c \E\ β€” xterm. Resets color number c β€” and yes, multiple semicolon separated c values may be provided β€” or resets all colors (excluding the default foreground/background colors) if c is omitted. 🧼
  • \E] 110 \E\ β€” xterm. Resets the default foreground color. ⬜
  • \E] 111 \E\ β€” xterm. Resets the default background color. ⬛
  • \E] 112 \E\ β€” xterm. Resets the cursor color. πŸ–±οΈ
  • \E] 117 \E\ β€” xterm. Resets the selection background color. 🎨
  • \E] 119 \E\ β€” xterm. Resets the selection foreground color. πŸ–ŒοΈ
  • \E] 133 ; A \E\ β€” FinalTerm β€” marks the start of your shell prompt ✨
  • \E] 133 ; C \E\ β€” FinalTerm β€” marks the start of command output πŸŽ€
  • \E] 133 ; D \E\ β€” FinalTerm β€” marks the end of command output πŸ’…
  • \E] 176 ; app-id \E\ β€” foot β€” sets the app ID. app-id is optional; if you do assign it, the terminal window App ID gets set to that value. An empty App ID resets it back to the default, no cap 🫢
  • \E] 555 \E\ β€” foot β€” flashes the entire terminal (foot extension) ⚑
  • \E] 777;notify;title;msg \E\ β€” urxvt β€” desktop notification, and it uses desktop-notifications.command in foot.ini(5) πŸ¦‹

🌈 DCS 🌈

okay so every DCS sequence starts with \EP (yeah, it's sometimes just abbreviated DCS), and they all get terminated by \E\ (that's ST, mwah πŸ’‹).

  • \EP q <sixel data> \E\ β€” emits a sixel image right at the current cursor position πŸ–ΌοΈ iconic honestly
  • \EP $ q <query> \E\ β€” requests a selection or setting (that's DECRQSS for the girlies who track acronyms). The implemented queries are DECSTBM, SGR and DECSCUSR πŸ‘‘
  • \EP = C s \E\ β€” begins (C=1) or ends (C=2) application synchronized updates. It's supported for compatibility reasons, but bestie, they recommend you use private mode 2026 (see above) instead πŸ’…
  • \EP + q <hex encoded capability name> \E\ β€” queries the builtin terminfo database (XTGETTCAP) πŸ”

πŸ’€ FOOTNOTE πŸ’€

Foot does not support 8-bit control characters ("C1"). literally not a vibe it does, so don't come for it πŸ™ˆ


and that's a wrap on the whole page, bestie πŸŽ‰ this version was living its best life dated 2026-09-08 and it's the foot-ctlseqs(7) manual page β€” go forth and slay those escape sequences πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from