2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999
4 @c Free Software Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @setfilename ../info/windows
7 @node Windows, Frames, Buffers, Top
10 This chapter describes most of the functions and variables related to
11 Emacs windows. See @ref{Display}, for information on how text is
15 * Basic Windows:: Basic information on using windows.
16 * Splitting Windows:: Splitting one window into two windows.
17 * Deleting Windows:: Deleting a window gives its space to other windows.
18 * Selecting Windows:: The selected window is the one that you edit in.
19 * Cyclic Window Ordering:: Moving around the existing windows.
20 * Buffers and Windows:: Each window displays the contents of a buffer.
21 * Displaying Buffers:: Higher-lever functions for displaying a buffer
22 and choosing a window for it.
23 * Choosing Window:: How to choose a window for displaying a buffer.
24 * Window Point:: Each window has its own location of point.
25 * Window Start:: The display-start position controls which text
26 is on-screen in the window.
27 * Textual Scrolling:: Moving text up and down through the window.
28 * Vertical Scrolling:: Moving the contents up and down on the window.
29 * Horizontal Scrolling:: Moving the contents sideways on the window.
30 * Size of Window:: Accessing the size of a window.
31 * Resizing Windows:: Changing the size of a window.
32 * Coordinates and Windows:: Converting coordinates to windows.
33 * Window Configurations:: Saving and restoring the state of the screen.
34 * Window Hooks:: Hooks for scrolling, window size changes,
35 redisplay going past a certain point,
36 or window configuration changes.
40 @section Basic Concepts of Emacs Windows
42 @cindex selected window
44 A @dfn{window} in Emacs is the physical area of the screen in which a
45 buffer is displayed. The term is also used to refer to a Lisp object that
46 represents that screen area in Emacs Lisp. It should be
47 clear from the context which is meant.
49 Emacs groups windows into frames. A frame represents an area of
50 screen available for Emacs to use. Each frame always contains at least
51 one window, but you can subdivide it vertically or horizontally into
52 multiple nonoverlapping Emacs windows.
54 In each frame, at any time, one and only one window is designated as
55 @dfn{selected within the frame}. The frame's cursor appears in that
56 window. At any time, one frame is the selected frame; and the window
57 selected within that frame is @dfn{the selected window}. The selected
58 window's buffer is usually the current buffer (except when
59 @code{set-buffer} has been used). @xref{Current Buffer}.
61 For practical purposes, a window exists only while it is displayed in
62 a frame. Once removed from the frame, the window is effectively deleted
63 and should not be used, @emph{even though there may still be references
64 to it} from other Lisp objects. Restoring a saved window configuration
65 is the only way for a window no longer on the screen to come back to
66 life. (@xref{Deleting Windows}.)
68 Each window has the following attributes:
81 window edges with respect to the screen or frame
84 the buffer it displays
87 position within the buffer at the upper left of the window
90 amount of horizontal scrolling, in columns
99 how recently the window was selected
102 @cindex multiple windows
103 Users create multiple windows so they can look at several buffers at
104 once. Lisp libraries use multiple windows for a variety of reasons, but
105 most often to display related information. In Rmail, for example, you
106 can move through a summary buffer in one window while the other window
107 shows messages one at a time as they are reached.
109 The meaning of ``window'' in Emacs is similar to what it means in the
110 context of general-purpose window systems such as X, but not identical.
111 The X Window System places X windows on the screen; Emacs uses one or
112 more X windows as frames, and subdivides them into
113 Emacs windows. When you use Emacs on a character-only terminal, Emacs
114 treats the whole terminal screen as one frame.
116 @cindex terminal screen
117 @cindex screen of terminal
118 @cindex tiled windows
119 Most window systems support arbitrarily located overlapping windows.
120 In contrast, Emacs windows are @dfn{tiled}; they never overlap, and
121 together they fill the whole screen or frame. Because of the way in
122 which Emacs creates new windows and resizes them, not all conceivable
123 tilings of windows on an Emacs frame are actually possible.
124 @xref{Splitting Windows}, and @ref{Size of Window}.
126 @xref{Display}, for information on how the contents of the
127 window's buffer are displayed in the window.
129 @defun windowp object
130 This function returns @code{t} if @var{object} is a window.
133 @node Splitting Windows
134 @section Splitting Windows
135 @cindex splitting windows
136 @cindex window splitting
138 The functions described here are the primitives used to split a window
139 into two windows. Two higher level functions sometimes split a window,
140 but not always: @code{pop-to-buffer} and @code{display-buffer}
141 (@pxref{Displaying Buffers}).
143 The functions described here do not accept a buffer as an argument.
144 The two ``halves'' of the split window initially display the same buffer
145 previously visible in the window that was split.
147 @deffn Command split-window &optional window size horizontal
148 This function splits @var{window} into two windows. The original
149 window @var{window} remains the selected window, but occupies only
150 part of its former screen area. The rest is occupied by a newly created
151 window which is returned as the value of this function.
153 If @var{horizontal} is non-@code{nil}, then @var{window} splits into
154 two side by side windows. The original window @var{window} keeps the
155 leftmost @var{size} columns, and gives the rest of the columns to the
156 new window. Otherwise, it splits into windows one above the other, and
157 @var{window} keeps the upper @var{size} lines and gives the rest of the
158 lines to the new window. The original window is therefore the
159 left-hand or upper of the two, and the new window is the right-hand or
162 If @var{window} is omitted or @code{nil}, then the selected window is
163 split. If @var{size} is omitted or @code{nil}, then @var{window} is
164 divided evenly into two parts. (If there is an odd line, it is
165 allocated to the new window.) When @code{split-window} is called
166 interactively, all its arguments are @code{nil}.
168 The following example starts with one window on a screen that is 50
169 lines high by 80 columns wide; then the window is split.
173 (setq w (selected-window))
174 @result{} #<window 8 on windows.texi>
175 (window-edges) ; @r{Edges in order:}
176 @result{} (0 0 80 50) ; @r{left--top--right--bottom}
180 ;; @r{Returns window created}
181 (setq w2 (split-window w 15))
182 @result{} #<window 28 on windows.texi>
186 @result{} (0 15 80 50) ; @r{Bottom window;}
191 @result{} (0 0 80 15) ; @r{Top window}
195 The screen looks like this:
211 Next, the top window is split horizontally:
215 (setq w3 (split-window w 35 t))
216 @result{} #<window 32 on windows.texi>
220 @result{} (35 0 80 15) ; @r{Left edge at column 35}
224 @result{} (0 0 35 15) ; @r{Right edge at column 35}
228 @result{} (0 15 80 50) ; @r{Bottom window unchanged}
233 Now, the screen looks like this:
250 Normally, Emacs indicates the border between two side-by-side windows
251 with a scroll bar (@pxref{Window Frame Parameters,Scroll Bars}) or @samp{|}
252 characters. The display table can specify alternative border
253 characters; see @ref{Display Tables}.
256 @deffn Command split-window-vertically &optional size
257 This function splits the selected window into two windows, one above the
258 other, leaving the upper of the two windows selected, with @var{size}
259 lines. (If @var{size} is negative, then the lower of the two windows
260 gets @minus{} @var{size} lines and the upper window gets the rest, but
261 the upper window is still the one selected.)
264 @deffn Command split-window-horizontally &optional size
265 This function splits the selected window into two windows
266 side-by-side, leaving the selected window with @var{size} columns.
268 This function is basically an interface to @code{split-window}.
269 You could define a simplified version of the function like this:
273 (defun split-window-horizontally (&optional arg)
274 "Split selected window into two windows, side by side..."
278 (let ((size (and arg (prefix-numeric-value arg))))
280 (setq size (+ (window-width) size)))
281 (split-window nil size t)))
286 @defun one-window-p &optional no-mini all-frames
287 This function returns non-@code{nil} if there is only one window. The
288 argument @var{no-mini}, if non-@code{nil}, means don't count the
289 minibuffer even if it is active; otherwise, the minibuffer window is
290 included, if active, in the total number of windows, which is compared
293 The argument @var{all-frames} specifies which frames to consider. Here
294 are the possible values and their meanings:
298 Count the windows in the selected frame, plus the minibuffer used
299 by that frame even if it lies in some other frame.
302 Count all windows in all existing frames.
305 Count all windows in all visible frames.
308 Count all windows in all visible or iconified frames.
311 Count precisely the windows in the selected frame, and no others.
315 @node Deleting Windows
316 @section Deleting Windows
317 @cindex deleting windows
319 A window remains visible on its frame unless you @dfn{delete} it by
320 calling certain functions that delete windows. A deleted window cannot
321 appear on the screen, but continues to exist as a Lisp object until
322 there are no references to it. There is no way to cancel the deletion
323 of a window aside from restoring a saved window configuration
324 (@pxref{Window Configurations}). Restoring a window configuration also
325 deletes any windows that aren't part of that configuration.
327 When you delete a window, the space it took up is given to one
331 @defun window-live-p window
332 This function returns @code{nil} if @var{window} is deleted, and
335 @strong{Warning:} Erroneous information or fatal errors may result from
336 using a deleted window as if it were live.
339 @deffn Command delete-window &optional window
340 This function removes @var{window} from display, and returns @code{nil}.
341 If @var{window} is omitted, then the selected window is deleted. An
342 error is signaled if there is only one window when @code{delete-window}
346 @deffn Command delete-other-windows &optional window
347 This function makes @var{window} the only window on its frame, by
348 deleting the other windows in that frame. If @var{window} is omitted or
349 @code{nil}, then the selected window is used by default.
351 The return value is @code{nil}.
354 @deffn Command delete-windows-on buffer &optional frame
355 This function deletes all windows showing @var{buffer}. If there are
356 no windows showing @var{buffer}, it does nothing.
358 @code{delete-windows-on} operates frame by frame. If a frame has
359 several windows showing different buffers, then those showing
360 @var{buffer} are removed, and the others expand to fill the space. If
361 all windows in some frame are showing @var{buffer} (including the case
362 where there is only one window), then the frame reverts to having a
363 single window showing another buffer chosen with @code{other-buffer}.
364 @xref{The Buffer List}.
366 The argument @var{frame} controls which frames to operate on. This
367 function does not use it in quite the same way as the other functions
368 which scan all windows; specifically, the values @code{t} and @code{nil}
369 have the opposite of their meanings in other functions. Here are the
374 If it is @code{nil}, operate on all frames.
376 If it is @code{t}, operate on the selected frame.
378 If it is @code{visible}, operate on all visible frames.
380 If it is 0, operate on all visible or iconified frames.
382 If it is a frame, operate on that frame.
385 This function always returns @code{nil}.
388 @node Selecting Windows
389 @section Selecting Windows
390 @cindex selecting windows
392 When a window is selected, the buffer in the window becomes the current
393 buffer, and the cursor will appear in it.
395 @defun selected-window
396 This function returns the selected window. This is the window in
397 which the cursor appears and to which many commands apply.
400 @defun select-window window
401 This function makes @var{window} the selected window. The cursor then
402 appears in @var{window} (on redisplay). The buffer being displayed in
403 @var{window} is immediately designated the current buffer.
405 The return value is @var{window}.
409 (setq w (next-window))
411 @result{} #<window 65 on windows.texi>
416 @defmac save-selected-window forms@dots{}
417 This macro records the selected window, executes @var{forms}
418 in sequence, then restores the earlier selected window, unless it
421 This macro does not save or restore anything about the sizes, arrangement
422 or contents of windows; therefore, if the @var{forms} change them,
425 Each frame, at any time, has a window selected within the frame. This
426 macro saves only @emph{the} selected window; it does not save anything
427 about other frames. If the @var{forms} select some other frame and
428 alter the window selected within it, the change persists.
431 @cindex finding windows
432 The following functions choose one of the windows on the screen,
433 offering various criteria for the choice.
435 @defun get-lru-window &optional frame
436 This function returns the window least recently ``used'' (that is,
437 selected). The selected window is always the most recently used window.
439 The selected window can be the least recently used window if it is the
440 only window. A newly created window becomes the least recently used
441 window until it is selected. A minibuffer window is never a candidate.
443 The argument @var{frame} controls which windows are considered.
447 If it is @code{nil}, consider windows on the selected frame.
449 If it is @code{t}, consider windows on all frames.
451 If it is @code{visible}, consider windows on all visible frames.
453 If it is 0, consider windows on all visible or iconified frames.
455 If it is a frame, consider windows on that frame.
459 @defun get-largest-window &optional frame
460 This function returns the window with the largest area (height times
461 width). If there are no side-by-side windows, then this is the window
462 with the most lines. A minibuffer window is never a candidate.
464 If there are two windows of the same size, then the function returns
465 the window that is first in the cyclic ordering of windows (see
466 following section), starting from the selected window.
468 The argument @var{frame} controls which set of windows to
469 consider. See @code{get-lru-window}, above.
472 @cindex window that satisfies a predicate
473 @cindex conditional selection of windows
474 @defun get-window-with-predicate predicate &optional minibuf all-frames default
475 This function returns a window satisfying @var{predicate}. It cycles
476 through all visible windows using @code{walk-windows} (@pxref{Cyclic
477 Window Ordering}), calling @var{predicate} on each one one of them
478 with that window as its argument. The function returns the first
479 window for which @var{predicate} returns a non-@code{nil} value; if
480 that never happens, it returns @var{default}.
482 The optional arguments @var{minibuf} and @var{all-frames} specify the
483 set of windows to include in the scan. See the description of
484 @code{next-window} in @ref{Cyclic Window Ordering}, for details.
487 @node Cyclic Window Ordering
488 @comment node-name, next, previous, up
489 @section Cyclic Ordering of Windows
490 @cindex cyclic ordering of windows
491 @cindex ordering of windows, cyclic
492 @cindex window ordering, cyclic
494 When you use the command @kbd{C-x o} (@code{other-window}) to select
495 the next window, it moves through all the windows on the screen in a
496 specific cyclic order. For any given configuration of windows, this
497 order never varies. It is called the @dfn{cyclic ordering of windows}.
499 This ordering generally goes from top to bottom, and from left to
500 right. But it may go down first or go right first, depending on the
501 order in which the windows were split.
503 If the first split was vertical (into windows one above each other),
504 and then the subwindows were split horizontally, then the ordering is
505 left to right in the top of the frame, and then left to right in the
506 next lower part of the frame, and so on. If the first split was
507 horizontal, the ordering is top to bottom in the left part, and so on.
508 In general, within each set of siblings at any level in the window tree,
509 the order is left to right, or top to bottom.
511 @defun next-window &optional window minibuf all-frames
512 @cindex minibuffer window
513 This function returns the window following @var{window} in the cyclic
514 ordering of windows. This is the window that @kbd{C-x o} would select
515 if typed when @var{window} is selected. If @var{window} is the only
516 window visible, then this function returns @var{window}. If omitted,
517 @var{window} defaults to the selected window.
519 The value of the argument @var{minibuf} determines whether the
520 minibuffer is included in the window order. Normally, when
521 @var{minibuf} is @code{nil}, the minibuffer is included if it is
522 currently active; this is the behavior of @kbd{C-x o}. (The minibuffer
523 window is active while the minibuffer is in use. @xref{Minibuffers}.)
525 If @var{minibuf} is @code{t}, then the cyclic ordering includes the
526 minibuffer window even if it is not active.
528 If @var{minibuf} is neither @code{t} nor @code{nil}, then the minibuffer
529 window is not included even if it is active.
531 The argument @var{all-frames} specifies which frames to consider. Here
532 are the possible values and their meanings:
536 Consider all the windows in @var{window}'s frame, plus the minibuffer
537 used by that frame even if it lies in some other frame.
540 Consider all windows in all existing frames.
543 Consider all windows in all visible frames. (To get useful results, you
544 must ensure @var{window} is in a visible frame.)
547 Consider all windows in all visible or iconified frames.
550 Consider precisely the windows in @var{window}'s frame, and no others.
553 This example assumes there are two windows, both displaying the
554 buffer @samp{windows.texi}:
559 @result{} #<window 56 on windows.texi>
562 (next-window (selected-window))
563 @result{} #<window 52 on windows.texi>
566 (next-window (next-window (selected-window)))
567 @result{} #<window 56 on windows.texi>
572 @defun previous-window &optional window minibuf all-frames
573 This function returns the window preceding @var{window} in the cyclic
574 ordering of windows. The other arguments specify which windows to
575 include in the cycle, as in @code{next-window}.
578 @deffn Command other-window count &optional all-frames
579 This function selects the @var{count}th following window in the cyclic
580 order. If count is negative, then it moves back @minus{}@var{count}
581 windows in the cycle, rather than forward. It returns @code{nil}.
583 The argument @var{all-frames} has the same meaning as in
584 @code{next-window}, but the @var{minibuf} argument of @code{next-window}
585 is always effectively @code{nil}.
587 In an interactive call, @var{count} is the numeric prefix argument.
591 @defun walk-windows proc &optional minibuf all-frames
592 This function cycles through all windows, calling @code{proc}
593 once for each window with the window as its sole argument.
595 The optional arguments @var{minibuf} and @var{all-frames} specify the
596 set of windows to include in the scan. See @code{next-window}, above,
600 @defun window-list &optional frame minibuf window
601 This function returns a list of the windows on @var{frame}, starting
602 with @var{window}. If @var{frame} is @code{nil} or omitted, the
603 selected frame is used instead; if @var{window} is @code{nil} or
604 omitted, the selected window is used instead.
606 The value of @var{minibuf} determines if the minibuffer window will be
607 included in the result list. If @var{minibuf} is @code{t}, the
608 minibuffer window will be included, even if it isn't active. If
609 @var{minibuf} is @code{nil} or omitted, the minibuffer window will
610 only be included in the list if it is active. If @var{minibuf} is
611 neither @code{nil} nor @code{t}, the minibuffer window is not
612 included, whether or not it is active.
615 @node Buffers and Windows
616 @section Buffers and Windows
617 @cindex examining windows
618 @cindex windows, controlling precisely
619 @cindex buffers, controlled in windows
621 This section describes low-level functions to examine windows or to
622 display buffers in windows in a precisely controlled fashion.
624 See the following section for
627 @xref{Displaying Buffers}, for
629 related functions that find a window to use and specify a buffer for it.
630 The functions described there are easier to use than these, but they
631 employ heuristics in choosing or creating a window; use these functions
632 when you need complete control.
634 @defun set-window-buffer window buffer-or-name
635 This function makes @var{window} display @var{buffer-or-name} as its
636 contents. It returns @code{nil}. This is the fundamental primitive
637 for changing which buffer is displayed in a window, and all ways
638 of doing that call this function.
642 (set-window-buffer (selected-window) "foo")
648 @defun window-buffer &optional window
649 This function returns the buffer that @var{window} is displaying. If
650 @var{window} is omitted, this function returns the buffer for the
656 @result{} #<buffer windows.texi>
661 @defun get-buffer-window buffer-or-name &optional all-frames
662 This function returns a window currently displaying
663 @var{buffer-or-name}, or @code{nil} if there is none. If there are
664 several such windows, then the function returns the first one in the
665 cyclic ordering of windows, starting from the selected window.
666 @xref{Cyclic Window Ordering}.
668 The argument @var{all-frames} controls which windows to consider.
672 If it is @code{nil}, consider windows on the selected frame.
674 If it is @code{t}, consider windows on all frames.
676 If it is @code{visible}, consider windows on all visible frames.
678 If it is 0, consider windows on all visible or iconified frames.
680 If it is a frame, consider windows on that frame.
684 @defun get-buffer-window-list buffer-or-name &optional minibuf all-frames
685 This function returns a list of all the windows currently displaying
686 @var{buffer-or-name}.
688 The two optional arguments work like the optional arguments of
689 @code{next-window} (@pxref{Cyclic Window Ordering}); they are @emph{not}
690 like the single optional argument of @code{get-buffer-window}. Perhaps
691 we should change @code{get-buffer-window} in the future to make it
692 compatible with the other functions.
694 The argument @var{all-frames} controls which windows to consider.
698 If it is @code{nil}, consider windows on the selected frame.
700 If it is @code{t}, consider windows on all frames.
702 If it is @code{visible}, consider windows on all visible frames.
704 If it is 0, consider windows on all visible or iconified frames.
706 If it is a frame, consider windows on that frame.
710 @defvar buffer-display-time
711 This variable records the time at which a buffer was last made visible
712 in a window. It is always local in each buffer; each time
713 @code{set-window-buffer} is called, it sets this variable to
714 @code{(current-time)} in the specified buffer (@pxref{Time of Day}).
715 When a buffer is first created, @code{buffer-display-time} starts out
716 with the value @code{nil}.
719 @node Displaying Buffers
720 @section Displaying Buffers in Windows
721 @cindex switching to a buffer
722 @cindex displaying a buffer
724 In this section we describe convenient functions that choose a window
725 automatically and use it to display a specified buffer. These functions
726 can also split an existing window in certain circumstances. We also
727 describe variables that parameterize the heuristics used for choosing a
730 See the preceding section for
733 @xref{Buffers and Windows}, for
735 low-level functions that give you more precise control. All of these
736 functions work by calling @code{set-window-buffer}.
738 Do not use the functions in this section in order to make a buffer
739 current so that a Lisp program can access or modify it; they are too
740 drastic for that purpose, since they change the display of buffers in
741 windows, which would be gratuitous and surprise the user. Instead, use
742 @code{set-buffer} and @code{save-current-buffer} (@pxref{Current
743 Buffer}), which designate buffers as current for programmed access
744 without affecting the display of buffers in windows.
746 @deffn Command switch-to-buffer buffer-or-name &optional norecord
747 This function makes @var{buffer-or-name} the current buffer, and also
748 displays the buffer in the selected window. This means that a human can
749 see the buffer and subsequent keyboard commands will apply to it.
750 Contrast this with @code{set-buffer}, which makes @var{buffer-or-name}
751 the current buffer but does not display it in the selected window.
752 @xref{Current Buffer}.
754 If @var{buffer-or-name} does not identify an existing buffer, then a new
755 buffer by that name is created. The major mode for the new buffer is
756 set according to the variable @code{default-major-mode}. @xref{Auto
759 Normally the specified buffer is put at the front of the buffer list
760 (both the selected frame's buffer list and the frame-independent buffer
761 list). This affects the operation of @code{other-buffer}. However, if
762 @var{norecord} is non-@code{nil}, this is not done. @xref{The Buffer
765 The @code{switch-to-buffer} function is often used interactively, as
766 the binding of @kbd{C-x b}. It is also used frequently in programs. It
767 always returns @code{nil}.
770 @deffn Command switch-to-buffer-other-window buffer-or-name &optional norecord
771 This function makes @var{buffer-or-name} the current buffer and
772 displays it in a window not currently selected. It then selects that
773 window. The handling of the buffer is the same as in
774 @code{switch-to-buffer}.
776 The currently selected window is absolutely never used to do the job.
777 If it is the only window, then it is split to make a distinct window for
778 this purpose. If the selected window is already displaying the buffer,
779 then it continues to do so, but another window is nonetheless found to
780 display it in as well.
782 This function updates the buffer list just like @code{switch-to-buffer}
783 unless @var{norecord} is non-@code{nil}.
786 @defun pop-to-buffer buffer-or-name &optional other-window norecord
787 This function makes @var{buffer-or-name} the current buffer and
788 switches to it in some window, preferably not the window previously
789 selected. The ``popped-to'' window becomes the selected window within
792 If the variable @code{pop-up-frames} is non-@code{nil},
793 @code{pop-to-buffer} looks for a window in any visible frame already
794 displaying the buffer; if there is one, it returns that window and makes
795 it be selected within its frame. If there is none, it creates a new
796 frame and displays the buffer in it.
798 If @code{pop-up-frames} is @code{nil}, then @code{pop-to-buffer}
799 operates entirely within the selected frame. (If the selected frame has
800 just a minibuffer, @code{pop-to-buffer} operates within the most
801 recently selected frame that was not just a minibuffer.)
803 If the variable @code{pop-up-windows} is non-@code{nil}, windows may
804 be split to create a new window that is different from the original
805 window. For details, see @ref{Choosing Window}.
807 If @var{other-window} is non-@code{nil}, @code{pop-to-buffer} finds or
808 creates another window even if @var{buffer-or-name} is already visible
809 in the selected window. Thus @var{buffer-or-name} could end up
810 displayed in two windows. On the other hand, if @var{buffer-or-name} is
811 already displayed in the selected window and @var{other-window} is
812 @code{nil}, then the selected window is considered sufficient display
813 for @var{buffer-or-name}, so that nothing needs to be done.
815 All the variables that affect @code{display-buffer} affect
816 @code{pop-to-buffer} as well. @xref{Choosing Window}.
818 If @var{buffer-or-name} is a string that does not name an existing
819 buffer, a buffer by that name is created. The major mode for the new
820 buffer is set according to the variable @code{default-major-mode}.
821 @xref{Auto Major Mode}.
823 This function updates the buffer list just like @code{switch-to-buffer}
824 unless @var{norecord} is non-@code{nil}.
827 @deffn Command replace-buffer-in-windows buffer
828 This function replaces @var{buffer} with some other buffer in all
829 windows displaying it. The other buffer used is chosen with
830 @code{other-buffer}. In the usual applications of this function, you
831 don't care which other buffer is used; you just want to make sure that
832 @var{buffer} is no longer displayed.
834 This function returns @code{nil}.
837 @node Choosing Window
838 @section Choosing a Window for Display
840 This section describes the basic facility that chooses a window to
841 display a buffer in---@code{display-buffer}. All the higher-level
842 functions and commands use this subroutine. Here we describe how to use
843 @code{display-buffer} and how to customize it.
845 @deffn Command display-buffer buffer-or-name &optional not-this-window frame
846 This command makes @var{buffer-or-name} appear in some window, like
847 @code{pop-to-buffer}, but it does not select that window and does not
848 make the buffer current. The identity of the selected window is
849 unaltered by this function.
851 If @var{not-this-window} is non-@code{nil}, it means to display the
852 specified buffer in a window other than the selected one, even if it is
853 already on display in the selected window. This can cause the buffer to
854 appear in two windows at once. Otherwise, if @var{buffer-or-name} is
855 already being displayed in any window, that is good enough, so this
856 function does nothing.
858 @code{display-buffer} returns the window chosen to display
859 @var{buffer-or-name}.
861 If the argument @var{frame} is non-@code{nil}, it specifies which frames
862 to check when deciding whether the buffer is already displayed. If the
863 buffer is already displayed in some window on one of these frames,
864 @code{display-buffer} simply returns that window. Here are the possible
865 values of @var{frame}:
869 If it is @code{nil}, consider windows on the selected frame.
871 If it is @code{t}, consider windows on all frames.
873 If it is @code{visible}, consider windows on all visible frames.
875 If it is 0, consider windows on all visible or iconified frames.
877 If it is a frame, consider windows on that frame.
880 Precisely how @code{display-buffer} finds or creates a window depends on
881 the variables described below.
884 @defopt display-buffer-reuse-frames
885 If this variable is non-@code{nil}, @code{display-buffer} searches
886 existing frames for a window displaying the buffer. If the buffer is
887 already displayed in a window in some frame, @code{display-buffer} makes
888 the frame visible and raises it, to use that window. If the buffer is
889 not already displayed, or if @code{display-buffer-reuse-frames} is
890 @code{nil}, @code{display-buffer}'s behavior is determined by other
891 variables, described below.
894 @defopt pop-up-windows
895 This variable controls whether @code{display-buffer} makes new windows.
896 If it is non-@code{nil} and there is only one window, then that window
897 is split. If it is @code{nil}, then @code{display-buffer} does not
898 split the single window, but uses it whole.
901 @defopt split-height-threshold
902 This variable determines when @code{display-buffer} may split a window,
903 if there are multiple windows. @code{display-buffer} always splits the
904 largest window if it has at least this many lines. If the largest
905 window is not this tall, it is split only if it is the sole window and
906 @code{pop-up-windows} is non-@code{nil}.
909 @defopt even-window-heights
910 This variable determines if @code{display-buffer} should even out window
911 heights if the buffer gets displayed in an existing window, above or
912 beneath another existing window. If @code{even-window-heights} is
913 @code{t}, the default, window heights will be evened out. If
914 @code{even-window-heights} is @code{nil}, the orginal window heights
919 @defopt pop-up-frames
920 This variable controls whether @code{display-buffer} makes new frames.
921 If it is non-@code{nil}, @code{display-buffer} looks for an existing
922 window already displaying the desired buffer, on any visible frame. If
923 it finds one, it returns that window. Otherwise it makes a new frame.
924 The variables @code{pop-up-windows} and @code{split-height-threshold} do
925 not matter if @code{pop-up-frames} is non-@code{nil}.
927 If @code{pop-up-frames} is @code{nil}, then @code{display-buffer} either
928 splits a window or reuses one.
930 @xref{Frames}, for more information.
934 @defvar pop-up-frame-function
935 This variable specifies how to make a new frame if @code{pop-up-frames}
938 Its value should be a function of no arguments. When
939 @code{display-buffer} makes a new frame, it does so by calling that
940 function, which should return a frame. The default value of the
941 variable is a function that creates a frame using parameters from
942 @code{pop-up-frame-alist}.
945 @defopt pop-up-frame-alist
946 This variable holds an alist specifying frame parameters used when
947 @code{display-buffer} makes a new frame. @xref{Frame Parameters}, for
948 more information about frame parameters.
951 @defopt special-display-buffer-names
952 A list of buffer names for buffers that should be displayed specially.
953 If the buffer's name is in this list, @code{display-buffer} handles the
956 By default, special display means to give the buffer a dedicated frame.
958 If an element is a list, instead of a string, then the @sc{car} of the
959 list is the buffer name, and the rest of the list says how to create the
960 frame. There are two possibilities for the rest of the list. It can be
961 an alist, specifying frame parameters, or it can contain a function and
962 arguments to give to it. (The function's first argument is always the
963 buffer to be displayed; the arguments from the list come after that.)
966 @defopt special-display-regexps
967 A list of regular expressions that specify buffers that should be
968 displayed specially. If the buffer's name matches any of the regular
969 expressions in this list, @code{display-buffer} handles the buffer
972 By default, special display means to give the buffer a dedicated frame.
974 If an element is a list, instead of a string, then the @sc{car} of the
975 list is the regular expression, and the rest of the list says how to
976 create the frame. See above, under @code{special-display-buffer-names}.
979 @defvar special-display-function
980 This variable holds the function to call to display a buffer specially.
981 It receives the buffer as an argument, and should return the window in
982 which it is displayed.
984 The default value of this variable is
985 @code{special-display-popup-frame}.
988 @defun special-display-popup-frame buffer &rest args
989 This function makes @var{buffer} visible in a frame of its own. If
990 @var{buffer} is already displayed in a window in some frame, it makes
991 the frame visible and raises it, to use that window. Otherwise, it
992 creates a frame that will be dedicated to @var{buffer}.
994 If @var{args} is an alist, it specifies frame parameters for the new
997 If @var{args} is a list whose @sc{car} is a symbol, then @code{(car
998 @var{args})} is called as a function to actually create and set up the
999 frame; it is called with @var{buffer} as first argument, and @code{(cdr
1000 @var{args})} as additional arguments.
1002 This function always uses an existing window displaying @var{buffer},
1003 whether or not it is in a frame of its own; but if you set up the above
1004 variables in your init file, before @var{buffer} was created, then
1005 presumably the window was previously made by this function.
1008 @defopt special-display-frame-alist
1009 This variable holds frame parameters for
1010 @code{special-display-popup-frame} to use when it creates a frame.
1013 @defopt same-window-buffer-names
1014 A list of buffer names for buffers that should be displayed in the
1015 selected window. If the buffer's name is in this list,
1016 @code{display-buffer} handles the buffer by switching to it in the
1020 @defopt same-window-regexps
1021 A list of regular expressions that specify buffers that should be
1022 displayed in the selected window. If the buffer's name matches any of
1023 the regular expressions in this list, @code{display-buffer} handles the
1024 buffer by switching to it in the selected window.
1028 @defvar display-buffer-function
1029 This variable is the most flexible way to customize the behavior of
1030 @code{display-buffer}. If it is non-@code{nil}, it should be a function
1031 that @code{display-buffer} calls to do the work. The function should
1032 accept two arguments, the same two arguments that @code{display-buffer}
1033 received. It should choose or create a window, display the specified
1034 buffer, and then return the window.
1036 This hook takes precedence over all the other options and hooks
1041 @cindex dedicated window
1042 A window can be marked as ``dedicated'' to its buffer. Then
1043 @code{display-buffer} will not try to use that window to display any
1046 @defun window-dedicated-p window
1047 This function returns @code{t} if @var{window} is marked as dedicated;
1048 otherwise @code{nil}.
1051 @defun set-window-dedicated-p window flag
1052 This function marks @var{window} as dedicated if @var{flag} is
1053 non-@code{nil}, and nondedicated otherwise.
1057 @section Windows and Point
1058 @cindex window position
1059 @cindex window point
1060 @cindex position in window
1061 @cindex point in window
1063 Each window has its own value of point, independent of the value of
1064 point in other windows displaying the same buffer. This makes it useful
1065 to have multiple windows showing one buffer.
1069 The window point is established when a window is first created; it is
1070 initialized from the buffer's point, or from the window point of another
1071 window opened on the buffer if such a window exists.
1074 Selecting a window sets the value of point in its buffer from the
1075 window's value of point. Conversely, deselecting a window sets the
1076 window's value of point from that of the buffer. Thus, when you switch
1077 between windows that display a given buffer, the point value for the
1078 selected window is in effect in the buffer, while the point values for
1079 the other windows are stored in those windows.
1082 As long as the selected window displays the current buffer, the window's
1083 point and the buffer's point always move together; they remain equal.
1086 @xref{Positions}, for more details on buffer positions.
1089 As far as the user is concerned, point is where the cursor is, and
1090 when the user switches to another buffer, the cursor jumps to the
1091 position of point in that buffer.
1093 @defun window-point &optional window
1094 This function returns the current position of point in @var{window}.
1095 For a nonselected window, this is the value point would have (in that
1096 window's buffer) if that window were selected. If @var{window} is
1097 @code{nil}, the selected window is used.
1099 When @var{window} is the selected window and its buffer is also the
1100 current buffer, the value returned is the same as point in that buffer.
1102 Strictly speaking, it would be more correct to return the
1103 ``top-level'' value of point, outside of any @code{save-excursion}
1104 forms. But that value is hard to find.
1107 @defun set-window-point window position
1108 This function positions point in @var{window} at position
1109 @var{position} in @var{window}'s buffer.
1113 @section The Window Start Position
1115 Each window contains a marker used to keep track of a buffer position
1116 that specifies where in the buffer display should start. This position
1117 is called the @dfn{display-start} position of the window (or just the
1118 @dfn{start}). The character after this position is the one that appears
1119 at the upper left corner of the window. It is usually, but not
1120 inevitably, at the beginning of a text line.
1122 @defun window-start &optional window
1123 @cindex window top line
1124 This function returns the display-start position of window
1125 @var{window}. If @var{window} is @code{nil}, the selected window is
1135 When you create a window, or display a different buffer in it, the
1136 display-start position is set to a display-start position recently used
1137 for the same buffer, or 1 if the buffer doesn't have any.
1139 Redisplay updates the window-start position (if you have not specified
1140 it explicitly since the previous redisplay)---for example, to make sure
1141 point appears on the screen. Nothing except redisplay automatically
1142 changes the window-start position; if you move point, do not expect the
1143 window-start position to change in response until after the next
1146 For a realistic example of using @code{window-start}, see the
1147 description of @code{count-lines} in @ref{Text Lines}.
1150 @defun window-end &optional window update
1151 This function returns the position of the end of the display in window
1152 @var{window}. If @var{window} is @code{nil}, the selected window is
1155 Simply changing the buffer text or moving point does not update the
1156 value that @code{window-end} returns. The value is updated only when
1157 Emacs redisplays and redisplay completes without being preempted.
1159 If the last redisplay of @var{window} was preempted, and did not finish,
1160 Emacs does not know the position of the end of display in that window.
1161 In that case, this function returns @code{nil}.
1163 If @var{update} is non-@code{nil}, @code{window-end} always returns an
1164 up-to-date value for where the window ends, based on the current
1165 @code{window-start} value. If the saved value is valid,
1166 @code{window-end} returns that; otherwise it computes the correct
1167 value by scanning the buffer text.
1169 Even if @var{update} is non-@code{nil}, @code{window-end} does not
1170 attempt to scroll the display if point has moved off the screen, the
1171 way real redisplay would do. It does not alter the
1172 @code{window-start} value. In effect, it reports where the displayed
1173 text will end if scrolling is not required.
1176 @defun set-window-start window position &optional noforce
1177 This function sets the display-start position of @var{window} to
1178 @var{position} in @var{window}'s buffer. It returns @var{position}.
1180 The display routines insist that the position of point be visible when a
1181 buffer is displayed. Normally, they change the display-start position
1182 (that is, scroll the window) whenever necessary to make point visible.
1183 However, if you specify the start position with this function using
1184 @code{nil} for @var{noforce}, it means you want display to start at
1185 @var{position} even if that would put the location of point off the
1186 screen. If this does place point off screen, the display routines move
1187 point to the left margin on the middle line in the window.
1189 For example, if point @w{is 1} and you set the start of the window @w{to
1190 2}, then point would be ``above'' the top of the window. The display
1191 routines will automatically move point if it is still 1 when redisplay
1192 occurs. Here is an example:
1196 ;; @r{Here is what @samp{foo} looks like before executing}
1197 ;; @r{the @code{set-window-start} expression.}
1201 ---------- Buffer: foo ----------
1202 @point{}This is the contents of buffer foo.
1208 ---------- Buffer: foo ----------
1214 (1+ (window-start)))
1219 ;; @r{Here is what @samp{foo} looks like after executing}
1220 ;; @r{the @code{set-window-start} expression.}
1221 ---------- Buffer: foo ----------
1222 his is the contents of buffer foo.
1228 ---------- Buffer: foo ----------
1232 If @var{noforce} is non-@code{nil}, and @var{position} would place point
1233 off screen at the next redisplay, then redisplay computes a new window-start
1234 position that works well with point, and thus @var{position} is not used.
1237 @defun pos-visible-in-window-p &optional position window partially
1238 This function returns @code{t} if @var{position} is within the range of
1239 text currently visible on the screen in @var{window}. It returns
1240 @code{nil} if @var{position} is scrolled vertically or horizontally out
1241 of view. Locations that are partially obscured are not considered
1242 visible unless @var{partially} is non-@code{nil}. The argument
1243 @var{position} defaults to the current position of point in
1244 @var{window}; @var{window}, to the selected window.
1250 (or (pos-visible-in-window-p
1251 (point) (selected-window))
1257 @node Textual Scrolling
1258 @section Textual Scrolling
1259 @cindex textual scrolling
1260 @cindex scrolling textually
1262 @dfn{Textual scrolling} means moving the text up or down though a
1263 window. It works by changing the value of the window's display-start
1264 location. It may also change the value of @code{window-point} to keep
1265 point on the screen.
1267 Textual scrolling was formerly called ``vertical scrolling,'' but we
1268 changed its name to distinguish it from the new vertical fractional
1269 scrolling feature (@pxref{Vertical Scrolling}).
1271 In the commands @code{scroll-up} and @code{scroll-down}, the directions
1272 ``up'' and ``down'' refer to the motion of the text in the buffer at which
1273 you are looking through the window. Imagine that the text is
1274 written on a long roll of paper and that the scrolling commands move the
1275 paper up and down. Thus, if you are looking at text in the middle of a
1276 buffer and repeatedly call @code{scroll-down}, you will eventually see
1277 the beginning of the buffer.
1279 Some people have urged that the opposite convention be used: they
1280 imagine that the window moves over text that remains in place. Then
1281 ``down'' commands would take you to the end of the buffer. This view is
1282 more consistent with the actual relationship between windows and the
1283 text in the buffer, but it is less like what the user sees. The
1284 position of a window on the terminal does not move, and short scrolling
1285 commands clearly move the text up or down on the screen. We have chosen
1286 names that fit the user's point of view.
1288 The textual scrolling functions (aside from
1289 @code{scroll-other-window}) have unpredictable results if the current
1290 buffer is different from the buffer that is displayed in the selected
1291 window. @xref{Current Buffer}.
1293 @deffn Command scroll-up &optional count
1294 This function scrolls the text in the selected window upward
1295 @var{count} lines. If @var{count} is negative, scrolling is actually
1298 If @var{count} is @code{nil} (or omitted), then the length of scroll
1299 is @code{next-screen-context-lines} lines less than the usable height of
1300 the window (not counting its mode line).
1302 @code{scroll-up} returns @code{nil}.
1305 @deffn Command scroll-down &optional count
1306 This function scrolls the text in the selected window downward
1307 @var{count} lines. If @var{count} is negative, scrolling is actually
1310 If @var{count} is omitted or @code{nil}, then the length of the scroll
1311 is @code{next-screen-context-lines} lines less than the usable height of
1312 the window (not counting its mode line).
1314 @code{scroll-down} returns @code{nil}.
1317 @deffn Command scroll-other-window &optional count
1318 This function scrolls the text in another window upward @var{count}
1319 lines. Negative values of @var{count}, or @code{nil}, are handled
1320 as in @code{scroll-up}.
1322 You can specify which buffer to scroll by setting the variable
1323 @code{other-window-scroll-buffer} to a buffer. If that buffer isn't
1324 already displayed, @code{scroll-other-window} displays it in some
1327 When the selected window is the minibuffer, the next window is normally
1328 the one at the top left corner. You can specify a different window to
1329 scroll, when the minibuffer is selected, by setting the variable
1330 @code{minibuffer-scroll-window}. This variable has no effect when any
1331 other window is selected. @xref{Minibuffer Misc}.
1333 When the minibuffer is active, it is the next window if the selected
1334 window is the one at the bottom right corner. In this case,
1335 @code{scroll-other-window} attempts to scroll the minibuffer. If the
1336 minibuffer contains just one line, it has nowhere to scroll to, so the
1337 line reappears after the echo area momentarily displays the message
1338 ``Beginning of buffer''.
1342 @defvar other-window-scroll-buffer
1343 If this variable is non-@code{nil}, it tells @code{scroll-other-window}
1344 which buffer to scroll.
1347 @defopt scroll-margin
1348 This option specifies the size of the scroll margin---a minimum number
1349 of lines between point and the top or bottom of a window. Whenever
1350 point gets within this many lines of the top or bottom of the window,
1351 the window scrolls automatically (if possible) to move point out of the
1352 margin, closer to the center of the window.
1355 @defopt scroll-conservatively
1356 This variable controls how scrolling is done automatically when point
1357 moves off the screen (or into the scroll margin). If the value is zero,
1358 then redisplay scrolls the text to center point vertically in the
1359 window. If the value is a positive integer @var{n}, then redisplay
1360 scrolls the window up to @var{n} lines in either direction, if that will
1361 bring point back into view. Otherwise, it centers point. The default
1365 @defopt scroll-down-aggressively
1366 @tindex scroll-down-aggressively
1367 The value of this variable should be either @code{nil} or a fraction
1368 @var{f} between 0 and 1. If it is a fraction, that specifies where on
1369 the screen to put point when scrolling down. More precisely, when a
1370 window scrolls down because point is above the window start, the new
1371 start position is chosen to put point @var{f} part of the window
1372 height from the top. The larger @var{f}, the more aggressive the
1375 A value of @code{nil} is equivalent to .5, since its effect is to center
1376 point. This variable automatically becomes buffer-local when set in any
1380 @defopt scroll-up-aggressively
1381 @tindex scroll-up-aggressively
1382 Likewise, for scrolling up. The value, @var{f}, specifies how far
1383 point should be placed from the bottom of the window; thus, as with
1384 @code{scroll-up-aggressively}, a larger value scrolls more aggressively.
1388 This variable is an older variant of @code{scroll-conservatively}. The
1389 difference is that it if its value is @var{n}, that permits scrolling
1390 only by precisely @var{n} lines, not a smaller number. This feature
1391 does not work with @code{scroll-margin}. The default value is zero.
1394 @defopt scroll-preserve-screen-position
1395 If this option is non-@code{nil}, the scroll functions move point so
1396 that the vertical position of the cursor is unchanged, when that is
1400 @defopt next-screen-context-lines
1401 The value of this variable is the number of lines of continuity to
1402 retain when scrolling by full screens. For example, @code{scroll-up}
1403 with an argument of @code{nil} scrolls so that this many lines at the
1404 bottom of the window appear instead at the top. The default value is
1408 @deffn Command recenter &optional count
1409 @cindex centering point
1410 This function scrolls the selected window to put the text where point
1411 is located at a specified vertical position within the window.
1413 If @var{count} is a nonnegative number, it puts the line containing
1414 point @var{count} lines down from the top of the window. If @var{count}
1415 is a negative number, then it counts upward from the bottom of the
1416 window, so that @minus{}1 stands for the last usable line in the window.
1417 If @var{count} is a non-@code{nil} list, then it stands for the line in
1418 the middle of the window.
1420 If @var{count} is @code{nil}, @code{recenter} puts the line containing
1421 point in the middle of the window, then clears and redisplays the entire
1424 When @code{recenter} is called interactively, @var{count} is the raw
1425 prefix argument. Thus, typing @kbd{C-u} as the prefix sets the
1426 @var{count} to a non-@code{nil} list, while typing @kbd{C-u 4} sets
1427 @var{count} to 4, which positions the current line four lines from the
1430 With an argument of zero, @code{recenter} positions the current line at
1431 the top of the window. This action is so handy that some people make a
1432 separate key binding to do this. For example,
1436 (defun line-to-top-of-window ()
1437 "Scroll current line to top of window.
1438 Replaces three keystroke sequence C-u 0 C-l."
1442 (global-set-key [kp-multiply] 'line-to-top-of-window)
1447 @node Vertical Scrolling
1448 @section Vertical Fractional Scrolling
1449 @cindex Vertical Fractional Scrolling
1451 @dfn{Vertical fractional scrolling} means shifting the image in the
1452 window up or down by a specified multiple or fraction of a line.
1453 Starting in Emacs 21, each window has a @dfn{vertical scroll position},
1454 which is a number, never less than zero. It specifies how far to raise
1455 the contents of the window. Raising the window contents generally makes
1456 all or part of some lines disappear off the top, and all or part of some
1457 other lines appear at the bottom. The usual value is zero.
1459 The vertical scroll position is measured in units of the normal line
1460 height, which is the height of the default font. Thus, if the value is
1461 .5, that means the window contents are scrolled up half the normal line
1462 height. If it is 3.3, that means the window contents are scrolled up
1463 somewhat over three times the normal line height.
1465 What fraction of a line the vertical scrolling covers, or how many
1466 lines, depends on what the lines contain. A value of .5 could scroll a
1467 line whose height is very short off the screen, while a value of 3.3
1468 could scroll just part of the way through a tall line or an image.
1470 @defun window-vscroll &optional window
1471 This function returns the current vertical scroll position of
1472 @var{window}, If @var{window} is @code{nil}, the selected window is
1483 @defun set-window-vscroll window lines
1484 This function sets @var{window}'s vertical scroll position to
1485 @var{lines}. The argument @var{lines} should be zero or positive; if
1486 not, it is taken as zero.
1488 The actual vertical scroll position must always correspond
1489 to an integral number of pixels, so the value you specify
1490 is rounded accordingly.
1492 The return value is the result of this rounding.
1496 (set-window-vscroll (selected-window) 1.2)
1502 @node Horizontal Scrolling
1503 @section Horizontal Scrolling
1504 @cindex horizontal scrolling
1506 @dfn{Horizontal scrolling} means shifting the image in the window left
1507 or right by a specified multiple of the normal character width. Each
1508 window has a @dfn{vertical scroll position}, which is a number, never
1509 less than zero. It specifies how far to shift the contents left.
1510 Shifting the window contents left generally makes all or part of some
1511 characters disappear off the left, and all or part of some other
1512 characters appear at the right. The usual value is zero.
1514 The horizontal scroll position is measured in units of the normal
1515 character width, which is the width of space in the default font. Thus,
1516 if the value is 5, that means the window contents are scrolled left by 5
1517 times the normal character width. How many characters actually
1518 disappear off to the left depends on their width, and could vary from
1521 Because we read from side to side in the ``inner loop'', and from top
1522 to bottom in the ``outer loop'', the effect of horizontal scrolling is
1523 not like that of textual or vertical scrolling. Textual scrolling
1524 involves selection of a portion of text to display, and vertical
1525 scrolling moves the window contents contiguously; but horizontal
1526 scrolling causes part of @emph{each line} to go off screen.
1528 Usually, no horizontal scrolling is in effect; then the leftmost
1529 column is at the left edge of the window. In this state, scrolling to
1530 the right is meaningless, since there is no data to the left of the edge
1531 to be revealed by it; so this is not allowed. Scrolling to the left is
1532 allowed; it scrolls the first columns of text off the edge of the window
1533 and can reveal additional columns on the right that were truncated
1534 before. Once a window has a nonzero amount of leftward horizontal
1535 scrolling, you can scroll it back to the right, but only so far as to
1536 reduce the net horizontal scroll to zero. There is no limit to how far
1537 left you can scroll, but eventually all the text will disappear off the
1540 In Emacs 21, redisplay automatically alters the horizontal scrolling
1541 of a window as necessary to ensure that point is always visible, if
1542 @code{automatic-hscrolling} is set. However, you can still set the
1543 horizontal scrolling value explicitly. The value you specify serves as
1544 a lower bound for automatic scrolling, i.e. automatic scrolling
1545 will not scroll a window to a column less than the specified one.
1547 @deffn Command scroll-left &optional count
1548 This function scrolls the selected window @var{count} columns to the
1549 left (or to the right if @var{count} is negative). The default
1550 for @var{count} is the window width, minus 2.
1552 The return value is the total amount of leftward horizontal scrolling in
1553 effect after the change---just like the value returned by
1554 @code{window-hscroll} (below).
1557 @deffn Command scroll-right &optional count
1558 This function scrolls the selected window @var{count} columns to the
1559 right (or to the left if @var{count} is negative). The default
1560 for @var{count} is the window width, minus 2.
1562 The return value is the total amount of leftward horizontal scrolling in
1563 effect after the change---just like the value returned by
1564 @code{window-hscroll} (below).
1566 Once you scroll a window as far right as it can go, back to its normal
1567 position where the total leftward scrolling is zero, attempts to scroll
1568 any farther right have no effect.
1571 @defun window-hscroll &optional window
1572 This function returns the total leftward horizontal scrolling of
1573 @var{window}---the number of columns by which the text in @var{window}
1574 is scrolled left past the left margin.
1576 The value is never negative. It is zero when no horizontal scrolling
1577 has been done in @var{window} (which is usually the case).
1579 If @var{window} is @code{nil}, the selected window is used.
1597 @defun set-window-hscroll window columns
1598 This function sets the number of columns from the left margin that
1599 @var{window} is scrolled from the value of @var{columns}. The argument
1600 @var{columns} should be zero or positive; if not, it is taken as zero.
1601 Fractional values of @var{columns} are not supported at present.
1603 The value returned is @var{columns}.
1607 (set-window-hscroll (selected-window) 10)
1613 Here is how you can determine whether a given position @var{position}
1614 is off the screen due to horizontal scrolling:
1618 (defun hscroll-on-screen (window position)
1620 (goto-char position)
1622 (>= (- (current-column) (window-hscroll window)) 0)
1623 (< (- (current-column) (window-hscroll window))
1624 (window-width window)))))
1628 @node Size of Window
1629 @section The Size of a Window
1631 @cindex size of window
1633 An Emacs window is rectangular, and its size information consists of
1634 the height (the number of lines) and the width (the number of character
1635 positions in each line). The mode line is included in the height. But
1636 the width does not count the scroll bar or the column of @samp{|}
1637 characters that separates side-by-side windows.
1639 The following three functions return size information about a window:
1641 @defun window-height &optional window
1642 This function returns the number of lines in @var{window}, including its
1643 mode line. If @var{window} fills its entire frame, this is typically
1644 one less than the value of @code{frame-height} on that frame (since the
1645 last line is always reserved for the minibuffer).
1647 If @var{window} is @code{nil}, the function uses the selected window.
1655 (split-window-vertically)
1656 @result{} #<window 4 on windows.texi>
1665 @defun window-width &optional window
1666 This function returns the number of columns in @var{window}. If
1667 @var{window} fills its entire frame, this is the same as the value of
1668 @code{frame-width} on that frame. The width does not include the
1669 window's scroll bar or the column of @samp{|} characters that separates
1670 side-by-side windows.
1672 If @var{window} is @code{nil}, the function uses the selected window.
1682 @defun window-edges &optional window
1683 This function returns a list of the edge coordinates of @var{window}.
1684 If @var{window} is @code{nil}, the selected window is used.
1686 The order of the list is @code{(@var{left} @var{top} @var{right}
1687 @var{bottom})}, all elements relative to 0, 0 at the top left corner of
1688 the frame. The element @var{right} of the value is one more than the
1689 rightmost column used by @var{window}, and @var{bottom} is one more than
1690 the bottommost row used by @var{window} and its mode-line.
1692 If a window has a scroll bar, the right edge value includes the width of
1693 the scroll bar. Otherwise, if the window has a neighbor on the right,
1694 its right edge value includes the width of the separator line between
1695 the window and that neighbor. Since the width of the window does not
1696 include this separator, the width does not usually equal the difference
1697 between the right and left edges.
1699 Here is the result obtained on a typical 24-line terminal with just one
1704 (window-edges (selected-window))
1705 @result{} (0 0 80 23)
1710 The bottom edge is at line 23 because the last line is the echo area.
1712 If @var{window} is at the upper left corner of its frame, then
1713 @var{bottom} is the same as the value of @code{(window-height)},
1714 @var{right} is almost the same as the value of @code{(window-width)},
1715 and @var{top} and @var{left} are zero. For example, the edges of the
1716 following window are @w{@samp{0 0 8 5}}. Assuming that the frame has
1717 more than 8 columns, the last column of the window (column 7) holds a
1718 border rather than text. The last row (row 4) holds the mode line,
1719 shown here with @samp{xxxxxxxxx}.
1735 In the following example, let's suppose that the frame is 7
1736 columns wide. Then the edges of the left window are @w{@samp{0 0 4 3}}
1737 and the edges of the right window are @w{@samp{4 0 8 3}}.
1751 @node Resizing Windows
1752 @section Changing the Size of a Window
1753 @cindex window resizing
1754 @cindex changing window size
1755 @cindex window size, changing
1757 The window size functions fall into two classes: high-level commands
1758 that change the size of windows and low-level functions that access
1759 window size. Emacs does not permit overlapping windows or gaps between
1760 windows, so resizing one window affects other windows.
1762 @deffn Command enlarge-window size &optional horizontal
1763 This function makes the selected window @var{size} lines taller,
1764 stealing lines from neighboring windows. It takes the lines from one
1765 window at a time until that window is used up, then takes from another.
1766 If a window from which lines are stolen shrinks below
1767 @code{window-min-height} lines, that window disappears.
1769 If @var{horizontal} is non-@code{nil}, this function makes
1770 @var{window} wider by @var{size} columns, stealing columns instead of
1771 lines. If a window from which columns are stolen shrinks below
1772 @code{window-min-width} columns, that window disappears.
1774 If the requested size would exceed that of the window's frame, then the
1775 function makes the window occupy the entire height (or width) of the
1778 If there are various other windows from which lines or columns can be
1779 stolen, and some of them specify fixed size (using
1780 @code{window-size-fixed}, see below), they are left untouched while
1781 other windows are ``robbed.'' If it would be necessary to alter the
1782 size of a fixed-size window, @code{enlarge-window} gets an error
1785 If @var{size} is negative, this function shrinks the window by
1786 @minus{}@var{size} lines or columns. If that makes the window smaller
1787 than the minimum size (@code{window-min-height} and
1788 @code{window-min-width}), @code{enlarge-window} deletes the window.
1790 @code{enlarge-window} returns @code{nil}.
1793 @deffn Command enlarge-window-horizontally columns
1794 This function makes the selected window @var{columns} wider.
1795 It could be defined as follows:
1799 (defun enlarge-window-horizontally (columns)
1800 (enlarge-window columns t))
1805 @deffn Command shrink-window size &optional horizontal
1806 This function is like @code{enlarge-window} but negates the argument
1807 @var{size}, making the selected window smaller by giving lines (or
1808 columns) to the other windows. If the window shrinks below
1809 @code{window-min-height} or @code{window-min-width}, then it disappears.
1811 If @var{size} is negative, the window is enlarged by @minus{}@var{size}
1815 @deffn Command shrink-window-horizontally columns
1816 This function makes the selected window @var{columns} narrower.
1817 It could be defined as follows:
1821 (defun shrink-window-horizontally (columns)
1822 (shrink-window columns t))
1827 @deffn Command shrink-window-if-larger-than-buffer &optional window
1828 This command shrinks @var{window} to be as small as possible while still
1829 showing the full contents of its buffer---but not less than
1830 @code{window-min-height} lines. If @var{window} is not given,
1831 it defaults to the selected window.
1833 However, the command does nothing if the window is already too small to
1834 display the whole text of the buffer, or if part of the contents are
1835 currently scrolled off screen, or if the window is not the full width of
1836 its frame, or if the window is the only window in its frame.
1839 @tindex window-size-fixed
1840 @defvar window-size-fixed
1841 If this variable is non-@code{nil}, in any given buffer,
1842 then the size of any window displaying the buffer remains fixed
1843 unless you explicitly change it or Emacs has no other choice.
1844 (This feature is new in Emacs 21.)
1846 If the value is @code{height}, then only the window's height is fixed;
1847 if the value is @code{width}, then only the window's width is fixed.
1848 Any other non-@code{nil} value fixes both the width and the height.
1850 The usual way to use this variable is to give it a buffer-local value in
1851 a particular buffer. That way, the windows (but usually there is only
1852 one) displaying that buffer have fixed size.
1854 Explicit size-change functions such as @code{enlarge-window}
1855 get an error if they would have to change a window size which is fixed.
1856 Therefore, when you want to change the size of such a window,
1857 you should bind @code{window-size-fixed} to @code{nil}, like this:
1860 (let ((window-size-fixed nil))
1861 (enlarge-window 10))
1864 Note that changing the frame size will change the size of a
1865 fixed-size window, if there is no other alternative.
1868 @cindex minimum window size
1869 The following two variables constrain the window-size-changing
1870 functions to a minimum height and width.
1872 @defopt window-min-height
1873 The value of this variable determines how short a window may become
1874 before it is automatically deleted. Making a window smaller than
1875 @code{window-min-height} automatically deletes it, and no window may be
1876 created shorter than this. The absolute minimum height is two (allowing
1877 one line for the mode line, and one line for the buffer display).
1878 Actions that change window sizes reset this variable to two if it is
1879 less than two. The default value is 4.
1882 @defopt window-min-width
1883 The value of this variable determines how narrow a window may become
1884 before it is automatically deleted. Making a window smaller than
1885 @code{window-min-width} automatically deletes it, and no window may be
1886 created narrower than this. The absolute minimum width is one; any
1887 value below that is ignored. The default value is 10.
1890 @node Coordinates and Windows
1891 @section Coordinates and Windows
1893 This section describes how to relate screen coordinates to windows.
1895 @defun window-at x y &optional frame
1896 This function returns the window containing the specified cursor
1897 position in the frame @var{frame}. The coordinates @var{x} and @var{y}
1898 are measured in characters and count from the top left corner of the
1899 frame. If they are out of range, @code{window-at} returns @code{nil}.
1901 If you omit @var{frame}, the selected frame is used.
1904 @defun coordinates-in-window-p coordinates window
1905 This function checks whether a particular frame position falls within
1906 the window @var{window}.
1908 The argument @var{coordinates} is a cons cell of the form @code{(@var{x}
1909 . @var{y})}. The coordinates @var{x} and @var{y} are measured in
1910 characters, and count from the top left corner of the screen or frame.
1912 The value returned by @code{coordinates-in-window-p} is non-@code{nil}
1913 if the coordinates are inside @var{window}. The value also indicates
1914 what part of the window the position is in, as follows:
1917 @item (@var{relx} . @var{rely})
1918 The coordinates are inside @var{window}. The numbers @var{relx} and
1919 @var{rely} are the equivalent window-relative coordinates for the
1920 specified position, counting from 0 at the top left corner of the
1924 The coordinates are in the mode line of @var{window}.
1927 The coordinates are in the header line of @var{window}.
1930 The coordinates are in the vertical line between @var{window} and its
1931 neighbor to the right. This value occurs only if the window doesn't
1932 have a scroll bar; positions in a scroll bar are considered outside the
1933 window for these purposes.
1936 The coordinates are not in any part of @var{window}.
1939 The function @code{coordinates-in-window-p} does not require a frame as
1940 argument because it always uses the frame that @var{window} is on.
1943 @node Window Configurations
1944 @section Window Configurations
1945 @cindex window configurations
1946 @cindex saving window information
1948 A @dfn{window configuration} records the entire layout of one
1949 frame---all windows, their sizes, which buffers they contain, what part
1950 of each buffer is displayed, and the values of point and the mark. You
1951 can bring back an entire previous layout by restoring a window
1952 configuration previously saved.
1954 If you want to record all frames instead of just one, use a frame
1955 configuration instead of a window configuration. @xref{Frame
1958 @defun current-window-configuration &optional frame
1959 This function returns a new object representing @var{frame}'s
1960 current window configuration, including the number of windows, their
1961 sizes and current buffers, which window is the selected window, and for
1962 each window the displayed buffer, the display-start position, and the
1963 positions of point and the mark. It also includes the values of
1964 @code{window-min-height}, @code{window-min-width} and
1965 @code{minibuffer-scroll-window}. An exception is made for point in the
1966 current buffer, whose value is not saved.
1968 If @var{frame} is omitted, the selected frame is used.
1971 @defun set-window-configuration configuration
1972 This function restores the configuration of windows and buffers as
1973 specified by @var{configuration}, for the frame that @var{configuration}
1976 The argument @var{configuration} must be a value that was previously
1977 returned by @code{current-window-configuration}. This configuration is
1978 restored in the frame from which @var{configuration} was made, whether
1979 that frame is selected or not. This always counts as a window size
1980 change and triggers execution of the @code{window-size-change-functions}
1981 (@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
1982 know how to tell whether the new configuration actually differs from the
1985 If the frame which @var{configuration} was saved from is dead, all this
1986 function does is restore the three variables @code{window-min-height},
1987 @code{window-min-width} and @code{minibuffer-scroll-window}.
1989 Here is a way of using this function to get the same effect
1990 as @code{save-window-excursion}:
1994 (let ((config (current-window-configuration)))
1996 (progn (split-window-vertically nil)
1998 (set-window-configuration config)))
2003 @defspec save-window-excursion forms@dots{}
2004 This special form records the window configuration, executes @var{forms}
2005 in sequence, then restores the earlier window configuration. The window
2006 configuration includes the value of point and the portion of the buffer
2007 that is visible. It also includes the choice of selected window.
2008 However, it does not include the value of point in the current buffer;
2009 use @code{save-excursion} also, if you wish to preserve that.
2011 Don't use this construct when @code{save-selected-window} is all you need.
2013 Exit from @code{save-window-excursion} always triggers execution of the
2014 @code{window-size-change-functions}. (It doesn't know how to tell
2015 whether the restored configuration actually differs from the one in
2016 effect at the end of the @var{forms}.)
2018 The return value is the value of the final form in @var{forms}.
2024 @result{} #<window 25 on control.texi>
2027 (setq w (selected-window))
2028 @result{} #<window 19 on control.texi>
2031 (save-window-excursion
2032 (delete-other-windows w)
2033 (switch-to-buffer "foo")
2035 @result{} do-something
2036 ;; @r{The screen is now split again.}
2041 @defun window-configuration-p object
2042 This function returns @code{t} if @var{object} is a window configuration.
2045 @defun compare-window-configurations config1 config2
2046 This function compares two window configurations as regards the
2047 structure of windows, but ignores the values of point and mark and the
2048 saved scrolling positions---it can return @code{t} even if those
2051 The function @code{equal} can also compare two window configurations; it
2052 regards configurations as unequal if they differ in any respect, even a
2053 saved point or mark.
2056 Primitives to look inside of window configurations would make sense,
2057 but none are implemented. It is not clear they are useful enough to be
2061 @section Hooks for Window Scrolling and Changes
2063 This section describes how a Lisp program can take action whenever a
2064 window displays a different part of its buffer or a different buffer.
2065 There are three actions that can change this: scrolling the window,
2066 switching buffers in the window, and changing the size of the window.
2067 The first two actions run @code{window-scroll-functions}; the last runs
2068 @code{window-size-change-functions}. The paradigmatic use of these
2069 hooks is in the implementation of Lazy Lock mode; see @ref{Support
2070 Modes, Lazy Lock, Font Lock Support Modes, emacs, The GNU Emacs Manual}.
2072 @defvar window-scroll-functions
2073 This variable holds a list of functions that Emacs should call before
2074 redisplaying a window with scrolling. It is not a normal hook, because
2075 each function is called with two arguments: the window, and its new
2076 display-start position.
2078 Displaying a different buffer in the window also runs these functions.
2080 These functions must be careful in using @code{window-end}
2081 (@pxref{Window Start}); if you need an up-to-date value, you must use
2082 the @var{update} argument to ensure you get it.
2085 @defvar window-size-change-functions
2086 This variable holds a list of functions to be called if the size of any
2087 window changes for any reason. The functions are called just once per
2088 redisplay, and just once for each frame on which size changes have
2091 Each function receives the frame as its sole argument. There is no
2092 direct way to find out which windows on that frame have changed size, or
2093 precisely how. However, if a size-change function records, at each
2094 call, the existing windows and their sizes, it can also compare the
2095 present sizes and the previous sizes.
2097 Creating or deleting windows counts as a size change, and therefore
2098 causes these functions to be called. Changing the frame size also
2099 counts, because it changes the sizes of the existing windows.
2101 It is not a good idea to use @code{save-window-excursion} (@pxref{Window
2102 Configurations}) in these functions, because that always counts as a
2103 size change, and it would cause these functions to be called over and
2104 over. In most cases, @code{save-selected-window} (@pxref{Selecting
2105 Windows}) is what you need here.
2108 @defvar redisplay-end-trigger-functions
2109 This abnormal hook is run whenever redisplay in a window uses text that
2110 extends past a specified end trigger position. You set the end trigger
2111 position with the function @code{set-window-redisplay-end-trigger}. The
2112 functions are called with two arguments: the window, and the end trigger
2113 position. Storing @code{nil} for the end trigger position turns off the
2114 feature, and the trigger value is automatically reset to @code{nil} just
2115 after the hook is run.
2118 @defun set-window-redisplay-end-trigger window position
2119 This function sets @var{window}'s end trigger position at
2123 @defun window-redisplay-end-trigger &optional window
2124 This function returns @var{window}'s current end trigger position.
2127 @defvar window-configuration-change-hook
2128 A normal hook that is run every time you change the window configuration
2129 of an existing frame. This includes splitting or deleting windows,
2130 changing the sizes of windows, or displaying a different buffer in a
2131 window. The frame whose window configuration has changed is the
2132 selected frame when this hook runs.