Skip to content

Combining characters (0 cols)

Category: text · Baseline: unicode · Tags: Unicode · Specification ↗

Combining characters (like accents, diacritical marks) attach to the preceding base character and should occupy zero additional columns. For example, é can be written as e + U+0301 (combining acute accent) — the cursor should advance by 1 column, not 2. Combining marks are central to Unicode normalization: the same visible glyph may be precomposed or represented as a base character plus one or more marks. Terminals need to attach those marks to the previous cell without advancing the cursor. Failure shows up as stray accents, cursor drift, or broken search/highlight alignment.
How this is testedautomated
Write a base character followed by a combining accent (e.g., e + U+0301), verify the combined character occupies 1 column, not 2.

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-05-17

Supported by 11 of 12 terminals (92%). Not supported by: vt100.js. Part of the Unicode baseline. Notes: vt100.js: Combining characters not implemented — pure TypeScript emulator.

Supported by 13 of 14 backends (93%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yes
Ghostty1.3.1✓ yes
VS Code✓ yes
Warp✓ yes
Kitty0.46.2✓ yes
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0✓ yes
vterm.js0.2.0✓ yes
WezTerm0.1.0-fork.5✓ yes
xterm.js5.5.0✓ yes
vt100.js0.2.1✗ noCombining characters not implemented — pure TypeScript emulator