Emacs: Konfiguration

Mo, 20.07.2015 - 16:55
Emacs Logo: Emacs Schriftzug mit galoppierendem Gnu darüber.

Dieser Text enthält einige Tipps zum Konfigurieren von Emacs.

Übersicht über Konfiguration behalten

Normalerweise befinden sich alle Konfigurationskommandos von Emacs in einer zentralen Datei namens .emacs. Das ist zwar sehr einfach, aber im Laufe der Zeit sammeln sich dort immer mehr Werte an und die Sache wird sehr unübersichtlich.

Ordnung kann man z.B. mit dem Paket my-site-start (https://github.com/tripleee/my-site-start/) schaffen. Das Paket liest standardmäßig alle Dateien im Verzeichnis

.emacs.d/site-start.d/

ein, die dem Schema "[0-9[0-9]*.elc?" folgen. Außerdem werden eventuell vorhandene Verzeichnisse rekursiv durchlaufen.

Die Abarbeitung geschieht alphabetisch. Dateien mit genau zwei Ziffern am Anfang werden zuerst geladen (und gestartet), während die anderen Dateien erst danach abgearbeitet werden. Dateien mit nur einer oder gar keiner Ziffer zu Beginn werden ignoriert.

Damit dies funktioniert, muss folgender Code in die locale .emacs-Datei:

(autoload 'my-site-start "~/.emacs.d/my-site-start/my-site-start" nil t)
(my-site-start "~/.emacs.d/site-start.d/")

Hier sind die Dateien des Pakets "my-site-start" einfach als kompletter Ordner unter "~/.emacs.d/" abgelegt worden (es würde auch die my-site-start.el-Datei reichen).

Unter ~/.emacs.d/site-start.d/ befinden sich nun meine Startdateien:

01.start.el
10deactivate.el
20activate.el
21recently-visited-files.el
30elpa.el

Der gleiche Mechanismus wird übrigens bei Debian-Systemen beim Starten von Emacs angewandt, um Emacs-Lisp-Pakete, die per apt oder aptitude eingespielt wurden, dem Editor bekannt zu machen. Die Konfigurations-Dateien der installierten Emacs-Pakete liegen dann unter

/etc/emacs/site-start.d/

Diese systemweiten Dateien werden zuerst geladen; danach folgen die Dateien aus dem lokalen .emacs.d/site-start.d/-Verzeichnis des Benutzers.

Paket-Verwaltung erweitern

Emacs enthält (seit Version 24.1) einen Paketmanager package.el, mit dem man bequem auf die Pakete des GNU Emacs Lisp Package Archive (GNU Elpa, https://elpa.gnu.org/) zugreifen kann. Per

M-x package-list-packages

kann man bequem auf die Liste der verfügbaren Pakete zugreifen und ggfs. installieren. Die Tastatur-Bedienung ist sehr einfach; eine Kurzhilfe erhält man durch den Buchstaben "h".

Dort sind aber „nur” die GNU-Pakete für Emacs aufgeführt. Es gibt aber eine ganze Reihe weiterer Archive mit vielen interessanten Paketen. Die lassen sich sehr einfach hinzufügen. Ich habe dazu eine Datei

~/.emacs.d/site-start.d/30elpa.el

eingerichtet, die folgenden Inhalt hat:

;; elpa
(require 'package) ;; You might already have this line

;; Verschiedene Paketquellen:
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                        ("marmalade" . "https://marmalade-repo.org/packages/")
                        ("melpa" . "http://melpa.org/packages/")))

(package-initialize) ;; You might already have this line

Dinge, die ich nicht benötige und daher abschalte

Alles, was mich beim Emacs stört, wird mit Hilfe von Eintragungen im Bereich 10, beginnend mit Datei 10deactivate.el eliminiert. Dazu gehören so nervige Dinge wie der Splash-Screen beim Start als auch jegliches Gepiepse beim Arbeiten. Beispiel-Inhalt:

;; 10deactivate.el

;; prevent silly initial splash screen
(setq inhibit-splash-screen t)

;; beep and ignore disabled commands
(setq disabled-command-hook 'beep)

;; no overwrite mode
(put 'overwrite-mode 'disabled t)

Dinge, die ich unbedingt benötige und daher aktiviere

Andererseits gibt es sehr viele Optionen beim Emacs, die ich nicht missen möchte, die aber standardmäßig nicht aktiviert sind. Solche Dinge werden im Bereich 20, beginnend mit Datei 20activate.el behandelt. Beispiel:

;; 20activate.el

;; Show column numbers:
(setq-default column-number-mode t)

;; Desktop
(desktop-save-mode 1)

;; ido (Interactively Do Things)
(require 'ido)
    (ido-mode t)

Insbesondere der-Mode (InteractivelyDoThings) hat es mir angetan, denn damit erspare ich mir regelmäßig sehr viele Tastendrücke. IDO ist seit Emacs 22 standardmäßig dabei und muss nur noch aktiviert werden.

Es gibt ein kleines Youtube-Video

https://www.youtube.com/watch?v=lsgPNVIMkIE

in dem eine Reihe an Möglichkeiten aufgezeigt werden, die IDO so drauf hat.