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.

View in manual

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;
}