@fresh-editor/fresh-editor 0.1.83 → 0.1.87

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.
@@ -59,14 +59,15 @@ export function createVirtualBufferFactory(editor: EditorAPI) {
59
59
  readOnly = true,
60
60
  } = options;
61
61
 
62
- return await editor.createVirtualBuffer({
62
+ const result = await editor.createVirtualBuffer({
63
63
  name,
64
64
  mode,
65
- read_only: readOnly,
65
+ readOnly,
66
66
  entries,
67
- show_line_numbers: showLineNumbers,
68
- editing_disabled: editingDisabled,
67
+ showLineNumbers,
68
+ editingDisabled,
69
69
  });
70
+ return result.bufferId;
70
71
  },
71
72
 
72
73
  /**
@@ -82,15 +83,16 @@ export function createVirtualBufferFactory(editor: EditorAPI) {
82
83
  readOnly = true,
83
84
  } = options;
84
85
 
85
- return await editor.createVirtualBufferInExistingSplit({
86
+ const result = await editor.createVirtualBufferInExistingSplit({
86
87
  name,
87
88
  mode,
88
- read_only: readOnly,
89
+ readOnly,
89
90
  entries,
90
- split_id: splitId,
91
- show_line_numbers: showLineNumbers,
92
- editing_disabled: editingDisabled,
91
+ splitId,
92
+ showLineNumbers,
93
+ editingDisabled,
93
94
  });
95
+ return result.bufferId;
94
96
  },
95
97
 
96
98
  /**
@@ -111,14 +113,14 @@ export function createVirtualBufferFactory(editor: EditorAPI) {
111
113
  const result = await editor.createVirtualBufferInSplit({
112
114
  name,
113
115
  mode,
114
- read_only: readOnly,
116
+ readOnly,
115
117
  entries,
116
118
  ratio,
117
- panel_id: panelId,
118
- show_line_numbers: showLineNumbers,
119
- editing_disabled: editingDisabled,
119
+ panelId,
120
+ showLineNumbers,
121
+ editingDisabled,
120
122
  });
121
- return result.buffer_id;
123
+ return result.bufferId;
122
124
  },
123
125
 
124
126
  /**
@@ -96,4 +96,3 @@ editor.registerCommand(
96
96
  );
97
97
 
98
98
  editor.debug("Live Grep plugin loaded (using Finder abstraction)");
99
- editor.setStatus(editor.t("status.ready"));
@@ -334,7 +334,7 @@ function disableMarkdownCompose(bufferId: number): void {
334
334
  editor.setLineNumbers(bufferId, true);
335
335
 
336
336
  // Clear view transform to return to normal rendering
337
- editor.clearViewTransform(bufferId);
337
+ editor.clearViewTransform(bufferId, null);
338
338
 
339
339
  editor.refreshLines(bufferId);
340
340
  editor.debug(`Markdown compose disabled for buffer ${bufferId}`);
@@ -535,10 +535,10 @@ globalThis.onMarkdownViewTransform = function(data: {
535
535
  data.viewport_start
536
536
  );
537
537
 
538
- // Submit the transformed tokens - keep compose_width for margins/centering
538
+ // Submit the transformed tokens - keep composeWidth for margins/centering
539
539
  const layoutHints: LayoutHints = {
540
- compose_width: config.composeWidth,
541
- column_guides: null,
540
+ composeWidth: config.composeWidth,
541
+ columnGuides: null,
542
542
  };
543
543
 
544
544
  editor.submitViewTransform(
@@ -611,4 +611,3 @@ editor.registerCommand(
611
611
 
612
612
  // Initialization
613
613
  editor.debug("Markdown Compose plugin loaded - use 'Markdown: Toggle Compose' command");
614
- editor.setStatus(editor.t("status.plugin_ready"));
@@ -0,0 +1,65 @@
1
+ /// <reference path="./lib/fresh.d.ts" />
2
+ // Provides installation help when marksman (Markdown LSP) is not found
3
+ const editor = getEditor();
4
+
5
+ interface LspServerErrorData {
6
+ language: string;
7
+ server_command: string;
8
+ error_type: string;
9
+ message: string;
10
+ }
11
+
12
+ interface LspStatusClickedData {
13
+ language: string;
14
+ has_error: boolean;
15
+ }
16
+
17
+ interface ActionPopupResultData {
18
+ popup_id: string;
19
+ action_id: string;
20
+ }
21
+
22
+ const INSTALL_URL = "https://github.com/artempyanykh/marksman#how-to-install";
23
+ let markdownLspError: { serverCommand: string; message: string } | null = null;
24
+
25
+ globalThis.on_markdown_lsp_server_error = function (data: LspServerErrorData): void {
26
+ if (data.language !== "markdown") return;
27
+ markdownLspError = { serverCommand: data.server_command, message: data.message };
28
+ if (data.error_type === "not_found") {
29
+ editor.setStatus(`Markdown LSP '${data.server_command}' not found. Click status bar for help.`);
30
+ } else {
31
+ editor.setStatus(`Markdown LSP error: ${data.message}`);
32
+ }
33
+ };
34
+ editor.on("lsp_server_error", "on_markdown_lsp_server_error");
35
+
36
+ globalThis.on_markdown_lsp_status_clicked = function (data: LspStatusClickedData): void {
37
+ if (data.language !== "markdown" || !markdownLspError) return;
38
+ editor.showActionPopup({
39
+ id: "marksman-lsp-help",
40
+ title: "Markdown Language Server Not Found",
41
+ message: `Install marksman for wiki-links and navigation. Visit ${INSTALL_URL}`,
42
+ actions: [
43
+ { id: "copy_url", label: "Copy install URL" },
44
+ { id: "disable", label: "Disable Markdown LSP" },
45
+ { id: "dismiss", label: "Dismiss (ESC)" },
46
+ ],
47
+ });
48
+ };
49
+ editor.on("lsp_status_clicked", "on_markdown_lsp_status_clicked");
50
+
51
+ globalThis.on_markdown_lsp_action_result = function (data: ActionPopupResultData): void {
52
+ if (data.popup_id !== "marksman-lsp-help") return;
53
+ switch (data.action_id) {
54
+ case "copy_url":
55
+ editor.setClipboard(INSTALL_URL);
56
+ editor.setStatus("Copied: " + INSTALL_URL);
57
+ break;
58
+ case "disable":
59
+ editor.disableLspForLanguage("markdown");
60
+ editor.setStatus("Markdown LSP disabled");
61
+ markdownLspError = null;
62
+ break;
63
+ }
64
+ };
65
+ editor.on("action_popup_result", "on_markdown_lsp_action_result");
@@ -1335,18 +1335,18 @@ async function createMergePanels(): Promise<void> {
1335
1335
 
1336
1336
  // Create OURS panel first (takes over current view)
1337
1337
  // Include extension in name so tree-sitter can apply highlighting
1338
- const oursId = await editor.createVirtualBuffer({
1338
+ const oursResult = await editor.createVirtualBuffer({
1339
1339
  name: `*OURS*${sourceExt}`,
1340
1340
  mode: "merge-conflict",
1341
- read_only: true,
1341
+ readOnly: true,
1342
1342
  entries: buildFullFileEntries("ours"),
1343
- show_line_numbers: true,
1344
- show_cursors: true,
1345
- editing_disabled: true,
1343
+ showLineNumbers: true,
1344
+ showCursors: true,
1345
+ editingDisabled: true,
1346
1346
  });
1347
1347
 
1348
- if (oursId !== null) {
1349
- mergeState.oursPanelId = oursId;
1348
+ if (oursResult !== null) {
1349
+ mergeState.oursPanelId = oursResult.bufferId;
1350
1350
  mergeState.oursSplitId = editor.getActiveSplitId();
1351
1351
  }
1352
1352
 
@@ -1354,19 +1354,19 @@ async function createMergePanels(): Promise<void> {
1354
1354
  const theirsResult = await editor.createVirtualBufferInSplit({
1355
1355
  name: `*THEIRS*${sourceExt}`,
1356
1356
  mode: "merge-conflict",
1357
- read_only: true,
1357
+ readOnly: true,
1358
1358
  entries: buildFullFileEntries("theirs"),
1359
1359
  ratio: 0.5, // Will be equalized by distributeSplitsEvenly
1360
1360
  direction: "vertical",
1361
- panel_id: "merge-theirs",
1362
- show_line_numbers: true,
1363
- show_cursors: true,
1364
- editing_disabled: true,
1361
+ panelId: "merge-theirs",
1362
+ showLineNumbers: true,
1363
+ showCursors: true,
1364
+ editingDisabled: true,
1365
1365
  });
1366
1366
 
1367
1367
  if (theirsResult !== null) {
1368
- mergeState.theirsPanelId = theirsResult.buffer_id;
1369
- mergeState.theirsSplitId = theirsResult.split_id ?? editor.getActiveSplitId();
1368
+ mergeState.theirsPanelId = theirsResult.bufferId;
1369
+ mergeState.theirsSplitId = theirsResult.splitId ?? editor.getActiveSplitId();
1370
1370
  }
1371
1371
 
1372
1372
  // Focus back on OURS and create RESULT in the middle
@@ -1377,19 +1377,19 @@ async function createMergePanels(): Promise<void> {
1377
1377
  const resultResult = await editor.createVirtualBufferInSplit({
1378
1378
  name: `*RESULT*${sourceExt}`,
1379
1379
  mode: "merge-result",
1380
- read_only: false,
1380
+ readOnly: false,
1381
1381
  entries: buildResultFileEntries(),
1382
1382
  ratio: 0.5, // Will be equalized by distributeSplitsEvenly
1383
1383
  direction: "vertical",
1384
- panel_id: "merge-result",
1385
- show_line_numbers: true,
1386
- show_cursors: true,
1387
- editing_disabled: false,
1384
+ panelId: "merge-result",
1385
+ showLineNumbers: true,
1386
+ showCursors: true,
1387
+ editingDisabled: false,
1388
1388
  });
1389
1389
 
1390
1390
  if (resultResult !== null) {
1391
- mergeState.resultPanelId = resultResult.buffer_id;
1392
- mergeState.resultSplitId = resultResult.split_id ?? editor.getActiveSplitId();
1391
+ mergeState.resultPanelId = resultResult.bufferId;
1392
+ mergeState.resultSplitId = resultResult.splitId ?? editor.getActiveSplitId();
1393
1393
  }
1394
1394
 
1395
1395
  // Distribute splits evenly so all three panels get equal width
@@ -1783,7 +1783,7 @@ const MERGE_MODE_COMMANDS = [
1783
1783
  */
1784
1784
  function registerMergeModeCommands(): void {
1785
1785
  for (const cmd of MERGE_MODE_COMMANDS) {
1786
- editor.registerCommand(cmd.name, cmd.desc, cmd.action, "normal");
1786
+ editor.registerCommand(cmd.name, cmd.desc, cmd.action, null);
1787
1787
  }
1788
1788
  }
1789
1789
 
@@ -1801,12 +1801,11 @@ editor.registerCommand(
1801
1801
  "%cmd.start",
1802
1802
  "%cmd.start_desc",
1803
1803
  "start_merge_conflict",
1804
- "normal"
1804
+ null // Always visible - entry point command
1805
1805
  );
1806
1806
 
1807
1807
  // =============================================================================
1808
1808
  // Plugin Initialization
1809
1809
  // =============================================================================
1810
1810
 
1811
- editor.setStatus(editor.t("status.ready"));
1812
1811
  editor.debug("Merge plugin initialized - Use 'Merge: Start Resolution' for files with conflicts");
@@ -162,4 +162,3 @@ globalThis.onPathCompletePromptChanged = function (args: { prompt_type: string;
162
162
  // Register event handler
163
163
  editor.on("prompt_changed", "onPathCompletePromptChanged");
164
164
 
165
- editor.setStatus(editor.t("status.loaded"));
@@ -229,15 +229,15 @@ async function showResultsPanel(): Promise<void> {
229
229
  const result = await editor.createVirtualBufferInSplit({
230
230
  name: "*Search/Replace*",
231
231
  mode: "search-replace-list",
232
- read_only: true,
232
+ readOnly: true,
233
233
  entries: entries,
234
234
  ratio: 0.6, // 60/40 split
235
- panel_id: "search-replace-panel",
236
- show_line_numbers: false,
237
- show_cursors: true,
235
+ panelId: "search-replace-panel",
236
+ showLineNumbers: false,
237
+ showCursors: true,
238
238
  });
239
- resultsBufferId = result.buffer_id;
240
- resultsSplitId = result.split_id ?? editor.getActiveSplitId();
239
+ resultsBufferId = result.bufferId;
240
+ resultsSplitId = result.splitId ?? editor.getActiveSplitId();
241
241
 
242
242
  panelOpen = true;
243
243
  editor.debug(`Search/Replace panel opened with buffer ID ${resultsBufferId}`);
@@ -483,4 +483,3 @@ editor.registerCommand(
483
483
 
484
484
  // Plugin initialization
485
485
  editor.debug("Search & Replace plugin loaded");
486
- editor.setStatus(editor.t("status.ready"));
@@ -0,0 +1,65 @@
1
+ /// <reference path="./lib/fresh.d.ts" />
2
+ // Provides installation help when templ LSP is not found
3
+ const editor = getEditor();
4
+
5
+ interface LspServerErrorData {
6
+ language: string;
7
+ server_command: string;
8
+ error_type: string;
9
+ message: string;
10
+ }
11
+
12
+ interface LspStatusClickedData {
13
+ language: string;
14
+ has_error: boolean;
15
+ }
16
+
17
+ interface ActionPopupResultData {
18
+ popup_id: string;
19
+ action_id: string;
20
+ }
21
+
22
+ const INSTALL_URL = "https://templ.guide/quick-start/installation";
23
+ let templLspError: { serverCommand: string; message: string } | null = null;
24
+
25
+ globalThis.on_templ_lsp_server_error = function (data: LspServerErrorData): void {
26
+ if (data.language !== "templ") return;
27
+ templLspError = { serverCommand: data.server_command, message: data.message };
28
+ if (data.error_type === "not_found") {
29
+ editor.setStatus(`Templ LSP '${data.server_command}' not found. Click status bar for help.`);
30
+ } else {
31
+ editor.setStatus(`Templ LSP error: ${data.message}`);
32
+ }
33
+ };
34
+ editor.on("lsp_server_error", "on_templ_lsp_server_error");
35
+
36
+ globalThis.on_templ_lsp_status_clicked = function (data: LspStatusClickedData): void {
37
+ if (data.language !== "templ" || !templLspError) return;
38
+ editor.showActionPopup({
39
+ id: "templ-lsp-help",
40
+ title: "Templ Language Server Not Found",
41
+ message: `Install templ for code completion and diagnostics. Visit ${INSTALL_URL}`,
42
+ actions: [
43
+ { id: "copy_url", label: "Copy install URL" },
44
+ { id: "disable", label: "Disable Templ LSP" },
45
+ { id: "dismiss", label: "Dismiss (ESC)" },
46
+ ],
47
+ });
48
+ };
49
+ editor.on("lsp_status_clicked", "on_templ_lsp_status_clicked");
50
+
51
+ globalThis.on_templ_lsp_action_result = function (data: ActionPopupResultData): void {
52
+ if (data.popup_id !== "templ-lsp-help") return;
53
+ switch (data.action_id) {
54
+ case "copy_url":
55
+ editor.setClipboard(INSTALL_URL);
56
+ editor.setStatus("Copied: " + INSTALL_URL);
57
+ break;
58
+ case "disable":
59
+ editor.disableLspForLanguage("templ");
60
+ editor.setStatus("Templ LSP disabled");
61
+ templLspError = null;
62
+ break;
63
+ }
64
+ };
65
+ editor.on("action_popup_result", "on_templ_lsp_action_result");
@@ -1734,15 +1734,16 @@ async function doOpenThemeEditor(): Promise<void> {
1734
1734
 
1735
1735
  // Create virtual buffer in current split (no new split)
1736
1736
  editor.debug("[theme_editor] doOpenThemeEditor: calling createVirtualBuffer...");
1737
- const bufferId = await editor.createVirtualBuffer({
1737
+ const result = await editor.createVirtualBuffer({
1738
1738
  name: "*Theme Editor*",
1739
1739
  mode: "theme-editor",
1740
- read_only: true,
1740
+ readOnly: true,
1741
1741
  entries: entries,
1742
- show_line_numbers: false,
1743
- show_cursors: true,
1744
- editing_disabled: true,
1742
+ showLineNumbers: false,
1743
+ showCursors: true,
1744
+ editingDisabled: true,
1745
1745
  });
1746
+ const bufferId = result.bufferId;
1746
1747
  editor.debug(`[theme_editor] doOpenThemeEditor: createVirtualBuffer returned bufferId=${bufferId}`);
1747
1748
  editor.debug(`[theme_editor] doOpenThemeEditor: checking if bufferId !== null...`);
1748
1749
 
@@ -2097,5 +2098,4 @@ editor.registerCommand("%cmd.nav_prev", "%cmd.nav_prev_desc", "theme_editor_nav_
2097
2098
  // Plugin Initialization
2098
2099
  // =============================================================================
2099
2100
 
2100
- editor.setStatus(editor.t("status.plugin_loaded"));
2101
2101
  editor.debug("Theme Editor plugin initialized - Use 'Edit Theme' command to open");
@@ -203,5 +203,4 @@ editor.registerCommand(
203
203
  );
204
204
 
205
205
  // Initialization
206
- editor.setStatus(editor.t("status.loaded"));
207
206
  editor.debug("TODO Highlighter initialized with keywords: " + config.keywords.map(k => k.word).join(", "));
@@ -25,10 +25,12 @@
25
25
  "status.line_beyond_end": "Line %{line} beyond end of file, moved to end",
26
26
 
27
27
  "error.no_write_since_change": "No write since last change (use %{cmd} to override)",
28
+ "error.other_buffers_modified": "Other buffers have unsaved changes (use %{cmd} to save all and quit)",
29
+ "error.no_file_name": "No file name (use :w filename)",
28
30
  "error.not_valid_command": "Not a valid command: %{cmd}",
29
31
  "error.unknown_command": "Unknown command: %{cmd}",
30
32
  "error.command_no_bang": "Command does not accept !: %{cmd}",
31
- "error.save_as_not_implemented": "Save as not implemented. Use :w to save current file.",
33
+ "error.save_as_not_implemented": "Save as not implemented. Use Ctrl+Shift+S or File menu.",
32
34
  "error.shell_not_supported": "Shell commands not supported (use terminal)",
33
35
  "error.buffer_not_found": "Buffer %{id} not found",
34
36
  "error.multiple_buffers_match": "Multiple buffers match \"%{pattern}\". Be more specific.",
@@ -144,10 +146,12 @@
144
146
  "status.line_beyond_end": "Radek %{line} za koncem souboru, presunuto na konec",
145
147
 
146
148
  "error.no_write_since_change": "Neulozeno od posledni zmeny (pouzijte %{cmd} pro vynuceni)",
149
+ "error.other_buffers_modified": "Jiné buffery mají neuložené změny (použijte %{cmd} pro uložení všech a ukončení)",
150
+ "error.no_file_name": "Žádný název souboru (použijte :w název_souboru)",
147
151
  "error.not_valid_command": "Neplatny prikaz: %{cmd}",
148
152
  "error.unknown_command": "Neznamy prikaz: %{cmd}",
149
153
  "error.command_no_bang": "Prikaz neprijima !: %{cmd}",
150
- "error.save_as_not_implemented": "Ulozit jako neimplementovano. Pouzijte :w pro ulozeni.",
154
+ "error.save_as_not_implemented": "Uložit jako není implementováno. Použijte Ctrl+Shift+S nebo menu Soubor.",
151
155
  "error.shell_not_supported": "Shell prikazy nepodporovany (pouzijte terminal)",
152
156
  "error.buffer_not_found": "Buffer %{id} nenalezen",
153
157
  "error.multiple_buffers_match": "Vice bufferu odpovida \"%{pattern}\". Bud presnejsi.",
@@ -263,10 +267,12 @@
263
267
  "status.line_beyond_end": "Zeile %{line} ueber Dateiende hinaus, zum Ende bewegt",
264
268
 
265
269
  "error.no_write_since_change": "Nicht gespeichert seit letzter Aenderung (verwende %{cmd} zum Ueberschreiben)",
270
+ "error.other_buffers_modified": "Andere Puffer haben ungespeicherte Änderungen (verwenden Sie %{cmd} um alle zu speichern und zu beenden)",
271
+ "error.no_file_name": "Kein Dateiname (verwenden Sie :w Dateiname)",
266
272
  "error.not_valid_command": "Kein gueltiger Befehl: %{cmd}",
267
273
  "error.unknown_command": "Unbekannter Befehl: %{cmd}",
268
274
  "error.command_no_bang": "Befehl akzeptiert kein !: %{cmd}",
269
- "error.save_as_not_implemented": "Speichern unter nicht implementiert. Verwende :w zum Speichern.",
275
+ "error.save_as_not_implemented": "Speichern unter nicht implementiert. Verwenden Sie Strg+Umschalt+S oder das Datei-Menü.",
270
276
  "error.shell_not_supported": "Shell-Befehle nicht unterstuetzt (verwende Terminal)",
271
277
  "error.buffer_not_found": "Buffer %{id} nicht gefunden",
272
278
  "error.multiple_buffers_match": "Mehrere Buffer passen zu \"%{pattern}\". Sei genauer.",
@@ -382,10 +388,12 @@
382
388
  "status.line_beyond_end": "Linea %{line} mas alla del final, movido al final",
383
389
 
384
390
  "error.no_write_since_change": "Sin guardar desde el ultimo cambio (usa %{cmd} para forzar)",
391
+ "error.other_buffers_modified": "Otros búferes tienen cambios sin guardar (use %{cmd} para guardar todos y salir)",
392
+ "error.no_file_name": "Sin nombre de archivo (use :w nombre_archivo)",
385
393
  "error.not_valid_command": "Comando no valido: %{cmd}",
386
394
  "error.unknown_command": "Comando desconocido: %{cmd}",
387
395
  "error.command_no_bang": "El comando no acepta !: %{cmd}",
388
- "error.save_as_not_implemented": "Guardar como no implementado. Usa :w para guardar.",
396
+ "error.save_as_not_implemented": "Guardar como no implementado. Use Ctrl+Shift+S o el menú Archivo.",
389
397
  "error.shell_not_supported": "Comandos de shell no soportados (usa terminal)",
390
398
  "error.buffer_not_found": "Buffer %{id} no encontrado",
391
399
  "error.multiple_buffers_match": "Multiples buffers coinciden con \"%{pattern}\". Se mas especifico.",
@@ -501,10 +509,12 @@
501
509
  "status.line_beyond_end": "Ligne %{line} au-dela de la fin, deplace a la fin",
502
510
 
503
511
  "error.no_write_since_change": "Non enregistre depuis la derniere modification (utilisez %{cmd} pour forcer)",
512
+ "error.other_buffers_modified": "D'autres tampons ont des modifications non enregistrées (utilisez %{cmd} pour tout enregistrer et quitter)",
513
+ "error.no_file_name": "Pas de nom de fichier (utilisez :w nom_fichier)",
504
514
  "error.not_valid_command": "Commande non valide: %{cmd}",
505
515
  "error.unknown_command": "Commande inconnue: %{cmd}",
506
516
  "error.command_no_bang": "La commande n'accepte pas !: %{cmd}",
507
- "error.save_as_not_implemented": "Enregistrer sous non implemente. Utilisez :w pour enregistrer.",
517
+ "error.save_as_not_implemented": "Enregistrer sous non implémenté. Utilisez Ctrl+Shift+S ou le menu Fichier.",
508
518
  "error.shell_not_supported": "Commandes shell non supportees (utilisez terminal)",
509
519
  "error.buffer_not_found": "Buffer %{id} non trouve",
510
520
  "error.multiple_buffers_match": "Plusieurs buffers correspondent a \"%{pattern}\". Soyez plus precis.",
@@ -620,10 +630,12 @@
620
630
  "status.line_beyond_end": "Riga %{line} oltre la fine del file, spostato alla fine",
621
631
 
622
632
  "error.no_write_since_change": "Non salvato dall'ultima modifica (usa %{cmd} per forzare)",
633
+ "error.other_buffers_modified": "Altri buffer hanno modifiche non salvate (usa %{cmd} per salvare tutto ed uscire)",
634
+ "error.no_file_name": "Nessun nome file (usa :w nome_file)",
623
635
  "error.not_valid_command": "Comando non valido: %{cmd}",
624
636
  "error.unknown_command": "Comando sconosciuto: %{cmd}",
625
637
  "error.command_no_bang": "Il comando non accetta !: %{cmd}",
626
- "error.save_as_not_implemented": "Salva come non implementato. Usa :w per salvare il file corrente.",
638
+ "error.save_as_not_implemented": "Salva con nome non implementato. Usa Ctrl+Shift+S o il menu File.",
627
639
  "error.shell_not_supported": "Comandi shell non supportati (usa il terminale)",
628
640
  "error.buffer_not_found": "Buffer %{id} non trovato",
629
641
  "error.multiple_buffers_match": "Più buffer corrispondono a \"%{pattern}\". Sii più specifico.",
@@ -739,10 +751,12 @@
739
751
  "status.line_beyond_end": "%{line}行目はファイル末尾を超えています。末尾に移動しました",
740
752
 
741
753
  "error.no_write_since_change": "最後の変更以降保存されていません(%{cmd}で強制実行)",
754
+ "error.other_buffers_modified": "他のバッファに未保存の変更があります(%{cmd} で全て保存して終了)",
755
+ "error.no_file_name": "ファイル名がありません(:w ファイル名 を使用)",
742
756
  "error.not_valid_command": "無効なコマンド: %{cmd}",
743
757
  "error.unknown_command": "不明なコマンド: %{cmd}",
744
758
  "error.command_no_bang": "コマンドは!を受け付けません: %{cmd}",
745
- "error.save_as_not_implemented": "名前を付けて保存は未実装です。:wで保存してください。",
759
+ "error.save_as_not_implemented": "名前を付けて保存は未実装です。Ctrl+Shift+S またはファイルメニューを使用してください。",
746
760
  "error.shell_not_supported": "シェルコマンドはサポートされていません(ターミナルを使用)",
747
761
  "error.buffer_not_found": "バッファ%{id}が見つかりません",
748
762
  "error.multiple_buffers_match": "複数のバッファが\"%{pattern}\"に一致します。より具体的に指定してください。",
@@ -858,10 +872,12 @@
858
872
  "status.line_beyond_end": "%{line}줄이 파일 끝을 넘어감, 끝으로 이동함",
859
873
 
860
874
  "error.no_write_since_change": "마지막 변경 후 저장 안 됨 (%{cmd}로 강제 실행)",
875
+ "error.other_buffers_modified": "다른 버퍼에 저장되지 않은 변경사항이 있습니다 (%{cmd}로 모두 저장하고 종료)",
876
+ "error.no_file_name": "파일 이름 없음 (:w 파일이름 사용)",
861
877
  "error.not_valid_command": "유효하지 않은 명령: %{cmd}",
862
878
  "error.unknown_command": "알 수 없는 명령: %{cmd}",
863
879
  "error.command_no_bang": "명령이 !를 지원하지 않음: %{cmd}",
864
- "error.save_as_not_implemented": "다른 이름으로 저장 미구현. :w로 저장하세요.",
880
+ "error.save_as_not_implemented": "다른 이름으로 저장이 구현되지 않았습니다. Ctrl+Shift+S 또는 파일 메뉴를 사용하세요.",
865
881
  "error.shell_not_supported": "셸 명령 지원 안 됨 (터미널 사용)",
866
882
  "error.buffer_not_found": "버퍼 %{id} 찾을 수 없음",
867
883
  "error.multiple_buffers_match": "여러 버퍼가 \"%{pattern}\"와 일치. 더 구체적으로 지정하세요.",
@@ -977,10 +993,12 @@
977
993
  "status.line_beyond_end": "Linha %{line} alem do fim do arquivo, movido para o fim",
978
994
 
979
995
  "error.no_write_since_change": "Nao salvo desde a ultima alteracao (use %{cmd} para forcar)",
996
+ "error.other_buffers_modified": "Outros buffers têm alterações não salvas (use %{cmd} para salvar tudo e sair)",
997
+ "error.no_file_name": "Sem nome de arquivo (use :w nome_arquivo)",
980
998
  "error.not_valid_command": "Comando invalido: %{cmd}",
981
999
  "error.unknown_command": "Comando desconhecido: %{cmd}",
982
1000
  "error.command_no_bang": "Comando nao aceita !: %{cmd}",
983
- "error.save_as_not_implemented": "Salvar como nao implementado. Use :w para salvar.",
1001
+ "error.save_as_not_implemented": "Salvar como não implementado. Use Ctrl+Shift+S ou o menu Arquivo.",
984
1002
  "error.shell_not_supported": "Comandos shell nao suportados (use terminal)",
985
1003
  "error.buffer_not_found": "Buffer %{id} nao encontrado",
986
1004
  "error.multiple_buffers_match": "Multiplos buffers correspondem a \"%{pattern}\". Seja mais especifico.",
@@ -1096,10 +1114,12 @@
1096
1114
  "status.line_beyond_end": "Строка %{line} за концом файла, перемещено в конец",
1097
1115
 
1098
1116
  "error.no_write_since_change": "Не сохранено с последнего изменения (используйте %{cmd} для принудительного выполнения)",
1117
+ "error.other_buffers_modified": "Другие буферы имеют несохранённые изменения (используйте %{cmd} чтобы сохранить всё и выйти)",
1118
+ "error.no_file_name": "Нет имени файла (используйте :w имя_файла)",
1099
1119
  "error.not_valid_command": "Недопустимая команда: %{cmd}",
1100
1120
  "error.unknown_command": "Неизвестная команда: %{cmd}",
1101
1121
  "error.command_no_bang": "Команда не принимает !: %{cmd}",
1102
- "error.save_as_not_implemented": "Сохранить как не реализовано. Используйте :w для сохранения.",
1122
+ "error.save_as_not_implemented": "Сохранить как не реализовано. Используйте Ctrl+Shift+S или меню Файл.",
1103
1123
  "error.shell_not_supported": "Shell команды не поддерживаются (используйте терминал)",
1104
1124
  "error.buffer_not_found": "Буфер %{id} не найден",
1105
1125
  "error.multiple_buffers_match": "Несколько буферов соответствуют \"%{pattern}\". Будьте точнее.",
@@ -1215,10 +1235,12 @@
1215
1235
  "status.line_beyond_end": "บรรทัด %{line} เกินจุดสิ้นสุดไฟล์ ย้ายไปยังจุดสิ้นสุด",
1216
1236
 
1217
1237
  "error.no_write_since_change": "ไม่ได้บันทึกตั้งแต่การเปลี่ยนแปลงล่าสุด (ใช้ %{cmd} เพื่อบังคับ)",
1238
+ "error.other_buffers_modified": "บัฟเฟอร์อื่นมีการเปลี่ยนแปลงที่ไม่ได้บันทึก (ใช้ %{cmd} เพื่อบันทึกทั้งหมดและออก)",
1239
+ "error.no_file_name": "ไม่มีชื่อไฟล์ (ใช้ :w ชื่อไฟล์)",
1218
1240
  "error.not_valid_command": "คำสั่งไม่ถูกต้อง: %{cmd}",
1219
1241
  "error.unknown_command": "คำสั่งไม่รู้จัก: %{cmd}",
1220
1242
  "error.command_no_bang": "คำสั่งไม่รับ !: %{cmd}",
1221
- "error.save_as_not_implemented": "บันทึกเป็นยังไม่ได้ใช้งาน ใช้ :w เพื่อบันทึก",
1243
+ "error.save_as_not_implemented": "บันทึกเป็นยังไม่รองรับ ใช้ Ctrl+Shift+S หรือเมนูไฟล์",
1222
1244
  "error.shell_not_supported": "ไม่รองรับคำสั่ง Shell (ใช้เทอร์มินัล)",
1223
1245
  "error.buffer_not_found": "ไม่พบบัฟเฟอร์ %{id}",
1224
1246
  "error.multiple_buffers_match": "มีหลายบัฟเฟอร์ที่ตรงกับ \"%{pattern}\" โปรดระบุให้ชัดเจนขึ้น",
@@ -1334,10 +1356,12 @@
1334
1356
  "status.line_beyond_end": "Рядок %{line} за кінцем файлу, переміщено в кінець",
1335
1357
 
1336
1358
  "error.no_write_since_change": "Не збережено з останньої зміни (використовуйте %{cmd} для примусового виконання)",
1359
+ "error.other_buffers_modified": "Інші буфери мають незбережені зміни (використайте %{cmd} щоб зберегти все і вийти)",
1360
+ "error.no_file_name": "Немає назви файлу (використайте :w назва_файлу)",
1337
1361
  "error.not_valid_command": "Недійсна команда: %{cmd}",
1338
1362
  "error.unknown_command": "Невідома команда: %{cmd}",
1339
1363
  "error.command_no_bang": "Команда не приймає !: %{cmd}",
1340
- "error.save_as_not_implemented": "Зберегти як не реалізовано. Використовуйте :w для збереження.",
1364
+ "error.save_as_not_implemented": "Зберегти як не реалізовано. Використайте Ctrl+Shift+S або меню Файл.",
1341
1365
  "error.shell_not_supported": "Shell команди не підтримуються (використовуйте термінал)",
1342
1366
  "error.buffer_not_found": "Буфер %{id} не знайдено",
1343
1367
  "error.multiple_buffers_match": "Декілька буферів відповідають \"%{pattern}\". Будьте точнішими.",
@@ -1453,10 +1477,12 @@
1453
1477
  "status.line_beyond_end": "第%{line}行超出文件末尾,已移动到末尾",
1454
1478
 
1455
1479
  "error.no_write_since_change": "上次更改后未保存(使用%{cmd}强制执行)",
1480
+ "error.other_buffers_modified": "其他缓冲区有未保存的更改(使用 %{cmd} 保存全部并退出)",
1481
+ "error.no_file_name": "没有文件名(使用 :w 文件名)",
1456
1482
  "error.not_valid_command": "无效命令: %{cmd}",
1457
1483
  "error.unknown_command": "未知命令: %{cmd}",
1458
1484
  "error.command_no_bang": "命令不接受!: %{cmd}",
1459
- "error.save_as_not_implemented": "另存为未实现。使用:w保存当前文件。",
1485
+ "error.save_as_not_implemented": "另存为未实现。请使用 Ctrl+Shift+S 或文件菜单。",
1460
1486
  "error.shell_not_supported": "不支持Shell命令(请使用终端)",
1461
1487
  "error.buffer_not_found": "未找到缓冲区%{id}",
1462
1488
  "error.multiple_buffers_match": "多个缓冲区匹配\"%{pattern}\"。请更具体。",