mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-04 06:29:42 +02:00
fix(tui): stop drawing from the unicode blocks a plain terminal font lacks
Three separate "why are there boxes" reports, and I fixed them one glyph at a
time instead of as a class, so the next one was always waiting. Grouping the
tester's terminal by unicode block made the rule obvious:
RENDERS Latin-1 (·), Box Drawing (─ │), Block Elements (█ ▛ ▐),
Geometric Shapes (○ ▶), General Punctuation (…), Arrows
TOFU Miscellaneous Technical (⏎ U+23CE, ⏵ U+23F5), the sparse end
of Dingbats (❯ U+276F)
That is an ordinary font, not a broken one, so it is the profile to design
against. The working spinner moves off Dingbats and Math Operators onto
quadrant blocks (▖▘▝▗) — the same block as the `▛█▐` art claude itself draws,
which that font renders fine — and the blocked marker moves off `⚠`
(Misc Symbols, emoji presentation on many terminals) onto `▲`, the block that
already gives us `▶` and `○`.
The preview fold gains claude's own spinner dingbats (✢ ✳ ∗ ✻ ✽ ✴ → `*`) and
`⚠` → `!`. Its animated status line is exactly where a reader looks, so tofu
there is the most visible kind there is.
A test now enforces this as a CLASS: no glyph in the unicode set may come from
Misc Technical, Misc Symbols or Dingbats, with U+2714 the single documented
exception because it was observed rendering on the very font that failed the
others. Verified by scanning a live frame driven with the tester's exact
environment: zero glyphs from any of the three blocks.
This commit is contained in:
@@ -354,6 +354,16 @@ const PREVIEW_GLYPH_FOLD: ReadonlyMap<string, string> = new Map([
|
||||
['\u23F7', 'v'], // ⏷
|
||||
['\u2771', '>'], // ❱
|
||||
['\u2770', '<'], // ❰
|
||||
// claude's own working/done spinner cycles through these, and they are the
|
||||
// same sparse-Dingbats class as `❯`: the animated line is exactly where a
|
||||
// reader looks, so tofu there is the most visible kind.
|
||||
['\u2722', '*'], // ✢
|
||||
['\u2733', '*'], // ✳
|
||||
['\u2217', '*'], // ∗
|
||||
['\u273B', '*'], // ✻
|
||||
['\u273D', '*'], // ✽
|
||||
['\u2734', '*'], // ✴
|
||||
['\u26A0', '!'], // ⚠ Misc Symbols, and emoji-presentation on many terminals
|
||||
]);
|
||||
|
||||
/**
|
||||
|
||||
+20
-8
@@ -134,17 +134,29 @@ export interface TuiGlyphSet {
|
||||
*
|
||||
* COVERAGE: a plain terminal font carries far less than the unicode TIER
|
||||
* implies. The tier answers "is the locale UTF-8", which says nothing about
|
||||
* whether a given codepoint has a glyph. A beta tester's font drew `·`, `─`,
|
||||
* `│`, `○`, `▶` and `✔` perfectly while drawing `⏎` (U+23CE) as an empty box.
|
||||
* Prefer Latin-1, Arrows (U+2190–21FF), Box Drawing, Block Elements and
|
||||
* Geometric Shapes, which every monospace font ships; treat Dingbats,
|
||||
* Miscellaneous Symbols and anything with emoji presentation as suspect.
|
||||
* whether a given codepoint has a glyph.
|
||||
*
|
||||
* One beta tester's font mapped the blocks like this, and it is the profile to
|
||||
* design against because it is an ordinary terminal font, not a broken one:
|
||||
*
|
||||
* RENDERS Latin-1 (·), Box Drawing (─ │), Block Elements (█ ▛ ▐),
|
||||
* Geometric Shapes (○ ▶), General Punctuation (…), Arrows
|
||||
* TOFU Misc Technical (⏎ U+23CE, ⏵ U+23F5), the sparse end of
|
||||
* Dingbats (❯ U+276F)
|
||||
*
|
||||
* So: draw from the blocks on the first line. Dingbats, Miscellaneous
|
||||
* Technical, Miscellaneous Symbols and anything with emoji presentation are
|
||||
* out — that class produced three separate "why are there boxes" reports, one
|
||||
* per glyph, because each was fixed on its own instead of as a class.
|
||||
*/
|
||||
const UNICODE_GLYPHS: TuiGlyphSet = {
|
||||
blockedPermission: '⚠',
|
||||
blockedQuestion: '⚠',
|
||||
blockedPermission: '▲',
|
||||
blockedQuestion: '▲',
|
||||
waiting: '!',
|
||||
working: ['·', '✢', '✳', '∗', '✻', '✽'],
|
||||
// Quadrant blocks, which rotate as a spinner and live in the same block as
|
||||
// the `▛█▐` art claude itself draws — proven to render on the font that
|
||||
// failed the dingbats this used to use.
|
||||
working: ['▖', '▘', '▝', '▗'],
|
||||
idle: '○',
|
||||
recent: '✔',
|
||||
cursor: '▶',
|
||||
|
||||
Reference in New Issue
Block a user