changeset 84309:537ecf6520b8

Move here from ../../man
author Glenn Morris <rgm@gnu.org>
date Thu, 06 Sep 2007 05:01:34 +0000
parents c2eb0b4307ea
children 9626e8859adb
files doc/misc/pcl-cvs.texi
diffstat 1 files changed, 1443 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/misc/pcl-cvs.texi	Thu Sep 06 05:01:34 2007 +0000
@@ -0,0 +1,1443 @@
+\input texinfo  @c -*-texinfo-*-
+@c %**start of header
+@setfilename ../info/pcl-cvs
+@settitle PCL-CVS --- Emacs Front-End to CVS
+@syncodeindex vr fn
+@c %**end of header
+
+@copying
+Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007  Free Software
+Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
+``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@end quotation
+@end copying
+
+@dircategory Emacs
+@direntry
+* PCL-CVS: (pcl-cvs).	Emacs front-end to CVS.
+@end direntry
+
+@c The titlepage section does not appear in the Info file.
+@titlepage
+@sp 4
+@c The title is printed in a large font.
+@center @titlefont{User's Guide}
+@sp
+@center @titlefont{to}
+@sp
+@center @titlefont{PCL-CVS --- The Emacs Front-End to CVS}
+@ignore
+@sp 2
+@center release 2.9
+@c -release-
+@end ignore
+@sp 3
+@center Per Cederqvist
+@center Stefan Monnier
+@c -date-
+
+@c  The following two commands start the copyright page
+@c  for the printed manual.  This will not appear in the Info file.
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@c ================================================================
+@c                   The real text starts here
+@c ================================================================
+
+@node Top, About PCL-CVS, (dir), (dir)
+@ifnottex
+@top PCL-CVS
+
+This manual describes PCL-CVS, the GNU Emacs front-end to CVS.  It
+is nowhere near complete, so you are advised to use @kbd{M-x
+customize-group RET pcl-cvs @key{RET}} and to look at the documentation strings
+of the various commands and major modes for further information.
+@c This manual is updated to release 2.5 of PCL-CVS.
+@end ifnottex
+
+@menu
+* About PCL-CVS::               Credits, history, @dots{}
+
+* Getting started::             An introduction with a walk-through example.
+* Buffer contents::             An explanation of the buffer contents.
+* Selected files::              To which files are commands applied.
+* Commands::                    All commands, grouped by type.
+
+* Log Edit Mode::               Major mode to edit log messages.
+* Log View Mode::               Major mode to browse log changes.
+@c * CVS Status Mode::             Major mode to view CVS' status output.
+* Customization::               How you can tailor PCL-CVS to suit your needs.
+* Bugs::                        Bugs (known and unknown).
+
+* GNU Free Documentation License:: The license for this documentation.
+* Function and Variable Index::  List of functions and variables.
+* Concept Index::               List of concepts.
+* Key Index::                   List of keystrokes.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+About PCL-CVS
+
+* Contributors::                Contributors to PCL-CVS.
+
+Commands
+
+* Entering PCL-CVS::            Commands to invoke PCL-CVS
+* Setting flags::               Setting flags for CVS commands
+* Updating the buffer::
+* Movement commands::           How to move up and down in the buffer
+* Marking files::               How to mark files that other commands
+                                will later operate on.
+* Committing changes::          Checking in your modifications to the
+                                CVS repository.
+* Editing files::               Loading files into Emacs.
+* Getting info about files::    Display the log and status of files.
+* Adding and removing files::   Adding and removing files
+* Undoing changes::             Undoing changes
+* Removing handled entries::    Uninteresting lines can easily be removed.
+* Ignoring files::              Telling CVS to ignore generated files.
+* Viewing differences::         Commands to @samp{diff} different versions.
+* Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
+* Updating files::              Updating files that Need-update.
+* Tagging files::               Tagging files.
+* Miscellaneous commands::      Miscellaneous commands.
+
+Customization
+
+* Customizing Faces::
+
+@end detailmenu
+@end menu
+
+@node     About PCL-CVS, Getting started, Top, Top
+@chapter About PCL-CVS
+@cindex About PCL-CVS
+
+PCL-CVS is a front-end to CVS versions 1.9 and later.
+It concisely shows the present status of a checked out module in an
+Emacs buffer and provides single-key access to the most frequently used CVS
+commands.
+For Emacs users accustomed to VC, PCL-CVS can be thought of as a replacement
+for VC-dired (@pxref{VC Dired Mode, , Dired under VC, emacs, The GNU
+Emacs Manual}) specifically designed for CVS.
+
+PCL-CVS was originally written many years ago by Per Cederqvist who
+proudly maintained it until January 1996, at which point he released the
+beta version 2.0b2 and passed on the maintainership to Greg A Woods.
+Development stayed mostly dormant for a few years during which
+version 2.0 never seemed to be able to leave the ``beta'' stage while a
+separate XEmacs version was slowly splitting away.  In late 1998,
+Stefan Monnier picked up development again, adding some major new
+functionality and taking over the maintenance.
+
+@menu
+* Contributors::                Contributors to PCL-CVS.
+@end menu
+
+@node     Contributors,, About PCL-CVS, About PCL-CVS
+@section Contributors to PCL-CVS
+@cindex Contributors
+@cindex Authors
+
+Contributions to the package are welcome.  I have limited time to work
+on this project, but I will gladly add any code that you contribute to
+me to this package (@pxref{Bugs}).
+
+The following persons have made contributions to PCL-CVS.
+
+@itemize @bullet
+@item
+Brian Berliner wrote CVS, together with some other contributors.
+Without his work on CVS this package would be useless@dots{}
+
+@item
+Per Cederqvist wrote most of the otherwise unattributed functions in
+PCL-CVS as well as all the documentation.
+
+@item
+@email{inge@@lysator.liu.se, Inge Wallin} wrote the skeleton of
+@file{pcl-cvs.texi}, and gave useful comments on it.  He also wrote
+the files @file{elib-node.el} and @file{compile-all.el}.  The file
+@file{cookie.el} was inspired by Inge.@refill
+
+@item
+@email{linus@@lysator.liu.se, Linus Tolke} contributed useful comments
+on both the functionality and the documentation.@refill
+
+@item
+@email{jwz@@jwz.com, Jamie Zawinski} contributed
+@file{pcl-cvs-lucid.el}, which was later renamed to
+@file{pcl-cvs-xemacs.el}.@refill
+
+@item
+Leif Lonnblad contributed RCVS support (since superseded by the new
+remote CVS support).
+
+@item
+@email{jimb@@cyclic.com, Jim Blandy} contributed hooks to automatically
+guess CVS log entries from @file{ChangeLog} contents, and initial support of
+the new Cygnus / Cyclic remote CVS, as well as various sundry bug fixes
+and cleanups.
+
+@item
+@email{kingdon@@cyclic.com, Jim Kingdon} contributed lots of fixes to
+the build and installation procedure.
+
+@item
+@email{woods@@weird.com, Greg A.@: Woods} contributed code to implement
+the use of per-file diff buffers, and vendor join diffs with emerge and
+ediff, as well as various and sundry bug fixes and cleanups.
+
+@item
+@email{greg.klanderman@@alum.mit.edu, Greg Klanderman} implemented
+toggling of marked files, setting of CVS command flags via prefix
+arguments, updated the XEmacs support, updated the manual, and fixed
+numerous bugs.
+
+@item
+@email{monnier@@cs.yale.edu, Stefan Monnier} added a slew of other
+features and introduced even more new bugs.  If there's any bug left,
+you can be sure it's his.
+
+@item
+@c wordy to avoid an underfull hbox
+@email{masata-y@@is.aist-nara.ac.jp, Masatake YAMATO} made a gracious
+contribution of his cvstree code to display a tree of tags which was later
+superseded by the new @code{cvs-status-mode}.
+@end itemize
+
+Apart from these, a lot of people have sent us suggestions, ideas,
+requests, bug reports and encouragement.  Thanks a lot!  Without you
+there would be no new releases of PCL-CVS.
+
+
+@node Getting started, Buffer contents, About PCL-CVS, Top
+@chapter Getting started
+@cindex Introduction
+@cindex Example run
+@cindex Sample session
+
+This document assumes that you know what CVS is, and that you at least
+know the fundamental concepts of CVS.  If that is not the case, you
+should read the CVS documentation.  Type @kbd{info -f cvs} or @kbd{man
+cvs}.
+
+PCL-CVS is only useful once you have checked out a module.  So before
+you invoke it, you must have a copy of a module somewhere in the file
+system.
+
+You can invoke PCL-CVS by typing @kbd{M-x cvs-examine @key{RET}}.
+You can also invoke it via the menu bar, under @samp{Tools}.
+Or, if you prefer, you can also invoke PCL-CVS by simply visiting the
+CVS administrative subdirectory of your module, with a prefix argument.
+For example, to invoke PCL-CVS in a separate frame, type @kbd{C-u C-x 5
+f ~/my/project/CVS @key{RET}}.
+
+The function @code{cvs-examine} will ask for a directory.  The command
+@samp{cvs -n update} will be run in that directory.  (It should contain
+files that have been checked out from a CVS archive.)  The output from
+@code{cvs} will be parsed and presented in a table in a buffer called
+@samp{*cvs*}.  It might look something like this:
+
+@example
+Repository : /usr/CVSroot
+Module     : test
+Working dir: /users/ceder/FOO/test
+
+
+In directory .:
+           Need-Update            bar
+           Need-Update            file.txt
+           Modified               namechange
+           Need-Update            newer
+In directory sub:
+           Modified               ChangeLog
+
+--------------------- End ---------------------
+-- last cmd: cvs -f -z6 -n update -d -P --
+@end example
+
+In this example, your repository is in @file{/usr/CVSroot} and CVS has
+been run in the directory @file{/users/ceder/FOO/test}.  The three files
+(@file{bar}, @file{file.txt} and
+@file{newer}) that are marked with @samp{Need-Update} have been changed
+by someone else in the CVS repository.  Two files (@file{namechange}
+and @file{sub/ChangeLog}) have been modified locally, and need to be
+checked in.
+
+You can move the cursor up and down in the buffer with @kbd{C-n} and
+@kbd{C-p} or @kbd{n} and @kbd{p}.  If you press @kbd{c} on one of the
+@samp{Modified} files, that file will be checked in to the CVS
+repository. @xref{Committing changes}.  You can also press @kbd{O} to
+update any of the files that are marked @samp{Need-Update}.  You can
+also run @kbd{M-x cvs-update @key{RET}} (bound to @kbd{M-u} in the
+@samp{*cvs*} buffer) to update all the files.@refill
+
+You can then press @kbd{=} to easily get a @samp{diff} between your
+modified file and the base version that you started from, or you can
+press @kbd{l} to get the output from @samp{cvs log}.  Many more such
+commands are available simply by pressing a key (@pxref{Getting info
+about files}).
+
+@node Buffer contents, Selected files, Getting started, Top
+@chapter Buffer contents
+@cindex Buffer contents
+@cindex @code{*cvs*} buffer contents
+
+The display contains several columns, some of which are optional.
+These columns are, from left to right:
+
+@itemize @bullet
+
+@item
+Optionally, the head revision of the file.  This is the latest version
+found in the repository.  It might also contain (instead of the head
+revision) a sub status which typically gives further information about
+how we got to the current state, for example @samp{patched},
+@samp{merged}, @dots{}
+
+@item
+An asterisk when the file is @dfn{marked} (@pxref{Selected
+files}).@refill
+
+@item
+The actual status of the file wrt the repository.  See below.
+
+@item
+Optionally, the base revision of the file.  This is the version
+which the copy in your working directory is based upon.
+
+@item
+The file name.
+
+@end itemize
+
+The @samp{file status} field can have the following values:
+
+@table @samp
+@item Modified
+The file is modified in your working directory, and there was no
+modification to the same file in the repository.  This status can have
+the following substatus:
+
+@table @samp
+@item merged
+The file was modified in your working directory, and there were
+modifications in the repository as well, but they were merged
+successfully, without conflict, in your working directory.@refill
+@end table
+
+@item Conflict
+A conflict was detected while trying to merge your changes to @var{file}
+with changes from the repository.  @var{file} (the copy in your
+working directory) is now the output of the @code{rcsmerge} command on
+the two versions; an unmodified copy of your file is also in your
+working directory, with the name @file{.#@var{file}.@var{version}},
+where @var{version} is the RCS revision that your modified file started
+from.  @xref{Viewing differences}, for more details.@refill
+
+A conflict can also come from a disagreement on the existence of the file
+rather than on its content.  This case is indicated by the following
+possible substatus:
+
+@table @samp
+@item removed
+The file is locally removed but a new revision has been committed to
+the repository by someone else.
+
+@item added
+The file is locally added and has also been added to the repository
+by someone else.
+
+@item modified
+The file is locally modified but someone else has removed it from the
+repository.
+@end table
+
+@item Added
+The file has been added by you, but it still needs to be checked in to
+the repository.@refill
+
+@item Removed
+The file has been removed by you, but it still needs to be checked in to
+the repository.  You can resurrect it by typing @kbd{a} (@pxref{Adding
+and removing files}).@refill
+
+@item Unknown
+A file that was detected in your directory, but that neither appears in
+the repository, nor is present on the list of files that CVS should
+ignore.@refill
+
+@item Up-to-date
+The file is up to date with respect to the version in the repository.
+This status can have a substatus of:
+
+@table @samp
+@item added
+You have just added the file to the repository.@refill
+
+@item updated
+The file was brought up to date with respect to the repository.  This is
+done for any file that exists in the repository but not in your source,
+and for files that you haven't changed but are not the most recent
+versions available in the repository.@refill
+
+@item patched
+The file was brought up to date with respect to the remote repository by
+way of fetching and applying a patch to the file in your source.  This
+is equivalent to @samp{updated} except that CVS decided to use a hopefully
+more efficient method.@refill
+
+@item committed
+You just committed the file.@refill
+@end table
+
+@item Need-Update
+Either a newer version than the one in your source is available in the
+repository and you have not modified your checked out version, or the
+file exists in the repository but not in your source.  Use
+@samp{cvs-mode-update} bound to @kbd{O} to update the file.@refill
+
+@item Need-Merge
+You have modified the checked out version of the file, and a newer
+version is available in the repository.  A merge will take place when
+you run a @samp{cvs-update}.
+
+@item Missing
+The file has been unexpectedly removed from your working directory
+although it has not been @samp{cvs remove}d.
+@end table
+
+@node Selected files, Commands, Buffer contents, Top
+@chapter Selected files
+@cindex Selected files
+@cindex Marked files
+@cindex File selection
+@cindex Active files
+@cindex Applicable
+
+Many of the commands work on the current set of @dfn{selected} files
+which can be either the set of marked files (if any file is marked and
+marks are not ignored) or whichever file or directory the cursor is on.
+
+If a directory is selected but the command cannot be applied to a
+directory, then it will be applied to the set of files under this
+directory which are in the @samp{*cvs*} buffer.
+
+@findex cvs-mode-force-command
+@findex cvs-allow-dir-commit
+Furthermore, each command only operates on a subset of the selected
+files, depending on whether or not the command is @dfn{applicable} to
+each file (based on the file's status).  For example,
+@code{cvs-mode-commit} is not applicable to a file whose status is
+@samp{Need-Update}.  If it should happen that PCL-CVS guesses the
+applicability wrong, you can override it with the special prefix
+@code{cvs-mode-force-command} normally bound to @kbd{M-f} (and file a
+bug report).  The applicability rule can be slightly changed with
+@code{cvs-allow-dir-commit} and @code{cvs-force-dir-tag}.
+
+By default, marks are always in effect (you may change this, however, by
+setting the variable @code{cvs-default-ignore-marks}) except for the
+commands that @samp{tag} or @samp{diff} a file (which can be changed
+with the variable @code{cvs-invert-ignore-marks}).
+
+In addition, you may use the special prefix @code{cvs-mode-toggle-marks}
+normally bound to @key{T} to toggle the use of marks for the following
+command.
+
+This scheme might seem a little complicated, but once one gets used to
+it, it is quite powerful.
+
+For commands to mark and unmark files, see @ref{Marking files}.
+
+@node Commands, Log Edit Mode, Selected files, Top
+@chapter Commands
+
+@iftex
+This chapter describes all the commands that you can use in PCL-CVS.
+@end iftex
+@ifnottex
+The nodes in this menu contains explanations about all the commands that
+you can use in PCL-CVS.  They are grouped together by type.
+@end ifnottex
+
+@menu
+* Entering PCL-CVS::            Commands to invoke PCL-CVS
+* Setting flags::               Setting flags for CVS commands
+* Updating the buffer::
+* Movement commands::           How to move up and down in the buffer
+* Marking files::               How to mark files that other commands
+                                will later operate on.
+* Committing changes::          Checking in your modifications to the
+                                CVS repository.
+* Editing files::               Loading files into Emacs.
+* Getting info about files::    Display the log and status of files.
+* Adding and removing files::   Adding and removing files
+* Undoing changes::             Undoing changes
+* Removing handled entries::    Uninteresting lines can easily be removed.
+* Ignoring files::              Telling CVS to ignore generated files.
+* Viewing differences::         Commands to @samp{diff} different versions.
+* Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
+* Updating files::              Updating files that Need-update.
+* Tagging files::               Tagging files.
+* Miscellaneous commands::      Miscellaneous commands.
+@end menu
+
+
+@node Entering PCL-CVS, Setting flags, Commands, Commands
+@section Entering PCL-CVS
+@findex cvs-update
+@findex cvs-examine
+@findex cvs-status
+@findex cvs-checkout
+@findex cvs-quickdir
+@cindex Creating the *cvs* buffer
+
+Most commands in PCL-CVS require that you have a @samp{*cvs*}
+buffer.  The commands that you use to get one are listed below.
+For each, a @samp{cvs} process will be run, the output will be parsed by
+PCL-CVS, and the result will be printed in the @samp{*cvs*} buffer (see
+@ref{Buffer contents}, for a description of the buffer's contents).
+
+@table @kbd
+@item M-x cvs-update
+Run a @samp{cvs update} command.  You will be asked for the directory
+in which the @samp{cvs update} will be run.
+
+@item M-x cvs-examine
+Run a @samp{cvs -n update} command.  This is identical to the previous
+command, except that it will only check what needs to be done but will
+not change anything.  You will be asked for the directory in
+which the @samp{cvs -n update} will be run.
+
+@item M-x cvs-status
+Run a @samp{cvs status} command.  You will be asked for the directory
+in which the @samp{cvs status} will be run.
+
+@item M-x cvs-checkout
+Run a @samp{cvs checkout} command.  You will be asked for the directory
+in which the @samp{cvs update} will be run and the module to be checked
+out.
+
+@item M-x cvs-quickdir
+Populate the @samp{*cvs*} buffer by just looking at the @file{CVS/Entries}
+files.  This is very much like @code{cvs-examine} except that it does
+not access the CVS repository, which is a major advantage when the
+repository is far away.  But of course, it will not be able to detect
+when a file needs to be updated or merged.
+@end table
+
+@findex cvs-dired-action
+@findex cvs-dired-use-hook
+The first four of
+those commands are also reachable from the menu bar
+under @samp{Tools->PCL-CVS}.  Finally, an alternative way is to visit
+the CVS administrative subdirectory in your work area with a simple
+prefix argument.  For example @kbd{C-u C-x C-f ~/my/work/CVS @key{RET}}.  This
+by default runs @code{cvs-quickdir} but the specific behavior can be
+changed with @code{cvs-dired-action} and @code{cvs-dired-use-hook}.
+
+By default, the commands above will descend recursively into
+subdirectories.  You can avoid that behavior by including @samp{-l} in
+the flags for the command.  These flags can be set by giving a prefix
+argument to the command (e.g., by typing
+@kbd{C-u M-x cvs-update @key{RET} -l @key{RET}}).
+
+
+@node Setting flags, Updating the buffer, Entering PCL-CVS, Commands
+@section Setting flags for CVS commands
+@cindex Optional switches to CVS
+@cindex Command-line options to CVS
+
+This section describes the convention used by nearly all PCL-CVS
+commands for setting optional flags sent to CVS.  A single @kbd{C-u}
+prefix argument is used to cause the command to prompt for flags to be
+used for the current invocation of the command only.  Two @kbd{C-u} prefix
+arguments are used to prompt for flags which will be set permanently, for the
+current invocation and all that follow, until the flags are changed, or
+unless temporary flags are set which override them.
+
+Perhaps an example or two is in order.  Say you are about to add a
+binary file to the repository, and want to specify the flags @samp{-kb}
+to @samp{cvs add}.  You can type @kbd{C-u a -kb @key{RET}},
+and the file will be added.  Subsequent @samp{cvs add}
+commands will use the previously prevailing flags.
+
+As a second example, say you are about to perform a diff and want to see
+the result in unified diff format, i.e. you'd like to pass the flag
+@samp{-u} to both @samp{cvs diff} and @samp{diff}.  You'd also like all
+subsequent diffs to use this flag.  You can type @kbd{C-u C-u = -u @key{RET}}
+and the diff will be performed, and the default flags will be set to
+@code{("-u")}.  You can of course override this flag for a single diff
+by using a single @kbd{C-u} prefix argument.
+
+@cindex Special prefix
+In addition to this, some commands can take @dfn{special prefix} arguments.
+These work as follows: When called with a @kbd{C-u} prefix, the user is
+prompted for a new value of the special prefix and the special prefix is
+activated for the next command.  When called without the @kbd{C-u}
+prefix, the special prefix is re-activated (with the same value as last
+time) for the next command.  Calling the prefix command again when it's
+already activated deactivates it.  Calling it with the @kbd{C-u C-u}
+prefix activates it for all subsequent commands until you deactivate it
+explicitly.  The special prefixes are:
+
+@table @kbd
+@item T
+Toggles whether or not marks will be active in the next command.@refill
+
+@item b
+Provide the next command with a branch (can be any version
+specifier) to work on.@refill
+
+@item B
+Secondary branch argument.  Only meaningful if @kbd{b} is also used.
+It can be used to provide a second branch argument to
+@code{cvs-mode-diff} or to @code{cvs-mode-update}.
+
+@item M-f
+Forces the next command to apply to every selected file rather than only
+to the ones PCL-CVS thinks are relevant.
+@end table
+
+@node Updating the buffer, Movement commands, Setting flags, Commands
+@section Updating the @samp{*cvs*} buffer
+@findex cvs-update
+@findex cvs-examine
+@findex cvs-status
+@findex cvs-mode-update
+@findex cvs-mode-examine
+@findex cvs-mode-status
+
+The following commands can be used from within the @samp{*cvs*} buffer
+to update the display:
+
+@table @kbd
+@item M-u
+Runs the command @samp{cvs-update}.@refill
+
+@item M-e
+Runs the command @samp{cvs-examine}.@refill
+
+@item M-s
+Runs the command @samp{cvs-status}.@refill
+@end table
+
+In addition to the above commands which operate on the whole module,
+you can run the equivalent CVS command on just a subset of the
+files/directories with these keys:
+
+@table @kbd
+@item O
+Runs @code{cvs-mode-update} on the selected files.  When run on the
+top-level directory, this is equivalent to @kbd{M-u}.@refill
+
+@item e
+Runs @code{cvs-mode-examine} on the selected files.  When run on the
+top-level directory, this is equivalent to @kbd{M-e}.@refill
+
+@findex cvs-status-mode
+@item s
+Runs @code{cvs-mode-status} on the selected files.  When run on the
+top-level directory, this is equivalent to @kbd{M-s}, except that
+CVS output will be shown in a @samp{*cvs-info*} buffer that will be
+put in @samp{cvs-status-mode}.@refill
+@end table
+
+
+@node Movement commands, Marking files, Updating the buffer, Commands
+@section Movement Commands
+@cindex Movement Commands
+@findex cvs-mode-next-line
+@findex cvs-mode-previous-line
+@kindex SPC@r{--Move down one file}
+@kindex n@r{--Move down one file}
+@kindex p@r{--Move up one file}
+
+You can use most normal Emacs commands to move forward and backward in
+the buffer.  Some keys are rebound to functions that take advantage of
+the fact that the buffer is a PCL-CVS buffer:
+
+
+@table @kbd
+@item @key{SPC}
+@itemx n
+These keys move the cursor one file forward, towards the end of the
+buffer (@code{cvs-mode-next-line}).@refill
+
+@itemx p
+This key moves one file backward, towards the beginning of the buffer
+(@code{cvs-mode-previous-line}).
+@end table
+
+
+@node Marking files, Committing changes, Movement commands, Commands
+@section Marking files
+@cindex Selecting files (commands to mark files)
+@cindex Marking files
+@kindex m@r{--marking a file}
+@kindex M@r{--marking all files}
+@kindex u@r{--unmark a file}
+@kindex ESC DEL@r{--unmark all files}
+@kindex DEL@r{--unmark previous file}
+@kindex %@r{--mark files matching regexp}
+@kindex S@r{--mark files in a particular state}
+@kindex T@r{--toggle marks}
+@findex cvs-mode-mark
+@findex cvs-mode-unmark
+@findex cvs-mode-mark-all-files
+@findex cvs-mode-unmark-all-files
+@findex cvs-mode-unmark-up
+@findex cvs-mode-mark-matching-files
+@findex cvs-mode-mark-on-state
+@findex cvs-mode-toggle-marks
+
+PCL-CVS works on a set of @dfn{selected files} (@pxref{Selected files}).
+You can mark and unmark files with these commands:
+
+@table @kbd
+@item m
+This marks the file that the cursor is positioned on.  If the cursor is
+positioned on a directory all files in that directory are marked
+(@code{cvs-mode-mark}).@refill
+
+@item u
+Unmark the file that the cursor is positioned on. If the cursor is on a
+directory, all files in that directory are unmarked
+(@code{cvs-mode-unmark}).@refill
+
+@item M
+Mark @emph{all} files in the buffer (@code{cvs-mode-mark-all-files}).
+
+@item M-@key{DEL}
+Unmark @emph{all} files (@code{cvs-mode-unmark-all-files}).
+
+@item @key{DEL}
+Unmark the file on the previous line, and move point to that line
+(@code{cvs-mode-unmark-up}).
+
+@item %
+Mark all files matching a regular expression
+(@code{cvs-mode-mark-matching-files}).
+
+@item S
+Mark all files in a particular state, such as ``Modified'' or
+``Removed'' (@code{cvs-mode-mark-on-state}).
+
+@item T
+Toggle use of marks for the next command (@code{cvs-mode-toggle-marks}).
+@end table
+
+
+@node Committing changes, Editing files, Marking files, Commands
+@section Committing changes
+@cindex Committing changes
+@findex cvs-mode-commit
+@findex cvs-mode-commit-setup
+@kindex c@r{--commit files}
+@kindex C@r{--commit files with @file{ChangeLog} message}
+@vindex cvs-auto-revert@r{ (variable)}
+@cindex Commit buffer
+@cindex Edit buffer
+@cindex Erasing commit message
+@cindex Reverting buffers after commit
+
+Committing changes basically works as follows:
+
+@enumerate
+@item
+After having selected the files you want to commit, you type either
+@kbd{c} or @kbd{C} which brings up a special buffer
+@samp{*cvs-commit*}.@refill
+
+@item
+You type in the log message describing the changes you're about to
+commit (@pxref{Log Edit Mode}).
+
+@item
+When you're happy with it, you type @kbd{C-c C-c} to do the actual
+commit.@refill
+@end enumerate
+
+There's no hidden state, so you can abort the process or pick it up
+again at any time.
+
+@vindex log-edit-confirm@r{ (variable)}
+The set of files actually committed is really decided only during the
+very last step, which is a mixed blessing.  It allows you to go back and
+change your mind about which files to commit, but it also means that you
+might inadvertently change the set of selected files.  To reduce the
+risk of error, @kbd{C-c C-c} will ask for confirmation if the set of
+selected files has changed between the first step and the last.  You can
+change this last detail with @code{log-edit-confirm}.
+
+As for the difference between @kbd{c} (i.e. @code{cvs-mode-commit}) and
+@kbd{C} (i.e. @code{cvs-mode-commit-setup}) is that the first gets you
+straight to @samp{*cvs-commit*} without erasing it or changing anything
+to its content, while the second first erases @samp{*cvs-commit*}
+and tries to initialize it with a sane default (it does that by either
+using a template provided by the CVS administrator or by extracting a
+relevant log message from a @file{ChangeLog} file).
+
+If you are editing the files in your Emacs, an automatic
+@samp{revert-buffer} will be performed.  (If the file contains
+@samp{$@asis{Id}$} keywords, @samp{cvs commit} will write a new file with
+the new values substituted.  The auto-revert makes sure that you get
+them into your buffer.)  The revert will not occur if you have modified
+your buffer, or if @samp{cvs-auto-revert} is set to
+@samp{nil}.
+
+
+@node Editing files, Getting info about files, Committing changes, Commands
+@section Editing files
+@cindex Editing files
+@cindex Finding files
+@cindex Loading files
+@cindex Dired
+@cindex Invoking dired
+@findex cvs-mode-find-file
+@findex cvs-mode-find-file-other-window
+@findex cvs-mode-add-change-log-entry-other-window
+@kindex f@r{--find file or directory}
+@kindex o@r{--find file in other window}
+@kindex A@r{--add @file{ChangeLog} entry}
+
+There are currently three commands that can be used to find a file (that
+is, load it into a buffer and start editing it there).  These commands
+work on the line that the cursor is situated at.  They always ignore any marked
+files.
+
+@table @kbd
+@item f
+Find the file that the cursor points to (@code{cvs-mode-find-file}).  If
+the cursor points to a directory, run @code{dired} on that directory;
+@inforef{Dired, , emacs}.
+
+@item o
+Like @kbd{f}, but use another window
+(@code{cvs-mode-find-file-other-window}).@refill
+
+@item A
+Invoke @samp{add-change-log-entry-other-window} to edit a
+@file{ChangeLog} file.  The @file{ChangeLog} file will be found in the
+directory of the file the cursor points to, or in a parent of that
+directory (@code{cvs-mode-add-change-log-entry-other-window}).@refill
+@end table
+
+
+@node Getting info about files, Adding and removing files, Editing files, Commands
+@section Getting info about files
+@cindex Status (cvs command)
+@cindex Log (RCS/cvs command)
+@cindex Getting status
+@kindex l@r{--run @samp{cvs log}}
+@kindex s@r{--run @samp{cvs status}}
+@findex cvs-mode-log
+@findex cvs-mode-status
+
+@table @kbd
+@item l
+Call the command @code{cvs-mode-log} which runs @samp{cvs log} on all
+selected files, and show the result in a temporary buffer
+@samp{*cvs-info*} (@pxref{Log View Mode}).
+
+@item s
+Call the command @code{cvs-mode-status} which runs @samp{cvs status} on
+all selected files, and show the result in a temporary buffer
+@samp{*cvs-info*}.
+@c Fixme: reinstate when node is written:
+@c (@pxref{CVS Status Mode}).
+@end table
+
+
+@node Adding and removing files, Undoing changes, Getting info about files, Commands
+@section Adding and removing files
+@cindex Adding files
+@cindex Removing files
+@cindex Resurrecting files
+@cindex Deleting files
+@cindex Putting files under CVS control
+@kindex a@r{--add a file}
+@kindex r@r{--remove a file}
+@findex cvs-mode-add
+@findex cvs-mode-remove-file
+
+The following commands are available to make it easy to add files to
+and remove them from the CVS repository.
+
+@table @kbd
+@item a
+Add all selected files.  This command can be used on @samp{Unknown}
+files (@pxref{Buffer contents}).  The status of the file will change to
+@samp{Added}, and you will have to use @kbd{c} (@samp{cvs-mode-commit}
+@pxref{Committing changes}), to really add the file to the
+repository.@refill
+
+This command can also be used on @samp{Removed} files (before you commit
+them) to resurrect them.
+
+The command that is run is @code{cvs-mode-add}.
+
+@item r
+This command removes the selected files (after prompting for
+confirmation).  The files are deleted from your directory and
+(unless the status was @samp{Unknown}; @pxref{Buffer contents}) they will
+also be @samp{cvs remove}d.  If the files' status was @samp{Unknown}
+they will disappear from the buffer.  Otherwise their status will change to
+@samp{Removed}, and you must use @kbd{c} (@samp{cvs-mode-commit},
+@pxref{Committing changes}) to commit the removal.@refill
+
+The command that is run is @code{cvs-mode-remove-file}.
+@end table
+
+
+@node Undoing changes, Removing handled entries, Adding and removing files, Commands
+@section Undoing changes
+@cindex Undo changes
+@cindex Flush changes
+@kindex U@r{--undo changes}
+@findex cvs-mode-undo-local-changes
+
+@table @kbd
+@item U
+If you have modified a file, and for some reason decide that you don't
+want to keep the changes, you can undo them with this command.  It works
+by removing your working copy of the file and then getting the latest
+version from the repository (@code{cvs-mode-undo-local-changes}).
+@end table
+
+
+@node Removing handled entries, Ignoring files, Undoing changes, Commands
+@section Removing handled entries
+@cindex Expunging uninteresting entries
+@cindex Uninteresting entries, getting rid of them
+@cindex Getting rid of uninteresting lines
+@cindex Removing uninteresting (processed) lines
+@cindex Handled lines, removing them
+@kindex x@r{--remove processed entries}
+@kindex C-k@r{--remove selected entries}
+@findex cvs-mode-remove-handled
+@findex cvs-mode-acknowledge
+@findex cvs-mode-ignore
+
+@table @kbd
+@item x
+This command allows you to remove all entries that you have processed.
+More specifically, the lines for @samp{Up-to-date} files (@pxref{Buffer
+contents}) are removed from the buffer.  If a directory becomes empty
+the heading for that directory is also removed.  This makes it easier to
+get an overview of what needs to be done.
+
+@vindex cvs-mode-remove-handled@r{ (variable)}
+@kbd{x} invokes @code{cvs-mode-remove-handled}.  If
+@samp{cvs-auto-remove-handled} is set to non-@code{nil}, this will
+automatically be performed after every commit.@refill
+
+@item C-k
+This command can be used for lines that @samp{cvs-mode-remove-handled} would
+not delete, but that you want to delete (@code{cvs-mode-acknowledge}).
+@end table
+
+
+@node Ignoring files, Viewing differences, Removing handled entries, Commands
+@section Ignoring files
+@cindex Ignoring files
+@kindex i@r{--ignoring files}
+@findex cvs-mode-ignore
+
+@table @kbd
+@item i
+Arrange so that CVS will ignore the selected files.  The file names are
+added to the @file{.cvsignore} file in the corresponding directory.  If
+the @file{.cvsignore} file doesn't exist, it will be created.
+
+The @file{.cvsignore} file should normally be added to the repository,
+but you could ignore it as well, if you like it better that way.
+
+This runs @code{cvs-mode-ignore}.
+@end table
+
+@node Viewing differences, Invoking Ediff, Ignoring files, Commands
+@section Viewing differences
+@cindex Diff
+@cindex Invoking @code{diff}
+@cindex Conflicts, how to resolve them
+@cindex Viewing differences
+@kindex d=@r{--run @samp{cvs diff}}
+@kindex =@r{--run @samp{cvs diff}}
+@kindex db@r{--diff against base version}
+@kindex dh@r{--diff against head of repository}
+@kindex dr@r{--diff between base and head of repository}
+@kindex dv@r{--diff against vendor branch}
+@kindex dy@r{--diff against yesterday's head}
+@findex cvs-mode-diff
+@findex cvs-mode-diff-backup
+@findex cvs-mode-diff-head
+@findex cvs-mode-diff-repository
+@findex cvs-mode-diff-vendor
+@findex cvs-mode-diff-yesterday
+@vindex cvs-invert-ignore-marks@r{ (variable)}
+
+@table @kbd
+@item =
+@itemx d =
+Display a @samp{cvs diff} between the selected files and the version
+that they are based on (@code{cvs-mode-diff}).@refill
+
+@item d b
+If CVS finds a conflict while merging two versions of a file (during a
+@samp{cvs update}, @pxref{Updating the buffer}) it will save the
+original file in a file called @file{.#@var{file}.@var{version}} where
+@var{file} is the name of the file, and @var{version} is the revision
+number that @var{file} was based on.@refill
+
+With the @kbd{d b} command you can run a @samp{diff} on the files
+@file{.#@var{file}.@var{version}} and @file{@var{file}}.@refill
+
+@item d h
+Display a @samp{cvs diff} between the selected files and the head
+revision (the most recent version on the current
+branch) in the repository (@code{cvs-mode-diff-head}).@refill
+
+@item d r
+Display a @samp{cvs diff} between the base revision of the selected
+files and the head revision in the repository.  This displays the
+changes anyone has committed to the repository since you last executed
+a checkout, update or commit operation
+(@code{cvs-mode-diff-repository}).
+
+@item d v
+Display a @samp{cvs diff} between the selected files and the head
+revision of the vendor branch in the repository
+(@code{cvs-mode-diff-vendor}).@refill
+
+@item d y
+Display a @samp{cvs diff} between the selected files and yesterday's
+head revision in the repository
+(@code{cvs-mode-diff-yesterday}).@refill
+@end table
+
+By default, @samp{diff} commands ignore the marks.  This can be changed
+with @code{cvs-invert-ignore-marks}.
+
+@node Invoking Ediff, Updating files, Viewing differences, Commands
+@section Running ediff
+@cindex Ediff
+@cindex Invoking ediff
+@cindex Viewing differences
+@cindex Conflicts, how to resolve them
+@cindex Resolving conflicts
+@kindex e@r{--invoke @samp{ediff}}
+@findex cvs-mode-idiff
+@findex cvs-mode-imerge
+
+@table @kbd
+@vindex cvs-idiff-imerge-handlers@r{ (variable)}
+@item d e
+This uses @code{ediff} (or @code{emerge}, depending on
+@samp{cvs-idiff-imerge-handlers}) to allow you to view diffs.
+If a prefix argument is given, PCL-CVS will prompt for a revision against
+which the diff should be made, else the default will be to use the BASE
+revision.
+
+@cindex Merging with @code{ediff} and @code{emerge}
+@item d E
+This command use @code{ediff} (or @code{emerge}, see above) to allow you
+to do an interactive 3-way merge.
+
+@strong{Please note:}  when the file status is @samp{Conflict},
+CVS has already performed a merge.  The resulting file is not used in
+any way if you use this command.  If you use the @kbd{q} command inside
+@samp{ediff} (to successfully terminate a merge) the file that CVS
+created will be overwritten.@refill
+@end table
+
+@node Updating files, Tagging files, Invoking Ediff, Commands
+@section Updating files
+@findex cvs-mode-update
+@cindex Updating files
+@kindex O@r{--update files}
+
+@table @kbd
+@item O
+Update all selected files with status @samp{Need-update} by running
+@samp{cvs update} on them (@code{cvs-mode-update}).
+@end table
+
+
+@node Tagging files, Miscellaneous commands, Updating files, Commands
+@section Tagging files
+@findex cvs-mode-tag
+@findex cvs-mode-untag
+@findex cvs-rtag
+@cindex Tagging files
+@kindex M-t@r{--repository tag files}
+@kindex t@r{--tag files}
+@vindex cvs-invert-ignore-marks@r{ (variable)}
+@vindex cvs-force-dir-tag@r{ (variable)}
+
+@table @kbd
+@item t
+Tag all selected files by running @samp{cvs tag} on
+them (@code{cvs-mode-tag}).  It's usually preferable to tag a directory
+at a time.  Rather than selecting all files (which too often doesn't
+select all files but only the few that are displayed), clear the
+selection with @kbd{M-DEL} (@code{cvs-mode-unmark-all-files}), position
+the cursor on the directory you want to tag and hit @kbd{t}.
+@end table
+
+By default, @samp{tag} commands ignore the marks.  This can be changed
+with @code{cvs-invert-ignore-marks}.  Also, by default @samp{tag} can
+only be applied to directories, see @code{cvs-force-dir-tag} if you want
+to change this behavior.
+
+
+@node Miscellaneous commands,  , Tagging files, Commands
+@section Miscellaneous commands
+@findex cvs-mode-byte-compile-files
+@cindex Recompiling elisp files
+@cindex Byte compilation
+@findex cvs-mode-delete-lock
+@cindex Getting rid of lock files
+@cindex Lock files
+@kindex q@r{--bury the PCL-CVS buffer}
+@findex cvs-bury-buffer
+@findex cvs-mode-quit
+@cindex Quitting
+@kindex h@r{--help}
+@kindex ?@r{--help}
+@findex cvs-help
+@cindex Help
+
+@table @kbd
+@item M-x cvs-mode-byte-compile-files
+Byte compile all selected files that end in @file{.el}.
+
+@item M-x cvs-mode-delete-lock
+This command deletes the lock files that
+the @samp{*cvs*} buffer informs you about.  You should normally never have to
+use this command, since CVS tries very carefully to always remove the
+lock files itself.
+
+You can only use this command when a message in the @samp{*cvs*} buffer tells
+you so.  You should wait a while before using this command in case
+someone else is running a @code{cvs} command.
+
+Also note that this only works if the repository is local.
+
+@item ?
+@itemx h
+Show a summary of common command key bindings in the echo
+area (@code{cvs-help}).
+
+@item q
+Bury the PCL-CVS buffer (@code{cvs-bury-buffer}).
+
+@item M-x cvs-mode-quit
+Quit PCL-CVS, killing the @samp{*cvs*} buffer.
+@end table
+
+@node Log Edit Mode, Log View Mode, Commands, Top
+@chapter Editing a Log Message
+
+@cindex Log Edit mode
+@cindex mode, Log Edit
+Buffers for entering/editing log messages for changes which are about
+to be committed are put into Log Edit mode.
+
+Sometimes the log buffer contains default text when you enter it,
+typically the last log message entered.  If it does, mark and point
+are set around the entire contents of the buffer so that it is easy to
+kill the contents of the buffer with @kbd{C-w}.
+
+@findex log-edit-insert-changelog
+If you work by writing entries in the @file{ChangeLog}
+(@pxref{(emacs)Change Log}) and then commit the change under revision
+control, you can generate the Log Edit text from the ChangeLog using
+@kbd{C-c C-a} (@kbd{log-edit-insert-changelog}).  This looks for
+entries for the file(s) concerned in the top entry in the ChangeLog
+and uses those paragraphs as the log text.  This text is only inserted
+if the top entry was made under your user name on the current date.
+@xref{(emacs)Change Logs and VC}, for the opposite way of
+working---generating ChangeLog entries from the revision control log.
+
+In the Log Edit buffer, @kbd{C-c C-f} (@kbd{M-x log-edit-show-files})
+shows the list of files to be committed in case you need to check
+that.
+
+When you have finished editing the log message, type @kbd{C-c C-c} to
+exit the buffer and commit the change.
+
+@c Fixme: customization variables
+
+@node Log View Mode, Customization, Log Edit Mode, Top
+@chapter Browsing a Log of Changes
+
+@cindex Log View mode
+@cindex mode, Log View
+@cindex output, logs
+
+@findex cvs-mode-log
+@findex vc-print-log
+Log View mode provides a few useful commands for navigating revision
+control log output.  It is used for the output buffers of both
+@code{cvs-mode-log} and @code{vc-print-log}.
+
+In this mode, @kbd{n} goes to the next message and @kbd{p} goes to the
+previous message and @kbd{N} and @kbd{P} go to the next and previous
+files, respectively, in multi-file output.  With a numeric prefix
+argument, these commands move that many messages of files.
+
+@c @node CVS Status Mode
+@c @chapter Viewing CVS' Status output
+
+@node Customization, Bugs, Log View Mode, Top
+@chapter Customization
+@vindex log-edit-changelog-full-paragraphs@r{ (variable)}
+@vindex cvs-auto-remove-handled@r{ (variable)}
+@vindex cvs-auto-remove-directories@r{ (variable)}
+@vindex cvs-update-prog-output-skip-regexp@r{ (variable)}
+@vindex cvs-cvsroot@r{ (variable)}
+@vindex cvs-auto-revert@r{ (variable)}
+@vindex log-edit-require-final-newline@r{ (variable)}
+@vindex cvs-sort-ignore-file@r{ (variable)}
+@cindex Customization
+@cindex Variables, list of all
+@cindex Erasing input buffer
+@cindex Context diff, how to get
+@cindex Unidiff, how to get
+@cindex Automatically remove handled files
+@cindex @samp{-u} option in modules file
+@cindex Modules file (@samp{-u} option)
+@cindex Update program (@samp{-u} option in modules file)
+@cindex Reverting buffers after commit
+@cindex Require final newline
+@cindex Automatically inserting newline
+@cindex Commit message, inserting newline
+@cindex Sorting @file{.cvsignore} file
+@cindex @file{.cvsignore} file, sorting
+@cindex Automatically sorting @file{.cvsignore}
+@cindex @samp{CVSROOT}, overriding
+
+If you have an idea about any customization that would be handy but
+isn't present in this list, please tell us!
+For info on how to reach us, see @ref{Bugs}.@refill
+
+@table @samp
+@item cvs-auto-remove-handled
+If this variable is set to any non-@code{nil} value,
+@samp{cvs-mode-remove-handled} will be called every time you check in
+files, after the check-in is ready.  @xref{Removing handled
+entries}.@refill
+
+@item cvs-auto-remove-directories
+If this variable is set to any non-@code{nil} value, directories that do
+not contain any files to be checked in will not be listed in the
+@samp{*cvs*} buffer.@refill
+
+@item cvs-auto-revert
+If this variable is set to any non-@samp{nil} value any buffers you have
+that visit a file that is committed will be automatically reverted.
+This variable defaults to @samp{t}. @xref{Committing changes}.@refill
+
+@item cvs-update-prog-output-skip-regexp
+The @samp{-u} flag in the @file{modules} file can be used to run a command
+whenever a @samp{cvs update} is performed (see @code{cvs(5)}).  This regexp
+is used to search for the last line in that output.  It is normally set
+to @samp{$}.  That setting is only correct if the command outputs
+nothing.  Note that PCL-CVS will get very confused if the command
+outputs @emph{anything} to @code{stderr}.
+
+@item cvs-cvsroot
+This variable can be set to override @samp{CVSROOT}.  It should be a
+string.  If it is set, then every time a @code{cvs} command is run, it
+will be called as @samp{cvs -d @var{cvs-cvsroot}@dots{}}.  This can be
+useful if your site has several repositories.
+
+@item log-edit-require-final-newline
+@c wordy to avoid unhderfull hbox
+When you enter a log message by typing into the
+@samp{*cvs-commit-message*} buffer, PCL-CVS normally automatically
+inserts a trailing newline, unless there already is one.  This behavior
+can be controlled via @samp{cvs-commit-buffer-require-final-newline}.
+If it is @samp{t} (the default behavior), a newline will always be
+appended.  If it is @samp{nil}, newlines will never be appended.  Any
+other value causes PCL-CVS to ask the user whenever there is no trailing
+newline in the commit message buffer.
+
+@findex cvs-mode-changelog-commit
+@item log-edit-changelog-full-paragraphs
+If this variable is non-@code{nil}, include full @file{ChangeLog}
+paragraphs in the CVS log created by @samp{cvs-mode-changelog-commit}.
+This may be set in the local variables section of a @file{ChangeLog}
+file, to indicate the policy for that @file{ChangeLog}.
+
+@cindex @file{ChangeLog} paragraphs
+A @dfn{@file{ChangeLog} paragraph} is a bunch of log text containing no
+blank lines; a paragraph usually describes a set of changes with a
+single purpose, but perhaps spanning several functions in several files.
+Changes in different paragraphs are unrelated.
+
+You could argue that the CVS log entry for a file should contain the
+full @file{ChangeLog} paragraph mentioning the change to the file, even though
+it may mention other files, because that gives you the full context you
+need to understand the change.  This is the behavior you get when this
+variable is set to @code{t}, the default.
+
+On the other hand, you could argue that the CVS log entry for a change
+should contain only the text for the changes which occurred in that
+file, because the CVS log is per-file.  This is the behavior you get
+when this variable is set to @code{nil}.
+
+@findex cvs-mode-ignore@r{, and @file{.cvsignore} sorting}
+@item cvs-sort-ignore-file
+If this variable is set to any non-@samp{nil} value, the
+@file{.cvsignore} file will always be sorted whenever you use
+@samp{cvs-mode-ignore} to add a file to it.  This option is on by
+default.
+@end table
+
+
+@menu
+* Customizing Faces::
+@end menu
+
+@node Customizing Faces,  , Customization, Customization
+@section Customizing Faces
+@vindex cvs-header (face)
+@vindex cvs-filename (face)
+@vindex cvs-unknown (face)
+@vindex cvs-handled (face)
+@vindex cvs-need-action (face)
+@vindex cvs-marked (face)
+@vindex cvs-msg (face)
+
+PCL-CVS adds a few extra features, including menus, mouse bindings, and
+fontification of the @samp{*cvs*} buffer.  The faces defined for
+fontification are listed below:
+
+@table @samp
+@item cvs-header
+used to highlight directory changes.
+
+@item cvs-filename
+Used to highlight file names.
+
+@item cvs-unknown
+Used to highlight the status of files which are @samp{Unknown}.
+
+@item cvs-handled
+Used to highlight the status of files which are handled and
+need no further action.
+
+@item cvs-need-action
+Used to highlight the status of files which still need action.
+
+@item cvs-marked
+Used to highlight the marked file indicator (@samp{*}).
+
+@item cvs-msg
+Used to highlight CVS messages.
+@end table
+
+
+@node   Bugs, GNU Free Documentation License, Customization, Top
+@chapter Bugs (known and unknown)
+@cindex Reporting bugs and ideas
+@cindex Bugs, how to report them
+@cindex Author, how to reach
+@cindex Email to the author
+@cindex Known bugs
+@cindex Bugs, known
+@cindex FAQ
+@cindex Problems, list of common
+
+If you find a bug or misfeature, don't hesitate to tell us!  Send email
+to @email{bug-gnu-emacs@@gnu.org} which is gatewayed to the newsgroup
+@samp{gnu.emacs.bugs}.  Feature requests should also be sent there.  We
+prefer discussing one thing at a time.  If you find several unrelated
+bugs, please report them separately.  If you are running PCL-CVS under
+XEmacs, you should also send a copy of bug reports to
+@email{xemacs-beta@@xemacs.org}.
+
+If you have problems using PCL-CVS or other questions, send them to
+@email{help-gnu-emacs@@gnu.org}, which is gatewayed to the
+@samp{gnu.emacs.help} newsgroup.  This is a good place to get help, as
+is @email{cvs-info@@gnu.org}, gatewayed to @samp{gnu.cvs.help}.
+
+If you have ideas for improvements, or if you have written some
+extensions to this package, we would like to hear from you.  We hope that
+you find this package useful!
+
+Below is a partial list of currently known problems with PCL-CVS.
+
+@table @asis
+@item Unexpected output from CVS
+Unexpected output from CVS may confuse PCL-CVS.  It will create
+warning messages in the @samp{*cvs*} buffer alerting you to any parse errors.
+If you get these messages, please send a bug report to the email
+addresses listed above.  Include the contents of the @samp{*cvs*} buffer, the
+output of the CVS process (which should be found in the @samp{ *cvs-tmp*}
+buffer), and the versions of Emacs, PCL-CVS and CVS you are using.
+@end table
+
+@node GNU Free Documentation License, Function and Variable Index, Bugs, Top
+@appendix GNU Free Documentation License
+@include doclicense.texi
+
+
+
+@node Function and Variable Index, Concept Index, GNU Free Documentation License, Top
+@unnumbered Function and Variable Index
+
+This is an index of all the functions and variables documented in this
+manual.
+
+@printindex fn
+
+@node     Concept Index, Key Index, Function and Variable Index, Top
+@unnumbered Concept Index
+
+This is an index of concepts discussed in this manual.
+
+@printindex cp
+
+@node     Key Index,  , Concept Index, Top
+@unnumbered Key Index
+
+This index includes an entry for each PCL-CVS key sequence documented in
+this manual.
+
+@printindex ky
+
+@setchapternewpage odd
+@summarycontents
+@contents
+@bye
+
+@ignore
+   arch-tag: 5c7178ce-56fa-40b0-abd7-f4a09758b235
+@end ignore