En mode lisp-mode, Emacs propose plusieurs commandes qui facilitent la programmation en Common Lisp. Des commandes supplémentaires qui permettent le déplacement du point d'expression en expression. Pour avancer le point d'une expression Common Lisp, utiliser la commande forward-sexp (clé C-M-f) qui se tape control+meta+f ou ESC suivi de control+f. Pour reculer d'une expression, utiliser la commande backward-sexp (C-M-b). Ces deux commandes acceptent des arguments numériques pour d'avancer ou reculer d'un nombre arbitraire d'expressions, y compris négatif.
Deux commandes similaires à
forward-sexp et backward-sexp sont
forward-list (C-M-n) et backward-list (C-M-p).
Ces deux commandes effectuent un déplacement par liste et non par expression. Une expression atomique (chaîne de caractères, symbole, etc) est traitée comme une suite d'espaces. Comme les deux commandes précédentes, ces commandes acceptent des arguments numériques.
Les quatre commandes précédentes respectent l'imbrication des listes. Les deux commandes pour changer cette imbrication sont down-list (C-M-d) pour descendre d'un niveau de liste et backward-up-list (C-M-u) pour monter d'un niveau de liste.
Par défaut, down-list avance le point après la parenthèse ouvrante suivante (ignorant les parenthèses dans les chaînes de caractères et commentaires). Avec un argument numérique l'action est répétée. Si l'argument numérique est négatif, down-list recule le point avant la parenthèse fermante précédente.
La commande backward-up-list recule le point avant la parenthèse ouvrante précédente d'un niveau supérieur d'imbrication. Elle ignore donc les expressions du même niveau que l'expression courante. Avec un argument numérique, l'action est répétée autant de fois qu'indiqué par l'argument. Avec un argument négatif, elle avance le point après la parenthèse fermante suivante d'un niveau supérieur d'imbrication.
Emacs reconnaît la notion de defun. Pour Emacs, c'est
une définition ou une déclaration qui commence en première colonne.
Le plus souvent, il s'agit d'une définition de fonction Common Lisp, mais cela peut
aussi être une définition de variable (avec defparameter), de
constante (avec defconst, de type (avec
deftype), ou d'autres constructions similaires. Pour
Emacs, ce sont toutes des defuns. Emacs propose les commandes
beginning-of-defun (C-M-a)
pour positionner le point au début de la defun courante, et
end-of-defun (C-M-e)
pour positionner le point à la fin de la defun
courante. Avec un argument numérique, ces commandes déplacent le point
d'autant de defuns.
Cette dernière commande est souvent utile pour trouver des parenthèses manquantes. Il suffit de la lancer au début du tampon Emacs avec un argument numérique très grand. Si le fichier contient une définition à laquelle il manque une ou plusieurs parenthèses fermantes, la commande s'arrête à cette définition en affichant un message d'erreur.
Irene DURAND