Skip to content

v0.5.0

Pre-release
Pre-release

Choose a tag to compare

@kungfusheep kungfusheep released this 21 Apr 18:08
· 262 commits to master since this release

Full Changelog: v0.4.0...v0.5.0

Breaking

  • TextView word-wraps by default. TextBlock.CharWrap() for character-wrap.
  • BorderSoft verticals and corners now use full block (was ▌▐▛▜▙▟). Visual thickness now matches top/bottom under typical 2:1 cell aspect.

Correctness

  • Wide-rune layout: StringWidth replaces rune count for text measurement across template, selection list, and alignment. Emoji and CJK reserve correct display-cell
    width.
  • Wide-rune rendering: WriteStringFast places a Rune=0 placeholder in the trailing cell; FlushFull skips 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 / FlushBuffer now write frame and cursor ops in a single syscall under the sync guard. Removes blank flash.

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 / ResetTerminalBG via OSC 11 / 111, tmux DCS passthrough. App sets it automatically when the default BG is RGB.
  • GLYPH_TEE env 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.CopyFrom handles size mismatch during in-flight resize.