Skip to content

Alt-scroll mouse wheel (?1007)

Category: modes · Baseline: modern · Tags: Xterm Extensions · Specification ↗

CSI ? 1007 h/l
DECSET 1007 enables alternate scroll mode: when the alternate screen buffer is active, mouse wheel events are translated into cursor up/down key presses (or the equivalent application keypad sequences) instead of being reported as mouse events. The sequence is ESC [ ? 1007 h to enable, ESC [ ? 1007 l to disable. This lets users scroll TUI applications that don't natively handle mouse events (like less, man, or vim in default mode) by simply using the mouse wheel — the terminal converts the wheel motion into the same arrow-key sequences a keyboard press would produce. When disabled, mouse wheel events in the alt screen are sent as proper mouse reports instead.
How this is testedpartial
Send \x1b[?1007h (DECSET 1007), verify the sequence is consumed without breaking subsequent terminal output. Headless backends rarely track this mode, so verification is partial.

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 all 9 tested terminals — universal adoption. Part of the Modern TUI baseline.

Supported by 11 of 14 backends (79%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesDECRPM: mode reset
Ghostty1.3.1✓ yesDECRPM: mode set
Terminal.app2.15✓ yesBehavioral: ?1007 accepted
Kitty0.46.2✓ yesBehavioral: ?1007 accepted
VS Code1.113.0? unknown
Warp0.2026.03.18.08.24.03? unknown
Cursor2.6.21? unknown

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
vt100.js0.2.1✓ yes
vterm0.2.0✓ yes
WezTerm0.1.0-fork.5✓ yes
xterm.js5.5.0✓ yes