   Copyright (C) 1992 Per Cederqvist

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the section entitled "GNU General Public License" is included
exactly as in the original, and provided that the entire resulting
derived work is distributed under the terms of a permission notice
identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the section entitled "GNU General Public License"
and this permission notice may be included in translations approved by
the Free Software Foundation instead of in the original English.

Customization
*************

   If you have an idea about any customization that would be handy but
isn't present in this list, please tell me!  See Bugs for info on
how to reach me.

`cvs-erase-input-buffer'
     If set to anything else than `nil' the edit buffer will be erased
     before you write the log message (see Committing changes.).

`cvs-inhibit-copyright-message'
     The copyright message that is displayed on startup can be annoying
     after a while.  Set this variable to `t' if you want to get rid of
     it.  (But don't set this to `t' in the system defaults file - new
     users should see this message at least once).

`cvs-diff-flags'
     A list of strings to pass as arguments to the `cvs diff' and
     `diff' programs.  This is used by `cvs-mode-diff-cvs' and
     `cvs-mode-diff-backup' (key `b', see Viewing differences.).  If
     you prefer the Unidiff format you could add this line to your
     `.emacs' file:

          (setq cvs-diff-flags '("-u"))

`cvs-diff-ignore-marks'
     If this variable is non-`nil' or if a prefix argument is given (but
     not both) to `cvs-mode-diff-cvs' or `cvs-mode-diff-backup' marked
     files are not considered selected.

`cvs-log-flags'
     List of strings to send to `cvs log'.  Used by `cvs-mode-log' (key
     `l', see Getting info about files.).

`cvs-status-flags'
     List of strings to send to `cvs status'.  Used by `cvs-mode-status'
     (key `s', see Getting info about files.).

`cvs-auto-remove-handled'
     If this variable is set to any non-`nil' value
     `cvs-mode-remove-handled' will be called every time you check in
     files, after the check-in is ready.  See Removing handled entries.

`cvs-auto-revert-after-commit'
     If this variable is set to any non-`nil' value any buffers you have
     that visit a file that is committed will be automatically reverted.
     This variable is default `t'. See Committing changes.

`cvs-update-prog-output-skip-regexp'
     The `-u' flag in the `modules' file can be used to run a command
     whenever a `cvs update' is performed (see cvs(5)).  This regexp is
     used to search for the last line in that output.  It is normally
     set to `"$"'.  That setting is only correct if the command outputs
     nothing.  Note that pcl-cvs will get very confused if the command
     outputs *anything* to `stderr'.

`cvs-cvsroot'
     This variable can be set to override `CVSROOT'.  It should be a
     string. If it is set then everytime a cvs command is run it will be
     called as `cvs -d CVS-CVSROOT...'  This can be useful if your site
     has several repositories.

`TMPDIR'
     Pcl-cvs uses this *environment variable* to decide where to put the
     temporary files it needs.  It defaults to `/tmp' if it is not set.

`cvs-commit-buffer-require-final-newline'
     When you enter a log message in the `*cvs-commit-message*' buffer
     pcl-cvs will normally automatically insert a trailing newline,
     unless there already is one.  This behavior can be controlled via
     `cvs-commit-buffer-require-final-newline'.  If it is `t' (the
     default behavior), a newline will always be appended.  If it is
     `nil', newlines will never be appended.  Any other value causes
     pcl-cvs to ask the user whenever there is no trailing newline in
     the commit message buffer.

`cvs-sort-ignore-file'
     If this variable is set to any non-`nil' value the `.cvsignore'
     will always be sorted whenever you use `cvs-mode-ignore' to add a
     file to it.  This option is on by default.

Future enhancements
*******************

   Pcl-cvs is still under development and needs a number of
enhancements to be called complete.  Below is my current wish-list for
future releases of pcl-cvs.  Please, let me know which of these
features you want most.  They are listed below in approximately the
order that I currently think I will implement them in.

   * Rewritten parser code.  There are many situations where pcl-cvs
     will fail to recognize the output from CVS.  The situation could
     be greatly increased.

   * `cvs-status'.  This will run `cvs status' in a directory and
     produce a buffer that looks pretty much like the current *cvs*
     buffer.  That buffer will include information for all
     version-controlled files.  (There will be a simple keystroke to
     remove all "uninteresting" files, that is, files that are
     "Up-to-date").  In this new buffer you will be able to update a
     file, commit a file, et c.  The big win with this is that you will
     be able to watch the differences between your current working file
     and the head revision in the repository before you update the
     file, and you can then choose to update it or let it wait for a
     while longer.

   * Log mode.  When this mode is finished you will be able to move
     around (using `n' and `p') between the revisions of a file, mark
     two of them, and run a diff between them.  You will be able to
     hide branches (similar to the way you can hide sub-paragraphs in
     outline-mode) and do merges between revisions.  Other ideas about
     this are welcome.

   * The current model for marks in the *cvs* buffer seems to be
     confusing.  I am considering to use the VM model instead, where
     marks are normally inactive.  To activate the mark, you issue a
     command like `cvs-mode-next-command-uses-marks'.  I might
     implement a flag so that you can use either version.  Feedback on
     this before I start coding it is very welcome.

   * It should be possible to run commands such as `cvs log', `cvs
     status' and `cvs commit' directly from a buffer containing a file,
     instead of having to `cvs-update'.  If the directory contains many
     files the `cvs-update' can take quite some time, especially on a
     slow machine.  I planed to put these kind of commands on the prefix
     `C-c C-v', but that turned out to be used by for instance c++-mode.
     If you have any suggestions for a better prefix key, please let me
     know.

   * Increased robustness.  For instance, you can not currently press
     `C-g' when you are entering the description of a file that you are
     adding without confusing pcl-cvs.

   * Support for multiple active *cvs* buffers.

   * Dired support.  I have an experimental `dired-cvs.el' that works
     together with CVS 1.2.  Unfortunately I wrote it on top of a
     non-standard `dired.el', so it must be rewritten.

   * An ability to send user-supplied options to all the cvs commands.

   * Pcl-cvs is not at all clever about what it should do when `cvs
     update' runs a program (due to the `-u' option in the `modules'
     file -- see `cvs(5)').  The current release uses a regexp to
     search for the end.  At the very least that regexp should be
     configured for different modules.  Tell me if you have any idea
     about what is the right thing to do.  In a perfect world the
     program should also be allowed to print to `stderr' without
     causing pcl-cvs to crash.

   If you miss something in this wish-list, let me know!  I don't
promise that I will write it, but I will at least try to coordinate the
efforts of making a good Emacs front end to CVS.  See Bugs for
information about how to reach me.

   So far, I have written most of pcl-cvs in my all-to-rare spare time.
If you want pcl-cvs to be developed faster you can write a contract with
Signum Support to do the extension.  You can reach Signum Support by
email to `info@signum.se' or via mail to Signum Support AB, Box 2044,
S-580 02 Linkoping, Sweden. Phone: +46 (0) 13 - 21 46 00. Fax: +46 (0)
13 - 21 47 00.

Bugs (known and unknown)
************************

   If you find a bug or misfeature, don't hesitate to tell me!  Send
email to `ceder@lysator.liu.se'.

   If you have ideas for improvements, or if you have written some
extensions to this package, I would like to hear from you.  I hope that
you find this package useful!

   Below is a partial list of currently known problems with pcl-cvs
version 1.05.

Commit causes Emacs to hang
     Emacs waits for the `cvs commit' command to finish before you can
     do anything.  If you start a background job from the loginfo file
     you must take care that it closes `stdout' and `stderr' if you do
     not want to wait for it.  (You do that with `background-command &>-
     2&>- &' if you are starting `background-command' from a `/bin/sh'
     shell script).

     Your emacs will also hang if there was a lock file in the
     repository.  In this case you can type `C-g' to get control over
     your emacs again.

Name clash in Emacs 19
     This is really a bug in Elib or the Emacs 19 distribution.  Both
     Elib and Emacs 19.6 through at least 19.10 contains a file named
     `cookie.el'.  One of the files will have to be renamed, and we are
     currently negotiating about which of the files to rename.

Commands while cvs-update is running
     It is possible to type commands in the *cvs* buffer while the
     update is running, but error messages is all that you will get.
     The error messages should be better.

Unexpected output from CVS
     Unexpected output from CVS confuses pcl-cvs.  It will currently
     create a bug report that you can mail to me.  It should do
     something more civilized.