X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=doc%2Fwl.texi;h=1438e2d5e3138ed71d1af7e64abe6f7a4dd82b2f;hb=ba6812fe5bd31605f3f4645a51403c609d3d72e4;hp=5efa585cdee9f26f7a8a66e9a60b768c070a4634;hpb=6aad918dc74444a74a77effff5938afdf9f00ad0;p=elisp%2Fwanderlust.git diff --git a/doc/wl.texi b/doc/wl.texi index 5efa585..1438e2d 100644 --- a/doc/wl.texi +++ b/doc/wl.texi @@ -4,7 +4,6 @@ @settitle Wanderlust -- Yet Another Message Interface On Emacsen -- @c %**end of header @documentlanguage en -@documentencoding us-ascii @include version.texi @synindex pg cp @finalout @@ -119,9 +118,10 @@ This manual is for Wanderlust @value{VERSION}. * Disconnected Operations:: Off-Line management * Expire and Archive:: Automatic expiration and archiving of messages * Scoring:: Score of the messages -* Split messages:: Splitting messages * Address Book:: Management of Address Book -* Customization:: Customizing Wanderlust +* Spam Filter:: Spam filtering +* Advanced Issues:: Advanced Issues +* Migration:: Switch from older version of Wanderlust * Terminology:: Terminologies * Mailing List:: Wanderlust mailing list * Addition:: Additional Information @@ -146,7 +146,7 @@ The main features of Wanderlust: @item Manages unread messages. @item Interactive thread display. @item Folder Mode shows the list of subscribed folders. -@item Message Cache, Disconnected Operation (Read Only). +@item Message Cache, Disconnected Operation. @item MH-like FCC. (Fcc: %Backup and Fcc: $Backup is allowed). @item MIME compliant (by SEMI). @item Transmission of news and mail are unified by Message transmitting draft. @@ -255,7 +255,7 @@ may help you.}. Recommended combination of APEL, FLIM and SEMI are following: @itemize @minus -@item APEL 10.4, FLIM 1.14.4 and SEMI 1.14.4 +@item APEL 10.6, FLIM 1.14.6 and SEMI 1.14.6 @end itemize You can also use many other FLIM/SEMI variants. Combination of the @@ -263,8 +263,8 @@ latest versions should work. For example, the following combination are confirmed to work. @itemize @minus -@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.4 -@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1 +@item APEL 10.6, SLIM 1.14.9, SEMI 1.14.5 +@item APEL 10.6, CLIME 1.14.5, EMIKO 1.14.1 @end itemize You have to re-install Wanderlust if you upgraded APEL, FLIM or SEMI. @@ -285,12 +285,10 @@ Mirrored ftp/http sites: @example @group -ftp://ftp.jaist.ac.jp/pub/GNU/elisp/ftp.gohome.org/wl/ +@c ftp://ftp.jaist.ac.jp/pub/GNU/elisp/ftp.gohome.org/wl/ http://www.jpl.org/elips/wl/ http://www.ring.gr.jp/archives/text/elisp/wl/ ftp://ftp.ring.gr.jp/pub/text/elisp/wl/ -ftp://opaopa.org/pub/mirror/elisp/wl/ -@c ftp://roguelife.org/pub/tsumura/wl/ @end group @end example @@ -673,9 +671,10 @@ This chapter describes the folder types which Wanderlust is able to handle. Wanderlust uses ELMO as it's interface, so you can use every folder types supported by ELMO. -As of version @value{VERSION}, 11 types of folders are predefined. These are -IMAP, NNTP, LocalDir(MH), Maildir, News Spool, Archive, POP, Multi, Filter, -Pipe and Internal folder types. +As of version @value{VERSION}, 15 types of folders are predefined. These +are IMAP, NNTP, LocalDir(MH), Maildir, News Spool, Archive, POP, +Shimbun, Search, Multi, Filter, Pipe, File, Access and Internal folder +types. @menu * IMAP Folder:: @samp{%} -- IMAP folder @@ -686,11 +685,13 @@ Pipe and Internal folder types. * Archive Folder:: @samp{$} -- Archive folder * POP Folder:: @samp{&} -- POP folder * Shimbun Folder:: @samp{@@} -- Shimbun Folder -* Namazu Folder:: @samp{[} -- Namazu Folder +* Search Folder:: @samp{[} -- Search Folder * Multi Folder:: @samp{*} -- Multi folder * Filter Folder:: @samp{/} -- Filter folder * Pipe Folder:: @samp{|} -- Pipe folder * Internal Folder:: @samp{'} -- Internal folder +* File Folder:: -- File folder +* Access Folder:: -- Access folder @end menu @@ -745,11 +746,14 @@ if you have to go through a firewall. @end lisp SSL (Secure Socket Layer) connection will be used if a folder name ends -with @samp{!}. Or, if the value of @code{elmo-imap4-default-stream-type} -is @code{ssl}, SSL will be the default connection. If a folder name -ends with @samp{!!}, STARTTLS connection will be established. If the -value of @code{elmo-imap4-default-stream-type} is @code{starttls}, -STARTTLS will be the default connection. +with @samp{!}. If a folder name ends with @samp{!!}, STARTTLS +connection will be established. + +If the value of @code{elmo-imap4-default-stream-type} is @code{ssl}, +SSL will be the default connection, i.e. you can omit @samp{!}. If it +is is @code{starttls}, STARTTLS will be the default connection. To use +normal connection in these cases, add @samp{!direct} at the end of +folder name. @lisp @group @@ -833,7 +837,7 @@ Format: @example @group -@samp{-} @var{newsgroup} [[@samp{:} @var{username}][@samp{@@} @var{hostname}][@samp{:} @var{port}]][@samp{!}] +@samp{-} @var{newsgroup} [@samp{:} @var{username}][@samp{@@} @var{hostname}][@samp{:} @var{port}][@samp{!}] @end group @end example @@ -848,12 +852,15 @@ default: @end example AUTHINFO is used as authentication method if the @var{username} is -non-nil. SSL will be default method if -@code{elmo-nntp-default-stream-type} is non-nil even if the folder name -doesn't end with @samp{!}. If a folder name ends with @samp{!!}, -STARTTLS connection will be established. if the value of -@code{elmo-nntp-default-stream-type} is @code{starttls}, STARTTLS will -be the default connection. +non-nil. SSL connection will be used if a folder name ends with @samp{!}. +If a folder name ends with @samp{!!}, STARTTLS connection will be +established. + +If the value of @code{elmo-nntp-default-stream-type} is @code{ssl}, +SSL will be the default connection, i.e. you can omit @samp{!}. If it +is is @code{starttls}, STARTTLS will be the default connection. To use +normal connection in these cases, add @samp{!direct} at the end of +folder name. Example: @@ -1219,7 +1226,7 @@ Format: @example @group -@samp{&} [@var{username}][[@samp{/} @var{authenticate-type}][@samp{:} @var{numbering-method}][@samp{@@} @var{hostname}][@samp{:} @var{port}]][@samp{!}] +@samp{&} [@var{username}][@samp{/} @var{authenticate-type}][@samp{:} @var{numbering-method}][@samp{@@} @var{hostname}][@samp{:} @var{port}][@samp{!}] @end group @end example @@ -1263,15 +1270,17 @@ To use apop as an @var{authenticate-type}, @file{md5.el} is needed (GPL2). If the last character of the folder name is @samp{!}, Wanderlust -connects to the POP server via SSL (Secure Socket Layer). If you set -non-nil value to @code{elmo-pop3-default-stream-type}, you don't have to put -@samp{!} in the end of the folder name to use SSL. If a folder name ends -with @samp{!!}, STARTTLS connection will be established. if the value -of @code{elmo-pop3-default-stream-type} is @code{starttls}, STARTTLS will be the -default connection. +connects to the POP server via SSL (Secure Socket Layer). If a folder +name ends with @samp{!!}, STARTTLS connection will be established. + +If the value of @code{elmo-pop3-default-stream-type} is @code{ssl}, +SSL will be the default connection, i.e. you can omit @samp{!}. If it +is is @code{starttls}, STARTTLS will be the default connection. To use +normal connection in these cases, add @samp{!direct} at the end of +folder name. -@node Shimbun Folder, Namazu Folder, POP Folder, Folders +@node Shimbun Folder, Search Folder, POP Folder, Folders @section Shimbun Folder @cindex @samp{@@} @cindex Shimbun Folder @@ -1311,33 +1320,68 @@ Example: @table @code @item elmo-shimbun-update-overview-folder-list @vindex elmo-shimbun-update-overview-folder-list -The initial setting is @code{nil}. You can specify a list of regular -expressions of shimbun folder names. The overview of matched shimbun -folder is updated when messages are fetched. -You should @kbd{s rescan} after fetching to update summary. +The initial setting is @code{all}. Specify a set of folders to update +overview when messages are fetched. Specify @code{all} to update +overview in all shimbun folders. You can specify a list of regular +expressions of shimbun folder names to restrict affected folders. + +Example: + +@example +(setq elmo-shimbun-update-overview-folder-list + '("^@@airs\\." "^@@namazu\\.")) +@end example + +Update summary view automatically after fetching. @end table -@node Namazu Folder, Multi Folder, Shimbun Folder, Folders -@section Namazu Folder +@node Search Folder, Multi Folder, Shimbun Folder, Folders +@section Search Folder @cindex @samp{[} -@cindex Namazu Folder -@cindex Folder, Namazu +@cindex Search Folder +@cindex Folder, Search @cindex Folder, Text Search -@pindex Namazu -@pindex nmz -A folder to access messages found in namazu-index with some condition. -It uses namazu (@uref{http://www.namazu.org/}) for search. + +A folder to access messages found by an external program with some +condition. Format: @example @group -@samp{[} @var{search condition} @samp{]} [ @var{absolute path of namazu index} ] +@samp{[} @var{search condition} @samp{]} [ @var{search target} [ @samp{!} @var{search engine} ] ] @end group @end example -Default value of the path of namazu index can be assigned by @code{elmo-nmz-default-index-path}. +The format of the @var{search condition} and @var{search target} depend +on the @var{search engine}. + +@subsection Supported search engines + +Supported search engines are following ones. Default search engine can +be assigned by @code{elmo-search-default-engine}. + +@menu +* namazu:: namazu +* grep:: grep +@end menu + + +@node namazu, grep, Search Folder, Search Folder +@subsection namazu +@pindex namazu + +The messages registered in the namazu-index is found by using namazu +(@uref{http://www.namazu.org/}). + +@var{search condition} is a query of namazu. Please refer to the +document of the attached to namazu for details. + +@var{search target} is a namazu-index used for search. The directory +with the index or the alias that explain in the following can be +specified. Default value of the path of namazu index can be assigned by +@code{elmo-search-namazu-default-index-path}. Example: @@ -1350,7 +1394,7 @@ Example: @end group @end example -@subsection TIPS +@c @subsection TIPS @subsubsection Enter space to separate keywords @@ -1363,7 +1407,7 @@ You can define an alias name for index. Example: @example -(setq elmo-nmz-index-alias-alist +(setq elmo-search-namazu-index-alias-alist '(("cache" . "~/.elmo/cache") ("docs" . "~/documents"))) @end example @@ -1380,15 +1424,15 @@ directory @file{~/.elmo/cache}. @subsubsection Multiple indices -You can specify a list for @code{elmo-nmz-default-index-path} and -@code{elmo-nmz-index-alias-alist}. +You can specify a list for @code{elmo-search-namazu-default-index-path} and +@code{elmo-search-namazu-index-alias-alist}. When list is specified, all index contained in the list is used as the namazu indices. Example: @example -(setq elmo-nmz-index-alias-alist +(setq elmo-search-namazu-index-alias-alist '(("all" . ("~/.elmo/cache" "~/documents")) ("cache" . "~/.elmo/cache"))) @end example @@ -1402,7 +1446,32 @@ Using above alias setting, you can specify to execute a namazu search with keyword @samp{wanderlust} using indices in the directory @file{~/.elmo/cache} and @file{~/documents}. -@node Multi Folder, Filter Folder, Namazu Folder, Folders +@node grep, , namazu, Search Folder +@subsection grep +@pindex grep + +The files that exists in the directory specified with the @var{search +target} are found by using grep. + +@var{search condition} is a regular expression of grep. The directory +as @var{search target} cannot be omitted. + +Example: + +@example +@group +[wanderlust]~/Mail/inbox!grep + -> search messages matched with "wanderlust" + from the directory "~/Mail/inbox" + +["[sr]emi"]~/Mail/semi!grep + -> If @samp{]} is included in regular expression, + @var{search condition} should be enclosed with @samp{"}. +@end group +@end example + + +@node Multi Folder, Filter Folder, Search Folder, Folders @section Multi Folder @cindex @samp{*} @cindex Multi Folder @@ -1445,6 +1514,7 @@ Example: @cindex Folder, Filtering @cindex Folder, Virtual @cindex Folder, Conditional +@cindex Flag A folder to access virtual folder which collects all messages that satisfy a condition. @@ -1476,8 +1546,8 @@ Example: @item Date filter: @samp{since:@var{date}}, @samp{before:@var{date}} -since: only messages arrived since @var{date} are picked. -before: only messages arrived before @var{date} are picked. +since: only messages arrived since @var{date} are picked (@var{date} is included). +before: only messages arrived before @var{date} are picked (@var{date} is not included). You can specify following as @var{date}. @@ -1521,9 +1591,48 @@ Example: @end example @item +Flag filter: @samp{flag:@var{flag-name}} + +Pick up messages with flag specified by @var{flag-name}. + +You can specify following flag names: + +@example +@group +unread -> unread +important -> important +answered -> replied +forwarded -> forwarded +digest -> unread or important +any -> unread or replied or forwarded or global-flag. +@end group +@end example + +You can also use flags which you have set as `global-flag'. global-flag +is a flag which has arbitrary name. You can put global-flag on messages +by invoking @code{wl-summary-set-flags} (Key @key{F}). By default, +@samp{important} flag is prepared. You can view messages with +global-flag by visiting the subfolder of @samp{'flag} folder. + +@xref{Internal Folder}. + +Example: + +@example +@group +/flag:digest/%inbox -> a folder consist of unread or important + message in %inbox. +/flag:wl/+ML/Wanderlust -> a folder consist of messages with global flag + wl in +ML/Wanderlust. +@end group +@end example + +@item Compound condition -If you combine conditions by character @samp{|}, it is considered as OR condition. @samp{&} is considered as AND condition, likewise. +A condition starting with @samp{!} indicates a negation. +If you combine conditions by character @samp{|}, it is considered as OR condition. +@samp{&} is considered as AND condition, likewise. Condition can be grouped by parentheses (@samp{(}, and @samp{)}). @samp{/tocc:xxxx/} is an abbreviation of @samp{/to:xxxx|cc:xxxx/}. @@ -1640,11 +1749,12 @@ Example: After messages are moved, a hook @code{elmo-pipe-drained-hook} is called. -@node Internal Folder, , Pipe Folder, Folders +@node Internal Folder, File Folder, Pipe Folder, Folders @section Internal folder @cindex @samp{'} @cindex Internal Folder @cindex Folder, @samp{$} mark +@cindex Flag @cindex Cache @c @cindex Folder, Null @@ -1654,25 +1764,27 @@ Format: @example @group -'mark -'sendlog -'cache/00 - 1F +@samp{'flag} [@samp{/} @var{global-flag}] +@samp{'sendlog} +@samp{'cache/00} - @samp{'cache/1F} @end group @end example -A folder named @samp{'mark} is a special virtual folder which collects -messages which have important mark @samp{$}. +A folder named @samp{'flag} is a special virtual folder which collects +messages which have @var{global-flag}. +There is @samp{important} flag defined as @var{global-flag} by default. You can review important messages at once after you put important marks -on the messages in the different folders. +on the messages in the different folders. If @var{global-flag} is omitted, +it is treated as @samp{important} flag is specified. -In this folder, if you delete message, important mark @samp{$} put on -the message is removed. If you append messages to this folder, the -message will have @samp{$} mark. +In addition, in summary mode, to be described later, you can freely +define global flags and put them on messages. +@xref{Usage of Summary Mode}. -(Can't remove important mark @samp{$} on IMAP server from @samp{'mark} -folder. If you want IMAP folder's message remove from @samp{'mark} -folder, remove important mark at IMAP Folder.) +In this folder, if you delete message, @var{global-flag} put on the +message is removed. If you append messages to this folder, the message +will have @var{global-flag}. A folder named @samp{'sendlog} is a virtual folder which collects @@ -1688,6 +1800,54 @@ the name of the subdirectories of the cache directory (@file{~/.elmo/cache}). +@node File Folder, Access Folder, Internal Folder, Folders +@section File folder +@cindex File Folder + +File Folder gives the view for local file system. +The one File Folder corresponds to the one directory. + +Format: + +@example +@samp{file:} @var{Path-of-the-directory} +@end example + +Example: + +@example +@group +file:~/work -> @file{~/work} +file:/etc -> @file{/etc} +@end group +@end example + + +@node Access Folder, , File Folder, Folders +@section Access folder +@cindex Access Folder + +A folder to access virtual folder which collects messages from a root +folder and subfolders of one. The add and remove of the subfolder is +automatically reflected. + + +Format: + +@example +@samp{access:} @var{root-folder} +@end example + +Example: + +@example +@group +access:%INBOX -> All subfolders of IMAP mailbox "inbox". +access:'cache -> All of 'cache folder +@end group +@end example + + @node Folder, Summary, Folders, Top @chapter Folder mode @cindex Folder @@ -1851,22 +2011,26 @@ current cursor point. @item N @kindex N (Folder) +@findex wl-folder-next-unread Jump cursor to the folder which have unread messages on the downward from current cursor point. (@code{wl-folder-next-unread}) @item p @kindex p (Folder) +@findex wl-folder-prev-entity Move cursor to the folder on the previous line. (@code{wl-folder-prev-entity}) @item n @kindex n (Folder) +@findex wl-folder-next-entity Move cursor to the folder on the next line. (@code{wl-folder-next-entity}) @item J @kindex J (Folder) +@findex wl-folder-jump-folder Jump to the folder specified by the user input. (@code{wl-folder-jump-folder}) @@ -1906,7 +2070,7 @@ Flush queue. @item V @kindex V (Folder) @findex wl-folder-virtual -Move to the virtual folder with the condition specified. +Move to the virtual folder (filter folder) with the condition specified. (@code{wl-folder-virtual}) @item ? @@ -1921,44 +2085,57 @@ Search the folders with the condition specified. All unread folder is opened. (@code{wl-folder-open-all-unread-folder}) +@item x +@kindex x (Folder) +@findex wl-execute-temp-marks +Execute marks in summary buffers. @xref{Sticky Summary}. +(@code{wl-execute-temp-marks}) + @item / @kindex / (Folder) @findex wl-folder-open-close Folder group is opened/closed. -(@code{wl-thread-open-close}) +(@code{wl-folder-open-close}) @item [ @kindex [ (Folder) +@findex wl-folder-open-all All folder group is opened. (@code{wl-folder-open-all}) @item ] @kindex ] (Folder) +@findex wl-folder-close-all All folder group is closed. (@code{wl-folder-close-all}) @item q @kindex q (Folder) +@findex wl-exit Quit Wanderlust. (@code{wl-exit}) @item z @kindex z (Folder) +@findex wl-folder-suspend Suspend Wanderlust. (@code{wl-folder-suspend}) @item M-s @kindex M-s (Folder) +@findex wl-save Save current folder status. (@code{wl-save}) @item M-t @kindex M-t (Folder) +@findex wl-toggle-plugged Toggle Wanderlust's offline/online status. (@code{wl-toggle-plugged}) @item C-t @kindex C-t (Folder) +@findex wl-plugged-change Start Wanderlust's plug-status manager. (@code{wl-plugged-change}) @end table @@ -2049,15 +2226,6 @@ Example: @item wl-folder-hierarchy-access-folders @vindex wl-folder-hierarchy-access-folders -The initial setting is the list shown below: - -@lisp -@group -("^-$" "^-alt$") -@end group -@end lisp - -@noindent A list of regular expressions for access groups which creates children folder list hierarchically. @@ -2067,7 +2235,7 @@ For example, if you specify @lisp @group (setq wl-folder-hierarchy-access-folders - '("^-$" "^-alt$" "^-japan$" "^-comp$" "^-comp.unix$")) + '("^-[^\\.]*$" "^-comp.unix$" "^-comp.unix.bsd$")) @end group @end lisp @@ -2115,7 +2283,8 @@ You can append, delete, edit folders from folder mode. @subsubsection Append Folder -@kbd{m a} appends new folder to the folder mode. +@kbd{m a} appends new folder to your folder list. If you enter non-existent +folder, it will ask you to create a new one. @kbd{m g} appends new folder group. To append new folder to this group, firstly open it, then execute append command in the next line. @@ -2232,7 +2401,8 @@ one stroke key binding. @item m a @kindex m a (Folder) @findex wl-fldmgr-add -Insert a folder. +Add specified folder to your folder list . If you enter non-existent +folder, create it after confirmation. (@code{wl-fldmgr-add}) @item + @@ -2483,6 +2653,7 @@ mode. * Auto Refile:: Auto refile settings * Sticky Summary:: Summary make sticky * Summary View:: Format of summary lines +* Mark and Action:: Temporary marks and their effect * Key Bindings of Summary:: Key bindings * Variables of Summary:: Customize Summary Mode @end menu @@ -2544,8 +2715,8 @@ message has empty subject field. @subsection Temporary Marks @cindex Mark, Temporary -There are four temporary marks, -@samp{*}, @samp{D}, @samp{o} and @samp{O}. +There are seven temporary marks, +@samp{*}, @samp{d}, @samp{D}, @samp{o}, @samp{O}, @samp{i} and @samp{~}. Temporary marks indicates message operations. @table @samp @@ -2554,8 +2725,11 @@ Target mark. You can execute a command on the all messages that have @samp{*} mark, with the key bindings which begins with @kbd{m}. +@item d +The mark to dispose. You can put @samp{d} by typing @kbd{d} key. + @item D -The mark to delete. You can put @samp{D} by typing @kbd{d} key. +The mark to force delete. You can put @samp{D} by typing @kbd{D} key. @item o The mark to refile. @@ -2567,14 +2741,23 @@ The mark to refile. You can put this mark by typing @kbd{O} key. The difference between this mark and refile mark is, this mark does not delete the message while latter does. + +@item i +The mark to prefetch reserved. +You can put this mark by typing @kbd{i} key. + +@item ~ +The mark to resend reserved. +After you type @kbd{~} key, prompt appears to input address to resend. +Your answer is printed in the summary line. @end table -@kbd{x} key executes @samp{D}, @samp{o} and @samp{O} marks. +@kbd{x} key executes action for temporary marks, respectively. @subsection Persistent Marks -There are five persistent marks, -@samp{N}, @samp{U}, @samp{!}, @samp{u} and @samp{$}. +There are ten persistent marks, @samp{!}, @samp{N}, @samp{n}, @samp{U}, +@samp{u}, @samp{A}, @samp{a}, @samp{F}, @samp{f} and @samp{$}. The persistent mark indicates the message's status and it is saved. Each persistent mark indicates: @@ -2582,28 +2765,44 @@ Each persistent mark indicates: @table @samp @item N It is new message. +@item n +It is new message. It differs from @samp{N} that message with @samp{n} +is already cached. @item U It is unread message. -@item ! -It is unread but cached message. @item u -It is read but it is not cached. +It is unread message. It differs from @samp{U} that message with @samp{u} +is already cached. +@item ! +It is message already read. It differs from message without mark that +message with @samp{!} is not cached yet. +@item A +It is already replied message. +@item a +It is already replied message. It differs from @samp{A} that message +with @samp{a} is already cached. +@item F +It is already forwarded message. +@item f +It is already forwarded message. It differs from @samp{F} that message +with @samp{f} is already cached. @item $ -It is important message. You can put @samp{$} mark by typing @kbd{$} -key (if already exists, the mark is deleted). It is convenient to put -this mark on the messages to remember (If you want to remember to write -a reply for the message, for example) because this mark remains after -you exited Emacs. Messages with the @samp{$} mark can be reviewed in the -@samp{'mark} folder even the message itself is deleted in the actual folder. +It is a message with some global flag. It is convenient to put this +mark on the messages to remember (If you want to remember to write a +reply for the message, for example) because this mark remains after +you exited Emacs. Messages with the @samp{$} mark can be reviewed in +the @samp{'flag} folder even the message itself is deleted in the actual +folder. You can put global flag by typing @kbd{$} or @kbd{F} key. @item None If the message is read and cached (or local message),there are no persistent mark. @end table -@samp{N}, @samp{U} and @samp{u} indicates that the message have no -cache. Messages with the marks other than these, you can read them in -the offline status even they are in the IMAP folder or netnews folder. +@samp{N}, @samp{U}, @samp{!}, @samp{A}, @samp{F} indicates that the +message have no cache. Messages with the marks other than these, you +can read them in the offline status even they are in the IMAP folder or +netnews folder. Among messages with persistent marks, ones with marks specified by @code{wl-summary-expire-reserve-marks} are excluded from the expiration @@ -2695,22 +2894,13 @@ variables. @table @code @item wl-message-buffer-prefetch-folder-type-list @vindex wl-message-buffer-prefetch-folder-type-list -The initial setting is @code{t}. In this case, prefetch messages in all -folders. -If it is a list of folder types, it specifies the folder types in which -message prefetching is enabled. -Following is an example (prefetch messages in nntp and imap4 folders) - -@lisp -@group -(setq wl-message-buffer-prefetch-folder-type-list - '(nntp imap4)) -@end group -@end lisp - -In this case, multi folder that contains localdir and imap4 prefetches -only imap4 messages. This variable precedes the value of +The initial setting is @code{'(imap4 nntp)}. If it is a list of folder +types, it specifies the folder types in which message prefetching is +enabled. In initial setting, messages are prefetch only in the nntp and +imap4 folders. In this case, multi folder that contains localdir and +imap4 prefetches only imap4 messages. This variable precedes the value of @code{wl-message-buffer-prefetch-folder-list}. +To prefetch messages in all folder types, specify @code{t}. @item wl-message-buffer-prefetch-folder-list @vindex wl-message-buffer-prefetch-folder-list @@ -2719,11 +2909,11 @@ A list of regexp of folders to enable message prefetching. @item wl-message-buffer-prefetch-depth @vindex wl-message-buffer-prefetch-depth -The initial setting is 3. The number of messages for automatical prefetch. +The initial setting is 1. The number of messages for automatical prefetch. @item wl-message-buffer-prefetch-idle-time @vindex wl-message-buffer-prefetch-idle-time -The initial setting is 0.2 (in seconds). The period of automatical prefetch. +The initial setting is 1 (in seconds). The period of automatical prefetch. @item wl-message-buffer-prefetch-threshold @vindex wl-message-buffer-prefetch-threshold @@ -2867,7 +3057,7 @@ are same as normal summary. are automatically stuck. -@node Summary View, Key Bindings of Summary, Sticky Summary, Summary +@node Summary View, Mark and Action, Sticky Summary, Summary @section Format of summary lines @cindex Format of summary lines You can alter the format of lines in Summary mode. @@ -2886,8 +3076,19 @@ An example follows. @end group @end lisp -Where the number set the column number of the field (for negative value, -filled from right) +Where the number set the column number of the field. If negative value, +the column is filled from right. If the number begins with @samp{0}, +@samp{0} is used for filling columns instead of @samp{ }. + +Example: + +@example +@group +%5n -> `1 ' +%-05n -> `00001' +@end group +@end example + Major control strings defined by @code{wl-summary-line-format-spec-alist} are displayed in the following list. @@ -2895,6 +3096,8 @@ are displayed in the following list. @example @group %n message number +%T temporary mark +%P persistent mark %Y year %M month %D day @@ -2909,14 +3112,15 @@ are displayed in the following list. %S size %c +number-of-children: (display only for opened thread) %C [+number-of-children] (display only for opened thread) -%T temporary mark (mandatory) -%P persistent mark (mandatory) +%# mailing list information (`(' ML-name [ ` ' ML-number ] `)') +%l number in the mailing list +%@@ `@@' only if the first MIME part is multipart/mixed +%~ ` ' only if previous column is not empty @end group @end example -@code{wl-summary-line-format} must contain temporary mark (@samp{%T}) -and persistent mark (@samp{%P}). Furthermore, these marks must appear at -the constant column. For example, if you specify @samp{%T} or +The temporary mark (@samp{%T}) and persistent mark (@samp{%P}) must +appear at the constant column. For example, if you specify @samp{%T} or @samp{%P} after the @samp{%t}, which changes its length by thread position, marks are not treated correctly. @@ -2962,7 +3166,55 @@ its sender is yourself, set up as follows. @end lisp -@node Key Bindings of Summary, Variables of Summary, Summary View, Summary +@node Mark and Action, Key Bindings of Summary, Summary View, Summary +@section Temporary marks and their effect +@cindex Mark and Action + +You can define temporary marks and corresponding procedure by +@code{wl-summary-mark-action-list}. Initially, refile (@samp{o}), copy +(@samp{O}), dispose (@samp{d}), delete (@samp{D}), prefetch (@samp{i}) +and resend (@samp{~}) are defined. + +Each element of @code{wl-summary-mark-action-list} consists of + +@example +(@samp{MARK} @samp{SYMBOL} + @samp{ARGUMENT-FUNCTION} @samp{SET-MARK-FUNCTION} @samp{EXEC-FUNCTION} + @samp{FACE} @samp{DOC-STRING}) +@end example + +@samp{MARK} is a temporary mark string, and @samp{SYMBOL} is the name of +the action to be defined. @samp{ARGUMENT-FUNCTION} is a function to +generate argument to be given to @samp{SET-MARK-FUNCTION}, which will be +described next, and it takes arguments: + +@example +(@samp{ACTION} @samp{NUMBER}) +@end example + +Where @samp{ACTION} equals to @samp{SYMBOL}, and @samp{NUMBER} is message +number. @samp{SET-MARK-FUNCTION} is a function to be called when the mark +is put. It takes arguments: + +@example +(@samp{NUMBER} @samp{MARK} @samp{DATA}) +@end example + +Where @samp{NUMBER} is target message number, @samp{MARK} is a temporary +mark string, and @samp{DATA} is given by @samp{ARGUMENT-FUNCTION}. + +@samp{EXEC-FUNCTION} is a function to be called when the action is +executed. Its argument is a list of @samp{MARK-INFO}. Here @samp{MARK-INFO} +means a list consists of + +@example +(@samp{NUMBER} @samp{MARK} @samp{DATA}) +@end example + +@samp{FACE} is a face to be used for highlighting. + + +@node Key Bindings of Summary, Variables of Summary, Mark and Action, Summary @section Key bindings @cindex Keybind, Summary Mode @cindex Keybind, Summary Buffer @@ -2979,11 +3231,12 @@ Proceed reading a message at the current cursor point. @item . @kindex . (Summary) @findex wl-summary-redisplay -Redisplay a message at the current cursor point. -If this command is called with prefix argument, -Redisplay message regardless of the message cache (message is re-loaded -from source). -(@code{wl-summary-redisplay}) +Redisplay a message at the current cursor point with default display +type. If this command is called with prefix argument, reload and redisplay +message regardless of the message cache. +If this command is called with twice multiples @kbd{C-u} as @kbd{C-u C-u .}, +reload and redisplay message with current display type regardless of the +message cache. (@code{wl-summary-redisplay}) @item < @kindex < (Summary) @@ -3007,10 +3260,13 @@ Display the previous page of the message at the current cursor point. @item @key{RET} @kindex @key{RET} (Summary) -@findex wl-summary-next-line-content +@findex wl-summary-enter-handler Display the next line of the message at the current cursor point. -Display the message at the current cursor point if it is not displayed yet. -(@code{wl-summary-next-line-content}) +Display the message at the current cursor point if it is not displayed +yet. (@code{wl-summary-next-line-content}) If prefix argument is +specified, message is scrolled up by one line. +(@code{wl-summary-prev-line-content}) If prefix argument is numeric, +cursor is jumped to the message with specified number. @item - @itemx M-@key{RET} @@ -3025,6 +3281,7 @@ Display the message at the current cursor point if it is not displayed yet. @kindex / (Summary) @findex wl-thread-open-close Toggle open or close the thread at the current cursor point. +With prefix argument, open all children threads. (@code{wl-thread-open-close}) @item [ @@ -3078,8 +3335,8 @@ If the message at current cursor point is your own netnews article, a draft for `supersedes message' for the message is prepared. (@code{wl-summary-reedit}) -@item M-e -@kindex M-e (Summary) +@item M-E +@kindex M-E (Summary) @findex wl-summary-resend-bounced-mail If the message at current cursor point is a bounced message, a draft for re-sending original message is prepared. @@ -3094,10 +3351,20 @@ A draft for forwarding the message at current cursor point is prepared. @item $ @kindex $ (Summary) @findex wl-summary-mark-as-important -Put @samp{$} mark on the message at current cursor point. -If already marked as @samp{$}, delete it. +Put @samp{important} flag on the message at current cursor point. +If already flagged as @samp{important}, remove the flag. If it is +called with prefix argument, ask global flag to put similarly to @kbd{F}. (@code{wl-summary-mark-as-important}) +@item F +@kindex F (Summary) +@findex wl-summary-set-flags +Put arbitrary global flag entered in the minibuffer. If you use Emacs +21 or later, you can specify multiple flags separated by @samp{,} +simultaneously. If it is called with prefix argument, remove existent +global flags. +(@code{wl-summary-set-flags}) + @item y @itemx e @kindex y (Summary) @@ -3167,15 +3434,39 @@ list folder (refile destination), guess @samp{To:} field and completed @item H @kindex H (Summary) -@findex wl-summary-redisplay-all-header -Redisplay the message at current cursor point with all header fields. -(@code{wl-summary-redisplay-all-header}) +@findex wl-summary-toggle-all-header +Toggle display type between all and partial header fields and redisplay +the message at current cursor point. If this command is called with +prefix argument, reload and redisplay message regardless of the message cache. +If this command is called with twice multiples @kbd{C-u} as @kbd{C-u C-u H}, +set default display type of summary by current display type of header fields. +(@code{wl-summary-toggle-all-header}) @item M @kindex M (Summary) -@findex wl-summary-redisplay-no-mime -Redisplay the message at current cursor point without MIME analysis. -(@code{wl-summary-redisplay-no-mime}) +@findex wl-summary-toggle-mime +Toggle display type for MIME analysis and redisplay the message at +current cursor point. A change is performed in the order set as +@code{wl-summary-display-mime-mode-list}. If this command is called +with numeric prefix argument, it switch directly as follows. + +@example +@group +1: Enable MIME analysis. +2: Enable MIME analysis only for header fields. +3: Disable MIME analysis. +@end group +@end example + +If this command is called with twice multiples @kbd{C-u} as @kbd{C-u C-u +M}, set default display type of summary by current display type of MIME +analysis. (@code{wl-summary-toggle-mime}) + +@item C-c C-f +@kindex C-c C-f (Summary) +@findex wl-summary-toggle-header-narrowing +Toggle header body narrowing of the message at current cursor point. +(@code{wl-summary-toggle-header-narrowing}) @item B @kindex B (Summary) @@ -3269,18 +3560,31 @@ Mark as unread the message at current cursor point. @item s @kindex s (Summary) @findex wl-summary-sync -Synchronize summary view after prompting the update range -(@samp{all}, @samp{update}, @samp{rescan}, @samp{first}, @samp{last}). +Synchronize summary view after prompting the update range. +You can specify one of the follows. @example @group -all ...Discard current summary and update all message. -all-visible ...Discard current summary and update all visible message. -update ...Update the difference between summary and the folder itself. -rescan ...Rescan the msgdb and display again. -rescan-noscore ...Rescan the msgdb and display again (without scoring). -cache-status ...Sync the all marks with the real status of cache. -first, last ...Move to the filter folder(partial filter). +all Discard present msgdb and retrieve all informations. + Do not retrieve killed messages. +all-entirely Discard present msgdb and retrieve all informations. + Retrieve killed messages, too. +update Update the difference between informations in present + msgdb and in current folder instance. + Do not retrieve killed messages. +update-entirely Update the difference between informations in present + msgdb and in current folder instance. + Retrieve killed messages, too. +rescan Redisplay summary by rescanning present msgdb. +rescan-noscore Redisplay summary by rescanning present msgdb. + Display messages killed by score, too. +rescan-thread Redisplay summary by rescanning present msgdb. + Reconstruct thread, too. +cache-status Sync the all marks with the real status of cache. +mark Update marks. +no-sync Do nothing. +first:NUM Move to the filter folder(partial filter). +last:NUM Move to the filter folder(partial filter). @end group @end example @@ -3291,13 +3595,17 @@ first, last ...Move to the filter folder(partial filter). @kindex S (Summary) @findex wl-summary-sort Sort summary order. -You can sort by @samp{date}, @samp{from}, @samp{number} and @samp{subject}. +You can sort by @samp{date}, @samp{from}, @samp{number}, @samp{subject}, +@samp{size} and @samp{list-info}. +With prefix argument, sort summary lines into descending order. (@code{wl-summary-sort}) @item T @kindex T (Summary) @findex wl-summary-toggle-thread -Toggle the threading. +Toggle the threading. The state will be preserved after exiting +Wanderlust. You can alter default state for newly created summary +by @code{wl-summary-default-view} or @code{wl-summary-default-view-alist}. Threading status is displayed on the modeline. @samp{@{S@}} means threading is off (Sequence) and @samp{@{T@}} means threading is on (Thread). @@ -3317,7 +3625,7 @@ Toggle displaying of message window. @item V @kindex V (Summary) -Move to the virtual folder with the condition specified. +Move to the virtual folder (filter folder) with the condition specified. If called with prefix argument and current folder is virtual, exit it. @findex wl-summary-virtual (@code{wl-summary-virtual}) @@ -3331,6 +3639,10 @@ Jump to the message which is displayed last. @item ? @kindex ? (Summary) Put @samp{*} mark on the messages that satisfies the specified condition. +If messages already have @samp{*} mark, new @samp{*} marks are overridden. +If prefix argument is specified, current @samp{*} marks are removed and +new @samp{*} marks are appended. + @findex wl-summary-pick (@code{wl-summary-pick}) @@ -3340,16 +3652,9 @@ Put @samp{*} mark on the messages that satisfies the specified condition. Mark as read the message at the current cursor point. (@code{wl-summary-mark-as-read}) -@item i -@kindex i (Summary) -Prefetch the message at the current cursor point. -With prefix argument, prefetch the message even if it is cached. -@findex wl-summary-prefetch -(@code{wl-summary-prefetch}) - @item x @kindex x (Summary) -Execute @samp{D}, @samp{o} and @samp{O} marks. +Execute action for all temporary marks in the summary buffer. @findex wl-summary-exec (@code{wl-summary-exec}) @@ -3357,13 +3662,13 @@ Execute @samp{D}, @samp{o} and @samp{O} marks. @kindex * (Summary) @findex wl-summary-target-mark-line Put target mark on the message at the current cursor point. -(@code{wl-summary-target-mark-line}) +(@code{wl-summary-target-mark-line}) @xref{Mark and Action}. @item o @kindex o (Summary) Put refile mark on the message at the current cursor point. @findex wl-summary-refile -(@code{wl-summary-refile}) +(@code{wl-summary-refile}) @xref{Mark and Action}. @item C-o @kindex C-o (Summary) @@ -3375,7 +3680,7 @@ Execute auto refile. @kindex O (Summary) Put copy mark on the message at the current cursor point. @findex wl-summary-copy -(@code{wl-summary-copy}) +(@code{wl-summary-copy}) @xref{Mark and Action}. @item M-o @kindex M-o (Summary) @@ -3386,9 +3691,29 @@ previously specified. @item d @kindex d (Summary) +@findex wl-summary-dispose +Put disposal mark on the message at the current cursor point. +The result of disposal is controlled by @code{wl-dispose-folder-alist}, +refiled to @code{wl-trash-folder} by default. +(@code{wl-summary-dispose}) @xref{Mark and Action}. + +@item D +@kindex D (Summary) @findex wl-summary-delete -Put delete mark on the message at the current cursor point. -(@code{wl-summary-delete}) +Put force deletion mark on the message at the current cursor point. +(@code{wl-summary-delete}) @xref{Mark and Action}. + +@item i +@kindex i (Summary) +Put prefetch reservation mark on the message at the current cursor point. +@findex wl-summary-prefetch +(@code{wl-summary-prefetch}) @xref{Mark and Action}. + +@item ~ +@kindex ~ (Summary) +@findex wl-summary-resend +Put resend reservation mark on the message at the current cursor point. +(@code{wl-summary-resend}) @xref{Mark and Action}. @item u @kindex u (Summary) @@ -3411,26 +3736,27 @@ Mark as read messages in the specified region. @item r $ @kindex r $ (Summary) @findex wl-summary-mark-as-important-region -Mark as important @samp{$} messages in the specified region. -If @samp{$} already exists, it is deleted. +Put @samp{important} flag on messages in the specified region. +If already flagged as @samp{important}, remove the flag. (@code{wl-summary-mark-as-important-region}) +@item r F +@kindex r F (Summary) +@findex wl-summary-set-flags-region +Put arbitrary global flag entered in the minibuffer on messages in +specified region. +(@code{wl-summary-set-flags-region}) + @item r ! @kindex r ! (Summary) @findex wl-summary-mark-as-unread-region Mark as unread messages in the specified region. (@code{wl-summary-mark-as-unread-region}) -@item r i -@kindex r i (Summary) -@findex wl-summary-prefetch-region -Prefetch messages in the specified region. -(@code{wl-summary-prefetch-region}) - @item r x @kindex r x (Summary) @findex wl-summary-exec-region -Execute @samp{D}, @samp{o} and @samp{O} marks on the messages in the +Execute action for each temporary marks on the messages in the specified region. (@code{wl-summary-exec-region}) @@ -3438,25 +3764,37 @@ specified region. @kindex r * (Summary) @findex wl-summary-target-mark-region Put target mark on the messages in the specified region. -(@code{wl-summary-target-mark-region}) +(@code{wl-summary-target-mark-region}) @xref{Mark and Action}. @item r o @kindex r o (Summary) @findex wl-summary-refile-region Put refile mark on the messages in the specified region. -(@code{wl-summary-refile-region}) +(@code{wl-summary-refile-region}) @xref{Mark and Action}. @item r O @kindex r O (Summary) @findex wl-summary-copy-region Put copy mark on the messages in the specified region. -(@code{wl-summary-copy-region}) +(@code{wl-summary-copy-region}) @xref{Mark and Action}. @item r d @kindex r d (Summary) +@findex wl-summary-dispose-region +Put disposal mark on the messages in the specified region. +(@code{wl-summary-dispose-region}) @xref{Mark and Action}. + +@item r D +@kindex r D (Summary) @findex wl-summary-delete-region -Put delete mark on the messages in the specified region. -(@code{wl-summary-delete-region}) +Put force deletion mark on the messages in the specified region. +(@code{wl-summary-delete-region}) @xref{Mark and Action}. + +@item r i +@kindex r i (Summary) +@findex wl-summary-prefetch-region +Put prefetch reservation mark on messages in the specified region. +(@code{wl-summary-prefetch-region}) @xref{Mark and Action}. @item r u @kindex r u (Summary) @@ -3480,12 +3818,20 @@ With prefix argument, it affects on the all messages in the thread tree. @item t $ @kindex t $ (Summary) @findex wl-thread-mark-as-important -Put important mark @samp{$} on the messages which are the -descendant of the current thread. -If @samp{$} mark exists, it is deleted. -With prefix argument, it affects on the all messages in the thread tree. +Put @samp{important} flag on the messages which are the descendant of +the current thread. If already flagged as @samp{important}, remove the +flag. With prefix argument, it affects on the all messages in the +thread tree. (@code{wl-thread-mark-as-important}) +@item t F +@kindex t F (Summary) +@findex wl-thread-set-flags +Put arbitrary global flag entered in the minibuffer on the messages +which are the descendant of the current thread. With prefix argument, +it affects on the all messages in the thread tree. +(@code{wl-thread-set-flags}) + @item t ! @kindex t ! (Summary) @findex wl-thread-mark-as-unread @@ -3493,17 +3839,10 @@ Mark as unread messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. (@code{wl-thread-mark-as-unread}) -@item t i -@kindex t i (Summary) -@findex wl-thread-prefetch -Prefetch messages which are the descendant of the current thread. -With prefix argument, it affects on the all messages in the thread tree. -(@code{wl-thread-prefetch}) - @item t x @kindex t x (Summary) @findex wl-thread-exec -Execute @samp{D}, @samp{o} and @samp{O} marks on the messages which are +Execute action for temporary marks on the messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. (@code{wl-thread-exec}) @@ -3514,28 +3853,42 @@ on the all messages in the thread tree. Put target mark @samp{*} on the messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. -(@code{wl-thread-target-mark}) +(@code{wl-thread-target-mark}) @xref{Mark and Action}. @item t o @kindex t o (Summary) @findex wl-thread-refile Put refile mark on the messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. -(@code{wl-thread-refile}) +(@code{wl-thread-refile}) @xref{Mark and Action}. @item t O @kindex t O (Summary) @findex wl-thread-copy Put copy mark on the messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. -(@code{wl-thread-copy}) +(@code{wl-thread-copy}) @xref{Mark and Action}. @item t d @kindex t d (Summary) -@findex wl-thread-delete -Put delete mar on the messages which are the descendant of the current thread. +@findex wl-thread-dispose +Put disposal mark on the messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. -(@code{wl-thread-delete}) +(@code{wl-thread-dispose}) @xref{Mark and Action}. + +@item t D +@kindex t D (Summary) +@findex wl-thread-delete +Put force deletion mark on the messages which are the descendant of the +current thread. +(@code{wl-thread-delete}) @xref{Mark and Action}. + +@item t i +@kindex t i (Summary) +@findex wl-thread-prefetch +Put prefetch reservation mark on messages which are the descendant of +the current thread. +(@code{wl-thread-prefetch}) @xref{Mark and Action}. @item t u @kindex t u (Summary) @@ -3552,13 +3905,6 @@ Save messages which are the descendant of the current thread. With prefix argument, it affects on the all messages in the thread tree. (@code{wl-thread-save}) -@item m i -@kindex m i (Summary) -@findex wl-summary-target-mark-prefetch -Prefetch all messages which have target mark @samp{*}. -With prefix argument, prefetch all targets even if some of them are cached. -(@code{wl-summary-target-mark-prefetch}) - @item m R @kindex m R (Summary) @findex wl-summary-target-mark-mark-as-read @@ -3568,10 +3914,17 @@ Mark as read all messages which have target mark @samp{*}. @item m $ @kindex m $ (Summary) @findex wl-summary-target-mark-mark-as-important -Mark as important all messages which have target mark @samp{*}. -If already marked as @samp{$}, it is deleted. +Put @samp{important} flag on all messages which have target mark @samp{*}. +If already flagged as @samp{important}, remove the flag. (@code{wl-summary-target-mark-mark-as-important}) +@item m F +@kindex m F (Summary) +@findex wl-summary-target-mark-set-flags +Put arbitrary global flag entered in the minibuffer on all messages +which have target mark @samp{*}. +(@code{wl-summary-target-mark-set-flags}) + @item m ! @kindex m ! (Summary) @findex wl-summary-target-mark-mark-as-unread @@ -3582,19 +3935,31 @@ Mark as unread all messages which have target mark @samp{*}. @kindex m o (Summary) @findex wl-summary-target-mark-refile Put refile mark on the messages which have target mark @samp{*}. -(@code{wl-summary-target-mark-refile}) +(@code{wl-summary-target-mark-refile}) @xref{Mark and Action}. @item m O @kindex m O (Summary) @findex wl-summary-target-mark-copy Put copy mark on the messages which have target mark @samp{*}. -(@code{wl-summary-target-mark-copy}) +(@code{wl-summary-target-mark-copy}) @xref{Mark and Action}. @item m d @kindex m d (Summary) +@findex wl-summary-target-mark-dispose +Put disposal mark on the messages which have target mark @samp{*}. +(@code{wl-summary-target-mark-dispose}) @xref{Mark and Action}. + +@item m D +@kindex m D (Summary) @findex wl-summary-target-mark-delete -Put delete mark on the messages which have target mark @samp{*}. -(@code{wl-summary-target-mark-delete}) +Put force deletion mark on the messages which have target mark @samp{*}. +(@code{wl-summary-target-mark-delete}) @xref{Mark and Action}. + +@item m i +@kindex m i (Summary) +@findex wl-summary-target-mark-prefetch +Put prefetch reservation mark on messages which have target mark @samp{*}. +(@code{wl-summary-target-mark-prefetch}) @xref{Mark and Action}. @item m y @kindex m y (Summary) @@ -3765,7 +4130,7 @@ folder is moved. @item wl-summary-weekday-name-lang @vindex wl-summary-weekday-name-lang -The initial setting is @samp{ja}. Specify language of the weekday. +Specify language of the weekday. @samp{en} displays English, @samp{fr} displays French, @samp{de} displays Deutsch. You should rescan summary view after changing this value. @@ -3786,22 +4151,38 @@ If non-nil, sender part displays nickname. The initial setting is @code{t}. If non-nil, message is split as pages by @samp{^L}. -@item wl-message-window-size -@vindex wl-message-window-size -The initial setting is '(1 . 4). -A cons cell to specify the rate of summary and message window. -car:cdr corresponds summary:message. +@item wl-summary-from-function +@vindex wl-summary-from-function +Format function to display sender in summary. +The initial setting is @code{wl-summary-default-from}. @item wl-summary-no-from-message @vindex wl-summary-no-from-message The initial setting is @samp{nobody@@nowhere?}. A string which is displayed when there's no @samp{From:} field in the message. +@item wl-summary-subject-function +@vindex wl-summary-subject-function +Format function to display subject in summary. +The initial setting is @code{wl-summary-default-subject} and +it will cut the list name part etc. on the top of the subject. +To display subject as it is, set as follows. + +@lisp +(setq wl-summary-subject-function 'identity) +@end lisp + @item wl-summary-no-subject-message @vindex wl-summary-no-subject-message The initial setting is @samp{(WL:No Subject in original.)}. A string which is displayed when there's no @samp{Subject:} field in the message. +@item wl-summary-default-view +@vindex wl-summary-default-view +The initial setting is @code{'thread}. +The default state for newly created summary. You can set either +@code{'thread} for thread view or @code{'sequence} for sequential view. + @item wl-summary-use-frame @vindex wl-summary-use-frame The initial setting is @code{nil}. @@ -3843,10 +4224,11 @@ want to aware of reading direction, set this to @code{t}. The initial setting is 80. Width of summary line. If @code{nil}, summary line's width is as is. -@item wl-summary-from-width -@vindex wl-summary-from-width -The initial setting is 17. -Width of sender part of summary line. +@item wl-summary-print-argument-within-window +@vindex wl-summary-print-argument-within-window +The initial setting is @code{nil}. +If non-nil, the action argument is always printed on right side of +window. @item wl-summary-indent-length-limit @vindex wl-summary-indent-length-limit @@ -3856,11 +4238,22 @@ indent level. If you set this to @code{nil} you should set @code{wl-summary-width} to @code{nil}, too. +@item wl-summary-max-thread-depth +@vindex wl-summary-max-thread-depth +The initial setting is 15. +If thread depth of the message is larger than this value, +the thread is divided. + @item wl-summary-recenter @vindex wl-summary-recenter The initial setting is t. If non-nil, cursor point is moved to the center of the summary window. +@item wl-summary-max-thread-depth +@vindex wl-summary-max-thread-depth +The initial setting is 30. +If thread depth is larger than this value, divide it. + @item wl-summary-divide-thread-when-subject-changed @vindex wl-summary-divide-thread-when-subject-changed The initial setting is @code{nil}. If non-nil, thread is split if @@ -3917,7 +4310,7 @@ The initial setting is the list shown below: @lisp @group -("o" "O" "D") +("o" "O" "D" "d" "i") @end group @end lisp @@ -3931,7 +4324,7 @@ The initial setting is the list shown below: @lisp @group -("D") +("D" "d") @end group @end lisp @@ -3985,6 +4378,12 @@ cached. The initial setting is @code{t}. If non-nil, messages read in Shimbun folders are cached. +@item wl-summary-resend-use-cache +@vindex wl-summary-resend-use-cache +The initial setting is @code{nil}¡£If non-nil, messages are resend +using cache even in the offline status. Note that if you use cache, +the message identity is not guaranteed. + @item wl-folder-process-duplicates-alist @vindex wl-folder-process-duplicates-alist The initial setting is @code{nil}. @@ -4008,6 +4407,53 @@ Following is an example (hide duplicated messages in multi folders) ("^\\*.*" . hide) (".*" . read))) @end group @end lisp + +@item wl-summary-flag-alist +@vindex wl-summary-flag-alist +The initial setting is as follows: + +@lisp +@group +((important "orange")) +@end group +@end lisp + +Specify the color and the mark of message in summary buffer with flag. +If the mark are omitted, the mark specified in the variable +@code{wl-summary-flag-mark} is assumed. If multiple global flags are on +one message, the former flag in this list is preferred. + +Example: + +@lisp +@group +(setq wl-summary-flag-alist + '((important "purple") + (todo "red") + (business "green" "B") + (private "blue" "X"))) +@end group +@end lisp + +@item wl-summary-display-mime-mode-list +@vindex wl-summary-display-mime-mode-list +The initial setting is the list shown below: + +@lisp +@group +(mime as-is) +@end group +@end lisp + +@noindent +The function @code{wl-summary-toggle-mime} switch specification of MIME +analysis in the order of this list. You can specify one of the follows. + +@example +@code{mime} : Header and body are decoded. +@code{header-only} : Only header is decoded. +@code{as-is} : Header and body are not decoded. +@end example @end table @@ -4068,20 +4514,20 @@ message number will be changed. @table @code @item wl-message-window-size @vindex wl-message-window-size -Initial setting is @code{'(1 . 4)}. It is a cons cell and the ratio of +Initial setting is @code{(1 . 4)}. It is a cons cell and the ratio of its car and cdr value corresponds to the ratio of Summary and Message windows. @item wl-message-ignored-field-list @vindex wl-message-ignored-field-list -(SEMI only) Initial setting is @code{nil}. +Initial setting is @code{nil}. All fields that match this list will be hidden in message buffer. Each elements are regexp of field-name. If @code{nil}, the value of @code{mime-view-ignored-field-list} is used. @item wl-message-visible-field-list @vindex wl-message-visible-field-list -(SEMI only) Initial setting is @code{nil}. +Initial setting is @code{nil}. All fields that match this list will be display in message buffer. Each elements are regexp of field-name. This value precedes @code{wl-message-ignored-field-list}. @@ -4089,7 +4535,7 @@ If @code{nil}, the value of @code{mime-view-visible-field-list} is used. @item wl-message-sort-field-list @vindex wl-message-sort-field-list -(SEMI only) Initial setting is +Initial setting is '("Return-Path" "Received" "^To" "^Cc" "Newsgroups" "Subject" "^From"). Header fields in message buffer are ordered by this value. Each elements are regexp of field-name. @@ -4098,6 +4544,12 @@ Each elements are regexp of field-name. @vindex wl-message-truncate-lines The initial value is the value of @code{default-truncate-lines}. If it is non-nil, truncate long lines in message buffer. + +@item wl-message-auto-reassemble-message/partial +@vindex wl-message-auto-reassemble-message/partial +The initial setting is @code{nil}. +If non-nil, automatically reassemble fragments of the message on +displaying when its MIME media type is message/partial. @end table @node Draft, Disconnected Operations, Message, Top @@ -4121,28 +4573,80 @@ with those if possible. Basically it is Emacs-standard mail mode. @menu +* Parameters for Sending:: * Editing Header:: -* Editing Message Body:: +* Editing Message Body and Sending:: * Dynamical Message Re-arrangement:: * Template:: * POP-before-SMTP:: @end menu -@node Editing Header, Editing Message Body, Usage of Draft Mode, Usage of Draft Mode -@subsection Editing Message Header +@node Parameters for Sending, Editing Header, Usage of Draft Mode, Usage of Draft Mode +@subsection Parameters for Sending -Initially, the cursor is at the @samp{To:} field. Fill in recipients -addresses. @kbd{@key{TAB}} completes them. +According to the information of servers to send messages, configure +following variables. -You can use following headers to specify recipients. Add some of them -by yourself. Field names can be completed by @kbd{@key{TAB}}. +@table @code +@item wl-smtp-posting-server +The name of the SMTP server used for mail transmission. -@table @asis -@item @samp{Newsgroups:} -Specify newsgroups to which you post the news article. +@item wl-smtp-posting-port +The SMTP port number for mail transmission. +Without configuration, use default SMTP port number (25). -@item @samp{Cc:} -Specify addresses to send a copy (Carbon Copy) of the message. +@item wl-nntp-posting-server +The name of NNTP server used for news submission. +Without configuration, use @code{elmo-nntp-default-server}. + +@item wl-nntp-posting-port +The NNTP port number for news submission. +Without configuration, use @code{elmo-nntp-default-port}. +@end table + +You may configure following variables on demand. See section +Variables of Draft Mode for detail @xref{Variables of Draft Mode}. + +@table @code +@item wl-smtp-posting-user +User name for authentication by SMTP AUTH. + +@item wl-smtp-authenticate-type +The authentication method for SMTP AUTH. +Without configuration, authentication will not be carried out. + +@item wl-smtp-authenticate-realm +The authentication realm for SMTP AUTH. +Without configuration, authentication realm will not be specified. + +@item wl-smtp-connection-type +Specify how to establish SMTP connections. + +@item wl-nntp-posting-user +User name for AUTHINFO authentication on news submission. + +@item wl-nntp-posting-stream-type +Specify how to establish NNTP connections. +@end table + +@node Editing Header, Editing Message Body and Sending, Parameters for Sending, Usage of Draft Mode +@subsection Editing Message Header + +You can freely edit header region above @samp{--text follows this line--}, +until you invoke the sending operation. + +Initially, the cursor is at the @samp{To:} field. Fill in recipients +addresses. @kbd{@key{TAB}} completes them. + +You can use following headers to specify recipients. Add some of them +by yourself. Field names can be completed by @kbd{@key{TAB}}. + +@table @asis +@item @samp{Newsgroups:} +Specify newsgroups to which you post the news article. + +@item @samp{Cc:} +Specify addresses to send a copy (Carbon Copy) of the message. @end table Following ones are removed from the header contents before sending. @@ -4176,8 +4680,13 @@ If non-nil, the value of this variable is inserted as a @samp{Bcc:} of the draft when it is prepared. @end table -@node Editing Message Body, Dynamical Message Re-arrangement, Editing Header, Usage of Draft Mode -@subsection Editing Messages +@node Editing Message Body and Sending, Dynamical Message Re-arrangement, Editing Header, Usage of Draft Mode +@subsection Editing Messages and Sending + +As a matter of course, editing message body can be performed in the same +way as usual writing. You may write message body under +@samp{--text follows this line--} line. (NOTE: Be sure to leave the line +@samp{--text follows this line--} intact.) Multi-part editing utilize MIME edit mode of SEMI. For procedures of editing, refer to respective documents. @xref{MIME-Edit, , ,mime-ui-en, @@ -4185,9 +4694,13 @@ a MIME user interface for GNU Emacs}. You can also see help by @kbd{C-c C-x ?} in draft buffer. If you save the draft buffer you are editing, it is appended to the -folder specified by @code{wl-draft-folder}. +folder specified by @code{wl-draft-folder}. You can leave draft buffer +after storing it for future editing by @kbd{C-c C-z} (@code{wl-draft-save-and-exit}). -@node Dynamical Message Re-arrangement, Template, Editing Message Body, Usage of Draft Mode +If you have finished editing, you can send message by @kbd{C-c C-c}. + + +@node Dynamical Message Re-arrangement, Template, Editing Message Body and Sending, Usage of Draft Mode @subsection Dynamic Modification of Messages @vindex wl-draft-config-alist @c @cindex Change Message @@ -4239,7 +4752,7 @@ The format of @code{wl-draft-config-alist} is: @end group @end example -Per default, there are 10 following sub-functions. +Per default, there are 13 following sub-functions. @example 'header: Inserts the specified string at the bottom of the header. @@ -4358,6 +4871,7 @@ Set a variable @code{wl-template-alist}, and type @kbd{C-c C-j} or The format of @code{wl-template-alist} is almost the same as @code{wl-draft-config-alist}. +@xref{Dynamical Message Re-arrangement}. @lisp @group @@ -4396,6 +4910,9 @@ adjust the window size by @code{wl-template-buffer-lines}. If @code{wl-template-visible-select} is @code{nil}, you should type the name of the template in the mini buffer. +If @code{wl-template-select} is executed with prefix argument, +inversed value of @code{wl-template-visible-select} is used. + As shown in the example in @code{wl-draft-config-alist}, you can select @samp{default} template by writing: @@ -4407,14 +4924,15 @@ As shown in the example in @code{wl-draft-config-alist}, you can select @subsection Sending mail by POP-before-SMTP @cindex POP-before-SMTP -You can send mail by POP-before-SMTP with this single line: +You can send mail by POP-before-SMTP. Necessary setting is @lisp (setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp) @end lisp @noindent -Configure the following variables if you need. +to change mail posting function from its default value @code{wl-draft-send-mail-with-smtp}. +Also you would configure following variables on demand. @table @code @item wl-pop-before-smtp-user @@ -4434,7 +4952,7 @@ The POP port number for POP-before-SMTP authentication. If unset, @code{elmo-pop3-default-port} is used. @item wl-pop-before-smtp-stream-type -If non-nil, POP connection is established using SSL. If +If @code{ssl}, POP connection is established using SSL. If @code{starttls}, STARTTLS (RFC2595) connection will be established. If unset, @code{elmo-pop3-default-stream-type} is used. @end table @@ -4450,7 +4968,6 @@ Refer to the following URL about POP-before-SMTP. @example @group -http://spam.ayamura.org/tools/smPbS.html http://www.iecc.com/pop-before-smtp.html @end group @end example @@ -4469,7 +4986,8 @@ http://www.iecc.com/pop-before-smtp.html Cites the content of the current message buffer (the part under cursor). If the region is active, cites the region (it affects only if @code{transient-mark-mode} (on GNU Emacs) or @code{zmacs-regions} -(on XEmacs) is Non-nil). +(on XEmacs) is Non-nil). If the command is called with prefix argument, +the text inserted by yank command (the text content of clipboard) is cited. (@code{wl-draft-yank-original}) @item C-c C-p @@ -4576,6 +5094,7 @@ The text is killed and replaced with the contents of the variable @node Variables of Draft Mode, , Key Bindings of Draft, Draft @section Customizable Variables +@cindex SMTP AUTH @table @code @item wl-subscribed-mailing-list @@ -4696,17 +5215,39 @@ The initial setting is 7. If @code{wl-template-visible-select} is non-nil, this variable specifies the size of the preview window. +@item wl-draft-buffer-style +@vindex wl-draft-buffer-style +The initial setting is @code{full}. +Style of draft buffer window (except for replying and forwarding). +@code{keep} is to use current window, +@code{full} is to use full frame window, +@code{split} is to split current window and use it. +If some function is specified, it is called with the draft buffer +as an argument. + @item wl-draft-reply-buffer-style @vindex wl-draft-reply-buffer-style -The initial setting is @code{split}. @code{split} or @code{full} can be -specified. In the case of @code{full}, the whole frame will be used for -a reply draft buffer when it is prepared. +The initial setting is @code{split}. +Style of draft buffer for replying and forwarding. +@code{keep} is to use message buffer window, +@code{full} is to use full frame window, +@code{split} is to split message buffer window and use it. +If some function is specified, it is called with the draft buffer +as an argument. @item wl-draft-use-frame @vindex wl-draft-use-frame The initial setting is @code{nil}. If non-nil, use new frame for the draft. +@item wl-draft-reply-default-position +@vindex wl-draft-reply-default-position +The initial setting is @code{body}. +Specify initial cursor position on draft buffer for reply. +@code{body} is to move cursor to the top of the message body, +@code{bottom} to the bottom of the message body, and @code{top} to the +top of the header. + @item wl-draft-truncate-lines @vindex wl-draft-truncate-lines The initial value is the value of @code{default-truncate-lines}. @@ -4734,13 +5275,15 @@ set this variable. @vindex wl-reply-subject-prefix The initial setting is @samp{Re: }. In the @samp{Subject:} of the reply draft, this string is prepended to -the @samp{Subject:} of being replied. +the @samp{Subject:} of being replied. You can specify a function to be +message buffer of the reply target. @item wl-forward-subject-prefix @vindex wl-forward-subject-prefix The initial setting is @samp{Forward: }. In the @samp{Subject:} of the forwarding draft, this string is prepended -to the @samp{Subject:} of being forwarded. +to the @samp{Subject:} of being forwarded. You can specify a function +to be message buffer of the forward target. @item wl-draft-reply-use-address-with-full-name @vindex wl-draft-reply-use-address-with-full-name @@ -4762,7 +5305,7 @@ The initial setting is @code{nil}. If the value is non-nil and @item wl-fcc-force-as-read @vindex wl-fcc-force-as-read The initial setting is @code{nil}. If the value is non-nil, -Mark as read the message saved by @samp{Fcc:} (only for IMAP folders). +Mark as read the message saved by @samp{Fcc:}. @item wl-auto-flush-queue @vindex wl-auto-flush-queue @@ -4791,6 +5334,12 @@ If non-nil, always removes your own address from @samp{To:} and If any of @code{wl-subscribed-mailing-list} are contained in @samp{To:} or @samp{Cc:} field, do not insert @samp{Bcc:} or @samp{Fcc:} field. +@item wl-draft-send-mail-function +@vindex wl-draft-send-mail-function +The initial setting is @code{wl-draft-send-mail-with-smtp}. +This is the function to post mails. To use POP-before-SMTP, set this to +@code{wl-draft-send-mail-with-pop-before-smtp}. + @item wl-smtp-posting-server @vindex wl-smtp-posting-server The initial setting is @code{nil}. @@ -4805,23 +5354,31 @@ If @code{nil}, default SMTP port number (25) is used. @item wl-smtp-posting-user @vindex wl-smtp-posting-user The initial setting is @code{nil}. -This is the user name for SMTP AUTH authentication. If @code{nil}, -@code{smtp-authenticate-user} is used. +This is the user name for SMTP AUTH authentication. @item wl-smtp-authenticate-type @vindex wl-smtp-authenticate-type The initial setting is @code{nil}. -This is the authentication method for SMTP AUTH authentication. If -@code{nil}, @code{smtp-authenticate-type} is used. If -@code{smtp-authenticate-type} is still @code{nil}, authentication will -not be carried out. +This string-valued variable specifies the authentication method for SMTP +AUTH authentication. You may specify @code{plain}, @code{cram-md5}, +@code{digest-md5}, @code{login}, etc. If @code{nil}, authentication +will not be carried out. + +@item wl-smtp-authenticate-realm +@vindex wl-smtp-authenticate-realm +The initial setting is @code{nil}. +This string-valued variable specifies the authentication realm for SMTP +AUTH authentication. You have to set this variable for DIGEST-MD5 +authentication and so on. +If @code{nil}, authentication realm is not specified in the authentication. @item wl-smtp-connection-type @vindex wl-smtp-connection-type The initial setting is @code{nil}. -This variable specifies how to establish SMTP connections. -If @code{nil}, @code{smtp-connection-type} is used. -If it is @code{starttls}, STARTTLS (RFC2595) is used. +This symbol-valued variable specifies how to establish SMTP connections. +If @code{nil}, use default connection type. +If it is @code{starttls}, use STARTTLS (RFC3207). +If it is @code{ssl}, use SSL. @item wl-nntp-posting-server @vindex wl-nntp-posting-server @@ -4840,12 +5397,12 @@ If it is still @code{nil}, AUTHINFO authentication will not be carried out. @vindex wl-nntp-posting-port The initial setting is @code{nil}. This is the port number of the NNTP server used for news submission. -If @code{nil}, @code{elmo-nntp-default-server} is used. +If @code{nil}, @code{elmo-nntp-default-port} is used. @item wl-nntp-posting-stream-type @vindex wl-nntp-posting-stream-type The initial setting is @code{nil}. -If @code{nil}, @code{elmo-nntp-default-stream-type} is evaluated. If non-nil, +If @code{nil}, @code{elmo-nntp-default-stream-type} is evaluated. If @code{ssl}, SSL is used for news submission. If @code{starttls}, STARTTLS (RFC2595) connection will be established. @@ -4889,7 +5446,7 @@ If it is @code{nil}, @code{elmo-pop3-default-server} is used. @vindex wl-pop-before-smtp-authenticate-type The initial setting is @code{nil}. This is the authentication method for POP-before-SMTP authentication. -If it is @code{nil}, @code{elmo-pop3-default-authenticate} is used. +If it is @code{nil}, @code{elmo-pop3-default-authenticate-type} is used. @item wl-pop-before-smtp-port @vindex wl-pop-before-smtp-port @@ -4901,8 +5458,9 @@ This is the POP port number for POP-before-SMTP. If it is @code{nil}, @vindex wl-pop-before-smtp-stream-type The initial setting is @code{nil}. This flag controls the use of SSL for POP-before-SMTP. If it is -@code{nil}, @code{elmo-pop3-default-stream-type} is used. If @code{starttls}, -STARTTLS (RFC2595) connection will be established. +@code{nil}, @code{elmo-pop3-default-stream-type} is used. If @code{ssl}, +SSL is used. If @code{starttls}, STARTTLS (RFC2595) connection will be +established. @item wl-draft-queue-save-variables @vindex wl-draft-queue-save-variables @@ -5005,12 +5563,15 @@ later) is non-nil, you can following operations: * Re-file and Copy queue:: Re-file and Copy (IMAP4) * Creation of Folders:: Create Folders off-line (IMAP4) * Marking:: Mark (IMAP4) -* Pre-fetching Reservations:: Pre-fetch (IMAP4, NNTP) +* Pre-fetching Reservations:: Pre-fetch @end menu As soon as Wanderlust becomes on-line, such operations invoked off-line are reflected in the servers via network. +If the variable @code{elmo-enable-disconnected-operation} is @code{nil}, +these off-line operations are not executed and causes an error on +re-file or copy operations. @node Send Messages off-line, Re-file and Copy queue, Enable Operations, Enable Operations @subsection Transmission of Messages @@ -5061,23 +5622,12 @@ are also reflected in the servers when Wanderlust becomes on-line. @node Pre-fetching Reservations, , Marking, Enable Operations -@subsection Pre-fetching (IMAP4, NNTP) - -You can make reservations for pre-fetching messages in IMAP or NNTP -folders. Reserved messages are marked with @samp{!} but not cached -yet. When Wanderlust becomes on-line, they are pre-fetched from -servers. - -If the variable @code{elmo-enable-disconnected-operation} is @code{nil}, -these off-line operations for IMAP4 and NNTP do not take place, and -off-line re-file, copy or suchlike simply results in error. - -Because off-line operations use cache files, it is a bad idea to erase -them by hand; it may cause Wanderlust to malfunction. +@subsection Pre-fetching -If you want to remove caches, be sure to execute @kbd{M-x -elmo-cache-expire-by-size}. @code{elmo-cache-expire-by-size} does not -remove caches for messages relevant to off-line operations. +You can make reservations for pre-fetching messages in networking +folders (IMAP, NNTP, POP3, shimbun). Reserved messages are marked with +@samp{u} but not cached yet. When Wanderlust becomes on-line, they are +pre-fetched from servers. @node Plugged Mode, Off-line State settings, Enable Operations, Disconnected Operations @@ -5199,8 +5749,8 @@ manually, press @kbd{F} in the folder mode. @item elmo-enable-disconnected-operation @vindex elmo-enable-disconnected-operation -The initial setting is @code{nil}. Controls off-line operations -regarding IMAP4. If non-nil, off-line operations are carried out. +The initial setting is @code{t}. Controls off-line operations regarding +networking folders. If non-nil, off-line operations are carried out. @item elmo-lost+found-folder @vindex elmo-lost+found-folder @@ -5565,9 +6115,9 @@ The initial setting is the list below. @lisp @group -(list wl-summary-important-mark - wl-summary-new-mark - wl-summary-unread-mark +(list wl-summary-flag-mark + wl-summary-new-uncached-mark + wl-summary-new-cached-mark wl-summary-unread-uncached-mark wl-summary-unread-cached-mark) @end group @@ -5823,7 +6373,7 @@ Needless to say, you can use your own function. @end table -@node Scoring, Split messages, Expire and Archive, Top +@node Scoring, Address Book, Expire and Archive, Top @chapter Score of the Messages @cindex Scoring @c @cindex Kill File @@ -6088,7 +6638,8 @@ The initial setting is the list shown below: @lisp @group -(list wl-summary-new-mark) +(list wl-summary-new-uncached-mark + wl-summary-new-cached-mark) @end group @end lisp @@ -6149,7 +6700,7 @@ If non-nil, unread/important marks are synchronized when the summary does. Unread marks reflect information on the IMAP4 server. Important marks reflect information on the IMAP4 server (flagged or -not), and contents of @samp{'mark} folder. +not), and contents of @samp{'flag} folder. The initial setting is @code{t}. @end table @@ -6321,105 +6872,7 @@ pop3 N E E E @end example -@node Split messages, Address Book, Scoring, Top -@chapter Message splitting -@cindex Split messages - -You can use @code{elmo-split} to split message in folder -@code{elmo-split-folder} a la @command{procmail} according to some -specified rules. To use this feature, set as follows in your -@file{~/.emacs} at first. - -@lisp -(autoload 'elmo-split "elmo-split" "Split messages on the folder." t) -@end lisp - -Then you can invoke @kbd{M-x elmo-split} to split messages according to -@code{elmo-split-rule}. On the other hand, invoke @kbd{C-u M-x elmo-split} -to do a rehearsal (do not split actually). - -We will describe how to specify the rule. First of all, see following -example, please. - -@lisp -@group -(setq elmo-split-rule - ;; @r{Store messages from spammers into @samp{+junk}} - '(((or (address-equal from "i.am@@spammer") - (address-equal from "dull-work@@dull-boy") - (address-equal from "death-march@@software") - (address-equal from "ares@@aon.at") - (address-equal from "get-money@@richman")) - "+junk") - ;; @r{Store messages from mule mailing list into @samp{%mule}} - ((equal x-ml-name "mule") "%mule") - ;; @r{Store messages from wanderlust mailing list into @samp{%wanderlust}} - ;; @r{and continue evaluating following rules} - ((equal x-ml-name "wanderlust") "%wanderlust" continue) - ;; @r{Store messages from Yahoo user into @samp{+yahoo-@{username@}}} - ((match from "\\(.*\\)@@yahoo\\.com") - "+yahoo-\\1") - ;; @r{Store unmatched mails into @samp{+inbox}} - (t "+inbox"))) -@end group -@end lisp - -The basic unit of the rule is a combination like - -@lisp -(@samp{CONDITION} @samp{FOLDER} [@code{continue}]) -@end lisp - -The 1st element @samp{CONDITION} is a balanced expression (sexp). Its -grammar will be explained below. The 2nd element @samp{FOLDER} is the -name of the folder to split messages into. When the 3rd element -@code{continue} is specified as symbol, evaluating rules is not stopped -even when the condition is satisfied. - -The grammar for @samp{CONDITION} is as follows. See example above to -learn how to write the condition practically. - -@enumerate -@item -Functions which accept argument @samp{FIELD-NAME} and @samp{VALUE}. -(@samp{FIELD-NAME} is a symbol that describes the field name) - -@table @code -@item @code{equal} -True if the field value equals to @samp{VALUE}. -Case of the letters are ignored. -@item @code{match} -True if the field value matches to VALUE. -@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute -from matching @code{\(\)} patterns in the previous @samp{VALUE}. -@item @code{address-equal} -True if one of the addresses in the field equals to -@samp{VALUE}. Case of the letters are ignored. -@item @code{address-match} -True if one of the addresses in the field matches to -@samp{VALUE}. -@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute -from matching @code{\(\)} patterns in the previous @samp{VALUE}. -@end table - -@item -Functions which accept any number of arguments. - -@table @code -@item @code{or} -True if one of the argument returns true. -@item @code{and} -True if all of the arguments return true. -@end table - -@item -A symbol. - -When a symbol is specified, it is evaluated. -@end enumerate - - -@node Address Book, Customization, Split messages, Top +@node Address Book, Spam Filter, Scoring, Top @chapter Address Book @cindex Address Book @@ -6431,6 +6884,7 @@ summary displayed with nicknames. * Address Manager:: Address Manager @end menu + @node Mail Addresses, Address Manager, Address Book, Address Book @section Address book @cindex Address book Definition @@ -6549,143 +7003,736 @@ Edit entry. @end table -@node Customization, Terminology, Address Book, Top -@chapter Customizing Wanderlust -@cindex Customization +@node Spam Filter, Advanced Issues, Address Book, Top +@chapter Spam Filter +@cindex Spam Filter + +@code{wl-spam} provides an frontend to external spam filtering programs. +You can register to or judge spam by the filtering program cooperateing +with messages operations on Wanderlust. @menu -* Living with other packages:: Cooperating with other packages -* Highlights:: Highlights -* Biff:: Notify Mail arrival -* Advanced Settings:: Advanced Settings -* Customizable Variables:: Customizable Variables -* Hooks:: Hooks +* Usage of Spam Filter:: Usage of Spam Filter +* Spam Filter Processors:: Supported spam filters @end menu +@node Usage of Spam Filter, Spam Filter Processors, Spam Filter, Spam Filter +@section Usage of Spam Filter -@node Living with other packages, Highlights, Customization, Customization -@section Living with other packages +@subsection Initial Setting -Examples with other packages. +To use @code{wl-spam}, write in @file{~/.wl} as follows: -@menu -* imput:: imput (im-wl.el) -* BBDB:: The Insidious Big Brother Database -* LSDB:: The Lovely Sister Database -* supercite:: supercite.el -* mu-cite:: mu-cite.el -* X-Face:: x-face,bitmap-mule -* dired-dd:: dired-dd.el -* MHC:: MHC -* Addrbook:: Addrbook -* mime-w3m:: mime-w3m.el -@end menu +@lisp +@group +;; @r{Use @samp{bogofilter} as spam back end} +;; @r{Set @samp{scheme} here as the spam filter you will use.} +;; @r{@xref{Spam Filter Processors}.} +(setq elmo-spam-scheme 'bogofilter) +(require 'wl-spam) +@end group +@end lisp +@subsection spam mark -@node imput, BBDB, Living with other packages, Living with other packages -@subsection imput -@pindex imput -@cindex im-wl +The spam mark (@samp{s}) will be provided as new temporary mark. +Messages marked by this will be refiled into @code{wl-spam-folder} when +the action is called for execution. Marked messages will be skipped by +summary walking in ordinary way. -Place @file{util/im-wl.el} on the @code{load-path} and do the following -settings. +The spam mark is be put on by spam judgement described later, or by +invoking @kbd{k m} at any time. + +@subsection spam judgment + +You can judge spam messages by following ways: + +@enumerate +@item +Make judgement on execution of auto-refile. -If @command{imput} is on the @code{exec-path} at the installation, -@file{im-wl.el} is byte-compiled and installed. @xref{Install}. +Insert @code{wl-refile-guess-by-spam} to arbitrary position in +@code{wl-auto-refile-guess-functions} as follows. @lisp @group -(autoload 'wl-draft-send-with-imput-async "im-wl") -(setq wl-draft-send-function 'wl-draft-send-with-imput-async) +(setq wl-auto-refile-guess-functions + '(wl-refile-guess-by-rule + wl-refile-guess-by-spam)) @end group @end lisp +In this example, judge spam if it could not decide refile destination by +@code{wl-refile-rule-alist}. -@node BBDB, LSDB, imput, Living with other packages -@subsection bbdb.el -@pindex BBDB - -Place @file{util/bbdb-wl.el} on the @code{load-path} and do the following -settings. +@item +Make judgement on entering the summary of specified folder. -If BBDB is on the @code{load-path} at the installation, @file{bbdb-wl.el} is -byte-compiled and installed. -@xref{Install}. +Specify the value of @code{wl-spam-auto-check-folder-regexp-list} +as the list of regular expressions for folder names to be +automatically judged by spam filter. @lisp -@group -(require 'bbdb-wl) - -(bbdb-wl-setup) -;; @r{enable pop-ups} -(setq bbdb-use-pop-up t) -;; @r{auto collection} -(setq bbdb/mail-auto-create-p t) -;; @r{exceptional folders against auto collection} -(setq bbdb-wl-ignore-folder-regexp "^@@") -(setq signature-use-bbdb t) -(setq bbdb-north-american-phone-numbers-p nil) -;; @r{shows the name of bbdb in the summary} :-) -(setq wl-summary-from-function 'bbdb-wl-from-func) -;; @r{automatically add mailing list fields} -(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook) -(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0)))) -@end group +(setq wl-spam-auto-check-folder-regexp-list '("\\+inbox")) @end lisp -You can complete address with BBDB by @kbd{M-@key{TAB}} -in draft buffer. +In this example, judgement will be processed when you enter summary of +the folder whose name contains @samp{+inbox}. + +@item +Make judgement on splitting messages with @code{elmo-split}. +It provides new function @code{spam-p} to be specified as @samp{CONDITION} +in @code{elmo-split-rule}. This function returns true when the message +is judged as spam. +@xref{Split messages}. -@node LSDB, supercite, BBDB, Living with other packages -@subsection lsdb.el -@pindex LSDB +You can also process learning by the result of judgement. (You would +better turn on this feature after learning to some extent) -The following is an example of settings: +Example follows: @lisp @group -(require 'lsdb) -(lsdb-wl-insinuate) -(add-hook 'wl-draft-mode-hook - (lambda () - (define-key wl-draft-mode-map "\M-\t" 'lsdb-complete-name))) +(setq elmo-split-rule + '(((spam-p) "+spam") + ;; @r{to learn by the judgement, use following instead} + ;((spam-p :register t) "+spam") + (t "+inbox")) @end group @end lisp +@end enumerate -In this example, bind @kbd{M-@key{TAB}} to @code{lsdb-complete-name} -(complete address with LSDB). +@subsection spam learning +@code{wl-spam} automatically learn spam with refiling messages. -@node supercite, mu-cite, LSDB, Living with other packages -@subsection sc.el(supercite), sc-register.el -@pindex sc -@pindex supercite +At first, @code{wl-spam} classifies the folders controlled by Wanderlust +into following 4 domains by the class of containig messages -The same setting as usual mailers should be OK. The following is an -example of settings: +@table @samp +@item spam +Folders containing messages judged as spam. +(The folder specified by @code{wl-spam-folder}) +@item good +Folders containing messages judged as non-spam. +@item undecide +Folders containing messages not yet judged. Folders without +pre-distribution may belong to this domain e.g. @samp{+inbox}. +(specified by @code{wl-spam-undecided-folder-regexp-list}) +@item ignored +Foldes have nothing to do with spam processing e.g. +@code{wl-trash-folder} or @code{wl-draft-folder}. (specified by +@code{wl-spam-ignored-folder-regexp-list}) +@end table + +When you refile messages across different domains, it automatically +learn messages as @samp{spam} or @samp{non-spam} according to domains +it belongs before and after. + +To put it concretely, it will learn by following rule: + +@table @samp +@item undecide -> spam +learn as spam. +@item good -> spam +learn as spam and cancel previous study as non-spam. +@item undecide -> good +learn as non-spam. +@item spam -> good +learn as non-spam and cancel previous study as spam. +@end table + +It do not learn anything in other cases. + +@subsection Key Bindings +@cindex Keybind, spam filter + +@table @kbd +@item k m +@kindex k m (Summary) +@findex wl-summary-spam +Put spam mark (@samp{s}) on current message. + +@item k c +@kindex k c (Summary) +@findex wl-summary-test-spam +Test current message and put spam mark if judged as spam. + +@item k C +@kindex k C (Summary) +@findex wl-summary-mark-spam +Test messages with the mark in @code{wl-spam-auto-check-marks}, +and put spam mark if judged as spam. If it is called with prefix +argument, test all messages regardless of their marks. + +@item k s +@kindex k s (Summary) +@findex wl-summary-register-as-spam +Register current message as spam. + +@item k S +@kindex k S (Summary) +@findex wl-summary-register-as-spam-all +Register all messages in the folder as spam. + +@item k n +@kindex k n (Summary) +@findex wl-summary-register-as-good +Register current message as non-spam. + +@item k N +@kindex k N (Summary) +@findex wl-summary-register-as-good-all +Register all messages in the folder as non-spam. + +@item r k m +@kindex r k m (Summary) +@findex wl-summary-spam-region +Put spam mark on messages in the specified region. + +@item r k c +@kindex r k c (Summary) +@findex wl-summary-test-spam-region +Test messages in the specified region and put spam mark if judged as spam. + +@item t k m +@kindex t k m (Summary) +@findex wl-thread-spam +Put spam mark on messages which are the descendant of the current thread. +With prefix argument, it affects on the all messages in the thread tree. + +@item t k c +@kindex t k c (Summary) +@findex wl-thread-test-spam +Test messages which are the descendant of the current thread and put spam mark +if judged as spam. With prefix argument, it affects on the all messages in +the thread tree. + +@item m k +@kindex m k (Summary) +@findex wl-summary-target-mark-spam +Put spam mark (@samp{s}) on messages with the target mark @samp{*}. + +@item m s +@kindex m s (Summary) +@findex wl-summary-target-mark-register-as-spam +Register messages with the target mark @samp{*} as spam. + +@item m n +@kindex m n (Summary) +@findex wl-summary-target-mark-register-as-good +Register messages with the target mark @samp{*} as non-spam. +@end table + +@subsection Customizable Variables + +@table @code +@item wl-spam-folder +@vindex wl-spam-folder +Specify the name of destination folder for the spam messages. +The initial setting is @samp{+spam}. + +@item wl-spam-undecided-folder-regexp-list +@vindex wl-spam-undecided-folder-regexp-list +Specify the list of regexp of folder names which contain messages +not yet decided as spam or non-spam. +The initial setting is @code{'("inbox")}. + +@item wl-spam-ignored-folder-regexp-list +@vindex wl-spam-ignored-folder-regexp-list +The initial setting is as follows. @lisp @group -(autoload 'sc-cite-original "supercite" nil t) -(add-hook 'mail-citation-hook 'sc-cite-original) +(list (regexp-opt (list wl-draft-folder + wl-trash-folder + wl-queue-folder))) @end group @end lisp +Folders of no effect against spam judgement, specified by the list of +folder name regular expressions. -@node mu-cite, X-Face, supercite, Living with other packages -@subsection mu-cite.el -@pindex mu-cite - -The same setting as usual mailers should be OK. The following is an -example of settings. +@item wl-spam-auto-check-folder-regexp-list +@vindex wl-spam-auto-check-folder-regexp-list +Folders to make spam judgement on entering the summary of them, +specified by the list of folder name regular expressions. +The initial setting is @code{nil}. -If you use mu-cite version 8.0 or earlier: +@item wl-spam-auto-check-marks +@vindex wl-spam-auto-check-marks +The initial setting is the following list: @lisp @group -(autoload 'mu-cite/cite-original "mu-cite" nil t) -(setq mail-citation-hook 'mu-cite/cite-original) +(list wl-summary-new-uncached-mark + wl-summary-new-cached-mark) +@end group +@end lisp + +Messages with mark specified by this variable will be processed +by whole-folder judgement including auto test by +@code{wl-spam-auto-check-folder-regexp-list}. +Persistent marks can be used in this method, but temporary marks cannot. + +You can specify the list of marks as the initial setting, or you can +specify follwing symbol: + +@table @code +@item all +Process all messages regardless of persistent marks. +@end table +@end table + + +@node Spam Filter Processors, , Usage of Spam Filter, Spam Filter +@section Supported Spam Filters +@cindex Spam Filter, Bogofilter +@cindex Spam Filter, Spamfilter + +Supported spam filtering libraries are following ones. + +@menu +* bogofilter:: bogofilter +* spamfilter:: spamfilter.el +* bsfilter:: bsfilter +* SpamAssassin:: SpamAssassin +* SpamOracle:: SpamOracle +* Regular Expressions Header Matching:: Header regexp +@end menu + + +@node bogofilter, spamfilter, Spam Filter Processors, Spam Filter Processors +@subsection bogofilter +@cindex bogofilter + +bogofilter (@uref{http://bogofilter.sourceforge.net/}) is a spam filter +implemented by C language. + +To use spam filter with bogofilter, write following setting in +@file{~/.wl} or somewhere else. + +@lisp +@group +(setq elmo-spam-scheme 'bogofilter) +@end group +@end lisp + +@subsubsection Customizable Variables + +@table @code +@item elmo-spam-bogofilter-program +@vindex elmo-spam-bogofilter-program +The initial setting is @file{bogofilter}. +Specify the name of executable of bogofilter. If the executable +is not in your environmental variable @env{PATH}, you should +set this by full path. + +@item elmo-spam-bogofilter-args +@vindex elmo-spam-bogofilter-args +The initial setting is @code{nil}. +Specify arguments to be supplied for bogofilter executable. + +@item elmo-spam-bogofilter-database-directory +@vindex elmo-spam-bogofilter-database-directory +Specify the directory for statistical database to be used. +@code{nil} to use default directory (@file{~/.bogofilter}). +The initial setting is @code{nil}. + +@item elmo-spam-bogofilter-max-messages-per-process +@vindex elmo-spam-bogofilter-max-messages-per-process +The initial setting is 30. This variable specifies the number of +messages to be learned by one process. + +@item elmo-spam-bogofilter-debug +@vindex elmo-spam-bogofilter-debug +The initial setting is @code{nil}. +If you specify non-nil, the output from @command{bogofilter} is +stored in the buffer named @code{"*Debug ELMO SPAM Bogofilter*"}. +@end table + + +@node spamfilter, bsfilter, bogofilter, Spam Filter Processors +@subsection spamfilter.el +@cindex spamfilter + +@file{spamfilter.el} +(@uref{http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/}) is a +spam filtering library implemented by Emacs Lisp. + +Corresponding modules will be compiled/installed, if you have +@file{spamfilter.el} within @code{load-path} when you are to install wl. +@xref{Install}. + +To use @file{spamfilter.el}, write following setting in @file{~/.wl} or +somewhere else. +(Of cource, you have to have settings for @file{spamfilter.el} itself) + +@lisp +@group +(setq elmo-spam-scheme 'spamfilter) +@end group +@end lisp + +@subsubsection Customizable Variables + +@table @code +@item elmo-spam-spamfilter-corpus-filename +@vindex elmo-spam-spamfilter-corpus-filename +The initial setting is @file{~/.elmo/.spamfilter}. +It specifies the name of corpus file. +@end table + +@node bsfilter, SpamAssassin, spamfilter, Spam Filter Processors +@subsection bsfilter +@cindex bsfilter + +bsfilter (@uref{http://bsfilter.org/index-e.html}) is a spam filter +implemented by Ruby language. + +To use spam filter with bsfilter, write following setting in +@file{~/.wl} or somewhere else. + +@lisp +@group +(setq elmo-spam-scheme 'bsfilter) +@end group +@end lisp + +@subsubsection Customizable Variables + +@table @code +@item elmo-spam-bsfilter-program +@vindex elmo-spam-bsfilter-program +The initial setting is @file{bsfilter}. +Specify the name of executable of @command{bsfilter}. If the executable +is not in your environmental variable @env{PATH}, you should +set this by full path. + +@item elmo-spam-bsfilter-args +@vindex elmo-spam-bsfilter-args +The initial setting is @code{nil}. +Specify arguments to be supplied for bsfilter executable. + +@item elmo-spam-bsfilter-database-directory +@vindex elmo-spam-bsfilter-database-directory +Specify the directory for statistical database to be used. +@code{nil} to use default directory (@file{~/.bsfilter}). +The initial setting is @code{nil}. + +@item elmo-spam-bsfilter-debug +@vindex elmo-spam-bsfilter-debug +The initial setting is @code{nil}. +If you specify non-nil, the output from @command{bsfilter} is +stored in the buffer named @code{"*Debug ELMO Bsfilter*"}. + +@item elmo-spam-bsfilter-shell-program +@vindex elmo-spam-bsfilter-shell-program +The initial setting is @file{ruby}. +Specify the shell to execute @command{bsfilter}. If the shell is not +in your environmental variable @env{PATH}, you should set this by full path. + +@item elmo-spam-bsfilter-shell-switch +@vindex elmo-spam-bsfilter-shell-switch +The initial setting is @code{nil}. +Specify options to give to the shell executing @command{bsfilter}. + +@item elmo-spam-bsfilter-update-switch +@vindex elmo-spam-bsfilter-update-switch +The initial setting is @code{"--synchronous-auto-update"}. +Specify options to give to @command{bsfilter} for learning messages. + +@end table + +@node SpamAssassin, SpamOracle, bsfilter, Spam Filter Processors +@subsection SpamAssassin +@cindex SpamAssassin + +SpamAssassin (@uref{http://spamassassin.org/}) is one of the most +popular spam filtering program implemented on Perl. SpamAssassin +attempts to identify spam using text analysis and several internet-based +realtime blacklists. SpamAssassin also uses a Bayesian learning filter +which enables more accurate spam filtering. + +To use @file{SpamAssassin} on Wanderlust, write following setting +in @file{~/.wl} or somewhere else. +(Of course, you have to install SpamAssassin beforehand.) + +@lisp +@group +(setq elmo-spam-scheme 'sa) +@end group +@end lisp + +@subsubsection Customize Variables + +@table @code +@item elmo-spam-spamassassin-program +@vindex elmo-spam-spamassassin-program +The initial setting is @file{spamassassin}. +Specify the name of executable @command{spamassassin}. If the executable +is not in your environmental variable @env{PATH}, you should +set this by full path. + +@item elmo-spam-spamassassin-learn-program +@vindex elmo-spam-spamassassin-learn-program +The initial setting is @file{sa-learn}. +Specify the name of the SpamAssassin's Bayesian filtering learner +program, @command{sa-learn}. If the executable is not in your +environmental variable @env{PATH}, you should set this by full path. + +@item elmo-spam-spamassassin-program-arguments +@vindex elmo-spam-spamassassin-program-arguments +The initial setting is @code{'("-e")}. +Specify the arguments to be supplied for @command{spamassassin} executable. +You have to specify the argument to exit the program with an error exit code +when the result is spam. For example, if you want to use @command{spamc} + instead of @command{spamassassin}, you should specify @code{'("-c")}. + +@item elmo-spam-spamassassin-learn-program-arguments +@vindex elmo-spam-spamassassin-lern-program-arguments +The initial setting is @code{nil}. +Specify the arguments to be supplied for @command{sa-learn}. + +@item elmo-spamassassin-debug +@vindex elmo-spamassassin-debug +The initial setting is @code{nil}. +If you specify @code{t}, the output from @command{spamassassin} is +stored in the buffer named @code{"*Debug ELMO SpamAssassin*"}. + +@end table + +@node SpamOracle, Regular Expressions Header Matching, SpamAssassin, Spam Filter Processors +@subsection SpamOracle +@cindex SpamOracle + +SpamOracle (`http://pauillac.inria.fr/~xleroy/software.html#spamoracle') +is a spam filter implemented by Objective Caml language. + +To use spam filter with @file{spamoracle}, write following setting in +@file{~/.wl} or somewhere else. +(Of course, you have to install SpamOracle beforehand.) + +@lisp +@group +(setq elmo-spam-scheme 'spamoracle) +@end group +@end lisp + +@subsubsection Customizable Variables + +@table @code +@item elmo-spam-spamoracle-program +@vindex elmo-spam-spamoracle-program +The initial setting is @file{spamoracle}. Specify the name of +executable of spamoracle. If the executable is not in your +environmental variable @env{PATH}, you should set this by full path. + +@item elmo-spam-spamoracle-config-filename +@vindex elmo-spam-spamoracle-config-filename +Specify the name of config file. @code{nil} to use default file +(@file{~/.spamoracle.conf}). The initial setting is @code{nil}. + +@item elmo-spam-spamoracle-database-filename +@vindex elmo-spam-spamoracle-database-filename +The initial setting is @file{~/.elmo/.spamoracle.db}. +It specifies the name of database file. + +@item elmo-spam-spamoracle-spam-header-regexp +@vindex elmo-spam-spamoracle-spam-header-regexp +The initial setting is @code{"^X-Spam: yes;"}. It specifies the regular +expression of the header that indicates spam mail. Use this setting +when you change the @code{spam_header} parameter in the config file. + +@end table + +@node Regular Expressions Header Matching, , SpamOracle, Spam Filter Processors +@subsection Regular Expressions Header Matching +@cindex Regular Expressions Header Matching + +Examine if regular expression matches corresponding field in message heaeder, +and decide spam or not. To use this backend, add following setting to @file{~/.wl}. + +@lisp +@group +(setq elmo-spam-scheme 'header) +@end group +@end lisp + +If you want to check fields not included in the default overview +information, add one into @code{elmo-msgdb-extra-fields}. Then it will +do examination by the overview information and avoid loading whole +message body as far as possible. + +@subsubsection Customize Variables + +@table @code +@item elmo-spam-header-good-alist +@vindex elmo-spam-header-good-alist +The initial setting is the following list: + +@lisp +'(("X-Spam-Flag" . "No")) +@end lisp + +Specify a list of regular expressions to match with header field name +for making non-spam decision. It takes precedence over +@code{elmo-spam-header-spam-alist}. + +@item elmo-spam-header-spam-alist +@vindex elmo-spam-header-spam-alist +The initial setting is the following list: + +@lisp +'(("X-Spam-Flag" . "Yes")) +@end lisp + +Specify a list of regular expressions to match with header field name +for making spam decision. +@end table + + +@node Advanced Issues, Migration, Spam Filter, Top +@chapter Advanced Issues +@cindex Advanced Issues + +@menu +* Living with other packages:: Cooperating with other packages +* Highlights:: Highlights +* Biff:: Notify Mail arrival +* Password Management:: Manage Passwords +* Split messages:: Splitting messages +* Batch Processing:: Invoke commands in batch mode +* Advanced Settings:: Advanced Settings +* Customizable Variables:: Customizable Variables +* Hooks:: Hooks +@end menu + + +@node Living with other packages, Highlights, Advanced Issues, Advanced Issues +@section Living with other packages + +Examples with other packages. + +@menu +* imput:: imput (im-wl.el) +* BBDB:: The Insidious Big Brother Database +* LSDB:: The Lovely Sister Database +* supercite:: supercite.el +* mu-cite:: mu-cite.el +* X-Face:: x-face,bitmap-mule +* dired-dd:: dired-dd.el +* MHC:: MHC +* Addrbook:: Addrbook +* mime-w3m:: mime-w3m.el +@end menu + + +@node imput, BBDB, Living with other packages, Living with other packages +@subsection imput +@pindex imput +@cindex im-wl + +Place @file{util/im-wl.el} on the @code{load-path} and do the following +settings. + +@lisp +@group +(autoload 'wl-draft-send-with-imput-async "im-wl") +(setq wl-draft-send-function 'wl-draft-send-with-imput-async) +@end group +@end lisp + + +@node BBDB, LSDB, imput, Living with other packages +@subsection bbdb.el +@pindex BBDB + +To use The Insidious Big Brother Database (@uref{http://bbdb.sourceforge.net/}) +with Wanderlust, place @file{util/bbdb-wl.el} on the @code{load-path} +and do the following settings. + +If BBDB is on the @code{load-path} at the installation, @file{bbdb-wl.el} is +byte-compiled and installed. +@xref{Install}. + +@lisp +@group +(require 'bbdb-wl) + +(bbdb-wl-setup) +;; @r{enable pop-ups} +(setq bbdb-use-pop-up t) +;; @r{auto collection} +(setq bbdb/mail-auto-create-p t) +;; @r{exceptional folders against auto collection} +(setq bbdb-wl-ignore-folder-regexp "^@@") +(setq signature-use-bbdb t) +(setq bbdb-north-american-phone-numbers-p nil) +;; @r{shows the name of bbdb in the summary} :-) +(setq wl-summary-from-function 'bbdb-wl-from-func) +;; @r{automatically add mailing list fields} +(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook) +(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0)))) +@end group +@end lisp + +You can complete address with BBDB by @kbd{M-@key{TAB}} +in draft buffer. + + +@node LSDB, supercite, BBDB, Living with other packages +@subsection lsdb.el +@pindex LSDB + +The following is an example setting to use +The Lovely Sister Database (@uref{http://sourceforge.jp/projects/lsdb/}) +with Wanderlust. + +@lisp +@group +(require 'lsdb) +(lsdb-wl-insinuate) +(add-hook 'wl-draft-mode-hook + (lambda () + (define-key wl-draft-mode-map "\M-\t" 'lsdb-complete-name))) +@end group +@end lisp + +In this example, bind @kbd{M-@key{TAB}} to @code{lsdb-complete-name} +(complete address with LSDB). + + +@node supercite, mu-cite, LSDB, Living with other packages +@subsection sc.el(supercite), sc-register.el +@pindex sc +@pindex supercite + +The same setting as usual mailers should be OK. The following is an +example of settings: + +@lisp +@group +(autoload 'sc-cite-original "supercite" nil t) +(add-hook 'mail-citation-hook 'sc-cite-original) +@end group +@end lisp + + +@node mu-cite, X-Face, supercite, Living with other packages +@subsection mu-cite.el +@pindex mu-cite + +The same setting as usual mailers should be OK. The following is an +example of settings. + +If you use mu-cite version 8.0 or earlier: + +@lisp +@group +(autoload 'mu-cite/cite-original "mu-cite" nil t) +(setq mail-citation-hook 'mu-cite/cite-original) @end group @end lisp @@ -6842,7 +7889,7 @@ distributed with emacs-w3m (@uref{http://emacs-w3m.namazu.org/}). You can find the usage in comment region at the head of @file{mime-w3m.el}. -@node Highlights, Biff, Living with other packages, Customization +@node Highlights, Biff, Living with other packages, Advanced Issues @section Highlights @subsection Customizable Variables @@ -7088,7 +8135,7 @@ The face for strings (for example, a version number) in the demo. @end table -@node Biff, Advanced Settings, Highlights, Customization +@node Biff, Password Management, Highlights, Advanced Issues @section Notify Mail arrival @cindex Biff @@ -7112,6 +8159,13 @@ If @code{nil}, wl doesn't check mail arrival. The initial setting is 40 (in seconds). Check mail arrival in this period. +@item wl-biff-use-idle-timer +@vindex wl-biff-use-idle-timer +The initial setting is @code{nil}. +If it is @code{nil}, check mail arrival when the time specified by +@code{wl-biff-check-interval} has passed. If it is non-nil, check +mail arrival when idling time exceeds @code{wl-biff-check-interval}. + @item wl-biff-notify-hook @vindex wl-biff-notify-hook This hook is run at the arrival of new mail. @@ -7123,7 +8177,214 @@ For silence, set to @code{nil}. @end table -@node Advanced Settings, Customizable Variables, Biff, Customization +@node Password Management, Split messages, Biff, Advanced Issues +@section Manage Passwords + +If you input passwords to connect servers, they are stored in the +variable @code{elmo-passwd-alist} per connection. You should be careful +that others might read your passwords if they can touch your Emacs, +since encoded plain passwords are there. + +If you invoke @kbd{M-x elmo-passwd-alist-save} while you have stored +passwords, then they are saved on the file, and it will save you to +input passwords. In this case, the risk that someone reads your +keystroke might decrease, but please not that plain passwords are +stored on a file. You should treat them very carefully. +To remove saved passwords on file, invoke @kbd{M-x elmo-passwd-alist-clear} +and then @kbd{M-x elmo-passwd-alist-save}. + +@table @code +@item elmo-passwd-alist-file-name +@vindex elmo-passwd-alist-file-name +The initial setting is @file{passwd}. +This is the name of the file in which passwords are saved. +@code{elmo-passwd-alist-save} saves current passwords to the file. + +@item elmo-passwd-life-time +@vindex elmo-passwd-life-time +The initial setting is @code{nil}. +If the value is some number, timer is set to remove password entry after +@code{elmo-passwd-life-time} seconds since you input the password. +@code{nil} means never to remove passwords. +@end table + + +@node Split messages, Batch Processing, Password Management, Advanced Issues +@section Message splitting +@cindex Split messages + +You can use @code{elmo-split} to split message in folder specified by +the variable @code{elmo-split-folder} a la @command{procmail} according +to some specified rules. To use this feature, set as follows in your +@file{~/.emacs} at first. + +@lisp +(autoload 'elmo-split "elmo-split" "Split messages on the folder." t) +@end lisp + +Set source folder like following. + +@lisp +(setq elmo-split-folder "%inbox") +@end lisp + +And specify the rule in the variable @code{elmo-split-rule} (its format +will be is described below). +Then you can invoke @kbd{M-x elmo-split} to split messages according to +@code{elmo-split-rule}. On the other hand, invoke @kbd{C-u M-x elmo-split} +to do a rehearsal and show result (do not split actually). + + +We will describe how to specify the rule. First of all, see following +example, please. + +@lisp +@group +(setq elmo-split-rule + ;; @r{Store messages from spammers into @samp{+junk}} + '(((or (address-equal from "i.am@@spammer") + (address-equal from "dull-work@@dull-boy") + (address-equal from "death-march@@software") + (address-equal from "ares@@aon.at") + (address-equal from "get-money@@richman")) + "+junk") + ;; @r{Store messages from mule mailing list into @samp{%mule}} + ((equal x-ml-name "mule") "%mule") + ;; @r{Store messages from wanderlust mailing list into @samp{%wanderlust}} + ;; @r{and continue evaluating following rules} + ((equal x-ml-name "wanderlust") "%wanderlust" continue) + ;; @r{Store messages from Yahoo user into @samp{+yahoo-@{username@}}} + ((match from "\\(.*\\)@@yahoo\\.com") + "+yahoo-\\1") + ;; @r{Store unmatched mails into @samp{+inbox}} + (t "+inbox"))) +@end group +@end lisp + +The basic unit of the rule is a combination like + +@lisp +(@samp{CONDITION} @samp{ACTION} [@code{continue}]) +@end lisp + +If @samp{CONDITION} is true, @samp{ACTION} is performed. +The 1st element @samp{CONDITION} is a condition represented by a +balanced expression (sexp). Its grammar will be explained below. +The 2nd element @samp{ACTION} is the name of the folder to split +messages into, or a symbol. When the 3rd element @code{continue} is +specified as symbol, evaluating rules is not stopped even when the +condition is satisfied. + +The grammar for @samp{CONDITION} is as follows. See example above to +learn how to write the condition practically. + +@enumerate +@item +Functions which accept arguments @samp{FIELD-NAME} and @samp{VALUE}. +(@samp{FIELD-NAME} is a symbol that describes the field name) + +@table @code +@item @code{equal} +True if the field value equals to @samp{VALUE}. +Case of the letters are ignored. +@item @code{match} +True if the field value matches to VALUE. +@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute +from matching @code{\(\)} patterns in the previous @samp{VALUE}. +@item @code{address-equal} +True if one of the addresses in the field equals to +@samp{VALUE}. Case of the letters are ignored. +@item @code{address-match} +True if one of the addresses in the field matches to +@samp{VALUE}. +@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute +from matching @code{\(\)} patterns in the previous @samp{VALUE}. +@end table + +@item +Functions which accept an integer argument (@samp{SIZE}). + +@table @code +@item @code{<} +True if the size of the message is less than @samp{SIZE}. +@item @code{>} +True if the size of the message is greater than @samp{SIZE}. +@end table + +@item +Functions which accept any number of arguments. + +@table @code +@item @code{or} +True if one of the argument returns true. +@item @code{and} +True if all of the arguments return true. +@end table + +@item +A symbol. + +When a symbol is specified, it is evaluated. +@end enumerate + +You can specify followings as 2nd @samp{ACTION}. + +@enumerate +@item +folder name + +If some string is specified, it will be regarded as the destination +folder, and the message will be appended to it. + +@item +@samp{delete} + +If the symbol @samp{delete} is specified, delete the substance of the +message in @code{elmo-split-folder} + +@item +@samp{noop} + +If the symbol @samp{noop} is specified, do nothing on the message and +keep it as it is. + +@item +function + +If some function is specified, execute it. +@end enumerate + +If the message passes all rules, it will be dealed along @samp{ACTION} +specified by @code{elmo-split-default-action}. + + +@node Batch Processing, Advanced Settings, Split messages, Advanced Issues +@section Batch Processing +@cindex Batch Processing + +You can request wanderlust to do some job on the command line. +For now, you can invoke prefetching new messages in specified folders. + +Specify target folders in @code{wl-batch-prefetch-folder-list} then +invoke as follows to execute prefetching: + +@example +@group +% emacs -batch -l wl-batch -f wl-batch-prefetch +@end group +@end example + +@subsection Customize Variables + +@table @code +@item wl-batch-prefetch-folder-list +@vindex wl-batch-prefetch-folder-list +Target folders of prefetching by @code{wl-batch-prefetch}, specified as +a list of folder names. +@end table + + +@node Advanced Settings, Customizable Variables, Batch Processing, Advanced Issues @section Advanced Settings @menu @@ -7137,8 +8398,6 @@ For silence, set to @code{nil}. @subsection Draft for Replay @vindex wl-draft-reply-with-argument-list @vindex wl-draft-reply-without-argument-list -@vindex wl-draft-reply-myself-with-argument-list -@vindex wl-draft-reply-myself-without-argument-list If you type @kbd{a} in the Summary Buffer, a draft for reply is prepared. The addressee for the draft is decided by following rules. @@ -7199,9 +8458,14 @@ These are evaluated in order and first matched one is used. Moreover, the behavior of @kbd{a} with prefix argument can be directed by @code{wl-draft-reply-with-argument-list} as well. + By the way, you can use some function (will be evaluated in the parent message buffer) in the place of @samp{key} or @samp{to-list} etc. -For example, if you only want to reply to mailing lists in + +If you want to write a rule for replying to message written by yourself, +specify function @code{wl-draft-self-reply-p} as @samp{key}. + +If you only want to reply to mailing lists in @code{wl-subscribed-mailing-list} if the parent has some of them, set as follows: @@ -7229,10 +8493,6 @@ set as follows: @end lisp -Note: To set the behavior when you reply to the message written by yourself, -use @code{wl-draft-reply-myself-without-argument-list} and -@code{wl-draft-reply-myself-with-argument-list} instead of them. - @node Thread Format, User-Agent Field, Draft for Reply, Advanced Settings @subsection Appearance of Threads @@ -7312,7 +8572,7 @@ The following is a example: @end lisp -@node Customizable Variables, Hooks, Advanced Settings, Customization +@node Customizable Variables, Hooks, Advanced Settings, Advanced Issues @section Customizable Variables Customizable variables that have not been described yet: @@ -7326,7 +8586,13 @@ a folder and the like. @item wl-draft-folder @vindex wl-draft-folder The initial setting is @samp{+draft}. It is the folder to which drafts are -saved. It must be a localdir folder. +saved. It must be a writable folder. +You can set IMAP remote folder, Maildir and so on. +Note that variable settings applied by @code{wl-draft-config-exec} is saved +under @code{elmo-msgdb-directory}. That is to say, if you specified remote +folder as @code{wl-draft-folder}, variable settings which are applied by +@code{wl-draft-config-exec} before saving the draft will not affect on the +draft buffer on another host by invoking @code{wl-summary-reedit}. @item wl-trash-folder @vindex wl-trash-folder @@ -7343,6 +8609,13 @@ If non-nil, you are asked for confirmation when Wanderlust terminates. The initial setting is @code{t}. If non-nil, you are asked for confirmation when mail is sent. +@item wl-default-sync-range +@vindex wl-default-sync-range +The initial setting is @samp{update}. +Default update range of the summary. You can specify +@samp{all}, @samp{update}, @samp{rescan} or @samp{no-sync}. +See description of @code{wl-summary-sync} for the meaning of ranges. + @item wl-folder-sync-range-alist @vindex wl-folder-sync-range-alist The initial setting is the alist shown below: @@ -7357,8 +8630,10 @@ The initial setting is the alist shown below: @noindent This is an associative list of regular expressions of folder names and update range of the summary. Update range is one of the @samp{all}, -@samp{update}, @samp{rescan}, @samp{rescan-noscore}, @samp{first} and -@samp{last}. If a folder do not match, @samp{update} is used. +@samp{update}, @samp{rescan} or @samp{no-sync}. If the folder do not +match any of them, the value of @code{wl-default-sync-range} is used +(@samp{update} by default). +See description of @code{wl-summary-sync} for the meaning of ranges. @item wl-ask-range @vindex wl-ask-range @@ -7481,18 +8756,19 @@ This is a list of access groups not to be loaded specifically at the start. It is ignored if @code{wl-folder-init-load-access-folders} is non-nil. -@item wl-delete-folder-alist -@vindex wl-delete-folder-alist +@item wl-dispose-folder-alist +@vindex wl-dispose-folder-alist The initial setting is the alist shown below: @lisp @group -(("^-" . remove)) +(("^-" . remove) + ("^@@" . remove)) @end group @end lisp @noindent -This list determines disposition of messages with delete marks. +This list determines disposition of messages with disposal marks. Each item in the list is a folder and destination; you can specify any one of the following in the place of destination: @@ -7502,22 +8778,6 @@ string : moves the messages to the specific folder. @code{trash} or others : moves the messages to @code{wl-trash-folder}. @end example -@item wl-refile-policy-alist -@vindex wl-refile-policy-alist -The initial setting is the list shown below: - -@lisp -@group -(("^[-=]" . copy) - (".*" . move)) -@end group -@end lisp - -@noindent -This list determines whether messages with re-file marks are moved or -copied. Each item in the list is a cons cell of a folder and -@code{copy} or @code{move}. - @item wl-x-face-file @vindex wl-x-face-file The initial setting is @file{~/.xface}. @@ -7536,12 +8796,6 @@ This is meaningful for XEmacs only. The initial setting depends on XEmacs (@code{t} for XEmacs with dbm). If non-nil, Message-ID is controlled by dbm. -@item elmo-passwd-alist-file-name -@vindex elmo-passwd-alist-file-name -The initial setting is @file{passwd}. -This is the name of the file in which passwords are saved. -@code{elmo-passwd-alist-save} saves current passwords to the file. - @item elmo-nntp-list-folders-use-cache @vindex elmo-nntp-list-folders-use-cache The initial setting is 600 (in seconds). @@ -7579,20 +8833,109 @@ The initial setting is @code{t}. If non-nil, you are asked for confirmation if accumulated off-line operations are executed. -@item elmo-display-progress-threshold -@vindex elmo-display-progress-threshold -The initial setting is 20. -Threshold for display of progress gauge. If number of renewal is more than -this value, display progress gauge. +@item elmo-network-session-idle-timeout +@vindex elmo-network-session-idle-timeout +The initial setting is @code{nil}. +Idle timeout of the network cache. Specified in seconds. +If elapsed time since last access is larger than this value, +cached session is not reused. If nil, network cache is reused. + @end table -@node Hooks, , Customizable Variables, Customization +@node Hooks, , Customizable Variables, Advanced Issues @section Hooks (Not yet written) -@node Terminology, Mailing List, Customization, Top + +@node Migration, Terminology, Advanced Issues, Top +@chapter Switch from older version of Wanderlust +@cindex Migration + +This chapter explains the important thing for the upgrade, +or migration from the previous version. +It includes the changes of the setup, limitations etc. + +@menu +* Before 2.12.0:: From prior to the version 2.12.0 +@end menu + +@node Before 2.12.0, , Migration, Migration +@section Migration from prior to the version 2.12.0 + +@subsection The conversion of msgdb + +From version 2.12.0 on, the structure of msgdb is changed. +The msgdb for newly created folder will use this new format when created and saved. +But by writing following line, you may use the old format of the msgdb as it was. + +@lisp +@group +(setq elmo-msgdb-default-type 'legacy) +@end group +@end lisp + +With the default setup, the old msgdb format is converted to the new +format automatically. You may change this behavior by writing following +lines in @file{~/.wl}. + +@lisp +@group +;; @r{If the format of msgdb is different from} @code{elmo-msgdb-default-type}, +;; @r{the format will be converted automatically when} +;; @r{the msgdb is being loaded (default).} +(setq elmo-msgdb-convert-type 'auto) + +;; @r{Convert msgdb when hitting @kbd{s all} in Summary mode} +(setq elmo-msgdb-convert-type 'sync) + +;; @r{Inhibit conversion} +(setq elmo-msgdb-convert-type nil) +@end group +@end lisp + +As is explained in above section, you may continue to use the old format. +But you will have following limitations. + +@enumerate +@item +You cannot use forwarded mark (@samp{F}, @samp{f}). +@item +You may only use @samp{important} flag. The other global flags may not +be available. +@end enumerate + +@subsection Changes from @samp{'mark} folder to @samp{'flag}. + +The folder @samp{'mark} will be automatically converted to @samp{'flag} +folder when you first start the new version of Wanderlust. +But there are some restrictions on this type of migrated folder. + +@enumerate +@item +@samp{important} flag attached will not be +removed by deleting the associated message in @samp{'flag} folder. + +@item +The message won't be deleted by removing +@samp{important} flag in @samp{'flag} folder. + +@item +help-echo will not show you the old message. + +@end enumerate + +If you have problem with migrating +from @samp{'mark} folder to the @samp{'flag} folder, +invoking +@kbd{M-x elmo-global-mark-upgrade} will transfer the message +from @samp{'mark} folder to the @samp{'flag} folder. +The duplicated message will not be processed, +you may issue that command repeatedly. + + +@node Terminology, Mailing List, Migration, Top @chapter Terminology around Wanderlust @cindex Terminology @@ -7670,6 +9013,25 @@ in Japanese.} I would like to express my thanks to the members of the mailing list for valuable advice and many pieces of code they contributed. +@subsection Archive + +You can read messages posted to the mailing list on the web or in +NetNews. + +Read messages posted to @t{} + +@example +@uref{http://lists.airs.net/wl/archive/} +@uref{news://gmane.mail.wanderlust.general.japanese@@news.gmane.org} +@end example + +Read messages posted to @t{} + +@example +@uref{http://lists.airs.net/wl-en/archive/} +@uref{news://gmane.mail.wanderlust.general@@news.gmane.org} +@end example + @node Addition, Index, Mailing List, Top @chapter Additional Information @@ -7715,6 +9077,16 @@ valuable advice and many pieces of code they contributed. 2001 7/04 Released 2.6.0 stable. 8/21 wl-addrmgr by Kitamoto-san. 12/27 Released 2.8.1 stable. +2002 12/11 Released 2.10.0 stable. +2003 7/05 Released 2.10.1 stable. + 9/18 flag folder is added. + 9/20 New msgdb format (modb-standard) by H.Murata-san. + 10/20 Spam filter by H.Murata-san. +2004 1/06 Background color of the demo become configurable. + 2/09 'file' folder is added. + 9/12 forwarded mark. + Default value of the mark strings are changed. + 12/24 Released 2.12.0 stable. @end example See @file{ChangeLog} for details. @@ -7744,8 +9116,7 @@ Each versions has code names (they are almost jokes). Currently they are picked up alphabetically from the top 40 hits of U.S. Billboard magazines in 1980s. -(@uref{http://lyrics.natalnet.com.br/html/top40/index.html}) - +(@uref{http://ntl.matrix.com.br/pfilho/html/top40/}) @node Index, , Addition, Top @unnumbered Index