Skip to content

Terminal families: add popular emulators + audit capability tables#11

Merged
mstrobel merged 1 commit into
developfrom
worktree-terminal-families
Jul 9, 2026
Merged

Terminal families: add popular emulators + audit capability tables#11
mstrobel merged 1 commit into
developfrom
worktree-terminal-families

Conversation

@mstrobel

@mstrobel mstrobel commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Fleshes out terminal-family identification and the non-negotiated capability tables, driven by two research passes (12 unidentified terminals + a full audit of the families we already claim).

New families (with detection wired into the classifier)

Warp, VS Code (vscode / VSCODE_PID), Hyper, Wave Terminal (waveterm / WAVETERM), mintty (XTVERSION), Contour (XTVERSION / TERM=contour), st (st-256color), Termux (TERMUX_VERSION), PuTTY (TERM=putty), and Zellij (ZELLIJ). VTE_VERSION resolves the indistinguishable VTE family (gnome-terminal, GNOME Console/kgx, Black Box, Tilix, xfce4-terminal) to the GnomeTerminal representative.

Zellij is flagged InsideMultiplexer but excluded from MultiplexerPassthrough — it re-renders with no generic escape passthrough (unlike tmux, where passthrough corrupts output).

Audit corrections to existing families (verified against vendor source/docs)

  • OSC 52 read — drop Rio (no clipboard_load), iTerm2 (write-only), tmux (does not reflect the query); add mintty (3.8.2+) + Contour.
  • SGR-pixels mouse — drop Rio (maps only 1006); add Contour/Warp/VS Code.
  • Pixel-size query — drop Windows Terminal (answers neither) and Alacritty (14t-only; our cell probe is 16t); add Rio/xterm/Termux/Wave.
  • OSC 22 pointer shape — add iTerm2/Warp/mintty (not WezTerm — PR unmerged; not xterm — X cursor-font names).
  • DECRQM — drop GNU Screen + Konsole (no reply path); add VS Code/Hyper/Contour/Termux/mintty. Side benefit: the runtime 2026 re-verification no longer wrongly disables sync output on Konsole (which never answered DECRQM).
  • Styling — split the bundled extended bool into independent Hyperlinks / StyledUnderline / Overline (they did not co-land per terminal). VTE was wrongly excluded from all three; the blanket Overline=false was wrong (true for Ghostty, WezTerm, Windows Terminal, Konsole, VTE).
  • Graphics — WezTerm ships Kitty graphics too; Rio ships Sixel.
  • Cursorreal bug fix: the comment excluded Apple Terminal from DECSCUSR but modern did not, so it claimed shape+blink control it lacks. rxvt-unicode (9.22+) and mlterm (3.8.2+) do implement DECSCUSR — no longer excluded. Termux excluded from OSC 12.
  • Kitty keyboard — add Alacritty (0.13)/Rio/Warp/Contour.
  • Sync output — add Rio/Contour/Warp/mintty/VS Code.
  • Truecolor — add every new family + the orphaned Tabby (== Terminus, renamed 2021).

Also fixed two pre-existing classifier bugs: TERM=iTerm returned Rio, and a duplicated ITERM_SESSION_ID check.

ReliableWideGlyphs stays universally false by policy — the pre-paint/re-CUP defense always runs (untouched).

Notes / deferrals

Items the research flagged UNCERTAIN were handled conservatively: Konsole's kitty-keyboard membership is kept (unverified either way) with a code comment; Warp/Contour/Zellij exact XTVERSION strings and VTE's XTVERSION support want a live-terminal spot-check. PuTTY is nearly unfingerprintable (best-effort TERM=putty only).

Tests

34 targeted identification + capability tests (TerminalFamilyExpansionTests); full Core suite 996 green.

🤖 Generated with Claude Code

…tables

Two research passes (12 unidentified terminals + a full audit of the ~17 we
already claim) drove this. New TerminalFamily members with detection wired into
the classifier: Warp (TERM_PROGRAM=WarpTerminal), VisualStudioCode (vscode /
VSCODE_PID), Hyper, WaveTerminal (waveterm / WAVETERM), Mintty (XTVERSION),
Contour (XTVERSION / TERM=contour), SimpleTerminal (st-256color), Termux
(TERMUX_VERSION), PuTTY (TERM=putty), and Zellij (ZELLIJ). VTE_VERSION now
resolves the whole indistinguishable VTE family (gnome-terminal, GNOME Console/
kgx, Black Box, Tilix, xfce4-terminal) to the GnomeTerminal representative.

Zellij is flagged InsideMultiplexer but EXCLUDED from MultiplexerPassthrough — it
is a re-rendering emulator with no generic escape passthrough (unlike tmux).

Audit corrections to existing families (all verified against vendor source/docs):
- OSC 52 read: drop Rio (no clipboard_load), iTerm2 (documented write-only), and
  tmux (doesn't reflect an inner query); keep Foot/Kitty/Ghostty/Alacritty/
  WezTerm/xterm; add Mintty (3.8.2+) and Contour.
- SGR-pixels mouse (1016): drop Rio (maps only 1006); add Contour/Warp/VS Code.
- Pixel-size query: drop Windows Terminal (answers neither 14t/16t) and Alacritty
  (14t-only — our cell probe is 16t); add Rio/xterm/Termux/Wave.
- OSC 22 pointer shape: add iTerm2/Warp/Mintty (not WezTerm — PR unmerged; not
  xterm — it uses X cursor-font names, not the CSS names we emit).
- DECRQM: drop GNU Screen and Konsole (no reply path); add VS Code/Hyper/Contour/
  Termux/Mintty. This also stops the runtime 2026 re-verification from wrongly
  disabling sync output on Konsole (which never answered DECRQM).
- Styling: split the bundled "extended" bool into independent Hyperlinks /
  StyledUnderline / Overline — they didn't co-land per terminal. VTE was wrongly
  excluded from all three; the blanket Overline=false was wrong (true for Ghostty,
  WezTerm, Windows Terminal, Konsole, VTE).
- Graphics: WezTerm ships Kitty graphics too; Rio ships Sixel.
- Cursor: fix a real bug — the comment excluded Apple Terminal from DECSCUSR but
  `modern` didn't, so it claimed shape+blink control it lacks; now excluded.
  rxvt-unicode (9.22+) and mlterm (3.8.2+) DO implement DECSCUSR — no longer
  excluded. Termux excluded from OSC 12 cursor color.
- Kitty keyboard: add Alacritty (0.13)/Rio/Warp/Contour.
- Sync output: add Rio/Contour/Warp/Mintty/VS Code.
- Truecolor: add every new family + the orphaned Tabby (== Terminus, renamed).

Also fixed two pre-existing classifier bugs: TERM=iTerm returned Rio, and a
duplicated ITERM_SESSION_ID check.

ReliableWideGlyphs stays universally false by policy — the pre-paint/re-CUP
defense always runs (untouched).

34 targeted identification + capability tests; full Core suite 996 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175wtwXrafD4fWAZ3i5THu6
@mstrobel mstrobel merged commit eee91e5 into develop Jul 9, 2026
3 checks passed
@mstrobel mstrobel deleted the worktree-terminal-families branch July 9, 2026 22:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant