(Photo by Paul Fehlerbauer on Unsplash)
Der Emacs ist eigentlich schon seit meiner Anfangszeit mit Unix ein treuer Wegbegleiter. Ich müßte eigentlich schon seit 34 Jahren mit ihm arbeiten (Emacs feiert dieses Jahr seinen 40.). Und es gab öfter Zeitpunkte, wo ich das System grundsätzlich neu angefaßt habe. Ja, bei mir ist es der Emacs und nicht der Vi…
Dabei habe ich das .emacs angepaßt und mit den
neuesten technischen Möglichkeiten modifiziert. Das fing damals mit
Highlighting an, dann habe ich jahrelang mit Gnus
meine Mails gelesen und vor etwas mehr als zehn Jahren bin ich auf
eine globale versionierte .dotfiles gegangen. Das war der Zeitpunkt,
wo ich den Emacs dann mit dem Melpa Package Manager befüllt
habe. Dazu gehörte auch der Org Mode, der mit
Getting Things
Done
meine Projektplanungen bereichert hat.
Das hatte dann zur Folge, daß ich nach und nach neue Funktionalitäten
einfach angeklebt hatte. Das .emacs wanderte nach
~/.config/emacs/init.el, aber eigentlich gab es keine wirkliche
echte Neuerung seitdem.
Seit ich mit Asahi Linux arbeite,
compiliere ich den Emacs selbst aus dem bleeding-Edge Zweig der
kommenden Version 29, die mittels pgtk unter Wayland nativ läuft,
was auf einem M1-Macbook gestochen scharfe Fonts zur Folge hat.
Dann bin ich Emacs From Scratch über den Weg gelaufen, welches auf einer Videoserie von System Crafters basiert. Diese Serie hat mich dann wiederum dazu bewogen, meine Konfiguration noch einmal über den Haufen zu schmeißen. Hier also eine Auflistung aller Neuerungen, die eine Bemerkung wert ist.
Konfiguration im Org-Mode
Die wohl wichtigste Neuerung ist die Konfiguration aus dem Org-Mode heraus. Durch Org-Babel ist man in der Lage, Code im Org-Mode zu schreiben und im Org-Mode laufen zu lassen. Das Ergebnis wird dann ebenfalls im Org-Dokument abgelegt. Ich bin mir nicht sicher, könnte aber sein, daß das vor Jupyter Notebook geschehen ist. Aber so kann man sich die Funktionalität in etwa vorstellen.
Was ich aber nicht wußte ist, daß man im Org-Mode Tanglen kann. Da werden dann die Codeschnipsel einer definierten Programmiersprache (man könnte ja Schnipsel unterschiedlicher Sprachen in einem Dokument haben) zusammenfassen und in einer anderen Datei ablegen.
Eine Headerzeile der Art
#+title: Emacs Konfiguration mit org-mode
#+PROPERTY: header-args:emacs-lisp :tangle init-neu.el :mkdirp yes
ist das einzige, was man dazu benötigt. In meiner .dotfiles gibt es
also nun eine Emacs.org mit der Dokumentation und die darin
enthaltene komplette Konfiguration. Wenn ich etwas neues ausprobiere,
packe ich den Codeschnipsel in einen emacs-lisp Codeheader (der
Codeschnipsel konfiguriert
no-littering. welches
die *~-Dateien zentral ablegt und damit nicht die Directories vollmüllt):
#+begin_src emacs-lisp
;; NOTE: If you want to move everything out of the ~/.emacs.d folder
;; reliably, set `user-emacs-directory` before loading no-littering!
;(setq user-emacs-directory "~/.cache/emacs")
(use-package no-littering)
;; no-littering doesn't set this by default so we must place
;; auto save files in the same path as it uses for sessions
(setq auto-save-file-name-transforms
`((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))
#+end_src
Natürlich hilft Babel bei der Formatierung der Zeilen, Highlighting included.
Dann kann ich das live mittels C-c C-c ausführen und testen. Gefällt
mir der Code, wird der mittels C-c C-v t in das init.el
geschrieben. Anschließend wird das noch mit Magit
versioniert und direkt ins Repository hochgeladen. Man braucht den
Emacs dazu also noch nicht mal zu beenden.
Das schönste aber: Git-Verwalter, wie z. B. GitHub, GitLab oder auch Gitea können nicht nur Markdown verarbeiten, sondern auch Org-Dateien. Damit ist die Dokumentation dann in meinem Gitea hübsch formatiert. Gitea kann sogar noch ein Inhaltsverzeichnis aus dem org-File bauen.
Wie sieht das dann am Ende aus? Am besten schaut man sich die Emacs.org bei Emacs From Scratch an.
use-package
Um den Melpa-Packagemanager auch über Rechner hinweg verwenden zu
können, hatte ich in meinem .emacs so ein Stück Code, wo dann die
ganzen Module aufgelistet wurden, die ich verwenden wollte. Wurde der
Emacs das erste Mal aufgerufen, wurden diese Pakete dann alle von
Melpa heruntergezogen und installiert.
Anschließend wurde dann für jedes Paket weiter unten im .emacs die
Konfigurationen vorgenommen. Das konnte teilweise sehr unübersichtlich
werden. Bei Emacs from Scratch wird das
use-package-Modul
verwendet. Dabei wird möglichst in einem Block sowohl das
Melpa-Packaging, die Konfiguration und die Keybindings
konfiguriert. Auch das obige no-littering verwendet das
use-package. Damit kann man in seiner Dokumentation Modul für Modul
dokumentieren und installieren.
Hier noch ein Beispiel, welches die Funktionalitäten von use-package
gut ausnutzt: Das Installieren von
emacs-which-key, welches
einem die möglichen Tastaturkombinationen anzeigt, hier mal als Beispiel.
#+begin_src emacs-lisp
(use-package which-key
:defer 0
:diminish which-key-mode
:config
(which-key-mode)
(setq which-key-idle-delay 1))
#+end_src
Hier sind so einige Unterkategorien, wie z. B. config: enthalten.
ivy-mode
Mit dem iv-mode der aus dem
Swiper-Modul kommt, macht die
Completion auf dem Emacs besser. Swiper selbst ist ein Super-Grep und
zusammen kann man wirklich alle Emacs-Befehle sehr schnell finden und
Popups liefern schöne Library-Vorschläge…
An den Modus habe ich mich ursprünglich nicht herangewagt, weil das schon ziemlich in die Mimik des Emacsschen Completions hereingreift. Aber mittlerweile finde ich das Ding schon ziemlich praktisch.
Damit kommen wir zum Development und…
lsp-mode
Visual Studio ist ja so beliebt, weil die IDE immer schön Vorschläge macht, automatisch linted (also live Syntax-Reparaturen macht) und formatiert. Hat alles Microsoft erfunden, obwohl der Emacs das locker 20 Jahre länger konnte. Jedoch mußte beim Emacs für jede Sprache ein eigenes IDE-System entwickelt werden. Heute wird aber der lsp-mode verwendet.

Heute werden für jede Programmiersprache Server geliefert, mit denen der Emacs über eine definierte Schnittstelle spricht. So ist die Oberfläche auf der Emacs-Seite immer gleich und man hat die komplette IDE-Umgebung, wie man sie mag.
emacs-easy-hugo
Dieses Blog wird mit Hugo geschrieben, einem Offline Blogging Frameword. Natürlich stellte sich da für mich die Frage, ob man nicht vom Emacs irgendwie integriert mit Hugo arbeitet. Und, oh Wunder, Emacs Easy Hugo macht genau das.

Dieser Post ist natürlich gerade auch mit diesem Modus endstanden.
Calibre
Irgendwann wird man dann natürlich neugierig. Ich organisiere meine Ebooks in Calibre., Kommt der Emacs da auch an die Daten? Natürlich. Mit calibre.el.

Zusammen mit dem Epub-Mode org-novelist, mit dem man Epubs im Emacs lesen kann, kann man also mit einer Calibre-Datenbank sogar komplett seine Bücher im Emacs organisieren und lesen.
devdocs
DevDocs ist eine Dokumentationssammlung, die man
auch offline im Browser abonnieren kann. Diese Sammlung kann man im
Emacs auch ansprechen, offline speichern und im Emacs dann auch
lesen. Zusammen mit dem lsp-mode und ivy hat man dann ein völlig
komplettes Doku/IDE-System.
Dazu verwendet man im Emacs devdocs.

mu4e
Früher habe ich meine Mails im Emacs mit Gnus gelesen. Das war ganz schön. Irgendwann wurden meine Mail-Setups aber auch wegen Self-Hosting komplexer und ich bin dann bin ich beim Thunderbird gelandet. Irgendwann hatte mal wer einen Super-Index von IMAP-Mailings gebaut, der zoe hieß. Das war ein fettes Java-Konstrukt, was eine Mailbox indizierte und man konnte in einer Weboberfläche in seinen Mails herumbrowsen. Das war hübsch, verschwand aber schon Anfang der 2010er.
So einen Indexer gibt es heute auch in Form eines kleinen Progrämmelchens: mu. Dieser Index greift auf ein Offline-Mailrepository zu, welches z. B. mit OfflineImap das eigenen IMAP-Mailaccount spiegelt. Hat mehrere Vorteile:
- man hat schonmal eine Offline-Kopie seines IMAPs
- die Mails können sehr schnell durchsucht werden
- die Benutzeroberfläche des Systems ist mu4e und läuft auf dem Emacs.

Damit räume ich nun jeden Tag meine ganzen täglichen Mails auf. Da der mu4e über alle Verzeichnisse geht, brauche ich nicht im Thunderbird alle Verzeichnisse zu durchwühlen. Der nächste Sync läßt das dann auch im Thunderbird auftauchen.
Super
Mit diesen und vielen anderen weiteren Helferlein, macht der Emacs noch mehr Spaß.