]> code.delx.au - gnu-emacs/blobdiff - lisp/mh-e/mh-e.el
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-56
[gnu-emacs] / lisp / mh-e / mh-e.el
index ce2db4fb66e59bdb2bbd9b220b284ab3fe13e3b7..6bf9458b4598805441933482063952e29e712866 100644 (file)
 (require 'mh-buffers)
 (require 'mh-compat)
 
+(mh-font-lock-add-keywords
+ 'emacs-lisp-mode
+ (eval-when-compile
+   `((,(concat "(\\("
+               ;; Function declarations (use font-lock-function-name-face).
+               "\\(mh-def\\(un\\|macro\\)-compat\\)\\|"
+               ;; Variable declarations (use font-lock-variable-name-face).
+               "\\(mh-def\\(custom\\|face\\)\\)\\|"
+               ;; Group declarations (use font-lock-type-face).
+               "\\(mh-defgroup\\)"
+               "\\)\\>"
+               ;; Any whitespace and defined object.
+               "[ \t'\(]*"
+               "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
+      (1 font-lock-keyword-face)
+      (7 (cond ((match-beginning 2) font-lock-function-name-face)
+               ((match-beginning 4) font-lock-variable-name-face)
+               (t font-lock-type-face))
+         nil t)))))
+
 \f
 
 ;;; Global Variables
@@ -603,7 +623,7 @@ Output is expected to be shown to user, not parsed by MH-E."
   (mh-exchange-point-and-mark-preserving-active-mark))
 
 ;; Shush compiler.
-(eval-when-compile (mh-do-in-xemacs (defvar mark-active)))
+(defvar mark-active)                    ; XEmacs
 
 (defun mh-exchange-point-and-mark-preserving-active-mark ()
   "Put the mark where point is now, and point where the mark is now.
@@ -644,13 +664,66 @@ Set mark after inserted text."
 
 \f
 
+;;; MH-E Customization Support Routines
+
+;; Shush compiler (Emacs 21 and XEmacs).
+(defvar customize-package-emacs-version-alist)
+
+;; Temporary function and data structure used customization.
+;; These will be unbound after the options are defined.
+(defmacro mh-strip-package-version (args)
+  "Strip :package-version keyword and its value from ARGS.
+In Emacs versions that support the :package-version keyword,
+ARGS is returned unchanged."
+  `(if (boundp 'customize-package-emacs-version-alist)
+       ,args
+     (let (seen)
+       (loop for keyword in ,args
+             if (cond ((eq keyword ':package-version) (setq seen t) nil)
+                      (seen (setq seen nil) nil)
+                      (t t))
+             collect keyword))))
+
+(defmacro mh-defgroup (symbol members doc &rest args)
+  "Declare SYMBOL as a customization group containing MEMBERS.
+See documentation for `defgroup' for a description of the arguments
+SYMBOL, MEMBERS, DOC and ARGS.
+This macro is used by Emacs versions that lack the :package-version
+keyword, introduced in Emacs 22."
+  (declare (doc-string 3))
+  `(defgroup ,symbol ,members ,doc ,@(mh-strip-package-version args)))
+(put 'mh-defgroup 'lisp-indent-function 'defun)
+
+(defmacro mh-defcustom (symbol value doc &rest args)
+  "Declare SYMBOL as a customizable variable that defaults to VALUE.
+See documentation for `defcustom' for a description of the arguments
+SYMBOL, VALUE, DOC and ARGS.
+This macro is used by Emacs versions that lack the :package-version
+keyword, introduced in Emacs 22."
+  (declare (doc-string 3))
+  `(defcustom ,symbol ,value ,doc ,@(mh-strip-package-version args)))
+(put 'mh-defcustom 'lisp-indent-function 'defun)
+
+(defmacro mh-defface (face spec doc &rest args)
+  "Declare FACE as a customizable face that defaults to SPEC.
+See documentation for `defface' for a description of the arguments
+FACE, SPEC, DOC and ARGS.
+This macro is used by Emacs versions that lack the :package-version
+keyword, introduced in Emacs 22."
+  (declare (doc-string 3))
+  `(defface ,face ,spec ,doc ,@(mh-strip-package-version args)))
+(put 'mh-defface 'lisp-indent-function 'defun)
+
+\f
+
 ;;; Variant Support
 
-(defcustom mh-path nil
+(mh-defcustom mh-path nil
   "*Additional list of directories to search for MH.
 See `mh-variant'."
   :group 'mh-e
-  :type '(repeat (directory)))
+  :type '(repeat (directory))
+  :package-version '(MH-E "8.0"))
 
 (defun mh-variants ()
   "Return a list of installed variants of MH on the system.
@@ -859,7 +932,7 @@ finally GNU mailutils."
                (mapconcat '(lambda (x) (format "%s" (car x)))
                           (mh-variants) " or "))))))
 
-(defcustom mh-variant 'autodetect
+(mh-defcustom mh-variant 'autodetect
   "*Specifies the variant used by MH-E.
 
 The default setting of this option is \"Auto-detect\" which means
@@ -884,59 +957,8 @@ necessary and can actually cause problems."
   :set (lambda (symbol value)
          (set-default symbol value)     ;Done in mh-variant-set-variant!
          (mh-variant-set value))
-  :group 'mh-e)
-
-\f
-
-;;; MH-E Customization Support Routines
-
-;; Shush compiler (Emacs 21 and XEmacs).
-(defvar customize-package-emacs-version-alist)
-
-;; Temporary function and data structure used customization.
-;; These will be unbound after the options are defined.
-(defmacro mh-defgroup (symbol members doc &rest args)
-  "Declare SYMBOL as a customization group containing MEMBERS.
-See documentation for `defgroup' for a description of the arguments
-SYMBOL, MEMBERS, DOC and ARGS.
-This macro is used by Emacs versions that lack the :package-version
-keyword, introduced in Emacs 22."
-  (declare (doc-string 3))
-  `(defgroup ,symbol ,members ,doc ,@(mh-strip-package-version args)))
-(put 'mh-defgroup 'lisp-indent-function 'defun)
-
-(defmacro mh-defcustom (symbol value doc &rest args)
-  "Declare SYMBOL as a customizable variable that defaults to VALUE.
-See documentation for `defcustom' for a description of the arguments
-SYMBOL, VALUE, DOC and ARGS.
-This macro is used by Emacs versions that lack the :package-version
-keyword, introduced in Emacs 22."
-  (declare (doc-string 3))
-  `(defcustom ,symbol ,value ,doc ,@(mh-strip-package-version args)))
-(put 'mh-defcustom 'lisp-indent-function 'defun)
-
-(defmacro mh-defface (face spec doc &rest args)
-  "Declare FACE as a customizable face that defaults to SPEC.
-See documentation for `defface' for a description of the arguments
-FACE, SPEC, DOC and ARGS.
-This macro is used by Emacs versions that lack the :package-version
-keyword, introduced in Emacs 22."
-  (declare (doc-string 3))
-  `(defface ,face ,spec ,doc ,@(mh-strip-package-version args)))
-(put 'mh-defface 'lisp-indent-function 'defun)
-
-(defun mh-strip-package-version (args)
-  "Strip :package-version keyword and its value from ARGS.
-In Emacs versions that support the :package-version keyword,
-ARGS is returned unchanged."
-  (if (boundp 'customize-package-emacs-version-alist)
-      args
-    (let (seen)
-      (loop for keyword in args
-            if (cond ((eq keyword ':package-version) (setq seen t) nil)
-                     (seen (setq seen nil) nil)
-                     (t t))
-            collect keyword))))
+  :group 'mh-e
+  :package-version '(MH-E "8.0"))
 
 \f
 
@@ -987,9 +1009,9 @@ windows in the frame are removed."
 
 (if (boundp 'customize-package-emacs-version-alist)
     (add-to-list 'customize-package-emacs-version-alist
-                 '(MH-E ("6.0" "22.1") ("6.1" "22.1") ("7.0" "22.1")
-                        ("7.1" "22.1") ("7.2" "22.1") ("7.3" "22.1")
-                        ("7.4" "22.1") ("8.0" "22.1"))))
+                 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
+                        ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
+                        ("7.4" . "22.1") ("8.0" . "22.1"))))
 
 \f
 
@@ -1001,126 +1023,126 @@ MH is the Rand Mail Handler. Other implementations include nmh
 and GNU mailutils."
   :link '(custom-manual "(mh-e)Top")
   :group 'mail
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-alias nil
   "Aliases."
   :link '(custom-manual "(mh-e)Aliases")
   :prefix "mh-alias-"
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-folder nil
   "Organizing your mail with folders."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Folders")
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-folder-selection nil
   "Folder selection."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Folder Selection")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-identity nil
   "Identities."
   :link '(custom-manual "(mh-e)Identities")
   :prefix "mh-identity-"
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-inc nil
   "Incorporating your mail."
   :prefix "mh-inc-"
   :link '(custom-manual "(mh-e)Incorporating Mail")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-junk nil
   "Dealing with junk mail."
   :link '(custom-manual "(mh-e)Junk")
   :prefix "mh-junk-"
   :group 'mh-e
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 (mh-defgroup mh-letter nil
   "Editing a draft."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Editing Drafts")
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-ranges nil
   "Ranges."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Ranges")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-scan-line-formats nil
   "Scan line formats."
   :link '(custom-manual "(mh-e)Scan Line Formats")
   :prefix "mh-"
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-search nil
   "Searching."
   :link '(custom-manual "(mh-e)Searching")
   :prefix "mh-search-"
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-sending-mail nil
   "Sending mail."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Sending Mail")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-sequences nil
   "Sequences."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Sequences")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-show nil
   "Reading your mail."
   :prefix "mh-"
   :link '(custom-manual "(mh-e)Reading Mail")
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-speedbar nil
   "The speedbar."
   :prefix "mh-speed-"
   :link '(custom-manual "(mh-e)Speedbar")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-thread nil
   "Threading."
   :prefix "mh-thread-"
   :link '(custom-manual "(mh-e)Threading")
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-tool-bar nil
   "The tool bar"
   :link '(custom-manual "(mh-e)Tool Bar")
   :prefix "mh-"
   :group 'mh-e
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defgroup mh-hooks nil
   "MH-E hooks."
   :link '(custom-manual "(mh-e)Top")
   :prefix "mh-"
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defgroup mh-faces nil
   "Faces used in MH-E."
@@ -1128,7 +1150,7 @@ and GNU mailutils."
   :prefix "mh-"
   :group 'faces
   :group 'mh-e
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 \f
 
@@ -1147,7 +1169,7 @@ used to segregate completion of your aliases. You might use
 lowercase for mailing lists and uppercase for people."
   :type 'boolean
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-expand-aliases-flag nil
   "*Non-nil means to expand aliases entered in the minibuffer.
@@ -1157,7 +1179,7 @@ expanded to the full address in the message draft. By default,
 this expansion is not performed."
   :type 'boolean
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-flash-on-comma t
   "*Specify whether to flash address or warn on translation.
@@ -1170,7 +1192,7 @@ does not display a warning if the alias is not found."
                  (const :tag "Flash and Warn If No Alias" 1)
                  (const :tag "Don't Flash Nor Warn If No Alias" nil))
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-insert-file nil
   "*Filename used to store a new MH-E alias.
@@ -1184,7 +1206,7 @@ name, MH-E will prompt for one of them when MH-E adds an alias."
                  (file :tag "Alias File")
                  (repeat :tag "List of Alias Files" file))
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-insertion-location 'sorted
   "Specifies where new aliases are entered in alias files.
@@ -1196,7 +1218,7 @@ or \"Bottom\" of your alias file might be more appropriate."
                  (const :tag "Top" top)
                  (const :tag "Bottom" bottom))
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-local-users t
   "*If on, local users are added to alias completion.
@@ -1217,7 +1239,7 @@ password file. For example, use \"ypcat passwd\" to obtain the
 NIS password file."
   :type '(choice (boolean) (string))
   :group 'mh-alias
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-alias-local-users-prefix "local."
   "*String prefixed to the real names of users from the password file.
@@ -1239,7 +1261,7 @@ turned off."
   :type '(choice (const :tag "Use Login" nil)
                  (string))
   :group 'mh-alias
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-alias-passwd-gecos-comma-separator-flag t
   "*Non-nil means the gecos field in the password file uses a comma separator.
@@ -1251,7 +1273,7 @@ gecos field in your password file is not separated by commas and
 whose contents may contain commas, you can turn this option off."
   :type 'boolean
   :group 'mh-alias
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 ;;; Organizing Your Mail with Folders (:group 'mh-folder)
 
@@ -1268,7 +1290,7 @@ See also `mh-recursive-folders-flag'."
                  (const :tag "All" nil)
                  (repeat :tag "Choose Folders" (string :tag "Folder")))
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-ticked-messages-folders t
   "Folders searched for `mh-tick-seq'.
@@ -1283,7 +1305,7 @@ See also `mh-recursive-folders-flag'."
                  (const :tag "All" nil)
                  (repeat :tag "Choose Folders" (string :tag "Folder")))
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-large-folder 200
   "The number of messages that indicates a large folder.
@@ -1295,7 +1317,7 @@ is not automatically threaded, if it is large. If set to nil all
 folders are treated as if they are small."
   :type '(choice (const :tag "No Limit") integer)
   :group 'mh-folder
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-recenter-summary-flag nil
   "*Non-nil means to recenter the summary window.
@@ -1304,13 +1326,13 @@ If this option is turned on, recenter the summary window when the
 show window is toggled off."
   :type 'boolean
   :group 'mh-folder
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-recursive-folders-flag nil
   "*Non-nil means that commands which operate on folders do so recursively."
   :type 'boolean
   :group 'mh-folder
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-sortm-args nil
   "*Additional arguments for \"sortm\"\\<mh-folder-mode-map>.
@@ -1322,7 +1344,7 @@ an alternate view. For example, \"'(\"-nolimit\" \"-textfield\"
 \"subject\")\" is a useful setting."
   :type 'string
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;;; Folder Selection (:group 'mh-folder-selection)
 
@@ -1336,7 +1358,7 @@ sign. It can also return nil so that the last folder name is used as
 the default, or an empty string to suppress the default entirely."
   :type 'function
   :group 'mh-folder-selection
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-default-folder-list nil
   "*List of addresses and folders.
@@ -1354,7 +1376,7 @@ for more information."
                        (string :tag "Folder")
                        (boolean :tag "Check Recipient")))
   :group 'mh-folder-selection
-  :package-version '(MH-E "7.2"))
+  :package-version '(MH-E "7.2"))
 
 (mh-defcustom mh-default-folder-must-exist-flag t
   "*Non-nil means guessed folder name must exist to be used.
@@ -1368,7 +1390,7 @@ See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
 for more information."
   :type 'boolean
   :group 'mh-folder-selection
-  :package-version '(MH-E "7.2"))
+  :package-version '(MH-E "7.2"))
 
 (mh-defcustom mh-default-folder-prefix ""
   "*Prefix used for folder names generated from aliases.
@@ -1378,7 +1400,7 @@ See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
 for more information."
   :type 'string
   :group 'mh-folder-selection
-  :package-version '(MH-E "7.2"))
+  :package-version '(MH-E "7.2"))
 
 ;;; Identities (:group 'mh-identity)
 
@@ -1456,7 +1478,7 @@ fashion."
          (set-default symbol value)
          (mh-identity-make-menu-no-autoload))
   :group 'mh-identity
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-auto-fields-list nil
   "List of recipients for which header lines are automatically inserted.
@@ -1517,14 +1539,14 @@ as the result is undefined."
                                  (string :tag "Field")
                                  (string :tag "Value"))))))
   :group 'mh-identity
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 (mh-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
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-identity-default nil
   "Default identity to use when `mh-letter-mode' is called.
@@ -1535,7 +1557,7 @@ See `mh-identity-list'."
                (mapcar (function (lambda (arg) `(const ,arg)))
                        (mapcar 'car mh-identity-list))))
   :group 'mh-identity
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-identity-handlers
   '(("From" . mh-identity-handler-top)
@@ -1569,7 +1591,7 @@ fields (for example, \":signature\"), and the ACTION 'remove or
 containing the VALUE for the field is given."
   :type '(repeat (cons (string :tag "Field") function))
   :group 'mh-identity
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;;; Incorporating Your Mail (:group 'mh-inc)
 
@@ -1583,7 +1605,7 @@ to be in the `mh-progs' directory. You may also link a file to
 several scan line format variables appropriately."
   :type 'string
   :group 'mh-inc
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (eval-and-compile
   (unless (fboundp 'mh-inc-spool-make-no-autoload)
@@ -1633,7 +1655,7 @@ fashion."
          (set-default symbol value)
          (mh-inc-spool-make-no-autoload))
   :group 'mh-inc
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 ;;; Dealing with Junk Mail (:group 'mh-junk)
 
@@ -1675,14 +1697,14 @@ you might try turning on this option."
   :type '(choice (const :tag "Off" nil)
                  (const :tag "On" 0))
   :group 'mh-junk
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-junk-disposition nil
   "Disposition of junk mail."
   :type '(choice (const :tag "Delete Spam" nil)
                  (string :tag "Spam Folder"))
   :group 'mh-junk
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-junk-program nil
   "Spam program that MH-E should use.
@@ -1698,7 +1720,7 @@ bogofilter, then you can set this option to \"Bogofilter\"."
                  (const :tag "SpamProbe" spamprobe))
   :set 'mh-junk-choose
   :group 'mh-junk
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 ;;; Editing a Draft (:group 'mh-letter)
 
@@ -1714,7 +1736,7 @@ MH-style directives are preferred."
   :type '(choice (const :tag "MML" mml)
                  (const :tag "MH"  mh))
   :group 'mh-letter
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-compose-skipped-header-fields
   '("From" "Organization" "References" "In-Reply-To"
@@ -1722,13 +1744,13 @@ MH-style directives are preferred."
   "List of header fields to skip over when navigating in draft."
   :type '(repeat (string :tag "Field"))
   :group 'mh-letter
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-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
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-delete-yanked-msg-window-flag nil
   "*Non-nil means delete any window displaying the message.
@@ -1738,7 +1760,7 @@ yanking it with \\<mh-letter-mode-map>\\[mh-yank-cur-msg] to make
 more room on your screen for your reply."
   :type 'boolean
   :group 'mh-letter
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-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].
@@ -1752,7 +1774,7 @@ followed by the content of this option. This option can be set to
                  (const "schrieb:")
                  (string :tag "Custom String"))
   :group 'mh-letter
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-ins-buf-prefix "> "
   "*String to put before each line of a yanked or inserted message.
@@ -1768,7 +1790,7 @@ flavors of `mh-yank-behavior' or you have added a
 `mail-citation-hook'."
   :type 'string
   :group 'mh-letter
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-letter-complete-function 'ispell-complete-word
   "*Function to call when completing outside of address or folder fields.
@@ -1778,7 +1800,7 @@ In the body of the message,
 which is set to \"ispell-complete-word\" by default."
   :type '(choice function (const nil))
   :group 'mh-letter
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-letter-fill-column 72
   "*Fill column to use in MH Letter mode.
@@ -1787,7 +1809,7 @@ By default, this option is 72 to allow others to quote your
 message without line wrapping."
   :type 'integer
   :group 'mh-letter
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-mml-method-default (if mh-pgp-support-flag "pgpmime" "none")
   "Default method to use in security tags.
@@ -1810,7 +1832,7 @@ you write!"
                  (const :tag "S/MIME" "smime")
                  (const :tag "None" "none"))
   :group 'mh-letter
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-signature-file-name "~/.signature"
   "*Source of user's signature.
@@ -1833,7 +1855,7 @@ The signature is inserted into your message with the command
 `mh-identity-list'."
   :type 'file
   :group 'mh-letter
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-signature-separator-flag t
   "*Non-nil means a signature separator should be inserted.
@@ -1844,7 +1866,7 @@ the signature differently, and to suppress the signature when
 replying or yanking a letter into a draft."
   :type 'boolean
   :group 'mh-letter
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-x-face-file "~/.face"
   "*File containing face header field to insert in outgoing mail.
@@ -1873,7 +1895,7 @@ To prevent the setting of any of these header fields, either set
 this option doesn't exist."
   :type 'file
   :group 'mh-letter
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-yank-behavior 'attribution
   "*Controls which part of a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
@@ -1918,7 +1940,7 @@ inserted."
                  (const :tag "Body With Attribution, Automatically"
                         autoattrib))
   :group 'mh-letter
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;;; Ranges (:group 'mh-ranges)
 
@@ -1931,7 +1953,7 @@ option is on (which is the default). If you need to scan just the
 message 200, then use the range \"200:200\"."
   :type 'boolean
   :group 'mh-ranges
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 ;;; Scan Line Formats (:group 'mh-scan-line-formats)
 
@@ -1958,7 +1980,7 @@ you would use \"(mh-set-cmd-note 4)\"."
   :type 'boolean
   :group 'mh-scan-line-formats
   :set 'mh-adaptive-cmd-note-flag-check
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (defun mh-scan-format-file-check (symbol value)
   "Check if desired setting is legal.
@@ -1997,7 +2019,7 @@ Emacs start with 0)."
                  (file  :tag "Specify a scan Format File"))
   :group 'mh-scan-line-formats
   :set 'mh-scan-format-file-check
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (defun mh-adaptive-cmd-note-flag-check (symbol value)
   "Check if desired setting is legal.
@@ -2020,7 +2042,7 @@ directory. You may link another program to `scan' (see
 \"mh-profile(5)\") to produce a different type of listing."
   :type 'string
   :group 'mh-scan-line-formats
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 (make-variable-buffer-local 'mh-scan-prog)
 
 ;;; Searching (:group 'mh-search)
@@ -2044,7 +2066,7 @@ MH-E can be found in the documentation of `mh-search'."
                  (const :tag "pick" pick)
                  (const :tag "grep" grep))
   :group 'mh-search
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;;; Sending Mail (:group 'mh-sending-mail)
 
@@ -2062,7 +2084,7 @@ forwarded messages will always be included as attachments
 regardless of the settings of this option."
   :type 'boolean
   :group 'mh-sending-mail
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-compose-letter-function nil
   "Invoked when starting a new draft.
@@ -2074,13 +2096,13 @@ three arguments: the contents of the TO, SUBJECT, and CC header
 fields."
   :type '(choice (const nil) function)
   :group 'mh-sending-mail
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-compose-prompt-flag nil
   "*Non-nil means prompt for header fields when composing a new draft."
   :type 'boolean
   :group 'mh-sending-mail
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-forward-subject-format "%s: %s"
   "*Format string for forwarded message subject.
@@ -2090,7 +2112,7 @@ first \"%s\" is replaced with the sender of the original message,
 and the second one is replaced with the original \"Subject:\"."
   :type 'string
   :group 'mh-sending-mail
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-insert-x-mailer-flag t
   "*Non-nil means append an \"X-Mailer:\" header field to the header.
@@ -2100,7 +2122,7 @@ are using. If you don't want to participate in our marketing, you
 can turn this option off."
   :type 'boolean
   :group 'mh-sending-mail
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-redist-full-contents-flag nil
   "*Non-nil means the \"dist\" command needs entire letter for redistribution.
@@ -2112,7 +2134,7 @@ find that MH will not allow you to redistribute a message that
 has been redistributed before, turn off this option."
   :type 'boolean
   :group 'mh-sending-mail
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-reply-default-reply-to nil
   "*Sets the person or persons to whom a reply will be sent.
@@ -2128,7 +2150,7 @@ this option to \"cc\". Other choices include \"from\", \"to\", or
                  (const "cc")
                  (const "all"))
   :group 'mh-sending-mail
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-reply-show-message-flag t
   "*Non-nil means the MH-Show buffer is displayed when replying.
@@ -2139,7 +2161,7 @@ MH-Show buffer by turning off this option.
 See also `mh-reply'."
   :type 'boolean
   :group 'mh-sending-mail
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 ;;; Sequences (:group 'mh-sequences)
 
@@ -2156,7 +2178,7 @@ sequences in the destination folder. If this behavior is not
 desired, then turn off this option."
   :type 'boolean
   :group 'mh-sequences
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-tick-seq 'tick
   "The name of the MH sequence for ticked messages.
@@ -2168,7 +2190,7 @@ there isn't much advantage to that."
   :type '(choice (const :tag "Disable Ticking" nil)
                  symbol)
   :group 'mh-sequences
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 (mh-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>.
@@ -2183,7 +2205,7 @@ this option. You can then update the state manually with the
 commands."
   :type 'boolean
   :group 'mh-sequences
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 ;;; Reading Your Mail (:group 'mh-show)
 
@@ -2196,7 +2218,7 @@ because of its proximity to its associated MH-Folder buffer. Try
 running \\[electric-buffer-list] to see what I mean."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-clean-message-header-flag t
   "*Non-nil means remove extraneous header fields.
@@ -2205,7 +2227,7 @@ See also `mh-invisible-header-fields-default' and
 `mh-invisible-header-fields'."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-decode-mime-flag (not (not (locate-library "mm-decode")))
   "*Non-nil means attachments are handled\\<mh-folder-mode-map>.
@@ -2223,7 +2245,7 @@ messages and other graphical widgets. See the options
 `mh-graphical-smileys-flag' and `mh-graphical-emphasis-flag'."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-display-buttons-for-alternatives-flag nil
   "*Non-nil means display buttons for all alternative attachments.
@@ -2235,7 +2257,7 @@ displayed. If this option is on, then the preferred part is shown
 inline and buttons are shown for each of the other alternatives."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-display-buttons-for-inline-parts-flag nil
   "*Non-nil means display buttons for all inline attachments\\<mh-folder-mode-map>.
@@ -2258,7 +2280,7 @@ MH-E cannot display all attachments inline however. It can display
 text (including HTML) and images."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-do-not-confirm-flag nil
   "*Non-nil means non-reversible commands do not prompt for confirmation.
@@ -2270,7 +2292,7 @@ performed--which is usually desired but cannot be
 retracted--without question."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-fetch-x-image-url nil
   "*Control fetching of \"X-Image-URL:\" header field image.
@@ -2306,7 +2328,7 @@ turned on."
   :type '(choice (const :tag "Ask Before Fetching" ask)
                  (const :tag "Never Fetch" nil))
   :group 'mh-show
-  :package-version '(MH-E "7.3"))
+  :package-version '(MH-E "7.3"))
 
 (mh-defcustom mh-graphical-smileys-flag t
   "*Non-nil means graphical smileys are displayed.
@@ -2321,7 +2343,7 @@ This option is disabled if the option `mh-decode-mime-flag' is
 turned off."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-graphical-emphasis-flag t
   "*Non-nil means graphical emphasis is displayed.
@@ -2338,7 +2360,7 @@ This option is disabled if the option `mh-decode-mime-flag' is
 turned off."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-highlight-citation-style 'gnus
   "Style for highlighting citations.
@@ -2354,7 +2376,7 @@ of citations entirely, choose \"None\"."
                  (const :tag "Monochrome" font-lock)
                  (const :tag "None" nil))
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;; Keep fields alphabetized. Mention source, if known.
 (defvar mh-invisible-header-fields-internal
@@ -2586,7 +2608,7 @@ See also `mh-clean-message-header-flag'."
          (set-default symbol value)
          (mh-invisible-headers))
   :group 'mh-show
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 (mh-defcustom mh-invisible-header-fields-default nil
   "*List of hidden header fields.
@@ -2604,7 +2626,7 @@ See also `mh-clean-message-header-flag'."
          (set-default symbol value)
          (mh-invisible-headers))
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (defvar mh-invisible-header-fields-compiled nil
   "*Regexp matching lines in a message header that are not to be shown.
@@ -2656,7 +2678,7 @@ This options is not used by the commands \\[mh-ps-print-msg] or
 \\[mh-ps-print-msg-file]."
   :type 'string
   :group 'mh-show
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-max-inline-image-height nil
   "*Maximum inline image height if \"Content-Disposition:\" is not present.
@@ -2672,7 +2694,7 @@ a large number. The size of your screen is a good choice for
 these numbers."
   :type '(choice (const nil) integer)
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-max-inline-image-width nil
   "*Maximum inline image width if \"Content-Disposition:\" is not present.
@@ -2688,7 +2710,7 @@ a large number. The size of your screen is a good choice for
 these numbers."
   :type '(choice (const nil) integer)
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-mhl-format-file nil
   "*Specifies the format file to pass to the \"mhl\" program.
@@ -2712,7 +2734,7 @@ file."
                  (const :tag "Use Default mhl Format" t)
                  (file :tag "Specify an mhl Format File"))
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-mime-save-parts-default-directory t
   "Default directory to use for \\<mh-folder-mode-map>\\[mh-mime-save-parts].
@@ -2728,7 +2750,7 @@ directory's name."
                  (const :tag "Prompt Always" t)
                  directory)
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-print-background-flag nil
   "*Non-nil means messages should be printed in the background\\<mh-folder-mode-map>.
@@ -2744,7 +2766,7 @@ This option is not used by the commands \\[mh-ps-print-msg] or
 \\[mh-ps-print-msg-file]."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-show-maximum-size 0
   "*Maximum size of message (in bytes) to display automatically.
@@ -2754,7 +2776,7 @@ which may be slow to load. The default value of 0 means that all
 message are shown regardless of size."
   :type 'integer
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-show-use-xface-flag (>= emacs-major-version 21)
   "*Non-nil means display face images in MH-show buffers.
@@ -2794,7 +2816,7 @@ The option `mh-fetch-x-image-url' controls the fetching of the
 \"X-Image-URL:\" header field image."
   :type 'boolean
   :group 'mh-show
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-defcustom mh-store-default-directory nil
   "*Default directory for \\<mh-folder-mode-map>\\[mh-store-msg].
@@ -2806,7 +2828,7 @@ the content of these messages."
   :type '(choice (const :tag "Current" nil)
                  directory)
   :group 'mh-show
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-summary-height nil
   "*Number of lines in MH-Folder buffer (including the mode line).
@@ -2819,7 +2841,7 @@ lines you'd like to see."
   :type '(choice (const :tag "Automatic" nil)
                  (integer :tag "Fixed Size"))
   :group 'mh-show
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 ;;; The Speedbar (:group 'mh-speedbar)
 
@@ -2828,7 +2850,7 @@ lines you'd like to see."
 Set to 0 to disable automatic update."
   :type 'integer
   :group 'mh-speedbar
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;;; Threading (:group 'mh-thread)
 
@@ -2841,7 +2863,7 @@ threading will be done only if the number of messages being
 threaded is less than `mh-large-folder'."
   :type 'boolean
   :group 'mh-thread
-  :package-version '(MH-E "7.1"))
+  :package-version '(MH-E "7.1"))
 
 ;;; The Tool Bar (:group 'mh-tool-bar)
 
@@ -2857,7 +2879,7 @@ of your own choosing."
   :type '(choice (const mh-search)
                  (function :tag "Other Function"))
   :group 'mh-tool-bar
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 ;; XEmacs has a couple of extra customizations...
 (mh-do-in-xemacs
@@ -2875,7 +2897,7 @@ won't be able to turn on this option."
                     (not mh-xemacs-has-tool-bar-flag))
                (error "Tool bar not supported"))
            (set-default symbol value))
-    :package-version '(MH-E "7.3"))
+    :package-version '(MH-E "7.3"))
 
   (mh-defcustom mh-xemacs-tool-bar-position nil
     "*Tool bar location.
@@ -2893,7 +2915,7 @@ default tool bar."
                   (const :tag "Left" :value left)
                   (const :tag "Right" :value right))
     :group 'mh-tool-bar
-    :package-version '(MH-E "7.3")))
+    :package-version '(MH-E "7.3")))
 
 \f
 
@@ -2909,14 +2931,14 @@ folder, which is also available in `mh-current-folder'."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-alias-reloaded-hook nil
   "Hook run by `mh-alias-reload' after loading aliases."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-alias
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-before-commands-processed-hook nil
   "Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] before performing outstanding refile and delete requests.
@@ -2927,7 +2949,7 @@ be made to the current folder, `mh-current-folder'."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-before-quit-hook nil
   "Hook run by \\<mh-folder-mode-map>\\[mh-quit] before quitting MH-E.
@@ -2940,7 +2962,7 @@ See also `mh-quit-hook'."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-folder
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-before-send-letter-hook nil
   "Hook run at the beginning of the \\<mh-letter-mode-map>\\[mh-send-letter] command.
@@ -2951,7 +2973,7 @@ before sending, add the `ispell-message' function."
   :options '(ispell-message)
   :group 'mh-hooks
   :group 'mh-letter
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-delete-msg-hook nil
   "Hook run by \\<mh-letter-mode-map>\\[mh-delete-msg] after marking each message for deletion.
@@ -2961,7 +2983,7 @@ kept statistics on his mail usage."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-show
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-find-path-hook nil
   "Hook run by `mh-find-path' after reading the user's MH profile.
@@ -2972,28 +2994,28 @@ between MH and MH-E."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-e
-  :package-version '(MH-E "7.0"))
+  :package-version '(MH-E "7.0"))
 
 (mh-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
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-forward-hook nil
   "Hook run by `mh-forward' on a forwarded letter."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-sending-mail
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-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
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-insert-signature-hook nil
   "Hook run by \\<mh-letter-mode-map>\\[mh-insert-signature] after signature has been inserted.
@@ -3004,7 +3026,7 @@ function used to insert the signature with
   :type 'hook
   :group 'mh-hooks
   :group 'mh-letter
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-kill-folder-suppress-prompt-hooks '(mh-search-p)
   "Abnormal hook run at the beginning of \\<mh-folder-mode-map>\\[mh-kill-folder].
@@ -3022,7 +3044,7 @@ accident in the \"+inbox\" folder, you will not be happy."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-folder
-  :package-version '(MH-E "7.4"))
+  :package-version '(MH-E "7.4"))
 
 (mh-defcustom mh-letter-mode-hook nil
   "Hook run by `mh-letter-mode' on a new letter.
@@ -3035,14 +3057,14 @@ go."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-sending-mail
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-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
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-search-mode-hook nil
   "Hook run upon entry to `mh-search-mode'\\<mh-folder-mode-map>.
@@ -3054,7 +3076,7 @@ This can be done with this hook which is called when
   :type 'hook
   :group 'mh-hooks
   :group 'mh-search
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defcustom mh-quit-hook nil
   "Hook run by \\<mh-folder-mode-map>\\[mh-quit] after quitting MH-E.
@@ -3066,14 +3088,14 @@ See also `mh-before-quit-hook'."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-folder
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-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
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-show-hook nil
   "Hook run after \\<mh-folder-mode-map>\\[mh-show] shows a message.
@@ -3084,7 +3106,7 @@ used to affect the behavior of MH-E in general or when
   :type 'hook
   :group 'mh-hooks
   :group 'mh-show
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-show-mode-hook nil
   "Hook run upon entry to `mh-show-mode'.
@@ -3095,7 +3117,7 @@ message's content. See `mh-show-hook'."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-show
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 (mh-defcustom mh-unseen-updated-hook nil
   "Hook run after the unseen sequence has been updated.
@@ -3106,7 +3128,7 @@ sequence."
   :type 'hook
   :group 'mh-hooks
   :group 'mh-sequences
-  :package-version '(MH-E "6.0"))
+  :package-version '(MH-E "6.0"))
 
 \f
 
@@ -3115,46 +3137,12 @@ sequence."
 (if (boundp 'facemenu-unlisted-faces)
     (add-to-list 'facemenu-unlisted-faces "^mh-"))
 
-;; Temporary function and data structure used for defining faces.
-;; These will be unbound after the faces are defined.
-(defvar mh-min-colors-defined-flag (and (not mh-xemacs-flag)
-                                        (>= emacs-major-version 22))
-  "Non-nil means `defface' supports min-colors display requirement.")
-
-(defun mh-defface-compat (spec)
-  "Convert SPEC for defface if necessary to run on older platforms.
-Modifies SPEC in place and returns it. See `defface' for the spec definition.
-
-When `mh-min-colors-defined-flag' is nil, this function finds
-display entries with \"min-colors\" requirements and either
-removes the \"min-colors\" requirement or strips the display
-entirely if the display does not support the number of specified
-colors."
-  (if mh-min-colors-defined-flag
-      spec
-    (let ((cells (mh-display-color-cells))
-          new-spec)
-      ;; Remove entries with min-colors, or delete them if we have fewer colors
-      ;; than they specify.
-      (loop for entry in (reverse spec) do
-            (let ((requirement (if (eq (car entry) t)
-                                   nil
-                                 (assoc 'min-colors (car entry)))))
-              (if requirement
-                  (when (>= cells (nth 1 requirement))
-                    (setq new-spec (cons (cons (delq requirement (car entry))
-                                               (cdr entry))
-                                         new-spec)))
-                (setq new-spec (cons entry new-spec)))))
-      new-spec)))
-
-(require 'cus-face)
-
-(defvar mh-inherit-face-flag (assq :inherit custom-face-attributes)
-  "Non-nil means that the `defface' :inherit keyword is available.
-The :inherit keyword is available on all supported versions of
-GNU Emacs and XEmacs from at least 21.5.23 on.")
-
+;; To add a new face:
+;; 1. Add entry to variable mh-face-data.
+;; 2. Create face using mh-defface (which removes min-color spec and
+;;    :package-version keyword where these are not supported),
+;;    accessing face data with function mh-face-data.
+;; 3. Add inherit argument to function mh-face-data if applicable.
 (defvar mh-face-data
   '((mh-folder-followup
      ((((class color) (background light))
@@ -3297,26 +3285,68 @@ GNU Emacs and XEmacs from at least 21.5.23 on.")
       (((class color) (background dark))
        (:foreground "red1" :underline t))
       (t
-       (:underline t))))))
+       (:underline t)))))
+  "MH-E face data.
+Used by function `mh-face-data' which returns spec that is
+consumed by `mh-defface'.")
+
+(require 'cus-face)
+
+(defvar mh-inherit-face-flag (assq :inherit custom-face-attributes)
+  "Non-nil means that the `defface' :inherit keyword is available.
+The :inherit keyword is available on all supported versions of
+GNU Emacs and XEmacs from at least 21.5.23 on.")
+
+(defvar mh-min-colors-defined-flag (and (not mh-xemacs-flag)
+                                        (>= emacs-major-version 22))
+  "Non-nil means `defface' supports min-colors display requirement.")
 
 (defun mh-face-data (face &optional inherit)
   "Return spec for FACE.
-If INHERIT is non-nil and `defface' supports the :inherit
-keyword, return INHERIT literally; otherwise, return spec for FACE.
+See `defface' for the spec definition.
 
-This isn't a perfect implementation. In the case that
-the :inherit keyword is not supported, any additional attributes
-in the inherit parameter are not added to the returned spec."
-  (if (and inherit mh-inherit-face-flag)
-      inherit
-    (mh-defface-compat (cadr (assoc face mh-face-data)))))
+If INHERIT is non-nil and `defface' supports the :inherit
+keyword, return INHERIT literally; otherwise, return spec for
+FACE from the variable `mh-face-data'. This isn't a perfect
+implementation. In the case that the :inherit keyword is not
+supported, any additional attributes in the inherit parameter are
+not added to the returned spec.
+
+Furthermore, when `mh-min-colors-defined-flag' is nil, this
+function finds display entries with \"min-colors\" requirements
+and either removes the \"min-colors\" requirement or strips the
+display entirely if the display does not support the number of
+specified colors."
+  (let ((spec
+         (if (and inherit mh-inherit-face-flag)
+             inherit
+           (or (cadr (assq face mh-face-data))
+               (error "Could not find %s in mh-face-data" face)))))
+
+    (if mh-min-colors-defined-flag
+        spec
+      (let ((cells (mh-display-color-cells))
+            new-spec)
+        ;; Remove entries with min-colors, or delete them if we have
+        ;; fewer colors than they specify.
+        (loop for entry in (reverse spec) do
+              (let ((requirement (if (eq (car entry) t)
+                                     nil
+                                   (assq 'min-colors (car entry)))))
+                (if requirement
+                    (when (>= cells (nth 1 requirement))
+                      (setq new-spec (cons (cons (delq requirement (car entry))
+                                                 (cdr entry))
+                                           new-spec)))
+                  (setq new-spec (cons entry new-spec)))))
+        new-spec))))
 
 (mh-defface mh-folder-address
   (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
   "Recipient face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-body
   (mh-face-data 'mh-folder-msg-number
@@ -3327,7 +3357,7 @@ in the inherit parameter are not added to the returned spec."
   "Body text face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-cur-msg-number
   (mh-face-data 'mh-folder-msg-number
@@ -3335,39 +3365,39 @@ in the inherit parameter are not added to the returned spec."
   "Current message number face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-date
   (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
   "Date face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-deleted
   (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
   "Deleted message face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-followup (mh-face-data 'mh-folder-followup)
   "\"Re:\" face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-msg-number (mh-face-data 'mh-folder-msg-number)
   "Message number face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-refiled (mh-face-data 'mh-folder-refiled)
   "Refiled message face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-sent-to-me-hint
   (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-date))))
@@ -3377,7 +3407,7 @@ format `mh-scan-format-nmh' and the regular expression
 `mh-scan-sent-to-me-sender-regexp'."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-sent-to-me-sender
   (mh-face-data 'mh-folder-followup '((t (:inherit mh-folder-followup))))
@@ -3387,98 +3417,98 @@ format `mh-scan-format-nmh' and the regular expression
 `mh-scan-sent-to-me-sender-regexp'."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-subject (mh-face-data 'mh-folder-subject)
   "Subject face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-tick (mh-face-data 'mh-folder-tick)
   "Ticked message face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-folder-to (mh-face-data 'mh-folder-to)
   "\"To:\" face."
   :group 'mh-faces
   :group 'mh-folder
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-letter-header-field (mh-face-data 'mh-letter-header-field)
   "Editable header field value face in draft buffers."
   :group 'mh-faces
   :group 'mh-letter
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-search-folder (mh-face-data 'mh-search-folder)
   "Folder heading face in MH-Folder buffers created by searches."
   :group 'mh-faces
   :group 'mh-search
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-cc (mh-face-data 'mh-show-cc)
   "Face used to highlight \"cc:\" header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-date (mh-face-data 'mh-show-date)
   "Face used to highlight \"Date:\" header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-from (mh-face-data 'mh-show-from)
   "Face used to highlight \"From:\" header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-header (mh-face-data 'mh-show-header)
   "Face used to deemphasize less interesting header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-pgg-bad (mh-face-data 'mh-show-pgg-bad)
   "Bad PGG signature face."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-pgg-good (mh-face-data 'mh-show-pgg-good)
   "Good PGG signature face."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-pgg-unknown (mh-face-data 'mh-show-pgg-unknown)
   "Unknown or untrusted PGG signature face."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-signature (mh-face-data 'mh-show-signature)
   "Signature face."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-subject
   (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
   "Face used to highlight \"Subject:\" header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-to (mh-face-data 'mh-show-to)
   "Face used to highlight \"To:\" header fields."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-show-xface
   (mh-face-data 'mh-show-from '((t (:inherit (mh-show-from highlight)))))
@@ -3486,13 +3516,13 @@ format `mh-scan-format-nmh' and the regular expression
 The background and foreground are used in the image."
   :group 'mh-faces
   :group 'mh-show
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-speedbar-folder (mh-face-data 'mh-speedbar-folder)
   "Basic folder face."
   :group 'mh-faces
   :group 'mh-speedbar
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-speedbar-folder-with-unseen-messages
   (mh-face-data 'mh-speedbar-folder
@@ -3500,14 +3530,14 @@ The background and foreground are used in the image."
   "Folder face when folder contains unread messages."
   :group 'mh-faces
   :group 'mh-speedbar
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-speedbar-selected-folder
   (mh-face-data 'mh-speedbar-selected-folder)
   "Selected folder face."
   :group 'mh-faces
   :group 'mh-speedbar
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 (mh-defface mh-speedbar-selected-folder-with-unseen-messages
   (mh-face-data 'mh-speedbar-selected-folder
@@ -3515,14 +3545,14 @@ The background and foreground are used in the image."
   "Selected folder face when folder contains unread messages."
   :group 'mh-faces
   :group 'mh-speedbar
-  :package-version '(MH-E "8.0"))
+  :package-version '(MH-E "8.0"))
 
 ;; Get rid of temporary functions and data structures.
 (fmakunbound 'mh-defcustom)
 (fmakunbound 'mh-defface)
-(fmakunbound 'mh-defface-compat)
 (fmakunbound 'mh-defgroup)
 (fmakunbound 'mh-face-data)
+(fmakunbound 'mh-strip-package-version)
 (makunbound 'mh-face-data)
 (makunbound 'mh-inherit-face-flag)
 (makunbound 'mh-min-colors-defined-flag)