Skip to content

TextUI 0.6.0

Choose a tag to compare

@yibie yibie released this 01 Sep 14:18
· 7 commits to main since this release

Added

  • :text accepts :wrap with balanced (default, Knuth–Plass) or greedy, a linear-time low-latency break strategy for interactive readers. Greedy stays kinsoku-aware, preserves attributed source characters, and keeps the non-final-line pixel-justification contract (ADR 0036).
  • A bounded paragraph layout cache (textui-text-layout-cache-size, default 2048 entries) memoizes text planning per content, pixel width, and wrap strategy. Cache keys include resolved named-face metrics, a theme/font environment generation, and face-remap-alist entries in both proper-list and dotted-pair forms; textui-invalidate-text-layout-cache is the manual escape hatch.

Fixed

  • The graphical :image path built rows as unibyte strings and spliced alt text with store-substring: a CJK alt signaled "Attempt to store non-byte value into unibyte string" and alt text properties were dropped. Rows are now multibyte and property-preserving.
  • Alt splicing is bounded by both display width and character count, so combining-mark or variation-selector sequences no longer signal args-out-of-range.
  • A letterboxed image now places its alt and property carrier on the leaf's first row, keeping external row-range bookkeeping aligned to the leaf.
  • Action-triggered refreshes read focus/position snapshots via buffer-local-value from the target buffer, fixing lost point and wrong-type-argument errors when a widget action ran while another buffer was current.

Full test suite: 120/120.