Что касается вашего примера: возможно, вы пропускаете ":" после FIXIT?Попробуйте вставить
;; FIXIT: needs work
в буфер elisp с включенным хуком, он должен работать.
Что касается регулярных выражений, их синтаксис подробно описан в руководстве пользователя в Regexps и в руководстве Elisp под Синтаксис Regexps .
Я не слишком уверен, может ли font-lock действительно помочь в вашем случае.Один из способов изменить отображаемый текст - использовать Свойства текста , в частности, Свойство отображения .Следующий код меняет все слэши на «÷», если они окружены пробелами.
(while (re-search-forward " \\(/\\) " nil t)
(put-text-property (match-beginning 1)
(match-end 1)
'display "÷"))
Однако, в отличие от font-lock, который применяет шрифты как изменения текста, он будет «постоянным», пока текст не будет удален илисвойство изменилось. Если шрифты могут делать то же самое (например, через свойство display самого шрифта), вам может повезти, в противном случае вам придется найти обходной путь, который не реализует блокировку шрифта.
Редактировать: Оказывается, вы можете использовать jit-lock-register
для запуска собственных функций фонификации.Основываясь на наблюдениях, сделанных при проверке источника glasses-mode
, я написал второстепенный режим, который делает то, что вы хотите, в качестве доказательства концепции.Он использует оверлеи , а не текстовые свойства, потому что их легче удалить.
(defun make-divisions-fancy (beg end)
(save-excursion
(save-match-data
(goto-char beg)
(while (re-search-forward " \\(/\\) " end t)
(let ((overlay (make-overlay (match-beginning 1)
(match-end 1)
nil t)))
(overlay-put overlay 'category 'fancy-divide)
(overlay-put overlay 'evaporate t)
(overlay-put overlay 'display "÷"))))))
(defun make-divisions-boring (beg end)
(dolist (o (overlays-in beg end))
(when (eq (overlay-get o 'category) 'fancy-divide)
(delete-overlay o))))
(defun remake-fancy-divisions (beg end)
(make-divisions-boring beg end)
(make-divisions-fancy beg end))
(define-minor-mode fancy-div-mode
"Minor mode to make divisions like \" / \" fancier."
:init-value nil
(save-excursion
(save-restriction
(widen)
(make-divisions-boring (point-min) (point-max))
(if fancy-div-mode
(jit-lock-register 'remake-fancy-divisions)
(jit-lock-unregister 'remake-fancy-divisions)))))