假设我已经在名为foo
的缓冲区中注册了一个函数作为字体化。
使用抖动锁定模式:
(jit-lock-register #'(lambda (start end)
(message "Jit!")))
从另一个缓冲区,我想强制该字体化函数(以及所有注册的字体化函数(。
我正在使用函数font-lock-flush
,在下面:
(with-current-buffer "foo"
(font-lock-flush))
没有任何成功。 也就是说,当我在不同于foo
的缓冲区中评估(with-current-buffer "foo"...)
时,不会打印任何消息。
我希望表达式强制匿名函数在缓冲区foo
中注册为字体化。相反,不会调用该函数 - 我在*Message*
缓冲区中看不到任何消息。
附加说明我还尝试了其他强制功能,例如:jit-lock-fontify-now
.尽管如此,不会打印任何消息。
如何重现
简单地说,打开两个缓冲区:foo
和bar
。
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
中强制字体化。
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))
在foo
中运行jit-lock-register
后,缓冲区foo
被标记为完全"抖动锁定"(更具体地说,它是在紧接着的重新显示周期中完成的,并且完成是因为缓冲区可能完全显示(。 在此之后运行jit-lock-fontify-now
将无济于事,因为那里没有什么需要"抖动锁定"的。 运行font-lock-flush
也不会有什么不同,因为大概foo
在fundamental-mode
所以font-lock-mode
没有启用,所以font-lock-flush
看到还没有应用字体锁定突出显示,因此没有什么要刷新的。