Fix wide-char (emoji/CJK) column drift through the whole render chain

Wide characters shifted everything after them one column to the right:

- render.rs: vt100's empty wide-continuation cell was padded to a
  space, making wide chars occupy 2+1 columns — skip it entirely
- ipc.rs buffer_to_ansi: same bug for daemon frames — skip cells
  covered by a preceding wide symbol (unicode-width)
- app.rs: clamp virtual terminals to >= 2 columns (vt100 0.16 has a
  subtraction underflow panic on wide chars in a 1-col grid) and give
  content_area a sane 80x24 default so windows spawned before the
  first layout pass aren't degenerate
- main.rs: use try_send for display frames so one slow/stalled client
  can no longer freeze the whole WM
- integration test: new end-to-end check that emoji do not shift the
  row, plus fix a false match against the window title

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 09:33:06 +02:00
parent 5ca8eb4647
commit 6aee7ce00a
7 changed files with 63 additions and 5 deletions

View File

@@ -19,6 +19,7 @@ vt100 = "0.16"
anyhow = "1"
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "bmp", "webp"] }
interprocess = "2.4"
unicode-width = "0.2"
[target.'cfg(unix)'.dependencies]
libc = "0.2"