首页 > 解决方案 > 强制字体化另一个缓冲区

问题描述

让我们假设我已经在一个名为foo.

使用jit-lock-mode

(jit-lock-register #'(lambda (start end)
           (message "Jit!")))

从另一个缓冲区,我想强制该字体化功能(以及所有注册的字体化功能)。

我正在使用以下功能font-lock-flush

(with-current-buffer "foo"
  (font-lock-flush)) 

没有任何成功。也就是说,当我(with-current-buffer "foo"...)在不同于 的缓冲区中进行评估时foo,不会打印任何消息。

我希望该表达式会强制在 buffer 中注册为字体化的匿名函数foo。相反,该函数没有被调用——我在*Message*缓冲区中看不到任何消息。


附加说明 我也尝试过其他功能来强制,例如:jit-lock-fontify-now. 仍然没有打印任何消息


如何重现

简单地说,打开两个缓冲区:foobar

的内容foo

(jit-lock-register #'(lambda (start end)
           (message "Jit!")))

并评估缓冲区。

现在,每次缓冲区需要字体化时都会显示一条消息("Jit!"将被打印)。

相反,缓冲区的内容bar

(with-current-buffer "foo"
  (font-lock-flush))  ;; or jit-lock-fontify-now

评估(从缓冲区bar)该表达式。您应该注意到没有打印任何消息,尽管表达式应该强制内部字体化foo

标签: emacsfont-lock

解决方案


jit-lock-refontify is a compiled Lisp function in ‘jit-lock.el’.

(jit-lock-refontify &optional BEG END)

Force refontification of the region BEG..END (default whole buffer).

在实验上,这可以满足您的要求:

(with-current-buffer "foo"
  (jit-lock-refontify))

推荐阅读