Commit e661376d authored by Kim F. Storm's avatar Kim F. Storm
Browse files

(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.
parent 6a1ff3ba
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment