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-hook
ejecuta justo antes de salir de Emacs ...
Creo que está diciendo que hay una variable (símbolo) nombrada kill-emacs-hook
que representa una lista de un conjunto de "funciones de enlace" que se ejecutarán cuando kill-emacs-hook
se evalúe, realizando así esas funciones. ¿Correcto? Entonces
(add-hook 'text-mode-hook 'auto-fill-mode)
está agregando auto-fill-mode
a esa lista identificada text-mode-hook
ademá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-hook
que 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
defvar
ydefcustom
es 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:type
detext-mode-hook
eshook
, entonces interfaz de personalización se asegura de quetext-mode-hook
siempre es una lista de funciones. Además, puede especificar qué opciones se recomiendan con:options
argumento.Por lo tanto, su comprensión es correcta y
defcustom
sus opciones son solo una forma de instruir a Emacs, por lo que puede ayudar mejor al usuario cuando usa la interfaz "personalizar".fuente
defcustom
no es genial porquetext-mode-hook
ya 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
,:options
está ofreciendo esas dos funciones como opciones para hacer unadd-hook
a la lista, ¿verdad?defcustom
solo define nuevas variables. En este ejemplo particulartext-mode-hook
se 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-fill
yflyspell-mode
. Sin embargo, puede configurartext-mode-hook
lo que desee mediante programación, es una variable normal. Puede usaradd-hook
con cualquier otra función también.(defvar text-mode-hook nil)
.defcustom
como 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.