+;;; MH-E Customization Groups
+
+(defgroup-mh mh-e nil
+ "Emacs interface to the MH mail system.
+MH is the Rand Mail Handler. Other implementations include nmh
+and GNU mailutils."
+ :link '(custom-manual "(mh-e)Top")
+ :group 'mail
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-alias nil
+ "Aliases."
+ :link '(custom-manual "(mh-e)Aliases")
+ :prefix "mh-alias-"
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-folder nil
+ "Organizing your mail with folders."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Folders")
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-folder-selection nil
+ "Folder selection."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Folder Selection")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-identity nil
+ "Identities."
+ :link '(custom-manual "(mh-e)Identities")
+ :prefix "mh-identity-"
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-inc nil
+ "Incorporating your mail."
+ :prefix "mh-inc-"
+ :link '(custom-manual "(mh-e)Incorporating Mail")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-junk nil
+ "Dealing with junk mail."
+ :link '(custom-manual "(mh-e)Junk")
+ :prefix "mh-junk-"
+ :group 'mh-e
+ :package-version '(MH-E . "7.3"))
+
+(defgroup-mh mh-letter nil
+ "Editing a draft."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Editing Drafts")
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-ranges nil
+ "Ranges."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Ranges")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-scan-line-formats nil
+ "Scan line formats."
+ :link '(custom-manual "(mh-e)Scan Line Formats")
+ :prefix "mh-"
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-search nil
+ "Searching."
+ :link '(custom-manual "(mh-e)Searching")
+ :prefix "mh-search-"
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-sending-mail nil
+ "Sending mail."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Sending Mail")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-sequences nil
+ "Sequences."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Sequences")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-show nil
+ "Reading your mail."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Reading Mail")
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-speedbar nil
+ "The speedbar."
+ :prefix "mh-speed-"
+ :link '(custom-manual "(mh-e)Speedbar")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-thread nil
+ "Threading."
+ :prefix "mh-thread-"
+ :link '(custom-manual "(mh-e)Threading")
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-tool-bar nil
+ "The tool bar"
+ :link '(custom-manual "(mh-e)Tool Bar")
+ :prefix "mh-"
+ :group 'mh-e
+ :package-version '(MH-E . "8.0"))
+
+(defgroup-mh mh-hooks nil
+ "MH-E hooks."
+ :link '(custom-manual "(mh-e)Top")
+ :prefix "mh-"
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+(defgroup-mh mh-faces nil
+ "Faces used in MH-E."
+ :link '(custom-manual "(mh-e)Top")
+ :prefix "mh-"
+ :group 'faces
+ :group 'mh-e
+ :package-version '(MH-E . "7.1"))
+
+\f
+
+;;; MH-E Customization
+
+;; See Variant Support, above, for mh-e group.
+
+;;; Aliases (:group 'mh-alias)
+
+(defcustom-mh mh-alias-completion-ignore-case-flag t
+ "*Non-nil means don't consider case significant in MH alias completion.
+
+As MH ignores case in the aliases, so too does MH-E. However, you
+may turn off this option to make case significant which can be
+used to segregate completion of your aliases. You might use
+lowercase for mailing lists and uppercase for people."
+ :type 'boolean
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-expand-aliases-flag nil
+ "*Non-nil means to expand aliases entered in the minibuffer.
+
+In other words, aliases entered in the minibuffer will be
+expanded to the full address in the message draft. By default,
+this expansion is not performed."
+ :type 'boolean
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-flash-on-comma t
+ "*Specify whether to flash address or warn on translation.
+
+This option controls the behavior when a [comma] is pressed while
+entering aliases or addresses. The default setting flashes the
+address associated with an address in the minibuffer briefly, but
+does not display a warning if the alias is not found."
+ :type '(choice (const :tag "Flash but Don't Warn If No Alias" t)
+ (const :tag "Flash and Warn If No Alias" 1)
+ (const :tag "Don't Flash Nor Warn If No Alias" nil))
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-insert-file nil
+ "*Filename used to store a new MH-E alias.
+
+The default setting of this option is \"Use Aliasfile Profile
+Component\". This option can also hold the name of a file or a
+list a file names. If this option is set to a list of file names,
+or the \"Aliasfile:\" profile component contains more than one file
+name, MH-E will prompt for one of them when MH-E adds an alias."
+ :type '(choice (const :tag "Use Aliasfile Profile Component" nil)
+ (file :tag "Alias File")
+ (repeat :tag "List of Alias Files" file))
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-insertion-location 'sorted
+ "Specifies where new aliases are entered in alias files.
+
+This option is set to \"Alphabetical\" by default. If you organize
+your alias file in other ways, then adding aliases to the \"Top\"
+or \"Bottom\" of your alias file might be more appropriate."
+ :type '(choice (const :tag "Alphabetical" sorted)
+ (const :tag "Top" top)
+ (const :tag "Bottom" bottom))
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-local-users t
+ "*If on, local users are added to alias completion.
+
+Aliases are created from \"/etc/passwd\" entries with a user ID
+larger than a magical number, typically 200. This can be a handy
+tool on a machine where you and co-workers exchange messages.
+These aliases have the form \"local.first.last\" if a real name is
+present in the password file. Otherwise, the alias will have the
+form \"local.login\".
+
+If you're on a system with thousands of users you don't know, and
+the loading of local aliases slows MH-E down noticeably, then
+turn this option off.
+
+This option also takes a string which is executed to generate the
+password file. For example, use \"ypcat passwd\" to obtain the
+NIS password file."
+ :type '(choice (boolean) (string))
+ :group 'mh-alias
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-alias-local-users-prefix "local."
+ "*String prefixed to the real names of users from the password file.
+This option can also be set to \"Use Login\".
+
+For example, consider the following password file entry:
+
+ psg:x:1000:1000:Peter S Galbraith,,,:/home/psg:/bin/tcsh
+
+The following settings of this option will produce the associated
+aliases:
+
+ \"local.\" local.peter.galbraith
+ \"\" peter.galbraith
+ Use Login psg
+
+This option has no effect if variable `mh-alias-local-users' is
+turned off."
+ :type '(choice (const :tag "Use Login" nil)
+ (string))
+ :group 'mh-alias
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-alias-passwd-gecos-comma-separator-flag t
+ "*Non-nil means the gecos field in the password file uses a comma separator.
+
+In the example in `mh-alias-local-users-prefix', commas are used
+to separate different values within the so-called gecos field.
+This is a fairly common usage. However, in the rare case that the
+gecos field in your password file is not separated by commas and
+whose contents may contain commas, you can turn this option off."
+ :type 'boolean
+ :group 'mh-alias
+ :package-version '(MH-E . "7.4"))
+
+;;; Organizing Your Mail with Folders (:group 'mh-folder)
+
+(defcustom-mh mh-new-messages-folders t
+ "Folders searched for the \"unseen\" sequence.
+
+Set this option to \"Inbox\" to search the \"+inbox\" folder or
+\"All\" to search all of the top level folders. Otherwise, list
+the folders that should be searched with the \"Choose Folders\"
+menu item.
+
+See also `mh-recursive-folders-flag'."
+ :type '(choice (const :tag "Inbox" t)
+ (const :tag "All" nil)
+ (repeat :tag "Choose Folders" (string :tag "Folder")))
+ :group 'mh-folder
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-ticked-messages-folders t
+ "Folders searched for `mh-tick-seq'.
+
+Set this option to \"Inbox\" to search the \"+inbox\" folder or
+\"All\" to search all of the top level folders. Otherwise, list
+the folders that should be searched with the \"Choose Folders\"
+menu item.
+
+See also `mh-recursive-folders-flag'."
+ :type '(choice (const :tag "Inbox" t)
+ (const :tag "All" nil)
+ (repeat :tag "Choose Folders" (string :tag "Folder")))
+ :group 'mh-folder
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-large-folder 200
+ "The number of messages that indicates a large folder.
+
+If a folder is deemed to be large, that is the number of messages
+in it exceed this value, then confirmation is needed when it is
+visited. Even when `mh-show-threads-flag' is non-nil, the folder
+is not automatically threaded, if it is large. If set to nil all
+folders are treated as if they are small."
+ :type '(choice (const :tag "No Limit") integer)
+ :group 'mh-folder
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-recenter-summary-flag nil
+ "*Non-nil means to recenter the summary window.
+
+If this option is turned on, recenter the summary window when the
+show window is toggled off."
+ :type 'boolean
+ :group 'mh-folder
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-recursive-folders-flag nil
+ "*Non-nil means that commands which operate on folders do so recursively."
+ :type 'boolean
+ :group 'mh-folder
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-sortm-args nil
+ "*Additional arguments for \"sortm\"\\<mh-folder-mode-map>.
+
+This option is consulted when a prefix argument is used with
+\\[mh-sort-folder]. Normally default arguments to \"sortm\" are
+specified in the MH profile. This option may be used to provide
+an alternate view. For example, \"'(\"-nolimit\" \"-textfield\"
+\"subject\")\" is a useful setting."
+ :type 'string
+ :group 'mh-folder
+ :package-version '(MH-E . "8.0"))
+
+;;; Folder Selection (:group 'mh-folder-selection)
+
+(defcustom-mh mh-default-folder-for-message-function nil
+ "Function to select a default folder for refiling or \"Fcc:\".
+
+When this function is called, the current buffer contains the message
+being refiled and point is at the start of the message. This function
+should return the default folder as a string with a leading \"+\"
+sign. It can also return nil so that the last folder name is used as
+the default, or an empty string to suppress the default entirely."
+ :type 'function
+ :group 'mh-folder-selection
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-default-folder-list nil
+ "*List of addresses and folders.
+
+The folder name associated with the first address found in this
+list is used as the default for `mh-refile-msg' and similar
+functions. Each element in this list contains a \"Check Recipient\"
+item. If this item is turned on, then the address is checked
+against the recipient instead of the sender. This is useful for
+mailing lists.
+
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
+for more information."
+ :type '(repeat (list (regexp :tag "Address")
+ (string :tag "Folder")
+ (boolean :tag "Check Recipient")))
+ :group 'mh-folder-selection
+ :package-version '(MH-E . "7.2"))
+
+(defcustom-mh mh-default-folder-must-exist-flag t
+ "*Non-nil means guessed folder name must exist to be used.
+
+If the derived folder does not exist, and this option is on, then
+the last folder name used is suggested. This is useful if you get
+mail from various people for whom you have an alias, but file
+them all in the same project folder.
+
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
+for more information."
+ :type 'boolean
+ :group 'mh-folder-selection
+ :package-version '(MH-E . "7.2"))
+
+(defcustom-mh mh-default-folder-prefix ""
+ "*Prefix used for folder names generated from aliases.
+The prefix is used to prevent clutter in your mail directory.
+
+See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
+for more information."
+ :type 'string
+ :group 'mh-folder-selection
+ :package-version '(MH-E . "7.2"))
+
+;;; Identities (:group 'mh-identity)
+
+(eval-and-compile
+ (unless (fboundp 'mh-identity-make-menu-no-autoload)
+ (defun mh-identity-make-menu-no-autoload ()
+ "Temporary definition.
+Real definition will take effect when mh-identity is loaded."
+ nil)))
+
+(defcustom-mh mh-identity-list nil
+ "*List of identities.
+
+To customize this option, click on the \"INS\" button and enter a label
+such as \"Home\" or \"Work\". Then click on the \"INS\" button with the
+label \"Add at least one item below\". Then choose one of the items in
+the \"Value Menu\".
+
+You can specify an alternate \"From:\" header field using the \"From
+Field\" menu item. You must include a valid email address. A standard
+format is \"First Last <login@@host.domain>\". If you use an initial
+with a period, then you must quote your name as in '\"First I. Last\"
+<login@@host.domain>'. People usually list the name of the company
+where they work using the \"Organization Field\" menu item. Set any
+arbitrary header field and value in the \"Other Field\" menu item.
+Unless the header field is a standard one, precede the name of your
+field's label with \"X-\", as in \"X-Fruit-of-the-Day:\". The value of
+\"Attribution Verb\" overrides the setting of
+`mh-extract-from-attribution-verb'. Set your signature with the
+\"Signature\" menu item. You can specify the contents of
+`mh-signature-file-name', a file, or a function. Specify a different
+key to sign or encrypt messages with the \"GPG Key ID\" menu item.
+
+You can select the identities you have added via the menu called
+\"Identity\" in the MH-Letter buffer. You can also use
+\\[mh-insert-identity]. To clear the fields and signature added by the
+identity, select the \"None\" identity.
+
+The \"Identity\" menu contains two other items to save you from having
+to set the identity on every message. The menu item \"Set Default for
+Session\" can be used to set the default identity to the current
+identity until you exit Emacs. The menu item \"Save as Default\" sets
+the option `mh-identity-default' to the current identity setting. You
+can also customize the `mh-identity-default' option in the usual
+fashion."
+ :type '(repeat (list :tag ""
+ (string :tag "Label")
+ (repeat :tag "Add at least one item below"
+ (choice
+ (cons :tag "From Field"
+ (const "From")
+ (string :tag "Value"))
+ (cons :tag "Organization Field"
+ (const "Organization")
+ (string :tag "Value"))
+ (cons :tag "Other Field"
+ (string :tag "Field")
+ (string :tag "Value"))
+ (cons :tag "Attribution Verb"
+ (const ":attribution-verb")
+ (string :tag "Value"))
+ (cons :tag "Signature"
+ (const :tag "Signature"
+ ":signature")
+ (choice
+ (const :tag "mh-signature-file-name"
+ nil)
+ (file)
+ (function)))
+ (cons :tag "GPG Key ID"
+ (const :tag "GPG Key ID"
+ ":pgg-default-user-id")
+ (string :tag "Value"))))))
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (mh-identity-make-menu-no-autoload))
+ :group 'mh-identity
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-auto-fields-list nil
+ "List of recipients for which header lines are automatically inserted.
+
+This option can be used to set the identity depending on the
+recipient. To customize this option, click on the \"INS\" button and
+enter a regular expression for the recipient's address. Click on the
+\"INS\" button with the \"Add at least one item below\" label. Then choose
+one of the items in the \"Value Menu\".
+
+The \"Identity\" menu item is used to select an identity from those
+configured in `mh-identity-list'. All of the information for that
+identity will be added if the recipient matches. The \"Fcc Field\" menu
+item is used to select a folder that is used in the \"Fcc:\" header.
+When you send the message, MH will put a copy of your message in this
+folder. The \"Mail-Followup-To Field\" menu item is used to insert an
+\"Mail-Followup-To:\" header field with the recipients you provide. If
+the recipient's mail user agent supports this header field (as nmh
+does), then their replies will go to the addresses listed. This is
+useful if their replies go both to the list and to you and you don't
+have a mechanism to suppress duplicates. If you reply to someone not
+on the list, you must either remove the \"Mail-Followup-To:\" field, or
+ensure the recipient is also listed there so that he receives replies
+to your reply. Other header fields may be added using the \"Other
+Field\" menu item.
+
+These fields can only be added after the recipient is known. Once the
+header contains one or more recipients, run the
+\\[mh-insert-auto-fields] command or choose the \"Identity -> Insert
+Auto Fields\" menu item to insert these fields manually. However, you
+can just send the message and the fields will be added automatically.
+You are given a chance to see these fields and to confirm them before
+the message is actually sent. You can do away with this confirmation
+by turning off the option `mh-auto-fields-prompt-flag'.
+
+You should avoid using the same header field in `mh-auto-fields-list'
+and `mh-identity-list' definitions that may apply to the same message
+as the result is undefined."
+ :type `(repeat
+ (list :tag ""
+ (string :tag "Recipient")
+ (repeat :tag "Add at least one item below"
+ (choice
+ (cons :tag "Identity"
+ (const ":identity")
+ ,(append
+ '(radio)
+ (mapcar
+ (function (lambda (arg) `(const ,arg)))
+ (mapcar 'car mh-identity-list))))
+ (cons :tag "Fcc Field"
+ (const "fcc")
+ (string :tag "Value"))
+ (cons :tag "Mail-Followup-To Field"
+ (const "Mail-Followup-To")
+ (string :tag "Value"))
+ (cons :tag "Other Field"
+ (string :tag "Field")
+ (string :tag "Value"))))))
+ :group 'mh-identity
+ :package-version '(MH-E . "7.3"))
+
+(defcustom-mh mh-auto-fields-prompt-flag t
+ "*Non-nil means to prompt before sending if fields inserted.
+See `mh-auto-fields-list'."
+ :type 'boolean
+ :group 'mh-identity
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-identity-default nil
+ "Default identity to use when `mh-letter-mode' is called.
+See `mh-identity-list'."
+ :type (append
+ '(radio)
+ (cons '(const :tag "None" nil)
+ (mapcar (function (lambda (arg) `(const ,arg)))
+ (mapcar 'car mh-identity-list))))
+ :group 'mh-identity
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-identity-handlers
+ '(("From" . mh-identity-handler-top)
+ (":default" . mh-identity-handler-bottom)
+ (":attribution-verb" . mh-identity-handler-attribution-verb)
+ (":signature" . mh-identity-handler-signature)
+ (":pgg-default-user-id" . mh-identity-handler-gpg-identity))
+ "Handler functions for fields in `mh-identity-list'.
+
+This option is used to change the way that fields, signatures,
+and attributions in `mh-identity-list' are added. To customize
+`mh-identity-handlers', replace the name of an existing handler
+function associated with the field you want to change with the
+name of a function you have written. You can also click on an
+\"INS\" button and insert a field of your choice and the name of
+the function you have written to handle it.
+
+The \"Field\" field can be any field that you've used in your
+`mh-identity-list'. The special fields \":attribution-verb\",
+\":signature\", or \":pgg-default-user-id\" are used for the
+`mh-identity-list' choices \"Attribution Verb\", \"Signature\", and
+\"GPG Key ID\" respectively.
+
+The handler associated with the \":default\" field is used when no
+other field matches.
+
+The handler functions are passed two or three arguments: the
+FIELD itself (for example, \"From\"), or one of the special
+fields (for example, \":signature\"), and the ACTION 'remove or
+'add. If the action is 'add, an additional argument
+containing the VALUE for the field is given."
+ :type '(repeat (cons (string :tag "Field") function))
+ :group 'mh-identity
+ :package-version '(MH-E . "8.0"))
+
+;;; Incorporating Your Mail (:group 'mh-inc)
+
+(defcustom-mh mh-inc-prog "inc"
+ "*Program to incorporate new mail into a folder.
+
+This program generates a one-line summary for each of the new
+messages. Unless it is an absolute pathname, the file is assumed
+to be in the `mh-progs' directory. You may also link a file to
+\"inc\" that uses a different format. You'll then need to modify
+several scan line format variables appropriately."
+ :type 'string
+ :group 'mh-inc
+ :package-version '(MH-E . "6.0"))
+
+(eval-and-compile
+ (unless (fboundp 'mh-inc-spool-make-no-autoload)
+ (defun mh-inc-spool-make-no-autoload ()
+ "Temporary definition.
+Real definition will take effect when mh-inc is loaded."
+ nil)))
+
+(defcustom-mh mh-inc-spool-list nil
+ "*Alternate spool files.
+
+You can use the `mh-inc-spool-list' variable to direct MH-E to
+retrieve mail from arbitrary spool files other than your system
+mailbox, file it in folders other than your \"+inbox\", and assign
+key bindings to incorporate this mail.
+
+Suppose you are subscribed to the \"mh-e-devel\" mailing list and
+you use \"procmail\" to filter this mail into \"~/mail/mh-e\" with
+the following recipe in \".procmailrc\":
+
+ MAILDIR=$HOME/mail
+ :0:
+ * ^From mh-e-devel-admin@stop.mail-abuse.org
+ mh-e
+
+In order to incorporate \"~/mail/mh-e\" into \"+mh-e\" with an
+\"I m\" (mh-inc-spool-mh-e) command, customize this option, and click
+on the \"INS\" button. Enter a \"Spool File\" of \"~/mail/mh-e\", a
+\"Folder\" of \"mh-e\", and a \"Key Binding\" of \"m\".
+
+You can use \"xbuffy\" to automate the incorporation of this mail
+using the Emacs 22 command \"emacsclient\" as follows:
+
+ box ~/mail/mh-e
+ title mh-e
+ origMode
+ polltime 10
+ headertime 0
+ command emacsclient --eval '(mh-inc-spool-mh-e)'
+
+In XEmacs, the command \"gnuclient\" is used in a similar
+fashion."
+ :type '(repeat (list (file :tag "Spool File")
+ (string :tag "Folder")
+ (character :tag "Key Binding")))
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (mh-inc-spool-make-no-autoload))
+ :group 'mh-inc
+ :package-version '(MH-E . "7.3"))
+
+;;; Dealing with Junk Mail (:group 'mh-junk)
+
+(defvar mh-junk-choice nil
+ "Chosen spam fighting program.")
+
+;; Available spam filter interfaces
+(defvar mh-junk-function-alist
+ '((spamassassin mh-spamassassin-blacklist mh-spamassassin-whitelist)
+ (bogofilter mh-bogofilter-blacklist mh-bogofilter-whitelist)
+ (spamprobe mh-spamprobe-blacklist mh-spamprobe-whitelist))
+ "Available choices of spam programs to use.
+
+This is an alist. For each element there are functions that
+blacklist a message as spam and whitelist a message incorrectly
+classified as spam.")
+
+(defun mh-junk-choose (symbol value)
+ "Choose spam program to use.
+
+The function is always called with SYMBOL bound to
+`mh-junk-program' and VALUE bound to the new value of
+`mh-junk-program'. The function sets the variable
+`mh-junk-choice' in addition to `mh-junk-program'."
+ (set symbol value) ;XXX shouldn't this be set-default?
+ (setq mh-junk-choice
+ (or value
+ (loop for element in mh-junk-function-alist
+ until (executable-find (symbol-name (car element)))
+ finally return (car element)))))
+
+(defcustom-mh mh-junk-background nil
+ "If on, spam programs are run in background.
+
+By default, the programs are run in the foreground, but this can
+be slow when junking large numbers of messages. If you have
+enough memory or don't junk that many messages at the same time,
+you might try turning on this option."
+ :type '(choice (const :tag "Off" nil)
+ (const :tag "On" 0))
+ :group 'mh-junk
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-junk-disposition nil
+ "Disposition of junk mail."
+ :type '(choice (const :tag "Delete Spam" nil)
+ (string :tag "Spam Folder"))
+ :group 'mh-junk
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-junk-program nil
+ "Spam program that MH-E should use.
+
+The default setting of this option is \"Auto-detect\" which means
+that MH-E will automatically choose one of SpamAssassin,
+bogofilter, or SpamProbe in that order. If, for example, you have
+both SpamAssassin and bogofilter installed and you want to use
+bogofilter, then you can set this option to \"Bogofilter\"."
+ :type '(choice (const :tag "Auto-detect" nil)
+ (const :tag "SpamAssassin" spamassassin)
+ (const :tag "Bogofilter" bogofilter)
+ (const :tag "SpamProbe" spamprobe))
+ :set 'mh-junk-choose
+ :group 'mh-junk
+ :package-version '(MH-E . "7.3"))
+
+;;; Editing a Draft (:group 'mh-letter)
+
+(defcustom-mh mh-compose-insertion (if (locate-library "mml") 'mml 'mh)
+ "Type of tags used when composing MIME messages.
+
+In addition to MH-style directives, MH-E also supports MML (MIME
+Meta Language) tags. (see Info node `(emacs-mime)Composing').
+This option can be used to choose between them. By default, this
+option is set to \"MML\" if it is supported since it provides a
+lot more functionality. This option can also be set to \"MH\" if
+MH-style directives are preferred."
+ :type '(choice (const :tag "MML" mml)
+ (const :tag "MH" mh))
+ :group 'mh-letter
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-compose-skipped-header-fields
+ '("From" "Organization" "References" "In-Reply-To"
+ "X-Face" "Face" "X-Image-URL" "X-Mailer")
+ "List of header fields to skip over when navigating in draft."
+ :type '(repeat (string :tag "Field"))
+ :group 'mh-letter
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-compose-space-does-completion-flag nil
+ "*Non-nil means \\<mh-letter-mode-map>\\[mh-letter-complete-or-space] does completion in message header."
+ :type 'boolean
+ :group 'mh-letter
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-delete-yanked-msg-window-flag nil
+ "*Non-nil means delete any window displaying the message.
+
+This deletes the window containing the original message after
+yanking it with \\<mh-letter-mode-map>\\[mh-yank-cur-msg] to make
+more room on your screen for your reply."
+ :type 'boolean
+ :group 'mh-letter
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-extract-from-attribution-verb "wrote:"
+ "*Verb to use for attribution when a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
+
+The attribution consists of the sender's name and email address
+followed by the content of this option. This option can be set to
+\"wrote:\", \"a écrit:\", and \"schrieb:\". You can also use the
+\"Custom String\" menu item to enter your own verb."
+ :type '(choice (const "wrote:")
+ (const "a écrit:")
+ (const "schrieb:")
+ (string :tag "Custom String"))
+ :group 'mh-letter
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-ins-buf-prefix "> "
+ "*String to put before each line of a yanked or inserted message.
+
+The prefix \"> \" is the default setting of this option. I
+suggest that you not modify this option since it is used by many
+mailers and news readers: messages are far easier to read if
+several included messages have all been indented by the same
+string.
+
+This prefix is not inserted if you use one of the supercite
+flavors of `mh-yank-behavior' or you have added a
+`mail-citation-hook'."
+ :type 'string
+ :group 'mh-letter
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-letter-complete-function 'ispell-complete-word
+ "*Function to call when completing outside of address or folder fields.
+
+In the body of the message,
+\\<mh-letter-mode-map>\\[mh-letter-complete] runs this function,
+which is set to \"ispell-complete-word\" by default."
+ :type '(choice function (const nil))
+ :group 'mh-letter
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-letter-fill-column 72
+ "*Fill column to use in MH Letter mode.
+
+By default, this option is 72 to allow others to quote your
+message without line wrapping."
+ :type 'integer
+ :group 'mh-letter
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-mml-method-default (if mh-pgp-support-flag "pgpmime" "none")
+ "Default method to use in security tags.
+
+This option is used to select between a variety of mail security
+mechanisms. The default is \"PGP (MIME)\" if it is supported\;
+otherwise, the default is \"None\". Other mechanisms include
+vanilla \"PGP\" and \"S/MIME\".
+
+The `pgg' customization group may have some settings which may
+interest you (see Info node `(pgg)').
+
+In particular, I turn on the option `pgg-encrypt-for-me' so that
+all messages I encrypt are encrypted with my public key as well.
+If you keep a copy of all of your outgoing mail with a \"Fcc:\"
+header field, this setting is vital so that you can read the mail
+you write!"
+ :type '(choice (const :tag "PGP (MIME)" "pgpmime")
+ (const :tag "PGP" "pgp")
+ (const :tag "S/MIME" "smime")
+ (const :tag "None" "none"))
+ :group 'mh-letter
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-signature-file-name "~/.signature"
+ "*Source of user's signature.
+
+By default, the text of your signature is taken from the file
+\"~/.signature\". You can read from other sources by changing this
+option. This file may contain a vCard in which case an attachment is
+added with the vCard.
+
+This option may also be a symbol, in which case that function is
+called. You may not want a signature separator to be added for you;
+instead you may want to insert one yourself. Options that you may find
+useful to do this include `mh-signature-separator' (when inserting a
+signature separator) and `mh-signature-separator-regexp' (for finding
+said separator). The function `mh-signature-separator-p', which
+reports t if the buffer contains a separator, may be useful as well.
+
+The signature is inserted into your message with the command
+\\<mh-letter-mode-map>\\[mh-insert-signature] or with the option
+`mh-identity-list'."
+ :type 'file
+ :group 'mh-letter
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-signature-separator-flag t
+ "*Non-nil means a signature separator should be inserted.
+
+It is not recommended that you change this option since various
+mail user agents, including MH-E, use the separator to present
+the signature differently, and to suppress the signature when
+replying or yanking a letter into a draft."
+ :type 'boolean
+ :group 'mh-letter
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-x-face-file "~/.face"
+ "*File containing face header field to insert in outgoing mail.
+
+If the file starts with either of the strings \"X-Face:\", \"Face:\"
+or \"X-Image-URL:\" then the contents are added to the message header
+verbatim. Otherwise it is assumed that the file contains the value of
+the \"X-Face:\" header field.
+
+The \"X-Face:\" header field, which is a low-resolution, black and
+white image, can be generated using the \"compface\" command (see URL
+`ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z'). The
+\"Online X-Face Converter\" is a useful resource for quick conversion
+of images into \"X-Face:\" header fields (see URL
+`http://www.dairiki.org/xface/').
+
+Use the \"make-face\" script to convert a JPEG image to the higher
+resolution, color, \"Face:\" header field (see URL
+`http://quimby.gnus.org/circus/face/make-face').
+
+The URL of any image can be used for the \"X-Image-URL:\" field and no
+processing of the image is required.
+
+To prevent the setting of any of these header fields, either set
+`mh-x-face-file' to nil, or simply ensure that the file defined by
+this option doesn't exist."
+ :type 'file
+ :group 'mh-letter
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-yank-behavior 'attribution
+ "*Controls which part of a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
+
+To include the entire message, including the entire header, use
+\"Body and Header\". Use \"Body\" to yank just the body without
+the header. To yank only the portion of the message following the
+point, set this option to \"Below Point\".
+
+Choose \"Invoke supercite\" to pass the entire message and header
+through supercite.
+
+If the \"Body With Attribution\" setting is used, then the
+message minus the header is yanked and a simple attribution line
+is added at the top using the value of the option
+`mh-extract-from-attribution-verb'. This is the default.
+
+If the \"Invoke supercite\" or \"Body With Attribution\" settings
+are used, the \"-noformat\" argument is passed to the \"repl\"
+program to override a \"-filter\" or \"-format\" argument. These
+settings also have \"Automatically\" variants that perform the
+action automatically when you reply so that you don't need to use
+\\[mh-yank-cur-msg] at all. Note that this automatic action is
+only performed if the show buffer matches the message being
+replied to. People who use the automatic variants tend to turn on
+the option `mh-delete-yanked-msg-window-flag' as well so that the
+show window is never displayed.
+
+If the show buffer has a region, the option `mh-yank-behavior' is
+ignored unless its value is one of Attribution variants in which
+case the attribution is added to the yanked region.
+
+If this option is set to one of the supercite flavors, the hook
+`mail-citation-hook' is ignored and `mh-ins-buf-prefix' is not
+inserted."
+ :type '(choice (const :tag "Body and Header" t)
+ (const :tag "Body" body)
+ (const :tag "Below Point" nil)
+ (const :tag "Invoke supercite" supercite)
+ (const :tag "Invoke supercite, Automatically" autosupercite)
+ (const :tag "Body With Attribution" attribution)
+ (const :tag "Body With Attribution, Automatically"
+ autoattrib))
+ :group 'mh-letter
+ :package-version '(MH-E . "8.0"))
+
+;;; Ranges (:group 'mh-ranges)
+
+(defcustom-mh mh-interpret-number-as-range-flag t
+ "*Non-nil means interpret a number as a range.
+
+Since one of the most frequent ranges used is \"last:N\", MH-E
+will interpret input such as \"200\" as \"last:200\" if this
+option is on (which is the default). If you need to scan just the
+message 200, then use the range \"200:200\"."
+ :type 'boolean
+ :group 'mh-ranges
+ :package-version '(MH-E . "7.4"))
+
+;;; Scan Line Formats (:group 'mh-scan-line-formats)
+
+(eval-and-compile
+ (unless (fboundp 'mh-adaptive-cmd-note-flag-check)
+ (defun mh-adaptive-cmd-note-flag-check (symbol value)
+ "Temporary definition.
+Real definition, below, uses variables that aren't defined yet."
+ (set-default symbol value))))
+
+(defcustom-mh mh-adaptive-cmd-note-flag t
+ "*Non-nil means that the message number width is determined dynamically.
+
+If you've created your own format to handle long message numbers,
+you'll be pleased to know you no longer need it since MH-E adapts its
+internal format based upon the largest message number if this option
+is on (the default). This option may only be turned on when
+`mh-scan-format-file' is set to \"Use MH-E scan Format\".
+
+If you prefer fixed-width message numbers, turn off this option and
+call `mh-set-cmd-note' with the width specified by your format file
+\(see `mh-scan-format-file'). For example, the default width is 4, so
+you would use \"(mh-set-cmd-note 4)\"."
+ :type 'boolean
+ :group 'mh-scan-line-formats
+ :set 'mh-adaptive-cmd-note-flag-check
+ :package-version '(MH-E . "7.0"))
+
+(defun mh-scan-format-file-check (symbol value)
+ "Check if desired setting is legal.
+Throw an error if user tries to set `mh-scan-format-file' to
+anything but t when `mh-adaptive-cmd-note-flag' is on. Otherwise,
+set SYMBOL to VALUE."
+ (if (and (not (eq value t))
+ mh-adaptive-cmd-note-flag)
+ (error "%s %s" "You must turn off `mh-adaptive-cmd-note-flag'"
+ "unless you use \"Use MH-E scan Format\"")
+ (set-default symbol value)))
+
+(defcustom-mh mh-scan-format-file t
+ "Specifies the format file to pass to the scan program.
+
+The default setting for this option is \"Use MH-E scan Format\". This
+means that the format string will be taken from the either
+`mh-scan-format-mh' or `mh-scan-format-nmh' depending on whether MH or
+nmh (or GNU mailutils) is in use. This setting also enables you to
+turn on the `mh-adaptive-cmd-note-flag' option.
+
+You can also set this option to \"Use Default scan Format\" to get the
+same output as you would get if you ran \"scan\" from the shell. If
+you have a format file that you want MH-E to use but not MH, you can
+set this option to \"Specify a scan Format File\" and enter the name
+of your format file.
+
+If you change the format of the scan lines you'll need to tell MH-E
+how to parse the new format. As you will see, quite a lot of variables
+are involved to do that. Use \"\\[apropos] RET mh-scan.*regexp\" to
+obtain a list of these variables. You will also have to call
+`mh-set-cmd-note' if your notations are not in column 4 (columns in
+Emacs start with 0)."
+ :type '(choice (const :tag "Use MH-E scan Format" t)
+ (const :tag "Use Default scan Format" nil)
+ (file :tag "Specify a scan Format File"))
+ :group 'mh-scan-line-formats
+ :set 'mh-scan-format-file-check
+ :package-version '(MH-E . "6.0"))
+
+(defun mh-adaptive-cmd-note-flag-check (symbol value)
+ "Check if desired setting is legal.
+Throw an error if user tries to turn on
+`mh-adaptive-cmd-note-flag' when `mh-scan-format-file' isn't t.
+Otherwise, set SYMBOL to VALUE."
+ (if (and value
+ (not (eq mh-scan-format-file t)))
+ (error "%s %s" "Can't turn on unless `mh-scan-format-file'"
+ "is set to \"Use MH-E scan Format\"")
+ (set-default symbol value)))
+
+(defcustom-mh mh-scan-prog "scan"
+ "*Program used to scan messages.
+
+The name of the program that generates a listing of one line per
+message is held in this option. Unless this variable contains an
+absolute pathname, it is assumed to be in the `mh-progs'
+directory. You may link another program to `scan' (see
+\"mh-profile(5)\") to produce a different type of listing."
+ :type 'string
+ :group 'mh-scan-line-formats
+ :package-version '(MH-E . "6.0"))
+(make-variable-buffer-local 'mh-scan-prog)
+
+;;; Searching (:group 'mh-search)
+
+(defcustom-mh mh-search-program nil
+ "Search program that MH-E shall use.
+
+The default setting of this option is \"Auto-detect\" which means
+that MH-E will automatically choose one of swish++, swish-e,
+mairix, namazu, pick and grep in that order. If, for example, you
+have both swish++ and mairix installed and you want to use
+mairix, then you can set this option to \"mairix\".
+
+More information about setting up an indexing program to use with
+MH-E can be found in the documentation of `mh-search'."
+ :type '(choice (const :tag "Auto-detect" nil)
+ (const :tag "swish++" swish++)
+ (const :tag "swish-e" swish)
+ (const :tag "mairix" mairix)
+ (const :tag "namazu" namazu)
+ (const :tag "pick" pick)
+ (const :tag "grep" grep))
+ :group 'mh-search
+ :package-version '(MH-E . "8.0"))
+
+;;; Sending Mail (:group 'mh-sending-mail)
+
+(defcustom-mh mh-compose-forward-as-mime-flag t
+ "*Non-nil means that messages are forwarded as attachments.
+
+By default, this option is on which means that the forwarded
+messages are included as attachments. If you would prefer to
+forward your messages verbatim (as text, inline), then turn off
+this option. Forwarding messages verbatim works well for short,
+textual messages, but your recipient won't be able to view any
+non-textual attachments that were in the forwarded message. Be
+aware that if you have \"forw: -mime\" in your MH profile, then
+forwarded messages will always be included as attachments
+regardless of the settings of this option."
+ :type 'boolean
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-compose-letter-function nil
+ "Invoked when starting a new draft.
+
+However, it is the last function called before you edit your
+message. The consequence of this is that you can write a function
+to write and send the message for you. This function is passed
+three arguments: the contents of the TO, SUBJECT, and CC header
+fields."
+ :type '(choice (const nil) function)
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-compose-prompt-flag nil
+ "*Non-nil means prompt for header fields when composing a new draft."
+ :type 'boolean
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-forward-subject-format "%s: %s"
+ "*Format string for forwarded message subject.
+
+This option is a string which includes two escapes (\"%s\"). The
+first \"%s\" is replaced with the sender of the original message,
+and the second one is replaced with the original \"Subject:\"."
+ :type 'string
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-insert-x-mailer-flag t
+ "*Non-nil means append an \"X-Mailer:\" header field to the header.
+
+This header field includes the version of MH-E and Emacs that you
+are using. If you don't want to participate in our marketing, you
+can turn this option off."
+ :type 'boolean
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-redist-full-contents-flag nil
+ "*Non-nil means the \"dist\" command needs entire letter for redistribution.
+
+This option must be turned on if \"dist\" requires the whole
+letter for redistribution, which is the case if \"send\" is
+compiled with the BERK option (which many people abhor). If you
+find that MH will not allow you to redistribute a message that
+has been redistributed before, turn off this option."
+ :type 'boolean
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-reply-default-reply-to nil
+ "*Sets the person or persons to whom a reply will be sent.
+
+This option is set to \"Prompt\" by default so that you are
+prompted for the recipient of a reply. If you find that most of
+the time that you specify \"cc\" when you reply to a message, set
+this option to \"cc\". Other choices include \"from\", \"to\", or
+\"all\". You can always edit the recipients in the draft."
+ :type '(choice (const :tag "Prompt" nil)
+ (const "from")
+ (const "to")
+ (const "cc")
+ (const "all"))
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-reply-show-message-flag t
+ "*Non-nil means the MH-Show buffer is displayed when replying.
+
+If you include the message automatically, you can hide the
+MH-Show buffer by turning off this option.
+
+See also `mh-reply'."
+ :type 'boolean
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "7.0"))
+
+;;; Sequences (:group 'mh-sequences)
+
+;; If `mh-unpropagated-sequences' becomes a defcustom, add the following to
+;; the docstring: "Additional sequences that should not to be preserved can be
+;; specified by setting `mh-unpropagated-sequences' appropriately." XXX
+
+(defcustom-mh mh-refile-preserves-sequences-flag t
+ "*Non-nil means that sequences are preserved when messages are refiled.
+
+If a message is in any sequence (except \"Previous-Sequence:\"
+and \"cur\") when it is refiled, then it will still be in those
+sequences in the destination folder. If this behavior is not
+desired, then turn off this option."
+ :type 'boolean
+ :group 'mh-sequences
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-tick-seq 'tick
+ "The name of the MH sequence for ticked messages.
+
+You can customize this option if you already use the \"tick\"
+sequence for your own use. You can also disable all of the
+ticking functions by choosing the \"Disable Ticking\" item but
+there isn't much advantage to that."
+ :type '(choice (const :tag "Disable Ticking" nil)
+ symbol)
+ :group 'mh-sequences
+ :package-version '(MH-E . "7.3"))
+
+(defcustom-mh mh-update-sequences-after-mh-show-flag t
+ "*Non-nil means flush MH sequences to disk after message is shown\\<mh-folder-mode-map>.
+
+Three sequences are maintained internally by MH-E and pushed out
+to MH when a message is shown. They include the sequence
+specified by your \"Unseen-Sequence:\" profile entry, \"cur\",
+and the sequence listed by the option `mh-tick-seq' which is
+\"tick\" by default. If you do not like this behavior, turn off
+this option. You can then update the state manually with the
+\\[mh-execute-commands], \\[mh-quit], or \\[mh-update-sequences]
+commands."
+ :type 'boolean
+ :group 'mh-sequences
+ :package-version '(MH-E . "7.0"))
+
+;;; Reading Your Mail (:group 'mh-show)
+
+(defcustom-mh mh-bury-show-buffer-flag t
+ "*Non-nil means show buffer is buried.
+
+One advantage of not burying the show buffer is that one can
+delete the show buffer more easily in an electric buffer list
+because of its proximity to its associated MH-Folder buffer. Try
+running \\[electric-buffer-list] to see what I mean."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-clean-message-header-flag t
+ "*Non-nil means remove extraneous header fields.
+
+See also `mh-invisible-header-fields-default' and
+`mh-invisible-header-fields'."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-decode-mime-flag (not (not (locate-library "mm-decode")))
+ "*Non-nil means attachments are handled\\<mh-folder-mode-map>.
+
+MH-E can handle attachments as well if the Gnus `mm-decode'
+library is present. If so, this option will be on. Otherwise,
+you'll see the MIME body parts rather than text or attachments.
+There isn't much point in turning off this option; however, you
+can inspect it if it appears that the body parts are not being
+interpreted correctly or toggle it with the command
+\\[mh-toggle-mh-decode-mime-flag] to view the raw message.
+
+This option also controls the display of quoted-printable
+messages and other graphical widgets. See the options
+`mh-graphical-smileys-flag' and `mh-graphical-emphasis-flag'."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-display-buttons-for-alternatives-flag nil
+ "*Non-nil means display buttons for all alternative attachments.
+
+Sometimes, a mail program will produce multiple alternatives of
+the attachment in increasing degree of faithfulness to the
+original content. By default, only the preferred alternative is
+displayed. If this option is on, then the preferred part is shown
+inline and buttons are shown for each of the other alternatives."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.4"))
+
+(defcustom-mh mh-display-buttons-for-inline-parts-flag nil
+ "*Non-nil means display buttons for all inline attachments\\<mh-folder-mode-map>.
+
+The sender can request that attachments should be viewed inline so
+that they do not really appear like an attachment at all to the
+reader. Most of the time, this is desirable, so by default MH-E
+suppresses the buttons for inline attachments. On the other hand, you
+may receive code or HTML which the sender has added to his message as
+inline attachments so that you can read them in MH-E. In this case, it
+is useful to see the buttons so that you know you don't have to cut
+and paste the code into a file; you can simply save the attachment.
+
+If you want to make the buttons visible for inline attachments, you
+can use the command \\[mh-toggle-mime-buttons] to toggle the
+visibility of these buttons. You can turn on these buttons permanently
+by turning on this option.
+
+MH-E cannot display all attachments inline however. It can display
+text (including HTML) and images."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-do-not-confirm-flag nil
+ "*Non-nil means non-reversible commands do not prompt for confirmation.
+
+Commands such as `mh-pack-folder' prompt to confirm whether to
+process outstanding moves and deletes or not before continuing.
+Turning on this option means that these actions will be
+performed--which is usually desired but cannot be
+retracted--without question."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-fetch-x-image-url nil
+ "*Control fetching of \"X-Image-URL:\" header field image.
+
+Ths option controls the fetching of the \"X-Image-URL:\" header
+field image with the following values:
+
+Ask Before Fetching
+ You are prompted before the image is fetched. MH-E will
+ remember your reply and will either use the already fetched
+ image the next time the same URL is encountered or silently
+ skip it if you didn't fetch it the first time. This is a
+ good setting.
+
+Never Fetch
+ Images are never fetched and only displayed if they are
+ already present in the cache. This is the default.
+
+There isn't a value of \"Always Fetch\" for privacy and DOS (denial of
+service) reasons. For example, fetching a URL can tip off a spammer
+that you've read his email (which is why you shouldn't blindly answer
+yes if you've set this option to \"Ask Before Fetching\"). Someone may
+also flood your network and fill your disk drive by sending a torrent
+of messages, each specifying a unique URL to a very large file.
+
+The cache of images is found in the directory \".mhe-x-image-cache\"
+within your MH directory. You can add your own face to the \"From:\"
+field too. See Info node `(mh-e)Picture'.
+
+This setting only has effect if the option `mh-show-use-xface-flag' is
+turned on."
+
+ :type '(choice (const :tag "Ask Before Fetching" ask)
+ (const :tag "Never Fetch" nil))
+ :group 'mh-show
+ :package-version '(MH-E . "7.3"))
+
+(defcustom-mh mh-graphical-smileys-flag t
+ "*Non-nil means graphical smileys are displayed.
+
+It is a long standing custom to inject body language using a
+cornucopia of punctuation, also known as the \"smileys\". MH-E
+can render these as graphical widgets if this option is turned
+on, which it is by default. Smileys include patterns such as :-)
+and ;-).
+
+This option is disabled if the option `mh-decode-mime-flag' is
+turned off."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-graphical-emphasis-flag t
+ "*Non-nil means graphical emphasis is displayed.
+
+A few typesetting features are indicated in ASCII text with
+certain characters. If your terminal supports it, MH-E can render
+these typesetting directives naturally if this option is turned
+on, which it is by default. For example, _underline_ will be
+underlined, *bold* will appear in bold, /italics/ will appear in
+italics, and so on. See the option `gnus-emphasis-alist' for the
+whole list.
+
+This option is disabled if the option `mh-decode-mime-flag' is
+turned off."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-highlight-citation-style 'gnus
+ "Style for highlighting citations.
+
+If the sender of the message has cited other messages in his
+message, then MH-E will highlight these citations to emphasize
+the sender's actual response. This option can be customized to
+change the highlighting style. The \"Multicolor\" method uses a
+different color for each indentation while the \"Monochrome\"
+method highlights all citations in red. To disable highlighting
+of citations entirely, choose \"None\"."
+ :type '(choice (const :tag "Multicolor" gnus)
+ (const :tag "Monochrome" font-lock)
+ (const :tag "None" nil))
+ :group 'mh-show
+ :package-version '(MH-E . "8.0"))
+
+;; Keep fields alphabetized. Mention source, if known.
+(defvar mh-invisible-header-fields-internal
+ '("Approved:"
+ "Autoforwarded:"
+ "Bestservhost:"
+ "Cancel-Lock:" ; NNTP posts
+ "Content-" ; RFC 2045
+ "Delivered-To:" ; Egroups/yahoogroups mailing list manager
+ "Delivery-Date:" ; MH
+ "Delivery:"
+ "DomainKey-Signature:" ;http://antispam.yahoo.com/domainkeys
+ "Encoding:"
+ "Envelope-to:"
+ "Errors-To:"
+ "Face:" ; Gnus Face header
+ "Forwarded:" ; MH
+ "From " ; sendmail
+ "Importance:" ; MS Outlook
+ "In-Reply-To:" ; MH
+ "Lines:"
+ "List-" ; Mailman mailing list manager
+ "List-" ; Unknown mailing list managers
+ "List-Subscribe:" ; Unknown mailing list managers
+ "List-Unsubscribe:" ; Unknown mailing list managers
+ "Mail-from:" ; MH
+ "Mailing-List:" ; Egroups/yahoogroups mailing list manager
+ "Message-Id:" ; RFC 822
+ "Mime-Version" ; RFC 2045
+ "NNTP-" ; News
+ "Old-Return-Path:"
+ "Original-Encoded-Information-Types:" ; X400
+ "Original-Lines:" ; mail to news
+ "Original-NNTP-" ; mail to news
+ "Original-Newsgroups:" ; mail to news
+ "Original-Path:" ; mail to news
+ "Original-Received:" ; mail to news
+ "Original-To:" ; mail to news
+ "Original-X-" ; mail to news
+ "Originator:"
+ "P1-Content-Type:" ; X400
+ "P1-Message-Id:" ; X400
+ "P1-Recipient:" ; X400
+ "Path:"
+ "Precedence:"
+ "Prev-Resent" ; MH
+ "Priority:"
+ "Received:" ; RFC 822
+ "Received-SPF:" ; Gmail
+ "References:"
+ "Remailed-" ; MH
+ "Replied:" ; MH
+ "Resent" ; MH
+ "Return-Path:" ; RFC 822
+ "Sensitivity:" ; MS Outlook
+ "Status:" ; sendmail
+ "Thread-"
+ "Ua-Content-Id:" ; X400
+;; "User-Agent:" ; Similar to X-Mailer, so display it.
+ "Via:" ; MH
+ "X-AOL-IP:" ; AOL WebMail
+ "X-Abuse-Info:"
+ "X-Abuse-and-DMCA-"
+ "X-Accept-Language:"
+ "X-Accept-Language:" ; Netscape/Mozilla
+ "X-Ack:"
+ "X-Administrivia-To:"
+ "X-AntiAbuse:" ; cPanel
+ "X-Apparently-From:" ; MS Outlook
+ "X-Apparently-To:" ; Egroups/yahoogroups mailing list manager
+ "X-Authenticated-Sender:" ; AT&T Message Center (webmail)
+ "X-Authentication-Warning:" ; sendmail
+ "X-Barracuda-" ; Barracuda spam scores
+ "X-Beenthere:" ; Mailman mailing list manager
+ "X-Bogosity:" ; bogofilter
+ "X-BrightmailFiltered:" ; Brightmail
+ "X-Brightmail-Tracker:" ; Brightmail
+ "X-Bugzilla-" ; Bugzilla
+ "X-Complaints-To:"
+ "X-ContentStamp:" ; NetZero
+ "X-Cron-Env:"
+ "X-DMCA"
+ "X-Delivered"
+ "X-EFL-Spamscore:" ; MIT alumni spam filtering
+ "X-ELNK-Trace:" ; Earthlink mailer
+ "X-Envelope-Date:" ; GNU mailutils
+ "X-Envelope-From:"
+ "X-Envelope-Sender:"
+ "X-Envelope-To:"
+ "X-Evolution:" ; Evolution mail client
+ "X-Face:"
+ "X-Folder:" ; Spam
+ "X-From-Line"
+ "X-Gmail-" ; Gmail
+ "X-Gnus-Mail-Source:" ; gnus
+ "X-Greylist:" ; milter-greylist-1.2.1
+ "X-Habeas-SWE-1:" ; Spam
+ "X-Habeas-SWE-2:" ; Spam
+ "X-Habeas-SWE-3:" ; Spam
+ "X-Habeas-SWE-4:" ; Spam
+ "X-Habeas-SWE-5:" ; Spam
+ "X-Habeas-SWE-6:" ; Spam
+ "X-Habeas-SWE-7:" ; Spam
+ "X-Habeas-SWE-8:" ; Spam
+ "X-Habeas-SWE-9:" ; Spam
+ "X-Hashcash:" ; hashcash
+ "X-Info:" ; NTMail
+ "X-IronPort-AV:" ; IronPort AV
+ "X-Juno-" ; Juno
+ "X-List-Host:" ; Unknown mailing list managers
+ "X-List-Subscribe:" ; Unknown mailing list managers
+ "X-List-Unsubscribe:" ; Unknown mailing list managers
+ "X-Listprocessor-" ; ListProc(tm) by CREN
+ "X-Listserver:" ; Unknown mailing list managers
+ "X-Loop:" ; Unknown mailing list managers
+ "X-Lumos-SenderID:" ; Roving ConstantContact
+ "X-MAIL-INFO:" ; NetZero
+ "X-MB-Message-" ; AOL WebMail
+ "X-MHE-Checksum:" ; Checksum added during index search
+ "X-MIME-Autoconverted:" ; sendmail
+ "X-MIMETrack:"
+ "X-MS-" ; MS Outlook
+ "X-Mail-from:" ; fastmail.fm
+ "X-MailScanner" ; ListProc(tm) by CREN
+ "X-Mailing-List:" ; Unknown mailing list managers
+ "X-Mailman-Approved-At:" ; Mailman mailing list manager
+ "X-Mailman-Version:" ; Mailman mailing list manager
+ "X-Majordomo:" ; Majordomo mailing list manager
+ "X-Message-Id"
+ "X-MessageWall-Score:" ; Unknown mailing list manager, AUC TeX
+ "X-MimeOLE:" ; MS Outlook
+ "X-Mms-" ; T-Mobile pictures
+ "X-Mozilla-Status:" ; Netscape/Mozilla
+ "X-Msmail-" ; MS Outlook
+ "X-NAI-Spam-" ; Network Associates Inc. SpamKiller
+ "X-News:" ; News
+ "X-No-Archive:"
+ "X-Notes-Item:" ; Lotus Notes Domino structured header
+ "X-OperatingSystem:"
+ ;;"X-Operator:" ; Similar to X-Mailer, so display it
+ "X-Orcl-Content-Type:"
+ "X-Original-Complaints-To:"
+ "X-Original-Date:" ; SourceForge mailing list manager
+ "X-Original-To:"
+ "X-Original-Trace:"
+ "X-OriginalArrivalTime:" ; Hotmail
+ "X-Originating-IP:" ; Hotmail
+ "X-Postfilter:"
+ "X-Priority:" ; MS Outlook
+ "X-Provags-ID:"
+ "X-Qotd-" ; User added
+ "X-RM"
+ "X-Received-Date:"
+ "X-Received:"
+ "X-Request-"
+ "X-Resolved-to:" ; fastmail.fm
+ "X-Return-Path-Hint:" ; Roving ConstantContact
+ "X-Roving-" ; Roving ConstantContact
+ "X-SA-Exim-" ; Exim SpamAssassin
+ "X-SBClass:" ; Spam
+ "X-SBNote:" ; Spam
+ "X-SBPass:" ; Spam
+ "X-SBRule:" ; Spam
+ "X-SMTP-"
+ "X-Sasl-enc:" ; Apple Mail
+ "X-Scanned-By:"
+ "X-Sender:"
+ "X-Server-Date:"
+ "X-Server-Uuid:"
+ "X-Sieve:" ; Sieve filtering
+ "X-Source"
+ "X-Spam-" ; Spamassassin
+ "X-SpamBouncer:" ; Spam
+ "X-Status"
+ "X-Submissions-To:"
+ "X-Telecom-Digest"
+ "X-Trace:"
+ "X-UID"
+ "X-UIDL:"
+ "X-UNTD-" ; NetZero
+ "X-USANET-" ; usa.net
+ "X-UserInfo1:"
+ "X-VSMLoop:" ; NTMail
+ "X-Virus-Scanned" ; amavisd-new
+ "X-Vms-To:"
+ "X-WebTV-Signature:"
+ "X-Wss-Id:" ; Worldtalk gateways
+ "X-Yahoo"
+ "X-eGroups-" ; Egroups/yahoogroups mailing list manager
+ "X-pgp:"
+ "X-submission-address:"
+ "X400-" ; X400
+ "Xref:")
+ "List of default header fields that are not to be shown.
+
+Do not alter this variable directly. Instead, add entries from
+here that you would like to be displayed in
+`mh-invisible-header-fields-default' and add entries to hide in
+`mh-invisible-header-fields'.")
+
+(eval-and-compile
+ (unless (fboundp 'mh-invisible-headers)
+ (defun mh-invisible-headers ()
+ "Temporary definition.
+Real definition, below, uses variables that aren't defined yet."
+ nil)))
+
+(defvar mh-delay-invisible-header-generation-flag t
+ "Non-nil means to delay the generation of invisible header fields.
+Because the function `mh-invisible-headers' uses both
+`mh-invisible-header-fields' and `mh-invisible-header-fields', it
+cannot be run until both variables have been initialized.")
+
+(defcustom-mh mh-invisible-header-fields nil
+ "*Additional header fields to hide.
+
+Header fields that you would like to hide that aren't listed in
+`mh-invisible-header-fields-default' can be added to this option
+with a couple of caveats. Regular expressions are not allowed.
+Unique fields should have a \":\" suffix; otherwise, the element
+can be used to render invisible an entire class of fields that
+start with the same prefix. If you think a header field should be
+generally ignored, report a bug (see URL
+`https://sourceforge.net/tracker/?group_id=13357&atid=113357').
+
+See also `mh-clean-message-header-flag'."
+
+ :type '(repeat (string :tag "Header field"))
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (mh-invisible-headers))
+ :group 'mh-show
+ :package-version '(MH-E . "7.1"))
+
+(defcustom-mh mh-invisible-header-fields-default nil
+ "*List of hidden header fields.
+
+The header fields listed in this option are hidden, although you
+can check off any field that you would like to see.
+
+Header fields that you would like to hide that aren't listed can
+be added to the option `mh-invisible-header-fields'.
+
+See also `mh-clean-message-header-flag'."
+ :type `(set ,@(mapcar (lambda (x) `(const ,x))
+ mh-invisible-header-fields-internal))
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (mh-invisible-headers))
+ :group 'mh-show
+ :package-version '(MH-E . "8.0"))
+
+(defvar mh-invisible-header-fields-compiled nil
+ "*Regexp matching lines in a message header that are not to be shown.
+Do not alter this variable directly. Instead, customize
+`mh-invisible-header-fields-default' checking for fields normally
+hidden that you wish to display, and add extra entries to hide in
+`mh-invisible-header-fields'.")
+
+(defun mh-invisible-headers ()
+ "Make or remake the variable `mh-invisible-header-fields-compiled'.
+Done using `mh-invisible-header-fields-internal' as input, from
+which entries from `mh-invisible-header-fields-default' are
+removed and entries from `mh-invisible-header-fields' are added."
+ (let ((fields mh-invisible-header-fields-internal))
+ (when mh-invisible-header-fields-default
+ ;; Remove entries from `mh-invisible-header-fields-default'
+ (setq fields
+ (loop for x in fields
+ unless (member x mh-invisible-header-fields-default)
+ collect x)))
+ (when (and (boundp 'mh-invisible-header-fields)
+ mh-invisible-header-fields)
+ (dolist (x mh-invisible-header-fields)
+ (unless (member x fields) (setq fields (cons x fields)))))
+ (if fields
+ (setq mh-invisible-header-fields-compiled
+ (concat
+ "^"
+ ;; workaround for insufficient default
+ (let ((max-specpdl-size 1000))
+ (regexp-opt fields t))))
+ (setq mh-invisible-header-fields-compiled nil))))
+
+;; Compile invisible header fields.
+(mh-invisible-headers)
+
+(defcustom-mh mh-lpr-command-format "lpr -J '%s'"
+ "*Command used to print\\<mh-folder-mode-map>.
+
+This option contains the Unix command line which performs the
+actual printing for the \\[mh-print-msg] command. The string can
+contain one escape, \"%s\", which is replaced by the name of the
+folder and the message number and is useful for print job names.
+I use \"mpage -h'%s' -b Letter -H1of -mlrtb -P\" which produces a
+nice header and adds a bit of margin so the text fits within my
+printer's margins.
+
+This options is not used by the commands \\[mh-ps-print-msg] or
+\\[mh-ps-print-msg-file]."
+ :type 'string
+ :group 'mh-show
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-max-inline-image-height nil
+ "*Maximum inline image height if \"Content-Disposition:\" is not present.
+
+Some older mail programs do not insert this needed plumbing to
+tell MH-E whether to display the attachments inline or not. If
+this is the case, MH-E will display these images inline if they
+are smaller than the window. However, you might want to allow
+larger images to be displayed inline. To do this, you can change
+the options `mh-max-inline-image-width' and
+`mh-max-inline-image-height' from their default value of zero to
+a large number. The size of your screen is a good choice for
+these numbers."
+ :type '(choice (const nil) integer)
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-max-inline-image-width nil
+ "*Maximum inline image width if \"Content-Disposition:\" is not present.
+
+Some older mail programs do not insert this needed plumbing to
+tell MH-E whether to display the attachments inline or not. If
+this is the case, MH-E will display these images inline if they
+are smaller than the window. However, you might want to allow
+larger images to be displayed inline. To do this, you can change
+the options `mh-max-inline-image-width' and
+`mh-max-inline-image-height' from their default value of zero to
+a large number. The size of your screen is a good choice for
+these numbers."
+ :type '(choice (const nil) integer)
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-mhl-format-file nil
+ "*Specifies the format file to pass to the \"mhl\" program.
+
+Normally MH-E takes care of displaying messages itself (rather than
+calling an MH program to do the work). If you'd rather have \"mhl\"
+display the message (within MH-E), change this option from its default
+value of \"Use Default mhl Format (Printing Only)\".
+
+You can set this option to \"Use Default mhl Format\" to get the same
+output as you would get if you ran \"mhl\" from the shell.
+
+If you have a format file that you want MH-E to use, you can set this
+option to \"Specify an mhl Format File\" and enter the name of your
+format file. Your format file should specify a non-zero value for
+\"overflowoffset\" to allow MH-E to parse the header. Note that
+\"mhl\" is always used for printing and forwarding; in this case, the
+value of this option is consulted if you have specified a format
+file."
+ :type '(choice (const :tag "Use Default mhl Format (Printing Only)" nil)
+ (const :tag "Use Default mhl Format" t)
+ (file :tag "Specify an mhl Format File"))
+ :group 'mh-show
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-mime-save-parts-default-directory t
+ "Default directory to use for \\<mh-folder-mode-map>\\[mh-mime-save-parts].
+
+The default value for this option is \"Prompt Always\" so that
+you are always prompted for the directory in which to save the
+attachments. However, if you usually use the same directory
+within a session, then you can set this option to \"Prompt the
+First Time\" to avoid the prompt each time. you can make this
+directory permanent by choosing \"Directory\" and entering the
+directory's name."
+ :type '(choice (const :tag "Prompt the First Time" nil)
+ (const :tag "Prompt Always" t)
+ directory)
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-print-background-flag nil
+ "*Non-nil means messages should be printed in the background\\<mh-folder-mode-map>.
+
+Normally messages are printed in the foreground. If this is slow on
+your system, you may elect to turn off this option to print in the
+background.
+
+WARNING: If you do this, do not delete the message until it is printed
+or else the output may be truncated.
+
+This option is not used by the commands \\[mh-ps-print-msg] or
+\\[mh-ps-print-msg-file]."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-show-maximum-size 0
+ "*Maximum size of message (in bytes) to display automatically.
+
+This option provides an opportunity to skip over large messages
+which may be slow to load. The default value of 0 means that all
+message are shown regardless of size."
+ :type 'integer
+ :group 'mh-show
+ :package-version '(MH-E . "8.0"))
+
+(defcustom-mh mh-show-use-xface-flag (>= emacs-major-version 21)
+ "*Non-nil means display face images in MH-show buffers.
+
+MH-E can display the content of \"Face:\", \"X-Face:\", and
+\"X-Image-URL:\" header fields. If any of these fields occur in the
+header of your message, the sender's face will appear in the \"From:\"
+header field. If more than one of these fields appear, then the first
+field found in the order \"Face:\", \"X-Face:\", and \"X-Image-URL:\"
+will be used.
+
+The option `mh-show-use-xface-flag' is used to turn this feature on
+and off. This feature will be turned on by default if your system
+supports it.
+
+The first header field used, if present, is the Gnus-specific
+\"Face:\" field. The \"Face:\" field appeared in GNU Emacs 21 and
+XEmacs. For more information, see URL
+`http://quimby.gnus.org/circus/face/'. Next is the traditional
+\"X-Face:\" header field. The display of this field requires the
+\"uncompface\" program (see URL
+`ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.z'). Recent
+versions of XEmacs have internal support for \"X-Face:\" images. If
+your version of XEmacs does not, then you'll need both \"uncompface\"
+and the x-face package (see URL `ftp://ftp.jpl.org/pub/elisp/').
+
+Finally, MH-E will display images referenced by the \"X-Image-URL:\"
+header field if neither the \"Face:\" nor the \"X-Face:\" fields are
+present. The display of the images requires \"wget\" (see URL
+`http://www.gnu.org/software/wget/wget.html'), \"fetch\", or \"curl\"
+to fetch the image and the \"convert\" program from the ImageMagick
+suite (see URL `http://www.imagemagick.org/'). Of the three header
+fields this is the most efficient in terms of network usage since the
+image doesn't need to be transmitted with every single mail.
+
+The option `mh-fetch-x-image-url' controls the fetching of the
+\"X-Image-URL:\" header field image."
+ :type 'boolean
+ :group 'mh-show
+ :package-version '(MH-E . "7.0"))
+
+(defcustom-mh mh-store-default-directory nil
+ "*Default directory for \\<mh-folder-mode-map>\\[mh-store-msg].
+
+If you would like to change the initial default directory,
+customize this option, change the value from \"Current\" to
+\"Directory\", and then enter the name of the directory for storing
+the content of these messages."
+ :type '(choice (const :tag "Current" nil)
+ directory)
+ :group 'mh-show
+ :package-version '(MH-E . "6.0"))
+
+(defcustom-mh mh-summary-height nil
+ "*Number of lines in MH-Folder buffer (including the mode line).
+
+The default value of this option is \"Automatic\" which means
+that the MH-Folder buffer will maintain the same proportional
+size if the frame is resized. If you'd prefer a fixed height,
+then choose the \"Fixed Size\" option and enter the number of
+lines you'd like to see."
+ :type '(choice (const :tag "Automatic" nil)
+ (integer :tag "Fixed Size"))
+ :group 'mh-show
+ :package-version '(MH-E . "7.4"))
+
+;;; The Speedbar (:group 'mh-speedbar)
+
+(defcustom-mh mh-speed-update-interval 60
+ "Time between speedbar updates in seconds.
+Set to 0 to disable automatic update."
+ :type 'integer
+ :group 'mh-speedbar
+ :package-version '(MH-E . "8.0"))
+
+;;; Threading (:group 'mh-thread)
+
+(defcustom-mh mh-show-threads-flag nil
+ "*Non-nil means new folders start in threaded mode.
+
+Threading large number of messages can be time consuming so this
+option is turned off by default. If you turn this option on, then
+threading will be done only if the number of messages being
+threaded is less than `mh-large-folder'."
+ :type 'boolean
+ :group 'mh-thread
+ :package-version '(MH-E . "7.1"))
+
+;;; The Tool Bar (:group 'mh-tool-bar)
+
+;; mh-tool-bar-folder-buttons and mh-tool-bar-letter-buttons defined
+;; dynamically in mh-tool-bar.el.
+
+(defcustom-mh mh-tool-bar-search-function 'mh-search
+ "*Function called by the tool bar search button.
+
+By default, this is set to `mh-search'. You can also choose
+\"Other Function\" from the \"Value Menu\" and enter a function
+of your own choosing."
+ :type '(choice (const mh-search)
+ (function :tag "Other Function"))
+ :group 'mh-tool-bar
+ :package-version '(MH-E . "7.0"))
+
+;; XEmacs has a couple of extra customizations...
+(mh-do-in-xemacs
+ (defcustom-mh mh-xemacs-use-tool-bar-flag mh-xemacs-has-tool-bar-flag
+ "*If non-nil, use tool bar.
+
+This option controls whether to show the MH-E icons at all. By
+default, this option is turned on if the window system supports
+tool bars. If your system doesn't support tool bars, then you
+won't be able to turn on this option."
+ :type 'boolean
+ :group 'mh-tool-bar
+ :set (lambda (symbol value)
+ (if (and (eq value t)
+ (not mh-xemacs-has-tool-bar-flag))
+ (error "Tool bar not supported"))
+ (set-default symbol value))
+ :package-version '(MH-E . "7.3"))
+
+ (defcustom-mh mh-xemacs-tool-bar-position nil
+ "*Tool bar location.
+
+This option controls the placement of the tool bar along the four
+edges of the frame. You can choose from one of \"Same As Default
+Tool Bar\", \"Top\", \"Bottom\", \"Left\", or \"Right\". If this
+variable is set to anything other than \"Same As Default Tool
+Bar\" and the default tool bar is in a different location, then
+two tool bars will be displayed: the MH-E tool bar and the
+default tool bar."
+ :type '(radio (const :tag "Same As Default Tool Bar" :value nil)
+ (const :tag "Top" :value top)
+ (const :tag "Bottom" :value bottom)
+ (const :tag "Left" :value left)
+ (const :tag "Right" :value right))
+ :group 'mh-tool-bar
+ :package-version '(MH-E . "7.3")))