Emacs

Aus wiki.archlinux.de


(ich arbeite in den nächsten Tagen an dieser Datei! T.M. 19.08.2009)


Emacs ist

  • ein sehr umfangreicher und mächtiger, enorm weit verbreiteter Editor,
  • eine Programmierplattform und Laufzeitumgebung für Lisp-Anwendungen, beispielsweise News- und Mail-Clients,
  • eine offene Entwicklungsumgebung.

Manche witzeln, er sei ein eigenes Betriebssystem. Die folgende Präsentation gibt mit vielen screenshots einen guten Überblick [[1]].

Emacs wurde 1984 von Richard Stallman in Lisp begonnen und steht unter der GPL.


Abgrenzung: Es kann nicht Sinn dieser Abhandlung sein, emacs in seiner Funktion zu erklären oder gar zu dokumentieren. Zu emacs gibt es tonnenweise Material im Internet (siehe Links), teilweise auch auf Deutsch, so daß man sich jederzeit konkret und detailliert informieren kann. Ziel ist hier, die Installation und Konfiguration zu erläutern und einen Überblick über die wichtigsten Funktionen zu geben, was als Anregung zum Ausprobieren verstanden werden soll.


Installation

Emacs kann mithilfe von pacman installiert werden:

pacman -Sy emacs

Diese binaries sind für GTK compiliert und enthalten die typischen Dekorationen und Stile für Menü, Toolbar, Scrollbars usw., zudem auch die üblichen Datei-Dialoge.

Wer emacs ohne GTK betreiben will, kann sich problemlos die Quellen beschaffen und selbst compilieren. Es besteht per configure-Option die Möglichkeit, die Verwendung der Motif-Bibliotheken zu erzwingen (diese stehen als pacman-Paket openmotif zur Verfügung) oder ganz auf die Verwendung eines Toolkits zu verzichten und rein für X11 zu compilieren, was emacs ein rustikaleres Aussehen gibt, aber möglicherweise eine halbe Sekunde Ladezeit spart.

Starten

Um Emacs zu starten, muß man nur

emacs

in die Konsole eingeben. Befindet man sich unter X11, wird die X11-Fassung von Emacs in einem neuen Fenster gestartet. Es wäre ratsam, in diesem Fall emacs mit & zu starten:

emacs &

da er sonst das Terminal blockiert. Wenn man Emacs unter X11 im aktuellen Terminal starten möchte, ohne daß ein neues Fenster geöffnet wird, so kann man

emacs -nw 

eingeben, dann in jedem Falle ohne &.

Sofern kein X11 läuft, kann man emacs auch auf der Kommandozeile starten, wobei der Zusatz -nw nicht notwendig ist. Möglicherweise funktionieren allerdings einige Tasten anders (ausprobieren). Das Menü wird aus Platzgründen normalerweise nicht angezeigt, man kann es mit der Funktionstaste F10 hervorholen.

Emacs bietet ein Modell an, bei dem quasi ein emacs-Dämon als Server läuft, während die später interaktiv vom Benutzer gestarteten emacs-Prozesse jeweils Clients dieses Servers werden. Der Vorteil liegt vor allem in geringerer Ladezeit. Näheres hier [[2]]

Man wird allerdings selten emacs immer und immer wieder starten, wie man es vielleicht von vi her kennt. Emacs bietet (beispielsweise mit dired) andere Möglichkeiten an, schnell Dateien zu öffnen, so daß das ständige Laden eigentlich überflüssig wird. Viele Benutzer haben ihren emacs stunden- und tagelang offen. Eine Frage des persönlichen Geschmacks.


Bedienung

Emacs wird üblicherweise vollständig über die Tastatur gesteuert. Er besitzt die Besonderheit, daß auch mehrere separate Tasten(kombinationen) hintereinander einen einzelnen Befehl auslösen können, beispielsweise nacheinander C-s und C-f (Datei öffnen). Tastenkombinationen können zudem (zumindest auf europäischen Tastaturen) auch aus drei Tasten bestehen, beispielsweise M-% (Suchen und Ersetzen), was auf einer deutschen oder schweizer Tastatur zu S-M-5 wird. (Zur Notation von Tastenkombinationen siehe hier [[3]] und [[4]])

Die enorme Anzahl der Tastenkombinationen und ihre oft merkwürdige Anordnung auf der Tastatur haben in den letzten 20 Jahren zu viel Spott geführt. Man benötigt aber in der Tat nur einen kleinen Teil davon, wenige Prozent, und diese kann man lernen, es ist weit weniger schwer als es zunächst aussieht.

Eine vollständige, aus der jeweils aktuellen Konfiguration des Editors heraus gebildete Liste aller Tastenkombinationen erreicht man mit

C-h b

Die Tastenkombinationen sind dort mit den durch sie ausgelösten Lisp-Funktionen aufgeführt, auf welche auch hypertextartig geklickt werden kann, um an nähere Informationen zu gelangen.


Es existiert darüberhinaus eine zentrale Möglichkeit, im sog. Mini-Buffer, den man über M-x erreicht, eine Lisp-Funktion mit ihrem Namen und ggf. Argumenten anzugeben und auszuführen. Dies scheint oft die komfortablere Möglichkeit, da man sich ggf. eher noch an verbale Begriffe erinnert als an Tastenkombinationen.


Aufgrund der begrenzten Möglichkeiten, die ihre zwei oder drei Knöpfe bieten, gibt es nur wenige Funktionen, die auf der Maus liegen. Allerdings sind die Mausknöpfe auch mehrfach, nämlich noch im Zusammenhang mit Shift und Ctrl belegt.


Ein sehr gut brauchbares Tutorial findet man im Editor selbst:

C-h t

oder im Help-Menü gleich der erste Eintrag. Es lohnt sich, dieses mal abzuarbeiten. Siehe ferner auch hier [[5]]


Emacs konfigurieren

In emacs ist praktisch alles konfigurierbar. Und es gibt nicht zwei emacse, die gleich konfiguriert sind. So wird jeder emacs zu einem ganz individuellen Werkzeug, abgestimmt auf die persönlichen Bedürfnisse und Fähigkeiten seines Benutzers.


Konfigurationsdateien

...


Menügesteuerte Konfiguration

...


Customizing

...


Funktionsüberblick

Dateiverwaltung in emacs

Es gibt mehrere Implementierungen von Dateiverwaltungen unter emacs (selbst solche mit zwei gegenüberliegenden Seiten). Die bekannteste davon, die auch standardmäßig mit jedem emacs mitgeliefert wird, ist dired (directory editor). Man startet dired über

M-x dired RET   oder   C-x d

wobei man in letzterem Falle noch das Startverzeichnis bekanntgeben oder RET drücken muß. Dired listet dann augenblicklich in einem eigenen buffer die Dateien und Verzeichnisse unterhalb des Startverzeichnisses auf, meist so wie "ls -alF" und hoffentlich auch in Farbe. Auf diesen Einträgen kann man eine Vielzahl an üblichen Datei- bzw. Verzeichnisoperationen ausführen. Erwähnt sei die Möglichkeit, auch mehrere Verzeichnisse untereinander in einem dired-buffer darzustellen, was oft sehr praktisch ist.


Shell in emacs

Es gibt zwei Implementierungen für shell-Betriebsarten unter emacs: shell und eshell.

M-x shell RET   oder   M-x eshell RET

Man kann nicht sagen, welche besser oder komfortabler sei - sie sind verschieden. Beide Varianten nehmen (wie in einem Terminal) an einem Prompt gewöhnliche Benutzereingaben entgegen, führen diese aus und stellen die Ausgaben wieder im gleichen buffer dar.

Der wesentliche Unterschied zwischen beiden Varianten ist, daß shell tatsächlich im Hintergrund eine default-sh des Benutzers startet, meist also bash, mit vorschriftsmäßiger Initialisierung, so daß also beispielsweise auch in .bashrc definierte Aliase gleich funktionieren, während eshell in Lisp programmiert ist und nur die eingegebenen Kommandos als externe Prozesse startet. Eshell kann deshalb auch einfach über Schließen des buffers (C-x k RET) beendet werden, während man in shell explizit exit schreiben oder Ctrl-D drücken muß, um den im Hintergrund laufenden sh-Prozeß zu beenden, und erst dann den buffer schließen darf.

Hey, man kann in eshell (nicht in shell) sogar vim starten! (Na, wenn das nicht etwas ist, auf das emacs-Benutzer lange gewartet haben ...)


Emacs als Entwicklungsumgebung

Man kann emacs hervorragend als Entwicklungsumgebung benutzen, sofern man unter "entwickeln" Quelltexte editieren, compilieren und debuggen meint. Emacs bietet für fast alle dieser Vorgänge hilfreiche Unterstützungen an, ohne daß man allerdings von echter Integration sprechen könnte. Der Vorteil liegt in der Offenheit in so ziemlich jeder Hinsicht.


Editieren

Das Editieren von Quelltexten findet in normalen Text-buffern statt. Emacs lädt verschiedene Modi, sobald er erkennt, daß es sich um eine Quelldatei eines bestimmten Typs handelt, um beispielsweise Syntax Highlighting und Indenting (sog. font-locking) durchzuführen. So wird bei Dateien mit der Endung .c oder .cc (.cpp, .c++, .cxx, .C, .h, .hpp, .H, ...) automatisch der cc-mode geladen, der C- und C++-Dateien farbig anzeigt. Ähnliches gilt für Java-, Lisp- oder XML- und unzählige andere Dateien.

Das Indenting (automatisches Einrücken) ist nicht jedermanns Sache. Es verwirrt auch leicht oder wird lästig, wenn es nicht den eigenen Gewohnheiten entspricht. Man kann es in gewissen Grenzen konfigurieren. Einige modes bieten die Möglichkeit, es ganz abzuschalten, beispielsweise der cc-mode: (c-syntactic-indentation nil).

Es macht sich sehr gut (und ist für die meisten Vorhaben völlig ausreichend), wenn man einen dired buffer benutzt und darin die Quelldateien auflistet. Dann kann man sehr schnell von einer Datei zur anderen wechseln. Dired kann übrigens auch als Client für Versionskontrollsysteme (cvs, weitere?) benutzt werden.


Browser für Quellcode

Wer niveauvollere Möglichkeiten sucht, in seinen Quelltexten zu navigieren, dem stehen verschiedene Varianten zur Verfügung.

Wer gewohnt ist, mit tags (beispielsweise ctags) zu arbeiten, kann seine tags-Dateien unter emacs benutzen:

M-x tags-search RET   oder   M-x tags-apropos RET

emacs listet daraufhin alle Vorkommen des gesuchten tags in einem eigenen buffer auf, so daß man sie einfach durchlaufen kann.


Etwas anderes ist die Speedbar.

M-x speedbar RET

Dies öffnet ein (normalerweise separates) Fenster, das die aktuelle Quelldatei (oder ein ganzes Verzeichnis) nach bestimmten Regeln parst und quasi ein dynamisches Inhaltsverzeichnis mit den darin gefundenen Klassen und Funktionen anzeigt (screenshot [[6]]). Die Speedbar erfordert überlicherweise keinerlei Konfiguration und zeigt sofort brauchbare Ergebnisse, um sehr schnell zu navigieren. Es gibt mehrere Versuche, die Speedbar in einen buffer des aktuellen Fensters zu integrieren, damit nicht ein separates Fenster auf dem Bildschirm geöffnet wird (siehe [[7]]).


Ein vergleichsweise komplexes Werkzeug ist der Emacs Code Browser (ECB [[8]], screenshot [[9]]), der (zusammen mit der Bibliothek cedet) separat installiert werden muß:

pacman -Sy cedet ecb

Nicht vergessen, einen load-path in das Verzeichnis zu setzen. Dann kann man mit

M-x ecb RET

den ECB öffnen und erhält mehrere kleine buffer, die Verschiedenes anzeigen. Man muß später noch ein wenig daran konfigurieren. Im Gegensatz zu Speedbar legt ECB Metainformationen in eigenen Dateien ab, weshalb ECB bzgl. der Quelldateien auch dateiübergreifende Informationen liefern und Operationen ausführen kann. ECB geht allerdings auf Kosten der Performance.

Compilieren

Das Compilieren (und Linken und alles, was man noch so darunter versteht) startet man unter emacs mit

M-x compile RET

Dies ruft normalerweise make auf, so daß ein Makefile im aktuellen Verzeichnis existieren sollte. Wer ein anderes Build-Werkzeug verwendet, kann dies konfigurieren. Die Ausgaben dieses Werkzeugs gelangen in den compilation buffer, wo eventuelle Fehler später leicht durchlaufen werden können. In den übrigen buffern kann man selbstverständlich weitereditieren.


Debuggen

Das Debuggen erfolgt üblicherweise mit gdb, wofür emacs ein eigenes Frontend zur Verfügung stellt, den Grand Unified Debugger (GUD). Man startet ihn mit

M-x gdb RET

wobei nach dem Namen des executables gefragt wird, was man meist mit RET bestätigen kann. Man bekommt zunächst zwei buffer, in einem läuft gdb mit seinem Prompt, in dem anderen wird die aktuelle Ausführungsposition in einer Quelldatei angezeigt.

GUD beherrscht allerdings noch eine wesentlich komfortablere Darstellungsform mit Toolbar und mehreren kleinen buffern, wo auch der stack frame, lokale Variablen, Watches usw. dargestellt werden (screenshot [[10]]). Dazu muß man GUD aber explizit konfigurieren: (gdb-many-windows t).


Emacs und (LA)TEX

(wer schreibt das?)


News und Mail in emacs

Emacs besitzt standardmäßig mehrere mail-Betriebsarten (mail, mh, rmail) unterschiedlichen Funktionsumfangs, sowie einen universalen mail/news/rss-Client in Lisp (Gnus). Letzterer ist die umfassendste Variante, erfordert aber auch die komplexeste Konfiguration sowie einige Übung im Umgang. Dafür erhält man eines der leistungsfähigsten Programme dieser Art auf der Welt (screenshots [[11]], [[12]]).


M-x mail RET

öffnet einen buffer, in dem man eine e-mail-Nachricht schreiben kann. Oben stehen ein paar Headerzeilen, die man ausfüllt, darunter der Text der Nachricht. Mit C-c C-c kann man diese Nachricht dann abschicken, wobei sie dem default-Programm zum Senden vom e-mail übergeben wird, wahrscheinlich sendmail, möglicherweise aber auch einer GUI-Applikation wie Thunderbird.


(wer kennt sich mit mh und/oder rmail aus? Ein paar Worte bitte ...)


M-x gnus RET

öffnet Gnus. man gelangt in den sog. group buffer, in welchem (ggf. thematisch sortiert) die news groups aufgelistet sind, die der Benutzer abboniert hat. Dort erscheinen auch seine e-mail-Postfächer sowie RSS-feeds. Jeweils neu eingetroffene Nachrichten werden hinter diesen Gruppen als Anzahl angezeigt und man kann durch RET in den summary buffer wechseln, um die Subjects und Poster der neuen Nachrichten zu sehen. Im summary buffer kann man wiederum RET drücken und gelangt in den article buffer, wo man die ausgewählte Nachricht lesen und auch beantworten kann.

Gnus kann POP3- und IMAP-Postfächer und selbst den Inhalt von Verzeichnissen auf der Festplatte abfragen, ist in der Lage, beim Senden und Empfangen verschiedene Verschlüsselungen anzuwenden und kann bedingt auch HTML rendern oder Artikel "waschen" (insbesondere solche, die von Outlook stammen). Gnus kann auch mit Hilfe des Gnus Agent als Offline-News-Reader eingesetzt werden. Dabei werden die Artikel lokal in einem Verzeichnis(baum) gespeichert. Gnus besitzt ausgeklügelte Filter- und Scoring-Möglichkeiten.

Der Leistungsumfang von Gnus ist so vielfältig, daß ihm ein eigenes Manual gewidmet ist [[13]]. Es lohnt sich, dieses Manual durchzuarbeiten, um die obligatorische Konfiguration durchführen zu können. Die resultierende Konfigurationsdatei .gnus ist zwar meist überschaubar, allerdings etwas knifflig in der Erstellung. Erschwert wird die Konfiguration dadurch, daß Gnus auf anderen Komponenten (message) aufbaut, die separat konfiguriert werden. Siehe ferner auch hier [[14]]


Internet in emacs

Eine sehr interessante Erweiterung für emacs ist das Lisp-Paket emacs-w3m [[15]], eine Schicht, die es erlaubt, den Textbrowser w3m in emacs laufen zu lassen, d.h. von emacs aus vollständig zu bedienen. Man muß dann emacs nicht mehr verlassen, um mal schnell eine Internetsuche durchzuführen.

emacs-w3m wird nicht mitgeliefert. w3m (der eigentliche Browser) und emacs-w3m können über pacman installiert werden:

pacman -Sy w3m emacs-w3m

Man muß anschließend sehr wahrscheinlich einen load-path in seine .emacs einfügen, damit emacs das Paket findet. Man startet emacs-w3m über

M-x w3m RET

Man kann emacs-w3m später konfigurieren, es wird aber auch ohne Konfiguration schon brauchbare Ergebnisse liefern.


Emacs erweitern

Emacs ist offen für Erweiterungen in Lisp. Man kann entweder bestehende Lisp-Dateien und -Pakete hinzufügen oder selbst welche schreiben. Es existieren zahlreiche Verzeichnisse, auf denen man sehr interessante Pakete für die unterschiedlichsten Zwecke findet, besonders die Emacs Lisp List (ELL [[16]]), die seit vielen Jahren schon existiert und immer noch gepflegt wird.

Auf Unix-artigen Systemen wird man nicht im globalen Lisp-Verzeichnis Änderungen vornehmen wollen oder dürfen. Deshalb ist es ratsam, im home-Verzeichnis des Benutzers ein lokales Lisp-Verzeichnis anzulegen. Dieses ist in der .emacs mit einem load-path zu konfigurieren, damit emacs auch dort nach Lisp-Dateien sucht.

Es empfiehlt sich, die dort liegenden .el-Dateien in .elc-Dateien zu compilieren, um die Ausführung etwas zu beschleunigen.


Dokumentation

Emacs ist self documenting, d.h. in jedem Belang ausführlich dokumentiert. Diese Dokumentation ist jederzeit im Editor selbst abrufbar. Man startet sie über

C-h r

und gelangt in den emacs-eigenen Info-Browser. Den Umgang mit dem Info-System, einem Vorläufer von HTML, muß man etwas üben. Die dazu nötigen Tasten stehen am oberen Rand des buffers. Merken muß man sich vor allem u (up).


Es gibt auch eine FAQ-Liste, die man über

C-h C-f

erreicht.


Weitere Hinweise zur Bedienung gibt emacs selbst auf seinem Startbildschirm.

Links

Gnu Emacs Manual (entspricht den mitgelieferten Info-Seiten, nur hier in HTML) [[17]]

Gnu Emacs verwandte Seiten [[18]]

Emacs-Einsteiger-Dokumentation auf SelfLinux [[19]]

EmacsWiki [[20]]

Emacs Lisp List [[21]]

Eine Liste mit interessanten Erweiterungen (Lisp) [[22]]