Merge from origin/emacs-26
[emacs.git] / doc / misc / pcl-cvs.texi
blobfe501542f86b86acfcd49a98cb7fc5ed281f6cf0
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename ../../info/pcl-cvs.info
4 @settitle PCL-CVS---Emacs Front-End to CVS
5 @include docstyle.texi
6 @syncodeindex vr fn
7 @c %**end of header
9 @copying
10 Copyright @copyright{} 1991--2018 Free Software Foundation, Inc.
12 @quotation
13 Permission is granted to copy, distribute and/or modify this document
14 under the terms of the GNU Free Documentation License, Version 1.3 or
15 any later version published by the Free Software Foundation; with no
16 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
17 and with the Back-Cover Texts as in (a) below.  A copy of the license
18 is included in the section entitled ``GNU Free Documentation License''.
20 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
21 modify this GNU manual.''
22 @end quotation
23 @end copying
25 @dircategory Emacs misc features
26 @direntry
27 * PCL-CVS: (pcl-cvs).           Emacs front-end to CVS.
28 @end direntry
30 @c The titlepage section does not appear in the Info file.
31 @titlepage
32 @sp 4
33 @c The title is printed in a large font.
34 @center @titlefont{User's Guide}
35 @sp 1
36 @center @titlefont{to}
37 @sp 1
38 @center @titlefont{PCL-CVS---The Emacs Front-End to CVS}
39 @ignore
40 @sp 2
41 @center release 2.9
42 @c -release-
43 @end ignore
44 @sp 3
45 @center Per Cederqvist
46 @center Stefan Monnier
47 @c -date-
49 @c  The following two commands start the copyright page
50 @c  for the printed manual.  This will not appear in the Info file.
51 @page
52 @vskip 0pt plus 1filll
53 @insertcopying
54 @end titlepage
56 @contents
58 @c ================================================================
59 @c                   The real text starts here
60 @c ================================================================
62 @ifnottex
63 @node Top
64 @top PCL-CVS
66 This manual describes PCL-CVS, the GNU Emacs front-end to CVS@.  It is
67 nowhere near complete, so you are advised to use @kbd{M-x
68 customize-group @key{RET} pcl-cvs @key{RET}} and to look at the
69 documentation strings of the various commands and major modes for
70 further information.
71 @c This manual is updated to release 2.5 of PCL-CVS.
73 @insertcopying
75 @end ifnottex
77 @menu
78 * About PCL-CVS::               Credits, history, @dots{}
80 * Getting started::             An introduction with a walk-through example.
81 * Buffer contents::             An explanation of the buffer contents.
82 * Selected files::              To which files are commands applied.
83 * Commands::                    All commands, grouped by type.
85 * Log Edit Mode::               Major mode to edit log messages.
86 * Log View Mode::               Major mode to browse log changes.
87 @c * CVS Status Mode::             Major mode to view CVS' status output.
88 * Customization::               How you can tailor PCL-CVS to suit your needs.
89 * Bugs::                        Bugs (known and unknown).
91 * GNU Free Documentation License:: The license for this documentation.
92 * Function and Variable Index::  List of functions and variables.
93 * Concept Index::               List of concepts.
94 * Key Index::                   List of keystrokes.
96 @detailmenu
97  --- The Detailed Node Listing ---
99 About PCL-CVS
101 * Contributors::                Contributors to PCL-CVS.
103 Commands
105 * Entering PCL-CVS::            Commands to invoke PCL-CVS
106 * Setting flags::               Setting flags for CVS commands
107 * Updating the buffer::
108 * Movement commands::           How to move up and down in the buffer
109 * Marking files::               How to mark files that other commands
110                                 will later operate on.
111 * Committing changes::          Checking in your modifications to the
112                                 CVS repository.
113 * Editing files::               Loading files into Emacs.
114 * Getting info about files::    Display the log and status of files.
115 * Adding and removing files::   Adding and removing files
116 * Undoing changes::             Undoing changes
117 * Removing handled entries::    Uninteresting lines can easily be removed.
118 * Ignoring files::              Telling CVS to ignore generated files.
119 * Viewing differences::         Commands to @samp{diff} different versions.
120 * Invoking Ediff::              Running @samp{ediff} from @file{*cvs*} buffer.
121 * Updating files::              Updating files that Need-update.
122 * Tagging files::               Tagging files.
123 * Miscellaneous commands::      Miscellaneous commands.
125 Customization
127 * Customizing Faces::
129 @end detailmenu
130 @end menu
132 @node     About PCL-CVS
133 @chapter About PCL-CVS
134 @cindex About PCL-CVS
136 PCL-CVS is a front-end to CVS versions 1.9 and later.
137 It concisely shows the present status of a checked out module in an
138 Emacs buffer and provides single-key access to the most frequently used CVS
139 commands.  Note that the @code{vc-dir} command (@pxref{VC Directory
140 Mode, , , emacs, The GNU Emacs Manual}) provides similar
141 functionality, but for several version control systems, including CVS.
143 PCL-CVS was originally written many years ago by Per Cederqvist who
144 proudly maintained it until January 1996, at which point he released the
145 beta version 2.0b2 and passed on the maintainership to Greg A Woods.
146 Development stayed mostly dormant for a few years during which
147 version 2.0 never seemed to be able to leave the ``beta'' stage while a
148 separate XEmacs version was slowly splitting away.  In late 1998,
149 Stefan Monnier picked up development again, adding some major new
150 functionality and taking over the maintenance.
152 @menu
153 * Contributors::                Contributors to PCL-CVS.
154 @end menu
156 @node     Contributors
157 @section Contributors to PCL-CVS
158 @cindex Contributors
159 @cindex Authors
161 Contributions to the package are welcome.  I have limited time to work
162 on this project, but I will gladly add any code that you contribute to
163 me to this package (@pxref{Bugs}).
165 The following persons have made contributions to PCL-CVS.
167 @itemize @bullet
168 @item
169 Brian Berliner wrote CVS, together with some other contributors.
170 Without his work on CVS this package would be useless@dots{}
172 @item
173 Per Cederqvist wrote most of the otherwise unattributed functions in
174 PCL-CVS as well as all the documentation.
176 @item
177 @c inge@@lysator.liu.se
178 Inge Wallin wrote the skeleton of
179 @file{pcl-cvs.texi}, and gave useful comments on it.  He also wrote
180 the files @file{elib-node.el} and @file{compile-all.el}.  The file
181 @file{cookie.el} was inspired by Inge.
183 @item
184 @c linus@@lysator.liu.se
185 Linus Tolke contributed useful comments
186 on both the functionality and the documentation.
188 @item
189 @c jwz@@jwz.com
190 Jamie Zawinski contributed
191 @file{pcl-cvs-lucid.el}, which was later renamed to
192 @file{pcl-cvs-xemacs.el}.
194 @item
195 Leif Lonnblad contributed RCVS support (since superseded by the new
196 remote CVS support).
198 @item
199 @c jimb@@cyclic.com
200 Jim Blandy contributed hooks to automatically
201 guess CVS log entries from @file{ChangeLog} contents, and initial support of
202 the new Cygnus / Cyclic remote CVS, as well as various sundry bug fixes
203 and cleanups.
205 @item
206 @c kingdon@@cyclic.com
207 Jim Kingdon contributed lots of fixes to
208 the build and installation procedure.
210 @item
211 @c woods@@weird.com
212 Greg A. Woods contributed code to implement
213 the use of per-file diff buffers, and vendor join diffs with emerge and
214 ediff, as well as various and sundry bug fixes and cleanups.
216 @item
217 @c greg.klanderman@@alum.mit.edu
218 Greg Klanderman implemented
219 toggling of marked files, setting of CVS command flags via prefix
220 arguments, updated the XEmacs support, updated the manual, and fixed
221 numerous bugs.
223 @item
224 @c monnier@@gnu.org
225 Stefan Monnier added a slew of other
226 features and introduced even more new bugs.  If there's any bug left,
227 you can be sure it's his.
229 @item
230 @c wordy to avoid an underfull hbox
231 @c masata-y@@is.aist-nara.ac.jp
232 Masatake YAMATO made a gracious
233 contribution of his cvstree code to display a tree of tags which was later
234 superseded by the new @code{cvs-status-mode}.
235 @end itemize
237 Apart from these, a lot of people have sent us suggestions, ideas,
238 requests, bug reports and encouragement.  Thanks a lot!  Without you
239 there would be no new releases of PCL-CVS.
242 @node Getting started
243 @chapter Getting started
244 @cindex Introduction
245 @cindex Example run
246 @cindex Sample session
248 This document assumes that you know what CVS is, and that you at least
249 know the fundamental concepts of CVS@.  If that is not the case, you
250 should read the CVS documentation.  Type @kbd{info -f cvs} or @kbd{man
251 cvs}.
253 PCL-CVS is only useful once you have checked out a module.  So before
254 you invoke it, you must have a copy of a module somewhere in the file
255 system.
257 You can invoke PCL-CVS by typing @kbd{M-x cvs-examine @key{RET}}.
258 You can also invoke it via the menu bar, under @samp{Tools}.
259 Or, if you prefer, you can also invoke PCL-CVS by simply visiting the
260 CVS administrative subdirectory of your module, with a prefix argument.
261 For example, to invoke PCL-CVS in a separate frame, type @kbd{C-u C-x 5
262 f ~/my/project/CVS @key{RET}}.
264 The function @code{cvs-examine} will ask for a directory.  The command
265 @samp{cvs -n update} will be run in that directory.  (It should contain
266 files that have been checked out from a CVS archive.)  The output from
267 @code{cvs} will be parsed and presented in a table in a buffer called
268 @file{*cvs*}.  It might look something like this:
270 @example
271 Repository : /usr/CVSroot
272 Module     : test
273 Working dir: /users/ceder/FOO/test
276 In directory .:
277            Need-Update            bar
278            Need-Update            file.txt
279            Modified               namechange
280            Need-Update            newer
281 In directory sub:
282            Modified               ChangeLog
284 --------------------- End ---------------------
285 -- last cmd: cvs -f -z6 -n update -d -P --
286 @end example
288 In this example, your repository is in @file{/usr/CVSroot} and CVS has
289 been run in the directory @file{/users/ceder/FOO/test}.  The three files
290 (@file{bar}, @file{file.txt} and
291 @file{newer}) that are marked with @samp{Need-Update} have been changed
292 by someone else in the CVS repository.  Two files (@file{namechange}
293 and @file{sub/ChangeLog}) have been modified locally, and need to be
294 checked in.
296 You can move the cursor up and down in the buffer with @kbd{C-n} and
297 @kbd{C-p} or @kbd{n} and @kbd{p}.  If you press @kbd{c} on one of the
298 @samp{Modified} files, that file will be checked in to the CVS
299 repository. @xref{Committing changes}.  You can also press @kbd{O} to
300 update any of the files that are marked @samp{Need-Update}.  You can
301 also run @kbd{M-x cvs-update @key{RET}} (bound to @kbd{M-u} in the
302 @file{*cvs*} buffer) to update all the files.
304 You can then press @kbd{=} to easily get a @samp{diff} between your
305 modified file and the base version that you started from, or you can
306 press @kbd{l} to get the output from @samp{cvs log}.  Many more such
307 commands are available simply by pressing a key (@pxref{Getting info
308 about files}).
310 @node Buffer contents
311 @chapter Buffer contents
312 @cindex Buffer contents
313 @cindex @file{*cvs*} buffer contents
315 The display contains several columns, some of which are optional.
316 These columns are, from left to right:
318 @itemize @bullet
320 @item
321 Optionally, the head revision of the file.  This is the latest version
322 found in the repository.  It might also contain (instead of the head
323 revision) a sub status which typically gives further information about
324 how we got to the current state, for example @samp{patched},
325 @samp{merged}, @dots{}
327 @item
328 An asterisk when the file is @dfn{marked} (@pxref{Selected
329 files}).
331 @item
332 The actual status of the file wrt the repository.  See below.
334 @item
335 Optionally, the base revision of the file.  This is the version
336 which the copy in your working directory is based upon.
338 @item
339 The file name.
341 @end itemize
343 The @samp{file status} field can have the following values:
345 @table @samp
346 @item Modified
347 The file is modified in your working directory, and there was no
348 modification to the same file in the repository.  This status can have
349 the following substatus:
351 @table @samp
352 @item merged
353 The file was modified in your working directory, and there were
354 modifications in the repository as well, but they were merged
355 successfully, without conflict, in your working directory.
356 @end table
358 @item Conflict
359 A conflict was detected while trying to merge your changes to @var{file}
360 with changes from the repository.  @var{file} (the copy in your
361 working directory) is now the output of the @code{rcsmerge} command on
362 the two versions; an unmodified copy of your file is also in your
363 working directory, with the name @file{.#@var{file}.@var{version}},
364 where @var{version} is the RCS revision that your modified file started
365 from.  @xref{Viewing differences}, for more details.
367 A conflict can also come from a disagreement on the existence of the file
368 rather than on its content.  This case is indicated by the following
369 possible substatus:
371 @table @samp
372 @item removed
373 The file is locally removed but a new revision has been committed to
374 the repository by someone else.
376 @item added
377 The file is locally added and has also been added to the repository
378 by someone else.
380 @item modified
381 The file is locally modified but someone else has removed it from the
382 repository.
383 @end table
385 @item Added
386 The file has been added by you, but it still needs to be checked in to
387 the repository.
389 @item Removed
390 The file has been removed by you, but it still needs to be checked in to
391 the repository.  You can resurrect it by typing @kbd{a} (@pxref{Adding
392 and removing files}).
394 @item Unknown
395 A file that was detected in your directory, but that neither appears in
396 the repository, nor is present on the list of files that CVS should
397 ignore.
399 @item Up-to-date
400 The file is up to date with respect to the version in the repository.
401 This status can have a substatus of:
403 @table @samp
404 @item added
405 You have just added the file to the repository.
407 @item updated
408 The file was brought up to date with respect to the repository.  This is
409 done for any file that exists in the repository but not in your source,
410 and for files that you haven't changed but are not the most recent
411 versions available in the repository.
413 @item patched
414 The file was brought up to date with respect to the remote repository by
415 way of fetching and applying a patch to the file in your source.  This
416 is equivalent to @samp{updated} except that CVS decided to use a hopefully
417 more efficient method.
419 @item committed
420 You just committed the file.
421 @end table
423 @item Need-Update
424 Either a newer version than the one in your source is available in the
425 repository and you have not modified your checked out version, or the
426 file exists in the repository but not in your source.  Use
427 @samp{cvs-mode-update} bound to @kbd{O} to update the file.
429 @item Need-Merge
430 You have modified the checked out version of the file, and a newer
431 version is available in the repository.  A merge will take place when
432 you run a @samp{cvs-update}.
434 @item Missing
435 The file has been unexpectedly removed from your working directory
436 although it has not been @samp{cvs remove}d.
437 @end table
439 @node Selected files
440 @chapter Selected files
441 @cindex Selected files
442 @cindex Marked files
443 @cindex File selection
444 @cindex Active files
445 @cindex Applicable
447 Many of the commands work on the current set of @dfn{selected} files
448 which can be either the set of marked files (if any file is marked and
449 marks are not ignored) or whichever file or directory the cursor is on.
451 If a directory is selected but the command cannot be applied to a
452 directory, then it will be applied to the set of files under this
453 directory which are in the @file{*cvs*} buffer.
455 @findex cvs-mode-force-command
456 @findex cvs-allow-dir-commit
457 Furthermore, each command only operates on a subset of the selected
458 files, depending on whether or not the command is @dfn{applicable} to
459 each file (based on the file's status).  For example,
460 @code{cvs-mode-commit} is not applicable to a file whose status is
461 @samp{Need-Update}.  If it should happen that PCL-CVS guesses the
462 applicability wrong, you can override it with the special prefix
463 @code{cvs-mode-force-command} normally bound to @kbd{M-f} (and file a
464 bug report).  The applicability rule can be slightly changed with
465 @code{cvs-allow-dir-commit} and @code{cvs-force-dir-tag}.
467 By default, marks are always in effect (you may change this, however, by
468 setting the variable @code{cvs-default-ignore-marks}) except for the
469 commands that @samp{tag} or @samp{diff} a file (which can be changed
470 with the variable @code{cvs-invert-ignore-marks}).
472 In addition, you may use the special prefix @code{cvs-mode-toggle-marks}
473 normally bound to @kbd{T} to toggle the use of marks for the following
474 command.
476 This scheme might seem a little complicated, but once one gets used to
477 it, it is quite powerful.
479 For commands to mark and unmark files, see @ref{Marking files}.
481 @node Commands
482 @chapter Commands
484 @iftex
485 This chapter describes all the commands that you can use in PCL-CVS.
486 @end iftex
487 @ifnottex
488 The nodes in this menu contains explanations about all the commands that
489 you can use in PCL-CVS@.  They are grouped together by type.
490 @end ifnottex
492 @menu
493 * Entering PCL-CVS::            Commands to invoke PCL-CVS
494 * Setting flags::               Setting flags for CVS commands
495 * Updating the buffer::
496 * Movement commands::           How to move up and down in the buffer
497 * Marking files::               How to mark files that other commands
498                                 will later operate on.
499 * Committing changes::          Checking in your modifications to the
500                                 CVS repository.
501 * Editing files::               Loading files into Emacs.
502 * Getting info about files::    Display the log and status of files.
503 * Adding and removing files::   Adding and removing files
504 * Undoing changes::             Undoing changes
505 * Removing handled entries::    Uninteresting lines can easily be removed.
506 * Ignoring files::              Telling CVS to ignore generated files.
507 * Viewing differences::         Commands to @samp{diff} different versions.
508 * Invoking Ediff::              Running @samp{ediff} from @file{*cvs*} buffer.
509 * Updating files::              Updating files that Need-update.
510 * Tagging files::               Tagging files.
511 * Miscellaneous commands::      Miscellaneous commands.
512 @end menu
515 @node Entering PCL-CVS
516 @section Entering PCL-CVS
517 @findex cvs-update
518 @findex cvs-examine
519 @findex cvs-status
520 @findex cvs-checkout
521 @findex cvs-quickdir
522 @cindex Creating the *cvs* buffer
524 Most commands in PCL-CVS require that you have a @file{*cvs*}
525 buffer.  The commands that you use to get one are listed below.
526 For each, a @samp{cvs} process will be run, the output will be parsed by
527 PCL-CVS, and the result will be printed in the @file{*cvs*} buffer (see
528 @ref{Buffer contents}, for a description of the buffer's contents).
530 @table @kbd
531 @item M-x cvs-update
532 Run a @samp{cvs update} command.  You will be asked for the directory
533 in which the @samp{cvs update} will be run.
535 @item M-x cvs-examine
536 Run a @samp{cvs -n update} command.  This is identical to the previous
537 command, except that it will only check what needs to be done but will
538 not change anything.  You will be asked for the directory in
539 which the @samp{cvs -n update} will be run.
541 @item M-x cvs-status
542 Run a @samp{cvs status} command.  You will be asked for the directory
543 in which the @samp{cvs status} will be run.
545 @item M-x cvs-checkout
546 Run a @samp{cvs checkout} command.  You will be asked for the directory
547 in which the @samp{cvs update} will be run and the module to be checked
548 out.
550 @item M-x cvs-quickdir
551 Populate the @file{*cvs*} buffer by just looking at the @file{CVS/Entries}
552 files.  This is very much like @code{cvs-examine} except that it does
553 not access the CVS repository, which is a major advantage when the
554 repository is far away.  But of course, it will not be able to detect
555 when a file needs to be updated or merged.
556 @end table
558 @findex cvs-dired-action
559 @findex cvs-dired-use-hook
560 The first four of
561 those commands are also reachable from the menu bar
562 under @samp{Tools->PCL-CVS}.  Finally, an alternative way is to visit
563 the CVS administrative subdirectory in your work area with a simple
564 prefix argument.  For example @kbd{C-u C-x C-f ~/my/work/CVS @key{RET}}.  This
565 by default runs @code{cvs-quickdir} but the specific behavior can be
566 changed with @code{cvs-dired-action} and @code{cvs-dired-use-hook}.
568 By default, the commands above will descend recursively into
569 subdirectories.  You can avoid that behavior by including @samp{-l} in
570 the flags for the command.  These flags can be set by giving a prefix
571 argument to the command (e.g., by typing
572 @kbd{C-u M-x cvs-update @key{RET} -l @key{RET}}).
575 @node Setting flags
576 @section Setting flags for CVS commands
577 @cindex Optional switches to CVS
578 @cindex Command-line options to CVS
580 This section describes the convention used by nearly all PCL-CVS
581 commands for setting optional flags sent to CVS@.  A single @kbd{C-u}
582 prefix argument is used to cause the command to prompt for flags to be
583 used for the current invocation of the command only.  Two @kbd{C-u} prefix
584 arguments are used to prompt for flags which will be set permanently, for the
585 current invocation and all that follow, until the flags are changed, or
586 unless temporary flags are set which override them.
588 Perhaps an example or two is in order.  Say you are about to add a
589 binary file to the repository, and want to specify the flags @samp{-kb}
590 to @samp{cvs add}.  You can type @kbd{C-u a -kb @key{RET}},
591 and the file will be added.  Subsequent @samp{cvs add}
592 commands will use the previously prevailing flags.
594 As a second example, say you are about to perform a diff and want to see
595 the result in unified diff format, i.e., you'd like to pass the flag
596 @samp{-u} to both @samp{cvs diff} and @samp{diff}.  You'd also like all
597 subsequent diffs to use this flag.  You can type @kbd{C-u C-u = -u @key{RET}}
598 and the diff will be performed, and the default flags will be set to
599 @code{("-u")}.  You can of course override this flag for a single diff
600 by using a single @kbd{C-u} prefix argument.
602 @cindex Special prefix
603 In addition to this, some commands can take @dfn{special prefix} arguments.
604 These work as follows: When called with a @kbd{C-u} prefix, the user is
605 prompted for a new value of the special prefix and the special prefix is
606 activated for the next command.  When called without the @kbd{C-u}
607 prefix, the special prefix is re-activated (with the same value as last
608 time) for the next command.  Calling the prefix command again when it's
609 already activated deactivates it.  Calling it with the @kbd{C-u C-u}
610 prefix activates it for all subsequent commands until you deactivate it
611 explicitly.  The special prefixes are:
613 @table @kbd
614 @item T
615 Toggles whether or not marks will be active in the next command.
617 @item b
618 Provide the next command with a branch (can be any version
619 specifier) to work on.
621 @item B
622 Secondary branch argument.  Only meaningful if @kbd{b} is also used.
623 It can be used to provide a second branch argument to
624 @code{cvs-mode-diff} or to @code{cvs-mode-update}.
626 @item M-f
627 Forces the next command to apply to every selected file rather than only
628 to the ones PCL-CVS thinks are relevant.
629 @end table
631 @node Updating the buffer
632 @section Updating the @file{*cvs*} buffer
633 @findex cvs-update
634 @findex cvs-examine
635 @findex cvs-status
636 @findex cvs-mode-update
637 @findex cvs-mode-examine
638 @findex cvs-mode-status
640 The following commands can be used from within the @file{*cvs*} buffer
641 to update the display:
643 @table @kbd
644 @item M-u
645 Runs the command @samp{cvs-update}.
647 @item M-e
648 Runs the command @samp{cvs-examine}.
650 @item M-s
651 Runs the command @samp{cvs-status}.
652 @end table
654 In addition to the above commands which operate on the whole module,
655 you can run the equivalent CVS command on just a subset of the
656 files/directories with these keys:
658 @table @kbd
659 @item O
660 Runs @code{cvs-mode-update} on the selected files.  When run on the
661 top-level directory, this is equivalent to @kbd{M-u}.
663 @item e
664 Runs @code{cvs-mode-examine} on the selected files.  When run on the
665 top-level directory, this is equivalent to @kbd{M-e}.
667 @findex cvs-status-mode
668 @item s
669 Runs @code{cvs-mode-status} on the selected files.  When run on the
670 top-level directory, this is equivalent to @kbd{M-s}, except that
671 CVS output will be shown in a @file{*cvs-info*} buffer that will be
672 put in @samp{cvs-status-mode}.
673 @end table
676 @node Movement commands
677 @section Movement Commands
678 @cindex Movement Commands
679 @findex cvs-mode-next-line
680 @findex cvs-mode-previous-line
681 @kindex SPC@r{--Move down one file}
682 @kindex n@r{--Move down one file}
683 @kindex p@r{--Move up one file}
685 You can use most normal Emacs commands to move forward and backward in
686 the buffer.  Some keys are rebound to functions that take advantage of
687 the fact that the buffer is a PCL-CVS buffer:
690 @table @kbd
691 @item @key{SPC}
692 @itemx n
693 These keys move the cursor one file forward, towards the end of the
694 buffer (@code{cvs-mode-next-line}).
696 @item p
697 This key moves one file backward, towards the beginning of the buffer
698 (@code{cvs-mode-previous-line}).
699 @end table
702 @node Marking files
703 @section Marking files
704 @cindex Selecting files (commands to mark files)
705 @cindex Marking files
706 @kindex m@r{--marking a file}
707 @kindex M@r{--marking all files}
708 @kindex u@r{--unmark a file}
709 @kindex ESC DEL@r{--unmark all files}
710 @kindex DEL@r{--unmark previous file}
711 @kindex %@r{--mark files matching regexp}
712 @kindex S@r{--mark files in a particular state}
713 @kindex T@r{--toggle marks}
714 @findex cvs-mode-mark
715 @findex cvs-mode-unmark
716 @findex cvs-mode-mark-all-files
717 @findex cvs-mode-unmark-all-files
718 @findex cvs-mode-unmark-up
719 @findex cvs-mode-mark-matching-files
720 @findex cvs-mode-mark-on-state
721 @findex cvs-mode-toggle-marks
723 PCL-CVS works on a set of @dfn{selected files} (@pxref{Selected files}).
724 You can mark and unmark files with these commands:
726 @table @kbd
727 @item m
728 This marks the file that the cursor is positioned on.  If the cursor is
729 positioned on a directory all files in that directory are marked
730 (@code{cvs-mode-mark}).
732 @item u
733 Unmark the file that the cursor is positioned on. If the cursor is on a
734 directory, all files in that directory are unmarked
735 (@code{cvs-mode-unmark}).
737 @item M
738 Mark @emph{all} files in the buffer (@code{cvs-mode-mark-all-files}).
740 @item M-@key{DEL}
741 Unmark @emph{all} files (@code{cvs-mode-unmark-all-files}).
743 @item @key{DEL}
744 Unmark the file on the previous line, and move point to that line
745 (@code{cvs-mode-unmark-up}).
747 @item %
748 Mark all files matching a regular expression
749 (@code{cvs-mode-mark-matching-files}).
751 @item S
752 Mark all files in a particular state, such as ``Modified'' or
753 ``Removed'' (@code{cvs-mode-mark-on-state}).
755 @item T
756 Toggle use of marks for the next command (@code{cvs-mode-toggle-marks}).
757 @end table
760 @node Committing changes
761 @section Committing changes
762 @cindex Committing changes
763 @findex cvs-mode-commit
764 @findex cvs-mode-commit-setup
765 @kindex c@r{--commit files}
766 @kindex C@r{--commit files with @file{ChangeLog} message}
767 @vindex cvs-auto-revert@r{ (variable)}
768 @cindex Commit buffer
769 @cindex Edit buffer
770 @cindex Erasing commit message
771 @cindex Reverting buffers after commit
773 Committing changes basically works as follows:
775 @enumerate
776 @item
777 After having selected the files you want to commit, you type either
778 @kbd{c} or @kbd{C} which brings up a special buffer
779 @file{*cvs-commit*}.
781 @item
782 You type in the log message describing the changes you're about to
783 commit (@pxref{Log Edit Mode}).
785 @item
786 When you're happy with it, you type @kbd{C-c C-c} to do the actual
787 commit.
788 @end enumerate
790 There's no hidden state, so you can abort the process or pick it up
791 again at any time.
793 @vindex log-edit-confirm@r{ (variable)}
794 The set of files actually committed is really decided only during the
795 very last step, which is a mixed blessing.  It allows you to go back and
796 change your mind about which files to commit, but it also means that you
797 might inadvertently change the set of selected files.  To reduce the
798 risk of error, @kbd{C-c C-c} will ask for confirmation if the set of
799 selected files has changed between the first step and the last.  You can
800 change this last detail with @code{log-edit-confirm}.
802 As for the difference between @kbd{c} (i.e., @code{cvs-mode-commit}) and
803 @kbd{C} (i.e., @code{cvs-mode-commit-setup}) is that the first gets you
804 straight to @file{*cvs-commit*} without erasing it or changing anything
805 to its content, while the second first erases @file{*cvs-commit*}
806 and tries to initialize it with a sane default (it does that by either
807 using a template provided by the CVS administrator or by extracting a
808 relevant log message from a @file{ChangeLog} file).
810 If you are editing the files in your Emacs, an automatic
811 @samp{revert-buffer} will be performed.  (If the file contains
812 @samp{$@asis{Id}$} keywords, @samp{cvs commit} will write a new file with
813 the new values substituted.  The auto-revert makes sure that you get
814 them into your buffer.)  The revert will not occur if you have modified
815 your buffer, or if @samp{cvs-auto-revert} is set to
816 @samp{nil}.
819 @node Editing files
820 @section Editing files
821 @cindex Editing files
822 @cindex Finding files
823 @cindex Loading files
824 @cindex Dired
825 @cindex Invoking dired
826 @findex cvs-mode-find-file
827 @findex cvs-mode-find-file-other-window
828 @findex cvs-mode-add-change-log-entry-other-window
829 @kindex f@r{--find file or directory}
830 @kindex o@r{--find file in other window}
831 @kindex A@r{--add @file{ChangeLog} entry}
833 There are currently three commands that can be used to find a file (that
834 is, load it into a buffer and start editing it there).  These commands
835 work on the line that the cursor is situated at.  They always ignore any marked
836 files.
838 @table @kbd
839 @item f
840 Find the file that the cursor points to (@code{cvs-mode-find-file}).  If
841 the cursor points to a directory, run @code{dired} on that directory;
842 @inforef{Dired, , emacs}.
844 @item o
845 Like @kbd{f}, but use another window
846 (@code{cvs-mode-find-file-other-window}).
848 @item A
849 Invoke @samp{add-change-log-entry-other-window} to edit a
850 @file{ChangeLog} file.  The @file{ChangeLog} file will be found in the
851 directory of the file the cursor points to, or in a parent of that
852 directory (@code{cvs-mode-add-change-log-entry-other-window}).
853 @end table
856 @node Getting info about files
857 @section Getting info about files
858 @cindex Status (cvs command)
859 @cindex Log (RCS/cvs command)
860 @cindex Getting status
861 @kindex l@r{--run @samp{cvs log}}
862 @kindex s@r{--run @samp{cvs status}}
863 @findex cvs-mode-log
864 @findex cvs-mode-status
866 @table @kbd
867 @item l
868 Call the command @code{cvs-mode-log} which runs @samp{cvs log} on all
869 selected files, and show the result in a temporary buffer
870 @file{*cvs-info*} (@pxref{Log View Mode}).
872 @item s
873 Call the command @code{cvs-mode-status} which runs @samp{cvs status} on
874 all selected files, and show the result in a temporary buffer
875 @file{*cvs-info*}.
876 @c Fixme: reinstate when node is written:
877 @c (@pxref{CVS Status Mode}).
878 @end table
881 @node Adding and removing files
882 @section Adding and removing files
883 @cindex Adding files
884 @cindex Removing files
885 @cindex Resurrecting files
886 @cindex Deleting files
887 @cindex Putting files under CVS control
888 @kindex a@r{--add a file}
889 @kindex r@r{--remove a file}
890 @findex cvs-mode-add
891 @findex cvs-mode-remove-file
893 The following commands are available to make it easy to add files to
894 and remove them from the CVS repository.
896 @table @kbd
897 @item a
898 Add all selected files.  This command can be used on @samp{Unknown}
899 files (@pxref{Buffer contents}).  The status of the file will change to
900 @samp{Added}, and you will have to use @kbd{c} (@samp{cvs-mode-commit}
901 @pxref{Committing changes}), to really add the file to the
902 repository.
904 This command can also be used on @samp{Removed} files (before you commit
905 them) to resurrect them.
907 The command that is run is @code{cvs-mode-add}.
909 @item r
910 This command removes the selected files (after prompting for
911 confirmation).  The files are deleted from your directory and
912 (unless the status was @samp{Unknown}; @pxref{Buffer contents}) they will
913 also be @samp{cvs remove}d.  If the files' status was @samp{Unknown}
914 they will disappear from the buffer.  Otherwise their status will change to
915 @samp{Removed}, and you must use @kbd{c} (@samp{cvs-mode-commit},
916 @pxref{Committing changes}) to commit the removal.
918 The command that is run is @code{cvs-mode-remove-file}.
919 @end table
922 @node Undoing changes
923 @section Undoing changes
924 @cindex Undo changes
925 @cindex Flush changes
926 @kindex U@r{--undo changes}
927 @findex cvs-mode-undo-local-changes
929 @table @kbd
930 @item U
931 If you have modified a file, and for some reason decide that you don't
932 want to keep the changes, you can undo them with this command.  It works
933 by removing your working copy of the file and then getting the latest
934 version from the repository (@code{cvs-mode-undo-local-changes}).
935 @end table
938 @node Removing handled entries
939 @section Removing handled entries
940 @cindex Expunging uninteresting entries
941 @cindex Uninteresting entries, getting rid of them
942 @cindex Getting rid of uninteresting lines
943 @cindex Removing uninteresting (processed) lines
944 @cindex Handled lines, removing them
945 @kindex x@r{--remove processed entries}
946 @kindex C-k@r{--remove selected entries}
947 @findex cvs-mode-remove-handled
948 @findex cvs-mode-acknowledge
949 @findex cvs-mode-ignore
951 @table @kbd
952 @item x
953 This command allows you to remove all entries that you have processed.
954 More specifically, the lines for @samp{Up-to-date} files (@pxref{Buffer
955 contents}) are removed from the buffer.  If a directory becomes empty
956 the heading for that directory is also removed.  This makes it easier to
957 get an overview of what needs to be done.
959 @vindex cvs-mode-remove-handled@r{ (variable)}
960 @kbd{x} invokes @code{cvs-mode-remove-handled}.  If
961 @samp{cvs-auto-remove-handled} is set to non-@code{nil}, this will
962 automatically be performed after every commit.
964 @item C-k
965 This command can be used for lines that @samp{cvs-mode-remove-handled} would
966 not delete, but that you want to delete (@code{cvs-mode-acknowledge}).
967 @end table
970 @node Ignoring files
971 @section Ignoring files
972 @cindex Ignoring files
973 @kindex i@r{--ignoring files}
974 @findex cvs-mode-ignore
976 @table @kbd
977 @item i
978 Arrange so that CVS will ignore the selected files.  The file names are
979 added to the @file{.cvsignore} file in the corresponding directory.  If
980 the @file{.cvsignore} file doesn't exist, it will be created.
982 The @file{.cvsignore} file should normally be added to the repository,
983 but you could ignore it as well, if you like it better that way.
985 This runs @code{cvs-mode-ignore}.
986 @end table
988 @node Viewing differences
989 @section Viewing differences
990 @cindex Diff
991 @cindex Invoking @code{diff}
992 @cindex Conflicts, how to resolve them
993 @cindex Viewing differences
994 @kindex d=@r{--run @samp{cvs diff}}
995 @kindex =@r{--run @samp{cvs diff}}
996 @kindex db@r{--diff against base version}
997 @kindex dh@r{--diff against head of repository}
998 @kindex dr@r{--diff between base and head of repository}
999 @kindex dv@r{--diff against vendor branch}
1000 @kindex dy@r{--diff against yesterday's head}
1001 @findex cvs-mode-diff
1002 @findex cvs-mode-diff-backup
1003 @findex cvs-mode-diff-head
1004 @findex cvs-mode-diff-repository
1005 @findex cvs-mode-diff-vendor
1006 @findex cvs-mode-diff-yesterday
1007 @vindex cvs-invert-ignore-marks@r{ (variable)}
1009 @table @kbd
1010 @item =
1011 @itemx d =
1012 Display a @samp{cvs diff} between the selected files and the version
1013 that they are based on (@code{cvs-mode-diff}).
1015 @item d b
1016 If CVS finds a conflict while merging two versions of a file (during a
1017 @samp{cvs update}, @pxref{Updating the buffer}) it will save the
1018 original file in a file called @file{.#@var{file}.@var{version}} where
1019 @var{file} is the name of the file, and @var{version} is the revision
1020 number that @var{file} was based on.
1022 With the @kbd{d b} command you can run a @samp{diff} on the files
1023 @file{.#@var{file}.@var{version}} and @file{@var{file}}.
1025 @item d h
1026 Display a @samp{cvs diff} between the selected files and the head
1027 revision (the most recent version on the current
1028 branch) in the repository (@code{cvs-mode-diff-head}).
1030 @item d r
1031 Display a @samp{cvs diff} between the base revision of the selected
1032 files and the head revision in the repository.  This displays the
1033 changes anyone has committed to the repository since you last executed
1034 a checkout, update or commit operation
1035 (@code{cvs-mode-diff-repository}).
1037 @item d v
1038 Display a @samp{cvs diff} between the selected files and the head
1039 revision of the vendor branch in the repository
1040 (@code{cvs-mode-diff-vendor}).
1042 @item d y
1043 Display a @samp{cvs diff} between the selected files and yesterday's
1044 head revision in the repository
1045 (@code{cvs-mode-diff-yesterday}).
1046 @end table
1048 By default, @samp{diff} commands ignore the marks.  This can be changed
1049 with @code{cvs-invert-ignore-marks}.
1051 @node Invoking Ediff
1052 @section Running ediff
1053 @cindex Ediff
1054 @cindex Invoking ediff
1055 @cindex Viewing differences
1056 @cindex Conflicts, how to resolve them
1057 @cindex Resolving conflicts
1058 @kindex e@r{--invoke @samp{ediff}}
1059 @findex cvs-mode-idiff
1060 @findex cvs-mode-imerge
1062 @table @kbd
1063 @vindex cvs-idiff-imerge-handlers@r{ (variable)}
1064 @item d e
1065 This uses @code{ediff} (or @code{emerge}, depending on
1066 @samp{cvs-idiff-imerge-handlers}) to allow you to view diffs.
1067 If a prefix argument is given, PCL-CVS will prompt for a revision against
1068 which the diff should be made, else the default will be to use the BASE
1069 revision.
1071 @cindex Merging with @code{ediff} and @code{emerge}
1072 @item d E
1073 This command use @code{ediff} (or @code{emerge}, see above) to allow you
1074 to do an interactive 3-way merge.
1076 @strong{Please note:}  when the file status is @samp{Conflict},
1077 CVS has already performed a merge.  The resulting file is not used in
1078 any way if you use this command.  If you use the @kbd{q} command inside
1079 @samp{ediff} (to successfully terminate a merge) the file that CVS
1080 created will be overwritten.
1081 @end table
1083 @node Updating files
1084 @section Updating files
1085 @findex cvs-mode-update
1086 @cindex Updating files
1087 @kindex O@r{--update files}
1089 @table @kbd
1090 @item O
1091 Update all selected files with status @samp{Need-update} by running
1092 @samp{cvs update} on them (@code{cvs-mode-update}).
1093 @end table
1096 @node Tagging files
1097 @section Tagging files
1098 @findex cvs-mode-tag
1099 @findex cvs-mode-untag
1100 @findex cvs-rtag
1101 @cindex Tagging files
1102 @kindex M-t@r{--repository tag files}
1103 @kindex t@r{--tag files}
1104 @vindex cvs-invert-ignore-marks@r{ (variable)}
1105 @vindex cvs-force-dir-tag@r{ (variable)}
1107 @table @kbd
1108 @item t
1109 Tag all selected files by running @samp{cvs tag} on
1110 them (@code{cvs-mode-tag}).  It's usually preferable to tag a directory
1111 at a time.  Rather than selecting all files (which too often doesn't
1112 select all files but only the few that are displayed), clear the
1113 selection with @kbd{M-@key{DEL}} (@code{cvs-mode-unmark-all-files}), position
1114 the cursor on the directory you want to tag and hit @kbd{t}.
1115 @end table
1117 By default, @samp{tag} commands ignore the marks.  This can be changed
1118 with @code{cvs-invert-ignore-marks}.  Also, by default @samp{tag} can
1119 only be applied to directories, see @code{cvs-force-dir-tag} if you want
1120 to change this behavior.
1123 @node Miscellaneous commands
1124 @section Miscellaneous commands
1125 @findex cvs-mode-byte-compile-files
1126 @cindex Recompiling elisp files
1127 @cindex Byte compilation
1128 @findex cvs-mode-delete-lock
1129 @cindex Getting rid of lock files
1130 @cindex Lock files
1131 @kindex q@r{--bury the PCL-CVS buffer}
1132 @findex cvs-bury-buffer
1133 @findex cvs-mode-quit
1134 @cindex Quitting
1135 @kindex h@r{--help}
1136 @kindex ?@r{--help}
1137 @findex cvs-help
1138 @cindex Help
1140 @table @kbd
1141 @item M-x cvs-mode-byte-compile-files
1142 Byte compile all selected files that end in @file{.el}.
1144 @item M-x cvs-mode-delete-lock
1145 This command deletes the lock files that
1146 the @file{*cvs*} buffer informs you about.  You should normally never have to
1147 use this command, since CVS tries very carefully to always remove the
1148 lock files itself.
1150 You can only use this command when a message in the @file{*cvs*} buffer tells
1151 you so.  You should wait a while before using this command in case
1152 someone else is running a @code{cvs} command.
1154 Also note that this only works if the repository is local.
1156 @item ?
1157 @itemx h
1158 Show a summary of common command key bindings in the echo
1159 area (@code{cvs-help}).
1161 @item q
1162 Bury the PCL-CVS buffer (@code{cvs-bury-buffer}).
1164 @item M-x cvs-mode-quit
1165 Quit PCL-CVS, killing the @file{*cvs*} buffer.
1166 @end table
1168 @node Log Edit Mode
1169 @chapter Editing a Log Message
1171 @cindex Log Edit mode
1172 @cindex mode, Log Edit
1173 Buffers for entering/editing log messages for changes which are about
1174 to be committed are put into Log Edit mode.
1176 Sometimes the log buffer contains default text when you enter it,
1177 typically the last log message entered.  If it does, mark and point
1178 are set around the entire contents of the buffer so that it is easy to
1179 kill the contents of the buffer with @kbd{C-w}.
1181 @findex log-edit-insert-changelog
1182 If you work by writing entries in the @file{ChangeLog}
1183 (@pxref{Change Log,,, emacs, The GNU Emacs Manual}) and then commit the change under revision
1184 control, you can generate the Log Edit text from the ChangeLog using
1185 @kbd{C-c C-a} (@kbd{log-edit-insert-changelog}).  This looks for
1186 entries for the file(s) concerned in the top entry in the ChangeLog
1187 and uses those paragraphs as the log text.  This text is only inserted
1188 if the top entry was made under your user name on the current date.
1189 @xref{Change Logs and VC,,, emacs, The GNU Emacs Manual}, for the opposite way of
1190 working---generating ChangeLog entries from the revision control log.
1192 In the Log Edit buffer, @kbd{C-c C-f} (@kbd{M-x log-edit-show-files})
1193 shows the list of files to be committed in case you need to check
1194 that.
1196 When you have finished editing the log message, type @kbd{C-c C-c} to
1197 exit the buffer and commit the change.
1199 @c Fixme: customization variables
1201 @node Log View Mode
1202 @chapter Browsing a Log of Changes
1204 @cindex Log View mode
1205 @cindex mode, Log View
1206 @cindex output, logs
1208 @findex cvs-mode-log
1209 @findex vc-print-log
1210 Log View mode provides a few useful commands for navigating revision
1211 control log output.  It is used for the output buffers of both
1212 @code{cvs-mode-log} and @code{vc-print-log}.
1214 In this mode, @kbd{n} goes to the next message and @kbd{p} goes to the
1215 previous message and @kbd{N} and @kbd{P} go to the next and previous
1216 files, respectively, in multi-file output.  With a numeric prefix
1217 argument, these commands move that many messages of files.
1219 @c @node CVS Status Mode
1220 @c @chapter Viewing CVS' Status output
1222 @node Customization
1223 @chapter Customization
1224 @vindex log-edit-changelog-full-paragraphs@r{ (variable)}
1225 @vindex cvs-auto-remove-handled@r{ (variable)}
1226 @vindex cvs-auto-remove-directories@r{ (variable)}
1227 @vindex cvs-update-prog-output-skip-regexp@r{ (variable)}
1228 @vindex cvs-cvsroot@r{ (variable)}
1229 @vindex cvs-auto-revert@r{ (variable)}
1230 @vindex log-edit-require-final-newline@r{ (variable)}
1231 @vindex cvs-sort-ignore-file@r{ (variable)}
1232 @cindex Customization
1233 @cindex Variables, list of all
1234 @cindex Erasing input buffer
1235 @cindex Context diff, how to get
1236 @cindex Unidiff, how to get
1237 @cindex Automatically remove handled files
1238 @cindex @samp{-u} option in modules file
1239 @cindex Modules file (@samp{-u} option)
1240 @cindex Update program (@samp{-u} option in modules file)
1241 @cindex Reverting buffers after commit
1242 @cindex Require final newline
1243 @cindex Automatically inserting newline
1244 @cindex Commit message, inserting newline
1245 @cindex Sorting @file{.cvsignore} file
1246 @cindex @file{.cvsignore} file, sorting
1247 @cindex Automatically sorting @file{.cvsignore}
1248 @cindex @samp{CVSROOT}, overriding
1250 If you have an idea about any customization that would be handy but
1251 isn't present in this list, please tell us!
1252 For info on how to reach us, see @ref{Bugs}.
1254 @table @samp
1255 @item cvs-auto-remove-handled
1256 If this variable is set to any non-@code{nil} value,
1257 @samp{cvs-mode-remove-handled} will be called every time you check in
1258 files, after the check-in is ready.  @xref{Removing handled
1259 entries}.
1261 @item cvs-auto-remove-directories
1262 If this variable is set to any non-@code{nil} value, directories that do
1263 not contain any files to be checked in will not be listed in the
1264 @file{*cvs*} buffer.
1266 @item cvs-auto-revert
1267 If this variable is set to any non-@samp{nil} value any buffers you have
1268 that visit a file that is committed will be automatically reverted.
1269 This variable defaults to @samp{t}. @xref{Committing changes}.
1271 @item cvs-update-prog-output-skip-regexp
1272 The @samp{-u} flag in the @file{modules} file can be used to run a command
1273 whenever a @samp{cvs update} is performed (see @code{cvs(5)}).  This regexp
1274 is used to search for the last line in that output.  It is normally set
1275 to @samp{$}.  That setting is only correct if the command outputs
1276 nothing.  Note that PCL-CVS will get very confused if the command
1277 outputs @emph{anything} to @code{stderr}.
1279 @item cvs-cvsroot
1280 This variable can be set to override @samp{CVSROOT}.  It should be a
1281 string.  If it is set, then every time a @code{cvs} command is run, it
1282 will be called as @samp{cvs -d @var{cvs-cvsroot}@dots{}}.  This can be
1283 useful if your site has several repositories.
1285 @item log-edit-require-final-newline
1286 @c wordy to avoid underfull hbox
1287 When you enter a log message by typing into the
1288 @file{*cvs-commit-message*} buffer, PCL-CVS normally automatically
1289 inserts a trailing newline, unless there already is one.  This behavior
1290 can be controlled via @samp{cvs-commit-buffer-require-final-newline}.
1291 If it is @samp{t} (the default behavior), a newline will always be
1292 appended.  If it is @samp{nil}, newlines will never be appended.  Any
1293 other value causes PCL-CVS to ask the user whenever there is no trailing
1294 newline in the commit message buffer.
1296 @findex cvs-mode-changelog-commit
1297 @item log-edit-changelog-full-paragraphs
1298 If this variable is non-@code{nil}, include full @file{ChangeLog}
1299 paragraphs in the CVS log created by @samp{cvs-mode-changelog-commit}.
1300 This may be set in the local variables section of a @file{ChangeLog}
1301 file, to indicate the policy for that @file{ChangeLog}.
1303 @cindex @file{ChangeLog} paragraphs
1304 A @dfn{@file{ChangeLog} paragraph} is a bunch of log text containing no
1305 blank lines; a paragraph usually describes a set of changes with a
1306 single purpose, but perhaps spanning several functions in several files.
1307 Changes in different paragraphs are unrelated.
1309 You could argue that the CVS log entry for a file should contain the
1310 full @file{ChangeLog} paragraph mentioning the change to the file, even though
1311 it may mention other files, because that gives you the full context you
1312 need to understand the change.  This is the behavior you get when this
1313 variable is set to @code{t}, the default.
1315 On the other hand, you could argue that the CVS log entry for a change
1316 should contain only the text for the changes which occurred in that
1317 file, because the CVS log is per-file.  This is the behavior you get
1318 when this variable is set to @code{nil}.
1320 @findex cvs-mode-ignore@r{, and @file{.cvsignore} sorting}
1321 @item cvs-sort-ignore-file
1322 If this variable is set to any non-@samp{nil} value, the
1323 @file{.cvsignore} file will always be sorted whenever you use
1324 @samp{cvs-mode-ignore} to add a file to it.  This option is on by
1325 default.
1326 @end table
1329 @menu
1330 * Customizing Faces::
1331 @end menu
1333 @node Customizing Faces
1334 @section Customizing Faces
1335 @vindex cvs-header @r{(face)}
1336 @vindex cvs-filename @r{(face)}
1337 @vindex cvs-unknown @r{(face)}
1338 @vindex cvs-handled @r{(face)}
1339 @vindex cvs-need-action @r{(face)}
1340 @vindex cvs-marked @r{(face)}
1341 @vindex cvs-msg @r{(face)}
1343 PCL-CVS adds a few extra features, including menus, mouse bindings, and
1344 fontification of the @file{*cvs*} buffer.  The faces defined for
1345 fontification are listed below:
1347 @table @samp
1348 @item cvs-header
1349 used to highlight directory changes.
1351 @item cvs-filename
1352 Used to highlight file names.
1354 @item cvs-unknown
1355 Used to highlight the status of files which are @samp{Unknown}.
1357 @item cvs-handled
1358 Used to highlight the status of files which are handled and
1359 need no further action.
1361 @item cvs-need-action
1362 Used to highlight the status of files which still need action.
1364 @item cvs-marked
1365 Used to highlight the marked file indicator (@samp{*}).
1367 @item cvs-msg
1368 Used to highlight CVS messages.
1369 @end table
1372 @node   Bugs
1373 @chapter Bugs (known and unknown)
1374 @cindex Reporting bugs and ideas
1375 @cindex Bugs, how to report them
1376 @cindex Author, how to reach
1377 @cindex Email to the author
1378 @cindex Known bugs
1379 @cindex Bugs, known
1380 @cindex FAQ
1381 @cindex Problems, list of common
1383 If you find a bug or misfeature, don't hesitate to tell us!
1384 Use @kbd{M-x report-emacs-bug} to send us a report.
1385 You can follow the same process for feature requests.
1386 We prefer discussing one thing at a time.  If you find several unrelated
1387 bugs, please report them separately.  If you are running PCL-CVS under
1388 XEmacs, you should also send a copy of bug reports to
1389 the @url{http://lists.xemacs.org/mailman/listinfo/xemacs-beta,
1390 XEmacs mailing list}.
1392 If you have problems using PCL-CVS or other questions, send them to
1393 the @url{https://lists.gnu.org/mailman/listinfo/help-gnu-emacs,
1394 help-gnu-emacs mailing list}.  This is a good place to get help, as is
1395 the @url{http://lists.nongnu.org/mailman/listinfo/info-cvs, info-cvs list}.
1397 If you have ideas for improvements, or if you have written some
1398 extensions to this package, we would like to hear from you.  We hope that
1399 you find this package useful!
1401 Below is a partial list of currently known problems with PCL-CVS.
1403 @table @asis
1404 @item Unexpected output from CVS
1405 Unexpected output from CVS may confuse PCL-CVS@.  It will create
1406 warning messages in the @file{*cvs*} buffer alerting you to any parse errors.
1407 If you get these messages, please send a bug report to the email
1408 addresses listed above.  Include the contents of the @file{*cvs*} buffer, the
1409 output of the CVS process (which should be found in the @file{ *cvs-tmp*}
1410 buffer), and the versions of Emacs, PCL-CVS and CVS you are using.
1411 @end table
1413 @node GNU Free Documentation License
1414 @appendix GNU Free Documentation License
1415 @include doclicense.texi
1419 @node Function and Variable Index
1420 @unnumbered Function and Variable Index
1422 This is an index of all the functions and variables documented in this
1423 manual.
1425 @printindex fn
1427 @node     Concept Index
1428 @unnumbered Concept Index
1430 This is an index of concepts discussed in this manual.
1432 @printindex cp
1434 @node     Key Index
1435 @unnumbered Key Index
1437 This index includes an entry for each PCL-CVS key sequence documented in
1438 this manual.
1440 @printindex ky
1442 @bye