强制另一个缓冲区的字体化
Force fontification of another buffer
让我们假设我已经在名为 foo
.
的缓冲区中注册了一个 fontification 函数
使用 jit-lock-mode:
(jit-lock-register #'(lambda (start end)
(message "Jit!")))
我想从另一个缓冲区强制执行字体化功能(以及所有已注册的字体化功能)。
我在下面使用函数 font-lock-flush
:
(with-current-buffer "foo"
(font-lock-flush))
没有任何成功。
也就是说,当我在不同于 foo
的缓冲区中计算 (with-current-buffer "foo"...)
时,不会打印任何消息。
我希望表达式强制匿名函数在缓冲区 foo
中注册为 fontification。相反,该函数未被调用——我在 *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
.
内进行字体化
在foo
运行jit-lock-register
之后,缓冲区foo
被标记为完全"jit-locked"(更具体地说,它是在立即重新显示循环中完成的紧随其后,并且它已完成,因为缓冲区可能已完全显示)。 运行 jit-lock-fontify-now
之后什么都不做,因为那里没有什么需要 "jit-locked"。 运行 font-lock-flush
也不会有所作为,因为大概 foo
在 fundamental-mode
中,所以 font-lock-mode
未启用,所以 font-lock-flush
认为没有尚未应用字体锁定突出显示,因此无需刷新。
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-mode:
(jit-lock-register #'(lambda (start end)
(message "Jit!")))
我想从另一个缓冲区强制执行字体化功能(以及所有已注册的字体化功能)。
我在下面使用函数 font-lock-flush
:
(with-current-buffer "foo"
(font-lock-flush))
没有任何成功。
也就是说,当我在不同于 foo
的缓冲区中计算 (with-current-buffer "foo"...)
时,不会打印任何消息。
我希望表达式强制匿名函数在缓冲区 foo
中注册为 fontification。相反,该函数未被调用——我在 *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
.
在foo
运行jit-lock-register
之后,缓冲区foo
被标记为完全"jit-locked"(更具体地说,它是在立即重新显示循环中完成的紧随其后,并且它已完成,因为缓冲区可能已完全显示)。 运行 jit-lock-fontify-now
之后什么都不做,因为那里没有什么需要 "jit-locked"。 运行 font-lock-flush
也不会有所作为,因为大概 foo
在 fundamental-mode
中,所以 font-lock-mode
未启用,所以 font-lock-flush
认为没有尚未应用字体锁定突出显示,因此无需刷新。
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))