* doc/lispref/windows.texi (Splitting Windows): Simplify example.
[bpt/emacs.git] / doc / lispref / windows.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990-1995, 1998-1999, 2001-2011
4 @c Free Software Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @setfilename ../../info/windows
7 @node Windows, Frames, Buffers, Top
8 @chapter Windows
9
10 This chapter describes the functions and variables related to Emacs
11 windows. @xref{Frames}, for how windows are assigned an area of screen
12 available for Emacs to use. @xref{Display}, for information on how text
13 is displayed in windows.
14
15 @menu
16 * Basic Windows:: Basic information on using windows.
17 * Windows and Frames:: Relating windows to the frame they appear on.
18 * Window Sizes:: Accessing a window's size.
19 * Resizing Windows:: Changing the sizes of windows.
20 * Splitting Windows:: Splitting one window into two windows.
21 * Deleting Windows:: Deleting a window gives its space to other windows.
22 * Selecting Windows:: The selected window is the one that you edit in.
23 * Cyclic Window Ordering:: Moving around the existing windows.
24 * Buffers and Windows:: Each window displays the contents of a buffer.
25 * Switching Buffers:: Higher-level functions for switching to a buffer.
26 * Choosing Window:: How to choose a window for displaying a buffer.
27 * Display Action Functions:: Subroutines for @code{display-buffer}.
28 * Choosing Window Options:: Extra options affecting how buffers are displayed.
29 * Window History:: Each window remembers the buffers displayed in it.
30 * Dedicated Windows:: How to avoid displaying another buffer in
31 a specific window.
32 * Quitting Windows:: How to restore the state prior to displaying a
33 buffer.
34 * Window Point:: Each window has its own location of point.
35 * Window Start and End:: Buffer positions indicating which text is
36 on-screen in a window.
37 * Textual Scrolling:: Moving text up and down through the window.
38 * Vertical Scrolling:: Moving the contents up and down on the window.
39 * Horizontal Scrolling:: Moving the contents sideways on the window.
40 * Coordinates and Windows:: Converting coordinates to windows.
41 * Window Configurations:: Saving and restoring the state of the screen.
42 * Window Parameters:: Associating additional information with windows.
43 * Window Hooks:: Hooks for scrolling, window size changes,
44 redisplay going past a certain point,
45 or window configuration changes.
46 @end menu
47
48
49 @node Basic Windows
50 @section Basic Concepts of Emacs Windows
51 @cindex window
52
53 A @dfn{window} is a area of the screen which is used to display a
54 buffer (@pxref{Buffers}). In Emacs Lisp, windows are represented by a
55 special Lisp object type.
56
57 @cindex multiple windows
58 Windows are grouped into frames (@pxref{Frames}). Each frame
59 contains at least one window; the user can subdivide it into multiple,
60 non-overlapping windows to view several buffers at once. Lisp
61 programs can use multiple windows for a variety of purposes. In
62 Rmail, for example, you can view a summary of message titles in one
63 window, and the contents of the selected message in another window.
64
65 @cindex terminal screen
66 @cindex screen of terminal
67 Emacs uses the word ``window'' with a different meaning than in
68 graphical desktop environments and window systems, such as the X
69 Window System. When Emacs is run on X, each of its graphical X
70 windows is an Emacs frame (containing one or more Emacs windows).
71 When Emacs is run on a text-only terminal, the frame fills the entire
72 terminal screen.
73
74 @cindex tiled windows
75 Unlike X windows, Emacs windows are @dfn{tiled}; they never overlap
76 within the area of the frame. When a window is created, resized, or
77 deleted, the change in window space is taken from or given to the
78 adjacent windows, so that the total area of the frame is unchanged.
79
80 @cindex live windows
81 @cindex internal windows
82 A @dfn{live window} is one that is actually displaying a buffer in a
83 frame. Such a window can be @dfn{deleted}, i.e. removed from the
84 frame (@pxref{Deleting Windows}); then it is no longer live, but the
85 Lisp object representing it might be still referenced from other Lisp
86 objects. A deleted window may be brought back to life by restoring a
87 saved window configuration (@pxref{Window Configurations}).
88
89 @defun windowp object
90 This function returns @code{t} if @var{object} is a window (whether or
91 not it is live). Otherwise, it returns @code{nil}.
92 @end defun
93
94 @defun window-live-p object
95 This function returns @code{t} if @var{object} is a live window and
96 @code{nil} otherwise. A live window is one that displays a buffer.
97 @end defun
98
99 The windows in each frame are organized into a @dfn{window tree}.
100 @xref{Windows and Frames}. The leaf nodes of each window tree are
101 live windows---the ones actually displaying buffers. The internal
102 nodes of the window tree are internal windows, which are not live.
103 You can distinguish internal windows from deleted windows with
104 @code{window-valid-p}.
105
106 @defun window-valid-p object
107 This function returns @code{t} if @var{object} is a live window, or an
108 internal window in a window tree. Otherwise, it returns @code{nil},
109 including for the case where @var{object} is a deleted window.
110 @end defun
111
112 @cindex selected window
113 In each frame, at any time, exactly one Emacs window is designated
114 as @dfn{selected within the frame}. For the selected frame, that
115 window is called the @dfn{selected window}---the one in which most
116 editing takes place, and in which the cursor for selected windows
117 appears (@pxref{Cursor Parameters}). The selected window's buffer is
118 usually also the current buffer, except when @code{set-buffer} has
119 been used (@pxref{Current Buffer}). As for non-selected frames, the
120 window selected within the frame becomes the selected window if the
121 frame is ever selected. @xref{Selecting Windows}.
122
123 @defun selected-window
124 This function returns the selected window (which is always a live
125 window).
126 @end defun
127
128 @node Windows and Frames
129 @section Windows and Frames
130
131 Each window belongs to exactly one frame (@pxref{Frames}).
132
133 @defun window-frame window
134 This function returns the frame that the window @var{window} belongs
135 to. If @var{window} is @code{nil}, it defaults to the selected
136 window.
137 @end defun
138
139 @defun window-list &optional frame minibuffer window
140 This function returns a list of live windows belonging to the frame
141 @var{frame}. If @var{frame} is omitted or @code{nil}, it defaults to
142 the selected frame.
143
144 The optional argument @var{minibuffer} specifies whether to include
145 the minibuffer window in the returned list. If @var{minibuffer} is
146 @code{t}, the minibuffer window is included. If @var{minibuffer} is
147 @code{nil} or omitted, the minibuffer window is included only if it is
148 active. If @var{minibuffer} is neither @code{nil} nor @code{t}, the
149 minibuffer window is never included.
150
151 The optional argument @var{window}, if non-@code{nil}, should be a
152 live window on the specified frame; then @var{window} will be the
153 first element in the returned list. If @var{window} is omitted or
154 @code{nil}, the window selected within the frame is first element.
155 @end defun
156
157 @cindex window tree
158 @cindex root window
159 Windows in the same frame are organized into a @dfn{window tree},
160 whose leaf nodes are the live windows. The internal nodes of a window
161 tree are not live; they exist for the purpose of organizing the
162 relationships between live windows. The root node of a window tree is
163 called the @dfn{root window}. It can be either a live window (if the
164 frame has just one window), or an internal window.
165
166 A minibuffer window (@pxref{Minibuffer Windows}) is not part of its
167 frame's window tree unless the frame is a minibuffer-only frame.
168 Nonetheless, most of the functions in this section accept the
169 minibuffer window as an argument. Also, the function
170 @code{window-tree} described at the end of this section lists the
171 minibuffer window alongside the actual window tree.
172
173 @defun frame-root-window &optional frame-or-window
174 This function returns the root window for @var{frame-or-window}. The
175 argument @var{frame-or-window} should be either a window or a frame;
176 if omitted or @code{nil}, it defaults to the selected frame. If
177 @var{frame-or-window} is a window, the return value is the root window
178 of that window's frame.
179 @end defun
180
181 @cindex parent window
182 @cindex child window
183 @cindex sibling window
184 When a window is split, there are two live windows where previously
185 there was one. One of these is represented by the same Lisp window
186 object as the original window, and the other is represented by a
187 newly-created Lisp window object. Both of these live windows become
188 leaf nodes of the window tree, as @dfn{child windows} of a single
189 internal window. If necessary, Emacs automatically creates this
190 internal window, which is also called the @dfn{parent window}, and
191 assigns it to the appropriate position in the window tree. A set of
192 windows that share the same parent are called @dfn{siblings}.
193
194 @cindex parent window
195 @defun window-parent &optional window
196 This function returns the parent window of @var{window}. If
197 @var{window} is omitted or @code{nil}, it defaults to the selected
198 window. The return value is @code{nil} if @var{window} has no parent
199 (i.e. it is a minibuffer window or the root window of its frame).
200 @end defun
201
202 Each internal window always has at least two child windows. If this
203 number falls to one as a result of window deletion, Emacs
204 automatically deletes the internal window, and its sole remaining
205 child window takes its place in the window tree.
206
207 Each child window can be either a live window, or an internal window
208 (which in turn would have its own child windows). Therefore, each
209 internal window can be thought of as occupying a certain rectangular
210 @dfn{screen area}---the union of the areas occupied by the live
211 windows that are ultimately descended from it.
212
213 @cindex window combination
214 @cindex vertical combination
215 @cindex horizontal combination
216 For each internal window, the screen areas of the immediate children
217 are arranged either vertically or horizontally (never both). If the
218 child windows are arranged one above the other, they are said to form
219 a @dfn{vertical combination}; if they are arranged side by side, they
220 are said to form a @dfn{horizontal combination}. Consider the
221 following example:
222
223 @smallexample
224 @group
225 ______________________________________
226 | ______ ____________________________ |
227 || || __________________________ ||
228 || ||| |||
229 || ||| |||
230 || ||| |||
231 || |||____________W4____________|||
232 || || __________________________ ||
233 || ||| |||
234 || ||| |||
235 || |||____________W5____________|||
236 ||__W2__||_____________W3_____________ |
237 |__________________W1__________________|
238
239 @end group
240 @end smallexample
241
242 @noindent
243 The root window of this frame is an internal window, @code{W1}. Its
244 child windows form a horizontal combination, consisting of the live
245 window @code{W2} and the internal window @code{W3}. The child windows
246 of @code{W3} form a vertical combination, consisting of the live
247 windows @code{W4} and @code{W5}. Hence, the live windows in this
248 window tree are @code{W2} @code{W4}, and @code{W5}.
249
250 The following functions can be used to retrieve a child window of an
251 internal window, and the siblings of a child window.
252
253 @defun window-top-child window
254 This function returns the topmost child window of @var{window}, if
255 @var{window} is an internal window whose children form a vertical
256 combination. For any other type of window, the return value is
257 @code{nil}.
258 @end defun
259
260 @defun window-left-child window
261 This function returns the leftmost child window of @var{window}, if
262 @var{window} is an internal window whose children form a horizontal
263 combination. For any other type of window, the return value is
264 @code{nil}.
265 @end defun
266
267 @defun window-child window
268 This function returns the first child window of the internal window
269 @var{window}---the topmost child window for a vertical combination, or
270 the leftmost child window for a horizontal combination. If
271 @var{window} is a live window, the return value is @code{nil}.
272 @end defun
273
274 @defun window-combined-p &optional window horizontal
275 This function returns a non-@code{nil} value if and only if
276 @var{window} is part of a vertical combination. If @var{window} is
277 omitted or @code{nil}, it defaults to the selected one.
278
279 If the optional argument @var{horizontal} is non-@code{nil}, this
280 means to return non-@code{nil} if and only if @var{window} is part of
281 a horizontal combination.
282 @end defun
283
284 @defun window-next-sibling &optional window
285 This function returns the next sibling of the window @var{window}. If
286 omitted or @code{nil}, @var{window} defaults to the selected window.
287 The return value is @code{nil} if @var{window} is the last child of
288 its parent.
289 @end defun
290
291 @defun window-prev-sibling &optional window
292 This function returns the previous sibling of the window @var{window}.
293 If omitted or @code{nil}, @var{window} defaults to the selected
294 window. The return value is @code{nil} if @var{window} is the first
295 child of its parent.
296 @end defun
297
298 The functions @code{window-next-sibling} and
299 @code{window-prev-sibling} should not be confused with the functions
300 @code{next-window} and @code{previous-window} which respectively
301 return the next and previous window in the cyclic ordering of windows
302 (@pxref{Cyclic Window Ordering}).
303
304 You can use the following functions to find the first live window on
305 a frame, and to retrieve the entire window tree of a frame:
306
307 @defun frame-first-window &optional frame-or-window
308 This function returns the live window at the upper left corner of the
309 frame specified by @var{frame-or-window}. The argument
310 @var{frame-or-window} must denote a window or a live frame and defaults
311 to the selected frame. If @var{frame-or-window} specifies a window,
312 this function returns the first window on that window's frame. Under
313 the assumption that the frame from our canonical example is selected
314 @code{(frame-first-window)} returns @code{W2}.
315 @end defun
316
317 @defun window-tree &optional frame
318 This function returns a list representing the window tree for frame
319 @var{frame}. If @var{frame} is omitted or @code{nil}, it defaults to
320 the selected frame.
321
322 The return value is a list of the form @code{(@var{root} @var{mini})},
323 where @var{root} represents the window tree of the frame's root
324 window, and @var{mini} is the frame's minibuffer window.
325
326 If the root window is live, @var{root} is that window itself.
327 Otherwise, @var{root} is a list @code{(@var{dir} @var{edges} @var{w1}
328 @var{w2} ...)} where @var{dir} is @code{nil} for a horizontal
329 combination and @code{t} for a vertical combination, @var{edges} gives
330 the size and position of the combination, and the remaining elements
331 are the child windows. Each child window may again be a window object
332 (for a live window) or a list with the same format as above (for an
333 internal window). The @var{edges} element is a list @code{(@var{left}
334 @var{top} @var{right} @var{bottom})}, similar to the value returned by
335 @code{window-edges} (@pxref{Coordinates and Windows}).
336 @end defun
337
338 @node Window Sizes
339 @section Window Sizes
340 @cindex window size
341 @cindex size of window
342
343 The following schematic shows the structure of a live window:
344
345 @smallexample
346 @group
347 _________________________________________
348 ^ |______________ Header Line_______________|
349 | |LS|LF|LM| |RM|RF|RS| ^
350 | | | | | | | | | |
351 Window | | | | Text Area | | | | Window
352 Total | | | | (Window Body) | | | | Body
353 Height | | | | | | | | Height
354 | | | | |<- Window Body Width ->| | | | |
355 | |__|__|__|_______________________|__|__|__| v
356 v |_______________ Mode Line _______________|
357
358 <----------- Window Total Width -------->
359
360 @end group
361 @end smallexample
362
363 @cindex window body
364 @cindex text area of a window
365 @cindex body of a window
366 At the center of the window is the @dfn{text area}, or @dfn{body},
367 where the buffer text is displayed. On each side of the text area is
368 a series of vertical areas; from innermost to outermost, these are the
369 left and right margins, denoted by LM and RM in the schematic
370 (@pxref{Display Margins}); the left and right fringes, denoted by LF
371 and RF (@pxref{Fringes}); and the left or right scroll bar, only one of
372 which is present at any time, denoted by LS and RS (@pxref{Scroll
373 Bars}). At the top of the window is an optional header line
374 (@pxref{Header Lines}), and at the bottom of the window is the mode
375 line (@pxref{Mode Line Format}).
376
377 Emacs provides several functions for finding the height and width of
378 a window. Most of these functions report the values as integer
379 multiples of the default character height and width. On a graphical
380 display, the actual screen size of this default height and width are
381 those specified by the frame's default font. Hence, if the buffer
382 contains text that is displayed in a different size, the reported
383 height and width of the window may differ from the actual number of
384 text lines or columns displayed in it.
385
386 @cindex window height
387 @cindex height of a window
388 @cindex total height of a window
389 @cindex window width
390 @cindex width of a window
391 @cindex total width of a window
392 The @dfn{total height} of a window is the distance between the top
393 and bottom of the window, including the header line (if one exists)
394 and the mode line. The @dfn{total width} of a window is the distance
395 between the left and right edges of the mode line. Note that the
396 height of a frame is not the same as the height of its windows, since
397 a frame may also contain an echo area, menu bar, and tool bar
398 (@pxref{Size and Position}).
399
400 @defun window-total-height &optional window
401 This function returns the total height, in lines, of the window
402 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
403 to the selected window. If @var{window} is an internal window, the
404 return value is the total height occupied by its descendant windows.
405 @end defun
406
407 @defun window-total-width &optional window
408 This function returns the total width, in columns, of the window
409 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
410 to the selected window. If @var{window} is internal, the return value
411 is the total width occupied by its descendant windows.
412 @end defun
413
414 @defun window-total-size &optional window horizontal
415 This function returns either the total height or width of the window
416 @var{window}. If @var{horizontal} is omitted or @code{nil}, this is
417 equivalent to calling @code{window-total-height} for @var{window};
418 otherwise it is equivalent to calling @code{window-total-width} for
419 @var{window}.
420 @end defun
421
422 @cindex full-width window
423 @cindex full-height window
424 The following functions can be used to determine whether a given
425 window has any adjacent windows.
426
427 @defun window-full-height-p &optional window
428 This function returns non-@code{nil} if @var{window} has no other
429 window above or below it in its frame, i.e. its total height equals
430 the total height of the root window on that frame. If @var{window} is
431 omitted or @code{nil}, it defaults to the selected window.
432 @end defun
433
434 @defun window-full-width-p &optional window
435 This function returns non-@code{nil} if @var{window} has no other
436 window to the left or right in its frame, i.e. its total width equals
437 that of the root window on that frame. If @var{window} is omitted or
438 @code{nil}, it defaults to the selected window.
439 @end defun
440
441 @cindex window position
442 The following functions can be used to determine the position of a
443 window relative to the window area of its frame:
444
445 @defun window-top-line &optional window
446 This function returns the distance, in lines, between the top of
447 @var{window} and the top of the frame's window area. For instance,
448 the return value is 0 if there is no window above @var{window}. If
449 @var{window} is omitted or @code{nil}, it defaults to the selected
450 window.
451 @end defun
452
453 @defun window-left-column &optional window
454 This function returns the distance, in columns, between the left edge
455 of @var{window} and the left edge of the frame's window area. For
456 instance, the return value is 0 if there is no window to the left of
457 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
458 to the selected window.
459 @end defun
460
461 @cindex window body height
462 @cindex body height of a window
463 @cindex window body width
464 @cindex body width of a window
465 @cindex body size of a window
466 @cindex window body size
467 The @dfn{body height} of a window is the height of its text area,
468 which does not include the mode or header line. Similarly, the
469 @dfn{body width} is the width of the text area, which does not include
470 the scroll bar, fringes, or margins.
471
472 @defun window-body-height &optional window
473 This function returns the body height, in lines, of the window
474 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
475 to the selected window; otherwise it must be a live window.
476
477 If there is a partially-visible line at the bottom of the text area,
478 that counts as a whole line; to exclude such a partially-visible line,
479 use @code{window-text-height}, below.
480 @end defun
481
482 @defun window-body-width &optional window
483 This function returns the body width, in columns, of the window
484 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
485 to the selected window; otherwise it must be a live window.
486 @end defun
487
488 @defun window-body-size &optional window horizontal
489 This function returns the body height or body width of @var{window}.
490 If @var{horizontal} is omitted or @code{nil}, it is equivalent to
491 calling @code{window-body-height} for @var{window}; otherwise it is
492 equivalent to calling @code{window-body-width}.
493 @end defun
494
495 @defun window-text-height &optional window
496 This function is like @code{window-body-height}, except that any
497 partially-visible line at the bottom of the text area is not counted.
498 @end defun
499
500 For compatibility with previous versions of Emacs,
501 @code{window-height} is an alias for @code{window-body-height}, and
502 @code{window-width} is an alias for @code{window-body-width}. These
503 aliases are considered obsolete and will be removed in the future.
504
505 @cindex fixed-size window
506 Commands that change the size of windows (@pxref{Resizing Windows}),
507 or split them (@pxref{Splitting Windows}), obey the variables
508 @code{window-min-height} and @code{window-min-width}, which specify
509 the smallest allowable window height and width. @xref{Change
510 Window,,Deleting and Rearranging Windows, emacs, The GNU Emacs
511 Manual}. They also obey the variable @code{window-size-fixed}, with
512 which a window can be @dfn{fixed} in size:
513
514 @defvar window-size-fixed
515 If this buffer-local variable is non-@code{nil}, the size of any
516 window displaying the buffer cannot normally be changed. Deleting a
517 window or changing the frame's size may still change its size, if
518 there is no choice.
519
520 If the value is @code{height}, then only the window's height is fixed;
521 if the value is @code{width}, then only the window's width is fixed.
522 Any other non-@code{nil} value fixes both the width and the height.
523 @end defvar
524
525 @defun window-size-fixed-p &optional window horizontal
526 This function returns a non-@code{nil} value if @var{window}'s height
527 is fixed. If @var{window} is omitted or @code{nil}, it defaults to
528 the selected window. If the optional argument @var{horizontal} is
529 non-@code{nil}, the return value is non-@code{nil} if @var{window}'s
530 width is fixed.
531
532 A @code{nil} return value does not necessarily mean that @var{window}
533 can be resized in the desired direction. To determine that, use the
534 function @code{window-resizable}. @xref{Resizing Windows}.
535 @end defun
536
537
538 @node Resizing Windows
539 @section Resizing Windows
540 @cindex window resizing
541 @cindex resize window
542 @cindex changing window size
543 @cindex window size, changing
544
545 This section describes functions for resizing a window without
546 changing the size of its frame. Because live windows do not overlap,
547 these functions are meaningful only on frames that contain two or more
548 windows: resizing a window also changes the size of a neighboring
549 window. If there is just one window on a frame, its size cannot be
550 changed except by resizing the frame (@pxref{Size and Position}).
551
552 Except where noted, these functions also accept internal windows as
553 arguments. Resizing an internal window causes its child windows to be
554 resized to fit the same space.
555
556 @defun window-resizable window delta &optional horizontal ignore side noup nodown
557 This function returns @var{delta} if the size of @var{window} can be
558 changed vertically by @var{delta} lines. If the optional argument
559 @var{horizontal} is non-@code{nil}, it instead returns @var{delta} if
560 @var{window} can be resized horizontally by @var{delta} columns. It
561 does not actually change the window size.
562
563 If @var{window} is @code{nil}, it defaults to the selected window.
564
565 A positive value of @var{delta} enlarges the window by that number of
566 lines or columns; a negative value of @var{delta} shrinks it. If
567 @var{delta} is non-zero, a return value of 0 means that the window
568 cannot be resized.
569
570 Normally, the variables @code{window-min-height} and
571 @code{window-min-width} specify the smallest allowable window size.
572 @xref{Change Window,, Deleting and Rearranging Windows, emacs, The GNU
573 Emacs Manual}. However, if the optional argument @var{ignore} is
574 non-@code{nil}, this function ignores @code{window-min-height} and
575 @code{window-min-width}, as well as @code{window-size-fixed}.
576 Instead, it considers the minimum-height window to be one consisting
577 of a header (if any), a mode line, plus a text area one line tall; and
578 a minimum-width window as one consisting of fringes, margins, and
579 scroll bar (if any), plus a text area two columns wide.
580
581 If the optional argument @var{noup} is non-@code{nil}, this function
582 considers a resize operation that does not alter the window parent of
583 @var{window}, only its siblings. If the optional argument
584 @var{nodown} is non-@code{nil}, it does not attempt to check whether
585 @var{window} itself and its child windows can be resized.
586 @end defun
587
588 @defun window-resize window delta &optional horizontal ignore
589 This function resizes @var{window} by @var{delta} increments. If
590 @var{horizontal} is @code{nil}, it changes the height by @var{delta}
591 lines; otherwise, it changes the width by @var{delta} columns. A
592 positive @var{delta} means to enlarge the window, and a negative
593 @var{delta} means to shrink it.
594
595 If @var{window} is @code{nil}, it defaults to the selected window. If
596 the window cannot be resized as demanded, an error is signaled.
597
598 The optional argument @var{ignore} has the same meaning as for the
599 function @code{window-resizable} above.
600
601 The choice of which window edge this function alters depends on the
602 splitting and nesting status of the involved windows; in some cases,
603 it may alter both edges. @xref{Splitting Windows}. To resize by
604 moving only the bottom or right edge of a window, use the function
605 @code{adjust-window-trailing-edge}, below.
606 @end defun
607
608 @c The commands enlarge-window, enlarge-window-horizontally,
609 @c shrink-window, and shrink-window-horizontally are documented in the
610 @c Emacs manual. They are not preferred for calling from Lisp.
611
612 The following function is useful for moving the line dividing two
613 windows.
614
615 @defun adjust-window-trailing-edge window delta &optional horizontal
616 This function moves @var{window}'s bottom edge by @var{delta} lines.
617 Optional argument @var{horizontal} non-@code{nil} means to move
618 @var{window}'s right edge by @var{delta} columns. The argument
619 @var{window} defaults to the selected window.
620
621 If @var{delta} is greater zero, this moves the edge downwards or to the
622 right. If @var{delta} is less than zero, this moves the edge upwards or
623 to the left. If the edge can't be moved by @var{delta} lines or columns,
624 it is moved as far as possible in the desired direction but no error is
625 signaled.
626
627 This function tries to resize windows adjacent to the edge that is
628 moved. Only if this is insufficient, it will also resize windows not
629 adjacent to that edge. As a consequence, if you move an edge in one
630 direction and back in the other direction by the same amount, the
631 resulting window configuration will not be necessarily identical to the
632 one before the first move. So if your intend to just resize
633 @var{window}, you should not use this function but call
634 @code{window-resize} (see above) instead.
635 @end defun
636
637 @deffn Command fit-window-to-buffer &optional window max-height min-height override
638 This command makes @var{window} the right height to display its
639 contents exactly. The default for @var{window} is the selected window.
640
641 The optional argument @var{max-height} specifies the maximum total
642 height the window is allowed to be; @code{nil} means use the maximum
643 permissible height of a window on @var{window}'s frame. The optional
644 argument @var{min-height} specifies the minimum total height for the
645 window; @code{nil} means use @code{window-min-height}. All these height
646 values include the mode line and/or header line.
647
648 If the optional argument @var{override} is non-@code{nil}, this means to
649 ignore any restrictions imposed by @code{window-min-height} and
650 @code{window-min-width} on the size of @var{window}.
651
652 This function returns non-@code{nil} if it orderly resized @var{window},
653 and @code{nil} otherwise.
654 @end deffn
655
656 @deffn Command shrink-window-if-larger-than-buffer &optional window
657 This command shrinks @var{window} vertically to be as small as possible
658 while still showing the full contents of its buffer---but not less than
659 @code{window-min-height} lines. The argument @var{window} must denote
660 a live window and defaults to the selected one.
661
662 However, this command does nothing if the window is already too small to
663 display the whole text of the buffer, or if part of the contents are
664 currently scrolled off screen, or if the window is not the full width of
665 its frame, or if the window is the only window in its frame.
666
667 This command returns non-@code{nil} if it actually shrank the window
668 and @code{nil} otherwise.
669 @end deffn
670
671 @cindex balancing window sizes
672 Emacs provides two functions to balance windows, that is, to even out
673 the sizes of all windows on the same frame. The minibuffer window and
674 fixed-size windows are not resized by these functions.
675
676 @deffn Command balance-windows &optional window-or-frame
677 This function balances windows in a way that gives more space to
678 full-width and/or full-height windows. If @var{window-or-frame}
679 specifies a frame, it balances all windows on that frame. If
680 @var{window-or-frame} specifies a window, it balances that window and
681 its siblings (@pxref{Windows and Frames}) only.
682 @end deffn
683
684 @deffn Command balance-windows-area
685 This function attempts to give all windows on the selected frame
686 approximately the same share of the screen area. This means that
687 full-width or full-height windows are not given more space than other
688 windows.
689 @end deffn
690
691 @cindex maximizing windows
692 The following function can be used to give a window the maximum possible
693 size without deleting other ones.
694
695 @deffn Command maximize-window &optional window
696 This function maximizes @var{window}. More precisely, this makes
697 @var{window} as large as possible without resizing its frame or deleting
698 other windows. @var{window} can be any window and defaults to the
699 selected one.
700 @end deffn
701
702 @cindex minimizing windows
703 To make a window as small as possible without deleting it the
704 following function can be used.
705
706 @deffn Command minimize-window &optional window
707 This function minimizes @var{window}. More precisely, this makes
708 @var{window} as small as possible without deleting it or resizing its
709 frame. @var{window} can be any window and defaults to the selected one.
710 @end deffn
711
712
713 @node Splitting Windows
714 @section Splitting Windows
715 @cindex splitting windows
716 @cindex window splitting
717
718 This section describes functions for creating a new window by
719 @dfn{splitting} an existing one.
720
721 @deffn Command split-window &optional window size side
722 This function creates a new live window next to the window
723 @var{window}. If @var{window} is omitted or @code{nil}, it defaults
724 to the selected window. That window is ``split'', and reduced in
725 size. The space is taken up by the new window, which is returned.
726
727 The optional second argument @var{size} determines the sizes of the
728 @var{window} and/or the new window. If it is omitted or @code{nil},
729 both windows are given equal sizes; if there is an odd line, it is
730 allocated to the new window. If @var{size} is a positive number,
731 @var{window} is given @var{size} lines (or columns, depending on the
732 value of @var{side}). If @var{size} is a negative number, the new
733 window is given @minus{}@var{size} lines (or columns).
734
735 If @var{size} is @code{nil}, this function obeys the variables
736 @code{window-min-height} and @code{window-min-width}. @xref{Change
737 Window,,Deleting and Rearranging Windows, emacs, The GNU Emacs
738 Manual}. Thus, it signals an error if splitting would result in
739 making a window smaller than those variables specify. However, a
740 non-@code{nil} value for @var{size} causes those variables to be
741 ignored; in that case, the smallest allowable window is considered to
742 be one that has space for a text area one line tall and/or two columns
743 wide.
744
745 The optional third argument @var{side} determines the position of the
746 new window relative to @var{window}. If it is @code{nil} or
747 @code{below}, the new window is placed below @var{window}. If it is
748 @code{above}, the new window is placed above @var{window}. In both
749 these cases, @var{size} specifies a total window height, in lines.
750
751 If @var{side} is @code{t} or @code{right}, the new window is placed on
752 the right of @var{window}. If @var{side} is @code{left}, the new
753 window is placed on the left of @var{window}. In both these cases,
754 @var{size} specifies a total window width, in columns.
755
756 If @var{window} is a live window, the new window inherits various
757 properties from it, including margins and scroll bars. If
758 @var{window} is an internal window, the new window inherits the
759 properties of the window selected within @var{window}'s frame.
760
761 If the variable @code{ignore-window-parameters} is non-@code{nil}
762 (@pxref{Window Parameters}), this function ignores window parameters.
763 Otherwise, it consults the @code{split-window} parameter of
764 @var{window}; if this is @code{t}, it splits the window disregarding
765 any other window parameters. If the @code{split-window} parameter
766 specifies a function, that function is called with the arguments
767 @var{window}, @var{size}, and @var{side} to split @var{window}, in
768 lieu of the usual action of @code{split-window}.
769 @end deffn
770
771 As an example, we show a combination of @code{split-window} calls
772 that yields the window configuration discussed in @ref{Windows and
773 Frames}. This example demonstrates splitting live windows as well as
774 splitting internal windows. We begin with a frame containing a single
775 window (a live root window), which we denote by @var{W4}. Calling
776 @code{(split-window W3)} yields this window configuration:
777
778 @smallexample
779 @group
780 ______________________________________
781 | ____________________________________ |
782 || ||
783 || ||
784 || ||
785 ||_________________W4_________________||
786 | ____________________________________ |
787 || ||
788 || ||
789 || ||
790 ||_________________W5_________________||
791 |__________________W3__________________|
792
793 @end group
794 @end smallexample
795
796 @noindent
797 The @code{split-window} call has created a new live window, denoted by
798 @var{W5}. It has also created a new internal window, denoted by
799 @var{W3}, which becomes the root window and the parent of both
800 @var{W4} and @var{W5}.
801
802 Next, we call @code{(split-window W3 nil 'left)}, passing the
803 internal window @var{W3} as the argument. The result:
804
805 @smallexample
806 @group
807 ______________________________________
808 | ______ ____________________________ |
809 || || __________________________ ||
810 || ||| |||
811 || ||| |||
812 || ||| |||
813 || |||____________W4____________|||
814 || || __________________________ ||
815 || ||| |||
816 || ||| |||
817 || |||____________W5____________|||
818 ||__W2__||_____________W3_____________ |
819 |__________________W1__________________|
820 @end group
821 @end smallexample
822
823 @noindent
824 A new live window, @var{W2}, is created to the left of @var{W3} (which
825 encompasses the vertical window combination of @var{W4} and @var{W5}).
826 A new internal window @var{W1} is also created, and becomes the new
827 root window.
828
829 The following two options can be used to modify the operation of
830 @code{split-window}.
831
832 @defopt window-splits
833 If this variable is @code{nil}, @code{split-window} can only split a
834 window (denoted by @var{window}) if @var{window}'s screen area is
835 large enough to accommodate both itself and the new window. This is
836 the default.
837
838 If this variable is non-@code{nil}, @code{split-window} tries to
839 resize all windows that are part of the same combination as
840 @var{window}, in order to accommodate the new window. In particular,
841 this may allow @code{split-window} to succeed even if @var{window} is
842 a fixed-size window or too small to ordinarily split.
843
844 In any case, the value of this variable is assigned to the splits status
845 of the new window and, provided old and new window form a new
846 combination, of the old window as well. The splits status of a window
847 can be retrieved by invoking the function @code{window-splits} and
848 altered by the function @code{set-window-splits} described next.
849
850 If @code{window-nest} (see below) is non-@code{nil}, the space for the
851 new window is exclusively taken from the old window, but the splits
852 status of the involved windows is nevertheless set as described here.
853 @end defopt
854
855 @defun window-splits &optional window
856 This function returns the splits status of @var{window}. The argument
857 @var{window} can be any window and defaults to the selected one.
858
859 @cindex splits status
860 The @dfn{splits status} of a window specifies how resizing and deleting
861 that window may affect the size of other windows in the same window
862 combination. More precisely, if @var{window}'s splits status is
863 @code{nil} and @var{window} is resized, the corresponding space is
864 preferably taken from (or given to) @var{window}'s right sibling. When
865 @var{window} is deleted, its space is given to its left sibling. If
866 @var{window}'s splits status is non-@code{nil}, resizing and deleting
867 @var{window} may resize @emph{all} windows in @var{window}'s
868 combination.
869
870 The splits status is initially set by @code{split-window}
871 from the current value of the variable @code{window-splits} (see above)
872 and can be reset by the function @code{set-window-splits} (see below).
873 @end defun
874
875 @defun set-window-splits window &optional status
876 This function sets the splits status (see above) of @var{window} to
877 @var{status}. The argument @var{window} can be any window and defaults
878 to the selected one. The return value is @var{status}.
879 @end defun
880
881 To illustrate the use of @code{window-splits} consider the following
882 window configuration:
883 @smallexample
884 @group
885 ______________________________________
886 | ____________________________________ |
887 || ||
888 || ||
889 || ||
890 || ||
891 ||_________________W2_________________||
892 | ____________________________________ |
893 || ||
894 || ||
895 || ||
896 || ||
897 ||_________________W3_________________||
898 |__________________W1__________________|
899
900 @end group
901 @end smallexample
902
903 Splitting window @code{W3} with @code{window-splits} @code{nil}
904 produces a configuration where the size of @code{W2} remains unchanged:
905 @smallexample
906 @group
907 ______________________________________
908 | ____________________________________ |
909 || ||
910 || ||
911 || ||
912 || ||
913 ||_________________W2_________________||
914 | ____________________________________ |
915 || ||
916 ||_________________W3_________________||
917 | ____________________________________ |
918 || ||
919 ||_________________W4_________________||
920 |__________________W1__________________|
921
922 @end group
923 @end smallexample
924
925 Splitting @code{W3} with @code{window-splits} non-@code{nil} instead
926 produces a configuration where all windows have approximately the same
927 height:
928
929 @smallexample
930 @group
931 ______________________________________
932 | ____________________________________ |
933 || ||
934 || ||
935 ||_________________W2_________________||
936 | ____________________________________ |
937 || ||
938 || ||
939 ||_________________W3_________________||
940 | ____________________________________ |
941 || ||
942 || ||
943 ||_________________W4_________________||
944 |__________________W1__________________|
945
946 @end group
947 @end smallexample
948
949 @defopt window-nest
950 If this variable is @code{nil}, @code{split-window} creates a new parent
951 window if and only if the old window has no parent window or shall be
952 split orthogonally to the combination it is part of. If this variable
953 is non-@code{nil}, @code{split-window} always creates a new parent
954 window. If this variable is always non-@code{nil}, a frame's window
955 tree is a binary tree so every window but the frame's root window has
956 exactly one sibling.
957
958 The value of this variable is also assigned to the nest status of the
959 new parent window. The nest status of any window can be retrieved via
960 the function @code{window-nest} and altered by the function
961 @code{set-window-nest}, see below.
962 @end defopt
963
964 @defun window-nest &optional window
965 This function returns the nest status of @var{window}. The argument
966 @var{window} can be any window and defaults to the selected one. Note,
967 however, that the nest status is currently meaningful for internal
968 windows only.
969
970 @cindex nest status
971 The @dfn{nest status} of a window specifies whether that window may be
972 removed and its child windows recombined with that window's siblings
973 when such a sibling's child window is deleted. The nest status is
974 initially assigned by @code{split-window} from the current value of the
975 variable @code{window-nest} (see above) and can be reset by the function
976 @code{set-window-nest} (see below).
977
978 If the return value is @code{nil}, child windows of @var{window} may be
979 recombined with @var{window}'s siblings when a window gets deleted. A
980 return value of @code{nil} means that child windows of @var{window} are
981 never (re-)combined with @var{window}'s siblings in such a case.
982 @end defun
983
984 @defun set-window-nest window &optional status
985 This functions sets the nest status (see above) of @var{window} to
986 @var{status}. The argument @var{window} can be any window and defaults
987 to the selected one. Note that setting the nest status is meaningful
988 for internal windows only. The return value is @var{status}.
989 @end defun
990
991 To illustrate the use of @code{window-nest} consider the following
992 configuration (throughout the following examples we shall assume that
993 @code{window-splits} invariantly is @code{nil}).
994 @smallexample
995 @group
996 ______________________________________
997 | ____________________________________ |
998 || ||
999 || ||
1000 || ||
1001 || ||
1002 || ||
1003 || ||
1004 ||_________________W2_________________||
1005 | ____________________________________ |
1006 || ||
1007 || ||
1008 ||_________________W3_________________||
1009 |__________________W1__________________|
1010
1011 @end group
1012 @end smallexample
1013
1014 Splitting @code{W2} into two windows above each other with
1015 @code{window-nest} equal @code{nil} will get you a configuration like:
1016 @smallexample
1017 @group
1018 ______________________________________
1019 | ____________________________________ |
1020 || ||
1021 || ||
1022 ||_________________W2_________________||
1023 | ____________________________________ |
1024 || ||
1025 || ||
1026 ||_________________W4_________________||
1027 | ____________________________________ |
1028 || ||
1029 || ||
1030 ||_________________W3_________________||
1031 |__________________W1__________________|
1032
1033 @end group
1034 @end smallexample
1035
1036 If you now enlarge window @code{W4}, Emacs steals the necessary space
1037 from window @code{W3} resulting in a configuration like:
1038 @smallexample
1039 @group
1040 ______________________________________
1041 | ____________________________________ |
1042 || ||
1043 || ||
1044 ||_________________W2_________________||
1045 | ____________________________________ |
1046 || ||
1047 || ||
1048 || ||
1049 ||_________________W4_________________||
1050 | ____________________________________ |
1051 || ||
1052 ||_________________W3_________________||
1053 |__________________W1__________________|
1054
1055 @end group
1056 @end smallexample
1057
1058 Deleting window @code{W4}, will return its space to @code{W2} as
1059 follows:
1060 @smallexample
1061 @group
1062 ______________________________________
1063 | ____________________________________ |
1064 || ||
1065 || ||
1066 || ||
1067 || ||
1068 || ||
1069 || ||
1070 || ||
1071 ||_________________W2_________________||
1072 | ____________________________________ |
1073 || ||
1074 ||_________________W3_________________||
1075 |__________________W1__________________|
1076
1077 @end group
1078 @end smallexample
1079
1080 Hence, with respect to the initial configuration, window @code{W2} has
1081 grown at the expense of window @code{W3}. If, however, in the initial
1082 configuration you had split @code{W2} with @code{window-nest} bound to
1083 @code{t}, a new internal window @code{W5} would have been created as
1084 depicted below.
1085 @smallexample
1086 @group
1087 ______________________________________
1088 | ____________________________________ |
1089 || __________________________________ ||
1090 ||| |||
1091 |||________________W2________________|||
1092 || __________________________________ ||
1093 ||| |||
1094 |||________________W4________________|||
1095 ||_________________W5_________________||
1096 | ____________________________________ |
1097 || ||
1098 || ||
1099 ||_________________W3_________________||
1100 |__________________W1__________________|
1101
1102 @end group
1103 @end smallexample
1104
1105 Enlarging @code{W4} would now have stolen the necessary space from
1106 @code{W2} instead of @code{W3} as
1107 @smallexample
1108 @group
1109 ______________________________________
1110 | ____________________________________ |
1111 || __________________________________ ||
1112 |||________________W2________________|||
1113 || __________________________________ ||
1114 ||| |||
1115 ||| |||
1116 |||________________W4________________|||
1117 ||_________________W5_________________||
1118 | ____________________________________ |
1119 || ||
1120 || ||
1121 ||_________________W3_________________||
1122 |__________________W1__________________|
1123
1124 @end group
1125 @end smallexample
1126
1127 and the subsequent deletion of @code{W4} would have restored the initial
1128 configuration.
1129
1130 For interactive use, Emacs provides two commands which always split the
1131 selected window.
1132
1133 @deffn Command split-window-below &optional size
1134 This function splits the selected window into two windows, one above the
1135 other, leaving the upper of the two windows selected, with @var{size}
1136 lines. (If @var{size} is negative, then the lower of the two windows
1137 gets @minus{}@var{size} lines and the upper window gets the rest, but
1138 the upper window is still the one selected.) However, if
1139 @code{split-window-keep-point} (see below) is @code{nil}, then either
1140 window can be selected.
1141
1142 In other respects, this function is similar to @code{split-window}.
1143 In particular, the upper window is the original one and the return value
1144 is the new, lower window.
1145 @end deffn
1146
1147 @defopt split-window-keep-point
1148 If this variable is non-@code{nil} (the default), then
1149 @code{split-window-below} behaves as described above.
1150
1151 If it is @code{nil}, then @code{split-window-below} adjusts point
1152 in each of the two windows to avoid scrolling. (This is useful on
1153 slow terminals.) It selects whichever window contains the screen line
1154 that point was previously on. Other functions are not affected by
1155 this variable.
1156 @end defopt
1157
1158 @deffn Command split-window-right &optional size
1159 This function splits the selected window into two windows
1160 side-by-side, leaving the selected window on the left with @var{size}
1161 columns. If @var{size} is negative, the rightmost window gets
1162 @minus{}@var{size} columns, but the leftmost window still remains
1163 selected.
1164 @end deffn
1165
1166
1167 @node Deleting Windows
1168 @section Deleting Windows
1169 @cindex deleting windows
1170
1171 A window remains visible on its frame unless you @dfn{delete} it by
1172 calling certain functions that delete windows. A deleted window cannot
1173 appear on the screen, but continues to exist as a Lisp object until
1174 there are no references to it. There is no way to cancel the deletion
1175 of a window aside from restoring a saved window configuration
1176 (@pxref{Window Configurations}). Restoring a window configuration also
1177 deletes any windows that aren't part of that configuration. Erroneous
1178 information may result from using a deleted window as if it were live.
1179
1180 @deffn Command delete-window &optional window
1181 This function removes @var{window} from display and returns @code{nil}.
1182 The argument @var{window} can denote any window and defaults to the
1183 selected one. An error is signaled if @var{window} is the only window
1184 on its frame. Hence @var{window} must have at least one sibling window
1185 (@pxref{Windows and Frames}) in order to get deleted. If @var{window}
1186 is the selected window on its frame, this function selects the most
1187 recently selected live window on that frame instead.
1188
1189 If the variable @code{ignore-window-parameters} (@pxref{Window
1190 Parameters}) is non-@code{nil}, this function ignores all parameters of
1191 @var{window}. Otherwise, if the @code{delete-window} parameter of
1192 @var{window} is @code{t}, it deletes the window disregarding other
1193 window parameters. If the @code{delete-window} parameter specifies a
1194 function, that function is called with @var{window} as its sole
1195 argument.
1196
1197 If the splits status of @var{window} (@pxref{Splitting Windows}) is
1198 @code{nil}, the space @var{window} took up is given to its left sibling
1199 if such a window exists and to its right sibling otherwise. If the
1200 splits status of @var{window} is non-@code{nil}, its space is
1201 proportionally distributed among the remaining windows in the same
1202 combination.
1203 @end deffn
1204
1205 @deffn Command delete-other-windows &optional window
1206 This function makes @var{window} fill its frame and returns @code{nil}.
1207 The argument @var{window} can denote an arbitrary window and defaults to
1208 the selected one. Upon exit, @var{window} will be the selected window
1209 on its frame.
1210
1211 If the variable @code{ignore-window-parameters} (@pxref{Window
1212 Parameters}) is non-@code{nil}, this function ignores all parameters of
1213 @var{window}. Otherwise, if the @code{delete-other-windows} parameter
1214 of @var{window} equals @code{t}, it deletes all other windows
1215 disregarding any remaining window parameters. If the
1216 @code{delete-other-windows} parameter of @var{window} specifies a
1217 function, it calls that function with @var{window} as its sole argument.
1218 @end deffn
1219
1220 @deffn Command delete-windows-on &optional buffer-or-name frame
1221 This function deletes all windows showing @var{buffer-or-name}. If
1222 there are no windows showing @var{buffer-or-name}, it does nothing.
1223 The optional argument @var{buffer-or-name} may be a buffer or the name
1224 of an existing buffer and defaults to the current buffer. Invoking
1225 this command on a minibuffer signals an error.
1226
1227 The function @code{delete-windows-on} operates by calling
1228 @code{delete-window} for each window showing @var{buffer-or-name}. If a
1229 frame has several windows showing different buffers, then those showing
1230 @var{buffer-or-name} are removed, and the other windows expand to fill
1231 the space.
1232
1233 If all windows in some frame are showing @var{buffer-or-name} (including
1234 the case where there is only one window), then that frame is deleted
1235 provided there are other frames left.
1236
1237 The optional argument @var{frame} specifies which frames to operate on.
1238 This function does not use it in quite the same way as the other
1239 functions which scan all live windows (@pxref{Cyclic Window Ordering});
1240 specifically, the values @code{t} and @code{nil} have the opposite of
1241 their meanings in the other functions. Here are the full details:
1242
1243 @itemize @bullet
1244 @item @code{nil}
1245 means operate on all frames.
1246 @item @code{t}
1247 means operate on the selected frame.
1248 @item @code{visible}
1249 means operate on all visible frames.
1250 @item @code{0}
1251 means operate on all visible or iconified frames.
1252 @item A frame
1253 means operate on that frame.
1254 @end itemize
1255 @end deffn
1256
1257
1258 @node Selecting Windows
1259 @section Selecting Windows
1260 @cindex selecting a window
1261
1262 @defun select-window window &optional norecord
1263 This function makes @var{window} the selected window, see @ref{Basic
1264 Windows}. Unless @var{window} already is the selected window, this also
1265 makes @var{window}'s buffer (@pxref{Buffers and Windows}) the current
1266 buffer. Moreover, the cursor for selected windows will be displayed in
1267 @var{window} after the next redisplay. This function returns
1268 @var{window}.
1269
1270 Normally, @var{window}'s selected buffer is moved to the front of the
1271 buffer list (@pxref{The Buffer List}) and @var{window} becomes the most
1272 recently selected window. But if the optional argument @var{norecord}
1273 is non-@code{nil}, the buffer list remains unchanged and @var{window}
1274 does not become the most recently selected one.
1275 @end defun
1276
1277 @cindex most recently selected windows
1278 The sequence of calls to @code{select-window} with a non-@code{nil}
1279 @var{norecord} argument determines an ordering of windows by their
1280 selection time. The function @code{get-lru-window} can be used to
1281 retrieve the least recently selected live window in this ordering, see
1282 @ref{Cyclic Window Ordering}.
1283
1284 @defmac save-selected-window forms@dots{}
1285 This macro records the selected frame, as well as the selected window
1286 of each frame, executes @var{forms} in sequence, then restores the
1287 earlier selected frame and windows. It also saves and restores the
1288 current buffer. It returns the value of the last form in @var{forms}.
1289
1290 This macro does not save or restore anything about the sizes,
1291 arrangement or contents of windows; therefore, if @var{forms} change
1292 them, the change persists. If the previously selected window of some
1293 frame is no longer live at the time of exit from @var{forms}, that
1294 frame's selected window is left alone. If the previously selected
1295 window is no longer live, then whatever window is selected at the end of
1296 @var{forms} remains selected. The current buffer is restored if and
1297 only if it is still live when exiting @var{forms}.
1298
1299 This macro changes neither the ordering of recently selected windows nor
1300 the buffer list.
1301 @end defmac
1302
1303 @defmac with-selected-window window forms@dots{}
1304 This macro selects @var{window}, executes @var{forms} in sequence, then
1305 restores the previously selected window and current buffer. The ordering
1306 of recently selected windows and the buffer list remain unchanged unless
1307 you deliberately change them within @var{forms}, for example, by calling
1308 @code{select-window} with argument @var{norecord} @code{nil}.
1309
1310 The order of recently selected windows and the buffer list are not
1311 changed by this macro.
1312 @end defmac
1313
1314 @cindex frame selected window
1315 @cindex window selected within frame
1316 Earlier (@pxref{Basic Windows}) we mentioned that at any time, exactly
1317 one window on any frame is selected within the frame. The significance
1318 of this designation is that selecting the frame also selects this
1319 window. Conversely, selecting a window for Emacs with
1320 @code{select-window} also makes that window selected within its frame.
1321
1322 @defun frame-selected-window &optional frame
1323 This function returns the window on @var{frame} that is selected within
1324 @var{frame}. The optional argument @var{frame} must denote a live frame
1325 and defaults to the selected one.
1326 @end defun
1327
1328 @defun set-frame-selected-window frame window &optional norecord
1329 This function sets the selected window of frame @var{frame} to
1330 @var{window}. The argument @var{frame} must denote a live frame and
1331 defaults to the selected one. If @var{frame} is the selected frame,
1332 this also makes @var{window} the selected window. The argument
1333 @var{window} must denote a live window. This function returns
1334 @var{window}.
1335
1336 Optional argument @var{norecord} non-@code{nil} means to neither change
1337 the list of most recently selected windows (@pxref{Selecting Windows})
1338 nor the buffer list (@pxref{The Buffer List}).
1339 @end defun
1340
1341
1342 @node Cyclic Window Ordering
1343 @section Cyclic Ordering of Windows
1344 @cindex cyclic ordering of windows
1345 @cindex ordering of windows, cyclic
1346 @cindex window ordering, cyclic
1347
1348 When you use the command @kbd{C-x o} (@code{other-window}) to select
1349 some other window, it moves through live windows in a specific order.
1350 For any given configuration of windows, this order never varies. It is
1351 called the @dfn{cyclic ordering of windows}.
1352
1353 For a particular frame, this ordering is determined by the window
1354 tree of that frame, see @ref{Windows and Frames}. More precisely, the
1355 ordering is obtained by a depth-first traversal of the frame's window
1356 tree supplemented, if requested, by the frame's minibuffer window.
1357
1358 If there's just one live frame, the cyclic ordering is the ordering
1359 for that frame. Otherwise, the cyclic ordering is obtained by appending
1360 the orderings for individual frames in order of the list of all live
1361 frames, @ref{Finding All Frames}. In any case, the ordering is made
1362 ``cyclic'' by having the last window precede the first window in the
1363 ordering.
1364
1365 @defun next-window &optional window minibuf all-frames
1366 @cindex minibuffer window, and @code{next-window}
1367 This function returns the window following @var{window} in the cyclic
1368 ordering of windows. The argument @var{window} must specify a live
1369 window and defaults to the selected one.
1370
1371 The optional argument @var{minibuf} specifies whether minibuffer windows
1372 shall be included in the cyclic ordering. Normally, when @var{minibuf}
1373 is @code{nil}, a minibuffer window is included only if it is currently
1374 ``active''; this matches the behavior of @kbd{C-x o}. (Note that a
1375 minibuffer window is active as long as its minibuffer is in use; see
1376 @ref{Minibuffers}).
1377
1378 If @var{minibuf} is @code{t}, the cyclic ordering includes all
1379 minibuffer windows. If @var{minibuf} is neither @code{t} nor
1380 @code{nil}, minibuffer windows are not included even if they are active.
1381
1382 The optional argument @var{all-frames} specifies which frames to
1383 consider. Here are the possible values and their meanings:
1384
1385 @itemize @bullet
1386 @item @code{nil}
1387 means consider all windows on @var{window}'s frame, plus the minibuffer
1388 window used by that frame even if it lies in some other frame. If the
1389 minibuffer counts (as determined by @var{minibuf}), then all windows on
1390 all frames that share that minibuffer count too.
1391
1392 @item @code{t}
1393 means consider all windows on all existing frames.
1394
1395 @item @code{visible}
1396 means consider all windows on all visible frames. (To get useful
1397 results, ensure that @var{window} is on a visible frame.)
1398
1399 @item 0
1400 means consider all windows on all visible or iconified frames.
1401
1402 @item A frame
1403 means consider all windows on that frame.
1404
1405 @item Anything else
1406 means consider the windows on @var{window}'s frame, and no others.
1407 @end itemize
1408
1409 This example assumes there are two windows, both displaying the
1410 buffer @samp{windows.texi}:
1411
1412 @example
1413 @group
1414 (selected-window)
1415 @result{} #<window 56 on windows.texi>
1416 @end group
1417 @group
1418 (next-window (selected-window))
1419 @result{} #<window 52 on windows.texi>
1420 @end group
1421 @group
1422 (next-window (next-window (selected-window)))
1423 @result{} #<window 56 on windows.texi>
1424 @end group
1425 @end example
1426 @end defun
1427
1428 @defun previous-window &optional window minibuf all-frames
1429 This function returns the window preceding @var{window} in the cyclic
1430 ordering of windows. The other arguments specify which windows to
1431 consider as in @code{next-window}.
1432 @end defun
1433
1434 @deffn Command other-window count &optional all-frames
1435 This function selects another window in the cyclic ordering of windows.
1436 @var{count} specifies the number of windows to skip in the ordering,
1437 starting with the selected window, before making the selection. If
1438 @var{count} is a positive number, it skips @var{count} windows forwards.
1439 @var{count} negative means skip @minus{}@var{count} windows backwards.
1440 If @var{count} is zero, it does not skip any window, thus re-selecting
1441 the selected window. In an interactive call, @var{count} is the numeric
1442 prefix argument.
1443
1444 The optional argument @var{all-frames} has the same meaning as in
1445 @code{next-window}, but the @var{minibuf} argument of @code{next-window}
1446 is always effectively @code{nil}. This function returns @code{nil}.
1447
1448 This function does not select a window that has a non-@code{nil}
1449 @code{no-other-window} window parameter (@pxref{Window Parameters}).
1450 @end deffn
1451
1452 The following function returns a copy of the list of windows in the
1453 cyclic ordering.
1454
1455 @defun window-list-1 &optional window &optional minibuf &optional all_frames
1456 This function returns a list of live windows. The optional arguments
1457 @var{minibuf} and @var{all-frames} specify the set of windows to include
1458 in the list. See the description of @code{next-window} for details.
1459
1460 The optional argument @var{window} specifies the first window to list
1461 and defaults to the selected window. If @var{window} is not on the list
1462 of windows returned, some other window will be listed first but no error
1463 is signaled.
1464 @end defun
1465
1466 The functions described below use @code{window-list-1} for generating a
1467 copy of the list of all relevant windows. Hence, any change of the
1468 window configuration that occurs while one of these functions is
1469 executed is @emph{not} reflected in the list of windows investigated.
1470
1471 @defun walk-windows proc &optional minibuf all-frames
1472 This function cycles through live windows. It calls the function
1473 @var{proc} once for each window, with the window as its sole argument.
1474
1475 The optional arguments @var{minibuf} and @var{all-frames} specify the
1476 set of windows to include in the walk, see @code{next-window} above. If
1477 @var{all-frames} specifies a frame, the first window walked is the first
1478 window on that frame as returned by @code{frame-first-window} and not
1479 necessarily the selected window.
1480
1481 If @var{proc} changes the window configuration by splitting or deleting
1482 windows, that change is not reflected in the set of windows walked.
1483 That set is determined entirely by the set of live windows at the time
1484 this function was invoked.
1485 @end defun
1486
1487 The following function allows to determine whether a specific window is
1488 the only live window.
1489
1490 @defun one-window-p &optional no-mini all-frames
1491 This function returns non-@code{nil} if the selected window is the only
1492 window.
1493
1494 The optional argument @var{no-mini}, if non-@code{nil}, means don't
1495 count the minibuffer even if it is active; otherwise, the minibuffer
1496 window is counted when it is active. The optional argument
1497 @var{all-frames} has the same meaning as for @code{next-window}, see
1498 above.
1499 @end defun
1500
1501 @cindex finding windows
1502 The following functions choose (but do not select) one of the windows
1503 on the screen, offering various criteria for the choice.
1504
1505 @cindex least recently used window
1506 @defun get-lru-window &optional all-frames dedicated
1507 This function returns the window least recently ``used'' (that is,
1508 selected). If any full-width windows are present, it only considers
1509 these. The optional argument @var{all-frames} has the same meaning as
1510 in @code{next-window}.
1511
1512 The selected window is returned if it is the only candidate. A
1513 minibuffer window is never a candidate. A dedicated window
1514 (@pxref{Dedicated Windows}) is never a candidate unless the optional
1515 argument @var{dedicated} is non-@code{nil}.
1516 @end defun
1517
1518 @cindex largest window
1519 @defun get-largest-window &optional all-frames dedicated
1520 This function returns the window with the largest area (height times
1521 width). A minibuffer window is never a candidate. A dedicated window
1522 (@pxref{Dedicated Windows}) is never a candidate unless the optional
1523 argument @var{dedicated} is non-@code{nil}.
1524
1525 If there are two candidate windows of the same size, this function
1526 prefers the one that comes first in the cyclic ordering of windows,
1527 starting from the selected window.
1528
1529 The optional argument @var{all-frames} specifies which set of windows to
1530 consider as with @code{next-window}, see above.
1531 @end defun
1532
1533 @cindex window that satisfies a predicate
1534 @cindex conditional selection of windows
1535 @defun get-window-with-predicate predicate &optional minibuf all-frames default
1536 This function returns a window satisfying @var{predicate}. It cycles
1537 through all visible windows calling @var{predicate} on each one of them
1538 with that window as its argument. The function returns the first window
1539 for which @var{predicate} returns a non-@code{nil} value; if that never
1540 happens, it returns @var{default} (which defaults to @code{nil}).
1541
1542 The optional arguments @var{minibuf} and @var{all-frames} specify the
1543 set of windows to investigate. See the description of
1544 @code{next-window} for details.
1545 @end defun
1546
1547 @node Buffers and Windows
1548 @section Buffers and Windows
1549 @cindex examining windows
1550 @cindex windows, controlling precisely
1551 @cindex buffers, controlled in windows
1552
1553 To find out which buffer is displayed in a given window the following
1554 function is used.
1555
1556 @defun window-buffer &optional window
1557 This function returns the buffer that @var{window} is displaying. The
1558 argument @var{window} can be any window and defaults to the selected
1559 one. If @var{window} is an internal window, this function returns
1560 @code{nil}.
1561 @end defun
1562
1563 The basic, low-level function to associate a window with a buffer is
1564 @code{set-window-buffer}. Higher-level functions like
1565 @code{switch-to-buffer} and @code{display-buffer} try to obey a number
1566 of user customizations regulating which windows are supposed to
1567 display which buffers. @xref{Switching Buffers}. When writing an
1568 application, you should avoid using @code{set-window-buffer} unless
1569 you are sure you need it.
1570
1571 @defun set-window-buffer window buffer-or-name &optional keep-margins
1572 This function makes @var{window} display @var{buffer-or-name} and
1573 returns @code{nil}. The argument @var{window} has to denote a live
1574 window and defaults to the selected one. The argument
1575 @var{buffer-or-name} must specify a buffer or the name of an existing
1576 buffer. An error is signaled when @var{window} is @dfn{strongly}
1577 dedicated to its buffer (@pxref{Dedicated Windows}) and does not already
1578 display @var{buffer-or-name}.
1579
1580 Normally, displaying @var{buffer-or-name} in @var{window} resets the
1581 window's position, display margins, fringe widths, and scroll bar
1582 settings based on the local variables of the specified buffer. However,
1583 if the optional argument @var{keep-margins} is non-@code{nil}, display
1584 margins and fringe widths of @var{window} remain unchanged.
1585 @xref{Fringes}.
1586
1587 This function is the fundamental primitive for changing which buffer is
1588 displayed in a window, and all ways of doing that call this function.
1589 Neither the selected window nor the current buffer are changed by this
1590 function.
1591
1592 This function runs @code{window-scroll-functions} before running
1593 @code{window-configuration-change-hook}, see @ref{Window Hooks}.
1594 @end defun
1595
1596 @defvar buffer-display-count
1597 This buffer-local variable records the number of times a buffer has been
1598 displayed in a window. It is incremented each time
1599 @code{set-window-buffer} is called for the buffer.
1600 @end defvar
1601
1602 @defvar buffer-display-time
1603 This variable records the time at which a buffer was last made visible
1604 in a window. It is always local in each buffer; each time
1605 @code{set-window-buffer} is called, it sets this variable to
1606 @code{(current-time)} in the specified buffer (@pxref{Time of Day}).
1607 When a buffer is first created, @code{buffer-display-time} starts out
1608 with the value @code{nil}.
1609 @end defvar
1610
1611 @defun get-buffer-window &optional buffer-or-name all-frames
1612 This function returns a window displaying @var{buffer-or-name}, or
1613 @code{nil} if there is none. If there are several such windows, then
1614 the function returns the first one in the cyclic ordering of windows,
1615 starting from the selected window, @xref{Cyclic Window Ordering}.
1616
1617 The argument @var{buffer-or-name} may be a buffer or a buffer name and
1618 defaults to the current buffer. The optional argument @var{all-frames}
1619 specifies which windows to consider:
1620
1621 @itemize @bullet
1622 @item
1623 @code{nil} means consider windows on the selected frame.
1624 @item
1625 @code{t} means consider windows on all existing frames.
1626 @item
1627 @code{visible} means consider windows on all visible frames.
1628 @item
1629 0 means consider windows on all visible or iconified frames.
1630 @item
1631 A frame means consider windows on that frame only.
1632 @end itemize
1633
1634 Observe that the behavior of @code{get-buffer-window} may differ from
1635 that of @code{next-window} (@pxref{Cyclic Window Ordering}) when
1636 @var{all-frames} equals @code{nil} or any value not listed here.
1637 Perhaps we will change @code{get-buffer-window} in the future to make it
1638 compatible with the other functions.
1639 @end defun
1640
1641 @defun get-buffer-window-list &optional buffer-or-name minibuf all-frames
1642 This function returns a list of all windows currently displaying
1643 @var{buffer-or-name}. The argument @var{buffer-or-name} may be a buffer
1644 or the name of an existing buffer and defaults to the current buffer.
1645
1646 The two remaining arguments work like the same-named arguments of
1647 @code{next-window} (@pxref{Cyclic Window Ordering}); they are @emph{not}
1648 like the optional arguments of @code{get-buffer-window}.
1649 @end defun
1650
1651 @deffn Command replace-buffer-in-windows &optional buffer-or-name
1652 This command replaces @var{buffer-or-name} with some other buffer, in
1653 all windows displaying it. For each such window, it choose another
1654 buffer using @code{switch-to-prev-buffer} (@pxref{Window History}).
1655
1656 The argument @var{buffer-or-name} may be a buffer, or the name of an
1657 existing buffer; it defaults to the current buffer.
1658
1659 If a window displaying @var{buffer-or-name} is dedicated
1660 (@pxref{Dedicated Windows}) and is not the only window on its frame,
1661 that window is deleted. If that window is the only window on its frame
1662 and there are other frames on the frame's terminal, that frame is dealt
1663 with by the function specified by @code{frame-auto-hide-function}
1664 (@pxref{Quitting Windows}). Otherwise, the buffer provided by the
1665 function @code{switch-to-prev-buffer} (@pxref{Window History}) is
1666 displayed in the window instead.
1667 @end deffn
1668
1669
1670 @node Switching Buffers
1671 @section Switching to a Buffer in a Window
1672 @cindex switching to a buffer
1673 @cindex displaying a buffer
1674
1675 This section describes high-level functions for switching to a
1676 specified buffer in some window.
1677
1678 Do @emph{not} use these functions to make a buffer temporarily
1679 current just so a Lisp program can access or modify it. They have
1680 side-effects, such as changing window histories (@pxref{Window
1681 History}), which will surprise the user if used that way. If you want
1682 to make a buffer current to modify it in Lisp, use
1683 @code{with-current-buffer}, @code{save-current-buffer}, or
1684 @code{set-buffer}. @xref{Current Buffer}.
1685
1686 @deffn Command switch-to-buffer buffer-or-name &optional norecord force-same-window
1687 This function displays @var{buffer-or-name} in the selected window,
1688 and makes it the current buffer. (In contrast, @code{set-buffer}
1689 makes the buffer current but does not display it; @pxref{Current
1690 Buffer}). It is often used interactively (as the binding of @kbd{C-x
1691 b}), as well as in Lisp programs. The return value is the buffer
1692 switched to.
1693
1694 If @var{buffer-or-name} is @code{nil}, it defaults to the buffer
1695 returned by @code{other-buffer} (@pxref{The Buffer List}). If
1696 @var{buffer-or-name} is a string that is not the name of any existing
1697 buffer, this function creates a new buffer with that name; the new
1698 buffer's major mode is determined by the variable @code{major-mode}
1699 (@pxref{Major Modes}).
1700
1701 Normally the specified buffer is put at the front of the buffer
1702 list---both the global buffer list and the selected frame's buffer
1703 list (@pxref{The Buffer List}). However, this is not done if the
1704 optional argument @var{norecord} is non-@code{nil}.
1705
1706 If this function is unable to display the buffer in the selected
1707 window---usually because the selected window is a minibuffer window or
1708 is strongly dedicated to its buffer (@pxref{Dedicated Windows})---then
1709 it normally tries to display the buffer in some other window, in the
1710 manner of @code{pop-to-buffer} (see below). However, if the optional
1711 argument @var{force-same-window} is non-@code{nil}, it signals an error
1712 instead.
1713 @end deffn
1714
1715 The next two functions are similar to @code{switch-to-buffer}, except
1716 for the described features.
1717
1718 @deffn Command switch-to-buffer-other-window buffer-or-name &optional norecord
1719 This function makes the buffer specified by @var{buffer-or-name}
1720 current and displays it in some window other than the selected window.
1721 It uses the function @code{pop-to-buffer} internally (see below).
1722
1723 If the selected window already displays the specified buffer, it
1724 continues to do so, but another window is nonetheless found to display
1725 it as well.
1726
1727 The @var{buffer-or-name} and @var{norecord} arguments have the same
1728 meanings as in @code{switch-to-buffer}.
1729 @end deffn
1730
1731 @deffn Command switch-to-buffer-other-frame buffer-or-name &optional norecord
1732 This function makes the buffer specified by @var{buffer-or-name}
1733 current and displays it, usually in a new frame. It uses the function
1734 @code{pop-to-buffer} (see below).
1735
1736 If the specified buffer is already displayed in another window, in any
1737 frame on the current terminal, this switches to that window instead of
1738 creating a new frame. However, the selected window is never used for
1739 this.
1740
1741 The @var{buffer-or-name} and @var{norecord} arguments have the same
1742 meanings as in @code{switch-to-buffer}.
1743 @end deffn
1744
1745 The above commands use @code{pop-to-buffer}, which is the function
1746 used by Lisp programs to flexibly display a buffer in some window and
1747 select that window for editing:
1748
1749 @defun pop-to-buffer buffer-or-name &optional action norecord
1750 This function makes @var{buffer-or-name} the current buffer and
1751 displays it in some window, preferably not the window previously
1752 selected. It then selects the displaying window. If that window is
1753 on a different graphical frame, that frame is given input focus if
1754 possible (@pxref{Input Focus}). The return value is the buffer that
1755 was switched to.
1756
1757 This function uses @code{display-buffer} to display the buffer, so all
1758 the variables affecting @code{display-buffer} will affect it as well.
1759 @xref{Choosing Window}.
1760
1761 If @var{buffer-or-name} is @code{nil}, it defaults to the buffer
1762 returned by @code{other-buffer} (@pxref{The Buffer List}). If
1763 @var{buffer-or-name} is a string that is not the name of any existing
1764 buffer, this function creates a new buffer with that name; the new
1765 buffer's major mode is determined by the variable @code{major-mode}
1766 (@pxref{Major Modes}).
1767
1768 If @var{action} is non-@code{nil}, it should be a display action to
1769 pass to @code{display-buffer} (@pxref{Choosing Window}).
1770 Alternatively, a non-@code{nil}, non-list value means to pop to a
1771 window other than the selected one---even if the buffer is already
1772 displayed in the selected window.
1773
1774 Like @code{switch-to-buffer}, this function updates the buffer list
1775 unless @var{norecord} is non-@code{nil}.
1776 @end defun
1777
1778 @node Choosing Window
1779 @section Choosing a Window for Display
1780
1781 The command @code{display-buffer} flexibly chooses a window for
1782 display, and displays a specified buffer in that window. It can be
1783 called interactively, via the key binding @kbd{C-x 4 C-o}. It is also
1784 used as a subroutine by many functions and commands, including
1785 @code{switch-to-buffer} and @code{pop-to-buffer} (@pxref{Switching
1786 Buffers}).
1787
1788 @cindex display action
1789 @cindex action function, for display-buffer
1790 @cindex action alist, for display-buffer
1791 This command performs several complex steps to find a window to
1792 display in. These steps are described by means of @dfn{display
1793 actions}, which have the form @code{(@var{function} . @var{alist})}.
1794 Here, @var{function} is either a function or a list of functions,
1795 which we refer to as @dfn{action functions}; @var{alist} is an
1796 association list, which we refer to as @dfn{action alists}.
1797
1798 An action function accepts two arguments: the buffer to display and
1799 an action alist. It attempts to display the buffer in some window,
1800 picking or creating a window according to its own criteria. If
1801 successful, it returns the window; otherwise, it returns @code{nil}.
1802 @xref{Display Action Functions}, for a list of predefined action
1803 functions.
1804
1805 @code{display-buffer} works by combining display actions from
1806 several sources, and calling the action functions in turn, until one
1807 of them manages to display the buffer and returns a non-@code{nil}
1808 value.
1809
1810 @deffn Command display-buffer buffer-or-name &optional action frame
1811 This command makes @var{buffer-or-name} appear in some window, without
1812 selecting the window or making the buffer current. The argument
1813 @var{buffer-or-name} must be a buffer or the name of an existing
1814 buffer. The return value is the window chosen to display the buffer.
1815
1816 The optional argument @var{action}, if non-@code{nil}, should normally
1817 be a display action (described above). @code{display-buffer} builds a
1818 list of action functions and an action alist, by consolidating display
1819 actions from the following sources (in order):
1820
1821 @itemize
1822 @item
1823 The variable @code{display-buffer-overriding-action}.
1824
1825 @item
1826 The user option @code{display-buffer-alist}.
1827
1828 @item
1829 The @var{action} argument.
1830
1831 @item
1832 The user option @code{display-buffer-base-action}.
1833
1834 @item
1835 The constant @code{display-buffer-fallback-action}.
1836 @end itemize
1837
1838 @noindent
1839 Each action function is called in turn, passing the buffer as the
1840 first argument and the combined action alist as the second argument,
1841 until one of the functions returns non-@code{nil}.
1842
1843 The argument @var{action} can also have a non-@code{nil}, non-list
1844 value. This has the special meaning that the buffer should be
1845 displayed in a window other than the selected one, even if the
1846 selected window is already displaying it. If called interactively
1847 with a prefix argument, @var{action} is @code{t}.
1848
1849 The optional argument @var{frame}, if non-@code{nil}, specifies which
1850 frames to check when deciding whether the buffer is already displayed.
1851 It is equivalent to adding an element @code{(reusable-frames
1852 . @var{frame})} to the action alist of @var{action}. @xref{Display
1853 Action Functions}.
1854 @end deffn
1855
1856 @defvar display-buffer-overriding-action
1857 The value of this variable should be a display action, which is
1858 treated with the highest priority by @code{display-buffer}. The
1859 default value is empty, i.e. @code{(nil . nil)}.
1860 @end defvar
1861
1862 @defopt display-buffer-alist
1863 The value of this option is an alist mapping regular expressions to
1864 display actions. If the name of the buffer passed to
1865 @code{display-buffer} matches a regular expression in this alist, then
1866 @code{display-buffer} uses the corresponding display action.
1867 @end defopt
1868
1869 @defopt display-buffer-base-action
1870 The value of this option should be a display action. This option can
1871 be used to define a ``standard'' display action for calls to
1872 @code{display-buffer}.
1873 @end defopt
1874
1875 @defvr Constant display-buffer-fallback-action
1876 This display action specifies the fallback behavior for
1877 @code{display-buffer} if no other display actions are given.
1878 @end defvr
1879
1880 @node Display Action Functions
1881 @section Action Functions for @code{display-buffer}
1882
1883 The following basic action functions are defined in Emacs. Each of
1884 these functions takes two arguments: @var{buffer}, the buffer to
1885 display, and @var{alist}, an action alist. Each action function
1886 returns the window if it succeeds, and @code{nil} if it fails.
1887
1888 @defun display-buffer-same-window buffer alist
1889 This function tries to display @var{buffer} in the selected window.
1890 It fails if the selected window is a minibuffer window or is dedicated
1891 to another buffer (@pxref{Dedicated Windows}). It also fails if
1892 @var{alist} has a non-@code{nil} @code{inhibit-same-window} entry.
1893 @end defun
1894
1895 @defun display-buffer-reuse-window buffer alist
1896 This function tries to ``display'' @var{buffer} by finding a window
1897 that is already displaying it.
1898
1899 If @var{alist} has a non-@code{nil} @code{inhibit-same-window} entry,
1900 the selected window is not eligible for reuse.
1901
1902 If @var{alist} contains a @code{reusable-frames} entry, its value
1903 determines which frames to search for a reusable window:
1904
1905 @itemize @bullet
1906 @item
1907 @code{nil} means consider windows on the selected frame.
1908 (Actually, the last non-minibuffer frame.)
1909 @item
1910 @code{t} means consider windows on all frames.
1911 @item
1912 @code{visible} means consider windows on all visible frames.
1913 @item
1914 0 means consider windows on all visible or iconified frames.
1915 @item
1916 A frame means consider windows on that frame only.
1917 @end itemize
1918
1919 If @var{alist} contains no @code{reusable-frames} entry, this function
1920 normally searches just the selected frame; however, if either the
1921 variable @code{display-buffer-reuse-frames} or the variable
1922 @code{pop-up-frames} is non-@code{nil}, it searches all frames on the
1923 current terminal. @xref{Choosing Window Options}.
1924 @end defun
1925
1926 @defun display-buffer-pop-up-frame buffer alist
1927 This function creates a new frame, and displays the buffer in that
1928 frame's window.
1929 @end defun
1930
1931 @defun display-buffer-pop-up-window buffer alist
1932 This function tries to display @var{buffer} by splitting the largest
1933 or least recently-used window. It uses @code{split-window-sensibly}
1934 as a subroutine (@pxref{Choosing Window Options}).
1935 @end defun
1936
1937 @defun display-buffer-use-some-window buffer alist
1938 This function tries to display @var{buffer} by choosing an existing
1939 window and displaying the buffer in that window. It can fail if all
1940 windows are dedicated to another buffer (@pxref{Dedicated Windows}).
1941 @end defun
1942
1943 @node Choosing Window Options
1944 @section Additional Options for Displaying Buffers
1945
1946 The behavior of the standard display actions of @code{display-buffer}
1947 (@pxref{Choosing Window}) can be modified by a variety of user
1948 options.
1949
1950 @defopt display-buffer-reuse-frames
1951 If this variable is non-@code{nil}, @code{display-buffer} searches
1952 visible and iconified frames for a window displaying
1953 @var{buffer-or-name}. If there is such a window, @code{display-buffer}
1954 makes that window's frame visible and raises it if necessary, and
1955 returns the window. If there is no such window or
1956 @code{display-buffer-reuse-frames} is @code{nil}, the behavior of
1957 @code{display-buffer} is determined by the variables described next.
1958 @end defopt
1959
1960 @defopt pop-up-windows
1961 This variable specifies whether @code{display-buffer} is allowed to
1962 split (@pxref{Splitting Windows}) an existing window. If this variable
1963 is non-@code{nil}, @code{display-buffer} tries to split the largest or
1964 least recently used window on the selected frame. (If the selected
1965 frame is a minibuffer-only frame, @code{display-buffer} tries to split a
1966 window on another frame instead.) If this variable is @code{nil} or the
1967 variable @code{pop-up-frames} (see below) is non-@code{nil},
1968 @code{display-buffer} does not split any window.
1969 @end defopt
1970
1971 @defopt split-window-preferred-function
1972 This variable must specify a function with one argument, which is a
1973 window. The @code{display-buffer} routines will call this function with
1974 one or more candidate windows when they look for a window to split. The
1975 function is expected to split that window and return the new window. If
1976 the function returns @code{nil}, this means that the argument window
1977 cannot (or shall not) be split.
1978
1979 The default value of @code{split-window-preferred-function} is the
1980 function @code{split-window-sensibly} described below. If you
1981 customize this option, bear in mind that the @code{display-buffer}
1982 routines may call your function up to two times when trying to split a
1983 window. The argument of the first call is the largest window on the
1984 chosen frame (as returned by @code{get-largest-window}). If that call
1985 fails to return a live window, your function is called a second time
1986 with the least recently used window on that frame (as returned by
1987 @code{get-lru-window}).
1988
1989 The function specified by this option may try to split any other window
1990 instead of the argument window. Note that the window selected at the
1991 time @code{display-buffer} was invoked is still selected when your
1992 function is called. Hence, you can split the selected window (instead
1993 of the largest or least recently used one) by simply ignoring the window
1994 argument in the body of your function. You can even choose to not split
1995 any window as long as the return value of your function specifies a live
1996 window or @code{nil}, but you are not encouraged to do so
1997 unconditionally. If you want @code{display-buffer} to never split any
1998 windows, set @code{pop-up-windows} to @code{nil}.
1999 @end defopt
2000
2001 @defun split-window-sensibly window
2002 This function takes a window as argument and tries to split that window
2003 in a suitable way. The two variables described next are useful for
2004 tuning the behavior of this function.
2005 @end defun
2006
2007 @defopt split-height-threshold
2008 This variable specifies whether @code{split-window-sensibly} may split
2009 windows vertically. If it is an integer, @code{split-window-sensibly}
2010 tries to vertically split a window only if it has at least this many
2011 lines. If the window has less lines, splitting fails, or the value of
2012 this variable is @code{nil}, @code{split-window-sensibly} will try to
2013 split the window horizontally, subject to restrictions of
2014 @code{split-width-threshold} (see below). If splitting horizontally
2015 fails too and the window is the only window on its frame,
2016 @code{split-window-sensibly} will try to split the window vertically
2017 disregarding the value of @code{split-height-threshold}. If this fails
2018 as well, @code{split-window-sensibly} returns @code{nil}.
2019
2020 @code{split-window-sensibly} does not split vertically a window whose
2021 height is fixed (@pxref{Resizing Windows}). Also, it vertically splits
2022 a window only if the space taken up by that window can accommodate two
2023 windows one above the other that are both at least
2024 @code{window-min-height} lines tall. Moreover, if the window that shall
2025 be split has a mode line, @code{split-window-sensibly} does not split
2026 the window unless the new window can accommodate a mode line too.
2027 @end defopt
2028
2029 @defopt split-width-threshold
2030 This variable specifies whether @code{split-window-sensibly} may split
2031 windows horizontally. If it is an integer, @code{split-window-sensibly}
2032 tries to horizontally split a window only if it has at least this many
2033 columns. If it is @code{nil}, @code{split-window-sensibly} will not
2034 split the window horizontally. (It still might split the window
2035 vertically, though, see above.)
2036
2037 @code{split-window-sensibly} does not split horizontally a window if
2038 that window's width is fixed (@pxref{Resizing Windows}). Also, it
2039 horizontally splits a window only if the space that window takes up can
2040 accommodate two windows side by side that are both at least
2041 @code{window-min-width} columns wide.
2042 @end defopt
2043
2044 @defopt even-window-heights
2045 This variable specifies whether @code{display-buffer} should even out
2046 window heights if the buffer gets displayed in an existing window, above
2047 or beneath another window. If @code{even-window-heights} is
2048 non-@code{nil}, the default, window heights will be evened out. If
2049 either of the involved window has fixed height (@pxref{Resizing
2050 Windows}) or @code{even-window-heights} is @code{nil}, the original
2051 window heights will be left alone.
2052 @end defopt
2053
2054 @c Emacs 19 feature
2055 @defopt pop-up-frames
2056 This variable specifies whether @code{display-buffer} should make new
2057 frames. If it is non-@code{nil}, @code{display-buffer} looks for a
2058 window already displaying @var{buffer-or-name} on any visible or
2059 iconified frame. If it finds such a window, it makes that window's
2060 frame visible and raises it if necessary, and returns the window.
2061 Otherwise it makes a new frame, unless the variable's value is
2062 @code{graphic-only} and the selected frame is not on a graphic display.
2063 @xref{Frames}, for more information.
2064
2065 Note that the value of @code{pop-up-windows} does not matter if
2066 @code{pop-up-frames} is non-@code{nil}. If @code{pop-up-frames} is
2067 @code{nil}, then @code{display-buffer} either splits a window or reuses
2068 one.
2069 @end defopt
2070
2071 @c Emacs 19 feature
2072 @defopt pop-up-frame-function
2073 This variable specifies how to make a new frame if @code{pop-up-frames}
2074 is non-@code{nil}.
2075
2076 The value of this variable must be a function of no arguments. When
2077 @code{display-buffer} makes a new frame, it does so by calling that
2078 function, which should return a frame. The default value of this
2079 variable is a function that creates a frame using the parameters
2080 specified by @code{pop-up-frame-alist} described next.
2081 @end defopt
2082
2083 @defopt pop-up-frame-alist
2084 This variable holds an alist specifying frame parameters used by the
2085 default value of @code{pop-up-frame-function} for making new frames.
2086 @xref{Frame Parameters}, for more information about frame parameters.
2087 @end defopt
2088
2089 @defopt special-display-buffer-names
2090 A list of buffer names identifying buffers that should be displayed
2091 specially. If the name of @var{buffer-or-name} is in this list,
2092 @code{display-buffer} handles the buffer specially. By default, special
2093 display means to give the buffer a dedicated frame.
2094
2095 If an element is a list, instead of a string, then the @sc{car} of that
2096 list is the buffer name, and the rest of that list says how to create
2097 the frame. There are two possibilities for the rest of that list (its
2098 @sc{cdr}): It can be an alist, specifying frame parameters, or it can
2099 contain a function and arguments to give to it. (The function's first
2100 argument is always the buffer to be displayed; the arguments from the
2101 list come after that.)
2102
2103 For example:
2104
2105 @example
2106 (("myfile" (minibuffer) (menu-bar-lines . 0)))
2107 @end example
2108
2109 @noindent
2110 specifies to display a buffer named @samp{myfile} in a dedicated frame
2111 with specified @code{minibuffer} and @code{menu-bar-lines} parameters.
2112
2113 The list of frame parameters can also use the phony frame parameters
2114 @code{same-frame} and @code{same-window}. If the specified frame
2115 parameters include @code{(same-window . @var{value})} and @var{value}
2116 is non-@code{nil}, that means to display the buffer in the current
2117 selected window. Otherwise, if they include @code{(same-frame .
2118 @var{value})} and @var{value} is non-@code{nil}, that means to display
2119 the buffer in a new window in the currently selected frame.
2120 @end defopt
2121
2122 @defopt special-display-regexps
2123 A list of regular expressions specifying buffers that should be
2124 displayed specially. If the buffer's name matches any of the regular
2125 expressions in this list, @code{display-buffer} handles the buffer
2126 specially. By default, special display means to give the buffer a
2127 dedicated frame.
2128
2129 If an element is a list, instead of a string, then the @sc{car} of the
2130 list is the regular expression, and the rest of the list says how to
2131 create the frame. See @code{special-display-buffer-names} above.
2132 @end defopt
2133
2134 @defun special-display-p buffer-name
2135 This function returns non-@code{nil} if displaying a buffer
2136 named @var{buffer-name} with @code{display-buffer} would
2137 create a special frame. The value is @code{t} if it would
2138 use the default frame parameters, or else the specified list
2139 of frame parameters.
2140 @end defun
2141
2142 @defopt special-display-function
2143 This variable holds the function to call to display a buffer specially.
2144 It receives the buffer as an argument, and should return the window in
2145 which it is displayed. The default value of this variable is
2146 @code{special-display-popup-frame}, see below.
2147 @end defopt
2148
2149 @defun special-display-popup-frame buffer &optional args
2150 This function tries to make @var{buffer} visible in a frame of its own.
2151 If @var{buffer} is already displayed in some window, it makes that
2152 window's frame visible and raises it. Otherwise, it creates a frame
2153 that is dedicated to @var{buffer}. The return value is the window used
2154 to display @var{buffer}.
2155
2156 If @var{args} is an alist, it specifies frame parameters for the new
2157 frame. If @var{args} is a list whose @sc{car} is a symbol, then
2158 @code{(car @var{args})} is called as a function to actually create and
2159 set up the frame; it is called with @var{buffer} as first argument, and
2160 @code{(cdr @var{args})} as additional arguments.
2161
2162 This function always uses an existing window displaying @var{buffer},
2163 whether or not it is in a frame of its own; but if you set up the above
2164 variables in your init file, before @var{buffer} was created, then
2165 presumably the window was previously made by this function.
2166 @end defun
2167
2168 @defopt special-display-frame-alist
2169 @anchor{Definition of special-display-frame-alist}
2170 This variable holds frame parameters for
2171 @code{special-display-popup-frame} to use when it creates a frame.
2172 @end defopt
2173
2174 @defopt same-window-buffer-names
2175 A list of buffer names for buffers that should be displayed in the
2176 selected window. If the buffer's name is in this list,
2177 @code{display-buffer} handles the buffer by switching to it in the
2178 selected window.
2179 @end defopt
2180
2181 @defopt same-window-regexps
2182 A list of regular expressions that specify buffers that should be
2183 displayed in the selected window. If the buffer's name matches any of
2184 the regular expressions in this list, @code{display-buffer} handles the
2185 buffer by switching to it in the selected window.
2186 @end defopt
2187
2188 @defun same-window-p buffer-name
2189 This function returns @code{t} if displaying a buffer
2190 named @var{buffer-name} with @code{display-buffer} would
2191 put it in the selected window.
2192 @end defun
2193
2194 @c Emacs 19 feature
2195 @defopt display-buffer-function
2196 This variable is the most flexible way to customize the behavior of
2197 @code{display-buffer}. If it is non-@code{nil}, it should be a function
2198 that @code{display-buffer} calls to do the work. The function should
2199 accept two arguments, the first two arguments that @code{display-buffer}
2200 received. It should choose or create a window, display the specified
2201 buffer in it, and then return the window.
2202
2203 This variable takes precedence over all the other options described
2204 above.
2205 @end defopt
2206
2207 If all options described above fail to produce a suitable window,
2208 @code{display-buffer} tries to reuse an existing window. As a last
2209 resort, it will try to display @var{buffer-or-name} on a separate frame.
2210 In that case, the value of @code{pop-up-frames} is disregarded.
2211
2212
2213 @node Window History
2214 @section Window History
2215 @cindex window history
2216
2217 Each window remembers the buffers it has displayed earlier and the order
2218 in which these buffers have been removed from it. This history is used,
2219 for example, by @code{replace-buffer-in-windows} (@pxref{Buffers and
2220 Windows}). This list is automatically maintained by Emacs, but you can
2221 use the following functions to explicitly inspect or alter it:
2222
2223 @defun window-prev-buffers &optional window
2224 This function returns a list specifying the previous contents of
2225 @var{window}, which should be a live window and defaults to the
2226 selected window.
2227
2228 Each list element has the form @code{(@var{buffer} @var{window-start}
2229 @var{window-pos})}, where @var{buffer} is a buffer previously shown in
2230 the window, @var{window-start} is the window start position when that
2231 buffer was last shown, and @var{window-pos} is the point position when
2232 that buffer was last shown.
2233
2234 The list is ordered so that earlier elements correspond to more
2235 recently-shown buffers, and the first element usually corresponds to the
2236 buffer most recently removed from the window.
2237 @end defun
2238
2239 @defun set-window-prev-buffers window prev-buffers
2240 This function sets @var{window}'s previous buffers to the value of
2241 @var{prev-buffers}. The argument @var{window} must be a live window
2242 and defaults to the selected one. The argument @var{prev-buffers}
2243 should be a list of the same form as that returned by
2244 @code{window-prev-buffers}.
2245 @end defun
2246
2247 In addition, each buffer maintains a list of @dfn{next buffers}, which
2248 is a list of buffers re-shown by @code{switch-to-prev-buffer} (see
2249 below). This list is mainly used by @code{switch-to-prev-buffer} and
2250 @code{switch-to-next-buffer} for choosing buffers to switch to.
2251
2252 @defun window-next-buffers &optional window
2253 This function returns the list of buffers recently re-shown in
2254 @var{window} via @code{switch-to-prev-buffer}. The @var{window}
2255 argument must denote a live window or @code{nil} (meaning the selected
2256 window).
2257 @end defun
2258
2259 @defun set-window-next-buffers window next-buffers
2260 This function sets the next buffer list of @var{window} to
2261 @var{next-buffers}. The @var{window} argument should be a live window
2262 or @code{nil} (meaning the selected window). The argument
2263 @var{next-buffers} should be a list of buffers.
2264 @end defun
2265
2266 The following commands can be used to cycle through the global buffer
2267 list, much like @code{bury-buffer} and @code{unbury-buffer}. However,
2268 they cycle according to the specified window's history list, rather
2269 than the global buffer list. In addition, they restore
2270 window-specific window start and point positions, and may show a
2271 buffer even if it is already shown in another window. The
2272 @code{switch-to-prev-buffer} command, in particular, is used by
2273 @code{replace-buffer-in-windows}, @code{bury-buffer} and
2274 @code{quit-window} to find a replacement buffer for a window.
2275
2276 @deffn Command switch-to-prev-buffer &optional window bury-or-kill
2277 This command displays the previous buffer in @var{window}. The
2278 argument @var{window} should be a live window or @code{nil} (meaning
2279 the selected window). If the optional argument @var{bury-or-kill} is
2280 non-@code{nil}, this means that the buffer currently shown in
2281 @var{window} is about to be buried or killed and consequently shall
2282 not be switched to in future invocations of this command.
2283
2284 The previous buffer is usually the buffer shown before the buffer
2285 currently shown in @var{window}. However, a buffer that has been buried
2286 or killed or has been already shown by a recent invocation of
2287 @code{switch-to-prev-buffer} does not qualify as previous buffer.
2288
2289 If repeated invocations of this command have already shown all buffers
2290 previously shown in @var{window}, further invocations will show buffers
2291 from the buffer list of the frame @var{window} appears on (@pxref{The
2292 Buffer List}).
2293 @end deffn
2294
2295 @deffn Command switch-to-next-buffer &optional window
2296 This command switches to the next buffer in @var{window} thus undoing
2297 the effect of the last @code{switch-to-prev-buffer} command in
2298 @var{window}. The argument @var{window} must be a live window and
2299 defaults to the selected one.
2300
2301 If there is no recent invocation of a @code{switch-to-prev-buffer} that
2302 can be undone, this function tries to show a buffer from the buffer list
2303 of the frame @var{window} appears on (@pxref{The Buffer List}).
2304 @end deffn
2305
2306
2307 @node Dedicated Windows
2308 @section Dedicated Windows
2309 @cindex dedicated window
2310
2311 Functions for displaying a buffer can be told to not use specific
2312 windows by marking these windows as @dfn{dedicated} to their buffers.
2313 @code{display-buffer} (@pxref{Choosing Window}) never uses a dedicated
2314 window for displaying another buffer in it. @code{get-lru-window} and
2315 @code{get-largest-window} (@pxref{Selecting Windows}) do not consider
2316 dedicated windows as candidates when their @var{dedicated} argument is
2317 non-@code{nil}. The behavior of @code{set-window-buffer}
2318 (@pxref{Buffers and Windows}) with respect to dedicated windows is
2319 slightly different, see below.
2320
2321 When @code{delete-windows-on} (@pxref{Deleting Windows}) wants to
2322 delete a dedicated window and that window is the only window on its
2323 frame, it deletes the window's frame too, provided there are other
2324 frames left. @code{replace-buffer-in-windows} (@pxref{Switching
2325 Buffers}) tries to delete all dedicated windows showing its buffer
2326 argument. When such a window is the only window on its frame, that
2327 frame is deleted, provided there are other frames left. If there are
2328 no more frames left, some other buffer is displayed in the window, and
2329 the window is marked as non-dedicated.
2330
2331 When you kill a buffer (@pxref{Killing Buffers}) displayed in a
2332 dedicated window, any such window usually gets deleted too, since
2333 @code{kill-buffer} calls @code{replace-buffer-in-windows} for cleaning
2334 up windows. Burying a buffer (@pxref{The Buffer List}) deletes the
2335 selected window if it is dedicated to that buffer. If, however, that
2336 window is the only window on its frame, @code{bury-buffer} displays
2337 another buffer in it and iconifies the frame.
2338
2339 @defun window-dedicated-p &optional window
2340 This function returns non-@code{nil} if @var{window} is dedicated to its
2341 buffer and @code{nil} otherwise. More precisely, the return value is
2342 the value assigned by the last call of @code{set-window-dedicated-p} for
2343 @var{window} or @code{nil} if that function was never called with
2344 @var{window} as its argument. The default for @var{window} is the
2345 selected window.
2346 @end defun
2347
2348 @defun set-window-dedicated-p window flag
2349 This function marks @var{window} as dedicated to its buffer if
2350 @var{flag} is non-@code{nil}, and non-dedicated otherwise.
2351
2352 As a special case, if @var{flag} is @code{t}, @var{window} becomes
2353 @dfn{strongly} dedicated to its buffer. @code{set-window-buffer}
2354 signals an error when the window it acts upon is strongly dedicated to
2355 its buffer and does not already display the buffer it is asked to
2356 display. Other functions do not treat @code{t} differently from any
2357 non-@code{nil} value.
2358 @end defun
2359
2360
2361 @node Quitting Windows
2362 @section Quitting Windows
2363
2364 When you want to get rid of a window used for displaying a buffer you
2365 can call @code{delete-window} or @code{delete-windows-on}
2366 (@pxref{Deleting Windows}) to remove that window from its frame. If the
2367 buffer is shown on a separate frame, you might want to call
2368 @code{delete-frame} (@pxref{Deleting Frames}) instead. If, on the other
2369 hand, a window has been reused for displaying the buffer, you might
2370 prefer showing the buffer previously shown in that window by calling the
2371 function @code{switch-to-prev-buffer} (@pxref{Window History}).
2372 Finally, you might want to either bury (@pxref{The Buffer List}) or kill
2373 (@pxref{Killing Buffers}) the window's buffer.
2374
2375 The following function uses information on how the window for
2376 displaying the buffer was obtained in the first place thus attempting to
2377 automatize the above decisions for you.
2378
2379 @deffn Command quit-window &optional kill window
2380 This command quits @var{window} and buries its buffer. The argument
2381 @var{window} must be a live window and defaults to the selected one.
2382 With prefix argument @var{kill} non-@code{nil}, it kills the buffer
2383 instead of burying it.
2384
2385 Quitting @var{window} means to proceed as follows: If @var{window} was
2386 created specially for displaying its current buffer, delete @var{window}
2387 provided its frame contains at least one other live window. If
2388 @var{window} is the only window on its frame and there are other frames
2389 on the frame's terminal, the value of @var{kill} determines how to
2390 proceed with the window. If @var{kill} is @code{nil}, the fate of the
2391 frame is determined by calling @code{frame-auto-hide-function} (see
2392 below) with that frame as sole argument. If @var{kill} is
2393 non-@code{nil}, the frame is deleted unconditionally.
2394
2395 If @var{window} was reused for displaying its buffer, this command tries
2396 to display the buffer previously shown in it. It also tries to restore
2397 the window start (@pxref{Window Start and End}) and point (@pxref{Window
2398 Point}) positions of the previously shown buffer. If, in addition, the
2399 current buffer was temporarily resized, this command will also try to
2400 restore the original height of @var{window}.
2401
2402 The three cases described so far require that the buffer shown in
2403 @var{window} is still the buffer displayed by the last buffer display
2404 function for this window. If another buffer has been shown in the
2405 meantime or the buffer previously shown no longer exists, this command
2406 calls @code{switch-to-prev-buffer} (@pxref{Window History}) to show some
2407 other buffer instead.
2408 @end deffn
2409
2410 The function @code{quit-window} bases its decisions on information
2411 stored in @var{window}'s @code{quit-restore} window parameter
2412 (@pxref{Window Parameters}) and resets that parameter to @code{nil}
2413 after it's done.
2414
2415 The following option specifies how to deal with a frame containing just
2416 one window that shall be either quit or whose buffer shall be buried.
2417
2418 @defopt frame-auto-hide-function
2419 The function specified by this option is called to automatically hide
2420 frames. This function is called with one argument - a frame.
2421
2422 The function specified here is called by @code{bury-buffer} (@pxref{The
2423 Buffer List}) when the selected window is dedicated and shows the buffer
2424 that shall be buried. It is also called by @code{quit-window} (see
2425 above) when the frame of the window that shall be quit has been
2426 specially created for displaying that window's buffer and the buffer
2427 shall be buried.
2428
2429 The default is to call @code{iconify-frame} (@pxref{Visibility of
2430 Frames}). Alternatively, you may either specify @code{delete-frame}
2431 (@pxref{Deleting Frames}) to remove the frame from its display,
2432 @code{ignore} to leave the frame unchanged, or any other function that
2433 can take a frame as its sole argument.
2434
2435 Note that the function specified by this option is called if and only if
2436 there's at least one other frame on the terminal of the frame it's
2437 supposed to handle and that frame contains only one live window.
2438 @end defopt
2439
2440
2441 @node Window Point
2442 @section Windows and Point
2443 @cindex window position
2444 @cindex window point
2445 @cindex position in window
2446 @cindex point in window
2447
2448 Each window has its own value of point (@pxref{Point}), independent of
2449 the value of point in other windows displaying the same buffer. This
2450 makes it useful to have multiple windows showing one buffer.
2451
2452 @itemize @bullet
2453 @item
2454 The window point is established when a window is first created; it is
2455 initialized from the buffer's point, or from the window point of another
2456 window opened on the buffer if such a window exists.
2457
2458 @item
2459 Selecting a window sets the value of point in its buffer from the
2460 window's value of point. Conversely, deselecting a window sets the
2461 window's value of point from that of the buffer. Thus, when you switch
2462 between windows that display a given buffer, the point value for the
2463 selected window is in effect in the buffer, while the point values for
2464 the other windows are stored in those windows.
2465
2466 @item
2467 As long as the selected window displays the current buffer, the window's
2468 point and the buffer's point always move together; they remain equal.
2469 @end itemize
2470
2471 @cindex cursor
2472 As far as the user is concerned, point is where the cursor is, and
2473 when the user switches to another buffer, the cursor jumps to the
2474 position of point in that buffer.
2475
2476 @defun window-point &optional window
2477 This function returns the current position of point in @var{window}.
2478 For a nonselected window, this is the value point would have (in that
2479 window's buffer) if that window were selected. The default for
2480 @var{window} is the selected window.
2481
2482 When @var{window} is the selected window and its buffer is also the
2483 current buffer, the value returned is the same as point in that buffer.
2484 Strictly speaking, it would be more correct to return the ``top-level''
2485 value of point, outside of any @code{save-excursion} forms. But that
2486 value is hard to find.
2487 @end defun
2488
2489 @defun set-window-point window position
2490 This function positions point in @var{window} at position
2491 @var{position} in @var{window}'s buffer. It returns @var{position}.
2492
2493 If @var{window} is selected, and its buffer is current,
2494 this simply does @code{goto-char}.
2495 @end defun
2496
2497 @defvar window-point-insertion-type
2498 This variable specifies the marker insertion type (@pxref{Marker
2499 Insertion Types}) of @code{window-point}. The default is @code{nil},
2500 so @code{window-point} will stay behind text inserted there.
2501 @end defvar
2502
2503 @node Window Start and End
2504 @section The Window Start and End Positions
2505 @cindex window start position
2506
2507 Each window maintains a marker used to keep track of a buffer position
2508 that specifies where in the buffer display should start. This position
2509 is called the @dfn{display-start} position of the window (or just the
2510 @dfn{start}). The character after this position is the one that appears
2511 at the upper left corner of the window. It is usually, but not
2512 inevitably, at the beginning of a text line.
2513
2514 After switching windows or buffers, and in some other cases, if the
2515 window start is in the middle of a line, Emacs adjusts the window
2516 start to the start of a line. This prevents certain operations from
2517 leaving the window start at a meaningless point within a line. This
2518 feature may interfere with testing some Lisp code by executing it
2519 using the commands of Lisp mode, because they trigger this
2520 readjustment. To test such code, put it into a command and bind the
2521 command to a key.
2522
2523 @defun window-start &optional window
2524 @cindex window top line
2525 This function returns the display-start position of window
2526 @var{window}. If @var{window} is @code{nil}, the selected window is
2527 used. For example,
2528
2529 @example
2530 @group
2531 (window-start)
2532 @result{} 7058
2533 @end group
2534 @end example
2535
2536 When you create a window, or display a different buffer in it, the
2537 display-start position is set to a display-start position recently used
2538 for the same buffer, or to @code{point-min} if the buffer doesn't have
2539 any.
2540
2541 Redisplay updates the window-start position (if you have not specified
2542 it explicitly since the previous redisplay)---to make sure point appears
2543 on the screen. Nothing except redisplay automatically changes the
2544 window-start position; if you move point, do not expect the window-start
2545 position to change in response until after the next redisplay.
2546
2547 For a realistic example of using @code{window-start}, see the
2548 description of @code{count-lines}. @xref{Definition of count-lines}.
2549 @end defun
2550
2551 @cindex window end position
2552 @defun window-end &optional window update
2553 This function returns the position where display of its buffer ends in
2554 @var{window}. The default for @var{window} is the selected window.
2555
2556 Simply changing the buffer text or moving point does not update the
2557 value that @code{window-end} returns. The value is updated only when
2558 Emacs redisplays and redisplay completes without being preempted.
2559
2560 If the last redisplay of @var{window} was preempted, and did not finish,
2561 Emacs does not know the position of the end of display in that window.
2562 In that case, this function returns @code{nil}.
2563
2564 If @var{update} is non-@code{nil}, @code{window-end} always returns an
2565 up-to-date value for where display ends, based on the current
2566 @code{window-start} value. If a previously saved value of that position
2567 is still valid, @code{window-end} returns that value; otherwise it
2568 computes the correct value by scanning the buffer text.
2569
2570 Even if @var{update} is non-@code{nil}, @code{window-end} does not
2571 attempt to scroll the display if point has moved off the screen, the
2572 way real redisplay would do. It does not alter the
2573 @code{window-start} value. In effect, it reports where the displayed
2574 text will end if scrolling is not required.
2575 @end defun
2576
2577 @defun set-window-start window position &optional noforce
2578 This function sets the display-start position of @var{window} to
2579 @var{position} in @var{window}'s buffer. It returns @var{position}.
2580
2581 The display routines insist that the position of point be visible when a
2582 buffer is displayed. Normally, they change the display-start position
2583 (that is, scroll the window) whenever necessary to make point visible.
2584 However, if you specify the start position with this function using
2585 @code{nil} for @var{noforce}, it means you want display to start at
2586 @var{position} even if that would put the location of point off the
2587 screen. If this does place point off screen, the display routines move
2588 point to the left margin on the middle line in the window.
2589
2590 For example, if point @w{is 1} and you set the start of the window
2591 @w{to 37}, the start of the next line, point will be ``above'' the top
2592 of the window. The display routines will automatically move point if
2593 it is still 1 when redisplay occurs. Here is an example:
2594
2595 @example
2596 @group
2597 ;; @r{Here is what @samp{foo} looks like before executing}
2598 ;; @r{the @code{set-window-start} expression.}
2599 @end group
2600
2601 @group
2602 ---------- Buffer: foo ----------
2603 @point{}This is the contents of buffer foo.
2604 2
2605 3
2606 4
2607 5
2608 6
2609 ---------- Buffer: foo ----------
2610 @end group
2611
2612 @group
2613 (set-window-start
2614 (selected-window)
2615 (save-excursion
2616 (goto-char 1)
2617 (forward-line 1)
2618 (point)))
2619 @result{} 37
2620 @end group
2621
2622 @group
2623 ;; @r{Here is what @samp{foo} looks like after executing}
2624 ;; @r{the @code{set-window-start} expression.}
2625 ---------- Buffer: foo ----------
2626 2
2627 3
2628 @point{}4
2629 5
2630 6
2631 ---------- Buffer: foo ----------
2632 @end group
2633 @end example
2634
2635 If @var{noforce} is non-@code{nil}, and @var{position} would place point
2636 off screen at the next redisplay, then redisplay computes a new window-start
2637 position that works well with point, and thus @var{position} is not used.
2638 @end defun
2639
2640 @defun pos-visible-in-window-p &optional position window partially
2641 This function returns non-@code{nil} if @var{position} is within the
2642 range of text currently visible on the screen in @var{window}. It
2643 returns @code{nil} if @var{position} is scrolled vertically out of view.
2644 Locations that are partially obscured are not considered visible unless
2645 @var{partially} is non-@code{nil}. The argument @var{position} defaults
2646 to the current position of point in @var{window}; @var{window}, to the
2647 selected window. If @var{position} is @code{t}, that means to check the
2648 last visible position in @var{window}.
2649
2650 This function considers only vertical scrolling. If @var{position} is
2651 out of view only because @var{window} has been scrolled horizontally,
2652 @code{pos-visible-in-window-p} returns non-@code{nil} anyway.
2653 @xref{Horizontal Scrolling}.
2654
2655 If @var{position} is visible, @code{pos-visible-in-window-p} returns
2656 @code{t} if @var{partially} is @code{nil}; if @var{partially} is
2657 non-@code{nil}, and the character following @var{position} is fully
2658 visible, it returns a list of the form @code{(@var{x} @var{y})}, where
2659 @var{x} and @var{y} are the pixel coordinates relative to the top left
2660 corner of the window; otherwise it returns an extended list of the form
2661 @code{(@var{x} @var{y} @var{rtop} @var{rbot} @var{rowh} @var{vpos})},
2662 where @var{rtop} and @var{rbot} specify the number of off-window pixels
2663 at the top and bottom of the row at @var{position}, @var{rowh} specifies
2664 the visible height of that row, and @var{vpos} specifies the vertical
2665 position (zero-based row number) of that row.
2666
2667 Here is an example:
2668
2669 @example
2670 @group
2671 ;; @r{If point is off the screen now, recenter it now.}
2672 (or (pos-visible-in-window-p
2673 (point) (selected-window))
2674 (recenter 0))
2675 @end group
2676 @end example
2677 @end defun
2678
2679 @defun window-line-height &optional line window
2680 This function returns the height of text line @var{line} in
2681 @var{window}. If @var{line} is one of @code{header-line} or
2682 @code{mode-line}, @code{window-line-height} returns information about
2683 the corresponding line of the window. Otherwise, @var{line} is a text
2684 line number starting from 0. A negative number counts from the end of
2685 the window. The default for @var{line} is the current line in
2686 @var{window}; the default for @var{window} is the selected window.
2687
2688 If the display is not up to date, @code{window-line-height} returns
2689 @code{nil}. In that case, @code{pos-visible-in-window-p} may be used
2690 to obtain related information.
2691
2692 If there is no line corresponding to the specified @var{line},
2693 @code{window-line-height} returns @code{nil}. Otherwise, it returns
2694 a list @code{(@var{height} @var{vpos} @var{ypos} @var{offbot})},
2695 where @var{height} is the height in pixels of the visible part of the
2696 line, @var{vpos} and @var{ypos} are the vertical position in lines and
2697 pixels of the line relative to the top of the first text line, and
2698 @var{offbot} is the number of off-window pixels at the bottom of the
2699 text line. If there are off-window pixels at the top of the (first)
2700 text line, @var{ypos} is negative.
2701 @end defun
2702
2703 @node Textual Scrolling
2704 @section Textual Scrolling
2705 @cindex textual scrolling
2706 @cindex scrolling textually
2707
2708 @dfn{Textual scrolling} means moving the text up or down through a
2709 window. It works by changing the window's display-start location. It
2710 may also change the value of @code{window-point} to keep point on the
2711 screen (@pxref{Window Point}).
2712
2713 The basic textual scrolling functions are @code{scroll-up} (which
2714 scrolls forward) and @code{scroll-down} (which scrolls backward). In
2715 these function names, ``up'' and ``down'' refer to the direction of
2716 motion of the buffer text relative to the window. Imagine that the
2717 text is written on a long roll of paper and that the scrolling
2718 commands move the paper up and down. Thus, if you are looking at the
2719 middle of a buffer and repeatedly call @code{scroll-down}, you will
2720 eventually see the beginning of the buffer.
2721
2722 Some people have urged that the opposite convention be used: they
2723 imagine the window moving over text that remains in place, so that
2724 ``down'' commands take you to the end of the buffer. This convention
2725 is consistent with fact that such a command is bound to a key named
2726 @key{PageDown} on modern keyboards. We have not switched to this
2727 convention as that is likely to break existing Emacs Lisp code.
2728
2729 Textual scrolling functions (aside from @code{scroll-other-window})
2730 have unpredictable results if the current buffer is not the one
2731 displayed in the selected window. @xref{Current Buffer}.
2732
2733 If the window contains a row taller than the height of the window
2734 (for example in the presence of a large image), the scroll functions
2735 will adjust the window's vertical scroll position to scroll the
2736 partially visible row. Lisp callers can disable this feature by
2737 binding the variable @code{auto-window-vscroll} to @code{nil}
2738 (@pxref{Vertical Scrolling}).
2739
2740 @deffn Command scroll-up &optional count
2741 This function scrolls forward by @var{count} lines in the selected
2742 window.
2743
2744 If @var{count} is negative, it scrolls backward instead. If
2745 @var{count} is @code{nil} (or omitted), the distance scrolled is
2746 @code{next-screen-context-lines} lines less than the height of the
2747 window's text area.
2748
2749 If the selected window cannot be scrolled any further, this function
2750 signals an error. Otherwise, it returns @code{nil}.
2751 @end deffn
2752
2753 @deffn Command scroll-down &optional count
2754 This function scrolls backward by @var{count} lines in the selected
2755 window.
2756
2757 If @var{count} is negative, it scrolls forward instead. If
2758 @var{count} is omitted or @code{nil}, the distance scrolled is
2759 @code{next-screen-context-lines} lines less than the height of the
2760 window's text area.
2761
2762 If the selected window cannot be scrolled any further, this function
2763 signals an error. Otherwise, it returns @code{nil}.
2764 @end deffn
2765
2766 @deffn Command scroll-up-command &optional count
2767 This behaves like @code{scroll-up}, except that if the selected window
2768 cannot be scrolled any further and the value of the variable
2769 @code{scroll-error-top-bottom} is @code{t}, it tries to move to the
2770 end of the buffer instead. If point is already there, it signals an
2771 error.
2772 @end deffn
2773
2774 @deffn Command scroll-down-command &optional count
2775 This behaves like @code{scroll-down}, except that if the selected
2776 window cannot be scrolled any further and the value of the variable
2777 @code{scroll-error-top-bottom} is @code{t}, it tries to move to the
2778 beginning of the buffer instead. If point is already there, it
2779 signals an error.
2780 @end deffn
2781
2782 @deffn Command scroll-other-window &optional count
2783 This function scrolls the text in another window upward @var{count}
2784 lines. Negative values of @var{count}, or @code{nil}, are handled
2785 as in @code{scroll-up}.
2786
2787 You can specify which buffer to scroll by setting the variable
2788 @code{other-window-scroll-buffer} to a buffer. If that buffer isn't
2789 already displayed, @code{scroll-other-window} displays it in some
2790 window.
2791
2792 When the selected window is the minibuffer, the next window is normally
2793 the one at the top left corner. You can specify a different window to
2794 scroll, when the minibuffer is selected, by setting the variable
2795 @code{minibuffer-scroll-window}. This variable has no effect when any
2796 other window is selected. When it is non-@code{nil} and the
2797 minibuffer is selected, it takes precedence over
2798 @code{other-window-scroll-buffer}. @xref{Definition of
2799 minibuffer-scroll-window}.
2800
2801 When the minibuffer is active, it is the next window if the selected
2802 window is the one at the bottom right corner. In this case,
2803 @code{scroll-other-window} attempts to scroll the minibuffer. If the
2804 minibuffer contains just one line, it has nowhere to scroll to, so the
2805 line reappears after the echo area momentarily displays the message
2806 @samp{Beginning of buffer}.
2807 @end deffn
2808
2809 @defvar other-window-scroll-buffer
2810 If this variable is non-@code{nil}, it tells @code{scroll-other-window}
2811 which buffer's window to scroll.
2812 @end defvar
2813
2814 @defopt scroll-margin
2815 This option specifies the size of the scroll margin---a minimum number
2816 of lines between point and the top or bottom of a window. Whenever
2817 point gets within this many lines of the top or bottom of the window,
2818 redisplay scrolls the text automatically (if possible) to move point
2819 out of the margin, closer to the center of the window.
2820 @end defopt
2821
2822 @defopt scroll-conservatively
2823 This variable controls how scrolling is done automatically when point
2824 moves off the screen (or into the scroll margin). If the value is a
2825 positive integer @var{n}, then redisplay scrolls the text up to
2826 @var{n} lines in either direction, if that will bring point back into
2827 proper view. This behavior is called @dfn{conservative scrolling}.
2828 Otherwise, scrolling happens in the usual way, under the control of
2829 other variables such as @code{scroll-up-aggressively} and
2830 @code{scroll-down-aggressively}.
2831
2832 The default value is zero, which means that conservative scrolling
2833 never happens.
2834 @end defopt
2835
2836 @defopt scroll-down-aggressively
2837 The value of this variable should be either @code{nil} or a fraction
2838 @var{f} between 0 and 1. If it is a fraction, that specifies where on
2839 the screen to put point when scrolling down. More precisely, when a
2840 window scrolls down because point is above the window start, the new
2841 start position is chosen to put point @var{f} part of the window
2842 height from the top. The larger @var{f}, the more aggressive the
2843 scrolling.
2844
2845 A value of @code{nil} is equivalent to .5, since its effect is to center
2846 point. This variable automatically becomes buffer-local when set in any
2847 fashion.
2848 @end defopt
2849
2850 @defopt scroll-up-aggressively
2851 Likewise, for scrolling up. The value, @var{f}, specifies how far
2852 point should be placed from the bottom of the window; thus, as with
2853 @code{scroll-up-aggressively}, a larger value scrolls more aggressively.
2854 @end defopt
2855
2856 @defopt scroll-step
2857 This variable is an older variant of @code{scroll-conservatively}.
2858 The difference is that if its value is @var{n}, that permits scrolling
2859 only by precisely @var{n} lines, not a smaller number. This feature
2860 does not work with @code{scroll-margin}. The default value is zero.
2861 @end defopt
2862
2863 @cindex @code{scroll-command} property
2864 @defopt scroll-preserve-screen-position
2865 If this option is @code{t}, whenever a scrolling command moves point
2866 off-window, Emacs tries to adjust point to keep the cursor at its old
2867 vertical position in the window, rather than the window edge.
2868
2869 If the value is non-@code{nil} and not @code{t}, Emacs adjusts point
2870 to keep the cursor at the same vertical position, even if the
2871 scrolling command didn't move point off-window.
2872
2873 This option affects all scroll commands that have a non-@code{nil}
2874 @code{scroll-command} symbol property.
2875 @end defopt
2876
2877 @defopt next-screen-context-lines
2878 The value of this variable is the number of lines of continuity to
2879 retain when scrolling by full screens. For example, @code{scroll-up}
2880 with an argument of @code{nil} scrolls so that this many lines at the
2881 bottom of the window appear instead at the top. The default value is
2882 @code{2}.
2883 @end defopt
2884
2885 @defopt scroll-error-top-bottom
2886 If this option is @code{nil} (the default), @code{scroll-up-command}
2887 and @code{scroll-down-command} simply signal an error when no more
2888 scrolling is possible.
2889
2890 If the value is @code{t}, these commands instead move point to the
2891 beginning or end of the buffer (depending on scrolling direction);
2892 only if point is already on that position do they signal an error.
2893 @end defopt
2894
2895 @deffn Command recenter &optional count
2896 @cindex centering point
2897 This function scrolls the text in the selected window so that point is
2898 displayed at a specified vertical position within the window. It does
2899 not ``move point'' with respect to the text.
2900
2901 If @var{count} is a non-negative number, that puts the line containing
2902 point @var{count} lines down from the top of the window. If
2903 @var{count} is a negative number, then it counts upward from the
2904 bottom of the window, so that @minus{}1 stands for the last usable
2905 line in the window. If @var{count} is a non-@code{nil} list, then it
2906 stands for the line in the middle of the window.
2907
2908 If @var{count} is @code{nil}, @code{recenter} puts the line containing
2909 point in the middle of the window, then clears and redisplays the entire
2910 selected frame.
2911
2912 When @code{recenter} is called interactively, @var{count} is the raw
2913 prefix argument. Thus, typing @kbd{C-u} as the prefix sets the
2914 @var{count} to a non-@code{nil} list, while typing @kbd{C-u 4} sets
2915 @var{count} to 4, which positions the current line four lines from the
2916 top.
2917
2918 With an argument of zero, @code{recenter} positions the current line at
2919 the top of the window. This action is so handy that some people make a
2920 separate key binding to do this. For example,
2921
2922 @example
2923 @group
2924 (defun line-to-top-of-window ()
2925 "Scroll current line to top of window.
2926 Replaces three keystroke sequence C-u 0 C-l."
2927 (interactive)
2928 (recenter 0))
2929
2930 (global-set-key [kp-multiply] 'line-to-top-of-window)
2931 @end group
2932 @end example
2933 @end deffn
2934
2935 @node Vertical Scrolling
2936 @section Vertical Fractional Scrolling
2937 @cindex vertical fractional scrolling
2938 @cindex vertical scroll position
2939
2940 @dfn{Vertical fractional scrolling} means shifting text in a window
2941 up or down by a specified multiple or fraction of a line. Each window
2942 has a @dfn{vertical scroll position}, which is a number, never less than
2943 zero. It specifies how far to raise the contents of the window.
2944 Raising the window contents generally makes all or part of some lines
2945 disappear off the top, and all or part of some other lines appear at the
2946 bottom. The usual value is zero.
2947
2948 The vertical scroll position is measured in units of the normal line
2949 height, which is the height of the default font. Thus, if the value is
2950 .5, that means the window contents are scrolled up half the normal line
2951 height. If it is 3.3, that means the window contents are scrolled up
2952 somewhat over three times the normal line height.
2953
2954 What fraction of a line the vertical scrolling covers, or how many
2955 lines, depends on what the lines contain. A value of .5 could scroll a
2956 line whose height is very short off the screen, while a value of 3.3
2957 could scroll just part of the way through a tall line or an image.
2958
2959 @defun window-vscroll &optional window pixels-p
2960 This function returns the current vertical scroll position of
2961 @var{window}. The default for @var{window} is the selected window.
2962 If @var{pixels-p} is non-@code{nil}, the return value is measured in
2963 pixels, rather than in units of the normal line height.
2964
2965 @example
2966 @group
2967 (window-vscroll)
2968 @result{} 0
2969 @end group
2970 @end example
2971 @end defun
2972
2973 @defun set-window-vscroll window lines &optional pixels-p
2974 This function sets @var{window}'s vertical scroll position to
2975 @var{lines}. If @var{window} is @code{nil}, the selected window is
2976 used. The argument @var{lines} should be zero or positive; if not, it
2977 is taken as zero.
2978
2979
2980 The actual vertical scroll position must always correspond
2981 to an integral number of pixels, so the value you specify
2982 is rounded accordingly.
2983
2984 The return value is the result of this rounding.
2985
2986 @example
2987 @group
2988 (set-window-vscroll (selected-window) 1.2)
2989 @result{} 1.13
2990 @end group
2991 @end example
2992
2993 If @var{pixels-p} is non-@code{nil}, @var{lines} specifies a number of
2994 pixels. In this case, the return value is @var{lines}.
2995 @end defun
2996
2997 @defvar auto-window-vscroll
2998 If this variable is non-@code{nil}, the line-move, scroll-up, and
2999 scroll-down functions will automatically modify the vertical scroll
3000 position to scroll through display rows that are taller than the height
3001 of the window, for example in the presence of large images.
3002 @end defvar
3003
3004 @node Horizontal Scrolling
3005 @section Horizontal Scrolling
3006 @cindex horizontal scrolling
3007
3008 @dfn{Horizontal scrolling} means shifting the image in the window left
3009 or right by a specified multiple of the normal character width. Each
3010 window has a @dfn{horizontal scroll position}, which is a number, never
3011 less than zero. It specifies how far to shift the contents left.
3012 Shifting the window contents left generally makes all or part of some
3013 characters disappear off the left, and all or part of some other
3014 characters appear at the right. The usual value is zero.
3015
3016 The horizontal scroll position is measured in units of the normal
3017 character width, which is the width of space in the default font. Thus,
3018 if the value is 5, that means the window contents are scrolled left by 5
3019 times the normal character width. How many characters actually
3020 disappear off to the left depends on their width, and could vary from
3021 line to line.
3022
3023 Because we read from side to side in the ``inner loop,'' and from top
3024 to bottom in the ``outer loop,'' the effect of horizontal scrolling is
3025 not like that of textual or vertical scrolling. Textual scrolling
3026 involves selection of a portion of text to display, and vertical
3027 scrolling moves the window contents contiguously; but horizontal
3028 scrolling causes part of @emph{each line} to go off screen.
3029
3030 Usually, no horizontal scrolling is in effect; then the leftmost
3031 column is at the left edge of the window. In this state, scrolling to
3032 the right is meaningless, since there is no data to the left of the edge
3033 to be revealed by it; so this is not allowed. Scrolling to the left is
3034 allowed; it scrolls the first columns of text off the edge of the window
3035 and can reveal additional columns on the right that were truncated
3036 before. Once a window has a nonzero amount of leftward horizontal
3037 scrolling, you can scroll it back to the right, but only so far as to
3038 reduce the net horizontal scroll to zero. There is no limit to how far
3039 left you can scroll, but eventually all the text will disappear off the
3040 left edge.
3041
3042 @vindex auto-hscroll-mode
3043 If @code{auto-hscroll-mode} is set, redisplay automatically alters
3044 the horizontal scrolling of a window as necessary to ensure that point
3045 is always visible. However, you can still set the horizontal
3046 scrolling value explicitly. The value you specify serves as a lower
3047 bound for automatic scrolling, i.e. automatic scrolling will not
3048 scroll a window to a column less than the specified one.
3049
3050 @deffn Command scroll-left &optional count set-minimum
3051 This function scrolls the selected window @var{count} columns to the
3052 left (or to the right if @var{count} is negative). The default
3053 for @var{count} is the window width, minus 2.
3054
3055 The return value is the total amount of leftward horizontal scrolling in
3056 effect after the change---just like the value returned by
3057 @code{window-hscroll} (below).
3058
3059 Once you scroll a window as far right as it can go, back to its normal
3060 position where the total leftward scrolling is zero, attempts to scroll
3061 any farther right have no effect.
3062
3063 If @var{set-minimum} is non-@code{nil}, the new scroll amount becomes
3064 the lower bound for automatic scrolling; that is, automatic scrolling
3065 will not scroll a window to a column less than the value returned by
3066 this function. Interactive calls pass non-@code{nil} for
3067 @var{set-minimum}.
3068 @end deffn
3069
3070 @deffn Command scroll-right &optional count set-minimum
3071 This function scrolls the selected window @var{count} columns to the
3072 right (or to the left if @var{count} is negative). The default
3073 for @var{count} is the window width, minus 2. Aside from the direction
3074 of scrolling, this works just like @code{scroll-left}.
3075 @end deffn
3076
3077 @defun window-hscroll &optional window
3078 This function returns the total leftward horizontal scrolling of
3079 @var{window}---the number of columns by which the text in @var{window}
3080 is scrolled left past the left margin. The default for
3081 @var{window} is the selected window.
3082
3083 The return value is never negative. It is zero when no horizontal
3084 scrolling has been done in @var{window} (which is usually the case).
3085
3086
3087 @example
3088 @group
3089 (window-hscroll)
3090 @result{} 0
3091 @end group
3092 @group
3093 (scroll-left 5)
3094 @result{} 5
3095 @end group
3096 @group
3097 (window-hscroll)
3098 @result{} 5
3099 @end group
3100 @end example
3101 @end defun
3102
3103 @defun set-window-hscroll window columns
3104 This function sets horizontal scrolling of @var{window}. The value of
3105 @var{columns} specifies the amount of scrolling, in terms of columns
3106 from the left margin. The argument @var{columns} should be zero or
3107 positive; if not, it is taken as zero. Fractional values of
3108 @var{columns} are not supported at present.
3109
3110 Note that @code{set-window-hscroll} may appear not to work if you test
3111 it by evaluating a call with @kbd{M-:} in a simple way. What happens
3112 is that the function sets the horizontal scroll value and returns, but
3113 then redisplay adjusts the horizontal scrolling to make point visible,
3114 and this overrides what the function did. You can observe the
3115 function's effect if you call it while point is sufficiently far from
3116 the left margin that it will remain visible.
3117
3118 The value returned is @var{columns}.
3119
3120 @example
3121 @group
3122 (set-window-hscroll (selected-window) 10)
3123 @result{} 10
3124 @end group
3125 @end example
3126 @end defun
3127
3128 Here is how you can determine whether a given position @var{position}
3129 is off the screen due to horizontal scrolling:
3130
3131 @example
3132 @group
3133 (defun hscroll-on-screen (window position)
3134 (save-excursion
3135 (goto-char position)
3136 (and
3137 (>= (- (current-column) (window-hscroll window)) 0)
3138 (< (- (current-column) (window-hscroll window))
3139 (window-width window)))))
3140 @end group
3141 @end example
3142
3143
3144 @node Coordinates and Windows
3145 @section Coordinates and Windows
3146
3147 This section describes how to relate screen coordinates to windows.
3148
3149 @defun window-at x y &optional frame
3150 This function returns the window containing the specified cursor
3151 position in the frame @var{frame}. The coordinates @var{x} and @var{y}
3152 are measured in characters and count from the top left corner of the
3153 frame. If they are out of range, @code{window-at} returns @code{nil}.
3154
3155 If you omit @var{frame}, the selected frame is used.
3156 @end defun
3157
3158 @defun coordinates-in-window-p coordinates window
3159 This function checks whether a particular frame position falls within
3160 the window @var{window}.
3161
3162 The argument @var{coordinates} is a cons cell of the form @code{(@var{x}
3163 . @var{y})}. The coordinates @var{x} and @var{y} are measured in
3164 characters, and count from the top left corner of the screen or frame.
3165
3166 The value returned by @code{coordinates-in-window-p} is non-@code{nil}
3167 if the coordinates are inside @var{window}. The value also indicates
3168 what part of the window the position is in, as follows:
3169
3170 @table @code
3171 @item (@var{relx} . @var{rely})
3172 The coordinates are inside @var{window}. The numbers @var{relx} and
3173 @var{rely} are the equivalent window-relative coordinates for the
3174 specified position, counting from 0 at the top left corner of the
3175 window.
3176
3177 @item mode-line
3178 The coordinates are in the mode line of @var{window}.
3179
3180 @item header-line
3181 The coordinates are in the header line of @var{window}.
3182
3183 @item vertical-line
3184 The coordinates are in the vertical line between @var{window} and its
3185 neighbor to the right. This value occurs only if the window doesn't
3186 have a scroll bar; positions in a scroll bar are considered outside the
3187 window for these purposes.
3188
3189 @item left-fringe
3190 @itemx right-fringe
3191 The coordinates are in the left or right fringe of the window.
3192
3193 @item left-margin
3194 @itemx right-margin
3195 The coordinates are in the left or right margin of the window.
3196
3197 @item nil
3198 The coordinates are not in any part of @var{window}.
3199 @end table
3200
3201 The function @code{coordinates-in-window-p} does not require a frame as
3202 argument because it always uses the frame that @var{window} is on.
3203 @end defun
3204
3205
3206 @node Window Configurations
3207 @section Window Configurations
3208 @cindex window configurations
3209 @cindex saving window information
3210
3211 A @dfn{window configuration} records the entire layout of one
3212 frame---all windows, their sizes, which buffers they contain, how those
3213 buffers are scrolled, and their values of point and the mark; also their
3214 fringes, margins, and scroll bar settings. It also includes the value
3215 of @code{minibuffer-scroll-window}. As a special exception, the window
3216 configuration does not record the value of point in the selected window
3217 for the current buffer.
3218
3219 You can bring back an entire frame layout by restoring a previously
3220 saved window configuration. If you want to record the layout of all
3221 frames instead of just one, use a frame configuration instead of a
3222 window configuration; see @ref{Frame Configurations}.
3223
3224 @defun current-window-configuration &optional frame
3225 This function returns a new object representing @var{frame}'s current
3226 window configuration. The default for @var{frame} is the selected
3227 frame.
3228 @end defun
3229
3230 @defun set-window-configuration configuration
3231 This function restores the configuration of windows and buffers as
3232 specified by @var{configuration}, for the frame that @var{configuration}
3233 was created for.
3234
3235 The argument @var{configuration} must be a value that was previously
3236 returned by @code{current-window-configuration}. The configuration is
3237 restored in the frame from which @var{configuration} was made, whether
3238 that frame is selected or not. This always counts as a window size
3239 change and triggers execution of the @code{window-size-change-functions}
3240 (@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
3241 know how to tell whether the new configuration actually differs from the
3242 old one.
3243
3244 If the frame which @var{configuration} was saved from is dead, all this
3245 function does is restore the three variables @code{window-min-height},
3246 @code{window-min-width} and @code{minibuffer-scroll-window}. In this
3247 case, the function returns @code{nil}. Otherwise, it returns @code{t}.
3248
3249 Here is a way of using this function to get the same effect
3250 as @code{save-window-excursion}:
3251
3252 @example
3253 @group
3254 (let ((config (current-window-configuration)))
3255 (unwind-protect
3256 (progn (split-window-below nil)
3257 @dots{})
3258 (set-window-configuration config)))
3259 @end group
3260 @end example
3261 @end defun
3262
3263 @defspec save-window-excursion forms@dots{}
3264 This special form records the window configuration, executes @var{forms}
3265 in sequence, then restores the earlier window configuration. The window
3266 configuration includes, for each window, the value of point and the
3267 portion of the buffer that is visible. It also includes the choice of
3268 selected window. However, it does not include the value of point in
3269 the current buffer; use @code{save-excursion} also, if you wish to
3270 preserve that.
3271
3272 Don't use this construct when @code{save-selected-window} is sufficient.
3273
3274 Exit from @code{save-window-excursion} always triggers execution of
3275 @code{window-size-change-functions}. (It doesn't know how to tell
3276 whether the restored configuration actually differs from the one in
3277 effect at the end of the @var{forms}.)
3278
3279 The return value is the value of the final form in @var{forms}.
3280 For example:
3281
3282 @example
3283 @group
3284 (split-window)
3285 @result{} #<window 25 on control.texi>
3286 @end group
3287 @group
3288 (setq w (selected-window))
3289 @result{} #<window 19 on control.texi>
3290 @end group
3291 @group
3292 (save-window-excursion
3293 (delete-other-windows w)
3294 (switch-to-buffer "foo")
3295 'do-something)
3296 @result{} do-something
3297 ;; @r{The screen is now split again.}
3298 @end group
3299 @end example
3300 @end defspec
3301
3302 @defun window-configuration-p object
3303 This function returns @code{t} if @var{object} is a window configuration.
3304 @end defun
3305
3306 @defun compare-window-configurations config1 config2
3307 This function compares two window configurations as regards the
3308 structure of windows, but ignores the values of point and mark and the
3309 saved scrolling positions---it can return @code{t} even if those
3310 aspects differ.
3311
3312 The function @code{equal} can also compare two window configurations; it
3313 regards configurations as unequal if they differ in any respect, even a
3314 saved point or mark.
3315 @end defun
3316
3317 @defun window-configuration-frame config
3318 This function returns the frame for which the window configuration
3319 @var{config} was made.
3320 @end defun
3321
3322 Other primitives to look inside of window configurations would make
3323 sense, but are not implemented because we did not need them. See the
3324 file @file{winner.el} for some more operations on windows
3325 configurations.
3326
3327 The objects returned by @code{current-window-configuration} die
3328 together with the Emacs process. In order to store a window
3329 configuration on disk and read it back in another Emacs session the
3330 following two functions can be used.
3331
3332 @defun window-state-get &optional window markers
3333 This function returns the state of @var{window} as a Lisp object. The
3334 argument @var{window} can be any window and defaults to the root window
3335 of the selected frame.
3336
3337 The optional argument @var{markers} non-@code{nil} means to use markers
3338 for sampling positions like @code{window-point} or @code{window-start}.
3339 This argument should be non-@code{nil} only if the value is used for
3340 putting the state back in the same session since markers slow down
3341 processing.
3342 @end defun
3343
3344 The value returned by @code{window-state-get} can be converted by using
3345 one of the functions defined by Desktop Save Mode (@pxref{Desktop Save
3346 Mode}) to an object that can be written to a file. Such objects can be
3347 read back and converted to a Lisp object representing the state of the
3348 window. That Lisp object can be used as argument for the following
3349 function in order to restore the state window in another window.
3350
3351 @defun window-state-put state &optional window ignore
3352 This function puts the window state @var{state} into @var{window}. The
3353 argument @var{state} should be the state of a window returned by an
3354 earlier invocation of @code{window-state-get}, see above. The optional
3355 argument @var{window} must specify a live window and defaults to the
3356 selected one.
3357
3358 The optional argument @var{ignore} non-@code{nil} means to ignore
3359 minimum window sizes and fixed size restrictions. If @var{ignore}
3360 equals @code{safe}, this means windows can get as small as one line
3361 and/or two columns.
3362 @end defun
3363
3364
3365 @node Window Parameters
3366 @section Window Parameters
3367 @cindex window parameters
3368
3369 This section describes how window parameters can be used to associate
3370 additional information with windows.
3371
3372 @defun window-parameter window parameter
3373 This function returns @var{window}'s value for @var{parameter}. The
3374 default for @var{window} is the selected window. If @var{window} has no
3375 setting for @var{parameter}, this function returns @code{nil}.
3376 @end defun
3377
3378 @defun window-parameters &optional window
3379 This function returns all parameters of @var{window} and their values.
3380 The default for @var{window} is the selected window. The return value,
3381 if non-@code{nil} is an association list whose elements have the form
3382 @code{(@var{parameter} . @var{value})}.
3383 @end defun
3384
3385 @defun set-window-parameter window parameter value
3386 This function sets @var{window}'s value of @var{parameter} to
3387 @var{value} and returns @var{value}. The default for @var{window}
3388 is the selected window.
3389 @end defun
3390
3391 Some functions, notably @code{delete-window},
3392 @code{delete-other-windows} and @code{split-window} may behave specially
3393 when their @var{window} argument has a parameter set. You can override
3394 such special behavior by binding the following variable to a
3395 non-@code{nil} value:
3396
3397 @defvar ignore-window-parameters
3398 If this variable is non-@code{nil}, some standard functions do not
3399 process window parameters. The functions currently affected by this are
3400 @code{split-window}, @code{delete-window}, @code{delete-other-windows}
3401 and @code{other-window}.
3402
3403 An application can bind this variable to a non-@code{nil} value around
3404 calls to these functions. If it does so, the application is fully
3405 responsible for correctly assigning the parameters of all involved
3406 windows when exiting that function.
3407 @end defvar
3408
3409 The following parameters are currently used by the window management
3410 code.
3411
3412 @table @asis
3413 @item @code{delete-window}
3414 This parameter affects the execution of @code{delete-window}
3415 (@pxref{Deleting Windows}).
3416
3417 @item @code{delete-other-windows}
3418 This parameter affects the execution of @code{delete-other-windows}
3419 (@pxref{Deleting Windows}).
3420
3421 @item @code{split-window}
3422 This parameter affects the execution of @code{split-window}
3423 (@pxref{Splitting Windows}).
3424
3425 @item @code{other-window}
3426 This parameter affects the execution of @code{other-window}
3427 (@pxref{Cyclic Window Ordering}).
3428
3429 @item @code{no-other-window}
3430 This parameter marks the window as not selectable by @code{other-window}
3431 (@pxref{Cyclic Window Ordering}).
3432 @end table
3433
3434 In addition, the parameters @code{window-atom} and @code{window-side}
3435 are reserved and should not be used by applications. The
3436 @code{quit-restore} parameter tells how to proceed with a window when
3437 the buffer it shows is no more needed. This parameter is installed by
3438 the buffer display functions (@pxref{Choosing Window}) and consulted by
3439 the function @code{quit-window} (@pxref{Quitting Windows}).
3440
3441
3442 @node Window Hooks
3443 @section Hooks for Window Scrolling and Changes
3444 @cindex hooks for window operations
3445
3446 This section describes how a Lisp program can take action whenever a
3447 window displays a different part of its buffer or a different buffer.
3448 There are three actions that can change this: scrolling the window,
3449 switching buffers in the window, and changing the size of the window.
3450 The first two actions run @code{window-scroll-functions}; the last runs
3451 @code{window-size-change-functions}.
3452
3453 @defvar window-scroll-functions
3454 This variable holds a list of functions that Emacs should call before
3455 redisplaying a window with scrolling. Displaying a different buffer in
3456 the window also runs these functions.
3457
3458 This variable is not a normal hook, because each function is called with
3459 two arguments: the window, and its new display-start position.
3460
3461 These functions must be careful in using @code{window-end}
3462 (@pxref{Window Start and End}); if you need an up-to-date value, you
3463 must use the @var{update} argument to ensure you get it.
3464
3465 @strong{Warning:} don't use this feature to alter the way the window
3466 is scrolled. It's not designed for that, and such use probably won't
3467 work.
3468 @end defvar
3469
3470 @defvar window-size-change-functions
3471 This variable holds a list of functions to be called if the size of any
3472 window changes for any reason. The functions are called just once per
3473 redisplay, and just once for each frame on which size changes have
3474 occurred.
3475
3476 Each function receives the frame as its sole argument. There is no
3477 direct way to find out which windows on that frame have changed size, or
3478 precisely how. However, if a size-change function records, at each
3479 call, the existing windows and their sizes, it can also compare the
3480 present sizes and the previous sizes.
3481
3482 Creating or deleting windows counts as a size change, and therefore
3483 causes these functions to be called. Changing the frame size also
3484 counts, because it changes the sizes of the existing windows.
3485
3486 It is not a good idea to use @code{save-window-excursion} (@pxref{Window
3487 Configurations}) in these functions, because that always counts as a
3488 size change, and it would cause these functions to be called over and
3489 over. In most cases, @code{save-selected-window} (@pxref{Selecting
3490 Windows}) is what you need here.
3491 @end defvar
3492
3493 @defvar window-configuration-change-hook
3494 A normal hook that is run every time you change the window configuration
3495 of an existing frame. This includes splitting or deleting windows,
3496 changing the sizes of windows, or displaying a different buffer in a
3497 window.
3498
3499 The buffer-local part of this hook is run once per each window on the
3500 affected frame, with the relevant window selected and its buffer
3501 current. The global part is run once for the modified frame, with that
3502 frame selected.
3503 @end defvar
3504
3505 In addition, you can use @code{jit-lock-register} to register a Font
3506 Lock fontification function, which will be called whenever parts of a
3507 buffer are (re)fontified because a window was scrolled or its size
3508 changed. @xref{Other Font Lock Variables}.