Appearance
Legacy Baseline
Protocol archaeology
Welcome to the graveyard of terminal protocols. These are features that were once important — sometimes revolutionary — but have been obsoleted by newer approaches, made irrelevant by hardware evolution, or survived only in xterm's exhaustive compatibility implementation.
Most were defined by DEC between 1978 and 1993 for real hardware terminals (VT100, VT220, VT340, VT420, VT510) that cost more than a used car and weighed 40 pounds. Others are vendor extensions from the 1990s that briefly enjoyed adoption before being superseded. A handful are still implemented by xterm out of principle — Thomas Dickey has maintained xterm since 1996 and rarely removes anything.
This baseline exists for three audiences: historians who want to understand how we got here, terminal implementors who need to decide what to keep, and archaeologists debugging compatibility with ancient software that still ships DEC escape sequences from 1985.
Selected highlights from the legacy catalog
VT420 Rectangular Area Operations (1990)
DECFRA, DECERA, DECCRA, DECCARA, DECRARA — fill, erase, copy, and change attributes in a rectangular region of the screen. The idea: form-fill applications and spreadsheets could update a rectangle without touching the rest of the display. Why they died: by the time anyone cared about structured screen regions, applications moved to GUI toolkits. The survivors are a handful of medical billing systems and airline reservation terminals.
xterm still implements them all, including DECRQCRA — which computes a checksum of a rectangular area and reports it back to the application. This is surreal: modern xterm will compute the 16-bit checksum of a region of your terminal and send it back to a shell script. Nobody uses this. Thomas Dickey maintains it anyway.
ReGIS — Remote Graphic Instruction Set (1983)
DEC's answer to Tektronix vector graphics, introduced with the VT125. You could tell your terminal to draw lines, circles, polygons, and fill patterns using a stateful turtle-graphics-like language embedded in DCS sequences. An early demo drew molecular diagrams over a 9600-baud serial line.
Why it died: Sixel (also from DEC) arrived in 1987 and was better for photographs. PC graphics adapters arrived and everyone switched to workstations. ReGIS survives in xterm's VT340 emulation mode and a handful of scientific visualization tools from 1989.
DEC Locator Reporting (VT200 era)
Before X10 mouse tracking (1986), DEC defined a locator protocol (DECELR, DECRQLP, DECEFR) for reporting pointing-device events. Applications could enable filter rectangles and receive events only when the locator entered or exited a region. It was designed for light pens and touch screens on the VT241 graphics terminal.
Why it died: the X Window System arrived and everyone standardized on xterm's mouse tracking (X10-compatible). The DEC locator protocol survives in xterm for compatibility with DEC-era CAD software. A few industrial HMI systems still use it because migrating the PLC firmware is harder than adding DEC locator parsing to the new terminal.
80/132 Column Mode — DECCOLM (1978)
The VT100's party trick: hit a key and the terminal switched between 80 and 132 columns. This was a big deal because 132 columns let you view wide reports and COBOL printouts. DECCOLM (CSI ? 3 h) became the standard way to request a column change, and VT100 clones from DEC, Wyse, and Televideo all supported it.
Why it died: modern terminals resize smoothly via SIGWINCH; there's no hardware column count to switch. Most terminal emulators either ignore DECCOLM or treat it as a suggestion. xterm still implements it and actually resizes the window, which is sometimes useful and often confusing.
Double-Height and Double-Width Lines (VT100)
ESC # 3 top half of a double-height line. ESC # 4 bottom half. ESC # 5 single width. ESC # 6 double width. The VT100 could render lines twice as tall or twice as wide by doubling the character cells. It was used for headings, banners, and "WARNING" messages on industrial control terminals.
Why it died: variable fonts arrived, and modern terminals use fixed cell dimensions. Implementing double-height requires breaking the cell grid, which breaks every TUI layout algorithm. xterm still honors it — you can watch your vim session try to recover after typing printf '\x1b#3HELLO\x1b#4HELLO'.
National Replacement Character Sets (VT200)
Before Unicode, DEC defined an NRC scheme where you could swap ASCII characters 0x23-0x7E for different national variants. The UK charset replaced # with £. The French charset replaced [, \, ] with °, ç, §. Swiss German had its own. There were fifteen NRC variants.
The result was a maze of invisible character substitutions that broke code listings (where # or [ had syntactic meaning) and confused anyone who shared files internationally. UTF-8 arrived in 1993 and solved the entire problem in one stroke. NRCs survive in xterm for compatibility with pre-UTF8 European software.
DECUDK — User Defined Keys (VT200)
Applications could send a DCS sequence to reprogram the function keys F6-F20 with arbitrary key codes. Word processors loaded their keymaps this way. The keys persisted until the terminal was reset, and could be locked against overwrite.
Why it died: PCs arrived with proper keyboards that applications could intercept directly. DECUDK is still in xterm and a few VT emulators but essentially unused.
DECSCA — Character Protection (VT200)
Mark characters as "protected" so that selective erase operations (DECSED, DECSEL) wouldn't touch them. This was used for form-based data entry where field labels should stay on the screen when you cleared input fields. Combined with DECRQSS queries, you could build sophisticated forms over 9600-baud serial.
Web forms replaced this entire category in one decade.
rxvt-unicode Perl Extensions (OSC 777)
rxvt-unicode, maintained by Marc Lehmann, embedded a full Perl interpreter into the terminal itself. You could write Perl scripts that responded to escape sequences, drew overlays, intercepted keystrokes, and implemented entire TUI behaviors inside the terminal. OSC 777 was the entry point: applications sent a Perl extension call and the terminal executed it.
It was powerful and completely insane. The "notify" sub-command got adopted by other terminals as a desktop notification protocol. Everything else stayed urxvt-only. The Perl-in-terminal idea died with urxvt; modern terminals use in-process Lua (kitty) or WebViews (WezTerm, Ghostty).
Tektronix 4014 Mode
xterm can switch into Tektronix 4014 mode and emulate a storage-tube vector graphics terminal from 1972. The 4014 was the workstation of choice for early Unix plotting and CAD. Its protocol is completely different from VT sequences — it uses a 12-bit coordinate system and a storage tube display model where you can only draw, not erase.
If you start xterm with xterm -t you get a Tek 4014 window. It actually works. You can still plot with gnuplot's tek40 driver. Nobody does this, but xterm supports it because Thomas Dickey does not believe in deleting things.
Analysis2026-04-06
Compliance Scorecard
Terminal Applications
Guidance
For Developers
Don't use these in new applications. They exist for history, archaeology, and compatibility debugging. If you find yourself reaching for DECCOLM or DECFRA, stop and ask whether your problem is really about terminals — you probably want a TUI framework or a different rendering model entirely. Legacy features will always remain a minority of what any modern terminal implements, and relying on them will break on Windows Terminal, foot, Alacritty, and every GPU-accelerated terminal built after 2015.
For Terminal Authors
You don't need to implement this baseline to be a good modern terminal. Foot, Alacritty, Ghostty, and Windows Terminal skip most of it and are widely loved. Implementation is purely for compatibility with old software, DEC terminal preservation, academic projects, or specific niche use cases (medical billing systems still using VT420 form controls, airline reservation systems still using DEC locator, gnuplot users still rendering to Tek 4014). If you want maximum xterm compatibility for its own sake, Thomas Dickey's xterm is the reference — and a humbling reminder of how much history the terminal protocol carries.