elisp: Forcing Redisplay
37.2 Forcing Redisplay
======================
Emacs normally tries to redisplay the screen whenever it waits for
input. With the following function, you can request an immediate
attempt to redisplay, in the middle of Lisp code, without actually
waiting for input.
-- Function: redisplay &optional force
This function tries immediately to redisplay. The optional
argument FORCE, if non-‘nil’, forces the redisplay to be performed,
instead of being preempted if input is pending.
The function returns ‘t’ if it actually tried to redisplay, and
‘nil’ otherwise. A value of ‘t’ does not mean that redisplay
proceeded to completion; it could have been preempted by newly
arriving input.
Although ‘redisplay’ tries immediately to redisplay, it does not
change how Emacs decides which parts of its frame(s) to redisplay. By
contrast, the following function adds certain windows to the pending
redisplay work (as if their contents had completely changed), but does
not immediately try to perform redisplay.
-- Function: force-window-update &optional object
This function forces some or all windows to be updated the next
time Emacs does a redisplay. If OBJECT is a window, that window is
to be updated. If OBJECT is a buffer or buffer name, all windows
displaying that buffer are to be updated. If OBJECT is ‘nil’ (or
omitted), all windows are to be updated.
This function does not do a redisplay immediately; Emacs does that
as it waits for input, or when the function ‘redisplay’ is called.
-- Variable: pre-redisplay-function
A function run just before redisplay. It is called with one
argument, the set of windows to be redisplayed. The set can be
‘nil’, meaning only the selected window, or ‘t’, meaning all the
windows.
-- Variable: pre-redisplay-functions
This hook is run just before redisplay. It is called once in each
window that is about to be redisplayed, with ‘current-buffer’ set
to the buffer displayed in that window.