* bbdb-wl.el (bbdb-wl-get-addresses-1): New function.
[elisp/wanderlust.git] / wl / wl-vars.el
index a60769f..6d848ce 100644 (file)
@@ -1,8 +1,10 @@
-;;; wl-vars.el -- Variable definitions for Wanderlust.
+;;; wl-vars.el --- Variable definitions for Wanderlust.
 
-;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000,2001 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000,2001 Masahiro MURATA <muse@ba2.so-net.ne.jp>
 
 ;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;;     Masahiro MURATA <muse@ba2.so-net.ne.jp>
 ;; Keywords: mail, net news
 
 ;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
 ;;
 
 (require 'elmo-vars)
-
-(if (module-installed-p 'custom)
-    (require 'custom))
+(require 'elmo-util)
+(require 'custom)
 
 ;;; Customizable Variables
 
 (defgroup wl nil
   "Wanderlust, a news and mail reading software."
   :tag "Wanderlust"
-  :link '(custom-manual "(wl-ja)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)
 
   :prefix "wl-"
   :group 'wl)
 
+(defgroup wl-setting nil
+  "Wanderlust common settings."
+  :prefix "wl-"
+  :group 'wl)
+
 ;;; Emacsen
 (defconst wl-on-xemacs (featurep 'xemacs))
 
 (defconst wl-on-emacs21 (and (not wl-on-xemacs)
                             (>= emacs-major-version 21)))
 
-(defconst wl-on-nemacs (fboundp 'nemacs-version))
-
 (defconst wl-on-mule (featurep 'mule))
 
 (defconst wl-on-mule3
   (and wl-on-mule (or wl-on-xemacs
                      (> emacs-major-version 19))))
 
-(require 'elmo-vars)
+(defconst wl-on-nemacs nil) ; backward compatibility.
 
 (eval-when-compile
   (defun-maybe locate-data-directory (a)))
 
 (defvar wl-cs-noconv
   (cond (wl-on-mule3 'binary)
-        (wl-on-mule  '*noconv*)
-       (wl-on-nemacs 0)
-        (t           nil)))
+       (wl-on-mule  '*noconv*)
+       (t           nil)))
 
 (defvar wl-cs-autoconv
   (cond (wl-on-mule3 'undecided)
-        (wl-on-mule  '*autoconv*)
-       (wl-on-nemacs 2) ; junet...
-        (t           nil)))
+       (wl-on-mule  '*autoconv*)
+       (t           nil)))
 
 (defvar wl-cs-local
   (cond (wl-on-mule3  'junet)
-        (wl-on-mule   '*junet*)
-        (wl-on-nemacs 2)
-        (t           nil)))
+       (wl-on-mule   '*junet*)
+       (t           nil)))
 
 (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 (if (boundp 'user-mail-address)
-                      user-mail-address)
+  "*Use SEMI or not.")
+
+(defcustom wl-from (and user-mail-address
+                       (concat (and (user-full-name)
+                                    (concat (elmo-address-quote-specials
+                                             (user-full-name))
+                                            " "))
+                               "<" user-mail-address ">"))
   "*From string used in draft."
-  :type 'string
-  :group 'wl)
+  :type  'string
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-user-mail-address-list nil
   "*A list of user's mail addresses.
@@ -137,59 +148,56 @@ 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."
   :type '(repeat string)
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 
-(defcustom wl-organization nil
+(defcustom wl-organization (getenv "ORGANIZATION")
   "Organization name."
   :type '(choice (const :tag "none" nil)
-                 string)
-  :group 'wl)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 
-(defcustom wl-tmp-dir "~/tmp/"
+(defcustom wl-temporary-file-directory "~/tmp/"
   "*Default temporary directory to save message, part."
   :type 'directory
   :group 'wl)
 
-(defcustom wl-icon-dir (if (fboundp 'locate-data-directory)
-                          (locate-data-directory "wl")
-                        (let ((icons (expand-file-name "wl/icons/"
-                                                       data-directory)))
-                          (if (file-directory-p icons)
-                              icons)))
-  "*Icon directory (XEmacs or Emacs 21)."
+(defcustom wl-icon-directory (if (fboundp 'locate-data-directory)
+                                (locate-data-directory "wl")
+                              (let ((icons (expand-file-name "wl/icons/"
+                                                             data-directory)))
+                                (if (file-directory-p icons)
+                                    icons)))
+  "*Directory to load the icon files from, or nil if none."
   :type '(choice (const :tag "none" nil)
                 string)
   :group 'wl)
 
-(defcustom wl-summary-from-func 'wl-summary-default-from
+(defcustom wl-summary-from-function 'wl-summary-default-from
   "*A function for displaying sender (From: field) information."
   :type 'function
   :group 'wl-summary)
 
-(defcustom wl-summary-subject-func 'wl-summary-default-subject
+(defcustom wl-summary-subject-function 'wl-summary-default-subject
   "*A function for displaying subject."
   :type 'function
   :group 'wl-summary)
 
-(defcustom wl-summary-subject-filter-func 'wl-summary-default-subject-filter
+(defcustom wl-summary-subject-filter-function 'wl-summary-default-subject-filter
   "*A filter function for comparing subjects."
   :type 'function
   :group 'wl-summary)
 
-(defcustom wl-summary-search-parent-by-subject-regexp "^[ \t]*\\(\\[[^:]+[,: ][0-9]+\\]\\)?[ \t]*re[\\^[: ]"
+(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
   :group 'wl-summary)
 
-(defcustom wl-summary-update-confirm-threshold 500
-  "*Confirm updating summary if message number is larger than this value."
-  :type 'integer
-  :group 'wl-summary)
-
 ;; Important folders
 (defcustom wl-default-folder "%inbox"
-  "*Default folder used in wl-summary-goto-folder."
+  "*Default folder used in `wl-summary-goto-folder'."
   :type 'string
   :group 'wl)
 (defcustom wl-draft-folder "+draft"
@@ -199,7 +207,8 @@ If you don't have multiple e-mail addresses, you don't have to set this."
 (defcustom wl-trash-folder "+trash"
   "*Trash folder"
   :type 'string
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 (defcustom wl-queue-folder "+queue"
   "*Queue folder"
   :type 'string
@@ -226,21 +235,22 @@ If you don't have multiple e-mail addresses, you don't have to set this."
   :group 'wl-draft)
 
 (defcustom wl-auto-insert-x-face t
-  "*Insert X-Face: field automatically"
+  "*Insert X-Face: field automatically."
   :type 'boolean
   :group 'wl-draft)
 
 (defcustom wl-x-face-file "~/.xface"
-  "*If file exists and `wl-auto-insert-x-face' is non-nil,
-X-Face field is inserted using its contents."
+  "*X-Face field is inserted using its contents.
+If file exists and `wl-auto-insert-x-face' is non-nil."
   :type 'file
   :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."
+  "*Subscribed mailing list.
+You had better set this variable if you set 'wl-insert-mail-followup-to' as t."
   :type '(repeat string)
-  :group 'wl-pref)
+  :group 'wl-pref
+  :group 'wl-setting)
 
 (defcustom wl-demo t
   "*Display demo at start time."
@@ -249,17 +259,35 @@ if you set wl-insert-mail-followup-to as t."
 
 (defcustom wl-envelope-from nil
   "*Envelope From used in SMTP.
-If nil, wl-from is used."
+If nil, `wl-from' is used."
   :type '(choice (const :tag "Same as 'From' field." nil)
                 string)
+  :group 'wl
+  :group 'wl-setting)
+
+(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."
+  :type 'boolean
   :group 'wl)
 
-(defcustom wl-draft-add-references t
+(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."
   :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."
@@ -269,23 +297,26 @@ If nil, default smtp connection type is used."
   :group 'wl)
 
 (defcustom wl-smtp-posting-user nil
-  "*SMTP authentication user. "
+  "*SMTP authentication user."
   :type '(choice (const :tag "none" nil)
-                 string)
-  :group 'wl)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-smtp-posting-server nil
   "*SMTP server name to send mail (wl-draft-send-mail-with-smtp)."
   :type '(choice (const :tag "none" nil)
                 string)
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-smtp-posting-port nil
   "*SMTP port number in `wl-smtp-posting-server'.
 If nil, default SMTP port number(25) is used."
   :type '(choice (const :tag "Default (25)" nil)
-                 integer)
-  :group 'wl)
+                integer)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-smtp-authenticate-type nil
   "*SMTP Authentication type.
@@ -295,75 +326,78 @@ If nil, don't authenticate."
                 (const :tag "CRAM-MD5" "cram-md5")
                 (const :tag "LOGIN" "login")
                 (string :tag "Other"))
-  :group 'wl)
+  :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-default-pop3-user is used.
+If nil, `elmo-pop3-default-user' is used.
 To use POP-before-SMTP,
-(setq wl-draft-send-mail-func '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)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-pop-before-smtp-server nil
   "*POP3 server for POP-before-SMTP.
-If nil, elmo-default-pop3-server is used."
+If nil, `elmo-pop3-default-server' is used."
   :type '(choice (const :tag "none" nil)
-                 string)
-  :group 'wl)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-pop-before-smtp-port nil
   "*POP3 port for POP-before-SMTP.
-If nil, elmo-default-pop3-port is used."
+If nil, `elmo-pop3-default-port' is used."
   :type '(choice (const :tag "none" nil)
                 integer string)
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-pop-before-smtp-stream-type nil
   "*Stream type for POP-before-SMTP.
-If nil, elmo-default-pop3-stream-type is used."
+If nil, `elmo-pop3-default-stream-type' is used."
   :type 'boolean
   :group 'wl)
 
 (defcustom wl-pop-before-smtp-authenticate-type nil
-  "*Default Authentication type for POP-before-SMTP
-If nil, elmo-default-pop3-authenticate-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"))
-  :group 'wl)
+                (const :tag "APOP" 'apop)
+                (const :tag "POP3" 'user))
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-nntp-posting-server nil
   "*NNTP server name to post news.
-If nil, elmo-default-nntp-server is used."
+If nil, `elmo-nntp-default-server' is used."
   :type '(choice (const :tag "none" nil)
-                 string)
-  :group 'wl)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 (defcustom wl-nntp-posting-user nil
   "*NNTP user name to post news for authinfo.
-If nil, elmo-default-nntp-user is used.
+If nil, `elmo-nntp-default-user' is used.
 If nil, don't authenticate."
   :type '(choice (const :tag "none" nil)
-                 string)
-  :group 'wl)
+                string)
+  :group 'wl
+  :group 'wl-setting)
 (defcustom wl-nntp-posting-port nil
   "*NNTP port to post news.
-If nil, elmo-default-nntp-port is used."
+If nil, `elmo-nntp-default-port' is used."
   :type '(choice (const :tag "none" nil)
                 integer string)
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 (defcustom wl-nntp-posting-stream-type nil
   "*Stream type for posting Netnews.
-If nil, elmo-default-nntp-stream-type is used."
+If nil, `elmo-nntp-default-stream-type' is used."
   :type 'boolean
   :group 'wl)
 
-(defcustom wl-fetch-confirm-threshold 30000
-  "*Confirm fetching if message size is larger than this value."
-  :type 'integer
-  :group 'wl-pref)
-
 (defcustom wl-prefetch-confirm t
   "*Confirm prefetching if message size is larger than `wl-prefetch-threshold'."
   :type 'boolean
@@ -376,17 +410,14 @@ If message size is larger than this value, confirm prefetching
 when `wl-prefetch-confirm' is non-nil."
   :type '(choice (integer :tag "Threshold (bytes)")
                 (const :tag "No limitation" nil))
-  :group 'wl-pref)
-
-(defcustom wl-cache-prefetch-threshold 30000
-  "*Quit forward cache prefetching if message size is larger than this value."
-  :type 'integer
-  :group 'wl-pref)
+  :group 'wl-pref
+  :group 'wl-setting)
 
 (defcustom wl-thread-insert-opened nil
   "*Non-nil forces to insert thread as opened in updating."
   :type 'boolean
-  :group 'wl-summary)
+  :group 'wl-summary
+  :group 'wl-setting)
 
 (defcustom wl-thread-open-reading-thread t
   "*Non-nil forces to open reading thread."
@@ -395,9 +426,10 @@ when `wl-prefetch-confirm' is non-nil."
 
 ;;;; Hooks
 (defvar wl-folder-mode-hook nil
-  "A hook called when wanderlust folder mode is started.  This hook may
-contain the functions `wl-folder-init-icons' and `wl-setup-folder' for
-reasons of system internal to accord facilities for the Emacs variants.")
+  "A hook called when wanderlust folder mode is started.
+This hook may contain the functions `wl-folder-init-icons' and
+`wl-setup-folder' for reasons of system internal to accord facilities
+for the Emacs variants.")
 (defvar wl-summary-toggle-disp-on-hook nil
   "A hook called when message is toggled.")
 (defvar wl-summary-toggle-disp-off-hook nil
@@ -409,9 +441,9 @@ reasons of system internal to accord facilities for the Emacs variants.")
 (defvar wl-summary-toggle-disp-folder-message-resumed-hook nil
   "A hook called when message window is resumed when folder is toggled.")
 (defvar wl-summary-mode-hook nil
-  "A hook called when summary mode is started.  This hook may contain
-the function `wl-setup-summary' for reasons of system internal to
-accord facilities for the Emacs variants.")
+  "A hook called when summary mode is started.
+This hook may contain the function `wl-setup-summary' for reasons of
+system internal to accord facilities for the Emacs variants.")
 
 (defvar wl-summary-prepared-pre-hook nil
   "A hook called before the summary buffer has been generated.")
@@ -430,7 +462,9 @@ accord facilities for the Emacs variants.")
 (defvar wl-summary-divide-thread-when-subject-changed nil
   "Divide thread when subject is changed.")
 (defvar wl-init-hook nil
-  "A hook called when initialization is finished.")
+  "A hook called when initialization is finished.  This hook may contain
+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
@@ -439,7 +473,7 @@ accord facilities for the Emacs variants.")
   "A hook called when Draft is prepared.")
 (defvar wl-draft-reedit-hook nil
   "A hook called when Draft is re-edited.")
-(defvar wl-draft-send-hook nil
+(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
   "A hook called just before the mail sending process starts.")
@@ -451,16 +485,24 @@ accord facilities for the Emacs variants.")
   "A hook called when Message is displayed.")
 (defvar wl-message-exit-hook nil
   "A hook called when quit message.")
+(defvar wl-summary-exit-pre-hook nil
+  "A hook called before exit summary mode.")
 (defvar wl-summary-exit-hook nil
   "A hook called when exit summary mode.")
 (defvar wl-highlight-headers-hook nil
   "A hook called when header is highlighted.")
 (defvar wl-highlight-message-hook nil
   "A hook called when message is highlighted.")
+(defvar wl-save-hook nil
+  "A hook called when save summary and folder status.")
 (defvar wl-exit-hook nil
   "A hook called when exit wanderlust.")
 (defvar wl-folder-suspend-hook nil
   "A hook called when suspend wanderlust.")
+(defvar wl-biff-notify-hook '(ding)
+  "A hook called when a biff-notification is invoked.")
+(defvar wl-biff-unnotify-hook nil
+  "A hook called when a biff-notification is removed.")
 (defvar wl-auto-check-folder-pre-hook nil
   "A hook called before auto check folders.")
 (defvar wl-auto-check-folder-hook nil
@@ -483,6 +525,10 @@ accord facilities for the Emacs variants.")
   "A hook called when summary line is inserted.")
 (defvar wl-summary-insert-headers-hook nil
   "A hook called when insert header for search header.")
+(defvar wl-message-display-internal-hook nil
+  "A hook called when message buffer is created and message is displayed.
+This hook may contain the functions `wl-setup-message' for
+reasons of system internal to accord facilities for the Emacs variants.")
 (defvar wl-thread-update-children-number-hook nil
   "A hook called when children number is updated.")
 (defvar wl-folder-update-access-group-hook nil
@@ -496,25 +542,23 @@ accord facilities for the Emacs variants.")
 (defvar wl-score-mode-hook nil
   "A hook called when score mode is started.")
 (defvar wl-make-plugged-hook nil
-  "A hook called when make plugged alist.  This hook may contain the
-functions `wl-plugged-init-icons' and `wl-biff-init-icons' for reasons
-of system internal to accord facilities for the Emacs variants.")
+  "A hook called when make plugged alist.")
 
 (defvar wl-plugged-exit-hook nil
   "A hook called when exit plugged mode.")
 
 ;;;; functions for draft
-(defcustom wl-draft-send-func 'wl-draft-normal-send-func
+(defcustom wl-draft-send-function 'wl-draft-normal-send-func
   "A function to send message."
   :type 'function
   :group 'wl-draft)
 
-(defcustom wl-draft-send-news-func 'wl-draft-elmo-nntp-send
+(defcustom wl-draft-send-news-function 'wl-draft-elmo-nntp-send
   "A function to send news."
   :type 'function
   :group 'wl-draft)
 
-(defcustom wl-draft-send-mail-func 'wl-draft-send-mail-with-smtp
+(defcustom wl-draft-send-mail-function 'wl-draft-send-mail-with-smtp
   "A function to send mail.
 Prepared candidates are 'wl-draft-send-mail-with-smtp,
 'wl-draft-send-mail-with-qmail and 'wl-draft-send-mail-with-pop-before-smtp."
@@ -545,7 +589,7 @@ Default is for 'reply-to-author'."
 (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") ("Newsgroups")))
+    ("Reply-To" . (("Reply-To") ("To" "Cc" "From") ("Newsgroups")))
     ("From" . (("From") ("To" "Cc") ("Newsgroups"))))
   "Alist of cons cell of
 ('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
@@ -602,8 +646,14 @@ Default is for 'followup-to-me'."
   :type 'boolean
   :group 'wl-draft)
 
+(defcustom wl-draft-delete-myself-from-bcc-fcc nil
+  "*Do not insert bcc or fcc if To and Cc fields is a member of
+`wl-subscribed-mailing-list'"
+  :type 'boolean
+  :group 'wl-draft)
+
 (defcustom wl-draft-resume-folder-window t
-  "*Resume folder window in wl-draft-hide"
+  "*Resume folder window in `wl-draft-hide'."
   :type 'boolean
   :group 'wl-draft)
 
@@ -618,7 +668,7 @@ Default is for 'followup-to-me'."
   :group 'wl-draft)
 
 (defcustom wl-draft-remove-group-list-contents t
-  "*If non-nil, remove group list contents in `wl-draft-send-mail-with-smtp'"
+  "*If non-nil, remove group list contents in `wl-draft-send-mail-with-smtp'."
   :type 'boolean
   :group 'wl-draft)
 
@@ -629,39 +679,54 @@ Default is for 'followup-to-me'."
   :group 'wl)
 
 (defcustom wl-folders-file "~/.folders"
-  "*Folders file"
+  "*Folders file."
   :type 'file
   :group 'wl)
 
 (defcustom wl-address-file "~/.addresses"
-  "*Addresses file"
+  "*Addresses file."
   :type 'file
   :group 'wl)
 
 (defcustom wl-alias-file "~/.im/Aliases"
-  "*Alias file for completion"
+  "*Alias file for completion."
   :type 'file
   :group 'wl)
 
 (defcustom wl-ldap-server "localhost"
   "*LDAP server."
   :type '(string :tag "Server")
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-ldap-port nil
   "*LDAP port."
   :type '(choice (const :tag "Default port" nil)
                 integer)
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-ldap-base "c=US"
   "*LDAP base."
   :type '(string :tag "Base")
-  :group 'wl)
+  :group 'wl
+  :group 'wl-setting)
+
+(defcustom wl-ldap-objectclass "person"
+  "*LDAP objectclass."
+  :type 'string
+  :group 'wl
+  :group 'wl-setting)
 
 (defcustom wl-use-ldap nil
   "*If non-nil, use LDAP for address completion."
   :type 'boolean
+  :group 'wl
+  :group 'wl-setting)
+
+(defcustom wl-use-acap nil
+  "*If non-nil, use ACAP for configuration."
+  :type 'boolean
   :group 'wl)
 
 (defcustom wl-folder-info-save t
@@ -702,15 +767,17 @@ Default is for 'followup-to-me'."
   :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)
 
-(defcustom wl-summary-fix-timezone "JST"
-  "Non-nil forces to fix timezone of summary date."
-  :type 'string
+(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\)."
+  :type '(choice (const :tag "Default time zone" nil)
+                string)
   :group 'wl-summary)
 
 (defcustom wl-summary-default-score 0
@@ -755,19 +822,20 @@ This variable is local to the summary buffers."
   :type '(repeat (string :tag "Mark"))
   :group 'wl-score)
 
-(defcustom wl-use-scoring (not wl-on-nemacs)
+(defcustom wl-use-scoring t
   "*If non-nil, enable scoring."
   :type 'boolean
   :group 'wl-pref)
 
 (defcustom wl-summary-rescore-partial-threshold 200
-  "*Summary is not scored entirely if there are messages more than this value
-in sync-all or rescan."
+  "*Summary is not scored entirely if there are messages more than this value.
+In sync-all or rescan."
   :type 'integer
   :group 'wl-score)
 
-(defcustom wl-score-files-dir (concat elmo-msgdb-dir elmo-path-sep)
-  "*Name of the directory where score files will be stored (default \"~/.elmo\")."
+(defcustom wl-score-files-directory (concat elmo-msgdb-directory elmo-path-sep)
+  "*Name of the directory where score files will be stored.
+(default \"~/.elmo\")."
   :type 'directory
   :group 'wl)
 
@@ -880,11 +948,18 @@ ex.
                        (choice (cons (sexp :tag "Field(Variable)")
                                      (sexp :tag "Value"))
                                (sexp :tag "Function")))))
-  :group 'wl-draft)
+  :group 'wl-draft
+  :group 'wl-setting)
 
 (defcustom wl-draft-config-matchone nil
   "*If non-nil, applied only one element of `wl-draft-config-alist'."
   :type 'boolean
+  :group 'wl-draft
+  :group 'wl-setting)
+
+(defcustom wl-draft-elide-ellipsis "\n[...]\n\n"
+  "*The string which is inserted for elided text."
+  :type 'string
   :group 'wl-draft)
 
 (defcustom wl-template-alist nil
@@ -895,7 +970,8 @@ ex.
                        (choice (cons (sexp :tag "Field(Variable)")
                                      (sexp :tag "Value"))
                                (sexp :tag "Function")))))
-  :group 'wl-draft)
+  :group 'wl-draft
+  :group 'wl-setting)
 
 (defcustom wl-template-visible-select t
   "*If non-nil, select template with visible."
@@ -919,6 +995,24 @@ ex.
   :group 'wl-draft
   :group 'wl-pref)
 
+(defcustom wl-draft-force-queuing nil
+  "*Non-nil forces queued sending for mail and news."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-draft-force-queuing-mail nil
+  "*Non-nil forces queued sending for mail."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-draft-force-queuing-news nil
+  "*Non-nil forces queued sending for news."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
 (defcustom wl-draft-use-cache nil
   "*If non-nil, sending message is cached."
   :type 'boolean
@@ -932,7 +1026,7 @@ ex.
   :group 'wl-pref)
 
 (defcustom wl-draft-reply-buffer-style 'split
-  "'split or 'full"
+  "'split or 'full."
   :type '(radio (const split)
                (const full))
   :group 'wl-draft)
@@ -940,7 +1034,7 @@ ex.
 (defcustom wl-draft-queue-save-variables
   '(wl-envelope-from wl-from
     wl-smtp-posting-server wl-smtp-posting-user wl-smtp-posting-port
-    wl-smtp-authenticate-type wl-smtp-connection-type 
+    wl-smtp-authenticate-type wl-smtp-connection-type
     wl-pop-before-smtp-server wl-pop-before-smtp-user wl-pop-before-smtp-port
     wl-pop-before-smtp-stream-type wl-pop-before-smtp-authenticate-type
     wl-nntp-posting-server wl-nntp-posting-server
@@ -960,7 +1054,7 @@ ex.
   :group 'wl-draft)
 
 (defcustom wl-summary-default-number-column 5
-  "number of columns in summary buffer."
+  "Number of columns in summary buffer."
   :type 'integer
   :group 'wl-summary)
 
@@ -979,16 +1073,24 @@ ex.
   :group 'wl-summary
   :group 'wl-highlight)
 
+(defcustom wl-summary-lazy-highlight (and (boundp 'window-scroll-functions)
+                                         (not wl-on-xemacs))
+  "Non-nil forces lazy summary highlighting using `window-scroll-functions'."
+  :type 'boolean
+  :group 'wl-summary
+  :group 'wl-highlight)
+
 (defcustom wl-summary-highlight-partial-threshold 1000
-  "Summary is not highlighted entirely
-if there are lines more than this value."
+  "Summary is not highlighted entirely if there are lines more than this value.
+Available if only `wl-summary-lazy-highlight' is nil."
   :type 'integer
   :group 'wl-summary
   :group 'wl-highlight)
 
 (defcustom wl-summary-partial-highlight-above-lines 30
-  "If Summary has lines more than wl-summary-highlight-partial-threshold,
-Summary lines are highlighted partialy above current position."
+  "If Summary has lines more than `wl-summary-highlight-partial-threshold',
+Summary lines are highlighted partialy above current position.
+Available if only `wl-summary-lazy-highlight' is nil."
   :type 'integer
   :group 'wl-summary
   :group 'wl-highlight)
@@ -1008,28 +1110,28 @@ Summary lines are highlighted partialy above current position."
   :type 'file
   :group 'wl-summary)
 (defcustom wl-summary-view-file ".wl-summary-view"
-  "*current summary view."
+  "*Current summary view."
   :type 'file
   :group 'wl-summary)
 (defcustom wl-thread-top-file ".wl-thread-top"
-  "*current thread top entity... obsolete."
+  "*Current thread top entity... obsolete."
   :type 'file
   :group 'wl-summary)
 (defcustom wl-thread-entity-file ".wl-thread-entity"
-  "*thread entities."
+  "*Thread entities."
   :type 'file
   :group 'wl-summary)
 (defcustom wl-thread-entity-list-file ".wl-thread-entity-list"
-  "*thread top entity list."
+  "*Thread top entity list."
   :type 'file
   :group 'wl-summary)
 
-(defcustom wl-print-buffer-func 'lpr-buffer
+(defcustom wl-print-buffer-function 'lpr-buffer
   "A function to print current buffer."
   :type 'function
   :group 'wl-pref)
 
-(defcustom wl-ps-print-buffer-func
+(defcustom wl-ps-print-buffer-function
   (if window-system 'ps-print-buffer-with-faces 'ps-print-buffer)
   "A function to print current buffer with ps-print."
   :type 'function
@@ -1043,8 +1145,8 @@ Summary lines are highlighted partialy above current position."
 
 (defcustom wl-use-folder-petname
   '(modeline)
-  "*List of situation using folder petname. Allowed situations are:
-
+  "*List of situation using folder petname.
+Allowed situations are:
   modeline    : displayed on modeline.
   ask-folder  : displayed on minibuffer when ask folder.
   read-folder : can used for completion at `wl-summary-read-folder'."
@@ -1055,7 +1157,7 @@ Summary lines are highlighted partialy above current position."
   :group 'wl-pref)
 
 (defcustom wl-folder-petname-alist nil
-  "A list of (realname . petname)"
+  "A list of (realname . petname)."
   :type '(repeat (cons (string :tag "Realname") (string :tag "Petname")))
   :group 'wl-folder)
 
@@ -1069,17 +1171,28 @@ Summary lines are highlighted partialy above current position."
   :group 'wl-summary
   :group 'wl-pref)
 
+(defcustom wl-message-id-use-wl-from nil
+  "*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."
   :type '(choice (const :tag "Use System Name" nil)
-                 string)
+                string)
   :group 'wl-pref)
 
 (defcustom wl-message-id-domain nil
   "*Specific domain part of Message-ID."
   :type '(choice (const :tag "Use System Name" nil)
-                 string)
+                string)
+  :group 'wl-pref)
+
+(defcustom wl-unique-id-suffix ".wl"
+  "*Specific string in generated Message-ID
+which appear just before @."
+  :type 'string
   :group 'wl-pref)
 
 (defcustom wl-break-pages t
@@ -1087,33 +1200,78 @@ Set this if (system-name) does not return FQDN."
   :type 'boolean
   :group 'wl-pref)
 
+(defcustom wl-message-truncate-lines default-truncate-lines
+  "*Truncate lines in Message Buffer."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-draft-truncate-lines default-truncate-lines
+  "*Truncate lines in Draft Buffer."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
 (defcustom wl-message-scroll-amount 5
   "*Scroll amount by SPC key."
   :type 'integer
   :group 'wl-pref)
 
 (defcustom wl-message-window-size '(1 . 4)
-  "*Size of summary and message window. cons cell of (Summary : Message)."
+  "*Size of summary and message window.  cons cell of (Summary : Message)."
   :type '(cons integer integer)
   :group 'wl-pref)
 
 (defcustom wl-message-sort-field-list '("Return-Path" "Received" "^To" "^Cc"
                                        "Newsgroups" "Subject" "^From")
-  "*Sort order of header fields. Each elements are regexp of field name.
-(Not valid on tm.)"
+  "*Sort order of header fields.  Each elements are regexp of field name."
   :type '(repeat (string :tag "Field Regexp"))
-  :group 'wl-pref)
+  :group 'wl-pref
+  :group 'wl-setting)
 
 (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."
   :type '(repeat (string :tag "Field Regexp"))
-  :group 'wl-pref)
+  :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."
   :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)))
+  "Alist of headers and regexps to match buttons in message headers."
+  :type '(repeat
+         (list (regexp :tag "Header")
+               regexp
+               (integer :tag "Button")
+               (function :tag "Callback")
+               (repeat :tag "Data"
+                       :inline t
+                       (integer :tag "Regexp group"))))
+  :group 'wl-pref)
+
+(defcustom wl-message-body-button-alist
+  '(("<mailto:[^>]+>" 0 'ignore 0 1024)
+    ("<[^>]+@[^>]+>" 0 wl-message-button-refer-article 0 1024))
+  "Alist of regexps to match buttons in message body."
+  :type '(repeat
+         (list regexp
+               (integer :tag "Button")
+               (function :tag "Callback")
+               (repeat :tag "Data"
+                       :inline t
+                       (integer :tag "Regexp group"))
+               (integer :tag "Max Length")))
   :group 'wl-pref)
 
 (defcustom wl-folder-window-width 20
@@ -1123,11 +1281,21 @@ Each elements are regexp of field-name."
   :group 'wl-pref)
 
 (defcustom wl-summary-recenter t
-  "*Recenter on redisplay"
+  "*Recenter on redisplay."
   :type 'boolean
   :group 'wl-summary
   :group 'wl-pref)
 
+(defcustom wl-folder-use-frame nil
+  "*Use dedicated frame for folder mode if non-nil."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-summary-use-frame nil
+  "*Use dedicated frame for each folder summary if non-nil."
+  :type 'boolean
+  :group 'wl-pref)
+
 (defcustom wl-stay-folder-window nil
   "*Stay folder window when folder is selected if non-nil."
   :type 'boolean
@@ -1145,6 +1313,12 @@ Each elements are regexp of field-name."
   :group 'wl-pref
   :group 'wl-draft)
 
+(defcustom wl-subject-prefix-regexp "^[ \t]*\\([Rr][Ee][:>][ \t]*\\)*[ \t]*"
+  "*Regexp matching \"Re: \" 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."
@@ -1155,14 +1329,20 @@ with wl-highlight-folder-many-face."
 (defcustom wl-fcc nil
   "*Folder Carbon Copy."
   :type '(choice (const :tag "disable" nil)
-                 string)
+                string function)
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-fcc-force-as-read nil
+  "*If non-nil, mark copied message as read."
+  :type 'boolean
   :group 'wl-draft
   :group 'wl-pref)
 
 (defcustom wl-bcc nil
   "*Blind Carbon Copy."
   :type '(choice (const :tag "disable" nil)
-                 string)
+                string)
   :group 'wl-draft
   :group 'wl-pref)
 
@@ -1173,8 +1353,9 @@ with wl-highlight-folder-many-face."
   :group 'wl-pref)
 
 (defcustom wl-summary-indent-length-limit 46
-  "*Limit of indent length for thread."
-  :type 'integer
+  "*Limit of indent length for thread. Nil means unlimited"
+  :type '(choice (const :tag "Unlimited" nil)
+                integer)
   :group 'wl-summary
   :group 'wl-pref)
 
@@ -1195,7 +1376,8 @@ with wl-highlight-folder-many-face."
 
 (defcustom wl-summary-width 80
   "*Set summary line width if non nil."
-  :type 'integer
+  :type '(choice (const :tag "Don't truncate" nil)
+                integer)
   :group 'wl-summary
   :group 'wl-pref)
 
@@ -1213,27 +1395,27 @@ with wl-highlight-folder-many-face."
                (string :tag "Other"))
   :group 'wl-summary)
 
-(defcustom wl-from-width 17
+(defcustom wl-summary-from-width 17
   "*From width in summary."
   :type 'integer
   :group 'wl-summary
   :group 'wl-pref)
 
-(defcustom wl-subject-length-limit 35
-  "*Subject width in summary."
-  :type 'integer
+(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 (if wl-on-nemacs
-                              'iso-2022-jp
-                            'x-ctext)
+(defcustom wl-mime-charset 'x-ctext
   "*MIME Charset for summary and message."
   :type 'symbol
   :group 'wl-summary
   :group 'wl-pref)
 
-(defcustom wl-generate-mailer-string-func 'wl-generate-user-agent-string
+(defcustom wl-generate-mailer-string-function 'wl-generate-user-agent-string
   "A function to create X-Mailer field string ."
   :type 'function
   :group 'wl-draft)
@@ -1241,12 +1423,12 @@ with wl-highlight-folder-many-face."
 (defcustom wl-highlight-background-mode  (if (boundp 'hilit-background-mode)
                                             (or hilit-background-mode 'dark)
                                           'dark)
-  "*Background mode of highlight (for Old Emacsen). 'dark or 'light"
+  "*Background mode of highlight (for Old Emacsen).  'dark or 'light."
   :type '(radio (const dark)
                (const light))
   :group 'wl-highlight)
 
-(defcustom wl-highlight-x-face-func nil
+(defcustom wl-highlight-x-face-function nil
   "A function to display X-Face."
   :type 'function
   :group 'wl-highlight)
@@ -1269,7 +1451,7 @@ might set this variable to '(\"-f\" \"you@some.where\")."
 (defcustom wl-rejected-letter-start
   "^[\t ]*-+[\t ]+\\(original\\|\\(\\(the \\)?unsent\\)\\) message\\( follows\\)?[\t ]+-+[\t ]*$"
   "Regexp specifying the beginning of the wrapper around a returned letter.
-  This wrapper is generated by the mail system when rejecting a letter."
+This wrapper is generated by the mail system when rejecting a letter."
   :type 'regexp
   :group 'wl-draft)
 
@@ -1313,7 +1495,7 @@ the message is skipped at cursor move."
 (defcustom wl-summary-incorporate-marks
   (list wl-summary-new-mark
        wl-summary-unread-uncached-mark)
-  "Persistent marks to prefetch at `wl-summary-incorporate'"
+  "Persistent marks to prefetch at `wl-summary-incorporate'."
   :type '(repeat (string :tag "Mark"))
   :group 'wl-summary)
 
@@ -1352,25 +1534,26 @@ Only IMAP4 folders have an effect."
   :group 'wl-folder)
 
 (defcustom wl-auto-check-folder-name nil
-  "*The folder specified by this variable will be automatically checked
-at start time."
+  "*A folder, a group or a list of folders and groups specified which
+will be automatically checked at the startup time."
   :type '(choice (string :tag "Folder")
                 (repeat (string :tag "Folder"))
                 (const none))
   :group 'wl-folder)
 
 (defcustom wl-auto-uncheck-folder-list '("\\$.*")
-  "All folders that match this list won't be checked when group is
-automatically checked (or desktop is checked).
+  "All folders that match this list won't be checked at the startup
+time even if they are embedded in some groups specified by
+wl-auto-check-folder-name.
+Those folders are also skipped when you check on the Desktop.
 This value is preceded by wl-auto-check-folder-list.
 Each elements are regexp of folder name."
   :type '(repeat (regexp :tag "Folder Regexp"))
   :group 'wl-folder)
 
 (defcustom wl-auto-check-folder-list nil
-  "All folders that match this list are checked when group is
-automatically checked (or desktop is checked).
-This value precedes wl-auto-uncheck-folder-list.
+  "A list of patterns for exceptional folders against
+wl-auto-uncheck-folder-list.
 Each elements are regexp of folder name."
   :type '(repeat (regexp :tag "Folder Regexp"))
   :group 'wl-folder)
@@ -1392,7 +1575,7 @@ Each elements are regexp of folder name."
 
 (defcustom wl-biff-check-folder-list nil
   "All folders that match this list are automatically checked
-every intervals specified by wl-biff-check-interval. "
+every intervals specified by wl-biff-check-interval."
   :type '(repeat (regexp :tag "Folder Regexp"))
   :group 'wl-highlight)
 
@@ -1401,12 +1584,24 @@ every intervals specified by wl-biff-check-interval. "
   :type 'integer
   :group 'wl-highlight)
 
-(defcustom wl-biff-state-indicator-on "[\e$B")\e(B]"
+(defcustom wl-biff-state-indicator-on (if (and (featurep 'xemacs)
+                                              (not (featurep 'mule)))
+                                         "[Mail]"
+                                       (decode-coding-string
+                                        ;; Youbin mark
+                                        (read "\"[\e$B\\\")\e(B]\"")
+                                        (if (boundp 'MULE)
+                                            '*iso-2022-jp*
+                                          'iso-2022-jp)))
   "String used to show biff status ON."
   :type 'string
   :group 'wl-highlight)
 
-(defcustom wl-biff-state-indicator-off "[\e$B!>\e(B]"
+(defcustom wl-biff-state-indicator-off (if (and (featurep 'xemacs)
+                                               (not (featurep 'mule)))
+                                          "[--]"
+                                         ;; Japanese short hyphen
+                                        "[\e$B!>\e(B]")
   "String used to show biff status OFF."
   :type 'string
   :group 'wl-highlight)
@@ -1430,10 +1625,11 @@ even if the value of this option is set to nil.  Here are some samples:
                        (sexp :tag "Other" :value title)))
   :group 'wl-highlight)
 
-(defcustom wl-interactive-send nil
+(defcustom wl-interactive-send t
   "*If non-nil, require your confirmation when sending draft message."
   :type 'boolean
-  :group 'wl-pref)
+  :group 'wl-pref
+  :group 'wl-setting)
 
 (defcustom wl-interactive-exit t
   "*If non-nil, require your confirmation when exiting WL."
@@ -1446,7 +1642,8 @@ If this variable is `unread', precede \"U\", \"!\", \"N\" mark.
 If this variable is `new', precede \"N\" mark."
   :type '(radio (const new)
                (const unread))
-  :group 'wl-summary)
+  :group 'wl-summary
+  :group 'wl-setting)
 
 (defvar wl-summary-move-direction-downward t)
 
@@ -1460,12 +1657,19 @@ It uses wl-summary-move-direction-downward as a direction flag."
 (defcustom wl-auto-select-first nil
   "*If non-nil, display selected first message when enter summary."
   :type 'boolean
-  :group 'wl-pref)
+  :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
-that no unread message exists. If the value is the symbol `skip-no-unread',
+that no unread message exists.  If the value is the symbol `skip-no-unread',
 skip the folder that no unread message exists.
 
 See also variable `wl-summary-next-no-unread-command'."
@@ -1473,21 +1677,28 @@ See also variable `wl-summary-next-no-unread-command'."
                (const :tag "on" t)
                (const unread)
                (const skip-no-unread))
-  :group 'wl-pref)
+  :group 'wl-pref
+  :group 'wl-setting)
 
-(defcustom wl-cache-prefetch-folder-type-list '(imap4 nntp)
+(defcustom wl-message-buffer-prefetch-folder-type-list t
   "*All folder types that match this list prefetch next message,
 and reserved buffer cache."
-  :type '(set (const localdir)
-             (const localnews)
-             (const imap4)
-             (const nntp)
-             (const pop3)
-             (const archive)
-             (const internal))
+  :type `(choice (const :tag "all" t)
+                (const :tag "never" nil)
+                (set (const localdir)
+                     (const localnews)
+                     (const maildir)
+                     (const imap4)
+                     (const nntp)
+                     (const pop3)
+                     (const shimbun)
+                     (const nmz)
+                     (const archive)
+                     (const mark)
+                     (const cache)))
   :group 'wl-pref)
 
-(defcustom wl-cache-prefetch-folder-list nil
+(defcustom wl-message-buffer-prefetch-folder-list nil
   "*All folders that match this list prefetch next message,
 and reserved buffer cache.
 e.x.
@@ -1495,15 +1706,20 @@ e.x.
   :type '(repeat (regexp :tag "Folder Regexp"))
   :group 'wl-pref)
 
-(defcustom wl-cache-prefetch-get-next-func 'wl-summary-default-get-next-msg
-  "*A function to get message number when prefetch next message."
-  :type 'function
+(defcustom wl-message-buffer-prefetch-depth 3
+  "*Depth of buffer prefetch in summary mode."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-message-buffer-prefetch-idle-time 0.2
+  "*Idle time of buffer prefetch."
+  :type 'number
   :group 'wl-pref)
 
-;; obsolete
-;(defvar wl-no-cache-folder-list '("^\\$.*")
-;  "All folders that match this list won't be cached when reading messages.
-;Each elements are regexp of folder name.")
+(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.
@@ -1513,7 +1729,7 @@ Each elements are regexp of folder name."
                (repeat (regexp :tag "Folder Regexp")))
   :group 'wl-pref)
 
-(defcustom wl-no-save-folder-list '("^/.*$")
+(defcustom wl-no-save-folder-list '("^/.*$" "^\\[.*$")
   "All folders that match this list won't save its msgdb.
 Each elements are regexp of folder name."
   :type '(repeat (regexp :tag "Folder Regexp"))
@@ -1529,8 +1745,9 @@ Each elements are regexp of folder name."
   '(("^-alt\\.chinese" . big5)
     ("^-relcom\\." . koi8-r)
     ("^-tw\\." . big5)
-    ("^-han\\." . euc-kr))
-  "Charset alist. If no match, wl-mime-charset is used."
+    ("^-han\\." . euc-kr)
+    ("@sponichi" . 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
   :group 'wl-pref)
@@ -1540,8 +1757,8 @@ Each elements are regexp of folder name."
     ("^-relcom\\." . "en")
     ("^-tw\\." . "en")
     ("^-han\\." . "en"))
-  "Weekday name lang alist. If no match, wl-summary-weekday-name-lang
-is used.
+  "Weekday name lang alist.
+If no match, `wl-summary-weekday-name-lang' is used.
 e.x.
 '((\"xemacs-beta$\" . \"en\")
   (\"^-fj\" . \"ja\"))"
@@ -1581,7 +1798,7 @@ e.x.
   (list (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^"
                      (regexp-quote wl-queue-folder) "$")
              "all"))
-  "*Default sync range alist. If no matches, `wl-default-sync-range' is used."
+  "*Default sync range alist.  If no matches, `wl-default-sync-range' is used."
   :type '(repeat (cons (regexp :tag "Folder Regexp")
                       (choice (const "update")
                               (const "all")
@@ -1609,12 +1826,25 @@ If nil, always use default."
   :type 'boolean
   :group 'wl-pref)
 
+(defcustom wl-folder-process-duplicates-alist nil
+  "Specify process type of duplicated messages.
+It should be a list of cons cell like: (REGEXP . TYPE)
+REGEXP is a regular expression string of folder name.
+TYPE is one of the symbols `hide' or `read'.
+`hide' means hide duplicated messages.
+`read' means mark as read duplicated messages.
+If TYPE is nil, do nothing for duplicated messages."
+  :type '(repeat (cons (regexp :tag "Folder regexp")
+                      (choice (const :tag "Hide" hide)
+                              (const :tag "Mark as read" read))))
+  :group 'wl-folder)
+
 (defcustom wl-folder-move-cur-folder nil
   "*Non-nil, move to current folder on folder-mode when goto folder."
   :type 'boolean
   :group 'wl-folder)
 
-(defcustom wl-folder-check-async (not wl-on-nemacs)
+(defcustom wl-folder-check-async t
   "*Check the folder asynchronous."
   :type 'boolean
   :group 'wl-folder)
@@ -1640,7 +1870,7 @@ 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."
+  "*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
   :group 'wl-summary)
 
@@ -1693,7 +1923,7 @@ ex.
 
 (defcustom wl-refile-policy-alist '(("^[-=']" . copy)
                                    (".*" . move))
-  "*List of refile policy. Each element is (FOLDER-REGEXP . POLICY).
+  "*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)
@@ -1741,7 +1971,8 @@ ex.
 (defcustom wl-interactive-save-folders t
   "*Non-nil require your confirmation when save folders."
   :type 'boolean
-  :group 'wl-folder)
+  :group 'wl-folder
+  :group 'wl-setting)
 
 (defcustom wl-fldmgr-make-backup t
   "*Non-nil make backup file when save folders."
@@ -1753,7 +1984,7 @@ ex.
   :type 'string
   :group 'wl-folder)
 
-(defcustom wl-fldmgr-sort-func 'wl-fldmgr-sort-standard
+(defcustom wl-fldmgr-sort-function 'wl-fldmgr-sort-standard
   "*A function to sort folder."
   :type 'function
   :group 'wl-folder)
@@ -1782,6 +2013,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
@@ -1790,7 +2026,7 @@ Each element is (folder-regexp (number or date) policy).
 
 The policy is one of the followings:
 'remove  : remove messsage.
-'trash   : refile wl-trash-folder.
+'trash   : refile `wl-trash-folder'.
 string   : refile string folder.
 function : call function.
 
@@ -1879,7 +2115,7 @@ list  : reserved specified permanent marks."
   :group 'wl-expire)
 
 ;; for wl-expire-archive-{number1|number2|date}
-(defcustom wl-expire-archive-get-folder-func
+(defcustom wl-expire-archive-get-folder-function
   'wl-expire-archive-get-folder
   "*A function to get archive folder name."
   :type 'function
@@ -1940,7 +2176,7 @@ list  : reserved specified permanent marks."
 
 ;; highilght about draft and message
 (defcustom wl-highlight-body-too t
-  "*In addition to header, highlight the body too. if non nil."
+  "*In addition to header, highlight the body too.  if non nil."
   :type 'boolean
   :group 'wl-highlight)
 
@@ -1952,22 +2188,6 @@ list  : reserved specified permanent marks."
   :type '(repeat (cons regexp face))
   :group 'wl-highlight)
 
-(defcustom wl-highlight-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)))
-  "Alist of headers and regexps to match buttons in message headers."
-  :type '(repeat
-         (list (regexp :tag "Header")
-               regexp
-               (integer :tag "Button")
-               (function :tag "Callback")
-               (repeat :tag "Data"
-                       :inline t
-                       (integer :tag "Regexp group"))))
-  :group 'wl-highlight)
-
 (defcustom wl-highlight-citation-prefix-regexp
   "^[>|:} ]*[>|:}]\\([^ \n>]*>\\)?\\|^[^ <\n>]*>"
   "All lines that match this regexp will be highlighted with
@@ -1977,7 +2197,7 @@ list  : reserved specified permanent marks."
 
 (defcustom wl-highlight-highlight-citation-too nil
   "*Whether the whole citation line should go in the
-  `wl-highlight-citation-face' face.
+`wl-highlight-citation-face' face.
 If nil, the text matched by `wl-highlight-citation-prefix-regexp' is in the
 default face, and the remainder of the line is in the
 wl-highlight-message-cited-text face."
@@ -2002,6 +2222,12 @@ the `wl-highlight-message-headers' face."
   :type 'regexp
   :group 'wl-highlight)
 
+(defcustom wl-highlight-max-header-size nil
+  "*If the message header is larger than this many chars, don't highlight it.
+If this is nil, all headers will be highlighted."
+  :type 'integer
+  :group 'wl-highlight)
+
 (defcustom wl-highlight-max-message-size 10000
   "*If the message body is larger than this many chars, don't highlight it.
 This is to prevent us from wasting time trying to fontify things like
@@ -2018,7 +2244,7 @@ It will be verified from head to tail looking for a separator.
 Verification will be done from the end of the buffer.
 No need to specify \"^-- $\" in this list,
 because it is verified by default.
-This variable can also be a regex. "
+This variable can also be a regex."
   :type '(repeat regexp)
   :group 'wl-highlight)
 
@@ -2043,14 +2269,14 @@ This variable can also be a regex. "
   :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."
+  "Highlight folder lines by numbers.
+If it is a number, only numbers will be highlighted."
   :type '(choice (const :tag "whole line" t)
                 (const :tag "only numbers" 1)
                 (const :tag "don't highlight" nil))
   :group 'wl-highlight)
 
-(defcustom wl-highlight-signature-search-func 'wl-highlight-signature-search
+(defcustom wl-highlight-signature-search-function 'wl-highlight-signature-search
   "Function to search signature area in the message body."
   :type 'function
   :group 'wl-highlight)
@@ -2066,19 +2292,17 @@ will be highlighted."
   :type 'boolean
   :group 'wl-pref)
 
-(defcustom wl-demo-display-logo (or (and (featurep 'xemacs)
-                                        (if (featurep 'xpm)
-                                            'xpm 'xbm))
-                                   (and (module-installed-p 'image)
-                                        (if (image-type-available-p 'xpm)
-                                            'xpm 'xbm))
-                                   (and (module-installed-p 'bitmap)
-                                        'xbm))
-  "If non-nil, show graphic logo in the startup screen.  You can set it to
-a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
-  :type '(radio (const :tag "OFF" nil)
-               (const :tag "XBM (possibly BITMAP-MULE)" xbm)
-               (sexp :format "ON  (any format)" :value t))
+(defcustom wl-demo-display-logo (if (or (featurep 'xemacs)
+                                       (module-installed-p 'image)
+                                       (module-installed-p 'bitmap))
+                                   t)
+  "If it is T, show graphic logo in the startup screen.  You can set it to
+a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
+  :type '(radio (const :tag "Off" nil)
+               (const :tag "On (any format)" t)
+               (const xpm)
+               (const xbm)
+               (const :tag "bitmap (using BITMAP-MULE)" bitmap))
   :group 'wl-pref)
 
 ;;; Internal variables
@@ -2087,7 +2311,11 @@ a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
 ;; 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)
@@ -2101,20 +2329,20 @@ a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
 (defvar wl-thread-indent-level 1
   "*Indent level for thread.")
 (defvar wl-thread-have-younger-brother-str "\e$B(2\e(B"
-  "*A string for thread branch line. It should contain one character.")
+  "*A string for thread branch line.  It should contain one character.")
 (defvar wl-thread-youngest-child-str       "\e$B(1\e(B"
-  "*A string for thread branch line. It should contain one character.")
+  "*A string for thread branch line.  It should contain one character.")
 (defvar wl-thread-vertical-str             "\e$B(-\e(B"
-  "*A string for thread branch line. It should contain one character.")
+  "*A string for thread branch line.  It should contain one character.")
 (defvar wl-thread-horizontal-str           "\e$B(,\e(B"
-  "*A string for thread branch line. It should contain one character.")
+  "*A string for thread branch line.  It should contain one character.")
 (defvar wl-thread-space-str                "\e$B!!\e(B"
-  "*A string for thread branch line. It should contain one character.")
+  "*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-dir
+;; folder icons. filename relative to wl-icon-directory
 (defvar wl-opened-group-folder-icon "opened.xpm"
   "*Icon file for opened group folder.")
 (defvar wl-closed-group-folder-icon "closed.xpm"
@@ -2139,6 +2367,10 @@ a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
   "*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-shimbun-folder-icon "shimbun.xpm"
+  "*Icon file for shimbun folder.")
 (defvar wl-maildir-folder-icon "maildir.xpm"
   "*Icon file for maildir folder.")
 (defvar wl-empty-trash-folder-icon "trash-e.xpm"
@@ -2158,24 +2390,12 @@ a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
 (defvar wl-biff-nomail-icon "no-letter.xpm"
   "*Icon file for no mail existed state.")
 (defvar wl-prog-uudecode "uudecode"
-  "*uudecode program name")
-(defvar wl-prog-uudecode-arg '("-p") ;; outout is stdout.
-  "*arguments for uudecode program")
-(defvar wl-prog-uudecode-no-stdout-option nil
+  "*uudecode program name.")
+(defvar wl-prog-uudecode-arg nil
+  "*Arguments for uudecode program.")
+(defvar wl-prog-uudecode-no-stdout-option t
   "*If non-nil, uudecode program don't have option for output to stdout.")
 
-;; Obsolete variables. for compatibility.
-(defvar wl-address-filename wl-address-file)
-(make-obsolete-variable 'wl-address-filename 'wl-address-file)
-(defvar wl-score-default-file-name wl-score-default-file)
-(make-obsolete-variable 'wl-score-default-file-name 'wl-score-default-file)
-(defvar wl-draft-prepared-config-alist nil)
-(make-obsolete-variable 'wl-draft-prepared-config-alist 'wl-draft-config-alist)
-(defvar wl-score-files-directory wl-score-files-dir)
-(make-obsolete-variable 'wl-score-files-directory 'wl-score-files-dir)
-(defvar wl-summary-temp-above wl-summary-target-above)
-(make-obsolete-variable 'wl-summary-temp-above 'wl-summary-target-above)
-
 ;; plug
 (defvar wl-plugged-plug-on "ON")
 (defvar wl-plugged-plug-off "--")
@@ -2184,6 +2404,79 @@ a symbol `xbm' to limit the image format to XBM even if XPM can be shown."
 (defvar wl-plugged-port-indent 4)
 (defvar wl-plugged-queue-status-column 25)
 
+;;;; Obsolete variables.
+
+;; 2001-12-11: *-dir -> *-directory
+(elmo-define-obsolete-variable 'wl-icon-dir
+                              'wl-icon-directory)
+(elmo-define-obsolete-variable 'wl-mime-save-dir
+                              'wl-mime-save-directory)
+(elmo-define-obsolete-variable 'wl-score-files-dir
+                              'wl-score-files-directory)
+(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)
+(elmo-define-obsolete-variable 'wl-fetch-confirm-threshold
+                              'elmo-message-fetch-threshold)
+
+(elmo-define-obsolete-variable 'wl-cache-prefetch-folder-type-list
+                              'wl-message-buffer-prefetch-folder-type-list)
+(elmo-define-obsolete-variable 'wl-cache-prefetch-folder-list
+                              'wl-message-buffer-prefetch-folder-list)
+
+;; 2001-02-27: *-func -> *-function
+(elmo-define-obsolete-variable 'wl-summary-from-func
+                              'wl-summary-from-function)
+(elmo-define-obsolete-variable 'wl-summary-subject-func
+                              'wl-summary-subject-function)
+(elmo-define-obsolete-variable 'wl-summary-subject-filter-func
+                              'wl-summary-subject-filter-function)
+(elmo-define-obsolete-variable 'wl-draft-send-func
+                              'wl-draft-send-function)
+(elmo-define-obsolete-variable 'wl-draft-send-news-func
+                              'wl-draft-send-news-function)
+(elmo-define-obsolete-variable 'wl-draft-send-mail-func
+                              'wl-draft-send-mail-function)
+(elmo-define-obsolete-variable 'wl-print-buffer-func
+                              'wl-print-buffer-function)
+(elmo-define-obsolete-variable 'wl-ps-print-buffer-func
+                              'wl-ps-print-buffer-function)
+(elmo-define-obsolete-variable 'wl-generate-mailer-string-func
+                              'wl-generate-mailer-string-function)
+(elmo-define-obsolete-variable 'wl-highlight-x-face-func
+                              'wl-highlight-x-face-function)
+(elmo-define-obsolete-variable 'wl-fldmgr-sort-func
+                              'wl-fldmgr-sort-function)
+(elmo-define-obsolete-variable 'wl-expire-archive-get-folder-func
+                              'wl-expire-archive-get-folder-function)
+(elmo-define-obsolete-variable 'wl-highlight-signature-search-func
+                              'wl-highlight-signature-search-function)
+
+;; 2000-01-25: temp mark -> target mark
+(elmo-define-obsolete-variable 'wl-summary-temp-above
+                              'wl-summary-target-above)
+
+;; 1999-11-07: Unified with `wl-draft-config-alist'.
+(defvar wl-draft-prepared-config-alist nil)
+(make-obsolete-variable 'wl-draft-prepared-config-alist
+                       'wl-draft-config-alist)
+
+;; 1999-10-10
+(elmo-define-obsolete-variable 'wl-address-filename
+                              'wl-address-file)
+(elmo-define-obsolete-variable 'wl-score-default-file-name
+                              'wl-score-default-file)
+
+
 (require 'product)
 (product-provide (provide 'wl-vars) (require 'wl-version))