annotate man/windows.texi @ 42374:0f5f05b4b9c0

(notice_overwritten_cursor): Don't depend on output_cursor and updated_area. Compare pixel coordinates with window's cursor pixel coordinates. (x_draw_glyphs, x_clear_end_of_line, show_mouse_face): Call notice_overwritten_cursor with new arg list. (show_mouse_face): Fix bug setting a row's mouse_face_p flag unconditionally.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 28 Dec 2001 13:33:37 +0000
parents 3b40423b9355
children 19cf9993da08
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 @c This is part of the Emacs manual.
39287
3b40423b9355 Update the copyright years.
Eli Zaretskii <eliz@gnu.org>
parents: 39268
diff changeset
2 @c Copyright (C) 1985,86,87,93,94,95,97,2000,2001 Free Software Foundation, Inc.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
3 @c See file emacs.texi for copying conditions.
Dave Love <fx@gnu.org>
parents:
diff changeset
4 @node Windows, Frames, Buffers, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
5 @chapter Multiple Windows
Dave Love <fx@gnu.org>
parents:
diff changeset
6 @cindex windows in Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
7 @cindex multiple windows in Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
8
Dave Love <fx@gnu.org>
parents:
diff changeset
9 Emacs can split a frame into two or many windows. Multiple windows
Dave Love <fx@gnu.org>
parents:
diff changeset
10 can display parts of different buffers, or different parts of one
Dave Love <fx@gnu.org>
parents:
diff changeset
11 buffer. Multiple frames always imply multiple windows, because each
Dave Love <fx@gnu.org>
parents:
diff changeset
12 frame has its own set of windows. Each window belongs to one and only
Dave Love <fx@gnu.org>
parents:
diff changeset
13 one frame.
Dave Love <fx@gnu.org>
parents:
diff changeset
14
Dave Love <fx@gnu.org>
parents:
diff changeset
15 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
16 * Basic Window:: Introduction to Emacs windows.
Dave Love <fx@gnu.org>
parents:
diff changeset
17 * Split Window:: New windows are made by splitting existing windows.
Dave Love <fx@gnu.org>
parents:
diff changeset
18 * Other Window:: Moving to another window or doing something to it.
Dave Love <fx@gnu.org>
parents:
diff changeset
19 * Pop Up Window:: Finding a file or buffer in another window.
Dave Love <fx@gnu.org>
parents:
diff changeset
20 * Force Same Window:: Forcing certain buffers to appear in the selected
Dave Love <fx@gnu.org>
parents:
diff changeset
21 window rather than in another window.
Dave Love <fx@gnu.org>
parents:
diff changeset
22 * Change Window:: Deleting windows and changing their sizes.
28551
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
23 * Window Convenience:: Convenience functions for window handling.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
24 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
25
Dave Love <fx@gnu.org>
parents:
diff changeset
26 @node Basic Window
Dave Love <fx@gnu.org>
parents:
diff changeset
27 @section Concepts of Emacs Windows
Dave Love <fx@gnu.org>
parents:
diff changeset
28
Dave Love <fx@gnu.org>
parents:
diff changeset
29 Each Emacs window displays one Emacs buffer at any time. A single
Dave Love <fx@gnu.org>
parents:
diff changeset
30 buffer may appear in more than one window; if it does, any changes in
Dave Love <fx@gnu.org>
parents:
diff changeset
31 its text are displayed in all the windows where it appears. But the
Dave Love <fx@gnu.org>
parents:
diff changeset
32 windows showing the same buffer can show different parts of it, because
Dave Love <fx@gnu.org>
parents:
diff changeset
33 each window has its own value of point.
Dave Love <fx@gnu.org>
parents:
diff changeset
34
Dave Love <fx@gnu.org>
parents:
diff changeset
35 @cindex selected window
Dave Love <fx@gnu.org>
parents:
diff changeset
36 At any time, one of the windows is the @dfn{selected window}; the
Dave Love <fx@gnu.org>
parents:
diff changeset
37 buffer this window is displaying is the current buffer. The terminal's
Dave Love <fx@gnu.org>
parents:
diff changeset
38 cursor shows the location of point in this window. Each other window
Dave Love <fx@gnu.org>
parents:
diff changeset
39 has a location of point as well, but since the terminal has only one
Dave Love <fx@gnu.org>
parents:
diff changeset
40 cursor there is no way to show where those locations are. When multiple
35188
94d46968a93f Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents: 34565
diff changeset
41 frames are visible in X, each frame has a cursor which appears in the
94d46968a93f Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents: 34565
diff changeset
42 frame's selected window. The cursor in the selected frame is solid; the
94d46968a93f Don't say "X Windows". From Colin Walters <walters@cis.ohio-state.edu>.
Eli Zaretskii <eliz@gnu.org>
parents: 34565
diff changeset
43 cursor in other frames is a hollow box.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
44
Dave Love <fx@gnu.org>
parents:
diff changeset
45 Commands to move point affect the value of point for the selected Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
46 window only. They do not change the value of point in any other Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
47 window, even one showing the same buffer. The same is true for commands
37986
e11682cc1516 selected buffer => current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 37121
diff changeset
48 such as @kbd{C-x b} to change the current buffer in the selected window;
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
49 they do not affect other windows at all. However, there are other commands
Dave Love <fx@gnu.org>
parents:
diff changeset
50 such as @kbd{C-x 4 b} that select a different window and switch buffers in
Dave Love <fx@gnu.org>
parents:
diff changeset
51 it. Also, all commands that display information in a window, including
Dave Love <fx@gnu.org>
parents:
diff changeset
52 (for example) @kbd{C-h f} (@code{describe-function}) and @kbd{C-x C-b}
Dave Love <fx@gnu.org>
parents:
diff changeset
53 (@code{list-buffers}), work by switching buffers in a nonselected window
Dave Love <fx@gnu.org>
parents:
diff changeset
54 without affecting the selected window.
Dave Love <fx@gnu.org>
parents:
diff changeset
55
Dave Love <fx@gnu.org>
parents:
diff changeset
56 When multiple windows show the same buffer, they can have different
Dave Love <fx@gnu.org>
parents:
diff changeset
57 regions, because they can have different values of point. However,
Dave Love <fx@gnu.org>
parents:
diff changeset
58 they all have the same value for the mark, because each buffer has
Dave Love <fx@gnu.org>
parents:
diff changeset
59 only one mark position.
Dave Love <fx@gnu.org>
parents:
diff changeset
60
Dave Love <fx@gnu.org>
parents:
diff changeset
61 Each window has its own mode line, which displays the buffer name,
Dave Love <fx@gnu.org>
parents:
diff changeset
62 modification status and major and minor modes of the buffer that is
Dave Love <fx@gnu.org>
parents:
diff changeset
63 displayed in the window. @xref{Mode Line}, for full details on the mode
Dave Love <fx@gnu.org>
parents:
diff changeset
64 line.
Dave Love <fx@gnu.org>
parents:
diff changeset
65
Dave Love <fx@gnu.org>
parents:
diff changeset
66 @iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
67 @break
Dave Love <fx@gnu.org>
parents:
diff changeset
68 @end iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
69
Dave Love <fx@gnu.org>
parents:
diff changeset
70 @node Split Window
Dave Love <fx@gnu.org>
parents:
diff changeset
71 @section Splitting Windows
Dave Love <fx@gnu.org>
parents:
diff changeset
72
Dave Love <fx@gnu.org>
parents:
diff changeset
73 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
74 @item C-x 2
Dave Love <fx@gnu.org>
parents:
diff changeset
75 Split the selected window into two windows, one above the other
Dave Love <fx@gnu.org>
parents:
diff changeset
76 (@code{split-window-vertically}).
Dave Love <fx@gnu.org>
parents:
diff changeset
77 @item C-x 3
Dave Love <fx@gnu.org>
parents:
diff changeset
78 Split the selected window into two windows positioned side by side
Dave Love <fx@gnu.org>
parents:
diff changeset
79 (@code{split-window-horizontally}).
Dave Love <fx@gnu.org>
parents:
diff changeset
80 @item C-Mouse-2
Dave Love <fx@gnu.org>
parents:
diff changeset
81 In the mode line or scroll bar of a window, split that window.
Dave Love <fx@gnu.org>
parents:
diff changeset
82 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
83
Dave Love <fx@gnu.org>
parents:
diff changeset
84 @kindex C-x 2
Dave Love <fx@gnu.org>
parents:
diff changeset
85 @findex split-window-vertically
Dave Love <fx@gnu.org>
parents:
diff changeset
86 The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the
Dave Love <fx@gnu.org>
parents:
diff changeset
87 selected window into two windows, one above the other. Both windows start
Dave Love <fx@gnu.org>
parents:
diff changeset
88 out displaying the same buffer, with the same value of point. By default
Dave Love <fx@gnu.org>
parents:
diff changeset
89 the two windows each get half the height of the window that was split; a
Dave Love <fx@gnu.org>
parents:
diff changeset
90 numeric argument specifies how many lines to give to the top window.
Dave Love <fx@gnu.org>
parents:
diff changeset
91
Dave Love <fx@gnu.org>
parents:
diff changeset
92 @kindex C-x 3
Dave Love <fx@gnu.org>
parents:
diff changeset
93 @findex split-window-horizontally
Dave Love <fx@gnu.org>
parents:
diff changeset
94 @kbd{C-x 3} (@code{split-window-horizontally}) breaks the selected
Dave Love <fx@gnu.org>
parents:
diff changeset
95 window into two side-by-side windows. A numeric argument specifies how
Dave Love <fx@gnu.org>
parents:
diff changeset
96 many columns to give the one on the left. A line of vertical bars
Dave Love <fx@gnu.org>
parents:
diff changeset
97 separates the two windows. Windows that are not the full width of the
Dave Love <fx@gnu.org>
parents:
diff changeset
98 screen have mode lines, but they are truncated. On terminals where
Dave Love <fx@gnu.org>
parents:
diff changeset
99 Emacs does not support highlighting, truncated mode lines sometimes do
Dave Love <fx@gnu.org>
parents:
diff changeset
100 not appear in inverse video.
Dave Love <fx@gnu.org>
parents:
diff changeset
101
Dave Love <fx@gnu.org>
parents:
diff changeset
102 @kindex C-Mouse-2 @r{(scroll bar)}
Dave Love <fx@gnu.org>
parents:
diff changeset
103 You can split a window horizontally or vertically by clicking
37121
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
104 @kbd{C-Mouse-2} in the mode line or the scroll bar. (This does not
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
105 work in scroll bars implemented by X toolkits.) The line of splitting
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
106 goes through the place where you click: if you click on the mode line,
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
107 the new scroll bar goes above the spot; if you click in the scroll
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
108 bar, the mode line of the split window is side by side with your
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
109 click.
Dave Love <fx@gnu.org>
parents:
diff changeset
110
Dave Love <fx@gnu.org>
parents:
diff changeset
111 @vindex truncate-partial-width-windows
Dave Love <fx@gnu.org>
parents:
diff changeset
112 When a window is less than the full width, text lines too long to fit are
Dave Love <fx@gnu.org>
parents:
diff changeset
113 frequent. Continuing all those lines might be confusing. The variable
Dave Love <fx@gnu.org>
parents:
diff changeset
114 @code{truncate-partial-width-windows} can be set non-@code{nil} to force
Dave Love <fx@gnu.org>
parents:
diff changeset
115 truncation in all windows less than the full width of the screen,
Dave Love <fx@gnu.org>
parents:
diff changeset
116 independent of the buffer being displayed and its value for
Dave Love <fx@gnu.org>
parents:
diff changeset
117 @code{truncate-lines}. @xref{Continuation Lines}.@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
118
Dave Love <fx@gnu.org>
parents:
diff changeset
119 Horizontal scrolling is often used in side-by-side windows.
Dave Love <fx@gnu.org>
parents:
diff changeset
120 @xref{Display}.
Dave Love <fx@gnu.org>
parents:
diff changeset
121
Dave Love <fx@gnu.org>
parents:
diff changeset
122 @vindex split-window-keep-point
37121
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
123 If @code{split-window-keep-point} is non-@code{nil}, the default,
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
124 both of the windows resulting from @kbd{C-x 2} inherit the value of
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
125 point from the window that was split. This means that scrolling is
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
126 inevitable. If this variable is @code{nil}, then @kbd{C-x 2} tries to
37121
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
127 avoid scrolling the text currently visible on the screen, by putting
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
128 point in each window at a position already visible in the window. It
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
129 also selects whichever window contain the screen line that the cursor
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
130 was previously on. Some users prefer the latter mode on slow
f9bd7ef13ddb Minor changes.
Richard M. Stallman <rms@gnu.org>
parents: 36875
diff changeset
131 terminals.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
132
Dave Love <fx@gnu.org>
parents:
diff changeset
133 @node Other Window
Dave Love <fx@gnu.org>
parents:
diff changeset
134 @section Using Other Windows
Dave Love <fx@gnu.org>
parents:
diff changeset
135
Dave Love <fx@gnu.org>
parents:
diff changeset
136 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
137 @item C-x o
Dave Love <fx@gnu.org>
parents:
diff changeset
138 Select another window (@code{other-window}). That is @kbd{o}, not zero.
Dave Love <fx@gnu.org>
parents:
diff changeset
139 @item C-M-v
Dave Love <fx@gnu.org>
parents:
diff changeset
140 Scroll the next window (@code{scroll-other-window}).
Dave Love <fx@gnu.org>
parents:
diff changeset
141 @item M-x compare-windows
Dave Love <fx@gnu.org>
parents:
diff changeset
142 Find next place where the text in the selected window does not match
Dave Love <fx@gnu.org>
parents:
diff changeset
143 the text in the next window.
Dave Love <fx@gnu.org>
parents:
diff changeset
144 @item Mouse-1
Dave Love <fx@gnu.org>
parents:
diff changeset
145 @kbd{Mouse-1}, in a window's mode line, selects that window
Dave Love <fx@gnu.org>
parents:
diff changeset
146 but does not move point in it (@code{mouse-select-window}).
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
148
Dave Love <fx@gnu.org>
parents:
diff changeset
149 @kindex C-x o
Dave Love <fx@gnu.org>
parents:
diff changeset
150 @findex other-window
Dave Love <fx@gnu.org>
parents:
diff changeset
151 To select a different window, click with @kbd{Mouse-1} on its mode
Dave Love <fx@gnu.org>
parents:
diff changeset
152 line. With the keyboard, you can switch windows by typing @kbd{C-x o}
36185
62cf166239f3 Change in quoting.
Richard M. Stallman <rms@gnu.org>
parents: 36182
diff changeset
153 (@code{other-window}). That is an @kbd{o}, for ``other,'' not a zero.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
154 When there are more than two windows, this command moves through all the
Dave Love <fx@gnu.org>
parents:
diff changeset
155 windows in a cyclic order, generally top to bottom and left to right.
Dave Love <fx@gnu.org>
parents:
diff changeset
156 After the rightmost and bottommost window, it goes back to the one at
Dave Love <fx@gnu.org>
parents:
diff changeset
157 the upper left corner. A numeric argument means to move several steps
Dave Love <fx@gnu.org>
parents:
diff changeset
158 in the cyclic order of windows. A negative argument moves around the
Dave Love <fx@gnu.org>
parents:
diff changeset
159 cycle in the opposite order. When the minibuffer is active, the
Dave Love <fx@gnu.org>
parents:
diff changeset
160 minibuffer is the last window in the cycle; you can switch from the
Dave Love <fx@gnu.org>
parents:
diff changeset
161 minibuffer window to one of the other windows, and later switch back and
Dave Love <fx@gnu.org>
parents:
diff changeset
162 finish supplying the minibuffer argument that is requested.
Dave Love <fx@gnu.org>
parents:
diff changeset
163 @xref{Minibuffer Edit}.
Dave Love <fx@gnu.org>
parents:
diff changeset
164
Dave Love <fx@gnu.org>
parents:
diff changeset
165 @kindex C-M-v
Dave Love <fx@gnu.org>
parents:
diff changeset
166 @findex scroll-other-window
Dave Love <fx@gnu.org>
parents:
diff changeset
167 The usual scrolling commands (@pxref{Display}) apply to the selected
Dave Love <fx@gnu.org>
parents:
diff changeset
168 window only, but there is one command to scroll the next window.
Dave Love <fx@gnu.org>
parents:
diff changeset
169 @kbd{C-M-v} (@code{scroll-other-window}) scrolls the window that
Dave Love <fx@gnu.org>
parents:
diff changeset
170 @kbd{C-x o} would select. It takes arguments, positive and negative,
Dave Love <fx@gnu.org>
parents:
diff changeset
171 like @kbd{C-v}. (In the minibuffer, @kbd{C-M-v} scrolls the window
Dave Love <fx@gnu.org>
parents:
diff changeset
172 that contains the minibuffer help display, if any, rather than the
Dave Love <fx@gnu.org>
parents:
diff changeset
173 next window in the standard cyclic order.)
Dave Love <fx@gnu.org>
parents:
diff changeset
174
Dave Love <fx@gnu.org>
parents:
diff changeset
175 The command @kbd{M-x compare-windows} lets you compare two files or
Dave Love <fx@gnu.org>
parents:
diff changeset
176 buffers visible in two windows, by moving through them to the next
Dave Love <fx@gnu.org>
parents:
diff changeset
177 mismatch. @xref{Comparing Files}, for details.
Dave Love <fx@gnu.org>
parents:
diff changeset
178
Dave Love <fx@gnu.org>
parents:
diff changeset
179 @node Pop Up Window
Dave Love <fx@gnu.org>
parents:
diff changeset
180 @section Displaying in Another Window
Dave Love <fx@gnu.org>
parents:
diff changeset
181
Dave Love <fx@gnu.org>
parents:
diff changeset
182 @cindex selecting buffers in other windows
Dave Love <fx@gnu.org>
parents:
diff changeset
183 @kindex C-x 4
Dave Love <fx@gnu.org>
parents:
diff changeset
184 @kbd{C-x 4} is a prefix key for commands that select another window
Dave Love <fx@gnu.org>
parents:
diff changeset
185 (splitting the window if there is only one) and select a buffer in that
Dave Love <fx@gnu.org>
parents:
diff changeset
186 window. Different @kbd{C-x 4} commands have different ways of finding the
Dave Love <fx@gnu.org>
parents:
diff changeset
187 buffer to select.
Dave Love <fx@gnu.org>
parents:
diff changeset
188
Dave Love <fx@gnu.org>
parents:
diff changeset
189 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
190 @item C-x 4 b @var{bufname} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
191 Select buffer @var{bufname} in another window. This runs
Dave Love <fx@gnu.org>
parents:
diff changeset
192 @code{switch-to-buffer-other-window}.
Dave Love <fx@gnu.org>
parents:
diff changeset
193 @item C-x 4 C-o @var{bufname} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
194 Display buffer @var{bufname} in another window, but
Dave Love <fx@gnu.org>
parents:
diff changeset
195 don't select that buffer or that window. This runs
Dave Love <fx@gnu.org>
parents:
diff changeset
196 @code{display-buffer}.
Dave Love <fx@gnu.org>
parents:
diff changeset
197 @item C-x 4 f @var{filename} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
198 Visit file @var{filename} and select its buffer in another window. This
Dave Love <fx@gnu.org>
parents:
diff changeset
199 runs @code{find-file-other-window}. @xref{Visiting}.
Dave Love <fx@gnu.org>
parents:
diff changeset
200 @item C-x 4 d @var{directory} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
201 Select a Dired buffer for directory @var{directory} in another window.
Dave Love <fx@gnu.org>
parents:
diff changeset
202 This runs @code{dired-other-window}. @xref{Dired}.
Dave Love <fx@gnu.org>
parents:
diff changeset
203 @item C-x 4 m
Dave Love <fx@gnu.org>
parents:
diff changeset
204 Start composing a mail message in another window. This runs
Dave Love <fx@gnu.org>
parents:
diff changeset
205 @code{mail-other-window}; its same-window analogue is @kbd{C-x m}
Dave Love <fx@gnu.org>
parents:
diff changeset
206 (@pxref{Sending Mail}).
Dave Love <fx@gnu.org>
parents:
diff changeset
207 @item C-x 4 .
Dave Love <fx@gnu.org>
parents:
diff changeset
208 Find a tag in the current tags table, in another window. This runs
Dave Love <fx@gnu.org>
parents:
diff changeset
209 @code{find-tag-other-window}, the multiple-window variant of @kbd{M-.}
Dave Love <fx@gnu.org>
parents:
diff changeset
210 (@pxref{Tags}).
Dave Love <fx@gnu.org>
parents:
diff changeset
211 @item C-x 4 r @var{filename} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
212 Visit file @var{filename} read-only, and select its buffer in another
Dave Love <fx@gnu.org>
parents:
diff changeset
213 window. This runs @code{find-file-read-only-other-window}.
Dave Love <fx@gnu.org>
parents:
diff changeset
214 @xref{Visiting}.
Dave Love <fx@gnu.org>
parents:
diff changeset
215 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
216
Dave Love <fx@gnu.org>
parents:
diff changeset
217 @node Force Same Window
Dave Love <fx@gnu.org>
parents:
diff changeset
218 @section Forcing Display in the Same Window
Dave Love <fx@gnu.org>
parents:
diff changeset
219
Dave Love <fx@gnu.org>
parents:
diff changeset
220 Certain Emacs commands switch to a specific buffer with special
Dave Love <fx@gnu.org>
parents:
diff changeset
221 contents. For example, @kbd{M-x shell} switches to a buffer named
Dave Love <fx@gnu.org>
parents:
diff changeset
222 @samp{*Shell*}. By convention, all these commands are written to pop up
Dave Love <fx@gnu.org>
parents:
diff changeset
223 the buffer in a separate window. But you can specify that certain of
Dave Love <fx@gnu.org>
parents:
diff changeset
224 these buffers should appear in the selected window.
Dave Love <fx@gnu.org>
parents:
diff changeset
225
Dave Love <fx@gnu.org>
parents:
diff changeset
226 @vindex same-window-buffer-names
Dave Love <fx@gnu.org>
parents:
diff changeset
227 If you add a buffer name to the list @code{same-window-buffer-names},
Dave Love <fx@gnu.org>
parents:
diff changeset
228 the effect is that such commands display that particular buffer by
Dave Love <fx@gnu.org>
parents:
diff changeset
229 switching to it in the selected window. For example, if you add the
Dave Love <fx@gnu.org>
parents:
diff changeset
230 element @code{"*grep*"} to the list, the @code{grep} command will
Dave Love <fx@gnu.org>
parents:
diff changeset
231 display its output buffer in the selected window.
Dave Love <fx@gnu.org>
parents:
diff changeset
232
Dave Love <fx@gnu.org>
parents:
diff changeset
233 The default value of @code{same-window-buffer-names} is not
Dave Love <fx@gnu.org>
parents:
diff changeset
234 @code{nil}: it specifies buffer names @samp{*info*}, @samp{*mail*} and
Dave Love <fx@gnu.org>
parents:
diff changeset
235 @samp{*shell*} (as well as others used by more obscure Emacs packages).
Dave Love <fx@gnu.org>
parents:
diff changeset
236 This is why @kbd{M-x shell} normally switches to the @samp{*shell*}
Dave Love <fx@gnu.org>
parents:
diff changeset
237 buffer in the selected window. If you delete this element from the
Dave Love <fx@gnu.org>
parents:
diff changeset
238 value of @code{same-window-buffer-names}, the behavior of @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
239 shell} will change---it will pop up the buffer in another window
Dave Love <fx@gnu.org>
parents:
diff changeset
240 instead.
Dave Love <fx@gnu.org>
parents:
diff changeset
241
Dave Love <fx@gnu.org>
parents:
diff changeset
242 @vindex same-window-regexps
Dave Love <fx@gnu.org>
parents:
diff changeset
243 You can specify these buffers more generally with the variable
Dave Love <fx@gnu.org>
parents:
diff changeset
244 @code{same-window-regexps}. Set it to a list of regular expressions;
Dave Love <fx@gnu.org>
parents:
diff changeset
245 then any buffer whose name matches one of those regular expressions is
Dave Love <fx@gnu.org>
parents:
diff changeset
246 displayed by switching to it in the selected window. (Once again, this
Dave Love <fx@gnu.org>
parents:
diff changeset
247 applies only to buffers that normally get displayed for you in a
Dave Love <fx@gnu.org>
parents:
diff changeset
248 separate window.) The default value of this variable specifies Telnet
Dave Love <fx@gnu.org>
parents:
diff changeset
249 and rlogin buffers.
Dave Love <fx@gnu.org>
parents:
diff changeset
250
Dave Love <fx@gnu.org>
parents:
diff changeset
251 An analogous feature lets you specify buffers which should be
Dave Love <fx@gnu.org>
parents:
diff changeset
252 displayed in their own individual frames. @xref{Special Buffer Frames}.
Dave Love <fx@gnu.org>
parents:
diff changeset
253
Dave Love <fx@gnu.org>
parents:
diff changeset
254 @node Change Window
Dave Love <fx@gnu.org>
parents:
diff changeset
255 @section Deleting and Rearranging Windows
Dave Love <fx@gnu.org>
parents:
diff changeset
256
Dave Love <fx@gnu.org>
parents:
diff changeset
257 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
258 @item C-x 0
Dave Love <fx@gnu.org>
parents:
diff changeset
259 Delete the selected window (@code{delete-window}). The last character
Dave Love <fx@gnu.org>
parents:
diff changeset
260 in this key sequence is a zero.
Dave Love <fx@gnu.org>
parents:
diff changeset
261 @item C-x 1
Dave Love <fx@gnu.org>
parents:
diff changeset
262 Delete all windows in the selected frame except the selected window
Dave Love <fx@gnu.org>
parents:
diff changeset
263 (@code{delete-other-windows}).
Dave Love <fx@gnu.org>
parents:
diff changeset
264 @item C-x 4 0
Dave Love <fx@gnu.org>
parents:
diff changeset
265 Delete the selected window and kill the buffer that was showing in it
Dave Love <fx@gnu.org>
parents:
diff changeset
266 (@code{kill-buffer-and-window}). The last character in this key
Dave Love <fx@gnu.org>
parents:
diff changeset
267 sequence is a zero.
Dave Love <fx@gnu.org>
parents:
diff changeset
268 @item C-x ^
Dave Love <fx@gnu.org>
parents:
diff changeset
269 Make selected window taller (@code{enlarge-window}).
Dave Love <fx@gnu.org>
parents:
diff changeset
270 @item C-x @}
Dave Love <fx@gnu.org>
parents:
diff changeset
271 Make selected window wider (@code{enlarge-window-horizontally}).
Dave Love <fx@gnu.org>
parents:
diff changeset
272 @item C-x @{
Dave Love <fx@gnu.org>
parents:
diff changeset
273 Make selected window narrower (@code{shrink-window-horizontally}).
Dave Love <fx@gnu.org>
parents:
diff changeset
274 @item C-x -
Dave Love <fx@gnu.org>
parents:
diff changeset
275 Shrink this window if its buffer doesn't need so many lines
Dave Love <fx@gnu.org>
parents:
diff changeset
276 (@code{shrink-window-if-larger-than-buffer}).
Dave Love <fx@gnu.org>
parents:
diff changeset
277 @item C-x +
Dave Love <fx@gnu.org>
parents:
diff changeset
278 Make all windows the same height (@code{balance-windows}).
Dave Love <fx@gnu.org>
parents:
diff changeset
279 @item Drag-Mouse-1
Dave Love <fx@gnu.org>
parents:
diff changeset
280 Dragging a window's mode line up or down with @kbd{Mouse-1} changes
Dave Love <fx@gnu.org>
parents:
diff changeset
281 window heights.
Dave Love <fx@gnu.org>
parents:
diff changeset
282 @item Mouse-2
Dave Love <fx@gnu.org>
parents:
diff changeset
283 @kbd{Mouse-2} in a window's mode line deletes all other windows in the frame
Dave Love <fx@gnu.org>
parents:
diff changeset
284 (@code{mouse-delete-other-windows}).
Dave Love <fx@gnu.org>
parents:
diff changeset
285 @item Mouse-3
Dave Love <fx@gnu.org>
parents:
diff changeset
286 @kbd{Mouse-3} in a window's mode line deletes that window
35954
c869b148aa3f Document what does mouse-3 do on the mode line if there's only one window.
Eli Zaretskii <eliz@gnu.org>
parents: 35188
diff changeset
287 (@code{mouse-delete-window}), unless the frame has only one window, in
c869b148aa3f Document what does mouse-3 do on the mode line if there's only one window.
Eli Zaretskii <eliz@gnu.org>
parents: 35188
diff changeset
288 which case it buries the current buffer instead and switches to another
c869b148aa3f Document what does mouse-3 do on the mode line if there's only one window.
Eli Zaretskii <eliz@gnu.org>
parents: 35188
diff changeset
289 buffer.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
290 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
291
Dave Love <fx@gnu.org>
parents:
diff changeset
292 @kindex C-x 0
Dave Love <fx@gnu.org>
parents:
diff changeset
293 @findex delete-window
Dave Love <fx@gnu.org>
parents:
diff changeset
294 To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is
Dave Love <fx@gnu.org>
parents:
diff changeset
295 a zero.) The space occupied by the deleted window is given to an
Dave Love <fx@gnu.org>
parents:
diff changeset
296 adjacent window (but not the minibuffer window, even if that is active
Dave Love <fx@gnu.org>
parents:
diff changeset
297 at the time). Once a window is deleted, its attributes are forgotten;
Dave Love <fx@gnu.org>
parents:
diff changeset
298 only restoring a window configuration can bring it back. Deleting the
Dave Love <fx@gnu.org>
parents:
diff changeset
299 window has no effect on the buffer it used to display; the buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
300 continues to exist, and you can select it in any window with @kbd{C-x
Dave Love <fx@gnu.org>
parents:
diff changeset
301 b}.
Dave Love <fx@gnu.org>
parents:
diff changeset
302
Dave Love <fx@gnu.org>
parents:
diff changeset
303 @findex kill-buffer-and-window
Dave Love <fx@gnu.org>
parents:
diff changeset
304 @kindex C-x 4 0
Dave Love <fx@gnu.org>
parents:
diff changeset
305 @kbd{C-x 4 0} (@code{kill-buffer-and-window}) is a stronger command
Dave Love <fx@gnu.org>
parents:
diff changeset
306 than @kbd{C-x 0}; it kills the current buffer and then deletes the
Dave Love <fx@gnu.org>
parents:
diff changeset
307 selected window.
Dave Love <fx@gnu.org>
parents:
diff changeset
308
Dave Love <fx@gnu.org>
parents:
diff changeset
309 @kindex C-x 1
Dave Love <fx@gnu.org>
parents:
diff changeset
310 @findex delete-other-windows
Dave Love <fx@gnu.org>
parents:
diff changeset
311 @kbd{C-x 1} (@code{delete-other-windows}) is more powerful in a
Dave Love <fx@gnu.org>
parents:
diff changeset
312 different way; it deletes all the windows except the selected one (and
Dave Love <fx@gnu.org>
parents:
diff changeset
313 the minibuffer); the selected window expands to use the whole frame
Dave Love <fx@gnu.org>
parents:
diff changeset
314 except for the echo area.
Dave Love <fx@gnu.org>
parents:
diff changeset
315
Dave Love <fx@gnu.org>
parents:
diff changeset
316 You can also delete a window by clicking on its mode line with
Dave Love <fx@gnu.org>
parents:
diff changeset
317 @kbd{Mouse-2}, and delete all the windows in a frame except one window
Dave Love <fx@gnu.org>
parents:
diff changeset
318 by clicking on that window's mode line with @kbd{Mouse-3}.
Dave Love <fx@gnu.org>
parents:
diff changeset
319
Dave Love <fx@gnu.org>
parents:
diff changeset
320 The easiest way to adjust window heights is with a mouse. If you
Dave Love <fx@gnu.org>
parents:
diff changeset
321 press @kbd{Mouse-1} on a mode line, you can drag that mode line up or
Dave Love <fx@gnu.org>
parents:
diff changeset
322 down, changing the heights of the windows above and below it.
Dave Love <fx@gnu.org>
parents:
diff changeset
323
Dave Love <fx@gnu.org>
parents:
diff changeset
324 @kindex C-x ^
Dave Love <fx@gnu.org>
parents:
diff changeset
325 @findex enlarge-window
Dave Love <fx@gnu.org>
parents:
diff changeset
326 @kindex C-x @}
Dave Love <fx@gnu.org>
parents:
diff changeset
327 @findex enlarge-window-horizontally
Dave Love <fx@gnu.org>
parents:
diff changeset
328 @vindex window-min-height
Dave Love <fx@gnu.org>
parents:
diff changeset
329 @vindex window-min-width
Dave Love <fx@gnu.org>
parents:
diff changeset
330 To readjust the division of space among vertically adjacent windows,
Dave Love <fx@gnu.org>
parents:
diff changeset
331 use @kbd{C-x ^} (@code{enlarge-window}). It makes the currently
Dave Love <fx@gnu.org>
parents:
diff changeset
332 selected window get one line bigger, or as many lines as is specified
Dave Love <fx@gnu.org>
parents:
diff changeset
333 with a numeric argument. With a negative argument, it makes the
Dave Love <fx@gnu.org>
parents:
diff changeset
334 selected window smaller. @kbd{C-x @}}
Dave Love <fx@gnu.org>
parents:
diff changeset
335 (@code{enlarge-window-horizontally}) makes the selected window wider by
Dave Love <fx@gnu.org>
parents:
diff changeset
336 the specified number of columns. @kbd{C-x @{}
Dave Love <fx@gnu.org>
parents:
diff changeset
337 (@code{shrink-window-horizontally}) makes the selected window narrower
Dave Love <fx@gnu.org>
parents:
diff changeset
338 by the specified number of columns.
Dave Love <fx@gnu.org>
parents:
diff changeset
339
Dave Love <fx@gnu.org>
parents:
diff changeset
340 When you make a window bigger, the space comes from one of its
Dave Love <fx@gnu.org>
parents:
diff changeset
341 neighbors. If this makes any window too small, it is deleted and its
Dave Love <fx@gnu.org>
parents:
diff changeset
342 space is given to an adjacent window. The minimum size is specified by
Dave Love <fx@gnu.org>
parents:
diff changeset
343 the variables @code{window-min-height} and @code{window-min-width}.
Dave Love <fx@gnu.org>
parents:
diff changeset
344
Dave Love <fx@gnu.org>
parents:
diff changeset
345 @kindex C-x -
Dave Love <fx@gnu.org>
parents:
diff changeset
346 @findex shrink-window-if-larger-than-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
347 The command @kbd{C-x -} (@code{shrink-window-if-larger-than-buffer})
Dave Love <fx@gnu.org>
parents:
diff changeset
348 reduces the height of the selected window, if it is taller than
Dave Love <fx@gnu.org>
parents:
diff changeset
349 necessary to show the whole text of the buffer it is displaying. It
Dave Love <fx@gnu.org>
parents:
diff changeset
350 gives the extra lines to other windows in the frame.
Dave Love <fx@gnu.org>
parents:
diff changeset
351
Dave Love <fx@gnu.org>
parents:
diff changeset
352 @kindex C-x +
Dave Love <fx@gnu.org>
parents:
diff changeset
353 @findex balance-windows
Dave Love <fx@gnu.org>
parents:
diff changeset
354 You can also use @kbd{C-x +} (@code{balance-windows}) to even out the
Dave Love <fx@gnu.org>
parents:
diff changeset
355 heights of all the windows in the selected frame.
Dave Love <fx@gnu.org>
parents:
diff changeset
356
28551
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
357 @node Window Convenience
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
358 @section Window Handling Convenience Features and Customization
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
359
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
360 @findex winner-mode
30875
e86dbf76e699 mainly indexing
Dave Love <fx@gnu.org>
parents: 28796
diff changeset
361 @cindex Winner mode
e86dbf76e699 mainly indexing
Dave Love <fx@gnu.org>
parents: 28796
diff changeset
362 @cindex mode, Winner
28551
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
363 @cindex undoing window configuration changes
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
364 @cindex window configuration changes, undoing
36182
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
365 @kbd{M-x winner-mode} is a global minor mode that records the
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
366 changes in the window configuration (i.e. how the frames are
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
367 partitioned into windows), so that you can ``undo'' them. To undo,
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
368 use @kbd{C-x left} (@code{winner-undo}). If you change your mind
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
369 while undoing, you can redo the changes you had undone using @kbd{C-x
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
370 right} (@code{M-x winner-redo}). Another way to enable Winner mode is
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
371 by customizing the variable @code{winner-mode}.
28551
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
372
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
373 @cindex Windmove package
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
374 @cindex directional window selection
30875
e86dbf76e699 mainly indexing
Dave Love <fx@gnu.org>
parents: 28796
diff changeset
375 @findex windmove-right
e86dbf76e699 mainly indexing
Dave Love <fx@gnu.org>
parents: 28796
diff changeset
376 @findex windmove-default-keybindings
39268
5a3dae2132b4 Spelling correction.
Richard M. Stallman <rms@gnu.org>
parents: 37986
diff changeset
377 The Windmove commands move directionally between neighboring windows in
30875
e86dbf76e699 mainly indexing
Dave Love <fx@gnu.org>
parents: 28796
diff changeset
378 a frame. @kbd{M-x windmove-right} selects the window immediately to the
36182
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
379 right of the currently selected one, and similarly for the ``left,'' ``up,''
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
380 and ``down'' counterparts. @kbd{M-x windmove-default-keybindings} binds
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
381 these commands to @kbd{S-right} etc. (Not all terminals support shifted
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
382 arrow keys, however.)
28551
d212ead1f461 No resize-minibuffer.
Dave Love <fx@gnu.org>
parents: 25829
diff changeset
383
36182
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
384 Follow minor mode (@kbd{M-x follow-mode}) synchronizes several
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
385 windows on the same buffer so that they always display adjacent
36263
11db0318031d Remove redundant index entries.
Eli Zaretskii <eliz@gnu.org>
parents: 36185
diff changeset
386 sections of that buffer. @xref{Follow Mode}.
36182
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
387
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
388 @vindex scroll-all-mode
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
389 @cindex scrolling windows together
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
390 @cindex Scroll-all mode
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
391 @cindex mode, Scroll-all
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
392 @kbd{M-x scroll-all-mode} provides commands to scroll all visible
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
393 windows together. You can also turn it on by customizing the variable
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
394 @code{scroll-all-mode}. The commands provided are @kbd{M-x
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
395 scroll-all-scroll-down-all}, @kbd{M-x scroll-all-page-down-all} and
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
396 their corresponding ``up'' equivalents. To make this mode useful,
add12d9a298a Major rewrite in Window Convenience node.
Richard M. Stallman <rms@gnu.org>
parents: 35954
diff changeset
397 you should bind these commands to appropriate keys.