42.2 强制重新显示

Emacs 通常会在等待输入时尝试重新显示屏幕。使用下述函数,你可以在 Lisp 代码执行过程中,无需等待输入,立即请求重新显示。

Function: redisplay &optional force

该函数立即尝试重新显示。可选参数 force 若为非 nil,则强制执行重新显示,即使有输入待处理也不会被抢占。

函数实际尝试重新显示时返回 t,否则返回 nil。返回 t 不代表重新显示已完成,它可能被新到达的输入抢占。

尽管 redisplay 会立即尝试重新显示,但它不会改变 Emacs 选择重新显示哪些框架内容的逻辑。与之不同,下述函数会将特定窗口加入待重新显示队列(如同其内容已完全改变),但不会立即执行重新显示。

Function: force-window-update &optional object

该函数强制部分或全部窗口在 Emacs 下次重新显示时更新。如果 object 是一个窗口,则仅更新该窗口;如果 object 是缓冲区或缓冲区名称,则更新所有显示该缓冲区的窗口;如果 objectnil(或省略),则更新所有窗口。

该函数不会立即执行重新显示;Emacs 会在等待输入或调用 redisplay 函数时执行重新显示。

Variable: pre-redisplay-function

重新显示前执行的函数。调用时传入一个参数,即需要重新显示的窗口集合。该集合可以是 nil(表示仅选中窗口)或 t(表示所有窗口)。

Variable: pre-redisplay-functions

重新显示前执行的钩子。在每个即将重新显示的窗口中执行一次,执行时 current-buffer 指向该窗口显示的缓冲区。