Skip to content

Push title/icon stack (CSI 22 ; 0 t)

Category: device · Baseline: rich · Tags: Xterm Extensions · Specification ↗

ESC [ 22 ; 0 t
XTWINOPS subcode 22 pushes the current window title and icon label onto an internal stack. The sequence is CSI 22 ; 0 t (push both), CSI 22 ; 1 t (push icon only), or CSI 22 ; 2 t (push title only). XTWINOPS 23 pops the matching stack. The title stack solves a longstanding ergonomics problem: applications that change the terminal title (vim, ssh, tmux) want to restore it on exit, but the only way to do that previously was to query the current title with CSI 21 t — which many terminals refuse for security reasons. Push/pop avoids exposing the title to the application: the terminal saves it internally and the application can restore it without ever seeing the value. Adopted by xterm, Ghostty, Kitty, WezTerm, foot, and others.
How this is testedautomated
Send \x1b[22;0t, verify the sequence is consumed without crashing. Headless emulators verify the stack push happened internally where possible.

The same probe runs against headless backends (via Termless) and real terminal apps (via a daemon launched in each terminal). This lets us distinguish parser correctness from rendering correctness.

Analysis2026-05-17

Supported by all 12 tested terminals — universal adoption. Part of the Rich TUI baseline.

Supported by 13 of 14 backends (93%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesPush sequence accepted; terminal responsive
Ghostty1.3.1✓ yesPush sequence accepted; terminal responsive
VS Code✓ yes
Warp✓ yes
Kitty0.46.2✓ yesTitle stack not exposed via Python batch bridge
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

Parser correctness only — a means the parser accepts the sequence.

BackendVersionSupportNotes
Alacritty0.26.0✓ yesTitle stack not implemented by alacritty
vt100.js0.2.1✓ yes
vterm.js0.2.0✓ yes
xterm.js5.5.0✓ yes
WezTerm0.1.0-fork.5~ partialTitle stack push not exposed in headless mode