# Emacs

Emacs (Aussprache [ˈiːmæks], Plural: Emacsen) ist eine Familie von Texteditoren. Die erste Emacs-Implementierung wurde von Richard Stallman (zusammen mit Guy L. Steele, Jr. und anderen) entwickelt. Besonders populär ist heute der GNU Emacs, der durch seine Programmierschnittstelle in der Programmiersprache Emacs Lisp mit beliebigen Erweiterungen ausgestattet werden kann. Es ist der Editor des GNU/Linux-Projekts. Es gibt aber auch noch eine Vielzahl von anderen Editoren, die zur Emacs-Familie zählen.

## Geschichte

Emacs entstand 1976 am MIT zunächst als Sammlung von Makros für den Editor TECO. Der Name ist die Abkürzung von „Editor MACroS“.
1978/79 portierte Bernard Greenberg den Editor auf das Großrechner-Betriebssystem Multics. Er benutzte dazu die Programmiersprache Maclisp.
1981 schrieb James Gosling den ersten Emacs für Unix-Systeme in C. Die Erweiterungssprache Mocklisp ähnelt Lisp, kennt aber keine strukturierten Datentypen. Gosling schränkte die Verbreitung zunächst nicht ein, aber verkaufte den Code später an UniPress, die diese Version als UniPress Emacs vertrieben. Gosling Emacs zeichnet sich durch einen hocheffizienten Code zur Textausgabe aus; Stallman verwendete Teile des Gosling-Codes in GNU Emacs, was später zu einer Kontroverse mit UniPress führte.
1984 begann Richard Stallman an einer neuen Implementierung von Emacs, GNU Emacs, zu arbeiten, die das erste Programm des damals entstehenden GNU-Projekts wurde. Die Lizenz des Programms war zu Beginn der Entwicklung die GNU Emacs General Public License. Es war die erste Copyleft-Lizenz und die Grundlage für die später entwickelte GNU General Public License (GPL). GNU Emacs ist zum größten Teil in Emacs Lisp, einem eigenen Dialekt der Lisp-Programmiersprache, programmiert. Diese Lisp-Version von Emacs fußt nicht auf Greenbergs in Maclisp geschriebenem Multics-Emacs, der ersten Lisp-Version, und benutzt auch ganz andere Datenstrukturen. Den Kern bildet ein in C geschriebener Interpreter für Emacs Lisp. Gerd Möllmann hat Version 21 (21.1 und 21.2) als Hauptprogrammierer betreut und veröffentlicht. Richard Stallman ist seit 2008 nicht mehr alleiniger Emacs-Maintainer. In der Folge waren Stefan Monnier, John Wiegly, Eli Zaretskii, Stefan Kangas und Andrea Corallo wichtige Teilnehmer des Projekts. In das Jahr 2008 fiel auch der Wechsel der Quelltextverwaltung von CVS zu Bazaar; seit 2014 wird Git verwendet. Version 23 wurde im Jahr 2009 fertiggestellt. Seit 2012 gibt es mit package.el einen eigenen Paketmanager, der auf die Repositorien GNU ELPA und NonGNU ELPA sowie auf das deutlich freiere MELPA mit mehreren tausend Paketen zugreifen können. Seit Mai 2024 wird das Emacs-Projekt gemeinsam von Richard Stallman, Eli Zaretskii und Andrea Corallo geleitet.
Wie Clifford Stoll aufdeckte, ermöglichte eine Sicherheitslücke in Emacs 1986 dem für den KGB spionierenden Hacker Markus Hess den Einbruch in das Lawrence Berkeley National Laboratory.

## Varianten

Von Emacs wurden einige Varianten entwickelt, die am weitesten verbreitete ist GNU Emacs. Bekannt ist auch MicroEmacs, der unter anderem mit AmigaOS ausgeliefert wurde.
Aquamacs von David Reitter und Win Treese ist eine an die Human Interface Guidelines angepasste Emacs-Variante für macOS, die – wie der ehemalige Carbon Emacs von Seiji Zenitani – viele zusätzliche Pakete bereits vorinstalliert enthält. Aquamacs kann aber auch so konfiguriert werden, dass man ihn über die klassische Emacs-Bedienoberfläche verwenden kann. Plattformübergreifend verfügbar sind zwei Emacs-Distributionen, die sich vorwiegend an Anfänger wenden, Spacemacs und Doom Emacs.
Eine besonders kleine, aber dennoch recht leistungsstarke Version ist Zile. Der Name ist ein rekursives Akronym und bedeutet Zile is lossy Emacs.

### GNU Emacs

GNU Emacs ist als freie Software unter der GNU General Public License erhältlich und läuft auf den meisten heute üblichen Betriebssystemen (Unix, GNU/Linux, macOS und Windows). Der einfache GNU Emacs ohne zusätzliche Erweiterungspakete wird auch als Vanilla Emacs bezeichnet.

#### Besonderheiten

GNU Emacs bietet eine ganze Reihe an Betriebsarten (englisch modes), die bei der Erstellung von Quelltext für diverse Programmier- bzw. Auszeichnungssprachen hilfreich sind. So kann man Emacs z. B. als HTML-Editor verwenden, der auch Syntaxüberprüfungen vornimmt.
Syntaxhervorhebung wird in den meisten dieser Betriebsarten unterstützt. Dabei wird der Text aufgrund der Syntax des bearbeiteten Textes (LaTeX, HTML, Perl, Java und andere) eingefärbt, was dem Benutzer die Orientierung erleichtert. Die Modi bieten in der Regel wesentlich mehr als eine Syntaxhervorhebung: Übersetzungsvorgänge, Syntaxprüfer, Debugger und dergleichen mehr lassen sich von Emacs aus aufrufen.
In der Grundkonfiguration verfügt GNU Emacs bereits über einen Kalender, mehrere News- und Mailreader mit POP- und IMAP-Unterstützung, eine eingebaute Shell, Spiele, einen FTP-Client und einen Webbrowser. Es gibt zusätzlich zahlreiche Tools, die in Emacs eingebunden werden können, darunter IRC-Clients, IM-Clients, Adressbücher, Audioplayer und sogar Webserver.
GNU Emacs ermöglicht per Wiki Mode das Bearbeiten von Webseiten als Wikitext.
Zum Spaß und zur Demonstration, was mit Emacs Lisp alles möglich ist, enthält GNU Emacs mit ELIZA ein Programm zur Unterhaltung mit einem vom Computer generierten „Psychologischen Psychotherapeuten“ (Aufruf mit „M-x doctor“; „M-x“ ist z. B. „ESC x“ oder „Alt-x“). Das Programm wandelt Aussagen des Benutzers in Fragen um, ermuntert ihn, mehr zu erzählen, und suggeriert Lebensprobleme allgemeinster Art. Ein weiterer nostalgischer Zusatz ist ein Textadventure („M-x dunnet“).
Man kann GNU Emacs auch als eine Umgebung zur Programmierung von Spezialeditoren betrachten; so gibt es einen po-mode, mit dem man Übersetzungen erstellen kann.

#### Bedeutende Erweiterungen

* AUCTEX: Enthält viele Funktionen, die die Erstellung von TeX- und LaTeX-Dokumenten erleichtern.
* CEDET: Eine Sammlung von Tools, um Emacs zu einer umfangreicheren Entwicklungsumgebung zu machen. Enthält unter anderem Project-Management, Parser für einige Programmiersprachen, Autocompletion und einen UML-Editor. Außerdem enthält CEDET eine CLOS ähnliche Implementierung von Objektorienterter Programmierung für elisp. Seit September 2009 ist CEDET Teil der Entwicklungsversion von GNU Emacs.
* Deft dient zur Verwaltung von Notizen mit Integration von Org-mode, Markdown-Mode und weiteren Text-Modes.
* Dired: ist ein Dateimanager in Emacs.
* Emacspeak: Ein Screenreader für Emacs, entwickelt von T. V. Raman
* ERC und rcirc sind IRC-Clients, die vorinstalliert sind.
* EWW (Emacs Web Wowser, vorinstalliert) und emacs-w3m sind Webbrowser für Emacs. Beide sind in Emacs Lisp geschrieben. Emacs-w3m verwendet w3m. Die Erweiterungen laufen sowohl unter der grafischen Oberfläche als auch in der Textkonsole.
* Flymake (vorinstalliert) und das etwas modernere und umfangreichere Flycheck suchen nach Syntaxfehlern im Quelltext für viele Programmiersprachen; seit Emacs 29.1 steht Eglot als LSP-Unterstützung standardmäßig bereit (kann mit beiden Syntax-Checkern eingesetzt werden; für Flycheck gibt es flycheck-eglot).
* Gnus: Ein umfassend konfigurierbarer Mail- und Newsclient.
* Ido, Helm, Ivy und Vertico sind Erweiterungen, mit denen die interaktive Auswahl im Mini-Buffer vereinfacht werden soll. Ido ist seit GNU Emacs 22 standardmäßig vorinstalliert. Für die Vervollständigung bei der Texteingabe (completion-at-point) gibt es das etwas ältere company und die neueren Lösungen corfu und cape.
* Magit stellt eine Bedienoberfläche für die Versionsverwaltung Git bereit. Bereits in Emacs integriert ist die Erweiterung Version Control, die auch mit anderen Versionsverwaltungen zusammenarbeitet.
* Org-mode: Ein Modus zur Gliederung von Text, der in reinen Textdateien erfasst wird. Der Mode ermöglicht das Schreiben von Dokumenten, Webseiten, Todo-Listen und lässt sich außerdem als Organizer und zur Konvertierung zwischen verschiedenen Textformaten nutzen. Ab Version 22 ist org-mode offiziell in GNU Emacs enthalten.
* Projectile und Project (vorinstalliert seit Emacs 26.1) sind Erweiterungen zum Projektmanagement für die Softwareentwicklung.
* SLIME: ist eine Entwicklungsumgebung für Common Lisp.
* Package.el stellt seit GNU Emacs 24 standardmäßig eine benutzerfreundliche Bedienoberfläche zur Auswahl und Installation von Erweiterungspaketen bereit.

## Humor

Richard Stallman hat scherzhafterweise den Editor Emacs zu einer Spaßreligion erhoben, der „Church of Emacs“, und bezeichnet sich selbst als St. IGNUcius. Als Glaubensbekenntnis muss man dreimal „There is no system but GNU, and Linux is one of its kernels.“ sagen. Dazu gibt es noch die Newsgroup alt.religion.emacs, die sich dieser Parodie widmet. Als Reaktion darauf gründeten die Anhänger des Konkurrenz-Editors vi den Cult of Vi.
Benutzer haben weitere, scherzhafte Deutungen aus Eigenarten von Emacs abgeleitet: Eight Megabytes And Constantly Swapping (Acht Megabyte groß und swappt dauernd) nimmt den für damalige Zeiten großen Arbeitsspeicher-Bedarf aufs Korn, ebenso Emacs Makes Any Computer Slow (Emacs macht jeden Computer langsam). Escape-Meta-Alt-Control-Shift ist eine Anspielung auf die Tastenkombinationen, mit denen die meisten Funktionen von Emacs auszulösen sind.
In Anspielung auf den großen Funktionsumfang schrieb Thomer M. Gil: „Emacs is a great operating system – it lacks a good editor, though.“ (deutsch: Emacs ist ein großartiges Betriebssystem – allerdings fehlt ein guter Editor.)

## Zitate

   “Emacs started out as a text editor, which became a way of life for many users because they could do all their work on a computer while never exiting from Emacs, and ultimately it became a religion as well.”
   „Emacs begann als Texteditor, der zu einer Lebensweise für viele Benutzer wurde, weil man die ganze Arbeit damit erledigen kann, ohne Emacs zu verlassen, und wurde letztlich zu einer Religion.“
   “You should always keep one principle in mind: Emacs does many things well, but it isn’t important for that reason. Emacs is important, because of the integration of different things you need to do.”
   „Sei Dir stets dessen bewusst: Emacs kann vieles sehr gut, aber das ist nicht das Entscheidende. Emacs ist wichtig, weil es verschiedene zu erledigende Aufgaben unter einen Hut bringt.“