Commits

Anonymous committed 0e5636f

vm 6.75.

  • Participants
  • Parent commits e9375aa

Comments (0)

Files changed (11)

+2000-08-25  Andreas Jaeger  <aj@suse.de>
+
+	* Synch with VM-6.75.
+
 2000-08-22  Steve Youngs  <youngs@xemacs.org>
 
 	* Makefile: Remove target 'clean' because it's covered in XEmacs.rules.
 1999-12-05  Andreas Jaeger  <aj@suse.de>
 
 	* Makefile (clean): New target - cleans also vm-autoload.
-	Patch by Jan Vroonhof <vroonhof@math.ethz.ch>. 
+	Patch by Jan Vroonhof <vroonhof@math.ethz.ch>.
 
 1999-05-13  SL Baur  <steve@gneiss.etl.go.jp>
 
 	loaddefs.el.
 
 	* Makefile: Created.
-
 How to setup VM:
 
-0) Look at the Makefile and change the values of EMACS_VERSION,
-   EMACS, INFODIR, LISPDIR, and PIXMAPDIR.  If they are not right for your
-   system, change them.
+0) Look at the Makefile and change the values of EMACS, INFODIR,
+   LISPDIR, and PIXMAPDIR.  If they are not right for your system,
+   change them.
 
 1) Do one of these:
      `make'.
 		   (throw 'return-value 'none))
 		  ((or vm-mime-ignore-mime-version (string= version "1.0")) t)
 		  (t (vm-mime-error "Unsupported MIME version: %s" version)))
+	    ;; deal with known losers
+	    ;; Content-Type: text
+	    (cond ((and type (string-match "^text$" (car type)))
+		   (setq type '("text/plain" "charset=us-ascii")
+			 qtype '("text/plain" "charset=us-ascii"))))
 	    (cond ((and m (not passing-message-only) (null type))
 		   (throw 'return-value
 			  (vector '("text/plain" "charset=us-ascii")
 			   (vm-mime-make-message-symbol m)
 			   nil ))
 		  ((null (string-match "[^/ ]+/[^/ ]+" (car type)))
-		   (vm-mime-error "Malformed MIME content type: %s" (car type)))
+		   (vm-mime-error "Malformed MIME content type: %s"
+				  (car type)))
 		  ((and (string-match "^multipart/\\|^message/" (car type))
 			(null (string-match "^\\(7bit\\|8bit\\|binary\\)$"
 					    encoding)))
 	  ((vm-mime-types-match "multipart" type) t)
 	  ((vm-mime-types-match "message/external-body" type) nil)
 	  ((vm-mime-types-match "message" type) t)
-	  ((or (vm-mime-types-match "text/plain" type)
-	       (and (vm-mime-types-match "text/enriched" type)
-		    (fboundp 'enriched-mode)))
+	  ((vm-mime-types-match "text/html" type)
+	   (fboundp 'w3-region))
+	  ((vm-mime-types-match "text" type)
 	   (let ((charset (or (vm-mime-get-parameter layout "charset")
 			      "us-ascii")))
 	     (vm-mime-charset-internally-displayable-p charset)))
-	  ((vm-mime-types-match "text/html" type)
-	   (fboundp 'w3-region))
 	  (t nil))))
 
 (defun vm-mime-can-convert (type)
 	nil ))))
 
 (defun vm-mime-find-external-viewer (type)
-  (let ((e-alist vm-mime-external-content-types-alist)
-	(matched nil))
-    (while (and e-alist (not matched))
-      (if (and (vm-mime-types-match (car (car e-alist)) type)
-	       (cdr (car e-alist)))
-	  (setq matched (cdr (car e-alist)))
-	(setq e-alist (cdr e-alist))))
-    matched ))
+  (catch 'done
+    (let ((list vm-mime-external-content-type-exceptions)
+	  (matched nil))
+      (while list
+	(if (vm-mime-types-match (car list) type)
+	    (throw 'done nil)
+	  (setq list (cdr list))))
+      (setq list vm-mime-external-content-types-alist)
+      (while (and list (not matched))
+	(if (and (vm-mime-types-match (car (car list)) type)
+		 (cdr (car list)))
+	    (setq matched (cdr (car list)))
+	  (setq list (cdr list))))
+      matched )))
 (fset 'vm-mime-can-display-external 'vm-mime-find-external-viewer)
 
 (defun vm-mime-delete-button-maybe (extent)
 	      (delete-region start end)
 	      (save-excursion
 		(vm-select-folder-buffer)
-		(setq vm-folder-garbage-alist
+		(setq vm-message-garbage-alist
 		      (cons (cons tempfile 'delete-file)
 			    vm-folder-garbage-alist))))))
 
       (message "Launching %s... done" (mapconcat 'identity
 						 program-list
 						 " "))
-      (save-excursion
-	(vm-select-folder-buffer)
-	(setq vm-message-garbage-alist
-	      (cons (cons process 'delete-process)
-		    vm-message-garbage-alist)))
+      (if vm-mime-delete-viewer-processes
+	  (save-excursion
+	    (vm-select-folder-buffer)
+	    (setq vm-message-garbage-alist
+		  (cons (cons process 'delete-process)
+			vm-message-garbage-alist))))
       (vm-set-mm-layout-cache
        layout
        (nconc (vm-mm-layout-cache layout)
     (vm-decode-mime-layout button t)))
 
 (defun vm-mime-display-body-using-external-viewer (button)
-  (let ((layout (vm-extent-property button 'vm-mime-layout)))
+  (let ((layout (vm-extent-property button 'vm-mime-layout))
+	(vm-mime-external-content-type-exceptions nil))
     (goto-char (vm-extent-start-position button))
     (if (not (vm-mime-find-external-viewer (car (vm-mm-layout-type layout))))
 	(error "No viewer defined for type %s"
 	     (if (null e)
 		 (error "No MIME button found at point.")
 	       (setq layout (extent-property e 'vm-mime-layout))
-	       (if (= (vm-mm-layout-header-start layout)
-		      (vm-headers-of (vm-mm-layout-message layout)))
+	       (if (eq layout (vm-mime-layout-of
+			       (vm-mm-layout-message layout)))
 		   (error "Can't delete only MIME object; use vm-delete-message instead."))
 	       (if vm-mime-confirm-delete
 		   (or (y-or-n-p (vm-mime-sprintf "Delete %t? " layout))
 
 (defun vm-mime-discard-layout-contents (layout &optional file)
   (save-excursion
-    (set-buffer (vm-buffer-of (vm-real-message-of
-			       (vm-mm-layout-message layout))))
     (let ((inhibit-read-only t)
 	  (buffer-read-only nil)
+	  (m (vm-mm-layout-message layout))
 	  newid new-layout)
+      (set-buffer (vm-buffer-of m))
       (vm-save-restriction
 	(widen)
 	(goto-char (vm-mm-layout-header-start layout))
 	       (insert "[Deleted " (vm-mime-sprintf "%d]\n" layout))
 	       (insert "[Saved to  " file " on " (system-name) "]\n")))
 	(delete-region (point) (vm-mm-layout-body-end layout))
-	(vm-set-edited-flag-of (vm-mm-layout-message layout) t)
+	(vm-set-edited-flag-of m t)
+	(vm-set-byte-count-of m nil)
+	(vm-set-line-count-of m nil)
+	;; For the dreaded From_-with-Content-Length folders recompute
+	;; the message length and make a new Content-Length header.
+	(if (eq (vm-message-type-of m) 'From_-with-Content-Length)
+	    (let (length)
+	      (goto-char (vm-headers-of m))
+	      ;; first delete all copies of Content-Length
+	      (while (and (re-search-forward vm-content-length-search-regexp
+					     (vm-text-of m) t)
+			  (null (match-beginning 1))
+			  (progn (goto-char (match-beginning 0))
+				 (vm-match-header vm-content-length-header)))
+		(delete-region (vm-matched-header-start)
+			       (vm-matched-header-end)))
+	      ;; now compute the message body length
+	      (setq length (- (vm-end-of m) (vm-text-of m)))
+	      ;; insert the header
+	      (goto-char (vm-headers-of m))
+	      (insert vm-content-length-header " "
+		      (int-to-string length) "\n")))
+	;; make sure we get the summary updated.  The 'edited'
+	;; flag might already be set and therefore trying to set
+	;; it again might not have triggered an update.  We need
+	;; the update because the message size has changed.
+	(vm-mark-for-summary-update (vm-mm-layout-message layout))
 	(cond (file
 	       (save-restriction
 		 (narrow-to-region (vm-mm-layout-header-start layout)
 
    ;; at this point the current buffer is the presentation buffer
    ;; if we're using one for this message.
+   (vm-unbury-buffer (current-buffer))
 
-   (vm-unbury-buffer (current-buffer))
-   (vm-energize-urls-in-message-region)
-   (vm-highlight-headers-maybe)
-   (vm-energize-headers-and-xfaces)
+   (if (and vm-display-using-mime
+	    vm-auto-decode-mime-messages
+	    vm-mime-decode-for-preview
+	    (if vm-mail-buffer
+		(not (vm-buffer-variable-value vm-mail-buffer
+					       'vm-mime-decoded))
+	      (not vm-mime-decoded))
+	    (not (vm-mime-plain-message-p (car vm-message-pointer))))
+       (progn
+	 (condition-case data
+	     (vm-decode-mime-message)
+	   (vm-mime-error (vm-set-mime-layout-of (car vm-message-pointer)
+						 (car (cdr data)))
+			  (message "%s" (car (cdr data)))))
+	 (vm-narrow-for-preview))
+     (vm-energize-urls-in-message-region)
+     (vm-highlight-headers-maybe)
+     (vm-energize-headers-and-xfaces))
 
    (if vm-honor-page-delimiters
        (vm-narrow-to-page))
 	  ;; don't let it do CR -> LF translation.
 	  (setq selective-display nil)
 	  (insert string)
-	  (call-process-region (point-min) (point-max)
-			       "/bin/sh" t buffer nil
-			       shell-command-switch vm-pop-md5-program)
+	  (if (fboundp 'md5)
+	      (progn
+		(goto-char (point-min))
+		(insert (md5 buffer (point-min) (point-max)))
+		(delete-region (point) (point-max)))
+	    (call-process-region (point-min) (point-max)
+				 (or shell-file-name "/bin/sh") t buffer nil
+				 shell-command-switch vm-pop-md5-program))
 	  ;; MD5 digest is 32 chars long
 	  ;; mddriver adds a newline to make neaten output for tty
 	  ;; viewing, make sure we leave it behind.
     (if (and vm-confirm-mail-send
 	     (not (y-or-n-p "Send the message? ")))
 	(error "Message not sent.")))
+  (save-excursion (run-hooks 'vm-mail-send-hook))
   (vm-mail-mode-insert-date-maybe)
   (vm-mail-mode-insert-message-id-maybe)
   ;; send mail using MIME if user requests it and if the buffer
 	  (let ((date1 (get (car list1) 'oldest-date))
 		(date2 (get (car list2) 'oldest-date)))
 	    (cond ((string-lessp date1 date2) t)
-		  ((string-equal date1 date2) '=)
+		  ((string-equal date1 date2)
+		   (string-lessp (car list1) (car list2)))
 		  (t nil)))
 	(while (and list1 list2)
 	  (cond ((string-lessp (car list1) (car list2)) (throw 'done t))

File vm-startup.el

 (defun vm-mode (&optional read-only)
   "Major mode for reading mail.
 
-This is VM 6.72.
+This is VM 6.75.
 
 Commands:
    h - summarize folder contents
    vm-imap-expunge-after-retrieving
    vm-imap-max-message-size
    vm-imap-messages-per-session
+   vm-imap-session-preauth-hook
    vm-index-file-suffix
    vm-in-reply-to-format
    vm-included-text-attribution-format
    vm-mail-header-insert-date
    vm-mail-header-insert-message-id
    vm-mail-mode-hook
+   vm-mail-send-hook
    vm-make-crash-box-name
    vm-make-spool-file-name
    vm-mime-7bit-composition-charset
    vm-mime-base64-decoder-switches
    vm-mime-base64-encoder-program
    vm-mime-base64-encoder-switches
+   vm-mime-button-face
    vm-mime-button-format-alist
-   vm-mime-button-face
    vm-mime-charset-font-alist
+   vm-mime-confirm-delete
+   vm-mime-decode-for-preview
+   vm-mime-default-face-charset-exceptions
    vm-mime-default-face-charsets
+   vm-mime-delete-after-saving
+   vm-mime-delete-viewer-processes
    vm-mime-digest-discard-header-regexp
    vm-mime-digest-headers
    vm-mime-display-function
    vm-mime-internal-content-type-exceptions
    vm-mime-internal-content-types
    vm-mime-max-message-size
+   vm-mime-qp-decoder-program
+   vm-mime-qp-decoder-switches
+   vm-mime-qp-encoder-program
+   vm-mime-qp-encoder-switches
    vm-mime-type-converter-alist
+   vm-mime-uuencode-decoder-program
+   vm-mime-uuencode-decoder-switches
    vm-mode-hook
    vm-mosaic-program
    vm-mosaic-program-switches
    vm-mutable-windows
    vm-netscape-program
    vm-netscape-program-switches
+   vm-paragraph-fill-column
    vm-pop-auto-expunge-alist
    vm-pop-bytes-per-session
    vm-pop-expunge-after-retrieving
    vm-skip-read-messages
    vm-spool-file-suffixes
    vm-spool-files
+   vm-spooled-mail-waiting-hook
    vm-startup-with-summary
    vm-strip-reply-headers
+   vm-subject-significant-chars
    vm-summary-arrow
    vm-summary-format
    vm-summary-highlight-face
       'vm-imap-expunge-after-retrieving
       'vm-imap-max-message-size
       'vm-imap-messages-per-session
+      'vm-imap-session-preauth-hook
       'vm-in-reply-to-format
       'vm-included-text-attribution-format
       'vm-included-text-discard-header-regexp
       'vm-make-spool-file-name
       'vm-mail-check-interval
       'vm-mail-mode-hook
+      'vm-mail-send-hook
       'vm-mime-7bit-composition-charset
       'vm-mime-8bit-composition-charset
       'vm-mime-8bit-text-transfer-encoding
       'vm-mime-base64-decoder-switches
       'vm-mime-base64-encoder-program
       'vm-mime-base64-encoder-switches
+      'vm-mime-button-face
       'vm-mime-button-format-alist
-      'vm-mime-button-face
       'vm-mime-charset-font-alist
+      'vm-mime-confirm-delete
+      'vm-mime-decode-for-preview
+      'vm-mime-default-face-charset-exceptions
       'vm-mime-default-face-charsets
+      'vm-mime-delete-after-saving
+      'vm-mime-delete-viewer-processes
       'vm-mime-digest-discard-header-regexp
       'vm-mime-digest-headers
       'vm-mime-display-function
       'vm-mime-internal-content-type-exceptions
       'vm-mime-internal-content-types
       'vm-mime-max-message-size
+      'vm-mime-qp-decoder-program
+      'vm-mime-qp-decoder-switches
+      'vm-mime-qp-encoder-program
+      'vm-mime-qp-encoder-switches
       'vm-mime-type-converter-alist
+      'vm-mime-uuencode-decoder-program
+      'vm-mime-uuencode-decoder-switches
       'vm-mode-hook
       'vm-mode-hooks
       'vm-mosaic-program
       'vm-mutable-windows
       'vm-netscape-program
       'vm-netscape-program-switches
+      'vm-paragraph-fill-column
 ;; POP passwords might be listed here
 ;;      'vm-pop-auto-expunge-alist
       'vm-pop-bytes-per-session
 ;; don't send vm-spool-files by default, might contain passwords
 ;;      'vm-spool-files
       'vm-spool-file-suffixes
+      'vm-spooled-mail-waiting-hook
       'vm-startup-with-summary
       'vm-strip-reply-headers
+      'vm-subject-significant-chars
       'vm-summary-format
       'vm-summary-highlight-face
       'vm-summary-mode-hook
 command (normally bound to `D') manually to decode and display
 MIME objects.")
 
+(defvar vm-mime-decode-for-preview t
+  "*Non-nil value causes MIME deocding to happen when a message
+is previewed, instead of when it is displayed in full.
+`vm-auto-decode-mime-messages' must also be set non-nil for
+this variable to have effect.")
+
 (defvar vm-auto-displayed-mime-content-types '("text" "multipart")
   "*List of MIME content types that should be displayed immediately
 after decoding.  Other types will be displayed as a button that
 
 No multipart message will ever be sent to an external viewer.")
 
+(defvar vm-mime-external-content-type-exceptions nil
+  "*List of MIME content types that should not be displayed externally
+without a manual request from the user.  This is an exception list
+for the types specified in `vm-mime-external-content-types-alist';
+types listed there will not be displayed using the specified viewer
+unless you explicitly request it by menu or `$ e' from the keyboard.
+
+The value should be a list of strings.  Example:
+
+ (setq vm-mime-external-content-type-exceptions '(\"text/html\"))
+
+If a top-level type is listed without a subtype, all subtypes of
+that type are assumed to be included.")
+
+(defvar vm-mime-delete-viewer-processes t
+  "*Non-nil value causes VM to kill external MIME viewer processes
+when you switch to a different message or quit the current message's
+folder.")
+
 (defvar vm-mime-type-converter-alist nil
   "*Alist of MIME types and programs that can convert between them.
 If VM cannot display a content type, it will scan this list to
 
 (defvar vm-select-new-message-hook nil
   "*List of hook functions called every time a message with the 'new'
-attribute is made to be the current message.  When the hooks are run the
+attribute is made to be the current message.  When the hooks are run, the
 current buffer will be the folder containing the message and the
 start and end of the message will be bracketed by (point-min) and
 (point-max).")
 
 (defvar vm-select-unread-message-hook nil
   "*List of hook functions called every time a message with the 'unread'
-attribute is made to be the current message.  When the hooks are run the
+attribute is made to be the current message.  When the hooks are run, the
 current buffer will be the folder containing the message and the
 start and end of the message will be bracketed by (point-min) and
 (point-max).")
 
 (defvar vm-select-message-hook nil
   "*List of hook functions called every time a message
-is made to be the current message.  When the hooks are run the
+is made to be the current message.  When the hooks are run, the
 current buffer will be the folder containing the message and the
 start and end of the message will be bracketed by (point-min) and
 (point-max).")
   "*List of hook functions called once for each message gathered from
 the system mail spool, or from another folder with
 `vm-get-new-mail', or from a digest with `vm-burst-digest'.  When the
-hooks are run the current buffer will be the folder containing
+hooks are run, the current buffer will be the folder containing
 the message and the start and end of the message will be
 bracketed by (point-min) and (point-max).")
 
 messages from the system mail spool, or from another folder with
 `vm-get-new-mail', or from a digest with `vm-burst-digest'.  When the
 hooks are run, the new messages will have already been added to
-the message list but may not yet appear in the summary.  When the
-hooks are run the current buffer will be the folder containing
+the message list but may not yet appear in the summary.
+Also, the current buffer will be the folder containing
 the messages.")
 
 (defvar vm-reply-hook nil
 
 (defvar vm-presentation-mode-hook nil
   "*List of hook functions to run when a VM presentation buffer is created.
-The current buffer will be that buffer when the hooks are run.
+The current buffer will be the new presentation buffer when the hooks are run.
 Presentation buffers are used to display messages when some type of decoding
 must be done to the message to make it presentable.  E.g. MIME decoding.")
 
 This applies to any VM quit command.")
 
 (defvar vm-summary-pointer-update-hook nil
-  "*List of hook functions to run when VM summary pointer is updated.
+  "*List of hook functions to run when the VM summary pointer is updated.
 When the hooks are run, the current buffer will be the summary buffer.")
 
 (defvar vm-display-buffer-hook nil
   "*List of hook functions that are run every time VM wants to
-display a buffer.  When the hooks are run the current buffer will
+display a buffer.  When the hooks are run, the current buffer will
 be the buffer that VM wants to display.  The hooks are expected
 to select a window and VM will display the buffer in that
 window.
 
 (defvar vm-undisplay-buffer-hook nil
   "*List of hook functions that are run every time VM wants to
-remove a buffer from the display.  When the hooks are run the
+remove a buffer from the display.  When the hooks are run, the
 current buffer will be the buffer that VM wants to disappear.
 The hooks are expected to do the work of removing the buffer from
 the display.  The hook functions should not kill the buffer.
 this process.  If the hook cannot accomplish this, it should
 return nil.  If all the hooks return nil, VM will signal an error.")
 
+(defvar vm-mail-send-hook nil
+  "*List of hook functions to call just before sending a message.
+The hooks are run after confirming that you want to send the
+message (see `vm-confirm-mail-send') but before MIME encoding and
+FCC processing.")
+
 (defvar mail-yank-hooks nil
-  "Hooks called after a message is yanked into a mail composition.
-
-(This hook is deprecated, you should use mail-citation-hook instead.)
-
-Value is a list of functions to be run.
+  "Hooks called after a message is yanked into a mail composition buffer.
+
+   (This hook is deprecated, you should use mail-citation-hook instead.)
+
+The value of this hook is a list of functions to be run.
 Each hook function can find the newly yanked message between point and mark.
 Each hook function should return with point and mark around the yanked message.
 
     ("vm-clear-all-marks")
     ("vm-continue-composing-message")
     ("vm-create-virtual-folder")
+    ("vm-create-virtual-folder-same-author")
+    ("vm-create-virtual-folder-same-subject")
     ("vm-decode-mime-message")
     ("vm-delete-message")
     ("vm-delete-message-backward")
     ("vm-delete-message-labels")
+    ("vm-delete-mime-object")
     ("vm-discard-cached-data")
     ("vm-edit-message")
     ("vm-edit-message-abort")
     ("vm-end-of-message")
     ("vm-expose-hidden-headers")
     ("vm-expunge-folder")
+    ("vm-expunge-imap-messages")
+    ("vm-expunge-pop-messages")
     ("vm-followup")
     ("vm-followup-include-text")
     ("vm-followup-include-text-other-frame")
     ("vm-mark-all-messages")
     ("vm-mark-help")
     ("vm-mark-matching-messages")
+    ("vm-mark-matching-messages-with-virtual-folder")
     ("vm-mark-message")
     ("vm-mark-messages-same-author")
     ("vm-mark-messages-same-subject")
     ("vm-mark-summary-region")
     ("vm-mark-thread-subtree")
+    ("vm-mime-attach-buffer")
+    ("vm-mime-attach-file")
+    ("vm-mime-attach-message")
+    ("vm-mime-attach-mime-file")
     ("vm-mode")
     ("vm-move-message-backward")
     ("vm-move-message-backward-physically")
     ("vm-submit-bug-report")
     ("vm-summarize")
     ("vm-summarize-other-frame")
+    ("vm-toggle-all-marks")
     ("vm-toggle-read-only")
     ("vm-toggle-threads-display")
     ("vm-undelete-message")
     ("vm-undo")
     ("vm-unmark-matching-messages")
+    ("vm-unmark-matching-messages-with-virtual-folder")
     ("vm-unmark-message")
     ("vm-unmark-messages-same-author")
     ("vm-unmark-messages-same-subject")

File vm-version.el

 
 (provide 'vm-version)
 
-(defconst vm-version "6.72"
+(defconst vm-version "6.75"
   "Version number of VM.")
 
 (defun vm-version ()
 
 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.@refill
+chapters.
 
 @menu
 * Introduction::	Overview of the VM interface.
 * Toolbar::		How to configure VM's toolbar.
 * Menus::		How to configure VM's menus.
 * Faces::		How to configure VM's use of faces.
-* Using the Mouse::	Understanding VM mouse interface.
+* Using the Mouse::	Understanding the VM mouse interface.
 * Hooks::		How you can make VM run your code at certain times.
 * License::		Copying and distribution terms for VM.
 
 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.@refill
+various criteria.
 
 To invoke VM, 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
+A file visited for reading by VM is called the @dfn{current folder}.
 
 @findex vm-scroll-forward
 @findex vm-scroll-backward
 @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
+showing you part of a 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
+the next message.  @xref{Paging}.
 
 If you do not want to read a message that's being previewed, type
 @kbd{n} and VM will move to the next message (if there is one).
-@xref{Selecting Messages}.@refill
+@xref{Selecting Messages}.
 
 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
+@xref{Saving Messages}.
 
 Messages are deleted by typing @kbd{d} (@code{vm-delete-message}) while
 previewing or reading them.  The message is not removed right away; VM
 @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
+in the on-disk version of the folder until the folder is saved.
 
 Typing @kbd{h} (@code{vm-summarize}) causes VM to display a window
 containing a summary of the contents of the current folder.  The summary is
 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
+format is user configurable, @pxref{Summaries}.
 
 @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}) saves the folder.  Note that deleted message are
+(@code{vm-save-folder}) saves the folder.  Note that deleted messages are
 not expunged automatically when you save a folder; this is a change from
 version 4 of VM.  The next time you visit the folder any deleted
-messages will still be flagged for deleted.@refill
+messages will still be flagged for deleted.
 
 @vindex vm-delete-empty-folders
 If the folder is empty and the variable @code{vm-delete-empty-folders}
-is non-@code{nil}, VM will remove the zero length folder after saving it.@refill
+is non-@code{nil}, VM will remove the zero length folder after saving it.
 
 @findex vm-quit
 @findex vm-quit-no-change
 folder before quitting.  Also, any messages flagged new are changed to
 be flagged as old and unread, before saving.  The @kbd{x} command quits
 a folder without changing the status of new messages, saving or
-otherwise modifying the current folder.@refill
+otherwise modifying the current folder.
 
 @vindex vm-confirm-quit
 If the variable @code{vm-confirm-quit} is set to @code{t}
 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 when messages
-will be lost.@refill
+will be lost.
 
 @findex vm-quit-just-bury
 You do not have to quit a folder to continue using Emacs for other
 purposes.  (@code{vm-quit-just-bury}) buries the buffers associated with
 the current folder deep in Emacs' stack of buffers, but otherwise leaves
 the folder visited so that you can resume reading messages quickly.  You
-can locate the folder's buffers again by using (@code{list-buffers}),
-which is normally bound to @kbd{C-x C-b}.@refill
+can locate the folder's buffers again by using @code{list-buffers},
+which is normally bound to @kbd{C-x C-b}.
 
 @findex vm-quit-just-iconify
 Another command you can use if you are using a window system like X
-Windows is (@code{vm-quit-just-iconify}).  This command buries the
-folder's buffers like (@code{vm-quit-just-bury}) and also iconifies the
-current frame.@refill
+Windows is @code{vm-quit-just-iconify}.  This command buries the
+folder's buffers like @code{vm-quit-just-bury} and also iconifies the
+current frame.
 
 @findex vm-get-new-mail
 @kindex g
 At any time while reading mail in any folder you can type @kbd{g}
 (@code{vm-get-new-mail}) to check to see if new mail for that folder has
 arrived.  If new mail has arrived it will be moved from the spool file
-or spool files assocaited with the current folder and merged into the
+or spool files associated with the current folder and merged into the
 folder.  If you are not in the middle of another message, VM will also
-move to the first new or unread message.@refill
+move to the first new or unread 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 no messages are
-deleted from it as they would be for a spool file.@refill
+deleted from it as they would be for a spool file.
 
 By default your primary inbox has your system mailbox associated with
 it, e.g. @file{/var/spool/mail/kyle}, and so typing @kbd{g} will retrieve
 file}, a file that the mail transport system delivers messages into.
 You can associate other spool files with your primary inbox and spool
 files with other folders by setting the variable
-(@code{vm-spool-files}).  @xref{Spool Files}.@refill
+@code{vm-spool-files}.  @xref{Spool Files}.
 
 @node Starting Up, Selecting Messages, Introduction, Top
 @chapter Starting Up
 @vindex vm-init-file
 @kindex L
 The first time VM is started in an Emacs session, it attempts to load
-the file specified by the variable (@code{vm-init-file}), normally
+the file specified by the variable @code{vm-init-file}, normally
 @file{~/.vm}.  If present this file should contain Lisp code, much like
 the @file{.emacs} file.  Since VM has well over one hundred
 configuration variables, use of the @file{~/.vm} can considerably reduce
 clutter in the @file{.emacs} file.  You can reload this file
-by typing @kbd{L} (@code{vm-load-init-file}) from within VM.@refill
+by typing @kbd{L} (@code{vm-load-init-file}) from within VM.
 
 @findex vm
 @vindex vm-primary-inbox
 @vindex vm-auto-get-new-mail
 @kbd{M-x vm} causes VM to visit a file known as your @dfn{primary
-inbox}.  If the variable (@code{vm-auto-get-new-mail}) is set
+inbox}.  If the variable @code{vm-auto-get-new-mail} is set
 non-@code{nil}, VM will gather any mail present in your system mailbox
 and integrate it into your primary inbox.  The default name of your
 primary inbox is @file{~/INBOX}, but VM will use whatever file is named
-by the variable @code{vm-primary-inbox}.@refill
+by the variable @code{vm-primary-inbox}.
 
 @vindex vm-crash-box
 VM transfers the mail from the system mailbox to the primary inbox via a
 crash box.  If the system or Emacs should crash in the midst of this
 activity, 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
+but no mail will be lost.
 
 If the file named by @code{vm-crash-box} already exists when VM is
 started up, VM will merge that file with the primary inbox before
-retrieving any new messages from the system mailbox.@refill
+retrieving any new messages from the system mailbox.
 
 @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
+prompted for in the minibuffer.
 
 Once VM has read the folder, any spool files associated with the folder
 are checked for new messages if @code{vm-auto-get-new-mail} is
 unread message will be selected, if any.  If there is no such message,
 VM will select whatever the selected message was when this folder was last
 saved.  If this folder has never been visited and saved by VM, then the
-first message in the folder is selected.@refill
+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
-on it This command is suitable for use in Lisp programs, and for
+on 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} skips
 some of VM's startup procedures (e.g. starting up a summary) to make
-non-interactive use easier.@refill
+non-interactive use easier.
 
 @vindex vm-startup-with-summary
 The variable @code{vm-startup-with-summary} controls whether VM
 should generate a summary on if there are @var{n} or more messages in
 the folder.  A negative value @var{-n} means generate a summary only if
 there are @var{n} or fewer messages.  The default value of
-@code{vm-startup-with-summary} is @code{t}.@refill
+@code{vm-startup-with-summary} is @code{t}.
 
 @menu
 * Spool Files::  Linking folders and mailboxes.
 delivery agent, what all spool files have in common is that mail is
 delivered into them by one or more entities apart from VM and that all
 access to spool files must therefore be accompanied by the use of
-some file locking protocol.@refill
+some file locking protocol.
 
 @vindex vm-movemail-program
 VM leaves the task of accessing spool files to @file{movemail}, a
 program distributed with Emacs that is written for this purpose.  The
 variable @code{vm-movemail-program} specifies the name of the movemail program
-and defaults to @samp{"movemail"}.@refill
+and defaults to @samp{"movemail"}.
 
 Every folder, including the primary inbox, can have one or more spool
 files associated with it.  You make these associations known to VM by
-setting the variable @code{vm-spool-files}.@refill
+setting the variable @code{vm-spool-files}.
 
 If you only want to associate spool files with your primary inbox, you
 can set @code{vm-spool-files} to a list of strings.  By default, the location
 of your system mailbox (the spool file that is associated with your
 primary inbox) is determined heuristically based on what type of system
 you're using.  VM can be told explicitly where the system mailbox is by
-setting @code{vm-spool-files} like this:@refill
+setting @code{vm-spool-files} like this:
 
 @example
 (setq vm-spool-files '("/var/spool/mail/kyle" "~/Mailbox"))
 @end example
 
 With this setting, VM will retrieve mail for the primary inbox from
-first @file{/var/spool/mail/kyle} and then @file{~/Mailbox}.@refill
+first @file{/var/spool/mail/kyle} and then @file{~/Mailbox}.
 
 If the value of @code{vm-spool-files} is @code{nil}, a default value for
 @code{vm-spool-files} will be inherited from the shell environmental
 variables MAILPATH or MAIL if either of these variables are defined.
 This inheritance happens before your init file is loaded, so setting
 @code{vm-spool-files} in your init file will override any environmental
-variables.@refill
+variables.
 
 If you want to associate spool files with folders other than or in
 addition to the primary inbox, the value of @code{vm-spool-files} must be a
 file and a crash box.  When retrieving mail for a particular folder, VM
 will scan @code{vm-spool-files} for folder names that match the current
 folder's name.  The spool file and crash box found in any matching
-entries will be used for gather mail for that folder.@refill
+entries will be used to gather mail for that folder.
 
 For example, you can set @code{vm-spool-files} like this
 
 @end example
 
 The folder @file{~/INBOX} has two spool files associated with it in this
-example, @file{/var/spool/mail/kyle} and @file{~/MaIlbox}.  Another
+example, @file{/var/spool/mail/kyle} and @file{~/Mailbox}.  Another
 folder, @file{"~/Mail/bugs"} has one folder
 @file{/var/spool/mail/answerman} associated with it.  Note that both of
 the @file{~/INBOX} entries used the same crash box.  The crash box can be
 the same if the folder name is the same.  Different folders should use
-different crashboxes.@refill
+different crashboxes.
 
 @vindex vm-crash-box-suffix
 @vindex vm-spool-file-suffixes
 An alternate way of specifying folder/spool file associations
 is to use the variables @code{vm-spool-file-suffixes} and
-@code{vm-crash-box-suffix}.@refill
+@code{vm-crash-box-suffix}.
 
 The value of @code{vm-spool-file-suffixes} should be a list of string suffixes
-to be used to create possible spool file names for folders.  Example:@refill
+to be used to create possible spool file names for folders.  Example:
 
 @example
 @group
 and @file{~/mail/beekeeping-} in addition to scanning @code{vm-spool-files}
 for matches.  The value of @code{vm-spool-files-suffixes} will not be used
 unless @code{vm-crash-box-suffix} is also defined, since a crash box is
-required for all mail retrieval from spool files.@refill
+required for all mail retrieval from spool files.
 
 The value of @code{vm-crash-box-suffix} should be a string suffix used to
 create possible crash box file names for folders.  When VM uses
 the value of @code{vm-crash-box-suffix} to the folder's file name to
 create a crash box name.  If the value of @code{vm-spool-files-suffixes}
 is @code{nil}, then the value of @code{vm-crash-box-suffix} is not used
-by VM.@refill
+by VM.
 
 @vindex vm-make-crash-box-name
 @vindex vm-make-spool-file-name
 The idea behind @code{vm-spool-file-suffixes} and
 @code{vm-crash-box-suffix} is to give you a way to have many
-folders with individual spool files associate with them, without
+folders with individual spool files associated with them, without
 having to list them all in @code{vm-spool-files}.  If you need
 even more control of spool file and crash box names, use
 @code{vm-make-spool-file-name} and @code{vm-make-crash-box-name}.
 function.  When VM visits a folder, it will call the function
 with the name of the folder as an argument, and the function
 should return the spool file name or crash box name to be used
-for that folder.@refill
+for that folder.
 
 @ifinfo
 If your spool file is on another host, VM supports accessing
-spool files on remote hosts using the POP and IMAP protocols.@refill
+spool files on remote hosts using the POP and IMAP protocols.
 @end ifinfo
 
 @menu
 @node POP Spool Files,,, Spool Files
 @section POP Spool Files
 @cindex POP
-VM supports accessing spool files on remote hosts via the Post Office
-Protocol (POP).  Instead of a spool file name in the examples above, you would
-use a string that tells VM how to access the POP mailbox.  The format of
-this string is:@refill
+VM supports accessing spool files on remote hosts via the Post
+Office Protocol (POP).  Instead of a spool file name as in the
+examples above, you would use a string that tells VM how to
+access the POP mailbox.  The format of this string is:
 
 @example
 ``@var{HOST}:@var{PORT}:@var{AUTH}:@var{USER}:@var{PASSWORD''}
 @var{HOST} is the host name of the POP server.  @var{PORT} is the
 TCP port number to connect to (should normally be 110).  @var{USER}
 is the user name sent to the server.  @var{PASSWORD} is the secret
-shared by you and the server for authentication purposes.  How is it
+shared by you and the server for authentication purposes.  How it is
 used depends on the value of the @var{AUTH} parameter.  If the
 @var{PASSWORD} is @samp{*}, VM will prompt you for the password the
 first time you try to retrieve mail from the maildrop.  If the password
 is valid, VM will not ask you for the password again during this
-Emacs session.@refill
+Emacs session.
 
 @vindex vm-pop-md5-program
 @var{AUTH} is the authentication method used to convince the server you should
 @var{PASSWORD} appended to the server timestamp will be sent to the server
 with the APOP command.  In order to use @samp{apop} you will have to
 set the value of @code{vm-pop-md5-program} appropriately to point at the
-program that will generate the MD5 digest that VM needs.@refill
+program that will generate the MD5 digest that VM needs.
 
 @vindex vm-pop-max-message-size
 By default VM will retrieve all the messages from a POP maildrop
 interactively, then VM will ask whether it should retrieve the
 large message.  If VM is retrieving messages automatically
 (e.g. @code{vm-auto-get-new-mail} is set non-@code{nil}) then VM will skip the
-large message and you can retrieve it later.@refill
+large message and you can retrieve it later.
 
 @vindex vm-pop-bytes-per-session
 @vindex vm-pop-messages-per-session
 number of bytes VM will retrieve from a POP maildrop before returning
 control to you.  By default, the value of both variables is nil, which
 tells VM to retrieve all the messages in the POP maildrop regardless
-of how many messages there are and how large the maildrop is.@refill
+of how many messages there are and how large the maildrop is.
 
 @vindex vm-pop-expunge-after-retrieving
 After VM retrieves messages from the maildrop, the default action
 their removal, set @code{vm-pop-expunge-after-retrieving} to
 @code{nil}.  Messages will not be removed from the maildrop until you
 run @code{vm-expunge-pop-messages}; only those messages that VM has
-retrieved into the current folder will be expunged.@refill
+retrieved into the current folder will be expunged.
 
 @vindex vm-pop-auto-expunge-alist
 The variable @code{vm-pop-auto-expunge-alist} gives you a way to specify
-on a per-maildrop basis which POP maildrop have message
+on a per-maildrop basis which POP maildrops have messages
 automatically removed when retrieved and which ones leave the
 messages on the POP server.  The value of
 @code{vm-pop-auto-expunge-alist} should be a list of POP mailboxes and
 values specifying whether messages should be automatically
 deleted from the mailbox after retrieval.  The format of the list
-is:@refill
+is:
 
 @example
 ((@var{MAILBOX} . @var{VAL}) (@var{MAILBOX} . @var{VAL}) ...)
 you have the POP password specified in the @code{vm-spool-files}
 entry, you do not have to specify it here as well.  Use @samp{*}
 instead; VM will still understand that this mailbox is the same as
-the one in @code{vm-spool-files} that contains the password.@refill
+the one in @code{vm-spool-files} that contains the password.
 
 @var{VAL} should be @code{nil} if retrieved messages should be left in the
 corresponding POP mailbox, @code{t} if retrieved messages should be
-removed from the mailbox immediately after retrieval.@refill
+removed from the mailbox immediately after retrieval.
 
 Here is an example:
 
 VM can also use the IMAP protocol to access a mailbox on a remote 
 host.  As with POP, instead of specifying a spool file name in
 the @code{vm-spool-files} definition, you would give a string that tells 
-VM host to access to remote maildrop.@refill
+VM how to access to remote maildrop.
 
 An IMAP maildrop specification has the following format:
 
 
 @var{MAILBOX} is the name of the mailbox on the IMAP server.  This should
 be @samp{"inbox"}, to access your default IMAP maildrop on the
-server.@refill
+server.
 
 @var{AUTH} is the authentication method used to convince the server
 you should have access to the maildrop.  Acceptable values are
 @samp{"preauth"} and @samp{"login"}.  @samp{"preauth"} causes VM to skip the
 authentication stage of the protocol with the assumption that
-the session was authenticated in some way external to VM.  The other
-value, @samp{"login"}, tells VM to use the IMAP LOGIN command for
-authentication.@refill
+the session was authenticated in some way external to VM.  The
+hook @code{vm-imap-session-preauth-hook} is run, and it is
+expected to return a process connected to an authenticated
+session. The other value, @samp{"login"}, tells VM to use the IMAP LOGIN
+command for authentication.
 
 @var{USER} is the user name sent to the server for @samp{"login"} style
-authentication.@refill
+authentication.
 
 @var{PASSWORD} is the secret shared by you and the server for
 authentication purposes.  If the @var{PASSWORD} is @samp{*}, VM
 will prompt you for the password the first time you try to
 retrieve mail from the maildrop.  If the password is valid, VM
 will not ask you for the password again during this Emacs
-session.@refill
+session.
 
 @vindex vm-imap-max-message-size
-By default VM will retrieve all the messages from a IMAP maildrop
+By default VM will retrieve all the messages from an IMAP maildrop
 before returning control of Emacs to you.  If the maildrop is
 large, the wait could be considerable.  If you set
 @code{vm-imap-max-message-size} to a positive numeric value, VM will not 
 interactively, then VM will ask whether it should retrieve the
 large message.  If VM is retrieving messages automatically
 (e.g. @code{vm-auto-get-new-mail} is set non-@code{nil}) then VM will skip the
-large message and you can retrieve it later.@refill
+large message and you can retrieve it later.
 
 @vindex vm-imap-bytes-per-session
 @vindex vm-imap-messages-per-session
 The variable @code{vm-imap-messages-per-session} controls how many messages
-VM will retrieve from a IMAP maildrop before returning control to
+VM will retrieve from an IMAP maildrop before returning control to
 you.  Similarly, the variable @code{vm-imap-bytes-per-session} limits the
-number of bytes VM will retrieve from a IMAP maildrop before returning
+number of bytes VM will retrieve from an IMAP maildrop before returning
 control to you.  By default, the value of both variables is nil, which
 tells VM to retrieve all the messages in the IMAP maildrop regardless
-of how many messages there are and how large the maildrop is.@refill
+of how many messages there are and how large the maildrop is.
 
 @vindex vm-imap-expunge-after-retrieving
 After VM retrieves messages from the maildrop, the default action
 their removal, set @code{vm-imap-expunge-after-retrieving} to
 @code{nil}.  Messages will not be removed from the maildrop until you
 run @code{vm-expunge-imap-messages}; only those messages that VM has
-retrieved into the current folder will be expunged.@refill
+retrieved into the current folder will be expunged.
 
 @vindex vm-imap-auto-expunge-alist
 The variable @code{vm-imap-auto-expunge-alist} gives you a way to specify
-on a per-maildrop basis which IMAP maildrop have message
+on a per-maildrop basis which IMAP maildrops have message
 automatically removed when retrieved and which ones leave the
 messages on the IMAP server.  The value of
 @code{vm-imap-auto-expunge-alist} should be a list of IMAP mailboxes and
 values specifying whether messages should be automatically
 deleted from the mailbox after retrieval.  The format of the list
-is:@refill
+is:
 
 @example
 ((@var{MAILBOX} . @var{VAL}) (@var{MAILBOX} . @var{VAL}) ...)
 you have the IMAP password specified in the @code{vm-spool-files}
 entry, you do not have to specify it here as well.  Use @samp{*}
 instead; VM will still understand that this mailbox is the same as
-the one in @code{vm-spool-files} that contains the password.@refill
+the one in @code{vm-spool-files} that contains the password.
 
 @var{VAL} should be @code{nil} if retrieved messages should be left in the
 corresponding IMAP mailbox, @code{t} if retrieved messages should be
-removed from the mailbox immediately after retrieval.@refill
+removed from the mailbox immediately after retrieval.
 
 Here is an example:
 
 @findex vm-get-new-mail
 Pressing @kbd{g} runs @code{vm-get-new-mail}, which will retrieve mail
 from all the spool files associated with the current folder.
-@xref{Spool Files}.@refill
+@xref{Spool Files}.
 
 @vindex vm-auto-get-new-mail
 If the value of the variable @code{vm-auto-get-new-mail} is non-@code{nil} VM
 will retrieve mail for a folder whenever the folder is visited.  If the
 value is a positive integer @var{n}, VM will also check for new mail
 every @var{n} seconds for all folders currently being visited.  If new
-mail is present, VM will retrieve it.@refill
+mail is present, VM will retrieve it.
 
 @vindex vm-mail-check-interval
 If the value of the variable @code{vm-mail-check-interval} is a
 positive integer @var{n}, VM will check for new mail every @var{n}
 seconds, but instead of retrieving mail, the word ``Mail'' will
-appear on the Emacs mode line of folders that have mail waiting.@refill
+appear on the Emacs mode line of folders that have mail waiting.
 
 @node Crash Recovery,, Getting New Mail, Starting Up
 @section Crash Recovery
 folder buffer.  These headers are saved to disk when you save
 the folder.  If Emacs crashes before the folder has been saved,
 VM may forget some attribute changes unless they were written to
-the autosave file.@refill
+the autosave file.
 
 Note that when VM retrieves mail from spool files it @emph{always}
 writes them to disk immediately and at least one copy of the message is
-one disk at all times.  So while you can lose attribute changes from
+on disk at all times.  So while you can lose attribute changes from
 crashes, you should not lose messages unless the disk itself is
-compromised.@refill
+compromised.
 
 When you visit a folder, VM checks for the existence of an
 autosave file that has been modified more recently than the
 folder file.  If such an autosave file exists, there is a good
 chance that Emacs or your operating system crashed while VM
-was visiting a folder.  VM will then write a message to echo
+was visiting a folder.  VM will then write a message to the echo
 area informing you of the existence of the autosave file and
 visit the folder in read-only mode.  Visiting the folder in
 read-only mode prevents you from modifying the folder, which
 in turn prevents Emacs from wanting to write new changes to
 the autosave file.  VM will not retrieve new mail for a folder
-that is in read-only mode.@refill
+that is in read-only mode.
 
 If you want to recover the lost changes, run @kbd{M-x recover-file} or
 use the Recover toolbar button, if you're using XEmacs.  At the
 display a detailed directory listing showing the folder file and the
 autosave file and ask if you want to recover from the autosave file.  A
 good rule of thumb is to answer ``yes'' if the autosave file is larger
-than the folder file.  If the autosave file is significantly smaller
+than the folder file.  If the autosave file is significantly smaller,
 Emacs may not have completed writing the autosave file.  Or it could be
 that the smaller autosave file reflects the results of an expunge that
 you had not yet committed to disk before the crash.  If so, answering
 ``no'' means you might have to do that expunge again, but this is better
-than not knowing whether the autosave file was truncated.@refill
+than not knowing whether the autosave file was truncated.
 
 Assuming you answered ``yes'', the folder buffer's contents will be
 replaced by the contents of the autosave file and VM will reparse the
 When you are satisfied that the recovered folder is whole and intact,
 type @kbd{S} to save it to disk.  After you do this, VM will allow you
 to use @kbd{g} to retrieve any new mail that has arrived in the spool
-files for the folder.@refill
+files for the folder.
 
 Assuming you answered ``no'' to the recovery question, you should type
 @kbd{C-x C-q}, which is bound to @code{vm-toggle-read-only} in VM folder
 buffers.  The folder will be taken out of read-only mode and you can
-read and retrieve your mail normally.@refill
+read and retrieve your mail normally.
 
 @node Selecting Messages, Reading Messages, Starting Up, Top
 @chapter Selecting Messages
 @vindex vm-skip-deleted-messages
 @vindex vm-skip-read-messages
 In order to read, delete, or do anything to a message, you need to
-select it.  In other words, make the message the @dfn{current message}.@refill
+select it.  In other words, make the message the @dfn{current message}.
 
 The primary commands for selecting messages in VM are @kbd{n}
 (@code{vm-next-message}) and @kbd{p}
 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.@refill
+@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
-skip variables.@refill
+skip variables.
 
 @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
+before or after the current message.
 
 A value of @code{t} causes all VM commands to consider folders circular.
 A value of @code{nil} causes all 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
+has been moved as far as 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{nil}.@refill
+@code{vm-circular-folders} is @code{nil}.
 
 @vindex vm-follow-summary-cursor
 You can also select messages by using the summary window.
 under the cursor and then delete it.  Note that this occurs @emph{only}
 when you execute a command when the cursor is in the summary buffer
 window and only if the variable @code{vm-follow-summary-cursor} is
-non-@code{nil}.@refill
+non-@code{nil}.
 
 @vindex vm-jump-to-unread-messages
 @vindex vm-jump-to-new-messages
 If you set @code{vm-jump-to-new-messages} to @code{nil}, VM will favor old,
 unread messages over new messages if the old, unread message appears
 earlier in the folder.  If you set @code{vm-jump-to-unread-messages} to
-@code{nil} also, VM will not search for new or unread messages.@refill
+@code{nil} also, VM will not search for new or unread messages.
 
 Other commands to select messages:
 
 @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.@refill
+provided, otherwise it is prompted for in the minibuffer.
 @findex vm-goto-message
 @kindex TAB
 @item TAB (@code{vm-goto-message-last-seen})
 @item N (@code{vm-next-message-no-skip})
 @itemx P (@code{vm-previous-message-no-skip})
 Go to the next (previous) message, ignoring the settings of the skip
-control variables.@refill
+control variables.
 @findex vm-next-unread-message
 @findex vm-previous-unread-message
 @kindex M-n
 @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}.@refill
+such message exists then these commands work like @kbd{n} and @kbd{p}.
 @findex vm-isearch-forward
 @findex vm-isearch-backward
 @kindex M-s
 defaults to the fixed string search.  If a prefix argument is given,
 the value of @code{vm-search-using-regexps} is temporarily reversed for
 the search.
-@xref{Incremental Search,,,emacs, the GNU Emacs Manual}.@refill
+@xref{Incremental Search,,,emacs, the GNU Emacs Manual}.
 @end table
 
 @node Reading Messages, Sending Messages, Selecting Messages, Top
 @chapter Reading Messages
 
 Once a message has been selected, VM will show it to you.  By default,
-presentation is done in two stages: @dfn{previewing} and @dfn{paging}.@refill
+presentation is done in two stages: @dfn{previewing} and @dfn{paging}.
 
 @menu
 * Previewing::	                Customizing message previews.
 @dfn{Previewing} means 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.@refill
+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
+@code{vm-preview-lines}.
 
 @vindex vm-preview-lines
 If the value of @code{vm-preview-lines} is a number, it tells VM how
 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.  If
 @code{vm-preview-lines} is @code{t}, the message body is displayed fully
-but the message is not flagged as read until you type @key{SPC}.@refill
+but the message is not flagged as read until you type @key{SPC}.
 
 @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
+the preferred presentation order of the headers they match.
 
 @vindex vm-invisible-header-regexp
 If non-@code{nil}, the variable @code{vm-invisible-header-regexp}
 @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
+displayed last.
 
 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
 default) to force VM to 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
+Marks}.
 
 @vindex vm-highlighted-header-regexp
 @vindex vm-highlighted-header-face
 @samp{"^From\\|^Subject"} causes the From and Subject headers to be
 highlighted.  Highlighted headers will be displayed using the face
 specified by @code{vm-highlighted-header-face}, which defaults to
-'bold. @refill
+'bold.
 
 @vindex vm-preview-read-messages
 By default, VM will not preview messages that are flagged as read.  To
 have VM preview all messages, set the value of
-@code{vm-preview-read-messages} to @code{t}.@refill
+@code{vm-preview-read-messages} to @code{t}.
 
 @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
+between exposing and hiding headers that would ordinarily be hidden.
 
 @node Paging, Reading MIME Messages, 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.@refill
+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.  A prefix argument @var{n} applied to these commands
+causes VM to scroll forward or backward @var{n} lines.  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
 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.@refill
+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.@refill
+unread.
+
+@vindex vm-paragraph-fill-column
+@vindex vm-fill-paragraphs-containing-long-lines
+Sometimes you will receive messages that contain lines that are
+too long to fit on your screen without wrapping.  If you set
+@code{vm-fill-paragraphs-containing-long-lines} to a positive
+numeric value @var{N}, VM will call @code{fill-paragraph} on all
+paragraphs that contain lines spanning @var{N} columns or more.
+As with other things VM does that modifies the way the
+message looks on the screen, this does not change message
+contents.  VM copies the message contents to a ``presentation''
+buffer before altering them.  The fill column that VM uses is
+controlled by @code{vm-paragraph-fill-column}.  Unlike the Emacs
+variable @code{fill-column}, this variable is not buffer-local
+by default.
 
 @node Reading MIME Messages,, Paging, Reading Messages
 @chapter Reading MIME Messages
 images, audio and video, as well as ordinary text.  A non-@code{nil} value for
 this variable means that VM will recognize MIME encoded messages and
 display them as specified by the various MIME standards specifications.
-A nil value means VM will display MIME messages as plain text messages.@refill
+A nil value means VM will display MIME messages as plain text messages.
 
 @vindex vm-mime-base64-decoder-program
 @vindex vm-mime-base64-encoder-program
 encoding and never will be, enough old mailers still use it
 that it is worthwile to attempt to decode it.
 VM has Emacs-Lisp based Quoted-Printable and BASE64 encoders and
-decoders, but you can have VM use external programs to peform
-these tasks and theprocess will almost certainly be faster.
+decoders, but you can have VM use external programs to perform
+these tasks and the process will almost certainly be faster.
 The variables @code{vm-mime-qp-decoder-program},
 @code{vm-mime-qp-decoder-switches},
 @code{vm-mime-qp-encoder-program},
 programs at VM's distribution sites on the Internet to handle BASE64
 and Quoted-Printable.  VM does not have a builtin ``uuencode''
 decoder, so @code{vm-mime-uuencode-decoder-program} must be set
-non-@code{nil} for VM to decode uuencoded MIME objects.@refill
+non-@code{nil} for VM to decode uuencoded MIME objects.
 
 By default VM will display as many content types as possible
 within Emacs.  For FSF Emacs version 19.34 this means textual
 types only.  If you're using XEmacs, images and audio are also
 supported if support for images and audio has been compiled in.
-Types that cannot be displayed internal to Emacs can be displayed
-using an external viewer.@refill
+Types that cannot be displayed internally within Emacs can be displayed
+using an external viewer.
 
 @vindex vm-auto-decode-mime-messages
+@vindex vm-mime-decode-for-preview
 The first step in displaying a MIME message is decoding it to
 determine what object types it contains.  The variable
-@code{vm-auto-decode-mime-messages} controls when this happens.  A value
-of @code{t} means VM should decode the message as soon as the
-message body is exposed.  A @code{nil} value means wait until
-decoding is explicitly requested.  Type @kbd{D}
-(@code{vm-decode-mime-message}) to manually initiate MIME decoding.@refill
-
+@code{vm-auto-decode-mime-messages} controls when this happens.
+A value of @code{t} means VM should decode the message as soon as
+the message body is exposed, or during previewing if
+@code{vm-mime-decode-for-preview} is also set non-@code{nil}.  A
+@code{nil} value means wait until decoding is explicitly
+requested.  Type @kbd{D} (@code{vm-decode-mime-message}) to
+manually initiate MIME decoding.
+
+@kindex $ |
+@kindex $ d
+@kindex $ RET
+@kindex $ s
+@kindex $ p
+@kindex $ d
+@kindex $ e
 @vindex vm-auto-displayed-mime-content-types
-After decoding you will see either the decoded MIME objects or button
-lines that must be activated to attempt display of the MIME object.
-The variable @code{vm-auto-displayed-mime-content-types} specifies the types
-that are displayed immediately.  Its value should be a list of MIME
-content types that should be displayed immediately after decoding.
-Other types will be displayed as a button that you must activate to
-display the object.  To activate a button, either click the middle
-mouse button over it, or move the cursor to the line and press RET.
-If you are running under a window system, you can use the right mouse
-button over an MIME button to display a menu of actions you can take
-on the MIME object.@refill
+After decoding you will see either the decoded MIME objects or
+button lines that must be activated to attempt display of the
+MIME object.  The variable
+@code{vm-auto-displayed-mime-content-types} specifies the types
+that are displayed immediately.  Its value should be a list of
+MIME content types that should be displayed immediately after
+decoding.  Other types will be displayed as a button that you
+must activate to display the object.  To activate a button,
+either click the middle mouse button over it, or move the cursor
+to the line and press RET.  If you are running under a window
+system, you can use the right mouse button over a MIME button to
+display a menu of actions you can take on the MIME object.  If
+you prefer using keyboard commands, you can save the MIME object
+with @kbd{$ s}, print it with @kbd{$ p}, or pipe it to a shell
+command with @kbd{$ |}.  If you want to display the object with
+its characters displayed using Emacs' default face, use @kbd{$ RET}.
+To display the object using an external viewer, type @kbd{$ e}.
+
+@vindex vm-mime-confirm-delete
+Sometimes MIME objects are large and you may not want to save
+them along with the message that contains them.  If so, use
+@kbd{$ d} (@code{vm-delete-mime-object} while the cursor is on
+the MIME button.  The object will be deleted and replaced with
+an object that indicated what the old object was and the fact
+that it is gone.  This is not an undoable operation, so use this
+command with care.  If you inadvertently delete an object, the
+only way to get it back is to quit visiting the current folder
+without saving and then revisit the folder.  This works because
+the object isn't removed from the disk copy of the folder until
+you save the folder.  By default VM will ask if you're sure
+about deleting an object before doing the deletion.  You can
+make VM not ask this question by setting
+@code{vm-mime-confirm-delete} to @code{nil}.
 
 @vindex vm-auto-displayed-mime-content-types
 A value of t for @code{vm-auto-displayed-mime-content-types} means that
 never display MIME objects immediately; only use buttons.  If
 the value of @code{vm-auto-displayed-mime-content-types} is a list, it
 should be a list of strings, which should all be MIME types or
-type/subtype pairs.  Example:@refill
+type/subtype pairs.  Example:
 
 @example
 (setq vm-auto-displayed-mime-content-types '("text" "image/jpeg"))
 If a top-level type is listed without a subtype, all subtypes of that
 type are assumed to be included.  The example above specifies that all
 text types are displayed immediately, but only JPEG images are displayed
-this way.@refill
+this way.
 
 @vindex vm-auto-displayed-mime-content-type-exceptions
 The variable @code{vm-auto-displayed-mime-content-type-exceptions}
 displayed immediately after decoding.  This variable acts as
 an exception list for @code{vm-auto-displayed-mime-content-types};
 all types listed there will be auto-displayed except those in
-the exception list.@refill
+the exception list.
 
 The value of @code{vm-auto-displayed-mime-content-type-exceptions}
 should be either nil or a list of strings.  The strings should
-all be types or type/subtype pairs.  Example:@refill
+all be types or type/subtype pairs.  Example:
 
 @example
 (setq vm-auto-displayed-mime-content-type-exceptions '("text/html"))
 @end example
 
 Again, if a top-level type is listed without a subtype, all subtypes of
-that type are assumed to be included.@refill
+that type are assumed to be included.
 
 @vindex vm-mime-internal-content-types
 The variable @code{vm-mime-internal-content-types} specifies
-which types should be displayed internal to Emacs.  Like
+which types should be displayed internally within Emacs.  Like
 @code{vm-auto-displayed-mime-content-types} its value should be a
 list of MIME content types.  A value of t means that VM
 should always display an object internally if possible.  VM
 can specify the types you want without worrying about errors
 if Emacs can't handle them.  A @code{nil} value means never
 display MIME objects internally, which means VM will have to
-run an external viewer to display all MIME objects.@refill
+run an external viewer to display all MIME objects.
 
 If the value is a list, it should be a list of strings.  Example:
 
 
 If a top-level type is listed without a subtype, all subtypes of that
 type are assumed to be included.  Note that multipart types are always
-handled internally regardless of the setting of this variable.@refill
+handled internally regardless of the setting of this variable.
 
 @vindex vm-mime-internal-content-type-exceptions
 The variable @code{vm-mime-internal-content-type-exceptions} serves as
 the exception list for @code{vm-mime-internal-content-types}.  Its value 
-should be a list of types that should not be displayed internally.@refill
+should be a list of types that should not be displayed internally.
 
 @vindex vm-mime-external-content-types-alist
 For types that you want displayed externally, set the value
 associative list of MIME content types and the external programs
 used to display them.  If VM cannot display a type internally or
 a type is not listed in @code{vm-mime-internal-content-types} VM will
-try to launch an external program to display that type.@refill
+try to launch an external program to display that type.
 
 The alist format is a list of lists, each sublist having the form
 
 @var{TYPE} is a string specifying a MIME type or type/subtype pair.
 For example ``text'' or ``image/jpeg''.  If a top-level type is
 listed without a subtype, all subtypes of that type are assumed
-to be included.@refill
+to be included.
 
 In the first form, @var{PROGRAM} is a string naming a program to
 run to display an object.  Any @var{ARG}s will be passed to the
 inserted into an @var{ARG} string by writing @samp{%f} in the
 @var{ARG} string.  In earlier versions of VM the filename was
 always added as the last argument; as of VM 6.49 this is only done
-if @samp{%f} does not appear in any of the @var{ARG} strings.@refill
+if @samp{%f} does not appear in any of the @var{ARG} strings.
 
 If the @var{COMMAND-LINE} form is used, the program and its
 arguments are specified as a single string and that string is
 variables and input/output redirection if needed.  As with the
 @var{PROGRAM/ARGS} form, the name of the temporary file that
 contains the MIME object will be appended to the command line if
-@samp{%f} does not appear in the command line string.@refill
+@samp{%f} does not appear in the command line string.
 
 In either the @var{PROGRAM/ARG} or @var{COMMAND-LINE} forms, all the
 program and argument strings will have any %-specifiers in
 variable @code{vm-mime-button-format-alist}.  The only difference
 is that @samp{%f} refers to the temporary file VM creates to store
 the object to be displayed, not the filename that the sender
-may have associated with the attachment.@refill
+may have associated with the attachment.
 
 Example:
 
 
 No multipart message will ever be sent to an external viewer.
 
+External viewer processes are normally killed when you select a
+a new message in the current folder.  If you want viewer
+processes to not be killed, set
+@code{vm-mime-delete-viewer-processes} to a non-@code{nil} value.
+
 Any type that cannot be displayed internally or externally will
 be displayed as a button that allows you to save the body to a
-file.@refill
+file.
+
+@vindex vm-mime-external-content-type-exceptions
+As with the internal type list, there is an exception list that
+you can use to specify types that you do not want displayed
+externally.  When VM is considering whether it should
+automatically launch an external viewer, it will consult the
+variable @code{vm-mime-external-content-type-exceptions}.  If the 
+type to be displayed is listed, VM will not launch a viewer.
+This allows you to setup viewers for types that ordinarily you
+would not want VM to display or for types that you norally want
+to convert to some other type using @code{vm-mime-type-converter-alist}.
+You can still display such a type with anexternal viewer by using 
+@kbd{$ e}.
 
 For text type messages, MIME also requires that a character set
 be specified, so that the recipient's mail reader knows what
 character glyphs to use to display each character code.  To
 display a message properly VM needs to know how to choose a font
-for a given character set.@refill
+for a given character set.
 
 @vindex vm-mime-default-face-charsets
 The variable @code{vm-mime-default-face-charsets} tells VM what character
 users using X windows, Emacs' default face displays the ISO-8859-1
 and US-ASCII characters, US-ASCII being a subset of ISO-8859-1.  The
 value of @code{vm-mime-default-face-charsets} must be a list of strings
-specifying the character sets that your default face can display.@refill
+specifying the character sets that your default face can display.
 This variable is useful for making bogus, unregistered character sets
 that are slight variants of US-ASCII and ISO-8859-1 visible.
 Example:
 to display a character set that cannot be displayed using
 the default face.  The value of this variable should be an
 assoc list of character sets and fonts that can be used to display
-them.  The format of the list is:@refill
+them.  The format of the list is:
  
 ( (@var{CHARSET} . @var{FONT}) ...) 
  
 @var{CHARSET} is a string naming a MIME registered character set such 
-as @samp{"iso-8859-5"}.@refill
+as @samp{"iso-8859-5"}.
  
 @var{FONT} is a string naming a font that can be used to display
-@var{CHARSET}.@refill
+@var{CHARSET}.
  
 An example setup might be: 
  
 can all be encoded in single 8-bit bytes.  Also multiple fonts
 can only be displayed if you're running under a window system
 e.g. X windows.  So this variable will have no effect if you're
-running Emacs on a tty.@refill
+running Emacs on a tty.
  
-Note that under FSF Emacs 20.3 and any earlier Emacs release, any fonts
+Note that under FSF Emacs 20.4 and any earlier Emacs release, any fonts
 you use must be the same height as your default font.  XEmacs
-does not have this limitation.@refill
+does not have this limitation.
  
 MIME allows a message to be sent with its content encoded in multiple
-formats, simultaneously, in the same message.  Such message have a
+formats, simultaneously, in the same message.  Such messages have a
 content type of multipart/alternative.  The idea is that the sender
 might have different MIME decoding or display capabilities than some
 of his recipients.  For instance, the sender may be able to compose a
 plain text.  The multipart/alternative type message is the solution
 to this dilemma.  Such a message would contain at least two text
 subparts, one in plaintext and the other in the full featured text
-formatting language that the sender used.@refill
+formatting language that the sender used.
 
 @vindex vm-mime-alternative-select-method
 To control how VM displays multipart/alternative messages, you must
 VM will display the type using either internally or externally.  A
 value of @code{best-internal} tells VM to use the closest subpart that
 it can display internally.  External viewers won't be used in this
-case.@refill
+case.
 
 @vindex vm-infer-mime-types
 Some mailers incorrectly use the generic
 standard Mail major mode provided with GNU Emacs, plus some
 extensions added by VM.  @xref{Mail Mode,,,emacs, the GNU Emacs
 Manual}.  However, mail composition buffers created by VM have some
-extra command keys.@refill
+extra command keys.
 
 @table @kbd
 @findex vm-yank-message
 any headers other than those specified in
 @code{vm-visible-headers} and @code{vm-invisible-headers}.  To yank a message from
 a different folder than the parent of this composition, use
-@key{M-x vm-yank-message-other-buffer}.@refill
+@key{M-x vm-yank-message-other-buffer}.
 @kindex C-c C-v
 @item C-c C-v <Any VM command key>
 All VM commands may be accessed in a VM Mail mode buffer by prefixing them
-with C-c C-v.@refill
+with C-c C-v.
 @kindex C-c C-a
 @vindex vm-send-using-mime
 @item C-c C-a (@code{vm-mime-attach-file})
 encoded message.  If you change your mind about using the
 attachment, you can remove it from the composition with @key{C-k}.
 If you want to move the attachment to some other part of the message,
-you can kill it @key{C-k} and yank it back with @key{C-y}.@refill
+you can kill it @key{C-k} and yank it back with @key{C-y}.
 @kindex C-c C-m
 @item C-c C-m (@code{vm-mime-attach-message})
 Attaches a mail message to the composition.  If invoked with a
 prefix arg, the name of a folder read from the minibuffer and the 
-ttached message is copied from that folder.  You will be prompted 
-for the message number of the message to be attached.@refill
+attached message is copied from that folder.  You will be prompted 
+for the message number of the message to be attached.
 @kindex C-c C-b
 @item C-c C-b (@code{vm-mime-attach-buffer})
-Attaches an Emacs buffer the composition.
+Attaches an Emacs buffer to the composition.
 @findex vm-mime-encode-composition
 @kindex C-c C-e
 @item C-c C-e (@code{vm-mime-encode-composition})
 it.  After signing the message, you would use C-c C-c as usual to
 send the message.  Emacs' @code{undo} command can be used to undo
 the encoding, so that you can continue composing the unencoded
-message.@refill
+message.
 @findex vm-preview-composition
 @kindex C-c C-p
 @item C-c C-p (@code{vm-preview-composition})
 temporary folder and you can read the message and interact with
 it using normal VM mode commands to see how it might look to a
 recipient.  Type @key{q} to quit the temporary folder and resume
-composing your message.@refill
+composing your message.
 @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.@refill
+described above.
 
 @code{vm-mail} can be invoked outside of VM by typing @kbd{M-x vm-mail}.
 However, only (@code{vm-yank-message-other-folder}) will work; all the
-other commands require a parent folder.@refill
+other commands require a parent folder.
 
 If you send a message and it is returned by the mail system
 because it was undeliverable, you can resend the message by
 as a Cc header in a normal message.  Mail will only be sent to
 the addresses in the Resent-To and Resent-Cc headers unless
 you delete both of those headers.  In that case the To and Cc
-headers will be used.@refill
+headers will be used.
 
 @menu
 * MIME Composition::	Sending a message using MIME attachments.
 @code{vm-send-using-mime} set to a non-@code{nil} value.  With MIME composition
 enabled, VM will allow you to add file attachments to your
 composition and will analyze your message when you send it and
-MIME encode it as necessary.@refill
+MIME encode it as necessary.
 
 @kindex C-c C-a
 To attach a file to your composition, use @kbd{C-c C-a}
 (@code{vm-mime-attach-file}).  VM will ask you for the name of the file, 
 its type, a brief description and its character set if it is a
 text attachment.  The attachment will be represented in the
-composition as a tag line like this @refill
+composition as a tag line like this
 
   [ATTACHMENT ~/sounds/chronophasia_scream.au, audio/basic]
 
 @kbd{C-y} to move it to another place in the message.  You can
 yank back the tag multiple times to duplicate the attachment in
 the message.  Or you can leave the tag killed and the attachment
-won't appear in the message when it is sent.@refill
+won't appear in the message when it is sent.
 
 If you click the right mouse button on the attachment tag, a menu
 will appear that allows you to change the content disposition of
 temporary mail folder.  You can scroll through the message
 using normal VM mail reading commands.  Typing @kbd{q} in this
 folder will return you to your composition where you can make
-further changes.@refill
+further changes.
 
 @kindex C-c C-e
 To encode a MIME message without sending it, use @kbd{C-c C-e}
 to resume editing the message you can run the Emacs @code{undo}
 (normally bound to @kbd{C-x u}) command which will revert the
 encoded MIME bodies back to tags and you can continue entering
-your composition.@refill
+your composition.
 
 @vindex vm-mime-7bit-composition-charset
 By default, when you type text into a composition buffer VM
 set declared in the encoding of the message when it is sent.  If
 you are using some other character set, you must specify it by
 setting the variable @code{vm-mime-7bit-composition-charset}.  The
-value of variable should be a string specifying the character
-set.@refill
+value of this variable should be a string specifying the character
+set.
 
 @vindex vm-mime-8bit-composition-charset
 If there are character codes in the composition greater than 128, the
 variable @code{vm-mime-8bit-composition-charset} tells VM what character 
 set to assume when encoding the message.  The default is
-@samp{iso-8859-1}.@refill
+@samp{iso-8859-1}.
 
 Character codes greater than 128 may not be transported reliably
 across the Internet in mail messages.  Some machines will refuse
 to accept messages containing such characters and some will accept
 them but zero the eighth bit, garbling the message.  To avoid
-these problems, VM transfer encodes 8-bit text by default.@refill
-
-MIME has two transfer encodings that convert 8-bit data to 7-bit
+these problems, VM transfer encodes 8-bit text by default.
+
+MIME has two transfer encodings that convert 8-bit data to 7-bit data
 for safe transport.  @dfn{Quoted-printable} leaves the text mostly
 readable even if the recipient does not have a MIME-capable mail
 reader.  @dfn{BASE64} is unreadable without a MIME-capable mail
-reader.@refill
+reader.
 
 @vindex vm-mime-8bit-text-transfer-encoding
 VM's text transfer encoding behavior is controlled by the
 which moves them outside the scope of this variable.  For
 example, messages with line lengths of 1000 characters or more
 are considered binary, as are messages that contain carriage
-returns (ASCII code 13) or NULs (ASCII code 0).@refill
+returns (ASCII code 13) or NULs (ASCII code 0).
 
 @node Replying, Forwarding Messages, MIME Composition, Sending Messages
 @section Replying
 to the subject of replies, if the 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
+manually, if you wish.
 
 @vindex vm-included-text-prefix
 VM also helps you quote material from a message to which you are
 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
+be.
 
 @vindex vm-included-text-attribution-format
 The variable @code{vm-included-text-attribution-format} specifies the
 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
+@code{nil} value causes the attribution to be omitted.
 
 @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
+In-Reply-To header that is inserted into the 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
+header to be omitted.
 
 @vindex vm-strip-reply-headers
 The recipient headers generated for reply messages are created by
 copying the appropriate headers from 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 recipient headers will stripped of all information
-except the actual addresses.@refill
+non-@code{nil}, the recipient headers will be stripped of all information
+except the actual addresses.
 
 The reply commands are:
 
 
 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} messages as well as the current message.  Also all
+negative) @var{n-1} messages 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
+@pxref{Message Marks}.
 
 @vindex vm-reply-ignored-addresses
 If you are one of multiple recipients of a message and you use @kbd{f}
 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.@refill
+remove from the recipient headers of replies.
 
 @node Forwarding Messages,, Replying, Sending Messages
 @section Forwarding Messages
 
 VM has three commands to forward messages: @kbd{z}
 (@code{vm-forward-message}), @key{@@} (@code{vm-send-digest}) and
-@kbd{B} (@code{vm-resend-message}.@refill
+@kbd{B} (@code{vm-resend-message}).
 
 @findex vm-forward-message
 @kindex z
 @code{vm-forwarding-subject-format} is non-@code{nil} it should specify
 the format of the Subject header of the forwarded message.  A @code{nil}
 value causes the Subject header to be left blank.  The forwarded message
-is flagged ``forwarded'' when the message is sent.@refill
+is flagged ``forwarded'' when the message is sent.
 @findex vm-send-digest
 @vindex vm-digest-send-type
 @kindex @@
 current folder.  The message encapsulation method is specified by the
 variable @code{vm-digest-send-type}, which accepts the same values as
 @code{vm-forwarding-digest-type}.  All the messages included in the digest will
-be flagged ``forwarded'' when the digest message is sent.@refill
+be flagged ``forwarded'' when the digest message is sent.
 
 @vindex vm-digest-preamble-format
 @vindex vm-digest-center-preamble
 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
+will be centered.
 
 @findex vm-resend-message
 @kindex B
 will use essentially the same message and headers and add a Resent-To
 header that you should fill in with the new recipients.  Use @kbd{C-c
 C-c} as usual to send the message.  The resent message will be flagged
-as ``redistributed''.@refill
+as ``redistributed''.
 
 @node Saving Messages, Deleting Messages, Sending Messages, Top
 @chapter Saving Messages
 messages.  Such files are called @dfn{folders}.  Folders are
 distinguished from spool files in that VM does not expect other
 programs to modify them while VM is visiting them.  This is
-important to remember.  VM does not locking of folders when
+important to remember.  VM does no locking of folders when
 visiting them.  If the disk copy of a folder is modified behind
 VM's back, Emacs will complain with the dreaded ``File changed
 on disk'' message when you try to save the folder.
-@refill
 
 @findex vm-save-message
 @kindex 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.
+@var{n}, the current message plus the next @var{n-1} messages 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
+flagged ``filed''.
 
 @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
+folder on interactive saves.
 
 @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
+you some typing.
 
 @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
+list of the form:
 
 @display
 ((@var{header-name}
 
 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
+string.
 
 If any part of the contents of the message header named by
 @var{header-name} is matched by the regular expression
 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
+@code{vm-folder-directory} is @code{nil}.
 
 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
 @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
+recursively.
 
 @vindex vm-auto-folder-case-fold-search
 Whether matching is case sensitive depends on the value of the variable
 matching case insensitive.  The default value is @code{t}, which means