@fresh-editor/fresh-editor 0.1.86 → 0.1.88
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 +47 -0
- package/README.md +4 -0
- package/package.json +1 -1
- package/plugins/README.md +1 -0
- package/plugins/audit_mode.ts +38 -34
- package/plugins/calculator.i18n.json +13 -13
- package/plugins/calculator.ts +6 -6
- package/plugins/clangd_support.i18n.json +26 -26
- package/plugins/config-schema.json +180 -116
- package/plugins/csharp_support.i18n.json +52 -52
- package/plugins/csharp_support.ts +214 -41
- package/plugins/examples/virtual_buffer_demo.ts +4 -4
- package/plugins/find_references.i18n.json +91 -91
- package/plugins/git_blame.ts +3 -3
- package/plugins/git_explorer.ts +3 -2
- package/plugins/git_log.i18n.json +182 -182
- package/plugins/git_log.ts +10 -10
- package/plugins/java-lsp.ts +65 -0
- package/plugins/latex-lsp.ts +65 -0
- package/plugins/lib/finder.ts +32 -32
- package/plugins/lib/fresh.d.ts +432 -17
- package/plugins/lib/panel-manager.ts +7 -7
- package/plugins/lib/search-utils.ts +13 -13
- package/plugins/lib/virtual-buffer-factory.ts +16 -14
- package/plugins/live_grep.i18n.json +39 -39
- package/plugins/markdown_compose.i18n.json +13 -13
- package/plugins/markdown_compose.ts +4 -4
- package/plugins/marksman-lsp.ts +65 -0
- package/plugins/merge_conflict.i18n.json +143 -143
- package/plugins/merge_conflict.ts +21 -21
- package/plugins/search_replace.i18n.json +143 -143
- package/plugins/search_replace.ts +6 -6
- package/plugins/templ-lsp.ts +65 -0
- package/plugins/theme_editor.i18n.json +3797 -3745
- package/plugins/theme_editor.ts +6 -5
- package/plugins/vi_mode.ts +2 -2
- package/plugins/zig-lsp.ts +65 -0
- package/themes/dracula.json +26 -5
- package/plugins/csharp-lsp.ts +0 -147
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## 0.1.88
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **Status Bar Language Indicator**: Click the language name in the status bar to change syntax highlighting. Supports mouse wheel scrolling and type-to-filter.
|
|
8
|
+
* **VS Code-like Completion UX**: Debounced completion triggers, Tab accepts completion, uppercase letters work in type-to-filter.
|
|
9
|
+
* **Per-Language LSP Root URI**: LSP servers can now have per-language root URI detection. Includes automatic C# project root detection via `.csproj` files.
|
|
10
|
+
* **Settings UI Improvements**: Settings organized by topic sections, improved focus colors, search navigates to setting, better Map control navigation.
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **Tab Bar Mouse Events**: Fixed clicks on tabs not working when menu bar is hidden (#832).
|
|
15
|
+
* **LSP Deadlock**: Fixed deadlock when LSP server sends requests while client is awaiting a response.
|
|
16
|
+
* **LSP Root URI**: Include `root_uri` in LSP initialize params for server compatibility.
|
|
17
|
+
* **Terminal Scrollback**: Fixed race condition truncating terminal backing file when PTY already wrote content.
|
|
18
|
+
* **Plugin i18n**: Fixed placeholder format to use `%{variable}` syntax.
|
|
19
|
+
* **Settings UI**: Fixed confirm dialog mouse clicks/Tab navigation, dropdown option selection, search result navigation, and content bleeding into footer.
|
|
20
|
+
|
|
21
|
+
### Packaging
|
|
22
|
+
|
|
23
|
+
* **Winget**: Added Windows Package Manager (winget) publishing to release pipeline.
|
|
24
|
+
|
|
25
|
+
### Internal
|
|
26
|
+
|
|
27
|
+
* **FileSystem Trait**: New IO abstraction layer enabling different backends (local, remote, WASM). All filesystem operations now use injectable `FileSystem` trait.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 0.1.87
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* **Language Support**: Added LSP configurations and syntax highlighting for Zig, Java, LaTeX, Markdown, and Templ.
|
|
36
|
+
* **Git File Highlighting**: Syntax highlighting for git-related files (.gitignore, .gitattributes, .gitmodules).
|
|
37
|
+
* **Plugin Type Safety**: TypeScript type definitions for plugin API with compile-time validation.
|
|
38
|
+
|
|
39
|
+
### Bug Fixes
|
|
40
|
+
|
|
41
|
+
* **Hover Popup**: Fixed scrolling to bottom, dismiss on click outside, block clicks inside popup.
|
|
42
|
+
* **Settings UI**: Fixed overwriting manual config.json edits when saving from Settings UI (#806).
|
|
43
|
+
* **Windows Terminal**: Fixed truecolor detection and 256-color grayscale conversion overflow.
|
|
44
|
+
* **Composite Buffers**: Fixed mouse click sync, deserialization errors, and cursor positioning.
|
|
45
|
+
* **Plugin Stability**: Plugin thread panics now propagate to main thread for proper error handling.
|
|
46
|
+
* **Review Diff Plugin**: Fixed side-by-side diff commands not appearing in command palette.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
3
50
|
## 0.1.86
|
|
4
51
|
|
|
5
52
|
### Features
|
package/README.md
CHANGED
|
@@ -241,6 +241,10 @@ Thanks for contributing!
|
|
|
241
241
|
|
|
242
242
|
7. **LSP**: Ensure LSP interactions follow the correct lifecycle (e.g., `didOpen` must always precede other requests to avoid server-side errors). Use the appropriate existing helpers for this pattern.
|
|
243
243
|
|
|
244
|
+
8. **Regenerate plugin types**: After modifying the plugin API, run `cargo test -p fresh-plugin-runtime write_fresh_dts_file -- --ignored`
|
|
245
|
+
|
|
246
|
+
9. **Type check plugins**: Run `crates/fresh-editor/plugins/check-types.sh` (requires `tsc`)
|
|
247
|
+
|
|
244
248
|
**Tip**: You can use tmux + send-keys + render-pane to script ad-hoc tests on the UI, for example when trying to reproduce an issue.
|
|
245
249
|
|
|
246
250
|
## Privacy
|
package/package.json
CHANGED
package/plugins/README.md
CHANGED
package/plugins/audit_mode.ts
CHANGED
|
@@ -551,7 +551,7 @@ async function renderReviewStream(): Promise<{ entries: TextPropertyEntry[], hig
|
|
|
551
551
|
* Updates the buffer UI (text and highlights) based on current state.hunks
|
|
552
552
|
*/
|
|
553
553
|
async function updateReviewUI() {
|
|
554
|
-
if (state.reviewBufferId
|
|
554
|
+
if (state.reviewBufferId != null) {
|
|
555
555
|
const { entries, highlights } = await renderReviewStream();
|
|
556
556
|
editor.setVirtualBufferContent(state.reviewBufferId, entries);
|
|
557
557
|
|
|
@@ -677,12 +677,12 @@ globalThis.on_viewport_changed = (data: any) => {
|
|
|
677
677
|
|
|
678
678
|
const { oldSplitId, newSplitId, oldLineByteOffsets, newLineByteOffsets } = activeSideBySideState;
|
|
679
679
|
|
|
680
|
-
if (data.
|
|
680
|
+
if (data.splitId === oldSplitId && newLineByteOffsets.length > 0) {
|
|
681
681
|
// OLD pane scrolled - find which line it's on and sync NEW pane to same line
|
|
682
682
|
const lineNum = findLineForByte(oldLineByteOffsets, data.top_byte);
|
|
683
683
|
const targetByte = newLineByteOffsets[Math.min(lineNum, newLineByteOffsets.length - 1)];
|
|
684
684
|
(editor as any).setSplitScroll(newSplitId, targetByte);
|
|
685
|
-
} else if (data.
|
|
685
|
+
} else if (data.splitId === newSplitId && oldLineByteOffsets.length > 0) {
|
|
686
686
|
// NEW pane scrolled - find which line it's on and sync OLD pane to same line
|
|
687
687
|
const lineNum = findLineForByte(newLineByteOffsets, data.top_byte);
|
|
688
688
|
const targetByte = oldLineByteOffsets[Math.min(lineNum, oldLineByteOffsets.length - 1)];
|
|
@@ -1100,7 +1100,7 @@ globalThis.review_drill_down = async () => {
|
|
|
1100
1100
|
}));
|
|
1101
1101
|
|
|
1102
1102
|
// Create source buffers (hidden from tabs, used by composite)
|
|
1103
|
-
const
|
|
1103
|
+
const oldResult = await editor.createVirtualBuffer({
|
|
1104
1104
|
name: `*OLD:${h.file}*`,
|
|
1105
1105
|
mode: "normal",
|
|
1106
1106
|
readOnly: true,
|
|
@@ -1109,8 +1109,9 @@ globalThis.review_drill_down = async () => {
|
|
|
1109
1109
|
editingDisabled: true,
|
|
1110
1110
|
hiddenFromTabs: true
|
|
1111
1111
|
});
|
|
1112
|
+
const oldBufferId = oldResult.bufferId;
|
|
1112
1113
|
|
|
1113
|
-
const
|
|
1114
|
+
const newResult = await editor.createVirtualBuffer({
|
|
1114
1115
|
name: `*NEW:${h.file}*`,
|
|
1115
1116
|
mode: "normal",
|
|
1116
1117
|
readOnly: true,
|
|
@@ -1119,6 +1120,7 @@ globalThis.review_drill_down = async () => {
|
|
|
1119
1120
|
editingDisabled: true,
|
|
1120
1121
|
hiddenFromTabs: true
|
|
1121
1122
|
});
|
|
1123
|
+
const newBufferId = newResult.bufferId;
|
|
1122
1124
|
|
|
1123
1125
|
// Convert hunks to composite buffer format (parse counts from git diff)
|
|
1124
1126
|
const compositeHunks: TsCompositeHunk[] = fileHunks.map(fh => {
|
|
@@ -1130,10 +1132,10 @@ globalThis.review_drill_down = async () => {
|
|
|
1130
1132
|
else if (line.startsWith(' ')) { oldCount++; newCount++; }
|
|
1131
1133
|
}
|
|
1132
1134
|
return {
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1135
|
+
oldStart: fh.oldRange.start - 1, // Convert to 0-indexed
|
|
1136
|
+
oldCount: oldCount || 1,
|
|
1137
|
+
newStart: fh.range.start - 1, // Convert to 0-indexed
|
|
1138
|
+
newCount: newCount || 1
|
|
1137
1139
|
};
|
|
1138
1140
|
});
|
|
1139
1141
|
|
|
@@ -1142,27 +1144,27 @@ globalThis.review_drill_down = async () => {
|
|
|
1142
1144
|
name: `*Diff: ${h.file}*`,
|
|
1143
1145
|
mode: "diff-view",
|
|
1144
1146
|
layout: {
|
|
1145
|
-
|
|
1147
|
+
type: "side-by-side",
|
|
1146
1148
|
ratios: [0.5, 0.5],
|
|
1147
|
-
|
|
1149
|
+
showSeparator: true
|
|
1148
1150
|
},
|
|
1149
1151
|
sources: [
|
|
1150
1152
|
{
|
|
1151
|
-
|
|
1153
|
+
bufferId: oldBufferId,
|
|
1152
1154
|
label: "OLD (HEAD)",
|
|
1153
1155
|
editable: false,
|
|
1154
1156
|
style: {
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
+
removeBg: [80, 40, 40],
|
|
1158
|
+
gutterStyle: "diff-markers"
|
|
1157
1159
|
}
|
|
1158
1160
|
},
|
|
1159
1161
|
{
|
|
1160
|
-
|
|
1162
|
+
bufferId: newBufferId,
|
|
1161
1163
|
label: "NEW (Working)",
|
|
1162
1164
|
editable: false,
|
|
1163
1165
|
style: {
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
+
addBg: [40, 80, 40],
|
|
1167
|
+
gutterStyle: "diff-markers"
|
|
1166
1168
|
}
|
|
1167
1169
|
}
|
|
1168
1170
|
],
|
|
@@ -1518,7 +1520,7 @@ globalThis.on_review_buffer_activated = (data: any) => {
|
|
|
1518
1520
|
};
|
|
1519
1521
|
|
|
1520
1522
|
globalThis.on_review_buffer_closed = (data: any) => {
|
|
1521
|
-
if (data.buffer_id === state.reviewBufferId) stop_review_diff();
|
|
1523
|
+
if (data.buffer_id === state.reviewBufferId) globalThis.stop_review_diff();
|
|
1522
1524
|
};
|
|
1523
1525
|
|
|
1524
1526
|
// Side-by-side diff for current file using composite buffers
|
|
@@ -1663,7 +1665,7 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1663
1665
|
}));
|
|
1664
1666
|
|
|
1665
1667
|
// Create source buffers (hidden from tabs, used by composite)
|
|
1666
|
-
const
|
|
1668
|
+
const oldResult = await editor.createVirtualBuffer({
|
|
1667
1669
|
name: `*OLD:${filePath}*`,
|
|
1668
1670
|
mode: "normal",
|
|
1669
1671
|
readOnly: true,
|
|
@@ -1672,8 +1674,9 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1672
1674
|
editingDisabled: true,
|
|
1673
1675
|
hiddenFromTabs: true
|
|
1674
1676
|
});
|
|
1677
|
+
const oldBufferId = oldResult.bufferId;
|
|
1675
1678
|
|
|
1676
|
-
const
|
|
1679
|
+
const newResult = await editor.createVirtualBuffer({
|
|
1677
1680
|
name: `*NEW:${filePath}*`,
|
|
1678
1681
|
mode: "normal",
|
|
1679
1682
|
readOnly: true,
|
|
@@ -1682,13 +1685,14 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1682
1685
|
editingDisabled: true,
|
|
1683
1686
|
hiddenFromTabs: true
|
|
1684
1687
|
});
|
|
1688
|
+
const newBufferId = newResult.bufferId;
|
|
1685
1689
|
|
|
1686
1690
|
// Convert hunks to composite buffer format
|
|
1687
1691
|
const compositeHunks: TsCompositeHunk[] = fileHunks.map(h => ({
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
+
oldStart: h.oldRange.start - 1, // Convert to 0-indexed
|
|
1693
|
+
oldCount: h.oldRange.end - h.oldRange.start + 1,
|
|
1694
|
+
newStart: h.range.start - 1, // Convert to 0-indexed
|
|
1695
|
+
newCount: h.range.end - h.range.start + 1
|
|
1692
1696
|
}));
|
|
1693
1697
|
|
|
1694
1698
|
// Create composite buffer with side-by-side layout
|
|
@@ -1696,27 +1700,27 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1696
1700
|
name: `*Diff: ${filePath}*`,
|
|
1697
1701
|
mode: "diff-view",
|
|
1698
1702
|
layout: {
|
|
1699
|
-
|
|
1703
|
+
type: "side-by-side",
|
|
1700
1704
|
ratios: [0.5, 0.5],
|
|
1701
|
-
|
|
1705
|
+
showSeparator: true
|
|
1702
1706
|
},
|
|
1703
1707
|
sources: [
|
|
1704
1708
|
{
|
|
1705
|
-
|
|
1709
|
+
bufferId: oldBufferId,
|
|
1706
1710
|
label: "OLD (HEAD)",
|
|
1707
1711
|
editable: false,
|
|
1708
1712
|
style: {
|
|
1709
|
-
|
|
1710
|
-
|
|
1713
|
+
removeBg: [80, 40, 40],
|
|
1714
|
+
gutterStyle: "diff-markers"
|
|
1711
1715
|
}
|
|
1712
1716
|
},
|
|
1713
1717
|
{
|
|
1714
|
-
|
|
1718
|
+
bufferId: newBufferId,
|
|
1715
1719
|
label: "NEW (Working)",
|
|
1716
1720
|
editable: false,
|
|
1717
1721
|
style: {
|
|
1718
|
-
|
|
1719
|
-
|
|
1722
|
+
addBg: [40, 80, 40],
|
|
1723
|
+
gutterStyle: "diff-markers"
|
|
1720
1724
|
}
|
|
1721
1725
|
}
|
|
1722
1726
|
],
|
|
@@ -1746,10 +1750,10 @@ globalThis.side_by_side_diff_current_file = async () => {
|
|
|
1746
1750
|
};
|
|
1747
1751
|
|
|
1748
1752
|
// Register Modes and Commands
|
|
1749
|
-
editor.registerCommand("%cmd.review_diff", "%cmd.review_diff_desc", "start_review_diff",
|
|
1753
|
+
editor.registerCommand("%cmd.review_diff", "%cmd.review_diff_desc", "start_review_diff", null);
|
|
1750
1754
|
editor.registerCommand("%cmd.stop_review_diff", "%cmd.stop_review_diff_desc", "stop_review_diff", "review-mode");
|
|
1751
1755
|
editor.registerCommand("%cmd.refresh_review_diff", "%cmd.refresh_review_diff_desc", "review_refresh", "review-mode");
|
|
1752
|
-
editor.registerCommand("%cmd.side_by_side_diff", "%cmd.side_by_side_diff_desc", "side_by_side_diff_current_file",
|
|
1756
|
+
editor.registerCommand("%cmd.side_by_side_diff", "%cmd.side_by_side_diff_desc", "side_by_side_diff_current_file", null);
|
|
1753
1757
|
|
|
1754
1758
|
// Review Comment Commands
|
|
1755
1759
|
editor.registerCommand("%cmd.add_comment", "%cmd.add_comment_desc", "review_add_comment", "review-mode");
|
|
@@ -4,90 +4,90 @@
|
|
|
4
4
|
"cmd.calculator_desc": "Open calculator",
|
|
5
5
|
"status.loaded": "Calculator plugin loaded",
|
|
6
6
|
"status.opened": "Calculator opened",
|
|
7
|
-
"status.copied": "Copied: {value}"
|
|
7
|
+
"status.copied": "Copied: %{value}"
|
|
8
8
|
},
|
|
9
9
|
"cs": {
|
|
10
10
|
"cmd.calculator": "Kalkulacka",
|
|
11
11
|
"cmd.calculator_desc": "Otevrit kalkulacku",
|
|
12
12
|
"status.loaded": "Plugin kalkulacky nacten",
|
|
13
13
|
"status.opened": "Kalkulacka otevrena",
|
|
14
|
-
"status.copied": "Zkopirovano: {value}"
|
|
14
|
+
"status.copied": "Zkopirovano: %{value}"
|
|
15
15
|
},
|
|
16
16
|
"de": {
|
|
17
17
|
"cmd.calculator": "Taschenrechner",
|
|
18
18
|
"cmd.calculator_desc": "Taschenrechner offnen",
|
|
19
19
|
"status.loaded": "Taschenrechner-Plugin geladen",
|
|
20
20
|
"status.opened": "Taschenrechner geoffnet",
|
|
21
|
-
"status.copied": "Kopiert: {value}"
|
|
21
|
+
"status.copied": "Kopiert: %{value}"
|
|
22
22
|
},
|
|
23
23
|
"es": {
|
|
24
24
|
"cmd.calculator": "Calculadora",
|
|
25
25
|
"cmd.calculator_desc": "Abrir calculadora",
|
|
26
26
|
"status.loaded": "Plugin de calculadora cargado",
|
|
27
27
|
"status.opened": "Calculadora abierta",
|
|
28
|
-
"status.copied": "Copiado: {value}"
|
|
28
|
+
"status.copied": "Copiado: %{value}"
|
|
29
29
|
},
|
|
30
30
|
"fr": {
|
|
31
31
|
"cmd.calculator": "Calculatrice",
|
|
32
32
|
"cmd.calculator_desc": "Ouvrir la calculatrice",
|
|
33
33
|
"status.loaded": "Plugin calculatrice charge",
|
|
34
34
|
"status.opened": "Calculatrice ouverte",
|
|
35
|
-
"status.copied": "Copie: {value}"
|
|
35
|
+
"status.copied": "Copie: %{value}"
|
|
36
36
|
},
|
|
37
37
|
"it": {
|
|
38
38
|
"cmd.calculator": "Calcolatrice",
|
|
39
39
|
"cmd.calculator_desc": "Apri calcolatrice",
|
|
40
40
|
"status.loaded": "Plugin calcolatrice caricato",
|
|
41
41
|
"status.opened": "Calcolatrice aperta",
|
|
42
|
-
"status.copied": "Copiato: {value}"
|
|
42
|
+
"status.copied": "Copiato: %{value}"
|
|
43
43
|
},
|
|
44
44
|
"ja": {
|
|
45
45
|
"cmd.calculator": "電卓",
|
|
46
46
|
"cmd.calculator_desc": "電卓を開く",
|
|
47
47
|
"status.loaded": "電卓プラグインが読み込まれました",
|
|
48
48
|
"status.opened": "電卓を開きました",
|
|
49
|
-
"status.copied": "コピーしました: {value}"
|
|
49
|
+
"status.copied": "コピーしました: %{value}"
|
|
50
50
|
},
|
|
51
51
|
"ko": {
|
|
52
52
|
"cmd.calculator": "계산기",
|
|
53
53
|
"cmd.calculator_desc": "계산기 열기",
|
|
54
54
|
"status.loaded": "계산기 플러그인이 로드되었습니다",
|
|
55
55
|
"status.opened": "계산기가 열렸습니다",
|
|
56
|
-
"status.copied": "복사됨: {value}"
|
|
56
|
+
"status.copied": "복사됨: %{value}"
|
|
57
57
|
},
|
|
58
58
|
"pt-BR": {
|
|
59
59
|
"cmd.calculator": "Calculadora",
|
|
60
60
|
"cmd.calculator_desc": "Abrir calculadora",
|
|
61
61
|
"status.loaded": "Plugin de calculadora carregado",
|
|
62
62
|
"status.opened": "Calculadora aberta",
|
|
63
|
-
"status.copied": "Copiado: {value}"
|
|
63
|
+
"status.copied": "Copiado: %{value}"
|
|
64
64
|
},
|
|
65
65
|
"ru": {
|
|
66
66
|
"cmd.calculator": "Калькулятор",
|
|
67
67
|
"cmd.calculator_desc": "Открыть калькулятор",
|
|
68
68
|
"status.loaded": "Плагин калькулятора загружен",
|
|
69
69
|
"status.opened": "Калькулятор открыт",
|
|
70
|
-
"status.copied": "Скопировано: {value}"
|
|
70
|
+
"status.copied": "Скопировано: %{value}"
|
|
71
71
|
},
|
|
72
72
|
"th": {
|
|
73
73
|
"cmd.calculator": "เครื่องคิดเลข",
|
|
74
74
|
"cmd.calculator_desc": "เปิดเครื่องคิดเลข",
|
|
75
75
|
"status.loaded": "โหลดปลั๊กอินเครื่องคิดเลขแล้ว",
|
|
76
76
|
"status.opened": "เปิดเครื่องคิดเลขแล้ว",
|
|
77
|
-
"status.copied": "คัดลอกแล้ว: {value}"
|
|
77
|
+
"status.copied": "คัดลอกแล้ว: %{value}"
|
|
78
78
|
},
|
|
79
79
|
"uk": {
|
|
80
80
|
"cmd.calculator": "Калькулятор",
|
|
81
81
|
"cmd.calculator_desc": "Відкрити калькулятор",
|
|
82
82
|
"status.loaded": "Плагін калькулятора завантажено",
|
|
83
83
|
"status.opened": "Калькулятор відкрито",
|
|
84
|
-
"status.copied": "Скопійовано: {value}"
|
|
84
|
+
"status.copied": "Скопійовано: %{value}"
|
|
85
85
|
},
|
|
86
86
|
"zh-CN": {
|
|
87
87
|
"cmd.calculator": "计算器",
|
|
88
88
|
"cmd.calculator_desc": "打开计算器",
|
|
89
89
|
"status.loaded": "计算器插件已加载",
|
|
90
90
|
"status.opened": "计算器已打开",
|
|
91
|
-
"status.copied": "已复制: {value}"
|
|
91
|
+
"status.copied": "已复制: %{value}"
|
|
92
92
|
}
|
|
93
93
|
}
|
package/plugins/calculator.ts
CHANGED
|
@@ -711,16 +711,16 @@ globalThis.calculator_open = async function (): Promise<void> {
|
|
|
711
711
|
|
|
712
712
|
const entries = renderCalculator();
|
|
713
713
|
|
|
714
|
-
|
|
714
|
+
const result = await editor.createVirtualBuffer({
|
|
715
715
|
name: "*Calculator*",
|
|
716
716
|
mode: "calculator",
|
|
717
|
-
|
|
717
|
+
readOnly: true,
|
|
718
718
|
entries,
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
719
|
+
showLineNumbers: false,
|
|
720
|
+
showCursors: false,
|
|
721
|
+
editingDisabled: true,
|
|
722
722
|
});
|
|
723
|
-
|
|
723
|
+
state.bufferId = result.bufferId;
|
|
724
724
|
state.splitId = editor.getActiveSplitId();
|
|
725
725
|
|
|
726
726
|
editor.setStatus(editor.t("status.opened"));
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"status.unsupported_file_type": "Clangd: unsupported file type for switch header",
|
|
12
12
|
"status.opened_corresponding_file": "Clangd: opened corresponding file",
|
|
13
13
|
"status.no_matching_found": "Clangd: no matching header/source found",
|
|
14
|
-
"status.switch_failed": "Clangd switch source/header failed: {error}",
|
|
14
|
+
"status.switch_failed": "Clangd switch source/header failed: %{error}",
|
|
15
15
|
"status.opened_config": "Opened .clangd configuration",
|
|
16
16
|
"status.config_not_found": "Could not find .clangd configuration in workspace",
|
|
17
|
-
"status.file_status": "Clangd file status: {status}"
|
|
17
|
+
"status.file_status": "Clangd file status: %{status}"
|
|
18
18
|
},
|
|
19
19
|
"cs": {
|
|
20
20
|
"cmd.project_setup": "Clangd: Nastaveni projektu",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"status.unsupported_file_type": "Clangd: nepodporovany typ souboru pro prepnuti hlavicky",
|
|
29
29
|
"status.opened_corresponding_file": "Clangd: odpovidajici soubor otevren",
|
|
30
30
|
"status.no_matching_found": "Clangd: nenalezena odpovidajici hlavicka/zdroj",
|
|
31
|
-
"status.switch_failed": "Clangd prepnuti zdroj/hlavicka selhalo: {error}",
|
|
31
|
+
"status.switch_failed": "Clangd prepnuti zdroj/hlavicka selhalo: %{error}",
|
|
32
32
|
"status.opened_config": "Konfigurace .clangd otevrena",
|
|
33
33
|
"status.config_not_found": "Nelze najit konfiguraci .clangd v pracovnim prostoru",
|
|
34
|
-
"status.file_status": "Clangd stav souboru: {status}"
|
|
34
|
+
"status.file_status": "Clangd stav souboru: %{status}"
|
|
35
35
|
},
|
|
36
36
|
"de": {
|
|
37
37
|
"cmd.project_setup": "Clangd: Projekteinrichtung",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"status.unsupported_file_type": "Clangd: nicht unterstutzter Dateityp fur Header-Wechsel",
|
|
46
46
|
"status.opened_corresponding_file": "Clangd: entsprechende Datei geoffnet",
|
|
47
47
|
"status.no_matching_found": "Clangd: kein passendes Header/Quelle gefunden",
|
|
48
|
-
"status.switch_failed": "Clangd Quelle/Header-Wechsel fehlgeschlagen: {error}",
|
|
48
|
+
"status.switch_failed": "Clangd Quelle/Header-Wechsel fehlgeschlagen: %{error}",
|
|
49
49
|
"status.opened_config": ".clangd-Konfiguration geoffnet",
|
|
50
50
|
"status.config_not_found": "Konnte .clangd-Konfiguration im Arbeitsbereich nicht finden",
|
|
51
|
-
"status.file_status": "Clangd Dateistatus: {status}"
|
|
51
|
+
"status.file_status": "Clangd Dateistatus: %{status}"
|
|
52
52
|
},
|
|
53
53
|
"es": {
|
|
54
54
|
"cmd.project_setup": "Clangd: Configuracion del Proyecto",
|
|
@@ -62,10 +62,10 @@
|
|
|
62
62
|
"status.unsupported_file_type": "Clangd: tipo de archivo no soportado para alternar cabecera",
|
|
63
63
|
"status.opened_corresponding_file": "Clangd: archivo correspondiente abierto",
|
|
64
64
|
"status.no_matching_found": "Clangd: no se encontro cabecera/fuente coincidente",
|
|
65
|
-
"status.switch_failed": "Clangd alternar fuente/cabecera fallo: {error}",
|
|
65
|
+
"status.switch_failed": "Clangd alternar fuente/cabecera fallo: %{error}",
|
|
66
66
|
"status.opened_config": "Configuracion .clangd abierta",
|
|
67
67
|
"status.config_not_found": "No se pudo encontrar configuracion .clangd en el espacio de trabajo",
|
|
68
|
-
"status.file_status": "Estado del archivo Clangd: {status}"
|
|
68
|
+
"status.file_status": "Estado del archivo Clangd: %{status}"
|
|
69
69
|
},
|
|
70
70
|
"fr": {
|
|
71
71
|
"cmd.project_setup": "Clangd: Configuration du Projet",
|
|
@@ -79,10 +79,10 @@
|
|
|
79
79
|
"status.unsupported_file_type": "Clangd: type de fichier non supporte pour la bascule d'en-tete",
|
|
80
80
|
"status.opened_corresponding_file": "Clangd: fichier correspondant ouvert",
|
|
81
81
|
"status.no_matching_found": "Clangd: aucun en-tete/source correspondant trouve",
|
|
82
|
-
"status.switch_failed": "Clangd bascule source/en-tete echouee: {error}",
|
|
82
|
+
"status.switch_failed": "Clangd bascule source/en-tete echouee: %{error}",
|
|
83
83
|
"status.opened_config": "Configuration .clangd ouverte",
|
|
84
84
|
"status.config_not_found": "Impossible de trouver la configuration .clangd dans l'espace de travail",
|
|
85
|
-
"status.file_status": "Statut du fichier Clangd: {status}"
|
|
85
|
+
"status.file_status": "Statut du fichier Clangd: %{status}"
|
|
86
86
|
},
|
|
87
87
|
"it": {
|
|
88
88
|
"cmd.project_setup": "Clangd: Configurazione progetto",
|
|
@@ -96,10 +96,10 @@
|
|
|
96
96
|
"status.unsupported_file_type": "Clangd: tipo di file non supportato per il cambio header",
|
|
97
97
|
"status.opened_corresponding_file": "Clangd: aperto file corrispondente",
|
|
98
98
|
"status.no_matching_found": "Clangd: nessuna corrispondenza header/sorgente trovata",
|
|
99
|
-
"status.switch_failed": "Cambio sorgente/header Clangd fallito: {error}",
|
|
99
|
+
"status.switch_failed": "Cambio sorgente/header Clangd fallito: %{error}",
|
|
100
100
|
"status.opened_config": "Configurazione .clangd aperta",
|
|
101
101
|
"status.config_not_found": "Impossibile trovare la configurazione .clangd nell'area di lavoro",
|
|
102
|
-
"status.file_status": "Stato del file Clangd: {status}"
|
|
102
|
+
"status.file_status": "Stato del file Clangd: %{status}"
|
|
103
103
|
},
|
|
104
104
|
"ja": {
|
|
105
105
|
"cmd.project_setup": "Clangd: プロジェクト設定",
|
|
@@ -113,10 +113,10 @@
|
|
|
113
113
|
"status.unsupported_file_type": "Clangd: ヘッダー切り替えに対応していないファイル形式です",
|
|
114
114
|
"status.opened_corresponding_file": "Clangd: 対応するファイルを開きました",
|
|
115
115
|
"status.no_matching_found": "Clangd: 一致するヘッダー/ソースが見つかりません",
|
|
116
|
-
"status.switch_failed": "Clangdソース/ヘッダー切り替えに失敗しました: {error}",
|
|
116
|
+
"status.switch_failed": "Clangdソース/ヘッダー切り替えに失敗しました: %{error}",
|
|
117
117
|
"status.opened_config": ".clangd設定を開きました",
|
|
118
118
|
"status.config_not_found": "ワークスペース内に.clangd設定が見つかりません",
|
|
119
|
-
"status.file_status": "Clangdファイルステータス: {status}"
|
|
119
|
+
"status.file_status": "Clangdファイルステータス: %{status}"
|
|
120
120
|
},
|
|
121
121
|
"ko": {
|
|
122
122
|
"cmd.project_setup": "Clangd: 프로젝트 설정",
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
"status.unsupported_file_type": "Clangd: 헤더 전환에 지원되지 않는 파일 형식",
|
|
131
131
|
"status.opened_corresponding_file": "Clangd: 해당 파일을 열었습니다",
|
|
132
132
|
"status.no_matching_found": "Clangd: 일치하는 헤더/소스를 찾을 수 없습니다",
|
|
133
|
-
"status.switch_failed": "Clangd 소스/헤더 전환 실패: {error}",
|
|
133
|
+
"status.switch_failed": "Clangd 소스/헤더 전환 실패: %{error}",
|
|
134
134
|
"status.opened_config": ".clangd 설정을 열었습니다",
|
|
135
135
|
"status.config_not_found": "작업 공간에서 .clangd 설정을 찾을 수 없습니다",
|
|
136
|
-
"status.file_status": "Clangd 파일 상태: {status}"
|
|
136
|
+
"status.file_status": "Clangd 파일 상태: %{status}"
|
|
137
137
|
},
|
|
138
138
|
"pt-BR": {
|
|
139
139
|
"cmd.project_setup": "Clangd: Configuracao do Projeto",
|
|
@@ -147,10 +147,10 @@
|
|
|
147
147
|
"status.unsupported_file_type": "Clangd: tipo de arquivo nao suportado para alternar cabecalho",
|
|
148
148
|
"status.opened_corresponding_file": "Clangd: arquivo correspondente aberto",
|
|
149
149
|
"status.no_matching_found": "Clangd: nenhum cabecalho/fonte correspondente encontrado",
|
|
150
|
-
"status.switch_failed": "Clangd alternar fonte/cabecalho falhou: {error}",
|
|
150
|
+
"status.switch_failed": "Clangd alternar fonte/cabecalho falhou: %{error}",
|
|
151
151
|
"status.opened_config": "Configuracao .clangd aberta",
|
|
152
152
|
"status.config_not_found": "Nao foi possivel encontrar configuracao .clangd no espaco de trabalho",
|
|
153
|
-
"status.file_status": "Status do arquivo Clangd: {status}"
|
|
153
|
+
"status.file_status": "Status do arquivo Clangd: %{status}"
|
|
154
154
|
},
|
|
155
155
|
"ru": {
|
|
156
156
|
"cmd.project_setup": "Clangd: Настройка проекта",
|
|
@@ -164,10 +164,10 @@
|
|
|
164
164
|
"status.unsupported_file_type": "Clangd: неподдерживаемый тип файла для переключения заголовка",
|
|
165
165
|
"status.opened_corresponding_file": "Clangd: соответствующий файл открыт",
|
|
166
166
|
"status.no_matching_found": "Clangd: соответствующий заголовок/исходник не найден",
|
|
167
|
-
"status.switch_failed": "Clangd переключение исходник/заголовок не удалось: {error}",
|
|
167
|
+
"status.switch_failed": "Clangd переключение исходник/заголовок не удалось: %{error}",
|
|
168
168
|
"status.opened_config": "Конфигурация .clangd открыта",
|
|
169
169
|
"status.config_not_found": "Не удалось найти конфигурацию .clangd в рабочем пространстве",
|
|
170
|
-
"status.file_status": "Статус файла Clangd: {status}"
|
|
170
|
+
"status.file_status": "Статус файла Clangd: %{status}"
|
|
171
171
|
},
|
|
172
172
|
"th": {
|
|
173
173
|
"cmd.project_setup": "Clangd: ตั้งค่าโปรเจกต์",
|
|
@@ -181,10 +181,10 @@
|
|
|
181
181
|
"status.unsupported_file_type": "Clangd: ไม่รองรับประเภทไฟล์สำหรับสลับเฮดเดอร์",
|
|
182
182
|
"status.opened_corresponding_file": "Clangd: เปิดไฟล์ที่เกี่ยวข้องแล้ว",
|
|
183
183
|
"status.no_matching_found": "Clangd: ไม่พบเฮดเดอร์/ซอร์สที่ตรงกัน",
|
|
184
|
-
"status.switch_failed": "Clangd สลับซอร์ส/เฮดเดอร์ล้มเหลว: {error}",
|
|
184
|
+
"status.switch_failed": "Clangd สลับซอร์ส/เฮดเดอร์ล้มเหลว: %{error}",
|
|
185
185
|
"status.opened_config": "เปิดการตั้งค่า .clangd แล้ว",
|
|
186
186
|
"status.config_not_found": "ไม่พบการตั้งค่า .clangd ในพื้นที่ทำงาน",
|
|
187
|
-
"status.file_status": "สถานะไฟล์ Clangd: {status}"
|
|
187
|
+
"status.file_status": "สถานะไฟล์ Clangd: %{status}"
|
|
188
188
|
},
|
|
189
189
|
"uk": {
|
|
190
190
|
"cmd.project_setup": "Clangd: Налаштування проекту",
|
|
@@ -198,10 +198,10 @@
|
|
|
198
198
|
"status.unsupported_file_type": "Clangd: непідтримуваний тип файлу для перемикання заголовка",
|
|
199
199
|
"status.opened_corresponding_file": "Clangd: відповідний файл відкрито",
|
|
200
200
|
"status.no_matching_found": "Clangd: відповідний заголовок/вихідний файл не знайдено",
|
|
201
|
-
"status.switch_failed": "Clangd перемикання вихідний/заголовний файл не вдалося: {error}",
|
|
201
|
+
"status.switch_failed": "Clangd перемикання вихідний/заголовний файл не вдалося: %{error}",
|
|
202
202
|
"status.opened_config": "Конфігурацію .clangd відкрито",
|
|
203
203
|
"status.config_not_found": "Не вдалося знайти конфігурацію .clangd у робочому просторі",
|
|
204
|
-
"status.file_status": "Статус файлу Clangd: {status}"
|
|
204
|
+
"status.file_status": "Статус файлу Clangd: %{status}"
|
|
205
205
|
},
|
|
206
206
|
"zh-CN": {
|
|
207
207
|
"cmd.project_setup": "Clangd: 项目设置",
|
|
@@ -215,9 +215,9 @@
|
|
|
215
215
|
"status.unsupported_file_type": "Clangd: 不支持的文件类型,无法切换头文件",
|
|
216
216
|
"status.opened_corresponding_file": "Clangd: 已打开对应文件",
|
|
217
217
|
"status.no_matching_found": "Clangd: 未找到匹配的头文件/源文件",
|
|
218
|
-
"status.switch_failed": "Clangd切换源文件/头文件失败: {error}",
|
|
218
|
+
"status.switch_failed": "Clangd切换源文件/头文件失败: %{error}",
|
|
219
219
|
"status.opened_config": "已打开.clangd配置",
|
|
220
220
|
"status.config_not_found": "在工作区中找不到.clangd配置",
|
|
221
|
-
"status.file_status": "Clangd文件状态: {status}"
|
|
221
|
+
"status.file_status": "Clangd文件状态: %{status}"
|
|
222
222
|
}
|
|
223
223
|
}
|