0.2.24
Features
-
Review Diff Rewrite: Files list and diff are now one scrollable unified buffer. Use
n/pto jump to next/previous hunk. You can collapse per-file, and stage or unstage content on the cursor row (hunk, whole file, or a line-level visual selection). Review comments now saved per-repo across sessions, and a dedicated Comments panel makes them navigable. Two new entry points:Review: Commit Rangefor anyA..B/A...Brange, andReview: PR Branchfor walking a branch's commits with a livegit showside-by-side. In the future I plan to make a new UX for picking the diff target (PR, branch, etc.) -
Git Log Rewrite: Live-preview right panel updates as you move through the log, clickable toolbar, theme-aware colours, aligned columns, wrapped commit messages.
-
Rendering Performance Improvements: see the bugfix section below.
Improvements
-
Preview Tabs in File Explorer (#1403): Single-clicking a file opens it in an ephemeral "preview" tab that the next single-click replaces, instead of accumulating tabs. Any real commitment — editing, double-click / Enter, clicking the tab, or a layout action — promotes the preview to a permanent tab. Enabled by default; disable via Settings UI.
-
LSP:
- LSP status-bar indicator with a spinner during start-up and indexing (no more jitter as progress messages arrive); configured-but-dormant servers show as
LSP (off). Clicking opens a popup with per-server status, live progress, a "binary not in PATH" label for missing servers likepylsp/gopls(so they don't spawn failing processes), and a per-language mute option. - The LSP hover popup now fuses any overlapping diagnostic (severity-coloured, source-tagged like
rustc/clippy/clangd) above the hover body. .hfiles in C++ projects now route to the C++ LSP when there's a real signal (sibling.cpp/.hpp/.hxx).- LSP Correctness fixes: inlay hints re-request after every edit, anchor correctly at end of line (#1572), vanish when their anchor is deleted, track theme changes, and populate on every open buffer when the server becomes quiescent (previously only one); fold indicators no longer drift after edits around a fold (#1571); and diagnostic / inlay-hint refresh no longer pulls from buffers of the wrong language.
- LSP status-bar indicator with a spinner during start-up and indexing (no more jitter as progress messages arrive); configured-but-dormant servers show as
-
Markdown Table Frames: Tables in Page View now render full box borders — top and bottom frames plus a separator between every data row.
-
Read-only state persists across sessions: Buffers marked read-only stay read-only after restart.
-
Narrow-terminal status bar: The right side drops low-priority elements (palette hint, warning counts, encoding, …) in order so the filename and cursor position stay visible.
-
Shift+Mouse-wheel now scrolls horizontally even when the currently visible lines fit the viewport (previously required a long line to have been rendered first).
-
Explorer auto-expands on first open (#1569):
Ctrl+Bwith a nested file active now reveals the file on the first toggle — no more double-toggle. -
Grammar / language fixes: Bare-filename scripts (
Gemfile,Rakefile,Makefile) highlight correctly;.jsx/.mjs/.cjsroute to JavaScript; TypeScript chosen via Set Language now highlights and appears infresh --cmd grammar list. -
Plugin API: Virtual lines accept theme keys for
fg/bgand follow theme changes live. Plugin modes can inherit Normal-mode bindings instead of redeclaring motions. Themouse_clickhook payload now carries buffer coordinates.
Bug Fixes
-
Fixed scrolling in heavily wrapped buffers (#1574): Up/Down no longer drifts the viewport one row per keystroke, and mouse-wheel scroll in Page View on long markdown lists now reaches EOF reliably.
-
Fixed multi-byte / grapheme handling in the view pipeline: fullwidth and CJK text, ZWJ emoji families (
👨👩👧👦), and long combining-mark clusters now render, advance by cursor, and participate in Home/End as a single unit (#1577). Note: different terminals handle ZWJ differently, I recommend ghostty if you need these characters for some reason... -
Fixed
Format Bufferhanging on formatters that emit more than ~64KB — stdout / stderr are now drained concurrently with the write (#1573). -
Fixed arrow keys with an active selection (#1566): Left/Right now collapse to the selection's start/end edge (matching VSCode, Sublime, IntelliJ); Up/Down start from the appropriate edge.
-
Fixed
Shift+Backspacenow behaves like Backspace (previously silently dropped on many terminals) (#1588). -
Fixed session-restored folds landing on unrelated lines after external edits — they now relocate by header text or are dropped (#1568).
-
Fixed project-wide Search & Replace: replace is now undoable with a confirm prompt, repeated
Alt+Enterno longer corrupts files, the file-watch mtime is refreshed after save, and the 100% CPU hang on large-repo scans is fixed (#1575). -
Fixed 100% CPU when a fold hid thousands of lines — fold-indicator detection no longer scans the whole buffer per visible row.
-
Fixed plugin-panel buffers (audit mode, git log, review diff): cursor positions preserved across tab switches, clicks on scrollable panels register,
qcloses the group from any panel, and the active tab in an inactive split is now visible under the high-contrast theme. -
Fixed cursor being able to land on plugin-virtual rows (markdown table borders, gutters) when moving up/down.