Skip to content

v0.7.0

Choose a tag to compare

@cwt cwt released this 24 Jul 07:11
· 418 commits to main since this release

szn v0.7.0

35 commits since v0.6.0. 802 tests passing.


Headline: Status Bar, Pane Borders, and a 39-Bug Cleanup Sweep

v0.7.0 delivers the long-awaited tmux-compatible status bar with a rewritten
format engine, pane-border-format indicators, and a systematic 39-bug cleanup
covering everything from scroll history corruption to sixel eviction,
double-frees, and arena allocation discipline.

  • Status Bar — Full tmux-compatible status bar driven by status-left,
    status-right, status-justify, window-status-format, and
    window-status-current-format options. Supports status off to hide the
    bar and status-interval for periodic clock updates. The format engine was
    rewritten with TemplateCache (compile-once), stride-free deduplication,
    #[style] sequences, strftime, and single-character aliases (#S, #I,
    #W, #P, #H, #h, #F, #D, #T) matching tmux conventions.
  • Pane Border Format — pane-border-format (default #P for pane index)
    draws on the top border of each pane in vertical splits, and vertically
    down the left border in horizontal (side-by-side) splits. Both horizontal
    and vertical-border rendering are supported.
  • Systematic Bug Sweep (#210–#248) — 39 bugs found through deep code
    audits, static analysis, and manual review. Every one is fixed. The bug
    tracker now holds 248 entries, all with uniform Status: metadata.

Changes

Description Severity / Type
tmux-compatible status bar (status-left/right, justify, window formats, interval) Feature
Rewritten format engine (TemplateCache, strftime, #style, aliases) Feature
pane-border-format option with horizontal + vertical border rendering Feature
Fix host scrolling desync via DECAWM disable on alt screen (#210) Bug Fix
Fix character width drift for standard symbols misclassified as emoji (#211) Bug Fix
Fix status bar / pane-border-format rendering bugs (#212–#215) Bug Fix
Fix Grid.scrollDown history ordering (#216) Bug Fix
Fix reflowCursorInternal OOM recovery double-free (#217) Bug Fix
Fix sixel registry eviction preferring unreferenced slots (#218) Bug Fix
Fix sixel anchor drift across alt-screen switches (#219) Bug Fix
Fix pane swap not resizing to new layout slot (#220) Bug Fix
Fix daemon startup use-after-free on killed session (#221) Bug Fix
Fix new pane not inheriting cell pixel size from parent (#222) Bug Fix
Fix alt-screen cursor position drift on resize (#223) Bug Fix
Reduce queryCellSize poll timeout from 200ms to 5ms (#224) Bug Fix
Replace O(n²) sixel image ref scanning with O(1) refcounting (#225) Optimization
Fix dangling pointer in renderStatusBar prompt (#226) Bug Fix
Fix CPU infinite loop on 0-byte socket writes (#227) Bug Fix
Add bounds checks to Packet serialize/deserialize (#228) Bug Fix
Fix scroll down and reverse index history corruption (#229) Bug Fix
Fix reflowCursorInternal double-free, leaks, history_start offset (#230) Bug Fix
Fix Grid.clone history_start underflow panic (#231) Bug Fix
Fix layout tree desync on window rotation and 0-pane state (#232) Bug Fix
Enforce minimum pane dimensions for split geometry invariants (#233) Bug Fix
Concatenate soft-wrapped lines in copy mode search (#234) Bug Fix
Clear ghost characters on 2-col wrap, preserve combining marks (#235) Bug Fix
Add SA_RESTART to signal handlers (#236) Bug Fix
Free DispatchResult in prompt command evaluation (#237) Bug Fix
Add errdefers and cleanup to config directive parsers (#238) Bug Fix
Clean up allocated Pane on initialization error (#239) Bug Fix
Skip Sixel matrix scanning when no sixels present (#240) Optimization
Pre-calculate active_bound in drawLayoutBorders (#241) Optimization
Use stack buffer in PTY getCwd (#242) Optimization
Consolidate layout tree traversal into Layout.findPaneBounds (#243) Refactor
Consolidate pane swap logic into swapPaneRelative helper (#244) Refactor
Enforce arena allocation lifecycle per AGENTS.md (#245) Compliance
Use inline for comptime CMD_TABLE lookup (#246) Refactor
Re-analyze DECSM 1000/1002/1003 as intentional (#247) Docs
Change pane-border-format default from #I (window) to #P (pane index) (#248) Bug Fix
Reformat all 248 BUGS.md entries with uniform metadata Docs