Archiv als eigenes Fenster: Trilium raus, Notizbaum mit In-Place-Bearbeitung
Trilium-Integration komplett zurückgenommen (Revert von 47951a6): keine
verwaltete Instanz, kein Runtime-Download, kein ETAPI, kein Keyring-Token,
kein Setup-Wizard. Das Archiv sind wieder Markdown-Dateien unter archiveHome
samt FTS5-Suche und Wikilinks.
Notizmodell (an Trilium orientiert, ohne dessen Überbau):
- Jeder Knoten besitzt eine Textdatei — ensure_node_texts legt fehlende beim
Seitenaufbau an (Ordner: gleichnamiges .md daneben, Wurzel: index.md);
Ordner und Zwillingsdatei sind EINE Notiz mit Inhalt und Kindern.
- Der angezeigte Titel steht im Frontmatter der Datei, der Datei-/Ordnername
ist technischer Verwaltungsname; move_folder nimmt den Knotentext mit.
Archiv-Ansicht (wiki-view):
- Baum links: Knoten- und Blatt-Symbole, Führungslinien pro Ebene, Dokumente
näher an der Linie als Ordner; ganze Zeile wählt aus, nur der Pfeil klappt.
- Notiz-Ansicht rechts: großer Titel (Klick bearbeitet ihn → archive_set_title),
Zurück-Knopf mit Auswahl-Verlauf, Details als Popup am Info-Knopf, Kindliste
als abgesetzter Karten-Block mit Anlage-/Änderungsdatum.
- Bearbeiten in place: Split-View aus Rohtext und Live-Vorschau, Speichern per
Knopf oder Ctrl+S (archive_read/archive_write; Frontmatter bleibt).
- Rechte Maustaste im Baum als einziger Aktionsweg (eigenes Kontextmenü,
Standard-Menü des Webviews aus); Anlegen/Umbenennen über modale Dialoge.
Feste Flächenaufteilung statt Ablösen/Andocken:
- Angedocktes Panel = Session-Begleiter (ToDo, Befehle, flüchtiger Entwurf);
der Dokument-Tab ist aus der Leiste raus.
- Archiv-Fenster = Archiv + Suche, Größe und Position einmalig beim Öffnen
aus dem Monitor des rufenden Terminal-Fensters (85 % / 92 %); Öffner-Klick
bei stehendem Fenster fokussiert und schaltet den Tab (panel-mode).
- Terminal-Fenster zu → Archiv-Fenster geht mit.
Neue Commands: archive_read, archive_write, archive_set_title.
This commit is contained in:
+60
-6
@@ -1,22 +1,76 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { initSearchView } from "../search-view";
|
||||
import { initWikiView } from "../wiki-view";
|
||||
import type { PanelTab } from "./index";
|
||||
|
||||
/// Suchtreffer-Sprung ins Archiv: der Treffer merkt den relpath vor, lädt die
|
||||
/// Übersicht neu (wiki-update wechselt den Tab), und die Archiv-Ansicht holt
|
||||
/// die Vormerkung beim nächsten set() ab.
|
||||
let pendingSelect: string | null = null;
|
||||
|
||||
export const wikiTab: PanelTab = {
|
||||
mode: "wiki",
|
||||
module: "archive",
|
||||
buffer: "wiki",
|
||||
popupOnly: true,
|
||||
labelKey: "panel.tabWiki",
|
||||
titleKey: "panel.tabWikiTitle",
|
||||
// Dokument-/Ordner-Operationen laufen als Commands; der neue Stand kommt
|
||||
// über den Wiki-Puffer (wiki-update) zurück, Fehler als Toast. Der
|
||||
// Notiz-Inhalt kommt pro Auswahl über archive_read; Bearbeiten lädt wie
|
||||
// bisher in den Dokument-Tab.
|
||||
init: (container, ctx) => {
|
||||
const run = (cmd: string, args: Record<string, string>) =>
|
||||
void invoke(cmd, { project: ctx.project, ...args }).catch((e) =>
|
||||
ctx.toast(String(e)),
|
||||
);
|
||||
return initWikiView(container, {
|
||||
autoStart: ctx.standalone,
|
||||
readDoc: (relpath) => invoke("archive_read", { project: ctx.project, relpath }),
|
||||
writeDoc: (relpath, text) =>
|
||||
invoke("archive_write", { project: ctx.project, relpath, text }),
|
||||
setTitle: (relpath, title) => run("archive_set_title", { relpath, title }),
|
||||
openWiki: ctx.openWiki,
|
||||
takePending: () => {
|
||||
const p = pendingSelect;
|
||||
pendingSelect = null;
|
||||
return p;
|
||||
},
|
||||
actions: {
|
||||
rename: (relpath, name) => run("archive_rename", { relpath, name }),
|
||||
remove: (relpath) => run("archive_delete", { relpath }),
|
||||
moveFolder: (folder, to) => run("archive_move_folder", { folder, to }),
|
||||
createFolder: (folder) => run("archive_create_folder", { folder }),
|
||||
createDoc: (folder, name) => run("archive_create_doc", { folder, name }),
|
||||
},
|
||||
});
|
||||
},
|
||||
// Beim Aktivieren die Übersicht frisch laden: das Anlegen eines Dokuments
|
||||
// öffnet den Dokument-Tab, ohne den Wiki-Puffer anzufassen — und auch
|
||||
// direkt archivierte oder von Hand abgelegte Dateien erscheinen so.
|
||||
// Die Fenstergröße setzt allein open_panel_window beim Öffnen des Popups.
|
||||
onActivate: (_view, ctx) => ctx.openWiki("tag:"),
|
||||
};
|
||||
|
||||
export const searchTab: PanelTab = {
|
||||
mode: "search",
|
||||
module: "trilium",
|
||||
module: "archive",
|
||||
buffer: "search",
|
||||
popupOnly: true,
|
||||
labelKey: "panel.tabSearch",
|
||||
titleKey: "panel.tabSearchTitle",
|
||||
// Trenner: Archiv-Fenster-Tabs (Archiv, Suche) links, Session-Tabs rechts.
|
||||
sepAfter: true,
|
||||
// Treffer-Klick öffnet die Notiz im Trilium-Fenster des Projekts.
|
||||
// Treffer-Klick öffnet die Notiz im Archiv-Tab: relpath vormerken, die
|
||||
// Übersicht frisch laden — das wiki-update wechselt den Tab und die
|
||||
// Ansicht wählt die vorgemerkte Notiz aus.
|
||||
init: (container, ctx) =>
|
||||
initSearchView(
|
||||
container,
|
||||
(noteId) =>
|
||||
void invoke("trilium_open", { project: ctx.project, noteId }).catch((e) =>
|
||||
ctx.toast(String(e)),
|
||||
),
|
||||
(_path, relpath) => {
|
||||
pendingSelect = relpath;
|
||||
ctx.openWiki("tag:");
|
||||
},
|
||||
(raw) => {
|
||||
// `#tag`-Tokens filtern aufs Schlagwort, der Rest ist die Volltext-Query.
|
||||
const words = raw.split(/\s+/).filter(Boolean);
|
||||
|
||||
Reference in New Issue
Block a user