Solo para aclarar ... Por ejemplo, en este documento :
Un gancho es una variable de Lisp que contiene una lista de funciones, que se llamará en alguna ocasión bien definida. (Esto se llama ejecutar el gancho). Las funciones individuales de la lista se denominan funciones de gancho del gancho. Por ejemplo, el gancho se
kill-emacs-hookejecuta justo antes de salir de Emacs ...
Creo que está diciendo que hay una variable (símbolo) nombrada kill-emacs-hookque representa una lista de un conjunto de "funciones de enlace" que se ejecutarán cuando kill-emacs-hookse evalúe, realizando así esas funciones. ¿Correcto? Entonces
(add-hook 'text-mode-hook 'auto-fill-mode)
está agregando auto-fill-modea esa lista identificada text-mode-hookademás de lo que ya está allí. Bueno. Ahora esto
(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)
donde parece que estamos creando o alterando el text-mode-hook. Ahora estoy confundido sobre la naturaleza de los ganchos y su relación con ellos defcustom. Mi elección lógica es que este código está creando una variable text-mode-hookque es de "tipo" (no sé qué se entiende por tipos en elisp) hook. ¿Se supone que esta es la creación inicial del gancho text-mode-hook? Si es así, ¿qué pasa con las "opciones"? ¿Son esas las supuestas funciones de gancho, o algo más?

Respuestas:
Su comprensión de la noción de gancho de Emacs Lisp es absolutamente correcta. De hecho, los ganchos "normales" son solo listas de funciones (cada función no toma argumentos, de lo contrario no suele llamarse "gancho" o "gancho normal" en Emacs Lisp).
La interfaz de personalización es una cosa diferente. Toda la diferencia entre
defvarydefcustomes que este último permite al usuario editar la variable a través de la interfaz "personalizar". Esta interfaz puede facilitar la edición de ciertos tipos de datos, por lo que por ejemplo, si usted está diciendo que:typedetext-mode-hookeshook, entonces interfaz de personalización se asegura de quetext-mode-hooksiempre es una lista de funciones. Además, puede especificar qué opciones se recomiendan con:optionsargumento.Por lo tanto, su comprensión es correcta y
defcustomsus opciones son solo una forma de instruir a Emacs, por lo que puede ayudar mejor al usuario cuando usa la interfaz "personalizar".fuente
defcustomno es genial porquetext-mode-hookya existe; Ya está incluido. ¿Derecha? Ahora, si escribiera mi propio modo y luego quisiera personalizarlo, lo haría. Mi confusión es que este ejemplo realmente está creandotext-mode-hook, no alterando. ¿Es eso un entendimiento correcto? Y si esto realmente está creando un nuevotext-mode-hook,:optionsestá ofreciendo esas dos funciones como opciones para hacer unadd-hooka la lista, ¿verdad?defcustomsolo define nuevas variables. En este ejemplo particulartext-mode-hookse crea y su valor inicial esnil. La interfaz de personalización también dice que los valores recomendados para tener en esta lista sonturn-on-auto-fillyflyspell-mode. Sin embargo, puede configurartext-mode-hooklo que desee mediante programación, es una variable normal. Puede usaradd-hookcon cualquier otra función también.(defvar text-mode-hook nil).defcustomcomo se está creando inicialmente el gancho? Eso es lo que parece. En otras palabras, este ejemplo está tomado de las profundidades de las entrañas del código de Emacs en alguna parte.