cc4e71c127
Scrolling a console left stray characters glued to the left edge of blank lines. Copying an affected line yields clean text, so the buffer was always correct — only the painting drifted, which no CSS can correct. xterm's default DOM renderer aligns each row with a single `letter-spacing` value. That holds only while every glyph comes from one monospace font, and TerminalView passed no fontFamily, so xterm used its default `courier-new, courier, monospace`: Vietnamese diacritics and CJK fall through to a fallback face whose advance width differs, glyphs shove their neighbours along, and the row's tail spills onto the row below. The canvas renderer draws every cell at a fixed position, so a wide glyph can no longer displace its neighbours. Loaded best-effort — a browser that cannot hand back a 2D context keeps the DOM renderer rather than losing the terminal entirely. Ruled out first, each by replaying the real byte stream into xterm.js and diffing against `tmux capture-pane`: wrapped Vietnamese at the margin, mixed CJK, wheel scrolling through copy-mode, and a live 131->95->131 resize all render byte-identically at matched widths. client 448/448, tsc clean.
1.2 KiB
1.2 KiB