【问题标题】:Emacs: font-lock-fontify-region and multilineEmacs:font-lock-fontify-region 和多行
【发布时间】:2011-08-17 11:19:06
【问题描述】:

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

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

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

我有三个问题:

1/这个问题有简单的解决办法吗

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

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

【问题讨论】:

  • 你为什么要编写自定义字体化函数?最好使用php-mode 甚至更好的some up-to-date fork,它对php 文件有很好的字体化...

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


【解决方案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)

【讨论】:

  • 谢谢,我用钩子做了几乎同样的事情:(add-hook 'after-change-functions 'psp-after-change t t)
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多