@fresh-editor/fresh-editor 0.2.25 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +216 -0
- package/README.md +6 -0
- package/package.json +1 -1
- package/plugins/astro-lsp.ts +6 -12
- package/plugins/audit_mode.i18n.json +14 -14
- package/plugins/audit_mode.ts +182 -146
- package/plugins/bash-lsp.ts +15 -22
- package/plugins/clangd-lsp.ts +15 -24
- package/plugins/clojure-lsp.ts +9 -12
- package/plugins/cmake-lsp.ts +9 -12
- package/plugins/code-tour.ts +15 -16
- package/plugins/config-schema.json +79 -6
- package/plugins/csharp_support.ts +25 -30
- package/plugins/css-lsp.ts +15 -22
- package/plugins/dart-lsp.ts +9 -12
- package/plugins/dashboard.ts +1903 -0
- package/plugins/devcontainer.i18n.json +1472 -0
- package/plugins/devcontainer.ts +2793 -0
- package/plugins/diagnostics_panel.ts +10 -17
- package/plugins/elixir-lsp.ts +9 -12
- package/plugins/erlang-lsp.ts +9 -12
- package/plugins/examples/bookmarks.ts +10 -16
- package/plugins/find_references.ts +5 -9
- package/plugins/flash.ts +577 -0
- package/plugins/fsharp-lsp.ts +9 -12
- package/plugins/git_explorer.ts +16 -20
- package/plugins/git_gutter.ts +65 -79
- package/plugins/git_log.i18n.json +14 -42
- package/plugins/git_log.ts +19 -9
- package/plugins/gleam-lsp.ts +9 -12
- package/plugins/go-lsp.ts +15 -22
- package/plugins/graphql-lsp.ts +9 -12
- package/plugins/haskell-lsp.ts +9 -12
- package/plugins/html-lsp.ts +15 -24
- package/plugins/java-lsp.ts +9 -12
- package/plugins/json-lsp.ts +15 -24
- package/plugins/julia-lsp.ts +9 -12
- package/plugins/kotlin-lsp.ts +15 -22
- package/plugins/latex-lsp.ts +9 -12
- package/plugins/lib/fresh.d.ts +603 -0
- package/plugins/lua-lsp.ts +15 -22
- package/plugins/markdown_compose.ts +132 -128
- package/plugins/markdown_source.ts +8 -10
- package/plugins/marksman-lsp.ts +9 -12
- package/plugins/merge_conflict.ts +15 -17
- package/plugins/nim-lsp.ts +9 -12
- package/plugins/nix-lsp.ts +9 -12
- package/plugins/nushell-lsp.ts +9 -12
- package/plugins/ocaml-lsp.ts +9 -12
- package/plugins/odin-lsp.ts +15 -22
- package/plugins/path_complete.ts +5 -6
- package/plugins/perl-lsp.ts +9 -12
- package/plugins/php-lsp.ts +15 -22
- package/plugins/pkg.ts +10 -21
- package/plugins/protobuf-lsp.ts +9 -12
- package/plugins/python-lsp.ts +15 -24
- package/plugins/r-lsp.ts +9 -12
- package/plugins/ruby-lsp.ts +15 -22
- package/plugins/rust-lsp.ts +18 -28
- package/plugins/scala-lsp.ts +9 -12
- package/plugins/schemas/theme.schema.json +126 -0
- package/plugins/search_replace.ts +10 -13
- package/plugins/solidity-lsp.ts +9 -12
- package/plugins/sql-lsp.ts +9 -12
- package/plugins/svelte-lsp.ts +9 -12
- package/plugins/swift-lsp.ts +9 -12
- package/plugins/tailwindcss-lsp.ts +9 -12
- package/plugins/templ-lsp.ts +9 -12
- package/plugins/terraform-lsp.ts +9 -12
- package/plugins/theme_editor.i18n.json +98 -14
- package/plugins/theme_editor.ts +156 -209
- package/plugins/toml-lsp.ts +15 -22
- package/plugins/tsconfig.json +100 -0
- package/plugins/typescript-lsp.ts +15 -24
- package/plugins/typst-lsp.ts +15 -22
- package/plugins/vi_mode.ts +77 -290
- package/plugins/vue-lsp.ts +9 -12
- package/plugins/yaml-lsp.ts +15 -22
- package/plugins/zig-lsp.ts +9 -12
- package/themes/high-contrast.json +2 -2
- package/themes/nord.json +4 -0
- package/themes/solarized-dark.json +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,225 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **Animations framework**: tab-switch slide; cursor-jump trail animation. Disable it via Settings UI. Animations available to plugins via API.
|
|
8
|
+
|
|
9
|
+
* **Flash plugin** (label-jump, à la flash.nvim): bundled plugin — type a pattern, press the displayed label to jump, even across split panes.
|
|
10
|
+
|
|
11
|
+
* **Devcontainer fixes**: See below
|
|
12
|
+
|
|
13
|
+
### Improvements
|
|
14
|
+
|
|
15
|
+
* **Relative-numbers go-to negative** (thanks @paveloparev!): `g<-N>` jumps N lines up in relative-numbers mode.
|
|
16
|
+
|
|
17
|
+
* **Racket language support**: `.rkt` / `.rktd` / `.rktl` / `.scrbl` highlight out of the box; LSP via `racket-langserver`.
|
|
18
|
+
|
|
19
|
+
* **`{remote}` indicator default-on**: rendered on bottom-left for fresh installs (`F6` default keybinding, palette command).
|
|
20
|
+
|
|
21
|
+
* **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).
|
|
22
|
+
|
|
23
|
+
* **Completion popup rebindable** (#1705): Allow modifying key bindings for the non-lsp completions popup.
|
|
24
|
+
|
|
25
|
+
* **Better scrolling** on markdown preview buffers and very-long-line buffers via a new two-tier line-wrap cache.
|
|
26
|
+
|
|
27
|
+
* **LSP**:
|
|
28
|
+
- Stuck request no longer blocks others (#1679): per-server handlers on independent tokio tasks + 30 s timeout. R `languageserver` 0.3.17 no longer wedges completion / signature help.
|
|
29
|
+
- Empty-server completion fallback to buffer-word completions.
|
|
30
|
+
- Failure-stub log so "View Log" works after a failed spawn.
|
|
31
|
+
|
|
32
|
+
* **Devcontainer** spec-conformance + UX:
|
|
33
|
+
- Lifecycle `cwd = remoteWorkspaceFolder`; object-form entries run in parallel and continue past failures; `remoteEnv` propagated; `shutdownAction: stopContainer` honoured on Detach; `userEnvProbe` captured and merged; `remoteUser` falls back per spec.
|
|
34
|
+
- Lifecycle stdout/stderr surface in the panel; `Show *` commands reuse a single panel; build log split reused not stacked; parse errors surface (and `Open Config` stays registered); `onAutoForward: notify` toasts; state-relevant commands gated by authority; no re-prompt after restart.
|
|
35
|
+
- **Devcontainer Goto-Definition across host / container**: LSP URIs translate at the boundary; container-only paths (e.g. `flask/app.py` under the venv) are fetched into a buffer.
|
|
36
|
+
|
|
37
|
+
* **File explorer preview** no longer loses focus to LSP popups in the editor pane.
|
|
38
|
+
|
|
39
|
+
* **Plugin types**: `tsconfig.json` for `tsc --noEmit` in CI; `editor.on(fn)` infers payload types from `HookEventMap`; `HookArgs` derives serde.
|
|
40
|
+
|
|
41
|
+
* **Conceal substitution** now emits the replacement glyph for whitespace tokens (Space / Newline / Break).
|
|
42
|
+
|
|
43
|
+
### Bug Fixes
|
|
44
|
+
|
|
45
|
+
* **`plugins/` folder in your project no longer hides bundled commands** (#1722): Fresh stops scanning the working directory for plugins.
|
|
46
|
+
|
|
47
|
+
* **Scroll & viewport**:
|
|
48
|
+
- 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.
|
|
49
|
+
- Search wrap-around Down-arrow stall: stale `scrolled_up_in_wrap` cleared on recenter.
|
|
50
|
+
|
|
51
|
+
* **Non-ASCII truncation panics** (#1715, #1718): settings search/preview/description/changelog, file-browser sort-arrow header, status-bar `truncate_path`, shell `truncate_command`, map-input value previews. Text search inside rows with multi-byte glyphs no longer panics either.
|
|
52
|
+
|
|
53
|
+
* **`setLayoutHints`** binds `compose_width` to the buffer, not whichever buffer is active.
|
|
54
|
+
|
|
55
|
+
### Under the Hood
|
|
56
|
+
|
|
57
|
+
* **Line-wrap cache** (`LineWrapCache` + tier-2 `VisualRowIndex`) becomes the single source of truth — `wrap_line` / `WrappedSegment` deleted; scroll math, cursor position, and scrollbar thumb share one pipeline.
|
|
58
|
+
|
|
59
|
+
* **Marker-tree `remove_in_range`** for `SoftBreakManager` / `ConcealManager` / `OverlayManager`: O(log N + k), proptest invariants.
|
|
60
|
+
|
|
61
|
+
* **`LspUri` newtype** enforces host / container URI translation at the type level.
|
|
62
|
+
|
|
63
|
+
* **Refactors**: `handle_mouse_click` (764 lines) → 14 helpers; `real_main` decomposed; `plugin_dispatch` match arms extracted; `quickjs_backend` ID-allocation boilerplate collapsed; `FromJs` impls into a macro; mouse multi-click + scroll dispatch deduped.
|
|
64
|
+
|
|
65
|
+
* **Test infrastructure**: fake `devcontainer` / `docker` / `pylsp` CLIs drive e2es without real binaries; plugin fixtures load from `<config_dir>/plugins/` instead of the cwd; animations default off in tests.
|
|
66
|
+
|
|
67
|
+
## 0.3.0
|
|
68
|
+
|
|
69
|
+
This version brings major features and many quality-of-life improvements and bug fixes:
|
|
70
|
+
|
|
71
|
+
- A cool dashboard plugin
|
|
72
|
+
- Devcontainer support
|
|
73
|
+
- init.ts
|
|
74
|
+
|
|
75
|
+
And more (see below). A large version is more likely to contain regression bugs, so please bear with me if you encounter problems, and open github issues without hesitation.
|
|
76
|
+
|
|
77
|
+
### Features
|
|
78
|
+
|
|
79
|
+
* **Dashboard plugin**: Built-in TUI dashboard that replaces the usual "[No Name]" with useful at-a-glance info.
|
|
80
|
+
- Default widgets: git status + repo URL, a "vs master" row (commits ahead/behind), and disk usage for common mounts.
|
|
81
|
+
- Opt-in widgets: weather, and open GitHub PRs for the current repo.
|
|
82
|
+
- Auto-open (on startup / last-buffer-close) is configurable — e.g. `editor.getPluginApi("dashboard")?.setAutoOpen(false)` in `init.ts`. When off, use the "Show Dashboard" command in the palette.
|
|
83
|
+
- Third-party plugins and `init.ts` can contribute their own rows via the `registerSection()` API. The `init.ts` starter template includes ready-to-paste snippets for enabling the opt-in widgets, toggling auto-open, and registering custom sections (see below).
|
|
84
|
+
|
|
85
|
+
* **Devcontainer support** (thanks @masak1yu!): Fresh integrates with the [devcontainer CLI](https://github.com/devcontainers/cli) (install it yourself).
|
|
86
|
+
- Detects `.devcontainer/devcontainer.json` and offers Attach / Rebuild / Detach.
|
|
87
|
+
- Embedded terminal, filesystem, and LSP servers all run inside the devcontainer.
|
|
88
|
+
- `Dev Container: Create Config` scaffolds a config for projects that don't have one.
|
|
89
|
+
- `Dev Container: Show Ports` merges configured `forwardPorts` with live `docker port` output.
|
|
90
|
+
- `Dev Container: Show Logs` captures the container's recent stdout/stderr.
|
|
91
|
+
- Build log streams into a workspace split; failed attaches offer Retry / Show Logs / Detach via a recovery popup.
|
|
92
|
+
- `initializeCommand` runs on attach.
|
|
93
|
+
|
|
94
|
+
* **`init.ts`**: Fresh now auto-loads `~/.config/fresh/init.ts`! Allows you to run plugin code on startup, which complements the purely declarative config system with imperative, environment-aware logic. Use command palette `init: Edit` to generate a template with some examples. Use `init: Reload` to run it after editing. Use `--no-init` / `--safe` to skip loading.
|
|
95
|
+
- Tip: *Enable LSP* when editing `init.ts` to get help and completions.
|
|
96
|
+
- Example (for the Dashboard plugin):
|
|
97
|
+
```typescript
|
|
98
|
+
// in your init.ts file:
|
|
99
|
+
const dash = editor.getPluginApi("dashboard");
|
|
100
|
+
if (dash) {
|
|
101
|
+
dash.registerSection("env", async (ctx) => {
|
|
102
|
+
ctx.kv("USER", editor.getEnv("USER") || "?");
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
Will add a line like this to your dashboard:
|
|
107
|
+
```
|
|
108
|
+
│ ▎ ENV │
|
|
109
|
+
│ USER someone │
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
* **`{remote}` status-bar indicator**: Clickable status-bar element that lights up when you're attached to an SSH remote or devcontainer, with a context-aware menu (detach, show logs, retry attach, …). Surfaces `Connecting` / `Connected` / `FailedAttach` states. Fresh's config v1→v2 migration injects `{remote}` into customized `status_bar.left`.
|
|
113
|
+
|
|
114
|
+
* **Hot-exit restore split from session restore**: `editor.restore_previous_session` config and the `--no-restore` / `--restore` CLI flags now control workspace/tab restoration separately from hot-exit content — unsaved scratch buffers come back even when you opt out of full session restore (#1404).
|
|
115
|
+
|
|
116
|
+
* **File explorer — cut/copy/paste + multi-selection + right-click context menu** (thanks @theogravity!):
|
|
117
|
+
- `Ctrl+C` / `Ctrl+X` / `Ctrl+V` with same-dir auto-rename and per-file conflict prompt on cross-dir paste.
|
|
118
|
+
- `Shift+Up/Down` for multi-select.
|
|
119
|
+
- Right-click context menu (#1684) with the usual file operations, honoring the active multi-selection.
|
|
120
|
+
- Cut-pending items are dimmed until pasted; cancel a pending cut with Escape or by pasting back into the same directory.
|
|
121
|
+
- Renaming a file or directory relocates any open buffers inside it; deleting a file closes its buffer.
|
|
122
|
+
|
|
123
|
+
* **File explorer — keyboard preview**: Moving the cursor with Up/Down in the explorer previews the highlighted file in a preview tab (#1570), so you can scan files without leaving the keyboard.
|
|
124
|
+
|
|
125
|
+
* **Quick Open / Go-to Line live preview**: Typing `:<N>` in the file finder (or in the standalone `:` mode) scrolls the cursor to the target line live as you type; Enter commits, Escape reverts, mouse movement or clicks also commit.
|
|
126
|
+
|
|
127
|
+
* **Terminal shell override (#1637)**: New `terminal.shell` config option lets you pick a different shell for the integrated terminal without reassigning `$SHELL` (which affects `format_on_save` and other features).
|
|
128
|
+
|
|
129
|
+
* **Suspend process (Unix)**: New `Suspend Process` action sends Fresh to the background like Ctrl+Z in a shell. Routed through the client in session mode so the server stays up.
|
|
130
|
+
|
|
131
|
+
* **Current-column highlight**: New `highlight_current_column` / `Toggle Current Column Highlight` — highlights the cursor's column for alignment work.
|
|
132
|
+
|
|
133
|
+
* **Post-EOF shading** (#779): Rows past end-of-file render with a distinct background so the boundary is obvious; works alongside `show_tilde`.
|
|
134
|
+
|
|
135
|
+
* **Regex replacement escapes**: `\n`, `\t`, `\r`, and `\\` in the replacement string are now interpreted when regex mode is on.
|
|
136
|
+
|
|
137
|
+
### Improvements
|
|
138
|
+
|
|
139
|
+
* **SSH URLs on the CLI**: `fresh ssh://user@host:port/path` launches a session whose filesystem and process authority point at the remote host.
|
|
140
|
+
|
|
141
|
+
* **Redraw Screen command** (#1070): Added a `redraw_screen` action and palette entry that clears the terminal and fully repaints the UI, useful when an external program scribbles over the TUI.
|
|
142
|
+
|
|
143
|
+
* **Terminal window title** (#1618): Fresh sets the terminal window title from the active buffer's filename, matching other editors.
|
|
144
|
+
|
|
145
|
+
* **LSP status popup upgrades**: LSP popup now shows better options for enabling/disabling the nudge.
|
|
146
|
+
|
|
147
|
+
* **Find Next centers vertically** (#1251): When the next match is off-screen, scroll it to roughly the middle of the viewport so you keep context above and below it. Matches that are already visible are not re-scrolled.
|
|
148
|
+
|
|
149
|
+
* **Adaptive line-number gutter** (#1204): The gutter now grows with the buffer's line count rather than reserving 4 digits by default — a small file reclaims 2–3 columns of editor width.
|
|
150
|
+
|
|
151
|
+
* **File explorer width in percent or columns** (#1118, #1212, #1213): `file_explorer.width` now accepts `"30%"` (percent of terminal width) or `"24"` (absolute columns). Dragging the divider preserves whichever form you configured. Legacy integer/fraction values keep working.
|
|
152
|
+
|
|
153
|
+
* **Relative paths to theme files** (#1621): User themes in `config.json` can be spelled out as relative to your themes directory:
|
|
154
|
+
- "dark" or "builtin://dark" — any built-in by name
|
|
155
|
+
- "my-theme.json" or "subdir/dark.json" — nested relative path in your user themes dir - useful for sharing Fresh config.json in a dotfiles repo
|
|
156
|
+
- "file://${HOME}/themes/x.json" — absolute path; ${HOME}, ${XDG_CONFIG_HOME} are expanded
|
|
157
|
+
- "https://github.com/foo/themes#dark" — URL-packaged theme
|
|
158
|
+
|
|
159
|
+
* **Plugin API additions**:
|
|
160
|
+
- `editor.overrideThemeColors(...)` for in-memory theme mutation.
|
|
161
|
+
- `editor.parseJsonc(...)` for host-side JSONC parsing.
|
|
162
|
+
- Plugin-created terminals now have an ephemeral lifetime — they close cleanly when the action that spawned them finishes.
|
|
163
|
+
- Plugin authors can augment `FreshPluginRegistry` to make `editor.getPluginApi("name")` return a typed interface (no `as`-cast needed). Augmentations are emitted to `~/.config/fresh/types/plugins.d.ts` at load time.
|
|
164
|
+
- `spawnHostProcess` now returns a handle with `kill()` (and a matching `KillHostProcess` command).
|
|
165
|
+
- `BufferInfo.splits` surfaces which splits display a buffer, for "focus-if-visible" dedupe.
|
|
166
|
+
- `editor.setRemoteIndicatorState(...)` / `clearRemoteIndicatorState()` let remote plugins drive the status-bar `{remote}` element.
|
|
167
|
+
- Dashboard gains `dash.registerSection()` (with a returned remover) and `dash.clearAllSections()` for plugin extension.
|
|
168
|
+
|
|
169
|
+
* **JSONC language**: `.jsonc` files and well-known JSONC-with-`.json`-suffix files (`devcontainer.json`, `tsconfig.json`, `.eslintrc.json`, `.babelrc`, VS Code settings files) now get a dedicated `jsonc` language with comment-tolerant highlighting and LSP routing through `vscode-json-language-server` with the correct `languageId`.
|
|
170
|
+
|
|
171
|
+
* **macOS Alt+Right / Option+Right stops at word end** (#1288): Selection no longer extends past trailing whitespace, matching TextEdit / VS Code on Mac.
|
|
172
|
+
|
|
173
|
+
### Bug Fixes
|
|
174
|
+
|
|
175
|
+
* **File Explorer `.gitignore` improvements** (#1388): Files are now visible only if they aren't hidden by ANY of the filters (hidden files, `.gitignore` files). Also, File Explorer will do a better job of auto-reloading when `.gitignore` changes.
|
|
176
|
+
|
|
177
|
+
* **Scrollbar theme colours** (#1554): The scrollbar now honours `theme.scrollbar_track_fg` / `scrollbar_thumb_fg`. A few themes were updated to define this missing value.
|
|
178
|
+
|
|
179
|
+
* **Fixed panic when clicking split + terminal** (#1620).
|
|
180
|
+
|
|
181
|
+
* **Fixed LSP server crash loop** (#1612): When LSP fails on startup, restart bypassed the normal restart count limiter, now fixed.
|
|
182
|
+
|
|
183
|
+
* **Fixed Markdown preview/compose wrapping when File Explorer is open**: When compose width was set (e.g. 80), opening the File Explorer sidebar pushed tables off the right edge. Separator rows no longer overflow when table cells are truncated.
|
|
184
|
+
|
|
185
|
+
* **More settings propagate live**: File-explorer width and flag changes made in the Settings UI apply immediately on save, without a restart.
|
|
186
|
+
|
|
187
|
+
* **Devcontainer: no re-prompt after restart**: Fresh no longer shows the "Attach?" prompt again after the post-attach self-restart.
|
|
188
|
+
|
|
189
|
+
* **Dashboard polish**: Doesn't steal focus from a CLI-supplied file, underline only on clickable spans (not trailing padding), clicks dispatch only from underlined column ranges, immediate repaint on split resize.
|
|
190
|
+
|
|
191
|
+
* **Quieter LSP**: Suppress `MethodNotFound` errors from LSP servers (#1649) — servers that don't implement an optional method no longer spam the log.
|
|
192
|
+
|
|
193
|
+
* **Plugin action popups survive buffer switches**: Popups stay visible when the active buffer changes, and concurrent popups queue LIFO so the newest shows first.
|
|
194
|
+
|
|
195
|
+
* **Encoding detection on CJK files** (#1635): Files whose only non-ASCII bytes sat past the 8 KB sample window were mis-detected; the sample boundary is now treated as truncation so the full file is considered before the encoding is guessed.
|
|
196
|
+
|
|
197
|
+
* **Review diff — no fold jitter**: Toggling a fold no longer re-centers the viewport.
|
|
198
|
+
|
|
199
|
+
* **LSP — cleaner disables**: No spurious warning when opening a file for a language whose LSP is explicitly disabled in config. The indicator shows buffer-skip state (e.g. file too large) instead of a generic warning.
|
|
200
|
+
|
|
201
|
+
* **Windows — preserve UNC paths**: `pathJoin` plugin API now preserves `\\?\` UNC prefixes on Windows.
|
|
202
|
+
|
|
203
|
+
* **Hardware cursor no longer bleeds through popups**: The terminal hardware cursor is hidden when an overlay popup covers it.
|
|
204
|
+
|
|
205
|
+
* **Focus — tab clicks reset explorer context** (#1540): Clicking a tab or buffer no longer leaves the FileExplorer key context active.
|
|
206
|
+
|
|
207
|
+
* **File explorer poll fixes**: Background refresh no longer collapses folders you've expanded, and resets the cursor to the root only when the selected path is genuinely gone.
|
|
208
|
+
|
|
209
|
+
* **Review PR Branch — default-branch detection**: The prompt now pre-fills the repo's actual default branch (via `origin/HEAD`) instead of hard-coding `main`.
|
|
210
|
+
|
|
211
|
+
* **Review: PageUp/PageDown**: Paging in review-branch mode now scrolls the commit list instead of moving the cursor by one row.
|
|
212
|
+
|
|
213
|
+
### Under the Hood
|
|
214
|
+
|
|
215
|
+
* **Authority abstraction**: Filesystem, process-spawning, and LSP routing are now consolidated behind a single `Authority` slot, with plugin ops (`editor.setAuthority` / `clearAuthority` / `spawnHostProcess`) for plugins that want to target the host even while attached elsewhere. This is what makes the devcontainer and `ssh://` flows work uniformly.
|
|
216
|
+
|
|
3
217
|
## 0.2.25
|
|
4
218
|
|
|
5
219
|
### Improvements
|
|
6
220
|
|
|
221
|
+
* **Redraw Screen command** (#1070): Added a "Redraw Screen" entry to the command palette (action `redraw_screen`) that clears the terminal and fully repaints the UI. Useful when an external program (e.g. a macOS pasteboard diagnostic leaked by the host terminal on Ctrl+C) scribbles over the TUI and leaves ghost text behind.
|
|
222
|
+
|
|
7
223
|
* **PageUp/PageDown in wrapped buffers**: Page motion is now view-row-aware, so paging through heavily wrapped text no longer stalls mid-buffer and the cursor stays visible after every press. Each page also keeps 3 rows of overlap with the previous page (matching vim / less) so you don't lose context across the jump.
|
|
8
224
|
|
|
9
225
|
* **Smarter char-wrapping of long tokens**: When a token has to be split mid-word because it doesn't fit on a fresh line, the break now prefers a UAX #29 word boundary within a lookback window instead of an arbitrary grapheme position — e.g. `dialog.getButton(DialogInterface.BUTTON_NEUTRAL).setOnClickListener` now wraps after `BUTTON_NEUTRAL` rather than mid-identifier.
|
package/README.md
CHANGED
|
@@ -187,6 +187,12 @@ See [flatpak/README.md](flatpak/README.md) for building from source.
|
|
|
187
187
|
|
|
188
188
|
Download the latest release for your platform from the [releases page](https://github.com/sinelaw/fresh/releases).
|
|
189
189
|
|
|
190
|
+
### Using mise
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
mise use github:sinelaw/fresh
|
|
194
|
+
```
|
|
195
|
+
|
|
190
196
|
### npm
|
|
191
197
|
|
|
192
198
|
```bash
|
package/package.json
CHANGED
package/plugins/astro-lsp.ts
CHANGED
|
@@ -35,7 +35,7 @@ const INSTALL_COMMANDS = {
|
|
|
35
35
|
|
|
36
36
|
let astroLspError: { serverCommand: string; message: string } | null = null;
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
editor.on("lsp_server_error", (data) => {
|
|
39
39
|
if (data.language !== "astro") {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
@@ -54,11 +54,9 @@ function on_astro_lsp_server_error(data: LspServerErrorData): void {
|
|
|
54
54
|
} else {
|
|
55
55
|
editor.setStatus(`Astro LSP error: ${data.message}`);
|
|
56
56
|
}
|
|
57
|
-
}
|
|
58
|
-
registerHandler("on_astro_lsp_server_error", on_astro_lsp_server_error);
|
|
59
|
-
editor.on("lsp_server_error", "on_astro_lsp_server_error");
|
|
57
|
+
});
|
|
60
58
|
|
|
61
|
-
|
|
59
|
+
editor.on("lsp_status_clicked", (data) => {
|
|
62
60
|
if (data.language !== "astro" || !astroLspError) {
|
|
63
61
|
return;
|
|
64
62
|
}
|
|
@@ -76,11 +74,9 @@ function on_astro_lsp_status_clicked(data: LspStatusClickedData): void {
|
|
|
76
74
|
{ id: "dismiss", label: "Dismiss (ESC)" },
|
|
77
75
|
],
|
|
78
76
|
});
|
|
79
|
-
}
|
|
80
|
-
registerHandler("on_astro_lsp_status_clicked", on_astro_lsp_status_clicked);
|
|
81
|
-
editor.on("lsp_status_clicked", "on_astro_lsp_status_clicked");
|
|
77
|
+
});
|
|
82
78
|
|
|
83
|
-
|
|
79
|
+
editor.on("action_popup_result", (data) => {
|
|
84
80
|
if (data.popup_id !== "astro-lsp-help") {
|
|
85
81
|
return;
|
|
86
82
|
}
|
|
@@ -111,8 +107,6 @@ function on_astro_lsp_action_result(data: ActionPopupResultData): void {
|
|
|
111
107
|
default:
|
|
112
108
|
editor.debug(`astro-lsp: Unknown action: ${data.action_id}`);
|
|
113
109
|
}
|
|
114
|
-
}
|
|
115
|
-
registerHandler("on_astro_lsp_action_result", on_astro_lsp_action_result);
|
|
116
|
-
editor.on("action_popup_result", "on_astro_lsp_action_result");
|
|
110
|
+
});
|
|
117
111
|
|
|
118
112
|
editor.debug("astro-lsp: Plugin loaded");
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"cmd.refresh_review_branch_desc": "Re-fetch the commit list for the current base ref",
|
|
15
15
|
"cmd.review_range": "Review Range (Commit or Branch)",
|
|
16
16
|
"cmd.review_range_desc": "Review a commit or branch as a flattened diff (e.g. main..HEAD, HEAD~3..HEAD, or a single commit SHA)",
|
|
17
|
-
"prompt.branch_base": "Base ref to compare against (default:
|
|
17
|
+
"prompt.branch_base": "Base ref to compare against (default: %{default}):",
|
|
18
18
|
"prompt.review_range": "Review (range A..B or commit SHA): ",
|
|
19
19
|
"status.review_range_empty": "No changes in %{range}",
|
|
20
20
|
"status.review_branch_ready": "Reviewing %{count} commits in %{base}..HEAD",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"cmd.review_range_desc": "Zrevidovat commit nebo větev jako sloučený rozdíl (např. main..HEAD, HEAD~3..HEAD nebo hash jednoho commitu)",
|
|
93
93
|
"prompt.review_range": "Revize (rozsah A..B nebo SHA commitu): ",
|
|
94
94
|
"status.review_range_empty": "Žádné změny v %{range}",
|
|
95
|
-
"prompt.branch_base": "Základní ref pro porovnání (výchozí:
|
|
95
|
+
"prompt.branch_base": "Základní ref pro porovnání (výchozí: %{default}):",
|
|
96
96
|
"status.review_branch_ready": "Kontroluje se %{count} commitů v %{base}..HEAD",
|
|
97
97
|
"status.review_branch_empty": "Žádné commity v %{base}..HEAD — není co revidovat.",
|
|
98
98
|
"panel.review_branch_header": "Commity (%{base}..HEAD)",
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"cmd.review_range_desc": "Einen Commit oder Branch als zusammengeführten Diff prüfen (z. B. main..HEAD, HEAD~3..HEAD oder ein einzelner Commit-SHA)",
|
|
169
169
|
"prompt.review_range": "Prüfen (Bereich A..B oder Commit-SHA): ",
|
|
170
170
|
"status.review_range_empty": "Keine Änderungen in %{range}",
|
|
171
|
-
"prompt.branch_base": "Basis-Ref zum Vergleichen (Standard:
|
|
171
|
+
"prompt.branch_base": "Basis-Ref zum Vergleichen (Standard: %{default}):",
|
|
172
172
|
"status.review_branch_ready": "%{count} Commits in %{base}..HEAD werden überprüft",
|
|
173
173
|
"status.review_branch_empty": "Keine Commits in %{base}..HEAD — nichts zu überprüfen.",
|
|
174
174
|
"panel.review_branch_header": "Commits (%{base}..HEAD)",
|
|
@@ -244,7 +244,7 @@
|
|
|
244
244
|
"cmd.review_range_desc": "Revisar un commit o una rama como un diff aplanado (p. ej. main..HEAD, HEAD~3..HEAD o un SHA de commit)",
|
|
245
245
|
"prompt.review_range": "Revisar (rango A..B o SHA de commit): ",
|
|
246
246
|
"status.review_range_empty": "Sin cambios en %{range}",
|
|
247
|
-
"prompt.branch_base": "Ref base para comparar (por defecto:
|
|
247
|
+
"prompt.branch_base": "Ref base para comparar (por defecto: %{default}):",
|
|
248
248
|
"status.review_branch_ready": "Revisando %{count} commits en %{base}..HEAD",
|
|
249
249
|
"status.review_branch_empty": "No hay commits en %{base}..HEAD — nada que revisar.",
|
|
250
250
|
"panel.review_branch_header": "Commits (%{base}..HEAD)",
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
"cmd.review_range_desc": "Revoir un commit ou une branche comme un diff aplati (par ex. main..HEAD, HEAD~3..HEAD ou un SHA de commit)",
|
|
321
321
|
"prompt.review_range": "Revoir (plage A..B ou SHA de commit) : ",
|
|
322
322
|
"status.review_range_empty": "Aucun changement dans %{range}",
|
|
323
|
-
"prompt.branch_base": "Ref de base pour la comparaison (par défaut :
|
|
323
|
+
"prompt.branch_base": "Ref de base pour la comparaison (par défaut : %{default}) :",
|
|
324
324
|
"status.review_branch_ready": "Revue de %{count} commits dans %{base}..HEAD",
|
|
325
325
|
"status.review_branch_empty": "Aucun commit dans %{base}..HEAD — rien à revoir.",
|
|
326
326
|
"panel.review_branch_header": "Commits (%{base}..HEAD)",
|
|
@@ -396,7 +396,7 @@
|
|
|
396
396
|
"cmd.review_range_desc": "Revisiona un commit o un ramo come un diff appiattito (es. main..HEAD, HEAD~3..HEAD o uno SHA di commit)",
|
|
397
397
|
"prompt.review_range": "Revisiona (intervallo A..B o SHA di commit): ",
|
|
398
398
|
"status.review_range_empty": "Nessuna modifica in %{range}",
|
|
399
|
-
"prompt.branch_base": "Ref base per il confronto (predefinito:
|
|
399
|
+
"prompt.branch_base": "Ref base per il confronto (predefinito: %{default}):",
|
|
400
400
|
"status.review_branch_ready": "Revisione di %{count} commit in %{base}..HEAD",
|
|
401
401
|
"status.review_branch_empty": "Nessun commit in %{base}..HEAD — niente da revisionare.",
|
|
402
402
|
"panel.review_branch_header": "Commit (%{base}..HEAD)",
|
|
@@ -472,7 +472,7 @@
|
|
|
472
472
|
"cmd.review_range_desc": "コミットまたはブランチを平坦化した diff としてレビュー (例: main..HEAD、HEAD~3..HEAD、または単一コミットの SHA)",
|
|
473
473
|
"prompt.review_range": "レビュー (範囲 A..B またはコミット SHA): ",
|
|
474
474
|
"status.review_range_empty": "%{range} に変更はありません",
|
|
475
|
-
"prompt.branch_base": "比較対象のベース ref (デフォルト:
|
|
475
|
+
"prompt.branch_base": "比較対象のベース ref (デフォルト: %{default}):",
|
|
476
476
|
"status.review_branch_ready": "%{base}..HEAD の %{count} 件のコミットをレビュー中",
|
|
477
477
|
"status.review_branch_empty": "%{base}..HEAD にコミットはありません — レビューする対象がありません。",
|
|
478
478
|
"panel.review_branch_header": "コミット (%{base}..HEAD)",
|
|
@@ -548,7 +548,7 @@
|
|
|
548
548
|
"cmd.review_range_desc": "커밋이나 브랜치를 평탄화된 diff로 리뷰 (예: main..HEAD, HEAD~3..HEAD 또는 단일 커밋 SHA)",
|
|
549
549
|
"prompt.review_range": "리뷰 (범위 A..B 또는 커밋 SHA): ",
|
|
550
550
|
"status.review_range_empty": "%{range}에 변경 사항 없음",
|
|
551
|
-
"prompt.branch_base": "비교할 기준 ref (기본값:
|
|
551
|
+
"prompt.branch_base": "비교할 기준 ref (기본값: %{default}):",
|
|
552
552
|
"status.review_branch_ready": "%{base}..HEAD의 %{count}개 커밋을 리뷰 중",
|
|
553
553
|
"status.review_branch_empty": "%{base}..HEAD에 커밋이 없습니다 — 리뷰할 내용이 없습니다.",
|
|
554
554
|
"panel.review_branch_header": "커밋 (%{base}..HEAD)",
|
|
@@ -624,7 +624,7 @@
|
|
|
624
624
|
"cmd.review_range_desc": "Revisar um commit ou uma branch como um diff achatado (ex.: main..HEAD, HEAD~3..HEAD ou um SHA de commit)",
|
|
625
625
|
"prompt.review_range": "Revisar (intervalo A..B ou SHA de commit): ",
|
|
626
626
|
"status.review_range_empty": "Sem alterações em %{range}",
|
|
627
|
-
"prompt.branch_base": "Ref base para comparação (padrão:
|
|
627
|
+
"prompt.branch_base": "Ref base para comparação (padrão: %{default}):",
|
|
628
628
|
"status.review_branch_ready": "Revisando %{count} commits em %{base}..HEAD",
|
|
629
629
|
"status.review_branch_empty": "Sem commits em %{base}..HEAD — nada para revisar.",
|
|
630
630
|
"panel.review_branch_header": "Commits (%{base}..HEAD)",
|
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
"cmd.review_range_desc": "Ревью коммита или ветки как плоского diff (например, main..HEAD, HEAD~3..HEAD или SHA одного коммита)",
|
|
701
701
|
"prompt.review_range": "Ревью (диапазон A..B или SHA коммита): ",
|
|
702
702
|
"status.review_range_empty": "Нет изменений в %{range}",
|
|
703
|
-
"prompt.branch_base": "Базовый ref для сравнения (по умолчанию:
|
|
703
|
+
"prompt.branch_base": "Базовый ref для сравнения (по умолчанию: %{default}):",
|
|
704
704
|
"status.review_branch_ready": "Ревью %{count} коммитов в %{base}..HEAD",
|
|
705
705
|
"status.review_branch_empty": "Нет коммитов в %{base}..HEAD — нечего просматривать.",
|
|
706
706
|
"panel.review_branch_header": "Коммиты (%{base}..HEAD)",
|
|
@@ -776,7 +776,7 @@
|
|
|
776
776
|
"cmd.review_range_desc": "ตรวจสอบคอมมิตหรือสาขาเป็น diff แบบรวม (เช่น main..HEAD, HEAD~3..HEAD หรือ SHA ของคอมมิตเดียว)",
|
|
777
777
|
"prompt.review_range": "ตรวจสอบ (ช่วง A..B หรือ SHA ของคอมมิต): ",
|
|
778
778
|
"status.review_range_empty": "ไม่มีการเปลี่ยนแปลงใน %{range}",
|
|
779
|
-
"prompt.branch_base": "ref ฐานสำหรับเปรียบเทียบ (ค่าเริ่มต้น:
|
|
779
|
+
"prompt.branch_base": "ref ฐานสำหรับเปรียบเทียบ (ค่าเริ่มต้น: %{default}):",
|
|
780
780
|
"status.review_branch_ready": "กำลังตรวจสอบคอมมิต %{count} รายการใน %{base}..HEAD",
|
|
781
781
|
"status.review_branch_empty": "ไม่มีคอมมิตใน %{base}..HEAD — ไม่มีอะไรต้องตรวจสอบ",
|
|
782
782
|
"panel.review_branch_header": "คอมมิต (%{base}..HEAD)",
|
|
@@ -852,7 +852,7 @@
|
|
|
852
852
|
"cmd.review_range_desc": "Рев'ю коміта або гілки як плаского diff (наприклад main..HEAD, HEAD~3..HEAD або SHA одного коміта)",
|
|
853
853
|
"prompt.review_range": "Рев'ю (діапазон A..B або SHA коміта): ",
|
|
854
854
|
"status.review_range_empty": "Немає змін у %{range}",
|
|
855
|
-
"prompt.branch_base": "Базовий ref для порівняння (за замовчуванням:
|
|
855
|
+
"prompt.branch_base": "Базовий ref для порівняння (за замовчуванням: %{default}):",
|
|
856
856
|
"status.review_branch_ready": "Рев'ю %{count} комітів у %{base}..HEAD",
|
|
857
857
|
"status.review_branch_empty": "Немає комітів у %{base}..HEAD — нічого переглядати.",
|
|
858
858
|
"panel.review_branch_header": "Коміти (%{base}..HEAD)",
|
|
@@ -928,7 +928,7 @@
|
|
|
928
928
|
"cmd.review_range_desc": "Xem xét một commit hoặc nhánh dưới dạng diff đã gộp (ví dụ main..HEAD, HEAD~3..HEAD hoặc SHA của một commit)",
|
|
929
929
|
"prompt.review_range": "Xem xét (khoảng A..B hoặc SHA commit): ",
|
|
930
930
|
"status.review_range_empty": "Không có thay đổi trong %{range}",
|
|
931
|
-
"prompt.branch_base": "Ref cơ sở để so sánh (mặc định:
|
|
931
|
+
"prompt.branch_base": "Ref cơ sở để so sánh (mặc định: %{default}):",
|
|
932
932
|
"status.review_branch_ready": "Đang xem xét %{count} commit trong %{base}..HEAD",
|
|
933
933
|
"status.review_branch_empty": "Không có commit nào trong %{base}..HEAD — không có gì để xem xét.",
|
|
934
934
|
"panel.review_branch_header": "Commit (%{base}..HEAD)",
|
|
@@ -1004,7 +1004,7 @@
|
|
|
1004
1004
|
"cmd.review_range_desc": "将提交或分支作为合并后的 diff 进行审查(例如 main..HEAD、HEAD~3..HEAD 或单个提交的 SHA)",
|
|
1005
1005
|
"prompt.review_range": "审查(范围 A..B 或提交 SHA):",
|
|
1006
1006
|
"status.review_range_empty": "%{range} 中没有更改",
|
|
1007
|
-
"prompt.branch_base": "用于比较的基础 ref
|
|
1007
|
+
"prompt.branch_base": "用于比较的基础 ref(默认:%{default}):",
|
|
1008
1008
|
"status.review_branch_ready": "正在审查 %{base}..HEAD 中的 %{count} 个提交",
|
|
1009
1009
|
"status.review_branch_empty": "%{base}..HEAD 中没有提交 — 无需审查。",
|
|
1010
1010
|
"panel.review_branch_header": "提交 (%{base}..HEAD)",
|