El concepto que está buscando en sus primeros párrafos es ganchos. Una variable de enlace es una lista de funciones que se ejecutan cuando ocurre un determinado evento. La mayoría de las variables de gancho tienen un nombre que termina en -hook
. El gancho after-change-functions
se ejecuta cada vez que escribe algo o cambia el búfer. Los ganchos se tratan en el manual de Emacs Lisp bajo el título "Ganchos".
Sin embargo, dado lo que está tratando de hacer, sería más fácil usar el mecanismo de resaltado de Emacs. La solución puede ser tan simple como agregar una expresión regular en el lugar correcto.
La mayoría de los archivos que contienen texto estructurado (especialmente lenguajes de programación) se resaltan con el mecanismo de bloqueo de fuente. Esto está documentado en los manuales de Emacs y Emacs Lisp en "Font Lock"; vea en particular la función font-lock-add-keywords
, para lo cual el manual de Emacs da un ejemplo que es más o menos lo que está buscando. También hay some information on the Emacs wiki.
añadido:
bloqueo de fuente puede ir más allá de las expresiones regulares; desafortunadamente, la documentación está limitada a la breve explicación en el docstring de font-lock-keywords
. Hay algunos ejemplos simples en cperl-mode.el
(aunque están algo enterrados en la masa). El wiki también hace referencia al ctypes.el
que usa esta característica. Aquí hay un ejemplo que resalta las adiciones de enteros incorrectos.
(defun maybe-warn-about-addition()
(let ((x (string-to-int (match-string 1)))
(y (string-to-int (match-string 2)))
(z (string-to-int (match-string 3))))
(if (/= (+ x y) z)
font-lock-warning-face)))
(font-lock-add-keywords
nil
'(("\\s-\\([0-9]+\\)\\s-*\\+\\s-*\\([0-9]+\\)\\s-*=\\s-*\\([0-9]+\\)\\s-"
(3 (maybe-warn-about-addition) t))))
Incluso la expresión regular puede ser reemplazado por código arbitrario que busca los límites de lo que se desea resaltar (un nombre de función como MATCHER
, utilizando el vocabulario de la cadena de documentación). Hay un ejemplo avanzado de palabras clave de bloqueo de fuente en el modo C estándar (cc-fonts.el
).
Por supuesto que puede hacer esto. Echa un vistazo a los implementos 'c-mode'' corsé eléctrico'. –