@fresh-editor/fresh-editor 0.1.77 → 0.1.83
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 +28 -0
- package/package.json +1 -1
- package/plugins/audit_mode.ts +17 -17
- package/plugins/calculator.ts +1 -1
- package/plugins/config-schema.json +1 -1
- package/plugins/git_blame.ts +5 -5
- package/plugins/git_find_file.ts +7 -3
- package/plugins/git_grep.ts +1 -1
- package/plugins/git_log.ts +15 -15
- package/plugins/lib/finder.ts +5 -3
- package/plugins/lib/fresh.d.ts +642 -1415
- package/plugins/live_grep.ts +1 -1
- package/plugins/search_replace.ts +1 -1
- package/plugins/theme_editor.ts +40 -8
- package/plugins/vi_mode.ts +6 -0
- package/plugins/welcome.ts +5 -5
- package/plugins/lib/results-panel.ts +0 -914
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 0.1.83
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
|
|
7
|
+
* **QuickJS Plugin Runtime**: Replaced Deno with QuickJS for the plugin system. Each plugin now runs in its own isolated context.
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **Cargo Workspace Architecture**: Refactored into modular crates (fresh-core, fresh-editor, fresh-languages, fresh-parser-js, fresh-plugin-runtime, fresh-plugin-api-macros).
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **Toggle Comment YAML**: Fixed toggle comment not working for YAML files by falling back to config-based language detection (#774).
|
|
16
|
+
* **Undo History Panic**: Fixed panic when undoing past a save point and making new edits caused out-of-bounds slice access (#776).
|
|
17
|
+
* **Sudo Save Prompt**: Fixed permission denied crash when saving files owned by another user; now shows sudo prompt correctly (#775).
|
|
18
|
+
* **Musl Plugin Support**: Plugins now work on musl target builds (x86_64/aarch64-unknown-linux-musl).
|
|
19
|
+
* **LSP Server Requests**: Fixed LSP server-to-client request handling not being dispatched to plugins.
|
|
20
|
+
* **Git Find File Selection**: Fixed race condition causing wrong file selection when pressing Enter quickly.
|
|
21
|
+
* **Plugin Cache**: Embedded plugins now cached in XDG cache dir instead of leaking temp directories.
|
|
22
|
+
|
|
23
|
+
### Internal
|
|
24
|
+
|
|
25
|
+
* Improved compile times via LLVM optimization flag.
|
|
26
|
+
* Cross-platform path handling fixes for Windows.
|
|
27
|
+
* Test reliability improvements.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
3
31
|
## 0.1.77
|
|
4
32
|
|
|
5
33
|
### Documentation
|
package/package.json
CHANGED
package/plugins/audit_mode.ts
CHANGED
|
@@ -1103,21 +1103,21 @@ globalThis.review_drill_down = async () => {
|
|
|
1103
1103
|
const oldBufferId = await editor.createVirtualBuffer({
|
|
1104
1104
|
name: `*OLD:${h.file}*`,
|
|
1105
1105
|
mode: "normal",
|
|
1106
|
-
|
|
1106
|
+
readOnly: true,
|
|
1107
1107
|
entries: oldEntries,
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1108
|
+
showLineNumbers: true,
|
|
1109
|
+
editingDisabled: true,
|
|
1110
|
+
hiddenFromTabs: true
|
|
1111
1111
|
});
|
|
1112
1112
|
|
|
1113
1113
|
const newBufferId = await editor.createVirtualBuffer({
|
|
1114
1114
|
name: `*NEW:${h.file}*`,
|
|
1115
1115
|
mode: "normal",
|
|
1116
|
-
|
|
1116
|
+
readOnly: true,
|
|
1117
1117
|
entries: newEntries,
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1118
|
+
showLineNumbers: true,
|
|
1119
|
+
editingDisabled: true,
|
|
1120
|
+
hiddenFromTabs: true
|
|
1121
1121
|
});
|
|
1122
1122
|
|
|
1123
1123
|
// Convert hunks to composite buffer format (parse counts from git diff)
|
|
@@ -1493,7 +1493,7 @@ globalThis.start_review_diff = async () => {
|
|
|
1493
1493
|
state.comments = []; // Reset comments for new session
|
|
1494
1494
|
|
|
1495
1495
|
const bufferId = await VirtualBufferFactory.create({
|
|
1496
|
-
name: "*Review Diff*", mode: "review-mode",
|
|
1496
|
+
name: "*Review Diff*", mode: "review-mode", readOnly: true,
|
|
1497
1497
|
entries: (await renderReviewStream()).entries, showLineNumbers: false
|
|
1498
1498
|
});
|
|
1499
1499
|
state.reviewBufferId = bufferId;
|
|
@@ -1666,21 +1666,21 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1666
1666
|
const oldBufferId = await editor.createVirtualBuffer({
|
|
1667
1667
|
name: `*OLD:${filePath}*`,
|
|
1668
1668
|
mode: "normal",
|
|
1669
|
-
|
|
1669
|
+
readOnly: true,
|
|
1670
1670
|
entries: oldEntries,
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1671
|
+
showLineNumbers: true,
|
|
1672
|
+
editingDisabled: true,
|
|
1673
|
+
hiddenFromTabs: true
|
|
1674
1674
|
});
|
|
1675
1675
|
|
|
1676
1676
|
const newBufferId = await editor.createVirtualBuffer({
|
|
1677
1677
|
name: `*NEW:${filePath}*`,
|
|
1678
1678
|
mode: "normal",
|
|
1679
|
-
|
|
1679
|
+
readOnly: true,
|
|
1680
1680
|
entries: newEntries,
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1681
|
+
showLineNumbers: true,
|
|
1682
|
+
editingDisabled: true,
|
|
1683
|
+
hiddenFromTabs: true
|
|
1684
1684
|
});
|
|
1685
1685
|
|
|
1686
1686
|
// Convert hunks to composite buffer format
|
package/plugins/calculator.ts
CHANGED
|
@@ -765,6 +765,6 @@ editor.on("mouse_click", "onCalculatorMouseClick");
|
|
|
765
765
|
editor.on("mouse_move", "onCalculatorMouseMove");
|
|
766
766
|
|
|
767
767
|
// Register main command
|
|
768
|
-
editor.registerCommand("%cmd.calculator", "%cmd.calculator_desc", "calculator_open",
|
|
768
|
+
editor.registerCommand("%cmd.calculator", "%cmd.calculator_desc", "calculator_open", null);
|
|
769
769
|
|
|
770
770
|
editor.setStatus(editor.t("status.loaded"));
|
package/plugins/git_blame.ts
CHANGED
|
@@ -481,12 +481,12 @@ globalThis.show_git_blame = async function(): Promise<void> {
|
|
|
481
481
|
const bufferId = await editor.createVirtualBufferInExistingSplit({
|
|
482
482
|
name: bufferName,
|
|
483
483
|
mode: "git-blame",
|
|
484
|
-
|
|
484
|
+
readOnly: true,
|
|
485
485
|
entries: entries,
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
486
|
+
splitId: blameState.splitId!,
|
|
487
|
+
showLineNumbers: true, // We DO want line numbers (headers won't have them due to source_offset: null)
|
|
488
|
+
showCursors: true,
|
|
489
|
+
editingDisabled: true,
|
|
490
490
|
});
|
|
491
491
|
|
|
492
492
|
if (bufferId !== null) {
|
package/plugins/git_find_file.ts
CHANGED
|
@@ -27,7 +27,11 @@ async function loadGitFiles(): Promise<string[]> {
|
|
|
27
27
|
const result = await editor.spawnProcess("git", ["ls-files"]);
|
|
28
28
|
|
|
29
29
|
if (result.exit_code === 0) {
|
|
30
|
-
|
|
30
|
+
// Split by newline and trim each line to handle \r\n on Windows
|
|
31
|
+
return result.stdout
|
|
32
|
+
.split("\n")
|
|
33
|
+
.map((line) => line.trim())
|
|
34
|
+
.filter((line) => line !== "");
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
editor.debug(`Failed to load git files: ${result.stderr}`);
|
|
@@ -58,14 +62,14 @@ editor.registerCommand(
|
|
|
58
62
|
"%cmd.find",
|
|
59
63
|
"%cmd.find_desc",
|
|
60
64
|
"start_git_find_file",
|
|
61
|
-
|
|
65
|
+
null
|
|
62
66
|
);
|
|
63
67
|
|
|
64
68
|
editor.registerCommand(
|
|
65
69
|
"%cmd.reload",
|
|
66
70
|
"%cmd.reload_desc",
|
|
67
71
|
"git_reload_files",
|
|
68
|
-
|
|
72
|
+
null
|
|
69
73
|
);
|
|
70
74
|
|
|
71
75
|
editor.debug("Git Find File plugin loaded (using Finder abstraction)");
|
package/plugins/git_grep.ts
CHANGED
|
@@ -67,7 +67,7 @@ globalThis.start_git_grep = function (): void {
|
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
// Register command
|
|
70
|
-
editor.registerCommand("%cmd.grep", "%cmd.grep_desc", "start_git_grep",
|
|
70
|
+
editor.registerCommand("%cmd.grep", "%cmd.grep_desc", "start_git_grep", null);
|
|
71
71
|
|
|
72
72
|
// Log that plugin loaded successfully
|
|
73
73
|
editor.debug("Git Grep plugin loaded (using Finder abstraction)");
|
package/plugins/git_log.ts
CHANGED
|
@@ -766,12 +766,12 @@ globalThis.show_git_log = async function(): Promise<void> {
|
|
|
766
766
|
const bufferId = await editor.createVirtualBufferInExistingSplit({
|
|
767
767
|
name: "*Git Log*",
|
|
768
768
|
mode: "git-log",
|
|
769
|
-
|
|
769
|
+
readOnly: true,
|
|
770
770
|
entries: entries,
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
771
|
+
splitId: gitLogState.splitId!,
|
|
772
|
+
showLineNumbers: false,
|
|
773
|
+
showCursors: true,
|
|
774
|
+
editingDisabled: true,
|
|
775
775
|
});
|
|
776
776
|
|
|
777
777
|
if (bufferId !== null) {
|
|
@@ -900,12 +900,12 @@ globalThis.git_log_show_commit = async function(): Promise<void> {
|
|
|
900
900
|
const bufferId = await editor.createVirtualBufferInExistingSplit({
|
|
901
901
|
name: `*Commit: ${commit.shortHash}*`,
|
|
902
902
|
mode: "git-commit-detail",
|
|
903
|
-
|
|
903
|
+
readOnly: true,
|
|
904
904
|
entries: entries,
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
905
|
+
splitId: gitLogState.splitId!,
|
|
906
|
+
showLineNumbers: false, // Disable line numbers for cleaner diff view
|
|
907
|
+
showCursors: true,
|
|
908
|
+
editingDisabled: true,
|
|
909
909
|
});
|
|
910
910
|
|
|
911
911
|
if (bufferId !== null) {
|
|
@@ -1213,12 +1213,12 @@ globalThis.git_commit_detail_open_file = async function(): Promise<void> {
|
|
|
1213
1213
|
const bufferId = await editor.createVirtualBufferInExistingSplit({
|
|
1214
1214
|
name: `${file} @ ${commit.shortHash}`,
|
|
1215
1215
|
mode: "git-file-view",
|
|
1216
|
-
|
|
1216
|
+
readOnly: true,
|
|
1217
1217
|
entries: entries,
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1218
|
+
splitId: commitDetailState.splitId!,
|
|
1219
|
+
showLineNumbers: true,
|
|
1220
|
+
showCursors: true,
|
|
1221
|
+
editingDisabled: true,
|
|
1222
1222
|
});
|
|
1223
1223
|
|
|
1224
1224
|
if (bufferId !== null) {
|
package/plugins/lib/finder.ts
CHANGED
|
@@ -465,7 +465,9 @@ export class Finder<T> {
|
|
|
465
465
|
options.initialQuery
|
|
466
466
|
);
|
|
467
467
|
} else {
|
|
468
|
-
this.editor.startPrompt
|
|
468
|
+
this.editor.debug(`[Finder] calling startPrompt with title="${options.title}", id="${this.config.id}"`);
|
|
469
|
+
const result = this.editor.startPrompt(options.title, this.config.id);
|
|
470
|
+
this.editor.debug(`[Finder] startPrompt returned: ${result}`);
|
|
469
471
|
}
|
|
470
472
|
this.editor.setStatus("Type to search...");
|
|
471
473
|
}
|
|
@@ -951,11 +953,11 @@ export class Finder<T> {
|
|
|
951
953
|
}
|
|
952
954
|
|
|
953
955
|
private closePreview(): void {
|
|
954
|
-
if (this.previewState.bufferId
|
|
956
|
+
if (this.previewState.bufferId || this.previewState.bufferId == 0) {
|
|
955
957
|
this.editor.closeBuffer(this.previewState.bufferId);
|
|
956
958
|
this.previewState.bufferId = null;
|
|
957
959
|
}
|
|
958
|
-
if (this.previewState.splitId
|
|
960
|
+
if (this.previewState.splitId || this.previewState.splitId == 0) {
|
|
959
961
|
this.editor.closeSplit(this.previewState.splitId);
|
|
960
962
|
this.previewState.splitId = null;
|
|
961
963
|
}
|