Juste pour clarifier ... Par exemple, dans ce document :
Un hook est une variable Lisp qui contient une liste de fonctions, à appeler à une occasion bien définie. (Cela s'appelle exécuter le hook.) Les fonctions individuelles de la liste sont appelées les fonctions de hook du hook. Par exemple, le hook
kill-emacs-hook
s'exécute juste avant de quitter Emacs ...
Je pense que cela veut dire qu'il y a une variable (symbole) nommée kill-emacs-hook
qui représente une liste d'un ensemble de "fonctions de crochet" qui s'exécutera lorsque le kill-emacs-hook
est évalué, réalisant ainsi ces fonctions. Correct? alors
(add-hook 'text-mode-hook 'auto-fill-mode)
ajoute auto-fill-mode
à cette liste identifiée par text-mode-hook
en plus de ce qui existe déjà. Bien. maintenant , ce
(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)
où il semble que nous créons ou modifions le text-mode-hook
. Je suis maintenant confus quant à la nature des crochets et à leur relation avec defcustom
. Mon choix logique est que ce code crée une variable text-mode-hook
qui est de "type" (je ne sais pas ce que l'on entend par types dans elisp) hook
. Est-ce, en effet, censé être la création initiale du crochet text-mode-hook
? Si oui, que se passe-t-il avec les "options"? S'agit-il des fonctions de crochet supposées, ou autre chose?
Réponses:
Votre compréhension de la notion de crochet Emacs Lisp est absolument correcte. En effet, les hooks «normaux» ne sont que des listes de fonctions (chaque fonction ne prend pas d'arguments, sinon elle n'est généralement pas appelée «hook» ou «hook normal» dans Emacs Lisp).
L'interface de personnalisation est une chose différente. Toute la différence entre
defvar
etdefcustom
est que ce dernier permet à l'utilisateur d'éditer la variable via l'interface «personnaliser». Cette interface peut faciliter l' édition de certains types de données, donc par exemple si vous dites que:type
detext-mode-hook
esthook
, alors l' interface de personnalisation fait en sorte quetext-mode-hook
toujours une liste de fonctions. De plus, vous pouvez spécifier quelles options sont recommandées avec:options
argument.Ainsi, votre compréhension est correcte et
defcustom
ses options ne sont qu'un moyen d'instruire Emacs, afin qu'il puisse mieux aider l'utilisateur lorsqu'il utilise l'interface de «personnalisation».la source
defcustom
n'est pas grand cartext-mode-hook
existe déjà; c'est déjà inclus. Droite? Maintenant, si j'écrivais mon propre mode et que je voulais une personnalisation, je le ferais. Ma confusion est que cet exemple crée vraimenttext-mode-hook
, ne le modifie pas. Est-ce une bonne compréhension? Et si cela crée effectivement un nouveautext-mode-hook
, le:options
propose ces deux fonctions comme options pour faire unadd-hook
à la liste, non?defcustom
définit simplement de nouvelles variables. Dans cet exemple particuliertext-mode-hook
est créé et sa valeur initiale estnil
. L'interface de personnalisation est également informée que les valeurs recommandées à avoir dans cette liste sontturn-on-auto-fill
etflyspell-mode
. Vous pouvez cependant définirtext-mode-hook
ce que vous voulez par programme, c'est une variable normale. Vous pouvez également l'utiliseradd-hook
avec d'autres fonctions.(defvar text-mode-hook nil)
.defcustom
ainsi que le crochet est initialement créé? Voilà à quoi ça ressemble. En d'autres termes, cet exemple est pris quelque part dans les entrailles du code Emacs.