Responder:
Los símbolos para funciones y macros tienen una lisp-indent-functionpropiedad que puede establecer con declareo en su caso, ya ifque ya está definida, puede usarla put.
Puede leer sobre los posibles valores de propiedad aquí:
M-: (info "(elisp) Indenting Macros") return
ifLa configuración predeterminada es lo 2que significa que el segundo formulario recibe un tratamiento especial y está compensado.
Puede cambiar el valor de la propiedad a 'defuny 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. ifen Elisp NO es como ifen 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 ifformulario 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 ifpara su propio uso hará que le resulte difícil trabajar en otras personas y evitar que otros trabajen en la suya.
ifcomo lo realizalisp-indent-function.declaredeclaración en cada nueva macro, lo cual es bueno en cualquier caso.