1

我正在为 php/html 文件编写一个次要模式。我使用一个函数(cf. font-lock-keywords)来字体化块<?php ?>

为了字体化多行块,我需要设置font-lock-multiline为 t。

一切都运行得很好。在这种情况下,它们只是一个问题:当我有一个多行块并删除结束标记 ( ?>) 时,该块是非字体化的。当我放回标签时,该块不再字体化。

我有三个问题:

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

如果不是 2/font-lock-fontify-buffer每次我输入这两个字符时有什么方法可以触发:'?''>'

3/更好,有没有办法触发这种功能:当我输入时,?>我找到开始标签<?php并在这个块上强制 a font-lock-fontify-region

4

1 回答 1

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)
于 2011-08-17T12:50:23.373 回答