Emacs Lisp (kurz elisp) ist ein Dialekt der Programmiersprache Lisp, in dem der größte Teil der Editoren GNU Emacs und XEmacs programmiert ist und der auch zur Erweiterung der Editoren genutzt werden kann. So gut wie alle Editorfunktionen liegen als Lisp-Funktionen vor. Die grundlegendsten allerdings sind in C implementiert. Tastenkombinationen sind über eine so genannte keymap den Funktionen zugewiesen. Emacs Lisp ist für die außerordentliche Erweiterbarkeit dieses Editors verantwortlich.
Emacs stellt dem Benutzer standardmäßig einen Puffer (Textfenster) zur Verfügung, in dem Lisp-Funktionen ausgewertet werden können. Einstellungen des Editors werden in Lisp-Variablen festgehalten. Sie können interaktiv gesetzt werden oder mit einer Initialisierungsdatei festgelegt werden.
Quelltext und Byte-Code
Emacs-Lisp-Quelltext wird in Textdateien gespeichert. Die Dateien besitzen die Dateiendung .el. Eine Ausnahme ist die zentrale Konfigurationsdatei, deren Befehle beim Aufrufen des Editors abgearbeitet werden. Sie heißt, auch wenn der Name .emacs.el grundsätzlich erlaubt ist, meist .emacs und befindet sich im Home-Verzeichnis. Dies kann auch unter Microsoft Windows durch Setzen der Umgebungsvariablen HOME festgelegt werden (und, da Windows-Programme teilweise Probleme mit dem Punkt am Anfang haben, kann hier auch _emacs verwendet werden). Ein Lisp-Interpreter führt den in den Textdateien enthaltenen Programmtext aus. Funktionsdefinitionen werden eingelesen und stehen während der Editorlaufzeit zur Verfügung. Funktionen und Variablen können frei neu definiert oder verändert werden.
Ein Großteil der Funktionen wird erst dann geladen, wenn er benötigt wird (über die Funktion autoload).
Die Basisfunktionen des Editors sind in C geschrieben. Sie werden auf Englisch primitives genannt; es handelt sich gewissermaßen um die eingebauten Funktionen. Diese werden von den Lisp-Funktionen benutzt; sie können aber nicht verändert werden. (Außer, man schreibt sie in C neu und rekompiliert den ganzen Editor, was möglich ist, da Emacs freie Software ist.)
Emacs Lisp bietet, wie die später entwickelte Programmiersprache Java, auch die Möglichkeit, den Quelltext in Byte-Code zu übersetzen (Menu Compile). Die produzierten Dateien haben dann die Endung .elc. Die kompilierten Programme benötigen weniger Speicherplatz und werden rascher geladen und ausgeführt.