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 testedautomated
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 12 of 14 backends (86%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesDECRPM: mode reset
Ghostty1.3.1✓ yesDECRPM: mode set
VS Code✓ yes
Warp✓ yes
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
Kitty0.40.0✓ yes
vt100.js0.2.1✓ yes
WezTerm0.1.0-fork.5✓ yes
vterm0.2.0✗ noAlt-scroll mode not implemented in vterm.js
xterm.js5.5.0✗ noAlt-scroll mode not tracked by xterm.js