我正在为php / html文件编写一个小模式。我使用一个函数(参见font-lock-keywords
)来表示<?php
?>
个集团。
为了形成多线组块,我需要将font-lock-multiline
设置为t。
一切都很顺利。在这种情况下,它们只是一个问题:
当我有一个多行集团并删除结束标记(?>
)时,集团是不完整的。当我把标签放回去时,该块不会再次出现。
我有三个问题:
1 /这个问题有一个简单的解决方案
如果没有
2 /有没有办法在每次输入这两个字符时触发font-lock-fontify-buffer
:
'&GT '?';'
3 /更好,有没有办法触发这种类型的功能:当我输入?>
时,我找到了开始标记<?php
并在此集团上强制font-lock-fontify-region
。
答案 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)