0.3.1
Features
-
Animations framework: tab-switch slide; cursor-jump trail animation. Disable it via Settings UI. Animations available to plugins via API.
-
Flash plugin (label-jump, à la flash.nvim): bundled plugin — type a pattern, press the displayed label to jump, even across split panes.
-
Devcontainer fixes: See below
Improvements
-
Relative-numbers go-to negative (thanks @paveloparev!):
g<-N>jumps N lines up in relative-numbers mode. -
Racket language support:
.rkt/.rktd/.rktl/.scrblhighlight out of the box; LSP viaracket-langserver. -
{remote}indicator default-on: rendered on bottom-left for fresh installs (F6default keybinding, palette command). -
Quick Open keybindings (thanks @paveloparev!):
Ctrl+'for files,Ctrl+;for buffers. Some terminals don't like passing these keys, you can rebind in the Keybinding UI (future version will probably change the default shortcuts to be more terminal-friendly across platforms). -
Completion popup rebindable (#1705): Allow modifying key bindings for the non-lsp completions popup.
-
Better scrolling on markdown preview buffers and very-long-line buffers via a new two-tier line-wrap cache.
-
LSP:
- Stuck request no longer blocks others (#1679): per-server handlers on independent tokio tasks + 30 s timeout. R
languageserver0.3.17 no longer wedges completion / signature help. - Empty-server completion fallback to buffer-word completions.
- Failure-stub log so "View Log" works after a failed spawn.
- Stuck request no longer blocks others (#1679): per-server handlers on independent tokio tasks + 30 s timeout. R
-
Devcontainer spec-conformance + UX:
- Lifecycle
cwd = remoteWorkspaceFolder; object-form entries run in parallel and continue past failures;remoteEnvpropagated;shutdownAction: stopContainerhonoured on Detach;userEnvProbecaptured and merged;remoteUserfalls back per spec. - Lifecycle stdout/stderr surface in the panel;
Show *commands reuse a single panel; build log split reused not stacked; parse errors surface (andOpen Configstays registered);onAutoForward: notifytoasts; state-relevant commands gated by authority; no re-prompt after restart. - Devcontainer Goto-Definition across host / container: LSP URIs translate at the boundary; container-only paths (e.g.
flask/app.pyunder the venv) are fetched into a buffer.
- Lifecycle
-
File explorer preview no longer loses focus to LSP popups in the editor pane.
-
Plugin types:
tsconfig.jsonfortsc --noEmitin CI;editor.on(fn)infers payload types fromHookEventMap;HookArgsderives serde. -
Conceal substitution now emits the replacement glyph for whitespace tokens (Space / Newline / Break).
Bug Fixes
-
plugins/folder in your project no longer hides bundled commands (#1722): Fresh stops scanning the working directory for plugins. -
Scroll & viewport:
- Mouse-wheel / PageDown / scrollbar-drag now reach EOF on word-wrapped buffers, including compose-mode markdown ending in a table. Within-line scroll re-clamps; gutter calc unified.
- Search wrap-around Down-arrow stall: stale
scrolled_up_in_wrapcleared on recenter.
-
Non-ASCII truncation panics (#1715, #1718): settings search/preview/description/changelog, file-browser sort-arrow header, status-bar
truncate_path, shelltruncate_command, map-input value previews. Text search inside rows with multi-byte glyphs no longer panics either. -
setLayoutHintsbindscompose_widthto the buffer, not whichever buffer is active.
Under the Hood
-
Line-wrap cache (
LineWrapCache+ tier-2VisualRowIndex) becomes the single source of truth —wrap_line/WrappedSegmentdeleted; scroll math, cursor position, and scrollbar thumb share one pipeline. -
Marker-tree
remove_in_rangeforSoftBreakManager/ConcealManager/OverlayManager: O(log N + k), proptest invariants. -
LspUrinewtype enforces host / container URI translation at the type level. -
Refactors:
handle_mouse_click(764 lines) → 14 helpers;real_maindecomposed;plugin_dispatchmatch arms extracted;quickjs_backendID-allocation boilerplate collapsed;FromJsimpls into a macro; mouse multi-click + scroll dispatch deduped. -
Test infrastructure: fake
devcontainer/docker/pylspCLIs drive e2es without real binaries; plugin fixtures load from<config_dir>/plugins/instead of the cwd; animations default off in tests.