Emacs Lisp
Emacs Lisp est un dialecte du langage de programmation Lisp, utilisé entre autres par les éditeurs de texte GNU Emacs et XEmacs (qui auront la dénomination commune d'Emacs dans cet article). Il est utilisé pour l'implémentation de la plupart des fonctionnalités d'édition standard d'Emacs, le reste étant écrit en C. Les utilisateurs d'Emacs écrivent habituellement du code en Emacs Lisp afin de personnaliser et rajouter des fonctionnalités à Emacs.
Emacs Lisp est parfois appelé « ELisp », ce qui crée un risque de confusion avec un autre dialecte du Lisp portant le même nom, mais n'ayant rien à voir. Au niveau des fonctionnalités, Emacs Lisp se rapproche des dialectes MacLisp et Common Lisp. Il supporte la programmation fonctionnelle et impérative, c'est donc un langage multi-paradigme. Le Lisp fut choisi comme langage d'extension pour ses nombreuses fonctionnalités, dont sa capacité à traiter les fonctions en tant que données.
Il y a plusieurs façons de personnaliser Emacs, l'utilisateur n'est pas obligé de savoir programmer en Emacs Lisp. En effet, depuis la version 20, GNU Emacs inclut Customize, qui permet aux utilisateurs de définir des variables via une interface graphique. Customize a cependant des fonctionnalités limitées, et est donc réservé à des modifications mineures du comportement d'Emacs. Les utilisateurs désireux de profiter au maximum de l'extensibilité d'Emacs écriront plutôt leur propre module en Emacs Lisp.
Exemple
Voici un exemple simple d'extension pour Emacs écrite en Emacs Lisp. Dans Emacs, la zone d'édition peut être séparée en plusieurs zones appelées « fenêtres », chacune d'entre elles peut afficher un buffer différent. Un buffer est, grosso modo, une zone de texte chargée en mémoire par Emacs à partir d'une source (un fichier, par exemple). Le buffer peut, lorsque l'utilisateur le demande, être sauvé dans un fichier.
La commande utilisateur pour ouvrir une nouvelle fenêtre verticale est C-x 2 (qui signifie « appuyer sur la touche x en maintenant la touche control appuyée, et ensuite appuyer sur la touche 2 »). Cette commande appelle une fonction Emacs Lisp, split-window-vertically. Normalement, lorsque la nouvelle fenêtre apparaît, elle affiche la même chose que le précédent buffer. Supposons que nous voulions qu'il affiche le contenu du prochain buffer disponible. Afin de réaliser cela, l'utilisateur écrit le code Emacs Lisp suivant, soit dans un fichier source, soit dans un buffer vide :
(defun my-split-window-function ()
(interactive)
(split-window-vertically)
(set-window-buffer (next-window) (other-buffer)))
(global-set-key "\C-x2" 'my-split-window-function)
La première expression, (defun ...), définit une nouvelle fonction appelée my-split-window-function qui fait tout d'abord appel à la fonction split-window-vertically (l'ancienne fonction de séparation des fenêtres), puis indique à la nouvelle fenêtre d'afficher un autre buffer. La seconde expression, (global-set-key ...), ré-attribue le raccourci clavier « C-x 2 » à la nouvelle fonction.
Voir aussi
Articles connexes
Liens externes
- (fr) Le wiki Emacs
- (en) R. Chassel, Programming in Emacs Lisp, an Introduction
- (en) R. Krawitz, B. Lewis, D. LaLiberte, R. Stallman, C. Welty, GNU Emacs Lisp Reference Manual
- (en) Le site officiel de GNU Emacs