In meinen Texten zum Emacs Org-mode zitiere ich häufig Emacs Lisp Code, der der Konfiguration des Emacs dient. Von Einsteigern in die Welt des Emacs bin ich mehrfach gefragt worden, wo diese Befehle „hinzuschreiben“ seien. Im Folgenden möchte ich ein paar grundsätzliche Bemerkungen zur Konfiguration des GNU Emacs machen und die Variante vorstellen, wie ich meinen Emacs konfiguriere.
Bevor auf die verschiedenen möglichen Konfigurationsdateien eingegangen wird, ein kurzer Hinweis auf das sog. Customization Interface des GNU Emacs. Dieses stellt eine sehr einfache Möglichkeit dar, den GNU Emacs zu konfigurieren. Vorteil dieser Variante ist, dass man sich durch die verfügbaren Einstellungen quasi „durchklicken“ kann. Auf diese Weise kann man den Emacs gut erkunden. Der große Nachteil ist jedoch, dass man keinen Einfluss auf darauf hat, wie die Konfiguration in Form des Emacs Lisp Codes gestaltet wird. Grundsätzlich schreibt das Customization Interface geänderte Einstellungen in die Initialisierungsdatei des Emacs (siehe dazu sogleich); allerdings in einer sehr kompakten Syntax. Für den ambitionierten Emacs-Anwender ist es jedoch wichtig, dass er sich in Emacs Lisp Code zurecht findet. Aus meiner Sicht sollte man das Customization Interface weitestgehend meiden und die Einstellungen lieber von Hand direkt als Emacs Lisp Code vornehmen. So wird man mit Emacs Lisp vertraut und kann den Code kommentieren und sinnvoll strukturieren.
Hier ein Screenshot des Customization Interface, welches mit M-x
customize
aufgerufen werden kann:
Zumeist ist im Web von der Datei ~/.emacs
zu lesen, die die
Konfiguration des GNU Emacs für den jeweiligen Benutzer enthält. Dies
ist aber nur eine der möglichen Initialisierungsdateien. Beim Start
sucht der Emacs nach folgenden Dateien in der angegebenen Reihenfolge:
~/.emacs
~/.emacs.el
~/.emacs.d/init.el
Es steht dabei dem Benutzer frei, welche Variante er verwenden
möchte. Da meine Emacs-Konfiguration mit der Zeit etwas umfangreicher
geworden ist und – wie gleich gezeigt wird aus mehreren Elementen
besteht – habe ich gerne alle Dateien zusammen in einem Verzeichnis,
welches dann auch unter Versionskontrolle steht. Aus diesem Grund
verwende ich die Datei ~/.emacs.d/init.el
und habe dementsprechend
keine ~/.emacs(.el)
.
Wenn die Emacs-Konfiguration umfangreicher wird und man sich angewöhnt
hat, ausführliche Kommentare zu den einzelnen Befehlen zu schreiben,
wird eine reine Emacs Lisp Datei wie die ~/.emacs.d/init.el
schnell
unübersichtlich. Auch hier kann der Org-mode helfen.
Ermöglicht wird dies durch die Magie der Erweiterung org-babel
,
welche Bestandteil des Emacs Org-mode ist. Diese Erweiterung
extrahiert die einzelnen Emacs Lisp-Elemente in diesem Text, so dass
sie vom Emacs bei der Initialisierung gelesen werden können.
Damit das Ganze funktioniert, muss jedoch zunächst der Emacs
Org-mode und damit org-babel
aktiviert werden. Dies erfolgt bei
mir über die Emacs-Initialisierungsdatei init.el
, die ich unten
wiedergebe.
Meine gesamte Emacs-Konfiguration besteht damit aus zwei Elementen,
~/.emacs.d/init.el
, die lediglich den
Org-mode startet und das Einlesen der eigentlichen
Emacs-Konfiguration einleitet, sowie
Hier der wesentliche Inhalt der Datei ~/.emacs.d/init.el
, die das
Einlesen der Emacs-Konfiguration initiiert:
(package-initialize)
(org-babel-load-file "/home/hendrik/projects/emacs-config/emacs-config.org")
Ich habe die eigentliche Konfiguration in der Datei emacs-config.org
vorgenommen. Diese sieht dann so aus:
* Einführung
Hier steht beliebiger Text.
* Konfiguration
Ein Befehl steht zwischen Source-Code-Tags wie im Folgenden zu sehen.
#+BEGIN_SRC emacs-lisp
(setq-default fill-column 90)
#+END_SRC
Wenn diese Datei beim Start von Emacs über die ~/.emacs.d/init.el
aufgerufen wird, extrahiert Org-Babel die Emacs Lisp Elemente,
erstellt eine Datei emacs-config.el
und liest diese im Rahmen der
Emacs-Initialisierung ein. In der Emacs Lisp Datei steht dann nur der
Teil aus dem Source Code Block:
(setq-default fill-column 90)
Ich stelle meine vollständige, kommentierten Emacs-Konfiguration zur Verfügung. Soweit mir die Rechte zustehen, stelle ich den Code gerne unter der MIT-Lizenz zur Verfügung.