This commit was manufactured by cvs2svn to create branch 'elmo-imap4-new-
[elisp/wanderlust.git] / wl / wl-vars.el
index 72c4f5d..568be98 100644 (file)
@@ -33,6 +33,7 @@
 
 (require 'elmo-vars)
 (require 'elmo-util)
+(require 'elmo-msgdb)
 (require 'custom)
 
 ;;; Customizable Variables
 (defgroup wl nil
   "Wanderlust, a news and mail reading software."
   :tag "Wanderlust"
-  :link (` (custom-manual
-           (, (if (and (boundp 'current-language-environment)
-                       (string-equal "Japanese"
-                                     (symbol-value 'current-language-environment)))
-                  "(wl-ja)Top"
-                "(wl)Top"))))
+  :link `(custom-manual
+         ,(if (and (boundp 'current-language-environment)
+                   (string-equal "Japanese"
+                                 (symbol-value 'current-language-environment)))
+              "(wl-ja)Top"
+            "(wl)Top"))
   :group 'news
   :group 'mail)
 
 
 (defvar wl-cs-cache wl-cs-local)
 
-(defvar wl-use-semi (module-installed-p 'mime-view) ; If nil, use tm.
-  "*Use SEMI or not.")
-
 (defcustom wl-from (and user-mail-address
                        (concat (and (user-full-name)
                                     (concat (elmo-address-quote-specials
   "*A list of user's mail addresses.
 This list is used to judge whether an address is user's or not.
 You should set this variable if you use multiple e-mail addresses.
-If you don't have multiple e-mail addresses, you don't have to set this."
+If you don't have multiple e-mail addresses, you don't have to set this.
+NOTE: Non-nil value of `wl-user-mail-address-regexp' supersede this."
   :type '(repeat string)
   :group 'wl
   :group 'wl-setting)
 
+(defcustom wl-user-mail-address-regexp nil
+  "*A regexp for user's mail addresses.
+Supersede `wl-user-mail-address-list'."
+  :type '(choice (const :tag "Use wl-user-mail-address-list" nil)
+                string)
+  :group 'wl
+  :group 'wl-setting)
+
 (defcustom wl-organization (getenv "ORGANIZATION")
   "Organization name."
   :type '(choice (const :tag "none" nil)
@@ -181,7 +188,7 @@ If you don't have multiple e-mail addresses, you don't have to set this."
   :group 'wl-summary)
 
 (defcustom wl-summary-default-view-alist nil
-  "An alist of folder name and summary default view.
+  "An alist of regexp for folder name and summary default view.
 If no match, `wl-summary-default-view' is used."
   :type '(repeat (cons (regexp :tag "Folder Regexp")
                       (choice (const :tag "Thread" thread)
@@ -194,13 +201,13 @@ If no match, `wl-summary-default-view' is used."
                                    wl-summary-buffer-elmo-folder))
          (elmo-folder-name-internal wl-summary-buffer-elmo-folder)))
     (?t (if (eq wl-summary-buffer-view 'thread) "T" "S"))
+    (?m (upcase (symbol-name wl-summary-buffer-display-mime-mode)))
     (?n wl-summary-buffer-new-count)
-    (?u (+ wl-summary-buffer-new-count
-          wl-summary-buffer-unread-count))
+    (?u wl-summary-buffer-unread-count)
     (?a (length wl-summary-buffer-number-list)))
   "An alist of format specifications that can appear in summary mode-lines.
 Each element is a list of following:
-\(SPEC STRING-EXP\)
+\(SPEC STRING-EXP)
 SPEC is a character for format specification.
 STRING-EXP is an expression to get string to insert.")
 
@@ -211,6 +218,7 @@ which are replaced by the given information:
 
 %f The folder name.
 %t The thread status of the summary ('T' for thread, 'S' for sequential).
+%m The mime analysis status of the summary ('MIME' for MIME ON)
 %n The number of new messages.
 %u The number of unread messages (includes new messages).
 %a The number of all messages."
@@ -247,7 +255,7 @@ which are replaced by the given information:
     (?@ (wl-summary-line-attached)))
   "An alist of format specifications that can appear in summary lines.
 Each element is a list of following:
-\(SPEC STRING-EXP\)
+\(SPEC STRING-EXP)
 SPEC is a character for format specification.
 STRING-EXP is an expression to get string to insert.")
 
@@ -266,6 +274,7 @@ which are replaced by the given information:
 %D The day of the date field of the message (zero padded).
 %W The weekday name of the date field of the message (zero padded).
 %h The hour of the date field of the message (zero padded).
+%l The number in the mailing list.
 %m The minute of the date field of the message (zero padded).
 %[ An open bracket.  If the message thread is linked,
    it is replaced with '<'.
@@ -279,10 +288,15 @@ which are replaced by the given information:
 %f The from: field string of the message.
 %s The subject: field string of the message.
 %S The size of the message (if available).
+%t The branch of the thread.
+%@ `@' only if the first MIME part is multipart/mixed.
 %~ If the previous spec is not zero-length, replaced with ' '.
+%#  mailing list information (`(' ML-name [ ` ' ML-number ] `)')
 
 If the format string contains the specifiers %( and %), the text between
-them will have the specified number of columns."
+them will have the specified number of columns.
+
+See also variable `wl-summary-width'."
   :group 'wl-summary
   :type 'string)
 
@@ -331,6 +345,93 @@ If nil, never search search parent by subject."
                 (const :tag "Don't search parent" nil))
   :group 'wl-summary)
 
+;;; Mark & Action
+(defcustom wl-summary-mark-action-list
+  '(("*"
+     target-mark
+     nil
+     wl-summary-register-target-mark
+     nil
+     wl-highlight-summary-temp-face
+     "Put target mark.")
+    ("d"
+     dispose
+     nil
+     wl-summary-register-temp-mark
+     wl-summary-exec-action-dispose
+     wl-highlight-summary-disposed-face
+     "Dispose messages according to `wl-dispose-folder-alist'.")
+    ("D"
+     delete
+     nil
+     wl-summary-register-temp-mark
+     wl-summary-exec-action-delete
+     wl-highlight-summary-deleted-face
+     "Delete messages immediately.")
+    ("o"
+     refile
+     wl-summary-get-refile-destination
+     wl-summary-set-action-refile
+     wl-summary-exec-action-refile
+     wl-highlight-summary-refiled-face
+     "Refile messages to the other folder.")
+    ("O"
+     copy
+     wl-summary-get-copy-destination
+     wl-summary-register-temp-mark
+     wl-summary-exec-action-copy
+     wl-highlight-summary-copied-face
+     "Copy messages to the other folder.")
+    ("i"
+     prefetch
+     nil
+     wl-summary-register-temp-mark
+     wl-summary-exec-action-prefetch
+     wl-highlight-summary-prefetch-face
+     "Prefetch messages.")
+    ("~"
+     resend
+     wl-summary-get-resend-address
+     wl-summary-register-temp-mark
+     wl-summary-exec-action-resend
+     wl-highlight-summary-resend-face
+     "Resend messages."))
+  "A variable to define Mark & Action.
+Each element of the list should be a list of
+\(MARK
+  SYMBOL
+  ARGUMENT-FUNCTION
+  SET-MARK-FUNCTION
+  EXEC-FUNCTION
+  FACE
+  DOC-STRING)
+
+MARK is a temporal mark string to define.
+SYMBOL is an action name to define.
+ARGUMENT-FUNCTION is a function called to set the argument data for
+SET-MARK-FUNCTION.
+Its argument is (ACTION NUMBER).
+ACTION is same as the SYMBOL.
+NUMBER is the message number to determine the argument data.
+SET-MARK-FUNCTION is a function called to set the mark.
+Its argument is (NUMBER MARK DATA).
+NUMBER is the target message number.
+MARK is the temporary mark string.
+DATA is given by ARGUMENT-FUNCTION.
+EXEC-FUNCTION is a function called to execute the action.
+Its argument is a list of MARK-INFO.
+MARK-INFO is a list of (NUMBER MARK DATA).
+FACE is a face for highlighting."
+  :type '(repeat (list
+                 (string :tag "Temporary mark")
+                 (symbol :tag "Action name")
+                 (symbol :tag "Argument function")
+                 (symbol :tag "Set mark function")
+                 (symbol :tag "Exec function")
+                 (symbol :tag "Face symbol")
+                 (string :tag "Document string")))
+  :group 'wl-summary)
+
 ;; Important folders
 (defcustom wl-default-folder "%inbox"
   "*Default folder used in `wl-summary-goto-folder'."
@@ -351,7 +452,7 @@ If nil, never search search parent by subject."
   :group 'wl)
 
 (defcustom wl-default-spec "%"
-  "*Default spec"
+  "*Default prefix for folder name initially added in minibuffer"
   :type 'string
   :group 'wl)
 
@@ -398,6 +499,23 @@ You had better set this variable if you set 'wl-insert-mail-followup-to' as t."
   :type 'boolean
   :group 'wl-pref)
 
+(defcustom wl-demo-icon-name-alist
+  '(((string-match "^... Dec \\([ 01][0-9]\\|2[0-5]\\)" (current-time-string))
+     .
+     (concat "wl-" (wl-version-status) "-xmas-logo"))
+    (t
+     .
+     (concat "wl-" (wl-version-status) "-logo")))
+  "An alist to determine the basename of the logo file."
+  :type '(repeat (cons (symbol :tag "condition")
+                      (symbol :tag "file name")))
+  :group 'wl-pref)
+
+(defcustom wl-demo-image-filter-alist nil
+  "An alist of image type and filter function."
+  :type '(repeat (cons symbol function))
+  :group 'wl-pref)
+
 (defcustom wl-envelope-from nil
   "*Envelope From used in SMTP.
 If nil, `wl-from' is used."
@@ -410,19 +528,22 @@ If nil, `wl-from' is used."
   "*Additional headers in the draft."
   :type '(repeat (cons (symbol :tag "Field Name")
                       (choice (string :tag "String")
-                              (function :tag "Function")))))
+                              (function :tag "Function"))))
+  :group 'wl-draft)
 
 (defcustom wl-draft-add-in-reply-to t
   "*If non-nil, message-id of the cited message is inserted to the
-in-reply-to field of the current draft."
+in-reply-to field of the current draft.
+Note: default value follows RFC2822."
   :type 'boolean
-  :group 'wl)
+  :group 'wl-draft)
 
 (defcustom wl-draft-add-references nil
   "*If non-nil, message-id of the cited message is inserted to the
-references field of the current draft."
+references field of the current draft.
+Note: default value follows RFC2822."
   :type 'boolean
-  :group 'wl)
+  :group 'wl-draft)
 
 (defcustom wl-draft-cite-function 'wl-default-draft-cite
   "*A function for citation."
@@ -440,6 +561,7 @@ references field of the current draft."
 If nil, default smtp connection type is used."
   :type '(choice (const :tag "default" nil)
                 (const :tag "Use STARTTLS" starttls)
+                (const :tag "SMTP over SSL" ssl)
                 symbol)
   :group 'wl)
 
@@ -471,16 +593,25 @@ If nil, don't authenticate."
   :type '(choice (const :tag "none" nil)
                 (const :tag "PLAIN" "plain")
                 (const :tag "CRAM-MD5" "cram-md5")
+                (const :tag "DIGEST-MD5" "digest-md5")
                 (const :tag "LOGIN" "login")
                 (string :tag "Other"))
   :group 'wl
   :group 'wl-setting)
 
+(defcustom wl-smtp-authenticate-realm nil
+  "*SMTP Authentication realm.
+If you don't need to specify realm, set as nil."
+  :type '(choice (const :tag "none" nil)
+                string)
+  :group 'wl
+  :group 'wl-setting)
+
 (defcustom wl-pop-before-smtp-user nil
   "*POP3 user name to send mail using POP-before-SMTP.
 If nil, `elmo-pop3-default-user' is used.
 To use POP-before-SMTP,
-\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp\)"
+\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp)"
   :type '(choice (const :tag "none" nil)
                 string)
   :group 'wl
@@ -505,7 +636,8 @@ If nil, `elmo-pop3-default-port' is used."
 (defcustom wl-pop-before-smtp-stream-type nil
   "*Stream type for POP-before-SMTP.
 If nil, `elmo-pop3-default-stream-type' is used."
-  :type 'boolean
+  :type '(choice (const :tag "Use `elmo-pop3-default-stream-type'" nil)
+                symbol)
   :group 'wl)
 
 (defcustom wl-pop-before-smtp-authenticate-type nil
@@ -542,7 +674,8 @@ If nil, `elmo-nntp-default-port' is used."
 (defcustom wl-nntp-posting-stream-type nil
   "*Stream type for posting Netnews.
 If nil, `elmo-nntp-default-stream-type' is used."
-  :type 'boolean
+  :type '(choice (const :tag "Use `elmo-nntp-default-stream-type'" nil)
+                symbol)
   :group 'wl)
 (defcustom wl-nntp-posting-function 'elmo-nntp-post
   "A function to post news.
@@ -598,6 +731,12 @@ when `wl-prefetch-confirm' is non-nil."
   :type 'boolean
   :group 'wl-summary)
 
+(defcustom wl-additional-search-condition-fields nil
+  "*A list of field name which is used for candidates of search condition."
+  :type '(repeat (string :tag "Field name"))
+  :group 'wl-pref
+  :group 'wl-setting)
+
 ;;;; Hooks
 (defvar wl-folder-mode-hook nil
   "A hook called when wanderlust folder mode is started.
@@ -641,8 +780,31 @@ the functions `wl-plugged-init-icons' and `wl-biff-init-icons' for
 reasons of system internal to accord facilities for the Emacs variants.")
 (defvar wl-hook nil
   "A hook called when Wanderlust is invoked.")
-(defvar wl-reply-hook nil
-  "A hook called when replied.")
+
+(defvar wl-draft-reply-hook
+  '((lambda () (wl-draft-setup-parent-flag 'answered)))
+  "A hook called when replied.
+This hook runs on the draft buffer.")
+
+(defvar wl-draft-forward-hook
+  '((lambda () (wl-draft-setup-parent-flag 'forwarded)))
+  "A hook called when forwarded.
+This hook runs on the draft buffer.")
+
+(defvar wl-draft-kill-pre-hook nil
+  "A hook called just before the draft buffer is killed.")
+
+(defvar wl-summary-reply-hook nil
+  "A hook called when `wl-summary-reply' is called.
+This hook runs on the summary buffer.")
+
+(defvar wl-summary-forward-hook nil
+  "A hook called when `wl-summary-forward' is called.
+This hook runs on the summary buffer.")
+
+(defvar wl-summary-resend-hook nil
+  "A hook runs on the resent message buffer before sending process starts.")
+
 (defvar wl-mail-setup-hook nil
   "A hook called when Draft is prepared.")
 (defvar wl-draft-reedit-hook '(wl-draft-remove-text-plain-tag)
@@ -743,92 +905,71 @@ Prepared candidates are 'wl-draft-send-mail-with-smtp,
                (function :tag "Other"))
   :group 'wl-draft)
 
-(defcustom wl-draft-reply-with-argument-list
-  '((("Followup-To" "Mail-Followup-To")
-     . (("Mail-Followup-To") ("From" "To" "Cc") ("Followup-To")))
-    ("Followup-To"
-     . (("From") ("To" "Cc") ("Followup-To")))
-    ("Mail-Followup-To"
-     . (("Mail-Followup-To") ("From" "To" "Cc") ("Newsgroups")))
-    ("Mail-Reply-To" . (("Mail-Reply-To") ("From" "To" "Cc") ("Newsgroups")))
-    ("Reply-To" . (("Reply-To") ("From" "To" "Cc") ("Newsgroups")))
-    ("Newsgroups" . (("From") ("To" "Cc") ("Newsgroups")))
-    ("From" . (("From") nil nil)))
-  "Alist of cons cell of
-('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
-'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'reply-to-author'."
-  :type '(repeat (cons (choice (string :tag "Field Name")
-                              (repeat (string :tag "Field Name")))
-                      (list (repeat :tag "Fields For To" string)
-                            (repeat :tag "Fields For Cc" string)
-                            (repeat :tag "Fields For Newsgroups" string))))
+(defcustom wl-draft-send-confirm-type 'y-or-n-p
+  "*Confirmation type or function to use when send a message."
+  :type '(choice
+         (const :tag "y or n with scroll (j/k)" scroll-by-j/k)
+         (const :tag "y or n with scroll (SPC/BS)" scroll-by-SPC/BS)
+         (function-item y-or-n-p)
+         (function-item yes-or-no-p)
+         (function :tag "Other function"))
   :group 'wl-draft)
 
-(defcustom wl-draft-reply-without-argument-list
-  '((("Followup-To" "Mail-Followup-To")
-     . (("Mail-Followup-To") nil ("Followup-To")))
-    ("Followup-To" . (nil nil ("Followup-To")))
-    ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
-    ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
-    ("Reply-To" . (("Reply-To") nil nil))
-    ("Newsgroups" . (nil nil ("Newsgroups")))
-    ("From" . (("From") ("To" "Cc") nil)))
+(defcustom wl-draft-reply-with-argument-list
+  '(("From" . (("Reply-To" "Mail-Reply-To" "From")
+              ("Mail-Followup-To" "To" "Cc")
+              ("Followup-To" "Newsgroups"))))
   "Alist of cons cell of
-('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
+\('condition' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
+'condition' is a header name string (non-nil if the header exists in original
+message), a function (evaluated in original message buffer) or a list of those
+\(means 'AND' condition).
 'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
+If car of each cons cell returns non-nil value,
+cdr of each cons cell is used for preparing headers of draft message.
 Default is for 'reply-to-all'."
   :type '(repeat (cons (choice (string :tag "Field Name")
-                              (repeat (string :tag "Field Name")))
+                              (symbol :tag "Function")
+                              (const :tag "Replying to self" wl-draft-self-reply-p)
+                              (repeat :tag "AND"
+                                      (choice (string :tag "Field Name")
+                                              (symbol :tag "Function")
+                                              (const :tag "Replying to self" wl-draft-self-reply-p))))
                       (list (repeat :tag "Fields For To" string)
                             (repeat :tag "Fields For Cc" string)
                             (repeat :tag "Fields For Newsgroups" string))))
   :group 'wl-draft)
 
-(defcustom wl-draft-reply-myself-with-argument-list
-  '(("Followup-To" . (("To") ("Cc") ("Followup-To")))
-    ("Newsgroups" . (("To") ("Cc") ("Newsgroups")))
-    ("From" . (("To") ("Cc") nil)))
-  "Alist of cons cell of
-('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
-'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'reply-to-me'."
-  :type '(repeat (cons (choice (string :tag "Field Name")
-                              (repeat (string :tag "Field Name")))
-                      (list (repeat :tag "Fields For To" string)
-                            (repeat :tag "Fields For Cc" string)
-                            (repeat :tag "Fields For Newsgroups" string))))
-  :group 'wl-draft)
-
-(defcustom wl-draft-reply-myself-without-argument-list
-  '(("Followup-To" . (("To") ("Cc") ("Followup-To")))
-    ("Newsgroups" . (("To") ("Cc") ("Newsgroups")))
-    ("From" . (("To") ("Cc") nil)))
+(defcustom wl-draft-reply-without-argument-list
+  '(("Followup-To" . (("Mail-Followup-To" "Mail-Reply-To" "Reply-To") nil ("Followup-To")))
+    ("Mail-Followup-To" . (("Mail-Followup-To") nil nil))
+    ("Newsgroups" . (("Mail-Reply-To" "Reply-To" "To") ("Cc") ("Newsgroups")))
+    ("Mail-Reply-To" . (("Mail-Reply-To" "Reply-To") ("To" "Cc") nil))
+    ("Reply-To" . (("Reply-To") ("To" "Cc") nil))
+    (wl-draft-self-reply-p . (("To") ("Cc") nil))
+    ("From" . (("From") ("To" "Cc") nil)))
   "Alist of cons cell of
-('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
+\('condition' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
+'condition' is a header name string (non-nil if the header exists in original
+message), a function (evaluated in original message buffer) or a list of those
+\(means 'AND' condition).
 'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'followup-to-me'."
+If car of each cons cell returns non-nil value,
+cdr of each cons cell is used for preparing headers of draft message."
   :type '(repeat (cons (choice (string :tag "Field Name")
-                              (repeat (string :tag "Field Name")))
+                              (symbol :tag "Function")
+                              (const :tag "Replying to self" wl-draft-self-reply-p)
+                              (repeat :tag "AND"
+                                      (choice (string :tag "Field Name")
+                                              (symbol :tag "Function")
+                                              (const :tag "Replying to self" wl-draft-self-reply-p))))
                       (list (repeat :tag "Fields For To" string)
                             (repeat :tag "Fields For Cc" string)
                             (repeat :tag "Fields For Newsgroups" string))))
   :group 'wl-draft)
 
 (defcustom wl-draft-always-delete-myself nil
-  "*Always delete myself from reciepient if non-nil."
+  "*Always delete myself from recipient if non-nil."
   :type 'boolean
   :group 'wl-draft)
 
@@ -916,52 +1057,119 @@ Default is for 'followup-to-me'."
   :type 'boolean
   :group 'wl-folder)
 
-(defcustom wl-summary-unread-mark "!"
-  "Mark for unread message."
+(defcustom wl-summary-persistent-mark-priority-list '(killed
+                                                     flag
+                                                     new
+                                                     answered
+                                                     forwarded
+                                                     unread)
+  "List of preserved flag symbols to define the priority to map \
+to the persistent mark.
+Special symbol `flag' means the user defined flag."
+  :type '(repeat (symbol :tag "preserved flag"))
+  :group 'wl-summary)
+
+(defcustom wl-summary-flag-alist
+  '((important "orange"))
+  "An alist to define the global flags for the summary mode.
+Each element is a form like:
+\(SYMBOL-OF-FLAG COLOR [MARK]\)
+Example:
+\((important \"orange\"\)
+ \(todo \"red\" \"T\"\)
+ \(business \"green\" \"B\"\)
+ \(private \"blue\"\)\)"
+  :type '(repeat (list (symbol :tag "flag")
+                      (string :tag "color")
+                      (choice (string :tag "mark")
+                              (const :tag "Default mark" nil))))
+  :group 'wl-summary)
+
+(defcustom wl-summary-killed-mark "X"
+  "Mark for killed message."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
-(defcustom wl-summary-important-mark "$"
-  "Mark for important message."
+
+(defcustom wl-summary-uncached-mark "!"
+  "Mark for uncached message with no flag."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
-(defcustom wl-summary-new-mark "N"
-  "Mark for new message."
+
+(defcustom wl-summary-new-uncached-mark "N"
+  "Mark for new and uncached message."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
+
+(defcustom wl-summary-new-cached-mark "n"
+  "Mark for new but already cached message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+
 (defcustom wl-summary-unread-uncached-mark "U"
   "Mark for unread and uncached message."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
-(defcustom wl-summary-unread-cached-mark "!"
+
+(defcustom wl-summary-unread-cached-mark "u"
   "Mark for unread but already cached message."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
-(defcustom wl-summary-read-uncached-mark "u"
-  "Mark for read but uncached message."
+
+(defcustom wl-summary-answered-cached-mark "a"
+  "Mark for answered and cached message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+
+(defcustom wl-summary-answered-uncached-mark "A"
+  "Mark for answered but uncached message."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
+
+(defcustom wl-summary-flag-mark "$"
+  "Mark for the messages which have tags."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+
 (defcustom wl-summary-score-over-mark "+"
   "Score mark used for messages with high scores."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
+
 (defcustom wl-summary-score-below-mark "-"
   "Score mark used for messages with low scores."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
 
 (defcustom wl-summary-no-mime-folder-list nil
-  "*All folders that match this list don't analysis mime."
+  "*All folders that match this list don't analyze mime."
   :type '(repeat string)
   :group 'wl-summary)
 
+(defcustom wl-summary-display-mime-mode-list '(mime as-is)
+  "*Display mime mode list toggled by `wl-summary-toggle-mime'.
+Candidates are following:
+`mime'        ... header and body are decoded
+`header-only' ... only header is decoded
+`as-is'       ... header and body are not decoded"
+  :type '(repeat (choice (const :tag "MIME"       mime)
+                        (const :tag "HEADER-ONLY" header-only)
+                        (const :tag "AS-IS"       as-is)))
+  :group 'wl-summary)
+
 (defcustom wl-summary-fix-timezone nil
   "*Time zone of the date string in summary mode.
 If nil, it is adjust to the default time zone information
-\(system's default time zone or environment variable TZ\)."
+\(system's default time zone or environment variable TZ)."
   :type '(choice (const :tag "Default time zone" nil)
                 string)
   :group 'wl-summary)
 
+(defcustom wl-summary-message-ring-max 16
+  "*Maximum size of message ring on summary buffer.
+Start discarding off end if gets this big."
+  :type 'integer
+  :group 'wl-summary)
+
 (defcustom wl-summary-default-score 0
   "*Default message score level.
 All scores generated by the score files will be added to this score.
@@ -999,7 +1207,7 @@ This variable is local to the summary buffers."
   :group 'wl-score)
 
 (defcustom wl-summary-score-marks
-  (list wl-summary-new-mark)
+  (list wl-summary-new-uncached-mark wl-summary-new-cached-mark)
   "Persistent marks to scoring."
   :type '(repeat (string :tag "Mark"))
   :group 'wl-score)
@@ -1017,7 +1225,7 @@ In sync-all or rescan."
 
 (defcustom wl-score-files-directory (concat elmo-msgdb-directory elmo-path-sep)
   "*Name of the directory where score files will be stored.
-(default \"~/.elmo\")."
+\(default \"~/.elmo\")."
   :type 'directory
   :group 'wl)
 
@@ -1124,7 +1332,8 @@ This can either be a regular expression or list of regular expressions."
 (defcustom wl-draft-mime-bcc-body nil
   "Body string for MIME-encapsulated Bcc.
 If nil, a string `This is a blind carbon copy.' is used."
-  :type '(string :tag "Body")
+  :type '(choice (const :tag "default" nil)
+                (string :tag "Body"))
   :group 'wl-draft)
 
 (defcustom wl-draft-disable-bcc-for-mime-bcc t
@@ -1179,7 +1388,10 @@ See also variable `wl-draft-parent-folder'."
   :group 'wl-draft)
 
 (defcustom wl-template-alist nil
-  "Alist of template."
+  "Alist of template.
+First element of each list is a string specifies the name of the template.
+Remaining elements indicate actions. The format of actions is same as that
+of `wl-draft-config-alist'."
   :type '(repeat (list (string :tag "Name")
                       (repeat
                        :inline t
@@ -1280,6 +1492,9 @@ You can also set it to a list of setting.
                   (const "Newsgroups")
                   (const "Subject")
                   (string :tag "Header Name")))
+                (const :tag "Top of body" body)
+                (const :tag "Bottom of body" bottom)
+                (const :tag "Top of header" top)
                 (const "To")
                 (const "Newsgroups")
                 (const "Subject")
@@ -1305,7 +1520,8 @@ You can also set it to a list of setting.
 
 (defcustom wl-draft-sendlog-max-size 20000
   "*Max file size of sendlog."
-  :type 'integer
+  :type '(choice (const :tag "Unlimited" nil)
+                integer)
   :group 'wl-draft)
 
 (defcustom wl-summary-default-number-column 5
@@ -1349,6 +1565,11 @@ Available if only `wl-summary-lazy-highlight' is nil."
   :group 'wl-summary
   :group 'wl-highlight)
 
+(defcustom wl-summary-lazy-update-mark (boundp 'window-scroll-functions)
+  "Non-nil forces lazy update mark using `window-scroll-functions'."
+  :type 'boolean
+  :group 'wl-summary)
+
 (defcustom wl-summary-cache-use t
   "Non-nil forces wl-summary to use cache file."
   :type 'boolean
@@ -1429,7 +1650,7 @@ Allowed situations are:
   :group 'wl-summary
   :group 'wl-pref)
 
-(defcustom wl-message-id-use-wl-from nil
+(defcustom wl-message-id-use-wl-from t
   "*Use `wl-from' for domain part of Message-ID if non-nil."
   :type 'boolean
   :group 'wl-pref)
@@ -1458,24 +1679,56 @@ which appear just before @."
   :type 'boolean
   :group 'wl-pref)
 
+(defcustom wl-message-auto-reassemble-message/partial nil
+  "*Reassemble message/partial messages automatically on show when non-nil."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-message-use-header-narrowing t
+  "Use header narrowing when non-nil."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-fields '("to" "cc")
+  "A list of field name to enable header narrowing."
+  :type '(repeat string)
+  :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-lines 4
+  "Line number to enable the header narrowing."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-string "..."
+  "A string used for header narrowing truncation."
+  :type 'string
+  :group 'wl-pref)
+
 (defvar wl-message-mode-line-format-spec-alist
   '((?f (if (memq 'modeline wl-use-folder-petname)
            (wl-folder-get-petname wl-message-buffer-cur-folder)
          wl-message-buffer-cur-folder))
+    (?m (upcase (symbol-name
+                (wl-message-display-type-property
+                 wl-message-buffer-cur-display-type
+                 :mime))))
+    (?F wl-message-buffer-flag-indicator)
     (?n wl-message-buffer-cur-number))
   "An alist of format specifications for message buffer's mode-lines.
 Each element is a list of following:
-\(SPEC STRING-EXP\)
+\(SPEC STRING-EXP)
 SPEC is a character for format specification.
 STRING-EXP is an expression to get string to insert.")
 
-(defcustom wl-message-mode-line-format "Wanderlust: << %f / %n >>"
+(defcustom wl-message-mode-line-format "Wanderlust: << %f / %n %F>> [%m]"
   "*A format string for message buffer's mode-line of Wanderlust.
 It may include any of the following format specifications
 which are replaced by the given information:
 
 %f The folder name.
-%n The number of the message."
+%n The number of the message.
+%m The MIME analysis status.
+%F The global flag indicator."
   :group 'wl-pref
   :type 'string)
 
@@ -1510,25 +1763,27 @@ which are replaced by the given information:
 
 (defcustom wl-message-ignored-field-list nil
   "All fields that match this list will be hidden in message buffer.
-Each elements are regexp of field-name."
+Each elements are regexp of field-name.
+You can specify exceptions by `wl-message-visible-field-list'."
   :type '(repeat (string :tag "Field Regexp"))
   :group 'wl-pref
   :group 'wl-setting)
 
 (defcustom wl-message-visible-field-list nil
   "All fields that match this list will be displayed in message buffer.
-Each elements are regexp of field-name."
+Each elements are regexp of field-name.
+This variable overwhelm `wl-message-ignored-field-list' settings."
   :type '(repeat (string :tag "Field Regexp"))
   :group 'wl-pref
   :group 'wl-setting)
 
 (defcustom wl-message-header-button-alist
-  (` (("^\\(References\\|Message-Id\\|In-Reply-To\\):"
-       "<[^>]+>"
-       0 wl-message-button-refer-article  0)
-      ("^[^:]+:"
-       "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)"
-       1 wl-message-button-refer-article 3)))
+  '(("^\\(References\\|Message-Id\\|In-Reply-To\\):"
+     "<[^>\n ]+>"
+     0 wl-message-button-refer-article  0)
+    ("^[^:]+:"
+     "\\(<\\(url: \\)?news:\\([^>\n ]*\\)>\\)"
+     1 wl-message-button-refer-article 3))
   "Alist of headers and regexps to match buttons in message headers."
   :type '(repeat
          (list (regexp :tag "Header")
@@ -1542,7 +1797,7 @@ Each elements are regexp of field-name."
 
 (defcustom wl-message-body-button-alist
   '(("<mailto:[^>]+>" 0 'ignore 0 1024)
-    ("<[^>]+@[^>]+>" 0 wl-message-button-refer-article 0 1024))
+    ("<[^>\n ]+@[^>\n ]+>" 0 wl-message-button-refer-article 0 1024))
   "Alist of regexps to match buttons in message body."
   :type '(repeat
          (list regexp
@@ -1582,14 +1837,18 @@ Each elements are regexp of field-name."
   :group 'wl-pref)
 
 (defcustom wl-reply-subject-prefix "Re: "
-  "*Prefix of the subject of the replied message."
-  :type 'string
+  "*Prefix of the subject of the replied message.
+The value is string or string valued function to be evalueted in the target
+message buffer."
+  :type '(choice string function)
   :group 'wl-draft
   :group 'wl-pref)
 
 (defcustom wl-forward-subject-prefix "Forward: "
-  "*Prefix of the subject of the forwarded message."
-  :type 'string
+  "*Prefix of the subject of the forwarded message.
+The value is string or string valued function to be evalueted in the target
+message buffer."
+  :type '(choice string function)
   :group 'wl-draft
   :group 'wl-pref)
 
@@ -1599,12 +1858,18 @@ Each elements are regexp of field-name."
   :group 'wl-pref
   :group 'wl-draft)
 
-(defcustom wl-subject-prefix-regexp "^[ \t]*\\([Rr][Ee][:>][ \t]*\\)*[ \t]*"
+(defcustom wl-subject-re-prefix-regexp "^[ \t]*\\([Rr][Ee][:>][ \t]*\\)*[ \t]*"
   "*Regexp matching \"Re: \" in the subject line."
   :type 'regexp
   :group 'wl-draft
   :group 'wl-pref)
 
+(defcustom wl-subject-forward-prefix-regexp "^[ \t]*\\(\\([Ff][Oo][Rr][Ww][Aa][Rr][Dd]\\|[Ff][Ww][Dd]\\|[Ff][Ww]\\)[:>][ \t]*\\)*[ \t]*"
+  "*Regexp matching \"Forward: \", \"Fwd: \", or \"Fw: \" in the subject line."
+  :type 'regexp
+  :group 'wl-draft
+  :group 'wl-pref)
+
 (defcustom wl-folder-many-unsync-threshold 70
   "*Folders which contains messages more than this number are highlighted
 with wl-highlight-folder-many-face."
@@ -1613,7 +1878,7 @@ with wl-highlight-folder-many-face."
   :group 'wl-pref)
 
 (defcustom wl-fcc nil
-  "*Folder Carbon Copy."
+  "*Folder Carbon Copy target initially added at creating draft buffer."
   :type '(choice (const :tag "disable" nil)
                 string function)
   :group 'wl-draft
@@ -1626,7 +1891,7 @@ with wl-highlight-folder-many-face."
   :group 'wl-pref)
 
 (defcustom wl-bcc nil
-  "*Blind Carbon Copy."
+  "*Blind Carbon Copy target initially added at creating draft buffer."
   :type '(choice (const :tag "disable" nil)
                 string)
   :group 'wl-draft
@@ -1674,6 +1939,12 @@ with wl-highlight-folder-many-face."
   :group 'wl-summary
   :group 'wl-pref)
 
+(defcustom wl-summary-print-argument-within-window nil
+  "*If non-nil, always print argument right side of window."
+  :type 'boolean
+  :group 'wl-summary
+  :group 'wl-pref)
+
 (defcustom wl-summary-pick-field-default "Body"
   "*Default field for pick."
   :type '(radio (const "From")
@@ -1688,7 +1959,7 @@ with wl-highlight-folder-many-face."
                (string :tag "Other"))
   :group 'wl-summary)
 
-(defcustom wl-mime-charset 'x-ctext
+(defcustom wl-mime-charset (if wl-on-mule 'x-ctext 'iso-8859-1)
   "*MIME Charset for summary and message."
   :type 'symbol
   :group 'wl-summary
@@ -1744,13 +2015,61 @@ This wrapper is generated by the mail system when rejecting a letter."
   :type 'regexp
   :group 'wl-draft)
 
+(defcustom wl-auto-save-drafts-interval 1
+  "Idle interval in seconds to save draft buffers automatically.
+If you don't want to use this feature, set this to nil."
+  :type '(choice (const :tag "Don't use this feature" nil)
+                (number :tag "Secs"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes t
+  "Non-nil forces to preview the attributes in the `wl-draft-preview-message'.
+Attributes specified in the `wl-draft-preview-attributes-list' are displayed."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-list '((mail recipients
+                                                   envelope-from
+                                                   smtp-posting-server
+                                                   smtp-posting-port)
+                                             (news newsgroups
+                                                   nntp-posting-server
+                                                   nntp-posting-port))
+  "*Attribute symbols to display in the draft preview.
+Candidates are following:
+`recipients'
+`envelope-from'
+`smtp-posting-server'
+`smtp-posting-port'
+`newsgroups'
+`nntp-posting-server'
+`nntp-posting-port'
+Also variables which begin with `wl-' can be specified
+\(`wl-' have to be removed\)"
+  :type '(choice (repeat (cons (choice (const :tag "Mail" mail)
+                                      (const :tag "News" news))
+                              (repeat symbol)))
+                (repeat symbol))
+  :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-buffer-lines 5
+  "*Buffer height for the draft attribute preview."
+  :type 'integer
+  :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-buffer-name "*Preview Attributes*"
+  "*Buffer name for the draft attribute preview."
+  :type 'string
+  :group 'wl-draft)
+
 (defcustom wl-refile-default-from-folder "+from"
   "*Folder name to refile by `wl-refile-guess-by-from'."
   :type '(string :tag "Folder")
   :group 'wl-pref)
 
 (defcustom wl-summary-auto-refile-skip-marks
-  (list wl-summary-new-mark
+  (list wl-summary-new-uncached-mark
+       wl-summary-new-cached-mark
        wl-summary-unread-uncached-mark
        wl-summary-unread-cached-mark)
   "Persistent marks to skip auto-refiling."
@@ -1758,21 +2077,21 @@ This wrapper is generated by the mail system when rejecting a letter."
   :group 'wl-summary)
 
 (defcustom wl-summary-reserve-mark-list
-  (list "o" "O" "D")
+  (list "o" "O" "D" "d" "i")
   "If a message is already marked as temporal marks in this list,
 the message is not marked by any mark command."
   :type '(repeat (string :tag "Temp-Mark"))
   :group 'wl-summary)
 
 (defcustom wl-summary-skip-mark-list
-  (list "D")
+  (list "D" "d")
   "If a message is already marked as temporal marks in this list,
 the message is skipped at cursor move."
   :type '(repeat (string :tag "Temp-Mark"))
   :group 'wl-summary)
 
 (defcustom wl-summary-incorporate-marks
-  (list wl-summary-new-mark
+  (list wl-summary-new-uncached-mark
        wl-summary-unread-uncached-mark)
   "Persistent marks to prefetch at `wl-summary-incorporate'."
   :type '(repeat (string :tag "Mark"))
@@ -1781,8 +2100,7 @@ the message is skipped at cursor move."
 (defcustom wl-refile-rule-alist nil
   "Refile rule alist.
 e.x.
-'(
-  (\"From\"
+'((\"From\"
    (\"teranisi@isl.ntt.co.jp\" . \"+teranisi\"))
   (\"x-ml-name\"
    (\"^Wanderlust\"    . \"+wl\")
@@ -1840,28 +2158,33 @@ Each elements are regexp of folder name."
 (defcustom wl-show-plug-status-on-modeline t
   "If it is non-nil, show plugged status in modeline."
   :type 'boolean
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-plug-state-indicator-on  " [ON] "
   "String used to show plugged status ON."
   :type 'string
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-plug-state-indicator-off " [--] "
   "String used to show plugged status OFF."
   :type 'string
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-biff-check-folder-list nil
-  "All folders that match this list are automatically checked
-every intervals specified by wl-biff-check-interval."
-  :type '(repeat (regexp :tag "Folder Regexp"))
-  :group 'wl-highlight)
+  "All folders that include this list are automatically checked
+every intervals specified by `wl-biff-check-interval'."
+  :type '(repeat (string :tag "Folder"))
+  :group 'wl-setting)
 
 (defcustom wl-biff-check-interval 40
   "Number of seconds between updates of new mails in the mode line."
   :type 'integer
-  :group 'wl-highlight)
+  :group 'wl-setting)
+
+(defcustom wl-biff-use-idle-timer nil
+  "Non-nil to use idle timer instead of strict timer for wl-biff"
+  :type 'boolean
+  :group 'wl-setting)
 
 (defcustom wl-biff-state-indicator-on (if (and (featurep 'xemacs)
                                               (not (featurep 'mule)))
@@ -1874,7 +2197,7 @@ every intervals specified by wl-biff-check-interval."
                                           'iso-2022-jp)))
   "String used to show biff status ON."
   :type 'string
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-biff-state-indicator-off (if (and (featurep 'xemacs)
                                                (not (featurep 'mule)))
@@ -1883,7 +2206,7 @@ every intervals specified by wl-biff-check-interval."
                                         "[\e$B!>\e(B]")
   "String used to show biff status OFF."
   :type 'string
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-mode-line-display-priority-list '(biff plug title)
   "Displaying order of items to be shown in modeline.  The first item will
@@ -1902,7 +2225,7 @@ even if the value of this option is set to nil.  Here are some samples:
   :type '(repeat (radio (const :format "%v " biff)
                        (const :format "%v " plug)
                        (sexp :tag "Other" :value title)))
-  :group 'wl-highlight)
+  :group 'wl-setting)
 
 (defcustom wl-interactive-send t
   "*If non-nil, require your confirmation when sending draft message."
@@ -1917,8 +2240,8 @@ even if the value of this option is set to nil.  Here are some samples:
 
 (defcustom wl-summary-move-order 'unread
   "*The order of priority when move in summary mode.
-If this variable is `unread', precede \"U\", \"!\", \"N\" mark.
-If this variable is `new', precede \"N\" mark."
+If this variable is `unread', precede \"U\", \"u\", \"N\", \"n\" mark.
+If this variable is `new', precede \"N\", \"n\" mark."
   :type '(radio (const new)
                (const unread))
   :group 'wl-summary
@@ -1959,6 +2282,12 @@ See also variable `wl-summary-next-no-unread-command'."
   :group 'wl-pref
   :group 'wl-setting)
 
+(defcustom wl-message-popup-buffers '(mime-echo-buffer-name epa-info-buffer)
+  "*List of buffer or name which is popped up with message buffer."
+  :type '(repeat (choice (symbol :tag "Variable")
+                        (string :tag "Buffer name")))
+  :group 'wl-setting)
+
 (defcustom wl-message-buffer-name " *WL:Message*"
   "*Buffer name for message buffers."
   :group 'wl-pref
@@ -1976,7 +2305,7 @@ and reserved buffer cache."
                      (const nntp)
                      (const pop3)
                      (const shimbun)
-                     (const nmz)
+                     (const search)
                      (const archive)
                      (const mark)
                      (const cache)))
@@ -2013,6 +2342,14 @@ Each elements are regexp of folder name."
                (repeat (regexp :tag "Folder Regexp")))
   :group 'wl-pref)
 
+(defcustom wl-summary-force-prefetch-folder-list nil
+    "All folders that match this list are prefetched.
+Each elements are regexp of folder name."
+    :type '(radio (const :tag "none" nil)
+                 (const :tag "all" t)
+                 (repeat (regexp :tag "Folder Regexp")))
+    :group 'wl-pref)
+
 (defcustom wl-no-save-folder-list '("^/.*$" "^\\[.*$")
   "All folders that match this list won't save its msgdb.
 Each elements are regexp of folder name."
@@ -2062,7 +2399,7 @@ e.x.
     ("^-han\\." . (2 "+" "+" "|" "-" " ")))
   "Thread indent set alist.
 If no match, following indent set is used.
-(wl-thread-indent-level
+\(wl-thread-indent-level
  wl-thread-have-younger-brother-str
  wl-thread-youngest-child-str
  wl-thread-vertical-str
@@ -2080,16 +2417,13 @@ e.x.
   :group 'wl-pref)
 
 (defcustom wl-folder-sync-range-alist
-  (list (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^"
-                     (regexp-quote wl-queue-folder) "$")
-             "all"))
+  (list (cons 'wl-require-update-all-folder-p "all"))
   "*Default sync range alist.  If no matches, `wl-default-sync-range' is used."
-  :type '(repeat (cons (regexp :tag "Folder Regexp")
+  :type '(repeat (cons (choice (regexp :tag "Folder Regexp")
+                              (symbol :tag "A function"))
                       (choice (const "update")
                               (const "all")
                               (const "rescan")
-                              (const "first:")
-                              (const "last:")
                               (const "no-sync")
                               (const :tag "none" nil))))
   :group 'wl-pref)
@@ -2099,8 +2433,6 @@ e.x.
   :type '(choice (const "update")
                 (const "all")
                 (const "rescan")
-                (const "first:")
-                (const "last:")
                 (const "no-sync")
                 (const :tag "none" nil))
   :group 'wl-pref)
@@ -2125,7 +2457,7 @@ If TYPE is nil, do nothing for duplicated messages."
   :group 'wl-folder)
 
 (defcustom wl-folder-move-cur-folder nil
-  "*Non-nil, move to current folder on folder-mode when goto folder."
+  "*Non-nil, move cursor to current folder on folder buffer when goto folder."
   :type 'boolean
   :group 'wl-folder)
 
@@ -2155,8 +2487,13 @@ or 'skip-no-unread."
   :group 'wl-summary)
 
 (defcustom wl-summary-search-via-nntp 'confirm
-  "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'.  If the value is 'confirm, confirm before search."
-  :type 'boolean
+  "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'.
+If the value is 'confirm, confirm before search, 'force to search via nntp
+regardless of current folder type."
+  :type '(choice (const :tag "confirm" confirm)
+                (const :tag "always" force)
+                (const :tag "in nntp folder" t)
+                (const :tag "never" nil))
   :group 'wl-summary)
 
 (defcustom wl-summary-keep-cursor-command
@@ -2168,11 +2505,23 @@ already existing summary."
 
 (defcustom wl-summary-showto-folder-regexp nil
   "Regexp specifying the folder that shows the To (or Newsgroups) field as
-Sender information in summary mode."
+Sender information in summary mode. It is effective when the value of
+`wl-summary-from-function' is `wl-summary-default-from'"
   :type '(choice (const :tag "none" nil)
                 regexp)
   :group 'wl-summary)
 
+(defcustom wl-summary-save-file-suffix ".eml"
+  "Suffix for the saved file name."
+  :type 'string
+  :group 'wl-summary)
+
+(defcustom wl-summary-resend-use-cache nil
+  "*Non-nil to enable offline resending by using file cache.
+Note that strict message identity is not guaranteed when cache is used."
+  :type 'boolean
+  :group 'wl-summary)
+
 (defcustom wl-folder-removed-mark "#<removed>"
   "Mark for removed folder."
   :type 'string
@@ -2183,8 +2532,9 @@ Sender information in summary mode."
   :type 'string
   :group 'wl-folder)
 
-(defcustom wl-delete-folder-alist '(("^-" . remove))
-  "*Alist of folder and delete policy.
+(defcustom wl-dispose-folder-alist '(("^-" . remove)
+                                    ("^@" . remove))
+  "*Alist of folder and dispose policy.
 Each element is (folder-regexp . policy).
 
 The policy is one of the followings:
@@ -2206,19 +2556,10 @@ ex.
                               (string :tag "Folder"))))
   :group 'wl-folder)
 
-(defcustom wl-refile-policy-alist '(("^[-=']" . copy)
-                                   (".*" . move))
-  "*List of refile policy.  Each element is (FOLDER-REGEXP . POLICY).
-POLICY is copy or move."
-  :type '(repeat (cons (regexp :tag "Folder Regexp")
-                      (choice (const copy)
-                              (const move))))
-  :group 'wl-summary
-  :group 'wl-pref)
-
-(defcustom wl-folder-hierarchy-access-folders '("^-$" "^-alt$")
+(defcustom wl-folder-hierarchy-access-folders '("^-[^.]*\\(:\\|@\\|$\\)"
+                                               "^@$" "^'$")
   "*Access group REGEXPs to make hierarchy structure."
-  :type '(repeat (string :tag "Folder"))
+  :type '(repeat (string :tag "Regexp"))
   :group 'wl-folder)
 
 (defcustom wl-folder-init-load-access-folders nil
@@ -2358,9 +2699,9 @@ ex.
   :group 'wl-expire)
 
 (defcustom wl-summary-expire-reserve-marks
-  (list wl-summary-important-mark
-       wl-summary-new-mark
-       wl-summary-unread-mark
+  (list wl-summary-flag-mark
+       wl-summary-new-uncached-mark
+       wl-summary-new-cached-mark
        wl-summary-unread-uncached-mark
        wl-summary-unread-cached-mark)
   "Permanent marks of reserved message when expire.
@@ -2541,7 +2882,16 @@ This variable can also be a regex."
 ;; highilght about mouse
 (defcustom wl-use-highlight-mouse-line (and window-system
                                            (>= emacs-major-version 19))
-  "*Highlight mouse line, if non nil."
+  "*Highlight mouse line, if non-nil."
+  :type 'boolean
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-summary-line-help-echo-alist
+  '((flag wl-highlight-flag-folder-help-echo)
+    (search elmo-message-file-name))
+  "*Alist to display help-echo in summary buffer.
+Each element is (folder-type handler(function)).
+Handler take two arguments elmo-folder and message number and return string."
   :type 'boolean
   :group 'wl-highlight)
 
@@ -2553,6 +2903,7 @@ This variable can also be a regex."
   "*Highlight folder with icon(XEmacs or Emacs 21)."
   :type 'boolean
   :group 'wl-highlight)
+
 (defcustom wl-highlight-folder-by-numbers t
   "Highlight folder lines by numbers.
 If it is a number, only numbers will be highlighted."
@@ -2595,6 +2946,41 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
   :type 'string
   :group 'wl-pref)
 
+(defcustom wl-use-pgp-module
+  (condition-case nil
+      (progn
+       (require 'epg-config)
+       (epg-check-configuration (epg-configuration))
+       'epg)
+    (error 'pgg))
+  "*Which PGG library to be used."
+  :type '(choice (const :tag "EasyPG Library" epg)
+                (const :tag "PGG Library" pgg)
+                (const :tag "Don't use PGP" nil))
+  :group 'wl-pref)
+
+(defcustom wl-display-progress-threshold
+  '((wl-folder-insert-entity . 100)
+    (elmo-retrieve-message . 3000)
+    (t . 20))
+  "*Displaying progress message if number of total are more than this value."
+  :type '(choice (const :tag "No display" nil)
+                (const :tag "No limitation" 0)
+                (integer :tag "For all")
+                (repeat :tag "Each label"
+                        (cons (choice (const :tag "Default" t)
+                                      (symbol :tag "Label"))
+                              (choice (const :tag "No display" nil)
+                                      (const :tag "No limitation" 0)
+                                      (integer :tag "Threshold")))))
+  :group 'wl-pref)
+
+(defcustom wl-display-progress-function #'wl-simple-display-progress
+  "*A function to display progress message"
+  :type '(choice (const :tag "No display" nil)
+                (function :tag "Function"))
+  :group 'wl-pref)
+
 ;;; Internal variables
 (defvar wl-init nil)
 
@@ -2616,22 +3002,19 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (defvar wl-modeline-biff-state-off wl-biff-state-indicator-off)
 
 ;; Advanced thread view.
-(defvar wl-thread-indent-level 1
+(defvar wl-thread-indent-level (if wl-on-mule 1 2)
   "*Indent level for thread.")
-(defvar wl-thread-have-younger-brother-str "\e$B(2\e(B"
+(defvar wl-thread-have-younger-brother-str (if wl-on-mule "\e$B(2\e(B" "+")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-youngest-child-str       "\e$B(1\e(B"
+(defvar wl-thread-youngest-child-str       (if wl-on-mule "\e$B(1\e(B" "+")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-vertical-str             "\e$B(-\e(B"
+(defvar wl-thread-vertical-str             (if wl-on-mule "\e$B(-\e(B" "|")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-horizontal-str           "\e$B(,\e(B"
+(defvar wl-thread-horizontal-str           (if wl-on-mule "\e$B(,\e(B" "-")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-space-str                "\e$B!!\e(B"
+(defvar wl-thread-space-str                (if wl-on-mule "\e$B!!\e(B" " ")
   "*A string for thread branch line.  It should contain one character.")
 
-(defvar wl-highlight-thread-indent-string-regexp "[^[<]*"
-  "* A regexp string for thread indent...for highlight.")
-
 ;; folder icons. filename relative to wl-icon-directory
 (defvar wl-opened-group-folder-icon "opened.xpm"
   "*Icon file for opened group folder.")
@@ -2657,12 +3040,16 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
   "*Icon file for archive folder.")
 (defvar wl-pipe-folder-icon "pipe.xpm"
   "*Icon file for pipe folder.")
-(defvar wl-nmz-folder-icon "nmz.xpm"
-  "*Icon file for namazu folder.")
+(defvar wl-search-folder-icon "nmz.xpm"
+  "*Icon file for search folder.")
 (defvar wl-shimbun-folder-icon "shimbun.xpm"
   "*Icon file for shimbun folder.")
+(defvar wl-file-folder-icon "file.xpm"
+  "*Icon file for file folder.")
 (defvar wl-maildir-folder-icon "maildir.xpm"
   "*Icon file for maildir folder.")
+(defvar wl-access-folder-icon "access.xpm"
+  "*Icon file for access folder.")
 (defvar wl-empty-trash-folder-icon "trash-e.xpm"
   "*Icon file for emptied trash folder.")
 (defvar wl-trash-folder-icon "trash.xpm"
@@ -2696,6 +3083,24 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 
 ;;;; Obsolete variables.
 
+;; 2005-01-23
+(elmo-define-obsolete-variable 'wl-nmz-folder-icon
+                              'wl-search-folder-icon)
+
+;; 2003-11-05
+(elmo-define-obsolete-variable 'wl-summary-new-mark
+                              'wl-summary-new-uncached-mark)
+
+;; 2003-07-15 delete -> dispose
+(elmo-define-obsolete-variable 'wl-delete-folder-alist
+                              'wl-dispose-folder-alist)
+
+;; 2002-12-25
+(elmo-define-obsolete-variable 'wl-draft-reply-myself-with-argument-list
+                              'wl-draft-reply-with-argument-list)
+(elmo-define-obsolete-variable 'wl-draft-reply-myself-without-argument-list
+                              'wl-draft-reply-without-argument-list)
+
 ;; 2001-12-11: *-dir -> *-directory
 (elmo-define-obsolete-variable 'wl-icon-dir
                               'wl-icon-directory)