emacs - 强制字体化另一个缓冲区
问题描述
让我们假设我已经在一个名为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
. 仍然没有打印任何消息。
如何重现
简单地说,打开两个缓冲区: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))
推荐阅读
- qt - 将 QTableView 列水平调整为项目委托列的内容,该列在 Qt 中用新文本绘制
- node.js - 使用 Epic Games 按钮实现登录以检索用户配置文件
- c++ - c++强制选择或忽略对话框(消息框)与promt编程CertAddCertificateContextToStore
- php - 使用 if 语句处理 x2(多个)php $sql $results
- apache-spark - Spark流,套接字关闭后重新连接?
- typescript - 错误的功能分配
- javascript - Google Drive (Web) 中的下载如何工作?
- javascript - 'string | 类型的参数 日期”不可分配给“日期”类型的参数
- javascript - Chart.js如何在x-as(dateTime)之间创建相等的距离
- c++ - C++ 在 Linux 系统和异步线程上被 epoll 和 socket fd 混淆