diff man/vm.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 49a24b4fd526
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/vm.texi	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,1399 @@
+\input texinfo  @comment -*-Texinfo-*-
+@setfilename ../info/vm.info
+@settitle VM User's Manual
+@iftex
+@finalout
+@end iftex
+@c @setchapternewpage odd		% For book style double sided manual.
+@c      @smallbook
+@tex
+\overfullrule=0pt
+%\global\baselineskip 30pt      % For printing in double spaces
+@end tex
+@ifinfo
+This file documents the VM mail reader.
+
+Copyright (C) 1989, 1991 Kyle E. Jones
+
+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.
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+@end ifinfo
+@c
+@titlepage
+@sp 6
+@center @titlefont{VM User's Manual}
+@sp 4
+@center Second Edition, VM Version 5
+@sp 1
+@center June 1991
+@sp 5
+@center Kyle E. Jones
+@center @t{kyle@@uunet.uu.net}
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1989, 1991 Kyle E. Jones
+
+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.
+
+@end titlepage
+@page
+@ifinfo
+@node Top, Introduction, (dir), (dir)
+
+This manual documents the VM mail reader, a Lisp program which runs as a
+subsystem under Emacs.  The manual is divided into the following
+chapters.
+
+@menu
+* Introduction::	Overview of the VM interface.
+* Starting Up::		What happens when your start VM.
+* Selecting Messages::	How to select messages for reading.
+* Reading Messages::	Previewing and paging through a message.
+* Sending Messages::	How to send messages from within VM.
+* Saving Messages::	How to save messages.
+* Deleting Messages::	How to delete, undelete and expunge messages
+* Editing Messages::    How to alter the text and headers of a message.
+* Message Marks::	Running VM commands on arbitrary subsets of messages.
+* Undoing::		How to undo changes to message attributes.
+* Grouping Messages::	How to make VM present similar message together.
+* Reading Digests::	How to read digests under VM.
+* Summaries::		How to view and customize the summary of a folder.
+* Miscellaneous::	Various customization variables undescribed elsewhere.
+* License::             The GNU General Public License
+
+Indices:
+
+* Key Index::		Menus of command keys and their references.
+* Command Index::	Menus of commands and their references.
+* Variable Index::	Menus of variables and their references.
+@end menu
+@end ifinfo
+
+@node License, , , Top
+@unnumbered License
+
+@unnumbered GNU GENERAL PUBLIC LICENSE
+@center Version 1, February 1989
+@cindex license to copy Emacs
+@cindex General Public License
+
+@display
+Copyright @copyright{} 1989 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@unnumberedsec Preamble
+
+  The license agreements of most software companies try to keep users
+at the mercy of those companies.  By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users.  The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must tell them their rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+@iftex
+@unnumberedsec TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center TERMS AND CONDITIONS
+@end ifinfo
+
+@enumerate
+@item
+This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License.  The
+``Program'', below, refers to any such program or work, and a ``work based
+on the Program'' means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications.  Each
+licensee is addressed as ``you''.
+
+@item
+@cindex Distribution
+You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program.  You may charge a fee for the physical act of
+transferring a copy.
+
+@item
+You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+@itemize @bullet
+@item
+cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change; and
+
+@item
+cause the whole of any work that you distribute or publish, that
+in whole or in part contains the Program or any part thereof, either
+with or without modifications, to be licensed at no charge to all
+third parties under the terms of this General Public License (except
+that you may choose to grant warranty protection to some or all
+third parties, at your option).
+
+@item
+If the modified program normally reads commands interactively when
+run, you must cause it, when started running for such interactive use
+in the simplest and most usual way, to print or display an
+announcement including an appropriate copyright notice and a notice
+that there is no warranty (or else, saying that you provide a
+warranty) and that users may redistribute the program under these
+conditions, and telling the user how to view a copy of this General
+Public License.
+
+@item
+You may charge a fee for the physical act of transferring a
+copy, and you may at your option offer warranty protection in
+exchange for a fee.
+@end itemize
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+@item
+You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+@itemize @bullet
+@item
+accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of
+Paragraphs 1 and 2 above; or,
+
+@item
+accompany it with a written offer, valid for at least three
+years, to give any third party free (except for a nominal charge
+for the cost of distribution) a complete machine-readable copy of the
+corresponding source code, to be distributed under the terms of
+Paragraphs 1 and 2 above; or,
+
+@item
+accompany it with the information you received as to where the
+corresponding source code may be obtained.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form alone.)
+@end itemize
+
+Source code for a work means the preferred form of the work for making
+modifications to it.  For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+@item
+You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License.  However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+@item
+By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+@item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions.  You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+@item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of the license which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+@item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
+LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
+WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@unnumberedsec Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+  To do so, attach the following notices to the program.  It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) 19@var{yy}  @var{name of author}
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+@smallexample
+Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+@end smallexample
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items---whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary.  Here a sample; alter the names:
+
+@example
+Yoyodyne, Inc., hereby disclaims all copyright interest in the
+program `Gnomovision' (a program to direct compilers to make passes
+at assemblers) written by James Hacker.
+
+@var{signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+@end example
+
+That's all there is to it!
+
+@node Introduction, Starting Up, Top, Top
+@unnumbered Introduction
+
+VM (View Mail) is an Emacs subsystem that allows UNIX mail to be read
+and disposed of within Emacs.  Commands exist to do the normal things
+expected of a mail user agent, such as generating replies, saving
+messages to folders, deleting messages and so on.  There are other more
+advanced commands that do tasks like bursting and creating digests,
+message forwarding, and organizing message presentation according to
+various criteria.
+
+To invoke VM simply type @kbd{M-x vm}.  VM gathers any mail that has
+arrived in your system mailbox and appends it to a file known as your
+@dfn{primary inbox}, and visits that file for reading.  @xref{Starting Up}.
+A file visited for reading by VM is called the @dfn{current folder}.@refill
+
+@findex vm-scroll-forward
+@findex vm-scroll-backward
+@kindex SPC
+@kindex b
+@kindex DEL
+If there are any messages in the primary inbox, VM selects the first new
+or unread message, and previews it.  @dfn{Previewing} is VM's way of
+showing you part of message and allowing you to decide whether you want
+to read it.  @xref{Previewing}.  By default VM shows you the message's
+sender, recipient, subject and date headers.  Typing @key{SPC}
+(@code{vm-scroll-forward}) exposes the body of the message and flags the
+message as read.  Subsequent @key{SPC}'s scroll forward through the
+message, @kbd{b} or @key{DEL} scrolls backward.  When you reach the end
+of a message, typing @key{SPC} or @kbd{n} moves you forward to preview
+the next message.  @xref{Paging}.@refill
+
+If you do not want to read a message that's being previewed, just type
+@kbd{n} and VM will move on to the next message (if there is one).
+@xref{Selecting Messages}.@refill
+
+To save a message to a mail folder use @kbd{s} (@code{vm-save-message}).
+VM will prompt you for the folder name in the minibuffer.
+@xref{Saving Messages}.@refill
+
+Messages are deleted by typing @kbd{d} (@code{vm-delete-message}) while
+previewing or reading them.  The message is not deleted right away; it
+is simply flagged for deletion.  If you change your mind about deleting a
+message just select it and type @kbd{u} (@code{vm-undelete-message}),
+and the message will be undeleted.  @xref{Deleting Messages}.  The
+actual removal of deleted messages from the current folder is called
+@dfn{expunging} and it is accomplished by typing @kbd{#}
+(@code{vm-expunge-folder}).  The message is still present in the on-disk
+version of the folder until the folder is saved.@refill
+
+Typing @kbd{h} (@code{vm-summarize}) causes VM to pop up a window
+containing a summary of the contents of the current folder.  The summary is
+presented one line per message, by message number, listing each message's
+author, date sent, line and byte count, and subject.  Also, various
+letters appear beside the message number to indicate that a message is
+new, unread, flagged for deletion, etc.  An arrow @samp{->} appears to
+the left of the line summarizing the current message.  The summary
+format is user configurable, @pxref{Summaries}.@refill
+
+@findex vm-save-folder
+@kindex S
+When you are finished reading mail the current folder must be saved, so
+that the next time the folder is visited VM will know which messages have
+been already read, replied to and so on.  Typing @kbd{S}
+(@code{vm-save-folder}) expunges all deleted messages and saves the
+folder.  @kbd{C-x C-s} saves the folder without expunging deleted
+messages but the messages are still flagged deleted.  The next time the
+folder is visited these messages will still be flagged for deletion.@refill
+
+@findex vm-quit
+@findex vm-quit-no-change
+@kindex q
+@kindex x
+To quit VM you can type @kbd{q} (@code{vm-quit}) or @kbd{x}
+(@code{vm-quit-no-change}).  Typing @kbd{q} expunges and saves the
+current folder before quitting.  Also, any messages flagged new are
+changed to be flagged unread, before saving.  The @kbd{x} command quits
+VM without expunging, saving or otherwise modifying the current folder.
+Quitting is not required; you can simply switch to another Emacs buffer
+when you've finished reading mail.@refill
+
+@findex vm-get-new-mail
+@kindex g
+At any time while reading mail in the primary inbox you can type @kbd{g}
+(@code{vm-get-new-mail}) to check to see if new mail has arrived.  If new
+mail has arrived it will be moved from the system spool area and merged into
+the primary inbox.  If you are not in the middle of another message, VM
+will also jump to the first new message.
+
+If @code{vm-get-new-mail} is given a prefix argument, it will prompt for
+another file from which to gather messages instead of the usual spool
+files.  In this case the source folder is copied but not deleted.
+
+@node Starting Up, Selecting Messages, Introduction, Top
+@chapter Starting Up
+
+@findex vm-load-rc
+@kindex L
+There are three ways to start VM: @kbd{M-x vm}, @kbd{M-x vm-visit-folder}
+and @code{vm-mode}.  The first time VM is started in an Emacs session (by
+any of these methods), it attempts to load the file @file{~/.vm}.  If
+present this file should contain Lisp code, much like the @file{.emacs}
+file.  Since VM has in excess of forty configuration variables, use of
+the @file{~/.vm} can considerably reduce clutter in the @file{.emacs}
+file.  You can force the reloading of this file on demand by typing
+@kbd{L} (@code{vm-load-init-file}) from within VM.@refill
+
+@findex vm
+@vindex vm-primary-inbox
+@kbd{M-x vm} causes VM to gather any mail present in your system mailbox
+and append it to a file known as your @dfn{primary inbox}, creating
+this file if necessary.  The default name of this file is
+@file{~/INBOX}, but VM will use whatever file is named by the variable
+@code{vm-primary-inbox}.@refill
+
+@vindex vm-crash-box
+VM transfers the mail from the system mailbox to the primary inbox via a
+temporary file known as the @dfn{crash box}.  The variable
+@code{vm-crash-box} names the crash box file.  VM first copies the mail
+to the crash box, deletes the system mailbox, merges the crash box
+contents into the primary inbox, and then deletes the crash box.  If the
+system or Emacs should crash in the midst of this transfer, any message
+not present in the primary inbox will be either in the system mailbox or
+the crash box.  Some messages may be duplicated but no mail will be
+lost.@refill
+
+If the file named by @code{vm-crash-box} already exists when VM is
+started up, VM will merge that with the primary inbox before getting any
+new messages from the system mailbox.@refill
+
+@vindex vm-spool-files
+By default, the location of the system mailbox is determined
+heuristically based on what type of system you're using.  VM can
+be told explicitly where the system mailbox is through the variable
+@code{vm-spool-files}.  The value of this variable should be a list of
+strings naming files VM should try when searching for newly arrived
+mail.  Multiple mailboxes can be specified if you receive mail in
+more than one place.  The value of @code{vm-spool-files} will be inherited
+from the shell environmental variables MAILPATH or MAIL if either of
+these variables are defined.@refill
+
+@findex vm-visit-folder
+@kindex v
+@kbd{M-x vm-visit-folder} (@kbd{v} from within VM) allows you to visit
+some other mail folder than the primary inbox.  The folder name will be
+prompted for in the minibuffer.@refill
+
+Once VM has read the folder, the first new or unread message will be
+selected.  If there is no such message, the first message in the folder
+is selected.
+
+@findex vm-mode
+@kbd{M-x vm-mode} can be used on a buffer already loaded into Emacs to put
+it into the VM major mode so that VM commands can be executed from within
+it.  This command is suitable for use in Lisp programs, and for inclusion in
+@code{auto-mode-alist} to automatically start VM on a file based on a
+particular filename suffix.  @code{vm-mode} foregoes some of VM's startup
+procedures (e.g. starting up a summary) to facilitate noninteractive use.
+
+@vindex vm-startup-with-summary
+The variable @code{vm-startup-with-summary} controls whether VM
+automatically displays a summary of the folder's contents at startup.  A
+value of @code{nil} gives no summary; a value of @code{t} gives a full
+frame summary.  A value that is neither @code{t} nor @code{nil} splits
+the frame between the summary and the folder display.  The latter only
+works if the variable @code{pop-up-windows}'s value is non-@code{nil},
+and the value of @code{vm-mutable-windows} is non-@code{nil}.  The
+default value of @code{vm-startup-with-summary} is @code{nil}.@refill
+
+@vindex vm-mail-window-percentage
+The variable @code{vm-mail-window-percentage} tells VM what percentage of
+the frame should be given to the folder display when both it and the
+folder summary are being displayed.  Note that Emacs enforces a minimum
+window size limit, so a very high or very low value for this variable
+may squeeze out one of the displays entirely.  This variable's default
+value is 75, which works with Emacs' default minimum window size limit,
+on a 24 line terminal.  Note that the value of @code{vm-mutable-windows}
+must be @code{t} or VM will not do window resizing regardless of the
+value of @code{vm-mail-window-percentage}.@refill
+
+@vindex vm-inhibit-startup-message
+A non-@code{nil} value for the variable @code{vm-inhibit-startup-message}
+disables the display of the VM's copyright, copying and warranty
+disclaimer.  If you must, set this variable in your own @file{.emacs} file;
+don't set it globally for everyone.  Users should be told their rights.
+The startup messages abort at the first keystroke after startup, so they do not
+impede mail reading.@refill
+
+@node Selecting Messages, Reading Messages, Starting Up, Top
+@chapter Selecting Messages
+
+@findex vm-next-message
+@findex vm-previous-message
+@kindex n
+@kindex p
+@vindex vm-skip-deleted-messages
+@vindex vm-skip-read-messages
+The primary commands for selecting messages in VM are @kbd{n}
+(@code{vm-next-message}) and @kbd{p} (@code{vm-previous-message}).
+These commands move forward and backward through the current folder.
+When they go beyond the end or beginning of the folder they wrap to the
+beginning and end respectively.  By default, these commands skip messages
+flagged for deletion.  This behavior can be disabled by setting the value
+of the variable @code{vm-skip-deleted-messages} to @code{nil}.  These
+commands can also be made to skip messages that have been read; set
+@code{vm-skip-read-messages} to @code{t} to do this.
+
+The commands @kbd{n} and @kbd{p} also take prefix arguments that specify
+the number of messages to move forward or backward.  If the magnitude of
+the prefix argument is greater than 1, no message skipping will be done
+regardless of the settings of the previously mentioned skip control
+variables.@refill
+
+@vindex vm-circular-folders
+The variable @code{vm-circular-folders} determines whether VM folders
+will be considered circular by various commands.  @dfn{Circular} means VM
+will wrap from the end of the folder to the start and vice versa when
+moving the message pointer, deleting, undeleting or saving messages
+before or after the current message.@refill
+
+A value of @code{t} causes all VM commands to consider folders circular.
+A value of @code{nil} causes all of VM commands to signal an error if
+the start or end of the folder would have to be passed to complete the
+command.  For movement commands, this occurs after the message pointer
+has been moved as far it can go.  For other commands the error occurs
+before any part of the command has been executed, i.e. no deletions, saves,
+etc. will be done unless they can be done in their entirety.  A value
+other than @code{nil} or @code{t} causes only VM's movement
+commands to consider folders circular.  Saves, deletes and undeletes
+will behave as if the value is @code{nil}.  The default value of
+@code{vm-circular-folders} is @code{0}.@refill
+
+Other commands to select messages:
+
+@table @kbd
+@findex vm-goto-message
+@kindex RET
+@item RET (@code{vm-goto-message})
+Go to message number @var{n}.  @var{n} is the prefix argument, if
+provided, otherwise it is prompted for in the minibuffer.
+@findex vm-goto-message
+@kindex TAB
+@item TAB (@code{vm-goto-message-last-seen})
+Go to message last previewed or read.
+@findex vm-Next-message
+@findex vm-Previous-message
+@kindex N
+@kindex P
+@item N (@code{vm-Next-message})
+@itemx P (@code{vm-Previous-message})
+Go to the next (previous) message, ignoring the settings of the skip
+control variables.
+@findex vm-next-unread-message
+@findex vm-previous-unread-message
+@kindex M-n
+@kindex M-p
+@item M-n (@code{vm-next-unread-message})
+@itemx M-p (@code{vm-previous-unread-message})
+Move forward (backward) to the nearest new or unread message.  If no
+such message exists then these commands work like @kbd{n} and @kbd{p}.
+@findex vm-isearch-forward
+@findex vm-isearch-backward
+@kindex M-s
+@comment @kindex M-r
+@vindex vm-search-using-regexps
+@item M-s (@code{vm-isearch-forward})
+@itemx M-x vm-isearch-backward
+These work just like Emacs' normal forward and backward incremental
+search commands, except that when the search ends, VM selects the
+message containing point.  If the value of the variable
+@code{vm-search-using-regexps} is non-@code{nil}, a regular expression
+may be used instead of a fixed string for the search pattern; VM
+defaults to the fixed string search.  If a prefix argument is given,
+the value of @code{vm-search-using-regexps} is temporarily toggled for
+the search.
+@xref{Incremental Search,,,emacs, the GNU Emacs Manual}.@refill
+@end table
+
+@node Reading Messages, Sending Messages, Selecting Messages, Top
+@chapter Reading Messages
+
+Once a message has been selected, VM will present it to you.  By default,
+presentation is done in two stages: @dfn{previewing} and @dfn{paging}.
+
+@menu
+* Previewing::	Customizing message previews.
+* Paging::	Scrolling and paging through the current message.
+@end menu
+
+@node Previewing, Paging, Reading Messages, Reading Messages
+@section Previewing
+
+@dfn{Previewing} is VM's way of showing you a small portion of a message
+and allowing you to decide whether you want to read it.  Typing
+@key{SPC} exposes the body of the message, and from there you can
+repeatedly type @key{SPC} to page through the message.
+
+By default, the sender, recipient, subject and date headers are shown
+when previewing; the rest of the message is hidden.  This behavior may
+be altered by changing the settings of three variables:
+@code{vm-visible-headers}, @code{vm-invisible-header-regexp} and
+@code{vm-preview-lines}.@refill
+
+@vindex vm-preview-lines
+The value of @code{vm-preview-lines} should be a number that tells VM
+how many lines of the text of the message should be visible.  The default
+value of this variable is 0.  If @code{vm-preview-lines} is @code{nil},
+then previewing is not done at all; when a message is first presented it
+is immediately exposed in its entirety and is flagged as read.@refill
+
+@vindex vm-visible-headers
+The value of @code{vm-visible-headers} should be a list of regular
+expressions matching the beginnings of headers that should be made
+visible when a message is presented.  The regexps should be listed in
+the preferred presentation order of the headers they match.@refill
+
+@vindex vm-invisible-header-regexp
+If non-@code{nil}, the variable @code{vm-invisible-header-regexp}
+specifies what headers should @emph{not} be displayed.  Its value should
+be a string containing a regular expression that matches all headers you
+do not want to see.  Setting this variable non-@code{nil} implies that
+you want to see all headers not matched by it; therefore the value of
+@code{vm-visible-headers} is only used to determine the order of the
+visible headers in this case.  Headers not matched by
+@code{vm-invisible-header-regexp} or @code{vm-visible-headers} are
+displayed last.@refill
+
+If you change the value of either @code{vm-visible-headers} or
+@code{vm-invisible-header-regexp} in the middle of a VM session the
+effects will not be immediate.  You will need to use the command
+@code{vm-discard-cached-data} on each message (bound to @kbd{j} by
+default) to force VM rearrange the message headers.  A good way to do
+this is to mark all the messages in the folder and apply
+@code{vm-discard-cached-data} to the marked messages.  @xref{Message
+Marks}.@refill
+
+@vindex vm-highlighted-header-regexp
+Another variable of interest is @code{vm-highlighted-header-regexp}.  The
+value of this variable should be a single regular expression that
+matches the beginnings of any header that should be presented in inverse
+video when previewing.  For example, a value of @samp{"^From\\|^Subject"}
+causes the From and Subject headers to be highlighted.@refill
+
+@vindex vm-preview-read-messages
+By default, VM previews all messages, even if they have already been read.
+To have VM preview only those messages that have not been read, set the
+value of @code{vm-preview-read-messages} to @code{nil}.
+
+@findex vm-expose-hidden-headers
+Typing @kbd{t} (@code{vm-expose-hidden-headers}) makes VM toggle
+between exposing and hiding headers that would ordinarily be hidden.@refill
+
+@node Paging,, Previewing, Reading Messages
+@section Paging
+
+@vindex vm-auto-next-message
+Typing @key{SPC} during a message preview exposes the body of the
+message.  If the message was new or previously unread, it will be flagged
+``read''.  At this point you can use @key{SPC} to scroll forward, and
+@kbd{b} or @key{DEL} to scroll backward a windowful of text at a time.
+Typing space at the end of a message moves you to the next message.  If
+the value of @code{vm-auto-next-message} is @code{nil}, @key{SPC} will
+not move to the next message; you must type @kbd{n} explicitly.
+
+If the value of @code{vm-honor-page-delimiters} is non-@code{nil}, VM
+will recognize and honor page delimiters.  This means that when you
+scroll through a document, VM will display text only up to the next page
+delimiter.  Text after the delimiter will be hidden until you type
+another @key{SPC}, at which point the text preceding the delimiter will
+become hidden.  The Emacs variable @code{page-delimiter} determines what
+VM will consider to be a page delimiter.
+
+You can ``unread'' a message (so to speak) by typing @kbd{U}
+(@code{vm-unread-message}).  The current message will be flagged unread.
+
+@node Sending Messages, Saving Messages, Reading Messages, Top
+@chapter Sending Messages
+
+When sending messages from within VM, you will be using the standard
+Mail major mode provided with GNU Emacs.  @xref{Mail Mode,,,emacs, the
+GNU Emacs Manual}.
+However, @samp{*mail*} buffers created by VM have extra command keys:
+
+@table @kbd
+@findex vm-yank-message
+@kindex C-c C-y
+@item C-c C-y (@code{vm-yank-message})
+Copies a message from the current folder into the @samp{*mail*} buffer.
+The message number is read from the minibuffer.  By default, each line of
+the copy is prepended with the value of the variable
+@code{vm-included-text-prefix}.  All message headers are yanked along
+with the text.  Point is left before the inserted text, the mark after.
+Any hook functions bound to mail-yank-hooks are run, after inserting
+the text and setting point and mark.  If a prefix argument is given,
+this tells VM to ignore mail-yank-hooks, don't set the mark, don't prepend the
+value of vm-included-text-prefix to every yanked line, and don't yank
+any headers other than those specified in
+vm-visible-headers/vm-invisible-headers.@refill
+@kindex C-c y
+@findex vm-yank-message-other-folder
+@item C-c y (@code{vm-yank-message-other-folder})
+Work like @code{vm-yank-message}, but it first prompts for the name of a
+folder from which to yank the message.@refill
+@kindex C-c C-v
+@item C-c C-v <Any VM command key>
+All VM commands may be accessed in the @samp{*mail*} buffer by prefixing them
+with C-c C-v.
+@end table
+
+@findex vm-mail
+@kindex m
+The simplest command is @kbd{m} (@code{vm-mail}) which sends a mail
+message much as @kbd{M-x mail} does but allows the added commands
+described above.
+
+@code{vm-mail} can be invoked outside of VM by typing @kbd{M-x vm-mail}.
+However, of the above commands, only @kbd{C-c y}
+(@code{vm-yank-message-other-folder}) will work; all the other commands
+require a parent folder.@refill
+
+If you send a message and it is returned by the mail system because it
+was undeliverable, you can easily resend the message by typing @kbd{M-r}
+(@code{vm-resend-bounced-message}).  VM will extract the old message and
+its pertinent headers from the returned message, and place you in a
+@samp{*mail*} buffer.  You can then change the recipient addresses or do
+whatever is necessary to correct the original problem and resend the
+message.@refill
+
+@menu
+* Replying::		Describes the various ways to reply to a message.
+* Forwarding Messages::	How to forward a message to a third party.
+@end menu
+
+@node Replying, Forwarding Messages, Sending Messages, Sending Messages
+@section Replying
+
+@vindex vm-reply-subject-prefix
+VM has special commands that make it easy to reply to a message.  When a
+reply command is invoked, VM fills in the subject and recipient headers
+for you, since it is apparent to whom the message should be sent and
+what the subject should be.  There is an old convention of prepending
+the string @samp{"Re: "} to the subject of replies if the string isn't
+present already.  VM supports this indirectly by providing the variable
+@code{vm-reply-subject-prefix}.  Its value should be a string to prepend
+to the subject of replies, if the said string isn't present already.  A
+@code{nil} value means don't prepend anything to the subject (this is
+the default).  In any case you can edit any of the message headers
+manually, if you wish.@refill
+
+@vindex vm-included-text-prefix
+VM also helps you quote material from a message to which you are
+replying by providing @dfn{included text} as a feature of some of the
+commands.  @dfn{Included text} is a copy of the message being replied to with
+some fixed string prepended to each line so that included text can be
+distinguished from the text of the reply.  The variable
+@code{vm-included-text-prefix} specifies what the prepended string will
+be.@refill
+
+@vindex vm-included-text-attribution-format
+The variable @code{vm-included-text-attribution-format} specifies the
+format for the attribution of included text.  This attribution is a line
+of text that tells who wrote the text that is to be included; it will be
+inserted before the included text.  If non-@code{nil}, the value of
+@code{vm-included-text-attribution-format} should be a string format
+specification similar to @code{vm-summary-format}.  @xref{Summaries}.  A
+@code{nil} value causes the attribution to be omitted.@refill
+
+@vindex vm-in-reply-to-format
+The variable @code{vm-in-reply-to-format} specifies the format of the
+In-Reply-To header that is inserted into header section of the reply
+buffer.  Like @code{vm-included-text-attribution-format},
+@code{vm-in-reply-to-format} should be a string similar to that of
+@code{vm-summary-format}.  A @code{nil} value causes the In-Reply-To
+header to be omitted.@refill
+
+@vindex vm-strip-reply-headers
+The recipient headers generated for reply messages are created by
+simply copying the appropriate headers for the message to which you are
+replying.  This includes any full name information, comments, etc. in
+these headers.  If the variable @code{vm-strip-reply-headers} is
+non-@code{nil}, the reply headers will stripped of all information but
+the actual addresses.
+
+The reply commands are:
+
+@table @kbd
+@findex vm-reply
+@kindex r
+@item r (@code{vm-reply})
+Replies to the author of the current message.
+@findex vm-reply-include-text
+@kindex R
+@item R (@code{vm-reply-include-text})
+Replies to the author of the current message and provides included text.
+@findex vm-followup
+@kindex f
+@item f (@code{vm-followup})
+Replies to the all recipients of the current message.
+@findex vm-followup-include-text
+@kindex F
+@item F (@code{vm-followup-include-text})
+Replies to the all recipients of the current message and provides
+included text.
+@end table
+
+These commands all accept a numeric prefix argument @var{n}, which if
+present, causes VM to reply to the next (or previous if the argument is
+negative) @var{n-1} message as well as the current message.  Also all
+the reply commands set the ``replied'' attribute of the messages to
+which you are responding, but only when the reply is actually sent.  The
+reply commands can also be applied to marked messages,
+@pxref{Message Marks}.@refill
+
+@vindex vm-reply-ignored-addresses
+If you are one of multiple recipients of a message and you use @kbd{f}
+and @kbd{F}, your address will be included in the recipients of the
+reply.  You can avoid this by judicious use of the variable
+@code{vm-reply-ignored-addresses}.  Its value should be a list of
+regular expressions that match addresses that VM should automatically
+remove from the recipient headers of replies.
+
+@node Forwarding Messages,, Replying, Sending Messages
+@section Forwarding Messages
+
+VM has two commands to forward messages: @kbd{z}
+(@code{vm-forward-message}) and @key{@@} (@code{vm-send-digest}).@refill
+
+@findex vm-forward-message
+@kindex z
+@vindex vm-rfc934-forwarding
+@vindex vm-forwarding-subject-format
+Typing @kbd{z} puts you into a @samp{*mail*} buffer just like @kbd{m},
+except the current message appears as the body of the message in the
+@samp{*mail*} buffer. The forwarded message is surrounded by RFC 934
+compliant message delimiters.  If the variable
+@code{vm-rfc934-forwarding} is non-@code{nil}, "^-" to "- -" character
+stuffing is done to the forwarded message (this is the default).  This
+behavior is required if the recipient of the forwarded message wants to
+use a RFC 934 standard bursting agent to access the message.  If the
+variable @code{vm-forwarding-subject-format} is non-@code{nil} it should
+specify the format of the Subject header of the forwarded message.  This
+subject will be used as the contents of the Subject header automatically
+inserted into the @samp{*mail*} buffer.  A @code{nil} value causes the
+Subject header to be left blank.  The forwarded message is flagged
+``forwarded''.@refill
+@findex vm-send-digest
+@vindex vm-digest-preamble-format
+@vindex vm-digest-center-preamble
+@kindex @@
+The command @key{@@} (@code{vm-send-digest}) works like @kbd{z} except
+that a digest of all the messages in the current folder is made and
+inserted into the @samp{*mail*} buffer.  Also, @code{vm-send-digest} can
+be applied to marked messages.  @xref{Message Marks}.  When applied to
+marked messages, @code{vm-send-digest} will only bundle marked messages,
+as opposed to the usual bundling of all messages in the current folder.
+If you give @code{vm-send-digest} a prefix argument, VM will insert a
+list of preamble lines at the beginning of the digest, one line per
+digestified message.  The variable @code{vm-digest-preamble-format}
+determines the format of the preamble lines.  If the value of
+@code{vm-digest-center-preamble} is non-@code{nil}, the preamble lines
+will be centered.@refill
+
+@node Saving Messages, Deleting Messages, Sending Messages, Top
+@chapter Saving Messages
+
+Mail messages are normally saved to files that contain only mail
+messages.  Such files are called @dfn{folders}.
+
+@findex vm-save-message
+@kindex s
+The VM command to save a message to a folder is @kbd{s}
+(@code{vm-save-message}); invoking this command causes the current
+message to be saved to a folder whose name you specify in the
+minibuffer.  If @code{vm-save-message} is given a prefix argument
+@var{n}, the current message plus the next @var{n-1} message are saved.
+If @var{n} is negative, the current message and the previous @var{n-1}
+messages are saved.  Messages saved with @code{vm-save-message} are
+flagged ``filed''.@refill
+
+@vindex vm-confirm-new-folders
+If the value of the variable @code{vm-confirm-new-folders} is
+non-@code{nil}, VM will ask for confirmation before creating a new
+folder on interactive saves.@refill
+
+@vindex vm-folder-directory
+If you have a directory where you keep all your mail folders, you should
+set the variable @code{vm-folder-directory} to point to it.  If this
+variable is set, @code{vm-save-message} will insert this directory name
+into the minibuffer before prompting you for a folder name; this will save
+you some typing.@refill
+
+@vindex vm-auto-folder-alist
+Another aid to selecting folders in which to save mail is the variable
+@code{vm-auto-folder-alist}.  The value of this variable should be a
+list of the form,@refill
+
+@display
+((@var{header-name}
+   (@var{regexp} . @var{folder-name}) ...)
+  ...)
+@end display
+
+where @var{header-name} and @var{regexp} are strings, and
+@var{folder-name} is a string or an s-expression that evaluates to a
+string.@refill
+
+If any part of the contents of the message header named by
+@var{header-name} is matched by the regular expression @var{regexp}, VM
+will evaluate the corresponding @var{folder-name} and use the result as
+the default when prompting for a folder to save the message in.  If
+the resulting folder name is a relative pathname it resolves to the directory
+named by @code{vm-folder-directory}, or the @code{default-directory} of
+the currently visited folder if @code{vm-folder-directory} is @code{nil}.@refill
+
+When @var{folder-name} is evaluated, the current buffer will contain only
+the contents of the header named by @var{header-name}.  It is safe to
+modify this buffer.  You can use the match data from any @samp{\( @dots{}
+\)} grouping constructs in @var{regexp} along with the function
+@code{buffer-substring} to build a folder name based on the header information.
+If the result of evaluating @var{folder-name} is a list, then the list will
+be treated as another auto-folder-alist and will be descended
+recursively.@refill
+
+@vindex vm-auto-folder-case-fold-search
+Whether matching is case sensitive depends on the value of the variable
+@code{vm-auto-folder-case-fold-search}.  A non-@code{nil} value makes
+matching case insensitive.  The default value is @code{t}, which means
+matching is case sensitive.  Note that the matching of header names is
+always case insensitive because RFC 822 specifies that header names are
+case indistinct.
+
+@vindex vm-visit-when-saving
+VM can save messages to a folder in two distinct ways.  The message can be
+appended directly to the folder on disk, or the folder can be visited as
+Emacs would visit any other file and the message be appended to that
+buffer.  In the latter method you must save the buffer yourself to change
+the on-disk copy of the folder.  The variable @code{vm-visit-when-saving}
+controls which method is used.  A value of @code{t} causes VM to always
+visit a folder before saving message to it.  A @code{nil} value causes VM
+to always append directly to the folder file.  In this case VM will not
+save messages to the disk copy of a folder that is being visited.  This
+restriction is necessary to insure that the buffer and on-disk copies of
+the folder are consistent. If the value of @var{vm-visit-when-saving} is
+not @code{nil} and not @code{t} (e.g. 0, the default), VM will append to
+the folder's buffer if the buffer is currently being visited, otherwise VM
+will append to the file itself.@refill
+
+@vindex vm-delete-after-saving
+After a message is saved to a folder, the usual thing to do next is to
+delete it.  If the variable @code{vm-delete-after-saving} is
+non-@code{nil}, VM will flag messages for deletion automatically after
+saving them.  This applies only to saves to folders, not for the @kbd{w}
+command (see below).@refill
+
+Other commands:
+
+@table @kbd
+@findex vm-save-message-sans-headers
+@kindex w
+@item w (@code{vm-save-message-sans-headers})
+Saves a message or messages to a file without their headers.  This
+command responds to a prefix argument exactly as @code{vm-save-message}
+does.  Messages saved this way are flagged ``written''.
+@findex vm-auto-archive-messages
+@kindex A
+@item A (@code{vm-auto-archive-messages})
+Save all unfiled messages that auto-match a folder via
+@code{vm-auto-folder-alist} to their appropriate folders.  Messages that
+are flagged for deletion are not saved by this command.  If invoked with a
+prefix argument, confirmation will be requested for each save.
+@findex vm-pipe-message-to-command
+@kindex |
+@item | (@code{vm-pipe-message-to-command})
+Runs a shell command with some or all of the current message as input.
+By default, the entire message is used.@*
+@*
+If invoked with one @t{C-u} the text portion of the message is used.@*
+If invoked with two @t{C-u}'s the header portion of the message is used.@*
+@*
+If the shell command generates any output, it is displayed in a
+@samp{*Shell Command Output*} buffer.  The message itself is not altered.
+@end table
+
+@node Deleting Messages, Editing Messages, Saving Messages, Top
+@chapter Deleting Messages
+
+In VM, messages are flagged for deletion, and then are subsequently
+@dfn{expunged} or removed from the folder.  The messages are not removed
+from the on-disk copy of the folder until the folder is saved.
+
+@table @kbd
+@findex vm-delete-message
+@kindex d
+@item d (@code{vm-delete-message})
+Flags the current message for deletion.  A prefix argument @var{n}
+causes the current message and the next @var{n-1} messages to be flagged.
+A negative @var{n} causes the current message and the previous @var{n-1}
+messages to be flagged.
+@findex vm-undelete-message
+@kindex u
+@item u (@code{vm-undelete-message})
+Removes the deletion flag from the current message.  A prefix argument @var{n}
+causes the current message and the next @var{n-1} messages to be undeleted.
+A negative @var{n} causes the current message and the previous @var{n-1}
+messages to be undeleted.
+@findex vm-kill-subject
+@kindex k
+@item k (@code{vm-kill-subject})
+Flags all messages with the same subject as the current message (ignoring
+``Re:'') for deletion.
+@findex vm-expunge-folder
+@kindex #
+@item # (@code{vm-expunge-folder})
+Does the actual removal of messages flagged for deletion in the current
+folder.
+@end table
+
+@vindex vm-move-after-deleting
+@vindex vm-move-after-undeleting
+Setting the variable @code{vm-move-after-deleting} non-@code{nil} causes
+VM to move past the messages after flagging them for deletion.  Setting
+@code{vm-move-after-undeleting} non-@code{nil} causes similar movement after undeletes.@refill
+
+@node Editing Messages, Message Marks, Deleting Messages, Top
+@chapter Editing Messages
+
+To edit a message, type @kbd{e} (@code{vm-edit-message}).  The current
+message is copied into a temporary buffer, and this buffer is selected
+for editing.  The major mode of this buffer is controlled by the
+variable @code{vm-edit-message-mode}.  The default is Text mode.@refill
+
+Use @kbd{C-c ESC} (@code{vm-edit-message-end}) when you have finished
+editing the message.  The message will be inserted into its folder,
+replacing the old version of the message.  If you want to quit the edit
+without your edited version replacing the original, use @kbd{C-c C-]}
+(@code{vm-edit-message-abort}), or you can just kill the edit buffer
+with @kbd{C-x k} (@code{kill-buffer}).@refill
+
+If you give a prefix argument to @code{vm-edit-message}, then the
+current message will be flagged unedited.@refill
+
+As with VM @samp{*mail*} buffers, all VM commands can be accessed from
+the edit buffer through the command prefix @kbd{C-c C-v}.@refill
+
+@node Message Marks, Undoing, Editing Messages, Top
+@chapter Message Marks
+
+VM provides general purpose @dfn{marks} that may be applied to any and
+all messages within a given folder.  Certain VM commands can be
+subsequently invoked only on those message that are marked.
+
+To mark the current message, type @kbd{C-c C-@@}
+(@code{vm-mark-message}).  If you give a numeric prefix argument
+@var{n}, the next @var{n-1} messages will be marked as well.  A negative
+prefix argument means mark the previous @var{n-1}.  An asterisk
+(@samp{*}) will appear to the right of the message numbers of all marked
+messages in the summary window.@refill
+
+To remove a mark from the current message, use @kbd{C-c SPC}
+(@code{vm-unmark-message}).  Prefix arguments work as with
+@code{vm-mark-message}.@refill
+
+Use @kbd{C-c C-a} to mark all messages in the current folder; @kbd{C-c a}
+removes marks from all messages.
+
+To apply a VM command to all marked message you must prefix it with the
+key sequence @kbd{C-c RET} (@code{vm-next-command-uses-marks}).  The
+next VM command will apply to all marked messages, provided the
+command can be applied to such messages in a meaningful and useful way.
+The current commands that can be applied to marked messages are:
+@code{vm-delete-message}, @code{vm-discard-cached-data},
+@code{vm-followup}, @code{vm-followup-include-text}, @code{vm-reply},
+@code{vm-reply-include-text}, @code{vm-save-message},
+@code{vm-save-message-sans-headers}, @code{vm-send-digest},
+@code{vm-undelete-message}, and @code{vm-unread-message}.@refill
+
+@node Undoing, Grouping Messages, Message Marks, Top
+@chapter Undoing
+
+VM provides a special form of undo which allows changes to message attributes
+to be undone.
+
+@findex vm-undo
+@kindex C-x u
+@kindex C-_
+Typing @kbd{C-x u} or @key{C-_} (@code{vm-undo}) undoes the last
+attribute change.  Consecutive @code{vm-undo}'s undo further and further
+back.  Any intervening command breaks the undo chain, after which the
+undos themselves become undoable by subsequent invocations of
+@code{vm-undo}.@refill
+
+Note that expunges, saves and message edits are @emph{not} undoable.
+
+@node Grouping Messages, Reading Digests, Undoing, Top
+@chapter Grouping Messages
+
+@findex vm-group-messages
+@kindex G
+In order to make numerous related messages easier to cope with, VM
+provides the command @kbd{G} (@code{vm-group-messages}), which groups
+all messages in a folder according to some criterion.  @dfn{Grouping}
+causes messages that are related in some way to be presented
+consecutively.  The actual order of the folder is not altered;
+the messages are simply numbered and presented differently.  Grouping
+should not be confused with sorting; grouping only moves messages that
+occur later in the folder backward to ``clump'' with other related
+messages.@refill
+
+The grouping criteria currently supported are:
+@table @samp
+@item subject
+Messages with the same subject (ignoring ``Re:'' prefixes) are grouped
+together.
+@item author
+Messages with the same author are grouped together.
+@item recipient
+Message with the same recipients are grouped together.
+@item date-sent
+Messages sent on the same day are grouped together.
+@item physical-order
+Message presentation reverts to physical message order of the folder (the
+default).
+@end table
+
+@vindex vm-group-by
+If the variable @code{vm-group-by} has a non-@code{nil} value it
+specifies the default grouping that will be used for all folders.  So if
+you like having your mail presented to you grouped by subject, then put
+@code{(setq vm-group-by "subject")} in your @file{.vm} or @file{.emacs}
+file to get this behavior.@refill
+
+@node Reading Digests, Summaries, Grouping Messages, Top
+@chapter Reading Digests
+
+A @dfn{digest} is one or more mail messages encapsulated in a single message.
+
+VM supports digests by providing a command to ``burst'' them into their
+individual messages.  These messages can then be handled like any other
+messages under VM.
+
+@findex vm-burst-digest
+@kindex *
+The command @kbd{*} (@code{vm-burst-digest}) bursts a digest into its
+individual messages and appends them to the current folder.  These
+messages are then assimilated into the current folder using the default
+grouping.  @xref{Grouping Messages}.  The original digest message is not
+altered, and the messages extracted from it are not part of the on-disk copy
+of the folder until a save is done.@refill
+
+If you give a prefix argument to @code{vm-burst-digest}, it will attempt
+to cope with non-RFC 934 compliant digests.  If @code{vm-burst-digest}
+seems to be breaking digests at inappropriate places, most likely the
+digest is not compliant with the standard.  In this case try using the
+prefix arg.
+
+@node Summaries, Miscellaneous, Reading Digests, Top
+@chapter Summaries
+
+@findex vm-summarize
+@vindex vm-auto-center-summary
+@kindex h
+Typing @kbd{h} (@code{vm-summarize}) causes VM to display a summary of
+contents of the current folder.  The information in the summary is
+automatically updated as changes are made to the current folder.  An
+arrow @samp{->} appears to the left of the line summarizing the current
+message.  The variable @code{vm-auto-center-summary} controls whether VM
+will keep the summary arrow vertically centered within the summary
+window.  A value of @code{t} causes VM to always keep the arrow
+centered.  A value of @code{nil} (the default) means VM will never
+bother centering the arrow.  A value that is not @code{nil} and not
+@code{t} causes VM to center the arrow only if the summary window is not
+the only existing window.@refill
+
+@vindex vm-summary-format
+The variable @code{vm-summary-format} controls the format of each
+message's summary.  Its value should be a string.  This string should
+contain printf-like ``%'' conversion specifiers which substitute
+information about the message into the final summary.
+
+Recognized specifiers are:
+@display
+   a - attribute indicators (always four characters wide)
+       The first char is  `D', `N', `U' or ` ' for deleted, new, unread
+       and read messages respectively.
+       The second char is `F', `W' or ` ' for filed (saved) or written
+       messages.
+       The third char is `R', `Z' or ` ' for messages replied to,
+       and forwarded messages.
+       The fourth char is `E' if the message has been edited,
+       ` ' otherwise.
+   A - longer version of attributes indicators (six characters wide)
+       The first char is  `D', `N', `U' or ` ' for deleted, new, unread
+       and read messages respectively.
+       The second is `r' or ` ', for message replied to.
+       The third is `z' or ` ', for messages forwarded.
+       The fourth is `f' or ` ', for messages filed.
+       The fifth is `w' or ` ', for messages written.
+       The sixth is `e' or ` ', for messages that have been edited.
+   c - number of characters in message (ignoring headers)
+   d - numeric day of month message sent
+   f - author's address
+   F - author's full name (same as f if full name not found)
+   h - hour message sent
+   i - message ID
+   l - number of lines in message (ignoring headers)
+   m - month message sent
+   M - numeric month message sent (January = 1)
+   n - message number
+   s - message subject
+   t - addresses of the recipients of the message, in a comma-separated list
+   T - full names of the recipients of the message, in a comma-separated list
+       If a full name cannot be found, the corresponding address is used
+       instead.
+   w - day of the week message sent
+   y - year message sent
+   z - timezone of date when the message was sent
+   * - `*' if the current message is marked, ` ' otherwise
+@end display
+
+Use ``%%'' to get a single ``%''.
+
+A numeric field width may be specified between the ``%'' and the
+specifier; this causes right justification of the substituted string.  A
+negative field width causes left justification.  The field width may be
+followed by a ``.'' and a number specifying the maximum allowed length
+of the substituted string.  If the string is longer than this value, it
+is truncated.
+
+The summary format need not be one line per message but it must end with
+a newline, otherwise the message pointer will not be displayed correctly
+in the summary window.
+
+You can have a summary generated automatically at startup,
+@pxref{Starting Up}.@refill
+
+@vindex vm-follow-summary-cursor
+All VM commands are available in the summary buffer just as they are in
+the folder buffer itself.  If you set @code{vm-follow-summary-cursor}
+non-@code{nil}, VM will select the message under the cursor in the
+summary window before executing commands that operate on the current
+message.  Note that this occurs @emph{only} when executing a command
+from the summary buffer window.@refill
+
+@node Miscellaneous,, Summaries, Top
+@chapter Miscellaneous
+
+Here are some VM customization variables that don't really fit into the
+other chapters.
+
+@table @code
+@vindex vm-confirm-quit
+@item vm-confirm-quit
+A value of @code{t} causes VM to always ask for confirmation before
+ending a VM visit of a folder.  A @code{nil} value means VM will ask
+only when messages will be lost unwittingly by quitting, i.e. not
+removed by intentional delete and expunge.  A value that is neither
+@code{nil} nor @code{t} causes VM to ask only when there are unsaved
+changes to message attributes or message will be lost.
+@vindex vm-berkeley-mail-compatibility
+@item vm-berkeley-mail-compatibility
+A non-@code{nil} value means to read and write BSD @i{Mail(1)} style Status:
+headers.  This makes sense if you plan to use VM to read mail archives
+created by @i{Mail}.
+@vindex vm-gargle-uucp
+@item vm-gargle-uucp
+A non-@code{nil} value means to use a crufty regular expression that
+does surprisingly well at beautifying UUCP addresses that are substituted
+for %f and %t as part of summary and attribution formats.
+@vindex vm-mode-hooks
+@item vm-mode-hooks
+A non-@code{nil} value should be a list of hook functions to run when a
+buffer enters vm-mode.  These hook functions should generally be used to
+set key bindings and local variables.  Mucking about in the folder
+buffer is certainly possible, but it is not encouraged.
+@vindex vm-delete-empty-folders
+@item vm-delete-empty-folders
+A non-@code{nil} value for this variable causes VM to remove empty (zero
+length) folder files after saving them.
+@vindex vm-mutable-windows
+@item vm-mutable-windows
+This variable's value controls VM's window usage.  A value of @code{t} gives VM
+free run of the Emacs display; it will commandeer the entire frame for
+its purposes.  A value of @code{nil} restricts VM's window usage to the window
+from which it was invoked.  VM will not create, delete, or use any other
+windows, nor will it resize its own window.  A value that is neither @code{t}
+nor @code{nil} allows VM to use other windows, but it will not create new ones,
+or resize or delete the current ones.@refill
+@vindex mail-yank-hooks
+@item mail-yank-hooks
+Value should be a list of functions to be called after a message is
+yanked into a @samp{*mail*} buffer via @code{vm-yank-message}.  When
+each hook function is called, point will be at the beginning of the
+yanked text and mark at the end.
+
+This is not a VM specific variable, but rather an external variable that
+VM honors so that citation packages such as @i{SUPERCITE} can be
+used with VM.
+@end table
+
+@node Key Index, Command Index, Top, Top
+@unnumbered Key Index
+@printindex ky
+
+@node Command Index, Variable Index, Key Index, Top
+@unnumbered Command Index
+@printindex fn
+
+@node Variable Index, , Command Index, Top
+@unnumbered Variable Index
+@printindex vr
+
+@summarycontents
+@contents
+@bye