Appearance
modifyOtherKeys mode 3
xterm's modifyOtherKeys mode 3 (patch 398, April 2025) makes ALL keyboard input — including unmodified keys — send escape sequences. Mode 2 only affects modified keys (Ctrl+X, Alt+X), while mode 3 extends this to every keypress. The sequence is
CSI > 4 ; 3 m.
Mode 3 also extends modifier encoding to cursor-keys, function-keys, keypad-keys, modifier-keys, and special-keys, with subparameters in XTMODKEYS for selective modifier masking. This provides applications with unambiguous key identification similar to the kitty keyboard protocol, but using xterm's native encoding.How this is testedautomated
Send
Send
CSI > 4 ; 3 m to enable modifyOtherKeys mode 3, verify terminal is responsive, then disable with CSI > 4 ; 0 m.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-04-06
Supported by 9 of 14 backends (64%)
Terminal Applications
| Terminal | Version | Support | Notes |
|---|---|---|---|
| iTerm2 | 3.6.9 | ✓ yes | |
| Ghostty | 1.3.1 | ✓ yes | |
| VS Code | ✓ yes | ||
| Warp | ✓ yes | ||
| Cursor | ✓ yes | ||
| Terminal.app | ✓ yes |
Headless Backends
Parser correctness only — a ✓ means the parser accepts the sequence.
| Backend | Version | Support | Notes |
|---|---|---|---|
| vterm | 0.2.0 | ✓ yes | |
| Alacritty | 0.26.0 | ~ partial | modifyOtherKeys mode 3 not exposed in headless mode |
| Kitty | 0.40.0 | ~ partial | modifyOtherKeys mode 3 not exposed via Python batch bridge |
| WezTerm | 0.1.0-fork.5 | ~ partial | modifyOtherKeys mode 3 not exposed in headless mode |
| vt100.js | 0.2.1 | ✗ no | Not implemented — pure TypeScript emulator |
| xterm.js | 5.5.0 | ✗ no | modifyOtherKeys mode 3 not implemented in xterm.js |