X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=wl%2Fwl-vars.el;h=e8c7359c76cb24f3c573828e83913ab5d7c78d63;hb=fe96de51c94987ae2ba346e5c240b796870c8099;hp=eb5716750b631d05fdf71c5b317a1ad0cf8c3b32;hpb=9e39553b80115a949a7f04ddced4459a7797f8bd;p=elisp%2Fwanderlust.git diff --git a/wl/wl-vars.el b/wl/wl-vars.el index eb57167..e8c7359 100644 --- a/wl/wl-vars.el +++ b/wl/wl-vars.el @@ -33,6 +33,7 @@ (require 'elmo-vars) (require 'elmo-util) +(require 'elmo-msgdb) (require 'custom) ;;; Customizable Variables @@ -128,13 +129,10 @@ (defvar wl-cs-cache wl-cs-local) -(defvar wl-use-semi (module-installed-p 'mime-view) ; If nil, use tm. - "*Use SEMI or not.") - (defcustom wl-from (and user-mail-address - (concat (and user-full-name + (concat (and (user-full-name) (concat (elmo-address-quote-specials - user-full-name) + (user-full-name)) " ")) "<" user-mail-address ">")) "*From string used in draft." @@ -174,6 +172,140 @@ If you don't have multiple e-mail addresses, you don't have to set this." string) :group 'wl) +(defcustom wl-summary-default-view 'thread + "Default status of summary view, thread or sequential view." + :type '(choice (const :tag "Thread" thread) + (const :tag "Sequential" sequence)) + :group 'wl-summary) + +(defcustom wl-summary-default-view-alist nil + "An alist of regexp for folder name and summary default view. +If no match, `wl-summary-default-view' is used." + :type '(repeat (cons (regexp :tag "Folder Regexp") + (choice (const :tag "Thread" thread) + (const :tag "Sequential" sequence)))) + :group 'wl-summary) + +(defvar wl-summary-mode-line-format-spec-alist + '((?f (if (memq 'modeline wl-use-folder-petname) + (wl-folder-get-petname (elmo-folder-name-internal + wl-summary-buffer-elmo-folder)) + (elmo-folder-name-internal wl-summary-buffer-elmo-folder))) + (?t (if (eq wl-summary-buffer-view 'thread) "T" "S")) + (?n wl-summary-buffer-new-count) + (?u (+ wl-summary-buffer-new-count + wl-summary-buffer-unread-count)) + (?a (length wl-summary-buffer-number-list))) + "An alist of format specifications that can appear in summary mode-lines. +Each element is a list of following: +\(SPEC STRING-EXP) +SPEC is a character for format specification. +STRING-EXP is an expression to get string to insert.") + +(defcustom wl-summary-mode-line-format "Wanderlust: %f {%t}(%n/%u/%a)" + "*A format string for summary mode-line of Wanderlust. +It may include any of the following format specifications +which are replaced by the given information: + +%f The folder name. +%t The thread status of the summary ('T' for thread, 'S' for sequential). +%n The number of new messages. +%u The number of unread messages (includes new messages). +%a The number of all messages." + :group 'wl-summary + :type 'string) + +(defvar wl-summary-line-format-spec-alist + '((?Y (wl-summary-line-year)) + (?M (wl-summary-line-month)) + (?D (wl-summary-line-day)) + (?W (wl-summary-line-day-of-week)) + (?h (wl-summary-line-hour)) + (?m (wl-summary-line-minute)) + (?\[ (if wl-thr-linked "<" "[")) + (?\] (if wl-thr-linked ">" "]")) + (?t (or wl-thr-indent-string "")) + (?s (wl-summary-line-subject)) + (?S (wl-summary-line-size)) + (?C (if wl-thr-children-number + (concat "[+" (number-to-string wl-thr-children-number) "] ") + (if wl-parent-message-entity + (if wl-thr-linked ">>" ">") + ""))) + (?~ (if (zerop (length wl-line-string)) "" " ")) + (?c (if wl-thr-children-number + (concat "+" (number-to-string wl-thr-children-number) ":") + "")) + (?f (wl-summary-line-from)) + (?# (wl-summary-line-list-info)) + (?l (wl-summary-line-list-count)) + (?T (or wl-temp-mark " ")) + (?P (or wl-persistent-mark " ")) + (?n (wl-summary-line-number)) + (?@ (wl-summary-line-attached))) + "An alist of format specifications that can appear in summary lines. +Each element is a list of following: +\(SPEC STRING-EXP) +SPEC is a character for format specification. +STRING-EXP is an expression to get string to insert.") + +(defcustom wl-summary-line-format "%n%T%P%M/%D(%W)%h:%m %t%[%17(%c %f%) %] %s" + "*A default format string for summary line of Wanderlust. +It may include any of the following format specifications +which are replaced by the given information: + +%n The number of the message. + The width is decided using `wl-summary-default-number-column' and + `wl-summary-number-column-alist'. +%T The temporal mark (*, D, o, O). +%P The persistent mark (status of the message). +%Y The year of the date field of the message (zero padded). +%M The month of the date field of the message (zero padded). +%D The day of the date field of the message (zero padded). +%W The weekday name of the date field of the message (zero padded). +%h The hour of the date field of the message (zero padded). +%m The minute of the date field of the message (zero padded). +%[ An open bracket. If the message thread is linked, + it is replaced with '<'. +%] A close bracket. If the message thread is linked, + it is replaced with '>'. +%c The children number of the closed message thread. + Children number is printed like '+??:'. +%C The children number of the closed message thread. + Children number is printed like '[+??] '. + If the message is opened, '>' or '>>' (linked) is displayed. +%f The from: field string of the message. +%s The subject: field string of the message. +%S The size of the message (if available). +%~ If the previous spec is not zero-length, replaced with ' '. + +If the format string contains the specifiers %( and %), the text between +them will have the specified number of columns." + :group 'wl-summary + :type 'string) + +(defcustom wl-folder-summary-line-format-alist nil + "An alist of folder name and a summary line format. +If no match, `wl-summary-line-format' is used. +e.x. + '((\"^%\" . \"%n%T%P%M/%D(%W)%h:%m %t%[%14(%c %f%) %](%S) %s\") + (\"^@2ch\" . \"%n%T%P%M%/%D/%h:%m %t[%9(%c %f%) ]%s\")))" + :type '(repeat (cons (regexp :tag "Folder Regexp") + (string :tag "line format"))) + :group 'wl-summary) + +(defcustom wl-summary-check-line-format t + "*Check summary line format change if non-nil. +When summary line format is changed, current summary cache is discarded. +It is highly recommended to set this value to t." + :type 'boolean + :group 'wl-summary) + +(defcustom wl-summary-line-format-file ".wl-summary-line-format" + "*Cache file for summary line format." + :type 'file + :group 'wl-summary) + (defcustom wl-summary-from-function 'wl-summary-default-from "*A function for displaying sender (From: field) information." :type 'function @@ -191,8 +323,95 @@ If you don't have multiple e-mail addresses, you don't have to set this." (defcustom wl-summary-search-parent-by-subject-regexp "^[ \t]*\\(\\[[^:]+[,: ][0-9]+\\]\\)?[ \t]*re[\\^[:> ]" "*If message does not have in-reply-to field nor references field and - subject matches this regexp, search parent message by subject matching." - :type 'string +subject matches this regexp, search parent message by subject matching. +If nil, never search search parent by subject." + :type '(choice string + (const :tag "Don't search parent" nil)) + :group 'wl-summary) + +;;; Mark & Action +(defcustom wl-summary-mark-action-list + '(("*" + target-mark + nil + wl-summary-register-target-mark + nil + wl-highlight-summary-temp-face + "Put target mark.") + ("d" + dispose + nil + wl-summary-register-temp-mark + wl-summary-exec-action-dispose + wl-highlight-summary-disposed-face + "Dispose messages according to `wl-dispose-folder-alist'.") + ("D" + delete + nil + wl-summary-register-temp-mark + wl-summary-exec-action-delete + wl-highlight-summary-deleted-face + "Delete messages immediately.") + ("o" + refile + wl-summary-get-refile-destination + wl-summary-set-action-refile + wl-summary-exec-action-refile + wl-highlight-summary-refiled-face + "Refile messages to the other folder.") + ("O" + copy + wl-summary-get-copy-destination + wl-summary-register-temp-mark + wl-summary-exec-action-copy + wl-highlight-summary-copied-face + "Copy messages to the other folder.") + ("i" + prefetch + nil + wl-summary-register-temp-mark + wl-summary-exec-action-prefetch + wl-highlight-summary-prefetch-face + "Prefetch messages.") + ("~" + resend + wl-summary-get-resend-address + wl-summary-register-temp-mark + wl-summary-exec-action-resend + wl-highlight-summary-resend-face + "Resend messages.")) + "A variable to define Mark & Action. +Each element of the list should be a list of +\(MARK + SYMBOL + ARGUMENT-FUNCTION + SET-MARK-FUNCTION + EXEC-FUNCTION + FACE + DOC-STRING) + +MARK is a temporal mark string to define. +SYMBOL is an action name to define. +ARGUMENT-FUNCTION is a function called to set the argument data for +SET-MARK-FUNCTION. +Its argument is (ACTION NUMBER). +ACTION is same as the SYMBOL. +NUMBER is the message number to determine the argument data. +SET-MARK-FUNCTION is a function called to set the mark. +Its argument is (NUMBER MARK DATA). +NUMBER is the target message number. +MARK is the temporary mark string. +DATA is given by ARGUMENT-FUNCTION. +EXEC-FUNCTION is a function called to execute the action. +Its argument is a list of MARK-INFO. +MARK-INFO is a list of (NUMBER MARK DATA). +FACE is a face for highlighting." + :type '(repeat (string :tag "Temporary mark") + (symbol :tag "Set mark function") + (symbol :tag "Unset mark function") + (symbol :tag "Exec function") + (symbol :tag "Face symbol") + (string :tag "Document string")) :group 'wl-summary) ;; Important folders @@ -245,6 +464,11 @@ If file exists and `wl-auto-insert-x-face' is non-nil." :type 'file :group 'wl-draft) +(defcustom wl-draft-write-file-function 'wl-draft-save + "Save function for draft message." + :type 'function + :group 'wl-draft) + (defcustom wl-subscribed-mailing-list nil "*Subscribed mailing list. You had better set this variable if you set 'wl-insert-mail-followup-to' as t." @@ -265,6 +489,12 @@ If nil, `wl-from' is used." :group 'wl :group 'wl-setting) +(defcustom wl-draft-additional-header-alist nil + "*Additional headers in the draft." + :type '(repeat (cons (symbol :tag "Field Name") + (choice (string :tag "String") + (function :tag "Function"))))) + (defcustom wl-draft-add-in-reply-to t "*If non-nil, message-id of the cited message is inserted to the in-reply-to field of the current draft." @@ -277,6 +507,17 @@ references field of the current draft." :type 'boolean :group 'wl) +(defcustom wl-draft-cite-function 'wl-default-draft-cite + "*A function for citation." + :type 'function + :group 'wl-draft) + +(defcustom wl-default-draft-cite-decorate-author t + "*If non-nil, the author of cited message is arranged by +`wl-summary-from-func-internal' in `wl-default-draft-cite'." + :type 'boolean + :group 'wl-draft) + (defcustom wl-smtp-connection-type nil "*SMTP connection type. If nil, default smtp connection type is used." @@ -322,7 +563,7 @@ If nil, don't authenticate." "*POP3 user name to send mail using POP-before-SMTP. If nil, `elmo-pop3-default-user' is used. To use POP-before-SMTP, -\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp\)" +\(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp)" :type '(choice (const :tag "none" nil) string) :group 'wl @@ -354,8 +595,8 @@ If nil, `elmo-pop3-default-stream-type' is used." "*Default Authentication type for POP-before-SMTP. If nil, `elmo-pop3-default-authenticate-type' is used." :type '(choice (const :tag "none" nil) - (const :tag "APOP" "apop") - (const :tag "POP3" "user")) + (const :tag "APOP" 'apop) + (const :tag "POP3" 'user)) :group 'wl :group 'wl-setting) @@ -386,6 +627,33 @@ If nil, `elmo-nntp-default-port' is used." If nil, `elmo-nntp-default-stream-type' is used." :type 'boolean :group 'wl) +(defcustom wl-nntp-posting-function 'elmo-nntp-post + "A function to post news. +Prepared candidate is 'elmo-nntp-post." + :type '(radio (function-item elmo-nntp-post) + (function :tag "Other")) + :group 'wl-draft) +(defcustom wl-nntp-posting-config-alist nil + "*Alist of configuration on nntp posting. +ex. +'((\",?local.test\" . \"news.media.kyoto-u.ac.jp\") + (\",?ku\\.\" . + ((server . \"news.media.kyoto-u.ac.jp\") + (user . \"newsmaster\") + (port . 119) + (function . elmo-nntp-post)) + (\".*\" . \"newsfeed.kuee.kyoto-u.ac.jp\")))" + :type '(repeat (cons (sexp :tag "Match") + (choice (string :tag "Server") + (repeat :inlie t + (cons (choice (const server) + (const user) + (const port) + (const stream-type) + (const function)) + (sexp :tag "Value")))))) + :group 'wl-draft + :group 'wl-setting) (defcustom wl-prefetch-confirm t "*Confirm prefetching if message size is larger than `wl-prefetch-threshold'." @@ -402,11 +670,6 @@ when `wl-prefetch-confirm' is non-nil." :group 'wl-pref :group 'wl-setting) -(defcustom wl-cache-prefetch-threshold 30000 - "*Quit forward cache prefetching if message size is larger than this value." - :type 'integer - :group 'wl-pref) - (defcustom wl-thread-insert-opened nil "*Non-nil forces to insert thread as opened in updating." :type 'boolean @@ -465,8 +728,9 @@ reasons of system internal to accord facilities for the Emacs variants.") "A hook called when replied.") (defvar wl-mail-setup-hook nil "A hook called when Draft is prepared.") -(defvar wl-draft-reedit-hook nil - "A hook called when Draft is re-edited.") +(defvar wl-draft-reedit-hook '(wl-draft-remove-text-plain-tag) + "A hook called when Draft is re-edited. +The cursor point is located at top of the body.") (defvar wl-draft-send-hook '(wl-draft-config-exec) "A hook called on the draft editing buffer before sending process starts.") (defvar wl-mail-send-pre-hook nil @@ -563,30 +827,11 @@ Prepared candidates are 'wl-draft-send-mail-with-smtp, :group 'wl-draft) (defcustom wl-draft-reply-with-argument-list - '(("Reply-To" . (("Reply-To") nil nil)) - ("Mail-Reply-To" . (("Mail-Reply-To") nil nil)) - ("From" . (("From") nil nil))) + '(("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, @@ -599,35 +844,20 @@ Default is for 'reply-to-all'." (repeat :tag "Fields For Newsgroups" string)))) :group 'wl-draft) -(defcustom wl-draft-reply-myself-with-argument-list - '(("Followup-To" . (("To") ("Cc") ("Followup-To"))) - ("Newsgroups" . (("To") ("Cc") ("Newsgroups"))) - ("From" . (("To") ("Cc") nil))) - "Alist of cons cell of -('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups')) -'field-name' is a string. -'fields for ***' is a list of strings. -If car of each cons cell exists in original message, -cdr of each cons cell is used for draft message. -Default is for 'reply-to-me'." - :type '(repeat (cons (choice (string :tag "Field Name") - (repeat (string :tag "Field Name"))) - (list (repeat :tag "Fields For To" string) - (repeat :tag "Fields For Cc" string) - (repeat :tag "Fields For Newsgroups" string)))) - :group 'wl-draft) - -(defcustom wl-draft-reply-myself-without-argument-list - '(("Followup-To" . (("To") ("Cc") ("Followup-To"))) - ("Newsgroups" . (("To") ("Cc") ("Newsgroups"))) - ("From" . (("To") ("Cc") nil))) +(defcustom wl-draft-reply-without-argument-list + '(("Followup-To" . (("Mail-Followup-To" "Mail-Reply-To" "Reply-To") nil ("Followup-To"))) + ("Mail-Followup-To" . (("Mail-Followup-To") nil nil)) + ("Newsgroups" . (("Mail-Reply-To" "Reply-To" "To") ("Cc") ("Newsgroups"))) + ("Mail-Reply-To" . (("Mail-Reply-To" "Reply-To") ("To" "Cc") nil)) + ("Reply-To" . (("Reply-To") ("To" "Cc") nil)) + (wl-draft-self-reply-p . (("To") ("Cc") nil)) + ("From" . (("From") ("To" "Cc") nil))) "Alist of cons cell of -('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups')) +\('field-name' . ('fields for To' 'fields for Cc' 'fields for Newsgroups')) 'field-name' is a string. 'fields for ***' is a list of strings. If car of each cons cell exists in original message, -cdr of each cons cell is used for draft message. -Default is for 'followup-to-me'." +cdr of each cons cell is used for draft message." :type '(repeat (cons (choice (string :tag "Field Name") (repeat (string :tag "Field Name"))) (list (repeat :tag "Fields For To" string) @@ -687,9 +917,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 +931,10 @@ Default is for 'followup-to-me'." :group 'wl :group 'wl-setting) -(defcustom wl-ldap-base "c=US" +(defcustom wl-ldap-base nil "*LDAP base." - :type '(string :tag "Base") - :group 'wl - :group 'wl-setting) - -(defcustom wl-ldap-objectclass "person" - "*LDAP objectclass." - :type 'string + :type '(choice (const :tag "Default base" nil) + (string :tag "Base")) :group 'wl :group 'wl-setting) @@ -728,41 +954,65 @@ Default is for 'followup-to-me'." :type 'boolean :group 'wl-folder) -(defcustom wl-summary-unread-mark "!" - "Mark for unread message." - :type '(string :tag "Mark") - :group 'wl-summary-marks) -(defcustom wl-summary-important-mark "$" - "Mark for important message." +(defcustom wl-summary-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) @@ -770,7 +1020,7 @@ Default is for 'followup-to-me'." (defcustom wl-summary-fix-timezone nil "*Time zone of the date string in summary mode. If nil, it is adjust to the default time zone information -\(system's default time zone or environment variable TZ\)." +\(system's default time zone or environment variable TZ)." :type '(choice (const :tag "Default time zone" nil) string) :group 'wl-summary) @@ -812,7 +1062,7 @@ This variable is local to the summary buffers." :group 'wl-score) (defcustom wl-summary-score-marks - (list wl-summary-new-mark) + (list wl-summary-new-uncached-mark wl-summary-new-cached-mark) "Persistent marks to scoring." :type '(repeat (string :tag "Mark")) :group 'wl-score) @@ -922,21 +1172,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 \") - 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 \") + my-draft-config-function-hogehoge)) + +See also variable `wl-draft-parent-folder'." :type '(repeat (list (sexp :tag "Match") (repeat :inline t @@ -952,6 +1236,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 +1274,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 @@ -997,10 +1304,49 @@ ex. :group 'wl-draft :group 'wl-pref) +(defcustom wl-draft-buffer-style 'full + "Style of draft buffer except for `wl-summary-reply' and `wl-summary-forward' +'keep is to use current window, 'full is to use full frame window and +'split is to split current window. +If it is a function, it is called with the draft buffer as an argument." + :type '(choice (const :tag "Keep window" keep) + (const :tag "Split window" split) + (const :tag "Full window" full) + (sexp :tag "Use Function")) + :group 'wl-draft) + (defcustom wl-draft-reply-buffer-style 'split - "'split or 'full." - :type '(radio (const split) - (const full)) + "Style of draft buffer for `wl-summary-reply' and `wl-summary-forward' +'keep is to use message buffer window, 'full is to use full frame window and +'split is to split message buffer window. +If it is a function, it is called with the draft buffer as an argument." + :type '(choice (const :tag "Keep window" keep) + (const :tag "Split window" split) + (const :tag "Full window" full) + (sexp :tag "Use Function")) + :group 'wl-draft) + +(defcustom wl-draft-reply-default-position 'body + "Begining position of reply buffer. +'body means the top of body. +'bottom means the bottom of body. +'top means the top of header. +\"To\", \"Newsgroups\", \"Subject\" means the position of the header field. +You can also set it to a list of setting. +" + :type '(choice (repeat + (choice + (const :tag "Top of body" body) + (const :tag "Bottom of body" bottom) + (const :tag "Top of header" top) + (const "To") + (const "Newsgroups") + (const "Subject") + (string :tag "Header Name"))) + (const "To") + (const "Newsgroups") + (const "Subject") + (string :tag "Header Name")) :group 'wl-draft) (defcustom wl-draft-queue-save-variables @@ -1045,8 +1391,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 @@ -1067,6 +1412,11 @@ Available if only `wl-summary-lazy-highlight' is nil." :group 'wl-summary :group 'wl-highlight) +(defcustom wl-summary-lazy-update-mark (boundp 'window-scroll-functions) + "Non-nil forces lazy update mark using `window-scroll-functions'." + :type 'boolean + :group 'wl-summary) + (defcustom wl-summary-cache-use t "Non-nil forces wl-summary to use cache file." :type 'boolean @@ -1133,7 +1483,11 @@ Allowed situations are: :type '(repeat (cons (string :tag "Realname") (string :tag "Petname"))) :group 'wl-folder) -(defcustom wl-summary-weekday-name-lang "ja" +(defcustom wl-summary-weekday-name-lang + (if (and (boundp 'current-language-environment) + (string-equal "Japanese" + (symbol-value 'current-language-environment))) + "ja" "en") "*Language to display week day." :type '(choice (const "ja") (const "en") @@ -1143,6 +1497,11 @@ Allowed situations are: :group 'wl-summary :group 'wl-pref) +(defcustom wl-message-id-use-wl-from t + "*Use `wl-from' for domain part of Message-ID if non-nil." + :type 'boolean + :group 'wl-pref) + (defcustom wl-local-domain nil "*Domain part of this client (without hostname). Set this if (system-name) does not return FQDN." @@ -1156,11 +1515,58 @@ 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 @@ -1172,9 +1578,10 @@ Set this if (system-name) does not return FQDN." :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) @@ -1268,6 +1675,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 @@ -1320,6 +1733,13 @@ with wl-highlight-folder-many-face." :group 'wl-summary :group 'wl-pref) +(defcustom wl-summary-max-thread-depth 30 + "*If thread depth of the message is larger than this value, divide it." + :type '(choice (const :tag "Unlimited" nil) + integer) + :group 'wl-summary + :group 'wl-pref) + (defcustom wl-summary-no-from-message "nobody@nowhere?" "*A string displayed in summary when no from field exists." :type 'string @@ -1342,6 +1762,12 @@ with wl-highlight-folder-many-face." :group 'wl-summary :group 'wl-pref) +(defcustom wl-summary-print-argument-within-window nil + "*If non-nil, always print argument right side of window." + :type 'boolean + :group 'wl-summary + :group 'wl-pref) + (defcustom wl-summary-pick-field-default "Body" "*Default field for pick." :type '(radio (const "From") @@ -1356,20 +1782,6 @@ with wl-highlight-folder-many-face." (string :tag "Other")) :group 'wl-summary) -(defcustom wl-summary-from-width 17 - "*From width in summary." - :type 'integer - :group 'wl-summary - :group 'wl-pref) - -(defcustom wl-summary-subject-length-limit nil - "*Set subject width in summary when wl-summary-width is nil. -Nil means unlimited" - :type '(choice (const :tag "Unlimited" nil) - integer) - :group 'wl-summary - :group 'wl-pref) - (defcustom wl-mime-charset 'x-ctext "*MIME Charset for summary and message." :type 'symbol @@ -1377,7 +1789,7 @@ Nil means unlimited" :group 'wl-pref) (defcustom wl-generate-mailer-string-function 'wl-generate-user-agent-string - "A function to create X-Mailer field string ." + "A function for creating User-Agent field string." :type 'function :group 'wl-draft) @@ -1410,7 +1822,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 @@ -1426,13 +1838,47 @@ This wrapper is generated by the mail system when rejecting a letter." :type 'regexp :group 'wl-draft) +(defcustom wl-draft-preview-attributes t + "Non-nil forces to preview the attributes in the `wl-draft-preview-message'. +Attributes specified in the `wl-draft-preview-attributes-list' are displayed." + :type 'boolean + :group 'wl-draft) + +(defcustom wl-draft-preview-attributes-list '(recipients + envelope-from + smtp-posting-server + smtp-posting-port) + "*Attribute symbols to display in the draft preview. +Candidates are following: +`recipients' +`envelope-from' +`smtp-posting-server' +`smtp-posting-port' +`nntp-posting-server' +`nntp-posting-port' +Also variables which begin with `wl-' can be specified +\(`wl-' have to be removed\)" + :type '(repeat symbol) + :group 'wl-draft) + +(defcustom wl-draft-preview-attributes-buffer-lines 5 + "*Buffer height for the draft attribute preview." + :type 'integer + :group 'wl-draft) + +(defcustom wl-draft-preview-attributes-buffer-name "*Preview Attributes*" + "*Buffer name for the draft attribute preview." + :type 'string + :group 'wl-draft) + (defcustom wl-refile-default-from-folder "+from" "*Folder name to refile by `wl-refile-guess-by-from'." :type '(string :tag "Folder") :group 'wl-pref) (defcustom wl-summary-auto-refile-skip-marks - (list wl-summary-new-mark + (list wl-summary-new-uncached-mark + wl-summary-new-cached-mark wl-summary-unread-uncached-mark wl-summary-unread-cached-mark) "Persistent marks to skip auto-refiling." @@ -1440,21 +1886,21 @@ This wrapper is generated by the mail system when rejecting a letter." :group 'wl-summary) (defcustom wl-summary-reserve-mark-list - (list "o" "O" "D") + (list "o" "O" "D" "d" "i") "If a message is already marked as temporal marks in this list, the message is not marked by any mark command." :type '(repeat (string :tag "Temp-Mark")) :group 'wl-summary) (defcustom wl-summary-skip-mark-list - (list "D") + (list "D" "d") "If a message is already marked as temporal marks in this list, the message is skipped at cursor move." :type '(repeat (string :tag "Temp-Mark")) :group 'wl-summary) (defcustom wl-summary-incorporate-marks - (list wl-summary-new-mark + (list wl-summary-new-uncached-mark wl-summary-unread-uncached-mark) "Persistent marks to prefetch at `wl-summary-incorporate'." :type '(repeat (string :tag "Mark")) @@ -1495,25 +1941,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) @@ -1620,6 +2067,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 @@ -1634,7 +2087,12 @@ See also variable `wl-summary-next-no-unread-command'." :group 'wl-pref :group 'wl-setting) -(defcustom wl-message-buffer-prefetch-folder-type-list t +(defcustom wl-message-buffer-name " *WL:Message*" + "*Buffer name for message buffers." + :group 'wl-pref + :group 'wl-setting) + +(defcustom wl-message-buffer-prefetch-folder-type-list '(imap4 nntp) "*All folder types that match this list prefetch next message, and reserved buffer cache." :type `(choice (const :tag "all" t) @@ -1660,6 +2118,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." @@ -1685,7 +2158,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 @@ -1716,7 +2190,7 @@ e.x. ("^-han\\." . (2 "+" "+" "|" "-" " "))) "Thread indent set alist. If no match, following indent set is used. -(wl-thread-indent-level +\(wl-thread-indent-level wl-thread-have-younger-brother-str wl-thread-youngest-child-str wl-thread-vertical-str @@ -1734,16 +2208,14 @@ e.x. :group 'wl-pref) (defcustom wl-folder-sync-range-alist - (list (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^" - (regexp-quote wl-queue-folder) "$") - "all")) + (list (cons 'wl-require-update-all-folder-p "all") + (cons "^'flag" "all")) "*Default sync range alist. If no matches, `wl-default-sync-range' is used." - :type '(repeat (cons (regexp :tag "Folder Regexp") + :type '(repeat (cons (choice (regexp :tag "Folder Regexp") + (symbol :tag "A function")) (choice (const "update") (const "all") (const "rescan") - (const "first:") - (const "last:") (const "no-sync") (const :tag "none" nil)))) :group 'wl-pref) @@ -1753,8 +2225,6 @@ e.x. :type '(choice (const "update") (const "all") (const "rescan") - (const "first:") - (const "last:") (const "no-sync") (const :tag "none" nil)) :group 'wl-pref) @@ -1779,7 +2249,7 @@ If TYPE is nil, do nothing for duplicated messages." :group 'wl-folder) (defcustom wl-folder-move-cur-folder nil - "*Non-nil, move to current folder on folder-mode when goto folder." + "*Non-nil, move cursor to current folder on folder buffer when goto folder." :type 'boolean :group 'wl-folder) @@ -1809,8 +2279,13 @@ or 'skip-no-unread." :group 'wl-summary) (defcustom wl-summary-search-via-nntp 'confirm - "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'. If the value is 'confirm, confirm before search." - :type 'boolean + "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'. +If the value is 'confirm, confirm before search, 'force to search via nntp +regardless of current folder type." + :type '(choice (const :tag "confirm" confirm) + (const :tag "always" force) + (const :tag "in nntp folder" t) + (const :tag "never" nil)) :group 'wl-summary) (defcustom wl-summary-keep-cursor-command @@ -1837,8 +2312,9 @@ Sender information in summary mode." :type 'string :group 'wl-folder) -(defcustom wl-delete-folder-alist '(("^-" . remove)) - "*Alist of folder and delete policy. +(defcustom wl-dispose-folder-alist '(("^-" . remove) + ("^@" . remove)) + "*Alist of folder and dispose policy. Each element is (folder-regexp . policy). The policy is one of the followings: @@ -1870,9 +2346,10 @@ POLICY is copy or move." :group 'wl-summary :group 'wl-pref) -(defcustom wl-folder-hierarchy-access-folders '("-" "-alt") - "*Access group folders to make hierarchy structure." - :type '(repeat (string :tag "Folder")) +(defcustom wl-folder-hierarchy-access-folders '("^-[^\\.]*\\(:\\|@\\|$\\)" + "^@$") + "*Access group REGEXPs to make hierarchy structure." + :type '(repeat (string :tag "Regexp")) :group 'wl-folder) (defcustom wl-folder-init-load-access-folders nil @@ -1952,6 +2429,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 @@ -2008,8 +2490,8 @@ ex. (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. @@ -2190,7 +2672,12 @@ This variable can also be a regex." ;; highilght about mouse (defcustom wl-use-highlight-mouse-line (and window-system (>= emacs-major-version 19)) - "*Highlight mouse line, if non nil." + "*Highlight mouse line, if non-nil." + :type 'boolean + :group 'wl-highlight) + +(defcustom wl-use-flag-folder-help-echo nil + "*Display help-echo in the flag folder if non-nil." :type 'boolean :group 'wl-highlight) @@ -2239,13 +2726,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) @@ -2256,22 +2752,19 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format." (defvar wl-modeline-biff-state-off wl-biff-state-indicator-off) ;; Advanced thread view. -(defvar wl-thread-indent-level 1 +(defvar wl-thread-indent-level (if wl-on-mule 1 2) "*Indent level for thread.") -(defvar wl-thread-have-younger-brother-str "┣" +(defvar wl-thread-have-younger-brother-str (if wl-on-mule "┣" "+") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-youngest-child-str "┗" +(defvar wl-thread-youngest-child-str (if wl-on-mule "┗" "+") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-vertical-str "┃" +(defvar wl-thread-vertical-str (if wl-on-mule "┃" "|") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-horizontal-str "━" +(defvar wl-thread-horizontal-str (if wl-on-mule "━" "-") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-space-str " " +(defvar wl-thread-space-str (if wl-on-mule " " " ") "*A string for thread branch line. It should contain one character.") -(defvar wl-highlight-thread-indent-string-regexp "[^[<]*" - "* A regexp string for thread indent...for highlight.") - ;; folder icons. filename relative to wl-icon-directory (defvar wl-opened-group-folder-icon "opened.xpm" "*Icon file for opened group folder.") @@ -2336,6 +2829,20 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format." ;;;; Obsolete variables. +;; 2003-11-05 +(elmo-define-obsolete-variable 'wl-summary-new-mark + 'wl-summary-new-uncached-mark) + +;; 2003-07-15 delete -> dispose +(elmo-define-obsolete-variable 'wl-delete-folder-alist + 'wl-dispose-folder-alist) + +;; 2002-12-25 +(elmo-define-obsolete-variable 'wl-draft-reply-myself-with-argument-list + 'wl-draft-reply-with-argument-list) +(elmo-define-obsolete-variable 'wl-draft-reply-myself-without-argument-list + 'wl-draft-reply-without-argument-list) + ;; 2001-12-11: *-dir -> *-directory (elmo-define-obsolete-variable 'wl-icon-dir 'wl-icon-directory) @@ -2344,7 +2851,7 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format." (elmo-define-obsolete-variable 'wl-score-files-dir 'wl-score-files-directory) (elmo-define-obsolete-variable 'wl-tmp-dir - 'wl-teporary-file-directory) + 'wl-temporary-file-directory) ;; 2001-12-10 (elmo-define-obsolete-variable 'wl-summary-update-confirm-threshold