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