_________________________________________________________________ VM Frequently Asked Questions $Revision: 3.33 $ $Date: 2001/12/10 06:00:36 $ 1. About VM and this document * 1.1. What is VM? * 1.2. What is the most current version of VM? * 1.3. Where can I get the most current version of VM? * 1.4. About the FAQ * 1.5. Where to find more information about VM 2. Troubleshooting * 2.1. All I can see is the headers of the message! * 2.2. Why does mailcrypt fail under VM with an invalid-function error? * 2.3. I'm using TM and tm-vm and I'm having MIME problems. * 2.4. I can't run VM under GNU Emacs 20! * 2.5. I can't save my changes because my folders are being modified on disk. * 2.6. I found a bug in VM -or- How do I do (something) in VM? 3. Settings * 3.1. VM configuration file * 3.2. Can I set the "From:" address and the "Reply-to:" address? * 3.3. How do I make the Read and Send Mail from the menu use VM? * 3.4. How can I prevent VM from modifying my window configuration? * 3.5. How do I stop VM from opening/raising frames? * 3.6. How do I make VM expunge all my deleted mail when I quit? 4. Getting Mail * 4.1. Getting mail from a POP3 or IMAP server * 4.2. Getting mail from a local spool directory * 4.3. VM and Emacs seem to lock up occasionally * 4.4. Why do I get the error message "movemail: Permission denied for lock file" when trying to get my mail? * 4.5. Using VM with qmail-style mail directories 5. Reading Mail * 5.1. Replying to mail with quoting * 5.2. Can VM read MIME-encoded mail? * 5.3. Displaying graphical smiley-faces 6. Composing Mail * 6.1. How do I add X-Whatever headers to my messages? * 6.2. How do I include a signature with my mail message? * 6.3. How can I include a random signature file? * 6.4. How do I enable draft handling? 7. Sending Mail * 7.1. How do you use mail-aliases with VM? * 7.2. How to add the Re: in front of replies * 7.3. How can I BCC: myself on all outgoing messages? * 7.4. How do I FCC: myself on all outgoing messages? * 7.5. Is there an easy way to get VM to include all recipients but me in the CC: field of a reply? * 7.6. Can I send mail to a POP server? * 7.7. Can I use VM with smail/qmail/some other mailer? 8. MIME support in VM * 8.1. What are VM's MIME capabilities? * 8.2. Decoding attachments is very slow. Why? * 8.3. How do I extend VM's MIME capabilities so it handles a new MIME type? * 8.4. How can I read Microsoft Word Documents which are attachments? * 8.5. Is there a way to read text/enriched mail? * 8.6. Can I display text/html parts inside VM? * 8.7. How can I make my PGP-signature be a MIME attachment? * 8.8. How do I handle uuencoded text? * 8.9. How do I read x-uuencode attachments? * 8.10. How do I prevent text/html (or other MIME types) from being displayed? 9. Folders * 9.1. What Is a VM folder? * 9.2. Filing mail into folders * 9.3. Auto filing mail into folders * 9.4. Virtual folders 10. Filtering and Sorting * 10.1. Sorting with `vm-auto-archive-messages' * 10.2 Automatically generate folder name based on the username of the sender * 10.3. Auto-deleting with virtual folders * 10.4. Filtering with procmail * 10.5. An example virtual-folder method * 10.6. Another virtual-folder example 11. VM and Other Programs * 11.1. BBDB * 11.2. Feedmail * 11.3. Fetchmail * 11.4. Mailcrypt * 11.5. smtpmail.el * 11.6. Supercite (supercite.el) 12. Miscellaneous * 12.1. Building vm.elc under NT * 12.2. How do I convert an MH inbox to a VM inbox? * 12.3. How do I convert a RMAIL folder to a VM folder? * 12.4. How do I make VM less flashy? * 12.5. What other VM resources are out there? * 12.6. How do I make VM load/save big files faster? _________________________________________________________________ _________________________________________________________________ 1. About VM and this document 1.1. What is VM? Date: June 20, 1998 Updated: February 7, 1999 VM (View Mail) is an Emacs subsystem that allows 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. (from the VM info file) VM is written and maintained by Kyle Jones . The VM home page is available at http://www.wonderworks.com/vm/ 1.2. What is the most current version of VM? Date: June 20, 1998 Updated: December 9, 2001 The latest version can be found listed on the VM home page. 1.3. Where can I get the most current version of VM? Date: June 20, 1998 Updated: February 7, 1999 VM in both source and binary form is available in source distribution from a variety of distribution sites. 1.4. About the FAQ Date: June 20, 1998 Updated: February 7, 1999 This FAQ was originally written by Brian Gorka. It is currently maintained by Samuel Mikes and Gregory Neil Shapiro. Please send additions, errors and suggestions to vm-faq@wonderworks.com. The current version of the VM FAQ can always be found at http://www.wonderworks.com/vm/FAQ.html. A single-file, text-only version of the FAQ is also available as http://www.wonderworks.com/vm/vm-faq.txt. 1.5. Where to find more information about VM Date: October 2, 2000 Updated: February 27, 2001 * Web Site: VM's homepage * USENET Newsgroups: gnu.emacs.vm.bug and gnu.emacs.vm.info _________________________________________________________________ _________________________________________________________________ 2. Troubleshooting 2.1. All I can see is the headers of the message! Date: June 20, 1998 Updated: February 7, 1999 Hit the space bar. VM has a previewing feature that can be set to display some number of lines of the message before you have read the message. This can be useful if you read sensitive or confidential e-mail in an environment where someone could be reading over your shoulder. Set the variable `vm-preview-lines' to the number of lines you'd like to see displayed, or to the value `nil' if you'd like to disable previewing. If you disable previewing, you'll immediately see as much of the message as will fit in your emacs window. 2.2. Why does mailcrypt fail under VM with an invalid-function error? Date: June 20, 1998 Updated: February 7, 1999 The mailcrypt that is shipped with XEmacs 19.14 isn't built properly to work with VM. Mailcrypt uses some internal VM macros. The byte compiler needs to know about all macro calls so that it can inline them. So any macros used must be defined inside Emacs at compile time, otherwise the resulting compiled code will crash with an (invalid-function (macro . ...)) error. What this means for mailcrypt is that VM's source directory must be in your emacs Lisp load path when mailcrypt is being built. The installation instructions for mailcrypt tell how to do this. 2.3. I'm using TM and tm-vm and I'm having MIME problems. Date: June 20, 1998 Try turning off TM and seeing if they go away. TM can cause some problems with VM, especially now that VM has its own MIME capabilities. 2.4. I can't run VM under GNU Emacs 20! Date: June 20, 1998 Updated: September 15, 2001 Chances are, you're getting an error message like "VM has not been ported to v20 Emacs." Recent versions of VM work with recent versions of Emacs 20, so you should probably get a newer copy of VM. 2.5. I can't save my changes because my folders are being modified on disk. Date: June 20, 1998 Updated: February 7, 1999 The most common cause of this error is mistakenly using procmail to deliver mail to your VM folders. procmail should deliver mail to your spool files. See the VM and Procmail FAQ for more information. 2.6. I found a bug in VM -or- How do I do (something) in VM? Date: June 20, 1998 Updated: February 7, 1999 First, check the VM documentation and on-line help. You can get to the VM on-line help by typing `?' twice in any VM window. The VM documentation can be read with the info browser: `C-h i' will get you to the info browser, and `m VM RET` from the top level will get you to the VM documentation, provided it's been installed correctly. frequently asked question. If the FAQ doesn't help, try searching the VM newsgroups with DejaNews. Try several searches, using different keywords. If you're comfortable with emacs and at least slightly familiar with emacs Lisp, please try searching for relevant variables or functions with apropos. Type `C-h a' under XEmacs, or use `M-x apropos' under GNU Emacs (the key sequence `C-h a' is bound to function-apropos under GNU Emacs, which is not as useful as apropos.) Do an apropos search for "vm.*something" where "something" is a keyword. Some good keywords are "folder", "window", "frame", "pop", "mime", "summary", and "virtual" ... -- lower-case, singular nouns. If you find something that looks useful, examine its documentation by clicking on it (XEmacs) or using `C-h f ' for functions and `C-h v ' (Emacs). You can also go browsing through the VM sources looking for enlightening comments. If none of that helps, then you need to decide if you have a bug or a question. If it's a bug, submit a bug report with `M-x vm-submit-bug-report'. If it's a question, post your message to the newsgroup gnu.emacs.vm.info. Try to make your message brief but detailed, and describe what you expected to happen and what did happen. Follow the discussion in the VM newsgroups gnu.emacs.vm.info and gnu.emacs.vm.bug. _________________________________________________________________ _________________________________________________________________ 3. Settings 3.1. VM configuration file Date: June 20, 1998 Updated: February 7, 1999 Many of the answers in this document suggest that you add code to your VM configuration file. VM reads its configuration file at startup and whenever the function `vm-load-init-file' (by default bound to "L" in VM buffers) is called. The configuration file is named, by default, "~/.vm", but the name of the configuration file can be changed by setting the variable `vm-init-file'. VM does not come with a default configuration file -- if you want one you'll have to create it yourself. 3.2. Can I set the "From:" address and the "Reply-to:" address? Date: June 20, 1998 Updated: February 7, 1999 Yes, by adding this lisp code to your .emacs file: (setq mail-default-reply-to "username@example.com") (setq user-mail-address "Your Name ") 3.3. How do I make the Read and Send Mail from the menu use VM? Date: June 20, 1998 Updated: February 7, 1999 Under GNU Emacs, place the following in your .emacs: (define-key menu-bar-tools-menu [rmail] '("Read Mail" . vm)) (define-key-after menu-bar-tools-menu [smail] '("Send Mail" . vm-mail) 'rmail) Thanks to Paul D. Smith for this one. Under XEmacs, you can do something like this to set the Apps|Send Mail menu item to use VM; (setq mail-user-agent 'vm-user-agent) (setq toolbar-mail-reader 'vm) 3.4. How can I prevent VM from modifying my window configuration? Date: June 20, 1998 Updated: February 7, 1999 Add the following to your VM configuration file: (setq vm-mutable-windows nil) 3.5. How do I stop VM from opening/raising frames? Date: June 20, 1998 Updated: February 7, 1999 There are variables which can be set to avoid the "frame-based" file chooser when `vm-attach-mime-file' or `vm-visit-folder' is invoked from a menu (via the mouse). The variables (with their default values) are: (setq vm-frame-per-completion t) (setq vm-frame-per-composition t) (setq vm-frame-per-edit t) (setq vm-frame-per-folder t) (setq vm-frame-per-help nil) (setq vm-frame-per-summary nil) (setq vm-mutable-frames t) (setq vm-raise-frame-at-startup t) In the current version of VM, setting `vm-mutable-frames' to `nil' disables all frame creation; in older versions it may be necessary to set each `vm-frame-per-' variable to `nil' as well. 3.6. How do I make VM expunge all my deleted mail when I quit? Date: June 20, 1998 Updated: February 7, 1999 Although doing so is strongly discouraged, you can add the following to your VM configuration file: (add-hook 'vm-quit-hook 'vm-expunge-folder) _________________________________________________________________ _________________________________________________________________ 4. Getting Mail 4.1. Getting mail from a POP3 or IMAP server? Date: June 20, 1998 Updated: April 21, 1999 To define a network mailbox for incoming mail, modify the `vm-spool-files' variable to include one or more POP or IMAP specification strings. The POP specification is "server:port:authtype:username:password". The IMAP specification is similar, "imap:server:port:mailbox:authtype:username:password". Argument Description server Hostname of your POP or IMAP server port TCP port to connect to, usually 110 for POP and 143 for IMAP mailbox Name of the mailbox on the IMAP server, usually "inbox" for default IMAP maildrop authtype Authentication method -- pass, rpop, or apop for POP and preauth or login for IMAP username Your username on the POP or IMAP server password The password on the POP or IMAP server Note that it is possible to use * for the password field and have VM prompt you for the password. This is the recommended method as it keeps your password secure. For example: (setq vm-spool-files (list (concat "pop.example.com:110:apop:" (getenv "USER") ":*") (concat "imap:imap.example.com:143:inbox:login:" (getenv "USER") ":*"))) If you get mail by POP, and want to use an external mail-filtering package, such as procmail, you can't use VM's POP capability. Please see the section on filtering, below, for more information. 4.2. Getting mail From a local spool directory Date: June 20, 1998 Updated: February 7, 1999 Set the value of `vm-spool-files' to the location of your mail spool: (setq vm-spool-files "/var/mail/username") 4.3. VM and Emacs seem to lock up occasionally From: Bjorn Knutsson Date: June 20, 1998 If you're fetching mail via the built-in POP or IMAP client, then Emacs will lock up while it is checking for new mail. If you're set up to automatically get mail via the vm-auto-get-new-mail variable, you may expect this, but if it is turned off, this lockup may catch you off guard. The reason for the lockup is that VM is out checking for new mail. It won't actually fetch it, but it will still check every ten minutes (default). If you're currently online, the lockup caused by this check will be very short. If, on the other hand, you are not currently connected, the lockup will last until the network connection times out or, if you're using a call on demand, will cause you to try connect to your ISP every ten minutes while you are reading mail. Set vm-mail-check-interval and vm-auto-get-new-mail to nil to avoid the lockups. This, of course, also means that you will not be notified of new mail, and new mail will not be fetched automatically. 4.4. Why do I get the error message "movemail: Permission denied for lock file" when trying to get my mail? Date: June 20, 1998 When I wanted to get incoming mail, vm said that it couldn't: movemail: Permission denied for lock file--see source file lib-src/movemail.c movemail exited with code 1 VM uses the movemail program to move mail from your spool file to the crash box, and then picks up the mail from the crash box. (This is necessary to reconcile emacs' view of file locking with the mail system's view of file locking.) In order for this to work, movemail must be able to read and write to your spool file, in your mail spool directory. The error message means movemail could not create the lock file in your mail spool because it lacked sufficient privilege. movemail needs to be installed with permissions similar to those of other programs that do I/O in the mail spool. Typically this means either setuid root or setgid mail. Your system administrator should be able to handle this for you. 4.5. Using VM with qmail-style mail directories From: Arnaldo Mandel Date: June 20, 1998 Arnaldo Mandel provided the following suggestion on using VM on a system where the MTA is qmail: I have been using maildirs for spool for some time now, with VM, with no glitches. Actually, occasionally I used qail (a wrapped call to Unix Mail), which moves the spool to an mbox file - VM can successfully retrieve mail both from maildir and mboxes. Below is a recipe I posted some time ago on the qmail list. Perhaps it can (suitably edited) become part of the distribution (or FAQ). Note that this has nothing to do with support of maildirs as folders. * Save this as an executable program. Don't forget to edit the correct paths into MAILDIR2MBOX and MOVEMAIL. #!/bin/sh # Time-stamp: <97/02/21 16:25:38 am@ime.usp.br [rebutosa]> # # mvmail: maildir2mbox wrapper for compatible invocation as movemail. # If the mailbox is a directory, calls maildir2mbox, otherwise # call movemail. # maildir2mbox reliably offloads a maildir into a mbox file (comes with qmail) MAILDIR2MBOX=/var/qmail/bin/maildir2mbox # movemail reliably moves a mbox file (comes with emacs) MOVEMAIL=/usr/gnu/bin/movemail if [ $# != 2 ] then echo "$0: wrong number of parameters." exit 1 fi if [ -d $1 ] then # The construction of MAILTMP tries to be viable in a short-filenames # environment; otherwise, tacking stuff on the back of $2 would suffice. # Does it matter? export MAILDIR MAIL MAILTMP MAILDIR=$1 MAIL=$2 MAILTMP=`dirname $2`'/@@'`basename $2` exec $MAILDIR2MBOX else exec $MOVEMAIL $1 $2 fi * Tell vm to use it. That is, add the following to your .vm file, where xxx should be substituted by a path to the script. (setq vm-movemail-program "xxx") * Other related configuration variables and functions I use. They are here only to give an idea of the possibilities. (setq vm-spool-files (list ;; this allows using qail as stopgap ;; reader behind an unreliable connection (or (getenv "MAIL") "~/Mailbox") (or (getenv "MAILDIR") "~/Maildir")) vm-make-spool-file-name 'folder-maildir) ; The mail folders live in a directory, specified in ; `vm-folder-directory'. The maildirs for the several mailing lists I ; subscribe to live in subdirectory Dir of this same directory, and ; have the same name as the corresponding folders. (defun folder-maildir (folder) (concat (file-name-directory folder) "Dir/" (file-name-nondirectory folder))) (defun folder-crash (folder) (concat folder ".CRASH")) _________________________________________________________________ _________________________________________________________________ 5. Reading Mail 5.1. Replying to mail with quoting Date: June 20, 1998 To reply to a message, simply press the 'r' key while reading it. VM will generate a reply for you. To quote the message in your reply, use the `R' key to start a reply, or, once in the mail-composition buffer, use C-c C-y to insert the message text. You may wish to use Supercite (included with Emacs) to generate some different quoting styles. 5.2. Can VM read MIME-encoded mail? Date: June 20, 1998 Yes. Please see MIME section of the FAQ. 5.3. Displaying graphical smiley-faces From: XEmacs FAQ Date: June 20, 1998 To display graphical smiley-faces in VM, place the following forms in your .vm file: (require 'messagexmas) (require 'smiley) (add-hook 'vm-select-message-hook '(lambda () (smiley-region (point-min) (point-max)))) _________________________________________________________________ _________________________________________________________________ 6. Composing Mail 6.1 How do I add X-Whatever headers to my messages? Date: June 20, 1998 Updated: February 8, 1999 Add the following to your VM configuration file: (setq mail-default-headers (concat "X-Important: special-delivery\n" "Return-Receipt-To: username@example.com\n")) Or, another example: From: John Owens I wanted to submit my x-face code (actually snarfed from someone else out there, don't even remember where I picked this up) since I think it's a little better than the "How do I add X-Whatever ..." you have (works in emacs mail mode, not just vm mode). Note that it requires your X-Face in ~/.face. (defun mail-insert-x-face () (save-excursion (goto-char (point-min)) (search-forward mail-header-separator) (beginning-of-line nil) (insert "X-Face:") (insert-file "~/.face"))) (add-hook 'mail-setup-hook 'mail-insert-x-face) 6.2. How do I include a signature with my mail message? Date: June 20, 1998 Updated: August 31, 2001 Add the following to your VM configuration file: (setq mail-signature t) (setq mail-signature-file "~/.signature") 6.3. How can I include a random signature file? Date: June 20, 1998 Updated: April 18, 2001 Matt Simmons (the former BBDB maintainer) has written a random signature package for message-mode, which can be used with VM if you put the following forms in your .vm file: (setq mail-signature nil) (setq message-signature 'random-signature-fun) (defun my-mail-setup-hook () (message-insert-signature) (mail-to)) (add-hook 'mail-setup-hook 'my-mail-setup-hook) (Don't forget to download and install the random-signature package.) 6.4. How do I enable draft handling? From: Robert Fenk Date: Mark 24, 2001 There are two possible solutions: * feedmail supports queueing messages for later sending and other cool stuff. * vm-pine integrates draft handling into VM. Drafts can be saved in any VM folder and attachments are handled well compared to feedmail. _________________________________________________________________ _________________________________________________________________ 7. Sending Mail 7.1. How do you use mail aliases with VM? Date: June 20, 1998 VM uses Emacs' Mail mode to send mail. Mail mode's aliases work the same way Berkeley Mail aliases work. Put lines in .mailrc like this: alias dave letterman@lateshow.tv.cbs.westinghouse.com alias jay leno@tonight.tv.nbc.ge.com alias yuks dave jay You can now send mail to "dave", "jay" or "yuks" and they will be expanded before being passed to the mail system. You can also use the mail-abbrevs package to expand the aliases before sending. See the Emacs/XEmacs documentation for more information. If you find mail aliases too limiting, you may want to try the Insidious Big Brother Database (BBDB), an address book database with nifty auto-record-creation and name-completion features. 7.2. How do I add the Re: in front of replies? Date: June 20, 1998 Updated: February 8, 1999 You can add just about anything in front of message replies by adding the following to your .vm file: (setq vm-reply-subject-prefix "Re: ") If you use something other than "Re: ", don't forget to do this as well, so that the various subject commands match both the original and the replies: (setq vm-subject-ignored-prefix "^\\(re: *\\)+") Here's a fancier version that handles prefixes like "Re[2]: " as well: (setq vm-subject-ignored-prefix "^\\(re\\(\\[[0-9]+\\]\\)?: *\\)+") And an even fancier one, from RMail via Michael Ernst: (setq vm-subject-ignored-prefix "\\`\\(re\\(([0-9]+)\\|\\[[0-9]+\\]\\|\\^[0-9]+ \\)?: *\\)+") 7.3. How can I BCC: myself on all outgoing messages? Date: June 20, 1998 You can add the following to your .vm file: (setq mail-self-blind t) 7.4. How do I FCC: myself on all outgoing messages? Date: June 20, 1998 Updated: February 8, 1999 You can add the following to your .vm file: (setq mail-archive-file-name (expand-file-name "~/mail/sent-items")) Recent versions of VM automatically generate Message-ID: headers, so that mail that's FCC'd to your outgoing mail folder can be properly threaded. 7.5. Is there an easy way to get VM to include all recipients but me in the CC: field of a reply? Date: June 20, 1998 Updated: February 8, 1999 The variable `vm-reply-ignored-addresses' is used to strip addresses from the list of recipients when replying to a message. For example: (setq vm-reply-ignored-addresses '("^username@example.com" "[ \<]username@example.com")) 7.6. Can I send mail to a POP server? Date: June 20, 1998 Yes, but there's not much point in it unless the POP server also is an SMTP server. (Yes, some weird implementations of POP understand SMTP commands. That's not what most people are talking about.) This question usually is asked by someone who's using VM to get mail from a POP server and isn't running a mail server on the local machine. In that situation, VM can't send mail normally (using the sendmail program). Check out smtpmail and, if you like, feedmail, which allow you to send mail to an SMTP server. 7.7. Can I use VM with smail/qmail/some other mailer? Date: June 20, 1998 Yes. Either use smtpmail or change the value of the variable `sendmail-program' to point to the location of your mailer. (Your mailer must be able to accept sendmail-style arguments if you go that route.) _________________________________________________________________ _________________________________________________________________ 8. MIME support in VM 8.1. What are VM's MIME capabilities? Date: June 20, 1998 Updated: February 8, 1999 Since version 6.0, VM has had native MIME reading and sending ability. VM can send and receive MIME messages and digests, decode and encode base64 and quoted-printable, and hand off MIME parts to external display programs. As of version 6.67, a few flaws remain in VM's MIME abilities: * VM doesn't use your .mailcap file to determine how to handle various Content-Types. (but see below) * VM can't handle MIME-attached PGP signatures (but see below) * VM doesn't encode binary data (including 'national characters' such as ä and ö) in headers * VM doesn't let you control the contents of Content-Disposition headers when you're sending mail Be sure to check with the latest version of VM before complaining about the absence of full MIME support: some of these issues may already have been resolved. 8.2 Decoding attachments is very slow. Why? Date: June 20, 1998 Updated: February 8, 1999 VM can decode base64-encoded and quoted-printable MIME parts internally, but it's much faster to use an external C program to encode and decode encoded attachments. Most versions of XEmacs come with a utility called mimencode or mmencode which can encode and decode the base64 and quoted-printable encoding. This configuration should work: (setq vm-mime-base64-decoder-program "mmencode") (setq vm-mime-base64-decoder-switches '("-b" "-u")) (setq vm-mime-base64-encoder-program "mmencode") (setq vm-mime-base64-encoder-switches '("-b")) If you don't have the `mmencode' program, you can find free C programs which implement base64 and quoted-printable encoding and decoding in the same place you can find VM. After you download, compile, and install these two programs, set the variables `vm-mime-base64-decoder-program' and `vm-mime-base64-encoder-program' to point to the locations of these programs. Thanks to Steven Harp for pointing out the existence of `mmencode'. 8.3. How do I extend VM's MIME capabilities so it handles a new MIME type? Date: June 20, 1998 Updated: February 8, 1999 VM can display MIME content either externally or internally. Adding an external content type To add an external display program, add an entry to `vm-mime-external-content-types-alist'. If you have set the variable `vm-mime-internal-content-types' to a list of content-types, you need to make sure that the content-type is not present in it, since the internal content-types are consulted first. See the documentation for `vm-mime-external-content-types-alist' for more information. For example, if you want to use metamail to dispatch all your external MIME objects, you should be able to do something like this: (setq vm-mime-external-content-types-alist '((".*" "metamail -c %t -E %e %f"))) Adding an internal content type In order to display content within emacs, VM needs to know how to convert the content-type into something it can display. The variable `vm-mime-type-converter-alist' allows you to define new conversions and the programs that accomplish them. See the documentation for `vm-mime-type-converter-alist' for more information. 8.4. How can I read Microsoft Word Documents which are attachments? Date: June 20, 1998 Updated: February 8, 1999 See also the previous question, about adding MIME types. If you don't have an application which can read Microsoft Word documents, download and install a .DOC-to-text converter; one such is catdoc, available from http://www.ice.ru/~vitus/catdoc/. via `vm-mime-external-type-alist'. For example, if you have the Applix suite, you could do this: (add-to-list 'vm-mime-external-content-types-alist '("application/msword" "applix" "-wp")) or if using a converter such as catdoc: (add-to-list 'vm-mime-type-converter-alist '("application/msword" "text/plain" "catdoc -")) 8.5. Is there a way to read text/enriched mail? Date: June 20, 1998 This feature is already in VM 6.30 and later. Click on the MIME attachment and it will be decoded, and the buffer will be reformatted into text/enriched. 8.6. Can I display text/html parts inside VM? Date: June 20, 1998 Updated: March 28, 1999 Sure. If you have w3 installed, VM will try to use it to display text/html attachments. You could also override VM's behavior by removing "text/html" from `vm-mime-internal-content-types'. The simplest alternative is to define cat as a converter from text/html to text/plain: (add-to-list 'vm-mime-type-converter-alist '("text/html" "text/plain" "cat")) If you'd like to remove the tags from the HTML, you might prefer to send the output through striphtml, a perl program by Tom Christiansen. striphtml is available from the Comprehensive Perl Archive Network (http://www.cpan.org/). To display text/html parts in an external viewer such as Netscape, you'll need the program sendurl, which functions exactly like browse-url-netscape. (Currently, VM's MIME setup won't allow you to specify a lisp function such as browse-url-netscape as an external viewer. You can go ahead and hack in the functionality yourself if you'd like.) In some older versions of VM (6.35 through 6.50), the code to use emacs w3-mode to internally display text/html parts of MIME messages was commented out. If you have one of those versions of VM, you should upgrade. 8.7. How can I make my PGP-signature be a MIME attachment? Date: June 20, 1998 Apparently, TM can do this, but there are problems between TM and VM. VM may eventually support this; it may be possible to do it now with tinypgp and some hacking. 8.8. How do I handle uuencoded text? Date: June 20, 1998 Updated: February 8, 1999 Hold your thumbs (for good luck) and pipe the buffer to uudecode with '|'. 8.9. How do I read x-uuencode attachments? Date: June 20, 1998 As of VM 6.48, uuencode is recognized as a Content-Transfer-Encoding, and will be decoded like any normal encoding. If you have an older version of VM, you can manually mark the uuencoded region and pipe it to uudecode with `M-|'. 8.10. How do I prevent text/html (or other MIME types) from being displayed? Date: December 14, 2000 Quoth Kyle Jones: A quick tutorial on VM's MIME display variables. vm-display-using-mime controls whether MIME is displayed specially at all. Default value is t. vm-auto-decode-mime-messages controls whether a MIME message is decoded when the message is selected. Decoding means parsing the message to figure out what MIME types are in it. This can be slow for large messages, so you might not want it to happen automatically. Default value is t. vm-auto-displayed-mime-content-types controls which MIME types are displayed immediately after the message is decoded. Default value is ("text" "multipart"). vm-auto-displayed-mime-content-type-exceptions lists exceptions to the auto-displayed types. So you can specify "text" as an auto-displayed type and '("text/html") as the exceptions list to avoid immediate display of text/html. Default value is nil. So the answer to your question is (add-to-list 'vm-auto-displayed-mime-content-type-exceptions "text/html") _________________________________________________________________ _________________________________________________________________ 9. Folders 9.1. What is a VM folder? Date: June 20, 1998 Updated: February 8, 1999 In VM, a mail folder is a file where mail is stored. VM can read the following folder formats: * Unix "From " (two newlines before the "From " string) * Bell "From " (single newline before the "From " string) * SYSV "From " with Content-Length: * RMAIL Babyl * MMDF By default, VM uses the Unix "From " format for new folders; you can change this by setting the variable `vm-default-folder-type'. Existing folders will keep their original formats; to convert a folder to a different format, `v'isit the folder in VM and then hit `%'; select the target type and you're done. 9.2 Filing mail into folders Date: June 20, 1998 VM allows you to file mail messages out into folders for later reference. While reading the message you want to save, press the 's' key. VM will prompt you for a mail folder name. Type the folder name you want to save the message in here. To visit a folder of saved messages, press the 'v' key, and enter the folder name in the mini-buffer. You can use completion in the normal way. 9.3. Auto filing mail into folders Date: June 20, 1998 Updated: February 8, 1999 VM allows you to auto-file mail into pre-designated folders. This makes for archiving mailing list and other correspondence very easy. For example: (setq vm-auto-folder-alist '(("Sender:" ("owner-j-body@example.org" . "~/mail/J-BODIES")) ("From:" ("katana@example.com" . "~/mail/ZOCALO")) ("Sender:" ("owner-honda-perf@example.edu" . "~/mail/HONDA")))) You can auto-file messages using any standard mail header you want. To actually do the filing, use the 'A' key. Alternatively, if you try to save a message with 's', the folder defined in `auto-folder-alist' will be used as the default folder, in place of the most-recently-used folder. You may also want to take a look at the variable: `vm-delete-after-archiving'. Setting it to 't' will automatically mark the archived messages for deletion. 9.4. Virtual folders Date: June 20, 1998 Updated: February 8, 1999 One of VM's very powerful features is the ability to create virtual folders. Virtual folders can be used to select certain messages from one or several folders, filter and sort mail, and for various other purposes. Some examples of the use of virtual folders to filter and sort mail are given later, in the section on Filtering and Sorting. Please see the document-string of the `vm-virtual-folder-alist' variable for more information. _________________________________________________________________ _________________________________________________________________ 10. Filtering and Sorting 10.1. Sorting with `vm-auto-archive-messages' Date: June 20, 1998 Updated: April 28, 1999 You can use VM's `vm-auto-folder-alist' to automatically send messages to a default destination. This is described in the previous section. Use the `A' key (bound to `vm-auto-archive-messages') to automatically save messages to their folders. If you'd like this to happen automatically when new mail is received, you can add the `vm-auto-archive-messages' function to `vm-arrived-messages-hook'. If you wanted new mail, upon arrival, to be automatically moved to the folders defined in `vm-auto-message-alist' and then deleted, you could do this: (setq vm-delete-after-archiving t) (defun my-vm-arrived-messages-hook () (vm-auto-archive-messages) (vm-expunge-folder)) (add-hook 'vm-arrived-messages-hook 'my-vm-arrived-messages-hook) 10.2 Automatically generate folder name based on the username of the sender Date: July 25, 1999 Updated: October 19, 1999 Use the code below to automatically generate the folder name to archive the message based on the user name in the From: address. The code will usually match any message. So if you want some messages to go to other folders, put those alist entries ahead of the comment in the code below. (setq vm-auto-folder-alist ;; code to make auto-folder default to the user name of the sender '(("From" ("<\\([^ \t\n\f@%()<>]+\\)[@%]\\([^ \t\n\f<>()]+\\)>" . (buffer-substring (match-beginning 1) (match-end 1))) ("<\\([^>]+\\)>" . (buffer-substring (match-beginning 1) (match-end 1))) ("\\([^ \t\n\f@%()<>]+\\)\\([@%]\\([^ \t\n\f<>()]+\\)\\)?" . (buffer-substring (match-beginning 1) (match-end 1))) )) ) 10.3. Auto-deleting with virtual folders From: Stan Lanning Date: June 20, 1998 Updated: May 16, 2000 Here's my code for auto-deleting spam. ;;; Auto-delete spam mail. ;;; Just set up a virtual folder spec for the auto-delete folder, like this: ;;; ;;; Where it says (inbox) below, you should put ("/the/path/to/your/inbox") ;;; Or use backqoute and the value of vm-primary-inbox (1998 June 20 SOM) ;;; ;;; (setq vm-virtual-folder-alist ;;; (list ;;; '("auto-delete" ;;; ((inbox) ;;; (and (or (unread) (new)) ;;; (or (author "AlphaCONNECT") ;;; (author "credit@usa.net") ;;; (and (author "mailer-daemon@rational.com") ;;; (subject "Account no longer active")) ;;; )))))) (defun vm-auto-delete () "*Mark for deletion any message matched by the auto-delete virtual folder specification." (interactive) (condition-case c (if (and (boundp 'vm-virtual-folder-alist) (assoc "auto-delete" vm-virtual-folder-alist)) (let (n) (save-window-excursion (save-excursion (vm-apply-virtual-folder "auto-delete") (setq n (length vm-message-list)) (if (> n 0) (progn (vm-goto-message 1) (vm-delete-message n))) (vm-quit))) (if (> n 0) (message "%d messages marked for deletion." n) (message "No messages marked for deletion.")))) (error (message "vm-auto-delete error")))) (add-hook 'vm-arrived-messages-hook 'vm-auto-delete) 10.4. Filtering with procmail Date: June 20, 1998 Updated: February 8, 1999 The FAQ for using Procmail with VM is available at http://www.cs.hmc.edu/~smikes/emacs/vm-procmail.html. 10.5. An example virtual-folder method From: Greg A. Woods Date: June 20, 1998 As I mentioned in my posting to bug-vm on Tuesday I've recently started working with virtual folders in VM, and am generally very impressed, but have found some features lacking, namely the poor integration of virtual folders with real folders (i.e. incorporation of new mail isn't dynamic, etc.) and some user-interface features are less than ideal (a [virtual? both?] folders summary window would be great, as would dynamic updating of the "Virtual:Visit" menu (and the "Folder:Visit" one) to show the number of messages in each folder -- it's too easy to ignore mail now!). I've since refined my implementation of workarounds to one of the features I've found lacking: namely I've implemented a hack to automatically incorporate new mail into virtual folders when new mail is incorporated into their underlying buffers and to automatically quit from virtual folders when their underlying folder is closed. These hacks are far from perfect yet -- I assume only one primary "INBOX", and that all virtual folders are derived from this one real folder. I enclose the code here in hopes it will be helpful to someone, and in hopes that it will encourage other users to think about these features and perhaps someone will implement these features in a more integrated way. I've been reading mail using these functions for the past few days and I don't know how I ever managed with the jumble before! (I.e. after I start VM I then immediately hit 'G' to get new mail and open all the virtual folders, then I read mail almost exclusively from the virtual folders, and I switch to INBOX and 'q' before I go to work to close everything at home so I can read from there, and vice versa when coming home; and if I need to read something new quick I use 'g' and read it directly from the INBOX folder. (defvar my-vm-virtual-leftovers-folder "General Delivery" "The name of the virtual folder containing all the messages which are not members of other virtual folders. (It's created after all the others are created by my-vm-visit-all-virtual-folders.)") (defun my-vm-quit-all-virtual-folders () "Quit from all of the virtual folders in vm-virtual-folder-alist." (interactive) (let ((vfolder vm-virtual-folder-alist)) (while vfolder (save-excursion (condition-case error-data (let ((vm-confirm-quit nil)) (set-buffer (concat "(" (car (car vfolder)) ")")) (vm-quit)) (error nil)) (setq vfolder (cdr vfolder)))))) (defun my-vm-visit-all-virtual-folders () "Visit all of the virtual folders in vm-virtual-folder-alist." (interactive) (let ((vfolder vm-virtual-folder-alist)) (while vfolder (let ((vfname (car (car vfolder)))) (if (not (string-equal vfname my-vm-virtual-leftovers-folder)) (vm-visit-virtual-folder vfname)) (setq vfolder (cdr vfolder))))) (vm-visit-virtual-folder my-vm-virtual-leftovers-folder)) (defun my-vm-resync-all-virtual-folders () "Revisit all virtual folders to update them." (interactive) (save-excursion (my-vm-quit-all-virtual-folders) (my-vm-visit-all-virtual-folders))) (defun my-vm-get-new-mail () "Local version of vm-get-new-mail that updates all virtual folders in vm-virtual-folder-alist." (interactive) (save-excursion (my-vm-quit-all-virtual-folders) (set-buffer (vm-get-file-buffer vm-primary-inbox)) (vm-get-new-mail) (my-vm-visit-all-virtual-folders))) ;; This overrides the normal binding of 'G' to vm-sort-messages.... (define-key vm-mode-map "G" 'my-vm-get-new-mail) (defun my-vm-quit () "Local version of vm-quit that quits all virtual buffers if quitting vm-primary-inbox." (interactive) (vm-select-folder-buffer) (if (eq major-mode 'vm-virtual-mode) (vm-quit) (if (string-equal (buffer-file-name) (expand-file-name vm-primary-inbox)) (my-vm-quit-all-virtual-folders)) (vm-quit))) (define-key vm-mode-map "q" 'my-vm-quit) ;; This is the list of virtual folders created by my-vm-visit-all-virtual-folde rs ;; ;; XXX It would be nice to use vm-primary-inbox in some way instead of "INBOX" ;; XXX Wouldn't it? ;; ;; WARNING: these definitions are based on the assumption that VM has ;; been patched to ignore case when comparing selector values to data. ;; (setq vm-virtual-folder-alist ;; note the magic of creating the first element of the alist with ;; a symbol that needs to be eval'ed at assignment time (append (list (list (symbol-value 'my-vm-virtual-leftovers-folder) (list (list "INBOX") '(not (virtual-folder-member))))) '(("automake" (("INBOX") (sender-or-recipient "automake@"))) ("cvs" (("INBOX") (or (sender-or-recipient "bug-cvs@") (sender-or-recipient "info-cvs@")))) ("gnu-emacs" (("INBOX") (or (sender-or-recipient "bug-gnu-emacs@") (sender-or-recipient "gnu-emacs-sources@") (sender-or-recipient "info-gnu-emacs@") (sender-or-recipient "gnu-emacs-bug@")))) ("VM" (("INBOX") (or (sender-or-recipient "bug-vm@") (sender-or-recipient "info-vm@")))) ("exim" (("INBOX") (or (sender-or-recipient "exim-users@") (sender-or-recipient "exim-announce@")))) ("ipfilter" (("INBOX") (sender-or-recipient "ipfilter@"))) ("nanog" (("INBOX") (or (sender-or-recipient "nanog@") (sender-or-recipient "nanog-announce@")))) ("smail3" (("INBOX") (sender-or-recipient "smail3"))) ("vmailer" (("INBOX") (sender-or-recipient "vmailer-testers@"))) ("other-lists" (("INBOX") (or (sender-or-recipient "ssh@") (sender-or-recipient "stk@")))) ("ssh" (("INBOX") (sender-or-recipient "ssh@"))) ("current-users" (("INBOX") (sender-or-recipient "current-users@"))) ("netbsd-bugs" (("INBOX") (or (sender-or-recipient "gnats-bugs@gnats.netbsd.org") (sender-or-recipient "netbsd-bugs@")))) ("netbsd-other" (("INBOX") (or (sender-or-recipient "netbsd-announce@") (sender-or-recipient "netbsd-help@") (sender-or-recipient "netbsd-ports@") (sender-or-recipient "netbsd-users@")))) ("source-changes" (("INBOX") (or (sender-or-recipient "source-changes@") (sender-or-recipient "source@netbsd.org")))) ("netbsd-tech" (("INBOX") (or (sender-or-recipient "tech-install@") (sender-or-recipient "tech-kern@") (sender-or-recipient "tech-net@") (sender-or-recipient "tech-ports@") (sender-or-recipient "tech-security@") (sender-or-recipient "tech-toolchain@") (sender-or-recipient "tech-userlevel@")))) ("port-alpha" (("INBOX") (sender-or-recipient "port-alpha@"))) ("port-arm32" (("INBOX") (sender-or-recipient "port-arm32@"))) ("port-i386" (("INBOX") (sender-or-recipient "port-i386@"))) ("port-pmax" (("INBOX") (sender-or-recipient "port-pmax@"))) ("port-powerpc" (("INBOX") (sender-or-recipient "port-powerpc@"))) ("port-sparc" (("INBOX") (sender-or-recipient "port-sparc@"))) ("port-sun3" (("INBOX") (sender-or-recipient "port-sun3@")))))) 10.6. Another virtual-folder example From: David Bakhash Date: June 20, 1998 I am posting a new way to auto-archive mail. I think it beats how VM does auto-archiving, and for those of you who have taken the trouble to figure out how do do it, well, here's an alternative. More importantly, for those who thought that it was too much trouble to do it before, well now is your chance. It is almost identical to VM's `vm-auto-archive-messages', but different in that it uses virtual folders to sort things out. If you have defined your very own virtual folder selectors in `vm-virtual-folder-alist', then you know how easy VM makes it, and you're already more than half-way there. For example, here's a piece of mine... (setq vm-virtual-folder-alist '(("anneh" (("INBOX") (and (author "anneh") (header "jobslist")))) ("spam" (("INBOX") (or (not (or (recipient "cadet\\|dave") (author "cadet\\|dave\\|mit\.edu\\|anneh") (header "xemacs\.org\\|dismal-users") (subject "\\bmit\\b") (text "\\bmit\\b"))) (header "^X-advertisement")))))) well, now I can use those selectors (like "spam") to archive my messages. Here's how easy it is... 1) add this somewhere in you .vm file: (defun db-vm-auto-archive-messages (arg) "Auto archive messages using applied virtual folders. The prefix arg is meaningless here, unlike in `vm-auto-archive-messages' where it does the following: Prefix arg means to ask user for confirmation before saving each message. Here, you will not be prompted before saving at all. When invoked on marked messages (via vm-next-command-uses-marks), only marked messages are checked against vm-auto-folder-alist. Archiving depends on the value of `db-vm-auto-folder-alist': given each entry in `db-vm-auto-folder-alist', this function will archive messages in the virtual folder which is the car of the entry into the folder which is the cdr of the entry." (interactive "P") (save-excursion (save-window-excursion (flet ((bbdb/vm-update-record (&rest args) nil)) (let ((use-marked (eq last-command 'vm-next-command-uses-marks)) (vm-startup-with-summary nil) ; for efficiency (last-command 'vm-next-command-uses-marks)) (vm-select-folder-buffer) (vm-check-for-killed-summary) (vm-error-if-folder-empty) (if use-marked (vm-create-virtual-folder 'marked) (vm-create-virtual-folder 'unfiled)) (loop for entry in db-vm-auto-folder-alist for selector = (if (stringp (car entry)) (car entry) (symbol-name (car entry))) for folder = (if (cdr entry) (concat (file-truename (or vm-folder-directory default-directory)) (cdr entry))) do (save-excursion (vm-apply-virtual-folder selector) (condition-case nil (progn (vm-mark-all-messages) (if folder (vm-save-message folder) (call-interactively 'vm-delete-message))) (error nil)) (vm-quit)))) (vm-quit))))) ; quit unfiled/marked folder (defvar db-vm-auto-folder-alist nil "*Alist of virtual folder selectors and folder names for auto archiving. \(see `db-vm-auto-archive-messages' for details\) For each entry in the alist, the car must be a symbol or string matching a virtual folder selector defined in `vm-virtual-folder-alist'. The cdr can be any folder name, such as \"spam\" \(understood to be in `vm-folder-directory', otherwise in `default-directory' if `vm-folder-directory' is nil\). If the cdr is `nil', then the messages will be deleted. An example of how to use this variable is: \(setq db-vm-auto-folder-alist '\(\(spam . nil\) \(jobfind . \"MAILING-LISTS\"\) \(spousefind . \"MAILING-LISTS\"\) \(mom . \"MOM\"\)\)\)") (define-key vm-mode-map "A" 'db-vm-auto-archive-messages) 2) read the docs on how to use `db-vm-auto-archive-messages'. Here's an example of what I might put for `db-vm-auto-folder-alist': (setq db-vm-auto-folder-alist '((spam . nil) (anneh . "ANNEH"))) and that's it. for lot's of people, this won't be very hard to do at all, since you've already gone through the trouble of writing your virtual folder selectors, and if you haven't, you'll find that they're quite easy and fun to write. _________________________________________________________________ _________________________________________________________________ 11. VM and Other Programs 11.1. BBDB Date: June 20, 1998 Updated: April 18, 2001 BBDB is a rolodex-like database program for GNU Emacs. BBDB stands for Insidious Big Brother Database, and is not, repeat, *not* an obscure reference to the Buck Rogers TV series. (from the BBDB info file) BBDB was written by Jamie Zawinski, and was being maintained and extended by Matt Simmons. It is now maintained by the BBDB Development Group. The latest version of BBDB can be obtained from http://bbdb.sourceforge.net/ Follow the instructions to build BBDB, including setting the location of the VM source directory if it's not in the default load path. (See the BBDB documentation for more information). After installing BBDB, add the following forms to your startup files: (require 'bbdb) ; may go in .emacs or .vm (bbdb-initialize) ; may go in .emacs or .vm (bbdb-insinuate-vm) ; must go in .vm 11.2. Feedmail Date: June 20, 1998 Updated: February 8, 1999 Feedmail is a versatile emacs-lisp package that allows you to compose mail offline and queue it for later sending. It also easily allows you to write (and keep) draft messages. Feedmail will also let you choose to send mail via an SMTP server, which is nice if there is no mail server on your local host. A copy of feedmail comes with most versions of XEmacs, but the feedmail.el that comes with XEmacs versions older than 20.4 is a pretty old version, and lacks some useful features (such as the variable `feedmail-queue-runner-is-active', useful for conditional tests in mail-send-hook). Recent beta versions of XEmacs (at least 21.0b40 and later) have a recent copy of feedmail.el in the net-utils package. The latest version of feedmail can be found at http://www.carpenter.org/feedmail/ To set up feedmail, follow the instructions in the comments at the head of the feedmail.el file. If you're using feedmail, you may also wish to obtain smtpmail. 11.3. Fetchmail Date: June 20, 1998 Updated: February 8, 1999 If you want to use procmail to filter mail picked up from a POP server, or if you need to pick up mail from an IMAP server, you will need to use a stand alone POP/IMAP client. I recommend Eric Raymond's fetchmail. Fetchmail can be configured to deliver mail to a local SMTP server or directly to VM's spool file. Read about and download fetchmail from the fetchmail home page (http://www.tuxedo.org/~esr/fetchmail/ 11.4. Mailcrypt Date: June 20, 1998 Updated: February 8, 1999 Mailcrypt is an Emacs Lisp package which provides a simple but powerful interface to cryptographic functions for mail and news. More information is available at the Mailcrypt home page (http://www.pobox.com/~lbudney/linux/software/mailcrypt.html). To use mailcrypt with VM, add the following to your .vm file: (require 'mailcrypt) (add-hook 'mail-mode-hook 'mc-install-write-mode) (add-hook 'vm-mode-hook 'mc-install-read-mode) (add-hook 'vm-summary-mode-hook 'mc-install-read-mode) (add-hook 'vm-virtual-mode-hook 'mc-install-read-mode) If you can't use mailcrypt under VM due to an "invalid function error", it's because you have an old version of mailcrypt. Please see the troubleshooting section of this document. 11.5. smtpmail.el Date: June 20, 1998 smtpmail.el is an emacs-lisp package that sends outgoing mail to an SMTP server. This is very useful when the local host doesn't run a mail server (or runs a broken one). All versions of XEmacs ship with smtpmail; GNU Emacs versions later than 19.34 do, as well. If you don't have a copy of smtpmail, you can fetch one from the NT Emacs archive at ftp://ftp.cs.washington.edu/pub/ntemacs/contrib/smtpmail.el 11.6. Supercite (supercite.el) Date: June 20, 1998 Updated: February 8, 1999 Supercite is a package that allows for more flexible citing of included text, filling, and fancy formatted citation lines. Supercite is distributed with GNU Emacs versions 19.28 and later and all XEmacs versions, so you probably already have a copy. To use Supercite, add the following to your .vm file: (require 'supercite) (add-hook 'mail-yank-hooks 'sc-cite-original) _________________________________________________________________ #previous contents _________________________________________________________________ 12. Miscellaneous 12.1. Building vm.elc under NT Date: June 20, 1998 Many NTers out there have problems building vm.elc under NT. It's really not that hard. The Cygnus GNU-Win32 utilities have everything you need, along with Emacs. * Make sure \emacs\bin is in your path. * Make sure the GNU-Cygwin stuff is also in your path. * Edit the VM makefile's shell = command to read sh, not /bin/sh * In the directory you have extracted VM type make. 12.2. How do I convert an MH inbox to a VM inbox? Date: June 20, 1998 Updated: March 31, 1999 MH comes with a program called packf, which converts an MH folder into a MMDF-style folder. VM can read and write MMDF folders, and auto-detects the folder type when you visit them. Fred Wheeler of RPI offers this alternate solution: I used the following commands on MH folder to one VM folder: folder +inbox packmbox > inbox.mbox I don't know the differences between packf and packmbox, but I know this worked. You might want to mention it in case there are people out there who have packmbox but not packf. 12.3. How do I convert a RMAIL folder to a VM folder? Date: June 20, 1998 Updated: February 8, 1999 Use the command `M-x unrmail' on the RMAIL folder. Or, visit the folder in VM and write it out as a 'From_' type folder with `% From_'. 12.4. How do I make VM less flashy? Date: June 20, 1998 Updated: February 8, 1999 If you're switching from RMAIL to VM, or you just want to 'turn it down' a little, you might like to try the following as a staring .vm file: ; Disallow changes to frame and window configuration (setq vm-mutable-frames nil) (setq vm-mutable-windows nil) (setq vm-raise-frame-at-startup nil) ; you may also like this (setq vm-frame-per-composition nil) (setq vm-frame-per-edit nil) ; Turn off the toolbar (setq vm-use-toolbar nil) ; Startup without summary (like RMAIL) (setq vm-startup-with-summary nil) ;(setq vm-startup-with-summary 1) ; start up with summary if there are new ; or unread messages ; Turn off previewing (setq vm-preview-lines nil) ; jump to unread messages before new messages (setq vm-jump-to-new-messages nil) (setq vm-jump-to-unread-messages t) 12.5. What other VM resources are out there? Date: June 20, 1998 VM Add Ons (http://www.gnac.com/~hogan/vm/) contains a collection of .vm (init) files, as well as code hacks to make VM even more powerful. 12.6. How do I make VM load/save big files faster? Date: June 28, 2000 From: Robert Spier You may have noticed that VM is very slow when loading and saving large folders. (Even when using index files.) If you have lots of memory, you may be able to speed this up by increasing XEmacs' garbage collection threshold using: (setq gc-cons-threshold 2000000) This is four times XEmacs' default of 500000. The downside of this, is that XEmacs will suck up much more memory. But if you have lots of memory, the speedup will be quite large, because less garbage collections need to happen. _________________________________________________________________