Концепция, которую вы ищите в первых абзацах: hooks . Переменная-ловушка - это список функций, которые выполняются при наступлении определенного события. Большинство переменных хуков имеют имя, оканчивающееся на -hook
. Хук after-change-functions
выполняется каждый раз, когда вы что-то печатаете или иным образом меняете буфер. Крючки обсуждаются в руководстве по Emacs Lisp под заголовком "Крючки".
Однако, учитывая то, что вы пытаетесь сделать, было бы проще использовать механизм подсветки Emacs. Решение может быть так же просто, как добавить регулярное выражение в нужном месте.
Большинство файлов, содержащих структурированный текст (особенно языки программирования), выделяются с помощью механизма блокировка шрифта . Это задокументировано в руководствах Emacs и Emacs Lisp в разделе «Блокировка шрифта»; посмотрите, в частности, функцию font-lock-add-keywords
, для которой в руководстве Emacs приведен пример, который вам очень нужен. Также есть некоторая информация в вики Emacs .
ДОБАВЛЕНО:
Блокировка шрифта может выходить за пределы регулярных выражений; к сожалению, документация ограничена кратким объяснением в строке документации font-lock-keywords
. В cperl-mode.el
есть несколько простых примеров (хотя они несколько утопают в массе). В вики также упоминается ctypes.el
, которая использует эту функцию. Вот пример, который выделяет неправильные целочисленные дополнения.
(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))))
Даже регулярное выражение может быть заменено произвольным кодом, который ищет границы того, что вы хотите выделить (имя функции как MATCHER
, используя словарь из строки документации). Существует расширенный пример ключевых слов блокировки шрифта в стандартном режиме C (cc-fonts.el
).