Réponse:
Les symboles pour les fonctions et les macros ont une lisp-indent-function
propriété que vous pouvez définir avec declare
ou dans votre cas, car if
étant déjà défini, vous pouvez simplement l'utiliser put
.
Vous pouvez lire sur les valeurs de propriété possibles ici:
M-: (info "(elisp) Indenting Macros")
return
if
Le paramètre par défaut de ce paramètre 2
signifie que le traitement spécial du deuxième formulaire get est compensé.
Vous pouvez remplacer la valeur de la propriété par 'defun
et toutes les formes du corps s'aligneront.
(put 'if 'lisp-indent-function 'defun)
Meilleur entrainement:
Il est important de noter qu'il existe une raison pour le style d'indentation. if
dans Elisp n'est PAS comme if
dans Common Lisp.
Notez les différentes signatures:
Lisp commun: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
Dans Emacs lisp, vous pouvez avoir autant de formulaires après la condition que vous le souhaitez, mais seul le premier formulaire est la clause THEN, tous les autres formulaires font partie de la clause ELSE.
Il s'agit d'un if
formulaire Elisp valide qui n'est pas valide dans CL:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Cela montre pourquoi il est important que la clause THEN soit plus en retrait, c'est pour la faire ressortir de toutes les formes ELSE.
En plus de l'indentation étant importante pour la capacité des utilisateurs à analyser le code, cela irait également à l'encontre des modèles de style acceptés d'Elisp. 99,99999% (calculé avec prudence) du code elisp que vous rencontrez utilisera exactement le même schéma d'indentation par défaut. Changer l'indentation de if
pour votre propre usage, il sera difficile pour vous de travailler sur d'autres peuples élisp et rendra difficile pour les autres de travailler sur le vôtre.
if
comme effectuée parlisp-indent-function
.declare
déclaration dans chaque nouvelle macro, ce qui est bon dans tous les cas.