Fixed docstring.
[elisp/wanderlust.git] / wl / wl-vars.el
index 1e0a120..02cb26a 100644 (file)
@@ -1,4 +1,4 @@
-;;; wl-vars.el -- Variable definitions for Wanderlust.
+;;; wl-vars.el --- Variable definitions for Wanderlust.
 
 ;; 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>
@@ -33,9 +33,7 @@
 
 (require 'elmo-vars)
 (require 'elmo-util)
-
-(if (module-installed-p 'custom)
-    (require 'custom))
+(require 'custom)
 
 ;;; Customizable Variables
 
 
 (defvar wl-cs-noconv
   (cond (wl-on-mule3 'binary)
-        (wl-on-mule  '*noconv*)
-        (t           nil)))
+       (wl-on-mule  '*noconv*)
+       (t           nil)))
 
 (defvar wl-cs-autoconv
   (cond (wl-on-mule3 'undecided)
-        (wl-on-mule  '*autoconv*)
-        (t           nil)))
+       (wl-on-mule  '*autoconv*)
+       (t           nil)))
 
 (defvar wl-cs-local
   (cond (wl-on-mule3  'junet)
-        (wl-on-mule   '*junet*)
-        (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)
+(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
+  :type  'string
   :group 'wl
   :group 'wl-setting)
 
@@ -149,29 +151,163 @@ If you don't have multiple e-mail addresses, you don't have to set this."
   :group 'wl
   :group 'wl-setting)
 
-(defcustom wl-organization nil
+(defcustom wl-organization (getenv "ORGANIZATION")
   "Organization name."
   :type '(choice (const :tag "none" nil)
-                 string)
+                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-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 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
@@ -189,13 +325,10 @@ 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
-  :group 'wl-summary)
-
-(defcustom wl-summary-update-confirm-threshold 500
-  "*Confirm updating summary if message number is larger than this value."
-  :type 'integer
+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)
 
 ;; Important folders
@@ -210,7 +343,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
@@ -267,12 +401,35 @@ If nil, `wl-from' is used."
   :group 'wl
   :group 'wl-setting)
 
-(defcustom wl-draft-add-references t
+(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."
+  :type 'boolean
+  :group 'wl)
+
+(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."
@@ -284,7 +441,7 @@ If nil, default smtp connection type is used."
 (defcustom wl-smtp-posting-user nil
   "*SMTP authentication user."
   :type '(choice (const :tag "none" nil)
-                 string)
+                string)
   :group 'wl
   :group 'wl-setting)
 
@@ -299,7 +456,7 @@ If nil, default smtp connection type is used."
   "*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)
+                integer)
   :group 'wl
   :group 'wl-setting)
 
@@ -320,7 +477,7 @@ 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\)"
   :type '(choice (const :tag "none" nil)
-                 string)
+                string)
   :group 'wl
   :group 'wl-setting)
 
@@ -328,7 +485,7 @@ To use POP-before-SMTP,
   "*POP3 server for POP-before-SMTP.
 If nil, `elmo-pop3-default-server' is used."
   :type '(choice (const :tag "none" nil)
-                 string)
+                string)
   :group 'wl
   :group 'wl-setting)
 
@@ -350,8 +507,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)
 
@@ -359,7 +516,7 @@ If nil, `elmo-pop3-default-authenticate-type' is used."
   "*NNTP server name to post news.
 If nil, `elmo-nntp-default-server' is used."
   :type '(choice (const :tag "none" nil)
-                 string)
+                string)
   :group 'wl
   :group 'wl-setting)
 (defcustom wl-nntp-posting-user nil
@@ -367,7 +524,7 @@ If nil, `elmo-nntp-default-server' is used."
 If nil, `elmo-nntp-default-user' is used.
 If nil, don't authenticate."
   :type '(choice (const :tag "none" nil)
-                 string)
+                string)
   :group 'wl
   :group 'wl-setting)
 (defcustom wl-nntp-posting-port nil
@@ -382,11 +539,32 @@ If nil, `elmo-nntp-default-port' 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-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
@@ -404,11 +582,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
@@ -495,7 +668,7 @@ reasons of system internal to accord facilities for the Emacs variants.")
   "A hook called when exit wanderlust.")
 (defvar wl-folder-suspend-hook nil
   "A hook called when suspend wanderlust.")
-(defvar wl-biff-notify-hook nil
+(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.")
@@ -521,6 +694,10 @@ reasons of system internal to 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
@@ -535,8 +712,6 @@ reasons of system internal to accord facilities for the Emacs variants.")
   "A hook called when score mode is started.")
 (defvar wl-make-plugged-hook nil
   "A hook called when make plugged alist.")
-(defvar wl-biff-notify-hook '(beep)
-  "A hook called when a biff-notification is invoked.")
 
 (defvar wl-plugged-exit-hook nil
   "A hook called when exit plugged mode.")
@@ -567,7 +742,7 @@ Prepared candidates are 'wl-draft-send-mail-with-smtp,
     ("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' .  ('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,
@@ -586,7 +761,7 @@ Default is for 'reply-to-author'."
     ("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'))
+\('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,
@@ -604,7 +779,7 @@ Default is for 'reply-to-all'."
     ("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' .  ('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,
@@ -622,7 +797,7 @@ Default is for 'reply-to-me'."
     ("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' .  ('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,
@@ -687,9 +862,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 +876,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)
 
@@ -761,14 +932,13 @@ 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 nil
-  "*Time zone of the date string in summary mode. 
+  "*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)
@@ -828,7 +998,7 @@ In sync-all or rescan."
   :type 'integer
   :group 'wl-score)
 
-(defcustom wl-score-files-dir (concat elmo-msgdb-dir elmo-path-sep)
+(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
@@ -922,21 +1092,55 @@ 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 '(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
@@ -952,6 +1156,11 @@ ex.
   :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
   "Alist of template."
   :type '(repeat (list (string :tag "Name")
@@ -985,6 +1194,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
@@ -1045,8 +1272,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
@@ -1143,17 +1369,28 @@ Allowed situations are:
   :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
@@ -1161,9 +1398,42 @@ Set this if (system-name) does not return FQDN."
   :type 'boolean
   :group 'wl-pref)
 
-(defcustom wl-message-scroll-amount 5
+(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))
+    (?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 >>"
+  "*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."
+  :group 'wl-pref
+  :type 'string)
+
+(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 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)
@@ -1192,6 +1462,38 @@ Each elements are regexp of field-name."
   :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
   "*Width of folder window."
   :type 'integer
@@ -1225,6 +1527,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
@@ -1247,14 +1555,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)
 
@@ -1265,8 +1579,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)
 
@@ -1287,7 +1602,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)
 
@@ -1305,18 +1621,6 @@ with wl-highlight-folder-many-face."
                (string :tag "Other"))
   :group 'wl-summary)
 
-(defcustom wl-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
-  :group 'wl-summary
-  :group 'wl-pref)
-
 (defcustom wl-mime-charset 'x-ctext
   "*MIME Charset for summary and message."
   :type 'symbol
@@ -1324,7 +1628,7 @@ with wl-highlight-folder-many-face."
   :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)
 
@@ -1357,7 +1661,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
@@ -1442,25 +1746,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)
@@ -1504,7 +1809,11 @@ every intervals specified by wl-biff-check-interval."
   :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)
@@ -1528,7 +1837,7 @@ 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
@@ -1563,6 +1872,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
@@ -1577,19 +1892,30 @@ See also variable `wl-summary-next-no-unread-command'."
   :group 'wl-pref
   :group 'wl-setting)
 
-(defcustom wl-cache-prefetch-folder-type-list '(imap4 nntp)
+(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 '(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.
@@ -1597,6 +1923,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."
@@ -1622,7 +1963,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
@@ -1711,7 +2053,7 @@ TYPE is one of the symbols `hide' or `read'.
 `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" kill)
+                      (choice (const :tag "Hide" hide)
                               (const :tag "Mark as read" read))))
   :group 'wl-folder)
 
@@ -1807,8 +2149,8 @@ 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."
+(defcustom wl-folder-hierarchy-access-folders '("^-$" "^-alt$")
+  "*Access group REGEXPs to make hierarchy structure."
   :type '(repeat (string :tag "Folder"))
   :group 'wl-folder)
 
@@ -1889,6 +2231,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
@@ -2059,22 +2406,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
@@ -2192,13 +2523,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)
@@ -2225,7 +2565,7 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (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"
@@ -2279,18 +2619,6 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (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 "--")
@@ -2299,7 +2627,30 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (defvar wl-plugged-port-indent 4)
 (defvar wl-plugged-queue-status-column 25)
 
-;; Obsolete variables.
+;;;; 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-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
@@ -2327,6 +2678,22 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (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))