emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/mh-e/mh-customize.el


From: Bill Wohler
Subject: [Emacs-diffs] Changes to emacs/lisp/mh-e/mh-customize.el
Date: Fri, 25 Apr 2003 01:52:05 -0400

Index: emacs/lisp/mh-e/mh-customize.el
diff -c emacs/lisp/mh-e/mh-customize.el:1.3 emacs/lisp/mh-e/mh-customize.el:1.4
*** emacs/lisp/mh-e/mh-customize.el:1.3 Tue Feb  4 08:15:32 2003
--- emacs/lisp/mh-e/mh-customize.el     Fri Apr 25 01:52:00 2003
***************
*** 1,6 ****
  ;;; mh-customize.el --- MH-E customization
  
! ;; Copyright (C) 2002 Free Software Foundation, Inc.
  
  ;; Author: Bill Wohler <address@hidden>
  ;; Maintainer: Bill Wohler <address@hidden>
--- 1,6 ----
  ;;; mh-customize.el --- MH-E customization
  
! ;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
  
  ;; Author: Bill Wohler <address@hidden>
  ;; Maintainer: Bill Wohler <address@hidden>
***************
*** 26,34 ****
  
  ;;; 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:
  ;;
--- 26,34 ----
  
  ;;; 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:
  ;;
***************
*** 55,62 ****
  
  ;;; Change Log:
  
- ;; $Id: mh-customize.el,v 1.3 2003/02/04 13:15:32 lektu Exp $
- 
  ;;; Code:
  (provide 'mh-customize)
  (require 'mh-e)
--- 55,60 ----
***************
*** 95,106 ****
--- 93,123 ----
    :link '(custom-manual "(mh-e)Customizing Moving Mail")
    :group 'mh)
  
+ (defgroup mh-index nil
+   "Indexed searching."
+   :link '(custom-manual "(mh-e)Customizing mh-e")
+   :prefix "mh-"
+   :group 'mh)
+ 
+ (defgroup mh-junk nil
+   "Spam handling."
+   :link '(custom-manual "(mh-e)Customizing mh-e")
+   :prefix "mh-junk-"
+   :group 'mh)
+ 
  (defgroup mh-show nil
    "Message display."
    :prefix "mh-"
    :link '(custom-manual "(mh-e)Customizing Reading")
    :group 'mh)
  
+ (defgroup mh-faces nil
+   "Faces used in MH-E."
+   :link '(custom-manual "(mh-e)Customizing mh-e")
+   :prefix "mh-"
+   :group 'faces
+   :group 'mh)
+ 
  (defgroup mh-letter nil
    "Composing messages."
    :prefix "mh-"
***************
*** 113,137 ****
    :prefix "mh-alias-"
    :group 'mh)
  
- (defgroup mh-index nil
-   "Indexed searching."
-   :link '(custom-manual "(mh-e)Customizing mh-e")
-   :prefix "mh-"
-   :group 'mh)
- 
  (defgroup mh-identity nil
    "Multiple personalities."
    :link '(custom-manual "(mh-e)Customizing mh-e")
    :prefix "mh-"
    :group 'mh)
  
- (defgroup mh-faces nil
-   "Faces used in MH-E."
-   :link '(custom-manual "(mh-e)Customizing mh-e")
-   :prefix "mh-"
-   :group 'faces
-   :group 'mh)
- 
  (defgroup mh-hooks nil
    "MH-E hooks."
    :link '(custom-manual "(mh-e)Customizing mh-e")
--- 130,141 ----
***************
*** 174,225 ****
  
  ;;; Toolbar configuration (:group 'mh-toolbar)
  
- (defconst mh-tool-bar-item-inc         "Incorporate new mail in Inbox")
- (defconst mh-tool-bar-item-save-mime   "Save MIME parts")
- (defconst mh-tool-bar-item-prev-msg    "Previous message")
- (defconst mh-tool-bar-item-page-msg    "Page this message")
- (defconst mh-tool-bar-item-next-msg    "Next message")
- (defconst mh-tool-bar-item-delete      "Mark for deletion")
- (defconst mh-tool-bar-item-refile      "Refile this message")
- (defconst mh-tool-bar-item-undo        "Undo this mark")
- (defconst mh-tool-bar-item-perform     "Perform moves and deletes")
- (defconst mh-tool-bar-item-toggle-show "Toggle showing message")
- (defconst mh-tool-bar-item-reply-from  "Reply to \"from\"")
- (defconst mh-tool-bar-item-reply-to    "Reply to \"to\"")
- (defconst mh-tool-bar-item-reply-all   "Reply to \"all\"")
- (defconst mh-tool-bar-item-reply       "Reply to this message")
- (defconst mh-tool-bar-item-alias       "Grab From alias")
- (defconst mh-tool-bar-item-compose     "Compose new message")
- (defconst mh-tool-bar-item-rescan      "Rescan this folder")
- (defconst mh-tool-bar-item-repack      "Repack this folder")
- (defconst mh-tool-bar-item-search      "Search")
- (defconst mh-tool-bar-item-visit       "Visit other folder")
- (defconst mh-tool-bar-item-prefs       "MH-E preferences")
- (defconst mh-tool-bar-item-help        "Help")
- (defconst mh-tool-bar-item-widen       "Widen from this sequence")
- 
- (defconst mh-tool-bar-item-send        "Send this letter")
- (defconst mh-tool-bar-item-attach      "Insert attachment")
- (defconst mh-tool-bar-item-spell       "Check spelling")
- (defconst mh-tool-bar-item-save        "Save current buffer to its file")
- (defconst mh-tool-bar-item-undo-op     "Undo last operation")
- (defconst mh-tool-bar-item-kill
-   "Cut (kill) text in region between mark and current position")
- (defconst mh-tool-bar-item-copy
-   "Copy text in region between mark and current position")
- (defconst mh-tool-bar-item-paste
-   "Paste (yank) text cut or copied earlier")
- (defconst mh-tool-bar-item-kill-draft  "Kill this draft")
- (defconst mh-tool-bar-item-comp-prefs  "MH-E composition preferences")
- 
- (defcustom mh-tool-bar-reply-3-buttons-flag nil
-   "*Non-nil means use three buttons for reply commands in tool-bar.
- If you have room on your tool-bar because you are using a large font, you
- may set this variable to expand the single reply button into three buttons
- that won't lead to minibuffer prompt about who to reply to."
-   :type 'boolean
-   :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."
--- 178,183 ----
***************
*** 228,616 ****
                   (function :tag "Other function"))
    :group 'mh-toolbar)
  
! (eval-when-compile (defvar tool-bar-map))
! (defvar mh-show-tool-bar-map nil)
! (defun mh-tool-bar-show-set ()
!   "Construct toolbar for `mh-show-mode'."
!   (when (fboundp 'tool-bar-add-item)
!     (setq
!      mh-show-tool-bar-map
!      (let ((tool-bar-map (make-sparse-keymap)))
!        (if (member mh-tool-bar-item-inc mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail" 'mh-inc-folder 'mh-showtoolbar-inc-folder
!                               :help mh-tool-bar-item-inc))
!        (if (member mh-tool-bar-item-save-mime mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "attach" 'mh-mime-save-parts
!                               'mh-showtoolbar-mime-save-parts
!                               :help mh-tool-bar-item-save-mime))
!        (if (member mh-tool-bar-item-prev-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "left_arrow" 'mh-show-previous-undeleted-msg
!                               'mh-showtoolbar-prev
!                               :help mh-tool-bar-item-prev-msg))
!        (if (member mh-tool-bar-item-page-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "page-down" 'mh-show-page-msg 
'mh-showtoolbar-page
!                               :help mh-tool-bar-item-page-msg))
!        (if (member mh-tool-bar-item-next-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "right_arrow" 'mh-show-next-undeleted-msg
!                               'mh-showtoolbar-next
!                               :help mh-tool-bar-item-next-msg))
!        (if (member mh-tool-bar-item-delete mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "close" 'mh-show-delete-msg
!                               'mh-showtoolbar-delete
!                               :help mh-tool-bar-item-delete))
!        (if (member mh-tool-bar-item-refile mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "refile" 'mh-show-refile-msg
!                               'mh-showtoolbar-refile
!                               :help mh-tool-bar-item-refile))
!        (if (member mh-tool-bar-item-undo mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "undo" 'mh-show-undo  'mh-showtoolbar-undo
!                               :help mh-tool-bar-item-undo))
!        (if (member mh-tool-bar-item-perform mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "execute" 'mh-show-execute-commands
!                               'mh-showtoolbar-exec
!                               :help mh-tool-bar-item-perform))
!        (if (member mh-tool-bar-item-toggle-show  mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "show" 'mh-show-toggle-showing
!                               'mh-showtoolbar-toggle-show
!                               :help mh-tool-bar-item-toggle-show))
!        (if (member mh-tool-bar-item-reply-from mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-from"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (set-buffer mh-show-folder-buffer)
!                                 (mh-reply (mh-get-msg-num nil) "from" arg))
!                               'mh-showtoolbar-reply-from
!                               :help mh-tool-bar-item-reply-from))
!        (if (member mh-tool-bar-item-reply-to mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-to"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (set-buffer mh-show-folder-buffer)
!                                 (mh-reply (mh-get-msg-num nil) "to" arg))
!                               'mh-showtoolbar-reply-to
!                               :help mh-tool-bar-item-reply-to))
!        (if (member mh-tool-bar-item-reply-all mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-all"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (set-buffer mh-show-folder-buffer)
!                                 (mh-reply (mh-get-msg-num nil) "all" arg))
!                               'mh-showtoolbar-reply-all
!                               :help mh-tool-bar-item-reply-all))
!        (if (member mh-tool-bar-item-reply mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail/reply2" 'mh-show-reply
!                               'mh-showtoolbar-reply
!                               :help mh-tool-bar-item-reply))
!        (if (member mh-tool-bar-item-alias mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "alias" 'mh-alias-grab-from-field
!                               'mh-showtoolbar-alias
!                               :help mh-tool-bar-item-alias
!                               :enable '(mh-alias-from-has-no-alias-p)))
!        (if (member mh-tool-bar-item-compose mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail_compose" 'mh-send 'mh-showtoolbar-compose
!                               :help mh-tool-bar-item-compose))
!        (if (member mh-tool-bar-item-rescan mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "rescan" 'mh-show-rescan-folder
!                               'mh-showtoolbar-rescan
!                               :help mh-tool-bar-item-rescan))
!        (if (member mh-tool-bar-item-repack mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "repack" 'mh-show-pack-folder
!                               'mh-showtoolbar-pack
!                               :help mh-tool-bar-item-repack))
!        (if (member mh-tool-bar-item-search mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "search"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (call-interactively
!                                  mh-tool-bar-search-function))
!                               'mh-showtoolbar-search
!                               :help mh-tool-bar-item-search))
!        (if (member mh-tool-bar-item-visit mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "fld_open" 'mh-visit-folder
!                               'mh-showtoolbar-visit
!                               :help mh-tool-bar-item-visit))
!        (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "preferences" (lambda ()
!                                               (interactive)
!                                               (mh-customize t))
!                               'mh-showtoolbar-customize
!                               :help mh-tool-bar-item-prefs))
!        (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "help" (lambda ()
!                                        (interactive)
!                                        (Info-goto-node "(mh-e)Top")
!                                        (delete-other-windows))
!                               'mh-showtoolbar-help
!                               :help mh-tool-bar-item-help))
!        tool-bar-map))))
! 
! (defvar mh-letter-tool-bar-map nil)
! ;;;###mh-autoload
! (defun mh-tool-bar-letter-set ()
!   "Construct toolbar for `mh-letter-mode'."
!   (when (fboundp 'tool-bar-add-item)
!     (setq
!      mh-letter-tool-bar-map
!      (let ((tool-bar-map (make-sparse-keymap)))
!        (if (member mh-tool-bar-item-send mh-tool-bar-letter-buttons)
!            (tool-bar-add-item "mail_send" 'mh-send-letter
!                               'mh-lettertoolbar-send
!                               :help mh-tool-bar-item-send))
!        (if (member mh-tool-bar-item-attach mh-tool-bar-letter-buttons)
!            (tool-bar-add-item "attach" 'mh-compose-insertion
!                               'mh-lettertoolbar-compose
!                               :help mh-tool-bar-item-attach))
!        (if (member mh-tool-bar-item-spell mh-tool-bar-letter-buttons)
!            (tool-bar-add-item "spell" 'ispell-message 'mh-lettertoolbar-ispell
!                               :help mh-tool-bar-item-spell))
!        (if (member mh-tool-bar-item-save mh-tool-bar-letter-buttons)
!            (tool-bar-add-item-from-menu 'save-buffer "save"))
!        (if (member mh-tool-bar-item-undo-op mh-tool-bar-letter-buttons)
!            (tool-bar-add-item-from-menu 'undo "undo"))
!        (if (member mh-tool-bar-item-kill mh-tool-bar-letter-buttons)
!            (tool-bar-add-item-from-menu 'kill-region "cut"))
!        (if (member mh-tool-bar-item-copy mh-tool-bar-letter-buttons)
!            (tool-bar-add-item-from-menu 'menu-bar-kill-ring-save "copy"))
!        (if (member mh-tool-bar-item-paste mh-tool-bar-letter-buttons)
!            (tool-bar-add-item-from-menu 'yank "paste"))
!        (if (member mh-tool-bar-item-kill-draft mh-tool-bar-letter-buttons)
!           (tool-bar-add-item "close" 'mh-fully-kill-draft
!                              'mh-lettertoolbar-kill
!                              :help mh-tool-bar-item-kill-draft))
!        (if (member mh-tool-bar-item-comp-prefs mh-tool-bar-letter-buttons)
!           (tool-bar-add-item "preferences" (lambda ()
!                                              (interactive)
!                                              (mh-customize t))
!                              'mh-lettertoolbar-customize
!                              :help mh-tool-bar-item-comp-prefs))
!        (if (member mh-tool-bar-item-help mh-tool-bar-letter-buttons)
!           (tool-bar-add-item "help" (lambda ()
!                                       (interactive)
!                                       (Info-goto-node "(mh-e)Draft Editing")
!                                       (delete-other-windows))
!                              'mh-lettertoolbar-help
!                              :help mh-tool-bar-item-help))
!           tool-bar-map))))
! 
! (defvar mh-folder-tool-bar-map nil)
! (defvar mh-folder-seq-tool-bar-map nil
!   "Tool-bar to use when narrowed to a sequence in MH-Folder buffers.")
! ;;;###mh-autoload
! (defun mh-tool-bar-folder-set ()
!   "Construct toolbar for `mh-folder-mode'."
!   (when (fboundp 'tool-bar-add-item)
!     (setq
!      mh-folder-tool-bar-map
!      (let ((tool-bar-map (make-sparse-keymap)))
!        (if (member mh-tool-bar-item-inc mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail" 'mh-inc-folder
!                               'mh-foldertoolbar-inc-folder
!                               :help mh-tool-bar-item-inc))
!        (if (member mh-tool-bar-item-save-mime mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "attach" 'mh-mime-save-parts
!                               'mh-foldertoolbar-mime-save-parts
!                               :help mh-tool-bar-item-save-mime))
!        (if (member mh-tool-bar-item-prev-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "left_arrow" 'mh-previous-undeleted-msg
!                               'mh-foldertoolbar-prev
!                               :help mh-tool-bar-item-prev-msg))
!        (if (member mh-tool-bar-item-page-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "page-down" 'mh-page-msg 'mh-foldertoolbar-page
!                               :help mh-tool-bar-item-page-msg))
!        (if (member mh-tool-bar-item-next-msg mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "right_arrow" 'mh-next-undeleted-msg
!                               'mh-foldertoolbar-next
!                               :help mh-tool-bar-item-next-msg))
!        (if (member mh-tool-bar-item-delete mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "close" 'mh-delete-msg 'mh-foldertoolbar-delete
!                               :help mh-tool-bar-item-delete))
!        (if (member mh-tool-bar-item-refile mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "refile" 'mh-refile-msg 'mh-foldertoolbar-refile
!                               :help mh-tool-bar-item-refile))
!        (if (member mh-tool-bar-item-undo mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "undo" 'mh-undo  'mh-foldertoolbar-undo
!                               :help mh-tool-bar-item-undo))
!        (if (member mh-tool-bar-item-perform mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "execute" 'mh-execute-commands
!                               'mh-foldertoolbar-exec
!                               :help mh-tool-bar-item-perform))
!        (if (member mh-tool-bar-item-toggle-show  mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "show" 'mh-toggle-showing
!                               'mh-foldertoolbar-toggle-show
!                               :help mh-tool-bar-item-toggle-show))
!        (if (member mh-tool-bar-item-reply-from mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-from"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (mh-reply (mh-get-msg-num nil) "from" arg))
!                               'mh-foldertoolbar-reply-from
!                               :help mh-tool-bar-item-reply-from))
!        (if (member mh-tool-bar-item-reply-to mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-to"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (mh-reply (mh-get-msg-num nil) "to" arg))
!                               'mh-foldertoolbar-reply-to
!                               :help mh-tool-bar-item-reply-to))
!        (if (member mh-tool-bar-item-reply-all mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "reply-all"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (mh-reply (mh-get-msg-num nil) "all" arg))
!                               'mh-foldertoolbar-reply-all
!                               :help mh-tool-bar-item-reply-all))
!        (if (member mh-tool-bar-item-reply mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail/reply2" 'mh-reply
!                               'mh-foldertoolbar-reply
!                               :help mh-tool-bar-item-reply))
!        (if (member mh-tool-bar-item-alias mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "alias" 'mh-alias-grab-from-field
!                               'mh-foldertoolbar-alias
!                               :help mh-tool-bar-item-alias
!                             :enable '(mh-alias-from-has-no-alias-p)))
!        (if (member mh-tool-bar-item-compose mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "mail_compose" 'mh-send 
'mh-foldertoolbar-compose
!                               :help mh-tool-bar-item-compose))
!        (if (member mh-tool-bar-item-rescan mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "rescan" 'mh-rescan-folder
!                               'mh-foldertoolbar-rescan
!                               :help mh-tool-bar-item-rescan))
!        (if (member mh-tool-bar-item-repack mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "repack" 'mh-pack-folder 'mh-foldertoolbar-pack
!                               :help mh-tool-bar-item-repack))
!        (if (member mh-tool-bar-item-search mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "search"
!                               (lambda (&optional arg)
!                                 (interactive "P")
!                                 (call-interactively
!                                  mh-tool-bar-search-function))
!                               'mh-foldertoolbar-search
!                               :help mh-tool-bar-item-search))
!        (if (member mh-tool-bar-item-visit mh-tool-bar-folder-buttons)
!          (tool-bar-add-item "fld_open" 'mh-visit-folder
!                             'mh-foldertoolbar-visit
!                             :help mh-tool-bar-item-visit))
!        (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "preferences" (lambda ()
!                                               (interactive)
!                                               (mh-customize t))
!                               'mh-foldertoolbar-customize
!                               :help mh-tool-bar-item-prefs))
!        (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
!            (tool-bar-add-item "help" (lambda ()
!                                        (interactive)
!                                        (Info-goto-node "(mh-e)Top")
!                                        (delete-other-windows))
!                               'mh-foldertoolbar-help
!                               :help mh-tool-bar-item-help))
!        tool-bar-map))
! 
!     (setq mh-folder-seq-tool-bar-map
!           (let ((tool-bar-map (copy-keymap mh-folder-tool-bar-map)))
!             (if (member mh-tool-bar-item-widen mh-tool-bar-folder-buttons)
!                 (tool-bar-add-item "widen" 'mh-widen 'mh-foldertoolbar-widen
!                                    :help mh-tool-bar-item-widen))
!             tool-bar-map))))
! 
! (defun mh-tool-bar-folder-buttons-set (symbol value)
!   "Update the `mh-tool-bar-folder-buttons' variable, and rebuild the tool-bar.
! Sets the default for SYMBOL (e.g. `mh-tool-bar-folder-buttons') to VALUE (as
! set in customization).  This is called after 'customize is used to alter
! `mh-tool-bar-folder-buttons'."
!   (set-default symbol value)
!   (mh-tool-bar-show-set)
!   (mh-tool-bar-folder-set))
! 
! (custom-declare-variable
!  'mh-tool-bar-folder-buttons
!  '(append
!    (list mh-tool-bar-item-inc
!          mh-tool-bar-item-save-mime
!          mh-tool-bar-item-prev-msg
!          mh-tool-bar-item-page-msg
!          mh-tool-bar-item-next-msg
!          mh-tool-bar-item-delete
!          mh-tool-bar-item-refile
!          mh-tool-bar-item-undo
!          mh-tool-bar-item-perform
! ;;;      mh-tool-bar-item-toggle-show
!          )
!    (if mh-tool-bar-reply-3-buttons-flag
!        (list mh-tool-bar-item-reply-from
!              mh-tool-bar-item-reply-to
!              mh-tool-bar-item-reply-all)
!      (list mh-tool-bar-item-reply))
!    (list mh-tool-bar-item-alias
!          mh-tool-bar-item-compose
!          mh-tool-bar-item-rescan
! ;;;      mh-tool-bar-item-repack
!          mh-tool-bar-item-search
!          mh-tool-bar-item-visit
!          mh-tool-bar-item-prefs
!          mh-tool-bar-item-help
!          mh-tool-bar-item-widen))
!  "Buttons to include in MH-E folder/show toolbar."
!  :group 'mh-toolbar
!  :set 'mh-tool-bar-folder-buttons-set
!  :type `(set (const ,mh-tool-bar-item-inc)
!              (const ,mh-tool-bar-item-save-mime)
!              (const ,mh-tool-bar-item-prev-msg)
!              (const ,mh-tool-bar-item-page-msg)
!              (const ,mh-tool-bar-item-next-msg)
!              (const ,mh-tool-bar-item-delete)
!              (const ,mh-tool-bar-item-refile)
!              (const ,mh-tool-bar-item-undo)
!              (const ,mh-tool-bar-item-perform)
!              (const ,mh-tool-bar-item-toggle-show)
!              (const ,mh-tool-bar-item-reply-from)
!              (const ,mh-tool-bar-item-reply-to)
!              (const ,mh-tool-bar-item-reply-all)
!              (const ,mh-tool-bar-item-reply)
!              (const ,mh-tool-bar-item-alias)
!              (const ,mh-tool-bar-item-compose)
!              (const ,mh-tool-bar-item-rescan)
!              (const ,mh-tool-bar-item-repack)
!              (const ,mh-tool-bar-item-search)
!              (const ,mh-tool-bar-item-visit)
!              (const ,mh-tool-bar-item-prefs)
!              (const ,mh-tool-bar-item-help)
!              (const ,mh-tool-bar-item-widen)))
! 
! (defun mh-tool-bar-letter-buttons-set (symbol value)
!   "Update the `mh-tool-bar-letter-buttons' variable, and rebuild the tool-bar.
! Sets the default for SYMBOL (e.g. `mh-tool-bar-letter-buttons') to VALUE (as
! set in customization).  This is called after 'customize is used to alter
! `mh-tool-bar-letter-buttons'."
!   (set-default symbol value)
!   (mh-tool-bar-letter-set))
  
! (custom-declare-variable
!  'mh-tool-bar-letter-buttons
!  '(list mh-tool-bar-item-send
!         mh-tool-bar-item-attach
!         mh-tool-bar-item-spell
!         mh-tool-bar-item-save
!         mh-tool-bar-item-undo-op
!         mh-tool-bar-item-kill
!         mh-tool-bar-item-copy
!         mh-tool-bar-item-paste
!         mh-tool-bar-item-kill-draft
!         mh-tool-bar-item-comp-prefs
!         mh-tool-bar-item-help)
!  "Buttons to include in MH-E letter toolbar."
!  :group 'mh-toolbar
!  :set 'mh-tool-bar-letter-buttons-set
!  :type `(set (const ,mh-tool-bar-item-send)
!              (const ,mh-tool-bar-item-attach)
!              (const ,mh-tool-bar-item-spell)
!              (const ,mh-tool-bar-item-save)
!              (const ,mh-tool-bar-item-undo-op)
!              (const ,mh-tool-bar-item-kill)
!              (const ,mh-tool-bar-item-copy)
!              (const ,mh-tool-bar-item-paste)
!              (const ,mh-tool-bar-item-kill-draft)
!              (const ,mh-tool-bar-item-comp-prefs)
!              (const ,mh-tool-bar-item-help)))
  
  
  
--- 186,578 ----
                   (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
!   (require 'mh-xemacs-icons)
!   (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 of four things:
! 
!   (FUNCTION MODES ICON DOC)
! 
! 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."
!   ;; 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) (equal (length button) 4))
!         (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))
!              (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)))
!             (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)
!            (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)
!            (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)
!                (cond
!                 ((eq mh-xemacs-toolbar-position 'top)
!                  (set-specifier top-toolbar (cons buffer toolbar))
!                  (set-specifier top-toolbar-visible-p t)
!                  (set-specifier top-toolbar-height height))
!                 ((eq mh-xemacs-toolbar-position 'bottom)
!                  (set-specifier bottom-toolbar (cons buffer toolbar))
!                  (set-specifier bottom-toolbar-visible-p t)
!                  (set-specifier bottom-toolbar-height height))
!                 ((eq mh-xemacs-toolbar-position 'left)
!                  (set-specifier left-toolbar (cons buffer toolbar))
!                  (set-specifier left-toolbar-visible-p t)
!                  (set-specifier left-toolbar-width width))
!                 ((eq mh-xemacs-toolbar-position 'right)
!                  (set-specifier right-toolbar (cons buffer toolbar))
!                  (set-specifier right-toolbar-visible-p t)
!                  (set-specifier right-toolbar-width width))
!                 (t (set-specifier default-toolbar (cons buffer toolbar))))))))
!        ;; 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-execute-commands (folder) "execute"
!     "Perform moves and deletes\nThis button runs `mh-execute-commands'")
!   (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'")
!   (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")
!   (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'"))
  
  
  
***************
*** 660,671 ****
  (defcustom mh-default-folder-list nil
    "*Alist of addresses and folders.
  When refiling messages, these folders are the default that is provided if the
! sender has the associated address. You do not need to list your aliases here
! as that lookup is already performed.
  See `mh-prompt-for-refile-folder' and `mh-folder-from-address' for more
  information."
!   :type '(repeat (list (string :tag "Address")
!                        (string :tag "Folder")))
    :group 'mh-folder)
  
  (defcustom mh-default-folder-must-exist-flag t
--- 622,637 ----
  (defcustom mh-default-folder-list nil
    "*Alist of addresses and folders.
  When refiling messages, these folders are the default that is provided if the
! sender (or recipient if the Check Recipient checkbox has been selected) has
! the associated address, a regexp. The first entry to match will be used, so
! order them according to the wanted priority. You do not need to list your
! aliases here as that lookup is already performed.
! 
  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)
  
  (defcustom mh-default-folder-must-exist-flag t
***************
*** 695,700 ****
--- 661,704 ----
    :type 'string
    :group 'mh-folder)
  
+ 
+ (defcustom mh-inc-spool-list nil
+   "*Alist of alternate spool files, corresponding folders and keybindings.
+ Here's an example. Suppose you have subscribed to the MH-E devel mailing
+ list. You could filter its mail into a separate spool file named
+ ~/mail/mh-e using Procmail and a .procmailrc entry like:
+ 
+ MAILDIR=$HOME/mail      #you'd better make sure it exists
+ :0:
+ * ^From address@hidden
+ mh-e
+ 
+ If you wanted to incorporate that spool file into an MH folder called
+ mh-e by pressing \"I m\" in folder-mode or by `M-x mh-inc-spool-mh-e',
+ you would setup  `mh-inc-spool-list' with an entry:
+ 
+  Spool file:  ~/mail/mh-e
+  Folder:      mh-e
+  Key binding: m
+ 
+ Then, you could also install `xbuffy' and configure an extra mailbox like so:
+ 
+ box ~/mail/mh-e
+  title mh-e
+  origMode
+  polltime 10
+  headertime 0
+  command gnudoit -q '(mh-inc-spool-mh-e)'
+ 
+ Note that the entry above uses the gnuserv package to communicate the
+ command `mh-inc-spool-mh-e' to Emacs. It will incorporate the spool file
+ when clicking 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-folder)
+ 
  (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
***************
*** 712,723 ****
                   directory)
    :group 'mh-folder)
  
- (defcustom mh-recenter-summary-flag nil
-   "*Non-nil means to recenter the summary window.
- Recenter the summary window when the show window is toggled off if non-nil."
-   :type 'boolean
-   :group 'mh-folder)
- 
  (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;
--- 716,721 ----
***************
*** 725,730 ****
--- 723,734 ----
    :type 'boolean
    :group 'mh-folder)
  
+ (defcustom mh-recenter-summary-flag nil
+   "*Non-nil means to recenter the summary window.
+ Recenter the summary window when the show window is toggled off if non-nil."
+   :type 'boolean
+   :group 'mh-folder)
+ 
  (defcustom mh-recursive-folders-flag nil
    "*Non-nil means that commands which operate on folders do so recursively."
    :type 'boolean
***************
*** 769,774 ****
--- 773,784 ----
                   directory)
    :group 'mh-folder)
  
+ (defcustom mh-tick-seq 'tick
+   "The name of the MH tick sequence."
+   :type '(choice (const :tag "Disable ticking" nil)
+                  symbol)
+   :group 'mh-folder)
+ 
  (defcustom mh-update-sequences-after-mh-show-flag t
    "*Non-nil means `mh-update-sequence' is called from `mh-show-mode'.
  If set, `mh-update-sequence' is run every time a message is shown, telling
***************
*** 779,784 ****
--- 789,874 ----
  
  
  
+ ;;; Indexed searching (:group 'mh-index)
+ 
+ (defcustom mh-index-new-messages-folders t
+   "Folders searched for `mh-unseen-seq'.
+ If t, then `mh-inbox' is searched. If nil, all the top level folders are
+ searched. Otherwise the list of folders specified as strings are searched.
+ 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 possible choices are swish++, swish-e, mairix, namazu, glimpse, pick and
+ grep. By default this variable is nil which means that the programs are tried
+ in order and the first one found is used.
+ 
+ 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 "glimpse" glimpse)
+                  (const :tag "pick" pick)
+                  (const :tag "grep" grep))
+   :group 'mh-index)
+ 
+ 
+ 
+ ;;; Spam Handling (:group 'mh-junk)
+ 
+ ;; Spam fighting program chosen
+ (defvar mh-junk-choice nil)
+ 
+ ;; Available spam filter interfaces
+ (defvar mh-junk-function-alist
+   '((bogofilter mh-bogofilter-blacklist mh-bogofilter-whitelist)
+     (spamprobe mh-spamprobe-blacklist mh-spamprobe-whitelist)
+     (spamassassin mh-spamassassin-blacklist mh-spamassassin-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-mail-folder nil
+   "Folder to put spam mail in.
+ If nil then the spam is deleted."
+   :type '(choice (const :tag "Delete spam" nil)
+                  (string :tag "Spam folder"))
+   :group 'mh-junk)
+ 
+ (defcustom mh-junk-program nil
+   "Spam program that MH-E shall use.
+ The possible choices are bogofilter, spamprobe, and spamassassin. By default
+ this variable is nil which means that the programs are tried in order and the
+ first one found is used."
+   :type '(choice (const :tag "auto-detect" nil)
+                  (const :tag "bogofilter" bogofilter)
+                  (const :tag "spamprobe" spamprobe)
+                  (const :tag "spamassassin" spamassassin))
+   :set 'mh-junk-choose
+   :group 'mh-junk)
+ 
+ 
+ 
  ;;; Message display (:group 'mh-show)
  
  (defcustom mh-bury-show-buffer-flag t
***************
*** 798,818 ****
    :type 'boolean
    :group 'mh-show)
  
- (defcustom mh-decode-content-transfer-encoded-message-flag
-   (and (fboundp 'executable-find) (executable-find "mimencode") t)
-   "Non-nil means decode messages with `mimencode', if necessary.
- 
- Messages which are encoded as quoted-printable or base64 are translated into
- 8-bit characters by the `mimencode' command.
- 
- This variable is initialized to t if `mimencode' is available.
- 
- The `mimencode' program is part of the metamail package. The source can be
- obtained from
-    ftp://thumper.bellcore.com/pub/nsb/";
-   :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
--- 888,893 ----
***************
*** 830,835 ****
--- 905,928 ----
    :type 'boolean
    :group 'mh-show)
  
+ (defcustom mh-fetch-x-image-url nil
+   "Control fetching of X-Image-URL header field image.
+ This setting only has effect if `mh-show-use-xface-flag' is non-nil.
+ 
+ If set to t, the image is fetched.
+ 
+ If set to 'ask, the user is 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.
+ 
+ If set to nil, the default, images are not fetched and only displayed if they
+ are already present in the cache."
+   :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
***************
*** 854,859 ****
--- 947,1123 ----
                   (const :tag "Don't fontify" nil))
    :group 'mh-show)
  
+ (defvar mh-invisible-headers nil
+   "*Regexp matching lines in a message header that are not to be shown.
+ Use the function `mh-invisible-headers' to generate this variable.
+ If `mh-visible-headers' is non-nil, it is used instead to specify what
+ to keep.")
+ 
+ (defun mh-invisible-headers ()
+   "Make or remake the variable `mh-invisible-headers'.
+ Done using `mh-invisible-header-fields' as input."
+   (setq mh-invisible-headers
+         (concat
+          "^"
+          (let ((max-specpdl-size 1000) ;workaround for insufficient default
+                (fields mh-invisible-header-fields))
+            (regexp-opt fields t)))))
+ 
+ (defun mh-invisible-header-fields-set (symbol value)
+   "Update `mh-invisible-header-fields'.
+ The function is called with SYMBOL bound to `mh-invisible-header-fields' and
+ VALUE is the the list of headers that are invisible. As a side effect, the
+ variable `mh-invisible-fields' is set."
+   (set-default symbol value)
+   (mh-invisible-headers))
+ 
+ ;; Keep fields alphabetized. Mention source, if known.
+ (defcustom mh-invisible-header-fields
+   '("Approved:"
+     "Autoforwarded:"
+     "Bestservhost:"
+     "Cancel-Lock:"                      ; NNTP posts
+     "Content-"                          ; RFC 2045
+     "Delivered-To:"              ; Egroups/yahoogroups mailing list manager
+     "Delivery-Date:"                    ; MH
+     "Delivery:"
+     "Encoding:"
+     "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-Newsgroups:"              ; mail to news
+     "Original-NNTP-"                    ; mail to news
+     "Original-Path:"                    ; mail to news
+     "Original-Received:"                ; mail to news
+     "Original-To:"                      ; mail to news
+     "Original-X-"                       ; mail to news
+     "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
+     "Ua-Content-Id:"                    ; X400
+     "User-Agent:"
+     "Via:"                              ; MH
+     "X-Abuse-Info:"
+     "X-Accept-Language:"
+     "X-Accept-Language:"                ; Netscape/Mozilla
+     "X-Ack:"
+     "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-Delivered"
+     "X-Envelope-Sender:"
+     "X-Envelope-To:"
+     "X-Face:"
+     "X-Folder:"                         ; Spam
+     "X-From-Line"
+     "X-Gnus-Mail-Source:"               ; gnus
+     "X-Habeas-SWE-1:"                   ; Spam
+     "X-Habeas-SWE-2:"                   ; Spam
+     "X-Habeas-SWE-3:"                   ; Spam
+     "X-Habeas-SWE-4:"                   ; Spam
+     "X-Habeas-SWE-5:"                   ; Spam
+     "X-Habeas-SWE-6:"                   ; Spam
+     "X-Habeas-SWE-7:"                   ; Spam
+     "X-Habeas-SWE-8:"                   ; Spam
+     "X-Habeas-SWE-9:"                   ; Spam
+     "X-Info:"                           ; NTMail
+     "X-Juno-"                           ; Juno
+     "X-List-Host:"                      ; Unknown mailing list managers
+     "X-List-Subscribe:"                 ; Unknown mailing list managers
+     "X-List-Unsubscribe:"               ; Unknown mailing list managers
+     "X-Listserver:"                     ; Unknown mailing list managers
+     "X-Loop:"                           ; Unknown mailing list managers
+     "X-MIME-Autoconverted:"             ; sendmail
+     "X-MIMETrack:"
+     "X-MS-TNEF-Correlator:"             ; MS Outlook
+     "X-Mailing-List:"                   ; Unknown mailing list managers
+     "X-Mailman-Version:"                ; Mailman mailing list manager
+     "X-Majordomo:"                      ; Majordomo mailing list manager
+     "X-Message-Id"
+     "X-MHE-Checksum"                    ; Checksum added during index search
+     "X-MimeOLE:"                        ; MS Outlook
+     "X-Mozilla-Status:"                 ; Netscape/Mozilla
+     "X-Msmail-"                         ; MS Outlook
+     "X-News:"                           ; News
+     "X-No-Archive:"
+     "X-Notes-Item:"                     ; Lotus Notes Domino structured header
+     "X-Orcl-Content-Type:"
+     "X-Original-Complaints-To:"
+     "X-Original-Date:"                  ; SourceForge mailing list manager
+     "X-Original-Trace:"
+     "X-OriginalArrivalTime:"            ; Hotmail
+     "X-Originating-IP:"                 ; Hotmail
+     "X-Priority:"                       ; MS Outlook
+     "X-Qotd-"                           ; User added
+     "X-Received-Date:"
+     "X-Received:"
+     "X-Request-"
+     "X-SBClass:"                        ; Spam
+     "X-SBNote:"                         ; Spam
+     "X-SBPass:"                         ; Spam
+     "X-SBRule:"                         ; Spam
+     "X-Scanned-By"
+     "X-Sender:"
+     "X-Server-Date:"
+     "X-Server-Uuid:"
+     "X-Sieve:"                          ; Sieve filtering
+     "X-Spam-Checker-Version:"           ; Spamassassin
+     "X-Spam-Level:"                     ; Spamassassin
+     "X-Spam-Score:"                     ; Spamassassin
+     "X-Spam-Status:"                    ; Spamassassin
+     "X-SpamBouncer:"                    ; Spam
+     "X-Trace:"
+     "X-UIDL:"
+     "X-UserInfo1:"
+     "X-VSMLoop:"                        ; NTMail
+     "X-Vms-To:"
+     "X-Wss-Id:"                         ; Worldtalk gateways
+     "X-eGroups-"                 ; Egroups/yahoogroups mailing list manager
+     "X-pgp:"
+     "X-submission-address:"
+     "X400-"                             ; X400
+     "Xref:")
+ "*List of header fields that are not to be shown.
+ Regexps 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.
+ This variable is ignored if `mh-visible-headers' is set."
+   :type '(repeat (string :tag "Header field"))
+   :set 'mh-invisible-header-fields-set
+   :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
***************
*** 884,908 ****
    :type 'boolean
    :group 'mh-show)
  
! (defcustom mh-show-use-xface-flag
!   (and window-system
!        (not (null (cond
!                    (mh-xemacs-flag
!                     (locate-library "x-face"))
!                    ((>= emacs-major-version 21)
!                     (locate-library "x-face-e21"))
!                    (t                   ;Emacs20
!                     nil))))
!        (not (null (and (fboundp 'executable-find)
!                        (executable-find
!                         "uncompface")))))
!   "*Non-nil means display faces in `mh-show-mode' with external x-face 
package.
! It is available from ftp://ftp.jpl.org/pub/elisp/. Download it and put its
! files in the Emacs `load-path' and MH-E will invoke it automatically for you 
if
! this variable is non-nil.
  
! The `uncompface' binary is also required to be in the execute PATH. It can
! be obtained from: ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z";
    :type 'boolean
    :group 'mh-show)
  
--- 1148,1187 ----
    :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'.
! This flag controls the display of three kinds of faces.
! 
! The first is the traditional X-Face header field. For GNU Emacs 21
! and above, the `uncompface' binary is required to be in the execute
! PATH for the display of X-Face images. It can be obtained from
! ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z.
! 
! If the XEmacs you are using has internal support for X-Face images, then MH-E
! will display X-Face images in XEmacs \"out of the box\". Even if you don't 
have
! X-Face support compiled into your XEmacs, you can still see the X-Face images
! in MH-E with the aid of an external x-face package and `uncompface'. It is
! available from ftp://ftp.jpl.org/pub/elisp/. Download it, put its files in the
! `load-path' and MH-E will invoke it automatically.
! 
! Second, MH-E supports the display of the Gnus-specific Face
! header field in GNU Emacs >= 21 and XEmacs. No external packages
! are required. More information about the Face header can be found
! at: http://quimby.gnus.org/circus/face/.
! 
! Finally, MH-E can also display images from the X-Image-URL header field. The
! display of the images requires the `wget' program, available from
! http://www.gnu.org/software/wget/wget.html, 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. However its display needs the recipient to
! fetch a URL and this can be misused. So it is disabled by default. It can be
! enabled by customizing `mh-fetch-x-image-url'. Setting that to ask for
! confirmation before fetching seems like a good choice.
  
! 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."
    :type 'boolean
    :group 'mh-show)
  
***************
*** 932,1094 ****
    :group 'mh-show)
  (put 'mhl-formfile 'info-file "mh-e")
  
- (defvar mh-invisible-headers nil
-   "*Regexp matching lines in a message header that are not to be shown.
- If `mh-visible-headers' is non-nil, it is used instead to specify what
- to keep.")
- 
- (defun mh-invisible-headers ()
-   "Make or remake the variable `mh-invisible-headers'.
- Done using `mh-invisible-header-fields' as input."
-   (setq mh-invisible-headers
-         (concat
-          "^"
-          (let ((max-specpdl-size 1000) ;workaround for insufficient default
-                (fields (append (if (not mh-show-use-xface-flag)
-                                    '("X-Face: "))
-                                mh-invisible-header-fields)))
-            (regexp-opt fields t)))))
- 
- (defun mh-invisible-header-fields-set (symbol value)
-   "Update `mh-invisible-header-fields'.
- The function is called with SYMBOL bound to `mh-invisible-header-fields' and
- VALUE is the the list of headers that are invisible. As a side effect, the
- variable `mh-invisible-fields' is set."
-   (set-default symbol value)
-   (mh-invisible-headers))
- 
- ;; Keep fields alphabetized. Mention source, if known.
- (defcustom mh-invisible-header-fields
-   '("Autoforwarded: "
-     "Bestservhost: "
-     "Content-"                          ; RFC 2045
-     "Delivered-To: "             ; Egroups/yahoogroups mailing list manager
-     "Delivery-Date: "                   ; MH
-     "Delivery: "
-     "Encoding: "
-     "Errors-To: "
-     "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
-     "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
-     "Ua-Content-Id: "                   ; X400
-     "User-Agent: "
-     "Via: "                             ; MH
-     "X-Abuse-Info: "
-     "X-Accept-Language: "
-     "X-Accept-Language: "               ; Netscape/Mozilla
-     "X-Ack: "
-     "X-Apparently-From: "               ; MS Outlook
-     "X-Apparently-To: "          ; Egroups/yahoogroups mailing list manager
-     "X-Authentication-Warning: "        ; sendmail
-     "X-Beenthere: "                     ; Mailman mailing list manager
-     "X-Complaints-To: "
-     "X-Cron-Env: "
-     "X-Delivered"
-     "X-Envelope-Sender: "
-     "X-Envelope-To: "
-     "X-Folder: "                        ; Spam
-     "X-From-Line"
-     "X-Gnus-Mail-Source: "              ; gnus
-     "X-Habeas-SWE-1: "                  ; Spam
-     "X-Habeas-SWE-2: "                  ; Spam
-     "X-Habeas-SWE-3: "                  ; Spam
-     "X-Habeas-SWE-4: "                  ; Spam
-     "X-Habeas-SWE-5: "                  ; Spam
-     "X-Habeas-SWE-6: "                  ; Spam
-     "X-Habeas-SWE-7: "                  ; Spam
-     "X-Habeas-SWE-8: "                  ; Spam
-     "X-Habeas-SWE-9: "                  ; Spam
-     "X-Info: "                          ; NTMail
-     "X-Juno-"                           ; Juno
-     "X-List-Host: "                     ; Unknown mailing list managers
-     "X-List-Subscribe: "                ; Unknown mailing list managers
-     "X-List-Unsubscribe: "              ; Unknown mailing list managers
-     "X-Listserver: "                    ; Unknown mailing list managers
-     "X-Loop: "                          ; Unknown mailing list managers
-     "X-MIME-Autoconverted: "            ; sendmail
-     "X-MIMETrack: "
-     "X-MS-TNEF-Correlator: "            ; MS Outlook
-     "X-Mailing-List: "                  ; Unknown mailing list managers
-     "X-Mailman-Version: "               ; Mailman mailing list manager
-     "X-Message-Id"
-     "X-MHE-Checksum"                    ; Checksum added during index search
-     "X-MimeOLE: "                       ; MS Outlook
-     "X-Mozilla-Status: "                ; Netscape/Mozilla
-     "X-Msmail-"                         ; MS Outlook
-     "X-News: "                          ; News
-     "X-No-Archive: "
-     "X-Orcl-Content-Type: "
-     "X-Original-Complaints-To: "
-     "X-Original-Date: "                 ; SourceForge mailing list manager
-     "X-Original-Trace: "
-     "X-OriginalArrivalTime: "           ; Hotmail
-     "X-Originating-IP: "                ; Hotmail
-     "X-Priority: "                      ; MS Outlook
-     "X-Qotd-"                           ; User added
-     "X-Received-Date: "
-     "X-Received: "
-     "X-Request-"
-     "X-SBClass: "                       ; Spam
-     "X-SBNote: "                        ; Spam
-     "X-SBPass: "                        ; Spam
-     "X-SBRule: "                        ; Spam
-     "X-Scanned-By"
-     "X-Sender: "
-     "X-Server-Date: "
-     "X-Server-Uuid: "
-     "X-Sieve: "                         ; Sieve filtering
-     "X-Spam-Level: "                    ; Spam
-     "X-Spam-Score: "                    ; Spam
-     "X-Spam-Status: "                   ; Spam
-     "X-SpamBouncer: "                   ; Spam
-     "X-Trace: "
-     "X-UIDL: "
-     "X-UserInfo1: "
-     "X-VSMLoop: "                       ; NTMail
-     "X-Vms-To: "
-     "X-Wss-Id: "                        ; Worldtalk gateways
-     "X-eGroups-"                 ; Egroups/yahoogroups mailing list manager
-     "X-pgp: "
-     "X-submission-address: "
-     "X400-"                             ; X400
-     "Xref: ")
- "*List of header fields that are not to be shown.
- Regexps 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.
- This variable is ignored if `mh-visible-headers' is set."
-   :type '(repeat (string :tag "Header field"))
-   :set 'mh-invisible-header-fields-set
-   :group 'mh-show)
- 
  
  
  ;;; Composing messages (:group 'mh-letter)
--- 1211,1216 ----
***************
*** 1134,1175 ****
    :type 'string
    :group 'mh-letter)
  
- (defcustom mh-insert-mail-followup-to-flag t
-   "Non-nil means maybe append a Mail-Followup-To field to the header.
- The insertion is done if the To: or Cc: fields matches an entry in
- `mh-insert-mail-followup-to-list'."
-   :type 'boolean
-   :group 'mh-letter)
- 
- (defcustom mh-insert-mail-followup-to-list nil
-   "Alist of addresses for which a Mail-Followup-To field is inserted.
- Each element has the form (REGEXP ADDRESS).
- When the REGEXP appears in the To or cc fields of a message, the corresponding
- ADDRESS is inserted in a Mail-Followup-To field.
- 
- Here's a customization example:
- 
-   regexp: address@hidden(ourceforge\\\\|f\\\\).net
-  address: address@hidden
- 
- This corresponds to:
- 
-   (setq mh-insert-mail-followup-to-list
-         '((\"address@hidden(ourceforge\\\\|f\\\\).net\"
-            \"address@hidden")))
- 
- While it might be tempting to add a descriptive name to the mailing list
- address, consider that this field will appear in other people's outgoing
- mail in their To: field.  It might be best to keep it simple."
-   :type '(repeat (list (string :tag "Regexp")
-                        (string :tag "Address")))
-   :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-fill-column 72
    "*Fill column to use in `mh-letter-mode'.
  This is usually less than in other text modes because email messages get
--- 1256,1271 ----
    :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 fields specific to aliases."
+   :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
***************
*** 1207,1222 ****
    :group 'mh-letter)
  
  (defcustom mh-x-face-file "~/.face"
!   "*File name containing the encoded X-Face string to insert in outgoing mail.
! If nil, or the file does not exist, nothing is added to message headers."
    :type 'file
    :group 'mh-letter)
  
- (defvar mh-x-mailer-string nil
-   "*String containing the contents of the X-Mailer header field.
- If nil, this variable is initialized to show the version of MH-E, Emacs, and
- MH the first time a message is composed.")
- 
  (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
--- 1303,1330 ----
    :group 'mh-letter)
  
  (defcustom mh-x-face-file "~/.face"
!   "*File containing X-Face or 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 it is assumed to contain the whole field and is added 
to
! the message header verbatim. Otherwise it is assumed that the file contains 
the
! value of the X-Face header field.
! 
! X-Face header fields can be generated using `compface', 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.
! 
! There is a `make-face' script that converts a jpeg image to a Face header
! field at http://quimby.gnus.org/circus/face/make-face.
! 
! The URL of any image can be used for the X-Image-URL field and no processing
! of the image is required.
! 
! If nil, or the file does not exist, nothing is added to the message header."
    :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
***************
*** 1260,1298 ****
                   (const :tag "Entire message with headers" t))
    :group 'mh-letter)
  
- (defcustom mh-letter-complete-function 'ispell-complete-word
-   "*Function to call when completing outside of fields specific to aliases."
-   :type '(choice function (const nil))
-   :group 'mh-letter)
- 
  
  
  ;;; Alias handling (:group 'mh-alias)
  
- (defcustom mh-alias-system-aliases
-   '("/etc/nmh/MailAliases" "/usr/lib/mh/MailAliases" "/etc/passwd")
-   "*A list of system files from which to cull aliases.
- If these files are modified, they are automatically reread. This list need
- include only system aliases and the passwd file, since personal alias files
- listed in your \"AliasFile\" MH profile component are automatically included.
- You can update the alias list manually using \\[mh-alias-reload]."
-   :group 'mh-alias
-   :type '(choice (file) (repeat file)))
- 
- (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."
-   :group 'mh-alias
-   :type 'boolean)
- 
  (defcustom mh-alias-completion-ignore-case-flag t
    "*Non-nil means don't consider case significant in MH alias completion.
  This is the default in plain MH, so it is the default here as well. It
  can be useful to set this to t if, for example, you use lowercase
  aliases for people and uppercase for mailing lists."
!   :group 'mh-alias
!   :type 'boolean)
  
  (defcustom mh-alias-flash-on-comma t
    "*Specify whether to flash or warn on translation.
--- 1368,1391 ----
                   (const :tag "Entire message with headers" t))
    :group 'mh-letter)
  
  
  
  ;;; Alias handling (:group 'mh-alias)
  
  (defcustom mh-alias-completion-ignore-case-flag t
    "*Non-nil means don't consider case significant in MH alias completion.
  This is the default in plain MH, so it is the default here as well. It
  can be useful to set this to t if, for example, you use lowercase
  aliases for people and uppercase for mailing lists."
!   :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 or warn on translation.
***************
*** 1301,1331 ****
  t   Flash alias translation but don't warn if there is no translation.
  1   Flash alias translation and warn if there is no translation.
  nil Do not flash alias translation nor warn if there is no translation."
-   :group 'mh-alias
    :type '(choice (const :tag "Flash but don't warn if no translation" t)
                 (const :tag "Flash and warn if no translation" 1)
!                (const :tag "Don't flash nor warn if no translation" nil)))
! 
! (defcustom mh-alias-local-users t
!   "*If t, local users are completed in MH-E To: and Cc: prompts.
! 
! Users with a userid greater than some magic number (usually 200) are available
! for completion.
! 
! If you set this variable to a string, it will be executed to generate a
! password file. A value of \"ypcat passwd\" is helpful if NIS is in use."
!   :group 'mh-alias
!   :type '(choice (boolean) (string)))
  
  (defcustom mh-alias-insert-file nil
    "*Filename to use to store new MH-E aliases.
  This variable can also be a list of filenames, in which case MH-E will prompt
  for one of them. If nil, the default, then MH-E will use the first file found
  in the \"AliasFile\" component of the MH profile."
-   :group 'mh-alias
    :type '(choice (const :tag "Use AliasFile MH profile component" nil)
                   (file :tag "Alias file")
!                  (repeat :tag "List of alias files" file)))
  
  (defcustom mh-alias-insertion-location 'sorted
    "Specifies where new aliases are entered in alias files.
--- 1394,1413 ----
  t   Flash alias translation but don't warn if there is no translation.
  1   Flash alias translation and warn if there is no translation.
  nil Do not flash alias translation nor warn if there is no translation."
    :type '(choice (const :tag "Flash but don't warn if no translation" t)
                 (const :tag "Flash and warn if no translation" 1)
!                (const :tag "Don't flash nor warn if no translation" nil))
!   :group 'mh-alias)
  
  (defcustom mh-alias-insert-file nil
    "*Filename to use to store new MH-E aliases.
  This variable can also be a list of filenames, in which case MH-E will prompt
  for one of them. If nil, the default, then MH-E will use the first file found
  in the \"AliasFile\" component of the MH profile."
    :type '(choice (const :tag "Use AliasFile MH 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.
***************
*** 1335,1366 ****
                   (const :tag "At the bottom of file" bottom))
    :group 'mh-alias)
  
! 
  
! ;;; Indexed searching (:group 'mh-index)
  
! (defcustom mh-index-program nil
!   "Indexing program that MH-E shall use.
! The possible choices are swish++, swish-e, mairix, namazu, glimpse, pick and
! grep. By default this variable is nil which means that the programs are tried
! in order and the first one found is used.
  
! 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 "glimpse" glimpse)
!                  (const :tag "pick" pick)
!                  (const :tag "grep" grep))
!   :group 'mh-index)
  
  
  
  ;;; Multiple personalities (:group 'mh-identity)
  
  (defcustom mh-identity-list nil
    "*List holding MH-E identity.
  Omit the colon and trailing space from the field names.
--- 1417,1496 ----
                   (const :tag "At the bottom of file" bottom))
    :group 'mh-alias)
  
! (defcustom mh-alias-local-users t
!   "*If t, local users are completed in MH-E To: and Cc: prompts.
  
! Users with a userid greater than some magic number (usually 200) are available
! for completion.
  
! If you set this variable to a string, it will be executed to generate a
! password file. A value of \"ypcat passwd\" is helpful if NIS is in use."
!   :type '(choice (boolean) (string))
!   :group 'mh-alias)
  
! (defcustom mh-alias-system-aliases
!   '("/etc/nmh/MailAliases" "/usr/lib/mh/MailAliases" "/etc/passwd")
!   "*A list of system files from which to cull aliases.
! If these files are modified, they are automatically reread. This list need
! include only system aliases and the passwd file, since personal alias files
! listed in your \"AliasFile\" MH profile component are automatically included.
! You can update the alias list manually using \\[mh-alias-reload]."
!   :type '(choice (file) (repeat file))
!   :group 'mh-alias)
  
  
  
  ;;; Multiple personalities (:group 'mh-identity)
  
+ (defvar mh-identity-list ())
+ 
+ (defcustom mh-auto-fields-list nil
+   "Alist of addresses for which header lines are automatically inserted.
+ Each element has the form (REGEXP ((KEYWORD VALUE) (KEYWORD VALUE)).
+ When the REGEXP appears in the To or cc fields of a message, the corresponding
+ KEYWORD header field is insert with its VALUE in the message header.
+ 
+ There is one special case for KEYWORD, that of \"identity\", which means to
+ insert that identity using `mh-insert-identity'.
+ 
+ The common KEYWORD cases of \"Mail-Followup-To\" and \"fcc\" are also
+ prompted for in the customization interface."
+   :type `(repeat
+           (list :tag ""
+                 (string :tag "Regular expression to match")
+                 (repeat :tag "At least one pair from below"
+                         (choice
+                          (cons :tag "Identity entry"
+                           (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 and value pair"
+                                  (string :tag "Field")
+                                  (string :tag "Value"))))))
+   :group 'mh-identity)
+ 
+ (defcustom mh-identity-default nil
+   "Default identity to use when `mh-letter-mode' is called."
+   ;; Dynamically render :type corresponding to `mh-identity-list' entries,
+   ;; e.g.:
+   ;;  :type '(radio (const :tag "none" nil)
+   ;;                (const "home")
+   ;;                (const "work"))
+   :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-list nil
    "*List holding MH-E identity.
  Omit the colon and trailing space from the field names.
***************
*** 1408,1427 ****
    :set 'mh-identity-list-set
    :group 'mh-identity)
  
- (defcustom mh-identity-default nil
-   "Default identity to use when `mh-letter-mode' is called."
-   ;; Dynamically render :type corresponding to `mh-identity-list' entries,
-   ;; e.g.:
-   ;;  :type '(radio (const :tag "none" nil)
-   ;;                (const "home")
-   ;;                (const "work"))
-   :type (append
-          '(radio)
-          (cons '(const :tag "None" nil)
-                (mapcar (function (lambda (arg) `(const ,arg)))
-                        (mapcar 'car mh-identity-list))))
-   :group 'mh-identity)
- 
  
  
  ;;; Hooks (:group 'mh-hooks + group where hook defined)
--- 1538,1543 ----
***************
*** 1481,1492 ****
    :group 'mh-hooks
    :group 'mh-folder)
  
- (defcustom mh-index-show-hook nil
-   "Invoked after the message has been displayed."
-   :type 'hook
-   :group 'mh-hooks
-   :group 'mh-index)
- 
  (defcustom mh-letter-insert-signature-hook nil
    "Invoked at the beginning of the 
\\<mh-letter-mode-map>\\[mh-insert-signature] command.
  Can be used to determine which signature file to use based on message content.
--- 1597,1602 ----
***************
*** 1685,1690 ****
--- 1795,1807 ----
    "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)
***************
*** 1772,1777 ****
--- 1889,1900 ----
      (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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]