Eu entendo o que o carregamento automático faz para funções (registrar o arquivo para carregar quando essa função é chamada ou sua cadeia de documentação é recuperada). No entanto, não está claro como usar o recurso de carregamento automático em conjunto com variáveis e macros.
Eu tenho duas perguntas:
O que acontece quando o pacote tem parâmetro, implementado como uma variável que o usuário pode definir, mas não é carregado automaticamente? Essas variáveis devem ser carregadas automaticamente? Caso contrário, verifica-se que essas variáveis não existem, o ambiente Lisp não sabe nada sobre elas, incluindo seus valores padrão, até que alguma função carregada automaticamente do pacote seja usada (normalmente após o carregamento dos arquivos de configuração) e, se o usuário as definir no seu / seu arquivo de configuração, é como definir variáveis inexistentes. Se o valor da variável é uma lista não vazia e o usuário usa
push
ouadd-to-list
para alterar seu valor, o que exatamente acontece? Os valores padrão são perdidos?O que acontece quando uma macro é carregada automaticamente? Quando devemos carregar automaticamente uma macro?
fonte
setq
editadas apenas (ou seja, não importa quais valores eles tinham antes) podem ter o padrão especificadodefvar
ou odefcustom
formulário, mas no caso de uma lista que pode ser estendida pelo usuário, é melhor usareval-after-load
certo? Também, às vezes bons padrões são boas, mesmo se eles tomam forma de uma lista ;-)eval-after-load
, é um bug na implementação do pacote. Normalmente,eval-after-load
deve ser usado para correções de bugs ou personalizações altamente incomuns. A propósito, pode ser melhor usar um gancho se o pacote disponibilizar um gancho.eval-after-load
, os usuários ainda não poderão remover elementos da lista! Isso me faz pensar se devo abandonar os padrões.eval-after-load
seja necessário apenas para situações incomuns. É uma das ferramentas padrão no kit de ferramentas de carregamento diferido. Se as pessoas não quiserem usar essas ferramentas, elas poderãorequire
acessar a biblioteca (o que é de fato o que os novatos são invariavelmente recomendados - no momento em que começam a pensar "Eu gostaria que o Emacs começasse um pouco mais rápido", eles " provavelmente já aprendeu o suficiente para não ser assustado com a nova sintaxe :)customize-set-variable
e nãosetq
pode ser bom. Mas não tenho tempo agora para o estudo cuidadoso necessário para melhorar minha resposta a esse respeito. Se você acha que isso é importante, por que não escreve sua própria resposta? Será mais visível que esse longo tópico de comentários.