(require 'elmo-vars)
(require 'elmo-util)
+(require 'elmo-msgdb)
(require 'custom)
;;; Customizable Variables
(defvar wl-cs-cache wl-cs-local)
-(defvar wl-use-semi (module-installed-p 'mime-view) ; If nil, use tm.
- "*Use SEMI or not.")
-
(defcustom wl-from (and user-mail-address
- (concat (and user-full-name
+ (concat (and (user-full-name)
(concat (elmo-address-quote-specials
- user-full-name)
+ (user-full-name))
" "))
"<" user-mail-address ">"))
"*From string used in draft."
: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)))
+(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 regexp for folder name and summary default view.
+If no match, `wl-summary-default-view' is used."
+ :type '(repeat (cons (regexp :tag "Folder Regexp")
+ (choice (const :tag "Thread" thread)
+ (const :tag "Sequential" sequence))))
+ :group 'wl-summary)
+
+(defvar wl-summary-mode-line-format-spec-alist
+ '((?f (if (memq 'modeline wl-use-folder-petname)
+ (wl-folder-get-petname (elmo-folder-name-internal
+ wl-summary-buffer-elmo-folder))
+ (elmo-folder-name-internal wl-summary-buffer-elmo-folder)))
+ (?t (if (eq wl-summary-buffer-view 'thread) "T" "S"))
+ (?n wl-summary-buffer-new-count)
+ (?u (+ wl-summary-buffer-new-count
+ wl-summary-buffer-unread-count))
+ (?a (length wl-summary-buffer-number-list)))
+ "An alist of format specifications that can appear in summary mode-lines.
+Each element is a list of following:
+\(SPEC STRING-EXP)
+SPEC is a character for format specification.
+STRING-EXP is an expression to get string to insert.")
+
+(defcustom wl-summary-mode-line-format "Wanderlust: %f {%t}(%n/%u/%a)"
+ "*A format string for summary mode-line of Wanderlust.
+It may include any of the following format specifications
+which are replaced by the given information:
+
+%f The folder name.
+%t The thread status of the summary ('T' for thread, 'S' for sequential).
+%n The number of new messages.
+%u The number of unread messages (includes new messages).
+%a The number of all messages."
+ :group 'wl-summary
+ :type 'string)
+
+(defvar wl-summary-line-format-spec-alist
+ '((?Y (wl-summary-line-year))
+ (?M (wl-summary-line-month))
+ (?D (wl-summary-line-day))
+ (?W (wl-summary-line-day-of-week))
+ (?h (wl-summary-line-hour))
+ (?m (wl-summary-line-minute))
+ (?\[ (if wl-thr-linked "<" "["))
+ (?\] (if wl-thr-linked ">" "]"))
+ (?t (or wl-thr-indent-string ""))
+ (?s (wl-summary-line-subject))
+ (?S (wl-summary-line-size))
+ (?C (if wl-thr-children-number
+ (concat "[+" (number-to-string wl-thr-children-number) "] ")
+ (if wl-parent-message-entity
+ (if wl-thr-linked ">>" ">")
+ "")))
+ (?~ (if (zerop (length wl-line-string)) "" " "))
+ (?c (if wl-thr-children-number
+ (concat "+" (number-to-string wl-thr-children-number) ":")
+ ""))
+ (?f (wl-summary-line-from))
+ (?# (wl-summary-line-list-info))
+ (?l (wl-summary-line-list-count))
+ (?T (or wl-temp-mark " "))
+ (?P (or wl-persistent-mark " "))
+ (?n (wl-summary-line-number))
+ (?@ (wl-summary-line-attached)))
+ "An alist of format specifications that can appear in summary lines.
+Each element is a list of following:
+\(SPEC STRING-EXP)
+SPEC is a character for format specification.
+STRING-EXP is an expression to get string to insert.")
+
+(defcustom wl-summary-line-format "%n%T%P%M/%D(%W)%h:%m %t%[%17(%c %f%) %] %s"
+ "*A default format string for summary line of Wanderlust.
+It may include any of the following format specifications
+which are replaced by the given information:
+
+%n The number of the message.
+ The width is decided using `wl-summary-default-number-column' and
+ `wl-summary-number-column-alist'.
+%T The temporal mark (*, D, o, O).
+%P The persistent mark (status of the message).
+%Y The year of the date field of the message (zero padded).
+%M The month of the date field of the message (zero padded).
+%D The day of the date field of the message (zero padded).
+%W The weekday name of the date field of the message (zero padded).
+%h The hour of the date field of the message (zero padded).
+%m The minute of the date field of the message (zero padded).
+%[ An open bracket. If the message thread is linked,
+ it is replaced with '<'.
+%] A close bracket. If the message thread is linked,
+ it is replaced with '>'.
+%c The children number of the closed message thread.
+ Children number is printed like '+??:'.
+%C The children number of the closed message thread.
+ Children number is printed like '[+??] '.
+ If the message is opened, '>' or '>>' (linked) is displayed.
+%f The from: field string of the message.
+%s The subject: field string of the message.
+%S The size of the message (if available).
+%~ If the previous spec is not zero-length, replaced with ' '.
+
+If the format string contains the specifiers %( and %), the text between
+them will have the specified number of columns."
+ :group 'wl-summary
+ :type 'string)
+
+(defcustom wl-folder-summary-line-format-alist nil
+ "An alist of folder name and a summary line format.
+If no match, `wl-summary-line-format' is used.
+e.x.
+ '((\"^%\" . \"%n%T%P%M/%D(%W)%h:%m %t%[%14(%c %f%) %](%S) %s\")
+ (\"^@2ch\" . \"%n%T%P%M%/%D/%h:%m %t[%9(%c %f%) ]%s\")))"
+ :type '(repeat (cons (regexp :tag "Folder Regexp")
+ (string :tag "line format")))
+ :group 'wl-summary)
+
+(defcustom wl-summary-check-line-format t
+ "*Check summary line format change if non-nil.
+When summary line format is changed, current summary cache is discarded.
+It is highly recommended to set this value to t."
+ :type 'boolean
+ :group 'wl-summary)
+
+(defcustom wl-summary-line-format-file ".wl-summary-line-format"
+ "*Cache file for summary line format."
+ :type 'file
+ :group 'wl-summary)
+
(defcustom wl-summary-from-function 'wl-summary-default-from
"*A function for displaying sender (From: field) information."
:type 'function
(defcustom wl-summary-search-parent-by-subject-regexp "^[ \t]*\\(\\[[^:]+[,: ][0-9]+\\]\\)?[ \t]*re[\\^[:> ]"
"*If message does not have in-reply-to field nor references field and
- subject matches this regexp, search parent message by subject matching."
- :type 'string
+subject matches this regexp, search parent message by subject matching.
+If nil, never search search parent by subject."
+ :type '(choice string
+ (const :tag "Don't search parent" nil))
+ :group 'wl-summary)
+
+;;; Mark & Action
+(defcustom wl-summary-mark-action-list
+ '(("*"
+ target-mark
+ nil
+ wl-summary-register-target-mark
+ nil
+ wl-highlight-summary-temp-face
+ "Put target mark.")
+ ("d"
+ dispose
+ nil
+ wl-summary-register-temp-mark
+ wl-summary-exec-action-dispose
+ wl-highlight-summary-disposed-face
+ "Dispose messages according to `wl-dispose-folder-alist'.")
+ ("D"
+ delete
+ nil
+ wl-summary-register-temp-mark
+ wl-summary-exec-action-delete
+ wl-highlight-summary-deleted-face
+ "Delete messages immediately.")
+ ("o"
+ refile
+ wl-summary-get-refile-destination
+ wl-summary-set-action-refile
+ wl-summary-exec-action-refile
+ wl-highlight-summary-refiled-face
+ "Refile messages to the other folder.")
+ ("O"
+ copy
+ wl-summary-get-copy-destination
+ wl-summary-register-temp-mark
+ wl-summary-exec-action-copy
+ wl-highlight-summary-copied-face
+ "Copy messages to the other folder.")
+ ("i"
+ prefetch
+ nil
+ wl-summary-register-temp-mark
+ wl-summary-exec-action-prefetch
+ wl-highlight-summary-prefetch-face
+ "Prefetch messages.")
+ ("~"
+ resend
+ wl-summary-get-resend-address
+ wl-summary-register-temp-mark
+ wl-summary-exec-action-resend
+ wl-highlight-summary-resend-face
+ "Resend messages."))
+ "A variable to define Mark & Action.
+Each element of the list should be a list of
+\(MARK
+ SYMBOL
+ ARGUMENT-FUNCTION
+ SET-MARK-FUNCTION
+ EXEC-FUNCTION
+ FACE
+ DOC-STRING)
+
+MARK is a temporal mark string to define.
+SYMBOL is an action name to define.
+ARGUMENT-FUNCTION is a function called to set the argument data for
+SET-MARK-FUNCTION.
+Its argument is (ACTION NUMBER).
+ACTION is same as the SYMBOL.
+NUMBER is the message number to determine the argument data.
+SET-MARK-FUNCTION is a function called to set the mark.
+Its argument is (NUMBER MARK DATA).
+NUMBER is the target message number.
+MARK is the temporary mark string.
+DATA is given by ARGUMENT-FUNCTION.
+EXEC-FUNCTION is a function called to execute the action.
+Its argument is a list of MARK-INFO.
+MARK-INFO is a list of (NUMBER MARK DATA).
+FACE is a face for highlighting."
+ :type '(repeat (string :tag "Temporary mark")
+ (symbol :tag "Set mark function")
+ (symbol :tag "Unset mark function")
+ (symbol :tag "Exec function")
+ (symbol :tag "Face symbol")
+ (string :tag "Document string"))
:group 'wl-summary)
;; Important folders
:type 'file
:group 'wl-draft)
+(defcustom wl-draft-write-file-function 'wl-draft-save
+ "Save function for draft message."
+ :type 'function
+ :group 'wl-draft)
+
(defcustom wl-subscribed-mailing-list nil
"*Subscribed mailing list.
You had better set this variable if you set 'wl-insert-mail-followup-to' as t."
:group 'wl
:group 'wl-setting)
+(defcustom wl-draft-additional-header-alist nil
+ "*Additional headers in the draft."
+ :type '(repeat (cons (symbol :tag "Field Name")
+ (choice (string :tag "String")
+ (function :tag "Function")))))
+
(defcustom wl-draft-add-in-reply-to t
"*If non-nil, message-id of the cited message is inserted to the
in-reply-to field of the current draft."
: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."
"*POP3 user name to send mail using POP-before-SMTP.
If nil, `elmo-pop3-default-user' is used.
To use POP-before-SMTP,
-\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp\)"
+\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp)"
:type '(choice (const :tag "none" nil)
string)
:group 'wl
"*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)
If nil, `elmo-nntp-default-stream-type' is used."
:type 'boolean
:group 'wl)
+(defcustom wl-nntp-posting-function 'elmo-nntp-post
+ "A function to post news.
+Prepared candidate is 'elmo-nntp-post."
+ :type '(radio (function-item elmo-nntp-post)
+ (function :tag "Other"))
+ :group 'wl-draft)
+(defcustom wl-nntp-posting-config-alist nil
+ "*Alist of configuration on nntp posting.
+ex.
+'((\",?local.test\" . \"news.media.kyoto-u.ac.jp\")
+ (\",?ku\\.\" .
+ ((server . \"news.media.kyoto-u.ac.jp\")
+ (user . \"newsmaster\")
+ (port . 119)
+ (function . elmo-nntp-post))
+ (\".*\" . \"newsfeed.kuee.kyoto-u.ac.jp\")))"
+ :type '(repeat (cons (sexp :tag "Match")
+ (choice (string :tag "Server")
+ (repeat :inlie t
+ (cons (choice (const server)
+ (const user)
+ (const port)
+ (const stream-type)
+ (const function))
+ (sexp :tag "Value"))))))
+ :group 'wl-draft
+ :group 'wl-setting)
(defcustom wl-prefetch-confirm t
"*Confirm prefetching if message size is larger than `wl-prefetch-threshold'."
: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
"A hook called when replied.")
(defvar wl-mail-setup-hook nil
"A hook called when Draft is prepared.")
-(defvar wl-draft-reedit-hook nil
- "A hook called when Draft is re-edited.")
+(defvar wl-draft-reedit-hook '(wl-draft-remove-text-plain-tag)
+ "A hook called when Draft is re-edited.
+The cursor point is located at top of the body.")
(defvar wl-draft-send-hook '(wl-draft-config-exec)
"A hook called on the draft editing buffer before sending process starts.")
(defvar wl-mail-send-pre-hook nil
:group 'wl-draft)
(defcustom wl-draft-reply-with-argument-list
- '(("Reply-To" . (("Reply-To") nil nil))
- ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
- ("From" . (("From") nil nil)))
+ '(("From" . (("Reply-To" "Mail-Reply-To" "From")
+ ("Mail-Followup-To" "To" "Cc")
+ ("Followup-To" "Newsgroups"))))
"Alist of cons cell of
-('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
-'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'reply-to-author'."
- :type '(repeat (cons (choice (string :tag "Field Name")
- (repeat (string :tag "Field Name")))
- (list (repeat :tag "Fields For To" string)
- (repeat :tag "Fields For Cc" string)
- (repeat :tag "Fields For Newsgroups" string))))
- :group 'wl-draft)
-
-(defcustom wl-draft-reply-without-argument-list
- '(("Followup-To" . (nil nil ("Followup-To")))
- ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
- ("Reply-To" . (("Reply-To") ("To" "Cc" "From") ("Newsgroups")))
- ("From" . (("From") ("To" "Cc") ("Newsgroups"))))
- "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,
(repeat :tag "Fields For Newsgroups" string))))
:group 'wl-draft)
-(defcustom wl-draft-reply-myself-with-argument-list
- '(("Followup-To" . (("To") ("Cc") ("Followup-To")))
- ("Newsgroups" . (("To") ("Cc") ("Newsgroups")))
- ("From" . (("To") ("Cc") nil)))
- "Alist of cons cell of
-('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
-'field-name' is a string.
-'fields for ***' is a list of strings.
-If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'reply-to-me'."
- :type '(repeat (cons (choice (string :tag "Field Name")
- (repeat (string :tag "Field Name")))
- (list (repeat :tag "Fields For To" string)
- (repeat :tag "Fields For Cc" string)
- (repeat :tag "Fields For Newsgroups" string))))
- :group 'wl-draft)
-
-(defcustom wl-draft-reply-myself-without-argument-list
- '(("Followup-To" . (("To") ("Cc") ("Followup-To")))
- ("Newsgroups" . (("To") ("Cc") ("Newsgroups")))
- ("From" . (("To") ("Cc") nil)))
+(defcustom wl-draft-reply-without-argument-list
+ '(("Followup-To" . (("Mail-Followup-To" "Mail-Reply-To" "Reply-To") nil ("Followup-To")))
+ ("Mail-Followup-To" . (("Mail-Followup-To") nil nil))
+ ("Newsgroups" . (("Mail-Reply-To" "Reply-To" "To") ("Cc") ("Newsgroups")))
+ ("Mail-Reply-To" . (("Mail-Reply-To" "Reply-To") ("To" "Cc") nil))
+ ("Reply-To" . (("Reply-To") ("To" "Cc") nil))
+ (wl-draft-self-reply-p . (("To") ("Cc") nil))
+ ("From" . (("From") ("To" "Cc") nil)))
"Alist of cons cell of
-('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
+\('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
'field-name' is a string.
'fields for ***' is a list of strings.
If car of each cons cell exists in original message,
-cdr of each cons cell is used for draft message.
-Default is for 'followup-to-me'."
+cdr of each cons cell is used for draft message."
:type '(repeat (cons (choice (string :tag "Field Name")
(repeat (string :tag "Field Name")))
(list (repeat :tag "Fields For To" string)
: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)
: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)
:type 'boolean
:group 'wl-folder)
-(defcustom wl-summary-unread-mark "!"
- "Mark for unread message."
- :type '(string :tag "Mark")
- :group 'wl-summary-marks)
-(defcustom wl-summary-important-mark "$"
- "Mark for important message."
+(defcustom wl-summary-flag-priority-list '(new important answered unread)
+ "List of flags reflected with the priority to a persistent mark."
+ :type '(repeat (radio (const :format "%v " new)
+ (const :format "%v " important)
+ (const :format "%v " answered)
+ (const :format "%v " unread)))
+ :group 'wl-summary)
+
+(defcustom wl-summary-new-uncached-mark "N"
+ "Mark for new and uncached message."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
-(defcustom wl-summary-new-mark "N"
- "Mark for new message."
+
+(defcustom wl-summary-new-cached-mark "?"
+ "Mark for new but already cached message."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
+
(defcustom wl-summary-unread-uncached-mark "U"
"Mark for unread and uncached message."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
+
(defcustom wl-summary-unread-cached-mark "!"
"Mark for unread but already cached message."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
+
(defcustom wl-summary-read-uncached-mark "u"
"Mark for read but uncached message."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
+
+(defcustom wl-summary-answered-cached-mark "&"
+ "Mark for answered and cached message."
+ :type '(string :tag "Mark")
+ :group 'wl-summary-marks)
+
+(defcustom wl-summary-answered-uncached-mark "A"
+ "Mark for answered but cached message."
+ :type '(string :tag "Mark")
+ :group 'wl-summary-marks)
+
+(defcustom wl-summary-important-mark "$"
+ "Mark for important message."
+ :type '(string :tag "Mark")
+ :group 'wl-summary-marks)
+
(defcustom wl-summary-score-over-mark "+"
"Score mark used for messages with high scores."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
+
(defcustom wl-summary-score-below-mark "-"
"Score mark used for messages with low scores."
:type '(string :tag "Mark")
:group 'wl-summary-marks)
-(defcustom wl-summary-no-mime-folder-list
- (list (concat "^" (regexp-quote wl-draft-folder) "$"))
+(defcustom wl-summary-no-mime-folder-list nil
"*All folders that match this list don't analysis mime."
:type '(repeat string)
:group 'wl-summary)
(defcustom wl-summary-fix-timezone nil
"*Time zone of the date string in summary mode.
If nil, it is adjust to the default time zone information
-\(system's default time zone or environment variable TZ\)."
+\(system's default time zone or environment variable TZ)."
:type '(choice (const :tag "Default time zone" nil)
string)
:group 'wl-summary)
:group 'wl-score)
(defcustom wl-summary-score-marks
- (list wl-summary-new-mark)
+ (list wl-summary-new-uncached-mark wl-summary-new-cached-mark)
"Persistent marks to scoring."
:type '(repeat (string :tag "Mark"))
:group 'wl-score)
: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
: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
: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")
: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
:group 'wl-draft
:group 'wl-pref)
+(defcustom wl-draft-buffer-style 'full
+ "Style of draft buffer except for `wl-summary-reply' and `wl-summary-forward'
+'keep is to use current window, 'full is to use full frame window and
+'split is to split current window.
+If it is a function, it is called with the draft buffer as an argument."
+ :type '(choice (const :tag "Keep window" keep)
+ (const :tag "Split window" split)
+ (const :tag "Full window" full)
+ (sexp :tag "Use Function"))
+ :group 'wl-draft)
+
(defcustom wl-draft-reply-buffer-style 'split
- "'split or 'full."
- :type '(radio (const split)
- (const full))
+ "Style of draft buffer for `wl-summary-reply' and `wl-summary-forward'
+'keep is to use message buffer window, 'full is to use full frame window and
+'split is to split message buffer window.
+If it is a function, it is called with the draft buffer as an argument."
+ :type '(choice (const :tag "Keep window" keep)
+ (const :tag "Split window" split)
+ (const :tag "Full window" full)
+ (sexp :tag "Use Function"))
+ :group 'wl-draft)
+
+(defcustom wl-draft-reply-default-position 'body
+ "Begining position of reply buffer.
+'body means the top of body.
+'bottom means the bottom of body.
+'top means the top of header.
+\"To\", \"Newsgroups\", \"Subject\" means the position of the header field.
+You can also set it to a list of setting.
+"
+ :type '(choice (repeat
+ (choice
+ (const :tag "Top of body" body)
+ (const :tag "Bottom of body" bottom)
+ (const :tag "Top of header" top)
+ (const "To")
+ (const "Newsgroups")
+ (const "Subject")
+ (string :tag "Header Name")))
+ (const "To")
+ (const "Newsgroups")
+ (const "Subject")
+ (string :tag "Header Name"))
:group 'wl-draft)
(defcustom wl-draft-queue-save-variables
: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
:group 'wl-summary
:group 'wl-highlight)
+(defcustom wl-summary-lazy-update-mark (boundp 'window-scroll-functions)
+ "Non-nil forces lazy update mark using `window-scroll-functions'."
+ :type 'boolean
+ :group 'wl-summary)
+
(defcustom wl-summary-cache-use t
"Non-nil forces wl-summary to use cache file."
:type 'boolean
:type '(repeat (cons (string :tag "Realname") (string :tag "Petname")))
:group 'wl-folder)
-(defcustom wl-summary-weekday-name-lang "ja"
+(defcustom wl-summary-weekday-name-lang
+ (if (and (boundp 'current-language-environment)
+ (string-equal "Japanese"
+ (symbol-value 'current-language-environment)))
+ "ja" "en")
"*Language to display week day."
:type '(choice (const "ja")
(const "en")
:group 'wl-summary
:group 'wl-pref)
+(defcustom wl-message-id-use-wl-from t
+ "*Use `wl-from' for domain part of Message-ID if non-nil."
+ :type 'boolean
+ :group 'wl-pref)
+
(defcustom wl-local-domain nil
"*Domain part of this client (without hostname).
Set this if (system-name) does not return FQDN."
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
"*Break Pages at ^L."
:type 'boolean
:group 'wl-pref)
+(defcustom wl-message-use-header-narrowing t
+ "Use header narrowing when non-nil."
+ :type 'boolean
+ :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-fields '("to" "cc")
+ "A list of field name to enable header narrowing."
+ :type '(repeat string)
+ :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-lines 4
+ "Line number to enable the header narrowing."
+ :type 'integer
+ :group 'wl-pref)
+
+(defcustom wl-message-header-narrowing-string "..."
+ "A string used for header narrowing truncation."
+ :type 'string
+ :group 'wl-pref)
+
+(defvar wl-message-mode-line-format-spec-alist
+ '((?f (if (memq 'modeline wl-use-folder-petname)
+ (wl-folder-get-petname wl-message-buffer-cur-folder)
+ wl-message-buffer-cur-folder))
+ (?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-draft
:group 'wl-pref)
-(defcustom wl-message-scroll-amount 5
+(defcustom wl-message-scroll-amount nil
"*Scroll amount by SPC key."
- :type 'integer
+ :type '(choice (const :tag "scrolling by screenfuls" nil)
+ integer)
:group 'wl-pref)
(defcustom wl-message-window-size '(1 . 4)
: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
:group 'wl-summary
:group 'wl-pref)
+(defcustom wl-summary-max-thread-depth 30
+ "*If thread depth of the message is larger than this value, divide it."
+ :type '(choice (const :tag "Unlimited" nil)
+ integer)
+ :group 'wl-summary
+ :group 'wl-pref)
+
(defcustom wl-summary-no-from-message "nobody@nowhere?"
"*A string displayed in summary when no from field exists."
:type 'string
:group 'wl-summary
:group 'wl-pref)
+(defcustom wl-summary-print-argument-within-window nil
+ "*If non-nil, always print argument right side of window."
+ :type 'boolean
+ :group 'wl-summary
+ :group 'wl-pref)
+
(defcustom wl-summary-pick-field-default "Body"
"*Default field for pick."
:type '(radio (const "From")
(string :tag "Other"))
:group 'wl-summary)
-(defcustom wl-summary-from-width 17
- "*From width in summary."
- :type 'integer
- :group 'wl-summary
- :group 'wl-pref)
-
-(defcustom wl-summary-subject-length-limit nil
- "*Set subject width in summary when wl-summary-width is nil.
-Nil means unlimited"
- :type '(choice (const :tag "Unlimited" nil)
- integer)
- :group 'wl-summary
- :group 'wl-pref)
-
(defcustom wl-mime-charset 'x-ctext
"*MIME Charset for summary and message."
:type 'symbol
: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)
: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
:type 'regexp
:group 'wl-draft)
+(defcustom wl-draft-preview-attributes t
+ "Non-nil forces to preview the attributes in the `wl-draft-preview-message'.
+Attributes specified in the `wl-draft-preview-attributes-list' are displayed."
+ :type 'boolean
+ :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-list '(recipients
+ envelope-from
+ smtp-posting-server
+ smtp-posting-port)
+ "*Attribute symbols to display in the draft preview.
+Candidates are following:
+`recipients'
+`envelope-from'
+`smtp-posting-server'
+`smtp-posting-port'
+`nntp-posting-server'
+`nntp-posting-port'
+Also variables which begin with `wl-' can be specified
+\(`wl-' have to be removed\)"
+ :type '(repeat symbol)
+ :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-buffer-lines 5
+ "*Buffer height for the draft attribute preview."
+ :type 'integer
+ :group 'wl-draft)
+
+(defcustom wl-draft-preview-attributes-buffer-name "*Preview Attributes*"
+ "*Buffer name for the draft attribute preview."
+ :type 'string
+ :group 'wl-draft)
+
(defcustom wl-refile-default-from-folder "+from"
"*Folder name to refile by `wl-refile-guess-by-from'."
:type '(string :tag "Folder")
:group 'wl-pref)
(defcustom wl-summary-auto-refile-skip-marks
- (list wl-summary-new-mark
+ (list wl-summary-new-uncached-mark
+ wl-summary-new-cached-mark
wl-summary-unread-uncached-mark
wl-summary-unread-cached-mark)
"Persistent marks to skip auto-refiling."
:group 'wl-summary)
(defcustom wl-summary-reserve-mark-list
- (list "o" "O" "D")
+ (list "o" "O" "D" "d" "i")
"If a message is already marked as temporal marks in this list,
the message is not marked by any mark command."
:type '(repeat (string :tag "Temp-Mark"))
:group 'wl-summary)
(defcustom wl-summary-skip-mark-list
- (list "D")
+ (list "D" "d")
"If a message is already marked as temporal marks in this list,
the message is skipped at cursor move."
:type '(repeat (string :tag "Temp-Mark"))
:group 'wl-summary)
(defcustom wl-summary-incorporate-marks
- (list wl-summary-new-mark
+ (list wl-summary-new-uncached-mark
wl-summary-unread-uncached-mark)
"Persistent marks to prefetch at `wl-summary-incorporate'."
:type '(repeat (string :tag "Mark"))
: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)
: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
:group 'wl-pref
:group 'wl-setting)
-(defcustom wl-message-buffer-prefetch-folder-type-list t
+(defcustom wl-message-buffer-name " *WL:Message*"
+ "*Buffer name for message buffers."
+ :group 'wl-pref
+ :group 'wl-setting)
+
+(defcustom wl-message-buffer-prefetch-folder-type-list '(imap4 nntp)
"*All folder types that match this list prefetch next message,
and reserved buffer cache."
:type `(choice (const :tag "all" t)
: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."
("^-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
("^-han\\." . (2 "+" "+" "|" "-" " ")))
"Thread indent set alist.
If no match, following indent set is used.
-(wl-thread-indent-level
+\(wl-thread-indent-level
wl-thread-have-younger-brother-str
wl-thread-youngest-child-str
wl-thread-vertical-str
:group 'wl-pref)
(defcustom wl-folder-sync-range-alist
- (list (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^"
- (regexp-quote wl-queue-folder) "$")
- "all"))
+ (list (cons 'wl-require-update-all-folder-p "all")
+ (cons "^'flag" "all"))
"*Default sync range alist. If no matches, `wl-default-sync-range' is used."
- :type '(repeat (cons (regexp :tag "Folder Regexp")
+ :type '(repeat (cons (choice (regexp :tag "Folder Regexp")
+ (symbol :tag "A function"))
(choice (const "update")
(const "all")
(const "rescan")
- (const "first:")
- (const "last:")
(const "no-sync")
(const :tag "none" nil))))
:group 'wl-pref)
:type '(choice (const "update")
(const "all")
(const "rescan")
- (const "first:")
- (const "last:")
(const "no-sync")
(const :tag "none" nil))
:group 'wl-pref)
:group 'wl-folder)
(defcustom wl-folder-move-cur-folder nil
- "*Non-nil, move to current folder on folder-mode when goto folder."
+ "*Non-nil, move cursor to current folder on folder buffer when goto folder."
:type 'boolean
:group 'wl-folder)
:group 'wl-summary)
(defcustom wl-summary-search-via-nntp 'confirm
- "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'. If the value is 'confirm, confirm before search."
- :type 'boolean
+ "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'.
+If the value is 'confirm, confirm before search, 'force to search via nntp
+regardless of current folder type."
+ :type '(choice (const :tag "confirm" confirm)
+ (const :tag "always" force)
+ (const :tag "in nntp folder" t)
+ (const :tag "never" nil))
:group 'wl-summary)
(defcustom wl-summary-keep-cursor-command
:type 'string
:group 'wl-folder)
-(defcustom wl-delete-folder-alist '(("^-" . remove))
- "*Alist of folder and delete policy.
+(defcustom wl-dispose-folder-alist '(("^-" . remove)
+ ("^@" . remove))
+ "*Alist of folder and dispose policy.
Each element is (folder-regexp . policy).
The policy is one of the followings:
:group 'wl-summary
:group 'wl-pref)
-(defcustom wl-folder-hierarchy-access-folders '("-" "-alt")
- "*Access group folders to make hierarchy structure."
- :type '(repeat (string :tag "Folder"))
+(defcustom wl-folder-hierarchy-access-folders '("^-[^\\.]*\\(:\\|@\\|$\\)"
+ "^@$")
+ "*Access group REGEXPs to make hierarchy structure."
+ :type '(repeat (string :tag "Regexp"))
:group 'wl-folder)
(defcustom wl-folder-init-load-access-folders nil
(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
(defcustom wl-summary-expire-reserve-marks
(list wl-summary-important-mark
- wl-summary-new-mark
- wl-summary-unread-mark
+ wl-summary-new-uncached-mark
+ wl-summary-new-cached-mark
wl-summary-unread-uncached-mark
wl-summary-unread-cached-mark)
"Permanent marks of reserved message when expire.
;; highilght about mouse
(defcustom wl-use-highlight-mouse-line (and window-system
(>= emacs-major-version 19))
- "*Highlight mouse line, if non nil."
+ "*Highlight mouse line, if non-nil."
+ :type 'boolean
+ :group 'wl-highlight)
+
+(defcustom wl-use-flag-folder-help-echo nil
+ "*Display help-echo in the flag folder if non-nil."
:type 'boolean
:group 'wl-highlight)
(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)
(defvar wl-modeline-biff-state-off wl-biff-state-indicator-off)
;; Advanced thread view.
-(defvar wl-thread-indent-level 1
+(defvar wl-thread-indent-level (if wl-on-mule 1 2)
"*Indent level for thread.")
-(defvar wl-thread-have-younger-brother-str "\e$B(2\e(B"
+(defvar wl-thread-have-younger-brother-str (if wl-on-mule "\e$B(2\e(B" "+")
"*A string for thread branch line. It should contain one character.")
-(defvar wl-thread-youngest-child-str "\e$B(1\e(B"
+(defvar wl-thread-youngest-child-str (if wl-on-mule "\e$B(1\e(B" "+")
"*A string for thread branch line. It should contain one character.")
-(defvar wl-thread-vertical-str "\e$B(-\e(B"
+(defvar wl-thread-vertical-str (if wl-on-mule "\e$B(-\e(B" "|")
"*A string for thread branch line. It should contain one character.")
-(defvar wl-thread-horizontal-str "\e$B(,\e(B"
+(defvar wl-thread-horizontal-str (if wl-on-mule "\e$B(,\e(B" "-")
"*A string for thread branch line. It should contain one character.")
-(defvar wl-thread-space-str "\e$B!!\e(B"
+(defvar wl-thread-space-str (if wl-on-mule "\e$B!!\e(B" " ")
"*A string for thread branch line. It should contain one character.")
-(defvar wl-highlight-thread-indent-string-regexp "[^[<]*"
- "* A regexp string for thread indent...for highlight.")
-
-;; folder icons. filename relative to wl-icon-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"
;;;; Obsolete variables.
+;; 2003-11-05
+(elmo-define-obsolete-variable 'wl-summary-new-mark
+ 'wl-summary-new-uncached-mark)
+
+;; 2003-07-15 delete -> dispose
+(elmo-define-obsolete-variable 'wl-delete-folder-alist
+ 'wl-dispose-folder-alist)
+
+;; 2002-12-25
+(elmo-define-obsolete-variable 'wl-draft-reply-myself-with-argument-list
+ 'wl-draft-reply-with-argument-list)
+(elmo-define-obsolete-variable 'wl-draft-reply-myself-without-argument-list
+ 'wl-draft-reply-without-argument-list)
+
+;; 2001-12-11: *-dir -> *-directory
+(elmo-define-obsolete-variable 'wl-icon-dir
+ 'wl-icon-directory)
+(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-summary-temp-above
'wl-summary-target-above)
-;; 2000-03-08
-(elmo-define-obsolete-variable 'wl-score-files-directory
- 'wl-score-files-dir)
-
;; 1999-11-07: Unified with `wl-draft-config-alist'.
(defvar wl-draft-prepared-config-alist nil)
(make-obsolete-variable 'wl-draft-prepared-config-alist