Systematik der Emacs-Konfiguration

Letzte Aktualisierung: 29. Januar 2017

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.

Emacs Customization Interface

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:

Drei mögliche Initialisierungsdateien zur freien Auswahl

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).

Konfiguration des Emacs in Org-mode Dateien

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,

  • der sogleich zitierten Datei ~/.emacs.d/init.el, die lediglich den Org-mode startet und das Einlesen der eigentlichen Emacs-Konfiguration einleitet, sowie
  • der im Org-mode geschriebenen Konfigurationsdatei.

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.

Vorteile der Emacs-Konfiguration in Org-mode Dateien

  • Es können einfacher umfangreiche Kommentare samt Tabellen etc. direkt in der Konfigurationsdatei hinterlegt werden.
  • Der Org-mode ist ein Outliner, man kann also die verschiedenen Sektionen ein- und ausklappen und behält so leichter den Überblick.
  • Man kann Aufgaben direkt in der Konfigurationsdatei definieren und die Dateien in die Agenda Files des Org-mode einbeziehen, so dass die Aufgaben in der Org-Agenda erscheinen. Wenn man an der Konfiguration weiter arbeiten möchte, springt man aus der Org-Agenda direkt in die Konfigurationsdatei an die richtige Stelle.
  • Man kann die Datei samt aller Kommentare in die verschiedensten Formate (HTML, PDF etc.) exportieren. So stelle ich in dieser Form beispielsweise meine vollständige Emacs-Konfiguration zur Verfügung.