Org-Roam-UI... oder: Wie wurde die Notizvorschau repariert.
Ich benutze Emacs. Unter anderem verwende ich es für die Planung, Vorbereitung und Nachbereitung meiner Pen&Paper-Runde “Fluch des Strahd”. Diese Kampagne hat eine hohe Komplexität. Es gibt viele Non-Player-Charakters (NPC), Orte, Ereignisse und Geheimnisse, die mit einander zusammenhängen. Das Buch der Kampagne ist leider nicht besonders gut strukturiert. Beim ersten Lesen ist mir bereits aufgefallen, dass sehr viele Informationen z. B. zu NPCs über das gesamte Buch verstreut sind. Als Spielleiter benötige ich aber alle Informationen gebündelt. Nur so kann ich gezielt Hinweise einstreuen, die wichtig sind. Meine Aufgabe ist es, die Gruppe grundsätzlich einen Rahmen zu geben, in dem sie sich bewegen können. Und sie sollten auch genug Informationen haben, damit sie Entscheidungen treffen können. Ich weiß, dass kann kontrovers gesehen werden (Railroad vs. Sandbox…), aber so ist mein Stil. Und bisher scheinen meine Mitspieler das zu mögen.
Nun zu Emacs und meinen Vorbereitungen. Ich lese also die Kampagne und will für mich selber die Informationen festhalten. Außerdem möchte ich sie auch miteinder verknüpfen. Kurz geschrieben: ich will ein eigenes Wiki aufbauen. Dazu gibt es für Emacs das Paket Org-roam (Homepage). Org-Roam erstellt Notizen mit Metainformationen. Zusätzlich legt es eine Datenbank an, in der Verlinkungen und einige weitere Meta-Informationen enthalten sind. Soweit, so gut.
Nun möchte ich aber für die Kampagne in Org-Roam einen eigenen Bereich mit Notizen haben. Es soll getrennt von anderen Notizen sein. Org-Roam kann das grundsätzlich. Es gibt aber ein zusätzliches Modul Org-Roam-UI. Dies kann die Vernetzungen im Browser abbilden. Es ist interaktiv, kann die Notizen anzeigen und sogar auf Emacs reagieren. Verwendet man, wie ich, einen zusätzliche, separierten Ort für die Notizen, funktioniert die Ansicht der Notizen nicht. Man kann zwar das Netzwerk im Browser sehen, aber der Inhalt einer Notiz wird mit einem HTTP-Fehler beantwortet. Der Fehler wird in diesem Github-Issue beschrieben.
Ich bin kein Entwickler. Und kann die vermeintliche Lösung nicht bei mir umsetzen. Aber ich arbeite in einer Softwarefirma. Und ein sehr geschätzer Kollege ist Softwareentwickler und verwendet ebenfalls Emacs und kann sogar Lisp. Also habe ich ihn gefragt, ob er mir nicht helfen kann. Und er hat für mich folgende Lösung implementiert. Vielen lieben Dank an dieser Stelle für die Hilfe.
Vielleicht hilft sie jemand anderen.
In Doom-Emacs muss dieser Code in der config.el
ergänzt werden. Danach dann den Sync in Doom ausführen und die Anzeige der Notizen funktioniert.
;; Fix für Org-Roam-UI
(defvar jan/org-roam-ui--roam-directory nil)
(defun jan/org-roam-ui--advice-set-dir (fun &rest args)
(let ((old-value org-roam-directory))
(setq org-roam-directory jan/org-roam-ui--roam-directory)
(prog1
(apply fun args)
(setq org-roam-directory old-value))))
(advice-add 'httpd/node :around 'jan/org-roam-ui--advice-set-dir)
(advice-add 'httpd/img :around 'jan/org-roam-ui--advice-set-dir)
(defun jan/org-roam-ui--save-dir (&rest args)
(when org-roam-ui-mode
(setq jan/org-roam-ui--roam-directory org-roam-directory)))
(advice-add 'org-roam-ui-mode :after 'jan/org-roam-ui--save-dir)