0
|
1
|
|
2 @node Windows, Major Modes, Buffers, Top
|
|
3 @chapter Multiple Windows
|
|
4 @cindex windows
|
|
5
|
|
6 Emacs can split the frame into two or many windows, which can display
|
|
7 parts of different buffers or different parts of one buffer. If you are
|
|
8 running XEmacs under X, that means you can have the X window that contains
|
|
9 the Emacs frame have multiple subwindows.
|
|
10
|
|
11 @menu
|
|
12 * Basic Window:: Introduction to Emacs windows.
|
|
13 * Split Window:: New windows are made by splitting existing windows.
|
|
14 * Other Window:: Moving to another window or doing something to it.
|
|
15 * Pop Up Window:: Finding a file or buffer in another window.
|
|
16 * Change Window:: Deleting windows and changing their sizes.
|
|
17 @end menu
|
|
18
|
|
19 @node Basic Window, Split Window, Windows, Windows
|
|
20 @section Concepts of Emacs Windows
|
|
21
|
|
22 When Emacs displays multiple windows, each window has one Emacs
|
|
23 buffer designated for display. The same buffer may appear in more
|
|
24 than one window; if it does, any changes in its text are displayed in all
|
|
25 the windows that display it. Windows showing the same buffer can
|
|
26 show different parts of it, because each window has its own value of point.
|
|
27
|
|
28 @cindex selected window
|
|
29 At any time, one window is the @dfn{selected window}; the buffer
|
|
30 displayed by that window is the current buffer. The cursor
|
|
31 shows the location of point in that window. Each other window has a
|
|
32 location of point as well, but since the terminal has only one cursor, it
|
|
33 cannot show the location of point in the other windows.
|
|
34
|
|
35 Commands to move point affect the value of point for the selected Emacs
|
|
36 window only. They do not change the value of point in any other Emacs
|
|
37 window, including those showing the same buffer. The same is true for commands
|
|
38 such as @kbd{C-x b} to change the selected buffer in the selected window;
|
|
39 they do not affect other windows at all. However, there are other commands
|
|
40 such as @kbd{C-x 4 b} that select a different window and switch buffers in
|
|
41 it. Also, all commands that display information in a window, including
|
|
42 (for example) @kbd{C-h f} (@code{describe-function}) and @kbd{C-x C-b}
|
|
43 (@code{list-buffers}), work by switching buffers in a non-selected window
|
|
44 without affecting the selected window.
|
|
45
|
|
46 Each window has its own mode line, which displays the buffer name,
|
|
47 modification status, and major and minor modes of the buffer that is
|
|
48 displayed in the window. @xref{Mode Line}, for details on the mode
|
|
49 line.
|
|
50
|
|
51 @node Split Window, Other Window, Basic Window, Windows
|
|
52 @section Splitting Windows
|
|
53
|
|
54 @table @kbd
|
|
55 @item C-x 2
|
|
56 Split the selected window into two windows, one above the other
|
|
57 (@code{split-window-vertically}).
|
|
58 @item C-x 3
|
|
59 Split the selected window into two windows positioned side by side
|
|
60 (@code{split-window-horizontally}).
|
|
61 @item C-x 6
|
|
62 Save the current window configuration in register @var{reg} (a letter).
|
|
63 @item C-x 7
|
|
64 Restore (make current) the window configuration in register
|
|
65 @var{reg} (a letter). Use with a register previously set with @kbd{C-x 6}.
|
|
66 @end table
|
|
67
|
|
68 @kindex C-x 2
|
|
69 @findex split-window-vertically
|
|
70 The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the
|
|
71 selected window into two windows, one above the other. Both windows
|
|
72 start out displaying the same buffer, with the same value of point. By
|
|
73 default each of the two windows gets half the height of the window that
|
|
74 was split. A numeric argument specifies how many lines to give to the
|
|
75 top window.
|
|
76
|
|
77 @kindex C-x 3
|
|
78 @findex split-window-horizontally
|
|
79 @kbd{C-x 3} (@code{split-window-horizontally}) breaks the selected
|
|
80 window into two side-by-side windows. A numeric argument specifies how
|
|
81 many columns to give the one on the left. A line of vertical bars
|
|
82 separates the two windows. Windows that are not the full width of the
|
|
83 frame have truncated mode lines which do not always appear in inverse
|
|
84 video, because Emacs display routines cannot display a region of inverse
|
|
85 video that is only part of a line on the screen.
|
|
86
|
|
87 @vindex truncate-partial-width-windows
|
|
88 When a window is less than the full width, many text lines are too
|
|
89 long to fit. Continuing all those lines might be confusing. Set the
|
|
90 variable @code{truncate-partial-width-windows} to non-@code{nil} to
|
|
91 force truncation in all windows less than the full width of the frame,
|
|
92 independent of the buffer and its value for @code{truncate-lines}.
|
|
93 @xref{Continuation Lines}.@refill
|
|
94
|
|
95 Horizontal scrolling is often used in side-by-side windows.
|
|
96 @xref{Display}.
|
|
97
|
|
98 @findex jump-to-register
|
|
99 @findex window-configuration-to-register
|
|
100 You can resize a window and store that configuration in a register by
|
|
101 supplying a @var{register} argument to @code{window-configuration-to-register}
|
|
102 (@kbd{C-x 6}). To return to the window configuration established with
|
|
103 @code{window-configuration-to-register}, use @code{jump-to-register}
|
|
104 (@kbd{C-x j}).
|
|
105
|
|
106 @node Other Window, Pop Up Window, Split Window, Windows
|
|
107 @section Using Other Windows
|
|
108
|
|
109 @table @kbd
|
|
110 @item C-x o
|
|
111 Select another window (@code{other-window}). That is the letter `o', not zero.
|
|
112 @item M-C-v
|
|
113 Scroll the next window (@code{scroll-other-window}).
|
|
114 @item M-x compare-windows
|
|
115 Find the next place where the text in the selected window does not match
|
|
116 the text in the next window.
|
|
117 @item M-x other-window-any-frame @var{n}
|
|
118 Select the @var{n}th different window on any frame.
|
|
119 @end table
|
|
120
|
|
121 @kindex C-x o
|
|
122 @findex other-window
|
|
123 To select a different window, use @kbd{C-x o} (@code{other-window}).
|
|
124 That is an `o', for `other', not a zero. When there are more than
|
|
125 two windows, the command moves through all the windows in a cyclic
|
|
126 order, generally top to bottom and left to right. From the rightmost
|
|
127 and bottommost window, it goes back to the one at the upper left corner.
|
|
128 A numeric argument, @var{n}, moves several steps in the cyclic order of
|
|
129 windows. A negative numeric argument moves around the cycle in the
|
|
130 opposite order. If the optional second argument @var{all-frames} is
|
|
131 non-@code{nil}, the function cycles through all frames. When the
|
|
132 minibuffer is active, the minibuffer is the last window in the cycle;
|
|
133 you can switch from the minibuffer window to one of the other windows,
|
|
134 and later switch back and finish supplying the minibuffer argument that
|
|
135 is requested. @xref{Minibuffer Edit}.
|
|
136
|
|
137 @findex other-window-any-frame
|
|
138 The command @kbd{M-x other-window-any-frame} also selects the window
|
|
139 @var{n} steps away in the cyclic order. However, unlike @code{other-window},
|
|
140 this command selects a window on the next or previous frame instead of
|
|
141 wrapping around to the top or bottom of the current frame, when there
|
|
142 are no more windows.
|
|
143
|
|
144 @kindex C-M-v
|
|
145 @findex scroll-other-window
|
|
146 The usual scrolling commands (@pxref{Display}) apply to the selected
|
|
147 window only. @kbd{M-C-v} (@code{scroll-other-window}) scrolls the
|
|
148 window that @kbd{C-x o} would select. Like @kbd{C-v}, it takes positive
|
|
149 and negative arguments.
|
|
150
|
|
151 @findex compare-windows
|
|
152 The command @kbd{M-x compare-windows} compares the text in the current
|
|
153 window with the text in the next window. Comparison starts at point in each
|
|
154 window. Point moves forward in each window, a character at a time,
|
|
155 until the next set of characters in the two windows are different. Then the
|
|
156 command is finished.
|
|
157
|
|
158 A prefix argument @var{ignore-whitespace} means ignore changes in
|
|
159 whitespace. The variable @code{compare-windows-whitespace} controls how
|
|
160 whitespace is skipped.
|
|
161
|
|
162 If @code{compare-ignore-case} is non-@code{nil}, changes in case are
|
|
163 also ignored.
|
|
164
|
|
165 @node Pop Up Window, Change Window, Other Window, Windows
|
|
166 @section Displaying in Another Window
|
|
167
|
|
168 @kindex C-x 4
|
|
169 @kbd{C-x 4} is a prefix key for commands that select another window
|
|
170 (splitting the window if there is only one) and select a buffer in that
|
|
171 window. Different @kbd{C-x 4} commands have different ways of finding the
|
|
172 buffer to select.
|
|
173
|
|
174 @findex switch-to-buffer-other-window
|
|
175 @findex find-file-other-window
|
|
176 @findex find-tag-other-window
|
|
177 @findex dired-other-window
|
|
178 @findex mail-other-window
|
|
179 @table @kbd
|
|
180 @item C-x 4 b @var{bufname} @key{RET}
|
|
181 Select buffer @var{bufname} in another window. This runs
|
|
182 @code{switch-to-buffer-other-window}.
|
|
183 @item C-x 4 f @var{filename} @key{RET}
|
|
184 Visit file @var{filename} and select its buffer in another window. This
|
|
185 runs @code{find-file-other-window}. @xref{Visiting}.
|
|
186 @item C-x 4 d @var{directory} @key{RET}
|
|
187 Select a Dired buffer for directory @var{directory} in another window.
|
|
188 This runs @code{dired-other-window}. @xref{Dired}.
|
|
189 @item C-x 4 m
|
|
190 Start composing a mail message in another window. This runs
|
|
191 @code{mail-other-window}, and its same-window version is @kbd{C-x m}
|
|
192 (@pxref{Sending Mail}).
|
|
193 @item C-x 4 .
|
|
194 Find a tag in the current tag table in another window. This runs
|
|
195 @code{find-tag-other-window}, the multiple-window variant of @kbd{M-.}
|
|
196 (@pxref{Tags}).
|
|
197 @end table
|
|
198
|
|
199 @vindex display-buffer-function
|
|
200 If the variable @code{display-buffer-function} is non-@code{nil}, its value is
|
|
201 the function to call to handle @code{display-buffer}. It receives two
|
|
202 arguments, the buffer and a flag that if non-@code{nil} means that the
|
|
203 currently selected window is not acceptable. Commands such as
|
|
204 @code{switch-to-buffer-other-window} and @code{find-file-other-window}
|
|
205 work using this function.
|
|
206
|
|
207 @node Change Window,, Pop Up Window, Windows
|
|
208 @section Deleting and Rearranging Windows
|
|
209
|
|
210 @table @kbd
|
|
211 @item C-x 0
|
|
212 Get rid of the selected window (@code{delete-window}). That is a zero.
|
|
213 If there is more than one Emacs frame, deleting the sole remaining
|
|
214 window on that frame deletes the frame as well. If the current frame
|
|
215 is the only frame, it is not deleted.
|
|
216 @item C-x 1
|
|
217 Get rid of all windows except the selected one
|
|
218 (@code{delete-other-windows}).
|
|
219 @item C-x ^
|
|
220 Make the selected window taller, at the expense of the other(s)
|
|
221 @*(@code{enlarge-window}).
|
|
222 @item C-x @}
|
|
223 Make the selected window wider (@code{enlarge-window-horizontally}).
|
|
224 @end table
|
|
225
|
|
226 @kindex C-x 0
|
|
227 @findex delete-window
|
|
228 To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is a
|
|
229 zero.) The space occupied by the deleted window is distributed among the
|
|
230 other active windows (but not the minibuffer window, even if that is active
|
|
231 at the time). Once a window is deleted, its attributes are forgotten;
|
|
232 there is no automatic way to make another window of the same shape or
|
|
233 showing the same buffer. The buffer continues to exist, and you can
|
|
234 select it in any window with @kbd{C-x b}.
|
|
235
|
|
236 @kindex C-x 1
|
|
237 @findex delete-other-windows
|
|
238 @kbd{C-x 1} (@code{delete-other-windows}) is more powerful than @kbd{C-x 0};
|
|
239 it deletes all the windows except the selected one (and the minibuffer).
|
|
240 The selected window expands to use the whole frame except for the echo
|
|
241 area.
|
|
242
|
|
243 @kindex C-x ^
|
|
244 @findex enlarge-window
|
|
245 @kindex C-x @}
|
|
246 @findex enlarge-window-horizontally
|
|
247 @vindex window-min-height
|
|
248 @vindex window-min-width
|
|
249 To readjust the division of space among existing windows, use @kbd{C-x
|
|
250 ^} (@code{enlarge-window}). It makes the currently selected window
|
|
251 longer by one line or as many lines as a numeric argument specifies.
|
|
252 With a negative argument, it makes the selected window smaller.
|
|
253 @kbd{C-x @}} (@code{enlarge-window-horizontally}) makes the selected
|
|
254 window wider by the specified number of columns. The extra screen space
|
|
255 given to a window comes from one of its neighbors, if that is possible;
|
|
256 otherwise, all the competing windows are shrunk in the same proportion.
|
|
257 If this makes some windows too small, those windows are deleted and their
|
|
258 space is divided up. Minimum window size is specified by the variables
|
|
259 @code{window-min-height} and @code{window-min-width}.
|
|
260
|
|
261 You can also resize windows within a frame by clicking the left mouse
|
|
262 button on a modeline, and dragging.
|
|
263
|
|
264 Clicking the right button on a mode line pops up a menu of common window
|
|
265 manager operations. This menu contains the following options:
|
|
266
|
|
267 @cindex Windows menu
|
|
268 @cindex Pull-down Menus
|
|
269 @cindex menus
|
|
270 @table @b
|
|
271 @item Delete Window
|
|
272 Remove the window above this modeline from the frame.
|
|
273
|
|
274 @item Delete Other Windows
|
|
275 Delete all windows on the frame except for the one above this modeline.
|
|
276
|
|
277 @item Split Window
|
|
278 Split the window above the mode line in half, creating another window.
|
|
279
|
|
280 @item Split Window Horizontally
|
|
281 Split the window above the mode line in half horizontally, so that there
|
|
282 will be two windows side-by-side.
|
|
283
|
|
284 @item Balance Windows
|
|
285 Readjust the sizes of all windows on the frame until all windows have
|
|
286 roughly the same number of lines.
|
|
287 @end table
|