Responda:
Os símbolos para funções e macros têm uma lisp-indent-function
propriedade que você pode definir com declare
ou no seu caso, uma vez que if
já está definido, você pode apenas usar put
.
Você pode ler sobre os possíveis valores de propriedade aqui:
M-: (info "(elisp) Indenting Macros")
return
if
A configuração padrão é o 2
que significa que o tratamento especial do segundo formulário é compensado.
Você pode alterar o valor da propriedade para 'defun
e todos os formulários do corpo serão alinhados.
(put 'if 'lisp-indent-function 'defun)
Melhor prática:
É importante observar que há uma razão para o estilo de indentação. if
no Elisp NÃO é como if
no Common Lisp.
Observe as diferentes assinaturas:
Lisp comum: (if TEST THEN &OPTIONAL ELSE)
Emacs Lisp: (if COND THEN ELSE...)
No Emacs lisp, você pode ter quantas formas após a condição desejar, mas apenas a primeira forma é a cláusula THEN, todas as outras formas fazem parte da cláusula ELSE.
Este é um if
formulário Elisp válido que não é válido no CL:
(if something
(message "THEN")
(message "all")
(message "these")
(message "run")
(message "on")
(message "ELSE"))
Isso mostra por que é importante que a cláusula THEN seja mais recuada, para que ela se destaque contra todas as formas ELSE.
Além de o recuo ser importante para a capacidade do usuário de analisar o código, ele também contraria os padrões de estilo aceitos do elisp. 99.99999% (calculado com cuidado) do código elisp que você encontrar usará exatamente o mesmo esquema de indentação padrão. Alterar o recuo if
para seu próprio uso dificultará o trabalho em outras pessoas, e dificultará que outros trabalhem no seu.
if
conforme executado porlisp-indent-function
.declare
declaração em cada nova macro, o que é bom de qualquer forma.