Emacs:font-lock-fontify-region和multiline

时间:2011-08-17 11:19:07

标签: emacs multiline font-lock font-lock-mode

我正在为php / html文件编写一个小模式。我使用一个函数(参见font-lock-keywords)来表示<?php ?>个集团。

为了形成多线组块,我需要将font-lock-multiline设置为t。

一切都很顺利。在这种情况下,它们只是一个问题: 当我有一个多行集团并删除结束标记(?>)时,集团是不完整的。当我把标签放回去时,该块不会再次出现。

我有三个问题:

1 /这个问题有一个简单的解决方案

如果没有 2 /有没有办法在每次输入这两个字符时触发font-lock-fontify-buffer: '&GT '?';'

3 /更好,有没有办法触发这种类型的功能:当我输入?>时,我找到了开始标记<?php并在此集团上强制font-lock-fontify-region

1 个答案:

答案 0 :(得分:1)

这是一种基本方法,逻辑不足,但它演示了一个选项:

(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)