123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- @node Windows, Mule, Buffers, Top
- @chapter Multiple Windows
- @cindex windows
- Emacs can split the frame into two or many windows, which can display
- parts of different buffers or different parts of one buffer. If you are
- running XEmacs under X, that means you can have the X window that contains
- the Emacs frame have multiple subwindows.
- @menu
- * Basic Window:: Introduction to Emacs windows.
- * Split Window:: New windows are made by splitting existing windows.
- * Other Window:: Moving to another window or doing something to it.
- * Pop Up Window:: Finding a file or buffer in another window.
- * Change Window:: Deleting windows and changing their sizes.
- @end menu
- @node Basic Window, Split Window, Windows, Windows
- @section Concepts of Emacs Windows
- When Emacs displays multiple windows, each window has one Emacs
- buffer designated for display. The same buffer may appear in more
- than one window; if it does, any changes in its text are displayed in all
- the windows that display it. Windows showing the same buffer can
- show different parts of it, because each window has its own value of point.
- @cindex selected window
- At any time, one window is the @dfn{selected window}; the buffer
- displayed by that window is the current buffer. The cursor
- shows the location of point in that window. Each other window has a
- location of point as well, but since the terminal has only one cursor, it
- cannot show the location of point in the other windows.
- Commands to move point affect the value of point for the selected Emacs
- window only. They do not change the value of point in any other Emacs
- window, including those showing the same buffer. The same is true for commands
- such as @kbd{C-x b} to change the selected buffer in the selected window;
- they do not affect other windows at all. However, there are other commands
- such as @kbd{C-x 4 b} that select a different window and switch buffers in
- it. Also, all commands that display information in a window, including
- (for example) @kbd{C-h f} (@code{describe-function}) and @kbd{C-x C-b}
- (@code{list-buffers}), work by switching buffers in a non-selected window
- without affecting the selected window.
- Each window has its own mode line, which displays the buffer name,
- modification status, and major and minor modes of the buffer that is
- displayed in the window. @xref{Mode Line}, for details on the mode
- line.
- @node Split Window, Other Window, Basic Window, Windows
- @section Splitting Windows
- @table @kbd
- @item C-x 2
- Split the selected window into two windows, one above the other
- (@code{split-window-vertically}).
- @item C-x 3
- Split the selected window into two windows positioned side by side
- (@code{split-window-horizontally}).
- @item C-x 6
- Save the current window configuration in register @var{reg} (a letter).
- @item C-x 7
- Restore (make current) the window configuration in register
- @var{reg} (a letter). Use with a register previously set with @kbd{C-x 6}.
- @end table
- @kindex C-x 2
- @findex split-window-vertically
- The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the
- selected window into two windows, one above the other. Both windows
- start out displaying the same buffer, with the same value of point. By
- default each of the two windows gets half the height of the window that
- was split. A numeric argument specifies how many lines to give to the
- top window.
- @kindex C-x 3
- @findex split-window-horizontally
- @kbd{C-x 3} (@code{split-window-horizontally}) breaks the selected
- window into two side-by-side windows. A numeric argument specifies how
- many columns to give the one on the left. A line of vertical bars
- separates the two windows. Windows that are not the full width of the
- frame have truncated mode lines which do not always appear in inverse
- video, because Emacs display routines cannot display a region of inverse
- video that is only part of a line on the screen.
- @vindex truncate-partial-width-windows
- When a window is less than the full width, many text lines are too
- long to fit. Continuing all those lines might be confusing. Set the
- variable @code{truncate-partial-width-windows} to non-@code{nil} to
- force truncation in all windows less than the full width of the frame,
- independent of the buffer and its value for @code{truncate-lines}.
- @xref{Continuation Lines}.@refill
- Horizontal scrolling is often used in side-by-side windows.
- @xref{Display}.
- @findex jump-to-register
- @findex window-configuration-to-register
- You can resize a window and store that configuration in a register by
- supplying a @var{register} argument to @code{window-configuration-to-register}
- (@kbd{C-x 6}). To return to the window configuration established with
- @code{window-configuration-to-register}, use @code{jump-to-register}
- (@kbd{C-x j}).
- @node Other Window, Pop Up Window, Split Window, Windows
- @section Using Other Windows
- @table @kbd
- @item C-x o
- Select another window (@code{other-window}). That is the letter `o', not zero.
- @item M-C-v
- Scroll the next window (@code{scroll-other-window}).
- @item M-x compare-windows
- Find the next place where the text in the selected window does not match
- the text in the next window.
- @item M-x other-window-any-frame @var{n}
- Select the @var{n}th different window on any frame.
- @end table
- @kindex C-x o
- @findex other-window
- To select a different window, use @kbd{C-x o} (@code{other-window}).
- That is an `o', for `other', not a zero. When there are more than
- two windows, the command moves through all the windows in a cyclic
- order, generally top to bottom and left to right. From the rightmost
- and bottommost window, it goes back to the one at the upper left corner.
- A numeric argument, @var{n}, moves several steps in the cyclic order of
- windows. A negative numeric argument moves around the cycle in the
- opposite order. If the optional second argument @var{which-frames} is
- non-@code{nil}, the function cycles through all frames. When the
- minibuffer is active, the minibuffer is the last window in the cycle;
- you can switch from the minibuffer window to one of the other windows,
- and later switch back and finish supplying the minibuffer argument that
- is requested. @xref{Minibuffer Edit}.
- @findex other-window-any-frame
- The command @kbd{M-x other-window-any-frame} also selects the window
- @var{n} steps away in the cyclic order. However, unlike @code{other-window},
- this command selects a window on the next or previous frame instead of
- wrapping around to the top or bottom of the current frame, when there
- are no more windows.
- @kindex C-M-v
- @findex scroll-other-window
- The usual scrolling commands (@pxref{Display}) apply to the selected
- window only. @kbd{M-C-v} (@code{scroll-other-window}) scrolls the
- window that @kbd{C-x o} would select. Like @kbd{C-v}, it takes positive
- and negative arguments.
- @findex compare-windows
- The command @kbd{M-x compare-windows} compares the text in the current
- window with the text in the next window. Comparison starts at point in each
- window. Point moves forward in each window, a character at a time,
- until the next set of characters in the two windows are different. Then the
- command is finished.
- A prefix argument @var{ignore-whitespace} means ignore changes in
- whitespace. The variable @code{compare-windows-whitespace} controls how
- whitespace is skipped.
- If @code{compare-ignore-case} is non-@code{nil}, changes in case are
- also ignored.
- @node Pop Up Window, Change Window, Other Window, Windows
- @section Displaying in Another Window
- @kindex C-x 4
- @kbd{C-x 4} is a prefix key for commands that select another window
- (splitting the window if there is only one) and select a buffer in that
- window. Different @kbd{C-x 4} commands have different ways of finding the
- buffer to select.
- @findex switch-to-buffer-other-window
- @findex find-file-other-window
- @findex find-tag-other-window
- @findex dired-other-window
- @findex mail-other-window
- @table @kbd
- @item C-x 4 b @var{bufname} @key{RET}
- Select buffer @var{bufname} in another window. This runs
- @code{switch-to-buffer-other-window}.
- @item C-x 4 f @var{filename} @key{RET}
- Visit file @var{filename} and select its buffer in another window. This
- runs @code{find-file-other-window}. @xref{Visiting}.
- @item C-x 4 d @var{directory} @key{RET}
- Select a Dired buffer for directory @var{directory} in another window.
- This runs @code{dired-other-window}. @xref{Dired}.
- @item C-x 4 m
- Start composing a mail message in another window. This runs
- @code{mail-other-window}, and its same-window version is @kbd{C-x m}
- (@pxref{Sending Mail}).
- @item C-x 4 .
- Find a tag in the current tag table in another window. This runs
- @code{find-tag-other-window}, the multiple-window variant of @kbd{M-.}
- (@pxref{Tags}).
- @end table
- @vindex display-buffer-function
- If the variable @code{display-buffer-function} is non-@code{nil}, its value is
- the function to call to handle @code{display-buffer}. It receives two
- arguments, the buffer and a flag that if non-@code{nil} means that the
- currently selected window is not acceptable. Commands such as
- @code{switch-to-buffer-other-window} and @code{find-file-other-window}
- work using this function.
- @node Change Window,, Pop Up Window, Windows
- @section Deleting and Rearranging Windows
- @table @kbd
- @item C-x 0
- Get rid of the selected window (@code{delete-window}). That is a zero.
- If there is more than one Emacs frame, deleting the sole remaining
- window on that frame deletes the frame as well. If the current frame
- is the only frame, it is not deleted.
- @item C-x 1
- Get rid of all windows except the selected one
- (@code{delete-other-windows}).
- @item C-x ^
- Make the selected window taller, at the expense of the other(s)
- @*(@code{enlarge-window}).
- @item C-x @}
- Make the selected window wider (@code{enlarge-window-horizontally}).
- @end table
- @kindex C-x 0
- @findex delete-window
- To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is a
- zero.) The space occupied by the deleted window is distributed among the
- other active windows (but not the minibuffer window, even if that is active
- at the time). Once a window is deleted, its attributes are forgotten;
- there is no automatic way to make another window of the same shape or
- showing the same buffer. The buffer continues to exist, and you can
- select it in any window with @kbd{C-x b}.
- @kindex C-x 1
- @findex delete-other-windows
- @kbd{C-x 1} (@code{delete-other-windows}) is more powerful than @kbd{C-x 0};
- it deletes all the windows except the selected one (and the minibuffer).
- The selected window expands to use the whole frame except for the echo
- area.
- @kindex C-x ^
- @findex enlarge-window
- @kindex C-x @}
- @findex enlarge-window-horizontally
- @vindex window-min-height
- @vindex window-min-width
- To readjust the division of space among existing windows, use @kbd{C-x
- ^} (@code{enlarge-window}). It makes the currently selected window
- longer by one line or as many lines as a numeric argument specifies.
- With a negative argument, it makes the selected window smaller.
- @kbd{C-x @}} (@code{enlarge-window-horizontally}) makes the selected
- window wider by the specified number of columns. The extra screen space
- given to a window comes from one of its neighbors, if that is possible;
- otherwise, all the competing windows are shrunk in the same proportion.
- If this makes some windows too small, those windows are deleted and their
- space is divided up. Minimum window size is specified by the variables
- @code{window-min-height} and @code{window-min-width}.
- You can also resize windows within a frame by clicking the left mouse
- button on a modeline, and dragging.
- Clicking the right button on a mode line pops up a menu of common window
- manager operations. This menu contains the following options:
- @cindex Windows menu
- @cindex Pull-down Menus
- @cindex menus
- @table @b
- @item Delete Window
- Remove the window above this modeline from the frame.
- @item Delete Other Windows
- Delete all windows on the frame except for the one above this modeline.
- @item Split Window
- Split the window above the mode line in half, creating another window.
- @item Split Window Horizontally
- Split the window above the mode line in half horizontally, so that there
- will be two windows side-by-side.
- @item Balance Windows
- Readjust the sizes of all windows on the frame until all windows have
- roughly the same number of lines.
- @end table
|