]> code.delx.au - gnu-emacs/blob - doc/lispref/windows.texi
Minor wording fixes from RMS.
[gnu-emacs] / doc / lispref / windows.texi
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, 2001,
4 @c 2002, 2003, 2004, 2005, 2006, 2007, 2008 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
9
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.
13
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-level 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 Tree:: The layout and sizes of all windows in a frame.
34 * Window Configurations:: Saving and restoring the state of the screen.
35 * Window Hooks:: Hooks for scrolling, window size changes,
36 redisplay going past a certain point,
37 or window configuration changes.
38 @end menu
39
40 @node Basic Windows
41 @section Basic Concepts of Emacs Windows
42 @cindex window
43 @cindex selected window
44
45 A @dfn{window} in Emacs is the physical area of the screen in which a
46 buffer is displayed. The term is also used to refer to a Lisp object that
47 represents that screen area in Emacs Lisp. It should be
48 clear from the context which is meant.
49
50 Emacs groups windows into frames. A frame represents an area of
51 screen available for Emacs to use. Each frame always contains at least
52 one window, but you can subdivide it vertically or horizontally into
53 multiple nonoverlapping Emacs windows.
54
55 In each frame, at any time, one and only one window is designated as
56 @dfn{selected within the frame}. The frame's cursor appears in that
57 window, but the other windows have ``non-selected'' cursors, normally
58 less visible. (@pxref{Cursor Parameters}, for customization of this.)
59 At any time, one frame is the selected frame; and the window selected
60 within that frame is @dfn{the selected window}. The selected window's
61 buffer is usually the current buffer (except when @code{set-buffer}
62 has been used). @xref{Current Buffer}.
63
64 For practical purposes, a window exists only while it is displayed in
65 a frame. Once removed from the frame, the window is effectively deleted
66 and should not be used, @emph{even though there may still be references
67 to it} from other Lisp objects. Restoring a saved window configuration
68 is the only way for a window no longer on the screen to come back to
69 life. (@xref{Deleting Windows}.)
70
71 Each window has the following attributes:
72
73 @itemize @bullet
74 @item
75 containing frame
76
77 @item
78 window height
79
80 @item
81 window width
82
83 @item
84 window edges with respect to the screen or frame
85
86 @item
87 the buffer it displays
88
89 @item
90 buffer position at the upper left corner of the window
91
92 @item
93 amount of horizontal scrolling, in columns
94
95 @item
96 point
97
98 @item
99 the mark
100
101 @item
102 how recently the window was selected
103
104 @item
105 fringe settings
106
107 @item
108 display margins
109
110 @item
111 scroll-bar settings
112 @end itemize
113
114 @cindex multiple windows
115 Users create multiple windows so they can look at several buffers at
116 once. Lisp libraries use multiple windows for a variety of reasons, but
117 most often to display related information. In Rmail, for example, you
118 can move through a summary buffer in one window while the other window
119 shows messages one at a time as they are reached.
120
121 The meaning of ``window'' in Emacs is similar to what it means in the
122 context of general-purpose window systems such as X, but not identical.
123 The X Window System places X windows on the screen; Emacs uses one or
124 more X windows as frames, and subdivides them into
125 Emacs windows. When you use Emacs on a character-only terminal, Emacs
126 treats the whole terminal screen as one frame.
127
128 @cindex terminal screen
129 @cindex screen of terminal
130 @cindex tiled windows
131 Most window systems support arbitrarily located overlapping windows.
132 In contrast, Emacs windows are @dfn{tiled}; they never overlap, and
133 together they fill the whole screen or frame. Because of the way in
134 which Emacs creates new windows and resizes them, not all conceivable
135 tilings of windows on an Emacs frame are actually possible.
136 @xref{Splitting Windows}, and @ref{Size of Window}.
137
138 @xref{Display}, for information on how the contents of the
139 window's buffer are displayed in the window.
140
141 @defun windowp object
142 This function returns @code{t} if @var{object} is a window.
143 @end defun
144
145 @node Splitting Windows
146 @section Splitting Windows
147 @cindex splitting windows
148 @cindex window splitting
149
150 The functions described here are the primitives used to split a window
151 into two windows. Two higher level functions sometimes split a window,
152 but not always: @code{pop-to-buffer} and @code{display-buffer}
153 (@pxref{Displaying Buffers}).
154
155 The functions described here do not accept a buffer as an argument.
156 The two ``halves'' of the split window initially display the same buffer
157 previously visible in the window that was split.
158
159 @deffn Command split-window &optional window size horizontal
160 This function splits a new window out of @var{window}'s screen area.
161 It returns the new window.
162
163 If @var{horizontal} is non-@code{nil}, then @var{window} splits into
164 two side by side windows. The original window @var{window} keeps the
165 leftmost @var{size} columns, and gives the rest of the columns to the
166 new window. Otherwise, it splits into windows one above the other, and
167 @var{window} keeps the upper @var{size} lines and gives the rest of the
168 lines to the new window. The original window is therefore the
169 left-hand or upper of the two, and the new window is the right-hand or
170 lower.
171
172 If @var{window} is omitted or @code{nil}, that stands for the selected
173 window. When you split the selected window, it remains selected.
174
175 If @var{size} is omitted or @code{nil}, then @var{window} is divided
176 evenly into two parts. (If there is an odd line, it is allocated to
177 the new window.) When @code{split-window} is called interactively,
178 all its arguments are @code{nil}.
179
180 If splitting would result in making a window that is smaller than
181 @code{window-min-height} or @code{window-min-width}, the function
182 signals an error and does not split the window at all.
183
184 The following example starts with one window on a screen that is 50
185 lines high by 80 columns wide; then it splits the window.
186
187 @smallexample
188 @group
189 (setq w (selected-window))
190 @result{} #<window 8 on windows.texi>
191 (window-edges) ; @r{Edges in order:}
192 @result{} (0 0 80 50) ; @r{left--top--right--bottom}
193 @end group
194
195 @group
196 ;; @r{Returns window created}
197 (setq w2 (split-window w 15))
198 @result{} #<window 28 on windows.texi>
199 @end group
200 @group
201 (window-edges w2)
202 @result{} (0 15 80 50) ; @r{Bottom window;}
203 ; @r{top is line 15}
204 @end group
205 @group
206 (window-edges w)
207 @result{} (0 0 80 15) ; @r{Top window}
208 @end group
209 @end smallexample
210
211 The screen looks like this:
212
213 @smallexample
214 @group
215 __________
216 | | line 0
217 | w |
218 |__________|
219 | | line 15
220 | w2 |
221 |__________|
222 line 50
223 column 0 column 80
224 @end group
225 @end smallexample
226
227 Next, split the top window horizontally:
228
229 @smallexample
230 @group
231 (setq w3 (split-window w 35 t))
232 @result{} #<window 32 on windows.texi>
233 @end group
234 @group
235 (window-edges w3)
236 @result{} (35 0 80 15) ; @r{Left edge at column 35}
237 @end group
238 @group
239 (window-edges w)
240 @result{} (0 0 35 15) ; @r{Right edge at column 35}
241 @end group
242 @group
243 (window-edges w2)
244 @result{} (0 15 80 50) ; @r{Bottom window unchanged}
245 @end group
246 @end smallexample
247
248 @need 3000
249 Now the screen looks like this:
250
251 @smallexample
252 @group
253 column 35
254 __________
255 | | | line 0
256 | w | w3 |
257 |___|______|
258 | | line 15
259 | w2 |
260 |__________|
261 line 50
262 column 0 column 80
263 @end group
264 @end smallexample
265
266 Normally, Emacs indicates the border between two side-by-side windows
267 with a scroll bar (@pxref{Layout Parameters,Scroll Bars}) or @samp{|}
268 characters. The display table can specify alternative border
269 characters; see @ref{Display Tables}.
270 @end deffn
271
272 @deffn Command split-window-vertically &optional size
273 This function splits the selected window into two windows, one above the
274 other, leaving the upper of the two windows selected, with @var{size}
275 lines. (If @var{size} is negative, then the lower of the two windows
276 gets @minus{}@var{size} lines and the upper window gets the rest, but
277 the upper window is still the one selected.) However, if
278 @code{split-window-keep-point} (see below) is @code{nil}, then either
279 window can be selected.
280
281 In other respects, this function is similar to @code{split-window}.
282 In particular, the upper window is the original one and the return
283 value is the new, lower window.
284 @end deffn
285
286 @defopt split-window-keep-point
287 If this variable is non-@code{nil} (the default), then
288 @code{split-window-vertically} behaves as described above.
289
290 If it is @code{nil}, then @code{split-window-vertically} adjusts point
291 in each of the two windows to avoid scrolling. (This is useful on
292 slow terminals.) It selects whichever window contains the screen line
293 that point was previously on.
294
295 This variable affects the behavior of @code{split-window-vertically}
296 only. It has no effect on the other functions described here.
297 @end defopt
298
299 @deffn Command split-window-horizontally &optional size
300 This function splits the selected window into two windows
301 side-by-side, leaving the selected window on the left with @var{size}
302 columns. If @var{size} is negative, the rightmost window gets
303 @minus{}@var{size} columns, but the leftmost window still remains
304 selected.
305
306 This function is basically an interface to @code{split-window}.
307 You could define a simplified version of the function like this:
308
309 @smallexample
310 @group
311 (defun split-window-horizontally (&optional arg)
312 "Split selected window into two windows, side by side..."
313 (interactive "P")
314 @end group
315 @group
316 (let ((size (and arg (prefix-numeric-value arg))))
317 (and size (< size 0)
318 (setq size (+ (window-width) size)))
319 (split-window nil size t)))
320 @end group
321 @end smallexample
322 @end deffn
323
324 @defun one-window-p &optional no-mini all-frames
325 This function returns non-@code{nil} if there is only one window. The
326 argument @var{no-mini}, if non-@code{nil}, means don't count the
327 minibuffer even if it is active; otherwise, the minibuffer window is
328 counted when it is active.
329
330 The argument @var{all-frames} specifies which frames to consider. Here
331 are the possible values and their meanings:
332
333 @table @asis
334 @item @code{nil}
335 Count the windows in the selected frame, plus the minibuffer used
336 by that frame even if it lies in some other frame.
337
338 @item @code{t}
339 Count all windows in all existing frames.
340
341 @item @code{visible}
342 Count all windows in all visible frames.
343
344 @item 0
345 Count all windows in all visible or iconified frames.
346
347 @item anything else
348 Count precisely the windows in the selected frame, and no others.
349 @end table
350 @end defun
351
352 @node Deleting Windows
353 @section Deleting Windows
354 @cindex deleting windows
355
356 A window remains visible on its frame unless you @dfn{delete} it by
357 calling certain functions that delete windows. A deleted window cannot
358 appear on the screen, but continues to exist as a Lisp object until
359 there are no references to it. There is no way to cancel the deletion
360 of a window aside from restoring a saved window configuration
361 (@pxref{Window Configurations}). Restoring a window configuration also
362 deletes any windows that aren't part of that configuration.
363
364 When you delete a window, the space it took up is given to one
365 adjacent sibling.
366
367 @c Emacs 19 feature
368 @defun window-live-p window
369 This function returns @code{nil} if @var{window} is deleted, and
370 @code{t} otherwise.
371
372 @strong{Warning:} Erroneous information or fatal errors may result from
373 using a deleted window as if it were live.
374 @end defun
375
376 @deffn Command delete-window &optional window
377 This function removes @var{window} from display, and returns @code{nil}.
378 If @var{window} is omitted, then the selected window is deleted. An
379 error is signaled if there is only one window when @code{delete-window}
380 is called.
381 @end deffn
382
383 @deffn Command delete-other-windows &optional window
384 This function makes @var{window} the only window on its frame, by
385 deleting the other windows in that frame. If @var{window} is omitted or
386 @code{nil}, then the selected window is used by default.
387
388 The return value is @code{nil}.
389 @end deffn
390
391 @deffn Command delete-windows-on buffer-or-name &optional frame
392 This function deletes all windows showing @var{buffer-or-name}. If
393 there are no windows showing @var{buffer-or-name}, it does nothing.
394 @var{buffer-or-name} must be a buffer or the name of an existing
395 buffer.
396
397 @code{delete-windows-on} operates frame by frame. If a frame has
398 several windows showing different buffers, then those showing
399 @var{buffer-or-name} are removed, and the others expand to fill the
400 space. If all windows in some frame are showing @var{buffer-or-name}
401 (including the case where there is only one window), then the frame
402 winds up with a single window showing another buffer chosen with
403 @code{other-buffer}. @xref{The Buffer List}. If, however, that window
404 is dedicated and there are other frames left, the window's frame is
405 deleted.
406
407 The argument @var{frame} controls which frames to operate on. This
408 function does not use it in quite the same way as the other functions
409 which scan all windows; specifically, the values @code{t} and @code{nil}
410 have the opposite of their meanings in other functions. Here are the
411 full details:
412
413 @itemize @bullet
414 @item
415 If it is @code{nil}, operate on all frames.
416 @item
417 If it is @code{t}, operate on the selected frame.
418 @item
419 If it is @code{visible}, operate on all visible frames.
420 @item
421 If it is 0, operate on all visible or iconified frames.
422 @item
423 If it is a frame, operate on that frame.
424 @end itemize
425
426 This function always returns @code{nil}.
427 @end deffn
428
429 @node Selecting Windows
430 @section Selecting Windows
431 @cindex selecting a window
432
433 When a window is selected, the buffer in the window becomes the current
434 buffer, and the cursor will appear in it.
435
436 @defun selected-window
437 This function returns the selected window. This is the window in
438 which the cursor appears and to which many commands apply.
439 @end defun
440
441 @defun select-window window &optional norecord
442 This function makes @var{window} the selected window. The cursor then
443 appears in @var{window} (on redisplay). Unless @var{window} was
444 already selected, @code{select-window} makes @var{window}'s buffer the
445 current buffer.
446
447 Normally @var{window}'s selected buffer is moved to the front of the
448 buffer list, but if @var{norecord} is non-@code{nil}, the buffer list
449 order is unchanged.
450
451 The return value is @var{window}.
452
453 @example
454 @group
455 (setq w (next-window))
456 (select-window w)
457 @result{} #<window 65 on windows.texi>
458 @end group
459 @end example
460 @end defun
461
462 @defmac save-selected-window forms@dots{}
463 This macro records the selected frame, as well as the selected window
464 of each frame, executes @var{forms} in sequence, then restores the
465 earlier selected frame and windows. It also saves and restores the
466 current buffer. It returns the value of the last form in @var{forms}.
467
468 This macro does not save or restore anything about the sizes,
469 arrangement or contents of windows; therefore, if the @var{forms}
470 change them, the change persists. If the previously selected window
471 of some frame is no longer live at the time of exit from @var{forms},
472 that frame's selected window is left alone. If the previously
473 selected window is no longer live, then whatever window is selected at
474 the end of @var{forms} remains selected.
475 @end defmac
476
477 @defmac with-selected-window window forms@dots{}
478 This macro selects @var{window} (without changing the buffer list),
479 executes @var{forms} in sequence, then restores the previously
480 selected window and current buffer. It is just like
481 @code{save-selected-window}, except that it explicitly selects
482 @var{window}, also without altering the buffer list sequence.
483 @end defmac
484
485 @cindex finding windows
486 The following functions choose one of the windows on the screen,
487 offering various criteria for the choice.
488
489 @defun get-lru-window &optional frame dedicated
490 This function returns the window least recently ``used'' (that is,
491 selected). If any full-width windows are present, it only considers
492 these. The selected window is always the most recently used window.
493
494 The selected window can be the least recently used window if it is the
495 only window. A newly created window becomes the least recently used
496 window until it is selected. A minibuffer window is never a
497 candidate. Dedicated windows are never candidates unless the
498 @var{dedicated} argument is non-@code{nil}, so if all
499 existing windows are dedicated, the value is @code{nil}.
500
501 The argument @var{frame} controls which windows are considered.
502
503 @itemize @bullet
504 @item
505 If it is @code{nil}, consider windows on the selected frame.
506 @item
507 If it is @code{t}, consider windows on all frames.
508 @item
509 If it is @code{visible}, consider windows on all visible frames.
510 @item
511 If it is 0, consider windows on all visible or iconified frames.
512 @item
513 If it is a frame, consider windows on that frame.
514 @end itemize
515 @end defun
516
517 @defun get-largest-window &optional frame dedicated
518 This function returns the window with the largest area (height times
519 width). If there are no side-by-side windows, then this is the window
520 with the most lines. A minibuffer window is never a candidate.
521 Dedicated windows are never candidates unless the
522 @var{dedicated} argument is non-@code{nil}, so if all existing windows
523 are dedicated, the value is @code{nil}.
524
525 If there are two candidate windows of the same size, this function
526 prefers the one that comes first in the cyclic ordering of windows
527 (see following section), starting from the selected window.
528
529 The argument @var{frame} controls which set of windows to
530 consider. See @code{get-lru-window}, above.
531 @end defun
532
533 @cindex window that satisfies a predicate
534 @cindex conditional selection of windows
535 @defun get-window-with-predicate predicate &optional minibuf all-frames default
536 This function returns a window satisfying @var{predicate}. It cycles
537 through all visible windows using @code{walk-windows} (@pxref{Cyclic
538 Window Ordering}), calling @var{predicate} on each one of them
539 with that window as its argument. The function returns the first
540 window for which @var{predicate} returns a non-@code{nil} value; if
541 that never happens, it returns @var{default}.
542
543 The optional arguments @var{minibuf} and @var{all-frames} specify the
544 set of windows to include in the scan. See the description of
545 @code{next-window} in @ref{Cyclic Window Ordering}, for details.
546 @end defun
547
548 @node Cyclic Window Ordering
549 @comment node-name, next, previous, up
550 @section Cyclic Ordering of Windows
551 @cindex cyclic ordering of windows
552 @cindex ordering of windows, cyclic
553 @cindex window ordering, cyclic
554
555 When you use the command @kbd{C-x o} (@code{other-window}) to select
556 the next window, it moves through all the windows on the screen in a
557 specific cyclic order. For any given configuration of windows, this
558 order never varies. It is called the @dfn{cyclic ordering of windows}.
559
560 This ordering generally goes from top to bottom, and from left to
561 right. But it may go down first or go right first, depending on the
562 order in which the windows were split.
563
564 If the first split was vertical (into windows one above each other),
565 and then the subwindows were split horizontally, then the ordering is
566 left to right in the top of the frame, and then left to right in the
567 next lower part of the frame, and so on. If the first split was
568 horizontal, the ordering is top to bottom in the left part, and so on.
569 In general, within each set of siblings at any level in the window tree,
570 the order is left to right, or top to bottom.
571
572 @defun next-window &optional window minibuf all-frames
573 @cindex minibuffer window, and @code{next-window}
574 This function returns the window following @var{window} in the cyclic
575 ordering of windows. This is the window that @kbd{C-x o} would select
576 if typed when @var{window} is selected. If @var{window} is the only
577 window visible, then this function returns @var{window}. If omitted,
578 @var{window} defaults to the selected window.
579
580 The value of the argument @var{minibuf} controls whether the
581 minibuffer is included in the window order. Normally, when
582 @var{minibuf} is @code{nil}, the minibuffer is included if it is
583 currently active; this is the behavior of @kbd{C-x o}. (The minibuffer
584 window is active while the minibuffer is in use. @xref{Minibuffers}.)
585
586 If @var{minibuf} is @code{t}, then the cyclic ordering includes the
587 minibuffer window even if it is not active.
588
589 If @var{minibuf} is neither @code{t} nor @code{nil}, then the minibuffer
590 window is not included even if it is active.
591
592 The argument @var{all-frames} specifies which frames to consider. Here
593 are the possible values and their meanings:
594
595 @table @asis
596 @item @code{nil}
597 Consider all the windows in @var{window}'s frame, plus the minibuffer
598 used by that frame even if it lies in some other frame. If the
599 minibuffer counts (as determined by @var{minibuf}), then all windows on
600 all frames that share that minibuffer count too.
601
602 @item @code{t}
603 Consider all windows in all existing frames.
604
605 @item @code{visible}
606 Consider all windows in all visible frames. (To get useful results, you
607 must ensure @var{window} is in a visible frame.)
608
609 @item 0
610 Consider all windows in all visible or iconified frames.
611
612 @item a frame
613 Consider all windows on that frame.
614
615 @item anything else
616 Consider precisely the windows in @var{window}'s frame, and no others.
617 @end table
618
619 This example assumes there are two windows, both displaying the
620 buffer @samp{windows.texi}:
621
622 @example
623 @group
624 (selected-window)
625 @result{} #<window 56 on windows.texi>
626 @end group
627 @group
628 (next-window (selected-window))
629 @result{} #<window 52 on windows.texi>
630 @end group
631 @group
632 (next-window (next-window (selected-window)))
633 @result{} #<window 56 on windows.texi>
634 @end group
635 @end example
636 @end defun
637
638 @defun previous-window &optional window minibuf all-frames
639 This function returns the window preceding @var{window} in the cyclic
640 ordering of windows. The other arguments specify which windows to
641 include in the cycle, as in @code{next-window}.
642 @end defun
643
644 @deffn Command other-window count &optional all-frames
645 This function selects the @var{count}th following window in the cyclic
646 order. If count is negative, then it moves back @minus{}@var{count}
647 windows in the cycle, rather than forward. It returns @code{nil}.
648
649 The argument @var{all-frames} has the same meaning as in
650 @code{next-window}, but the @var{minibuf} argument of @code{next-window}
651 is always effectively @code{nil}.
652
653 In an interactive call, @var{count} is the numeric prefix argument.
654 @end deffn
655
656 @c Emacs 19 feature
657 @defun walk-windows proc &optional minibuf all-frames
658 This function cycles through all windows. It calls the function
659 @code{proc} once for each window, with the window as its sole
660 argument.
661
662 The optional arguments @var{minibuf} and @var{all-frames} specify the
663 set of windows to include in the scan. See @code{next-window}, above,
664 for details.
665 @end defun
666
667 @defun window-list &optional frame minibuf window
668 This function returns a list of the windows on @var{frame}, starting
669 with @var{window}. If @var{frame} is @code{nil} or omitted,
670 @code{window-list} uses the selected frame instead; if @var{window} is
671 @code{nil} or omitted, it uses the selected window.
672
673 The value of @var{minibuf} controls if the minibuffer window is
674 included in the result list. If @var{minibuf} is @code{t}, the result
675 always includes the minibuffer window. If @var{minibuf} is @code{nil}
676 or omitted, that includes the minibuffer window if it is active. If
677 @var{minibuf} is neither @code{nil} nor @code{t}, the result never
678 includes the minibuffer window.
679 @end defun
680
681 @node Buffers and Windows
682 @section Buffers and Windows
683 @cindex examining windows
684 @cindex windows, controlling precisely
685 @cindex buffers, controlled in windows
686
687 This section describes low-level functions to examine windows or to
688 display buffers in windows in a precisely controlled fashion.
689 @iftex
690 See the following section for
691 @end iftex
692 @ifnottex
693 @xref{Displaying Buffers}, for
694 @end ifnottex
695 related functions that find a window to use and specify a buffer for it.
696 The functions described there are easier to use than these, but they
697 employ heuristics in choosing or creating a window; use these functions
698 when you need complete control.
699
700 @defun set-window-buffer window buffer-or-name &optional keep-margins
701 This function makes @var{window} display @var{buffer-or-name} as its
702 contents. It returns @code{nil}. @var{buffer-or-name} must be a
703 buffer, or the name of an existing buffer. This is the fundamental
704 primitive for changing which buffer is displayed in a window, and all
705 ways of doing that call this function.
706
707 @example
708 @group
709 (set-window-buffer (selected-window) "foo")
710 @result{} nil
711 @end group
712 @end example
713
714 Normally, displaying @var{buffer} in @var{window} resets the window's
715 display margins, fringe widths, scroll bar settings, and position
716 based on the local variables of @var{buffer}. However, if
717 @var{keep-margins} is non-@code{nil}, the display margins and fringe
718 widths of @var{window} remain unchanged. @xref{Fringes}.
719 @end defun
720
721 @defvar buffer-display-count
722 This buffer-local variable records the number of times a buffer is
723 displayed in a window. It is incremented each time
724 @code{set-window-buffer} is called for the buffer.
725 @end defvar
726
727 @defun window-buffer &optional window
728 This function returns the buffer that @var{window} is displaying. If
729 @var{window} is omitted, this function returns the buffer for the
730 selected window.
731
732 @example
733 @group
734 (window-buffer)
735 @result{} #<buffer windows.texi>
736 @end group
737 @end example
738 @end defun
739
740 @defun get-buffer-window buffer-or-name &optional all-frames
741 This function returns a window currently displaying
742 @var{buffer-or-name}, or @code{nil} if there is none. If there are
743 several such windows, then the function returns the first one in the
744 cyclic ordering of windows, starting from the selected window.
745 @xref{Cyclic Window Ordering}.
746
747 The argument @var{all-frames} controls which windows to consider.
748
749 @itemize @bullet
750 @item
751 If it is @code{nil}, consider windows on the selected frame.
752 @item
753 If it is @code{t}, consider windows on all frames.
754 @item
755 If it is @code{visible}, consider windows on all visible frames.
756 @item
757 If it is 0, consider windows on all visible or iconified frames.
758 @item
759 If it is a frame, consider windows on that frame.
760 @end itemize
761 @end defun
762
763 @defun get-buffer-window-list buffer-or-name &optional minibuf all-frames
764 This function returns a list of all the windows currently displaying
765 @var{buffer-or-name}.
766
767 The two optional arguments work like the optional arguments of
768 @code{next-window} (@pxref{Cyclic Window Ordering}); they are @emph{not}
769 like the single optional argument of @code{get-buffer-window}. Perhaps
770 we should change @code{get-buffer-window} in the future to make it
771 compatible with the other functions.
772 @end defun
773
774 @defvar buffer-display-time
775 This variable records the time at which a buffer was last made visible
776 in a window. It is always local in each buffer; each time
777 @code{set-window-buffer} is called, it sets this variable to
778 @code{(current-time)} in the specified buffer (@pxref{Time of Day}).
779 When a buffer is first created, @code{buffer-display-time} starts out
780 with the value @code{nil}.
781 @end defvar
782
783 @node Displaying Buffers
784 @section Displaying Buffers in Windows
785 @cindex switching to a buffer
786 @cindex displaying a buffer
787
788 In this section we describe convenient functions that choose a window
789 automatically and use it to display a specified buffer. These functions
790 can also split an existing window in certain circumstances. We also
791 describe variables that parameterize the heuristics used for choosing a
792 window.
793 @iftex
794 See the preceding section for
795 @end iftex
796 @ifnottex
797 @xref{Buffers and Windows}, for
798 @end ifnottex
799 low-level primitives that give you more precise control. All of these
800 functions work by calling @code{set-window-buffer}.
801
802 Do not use the functions in this section in order to make a buffer
803 current so that a Lisp program can access or modify it; they are too
804 drastic for that purpose, since they change the display of buffers in
805 windows, which would be gratuitous and surprise the user. Instead, use
806 @code{set-buffer} and @code{save-current-buffer} (@pxref{Current
807 Buffer}), which designate buffers as current for programmed access
808 without affecting the display of buffers in windows.
809
810 @deffn Command switch-to-buffer buffer-or-name &optional norecord
811 This function makes @var{buffer-or-name} the current buffer, and also
812 displays the buffer in the selected window. This means that a human can
813 see the buffer and subsequent keyboard commands will apply to it.
814 Contrast this with @code{set-buffer}, which makes @var{buffer-or-name}
815 the current buffer but does not display it in the selected window.
816 @xref{Current Buffer}.
817
818 If @var{buffer-or-name} does not identify an existing buffer, then a new
819 buffer by that name is created. The major mode for the new buffer is
820 set according to the variable @code{default-major-mode}. @xref{Auto
821 Major Mode}. If @var{buffer-or-name} is @code{nil},
822 @code{switch-to-buffer} chooses a buffer using @code{other-buffer}.
823
824 Normally the specified buffer is put at the front of the buffer list
825 (both the selected frame's buffer list and the frame-independent buffer
826 list). This affects the operation of @code{other-buffer}. However, if
827 @var{norecord} is non-@code{nil}, this is not done. @xref{The Buffer
828 List}.
829
830 The @code{switch-to-buffer} function is often used interactively, as
831 the binding of @kbd{C-x b}. It is also used frequently in programs. It
832 returns the buffer that it switched to.
833 @end deffn
834
835 The next two functions are similar to @code{switch-to-buffer}, except
836 for the described features.
837
838 @deffn Command switch-to-buffer-other-window buffer-or-name &optional norecord
839 This function makes @var{buffer-or-name} the current buffer and
840 displays it in a window not currently selected. It then selects that
841 window. The handling of the buffer is the same as in
842 @code{switch-to-buffer}.
843
844 The currently selected window is absolutely never used to do the job.
845 If it is the only window, then it is split to make a distinct window for
846 this purpose. If the selected window is already displaying the buffer,
847 then it continues to do so, but another window is nonetheless found to
848 display it in as well.
849
850 This function updates the buffer list just like @code{switch-to-buffer}
851 unless @var{norecord} is non-@code{nil}.
852 @end deffn
853
854 @defun pop-to-buffer buffer-or-name &optional other-window norecord
855 This function makes @var{buffer-or-name} the current buffer and
856 switches to it in some window, preferably not the window previously
857 selected. The ``popped-to'' window becomes the selected window within
858 its frame. The return value is the buffer that was switched to.
859 If @var{buffer-or-name} is @code{nil}, that means to choose some
860 other buffer, but you don't specify which.
861
862 If the variable @code{pop-up-frames} is non-@code{nil},
863 @code{pop-to-buffer} looks for a window in any visible frame already
864 displaying the buffer; if there is one, it returns that window and makes
865 it be selected within its frame. If there is none, it creates a new
866 frame and displays the buffer in it.
867
868 If @code{pop-up-frames} is @code{nil}, then @code{pop-to-buffer}
869 operates entirely within the selected frame. (If the selected frame has
870 just a minibuffer, @code{pop-to-buffer} operates within the most
871 recently selected frame that was not just a minibuffer.)
872
873 If the variable @code{pop-up-windows} is non-@code{nil}, windows may
874 be split to create a new window that is different from the original
875 window. For details, see @ref{Choosing Window}.
876
877 If @var{other-window} is non-@code{nil}, @code{pop-to-buffer} finds or
878 creates another window even if @var{buffer-or-name} is already visible
879 in the selected window. Thus @var{buffer-or-name} could end up
880 displayed in two windows. On the other hand, if @var{buffer-or-name} is
881 already displayed in the selected window and @var{other-window} is
882 @code{nil}, then the selected window is considered sufficient display
883 for @var{buffer-or-name}, so that nothing needs to be done.
884
885 All the variables that affect @code{display-buffer} affect
886 @code{pop-to-buffer} as well. @xref{Choosing Window}.
887
888 If @var{buffer-or-name} is a string that does not name an existing
889 buffer, a buffer by that name is created. The major mode for the new
890 buffer is set according to the variable @code{default-major-mode}.
891 @xref{Auto Major Mode}.
892
893 This function updates the buffer list just like @code{switch-to-buffer}
894 unless @var{norecord} is non-@code{nil}.
895 @end defun
896
897 @deffn Command replace-buffer-in-windows buffer-or-name
898 This function replaces @var{buffer-or-name} in all windows displaying
899 it with some other buffer. It uses @code{other-buffer} to choose the
900 other buffer. In the usual applications of this function, you
901 don't care which other buffer is used; you just want to make sure that
902 @var{buffer-or-name} is no longer displayed.
903
904 If the window displaying @var{buffer-or-name} is dedicated, and
905 is not the only window on its frame, that window is deleted. If that
906 window is the only window on its frame and there are other frames left,
907 the window's frame is deleted as well. If there are no other frames left,
908 some other buffer is displayed in that window.
909
910 This function returns @code{nil}.
911 @end deffn
912
913 @node Choosing Window
914 @section Choosing a Window for Display
915
916 This section describes the basic facility that chooses a window to
917 display a buffer in---@code{display-buffer}. All the higher-level
918 functions and commands use this subroutine. Here we describe how to use
919 @code{display-buffer} and how to customize it.
920
921 @deffn Command display-buffer buffer-or-name &optional not-this-window frame
922 This command makes @var{buffer-or-name} appear in some window, like
923 @code{pop-to-buffer}, but it does not select that window and does not
924 make the buffer current. The identity of the selected window is
925 unaltered by this function. @var{buffer-or-name} must be a buffer, or
926 the name of an existing buffer.
927
928 If @var{not-this-window} is non-@code{nil}, it means to display the
929 specified buffer in a window other than the selected one, even if it is
930 already on display in the selected window. This can cause the buffer to
931 appear in two windows at once. Otherwise, if @var{buffer-or-name} is
932 already being displayed in any window, that is good enough, so this
933 function does nothing.
934
935 @code{display-buffer} returns the window chosen to display
936 @var{buffer-or-name}.
937
938 If the argument @var{frame} is non-@code{nil}, it specifies which frames
939 to check when deciding whether the buffer is already displayed. If the
940 buffer is already displayed in some window on one of these frames,
941 @code{display-buffer} simply returns that window. Here are the possible
942 values of @var{frame}:
943
944 @itemize @bullet
945 @item
946 If it is @code{nil}, consider windows on the selected frame.
947 (Actually, the last non-minibuffer frame.)
948 @item
949 If it is @code{t}, consider windows on all frames.
950 @item
951 If it is @code{visible}, consider windows on all visible frames.
952 @item
953 If it is 0, consider windows on all visible or iconified frames.
954 @item
955 If it is a frame, consider windows on that frame.
956 @end itemize
957
958 Precisely how @code{display-buffer} finds or creates a window depends on
959 the variables described below.
960 @end deffn
961
962 @defvar split-window-preferred-function
963 This variable specifies how to split a window. Its value, if
964 non-@code{nil}, should be a function of one argument, which is a
965 window. If this variable specifies a function, @code{display-buffer}
966 will call it with one or more candidate windows when it looks for a
967 window to split. If the argument window fits, the function is
968 expected to split it and return a new window. If the function returns
969 @code{nil}, then this window will not be split.
970
971 If the value of this variable is @code{nil}, @code{display-buffer}
972 uses the other variables described below to decide whether and which
973 window to split.
974 @end defvar
975
976 @defopt display-buffer-reuse-frames
977 If this variable is non-@code{nil}, @code{display-buffer} searches
978 existing frames for a window displaying the buffer. If the buffer is
979 already displayed in a window in some frame, @code{display-buffer} makes
980 the frame visible and raises it, to use that window. If the buffer is
981 not already displayed, or if @code{display-buffer-reuse-frames} is
982 @code{nil}, @code{display-buffer}'s behavior is determined by other
983 variables, described below.
984 @end defopt
985
986 @defopt pop-up-windows
987 This variable controls whether @code{display-buffer} makes new windows.
988 If it is non-@code{nil} and there is only one window, then that window
989 is split vertically. If it is @code{nil}, then @code{display-buffer}
990 does not split the single window, but uses it whole.
991 @end defopt
992
993 @defopt split-height-threshold
994 This variable controls when @code{display-buffer} may split a window
995 vertically, if there are multiple windows. If the value is a number,
996 @code{display-buffer} splits the largest window if it has at least
997 this many lines. If the largest window is not this tall, or if the
998 value of this variable is @code{nil}, @code{display-buffer} tries to
999 split some window horizontally, subject to restrictions of
1000 @code{split-width-threshold} (see below). If splitting horizontally
1001 is impossible, @code{display-buffer} splits a window vertically
1002 only if it's the only window on its frame and not the minibuffer
1003 window, and only if @code{pop-up-windows} is non-@code{nil}.
1004 Otherwise, @code{display-buffer} uses one of the existing windows.
1005 @end defopt
1006
1007 @defopt split-width-threshold
1008 This variable controls when @code{display-buffer} may split a window
1009 horizontally. If the value is a number, @code{display-buffer} may
1010 split a window if it has at least this many columns. If the value of
1011 this variable is @code{nil}, @code{display-buffer} will not split any
1012 windows horizontally. (It still might split some window vertically,
1013 though, see above.)
1014 @end defopt
1015
1016 @defopt even-window-heights
1017 This variable controls whether @code{display-buffer} should even out
1018 window heights if the buffer gets displayed in an existing window,
1019 above or beneath another existing window. If
1020 @code{even-window-heights} is @code{t}, the default, window heights
1021 will be evened out. If @code{even-window-heights} is @code{nil}, the
1022 original window heights will be left alone.
1023 @end defopt
1024
1025 @c Emacs 19 feature
1026 @defopt pop-up-frames
1027 This variable controls whether @code{display-buffer} makes new frames.
1028 If it is non-@code{nil}, @code{display-buffer} looks for an existing
1029 window already displaying the desired buffer, on any visible frame.
1030 If it finds one, it returns that window. Otherwise it makes a new
1031 frame, unless the variable's value is @code{graphic-only} and the
1032 selected frame is not on a graphic display. The variables
1033 @code{pop-up-windows}, @code{split-height-threshold}, and
1034 @code{split-width-threshold} do not matter if @code{pop-up-frames} is
1035 non-@code{nil}.
1036
1037 If @code{pop-up-frames} is @code{nil}, then @code{display-buffer} either
1038 splits a window or reuses one.
1039
1040 @xref{Frames}, for more information.
1041 @end defopt
1042
1043 @c Emacs 19 feature
1044 @defopt pop-up-frame-function
1045 This variable specifies how to make a new frame if @code{pop-up-frames}
1046 is non-@code{nil}.
1047
1048 Its value should be a function of no arguments. When
1049 @code{display-buffer} makes a new frame, it does so by calling that
1050 function, which should return a frame. The default value of the
1051 variable is a function that creates a frame using parameters from
1052 @code{pop-up-frame-alist}.
1053 @end defopt
1054
1055 @defopt pop-up-frame-alist
1056 This variable holds an alist specifying frame parameters used when
1057 @code{display-buffer} makes a new frame. @xref{Frame Parameters}, for
1058 more information about frame parameters.
1059 @end defopt
1060
1061 @defopt special-display-buffer-names
1062 A list of buffer names for buffers that should be displayed specially.
1063 If the buffer's name is in this list, @code{display-buffer} handles the
1064 buffer specially.
1065
1066 By default, special display means to give the buffer a dedicated frame.
1067
1068 If an element is a list, instead of a string, then the @sc{car} of the
1069 list is the buffer name, and the rest of the list says how to create
1070 the frame. There are two possibilities for the rest of the list (its
1071 @sc{cdr}). It can be an alist, specifying frame parameters, or it can
1072 contain a function and arguments to give to it. (The function's first
1073 argument is always the buffer to be displayed; the arguments from the
1074 list come after that.)
1075
1076 For example:
1077
1078 @example
1079 (("myfile" (minibuffer) (menu-bar-lines . 0)))
1080 @end example
1081
1082 @noindent
1083 specifies to display a buffer named @samp{myfile} in a dedicated frame
1084 with specified @code{minibuffer} and @code{menu-bar-lines} parameters.
1085
1086 The list of frame parameters can also use the phony frame parameters
1087 @code{same-frame} and @code{same-window}. If the specified frame
1088 parameters include @code{(same-window . @var{value})} and @var{value}
1089 is non-@code{nil}, that means to display the buffer in the current
1090 selected window. Otherwise, if they include @code{(same-frame .
1091 @var{value})} and @var{value} is non-@code{nil}, that means to display
1092 the buffer in a new window in the currently selected frame.
1093 @end defopt
1094
1095 @defopt special-display-regexps
1096 A list of regular expressions that specify buffers that should be
1097 displayed specially. If the buffer's name matches any of the regular
1098 expressions in this list, @code{display-buffer} handles the buffer
1099 specially.
1100
1101 By default, special display means to give the buffer a dedicated frame.
1102
1103 If an element is a list, instead of a string, then the @sc{car} of the
1104 list is the regular expression, and the rest of the list says how to
1105 create the frame. See above, under @code{special-display-buffer-names}.
1106 @end defopt
1107
1108 @defun special-display-p buffer-name
1109 This function returns non-@code{nil} if displaying a buffer
1110 named @var{buffer-name} with @code{display-buffer} would
1111 create a special frame. The value is @code{t} if it would
1112 use the default frame parameters, or else the specified list
1113 of frame parameters.
1114 @end defun
1115
1116 @defvar special-display-function
1117 This variable holds the function to call to display a buffer specially.
1118 It receives the buffer as an argument, and should return the window in
1119 which it is displayed.
1120
1121 The default value of this variable is
1122 @code{special-display-popup-frame}.
1123 @end defvar
1124
1125 @defun special-display-popup-frame buffer &optional args
1126 This function makes @var{buffer} visible in a frame of its own. If
1127 @var{buffer} is already displayed in a window in some frame, it makes
1128 the frame visible and raises it, to use that window. Otherwise, it
1129 creates a frame that will be dedicated to @var{buffer}. This
1130 function returns the window it used.
1131
1132 If @var{args} is an alist, it specifies frame parameters for the new
1133 frame.
1134
1135 If @var{args} is a list whose @sc{car} is a symbol, then @code{(car
1136 @var{args})} is called as a function to actually create and set up the
1137 frame; it is called with @var{buffer} as first argument, and @code{(cdr
1138 @var{args})} as additional arguments.
1139
1140 This function always uses an existing window displaying @var{buffer},
1141 whether or not it is in a frame of its own; but if you set up the above
1142 variables in your init file, before @var{buffer} was created, then
1143 presumably the window was previously made by this function.
1144 @end defun
1145
1146 @defopt special-display-frame-alist
1147 @anchor{Definition of special-display-frame-alist}
1148 This variable holds frame parameters for
1149 @code{special-display-popup-frame} to use when it creates a frame.
1150 @end defopt
1151
1152 @defopt same-window-buffer-names
1153 A list of buffer names for buffers that should be displayed in the
1154 selected window. If the buffer's name is in this list,
1155 @code{display-buffer} handles the buffer by switching to it in the
1156 selected window.
1157 @end defopt
1158
1159 @defopt same-window-regexps
1160 A list of regular expressions that specify buffers that should be
1161 displayed in the selected window. If the buffer's name matches any of
1162 the regular expressions in this list, @code{display-buffer} handles the
1163 buffer by switching to it in the selected window.
1164 @end defopt
1165
1166 @defun same-window-p buffer-name
1167 This function returns @code{t} if displaying a buffer
1168 named @var{buffer-name} with @code{display-buffer} would
1169 put it in the selected window.
1170 @end defun
1171
1172 @c Emacs 19 feature
1173 @defvar display-buffer-function
1174 This variable is the most flexible way to customize the behavior of
1175 @code{display-buffer}. If it is non-@code{nil}, it should be a function
1176 that @code{display-buffer} calls to do the work. The function should
1177 accept two arguments, the first two arguments that @code{display-buffer}
1178 received. It should choose or create a window, display the specified
1179 buffer in it, and then return the window.
1180
1181 This hook takes precedence over all the other options and hooks
1182 described above.
1183 @end defvar
1184
1185 @c Emacs 19 feature
1186 @cindex dedicated window
1187 A window can be marked as @dfn{dedicated} to its buffer. Then
1188 @code{display-buffer} will not try to use that window to display any
1189 other buffer. @code{set-window-buffer} will signal an error when asked
1190 to display another buffer in it. Both @code{get-lru-window} and
1191 @code{get-largest-window} do not consider dedicated windows as
1192 candidates when their @var{dedicated} argument is non-@code{nil}.
1193
1194 When @code{delete-windows-on} deletes a dedicated window and that window
1195 is the only window on its frame, it will delete that frame as well if
1196 there are other frames left. @code{replace-buffer-in-windows} deletes
1197 any dedicated window showing its buffer argument. When such a window is
1198 the only window on its frame, that frame is deleted if there are other
1199 frames left.
1200
1201 @defun window-dedicated-p &optional window
1202 This function returns non-@code{nil} if @var{window} is marked as
1203 dedicated; otherwise @code{nil}.
1204 @end defun
1205
1206 @defun set-window-dedicated-p window flag
1207 This function marks @var{window} as dedicated if @var{flag} is
1208 non-@code{nil}, and nondedicated otherwise.
1209 @end defun
1210
1211 @node Window Point
1212 @section Windows and Point
1213 @cindex window position
1214 @cindex window point
1215 @cindex position in window
1216 @cindex point in window
1217
1218 Each window has its own value of point, independent of the value of
1219 point in other windows displaying the same buffer. This makes it useful
1220 to have multiple windows showing one buffer.
1221
1222 @itemize @bullet
1223 @item
1224 The window point is established when a window is first created; it is
1225 initialized from the buffer's point, or from the window point of another
1226 window opened on the buffer if such a window exists.
1227
1228 @item
1229 Selecting a window sets the value of point in its buffer from the
1230 window's value of point. Conversely, deselecting a window sets the
1231 window's value of point from that of the buffer. Thus, when you switch
1232 between windows that display a given buffer, the point value for the
1233 selected window is in effect in the buffer, while the point values for
1234 the other windows are stored in those windows.
1235
1236 @item
1237 As long as the selected window displays the current buffer, the window's
1238 point and the buffer's point always move together; they remain equal.
1239 @end itemize
1240
1241 @noindent
1242 @xref{Positions}, for more details on buffer positions.
1243
1244 @cindex cursor
1245 As far as the user is concerned, point is where the cursor is, and
1246 when the user switches to another buffer, the cursor jumps to the
1247 position of point in that buffer.
1248
1249 @defun window-point &optional window
1250 This function returns the current position of point in @var{window}.
1251 For a nonselected window, this is the value point would have (in that
1252 window's buffer) if that window were selected. If @var{window} is
1253 @code{nil}, the selected window is used.
1254
1255 When @var{window} is the selected window and its buffer is also the
1256 current buffer, the value returned is the same as point in that buffer.
1257
1258 Strictly speaking, it would be more correct to return the
1259 ``top-level'' value of point, outside of any @code{save-excursion}
1260 forms. But that value is hard to find.
1261 @end defun
1262
1263 @defun set-window-point window position
1264 This function positions point in @var{window} at position
1265 @var{position} in @var{window}'s buffer. It returns @var{position}.
1266
1267 If @var{window} is selected, and its buffer is current,
1268 this simply does @code{goto-char}.
1269 @end defun
1270
1271 @node Window Start
1272 @section The Window Start Position
1273 @cindex window start position
1274
1275 Each window contains a marker used to keep track of a buffer position
1276 that specifies where in the buffer display should start. This position
1277 is called the @dfn{display-start} position of the window (or just the
1278 @dfn{start}). The character after this position is the one that appears
1279 at the upper left corner of the window. It is usually, but not
1280 inevitably, at the beginning of a text line.
1281
1282 After switching windows or buffers, and in some other cases, if the
1283 window start is in the middle of a line, Emacs adjusts the window
1284 start to the start of a line. This prevents certain operations from
1285 leaving the window start at a meaningless point within a line. This
1286 feature may interfere with testing some Lisp code by executing it
1287 using the commands of Lisp mode, because they trigger this
1288 readjustment. To test such code, put it into a command and bind the
1289 command to a key.
1290
1291 @defun window-start &optional window
1292 @cindex window top line
1293 This function returns the display-start position of window
1294 @var{window}. If @var{window} is @code{nil}, the selected window is
1295 used. For example,
1296
1297 @example
1298 @group
1299 (window-start)
1300 @result{} 7058
1301 @end group
1302 @end example
1303
1304 When you create a window, or display a different buffer in it, the
1305 display-start position is set to a display-start position recently used
1306 for the same buffer, or 1 if the buffer doesn't have any.
1307
1308 Redisplay updates the window-start position (if you have not specified
1309 it explicitly since the previous redisplay)---for example, to make sure
1310 point appears on the screen. Nothing except redisplay automatically
1311 changes the window-start position; if you move point, do not expect the
1312 window-start position to change in response until after the next
1313 redisplay.
1314
1315 For a realistic example of using @code{window-start}, see the
1316 description of @code{count-lines}. @xref{Definition of count-lines}.
1317 @end defun
1318
1319 @defun window-end &optional window update
1320 This function returns the position of the end of the display in window
1321 @var{window}. If @var{window} is @code{nil}, the selected window is
1322 used.
1323
1324 Simply changing the buffer text or moving point does not update the
1325 value that @code{window-end} returns. The value is updated only when
1326 Emacs redisplays and redisplay completes without being preempted.
1327
1328 If the last redisplay of @var{window} was preempted, and did not finish,
1329 Emacs does not know the position of the end of display in that window.
1330 In that case, this function returns @code{nil}.
1331
1332 If @var{update} is non-@code{nil}, @code{window-end} always returns an
1333 up-to-date value for where the window ends, based on the current
1334 @code{window-start} value. If the saved value is valid,
1335 @code{window-end} returns that; otherwise it computes the correct
1336 value by scanning the buffer text.
1337
1338 Even if @var{update} is non-@code{nil}, @code{window-end} does not
1339 attempt to scroll the display if point has moved off the screen, the
1340 way real redisplay would do. It does not alter the
1341 @code{window-start} value. In effect, it reports where the displayed
1342 text will end if scrolling is not required.
1343 @end defun
1344
1345 @defun set-window-start window position &optional noforce
1346 This function sets the display-start position of @var{window} to
1347 @var{position} in @var{window}'s buffer. It returns @var{position}.
1348
1349 The display routines insist that the position of point be visible when a
1350 buffer is displayed. Normally, they change the display-start position
1351 (that is, scroll the window) whenever necessary to make point visible.
1352 However, if you specify the start position with this function using
1353 @code{nil} for @var{noforce}, it means you want display to start at
1354 @var{position} even if that would put the location of point off the
1355 screen. If this does place point off screen, the display routines move
1356 point to the left margin on the middle line in the window.
1357
1358 For example, if point @w{is 1} and you set the start of the window
1359 @w{to 37}, the start of the next line, point will be ``above'' the top
1360 of the window. The display routines will automatically move point if
1361 it is still 1 when redisplay occurs. Here is an example:
1362
1363 @example
1364 @group
1365 ;; @r{Here is what @samp{foo} looks like before executing}
1366 ;; @r{the @code{set-window-start} expression.}
1367 @end group
1368
1369 @group
1370 ---------- Buffer: foo ----------
1371 @point{}This is the contents of buffer foo.
1372 2
1373 3
1374 4
1375 5
1376 6
1377 ---------- Buffer: foo ----------
1378 @end group
1379
1380 @group
1381 (set-window-start
1382 (selected-window)
1383 (save-excursion
1384 (goto-char 1)
1385 (forward-line 1)
1386 (point)))
1387 @result{} 37
1388 @end group
1389
1390 @group
1391 ;; @r{Here is what @samp{foo} looks like after executing}
1392 ;; @r{the @code{set-window-start} expression.}
1393 ---------- Buffer: foo ----------
1394 2
1395 3
1396 @point{}4
1397 5
1398 6
1399 ---------- Buffer: foo ----------
1400 @end group
1401 @end example
1402
1403 If @var{noforce} is non-@code{nil}, and @var{position} would place point
1404 off screen at the next redisplay, then redisplay computes a new window-start
1405 position that works well with point, and thus @var{position} is not used.
1406 @end defun
1407
1408 @defun pos-visible-in-window-p &optional position window partially
1409 This function returns non-@code{nil} if @var{position} is within the
1410 range of text currently visible on the screen in @var{window}. It
1411 returns @code{nil} if @var{position} is scrolled vertically out of
1412 view. Locations that are partially obscured are not considered
1413 visible unless @var{partially} is non-@code{nil}. The argument
1414 @var{position} defaults to the current position of point in
1415 @var{window}; @var{window}, to the selected window.
1416
1417 If @var{position} is @code{t}, that means to check the last visible
1418 position in @var{window}.
1419
1420 The @code{pos-visible-in-window-p} function considers only vertical
1421 scrolling. If @var{position} is out of view only because @var{window}
1422 has been scrolled horizontally, @code{pos-visible-in-window-p} returns
1423 non-@code{nil} anyway. @xref{Horizontal Scrolling}.
1424
1425 If @var{position} is visible, @code{pos-visible-in-window-p} returns
1426 @code{t} if @var{partially} is @code{nil}; if @var{partially} is
1427 non-@code{nil}, and the character after @var{position} is fully
1428 visible, it returns a list of the form @code{(@var{x} @var{y})}, where
1429 @var{x} and @var{y} are the pixel coordinates relative to the top left
1430 corner of the window; otherwise it returns an extended list of the
1431 form @code{(@var{x} @var{y} @var{rtop} @var{rbot} @var{rowh}
1432 @var{vpos})}, where the @var{rtop} and @var{rbot} specify the number
1433 of off-window pixels at the top and bottom of the row at
1434 @var{position}, @var{rowh} specifies the visible height of that row,
1435 and @var{vpos} specifies the vertical position (zero-based row number)
1436 of that row.
1437
1438 Here is an example:
1439
1440 @example
1441 @group
1442 ;; @r{If point is off the screen now, recenter it now.}
1443 (or (pos-visible-in-window-p
1444 (point) (selected-window))
1445 (recenter 0))
1446 @end group
1447 @end example
1448 @end defun
1449
1450 @defun window-line-height &optional line window
1451 This function returns information about text line @var{line} in @var{window}.
1452 If @var{line} is one of @code{header-line} or @code{mode-line},
1453 @code{window-line-height} returns information about the corresponding
1454 line of the window. Otherwise, @var{line} is a text line number
1455 starting from 0. A negative number counts from the end of the window.
1456 The argument @var{line} defaults to the current line in @var{window};
1457 @var{window}, to the selected window.
1458
1459 If the display is not up to date, @code{window-line-height} returns
1460 @code{nil}. In that case, @code{pos-visible-in-window-p} may be used
1461 to obtain related information.
1462
1463 If there is no line corresponding to the specified @var{line},
1464 @code{window-line-height} returns @code{nil}. Otherwise, it returns
1465 a list @code{(@var{height} @var{vpos} @var{ypos} @var{offbot})},
1466 where @var{height} is the height in pixels of the visible part of the
1467 line, @var{vpos} and @var{ypos} are the vertical position in lines and
1468 pixels of the line relative to the top of the first text line, and
1469 @var{offbot} is the number of off-window pixels at the bottom of the
1470 text line. If there are off-window pixels at the top of the (first)
1471 text line, @var{ypos} is negative.
1472 @end defun
1473
1474 @node Textual Scrolling
1475 @section Textual Scrolling
1476 @cindex textual scrolling
1477 @cindex scrolling textually
1478
1479 @dfn{Textual scrolling} means moving the text up or down through a
1480 window. It works by changing the value of the window's display-start
1481 location. It may also change the value of @code{window-point} to keep
1482 point on the screen.
1483
1484 Textual scrolling was formerly called ``vertical scrolling,'' but we
1485 changed its name to distinguish it from the new vertical fractional
1486 scrolling feature (@pxref{Vertical Scrolling}).
1487
1488 In the commands @code{scroll-up} and @code{scroll-down}, the directions
1489 ``up'' and ``down'' refer to the motion of the text in the buffer at which
1490 you are looking through the window. Imagine that the text is
1491 written on a long roll of paper and that the scrolling commands move the
1492 paper up and down. Thus, if you are looking at text in the middle of a
1493 buffer and repeatedly call @code{scroll-down}, you will eventually see
1494 the beginning of the buffer.
1495
1496 Some people have urged that the opposite convention be used: they
1497 imagine that the window moves over text that remains in place. Then
1498 ``down'' commands would take you to the end of the buffer. This view is
1499 more consistent with the actual relationship between windows and the
1500 text in the buffer, but it is less like what the user sees. The
1501 position of a window on the terminal does not move, and short scrolling
1502 commands clearly move the text up or down on the screen. We have chosen
1503 names that fit the user's point of view.
1504
1505 The textual scrolling functions (aside from
1506 @code{scroll-other-window}) have unpredictable results if the current
1507 buffer is different from the buffer that is displayed in the selected
1508 window. @xref{Current Buffer}.
1509
1510 If the window contains a row which is taller than the height of the
1511 window (for example in the presence of a large image), the scroll
1512 functions will adjust the window vscroll to scroll the partially
1513 visible row. To disable this feature, Lisp code may bind the variable
1514 `auto-window-vscroll' to @code{nil} (@pxref{Vertical Scrolling}).
1515
1516 @deffn Command scroll-up &optional count
1517 This function scrolls the text in the selected window upward
1518 @var{count} lines. If @var{count} is negative, scrolling is actually
1519 downward.
1520
1521 If @var{count} is @code{nil} (or omitted), then the length of scroll
1522 is @code{next-screen-context-lines} lines less than the usable height of
1523 the window (not counting its mode line).
1524
1525 @code{scroll-up} returns @code{nil}, unless it gets an error
1526 because it can't scroll any further.
1527 @end deffn
1528
1529 @deffn Command scroll-down &optional count
1530 This function scrolls the text in the selected window downward
1531 @var{count} lines. If @var{count} is negative, scrolling is actually
1532 upward.
1533
1534 If @var{count} is omitted or @code{nil}, then the length of the scroll
1535 is @code{next-screen-context-lines} lines less than the usable height of
1536 the window (not counting its mode line).
1537
1538 @code{scroll-down} returns @code{nil}, unless it gets an error because
1539 it can't scroll any further.
1540 @end deffn
1541
1542 @deffn Command scroll-other-window &optional count
1543 This function scrolls the text in another window upward @var{count}
1544 lines. Negative values of @var{count}, or @code{nil}, are handled
1545 as in @code{scroll-up}.
1546
1547 You can specify which buffer to scroll by setting the variable
1548 @code{other-window-scroll-buffer} to a buffer. If that buffer isn't
1549 already displayed, @code{scroll-other-window} displays it in some
1550 window.
1551
1552 When the selected window is the minibuffer, the next window is normally
1553 the one at the top left corner. You can specify a different window to
1554 scroll, when the minibuffer is selected, by setting the variable
1555 @code{minibuffer-scroll-window}. This variable has no effect when any
1556 other window is selected. When it is non-@code{nil} and the
1557 minibuffer is selected, it takes precedence over
1558 @code{other-window-scroll-buffer}. @xref{Definition of
1559 minibuffer-scroll-window}.
1560
1561 When the minibuffer is active, it is the next window if the selected
1562 window is the one at the bottom right corner. In this case,
1563 @code{scroll-other-window} attempts to scroll the minibuffer. If the
1564 minibuffer contains just one line, it has nowhere to scroll to, so the
1565 line reappears after the echo area momentarily displays the message
1566 @samp{Beginning of buffer}.
1567 @end deffn
1568
1569 @c Emacs 19 feature
1570 @defvar other-window-scroll-buffer
1571 If this variable is non-@code{nil}, it tells @code{scroll-other-window}
1572 which buffer to scroll.
1573 @end defvar
1574
1575 @defopt scroll-margin
1576 This option specifies the size of the scroll margin---a minimum number
1577 of lines between point and the top or bottom of a window. Whenever
1578 point gets within this many lines of the top or bottom of the window,
1579 redisplay scrolls the text automatically (if possible) to move point
1580 out of the margin, closer to the center of the window.
1581 @end defopt
1582
1583 @defopt scroll-conservatively
1584 This variable controls how scrolling is done automatically when point
1585 moves off the screen (or into the scroll margin). If the value is a
1586 positive integer @var{n}, then redisplay scrolls the text up to
1587 @var{n} lines in either direction, if that will bring point back into
1588 proper view. This action is called @dfn{conservative scrolling}.
1589 Otherwise, scrolling happens in the usual way, under the control of
1590 other variables such as @code{scroll-up-aggressively} and
1591 @code{scroll-down-aggressively}.
1592
1593 The default value is zero, which means that conservative scrolling
1594 never happens.
1595 @end defopt
1596
1597 @defopt scroll-down-aggressively
1598 The value of this variable should be either @code{nil} or a fraction
1599 @var{f} between 0 and 1. If it is a fraction, that specifies where on
1600 the screen to put point when scrolling down. More precisely, when a
1601 window scrolls down because point is above the window start, the new
1602 start position is chosen to put point @var{f} part of the window
1603 height from the top. The larger @var{f}, the more aggressive the
1604 scrolling.
1605
1606 A value of @code{nil} is equivalent to .5, since its effect is to center
1607 point. This variable automatically becomes buffer-local when set in any
1608 fashion.
1609 @end defopt
1610
1611 @defopt scroll-up-aggressively
1612 Likewise, for scrolling up. The value, @var{f}, specifies how far
1613 point should be placed from the bottom of the window; thus, as with
1614 @code{scroll-up-aggressively}, a larger value scrolls more aggressively.
1615 @end defopt
1616
1617 @defopt scroll-step
1618 This variable is an older variant of @code{scroll-conservatively}. The
1619 difference is that it if its value is @var{n}, that permits scrolling
1620 only by precisely @var{n} lines, not a smaller number. This feature
1621 does not work with @code{scroll-margin}. The default value is zero.
1622 @end defopt
1623
1624 @defopt scroll-preserve-screen-position
1625 If this option is @code{t}, scrolling which would move the current
1626 point position out of the window chooses the new position of point
1627 so that the vertical position of the cursor is unchanged, if possible.
1628
1629 If it is non-@code{nil} and not @code{t}, then the scrolling functions
1630 always preserve the vertical position of point, if possible.
1631 @end defopt
1632
1633 @defopt next-screen-context-lines
1634 The value of this variable is the number of lines of continuity to
1635 retain when scrolling by full screens. For example, @code{scroll-up}
1636 with an argument of @code{nil} scrolls so that this many lines at the
1637 bottom of the window appear instead at the top. The default value is
1638 @code{2}.
1639 @end defopt
1640
1641 @deffn Command recenter &optional count
1642 @cindex centering point
1643 This function scrolls the text in the selected window so that point is
1644 displayed at a specified vertical position within the window. It does
1645 not ``move point'' with respect to the text.
1646
1647 If @var{count} is a nonnegative number, that puts the line containing
1648 point @var{count} lines down from the top of the window. If
1649 @var{count} is a negative number, then it counts upward from the
1650 bottom of the window, so that @minus{}1 stands for the last usable
1651 line in the window. If @var{count} is a non-@code{nil} list, then it
1652 stands for the line in the middle of the window.
1653
1654 If @var{count} is @code{nil}, @code{recenter} puts the line containing
1655 point in the middle of the window, then clears and redisplays the entire
1656 selected frame.
1657
1658 When @code{recenter} is called interactively, @var{count} is the raw
1659 prefix argument. Thus, typing @kbd{C-u} as the prefix sets the
1660 @var{count} to a non-@code{nil} list, while typing @kbd{C-u 4} sets
1661 @var{count} to 4, which positions the current line four lines from the
1662 top.
1663
1664 With an argument of zero, @code{recenter} positions the current line at
1665 the top of the window. This action is so handy that some people make a
1666 separate key binding to do this. For example,
1667
1668 @example
1669 @group
1670 (defun line-to-top-of-window ()
1671 "Scroll current line to top of window.
1672 Replaces three keystroke sequence C-u 0 C-l."
1673 (interactive)
1674 (recenter 0))
1675
1676 (global-set-key [kp-multiply] 'line-to-top-of-window)
1677 @end group
1678 @end example
1679 @end deffn
1680
1681 @node Vertical Scrolling
1682 @section Vertical Fractional Scrolling
1683 @cindex vertical fractional scrolling
1684
1685 @dfn{Vertical fractional scrolling} means shifting the image in the
1686 window up or down by a specified multiple or fraction of a line.
1687 Each window has a @dfn{vertical scroll position},
1688 which is a number, never less than zero. It specifies how far to raise
1689 the contents of the window. Raising the window contents generally makes
1690 all or part of some lines disappear off the top, and all or part of some
1691 other lines appear at the bottom. The usual value is zero.
1692
1693 The vertical scroll position is measured in units of the normal line
1694 height, which is the height of the default font. Thus, if the value is
1695 .5, that means the window contents are scrolled up half the normal line
1696 height. If it is 3.3, that means the window contents are scrolled up
1697 somewhat over three times the normal line height.
1698
1699 What fraction of a line the vertical scrolling covers, or how many
1700 lines, depends on what the lines contain. A value of .5 could scroll a
1701 line whose height is very short off the screen, while a value of 3.3
1702 could scroll just part of the way through a tall line or an image.
1703
1704 @defun window-vscroll &optional window pixels-p
1705 This function returns the current vertical scroll position of
1706 @var{window}. If @var{window} is @code{nil}, the selected window is
1707 used. If @var{pixels-p} is non-@code{nil}, the return value is
1708 measured in pixels, rather than in units of the normal line height.
1709
1710 @example
1711 @group
1712 (window-vscroll)
1713 @result{} 0
1714 @end group
1715 @end example
1716 @end defun
1717
1718 @defun set-window-vscroll window lines &optional pixels-p
1719 This function sets @var{window}'s vertical scroll position to
1720 @var{lines}. The argument @var{lines} should be zero or positive; if
1721 not, it is taken as zero.
1722
1723 If @var{window} is @code{nil}, the selected window is used.
1724
1725 The actual vertical scroll position must always correspond
1726 to an integral number of pixels, so the value you specify
1727 is rounded accordingly.
1728
1729 The return value is the result of this rounding.
1730
1731 @example
1732 @group
1733 (set-window-vscroll (selected-window) 1.2)
1734 @result{} 1.13
1735 @end group
1736 @end example
1737
1738 If @var{pixels-p} is non-@code{nil}, @var{lines} specifies a number of
1739 pixels. In this case, the return value is @var{lines}.
1740 @end defun
1741
1742 @defvar auto-window-vscroll
1743 If this variable is non-@code{nil}, the line-move, scroll-up, and
1744 scroll-down functions will automatically modify the window vscroll to
1745 scroll through display rows that are taller that the height of the
1746 window, for example in the presence of large images.
1747 @end defvar
1748
1749 @node Horizontal Scrolling
1750 @section Horizontal Scrolling
1751 @cindex horizontal scrolling
1752
1753 @dfn{Horizontal scrolling} means shifting the image in the window left
1754 or right by a specified multiple of the normal character width. Each
1755 window has a @dfn{horizontal scroll position}, which is a number, never
1756 less than zero. It specifies how far to shift the contents left.
1757 Shifting the window contents left generally makes all or part of some
1758 characters disappear off the left, and all or part of some other
1759 characters appear at the right. The usual value is zero.
1760
1761 The horizontal scroll position is measured in units of the normal
1762 character width, which is the width of space in the default font. Thus,
1763 if the value is 5, that means the window contents are scrolled left by 5
1764 times the normal character width. How many characters actually
1765 disappear off to the left depends on their width, and could vary from
1766 line to line.
1767
1768 Because we read from side to side in the ``inner loop,'' and from top
1769 to bottom in the ``outer loop,'' the effect of horizontal scrolling is
1770 not like that of textual or vertical scrolling. Textual scrolling
1771 involves selection of a portion of text to display, and vertical
1772 scrolling moves the window contents contiguously; but horizontal
1773 scrolling causes part of @emph{each line} to go off screen.
1774
1775 Usually, no horizontal scrolling is in effect; then the leftmost
1776 column is at the left edge of the window. In this state, scrolling to
1777 the right is meaningless, since there is no data to the left of the edge
1778 to be revealed by it; so this is not allowed. Scrolling to the left is
1779 allowed; it scrolls the first columns of text off the edge of the window
1780 and can reveal additional columns on the right that were truncated
1781 before. Once a window has a nonzero amount of leftward horizontal
1782 scrolling, you can scroll it back to the right, but only so far as to
1783 reduce the net horizontal scroll to zero. There is no limit to how far
1784 left you can scroll, but eventually all the text will disappear off the
1785 left edge.
1786
1787 @vindex auto-hscroll-mode
1788 If @code{auto-hscroll-mode} is set, redisplay automatically alters
1789 the horizontal scrolling of a window as necessary to ensure that point
1790 is always visible. However, you can still set the horizontal
1791 scrolling value explicitly. The value you specify serves as a lower
1792 bound for automatic scrolling, i.e. automatic scrolling will not
1793 scroll a window to a column less than the specified one.
1794
1795 @deffn Command scroll-left &optional count set-minimum
1796 This function scrolls the selected window @var{count} columns to the
1797 left (or to the right if @var{count} is negative). The default
1798 for @var{count} is the window width, minus 2.
1799
1800 The return value is the total amount of leftward horizontal scrolling in
1801 effect after the change---just like the value returned by
1802 @code{window-hscroll} (below).
1803
1804 Once you scroll a window as far right as it can go, back to its normal
1805 position where the total leftward scrolling is zero, attempts to scroll
1806 any farther right have no effect.
1807
1808 If @var{set-minimum} is non-@code{nil}, the new scroll amount becomes
1809 the lower bound for automatic scrolling; that is, automatic scrolling
1810 will not scroll a window to a column less than the value returned by
1811 this function. Interactive calls pass non-@code{nil} for
1812 @var{set-minimum}.
1813 @end deffn
1814
1815 @deffn Command scroll-right &optional count set-minimum
1816 This function scrolls the selected window @var{count} columns to the
1817 right (or to the left if @var{count} is negative). The default
1818 for @var{count} is the window width, minus 2. Aside from the direction
1819 of scrolling, this works just like @code{scroll-left}.
1820 @end deffn
1821
1822 @defun window-hscroll &optional window
1823 This function returns the total leftward horizontal scrolling of
1824 @var{window}---the number of columns by which the text in @var{window}
1825 is scrolled left past the left margin.
1826
1827 The value is never negative. It is zero when no horizontal scrolling
1828 has been done in @var{window} (which is usually the case).
1829
1830 If @var{window} is @code{nil}, the selected window is used.
1831
1832 @example
1833 @group
1834 (window-hscroll)
1835 @result{} 0
1836 @end group
1837 @group
1838 (scroll-left 5)
1839 @result{} 5
1840 @end group
1841 @group
1842 (window-hscroll)
1843 @result{} 5
1844 @end group
1845 @end example
1846 @end defun
1847
1848 @defun set-window-hscroll window columns
1849 This function sets horizontal scrolling of @var{window}. The value of
1850 @var{columns} specifies the amount of scrolling, in terms of columns
1851 from the left margin. The argument @var{columns} should be zero or
1852 positive; if not, it is taken as zero. Fractional values of
1853 @var{columns} are not supported at present.
1854
1855 Note that @code{set-window-hscroll} may appear not to work if you test
1856 it by evaluating a call with @kbd{M-:} in a simple way. What happens
1857 is that the function sets the horizontal scroll value and returns, but
1858 then redisplay adjusts the horizontal scrolling to make point visible,
1859 and this overrides what the function did. You can observe the
1860 function's effect if you call it while point is sufficiently far from
1861 the left margin that it will remain visible.
1862
1863 The value returned is @var{columns}.
1864
1865 @example
1866 @group
1867 (set-window-hscroll (selected-window) 10)
1868 @result{} 10
1869 @end group
1870 @end example
1871 @end defun
1872
1873 Here is how you can determine whether a given position @var{position}
1874 is off the screen due to horizontal scrolling:
1875
1876 @example
1877 @group
1878 (defun hscroll-on-screen (window position)
1879 (save-excursion
1880 (goto-char position)
1881 (and
1882 (>= (- (current-column) (window-hscroll window)) 0)
1883 (< (- (current-column) (window-hscroll window))
1884 (window-width window)))))
1885 @end group
1886 @end example
1887
1888 @node Size of Window
1889 @section The Size of a Window
1890 @cindex window size
1891 @cindex size of window
1892
1893 An Emacs window is rectangular, and its size information consists of
1894 the height (the number of lines) and the width (the number of character
1895 positions in each line). The mode line is included in the height. But
1896 the width does not count the scroll bar or the column of @samp{|}
1897 characters that separates side-by-side windows.
1898
1899 The following three functions return size information about a window:
1900
1901 @defun window-height &optional window
1902 This function returns the number of lines in @var{window}, including
1903 its mode line and header line, if any. If @var{window} fills its
1904 entire frame except for the echo area, this is typically one less than
1905 the value of @code{frame-height} on that frame.
1906
1907 If @var{window} is @code{nil}, the function uses the selected window.
1908
1909 @example
1910 @group
1911 (window-height)
1912 @result{} 23
1913 @end group
1914 @group
1915 (split-window-vertically)
1916 @result{} #<window 4 on windows.texi>
1917 @end group
1918 @group
1919 (window-height)
1920 @result{} 11
1921 @end group
1922 @end example
1923 @end defun
1924
1925 @defun window-body-height &optional window
1926 Like @code{window-height} but the value does not include the
1927 mode line (if any) or the header line (if any).
1928 @end defun
1929
1930 @defun window-width &optional window
1931 This function returns the number of columns in @var{window}. If
1932 @var{window} fills its entire frame, this is the same as the value of
1933 @code{frame-width} on that frame. The width does not include the
1934 window's scroll bar or the column of @samp{|} characters that separates
1935 side-by-side windows.
1936
1937 If @var{window} is @code{nil}, the function uses the selected window.
1938
1939 @example
1940 @group
1941 (window-width)
1942 @result{} 80
1943 @end group
1944 @end example
1945 @end defun
1946
1947 @defun window-full-width-p &optional window
1948 This function returns non-@code{nil} if @var{window} is as wide as
1949 the frame that contains it; otherwise @code{nil}.
1950 If @var{window} is @code{nil}, the function uses the selected window.
1951 @end defun
1952
1953 @defun window-edges &optional window
1954 This function returns a list of the edge coordinates of @var{window}.
1955 If @var{window} is @code{nil}, the selected window is used.
1956
1957 The order of the list is @code{(@var{left} @var{top} @var{right}
1958 @var{bottom})}, all elements relative to 0, 0 at the top left corner of
1959 the frame. The element @var{right} of the value is one more than the
1960 rightmost column used by @var{window}, and @var{bottom} is one more than
1961 the bottommost row used by @var{window} and its mode-line.
1962
1963 The edges include the space used by the window's scroll bar, display
1964 margins, fringes, header line, and mode line, if it has them. Also,
1965 if the window has a neighbor on the right, its right edge value
1966 includes the width of the separator line between the window and that
1967 neighbor. Since the width of the window does not include this
1968 separator, the width does not usually equal the difference between the
1969 right and left edges.
1970 @end defun
1971
1972 @defun window-inside-edges &optional window
1973 This is similar to @code{window-edges}, but the edge values
1974 it returns include only the text area of the window. They
1975 do not include the header line, mode line, scroll bar or
1976 vertical separator, fringes, or display margins.
1977 @end defun
1978
1979 Here are the results obtained on a typical 24-line terminal with just
1980 one window, with menu bar enabled:
1981
1982 @example
1983 @group
1984 (window-edges (selected-window))
1985 @result{} (0 1 80 23)
1986 @end group
1987 @group
1988 (window-inside-edges (selected-window))
1989 @result{} (0 1 80 22)
1990 @end group
1991 @end example
1992
1993 @noindent
1994 The bottom edge is at line 23 because the last line is the echo area.
1995 The bottom inside edge is at line 22, which is the window's mode line.
1996
1997 If @var{window} is at the upper left corner of its frame, and there is
1998 no menu bar, then @var{bottom} returned by @code{window-edges} is the
1999 same as the value of @code{(window-height)}, @var{right} is almost the
2000 same as the value of @code{(window-width)}, and @var{top} and
2001 @var{left} are zero. For example, the edges of the following window
2002 are @w{@samp{0 0 8 5}}. Assuming that the frame has more than 8
2003 columns, the last column of the window (column 7) holds a border
2004 rather than text. The last row (row 4) holds the mode line, shown
2005 here with @samp{xxxxxxxxx}.
2006
2007 @example
2008 @group
2009 0
2010 _______
2011 0 | |
2012 | |
2013 | |
2014 | |
2015 xxxxxxxxx 4
2016
2017 7
2018 @end group
2019 @end example
2020
2021 In the following example, let's suppose that the frame is 7
2022 columns wide. Then the edges of the left window are @w{@samp{0 0 4 3}}
2023 and the edges of the right window are @w{@samp{4 0 7 3}}.
2024 The inside edges of the left window are @w{@samp{0 0 3 2}},
2025 and the inside edges of the right window are @w{@samp{4 0 7 2}},
2026
2027 @example
2028 @group
2029 ___ ___
2030 | | |
2031 | | |
2032 xxxxxxxxx
2033
2034 0 34 7
2035 @end group
2036 @end example
2037
2038 @defun window-pixel-edges &optional window
2039 This function is like @code{window-edges} except that, on a graphical
2040 display, the edge values are measured in pixels instead of in
2041 character lines and columns.
2042 @end defun
2043
2044 @defun window-inside-pixel-edges &optional window
2045 This function is like @code{window-inside-edges} except that, on a
2046 graphical display, the edge values are measured in pixels instead of
2047 in character lines and columns.
2048 @end defun
2049
2050 @node Resizing Windows
2051 @section Changing the Size of a Window
2052 @cindex window resizing
2053 @cindex resize window
2054 @cindex changing window size
2055 @cindex window size, changing
2056
2057 The window size functions fall into two classes: high-level commands
2058 that change the size of windows and low-level functions that access
2059 window size. Emacs does not permit overlapping windows or gaps between
2060 windows, so resizing one window affects other windows.
2061
2062 @deffn Command enlarge-window size &optional horizontal
2063 This function makes the selected window @var{size} lines taller,
2064 stealing lines from neighboring windows. It takes the lines from one
2065 window at a time until that window is used up, then takes from another.
2066 If a window from which lines are stolen shrinks below
2067 @code{window-min-height} lines, that window disappears.
2068
2069 If @var{horizontal} is non-@code{nil}, this function makes the window
2070 @var{size} columns wider, stealing columns instead of lines. If a
2071 window from which columns are stolen shrinks below
2072 @code{window-min-width} columns, that window disappears.
2073
2074 If the requested size would exceed that of the window's frame, then the
2075 function makes the window occupy the entire height (or width) of the
2076 frame.
2077
2078 If there are various other windows from which lines or columns can be
2079 stolen, and some of them specify fixed size (using
2080 @code{window-size-fixed}, see below), they are left untouched while
2081 other windows are ``robbed.'' If it would be necessary to alter the
2082 size of a fixed-size window, @code{enlarge-window} gets an error
2083 instead.
2084
2085 If @var{size} is negative, this function shrinks the window by
2086 @minus{}@var{size} lines or columns. If that makes the window smaller
2087 than the minimum size (@code{window-min-height} and
2088 @code{window-min-width}), @code{enlarge-window} deletes the window.
2089
2090 @code{enlarge-window} returns @code{nil}.
2091 @end deffn
2092
2093 @deffn Command enlarge-window-horizontally columns
2094 This function makes the selected window @var{columns} wider.
2095 It could be defined as follows:
2096
2097 @example
2098 @group
2099 (defun enlarge-window-horizontally (columns)
2100 (interactive "p")
2101 (enlarge-window columns t))
2102 @end group
2103 @end example
2104 @end deffn
2105
2106 @deffn Command shrink-window size &optional horizontal
2107 This function is like @code{enlarge-window} but negates the argument
2108 @var{size}, making the selected window smaller by giving lines (or
2109 columns) to the other windows. If the window shrinks below
2110 @code{window-min-height} or @code{window-min-width}, then it disappears.
2111
2112 If @var{size} is negative, the window is enlarged by @minus{}@var{size}
2113 lines or columns.
2114 @end deffn
2115
2116 @deffn Command shrink-window-horizontally columns
2117 This function makes the selected window @var{columns} narrower.
2118 It could be defined as follows:
2119
2120 @example
2121 @group
2122 (defun shrink-window-horizontally (columns)
2123 (interactive "p")
2124 (shrink-window columns t))
2125 @end group
2126 @end example
2127 @end deffn
2128
2129 @defun adjust-window-trailing-edge window delta horizontal
2130 This function makes the selected window @var{delta} lines taller or
2131 @var{delta} columns wider, by moving the bottom or right edge. This
2132 function does not delete other windows; if it cannot make the
2133 requested size adjustment, it signals an error. On success, this
2134 function returns @code{nil}.
2135 @end defun
2136
2137 @defun fit-window-to-buffer &optional window max-height min-height
2138 This function makes @var{window} the right height to display its
2139 contents exactly. If @var{window} is omitted or @code{nil}, it uses
2140 the selected window.
2141
2142 The argument @var{max-height} specifies the maximum height the window
2143 is allowed to be; @code{nil} means use the frame height. The argument
2144 @var{min-height} specifies the minimum height for the window;
2145 @code{nil} means use @code{window-min-height}. All these height
2146 values include the mode-line and/or header-line.
2147 @end defun
2148
2149 @deffn Command shrink-window-if-larger-than-buffer &optional window
2150 This command shrinks @var{window} vertically to be as small as
2151 possible while still showing the full contents of its buffer---but not
2152 less than @code{window-min-height} lines. If @var{window} is not
2153 given, it defaults to the selected window.
2154
2155 However, the command does nothing if the window is already too small to
2156 display the whole text of the buffer, or if part of the contents are
2157 currently scrolled off screen, or if the window is not the full width of
2158 its frame, or if the window is the only window in its frame.
2159
2160 This command returns non-@code{nil} if it actually shrank the window
2161 and @code{nil} otherwise.
2162 @end deffn
2163
2164 @defvar window-size-fixed
2165 If this variable is non-@code{nil}, in any given buffer,
2166 then the size of any window displaying the buffer remains fixed
2167 unless you explicitly change it or Emacs has no other choice.
2168
2169 If the value is @code{height}, then only the window's height is fixed;
2170 if the value is @code{width}, then only the window's width is fixed.
2171 Any other non-@code{nil} value fixes both the width and the height.
2172
2173 This variable automatically becomes buffer-local when set.
2174
2175 Explicit size-change functions such as @code{enlarge-window}
2176 get an error if they would have to change a window size which is fixed.
2177 Therefore, when you want to change the size of such a window,
2178 you should bind @code{window-size-fixed} to @code{nil}, like this:
2179
2180 @example
2181 (let ((window-size-fixed nil))
2182 (enlarge-window 10))
2183 @end example
2184
2185 Note that changing the frame size will change the size of a
2186 fixed-size window, if there is no other alternative.
2187 @end defvar
2188
2189 @cindex minimum window size
2190 The following two variables constrain the window-structure-changing
2191 functions to a minimum height and width.
2192
2193 @defopt window-min-height
2194 The value of this variable controls how short a window may become
2195 before it is automatically deleted. Making a window smaller than
2196 @code{window-min-height} automatically deletes it, and no window may be
2197 created shorter than this. The value is measured in line units. When
2198 the window wants a mode- and/or header-line, they are counted as one
2199 line each. The default value of this variable is 4. A value less than
2200 1 is ignored.
2201 @end defopt
2202
2203 @defopt window-min-width
2204 The value of this variable controls how narrow a window may become
2205 before it is automatically deleted. Making a window smaller than
2206 @code{window-min-width} automatically deletes it, and no window may be
2207 created narrower than this. The value is measured in characters and
2208 includes any fringes or the scroll bar. The default value is 10. A
2209 value less than 2 is ignored.
2210 @end defopt
2211
2212 @node Coordinates and Windows
2213 @section Coordinates and Windows
2214
2215 This section describes how to relate screen coordinates to windows.
2216
2217 @defun window-at x y &optional frame
2218 This function returns the window containing the specified cursor
2219 position in the frame @var{frame}. The coordinates @var{x} and @var{y}
2220 are measured in characters and count from the top left corner of the
2221 frame. If they are out of range, @code{window-at} returns @code{nil}.
2222
2223 If you omit @var{frame}, the selected frame is used.
2224 @end defun
2225
2226 @defun coordinates-in-window-p coordinates window
2227 This function checks whether a particular frame position falls within
2228 the window @var{window}.
2229
2230 The argument @var{coordinates} is a cons cell of the form @code{(@var{x}
2231 . @var{y})}. The coordinates @var{x} and @var{y} are measured in
2232 characters, and count from the top left corner of the screen or frame.
2233
2234 The value returned by @code{coordinates-in-window-p} is non-@code{nil}
2235 if the coordinates are inside @var{window}. The value also indicates
2236 what part of the window the position is in, as follows:
2237
2238 @table @code
2239 @item (@var{relx} . @var{rely})
2240 The coordinates are inside @var{window}. The numbers @var{relx} and
2241 @var{rely} are the equivalent window-relative coordinates for the
2242 specified position, counting from 0 at the top left corner of the
2243 window.
2244
2245 @item mode-line
2246 The coordinates are in the mode line of @var{window}.
2247
2248 @item header-line
2249 The coordinates are in the header line of @var{window}.
2250
2251 @item vertical-line
2252 The coordinates are in the vertical line between @var{window} and its
2253 neighbor to the right. This value occurs only if the window doesn't
2254 have a scroll bar; positions in a scroll bar are considered outside the
2255 window for these purposes.
2256
2257 @item left-fringe
2258 @itemx right-fringe
2259 The coordinates are in the left or right fringe of the window.
2260
2261 @item left-margin
2262 @itemx right-margin
2263 The coordinates are in the left or right margin of the window.
2264
2265 @item nil
2266 The coordinates are not in any part of @var{window}.
2267 @end table
2268
2269 The function @code{coordinates-in-window-p} does not require a frame as
2270 argument because it always uses the frame that @var{window} is on.
2271 @end defun
2272
2273 @node Window Tree
2274 @section The Window Tree
2275 @cindex window tree
2276
2277 A @dfn{window tree} specifies the layout, size, and relationship
2278 between all windows in one frame.
2279
2280 @defun window-tree &optional frame
2281 This function returns the window tree for frame @var{frame}.
2282 If @var{frame} is omitted, the selected frame is used.
2283
2284 The return value is a list of the form @code{(@var{root} @var{mini})},
2285 where @var{root} represents the window tree of the frame's
2286 root window, and @var{mini} is the frame's minibuffer window.
2287
2288 If the root window is not split, @var{root} is the root window itself.
2289 Otherwise, @var{root} is a list @code{(@var{dir} @var{edges} @var{w1}
2290 @var{w2} ...)} where @var{dir} is @code{nil} for a horizontal split,
2291 and @code{t} for a vertical split, @var{edges} gives the combined size and
2292 position of the subwindows in the split, and the rest of the elements
2293 are the subwindows in the split. Each of the subwindows may again be
2294 a window or a list representing a window split, and so on. The
2295 @var{edges} element is a list @code{(@var{left}@var{ top}@var{ right}@var{ bottom})}
2296 similar to the value returned by @code{window-edges}.
2297 @end defun
2298
2299 @node Window Configurations
2300 @section Window Configurations
2301 @cindex window configurations
2302 @cindex saving window information
2303
2304 A @dfn{window configuration} records the entire layout of one
2305 frame---all windows, their sizes, which buffers they contain, how
2306 those buffers are scrolled, and their values of point and the mark;
2307 also their fringes, margins, and scroll bar settings. It also
2308 includes the values of @code{window-min-height},
2309 @code{window-min-width} and @code{minibuffer-scroll-window}. As a
2310 special exception, the window configuration does not record the value
2311 of point in the selected window for the current buffer.
2312
2313 You can bring back an entire previous layout by restoring a window
2314 configuration previously saved. If you want to record all frames
2315 instead of just one, use a frame configuration instead of a window
2316 configuration. @xref{Frame Configurations}.
2317
2318 @defun current-window-configuration &optional frame
2319 This function returns a new object representing @var{frame}'s current
2320 window configuration. If @var{frame} is omitted, the selected frame
2321 is used.
2322 @end defun
2323
2324 @defun set-window-configuration configuration
2325 This function restores the configuration of windows and buffers as
2326 specified by @var{configuration}, for the frame that @var{configuration}
2327 was created for.
2328
2329 The argument @var{configuration} must be a value that was previously
2330 returned by @code{current-window-configuration}. This configuration is
2331 restored in the frame from which @var{configuration} was made, whether
2332 that frame is selected or not. This always counts as a window size
2333 change and triggers execution of the @code{window-size-change-functions}
2334 (@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
2335 know how to tell whether the new configuration actually differs from the
2336 old one.
2337
2338 If the frame which @var{configuration} was saved from is dead, all this
2339 function does is restore the three variables @code{window-min-height},
2340 @code{window-min-width} and @code{minibuffer-scroll-window}. In this
2341 case, the function returns @code{nil}. Otherwise, it returns @code{t}.
2342
2343 Here is a way of using this function to get the same effect
2344 as @code{save-window-excursion}:
2345
2346 @example
2347 @group
2348 (let ((config (current-window-configuration)))
2349 (unwind-protect
2350 (progn (split-window-vertically nil)
2351 @dots{})
2352 (set-window-configuration config)))
2353 @end group
2354 @end example
2355 @end defun
2356
2357 @defspec save-window-excursion forms@dots{}
2358 This special form records the window configuration, executes @var{forms}
2359 in sequence, then restores the earlier window configuration. The window
2360 configuration includes, for each window, the value of point and the
2361 portion of the buffer that is visible. It also includes the choice of
2362 selected window. However, it does not include the value of point in
2363 the current buffer; use @code{save-excursion} also, if you wish to
2364 preserve that.
2365
2366 Don't use this construct when @code{save-selected-window} is sufficient.
2367
2368 Exit from @code{save-window-excursion} always triggers execution of the
2369 @code{window-size-change-functions}. (It doesn't know how to tell
2370 whether the restored configuration actually differs from the one in
2371 effect at the end of the @var{forms}.)
2372
2373 The return value is the value of the final form in @var{forms}.
2374 For example:
2375
2376 @example
2377 @group
2378 (split-window)
2379 @result{} #<window 25 on control.texi>
2380 @end group
2381 @group
2382 (setq w (selected-window))
2383 @result{} #<window 19 on control.texi>
2384 @end group
2385 @group
2386 (save-window-excursion
2387 (delete-other-windows w)
2388 (switch-to-buffer "foo")
2389 'do-something)
2390 @result{} do-something
2391 ;; @r{The screen is now split again.}
2392 @end group
2393 @end example
2394 @end defspec
2395
2396 @defun window-configuration-p object
2397 This function returns @code{t} if @var{object} is a window configuration.
2398 @end defun
2399
2400 @defun compare-window-configurations config1 config2
2401 This function compares two window configurations as regards the
2402 structure of windows, but ignores the values of point and mark and the
2403 saved scrolling positions---it can return @code{t} even if those
2404 aspects differ.
2405
2406 The function @code{equal} can also compare two window configurations; it
2407 regards configurations as unequal if they differ in any respect, even a
2408 saved point or mark.
2409 @end defun
2410
2411 @defun window-configuration-frame config
2412 This function returns the frame for which the window configuration
2413 @var{config} was made.
2414 @end defun
2415
2416 Other primitives to look inside of window configurations would make
2417 sense, but are not implemented because we did not need them. See the
2418 file @file{winner.el} for some more operations on windows
2419 configurations.
2420
2421 @node Window Hooks
2422 @section Hooks for Window Scrolling and Changes
2423 @cindex hooks for window operations
2424
2425 This section describes how a Lisp program can take action whenever a
2426 window displays a different part of its buffer or a different buffer.
2427 There are three actions that can change this: scrolling the window,
2428 switching buffers in the window, and changing the size of the window.
2429 The first two actions run @code{window-scroll-functions}; the last runs
2430 @code{window-size-change-functions}.
2431
2432 @defvar window-scroll-functions
2433 This variable holds a list of functions that Emacs should call before
2434 redisplaying a window with scrolling. It is not a normal hook, because
2435 each function is called with two arguments: the window, and its new
2436 display-start position.
2437
2438 Displaying a different buffer in the window also runs these functions.
2439
2440 These functions must be careful in using @code{window-end}
2441 (@pxref{Window Start}); if you need an up-to-date value, you must use
2442 the @var{update} argument to ensure you get it.
2443
2444 @strong{Warning:} don't use this feature to alter the way the window
2445 is scrolled. It's not designed for that, and such use probably won't
2446 work.
2447 @end defvar
2448
2449 @defvar window-size-change-functions
2450 This variable holds a list of functions to be called if the size of any
2451 window changes for any reason. The functions are called just once per
2452 redisplay, and just once for each frame on which size changes have
2453 occurred.
2454
2455 Each function receives the frame as its sole argument. There is no
2456 direct way to find out which windows on that frame have changed size, or
2457 precisely how. However, if a size-change function records, at each
2458 call, the existing windows and their sizes, it can also compare the
2459 present sizes and the previous sizes.
2460
2461 Creating or deleting windows counts as a size change, and therefore
2462 causes these functions to be called. Changing the frame size also
2463 counts, because it changes the sizes of the existing windows.
2464
2465 It is not a good idea to use @code{save-window-excursion} (@pxref{Window
2466 Configurations}) in these functions, because that always counts as a
2467 size change, and it would cause these functions to be called over and
2468 over. In most cases, @code{save-selected-window} (@pxref{Selecting
2469 Windows}) is what you need here.
2470 @end defvar
2471
2472 @defvar redisplay-end-trigger-functions
2473 This abnormal hook is run whenever redisplay in a window uses text that
2474 extends past a specified end trigger position. You set the end trigger
2475 position with the function @code{set-window-redisplay-end-trigger}. The
2476 functions are called with two arguments: the window, and the end trigger
2477 position. Storing @code{nil} for the end trigger position turns off the
2478 feature, and the trigger value is automatically reset to @code{nil} just
2479 after the hook is run.
2480 @end defvar
2481
2482 @defun set-window-redisplay-end-trigger window position
2483 This function sets @var{window}'s end trigger position at
2484 @var{position}.
2485 @end defun
2486
2487 @defun window-redisplay-end-trigger &optional window
2488 This function returns @var{window}'s current end trigger position.
2489 If @var{window} is @code{nil} or omitted, it uses the selected window.
2490 @end defun
2491
2492 @defvar window-configuration-change-hook
2493 A normal hook that is run every time you change the window configuration
2494 of an existing frame. This includes splitting or deleting windows,
2495 changing the sizes of windows, or displaying a different buffer in a
2496 window. The frame whose window configuration has changed is the
2497 selected frame when this hook runs.
2498 @end defvar
2499
2500 @ignore
2501 arch-tag: 3f6c36e8-df49-4986-b757-417feed88be3
2502 @end ignore