Function: set-window-buffer
set-window-buffer is a function defined in window.c.
Signature
(set-window-buffer WINDOW BUFFER-OR-NAME &optional KEEP-MARGINS)
Documentation
Make WINDOW display BUFFER-OR-NAME.
WINDOW must be a live window and defaults to the selected one. BUFFER-OR-NAME must be a buffer or the name of an existing buffer.
Optional third argument KEEP-MARGINS non-nil means that WINDOW's current display margins, fringe widths, and scroll bar settings are preserved; the default is to reset these from the local settings for BUFFER-OR-NAME or the frame defaults. Return nil.
This function throws an error when WINDOW is strongly dedicated to its
buffer (that is window-dedicated-p returns t for WINDOW) and does not
already display BUFFER-OR-NAME.
This function runs window-scroll-functions before running
window-configuration-change-hook.
Probably introduced at or before Emacs version 21.1.
Source Code
// Defined in /usr/src/emacs/src/window.c
{
register Lisp_Object tem, buffer;
register struct window *w = decode_live_window (window);
XSETWINDOW (window, w);
buffer = Fget_buffer (buffer_or_name);
CHECK_BUFFER (buffer);
if (!BUFFER_LIVE_P (XBUFFER (buffer)))
error ("Attempt to display deleted buffer");
tem = w->contents;
if (NILP (tem))
error ("Window is deleted");
else
{
if (!EQ (tem, buffer))
{
if (EQ (w->dedicated, Qt))
/* WINDOW is strongly dedicated to its buffer, signal an
error. */
error ("Window is dedicated to `%s'", SDATA (BVAR (XBUFFER (tem), name)));
else
/* WINDOW is weakly dedicated to its buffer, reset
dedication. */
wset_dedicated (w, Qnil);
call1 (Qrecord_window_buffer, window);
}
unshow_buffer (w);
}
set_window_buffer (window, buffer, true, !NILP (keep_margins));
return Qnil;
}