Skip to content

DECCOLM 80/132 column switch (?3)

Category: modes · Baseline: legacy · Tags: VT100, DEC Private Modes · Specification ↗

CSI ? 3 h/l
DECCOLM (DEC Column Mode) switches the terminal between 80- and 132-column display widths. The sequences are ESC [ ? 3 h for 132 columns and ESC [ ? 3 l for 80 columns. On real VT100 hardware, this changed the dot clock and reprogrammed the CRT to display either 80 or 132 character cells per row, and clearing the screen as a side effect. DECCOLM is a historical VT100/VT220 feature from the era when terminals had fixed character cell sizes and switching column count required physically reprogramming the display. Modern terminal emulators with resizable windows have made it largely obsolete — most ignore DECCOLM unless explicitly enabled (DECSET 40 must be set first to allow column changes). Some emulators like xterm still implement it correctly for compatibility with applications that drive serial terminals or DEC hardware emulators.
How this is testedpartial
Send \x1b[?3h (DECCOLM 132), verify the sequence is consumed without breaking subsequent output. Most modern emulators ignore the column change, 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 Unicode baseline.

Supported by 11 of 14 backends (79%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yesDECRPM: mode reset
Ghostty1.3.1✓ yesDECRPM: mode reset
Terminal.app2.15✓ yesBehavioral: ?3 accepted
Kitty0.46.2✓ yesBehavioral: ?3 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