feat: bash-style tab completion in the TUI project path prompt (issue #28)

This commit is contained in:
2026-07-16 18:27:09 +02:00
parent 59333ac920
commit 9a1f301527
9 changed files with 727 additions and 519 deletions

View File

@@ -81,11 +81,11 @@ msgstr "KI-Einstellungen"
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:920
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#: lib/bds/tui.ex:485
#: lib/bds/tui.ex:488
#: lib/bds/tui.ex:491
#: lib/bds/tui.ex:499
#: lib/bds/tui.ex:1091
#: lib/bds/tui.ex:564
#: lib/bds/tui.ex:567
#: lib/bds/tui.ex:570
#: lib/bds/tui.ex:578
#: lib/bds/tui.ex:1203
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
msgstr "KI-Vorschlaege"
@@ -572,7 +572,7 @@ msgid "Collapse unchanged diff hunks"
msgstr "Unveränderte Diff-Blöcke einklappen"
#: lib/bds/desktop/shell_live/overlay_manager.ex:422
#: lib/bds/tui.ex:1187
#: lib/bds/tui.ex:1299
#, elixir-autogen, elixir-format
msgid "Command completed"
msgstr "Befehl abgeschlossen"
@@ -590,7 +590,7 @@ msgstr "Bestaetigen"
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32
#: lib/bds/tui.ex:668
#: lib/bds/tui.ex:747
#: lib/bds/ui/sidebar.ex:764
#, elixir-autogen, elixir-format
msgid "Content"
@@ -1030,7 +1030,7 @@ msgid "Filename"
msgstr "Dateiname"
#: lib/bds/desktop/menu_bar.ex:254
#: lib/bds/tui.ex:1151
#: lib/bds/tui.ex:1263
#, elixir-autogen, elixir-format
msgid "Fill Missing Translations"
msgstr "Fehlende Übersetzungen ergänzen"
@@ -1041,7 +1041,7 @@ msgid "Find"
msgstr "Suchen"
#: lib/bds/desktop/menu_bar.ex:255
#: lib/bds/tui.ex:1154
#: lib/bds/tui.ex:1266
#, elixir-autogen, elixir-format
msgid "Find Duplicate Posts"
msgstr "Doppelte Beiträge finden"
@@ -1068,7 +1068,7 @@ msgid "Gallery"
msgstr "Galerie"
#: lib/bds/desktop/menu_bar.ex:256
#: lib/bds/tui.ex:1135
#: lib/bds/tui.ex:1247
#, elixir-autogen, elixir-format
msgid "Generate Site"
msgstr "Website generieren"
@@ -1389,9 +1389,9 @@ msgstr "Maximale Beiträge pro Seite"
#: lib/bds/desktop/shell_live/misc_editor.ex:762
#: lib/bds/desktop/shell_live/sidebar_components.ex:654
#: lib/bds/desktop/shell_live/sidebar_delete.ex:175
#: lib/bds/tui.ex:1005
#: lib/bds/tui.ex:1216
#: lib/bds/tui.ex:1219
#: lib/bds/tui.ex:1117
#: lib/bds/tui.ex:1328
#: lib/bds/tui.ex:1331
#: lib/bds/ui/registry.ex:30
#: lib/bds/ui/registry.ex:100
#: lib/bds/ui/sidebar.ex:558
@@ -1434,11 +1434,11 @@ msgstr "Metadaten"
#: lib/bds/desktop/shell_live/misc_editor.ex:214
#: lib/bds/desktop/shell_live/misc_editor.ex:226
#: lib/bds/desktop/shell_live/misc_editor.ex:448
#: lib/bds/tui.ex:208
#: lib/bds/tui.ex:214
#: lib/bds/tui.ex:225
#: lib/bds/tui.ex:823
#: lib/bds/tui.ex:1132
#: lib/bds/tui.ex:218
#: lib/bds/tui.ex:224
#: lib/bds/tui.ex:235
#: lib/bds/tui.ex:935
#: lib/bds/tui.ex:1244
#: lib/bds/ui/registry.ex:111
#, elixir-autogen, elixir-format
msgid "Metadata Diff"
@@ -1484,7 +1484,7 @@ msgstr "Neue Seite"
#: lib/bds/desktop/menu_bar.ex:214
#: lib/bds/desktop/shell_live/sidebar_create.ex:41
#: lib/bds/tui.ex:165
#: lib/bds/tui.ex:175
#, elixir-autogen, elixir-format
msgid "New Post"
msgstr "Neuer Beitrag"
@@ -1762,8 +1762,8 @@ msgid "Open Data Folder"
msgstr "Datenordner öffnen"
#: lib/bds/desktop/shell_live/index.html.heex:644
#: lib/bds/tui.ex:337
#: lib/bds/tui.ex:342
#: lib/bds/tui.ex:416
#: lib/bds/tui.ex:421
#, elixir-autogen, elixir-format
msgid "Open Existing Blog"
msgstr "Bestehenden Blog öffnen"
@@ -1775,7 +1775,7 @@ msgid "Open Settings"
msgstr "Einstellungen öffnen"
#: lib/bds/desktop/menu_bar.ex:217
#: lib/bds/tui.ex:1156
#: lib/bds/tui.ex:1268
#, elixir-autogen, elixir-format
msgid "Open in Browser"
msgstr "Im Browser öffnen"
@@ -1923,8 +1923,8 @@ msgstr "Beitrag gespeichert"
#: lib/bds/desktop/menu_bar.ex:233
#: lib/bds/desktop/shell_live/misc_editor.ex:664
#: lib/bds/desktop/shell_live/misc_editor.ex:761
#: lib/bds/tui.ex:1004
#: lib/bds/tui.ex:1015
#: lib/bds/tui.ex:1116
#: lib/bds/tui.ex:1127
#: lib/bds/ui/registry.ex:14
#: lib/bds/ui/sidebar.ex:271
#, elixir-autogen, elixir-format
@@ -1983,8 +1983,8 @@ msgstr "Projekt und Veröffentlichung"
#: lib/bds/desktop/shell_live/chat_surface.ex:15
#: lib/bds/desktop/shell_live/index.html.heex:623
#: lib/bds/tui.ex:309
#: lib/bds/tui.ex:314
#: lib/bds/tui.ex:329
#: lib/bds/tui.ex:334
#, elixir-autogen, elixir-format
msgid "Projects"
msgstr "Projekte"
@@ -2050,15 +2050,15 @@ msgid "Ready to import:"
msgstr "Bereit zum Import:"
#: lib/bds/desktop/menu_bar.ex:248
#: lib/bds/tui.ex:334
#: lib/bds/tui.ex:1136
#: lib/bds/tui.ex:413
#: lib/bds/tui.ex:1248
#, elixir-autogen, elixir-format
msgid "Rebuild Database"
msgstr "Datenbank neu aufbauen"
#: lib/bds/desktop/menu_bar.ex:250
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381
#: lib/bds/tui.ex:1140
#: lib/bds/tui.ex:1252
#, elixir-autogen, elixir-format
msgid "Rebuild Embedding Index"
msgstr "Embedding-Index neu aufbauen"
@@ -2116,7 +2116,7 @@ msgid "Refresh Translation"
msgstr "Übersetzung aktualisieren"
#: lib/bds/desktop/menu_bar.ex:252
#: lib/bds/tui.ex:1143
#: lib/bds/tui.ex:1255
#, elixir-autogen, elixir-format
msgid "Regenerate Calendar"
msgstr "Kalender neu erzeugen"
@@ -2127,7 +2127,7 @@ msgid "Regenerate Missing Thumbnails"
msgstr "Fehlende Vorschaubilder neu erzeugen"
#: lib/bds/desktop/menu_bar.ex:249
#: lib/bds/tui.ex:1137
#: lib/bds/tui.ex:1249
#, elixir-autogen, elixir-format
msgid "Reindex Text"
msgstr "Text neu indizieren"
@@ -2313,7 +2313,7 @@ msgstr "Scripting-Funktionen werden in der Neufassung auf Anwendungsebene konfig
#: lib/bds/desktop/shell_live/script_editor.ex:216
#: lib/bds/desktop/shell_live/script_editor.ex:219
#: lib/bds/desktop/shell_live/script_editor.ex:234
#: lib/bds/tui.ex:1007
#: lib/bds/tui.ex:1119
#: lib/bds/ui/registry.ex:38
#: lib/bds/ui/sidebar.ex:63
#: lib/bds/ui/sidebar.ex:115
@@ -2441,9 +2441,9 @@ msgid "Site"
msgstr "Website"
#: lib/bds/desktop/shell_live/misc_editor.ex:412
#: lib/bds/tui.ex:241
#: lib/bds/tui.ex:243
#: lib/bds/tui.ex:828
#: lib/bds/tui.ex:251
#: lib/bds/tui.ex:253
#: lib/bds/tui.ex:940
#: lib/bds/ui/registry.ex:125
#, elixir-autogen, elixir-format
msgid "Site Validation"
@@ -2564,7 +2564,7 @@ msgstr "Schlagwortname"
#: lib/bds/desktop/shell_live/tags_editor.ex:222
#: lib/bds/desktop/shell_live/tags_editor.ex:253
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/tui.ex:1008
#: lib/bds/tui.ex:1120
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
#: lib/bds/ui/sidebar.ex:289
@@ -2576,7 +2576,7 @@ msgstr "Tags"
#: lib/bds/desktop/shell_live.ex:786
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#: lib/bds/tui.ex:515
#: lib/bds/tui.ex:594
#, elixir-autogen, elixir-format
msgid "Tasks"
msgstr "Aufgaben"
@@ -2621,7 +2621,7 @@ msgstr "Template-Syntax ist gültig"
#: lib/bds/desktop/shell_live/template_editor.ex:171
#: lib/bds/desktop/shell_live/template_editor.ex:176
#: lib/bds/desktop/shell_live/template_editor.ex:191
#: lib/bds/tui.ex:1006
#: lib/bds/tui.ex:1118
#: lib/bds/ui/registry.ex:46
#: lib/bds/ui/sidebar.ex:71
#: lib/bds/ui/sidebar.ex:122
@@ -2844,7 +2844,7 @@ msgid "Updated URLs"
msgstr "Aktualisierte URLs"
#: lib/bds/desktop/menu_bar.ex:259
#: lib/bds/tui.ex:1155
#: lib/bds/tui.ex:1267
#, elixir-autogen, elixir-format
msgid "Upload Site"
msgstr "Website hochladen"
@@ -2872,13 +2872,13 @@ msgid "Validate"
msgstr "Validieren"
#: lib/bds/desktop/menu_bar.ex:258
#: lib/bds/tui.ex:1133
#: lib/bds/tui.ex:1245
#, elixir-autogen, elixir-format
msgid "Validate Site"
msgstr "Website validieren"
#: lib/bds/desktop/menu_bar.ex:253
#: lib/bds/tui.ex:1146
#: lib/bds/tui.ex:1258
#, elixir-autogen, elixir-format
msgid "Validate Translations"
msgstr "Übersetzungen validieren"
@@ -3543,7 +3543,7 @@ msgid "Suggested tags"
msgstr "Vorgeschlagene Tags"
#: lib/bds/desktop/menu_bar.ex:257
#: lib/bds/tui.ex:1134
#: lib/bds/tui.ex:1246
#, elixir-autogen, elixir-format
msgid "Force Render Site"
msgstr "Website vollständig neu generieren"
@@ -3640,82 +3640,82 @@ msgstr "OK"
msgid "The endpoint returned no models. You can still type a model name manually."
msgstr "Der Endpunkt hat keine Modelle zurückgegeben. Sie können einen Modellnamen weiterhin manuell eingeben."
#: lib/bds/tui.ex:1092
#: lib/bds/tui.ex:1204
#, elixir-autogen, elixir-format
msgid "AI is unavailable in airplane mode without a local endpoint."
msgstr "KI ist im Flugmodus ohne lokalen Endpunkt nicht verfügbar."
#: lib/bds/tui.ex:1219
#: lib/bds/tui.ex:1331
#, elixir-autogen, elixir-format
msgid "Could not load this file."
msgstr "Diese Datei konnte nicht geladen werden."
#: lib/bds/tui.ex:173
#: lib/bds/tui.ex:183
#, elixir-autogen, elixir-format
msgid "Editing this item is not available in the terminal UI yet."
msgstr "Die Bearbeitung dieses Eintrags ist in der Terminal-Oberfläche noch nicht verfügbar."
#: lib/bds/tui.ex:488
#: lib/bds/tui.ex:567
#, elixir-autogen, elixir-format
msgid "No suggestions returned."
msgstr "Keine Vorschläge erhalten."
#: lib/bds/tui.ex:1216
#: lib/bds/tui.ex:1328
#, elixir-autogen, elixir-format
msgid "Only images can be previewed."
msgstr "Nur Bilder können in der Vorschau angezeigt werden."
#: lib/bds/tui.ex:1015
#: lib/bds/tui.ex:1127
#, elixir-autogen, elixir-format
msgid "Post not found."
msgstr "Beitrag nicht gefunden."
#: lib/bds/tui.ex:623
#: lib/bds/tui.ex:702
#, elixir-autogen, elixir-format
msgid "Press enter to preview %{name}."
msgstr "Drücken Sie Enter, um %{name} in der Vorschau anzuzeigen."
#: lib/bds/tui.ex:1062
#: lib/bds/tui.ex:1174
#, elixir-autogen, elixir-format
msgid "Published."
msgstr "Veröffentlicht."
#: lib/bds/tui.ex:1078
#: lib/bds/tui.ex:1190
#, elixir-autogen, elixir-format
msgid "Save before switching languages."
msgstr "Speichern Sie vor dem Sprachwechsel."
#: lib/bds/tui.ex:1063
#: lib/bds/tui.ex:1175
#, elixir-autogen, elixir-format
msgid "Saved."
msgstr "Gespeichert."
#: lib/bds/tui.ex:626
#: lib/bds/tui.ex:705
#, elixir-autogen, elixir-format
msgid "Select an entry and press enter to open it."
msgstr "Wählen Sie einen Eintrag aus und öffnen Sie ihn mit Enter."
#: lib/bds/tui.ex:485
#: lib/bds/tui.ex:564
#, elixir-autogen, elixir-format
msgid "Suggestions applied."
msgstr "Vorschläge übernommen."
#: lib/bds/tui.ex:638
#: lib/bds/tui.ex:717
#, elixir-autogen, elixir-format
msgid "Title (ctrl+t to edit)"
msgstr "Titel (Strg+T zum Bearbeiten)"
#: lib/bds/tui.ex:637
#: lib/bds/tui.ex:716
#, elixir-autogen, elixir-format
msgid "Title (editing — enter to confirm)"
msgstr "Titel (Bearbeitung — Enter zum Bestätigen)"
#: lib/bds/tui.ex:685
#: lib/bds/tui.ex:764
#, elixir-autogen, elixir-format
msgid "Working…"
msgstr "Wird bearbeitet…"
#: lib/bds/tui.ex:707
#: lib/bds/tui.ex:786
#, elixir-autogen, elixir-format
msgid "esc to close"
msgstr "Esc zum Schließen"
@@ -3752,117 +3752,122 @@ msgstr "Serveradresse (user@host oder user@host:port), Public-Key-Authentifizier
msgid "Use the form user@host or user@host:port."
msgstr "Verwenden Sie das Format user@host oder user@host:port."
#: lib/bds/tui.ex:657
#: lib/bds/tui.ex:736
#, elixir-autogen, elixir-format
msgid "Preview (ctrl+e to edit)"
msgstr "Vorschau (ctrl+e zum Bearbeiten)"
#: lib/bds/tui.ex:917
#: lib/bds/tui.ex:1029
#, elixir-autogen, elixir-format
msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back"
msgstr "Strg+S Speichern · Strg+P Veröffentlichen · Strg+E Vorschau · Strg+T Titel · Strg+L Sprache · Strg+G KI · Esc Zurück"
#: lib/bds/tui.ex:515
#: lib/bds/tui.ex:594
#, elixir-autogen, elixir-format
msgid "All tasks finished."
msgstr "Alle Aufgaben abgeschlossen."
#: lib/bds/tui.ex:733
#: lib/bds/tui.ex:812
#, elixir-autogen, elixir-format
msgid "Commands — esc to close"
msgstr "Befehle — Esc zum Schließen"
#: lib/bds/tui.ex:359
#: lib/bds/tui.ex:438
#, elixir-autogen, elixir-format
msgid "Unknown command."
msgstr "Unbekannter Befehl."
#: lib/bds/tui.ex:723
#: lib/bds/tui.ex:802
#, elixir-autogen, elixir-format
msgid "[report/apply in GUI]"
msgstr "[Bericht/Anwenden in der GUI]"
#: lib/bds/tui.ex:839
#: lib/bds/tui.ex:951
#, elixir-autogen, elixir-format
msgid "%{diffs} differences · %{orphans} orphan files"
msgstr "%{diffs} Unterschiede · %{orphans} verwaiste Dateien"
#: lib/bds/tui.ex:871
#: lib/bds/tui.ex:983
#, elixir-autogen, elixir-format
msgid "Expected %{expected} · Existing %{existing}"
msgstr "Erwartet %{expected} · Vorhanden %{existing}"
#: lib/bds/tui.ex:888
#: lib/bds/tui.ex:1000
#, elixir-autogen, elixir-format
msgid "Extra files (will be removed):"
msgstr "Überzählige Dateien (werden entfernt):"
#: lib/bds/tui.ex:884
#: lib/bds/tui.ex:996
#, elixir-autogen, elixir-format
msgid "Missing pages (will be rendered):"
msgstr "Fehlende Seiten (werden gerendert):"
#: lib/bds/tui.ex:241
#: lib/bds/tui.ex:251
#, elixir-autogen, elixir-format
msgid "Nothing to apply."
msgstr "Nichts anzuwenden."
#: lib/bds/tui.ex:208
#: lib/bds/tui.ex:218
#, elixir-autogen, elixir-format
msgid "Nothing to repair."
msgstr "Nichts zu reparieren."
#: lib/bds/tui.ex:862
#: lib/bds/tui.ex:974
#, elixir-autogen, elixir-format
msgid "Orphan files (not in database):"
msgstr "Verwaiste Dateien (nicht in der Datenbank):"
#: lib/bds/tui.ex:878
#: lib/bds/tui.ex:990
#, elixir-autogen, elixir-format
msgid "Sitemap changed."
msgstr "Sitemap geändert."
#: lib/bds/tui.ex:892
#: lib/bds/tui.ex:1004
#, elixir-autogen, elixir-format
msgid "Updated posts (will be re-rendered):"
msgstr "Aktualisierte Beiträge (werden neu gerendert):"
#: lib/bds/tui.ex:829
#: lib/bds/tui.ex:941
#, elixir-autogen, elixir-format
msgid "enter apply changes · esc close"
msgstr "Enter Änderungen anwenden · Esc Schließen"
#: lib/bds/tui.ex:824
#: lib/bds/tui.ex:936
#, elixir-autogen, elixir-format
msgid "enter repair all from files · esc close"
msgstr "Enter alles aus Dateien reparieren · Esc Schließen"
#: lib/bds/tui.ex:324
#: lib/bds/tui.ex:403
#, elixir-autogen, elixir-format
msgid "Imported Blog"
msgstr "Importierter Blog"
#: lib/bds/tui.ex:343
#: lib/bds/tui.ex:422
#, elixir-autogen, elixir-format
msgid "Not a folder: %{path}"
msgstr "Kein Ordner: %{path}"
#: lib/bds/tui.ex:764
#, elixir-autogen, elixir-format
msgid "Open Existing Blog — type a folder path · enter open · esc back"
msgstr "Bestehenden Blog öffnen — Ordnerpfad eingeben · Enter Öffnen · Esc Zurück"
#: lib/bds/tui.ex:793
#: lib/bds/tui.ex:878
#, elixir-autogen, elixir-format
msgid "Projects — enter switch · o open existing · esc close"
msgstr "Projekte — Enter Wechseln · O Bestehenden öffnen · Esc Schließen"
#: lib/bds/tui.ex:310
#: lib/bds/tui.ex:330
#, elixir-autogen, elixir-format
msgid "Switched to %{name}."
msgstr "Zu %{name} gewechselt."
#: lib/bds/tui.ex:910
#: lib/bds/tui.ex:1022
#, elixir-autogen, elixir-format
msgid "enter open · n new post · 1-5 views · p projects · : commands (:? help) · r refresh · ctrl+q quit"
msgstr "Enter Öffnen · N Neuer Beitrag · 1-5 Ansichten · P Projekte · : Befehle (:? Hilfe) · R Aktualisieren · Strg+Q Beenden"
#: lib/bds/tui.ex:906
#, elixir-autogen, elixir-format
msgid "Matching folders"
msgstr "Passende Ordner"
#: lib/bds/tui.ex:844
#, elixir-autogen, elixir-format
msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back"
msgstr "Bestehenden Blog öffnen — Ordnerpfad eingeben · Tab Vervollständigen · Enter Öffnen · Esc Zurück"