zhangheng b7a8bf49c4 fix(terminal): use grapheme_width for accurate column slicing
text_in_cols and text_slice_cols now walk grapheme clusters with
grapheme_width() instead of assuming 1 char = 1 column.  This fixes
column slicing for:
- Wide characters (CJK, emoji) that occupy 2 grid columns
- Combining marks that occupy 0 columns

The prior 1:1 char∶col mapping caused selection-copy and serialize
output to misalign column ranges when wide/combining characters were
present in a row.

- Update roadmap: mark both P0 follow-up items as resolved
2026-06-25 12:37:11 +08:00

BASE_PATH Demo

Minimal Leptos SSR project that reuses a few components from ui to validate SiteConfig::BASE_PATH.

The public app path is /rustui, while Leptos SSR routes are still declared as /, /check, and /deep/nested. The server strips /rustui before route matching, and the client router uses /rustui as its base.

cargo leptos watch

Then open:

  • http://127.0.0.1:3100/rustui
  • http://127.0.0.1:3100/rustui/check
  • http://127.0.0.1:3100/rustui/deep/nested

Change app_config/src/lib.rs to test another base path.

Terminal Renderer Bench

The terminal benchmark script connects to an already-running dev server; it does not start or stop services.

Install the Node dependency once before running it:

npm install
npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal

If Playwright's browser download is slow, use an installed Chrome/Chromium instead:

npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal --browser-executable /usr/bin/google-chrome

Compare renderer modes with:

npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal --renderer canvas --browser-executable /usr/bin/google-chrome

It writes renderer-specific reports such as target/terminal-bench/terminal-bench-webgl.json and target/terminal-bench/terminal-bench-canvas.json, plus target/terminal-bench/terminal-bench-latest.json for the most recent run. Screenshots are also named by renderer and viewport.

Description
No description provided
Readme 5.1 MiB
Languages
Rust 88.8%
CSS 7.6%
JavaScript 3.6%