0.3.7
Introduces an experimental multi-window orchestrator command (Alt+Q) - a UI that manages multiple Fresh windows side by side in a single Fresh process.
Features / Improvements
Orchestrator (early experiment)
The new orchestrator command (Alt+Q) lets one Fresh process juggle several independent windows — switch between sessions, open new ones from a project path / branch, or visit one in a separate Fresh process. This is an early experiment; expect rough edges. Please share your ideas and bug reports!
Search and Replace
Made an effort to improve the search & replace command, tackling several issues:
- All Files scope toggle + dedicated current-file command.
- Editor shortcuts (
Ctrl+Petc.) pass through the panel. - Proper empty / searching / no-results states.
- Large result sets stay responsive — incremental tree, throttled streaming, capped per-iteration work.
Git Log / Review Diff
- Performance: Per-commit diffs stream into file-backed buffers with full syntax highlighting, per-line add/delete backgrounds, working scrollbar, and
Fold by File/Fold by Hunkcommands. Now opens the famous "rewrite bun in rust" commit instantly! - Open file at commit (#1962): jump from a diff line in the review-branch detail panel to the file at that commit (read-only,
qto go back).
File Explorer
- Compact directories (#1406, thanks @Nandaleio!): a directory containing a single child directory renders inline as
com.example.name, VSCode/IntelliJ-style. On by default; toggle withfile_explorer.compact_directories. - Configurable tree indicators (#1940, reported by @MicTheSquid): expand/collapse glyphs themable via File Explorer → Tree Indicator Expanded / Collapsed in the Settings UI.
Plugins & API
git_statusbarplugin + status-bar token registration API (thanks @PavelLoparev!): show the current git branch in the status bar; plugins register their own tokens viaeditor.registerStatusBarElement. Add via Settings → Editor → Status Bar → Left / Right.tab_actionsplugin (#1844, thanks @PavelLoparev!): close all / to-the-left / to-the-right and move tabs within the current split.- Plugins can register their own config items: a new typed registration API lets plugins declare settings that appear in the Settings UI alongside built-in ones (sorted at the bottom of the category list), so users can toggle plugin behaviour from the same place as everything else. The bundled
vi_modeplugin uses it to expose an autoStart option.
Editing & Widgets
- Add Cursors to Line Ends (#1870, reported by @aquasync): places a cursor at the end of every line in the selection.
- Widget text inputs gain real selection rendering,
Shift+arrow/Ctrl+Shift+arrowextension, andCtrl+C/V/X/A— used by Search & Replace and plugin dialogs. - Floating completion popup on widget
Textinputs.
Live Diff
- Word-level underline highlights on deletion lines; similarity threshold and size caps are runtime-tunable, so large diffs render as modified lines rather than paired add/remove blocks.
Bug Fixes
init.tssetAutoOpen(false)ignored: dashboard auto-open is now driven by thereadyhook so userinit.tsruns first.
Git Log / Review Diff
- Detail panel
PageUp/PageDown(action name was wrong); scrollbar now functional on the streamed buffer.
File Explorer
- UI / navigation shortcuts (#1903):
Ctrl+Pand friends are no longer swallowed when the file explorer has focus. - Switch Project double-click (#1931, reported by @SolarLune): double-clicking a directory navigates into it instead of dismissing the dialog.
Plugins
- Plugin init scaffold (#1986, @PavelLoparev): new plugins now generate
fresh.entry(the current entry-point name) instead of stalefresh.main. - Idle CPU from git plugins (#2009, #2012):
git_statusbarandmerge_conflictno longer spawn idle subprocesses;git_statusbaris driven offwatchPath(.git/HEAD).
Editing
- Smart Home with multiple cursors: now runs for every cursor, not only the primary.
- Soft wrap at trailing space (#1363, reported by @dragonfyre13): when a trailing space would overflow the wrap column, wrap backs up one word instead of breaking mid-token.
- Horizontal scroll-to-view on long lines (#1873): the viewport now follows the cursor on long lines.
Live Diff
- Wrapped overlay backgrounds now extend across every visual row of a wrapped line.
Rendering
- Highlighter cache preserved across bulk edits (#1958): large pastes and replace-all no longer trigger a whole-file reparse.
- Phantom cursor offscreen (#1965): a buffer cursor scrolled past the viewport no longer leaves a stray block at the screen edge.
- Split separator background (#1963): separator cells now paint with
editor_bgso split borders blend with the panes. - Next / Prev Split un-maximizes (#1961): navigating to another split un-maximizes first.
- Stable cursor-position indicator (#1967):
Ln L, Col Cno longer jitters as the column count grows. - PTY terminal background now fills the render rect with the editor bg.
- Nostalgia theme (#1890, reported by @NGRIT41): terminal-pane blue now covers full pane.
- Column rulers suppressed on virtual buffers (dashboard, PTY panes, etc.).
Misc
- No more stray
.fresh/directory in your working dir (#1991): orchestrator/cross-restart state now lives underdata_dirinstead of being dropped next to your project files. - Buffer "library path" detection (#1970, reported by @FF-AntiK): only
.cargo/registryand.cargo/gitare treated as Cargo library paths — local.cargo/config.tomletc. are no longer flagged. - Julia grammar (#1852, reported by @goszlanyi): the adjoint operator (
') no longer flips the rest of the line into string mode. move_word_end/select_word_endlabels (#1878, reported by @sour-dani): translated in all locales.