changeset 98617:85b9cc909366

(Buffers): Add xrefs to Mode Line and Lisp Interaction. (Select Buffer): Mention use of minibuffer history. Describe default value of default-major-mode. Mention that C-x 4 b selects the other window. (List Buffers): Document CRM indicators in the order they appear. (Kill Buffer): Document new command kill-matching buffers. (Several Buffers): Move explanation of the relationship between buffer list and buffer menu to the top. (Indirect Buffers): Document new variable clone-indirect-buffer-hook.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 11 Oct 2008 17:35:20 +0000
parents 1da623354a34
children 6c1d5906741d
files doc/emacs/buffers.texi
diffstat 1 files changed, 116 insertions(+), 124 deletions(-) [+]
line wrap: on
line diff
--- a/doc/emacs/buffers.texi	Sat Oct 11 17:31:29 2008 +0000
+++ b/doc/emacs/buffers.texi	Sat Oct 11 17:35:20 2008 +0000
@@ -13,32 +13,31 @@
 @samp{*mail*} is used to hold the text of the message.  When you ask for a
 command's documentation, that appears in a buffer called @samp{*Help*}.
 
+  Each buffer has a unique name, which can be of any length.  When a
+buffer is displayed in a window, its name is shown in the mode line
+(@pxref{Mode Line}).  The distinction between upper and lower case
+matters in buffer names.  Most buffers are made by visiting files, and
+their names are derived from the files' names; however, you can also
+create an empty buffer with any name you want.  A newly started Emacs
+has a buffer named @samp{*scratch*}, which is not associated with any
+file and can be used for evaluating Lisp expressions in Emacs
+(@pxref{Lisp Interaction}).
+
 @cindex selected buffer
 @cindex current buffer
-  At any time, one and only one buffer is @dfn{current}.  It is also
-called the @dfn{selected buffer}.  Often we say that a command operates on
-``the buffer'' as if there were only one; but really this means that the
-command operates on the current buffer (most commands do).
-
-  When Emacs has multiple windows, each window has its own chosen
-buffer and displays it; at any time, only one of the windows is
-selected, and its chosen buffer is the current buffer.  Each window's
-mode line normally displays the name of the window's chosen buffer
-(@pxref{Windows}).
+  At any time, one and only one buffer is @dfn{current}.  This is also
+called the @dfn{selected buffer}.  We often say that a command
+operates on ``the buffer''; this really means that the command
+operates on the current buffer (most commands do).  When there is only
+one Emacs window, the buffer displayed in that window is current.
+When there are multiple windows present, the buffer displayed in the
+@dfn{selected window} is current.  @xref{Windows}.
 
-  Each buffer has a name, which can be of any length, and you can select
-any buffer by giving its name.  Most buffers are made by visiting files,
-and their names are derived from the files' names.  But you can also create
-an empty buffer with any name you want.  A newly started Emacs has a buffer
-named @samp{*scratch*} which can be used for evaluating Lisp expressions in
-Emacs.  The distinction between upper and lower case matters in buffer
-names.
-
-  Each buffer records individually what file it is visiting, whether it is
-modified, and what major mode and minor modes are in effect in it
-(@pxref{Major Modes}).  Any Emacs variable can be made @dfn{local to} a
-particular buffer, meaning its value in that buffer can be different from
-the value in other buffers.  @xref{Locals}.
+  Each buffer records individually what file it is visiting (if any),
+whether it is modified, and what major mode and minor modes are in
+effect (@pxref{Major Modes}).  Any Emacs variable can be made
+@dfn{local to} a particular buffer, meaning its value in that buffer
+can be different from the value in other buffers.  @xref{Locals}.
 
 @cindex buffer size, maximum
   A buffer's size cannot be larger than some maximum, which is defined
@@ -85,13 +84,22 @@
 
 @kindex C-x b
 @findex switch-to-buffer
-  To select the buffer named @var{bufname}, type @kbd{C-x b @var{bufname}
-@key{RET}}.  This runs the command @code{switch-to-buffer} with argument
-@var{bufname}.  You can use completion to enter the buffer
-name (@pxref{Completion}).  An empty argument to @kbd{C-x b}
-specifies the buffer that was current most recently among those not
+  To select the buffer named @var{bufname}, type @kbd{C-x b
+@var{bufname} @key{RET}}.  This runs the command
+@code{switch-to-buffer} with argument @var{bufname}.  While entering
+the buffer name, you can use the usual minibuffer completion and
+history commands (@pxref{Minibuffer}).  An empty argument to @kbd{C-x
+b} specifies the buffer that was current most recently among those not
 now displayed in any window.
 
+  If you specify a buffer that does not exist, @kbd{C-x b} creates a
+new, empty buffer that is not visiting any file, and selects it for
+editing.  You can use such a buffer for making temporary notes.  If
+you try to save it, you are asked for the file name to use.  The new
+buffer's major mode is determined by the variable
+@code{default-major-mode}; the default value is Fundamental mode.
+@xref{Major Modes}.
+
 @kindex C-x @key{LEFT}
 @kindex C-x @key{RIGHT}
 @findex next-buffer
@@ -106,19 +114,23 @@
 @findex switch-to-buffer-other-window
 @vindex even-window-heights
   To select a buffer in a window other than the current one, type
-@kbd{C-x 4 b @var{bufname} @key{RET}}.  This runs the command
-@code{switch-to-buffer-other-window} which displays the buffer
-@var{bufname} in another window.  By default, if displaying the buffer
-causes two vertically adjacent windows to be displayed, the heights of
-those windows are evened out; to countermand that and preserve the
-window configuration, set the variable @code{even-window-heights} to
-@code{nil}.
+@kbd{C-x 4 b} (@code{switch-to-buffer-other-window}).  This prompts
+for a buffer name using the minibuffer, displays that buffer in
+another window, and selects that window.  By default, if displaying
+the buffer causes two vertically adjacent windows to be displayed, the
+heights of those windows are evened out; to countermand that and
+preserve the window configuration, set the variable
+@code{even-window-heights} to @code{nil}.
 
 @kindex C-x 5 b
 @findex switch-to-buffer-other-frame
-  Similarly, @kbd{C-x 5 b @var{buffer} @key{RET}} runs the command
-@code{switch-to-buffer-other-frame} which selects a buffer in another
-frame.
+  Similarly, @kbd{C-x 5 b} (@code{switch-to-buffer-other-frame})
+prompts for a buffer name, displays that buffer in another frame, and
+selects that frame.
+
+  In addition, @kbd{C-x C-f}, and any other command for visiting a
+file, can also be used to switch to an existing file-visiting buffer.
+@xref{Visiting}.
 
 @vindex display-buffer-reuse-frames
   You can control how certain buffers are handled by these commands by
@@ -130,31 +142,18 @@
 non-@code{nil}, and the buffer you want to switch to is already
 displayed in some frame, Emacs will just raise that frame.
 
-  Most buffers are created by visiting files, or by Emacs commands that
-want to display some text, but you can also create a buffer explicitly
-by typing @kbd{C-x b @var{bufname} @key{RET}}.  This makes a new, empty
-buffer that is not visiting any file, and selects it for editing.  Such
-buffers are used for making notes to yourself.  If you try to save one,
-you are asked for the file name to use.  The new buffer's major mode is
-determined by the value of @code{default-major-mode} (@pxref{Major
-Modes}).
-
-  Note that @kbd{C-x C-f}, and any other command for visiting a file,
-can also be used to switch to an existing file-visiting buffer.
-@xref{Visiting}.
-
-  @kbd{C-u M-g M-g}, that is @code{goto-line} with a prefix argument
-of just @kbd{C-u}, reads a number @var{n} using the minibuffer,
-selects the most recently selected buffer other than the current
-buffer in another window, and then moves point to the beginning of
-line number @var{n} in that buffer.  This is mainly useful in a buffer
-that refers to line numbers in another buffer: if point is on or just
-after a number, @code{goto-line} uses that number as the default for
-@var{n}.  Note that prefix arguments other than just @kbd{C-u} behave
-differently.  @kbd{C-u 4 M-g M-g} goes to line 4 in the @emph{current}
-buffer, without reading a number from the minibuffer.  (Remember that
-@kbd{M-g M-g} without prefix argument reads a number @var{n} and then
-moves to line number @var{n} in the current buffer.)
+  @kbd{C-u M-g M-g}, that is @code{goto-line} with a plain prefix
+argument, reads a number @var{n} using the minibuffer, selects the
+most recently selected buffer other than the current buffer in another
+window, and then moves point to the beginning of line number @var{n}
+in that buffer.  This is mainly useful in a buffer that refers to line
+numbers in another buffer: if point is on or just after a number,
+@code{goto-line} uses that number as the default for @var{n}.  Note
+that prefix arguments other than just @kbd{C-u} behave differently.
+@kbd{C-u 4 M-g M-g} goes to line 4 in the @emph{current} buffer,
+without reading a number from the minibuffer.  (Remember that @kbd{M-g
+M-g} without prefix argument reads a number @var{n} and then moves to
+line number @var{n} in the current buffer.  @xref{Moving Point}.)
 
   Emacs uses buffer names that start with a space for internal purposes.
 It treats these buffers specially in minor ways---for example, by
@@ -177,11 +176,11 @@
 The buffers are listed in the order that they were current; the
 buffers that were current most recently come first.
 
-  @samp{*} in the first field of a line indicates the buffer is
-``modified.''  If several buffers are modified, it may be time to save
-some with @kbd{C-x s} (@pxref{Save Commands}).  @samp{%} indicates a
-read-only buffer.  @samp{.} marks the current buffer.  Here is an
-example of a buffer list:@refill
+  @samp{.} in the first field of a line indicates that the buffer is
+current.  @samp{%} indicates a read-only buffer.  @samp{*} indicates
+that the buffer is ``modified.''  If several buffers are modified, it
+may be time to save some with @kbd{C-x s} (@pxref{Save Commands}).
+Here is an example of a buffer list:
 
 @smallexample
 CRM Buffer                Size  Mode              File
@@ -197,16 +196,15 @@
 @end smallexample
 
 @noindent
-Note that the buffer @samp{*Help*} was made by a help request; it is
-not visiting any file.  The buffer @code{src} was made by Dired on the
-directory @file{~/cvs/emacs/src/}.  You can list only buffers that are
-visiting files by giving the command a prefix argument, as in
+The buffer @samp{*Help*} was made by a help request (@pxref{Help}); it
+is not visiting any file.  The buffer @code{src} was made by Dired on
+the directory @file{~/cvs/emacs/src/}.  You can list only buffers that
+are visiting files by giving the command a prefix argument, as in
 @kbd{C-u C-x C-b}.
 
   @code{list-buffers} omits buffers whose names begin with a space,
 unless they visit files: such buffers are used internally by Emacs.
 
-@need 2000
 @node Misc Buffer
 @section Miscellaneous Buffer Operations
 
@@ -291,28 +289,37 @@
 Kill buffer @var{bufname} (@code{kill-buffer}).
 @item M-x kill-some-buffers
 Offer to kill each buffer, one by one.
+@item M-x kill-matching-buffers
+Offer to kill all buffers matching a regular expression.
 @end table
 
 @findex kill-buffer
-@findex kill-some-buffers
 @kindex C-x k
-
   @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you
 specify in the minibuffer.  The default, used if you type just
 @key{RET} in the minibuffer, is to kill the current buffer.  If you
 kill the current buffer, another buffer becomes current: one that was
 current in the recent past but is not displayed in any window now.  If
-you ask to kill a file-visiting buffer that is modified (has unsaved
-editing), then you must confirm with @kbd{yes} before the buffer is
-killed.
+you ask to kill a file-visiting buffer that is modified, then you must
+confirm with @kbd{yes} before the buffer is killed.
+
+@findex kill-some-buffers
+  The command @kbd{M-x kill-some-buffers} asks about each buffer, one
+by one.  An answer of @kbd{y} means to kill the buffer, just like
+@code{kill-buffer}.  This command ignores buffers whose names begin
+with a space, which are used internally by Emacs.
 
-  The command @kbd{M-x kill-some-buffers} asks about each buffer, one by
-one.  An answer of @kbd{y} means to kill the buffer.  Killing the current
-buffer or a buffer containing unsaved changes selects a new buffer or asks
-for confirmation just like @code{kill-buffer}.
+@findex kill-matching-buffers
+  The command @kbd{M-x kill-matching-buffers} prompts for a regular
+expression and kills all buffers whose names match that expression.
+@xref{Regexps}.  Like @code{kill-some-buffers}, it asks for
+confirmation before each kill.  This command normally ignores buffers
+whose names begin with a space, which are used internally by Emacs.
+To kill internal buffers as well, call @code{kill-matching-buffers}
+with a prefix argument.
 
-  The buffer menu feature (@pxref{Several Buffers}) is also convenient
-for killing various buffers.
+  The buffer menu feature is also convenient for killing various
+buffers.  @xref{Several Buffers}.
 
 @vindex kill-buffer-hook
   If you want to do something special every time a buffer is killed, you
@@ -332,24 +339,17 @@
 @vindex midnight-mode
 @vindex midnight-hook
   You can also have this buffer purging done for you, every day at
-midnight, by enabling Midnight mode.  Midnight mode operates each day at
-midnight; at that time, it runs @code{clean-buffer-list}, or whichever
-functions you have placed in the normal hook @code{midnight-hook}
-(@pxref{Hooks}).
-
-  To enable Midnight mode, use the Customization buffer to set the
-variable @code{midnight-mode} to @code{t}.  @xref{Easy Customization}.
+midnight, by enabling Midnight mode.  Midnight mode operates each day
+at midnight; at that time, it runs @code{clean-buffer-list}, or
+whichever functions you have placed in the normal hook
+@code{midnight-hook} (@pxref{Hooks}).  To enable Midnight mode, use
+the Customization buffer to set the variable @code{midnight-mode} to
+@code{t}.  @xref{Easy Customization}.
 
 @node Several Buffers
 @section Operating on Several Buffers
 @cindex buffer menu
 
-  The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows
-you to request operations on various Emacs buffers by editing an Emacs
-buffer containing a list of them.  You can save buffers, kill them
-(here called @dfn{deleting} them, for consistency with Dired), or display
-them.
-
 @table @kbd
 @item M-x buffer-menu
 Begin editing a buffer listing all Emacs buffers.
@@ -357,19 +357,24 @@
 Similar, but do it in another window.
 @end table
 
+  The @dfn{buffer menu} opened by @kbd{C-x C-b} (@pxref{List Buffers})
+does not merely list buffers.  It also allows you to perform various
+operations on buffers, through an interface similar to Dired
+(@pxref{Dired}).  You can save buffers, kill them (here called
+@dfn{deleting} them, for consistency with Dired), or display them.
+
 @findex buffer-menu
 @findex buffer-menu-other-window
-  The command @code{buffer-menu} writes a list of all Emacs
-buffers@footnote{Buffers which don't visit files and whose names begin
-with a space are omitted: these are used internally by Emacs.} into the
-buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu
-mode.
+  To use the buffer menu, type @kbd{C-x C-b} and switch to the window
+displaying the @samp{*Buffer List*} buffer.  You can also type
+@kbd{M-x buffer-menu} to open the buffer menu in the selected window.
+Alternatively, the command @kbd{M-x buffer-menu-other-window} opens
+the buffer menu in another window, and selects that window.
 
-  The buffer is read-only, and can be
-changed only through the special commands described in this section.
-The usual Emacs cursor motion commands can be used in the @samp{*Buffer
-List*} buffer.  The following commands apply to the buffer described on
-the current line.
+  The buffer menu is a read-only buffer, and can be changed only
+through the special commands described in this section.  The usual
+Emacs cursor motion commands can be used in this buffer.  The
+following commands apply to the buffer described on the current line:
 
 @table @kbd
 @item d
@@ -460,16 +465,6 @@
 perform the operations already requested, or you can kill it, or pay
 no further attention to it.
 
-  The list in the @samp{*Buffer List*} buffer looks exactly like the
-buffer list described in @ref{List Buffers}, because they really are
-the same.  The only difference between @code{buffer-menu} and
-@code{list-buffers} is that @code{buffer-menu} switches to the
-@samp{*Buffer List*} buffer in the selected window;
-@code{list-buffers} displays the same buffer in another window.  If
-you run @code{list-buffers} (that is, type @kbd{C-x C-b}) and select
-the buffer list manually, you can use all of the commands described
-here.
-
   Normally, the buffer @samp{*Buffer List*} is not updated
 automatically when buffers are created and killed; its contents are
 just text.  If you have created, deleted or renamed buffers, the way
@@ -486,11 +481,6 @@
 @xref{Autorevert, global-auto-revert-non-file-buffers}, for details.
 @end ifnottex
 
-
-  The command @code{buffer-menu-other-window} works the same as
-@code{buffer-menu}, except that it displays the buffers list in
-another window.
-
 @node Indirect Buffers
 @section Indirect Buffers
 @cindex indirect buffer
@@ -518,7 +508,7 @@
   The text of the indirect buffer is always identical to the text of its
 base buffer; changes made by editing either one are visible immediately
 in the other.  But in all other respects, the indirect buffer and its
-base buffer are completely separate.  They have different names,
+base buffer are completely separate.  They can have different names,
 different values of point, different narrowing, different markers,
 different major modes, and different local variables.
 
@@ -530,6 +520,7 @@
   One way to use indirect buffers is to display multiple views of an
 outline.  @xref{Outline Views}.
 
+@vindex clone-indirect-buffer-hook
   A quick and handy way to make an indirect buffer is with the command
 @kbd{M-x clone-indirect-buffer}.  It creates and selects an indirect
 buffer whose base buffer is the current buffer.  With a numeric
@@ -537,7 +528,8 @@
 uses the name of the current buffer, with a @samp{<@var{n}>} suffix
 added.  @kbd{C-x 4 c} (@code{clone-indirect-buffer-other-window})
 works like @kbd{M-x clone-indirect-buffer}, but it selects the new
-buffer in another window.
+buffer in another window.  These functions run the hook
+@code{clone-indirect-buffer-hook} after creating the indirect buffer.
 
   The more general way to make an indirect buffer is with the command
 @kbd{M-x make-indirect-buffer}.  It creates an indirect buffer from