@settitle Wanderlust -- Yet Another Message Interface On Emacsen --
@c %**end of header
@documentlanguage en
-@documentencoding us-ascii
@include version.texi
@synindex pg cp
@finalout
* 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
* Terminology:: Terminologies
Recommended combination of APEL, FLIM and SEMI are following:
@itemize @minus
-@item APEL 10.3, FLIM 1.14.3 and SEMI 1.14.3
+@item APEL 10.4, FLIM 1.14.5 and SEMI 1.14.5
@end itemize
You can also use many other FLIM/SEMI variants. Combination of the
confirmed to work.
@itemize @minus
-@item APEL 10.2, Chao 1.14.1, REMI 1.14.2
-@item APEL 10.2, SLIM 1.14.3, EMY 1.13.9
+@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.5
+@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
@end itemize
You have to re-install Wanderlust if you upgraded APEL, FLIM or SEMI.
of Emacsen.
It is effective only when your Emacs can define @code{mail-user-agent}.
-@xref{Mail Methods, , ,emacs-ja, The Emacs Editor}.
+@xref{Mail Methods, , ,emacs, The Emacs Editor}.
@lisp
@group
@pindex ucs-conv
You can use international mailbox names in @var{mailbox} part, if you
-are using Emacs which can treat unicode and
+are using Emacs with UTF-7 support and
@code{elmo-imap4-use-modified-utf7} is set to non-nil value (default
value is @code{nil}).
-Currently, following Emacsen can treat unicode.
+Currently, Mule-UCS package is required to use UTF-7.
+Mule-UCS works on following Emacsen.
@itemize @bullet
-@item Emacs 20.3 or later + Mule-UCS
+@item Emacs 20.3 or later
+@item XEmacs 21.2.37 or later
+@end itemize
-If you installed Mule-UCS package, Emacs can treat unicode.
You can obtain Mule-UCS package from following URL.
@example
ftp://ftp.m17n.org/pub/mule/Mule-UCS/
@end example
-@item XEmacs 21.2.13 or later + ucs-conv package
-
-By default, XEmacs 21 cannot treat unicodes, but if you installed
-ucs-conv package, it can.
-You can obtain ucs-conv package from following anonymous CVS.
-
-@example
-@group
-cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root login
-Password: @var{NULL} (Just enter return key)
-cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root checkout ucs-conv
-@end group
-@end example
-
-You also need utf7 conversion programs, @command{u7tou8} and
-@command{u8tou7} to use international mailbox name in the current
-XEmacs. These programs are included in the UTF7 package which can be
-obtained from following URL.
-
-@example
-ftp://ftp.ifcss.org/pub/software/unix/convert/utf7.tar.gz
-@end example
-@end itemize
-
-
@node NNTP Folder, MH Folder, IMAP Folder, Folders
@section NNTP Folder
@cindex @samp{-}
@subsection Cache File
The messages which have to access via network (e.x. IMAP, NNTP folder)
-are cached as a local file. The cache file is saved under the directory
+are cached as a local file so as to save network traffic or to enable
+off-line operation. The cache file is saved under the directory
@file{~/.elmo/cache}. To expire cache, type @kbd{M-x
elmo-cache-expire-by-size}. The command deletes cache files to the
specified size by the order of last accessed time.
@subsection Buffer Cache and Prefetching
-The messages that are read are kept in the cache buffer. It is called
+The messages that are read are kept in the cache buffer so as to make
+the behavior fast when you are to read the message again. It is called
`buffer cache'. The number of cache buffer is specified by
@code{wl-message-buffer-cache-size}.
@end group
@end lisp
+@subsection on the format for sender name
+
+The format string @samp{%f} displays the return value of the function specified
+by @code{wl-summary-from-function}. If you use the function
+@code{wl-summary-default-from} (default), it displays sender name ordinarily,
+while displays the recipient names if the folder name matches with
+@code{wl-summary-showto-folder-regexp} and the sender is yourself.
+If the value of @code{wl-use-petname} is Non-nil, it uses petname to display.
+
+For example, to display recipient names for the message in @samp{+backup} if
+its sender is yourself, set up as follows.
+
+@lisp
+(setq wl-summary-showto-folder-regexp "^\\+backup$")
+@end lisp
+
@node Key Bindings of Summary, Variables of Summary, Summary View, Summary
@section Key bindings
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.
If the message at current cursor point has
encapsulates multiple messages using MIME,
de-capsulate and extract them on the current folder.
+If it is invoked in non-writable folder or it is called with prefix
+argument, it asks the destination folder.
(@code{wl-summary-burst})
@item @@
@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).
external process.
(@code{wl-summary-target-mark-pipe})
+@item D
+@kindex D (Summary)
+@findex wl-summary-erase
+Actually erase the message at once, without moving it to trash.
+(@code{wl-summary-erase})
+
@item M-t
@kindex M-t (Summary)
@findex wl-toggle-plugged
@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.
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}.
The initial setting is 17.
Width of sender part of summary line.
-@item wl-summary-subject-length-limit
-@vindex wl-summary-subject-length-limit
-The initial setting is @code{nil}. Specify the limit for the length of
-subject parts in summary. @code{nil} means unlimited.
-
@item wl-summary-indent-length-limit
@vindex wl-summary-indent-length-limit
The initial setting is 46.
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.
Scrolls the message forward. When the bottom of the message is hit,
moves to the next message.
(@code{wl-message-wheel-up})
+
+@item D
+@kindex D (Message)
+@findex wl-message-delete-current-part
+Delete the part under cursor. In fact it appends modified message to
+the current folder then moves old one to trash folder. Therefore the
+message number will be changed.
+(@code{wl-message-delete-current-part})
@end table
@section Customizable Variables
@node Editing Header, Editing Message Body, Usage of Draft Mode, 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.
@node Editing Message Body, Dynamical Message Re-arrangement, Editing Header, Usage of Draft Mode
@subsection Editing Messages
+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,
a MIME user interface for GNU Emacs}.
expression can be specified as is. If the car part is a header field
and the cdr part is @code{nil}, the field will be deleted.
-If you want to use name of parent folder, you can refer the buffer local
-variable @code{wl-draft-parent-folder}.
-
See the next example as well:
@lisp
when there is no buffer being replied, like after @code{wl-draft} was
invoked.
+If you want to use name of parent folder, you can refer the buffer local
+variable @code{wl-draft-parent-folder}. In the following example, Wanderlust
+changes From according to the folder name of the summary in which the draft
+was invoked.
+
+@lisp
+@group
+(setq wl-draft-config-alist
+ '(((string-match \".*@@domain1$\" wl-draft-parent-folder)
+ (\"From\" . \"user@@domain1\"))
+ ((string-match \".*@@domain2$\" wl-draft-parent-folder)
+ (\"From\" . \"user@@domain2\"))))
+@end group
+@end lisp
+
+
Note that @code{wl-draft-config-alist} is applied only once when
@code{wl-draft-send-and-exit} or @code{wl-draft-send} is invoked.
Therefore, if you want to apply @code{wl-draft-config-alist} again after
@item C-c C-y
@kindex C-c C-y (Draft)
@findex wl-draft-yank-original
-Cites the content of the current message buffer.
+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).
(@code{wl-draft-yank-original})
@item C-c C-p
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}.
This is the SMTP server name for mail transmission.
+@item wl-smtp-posting-port
+@vindex wl-smtp-posting-port
+The initial setting is @code{nil}.
+This is the SMTP port number for mail transmission.
+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}.
@item elmo-enable-disconnected-operation
@vindex elmo-enable-disconnected-operation
-The initial setting is @code{nil}. Controls off-line operations
+The initial setting is @code{t}. Controls off-line operations
regarding IMAP4. If non-nil, off-line operations are carried out.
@item elmo-lost+found-folder
@end table
-@node Scoring, Address Book, Expire and Archive, Top
+@node Scoring, Split messages, Expire and Archive, Top
@chapter Score of the Messages
@cindex Scoring
@c @cindex Kill File
@end example
-@node Address Book, Customization, Scoring, Top
+@node Split messages, Address Book, Scoring, Top
+@chapter 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 Address Book, Customization, Split messages, Top
@chapter Address Book
@cindex Address Book
* Address Manager:: Address Manager
@end menu
+
@node Mail Addresses, Address Manager, Address Book, Address Book
@section Address book
@cindex Address book Definition
@subsection bbdb.el
@pindex BBDB
-Place @file{util/bbdb-wl.el} on the @code{load-path} and do the following
-settings.
+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.
@subsection lsdb.el
@pindex LSDB
-The following is an example of settings:
+The following is an example setting to use
+The Lovely Sister Database (@uref{http://sourceforge.jp/projects/lsdb/})
+with Wanderlust.
@lisp
@group