Apenas para esclarecer ... Por exemplo, neste documento :
Um gancho é uma variável Lisp que contém uma lista de funções, a serem chamadas em alguma ocasião bem definida. (Isso é chamado de execução do gancho.) As funções individuais na lista são chamadas de funções de gancho do gancho. Por exemplo, o gancho
kill-emacs-hook
é executado antes de sair do Emacs ...
Eu acho que está dizendo que existe uma variável (símbolo) nomeada kill-emacs-hook
que representa uma lista de um conjunto de "funções de gancho" que serão executadas quando a kill-emacs-hook
avaliação for realizada, executando essas funções. Corrigir? Então
(add-hook 'text-mode-hook 'auto-fill-mode)
está sendo adicionado auto-fill-mode
à lista identificada por text-mode-hook
, além do que já está lá. Boa. Agora isso
(defcustom text-mode-hook nil
"Normal hook run when entering Text mode and many related modes."
:type 'hook
:options '(turn-on-auto-fill flyspell-mode)
:group 'wp)
onde parece que estamos criando ou alterando o text-mode-hook
. Agora estou confuso quanto à natureza dos ganchos e ao relacionamento deles defcustom
. Minha escolha lógica é que esse código esteja criando uma variável text-mode-hook
do tipo "(não sei o que significa tipos no elisp) hook
. Esta é, de fato, a criação inicial do gancho text-mode-hook
? Se sim, o que há com as "opções"? Essas são as supostas funções de gancho ou algo mais?
Respostas:
Sua compreensão da noção de gancho do Emacs Lisp está absolutamente correta. De fato, ganchos "normais" são apenas listas de funções (todas as funções não aceitam argumentos, caso contrário, geralmente não são chamadas de "gancho" ou "gancho normal" no Emacs Lisp).
A interface de personalização é uma coisa diferente. Toda a diferença entre
defvar
edefcustom
é que este último permite ao usuário editar a variável através da interface "customizar". Esta interface pode facilitar a edição de certos tipos de dados, por exemplo, se você está dizendo que:type
detext-mode-hook
éhook
, em seguida, interface de personalização torna-se de quetext-mode-hook
é sempre uma lista de funções. Além disso, você pode especificar quais opções são recomendadas com:options
argumento.Portanto, seu entendimento está correto e
defcustom
suas opções são apenas uma maneira de instruir o Emacs, para que ele possa ajudar melhor o usuário quando ele usa a interface "personalizar".fonte
defcustom
não é ótimo porquetext-mode-hook
já existe; já está incluído. Direita? Agora, se eu escrevesse meu próprio modo e desejasse personalização, faria isso. Minha confusão é que este exemplo está realmente criandotext-mode-hook
, não alterando. Essa é uma compreensão correta? E se isso realmente está criando um novotext-mode-hook
,:options
está oferecendo essas duas funções como opções para fazer umadd-hook
na lista, certo?defcustom
apenas define novas variáveis. Neste exemplo em particular,text-mode-hook
é criado e seu valor inicial énil
. A interface de personalização também informa que os valores recomendados a serem incluídos nesta lista sãoturn-on-auto-fill
eflyspell-mode
. No entanto, você pode definir otext-mode-hook
que quiser programaticamente, é uma variável normal. Você também pode usaradd-hook
com outras funções.(defvar text-mode-hook nil)
.defcustom
que o gancho está sendo criado inicialmente? É assim que parece. Em outras palavras, este exemplo é tirado do fundo das entranhas do código Emacs em algum lugar.