Appearance
Grapheme Cluster Cursor Movement
Cursor movement (CUF/CUB) should respect grapheme cluster boundaries. Moving the cursor back over a ZWJ emoji sequence should skip the entire sequence, not individual codepoints. Many terminals still move by codepoint rather than grapheme cluster.
Grapheme-aware cursor movement is a modern Unicode expectation layered on top of a terminal model built for fixed cells. ZWJ emoji, combining marks, and skin-tone modifiers are multiple code points but one user-perceived character. Cursor movement by code point splits those clusters and leaves the grid in a visibly broken state.
How this is testedautomated
Write an emoji ZWJ sequence, move cursor back by 1, verify cursor position.
Write an emoji ZWJ sequence, move cursor back by 1, verify cursor position.
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 8 of 14 backends (57%)
Terminal Applications
| Terminal | Version | Support | Notes |
|---|---|---|---|
| iTerm2 | 3.6.9 | ✓ yes | |
| Ghostty | 1.3.1 | ✓ yes | |
| VS Code | ✗ no | ||
| Warp | ✗ no | ||
| Kitty | 0.46.2 | ✗ no | width=8, expected 2 |
| Cursor | ✗ no | ||
| Terminal.app | ✗ no |