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