glyph 0.5.0
Breaking
TextViewword-wraps by default.TextBlock.CharWrap()for character-wrap.BorderSoftverticals and corners now use full block█(was▌▐▛▜▙▟). Visual thickness now matches top/bottom under typical 2:1 cell aspect.
Correctness
- Wide-rune layout:
StringWidthreplaces rune count for text measurement across template, selection list, and alignment. Emoji and CJK reserve correct display-cell - Wide-rune rendering:
WriteStringFastplaces aRune=0placeholder in the trailing cell;FlushFullskips placeholders to prevent row misalignment. - Flush cursor drift: non-ASCII writes invalidate the tracked cursor so the next write emits an absolute CUP. Stops width-mismatch cascade into bottom-right wraps.
FlushFull/FlushBuffernow write frame and cursor ops in a single syscall under the sync guard. Removes blank flash.
width.
New
TextBlock— multi-line word-wrapping text, no layer overhead..CharWrap()switches mode.RowWriter— zero-alloc primitive.buf.Row(y, style).Put(x, r)hoists dirty tracking and default-style merge once per row.width.go— single control point for text measurement:StringWidth,RuneWidth,RuneCount.SetTerminalBG/ResetTerminalBGvia OSC 11 / 111, tmux DCS passthrough.Appsets it automatically when the default BG is RGB.GLYPH_TEEenv var — tees raw screen output to a file for debugging corruption.
Fixes
- View switch no longer forces full flush (uses diff). Removes Ghostty microflash.
- Resize now forces full flush. Fixes #9
Buffer.CopyFromhandles size mismatch during in-flight resize.