@fresh-editor/fresh-editor 0.3.6 → 0.3.8

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 CHANGED
@@ -1,5 +1,144 @@
1
1
  # Release Notes
2
2
 
3
+ ## 0.3.8
4
+
5
+ ### Features / Improvements
6
+
7
+ #### Environment Managers (venv / direnv / mise)
8
+
9
+ New built-in **environment-manager** plugin: it detects a project's environment manager — `.venv`/`venv`, `.envrc` (direnv), or `mise.toml`/`.tool-versions` — and, via **Env: Activate**, injects that environment into every editor-spawned process (LSP, formatters, terminals, `spawnProcess`). **Env: Use System (Deactivate)** restores the system environment, and **Env: Show Status** reports the current state. Activation is on-demand (not automatic) and respects Workspace Trust. Adds an opt-in `env` status-bar element.
10
+
11
+ #### Remote Development
12
+
13
+ * **LSP over SSH** now runs the language server *on the remote host* instead of falling back to a host-local process, so completions and diagnostics reflect the remote toolchain.
14
+
15
+ #### Workspace Trust (groundwork)
16
+
17
+ Foundational **Workspace Trust** support — a per-project trust level (persisted in the project state dir), a *Set Workspace Trust Level* command-palette control, and a `workspaceTrustLevel()` plugin API. The enforcement gate is **off by default this release** (no prompt on open; undecided folders are treated as Trusted) while the trust UX is reworked around sandboxed execution — so there is no behavior change unless you set a trust level yourself.
18
+
19
+ #### Orchestrator
20
+
21
+ * The **Open** dialog is now scoped to the current project by default, with a visible scope toggle to reach other projects, a tabular picker, and `/` to filter.
22
+ * New windows open atomically with their terminal (no `[No Name]` placeholder), and terminal output shows immediately.
23
+
24
+ #### Settings UI
25
+
26
+ A broad pass on the Settings editor: **number fields now accept direct typing** instead of `[-]`/`[+]` spinners; list editing gets inline `[+] Add new` / `[x]` rows, mouse support, and `Del` to remove; **`Ctrl+R` resets a field to its default**; the focused field's description is shown above the dialog buttons; and confirmations are required before deleting or discarding dirty edits.
27
+
28
+ #### Editor
29
+
30
+ * **Next / Previous Window** commands to cycle open windows without the Switch-Project picker (#2031).
31
+ * **Move File Explorer to Other Side** command, persisted to config (#1468, requested by @asukaminato0721).
32
+ * **Templ** (`.templ`) syntax highlighting (#463, requested by @TS22082).
33
+ * New `editor.confirm_quit` setting (default off) to prompt before quitting a clean session.
34
+
35
+ #### Plugins & API
36
+
37
+ * Built-in `editor.httpFetch(url, path)` for downloading files — `curl` is no longer bundled.
38
+ * "Install from URL" accepts direct `file://` URLs.
39
+
40
+ ### Bug Fixes
41
+
42
+ * **Quit binding overrides honored** (#2030): binding `Ctrl+Q` to `noop`/`none` now actually disables it in every context.
43
+ * **Terminals**: line-number gutter and current-line highlight no longer leak on terminal exit; scroll-back viewport anchors correctly; `Shift+Tab` is forwarded to the child as `ESC[Z` (#2029).
44
+ * **File explorer keeps keyboard focus** when leaving a live terminal (#2029).
45
+ * **Closed terminals no longer reappear**, and buffer groups stay visible when a split closes (#2027, reported by @SolarLune).
46
+ * **Git Log**: selected commit stays aligned with the cursor; selection follows scrolling and row clicks.
47
+ * **Adjacent tab indicators** no longer double up (#1997, reported by @brunnerh).
48
+ * **Theming / Live Diff**: light-theme dim fixes, markdown popup body text inherits the terminal fg, and diff lines preserve syntax foreground.
49
+ * Tree-sitter `.scm` query files are included in the Nix source filter, fixing a source-build failure (#2055, reported by @melekbadreddine).
50
+
51
+ ## 0.3.7
52
+
53
+ Introduces an experimental **multi-window orchestrator** command (`Alt+Q`) - a UI that manages multiple Fresh windows side by side in a single Fresh process.
54
+
55
+ ### Features / Improvements
56
+
57
+ #### Orchestrator (early experiment)
58
+
59
+ The new orchestrator command (`Alt+Q`) lets one Fresh process juggle several independent windows — switch between sessions, open new ones from a project path / branch, or visit one in a separate Fresh process. This is an early experiment; expect rough edges. Please share your ideas and bug reports!
60
+
61
+ #### Search and Replace
62
+
63
+ Made an effort to improve the search & replace command, tackling several issues:
64
+
65
+ * **All Files** scope toggle + dedicated current-file command.
66
+ * Editor shortcuts (`Ctrl+P` etc.) pass through the panel.
67
+ * Proper empty / searching / no-results states.
68
+ * Large result sets stay responsive — incremental tree, throttled streaming, capped per-iteration work.
69
+
70
+ #### Git Log / Review Diff
71
+
72
+ * **Performance**: Per-commit diffs **stream into file-backed buffers** with full syntax highlighting, per-line add/delete backgrounds, working scrollbar, and `Fold by File` / `Fold by Hunk` commands. Now opens the famous "rewrite bun in rust" commit instantly!
73
+ * **Open file at commit** (#1962): jump from a diff line in the review-branch detail panel to the file at that commit (read-only, `q` to go back).
74
+
75
+ #### File Explorer
76
+
77
+ * **Compact directories** (#1406, thanks @Nandaleio!): a directory containing a single child directory renders inline as `com.example.name`, VSCode/IntelliJ-style. On by default; toggle with `file_explorer.compact_directories`.
78
+ * **Configurable tree indicators** (#1940, reported by @MicTheSquid): expand/collapse glyphs themable via *File Explorer → Tree Indicator Expanded / Collapsed* in the Settings UI.
79
+
80
+ #### Plugins & API
81
+
82
+ * **`git_statusbar` plugin + status-bar token registration API** (thanks @PavelLoparev!): show the current git branch in the status bar; plugins register their own tokens via `editor.registerStatusBarElement`. Add via *Settings → Editor → Status Bar → Left / Right*.
83
+ * **`tab_actions` plugin** (#1844, thanks @PavelLoparev!): close all / to-the-left / to-the-right and move tabs within the current split.
84
+ * **Plugins can register their own config items**: a new typed registration API lets plugins declare settings that appear in the Settings UI alongside built-in ones (sorted at the bottom of the category list), so users can toggle plugin behaviour from the same place as everything else. The bundled `vi_mode` plugin uses it to expose an **autoStart** option.
85
+
86
+ #### Editing & Widgets
87
+
88
+ * **Add Cursors to Line Ends** (#1870, reported by @aquasync): places a cursor at the end of every line in the selection.
89
+ * Widget text inputs gain real selection rendering, `Shift+arrow` / `Ctrl+Shift+arrow` extension, and `Ctrl+C/V/X/A` — used by Search & Replace and plugin dialogs.
90
+ * Floating completion popup on widget `Text` inputs.
91
+
92
+ #### Live Diff
93
+
94
+ * Word-level underline highlights on deletion lines; similarity threshold and size caps are runtime-tunable, so large diffs render as modified lines rather than paired add/remove blocks.
95
+
96
+ ### Bug Fixes
97
+
98
+ * **`init.ts` `setAutoOpen(false)` ignored**: dashboard auto-open is now driven by the `ready` hook so user `init.ts` runs first.
99
+
100
+ #### Git Log / Review Diff
101
+
102
+ * **Detail panel `PageUp` / `PageDown`** (action name was wrong); scrollbar now functional on the streamed buffer.
103
+
104
+ #### File Explorer
105
+
106
+ * **UI / navigation shortcuts** (#1903): `Ctrl+P` and friends are no longer swallowed when the file explorer has focus.
107
+ * **Switch Project double-click** (#1931, reported by @SolarLune): double-clicking a directory navigates into it instead of dismissing the dialog.
108
+
109
+ #### Plugins
110
+
111
+ * **Plugin init scaffold** (#1986, @PavelLoparev): new plugins now generate `fresh.entry` (the current entry-point name) instead of stale `fresh.main`.
112
+ * **Idle CPU from git plugins** (#2009, #2012): `git_statusbar` and `merge_conflict` no longer spawn idle subprocesses; `git_statusbar` is driven off `watchPath(.git/HEAD)`.
113
+
114
+ #### Editing
115
+
116
+ * **Smart Home with multiple cursors**: now runs for every cursor, not only the primary.
117
+ * **Soft wrap at trailing space** (#1363, reported by @dragonfyre13): when a trailing space would overflow the wrap column, wrap backs up one word instead of breaking mid-token.
118
+ * **Horizontal scroll-to-view on long lines** (#1873): the viewport now follows the cursor on long lines.
119
+
120
+ #### Live Diff
121
+
122
+ * **Wrapped overlay backgrounds** now extend across every visual row of a wrapped line.
123
+
124
+ #### Rendering
125
+
126
+ * **Highlighter cache preserved across bulk edits** (#1958): large pastes and replace-all no longer trigger a whole-file reparse.
127
+ * **Phantom cursor offscreen** (#1965): a buffer cursor scrolled past the viewport no longer leaves a stray block at the screen edge.
128
+ * **Split separator background** (#1963): separator cells now paint with `editor_bg` so split borders blend with the panes.
129
+ * **Next / Prev Split un-maximizes** (#1961): navigating to another split un-maximizes first.
130
+ * **Stable cursor-position indicator** (#1967): `Ln L, Col C` no longer jitters as the column count grows.
131
+ * **PTY terminal background** now fills the render rect with the editor bg.
132
+ * **Nostalgia theme** (#1890, reported by @NGRIT41): terminal-pane blue now covers full pane.
133
+ * **Column rulers** suppressed on virtual buffers (dashboard, PTY panes, etc.).
134
+
135
+ #### Misc
136
+
137
+ * **No more stray `.fresh/` directory in your working dir** (#1991): orchestrator/cross-restart state now lives under `data_dir` instead of being dropped next to your project files.
138
+ * **Buffer "library path" detection** (#1970, reported by @FF-AntiK): only `.cargo/registry` and `.cargo/git` are treated as Cargo library paths — local `.cargo/config.toml` etc. are no longer flagged.
139
+ * **Julia grammar** (#1852, reported by @goszlanyi): the adjoint operator (`'`) no longer flips the rest of the line into string mode.
140
+ * **`move_word_end` / `select_word_end` labels** (#1878, reported by @sour-dani): translated in all locales.
141
+
3
142
  ## 0.3.6
4
143
 
5
144
  This version includes a major internal refactoring to support multiple windows in a single Fresh process. The work will be used to add a multi-window orchestrator in a future version.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fresh-editor/fresh-editor",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "description": "A modern terminal-based text editor with plugin support",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,6 +21,12 @@
21
21
  "status.review_branch_empty": "No commits in %{base}..HEAD — nothing to review.",
22
22
  "panel.review_branch_header": "Commits (%{base}..HEAD)",
23
23
  "panel.review_branch_footer": "j/k: navigate | Enter: focus detail | r: refresh | q: close",
24
+ "status.move_to_diff": "Move cursor to a diff line",
25
+ "status.move_to_diff_with_context": "Move cursor to a diff line with file context",
26
+ "status.file_loading": "Loading %{file} at %{hash}...",
27
+ "status.file_not_found": "File %{file} not found at commit %{hash}",
28
+ "status.file_view_ready": "%{file} @ %{hash} (read-only) | Target: line %{line} | q: back",
29
+ "status.failed_open_file": "Failed to open %{file}",
24
30
  "cmd.side_by_side_diff": "Side-by-Side Diff",
25
31
  "cmd.side_by_side_diff_desc": "Show side-by-side diff for current file",
26
32
  "cmd.add_comment": "Review: Add Comment",
@@ -32,6 +38,8 @@
32
38
  "cmd.export_json": "Review: Export to JSON",
33
39
  "cmd.export_json_desc": "Export review to .review/session.json",
34
40
  "status.refreshing": "Refreshing review diff...",
41
+ "status.refreshing_range": "Refreshing %{range}... (working tree not included)",
42
+ "status.working_tree_not_included": "working tree not included",
35
43
  "status.updated": "Review diff updated. Found %{count} hunks.",
36
44
  "status.loading_diff": "Loading side-by-side diff...",
37
45
  "status.not_git_repo": "Not in a git repository",
@@ -97,6 +105,12 @@
97
105
  "status.review_branch_empty": "Žádné commity v %{base}..HEAD — není co revidovat.",
98
106
  "panel.review_branch_header": "Commity (%{base}..HEAD)",
99
107
  "panel.review_branch_footer": "j/k: navigace | Enter: detail | r: obnovit | q: zavřít",
108
+ "status.move_to_diff": "Presunte kurzor na radek diffu",
109
+ "status.move_to_diff_with_context": "Presunte kurzor na radek diffu s kontextem souboru",
110
+ "status.file_loading": "Nacitam %{file} v %{hash}...",
111
+ "status.file_not_found": "Soubor %{file} nenalezen v commitu %{hash}",
112
+ "status.file_view_ready": "%{file} @ %{hash} (pouze pro cteni) | Cil: radek %{line} | q: zpet",
113
+ "status.failed_open_file": "Nepodarilo se otevrit %{file}",
100
114
  "cmd.side_by_side_diff": "Rozdily vedle sebe",
101
115
  "cmd.side_by_side_diff_desc": "Zobrazit rozdily aktualniho souboru vedle sebe",
102
116
  "cmd.add_comment": "Revize: Pridat komentar",
@@ -108,6 +122,8 @@
108
122
  "cmd.export_json": "Revize: Exportovat do JSON",
109
123
  "cmd.export_json_desc": "Exportovat revizi do .review/session.json",
110
124
  "status.refreshing": "Obnovuji rozdily revize...",
125
+ "status.refreshing_range": "Obnovuji %{range}... (pracovni strom neni zahrnut)",
126
+ "status.working_tree_not_included": "pracovni strom neni zahrnut",
111
127
  "status.updated": "Rozdily revize aktualizovany. Nalezeno %{count} bloku.",
112
128
  "status.loading_diff": "Nacitam rozdily vedle sebe...",
113
129
  "status.not_git_repo": "Neni v git repozitari",
@@ -173,6 +189,12 @@
173
189
  "status.review_branch_empty": "Keine Commits in %{base}..HEAD — nichts zu überprüfen.",
174
190
  "panel.review_branch_header": "Commits (%{base}..HEAD)",
175
191
  "panel.review_branch_footer": "j/k: Navigation | Enter: Detail | r: Aktualisieren | q: Schließen",
192
+ "status.move_to_diff": "Cursor auf eine Diff-Zeile bewegen",
193
+ "status.move_to_diff_with_context": "Cursor auf eine Diff-Zeile mit Dateikontext bewegen",
194
+ "status.file_loading": "Lade %{file} bei %{hash}...",
195
+ "status.file_not_found": "Datei %{file} nicht gefunden bei Commit %{hash}",
196
+ "status.file_view_ready": "%{file} @ %{hash} (schreibgeschuetzt) | Ziel: Zeile %{line} | q: zurueck",
197
+ "status.failed_open_file": "%{file} konnte nicht geoeffnet werden",
176
198
  "cmd.side_by_side_diff": "Nebeneinander-Ansicht",
177
199
  "cmd.side_by_side_diff_desc": "Unterschiede der aktuellen Datei nebeneinander anzeigen",
178
200
  "cmd.add_comment": "Review: Kommentar hinzufugen",
@@ -184,6 +206,8 @@
184
206
  "cmd.export_json": "Review: Als JSON exportieren",
185
207
  "cmd.export_json_desc": "Review nach .review/session.json exportieren",
186
208
  "status.refreshing": "Unterschiede werden aktualisiert...",
209
+ "status.refreshing_range": "Aktualisiere %{range}... (Arbeitsbaum nicht enthalten)",
210
+ "status.working_tree_not_included": "Arbeitsbaum nicht enthalten",
187
211
  "status.updated": "Unterschiede aktualisiert. %{count} Blocke gefunden.",
188
212
  "status.loading_diff": "Nebeneinander-Ansicht wird geladen...",
189
213
  "status.not_git_repo": "Kein Git-Repository",
@@ -249,6 +273,12 @@
249
273
  "status.review_branch_empty": "No hay commits en %{base}..HEAD — nada que revisar.",
250
274
  "panel.review_branch_header": "Commits (%{base}..HEAD)",
251
275
  "panel.review_branch_footer": "j/k: navegar | Enter: detalle | r: actualizar | q: cerrar",
276
+ "status.move_to_diff": "Mueve el cursor a una linea de diff",
277
+ "status.move_to_diff_with_context": "Mueve el cursor a una linea de diff con contexto de archivo",
278
+ "status.file_loading": "Cargando %{file} en %{hash}...",
279
+ "status.file_not_found": "Archivo %{file} no encontrado en commit %{hash}",
280
+ "status.file_view_ready": "%{file} @ %{hash} (solo lectura) | Objetivo: linea %{line} | q: volver",
281
+ "status.failed_open_file": "Error al abrir %{file}",
252
282
  "cmd.side_by_side_diff": "Diferencias Lado a Lado",
253
283
  "cmd.side_by_side_diff_desc": "Mostrar diferencias lado a lado del archivo actual",
254
284
  "cmd.add_comment": "Revision: Agregar Comentario",
@@ -260,6 +290,8 @@
260
290
  "cmd.export_json": "Revision: Exportar a JSON",
261
291
  "cmd.export_json_desc": "Exportar revision a .review/session.json",
262
292
  "status.refreshing": "Actualizando diferencias de revision...",
293
+ "status.refreshing_range": "Actualizando %{range}... (arbol de trabajo no incluido)",
294
+ "status.working_tree_not_included": "arbol de trabajo no incluido",
263
295
  "status.updated": "Diferencias actualizadas. Se encontraron %{count} bloques.",
264
296
  "status.loading_diff": "Cargando diferencias lado a lado...",
265
297
  "status.not_git_repo": "No esta en un repositorio git",
@@ -325,6 +357,12 @@
325
357
  "status.review_branch_empty": "Aucun commit dans %{base}..HEAD — rien à revoir.",
326
358
  "panel.review_branch_header": "Commits (%{base}..HEAD)",
327
359
  "panel.review_branch_footer": "j/k : naviguer | Entrée : détail | r : actualiser | q : fermer",
360
+ "status.move_to_diff": "Deplacez le curseur sur une ligne de diff",
361
+ "status.move_to_diff_with_context": "Deplacez le curseur sur une ligne de diff avec contexte de fichier",
362
+ "status.file_loading": "Chargement de %{file} a %{hash}...",
363
+ "status.file_not_found": "Fichier %{file} non trouve au commit %{hash}",
364
+ "status.file_view_ready": "%{file} @ %{hash} (lecture seule) | Cible: ligne %{line} | q: retour",
365
+ "status.failed_open_file": "Echec de l'ouverture de %{file}",
328
366
  "cmd.side_by_side_diff": "Differences Cote a Cote",
329
367
  "cmd.side_by_side_diff_desc": "Afficher les differences du fichier actuel cote a cote",
330
368
  "cmd.add_comment": "Revue: Ajouter un Commentaire",
@@ -336,6 +374,8 @@
336
374
  "cmd.export_json": "Revue: Exporter en JSON",
337
375
  "cmd.export_json_desc": "Exporter la revue vers .review/session.json",
338
376
  "status.refreshing": "Actualisation des differences de revue...",
377
+ "status.refreshing_range": "Actualisation de %{range}... (arbre de travail non inclus)",
378
+ "status.working_tree_not_included": "arbre de travail non inclus",
339
379
  "status.updated": "Differences mises a jour. %{count} blocs trouves.",
340
380
  "status.loading_diff": "Chargement des differences cote a cote...",
341
381
  "status.not_git_repo": "Pas dans un depot git",
@@ -401,6 +441,12 @@
401
441
  "status.review_branch_empty": "Nessun commit in %{base}..HEAD — niente da revisionare.",
402
442
  "panel.review_branch_header": "Commit (%{base}..HEAD)",
403
443
  "panel.review_branch_footer": "j/k: naviga | Invio: dettaglio | r: aggiorna | q: chiudi",
444
+ "status.move_to_diff": "Sposta il cursore su una riga di diff",
445
+ "status.move_to_diff_with_context": "Sposta il cursore su una riga di diff con contesto file",
446
+ "status.file_loading": "Caricamento %{file} a %{hash}...",
447
+ "status.file_not_found": "File %{file} non trovato al commit %{hash}",
448
+ "status.file_view_ready": "%{file} @ %{hash} (sola lettura) | Destinazione: riga %{line} | q: indietro",
449
+ "status.failed_open_file": "Apertura di %{file} fallita",
404
450
  "cmd.side_by_side_diff": "Diff affiancato",
405
451
  "cmd.side_by_side_diff_desc": "Mostra diff affiancato per il file corrente",
406
452
  "cmd.add_comment": "Revisione: Aggiungi commento",
@@ -412,6 +458,8 @@
412
458
  "cmd.export_json": "Revisione: Esporta in JSON",
413
459
  "cmd.export_json_desc": "Esporta la revisione in .review/session.json",
414
460
  "status.refreshing": "Aggiornamento differenze revisione...",
461
+ "status.refreshing_range": "Aggiornamento %{range}... (albero di lavoro non incluso)",
462
+ "status.working_tree_not_included": "albero di lavoro non incluso",
415
463
  "status.updated": "Differenze revisione aggiornate. Trovati %{count} blocchi.",
416
464
  "status.loading_diff": "Caricamento diff affiancato...",
417
465
  "status.not_git_repo": "Non in un repository git",
@@ -477,6 +525,12 @@
477
525
  "status.review_branch_empty": "%{base}..HEAD にコミットはありません — レビューする対象がありません。",
478
526
  "panel.review_branch_header": "コミット (%{base}..HEAD)",
479
527
  "panel.review_branch_footer": "j/k: 移動 | Enter: 詳細 | r: 更新 | q: 閉じる",
528
+ "status.move_to_diff": "カーソルを差分行に移動してください",
529
+ "status.move_to_diff_with_context": "ファイルコンテキストのある差分行にカーソルを移動してください",
530
+ "status.file_loading": "%{file} を %{hash} で読み込み中...",
531
+ "status.file_not_found": "コミット %{hash} でファイル %{file} が見つかりません",
532
+ "status.file_view_ready": "%{file} @ %{hash} (読み取り専用) | 対象: %{line}行目 | q: 戻る",
533
+ "status.failed_open_file": "%{file} を開けませんでした",
480
534
  "cmd.side_by_side_diff": "サイドバイサイド差分",
481
535
  "cmd.side_by_side_diff_desc": "現在のファイルの差分を横並びで表示",
482
536
  "cmd.add_comment": "レビュー: コメント追加",
@@ -488,6 +542,8 @@
488
542
  "cmd.export_json": "レビュー: JSONにエクスポート",
489
543
  "cmd.export_json_desc": "レビューを.review/session.jsonにエクスポート",
490
544
  "status.refreshing": "レビュー差分を更新中...",
545
+ "status.refreshing_range": "%{range}を更新中... (ワーキングツリーは含まれません)",
546
+ "status.working_tree_not_included": "ワーキングツリーは含まれません",
491
547
  "status.updated": "レビュー差分を更新しました。%{count}個のハンクが見つかりました。",
492
548
  "status.loading_diff": "サイドバイサイド差分を読み込み中...",
493
549
  "status.not_git_repo": "gitリポジトリではありません",
@@ -553,6 +609,12 @@
553
609
  "status.review_branch_empty": "%{base}..HEAD에 커밋이 없습니다 — 리뷰할 내용이 없습니다.",
554
610
  "panel.review_branch_header": "커밋 (%{base}..HEAD)",
555
611
  "panel.review_branch_footer": "j/k: 이동 | Enter: 상세 | r: 새로 고침 | q: 닫기",
612
+ "status.move_to_diff": "커서를 diff 줄로 이동하세요",
613
+ "status.move_to_diff_with_context": "파일 컨텍스트가 있는 diff 줄로 커서를 이동하세요",
614
+ "status.file_loading": "%{hash}에서 %{file} 로딩 중...",
615
+ "status.file_not_found": "커밋 %{hash}에서 파일 %{file}을 찾을 수 없습니다",
616
+ "status.file_view_ready": "%{file} @ %{hash} (읽기 전용) | 대상: %{line}행 | q: 뒤로",
617
+ "status.failed_open_file": "%{file}을 열지 못했습니다",
556
618
  "cmd.side_by_side_diff": "나란히 비교",
557
619
  "cmd.side_by_side_diff_desc": "현재 파일의 차이점을 나란히 표시",
558
620
  "cmd.add_comment": "검토: 코멘트 추가",
@@ -564,6 +626,8 @@
564
626
  "cmd.export_json": "검토: JSON으로 내보내기",
565
627
  "cmd.export_json_desc": "리뷰를 .review/session.json으로 내보내기",
566
628
  "status.refreshing": "리뷰 차이점 새로고침 중...",
629
+ "status.refreshing_range": "%{range} 새로고침 중... (작업 트리 미포함)",
630
+ "status.working_tree_not_included": "작업 트리 미포함",
567
631
  "status.updated": "리뷰 차이점이 업데이트되었습니다. %{count}개의 헝크를 찾았습니다.",
568
632
  "status.loading_diff": "나란히 비교 로딩 중...",
569
633
  "status.not_git_repo": "git 저장소가 아닙니다",
@@ -629,6 +693,12 @@
629
693
  "status.review_branch_empty": "Sem commits em %{base}..HEAD — nada para revisar.",
630
694
  "panel.review_branch_header": "Commits (%{base}..HEAD)",
631
695
  "panel.review_branch_footer": "j/k: navegar | Enter: detalhe | r: atualizar | q: fechar",
696
+ "status.move_to_diff": "Mova o cursor para uma linha de diff",
697
+ "status.move_to_diff_with_context": "Mova o cursor para uma linha de diff com contexto de arquivo",
698
+ "status.file_loading": "Carregando %{file} em %{hash}...",
699
+ "status.file_not_found": "Arquivo %{file} nao encontrado no commit %{hash}",
700
+ "status.file_view_ready": "%{file} @ %{hash} (somente leitura) | Destino: linha %{line} | q: voltar",
701
+ "status.failed_open_file": "Falha ao abrir %{file}",
632
702
  "cmd.side_by_side_diff": "Diferencas Lado a Lado",
633
703
  "cmd.side_by_side_diff_desc": "Mostrar diferencas do arquivo atual lado a lado",
634
704
  "cmd.add_comment": "Revisao: Adicionar Comentario",
@@ -640,6 +710,8 @@
640
710
  "cmd.export_json": "Revisao: Exportar para JSON",
641
711
  "cmd.export_json_desc": "Exportar revisao para .review/session.json",
642
712
  "status.refreshing": "Atualizando diferencas de revisao...",
713
+ "status.refreshing_range": "Atualizando %{range}... (arvore de trabalho nao incluida)",
714
+ "status.working_tree_not_included": "arvore de trabalho nao incluida",
643
715
  "status.updated": "Diferencas de revisao atualizadas. Encontrados %{count} blocos.",
644
716
  "status.loading_diff": "Carregando diferencas lado a lado...",
645
717
  "status.not_git_repo": "Nao esta em um repositorio git",
@@ -705,6 +777,12 @@
705
777
  "status.review_branch_empty": "Нет коммитов в %{base}..HEAD — нечего просматривать.",
706
778
  "panel.review_branch_header": "Коммиты (%{base}..HEAD)",
707
779
  "panel.review_branch_footer": "j/k: навигация | Enter: детали | r: обновить | q: закрыть",
780
+ "status.move_to_diff": "Peremesstite kursor na stroku diff",
781
+ "status.move_to_diff_with_context": "Peremesstite kursor na stroku diff s kontekstom fayla",
782
+ "status.file_loading": "Zagruzka %{file} v %{hash}...",
783
+ "status.file_not_found": "Fayl %{file} ne nayden v kommite %{hash}",
784
+ "status.file_view_ready": "%{file} @ %{hash} (tol'ko dlya chteniya) | Tsel': stroka %{line} | q: nazad",
785
+ "status.failed_open_file": "Ne udalos' otkryt' %{file}",
708
786
  "cmd.side_by_side_diff": "Сравнение бок о бок",
709
787
  "cmd.side_by_side_diff_desc": "Показать изменения текущего файла бок о бок",
710
788
  "cmd.add_comment": "Ревью: Добавить комментарий",
@@ -716,6 +794,8 @@
716
794
  "cmd.export_json": "Ревью: Экспорт в JSON",
717
795
  "cmd.export_json_desc": "Экспортировать ревью в .review/session.json",
718
796
  "status.refreshing": "Обновление изменений ревью...",
797
+ "status.refreshing_range": "Обновление %{range}... (рабочее дерево не включено)",
798
+ "status.working_tree_not_included": "рабочее дерево не включено",
719
799
  "status.updated": "Изменения ревью обновлены. Найдено %{count} блоков.",
720
800
  "status.loading_diff": "Загрузка сравнения бок о бок...",
721
801
  "status.not_git_repo": "Не в git-репозитории",
@@ -781,6 +861,12 @@
781
861
  "status.review_branch_empty": "ไม่มีคอมมิตใน %{base}..HEAD — ไม่มีอะไรต้องตรวจสอบ",
782
862
  "panel.review_branch_header": "คอมมิต (%{base}..HEAD)",
783
863
  "panel.review_branch_footer": "j/k: นำทาง | Enter: รายละเอียด | r: รีเฟรช | q: ปิด",
864
+ "status.move_to_diff": "เลื่อนเคอร์เซอร์ไปที่บรรทัด diff",
865
+ "status.move_to_diff_with_context": "เลื่อนเคอร์เซอร์ไปที่บรรทัด diff ที่มีบริบทไฟล์",
866
+ "status.file_loading": "กำลังโหลด %{file} ที่ %{hash}...",
867
+ "status.file_not_found": "ไม่พบไฟล์ %{file} ในคอมมิต %{hash}",
868
+ "status.file_view_ready": "%{file} @ %{hash} (อ่านอย่างเดียว) | เป้าหมาย: บรรทัด %{line} | q: กลับ",
869
+ "status.failed_open_file": "ไม่สามารถเปิด %{file} ได้",
784
870
  "cmd.side_by_side_diff": "เปรียบเทียบแบบเคียงข้าง",
785
871
  "cmd.side_by_side_diff_desc": "แสดงความแตกต่างของไฟล์ปัจจุบันแบบเคียงข้าง",
786
872
  "cmd.add_comment": "ตรวจสอบ: เพิ่มความคิดเห็น",
@@ -792,6 +878,8 @@
792
878
  "cmd.export_json": "ตรวจสอบ: ส่งออกเป็น JSON",
793
879
  "cmd.export_json_desc": "ส่งออกการตรวจสอบไปยัง .review/session.json",
794
880
  "status.refreshing": "กำลังรีเฟรชความแตกต่างการตรวจสอบ...",
881
+ "status.refreshing_range": "กำลังรีเฟรช %{range}... (ไม่รวม working tree)",
882
+ "status.working_tree_not_included": "ไม่รวม working tree",
795
883
  "status.updated": "อัปเดตความแตกต่างการตรวจสอบแล้ว พบ %{count} บล็อก",
796
884
  "status.loading_diff": "กำลังโหลดการเปรียบเทียบแบบเคียงข้าง...",
797
885
  "status.not_git_repo": "ไม่อยู่ใน git repository",
@@ -857,6 +945,12 @@
857
945
  "status.review_branch_empty": "Немає комітів у %{base}..HEAD — нічого переглядати.",
858
946
  "panel.review_branch_header": "Коміти (%{base}..HEAD)",
859
947
  "panel.review_branch_footer": "j/k: навігація | Enter: деталі | r: оновити | q: закрити",
948
+ "status.move_to_diff": "Peremistit' kursor na ryadok diff",
949
+ "status.move_to_diff_with_context": "Peremistit' kursor na ryadok diff z kontekstom faylu",
950
+ "status.file_loading": "Zavantazhennya %{file} v %{hash}...",
951
+ "status.file_not_found": "Fayl %{file} ne znaydeno v komiti %{hash}",
952
+ "status.file_view_ready": "%{file} @ %{hash} (til'ky dlya chytannya) | Tsil': ryadok %{line} | q: nazad",
953
+ "status.failed_open_file": "Ne vdalosya vidkryty %{file}",
860
954
  "cmd.side_by_side_diff": "Порівняння поруч",
861
955
  "cmd.side_by_side_diff_desc": "Показати зміни поточного файлу поруч",
862
956
  "cmd.add_comment": "Рев'ю: Додати коментар",
@@ -868,6 +962,8 @@
868
962
  "cmd.export_json": "Рев'ю: Експорт у JSON",
869
963
  "cmd.export_json_desc": "Експортувати рев'ю до .review/session.json",
870
964
  "status.refreshing": "Оновлення змін рев'ю...",
965
+ "status.refreshing_range": "Оновлення %{range}... (робоче дерево не включено)",
966
+ "status.working_tree_not_included": "робоче дерево не включено",
871
967
  "status.updated": "Зміни рев'ю оновлено. Знайдено %{count} блоків.",
872
968
  "status.loading_diff": "Завантаження порівняння поруч...",
873
969
  "status.not_git_repo": "Не в git-репозиторії",
@@ -933,6 +1029,12 @@
933
1029
  "status.review_branch_empty": "Không có commit nào trong %{base}..HEAD — không có gì để xem xét.",
934
1030
  "panel.review_branch_header": "Commit (%{base}..HEAD)",
935
1031
  "panel.review_branch_footer": "j/k: điều hướng | Enter: chi tiết | r: làm mới | q: đóng",
1032
+ "status.move_to_diff": "Di chuyển con trỏ đến dòng diff",
1033
+ "status.move_to_diff_with_context": "Di chuyển con trỏ đến dòng diff có ngữ cảnh tệp",
1034
+ "status.file_loading": "Đang tải %{file} tại %{hash}...",
1035
+ "status.file_not_found": "Không tìm thấy tệp %{file} tại commit %{hash}",
1036
+ "status.file_view_ready": "%{file} @ %{hash} (chỉ đọc) | Đích: dòng %{line} | q: quay lại",
1037
+ "status.failed_open_file": "Không thể mở %{file}",
936
1038
  "cmd.side_by_side_diff": "So sánh song song",
937
1039
  "cmd.side_by_side_diff_desc": "Hiển thị khác biệt song song cho tệp hiện tại",
938
1040
  "cmd.add_comment": "Xem xét: Thêm nhận xét",
@@ -944,6 +1046,8 @@
944
1046
  "cmd.export_json": "Xem xét: Xuất ra JSON",
945
1047
  "cmd.export_json_desc": "Xuất xem xét ra .review/session.json",
946
1048
  "status.refreshing": "Đang làm mới khác biệt xem xét...",
1049
+ "status.refreshing_range": "Đang làm mới %{range}... (không bao gồm cây làm việc)",
1050
+ "status.working_tree_not_included": "không bao gồm cây làm việc",
947
1051
  "status.updated": "Đã cập nhật khác biệt xem xét. Tìm thấy %{count} khối.",
948
1052
  "status.loading_diff": "Đang tải so sánh song song...",
949
1053
  "status.not_git_repo": "Không trong kho git",
@@ -1009,6 +1113,12 @@
1009
1113
  "status.review_branch_empty": "%{base}..HEAD 中没有提交 — 无需审查。",
1010
1114
  "panel.review_branch_header": "提交 (%{base}..HEAD)",
1011
1115
  "panel.review_branch_footer": "j/k:导航 | Enter:详情 | r:刷新 | q:关闭",
1116
+ "status.move_to_diff": "请将光标移动到差异行",
1117
+ "status.move_to_diff_with_context": "请将光标移动到带有文件上下文的差异行",
1118
+ "status.file_loading": "正在加载 %{file} 于 %{hash}...",
1119
+ "status.file_not_found": "在提交 %{hash} 中未找到文件 %{file}",
1120
+ "status.file_view_ready": "%{file} @ %{hash} (只读) | 目标: 第%{line}行 | q: 返回",
1121
+ "status.failed_open_file": "无法打开 %{file}",
1012
1122
  "cmd.side_by_side_diff": "并排差异",
1013
1123
  "cmd.side_by_side_diff_desc": "并排显示当前文件的差异",
1014
1124
  "cmd.add_comment": "审查: 添加评论",
@@ -1020,6 +1130,8 @@
1020
1130
  "cmd.export_json": "审查: 导出为JSON",
1021
1131
  "cmd.export_json_desc": "将审查导出到.review/session.json",
1022
1132
  "status.refreshing": "正在刷新审查差异...",
1133
+ "status.refreshing_range": "正在刷新 %{range}... (不包含工作树)",
1134
+ "status.working_tree_not_included": "不包含工作树",
1023
1135
  "status.updated": "审查差异已更新。找到%{count}个代码块。",
1024
1136
  "status.loading_diff": "正在加载并排差异...",
1025
1137
  "status.not_git_repo": "不在git仓库中",