Ich habe Elisp-Code, den ich beim Laden in Orgmode-Dateien ausführen möchte (unterschiedlich für verschiedene Dateien und in der Datei selbst definiert). Gibt es eine Möglichkeit, dies zu tun? Ich habe nichts in http://orgmode.org/manual/In_002dbuffer-settings.html gesehen
Wenn ich der Emacs-Initialisierung etwas hinzufügen kann, das beim Laden einer Orgmode-Datei einen speziell benannten Codeblock ausführt, ist dies möglicherweise eine Lösung, aber ich bin mir nicht sicher, wie das geht, und im Idealfall ist etwas integriert.
# -*- eval: (lisp code here) -*-
aber Sie müssen sich auch der Gefahren bewusst sein. Selbst wenn Sie diese Dokumente nicht an Dritte weitergeben, führt die Interpretation von Emacs Lisp dazu, dass eine Änderung versehentlich zu Datenverlust führen kann. Außerdem klingt der Modus-Hook nach einer besseren Option, wenn Sie denselben Code für mehr als eine Datei ausführen möchten.Antworten:
Diese Lösung erfordert keine Änderung
init.el
(mit geringfügigen Änderungen). Es handelt sich zwar um dateilokale Auswertungen - aber genau darum hat das OP gebeten. Vorteile der Lösung sind:init.el
Da für die Lösung keine Änderungen an der Organisationsmodusdatei erforderlich sind, können diese von (vertrauenswürdigen) Benutzern gemeinsam genutzt werdenIch formuliere die Lösung hier neu.
Fügen Sie irgendwo in Ihrer Datei einen src-Block hinzu:
Dann setzen Sie dies am Ende Ihrer orgmode-Datei:
Ich habe hinzugefügt,
(outline-hide-sublevels 1)
weil ich den src-Block gerne in einer Überschrift ausblenden möchte und möchte, dass die Unterebenen beim Start ausgeblendet werden. Ohne diese Aussage werden die Unterebenen um erweitert(org-babel-goto-named-src-block "startup")
.Bei dieser Lösung werden emacs zweimal um die Erlaubnis zur Ausführung gebeten (1. lokale Variablen anwenden; 2. "Startup" -src-Block ausführen). Da ich viele src-Blöcke in meiner Datei habe, habe ich eine andere dateilokale Variable festgelegt
org-confirm-babel-evaluate
, wie folgt:Warnung: Mit diesem Zusatz fordert emacs nur einmal zur Ausführung auf - alle src-Blöcke in dieser Datei können jetzt ohne weitere Bestätigung ausgeführt werden. Wie andere bereits erwähnt haben, kann dieses Verhalten gefährlich sein, und Sie sollten mit dieser Einstellung sehr vorsichtig sein.
Ich würde jedoch argumentieren , dass diese Lösung (vor allem der erste Version) ist sicherer als die von Joe Corneli gegeben , weil zumindest Sie werden zur Bestätigung aufgefordert werden , auszuführen. Joes Lösung wertet den speziellen Block ohne Bestätigung aus, wenn er in der Datei gefunden wird. Ein Angreifer müsste natürlich den Namen des Spezialblocks erraten ...
Ich verwende diesen Ansatz, um große Dokumente zu schreiben, die beispielsweise Anpassungen an den Organ-Export-Mechanismen erfordern.
quelle
Also, in Ihrem init.el:
quelle
Da fragst du nach
Versuchen Sie dann diese Lösung .
quelle
Ich stimme dem Vorschlag von @Joe Corneli zu, einen Haken zu verwenden.
Mir fällt auch ein, dass Sie hier Lesezeichen nutzen können: Setzen Sie einen bestimmten Lesezeichensprung auf den Haken. Ein Vorteil eines Lesezeichens für den Codeblock besteht darin, dass er normalerweise automatisch verschoben wird (z. B. wenn sich der Dateiinhalt ändert). Daher sollte das Auffinden des Blocks normalerweise automatisch erledigt werden.
[Aber mir ist nicht klar, warum Sie den Code in den Org-Modus-Dateien haben, anstatt anderswo. Wir nehmen das gemäß der Problemstellung als gegeben an, aber ich frage mich, warum Sie das tun. Wenn Sie uns diesbezüglich mehr über das Design erfahren, kann dies zu einer besseren Hilfe führen.]
quelle
Ich habe versucht, den Code von Joe Corneli zu verbessern:
Sie benötigen das in Ihrer init.el-Datei:
Jedes Mal, wenn Sie einen Puffer im Organisationsmodus öffnen, wird nach einem Quellblock mit dem Namen startblock gesucht. Wenn einer gefunden wird, wird er ausgeführt.
In Ihre Dateien im Organisationsmodus können Sie dann Folgendes einfügen:
quelle