Emacs:字体锁定字体区域和多行

发布于 2024-11-30 04:08:21 字数 569 浏览 1 评论 0原文

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

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

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

我有三个问题:

是否有一个简单的解决方案来解决这个问题

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

3/更好的是,有没有办法触发这种功能:当我输入 ?> 时,我找到开始标签 并强制使用 此块上的 font-lock-fontify-region

I am writing a minor mode for php/html files. I use a function (cf. font-lock-keywords) to fontify <?php ?> blocs.

In order to fontify multilined blocs, I need to set font-lock-multiline to t.

Everything is running quite nicely. Their is just a problem in this case :
When I have a multiline bloc and a delete the closing tag (?>) the bloc is unfontified. When I put the tag back, the block is not fontified again.

I have three questions :

1/ is there a simple solution to this problem

if not
2/ is there any way to trigger font-lock-fontify-buffer each time I type those two chars :
'?''>'

3/ better, is there a way to trigger this kind a fonction : when I type ?> I find the opening tag <?php and force a font-lock-fontify-region on this bloc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

別甾虛僞 2024-12-07 04:08:21

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

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

This is a basic approach, and the logic is insufficient, but it demonstrates one option:

(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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文