summaryrefslogtreecommitdiff
path: root/lisp/mh-e/mh-customize.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/mh-e/mh-customize.el')
-rw-r--r--lisp/mh-e/mh-customize.el2902
1 files changed, 0 insertions, 2902 deletions
diff --git a/lisp/mh-e/mh-customize.el b/lisp/mh-e/mh-customize.el
deleted file mode 100644
index 7089636d9fb..00000000000
--- a/lisp/mh-e/mh-customize.el
+++ /dev/null
@@ -1,2902 +0,0 @@
-;;; mh-customize.el --- MH-E customization
-
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-
-;; Author: Bill Wohler <wohler@newt.com>
-;; Maintainer: Bill Wohler <wohler@newt.com>
-;; Keywords: mail
-;; See: mh-e.el
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;; All of the defgroups, defcustoms, and deffaces in MH-E are found
-;; here. This makes it possible to customize modules that aren't loaded
-;; yet. It also makes it easier to organize the customization groups.
-
-;; This file contains the following sections:
-;;
-;; 1. MH-E Customization Groups
-;;
-;; These are the customization group definitions. Every group has a
-;; associated manual node. The ordering is alphabetical, except for the
-;; groups mh-faces and mh-hooks which are last .
-;;
-;; 2. MH-E Customization
-;;
-;; These are the actual customization variables. There is a sub-section for
-;; each group in the MH-E Customization Groups section, in the same order,
-;; separated by page breaks. Within each section, variables are sorted
-;; alphabetically.
-;;
-;; 3. Hooks
-;;
-;; All hooks must be placed in the mh-hook group; in addition, add the
-;; group associated with the manual node in which the hook is described.
-;; Since the mh-hook group appears near the end of this file, the hooks
-;; will appear at the end of these other groups.
-;;
-;; 4. Faces
-;;
-;; All faces must be placed in the mh-faces group; in addition, add the
-;; group associated with the manual node in which the face is described.
-;; Since the mh-faces group appears near the end of this file, the faces
-;; will appear at the end of these other groups.
-;;
-;;; Change Log:
-
-;;; Code:
-
-;;(message "> mh-customize")
-(provide 'mh-customize)
-
-(eval-when-compile (require 'mh-acros))
-(mh-require-cl)
-
-(eval-and-compile
- (defvar mh-xemacs-flag (featurep 'xemacs)
- "Non-nil means the current Emacs is XEmacs.")
- (when mh-xemacs-flag
- (require 'mh-xemacs)))
-
-(eval-and-compile
- (require 'mh-identity)
- (require 'mh-init)
- (require 'mh-loaddefs))
-;;(message "< mh-customize")
-
-;; For compiler warnings...
-(eval-when-compile
- (defvar mh-show-buffer)
- (defvar mh-show-folder-buffer))
-
-(defun mh-customize (&optional delete-other-windows-flag)
- "Customize MH-E variables.
-If optional argument DELETE-OTHER-WINDOWS-FLAG is non-nil, other
-windows in the frame are removed."
- (interactive "P")
- (customize-group 'mh-e)
- (when delete-other-windows-flag
- (delete-other-windows)))
-
-
-
-;;; MH-E Customization Groups
-
-(defgroup 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)
-
-(defgroup mh-alias nil
- "Aliases."
- :link '(custom-manual "(mh-e)Aliases")
- :prefix "mh-alias-"
- :group 'mh-e)
-
-(defgroup mh-folder nil
- "Organizing your mail with folders."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Folders")
- :group 'mh-e)
-
-(defgroup mh-folder-selection nil
- "Folder selection."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Folder Selection")
- :group 'mh-e)
-
-(defgroup mh-identity nil
- "Identities."
- :link '(custom-manual "(mh-e)Identities")
- :prefix "mh-identity-"
- :group 'mh-e)
-
-(defgroup mh-inc nil
- "Incorporating your mail."
- :prefix "mh-inc-"
- :link '(custom-manual "(mh-e)Incorporating Mail")
- :group 'mh-e)
-
-(defgroup mh-junk nil
- "Dealing with junk mail."
- :link '(custom-manual "(mh-e)Junk")
- :prefix "mh-junk-"
- :group 'mh-e)
-
-(defgroup mh-letter nil
- "Editing a draft."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Editing Drafts")
- :group 'mh-e)
-
-(defgroup mh-ranges nil
- "Ranges."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Ranges")
- :group 'mh-e)
-
-(defgroup mh-scan-line-formats nil
- "Scan line formats."
- :link '(custom-manual "(mh-e)Scan Line Formats")
- :prefix "mh-"
- :group 'mh-e)
-
-(defgroup mh-search nil
- "Searching."
- :link '(custom-manual "(mh-e)Searching")
- :prefix "mh-search-"
- :group 'mh-e)
-
-(defgroup mh-sending-mail nil
- "Sending mail."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Sending Mail")
- :group 'mh-e)
-
-(defgroup mh-sequences nil
- "Sequences."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Sequences")
- :group 'mh-e)
-
-(defgroup mh-show nil
- "Reading your mail."
- :prefix "mh-"
- :link '(custom-manual "(mh-e)Reading Mail")
- :group 'mh-e)
-
-(defgroup mh-speedbar nil
- "The speedbar."
- :prefix "mh-speed-"
- :link '(custom-manual "(mh-e)Speedbar")
- :group 'mh-e)
-
-(defgroup mh-thread nil
- "Threading."
- :prefix "mh-thread-"
- :link '(custom-manual "(mh-e)Threading")
- :group 'mh-e)
-
-(defgroup mh-tool-bar nil
- "The tool bar"
- :link '(custom-manual "(mh-e)Tool Bar")
- :prefix "mh-"
- :group 'mh-e)
-
-(defgroup mh-hooks nil
- "MH-E hooks."
- :link '(custom-manual "(mh-e)Top")
- :prefix "mh-"
- :group 'mh-e)
-
-(defgroup mh-faces nil
- "Faces used in MH-E."
- :link '(custom-manual "(mh-e)Top")
- :prefix "mh-"
- :group 'faces
- :group 'mh-e)
-
-
-
-;;; Emacs interface to the MH mail system (:group mh-e)
-(eval-when (compile)
- (setq mh-variant 'none))
-
-(defcustom mh-path nil
- "*Additional list of directories to search for MH.
-See `mh-variant'."
- :group 'mh-e
- :type '(repeat (directory)))
-
-(defcustom mh-variant 'autodetect
- "*Specifies the variant used by MH-E.
-
-The default setting of this option is \"Auto-detect\" which means
-that MH-E will automatically choose the first of nmh, MH, or GNU
-mailutils that it finds in the directories listed in
-`mh-path' (which you can customize), `mh-sys-path', and
-`exec-path'. If, for example, you have both nmh and mailutils
-installed and `mh-variant-in-use' was initialized to nmh but you
-want to use mailutils, then you can set this option to
-\"mailutils\".
-
-When this variable is changed, MH-E resets `mh-progs', `mh-lib',
-`mh-lib-progs', `mh-flists-present-flag', and `mh-variant-in-use'
-accordingly."
- :type `(radio
- (const :tag "Auto-detect" autodetect)
- ,@(mapcar (lambda (x) `(const ,(car x))) (mh-variants)))
- :set (lambda (symbol value)
- (set-default symbol value) ;Done in mh-variant-set-variant!
- (mh-variant-set value))
- :group 'mh-e)
-
-
-
-;;; Aliases (:group 'mh-alias)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; Organizing Your Mail with Folders (:group 'mh-folder)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom mh-recursive-folders-flag nil
- "*Non-nil means that commands which operate on folders do so recursively."
- :type 'boolean
- :group 'mh-folder)
-
-(defcustom 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)
-
-
-
-;;; Folder Selection (:group 'mh-folder-selection)
-
-(defcustom mh-default-folder-for-message-function nil
- "Function to select a default folder for refiling or \"Fcc:\".
-
-The current buffer is set to the message being refiled with point
-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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; Identities (:group 'mh-identity)
-
-(defcustom 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 'mh-identity-list-set
- :group 'mh-identity)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; Incorporating Your Mail (:group 'mh-inc)
-
-(defcustom 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)
-
-(defcustom 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 \"gnudoit\" command in the \"gnuserv\" package as follows:
-
- box ~/mail/mh-e
- title mh-e
- origMode
- polltime 10
- headertime 0
- command gnudoit -q '(mh-inc-spool-mh-e)'"
- :type '(repeat (list (file :tag "Spool File")
- (string :tag "Folder")
- (character :tag "Key Binding")))
- :set 'mh-inc-spool-list-set
- :group 'mh-inc)
-
-
-
-;;; Dealing with Junk Mail (:group 'mh-junk)
-
-;; Spam fighting program chosen
-(defvar mh-junk-choice nil)
-
-;; 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)
- (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)))))
-
-;; User customizable variables
-(defcustom 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)
-
-(defcustom mh-junk-disposition nil
- "Disposition of junk mail."
- :type '(choice (const :tag "Delete Spam" nil)
- (string :tag "Spam Folder"))
- :group 'mh-junk)
-
-(defcustom 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)
-
-
-
-;;; Editing a Draft (:group 'mh-letter)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; Ranges (:group 'mh-ranges)
-
-(defcustom 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)
-
-
-
-;;; Scan Line Formats (:group 'mh-scan-line-formats)
-
-;; Forward definition.
-(defvar mh-scan-format-file t)
-
-(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)))
-
-;; Forward definition.
-(defvar mh-adaptive-cmd-note-flag)
-
-(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))
- (eq mh-adaptive-cmd-note-flag t))
- (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-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)
-
-;; Update forward definition above if default changes.
-(defcustom 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)
-
-(defcustom 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)
-(make-variable-buffer-local 'mh-scan-prog)
-
-
-
-;;; Searching (:group 'mh-search)
-
-(defcustom 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)
-
-
-
-;;; Sending Mail (:group 'mh-sending-mail)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom mh-compose-prompt-flag nil
- "*Non-nil means prompt for header fields when composing a new draft."
- :type 'boolean
- :group 'mh-sending-mail)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; 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-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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; Reading Your Mail (:group 'mh-show)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-;; 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-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-Authentication-Warning:" ; sendmail
- "X-Beenthere:" ; Mailman mailing list manager
- "X-Bogosity:" ; bogofilter
- "X-Bugzilla-*" ; Bugzilla
- "X-Complaints-To:"
- "X-ContentStamp:" ; NetZero
- "X-Cron-Env:"
- "X-DMCA"
- "X-Delivered"
- "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-Info:" ; NTMail
- "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-MHE-Checksum" ; Checksum added during index search
- "X-MIME-Autoconverted:" ; sendmail
- "X-MIMETrack:"
- "X-MS-" ; MS Outlook
- "X-MailScanner" ; ListProc(tm) by CREN
- "X-Mailing-List:" ; Unknown mailing list managers
- "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-Qotd-" ; User added
- "X-RM"
- "X-Received-Date:"
- "X-Received:"
- "X-Request-"
- "X-Return-Path-Hint:" ; Roving ConstantContact
- "X-Roving-*" ; Roving ConstantContact
- "X-SBClass:" ; Spam
- "X-SBNote:" ; Spam
- "X-SBPass:" ; Spam
- "X-SBRule:" ; Spam
- "X-SMTP-"
- "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'.")
-
-(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'.")
-
-;; Forward definition.
-(defvar mh-invisible-header-fields)
-(defvar mh-invisible-header-fields-default nil)
-
-(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))))
-
-(defcustom 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)
-
-;; Update forward definition above if default changes.
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom mh-show-use-goto-addr-flag (and (boundp 'goto-address-highlight-p)
- goto-address-highlight-p)
- "*Non-nil means highlight URLs and email addresses\\<goto-address-highlight-keymap>.
-
-To send a message using the highlighted email address or to view
-the web page for the highlighted URL, use the middle mouse button
-or \\[goto-address-at-point].
-
-See Info node `(mh-e)Sending Mail' to see how to configure Emacs
-to send the message using MH-E.
-
-The default value of this option comes from the value of
-`goto-address-highlight-p'."
- :type 'boolean
- :group 'mh-show)
-
-(defcustom 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)
-
-(defcustom 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)
-
-(defcustom 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)
-
-
-
-;;; The Speedbar (:group 'mh-speedbar)
-
-(defcustom mh-speed-update-interval 60
- "Time between speedbar updates in seconds.
-Set to 0 to disable automatic update."
- :type 'integer
- :group 'mh-speedbar)
-
-
-
-;;; Threading (:group 'mh-thread)
-
-(defcustom 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)
-
-
-
-;;; The Tool Bar (:group 'mh-tool-bar)
-
-(defcustom 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)
-
-;; Functions called from the tool bar
-(defun mh-tool-bar-search (&optional arg)
- "Interactively call `mh-tool-bar-search-function'.
-Optional argument ARG is not used."
- (interactive "P")
- (call-interactively mh-tool-bar-search-function))
-
-(defun mh-tool-bar-customize ()
- "Call `mh-customize' from the tool bar."
- (interactive)
- (mh-customize t))
-
-(defun mh-tool-bar-folder-help ()
- "Visit \"(mh-e)Top\"."
- (interactive)
- (info "(mh-e)Top")
- (delete-other-windows))
-
-(defun mh-tool-bar-letter-help ()
- "Visit \"(mh-e)Editing Drafts\"."
- (interactive)
- (info "(mh-e)Editing Drafts")
- (delete-other-windows))
-
-(defmacro mh-tool-bar-reply-generator (function recipient folder-buffer-flag)
- "Generate FUNCTION that replies to RECIPIENT.
-If FOLDER-BUFFER-FLAG is nil then the function generated...
-When INCLUDE-FLAG is non-nil, include message body being replied to."
- `(defun ,function (&optional arg)
- ,(format "Reply to \"%s\".\nWhen ARG is non-nil include message in reply."
- recipient)
- (interactive "P")
- ,(if folder-buffer-flag nil '(set-buffer mh-show-folder-buffer))
- (mh-reply (mh-get-msg-num nil) ,recipient arg)))
-
-(mh-tool-bar-reply-generator mh-tool-bar-reply-from "from" t)
-(mh-tool-bar-reply-generator mh-show-tool-bar-reply-from "from" nil)
-(mh-tool-bar-reply-generator mh-tool-bar-reply-to "to" t)
-(mh-tool-bar-reply-generator mh-show-tool-bar-reply-to "to" nil)
-(mh-tool-bar-reply-generator mh-tool-bar-reply-all "all" t)
-(mh-tool-bar-reply-generator mh-show-tool-bar-reply-all "all" nil)
-
-;; XEmacs has a couple of extra customizations...
-(mh-do-in-xemacs
- (defcustom 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)))
-
- (defcustom 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))
-
-(defun mh-buffer-exists-p (mode)
- "Test whether a buffer with major mode MODE is present."
- (loop for buf in (buffer-list)
- when (save-excursion
- (set-buffer buf)
- (eq major-mode mode))
- return t))
-
-(defmacro mh-tool-bar-define (defaults &rest buttons)
- "Define a tool bar for MH-E.
-DEFAULTS is the list of buttons that are present by default. It
-is a list of lists where the sublists are of the following form:
-
- (:KEYWORD FUNC1 FUNC2 FUNC3 ...)
-
-Here :KEYWORD is one of :folder or :letter. If it is :folder then
-the default buttons in the folder and show mode buffers are being
-specified. If it is :letter then the default buttons in the
-letter mode are listed. FUNC1, FUNC2, FUNC3, ... are the names of
-the functions that the buttons would execute.
-
-Each element of BUTTONS is a list consisting of four mandatory
-items and one optional item as follows:
-
- (FUNCTION MODES ICON DOC &optional ENABLE-EXPR)
-
-where,
-
- FUNCTION is the name of the function that will be executed when
- the button is clicked.
-
- MODES is a list of symbols. List elements must be from \"folder\",
- \"letter\" and \"sequence\". If \"folder\" is present then the button is
- available in the folder and show buffer. If the name of FUNCTION is
- of the form \"mh-foo\", where foo is some arbitrary string, then we
- check if the function `mh-show-foo' exists. If it exists then that
- function is used in the show buffer. Otherwise the original function
- `mh-foo' is used in the show buffer as well. Presence of \"sequence\"
- is handled similar to the above. The only difference is that the
- button is shown only when the folder is narrowed to a sequence. If
- \"letter\" is present in MODES, then the button is available during
- draft editing and runs FUNCTION when clicked.
-
- ICON is the icon that is drawn in the button.
-
- DOC is the documentation for the button. It is used in tool-tips and
- in providing other help to the user. GNU Emacs uses only the first
- line of the string. So the DOC should be formatted such that the
- first line is useful and complete without the rest of the string.
-
- Optional item ENABLE-EXPR is an arbitrary lisp expression. If it
- evaluates to nil, then the button is deactivated, otherwise it is
- active. If it isn't present then the button is always active."
- ;; The following variable names have been carefully chosen to make code
- ;; generation easier. Modifying the names should be done carefully.
- (let (folder-buttons folder-docs folder-button-setter sequence-button-setter
- show-buttons show-button-setter show-seq-button-setter
- letter-buttons letter-docs letter-button-setter
- folder-defaults letter-defaults
- folder-vectors show-vectors letter-vectors)
- (dolist (x defaults)
- (cond ((eq (car x) :folder) (setq folder-defaults (cdr x)))
- ((eq (car x) :letter) (setq letter-defaults (cdr x)))))
- (dolist (button buttons)
- (unless (and (listp button)
- (or (equal (length button) 4) (equal (length button) 5)))
- (error "Incorrect MH-E tool-bar button specification: %s" button))
- (let* ((name (nth 0 button))
- (name-str (symbol-name name))
- (icon (nth 2 button))
- (xemacs-icon (mh-do-in-xemacs
- (cdr (assoc (intern icon) mh-xemacs-icon-map))))
- (full-doc (nth 3 button))
- (doc (if (string-match "\\(.*\\)\n" full-doc)
- (match-string 1 full-doc)
- full-doc))
- (enable-expr (or (nth 4 button) t))
- (modes (nth 1 button))
- functions show-sym)
- (when (memq 'letter modes) (setq functions `(:letter ,name)))
- (when (or (memq 'folder modes) (memq 'sequence modes))
- (setq functions
- (append `(,(if (memq 'folder modes) :folder :sequence) ,name)
- functions))
- (setq show-sym
- (if (string-match "^mh-\\(.*\\)$" name-str)
- (intern (concat "mh-show-" (match-string 1 name-str)))
- name))
- (setq functions
- (append `(,(if (memq 'folder modes) :show :show-seq)
- ,(if (fboundp show-sym) show-sym name))
- functions)))
- (do ((functions functions (cddr functions)))
- ((null functions))
- (let* ((type (car functions))
- (function (cadr functions))
- (type1 (substring (symbol-name type) 1))
- (vector-list (cond ((eq type :show) 'show-vectors)
- ((eq type :show-seq) 'show-vectors)
- ((eq type :letter) 'letter-vectors)
- (t 'folder-vectors)))
- (list (cond ((eq type :letter) 'mh-tool-bar-letter-buttons)
- (t 'mh-tool-bar-folder-buttons)))
- (key (intern (concat "mh-" type1 "tool-bar-" name-str)))
- (setter (intern (concat type1 "-button-setter")))
- (mbuttons (cond ((eq type :letter) 'letter-buttons)
- ((eq type :show) 'show-buttons)
- ((eq type :show-seq) 'show-buttons)
- (t 'folder-buttons)))
- (docs (cond ((eq mbuttons 'letter-buttons) 'letter-docs)
- ((eq mbuttons 'folder-buttons) 'folder-docs))))
- (add-to-list vector-list `[,xemacs-icon ,function t ,full-doc])
- (add-to-list
- setter `(when (member ',name ,list)
- (mh-funcall-if-exists
- tool-bar-add-item ,icon ',function ',key
- :help ,doc :enable ',enable-expr)))
- (add-to-list mbuttons name)
- (if docs (add-to-list docs doc))))))
- (setq folder-buttons (nreverse folder-buttons)
- letter-buttons (nreverse letter-buttons)
- show-buttons (nreverse show-buttons)
- letter-docs (nreverse letter-docs)
- folder-docs (nreverse folder-docs)
- folder-vectors (nreverse folder-vectors)
- show-vectors (nreverse show-vectors)
- letter-vectors (nreverse letter-vectors))
- (dolist (x folder-defaults)
- (unless (memq x folder-buttons)
- (error "Folder defaults contains unknown button '%s'" x)))
- (dolist (x letter-defaults)
- (unless (memq x letter-buttons)
- (error "Letter defaults contains unknown button '%s'" x)))
- `(eval-when (compile load eval)
- (defvar mh-folder-tool-bar-map nil)
- (defvar mh-folder-seq-tool-bar-map nil)
- (defvar mh-show-tool-bar-map nil)
- (defvar mh-show-seq-tool-bar-map nil)
- (defvar mh-letter-tool-bar-map nil)
- ;; GNU Emacs tool bar specific code
- (mh-do-in-gnu-emacs
- ;; Tool bar initialization functions
- (defun mh-tool-bar-folder-buttons-init ()
- (when (mh-buffer-exists-p 'mh-folder-mode)
- (mh-image-load-path)
- (setq mh-folder-tool-bar-map
- (let ((tool-bar-map (make-sparse-keymap)))
- ,@(nreverse folder-button-setter)
- tool-bar-map))
- (setq mh-show-tool-bar-map
- (let ((tool-bar-map (make-sparse-keymap)))
- ,@(nreverse show-button-setter)
- tool-bar-map))
- (setq mh-show-seq-tool-bar-map
- (let ((tool-bar-map (copy-keymap mh-show-tool-bar-map)))
- ,@(nreverse show-seq-button-setter)
- tool-bar-map))
- (setq mh-folder-seq-tool-bar-map
- (let ((tool-bar-map (copy-keymap mh-folder-tool-bar-map)))
- ,@(nreverse sequence-button-setter)
- tool-bar-map))))
- (defun mh-tool-bar-letter-buttons-init ()
- (when (mh-buffer-exists-p 'mh-letter-mode)
- (mh-image-load-path)
- (setq mh-letter-tool-bar-map
- (let ((tool-bar-map (make-sparse-keymap)))
- ,@(nreverse letter-button-setter)
- tool-bar-map))))
- ;; Custom setter functions
- (defun mh-tool-bar-folder-buttons-set (symbol value)
- "Construct tool bar for `mh-folder-mode' and `mh-show-mode'."
- (set-default symbol value)
- (mh-tool-bar-folder-buttons-init))
- (defun mh-tool-bar-letter-buttons-set (symbol value)
- "Construct tool bar for `mh-letter-mode'."
- (set-default symbol value)
- (mh-tool-bar-letter-buttons-init)))
- ;; XEmacs specific code
- (mh-do-in-xemacs
- (defvar mh-tool-bar-folder-vector-map
- ',(loop for button in folder-buttons
- for vector in folder-vectors
- collect (cons button vector)))
- (defvar mh-tool-bar-show-vector-map
- ',(loop for button in show-buttons
- for vector in show-vectors
- collect (cons button vector)))
- (defvar mh-tool-bar-letter-vector-map
- ',(loop for button in letter-buttons
- for vector in letter-vectors
- collect (cons button vector)))
- (defvar mh-tool-bar-folder-buttons nil)
- (defvar mh-tool-bar-show-buttons nil)
- (defvar mh-tool-bar-letter-buttons nil)
- ;; Custom setter functions
- (defun mh-tool-bar-letter-buttons-set (symbol value)
- (set-default symbol value)
- (when mh-xemacs-has-tool-bar-flag
- (setq mh-tool-bar-letter-buttons
- (loop for b in value
- collect (cdr (assoc b mh-tool-bar-letter-vector-map))))))
- (defun mh-tool-bar-folder-buttons-set (symbol value)
- (set-default symbol value)
- (when mh-xemacs-has-tool-bar-flag
- (setq mh-tool-bar-folder-buttons
- (loop for b in value
- collect (cdr (assoc b mh-tool-bar-folder-vector-map))))
- (setq mh-tool-bar-show-buttons
- (loop for b in value
- collect (cdr (assoc b mh-tool-bar-show-vector-map))))))
- (defun mh-tool-bar-init (mode)
- "Install tool bar in MODE."
- (let ((tool-bar (cond ((eq mode :folder) mh-tool-bar-folder-buttons)
- ((eq mode :letter) mh-tool-bar-letter-buttons)
- ((eq mode :show) mh-tool-bar-show-buttons)))
- (height 37)
- (width 40)
- (buffer (current-buffer)))
- (when mh-xemacs-use-tool-bar-flag
- (cond
- ((eq mh-xemacs-tool-bar-position 'top)
- (set-specifier top-toolbar tool-bar buffer)
- (set-specifier top-toolbar-visible-p t)
- (set-specifier top-toolbar-height height))
- ((eq mh-xemacs-tool-bar-position 'bottom)
- (set-specifier bottom-toolbar tool-bar buffer)
- (set-specifier bottom-toolbar-visible-p t)
- (set-specifier bottom-toolbar-height height))
- ((eq mh-xemacs-tool-bar-position 'left)
- (set-specifier left-toolbar tool-bar buffer)
- (set-specifier left-toolbar-visible-p t)
- (set-specifier left-toolbar-width width))
- ((eq mh-xemacs-tool-bar-position 'right)
- (set-specifier right-toolbar tool-bar buffer)
- (set-specifier right-toolbar-visible-p t)
- (set-specifier right-toolbar-width width))
- (t (set-specifier default-toolbar tool-bar buffer)))))))
- ;; Declare customizable tool bars
- (custom-declare-variable
- 'mh-tool-bar-folder-buttons
- '(list ,@(mapcar (lambda (x) `(quote ,x)) folder-defaults))
- "List of buttons to include in MH-Folder tool bar."
- :group 'mh-tool-bar :set 'mh-tool-bar-folder-buttons-set
- :type '(set ,@(loop for x in folder-buttons
- for y in folder-docs
- collect `(const :tag ,y ,x))))
- (custom-declare-variable
- 'mh-tool-bar-letter-buttons
- '(list ,@(mapcar (lambda (x) `(quote ,x)) letter-defaults))
- "List of buttons to include in MH-Letter tool bar."
- :group 'mh-tool-bar :set 'mh-tool-bar-letter-buttons-set
- :type '(set ,@(loop for x in letter-buttons
- for y in letter-docs
- collect `(const :tag ,y ,x)))))))
-
-(mh-tool-bar-define
- ((:folder mh-inc-folder mh-mime-save-parts mh-previous-undeleted-msg
- mh-page-msg mh-next-undeleted-msg mh-delete-msg mh-refile-msg
- mh-undo mh-execute-commands mh-toggle-tick mh-reply
- mh-alias-grab-from-field mh-send mh-rescan-folder
- mh-tool-bar-search mh-visit-folder
- mh-tool-bar-customize mh-tool-bar-folder-help mh-widen)
- (:letter mh-send-letter mh-compose-insertion ispell-message save-buffer
- undo kill-region menu-bar-kill-ring-save yank mh-fully-kill-draft
- mh-tool-bar-customize mh-tool-bar-letter-help))
- ;; Folder/Show buffer buttons
- (mh-inc-folder (folder) "mail"
- "Incorporate new mail in Inbox
-This button runs `mh-inc-folder' which drags any
-new mail into your Inbox folder.")
- (mh-mime-save-parts (folder) "attach"
- "Save MIME parts from this message
-This button runs `mh-mime-save-parts' which saves a message's
-different parts into separate files.")
- (mh-previous-undeleted-msg (folder) "left-arrow"
- "Go to the previous undeleted message
-This button runs `mh-previous-undeleted-msg'")
- (mh-page-msg (folder) "page-down"
- "Page the current message forwards\nThis button runs `mh-page-msg'")
- (mh-next-undeleted-msg (folder) "right-arrow"
- "Go to the next undeleted message\nThe button runs `mh-next-undeleted-msg'")
- (mh-delete-msg (folder) "close"
- "Mark this message for deletion\nThis button runs `mh-delete-msg'")
- (mh-refile-msg (folder) "mail/refile"
- "Refile this message\nThis button runs `mh-refile-msg'")
- (mh-undo (folder) "undo" "Undo last operation\nThis button runs `undo'"
- (mh-outstanding-commands-p))
- (mh-execute-commands (folder) "execute"
- "Perform moves and deletes\nThis button runs `mh-execute-commands'"
- (mh-outstanding-commands-p))
- (mh-toggle-tick (folder) "highlight"
- "Toggle tick mark\nThis button runs `mh-toggle-tick'")
- (mh-toggle-showing (folder) "show"
- "Toggle showing message\nThis button runs `mh-toggle-showing'")
- (mh-tool-bar-reply-from (folder) "mail/reply-from" "Reply to \"from\"")
- (mh-tool-bar-reply-to (folder) "mail/reply-to" "Reply to \"to\"")
- (mh-tool-bar-reply-all (folder) "mail/reply-all" "Reply to \"all\"")
- (mh-reply (folder) "mail/reply"
- "Reply to this message\nThis button runs `mh-reply'")
- (mh-alias-grab-from-field (folder) "mail/alias"
- "Grab From alias\nThis button runs `mh-alias-grab-from-field'"
- (and (mh-extract-from-header-value) (not (mh-alias-for-from-p))))
- (mh-send (folder) "mail/compose"
- "Compose new message\nThis button runs `mh-send'")
- (mh-rescan-folder (folder) "refresh"
- "Rescan this folder\nThis button runs `mh-rescan-folder'")
- (mh-pack-folder (folder) "mail/repack"
- "Repack this folder\nThis button runs `mh-pack-folder'")
- (mh-tool-bar-search (folder) "search"
- "Search\nThis button runs `mh-tool-bar-search-function'")
- (mh-visit-folder (folder) "fld-open"
- "Visit other folder\nThis button runs `mh-visit-folder'")
- ;; Letter buffer buttons
- (mh-send-letter (letter) "mail/send" "Send this letter")
- (mh-compose-insertion (letter) "attach" "Insert attachment")
- (ispell-message (letter) "spell" "Check spelling")
- (save-buffer (letter) "save" "Save current buffer to its file"
- (buffer-modified-p))
- (undo (letter) "undo" "Undo last operation")
- (kill-region (letter) "cut"
- "Cut (kill) text in region between mark and current position")
- (menu-bar-kill-ring-save (letter) "copy"
- "Copy text in region between mark and current position")
- (yank (letter) "paste" "Paste (yank) text cut or copied earlier")
- (mh-fully-kill-draft (letter) "close" "Kill this draft")
- ;; Common buttons
- (mh-tool-bar-customize (folder letter) "preferences" "MH-E Preferences")
- (mh-tool-bar-folder-help (folder) "help"
- "Help! (general help)\nThis button runs `info'")
- (mh-tool-bar-letter-help (letter) "help"
- "Help! (general help)\nThis button runs `info'")
- ;; Folder narrowed to sequence buttons
- (mh-widen (sequence) "widen"
- "Widen from the sequence\nThis button runs `mh-widen'"))
-
-
-
-;;; Hooks (:group 'mh-hooks + group where hook described)
-
-(defcustom mh-after-commands-processed-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] after performing outstanding requests.
-
-Variables that are useful in this hook include
-`mh-folders-changed', which lists which folders were affected by
-deletes and refiles. This list will always include the current
-folder, which is also available in `mh-current-folder'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-alias-reloaded-hook nil
- "Hook run by `mh-alias-reload' after loading aliases."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-alias)
-
-(defcustom mh-before-commands-processed-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] before performing outstanding requests.
-
-Variables that are useful in this hook include `mh-delete-list'
-and `mh-refile-list' which can be used to see which changes will
-be made to the current folder, `mh-current-folder'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-before-quit-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-quit] before quitting MH-E.
-
-This hook is called before the quit occurs, so you might use it
-to perform any MH-E operations; you could perform some query and
-abort the quit or call `mh-execute-commands', for example.
-
-See also `mh-quit-hook'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-before-send-letter-hook nil
- "Hook run at the beginning of the \\<mh-letter-mode-map>\\[mh-send-letter] command.
-
-For example, if you want to check your spelling in your message
-before sending, add the `ispell-message' function."
- :type 'hook
- :options '(ispell-message)
- :group 'mh-hooks
- :group 'mh-letter)
-
-(defcustom mh-delete-msg-hook nil
- "Hook run by \\<mh-letter-mode-map>\\[mh-delete-msg] after marking each message for deletion.
-
-For example, a past maintainer of MH-E used this once when he
-kept statistics on his mail usage."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-show)
-
-(defcustom mh-find-path-hook nil
- "Hook run by `mh-find-path' after reading the user's MH profile.
-
-This hook can be used the change the value of the variables that
-`mh-find-path' sets if you need to run with different values
-between MH and MH-E."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-e)
-
-(defcustom mh-folder-mode-hook nil
- "Hook run by `mh-folder-mode' when visiting a new folder."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-forward-hook nil
- "Hook run by `mh-forward' on a forwarded letter."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-sending-mail)
-
-(defcustom mh-inc-folder-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-inc-folder] after incorporating mail into a folder."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-inc)
-
-(defcustom mh-insert-signature-hook nil
- "Hook run by \\<mh-letter-mode-map>\\[mh-insert-signature] after signature has been inserted.
-
-Hook functions may access the actual name of the file or the
-function used to insert the signature with
-`mh-signature-file-name'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-letter)
-
-(defcustom mh-kill-folder-suppress-prompt-hooks '(mh-search-p)
- "Abnormal hook run at the beginning of \\<mh-folder-mode-map>\\[mh-kill-folder].
-
-The hook functions are called with no arguments and should return
-a non-nil value to suppress the normal prompt when you remove a
-folder. This is useful for folders that are easily regenerated.
-
-The default value of `mh-search-p' suppresses the prompt on
-folders generated by searching.
-
-WARNING: Use this hook with care. If there is a bug in your hook
-which returns t on \"+inbox\" and you hit \\[mh-kill-folder] by
-accident in the \"+inbox\" folder, you will not be happy."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-letter-mode-hook nil
- "Hook run by `mh-letter-mode' on a new letter.
-
-This hook allows you to do some processing before editing a
-letter. For example, you may wish to modify the header after
-\"repl\" has done its work, or you may have a complicated
-\"components\" file and need to tell MH-E where the cursor should
-go."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-sending-mail)
-
-(defcustom mh-mh-to-mime-hook nil
- "Hook run on the formatted letter by \\<mh-letter-mode-map>\\[mh-mh-to-mime]."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-letter)
-
-(defcustom mh-search-mode-hook nil
- "Hook run upon entry to `mh-search-mode'\\<mh-folder-mode-map>.
-
-If you find that you do the same thing over and over when editing
-the search template, you may wish to bind some shortcuts to keys.
-This can be done with this hook which is called when
-\\[mh-search] is run on a new pattern."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-search)
-
-(defcustom mh-quit-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-quit] after quitting MH-E.
-
-This hook is not run in an MH-E context, so you might use it to
-modify the window setup.
-
-See also `mh-before-quit-hook'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-refile-msg-hook nil
- "Hook run by \\<mh-folder-mode-map>\\[mh-refile-msg] after marking each message for refiling."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-folder)
-
-(defcustom mh-show-hook nil
- "Hook run after \\<mh-folder-mode-map>\\[mh-show] shows a message.
-
-It is the last thing called after messages are displayed. It's
-used to affect the behavior of MH-E in general or when
-`mh-show-mode-hook' is too early. See `mh-show-mode-hook'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-show)
-
-(defcustom mh-show-mode-hook nil
- "Hook run upon entry to `mh-show-mode'.
-
-This hook is called early on in the process of the message
-display. It is usually used to perform some action on the
-message's content. See `mh-show-hook'."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-show)
-
-(defcustom mh-unseen-updated-hook nil
- "Hook run after the unseen sequence has been updated.
-
-The variable `mh-seen-list' can be used by this hook to obtain
-the list of messages which were removed from the unseen
-sequence."
- :type 'hook
- :group 'mh-hooks
- :group 'mh-sequences)
-
-
-
-;;; Faces (:group 'mh-faces + group where faces described)
-
-(if (boundp 'facemenu-unlisted-faces)
- (add-to-list 'facemenu-unlisted-faces "^mh-"))
-
-(defface mh-folder-address '((t (:inherit mh-folder-subject)))
- "Recipient face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-body
- '((((class color))
- (:inherit mh-folder-msg-number))
- (t
- (:inherit mh-folder-msg-number :italic t)))
- "Body text face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-cur-msg-number
- '((t
- (:inherit mh-folder-msg-number :bold t)))
- "Current message number face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-date '((t (:inherit mh-folder-msg-number)))
- "Date face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-deleted '((t (:inherit mh-folder-msg-number)))
- "Deleted message face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-followup
- '((((class color) (background light))
- (:foreground "blue3"))
- (((class color) (background dark))
- (:foreground "LightGoldenRod"))
- (t
- (:bold t)))
- "\"Re:\" face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-msg-number
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "snow4"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "snow3"))
- (((class color))
- (:foreground "cyan"))))
-
- "Message number face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-refiled
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "DarkGoldenrod"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "LightGoldenrod"))
- (((class color))
- (:foreground "yellow" :weight light))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t :italic t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t :italic t))
- (t
- (:bold t :italic t))))
- "Refiled message face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-sent-to-me-hint '((t (:inherit mh-folder-date)))
- "Fontification hint face in messages sent directly to us.
-The detection of messages sent to us is governed by the scan
-format `mh-scan-format-nmh' and the regular expression
-`mh-scan-sent-to-me-sender-regexp'."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-sent-to-me-sender '((t (:inherit mh-folder-followup)))
- "Sender face in messages sent directly to us.
-The detection of messages sent to us is governed by the scan
-format `mh-scan-format-nmh' and the regular expression
-`mh-scan-sent-to-me-sender-regexp'."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-subject
- '((((class color) (background light))
- (:foreground "blue4"))
- (((class color) (background dark))
- (:foreground "yellow"))
- (t
- (:bold t)))
- "Subject face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-tick
- '((((class color) (background dark))
- (:background "#dddf7e"))
- (((class color) (background light))
- (:background "#dddf7e"))
- (t
- (:underline t)))
- "Ticked message face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-folder-to
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "RosyBrown"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "LightSalmon"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :italic t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :italic t))
- (t
- (:italic t))))
- "\"To:\" face."
- :group 'mh-faces
- :group 'mh-folder)
-
-(defface mh-search-folder
- '((((class color) (background light))
- (:foreground "dark green" :bold t))
- (((class color) (background dark))
- (:foreground "indian red" :bold t))
- (t
- (:bold t)))
- "Folder heading face in MH-Folder buffers created by searches."
- :group 'mh-faces
- :group 'mh-search)
-
-(defface mh-letter-header-field
- '((((class color) (background light))
- (:background "gray90"))
- (((class color) (background dark))
- (:background "gray10"))
- (t
- (:bold t)))
- "Editable header field value face in draft buffers."
- :group 'mh-faces
- :group 'mh-letter)
-
-(defface mh-show-cc
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "DarkGoldenrod"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "LightGoldenrod"))
- (((class color))
- (:foreground "yellow" :weight light))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t :italic t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t :italic t))
- (t
- (:bold t :italic t))))
- "Face used to highlight \"cc:\" header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-date
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "ForestGreen"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "PaleGreen"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "Gray90" :bold t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t))
- (t
- (:bold t :underline t))))
- "Face used to highlight \"Date:\" header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-from
- '((((class color) (background light))
- (:foreground "red3"))
- (((class color) (background dark))
- (:foreground "cyan"))
- (t
- (:bold t)))
- "Face used to highlight \"From:\" header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-header
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "RosyBrown"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "LightSalmon"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :italic t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :italic t))
- (t
- (:italic t))))
- "Face used to deemphasize less interesting header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-pgg-bad '((t (:bold t :foreground "DeepPink1")))
- "Bad PGG signature face."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-pgg-good '((t (:bold t :foreground "LimeGreen")))
- "Good PGG signature face."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-pgg-unknown '((t (:bold t :foreground "DarkGoldenrod2")))
- "Unknown or untrusted PGG signature face."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-signature '((t (:italic t)))
- "Signature face."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-subject '((t (:inherit mh-folder-subject)))
- "Face used to highlight \"Subject:\" header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-to
- '((((class color) (background light))
- (:foreground "SaddleBrown"))
- (((class color) (background dark))
- (:foreground "burlywood"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :underline t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :underline t))
- (t (:underline t)))
- "Face used to highlight \"To:\" header fields."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-show-xface '((t (:inherit (mh-show-from highlight))))
- "X-Face image face.
-The background and foreground are used in the image."
- :group 'mh-faces
- :group 'mh-show)
-
-(defface mh-speedbar-folder
- '((((class color) (background light))
- (:foreground "blue4"))
- (((class color) (background dark))
- (:foreground "light blue")))
- "Basic folder face."
- :group 'mh-faces
- :group 'mh-speedbar)
-
-(defface mh-speedbar-folder-with-unseen-messages
- '((t
- (:inherit mh-speedbar-folder :bold t)))
- "Folder face when folder contains unread messages."
- :group 'mh-faces
- :group 'mh-speedbar)
-
-(defface mh-speedbar-selected-folder
- '((((class color) (background light))
- (:foreground "red1" :underline t))
- (((class color) (background dark))
- (:foreground "red1" :underline t))
- (t
- (:underline t)))
- "Selected folder face."
- :group 'mh-faces
- :group 'mh-speedbar)
-
-(defface mh-speedbar-selected-folder-with-unseen-messages
- '((t
- (:inherit mh-speedbar-selected-folder :bold t)))
- "Selected folder face when folder contains unread messages."
- :group 'mh-faces
- :group 'mh-speedbar)
-
-;;; XXX Temporary function for comparing old and new faces. Delete
-;;; when everybody is happy.
-(defvar bw-face-generation 'new)
-
-(defun bw-toggle-faces ()
- "Toggle between old and new faces."
- (interactive)
- (cond ((eq bw-face-generation 'new)
- (message "Going from new to old...")
- (bw-new-face-to-old)
- (message "Going from new to old...done")
- (setq bw-face-generation 'old))
- ((eq bw-face-generation 'old)
- (message "Going from old to new...")
- (bw-old-face-to-new)
- (message "Going from old to new...done")
- (setq bw-face-generation 'new))))
-
-(defun bw-new-face-to-old ()
- "Set old faces."
- (face-spec-set 'mh-folder-body
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "RosyBrown"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "LightSalmon"))
- (((class color))
- (:foreground "green"))
- (((class grayscale) (background light))
- (:foreground "DimGray" :italic t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :italic t))
- (t
- (:italic t)))))
-
- (face-spec-set 'mh-folder-msg-number
- '((((class color) (background light))
- (:foreground "snow4"))
- (((class color) (background dark))
- (:foreground "snow3"))
- (t
- (:bold t))))
-
- (face-spec-set 'mh-folder-cur-msg-number
- (mh-defface-compat
- '((((class color) (min-colors 88) (background light))
- (:foreground "Purple"))
- (((class color) (min-colors 88) (background dark))
- (:foreground "Cyan"))
- (((class color))
- (:foreground "cyan" :weight bold))
- (((class grayscale) (background light))
- (:foreground "LightGray" :bold t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t))
- (t
- (:bold t)))))
-
- (face-spec-set 'mh-folder-date
- '((((class color) (background light))
- (:foreground "snow4"))
- (((class color) (background dark))
- (:foreground "snow3"))
- (t
- (:bold t))))
-
- (face-spec-set 'mh-folder-msg-number
- '((((class color) (background light))
- (:foreground "snow4"))
- (((class color) (background dark))
- (:foreground "snow3"))
- (t
- (:bold t)))))
-
-(defun bw-old-face-to-new ()
- "Set new faces."
- (face-spec-set 'mh-folder-body
- '((((class color))
- (:inherit mh-folder-msg-number))
- (t
- (:inherit mh-folder-msg-number :italic t))))
-
- (face-spec-set 'mh-folder-cur-msg-number
- '((t
- (:inherit mh-folder-msg-number :bold t))))
-
- (face-spec-set 'mh-folder-date '((t (:inherit mh-folder-msg-number))))
-
- (face-spec-set 'mh-folder-msg-number
- '((((class color) (background light))
- (:foreground "snow4"))
- (((class color) (background dark))
- (:foreground "snow3"))
- (((class color))
- (:foreground "cyan")))))
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; sentence-end-double-space: nil
-;; End:
-
-;; arch-tag: 778d2a20-82e2-4276-be9d-309386776a68
-;;; mh-customize.el ends here