Emacs: font-lock-fontify-region и multiline - PullRequest
       23

Emacs: font-lock-fontify-region и multiline

1 голос
/ 17 августа 2011

Я пишу второстепенный режим для файлов php / html.Я использую функцию (ср. font-lock-keywords) для фонификации <?php ?> блоков.

Для того, чтобы фонизировать многослойные блоки, мне нужно установить font-lock-multiline в t.

Все работает довольно хорошо.Это просто проблема в этом случае: когда у меня есть многострочный блок и удаляется закрывающий тег (?>), блок не подтверждается.Когда я возвращаю метку обратно, блок снова не распознается.

У меня три вопроса:

1 / есть простое решение этой проблемы

, если нет 2/ есть ли способ вызвать font-lock-fontify-buffer каждый раз, когда я набираю эти два символа: '?' '>'

3 / лучше, есть ли способ вызвать такого рода функцию: когда я набираю ?> Я нахожу открывающий тег <?php и заставляю font-lock-fontify-region на этом блоке.

1 Ответ

1 голос
/ 17 августа 2011

Это базовый подход, и логика недостаточна, но он демонстрирует один вариант:

(defvar foo-minor-mode-map (make-keymap) "foo-minor-mode keymap.")
(define-key foo-minor-mode-map (kbd ">") 'foo-electric-gt)

(defun foo-electric-gt (&optional arg)
  (interactive "*p")
  (when (looking-back "\\?$")
    (save-excursion
      (let ((end (- (point) 1))
            (beg (+ (search-backward "<?php") 5)))
        (font-lock-fontify-region beg end))))
  (insert-char ?> arg))

(define-minor-mode foo-minor-mode
  "foo mode.

\\{foo-minor-mode-map}"
  :keymap 'foo-minor-mode-map)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...