Responder:
Los símbolos para funciones y macros tienen una lisp-indent-function
propiedad que puede establecer con declare
o en su caso, ya if
que ya está definida, puede usarla put
.
Puede leer sobre los posibles valores de propiedad aquí:
M-: (info "(elisp) Indenting Macros")
return
if
La configuración predeterminada es lo 2
que significa que el segundo formulario recibe un tratamiento especial y está compensado.
Puede cambiar el valor de la propiedad a 'defun
y todas las formas del cuerpo se alinearán.
(put 'if 'lisp-indent-function 'defun)
Mejores prácticas:
Es importante tener en cuenta que hay una razón para el estilo de sangría. if
en Elisp NO es como if
en Common Lisp.
Tenga en cuenta las diferentes firmas:
Lisp común: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
En Emacs lisp, puede tener tantas formas después de la condición como desee, pero solo la primera forma es la cláusula ENTONCES, todas las demás formas son parte de la cláusula ELSE.
Este es un if
formulario válido de Elisp que no es válido en CL:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Esto muestra por qué es importante que la cláusula ENTONCES tenga más sangría, es para que se destaque contra todas las formas ELSE.
Además de que la sangría es importante para la capacidad de los usuarios de analizar el código, también iría en contra de los patrones de estilo aceptados de elisp. El 99.99999% (calculado cuidadosamente) del código elisp que encuentre utilizará exactamente el mismo esquema de sangría predeterminado. Cambiar la sangría if
para su propio uso hará que le resulte difícil trabajar en otras personas y evitar que otros trabajen en la suya.
if
como lo realizalisp-indent-function
.declare
declaración en cada nueva macro, lo cual es bueno en cualquier caso.