2004-02-10 Yuuichi Teranishi <teranisi@gohome.org>
[elisp/wanderlust.git] / wl / wl-vars.el
index 1975ef5..6e8ecc6 100644 (file)
@@ -33,6 +33,7 @@
 
 (require 'elmo-vars)
 (require 'elmo-util)
+(require 'elmo-msgdb)
 (require 'custom)
 
 ;;; Customizable Variables
 
 (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 (and (user-full-name)
                                     (concat (elmo-address-quote-specials
-                                             user-full-name)
+                                             (user-full-name))
                                             " "))
                                "<" user-mail-address ">"))
   "*From string used in draft."
@@ -174,6 +172,140 @@ If you don't have multiple e-mail addresses, you don't have to set this."
                 string)
   :group 'wl)
 
+(defcustom wl-summary-default-view 'thread
+  "Default status of summary view, thread or sequential view."
+  :type '(choice (const :tag "Thread" thread)
+                (const :tag "Sequential" sequence))
+  :group 'wl-summary)
+
+(defcustom wl-summary-default-view-alist nil
+  "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)
+                              (const :tag "Sequential" sequence))))
+  :group 'wl-summary)
+
+(defvar wl-summary-mode-line-format-spec-alist
+  '((?f (if (memq 'modeline wl-use-folder-petname)
+           (wl-folder-get-petname (elmo-folder-name-internal
+                                   wl-summary-buffer-elmo-folder))
+         (elmo-folder-name-internal wl-summary-buffer-elmo-folder)))
+    (?t (if (eq wl-summary-buffer-view 'thread) "T" "S"))
+    (?n wl-summary-buffer-new-count)
+    (?u (+ wl-summary-buffer-new-count
+          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 is a character for format specification.
+STRING-EXP is an expression to get string to insert.")
+
+(defcustom wl-summary-mode-line-format "Wanderlust: %f {%t}(%n/%u/%a)"
+  "*A format string for summary mode-line of Wanderlust.
+It may include any of the following format specifications
+which are replaced by the given information:
+
+%f The folder name.
+%t The thread status of the summary ('T' for thread, 'S' for sequential).
+%n The number of new messages.
+%u The number of unread messages (includes new messages).
+%a The number of all messages."
+  :group 'wl-summary
+  :type 'string)
+
+(defvar wl-summary-line-format-spec-alist
+  '((?Y (wl-summary-line-year))
+    (?M (wl-summary-line-month))
+    (?D (wl-summary-line-day))
+    (?W (wl-summary-line-day-of-week))
+    (?h (wl-summary-line-hour))
+    (?m (wl-summary-line-minute))
+    (?\[ (if wl-thr-linked "<" "["))
+    (?\] (if wl-thr-linked ">" "]"))
+    (?t (or wl-thr-indent-string ""))
+    (?s (wl-summary-line-subject))
+    (?S (wl-summary-line-size))
+    (?C (if wl-thr-children-number
+           (concat "[+" (number-to-string wl-thr-children-number) "] ")
+         (if wl-parent-message-entity
+             (if wl-thr-linked ">>" ">")
+           "")))
+    (?~ (if (zerop (length wl-line-string)) "" " "))
+    (?c (if wl-thr-children-number
+           (concat "+" (number-to-string wl-thr-children-number) ":")
+         ""))
+    (?f (wl-summary-line-from))
+    (?# (wl-summary-line-list-info))
+    (?l (wl-summary-line-list-count))
+    (?T (or wl-temp-mark " "))
+    (?P (or wl-persistent-mark " "))
+    (?n (wl-summary-line-number))
+    (?@ (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 is a character for format specification.
+STRING-EXP is an expression to get string to insert.")
+
+(defcustom wl-summary-line-format "%n%T%P%M/%D(%W)%h:%m %t%[%17(%c %f%) %] %s"
+  "*A default format string for summary line of Wanderlust.
+It may include any of the following format specifications
+which are replaced by the given information:
+
+%n The number of the message.
+   The width is decided using `wl-summary-default-number-column' and
+   `wl-summary-number-column-alist'.
+%T The temporal mark (*, D, o, O).
+%P The persistent mark (status of the message).
+%Y The year of the date field of the message (zero padded).
+%M The month of the date field of the message (zero padded).
+%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).
+%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 '<'.
+%] A close bracket.  If the message thread is linked,
+   it is replaced with '>'.
+%c The children number of the closed message thread.
+   Children number is printed like '+??:'.
+%C The children number of the closed message thread.
+   Children number is printed like '[+??] '.
+   If the message is opened, '>' or '>>' (linked) is displayed.
+%f The from: field string of the message.
+%s The subject: field string of the message.
+%S The size of the message (if available).
+%~ If the previous spec is not zero-length, replaced with ' '.
+
+If the format string contains the specifiers %( and %), the text between
+them will have the specified number of columns."
+  :group 'wl-summary
+  :type 'string)
+
+(defcustom wl-folder-summary-line-format-alist nil
+  "An alist of folder name and a summary line format.
+If no match, `wl-summary-line-format' is used.
+e.x.
+      '((\"^%\" . \"%n%T%P%M/%D(%W)%h:%m %t%[%14(%c %f%) %](%S) %s\")
+       (\"^@2ch\" . \"%n%T%P%M%/%D/%h:%m %t[%9(%c %f%) ]%s\")))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (string :tag "line format")))
+  :group 'wl-summary)
+
+(defcustom wl-summary-check-line-format t
+  "*Check summary line format change if non-nil.
+When summary line format is changed, current summary cache is discarded.
+It is highly recommended to set this value to t."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-summary-line-format-file ".wl-summary-line-format"
+  "*Cache file for summary line format."
+  :type 'file
+  :group 'wl-summary)
+
 (defcustom wl-summary-from-function 'wl-summary-default-from
   "*A function for displaying sender (From: field) information."
   :type 'function
@@ -191,8 +323,95 @@ If you don't have multiple e-mail addresses, you don't have to set this."
 
 (defcustom wl-summary-search-parent-by-subject-regexp "^[ \t]*\\(\\[[^:]+[,: ][0-9]+\\]\\)?[ \t]*re[\\^[:> ]"
   "*If message does not have in-reply-to field nor references field and
- subject matches this regexp, search parent message by subject matching."
-  :type 'string
+subject matches this regexp, search parent message by subject matching.
+If nil, never search search parent by subject."
+  :type '(choice string
+                (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 (string :tag "Temporary mark")
+                (symbol :tag "Set mark function")
+                (symbol :tag "Unset mark function")
+                (symbol :tag "Exec function")
+                (symbol :tag "Face symbol")
+                (string :tag "Document string"))
   :group 'wl-summary)
 
 ;; Important folders
@@ -215,7 +434,7 @@ If you don't have multiple e-mail addresses, you don't have to set this."
   :group 'wl)
 
 (defcustom wl-default-spec "%"
-  "*Default spec"
+  "*Default prefix for folder name initially added in minibuffer"
   :type 'string
   :group 'wl)
 
@@ -245,6 +464,11 @@ If file exists and `wl-auto-insert-x-face' is non-nil."
   :type 'file
   :group 'wl-draft)
 
+(defcustom wl-draft-write-file-function 'wl-draft-save
+  "Save function for draft message."
+  :type 'function
+  :group 'wl-draft)
+
 (defcustom wl-subscribed-mailing-list nil
   "*Subscribed mailing list.
 You had better set this variable if you set 'wl-insert-mail-followup-to' as t."
@@ -257,6 +481,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."
@@ -265,6 +506,12 @@ If nil, `wl-from' is used."
   :group 'wl
   :group 'wl-setting)
 
+(defcustom wl-draft-additional-header-alist nil
+  "*Additional headers in the draft."
+  :type '(repeat (cons (symbol :tag "Field Name")
+                      (choice (string :tag "String")
+                              (function :tag "Function")))))
+
 (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."
@@ -277,6 +524,17 @@ references field of the current draft."
   :type 'boolean
   :group 'wl)
 
+(defcustom wl-draft-cite-function 'wl-default-draft-cite
+  "*A function for citation."
+  :type 'function
+  :group 'wl-draft)
+
+(defcustom wl-default-draft-cite-decorate-author t
+  "*If non-nil, the author of cited message is arranged by
+`wl-summary-from-func-internal' in `wl-default-draft-cite'."
+  :type 'boolean
+  :group 'wl-draft)
+
 (defcustom wl-smtp-connection-type nil
   "*SMTP connection type.
 If nil, default smtp connection type is used."
@@ -322,7 +580,7 @@ If nil, don't authenticate."
   "*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
@@ -354,8 +612,8 @@ If nil, `elmo-pop3-default-stream-type' is used."
   "*Default Authentication type for POP-before-SMTP.
 If nil, `elmo-pop3-default-authenticate-type' is used."
   :type '(choice (const :tag "none" nil)
-                (const :tag "APOP" "apop")
-                (const :tag "POP3" "user"))
+                (const :tag "APOP" 'apop)
+                (const :tag "POP3" 'user))
   :group 'wl
   :group 'wl-setting)
 
@@ -386,6 +644,33 @@ If nil, `elmo-nntp-default-port' is used."
 If nil, `elmo-nntp-default-stream-type' is used."
   :type 'boolean
   :group 'wl)
+(defcustom wl-nntp-posting-function 'elmo-nntp-post
+  "A function to post news.
+Prepared candidate is 'elmo-nntp-post."
+  :type '(radio (function-item elmo-nntp-post)
+               (function :tag "Other"))
+  :group 'wl-draft)
+(defcustom wl-nntp-posting-config-alist nil
+  "*Alist of configuration on nntp posting.
+ex.
+'((\",?local.test\" . \"news.media.kyoto-u.ac.jp\")
+  (\",?ku\\.\" .
+   ((server . \"news.media.kyoto-u.ac.jp\")
+    (user . \"newsmaster\")
+    (port . 119)
+    (function . elmo-nntp-post))
+  (\".*\" . \"newsfeed.kuee.kyoto-u.ac.jp\")))"
+  :type '(repeat (cons (sexp :tag "Match")
+                      (choice (string :tag "Server")
+                              (repeat :inlie t
+                                      (cons (choice (const server)
+                                                    (const user)
+                                                    (const port)
+                                                    (const stream-type)
+                                                    (const function))
+                                            (sexp :tag "Value"))))))
+  :group 'wl-draft
+  :group 'wl-setting)
 
 (defcustom wl-prefetch-confirm t
   "*Confirm prefetching if message size is larger than `wl-prefetch-threshold'."
@@ -402,11 +687,6 @@ when `wl-prefetch-confirm' is non-nil."
   :group 'wl-pref
   :group 'wl-setting)
 
-(defcustom wl-cache-prefetch-threshold 30000
-  "*Quit forward cache prefetching if message size is larger than this value."
-  :type 'integer
-  :group 'wl-pref)
-
 (defcustom wl-thread-insert-opened nil
   "*Non-nil forces to insert thread as opened in updating."
   :type 'boolean
@@ -465,8 +745,9 @@ reasons of system internal to accord facilities for the Emacs variants.")
   "A hook called when replied.")
 (defvar wl-mail-setup-hook nil
   "A hook called when Draft is prepared.")
-(defvar wl-draft-reedit-hook nil
-  "A hook called when Draft is re-edited.")
+(defvar wl-draft-reedit-hook '(wl-draft-remove-text-plain-tag)
+  "A hook called when Draft is re-edited.
+The cursor point is located at top of the body.")
 (defvar wl-draft-send-hook '(wl-draft-config-exec)
   "A hook called on the draft editing buffer before sending process starts.")
 (defvar wl-mail-send-pre-hook nil
@@ -563,30 +844,11 @@ Prepared candidates are 'wl-draft-send-mail-with-smtp,
   :group 'wl-draft)
 
 (defcustom wl-draft-reply-with-argument-list
-  '(("Reply-To" . (("Reply-To") nil nil))
-    ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
-    ("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))))
-  :group 'wl-draft)
-
-(defcustom wl-draft-reply-without-argument-list
-  '(("Followup-To" . (nil nil ("Followup-To")))
-    ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
-    ("Reply-To" . (("Reply-To") ("To" "Cc" "From") ("Newsgroups")))
-    ("From" . (("From") ("To" "Cc") ("Newsgroups"))))
+  '(("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' .  ('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,
@@ -599,35 +861,20 @@ Default is for 'reply-to-all'."
                             (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' .  ('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 'followup-to-me'."
+cdr of each cons cell is used for draft message."
   :type '(repeat (cons (choice (string :tag "Field Name")
                               (repeat (string :tag "Field Name")))
                       (list (repeat :tag "Fields For To" string)
@@ -636,7 +883,7 @@ Default is for 'followup-to-me'."
   :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)
 
@@ -687,9 +934,10 @@ Default is for 'followup-to-me'."
   :type 'file
   :group 'wl)
 
-(defcustom wl-ldap-server "localhost"
+(defcustom wl-ldap-server nil
   "*LDAP server."
-  :type '(string :tag "Server")
+  :type '(choice (const :tag "Default server(localhost)" nil)
+                (string :tag "Server"))
   :group 'wl
   :group 'wl-setting)
 
@@ -700,15 +948,10 @@ Default is for 'followup-to-me'."
   :group 'wl
   :group 'wl-setting)
 
-(defcustom wl-ldap-base "c=US"
+(defcustom wl-ldap-base nil
   "*LDAP base."
-  :type '(string :tag "Base")
-  :group 'wl
-  :group 'wl-setting)
-
-(defcustom wl-ldap-objectclass "person"
-  "*LDAP objectclass."
-  :type 'string
+  :type '(choice (const :tag "Default base" nil)
+                (string :tag "Base"))
   :group 'wl
   :group 'wl-setting)
 
@@ -728,41 +971,82 @@ Default is for 'followup-to-me'."
   :type 'boolean
   :group 'wl-folder)
 
-(defcustom wl-summary-unread-mark "!"
-  "Mark for unread message."
-  :type '(string :tag "Mark")
-  :group 'wl-summary-marks)
-(defcustom wl-summary-important-mark "$"
-  "Mark for important message."
+(defcustom wl-summary-persistent-mark-priority-list '(new
+                                                     flag
+                                                     answered
+                                                     unread)
+  "List of flags reflected with the priority to persistent marks and faces."
+  :type '(repeat (radio (const :format "%v " new)
+                       (const :format "%v " flag)
+                       (const :format "%v " answered)
+                       (const :format "%v " unread)))
+  :group 'wl-summary)
+
+(defcustom wl-summary-flag-alist
+  '((important "orange"))
+  "An alist to define the flags for the summary mode.
+Each element is a form like:
+\(SYMBOL-OF-FLAG COLOR\)
+Example:
+\((important \"orange\"\)
+ \(todo \"red\"\)
+ \(business \"green\"\)
+ \(private \"blue\"\)\)"
+  :type '(repeat (list (symbol :tag "flag")
+                      (string :tag "color")))
+  :group 'wl-summary)
+
+(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-mark "N"
-  "Mark for new message."
+
+(defcustom wl-summary-new-cached-mark "?"
+  "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 "!"
   "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."
   :type '(string :tag "Mark")
   :group 'wl-summary-marks)
+
+(defcustom wl-summary-answered-cached-mark "&"
+  "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 cached 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
-  (list (concat "^" (regexp-quote wl-draft-folder) "$"))
+(defcustom wl-summary-no-mime-folder-list nil
   "*All folders that match this list don't analysis mime."
   :type '(repeat string)
   :group 'wl-summary)
@@ -770,7 +1054,7 @@ Default is for 'followup-to-me'."
 (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)
@@ -812,7 +1096,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)
@@ -922,21 +1206,56 @@ This can either be a regular expression or list of regular expressions."
   :group 'wl-score)
 
 (defcustom wl-draft-fields
-  '("To:" "Cc:" "Bcc:" "FCC:" "Distribution:" "Organization:"
+  '("To:" "Cc:" "Bcc:" "Fcc:" "Distribution:" "Organization:"
     "Newsgroups:" "Followup-To:" "Mail-Followup-To:" "From:" "Reply-To:")
   "Fields used in draft mode."
   :type '(repeat (string :tag "Field"))
   :group 'wl-draft)
 
+;; MIME Bcc.
+(defcustom wl-draft-mime-bcc-field-name "Ecc"
+  "Field name for MIME-encapsulated Bcc."
+  :type '(string :tag "Field Name")
+  :group 'wl-draft)
+
+(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 '(choice (const :tag "default" nil)
+                (string :tag "Body"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-disable-bcc-for-mime-bcc t
+  "Disable Bcc while MIME-encapsulated Bcc."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-disable-fcc-for-mime-bcc t
+  "Disable Fcc while MIME-encapsulated Bcc."
+  :type 'boolean
+  :group 'wl-draft)
+
 (defcustom wl-draft-config-alist nil
-  "Alist of configuration field on draft.
+  "Alist of condition and actions for dynamical draft modification.
+First element of each list is some condition for the draft buffer (regular
+expression for header or elisp expression) and remaining elements indicate
+actions.
+If the first element is `reply' keyword, the next element be the condition
+for the message being replied, and remaining elements are actions.
+
+The configuration is applied when `wl-draft-config-exec' is called, or
+applied automatically before sending message.
+
 ex.
 '((\"^To: .*wl@lists.airs.net\"
-   (\"From\" . wl-from2)
-   (\"Organization\" . wl-organization2))
-  (\"^To: .*hogehoge@\"
-   (\"From\" . \"Anonymous <hogehoge@aaa.ne.jp>\")
-   wl-my-draft-config-func-hoge))"
+   (\"From\" . my-from-address-for-wl-list)
+   (\"Organization\" . my-organization-for-wl-list))
+  (reply
+   \"^To: .*hogehoge@aaa.ne.jp\"
+   (\"From\" . \"Alternative Address <hogehoge@aaa.ne.jp>\")
+   my-draft-config-function-hogehoge))
+
+See also variable `wl-draft-parent-folder'."
   :type '(repeat (list (sexp :tag "Match")
                       (repeat
                        :inline t
@@ -1020,10 +1339,49 @@ ex.
   :group 'wl-draft
   :group 'wl-pref)
 
+(defcustom wl-draft-buffer-style 'full
+  "Style of draft buffer except for `wl-summary-reply' and `wl-summary-forward'
+'keep is to use current window, 'full is to use full frame window and
+'split is to split current window.
+If it is a function, it is called with the draft buffer as an argument."
+  :type '(choice (const :tag "Keep window" keep)
+                (const :tag "Split window" split)
+                (const :tag "Full window" full)
+                (sexp :tag "Use Function"))
+  :group 'wl-draft)
+
 (defcustom wl-draft-reply-buffer-style 'split
-  "'split or 'full."
-  :type '(radio (const split)
-               (const full))
+  "Style of draft buffer for `wl-summary-reply' and `wl-summary-forward'
+'keep is to use message buffer window, 'full is to use full frame window and
+'split is to split message buffer window.
+If it is a function, it is called with the draft buffer as an argument."
+  :type '(choice (const :tag "Keep window" keep)
+                (const :tag "Split window" split)
+                (const :tag "Full window" full)
+                (sexp :tag "Use Function"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-reply-default-position 'body
+  "Begining position of reply buffer.
+'body means the top of body.
+'bottom means the bottom of body.
+'top means the top of header.
+\"To\", \"Newsgroups\", \"Subject\" means the position of the header field.
+You can also set it to a list of setting.
+"
+  :type '(choice (repeat
+                 (choice
+                  (const :tag "Top of body" body)
+                  (const :tag "Bottom of body" bottom)
+                  (const :tag "Top of header" top)
+                  (const "To")
+                  (const "Newsgroups")
+                  (const "Subject")
+                  (string :tag "Header Name")))
+                (const "To")
+                (const "Newsgroups")
+                (const "Subject")
+                (string :tag "Header Name"))
   :group 'wl-draft)
 
 (defcustom wl-draft-queue-save-variables
@@ -1068,8 +1426,7 @@ ex.
   :group 'wl-summary
   :group 'wl-highlight)
 
-(defcustom wl-summary-lazy-highlight (and (boundp 'window-scroll-functions)
-                                         (not wl-on-xemacs))
+(defcustom wl-summary-lazy-highlight (boundp 'window-scroll-functions)
   "Non-nil forces lazy summary highlighting using `window-scroll-functions'."
   :type 'boolean
   :group 'wl-summary
@@ -1090,6 +1447,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
@@ -1156,7 +1518,11 @@ Allowed situations are:
   :type '(repeat (cons (string :tag "Realname") (string :tag "Petname")))
   :group 'wl-folder)
 
-(defcustom wl-summary-weekday-name-lang "ja"
+(defcustom wl-summary-weekday-name-lang
+  (if (and (boundp 'current-language-environment)
+          (string-equal "Japanese"
+                        (symbol-value 'current-language-environment)))
+      "ja" "en")
   "*Language to display week day."
   :type '(choice (const "ja")
                 (const "en")
@@ -1166,6 +1532,11 @@ Allowed situations are:
   :group 'wl-summary
   :group 'wl-pref)
 
+(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)
+
 (defcustom wl-local-domain nil
   "*Domain part of this client (without hostname).
 Set this if (system-name) does not return FQDN."
@@ -1190,6 +1561,49 @@ which appear just before @."
   :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))
+    (?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 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 %F>>"
+  "*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.
+%F The global flag indicator."
+  :group 'wl-pref
+  :type 'string)
+
 (defcustom wl-message-truncate-lines default-truncate-lines
   "*Truncate lines in Message Buffer."
   :type 'boolean
@@ -1201,9 +1615,10 @@ which appear just before @."
   :group 'wl-draft
   :group 'wl-pref)
 
-(defcustom wl-message-scroll-amount 5
+(defcustom wl-message-scroll-amount nil
   "*Scroll amount by SPC key."
-  :type 'integer
+  :type '(choice (const :tag "scrolling by screenfuls" nil)
+                integer)
   :group 'wl-pref)
 
 (defcustom wl-message-window-size '(1 . 4)
@@ -1297,6 +1712,12 @@ Each elements are regexp of field-name."
   :group 'wl-draft
   :group 'wl-pref)
 
+(defcustom wl-forward-subject-prefix "Forward: "
+  "*Prefix of the subject of the forwarded message."
+  :type 'string
+  :group 'wl-draft
+  :group 'wl-pref)
+
 (defcustom wl-draft-reply-use-address-with-full-name t
   "*Use address with full-name in the draft of replied message."
   :type 'boolean
@@ -1317,7 +1738,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
@@ -1330,7 +1751,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
@@ -1349,6 +1770,13 @@ with wl-highlight-folder-many-face."
   :group 'wl-summary
   :group 'wl-pref)
 
+(defcustom wl-summary-max-thread-depth 30
+  "*If thread depth of the message is larger than this value, divide it."
+  :type '(choice (const :tag "Unlimited" nil)
+                integer)
+  :group 'wl-summary
+  :group 'wl-pref)
+
 (defcustom wl-summary-no-from-message "nobody@nowhere?"
   "*A string displayed in summary when no from field exists."
   :type 'string
@@ -1371,6 +1799,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")
@@ -1385,20 +1819,6 @@ with wl-highlight-folder-many-face."
                (string :tag "Other"))
   :group 'wl-summary)
 
-(defcustom wl-summary-from-width 17
-  "*From width in summary."
-  :type 'integer
-  :group 'wl-summary
-  :group 'wl-pref)
-
-(defcustom wl-summary-subject-length-limit nil
-  "*Set subject width in summary when wl-summary-width is nil.
-Nil means unlimited"
-  :type '(choice (const :tag "Unlimited" nil)
-                integer)
-  :group 'wl-summary
-  :group 'wl-pref)
-
 (defcustom wl-mime-charset 'x-ctext
   "*MIME Charset for summary and message."
   :type 'symbol
@@ -1406,7 +1826,7 @@ Nil means unlimited"
   :group 'wl-pref)
 
 (defcustom wl-generate-mailer-string-function 'wl-generate-user-agent-string
-  "A function to create X-Mailer field string ."
+  "A function for creating User-Agent field string."
   :type 'function
   :group 'wl-draft)
 
@@ -1439,7 +1859,7 @@ might set this variable to '(\"-f\" \"you@some.where\")."
   :group 'wl-draft)
 
 (defcustom wl-rejected-letter-start
-  "^[\t ]*-+[\t ]+\\(original\\|\\(\\(the \\)?unsent\\)\\) message\\( follows\\)?[\t ]+-+[\t ]*$"
+  "^[\t ]*-+[\t ]+\\(\\(original\\|\\(\\(the \\)?unsent\\)\\) message\\( follows\\)?[\t ]+-+[\t ]*\\|Below this line is a copy of the message\\..*\\)$"
   "Regexp specifying the beginning of the wrapper around a returned letter.
 This wrapper is generated by the mail system when rejecting a letter."
   :type 'regexp
@@ -1455,13 +1875,47 @@ This wrapper is generated by the mail system when rejecting a letter."
   :type 'regexp
   :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 '(recipients
+                                             envelope-from
+                                             smtp-posting-server
+                                             smtp-posting-port)
+  "*Attribute symbols to display in the draft preview.
+Candidates are following:
+`recipients'
+`envelope-from'
+`smtp-posting-server'
+`smtp-posting-port'
+`nntp-posting-server'
+`nntp-posting-port'
+Also variables which begin with `wl-' can be specified
+\(`wl-' have to be removed\)"
+  :type '(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."
@@ -1469,21 +1923,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"))
@@ -1650,6 +2104,12 @@ It uses wl-summary-move-direction-downward as a direction flag."
   :group 'wl-pref
   :group 'wl-setting)
 
+(defcustom wl-auto-prefetch-first nil
+  "*If non-nil, prefetch selected first message when enter summary."
+  :type 'boolean
+  :group 'wl-pref
+  :group 'wl-setting)
+
 (defcustom wl-auto-select-next nil
   "*If non-nil, offer to go to the next folder from the end of the previous.
 If the value is the symbol `unread', go to the next folder
@@ -1664,7 +2124,12 @@ See also variable `wl-summary-next-no-unread-command'."
   :group 'wl-pref
   :group 'wl-setting)
 
-(defcustom wl-message-buffer-prefetch-folder-type-list t
+(defcustom wl-message-buffer-name " *WL:Message*"
+  "*Buffer name for message buffers."
+  :group 'wl-pref
+  :group 'wl-setting)
+
+(defcustom wl-message-buffer-prefetch-folder-type-list '(imap4 nntp)
   "*All folder types that match this list prefetch next message,
 and reserved buffer cache."
   :type `(choice (const :tag "all" t)
@@ -1690,6 +2155,21 @@ e.x.
   :type '(repeat (regexp :tag "Folder Regexp"))
   :group 'wl-pref)
 
+(defcustom wl-message-buffer-prefetch-depth 1
+  "*Depth of buffer prefetch in summary mode."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-message-buffer-prefetch-idle-time 1
+  "*Idle time of buffer prefetch."
+  :type 'number
+  :group 'wl-pref)
+
+(defcustom wl-message-buffer-prefetch-threshold 30000
+  "*Quit forward cache prefetching if message size is larger than this value."
+  :type 'integer
+  :group 'wl-pref)
+
 (defcustom wl-summary-always-sticky-folder-list nil
   "All folders that match this list has sticky summary.
 Each elements are regexp of folder name."
@@ -1715,7 +2195,8 @@ Each elements are regexp of folder name."
     ("^-relcom\\." . koi8-r)
     ("^-tw\\." . big5)
     ("^-han\\." . euc-kr)
-    ("@sponichi" . shift_jis))
+    ("@sponichi" . shift_jis)
+    ("@2ch" . shift_jis))
   "Charset alist.  If no match, `wl-mime-charset' is used."
   :type '(repeat (cons (regexp :tag "Folder Regexp") (symbol :tag "Charset")))
   :group 'wl-summary
@@ -1746,7 +2227,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
@@ -1764,16 +2245,14 @@ 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")
+       (cons "^'flag" "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)
@@ -1783,8 +2262,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)
@@ -1809,7 +2286,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)
 
@@ -1839,8 +2316,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
@@ -1857,6 +2339,11 @@ Sender information in summary mode."
                 regexp)
   :group 'wl-summary)
 
+(defcustom wl-summary-save-file-suffix ".eml"
+  "Suffix for the saved file name."
+  :type 'string
+  :group 'wl-summary)
+
 (defcustom wl-folder-removed-mark "#<removed>"
   "Mark for removed folder."
   :type 'string
@@ -1867,8 +2354,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:
@@ -1900,9 +2388,10 @@ POLICY is copy or move."
   :group 'wl-summary
   :group 'wl-pref)
 
-(defcustom wl-folder-hierarchy-access-folders '("-" "-alt")
-  "*Access group folders to make hierarchy structure."
-  :type '(repeat (string :tag "Folder"))
+(defcustom wl-folder-hierarchy-access-folders '("^-[^\\.]*\\(:\\|@\\|$\\)"
+                                               "^@$" "^'$")
+  "*Access group REGEXPs to make hierarchy structure."
+  :type '(repeat (string :tag "Regexp"))
   :group 'wl-folder)
 
 (defcustom wl-folder-init-load-access-folders nil
@@ -1982,6 +2471,11 @@ ex.
                (string :tag "Other"))
   :group 'wl-folder)
 
+(defcustom wl-fldmgr-allow-rename-access-group nil
+  "*If non-nil, allow to rename folder in access group."
+  :type 'boolean
+  :group 'wl-folder)
+
 ;;; For Expire and Archive
 
 (defcustom wl-expire-alist nil
@@ -2037,9 +2531,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.
@@ -2220,7 +2714,12 @@ 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-use-flag-folder-help-echo nil
+  "*Display help-echo in the flag folder if non-nil."
   :type 'boolean
   :group 'wl-highlight)
 
@@ -2269,13 +2768,22 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
                (const :tag "bitmap (using BITMAP-MULE)" bitmap))
   :group 'wl-pref)
 
+(defcustom wl-invalid-character-message "(WL:Invalid characters.)"
+  "*A string displayed when invalid character exists."
+  :type 'string
+  :group 'wl-pref)
+
 ;;; Internal variables
 (defvar wl-init nil)
 
 ;; For disconnected operations.
 (defvar wl-plugged-hook nil)
 (defvar wl-unplugged-hook nil)
-(defvar wl-plugged t)
+(defcustom wl-plugged t
+  "*Plugged state at the startup.  Nil means off-line."
+  :type 'boolean
+  :group 'wl
+  :group 'wl-setting)
 
 ;; Internal variables used to modeline identifiers.
 (defvar wl-modeline-plug-status nil)
@@ -2286,22 +2794,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.")
@@ -2331,6 +2836,8 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
   "*Icon file for namazu 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-empty-trash-folder-icon "trash-e.xpm"
@@ -2366,6 +2873,20 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 
 ;;;; Obsolete variables.
 
+;; 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)
@@ -2376,12 +2897,6 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (elmo-define-obsolete-variable 'wl-tmp-dir
                               'wl-temporary-file-directory)
 
-;; 2001-12-07
-(elmo-define-obsolete-variable 'wl-from-width
-                              'wl-summary-from-width)
-(elmo-define-obsolete-variable 'wl-subject-length-limit
-                              'wl-summary-subject-length-limit)
-
 ;; 2001-12-10
 (elmo-define-obsolete-variable 'wl-summary-update-confirm-threshold
                               'elmo-folder-update-threshold)