Skip to content

fresh-editor 0.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Sep 21:56
Immutable release. Only release title and notes can be modified.
0096112

0.5.0

For live updates on Fresh, follow me on X.

A massive refactoring is included in this release, hopefully without any regression in usability. Please open issues on GitHub if you encounter any breakage. The refactoring paves the way to new features like the new Markdown Table of Contents in the side-panel.

Most config options below can be changed in the Settings UI - run Open Settings from the command palette (Ctrl+P).

Features

  • Interactive Welcome screen on startup, in a background tab (#3147). The content is still in the works, suggestions welcome!
  • Search previews now open the real file as a preview tab - full syntax colours, gutter, folds and scrolling (#3196, #3200; #836, requested by @66RED99)
  • Review Diff opens large diffs almost instantly - a 500+ file review now opens in ~2s instead of ~16s (#3056)
  • Sidebar sections - the explorer sidebar can hold multiple collapsible sections, starting with a Markdown Table of Contents (#3045, requested by @mruff-aeq)
  • Markdown types brackets and quotes literally instead of auto-pairing them. Typing backticks or quote marks is not annoying now!
  • Markdown Compose reflows hard-wrapped text - a paragraph, list item or quote written over several source lines lays out as one block against the page measure, instead of one row per source line. Also, many bugs fixed in markdown compose mode (see below)
  • Syntax-highlighting in Review Diff and Git Log modes (#3104, reported by @tinchoz49; #2871)
  • Shaded pane edges - text fades out at the top/bottom instead of cutting mid-line (editor.viewport_edge_fade)
  • Smooth wheel scrolling, a line at a time instead of jumpy notches (editor.smooth_scroll, #3091)
  • Git Blame readability - better contrast, and blame keeps your place on b/q (#3088)

Bug Fixes

  • Review Diff & Git Log
    • Ambiguous commands renamed and grouped under Review Diff: / Git Log: palette prefixes (#3098)
    • Works with an external difftool instead of showing an empty diff (#3066, by @asukaminato0721)
    • D on a fully staged file discards it (#2318)
    • Follows the working tree, and re-running no longer stacks a duplicate panel (#3126, reported by @asukaminato0721)
    • The files sidebar scrolls on large reviews, shows full filenames, and a click moves highlight and focus together (#3063, #3188)
    • git's output parses under more configs - quoted paths, blank context lines, diff.relative, submodules, signed commits (#3199)
    • A file over 1 MiB is listed and marked instead of expanded into a multi-million-line patch, and binary files show up in a range review instead of vanishing
  • Orchestrator
    • Ctrl+Q from a clean workspace no longer skips the unsaved-work prompt for another workspace, or deletes that workspace's recovery files on the way out (#3189, reported by @sdecima; #3221)
    • The dock paints its own background, instead of showing the terminal's through the gaps
    • "Move to Folder…" keeps the keyboard, so Down no longer dismisses it and switches the live workspace (#3163, #3137)
    • A deep repo path plus a long workspace name no longer overruns the terminal directory's name
    • Archiving names the worktree after the workspace, not its display label, and a repeat archive takes the next free suffix
    • A workspace whose window is still being created no longer freezes the picker
  • Multi-cursor editing
    • A keystroke that only moves the cursor is no longer dropped, and a plain click collapses cursors to one (#3125, reported by @X-Ryl669)
    • A skip-over lands past its delimiter even when another cursor's edit shifts it (#3166)
    • The status bar's line number follows an added or removed cursor (#3167)
  • Integrated terminal
    • Dim text is dim again (#3123, reported by @fiatcode-gh)
    • A multi-line paste arrives whole instead of only its last line (#3215)
    • A killed editor leaves the terminal usable, not stuck in raw mode (#3197)
    • Recent scrollback is no longer lost (#3151)
  • Large single-line files (minified JSON and friends)
    • Opening one no longer loops or stalls for cursor movement, scrolling and paging (#1806)
    • Very large binary/zip files open instantly instead of freezing or running out of memory (#3142, reported by @mommysgoodpuppy)
    • Editing one costs the size of the screen, not the size of the line - a keystroke in a 19 MB one-line JSON reads ~180 KB instead of ~14 MB
    • With soft wrap off, a logical line is one visual row, so a file with no line breaks draws one row and Down has nowhere to go - turn soft wrap on to read it vertically
    • Plugin decorations (blame, live diff, compose reflow) are bounded to the visible text, so a plugin can no longer make a frame read the whole line
  • Markdown Compose (#3206)
    • A code block keeps its gutter in a Source-mode split
    • Dragging a composing tab into a new split keeps it composing
    • Composing one split no longer forces line wrap on in a sibling
    • A hand-aligned table's padding and wrapped rows render correctly
  • Language servers
    • Timeouts are reported instead of showing "no results"; a stuck server shows LSP (stuck) (#2197)
    • Diagnostics no longer get stuck reporting errors you already fixed (#3038, reported by @thedadams)
    • A server too slow to drain its input no longer loses an edit and then reports errors against text you never wrote (#3100)
    • Inlay hints no longer jump to the next line while you type at their anchor (#722)
    • deno.json no longer disables TypeScript on a project without Deno (#2981, reported and fixed by @atk)
  • Editing
    • auto_surround works with auto_close off, so the per-language override is usable
    • Enter on a blank last line keeps the cursor's column instead of indenting to the block above (#3165)
    • The block-selection highlight is exactly what a block copy takes - it used to paint a column it did not select (#3150, reported by @Korkman)
    • Conceals spanning a line break no longer crash the editor (#3139)
    • Down moves off the first line under a Git Blame header (#3088)
  • Keys, mouse and scrolling
    • A single-key binding on a chord prefix fires, and deleting a keybinding frees the key (#3171)
    • Numpad, media and modifier keys parse by name, fixing asterisk/kp_multiply bindings (#1128, reported by @michelpado)
    • Shift+wheel scrolls sideways everywhere (#1580)
    • Dragging the scrollbar leaves the text cursor where it is, like the wheel already did (#3192, reported by @akarinotomoshibi)
    • Dragging a divider keeps up with the pointer (#3140)
  • Rendering
    • Whitespace markers, indent guides, block-selection rectangles and misread angle brackets; the File Explorer got a scrollbar (#3077, #3079, #3148, #3090, reported by @Korkman; #2859, reported by @asukaminato0721)
    • The block cursor no longer swallows the character under it - the cursor's colour is the terminal's to pick, and past the end of a line it inverts to the theme's colours rather than the terminal's
    • The space below the last line follows the theme background (#779, #3087)
  • Dialogs and settings
    • Delete works again in the Settings dialog's Edit Item text field (#2875, reported by @asukaminato0721, fixed by @56steve)
    • A single-line field scrolls to the start of a long value instead of pinning its tail, so a long name or path can be seen and edited
  • Starting, quitting and updating
    • Ctrl+C/kill end the editor promptly instead of occasionally deadlocking or crashing
    • Quitting no longer panics while plugin work is still in flight
    • ... | fresh - no longer leaves a temp file behind in /tmp (#3134, reported by @Korkman)
    • The daemon's locale follows config.json instead of the environment (#3149, reported by @kirinriki7777-sys)
    • SSH remote sessions no longer hang when the target is Windows (#3145, by @mommysgoodpuppy)
    • curl | install.sh no longer fails behind a shared IP or silently on error (#3070)
    • fresh --cmd update no longer fails on GitHub's shared API rate limit, and honours GITHUB_TOKEN (#3198)
  • The Welcome screen reads like a document - text selects with Shift+movement or the mouse and copies with Ctrl+C, and focus follows the caret rather than the whole row
  • Search & Replace results scroll horizontally to reveal a long match, accept a pasted query, and no longer move a hidden buffer cursor on Ctrl+arrow (#3154, #3184; #1960, reported by @mandolyte; #1580, #3186)
  • New file/folder names with slashes create their missing parent directories (#2640, requested by @akarinotomoshibi, by @asukaminato0721)
  • Wave screensaver ends when you return to the window, not just on the next keypress (#3204)
  • The file explorer does less filesystem work on a large project, so a repo with thousands of changed files no longer stalls the editor (#3103, reported by @asukaminato0721; #3127, by @atirna)

Internals

  • Twelve fewer crates in the build, from replacing rust-i18n with an in-tree library (#3102).
  • Plugin dialogs and panels handle focus and typing correctly - fifteen widget-runtime fixes, and three new options a plugin can ask for: a focused text field wins printable keys over the mode's own bindings, a panel can keep "nothing focused" as a real state, and a scroll command can reveal a widget rather than jump it to the top.
  • A large rewrite moves the editor's chrome onto a retained-mode layout tree; continued flaky-test stabilization.