From: Kim F. Storm Date: Sun, 23 Nov 2003 21:47:24 +0000 (+0000) Subject: (enum window_loop): Add REDISPLAY_BUFFER_WINDOWS. X-Git-Tag: ttn-vms-21-2-B4~8288 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e661376d0b1e44164abc1ed0e46a909ffdd39b3e;p=emacs.git (enum window_loop): Add REDISPLAY_BUFFER_WINDOWS. (window_loop): Handle REDISPLAY_BUFFER_WINDOWS. (Fforce_window_update): New defun. (syms_of_window): Defsubr it. (Fset_window_margins, Fset_window_fringes): Doc fix. --- diff --git a/src/window.c b/src/window.c index e20dc2ae037..3c0f3a17439 100644 --- a/src/window.c +++ b/src/window.c @@ -1829,6 +1829,7 @@ enum window_loop DELETE_BUFFER_WINDOWS, /* Arg is buffer */ GET_LARGEST_WINDOW, UNSHOW_BUFFER, /* Arg is buffer */ + REDISPLAY_BUFFER_WINDOWS, /* Arg is buffer */ CHECK_ALL_WINDOWS }; @@ -2027,6 +2028,14 @@ window_loop (type, obj, mini, frames) } break; + case REDISPLAY_BUFFER_WINDOWS: + if (EQ (w->buffer, obj)) + { + mark_window_display_accurate (window, 0); + best_window = window; + } + break; + /* Check for a window that has a killed buffer. */ case CHECK_ALL_WINDOWS: if (! NILP (w->buffer) @@ -3428,6 +3437,46 @@ displayed. */) return display_buffer_1 (window); } + +DEFUN ("force-window-update", Fforce_window_update, Sforce_window_update, + 0, 1, 0, + doc: /* Force redisplay of all windows. +If optional arg OBJECT is a window, force redisplay of that window only. +If OBJECT is a buffer or buffer name, force redisplay of all windows +displaying that buffer. */) + (object) + Lisp_Object object; +{ + if (NILP (object)) + { + windows_or_buffers_changed++; + return Qt; + } + + if (WINDOWP (object)) + { + mark_window_display_accurate (object, 0); + return Qt; + } + + if (STRINGP (object)) + object = Fget_buffer (object); + if (BUFFERP (object) && !NILP (XBUFFER (object)->name)) + { + /* Walk all windows looking for buffer, and force update + of each of those windows. */ + + object = window_loop (REDISPLAY_BUFFER_WINDOWS, object, 0, Qvisible); + return NILP (object) ? Qnil : Qt; + } + + /* If nothing suitable was found, just return. + We could signal an error, but this feature will typically be used + asynchronously in timers or process sentinels, so we don't. */ + return Qnil; +} + + void temp_output_buffer_show (buf) register Lisp_Object buf; @@ -5844,11 +5893,11 @@ usage: (save-window-excursion BODY ...) */) DEFUN ("set-window-margins", Fset_window_margins, Sset_window_margins, 2, 3, 0, doc: /* Set width of marginal areas of window WINDOW. -If window is nil, set margins of the currently selected window. -First parameter LEFT-WIDTH specifies the number of character -cells to reserve for the left marginal area. Second parameter -RIGHT-WIDTH does the same for the right marginal area. -A nil width parameter means no margin. */) +If WINDOW is nil, set margins of the currently selected window. +Second arg LEFT-WIDTH specifies the number of character cells to +reserve for the left marginal area. Optional third arg RIGHT-WIDTH +does the same for the right marginal area. A nil width parameter +means no margin. */) (window, left, right) Lisp_Object window, left, right; { @@ -5910,17 +5959,14 @@ as nil. */) DEFUN ("set-window-fringes", Fset_window_fringes, Sset_window_fringes, 2, 4, 0, doc: /* Set the fringe widths of window WINDOW. - If WINDOW is nil, set the fringe widths of the currently selected window. - -The second parameter LEFT-WIDTH specifies the number of pixels to -reserve for the left fringe. The third parameter RIGHT-WIDTH -specifies the right fringe width. If a fringe width parameter is nil, -that means to use the frame's default fringe width. Default fringe -widths can be set with the command `set-fringe-style'. - -If the fourth parameter OUTSIDE-MARGINS is non-nil, draw the fringes +Second arg LEFT-WIDTH specifies the number of pixels to reserve for +the left fringe. Optional third arg RIGHT-WIDTH specifies the right +fringe width. If a fringe width arg is nil, that means to use the +frame's default fringe width. Default fringe widths can be set with +the command `set-fringe-style'. +If optional fourth arg OUTSIDE-MARGINS is non-nil, draw the fringes outside of the display margins. By default, fringes are drawn between display marginal areas and the text area. */) (window, left, right, outside_margins) @@ -6605,6 +6651,7 @@ This variable automatically becomes buffer-local when set. */); defsubr (&Sspecial_display_p); defsubr (&Ssame_window_p); defsubr (&Sdisplay_buffer); + defsubr (&Sforce_window_update); defsubr (&Ssplit_window); defsubr (&Senlarge_window); defsubr (&Sshrink_window);