[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/mh-e/mh-customize.el [gnus-5_10-bran
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/mh-e/mh-customize.el [gnus-5_10-branch] |
Date: |
Sat, 04 Sep 2004 08:18:49 -0400 |
Index: emacs/lisp/mh-e/mh-customize.el
diff -c /dev/null emacs/lisp/mh-e/mh-customize.el:1.6.2.1
*** /dev/null Sat Sep 4 12:01:51 2004
--- emacs/lisp/mh-e/mh-customize.el Sat Sep 4 12:01:04 2004
***************
*** 0 ****
--- 1,2371 ----
+ ;;; mh-customize.el --- MH-E customization
+
+ ;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+ ;; Author: Bill Wohler <address@hidden>
+ ;; Maintainer: Bill Wohler <address@hidden>
+ ;; 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., 59 Temple Place - Suite 330,
+ ;; Boston, MA 02111-1307, 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
+ ;;
+ ;; Create a new face group if necessary; in this case, add the group
+ ;; associated with the manual node in which the faces are described to the
+ ;; faces' group definition. Since the face groups appear last, the face
+ ;; groups will appear at the end of these other groups.
+ ;;
+ ;;; Change Log:
+
+ ;;; Code:
+
+ (provide 'mh-customize)
+
+ (eval-when-compile (require 'mh-acros))
+ (mh-require-cl)
+ (require 'mh-loaddefs)
+
+ (autoload 'Info-goto-node "info")
+
+ (eval-and-compile
+ (defvar mh-xemacs-flag (featurep 'xemacs)
+ "Non-nil means the current Emacs is XEmacs."))
+
+ (when mh-xemacs-flag
+ (require 'mh-xemacs))
+
+ ;; XXX: Functions autoloaded from the following files are used to initialize
+ ;; customizable variables. They are require'd here, since otherwise the
+ ;; corresponding .elc would be loaded at compile time.
+ (eval-when-compile
+ (require 'mh-init)
+ (require 'mh-identity))
+
+ (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)
+ (when delete-other-windows-flag
+ (delete-other-windows)))
+
+
+
+ ;;; For compiler warnings...
+ (defvar mh-show-buffer)
+ (defvar mh-show-folder-buffer)
+
+ ;;; MH-E Customization Groups
+
+ (defgroup mh 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-e '((mh custom-group)) ; Sort of an alias for 'mh group
+ "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"))
+
+ (defgroup mh-alias nil
+ "Aliases."
+ :link '(custom-manual "(mh-e)Aliases")
+ :prefix "mh-alias-"
+ :group 'mh)
+
+ (defgroup mh-folder nil
+ "Organizing your mail with folders."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Organizing")
+ :group 'mh)
+
+ (defgroup mh-folder-selection nil
+ "Folder selection."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Folder Selection")
+ :group 'mh)
+
+ (defgroup mh-identity nil
+ "Identities."
+ :link '(custom-manual "(mh-e)Identities")
+ :prefix "mh-identity-"
+ :group 'mh)
+
+ (defgroup mh-inc nil
+ "Incorporating your mail."
+ :prefix "mh-inc-"
+ :link '(custom-manual "(mh-e)Incorporating Mail")
+ :group 'mh)
+
+ (defgroup mh-index nil
+ "Searching."
+ :link '(custom-manual "(mh-e)Searching")
+ :prefix "mh-index-"
+ :group 'mh)
+
+ (defgroup mh-junk nil
+ "Dealing with junk mail."
+ :link '(custom-manual "(mh-e)Junk")
+ :prefix "mh-junk-"
+ :group 'mh)
+
+ (defgroup mh-letter nil
+ "Editing a draft."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Editing Drafts")
+ :group 'mh)
+
+ (defgroup mh-ranges nil
+ "Ranges."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Ranges")
+ :group 'mh)
+
+ (defgroup mh-scan-line-formats nil
+ "Scan line formats."
+ :link '(custom-manual "(mh-e)Scan Line Formats")
+ :prefix "mh-"
+ :group 'mh)
+
+ (defgroup mh-sending-mail nil
+ "Sending mail."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Sending Mail")
+ :group 'mh)
+
+ (defgroup mh-sequences nil
+ "Sequences."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Sequences")
+ :group 'mh)
+
+ (defgroup mh-show nil
+ "Reading your mail."
+ :prefix "mh-"
+ :link '(custom-manual "(mh-e)Reading Mail")
+ :group 'mh)
+
+ (defgroup mh-speed nil
+ "The speedbar."
+ :prefix "mh-speed-"
+ :link '(custom-manual "(mh-e)Speedbar")
+ :group 'mh)
+
+ (defgroup mh-toolbar nil
+ "The toolbar"
+ :link '(custom-manual "(mh-e)Toolbar")
+ :prefix "mh-"
+ :group 'mh)
+
+ (defgroup mh-faces nil
+ "Faces used in MH-E."
+ :link '(custom-manual "(mh-e)Top")
+ :prefix "mh-"
+ :group 'faces
+ :group 'mh)
+
+ (defgroup mh-hooks nil
+ "MH-E hooks."
+ :link '(custom-manual "(mh-e)Top")
+ :prefix "mh-"
+ :group 'mh)
+
+ ;;; Faces
+
+ (defgroup mh-folder-faces nil
+ "Faces used in scan listing."
+ :link '(custom-manual "(mh-e)Organizing")
+ :prefix "mh-"
+ :group 'mh-faces
+ :group 'mh-show)
+
+ (defgroup mh-index-faces nil
+ "Faces used in searching."
+ :link '(custom-manual "(mh-e)Searching")
+ :prefix "mh-"
+ :group 'mh-faces
+ :group 'mh-index)
+
+ (defgroup mh-letter-faces nil
+ "Faces used in message drafts."
+ :link '(custom-manual "(mh-e)Sending Mail")
+ :prefix "mh-"
+ :group 'mh-faces
+ :group 'mh-letter)
+
+ (defgroup mh-show-faces nil
+ "Faces used in message display."
+ :link '(custom-manual "(mh-e)Reading Mail")
+ :prefix "mh-"
+ :group 'mh-faces
+ :group 'mh-show)
+
+ (defgroup mh-speed-faces nil
+ "Faces used in speedbar."
+ :link '(custom-manual "(mh-e)Speedbar")
+ :prefix "mh-"
+ :group 'mh-faces
+ :group 'mh-speed)
+
+
+
+ ;;; Emacs interface to the MH mail system (:group mh)
+ (eval-when (compile)
+ (setq mh-variant 'none))
+
+ (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', `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)
+
+
+
+ ;;; 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
+ this option off 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 prepended 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-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)
+
+
+
+ ;;; 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.
+
+ Each element consists of an identity label, and a collection of header fields
+ and a signature to insert if the identity is selected (see
+ `mh-identity-default', `mh-insert-identity' and the `Identity' menu in a
+ MH-Letter buffer). The `Value Menu' contains the common header fields `From'
+ and `Organization'. Other header fields may be added using the `Other Field'
+ menu item. The `Signature' menu item is used to insert a signature with
+ `mh-insert-signature'. The `GPG Key ID' menu item is used to specify a
+ different key to sign or encrypt messages."
+ :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.
+ Each element consists of the recipient, which is a regular expression, and a
+ collection of header fields and identities to insert if the message is sent to
+ this recipient. The `Value Menu' contains the common header fields `Fcc' and
+ `Mail-Followup-To'. Other header fields may be added using the `Other Field'
+ menu item. The `Identity' menu item is used to insert entire identities with
+ `mh-insert-identity'."
+ :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."
+ :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
+ '((":default" . mh-identity-handler-bottom)
+ ("from" . mh-identity-handler-top)
+ (":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 is an alist of fields (strings) and handlers (functions). Strings are
+ lowercase. Use \":signature\" for Signature and \":pgg-default-user-id\" for
+ GPG Key ID. The function associated with the string \":default\" is used if no
+ other functions are appropriate."
+ :type '(repeat (cons (string :tag "Field") function))
+ :group 'mh-identity)
+
+
+
+ ;;; Incorporating Your Mail (:group 'mh-inc)
+
+ (defcustom mh-inc-prog "inc"
+ "*Program to run to incorporate new mail into a folder.
+ Normally \"inc\". This program is relative to the `mh-progs' directory unless
+ it is an absolute pathname."
+ :type 'string
+ :group 'mh-inc)
+
+ (defcustom mh-inc-spool-list nil
+ "*Alist of alternate spool files, corresponding folders and keybindings.
+ This option will be described by example.
+
+ Suppose you have subscribed to the mh-e-devel mailing list and you use
+ procmail to filter its mail into `~/mail/mh-e' with the following
+ `.procmailrc' recipe:
+
+ MAILDIR=$HOME/mail
+ :0:
+ * ^From address@hidden
+ mh-e
+
+ If you wanted to incorporate that spool file into an MH folder called mh-e
+ with the \"I m\" or \\[mh-inc-spool-mh-e] commands, you would use the
+ following:
+
+ Spool File: ~/mail/mh-e
+ Folder: mh-e
+ Key Binding: m
+
+ Then, you could also install `xbuffy' and configure an extra mailbox using the
+ gnuserv package to run the `mh-inc-spool-mh-e' command in Emacs:
+
+ box ~/mail/mh-e
+ title mh-e
+ origMode
+ polltime 10
+ headertime 0
+ command gnudoit -q '(mh-inc-spool-mh-e)'
+
+ To incorporate the spool file, click the xbuffy box with the middle mouse
+ button."
+ :type '(repeat (list (file :tag "Spool File")
+ (string :tag "Folder")
+ (character :tag "Key Binding")))
+ :set 'mh-inc-spool-list-set
+ :group 'mh-inc)
+
+
+
+ ;;; Searching (:group 'mh-index)
+
+ (defcustom mh-index-new-messages-folders t
+ "Folders searched for the `unseen' sequence.
+ This option can be set 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'."
+ :group 'mh-index
+ :type '(choice (const :tag "Inbox" t)
+ (const :tag "All" nil)
+ (repeat :tag "Choose Folders" (string :tag "Folder"))))
+
+ (defcustom mh-index-program nil
+ "Indexing 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-index-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-index)
+
+ (defcustom mh-index-ticked-messages-folders t
+ "Folders searched for `mh-tick-seq'.
+ This option can be set 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'."
+ :group 'mh-index
+ :type '(choice (const :tag "Inbox" t)
+ (const :tag "All" nil)
+ (repeat :tag "Choose Folders" (string :tag "Folder"))))
+
+
+
+ ;;; 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-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)
+
+ (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)
+
+
+
+ ;;; Editing a Draft (:group 'mh-letter)
+
+ (defcustom mh-mml-method-default (if mh-gnus-pgp-support-flag "pgpmime"
"none")
+ "Default method to use in security directives."
+ :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-compose-forward-as-mime-flag t
+ "Non-nil means that messages are forwarded as a MIME part."
+ :type 'boolean
+ :group 'mh-letter)
+
+ (defcustom mh-compose-insertion (if (locate-library "mml") 'gnus 'mhn)
+ "Type of MIME message directives in messages.
+
+ By default, this option is set to `Gnus' if it is supported. This option can
+ also be set manually to `mhn' if mhn directives are preferred."
+ :type '(choice (const :tag "Gnus" gnus)
+ (const :tag "mhn" mhn))
+ :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 that <SPC> 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.
+ If this option is on, yanking the current message into a draft letter with
+ \\<mh-letter-mode-map>\\[mh-yank-cur-msg] deletes any windows displaying the
+ message."
+ :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]."
+ :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 non-blank line of a yanked or inserted message.
+ Used when the message is inserted into an outgoing letter
+ by \\<mh-letter-mode-map>\\[mh-insert-letter] or \\[mh-yank-cur-msg]."
+ :type 'string
+ :group 'mh-letter)
+
+ (defcustom mh-insert-x-mailer-flag t
+ "*Non-nil means append an X-Mailer field to the header."
+ :type 'boolean
+ :group 'mh-letter)
+
+ (defcustom mh-letter-complete-function 'ispell-complete-word
+ "*Function to call when completing outside of address or folder fields.
+ By default, this is set to `ispell-complete-word'."
+ :type '(choice function (const nil))
+ :group 'mh-letter)
+
+ (defcustom mh-letter-fill-column 72
+ "*Fill column to use in `mh-letter-mode'.
+ This is usually less than in other text modes because email messages get
+ quoted by some prefix (sometimes many times) when they are replied to,
+ and it's best to avoid quoted lines that span more than 80 columns."
+ :type 'integer
+ :group 'mh-letter)
+
+ (defcustom mh-reply-show-message-flag t
+ "*Non-nil means the show buffer is displayed using
\\<mh-letter-mode-map>\\[mh-reply].
+
+ The setting of this variable determines whether the MH `show-buffer' is
+ displayed with the current message when using `mh-reply' without a prefix
+ argument. Set it to nil if you already include the message automatically
+ in your draft using
+ repl: -filter repl.filter
+ in your ~/.mh_profile file."
+ :type 'boolean
+ :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 files 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. Variables 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 `mh-identity-list'
+ option."
+ :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, which can be obtained from
+ ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z. The \"Online
+ X-Face Convertor\" at http://www.dairiki.org/xface/ is a useful resource for
+ quick conversion of images into `X-Face:' header fields.
+
+ Use the `make-face' script (http://quimby.gnus.org/circus/face/make-face) to
+ convert a JPEG image to the higher resolution, color, `Face:' header field.
+
+ 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-from-start-of-msg 'attribution
+ "*Controls which part of a message is yanked by
\\<mh-letter-mode-map>\\[mh-yank-cur-msg].
+ If t, include the entire message, with full headers. This is historically
+ here for use with supercite, but is now deprecated in favor of the setting
+ `supercite' below.
+
+ If the symbol `body', then yank the message minus the header.
+
+ If the symbol `supercite', include the entire message, with full headers.
+ This also causes the invocation of `sc-cite-original' without the setting
+ of `mail-citation-hook', now deprecated practice.
+
+ If the symbol `autosupercite', do as for `supercite' automatically when
+ show buffer matches the message being replied-to. When this option is used,
+ the -noformat switch is passed to the repl program to override a -filter or
+ -format switch.
+
+ If the symbol `attribution', then yank the message minus the header and add
+ a simple attribution line at the top.
+
+ If the symbol `autoattrib', do as for `attribution' automatically when show
+ buffer matches the message being replied-to. You can make sure this is
+ always the case by setting `mh-reply-show-message-flag' to t (which is the
+ default) and optionally `mh-delete-yanked-msg-window-flag' to t as well such
+ that the show window is never displayed. When the `autoattrib' option is
+ used, the -noformat switch is passed to the repl program to override a
+ -filter or -format switch.
+
+ If nil, yank only the portion of the message following the point.
+
+ If the show buffer has a region, this variable is ignored unless its value is
+ one of `attribution' or `autoattrib' in which case the attribution is added
+ to the yanked region."
+ :type '(choice (const :tag "Below point" nil)
+ (const :tag "Without header" body)
+ (const :tag "Invoke supercite" supercite)
+ (const :tag "Invoke supercite, automatically" autosupercite)
+ (const :tag "Without header, with attribution" attribution)
+ (const :tag "Without header, with attribution, automatically"
+ autoattrib)
+ (const :tag "Entire message with headers" t))
+ :group 'mh-letter)
+
+
+
+ ;;; Ranges (:group 'mh-ranges)
+
+ (defcustom mh-interpret-number-as-range-flag t
+ "Non-nil means interpret a number as a range.
+ If the variable is non-nil, and you use an integer, N, when asked for a
+ range to scan, then MH-E uses the range \"last:N\"."
+ :type 'boolean
+ :group 'mh-ranges)
+
+
+
+ ;;; Scan Line Formats (:group 'mh-scan-line-formats)
+
+ (defcustom mh-adaptive-cmd-note-flag t
+ "*Non-nil means that the message number width is determined dynamically.
+ This is done once when a folder is first opened by running scan on the last
+ message of the folder. The message number for the last message is extracted
+ and its width calculated. This width is used when calling `mh-set-cmd-note'.
+
+ If you prefer fixed-width message numbers, set this variable to nil and call
+ `mh-set-cmd-note' with the width specified by the scan format in
+ `mh-scan-format-file'. For example, the default width is 4, so you would use
+ \"(mh-set-cmd-note 4)\" if `mh-scan-format-file' were nil."
+ :type 'boolean
+ :group 'mh-scan-line-formats)
+
+ (defcustom mh-scan-format-file t
+ "Specifies the format file to pass to the scan program.
+ If t, the format string will be taken from the either `mh-scan-format-mh'
+ or `mh-scan-format-nmh' depending on whether MH or nmh is in use.
+ If nil, the default scan output will be used.
+
+ If you customize the scan format, you may need to modify a few variables
+ containing regexps that MH-E uses to identify specific portions of the output.
+ Use `M-x apropos RET mh-scan.*regexp' to obtain a list of these variables. You
+ may also have to call `mh-set-cmd-note' with the width of your message
+ numbers. See also `mh-adaptive-cmd-note-flag'."
+ :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)
+
+ (defcustom mh-scan-prog "scan"
+ "*Program to run to generate one-line-per-message listing of a folder.
+ Normally \"scan\" or a file name linked to scan. This file is searched
+ for relative to the `mh-progs' directory unless it is an absolute pathname."
+ :type 'string
+ :group 'mh-scan-line-formats)
+ (make-variable-buffer-local 'mh-scan-prog)
+
+
+
+ ;;; Sending Mail (:group 'mh-sending-mail)
+
+ (defcustom mh-compose-letter-function nil
+ "Invoked when setting up a letter draft.
+ It is passed three arguments: TO recipients, SUBJECT, and CC recipients."
+ :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 to generate the Subject: line contents for a forwarded message.
+ The two string arguments to the format are the sender of the original
+ message and the original subject line."
+ :type 'string
+ :group 'mh-sending-mail)
+
+ (defcustom mh-reply-default-reply-to nil
+ "*Sets the person or persons to whom a reply will be sent.
+ If nil, prompt for recipient. If non-nil, then
\\<mh-folder-mode-map>`\\[mh-reply]' will use this
+ value and it should be one of \"from\", \"to\", \"cc\", or \"all\".
+ The values \"cc\" and \"all\" do the same thing."
+ :type '(choice (const :tag "Prompt" nil)
+ (const "from") (const "to")
+ (const "cc") (const "all"))
+ :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 this variable is non-nil and a message belonging to a sequence other than
+ cur or Previous-Sequence (see mh-profile 5) is refiled then it is put in the
+ same sequence in the destination folder."
+ :type 'boolean
+ :group 'mh-sequences)
+
+ (defcustom mh-tick-seq 'tick
+ "The name of the MH sequence for ticked messages.
+ You would change 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.
+ 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 `mh-tick-seq' option which is `tick' by default.
+ If you do not like this behavior, set this option to nil. You can then update
+ the state manually with the \\<mh-folder-mode-map>`\\[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 that the displayed show buffer for a folder is buried."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-clean-message-header-flag t
+ "*Non-nil means remove extraneous header fields.
+ The header fields listed in the `mh-invisible-header-fields-default' 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 `mh-invisible-header-fields' option."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-decode-mime-flag (not (not (locate-library "mm-decode")))
+ "*Non-nil means that Gnus is used to show MIME attachments with Gnus."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-display-buttons-for-alternatives-flag nil
+ "*Non-nil means display buttons for all MIME alternatives.
+ Default behavior is to display only the preferred alternative. If this
+ variable is non-nil, 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 MIME parts.
+ If non-nil, buttons are displayed for all MIME parts. Inline parts start off
+ in displayed state but they can be hidden by clicking the button. If nil no
+ buttons are shown for inline parts."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-do-not-confirm-flag nil
+ "*Non-nil means 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. A non-nil setting will
+ perform the action--which is usually desired but cannot be retracted--without
+ question."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-fetch-x-image-url 'ask
+ "*Control fetching of `X-Image-URL:' header field image.
+ If set to \"Always fetch\" (t), the image is always fetched. You probably want
+ to avoid this setting for privacy and DOS (denial of service) reasons. For
+ example, fetching a URL can tip off a spammer that you've read his email.
+ 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.
+
+ If set to \"Ask before fetching\" ('ask), 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 the default.
+
+ If set to \"Never fetch\" (nil), images are never fetched and only displayed
+ if they are already present in the cache.
+
+ The cache of images is found in the directory `.mhe-x-image-cache' within your
+ MH directory. To see how you can add your own face to the `From:' field, see
+ `mh-x-face-file'.
+
+ This setting only has effect if `mh-show-use-xface-flag' is non-nil."
+
+ :type '(choice (const :tag "Always fetch" t)
+ (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.
+ Non-nil means that small graphics will be used in the show buffer instead of
+ patterns like :-), ;-) etc. The setting only has effect if
+ `mh-decode-mime-flag' is non-nil."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-graphical-emphasis-flag t
+ "*Non-nil means graphical emphasis is displayed.
+ Non-nil means that _underline_ will be underlined, *bold* will appear in bold,
+ /italic/ will appear in italic etc. See `gnus-emphasis-alist' for the whole
+ list. The setting only has effect if `mh-decode-mime-flag' is non-nil."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-highlight-citation-p 'gnus
+ "How to highlight citations in show buffers.
+ The gnus method uses a different color for each indentation."
+ :type '(choice (const :tag "Use Gnus" gnus)
+ (const :tag "Use font-lock" font-lock)
+ (const :tag "Don't fontify" 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:"
+ "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
+ "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-Complaints-To:"
+ "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-Face:"
+ "X-Folder:" ; Spam
+ "X-From-Line"
+ "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-Image-URL:" ; URL equivalent of X-Face and Face
+ "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-MHE-Checksum" ; Checksum added during index search
+ "X-MIME-Autoconverted:" ; sendmail
+ "X-MIMETrack:"
+ "X-Mms-" ; T-Mobile pictures
+ "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-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-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-UserInfo1:"
+ "X-VSMLoop:" ; NTMail
+ "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'.")
+
+ (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-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 `mh-invisible-header-fields'
+ option.
+
+ 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-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.
+
+ 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)
+
+ (defcustom mh-lpr-command-format "lpr -J '%s'"
+ "*Format for Unix command that prints a message.
+ The string should be a Unix command line, with the string '%s' where
+ the job's name (folder and message number) should appear. The formatted
+ message text is piped to this command when you type
\\<mh-folder-mode-map>`\\[mh-print-msg]'."
+ :type 'string
+ :group 'mh-show)
+
+ (defcustom mh-max-inline-image-height nil
+ "*Maximum inline image height if Content-Disposition is not present.
+ If nil, image will be displayed if its height is smaller than the height of
+ the window."
+ :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.
+ If nil, image will be displayed if its width is smaller than the width of the
+ window."
+ :type '(choice (const nil) integer)
+ :group 'mh-show)
+
+ (defcustom mh-mime-save-parts-default-directory t
+ "Default directory to use for `mh-mime-save-parts'.
+ If nil, prompt and set for next time the command is used during same session.
+ If t, prompt always"
+ :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.
+ WARNING: do not delete the messages until printing is finished;
+ otherwise, your output may be truncated."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-recursive-folders-flag nil
+ "*Non-nil means that commands which operate on folders do so recursively."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-show-maximum-size 0
+ "*Maximum size of message (in bytes) to display automatically.
+ Provides an opportunity to skip over large messages which may be slow to load.
+ Use a value of 0 to display all messages automatically regardless of size."
+ :type 'integer
+ :group 'mh-show)
+
+ (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 if the flag is
+ non-nil then threading will be done only if the number of messages being
+ threaded is less than `mh-large-folder'."
+ :type 'boolean
+ :group 'mh-show)
+
+ ;; Use goto-addr if it was already loaded (which probably sets this
+ ;; variable to t), or if this variable is otherwise set to t.
+ (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.
+ The `goto-addr' module is used."
+ :type 'boolean
+ :group 'mh-show)
+
+ (defcustom mh-show-use-xface-flag (>= emacs-major-version 21)
+ "*Non-nil means display face images in `mh-show-mode'.
+
+ 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. Note that versions of GNU Emacs
+ prior to 21.1 don't support the display of inline images, so face images are
+ not displayed in these versions.
+
+ 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 http://quimby.gnus.org/circus/face/. Next is the traditional `X-Face:'
+ header field. The display of this field requires the `uncompface' program
+ which can be obtained from
+ 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 which is
+ available at 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' (available from
+ http://www.gnu.org/software/wget/wget.html), `fetch', or `curl' to fetch the
+ image and the `convert' program from the ImageMagick suite, available from
+ 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
+ "*Last directory used by \\[mh-store-msg]; default for next store.
+ A directory name string, or nil to use current directory."
+ :type '(choice (const :tag "Current" nil)
+ directory)
+ :group 'mh-show)
+
+ (defcustom mh-summary-height nil
+ "*Number of lines in MH-Folder window (including the mode line)."
+ :type '(choice (const :tag "Automatic" nil)
+ (integer :tag "Fixed sized"))
+ :group 'mh-show)
+
+ (defcustom mhl-formfile nil
+ "*Name of format file to be used by mhl to show and print messages.
+ A value of t means use the default format file.
+ nil means don't use mhl to format messages when showing; mhl is still used,
+ with the default format file, to format messages when printing them.
+ The format used should specify a non-zero value for overflowoffset so
+ the message continues to conform to RFC 822 and MH-E can parse the headers."
+ :type '(choice (const nil) (const t) string)
+ :group 'mh-show)
+ (put 'mhl-formfile 'info-file "mh-e")
+
+
+
+ ;;; The Speedbar (:group 'mh-speed)
+
+ (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-speed)
+
+ (defcustom mh-speed-flists-interval 60
+ "Time between calls to flists in seconds.
+ If 0, flists is not called repeatedly."
+ :type 'integer
+ :group 'mh-speed)
+
+ (defcustom mh-speed-run-flists-flag t
+ "Non-nil means flists is used.
+ If non-nil, flists is executed every `mh-speed-flists-interval' seconds to
+ update the display of the number of unseen and total messages in each folder.
+ If resources are limited, this can be set to nil and the speedbar display can
+ be updated manually with the \\[mh-speed-flists] command."
+ :type 'boolean
+ :group 'mh-speed)
+
+
+
+ ;;; The Toolbar (:group 'mh-toolbar)
+
+ (defcustom mh-tool-bar-search-function 'mh-search-folder
+ "*Function called by the tool-bar search button.
+ See `mh-search-folder' and `mh-index-search' for details."
+ :type '(choice (const mh-search-folder)
+ (const mh-index-search)
+ (function :tag "Other function"))
+ :group 'mh-toolbar)
+
+ ;; 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 toolbar."
+ (interactive)
+ (mh-customize t))
+
+ (defun mh-tool-bar-folder-help ()
+ "Visit \"(mh-e)Top\"."
+ (interactive)
+ (Info-goto-node "(mh-e)Top")
+ (delete-other-windows))
+
+ (defun mh-tool-bar-letter-help ()
+ "Visit \"(mh-e)Draft Editing\"."
+ (interactive)
+ (Info-goto-node "(mh-e)Draft Editing")
+ (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-toolbar-flag (if (and (featurep 'toolbar)
+ (featurep 'xpm)
+ (device-on-window-system-p))
+ t
+ nil)
+ "*If non-nil, use toolbar.
+
+ This will default to t if you are in an environment that supports
+ toolbars and xpm."
+ :type 'boolean
+ :group 'mh-toolbar)
+
+ (defcustom mh-xemacs-toolbar-position (if mh-xemacs-use-toolbar-flag
+ 'default
+ nil)
+ "*Where to put the toolbar.
+
+ Valid non-nil values are \"default\", \"top\", \"bottom\", \"left\",
+ \"right\". These match the four edges of the frame, with \"default\"
+ meaning \"use the same position as the default-toolbar\".
+
+ A nil value means do not use a toolbar.
+
+ If this variable is set to anything other than \"default\" and the
+ default-toolbar has a different positional setting from the value of
+ this variable, then two toolbars will be displayed. The MH-E toolbar
+ and the default-toolbar."
+ :type '(radio (const :tag "Same position as the \"default-toolbar\""
+ :value default)
+ (const :tag "Along the top edge of the frame"
+ :value top)
+ (const :tag "Along the bottom edge of the frame"
+ :value bottom)
+ (const :tag "Along the left edge of the frame"
+ :value left)
+ (const :tag "Along the right edge of the frame"
+ :value right)
+ (const :tag "Don't use a toolbar" nil))
+ :group 'mh-toolbar))
+
+ (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 is in'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 "toolbar-" 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
+ ;; Custom setter functions
+ (defun mh-tool-bar-folder-buttons-set (symbol value)
+ "Construct toolbar for `mh-folder-mode' and `mh-show-mode'."
+ (set-default symbol value)
+ (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-set (symbol value)
+ "Construct toolbar for `mh-letter-mode'."
+ (set-default symbol value)
+ (setq mh-letter-tool-bar-map
+ (let ((tool-bar-map (make-sparse-keymap)))
+ ,@(nreverse letter-button-setter)
+ tool-bar-map))))
+ ;; XEmacs specific code
+ (mh-do-in-xemacs
+ (defvar mh-toolbar-folder-vector-map
+ ',(loop for button in folder-buttons
+ for vector in folder-vectors
+ collect (cons button vector)))
+ (defvar mh-toolbar-show-vector-map
+ ',(loop for button in show-buttons
+ for vector in show-vectors
+ collect (cons button vector)))
+ (defvar mh-toolbar-letter-vector-map
+ ',(loop for button in letter-buttons
+ for vector in letter-vectors
+ collect (cons button vector)))
+ (defvar mh-toolbar-folder-buttons nil)
+ (defvar mh-toolbar-show-buttons nil)
+ (defvar mh-toolbar-letter-buttons nil)
+ ;; Custom setter functions
+ (defun mh-tool-bar-letter-buttons-set (symbol value)
+ (set-default symbol value)
+ (when mh-xemacs-has-toolbar-flag
+ (setq mh-toolbar-letter-buttons
+ (loop for b in value
+ collect (cdr (assoc b
mh-toolbar-letter-vector-map))))))
+ (defun mh-tool-bar-folder-buttons-set (symbol value)
+ (set-default symbol value)
+ (when mh-xemacs-has-toolbar-flag
+ (setq mh-toolbar-folder-buttons
+ (loop for b in value
+ collect (cdr (assoc b
mh-toolbar-folder-vector-map))))
+ (setq mh-toolbar-show-buttons
+ (loop for b in value
+ collect (cdr (assoc b
mh-toolbar-show-vector-map))))))
+ ;; Initialize toolbar
+ (defun mh-toolbar-init (mode)
+ "Install toolbar in MODE."
+ (let ((toolbar (cond ((eq mode :folder) mh-toolbar-folder-buttons)
+ ((eq mode :letter) mh-toolbar-letter-buttons)
+ ((eq mode :show) mh-toolbar-show-buttons)))
+ (height 37)
+ (width 40)
+ (buffer (current-buffer)))
+ (when (and mh-xemacs-toolbar-position mh-xemacs-use-toolbar-flag
+ mh-xemacs-has-toolbar-flag)
+ (cond
+ ((eq mh-xemacs-toolbar-position 'top)
+ (set-specifier top-toolbar toolbar buffer)
+ (set-specifier top-toolbar-visible-p t)
+ (set-specifier top-toolbar-height height))
+ ((eq mh-xemacs-toolbar-position 'bottom)
+ (set-specifier bottom-toolbar toolbar buffer)
+ (set-specifier bottom-toolbar-visible-p t)
+ (set-specifier bottom-toolbar-height height))
+ ((eq mh-xemacs-toolbar-position 'left)
+ (set-specifier left-toolbar toolbar buffer)
+ (set-specifier left-toolbar-visible-p t)
+ (set-specifier left-toolbar-width width))
+ ((eq mh-xemacs-toolbar-position 'right)
+ (set-specifier right-toolbar toolbar buffer)
+ (set-specifier right-toolbar-visible-p t)
+ (set-specifier right-toolbar-width width))
+ (t (set-specifier default-toolbar toolbar buffer)))))))
+ ;; Declare customizable toolbars
+ (custom-declare-variable
+ 'mh-tool-bar-folder-buttons
+ '(list ,@(mapcar (lambda (x) `(quote ,x)) folder-defaults))
+ "Choose buttons to include in MH-E folder/show toolbar."
+ :group 'mh-toolbar :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))
+ "Choose buttons to include in MH-E letter toolbar."
+ :group 'mh-toolbar :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) "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) "reply-from" "Reply to \"from\"")
+ (mh-tool-bar-reply-to (folder) "reply-to" "Reply to \"to\"")
+ (mh-tool-bar-reply-all (folder) "reply-all" "Reply to \"all\"")
+ (mh-reply (folder) "mail/reply2"
+ "Reply to this message\nThis button runs `mh-reply'")
+ (mh-alias-grab-from-field (folder) "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) "rescan"
+ "Rescan this folder\nThis button runs `mh-rescan-folder'")
+ (mh-pack-folder (folder) "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-goto-node'")
+ (mh-tool-bar-letter-help (letter) "help"
+ "Help! (general help)\nThis button runs `Info-goto-node'")
+ ;; 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 mail-citation-hook nil
+ "*Hook for modifying a citation just inserted in the mail buffer.
+ Each hook function can find the citation between point and mark.
+ And each hook function should leave point and mark around the citation
+ text as modified.
+
+ If this hook is entirely empty (nil), the text of the message is inserted
+ with `mh-ins-buf-prefix' prefixed to each line.
+
+ See also the variable `mh-yank-from-start-of-msg', which controls how
+ much of the message passed to the hook.
+
+ This hook was historically provided to set up supercite. You may now leave
+ this nil and set up supercite by setting the variable
+ `mh-yank-from-start-of-msg' to 'supercite or, for more automatic insertion,
+ to 'autosupercite.
+
+ The hook 'trivial-cite is NOT part of Emacs. It is provided from tc.el,
+ available here:
+ http://shasta.cs.uiuc.edu/~lrclause/tc.html
+ If you use it, customize `mh-yank-from-start-of-msg' to
+ \"Entire message with headers\"."
+ :type 'hook
+ :options '(trivial-cite)
+ :group 'mh-hooks
+ :group 'mh-letter)
+
+ (defcustom mh-alias-reloaded-hook nil
+ "Invoked by `mh-alias-reload' after reloading aliases."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-alias)
+
+ (defcustom mh-before-quit-hook nil
+ "Invoked by \\<mh-folder-mode-map>`\\[mh-quit]' before quitting MH-E.
+ See also `mh-quit-hook'."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-before-send-letter-hook nil
+ "Invoked at the beginning of the \\<mh-letter-mode-map>\\[mh-send-letter]
command."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-letter)
+
+ (defcustom mh-delete-msg-hook nil
+ "Invoked after marking each message for deletion."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-edit-mhn-hook nil
+ "Invoked on the formatted letter by \\<mh-letter-mode-map>\\[mh-edit-mhn]."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-letter)
+
+ (defcustom mh-find-path-hook nil
+ "Invoked by `mh-find-path' after reading the user's MH profile."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-folder-mode-hook nil
+ "Invoked in `mh-folder-mode' on a new folder."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-folder-updated-hook nil
+ "Invoked when the folder actions (such as moves and deletes) are performed.
+ Variables that are useful in this hook include `mh-delete-list' and
+ `mh-refile-list' which can be used to see which changes are being made to
+ current folder, `mh-current-folder'."
+ :type 'hook
+ :group 'mh-hooks)
+
+ (defcustom mh-forward-hook nil
+ "Invoked on the forwarded letter by \\<mh-folder-mode-map>\\[mh-forward]."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-folder)
+
+ (defcustom mh-inc-folder-hook nil
+ "Invoked by \\<mh-folder-mode-map>`\\[mh-inc-folder]' after incorporating
mail into a folder."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-inc)
+
+ (defcustom mh-kill-folder-suppress-prompt-hook '(mh-index-p)
+ "Invoked at the beginning of the
\\<mh-folder-mode-map>`\\[mh-kill-folder]' command.
+ This hook is a list of functions to be called, with no arguments, which should
+ return a value of non-nil if you should not be asked if you're sure that you
+ want to remove the folder. This is useful for folders that are easily
+ regenerated.
+
+ The default value of `mh-index-p' suppresses the prompt on folders generated
+ by an index search.
+
+ WARNING: Use this hook with care. If there is a bug in your hook which returns
+ t on +inbox and you hit \\<mh-folder-mode-map>`\\[mh-kill-folder]' by accident
+ in the +inbox buffer, you will not be happy."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-letter-insert-signature-hook nil
+ "Invoked after signature has been inserted.
+ This hook 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-letter-mode-hook nil
+ "Invoked in `mh-letter-mode' on a new letter."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-sending-mail)
+
+ (defcustom mh-pick-mode-hook nil
+ "Invoked upon entry to `mh-pick-mode'."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-index)
+
+ (defcustom mh-quit-hook nil
+ "Invoked after \\<mh-folder-mode-map>`\\[mh-quit]' quits MH-E.
+ See also `mh-before-quit-hook'."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-refile-msg-hook nil
+ "Invoked after marking each message for refiling."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-show-hook nil
+ "Invoked after \\<mh-folder-mode-map>`\\[mh-show]' shows a message."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-show-mode-hook nil
+ "Invoked upon entry to `mh-show-mode'."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+ (defcustom mh-unseen-updated-hook nil
+ "Invoked after the unseen sequence has been updated.
+ The variable `mh-seen-list' can be used to obtain the list of messages which
+ will be removed from the unseen sequence."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-show)
+
+
+
+ ;;; Faces (:group 'mh-*-faces + group where faces described)
+
+ ;;; Faces Used in Scan Listing (:group 'mh-folder-faces)
+
+ (defvar mh-folder-body-face 'mh-folder-body-face
+ "Face for highlighting body text in MH-Folder buffers.")
+ (defface mh-folder-body-face
+ '((((type tty) (class color)) (:foreground "green"))
+ (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
+ (((class grayscale) (background dark)) (:foreground "LightGray" :italic
t))
+ (((class color) (background light)) (:foreground "RosyBrown"))
+ (((class color) (background dark)) (:foreground "LightSalmon"))
+ (t (:italic t)))
+ "Face for highlighting body text in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-cur-msg-face 'mh-folder-cur-msg-face
+ "Face for the current message line in MH-Folder buffers.")
+ (defface mh-folder-cur-msg-face
+ '((((type tty pc) (class color))
+ (:background "LightGreen"))
+ (((class color) (background light))
+ (:background "LightGreen") ;Use this for solid background colour
+ ;; (:underline t) ;Use this for underlining
+ )
+ (((class color) (background dark))
+ (:background "DarkOliveGreen4"))
+ (t (:underline t)))
+ "Face for the current message line in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-cur-msg-number-face 'mh-folder-cur-msg-number-face
+ "Face for highlighting the current message in MH-Folder buffers.")
+ (defface mh-folder-cur-msg-number-face
+ '((((type tty) (class color)) (:foreground "cyan" :weight bold))
+ (((class grayscale) (background light)) (:foreground "LightGray" :bold t))
+ (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
+ (((class color) (background light)) (:foreground "Purple"))
+ (((class color) (background dark)) (:foreground "Cyan"))
+ (t (:bold t)))
+ "Face for highlighting the current message in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-date-face 'mh-folder-date-face
+ "Face for highlighting the date in MH-Folder buffers.")
+ (defface mh-folder-date-face
+ '((((class color) (background light))
+ (:foreground "snow4"))
+ (((class color) (background dark))
+ (:foreground "snow3"))
+ (t
+ (:bold t)))
+ "Face for highlighting the date in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-followup-face 'mh-folder-followup-face
+ "Face for highlighting Re: (followup) subject text in MH-Folder buffers.")
+ (defface mh-folder-followup-face
+ '((((class color) (background light))
+ (:foreground "blue3"))
+ (((class color) (background dark))
+ (:foreground "LightGoldenRod"))
+ (t
+ (:bold t)))
+ "Face for highlighting Re: (followup) subject text in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-msg-number-face 'mh-folder-msg-number-face
+ "Face for highlighting the message number in MH-Folder buffers.")
+ (defface mh-folder-msg-number-face
+ '((((class color) (background light))
+ (:foreground "snow4"))
+ (((class color) (background dark))
+ (:foreground "snow3"))
+ (t
+ (:bold t)))
+ "Face for highlighting the message number in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-deleted-face 'mh-folder-deleted-face
+ "Face for highlighting deleted messages in MH-Folder buffers.")
+ (copy-face 'mh-folder-msg-number-face 'mh-folder-deleted-face)
+
+ (defvar mh-folder-refiled-face 'mh-folder-refiled-face
+ "Face for highlighting refiled messages in MH-Folder buffers.")
+ (defface mh-folder-refiled-face
+ '((((type tty) (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))
+ (((class color) (background light)) (:foreground "DarkGoldenrod"))
+ (((class color) (background dark)) (:foreground "LightGoldenrod"))
+ (t (:bold t :italic t)))
+ "Face for highlighting refiled messages in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-subject-face 'mh-folder-subject-face
+ "Face for highlighting subject text in MH-Folder buffers.")
+ (if (boundp 'facemenu-unlisted-faces)
+ (add-to-list 'facemenu-unlisted-faces "^mh-folder"))
+ (defface mh-folder-subject-face
+ '((((class color) (background light))
+ (:foreground "blue4"))
+ (((class color) (background dark))
+ (:foreground "yellow"))
+ (t
+ (:bold t)))
+ "Face for highlighting subject text in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+ (defface mh-folder-tick-face
+ '((((class color) (background dark)) (:background "#dddf7e"))
+ (((class color) (background light)) (:background "#dddf7e"))
+ (t (:underline t)))
+ "Face used to show ticked messages."
+ :group 'mh-folder-faces)
+
+ (defvar mh-folder-address-face 'mh-folder-address-face
+ "Face for highlighting the address in MH-Folder buffers.")
+ (copy-face 'mh-folder-subject-face 'mh-folder-address-face)
+
+ (defvar mh-folder-scan-format-face 'mh-folder-scan-format-face
+ "Face for highlighting `mh-scan-format-regexp' matches in MH-Folder
buffers.")
+ (copy-face 'mh-folder-followup-face 'mh-folder-scan-format-face)
+
+ (defvar mh-folder-to-face 'mh-folder-to-face
+ "Face for highlighting the To: string in MH-Folder buffers.")
+ (defface mh-folder-to-face
+ '((((type tty) (class color)) (:foreground "green"))
+ (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
+ (((class grayscale) (background dark)) (:foreground "LightGray" :italic
t))
+ (((class color) (background light)) (:foreground "RosyBrown"))
+ (((class color) (background dark)) (:foreground "LightSalmon"))
+ (t (:italic t)))
+ "Face for highlighting the To: string in MH-Folder buffers."
+ :group 'mh-folder-faces)
+
+
+
+ ;;; Faces Used in Searching (:group 'mh-index-faces)
+
+ (defvar mh-index-folder-face 'mh-index-folder-face
+ "Face for highlighting folders in MH-Index buffers.")
+ (defface mh-index-folder-face
+ '((((class color) (background light))
+ (:foreground "dark green" :bold t))
+ (((class color) (background dark))
+ (:foreground "indian red" :bold t))
+ (t
+ (:bold t)))
+ "Face for highlighting folders in MH-Index buffers."
+ :group 'mh-index-faces)
+
+
+
+ ;;; Faces Used in Message Drafts (:group 'mh-letter-faces)
+
+ (defface mh-letter-header-field-face
+ '((((class color) (background light))
+ (:background "gray90"))
+ (((class color) (background dark))
+ (:background "gray10"))
+ (t (:bold t)))
+ "Face for displaying header fields in draft buffers."
+ :group 'mh-letter-faces)
+
+
+
+ ;;; Faces Used in Message Display (:group 'mh-show-faces)
+
+ (defvar mh-show-cc-face 'mh-show-cc-face
+ "Face for highlighting cc header fields.")
+ (defface mh-show-cc-face
+ '((((type tty) (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))
+ (((class color) (background light)) (:foreground "DarkGoldenrod"))
+ (((class color) (background dark)) (:foreground "LightGoldenrod"))
+ (t (:bold t :italic t)))
+ "Face for highlighting cc header fields."
+ :group 'mh-show-faces)
+
+ (defvar mh-show-date-face 'mh-show-date-face
+ "Face for highlighting the Date header field.")
+ (defface mh-show-date-face
+ '((((type tty) (class color)) (:foreground "green"))
+ (((class grayscale) (background light)) (:foreground "Gray90" :bold t))
+ (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
+ (((class color) (background light)) (:foreground "ForestGreen"))
+ (((class color) (background dark)) (:foreground "PaleGreen"))
+ (t (:bold t :underline t)))
+ "Face for highlighting the Date header field."
+ :group 'mh-show-faces)
+
+ (defvar mh-show-header-face 'mh-show-header-face
+ "Face used to deemphasize unspecified header fields.")
+ (defface mh-show-header-face
+ '((((type tty) (class color)) (:foreground "green"))
+ (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
+ (((class grayscale) (background dark)) (:foreground "LightGray" :italic
t))
+ (((class color) (background light)) (:foreground "RosyBrown"))
+ (((class color) (background dark)) (:foreground "LightSalmon"))
+ (t (:italic t)))
+ "Face used to deemphasize unspecified header fields."
+ :group 'mh-show-faces)
+
+ (defface mh-show-signature-face
+ '((t (:italic t)))
+ "Face for highlighting message signature."
+ :group 'mh-show-faces)
+
+ (defvar mh-show-to-face 'mh-show-to-face
+ "Face for highlighting the To: header field.")
+ (if (boundp 'facemenu-unlisted-faces)
+ (add-to-list 'facemenu-unlisted-faces "^mh-show"))
+ (defface mh-show-to-face
+ '((((class grayscale) (background light))
+ (:foreground "DimGray" :underline t))
+ (((class grayscale) (background dark))
+ (:foreground "LightGray" :underline t))
+ (((class color) (background light)) (:foreground "SaddleBrown"))
+ (((class color) (background dark)) (:foreground "burlywood"))
+ (t (:underline t)))
+ "Face for highlighting the To: header field."
+ :group 'mh-show-faces)
+
+ (defvar mh-show-from-face 'mh-show-from-face
+ "Face for highlighting the From: header field.")
+ (defface mh-show-from-face
+ '((((class color) (background light))
+ (:foreground "red3"))
+ (((class color) (background dark))
+ (:foreground "cyan"))
+ (t
+ (:bold t)))
+ "Face for highlighting the From: header field."
+ :group 'mh-show-faces)
+
+ (defface mh-show-xface-face
+ '((t (:foreground "black" :background "white")))
+ "Face for displaying the X-Face image.
+ The background and foreground is used in the image."
+ :group 'mh-show-faces)
+
+ (defvar mh-show-subject-face 'mh-show-subject-face
+ "Face for highlighting the Subject header field.")
+ (copy-face 'mh-folder-subject-face 'mh-show-subject-face)
+
+
+
+ ;;; Faces Used in Speedbar (:group 'mh-speed-faces)
+
+ (defface mh-speedbar-folder-face
+ '((((class color) (background light))
+ (:foreground "blue4"))
+ (((class color) (background dark))
+ (:foreground "light blue")))
+ "Face used for folders in the speedbar buffer."
+ :group 'mh-speed-faces)
+
+ (defface mh-speedbar-selected-folder-face
+ '((((class color) (background light))
+ (:foreground "red" :underline t))
+ (((class color) (background dark))
+ (:foreground "red" :underline t))
+ (t (:underline t)))
+ "Face used for the current folder."
+ :group 'mh-speed-faces)
+
+ (defface mh-speedbar-folder-with-unseen-messages-face
+ '((t (:inherit mh-speedbar-folder-face :bold t)))
+ "Face used for folders in the speedbar buffer which have unread messages."
+ :group 'mh-speed-faces)
+
+ (defface mh-speedbar-selected-folder-with-unseen-messages-face
+ '((t (:inherit mh-speedbar-selected-folder-face :bold t)))
+ "Face used for the current folder when it has unread messages."
+ :group 'mh-speed-faces)
+
+ ;;; Local Variables:
+ ;;; indent-tabs-mode: nil
+ ;;; sentence-end-double-space: nil
+ ;;; End:
+
+ ;;; arch-tag: 778d2a20-82e2-4276-be9d-309386776a68
+ ;;; mh-customize.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/mh-e/mh-customize.el [gnus-5_10-branch],
Miles Bader <=