(comint-password-prompt-regexp): Synch with main trunk.
[emacs.git] / lispref / windows.texi
blobc71ee9f6e8743c1960687e9e0a0ebac1da3d7e8a
1 @c -*-texinfo-*-
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
8 @chapter Windows
10   This chapter describes most of the functions and variables related to
11 Emacs windows.  See @ref{Display}, for information on how text is
12 displayed in windows.
14 @menu
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.
37 @end menu
39 @node Basic Windows
40 @section Basic Concepts of Emacs Windows
41 @cindex window
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:
70 @itemize @bullet
71 @item
72 containing frame
74 @item
75 window height
77 @item
78 window width
80 @item
81 window edges with respect to the screen or frame
83 @item
84 the buffer it displays
86 @item
87 position within the buffer at the upper left of the window
89 @item
90 amount of horizontal scrolling, in columns
92 @item
93 point
95 @item
96 the mark
98 @item
99 how recently the window was selected
100 @end itemize
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.
131 @end defun
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
160 lower.
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.
171 @smallexample
172 @group
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}
177 @end group
179 @group
180 ;; @r{Returns window created}
181 (setq w2 (split-window w 15))
182      @result{} #<window 28 on windows.texi>
183 @end group
184 @group
185 (window-edges w2)
186      @result{} (0 15 80 50)    ; @r{Bottom window;}
187                         ;   @r{top is line 15}
188 @end group
189 @group
190 (window-edges w)
191      @result{} (0 0 80 15)     ; @r{Top window}
192 @end group
193 @end smallexample
195 The screen looks like this:
197 @smallexample
198 @group
199          __________
200         |          |  line 0
201         |    w     |
202         |__________|
203         |          |  line 15
204         |    w2    |
205         |__________|
206                       line 50
207  column 0   column 80
208 @end group
209 @end smallexample
211 Next, the top window is split horizontally:
213 @smallexample
214 @group
215 (setq w3 (split-window w 35 t))
216      @result{} #<window 32 on windows.texi>
217 @end group
218 @group
219 (window-edges w3)
220      @result{} (35 0 80 15)  ; @r{Left edge at column 35}
221 @end group
222 @group
223 (window-edges w)
224      @result{} (0 0 35 15)   ; @r{Right edge at column 35}
225 @end group
226 @group
227 (window-edges w2)
228      @result{} (0 15 80 50)  ; @r{Bottom window unchanged}
229 @end group
230 @end smallexample
232 @need 3000
233 Now, the screen looks like this:
235 @smallexample
236 @group
237      column 35
238          __________
239         |   |      |  line 0
240         | w |  w3  |
241         |___|______|
242         |          |  line 15
243         |    w2    |
244         |__________|
245                       line 50
246  column 0   column 80
247 @end group
248 @end smallexample
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}.
254 @end deffn
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.)
262 @end deffn
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:
271 @smallexample
272 @group
273 (defun split-window-horizontally (&optional arg)
274   "Split selected window into two windows, side by side..."
275   (interactive "P")
276 @end group
277 @group
278   (let ((size (and arg (prefix-numeric-value arg))))
279     (and size (< size 0)
280          (setq size (+ (window-width) size)))
281     (split-window nil size t)))
282 @end group
283 @end smallexample
284 @end deffn
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
291 against one.
293 The argument @var{all-frames} specifies which frames to consider.  Here
294 are the possible values and their meanings:
296 @table @asis
297 @item @code{nil}
298 Count the windows in the selected frame, plus the minibuffer used
299 by that frame even if it lies in some other frame.
301 @item @code{t}
302 Count all windows in all existing frames.
304 @item @code{visible}
305 Count all windows in all visible frames.
307 @item 0
308 Count all windows in all visible or iconified frames.
310 @item anything else
311 Count precisely the windows in the selected frame, and no others.
312 @end table
313 @end defun
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
328 adjacent sibling.
330 @c Emacs 19 feature
331 @defun window-live-p window
332 This function returns @code{nil} if @var{window} is deleted, and
333 @code{t} otherwise.
335 @strong{Warning:} Erroneous information or fatal errors may result from
336 using a deleted window as if it were live.
337 @end defun
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}
343 is called.
344 @end deffn
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}.
352 @end deffn
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
370 full details:
372 @itemize @bullet
373 @item
374 If it is @code{nil}, operate on all frames.
375 @item
376 If it is @code{t}, operate on the selected frame.
377 @item
378 If it is @code{visible}, operate on all visible frames.
379 @item
380 If it is 0, operate on all visible or iconified frames.
381 @item
382 If it is a frame, operate on that frame.
383 @end itemize
385 This function always returns @code{nil}.
386 @end deffn
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.
398 @end defun
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}.
407 @example
408 @group
409 (setq w (next-window))
410 (select-window w)
411      @result{} #<window 65 on windows.texi>
412 @end group
413 @end example
414 @end defun
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
419 is no longer alive.
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,
423 the change persists.
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.
429 @end defmac
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.
445 @itemize @bullet
446 @item
447 If it is @code{nil}, consider windows on the selected frame.
448 @item
449 If it is @code{t}, consider windows on all frames.
450 @item
451 If it is @code{visible}, consider windows on all visible frames.
452 @item
453 If it is 0, consider windows on all visible or iconified frames.
454 @item
455 If it is a frame, consider windows on that frame.
456 @end itemize
457 @end defun
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.
470 @end defun
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.
485 @end defun
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:
534 @table @asis
535 @item @code{nil}
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.
539 @item @code{t}
540 Consider all windows in all existing frames.
542 @item @code{visible}
543 Consider all windows in all visible frames.  (To get useful results, you
544 must ensure @var{window} is in a visible frame.)
546 @item 0
547 Consider all windows in all visible or iconified frames.
549 @item anything else
550 Consider precisely the windows in @var{window}'s frame, and no others.
551 @end table
553 This example assumes there are two windows, both displaying the
554 buffer @samp{windows.texi}:
556 @example
557 @group
558 (selected-window)
559      @result{} #<window 56 on windows.texi>
560 @end group
561 @group
562 (next-window (selected-window))
563      @result{} #<window 52 on windows.texi>
564 @end group
565 @group
566 (next-window (next-window (selected-window)))
567      @result{} #<window 56 on windows.texi>
568 @end group
569 @end example
570 @end defun
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}.
576 @end defun
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.
588 @end deffn
590 @c Emacs 19 feature
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,
597 for details.
598 @end defun
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.
613 @end defun
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.
623 @iftex
624 See the following section for
625 @end iftex
626 @ifnottex
627 @xref{Displaying Buffers}, for
628 @end ifnottex
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.
640 @example
641 @group
642 (set-window-buffer (selected-window) "foo")
643      @result{} nil
644 @end group
645 @end example
646 @end defun
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
651 selected window.
653 @example
654 @group
655 (window-buffer)
656      @result{} #<buffer windows.texi>
657 @end group
658 @end example
659 @end defun
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.
670 @itemize @bullet
671 @item
672 If it is @code{nil}, consider windows on the selected frame.
673 @item
674 If it is @code{t}, consider windows on all frames.
675 @item
676 If it is @code{visible}, consider windows on all visible frames.
677 @item
678 If it is 0, consider windows on all visible or iconified frames.
679 @item
680 If it is a frame, consider windows on that frame.
681 @end itemize
682 @end defun
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.
696 @itemize @bullet
697 @item
698 If it is @code{nil}, consider windows on the selected frame.
699 @item
700 If it is @code{t}, consider windows on all frames.
701 @item
702 If it is @code{visible}, consider windows on all visible frames.
703 @item
704 If it is 0, consider windows on all visible or iconified frames.
705 @item
706 If it is a frame, consider windows on that frame.
707 @end itemize
708 @end defun
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}.
717 @end defvar
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
728 window.
729 @iftex
730 See the preceding section for
731 @end iftex
732 @ifnottex
733 @xref{Buffers and Windows}, for
734 @end ifnottex
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
757 Major Mode}.
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
763 List}.
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}.
768 @end deffn
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}.
784 @end deffn
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
790 its frame.
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}.
825 @end defun
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}.
835 @end deffn
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}:
867 @itemize @bullet
868 @item
869 If it is @code{nil}, consider windows on the selected frame.
870 @item
871 If it is @code{t}, consider windows on all frames.
872 @item
873 If it is @code{visible}, consider windows on all visible frames.
874 @item
875 If it is 0, consider windows on all visible or iconified frames.
876 @item
877 If it is a frame, consider windows on that frame.
878 @end itemize
880 Precisely how @code{display-buffer} finds or creates a window depends on
881 the variables described below.
882 @end deffn
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.
892 @end defopt
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.
899 @end defopt
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}.
907 @end defopt
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
915 will be left alone.
916 @end defopt
918 @c Emacs 19 feature
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.
931 @end defopt
933 @c Emacs 19 feature
934 @defvar pop-up-frame-function
935 This variable specifies how to make a new frame if @code{pop-up-frames}
936 is non-@code{nil}.
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}.
943 @end defvar
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.
949 @end defopt
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
954 buffer specially.
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.)
964 @end defopt
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
970 specially.
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}.
977 @end defopt
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}.
986 @end defvar
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
995 frame.
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.
1006 @end defun
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.
1011 @end defopt
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
1017 selected window.
1018 @end defopt
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.
1025 @end defopt
1027 @c Emacs 19 feature
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
1037 described above.
1038 @end defvar
1040 @c Emacs 19 feature
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
1044 other buffer.
1046 @defun window-dedicated-p window
1047 This function returns @code{t} if @var{window} is marked as dedicated;
1048 otherwise @code{nil}.
1049 @end defun
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.
1054 @end defun
1056 @node Window Point
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.
1067 @itemize @bullet
1068 @item
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.
1073 @item
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.
1081 @item
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.
1085 @item
1086 @xref{Positions}, for more details on buffer positions.
1087 @end itemize
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.
1105 @end defun
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.
1110 @end defun
1112 @node Window Start
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
1126 used.  For example,
1128 @example
1129 @group
1130 (window-start)
1131      @result{} 7058
1132 @end group
1133 @end example
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
1144 redisplay.
1146 For a realistic example of using @code{window-start}, see the
1147 description of @code{count-lines} in @ref{Text Lines}.
1148 @end defun
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
1153 used.
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.
1174 @end defun
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:
1194 @example
1195 @group
1196 ;; @r{Here is what @samp{foo} looks like before executing}
1197 ;;   @r{the @code{set-window-start} expression.}
1198 @end group
1200 @group
1201 ---------- Buffer: foo ----------
1202 @point{}This is the contents of buffer foo.
1208 ---------- Buffer: foo ----------
1209 @end group
1211 @group
1212 (set-window-start
1213  (selected-window)
1214  (1+ (window-start)))
1215 @result{} 2
1216 @end group
1218 @group
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.
1225 @point{}4
1228 ---------- Buffer: foo ----------
1229 @end group
1230 @end example
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.
1235 @end defun
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.
1246 Here is an example:
1248 @example
1249 @group
1250 (or (pos-visible-in-window-p
1251      (point) (selected-window))
1252     (recenter 0))
1253 @end group
1254 @end example
1255 @end defun
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
1296 downward.
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}.
1303 @end deffn
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
1308 upward.
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}.
1315 @end deffn
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
1325 window.
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''.
1339 @end deffn
1341 @c Emacs 19 feature
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.
1345 @end defvar
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.
1353 @end defopt
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
1362 value is zero.
1363 @end defopt
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
1373 scrolling.
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
1377 fashion.
1378 @end defopt
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.
1385 @end defopt
1387 @defopt scroll-step
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.
1392 @end defopt
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
1397 possible.
1398 @end defopt
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
1405 @code{2}.
1406 @end defopt
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
1422 selected frame.
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
1428 top.
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,
1434 @example
1435 @group
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."
1439   (interactive)
1440   (recenter 0))
1442 (global-set-key [kp-multiply] 'line-to-top-of-window)
1443 @end group
1444 @end example
1445 @end deffn
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
1473 used.
1475 @example
1476 @group
1477 (window-vscroll)
1478      @result{} 0
1479 @end group
1480 @end example
1481 @end defun
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.
1494 @example
1495 @group
1496 (set-window-vscroll (selected-window) 1.2)
1497      @result{} 1.13
1498 @end group
1499 @end example
1500 @end defun
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
1519 line to line.
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
1538 left edge.
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).
1555 @end deffn
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.
1569 @end deffn
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.
1581 @example
1582 @group
1583 (window-hscroll)
1584      @result{} 0
1585 @end group
1586 @group
1587 (scroll-left 5)
1588      @result{} 5
1589 @end group
1590 @group
1591 (window-hscroll)
1592      @result{} 5
1593 @end group
1594 @end example
1595 @end defun
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}.
1605 @example
1606 @group
1607 (set-window-hscroll (selected-window) 10)
1608      @result{} 10
1609 @end group
1610 @end example
1611 @end defun
1613   Here is how you can determine whether a given position @var{position}
1614 is off the screen due to horizontal scrolling:
1616 @example
1617 @group
1618 (defun hscroll-on-screen (window position)
1619   (save-excursion
1620     (goto-char position)
1621     (and
1622      (>= (- (current-column) (window-hscroll window)) 0)
1623      (< (- (current-column) (window-hscroll window))
1624         (window-width window)))))
1625 @end group
1626 @end example
1628 @node Size of Window
1629 @section The Size of a Window
1630 @cindex window size
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.
1649 @example
1650 @group
1651 (window-height)
1652      @result{} 23
1653 @end group
1654 @group
1655 (split-window-vertically)
1656      @result{} #<window 4 on windows.texi>
1657 @end group
1658 @group
1659 (window-height)
1660      @result{} 11
1661 @end group
1662 @end example
1663 @end defun
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.
1674 @example
1675 @group
1676 (window-width)
1677      @result{} 80
1678 @end group
1679 @end example
1680 @end defun
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
1700 window:
1702 @example
1703 @group
1704 (window-edges (selected-window))
1705      @result{} (0 0 80 23)
1706 @end group
1707 @end example
1709 @noindent
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}.
1721 @example
1722 @group
1723            0
1724            _______
1725         0 |       |
1726           |       |
1727           |       |
1728           |       |
1729           xxxxxxxxx  4
1731                   7
1732 @end group
1733 @end example
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}}.
1739 @example
1740 @group
1741            ___ ___
1742           |   |   |
1743           |   |   |
1744           xxxxxxxxx
1746            0  34  7
1747 @end group
1748 @end example
1749 @end defun
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
1776 frame.
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
1783 instead.
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}.
1791 @end deffn
1793 @deffn Command enlarge-window-horizontally columns
1794 This function makes the selected window @var{columns} wider.
1795 It could be defined as follows:
1797 @example
1798 @group
1799 (defun enlarge-window-horizontally (columns)
1800   (enlarge-window columns t))
1801 @end group
1802 @end example
1803 @end deffn
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}
1812 lines or columns.
1813 @end deffn
1815 @deffn Command shrink-window-horizontally columns
1816 This function makes the selected window @var{columns} narrower.
1817 It could be defined as follows:
1819 @example
1820 @group
1821 (defun shrink-window-horizontally (columns)
1822   (shrink-window columns t))
1823 @end group
1824 @end example
1825 @end deffn
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.
1837 @end deffn
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:
1859 @example
1860 (let ((window-size-fixed nil))
1861    (enlarge-window 10))
1862 @end example
1864 Note that changing the frame size will change the size of a
1865 fixed-size window, if there is no other alternative.
1866 @end defvar
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.
1880 @end defopt
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.
1888 @end defopt
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.
1902 @end defun
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:
1916 @table @code
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
1921 window.
1923 @item mode-line
1924 The coordinates are in the mode line of @var{window}.
1926 @item header-line
1927 The coordinates are in the header line of @var{window}.
1929 @item vertical-line
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.
1935 @item nil
1936 The coordinates are not in any part of @var{window}.
1937 @end table
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.
1941 @end defun
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
1956 Configurations}.
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.
1969 @end defun
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}
1974 was created for.
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
1983 old one.
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}:
1992 @example
1993 @group
1994 (let ((config (current-window-configuration)))
1995   (unwind-protect
1996       (progn (split-window-vertically nil)
1997              @dots{})
1998     (set-window-configuration config)))
1999 @end group
2000 @end example
2001 @end defun
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}.
2019 For example:
2021 @example
2022 @group
2023 (split-window)
2024      @result{} #<window 25 on control.texi>
2025 @end group
2026 @group
2027 (setq w (selected-window))
2028      @result{} #<window 19 on control.texi>
2029 @end group
2030 @group
2031 (save-window-excursion
2032   (delete-other-windows w)
2033   (switch-to-buffer "foo")
2034   'do-something)
2035      @result{} do-something
2036      ;; @r{The screen is now split again.}
2037 @end group
2038 @end example
2039 @end defspec
2041 @defun window-configuration-p object
2042 This function returns @code{t} if @var{object} is a window configuration.
2043 @end defun
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
2049 aspects differ.
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.
2054 @end defun
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
2058 worth implementing.
2060 @node Window Hooks
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.
2083 @end defvar
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
2089 occurred.
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.
2106 @end defvar
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.
2116 @end defvar
2118 @defun set-window-redisplay-end-trigger window position
2119 This function sets @var{window}'s end trigger position at
2120 @var{position}.
2121 @end defun
2123 @defun window-redisplay-end-trigger &optional window
2124 This function returns @var{window}'s current end trigger position.
2125 @end defun
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.
2133 @end defvar