Import 1.x. start
authorteranisi <teranisi>
Mon, 3 Apr 2000 06:59:08 +0000 (06:59 +0000)
committerteranisi <teranisi>
Mon, 3 Apr 2000 06:59:08 +0000 (06:59 +0000)
159 files changed:
BUGS [new file with mode: 0644]
BUGS.ja [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
INSTALL.ja [new file with mode: 0644]
Makefile [new file with mode: 0644]
NEWS [new file with mode: 0644]
NEWS.ja [new file with mode: 0644]
README [new file with mode: 0644]
README.ja [new file with mode: 0644]
WL-ELS [new file with mode: 0644]
WL-MK [new file with mode: 0644]
doc/TODO.ja [new file with mode: 0644]
doc/wl-ja.texi [new file with mode: 0644]
doc/wl.texi [new file with mode: 0644]
elmo/ChangeLog [new file with mode: 0644]
elmo/elmo-archive.el [new file with mode: 0644]
elmo/elmo-cache.el [new file with mode: 0644]
elmo/elmo-cache2.el [new file with mode: 0644]
elmo/elmo-database.el [new file with mode: 0644]
elmo/elmo-date.el [new file with mode: 0644]
elmo/elmo-dop.el [new file with mode: 0644]
elmo/elmo-filter.el [new file with mode: 0644]
elmo/elmo-imap4.el [new file with mode: 0644]
elmo/elmo-internal.el [new file with mode: 0644]
elmo/elmo-localdir.el [new file with mode: 0644]
elmo/elmo-localnews.el [new file with mode: 0644]
elmo/elmo-maildir.el [new file with mode: 0644]
elmo/elmo-msgdb.el [new file with mode: 0644]
elmo/elmo-multi.el [new file with mode: 0644]
elmo/elmo-nntp.el [new file with mode: 0644]
elmo/elmo-pipe.el [new file with mode: 0644]
elmo/elmo-pop3.el [new file with mode: 0644]
elmo/elmo-util.el [new file with mode: 0644]
elmo/elmo-vars.el [new file with mode: 0644]
elmo/elmo2.el [new file with mode: 0644]
elmo/mmelmo-1.el [new file with mode: 0644]
elmo/mmelmo-2.el [new file with mode: 0644]
elmo/mmelmo-imap4-1.el [new file with mode: 0644]
elmo/mmelmo-imap4-2.el [new file with mode: 0644]
elmo/mmelmo-imap4.el [new file with mode: 0644]
elmo/mmelmo.el [new file with mode: 0644]
elmo/utf7.el [new file with mode: 0644]
etc/ChangeLog.1.ja [new file with mode: 0644]
etc/ChangeLog.2 [new file with mode: 0644]
etc/ChangeLog.2.ja [new file with mode: 0644]
etc/ChangeLog.3 [new file with mode: 0644]
etc/ChangeLog.3.ja [new file with mode: 0644]
etc/icons/archive.xpm [new file with mode: 0644]
etc/icons/closed.xpm [new file with mode: 0644]
etc/icons/draft.xpm [new file with mode: 0644]
etc/icons/elmo.xpm [new file with mode: 0644]
etc/icons/filter.xpm [new file with mode: 0644]
etc/icons/imap.xpm [new file with mode: 0644]
etc/icons/internal.xpm [new file with mode: 0644]
etc/icons/local.xpm [new file with mode: 0644]
etc/icons/localnews.xpm [new file with mode: 0644]
etc/icons/maildir.xpm [new file with mode: 0644]
etc/icons/multi.xpm [new file with mode: 0644]
etc/icons/news.xpm [new file with mode: 0644]
etc/icons/opened.xpm [new file with mode: 0644]
etc/icons/pipe.xpm [new file with mode: 0644]
etc/icons/plugged.xpm [new file with mode: 0644]
etc/icons/pop.xpm [new file with mode: 0644]
etc/icons/queue.xpm [new file with mode: 0644]
etc/icons/trash-e.xpm [new file with mode: 0644]
etc/icons/trash.xpm [new file with mode: 0644]
etc/icons/unplugged.xpm [new file with mode: 0644]
etc/icons/wl-draft-insert-signature-up.xpm [new file with mode: 0644]
etc/icons/wl-draft-kill-up.xpm [new file with mode: 0644]
etc/icons/wl-draft-send-from-toolbar-down.xpm [new file with mode: 0644]
etc/icons/wl-draft-send-from-toolbar-up.xpm [new file with mode: 0644]
etc/icons/wl-draft-up.xpm [new file with mode: 0644]
etc/icons/wl-draft-yank-original-up.xpm [new file with mode: 0644]
etc/icons/wl-exit-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-check-current-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-empty-trash-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-jump-to-current-entity-no-sync-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-jump-to-current-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-next-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-prev-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-read-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-select-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-sync-current-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-folder-zoom-entity-up.xpm [new file with mode: 0644]
etc/icons/wl-logo.xbm [new file with mode: 0644]
etc/icons/wl-logo.xpm [new file with mode: 0644]
etc/icons/wl-message-extract-content-up.xpm [new file with mode: 0644]
etc/icons/wl-message-next-content-up.xpm [new file with mode: 0644]
etc/icons/wl-message-play-content-up.xpm [new file with mode: 0644]
etc/icons/wl-message-prev-content-up.xpm [new file with mode: 0644]
etc/icons/wl-message-quit-up.xpm [new file with mode: 0644]
etc/icons/wl-message-read-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-delete-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-exit-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-forward-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-jump-to-current-message-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-mark-as-important-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-next-page-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-next-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-prev-page-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-prev-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-read-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-reply-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-reply-with-citation-up.xpm [new file with mode: 0644]
etc/icons/wl-summary-sync-force-update-up.xpm [new file with mode: 0644]
etc/ja.Emacs [new file with mode: 0644]
samples/en/dot.addresses [new file with mode: 0644]
samples/en/dot.folders [new file with mode: 0644]
samples/en/dot.wl [new file with mode: 0644]
samples/ja/dot.addresses [new file with mode: 0644]
samples/ja/dot.folders [new file with mode: 0644]
samples/ja/dot.wl [new file with mode: 0644]
utils/bbdb-wl.el [new file with mode: 0644]
utils/im-wl.el [new file with mode: 0644]
utils/rfc2368.el [new file with mode: 0644]
utils/sasl/README.en [new file with mode: 0644]
utils/sasl/lisp/digest-md5.el [new file with mode: 0644]
utils/sasl/lisp/hex-util.el [new file with mode: 0644]
utils/sasl/lisp/hmac-def.el [new file with mode: 0644]
utils/sasl/lisp/hmac-md5.el [new file with mode: 0644]
utils/sasl/lisp/hmac-sha1.el [new file with mode: 0644]
utils/sasl/lisp/md5-dl.el [new file with mode: 0644]
utils/sasl/lisp/md5-el.el [new file with mode: 0644]
utils/sasl/lisp/md5.el [new file with mode: 0644]
utils/sasl/lisp/sasl.el [new file with mode: 0644]
utils/sasl/lisp/scram-md5.el [new file with mode: 0644]
utils/sasl/lisp/sha1-dl.el [new file with mode: 0644]
utils/sasl/lisp/sha1-el.el [new file with mode: 0644]
utils/sasl/lisp/sha1.el [new file with mode: 0644]
utils/sasl/lisp/unique-id.el [new file with mode: 0644]
utils/sasl/src/md5-dl.c [new file with mode: 0644]
utils/sasl/src/sha1-dl.c [new file with mode: 0644]
utils/ssl.el [new file with mode: 0644]
utils/wl-mailto.el [new file with mode: 0644]
wl/ChangeLog [new file with mode: 0644]
wl/tm-wl.el [new file with mode: 0644]
wl/wl-address.el [new file with mode: 0644]
wl/wl-demo.el [new file with mode: 0644]
wl/wl-dnd.el [new file with mode: 0644]
wl/wl-draft.el [new file with mode: 0644]
wl/wl-expire.el [new file with mode: 0644]
wl/wl-fldmgr.el [new file with mode: 0644]
wl/wl-folder.el [new file with mode: 0644]
wl/wl-highlight.el [new file with mode: 0644]
wl/wl-message.el [new file with mode: 0644]
wl/wl-mime.el [new file with mode: 0644]
wl/wl-mule.el [new file with mode: 0644]
wl/wl-nemacs.el [new file with mode: 0644]
wl/wl-refile.el [new file with mode: 0644]
wl/wl-score.el [new file with mode: 0644]
wl/wl-summary.el [new file with mode: 0644]
wl/wl-template.el [new file with mode: 0644]
wl/wl-thread.el [new file with mode: 0644]
wl/wl-util.el [new file with mode: 0644]
wl/wl-vars.el [new file with mode: 0644]
wl/wl-xmas.el [new file with mode: 0644]
wl/wl.el [new file with mode: 0644]

diff --git a/BUGS b/BUGS
new file mode 100644 (file)
index 0000000..5495f34
--- /dev/null
+++ b/BUGS
@@ -0,0 +1 @@
+Cannot communicate with UW imapd with qmail patch.
diff --git a/BUGS.ja b/BUGS.ja
new file mode 100644 (file)
index 0000000..92aadd5
--- /dev/null
+++ b/BUGS.ja
@@ -0,0 +1 @@
+qmail \e$BBP1~$N\e(B UW imapd \e$B$N%a%C%;!<%8$r07$($J$$!#\e(B
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..0744792
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,16 @@
+Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU Emacs; see the file COPYING.  If not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..e4cc6a4
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,21 @@
+2000-03-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl/ChangeLog: New file.
+       * elmo/ChangeLog: New file.
+       * etc/ChangeLog.1.ja: Renamed from etc/ChangeLog.alpha.ja.
+       * etc/ChangeLog.2: Renamed from etc/ChangeLog.beta.
+       * etc/ChangeLog.2.ja: Renamed from etc/ChangeLog.beta.ja.
+       * etc/ChangeLog.3: Renamed from ChangeLog.
+       * etc/ChangeLog.3.ja: Renamed from ChangeLog.ja.
+
+       * WL-MK (WLDIR): Changed to "./wl".
+       (ICONDIR): New variable.
+       (config-wl-package-subr): set wl-icon-dir as ICONDIR.
+       (compile-wl-package-xmas): refer WLDIR.
+
+       * README.ja: Renamed from 00README.ja.
+       * README: Renamed from 00README.
+
+       * wl: New directory.
+       All wl-related files are moved to this directory.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..bce4642
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,180 @@
+
+       How to install Wanderlust
+
+                                      Time-stamp: <00/03/14 20:05:52 teranisi>
+                                      Kaoru Takahashi,
+                                      Yuuichi Teranishi,
+                                      Tsunehiko Baba
+
+Required environment
+====================
+
+  Before installing Wanderlust, please install either of the following
+  MIME modules. SEMI is recommended because it's more functional.
+
+       SEMI    (1.13.4 or later)
+       tm      (8.7 or later)
+
+  If you use Mule based on Emacs 19.28 or earlier, please install tm.
+  SEMI does not support Emacs 19.28 or earlier.
+
+  SEMI only supports relatively new Emacsen like Emacs 20.xx, XEmacs, etc.
+  But Mule based on Emacs 19.34 can also run SEMI.
+  See the following web page to get more information (written by Japanese).
+
+       http://www.jpl.org/elips/INSTALL-SEMI-ja.html
+
+
+(a) SEMI
+
+  SEMI requires APEL and FLIM packages.
+  Recommended combination of APEL, FLIM and SEMI are:
+
+       APEL 10.2, FLIM 1.12.7 and SEMI 1.13.4
+         or
+       APEL 10.2, FLIM 1.13.2 and SEMI 1.13.7
+
+  Combination of APEL 10.2 and FLIM 1.12.7 makes following error
+  while compiling FLIM 1.12.7.
+
+  'Please install latest APEL 7.3 or later.'
+
+  In this case, please comment out following lines in FLIM-CFG.
+
+  (or (fboundp 'write-region-as-binary)
+      (error "Please install latest APEL 7.3 or later."))
+  (or (fboundp 'insert-file-contents-as-binary)
+     (error "Please install latest APEL 7.3 or later."))
+
+  You can download these packages from following URLs.
+
+       APEL:     ftp://ftp.m17n.org/mule/apel/
+       FLIM:     ftp://ftp.m17n.org/mule/flim/
+       SEMI:     ftp://ftp.m17n.org/mule/semi/
+
+  Please install APEL, FLIM, SEMI in order.
+  Generally  'make install' will do the job.
+  To get full information, please refer README.en within each package.
+
+  You can also use many other FLIM/SEMI variants.
+  Combination of the latest versions should work.
+  For example, following combination is confirmed to work.
+
+       APEL 10.2, Chao 1.14.1 and REMI 1.14.1
+
+(b) tm
+
+  The tm, whose version is 8.7 or later, is recommended.  Please
+  obtain from the following web site.
+
+       http://cvs.m17n.org/tomo/comp/emacsen/tm/tm-8/
+
+  To get full information, please refer README.en within package.
+
+
+Installation
+============
+
+(a) Edit Makefile
+
+  Edit EMACS, LISPDIR, and so on in Makefile.
+
+       EMACS      Emacs command name.
+       LISPDIR    site-lisp directory.
+
+  If LISPDIR is not specified (or NONE by default), it is automatically
+  detected.
+
+(b) Bytecompile and Install
+
+  Please do following.
+
+       % make
+       % make install
+
+  If you use Emacs without subdirs.el (e.g. Mule 2.3 based on Emacs
+  19.28), the following error message ocasinally appears.
+
+       Cannot open load file: mime-setup
+
+  In this case, add directories of custom, APEL, FLIM, SEMI to
+  EMACSLOADPATH (environment variable), or add those directories to
+  load-path in WL-CFG.
+
+
+Install as a XEmacs package
+===========================
+
+  Wanderlust is able to be installed as one of XEmacs (21.0 or later)
+  packages.  After installation as a XEmacs package, you do not need
+  configurations of autoload, icon path in your own .emacs file.
+
+(a) Edit Makefile
+
+  Edit XEMACS, PACKAGEDIR, and so on in Makefile.
+
+       XEMACS      XEmacs command name.
+       PACKAGEDIR  package directory.
+
+  If PACKAGEDIR is not specified (NONE by default) and the SEMI
+  modules have been installed, it is automatically detected.
+
+(b) Bytecompile and Install
+
+  Please do following.
+
+       % make package
+       % make install-package
+
+  Install with Info file.
+
+
+load-path
+=========
+
+  If you are using Emacs 20.3 or later, or XEmacs, there are no need
+  of setting about load-path.
+
+  If you are using Emacs 20.2 or earlier, please add directory of
+  Wanderlust to load-path.
+
+  If you install by default setting, with Emacs 19.29 or later, Emacs
+  20.1, or Emacs 20.2, you can write subdirs.el for example:
+
+  --------------------------------------------------------------------
+    (normal-top-level-add-to-load-path
+     '("apel" "flim" "semi" "wl"))
+  --------------------------------------------------------------------
+
+  If you are using Emacs 19.28 or earlier, you can't use subdirs.el.
+  Please you write setting about load-path in site configuration file.
+
+
+Manual
+======
+
+  Manual is described in Info format. Please do following.
+
+       % make info
+       % make install-info
+
+  If you install Wanderlust as a XEmacs package, Info file is already
+  installed too, so there are no need of these commands.
+
+  Manual directory is automatically detected. Of course, it can be
+  configured by INFODIR in Makefile.
+
+
+Sample configuration file
+=========================
+
+  Wanderlust requires following three configuration files.
+
+       ~/.addresses    Address Book
+       ~/.folders      Folder Book
+       ~/.wl           Wanderlust Configuration (loaded at startup)
+
+  Each sample file (dot.addresses, dot.folders, dot.wl) exists on
+  samples/en/ directory. Please refer them.
+
+  To get full information, please read Info file.
diff --git a/INSTALL.ja b/INSTALL.ja
new file mode 100644 (file)
index 0000000..a238f52
--- /dev/null
@@ -0,0 +1,190 @@
+
+       Wanderlust \e$B$N%$%s%9%H!<%kJ}K!\e(B
+
+                                      Time-stamp: <00/03/14 20:06:38 teranisi>
+                                      Kaoru Takahashi   \e$B9b660j\e(B,
+                                      Yuuichi Teranishi \e$B;{@>M50l\e(B
+
+MIME\e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k\e(B
+==============================
+
+  Wanderlust \e$B$r;H$&$?$a$K$O!"0J2<$N$I$A$i$+$N\e(B MIME \e$BMQ%b%8%e!<%k$r%$%s\e(B
+  \e$B%9%H!<%k$7$F$*$/I,MW$,$"$j$^$9!#5!G=$,=<<B$7$F$$$k\e(B SEMI \e$B$N;HMQ$r$*4+\e(B
+  \e$B$a$7$^$9!#\e(B
+
+       SEMI    (1.13.4 \e$B0J>e\e(B)
+       tm      (8.7 \e$B0J>e\e(B)
+
+  Emacs 19.28 \e$B0JA0$r%Y!<%9$H$7$?\e(B Mule \e$B$r$*;H$$$N>l9g$O\e(B tm \e$B$r%$%s%9%H!<\e(B
+  \e$B%k$7$F$/$@$5$$!#\e(BSEMI \e$B$OF0$-$^$;$s!#\e(B
+
+  Emacs 19.34 \e$B%Y!<%9$N\e(B Mule \e$B$G$O\e(B SEMI \e$B$rF0:n$5$;$k$3$H$b2DG=$G$9!#\e(B
+  \e$B2<5-$N%Z!<%8$,;29M$K$J$j$^$9!#\e(B
+
+       http://www.jpl.org/elips/INSTALL-SEMI-ja.html
+
+
+(a) SEMI \e$B$N%$%s%9%H!<%k\e(B
+
+  SEMI \e$B$K$O\e(B APEL, FLIM \e$B$H8F$P$l$k%Q%C%1!<%8$bI,MW$G$9!#\e(B
+  \e$B?d>)$5$l$k\e(B APEL, FLIM, SEMI \e$B$NAH9g$;$O0J2<$NDL$j$G$9!#\e(B
+
+       APEL 10.2, FLIM 1.12.7, SEMI 1.13.4
+         \e$B$^$?$O!"\e(B
+       APEL 10.2, FLIM 1.13.2, SEMI 1.13.7
+
+   APEL 10.2 \e$B$H\e(B FLIM 1.12.7 \e$B$NAH9g$;$G$O!"\e(BFLIM 1.12.7 \e$B$N%3%s%Q%$%k;~$K\e(B
+
+   'Please install latest APEL 7.3 or later.'
+   
+  \e$B$H$$$&%(%i!<$,H/@8$9$k>l9g$,$"$j$^$9!#$3$N>l9g!"\e(BFLIM-CFG \e$B$N0J2<$N9T$r\e(B
+  \e$B%3%a%s%H%"%&%H$7$F2<$5$$!#\e(B
+
+  (or (fboundp 'write-region-as-binary)
+      (error "Please install latest APEL 7.3 or later."))
+  (or (fboundp 'insert-file-contents-as-binary)
+      (error "Please install latest APEL 7.3 or later."))
+
+  APEL, FLIM, SEMI, \e$B%Q%C%1!<%8$O$=$l$>$l0J2<$N\e(B URL \e$B$GF~<j2DG=$G$9!#\e(B
+
+       APEL:     ftp://ftp.m17n.org/mule/apel/
+       FLIM:     ftp://ftp.m17n.org/mule/flim/
+       SEMI:     ftp://ftp.m17n.org/mule/semi/
+
+  APEL, FLIM, SEMI \e$B$N=g$K%$%s%9%H!<%k$7$F$/$@$5$$!#4pK\E*$K$9$Y$F\e(B
+  make install \e$B$N<B9T$G:Q$`$O$:$G$9!#\e(B
+
+  \e$B>\$7$$%$%s%9%H!<%k$NJ}K!$O3F%Q%C%1!<%8$KE:IU$5$l$F$$$k%I%-%e%a%s%H\e(B 
+  (README.ja, README.en) \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+  \e$B$=$NB>!"\e(BFLIM, SEMI \e$B$K$O$$$m$$$m$JJQ7A%P!<%8%g%s$,B8:_$7$^$9$,!"\e(B
+  \e$B$=$l$i$N$$$:$l$bMxMQ$9$k$3$H$,2DG=$G$9!#\e(B
+  \e$B4pK\E*$K:G?7HG$NAH9g$;$J$iF0:n$9$k$O$:$G$9!#\e(B
+  \e$BNc$($P!"0J2<$NAH9g$;$NF0:n$,3NG'$5$l$F$$$^$9!#\e(B
+
+       APEL 10.2, Chao 1.14.1, REMI 1.14.1
+
+(b) tm \e$B$N%$%s%9%H!<%k\e(B
+
+  tm 8.7 \e$B0J9_$N%P!<%8%g%s$,I,MW$G$9!#F~<j@h$r0J2<$K<($7$^$9!#\e(B
+
+       http://cvs.m17n.org/tomo/comp/emacsen/tm/tm-8/
+
+  \e$B>\$7$$%$%s%9%H!<%k$NJ}K!$O%Q%C%1!<%8$KE:IU$5$l$F$$$k%I%-%e%a%s%H\e(B
+  (README.en) \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+\e$BDL>o$N%$%s%9%H!<%k\e(B
+==================
+
+(a)Makefile \e$B$NJT=8\e(B
+
+  Makefile \e$B$O!"\e(BEMACS, LISPDIR \e$B$NItJ,$rJT=8$7$F$/$@$5$$!#\e(B
+
+       EMACS       \e$B;HMQ$7$F$$$k\e(B Emacs \e$B$N%3%^%s%IL>$r;XDj\e(B
+       LISPDIR    \e$B%$%s%9%H!<%k@h$r;XDj\e(B
+
+  LISPDIR \e$B$OFC$K;XDj$7$J$/$F$b\e(B (NONE \e$B$N$^$^$G$b\e(B) \e$B<+F0E*$K%$%s%9%H!<%k\e(B
+  \e$B@h$r8!=P$7$^$9!#\e(B
+
+(b)\e$B%P%$%H%3%s%Q%$%k!&%$%s%9%H!<%k\e(B
+
+  \e$B0J2<$r<B9T$7$F$/$@$5$$!#\e(B
+
+       % make
+       % make install
+
+  \e$B$3$N$H$-!"\e(BEmacs 19.28 \e$B%Y!<%9$N\e(B Mule 2.3 \e$B$J$I\e(B subdirs.el \e$B$N$J$$\e(B Emacs 
+  \e$B$G$O!"\e(B
+
+       Cannot open load file: mime-setup
+
+  \e$B$H$$$&%(%i!<$,=P$k$3$H$,$"$j$^$9!#\e(B
+
+  \e$B$3$N>l9g$O!"\e(Bcustom, APEL, FLIM, SEMI \e$B$N%$%s%9%H!<%k@h$r4D6-JQ?t\e(B
+  EMACSLOADPATH \e$B$K2C$($k$+!"E83+%G%#%l%/%H%j$N\e(B WL-CFG \e$B$H$$$&%U%!%$%kCf\e(B
+  \e$B$G\e(B load-path \e$B$rDL$7$F$*$/$H$h$$$G$7$g$&!#\e(B
+
+
+XEmacs \e$B$N%Q%C%1!<%8$H$7$F%$%s%9%H!<%k\e(B
+=====================================
+
+  Wanderlust \e$B$O\e(B XEmacs (21.0 \e$B0J9_\e(B) \e$B$N%Q%C%1!<%8$N$R$H$D$H$7$F%$%s%9%H!<\e(B
+  \e$B%k$9$k$3$H$b2DG=$G$9!#%Q%C%1!<%8$H$7$F%$%s%9%H!<%k$9$k$H!"\e(Bautoload 
+  \e$B$N@_Dj!"%"%$%3%s$N%Q%9@_Dj$r8D?M$N\e(B .emacs \e$B$K5-=R$7$J$/$F$b\e(B 
+  Wanderlust \e$B$r@5>o$K5/F0$G$-$k$h$&$K$J$j$^$9!#\e(B
+
+(a)Makefile \e$B$NJT=8\e(B
+
+  Makefile \e$B$O!"\e(BXEMACS, PACKAGEDIR \e$B$NItJ,$rJT=8$7$F$/$@$5$$!#\e(B
+
+       XEMACS      \e$B;HMQ$7$F$$$k\e(B XEmacs \e$B$N%3%^%s%IL>$r;XDj\e(B
+       PACKAGEDIR  package \e$B$N%G%#%l%/%H%j$r;XDj\e(B
+
+  PACKAGEDIR \e$B$OFC$K;XDj$7$J$/$F$b\e(B (NONE \e$B$N$^$^$G$b\e(B)\e$B!"\e(BSEMI \e$B$,%$%s%9%H!<\e(B
+  \e$B%k$5$l$F$$$l$P<+F0E*$K8!=P$5$l$^$9!#\e(B
+
+
+(b)\e$B%P%$%H%3%s%Q%$%k!&%$%s%9%H!<%k\e(B
+
+  \e$B0J2<$r<B9T$7$F$/$@$5$$!#\e(B
+
+       % make package
+       % make install-package
+
+  Info \e$B%U%!%$%k$bF1;~$K%$%s%9%H!<%k$5$l$^$9!#\e(B
+
+
+load-path \e$B$N@_Dj\e(B
+================
+
+  Emacs 20.3 \e$B0J9_$b$7$/$O\e(B XEmacs \e$B;H$C$FIaDL$K%$%s%9%H!<%k$7$?>l9g$O!"\e(B
+  load-path \e$B$r@_Dj$9$kI,MW$O$"$j$^$;$s!#\e(B
+
+  Emacs 20.2 \e$B0JA0$r$*;H$$$J$i!"\e(BWanderlust \e$B$r\e(B install \e$B$7$?>l=j$r\e(B
+  load-path \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+  \e$B$b$7\e(B Emacs 19.29 \e$B0J9_$^$?$O\e(B Emacs 20.1, Emacs 20.2 \e$B$r;H$C$F=i4|@_Dj\e(B
+  \e$B$G%$%s%9%H!<%k$7$?$N$J$i!"<!$N$h$&$K\e(B subdirs.el \e$B$r=q$/$3$H$,$G$-$^$9!#\e(B
+
+  --------------------------------------------------------------------
+    (normal-top-level-add-to-load-path
+     '("apel" "flim" "semi" "wl"))
+  --------------------------------------------------------------------
+
+  Emacs 19.28 \e$B0JA0$G$O\e(B subdirs.el \e$B$r;H$&$3$H$,$G$-$^$;$s$N$G!"%5%$%H$N\e(B
+  \e$B=i4|@_Dj%U%!%$%k$J$I$G\e(B load-path \e$B$r@_Dj$7$F$/$@$5$$!#\e(B
+
+
+\e$B%^%K%e%"%k$N%$%s%9%H!<%k\e(B
+========================
+
+  \e$B%^%K%e%"%k$O\e(B Info \e$B7A<0$G$9!#%$%s%9%H!<%k$9$k$K$O0J2<$N$3$H$r<B9T$7$F\e(B
+  \e$B$/$@$5$$!#\e(B
+
+       % make info
+       % make install-info
+
+  XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$7$?>l9g$O<+F0E*$K\e(B Info \e$B%U%!%$%k\e(B
+  \e$B$b%$%s%9%H!<%k$5$l$k$N$G$3$l$i$NA`:n$OI,MW$"$j$^$;$s!#\e(B
+
+  \e$B%^%K%e%"%k$N%$%s%9%H!<%k@h$O<+F08!=P$5$l$^$9!#\e(B(Makefile \e$BCf$N\e(B INFODIR 
+  \e$B$G$b@_Dj2DG=$G$9\e(B)
+
+
+\e$B%5%s%W%k@_Dj\e(B
+============
+
+  Wanderlust \e$B$N@_Dj%U%!%$%k$K$O!"\e(B
+
+    ~/.addresses  \e$B%"%I%l%9D"\e(B
+    ~/.folders    \e$B%U%)%k%@@_Dj\e(B
+    ~/.wl         Wanderlust \e$B$N@_Dj\e(B (\e$B5/F0;~$KFI$_9~$^$l$k\e(B)
+
+  \e$B$N;0$D$,$"$j$^$9!#\e(B
+
+  \e$B$=$l$>$l!"\e(Bsamples/ja/ \e$B%G%#%l%/%H%j$N2<$K%5%s%W%k@_Dj\e(B
+  (dot.addresses, dot.folders, dot.wl) \e$B$,$"$j$^$9$N$G!"\e(B
+  \e$B3F<+$G%[!<%`%G%#%l%/%H%j$K%3%T!<$7$FJT=8$9$k$J$I$7$F$/$@$5$$!#\e(B
+
+  \e$B>\$7$$@_Dj$O\e(B Info \e$B$r8fMw$/$@$5$$!#\e(B
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..55874cd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,56 @@
+#
+# Please specify your Emacs here.
+#
+EMACS  = emacs
+# To install Wanderlust for XEmacs 21 or later,
+# running 'make install-package' is recommended.
+# 'make install-package' refers $XEMACS instead of $EMACS.
+XEMACS  = xemacs
+#
+# Target directory to install the Wanderlust package.
+# (Automatically detected if this line is unchanged.)
+#
+LISPDIR = NONE
+#LISPDIR = /usr/local/lib/mule/site-lisp
+
+INFODIR = NONE
+#INFODIR = /usr/local/share/info
+
+# For XEmacs package.
+PACKAGEDIR = NONE
+
+
+################# No need to modify following lines ####################
+FLAGS   = -batch -q -no-site-file
+
+elc:
+       $(EMACS) $(FLAGS) -l WL-MK -f compile-wl-package $(LISPDIR)
+
+install-elc:
+       $(EMACS) $(FLAGS) -l WL-MK -f install-wl-package $(LISPDIR)
+
+uninstall-elc:
+       $(EMACS) $(FLAGS) -l WL-MK -f uninstall-wl-package $(LISPDIR)
+
+clean-elc:
+       rm -f wl/*.elc wl/auto-autoloads.el wl/custom-load.el elmo/*.elc utils/*.elc utils/hmac/lisp/*.elc
+
+package:
+       $(XEMACS) $(FLAGS) -l WL-MK -f compile-wl-package-xmas $(PACKAGEDIR)
+
+install-package:
+       $(XEMACS) $(FLAGS) -l WL-MK -f install-wl-package-xmas $(PACKAGEDIR)
+
+info:
+       $(EMACS) $(FLAGS) -l WL-MK -f wl-texinfo-format $(INFODIR)
+
+install-info:
+       $(EMACS) $(FLAGS) -l WL-MK -f install-wl-info $(INFODIR)
+
+all: elc
+
+install: install-elc
+
+uninstall: uninstall-elc
+
+clean: clean-elc
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..9846dd2
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,133 @@
+Wanderlust NEWS -- User-visible changes in Wanderlust. 21 Mar 2000
+
+* Changes in version 1.1.1.
+
+** Directory structure is changed.
+
+*** 00README, 00README.ja is renamed to README, README.ja.
+
+*** All wl-* files are moved to the directory 'wl'.
+
+* Changes in version 1.1.0 from 1.0.3.
+
+** Install
+
+*** tm7 is not supported anymore.
+see the file INSTALL for details.
+
+*** WL_PREFIX and ELMO_PREFIX default as "wl"
+(defvar WL_PREFIX "wl")
+(defvar ELMO_PREFIX "wl")
+
+e.g. install directory is
+  1.0.3  /usr/local/share/emacs/site-lisp/
+  1.1.0  /usr/local/share/emacs/site-lisp/wl/
+
+*** Change default macro in Makefile.
+EMACS   = emacs
+XEMACS  = xemacs
+use $(XEMACS), `package' and `install-package' target.
+
+*** Install not only *.elc, but also *.el.
+
+*** English document (wl.texi).
+
+** New feature
+
+*** Modified UTF7 support.
+Now international mailbox name can be used in IMAP4 in the Emacsen
+with unicode feature.
+
+*** Scoring support.
+
+*** New plugged system.
+
+*** IMAP4 support became more generic.
+Many IMAP4 servers are supported.
+
+*** New authentication type
+  IMAP4: CRAM-MD5, DIGEST-MD5, STARTTLS
+  POP3:  CRAM-MD5, DIGEST-MD5, SCRAM-MD5, STARTTLS
+  NNTP:  STARTTLS
+  SMTP:  STARTTLS
+
+*** New folder type
+  |      Pipe Folder     Incorporate message.
+  .      Maildir Folder  Now Maildir is one of the folder type.
+  'cache Cache Folder    View internal cache.
+
+*** Message buffer cache
+Next message is prefetched while idle time.
+
+*** Sticky summary is enhanced.
+Now message buffer is also sticky.
+You can specify always-sticky summary.
+
+** misc
+
+*** Eliminated wl-draft-prepared-config-alist
+unified with wl-draft-config-alist.
+
+*** POP-before-SMTP variables are re-arranged.
+
+*** Ask non-existing folder.
+ When FCC: contains new folder.
+ When auto-refile specified new folder.
+
+*** Change fetch threshold and confirm settings.
+wl-prefetch-confirm-threshold, wl-cache-fetch-threshold.
+
+*** Can use petname for completion.
+
+*** Change Message-ID generator.
+
+*** wl-demo.el support bitmap-mule.
+
+*** Allow function type `smtp-server' value.
+
+*** Make sendlog when `wl-draft-sendlog' is non-nil.
+
+*** `wl-summary-incorporate-marks'
+
+*** Reserve prefetching while off-line status.
+
+*** Draft use new frame when `wl-draft-use-frame' is non-nil.
+
+*** New variable `wl-user-mail-address-list' .
+
+*** New variable `wl-local-domain' for set FQDN.
+
+*** Server side unread status is used in IMAP4 folder.
+
+*** Change defaults
+  wl-mime-charset         iso-2022-jp  =>  x-ctext
+  wl-summary-move-order   'new  =>  'unread
+  wl-tmp-dir              TMPDIR  =>  ~/tmp/
+
+*** New hooks
+  wl-draft-send-hook
+  wl-draft-reedit-hook
+  wl-mime-edit-preview-message-hook
+  wl-folder-suspend-hook
+  wl-summary-toggle-disp-folder-message-resumed-hook
+  wl-summary-line-inserted-hook
+  wl-thread-update-children-number-hook
+  mmelmo-header-inserted-hook
+  mmelmo-entity-content-inserted-hook
+
+*** New function
+  wl-save
+  wl-summary-write
+  wl-summary-supersedes-message
+  wl-fldmgr-delete
+  wl-refile-guess-by-msgid
+  wl-address-user-mail-address-p
+  wl-summary-jump-to-msg-by-message-id-via-nntp
+  wl-summary-temp-mark-pick
+
+* For details of changes, see the file ChangeLog.
+\f
+Local variables:
+mode: outline
+paragraph-separate: "[         \f]*$"
+end:
diff --git a/NEWS.ja b/NEWS.ja
new file mode 100644 (file)
index 0000000..511373c
--- /dev/null
+++ b/NEWS.ja
@@ -0,0 +1,136 @@
+Wanderlust NEWS (\e$BF|K\8lHG\e(B) -- User-visible changes in Wanderlust. 21 Mar 2000
+
+* 1.1.1 \e$B$NJQ99E@\e(B.
+
+** \e$B%G%#%l%/%H%j9=@.$,$+$o$j$^$7$?!#\e(B
+
+*** 00README, 00README.ja \e$B$O\e(B README, README.ja \e$B$KJQ99$5$l$^$7$?!#\e(B
+
+*** wl-* \e$B$N%U%!%$%k$O\e(B 'wl' \e$B%G%#%l%/%H%j$K0\F0$7$^$7$?!#\e(B
+
+* 1.0.3 \e$B$+$i\e(B version 1.1.0 \e$B$X$NJQ99E@\e(B 
+
+** \e$B%$%s%9%H!<%k\e(B
+
+*** tm7 \e$B$O%5%]!<%H$5$l$J$/$J$j$^$7$?!%\e(B
+
+\e$B$/$o$7$/$O\e(B INSTALL.ja \e$B$r8fMw2<$5$$!%\e(B
+
+*** WL_PREFIX \e$B$H\e(B ELMO_PREFIX \e$B$N=i4|@_Dj$,\e(B "wl" \e$B$K$J$j$^$7$?!%\e(B
+(defvar WL_PREFIX "wl")
+(defvar ELMO_PREFIX "wl")
+
+\e$BNc$($P!$%$%s%9%H!<%k%G%#%l%/%H%j$O!$\e(B
+  1.0.3  /usr/local/share/emacs/site-lisp/
+  1.1.0  /usr/local/share/emacs/site-lisp/wl/
+\e$B$H$J$j$^$9!%\e(B
+
+*** Makefile \e$B$NJQ?t$N%G%U%)%k%HCM$,JQ$o$j$^$7$?!%\e(B
+
+EMACS   = emacs
+XEMACS  = xemacs
+$(XEMACS) \e$B$O!$\e(B`package' \e$B$d\e(B `install-package' \e$B$N\e(B target \e$B$G;2>H$5$l$^$9!%\e(B
+
+*** *.el \e$B%U%!%$%k$b%$%s%9%H!<%k$5$l$k$h$&$K$J$j$^$7$?!%\e(B
+
+*** \e$B1Q8lHG%I%-%e%a%s%H\e(B (wl.texi) \e$B$,IU$-$^$7$?!%\e(B
+
+** \e$B?75!G=\e(B
+
+*** Modified UTF7 \e$B$,%5%]!<%H$5$l$^$7$?!%\e(B
+\e$B%f%K%3!<%I$,07$($k\e(B Emacs \e$B$G$O!$\e(BIMAP4 \e$B$GF|K\8l%a!<%k%\%C%/%9L>$r;XDj$G$-$^$9!%\e(B
+
+*** \e$B%9%3%"5!G=$,IU$-$^$7$?!%\e(B
+
+*** \e$B%W%i%04IM}5!G=$,IU$-$^$7$?!%\e(B
+
+*** IMAP4 \e$B$,$h$jHFMQE*$K$J$j$^$7$?!%\e(B
+\e$BB?$/$N\e(B IMAP4 \e$B%5!<%P$GF0$/$h$&$K$J$j$^$7$?!%\e(B
+
+*** \e$B$$$/$D$+$NG'>ZJ}<0$,%5%]!<%H$5$l$^$7$?!%\e(B
+  IMAP4: CRAM-MD5, DIGEST-MD5, STARTTLS
+  POP3:  CRAM-MD5, DIGEST-MD5, SCRAM-MD5, STARTTLS
+  NNTP:  STARTTLS
+  SMTP:  STARTTLS
+
+*** \e$B?7$7$$%U%)%k%@7?$,2C$o$j$^$7$?!%\e(B
+  |      \e$B%Q%$%W%U%)%k%@\e(B     \e$B%a%C%;!<%8$r<h$j9~$`%U%)%k%@$G$9!%\e(B
+  .      Maildir \e$B%U%)%k%@\e(B   Maildir \e$B$,$R$H$D$N%U%)%k%@7?$K$J$j$^$7$?!%\e(B
+  'cache \e$B%-%c%C%7%e%U%)%k%@\e(B \e$BFbIt%-%c%C%7%e$r%U%)%k%@$H$7$F1\Mw$G$-$^$9!%\e(B
+
+*** \e$B%a%C%;!<%8%P%C%U%!$N%W%j%U%'%C%A5!G=$,IU$-$^$7$?!%\e(B
+\e$BFI$s$G$$$k4V$K<!$N%a%C%;!<%8$rFI$_9~$_$^$9!%\e(B
+
+*** \e$B%9%F%#%C%-!<%5%^%j\e(B(\e$B>C$($J$$%5%^%j\e(B)\e$B$,3HD%$5$l$^$7$?!%\e(B
+\e$B%a%C%;!<%8%P%C%U%!$b%5%^%j$KBP1~$7$FMQ0U$5$l$k$h$&$K$J$j$^$7$?!%\e(B
+\e$B>o$K%9%F%#%C%-!<$K$J$k%U%)%k%@$r@_Dj$G$-$k$h$&$K$J$j$^$7$?!%\e(B
+
+** \e$B$=$NB>\e(B
+
+*** \e$BJQ?t\e(B wl-draft-prepared-config-alist \e$B$OGQ;_$5$l$^$7$?!%\e(B
+wl-draft-config-alist \e$B$KE}9g$5$l$^$7$?!%\e(B
+
+*** POP-before-SMTP \e$B4XO"$NJQ?t$,@0M}$5$l$^$7$?!%\e(B
+
+*** \e$BB8:_$7$J$$%U%)%k%@$r:n$k$+$I$&$+3NG'$9$k$h$&$K$J$j$^$7$?!%\e(B
+ FCC: \e$B$K?7$7$$%U%)%k%@L>$r;XDj$7$?$H$-$d!$\e(Bauto-refile \e$B$G\e(B
\e$B?7$7$$%U%)%k%@L>$r;XDj$7$?$H$-$K%U%)%k%@$r:n$k$+$I$&$+3NG'$7$^$9!%\e(B
+
+*** \e$B%W%j%U%'%C%A$N3NG'$K4X$9$k@_Dj$NJQ?t$,2C$o$j$^$7$?!%\e(B
+wl-prefetch-confirm-threshold, wl-cache-fetch-threshold.
+
+*** \e$B%U%)%k%@L>$N$"$@L>$r%U%)%k%@L>F~NO$GJd40$G$-$k$h$&$K$J$j$^$7$?!%\e(B
+
+*** Message-ID \e$B$N@8@.J}K!$,JQ$o$j$^$7$?!%\e(B
+
+*** Mule \e$B$G$O%S%C%H%^%C%W$N%*!<%W%K%s%0%G%b2hLL$,=P$k$h$&$K$J$j$^$7$?!%\e(B
+
+*** `smtp-server' \e$B$K4X?t$r;XDj$G$-$^$9!%\e(B
+
+*** \e$BAw?.%m%0$,J]B8$5$l$k$h$&$K$J$j$^$7$?!%\e(B
+`wl-draft-sendlog' \e$B$,\e(B non-nil \e$B$N>l9g!$\e(B'sendlog' \e$B%U%!%$%k$KJ]B8$5$l$^$9!%\e(B
+
+*** \e$B%*%U%i%$%s=hM}$G%W%j%U%'%C%A$rM=Ls$G$-$k$h$&$K$J$j$^$7$?!%\e(B
+
+*** `wl-summary-incorporate-marks'
+
+*** `wl-draft-use-frame' \e$B$,\e(B non-nil \e$B$J$i%U%l!<%`$r@8@.$7$^$9!%\e(B
+
+*** \e$B?75,JQ?t\e(B `wl-user-mail-address-list'\e$B!%\e(B
+
+*** \e$B?75,JQ?t\e(B `wl-local-domain'\e$B!%\e(B
+
+*** IMAP4 \e$B$G%5!<%PB&$NL$FI>uBV$r;2>H$9$k$h$&$K$J$j$^$7$?!%\e(B
+
+*** \e$B=i4|@_Dj$,JQ99$5$l$?JQ?t\e(B
+  wl-mime-charset         iso-2022-jp  =>  x-ctext
+  wl-summary-move-order   'new  =>  'unread
+  wl-tmp-dir              TMPDIR  =>  ~/tmp/
+
+*** \e$B?75,\e(B hook
+  wl-draft-send-hook
+  wl-draft-reedit-hook
+  wl-mime-edit-preview-message-hook
+  wl-folder-suspend-hook
+  wl-summary-toggle-disp-folder-message-resumed-hook
+  wl-summary-line-inserted-hook
+  wl-thread-update-children-number-hook
+  mmelmo-header-inserted-hook
+  mmelmo-entity-content-inserted-hook
+
+*** \e$B?75,%3%^%s%I\e(B
+  wl-save
+  wl-summary-write
+  wl-summary-supersedes-message
+  wl-fldmgr-delete
+  wl-refile-guess-by-msgid
+  wl-address-user-mail-address-p
+  wl-summary-jump-to-msg-by-message-id-via-nntp
+  wl-summary-temp-mark-pick
+
+* \e$BJQ99E@$N>\:Y$O\e(B ChangeLog \e$B$r8fMw2<$5$$!%\e(B
+\f
+Local variables:
+mode: outline
+paragraph-separate: "[         \f]*$"
+end:
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..e01331f
--- /dev/null
+++ b/README
@@ -0,0 +1,71 @@
+
+ Wanderlust -- Yet Another Message Interface on Emacsen
+                      by Yuuichi Teranishi <teranisi@gohome.org>
+                      Time-stamp: <2000-02-24 00:26:49 teranisi>
+
+Wanderlust is a mail/news management system with IMAP4rev1 support for Emacs.
+
+Features:
+
+ * Implementation in elisp only.
+ * Support of IMAP4rev1 [1], NNTP [2], POP(POP3[3]/APOP), MH and Maildir.
+ * Integrated access to messages based on Folder Specifications like Mew[4].
+ * Key bindings and mark processing like Mew.
+ * Management of threads and unread messages.
+ * Folder mode to select and edit subscribed folders.
+ * Message cache, Disconnected Operation.
+ * MH-like FCC (FCC: %Backup is possible).
+ * Full support of MIME (by SEMI or tm[5]).
+ * Draft editing of mail and news as a same interface.
+ * Icon based interface for the list of Folder (XEmacs).
+ * Skip fetching of a large message part of MIME(IMAP4).
+ * Server side searching (IMAP4), internationalized searching is available.
+ * Virtual folder.
+ * Compressed folder.
+ * Automatic expiration of old messages.
+ * Automatic refiling.
+ * Draft templates.
+
+System Requirements:
+
+ * Emacs19 or later.
+ * tm or SEMI (version 1.13.4 or later).
+
+Install:
+
+See INSTALL to install.
+
+Web Page:
+
+Wanderlust Official web page is available at:
+
+http://www.gohome.org/wl/.
+
+You can get latest Wanderlust version from there.
+
+Mailing List:
+
+Wanderlust Mailing List <wl@lists.airs.net>
+
+Via the Wanderlust ML, we discuss about Wanderlust, announce the latest
+release in Japanese.
+
+To subscribe, send mail to wl-ctl@lists.airs.net, with '# guide' as
+the message body.
+
+References:
+
+[1] M. Crispin, "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1", RFC 2060,
+    1996.
+[2] B. Kantor and P. Lapsley, "Network News Transfer Protocol: A
+    Proposed Standard for the Stream-Based Transmission of News", RFC
+    977, 1986.
+[3] J. Myers, M. Rose, "Post Office Protocol - Version 3", RFC 1929, 1996.
+[4] "Mew -- Messaging in the Emacs World", 
+    (Copyright (C) 1994, 1995, 1996, 1997, 1998 Mew developing team.)
+    Available from http://www.mew.org/.
+[5] "tm -- MIME package for GNU Emacs",
+    (Copyright (C) 1994, 1995, 1996 MORIOKA Tomohiko)
+    Latest tm package is available from 
+    ftp://ftp.jaist.ac.jp/pub/GNU/elisp/
+
diff --git a/README.ja b/README.ja
new file mode 100644 (file)
index 0000000..123033f
--- /dev/null
+++ b/README.ja
@@ -0,0 +1,71 @@
+
+ Wanderlust -- Yet Another Message Interaface on Emacsen
+                     by Yuuichi Teranishi <teranisi@gohome.org>
+                     Time-stamp: <99/12/06 18:55:57 teranisi>
+
+Wanderlust \e$B$O\e(B Emacs \e$B>e$GF0$/\e(B IMAP4rev1 \e$BBP1~$N%a!<%k\e(B/\e$B%K%e!<%94IM}%7%9%F%`$G$9!#\e(B
+
+Features:
+
+ * elisp \e$B$N$_$K$h$k<BAu!#\e(B
+ * IMAP4rev1 [1]\e$B!"\e(BNNTP [2]\e$B!"\e(BPOP(POP3[3]/APOP)\e$B!"\e(BMH \e$B7A<0$N%5%]!<%H!#\e(B
+ * Mew [4] \e$B$C$]$$\e(B Folder Specification \e$B$K4p$E$/%a%C%;!<%8$X$NE}0lE*%"%/%;%9!#\e(B
+ * Mew \e$B$C$]$$%-!<%P%$%s%I$H%^!<%/=hM}!#\e(B
+ * \e$B%9%l%C%I$HL$FI4IM}!#\e(B
+ * \e$B9XFI%U%)%k%@$N0lMw$rI=<($9$k%U%)%k%@%b!<%I!#\e(B
+ * \e$B%a%C%;!<%8%-%c%C%7%e!"\e(B Disconnected Operation\e$B!#\e(B
+ * MH \e$BE*\e(B FCC\e$B!#\e(B(FCC: %Backup \e$B$b2D\e(B)\e$B!#\e(B
+ * MIME \e$BBP1~\e(B (by SEMI or tm [5])\e$B!#\e(B
+ * \e$B%K%e!<%9\e(B/\e$B%a!<%k$NAw?.$rE}9g$7$?%I%i%U%HJT=8!#\e(B
+ * \e$B%U%)%k%@0lMw$N%"%$%3%sI=<(\e(B (XEmacs)\e$B!#\e(B
+ * \e$BBg$-$J%Q!<%H$r<h$j4s$;$:$KI=<(\e(B(IMAP4)\e$B!#\e(B
+ * \e$B%a%C%;!<%8$N8!:w$r%5!<%PB&$G<B9T\e(B(IMAP4)\e$B!#F|K\8l8!:w$b2D!#\e(B
+ * \e$B2>A[%U%)%k%@!#\e(B
+ * \e$BB?$$F|$b0B?4$N!"%^%k%A%"!<%+%$%PBP1~05=L%U%)%k%@!#\e(B
+ * \e$B%U%)%k%@Cf$N8E$$5-;v$r<+F0E*$K%"!<%+%$%V\e(B/\e$B:o=|$7$F@0M}$9$k\e(B expire \e$B5!G=!#\e(B
+ * \e$B<+F0%j%U%!%$%k!#\e(B
+ * \e$BDj7?%a%C%;!<%8$NAw?.$KJXMx$J%F%s%W%l!<%H5!G=!#\e(B
+
+\e$BI,MW>r7o\e(B:
+
+ * Emacs19 \e$B!A\e(B
+ * tm (8.7 \e$B0J9_\e(B) or SEMI (1.13.4 \e$B0J9_\e(B)
+
+Install:
+
\e$B%$%s%9%H!<%k$NJ}K!$K$D$$$F$O!"\e(BINSTALL.ja \e$B$r8fMw$/$@$5$$!#\e(B 
+
+Web Page:
+
+ Wanderlust \e$B$N\e(B Official Web \e$B%Z!<%8$N\e(B URL \e$B$O0J2<$NDL$j$G$9!#\e(B
+
+ http://www.gohome.org/wl/
+
\e$B$3$3$+$i%Q%C%1!<%8$N%@%&%s%m!<%I$b2DG=$G$9!#\e(B
+
+\e$B%a!<%j%s%0%j%9%H\e(B:
+
+ Wanderlust Mailing List <wl@lists.airs.net> 
+
+ Wanderlust \e$B$K4X$9$k5DO@$O$3$N%a%$%j%s%0%j%9%H$G9T$o$l$^$9!#\e(B
\e$B:G?7%P!<%8%g%s$N%"%J%&%s%9$b$3$A$i$KN.$l$^$9!#\e(B
+
+ wl-ctl@lists.airs.net \e$B08$N%a!<%k$NK\J8$K!"\e(B
+
+ # guide
+
\e$B$H=q$$$?%a!<%k$rAw$k$HF~2q$N%,%$%I$,<+F0E*$K$b$i$($^$9!#\e(B
+
+References:
+
+[1] M. Crispin, "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1", RFC 2060,
+    1996.
+[2] B. Kantor and P. Lapsley, "Network News Transfer Protocol: A
+    Proposed Standard for the Stream-Based Transmission of News", RFC
+    977, 1986.
+[3] J. Myers, M. Rose, "Post Office Protocol - Version 3", RFC 1929, 1996.
+[4] "Mew -- Messaging in the Emacs World", 
+    (Copyright (C) 1994, 1995, 1996, 1997, 1998 Mew developing team.)
+    Available from http://www.mew.org/.
+[5] "tm -- MIME package for GNU Emacs",
+    (Copyright (C) 1994, 1995, 1996 MORIOKA Tomohiko)
diff --git a/WL-ELS b/WL-ELS
new file mode 100644 (file)
index 0000000..a440b26
--- /dev/null
+++ b/WL-ELS
@@ -0,0 +1,107 @@
+;;; WL-ELS  -*-Emacs-Lisp-*-
+;;; Time-stamp: <00/03/01 09:58:40 teranisi>
+
+;;;;;;;;;;;;;;;;;;;;;   DO NOT EDIT THIS FILE   ;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;     INTERNAL USE ONLY     ;;;;;;;;;;;;;;;;;;;;;
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; generic modules
+(defconst WL-MODULES '(
+   wl wl-folder wl-summary wl-message
+   wl-vars wl-draft wl-util wl-address
+   wl-highlight wl-demo wl-refile wl-thread
+   wl-fldmgr wl-expire wl-template wl-score
+   ))
+
+(defconst ELMO-MODULES '(
+   elmo-util elmo-imap4 elmo-nntp elmo-archive
+   elmo-localdir elmo-msgdb elmo-vars elmo2
+   elmo-cache elmo-multi elmo-filter elmo-pipe
+   elmo-dop elmo-pop3 elmo-localnews elmo-maildir
+   elmo-date elmo-internal utf7
+   ))
+
+\f
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Emacsen
+;; (< 20 emacs-major-version) && !(featurep 'mule)
+(cond
+ ((featurep 'xemacs)
+  (setq WL-MODULES (append WL-MODULES (list 'wl-dnd 'wl-xmas)))
+  (setq ELMO-MODULES (append (list 'elmo-database) ELMO-MODULES)))
+ ((fboundp 'nemacs-version)
+  (setq WL-MODULES (append WL-MODULES (list 'wl-nemacs))))
+ ((featurep 'mule)
+  (setq WL-MODULES (append WL-MODULES (list 'wl-mule)))))
+
+(defconst WL-AUTOLOAD-MODULES '(
+   auto-autoloads custom-load
+   ))
+
+(if (or (fboundp 'dynamic-link)
+        ;; static
+        (fboundp 'open-database))
+    (add-to-list 'ELMO-MODULES 'elmo-database))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; tm-8 / SEMI
+
+(if (module-installed-p 'mime-view)
+    (progn
+      (defconst wl-use-semi t)
+      (setq WL-MODULES (append WL-MODULES (list 'wl-mime)))
+      (setq ELMO-MODULES (append ELMO-MODULES (list 'mmelmo 'mmelmo-imap4))))
+  (defconst wl-use-semi nil)
+  (setq WL-MODULES (append WL-MODULES (list 'tm-wl)))
+  )
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; FLIM 1.12 / FLIM 1.13
+(cond
+ ((module-installed-p 'luna)
+  ;; FLIM 1.13 (SEMI/tm-8)
+  (defconst wl-use-luna t)
+  (setq ELMO-MODULES
+       (append ELMO-MODULES
+               (list 'mmelmo-2
+                     'mmelmo-imap4-2))))
+ (wl-use-semi
+  ;; FLIM 1.12
+  (defconst wl-use-luna nil)
+  (setq ELMO-MODULES
+       (append ELMO-MODULES
+               (list 'mmelmo-1
+                     'mmelmo-imap4-1))))
+ )
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Utils
+(defvar UTILS-MODULES '(rfc2368 wl-mailto))
+
+;; OpenSSL/SSLeay package is also needed.
+(if (module-installed-p 'base64)
+    (add-to-list 'UTILS-MODULES 'ssl))
+
+(defconst SASL-MODULES '(hmac-def hmac-md5 hmac-sha1
+                        hex-util md5-dl md5-el md5
+                        sha1-dl sha1-el sha1 sasl
+                        scram-md5 digest-md5 unique-id))
+
+(defvar modules-alist
+  (list
+   (cons ELMODIR ELMO-MODULES)
+   (cons WLDIR WL-MODULES)
+   (if (module-installed-p 'bbdb)
+       (cons UTILSDIR (list 'bbdb-wl)))
+   (if (exec-installed-p "imput")
+       (cons UTILSDIR (list 'im-wl)))
+   (if wl-install-utils
+       (cons UTILSDIR UTILS-MODULES))
+   ;; sasl does not work under Nemacs.
+   (if (and wl-install-sasl
+           (not (fboundp 'nemacs-version)))
+       (cons SASLDIR SASL-MODULES))
+    ))
diff --git a/WL-MK b/WL-MK
new file mode 100644 (file)
index 0000000..09cb8f7
--- /dev/null
+++ b/WL-MK
@@ -0,0 +1,329 @@
+;;; -*- Emacs-Lisp -*-
+;;; WL-MK for byte-compile, install, uninstall
+;;;
+;;; Original by OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;;; Modified by Yuuichi Teranishi <teranisi@gohome.org>
+;;;
+;;; Time-stamp: <2000-03-30 15:55:13 teranisi>
+
+;;;;;;;;;;;;;;;;;;;;;   DO NOT EDIT THIS FILE   ;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;     INTERNAL USE ONLY     ;;;;;;;;;;;;;;;;;;;;;
+
+;;; Code
+
+(defvar WLDIR "./wl")
+(defvar ELMODIR "./elmo")
+(defvar DOCDIR "./doc")
+(defvar ICONDIR "./etc/icons")
+(defvar UTILSDIR "./utils")
+(defvar SASLDIR "./utils/sasl/lisp")
+(defvar WL_PREFIX "wl")
+(defvar ELMO_PREFIX "wl")
+
+(defvar COMPRESS-SUFFIX-LIST '("" ".gz" ".Z" ".bz2"))
+
+(defvar wl-install-utils nil
+  "if Non-nil, install `wl-utils-modules'.")
+(defvar wl-install-sasl nil
+  "if Non-nil, install sasl utilities.")
+
+;;; INFO
+(defconst wl-ja-info "wl-ja.info")
+(defconst wl-ja-texi "wl-ja.texi")
+(defconst wl-en-info "wl.info")
+(defconst wl-en-texi "wl.texi")
+
+(defvar wl-info-lang "ja"
+  "The language of info file (\"ja\" or \"en\").")
+
+;; for Nemacs (dirty!)
+(or (fboundp 'file-executable-p)
+    (fset 'file-executable-p 'file-exists-p))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+\f
+(require 'cl)
+(defvar INFODIR nil)
+
+(condition-case () (require 'custom) (error nil))
+;; for wl-vars.el
+(unless (and (fboundp 'defgroup)
+             (fboundp 'defcustom)
+             ;; ignore broken module
+             (not (featurep 'tinycustom)))
+  (require 'backquote)
+  (defmacro defgroup (&rest args))
+  (defmacro defcustom (symbol value &optional doc &rest args)
+    (let ((doc (concat "*" (or doc ""))))
+      (` (defvar (, symbol) (, value) (, doc)))))
+  )
+
+(setq byte-compile-warnings '(free-vars unresolved callargs redefine))
+
+;; v18, v19
+(if (or (boundp 'MULE)
+       (fboundp 'nemacs-version))
+    (setq max-lisp-eval-depth 400))
+
+(condition-case () (require 'easymenu) (error nil))
+
+(defvar config-wl-package-done nil)
+
+(defun config-wl-package-subr ()
+  (unless config-wl-package-done
+  (setq config-wl-package-done t)
+  (setq load-path (cons (expand-file-name ".") load-path))
+  (setq load-path (cons (expand-file-name WLDIR)
+                       (cons (expand-file-name ELMODIR) load-path)))
+  (setq wl-icon-dir (expand-file-name ICONDIR))
+;;; load custom file if exists.
+  (load "./WL-CFG" t nil t)
+;;; load-path
+  (if wl-install-utils
+      (setq load-path (cons (expand-file-name UTILSDIR) load-path)))
+  (if wl-install-sasl
+      (setq load-path (cons (expand-file-name SASLDIR) load-path)))
+  (require 'install)
+  (load "./WL-ELS")
+  (condition-case ()
+      (require 'mime-setup)
+    (error (error "No MIME module was detected. Please install SEMI or tm.")))
+  (if wl-use-semi
+      (princ (concat "\nUse SEMI" 
+                    (if wl-use-luna " with LUNA\n" " without LUNA\n")))
+    (princ "\nUse tm.\n"))))
+
+(defun config-wl-package ()
+  (config-wl-package-subr)
+  ;; LISPDIR check.
+  (let ((elispdir (car command-line-args-left)))
+    (if (string= elispdir "NONE")
+       (defvar LISPDIR (install-detect-elisp-directory))
+      (defvar LISPDIR elispdir)))
+  (princ (format "LISPDIR is %s\n\n" LISPDIR))
+  (setq command-line-args-left (cdr command-line-args-left)))
+
+
+(defun wl-scan-source (path)
+  (let (ret)
+    (mapcar
+     '(lambda (x)
+       (mapcar '(lambda (y)
+                  (setq ret (append (list y (concat y "c")) ret)))
+               (directory-files x nil "\\(.+\\)\\.el$" t)))
+     path)
+    ret))
+
+
+(defun wl-uninstall (objs path)
+  ;(message (mapconcat 'identity objs " "))
+  (mapcar
+   '(lambda (x)
+      (let ((filename (expand-file-name x path)))
+       (if (and (file-exists-p filename)
+                (file-writable-p filename))
+           (progn
+             (princ (format "%s was uninstalled.\n" filename))
+             (delete-file filename)))))
+   objs))
+
+
+(defun compile-wl-package ()
+  ;; For nemacs byte compiler's strange behavior(?).
+  (config-wl-package)
+  (if (fboundp 'nemacs-version)
+      (load (expand-file-name "wl.el" WLDIR)))
+  (mapcar
+   '(lambda (x)
+      (compile-elisp-modules (cdr x) (car x)))
+   modules-alist))
+
+(defun install-wl-package ()
+  (compile-wl-package)
+  (let ((wl-install-dir (expand-file-name WL_PREFIX LISPDIR))
+       (elmo-install-dir (expand-file-name ELMO_PREFIX LISPDIR)))
+    (mapcar
+     '(lambda (x)
+       (install-elisp-modules (cdr x) (car x)
+                              (if (string= (car x) ELMODIR)
+                                  elmo-install-dir
+                                wl-install-dir)))
+     modules-alist)))
+
+
+(defun uninstall-wl-package ()
+  (config-wl-package)
+  (let ((wl-install-dir (expand-file-name WL_PREFIX
+                                         LISPDIR))
+       (elmo-install-dir (expand-file-name ELMO_PREFIX
+                                           LISPDIR)))
+    (wl-uninstall (wl-scan-source (list WLDIR UTILSDIR SASLDIR))
+                 wl-install-dir)
+    (wl-uninstall (wl-scan-source (list ELMODIR))
+                 elmo-install-dir)
+    ))
+
+
+(defun config-wl-package-xmas ()
+  (if (not (featurep 'xemacs))
+      (error "This directive is only for XEmacs."))
+  (config-wl-package-subr)
+  ;; PACKAGEDIR check.
+  (let (package-dir)
+    (and (setq package-dir (car command-line-args-left))
+        (if (string= "NONE" package-dir)
+            (defvar PACKAGEDIR
+              (if (boundp 'early-packages)
+                  (let ((dirs (append (if early-package-load-path
+                                          early-packages)
+                                      (if late-package-load-path
+                                          late-packages)
+                                      (if last-package-load-path
+                                          last-packages)))
+                        dir)
+                    (while (not (file-exists-p
+                                 (setq dir (car dirs))))
+                      (setq dirs (cdr dirs)))
+                    dir)))
+          (defvar PACKAGEDIR package-dir)))
+    (princ (format "PACKAGEDIR is %s\n\n" PACKAGEDIR))
+    (setq command-line-args-left (cdr command-line-args-left))))
+
+;; from SEMI-MK
+(defun compile-wl-package-xmas ()
+  (config-wl-package-xmas)
+  (setq autoload-package-name "wl")
+  (add-to-list 'command-line-args-left WLDIR)
+  (batch-update-directory)
+  (add-to-list 'command-line-args-left WLDIR)
+  (Custom-make-dependencies)
+  ;; WL-AUTOLOAD-MODULES
+  (compile-elisp-modules WL-AUTOLOAD-MODULES WLDIR)
+  (mapcar
+   '(lambda (x)
+      (compile-elisp-modules (cdr x) (car x)))
+   modules-alist))
+
+(defun install-wl-package-xmas ()
+  (compile-wl-package-xmas)
+  (let ((LISPDIR (expand-file-name "wl"
+                                   (expand-file-name "lisp"
+                                                     PACKAGEDIR)))
+       (DATADIR  (expand-file-name "wl"
+                                   (expand-file-name "etc"
+                                                     PACKAGEDIR)))
+       (INFODIR  (expand-file-name "info" PACKAGEDIR)))
+    (or (file-exists-p DATADIR)
+       (make-directory DATADIR t))
+    (or (file-exists-p INFODIR)
+       (make-directory INFODIR t))
+    ;; copy xpm files
+    (mapcar '(lambda (x) 
+              (let* ((src-file-nondirectory (file-name-nondirectory x))
+                     (dst-file (expand-file-name src-file-nondirectory
+                                                 DATADIR)))
+                (princ (format "%s->%s\n"
+                               x ; fullpath
+                               dst-file))
+                (copy-file x dst-file t)))
+           (directory-files "etc/icons" t "xpm"))
+    (mapcar '(lambda (x)
+             (install-elisp-modules (cdr x) (car x) LISPDIR))
+                  modules-alist)
+    ;; WL-AUTOLOAD-MODULES
+    (install-elisp-modules WL-AUTOLOAD-MODULES WLDIR LISPDIR)
+    ;; 
+    (wl-texinfo-format)
+    (wl-texinfo-install)))
+
+\f
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Texinfo stuff
+
+(defun wl-texinfo-format-file (lang)
+  (let ((infofile (symbol-value (intern (format "wl-%s-info" lang))))
+       (texifile (symbol-value (intern (format "wl-%s-texi" lang)))))
+    (require 'wl-vars) ;; for 'wl-cs-local
+    (or (file-newer-than-file-p (expand-file-name infofile DOCDIR)
+                               (expand-file-name texifile DOCDIR))
+       (let (obuf beg)
+         (find-file (expand-file-name texifile DOCDIR))
+         (setq obuf (current-buffer))
+         ;; texinfmt.el 2.37 or earlier can't format @direntry
+         (require 'texinfmt)
+         (unless (fboundp 'texinfo-format-direntry)
+           (goto-char (point-min))
+           (when (re-search-forward "^@direntry" nil t)
+             (replace-match "@ifinfo\nSTART-INFO-DIR-ENTRY"))
+           (when (re-search-forward "^@end direntry" nil t)
+             (replace-match "END-INFO-DIR-ENTRY\n@end ifinfo"))
+           (set-buffer-modified-p nil))
+         ;; We can't know file names if splitted.
+         (texinfo-format-buffer t)
+         ;; Emacs20.2's default is 'raw-text-unix.
+         (and (fboundp 'set-buffer-file-coding-system)
+              (set-buffer-file-coding-system wl-cs-local))
+         (save-buffer)
+         (kill-buffer (current-buffer)) ;; info
+         (kill-buffer obuf)) ;; texi
+       )))
+
+(defun wl-texinfo-format ()
+  (unless INFODIR
+    (setq INFODIR (wl-detect-info-directory)))
+  (cond ((listp wl-info-lang)
+        (mapcar 'wl-texinfo-format-file wl-info-lang))
+       ((stringp wl-info-lang)
+        (wl-texinfo-format-file wl-info-lang))))
+
+(defun wl-texinfo-install-file (lang)
+  (let ((infofile (symbol-value (intern (format "wl-%s-info" lang)))))
+    (install-file infofile DOCDIR INFODIR)))
+
+(defun wl-texinfo-install ()
+  (cond ((listp wl-info-lang)
+        (mapcar 'wl-texinfo-install-file wl-info-lang))
+       ((stringp wl-info-lang)
+        (wl-texinfo-install-file wl-info-lang))))
+
+(defun wl-primary-info-file ()
+  "Get primary info file (for wl-detect-info-directory)."
+  (cond
+   ((listp wl-info-lang)
+    (let ((wl-info-lang (car wl-info-lang)))
+      (wl-primary-info-file)))
+   ((stringp wl-info-lang)
+    (symbol-value (intern (format "wl-%s-info" wl-info-lang))))))
+
+(defun wl-detect-info-directory ()
+  (config-wl-package-subr)
+  (if (fboundp 'nemacs-version)
+      (error "Cannot format info on Nemacs. Please use another formatter."))
+  ;; INFODIR check.
+  (require 'info)
+  (let ((infodir (car command-line-args-left))
+       (info (wl-primary-info-file))
+       previous INFODIR)
+    (setq INFODIR
+         (if (string= infodir "NONE")
+             (if (setq previous
+                       (exec-installed-p info Info-directory-list
+                                         COMPRESS-SUFFIX-LIST))
+                 ;;(progn
+                 ;;(condition-case nil (delete-file previous))
+                 (directory-file-name (file-name-directory previous));)
+               (car Info-directory-list))
+           infodir))
+    (setq command-line-args-left (cdr command-line-args-left))
+    (princ (format "INFODIR is %s\n\n" INFODIR))
+    INFODIR))
+
+(defun install-wl-info ()
+  (wl-texinfo-format)
+  (wl-texinfo-install))
+
+\f
+;;; ToDo
+;;; * MORE refine code (^_^;
+
+;;; End
diff --git a/doc/TODO.ja b/doc/TODO.ja
new file mode 100644 (file)
index 0000000..e908b30
--- /dev/null
@@ -0,0 +1,16 @@
+\e$B%M%C%H%o!<%/4X78$N%3!<%I$r\e(B elmo-network \e$B$K=8Ls\e(B
+product \e$B$rDj5A$9$k\e(B
+elmo-search \e$B$G\e(B msgdb \e$B$H%U%)%k%@K\BN$r%7!<%`%l%9$K8!:w\e(B
+pick/virtual \e$B$N\e(B completion \e$BE}9g\e(B
+msgdb \e$B9=B$$N8+D>$7$H\e(B obarray \e$B2=\e(B
+POP3 \e$B$N\e(B UIDL \e$BBP1~\e(B
+\e$B=EMW%^!<%/$N4IM}\e(B
+\e$B%5%^%j%U%)!<%^%C%H<+M32=\e(B
+\e$B%W%j%U%'%C%AM=Ls%^!<%/\e(B
+\e$BJV;v:Q$_!"%U%)%o!<%I:Q$_%^!<%/\e(B
+virtual \e$B4V$G\e(B msgdb \e$B6&M-\e(B
+MIME Bcc
+wl-summary-other-frame-list
+rfc2192, rfc2193, rfc2221 (imap referral \e$B$N=hM}\e(B)
+imap.el \e$B$H$NE}9g\e(B(\e$B6l$7$$5$$,$7$F$-$?\e(B)
+\e$B$"$d$7$2$J%3!<%I$r$X$i$7$?$$\e(B
diff --git a/doc/wl-ja.texi b/doc/wl-ja.texi
new file mode 100644 (file)
index 0000000..5f097d7
--- /dev/null
@@ -0,0 +1,5969 @@
+\input texinfo @c -*-texinfo -*- coding: iso-2022-jp -*-
+@c %**start of header
+@setfilename wl-ja.info
+@settitle Wanderlust -- Yet Another Message Interface On Emacsen --
+@c @documentlanguage ja
+@c %**end of header
+@c Wanderlust \e$B$N\e(B texinfo
+@set Time-stamp: <2000-04-03 14:29:40 teranisi>
+@set version 1.1.0
+@synindex pg cp
+@finalout
+
+@direntry
+* Wanderlust-ja: (wl-ja).  Yet Another Message Interface On Emacsen
+@end direntry
+
+@c permissions text appears in an Info file before the first node.
+@ifinfo
+This file documents Wanderlust,
+Yet another message interface on Emacsen.
+
+\e$B$3$N%U%!%$%k$O\e(B Emacs \e$B$GF0$/%a!<%k\e(B/\e$B%K%e!<%94IM}%7%9%F%`\e(B
+Wanderlust \e$B$K4X$9$k@bL@=q$G$9!#\e(B
+
+Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}.
+@c Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}, @*
+@c @w{Fujikazu Okunishi}, @w{Masahiro Murata},
+@c @w{Kenichi Okada} and @w{Kaoru Takahashi}.
+
+This edition is for Wanderlust version @value{version}.
+
+\e$B$3$NHG$O\e(B Wanderlust version @value{version} \e$B$KBP1~$7$^$9!#\e(B
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+\e$BCx:n8"I=<($H$3$N5v2DJ8$,$9$Y$F$NJ#@=$KB8:_$9$k8B$j!"\e(B
+\e$B$3$N@bL@=q$N$^$C$?$/F10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+\e$B$3$NCJMn$,<h$j=|$+$l$F$$$k$N$r=|$-!"$3$l$HF1$8J#@=$K4X$9$k5v2DJ8$,I=<($5\e(B
+\e$B$l$F$$$k8B$j!"$3$N%U%!%$%k$r\e(B TeX \e$B$K$+$1$F!"$=$N7k2L$r0u:~$9$k$3$H$r5v2D\e(B
+\e$B$9$k\e(B(\e$B$3$NCJMn$O0u:~$5$l$?%^%K%e%"%k$G$O;2>H$5$l$^$;$s\e(B)\e$B!#\e(B
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$b$3$N5v2DJ8$NI=<($HF10l$N\e(B
+\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
+\e$B2D$9$k!#\e(B
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"\e(B
+\e$BG[I[$9$k$3$H$r5v2D$9$k!#\e(B
+@end ifinfo
+
+@titlepage
+@sp 10
+@title Wanderlust \e$B%f!<%6%^%K%e%"%k\e(B (ver. @value{version})
+@author Yuuichi Teranishi \e$B;{@>M50l\e(B
+@author Fujikazu Okunishi \e$B1|@>F#OB\e(B
+@author Masahiro Murata   \e$BB<EDA442\e(B
+@author Kenichi Okada     \e$B2,ED7r0l\e(B
+@author Kaoru Takahashi   \e$B9b66\e(B  \e$B0j\e(B
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}.
+@c Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}, @*
+@c @w{Fujikazu Okunishi}, @w{Masahiro Murata},
+@c @w{Kenichi Okada}, and @w{Kaoru Takahashi}.
+
+This manual is for Wanderlust version @value{version}.
+
+\e$B$3$N%^%K%e%"%k$O\e(B Wanderlust version @value{version} \e$B$KBP1~$7$^$9!#\e(B
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+\e$BCx:n8"I=<($H$3$N5v2DJ8$,$9$Y$F$NJ#@=$KB8:_$9$k8B$j!"\e(B
+\e$B$3$N@bL@=q$N$^$C$?$/F10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$r$3$N5v2DJ8$NI=<($HF10l$N\e(B
+\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
+\e$B2D$9$k!#\e(B
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"\e(B
+\e$BG[I[$9$k$3$H$r5v2D$9$k!#\e(B
+@end titlepage
+
+
+@c
+@c  Top
+@c 
+@ifinfo
+@node Top, Introduction, (dir), (dir)
+@top Wanderlust \e$B%f!<%6%^%K%e%"%k\e(B
+
+@flushright
+Yuuichi Teranishi \e$B;{@>M50l\e(B
+Fujikazu Okunishi \e$B1|@>F#OB\e(B
+Masahiro Murata   \e$BB<EDA442\e(B
+Kenichi Okada     \e$B2,ED7r0l\e(B
+Kaoru Takahashi   \e$B9b66\e(B  \e$B0j\e(B
+Last Modified@value{Time-stamp:}
+@end flushright
+
+\e$B$3$NJ8=q$O\e(B Wanderlust@value{version} \e$B$KBP1~$7$^$9!#\e(B
+
+@end ifinfo
+
+@menu
+* Introduction::             \e$B$O$8$a$K\e(B
+* Start Me Up::              Wanderlust \e$B$r5/F0$9$k\e(B
+* Folders::                  Wanderlust \e$B$G07$($k%U%)%k%@$?$A\e(B
+* Folder::                   \e$B%U%)%k%@%b!<%I\e(B
+* Summary::                  \e$B%5%^%j%b!<%I\e(B
+* Message::                  \e$B%a%C%;!<%8%P%C%U%!\e(B
+* Draft::                    \e$B%I%i%U%H%P%C%U%!\e(B
+* Disconnected Operations::  \e$B%*%U%i%$%s=hM}\e(B
+* Expire and Archive::       \e$B%a%C%;!<%8$N<+F0:o=|$H%"!<%+%$%V\e(B
+* Scoring::                  \e$B%a%C%;!<%8$N%9%3%"\e(B
+* Customization::            \e$B%+%9%?%^%$%:\e(B
+* Mailing List::             \e$B%a!<%j%s%0%j%9%H\e(B
+* Addition::                 \e$B$*$^$1\e(B
+* Index::                    \e$B:w0z\e(B
+@end menu
+
+
+@c
+@c  Introduction
+@c 
+@node Introduction, Start Me Up, Top, Top
+@chapter \e$B$O$8$a$K\e(B
+@cindex Introduction
+
+Wanderlust \e$B$O\e(B Emacs \e$B$GF0$/%a!<%k\e(B/\e$B%K%e!<%94IM}%7%9%F%`$G$9!#\e(B
+IMAP4rev1(RFC2060), NNTP, POP \e$B$*$h$S%m!<%+%k$N%a%C%;!<%8$KBP1~$7$F$$$^$9!#\e(B
+
+Wanderlust \e$B$N<g$JFCD'\e(B/\e$BFCD9$O0J2<$NDL$j$G$9!#\e(B
+
+@itemize @minus
+@item elisp \e$B$N$_$K$h$k<BAu!#\e(B
+@item IMAP4rev1, NNTP, POP(POP3/APOP), MH, Maildir \e$B7A<0$N%5%]!<%H!#\e(B
+@item Mew \e$B$C$]$$\e(B Folder Specification \e$B$K4p$E$/%a%C%;!<%8$X$NE}0lE*%"%/%;%9!#\e(B
+@item Mew \e$B$C$]$$%-!<%P%$%s%I$H%^!<%/=hM}!#\e(B
+@item \e$BL$FI4IM}!#\e(B
+@item \e$B%$%s%?%i%/%F%#%V$J%9%l%C%II=<(!#\e(B
+@item \e$B9XFI%U%)%k%@$N0lMw$rI=<($9$k%U%)%k%@%b!<%I!#\e(B
+@item \e$B%a%C%;!<%8%-%c%C%7%e!"\e(BDisconnected Operation (\e$B8=:_$OI=<($N$_\e(B)\e$B!#\e(B
+@item MH \e$BE*\e(B FCC\e$B!#\e(B(@samp{FCC: %Backup} \e$B$d\e(B @samp{FCC: $Backup} \e$B$b2D\e(B)\e$B!#\e(B
+@item MIME \e$BBP1~\e(B (by SEMI or tm)\e$B!#\e(B
+@item \e$B%K%e!<%9\e(B/\e$B%a!<%k$NAw?.$rE}9g$7$?%a%C%;!<%8Aw?.%I%i%U%H!#\e(B
+@item \e$B%U%)%k%@0lMw$N%"%$%3%sI=<(\e(B (XEmacs)\e$B!#\e(B
+@item \e$BBg$-$J%Q!<%H$r<h$j4s$;$:$KI=<(\e(B(IMAP4)\e$B!#\e(B
+@item \e$B%a%C%;!<%8$N8!:w$r%5!<%PB&$G<B9T\e(B(IMAP4)\e$B!#F|K\8l8!:w$b2D!#\e(B
+@item \e$B2>A[%U%)%k%@!#\e(B
+@item \e$BB?$$F|$b0B?4$N!"%^%k%A%"!<%+%$%PBP1~05=L%U%)%k%@!#\e(B
+@item \e$B%U%)%k%@Cf$N8E$$5-;v$r<+F0E*$K%"!<%+%$%V\e(B/\e$B:o=|$7$F@0M}$9$k\e(B expire \e$B5!G=!#\e(B
+@item \e$B<+F0%j%U%!%$%k!#\e(B
+@item \e$BDj7?%a%C%;!<%8$NAw?.$KJXMx$J%F%s%W%l!<%H5!G=!#\e(B
+@end itemize
+
+Wanderlust \e$B$O\e(B Emacs 19.28\e$B!A\e(B \e$B$r%Y!<%9$H$7$?\e(B Mule, Emacs 20.2\e$B!A\e(B, XEmacs 
+20.4\e$B!A!"\e(B \e$B$*$h$S\e(B MS Windows \e$B>e$GF0$/\e(B Meadow 1.00, Mule for Windows v1.22,
+NTEmacs(Windows NT) \e$B$GF0:n$9$k$3$H$,3NG'$5$l$F$$$^$9!#\e(BOS/2 \e$B>e$GF0:n$9$k\e(B 
+PMMule \e$B$bEvA3\e(B OK \e$B$G$9!#$5$i$K!"\e(BNemacs 3.3.2 \e$B>e$G$b!"\e(B(\e$B;H$($k5!G=$O8BDj$5\e(B
+\e$B$l$k$b$N$N\e(B) \e$BF0:n$9$k$3$H$,3NG'$5$l$F$$$^$9!#\e(B
+
+\e$B$^$?!"\e(BWanderlust \e$B$,@\B3$7$FF0:n$9$k$3$H$,3NG'$5$l$F$$$k\e(B IMAP \e$B%5!<%P$O\e(BUW
+imapd 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.7a, Cyrus imapd 1.4, Cyrus imapd 1.5.19,
+AIR MAIL(AIRCimapd release 2.00) \e$B$G$9!#\e(B
+
+
+@c
+@c  Start Me Up
+@c 
+@node Start Me Up, Folders, Introduction, Top
+@chapter Wanderlust \e$B$r5/F0$9$k\e(B
+@cindex Start up
+
+Wanderlust \e$B$r5/F0$9$k$^$G$KI,MW$J<j=g$r=gHV$K@bL@$7$^$9!#\e(B
+
+(\e$BEvA3$N$3$H$J$,$i!"$3$l$i$h$j$b@h$K!"%a!<%k\e(B/\e$B%K%e!<%9$rFI$`$3$H$,$G$-$k4D6-$,$"$i$+$8$aI,MW$G$9!#\e(B)
+
+@menu
+* MIME Modules::      MIME \e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k\e(B
+* Download::          \e$B%Q%C%1!<%8$NF~<j$HE83+\e(B
+* Install::           \e$B%P%$%H%3%s%Q%$%k$H%$%s%9%H!<%k\e(B
+* Minimal Settings::  @file{.emacs} \e$B$N@_Dj\e(B
+* Mail Addresses::    \e$B%"%I%l%9D"$NDj5A\e(B
+* Folder Definition:: \e$B9XFI$9$k%U%)%k%@$NDj5A\e(B
+* Start Wanderlust::  Wanderlust \e$B$N5/F0\e(B
+@end menu
+
+
+@node MIME Modules, Download, Start Me Up, Start Me Up
+@section MIME \e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k\e(B
+@cindex MIME modules
+@pindex APEL
+@pindex FLIM
+@pindex SEMI
+@pindex tm
+
+Wanderlust \e$B$r@5>o$KF0:n$5$;$k$K$O!"$^$:!"\e(BSEMI \e$B$b$7$/$O\e(B tm \e$B$,%$%s%9\e(B
+\e$B%H!<%k$5$l$F$$$kI,MW$,$"$j$^$9!#\e(B
+
+Emacs19.28 \e$B0JA0$r%Y!<%9$H$7$?\e(B mule \e$B$r$*;H$$$N>l9g$O\e(B SEMI \e$B$,F0$+$J$$$O$:\e(B
+@footnote{Emacs 19.34 \e$B%Y!<%9$N\e(B Mule \e$B$G$O\e(B SEMI \e$B$rF0:n$5$;$k$3$H$b2DG=$G$9!#\e(B@*
+@samp{http://www.jpl.org/elips/INSTALL-SEMI-ja.html} \e$B$,;29M$K$J$j$^$9!#\e(B}
+\e$B$J$N$G\e(B tm \e$B$r%$%s%9%H!<%k$7$^$9!#\e(B
+(tm \e$B$O%P!<%8%g%s\e(B 8.7 \e$B0J9_$r$4MxMQ$/$@$5$$!#\e(B)
+
+SEMI \e$B$,;H$($k\e(B Emacsen \e$B$G$O!"\e(Btm \e$B$h$j$b5!G=$N=<<B$7$?\e(B SEMI\e$B$r%$%s%9%H!<%k$9\e(B
+\e$B$k$3$H$r$*4+$a$7$^$9!#\e(B
+
+\e$B%$%s%9%H!<%k$NJ}K!$O3F%Q%C%1!<%8$KE:IU$5$l$F$$$k%I%-%e%a%s%H$r;2>H$7$F\e(B
+\e$B$/$@$5$$!#\e(B
+
+SEMI, tm \e$B$O0J2<$N>l=j$+$i%@%&%s%m!<%I$G$-$^$9!#\e(B
+
+@example
+SEMI: ftp://ftp.m17n.org/mule/semi/
+tm:   http://cvs.m17n.org/tomo/comp/emacsen/tm/tm-8/
+@end example
+
+SEMI \e$B$K$O\e(B APEL, FLIM \e$B$H8F$P$l$k%Q%C%1!<%8$bI,MW$G$9!#\e(B
+FLIM, APEL \e$B$O0J2<$N>l=j$+$i%@%&%s%m!<%I$G$-$^$9!#\e(B
+
+@example
+FLIM:     ftp://ftp.m17n.org/mule/flim/
+APEL:     ftp://ftp.m17n.org/mule/apel/
+@end example
+
+APEL, FLIM, SEMI \e$B$N=g$K%$%s%9%H!<%k$7$F$/$@$5$$!#\e(B
+\e$B4pK\E*$K$9$Y$F\e(B @samp{make install} \e$B$N<B9T$G:Q$`$O$:$G$9\e(B
+(XEmacs 21 \e$B$G$O\e(B @samp{make install-package})\e$B!#\e(B
+
+\e$B?d>)$5$l$k\e(B APEL, FLIM, SEMI \e$B$N%P!<%8%g%s$NAH9g$;$O!"0J2<$NDL$j$G$9!#\e(B
+
+@itemize @minus
+@item APEL 10.2, FLIM 1.12.7, SEMI 1.13.4
+@item APEL 10.2, FLIM 1.13.2, SEMI 1.13.7
+@end itemize
+
+APEL 10.2 \e$B$H\e(B FLIM 1.12.7 \e$B$NAH9g$;$G$O!"\e(BFLIM 1.12.7 \e$B$N%3%s%Q%$%k;~$K\e(B
+
+@example
+Please install latest APEL 7.3 or later.
+@end example
+   
+\e$B$H$$$&%(%i!<$,H/@8$9$k>l9g$,$"$j$^$9!#$3$N>l9g!"\e(BFLIM-CFG \e$B$N0J2<$N9T$r\e(B
+\e$B%3%a%s%H%"%&%H$7$F2<$5$$!#\e(B
+
+@example
+(or (fboundp 'write-region-as-binary)
+    (error "Please install latest APEL 7.3 or later."))
+(or (fboundp 'insert-file-contents-as-binary)
+    (error "Please install latest APEL 7.3 or later."))
+@end example
+
+\e$B$=$NB>!"\e(BFLIM, SEMI \e$B$K$O$$$m$$$m$JJQ7A%P!<%8%g%s$,B8:_$7$^$9$,!"\e(B
+\e$B$=$l$i$N$$$:$l$bMxMQ$9$k$3$H$,2DG=$G$9!#\e(B
+\e$B4pK\E*$K:G?7HG$NAH9g$;$J$iF0:n$9$k$O$:$G$9!#\e(B
+\e$BNc$($P!"0J2<$NAH9g$;$NF0:n$,3NG'$5$l$F$$$^$9!#\e(B
+
+@itemize @minus
+@item APEL 10.2, Chao 1.14.1, REMI 1.14.1
+@end itemize
+
+@c APEL, FLIM, SEMI \e$B$+\e(B tm \e$B$N%P!<%8%g%s%"%C%W$r9T$C$?>l9g$O!"\e(B
+@c Wanderlust \e$B$r%$%s%9%H!<%k$7$J$*$7$F$/$@$5$$!#\e(B
+
+
+@node Download, Install, MIME Modules, Start Me Up
+@section \e$B%Q%C%1!<%8$NF~<j$HE83+\e(B
+@cindex Download
+
+Wanderlust \e$BK\BN$O0J2<$N>l=j$+$i%@%&%s%m!<%I$G$-$^$9!#\e(B
+
+\e$B0l<!G[I[85\e(B:
+@example
+ftp://ftp.gohome.org/wl/
+@end example
+
+\e$B%_%i!<$7$F$$$?$@$$$F$$$k\e(B ftp, http \e$B%5%$%H\e(B:
+
+@example
+ftp://ftp.jaist.ac.jp/pub/GNU/elisp/ftp.gohome.org/wl/
+ftp://daidai.kuis.kyoto-u.ac.jp/pub/mirror/ftp.gohome.org/pub/elisp/wl/
+http://www.jpl.org/elips/
+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/
+@end example
+
+\e$BF~<j$7$?%Q%C%1!<%8$OE,Ev$J:n6H%G%#%l%/%H%j$KE83+$7$^$7$g$&!#\e(B
+
+@example
+% cd ~/work
+% tar zxvf wl-(@var{version}).tar.gz
+% cd wl-(@var{version})
+@end example
+
+@subsection SSL (Secure Socket Layer)\e$B$NMxMQ\e(B
+
+Wanderlust \e$B$G$O!"\e(BSMTP, IMAP, NNTP, POP \e$B$N%3%M%/%7%g%s$K$*$$$F!"\e(B
+SSL (Secure Socket Layer) \e$B$rMQ$$$k$3$H$,$G$-$^$9!#\e(B
+SSL \e$B$NMxMQ7ABV$K$O\e(B2\e$B<oN`$"$j!"%3%M%/%7%g%s$HF1;~$K\e(B
+SSL negotiation \e$B$r;O$a$k$b$N$H!"\e(B starttls command \e$B$N8e$K!"\e(B
+SSL negotiation \e$B$r;O$a$k$b$N$,$"$j$^$9!#\e(B
+\e$BDL>o$N\e(B SSL \e$B$rMxMQ$9$k$K$O\e(B \e$BK\%Q%C%1!<%8$N\e(B @file{utils} \e$B%G%#%l%/%H%j$K$"$k\e(B
+@file{ssl.el} \e$B$r%$%s%9%H!<%k$9$kI,MW$,$"$j$^$9!#\e(B
+\e$B$J$*$+$D!"\e(BOpenSSL \e$B$K4^$^$l$k\e(B openssl \e$B$K%Q%9$,DL$C$F$$$kI,MW$,$"$j$^$9!#\e(B
+STARTTLS \e$B$rMxMQ$9$k$K$O!"$5$i$K!"\e(Bstarttls \e$B%Q%C%1!<%8$r%$%s%9%H!<%k\e(B
+\e$B$9$kI,MW$,$"$j$^$9!#\e(B
+starttls \e$B%Q%C%1!<%8$O0J2<$N>l=j$+$iF~<j$G$-$^$9!#\e(B
+
+@example
+ftp://opaopa.org/pub/elisp/
+@end example
+
+@node Install, Minimal Settings, Download, Start Me Up
+@section \e$B%P%$%H%3%s%Q%$%k$H%$%s%9%H!<%k\e(B
+@cindex Bytecompile
+@cindex Compile
+@cindex Install
+@cindex Makefile
+@cindex Make
+
+@subsection \e$BDL>o$N%$%s%9%H!<%k\e(B
+
+@file{Makefile} \e$B$O\e(B @code{LISPDIR}, @code{EMACS} \e$B$N$"$?$j$rJT=8$7$^$9!#\e(B
+@code{LISPDIR} \e$B$K$O%Q%C%1!<%8$N%$%s%9%H!<%k@h!"\e(B
+@code{EMACS} \e$B$K$OMxMQ$9$k\e(B Emacs \e$B$N%3%^%s%IL>$r;XDj$7$^$9!#\e(B
+
+@example
+% make
+% make install
+@end example
+
+@file{Makefile} \e$BCf$N\e(B @code{LISPDIR} \e$B$rJQ99$;$:!"\e(B
+\e$B$=$N$^$^\e(B(@samp{NONE} \e$B$N$^$^$G$b\e(B)\e$B%$%s%9%H!<%k$7$?>l9g!"\e(B
+\e$B<+F0E*$K%$%s%9%H!<%k@h$rE,Ev$K8!=P$7$^$9!#\e(B
+\e$B<B:]$N%$%s%9%H!<%k@h$K$D$$$F$O8e=R$7$^$9!#\e(B
+
+Mule 2.3 \e$B$J$I!"\e(B@file{subdirs.el} \e$B$,L5$/!"\e(Bload-path \e$B$K%5%V%G%#%l%/%H%j$,\e(B
+\e$B<+F0E*$K2C$o$i$J$$\e(B Emacs \e$B$G$O!"\e(B
+
+@example
+Cannot open load file: mime-setup
+@end example
+
+@noindent
+\e$B$H$$$&%(%i!<$,=P$k$3$H$,$"$j$^$9!#$3$N>l9g$O!"\e(B
+custom, apel, flim, semi \e$B$N%$%s%9%H!<%k@h$r4D6-JQ?t\e(B @code{EMACSLOADPATH}
+\e$B$K2C$($k$+!"E83+%G%#%l%/%H%j$N\e(B @file{WL-CFG} \e$B$H$$$&%U%!%$%kCf$G\e(B
+load-path \e$B$rDL$7$F$*$/$H$h$$$G$7$g$&!#\e(B
+
+\e$B$^$?!"\e(BBBDB \e$B$rMxMQ$7$?$$>l9g!"\e(BBBDB \e$B$X$b\e(B load-path \e$B$rDL$7$F$*$/$HI,MW$J%b\e(B
+\e$B%8%e!<%k$,%P%$%H%3%s%Q%$%k\e(B/\e$B%$%s%9%H!<%k$5$l$^$9!#\e(B
+@xref{BBDB}.
+
+@subsection WL-CFG
+
+@file{WL-CFG} \e$B$H$$$&%U%!%$%k$,E83+%G%#%l%/%H%j$KB8:_$9$k$H!"\e(B
+\e$B%$%s%9%H!<%k;~$K\e(B load \e$B$5$l$k$h$&$K$J$C$F$$$^$9!#\e(B
+\e$B%$%s%9%H!<%k$G\e(B SEMI \e$BEy$N\e(B load-path \e$B$N@_Dj$,I,MW$G$"$l$P!"\e(B
+@file{WL-CFG} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$B%$%s%9%H!<%k@h$O\e(B @file{Makefile}\e$BCf$N\e(B @code{LISPDIR} \e$B$G;XDj$7$^$9$,!"\e(B
+\e$B<B:]$K\e(B @file{*.el}, @file{*.elc} \e$B$,F~$k%G%#%l%/%H%j\e(B
+(@code{LISPDIR} \e$B$+$i$NAjBP%Q%9\e(B)\e$B$O\e(B
+ @file{WL-CFG} \e$BCf$NJQ?t\e(B @code{WL_PREFIX}, @code{ELMO_PREFIX} \e$B$G;XDj$7$^$9!#\e(B
+
+@table @code
+@item WL_PREFIX
+WL \e$B%b%8%e!<%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#\e(B
+\e$B$3$l$O\e(B @code{LISPDIR} \e$B$+$i$NAjBP%Q%9$G$9!#\e(B
+WL \e$B%b%8%e!<%k$K$O%U%!%$%k\e(B @file{wl*.el} @file{wl*.elc} \e$B$,4^$^$l$^$9!#\e(B
+@c  \e$BI,MW$K1~$8$F\e(B @file{util/} \e$B0J2<$N%U%!%$%k$b%$%s%9%H!<%k$5$l$^$9!#\e(B
+
+@item ELMO_PREFIX
+ELMO \e$B%b%8%e!<%k$r%$%s%9%H!<%k$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#\e(B
+\e$B$3$l$O\e(B  @code{LISPDIR} \e$B$+$i$NAjBP%Q%9$G$9!#\e(B
+ELMO \e$B%b%8%e!<%k$K$O%U%!%$%k\e(B @file{elmo*.el} @file{elmo*.elc} \e$B$,4^$^$l$^$9!#\e(B
+@c  @file{utf7.el}, @file{utf7.elc} \e$B$b\e(B ELMO \e$B%b%8%e!<%k$K4^$^$l$^$9!#\e(B
+@end table
+  
+@noindent
+@code{WL_PREFIX}, @code{ELMO_PREFIX}
\e$B$N%G%U%)%k%H$O$$$:$l$b\e(B @file{wl} \e$B$G$9!#\e(B
+
+@file{elmo*} (ELMO \e$B%b%8%e!<%k\e(B) \e$B$O\e(B @file{elmo} \e$BG[2<$K%$%s%9%H!<%k$7$?$1$l$P!"\e(B
+
+@lisp
+(setq ELMO_PREFIX "elmo")
+@end lisp
+
+@noindent
+\e$B$H$7$^$9!#\e(B
+
+@subsection XEmacs package \e$B$H$7$F%$%s%9%H!<%k\e(B
+@cindex XEmacs package
+@cindex XEmacs package install
+@cindex Package, XEmacs
+@cindex Package install, XEmacs
+@c @cindex install-package
+
+Wanderlust \e$B$O\e(B XEmacs (21.0 \e$B!A\e(B) \e$B$N\e(B package \e$B$N$R$H$D$H$7$F%$%s%9%H!<%k$9$k\e(B
+\e$B$3$H$b2DG=$G$9!#\e(Bpackage \e$B$H$7$F%$%s%9%H!<%k$9$k$H!"\e(Bautoload \e$B$N@_Dj!"\e(B
+\e$B%"%$%3%s$N%Q%9@_Dj$r8D?M$N\e(B @file{.emacs} \e$B$K5-=R$7$J$/$F$b\e(B Wanderlust
+\e$B$r@5>o$K5/F0$G$-$k$h$&$K$J$j$^$9!#\e(B
+
+XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$9$k$K$O0J2<$N$h$&$K$7$^$9!#\e(B
+
+@example
+% vi Makefile
+% make package
+% make install-package
+@end example
+
+package \e$B$N%G%#%l%/%H%j$O\e(B SEMI \e$B$,%$%s%9%H!<%k$5$l$F$$$l$P<+F08!=P$5$l$^$9!#\e(B
+(@file{Makefile} \e$BCf$N\e(B PACKAGEDIR \e$B$G$b@_Dj2D\e(B)
+
+@subsection \e$B%$%s%9%H!<%k$7$J$$$GMxMQ\e(B
+
+Wanderlust \e$B$O%P%$%H%3%s%Q%$%k!"%$%s%9%H!<%k$7$J$/$F$b!"\e(B
+wl, elmo \e$B$N%G%#%l%/%H%j$K\e(B load-path \e$B$,@_Dj$5$l$F$$$l$P5/F0$9$k$3$H$,$G$-$^$9!#\e(B
+\e$BNc$($P\e(B @file{~/work} \e$B$K%Q%C%1!<%8$rE83+$7$?>l9g!"\e(B
+@file{.emacs} \e$B$K0J2<$N@_Dj$r$9$k$H5/F0$G$-$^$9!#\e(B
+
+@lisp
+(add-to-list 'load-path "~/work/wl-(@var{version})")
+(add-to-list 'load-path "~/work/wl-(@var{version})/elmo")
+@end lisp
+
+@subsection \e$B%^%K%e%"%k$K$D$$$F\e(B
+
+\e$B%^%K%e%"%k$O\e(B Info \e$B7A<0$G$9!#\e(B
+\e$B%$%s%9%H!<%k$9$k$K$O2<5-$r<B9T$7$F$/$@$5$$!#\e(B
+
+@example
+% make info
+% make install-info
+@end example
+
+XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$7$?>l9g$O<+F0E*$K\e(B Info \e$B%U%!%$%k$b\e(B
+\e$B%$%s%9%H!<%k$5$l$k$N$G$3$l$i$NA`:n$OI,MW$"$j$^$;$s!#\e(B
+
+\e$B$^$?!"2<5-$K$b%^%K%e%"%k$,$"$j$^$9!#\e(B
+
+@example
+http://www.gohome.org/wl/doc/wl-euc_toc.html
+@end example
+
+
+@node Minimal Settings, Mail Addresses, Install, Start Me Up
+@section .emacs \e$B$N@_Dj\e(B
+@cindex Minimal Settings
+@cindex Settings
+@cindex Configuration
+@cindex .emacs
+@cindex .wl
+
+Wanderlust \e$B$N%Q%C%1!<%8$K$OBg$-$/J,$1$FFs$D$N%b%8%e!<%k72$,4^$^$l$F$$$^$9!#\e(B
+
+@table @samp
+@item ELMO (elmo-*.el)
+\e$B$9$Y$F$r%U%)%k%@$K8+$;$k%b%8%e!<%k72$G$9!#\e(BWanderlust \e$B$N%P%C%/%(%s%I$G$9!#\e(B
+@item WL (wl-*.el)
+Wanderlust \e$BK\BN$NF0:n$r7h$a$k%b%8%e!<%k72$G$9!#\e(BELMO \e$B$N%U%m%s%H%(%s%I$G$9!#\e(B
+@end table
+
+\e$B%f!<%6$O\e(B @code{elmo-*}, @code{wl-*} \e$B$G;O$^$kJQ?t$N@_Dj$rJQ$($k$3$H$K$h$C$F\e(B
+Wanderlust \e$B$NF0:n$r%+%9%?%^%$%:$G$-$^$9!#\e(B
+
+\e$B:GDc8BI,MW$J@_Dj$O0J2<$NDL$j$G$9!#\e(B
+
+@lisp
+;; @r{SEMI/tm \e$B$r;H$&$?$a$N@_Dj\e(B}
+(load "mime-setup")
+
+;; @r{autoload \e$B$N@_Dj\e(B}
+;; @r{(XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$5$l$F$$$k>l9g!"I,MW$"$j$^$;$s\e(B)}
+(autoload 'wl "wl" "Wanderlust" t)
+(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)
+
+;; @r{\e$B%"%$%3%s$rCV$/%G%#%l%/%H%j\e(B (XEmacs \e$B$N$_\e(B)\e$B!#=i4|@_Dj$O\e(B nil\e$B!#\e(B}
+;; @r{(XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$5$l$F$$$k>l9g!"I,MW$"$j$^$;$s\e(B)}
+(setq wl-icon-dir "~/work/wl/etc")
+
+;; @r{\e$B%a!<%k$rAw?.$9$k\e(B SMTP \e$B%5!<%P!#\e(B \e$B=i4|@_Dj$O\e(B "localhost"\e$B!#\e(B}
+(setq wl-smtp-posting-server "your.smtp.server.com")
+;; @r{\e$B%K%e!<%9Ej9FMQ$N\e(B NNTP \e$B%5!<%P!#\e(B \e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B}
+(setq wl-nntp-posting-server "your.nntp.server.com")
+@end lisp
+
+Wanderlust \e$B5/F08e!"\e(B@file{~/.wl} \e$B$,B8:_$9$l$P%m!<%I$5$l$^$9$N$G!"\e(BWanderlust \e$B$K\e(B
+\e$B8GM-$N@_Dj$O\e(B @file{~/.wl} \e$B$K5-=R$7$F$*$1$P@0M}$7$d$9$$$G$7$g$&!#\e(B
+face \e$B$N@_Dj$O\e(B @file{.emacs} \e$B$K=q$/$3$H$O$G$-$J$$$N$G\e(B
+@file{~/.wl} \e$B$K=q$$$F$/$@$5$$!#\e(B
+@xref{Highlights}.
+
+(\e$B>e5-$N$&$A!"\e(B@samp{(load "mime-setup")} \e$B0J30$O\e(B @file{~/.wl} \e$B$K5-=R$G$-$^$9!#\e(B)
+
+@subsection mail-user-agent
+@cindex Default Mailer
+@cindex Mailer, Default
+@vindex mail-user-agent
+@findex compose-mail
+
+\e$B0J2<$N$h$&$J@_Dj$r\e(B @file{.emacs} \e$BEy$K$7$F$*$/$H!"\e(B@kbd{C-x m}
+(@code{compose-mail}) \e$BEy$K$h$C$F\e(B Wanderlust \e$B$N%I%i%U%H%b!<%I$,5/F0$5$l$k\e(B
+\e$B$h$&$K$J$j$^$9!#\e(BWanderlust \e$B$r\e(B Emacs \e$B>e$NI8=`%a!<%i$H$7$F;H$$$?$$>l9g$O\e(B
+\e$B@_Dj$7$F$*$/$H$h$$$G$7$g$&!#\e(B
+\e$B$?$@$7!"$3$l$O\e(B @code{mail-user-agent} \e$B$NDj5A$,2DG=$J\e(B Emacs \e$B$N>l9g$N$_M-8z$G$9!#\e(B
+@c @xref{Mail Methods, , ,emacs}.
+
+@lisp
+(autoload 'wl-user-agent-compose "wl-draft" nil t)
+(if (boundp 'mail-user-agent)
+    (setq mail-user-agent 'wl-user-agent))
+(if (fboundp 'define-mail-user-agent)
+    (define-mail-user-agent
+      'wl-user-agent
+      'wl-user-agent-compose
+      'wl-draft-send
+      'wl-draft-kill
+      'mail-send-hook))
+@end lisp
+
+
+@node Mail Addresses, Folder Definition, Minimal Settings, Start Me Up
+@section \e$B%"%I%l%9D"$NDj5A\e(B
+@cindex Address book Definition
+@cindex .addresses
+@cindex Alias, Address
+
+\e$B%"%I%l%9%U%!%$%k\e(B @file{~/.addresses} \e$B$r:n@.$7!"<+J,MQ$KJT=8$7$^$9!#\e(B
+
+@file{~/.addresses} \e$B$K=q$+$l$?%G!<%?$O!"%I%i%U%H:n@.;~$N%"%I%l%9Jd40%G!<%?$H$7$F\e(B
+\e$BMxMQ$5$l$k$[$+!"%5%^%jI=<($G$NL>A0I=<(Ey$K$bMQ$$$i$l$^$9!#\e(B
+\e$B%"%I%l%9Jd40$d%5%^%j$NI=<($K6E$kI,MW$,$J$$>l9g$O!"$3$N9`$OHt$P$7$F$b9=$$$^$;$s!#\e(B
+\e$B$^$?!"5/F0$7$?$"$H$G%5%^%j$N%P%C%U%!$+$i\e(B @file{~/.addresses} \e$B$K%"%I%l%9$r\e(B
+\e$BDI2C\e(B/\e$BJQ99\e(B/\e$B:o=|$9$k$3$H$b2DG=$G$9!#\e(B
+
+\e$B=q$-J}$O$H$F$bC1=c$G$9!#$3$s$J$+$s$8$G$9!#\e(B
+
+@example
+#
+# @r{@samp{#} \e$B$G;O$^$k9T$O%3%a%s%H!#\e(B}
+# @r{\e$B6u9T$OL5;k!#\e(B}
+#
+# @r{\e$B%a!<%k%"%I%l%9\e(B  ``\e$B$"$@L>\e(B'' ``\e$BK\L>\e(B''}
+#
+teranisi@@gohome.org            "\e$B$F$i$K$7\e(B"      "\e$B;{@>M50l\e(B"
+foo@@bar.gohome.org             "Foo \e$B$5$s\e(B"      "John Foo"
+bar@@foo.gohome.org             "Bar \e$B$5$s\e(B"      "Michael Bar"
+@end example
+
+@noindent
+\e$B0l9T$,0l?MJ,$NDj5A$G$9!#\e(B
+
+\e$B<B:]$K$O\e(B(\e$B%G%U%)%k%H@_Dj$G$O\e(B)\e$B%5%^%jI=<($G\e(B``\e$B$"$@L>\e(B''\e$B!"\e(B
+\e$B%I%i%U%H:n@.;~$N%"%I%l%9>pJs$H$7$F\e(B``\e$BK\L>\e(B''\e$B$,$D$+$o$l$^$9!#\e(B
+\e$B;n$7$F$_$F!"3NG'$7$F$+$i$NJ}$,$o$+$j$d$9$$$H;W$o$l$^$9!#\e(B
+\e$B$A$g$C$H=q$$$F;n$7$F$_$F$+$i!"$^$?%"%I%l%9D"$NDj5A$r$d$j$J$*$9$N$,$h$$$G$7$g$&!#\e(B
+
+\e$B$^$?!"JQ?t\e(B @code{wl-alias-file} \e$B$N%U%!%$%k$K\e(B MH \e$B$N\e(B alias file \e$B$,;XDj$5$l$F\e(B
+\e$B$$$l$P!"%I%i%U%H:n@.;~$N%"%I%l%9>pJs$H$7$F;H$o$l$^$9!#\e(B
+
+
+@node Folder Definition, Start Wanderlust, Mail Addresses, Start Me Up
+@section \e$B9XFI$9$k%U%)%k%@$NDj5A\e(B
+@cindex Folder Definition
+@cindex .folders
+
+\e$B9XFI$9$k%U%)%k%@$r%U%!%$%k\e(B @file{~/.folders} \e$B$KDj5A$7$^$9!#\e(B
+@file{~/.folders} \e$B$K=q$+$l$?FbMF$,$=$N$^$^$"$J$?$N9XFI$9$k%U%)%k%@$H$J$j$^$9!#\e(B
+
+\e$B5/F0$7$?$"$H$G%U%)%k%@0lMw$N%P%C%U%!$+$i9XFI%U%)%k%@$rDI2C\e(B/\e$BJT=8$9$k$3$H\e(B
+\e$B$b2DG=$G$9$N$G!"$3$N9`$OHt$P$7$F$b9=$$$^$;$s!#\e(B
+
+@file{~/.folders} \e$B$N=q$-J}$O$H$F$bC1=c$G$9!#$3$s$J$+$s$8$G$9!#\e(B
+
+@example
+#
+# @r{@samp{#} \e$B$G;O$^$k9T$O%3%a%s%H!#\e(B}
+# @r{\e$B6u9T$OL5;k!#\e(B}
+#
+# @r{\e$B%U%)%k%@\e(B}  "@r{\e$B$"$@L>\e(B}"
+# @r{(\e$B$"$@L>$OL5$/$F$b$h$$\e(B)}
+#
+%inbox  "\e$B<u?.H"\e(B"
++trash  "\e$B%4%_H"\e(B"
++draft  "\e$BAp9F\e(B"
+%#mh/Backup@@my.imap.server.com "\e$BAw?.:Q$_\e(B"
+# \e$B%0%k!<%W$NDj5A\e(B
+Emacsen@{
+    %#mh/spool/wl            "Wanderlust ML"
+    %#mh/spool/elips         "ELIPS ML"
+    %#mh/spool/tm-ja         "tm (\e$BF|K\8l\e(B) ML"
+    %#mh/spool/xemacs-beta   "XEmacs \e$B%Y!<%?\e(B"
+    -fj.news.reader.gnus@@other.nntp.server.com
+    *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs "fj \e$B$N\e(B Emacsen"
+@}
+#
+# @r{\e$B9TKv$K\e(B @samp{/} \e$B$,$D$/$H!"$=$N%U%)%k%@$K4^$^$l$k%5%V%U%)%k%@A4$F$,\e(B}
+# @r{\e$B$R$H$D$N%0%k!<%W$H$J$k!#\e(B}
+#
+%#mh/expire@@localhost /
+# @r{MH \e$B$N%U%)%k%@A4$F$r$R$H$D$N%0%k!<%W$K$9$kNc!#\e(B}
++ /
+@end example
+
+\e$B0l9T$K$R$H$D!"FI$_$?$$%U%)%k%@$r=q$-$^$9!#\e(B
+\e$B3F%U%)%k%@$NDj5A$K$D$$$F$O<!$N>O$G>\$7$/@bL@$7$^$9!#\e(B
+
+@samp{@var{\e$B%0%k!<%WL>\e(B}@{} \e$B$H\e(B @samp{@}} \e$B$G0O$^$l$?ItJ,$O0l$D$N%0%k!<%W$H$J$j$^$9!#\e(B
+\e$B$R$H$D$N%0%k!<%W$O%U%)%k%@%b!<%I$G$O3+JD$G$-$k%G%#%l%/%H%j$N$h$&$K8+$($^$9!#\e(B
+\e$B$$$/$D$+$N%U%)%k%@$r$^$H$a$F@0M}$9$k$N$KJXMx$G$9!#\e(B
+
+\e$BCm0U$9$Y$-$J$N$O!"\e(B@samp{@var{\e$B%0%k!<%WL>\e(B}@{} \e$B$H\e(B @samp{@}} \e$B$O#19T$r@jNN$7$F=q$/\e(B
+\e$BI,MW$,$"$k$3$H$G$9\e(B(\e$B$3$l$O%Q!<%5$,%@%5$$$+$i$G$9\e(B)\e$B!#\e(B
+
+\e$B%0%k!<%W$K$O!"#2$D$N<oN`$,$"$j$^$9!#0l$D$O!">e$NNc$N\e(B @samp{Emacsen} \e$B$N$h$&$K\e(B
+\e$BD>@\<+J,$G9%$-$J%U%)%k%@$r%0%k!<%W$H$7$FDj5A$9$k%?%$%W$G$9!#\e(B
+
+\e$B$b$&0l$D$O!">e$NNc$N\e(B @samp{+} \e$B$N$h$&$J\e(B @dfn{\e$B%"%/%;%9%0%k!<%W\e(B} \e$B$G$9!#\e(B
+\e$B$3$l$O!"$"$k%U%)%k%@$K4^$^$l$k%5%V%U%)%k%@A4$F$r0l$D$N%0%k!<%W$H$9$k$b$N$G$9!#\e(B
+(\e$B$3$l$O%U%)%k%@$N%?%$%W$K$h$C$F0c$$$^$9!#Nc$($P\e(B @samp{+} \e$B$J$i\e(B
+ MH \e$B$N%5%V%G%#%l%/%H%j$9$Y$F$,$R$H$D$N%0%k!<%W$H$J$j$^$9!#\e(B)
+
+\e$B<B:]$K;n$7$F$_$F!"3NG'$7$F$+$i$NJ}$,$o$+$j$d$9$$$H;W$o$l$^$9!#\e(B
+\e$B$A$g$C$H=q$$$F;n$7$F$_$F$+$i!"$^$?%U%)%k%@$NDj5A$r$d$j$J$*$9$N$,$h$$$G$7$g$&!#\e(B
+
+
+@node Start Wanderlust,  , Folder Definition, Start Me Up
+@section Wanderlust \e$B$N5/F0\e(B
+@cindex Start Wanderlust
+
+\e$B%$%s%9%H!<%k!"$*$h$S@_Dj$,$&$^$/$$$C$F$$$l$P!"\e(B
+
+@example
+M-x wl
+@end example
+
+@noindent
+\e$B$G5/F0$G$-$^$9!#\e(B
+\e$B=i4|2=$N$N$A!"%U%)%k%@0lMw$rI=<($9$k%U%)%k%@%b!<%I$,$"$i$o$l$^$9!#\e(B
+
+@kbd{C-u M-x wl} \e$B$N$h$&$K\e(B prefix argument \e$B$D$-$G<B9T$9$k$H!"\e(B
+\e$B%U%)%k%@$N%A%'%C%/$r>JN,$7$F5/F0$7$^$9!#\e(B
+
+
+@c
+@c  Folders
+@c
+@node Folders, Folder, Start Me Up, Top
+@chapter Wanderlust \e$B$G07$($k%U%)%k%@$?$A\e(B
+@cindex Folder Type
+
+\e$B0J2<$G$O\e(B Wanderlust \e$B$G07$($k%U%)%k%@$K$D$$$F@bL@$7$^$9!#\e(B
+
+Wanderlust \e$B$O\e(B ELMO \e$B$N%$%s%?%U%'!<%9$rMxMQ$7$F$$$k$?$a!"\e(BELMO \e$B%b%8%e!<%k$K\e(B
+\e$B$h$C$F%5%]!<%H$5$l$F$$$l$P!"$I$s$J%U%)%k%@$G$bMxMQ$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B%P!<%8%g%s\e(B @value{version} \e$B8=:_!"MQ0U$5$l$F$$$k%U%)%k%@$N<oN`$O!"\e(B
+IMAP, NNTP, LocalDir(MH), Maildir, News Spool, POP, Archive, 
+Multi, Filter, Pipe, Internal \e$B$N\e(B 10 \e$B<oN`$G$9!#\e(B
+
+@menu
+* IMAP Folder::              @samp{%} -- IMAP \e$B%U%)%k%@\e(B
+* NNTP Folder::              @samp{-} -- NNTP \e$B%U%)%k%@\e(B
+* MH Folder::                @samp{+} -- MH \e$B%U%)%k%@\e(B
+* Maildir Folder::           @samp{.} -- Maildir \e$B%U%)%k%@\e(B
+* News Spool Folder::        @samp{=} -- News Spool \e$B%U%)%k%@\e(B
+* Archive Folder::           @samp{$} -- \e$B%"!<%+%$%V%U%)%k%@\e(B
+* POP Folder::               @samp{&} -- POP \e$B%U%)%k%@\e(B
+* Multi Folder::             @samp{*} -- \e$B%^%k%A%U%)%k%@\e(B
+* Filter Folder::            @samp{/} -- \e$B%U%#%k%?%U%)%k%@\e(B
+* Pipe Folder::              @samp{|} -- \e$B%Q%$%W%U%)%k%@\e(B
+* Internal Folder::          @samp{'} -- \e$BFbIt%U%)%k%@\e(B
+@end menu
+
+
+@node IMAP Folder, NNTP Folder, Folders, Folders
+@section IMAP \e$B%U%)%k%@\e(B
+@cindex IMAP Folder
+@cindex @samp{%}
+@cindex RFC 2060
+@cindex IMAP4rev1
+
+RFC 2060 \e$B$G5,Dj$5$l$?\e(B IMAP4rev1 \e$B$rMxMQ$7$F%a!<%k$rFI$`$?$a$N%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '%' '\e$B%a!<%k%\%C%/%9L>\e(B'[':' '\e$B%f!<%6L>\e(B' ['/' '\e$BG'>ZK!\e(B']]['@@' '\e$B%[%9%HL>\e(B'][':' '\e$B%]!<%HHV9f\e(B']['!']
+
+\e$BG'>ZK!$K$O\e(B "auth" (\e$B%(%s%3!<%I$7$F%Q%9%o!<%I$rAw?.\e(B)\e$B$+\e(B
+           "cram-md5" (cram-md5\e$B$K$h$kG'>Z\e(B)\e$B$+\e(B
+           "login" (\e$B@8%Q%9%o!<%I$rAw?.\e(B) \e$B$N$$$:$l$+$r;XDj!#\e(B
+
+(cram-md5 \e$B$K$h$kG'>Z$r9T$J$&$K$O\e(B \e$BK\%Q%C%1!<%8$N\e(B utils/sasl/ \e$B$r%$%s%9%H!<%k$9$k\e(B
+\e$BI,MW$,$"$j$^$9!#\e(B)
+
+default \e$BCM\e(B:
+
+\e$B%f!<%6L>\e(B  -> \e$BJQ?t\e(B @code{elmo-default-imap4-user} \e$B$NCM!#\e(B
+             \e$B=i4|@_Dj$O\e(B \e$B4D6-JQ?t\e(B USER \e$B$+!"\e(BLOGNAME \e$B$+!"\e(B(user-login-name) \e$B$NJV$jCM!#\e(B
+\e$BG'>ZK!\e(B    -> \e$BJQ?t\e(B @code{elmo-default-imap4-authenticate-type} \e$B$NCM!#\e(B
+             \e$B=i4|@_Dj$O\e(B "auth"\e$B!#\e(B
+\e$B%[%9%HL>\e(B  -> \e$BJQ?t\e(B @code{elmo-default-imap4-server} \e$B$NCM!#\e(B
+             \e$B=i4|@_Dj$O\e(B "localhost"\e$B!#\e(B
+\e$B%]!<%HHV9f\e(B-> \e$BJQ?t\e(B @code{elmo-default-imap4-port} \e$B$NCM!#\e(B
+             \e$B=i4|@_Dj$O\e(B "143"\e$B!#\e(B
+
+\e$B%a%$%s$G;HMQ$9$k\e(B IMAP \e$B%5!<%P$rJQ?t\e(B @code{elmo-default-imap4-server} 
+\e$B$K;XDj$9$k$H!"$$$A$$$A%U%)%k%@L>$K%[%9%HL>$r=q$+$:$K$9$_$^$9!#Nc$($P%U%!\e(B
+\e$B%$%"%&%)!<%k$r1[$($J$1$l$P$J$i$J$$>l9g$G$b\e(B @samp{foo%imap@@geteway} \e$B$N$h\e(B
+\e$B$&$K;XDj$G$-$^$9!#\e(B
+
+\e$B%U%)%k%@L>$N:G8e$K\e(B '!' \e$B$,IU$$$F$$$k$H!"\e(BSSL (Secure Socket Layer)\e$B$r\e(B
+\e$BMxMQ$7$F%3%M%/%7%g%s$rD%$j$^$9!#\e(B'!!' \e$B$@$H!"\e(BSTARTTLS\e$B$K$h$j\e(B
+SSL\e$B%3%M%/%7%g%s$rD%$j$^$9!#\e(B
+\e$BJQ?t\e(B @code{elmo-default-imap4-ssl} \e$B$NCM$,\e(B non-nil \e$B$J$i!"\e(B'!' \e$B$rIU$1\e(B
+\e$B$J$/$F$b\e(B SSL \e$B$r;H$$$^$9!#\e(B'starttls \e$B$J$i\e(B '!!' \e$B$r0UL#$7$^$9!#\e(B
+
+(SSL \e$B$rMxMQ$9$k$K$O\e(B \e$BK\%Q%C%1!<%8$N\e(B utils/ssl.el \e$B$r%$%s%9%H!<%k$9$k\e(B
+\e$BI,MW$,$"$j$^$9!#$J$*$+$D!"\e(BOpenSSL\e$B$K4^$^$l$k\e(Bopenssl\e$B$K%Q%9$,DL$C$F$$$k\e(B
+\e$BI,MW$,$"$j$^$9!#\e(B
+STARTTLS \e$B$rMxMQ$9$k$K$O!"$5$i$K!"\e(Bstarttls\e$B%Q%C%1!<%8$r%$%s%9%H!<%k\e(B
+\e$B$9$kI,MW$,$"$j$^$9!#\e(B)
+
+\e$BG'>ZK!$H$7$F!"\e(B"auth" \e$B$b$7$/$O\e(B "cram-md5" \e$B$r;XDj$7$?>l9g!"%Q%9%o!<%I$r\e(B
+\e$B%(%s%3!<%I$7$FAw?.$7$^$9!#$?$@$7!"%5!<%PB&$,%Q%9%o!<%I$r%(%s%3!<%I$7$F\e(B
+\e$B<u$1<h$kG=NO$,L5$$>l9g$O!"3NG'$N$N$A!"\e(B"login" (\e$B@8%Q%9%o!<%I$rAw$k\e(B) 
+\e$B$K@ZBX$($^$9!#JQ?t\e(B @code{elmo-imap4-force-login} \e$B$,\e(B non-nil \e$B$J$i$P!"\e(B
+\e$B3NG'L5$7$K\e(B "login" \e$B$K@ZBX$($^$9\e(B(\e$B=i4|@_Dj$O\e(B nil)\e$B!#\e(B
+
+\e$BNc\e(B: %inbox     -> IMAP \e$B$N%a!<%k%\%C%/%9!"\e(B"inbox"
+    %#mh/inbox -> IMAP \e$B$N%a!<%k%\%C%/%9!"\e(B"#mh/inbox"
+
+    %inbox:hoge -> IMAP \e$B$N%a!<%k%\%C%/%9!"\e(B"inbox" \e$B$X%f!<%6\e(B "hoge" \e$B$G%"%/%;%9!#\e(B
+    %inbox:hoge/login@@server1
+                -> server1 \e$B>e$N\e(B IMAP \e$B$N%a!<%k%\%C%/%9\e(B "inbox" \e$B$X\e(B
+                   \e$B%f!<%6\e(B "hoge" \e$B$G!"@8%Q%9%o!<%I$rAw$C$F\e(B("login"\e$B$G\e(B)
+                   \e$B%"%/%;%9!#\e(B
+@end example
+
+@subsection \e$BF|K\8l%a!<%k%\%C%/%9L>$N07$$\e(B(Modified UTF7)
+
+\e$B;HMQ$7$F$$$k\e(B Emacs \e$B$,%f%K%3!<%I$KBP1~$7$F$*$j!$$+$D!"JQ?t\e(B 
+@code{elmo-imap4-use-modified-utf7} \e$B$K\e(B non-nil \e$B$NCM$r@_Dj$7$F$$$k>l9g\e(B(\e$B%G\e(B
+\e$B%U%)%k%H$O\e(B nil)\e$B!"F|K\8l\e(B(\e$B$d$=$NB>$N1Q8l0J30$N8@8l\e(B)\e$B$G%a!<%k%\%C%/%9L>$r\e(B
+\e$B;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B%f%K%3!<%I$r07$($k\e(B Emacs \e$B$K$O0J2<$,$"$j$^$9!#\e(B
+
+@itemize @bullet
+@item Emacs 20.3 \e$B0J9_\e(B + Mule-UCS
+
+Emacs 20 \e$B$G$O!"\e(BMule-UCS \e$B$,%$%s%9%H!<%k$5$l$F$$$l$P%f%K%3!<%I$r07$($^$9!#\e(B
+Mule-UCS \e$B$O0J2<$N\e(B URL \e$B$+$iF~<j2DG=$G$9!#\e(B
+
+@example
+ftp://ftp.m17n.org/pub/mule/Mule-UCS/
+@end example
+
+@item XEmacs 21.2.13 \e$B0J9_\e(B
+
+\e$B8=>u!"\e(BXEmacs 21.2 \e$B$G%f%K%3!<%I\e(B(UTF-8)\e$B$r07$&$K$O!"\e(Bucs-conv \e$B%Q%C%1!<%8$,I,\e(B
+\e$BMW$G$9!#\e(Bucs-conv \e$B$O0J2<$N\e(B anonymous cvs \e$B7PM3$GF~<j2DG=$G$9!#\e(B
+
+@example
+:pserver:anonymous@@cvs.m17n.org:/cvs/root
+Password: NULL (\e$B2~9T$rF~NO\e(B)
+@end example
+
+\e$B$^$?!$\e(BXEmacs \e$B$GF|K\8l%U%)%k%@L>$r07$&$K$O!"$5$i$K!"%3%^%s%I\e(B u7tou8,
+u8tou7 \e$B$,%$%s%9%H!<%k$5$l$F$$$kI,MW$,$"$j$^$9!#$3$l$i$N%3%^%s%I$O0J2<$+\e(B
+\e$B$iF~<j$G$-$k\e(B UTF7 \e$B%Q%C%1!<%8$K4^$^$l$F$$$^$9!#\e(B
+
+@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 \e$B%U%)%k%@\e(B
+@cindex NNTP Folder
+@cindex @samp{-}
+
+\e$B%M%C%H%K%e!<%9$rFI$`$?$a$N%U%)%k%@$G$9!#\e(B
+\e$B0l$D$N%K%e!<%9%0%k!<%W$,0l$D$N%U%)%k%@$H$7$F07$o$l$^$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '-' '\e$B%K%e!<%9%0%k!<%WL>\e(B'[[':' '\e$B%f!<%6L>\e(B']['@@' '\e$B%[%9%HL>\e(B'][':' '\e$B%]!<%HHV9f\e(B']]['!']
+
+default \e$BCM\e(B:
+\e$B%[%9%HL>\e(B  -> \e$BJQ?t\e(B @code{elmo-default-nntp-server} \e$B$NCM!#=i4|@_Dj$O\e(B "localhost"\e$B!#\e(B
+\e$B%f!<%6L>\e(B  -> \e$BJQ?t\e(B @code{elmo-default-nntp-user} \e$B$NCM!#=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%]!<%HHV9f\e(B-> \e$BJQ?t\e(B @code{elmo-default-nntp-port} \e$B$NCM!#\e(B
+             \e$B=i4|@_Dj$O\e(B 119\e$B!#\e(B
+
+\e$B%f!<%6L>$,\e(B non-nil \e$B$N>l9g$O\e(BAUTHINFO\e$B$K$h$kG'>Z$r9T$J$$$^$9!#\e(B
+\e$B%U%)%k%@L>$N:G8e$K\e(B '!' \e$B$,IU$$$F$$$k$H!"\e(BSSL \e$B$rMxMQ$7$F%3%M%/%7%g%s$rD%$j$^$9!#\e(B
+'!!' \e$B$@$H!"\e(BSTARTTLS\e$B$K$h$j\e(BSSL\e$B%3%M%/%7%g%s$rD%$j$^$9!#\e(B
+\e$BJQ?t\e(B @code{elmo-default-nntp-ssl} \e$B$NCM$,\e(B non-nil \e$B$J$i!"\e(B'!' \e$B$rIU$1\e(B
+\e$B$J$/$F$b\e(B SSL \e$B$r;H$$$^$9!#\e(B'starttls \e$B$J$i\e(B '!!' \e$B$r0UL#$7$^$9!#\e(B
+(SSL \e$B$rMxMQ$9$k$K$O\e(B \e$BK\%Q%C%1!<%8$N\e(B utils/ssl.el \e$B$r%$%s%9%H!<%k$9$k\e(B
+\e$BI,MW$,$"$j$^$9!#$J$*$+$D!"\e(BOpenSSL\e$B$K4^$^$l$k\e(Bopenssl\e$B$K%Q%9$,DL$C$F$$$k\e(B
+\e$BI,MW$,$"$j$^$9!#\e(B
+STARTTLS \e$B$rMxMQ$9$k$K$O!"$5$i$K!"\e(Bstarttls\e$B%Q%C%1!<%8$r%$%s%9%H!<%k\e(B
+\e$B$9$kI,MW$,$"$j$^$9!#\e(B)
+
+
+\e$BNc\e(B: -fj.rec.tv            -> \e$B%K%e!<%9%0%k!<%W!"\e(Bfj.rec.tv\e$B!#\e(B
+    -fj.rec.tv@@newsserver -> newsserver \e$B>e$N%K%e!<%9%0%k!<%W!"\e(Bfj.rec.tv\e$B!#\e(B
+@end example
+
+
+@node MH Folder, Maildir Folder, NNTP Folder, Folders
+@section MH \e$B%U%)%k%@\e(B
+@cindex MH Folder
+@cindex @samp{+}
+@pindex MH
+@cindex Maildir
+
+MH \e$B7A<0\e(B(1\e$B%U%!%$%k\e(B1\e$B%a!<%k\e(B)\e$B$GJ]B8$5$l$?%a!<%k$rFI$`$?$a$N%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '+' '\e$B%G%#%l%/%H%jL>\e(B'
+
+\e$B%G%#%l%/%H%jL>$O!"DL>o!"JQ?t\e(B @code{elmo-localdir-folder-path}
+(\e$B=i4|@_Dj$O\e(B @file{~/Mail}) \e$B$+$i$NAjBP%Q%9$G$9$,!"\e(B
+@samp{/} \e$B$d\e(B @samp{~} \e$B$G;O$^$C$F$$$l$P@dBP%Q%9$H8+Pv$7$^$9\e(B
+(\e$B%I%i%$%V%l%?!<$bF1MM$G$9\e(B)\e$B!#\e(B
+
+\e$B%a%C%;!<%8$,J]B8$5$l$k%U%!%$%k$N%U%!%$%kL>$K$O!"%a%C%;!<%8HV9f$,;HMQ$5$l$^$9!#\e(B
+
+\e$BNc\e(B: +inbox         -> "~/Mail/inbox"
+    +from/teranisi -> "~/Mail/from/teranisi"
+    +~/test        -> "~/test"
+@end example
+
+@node Maildir Folder, News Spool Folder, MH Folder, Folders
+@section Maildir \e$B%U%)%k%@\e(B
+@cindex Maildir Folder
+@cindex @samp{.}
+@pindex Maildir
+
+Maildir \e$B7A<0\e(B(1\e$B%U%!%$%k\e(B1\e$B%a!<%k\e(B)\e$B$GJ]B8$5$l$?%a!<%k$rFI$`$?$a$N%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '.' '\e$B%G%#%l%/%H%jL>\e(B'
+
+\e$B%G%#%l%/%H%jL>$O!"DL>o!"JQ?t\e(B @code{elmo-maildir-folder-path} (\e$B=i4|@_Dj$O\e(B 
+@file{~/Maildir}) \e$B$+$i$NAjBP%Q%9$G$9$,!"\e(B@samp{/} \e$B$d\e(B @samp{~} \e$B$G;O$^$C$F\e(B
+\e$B$$$l$P@dBP%Q%9$H8+Pv$7$^$9\e(B(\e$B%I%i%$%V%l%?!<$bF1MM$G$9\e(B)\e$B!#\e(B
+
+Maildir \e$B$O!"\e(Bcur\e$B!"\e(Bnew\e$B!"\e(Btmp \e$B$N%G%#%l%/%H%j$r4^$s$G$$$^$9!#<B:]$K%a%C%;!<%8\e(B
+\e$B$,4^$^$l$k$N$O!";XDj%G%#%l%/%H%jD>2<$N\e(B cur \e$B%G%#%l%/%H%j$G$9!#;XDj%G%#%l\e(B
+\e$B%/%H%jD>2<$N\e(B new \e$B%G%#%l%/%H%j$K4^$^$l$k%a%C%;!<%8%U%!%$%k$O!"%"%/%;%9;~\e(B
+\e$B$K\e(B cur \e$B%G%#%l%/%H%j$X0\F0$5$l$^$9!#$^$?!"\e(Btmp \e$B%G%#%l%/%H%j$K4^$^$l!"\e(B36 \e$B;~\e(B
+\e$B4V0J>e%"%/%;%9$,L5$$%a%C%;!<%8%U%!%$%k$O:o=|$5$l$^$9!#\e(B
+
+\e$B$3$NF0:n$O\e(B @samp{http://cr.yp.to/proto/maildir.html}
+(\e$BF|K\8lLu$O\e(B @samp{http://www.jp.qmail.org/q103/jman5/maildir.html}) 
+\e$B$K=>$C$F$$$^$9!#\e(B
+
+\e$BNc\e(B: .              -> "~/Maildir"
+    .inbox         -> "~/Maildir/inbox"
+    .from/teranisi -> "~/Maildir/from/teranisi"
+    .~/test        -> "~/test"
+@end example
+
+@node News Spool Folder, Archive Folder, Maildir Folder, Folders
+@section News Spool \e$B%U%)%k%@\e(B
+@cindex News spool Folder
+@cindex @samp{=}
+@pindex gnspool
+
+Mew/IM \e$B$,Ds>'$9$k!"%m!<%+%k$KJ]B8$5$l$?%K%e!<%95-;v$rFI$_=q$-$9$k$?$a$N\e(B
+\e$B%U%)%k%@$G$9!#\e(BNNTP \e$B7PM3$G$O$J$/!"\e(Bgnspool \e$B$J$I$r;H$C$F<h$j4s$;$F$$$k$h$&\e(B
+\e$B$J>l9g$K$=$N%9%W!<%k$rD>@\FI$`!"$H$$$&;H$$J}$bA[Dj$7$F$$$^$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '=' '\e$B%G%#%l%/%H%jL>\e(B'
+
+\e$B%G%#%l%/%H%jL>$O!"JQ?t\e(B @code{elmo-localnews-folder-path}
+ (\e$B=i4|@_Dj$O\e(B @file{~/News})
+\e$B$G;XDj$5$l$?%G%#%l%/%H%j$N%5%V%G%#%l%/%H%j$r;X$7$^$9!#\e(B
+\e$B%G%#%l%/%H%j$N6h@Z$j$O\e(B @samp{.} \e$B$G$b2D$G$9!#\e(B
+
+\e$BNc\e(B: =fj/os/os2         -> "~/News/fj/os/os2"
+    =fj.os.bsd.freebsd -> "~/News/fj/os/bsd/freebsd"
+@end example
+
+
+@node Archive Folder, POP Folder, News Spool Folder, Folders
+@section \e$B%"!<%+%$%V%U%)%k%@\e(B
+@cindex Archive Folder
+@cindex @samp{$}
+@c @pindex ange-ftp
+
+Info-ZIP \e$B$d\e(B LHA \e$B$J$I$G05=L$5$l$?%"!<%+%$%V%U%!%$%k$r0l$D$N%U%)%k%@$H$7\e(B
+\e$B$F07$$$^$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '$' '\e$B%G%#%l%/%H%jL>\e(B' [';' \e$B%"!<%+%$%P%?%$%W\e(B ';' \e$B%W%l%U%#%/%9\e(B]
+
+\e$B!X%G%#%l%/%H%jL>!Y$O!"DL>o!"JQ?t\e(B @code{elmo-archive-folder-path}
+(\e$B=i4|@_Dj$O\e(B @file{~/Mail}) \e$B$+$i$NAjBP%Q%9$G$9$,!"\e(B
+@samp{/} \e$B$d\e(B @samp{~} \e$B$G;O$^$C$F$$$l$P@dBP%Q%9$H8+Pv$7$^$9\e(B
+(\e$B%I%i%$%V%l%?!<$b\e(B OK)\e$B!#\e(B
+ange-ftp \e$BI=5-$b\e(B ange-ftp, efs \e$B$,;H$($k4D6-$G$O\e(B OK \e$B$G$9!#\e(B
+
+\e$B%U%)%k%@$N<BBN$H$7$F$N=q8K%U%!%$%k$O!">e=R$N%G%#%l%/%H%j$K$"$k\e(B
+@code{elmo-archive-basename}(\e$B=i4|CM$O\e(B "elmo-archive")\e$B$K$J$j$^$9!#\e(B
+\e$B$?$@$7!"%G%#%l%/%H%j$G$J$/%U%!%$%k$G$"$C$?>l9g!"$=$N%U%!%$%k$r%U%)%k%@\e(B
+\e$B$H8+Pv$7$^$9!#\e(B
+\e$B3HD%;R$O%"!<%+%$%PKh$K<+F0E*$K\e(B(\e$BF0E*$K\e(B)\e$BA*Br$5$l$^$9!#\e(B
+
+\e$B!X%"!<%+%$%P%?%$%W!Y$r>JN,$7$?>l9g!"JQ?t\e(B @code{elmo-archive-default-type}
+(\e$B=i4|@_Dj$O\e(B 'zip)\e$B$,;2>H$5$l$^$9!#\e(B
+
+\e$B!X%W%l%U%#%/%9!Y$O!"=q8K$,%G%#%l%/%H%j9=B$$r$b$C$F$$$k>l9g$K!"$=$N%G%#\e(B
+\e$B%l%/%H%jItJ,$r;XDj$7$^$9!#\e(B
+\e$B$3$l$O<g$K%"!<%+%$%V%5!<%S%9$d\e(B tar+gz+uue \e$B$K$h$k%@%$%8%'%9%HG[Aw$rDs6!$7\e(B
+\e$B$F$$$k\e(B ML \e$B$N=q8K%U%!%$%k$rE83+$9$k$3$H$J$/%^%&%s%H$9$k$?$a$N$b$N!"$D$^$j\e(B
+\e$B1\Mw;~$NJX59$N$?$a$N$b$N$G$9!#\e(B
+\e$BNc$($P\e(B ML \e$B%5!<%P$,\e(B fml \e$B$N>l9g!"\e(B@file{msend.tar.gz} \e$B$O\e(B @file{spool/1} \e$B$N\e(B
+\e$B$h$&$J9=B$$J$N$G!"\e(B"spool" \e$B$r;XDj$7$^$9!#\e(B
+
+\e$BNc\e(B: $teranisi         -> "~/Mail/teranisi/elmo-archive.zip"
+    $bsd/freebsd;lha  -> "~/Mail/bsd/freebsd/elmo-archive.lzh"
+    $/foo@@server:~/bar;zoo     -> server \e$B>e$N\e(B "~/bar/elmo-archive.zoo"
+    $d:/msend.tar.gz;tgz;spool -> "d:/msend.tar.gz"
+@end example
+
+@menu
+* Archiver::     \e$BBP1~\e(B(\e$B2DG=\e(B)\e$B%"!<%+%$%P\e(B
+* Archive Tips:: TIPS
+* Archive Vars:: \e$B%+%9%?%^%$%:JQ?t\e(B
+@end menu
+
+
+@node Archiver, Archive Tips, Archive Folder, Archive Folder
+@subsection \e$B%"!<%+%$%V%U%)%k%@$,BP1~$7$F$$$k\e(B(\e$BBP1~2DG=$J\e(B)\e$B%"!<%+%$%P\e(B
+@cindex Archiver
+@pindex LHA
+@pindex Info-ZIP
+@pindex UNZIP
+@pindex ZOO
+@pindex RAR
+@pindex TAR
+@pindex GNU TAR
+
+\e$B%G%U%)%k%H$G0J2<$N%"!<%+%$%P$KBP1~$7$^$9!#\e(B
+
+@example
+        LHA, Info-ZIP/UNZIP, ZOO, RAR  ;; \e$B%U%k%9%Z%C%/\e(B
+        GNU TAR('tgz, 'tar)            ;; \e$B%G%U%)%k%H$G$O1\Mw@lMQ\e(B
+@end example
+
+\e$BJ#?t%U%!%$%k$r#1%W%m%;%9$G0l$D$N=q8K$X$^$H$a$k$3$H$,$G$-$k%"!<%+%$%P$G\e(B
+\e$B$"$l$P!"I,MW$JJQ?t$rDI2CDj5A$9$k$@$1$G;H$($k2DG=@-$,$"$j$^$9\e(B(ARJ/UNARJ,
+ARC \e$B$O!"<j5v$G;H$C$F$J$$$N$GDj5A$7$F$$$^$;$s!#\e(BTAR \e$B$O85%U%!%$%k$r>C$9\e(B
+('mv) \e$B$3$H$,$G$-$J$$E@$G??LLL\$K%5%]!<%H$7$F$$$^$;$s\e(B)\e$B!#\e(B
+\e$BJ#?t%U%!%$%k$r0l$D$K$^$H$a$i$l$J$$E@$G\e(B gzip, bzip, bzip2 \e$B$O;H$($^$;$s!#\e(B
+\e$BI8=`=PNO$X2rE`$G$-$J$$%"!<%+%$%P$K$bI8=`$G$OBP1~$7$^$;$s!#\e(B
+
+@subsection \e$B3F\e(B OS \e$B$G$N%"!<%+%$%P$K4X$9$kFC5-;v9`\e(B
+
+\e$B%U%k%9%Z%C%/$GFI$_=q$-2DG=$J$3$H$,3NG'$5$l$F$$$k%"!<%+%$%P$O!"0J2<$N$H$*\e(B
+\e$B$j$G$9\e(B(@samp{*} \e$B0u$N$b$N$O=hM}B.EY$J$I$NE@$G:G$bE,$7$F$$$k$b$N\e(B)\e$B!#\e(B
+
+@example
+[OS/2]  Warp4.0J(w/o VoiceType)+Fx00505/emx0.9c(fix04)/PMMule,EmacsPM
+         LHA  OS/2 version Rel.2.06b    Feb 18, 1998
+        *UnZip 5.32 of 3 November 1997, by Info-ZIP.
+        *Zip 2.2 (November 3rd 1997).
+         Zoo archiver, zoo 2.1 $@asis{}Date: 91/07/09 02:10:34 $
+         GNU tar version 1.10 - AK 2.58 (DBCS/SJIS) 981216(homy)\e$BHG\e(B
+         gzip 1.2.4 (18 Aug 93) + bzip2 \e$B%Q%C%A\e(B(by \e$BHSED$5$s\e(B)
+
+[UN|X]  FreeBSD 2.2.7-RELEASE, Linux 2.0.30, Solaris2.6, HP-UX 9.07
+         LHa for UNIX  V 1.14c
+         UnZip 5.32 of 3 November 1997
+         Zip 2.2 (November 3rd 1997)
+         GNU tar 1.12 (1.11.x \e$B$OIT2D\e(B)
+         gzip 1.2.4 (18 Aug 93)
+
+[Win32] Win.98/Meadow
+         Lha32 version 1.28
+         Zip 2.2
+         UnZip 5.40
+         GNU tar 1.11.8 + 1.5(WIN32)
+         GZIP 1.2.4
+         RAR 2.06
+
+\e$B"(\e(B LHA \e$B$K4X$9$kCm0U\e(B
+
+OS/2 \e$B$N>l9g!"\e(BPeter Fitzsimmons \e$B;a:n$N\e(B LH/2 \e$B$K$OBP1~$7$^$;$s!#J?>>HG$r$*\e(B
+\e$B;H$$$/$@$5$$!#\e(B
+Win32 \e$B$G$O\e(B DOS \e$BHG$G$J$/!"\e(BLHa32 \e$B$G$J$$$HF0$+$J$$$H$N$3$H$G$9!#\e(B
+
+\e$B"(\e(B GNU tar \e$B$K4X$9$kCm0U\e(B
+
+GNU tar \e$B$O=q8K$+$i$N:o=|$KLdBj$,$"$k$b$N$,B?$$$N$G!"FC$KCm0U$7$F$/$@$5$$!#\e(B
+\e$B=q8K$,GK2u$5$l$k4m81@-$,9b$$$N$G!"%U%k%9%Z%C%/$GFI$_=q$-$9$kA0$K\e(B
+--delete -f \e$B$r=<J,%F%9%H$7$F$*$$$F$/$@$5$$!#$J$*!">e5-$N$b$N$G$O\e(B
+\e$B:#$N$H$3$mLdBj$OJs9p$5$l$F$$$^$;$s!#\e(B
+@end example
+
+
+@node Archive Tips, Archive Vars, Archiver, Archive Folder
+@subsection TIPS
+@cindex Archive Tips
+
+\e$B2wE,$K0\9T$9$k$K$O!"\e(Bwl-summary-archive() \e$B$r<B9T$9$k\e(B (@pxref{Archive}) \e$B$+!"\e(B
+Expire \e$B5!G=\e(B (@pxref{Expire}) \e$B$HAH$_9g$o$;$k$H$$$$$G$7$g$&!#\e(B
+\e$B$?$@$7!"\e(BExpire \e$B5!G=$G:n@.$7$?%"!<%+%$%V%U%)%k%@$r07$&>l9g$O!"\e(B
+\e$BJQ?t\e(B @code{elmo-archive-treat-file} \e$B$r\e(B non-nil \e$B$K@_Dj$9$kI,MW$,$"$j$^$9!#\e(B
+\e$B$J$*!"\e(BOS/2 \e$B>e$G$N%F%9%H$G$O!"\e(BMule2.3(19.28) \e$B$H\e(B Emacs20.2 \e$B$G$O=hM}B.EY$K\e(B
+\e$B05E]E*$J0c$$$,$"$j$^$9!#\e(B
+\e$B2wE,$K;H$&$K$O\e(B Emacs20 \e$B$r$*4+$a$7$^$9\e(B(re-search \e$B$NB.EY$NLdBj$@$H$9$k$H\e(B 
+19.3x \e$B0J>e$+$I$&$+$,6-$K$J$k$G$7$g$&\e(B)\e$B!#\e(B
+
+\e$B$^$?!"0l$D$N=q8K%U%!%$%k$KB?$/$N%U%!%$%k$,4^$^$l$F$$$k$H%"!<%+%$%P5/F0;~\e(B
+\e$B$N%*!<%P!<%X%C%I$,2CB.EYE*$KA}2C$9$k\e(B(\e$BFC$K\e(B LHA \e$B$N>l9g\e(B)\e$B$?$a!"\e(B150 \e$BDLDxEY!"\e(B
+\e$B:GBg$G$b\e(B 200\e$BDL$^$G$K$7$F$*$/$H!"%9%H%l%9$J$/FI$_=q$-$G$-$k$G$7$g$&!#\e(B
+
+\e$B$J$*!"EvA3$N$3$H$J$,$i\e(B
+
+@lisp
+(setq wl-fcc "$backup")
+(setq wl-trash-folder "$trash;lha")
+@end lisp
+
+@noindent
+\e$B$b2DG=$G$9\e(B@t{:-)}\e$B!#\e(B
+
+
+@node Archive Vars,  , Archive Tips, Archive Folder
+@subsection \e$B%"!<%+%$%V%U%)%k%@$K4X$9$kJQ?t\e(B
+@cindex Archive variables
+
+@table @code
+@item elmo-archive-default-type
+@vindex elmo-archive-default-type
+\e$B%G%U%)%k%H$N%"!<%+%$%P%?%$%W$r\e(B symbol \e$B$G;XDj$7$^$9!#=i4|CM$O\e(B 'zip \e$B$G$9!#\e(B
+
+@item elmo-archive-@var{type}-method-alist
+@vindex elmo-archive-TYPE-method-alist
+\e$B%"!<%+%$%P$N\e(B @var{type}
+(\e$B<B:]$K$O\e(B @samp{lha}, @samp{zip}, @samp{zoo}, @samp{tgz} \e$B$J$I$NJ8;zNs$,F~$k\e(B)
+\e$BKh$N!"3F<o%a%=%C%I$r5-=R$7$^$9!#\e(Balist \e$B$N3FMWAG$O0J2<$N$h$&$K$J$j$^$9!#\e(B
+
+@example
+        (action . (exec-name options))   ;; \e$B30It%W%m%0%i%`$H%*%W%7%g%s\e(B
+        (action . function)              ;; \e$B4X?t\e(B
+@end example
+
+\e$B8=:_$N$H$3$m!"M-8z$J\e(B action \e$B$O\e(B
+
+@example
+        'ls, 'cat ('cat-headers)        ;; \e$B:GDc8BI,MW\e(B(\e$B1\Mw$N$_\e(B)
+        'mv ('mv-pipe), 'rm ('rm-pipe)  ;; \e$B>e$H%;%C%H$G%U%k%9%Z%C%/\e(B
+        'cp ('cp-pipe)                  ;;
+@end example
+
+@noindent
+\e$B$G$9!#3g8LFb$N$b$N$O!"$J$/$F$b9=$$$^$;$s\e(B(\e$B$"$l$PM%@hE*$K;H$$$^$9\e(B)\e$B!#\e(B
+
+@item elmo-archive-suffix-alist
+@vindex elmo-archive-suffix-alist
+\e$B%"!<%+%$%P%?%$%W\e(B(symbol) \e$BKh$KBP1~$9$k=q8K$N3HD%;R$r5-=R$7$^$9!#\e(B
+
+@item elmo-archive-file-regexp-alist
+@vindex elmo-archive-file-regexp-alist
+\e$B=q8K$N%j%9%H1\Mw;~$N=PNO$+$i%U%!%$%kL>$r<hF@$9$k$?$a$N@55,I=8=$r!"%"!<\e(B
+\e$B%+%$%P%?%$%W\e(B (symbol) \e$BKh$K5-=R$7$^$9!#\e(B
+
+@item elmo-archive-method-list
+@vindex elmo-archive-method-list
+\e$BM-8z$K$7$?$$\e(B @var{type} \e$B$N\e(B elmo-archive-@var{type}-method-alist
+(@var{type} \e$B$O%"!<%+%$%P$N\e(B symbol)\e$B$r%j%9%H$G5-=R$7$^$9!#\e(B
+
+@item elmo-archive-lha-dos-compatible
+@vindex elmo-archive-lha-dos-compatible
+\e$B$3$NJQ?t$,\e(B non-nil \e$B$G$"$l$P\e(B DOS \e$BHG\e(B(\e$B5H:j;a%*%j%8%J%k\e(B)\e$B$N\e(B LHA \e$B$H%*%W%7%g\e(B
+\e$B%s8_49$H8+Pv$7$^$9!#=i4|CM$G$O\e(B OS/2 \e$B$H\e(B Win32 \e$B$N$_\e(B t \e$B$G$9!#\e(B
+
+@item elmo-archive-cmdstr-max-length
+@vindex elmo-archive-cmdstr-max-length
+elmo-archive \e$B$+$i$O\e(B(\e$BI8=`>uBV$G$O\e(B)\e$B%"!<%+%$%P$r%7%'%k$r7PM3$;$:$K5/F0$7\e(B
+\e$B$^$9!#\e(Belisp \e$B%l%Y%k$G$N%3%^%s%IJ8;zNs$NAm%P%$%H?t$K$O@)8B$O$J$$$H$N$3$H$J\e(B
+\e$B$N$G!"B?$/$N%Q%i%a!<%?$r0lEY$KM?$($FF0$+$;$k$+$I$&$+$O\e(B OS \e$B%l%Y%k$NLdBj$K\e(B
+\e$B$J$j$^$9!#$3$l$O!"Nc$($P?tI4DLC10L$N%a%C%;!<%8$r0lEY$K>C5n$G$-$k$+$I$&$+\e(B
+\e$B$NLdBj!"$HFI$_BX$($F$/$@$5$$!#\e(B
+OS/2 \e$B$G$O%7%'%k$r2p$5$:$KH/9T$G$-$k%3%^%s%IJ8;zNs$O\e(B 8190 \e$B%P%$%H$^$G$J$N\e(B
+\e$B$G!"M>M5$r8+$F%G%U%)%k%H$r\e(B 8000 \e$B$K$7$F$$$^$9!#\e(BOS/2 REXX \e$B$d%7%'%k%9%/%j%W\e(B
+\e$B%H$J$I$r3z$^$9>l9g!"%7%'%k$N<BAu$K0MB8$9$k$3$H$KCm0U$7$F$/$@$5$$!#\e(B
+
+\e$B$J$*!"%"!<%+%$%P$,=hM}BP>]$H$J$k%U%!%$%k$N%j%9%H$rI8=`F~NO$+$i<u$1IU$1$k\e(B
+(\e$BA0=R$N\e(B rm-pipe, mv-pipe, cat-headers action \e$B$,;XDj$5$l$F$$$k\e(B)\e$B>l9g!"#1\e(B
+\e$B%W%m%;%9$G=hM}$9$k$3$H$,$G$-$^$9!#\e(B
+@end table
+
+
+@node POP Folder, Multi Folder, Archive Folder, Folders
+@section POP \e$B%U%)%k%@\e(B
+@cindex POP Folder
+@cindex @samp{&}
+@cindex RFC 1939
+@cindex POP3
+@cindex APOP
+
+RFC 1939 \e$B$G5,Dj$5$l$?\e(B POP3 \e$B$rMxMQ$7$F%a!<%k$rFI$`$?$a$N%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '&' ['\e$B%f!<%6L>\e(B'][['/' '\e$BG'>ZK!\e(B']['@@' '\e$B%[%9%HL>\e(B'][':' '\e$B%]!<%HHV9f\e(B']]['!']
+
+\e$BG'>ZK!$K$O!"0J2<$N\e(B 2 \e$B<oN`$,$"$j$^$9!#\e(B
+            "user"     (\e$B@8%Q%9%o!<%I$rAw?.$7$FG'>Z\e(B)
+            "apop"     (APOP \e$B$GG'>Z\e(B)
+
+default \e$BCM\e(B:
+\e$B%f!<%6L>\e(B   -> \e$BJQ?t\e(B @code{elmo-default-pop3-user} \e$B$NCM!#\e(B
+              \e$B=i4|@_Dj$O\e(B \e$B4D6-JQ?t\e(B USER \e$B$+!"\e(BLOGNAME \e$B$+!"\e(B(user-login-name) \e$B$NJV$jCM!#\e(B
+\e$BG'>ZK!\e(B     -> \e$BJQ?t\e(B @code{elmo-default-pop3-authenticate-type} \e$B$NCM!#\e(B
+              \e$B=i4|@_Dj$O\e(B "user"\e$B!#\e(B
+\e$B%[%9%HL>\e(B   -> \e$BJQ?t\e(B @code{elmo-default-pop3-server} \e$B$NCM!#\e(B
+              \e$B=i4|@_Dj$O\e(B "localhost"\e$B!#\e(B
+\e$B%]!<%HHV9f\e(B -> \e$BJQ?t\e(B @code{elmo-pop3-default-port} \e$B$NCM!#\e(B
+              \e$B=i4|@_Dj$O\e(B 110\e$B!#\e(B
+
+\e$BNc\e(B: &hoge@@localhost -> localhost \e$B$X%f!<%6\e(B "hoge" \e$B$G%"%/%;%9!#\e(B
+    &hoge@@popserver:109 -> \e$B%[%9%H\e(B "popserver" \e$B$N%]!<%H\e(B 109 \e$BHV$X\e(B
+                            \e$B%f!<%6\e(B "hoge" \e$B$G%"%/%;%9!#\e(B
+@end example
+
+APOP \e$B$rMxMQ$9$k$K$O!"\e(B@file{md5.el} \e$B$,I,MW$G$9!#\e(B
+(XEmacs\e$B$G$O!"I,MW$"$j$^$;$s!#\e(B)
+@file{md5.el} \e$B$O\e(B \e$BK\%Q%C%1!<%8$N\e(B @file{utils/sasl/lisp/} \e$B$+\e(B
+ Emacs/W3 \e$B%Q%C%1!<%8\e(B
+
+@example
+http://www.cs.indiana.edu/elisp/w3/docs.html
+@end example
+
+\e$B$^$?$O!"\e(BLCD archive \e$B$+$iF~<j2DG=$G$9\e(B(GPL2)\e$B!#\e(B
+
+\e$B%U%)%k%@L>$N:G8e$K\e(B '!' \e$B$,IU$$$F$$$k$H!"\e(BSSL \e$B$rMxMQ$7$F%3%M%/%7%g%s$rD%$j$^$9!#\e(B
+\e$BJQ?t\e(B @code{elmo-default-pop-ssl} \e$B$NCM$,\e(B non-nil \e$B$J$i!"\e(B'!' \e$B$rIU$1\e(B
+\e$B$J$/$F$b\e(B SSL \e$B$r;H$$$^$9!#\e(B'starttls \e$B$J$i\e(B '!!' \e$B$r0UL#$7$^$9!#\e(B
+(SSL \e$B$rMxMQ$9$k$K$O\e(B \e$BK\%Q%C%1!<%8$N\e(B utils/ssl.el \e$B$r%$%s%9%H!<%k$9$k\e(B
+\e$BI,MW$,$"$j$^$9!#$J$*$+$D!"\e(BOpenSSL\e$B$K4^$^$l$k\e(Bopenssl\e$B$K%Q%9$,DL$C$F$$$k\e(B
+\e$BI,MW$,$"$j$^$9!#\e(B
+STARTTLS \e$B$rMxMQ$9$k$K$O!"$5$i$K!"\e(Bstarttls\e$B%Q%C%1!<%8$r%$%s%9%H!<%k\e(B
+\e$B$9$kI,MW$,$"$j$^$9!#\e(B)
+
+@node Multi Folder, Filter Folder, POP Folder, Folders
+@section \e$B%^%k%A%U%)%k%@\e(B
+@cindex Multi Folder
+@cindex @samp{*}
+@cindex Folder, Multiple
+@cindex Folder, Marge
+
+\e$BJ#?t$N%U%)%k%@$r2>A[E*$K0l$D$K8+$($k$h$&$K$9$k%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '*' '\e$B%U%)%k%@\e(B' [',' '\e$B%U%)%k%@\e(B'] ... [',' '\e$B%U%)%k%@\e(B']
+
+'*' \e$B$N8e$K\e(B \e$B%U%)%k%@\e(B,\e$B%U%)%k%@\e(B,@dots{},\e$B%U%)%k%@\e(B \e$B$N$h$&$K\e(B ',' (\e$B%3%s%^\e(B)\e$B$G6h@Z$C$F\e(B
+\e$B0l$D$K8+$($k$h$&$K$7$?$$%U%)%k%@72$r;XDj$7$^$9!#\e(B
+
+\e$BNc\e(B:
+  *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs
+  -> -fj.editor.xemacs, -fj.editor.mule, -fj.editor.emacs \e$B$,0l$D$N\e(B
+     \e$B%U%)%k%@$H$7$F8+$($k!#\e(B
+
+  *+inbox,-fj.rec.tv,%inbox
+  -> +inbox, -fj.rec.tv, %inbox \e$B$,0l$D$N%U%)%k%@$H$7$F8+$($k!#\e(B
+
+@end example
+
+
+@node Filter Folder, Pipe Folder, Multi Folder, Folders
+@section \e$B%U%#%k%?%U%)%k%@\e(B
+@cindex Filter Folder
+@cindex @samp{/}
+@cindex Folder, Filtering
+@cindex Folder, Virtual
+
+\e$B;XDj$7$?>r7o$rK~$?$9%a%C%;!<%8$N$_$r4^$`2>A[E*$J%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '/' '\e$B>r7o\e(B' '/' '\e$B%U%)%k%@\e(B'
+
+\e$B!X>r7o!Y$K$O!"0J2<$r=q$1$^$9!#\e(B
+
+1. \e$BItJ,%U%#%k%?!'\e(B "first:\e$B?t;z\e(B", "last:\e$B?t;z\e(B"
+
+first: \e$BA4%a%C%;!<%8$N@hF,$+$i\e(B'\e$B?t;z\e(B'\e$B$N?t$@$1%a%C%;!<%8$r@Z$j=P$7$^$9!#\e(B
+last: \e$BA4%a%C%;!<%8$NKvHx$+$i\e(B'\e$B?t;z\e(B'\e$B$N?t$@$1%a%C%;!<%8$r@Z$j=P$7$^$9!#\e(B
+
+\e$BNc\e(B:
+  /last:10/-fj.os.linux -> -fj.os.linux \e$B$N:G6a$N\e(B 10 \e$B8D$N%a%C%;!<%8\e(B
+                           \e$B$N$_$rI=<($9$k%U%)%k%@\e(B
+  /first:20/%inbox      -> %inbox \e$B$N:G=i$N\e(B 20 \e$B8D$rI=<($9$k%U%)%k%@\e(B
+
+2. \e$BF|IU$1%U%#%k%?!'\e(B "since:\e$BF|IU\e(B" "before:\e$BF|IU\e(B"
+
+since: '\e$BF|IU\e(B'\e$B$h$j:G6a$N%a%C%;!<%8$N$_$r<h$j=P$7$^$9!#\e(B
+before: '\e$BF|IU\e(B'\e$B$h$j:G6a$N%a%C%;!<%8$N$_$r<h$j=P$7$^$9!#\e(B
+
+'\e$BF|IU\e(B' \e$B$K$O0J2<$,=q$1$^$9!#\e(B
+
+yesterday ->  \e$B:rF|\e(B
+lastweek  ->  \e$B@h=5$N:#F|\e(B
+lastmonth ->  \e$B@h7n$N:#F|\e(B
+lastyear  ->  \e$B5nG/$N:#F|\e(B
+'\e$B?t;z\e(B'daysago -> '\e$B?t;z\e(B' \e$BF|A0\e(B (e.x. 3daysago)
+'\e$BF|\e(B'-'\e$B7n$NN,L>\e(B'-'\e$BG/\e(B' ->  \e$BF|IU$1$=$N$b$N$N;XDj\e(B (ex. 1-Nov-1998)
+
+\e$BNc\e(B:
+  /since:3daysago/+inbox \e$B"*\e(B \e$B:G6a#3F|4V$N\e(B +inbox \e$BCf$N%a%C%;!<%8!#\e(B
+  /before:yesterday/+inbox \e$B"*\e(B \e$B$-$N$&$h$j0JA0$N\e(B +inbox \e$BCf$N%a%C%;!<%8!#\e(B
+
+3. \e$B%U%#!<%k%I%U%#%k%?!'\e(B "\e$B%U%#!<%k%IL>\e(B=\e$BJ8;zNs\e(B"
+
+\e$B%a%C%;!<%8$N%U%#!<%k%I$NCf?H$,%^%C%A$9$k%a%C%;!<%8$r<h$j=P$7$^$9!#\e(B
+\e$B!X%U%#!<%k%IL>!Y!"!XJ8;zNs!Y$KBgJ8;z>.J8;z$N6hJL$O$"$j$^$;$s!#\e(B
+
+\e$BNc\e(B:
+  /from=teranisi/+inbox -> +inbox \e$B$G!"\e(BFrom: \e$B%U%#!<%k%I$K\e(B "teranisi"
+                           \e$B$H$$$&J8;zNs$r4^$`%a%C%;!<%8$N%U%)%k%@\e(B
+  /body=\e$B$J$s$H$+\e(B/%inbox -> %inbox \e$B$G!"K\J8$K\e(B "\e$B$J$s$H$+\e(B"
+                           \e$B$H$$$&J8;zNs$r4^$`%a%C%;!<%8$N%U%)%k%@\e(B
+
+"|" \e$B$G6h@Z$C$F\e(B OR \e$B>r7o$r;XDj$G$-$^$9!#\e(B
+\e$B$^$?!"\e(B/tocc=xxxx/ \e$B$O!"\e(B/to=xxxx|cc=xxxx/ \e$B$HF1$8$K$J$j$^$9!#\e(B
+
+\e$BNc\e(B:
+
+  /from=teranisi|to=teranisi/+inbox
+                        -> +inbox \e$B$G\e(BTo: \e$B%U%#!<%k%I$+\e(B From: \e$B%U%#!<%k%I$K\e(B
+                          "teranisi" \e$B$r4^$`%a%C%;!<%8$N%U%)%k%@\e(B
+  /tocc=teranisi/+inbox -> +inbox \e$B$G!"\e(BTo: \e$B%U%#!<%k%I$+\e(B Cc: \e$B%U%#!<%k%I$K\e(B
+                          "teranisi" \e$B$r4^$`%a%C%;!<%8$N%U%)%k%@\e(B
+
+\e$B1~MQJT\e(B
+
+  %inbox,/from=teranisi/%inbox@@server
+         -> %inbox\e$B!"$*$h$S!"\e(B
+            %inbox@@server \e$B$NCf$G\e(B From \e$B%U%#!<%k%I$,\e(B "teranisi" \e$B$N%a%C%;!<%872!"\e(B
+            \e$B$r$$$C$Z$s$KI=<($9$k%U%)%k%@!#\e(B
+
+  /last:100//to=teranisi/*+inbox,%inbox
+         -> +inbox \e$B$H\e(B %inbox \e$BCf$N%a%C%;!<%8$N$&$A!"\e(B
+            To: \e$B%U%#!<%k%I$,\e(B "teranisi" \e$B$K%^%C%A$9$k\e(B
+            \e$B%a%C%;!<%8$N:G6a$N\e(B100\e$B8D$rI=<($9$k%U%)%k%@!#\e(B
+
+  /from=hogehoge//last:20//tocc=teranisi/%#mh/inbox@@localhost
+  (\e$B"*$G@^$jJV$7!#<B:]$O0l9T\e(B)
+
+         -> %#mh/inbox@@localhost \e$B$NCf$G!"\e(BTo \e$B$+\e(B Cc \e$B$K\e(B "teranisi" \e$B$,4^$^$l$k\e(B
+            \e$B%a%C%;!<%8$N:G6a$N\e(B 20 \e$B8D$N$&$A!"\e(BFrom \e$B$,\e(B "hogehoge" \e$B$N$b$N$r\e(B
+            \e$BI=<($9$k%U%)%k%@!#\e(B
+
+;;; --- \e$B<BAu>e$N@)Ls\e(B ---
+;;; \e$B8=:_$N$H$3$m!"\e(Bnntp \e$B%U%)%k%@$OF|IU%U%#%k%?!"%U%#!<%k%I%U%#%k%?\e(B
+;;; \e$B$r=q$1$^$;$s!#\e(B
+;;; \e$B$^$?!"\e(Bimap4 \e$B%U%)%k%@\e(B \e$B$G$O\e(B rfc2060 \e$B$N\e(B search \e$B%3%^%s%I$K$=$N$^$^\e(B
+;;; \e$BM?$($i$l$k$b$N$7$+>r7o$N%U%#!<%k%IL>$K=q$1$^$;$s!#\e(B
+;;; (-> to,cc,from,subject,body \e$B$N$_\e(B)
+;;; localdir \e$B$N%U%)%k%@$K$OG$0U$N%U%#!<%k%IL>$r=q$1$^$9!#\e(B
+@end example
+
+
+@node Pipe Folder, Internal Folder, Filter Folder, Folders
+@section \e$B%Q%$%W%U%)%k%@\e(B
+@cindex Pipe Folder
+@cindex @samp{|}
+@cindex Get Message
+@cindex Download Message
+@cindex Incorporate Message
+
+\e$B%U%)%k%@1\Mw;~$K!"<+F0E*$K%a%C%;!<%8$N<h$j9~$_$r<B9T$9$k%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: '|'\e$B<h$j9~$_85\e(B'|'\e$B<h$j9~$_@h\e(B
+
+\e$B%U%)%k%@1\Mw;~!"!X<h$j9~$_85!Y$+$i!X<h$j9~$_@h!Y$X<+F0E*$K%a%C%;!<%8$,\e(B
+\e$B0\F0$7$^$9!#\e(BPOP \e$B$rMxMQ$7$F%a%C%;!<%8$r%m!<%+%k$K%@%&%s%m!<%I$7$F1\Mw$7$?$$\e(B
+\e$B>l9g$O!"\e(B
+
+|&username@@popserver|+inbox
+
+\e$B$N$h$&$K;XDj$9$k$H!"%U%)%k%@$NI=<($r99?7$9$k$H$-$K\e(B
+&username@@popserver \e$B$+$i!"\e(B+inbox \e$B$X%a%C%;!<%8$,<+F0E*$K<h$j9~$^$l$^$9!#\e(B
+
+\e$BNc\e(B: %inbox|%myinbox   -> %inbox \e$B$+$i\e(B %myinbox \e$B$X%a%C%;!<%8$r<h$j9~$s$G\e(B
+                         \e$B1\Mw$9$k%U%)%k%@!#\e(B
+    *&user@@popserver1,&user@@popserver2|+inbox
+    -> &user@@popserver1 \e$B$H\e(B &user@@popserver2 \e$B$+$i\e(B +inbox \e$B$X%a%C%;!<%8$r\e(B
+    \e$B<h$j9~$s$G1\Mw$9$k%U%)%k%@!#\e(B
+@end example
+
+\e$B%a%C%;!<%8$,0\F0$7$?$"$H!"%U%C%/\e(B @code{elmo-pipe-drained-hook} \e$B$,8F$P$l\e(B
+\e$B$^$9$N$G!"%@%&%s%m!<%I8e$K<B9T$7$?$$4X?t$rEPO?$7$F$*$/$H$h$$$G$7$g$&!#\e(B
+
+@node Internal Folder,  , Pipe Folder, Folders
+@section \e$BFbIt%U%)%k%@\e(B
+@cindex Internal Folder
+@cindex @samp{'}
+@cindex Folder, @samp{$} mark
+@cindex Cache
+
+Wanderlust \e$B$NFbIt$GJ];}$5$l$?%a%C%;!<%8$r1\Mw$9$k$?$a$N%U%)%k%@$G$9!#\e(B
+
+@example
+\e$B=q<0\e(B: 'mark 
+      \e$B$b$7$/$O\e(B
+      'cache/00\e$B!A\e(B1F
+
+'mark \e$B$H$$$&%U%)%k%@$O!"8e=R$N!X=EMW%^!<%/\e(B @samp{$}\e$B!Y$,$D$$$?%a%C%;!<%8$r\e(B
+\e$B$"$D$+$&FCJL$J2>A[%U%)%k%@$G$9!#\e(B
+\e$B=EMW%^!<%/$r%a%C%;!<%8$K$D$1$F$*$$$F!"$"$H$+$i8+D>$7$?$$$H$-$J$I$KJXMx$G$9!#\e(B
+
+\e$B$3$N%U%)%k%@$G%a%C%;!<%8$r:o=|$9$k$H!"$=$N%a%C%;!<%8$K$D$$$F$$$?\e(B @samp{$}
+\e$B%^!<%/$,:o=|$5$l$^$9!#\e(B
+\e$B$^$?!"$3$N%U%)%k%@$K%a%C%;!<%8$rDI2C$9$k$H!"$=$N%a%C%;!<%8$K$O\e(B @samp{$} \e$B%^!<%/\e(B
+\e$B$,IU$1$i$l$^$9!#\e(B
+
+'cache/00 \e$B!A\e(B 1F \e$B$O%M%C%H%o!<%/7PM3$GFI$s$@%a%C%;!<%8$N%-%c%C%7%e$K%"%/%;\e(B
+\e$B%9$9$k$?$a$N%U%)%k%@$G$9!#\e(B00 \e$B!A\e(B 1F \e$B$K$O!"%-%c%C%7%e%G%#%l%/%H%j\e(B 
+(@file{~/.elmo/cache})\e$B$N%5%V%G%#%l%/%H%jL>$r;XDj$7$^$9!#\e(B
+@end example
+
+@c
+@c  Folder
+@c
+@node Folder, Summary, Folders, Top
+@chapter \e$B%U%)%k%@%b!<%I\e(B
+@cindex Folder
+
+\e$B5/F0$7$F:G=i$K8=$l$k$N$,%U%)%k%@%b!<%I\e(B(\e$B%U%)%k%@$N0lMwI=<(\e(B)\e$B$G$9!#\e(B
+
+\e$B%U%)%k%@%b!<%I$G$O!"FI$_$?$$%U%)%k%@$NA*Br!"9XFI%U%)%k%@$NJT=8$r9T$J$$$^$9!#\e(B
+
+@menu
+* Selecting Folder:: \e$BFI$_$?$$%U%)%k%@$NA*Br\e(B
+* Folder Manager::   \e$B9XFI%U%)%k%@$NJT=8\e(B
+@end menu
+
+
+@node Selecting Folder, Folder Manager, Folder, Folder
+@section \e$BFI$_$?$$%U%)%k%@$NA*Br\e(B
+@cindex Selecting Folder
+
+@subsection \e$B;HMQJ}K!\e(B(TIPS)
+
+@subsubsection \e$B?75,?t!"L$FI?t$N%A%'%C%/\e(B
+
+\e$B%U%)%k%@%b!<%I$N8+$?$a$O$3$s$J46$8$K$J$k$O$:$G$9!#\e(B
+(XEmacs \e$B$G$O$b$&$A$g$C$H$+$C$3$h$/8+$($k$O$:$G$9\e(B @t{;-)})
+
+@example
+[-]Desktop:14186/35580/67263
+   \e$B<u?.H"\e(B:3/10/10
+   \e$B%4%_H"\e(B:2/7/10
+   \e$BAp9F\e(B:0/0/3
+   \e$BAw?.:Q$_\e(B:0/9/348
+   [-]Emacsen:0/34/4837
+     Wanderlust ML:0/0/558
+     ELIPS ML:0/0/626
+     tm (\e$BF|K\8l\e(B) ML:0/0/821
+     XEmacs \e$B%Y!<%?\e(B:0/29/255
+     Mew:0/0/998
+     Mule-Win32:0/0/1491
+     fj \e$B$N\e(B Emacsen:0/5/88
+@end example
+
+\e$B3F9T$KI=<($5$l$k$N$O!"\e(B
+
+@example
+\e$B!X%U%)%k%@L>\e(B:\e$BL$F14|\e(B(\e$B?75,\e(B)\e$B?t\e(B/\e$BL$FI?t\e(B/\e$BAm?t!Y\e(B
+@end example
+
+@noindent
+\e$B$G$9!#\e(B
+\e$B%A%'%C%/$7$?$$%U%)%k%@$N>e$K%+!<%=%k$r9g$o$;$F\e(B @kbd{s} \e$B$r2!$9$H!"\e(B
+\e$B$3$l$i$N?t$,:G?7$N$b$N$K99?7$5$l$^$9!#\e(B
+\e$B$?$/$5$s?75,%a%C%;!<%8$,$"$k$H?'$,JQ$o$j$^$9!#\e(B
+
+\e$B%U%)%k%@%b!<%IA4BN$O\e(B @samp{Desktop} \e$B$H$$$&%0%k!<%W%U%)%k%@$K$J$j$^$9!#\e(B
+\e$B%0%k!<%W%U%)%k%@$O%j%?!<%s%-!<$G3+JD$G$-$^$9!#\e(B
+\e$B%0%k!<%W%U%)%k%@$KBP$9$kA`:n$O!"$=$N%0%k!<%W%U%)%k%@$KB0$9$kA4$F$N;R\e(B
+\e$B%U%)%k%@$KBP$9$k0l3g$7$?A`:n$H$7$F07$o$l$^$9!#\e(B
+\e$BNc$($P!"\e(B@samp{[-]Emacsen} \e$B$N$H$3$m$K%+!<%=%k$r9g$o$;$F\e(B @kbd{s} \e$B$r2!$9$H!"\e(B
+\e$B$3$l$K4^$^$l$k#6$D$N%U%)%k%@$NI=<($r:G?7$N$b$N$K99?7$7$^$9!#\e(B
+
+@subsubsection \e$B%U%)%k%@$NA*Br\e(B
+\e$B%U%)%k%@$N9T$K%+!<%=%k$rCV$$$F%j%?!<%s\e(B(\e$B%9%Z!<%9\e(B)\e$B%-!<$r2!$9$H$=$N%U%)%k%@$NFbMF$rI=<($9$k%5%^%j%b!<%I$K0\F0$7$^$9!#\e(B
+
+\e$B$3$N$H$-!"JQ?t\e(B @code{wl-stay-folder-window} \e$B$,\e(B non-nil \e$B$J$i%5%^%j$K0\F0$7$?$H$-$K%U%)%k%@%P%C%U%!$N1&$K%5%^%j$N%P%C%U%!$,8=$l$^$9!#\e(B
+
+@subsection \e$B%-!<%P%$%s%I\e(B
+
+\e$B%U%)%k%@%b!<%I$G$N%U%)%k%@A*Br$K4X$9$k%3%^%s%I$N%-!<%P%$%s%I$O0J2<$NDL$j$G$9!#\e(B
+
+@table @kbd
+@item @key{SPC}
+@itemx @key{RET}
+@kindex @key{SPC} (Folder)
+@kindex @key{RET} (Folder)
+@findex wl-folder-jump-to-current-entity
+\e$B8=:_%+!<%=%k$,$"$k9T$N%U%)%k%@$N%5%^%jI=<($X0\F0$7$^$9!#\e(B
+\e$B%0%k!<%W%U%)%k%@$K%+!<%=%k$,$"$k>l9g$O!"%0%k!<%W%U%)%k%@$N3+JD$r9T$J$$$^$9!#\e(B
+\e$B%"%/%;%9%0%k!<%W$G$O!"\e(Bprefix argument \e$B$D$-$G%0%k!<%W%U%)%k%@$r3+$/$H!"\e(B
+\e$BFbMF$r:G?7$N%j%9%H$K99?7$7$^$9!#\e(B
+\e$B%"%/%;%9%0%k!<%W$,3,AX9=B$$K$J$C$F$$$k>l9g$O:F5"E*$K99?7$7$^$9!#\e(B
+(@code{wl-folder-jump-to-current-entity})
+
+@item M-@key{RET}
+@kindex M-@key{RET} (Folder)
+@findex wl-folder-update-recursive-current-entity
+\e$B8=:_%+!<%=%k$,$"$k%"%/%;%9%0%k!<%W$NFbMF$r:G?7$N%j%9%H$K99?7$7$^$9!#\e(B
+\e$B%"%/%;%9%0%k!<%W$,3,AX9=B$$K$J$C$F$$$k>l9g$O:F5"E*$K99?7$7$^$9!#\e(B
+(@code{wl-folder-update-recursive-current-entity})
+
+@item w
+@kindex w (Folder)
+@findex wl-summary-write
+\e$B?75,%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-write})
+
+@item W
+@kindex W (Folder)
+@findex wl-summary-write-current-newsgroup
+\e$B8=:_%+!<%=%k$,$"$k%U%)%k%@$,\e(B NNTP \e$B%U%)%k%@$J$i!"\e(B
+Newsgroups \e$B%U%#!<%k%I$rJd$C$F%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-write-current-newsgroup})
+
+@item s
+@kindex s (Folder)
+@findex wl-folder-check-current-entity
+\e$B8=:_%+!<%=%k$,$"$k9T$N%U%)%k%@$NL$F14|%a%C%;!<%8?t$r99?7$7$^$9!#\e(B
+(@code{wl-folder-check-current-entity})
+
+@item S
+@kindex S (Folder)
+@findex wl-folder-sync-current-entity
+\e$B8=:_%+!<%=%k$,$"$k9T$N%U%)%k%@$N%5%^%j$r99?7$7$^$9!#\e(B
+(@code{wl-folder-sync-current-entity})
+
+@item r s
+@kindex r s (Folder)
+@findex wl-folder-check-region
+\e$B%j!<%8%g%s$K$"$k%U%)%k%@$NL$F14|%a%C%;!<%8?t$r99?7$7$^$9!#\e(B
+(@code{wl-folder-check-region})
+
+@item r S
+@kindex r S (Folder)
+@findex wl-folder-sync-region
+\e$B%j!<%8%g%s$K$"$k%U%)%k%@$N%5%^%j$r99?7$7$^$9!#\e(B
+(@code{wl-folder-sync-region})
+
+@item P
+@kindex P (Folder)
+@findex wl-folder-prev-unread
+\e$B$R$H$D>e$NL$FI$,$"$k%U%)%k%@\e(B(\e$B$b$7$/$O%0%k!<%W\e(B)\e$B$K0\F0$7$^$9!#\e(B
+(@code{wl-folder-prev-unread})
+
+@item N
+@kindex N (Folder)
+\e$B$R$H$D2<$NL$FI$,$"$k%U%)%k%@\e(B(\e$B$b$7$/$O%0%k!<%W\e(B)\e$B$K0\F0$7$^$9!#\e(B
+(@code{wl-folder-next-unread})
+
+@item p
+@kindex p (Folder)
+\e$B$R$H$D>e$N%U%)%k%@$X0\F0$7$^$9!#\e(B
+(@code{wl-folder-prev-entity})
+
+@item n
+@kindex n (Folder)
+\e$B$R$H$D2<$N%U%)%k%@$X0\F0$7$^$9!#\e(B
+(@code{wl-folder-next-entity})
+
+@item J
+@kindex J (Folder)
+\e$B;XDj$7$?%U%)%k%@$X%+!<%=%k$r0\F0$7$^$9!#\e(B
+(@code{wl-folder-jump-folder})
+
+@item I
+@kindex I (Folder)
+@findex wl-folder-prefetch-current-entity
+\e$B8=:_%+!<%=%k$,$"$k9T$N%U%)%k%@$KBP$7$F!"\e(B
+@code{wl-summary-incorporate}\e$B$K$h$j!"\e(B
+\e$B?7Ce5-;v$r%W%j%U%'%C%A$7$^$9!#\e(B
+\e$B%0%k!<%W%U%)%k%@$K%+!<%=%k$,$"$k>l9g$O!"\e(B
+\e$B:F5"E*$K<B9T$7$^$9!#\e(B
+(@code{wl-folder-prefetch-current-entity})
+
+@item c
+@kindex c (Folder)
+@findex wl-folder-mark-as-read-all-current-entity
+\e$B8=:_%+!<%=%k$,$"$k9T$N%U%)%k%@$N\e(B
+\e$B%a%C%;!<%8$rA4$FFI$s$@$3$H$K$7$^$9!#\e(B
+\e$B%0%k!<%W%U%)%k%@$K%+!<%=%k$,$"$k>l9g$O!"\e(B
+\e$B:F5"E*$K<B9T$7$^$9!#\e(B
+(@code{wl-folder-mark-as-read-all-current-entity})
+
+@item f
+@kindex f (Folder)
+@findex wl-folder-goto-first-unread-folder
+\e$B:G=i$NL$FI$,$"$k%U%)%k%@$N%5%^%j$X0\F0$7$^$9!#\e(B
+(@code{wl-folder-goto-first-unread-folder})
+
+@item E
+@kindex E (Folder)
+@findex wl-folder-empty-trash
+\e$B%4%_H"$r6u$K$7$^$9!#\e(B
+(@code{wl-folder-empty-trash})
+
+@item o
+@kindex o (Folder)
+@findex wl-folder-open-all-unread-folder
+\e$BA4$F$NL$FI$,$"$k%U%)%k%@$,4^$^$l$k%0%k!<%W$r3+$-$^$9!#\e(B
+(@code{wl-folder-open-all-unread-folder})
+
+@item /
+@kindex / (Folder)
+@findex wl-folder-open-close
+\e$B%+!<%=%k9T$N%0%k!<%W$N3+JD$r%H%0%k$7$^$9!#\e(B
+(@code{wl-thread-open-close})
+
+@item [
+@kindex [ (Folder)
+\e$BA4$F$N%0%k!<%W$r3+$-$^$9!#\e(B
+(@code{wl-folder-open-all})
+
+@item ]
+@kindex ] (Folder)
+\e$BA4$F$N%0%k!<%W$rJD$8$^$9!#\e(B
+(@code{wl-folder-close-all})
+
+@item q
+@kindex q (Folder)
+Wanderlust \e$B$r=*N;$7$^$9!#\e(B
+(@code{wl-exit})
+
+@item z
+@kindex z (Folder)
+Wanderlust \e$B$r%5%9%Z%s%I$7$^$9!#\e(B
+(@code{wl-folder-suspend})
+
+@item M-s
+@itemx C-x C-s
+@kindex M-s (Folder)
+@kindex C-x C-s (Folder)
+\e$B8=:_$N%U%)%k%@$N>uBV$r%;!<%V$7$^$9!#\e(B
+(@code{wl-save})
+
+@item M-t
+@kindex M-t (Folder)
+Wanderlust \e$B$N%*%U%i%$%s%b!<%I\e(B/\e$B%*%s%i%$%s%b!<%I$r%H%0%k$7$^$9!#\e(B
+(@code{wl-toggle-plugged})
+
+@item C-t
+@kindex C-t (Folder)
+Wanderlust \e$B$N%5!<%P!&%]!<%HJL$N%*%U%i%$%s\e(B/\e$B%*%s%i%$%s$rJQ99$7$^$9!#\e(B
+(@code{wl-plugged-change})
+@end table
+
+@subsection \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-folders-file
+@vindex wl-folders-file
+\e$B=i4|@_Dj$O\e(B "~/.folders"\e$B!#\e(B
+\e$B9XFI$9$k%U%)%k%@$r5-=R$9$k%U%!%$%k$NL>A0$G$9!#\e(B
+
+@item wl-folder-info-save
+@vindex wl-folder-info-save
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+\e$B<!$KN)$A>e$2D>$7$?$H$-$KA02s$NL$FI?t$J$I$N7k2L$r;H$$$^$o$7$9$k$+$I$&$+!"$G$9!#\e(B
+
+@item wl-stay-folder-window
+@vindex wl-stay-folder-window
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i%5%^%j$K0\F0$7$?$H$-$K%U%)%k%@%P%C%U%!$N1&$K%5%^%j$N%P%C%U%!$,8=$l$^$9!#\e(B
+
+@item wl-folder-window-width
+@vindex wl-folder-window-width
+\e$B=i4|@_Dj$O\e(B 20\e$B!#\e(B
+@code{wl-stay-folder-window} \e$B$,\e(B non-nil \e$B$N$H$-$K$N$3$9%U%)%k%@%P%C%U%!$N%&%#%s%I%&$NI}$G$9!#\e(B
+
+@item wl-folder-many-unsync-threshold
+@vindex wl-folder-many-unsync-threshold
+\e$B=i4|@_Dj$O\e(B 70\e$B!#\e(B
+\e$BL$F14|?t$,$?$/$5$s$+$I$&$+$NogCM!#$3$NCM$r1[$($k$H?'$,JQ$o$j$^$9!#\e(B
+
+@item wl-folder-desktop-name
+@vindex wl-folder-desktop-name
+\e$B=i4|@_Dj$O\e(B "Desktop"\e$B!#\e(B
+\e$B%H%C%W$N%0%k!<%W$NL>A0$G$9!#\e(B
+
+@item wl-folder-petname-alist
+@vindex wl-folder-petname-alist
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%U%)%k%@$NK\L>$H$"$@L>$N\e(B cons \e$B$N%j%9%H$G$9!#\e(B
+
+@item wl-folder-access-subscribe-alist
+@vindex wl-folder-access-subscribe-alist
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%"%/%;%9%0%k!<%W$N%j%9%H<hF@$G<+F0E*$K\e(B subscribe\e$B!"$b$7$/$O\e(B unsubscribe
+\e$B$9$k%U%)%k%@$r;XDj$7$^$9!#\e(B
+
+\e$B%j%9%H$N3FMWAG$O\e(B
+
+(\e$B%"%/%;%9%0%k!<%W$N@55,I=8=\e(B . (\e$B9XFI%U%i%0\e(B \e$B%U%)%k%@$N@55,I=8=\e(B @dots{}))
+
+\e$B$H$J$C$F$$$^$9!#9XFI%U%i%0$,\e(B non-nil \e$B$N>l9g$O%U%)%k%@$N@55,I=8=$K%^%C%A\e(B
+\e$B$7$?%U%)%k%@$N$_I=<($7!"9XFI%U%i%0$,\e(B nil \e$B$N>l9g$O%U%)%k%@$N@55,I=8=$K%^%C\e(B
+\e$B%A$7$?%U%)%k%@$OI=<($5$l$J$/$J$j$^$9!#$?$@$7!"9XFI%U%i%0$,\e(B non-nil \e$B$G$b\e(B
+\e$B4{$K\e(B unsubscribe \e$B$5$l$F$$$k%U%)%k%@$OI=<($5$l$^$;$s!#$^$?!"%U%)%k%@$N@5\e(B
+\e$B5,I=8=$OJ#?t8D5-=R$G$-$^$9!#\e(B
+
+\e$BNc\e(B:
+
+@example
+'(("^-fj$" . (t   "^-fj\\.\\(comp\\|editor\\|mail\\)"
+                  "^-fj\\.\\(net\\|news\\|os\\|rec\\)"))
+  ("^-$" . (t   "^-\\(fj\\|tnn\\|japan\\|gnu\\|comp\\)"))
+  ("^\\+ml$" . (nil "^\\+ml$" "^\\+ml/tmp")))
+@end example
+
+@item wl-folder-hierarchy-access-folders
+@vindex wl-folder-hierarchy-access-folders
+\e$B=i4|@_Dj$O\e(B '("-" "-alt")\e$B!#\e(B
+\e$B3,AX9=B$$K:n@.$9$k%"%/%;%9%0%k!<%W%U%)%k%@$N%j%9%H!#\e(B
+
+\e$BNc$($P!"0J2<$N$h$&$K\e(B 
+@code{wl-folder-hierarchy-access-folders} \e$B$r@_Dj$9$k$H!"\e(B
+
+@lisp
+(setq wl-folder-hierarchy-access-folders
+     '("-" "-alt" "-japan" "-comp" "-comp.unix"))
+@end lisp
+
+\e$B<!$N$h$&$J3,AX9=B$$K$J$C$?%"%/%;%9%0%k!<%W$,:n$i$l$^$9!#\e(B
+
+@example
+   [-]-:912/912/3011
+     [-]-fj:674/674/1314
+       -fj.comp.announce:0/0/2
+       -fj.comp.dev.cdrom:0/0/0
+       @dots{}
+     [+]-japan:238/238/1688
+     [-]-comp:0/0/4
+       [-]-comp.unix:0/0/0
+         -comp.unix.admin:0/0/0
+         -comp.unix.dos-under-unix:0/0/0
+         -comp.unix.programmer:0/0/0
+         [-]-comp.unix.bsd:0/0/23
+           -comp.unix.bsd.freebsd.announce:0/0/0
+     @dots{}
+@end example
+
+\e$B$?$@$7!"\e(B@samp{-} \e$B$r3+$$$?$@$1$G$O\e(B1\e$B$DL\$N3,AX\e(B
+(@samp{-fj}, @samp{-japan}, @samp{-tnn}, @dots{}) \e$B$,:n$i$l$k$@$1$G!"\e(B
+2\e$B$DL\$N3,AX\e(B(@samp{-fj.comp.announce}, @dots{}, @samp{-comp.unix}, @dots{})
+\e$B0J2<$N%U%)%k%@$O$"$i$?$a$F$=$N%0%k!<%W$r3+$/$^$G:n$i$l$^$;$s!#\e(B
+@end table
+
+
+@node Folder Manager,  , Selecting Folder, Folder
+@section \e$B9XFI%U%)%k%@$NJT=8\e(B
+@cindex Folder Manager
+@cindex Folder, Edit
+@cindex Folder, Subscribe
+@cindex Folder, Unsubscribe
+
+\e$BA0$K=R$Y$?DL$j!"9XFI$9$k%U%)%k%@$O\e(B @file{~/.folders} \e$B$KJ];}$5$l$^$9$,!"\e(B
+@file{~/.folders} \e$B$rD>@\JT=8$9$k$^$G$b$J$/!"\e(B
+\e$B%U%)%k%@%b!<%I$+$i$b%U%)%k%@$NDI2C\e(B/\e$B:o=|\e(B/\e$B%0%k!<%W$NDj5A$J$I$NJT=8$,2DG=$H$J$C$F$$$^$9!#\e(B
+
+
+@subsection \e$B;HMQJ}K!\e(B(TIPS)
+
+@subsubsection \e$B%U%)%k%@$NDI2C\e(B
+
+@kbd{m a} \e$B$G?75,$K9XFI$9$k%U%)%k%@$rDI2C$7$^$9!#\e(B
+@kbd{m g} \e$B$G%0%k!<%W$,DI2C$5$l$^$9!#\e(B
+\e$B$3$N%0%k!<%W$K%U%)%k%@$rDI2C$9$k$K$O!"$^$:$3$N%0%k!<%W$r3+$$$?>uBV$K$7$^$9!#\e(B
+\e$B$=$7$F<!$N9T$GA^F~$N%3%^%s%I$r<B9T$9$k$H%0%k!<%W$KDI2C$5$l$k$h$&$K$J$j$^$9!#\e(B
+
+@subsubsection \e$B%U%)%k%@$NJT=8\e(B
+
+@kbd{C-k} \e$B$G%+%C%H\e(B(\e$B@Z$j<h$j\e(B)\e$B!"\e(B@kbd{C-y} \e$B$G%Z!<%9%H\e(B(\e$BD%$jIU$1\e(B)\e$B$,$G$-$^$9!#\e(B
+\e$B$D$^$j!"DL>o$NJ8=qJT=8$N9TJT=8$HF1$8$h$&$K%U%)%k%@$N0LCV$rJQ992DG=$G$9!#\e(B
+
+@subsubsection \e$B%^%k%A%U%)%k%@$N:n@.J}K!\e(B
+
+@enumerate
+@item
+@kbd{m q}\e$B$G\e(B @code{wl-fldmgr-cut-entity-list} \e$B$r>C$7$^$9!#\e(B
+@item
+@kbd{C-k} \e$B$+\e(B @kbd{M-c} \e$B$G%U%)%k%@$r:o=|!"$^$?$O%3%T!<$7$^$9!#\e(B
+@item
+@kbd{m m} \e$B$r<B9T$9$k$H!"%^%k%A%U%)%k%@$,:n@.$5$l$^$9!#\e(B
+@end enumerate
+
+@subsubsection \e$B$"$@L>\e(B(petname)\e$B$d%U%#%k%?$N:o=|\e(B
+
+\e$B$"$@L>$d%U%#%k%?$N@_Dj$G$O!"\e(Bminibuffer \e$B$G\e(B ""(NULL) \e$B$rF~NO$9$k$H\e(B
+\e$B$"$@L>$d%U%#%k%?$,:o=|$5$l$^$9!#\e(B
+
+@subsubsection \e$B6u%0%k!<%W$X$NDI2C\e(B
+
+@kbd{m g} \e$B$J$I$G%0%k!<%W$r:n@.$7$?8e!"$3$N%0%k!<%W$K%U%)%k%@$rDI2C$9$k$K\e(B
+\e$B$O!"$^$:$3$N%0%k!<%W$r3+$$$?>uBV$K$7$^$9!#$=$7$F<!$N9T$GDI2C$dA^F~$N%3\e(B
+\e$B%^%s%I$r<B9T$9$k$H%0%k!<%W$KDI2C$5$l$^$9!#JD$8$?>uBV$G$O$=$N%0%k!<%W$H\e(B
+\e$BF1$8%l%Y%k$KA^F~$5$l$^$9!#8@MU$G@bL@$9$k$N$OFq$7$$$N$G<B:]$K<B9T$7$F$_\e(B
+\e$B$k$H$$$$$G$7$g$&!#$D$^$j!"%+!<%=%k0LCV$h$j>e$K$"$k%0%k!<%W$N3+JD>uBV$K\e(B
+\e$B$h$jA^F~$5$l$k0LCV$,0[$J$k$N$G$9!#\e(B
+
+@subsubsection save\e$B;~$N8@8l%3!<%I\e(B
+
+@code{wl-folders-file} \e$B$r\e(B save \e$B$9$k$H$-$O\e(B @code{wl-mime-charset} \e$B$N8@8l%3!<%I$K$J$j$^$9!#\e(B
+
+@subsubsection \e$B%U%#%k%?%U%)%k%@$N:n@.\e(B
+
+\e$B%U%#%k%?%U%)%k%@$N:n@.%3%^%s%I$O%+!<%=%k>e$N%U%)%k%@$r%U%#%k%?IU$-$KJQ99\e(B
+\e$B$7$^$9!#$b$7%+!<%=%k>e$N%U%)%k%@$r;D$7$?$^$^?7$?$K%U%#%k%?%U%)%k%@$r:n@.\e(B
+\e$B$9$k>l9g$O!"$^$:%3%T!<$7$F$+$i%U%#%k%?$r:n@.$7!"$=$N8e%3%T!<$7$?%U%)%k%@\e(B
+\e$B$rA^F~$7$^$9!#\e(B
+\e$B%U%#%k%?%U%)%k%@:n@.;~$K$O0lEY$KJ#?t$N\e(B(\e$BB?CJ$N\e(B)\e$B%U%#%k%?$,;XDj$G$-$^$9!#\e(B
+""(NULL)\e$B$rF~NO$9$l$P!"@hF,$N%U%#%k%?$OA4$F:o=|$5$l$^$9!#\e(B
+
+@subsubsection \e$B%U%)%k%@$NJB$SJQ$(\e(B
+
+\e$B%0%k!<%WFb$N%U%)%k%@$rJB$SJQ$($9$k:]!"\e(B@code{wl-fldmgr-sort-func} \e$B$K;XDj\e(B
+\e$B$5$l$?4X?t$rMQ$$$^$9!#=i4|@_Dj$G$O\e(B @code{wl-fldmgr-sort-standard} \e$B$,;XDj\e(B
+\e$B$5$l$F$*$j!"$3$l$O%"%k%U%!%Y%C%H=g$KJB$S$+$(%0%k!<%W$O:G=i$K$9$k4X?t$G$9!#\e(B
+\e$BJB$SJQ$($O;XDj$7$?%0%k!<%W$N$_9T$$!"2<0L$N%0%k!<%W$^$GJB$SJQ$($O$7$^$;$s!#\e(B
+\e$B$D$^$j!"\e(Brecursive \e$B$K$O9T$$$^$;$s!#\e(B
+
+@subsubsection \e$B%"%/%;%9%0%k!<%WFb$NI=<($7$J$$%U%)%k%@$N;XDj\e(B
+
+\e$B%"%/%;%9%0%k!<%W$r3+$/$HDL>oA4$F$N%U%)%k%@$,I=<($5$l$^$9$,!"\e(B
+\e$BI=<($7$J$$%U%)%k%@$r;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+\e$B0J2<$NA`:n$O%"%/%;%9%0%k!<%WFb$G$N$_M-8z$G$9!#\e(B
+
+\e$B%3%^%s%I\e(B @code{wl-fldmgr-unsubscribe} (@kbd{u}) \e$B$O%+!<%=%k0LCV$N%U%)%k%@$N\e(B
+\e$BI=<(\e(B(subscribe)\e$B!&HsI=<(\e(B(unsubscribe)\e$B@_Dj$r%H%0%k$7$^$9!#$=$l$KBP$7$F\e(B
+@code{wl-fldmgr-unsubscribe-region} (@kbd{U}) \e$B$O;XDjHO0O$N%U%)%k%@$rHsI=<($K\e(B
+\e$B$7$^$9!#\e(Bunsubscribe \e$B$O%H%0%k$7$^$9$,!"\e(Bregion \e$B$@$HDL>o%H%0%k$K$J$i\e(B
+\e$B$J$$$3$H$KCm0U2<$5$$!#\e(Bregion \e$B$N>l9g%H%0%k$K$9$k$h$j$I$A$i$+$K@_Dj$5\e(B
+\e$B$;$kJ}$,;H$$$d$9$$$H9M$($3$N$h$&$K$7$F$$$^$9!#$7$+$7!">e5-\e(B2\e$B$D$N4X?t$H\e(B
+\e$B$b\e(B prefix argument \e$B$NCM$,@5$J$i%U%)%k%@$rHsI=<(!"Ii$J$iI=<(!"\e(B0\e$B$J$i\e(B
+\e$B%H%0%k$5$;$^$9!#\e(B
+
+\e$B$^$?%-!<$K$O3d$jEv$F$F$$$^$;$s$,!"%U%)%k%@$rI=<($K@_Dj$9$k$@$1$N\e(B
+@code{wl-fldmgr-subscribe} \e$B$H\e(B @code{wl-fldmgr-subscribe-region} \e$B$bMQ0U$7$F\e(B
+\e$B$$$^$9!#;HMQ$9$k>l9g$OE,Ev$J%-!<$K3d$jEv$F$F$/$@$5$$!#\e(B
+
+\e$B$5$i$K!"%"%/%;%9%0%k!<%WFb$G\e(B @code{wl-fldmgr-cut} \e$B$H\e(B 
+@code{wl-fldmgr-cut-region} \e$B$r<B9T$9$k$H!"$=$l$>$l\e(B 
+@code{wl-fldmgr-unsubscribe} \e$B$H\e(B @code{wl-fldmgr-unsubscribe-region} \e$B$r<B\e(B
+\e$B9T$7$?$N$HF1$88z2L$,F@$i$l$^$9!#0c$$$O\e(B cut(-region) \e$B$N>l9g$O2hLL$+$i$b>C\e(B
+\e$B5n$9$k$3$H$G$9!#\e(B
+
+@subsubsection \e$B%"%/%;%9%0%k!<%WFb$NA`:n\e(B
+
+\e$B%"%/%;%9%0%k!<%WFb$G$b:o=|$dA^F~$,9T$($^$9!#$H$$$C$F$b<B:]$K$O\e(B 
+unsubscribe \e$B$9$k$+$I$&$+$r@_Dj$7$F$$$k$@$1$G$9$N$G!"EvA3$=$N%"%/%;%9%0%k!<\e(B
+\e$B%W$KB0$7$F$$$k%U%)%k%@$N$_JQ99$,2DG=$G$9!#$D$^$j!"A^F~$O\e(B subscribe \e$B$7!"\e(B
+\e$B:o=|$O\e(B unsubscribe \e$B$7$?$3$H$HF1$8$K$J$j$^$9!#\e(B
+@footnote{\e$B8=:_$O!";XDjHO0O$rI=<($7$J$$%U%)%k%@$K$9$k$H$-!"\e(B
+\e$B;XDjHO0O$N:o=|$r9T$C$?J}$,9bB.$G$9!#\e(B}
+\e$B=>$C$F!"\e(BWanderlust \e$B0J30$G%U%)%k%@$,JQ99$5$l$?>l9g!"\e(B
+\e$B$=$N%U%)%k%@$r<B:]$KDI2C$7$?$j:o=|$7$?$j$9$k$K$O!"\e(B
+\e$B%"%/%;%9%0%k!<%W$r\e(B @kbd{C-u @key{RET}} \e$B$G99?7$7$F$/$@$5$$!#\e(B
+@xref{Selecting Folder}.
+
+\e$B$^$?!"A^F~\e(B/\e$B:o=|\e(B/\e$BJB$SJQ$($J$I$r9T$C$?$"$H$N%U%)%k%@$NJB$S$OJ];}$5$l$^$9!#\e(B
+\e$B$b$7\e(B @code{wl-force-fetch-folders} \e$B$r@_Dj$9$k$+!"\e(B
+@kbd{C-u @key{RET}} \e$B$G%0%k!<%W$r3+$/$+$9$k$H!"\e(B
+\e$BB8:_$7$J$$%U%)%k%@$O:o=|$5$l!"\e(B
+\e$B?7$?$K:n@.$5$l$?%U%)%k%@$O@hF,$KDI2C$5$l$^$9!#\e(B
+
+@subsection \e$B%-!<%P%$%s%I\e(B
+@cindex Keybind, Folder Mode
+@cindex Keybind, Folder Buffer
+
+\e$B%U%)%k%@$NJT=8$K4X$9$k<g$J%3%^%s%I$N%-!<%P%$%s%I$O0J2<$NDL$j$G$9!#0l1~\e(B 
+@kbd{m} \e$B$G;O$^$k%-!<$KA4$F3d$jEv$F$F!"<g$J$b$N$N$_\e(B1\e$B%9%H%m!<%/$G;HMQ$G$-$k$h\e(B
+\e$B$&$K$7$F$$$^$9!#\e(B
+
+@table @kbd
+@item m a
+@kindex m a (Folder)
+@findex wl-fldmgr-add
+\e$B%U%)%k%@$r:n@.$7$^$9!#\e(B
+(@code{wl-fldmgr-add})
+
+@item +
+@itemx m g
+@kindex + (Folder)
+@kindex m g (Folder)
+@findex wl-fldmgr-make-group
+\e$B%0%k!<%W$r:n@.$7$^$9!#\e(B
+(@code{wl-fldmgr-make-group})
+
+@itemx m A
+@kindex m A (Folder)
+@findex wl-fldmgr-make-access-group
+\e$B%"%/%;%9%0%k!<%W$r:n@.$7$^$9!#\e(B
+(@code{wl-fldmgr-make-access-group})
+
+@item m d
+@kindex m d (Folder)
+@findex wl-fldmgr-delete
+\e$B%U%)%k%@$N<BBN$H$=$N\e(B msgdb \e$B$r:o=|$7$^$9!#\e(B
+nntp\e$B$J$I$N:o=|$G$-$J$$%U%)%k%@$G$O\e(B msgdb \e$B$N$_:o=|$7$^$9!#\e(B
+(@code{wl-fldmgr-delete})
+
+@item R
+@itemx m R
+@kindex R (Folder)
+@kindex m R (Folder)
+@findex wl-fldmgr-rename
+\e$B%U%)%k%@!"$b$7$/$O%0%k!<%WL>$rJQ99$7$^$9!#\e(B
+\e$B%U%)%k%@$rJQ99$9$k>l9g$O\e(B msgdb \e$B$N%Q%9$bJQ99$7$^$9!#\e(B
+(@code{wl-fldmgr-rename})
+
+@item *
+@itemx m m
+@kindex * (Folder)
+@kindex m m(Folder)
+@findex wl-fldmgr-make-multi
+\e$B%^%k%A%U%)%k%@$r:n@.$7$^$9\e(B (cut, copy \e$B$5$l$?%U%)%k%@$r7k9g$7$^$9\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-make-multi})
+
+@item |
+@itemx m f
+@kindex | (Folder)
+@kindex m f (Folder)
+@findex wl-fldmgr-make-filter
+\e$B%U%#%k%?%U%)%k%@$r:n@.$7$^$9\e(B (\e$BA*Br$7$?%U%)%k%@$K\e(Bfilter\e$B$rIU$1$^$9\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-make-filter})
+
+@item M-c
+@itemx m c
+@kindex M-c (Folder)
+@kindex m c (Folder)
+@findex wl-fldmgr-copy
+\e$B%U%)%k%@$r%3%T!<$9$k\e(B (\e$B%0%k!<%W$O%3%T!<IT2D\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-copy})
+
+@item M-w
+@itemx m W
+@kindex M-w (Folder)
+@kindex m W (Folder)
+@findex wl-fldmgr-copy-region
+\e$B;XDjHO0O$N%U%)%k%@$N%3%T!<!#\e(B
+(@code{wl-fldmgr-copy-region})
+
+@item C-k
+@itemx m k
+@kindex C-k (Folder)
+@kindex m k (Folder)
+@findex wl-fldmgr-cut
+\e$B%U%)%k%@$N:o=|\e(B (\e$B@Z$j<h$j\e(B)\e$B!#%U%)%k%@$N<BBN$O:o=|$7$^$;$s!#\e(B
+(@code{wl-fldmgr-cut})
+
+@item C-w
+@itemx m C-w
+@kindex C-w (Folder)
+@kindex m C-w (Folder)
+@findex wl-fldmgr-cut-region
+\e$B;XDjHO0O$N%U%)%k%@$N:o=|\e(B (\e$B@Z$j<h$j\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-cut-region})
+
+@item C-y
+@itemx m y
+@kindex C-y (Folder)
+@kindex m y (Folder)
+@findex wl-fldmgr-yank
+\e$B%3%T!<!":o=|$7$?%U%)%k%@\e(B(cut-list)\e$B$rA^F~$9$k\e(B(\e$B%Z!<%9%H!"E=$jIU$1\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-yank})
+
+@item m p
+@kindex m p (Folder)
+@findex wl-fldmgr-set-petname
+\e$B%U%)%k%@$K$"$@L>\e(B(petname)\e$B$rIU$1$k!#\e(B
+(@code{wl-fldmgr-set-petname})
+
+@item m q
+@kindex m q (Folder)
+@findex wl-fldmgr-clear-cut-entity-list
+cut, copy \e$B$7$?%U%)%k%@>pJs\e(B(cut-list)\e$B$r>C$9!#\e(B
+(@code{wl-fldmgr-clear-cut-entity-list})
+
+@item m s
+@kindex m s (Folder)
+@findex wl-fldmgr-sort
+\e$B%0%k!<%WFb$N%U%)%k%@$rJB$SJQ$($k\e(B (\e$B$=$N%0%k!<%W3,AX$N$_\e(B)\e$B!#\e(B
+(@code{wl-fldmgr-sort})
+
+@item m C-s
+@kindex m C-s (Folder)
+@findex wl-fldmgr-save
+wl-folders-file \e$B$K\e(B save \e$B$9$k!#\e(B
+(@code{wl-fldmgr-save})
+@end table
+
+[\e$B0J2<$NA`:n$O%"%/%;%9%0%k!<%W$KBP$7$F$N$_M-8z\e(B]
+
+@table @kbd
+@item u
+@itemx m u
+@kindex u (Folder)
+@kindex m u (Folder)
+@findex wl-fldmgr-unsubscribe
+\e$B%U%)%k%@$NI=<(\e(B/\e$BHsI=<($N@_Dj!#\e(B
+(@code{wl-fldmgr-unsubscribe})
+
+@item U
+@itemx r u
+@kindex U (Folder)
+@kindex r u (Folder)
+@findex wl-fldmgr-unsubscribe-region
+\e$B;XDjHO0O$K$"$k%U%)%k%@$NI=<(\e(B/\e$BHsI=<($N@_Dj!#\e(B
+(@code{wl-fldmgr-unsubscribe-region})
+
+@item l
+@itemx m l
+@kindex l (Folder)
+@kindex m l (Folder)
+@findex wl-fldmgr-access-display-normal
+\e$B8=:_M-8z$J%U%)%k%@$N$_0lMwI=<($9$k!#\e(B
+(@code{wl-fldmgr-access-display-normal})
+
+@item L
+@itemx m L
+@kindex L (Folder)
+@kindex m L (Folder)
+@findex wl-fldmgr-access-display-all
+\e$BHsI=<($N%U%)%k%@$b4^$a$FA4$F$N%U%)%k%@$r0lMwI=<($9$k!#\e(B
+(@code{wl-fldmgr-access-display-all})
+
+@item C-c C-o
+@kindex C-c C-o (Folder)
+@findex wl-jump-to-draft-buffer
+\e$B%I%i%U%H%P%C%U%!$,$"$l$P0\F0$7$^$9!#\e(B \e$BJ#?t$N%I%i%U%H%P%C%U%!$,B8:_$9$k>l9g$O!"\e(B
+\e$B<!!9$H@Z$jBX$($F$$$-$^$9!#$^$?!"\e(Bprefix argument \e$B$r$D$1$k$3$H$K$h$j!"\e(B
+\e$B%P%C%U%!$,B8:_$7$F$$$J$$>l9g$O!"%I%i%U%H%U%)%k%@$+$i%U%!%$%k$r\e(B(\e$BB8:_$9$l$P\e(B)
+\e$BFI$_9~$_$^$9!#\e(B
+(@code{wl-jump-to-draft-buffer})
+@end table
+
+
+@subsection \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item  wl-interactive-save-folders
+@vindex wl-interactive-save-folders
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+\e$B%U%)%k%@JQ99$NA`:n$r9T$C$?>l9g!"\e(BWanderlust \e$B=*N;;~$b$7$/$O\e(B Emacs \e$B=*N;;~$K\e(B
+ save \e$B$9$k$+3NG'$r9T$$$^$9!#\e(Bnil \e$B$@$H3NG'$J$7$G\e(B save \e$B$7$^$9!#\e(B
+
+@item wl-fldmgr-make-backup
+@vindex wl-fldmgr-make-backup
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(Bsave\e$B$9$k:]$K\e(B @file{~/.folders.bak} \e$B$K%P%C%/%"%C%W$r<h$j$^$9!#\e(B
+
+@item wl-fldmgr-sort-func
+@vindex wl-fldmgr-sort-func
+\e$B=i4|@_Dj$O\e(B 'wl-fldmgr-sort-standard\e$B!#\e(B
+sort \e$B;~$K;HMQ$9$k4X?t$r;XDj$7$^$9!#\e(B
+\e$B=i4|@_Dj$O!"%"%k%U%!%Y%C%H=g$KJB$Y%0%k!<%W$O:G=i$K$9$k4X?t$G$9!#\e(B
+(@code{wl-fldmgr-sort-group-first} \e$B$,\e(B non-nil \e$B$N>l9g\e(B)\e$B!#\e(B
+
+@item wl-fldmgr-sort-group-first
+@vindex wl-fldmgr-sort-group-first
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(B@code{wl-fldmgr-sort-standard} \e$B$GJB$SBX$($k$H$-%0%k!<%W$r:G\e(B
+\e$B=i$K$9$k!#\e(Bnil \e$B$J$i!"%0%k!<%W$b4^$a$F%"%k%U%!%Y%C%H=g$KJB$SBX$($^$9!#\e(B
+
+@item wl-folder-check-async
+@vindex wl-folder-check-async
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$N>l9g!"%U%)%k%@$N?75,%a%C%;!<%8?t$N%A%'%C%/$rHsF14|$K9T$J$$$^$9!#\e(B
+\e$B%K%e!<%9%0%k!<%W$N%A%'%C%/$,BgI}$KB.$/$J$j$^$9!#\e(B
+
+@item wl-folder-check-fast
+@vindex wl-folder-check-fast
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$N>l9g!"%U%)%k%@$N?75,%a%C%;!<%8?t$N%A%'%C%/$r9T$&$?$S$K\e(B
+\e$B%U%)%k%@$NI=<($r99?7$7$^$;$s!#\e(B
+
+@item wl-folder-notify-deleted
+@vindex wl-folder-notify-deleted
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+@c  nil means?
+Non-nil \e$B$J$i%a%C%;!<%8$,:o=|$5$l$?$H$-$K%U%)%k%@%b!<%I$GL$FI?t$r%A%'%C%/\e(B
+\e$B$9$k$HIi$NCM$,I=<($5$l$^$9!#\e(B
+\e$BCM$,\e(B 'sync \e$B$J$i$P!"%a%C%;!<%8$,:o=|$5$l$F$$$?$H$-$K%U%)%k%@$NFbMF$HF14|$r\e(B
+\e$B<h$j$^$9!#\e(B
+@end table
+
+@subsection \e$B$=$NB>\e(B
+
+\e$B%U%)%k%@$NJT=8$K4X$7$F!"0J2<$N$h$&$J;E3]$1$d@)8B$,$"$j$^$9!#\e(B
+
+@enumerate
+@item
+cut \e$B$d\e(B copy \e$B$r9T$&$H!"%9%?%C%/$N$h$&$KJQ?t\e(B @code{wl-fldmgr-cut-entity-list}
\e$B$K$?$^$C$F$$$-$^$9!#\e(Bpaste(yank) \e$B$O\e(B cut \e$B$d\e(B copy \e$B$7$?C10L$G\e(B
+ (region \e$B$G\e(B copy \e$B$7$?$J$i$=$N\e(B region \e$BFb$N%U%)%k%@$,\e(B \e$B0lEY$K\e(B) \e$BEG$-=P$5$l$^$9!#\e(B
+
+@item
+Desktop \e$B%0%k!<%W$N\e(B cut, copy \e$B$O$G$-$^$;$s!#$^$?!"\e(BDesktop \e$B30$X$NA^F~$O$G$-$^$;$s!#\e(B
+
+@item
+\e$B%0%k!<%W$N\e(B copy \e$B$O$G$-$^$;$s!#\e(B
+
+@item
+\e$B%"%/%;%9%0%k!<%W$NA`:n$O%"%/%;%9%0%k!<%W$KB0$7$F$$$k%U%)%k%@$N$_BP>]\e(B
+\e$B$H$J$j$^$9!#\e(B
+
+@item
+\e$BA4BN$GF1$8L>A0$N%0%k!<%W$OJ#?t:n$l$^$;$s!#\e(B
+
+@item
+\e$BF1$8%0%k!<%W\e(B(\e$B3,AX\e(B)\e$B$KF1$8%U%)%k%@$O:n$l$^$;$s!#3,AX$,0c$($PJ#?t:n$l$^$9!#\e(B
+\e$B0[$J$k%U%)%k%@$KF1$8$"$@L>$O;XDj$G$-$^$;$s!#\e(B
+@end enumerate
+
+
+@c
+@c  Summary
+@c
+@node Summary, Message, Folder, Top
+@chapter \e$B%5%^%j%b!<%I\e(B
+
+@section \e$B;HMQJ}K!\e(B(TIPS)
+
+@subsection \e$B%5%^%j$NI=<(FbMF\e(B
+
+\e$B%U%)%k%@%b!<%I$GFI$_$?$$%U%)%k%@$rA*Br$9$k$H!"%5%^%j%b!<%I$K0\F0$7$^$9!#\e(B
+\e$B%5%^%j%b!<%I$K$O!"0J2<$N$h$&$K%a%C%;!<%8$N0lMw$,I=<($5$l$^$9!#\e(B
+
+@example
+  377  09/16(\e$B?e\e(B)11:57 [+1: \e$BKLL\$5$s\e(B       ] Bug?
+  381  09/17(\e$BLZ\e(B)00:16 [+3: \e$B1|@>$5$s\e(B       ] elmo-lha.el -- LHA interface
+  384  09/17(\e$BLZ\e(B)01:32 [+1: \e$B$F$i$K$7\e(B       ] wl-0.6.2
+  389 N09/18(\e$B6b\e(B)01:07 [+2: \e$B$F$i$K$7\e(B       ] wl-0.6.3
+@end example
+
+\e$B3F%a%C%;!<%8$O!"0l9T$K\e(B
+
+@example
+\e$B%a%C%;!<%8HV9f!"0l;~E*%^!<%/!"1JB3E*%^!<%/!"F|IU$1!":9=P?M!"\e(B \e$B%5%V%8%'%/%H\e(B
+@end example
+
+@noindent
+\e$B$N=g$KI=<($5$l$^$9!#8=:_%P!<%8%g%s$G$OI=<($rJQ99$9$k$3$H$O$G$-$^$;$s!#\e(B
+
+\e$B%a%C%;!<%8HV9f$O$=$N%U%)%k%@Cf$K$"$k%a%C%;!<%8$K$D$1$i$l$?HV9f$G$9!#\e(B
+News \e$B%U%)%k%@$G$O\e(B article \e$BHV9f!"\e(BIMAP \e$B%U%)%k%@$G$O\e(B UID\e$B!"\e(BMH \e$B%U%)%k%@$G$O\e(B
+\e$B%U%!%$%kL>$G$9!#\e(B
+
+\e$B0l;~E*\e(B/\e$B1JB3E*%^!<%/$K$D$$$F$O!"$"$H$G>\$7$/@bL@$7$^$9!#\e(B
+
+\e$BF|IU$1$O!"7n\e(B/\e$BF|\e(B(\e$BMKF|\e(B)\e$B;~\e(B:\e$BJ,\e(B \e$B$N$h$&$KI=<($5$l$^$9!#MKF|$rF|K\8l$G$O$J$/1Q8lI=5-$7$?$$>l9g$O!"\e(B@code{wl-summary-weekday-name-lang} \e$B$r\e(B "en" \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$B:9=P?M$O!"%9%l%C%I$N?<$5J,%$%s%G%s%H$5$l$FI=<($5$l$^$9!#:9=P?M$NL>A0$O!"\e(B
+\e$B%"%I%l%9D"$K$"$@L>$,$"$l$P$"$@L>$GI=<($7$^$9!#$"$@L>I=5-$r$d$a$?$$>l9g$O!"\e(B
+@code{wl-use-petname} \e$B$r\e(B nil \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$B:9=P?M$NItJ,$K$"$k\e(B @samp{+2} \e$B$N$h$&$J?t;z$NI=<($O!"\e(B
+\e$B$=$N%a%C%;!<%8$KBP$9$kJV;v$N?t$rI=$7$^$9!#\e(B
+\e$BNc$($P\e(B @samp{+2} \e$B$J$i\e(B 2 \e$BDL$"$C$?$3$H$r<($7$^$9!#\e(B
+
+\e$B%5%V%8%'%/%H$O!"%a%C%;!<%8$N\e(B Subject \e$B%U%#!<%k%I$G$9!#\e(B
+\e$BF1$8%9%l%C%I$G!"$+$D?F$HF1$8%5%V%8%'%/%H$r;}$D%a%C%;!<%8$J$iI=<($5$l$^$;$s!#\e(B
+\e$B%a!<%j%s%0%j%9%H$J$I$NDL$7HV9fI=<($OL5;k$5$l$^$9!#%5%V%8%'%/%H$,$J$$>l9g!"\e(B
+\e$BJQ?t\e(B @code{wl-summary-no-subject-message} \e$B$NFbMF$,I=<($5$l$^$9!#\e(B
+
+@subsection \e$B0l;~E*%^!<%/\e(B
+@cindex Mark, Temporary
+
+\e$B0l;~E*%^!<%/$O!"%a%C%;!<%8$rA`:n$9$k$?$a%^!<%/$G$9!#\e(B
+
+\e$B0l;~E*%^!<%/$K$O!"\e(B@samp{*}, @samp{D}, @samp{o}, @samp{O} \e$B$,$"$j$^$9!#\e(B
+
+@table @samp
+@item *
+\e$B$^$H$a=hM}MQ%^!<%/$G$9!#\e(B
+@kbd{m} \e$B$G$O$8$^$k%3%^%s%I$G\e(B @samp{*}\e$B%^!<%/$N$D$$$?%a%C%;!<%8BP$7$F0l3g$7$?=hM}\e(B
+\e$B$,$G$-$^$9!#\e(B
+
+@item D
+\e$B:o=|$9$k%a%C%;!<%8$KIU$/%^!<%/$G$9!#\e(B@kbd{d} \e$B$r2!$9$HIU$-$^$9!#\e(B
+
+@item o
+\e$B%j%U%!%$%k$9$k%a%C%;!<%8$KIU$/%^!<%/$G$9!#\e(B
+@kbd{o}\e$B$r2!$9$H!"%j%U%!%$%k@h$rJ9$$$FMh$k$N$GEz$($k$H!"%j%U%!%$%k@h$N%U%)%k%@>pJs$H$H$b$KIU$1$i$l$^$9!#\e(B
+
+@item O
+\e$B%3%T!<$9$k%a%C%;!<%8$KIU$/%^!<%/$G$9!#\e(B
+@kbd{O}\e$B$r2!$9$H!"%3%T!<@h$rJ9$$$FMh$k$N$GEz$($k$H!"%3%T!<@h$N%U%)%k%@>pJs$H$H$b$KIU$1$i$l$^$9!#\e(B
+@end table
+
+@kbd{x} \e$B$r2!$9$3$H$K$h$j!"\e(B@samp{D}, @samp{o}, @samp{O} \e$B$N%^!<%/$,$D$1$i$l$?%a%C%;!<%8$N:o=|!"%j%U%!%$%k!"%3%T!<$,<B9T$5$l$^$9!#\e(B
+
+@subsection \e$B1JB3E*%^!<%/\e(B
+
+\e$B1JB3E*%^!<%/$O!"%a%C%;!<%8$N>uBV$r$7$a$9%^!<%/$G$9!#\e(B
+
+\e$B1JB3E*%^!<%/$K$O!"\e(B@samp{N}, @samp{U}, @samp{!}, @samp{u}, @samp{$} \e$B$,$"$j$^$9!#\e(B
+
+
+@table @samp
+@item N
+\e$B?75,%a%C%;!<%8$KIU$-$^$9!#\e(B
+@item U
+\e$BL$FI%a%C%;!<%8$KIU$-$^$9!#\e(B
+@item !
+\e$BL$FI%a%C%;!<%8$KIU$-$^$9!#\e(B@samp{U} \e$B$H$N0c$$$O!"\e(B@samp{!} \e$B$N%a%C%;!<%8$O\e(B
+\e$B%-%c%C%7%e$5$l$F$$$k$3$H$G$9!#\e(B
+@item u
+\e$B4{FI%a%C%;!<%8$KIU$-$^$9!#%^!<%/$J$7$H$N0c$$$O!"\e(B@samp{u} \e$B$N%a%C%;!<%8$O\e(B
+\e$B%-%c%C%7%e$5$l$F$$$J$$$3$H$G$9!#\e(B
+@item $
+@kbd{$} \e$B%-!<$r2!$9$H!"\e(B@samp{$} \e$B%^!<%/$,IU$-$^$9!#\e(B
+\e$B$3$N%^!<%/$O\e(BEmacs\e$B$r=*N;$7$F$bJ]B8$5$l$k$?$a!"$"$H$GJV;v$r=q$-$?$$>l9g$J$I!"3P$($F$*$-$?$$=EMW$J%a%C%;!<%8$KIU$1$F$*$/$HJXMx$G$9!#\e(B@samp{$} \e$B$NIU$$$?%a%C%;!<%8$O!"%K%e!<%95-;v$d%5!<%P>e$N\e(BIMAP\e$B%U%)%k%@$N%a%C%;!<%8$,\e(B expire \e$B$5$l$k$J$I$7$F>C$($?>l9g$b;D$j$^$9!#\e(B
+@item \e$B$J$7\e(B
+\e$B4{FI%a%C%;!<%8$K$O%^!<%/$,B8:_$7$^$;$s!#\e(B
+@end table
+
+@samp{N}, @samp{U}, @samp{u} \e$B$O!"\e(B
+\e$B$=$N%a%C%;!<%8$,%-%c%C%7%e$5$l$F$$$J$$$3$H$r$7$a$7$F$$$^$9!#\e(B
+\e$B$3$l$i$N%^!<%/$,IU$$$F$$$J$$>l9g!"\e(B
+\e$B$D$^$j!"$=$N%a%C%;!<%8$,%-%c%C%7%e$5$l$F$$$k>l9g$O!"\e(B
+\e$B%M%C%H%o!<%/$K@\B3$5$l$F$$$J$/$F$b\e(B IMAP \e$B%U%)%k%@$N%a%C%;!<%8$d\e(B
+NNTP \e$B%U%)%k%@$N%K%e!<%95-;v$rFI$`$3$H$,$G$-$^$9!#\e(B
+
+@subsection \e$B%a%C%;!<%8$NFI$_$9$9$a$+$?\e(B
+
+\e$B4pK\E*$K%9%Z!<%9%-!<$r2!$9$@$1$GFI$_?J$a$k$3$H$,$G$-$^$9!#\e(B
+\e$B%5%^%j$NI=<(FbMF$r%U%)%k%@$N:G?7$N>uBV$K9g$o$;$k\e(B(\e$BF14|$9$k\e(B)\e$B$K$O!"\e(B
+@kbd{s} \e$B$r2!$7$^$9!#\e(B
+
+@kbd{N} \e$B$G<!$NL$FI!"\e(B@kbd{n} \e$B$G<!$N%a%C%;!<%8$rI=<($7$^$9!#\e(B
+@kbd{j} \e$B$r2!$9$H8=:_I=<(Cf$N%a%C%;!<%8$N%P%C%U%!$K0\F0$7$^$9!#\e(B
+\e$B%^%k%A%Q!<%H$NA`:n$O%a%C%;!<%8%P%C%U%!$K0\F0$7$F$+$i9T$$$^$9!#\e(B
+
+@subsection \e$B%9%l%C%I$NA`:n\e(B
+
+\e$BNc$($P!"\e(B
+
+@example
+  384  09/17(\e$BLZ\e(B)01:32 [+1: \e$B$F$i$K$7\e(B       ] wl-0.6.2
+@end example
+
+@noindent
+\e$B$O0l$D$N%9%l%C%I\e(B(\e$B0l$D$NOCBj$NN.$l\e(B)\e$B$r<($7$F$$$^$9!#\e(B
+\e$B$3$N9T$G!"\e(B@kbd{/} \e$B$r2!$9$H$3$N%9%l%C%I$,3+$+$l!"<!$N$h$&$JI=<($K$J$j$^$9!#\e(B
+
+@example
+  384  09/17(\e$BLZ\e(B)01:32 [ \e$B$F$i$K$7\e(B          ] wl-0.6.2
+  388  09/17(\e$BLZ\e(B)22:34 \e$B(&\e(B[ \e$BB<ED$5$s\e(B          ]
+@end example
+
+(388 \e$BHV$N%a%C%;!<%8$O\e(B 384 \e$BHV$N%a%C%;!<%8$KBP$9$kJV;v$G$9!#\e(B)
+\e$B$b$&0l2s\e(B @kbd{/} \e$B$r2!$9$H!"%9%l%C%I$rJD$8$^$9!#\e(B
+prefix argument \e$B$D$-$G\e(B @kbd{/} \e$B$r2!$9$H!"A4$F$N;R%9%l%C%I$r3+$-$^$9!#\e(B
+
+@kbd{t} \e$B$+$i;O$^$k%3%^%s%I$G!"$=$N%9%l%C%I$KB0$9$k%a%C%;!<%8$KBP$7$F0l3g$7$F=hM}$r9T$&$3$H$,$G$-$^$9!#\e(B
+
+@subsection \e$B%-%c%C%7%e%U%!%$%k\e(B
+
+\e$B%M%C%H%o!<%/7PM3$N%a%C%;!<%8$O%-%c%C%7%e$5$l$^$9!#\e(B
+\e$B%-%c%C%7%e$O!"%G%#%l%/%H%j\e(B @file{~/.elmo/cache} \e$B$KJ];}$5$l$^$9!#\e(B
+\e$B%-%c%C%7%e$r%/%j%"$9$k$K$O!"\e(B
+
+@example
+M-x elmo-cache-expire-by-size
+@end example
+
+@noindent
+\e$B$HF~NO$7$F$/$@$5$$!#\e(B
+\e$B:G6a;H$o$l$F$J$$%-%c%C%7%e$+$i=g$K!"0lDj$N%G%#%9%/MFNL$K$J$k$^$G>C$7$^$9!#\e(B
+
+@subsection \e$B%P%C%U%!%-%c%C%7%e$H@hFI$_5!G=\e(B
+
+@code{elmo-use-buffer-cache} \e$B$,\e(B non-nil \e$B$G$"$l$P!"\e(B
+\e$B0lEYFI$s$@%a%C%;!<%8$,0lDj?t%P%C%U%!$KJ];}$5$l$^$9!#\e(B
+\e$BJ];}$9$k%P%C%U%!$N?t$O\e(B @code{elmo-buffer-cache-size} \e$B$G;XDj$7$^$9!#\e(B
+
+\e$B$^$?!"%a%C%;!<%8$rFI$s$G$$$k4V$K<!$N%a%C%;!<%8$r<hF@$7$F$*$/\e(B
+\e$B@hFI$_5!G=$,$"$j$^$9!#\e(B
+\e$B$3$l$O@hFI$_$7$?%a%C%;!<%8$r%P%C%U%!%-%c%C%7%e$K$?$a$F$*$/$?$a!"\e(B
+@code{elmo-use-buffer-cache} \e$B$,\e(B non-nil \e$B$G$"$k$3$H$,I,MW$G$9!#\e(B
+
+\e$B$3$N@hFI$_$9$k%U%)%k%@$O<!$N\e(B2\e$B$D$NJQ?t$K$h$j;XDj$G$-$^$9!#\e(B
+
+@table @code
+@item wl-cache-prefetch-folder-type-list
+@vindex wl-cache-prefetch-folder-type-list
+\e$B=i4|@_Dj$O\e(B '(nntp imap4)\e$B!#\e(B
+\e$B@hFI$_5!G=$rM-8z$K$9$k%U%)%k%@$r<oJL$N%j%9%H$G;XDj$7$^$9!#\e(B
+\e$B=i4|@_Dj$N>l9g!"$b$7\e(B localdir \e$B$H\e(B imap4 \e$B%U%)%k%@$,:.:_$7$?\e(B multi\e$B%U%)%k%@$G$O\e(B 
+imap4 \e$B$N%a%C%;!<%8$@$1$,@hFI$_$5$l$^$9!#\e(B
+\e$B$3$NJQ?t$O\e(B @code{wl-cache-prefetch-folder-list} \e$B$h$j$bM%@h$5$l$^$9!#\e(B
+
+\e$B$b$7!"\e(Blocaldir \e$B$H\e(B localnews \e$B%U%)%k%@$b@hFI$_$9$k>l9g$O<!$N$h$&$K;XDj$7$^$9!#\e(B
+@lisp
+(setq wl-cache-prefetch-folder-type-list
+      '(nntp imap4 localdir localnews))
+@end lisp
+
+@item wl-cache-prefetch-folder-list
+@vindex wl-cache-prefetch-folder-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B@hFI$_5!G=$rM-8z$K$9$k%U%)%k%@$r%U%)%k%@L>\e(B(\e$B@55,I=8=\e(B)\e$B$N%j%9%H$G;XDj$7$^$9!#\e(B
+@end table
+
+@subsection \e$B<+F0%j%U%!%$%k\e(B
+
+\e$B%a%C%;!<%8$N%X%C%@>pJs$+$iG$0U$N%U%)%k%@$X?6$jJ,$1$k<+F0%j%U%!%$%k5!G=$,\e(B
+@kbd{C-o} (@code{wl-summary-auto-refile}) \e$B$G;HMQ$G$-$^$9!#<+F0%j%U%!%$%k$O\e(B 
+msgdb \e$B$N\e(B overview \e$B>pJs$r85$K?6$jJ,$1$7$^$9!#\e(B
+\e$BI8=`$G$O\e(B @samp{From} @samp{Subject} @samp{To} @samp{Cc} \e$B$,4^$^$l$F$$$^$9!#\e(B
+\e$B$3$l0J30$N3HD%9`L\$G?6$jJ,$1$7$?$$$H$-$K$O!"\e(B
+
+@lisp
+(setq elmo-msgdb-extra-fields
+      '("x-ml-name"
+      "reply-to"
+      "sender"
+      "mailing-list"
+      "newsgroups"))
+@end lisp
+
+@noindent
+\e$B$H$7$F3HD%9`L\$,\e(B msgdb \e$B$K4^$^$l$k$h$&$K$7$F$/$@$5$$!#$9$G$K<hF@$7$?%a%C\e(B
+\e$B%;!<%8$N3HD%9`L\$r<h$j9~$`$K$O\e(B @kbd{s all} \e$B$J$I$G\e(B msgdb \e$B$r:F:n@.$9$kI,MW\e(B
+\e$B$,$"$j$^$9!#\e(B
+
+\e$B<!$K?6$jJ,$1$9$k%k!<%k$r@_Dj$7$^$9!#\e(B
+
+@lisp
+(setq wl-refile-rule-alist
+      '(
+        ("x-ml-name"
+         ("^Wanderlust" . "+wl")
+         ("^Elisp" . "+elisp"))
+        ("From"
+         ("teranisi@@isl.ntt.co.jp" . "+teranisi"))))
+@end lisp
+
+\e$B$3$N$h$&$J@_Dj$r$7\e(B @kbd{C-o} (@code{wl-summary-auto-refile}) \e$B$G>r7o$K\e(B
+\e$B%^%C%A$7$?%a%C%;!<%8$K%j%U%!%$%k%^!<%/$,IU2C$5$l$^$9!#\e(B@kbd{x} \e$B$G%j%U%!%$\e(B
+\e$B%k$r<B9T$7$^$9!#%k!<%k$NA0J}$K$"$k?6$jJ,$1>r7o$,M%@h$5$l$^$9!#\e(B
+
+@code{wl-summary-auto-refile-skip-marks} \e$B$r@_Dj$9$k$3$H$K$h$j!"\e(B
+\e$B<+F0%j%U%!%$%k$NBP>]$H$9$k%a%C%;!<%8$rJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+\e$BI8=`$G$O\e(B @samp{N} @samp{U} @samp{!} \e$B$,@_Dj$5$l$F$*$j!"\e(B
+\e$B$3$l$i$N1JB3E*%^!<%/$N$D$$$?%a%C%;!<%8$O!"<+F0%j%U%!%$%k$7$^$;$s!#\e(B
+\e$B$D$^$jI8=`$G$OL$FI$N%a%C%;!<%8$r<+F0%j%U%!%$%k$7$J$$$3$H$K$J$j$^$9!#\e(B
+\e$B$9$Y$F$N%a%C%;!<%8$r<+F0%j%U%!%$%k$NBP>]$K$9$k$K$O!"\e(B
+
+@lisp
+(setq wl-summary-auto-refile-skip-marks nil)
+@end lisp
+
+@noindent
+\e$B$NMM$K\e(B @code{wl-summary-auto-refile-skip-marks} \e$B$r\e(B nil \e$B$K$7$^$9!#\e(B
+
+
+@subsection \e$B%9%F%#%C%-!<%5%^%j\e(B
+@cindex Summary, Sticky
+@cindex Sticky Summary
+
+\e$B%9%F%#%C%-!<%5%^%j$O!"\e(B@kbd{q} \e$B$G8=:_$N%5%^%j$r=*N;$7$F$b%P%C%U%!$,>C$($J\e(B
+\e$B$$!"$=$NL>$NDL$j%9%F%#%C%-!<\e(B(\e$B$7$D$3$$\e(B)\e$B%5%^%j$G$9!#\e(B
+
+@kbd{C-u g} \e$B$G%U%)%k%@0\F0$9$k$+!"DL>o$N%5%^%j$G\e(B @kbd{M-s}
+(@code{wl-summary-stick}) \e$B$r<B9T$9$k$H%9%F%C%#%-!<%5%^%j$K$J$j$^$9!#%9\e(B
+\e$B%F%#%C%-!<%5%^%j$N%P%C%U%!L>$O!"\e(B@samp{Summary:@var{\e$B%U%)%k%@L>\e(B}} \e$B$H$J$j$^$9!#\e(B
+@kbd{C-x b} (@code{switch-to-buffer}) \e$B$J$I$G!"E,Ev$K@ZBX$($l$P$$$D$G$b;2\e(B
+\e$B>H$G$-$^$9!#%9%F%#%C%-!<%5%^%j$r=*N;$9$k$K$O\e(B @kbd{C-u q} \e$B$G$9!#$=$NB>$N\e(B
+\e$BA`:n$K4X$7$F$ODL>o$N%5%^%j$HF1MM$G$9!#\e(B
+
+\e$BJQ?t\e(B @code{wl-summary-always-sticky-folder-list} \e$B$K%U%)%k%@L>\e(B(\e$B@55,I=8=\e(B)
+\e$B$N%j%9%H$r@_Dj$9$k$3$H$K$h$j!"%U%)%k%@0\F0;~$K<+F0E*$K%9%F%#%C%-!<%5%^%j$H$9$k$3$H$b$G$-$^$9!#\e(B
+
+@section \e$B%-!<%P%$%s%I\e(B
+@cindex Keybind, Summary Mode
+@cindex Keybind, Summary Buffer
+
+\e$B%5%^%j%b!<%I$N%-!<%P%$%s%I$O0J2<$NDL$j$G$9!#\e(B
+
+@table @kbd
+@item @key{SPC}
+@kindex @key{SPC} (Summary)
+@findex wl-summary-read
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$r%a%C%;!<%8%P%C%U%!$KI=<($7$^$9!#\e(B
+(@code{wl-summary-read})
+
+@item .
+@kindex . (Summary)
+@findex wl-summary-redisplay
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$r:FI=<($7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%-%c%C%7%e$,B8:_$7$F$bL5;k$7$F:FFI$_9~$_$7D>$7$^$9!#\e(B
+(@code{wl-summary-redisplay})
+
+@item <
+@kindex < (Summary)
+@findex wl-summary-display-top
+\e$B:G=i$N%a%C%;!<%8$rI=<($7$^$9!#\e(B
+(@code{wl-summary-display-top})
+
+@item >
+@kindex > (Summary)
+@findex wl-summary-display-bottom
+\e$B:G8eHx$N%a%C%;!<%8$rI=<($7$^$9!#\e(B
+(@code{wl-summary-display-bottom})
+
+@item @key{BS}
+@itemx @key{DEL}
+@kindex @key{BS} (Summary)
+@kindex @key{DEL} (Summary)
+\e$BA0$N%Z!<%8$rI=<($7$^$9!#\e(B
+@findex wl-summary-prev-page
+(@code{wl-summary-prev-page})
+
+@item @key{RET}
+@kindex @key{RET} (Summary)
+@findex wl-summary-next-line-content
+\e$B%+!<%=%k9T$N%a%C%;!<%8$,I=<(Cf$G$"$l$P%a%C%;!<%8$r0l9T>e$K%9%/%m!<%k$7$^$9!#\e(B
+\e$BI=<(Cf$G$J$1$l$P!"I=<($7$^$9!#\e(B
+(@code{wl-summary-next-line-content})
+
+@item /
+@kindex / (Summary)
+@findex wl-thread-open-close
+\e$B%+!<%=%k9T$N%9%l%C%I$N3+JD$r%H%0%k$7$^$9!#\e(B
+(@code{wl-thread-open-close})
+
+@item [
+@kindex [ (Summary)
+\e$BA4$F$N%9%l%C%I$r3+$-$^$9!#\e(B
+@findex wl-thread-open-all
+(@code{wl-thread-open-all})
+
+@item ]
+@kindex ] (Summary)
+\e$BA4$F$N%9%l%C%I$rJD$8$^$9!#\e(B
+@findex wl-thread-close-all
+(@code{wl-thread-close-all})
+
+@item -
+@itemx M-@key{RET}
+@kindex - (Summary)
+@kindex M-@key{RET} (Summary)
+@findex wl-summary-prev-line-content
+\e$B%+!<%=%k9T$N%a%C%;!<%8$,I=<(Cf$G$"$l$P%a%C%;!<%8$r0l9T2<$K%9%/%m!<%k$7$^$9!#\e(B
+\e$BI=<(Cf$G$J$1$l$P!"I=<($7$^$9!#\e(B
+(@code{wl-summary-prev-line-content})
+
+@item g
+@kindex g (Summary)
+@findex wl-summary-goto-folder
+\e$B0c$&%U%)%k%@$K0\F0$7$^$9!#\e(B
+(@code{wl-summary-goto-folder})
+
+@item c
+@kindex c (Summary)
+\e$BA4$F$N%a%C%;!<%8$rFI$s$@$3$H$K$7$^$9!#\e(B
+@findex wl-summary-mark-as-read-all
+(@code{wl-summary-mark-as-read-all})
+
+@item a
+@kindex a (Summary)
+@findex wl-summary-reply
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$X$NJV;vMQ$N%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-reply})
+
+@item A
+@kindex A (Summary)
+@findex wl-summary-reply-with-citation
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$X$NJV;vMQ$N%I%i%U%H$rK\J8$r0zMQ$7$FMQ0U$7$^$9!#\e(B
+(@code{wl-summary-reply-with-citation})
+
+@item C
+@kindex C (Summary)
+@findex wl-summary-cancel-message
+\e$B8=:_$N%+!<%=%k$,$"$k9T$N%a%C%;!<%8$,<+J,$,=P$7$?%K%e!<%95-;v$N>l9g!"$=$NEj9F$r%-%c%s%;%k$7$^$9!#\e(B
+(@code{wl-summary-cancel-message})
+
+@item E
+@kindex E (Summary)
+@findex wl-summary-reedit
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$NFbMF$r$b$D%I%i%U%H$rMQ0U$7$^$9!#\e(B
+\e$B$b$7!"\e(Bprefix argument \e$B$D$-$G<B9T$9$l$P\e(B Supersedes \e$B%a%C%;!<%8$r:n@.$7$^$9!#\e(B
+\e$B$?$@$7!"\e(BNNTP \e$B%U%)%k%@$G$+$D<+J,$,Ej9F$7$?%a%C%;!<%8$K8B$j$^$9!#\e(B
+(@code{wl-summary-reedit})
+
+@item M-e
+@kindex M-e (Summary)
+@findex wl-summary-resend-bounced-mail
+\e$B%+!<%=%k9T$N%a%C%;!<%8$,!"<+J,$N$H$3$m$KJV$C$F$-$?%(%i!<%a%C%;!<%8$J$i$P!"\e(B
+\e$B$b$&0l2sAw$k$?$a$N%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-resend-bounced-mail})
+
+@item f
+@kindex f (Summary)
+@findex wl-summary-forward
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$rB>$N?M$KE>Aw$9$k%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-forward})
+
+@item $
+@kindex $ (Summary)
+@findex wl-summary-mark-as-important
+@samp{$} \e$B%^!<%/$r$D$1$^$9!#$9$G$K\e(B @samp{$} \e$B%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-summary-mark-as-important})
+
+@item y
+@itemx e
+@kindex y (Summary)
+@kindex e (Summary)
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$rJ]B8$7$^$9!#\e(B
+@findex wl-summary-save
+(@code{wl-summary-save})
+
+@item n
+@kindex n (Summary)
+@findex wl-summary-next
+\e$B0l$D2<$N%a%C%;!<%8$X0\F0$7$^$9!#\e(B
+(@code{wl-summary-next})
+
+@item p
+@kindex p (Summary)
+@findex wl-summary-prev
+\e$B0l$D>e$N%a%C%;!<%8$X0\F0$7$^$9!#\e(B
+(@code{wl-summary-prev})
+
+@item N
+@kindex N (Summary)
+@findex wl-summary-down
+\e$B2<J}8~$K$"$kL$FI$b$7$/$O\e(B @samp{$}\e$B%^!<%/$D$-$N%a%C%;!<%8$X0\F0$7$^$9!#\e(B
+(@code{wl-summary-down})
+
+@item P
+@kindex P (Summary)
+@findex wl-summary-up
+\e$B>eJ}8~$K$"$kL$FI$b$7$/$O\e(B @samp{$}\e$B%^!<%/$D$-$N%a%C%;!<%8$X0\F0$7$^$9!#\e(B
+(@code{wl-summary-up})
+
+@item w
+@kindex w (Summary)
+@findex wl-draft
+\e$B?75,%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-draft})
+
+@item W
+@kindex W (Summary)
+@findex wl-draft-write-current-newsgroup
+\e$B8=:_$N%5%^%j$,%K%e!<%9%0%k!<%W$N>l9g!"\e(BNewsgroups:\e$B%U%#!<%k%I$rJd$C$F\e(B
+\e$B%I%i%U%H$rMQ0U$7$^$9!#\e(B
+(@code{wl-draft-write-current-newsgroup})
+
+@item H
+@kindex H (Summary)
+@findex wl-summary-redisplay-all-header
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$r!"$9$Y$F$N%X%C%@>pJs$H$H$b$KI=<($7$^$9!#\e(B
+(@code{wl-summary-redisplay-all-header})
+
+@item M
+@kindex M (Summary)
+@findex wl-summary-redisplay-no-mime
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$r!"\e(BMIME \e$B2r@O$9$k$3$H$J$/I=<($7$^$9!#\e(B
+(@code{wl-summary-redisplay-no-mime})
+
+@item B
+@kindex B (Summary)
+@findex wl-summary-burst
+\e$B8=:_%+!<%=%k$,$"$k9T$N%a%C%;!<%8$,\e(B
+MIME \e$B$G%+%W%;%k2=$5$l$?J#?t$N%a%C%;!<%84^$`>l9g!"\e(B
+\e$B$=$l$i$r8=:_$N%U%)%k%@$K$[$I$-$^$9\e(B(\e$BL$<BAu\e(B)\e$B!#\e(B
+(@code{wl-summary-burst})
+
+@item @@
+@kindex @@ (Summary)
+@findex wl-summary-edit-petname
+\e$B%5%^%j9T$N%a!<%k$N\e(BFrom(\e$BH/?.<T\e(B)\e$B$r\e(B @file{~/.addresses} \e$B$K%$%s%?%i%/%F%#%V$KDI2C$7$^$9!#\e(B
+\e$B$9$G$KEPO?$5$l$F$$$k>l9g$OJQ99\e(B/\e$B:o=|$b$G$-$^$9!#\e(B
+prefix argument \e$B$D$-$G<B9T$9$k$H!"G$0U$NF~NO%"%I%l%9$rEPO?\e(B/\e$BJQ99\e(B/\e$B:o=|$G$-$^$9!#\e(B
+(@code{wl-summary-edit-petname})
+
+@item Z
+@kindex Z (Summary)
+@findex wl-status-update
+@file{~/.addresses} \e$BEy$N>uBV$r:G?7$N$b$N$K99?7$7$^$9!#\e(B
+(@code{wl-status-update})
+
+@item |
+@kindex | (Summary)
+@findex wl-summary-pipe-message
+\e$B8=:_$N%a%C%;!<%8$NFbMF$rB>$N%W%m%;%9$K%Q%$%W7PM3$G0z$-EO$7$^$9!#\e(B
+(@code{wl-summary-pipe-message})
+
+@item #
+@kindex # (Summary)
+@findex wl-summary-print-message
+\e$B8=:_$N%a%C%;!<%8$NFbMF$r0u:~$7$^$9!#\e(B
+Emacs20 \e$B!A\e(B \e$B$G$O\e(B ps-print \e$B$r;H$$$^$9!#\e(B
+\e$BGr9u%W%j%s%?$G$O!"\e(B@code{wl-ps-print-buffer-func} \e$B$r\e(B
+'ps-print-buffer \e$B$K@_Dj$7$?$[$&$,$h$$$+$b$7$l$^$;$s!#\e(B
+(@code{wl-summary-print-message})
+
+@item q
+@kindex q (Summary)
+@findex wl-summary-exit
+\e$B8=:_$N%U%)%k%@$rC&=P$7$^$9!#\e(B
+(@code{wl-summary-exit})
+
+@item j
+@kindex j (Summary)
+@findex wl-summary-jump-to-current-message
+\e$B8=:_I=<(Cf$N%a%C%;!<%8$N%P%C%U%!$K0\F0$7$^$9!#\e(B
+(@code{wl-summary-jump-to-current-message})
+
+@item J
+@kindex J (Summary)
+\e$B$[$+$N%a%C%;!<%8$K%8%c%s%W$7$^$9!#\e(B
+@findex wl-summary-jump-to-msg
+(@code{wl-summary-jump-to-msg})
+
+@item I
+@kindex I (Summary)
+\e$B%5%^%j$NI=<($r99?7$7$?$"$H!"\e(B
+@code{wl-summary-incorporate-marks} \e$B$K4^$^$l$k%^!<%/$r;}$D%a%C%;!<%8$r\e(B
+\e$B%W%j%U%'%C%A$7$^$9!#\e(B
+@findex wl-summary-incorporate
+(@code{wl-summary-incorporate})
+
+@item M-j
+@kindex M-j (Summary)
+@findex wl-summary-jump-to-msg-by-message-id
+\e$BF~NO$7$?%a%C%;!<%8\e(BID \e$B$r$b$D%a%C%;!<%8$N9T$K%8%c%s%W$7$^$9!#\e(B
+@code{elmo-use-database} \e$B$,\e(B non-nil\e$B$J$i!"8=:_$N%5%^%j0J30$+$i$b\e(B
+\e$B8uJd$r8!:w$7$^$9!#\e(B
+(@code{wl-summary-jump-to-msg-by-message-id})
+
+@item ^
+@kindex ^ (Summary)
+\e$B8=:_$N%a%C%;!<%8$N?F%a%C%;!<%8$K0\F0$7$^$9!#\e(B
+@findex wl-summary-jump-to-parent-message
+(@code{wl-summary-jump-to-parent-message})
+
+@item !
+@kindex ! (Summary)
+@findex wl-summary-mark-as-unread
+\e$B%+!<%=%k$,$"$k9T$N%a%C%;!<%8$rFI$^$J$+$C$?$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-mark-as-unread})
+
+@item s
+@kindex s (Summary)
+@findex wl-summary-sync
+\e$B%a%C%;!<%8$N0lMwI=<($N99?7%l%s%8\e(B(all, update, rescan, first, last)\e$B$NF~NO$r<u$1IU$1$?$N$A!"$=$l$K$b$H$E$$$F%a%C%;!<%8$N0lMwI=<($r99?7$7$^$9!#\e(B
+
+@example
+all            ...\e$B$9$Y$F99?7\e(B
+update         ...\e$B8=:_$NI=<($r99?7\e(B
+rescan         ...\e$B8=:_$N\e(B msgdb \e$B$NFbMF$r:FI=<(\e(B
+rescan-noscore ...\e$B8=:_$N\e(B msgdb \e$B$NFbMF$r:FI=<(\e(B(\e$B%9%3%"$J$7\e(B)
+first, last    ...\e$B%U%#%k%?%U%)%k%@$K0\F0\e(B
+@end example
+
+@noindent
+(@code{wl-summary-sync})
+
+@item S
+@kindex S (Summary)
+@findex wl-summary-sort
+\e$B%5%^%j$NI=<(=g=x$rJB$SJQ$($^$9!#\e(B
+Date(\e$BF|IU\e(B) From(\e$BH/?.<T\e(B) Number(\e$B%a%C%;!<%8HV9f\e(B) Subject(\e$B%5%V%8%'%/%H\e(B) \e$B$N$$$:$l$+$r85$KJB$SJQ$($^$9!#\e(B
+(@code{wl-summary-sort})
+
+@item T
+@kindex T (Summary)
+@findex wl-summary-toggle-thread
+\e$B%9%l%C%II=<($r%H%0%k$7$^$9!#\e(B
+(@code{wl-summary-toggle-thread})
+
+@item l
+@kindex l (Summary)
+@findex wl-summary-toggle-disp-folder
+\e$B%U%)%k%@%b!<%I$N%P%C%U%!$NI=<($r%H%0%k$7$^$9!#\e(B
+(@code{wl-summary-toggle-disp-folder})
+
+@item v
+@kindex v (Summary)
+\e$B%a%C%;!<%8$N%P%C%U%!$NI=<($r%H%0%k$7$^$9!#\e(B
+@findex wl-summary-toggle-disp-msg
+(@code{wl-summary-toggle-disp-msg})
+
+@item V
+@kindex V (Summary)
+\e$BM?$($i$l$?>r7o$r;}$D%a%C%;!<%8$N$_$r$b$D2>A[%U%)%k%@$X0\F0$7$^$9!#\e(B
+prefix argument \e$B$D$-$G<B9T$9$k$H2>A[%U%)%k%@$+$iC&=P$7$^$9!#\e(B
+@findex wl-summary-virtual
+(@code{wl-summary-virtual})
+
+@item @key{TAB}
+@kindex @key{TAB} (Summary)
+@findex wl-summary-goto-last-displayed-msg
+\e$B$5$C$-I=<($7$?%a%C%;!<%8$KHt$S$^$9!#\e(B
+(@code{wl-summary-goto-last-displayed-msg})
+
+@item ?
+@kindex ? (Summary)
+\e$BM?$($i$l$?>r7o$r;}$D%a%C%;!<%8$K$^$H$a=hM}%^!<%/\e(B @samp{*} \e$B$r$D$1$^$9!#\e(B
+@findex wl-summary-pick
+(@code{wl-summary-pick})
+
+@item R
+@kindex R (Summary)
+@findex wl-summary-mark-as-read
+\e$B%+!<%=%k9T$N%a%C%;!<%8$rFI$s$@$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-mark-as-read})
+
+@item i
+@kindex i (Summary)
+\e$B%+!<%=%k9T$N%a%C%;!<%8$r%W%j%U%'%C%A$7$^$9!#\e(B
+@findex wl-summary-prefetch
+(@code{wl-summary-prefetch})
+
+@item x
+@kindex x (Summary)
+\e$B$9$Y$F$N\e(B @samp{D}, @samp{o}, @samp{O} \e$B%^!<%/$r<B9T$7$^$9!#\e(B
+@findex wl-summary-exec
+(@code{wl-summary-exec})
+
+@item *
+@kindex * (Summary)
+@findex wl-summary-target-mark-line
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K$^$H$a=hM}MQ%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-line})
+
+@item o
+@kindex o (Summary)
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+@findex wl-summary-refile
+(@code{wl-summary-refile})
+
+@item C-o
+@kindex C-o (Summary)
+\e$B<+F0%j%U%!%$%k$r<B9T$7$^$9!#\e(B
+@findex wl-summary-auto-refile
+(@code{wl-summary-auto-refile})
+
+@item O
+@kindex O (Summary)
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K%3%T!<%^!<%/$r$D$1$^$9!#\e(B
+@findex wl-summary-copy
+(@code{wl-summary-copy})
+
+@item M-o
+@kindex M-o (Summary)
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K!"D>A0$K%j%U%!%$%k$7$?%U%)%k%@$HF1$8%U%)%k%@08$K!"\e(B
+\e$B%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+@findex wl-summary-refile-prev-destination
+(@code{wl-summary-refile-prev-destination})
+
+@item d
+@kindex d (Summary)
+@findex wl-summary-delete
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K:o=|%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-delete})
+
+@item u
+@kindex u (Summary)
+@findex wl-summary-unmark
+\e$B%+!<%=%k9T$N%a%C%;!<%8$K%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-summary-unmark})
+
+@item U
+@kindex U (Summary)
+\e$B;XDj$7$?%^!<%/$r$9$Y$F:o=|$7$^$9!#\e(B
+@findex wl-summary-unmark-all
+(@code{wl-summary-unmark-all})
+
+@item r R
+@kindex r R (Summary)
+@findex wl-summary-mark-as-read-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$rA4$FFI$s$@$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-mark-as-read-region})
+
+@item r $
+@kindex r $ (Summary)
+@findex wl-summary-mark-as-important-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8A4$F$K\e(B @samp{$} \e$B%^!<%/$r$D$1$^$9!#\e(B
+\e$B$9$G$K\e(B @samp{$} \e$B%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-summary-mark-as-important-region})
+
+@item r !
+@kindex r ! (Summary)
+@findex wl-summary-mark-as-unread-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$rA4$FFI$^$J$+$C$?$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-mark-as-unread-region})
+
+@item r i
+@kindex r i (Summary)
+@findex wl-summary-prefetch-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$rA4$F%W%j%U%'%C%A$7$^$9!#\e(B
+(@code{wl-summary-prefetch-region})
+
+@item r x
+@kindex r x (Summary)
+@findex wl-summary-exec-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K$D$$$?\e(B @samp{D}, @samp{o}, @samp{O} \e$B%^!<%/$r<B9T$7$^$9!#\e(B
+(@code{wl-summary-exec-region})
+
+@item r *
+@kindex r * (Summary)
+@findex wl-summary-target-mark-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K$^$H$a=hM}MQ%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-region})
+
+@item r o
+@kindex r o (Summary)
+@findex wl-summary-refile-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-refile-region})
+
+@item r O
+@kindex r O (Summary)
+@findex wl-summary-copy-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K%3%T!<%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-copy-region})
+
+@item r d
+@kindex r d (Summary)
+@findex wl-summary-delete-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K:o=|%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-delete-region})
+
+@item r u
+@kindex r u (Summary)
+@findex wl-summary-unmark-region
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$K%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-summary-unmark-region})
+
+@item r y
+@kindex r y (Summary)
+\e$B;XDj%j!<%8%g%s$K$"$k%a%C%;!<%8$rJ]B8$7$^$9!#\e(B
+\e$B8=:_%+!<%=%k$,$"$k9T$N\e(B
+@findex wl-summary-save-region
+(@code{wl-summary-save-region})
+
+@item t R
+@kindex t R (Summary)
+@findex wl-thread-mark-as-read
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$rFI$s$@$3$H$K$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$rFI$s$@$3$H$K$7$^$9!#\e(B
+(@code{wl-thread-mark-as-read})
+
+@item t $
+@kindex t $ (Summary)
+@findex wl-thread-mark-as-important
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K\e(B @samp{$} \e$B%^!<%/$r$D$1$^$9!#\e(B
+\e$B$9$G$K\e(B @samp{$} \e$B%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%I$K\e(B
+@samp{$} \e$B%^!<%/$r$D$1$k$+:o=|$9$k$+$7$^$9!#\e(B
+(@code{wl-thread-mark-as-important})
+
+@item t !
+@kindex t ! (Summary)
+@findex wl-thread-mark-as-unread
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$rFI$^$J$+$C$?$3$H$K$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$rFI$^$J$+$C$?$3$H$K$7$^$9!#\e(B
+(@code{wl-thread-mark-as-unread})
+
+@item t i
+@kindex t i (Summary)
+@findex wl-thread-prefetch
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$r%W%j%U%'%C%A$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$r%W%j%U%'%C%A$7$^$9!#\e(B
+(@code{wl-thread-prefetch})
+
+@item t x
+@kindex t x (Summary)
+@findex wl-thread-exec
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K$D$$$?\e(B @samp{D}, @samp{o}, @samp{O} \e$B%^!<%/$r<B9T$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$K$D$$$?\e(B @samp{D}, @samp{o}, @samp{O} \e$B%^!<%/$r<B9T$7$^$9!#\e(B
+(@code{wl-thread-exec})
+
+@item t *
+@kindex t * (Summary)
+@findex wl-thread-target-mark
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K$^$H$a=hM}MQ%^!<%/$r$D$1$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$K$^$H$a=hM}MQ%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-thread-target-mark})
+
+@item t o
+@kindex t o (Summary)
+@findex wl-thread-refile
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$K%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-thread-refile})
+
+@item t O
+@kindex t O (Summary)
+@findex wl-thread-copy
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K%3%T!<%^!<%/$r$D$1$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$K%3%T!<%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-thread-copy})
+
+@item t d
+@kindex t d (Summary)
+@findex wl-thread-delete
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$K:o=|%^!<%/$r$D$1$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$K:o=|%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-thread-delete})
+
+@item t u
+@kindex t u (Summary)
+@findex wl-thread-unmark
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$N%a%C%;!<%8$K%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4BN$N%a%C%;!<%8$K%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-thread-unmark})
+
+@item t y
+@kindex t y (Summary)
+@findex wl-thread-save
+\e$B%+!<%=%k9T$,$"$k%a%C%;!<%8$r@hF,$H$9$k%9%l%C%I$rJ]B8$7$^$9!#\e(B
+prefix argument \e$B$D$-$J$i$P%+!<%=%k9T$,$"$k%a%C%;!<%8$r4^$`%9%l%C%IA4$F$rJ]B8$7$^$9!#\e(B
+(@code{wl-thread-save})
+
+@item m i
+@kindex m i (Summary)
+@findex wl-summary-target-mark-prefetch
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$rA4$F%W%j%U%'%C%A$7$^$9!#\e(B
+(@code{wl-summary-target-mark-prefetch})
+
+@item m R
+@kindex m R (Summary)
+@findex wl-summary-target-mark-mark-as-read
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$rFI$s$@$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-target-mark-mark-as-read})
+
+@item m $
+@kindex m $ (Summary)
+@findex wl-summary-target-mark-mark-as-important
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$K\e(B @samp{$} \e$B%^!<%/$r$D$1$^$9!#\e(B
+\e$B$9$G$K\e(B @samp{$} \e$B%^!<%/$,$"$l$P:o=|$7$^$9!#\e(B
+(@code{wl-summary-target-mark-mark-as-important})
+
+@item m !
+@kindex m ! (Summary)
+@findex wl-summary-target-mark-mark-as-unread
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$rFI$^$J$+$C$?$3$H$K$7$^$9!#\e(B
+(@code{wl-summary-target-mark-mark-as-unread})
+
+@item m o
+@kindex m o (Summary)
+@findex wl-summary-target-mark-refile
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$K%j%U%!%$%k%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-refile})
+
+@item m O
+@kindex m O (Summary)
+@findex wl-summary-target-mark-copy
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$K%3%T!<%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-copy})
+
+@item m d
+@kindex m d (Summary)
+@findex wl-summary-target-mark-delete
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$K:o=|%^!<%/$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-delete})
+
+@item m y
+@kindex m y (Summary)
+@findex wl-summary-target-mark-save
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$rJ]B8$7$^$9!#\e(B
+(@code{wl-summary-target-mark-save})
+
+@item m u
+@kindex m u (Summary)
+\e$BA4$F$N0l;~E*%^!<%/$r>C$7$^$9!#\e(B
+(@code{wl-summary-delete-all-temp-marks})
+@findex wl-summary-delete-all-temp-marks
+
+@item m a
+@kindex m a (Summary)
+\e$BA4$F$K$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$rIU$1$^$9!#\e(B
+(@code{wl-summary-target-mark-all})
+@findex wl-summary-target-mark-all
+
+@item m t
+@kindex m t (Summary)
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$r8=:_$N%9%l%C%I$K$D$1$^$9!#\e(B
+@findex wl-summary-target-mark-thread
+(@code{wl-summary-target-mark-thread})
+
+@item m r
+@kindex m r (Summary)
+@findex wl-summary-target-mark-region
+\e$B;XDj$5$l$?%j!<%8%g%s$K$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$r$D$1$^$9!#\e(B
+(@code{wl-summary-target-mark-region})
+
+@item m A
+@kindex m A (Summary)
+@findex wl-summary-target-mark-reply-with-citation
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$r0zMQ$7$FJV;v$r=q$/%I%i%U%H\e(B
+\e$B$rMQ0U$7$^$9!#\e(B
+(@code{wl-summary-target-mark-reply-with-citation})
+
+@item m f
+@kindex m f (Summary)
+@findex wl-summary-target-mark-forward
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$r%U%)%o!<%I$9$k%I%i%U%H$r\e(B
+\e$BMQ0U$7$^$9!#\e(B
+(@code{wl-summary-target-mark-forward})
+
+@item m U
+@kindex m U (Summary)
+@findex wl-summary-target-mark-uudecode
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$r$^$H$a$F\e(B uudecode \e$B$7$^$9!#\e(B
+(@code{wl-summary-target-mark-uudecode})
+
+@item m ?
+@kindex m ? (Summary)
+@findex wl-summary-target-mark-pick
+\e$B$^$H$a=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%8$N$J$+$G!"\e(B
+\e$B>r7o$K%^%C%A$9$k%a%C%;!<%8$N\e(B @samp{*} \e$B%^!<%/$N$_$r;D$7$^$9!#\e(B
+(@code{wl-summary-target-mark-pick})
+
+@item M-t
+@kindex M-t (Summary)
+@findex wl-toggle-plugged
+Wanderlust \e$B$N%*%U%i%$%s%b!<%I\e(B/\e$B%*%s%i%$%s%b!<%I$r%H%0%k$7$^$9!#\e(B
+(@code{wl-toggle-plugged})
+
+@item C-t
+@kindex C-t (Summary)
+Wanderlust \e$B$N%5!<%P!&%]!<%HJL$N%*%U%i%$%s\e(B/\e$B%*%s%i%$%s$rJQ99$7$^$9!#\e(B
+(@code{wl-plugged-change})
+
+@item C-c C-o
+@kindex C-c C-o (Summary)
+@findex wl-jump-to-draft-buffer
+\e$B%I%i%U%H%P%C%U%!$,$"$l$P0\F0$7$^$9!#\e(B \e$BJ#?t$N%I%i%U%H%P%C%U%!$,B8:_$9$k>l9g$O!"\e(B
+\e$B<!!9$H@Z$jBX$($F$$$-$^$9!#$^$?!"\e(Bprefix argument \e$B$r$D$1$k$3$H$K$h$j!"\e(B
+\e$B%P%C%U%!$,B8:_$7$F$$$J$$>l9g$O!"%I%i%U%H%U%)%k%@$+$i%U%!%$%k$r\e(B(\e$BB8:_$9$l$P\e(B)
+\e$BFI$_9~$_$^$9!#\e(B
+(@code{wl-jump-to-draft-buffer})
+@end table
+
+@section \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-summary-move-order
+@vindex wl-summary-move-order
+\e$B=i4|@_Dj$O\e(B 'unread\e$B!#\e(B
+\e$B%a%C%;!<%8$rFI$_?J$a$k$H$-$K!"2?$rM%@h$9$k$+$r;XDj$7$^$9!#\e(B
+\e$B?75,%a%C%;!<%8$rM%@h$7$?$$$H$-$O\e(B 'new \e$B$r@_Dj$7$^$9!#\e(B
+\e$BL$FI$r%a%C%;!<%8$rM%@h$7$?$$$H$-$O\e(B 'unread \e$B$r@_Dj$7$^$9!#\e(B
+nil \e$B$J$iC1=c$K<!$N%a%C%;!<%8$K?J$_$^$9!#\e(B
+
+@item wl-auto-select-first
+@vindex wl-auto-select-first
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i%U%)%k%@$K0\F0$7$?;~$K:G=i$N%a%C%;!<%8$r<+F0E*$KI=<($7$^$9!#\e(B
+
+@item wl-auto-select-next
+@vindex wl-auto-select-next
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"$"$k%U%)%k%@$N%5%^%j$+$i<!$N%U%)%k%@$N%5%^%j$X<+F0E*$K0\F0$7$^$9!#\e(B
+\e$BCM$,\e(B 'unread \e$B$J$i!"3NG'$r5a$a$FL$FI%a%C%;!<%8$,$J$$%U%)%k%@$K0\F0$7$^$9!#\e(B
+\e$BCM$,\e(B 'skip-no-unread \e$B$J$i!"L$FI%a%C%;!<%8$,$J$$%U%)%k%@$r<+F0E*$KHt$P$7$^$9!#\e(B
+
+@item wl-thread-insert-opened
+@vindex wl-thread-insert-opened
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i:G=i$+$i\e(B thread \e$B$,3+$+$l$?>uBV$G%5%^%j$KI=<($5$l$^$9!#\e(B
+
+@item wl-thread-open-reading-thread
+@vindex wl-thread-open-reading-thread
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"JD$8$?>uBV$N\e(B thread \e$B$X0\F0$7$?;~$K<+F0E*$K\e(B thread \e$B$r3+$-$^$9!#\e(B
+
+@item wl-summary-exit-next-move
+@vindex wl-summary-exit-next-move
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"%5%^%j$r=*N;$9$k$H$-$K<!$N%U%)%k%@$K0\F0$7$^$9!#\e(B
+
+@item wl-folder-move-cur-folder
+@vindex wl-folder-move-cur-folder
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i%5%^%j$GB>$N%U%)%k%@$K0\F0$9$k$H%U%)%k%@%b!<%I$G$N%+!<%=%k0LCV$b9g$o$;$F0\F0$7$^$9!#\e(B
+
+@item wl-summary-weekday-name-lang
+@vindex  wl-summary-weekday-name-lang
+\e$B=i4|@_Dj$O\e(B "ja"\e$B!#\e(B
+\e$B%5%^%j$NMKF|I=<($N8@8l$r;XDj$7$^$9!#\e(B
+"en" \e$B$J$i1Q8l!"\e(B"fr" \e$B$J$i%U%i%s%98l!"\e(B"de" \e$B$J$i%I%$%D8l$H$J$j$^$9!#\e(B
+
+@item wl-summary-fix-timezone
+@vindex  wl-summary-fix-timezone
+\e$B=i4|@_Dj$O\e(B "JST"\e$B!#\e(B
+\e$B%5%^%j$NF|;~I=<($r;XDj$7$?%?%$%`%>!<%s$KD>$7$^$9!#\e(B
+nil \e$B$J$i\e(B GMT \e$B$KD>$7$^$9!#\e(B
+
+@item wl-use-petname
+@vindex  wl-use-petname
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i%5%^%j$N\e(B From \e$BItJ,$K$"$@L>$rI=<($7$^$9!#\e(B
+
+@item wl-break-pages
+@vindex  wl-break-pages
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(B@samp{^L} \e$B$G2~%Z!<%8$7$F%a%C%;!<%8$rI=<($7$^$9!#\e(B
+
+@item wl-message-window-size
+@vindex  wl-message-window-size
+\e$B=i4|@_Dj$O\e(B '(1 . 4)\e$B!#\e(B
+\e$B%5%^%j$rI=<($9$k%&%#%s%I%&$H%a%C%;!<%8K\BN$rI=<($9$k%&%#%s%I%&$NHf$r\e(B cons \e$B$G;XDj$7$^$9!#\e(Bcar:cdr \e$B$,\e(B \e$B%5%^%j\e(B:\e$B%a%C%;!<%8\e(B \e$B$G$9!#\e(B
+
+@item wl-summary-recenter
+@vindex  wl-summary-recenter
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i$PI=<($7$?$H$-$KI=<(Cf$N%a%C%;!<%8$N%5%^%j9T$r\e(B
+\e$B%&%#%s%I%&$NCf1{IU6a$K0\F0$5$;$^$9!#\e(B
+
+@item wl-summary-indent-length-limit
+@vindex  wl-summary-indent-length-limit
+\e$B=i4|@_Dj$O\e(B 46\e$B!#\e(B
+\e$B@_Dj$5$l$?CM0J>e%5%^%j$r\e(B indent \e$B$7$^$;$s!#\e(B
+nil \e$B$J$i%5%^%j$N\e(B indent \e$B$rL5@)8B$K$7$^$9!#\e(B
+
+@item wl-summary-no-from-message
+@vindex  wl-summary-no-from-message
+\e$B=i4|@_Dj$O\e(B "nobody@@nowhere?"\e$B!#\e(B
+\e$B%a%C%;!<%8$K\e(B From: \e$B$,L5$+$C$?>l9g$K%5%^%j$KI=<($9$kJ8;zNs$G$9!#\e(B
+
+@item wl-summary-no-subject-message
+@vindex  wl-summary-no-subject-message
+\e$B=i4|@_Dj$O\e(B "(WL:No Subject in original.)"\e$B!#\e(B
+\e$B%a%C%;!<%8$K\e(B Subject: \e$B$,L5$+$C$?>l9g$K%5%^%j$KI=<($9$kJ8;zNs$G$9!#\e(B
+
+@item wl-summary-width
+@vindex  wl-summary-width
+\e$B=i4|@_Dj$O\e(B 80\e$B!#\e(B
+\e$B%5%^%j$NI=<(I}$r@_Dj$5$l$?CM$K@Z$j5M$a$^$9!#\e(B
+nil \e$B$J$iI=<(I}$r@Z$j5M$a$^$;$s!#\e(B
+
+@item wl-use-folder-petname
+@vindex  wl-use-folder-petname
+\e$B=i4|@_Dj$O\e(B '(modeline)\e$B!#\e(B
+petname \e$B$r;HMQ$9$k>l=j\e(B(symbol)\e$B$N%j%9%H$r;XDj$7$^$9!#\e(B
+\e$B;XDj$G$-$k\e(B symbol \e$B$O<!$NDL$j$G$9!#\e(B
+
+@table @code
+@item modeline
+\e$B%5%^%j$N%b!<%I%i%$%s$r\e(B petname \e$B$GI=<($7$^$9!#\e(B
+@item ask-folder
+@code{wl-auto-select-next} \e$B$,\e(B non-nil \e$B$N$H$-!"\e(B
+\e$B0\F0@h%U%)%k%@$r\e(B petname \e$B$GI=<($7$^$9!#\e(B
+@item read-folder
+@code{wl-summary-read-folder} \e$B$K$*$1$k%U%)%k%@F~NO$N:]!"\e(B
+petname \e$B$G$bJd40$,$G$-$^$9!#\e(B
+@end table
+
+@item wl-summary-move-direction-toggle
+@vindex  wl-summary-move-direction-toggle
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i:G8e$K<B9T$5$l$?\e(B @kbd{p}, @kbd{P}, @kbd{n}, @kbd{N} \e$B$N7k2L$G!"\e(B
+\e$B<!$N%a%C%;!<%8$,>e$+2<$+$r@Z$jBX$($k!#\e(B
+\e$BFI$s$G$$$kJ}8~$r0U<1$7$?$$$H$-$O\e(B t \e$B$K$9$k$H$h$$$G$7$g$&!#\e(B
+
+@item wl-from-width
+@vindex wl-from-width
+\e$B=i4|@_Dj$O\e(B 17\e$B!#\e(B
+\e$B%5%^%j$N\e(B From \e$BItJ,$NI=<(I}$G$9!#\e(B
+
+@item wl-summary-divide-thread-when-subject-changed
+@vindex wl-summary-divide-thread-when-subject-changed
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i%5%V%8%'%/%H$,JQ$o$C$?$H$-$K%9%l%C%I$r@Z$j$^$9!#\e(B
+
+@item wl-summary-search-via-nntp
+@vindex wl-summary-search-via-nntp
+\e$B=i4|@_Dj$O\e(B 'confirm\e$B!#\e(B
+Non-nil \e$B$J$i\e(B @code{wl-summary-jump-to-msg-by-message-id} \e$B$G!"\e(B
+\e$B%a%C%;!<%8$r8+$D$1$k$3$H$,$G$-$J$+$C$?$H$-$K!"\e(B
+@code{wl-summary-jump-to-msg-by-message-id-via-nntp} \e$B$r8F$S!"\e(B
+@code{elmo-default-nntp-server} \e$B$G;XDj$5$l$?%5!<%P$+$i8!:w$7$^$9!#\e(B
+\e$B$3$N$H$-\e(B @code{elmo-default-nntp-user}, @code{elmo-default-nntp-port}, 
+@code{elmo-default-nntp-ssl} \e$B$G;XDj$7$?>r7o$G%5!<%P$H@\B3$7$^$9!#\e(B
+'confirm \e$B$J$i\e(B @code{elmo-default-nntp-*} \e$B$G;XDj$5$l$?%5!<%P$+$i8!:w$9$k$+!"\e(B
+\e$B%5!<%P$r;XDj$9$k$+$r3NG'$7$^$9!#\e(B
+\e$B$3$N>l9g!"%5!<%P$N%[%9%HL>!"$b$7$/$O\e(B @samp{-:username@@servername:119!}
+\e$B$N$h$&$K\e(B NTTP\e$B%U%)%k%@7A<0$G$N;XDj$,2DG=$G$9!#\e(B
+
+@item wl-summary-keep-cursor-command
+@vindex wl-summary-keep-cursor-command
+\e$B=i4|@_Dj$O\e(B '(wl-summary-goto-folder wl-summary-goto-last-visited-folder)\e$B!#\e(B
+\e$B$9$G$KB8:_$9$k%5%^%j$X0\F0$7$?$H$-$K99?7$;$:!"%+!<%=%k0LCV$rJ]B8$9$k\e(B
+\e$B%3%^%s%I$N%j%9%H$G$9!#\e(B
+
+@item wl-summary-update-confirm-threshold
+@vindex wl-summary-update-confirm-threshold
+\e$B=i4|@_Dj$O\e(B 500\e$B!#\e(B
+\e$B$3$NCM$h$j%5%^%j$N99?7?t$,B?$$>l9g!"0lItJ,$@$199?7$9$k$+$I$&$+!"<ALd$7$^$9!#\e(B
+
+@item wl-summary-always-sticky-folder-list
+@vindex wl-summary-always-sticky-folder-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%U%)%k%@L>\e(B(\e$B@55,I=8=\e(B)\e$B$N%j%9%H$r@_Dj$9$k$3$H$K$h$j!"\e(B
+\e$B<+F0E*$K%9%F%#%C%-!<%5%^%j$H$9$k$+$I$&$+$r%U%)%k%@Kh$K;XDj$7$^$9!#\e(B
+
+@item wl-summary-reserve-mark-list
+@vindex wl-summary-reserve-mark-list
+\e$B=i4|@_Dj$O!"\e(B'("o" "O" "D")\e$B!#\e(B
+\e$B$3$N%j%9%H$K$"$k0l;~%^!<%/$O!">C$5$J$$$+$.$j>e=q$-$5$l$^$;$s!#\e(B
+
+@item wl-summary-skip-mark-list
+@vindex wl-summary-skip-mark-list
+\e$B=i4|@_Dj$O!"\e(B'("D")\e$B!#\e(B
+\e$B$3$N%j%9%H$K$"$k0l;~%^!<%/$,IU$$$?%a%C%;!<%8$O!"%+!<%=%k0\F0$G%9%-%C%W\e(B
+\e$B$5$l$^$9!#\e(B
+
+@item wl-fetch-confirm-threshold
+@vindex wl-fetch-confirm-threshold
+\e$B=i4|@_Dj$O\e(B 30000 (bytes)\e$B!#\e(B@code{wl-fetch-confirm-threshold} \e$B$r1[$($k%5%$%:$N\e(B
+\e$B%a%C%;!<%8$rI=<($9$k;~$O!"3NG'$r5a$a$^$9!#\e(Bnil \e$B$K$9$k$H!"3NG'$;$:$KI=<($7$^$9!#\e(B
+
+@item wl-prefetch-threshold
+@vindex wl-prefetch-threshold
+\e$B=i4|@_Dj$O\e(B 30000 (bytes)\e$B!#\e(B@code{wl-prefetch-threshold} \e$B$r1[$($k%5%$%:$N\e(B
+\e$B%a%C%;!<%8$O!"\e(B@code{wl-prefetch-confirm} \e$B$,\e(B non-nil \e$B$N>l9g!"\e(B
+\e$B%W%j%U%'%C%A;~$K3NG'$r5a$a$^$9!#\e(B@code{wl-prefetch-threshold}\e$B$r\e(B nil \e$B$K$9$k$H!"\e(B
+@code{wl-prefetch-confirm} \e$B$NCM$K$+$+$o$i$:%W%j%U%'%C%A$r<B9T$7$^$9!#\e(B
+
+@item wl-prefetch-confirm
+@vindex wl-prefetch-confirm
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(BNon-nil \e$B$J$i$P\e(B @code{wl-prefetch-threshold} \e$B$r1[$($k%5%$%:$N\e(B
+\e$B%a%C%;!<%8$r%W%j%U%'%C%A$7$h$&$H$7$?$H$-$K!"3NG'$r5a$a$^$9!#\e(B
+
+@item wl-cache-fetch-threshold
+@vindex wl-cache-fetch-threshold
+\e$B=i4|@_Dj$O\e(B 30000 (bytes)\e$B!#\e(B@code{wl-fetch-confirm-threshold} \e$B$r1[$($k%5%$%:$N\e(B
+\e$B%a%C%;!<%8$O!"%a%C%;!<%8$N@hFI$_$r<B9T$7$^$;$s!#\e(B
+nil \e$B$K$9$k$H!"$I$s$JBg$-$5$N%a%C%;!<%8$G$b@hFI$_$r<B9T$7$^$9!#\e(B
+
+@item elmo-imap4-use-cache
+@vindex elmo-imap4-use-cache
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(BNon-nil \e$B$J$i!"\e(BIMAP4 \e$B$GFI$s$@%a%C%;!<%8$r%-%c%C%7%e$7$^$9!#\e(B
+
+@item elmo-nntp-use-cache
+@vindex elmo-nntp-use-cache
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(BNon-nil \e$B$J$i!"\e(BNNTP \e$B$GFI$s$@%a%C%;!<%8$r%-%c%C%7%e$7$^$9!#\e(B
+
+@item elmo-pop3-use-cache
+@vindex elmo-pop3-use-cache
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(BNon-nil \e$B$J$i!"\e(BPOP3 \e$B$GFI$s$@%a%C%;!<%8$r%-%c%C%7%e$7$^$9!#\e(B
+@end table
+
+
+@c
+@c  Message
+@c
+@node Message, Draft, Summary, Top
+@chapter \e$B%a%C%;!<%8%P%C%U%!\e(B
+
+\e$B%a%C%;!<%8%P%C%U%!$O\e(B SEMI/tm \e$B$N\e(B MIME-View mode \e$B$G$9!#\e(B
+\e$BA`:n$NJ}K!!"%-!<%P%$%s%I$O$=$l$>$l$N%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#\e(B
+@xref{MIME-View, , ,mime-ui-ja, a MIME user interface for GNU Emacs}.
+
+\e$B%a%C%;!<%8$N@hF,$G\e(B @kbd{p}\e$B!"%a%C%;!<%8$N:G8eHx$G\e(B @kbd{n} \e$B$r2!$9$H!"\e(B
+\e$B%5%^%j%b!<%I$KLa$j$^$9!#\e(B
+\e$B$^$?!"\e(B@kbd{l} \e$B$r2!$9$H!"%5%^%j%b!<%I%P%C%U%!$NI=<($,%H%0%k$5$l$^$9!#\e(B
+
+@section \e$B%-!<%P%$%s%I\e(B
+@cindex Keybind, Message Mode
+@cindex Keybind, Message Buffer
+
+@table @kbd
+@item l
+@kindex l (Message)
+@findex wl-message-toggle-disp-summary
+\e$B%5%^%j%b!<%I%P%C%U%!$rI=<($9$k$+$I$&$+$r%H%0%k$7$^$9!#\e(B
+(@code{wl-message-toggle-disp-summary})
+
+@item Button-2
+@findex wl-message-refer-article-or-url
+@kindex Button-2 (Message)
+\e$B%^%&%9%]%$%s%?$N0LCV$K\e(B Message-ID \e$B$,$"$C$?$H$-$KBP1~$9$k%a%C%;!<%8$,\e(B
+\e$B8+$D$+$l$PI=<($7$^$9!#\e(B
+(@code{wl-message-refer-article-or-url})
+
+@item Button-4 (\e$B%[%$!<%k$D$-%^%&%9$N%[%$!<%k$r>e$X\e(B)
+@kindex Button-4 (Message)
+@findex wl-message-wheel-down
+\e$B%a%C%;!<%8$r>e$K%9%/%m!<%k$7$^$9!#%a%C%;!<%8$NKvHx$^$GE~C#$9$k$H!"\e(B
+\e$B<!$N%a%C%;!<%8$K0\F0$7$^$9!#\e(B
+(@code{wl-message-wheel-down})
+
+@item Button-5 (\e$B%[%$!<%k$D$-%^%&%9$N%[%$!<%k$r2<$X\e(B)
+@kindex Button-5 (Message)
+@findex wl-message-wheel-up
+\e$B%a%C%;!<%8$r>e$K%9%/%m!<%k$7$^$9!#%a%C%;!<%8$N@hF,$^$GE~C#$9$k$H!"\e(B
+\e$BA0$N%a%C%;!<%8$K0\F0$7$^$9!#\e(B
+(@code{wl-message-wheel-up})
+@end table
+
+@section \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-message-window-size
+@vindex wl-message-window-size
+\e$B=i4|@_Dj$O\e(B @code{'(1 . 4)}\e$B!#\e(Bcons \e$B%;%k$G!"\e(Bcar \e$BCM\e(B: cdr \e$BCM$,\e(B
+\e$B%5%^%j$N%&%#%s%I%&I}!'%a%C%;!<%8$N%&%#%s%I%&I}$H$J$j$^$9!#\e(B
+@end table
+
+
+@c
+@c  Draft
+@c
+@node Draft, Disconnected Operations, Message, Top
+@chapter \e$B%I%i%U%H%P%C%U%!\e(B
+
+\e$B%5%^%j%b!<%I$G\e(B @kbd{w} \e$B$r2!$9Ey$9$k$3$H$K$h$j?75,%I%i%U%H%P%C%U%!$,\e(B
+\e$BMQ0U$5$l$^$9!#$3$N%P%C%U%!$G%a!<%k!"%K%e!<%95-;v$N\e(B(\e$B?75,\e(B)\e$BJT=8!"Aw?.$r9T$$$^$9!#\e(B
+
+@section \e$B;H$$J}\e(B(TIPS)
+
+\e$B4pK\$O\e(B Emacs \e$BI8=`$N%a!<%k%b!<%I$G$9!#\e(B
+
+@subsection \e$B%"%I%l%9$NJd40\e(B
+
+\e$B=i4|>uBV$G$O\e(B To: \e$B$K%+!<%=%k$,$"$j$^$9!#\e(B
+\e$BAw?.Aj<j$N%"%I%l%9$rF~NO$7$F$/$@$5$$!#\e(B@kbd{@key{TAB}} \e$B$GJd40$7$^$9!#\e(B
+
+\e$B%K%e!<%95-;v$H$7$F=P$7$?$$>l9g$O!"\e(BNewsgroups: \e$B%U%#!<%k%I$r<+J,$G=q$-2C$($F$/$@$5$$!#%U%#!<%k%IL>$O\e(B @kbd{@key{TAB}} \e$B$GJd40$7$^$9!#\e(B
+
+\e$BJT=8Cf$N%I%i%U%H$r%;!<%V$9$k$H!"\e(B@code{wl-draft-folder} \e$B$K@_Dj$5$l$?%I%i%U%H%U%)%k%@$KDI2C$5$l$^$9!#\e(B
+
+FCC: \e$B%U%#!<%k%I$GAw?.$7$?%a%C%;!<%8$N%3%T!<$rJ]B8$7$F$*$/%U%)%k%@$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+
+@subsection \e$B%a%C%;!<%8$NJT=8\e(B
+
+\e$B%^%k%A%Q!<%H$NJT=8$O\e(B SEMI/tm \e$B$N\e(B MIME \e$BJT=8%b!<%I$rMxMQ$7$F$$$^$9!#\e(B
+\e$BJT=8$NJ}K!$O3F%Q%C%1!<%8IUB0$N%I%-%e%a%s%H$r;2>H$7$F$/$@$5$$!#\e(B
+@xref{Mail Methods, , ,mime-ui-ja, a MIME user interface for GNU Emacs}.
+
+@subsection \e$B%a%C%;!<%8$NF0E*$JJQ99\e(B
+@vindex wl-draft-config-alist
+@c @cindex Chage Message
+@c @cindex Message, Chage Dynamic
+
+@code{wl-draft-config-alist} \e$B$r@_Dj$9$k$3$H$G!"\e(B
+\e$B%X%C%@$d$=$NB>$N>pJs$K$h$j!"<+F0E*$KB>$N%X%C%@$dK\J8$rJQ99$9$k$3$H\e(B
+\e$B$,$G$-$^$9!#\e(B
+
+\e$BJQ?t\e(B @code{wl-draft-config-alist} \e$B$K$D$$$F@bL@$7$^$9!#\e(B
+\e$B$3$NJQ?t$N=i4|@_Dj$O\e(B nil\e$B$G$9!#\e(B
+
+\e$BNc$($P0J2<$N$h$&$K@_Dj$9$k$H!"\e(B@code{wl-draft-send-and-exit} \e$B$d\e(B
+@code{wl-draft-send} \e$B$r<B9T$7$?;~$K%X%C%@$,JQ99$5$l$^$9!#\e(B
+@code{wl-interactive-send} \e$B$r\e(B non-nil \e$B$K@_Dj$7$F$*$/$H!"Aw?.A0\e(B
+\e$B$KJQ99E@$,3NG'$G$-$k$N$G0B?4$G$9!#\e(B
+
+@lisp
+(setq wl-draft-config-alist
+      '(((string-match "aaa.ne.jp$" (system-name))
+         ;; @r{\e$B<0$,\e(Bnon-nil\e$B$J$iE,MQ$9$k\e(B}
+         (wl-smtp-posting-server . "mailserver-B")
+         (wl-nntp-posting-server . "newsserver-B")
+         ;; @r{\e$B0l;~E*$JJQ?t$N@_Dj\e(B}
+         )
+        ("^To: .*user@@aaa.bbb.com"
+         ;; @r{\e$B%I%i%U%H%P%C%U%!$N%X%C%@$K%^%C%A$9$l$PE,MQ$9$k\e(B}
+         ("Organization" . (format "Go %s" my-webpage)))
+                           ;; @r{elisp \e$B<0$,=q$1$k\e(B (eval \e$B$7$F$$$k$@$1\e(B)}
+         (top . "  \e$B!{!{$G$9!#\e(B\n")    ;; @r{\e$BK\J8@hF,$XJ8;zNs$rA^F~$7$^$9\e(B}
+         (bottom . "\n\e$B0J>e$G$9!#\e(B\n") ;; @r{\e$BK\J8KvHx$XJ8;zNs$rA^F~$7$^$9\e(B}
+        ))
+@end lisp
+
+@code{wl-draft-config-alist} \e$B$O<!$N7A<0$K$J$C$F$$$^$9!#\e(B
+
+@example
+'(("\e$B%X%C%@$N@55,I=8=\e(B" \e$B$^$?$O\e(B elisp\e$B<0\e(B
+   ("Field" . \e$BCM\e(B(elisp\e$B<0\e(B))
+   (variable . \e$BCM\e(B(elisp\e$B<0\e(B))
+   (\e$B%5%V4X?t\e(B . \e$BCM\e(B(elisp\e$B<0\e(B))
+   \e$B4X?t\e(B
+   @dots{})
+  ("\e$B%X%C%@$N@55,I=8=\e(B" \e$B$^$?$O\e(B elisp\e$B<0\e(B
+   ("Field" . \e$BCM\e(B(elisp\e$B<0\e(B))
+   @dots{}))
+@end example
+
+[\e$B%5%V4X?t\e(B]\e$B$K$O!"%G%U%)%k%H$G0J2<$N\e(B10\e$B8D$,MQ0U$5$l$F$$$^$9!#\e(B
+
+@example
+'header:      \e$B%X%C%@$NKvHx$K;XDj$7$?J8;zNs$rA^F~$7$^$9!#\e(B
+'header-file: \e$B%X%C%@$NKvHx$K;XDj$7$?%U%!%$%k$rA^F~$7$^$9!#\e(B
+'x-face:      \e$B;XDj$7$?%U%!%$%k$NFbMF$r$b$D\e(B "X-Face" \e$B%U%#!<%k%I$r\e(B
+              \e$BA^F~$7$^$9!#\e(B
+'top:         \e$BK\J8$N@hF,$K;XDj$7$?J8;zNs$rA^F~$7$^$9!#\e(B
+'top-file:    \e$BK\J8$N@hF,$K;XDj$7$?%U%!%$%k$rA^F~$7$^$9!#\e(B
+'body:        \e$BK\J8$r;XDj$7$?J8;zNs$KCV$-49$($^$9!#\e(B
+              nil \e$B$r;XDj$9$k$HK\J8$NJ8;zNs$r:o=|$7$^$9!#\e(B
+'body-file:   \e$BK\J8$r;XDj$7$?%U%!%$%k$NFbMF$GCV$-49$($^$9!#\e(B
+'bottom:      \e$BK\J8$NKvHx$K;XDj$7$?J8;zNs$rA^F~$7$^$9!#\e(B
+'bottom-file: \e$BK\J8$NKvHx$K;XDj$7$?%U%!%$%k$rA^F~$7$^$9!#\e(B
+'template:    \e$B;XDj$7$?%F%s%W%l!<%H$rE,MQ$7$^$9!#\e(B
+              (\e$B<!9`\e(B \e$B%F%s%W%l!<%H$NA^F~;2>H\e(B)
+@end example
+
+\e$B$^$?!"$3$l$i$O\e(B @code{wl-draft-config-sub-func-alist} \e$B$KDj5A$5$l$F\e(B
+\e$B$*$j!"JQ99$7$?$j<+J,$G:n$C$?4X?t$rDI2C$9$k$3$H$,$G$-$^$9!#4X\e(B
+\e$B?t$N=q$-J}$O$3$3$G@bL@$9$k$h$jD>@\%3!<%I$r8+$?J}$,J,$+$j$d$9\e(B
+\e$B$$$G$7$g$&$+$i>JN,$7$^$9!#\e(B
+
+\e$B3FMWAG$N\e(B1\e$BHVL\$K$O\e(B "\e$B%X%C%@$N@55,I=8=\e(B" \e$B$+\e(B elisp\e$B<0\e(B \e$B$r;XDj$7$^$9!#\e(Belisp\e$B<0$N\e(B
+\e$B>l9g$OI>2A$7$?CM$,\e(Bnon-nil\e$B$N>l9g$KE,MQ$5$l$^$9!#\e(B
+
+\e$B$^$?!"%G%U%)%k%H$G$OJ#?t$NMWAG$,%^%C%A$^$?$O\e(Bnon-nil\e$B$K$J$C$?>l9g$K!"\e(B
+\e$B$=$NA4$F$,E,MQ$5$l$^$9$,!"JQ?t\e(B @code{wl-draft-config-matchone} \e$B$r\e(B
+t \e$B$K$9$k$3$H$G:G=i$K%^%C%A$7$?\e(B1\e$B$D$@$1$rE,MQ$9$k$3$H$b$G$-$^$9!#\e(B
+
+\e$BMWAG$N\e(B2\e$BHVL\$K$O\e(B cons \e$B$+4X?t$N\e(B list \e$B$r;XDj$7$^$9!#\e(B
+cons \e$B$K$O%X%C%@$N\e(B Field \e$B$+JQ?t!"%5%V4X?t$r;XDj$7!"\e(B
+Field \e$B$r;XDj$7$?>l9g$O$=$N\e(B Field \e$B$rJQ99!"\e(B
+\e$BJQ?t$r;XDj$7$?>l9g$O0l;~E*$K$=$NJQ?tCM$rJQ99$7$^$9!#\e(B
+
+\e$BCM$K$O\e(B string \e$B$dJQ?t$NB>!"\e(Belisp\e$B<0$,$=$N$^$^5-=R$G$-!"$b$7!"\e(BField \e$B$NCM$,\e(B 
+nil \e$B$J$i$P$=$N\e(B Field \e$B$r:o=|$7$^$9!#\e(B
+
+\e$B$D$E$$$F!"<!$NNc$r8+$F2<$5$$!#\e(B
+
+@lisp
+(setq wl-draft-config-alist
+      '((reply                         ;; @r{(1)}
+         "X-ML-Name: \\(Wanderlust\\|emacs-mime-ja\\|apel-ja\\)"
+         ;; @r{\e$BJV?.85%P%C%U%!$N%X%C%@$K%^%C%A$9$l$PE,MQ$9$k\e(B}
+         (body . "  \e$B$3$s$K$A$O\e(B\n")
+         (template . "default")
+         )))
+@end lisp
+
+\e$B$3$NNc\e(B (1)\e$B$N$h$&$K!"%X%C%@$N@55,I=8=$NA0$K\e(B @code{reply} \e$B$r$D$1$k$H\e(B
+@code{wl-summary-reply} \e$B$J$I$G%I%i%U%H$r:n@.$7$?>l9g!"\e(B
+\e$BJV?.85$N%X%C%@$K%^%C%A$9$l$PE,MQ$5$l$k$h$&$K$J$j$^$9!#\e(B
+\e$B$?$@$7!"\e(B@code{wl-draft} \e$B$r<B9T$7$?$H$-$J$IJV?.85$N%P%C%U%!$,$J$$>l9g$OL5\e(B
+\e$B;k$5$l$^$9!#\e(B
+
+\e$BCm0UE@$H$7$F$O!"\e(B
+\e$B$3$N\e(B @code{wl-draft-config-alist} \e$B$O!"\e(B@code{wl-draft-send-and-exit} \e$B$d\e(B 
+@code{wl-draft-send} \e$B$r<B9T$7$?;~$K0lEY$@$1E,MQ$5$l$k$3$H$G$9!#\e(B
+\e$B$=$N$?$a!"Aw?.$r<h$j$d$a$?8e$K:FEY\e(B @code{wl-draft-config-alist} \e$B$rE,MQ$7$?$$\e(B
+\e$B>l9g$O!"\e(B@kbd{C-c C-e} (@code{wl-draft-config-exec}) \e$B$r<B9T$7$F$/$@$5$$!#\e(B
+
+\e$B$^$?!"%I%i%U%H%P%C%U%!$N:n@.;~$K<+F0E*$K$3$N\e(B 
+@code{wl-draft-config-alist} \e$B$rE,MQ$7$?$$>l9g$O!"<!$N$h$&$K@_Dj$7$^$9!#\e(B
+
+@lisp
+(add-hook 'wl-mail-setup-hook 'wl-draft-config-exec)
+@end lisp
+
+@subsection \e$B%F%s%W%l!<%H$NA^F~\e(B
+@cindex Templete
+@cindex Apply Template
+
+\e$BJQ?t\e(B @code{wl-template-alist} \e$B$r@_Dj$7!"\e(B
+\e$B%I%i%U%H%P%C%U%!$G\e(B
+@kbd{C-c C-j} \e$B$b$7$/$O\e(B @kbd{M-x wl-template-select}
+\e$B$HF~NO$9$k$3$H$GE,MQ$7$^$9!#\e(B
+@code{wl-template-alist} \e$B$N=q<0$O\e(B @code{wl-draft-config-alist} \e$B$H$[$\F1$8$G$9!#\e(B
+
+@lisp
+(setq wl-template-alist
+      '(("default"
+         ("From" . wl-from)
+         ("Organization" . "~/.wl sample")
+         (body . "  \e$B!{!{$G$9!#\e(B\n"))
+        ("report"
+         (template . "default")                 ;; @r{(a)}
+         ("To" . "jousi@@kaisha.jp")
+         ("Subject" . "\e$BJs9p\e(B")
+         (body-file . "~/work/report.txt")
+         )
+        ))
+@end lisp
+
+\e$B$3$N$h$&$K%X%C%@$N@55,I=8=$NBe$o$j$K\e(B "default" \e$B$d\e(B "report" \e$B$N$h$&$K3F\e(B
+\e$BMWAG$NL>A0\e(B(\e$B%F%s%W%l!<%HL>\e(B)\e$B$r$D$1$k$@$1$G$9!#\e(B
+\e$B3FMWAG$NDj5A$O\e(B @code{wl-draft-config-alist} \e$B$HF1$8$G$"$k$N$G!"\e(B
+(a)\e$B$N$h$&$KJL$N%F%s%W%l!<%H$r8F$V$3$H$b2DG=$G$9!#\e(B
+
+\e$B%3%^%s%I\e(B@code{wl-template-select}\e$B$r<B9T$9$k$H!"%F%s%W%l!<%H$NA*Br$r9T$$$^$9$,!"\e(B
+\e$BJQ?t\e(B@code{wl-template-visible-select}\e$B$K$h$jF0:n$,0[$J$j$^$9!#\e(B
+
+@code{wl-template-visible-select} \e$B$,\e(B t (\e$B%G%U%)%k%H\e(B)\e$B$N>l9g!"\e(B
+\e$B%I%i%U%H%P%C%U%!$N2<$KE,MQ8e$N%P%C%U%!%&%#%s%I%&$,I=<($5$l$k$N$G!"\e(B
+\e$B$=$l$r8+$J$,$i\e(B @kbd{n} \e$B$H\e(B @kbd{p} \e$B$GA*Br$7$^$9!#\e(B
+\e$B$=$7$F%j%?!<%s%-!<$G7hDj$9$k$H<B:]$K%I%i%U%H%P%C%U%!$KE,MQ$5$l\e(B
+\e$B$^$9!#\e(B@kbd{q} \e$B$r2!$7$?>l9g$J$K$bE,MQ$5$l$^$;$s!#$J$*!"\e(B
+@code{wl-template-buffer-lines} \e$B$G%&%#%s%I%&$NBg$-$5$,JQ99$G$-$^$9!#\e(B
+
+@code{wl-template-visible-select} \e$B$,\e(B nil \e$B$N>l9g!"%_%K%P%C%U%!$G%F%s%W%l!<%HL>\e(B
+\e$B$rF~NO$9$k$3$H$GA*Br$7$^$9!#\e(B
+
+\e$B$^$?!"\e(B@code{wl-draft-config-alist} \e$B$NNc$N$h$&$KNc$($P\e(B
+
+@example
+(template . "default")
+@end example
+
+@noindent
+\e$B$H=q$/$3$H$G\e(B "default" \e$B$N%F%s%W%l!<%H$rE,MQ$9$k$3$H$,$G$-$^$9!#\e(B
+
+@subsection POP-before-SMTP\e$B$K$h$k%a!<%k$NAw?.\e(B
+@cindex POP-before-SMTP
+
+POP-before-SMTP\e$B$K$h$k%a!<%k$NAw?.$,$G$-$^$9!#\e(B
+\e$B@_Dj$O!"\e(B
+
+@lisp
+(setq wl-draft-send-mail-func 'wl-draft-send-mail-with-pop-before-smtp)
+@end lisp
+
+@noindent
+\e$B$N\e(B1\e$B9T$N$_$G$9$,!"I,MW$K1~$8$F0J2<$NJQ?t$r@_Dj$7$F$/$@$5$$!#\e(B
+
+@table @code
+@item wl-pop-before-smtp-user
+POP-before-SMTP \e$B$GG'>Z$r9T$J$&$H$-$N\e(BPOP\e$B%f!<%6L>$G$9!#\e(B
+\e$B@_Dj$5$l$F$$$J$$>l9g$O\e(B @code{elmo-default-pop3-user} \e$B$,;H$o$l$^$9!#\e(B
+
+@item wl-pop-before-smtp-server
+POP-before-SMTP \e$B$GG'>Z$r9T$J$&$H$-$N\e(BPOP\e$B%5!<%PL>$G$9!#\e(B
+\e$B@_Dj$5$l$F$$$J$$>l9g$O\e(B @code{elmo-default-pop3-server} \e$B$,;H$o$l$^$9!#\e(B
+
+@item wl-pop-before-smtp-authenticate-type
+POP-before-SMTP \e$B$GG'>Z$r9T$J$&$H$-$N\e(BPOP\e$BG'>ZJ}<0$G$9!#\e(B
+\e$B@_Dj$5$l$F$$$J$$>l9g$O\e(B @code{elmo-default-pop3-authenticate-type}
+\e$B$,;H$o$l$^$9!#\e(B
+
+@item wl-pop-before-smtp-port
+POP-before-SMTP \e$B$GG'>Z$r9T$J$&$H$-$N\e(BPOP\e$B%]!<%HHV9f$G$9!#\e(B
+\e$B@_Dj$5$l$F$$$J$$>l9g$O\e(B  @code{elmo-default-pop3-port} \e$B$,;H$o$l$^$9!#\e(B
+
+@item wl-pop-before-smtp-ssl
+Non-nil \e$B$J$i\e(B SSL \e$B$rMxMQ$7$F\e(B POP\e$B%3%M%/%7%g%s$rD%$j$^$9!#\e(B
+'starttls\e$B$J$i\e(BSTARTTLS (RFC2595)\e$B$rMxMQ$7$F%3%M%/%7%g%s$,D%$i$l$^$9!#\e(B
+\e$B@_Dj$5$l$F$$$J$$>l9g$O\e(B @code{elmo-default-pop3-ssl} \e$B$,;H$o$l$^$9!#\e(B
+@end table
+
+POP-before-SMTP\e$BMQ$NJQ?t\e(B (@code{wl-pop-before-smtp-*})
+\e$B$,@_Dj$5$l$F$$$J$$>l9g$O!"\e(B
+POP \e$B%U%)%k%@$N@_Dj\e(B (@code{elmo-default-pop3-*}) \e$B$,MQ$$$i$l$^$9!#\e(B
+\e$B$=$N$?$a!"\e(BSMTP\e$B%5!<%P$H\e(BPOP\e$B%5!<%P$N<BBN$,F1$8$G!"\e(B
+\e$B%G%U%)%k%H@_Dj$N\e(BPOP\e$B%U%)%k%@\e(B(@samp{&} \e$B$J$I\e(B)\e$B$,MxMQ2DG=$J$i!"\e(B
+\e$B@_Dj$OITMW$G$9!#\e(B
+
+\e$B$J$*!"\e(BPOP-before-SMTP\e$B$K$D$$$F$O0J2<$r;2>H$7$F$/$@$5$$!#\e(B
+
+@example
+http://spam.ayamura.org/tools/smPbS.html
+http://www.iecc.com/pop-before-smtp.html
+@end example
+
+@section \e$B%-!<%P%$%s%I\e(B
+@cindex Keybind, Draft Mode
+@cindex Keybind, Draft Buffer
+
+@table @kbd
+@item C-c C-y
+@kindex C-c C-y (Draft)
+@findex wl-draft-yank-original
+\e$B8=:_I=<(Cf$N%a%C%;!<%8%P%C%U%!$NFbMF$r0zMQ$7$^$9!#\e(B
+(@code{wl-draft-yank-original})
+
+@item C-c C-p
+@kindex C-c C-p (Draft)
+@findex wl-draft-preview-message
+\e$B8=:_$N%I%i%U%H$NFbMF$r%W%l%S%e!<$7$^$9!#\e(B
+MIME \e$B$N%^%k%A%Q!<%H%a%C%;!<%8$N3NG'$K;H$&$HJXMx$G$9!#\e(B
+(@code{wl-draft-preview-message})
+
+@item C-c C-s
+@kindex C-c C-s (Draft)
+@findex wl-draft-send
+\e$B8=:_$N%I%i%U%H$NFbMF$rAw?.$7$^$9!#%I%i%U%H%P%C%U%!$O>C5n$7$^$;$s!#\e(B
+\e$BJ#?t$N?M$K>/$7$:$DFbMF$rJQ$($F%a%C%;!<%8$rAw$j$?$$>l9g$KJXMx$G$9!#\e(B
+(@code{wl-draft-send})
+
+@item C-c C-c
+@kindex C-c C-c (Draft)
+@findex wl-draft-send-and-exit
+\e$B8=:_$N%I%i%U%H$NFbMF$rAw?.$7!"%I%i%U%H%P%C%U%!$r>C5n$7$^$9!#\e(B
+(@code{wl-draft-send-and-exit})
+
+@item C-x C-s
+@kindex C-x C-s (Draft)
+@findex wl-draft-save
+\e$B8=:_$N%I%i%U%H$r%;!<%V$7$^$9!#\e(B
+(@code{wl-draft-save})
+
+@item C-c C-k
+@kindex C-c C-k (Draft)
+@findex wl-draft-kill
+\e$B8=:_$N%I%i%U%H$rGK4~$7$^$9!#\e(B
+\e$B%;!<%V$7$F$$$?>l9g!"\e(B@samp{+draft} \e$B%U%)%k%@$+$i$b:o=|$5$l$^$9!#\e(B
+(@code{wl-draft-kill})
+
+@c @item C-x k
+@c @kindex C-x k (Draft)
+@c @findex wl-draft-mimic-kill-buffer
+@c \e$B8=:_$N%I%i%U%H$rGK4~$7$^$9!#\e(B
+@c (@code{wl-draft-mimic-kill-buffer})
+
+@item C-c C-z
+@kindex C-c C-z (Draft)
+@findex wl-draft-save-and-exit
+\e$B8=:_$N%I%i%U%H$r%;!<%V$7!"%I%i%U%H%P%C%U%!$r>C5n$7$^$9!#\e(B
+\e$B%I%i%U%H$NJT=8$rCfCG$7$?$$$H$-$KJXMx$G$9!#\e(B
+@samp{+draft} \e$B%U%)%k%@$KF~$C$F\e(B @kbd{E} (@code{wl-summary-reedit} \e$B$r2!$;$P!"\e(B
+\e$BJT=8$r:F3+$G$-$^$9!#\e(B
+(@code{wl-draft-save-and-exit})
+
+@item C-c C-r
+@kindex C-c C-r (Draft)
+@findex wl-caesar-region
+\e$B;XDj$5$l$?%j!<%8%g%s$r%7!<%60E9f$G%(%s%3!<%I\e(B/\e$B%G%3!<%I$7$^$9!#\e(B
+(@code{wl-caesar-region})
+
+@item M-t
+@kindex M-t (Draft)
+@findex wl-toggle-plugged
+Wanderlust \e$B$N%*%U%i%$%s%b!<%I\e(B/\e$B%*%s%i%$%s%b!<%I$r%H%0%k$7$^$9!#\e(B
+(@code{wl-toggle-plugged})
+
+@item C-c C-o
+@kindex C-c C-o (Draft)
+@findex wl-jump-to-draft-buffer
+\e$BB>$N%I%i%U%H%P%C%U%!$,$"$l$P0\F0$7$^$9!#\e(B
+\e$B$^$?!"\e(Bprefix argument \e$B$r$D$1$k$3$H$K$h$j!"%P%C%U%!$,B8:_$7$F$$$J$$>l9g$O!"\e(B
+\e$B%I%i%U%H%U%)%k%@$+$i%U%!%$%k$r\e(B(\e$BB8:_$9$l$P\e(B)\e$BFI$_9~$_$^$9!#\e(B
+(@code{wl-jump-to-draft-buffer})
+
+@item C-c C-e
+@kindex C-c C-e (Draft)
+@findex wl-draft-config-exec
+@code{wl-draft-config-alist}\e$B$rE,MQ$7$^$9!#\e(B
+(@code{wl-draft-config-exec})
+
+@item C-c C-j
+@kindex C-c C-j (Draft)
+@findex wl-template-select
+\e$B%F%s%W%l!<%H$rA*Br$7$^$9!#\e(B
+(@code{wl-template-select})
+
+@item C-c C-a
+@kindex C-c C-a (Draft)
+@findex wl-draft-insert-x-face-field
+\e$B%U%!%$%k\e(B @file{~/.xface} (\e$BJQ?t\e(B @code{wl-x-face-file} \e$B$NCM\e(B) \e$B$NFbMF$r\e(B
+\e$B%I%i%U%H%P%C%U%!$K\e(B X-Face\e$B%U%#!<%k%I$H$7$FA^F~$7$^$9!#\e(B
+
+Encode \e$B$5$l$?\e(B X-Face \e$BJ8;zNs$r$"$i$+$8$a%U%!%$%k\e(B @file{~/.xface}
+\e$B$NFbMF$KMQ0U$7$F$*$/I,MW$,$"$j$^$9!#\e(B
+(@code{wl-draft-insert-x-face-field})
+@end table
+
+@section \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-subscribed-mailing-list
+@vindex wl-subscribed-mailing-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B;22C$7$F$$$k%a!<%j%s%0%j%9%H!#\e(B
+\e$BJV;v$N%I%i%U%H$rMQ0U$9$k$H$-$K\e(B Mail-Followup-To \e$B$d\e(B Cc \e$B$K$3$l$i$,\e(B
+\e$B4^$^$l$k$H$-$O<+J,$N%"%I%l%9$r=|$-$^$9!#\e(B
+\e$B$^$?!"%j%U%!%$%k@h$r3P$($k$H$-$K$3$l$i$,\e(B To \e$B$+\e(B Cc \e$B$K4^$^$l$k$H$-\e(B
+\e$B$K$O!"$=$N%"%I%l%9$G%j%U%!%$%k@h$r3P$($^$9!#\e(B
+
+@item wl-insert-mail-followup-to
+@vindex wl-insert-mail-followup-to
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(BMail-Followup-To \e$B%U%#!<%k%I$r\e(B
+\e$B%I%i%U%H%P%C%U%!$K<+F0E*$KA^F~$7$^$9!#\e(B
+
+@item wl-insert-mail-reply-to
+@vindex wl-insert-mail-reply-to
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(BMail-Reply-To \e$B%U%#!<%k%I$r\e(B
+\e$B%I%i%U%H%P%C%U%!$K<+F0E*$KA^F~$7$^$9!#\e(B
+
+@item wl-auto-insert-x-face
+@vindex wl-auto-insert-x-face
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$G$+$D!"\e(BEncode \e$B$5$l$?\e(B X-Face \e$BJ8;zNs$r\e(B @file{~/.xface}
+(\e$BJQ?t\e(B @code{wl-x-face-file} \e$B$NCM$G$9\e(B)\e$B$NFbMF$KMQ0U$7$F$*$/$H!"\e(B
+\e$B%I%i%U%H$,=`Hw$5$l$k$H$-$K<+F0E*$K\e(B X-Face\e$B%U%#!<%k%I$H$7$FA^F~$5$l$^$9!#\e(B
+nil\e$B$N>l9g$O<+F0E*$K$OA^F~$5$l$^$;$s$,!"\e(B@kbd{C-c C-a} \e$B$r2!$9$H%X%C%@It$K\e(B
+\e$BA^F~$5$l$^$9!#\e(B
+
+@item wl-insert-message-id
+@vindex wl-insert-message-id
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i!"Aw?.;~$K\e(B Message-ID \e$B%U%#!<%k%I$r<+F0E*$KA^F~$7$^$9!#\e(B
+
+@item wl-local-domain
+@vindex wl-local-domain
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+nil \e$B$J$i$P\e(B Message-ID \e$B$N%I%a%$%s%Q!<%H$O4X?t\e(B @code{system-name} \e$B$NJVCM$,\e(B
+\e$B@_Dj$5$l$^$9!#\e(B
+@code{system-name} \e$B$,\e(B FQDN (\e$B$D$^$j!"\e(B@samp{smtp.gohome.org} \e$B$N$h$&$J\e(B
+\e$B%[%9%H$N%U%k%M!<%`\e(B) \e$B$rJV$5$J$$>l9g$O!"\e(B
+\e$B$3$NJQ?t$K\e(B @strong{\e$BI,$:\e(B} \e$B%[%9%HL>$r=|$$$?%I%a%$%sL>\e(B (@samp{gohome.org}\e$B$J$I\e(B) \e$B$r\e(B
+\e$B@_Dj$7$F$/$@$5$$!#\e(B \e$B$b$7!"%0%m!<%P%k$J\e(BIP\e$B$r;}$?$J$$>l9g$O!"\e(B
+@code{wl-message-id-domain}\e$B$r@_Dj$7$F$/$@$5$$!#\e(B
+(Message-ID \e$B$N%I%a%$%s$,$*$+$7$$$H!"\e(B
+\e$B%M%C%H%K%e!<%9$G$U$/$mC!$-$K$"$C$F$7$^$&2DG=@-$,$"$j$^$9!#\e(B)
+\e$B$^$?!"$3$NCM$,@_Dj$5$l$F$$$k>l9g!"\e(B
+@code{system-name} \e$B$K$3$NCM$rIU2C$7$?%[%9%HL>$,\e(B
+SMTP \e$B$N\e(B HELO \e$B$N0z?t$H$7$FMxMQ$5$l$^$9!#\e(B
+
+@item wl-message-id-domain
+@vindex wl-message-id-domain
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"\e(BMessage-ID \e$B$N%I%a%$%s%Q!<%H$K;HMQ$5$l$^$9!#\e(B
+\e$B%0%m!<%P%k$J\e(B IP \e$B$r;}$?$J$$>l9g$J$I!"%I%a%$%s%Q!<%H$r7h$a$i$l$J$$>l9g$O!"\e(B
+@code{wl-message-id-domain} \e$B$K0l0U$JJ8;zNs\e(B
+(\e$BNc$($P!"%a!<%k%"%I%l%9$J$I\e(B)\e$B$r@_Dj$7$F$/$@$5$$!#\e(B
+
+@item wl-draft-config-alist
+@vindex wl-draft-config-alist
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$BAw?.D>A0$K%I%i%U%H%a%C%;!<%8$rJQ99$7$^$9!#\e(B
+\e$B<+F0E*$K\e(B @code{wl-draft-config-alist} \e$B$NFbMF$,E,MQ$5$l$k$N$OAw?.;~$K0lEY\e(B
+\e$B$@$1$G$9!#$b$7!$<jF0$GE,MQ$9$k>l9g$O!$\e(B@kbd{C-c C-e}
+(@code{wl-draft-config-exec}) \e$B$r;HMQ$7$F$/$@$5$$!#$3$N%3%^%s%I$O2?EY$G$b\e(B
+\e$BE,MQ$G$-$^$9!#\e(B
+
+@item wl-template-alist
+@vindex wl-template-alist
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%I%i%U%H%P%C%U%!$GE,MQ$9$k%F%s%W%l!<%H$r@_Dj$7$^$9!#\e(B
+
+@item wl-draft-config-matchone
+@vindex wl-draft-config-matchone
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i\e(B @code{wl-draft-config-alist} \e$B$NE,MQ;~$K:G=i$K%^%C%A$7$?MWAG\e(B
+\e$B$N$_$rE,MQ$7$^$9!#\e(Bnil \e$B$J$i%^%C%A$7$?$b$N$9$Y$F$rE,MQ$7$^$9!#\e(B
+
+@item wl-template-visible-select
+@vindex wl-template-visible-select
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$iJL%&%#%s%I%&$KE,MQ8e$N>uBV$rI=<($7$J$,$i%F%s%W%l!<%H$rA*Br$7$^$9!#\e(B
+
+@item wl-template-confirm
+@vindex wl-template-confirm
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i%&%#%s%I%&$rI=<($7$J$,$i%F%s%W%l!<%H$rA*Br$9$k>l9g!"%j%?!<%s\e(B
+\e$B%-!<$GA*Br$9$k;~$K3NG'$r9T$$$^$9!#\e(B
+
+@item wl-template-buffer-lines
+@vindex wl-template-buffer-lines
+\e$B=i4|@_Dj$O\e(B 7\e$B!#\e(B
+@code{wl-template-visible-select}\e$B$,\e(B non-nil \e$B$N>l9g!"\e(B
+\e$BE,MQ8e$N>uBV$rI=<($9$k%&%#%s%I%&$NBg$-$5$r;XDj$7$^$9!#\e(B
+
+@item wl-draft-reply-buffer-style
+@vindex wl-draft-reply-buffer-style
+\e$B=i4|@_Dj$O\e(B 'split\e$B!#\e(B
+'split \e$B$H\e(B 'full \e$B$,;XDj$G$-$^$9!#\e(B
+'full \e$B$J$iJV;v$r=q$/$H$-$K%U%l!<%`A4BN$r;H$C$?%I%i%U%H%P%C%U%!$,\e(B
+\e$BMQ0U$5$l$^$9!#\e(B
+
+@item wl-from
+@vindex wl-from
+\e$B=i4|@_Dj$OJQ?t\e(B @code{user-mail-address} \e$B$NCM!#\e(B
+\e$B@_Dj$5$l$?CM$r%I%i%U%H$N\e(B From \e$B%U%#!<%k%I$H$7$F:G=i$+$iA^F~$7$^$9!#\e(B
+
+@item wl-envelope-from
+@vindex wl-envelope-from
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B@_Dj$5$l$?CM$r\e(B envelope from (MAIL FROM) \e$B$K;HMQ$7$^$9!#\e(B
+nil \e$B$J$i\e(B @code{wl-from} \e$B$N%"%I%l%9ItJ,$r;HMQ$7$^$9!#\e(B
+
+@item wl-user-mail-address-list
+@vindex wl-user-mail-address-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%f!<%6$N%"%I%l%9%j%9%H$G$9!#\e(B
+\e$B%"%I%l%9$rJ#?t;}$C$F$$$k>l9g$O@_Dj$7$F$/$@$5$$!#\e(B
+
+@item wl-fcc
+@vindex wl-fcc
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"@_Dj$5$l$?CM$r%I%i%U%H$N\e(B FCC \e$B$H$7$F:G=i$+$iA^F~$7$^$9!#\e(B
+
+@item wl-bcc
+@vindex wl-bcc
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i!"@_Dj$5$l$?CM$r%I%i%U%H$N\e(B Bcc \e$B$H$7$F:G=i$+$iA^F~$7$^$9!#\e(B
+
+@item wl-reply-subject-prefix
+@vindex wl-reply-subject-prefix
+\e$B=i4|@_Dj$O\e(B "Re: "\e$B!#\e(B
+\e$BJV?.;~$N%I%i%U%H$N\e(B Subject \e$B$G!"855-;v$N\e(B Subject \e$B$N@hF,$KIU$12C$($kJ8;zNs$G$9!#\e(B
+
+@item wl-draft-enable-queuing
+@vindex wl-draft-enable-queuing
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+\e$B%*%U%i%$%sAw?.$9$k$+$I$&$+$r<($9%U%i%0$G$9!#\e(BNon-nil \e$B$J$i%*%U%i%$%sAw?.$7$^$9!#\e(B
+
+@item wl-auto-flush-queue
+@vindex wl-auto-flush-queue
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+\e$B%*%s%i%$%s$K$J$C$?$H$-$K<+F0E*$K%-%e!<$rAw?.$9$k$+$I$&$+$r<($9%U%i%0$G$9!#\e(B
+Non-nil \e$B$J$i<+F0E*$KAw?.$7$^$9\e(B (\e$B$$$A$*$&\e(B @code{y-or-n-p} \e$B$G3NG'$7$^$9\e(B)\e$B!#\e(B
+\e$B<jF0$G%-%e!<$rAw?.$9$k$K$O!"%U%)%k%@%b!<%I$G\e(B @kbd{F} \e$B$r2!$7$F$/$@$5$$!#\e(B
+
+@item wl-draft-always-delete-myself
+@vindex wl-draft-always-delete-myself
+Non-nil \e$B$J$i!"<+J,08$F$N%a!<%k$KJV?.$9$k>l9g!">o$K\e(B To, Cc \e$B$+$i<+J,$N\e(B
+\e$B%a!<%k%"%I%l%9$r:o=|$7$^$9!#\e(B
+
+@item wl-smtp-posting-server
+@vindex wl-smtp-posting-server
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%a!<%kAw?.;~$N\e(B SMTP \e$B%5!<%PL>$G$9!#\e(B
+
+@item wl-smtp-posting-user
+@vindex wl-smtp-posting-user
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+SMTP AUTH\e$B$K$h$kG'>Z$r9T$J$&$H$-$N%f!<%6L>$G$9!#\e(B
+nil\e$B$J$i\e(B @code{smtp-authenticate-user} \e$B$r;H$$$^$9!#\e(B
+
+@item wl-smtp-authenticate-type
+@vindex wl-smtp-authenticate-type
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+SMTP AUTH\e$B$K$h$kG'>Z$r9T$J$&$H$-$NG'>ZJ}<0$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{smtp-authenticate-type}\e$B$rMxMQ$7$^$9!#\e(B
+\e$B$=$l$G$b!"\e(Bnil\e$B$J$iG'>Z$r9T$$$^$;$s!#\e(B
+
+@item wl-smtp-connection-type
+@vindex wl-smtp-connection-type
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+SMTP\e$B$N%3%M%/%7%g%s$r$I$N$h$&$KD%$k$+$r;XDj$7$^$9!#\e(B
+nil\e$B$J$i\e(B @code{smtp-connection-type} \e$B$rMxMQ$7$^$9!#\e(B
+'starttls\e$B$J$i\e(BSTARTTLS (RFC2595)\e$B$rMxMQ$7$F%3%M%/%7%g%s$,D%$i$l$^$9!#\e(B
+
+@item wl-nntp-posting-server
+@vindex wl-nntp-posting-server
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%K%e!<%9Ej9F;~$N\e(B NNTP \e$B%5!<%PL>$G$9!#\e(B
+nil\e$B$J$i\e(B @code{elmo-default-nntp-server} \e$B$r;H$$$^$9!#\e(B
+
+@item wl-nntp-posting-user
+@vindex wl-nntp-posting-user
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%K%e!<%9Ej9F;~$K\e(BAUTHINFO\e$B$K$h$kG'>Z$r9T$J$&$H$-$N%f!<%6L>$G$9!#\e(B
+nil\e$B$J$i\e(B @code{elmo-default-nntp-user} \e$B$r;H$$$^$9!#\e(B
+\e$B$=$l$G$b!"\e(Bnil\e$B$J$i\e(BAUTHINFO\e$B$K$h$kG'>Z$r9T$J$$$^$;$s!#\e(B
+
+@item wl-nntp-posting-port
+@vindex wl-nntp-posting-port
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%K%e!<%9Ej9F;~$N\e(B NNTP \e$B%5!<%P$N%]!<%HHV9f!#\e(B
+nil\e$B$J$i\e(B @code{elmo-default-nntp-server} \e$B$r;H$$$^$9!#\e(B
+
+@item wl-nntp-posting-ssl
+@vindex wl-nntp-posting-ssl
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+nil\e$B$J$i\e(B @code{elmo-default-nntp-ssl} \e$B$rI>2A$7$^$9!#\e(B
+Non-nil\e$B$J$i%K%e!<%9Ej9F;~$K\e(BSSL\e$B$rMxMQ$7$^$9!#\e(B
+'starttls\e$B$J$i\e(BSTARTTLS (RFC2595)\e$B$rMxMQ$7$F%3%M%/%7%g%s$,D%$i$l$^$9!#\e(B
+
+@item wl-pop-before-smtp-user
+@vindex wl-pop-before-smtp-user
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+POP-before-SMTP\e$B$G\e(BPOP\e$B$r9T$J$&$H$-$N%f!<%6L>$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{elmo-default-pop3-user}\e$B$rMxMQ$7$^$9!#\e(B
+
+@item wl-pop-before-smtp-server
+@vindex wl-pop-before-smtp-server
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+POP-before-SMTP\e$B$G\e(BPOP\e$B$r9T$J$&$H$-$N%5!<%PL>$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{elmo-default-pop3-server}\e$B$rMxMQ$7$^$9!#\e(B
+
+@item wl-pop-before-smtp-authenticate-type
+@vindex wl-pop-before-smtp-authenticate-type
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+POP-before-SMTP\e$B$G\e(BPOP\e$B$r9T$J$&$H$-$NG'>ZJ}<0$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{elmo-default-pop3-authenticate}\e$B$rMxMQ$7$^$9!#\e(B
+
+@item wl-pop-before-smtp-port
+@vindex wl-pop-before-smtp-port
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+POP-before-SMTP\e$B$G\e(BPOP\e$B$r9T$J$&$H$-$N%]!<%HHV9f$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{elmo-default-pop3-port}\e$B$rMxMQ$7$^$9!#\e(B
+
+@item wl-pop-before-smtp-ssl
+@vindex wl-pop-before-smtp-ssl
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+POP-before-SMTP\e$B$G\e(BSSL\e$B$rMxMQ$9$k$+$I$&$+$r<($9%U%i%0$G$9!#\e(B
+nil\e$B$N$^$^$J$i\e(B @code{elmo-default-pop3-ssl}\e$B$rMxMQ$7$^$9!#\e(B
+'starttls\e$B$J$i\e(BSTARTTLS (RFC2595)\e$B$rMxMQ$7$F%3%M%/%7%g%s$,D%$i$l$^$9!#\e(B
+
+@item wl-draft-queue-save-variables
+@vindex wl-draft-queue-save-variables
+\e$B%*%U%i%$%sAw?.;~$K%-%e!<$K3JG<$5$l$?%a%C%;!<%8$K$D$$$FJ]B8$7$F$*$/JQ?t$r\e(B
+\e$B%j%9%H$G;XDj$7$^$9!#\e(B
+
+@item wl-draft-sendlog
+@vindex wl-draft-sendlog
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+t \e$B$J$i\e(B @file{~/.elmo/sendlog} \e$B$KAw?.%m%0$r=PNO$7$^$9!#\e(B
+\e$B%m%0$r=PNO$9$k%?%$%_%s%0$O\e(B smtp, qmail \e$B$K$h$kAw?.!"\e(Bfcc, queuing \e$B$K$h$k%U%)\e(B
+\e$B%k%@$X$N3JG<!"$G$9\e(B(\e$B<:GT$N>l9g$b\e(B)\e$B!#$?$@$7!"\e(Bim-wl.el \e$B$K$h$kAw?.$O\e(B sendlog \e$B$K\e(B
+\e$B$O=PNO$;$:$K\e(B imput \e$B$N%m%05!G=$K$*$^$+$;$7$^$9!#\e(B
+
+@item wl-draft-sendlog-max-size
+@vindex wl-draft-sendlog-max-size
+\e$B=i4|@_Dj$O\e(B 20000 (\e$B%P%$%H\e(B)\e$B!#\e(B
+@code{wl-draft-sendlog} \e$B$,\e(B t \e$B$N>l9g!"\e(B
+\e$BJ]B8$7$?%m%0$NBg$-$5$,;XDj$7$?Bg$-$50J>e$K$J$l$P!"%m%0$r%m!<%F!<%7%g%s$7$^$9!#\e(B
+@end table
+
+
+@c
+@c  Dsiconnected Operations
+@c
+@node Disconnected Operations, Expire and Archive, Draft, Top
+@chapter \e$B%*%U%i%$%s=hM}\e(B
+@cindex Disconnected Operations
+@cindex Offline
+@cindex Unplugged
+
+@section \e$B%*%U%i%$%s%b!<%I\e(B
+
+Wanderlust \e$B$K$O%*%s%i%$%s%b!<%I$H%*%U%i%$%s%b!<%I$,$"$j$^$9!#\e(B
+\e$B%*%U%i%$%s%b!<%I$G$O!"%M%C%H%o!<%/7PM3$G$J$1$l$PFI$a$J$$%a%C%;!<%8$O\e(B
+\e$B%"%/%;%9$G$-$^$;$s\e(B(\e$B%-%c%C%7%e$5$l$F$$$l$P%"%/%;%9$G$-$^$9\e(B)\e$B!#\e(B
+
+\e$B%b!<%I%i%$%s$K\e(B @samp{[ON]} \e$B$H=P$F$$$k$H$-$O\e(B
+\e$B%*%s%i%$%s%b!<%I$K$"$k$3$H$r<($7$F$$$^$9!#\e(B
+\e$B%b!<%I%i%$%s$K\e(B @samp{[--]} \e$B$H=P$F$$$k$H$-$O%*%U%i%$%s%b!<%I$G$9!#\e(B
+\e$B%U%)%k%@%b!<%I!"%5%^%j%b!<%I$G\e(B @kbd{M-t} \e$B$r2!$9$H%*%U%i%$%s\e(B/\e$B%*%s%i%$%s$N@Z$jBX$($,$G$-$^$9!#\e(B
+
+@file{~/.wl} \e$B$J$I$GJQ?t\e(B @code{wl-plugged} \e$B$r\e(B nil \e$B$K@_Dj$7$F$+$i5/F0$9$k$H!"\e(B
+\e$B5/F0;~$+$i%*%U%i%$%s%b!<%I$H$J$j$^$9!#\e(B
+
+\e$B0J2<$NA`:n$O\e(B(\e$BBP>]$H$J$k%a%C%;!<%8$,%-%c%C%7%e$5$l$F$$$l$P\e(B)
+\e$B%*%U%i%$%s%b!<%I$G$b<B9T$G$-$^$9!#\e(B
+(\e$BJQ?t\e(B @code{elmo-enable-disconnected-operation} (\e$B8e=R\e(B) \e$B$,\e(B non-nil \e$B$N$H$-!#\e(B)
+
+@itemize @minus
+@item \e$B%a%C%;!<%8$NAw?.\e(B
+@item \e$B%j%U%!%$%k\e(B/\e$B%3%T!<\e(B (IMAP4)
+@item \e$B%U%)%k%@@8@.\e(B (IMAP4)
+@item \e$B%^!<%/IU$1\e(B (IMAP4)
+@item \e$B%W%j%U%'%C%A\e(B (IMAP4, NNTP)
+@end itemize
+
+\e$B%*%U%i%$%s%b!<%ICf$K$J$5$l$?$3$l$i$NA`:n$O!"\e(BWanderlust \e$B$,%*%s%i%$%s%b!<%I\e(B
+\e$B$K$J$C$?=V4V$K%M%C%H%o!<%/7PM3$G%5!<%P>e$KH?1G$5$l$^$9!#\e(B
+
+@section \e$B%a%C%;!<%8$NAw?.\e(B
+
+\e$B%*%U%i%$%s>uBV$G%a!<%k\e(B/\e$B%K%e!<%95-;v$rAw?.$G$-$^$9!#\e(B
+(im-wl.el \e$B$r$*;H$$$N>l9g$O!"4X78$"$j$^$;$s!#\e(B)
+\e$B%*%U%i%$%s$N$H$-$KAw?.$5$l$?%a%C%;!<%8$O\e(B
+\e$B%-%e!<%U%)%k%@\e(B @samp{+queue} \e$B$KN/$j$^$9!#\e(B
+\e$BN/$C$?%a%C%;!<%8$O!"%*%s%i%$%s$K$J$C$?$H$-$K0l5$$KAw?.$5$l$^$9!#\e(B
+
+\e$B%*%U%i%$%s$N$&$A$K\e(B @samp{+queue} \e$B$rK,$l$F!"\e(B
+\e$B%-%e!<$K$"$k%a%C%;!<%8$NFbMF$r3NG'$G$-$^$9!#\e(B
+\e$B%a%C%;!<%8$r:o=|$9$k$3$H$b2DG=$G$9!#\e(B
+(\e$B:o=|$5$l$?%a%C%;!<%8$O%*%s%i%$%s$K$J$C$F$bAw?.$5$l$^$;$s!#\e(B)
+
+@c \e$B%-%e!<$K$"$k%a%C%;!<%8$r:FJT=8$9$k$3$H$b2DG=$G$9$,!"\e(B
+@c \e$BLdBj$,5/$3$k2DG=@-$,$"$j$^$9$N$G$*4+$a$G$-$^$;$s!#\e(B
+
+@section \e$B%j%U%!%$%k\e(B/\e$B%3%T!<\e(B(IMAP4)
+
+\e$B%*%U%i%$%s>uBV$N$"$$$@$K<B9T$5$l$?\e(B IMAP \e$B%U%)%k%@$KBP$9$k%j%U%!%$%k\e(B
+/\e$B%3%T!<A`:n$O%-%e!<$K$?$a$i$l!"%*%s%i%$%s$K$J$C$?$H$-$K%5!<%PB&$KH?1G$5\e(B
+\e$B$l$^$9!#%*%U%i%$%s!&%j%U%!%$%k\e(B/\e$B%3%T!<$N$"$H!"%j%U%!%$%k\e(B/\e$B%3%T!<@h$N%U%)%k\e(B
+\e$B%@$rK,$l$k$H!"%*%U%i%$%s$G$b%a%C%;!<%8$,DI2C$5$l$F$$$k$h$&$K8+$($^$9!#\e(B
+
+\e$B%*%U%i%$%s!&%j%U%!%$%k$N%-%e!<=hM};~$N:o=|=hM}$O0BA4$r4|$7$F%5!<%P>e$N%a%C\e(B
+\e$B%;!<%8$H\e(B Message-ID \e$B$,0lCW$7$?>l9g$N$_:o=|$7$^$9!#$^$?!"%-%e!<=hM};~$K%j\e(B
+\e$B%U%!%$%k\e(B/\e$B%3%T!<@h$K;XDj$5$l$?%U%)%k%@$K%a%C%;!<%8$rDI2C$9$k$N$K<:GT$7$?\e(B
+\e$B$H$-$O\e(B @samp{+lost+found} \e$B%U%)%k%@$KDI2C$5$l$^$9!#\e(B
+
+@section \e$B%U%)%k%@@8@.\e(B(IMAP4)
+
+IMAP \e$B%U%)%k%@$N@8@.$b%*%U%i%$%s>uBV$G<B9T$G$-$^$9!#%*%s%i%$%s$K$J$C$?$H$-\e(B
+\e$B$K%U%)%k%@@8@.$,%5!<%P$KH?1G$5$l$^$9$,!"$3$N$H$-!"2?$i$+$N860x$G%U%)%k%@@8\e(B
+\e$B@.$,<:GT$7$F$7$^$C$?>l9g!"%*%U%i%$%sCf$K@8@.$5$l$?%U%)%k%@$X%j%U%!%$%k$5$l\e(B
+\e$B$?%a%C%;!<%8$O\e(B "+lost+found" \e$B%U%)%k%@$KDI2C$5$l$^$9!#\e(B
+
+@section \e$B%^!<%/IU$1\e(B(IMAP4)
+
+IMAP \e$B%U%)%k%@$K$"$k%a%C%;!<%8$KBP$9$kL$FI\e(B/\e$B4{FI$N>pJs!"$*$h$S!"\e(B
+\e$B=EMW%^!<%/\e(B @samp{$} \e$B$,$D$$$F$$$k$+$I$&$+!"$b%*%U%i%$%sCf$NJQ99$,%*%s%i%$%s$K\e(B
+\e$B$J$C$?$H$-$K%5!<%P$KH?1G$5$l$^$9!#\e(B
+
+@section \e$B%W%j%U%'%C%A\e(B(IMAP4, NNTP)
+
+IMAP \e$B$b$7$/$O\e(B NNTP \e$B%U%)%k%@$K$"$k%a%C%;!<%8$KBP$7$F!"%W%j%U%'%C%A$NM=Ls\e(B
+\e$B$r$7$^$9!#%W%j%U%'%C%A$NM=Ls$,$5$l$?%a%C%;!<%8$O\e(B @samp{!} \e$B$,IU$-$^$9$,!"\e(B
+\e$B$3$N;~E@$G$O%-%c%C%7%e$5$l$F$*$i$:!"%*%s%i%$%s$K$J$C$?$H$-$K%5!<%P$+$i\e(B
+\e$B%W%j%U%'%C%A$5$l$^$9!#\e(B
+
+\e$BJQ?t\e(B @code{elmo-enable-disconnected-operation} \e$B$,\e(B nil \e$B$J$i!"\e(B
+\e$B$3$l$i$N\e(B IMAP4 \e$B$H\e(B NNTP\e$B$K4X$9$k%*%U%i%$%s=hM}$O<B9T$5$l$:!"\e(B
+\e$B%*%U%i%$%sCf$N%j%U%!%$%k\e(B/\e$B%3%T!<Ey$NA`:n$OC1$K%(%i!<$K$J$j$^$9!#\e(B
+
+\e$B%*%U%i%$%s=hM}$G%-%c%C%7%e%U%!%$%k$r;H$&$N$G!"\e(B
+\e$B%-%c%C%7%e%U%!%$%k$r<j$G>C$9$H\e(B Wanderlust \e$B$,8mF0:n$9$k$*$=$l$,$"$j$^$9!#\e(B
+\e$B%-%c%C%7%e$r>C$7$?$$$H$-$O\e(B
+@kbd{M-x elmo-cache-expire-by-size}
+\e$B$r<B9T$9$k$h$&$K$7$F$/$@$5$$!#\e(B
+@code{elmo-cache-expire-by-size} \e$B$O%*%U%i%$%s=hM}$NBP>]$H$J$k%a%C%;!<%8$N\e(B
+\e$B%-%c%C%7%e$O:o=|$7$^$;$s!#\e(B
+
+@section \e$B%5!<%P!&%]!<%HJL$N%*%s%i%$%s!"%*%U%i%$%s$N@Z$jBX$(\e(B
+
+\e$B>e5-$N\e(B @kbd{M-t} \e$B$K$h$kA`:n$G$O%M%C%H%o!<%/$N>uBV$r0l3g$7$F@Z$jBX$($^$9$,!"\e(B
+\e$B%5!<%P!&%]!<%HJL$K%*%s%i%$%s$H%*%U%i%$%s$r@Z$jBX$($k$3$H$b$G$-$^$9!#\e(B
+
+\e$B%U%)%k%@%b!<%I!"%5%^%j%b!<%I$G\e(B @kbd{C-t} \e$B$r2!$9$H0J2<$N$h$&$J\e(B 
+wl-plugged-mode \e$B$KF~$j!"$3$N%b!<%I$G3F%]!<%H$N\e(B plug \e$B>uBV$rJQ99$7$^$9!#\e(B
+
+@example
+Queuing:[ON] AutoFlushQueue:[--] DisconnectedOperation:[ON]
+[ON](wl-plugged)
+  [--]hosta
+    [--]smtp        +queue: 2 msgs (1,2)        @dots{}@r{sending queue}
+    [--]nntp(119)   +queue: 1 msg (3)           @dots{}@r{sending queue}
+  [ON]hostb
+    [--]imap4/cram-md5(143) %#mh/wl(prefetch-msgs:3,mark-as-important:1)
+                            %inbox(delete-msgids:1)    @dots{}@r{dop queue}
+    [ON]nntp(119)
+    [ON]smtp
+@end example
+
+1\e$B9TL\$O%*%U%i%$%sA`:n$K4X78$9$k<!$N\e(B3\e$B$D$NJQ?t$N>uBV$rI=<($7!"\e(B
+\e$B$=$l$>$l$N%i%Y%kMs$G\e(B @kbd{@key{SPC}} \e$B$d\e(B @kbd{@key{RET}} \e$B$r2!$9$3$H$G\e(B
+\e$BJQ?t$NCM$r4JC1$KJQ99$G$-$k$h$&$K$J$C$F$$$^$9!#\e(B
+
+@example
+"Queuing"               wl-draft-enable-queuing
+"AutoFlushQueue"        wl-auto-flush-queue
+"DisconnectedOperation" elmo-enable-disconnected-operation
+@end example
+
+\e$B$3$3$G!"\e(B@samp{[ON]} \e$B$O$=$NJQ?t$NCM$,\e(B t \e$B$G$"$k$3$H$r!"\e(B
+@samp{[--]} \e$B$O\e(B nil \e$B$G$"$k$3$H$r<($7$F$$$^$9!#\e(B
+
+\e$B$^$?!"\e(B2\e$B9TL\0J9_$G$O%5!<%P$H%]!<%H$N%*%s%i%$%s$H%*%U%i%$%s>uBV$rI=<($7!"\e(B
+@samp{[ON]} \e$B$O$=$N%5!<%P$d%]!<%H$,%*%s%i%$%s$G$"$k$3$H$r!"\e(B
+@samp{[--]} \e$B$O%*%U%i%$%s$G$"$k$3$H$r<($7$F$$$^$9\e(B
+(XEmacs \e$B$G$O%"%$%3%s$GI=<($5$l$^$9\e(B)\e$B!#\e(B
+\e$B$=$7$F$=$l$>$l$N9T$G\e(B @kbd{@key{SPC}} \e$B$d\e(B @kbd{@key{RET}} \e$B$r2!$9$3$H$G\e(B
+\e$B>uBV$r@Z$jBX$($k$3$H$,$G$-$^$9!#\e(B
+
+sending queue \e$B$O%*%U%i%$%sAw?.;~$K\e(B @samp{+queue} \e$B%U%)%k%@$K3JG<$5$l$F$$$k\e(B
+\e$BAw?.BT$A$N%a%C%;!<%8$r;X$7!"\e(B
+dop queue \e$B$O%*%U%i%$%s$G9T$C$?%j%U%!%$%k\e(B/\e$B%3%T!<Ey$NA`:n$r;X$9$H$7$^$9!#\e(B
+@c \e$BJQ?t\e(B @code{elmo-enable-disconnected-operation} \e$B$,\e(B non-nil \e$B$J$i\e(B
+@c \e$B%*%U%i%$%sA`:n$,$G$-$^$9!#\e(B
+
+\e$B$=$7$F$b$7!"$3$l$i$N\e(B sending queue \e$B$d\e(B dop queue \e$B$,$"$l$P\e(B
+\e$B$=$N>uBV$,2hLL$KI=<($5$l$^$9!#\e(B
+\e$B>e5-Nc$G$O!"\e(Bsending queue \e$B$K$O\e(B hosta \e$B$N\e(B smtp \e$B8~$1$K\e(B 2 \e$B$D\e(B
+(queue \e$B%U%)%k%@$N\e(B1\e$BHV$H\e(B2\e$BHV\e(B)\e$B$H!"\e(B
+hosta \e$B$N\e(B nntp \e$B8~$1$K\e(B 1 \e$B$D\e(B(3\e$BHV\e(B)\e$B$N%a%C%;!<%8$,$"$j!"\e(B
+dop queue \e$B$K$O\e(B @samp{%inbox} \e$B$NA`:n$,\e(B1\e$B$D$H!"\e(B
+@samp{%#mh/wl} \e$B$NA`:n$,\e(B2\e$B$D$"$k$3$H$r<($7$F$$$^$9!#\e(B
+
+\e$B$3$N%b!<%I$G\e(B2\e$B9TL\$K$"$k\e(B (wl-plugged) \e$B$rJQ99$9$k$H!"\e(Bwl-plugged \e$BJQ?t$,JQ99$5\e(B
+\e$B$l!"$3$l$K$h$j%b!<%I%i%$%s$N\e(B indicator \e$B$HA4BN$N\e(B \e$B%]!<%H\e(B plug \e$B>uBV$,\e(B 
+ON/OFF \e$B$5$l$^$9!#\e(B
+\e$B$^$?!"3F%5!<%P$d%]!<%H$N\e(B plug \e$B>uBV$rJQ99$9$k$H!"\e(B
+@code{elmo-plugged-condition} (\e$B8e=R\e(B)\e$B$N@_Dj$H3F%]!<%H$N\e(B plug \e$B>uBV$K$h$j\e(B 2\e$B9TL\$N\e(B 
+wl-plugged \e$B$,JQ2=$7$^$9!#\e(B
+
+@section \e$B5/F0;~$N%*%U%i%$%s>uBV@_Dj\e(B
+
+\e$BA0=R$NDL$j!"\e(B@file{~/.wl} \e$B$J$I$GJQ?t\e(B @code{wl-plugged} \e$B$r\e(B nil \e$B$K@_Dj$7$F$+$i5/F0$9\e(B
+\e$B$k$H!"5/F0;~$+$i%*%U%i%$%s%b!<%I$K$9$k$3$H$,$G$-$^$9$,!"$5$i$K:Y$+$/%5!<%P\e(B
+\e$B$d%]!<%HKh$K%*%U%i%$%s>uBV$r@_Dj$9$k$3$H$b$G$-$^$9!#\e(B
+\e$BJ;$;$FJQ?t\e(B @code{wl-reset-plugged-alist} \e$B$b;2>H2<$5$$!#\e(B
+
+\e$BDL>o!"5/F0;~$K$O\e(B @file{~/.folder} \e$B$H\e(B @code{wl-smtp-posting-server},
+@code{wl-nntp-posting-server} \e$B$J$I$+$i3F%]!<%H$N\e(B plug \e$B>uBV$,<+F0E*$KDI2C$5$l$^$9\e(B
+\e$B$,!"$3$l$i$N%]!<%H$N\e(Bplug\e$B>uBV$rJQ99$7$?$j!">e5-0J30$N%]!<%H$rDI2C$7$?$j$9$k\e(B
+\e$B>l9g$K$O\e(B @code{wl-make-plugged-hook} \e$B$KJQ99$9$k4X?t$r5-=R$7$^$9!#\e(B
+
+@lisp
+(add-hook 'wl-make-plugged-hook
+          '(lambda ()
+             (elmo-set-plugged plugged\e$BCM\e(B(t/nil) server port)
+                     ;; @r{server,port\e$B$N\e(Bplug\e$B>uBV$r?75,DI2C$b$7$/$OJQ99$9$k\e(B}
+             (elmo-set-plugged plugged\e$BCM\e(B(t/nil) server)
+                     ;; @r{port \e$B$r>JN,$9$k$H\e(Bserver\e$B$NA4\e(Bport\e$B$,JQ99$5$l$k\e(B}
+                     ;; @r{(port \e$B$r>JN,$7$F?75,$NDI2C$O$G$-$J$$\e(B)}
+             ))
+@end lisp
+
+@section \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-plugged
+@vindex wl-plugged
+\e$B$3$NCM$r\e(B nil \e$B$K@_Dj$7$F\e(B Wanderlust \e$B$r5/F0$9$k$H!"\e(B
+\e$B5/F0;~$+$i%*%U%i%$%s%b!<%I$H$J$j$^$9!#\e(B
+
+@item wl-queue-folder
+@vindex wl-queue-folder
+\e$B=i4|@_Dj$O\e(B "+queue"\e$B!#Aw?.%-%e!<$N%a%C%;!<%8$,N/$k%U%)%k%@!#\e(B
+
+@item wl-auto-flush-queue
+@vindex wl-auto-flush-queue
+\e$B=i4|@_Dj$O\e(B t\e$B!#%*%s%i%$%s$K$J$C$?$H$-$K<+F0E*$K%-%e!<$rAw?.$9$k$+$I$&$+!#\e(B
+Non-nil \e$B$J$i<+F0E*$KAw?.$7$^$9\e(B (\e$B$$$A$*$&\e(B @code{y-or-n-p} \e$B$G3NG'$7$^$9\e(B)\e$B!#\e(B
+\e$B<jF0$G%-%e!<$rAw?.$9$k$K$O!"%U%)%k%@%b!<%I$G\e(B @kbd{F} \e$B$r2!$7$F$/$@$5$$!#\e(B
+
+@item elmo-enable-disconnected-operation
+@vindex elmo-enable-disconnected-operation
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(BIMAP4 \e$B$K4X$9$k%*%U%i%$%s=hM}$r<B9T$9$k$+$I$&$+!#\e(B
+Non-nil \e$B$J$i%*%U%i%$%s=hM}$r<B9T$7$^$9!#\e(B
+
+@item elmo-lost+found-folder
+@vindex elmo-lost+found-folder
+\e$B=i4|@_Dj$O\e(B "+lost+found"\e$B!#%*%U%i%$%s!&%j%U%!%$%k\e(B/\e$B%3%T!<$N%-%e!<=hM}$G\e(B
+\e$B%a%C%;!<%8$NDI2C$K<:GT$7$?$H$-$K%a%C%;!<%8$rB`Hr$5$;$k%U%)%k%@$G$9!#\e(B
+
+@item elmo-plugged-condition
+@vindex elmo-plugged-condition
+\e$B=i4|@_Dj$O\e(B 'one\e$B!#\e(B
+@code{wl-plugged} \e$B$NCM$O4X?t\e(B @code{elmo-plugged-p} (\e$B0z?t$J$7\e(B)\e$B$NLa$jCM$K$h$j7hDj$5$l$^$9!#\e(B
+\e$B$3$NJQ?t\e(B @code{elmo-plugged-condition} \e$B$O\e(B (elmo-plugged-p) \e$B$NLa$jCM$,\e(B t \e$B$K$J$k>r7o\e(B
+\e$B$r3F%]!<%H$N\e(Bplug\e$B>uBV$K$h$j;XDj$7$^$9!#\e(B
+
+@example
+'one         : 1\e$B$D0J>e$N%]!<%H$,\e(B plugged \e$B$J$i\e(B plugged \e$B$G$"$k\e(B
+'all         : \e$BA4$F$N%]!<%H$,\e(B plugged \e$B$J$i\e(B plugged \e$B$G$"$k\e(B
+'independent : \e$B%]!<%H$N\e(B plug \e$B>uBV$K4X78$J$/\e(B wl-plugged (elmo-plugged)
+               \e$B$r;2>H$9$k\e(B
+function     : \e$B4X?t$NLa$jCM$K$h$jJQ2=$9$k\e(B
\e$BI8=`$GMQ0U$5$l$F$$$k4X?t\e(B
+ 'elmo-plug-on-by-servrs
+             : \e$BJQ?t\e(B elmo-plug-on-servers \e$B$G;XDj$7$?%5!<%P$N\e(B plug
+               \e$B>uBV$K$h$jJQ2=$9$k\e(B
+ 'elmo-plug-on-by-exclude-servers
+             : \e$BJQ?t\e(B elmo-plug-on-exclude-servers \e$B$G;XDj$7$?0J30$N\e(B
+               \e$B%5!<%P$N\e(B plug \e$B>uBV$K$h$jJQ2=$9$k\e(B
+                  elmo-plug-on-exclude-servers \e$B$N%G%U%)%k%HCM$O\e(B
+                   '("localhost"
+                     (system-name)
+                     (system-name)\e$B$+$i%I%a%$%sIt$r=|$$$?$b$N\e(B)
+                  \e$B$G$"$k\e(B
+@end example
+
+@example
+\e$BNc\e(B1:
+ (setq elmo-plugged-condition 'all)
+\e$BNc\e(B2:
+ (setq elmo-plug-on-servers '("smtpserver" "newsserver"))
+ (setq elmo-plugged-condition 'elmo-plug-on-by-servers)
+\e$BNc\e(B3:
+ (setq elmo-plug-on-exclude-servers '("localhost" "myname"))
+ (setq elmo-plugged-condition 'elmo-plug-on-by-exclude-servers)
+@end example
+
+@item wl-reset-plugged-alist
+@vindex wl-reset-plugged-alist
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(BNon-nil \e$B$J$i\e(B Wanderlust \e$B$N5/F0;~$K%5!<%P!&%]!<%HJL$N%W%i%0\e(B
+\e$B>uBV$r\e(B @code{wl-plugged} \e$B$NCM$K$h$j=i4|2=$7$^$9!#\e(B
+
+nil \e$B$J$i!"\e(BEmacs \e$B$,F0:n$7$F$$$k4V!"A02s=*N;$7$?;~E@$N%W%i%0>uBV$rJ];}$7$^$9!#\e(B
+\e$B8@$$49$($l$P\e(B nil \e$B$G$"$C$F$b\e(B Emacs \e$B$r:F5/F0$9$k$H=i4|2=$5$l$^$9!#\e(B
+@end table
+
+
+@c
+@c  Expire and Archive
+@c
+@node Expire and Archive, Scoring, Disconnected Operations, Top
+@chapter \e$B%a%C%;!<%8$N<+F0:o=|$H%"!<%+%$%V\e(B
+@cindex Expire and Archive
+
+@menu
+* Expire::      \e$B4|8B%a%C%;!<%8$N<+F0:o=|!"%"!<%+%$%V\e(B
+* Archive::     \e$BA4%a%C%;!<%8$N%"!<%+%$%V\e(B
+@end menu
+
+
+@node Expire, Archive, Expire and Archive, Expire and Archive
+@section \e$B%a%C%;!<%8$N<+F0:o=|\e(B
+@cindex Expire Message
+
+Expire \e$B$H$O!";XDj$7$?4|4V$r2a$.$?8E$$%a%C%;!<%8$r:o=|$9$k5!G=$G$9!#\e(B
+
+\e$B$7$+$7!"\e(B@code{wl-expire} \e$B$G$O%a%C%;!<%8$rC1=c$K>C$9$@$1$G$O$J$/!";XDj$7$?%"!<%+\e(B
+\e$B%$%V%U%)%k%@$K0\F0$9$k$3$H$b=PMh$^$9!#\e(B
+
+@section \e$B;H$$J}\e(B
+
+@code{wl-expire-alist}\e$B$r@_Dj$7$F!"%U%)%k%@%b!<%I$G\e(B @kbd{e}\e$B!"$b$7$/$O%5%^\e(B
+\e$B%j%b!<%I$G\e(B @kbd{M-e} \e$B$r2!$7$^$9!#\e(B
+
+@subsection @code{wl-expire-alist}\e$B$N@_Dj\e(B
+
+\e$B<!$K\e(B@code{wl-expire-alist}\e$B$N@_DjNc$r<($7$^$9!#$3$N\e(B@code{wl-expire-alist}
+\e$B$N=q$-J}0l$D$G\e(B expire \e$B$N<B;\J}K!$,Bg$-$/JQ$o$j$^$9$N$G!"?5=E$K@_Dj$7$F$/\e(B
+\e$B$@$5$$!#\e(B
+\e$B:G=i$N$&$A$O\e(B@code{wl-expire-use-log}\e$B$r\e(B t \e$B$K%;%C%H$7$F$*$/$HNI$$$G$7$g$&!#\e(B
+
+@lisp
+(setq wl-expire-alist
+      '(("^\\+trash$"   (date 14) remove)
+                                  ;; @r{\e$B:o=|$9$k!#\e(B}
+        ("^\\+tmp$"     (date 7) trash)
+                                  ;; @r{@code{wl-trash-folder} \e$B$K\e(Brefile\e$B$9$k!#\e(B}
+        ("^\\+outbox$"  (number 300) "$outbox;lha")
+                                  ;; @r{\e$BFCDj$N%U%)%k%@$K\e(Brefile\e$B$9$k!#\e(B}
+        ("^\\+ml/tmp$"  nil)
+                           ;; @r{expire\e$B$7$J$$\e(B}
+        ("^\\+ml/wl$"   (number 500 510) wl-expire-archive-number1 t)
+                           ;; @r{\e$BHV9f$4$H$K%"!<%+%$%V$9$k\e(B(\e$BHV9f$OJ];}$9$k\e(B)\e$B!#\e(B}
+        ("^\\+ml/.*"    (number 300 310) wl-expire-archive-number2 t)
+                           ;; @r{\e$B0lDj?t$4$H$K%"!<%+%$%V$9$k\e(B(\e$BHV9f$OJ];}$9$k\e(B)\e$B!#\e(B}
+        ("^\\+nikki$"   (date 30) wl-expire-archive-date)
+                           ;; @r{\e$BG/7n$4$H$K%"!<%+%$%V$9$k\e(B(\e$BHV9f$OJ];}$7$J$$\e(B)\e$B!#\e(B}
+        ))
+@end lisp
+
+\e$B3F%j%9%H$NMWAG$O\e(B
+
+@example
+("\e$B%U%)%k%@$N\e(Bregexp"  (\e$B:o=|%a%C%;!<%8$N;XDj\e(B) \e$B:o=|@h\e(B)
+@end example
+
+@noindent
+\e$B$H$J$C$F$$$^$9!#\e(B
+\e$B%j%9%H$N@hF,$+$i\e(B"\e$B%U%)%k%@$N\e(Bregexp"\e$B$K%^%C%A$9$k$+$I$&$+$rD4$Y$^$9!#\e(B
+\e$B$b$7!"\e(B"\e$B%U%)%k%@$N\e(Bregexp"\e$B$K%^%C%A$7$J$$%U%)%k%@$G!"\e(Bexpire \e$B$r<B9T$7$F$b2?$b$7$^$;$s!#\e(B
+\e$B$^$?!"\e(B2,3 \e$BHVL\$NMWAG$N$$$:$l$+$,\e(B nil \e$B$G$"$l$P\e(B expire \e$B$7$^$;$s!#\e(B
+
+\e$B:o=|%a%C%;!<%8$N;XDj$K$O<!$N$b$N$r;XDj$7$^$9!#\e(B
+
+@table @code
+@item (number n1 [n2])
+\e$B%U%)%k%@$K$"$k%a%C%;!<%8?t$K1~$8$F:o=|$r9T$$$^$9!#\e(B
+
+n1 \e$B$O:o=|8e$N%a%C%;!<%8?t$G!"\e(B
+\e$BNc$($PCM$,\e(B 500 \e$B$J$i:G?7$N\e(B 500 \e$B8D$r;D$7$F;D$j$r:o=|$9$k$3$H$K$J$j$^$9!#\e(B
+
+n2 \e$B$O\e(B expire \e$B$r<B9T$9$k$?$a$N%a%C%;!<%8$NAm?t$G!">JN,$9$k$H\e(B n1 + 1 \e$B$K$J$j$^$9!#\e(B
+\e$BNc$($PCM$,\e(B 510 \e$B$J$i%a%C%;!<%8$,\e(B 510 \e$B0J>e$N$H$-$K\e(B expire \e$B$r<B9T$9$k$3$H$K$J$j$^$9!#\e(B
+\e$B$3$l$O<+F0<B9T$G\e(B expire \e$B$r9T$&$h$&$K$7$?>l9g!"IQHK$K%a!<%k$,Mh$k%U%)%k%@$G\e(B
+\e$B$OKh2s\e(B expire \e$B$r<B9T$9$k$?$a!"%a!<%k$rFI$`$^$G$K;~4V$,$+$+$j!"\e(B
+\e$BHQ$o$7$/$J$C$F$7$^$$$^$9!#\e(B
+\e$B$=$3$G\e(B n2 \e$B$r\e(B n1 \e$B$h$j$bBg$-$a$NCM$K@_Dj$9$k$3$H$K$h$j!"0lDj?tN/$^$k$^$G$O\e(B
+expire \e$B$r<B9T$7$J$$$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$^$?!"\e(B@code{wl-summary-expire-reserve-marks}\e$B$G;XDj$7$?%a%C%;!<%8\e(B
+(important\e$B%^!<%/$d?75,!&L$FI%^!<%/$NIU$$$?%a%C%;!<%8\e(B)
+\e$B$O:o=|$7$J$$$h$&$K$J$C$F$$$^$9$,!"\e(B
+\e$B$b$7!"\e(B@code{wl-expire-number-with-reserve-marks} \e$B$,\e(B non-nil \e$B$N>l9g!"\e(B
+\e$B$3$N$h$&$J%a%C%;!<%8$b4^$a$F\e(B 500 \e$B8D$K$J$k$h$&$K\e(B expire \e$B$5$l$^$9!#\e(B
+nil \e$B$N>l9g$O>e5-%a%C%;!<%80J30$G\e(B 500 \e$B$K$J$k$h$&$K\e(B expire \e$B$7$^$9!#\e(B
+
+@item (date d1)
+\e$B%a%C%;!<%8$NF|IU$K$h$j:o=|$r9T$$$^$9!#\e(B
+
+d1 \e$B$O8=:_$h$j2?F|A0$N%a%C%;!<%8$r:o=|$9$k$I$&$+$G$"$j!"\e(B
+\e$BNc$($PCM$,\e(B 7 \e$B$J$i\e(B 7\e$BF|$h$jA0$N%a%C%;!<%8$r:o=|$7$^$9!#\e(B
+\e$B$J$*!"$3$NF|IU$H$O%a%C%;!<%8$N\e(BDate\e$B%U%#!<%k%I$NF|IU$G$"$j!"\e(B
+\e$B%a%C%;!<%8$,%U%)%k%@$KF~$C$?F|IU$G$O$J$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B
+
+\e$B$b$7!"%a%C%;!<%8$K\e(B Date\e$B%U%#!<%k%I$,$J$+$C$?$j!"\e(BDate\e$B%U%#!<%k%I$,IT@5$JCM\e(B
+\e$B$J$i!"\e(Bexpire \e$B$5$l$^$;$s$N$G<j$G:o=|$9$k$J$j$7$F2<$5$$!#\e(B
+@end table
+
+\e$B:o=|@h$K$O<!$N$b$N$r;XDj$7$^$9!#\e(B
+
+@table @code
+@item 'remove
+\e$BB(%a%C%;!<%8$r:o=|$7$^$9!#\e(B
+
+@item 'trash
+\e$B%a%C%;!<%8$r\e(B @code{wl-trash-folder} \e$B$K0\F0$7$^$9!#\e(B
+
+@item string(folder)
+\e$B%a%C%;!<%8$r;XDj$N%U%)%k%@$K0\F0$7$^$9!#\e(B
+
+\e$B%"!<%+%$%V%U%)%k%@$r;XDj$9$k$HJXMx$G$9$,!"\e(B
+important\e$B%a%C%;!<%8$J$I$O0\F0$5$l$J$$$?$a!"\e(B
+\e$B2<5-$NI8=`4X?t$r;H$&J}$,$h$j$h$$$G$9!#\e(B
+
+@item function
+\e$B;XDj$N4X?t$r8F$S=P$7$^$9!#\e(B
+
+\e$B;XDj$7$?4X?t$K$O<!$N\e(B3\e$B$D$N0z?t!"%U%)%k%@L>!":o=|$9$k%a%C%;!<%8$N%j%9%H!"$=$7\e(B
+\e$B$F%5%^%j$N\e(Bmsgdb\e$B>pJs$,EO$5$l$^$9!#\e(B
+\e$B$^$?4X?tL>$N8e$K4X?tFH<+$N0z?t$b;XDj$G$-$^$9!#\e(B
+\e$B$J$*!"$3$N4X?t$K$O\e(B@code{wl-summary-expire-reserve-marks}\e$B$G;XDj$7$?%a%C%;!<\e(B
+\e$B%8$b4^$s$@%j%9%H$,EO$5$l$^$9$N$G!"FH<+$K4X?t$r:n$k>l9g$OCm0U$7$F$/$@$5$$!#\e(B
+
+\e$B$3$3$G;XDj$G$-$k4X?t$K$O!"I8=`$G<!$N\e(B3\e$B$D$,MQ0U$5$l$F$$$^$9!#\e(B
+\e$B$3$l$i$O;XDj$7$?J}K!$G%"!<%+%$%V%U%)%k%@$K%a%C%;!<%8$r0\F0$9$k$b$N$G$9!#\e(B
+\e$B$D$^$j!"8E$$%a%C%;!<%8$r%U%)%k%@$+$i:o=|$7$J$,$iJL%U%!%$%k$K05=L$7$FJ]B8\e(B
+\e$B$7$F$*$/$3$H$,$G$-$^$9!#\e(B
+
+@table @code
+@item wl-expire-archive-number1
+\e$B:o=|BP>]$N%a%C%;!<%8HV9f$KBP$9$k%"!<%+%$%V%U%)%k%@$K\e(Brefile\e$B$7$^$9!#\e(B
+\e$BNc$($P!"\e(B102 \e$BHV$G$"$k$J$i\e(B @file{wl-00100.zip}\e$B!"\e(B
+390 \e$BHV$G$"$k$J$i\e(B @file{wl-00300.zip}\e$B!"$J$I$N$h$&$K$G$9!#\e(B
+\e$B$J$*!"\e(B@code{wl-expire-archive-files} \e$B$r\e(B 200 \e$B$K$9$k$H!"\e(B
+@file{wl-00000.zip}, @file{wl-00200.zip}, @file{wl-00400.zip},
+@dots{} \e$B$K\e(B refile \e$B$7$F$$$-$^$9!#\e(B
+
+refile \e$B@h$N%"!<%+%$%V%U%)%k%@$O:o=|85$N%U%)%k%@L>$K$h$j<!$N$h$&$K7hDj$5$l$^$9!#\e(B
+(\e$B$3$N$H$-!"%"!<%+%$%V%U%)%k%@$O\e(B @code{elmo-archive-treat-file} \e$B$,\e(B non-nil \e$B$N>l9g$H$7$F$"$D$+$o$l$^$9\e(B)
+
+@table @code
+@item \e$B%U%)%k%@%?%$%W$,\e(Blocaldir
+
+@code{$ArchiveDir/foldername-xxxxx.zip}
+\e$BNc$($P\e(B @samp{+ml/wl} \e$B$O\e(B @samp{$ml/wl;zip}
+(@file{~/Mail/ml/wl-00100.zip})\e$B$H$J$j$^$9!#\e(B
+
+@item \e$B%U%)%k%@%?%$%W$,\e(Blocaldir\e$B0J30\e(B
+@code{$ArchiveDir/foldertype/foldername-xxxxx.zip}
+
+\e$BNc$($P!"\e(B@samp{%#mh/ml/wl} \e$B$O\e(B @samp{$imap4/#mh/ml/wl;zip}
+
+(@file{~/Mail/imap4/#mh/ml/wl-00100.zip})\e$B$H$J$j$^$9!#\e(B
+@end table
+
+\e$B$9$J$o$A!"\e(Blocaldir \e$B$N>l9g$O<oJL$,%Q%9L>$K4^$^$l$^$;$s$,!"$=$l0J30$O<oJL\e(B
+\e$B$,%Q%9L>$K4^$^$l$k$N$G$9!#\e(B
+\e$B$^$?!"\e(B@code{wl-expire-archive-folder-prefix} \e$B$K$h$j!"\e(B
+\e$B%"!<%+%$%V%U%)%k%@$KIU$1$k\e(B prefix \e$B$,@)8f$G$-$^$9!#\e(B
+@code{wl-expire-archive-folder-prefix}\e$B$N@bL@$rNI$/8+$F$*$$$F$/$@$5$$!#\e(B
+
+@item wl-expire-archive-number2
+\e$B;XDj$7$?8D?t$4$H$K%"!<%+%$%V%U%)%k%@$K\e(Brefile\e$B$7$^$9!#\e(B
+
+@samp{wl-expire-archive-number1}
+\e$B$H0[$J$kE@$O%a%C%;!<%8HV9f$K4X78$J$/%"!<%+%$%V%U%)%k%@$,;XDj?t$KC#$9$k$^$G$=$N%U%)%k%@$K\e(B refile \e$B$9$k!"$H$$$&E@$G$9!#\e(B
+\e$B$J$*!"\e(Brefile \e$B@h$N%"!<%+%$%V%U%)%k%@$O\e(B @code{wl-expire-archive-number1}
+\e$B$HF1$8$h$&$K7hDj$5$l$^$9!#\e(B
+
+@item wl-expire-archive-date
+\e$B%a%C%;!<%8$NF|IU\e(B(\e$BG/7n\e(B)\e$B$4$H$K%"!<%+%$%V%U%)%k%@$K\e(Brefile\e$B$7$^$9!#\e(B
+
+\e$BNc$($P!"\e(B1998\e$BG/\e(B12\e$B7n$N%a%C%;!<%8$O\e(B @code{$folder-199812;zip} 
+\e$B$K\e(Brefile\e$B$5$l$^$9!#\e(B
+\e$B$J$*!"F|IU$NItJ,0J30$N%"!<%+%$%V%U%)%k%@L>$O\e(B @code{wl-expire-archive-number1}
+\e$B$HF1$8$h$&$K7hDj$5$l$^$9!#\e(B
+@end table
+
+\e$B$^$?!">e5-$N\e(B3\e$B$D$NI8=`4X?t$G$O\e(B @code{wl-expire-alist} \e$B$G$NBh\e(B1\e$B0z?t$K\e(B non-nil \e$B$r;XDj$9$k$H!"\e(B
+\e$B%U%)%k%@$N%a%C%;!<%8HV9f$r$=$N$^$^J]B8$9$k$3$H$,$G$-$^$9!#\e(B
+\e$BNc$($P!"<!$N$h$&$K4X?tL>$N8e$KB3$1$F;XDj$7$^$9!#\e(B
+
+@example
+("^\\+ml/wl$" (number 300 310) wl-expire-archive-number1 t)
+@end example
+
+\e$B0z?t$r;XDj$7$J$$>l9g$O!"3F%"!<%+%$%V%U%)%k%@$4$H$K\e(B 1 \e$B$+$i=g$KHV9f$,M?$(\e(B
+\e$B$i$l$FJ]B8$5$l$^$9!#\e(B
+@end table
+
+@subsection important\e$B$dL$FI%a%C%;!<%8$N07$$\e(B
+
+\e$B:o=|@h$K\e(B 'remove \e$B$d\e(B 'trash\e$B!"%U%)%k%@L>!"I8=`4X?t$N$$$:$l$r;XDj$7$?>l9g$G\e(B
+\e$B$b!"\e(B@code{wl-summary-expire-reserve-marks}\e$B$G;XDj$7$?%^!<%/$N%a%C%;!<%8\e(B
+(\e$B0J2<!"\e(B@dfn{reserve\e$B%a%C%;!<%8\e(B}\e$B$H8F$S$^$9\e(B)\e$B$O;D$9$h$&$K$J$C$F$$$^$9!#\e(B
+
+\e$B$3$NJQ?t$K$O%G%U%)%k%H$G!"\e(Bimportant\e$B%^!<%/!"?75,%^!<%/!"L$FI%^!<%/$,@_Dj\e(B
+\e$B$5$l$F$$$^$9$N$G!"$3$l$i$N%^!<%/$N$D$$$?%a%C%;!<%8$O:o=|$5$l$J$$$3$H$K$J\e(B
+\e$B$j$^$9!#\e(B
+\e$B$?$@$7!"$3$NJQ?t$K$O0l;~E*%^!<%/$O;XDj$G$-$J$$$?$a\e(B(\e$B$9$J$o$A:o=|$5$l$k$?\e(B
+\e$B$a\e(B)\e$B!"\e(Bexpire\e$B$r<B9T$9$kA0$K0l;~E*%^!<%/$O=hM}$7$F$*$$$F$/$@$5$$!#\e(B
+
+@subsection \e$B<+F0<B9T\e(B
+
+\e$B%5%^%j$K0\F0$9$k$H<+F0E*$K\e(B expire \e$B$r<B9T$9$k$K$O<!$N$h$&$J@_Dj$r9T\e(B
+\e$B$$$^$9!#$?$@$7!"$3$N>l9g$O3NG'$;$:$K<+F0<B9T$9$k$?$a!"\e(B
+\e$B%U%)%k%@$N\e(Bregexp\e$B$J$I$K8m$j$,$J$$$+$I$&$+$r==J,3NG'$7$F$+$i@_Dj$7$F2<$5$$!#\e(B
+
+@lisp
+(add-hook 'wl-summary-prepared-pre-hook
+          'wl-summary-expire)
+@end lisp
+
+\e$B$^$?!"%U%)%k%@%b!<%I$G3F%U%)%k%@$4$H$K\e(B expire \e$B$r<B9T$G$-$k$N$O$b$A$m$s!"\e(B
+\e$B%0%k!<%WC10L$N<B9T$b2DG=$G$9!#=>$C$F!"\e(B@samp{Desktop} \e$B%0%k!<%W$r;XDj$9$l\e(B
+\e$B$P\e(B@code{wl-expire-alist}\e$B$K%^%C%A$9$kA4$F$N%U%)%k%@$G\e(B expire \e$B$,<B9T$5$l$^\e(B
+\e$B$9!#\e(B
+
+@section TIPS
+
+@subsection \e$B:n@.$7$?%"!<%+%$%V%U%)%k%@$N<h$j07$$\e(B
+
+\e$B>e5-$NI8=`4X?t\e(B @code{wl-expire-archive-number1} \e$B$J$I$G:n@.$7$?%"!<%+%$%V\e(B
+\e$B%U%)%k%@$r07$&>l9g$O!"JQ?t\e(B @code{elmo-archive-treat-file} \e$B$r\e(B non-nil \e$B$K@_\e(B
+\e$BDj$7$F$*$/I,MW$,$"$j$^$9!#\e(B
+
+@subsection \e$BF0:n3NG'\e(B
+
+'remove \e$B$r;XDj$9$k>l9g$O!"$^$:\e(B 'trash \e$B$K$7$F4|BTDL$j$K%a!<%k$,\e(B 
+@code{wl-trash-folder} \e$B$K0\F0$5$l$k$3$H$r3NG'$7$F$+$i\e(B 'remove \e$B$KJQ$($k$H\e(B
+\e$B$h$$$G$7$g$&!#$$$-$J$j\e(B 'remove \e$B$r;XDj$9$k$N$O4m81$G$9!#\e(B
+
+\e$B$^$?!"\e(B@code{wl-expire-archive-number1}\e$B$J$I$N4X?t$rMxMQ$9$k>l9g!"\e(B
+\e$B$^$:$O;HMQ$9$k%"!<%+%$%P%?%$%W\e(B('zip \e$B$d\e(B 'lha)\e$B$J$I$N%U%)%k%@$r;n$7$K$D$/$C\e(B
+\e$B$F!"@5$7$/DI2C$G$-$k$+$I$&$+$r3NG'$7$F$/$@$5$$!#\e(B
+\e$B$?$H$(!"\e(B@code{wl-expire-alist} \e$B$d\e(B @code{elmo-archive} \e$B$N@_Dj$,@5$7$/$F$b!"\e(B
+\e$B%"!<%+%$%V%W%m%0%i%`$,@5$7$/F0$+$J$1$l$P$I$3$K$bJ]B8$5$l$:$K\e(B
+\e$B%a%C%;!<%8$,>C$($F$7$^$&$+$bCN$l$^$;$s!#\e(B
+
+\e$B%"!<%+%$%V%U%)%k%@$NF0:n$,3NG'$G$-!"<B:]$K\e(B expire \e$B$r<B9T$9$k$h$&$K$J$l$P!"\e(B
+\e$B%m%0$r3hMQ$7$F$/$@$5$$!#\e(B
+@code{wl-expire-use-log} \e$B$r\e(B t \e$B$K$9$k$H!"\e(B@file{~/.elmo/expired-log}\e$B$K$O0J\e(B
+\e$B2<$N$h$&$K5-O?$5$l$^$9!#\e(B
+
+@example
+delete  +ml/wl  (593 594 595 596 597 598 599)
+move    +ml/wl -> $ml/wl-00600;tgz;wl  (600 601 602)
+@end example
+
+\e$B:G=i$N9`L\$OF0:n$r<($9$b$N$G!"\e(Bdelete, copy, move \e$B$,$"$j$^$9!#<!$,\e(B expire
+\e$B$r<B9T$7$?%U%)%k%@L>$G!"\e(Bcopy \e$B$H\e(B move \e$B$N>l9g$O\e(B@samp{->}\e$B$KB3$1$F%3%T!<$b$7\e(B
+\e$B$/$O0\F0@h$N%U%)%k%@L>$,5-O?$5$l$^$9!#:G8e$N9`L\$O!"<B:]$K:o=|$d0\F0$5$l\e(B
+\e$B$?%a%C%;!<%8HV9f$N%j%9%H$G$9\e(B(copy\e$B$d\e(Bmove\e$B$N>l9g!"0\F08e$G$O$J$/0\F0A0$N%a%C\e(B
+\e$B%;!<%8HV9f$G$9\e(B)\e$B!#\e(B
+
+@subsection reserve\e$B%a%C%;!<%8$N\e(Brefile
+
+\e$BI8=`$GMQ0U$5$l$F$$$k\e(B3\e$B$D$N4X?t$G$O!"\e(Breserve\e$B%a%C%;!<%8$O%"!<%+%$%V%U%)%k%@\e(B
+\e$B$K%3%T!<$7$^$9$,!"85$N%U%)%k%@$+$i$O:o=|$7$J$$$h$&$K$J$C$F$$$^$9!#$J$*!"\e(B
+important\e$B%^!<%/$J$I$O>o$K;D$k$?$a!"2?EY$b%3%T!<$5$l$k$3$H$,$J$$$h$&$K\e(B
+@file{~/.elmo/expired-alist} \e$B$K5-O?$9$k$h$&$K$7$F$$$^$9!#\e(B
+\e$B$?$@$7!"\e(Breserve\e$B%a%C%;!<%8$,\e(Brefile\e$BBP>]$K$J$C$?$H$-$N$_$G$9!#\e(B
+\e$B$^$?!"\e(B@code{wl-summary-archive} \e$B$J$I$G%3%T!<$5$l$k>l9g$O5-O?$5$l$^$;$s!#\e(B
+
+\e$B%m%05!G=$rM-8z$K$7$F$$$?>l9g$O!"\e(Brefile \e$B;~$K$ODL>o\e(B move \e$B$,5-\e(B
+\e$BO?$5$l$^$9$,!"\e(Breserve\e$B%a%C%;!<%8$,4^$^$l$F$$$k$H!"\e(Bcopy \e$B$H\e(B 
+delete \e$B$KJ,$1$F5-O?$5$l$^$9!#$3$l$O\e(B reserve\e$B%a%C%;!<%8$r4^$a$?%a%C\e(B
+\e$B%;!<%8$r%3%T!<$7$?8e!"\e(Breserve\e$B%a%C%;!<%8$r=|$$$?%a%C%;!<%8$r:o=|$9$k!"\e(B
+\e$B$H$$$&=hM}$r9T$C$F$$$k$?$a$G$9!#\e(B
+
+@section \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-expire-alist
+@vindex wl-expire-alist
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+expire \e$B$r9T$&%U%)%k%@$H\e(B expire \e$BJ}K!$N;XDj$r9T$$$^$9!#>\$7$/$O>e5-$N\e(B
+@code{wl-expire-alist}\e$B$N@_Dj$r$4Mw2<$5$$!#\e(B
+
+@item wl-summary-expire-reserve-marks
+@vindex wl-summary-expire-reserve-marks
+\e$B=i4|@_Dj$O0J2<$N%j%9%H!#\e(B
+
+@lisp
+(list wl-summary-important-mark
+      wl-summary-new-mark
+      wl-summary-unread-mark
+      wl-summary-unread-uncached-mark
+      wl-summary-unread-cached-mark)
+@end lisp
+
+expire \e$B$r9T$C$F$b!"%U%)%k%@$K$O;D$7$F$*$/%a%C%;!<%8$N%^!<%/$r;XDj$7$^$9!#\e(B
+\e$B%^!<%/$K$O\e(B \e$B1JB3E*%^!<%/\e(B \e$B$N$_;XDj$G$-$^$9!#\e(B
+\e$B0l;~E*%^!<%/$O;XDj$G$-$^$;$s!#\e(B
+
+\e$B%G%U%)%k%H$N$h$&$K%j%9%H$G;XDj$9$k$H$=$N%^!<%/$N%a%C%;!<%8$r;D$9$3$H$,$G\e(B
+\e$B$-$kB>!"0J2<$N;XDj$b$G$-$^$9!#\e(B
+
+@table @code
+@item 'all
+\e$B1JB3%^!<%/$NIU$$$?$9$Y$F$N%a%C%;!<%8$r;D$7$^$9!#\e(B
+\e$B$D$^$j!"%G%U%)%k%H$G@_Dj$5$l$F$$$k%^!<%/0J30$K\e(B
+@code{wl-summary-read-uncached-mark} \e$B$,4^$^$l$^$9!#\e(B
+
+@item 'none
+\e$B$I$s$J%^!<%/$NIU$$$?%a%C%;!<%8$G$"$C$F$b!"DL>o$N4{FI%a%C%;!<%8$HF1$807$$\e(B
+\e$B$r$7$^$9!#$9$J$o$A!"\e(Bimportant\e$B%a%C%;!<%8$G$"$C$F$b:o=|$5$l$^$9!#\e(B
+@end table
+
+@item wl-expire-archive-files
+@vindex wl-expire-archive-files
+\e$B=i4|@_Dj$O\e(B 100\e$B!#\e(B
+\e$B$R$H$D$N%"!<%+%$%V%U%)%k%@$KJ];}$9$k%a%C%;!<%8?t$r;XDj$7$^$9!#\e(B
+
+@item wl-expire-number-with-reserve-marks
+@vindex wl-expire-number-with-reserve-marks
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$K$9$k$H!"\e(B
+\e$B:o=|%a%C%;!<%8$N;XDj$G\e(B number \e$B$r;XDj$7$?$H$-!"\e(B
+\e$B;D$7$F$*$/%a%C%;!<%8?t$K\e(B @code{wl-summary-expire-reserve-marks} \e$B$G@_Dj$5\e(B
+\e$B$l$?%a%C%;!<%8$r4^$a$^$9!#\e(B
+
+@item wl-expire-archive-get-folder-func
+@vindex wl-expire-archive-get-folder-func
+\e$B=i4|@_Dj$O\e(B 'wl-expire-archive-get-folder\e$B!#\e(B
+
+\e$B:o=|@h$NI8=`4X?t$G%"!<%+%$%V%U%)%k%@L>$r<hF@$9$k4X?t$r;XDj$7$^$9!#\e(B
+\e$B<!$N\e(B3\e$B$D$NJQ?t$K$h$j4J0W$J%U%)%k%@L>$NJQ99$G$-$^$9$,!"$b$C$HJ#;($J;XDj$r\e(B
+\e$B$7$?$$>l9g$O?7$?$K4X?t$r:n$C$F$3$NJQ?t$K@_Dj$7$^$9!#\e(B
+
+\e$B4X?t\e(B@code{wl-expire-archive-get-folder}\e$B$N%+%9%?%^%$%:JQ?t$K$O<!$N\e(B
+\e$B$b$N$,$"$j$^$9!#\e(B
+@itemize @bullet
+@item wl-expire-archive-folder-name-fmt
+@item wl-expire-archive-folder-type
+@item wl-expire-archive-folder-prefix
+@end itemize
+
+@item wl-expire-archive-folder-name-fmt
+@vindex wl-expire-archive-folder-name-fmt
+\e$B=i4|@_Dj$O\e(B "%s-%%05d;%s"\e$B!#\e(B
+@code{wl-expire-archive-number1}\e$B$*$h$S\e(B@code{wl-expire-archive-number2}\e$B$G\e(B
+\e$B;HMQ$5$l$k%"!<%+%$%V$N%U%)%k%@$N\e(B format \e$B7A<0$NJ8;zNs$r;XDj$7$^$9!#\e(B
+\e$B$J$*!"\e(B2\e$BEY\e(B @code{format} \e$B$G;XDj$9$k$?$a!"\e(B
+\e$B$+$J$i$:HV9f$NItJ,$O\e(B @samp{%%d} \e$B$K$7$J$/$F$O$J$j$^$;$s!#\e(B
+
+\e$B$b$7!"JQ99$9$k>l9g$O\e(B @code{wl-expire-archive-folder-num-regexp}
+\e$B$b9g$o$;$k$h$&$K$7$F$/$@$5$$!#\e(B
+
+@item wl-expire-archive-date-folder-name-fmt
+@vindex wl-expire-archive-date-folder-name-fmt
+\e$B=i4|@_Dj$O\e(B "%s-%%04d%%02d;%s"\e$B!#\e(B
+@code{wl-expire-archive-date}
+\e$B$G;HMQ$5$l$k%"!<%+%$%V$N%U%)%k%@$N\e(B format \e$B7A<0$NJ8;zNs$r;XDj$7$^$9!#\e(B
+\e$B$J$*!"\e(B2\e$BEY\e(B @code{format} \e$B$G;XDj$9$k$?$a!"\e(B
+\e$B$+$J$i$:HV9f$NItJ,$O\e(B @samp{%%d} \e$B$K$7$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$^$?!"%a%C%;!<%8$NG/$H7n$,M?$($i$l$k$?$a!"\e(B@code{%%d} \e$B$O\e(B2\e$B$DI,MW$G$9!#\e(B
+
+\e$B$b$7!"JQ99$9$k>l9g$O\e(B @code{wl-expire-archive-date-folder-num-regexp}
+\e$B$b9g$o$;$k$h$&$K$7$F$/$@$5$$!#\e(B
+
+@item wl-expire-archive-folder-type
+@vindex wl-expire-archive-folder-type
+\e$B=i4|@_Dj$O\e(B 'zip\e$B!#\e(B
+\e$B%"!<%+%$%V%U%)%k%@$N%"!<%+%$%P%?%$%W$r;XDj$7$^$9!#\e(B
+
+@item wl-expire-archive-folder-prefix
+@vindex wl-expire-archive-folder-prefix
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%"!<%+%$%V%U%)%k%@$KIU$1$k\e(B prefix \e$B$r;XDj$7$^$9!#\e(B
+\e$B$?$@$7!"%"!<%+%$%V%U%)%k%@$K\e(B prefix (\e$B%G%#%l%/%H%j9=B$\e(B)\e$B$rIU$1$k;EMM$O\e(B
+\e$B$*$^$15!G=$G$9$N$G!"<h$j07$$$O?5=E$K9T$C$F2<$5$$!#\e(B
+\e$B:G0-%"!<%+%$%V%U%!%$%k$r2u$962$l$,$"$j$^$9!#\e(B
+
+@table @code
+@item nil
+prefix \e$B$OIU$-$^$;$s!#\e(B
+
+@item 'short
+\e$BNc$($P!"\e(B@samp{+ml/wl} \e$B$G$O\e(B prefix @samp{wl} \e$B$,IU$-!"\e(B
+@samp{$ml/wl-00000;zip;wl} \e$B$H$J$j$^$9!#\e(B
+
+@item t
+\e$BNc$($P!"\e(B@samp{+ml/wl} \e$B$G$O\e(B prefix @samp{ml/wl} \e$B$,IU$-!"\e(B
+
+@samp{$ml/wl-00000;zip;ml/wl} \e$B$H$J$j$^$9!#\e(B
+@end table
+
+@item wl-expire-archive-folder-num-regexp
+@vindex wl-expire-archive-folder-num-regexp
+\e$B=i4|@_Dj$O\e(B "-\\([-0-9]+\\);"\e$B!#\e(B
+@code{elmo-list-folders} \e$B$K$h$kJ#?t$N%"!<%+%$%V%U%)%k%@L>$+$i\e(B
+\e$BHV9f$r<hF@$9$k$?$a$N@55,I=8=$r;XDj$7$^$9!#\e(B
+@code{wl-expire-archive-folder-name-fmt} \e$B$KBP1~$7$F@_Dj$7$F$/$@$5$$!#\e(B
+
+@item wl-expire-archive-date-folder-num-regexp
+@vindex wl-expire-archive-date-folder-num-regexp
+\e$B=i4|@_Dj$O\e(B "-\\([-0-9]+\\);"\e$B!#\e(B
+@code{elmo-list-folders} \e$B$K$h$kJ#?t$N%"!<%+%$%V%U%)%k%@L>$+$i\e(B
+\e$BHV9f$r<hF@$9$k$?$a$N@55,I=8=$r;XDj$7$^$9!#\e(B
+@code{wl-expire-archive-date-folder-name-fmt} \e$B$KBP1~$7$F@_Dj$7$F$/$@$5$$!#\e(B
+
+@item wl-expire-delete-oldmsg-confirm
+@vindex wl-expire-delete-oldmsg-confirm
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil\e$B$N>l9g!"4{$KB8:_$7$F$$$k%"!<%+%$%V%U%)%k%@$N:GBg%a%C%;!<%8HV9f$h$j$b\e(B
+\e$B8E$$%a%C%;!<%8$,$"$C$?>l9g$K3NG'$7$F$+$i:o=|$7$^$9!#\e(B
+nil\e$B$N>l9g$O3NG'$;$:$K:o=|$7$^$9!#\e(B
+
+\e$B$J$*!"I8=`4X?t$N0z?t$K\e(B non-nil \e$B$r;XDj$7$FHV9f$rJ];}$9$k$h$&$K$7$?>l9g$N\e(B
+\e$B$_M-8z$G$9!#\e(B
+
+@item wl-expire-use-log
+@vindex wl-expire-use-log
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$K$9$k$H!"\e(B@file{~/.elmo/expired-log}\e$B$K\e(B expire \e$B$N<B9T7k2L$r5-O?$7$^$9!#\e(B
+\e$B$J$*!"%U%!%$%k$KDI2C$7$F$$$/0lJ}$J$N$G!"E,Ev$K<j$G>C$9I,MW$,$"$j$^$9!#\e(B
+
+@item wl-expire-add-seen-list
+@vindex wl-expire-add-seen-list
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+
+Non-nil \e$B$N>l9g!"\e(Bexpire \e$B$K$h$j%a%C%;!<%8$r\e(B refile \e$B$7$?>l9g!"4{FI>pJs$r\e(B
+refile\e$B@h$N%U%)%k%@$KEA$($k$h$&$K$7$^$9!#\e(B
+
+\e$B$?$@$7!"\e(Brefile\e$B@h$N%U%)%k%@$r\e(B Wanderlust\e$B>e$+$iFI$^$J$$$H!"\e(B
+@file{~/.elmo/}\e$B0J2<$K$"$k\e(B @file{seen} \e$B%U%!%$%k$,Bg$-$/$J$C$F$$$/$N$G!"\e(B
+\e$B%"!<%+%$%V%U%)%k%@$J$I$KC1$KJ]B8$7$F$*$/$@$1$J$i\e(B
+ nil \e$B$K@_Dj$7$F$*$/$H$h$$$G$7$g$&!#\e(Bnil \e$B$K@_Dj$7$F$b!"\e(B
+refile\e$B$7$?%"!<%+%$%V%U%)%k%@$rFI$`$H$-$K?75,%a%C%;!<%807$$$5$l$k$@$1$G!"\e(B
+expire \e$B$J$I$NF0:n$K$O1F6A$O$"$j$^$;$s!#\e(B
+
+@item wl-expire-folder-update-msgdb
+@vindex wl-expire-folder-update-msgdb
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+t \e$B$N>l9g!"%U%)%k%@%b!<%I$G\e(B expire \e$B$r<B9T$9$k$H$-$K!"\e(B
+\e$B%5%^%j>pJs$r\e(Bupdate\e$B$7$F$+$i\e(Bexpire\e$B$r<B9T$9$k!#\e(B
+\e$B$^$?!"%U%)%k%@L>$N@55,I=8=$N%j%9%H$r;XDj$7$?>l9g$O!"%^%C%A$7$?%U%)%k%@$N\e(B
+\e$B$_%5%^%j>pJs$r\e(Bupdate\e$B$9$k!#\e(B
+@end table
+
+
+@node Archive,  , Expire, Expire and Archive
+@section \e$B%a%C%;!<%8$N%"!<%+%$%V\e(B
+
+@subsection \e$B%a%C%;!<%8$N%"!<%+%$%V\e(B
+@kbd{M-x wl-summary-archive} \e$B$G%U%)%k%@A4BN$r%"!<%+%$%V%U%)%k%@$K%3%T!<$7$^\e(B
+\e$B$9!#4{$K%"!<%+%$%V%U%)%k%@$,$"$k>l9g!"?75,%a%C%;!<%8$N$_DI2C$7$^$9!#\e(B
+
+@code{wl-expire-alist} \e$B$HF1$8MM$K!"%U%)%k%@L>$K1~$8$F$I$N$h$&$K%"!<%+%$%V\e(B
+\e$B$9$k$+$r\e(B @code{wl-archive-alist} \e$B$G;XDj$7$^$9!#Nc$($P0J2<$N$h$&$K$J$j$^\e(B
+\e$B$9!#\e(B
+
+@lisp
+(setq wl-archive-alist
+      '(("^\\+tmp$"     wl-archive-date)
+        ("^\\+outbox$"  wl-archive-number2)
+        (".*"           wl-archive-number1)
+        ))
+@end lisp
+
+\e$B3F%j%9%H$NMWAG$O<!$N$h$&$K$J$j$^$9!#\e(B
+
+@example
+("\e$B%U%)%k%@$N\e(Bregexp"  \e$B:o=|4X?t\e(B)
+@end example
+
+\e$B$3$N$h$&$K\e(B@samp{\e$B%U%)%k%@$N\e(Bregexp}\e$B$N8e$K$O4X?t$7$+;XDj$G$-$^$;$s!#\e(B
+\e$BI8=`$G$O<!$N\e(B3\e$B$D$N4X?t\e(B
+
+@itemize
+@item wl-archive-number1
+@item wl-archive-number2
+@item wl-archive-date
+@end itemize
+
+\e$B$,MQ0U$5$l$F$*$j!"L>A0$+$i$*2r$j$NDL$j<!$NE@$r=|$$$F\e(B Expire \e$B$GMQ0U$5$l$F\e(B
+\e$B$$$k$N$HF1$8F0:n$r$7$^$9!#\e(B
+
+@itemize
+@item \e$B%a%C%;!<%8$r:o=|$7$J$$\e(B
+@item \e$B0z?t$J$7$G$"$C$F$b%a%C%;!<%8HV9f$rJ];}$9$k\e(B
+@end itemize
+
+\e$B%U%)%k%@$NA4%a%C%;!<%8$rHV9f$4$H$dF|IU$4$H$K$^$H$a$F%"!<%+%$%V$7$?$$>l9g\e(B
+\e$B$O!"$3$l$i$N4X?t$r;HMQ$9$k$H$h$$$G$7$g$&!#\e(B
+\e$B$^$?!"\e(Bexpire \e$B$r9T$&A0$N%P%C%/%"%C%W$dF0:n$r3NG'$9$k$N$K$bM-8z$G$9!#\e(B
+\e$B$b$C$H$b!"%"!<%+%$%V8e$K\e(Bexpire\e$B$G\e(Brefile\e$B$9$k$H!"\e(Brefile\e$B$;$:$K:o=|$9$k$@$1$K\e(B
+\e$B$J$j$^$9!#\e(B
+
+\e$B%G%U%)%k%H$G$O%3%T!<@h$N%"!<%+%$%V%U%)%k%@$O\e(B
+@code{wl-expire-archive-get-folder-func} \e$B$K=>$C$F<+F0E*$K7hDj$5$l$^$9$,!"\e(B
+prefix argument \e$B$rIU$1$F\e(B @kbd{C-u M-x wl-summary-archive} \e$B$G<B9T$9$k$H!"\e(B
+\e$B;XDj$7$?%U%)%k%@$K%3%T!<$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$7$+$7!"C1=c$K\e(B1\e$B$D$N%"!<%+%$%V%U%)%k%@$K%3%T!<$9$k$@$1$J$i!"\e(B
+@code{wl-summary-copy-region} \e$B$J$I$GA4%a%C%;!<%8$r%"!<%+%$%V%U%)%k%@$K%3\e(B
+\e$B%T!<$9$k$3$H$G$b2DG=$J$?$a!"$*$^$1$N5!G=$G$7$+$"$j$^$;$s\e(B
+(\e$B$D$^$j!"F0:n3NG'$OIT==J,$G$9\e(B)\e$B!#\e(B
+
+
+\e$B$3$N%"!<%+%$%V%U%)%k%@$N7hDjJ}K!$O\e(B@code{wl-summary-expire}\e$B$HF1$8$b$N$rMQ\e(B
+\e$B$$$F$$$k$?$a!"%+%9%?%^%$%:JQ?t$NCf$G<!$K<($9$b$N$,4X78$7$F$-$^$9!#\e(B
+
+@itemize @bullet
+@item wl-expire-archive-files
+@item wl-expire-archive-get-folder-func
+@item wl-expire-archive-folder-name-fmt
+@item wl-expire-archive-folder-type
+@item wl-expire-archive-folder-prefix
+@item wl-expire-archive-folder-num-regexp
+@end itemize
+
+@subsection \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-archive-alist
+@vindex wl-archive-alist
+\e$B=i4|@_Dj$O\e(B '((".*" wl-archive-number1))\e$B!#\e(B
+
+\e$B%"!<%+%$%V%U%)%k%@$K%3%T!<$9$k=hM}$r9T$&4X?t$r;XDj$7$^$9!#\e(B
+\e$B$3$N4X?t$K$O!"%U%)%k%@L>!"%U%)%k%@Fb$K$"$k%a%C%;!<%8$N%j%9%H!"%5%^%j$N\e(Bmsgdb\e$B>pJs!"\e(B
+\e$B$N\e(B3\e$B$D$N0z?t$,EO$5$l$^$9!#\e(B
+\e$B$b$A$m$s%f!<%6$,FH<+$K:n$C$F;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@end table
+
+
+@c
+@c  Scoring
+@c
+@node Scoring, Customization, Expire and Archive, Top
+@chapter \e$B%9%3%"\e(B
+@cindex Scoring
+@c @cindex Kill File
+
+\e$B%9%3%"$H$O!"%a%C%;!<%8$K%9%3%"\e(B(\e$BCM\e(B)\e$B$r$D$1!"\e(B
+\e$B$=$NCM$K$h$j4{FI%^!<%/$rIU$1$?$j%5%^%j$+$i>C$7$?$j$9$k5!G=$G$9!#\e(B
+
+\e$B$3$N5!G=$K$h$C$F=EMW$J%a%C%;!<%8$K\e(B temp \e$B%^!<%/$d\e(B important \e$B%^!<%/$r$D$1$?\e(B
+\e$B$j!"\e(Bspam \e$B5-;v$J$I$NFI$_$?$/$J$$%a%C%;!<%8$K4{FI%^!<%/$r$D$1$?$j$9$k$3$H$,\e(B
+\e$B$G$-$^$9!#\e(B
+
+\e$B$3$N%9%3%"5!G=$O\e(B Gnus \e$B$N%9%3%"$H$[$\F1Ey$N5!G=$r;}$A!"$^$?%9%3%"%U%!%$%k$N\e(B
+\e$B=q<0$b$[$\F1$8$G$9!#$?$@$7!"4v$D$+$OL$BP1~$G$"$C$?$j\e(B Wanderlust \e$BFCM-$N5!G=\e(B
+\e$B$,$"$C$?$j$7$^$9!#\e(B
+
+@menu
+* Score Commands::             \e$B%9%3%"$K4X$9$k%3%^%s%I\e(B
+* Score File Format::          \e$B%9%3%"%U%!%$%k$N=q<0\e(B
+@end menu
+
+
+@node Score Commands, Score File Format, Scoring, Scoring
+@section \e$B%9%3%"$K4X$9$k%3%^%s%I\e(B
+@cindex Score Commands
+
+@subsection \e$B%9%3%"%U%!%$%k$N;XDjJ}K!\e(B
+
+\e$BJQ?t\e(B @code{wl-score-folder-alist}
+\e$B$K%U%)%k%@L>$KBP1~$7$?%9%3%"%U%!%$%kL>$+%9%3%"$rDj5A$7$?JQ?t$r@_Dj$7$^$9!#\e(B
+
+@lisp
+(setq wl-score-folder-alist
+      '(("^-.*"
+         "news.SCORE"
+         "my.SCORE")
+        (".*"
+         "all.SCORE")))
+@end lisp
+
+\e$B%9%3%"%U%!%$%kL>$N%Q%9$r>JN,$7$?>l9g$O!"\e(B
+\e$BJQ?t\e(B @code{wl-score-files-dir} \e$B$G;XDj$7$?%G%#%l%/%H%j$K$"$k$b$N$H$7$^$9!#\e(B
+
+\e$B$^$?!"\e(B@code{wl-score-folder-alist} \e$B$N@_Dj$K4X$o$i$:\e(B
+\e$B%G%U%)%k%H$N%9%3%"%U%!%$%k\e(B @code{wl-score-default-file} (@file{all.SCORE})
\e$B$OI,$:FI$_9~$^$l$^$9\e(B(\e$B%U%!%$%k$,B8:_$7$F$$$J$/$F$b$+$^$$$^$;$s\e(B)\e$B!#\e(B
+\e$B$7$?$,$C$F!">e5-Nc$N\e(B @samp{^-.*} \e$B$K%^%C%A$7$?%U%)%k%@$G$O\e(B 
+@file{news.SCORE}, @file{my.SCORE}, @file{all.SCORE} \e$B$N\e(B3\e$B$D$N%9%3%"%U%!%$%k\e(B
+\e$B$,FI$_9~$^$l$k$3$H$K$J$j$^$9!#\e(B
+
+@subsection \e$B%9%3%"%U%!%$%k$NBP>]%a%C%;!<%8\e(B
+
+\e$B%9%3%"$O%5%^%j$N\e(B update \e$B;~$K0l;~E*$K\e(B @code{wl-summary-score-marks}
+\e$B$G;XDj$7$?%a%C%;!<%8$N$_$K$D$1$i$l$^$9!#\e(B
+\e$B$D$^$j%5%^%j$+$iH4$1$k$H%a%C%;!<%8$K$D$1$i$l$?%9%3%"$O>C5n$5$l!"\e(B
+\e$B%G%U%)%k%H$N%9%3%"CM$KLa$j$^$9!#\e(B
+
+@subsection \e$B%9%3%"%U%!%$%k$N:n@.\e(B
+
+\e$B$^$:%5%^%j%P%C%U%!$GE,Ev$J%a%C%;!<%8$K0\F0$7$F$+$i\e(B @kbd{L} \e$B$r%?%$%W$7$^\e(B
+\e$B$9!#$=$N8e%_%K%P%C%U%!$G$NF~NO$r5a$a$i$l$^$9$N$G!"$D$E$1$F\e(B @kbd{s},
+@kbd{s}, @kbd{p} \e$B$H%?%$%W$7$F$_$F$/$@$5$$!#$9$k$H\e(B Subject \e$B$NJ8;zNs$,F~NO\e(B
+\e$B$5$l$F$$$k>uBV$K$J$j$^$9$N$G!"E,Ev$KJT=8$7$?$N$A\e(B @kbd{@key{RET}} \e$B$r2!$7$^$9!#\e(B
+
+\e$B$3$l$G!"F~NO$7$?J8;zNs$HF1$8\e(B Subject \e$B$r;}$D%a%C%;!<%8$KBP$7$F%9%3%"\e(B 
+-1000 \e$B$,$D$1$i$l$k$h$&$K$J$j$^$9!#$D$^$j!"$3$N$h$&$J%9%3%"%U%!%$%k$,<+F0E*\e(B
+\e$B$K:n@.$5$l$?$3$H$K$J$j$^$9!#\e(B
+
+\e$B<!$K!"F1$8%5%^%j%P%C%U%!$G\e(B @kbd{h} @kbd{e} \e$B$H%?%$%W$7$F$/$@$5$$!#\e(B
+\e$B$9$k$H@h$[$I:n@.$7$?%9%3%"%U%!%$%k$,I=<($5$l$F$$$k$H;W$$$^$9!#\e(B
+\e$B$3$N%P%C%U%!$r%9%3%"JT=8%P%C%U%!$H8F$S$^$9!#\e(B
+\e$B$3$N%9%3%"JT=8%P%C%U%!$G\e(B @kbd{C-c C-e} \e$B$H%?%$%W$9$k$H!"\e(B
+\e$B%_%K%P%C%U%!$G@h$[$I$HF1$8$h$&$JF~NO$r5a$a$i$l$k$H;W$$$^$9$,!"\e(B
+\e$B$3$3$G\e(B @kbd{a} \e$B$H%?%$%W$7$F$/$@$5$$!#:#EY$O$9$0$K\e(B "From" \e$B$N%9%3%"%(%s%H%j$,A^\e(B
+\e$BF~$5$l$?$O$:$G$9!#\e(B
+\e$B$3$N$h$&$K$7$F%5%^%j%P%C%U%!$G$b%9%3%"JT=8%P%C%U%!$G$b\e(B
+\e$B%9%3%"%U%!%$%k$r4JC1$K:n@.$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$H$3$m$G!"%_%K%P%C%U%!$G$NF~NO;~$K\e(B @kbd{s s p} \e$B$^$?$O\e(B @kbd{a} \e$B$H%?%$%W$7$?$h$&$K!"\e(B
+\e$B%-!<%?%$%W?t$,0c$C$F$$$?$H;W$$$^$9!#\e(B
+\e$B$3$l$O!"\e(B@code{wl-score-header-default-entry} \e$B$N@_Dj$K$h$k$b$N$G$9!#\e(B
+\e$B$3$NJQ?t$G$O%X%C%@$K1~$8$?%G%U%)%k%H$N%9%3%"%(%s%H%j$r@_Dj$7$^$9!#\e(B
+\e$B$?$H$($P!"\e(B"subject" \e$B%X%C%@$G$O7?$H4|8B$K$D$$$F$NF~NO$r5a$a$^$9$,!"\e(B
+"from" \e$B%X%C%@$G$O7?$O\e(B substring, \e$B4|8B$O1JB3$K<+F0E*$K7hDj$5$l$^$9!#\e(B
+\e$B$?$@$7!"%9%3%"$NCM$O\e(B prefix argument \e$B$G6/@)E*$KJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$^$?!"%_%K%P%C%U%!$G$NF~NO;~$K\e(B @kbd{?} \e$B$H%?%$%W$9$k$3$H$G%-!<$H$=$l$KBP1~$9\e(B
+\e$B$k%X%C%@$d7?$r\e(B(help)\e$B$rI=<($7$^$9!#\e(B
+
+\e$B$G$O:G8e$K!"%9%3%"JT=8%P%C%U%!$G\e(B @kbd{C-c C-c} \e$B$HF~NO$7$F2<$5$$!#$3$l$G%9%3%"\e(B
+\e$B%U%!%$%k$rJ]B8$7$FJT=8%b!<%I$r=*N;$7$^$9!#%P%C%U%!$NFbMF$r>C5n$7$F$+$i\e(B 
+@kbd{C-c C-c} \e$B$9$k$HJT=8Cf$N%9%3%"%U%!%$%k$r:o=|$7$^$9!#\e(B
+
+@subsection TIPS
+
+@subsubsection \e$B%9%3%"%U%!%$%k$NA*Br\e(B
+
+@code{wl-summary-increase-score} \e$B$H\e(B @code{wl-summary-lower-score} \e$B$H$GDI\e(B
+\e$B2C$9$k%9%3%"%U%!%$%k$O\e(B @code{wl-score-change-score-file} \e$B$GJQ99$9$k$3$H\e(B
+\e$B$,$G$-$^$9!#\e(B
+
+@subsubsection \e$B%9%3%"$N2C;;\e(B
+
+@code{wl-summary-increase-score} \e$B$d\e(B @code{wl-summary-lower-score}\e$B!"\e(B
+@code{wl-score-edit-insert-entry} \e$B$GF1$8%(%s%H%j$rDI2C$7$?>l9g!"\e(B
+\e$B%9%3%"$,2C;;$5$l$^$9!#\e(B
+
+\e$B$?$H$($P!"\e(B@kbd{L a} \e$B$G%9%3%"$,\e(B -1000 \e$B$N\e(B @samp{from} \e$B%(%s%H%j$r:n@.$7$?8e!"\e(B
+\e$B:FEY\e(B @kbd{C-u 200 L a} \e$B$G%9%3%"$,\e(B -200 \e$B$N\e(B @samp{from} \e$B%(%s%H%j$r:n@.$9$k$H!"\e(B
+\e$B%9%3%"$,\e(B -1200 \e$B$N%(%s%H%j$,\e(B1\e$B$D:n@.$5$l$k$3$H$K$J$j$^$9!#\e(B
+
+@subsubsection Thread\e$B%-!<$N:n@.\e(B
+
+@code{wl-summary-increase-score} \e$B$+\e(B @code{wl-summary-lower-score} \e$B$G\e(B
+@samp{Thread}\e$B%-!<$r:n@.$9$k$H!";R%9%l%C%I$N\e(B @samp{Message-ID} \e$B$bA4$F\e(B
+\e$BDI2C$5$l$^$9!#\e(B
+
+@subsubsection Followup\e$B%-!<$N:n@.\e(B
+
+@code{wl-summary-increase-score} \e$B$+\e(B @code{wl-summary-lower-score} \e$B$G\e(B
+@samp{Followup}\e$B%-!<$r:n@.$9$k$H!"%+!<%=%k>e$N%a%C%;!<%8$N\e(B
+@samp{Message-ID} \e$B$b\e(B @samp{References} \e$B%-!<$KDI2C$5$l$^$9!#\e(B
+\e$B$b$7!"\e(B@code{wl-score-auto-make-followup-entry} \e$B$,\e(B non-nil \e$B$G$"$l$P\e(B
+@code{wl-score-expiry-days} \e$B$G;XDj$7$?F|$K$A0JFb$NA4\e(Bfollowup\e$BBP>]$N%a%C%;!<\e(B
+\e$B%8$N\e(B @samp{Message-ID} \e$B$,DI2C$5$l$^$9!#\e(B
+
+@subsection \e$B%-!<%P%$%s%I\e(B
+
+@table @kbd
+@item K
+@kindex K (Summary)
+@findex wl-summary-increase-score
+\e$B8=:_$N%a%C%;!<%8$N%9%3%"$r9b$/$7$^$9!#\e(B
+\e$BF1;~$K%9%3%"%(%s%H%j$,%9%3%"%U%!%$%k$KDI2C$5$l$^$9!#\e(B
+\e$B$^$?!"\e(Bprefix argument \e$B$G%9%3%"$NCM$r@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+
+@item L
+@kindex L (Summary)
+@findex wl-summary-lower-score
+\e$B8=:_$N%a%C%;!<%8$N%9%3%"$rDc$/$7$^$9!#\e(B
+\e$BF1;~$K%9%3%"%(%s%H%j$,%9%3%"%U%!%$%k$KDI2C$5$l$^$9!#\e(B
+\e$B$^$?!"\e(Bprefix argument \e$B$G%9%3%"$NCM$r@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+
+@item h R
+@kindex h R (Summary)
+@findex wl-summary-rescore
+\e$B%9%3%"$rE,MQ$7D>$7$^$9!#\e(B
+\e$B$?$@$7!"4{$K%9%3%"$,$D$1$i$l$F$$$k%a%C%;!<%8$K$O!"?7$?$K%9%3%"$O$D$-$^$;$s!#\e(B
+
+@item h c
+@kindex h c (Summary)
+@findex wl-score-change-score-file
+\e$B8=:_A*Br$7$F$$$k%9%3%"%U%!%$%k$rJQ99$7$^$9!#\e(B
+
+@item h e
+@kindex h e (Summary)
+@findex wl-score-edit-current-scores
+\e$B8=:_A*Br$7$F$$$k%9%3%"%U%!%$%k$rJT=8$7$^$9!#\e(B
+\e$B%9%3%"%U%!%$%k$,J#?t$"$k>l9g@h$K;XDj$5$l$?%U%!%$%k$,A*Br$5$l$^$9!#\e(B
+
+@item h f
+@kindex h f (Summary)
+@findex wl-score-edit-file
+\e$BG$0U$N%9%3%"%U%!%$%k$rJT=8$7!"$3$N%9%3%"%U%!%$%k$rA*Br$7$^$9!#\e(B
+
+@item h F
+@kindex h F (Summary)
+@findex wl-score-flush-cache
+\e$BFI$_9~$s$@%9%3%"%U%!%$%k$O0lC6%-%c%C%7%e$5$l$^$9$,!"$=$N%-%c%C%7%e$r>C5n$7$^$9!#\e(B
+Wanderlust \e$B0J30$GD>@\%9%3%"%U%!%$%k$rJQ99$7$?>l9g$O!"\e(B
+\e$B%-%c%C%7%e$r>C5n$7$F:FFI$_9~$_$9$kI,MW$,$"$j$^$9!#\e(B
+
+@item h m
+@kindex h m (Summary)
+@findex wl-score-set-mark-below
+\e$B4{FI%^!<%/$rIU$1$k\e(B(\e$BFI$s$@$3$H$K$9$k\e(B)\e$B%9%3%"4p=`CM$r@_Dj$7$^$9!#\e(B
+\e$B$3$NCM$h$j$b>.$5$J%9%3%"$,4{FI$K$J$j$^$9!#\e(B
+
+@item h x
+@kindex h x (Summary)
+@findex wl-score-set-expunge-below
+\e$B%5%^%j$+$i>C5n$9$k%9%3%"4p=`CM$r@_Dj$7$^$9!#\e(B
+\e$B$3$NCM$h$j$b>.$5$J%9%3%"$,>C5n$5$l$^$9!#\e(B
+\e$B>C5n$H$$$C$F$bI=<($5$l$J$$$@$1$G$"$j!"%5%^%j>pJs$d%U%)%k%@$+$i$O:o=|$5$l$^\e(B
+\e$B$;$s!#\e(B
+\e$B>C5n$5$l$?%a%C%;!<%8$O\e(B rescan-noscore \e$B$K$h$j:F$SI=<($9$k$3$H$,$G$-$^$9!#\e(B
+@end table
+
+@subsection \e$B%9%3%"JT=8%P%C%U%!$N%-!<%P%$%s%I\e(B
+
+@table @kbd
+@item C-c C-k
+@kindex C-c C-k (Score Mode)
+@findex wl-score-edit-kill
+\e$BJT=8Cf$N%U%!%$%k$rGK4~$7$^$9!#\e(B
+
+@item C-c C-c
+@kindex C-c C-c (Score Mode)
+@findex wl-score-edit-exit
+\e$BJT=8Cf$N%U%!%$%k$rJ]B8$7$F!"JT=8%b!<%I$r=*N;$7$^$9!#\e(B
+
+@item C-c C-p
+@kindex C-c C-p (Score Mode)
+@findex wl-score-pretty-print
+\e$B%9%3%"$re:No$KI=<($7D>$7$^$9!#\e(B
+
+@item C-c C-d
+@kindex C-c C-d (Score Mode)
+@findex wl-score-edit-insert-date
+\e$B5*85A0\e(B1\e$BG/\e(B12\e$B7n\e(B31\e$BF|$+$i$NF|?t$rA^F~$7$^$9!#\e(B
+\e$B4|8BIU$-$N%9%3%"$r:n$k$H$-$K4|8B$NMWAG\e(B(3\e$BHVL\\e(B)\e$B$K;HMQ$7$^$9!#\e(B
+
+@item C-c C-s
+@kindex C-c C-s (Score Mode)
+@findex wl-score-edit-insert-header
+\e$B%5%^%j%P%C%U%!$GA*Br$7$F$$$k%a%C%;!<%8$N%X%C%@$rA^F~$7$^$9!#\e(B
+
+@item C-c C-e
+@kindex C-c C-e (Score Mode)
+@findex wl-score-edit-insert-entry
+\e$B%5%^%j%P%C%U%!$GA*Br$7$F$$$k%a%C%;!<%8$N%9%3%"%(%s%H%j$rDI2C$7$^$9!#\e(B
+@end table
+
+@subsection \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item wl-summary-default-score
+@vindex wl-summary-default-score
+\e$B=i4|@_Dj$O\e(B 0\e$B!#\e(B
+\e$B%9%3%"$N%G%U%)%k%HCM$r@_Dj$7$^$9!#$3$NCM$r85$K%9%3%"$,2C8:$5$l$^$9!#\e(B
+
+@item wl-summary-important-above
+@vindex wl-summary-important-above
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B$3$NCM$h$jBg$-$$%9%3%"$KBP$7$F\e(B important\e$B%^!<%/\e(B(@samp{$}) \e$B$r$D$1$^$9!#\e(B
+nil \e$B$N>l9g$O%^!<%/$rIU$1$^$;$s!#\e(B
+
+@item wl-summary-temp-above
+@vindex wl-summary-temp-above
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B$3$NCM$h$jBg$-$$%9%3%"$KBP$7$F\e(B temp\e$B%^!<%/\e(B(@samp{*}) \e$B$r$D$1$^$9!#\e(B
+nil \e$B$N>l9g$O%^!<%/$rIU$1$^$;$s!#\e(B
+
+@item wl-summary-mark-below
+@vindex wl-summary-mark-below
+\e$B=i4|@_Dj$O\e(B 0\e$B!#\e(B
+\e$B$3$NCM$h$j>.$5$J%9%3%"$KBP$7$F4{FI%^!<%/$r$D$1$^$9\e(B(\e$BFI$s$@$3$H$K$7$^$9\e(B)\e$B!#\e(B
+
+@item wl-summary-expunge-below
+@vindex wl-summary-expunge-below
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B$3$NCM$h$j>.$5$J%9%3%"$O%5%^%j$+$i>C5n$7$^$9!#\e(B
+nil \e$B$N>l9g$O>C5n$7$^$;$s!#\e(B
+
+@item wl-summary-score-marks
+@vindex wl-summary-score-marks
+\e$B=i4|@_Dj$O\e(B '("N" "!" "U")\e$B!#\e(B
+\e$B%9%3%"$r$D$1$k%a%C%;!<%8$N%^!<%/$r;XDj$7$^$9!#\e(B
+
+@item wl-use-scoring
+@vindex wl-use-scoring
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i%9%3%"5!G=$rM-8z$K$7$^$9!#\e(B
+
+@item wl-score-files-dir
+@vindex wl-score-files-dir
+\e$B=i4|@_Dj$O\e(B "~/.elmo/"\e$B!#\e(B
+\e$B%9%3%"%U%!%$%k$r%G%U%)%k%H$N%G%#%l%/%H%j$r;XDj$7$^$9!#\e(B
+
+@item wl-score-interactive-default-score
+@vindex wl-score-interactive-default-score
+\e$B=i4|@_Dj$O\e(B 1000\e$B!#\e(B
+\e$B%9%3%"%U%!%$%k$G%9%3%"MWAG$,\e(B nil \e$B$N;~$KMQ$$$k%9%3%"$r;XDj$7$^$9!#\e(B
+\e$B$^$?!"\e(B@code{wl-summary-increase-score} \e$B$d\e(B @code{wl-summary-lower-score}
+\e$B$G$D$1$k%9%3%"CM$G$bMQ$$$i$l$^$9!#$?$@$7!"\e(B
+@code{wl-score-header-default-entry} \e$B$N%9%3%"CM$,\e(B nil \e$B$N;~!#\e(B
+
+@item wl-score-expiry-days
+@vindex wl-score-expiry-days
+\e$B=i4|@_Dj$O\e(B 7\e$B!#\e(B
+\e$B4|8BIU$-%9%3%"$r:o=|$9$kF|?t$r;XDj$7$^$9!#\e(B
+
+@item wl-score-update-entry-dates
+@vindex wl-score-update-entry-dates
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i4|8BIU$-%9%3%"$r:o=|$9$k5!G=$rM-8z$K$7$^$9!#\e(B
+
+@item wl-score-header-default-entry
+@vindex wl-score-header-default-entry
+@code{wl-summary-increase-score} \e$B$d\e(B @code{wl-summary-lower-score}\e$B!"\e(B
+@code{wl-score-edit-insert-entry} \e$B$G%9%3%"%(%s%H%j$r:n@.$9$k>l9g$N\e(B
+\e$B3F%X%C%@$N%G%U%)%k%HCM$r@_Dj$7$^$9!#\e(B
+
+@item wl-score-simplify-fuzzy-regexp
+@vindex wl-score-simplify-fuzzy-regexp
+\e$B%9%3%"%(%s%H%j$N7?$G\e(B fuzzy \e$B$r;XDj$7$?>l9g!"\e(B
+\e$BJ8;zNs$+$i:o=|$9$k@55,I=8=$r;XDj$7$^$9!#\e(B
+Subject \e$B$G;HMQ$5$l$k$3$H$,B?$$$N$G!"%G%U%)%k%H$G$O\e(B
+\e$B%a%$%j%s%0%j%9%H%W%m%0%i%`$G$D$1$i$l$k\e(B prefix \e$B$r;XDj$7$F$$$^$9!#\e(B
+
+@item wl-summary-rescore-partial-threshold
+@vindex wl-summary-rescore-partial-threshold
+\e$B=i4|@_Dj$O\e(B 200\e$B!#\e(B
+sync-all \e$B$d\e(B rescan \e$B$,<B9T$5$l$?$H$-$K!"$3$NCM$r1[$($k%a%C%;!<%8$,\e(B
+\e$B%5%^%j$K$"$k>l9g!"%5%^%j$N:G8e$+$i;XDj$5$l$??t$N%a%C%;!<%8$@$1!"\e(B
+\e$BItJ,E*$K%9%3%"IU$1$,E,MQ$5$l$^$9!#\e(B
+
+@item wl-summary-auto-sync-marks
+@vindex wl-summary-auto-sync-marks
+Non-nil \e$B$J$i$P!"%5%^%jF14|;~$KL$FI\e(B/\e$B=EMW%^!<%/$bF14|$7$^$9!#\e(B
+\e$BL$FI%^!<%/$O!"\e(BIMAP4 \e$B%5!<%P>e$NL$FI>pJs$,H?1G$5$l$^$9!#\e(B
+\e$B=EMW%^!<%/$O\e(B IMAP4 \e$B%5!<%P>e$N=EMW>pJs\e(B(Flagged \e$B%U%i%0$,$D$$$F$$$k$+\e(B)\e$B!"\e(B
+\e$B$*$h$S\e(B 'mark \e$B%U%)%k%@$NFbMF$,!"H?1G$5$l$^$9!#\e(B
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+@end table
+
+
+@node Score File Format,  , Score Commands, Scoring
+@section \e$B%9%3%"%U%!%$%k=q<0\e(B
+@cindex Score File Format
+
+\e$B%9%3%"%U%!%$%k$N=q<0$O\e(B Gnus \e$B$HF1$8$J$N$G!"\e(BGnus \e$B$G;HMQ$7$F$$$?\e(B
+\e$B%9%3%"%U%!%$%k$,$=$N$^$^MxMQ$G$-$^$9!#\e(B
+\e$B$?$@$7!"4v$D$+$N%-!<$OBP1~$7$F$$$J$+$C$?$j\e(B Wanderlust \e$BFCM-$N%-!<$,$"$C$?$j\e(B
+\e$B$7$^$9$N$G!"40A4$K8_49@-$,$"$k$o$1$G$O$"$j$^$;$s!#\e(B
+
+@example
+(("subject"
+  ("for sale" -1000 nil s)
+  ("\e$BLY$1\e(B" -1000 nil s))
+ ("from"
+  ("spam@@spamspamspam" -10000 nil s))
+ ("followup"
+  ("my@@address" 3001 nil s))
+ ("chars"
+  (1000000 -10 nil >))
+ (important 5000)
+ (temp 3000)
+ (mark 0)
+ (expunge -3000))
+@end example
+
+@table @code
+@item \e$BJ8;zNs\e(B (STRING)
+\e$B%-!<$,J8;zNs$G$"$k>l9g!"%^%C%A$5$;$k%X%C%@$NL>A0$r;XDj$7$^$9!#\e(B
+\e$B$3$N%-!<$K$O<!$N$b$N$,;XDj$G$-$^$9!#\e(B
+@code{Subject}, @code{From}, @code{Date}, @code{Message-Id},
+@code{References}, @code{To}, @code{Cc}, @code{Chars}, @code{Lines},
+@code{Xref}, @code{Extra}, @code{Followup}, @code{Thread}
+\e$B$3$NCf$G!"\e(B@code{Chars} \e$B$O%a%C%;!<%8$N%5%$%:$r;X$7!"\e(B@code{Extra},
+@code{Followup}, @code{Thread} \e$B$K$D$$$F$O8e=R$7$^$9!#\e(B
+\e$B;D$j$O%-!<$HF1$8L>A0$N%U%#!<%k%I$,BP>]$H$J$j$^$9!#\e(B
+
+\e$B$3$N%-!<$N8e$K%9%3%"%(%s%H%j$rG$0U$N?t$@$1;XDj$7!"\e(B
+\e$B$3$N3F%9%3%"%(%s%H%j$O<!$N\e(B5\e$B$D$NMWAG$+$i$J$j$^$9!#\e(B
+
+@enumerate
+@item
+\e$B%X%C%@$K%^%C%A$9$kMWAG!#\e(B"lines" \e$B$H\e(B "chars" \e$B$N>l9g$O?t;z$G!"$=$l0J30$OJ8;z\e(B
+\e$BNs$r;XDj$7$^$9!#\e(B
+
+@item
+\e$B%9%3%"MWAG!##1HVL\$NMWAG$,%^%C%A$7$?>l9g!"$=$N%a%C%;!<%8$N%9%3%"$r$3$NCMJ,\e(B
+\e$BA}8:$5$;$^$9!#\e(B
+
+@item
+\e$B4|8B$NMWAG!#\e(Bnil \e$B$J$i1JB3\e(B(permanent)\e$B;XDj$G!"\e(B
+\e$B?t;z\e(B(\e$BF|?t\e(B)\e$B$J$i0lDj4|4V\e(B(@code{wl-score-expiry-days})\e$B%^%C%A$7$J$$$H:o=|$5$l$^$9!#\e(B
+\e$B$3$NF|?t$O5*85A0\e(B1\e$BG/\e(B12\e$B7n\e(B31\e$BF|$+$i7P2a$7$?F|$K$A$G$9!#\e(B
+
+@item
+\e$B7?$NMWAG!##1HVL\$NMWAG$r%^%C%A$5$;$kJ}K!$r;XDj$7$^$9!#\e(B
+\e$B%-!<$K$h$C$F;XDj$G$-$k7?$,0[$J$j$^$9!#\e(B
+
+@table @dfn
+@item From, Subject, References, Message-Id
+\e$B$3$l$i$NJ8;zNs$N%-!<$KBP$7$F$O!"\e(B@code{r} \e$B$H\e(B @code{R} (\e$B@55,I=8=\e(B) (regexp) 
+\e$B$d!"\e(B@code{s} \e$B$H\e(B @code{S} (\e$BJ8;zNs$N0lIt\e(B) (substring)\e$B!"\e(B@code{e} \e$B$H\e(B 
+@code{E} (\e$B@53N$J9gCW\e(B) (exact match)\e$B!"$=$l$K\e(B @code{f} \e$B$H\e(B @code{F}
+(\e$B$"$$$^$$\e(B) (fuzzy) \e$B$,;XDj$G$-$^$9!#\e(B
+@code{R}, @code{S}, @code{E}, @code{F} \e$B$OBgJ8;z>.J8;z$r6hJL$7$F%^%C%A$5$;$^$9!#\e(B
+
+@item Lines, Chars
+\e$B$3$l$i$O?t;z$NBg>.$r;XDj$7$^$9!#$=$N5-9f$O<!$N\e(B5\e$B$D$G$9!#\e(B
+@code{<}, @code{>}, @code{=}, @code{>=}, @code{<=}
+
+@item Followup
+\e$B$3$N%-!<$O!"\e(B@code{From}\e$B%X%C%@!<$K%^%C%A$7!"\e(B
+\e$B$=$N%a%C%;!<%8$X$NA4$F$N%U%)%m!<%"%C%W$KBP$7$F%9%3%"$r$D$1$^$9!#\e(B
+\e$B$?$H$($P!"<+J,<+?H$N5-;v$X$N%U%)%m!<%"%C%W$N%9%3%"$rA}$d$7$?$j$9$k$N$KJXMx$G$9!#\e(B
+
+@code{f} \e$B$r=|$$$F\e(B @code{From} \e$B%-!<$HF1$87?$,;XDj=PMh$^$9!#\e(B
+\e$B$^$?!"<+F0E*$K%9%3%"%U%!%$%k$K\e(B @samp{Followup} \e$B%(%s%H%j$,DI2C$5$l$^$9!#\e(B
+
+@item Thread
+\e$B$3$N%-!<$O!"\e(B@code{Message-ID} @var{x} \e$B$G;O$^$C$F$$$k\e(B(\e$B%5%V\e(B)\e$B%9%l%C%I$K%9%3%"$rIU$1$k>l9g$K;XDj$7$^$9!#\e(B
+\e$B$3$l$O\e(B @code{References} \e$B%X%C%@!<$K\e(B @var{x} \e$B$r;}$D$=$l$>$l$N5-;v$K?7$7$$\e(B
+@samp{Thread} \e$B%(%s%H%j$r<+F0E*$KDI2C$7$^$9!#\e(B
+\e$B$3$l$K$h$j!"A4$F$NAD@h$N\e(B @code{Message-ID} \e$B$r\e(B @code{References} \e$B$K4^$s$G$$$J$$>l9g$G$b!"\e(B
+\e$B3N<B$K%9%l%C%IA4BN$N%9%3%"$rA}8:$5$;$k$3$H$,$G$-$^$9!#\e(B
+
+@code{f} \e$B$r=|$$$F\e(B @code{References} \e$B%-!<$HF1$87?$,;XDj=PMh$^$9!#\e(B
+\e$B$^$?!"<+F0E*$K%9%3%"%U%!%$%k$K\e(B @samp{Thread} \e$B%(%s%H%j$,DI2C$5$l$^$9!#\e(B
+@end table
+
+@item
+\e$B3HD%%X%C%@$NMWAG!#%-!<$,\e(B @code{Extra} \e$B$G$"$k>l9g$N$_0UL#$r;}$A$^$9!#\e(B
+@code{Subject} \e$B$d\e(B @code{From} \e$B$J$I$NI8=`0J30$N%X%C%@$K%^%C%A$5$;$?$$>l9g$K\e(B
+\e$B$=$N%X%C%@$r;XDj$7$^$9!#\e(B
+\e$B$?$@$7!";XDj$7$?%X%C%@$O\e(B @code{elmo-msgdb-extra-fields} \e$B$K$b@_Dj$9$kI,MW$,$"$j$^$9!#\e(B
+\e$B$7$?$,$C$F!"3HD%%X%C%@$,<hF@$G$-$J$$%U%)%k%@$G$O5!G=$7$^$;$s!#\e(B
+
+@end enumerate
+
+\e$B$=$7$F$3$l$i$N\e(B@emph{\e$BA4$F$NMWAG$rEv$F$O$a$?8e$N\e(B}\e$B9g7W$N%9%3%"$,$=$N%a%C%;!<\e(B
+\e$B%8$N%9%3%"$H$J$j$^$9!#\e(B
+
+@cindex Score File Atoms
+@item mark
+\e$B$3$NCM$h$j>.$5$$%9%3%"$N%a%C%;!<%8$K$O4{FI%^!<%/$r$D$1$^$9!#\e(B
+\e$B%G%U%)%k%HCM$O\e(B @code{wl-summary-mark-below} \e$B$G;XDj$5$l$^$9!#\e(B
+
+@item expunge
+\e$B$3$NCM$h$j>.$5$$%9%3%"$N%a%C%;!<%8$O%5%^%j$+$i>C5n$7$^$9!#\e(B
+\e$B%G%U%)%k%HCM$O\e(B @code{wl-summary-expunge-below} \e$B$G;XDj$5$l$^$9!#\e(B
+
+@item mark-and-expunge
+@code{mark} \e$B$H\e(B @code{expunge} \e$B$rF1;~$K;XDj$7$^$9!#\e(B
+\e$B$D$^$j!"$3$NCM$h$j>.$5$$%9%3%"$N%a%C%;!<%8$O4{FI%^!<%/$r$D$1!"%5%^%j$+$i>C5n$7$^$9!#\e(B
+
+@item temp
+\e$B$3$NCM$h$jBg$-$$%9%3%"$N%a%C%;!<%8$K$O\e(B temp \e$B%^!<%/$r$D$1$^$9!#\e(B
+\e$B%G%U%)%k%HCM$O\e(B @code{wl-summary-temp-above} \e$B$G;XDj$5$l$^$9!#\e(B
+
+@item important
+\e$B$3$NCM$h$jBg$-$$%9%3%"$N%a%C%;!<%8$K$O\e(B important \e$B%^!<%/$r$D$1$^$9!#\e(B
+\e$B%G%U%)%k%HCM$O\e(B @code{wl-summary-important-above} \e$B$G;XDj$5$l$^$9!#\e(B
+@end table
+
+@subsection \e$BCm0U;v9`\e(B
+
+@code{extra} \e$B%-!<$O$b$A$m$s!"\e(B@code{lines} \e$B$H\e(B @code{xref} \e$B%-!<$r;HMQ$9$k\e(B
+\e$B>l9g$G$b!"\e(B@code{elmo-msgdb-extra-fields} \e$B$r@_Dj$9$kI,MW$,$"$j$^$9!#\e(B
+
+@lisp
+(setq elmo-msgdb-extra-fields '("lines" "xref"))
+@end lisp
+
+\e$B$=$NB>!"2<5-$N@)8B;v9`$,$"$j$^$9!#\e(B
+
+@itemize @bullet
+@item \e$B%5%^%j>pJs$K4^$^$l$k\e(B@samp{References}\e$B%U%#!<%k%I$K$O:G8e$N\e(B
+@samp{Message-ID}\e$B$7$+B8:_$7$J$$$?$a!"\e(B@code{references}\e$B%-!<$b$=$N\e(B
+@samp{Message-ID}\e$B$K$7$+%^%C%A$7$J$$!#\e(B
+@end itemize
+
+\e$B%U%)%k%@<oJL$K$h$j;2>H$G$-$k%-!<$N0lMw!#\e(B
+
+@example
+                        chars lines xref  extra
+localdir,localnews      \e$B!{\e(B    \e$B"$\e(B    \e$B"$\e(B    \e$B"$\e(B
+nntp (xover\e$BBP1~\e(B)        \e$B!{\e(B    \e$B"$\e(B    \e$B"$\e(B    \e$B!_\e(B
+     (xover\e$BHsBP1~\e(B)      \e$B!_\e(B    \e$B"$\e(B    \e$B"$\e(B    \e$B"$\e(B
+imap4                   \e$B!{\e(B    \e$B"$\e(B    \e$B"$\e(B    \e$B"$\e(B
+pop3                    \e$B!_\e(B    \e$B"$\e(B    \e$B"$\e(B    \e$B"$\e(B
+
+                \e$B!{\e(B: \e$B;2>H$G$-$k\e(B
+                \e$B!_\e(B: \e$B;2>H$G$-$J$$\e(B(\e$BL5;k$5$l$k\e(B)
+                \e$B"$\e(B: @code{elmo-msgdb-extra-fields} \e$B$r@_Dj$9$l$P;2>H$G$-$k\e(B
+@end example
+
+
+@c
+@c  Customization
+@c
+@node Customization, Mailing List, Scoring, Top
+@chapter Wanderlust \e$B$N%+%9%?%^%$%:\e(B
+@cindex Customization
+
+@menu
+* Living with other packages::  \e$B%Q%C%1!<%8$N$"$k@83h\e(B
+* Highlights::                  \e$B%O%$%i%$%H$N@_Dj\e(B
+* Advanced Settings::           \e$B%+%9%?%^%$%:!A1~MQJT!A\e(B
+* Customizable Valiables::      \e$B$=$NB>$N%+%9%?%^%$%:JQ?t0lMw\e(B
+@end menu
+
+
+@node Living with other packages, Highlights, Customization, Customization
+@section \e$B%Q%C%1!<%8$N$"$k@83h\e(B
+
+\e$BB>$N%Q%C%1!<%8$r;H$&$?$a$N@_DjNc$G$9!#\e(B
+
+@menu
+* BBDB::                        BBDB
+* supercite::                   supercite.el
+* mu-cite::                     mu-cite.el
+* x-face-mule::                 x-face-mule.el
+* dired-dd::                    dired-dd.el
+@end menu
+
+
+@node BBDB, supercite, Living with other packages, Living with other packages
+@subsection bbdb.el
+@pindex BBDB
+
+@file{util/bbdb-wl.el} \e$B$r\e(B load-path \e$B$K$*$$$F0J2<$N$h$&$K@_Dj$9$l$P\e(B OK \e$B$G$9!#\e(B
+
+\e$B%$%s%9%H!<%k;~$K\e(B load-path \e$B>e$K\e(B BBDB \e$B$,$"$l$P!"\e(B
+@file{bbdb-wl.el} \e$B$O%P%$%H%3%s%Q%$%k\e(B/\e$B%$%s%9%H!<%k$5$l$^$9!#\e(B
+@xref{Install}.
+
+@lisp
+(require 'bbdb-wl)
+
+(bbdb-wl-setup)
+;; @r{\e$B%]%C%W%"%C%WI=<(\e(B}
+(setq bbdb-use-pop-up t)
+;; @r{\e$B<+F0<}=8\e(B}
+(setq bbdb/mail-auto-create-p t)
+(setq signature-use-bbdb t)
+(setq bbdb-north-american-phone-numbers-p nil)
+;; @r{\e$B%5%^%j$K\e(B bbdb \e$B$NL>A0$rI=<(\e(B} :-)\e$B!#\e(B
+(setq wl-summary-from-func 'bbdb-wl-from-func)
+;; @r{\e$B<+F0E*$K\e(B ML \e$B%U%#!<%k%I$r2C$($k\e(B}
+(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook)
+(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0))))
+@end lisp
+
+
+@node supercite, mu-cite, BBDB, Living with other packages
+@subsection sc.el(supercite), sc-register.el
+@pindex sc
+@pindex supercite
+
+\e$B$U$D$&$N\e(B mailer \e$B$HF1$8@_Dj$G\e(B OK \e$B$G$9!#0J2<$O!"@_Dj$N0lNc$G$9!#\e(B
+
+@lisp
+(autoload 'sc-cite-original "sc" nil t)
+(setq mail-yank-hooks 'sc-cite-original)
+(setq sc-preferred-header-style 1)
+(setq sc-electric-references-p nil)
+(setq sc-citation-leader "")
+(setq sc-load-hook '(lambda () (require 'sc-register)))
+(setq sc-preferred-attribution 'registeredname)
+@end lisp
+
+
+@node mu-cite, x-face-mule, supercite, Living with other packages
+@subsection mu-cite.el
+@pindex mu-cite
+
+\e$B$U$D$&$N\e(B mailer \e$B$HF1$8@_Dj$G\e(B OK \e$B$G$9!#0J2<$O!"@_Dj$N0lNc$G$9!#\e(B
+
+mu-cite 8.0\e$B0JA0$N%P!<%8%g%s$r$*;H$$$J$i!"\e(B
+\e$B0J2<$N$h$&$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@lisp
+(autoload 'mu-cite/cite-original "mu-cite" nil t)
+(setq mail-citation-hook 'mu-cite/cite-original)
+@end lisp
+
+mu-cite 8.1\e$B0J9_$N%P!<%8%g%s$r$*;H$$$J$i!"\e(B
+\e$B0J2<$N$h$&$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@lisp
+(autoload 'mu-cite-original "mu-cite" nil t)
+(add-hook 'mail-citation-hook (function mu-cite-original))
+@end lisp
+
+@node x-face-mule, dired-dd, mu-cite, Living with other packages
+@subsection x-face-mule.el
+@pindex x-face-mule
+@pindex bitmap-mule
+
+x-face-mule \e$B$N%P!<%8%g%s$K$h$C$F@_Dj$,0[$J$j$^$9!#\e(B
+
+x-face-mule 0.19\e$B0JA0$N%P!<%8%g%s$r$*;H$$$J$i!"\e(B
+\e$B0J2<$N$h$&$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@lisp
+(setq wl-highlight-x-face-func
+      (function
+       (lambda (beg end)
+        (x-face-mule:x-face-decode-message-header))))
+(require 'x-face-mule)
+@end lisp
+
+x-face-mule 0.20 \e$B0J9_$N%P!<%8%g%s$r$*;H$$$J$i!"\e(B
+\e$B0J2<$N$h$&$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@lisp
+(setq wl-highlight-x-face-func
+      (function
+       (lambda (beg end)
+        (x-face-mule-x-face-decode-message-header))))
+(require 'x-face-mule)
+@end lisp
+
+bitmap-mule 8.0\e$B0J9_$KIUB0$N\e(B @file{x-face-mule.el}
+\e$B$r$*;H$$$K$J$k>l9g$O0J2<$N$h$&$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@lisp
+(autoload 'x-face-decode-message-header "x-face-mule")
+(setq wl-highlight-x-face-func
+      (function x-face-decode-message-header))
+@end lisp
+
+Encode \e$B:Q$_$N\e(B X-Face \e$BJ8;zNs$r\e(B @file{~/.xface}
+(\e$BJQ?t\e(B @code{wl-x-face-file} \e$B$NCM$G$9\e(B)\e$B$NFbMF$KMQ0U$7$F$*$/$H!"\e(B
+\e$B%I%i%U%H$,=`Hw$5$l$k$H$-$K<+F0E*$K\e(B X-Face\e$B%U%#!<%k%I$H$7$FA^F~$5$l$^$9!#\e(B
+(\e$BJQ?t\e(B @code{wl-auto-insert-x-face} \e$B$,\e(B non-nil \e$B$N>l9g\e(B)
+
+
+@node dired-dd,  , x-face-mule, Living with other packages
+@subsection dired-dd(Dired-DragDrop)
+@pindex Dired-DragDrop
+@pindex Dired-DD
+@cindex Drag and Drop
+
+dired-dd \e$B%Q%C%1!<%8$K4^$^$l$k\e(B @file{dired-dd-mime.el} \e$B$rAH$_9~$a$P!"\e(BGNU Emacs
+\e$B$GJT=8Cf$NAp9F%P%C%U%!$X\e(B dired \e$B$+$i\e(B Drag&Drop \e$B$9$k$@$1$G4JC1$K%^%k%A%Q!<\e(B
+\e$B%H$r:n@.$G$-$^$9\e(B(\e$B$b$C$H$b!"\e(BWanderlust \e$B@lMQ$G$O$J$/\e(B tm/SEMI \e$BHFMQ$G$9$,\e(B)\e$B!#\e(B
+
+@lisp
+;; @r{dired-dd:} http://www.asahi-net.or.jp/~pi9s-nnb/dired-dd-home.html
+(add-hook 'dired-load-hook
+          (function
+           (lambda ()
+             (load "dired-x")
+             ;; @r{Set dired-x variables here.}
+             ;; @r{To and flo@dots{}}
+             (if window-system
+                 (progn (require 'dired-dd)
+                        (require 'dired-dd-mime))))))
+@end lisp
+
+
+@node Highlights, Advanced Settings, Living with other packages, Customization
+@section \e$B%O%$%i%$%H$N@_Dj\e(B
+
+@subsection \e$B%+%9%?%^%$%:JQ?t\e(B
+
+@table @code
+@item  wl-summary-highlight
+@vindex wl-summary-highlight
+\e$B=i4|@_Dj$O\e(B t\e$B!#%5%^%j$N%O%$%i%$%H$r9T$&$+$I$&$+!#\e(B
+Non-nil \e$B$J$i%5%^%j$N%O%$%i%$%H$r9T$$$^$9!#\e(B
+
+@item  wl-highlight-max-summary-lines
+@vindex wl-highlight-max-summary-lines
+\e$B=i4|@_Dj$O\e(B 10000\e$B!#\e(B
+\e$B%5%^%j$N9T?t$,$3$NCM$h$jBg$-$$>l9g!"%5%^%j$N%O%$%i%$%H$r9T$$$^$;$s!#\e(B
+
+@item  wl-summary-highlight-partial-threshold
+@vindex wl-summary-highlight-partial-threshold
+\e$B=i4|@_Dj$O\e(B 1000\e$B!#\e(B
+\e$B%5%^%jA4BN$r%O%$%i%$%H$9$k$+$I$&$+$NogCM!#\e(B
+\e$B$3$NCM$r1[$($k9T?t$N%a%C%;!<%8$,%5%^%j$KB8:_$9$k>l9g!"\e(B
+\e$BItJ,E*$J%O%$%i%$%H$r9T$$$^$9!#\e(B
+
+@item  wl-summary-partial-highlight-above-lines
+@vindex wl-summary-partial-highlight-above-lines
+\e$B=i4|@_Dj$O\e(B 30\e$B!#\e(B
+@code{wl-summary-highlight-partial-threshold}\e$B$r1[$($k9T?t$N%a%C%;!<%8$,\e(B
+\e$B%5%^%j$KB8:_$9$k>l9g!"%P%C%U%!Kv$+$i!"%+!<%=%k9T$h$j$3$NCM$N9T?tJ,$@$1\e(B
+\e$B>e$N%a%C%;!<%8$^$GItJ,E*$J%O%$%i%$%H$,9T$J$o$l$^$9!#\e(B
+(\e$B$3$NCM$r\e(B nil \e$B$K$9$k$H%P%C%U%!Kv$+$i\e(B
+ @code{wl-summary-highlight-partial-threshold}\e$B9TJ,$@$1%O%$%i%$%H$5$l$k\e(B
\e$B$h$&$K$J$j$^$9!#\e(B)
+
+@item wl-highlight-body-too
+@vindex  wl-highlight-body-too
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i%I%i%U%H$*$h$S%a%C%;!<%8$NK\J8$b%O%$%i%$%H$NBP>]$H$7$^$9!#\e(B
+
+@item  wl-highlight-message-header-alist
+@vindex wl-highlight-message-header-alist
+\e$B%I%i%U%H$*$h$S%a%C%;!<%8$N%X%C%@$N%O%$%i%$%H$r9T$&:]$K!"\e(B
+\e$B=EMW\e(B (@code{wl-highlight-message-important-header-contents})\e$B$J!"\e(B
+\e$BFsHVL\$K=EMW\e(B (@code{wl-highlight-message-important-header-contents2})\e$B$J!"\e(B
+\e$B$=$7$F=EMW$G$O$J$$\e(B (@code{wl-highlight-message-unimportant-header-contents})
+\e$B$3$H$rI=$9\e(B face \e$B$r$=$l$>$l$I$N%a%C%;!<%8%X%C%@$K3d$jEv$F$k$+$r@_Dj$7$^$9!#\e(B
+\e$BF1MM$K!"G$0U$N@55,I=8=$KBP$7$FG$0U$N\e(Bface\e$B$r3d$jEv$F$k$3$H$b$G$-$^$9!#\e(B
+
+@item wl-highlight-citation-prefix-regexp
+@vindex  wl-highlight-citation-prefix-regexp
+\e$B%I%i%U%H$*$h$S%a%C%;!<%8$NK\J8Fb$N0zMQ9T$r<($9@55,I=8=$r;XDj$7$^$9!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$7$?K\J8$O!"\e(B
+(@code{wl-highlight-message-cited-text-*})\e$B$G;XDj$5$l$k\e(Bface\e$B$G%O%$%i%$%H$5$l$^$9!#\e(B
+
+@item  wl-highlight-highlight-citation-too
+@vindex wl-highlight-highlight-citation-too
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i\e(B@code{wl-highlight-citation-prefix-regexp}\e$B$GM?$($i$l$k\e(B
+\e$B0zMQ9T$N0zMQ$r<($9@55,I=8=<+BN$b%O%$%i%$%H$NBP>]$H$7$^$9!#\e(B
+
+@item  wl-highlight-citation-header-regexp
+@vindex wl-highlight-citation-header-regexp
+\e$B0zMQ$r;O$a$k$3$H$r<($9%X%C%@$N@55,I=8=$r;XDj$7$^$9!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$7$?K\J8$O!"\e(B
+@code{wl-highlight-message-headers}\e$B$G;XDj$5$l$k\e(Bface\e$B$G%O%$%i%$%H$5$l$^$9!#\e(B
+
+@item  wl-highlight-max-message-size
+@vindex wl-highlight-max-message-size
+\e$B=i4|@_Dj$O\e(B 10000\e$B!#\e(B
+\e$B%a%C%;!<%8$,$3$NCM$h$jBg$-$$>l9g!"%a%C%;!<%8$N%O%$%i%$%H$r9T$$$^$;$s!#\e(B
+\e$B$3$l$K$h$j\e(Buuencode\e$B$dHs>o$KBg$-$J%@%$%8%'%9%H$J$I$N\e(B
+\e$B%O%$%i%$%H$NM^;_$r9T$$$^$9!#\e(B
+
+@item  wl-highlight-signature-separator
+@vindex wl-highlight-signature-separator
+\e$B%7%0%K%A%c$N6-3&$rI=$9@55,I=8=$r;XDj$7$^$9!#\e(B
+\e$B@55,I=8=$G$b!"@55,I=8=$N%j%9%H$G$b9=$$$^$;$s!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$7$?>l=j0J9_$N%a%C%;!<%8$O!"\e(B
+@code{wl-highlight-message-signature}\e$B$G;XDj$5$l$k\e(Bface\e$B$G%O%$%i%$%H$5$l$^$9!#\e(B
+
+@item  wl-max-signature-size
+@vindex wl-max-signature-size
+\e$B=i4|@_Dj$O\e(B 400\e$B!#\e(B
+\e$B%7%0%K%A%c$r%O%$%i%$%H$9$k>l9g!"\e(B
+\e$B%O%$%i%$%H$9$k:GBg$N%7%0%J%A%c$NBg$-$5$r;XDj$7$^$9!#\e(B
+
+@item wl-use-highlight-mouse-line
+@vindex  wl-use-highlight-mouse-line
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i%U%)%k%@%b!<%I!"%5%^%j%b!<%I$J$I$G\e(B
+\e$B%^%&%9%]%$%s%?$N9T$r%O%$%i%$%H$NBP>]$H$7$^$9!#\e(B
+@end table
+
+@subsection \e$BJ8;z$N?'!"%U%)%s%H$N@_Dj\e(B
+
+\e$BJ8;z$N?'$d!"%U%)%s%H$rJQ$($k$K$O!"\e(BWanderlust \e$B$GDj5A$5$l$F$$$k\e(B face \e$B$rJQ99\e(B
+\e$B$9$kI,MW$,$"$j$^$9!#%U%)%s%H$rJQ$($?$$$H$-$O\e(B set-face-font\e$B!"?'$rJQ$($?$$$H\e(B
+\e$B$-$O\e(B set-face-foreground \e$B$J$I$r;H$($P$h$$$G$7$g$&!#\e(Bface \e$B$N@_Dj$O\e(B @file{.emacs} \e$B$K\e(B
+\e$B=q$/$3$H$O$G$-$J$$$N$G\e(B @file{~/.wl} \e$B$K=q$$$F$/$@$5$$!#\e(B
+
+\e$B$?$H$($P!"%7%0%K%A%c$N?'$r2+?'$KJQ$($?$$$H$-$O!"\e(B
+
+@lisp
+(set-face-foreground 'wl-highlight-message-signature "yellow")
+@end lisp
+
+@noindent
+\e$B$r\e(B @file{~/.wl} \e$B$K=q$-$^$9!#\e(B
+
+\e$B0J2<$K\e(B Wanderlust \e$B$GDj5A$5$l$F$$$k\e(B face \e$B$K$D$$$F@bL@$7$^$9!#\e(B
+
+@table @code
+@item wl-highlight-message-headers
+\e$B%a%C%;!<%8%X%C%@$NL>A0ItJ,$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-message-header-contents
+\e$B%a%C%;!<%8%X%C%@$NFbMFItJ,$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-message-important-header-contents
+\e$B%a%C%;!<%8%X%C%@$NFbMF$N$&$A=EMW$JItJ,$N\e(B face \e$B$G$9!#\e(B
+\e$B%G%U%)%k%H$G$O!"\e(BSubject \e$B$NFbMFItJ,$,@_Dj$5$l$F$$$^$9!#\e(B
+\e$B$3$NCM$O\e(B @code{wl-highlight-message-header-alist}
\e$B$rJQ99$9$l$PJQ$($k$3$H$,$G$-$^$9!#\e(B
+
+@item wl-highlight-message-important-header-contents2
+\e$B%a%C%;!<%8%X%C%@$NFbMF$N$&$A=EMW$JItJ,$N\e(B face \e$B$=$N#2$G$9!#\e(B
+\e$B%G%U%)%k%H$G$O!"\e(BFrom \e$B$H\e(B To \e$B$NFbMFItJ,$,@_Dj$5$l$F$$$^$9!#\e(B
+\e$B$3$NCM$O\e(B @code{wl-highlight-message-header-alist}
\e$B$rJQ99$9$l$PJQ$($k$3$H$,$G$-$^$9!#\e(B
+
+@item wl-highlight-message-unimportant-header-contents
+\e$B%a%C%;!<%8%X%C%@$NFbMF$N$&$A=EMW$G$O$J$$ItJ,$N\e(B face \e$B$G$9!#\e(B
+\e$B%G%U%)%k%H$G$O!"\e(BX- \e$B$G;O$^$k%X%C%@$H\e(B User-Agent \e$B$NFbMFItJ,$,@_Dj$5$l$F$$$^$9!#\e(B
+\e$B$3$NCM$O\e(B @code{wl-highlight-message-header-alist}
\e$B$rJQ99$9$l$PJQ$($k$3$H$,$G$-$^$9!#\e(B
+
+@item wl-highlight-message-citation-header
+\e$B%a%C%;!<%8$N0zMQ%X%C%@ItJ,$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-message-cited-text-*
+\e$B%a%C%;!<%8$N0zMQ%F%-%9%HItJ,$N\e(B face \e$B$G$9!#\e(B
+\e$B:G8e$K$O?t;z$,$D$-!"\e(B10 \e$BCJ3,$^$G0zMQ$4$H$K?'J,$1$G$-$k$h$&$K$7$F$$$^$9!#\e(B
+
+@item wl-highlight-message-signature
+\e$B%a%C%;!<%8$N%7%0%K%A%cItJ,$N\e(B face \e$B$G$9!#\e(B
+\e$B=i4|@_Dj$O!"L@?'%P%C%/$G$O\e(B khaki \e$B0E?'%P%C%/$G$O\e(B DarkSlateBule \e$B$G$9!#\e(B
+
+@item wl-highlight-header-separator-face
+\e$B%I%i%U%H$N%a%C%;!<%8$N%X%C%@%;%Q%l!<%?$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-important-face
+\e$B%5%^%j$G=EMW%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-new-face
+\e$B%5%^%j$G?75,%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-displaying-face
+\e$B%5%^%j$G8=:_I=<(Cf$N%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+\e$B$3$N\e(B face \e$B$O\e(B overlay \e$B$5$l$^$9!#\e(B
+
+@item wl-highlight-thread-indent-face
+\e$B%5%^%j$G8=:_I=<(Cf$N%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-unread-face
+\e$B%5%^%j$GL$FI%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-deleted-face
+\e$B%5%^%j$G:o=|%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-refiled-face
+\e$B%5%^%j$G%j%U%!%$%k%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-refile-destination-face
+\e$B%5%^%j$G%j%U%!%$%k%^!<%/$NIU$$$?%a%C%;!<%89T$N!"\e(B
+\e$B%j%U%!%$%k@h>pJs$NItJ,$K$D$/\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-copied-face
+\e$B%5%^%j$G%3%T!<%^!<%/$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-target-face
+\e$B%5%^%j$G0l;~=hM}MQ%^!<%/\e(B @samp{*} \e$B$N$D$$$?%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-thread-top-face
+\e$B%5%^%j$G%9%l%C%I%H%C%W$N%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-summary-normal-face
+\e$B%5%^%j$G%9%l%C%I%H%C%W$G$O$J$$%a%C%;!<%89T$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-unknown-face
+\e$B%U%)%k%@%b!<%I$G!"$$$/$DL$F14|%a%C%;!<%8$,$"$k$+$o$+$i$J$$%U%)%k%@$N\e(B
+ face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-zero-face
+\e$B%U%)%k%@%b!<%I$G!"L$F14|%a%C%;!<%8$,$J$$%U%)%k%@$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-few-face
+\e$B%U%)%k%@%b!<%I$G!"L$F14|%a%C%;!<%8$,$9$3$7$"$k%U%)%k%@$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-many-face
+\e$B%U%)%k%@%b!<%I$G!"L$F14|%a%C%;!<%8$,$?$/$5$s$"$k%U%)%k%@$N\e(B face \e$B$G$9!#\e(B
+\e$B!V$9$3$7!W$H!V$?$/$5$s!W$N@Z$lL\$O!"\e(B
+\e$BJQ?t\e(B @code{wl-folder-many-unsync-threshold} \e$B$G@_Dj$5$l$^$9!#\e(B
+
+@item wl-highlight-folder-unread-face
+\e$B%U%)%k%@%b!<%I$G!"L$F14|%a%C%;!<%8$,$J$/$FL$FI%a%C%;!<%8$,$"$k\e(B
+\e$B%U%)%k%@$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-killed-face
+\e$B%U%)%k%@%b!<%I$G!"%"%/%;%9%0%k!<%WCf$N:o=|$5$l$?%U%)%k%@$N\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-opened-face
+\e$B%U%)%k%@%b!<%I$G!"3+$$$?%0%k!<%W$K$D$/\e(B face \e$B$G$9!#\e(B
+\e$BJQ?t\e(B @code{wl-highlight-group-folder-by-numbers} \e$B$,\e(B nil \e$B$N$H$-M-8z$G$9!#\e(B
+
+@item wl-highlight-folder-closed-face
+\e$B%U%)%k%@%b!<%I$G!"JD$8$?%0%k!<%W$K$D$/\e(B face \e$B$G$9!#\e(B
+\e$BJQ?t\e(B @code{wl-highlight-group-folder-by-numbers} \e$B$,\e(B nil \e$B$N$H$-M-8z$G$9!#\e(B
+
+@item wl-highlight-folder-path-face
+\e$B%U%)%k%@%b!<%I$G!"8=:_A*BrCf$N%U%)%k%@$^$G$N%Q%9$K$D$/\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-logo-face
+\e$B%G%b$G%m%4$K$D$/\e(B face \e$B$G$9!#\e(B
+
+@item wl-highlight-demo-face
+\e$B%G%b$NJ8;zNs\e(B(\e$B%P!<%8%g%sHV9f$J$I\e(B)\e$B$K$D$/\e(B face \e$B$G$9!#\e(B
+@end table
+
+
+@node Advanced Settings, Customizable Valiables, Highlights, Customization
+@section \e$B%+%9%?%^%$%:!A1~MQJT!A\e(B
+
+@menu
+* Draft for Reply::             \e$BJV;vMQ%I%i%U%H\e(B
+* Thread Format::               \e$B%9%l%C%I$N8+$?L\\e(B
+* User-Agent Header::           User-Agent \e$B%X%C%@\e(B
+@end menu
+
+
+@node Draft for Reply, Thread Format, Advanced Settings, Advanced Settings
+@subsection \e$BJV;vMQ%I%i%U%H\e(B
+
+Mailng List \e$B$N5-;v$KJV;v$r=q$/$H$-$O!"%5%^%j%b!<%I$G\e(B @kbd{a} \e$B$r2!$7$?$@$1$G\e(B
+\e$B855-;v$N\e(B Reply-To \e$B$K$"$k%"%I%l%9$r\e(B To \e$B$KMQ0U$7$F$[$7$$!"$H$$$&>l9g$O!"\e(B
+\e$B0J2<$N$h$&$K$7$?$i$h$$$G$7$g$&!#\e(B
+
+@lisp
+(setq wl-draft-reply-without-argument-list
+      '(("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
+        ("Followup-To" . (nil nil ("Followup-To")))
+        (("X-ML-Name" "Reply-To") . (("Reply-To") nil nil))
+        ("From" . (("From") ("To" "Cc") ("Newsgroups")))))
+@end lisp
+
+@noindent
+("X-ML-Name" \e$B%U%#!<%k%I5Z$S\e(B "Reply-To" \e$B%U%#!<%k%I$NN>J}$,855-;v$K\e(B
+\e$BB8:_$9$k>l9g$@$1\e(B To: \e$B$K855-;vCf$N\e(B Reply-To: \e$B%U%#!<%k%I$,=`Hw$5$l$^$9!#\e(B)
+
+@c @noindent
+@c (\e$B:G8e$N9T$N0UL#$O!"\e(BTo: \e$B$K855-;vCf$N\e(B From \e$B%U%#!<%k%I$,!"\e(BCc: \e$B$K855-;v$N\e(B 
+@c To \e$B%U%#!<%k%I$*$h$S\e(B Cc \e$B%U%#!<%k%I!"$=$7$F\e(B Newsgroups: \e$B$K855-;v$N\e(B 
+@c Newsgroups \e$B%U%#!<%k%I$,$=$l$>$l\e(B (\e$B$"$l$P\e(B) \e$B=`Hw$5$l$k$H$$$&$3$H$G$9!#\e(B)
+
+
+@node Thread Format, User-Agent Header, Draft for Reply, Advanced Settings
+@subsection \e$B%9%l%C%I$N8+$?$a\e(B
+
+@example
+  389  09/18(\e$B6b\e(B)01:07 [ \e$B$F$i$K$7\e(B          ] wl-0.6.3
+  390  09/18(\e$B6b\e(B)07:25 +-[ \e$BDEM8$5$s\e(B          ]
+  391  09/18(\e$B6b\e(B)19:24 +-[ \e$BB<ED$5$s\e(B          ]
+  392  09/20(\e$BF|\e(B)21:49 +-[ \e$B1|@>$5$s\e(B          ]
+  396  09/20(\e$BF|\e(B)22:11 | +-[ \e$BDEM8$5$s\e(B          ]
+  398  09/21(\e$B7n\e(B)00:17 |   +-[ \e$BDEM8$5$s\e(B          ]
+  408  09/21(\e$B7n\e(B)22:37 |     +-[ \e$B1|@>$5$s\e(B          ]
+  411  09/22(\e$B2P\e(B)01:34 |       +-[ \e$BDEM8$5$s\e(B          ]
+  412  09/22(\e$B2P\e(B)09:28 |       +-[ \e$B$F$i$K$7\e(B          ]
+  415  09/22(\e$B2P\e(B)11:52 |         +-[ \e$BDEM8$5$s\e(B          ]
+  416  09/22(\e$B2P\e(B)12:38 |           +-[ \e$B$F$i$K$7\e(B          ]
+  395  09/20(\e$BF|\e(B)21:49 +-[ \e$B1|@>$5$s\e(B          ]
+  397  09/21(\e$B7n\e(B)00:15 +-[ \e$B1|@>$5$s\e(B          ]
+@end example
+
+\e$B%9%l%C%I$N8+$?$a$r>e5-$N$h$&$K$7$?$$>l9g$N@_Dj$O0J2<$NDL$j$G$9!#\e(B
+
+@lisp
+(setq wl-thread-indent-level 2)
+(setq wl-thread-have-younger-brother-str "+")
+(setq wl-thread-youngest-child-str       "+")
+(setq wl-thread-vertical-str             "|")
+(setq wl-thread-horizontal-str           "-")
+(setq wl-thread-space-str                " ")
+@end lisp
+
+\e$B;^$rI=<($7$J$$$h$&$K$7$?$$>l9g$N@_Dj$O0J2<$N$h$&$K$7$^$9!#\e(B
+
+@lisp
+(setq wl-thread-indent-level 2)
+(setq wl-thread-have-younger-brother-str " ")
+(setq wl-thread-youngest-child-str       " ")
+(setq wl-thread-vertical-str             " ")
+(setq wl-thread-horizontal-str           " ")
+(setq wl-thread-space-str                " ")
+@end lisp
+
+@node User-Agent Header,  , Thread Format, Advanced Settings
+@subsection User-Agent
+
+ X-Mailer \e$B%U%#!<%k%I$d\e(B User-Agent \e$B%U%#!<%k%I$K6E$j$?$$$H$$$&\e(B
+\e$BJQ$o$C$?$R$H$O!"E,Ev$KJ8;zNs$r\e(B insert \e$B$9$k4X?t$r<+J,$N9%$-$J$h$&$KDj5A$7$F\e(B
+@code{wl-generate-mailer-string-func} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$B0J2<$O@_Dj$N0lNc$G$9!#\e(B
+
+@lisp
+(setq wl-generate-mailer-string-func
+      (function
+       (lambda ()
+         (concat "X-Mailer: "
+                 (format "%s/%s (%s)" wl-appname wl-version wl-codename)))))
+@end lisp
+
+
+@node Customizable Valiables,  , Advanced Settings, Customization
+@section \e$B$=$NB>$N%+%9%?%^%$%:JQ?t0lMw\e(B
+
+\e$B$=$NB>$N%+%9%?%^%$%:JQ?t0lMw!#\e(B
+
+@table @code
+@item wl-default-folder
+@vindex wl-default-folder
+\e$B=i4|@_Dj$O\e(B "%inbox"\e$B!#%U%)%k%@0\F0;~$J$I$N%G%U%)%k%HCM$H$J$j$^$9!#\e(B
+
+@item wl-draft-folder
+@vindex wl-draft-folder
+\e$B=i4|@_Dj$O\e(B "+draft"\e$B!#%I%i%U%H$r%;!<%V$9$k%U%)%k%@$G$9!#\e(B
+localdir \e$B%U%)%k%@$G$"$kI,MW$,$"$j$^$9!#\e(B
+
+@item wl-trash-folder
+@vindex wl-trash-folder
+\e$B=i4|@_Dj$O\e(B "+trash"\e$B!#%4%_H"%U%)%k%@$G$9!#\e(B
+\e$B$3$NCM$rJQ99$7$?$H$-$O\e(B Wanderlust \e$B$r:F5/F0$9$k$3$H$r$*4+$a$7$^$9!#\e(B
+
+@item wl-interactive-exit
+@vindex wl-interactive-exit
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+Non-nil \e$B$J$i$P!"\e(BWanderlust \e$B=*N;;~$K3NG'$r9T$$$^$9!#\e(B
+
+@item wl-interactive-send
+@vindex wl-interactive-send
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i$P!"%a!<%kAw?.;~$KK\Ev$KAw?.$7$F$h$$$+$r3NG'$7$^$9!#\e(B
+
+@item wl-folder-sync-range-alist
+@vindex wl-folder-sync-range-alist
+\e$B=i4|@_Dj$O!"0J2<$NCM!#\e(B
+@example
+(("^&.*$" . "all")
+ ("^\\+draft$\\|^\\+queue$" . "all"))
+@end example
+\e$B%U%)%k%@L>$N@55,I=8=$H%U%)%k%@0\F0;~$N%5%^%j99?7%l%s%8O"A[%j%9%H$G$9!#\e(B
+\e$B99?7%l%s%8$K$O\e(B wl-summary-sync \e$B$GF~NO$G$-$kCM$N$$$:$l$+\e(B
+(all, update, rescan, rescan-noscore, first, last) \e$B$r;XDj$7$^$9!#\e(B
+\e$B%^%C%A$7$J$+$C$?>l9g$O!"\e(Bupdate \e$B$H$J$j$^$9!#\e(B
+
+@item wl-ask-range
+@vindex wl-ask-range
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+nil \e$B$J$i!"\e(Bfolder \e$B0\F0;~$N%5%^%j99?7$G\e(B @code{wl-folder-sync-range-alist} \e$B$NCM$r\e(B
+\e$B;HMQ$7$^$9!#\e(B
+
+@item wl-mime-charset
+@vindex wl-mime-charset
+\e$B=i4|@_Dj$O\e(B 'x-ctext\e$B!#\e(B
+MIME \e$B$G$O$J$$%a%C%;!<%8$N>l9g\e(B (Content-Type \e$B$,$J$$%a!<%k$J$I\e(B) \e$B$d!"\e(B
+\e$B%5%^%j$NI=<($GMQ$$$i$l$k\e(B MIME charset \e$B$G$9!#\e(B
+(Nemacs \e$B$H$=$NB>$N\e(B Emacs \e$B$G%5%^%j$r6&M-$7$?$$>l9g$O!"\e(B
+\e$B$3$NCM$r\e(B 'iso-2022-jp \e$B$H$7$F$/$@$5$$!#\e(B)
+
+@item wl-search-mime-charset
+@vindex wl-search-mime-charset
+\e$B=i4|@_Dj$O\e(B 'iso-2022-jp\e$B!#\e(B
+\e$B8!:w$GMQ$$$k\e(B MIME charset \e$B$G$9!#\e(B
+
+@item wl-highlight-folder-with-icon
+@vindex wl-highlight-folder-with-icon
+XEmacs \e$B$N$_M-8z$G$9!#=i4|@_Dj$O\e(B XEmacs \e$B$K0MB8$7$^$9\e(B(\e$B%"%$%3%s$r;HMQ$G$-$k\e(BXEmacs \e$B$G$O\e(B t \e$B$K$J$j$^$9\e(B)\e$B!#\e(B
+
+@item wl-strict-diff-folders
+@vindex wl-strict-diff-folders
+\e$B%U%)%k%@L>$N@55,I=8=$N%j%9%H$G$9!#\e(B
+\e$B%U%)%k%@%b!<%I$G\e(B @kbd{s} \e$B$r2!$9$J$I$7$FL$FI$N%a%C%;!<%8?t$r\e(B
+\e$B%A%'%C%/$7$?>l9g!"DL>o$O4J0WE*$JJ}K!$G%A%'%C%/$7$F$$$^$9\e(B(\e$B=hM}$OB.$$$,!"@53N$G$O$J$$\e(B)\e$B!#\e(B
+\e$B$3$NJQ?t$K%^%C%A$9$k%U%)%k%@$O$^$8$a$K%A%'%C%/$7$^$9!#\e(B
+IMAP4 \e$B%U%)%k%@$KBP$9$k>r7o%U%#%k%?%U%)%k%@$N$h$&$J>l9g$K$O!"\e(B
+\e$B$3$NJQ?t$K%^%C%A$9$k$h$&@_Dj$9$k$H$h$$$G$7$g$&!#\e(B
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+
+@item wl-folder-use-server-diff
+@vindex wl-folder-use-server-diff
+\e$B%U%)%k%@%b!<%I$G\e(B @kbd{s} \e$B$r2!$9$J$I$7$FL$FI$N%a%C%;!<%8?t$r%A%'%C%/$7$?\e(B
+\e$B>l9g!"DL>o$O\e(B(\e$B%5!<%P>e$N%a%C%;!<%8?t\e(B)\e$B!]\e(B(\e$B%m!<%+%k$K$"$k%a%C%;!<%8?t\e(B)\e$B$,L$FI\e(B
+\e$B$H$_$J$5$l$^$9!#$7$+$7!"$3$NJQ?t$,\e(BNon-nil \e$B$J$i$P!"%5!<%P>e$NL$FI$N%a%C%;!<\e(B
+\e$B%8?t$r%A%'%C%/$7$^$9!#\e(BIMAP4 \e$B%U%)%k%@$K$N$_1F6A$,$"$j$^$9!#$?$@$7!"JQ?t\e(B 
+@code{elmo-imap4-disuse-server-flag-mailbox-regexp} \e$B$K%^%C%A$9$k%a!<%k%\%C%/%9\e(B
+\e$B$N\e(B IMAP4 \e$B%U%)%k%@$O!"$3$NJQ?t$K%^%C%A$7$F$b%5!<%P>e$NL$FI$N%a%C%;!<%8?t\e(B
+\e$B$r%A%'%C%/$7$^$;$s!#=i4|@_Dj$O\e(B t\e$B!#\e(B
+
+@item wl-auto-check-folder-name
+@vindex wl-auto-check-folder-name
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i$P!"@_Dj$5$l$?CM$r;}$D%U%)%k%@$NL$FI?t$r5/F0;~$K%A%'%C%/$7$^$9!#\e(B
+'none \e$B$J$i$P!"5/F0;~$K%A%'%C%/$7$^$;$s!#\e(B
+list \e$B$J$i$P!"\e(Blist \e$B$K@_Dj$5$l$?A4$F$N%U%)%k%@$r5/F0;~$K%A%'%C%/$7$^$9!#\e(B
+
+@item wl-auto-uncheck-folder-list
+@vindex wl-auto-uncheck-folder-list
+\e$B=i4|@_Dj$O\e(B '("\\$.*")\e$B!#\e(B
+@code{wl-auto-check-folder-name} \e$B$K;XDj$5$l$?%0%k!<%W$K4^$^$l$F$$$F$b\e(B
+\e$B5/F0;~$KL$FI%A%'%C%/$7$J$$%U%)%k%@L>$N@55,I=8=$N%j%9%H$G$9!#\e(B
+
+@item wl-auto-check-folder-list
+@vindex wl-auto-check-folder-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+@code{wl-auto-check-folder-name} \e$B$K;XDj$5$l$?%0%k!<%W$K4^$^$l$F$$$?$i\e(B
+\e$B5/F0;~$KI,$:L$FI%A%'%C%/$9$k%U%)%k%@L>$N@55,I=8=$N%j%9%H$G$9!#\e(B
+@code{wl-auto-uncheck-folder-list} \e$B$h$j$bM%@h$7$^$9!#\e(B
+
+@item wl-no-save-folder-list
+@vindex wl-no-save-folder-list
+\e$B=i4|@_Dj$O\e(B '("^/.*$")\e$B!#\e(B
+\e$B%;!<%V$7$J$$%U%)%k%@L>$N@55,I=8=$N%j%9%H$G$9!#\e(B
+
+@item wl-save-folder-list
+@vindex wl-save-folder-list
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B%;!<%V$9$k%U%)%k%@L>$N@55,I=8=$N%j%9%H$G$9!#\e(B
+@code{wl-no-save-folder-list} \e$B$h$j$bM%@h$7$^$9!#\e(B
+
+@item wl-folder-mime-charset-alist
+@vindex wl-folder-mime-charset-alist
+\e$B=i4|@_Dj$O0J2<$N%j%9%H!#\e(B
+
+@lisp
+'(("^-alt\\.chinese" . big5)
+  ("^-relcom\\." . koi8-r)
+  ("^-tw\\." . big5)
+  ("^-han\\." . euc-kr)
+  )
+@end lisp
+
+\e$B%U%)%k%@L>$N@55,I=8=$H\e(B MIME charset \e$B$NO"A[%j%9%H$G$9!#\e(B
+\e$B%^%C%A$7$J$+$C$?>l9g$O\e(B @code{wl-mime-charset} \e$B$,;H$o$l$^$9!#\e(B
+
+@item wl-folder-init-load-access-folders
+@vindex wl-folder-init-load-access-folders
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B=i4|2=;~$KFCDj$N%"%/%;%9%0%k!<%W$N$_%m!<%I$9$k>l9g$K!"$=$N%0%k!<%W$N%j\e(B
+\e$B%9%H$r;XDj$7$^$9!#\e(B
+nil\e$B$N>l9g$O\e(B @code{wl-folder-init-no-load-access-folders} \e$B$,;2>H$5$l$^$9!#\e(B
+
+@item wl-folder-init-no-load-access-folders
+@vindex wl-folder-init-no-load-access-folders
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+\e$B=i4|2=;~$KFCDj$N%"%/%;%9%0%k!<%W$r=|$$$F%m!<%I$9$k>l9g$K!"%m!<%I$7$J$$\e(B
+\e$B%"%/%;%9%0%k!<%W$N%j%9%H$r;XDj$7$^$9!#\e(B
+@code{wl-folder-init-load-access-folders} \e$B$,\e(B non-nil \e$B$N>l9g$OL5;k$5$l$^$9!#\e(B
+
+@item wl-delete-folder-alist
+@vindex wl-delete-folder-alist
+\e$B=i4|@_Dj$O\e(B '(("^-" . remove))\e$B!#\e(B
+delete mark \e$B$r$D$1$?%a%C%;!<%8$r:o=|$9$kJ}?K$r@_Dj$7$^$9!#\e(B
+\e$B%j%9%H$N3FMWAG$O%U%)%k%@$H:o=|@h$K$J$C$F$*$j!":o=|@h$K$O<!$N$b$N$,;XDj$G\e(B
+\e$B$-$^$9!#\e(B
+
+@example
+'remove or 'null : \e$B%a%C%;!<%8$rB(:o=|$9$k!#\e(B
+string           : \e$B;XDj$7$?%U%)%k%@$K0\F0$9$k!#\e(B
+'trash or \e$B$=$NB>\e(B : `wl-trash-folder'\e$B$K0\F0$9$k!#\e(B
+@end example
+
+@item wl-refile-policy-alist
+@vindex wl-refile-policy-alist
+\e$B=i4|@_Dj$O\e(B '(("^[-=]" . copy) (".*" . move))\e$B!#\e(B
+refile mark \e$B$r$D$1$k:]!"%a%C%;!<%8$r0\F0$9$k$+%3%T!<$9$k$+$r;XDj$7$^$9!#\e(B
+\e$B%j%9%H$N3FMWAG$K$O%U%)%k%@$H\e(B copy \e$B$^$?$O\e(B move \e$B$N\e(B cons cell \e$B$r;XDj$7$^$9!#\e(B
+
+@item wl-x-face-file
+@vindex wl-x-face-file
+\e$B=i4|@_Dj$O\e(B "~/.xface"\e$B!#\e(B
+Encode \e$B:Q$_$N\e(B X-Face \e$BJ8;zNs$rFbMF$H$9$k%U%!%$%kL>$G$9!#\e(B
+@xref{x-face-mule}.
+
+@item wl-demo-display-logo
+@vindex wl-demo-display-logo
+Non-nil \e$B$J$i$P%*!<%W%K%s%0%G%b$G%S%C%H%^%C%W$N%$%a!<%8$rI=<($7$^$9!#\e(B
+
+@item elmo-use-database
+@vindex  elmo-use-database
+XEmacs \e$B$N$_M-8z$G$9!#=i4|@_Dj$O!"\e(BXEmacs \e$B$K0MB8$7$^$9!#\e(B
+(dbm \e$B$N5!G=$r$b$D\e(B XEmacs \e$B$J$i$P\e(B t \e$B$H$J$j$^$9!#\e(B)
+Non-nil \e$B$J$i$P\e(B dbm \e$B$r;H$C$F\e(B Message-ID \e$B$N4IM}$r9T$J$$$^$9!#\e(B
+
+@item elmo-passwd-alist-file-name
+@vindex  elmo-passwd-alist-file-name
+\e$B=i4|@_Dj$O\e(B "passwd"\e$B!#\e(B
+\e$B%Q%9%o!<%I$r%;!<%V$7$F$*$/%U%!%$%k$NL>A0$G$9!#\e(B
+\e$B%3%^%s%I\e(B @code{elmo-passwd-alist-save} \e$B$r<B9T$9$k$H$3$N%U%!%$%k$K8=:_@_Dj\e(B
+\e$B$5$l$F$$$k%Q%9%o!<%I$,%;!<%V$5$l$^$9!#\e(B
+
+@item elmo-nntp-list-folders-use-cache
+@vindex elmo-nntp-list-folders-use-cache
+\e$B=i4|@_Dj$O\e(B 600 (\e$BIC\e(B)\e$B!#\e(B
+NNTP \e$B$K$*$$$F\e(B @samp{list} \e$B$d\e(B @samp{list active} \e$B$N7k2L$r\e(B
+cache\e$B$7$F$*$/;~4V$rICC10L$G;XDj$7$^$9!#\e(B
+nil \e$B$J$i\e(B cache \e$B$7$^$;$s!#\e(B
+
+@item elmo-nntp-max-number-precedes-list-active
+@vindex elmo-nntp-max-number-precedes-list-active
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+NNTP \e$B$K$*$$$F\e(B @samp{list active} \e$B$N7k2LF@$i$l$k5-;vHV9f$r\e(B
+\e$B%U%)%k%@$N:GBg5-;vHV9f$H$7$FMxMQ$7$^$9!#\e(B
+NNTP \e$B%5!<%P$H$7$F\e(B INN 2.3 \e$B$J$I$r;HMQ$7$F$$$F!"%U%)%k%@%b!<%I$G$N4{FI?t\e(B
+\e$B$,0lCW$7$J$$>l9g$O\e(B t \e$B$K$7$F$/$@$5$$!#\e(B
+@c non-nil means?
+
+@item elmo-nntp-default-use-listgroup
+@vindex elmo-nntp-default-use-listgroup
+\e$B=i4|@_Dj$O\e(B t\e$B!#\e(B
+NNTP \e$B$K$*$$$F\e(B \e$BAm5-;v?t$rD4$Y$k$?$a$K!"\e(B@samp{listgroup} \e$B$r;H$&!#\e(B
+nil \e$B$J$i$P\e(B @samp{group} \e$B$N7k2L$rMQ$$$^$9!#\e(B
+@samp{group} \e$B$r;H$&$H!"@53N$5$K$O7g$1$^$9$,!"<c439bB.2=$5$l$^$9!#\e(B
+
+@item elmo-pop3-send-command-synchronously
+@vindex elmo-pop3-send-command-synchronously
+\e$B=i4|@_Dj$O\e(B nil\e$B!#\e(B
+Non-nil \e$B$J$i\e(B POP3 \e$B$N%3%^%s%I$rF14|E*$KH/9T$7$^$9!#%5!<%P$K$h$C$F$O$3$NCM$r@_Dj$7$J$$$H%5%^%j>pJs$r<h$j=P$;$J$$>l9g$,$"$k$h$&$G$9!#\e(B
+POP3 \e$B;2>H;~$K=hM}$,%O%s%0$9$k$h$&$J>l9g$O!"\e(Bt\e$B$K$9$k$H$$$$$+$b$7$l$^$;$s!#\e(B
+
+@item elmo-dop-flush-confirm
+@vindex elmo-dop-flush-confirm
+\e$B=i4|@_Dj$O!"\e(Bt\e$B!#\e(B
+Non-nil \e$B$J$i$P%*%U%i%$%s=hM}$GN/$C$?=hM}$r<B9T$9$k$+$I$&$+$r3NG'$7$^$9!#\e(B
+@end table
+
+
+@c
+@c  Mailing List
+@c
+@node Mailing List, Addition, Customization, Top
+@chapter \e$B%a!<%j%s%0%j%9%H\e(B
+
+@display
+Wanderlust Mailing List @t{<wl@@lists.airs.net>}
+@end display
+
+Wanderlust \e$B$K4X$9$k5DO@$O$3$N%a%$%j%s%0%j%9%H$G9T$o$l$^$9!#\e(B
+\e$B:G?7%P!<%8%g%s$N%"%J%&%s%9$b$3$A$i$KN.$l$^$9!#\e(B
+
+@t{wl-ctl@@lists.airs.net} \e$B08$N%a!<%k$NK\J8$K!"\e(B
+
+@example
+# guide
+@end example
+
+@noindent
+\e$B$H=q$$$?%a!<%k$rAw$k$HF~2q$N%,%$%I$,<+F0E*$K$b$i$($^$9!#\e(B
+
+\e$B%P%0Js9p$d%Q%C%A$NAwIU$b$3$A$i$N%a!<%j%s%0%j%9%H$XAw$C$F$/$@$5$$!#\e(B
+\e$B%a!<%j%s%0%j%9%H$N%a%s%P$G$J$/$H$b!"Aw?.$G$-$k@_Dj$K$J$C$F$$$^$9!#\e(B
+
+\e$B%a!<%j%s%0%j%9%H$N3'MM$K$O5.=E$J8f=u8@!"\e(B
+\e$B%3!<%I$r$?$/$5$s8fDs6!$$$?$@$$$F$*$j$^$9!#\e(B
+\e$B$3$N>l$r<Z$j$F$*Ni?=$7>e$2$^$9!#\e(B
+
+@c
+@c  Addition
+@c
+@node Addition, Index, Mailing List, Top
+@chapter \e$B$*$^$1\e(B
+
+@section \e$BN,Nr\e(B
+
+@example
+1998  3/05    MH \e$B%a%C%;!<%8$r%9%l%C%II=<($9$k%W%m%H%?%$%W$r:n$C$F$_$k!#\e(B
+      3/10    elisp \e$B$K$h$k\e(B msgdb \e$B$N$7$/$_$r$D$/$k!#\e(B
+      3/26    IMAP \e$B$H\e(B NNTP \e$B$b%9%l%C%II=<($G$-$k$h$&$K$J$k!#\e(B
+      4/13    \e$B%9%l%C%II=<(MQ%b%8%e!<%k$r\e(B elmo \e$B$H$7$F$^$H$a$O$8$a$k!#\e(B
+      5/01    0.1.0 \e$B%\%m%\%m$N\e(B initial version \e$B$,40@.!#\e(B
+      6/12    tm-ja ML \e$B$G!"\e(BIMAP \e$BBP1~$N\e(B elisp \e$B%a!<%i$r:n$C$F$$$k!"\e(B
+              \e$B$H$D$$8}$r3j$Y$i$;$F$7$^$&!#\e(B
+      6/16    tm-ja, elips ML \e$B$G\e(B 0.1.3 \e$B$r%"%J%&%s%9!#\e(B
+      6/22    \e$BKLL\$5$s$N$*$+$2$G\e(B northeye.org \e$B$G%a!<%j%s%0%j%9%H$,%9%?!<%H!#\e(B
+      7/01    mm-backend \e$BBP1~\e(B(0.3.0)\e$B!#\e(B
+      8/25    multi \e$B%U%)%k%@DI2C\e(B(0.5.0)\e$B!#\e(B
+      8/28    filter \e$B%U%)%k%@DI2C\e(B(0.5.1)\e$B!#\e(B
+      9/10    \e$B%9%l%C%I$,3+JD$G$-$k$h$&$K$J$k\e(B(0.6.0)\e$B!#\e(B
+      9/11    fldmgr by \e$BB<ED$5$s\e(B \e$B$K$h$j%U%)%k%@$NJT=8$,4JC1$K!#\e(B
+      9/18    lha \e$B%U%)%k%@DI2C\e(B by \e$B1|@>$5$s\e(B(0.6.3)\e$B!#\e(B
+      9/24    \e$B%9%l%C%I$N;^$rI=<(\e(B(0.6.5)\e$B!#\e(B
+      9/28    \e$B05=L%U%)%k%@$,%^%k%A%"!<%+%$%P$KBP1~\e(B by \e$B1|@>$5$s!#\e(B
+     10/28    \e$B%*%U%i%$%s=hM}\e(B (0.7.4)\e$B!#\e(B
+     12/09    \e$B%Y!<%?%P!<%8%g%s$K!#\e(B
+     12/21    wl-expire by \e$BB<ED$5$s!#\e(B
+1999  2/03    auto-refile by \e$BDEM8$5$s!#\e(B
+      4/28    wl-template by \e$BB<ED$5$s!#\e(B
+      5/18    1.0.0 stable \e$B%j%j!<%9!#\e(B
+      7/05    \e$B%9%3%"5!G=\e(B by \e$BB<ED$5$s\e(B(2.1.0)\e$B!#\e(B
+@end example
+
+\e$B$/$o$7$$JQA+$O\e(B @file{ChangeLog} \e$B$r8fMw$/$@$5$$!#\e(B
+
+@section \e$BL>A0\e(B
+
+Wanderlust \e$B$K$O!"8&5f<R1QOB<-E5$K$h$l$P!"\e(B
+
+@display
+wanderlust   wan\e$B!&\e(Bder\e$B!&\e(Blust
+  \e$B"x%I%$%D8l\e(B 'desire to wander' \e$B$N0U$+$i"x\e(B
+  \e$B!]L>\e(B \e$BJ|O2JJ!$\e(B \e$BN99TG.!$\e(B \e$BN9?4!'\e(B have \e$B!A\e(B \e$BJ|O2JJ$,$"$k!%\e(B
+@end display
+
+@noindent
+\e$B$H$$$&0UL#$,$"$j$^$9!#$,!"L>A0$K$?$$$7$F?<$$0U?^$O$"$j$^$;$s!#\e(B
+(\e$B6/$$$F8@$($P!"\e(BIMAP @t{=>} \e$B$I$3$G$b%a!<%k$,FI$a$k\e(B @t{=>} \e$BJ|O2JJ\e(B ?)
+
+elmo \e$B$O!"\e(B@samp{Elisp Library for Message Orchestration} \e$B$NN,$G$9!#\e(B
+\e$B:G=i$O$"$N@V$$$L$$$0$k$_$N$D$b$j$G$7$?$,!"\e(B
+\e$BJ|O2\e(B @t{=>} \e$BI:N.\e(B @t{=>} \e$BF;I8\e(B @t{=>} St.@: Elmo's fire @t{=>} elmo \e$B$H$$$&!"\e(B
+\e$B$=$l$C$]$$O"A[$b2DG=$G$9!#\e(B
+
+@section \e$B%3!<%I%M!<%`\e(B
+
+\e$B3F%P!<%8%g%s$K$O%3!<%I%M!<%`$,$D$$$F$$$^$9\e(B(\e$B$[$H$s$I>iCL$G$9\e(B)\e$B!#\e(B
+\e$B$$$^$N$H$3$m\e(B 1980 \e$BG/Be$NJF%S%k%\!<%I;o%H%C%W\e(B 40 \e$B%R%C%H\e(B
+
+(@samp{http://www.summer.com.br/~pfilho/html/top40/index.html})
+
+\e$B$+$i%"%k%U%!%Y%C%H=g$KE,Ev$K9%$-$J$b$N$r%T%C%/%"%C%W$7$F;H$C$F$$$^$9!#\e(B
+
+
+@node Index,  , Addition, Top
+@unnumbered \e$B:w0z\e(B
+
+@menu
+* Concept Index::               \e$B35G0:w0z\e(B
+* Key Index::                   \e$B%-!<%P%$%s%I:w0z\e(B
+* Variable Index::              \e$BJQ?t:w0z\e(B
+* Function Index::              \e$B4X?t:w0z\e(B
+@end menu
+
+@node Concept Index, Key Index, Index, Index
+@unnumberedsec \e$B35G0:w0z\e(B
+@printindex cp
+
+@node Key Index, Variable Index, Concept Index, Index
+@unnumberedsec \e$B%-!<%P%$%s%I:w0z\e(B
+@printindex ky
+
+@node Variable Index, Function Index, Key Index, Index
+@unnumberedsec \e$BJQ?t:w0z\e(B
+@printindex vr
+
+@node Function Index,  , Variable Index, Index
+@unnumberedsec \e$B4X?t:w0z\e(B
+@printindex fn
+
+@summarycontents
+@contents
+@bye
diff --git a/doc/wl.texi b/doc/wl.texi
new file mode 100644 (file)
index 0000000..dd54aaf
--- /dev/null
@@ -0,0 +1,6031 @@
+\input texinfo @c -*-texinfo -*- coding: iso-2022-jp -*-
+@c %**start of header
+@setfilename wl.info
+@settitle Wanderlust -- Yet Another Message Interface On Emacsen --
+@c @documentlanguage en
+@c %**end of header
+@c texinfo of Wanderlust
+@set Time-stamp: <2000-04-03 14:30:38 teranisi>
+@set version 1.1.0
+@synindex pg cp
+@finalout
+
+@direntry
+* Wanderlust: (wl).         Yet Another Message Interface On Emacsen
+@end direntry
+
+@c permissions text appears in an Info file before the first node.
+@ifinfo
+This file documents Wanderlust,
+Yet another message interface on Emacsen.
+
+Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}.
+@c Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}, @*
+@c @w{Fujikazu Okunishi}, @w{Masahiro Murata},
+@c @w{Kenichi Okada}, @w{Kaoru Takahashi}, @w{Bun Mizuhara}
+and @w{Masayuki Osada}.
+
+This edition is for Wanderlust version @value{version}.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+@end ifinfo
+
+@titlepage
+@sp 10
+@title Wanderlust User's Manual (ver. @value{version})
+@author Yuuichi Teranishi
+@author Fujikazu Okunishi
+@author Masahiro Murata
+@author Kenichi Okada
+@author Kaoru Takahashi
+@author Bun Mizuhara
+@author Masayuki Osada
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}.
+@c Copyright @copyright{} 1998, 1999, 2000 @w{Yuuichi Teranishi}, @*
+@c @w{Fujikazu Okunishi}, @w{Masahiro Murata},
+@c @w{Kenichi Okada}, @w{Kaoru Takahashi}, 
+@c @w{Bun Mizuhara} and @w {Masayuki Osada}
+
+This manual is for Wanderlust version @value{version}.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+@end titlepage
+
+
+@c
+@c  Top
+@c 
+@ifinfo
+@node Top, Introduction, (dir), (dir)
+@top Wanderlust User's Manual
+
+@flushright
+Yuuichi Teranishi
+Fujikazu Okunishi
+Masahiro Murata
+Kenichi Okada
+Kaoru Takahashi
+Bun Mizuhara
+Masayuki Osada
+Last Modified@value{Time-stamp:}
+@end flushright
+
+This manual is for Wanderlust@value{version}.
+
+@end ifinfo
+
+@menu
+* Introduction::             Read this first.
+* Start Me Up::              Invoking Wanderlust.
+* Folders::                  How to specify folders.
+* Folder::                   Selecting and editing folders.
+* Summary::                  Reading and refiling messages.
+* Message::                  Saving and playing MIME multipart entities.
+* Draft::                    Draft buffer, sending mail and news.
+* Disconnected Operations::  Off-Line management
+* Expire and Archive::       Automatic expiration and archiving of messages.
+* Scoring::                  Score of the messages.
+* Customization::            Customizing Wanderlust.
+* Mailing List::             Wanderlust mailing list
+* Addition::                 Additional Information
+* Index::                    Key index.
+@end menu
+
+
+@c
+@c  Introduction
+@c 
+@node Introduction, Start Me Up, Top, Top
+@chapter Introduction of Wanderlust
+@cindex Introduction
+
+Wanderlust is an mail/news management system on Emacsen.
+It supports IMAP4rev1(RFC2060), NNTP, POP and local message files.
+
+The main features of Wanderlust:
+
+@itemize @minus
+@item Pure elisp implementation.
+@item Supports IMAP4rev1, NNTP, POP(POP3/APOP), MH and Maildir format.
+@item Unified access method to messages based on Mew-like Folder Specification.
+@item Mew-like Key-bind and mark handling.
+@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 MH-like FCC. (FCC: %Backup and FCC: $Backup is allowed).
+@item MIME compliant (by SEMI or tm).
+@item Transmission of news and mail are unified by Message transmitting draft.
+@item Graphical list of folders (XEmacs).
+@item View a part of message without retrieving the whole message (IMAP4).
+@item Server-side message look up (IMAP4). Multi-byte characters are allowed.
+@item Virtual Folders.
+@item Supports compressed folder using common archiving utilities.
+@item Old articles in folders are automatically removed/archived (Expiration).
+@item Automatic re-file.
+@item Template function makes it convenient to send fixed form messages.
+@end itemize
+
+Wanderlust is supposed to run on Mules based on Emacs 19.28, 19.34, 
+Emacs 20.2 or later, XEmacs 20.4 or later, Meadow 1.00 or later(on MS Windows),
+Mule for Windows v1.22 (on MS Windows), NTEmacs(Windows NT).
+PMMule on OS/2 is also supported. Wanderlust runs even on Nemacs 3.3.2
+based on Emacs 18.55, 18.59 (with limited functionality).
+
+IMAP4 connectivity with UW imapd 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.7a,
+Cyrus imapd 1.4, Cyrus imapd 1.5.19, AIR MAIL(AIRCimapd release 2.00)
+and ExpressMail are confirmed to work with Wanderlust.
+
+@c
+@c  Start Me Up
+@c 
+@node Start Me Up, Folders, Introduction, Top
+@chapter Start up Wanderlust
+@cindex Start up
+
+
+The necessary procedure for starting Wanderlust is explained in steps here.
+
+(Of course, you need a mail/news readable environment in advance)
+
+@menu
+* MIME Modules::      Installing the MIME modules.
+* Download::          Download and extract the packages.
+* Install::           Byte-compile and install.
+* Minimal Settings::  @file{.emacs} setup.
+* Mail Addresses::    Address book definition.
+* Folder Definition:: Folder definition.
+* Start Wanderlust::  Starting Wanderlust
+@end menu
+
+
+@node MIME Modules, Download, Start Me Up, Start Me Up
+@section Installing MIME modules
+@cindex MIME modules
+@pindex APEL
+@pindex FLIM
+@pindex SEMI
+@pindex tm
+
+SEMI or tm must be installed to make Wanderlust work correctly.
+
+SEMI does not run on Emacs19.28 or earlier
+@footnote{SEMI runs on Emacs 19.34. @*
+@samp{http://www.jpl.org/elips/INSTALL-SEMI-ja.html} describes how to.},
+so you must install tm, the predecessor of SEMI. (tm version 8.7 or later
+is needed.)
+
+However, SEMI is recommended because of its wider functionality.
+Partial download function in IMAP4 is enabled only when SEMI is installed.
+
+Refer to the documents of each package for detailed installation procedure.
+
+SEMI and tm can be downloaded from these sites:
+
+@example
+SEMI: ftp://ftp.m17n.org/mule/semi/
+tm:   http://cvs.m17n.org/tomo/comp/emacsen/tm/tm-8/
+@end example
+
+You need packages named APEL and FLIM to use SEMI.
+You can download FLIM and APEL from following URLs.
+
+@example
+FLIM:     ftp://ftp.m17n.org/mule/flim/
+APEL:     ftp://ftp.m17n.org/mule/apel/
+@end example
+
+You have to install APEL, FLIM and SEMI in this order.
+Generally @samp{make install} will do the job.
+(In XEmacs 21, @samp{make install-package}.)
+
+Recommended combination of APEL, FLIM and SEMI are:
+
+@itemize @minus
+@item APEL 10.2, FLIM 1.12.7 and SEMI 1.13.4
+@item APEL 10.2, FLIM 1.13.2 and SEMI 1.13.7
+@end itemize
+
+Combination of APEL 10.2 and FLIM 1.12.7 makes following error
+while compiling FLIM 1.12.7.
+
+@example
+Please install latest APEL 7.3 or later.
+@end example
+
+In this case, please comment out following lines in FLIM-CFG.
+
+@example
+(or (fboundp 'write-region-as-binary)
+    (error "Please install latest APEL 7.3 or later."))
+(or (fboundp 'insert-file-contents-as-binary)
+    (error "Please install latest APEL 7.3 or later."))
+@end example
+
+You can also use many other FLIM/SEMI variants. Combination of the
+latest versions should work.  For example, following combination is
+confirmed to work.
+
+@itemize @minus
+@item APEL 10.2, Chao 1.14.1 and REMI 1.14.1
+@end itemize
+
+@c You have to re-install Wanderlust
+@c if you upgraded APEL, FLIM, SEMI or tm.
+
+@node Download, Install, MIME Modules, Start Me Up
+@section Download and Extract the Package
+@cindex Download
+
+You can download Wanderlust package from following sites:
+
+Original site:
+@example
+ftp://ftp.gohome.org/wl/
+@end example
+
+Mirrored ftp/http sites:
+
+@example
+ftp://ftp.jaist.ac.jp/pub/GNU/elisp/ftp.gohome.org/wl/
+ftp://daidai.kuis.kyoto-u.ac.jp/pub/mirror/ftp.gohome.org/pub/elisp/wl/
+http://www.jpl.org/elips/
+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/
+@end example
+
+Extract the obtained package to your working directory:
+
+@example
+% cd ~/work
+% tar zxvf wl-(@var{version}).tar.gz
+% cd wl-(@var{version})
+@end example
+
+@subsection To use SSL (Secure Socket Layer)
+
+SSL (Secure Socket Layer) can be used for 
+SMTP, IMAP, NNTP and POP connections in Wanderlust.
+
+There are two ways to use SSL. One is to start SSL negotiation just after
+the connection establishment (generic way). 
+The other one is to start SSL negotiation by invoking STARTTLS command in
+the each session.
+
+To use the formar SSL (generic SSL), you must install @file{ssl.el} in the 
+@file{utils} directory. OpenSSL command @file{openssl} is also required
+to use @file{ssl.el}. You must set PATH to the directory that OpenSSL
+commands are installed.
+
+To use the latter SSL(STARTTLS), you must install starttls package in
+addition to above. 
+You can download starttls package from the following site.
+
+@example
+ftp://opaopa.org/pub/elisp/
+@end example
+
+@node Install, Minimal Settings, Download, Start Me Up
+@section Byte-compile and install
+@cindex Byte-compile
+@cindex Compile
+@cindex Install
+@cindex Makefile
+@cindex Make
+
+@subsection Installation
+
+Edit @code{LISPDIR} and @code{EMACS} in @file{Makefile}.
+Set the Emacs's command name to @code{EMACS}.
+Set package installation directory to @code{LISPDIR}.
+Then, please execute following commands.
+
+@example
+% make
+% make install
+@end example
+
+Destination directory is auto-probed if you leave @code{LISPDIR}
+in @file{Makefile} as is. (That is, leave it as NONE)
+
+If you are using an Emacs variant which does not merge specified directory
+to load-path (e.g. Mule 2.3 based on Emacs 19.28), 
+then you will see the error message:
+
+@example
+Cannot open load file: mime-setup
+@end example
+
+@noindent
+In this case, either add destination directories of custom, apel, flim and semi
+to environmental variable EMACSLOADPATH, or define load-path in @file{WL-CFG}
+in extracted directory.
+
+If you want to use BBDB, then the necessary modules are byte-compiled and
+installed when BBDB directory is added to load-path.
+@xref{BBDB}.
+
+@subsection WL-CFG
+
+Contents of the file @file{WL-CFG} is loaded under installation if a file
+with that name exists in extracted directory. You can use @file{WL-CFG} to
+configure load-path to extra packages such as SEMI if needed.
+
+If you want to specify the install directory of Wanderlust related
+files, then set following variables in @file{WL-CFG}
+
+@table @code
+@item WL_PREFIX
+A directory to install WL modules.
+This directory is relative directory from @code{LISPDIR}.
+WL modules include @file{wl*.el}, @file{wl*.elc} files.
+@c  Modules under the directory @file{util/} are also installed if 
+@c it detected as necessary.
+
+@item ELMO_PREFIX
+A directory to install ELMO modules.
+This directory is relative directory from @code{LISPDIR}.
+ELMO modules include @file{elmo*.el}, @file{elmo*.elc} files.
+@c  @file{utf7.el}, @file{utf7.elc} are also included in the ELMO.
+@end table
+  
+@noindent
+Default value of @code{WL_PREFIX} and @code{ELMO_PREFIX} are @file{wl}.
+
+If you want to install ELMO related files under a sub-directory
+such as "elmo" then add following to @file{WL-CFG}:
+
+@lisp
+(setq ELMO_PREFIX "elmo")
+@end lisp
+
+@noindent
+
+@subsection Install as a XEmacs package
+@cindex XEmacs package
+@cindex XEmacs package install
+@cindex Package, XEmacs
+@cindex Package install, XEmacs
+@c @cindex install-package
+
+It is possible to install Wanderlust as one of packages of XEmacs (21.0
+or greater). Configuration for autoload and icon-path in local
+@file{.emacs} files are no longer necessary, if you install Wanderlust
+as a package.
+
+Follow the next example to install Wanderlust as an XEmacs package.
+
+@example
+% vi Makefile
+% make package
+% make install-package
+@end example
+
+package directory is auto-probed, if SEMI is installed.
+(you can also specify it with @code{PACKAGEDIR} in @file{Makefile})
+
+@subsection Run in place
+
+If wl and elmo directories are defined in load-path, then byte-compilation
+and installation are not necessary to start Wanderlust. For example,
+if package is extracted in @file{~/work}, Wanderlust can be invoked with
+following setting in @file{.emacs}.
+
+@lisp
+(add-to-list 'load-path "~/work/wl-(@var{version})")
+(add-to-list 'load-path "~/work/wl-(@var{version})/elmo")
+@end lisp
+
+@node Minimal Settings, Mail Addresses, Install, Start Me Up
+@section Set up .emacs
+@cindex Minimal Settings
+@cindex Settings
+@cindex Configuration
+@cindex .emacs
+@cindex .wl
+
+The Wanderlust package contains two module groups.
+
+@table @samp
+@item ELMO (elmo-*.el)
+These modules show everything as folders. This is the back-end for Wanderlust.
+@item WL (wl-*.el)
+These modules controls the behavior of main body of Wanderlust.
+They are also the front-end for ELMO.
+@end table
+
+You can customize the  behavior of Wanderlust by changing the value
+of environmental variables which begins with @code{elmo-*} and @code{wl-*}.
+
+The minimal requirement for settings is as the following.
+
+@lisp
+;; The setting to use SEMI/tm
+(load "mime-setup")
+
+;; autoload configuration
+;; (These are not required if Wanderlust is installed as XEmacs package)
+(autoload 'wl "wl" "Wanderlust" t)
+(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)
+
+;; Directory where icons are placed (XEmacs Only). Default value is nil.
+;; (This is not required if Wanderlust is installed as XEmacs package)
+(setq wl-icon-dir "~/work/wl/etc")
+
+;; SMTP server for mail posting. Default: "localhost"
+(setq wl-smtp-posting-server "your.smtp.server.com")
+;; NNTP server for news posting. Default: "localhost"
+(setq wl-nntp-posting-server "your.nntp.server.com")
+@end lisp
+
+@file{~/.wl} is automatically loaded when Wanderlust starts up (if such a
+file exists). So it is convenient to gather Wanderlust specific settings
+in @file{~/.wl}. Settings for "face" must be written in @file{~/.wl},
+because you can't write them in @file{.emacs}
+(if you write it to @file{.emacs}, you'll get an error).
+@xref{Highlights}.
+
+All above described settings except (load "mime-setup") can be written in
+@file{~/.wl}).
+
+@subsection mail-user-agent
+@cindex Default Mailer
+@cindex Mailer, Default
+@vindex mail-user-agent
+@findex compose-mail
+
+If you write following setting in you @file{.emacs}, you can
+start Wanderlust draft mode by typing @kbd{C-x m} (@code{compose-mail}). 
+This means it enables you to run Wanderlust as a default mail composer
+ of Emacs.
+
+It is effective only when your Emacs can define @code{mail-user-agent}.
+@c @xref{Mail Methods, , ,emacs}.
+
+@lisp
+(autoload 'wl-user-agent-compose "wl-draft" nil t)
+(if (boundp 'mail-user-agent)
+    (setq mail-user-agent 'wl-user-agent))
+(if (fboundp 'define-mail-user-agent)
+    (define-mail-user-agent
+      'wl-user-agent
+      'wl-user-agent-compose
+      'wl-draft-send
+      'wl-draft-kill
+      'mail-send-hook))
+@end lisp
+
+
+@node Mail Addresses, Folder Definition, Minimal Settings, Start Me Up
+@section Address book
+@cindex Address book Definition
+@cindex .addresses
+@cindex Alias, Address
+
+The file @file{~/.addresses} is a simple address book for Wanderlust.
+Make address file @file{~/.addresses}, and edit to suit your requirement.
+
+The data written in @file{~/.addresses} are used for address completion
+under draft editing mode. Furthermore, they are used when showing names
+in summary display mode. You can safely skip this section, if you don't
+want to customize address completion and summary display.
+It is possible to add/change/remove addresses from @file{~/.addresses} in
+summary buffer after Wanderlust is invoked. @refill
+
+The format is very simple. Like this. @refill
+
+@example
+#
+# @r{Lines begin with @samp{#} are comment.}
+# @r{Empty lines are ignored}
+#
+# @r{Format of each line:}
+# @r{email-address  ``nickname'' ``realname''}
+#
+teranisi@@gohome.org            "Yuuichi"      "Yuuichi Teranishi"
+foo@@bar.gohome.org             "Mr. Foo"    "John Foo"
+bar@@foo.gohome.org             "Mr. Bar"    "Michael Bar"
+@end example
+
+@noindent
+
+One line defines one persons description.
+
+Actually, in default setup, "nickname" is used in summary-mode and "real name"
+is used in draft preparation mode. This behavior is better understood if you
+try it and confirmed the function first. You can write and try a small
+definition, so you will know the idea of the address book before writing a big
+one.
+
+And, if MH alias file is specified in variable @code{wl-alias-file},
+it is used as an address information in the draft preparation mode.
+
+@node Folder Definition, Start Wanderlust, Mail Addresses, Start Me Up
+@section Folder Definition
+@cindex Folder Definition
+@cindex .folders
+
+Define the folders you want to subscribe in file @file{~/.folders}.
+The contents written in @file{~/.folders} become the folders which
+you subscribe to as it is.
+
+You can skip this section because it is possible to add/edit the
+subscribe folders from the buffer for list of folders.
+
+Format for @file{~/.folders} is very simple. Here is an example:
+
+@example
+#
+# @r{Lines begin with @samp{#} are comment.}
+# @r{Empty lines are ignored}
+#
+# @r{folder name}  "@r{folder nickname}"
+# @r{(nicknames are not necessary)}
+#
+%inbox  "Inbox"
++trash  "Trash"
++draft  "Drafts"
+%#mh/Backup@@my.imap.server.com "Sent"
+# Folder Group
+Emacsen@{
+    %#mh/spool/wl            "Wanderlust ML"
+    %#mh/spool/elips         "ELIPS ML"
+    %#mh/spool/tm-ja         "tm Japanese ML"
+    %#mh/spool/xemacs-beta   "XEmacs beta"
+    -fj.news.reader.gnus@@other.nntp.server.com "Gnus Net news"
+    *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs "fj's Emacsen"
+@}
+#
+# @r{If folder name ends with @samp{/}, that means an `access group',}
+# @r{all subfolders automatically included in one folder group.}
+#
+%#mh/expire@@localhost /
+# @r{All MH folders are included in one folder group.}
++ /
+@end example
+
+Each line contains one folder you want to read. The definition of folders
+will be explained in detail in the next section.
+
+The part surrounded by @samp{@var{group name}@{} and @samp{@}} will become one folder group.
+One folder group is treated as a directory which can bed opened and closed in
+folder mode. It is convenient for collecting some folders and putting them
+in order.
+
+Please note that @samp{@var{group name}@{} and @samp{@}} occupies one
+line and you have to write it that way (It is because the parser sucks).
+
+There are two types of groups. One is like @samp{Emacsen} from above
+example which the user chooses his favorite folders as a group.
+
+The other one is @dfn{access group} like @samp{+} from above example.
+It makes all the sub-folders in a folder to a group.
+(It differs from the type of the folder. For example, @samp{+} makes entire
+ MH sub-directories to one group)
+
+This behavior is better understood if you try it and confirmed the function
+first. You can write and try a small folder definition, so you will know the
+idea of the folder function before writing the real one.
+
+@node Start Wanderlust,  , Folder Definition, Start Me Up
+@section Start Wanderlust
+@cindex Start Wanderlust
+
+If installation and configuration worked well, you can invoke Wanderlust by
+typing following command in Emacs.
+
+@example
+M-x wl
+@end example
+
+@noindent
+
+After initialization, Folder Mode which shows the list of folders will appear.
+That means the folders you defined in the @file{~/.folders} are listed
+If you start Wanderlust with prefix argument like @kbd{C-u M-x wl}, you
+can skip folder checking.
+
+@c
+@c  Folders
+@c
+@node Folders, Folder, Start Me Up, Top
+@chapter Wanderlust's folders 
+@cindex Folder Type
+
+This chapter describes the folder types which Wanderlust is able to handle.
+
+Wanderlust uses ELMO as it's interface, so every folder types supported
+by ELMO is usable in Wanderlust.
+
+As of version @value{version}, 10 types of folders are predefined. These are
+IMAP, NNTP, LocalDir(MH), News Spool, POP, Archive, Multi, Filter, Pipe
+and Internal folder types.
+
+@menu
+* IMAP Folder::              @samp{%} -- IMAP folder
+* NNTP Folder::              @samp{-} -- NNTP folder
+* MH Folder::                @samp{+} -- MH folder
+* Maildir Folder::           @samp{.} -- Maildir folder
+* News Spool Folder::        @samp{=} -- News spool folder
+* Archive Folder::           @samp{$} -- Archive folder
+* POP Folder::               @samp{&} -- POP folder
+* Multi Folder::             @samp{*} -- Multi folder
+* Filter Folder::            @samp{/} -- Filter folder
+* Pipe Folder::              @samp{|} -- Pipe folder
+* Internal Folder::          @samp{'} -- Internal folder
+@end menu
+
+
+@node IMAP Folder, NNTP Folder, Folders, Folders
+@section IMAP Folder
+@cindex IMAP Folder
+@cindex @samp{%}
+@cindex RFC 2060
+@cindex IMAP4rev1
+
+A folder to access e-mails via IMAP4rev1 protocol (RFC 2060).
+
+@example
+Format: '%' 'IMAP mailbox'[':' 'username' ['/' 'authenticate-type']]['@@' 'hostname'][':' 'port']['!']
+
+You can specify
+"auth" (encoded password transmission), "cram-md5" (cram-md5 authentication)
+and "login" (plain password transmission) as authenticate-type.
+(To use cram-md5 authentication, you must install utils/sasl package.)
+
+default:
+
+username  -> The value of @code{elmo-default-imap4-user}.
+             Initial setting is `USER' environment variable or
+             `LOGNAME' environment variable or return value of
+             (user-login-name).
+authenticate-type -> The value of @code{elmo-default-imap4-authenticate-type}.
+             Initial setting is "auth".
+hostname  -> The value of @code{elmo-default-imap4-server}.
+             Initial setting is "localhost".
+port -> The value of @code{elmo-default-imap4-port}.
+             Initial setting is 143.
+
+You can omit the hostname from folder names if you set
+@code{elmo-default-imap4-server} as your main IMAP server.
+For example, you can specify a folder as @samp{foo%imap@@geteway} even
+if you have to go through a firewall.
+
+SSL (Secure Socket Layer) connection will be used if a folder name
+ends with '!'. Or, if the value of @code{elmo-default-imap4-ssl} is non-nil,
+SSL will be the default connection.
+If a folder name ends with '!!', STARTTLS connection will be established.
+if the value of @code{elmo-default-imap4-ssl} is 'starttls,
+STARTTLS will be the default connection.
+
+If you specify "auth" or "cram-md5" as authentication method, the password
+is sent in encoded form. But, if your server is unable to receive an encoded
+password, authentication will fall back to "login" (that is, sending password
+in raw format) after confirmation to user. If @code{elmo-imap4-force-login}
+is non-nil, authentication will fall back to "login" without confirmation
+(default value is nil).
+
+Example: %inbox     -> IMAP mailbox "inbox"
+         %#mh/inbox -> IMAP mailbox "#mh/inbox"
+
+         %inbox:hoge -> IMAP mailbox "inbox" of user "hoge".
+         %inbox:hoge/login@@server1
+                     -> server1's IMAP mailbox "inbox"
+                        of user "hoge", with plain password authentication
+                        ("login").
+@end example
+
+@subsection International mailbox names (Modified UTF7)
+
+You can use international mailbox names in 'IMAP mailbox' part, if you
+are using Emacs which can treat unicode and
+@code{elmo-imap4-use-modified-utf7} is set to non-nil value (default
+value is nil).
+
+Currently, following Emacsen can treat unicode.
+
+@itemize @bullet
+@item Emacs 20.3 or later + Mule-UCS
+
+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
+:pserver:anonymous@@cvs.m17n.org:/cvs/root
+Password: NULL (Just enter return key)
+@end example
+
+You also need utf7 conversion programs, u7tou8 and 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 NNTP Folder
+@cindex @samp{-}
+
+A folder to access USENET news via NNTP protocol (RFC 977).
+One newsgroup is treated as a folder.
+
+@example
+Format: '-' 'newsgroup'[[':' 'username']['@@' 'hostname'][':' 'port']]['!']
+
+default:
+hostname  -> The value of @code{elmo-default-nntp-server}.
+             Initial setting is "localhost".
+username  -> The value of @code{elmo-default-nntp-user}. 
+             Initial setting is nil.
+port      -> The value of @code{elmo-default-nntp-port}.
+             Initial setting is 119.
+
+AUTHINFO is used as authentication method if the username is non-nil.
+SSL will be default method if @code{elmo-default-nntp-ssl} is non-nil even
+if the folder name doesn't end with '!'
+If a folder name ends with '!!', STARTTLS connection will be established.
+if the value of @code{elmo-default-nntp-ssl} is 'starttls,
+STARTTLS will be the default connection.
+
+Example: -fj.rec.tv            -> Newsgroup `fj.rec.tv'.
+         -fj.rec.tv@@newsserver -> Newsgroup `fj.rec.tv' on newsserver.
+@end example
+
+@node MH Folder, Maildir Folder, NNTP Folder, Folders
+@section MH Folder
+@cindex MH Folder
+@cindex @samp{+}
+@pindex MH
+
+A folder to access MH format mail (1 file is 1 mail).
+
+@example
+Format: '+' 'directory-name'
+
+Normally, directory paths are relative to variable
+@code{elmo-localdir-folder-path} (default is @file{~/Mail}), but if it
+starts with @samp{/} or @samp{~}, then it is treated as an absolute path
+(this is also true for drive-letters).
+
+Message number is used for the name of the message file.
+
+Example: +inbox         -> "~/Mail/inbox"
+         +from/teranisi -> "~/Mail/from/teranisi"
+         +~/test        -> "~/test"
+@end example
+
+@node Maildir Folder, News Spool Folder, MH Folder, Folders
+@section Maildir Folder
+@cindex Maildir Folder
+@cindex @samp{.}
+@pindex Maildir
+
+A folder to access to Maildir format (1 file is 1 mail).
+
+@example
+Format: '.' 'directory-name'
+
+Normally, directory paths are relative to variable
+@code{elmo-maildir-folder-path} (default is @file{~/Maildir}), but if it
+starts with @samp{/} or @samp{~}, then it is treated as an absolute path
+(this is also true for drive-letters).
+
+Maildir contains @file{cur}, @file{new} and @file{tmp} subdirectories.
+Messages are contained in the @file{cur} directory.  All
+message files in the @file{new} directory are moved to @file{cur}
+directory when you access to the folder. All message files contained in
+the @file{tmp} directory and not accessed for 36 hours are deleted.
+
+These behaviors are defined the @samp{http://cr.yp.to/proto/maildir.html}.
+
+Example: .              -> "~/Maildir"
+         .inbox         -> "~/Maildir/inbox"
+         .from/teranisi -> "~/Maildir/from/teranisi"
+         .~/test        -> "~/test"
+@end example
+
+@node News Spool Folder, Archive Folder, Maildir Folder, Folders
+@section News Spool Folder
+@cindex News spool Folder
+@cindex @samp{=}
+@pindex gnspool
+
+This folder handles locally saved news articles which are proposed by Mew/IM.
+You can also read articles directly from a spool-file which is retrieved
+by an utility like gnspool.
+
+@example
+Format: '=' 'directory-name'
+
+directory-name is sub-directory to the directory defined by variable
+@code{elmo-localnews-folder-path} (default is "~/News")
+You can use @samp{.} as directory delimiter as well as @samp{/}.
+
+Example: =fj/os/os2         -> "~/News/fj/os/os2"
+         =fj.os.bsd.freebsd -> "~/News/fj/os/bsd/freebsd"
+@end example
+
+@node Archive Folder, POP Folder, News Spool Folder, Folders
+@section Archive Folder
+@cindex Archive Folder
+@cindex @samp{$}
+@c @pindex ange-ftp
+
+This method can handle archive files, which are compressed by utilities
+such as Info-ZIP or LHA, as one folder.
+
+@example
+Format: '$' 'path-name' [';' archiver-type ';' prefix]
+
+`path-name' is the relative path from @code{elmo-archive-folder-path}
+(initial setting is @file{~/Mail}).
+If path-name begins with @samp{/} or @samp{~} or `drive-letter of DOS',
+path-name is treated as absolute path.
+ange-ftp format is also permitted under the environment of ange-ftp, efs.
+
+The actual file name of the archive folder is 
+@code{elmo-archive-basename}(Initial setting is "elmo-archive")
+under the path-name. If a file named path-name exists, it is treated as
+folder. The suffix is automatically decided for archiver-type.
+
+If `archiver-type' is omitted, @code{elmo-archive-default-type}
+(Initial setting is 'zip) is referred.
+
+`prefix' specifies the internal directory structure of the archive.
+For example, if the ML server is fml, @file{msend.tar.gz} has a structure like 
+@file{spool/1}, so you have to specify "spool" as `prefix'.
+
+Example: $teranisi         -> "~/Mail/teranisi/elmo-archive.zip"
+         $bsd/freebsd;lha  -> "~/Mail/bsd/freebsd/elmo-archive.lzh"
+         $/foo@@server:~/bar;zoo     -> "~/bar/elmo-archive.zoo" on ftp server
+         $d:/msend.tar.gz;tgz;spool -> "d:/msend.tar.gz"
+@end example
+
+@menu
+* Archiver::     Archivers supported
+* Archive Tips:: TIPS
+* Archive Vars:: Customization
+@end menu
+
+
+@node Archiver, Archive Tips, Archive Folder, Archive Folder
+@subsection Supported Archives
+@cindex Archiver
+@pindex LHA
+@pindex Info-ZIP
+@pindex UNZIP
+@pindex ZOO
+@pindex RAR
+@pindex TAR
+@pindex GNU TAR
+
+By default, following archives are supported.
+
+@example
+        LHA, Info-ZIP/UNZIP, ZOO, RAR  ;; full-access
+        GNU TAR('tgz, 'tar)            ;; read-only
+@end example
+
+If your archiver can include multiple files in one archive, you have a
+possibility use it as an archiver of Wanderlust (ARJ/UNARJ, ARC is one
+of the candidate. TAR is supported read-only because it cannot delete
+file in the archive ('mv)).
+
+gzip, bzip, bzip2 cannot be used as an archiver of Wanderlust because
+they cannot include multiple files. Archivers that cannot extract files
+to standard output are also not supported.
+
+@subsection OS specific information about archiver.
+
+Behaviors of the following archivers are confirmed by further experiences.
+(@samp{*} mark means recommended archiver).
+
+@example
+[OS/2]  Warp4.0J(w/o VoiceType)+Fx00505/emx0.9c(fix04)/PMMule,EmacsPM
+         LHA  OS/2 version Rel.2.06b    Feb 18, 1998
+        *UnZip 5.32 of 3 November 1997, by Info-ZIP.
+        *Zip 2.2 (November 3rd 1997).
+         Zoo archiver, zoo 2.1 $@asis{}Date: 91/07/09 02:10:34 $
+         GNU tar version 1.10 - AK 2.58 (DBCS/SJIS) 981216(homy) version
+         gzip 1.2.4 (18 Aug 93) + bzip2 patch(by Iida-san)
+
+[UN|X]  FreeBSD 2.2.7-RELEASE, Linux 2.0.30, Solaris2.6, HP-UX 9.07
+         LHa for UNIX  V 1.14c
+         UnZip 5.32 of 3 November 1997
+         Zip 2.2 (November 3rd 1997)
+         GNU tar 1.12 (1.11.x is no good)
+         gzip 1.2.4 (18 Aug 93)
+
+[Win32] Win.98/Meadow
+         Lha32 version 1.28
+         Zip 2.2
+         UnZip 5.40
+         GNU tar 1.11.8 + 1.5(WIN32)
+         GZIP 1.2.4
+         RAR 2.06
+
+* Caution about LHA
+
+If you are an OS/2 user, Peter Fitzsimmons's LH/2 is not supported.
+Hiramatsu version of LHA is only supported.
+In Win32, LHa32 is only supported (DOS version is no good).
+
+* Caution about GNU tar
+
+You have to take care about GNU tar's version because
+many version has problem on deleting file from archive.
+
+Please test --delete -f options work. Otherwise, your archive will be
+destroyed. No problem is reported on above versions of GNU tar.
+@end example
+
+
+@node Archive Tips, Archive Vars, Archiver, Archive Folder
+@subsection TIPS
+@cindex Archive Tips
+
+For comfortable migration, usage of wl-summary-archive() (@pxref{Archive}) or 
+Expire (@pxref{Expire}) is recommended.
+To treat archive folders created by expiration, 
+you must set non-nil value to @code{elmo-archive-treat-file}.
+
+On the OS/2, there is a great difference between Mule2.3(19.28) and Emacs20.2
+in processing speed. For comfortable use, Emacs20 is recommended.
+(If re-search's performance is the problem, 19.3x or later may be okay.)
+
+If many files are included in one archive,
+it takes long time to access to the archive folder because 
+archiver starting overhead is increased (especially LHA).
+150-200 messages in one archive is recommended.
+
+Of course, following is possible @t{:-)} 
+(meanings of these variables are described later.)
+@lisp
+(setq wl-fcc "$backup")
+(setq wl-trash-folder "$trash;lha")
+@end lisp
+
+@noindent
+
+
+@node Archive Vars,  , Archive Tips, Archive Folder
+@subsection Variables About Archive Folder
+@cindex Archive variables
+
+@table @code
+@item elmo-archive-default-type
+@vindex elmo-archive-default-type
+The initial setting is 'zip.
+Set archiver type by symbol. 
+
+@item elmo-archive-@var{type}-method-alist
+@vindex elmo-archive-TYPE-method-alist
+Define archiver @var{type}'s methods.
+(@var{type} is @samp{lha}, @samp{zip}, @samp{zoo}, @samp{tgz} etc)
+Each element of the alist is following.
+
+@example
+        (action . (exec-name options))   ;; external program and its option.
+        (action . function)              ;; function
+@end example
+
+Currently available actions are following.
+
+@example
+        'ls, 'cat ('cat-headers)        ;; Minimal setting(read-only)
+        'mv ('mv-pipe), 'rm ('rm-pipe)  ;; full-access (with above)
+        'cp ('cp-pipe)                  ;;
+@end example
+
+@noindent
+In above actions, 
+actions enclosed with braces are optional (They are used for better
+performance).
+
+@item elmo-archive-suffix-alist
+@vindex elmo-archive-suffix-alist
+An alist of archiver-type (symbol) and suffix.
+
+@item elmo-archive-file-regexp-alist
+@vindex elmo-archive-file-regexp-alist
+An alist of a regexp to get file number from list output of archiver
+and archiver-type (symbol).
+
+@item elmo-archive-method-list
+@vindex elmo-archive-method-list
+A list of elmo-archive-@var{type}-method-alist
+(@var{type} is a symbol of archiver-type).
+
+@item elmo-archive-lha-dos-compatible
+@vindex elmo-archive-lha-dos-compatible
+The initial setting is t on OS/2 and Win32.
+If non-nil, LHA is DOS (Mr. Yoshizaki original) compatible.
+
+@item elmo-archive-cmdstr-max-length
+@vindex elmo-archive-cmdstr-max-length
+The initial setting is 8000.
+
+Max length of command line argument for external archiver program.
+Emacs does not have a limit of command line byte length, but some OS
+(e.x OS/2) have. It depends on the OS. Archive folder is affected by
+this limit because it calls external archiver program directly (not
+called via shell).  For example, you cannot delete messages if archiver
+program must receive larger bytes of arguments to delete.  OS/2 have a
+command line argument limit of 8190 bytes, so we defined default as 8000
+with some margin.
+
+However, you don't have an influence of command line argument limit
+if the archiver has `actions' to receive target file information from
+standard input (rm-pipe, mv-pipe, cat-headers action).
+@end table
+
+@node POP Folder, Multi Folder, Archive Folder, Folders
+@section POP Folder
+@cindex POP Folder
+@cindex @samp{&}
+@cindex RFC 1939
+@cindex POP3
+@cindex APOP
+
+A folder to access e-mails via POP3 protocol (RFC 1939).
+
+@example
+Format: '&' ['username'][['/' 'authenticate-type']['@@' 'hostname'][':' 'port']]['!']
+
+You can specify
+"user"  (plain password transmission) or "apop"  (APOP authentication)
+as authenticate-type.
+
+default:
+username   -> The value of @code{elmo-default-pop3-user}.
+              Initial setting is `USER' environment variable or
+             `LOGNAME' environment variable or return value of
+             (user-login-name).
+authenticate-type -> The value of @code{elmo-default-pop3-authenticate-type}.
+              Initial setting is "user".
+hostname   -> The value of @code{elmo-default-pop3-server}.
+              Initial setting is "localhost".
+port       -> The value of @code{elmo-pop3-default-port}.
+              Initial setting is 110.
+
+Example: &hoge@@localhost -> access to localhost as user "hoge".
+         &hoge@@popserver:109 -> access to the server "popserver" on port 109
+                                 as user "hoge".
+@end example
+
+To use apop as an authenticate-type, @file{md5.el} is needed
+(XEmacs doesn't need @file{md5.el}).
+@file{md5.el} is included in @file{utils/sasl/lisp/} or Emacs/W3 package
+
+@example
+http://www.cs.indiana.edu/elisp/w3/docs.html
+@end example
+
+or LCD archive (GPL2).
+
+If the last character of the folder name is '!', Wanderlust connects to
+the POP server via SSL (Secure Socket Layer).  If you set non-nil
+value to @code{elmo-default-pop-ssl}, you don't have to put '!' in the
+end of the folder name to use SSL. 
+If a folder name ends with '!!', STARTTLS connection will be established.
+if the value of @code{elmo-default-pop-ssl} is 'starttls,
+STARTTLS will be the default connection.
+
+@node Multi Folder, Filter Folder, POP Folder, Folders
+@section Multi Folder
+@cindex Multi Folder
+@cindex @samp{*}
+@cindex Folder, Multiple
+@cindex Folder, Marge
+
+A folder to access to a folder which collects messages from
+multiple folders virtually.
+
+@example
+Format: '*' 'folder' [',' 'folder'] ... [',' 'folder']
+
+After '*' character, specify multiple folders you want to collect 
+separated by ',' like folder1,folder2,@dots{},folderN.
+
+Example:
+  *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs
+  -> -fj.editor.xemacs, -fj.editor.mule and -fj.editor.emacs are
+     treated as one folder.
+
+  *+inbox,-fj.rec.tv,%inbox
+  -> +inbox, -fj.rec.tv and %inbox are treated as one folder.
+
+@end example
+
+
+@node Filter Folder, Pipe Folder, Multi Folder, Folders
+@section Filter Folder
+@cindex Filter Folder
+@cindex @samp{/}
+@cindex Folder, Filtering
+@cindex Folder, Virtual
+
+A folder to access to a folder which collects all messages that 
+satisfy a condition virtually.
+
+@example
+Format: '/' 'condition' '/' 'target-folder'
+
+In the 'condition' part, you can specify following.
+
+1. Partial filter: "first:NUMBER", "last:NUMBER"
+
+first: 'NUMBER' messages are picked from top of folder.
+last:  'NUMBER' messages are picked from bottom of folder.
+
+Example:
+  /last:10/-fj.os.linux -> Latest 10 messages from -fj.os.linux are picked.
+  /first:20/%inbox      -> First 20 messages from %inbox are picked.
+
+2. Date filter: "since:DATE" "before:DATE"
+
+since: only messages arrived since 'DATE' are picked.
+before: only messages arrived before 'DATE' are picked.
+
+You can specify following as 'DATE'.
+
+yesterday ->  a day before today.
+lastweek  ->  same day of last week.
+lastmonth ->  same day of last month.
+lastyear  ->  same day of last year.
+'NUMBER'daysago -> 'NUMBER' days ago. (e.x. '3daysago')
+'DAY'-'MONTH'-'YEAR' -> specify date directly (ex. 1-Nov-1998)
+
+Example:
+  /since:3daysago/+inbox -> messages arrived since 3 days ago in +inbox
+                            are picked.
+  /before:yesterday/+inbox -> messages arrived before yesterday in +inbox
+                            are picked. 
+
+3. Field filter: "FIELD=VALUE"
+
+All messages that have FIELD and its value is VALUE are picked.
+'FIELD' and 'VALUE' are case insensitive.
+
+Example:
+  /from=teranisi/+inbox -> In +inbox, messages which have From: field
+                           and its value includes "teranisi" string are picked.
+  /body=foo/%inbox      -> In %inbox, messages which have "foo" text
+                           are picked.
+
+If you can split conditions by character "|", it is considered as OR condition.
+/tocc=xxxx/ is an abbreviation of /to=xxxx|cc=xxxx/.
+
+Example:
+
+  /from=teranisi|to=teranisi/+inbox
+                        -> In +inbox, messages are picked if
+                           the message's To: field includes
+                           "teranisi" or From: field includes "teranisi".
+  /tocc=teranisi/+inbox -> In +inbox, messages are picked if
+                           the message's To: field or Cc: field includes
+                          "teranisi".
+
+Advanced example:
+
+  %inbox,/from=teranisi/%inbox@@server
+         -> Messages in %inbox or
+            message is in the %inbox@@server folder and it's From field
+            includes "teranisi" are collected.
+
+  /last:100//to=teranisi/*+inbox,%inbox
+         -> Latest 100 messages which is in the +inbox or %inbox folder
+            and To: field matches "teranisi".
+
+  /from=hogehoge//last:20//tocc=teranisi/%#mh/inbox@@localhost
+         -> Pick messages which have From: field and it includes "hogehoge"
+            from latest 20 messages in the %#mh/inbox@@localhost
+            and To: or Cc: field includes "teranisi".
+
+;;; --- Limit of implementation ---
+;;; In the current implementation, NNTP folder does not treat date filter and
+;;; field filter.
+;;; In IMAP4 folder, field filter only supports fields which can be 
+;;; passed directly to rfc2060's search command.
+;;; (i.e. to,cc,from,subject and body)
+;;; Localdir folder treats arbitrary field name.
+@end example
+
+@node Pipe Folder, Internal Folder, Filter Folder, Folders
+@section Pipe Folder
+@cindex Pipe Folder
+@cindex @samp{|}
+@cindex Get Message
+@cindex Download Message
+@cindex Incorporate Message
+
+In the pipe folder, messages are automatically transferred from the source
+folder to destination folder.
+
+@example
+Format: '|' source-folder '|' destination-folder
+
+When you access to the pipe folder, messages are automatically transferred
+from source-folder to destination-folder.
+It is convenient if you want to download messages to local disk via POP.
+For example, if you specify following
+
+|&username@@popserver|+inbox
+
+and access to it, messages are downloaded automatically from
+&username@@popserver to +inbox.
+
+Example: %inbox|%myinbox   -> Download %inbox to %myinbox.
+         *&user@@popserver1,&user@@popserver2|+inbox
+         -> Download from &user@@popserver1 and &user@@popserver2 to +inbox.
+@end example
+
+After messages are moved, a hook @code{elmo-pipe-drained-hook} is called.
+
+@node Internal Folder,  , Pipe Folder, Folders
+@section Internal folder
+@cindex Internal Folder
+@cindex @samp{'}
+@cindex Folder, @samp{$} mark
+
+A folder to access to internal messages of Wanderlust.
+
+@example
+Format: 'mark
+        or
+        'cache/00 - 1F
+
+A folder named 'mark is a special virtual folder which collects messages
+which have important mark @samp{$}.
+
+You can review important messages at once after you put important marks
+on the messages in the different folders.
+
+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.
+
+You can access to the cached messages fetched via network by accessing
+to the folders named 'cache/00 - 1F. 00 - 1F are the name of the
+subdirectories of the cache directory (@file{~/.elmo/cache}).
+@end example
+
+@c
+@c  Folder
+@c
+@node Folder, Summary, Folders, Top
+@chapter Folder mode
+@cindex Folder
+
+After you start Wanderlust, folder mode is appeared firstly.
+It contains folder list you subscribed.
+You can select and edit folders in this mode.
+
+@menu
+* Selecting Folder:: Select folder you want to read.
+* Folder Manager::   Editing folders.
+@end menu
+
+
+@node Selecting Folder, Folder Manager, Folder, Folder
+@section Selecting Folder
+@cindex Selecting Folder
+
+@subsection Usage (TIPS)
+
+@subsubsection Check new, unread number
+
+Folder mode looks like this.
+(In XEmacs, it looks much nicer @t{;-)})
+
+@example
+[-]Desktop:14186/35580/67263
+   Inbox:3/10/10
+   Trash:2/7/10
+   Drafts:0/0/3
+   Sent:0/9/348
+   [-]Emacsen:0/34/4837
+     Wanderlust ML:0/0/558
+     ELIPS ML:0/0/626
+     tm:0/0/821
+     XEmacs Beta:0/29/255
+     Mew:0/0/998
+     Mule-Win32:0/0/1491
+     fj's Emacsen:0/5/88
+@end example
+
+
+Each line means:
+
+@example
+FOLDER-NAME:NEW-NUMBER/UNREAD-NUMBER/ALL-NUMBER
+@end example
+
+@noindent
+
+@kbd{s} key on the folder line updates these numbers.
+It changes its color if it has many new messages.
+
+The whole folder mode is a folder group named @samp{Desktop}.
+Folder group open/close by return key.
+A operation to a folder group is treated as operations on the
+children folders.
+For example, when you type @kbd{s} on @samp{[-]Emacsen},
+six children folders update its unread number status.
+
+@subsubsection Select Folder
+
+To enter summary mode of the folder, type return (or spece) key on
+the folder line.
+If the variable @code{wl-stay-folder-window} has non-nil value, 
+summary window appears on the right of the folder mode window.
+
+@subsection Key bindings
+
+Folder mode's key binding (related to selecting folders) is following.
+
+@table @kbd
+@item @key{SPC}
+@itemx @key{RET}
+@kindex @key{SPC} (Folder)
+@kindex @key{RET} (Folder)
+@findex wl-folder-jump-to-current-entity
+Enter to the summary mode of the folder at the current cursor point.
+If the cursor is on the top of folder group line, 
+the folder group is opened or closed.
+When the cursor is on the access group and this command is called 
+with prefix argument, folder children list is updated to the newest one.
+(Children list is updated recursively if the access folder has hierarchical
+structure.)
+(@code{wl-folder-jump-to-current-entity})
+
+@item M-@key{RET}
+@kindex M-@key{RET} (Folder)
+@findex wl-folder-update-recursive-current-entity
+Folder children list of the access group at the current cursor point
+is updated to the newest one.
+(Children list is updated recursively if the access folder has hierarchical
+structure.)
+(@code{wl-folder-update-recursive-current-entity})
+
+@item w
+@kindex w (Folder)
+@findex wl-summary-write
+Create a new draft message.
+(@code{wl-summary-write})
+
+@item W
+@kindex W (Folder)
+@findex wl-summary-write-current-newsgroup
+If the current cursor point is on the NNTP folder,
+create a new draft message which already has newsgroups field.
+(@code{wl-summary-write-current-newsgroup})
+
+@item s
+@kindex s (Folder)
+@findex wl-folder-check-current-entity
+Update new and unread number information of the folder at the current 
+cursor point.
+(@code{wl-folder-check-current-entity})
+
+@item S
+@kindex S (Folder)
+@findex wl-folder-sync-current-entity
+Update summary information of the folder at the current cursor point.
+(@code{wl-folder-sync-current-entity})
+
+@item r s
+@kindex r s (Folder)
+@findex wl-folder-check-region
+Update new and unread number information of the folders in the currently
+selected region.
+(@code{wl-folder-check-region})
+
+@item r S
+@kindex r S (Folder)
+@findex wl-folder-sync-region
+Update summary information of the folders in the currently selected region.
+(@code{wl-folder-sync-region})
+
+@item P
+@kindex P (Folder)
+@findex wl-folder-prev-unread
+Jump cursor to the folder which have unread messages on the upward from
+current cursor point.
+(@code{wl-folder-prev-unread})
+
+@item N
+@kindex N (Folder)
+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)
+Move cursor to the folder on the previous line.
+(@code{wl-folder-prev-entity})
+
+@item n
+@kindex n (Folder)
+Move cursor to the folder on the next line.
+(@code{wl-folder-next-entity})
+
+@item J
+@kindex J (Folder)
+Jump to the folder specified by the user input.
+(@code{wl-folder-jump-folder})
+
+@item I
+@kindex I (Folder)
+@findex wl-folder-prefetch-current-entity
+Prefetch new messages of the folder at the current cursor point by
+@code{wl-summary-incorporate}.
+If the cursor is on the folder group, it is executed recursively.
+(@code{wl-folder-prefetch-current-entity})
+
+@item c
+@kindex c (Folder)
+@findex wl-folder-mark-as-read-all-current-entity
+Mark all unread messages of the folder at the current cursor point as read.
+If the cursor is on the folder group, it is executed recursively.
+(@code{wl-folder-mark-as-read-all-current-entity})
+
+@item f
+@kindex f (Folder)
+@findex wl-folder-goto-first-unread-folder
+Enter summary mode of the first unread folder.
+(@code{wl-folder-goto-first-unread-folder})
+
+@item E
+@kindex E (Folder)
+@findex wl-folder-empty-trash
+Empty trash.
+(@code{wl-folder-empty-trash})
+
+@item o
+@kindex o (Folder)
+@findex wl-folder-open-all-unread-folder
+All unread folder is opened.
+(@code{wl-folder-open-all-unread-folder})
+
+@item /
+@kindex / (Folder)
+@findex wl-folder-open-close
+Folder group is opened/closed.
+(@code{wl-thread-open-close})
+
+@item [
+@kindex [ (Folder)
+All folder group is opened.
+(@code{wl-folder-open-all})
+
+@item ]
+@kindex ] (Folder)
+All folder group is closed.
+(@code{wl-folder-close-all})
+
+@item q
+@kindex q (Folder)
+Quit Wanderlust.
+(@code{wl-exit})
+
+@item z
+@kindex z (Folder)
+Suspend Wanderlust.
+(@code{wl-folder-suspend})
+
+@item M-s
+@kindex M-s (Folder)
+Save current folder status.
+(@code{wl-save})
+
+@item M-t
+@kindex M-t (Folder)
+Toggle Wanderlust's offline/online status.
+(@code{wl-toggle-plugged})
+
+@item C-t
+@kindex C-t (Folder)
+Start Wanderlust's plug-status manager.
+(@code{wl-plugged-change})
+@end table
+
+@subsection Customize variables
+
+@table @code
+@item wl-folders-file
+@vindex wl-folders-file
+The initial setting is "~/.folders".
+Subscribed folders are described (saved) in this file.
+
+@item wl-folder-info-save
+@vindex wl-folder-info-save
+The initial setting is t.
+If non-nil, unread information is saved and used in the next Wanderlust session.
+
+@item wl-stay-folder-window
+@vindex wl-stay-folder-window
+The initial setting is nil.
+If non-nil, summary window is appeared on the right side of the folder buffer.
+
+@item wl-folder-window-width
+@vindex wl-folder-window-width
+The initial setting is 20.
+Folder mode's window width when @code{wl-stay-folder-window} is non-nil.
+
+@item wl-folder-many-unsync-threshold
+@vindex wl-folder-many-unsync-threshold
+The initial setting is 70.
+If the number of unread messages is more than this value,
+folder color is changed.
+
+@item wl-folder-desktop-name
+@vindex wl-folder-desktop-name
+The initial setting is "Desktop".
+The name of top folder group.
+
+@item wl-folder-petname-alist
+@vindex wl-folder-petname-alist
+The initial setting is nil.
+An alist of folder's realname and its nickname.
+
+@item wl-folder-access-subscribe-alist
+@vindex wl-folder-access-subscribe-alist
+The initial setting is nil.
+
+Control automatic subscribing and unsubscribing of the children list
+of access groups.
+
+Each element is:
+
+('regexp of access-folder' . ('subscribe-flag' 'regexp-of-folders' @dots{}))
+
+If subscribe-flag is non-nil, folders which have name matched to
+regexp-of-folders are displayed. Otherwise, hidden.
+However, already unsubscribed folder is not displayed even 
+when the subscribe-flag is non-nil. Multiple regexp-of-folders can be specified.
+
+Example:
+
+@example
+'(("^-fj$" . (t   "^-fj\\.\\(comp\\|editor\\|mail\\)"
+                  "^-fj\\.\\(net\\|news\\|os\\|rec\\)"))
+  ("^-$" . (t   "^-\\(fj\\|tnn\\|japan\\|gnu\\|comp\\)"))
+  ("^\\+ml$" . (nil "^\\+ml$" "^\\+ml/tmp")))
+@end example
+
+@item wl-folder-hierarchy-access-folders
+@vindex wl-folder-hierarchy-access-folders
+The initial setting is '("-" "-alt").
+A list of access groups which creates children folder list hierarchically.
+
+For example, if you specify
+@code{wl-folder-hierarchy-access-folders} like following,
+
+@lisp
+(setq wl-folder-hierarchy-access-folders
+     '("-" "-alt" "-japan" "-comp" "-comp.unix"))
+@end lisp
+
+such access group hierarchy is obtained.
+
+@example
+   [-]-:912/912/3011
+     [-]-fj:674/674/1314
+       -fj.comp.announce:0/0/2
+       -fj.comp.dev.cdrom:0/0/0
+       @dots{}
+     [+]-japan:238/238/1688
+     [-]-comp:0/0/4
+       [-]-comp.unix:0/0/0
+         -comp.unix.admin:0/0/0
+         -comp.unix.dos-under-unix:0/0/0
+         -comp.unix.programmer:0/0/0
+         [-]-comp.unix.bsd:0/0/23
+           -comp.unix.bsd.freebsd.announce:0/0/0
+     @dots{}
+@end example
+
+If you opened @samp{-} in this example, only the direct children is created
+(@samp{-fj}, @samp{-japan}, @samp{-tnn}, @dots{}).
+second hierarchy (@samp{-fj.comp.announce}, @dots{}, @samp{-comp.unix}, @dots{})
+is not created until the children access group is opened.
+@end table
+
+
+@node Folder Manager,  , Selecting Folder, Folder
+@section Editing Folders
+@cindex Folder Manager
+@cindex Folder, Edit
+@cindex Folder, Subscribe
+@cindex Folder, Unsubscribe
+
+As described before, subscribed folder list is saved in @file{~/.folders} file.
+But you don't have to edit @file{~/.folders} directly.
+You can append, delete, edit folders from folder mode.
+
+@subsection Usage (Tips)
+
+@subsubsection Append Folder
+
+@kbd{m a} appends new folder to the folder mode.
+@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.
+
+@subsubsection Edit Folder
+
+You can cut folder by @kbd{C-k}, paste by @kbd{C-y}.
+Thus, you can change folder position as if you were editing a normal file.
+
+@subsubsection Create Multi Folder.
+
+@enumerate
+@item
+Type @kbd{m q} to clear @code{wl-fldmgr-cut-entity-list}.
+@item
+Cut folder by @kbd{C-k} or copy folder by @kbd{M-c}.
+@item
+Type @kbd{m m}, then you can create multi folder.
+@end enumerate
+
+@subsubsection Delete Nickname, Filter
+
+You can delete nickname or filter by putting ""(NULL) from the minibuffer
+while appending.
+
+@subsubsection Append Folder to Empty Group
+
+To append new folder to the empty folder group
+(after you create folder group by typing @kbd{m g}),
+firstly open it, then execute append command in the next line.
+If it is closed, folder is appended on the same level with
+the above folder group. It is difficult to explain by words so try it.
+In other words, appended position depends on the 
+above folder group's open/close status.
+
+@subsubsection Charset of the Folders File.
+
+@code{wl-mime-charset} is used for saving @code{wl-folders-file}.
+
+@subsubsection Create Filter
+
+@kbd{m f} adds filter to the folder at the current cursor point.
+To create new filter folder and leave the current folder unchanged, 
+copy it @kbd{M-c}, make filter @kbd{m f} and paste it @kbd{C-y}.
+Multiple filter can be specified while appending filter.
+If you put ""(NULL), filter is deleted.
+
+@subsubsection Sort Folders
+
+Sorting of the folders is executed by the function specified by 
+@code{wl-fldmgr-sort-func}. 
+The initial setting is @code{wl-fldmgr-sort-standard}, 
+which sorts alphabetically.
+Sorting affects only on the current folder group. It does not 
+affect on the child groups.
+
+@subsubsection Hiding Folders in the Access Group
+
+Usually, access group displays all children folders, but you can set
+some folders hidden. Following operations are only available on access
+group.
+
+Command @code{wl-fldmgr-unsubscribe} (@kbd{u}) toggles
+the visibility (subscribe/unsubscribe) of the folder at current cursor point.
+
+Against this, @code{wl-fldmgr-unsubscribe-region} (@kbd{U}) hides folders
+in the specified region.  Note that @code{wl-fldmgr-unsubscribe-region}
+does not toggle while @code{wl-fldmgr-unsubscribe} toggles.  These two
+commands accept prefix argument and if the argument has positive number,
+the unsubscribe it.  If the prefix argument has negative value, folder
+becomes visible and if zero, folder visibility is toggled.
+
+The other commands, @code{wl-fldmgr-subscribe} and
+@code{wl-fldmgr-subscribe-region} are also prepared (not binded to the
+key).
+
+Moreover, if @code{wl-fldmgr-cut} or @code{wl-fldmgr-cut-region} is
+executed in the access group, they have a same effect with
+@code{wl-fldmgr-unsubscribe} and @code{wl-fldmgr-unsubscribe-region}.
+The difference is that cut(-region) commands deletes folders from the
+current buffer.
+
+@subsubsection Operations in the Access Group
+
+You can insert and delete folders in the access group like usual folder
+group.  But insert and delete commands can be only available for the
+children folders of the access group and they only sets the subscribe
+status.  In other words, insertion of the folder means subscribing,
+deletion means unsubscribing.
+@footnote{In the current implementation, 
+it is faster to delete region than to unsubscribe region.}
+
+To update the access group when children folders are inserted or deleted
+by other way (other than Wanderlust), 
+open the access group by typing @kbd{C-u @key{RET}}.
+@xref{Selecting Folder}.
+
+The order of children folders of access group is saved after
+insertion/deletion/sorting.
+If you set @code{wl-force-fetch-folders} to non-nil or open access group
+by typing @kbd{C-u @key{RET}}, disappeared folders are deleted and
+newly created folders are inserted on the top of the access group.
+
+@subsection Key bindings
+@cindex Keybind, Folder Mode
+@cindex Keybind, Folder Buffer
+
+Key bindings on the folder mode related to folder editing are shown below.
+All bindings starts with @kbd{m}, and primary commands are binded to 
+one stroke key binding.
+
+@table @kbd
+@item m a
+@kindex m a (Folder)
+@findex wl-fldmgr-add
+Insert a folder.
+(@code{wl-fldmgr-add})
+
+@item +
+@itemx m g
+@kindex + (Folder)
+@kindex m g (Folder)
+@findex wl-fldmgr-make-group
+Create a folder group.
+(@code{wl-fldmgr-make-group})
+
+@itemx m A
+@kindex m A (Folder)
+@findex wl-fldmgr-make-access-group
+Create an access group. 
+(@code{wl-fldmgr-make-access-group})
+
+@item m d
+@kindex m d (Folder)
+@findex wl-fldmgr-delete
+Delete folder itself and msgdb.
+If the folder itself cannot be deleted like NNTP folder,
+only msgdb is deleted.
+(@code{wl-fldmgr-delete})
+
+@item R
+@itemx m R
+@kindex R (Folder)
+@kindex m R (Folder)
+@findex wl-fldmgr-rename
+Change the name of folder or folder group.
+msgdb's path is also changed.
+(@code{wl-fldmgr-rename})
+
+@item *
+@itemx m m
+@kindex * (Folder)
+@kindex m m(Folder)
+@findex wl-fldmgr-make-multi
+Create a multi folders in the cutlist (cut, copied folders).
+(@code{wl-fldmgr-make-multi})
+
+@item |
+@itemx m f
+@kindex | (Folder)
+@kindex m f (Folder)
+@findex wl-fldmgr-make-filter
+Create a filter folder. (Put a filter on the folder).
+(@code{wl-fldmgr-make-filter})
+
+@item M-c
+@itemx m c
+@kindex M-c (Folder)
+@kindex m c (Folder)
+@findex wl-fldmgr-copy
+Copy folder (it is not available on folder group).
+(@code{wl-fldmgr-copy})
+
+@item M-w
+@itemx m W
+@kindex M-w (Folder)
+@kindex m W (Folder)
+@findex wl-fldmgr-copy-region
+Copy folders in the specified region.
+(@code{wl-fldmgr-copy-region})
+
+@item C-k
+@itemx m k
+@kindex C-k (Folder)
+@kindex m k (Folder)
+@findex wl-fldmgr-cut
+Cut folder. Folder itself is not deleted.
+(@code{wl-fldmgr-cut})
+
+@item C-w
+@itemx m C-w
+@kindex C-w (Folder)
+@kindex m C-w (Folder)
+@findex wl-fldmgr-cut-region
+Cut folders in the specified region.
+(@code{wl-fldmgr-cut-region})
+
+@item C-y
+@itemx m y
+@kindex C-y (Folder)
+@kindex m y (Folder)
+@findex wl-fldmgr-yank
+Paste folders that are copied or cut (folders in the cut-list).
+(@code{wl-fldmgr-yank})
+
+@item m p
+@kindex m p (Folder)
+@findex wl-fldmgr-set-petname
+Put nickname on the folder.
+(@code{wl-fldmgr-set-petname})
+
+@item m q
+@kindex m q (Folder)
+@findex wl-fldmgr-clear-cut-entity-list
+Clear the cut-list. (cut, copied folder information is cleared,
+you cannot paste after this)
+(@code{wl-fldmgr-clear-cut-entity-list})
+
+@item m s
+@kindex m s (Folder)
+@findex wl-fldmgr-sort
+Sort folders in the current folder group.
+(@code{wl-fldmgr-sort})
+
+@item m C-s
+@kindex m C-s (Folder)
+@findex wl-fldmgr-save
+Save current folder view to the @file{wl-folders-file}.
+(@code{wl-fldmgr-save})
+@end table
+
+[Following commands are only available on the access groups]
+
+@table @kbd
+@item u
+@itemx m u
+@kindex u (Folder)
+@kindex m u (Folder)
+@findex wl-fldmgr-unsubscribe
+Set the visibility of folder (subscribe/unsubscribe).
+(@code{wl-fldmgr-unsubscribe})
+
+@item U
+@itemx r u
+@kindex U (Folder)
+@kindex r u (Folder)
+@findex wl-fldmgr-unsubscribe-region
+Set the visibility of the folders (subscribe/unsubscribe) in the
+specified region. 
+(@code{wl-fldmgr-unsubscribe-region})
+
+@item l
+@itemx m l
+@kindex l (Folder)
+@kindex m l (Folder)
+@findex wl-fldmgr-access-display-normal
+List folders that are currently available.
+(@code{wl-fldmgr-access-display-normal})
+
+@item L
+@itemx m L
+@kindex L (Folder)
+@kindex m L (Folder)
+@findex wl-fldmgr-access-display-all
+List all folders regardless of the subscription status.
+(@code{wl-fldmgr-access-display-all})
+
+@item C-c C-o
+@kindex C-c C-o (Folder)
+@findex wl-jump-to-draft-buffer
+Move to the draft buffer if available.  If multiple draft buffer exists,
+moved to one after another.  If prefix argument is specified, load draft
+folder's message to the draft buffer and jump to it.
+(@code{wl-jump-to-draft-buffer})
+@end table
+
+
+@subsection Customize variables
+
+@table @code
+@item  wl-interactive-save-folders
+@vindex wl-interactive-save-folders
+The initial setting is t.
+If non-nil and folder view is modified, confirm saving it before
+Wanderlust or Emacs exits.
+If nil, save without confirmation.
+
+@item wl-fldmgr-make-backup
+@vindex wl-fldmgr-make-backup
+The initial setting is t.
+If non-nil, @file{~/.folders.bak} is created before saving the folder status.
+
+@item wl-fldmgr-sort-func
+@vindex wl-fldmgr-sort-func
+The initial setting is 'wl-fldmgr-sort-standard.
+A function to sort folders.
+By default function, folders are sorted alphabetically and
+folder group is put on top
+(when @code{wl-fldmgr-sort-group-first} is non-nil).
+
+@item wl-fldmgr-sort-group-first
+@vindex wl-fldmgr-sort-group-first
+The initial setting is t.
+If non-nil, @code{wl-fldmgr-sort-standard} precedes folder group.
+If nil, it does not care whether it is folder group or not.
+
+@item wl-folder-check-async
+@vindex wl-folder-check-async
+The initial setting is t.
+If non-nil, check folder's unread status asynchronously.
+It boosts newsgroup checking.
+
+@item wl-folder-check-fast
+@vindex wl-folder-check-fast
+The initial setting is nil.
+If non-nil, it does not update folder status while checking.
+@c it is obsolete?
+@item wl-folder-notify-deleted
+@vindex wl-folder-notify-deleted
+The initial setting is nil.
+@c  nil means?
+If non-nil, negative value is displayed when the message is deleted.
+If 'sync, folder is synchronized when the message is deleted.
+If nil, message deletion is ignored.
+@end table
+
+@subsection Miscellanea
+
+Following is a note for folder editing.
+
+@enumerate
+@item
+cut or copy stacks the folder in the @code{wl-fldmgr-cut-entity-list}.
+paste(yank) command pastes the folders on one cut or copy command
+(If copy command is executed by region, folders in the region are pasted
+by one paste command)
+
+@item
+You cannot cut 'Desktop' group.
+Also, you cannot paste folders at the outside of the 'Desktop'.
+
+@item
+You cannot copy folder group.
+
+@item
+Operations on the access group are only available for the folders
+in the same access group.
+
+@item
+You cannot create a folder which has same name with the folders already exist.
+
+@item
+You cannot insert folders which have same name in one group.
+You can insert them in the different groups.
+You cannot put same nickname to the different folders.
+@end enumerate
+
+
+@c
+@c  Summary
+@c
+@node Summary, Message, Folder, Top
+@chapter Summary Mode
+
+@section Usage (Tips)
+
+@subsection Summary Content
+
+After you select the folder via folder mode, you enter to the summary mode.
+In the summary mode, messages are displayed like following.
+
+@example
+  377  09/16(Wed)11:57 [+1: Takuro Kitame  ] Bug?
+  381  09/17(Thu)00:16 [+3: Fujikazu Okuni ] elmo-lha.el -- LHA interface
+  384  09/17(Thu)01:32 [+1: Yuuichi Terani ] wl-0.6.2
+  389 N09/18(Fri)01:07 [+2: Yuuichi Terani ] wl-0.6.3
+@end example
+
+Each line displays:
+
+@example
+Message number, Temporal mark, Persistent mark, Date, Sender, Subject
+@end example
+
+@noindent
+You cannot change this in the current version.
+
+'Message number' is the message's unique number in the folder. In the NNTP
+folder, it is article number, in the IMAP folder, it is UID and in the
+MH folder, it is the filename of the message.
+
+Temporal and Persistent marks are described later.
+
+'Date' is displayed like 'Month/Day(Week Day)Hour:Minute'.
+Default setting displays week day in Japanese, but if you want to 
+display it in English, set the value of @code{wl-summary-weekday-name-lang}
+as "en".
+
+'Sender's indentation corresponds to the depth of the thread.
+Sender name is displayed as nickname if it is defined in the address book.
+Set @code{wl-use-petname} as nil, if you want to quit displaying with nickname.
+
+If number is printed at the head of 'sender' part like @samp{+2},
+that means the message have 2 follow messages.
+
+'Subject' is the Subject header field of the message.  If the message
+have same subject with the parent message, it is not displayed.  Some
+mailing list puts its sequence number in the subject field, but it is
+ignored. @code{wl-summary-no-subject-message} is displayed when the
+message has empty subject field.
+
+@subsection Temporary Marks
+@cindex Mark, Temporary
+
+There are four temporary marks, 
+@samp{*}, @samp{D}, @samp{o} and @samp{O}.
+Temporary marks indicates message operations.
+
+@table @samp
+@item *
+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 delete. You can put @samp{D} by typing @kbd{d} key.
+
+@item o
+The mark to refile.
+After you type @kbd{o} key, prompt appears to input refile destination.
+Your answer is printed in the summary line.
+
+@item O
+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.
+@end table
+
+@kbd{x} key executes @samp{D}, @samp{o} and @samp{O} marks.
+
+@subsection Persistent Marks
+
+There are five persistent marks,
+@samp{N}, @samp{U}, @samp{!}, @samp{u} and @samp{$}.
+
+The persistent mark indicates the message's status and it is saved.
+Each persistent mark indicates:
+
+@table @samp
+@item N
+It is new message.
+@item U
+It is unread message.
+@item !
+It is unread but cached message.
+@item u
+It is read but it is not 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 remains in the folder
+even the message itself is deleted in the actual folder.
+
+@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.
+
+@subsection How To Read
+
+Basically, you can read messages only typing space key again and again.
+
+To update summary status to the newest status (synchronize),
+type @kbd{s} key.
+
+You can jump to next unread message by typing @kbd{N} key, and @kbd{n} key
+moves cursor to the next message.
+Enter message buffer by typing @kbd{j} key.
+To operate multipart, you have to enter to the message buffer.
+
+@subsection Thread Operations
+
+For example, the following line indicates one thread (a context of a topic).
+
+@example
+  384  09/17(Thu)01:32 [+1: Teranishi       ] wl-0.6.2
+@end example
+
+@noindent
+
+If you type @kbd{/} on this line, the thread is opened and it changes
+the appearance like following.
+
+@example
+  384  09/17(Thu)01:32 [ Teranishi          ] wl-0.6.2
+  388  09/17(Thu)22:34 +-[ Murata san         ]
+@end example
+
+(Message 388 is the replied message to the message 384.)
+If you type @kbd{/} key once again, the thread is closed.
+With prefix argument, @kbd{/} opens all children threads.
+
+Commands with the key binding that begins with @kbd{t} executes commands
+on the messages in the thread.
+
+@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 @file{~/.elmo/cache}.
+
+To expire cache, type following.
+
+@example
+M-x elmo-cache-expire-by-size
+@end example
+
+@noindent
+
+The command deletes cache files to the specified size by the order of
+last accessed time.
+
+@subsection Buffer Cache and Prefetching
+
+If the value of @code{elmo-use-buffer-cache} is non-nil,
+the messages that are read are kept in the cache buffer.
+It is called `buffer cache'. 
+The number of cache buffer is specified by @code{elmo-buffer-cache-size}.
+
+There are message prefetching mechanism in the Wanderlust that prefetches next
+message while you are reading.  This function requires that the value of
+@code{elmo-use-buffer-cache} is non-nil.
+
+You can control the message prefetching mechanism by these two variables.
+
+@table @code
+@item wl-cache-prefetch-folder-type-list
+@vindex wl-cache-prefetch-folder-type-list
+The initial setting is '(nntp imap4).
+It specifies the folder types in which message prefetching is enabled.
+In the initial setting, multi folder that contains localdir and imap4 
+prefetches only imap4 messages.
+This variable precedes the value of @code{wl-cache-prefetch-folder-list}.
+
+If you want to prefetch localdir and localnews also, following setting is needed.
+@lisp
+(setq wl-cache-prefetch-folder-type-list
+      '(nntp imap4 localdir localnews))
+@end lisp
+
+@item wl-cache-prefetch-folder-list
+@vindex wl-cache-prefetch-folder-list
+The initial setting is nil.
+A list of regexp of folders to enable message prefetching.
+@end table
+
+@subsection Auto Refile
+
+You refile messages automatically, by typing @kbd{C-o}
+(@code{wl-summary-auto-refile}). It decides destination of refile by
+the content of the message header information (information in the msgdb).
+
+By default, @samp{From}, @samp{Subject}, @samp{To} and @samp{Cc} is available.
+If you want to decide destination by other header fields, 
+set the variable @code{elmo-msgdb-extra-fields} like following.
+
+@lisp
+(setq elmo-msgdb-extra-fields
+      '("x-ml-name"
+      "reply-to"
+      "sender"
+      "mailing-list"
+      "newsgroups"))
+@end lisp
+
+@noindent
+
+By this setting, Wanderlust saves extra fields in the msgdb.  You have
+to type @kbd{s all} to get extra fields for the messages that are
+already exists in the summary.
+
+Then, specify the refile rule in the @code{wl-refile-rule-alist} like
+following.
+
+@lisp
+(setq wl-refile-rule-alist
+      '(
+        ("x-ml-name"
+         ("^Wanderlust" . "+wl")
+         ("^Elisp" . "+elisp"))
+        ("From"
+         ("teranisi@@isl.ntt.co.jp" . "+teranisi"))))
+@end lisp
+
+After these setting, refile marks are automatically put on the condition
+matched messages by typing @kbd{C-o} (@code{wl-summary-auto-refile}).
+The rule matched first is applied.
+
+Messages which have @code{wl-summary-auto-refile-skip-marks} is skipped
+auto refiling. 
+By default, @samp{N}, @samp{U} and @samp{!} is specified, so the messages
+with these persistent marks are not automatically refiled.
+It means Wanderlust does not execute auto refile on unread messages by
+the default setting.
+To execute auto refile on all messages, set following.
+
+@lisp
+(setq wl-summary-auto-refile-skip-marks nil)
+@end lisp
+
+@subsection Sticky Summary
+@cindex Summary, Sticky
+@cindex Sticky Summary
+
+The buffer of the `sticky summary' does not killed by typing @kbd{q}. 
+
+Sticky buffer is created by entering the summary by typing @kbd{C-u g} or
+type @kbd{M-s} (@code{wl-summary-stick}) on the normal summary.
+
+The buffer name of the sticky summary becomes like 
+@samp{Summary:@var{folder-name}}.
+
+You can visit the sticky summary at any time by @kbd{C-x b}
+(@code{switch-to-buffer}).  To exit sticky summary, type @kbd{C-u
+q}. Other operations in the sticky summary are same as normal summary.
+
+@code{wl-summary-always-sticky-folder-list} specifies the folders that are
+automatically sticked.
+
+@section Key bindings
+@cindex Keybind, Summary Mode
+@cindex Keybind, Summary Buffer
+
+Key bindings of the summary mode are shown below.
+
+@table @kbd
+@item @key{SPC}
+@kindex @key{SPC} (Summary)
+@findex wl-summary-read
+Proceed reading a message at the current cursor point.
+(@code{wl-summary-read})
+
+@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})
+
+@item <
+@kindex < (Summary)
+@findex wl-summary-display-top
+Display the top message in the folder.
+(@code{wl-summary-display-top})
+
+@item >
+@kindex > (Summary)
+@findex wl-summary-display-bottom
+Display the bottom message in the folder.
+(@code{wl-summary-display-bottom})
+
+@item @key{BS}
+@itemx @key{DEL}
+@kindex @key{BS} (Summary)
+@kindex @key{DEL} (Summary)
+Display the previous page of the message at the current cursor point.
+@findex wl-summary-prev-page
+(@code{wl-summary-prev-page})
+
+@item @key{RET}
+@kindex @key{RET} (Summary)
+@findex wl-summary-next-line-content
+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})
+
+@item /
+@kindex / (Summary)
+@findex wl-thread-open-close
+Toggle open or close the thread at the current cursor point.
+(@code{wl-thread-open-close})
+
+@item [
+@kindex [ (Summary)
+Open all threads.
+@findex wl-thread-open-all
+(@code{wl-thread-open-all})
+
+@item ]
+@kindex ] (Summary)
+Close all threads.
+@findex wl-thread-close-all
+(@code{wl-thread-close-all})
+
+@item -
+@itemx M-@key{RET}
+@kindex - (Summary)
+@kindex M-@key{RET} (Summary)
+@findex wl-summary-prev-line-content
+Display the previous 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-prev-line-content})
+
+@item g
+@kindex g (Summary)
+@findex wl-summary-goto-folder
+Go to other folder.
+(@code{wl-summary-goto-folder})
+
+@item c
+@kindex c (Summary)
+Mark all messages in the folder as read.
+@findex wl-summary-mark-as-read-all
+(@code{wl-summary-mark-as-read-all})
+
+@item a
+@kindex a (Summary)
+@findex wl-summary-reply
+Prepare a draft for reply the message at the current cursor point.
+(@code{wl-summary-reply})
+
+@item A
+@kindex A (Summary)
+@findex wl-summary-reply-with-citation
+Prepare a draft for reply the message at the current cursor point.
+(@code{wl-summary-reply-with-citation})
+
+@item C
+@kindex C (Summary)
+@findex wl-summary-cancel-message
+If the message at current cursor point is your own netnews article,
+cancel it.
+(@code{wl-summary-cancel-message})
+
+@item E
+@kindex E (Summary)
+@findex wl-summary-reedit
+Prepare a draft for re-editing the message at current cursor point.
+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)
+@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.
+(@code{wl-summary-resend-bounced-mail})
+
+@item f
+@kindex f (Summary)
+@findex wl-summary-forward
+A draft for forwarding the message at current cursor point is prepared.
+(@code{wl-summary-forward})
+
+@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.
+(@code{wl-summary-mark-as-important})
+
+@item y
+@itemx e
+@kindex y (Summary)
+@kindex e (Summary)
+Save the message at current cursor point.
+@findex wl-summary-save
+(@code{wl-summary-save})
+
+@item n
+@kindex n (Summary)
+@findex wl-summary-next
+Move cursor to the next message.
+(@code{wl-summary-next})
+
+@item p
+@kindex p (Summary)
+@findex wl-summary-prev
+Move cursor to the previous message.
+(@code{wl-summary-prev})
+
+@item N
+@kindex N (Summary)
+@findex wl-summary-down
+Move cursor to the downward message which is unread or marked
+as @samp{$}.
+(@code{wl-summary-down})
+
+@item P
+@kindex P (Summary)
+@findex wl-summary-up
+Move cursor to the upward message which is unread or marked
+as @samp{$}.
+(@code{wl-summary-up})
+
+@item w
+@kindex w (Summary)
+@findex wl-draft
+Prepare a new draft.
+(@code{wl-draft})
+
+@item W
+@kindex W (Summary)
+@findex wl-draft-write-current-newsgroup
+Prepare a new draft.
+If the current folder is netnews folder, Newsgroups: field is completed.
+(@code{wl-draft-write-current-newsgroup})
+
+@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})
+
+@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})
+
+@item B
+@kindex B (Summary)
+@findex wl-summary-burst
+If the message at current cursor point has 
+encapsulates multiple messages using MIME,
+de-capsulate and extract them on the current folder.
+(@code{wl-summary-burst})
+
+@item @@
+@kindex @@ (Summary)
+@findex wl-summary-edit-addresses
+Append/change/delete the message's sender information to the address book
+@file{~/.addresses} interactively.
+If this command is called with prefix argument, arbitrary address can be edited.
+(@code{wl-summary-edit-petname})
+
+@item Z
+@kindex Z (Summary)
+@findex wl-status-update
+Sync up address book status with @file{~/.addresses}'s content.
+(@code{wl-status-update})
+
+@item |
+@kindex | (Summary)
+@findex wl-summary-pipe-message
+Pipe current message's content to the external process.
+(@code{wl-summary-pipe-message})
+
+@item #
+@kindex # (Summary)
+@findex wl-summary-print-message
+Print out current message's content.
+It uses ps-print module in Emacs 20.x.
+If you don't use color printer, you might want to set
+@code{wl-ps-print-buffer-func} to 'ps-print-buffer.
+(@code{wl-summary-print-message})
+
+@item q
+@kindex q (Summary)
+@findex wl-summary-exit
+Exit current folder.
+(@code{wl-summary-exit})
+
+@item j
+@kindex j (Summary)
+@findex wl-summary-jump-to-current-message
+Jump cursor to the currently displayed message's window.
+(@code{wl-summary-jump-to-current-message})
+
+@item J
+@kindex J (Summary)
+Jump cursor to the other message.
+@findex wl-summary-jump-to-msg
+(@code{wl-summary-jump-to-msg})
+
+@item I
+@kindex I (Summary)
+Update summary status and
+prefetch all messages which have marks included in the 
+@code{wl-summary-incorporate-marks}.
+@findex wl-summary-incorporate
+(@code{wl-summary-incorporate})
+
+@item M-j
+@kindex M-j (Summary)
+@findex wl-summary-jump-to-msg-by-message-id
+Jump cursor to the message which have specified Message-Id.
+If @code{elmo-use-database} is non-nil, other folder is also searched.
+(@code{wl-summary-jump-to-msg-by-message-id})
+
+@item ^
+@kindex ^ (Summary)
+Jump to parent message.
+@findex wl-summary-jump-to-parent-message
+(@code{wl-summary-jump-to-parent-message})
+
+@item !
+@kindex ! (Summary)
+@findex wl-summary-mark-as-unread
+Mark as unread the message at current cursor point.
+(@code{wl-summary-mark-as-unread})
+
+@item s
+@kindex s (Summary)
+@findex wl-summary-sync
+Synchronize summary view after prompting the update range
+(all, update, rescan, first, last).
+
+@example
+all            ...Discard current summary and update all 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).
+first, last    ...Move to the filter folder(partial filter).
+@end example
+
+@noindent
+(@code{wl-summary-sync})
+
+@item S
+@kindex S (Summary)
+@findex wl-summary-sort
+Sort summary order.
+You can sort by date, from, number and subject.
+(@code{wl-summary-sort})
+
+@item T
+@kindex T (Summary)
+@findex wl-summary-toggle-thread
+Toggle the threading.
+(@code{wl-summary-toggle-thread})
+
+@item l
+@kindex l (Summary)
+@findex wl-summary-toggle-disp-folder
+Toggle displaying of folder window.
+(@code{wl-summary-toggle-disp-folder})
+
+@item v
+@kindex v (Summary)
+Toggle displaying of message window.
+@findex wl-summary-toggle-disp-msg
+(@code{wl-summary-toggle-disp-msg})
+
+@item V
+@kindex V (Summary)
+Move to the virtual 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})
+
+@item @key{TAB}
+@kindex @key{TAB} (Summary)
+@findex wl-summary-goto-last-displayed-msg
+Jump to the message which is displayed last.
+(@code{wl-summary-goto-last-displayed-msg})
+
+@item ?
+@kindex ? (Summary)
+Put @samp{*} mark on the messages that satisfies the specified condition.
+@findex wl-summary-pick
+(@code{wl-summary-pick})
+
+@item R
+@kindex R (Summary)
+@findex wl-summary-mark-as-read
+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.
+@findex wl-summary-prefetch
+(@code{wl-summary-prefetch})
+
+@item x
+@kindex x (Summary)
+Execute @samp{D}, @samp{o} and @samp{O} marks.
+@findex wl-summary-exec
+(@code{wl-summary-exec})
+
+@item *
+@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})
+
+@item o
+@kindex o (Summary)
+Put refile mark on the message at the current cursor point.
+@findex wl-summary-refile
+(@code{wl-summary-refile})
+
+@item C-o
+@kindex C-o (Summary)
+Execute auto refile.
+@findex wl-summary-auto-refile
+(@code{wl-summary-auto-refile})
+
+@item O
+@kindex O (Summary)
+Put copy mark on the message at the current cursor point.
+@findex wl-summary-copy
+(@code{wl-summary-copy})
+
+@item M-o
+@kindex M-o (Summary)
+Put refile mark on the message at the current cursor point with the destination
+previously specified.
+@findex wl-summary-refile-prev-destination
+(@code{wl-summary-refile-prev-destination})
+
+@item d
+@kindex d (Summary)
+@findex wl-summary-delete
+Put delete mark on the message at the current cursor point.
+(@code{wl-summary-delete})
+
+@item u
+@kindex u (Summary)
+@findex wl-summary-unmark
+Unmark the temporal mark on the message at the current cursor point.
+(@code{wl-summary-unmark})
+
+@item U
+@kindex U (Summary)
+Unmark all the temporal marks.
+@findex wl-summary-unmark-all
+(@code{wl-summary-unmark-all})
+
+@item r R
+@kindex r R (Summary)
+@findex wl-summary-mark-as-read-region
+Mark as read messages in the specified region.
+(@code{wl-summary-mark-as-read-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.
+(@code{wl-summary-mark-as-important-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
+specified region.
+(@code{wl-summary-exec-region})
+
+@item r *
+@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})
+
+@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})
+
+@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})
+
+@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})
+
+@item r u
+@kindex r u (Summary)
+@findex wl-summary-unmark-region
+Delete temporal mark on the messages in the specified region.
+(@code{wl-summary-unmark-region})
+
+@item r y
+@kindex r y (Summary)
+Save messages in the specified region.
+@findex wl-summary-save-region
+(@code{wl-summary-save-region})
+
+@item t R
+@kindex t R (Summary)
+@findex wl-thread-mark-as-read
+Mark as read 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-read})
+
+@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.
+(@code{wl-thread-mark-as-important})
+
+@item t !
+@kindex t ! (Summary)
+@findex wl-thread-mark-as-unread
+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
+the descendant of the current thread.  With prefix argument, it affects
+on the all messages in the thread tree.
+(@code{wl-thread-exec})
+
+@item t *
+@kindex t * (Summary)
+@findex wl-thread-target-mark
+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})
+
+@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})
+
+@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})
+
+@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.
+With prefix argument, it affects on the all messages in the thread tree.
+(@code{wl-thread-delete})
+
+@item t u
+@kindex t u (Summary)
+@findex wl-thread-unmark
+
+Unmark temporal 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-unmark})
+
+@item t y
+@kindex t y (Summary)
+@findex wl-thread-save
+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{*}.
+(@code{wl-summary-target-mark-prefetch})
+
+@item m R
+@kindex m R (Summary)
+@findex wl-summary-target-mark-mark-as-read
+Mark as read all messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-mark-as-read})
+
+@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.
+(@code{wl-summary-target-mark-mark-as-important})
+
+@item m !
+@kindex m ! (Summary)
+@findex wl-summary-target-mark-mark-as-unread
+Mark as unread all messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-mark-as-unread})
+
+@item m o
+@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})
+
+@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})
+
+@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})
+
+@item m y
+@kindex m y (Summary)
+@findex wl-summary-target-mark-save
+Save messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-save})
+
+@item m u
+@kindex m u (Summary)
+Unmark all temporal marks.
+(@code{wl-summary-delete-all-temp-marks})
+@findex wl-summary-delete-all-temp-marks
+
+@item m a
+@kindex m a (Summary)
+Put target mark @samp{*} on the all messages.
+(@code{wl-summary-target-mark-all})
+@findex wl-summary-target-mark-all
+
+@item m t
+@kindex m t (Summary)
+Put target mark @samp{*} on the messages in the current thread.
+@findex wl-summary-target-mark-thread
+(@code{wl-summary-target-mark-thread})
+
+@item m r
+@kindex m r (Summary)
+@findex wl-summary-target-mark-region
+Put target mark @samp{*} on the messages in the specified region.
+(@code{wl-summary-target-mark-region})
+
+@item m A
+@kindex m A (Summary)
+@findex wl-summary-target-mark-reply-with-citation
+Prepare a draft which cites all messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-reply-with-citation})
+
+@item m f
+@kindex m f (Summary)
+@findex wl-summary-target-mark-forward
+Prepare a draft which forwards all messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-forward})
+
+@item m U
+@kindex m U (Summary)
+@findex wl-summary-target-mark-uudecode
+Uudecode the messages which have target mark @samp{*}.
+(@code{wl-summary-target-mark-uudecode})
+
+@item m ?
+@kindex m ? (Summary)
+@findex wl-summary-target-mark-pick
+Pick messages from the @samp{*} marked messages. 
+That is, @samp{*} marks on the messages are remained
+if the specified condition is satisfied.
+(@code{wl-summary-target-mark-pick})
+
+@item M-t
+@kindex M-t (Summary)
+@findex wl-toggle-plugged
+Toggle offline/online status of Wanderlust.
+(@code{wl-toggle-plugged})
+
+@item C-t
+@kindex C-t (Summary)
+Start Wanderlust's plug-status manager.
+(@code{wl-plugged-change})
+
+@item C-c C-o
+@kindex C-c C-o (Summary)
+@findex wl-jump-to-draft-buffer
+Move to the draft buffer if available.  If multiple draft buffer exists,
+moved to one after another.  If prefix argument is specified, load draft
+folder's message to the draft buffer and jump to it.
+(@code{wl-jump-to-draft-buffer})
+@end table
+
+@section Customize variables
+
+@table @code
+@item wl-summary-move-order
+@vindex wl-summary-move-order
+The initial setting is 'unread.
+Specify cursor moving policy.
+If you want to precede new messages, set 'new.
+If you want to precede unread messages, set 'unread.
+If nil, proceed to next message.
+
+@item wl-auto-select-first
+@vindex wl-auto-select-first
+The initial setting is nil.
+If non-nil, first message is automatically displayed.
+
+@item wl-auto-select-next
+@vindex wl-auto-select-next
+The initial setting is nil.
+If non-nil, jump to next summary automatically.
+If 'unread, jump to next unread folder's summary after confirmation.
+If 'skip-no-unread, unread folders are automatically skipped.
+
+@item wl-thread-insert-opened
+@vindex wl-thread-insert-opened
+The initial setting is nil.
+If non-nil, thread is inserted as opened.
+
+@item wl-thread-open-reading-thread
+@vindex wl-thread-open-reading-thread
+The initial setting is t.
+If non-nil, reading thread is automatically opened though it is closed thread.
+
+@item wl-summary-exit-next-move
+@vindex wl-summary-exit-next-move
+The initial setting is t.
+If non-nil, move to next folder at summary exit.
+
+@item wl-folder-move-cur-folder
+@vindex wl-folder-move-cur-folder
+The initial setting is nil.
+If non-nil, cursor position on the folder is moved.
+
+@item wl-summary-weekday-name-lang
+@vindex  wl-summary-weekday-name-lang
+The initial setting is "ja".
+Specify language of the weekday.
+"en" displays English, "fr" displays French, "de" displays Deutsch.
+
+@item wl-summary-fix-timezone
+@vindex  wl-summary-fix-timezone
+The initial setting is "JST".
+Timezone to adjust summary's timezone.
+If nil, adjust to UTC.
+
+@item wl-use-petname
+@vindex  wl-use-petname
+The initial setting is t.
+If non-nil, sender part displays nickname.
+
+@item wl-break-pages
+@vindex  wl-break-pages
+The initial setting is t.
+If non-nil, message is splitted 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-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-indent-length-limit
+@vindex  wl-summary-indent-length-limit
+The initial setting is 46.
+Specify the limit of thread indent level.
+If nil, max indent level is unlimited.
+
+@item wl-summary-no-from-message
+@vindex  wl-summary-no-from-message
+The initial setting is "nobody@@nowhere?".
+A string which is displayed when there's no From: field in the message.
+
+@item wl-summary-no-subject-message
+@vindex  wl-summary-no-subject-message
+The initial setting is "(WL:No Subject in original.)".
+A string which is displayed when there's no Subject: field in the message.
+
+@item wl-summary-width
+@vindex  wl-summary-width
+The initial setting is 80.
+Width of summary line. If nil, summary line's width is as is.
+
+@item wl-use-folder-petname
+@vindex  wl-use-folder-petname
+The initial setting is '(modeline).
+A list of display policy (symbol) of folder nickname.
+Available symbols are:
+
+@table @code
+@item modeline
+Display folder petname on modeline.
+@item ask-folder
+Destination folder is notified as nickname if
+@code{wl-auto-select-next} is non-nil.
+@item read-folder
+You can input folder name by nickname in the function
+@code{wl-summary-read-folder}.
+@end table
+
+@item wl-summary-move-direction-toggle
+@vindex  wl-summary-move-direction-toggle
+The initial setting is t.
+If non-nil, last executed @kbd{p}, @kbd{P}, @kbd{n}, @kbd{N} toggles
+the direction of cursor move.
+If you want to aware of reading direction, set this to t.
+
+@item wl-from-width
+@vindex wl-from-width
+The initial setting is 17.
+Width of sender part of summary line.
+
+@item wl-summary-divide-thread-when-subject-changed
+@vindex wl-summary-divide-thread-when-subject-changed
+The initial setting is nil.
+If non-nil, thread is splitted if the subject is changed.
+
+@item wl-summary-search-via-nntp
+@vindex wl-summary-search-via-nntp
+The initial setting is 'confirm.
+If non-nil and @code{wl-summary-jump-to-msg-by-message-id} failed,
+call @code{wl-summary-jump-to-msg-by-message-id-via-nntp} and
+search message from the NNTP server @code{elmo-default-nntp-server}.
+The value of @code{elmo-default-nntp-user}, @code{elmo-default-nntp-port}, 
+@code{elmo-default-nntp-ssl} are used. If 'confirm, server name can
+be specified. You can specify NNTP folder format like 
+@samp{-:username@@servername:119!}.
+
+@item wl-summary-keep-cursor-command
+@vindex wl-summary-keep-cursor-command
+The initial setting is 
+'(wl-summary-goto-folder wl-summary-goto-last-visited-folder).
+When you entered to summary by these commands and the target summary
+buffer already exists, summary status is not automatically updated and 
+cursor position is saved.
+
+@item wl-summary-update-confirm-threshold
+@vindex wl-summary-update-confirm-threshold
+The initial setting is 500.
+If updated message number is larger than this value, 
+confirm whether drop them or not.
+
+@item wl-summary-always-sticky-folder-list
+@vindex wl-summary-always-sticky-folder-list
+The initial setting is nil.
+@code{wl-summary-always-sticky-folder-list} specifies the folders that are
+automatically sticked. Each element is regexp of folder name.
+
+@item wl-summary-reserve-mark-list
+@vindex wl-summary-reserve-mark-list
+The initial setting is '("o" "O" "D").
+If a message is already marked as temporal marks in this list, 
+the message is not marked by any mark command.
+
+@item wl-summary-skip-mark-list
+@vindex wl-summary-skip-mark-list
+The initial setting is '("D").
+If a message is already marked as temporal marks in this list, 
+the message is skipped at cursor move.
+
+@item wl-fetch-confirm-threshold
+@vindex wl-fetch-confirm-threshold
+The initial setting is 30000 (bytes).
+If displaying message has larger size than this value,
+Wanderlust confirms whether fetch the message or not.
+If nil, the message is fetched without confirmation.
+
+@item wl-prefetch-threshold
+@vindex wl-prefetch-threshold
+The initial setting is 30000 (bytes). 
+If prefetching message has larger size than this value and
+@code{wl-prefetch-confirm} is non-nil,
+Wanderlust confirms whether prefetch the message or not.
+If @code{wl-prefetch-threshold} is nil, the message is prefetched
+without confirmation.
+
+@item wl-prefetch-confirm
+@vindex wl-prefetch-confirm
+The initial setting is t. If non-nil, 
+Wanderlust confirms whether prefetch the message or not if the
+message has larger size than @code{wl-prefetch-threshold}.
+
+@item wl-cache-fetch-threshold
+@vindex wl-cache-fetch-threshold
+The initial setting is 30000 (bytes).
+The messages which have larger size than @code{wl-fetch-confirm-threshold}
+are skipped buffer caching mechanism. If nil, any messages are prefetched by
+buffer caching mechanism.
+
+@item elmo-imap4-use-cache
+@vindex elmo-imap4-use-cache
+The initial setting is t.
+If non-nil, messages read via IMAP4 are cached.
+
+@item elmo-nntp-use-cache
+@vindex elmo-nntp-use-cache
+The initial setting is t.
+If non-nil, messages read via NNTP are cached.
+
+@item elmo-pop3-use-cache
+@vindex elmo-pop3-use-cache
+The initial setting is t.
+If non-nil, messages read via POP3 are cached.
+@end table
+
+@c
+@c  Message
+@c
+@node Message, Draft, Summary, Top
+@chapter Message Buffer
+
+Message Buffers utilize MIME-View mode of SEMI/tm.
+For operational procedures and key bindings, refer to respective
+documents.
+@xref{MIME-View, , ,mime-ui-ja, a MIME user interface for GNU Emacs}.
+
+@kbd{p} at the top of a message or @kbd{n} at the bottom of a message
+brings you back to Summary mode.
+@kbd{l} toggles display of Summary mode buffer.
+
+@section Key Bindings
+
+@table @kbd
+
+@item l
+@kindex l (Message)
+@findex wl-message-toggle-disp-summary
+Toggles display of Summary mode buffer.
+(@code{wl-message-toggle-disp-summary})
+
+@item Button-2
+@findex wl-message-refer-article-or-url
+@kindex Button-2 (Message)
+Assumes Message-ID at the mouse pointer, and shows the corresponding
+message if found.
+(@code{wl-message-refer-article-or-url})
+
+@item Button-4 (upward movement of a wheel)
+@kindex Button-4 (Message)
+@findex wl-message-wheel-down
+Scrolls the message backwards.  When the top of the message is hit,
+moves to the previous message.
+(@code{wl-message-wheel-down})
+
+@item Button-5 (downward movement of a wheel)
+@kindex Button-5 (Message)
+@findex wl-message-wheel-up
+Scrolls the message forward.  When the bottom of the message is hit,
+moves to the next message.
+(@code{wl-message-wheel-up})
+@end table
+
+@section Customizable Variables
+
+@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
+its car and cdr value corresponds to the ratio of Summary and Message
+windows.
+@end table
+
+@c
+@c  Draft
+@c
+@node Draft, Disconnected Operations, Message, Top
+@chapter Draft Buffer
+
+At Summary mode, pressing @kbd{w} and the like creates a new draft
+buffer.  You can edit and send mail and news articles in this buffer.
+
+@section Tips
+
+Basically it is Emacs-standard mail mode.
+
+@subsection Address Completion
+
+Initially, the cursor is at the To: field.  Fill in recipients
+addresses.  @kbd{@key{TAB}} completes them.
+
+If you want to submit a news article, add Newsgroups: field by
+yourself.  Field names can be completed by @kbd{@key{TAB}}.
+
+If you save the draft buffer you are editing, it is appended to the
+folder specified by @code{wl-draft-folder}.
+
+Using FCC: field, you can specify the folder to which a copy of the
+message is saved when it is sent.
+
+@subsection Editing Messages
+
+Multi-part editing utilize MIME edit mode of SEMI/tm.  For procedures of
+editing, refer to respective documents.
+@xref{Mail Methods, , ,mime-ui-ja, a MIME user interface for GNU Emacs}.
+
+@subsection Dynamic Modification of Messages
+@vindex wl-draft-config-alist
+
+@c @cindex Change Message
+@c @cindex Message, Change Dynamic
+
+You can set @code{wl-draft-config-alist} so that header and body of the
+message will automatically modified depending on information of header
+and others.
+
+The initial setting of @code{wl-draft-config-alist} is nil.
+
+In the example below, the header is modified when
+@code{wl-draft-send-and-exit} or @code{wl-draft-send} is invoked.
+You can set @code{wl-interactive-send} to non-nil so as to confirm
+changes before sending the message.
+
+@lisp
+(setq wl-draft-config-alist
+      '(((string-match "aaa.ne.jp$" (system-name))
+         ;; @r{applied if the expression is non-nil}
+         (wl-smtp-posting-server . "mailserver-B")
+         (wl-nntp-posting-server . "newsserver-B")
+         ;; @r{settings of temporary variables}
+         )
+        ("^To: .*user@@aaa.bbb.com"
+         ;; @r{applied if it matches the header of the draft buffer}
+         ("Organization" . (format "Go %s" my-webpage)))
+                       ;; @r{you can write elisp expressions here (eval only)}
+         (top . "Hello.\n")    ;; @r{inserted at the top of the body}
+         (bottom . "\nBye.\n") ;; @r{inserted at the bottom of the body}
+        ))
+@end lisp
+
+The format of @code{wl-draft-config-alist} is:
+
+@example
+'(("regexp of the header" or elisp expression
+  ("Field" . value(elisp expression))
+   (variable . value(elisp expression))
+   (sub-function . value(elisp expression))
+   function
+   @dots{})
+  ("regexp of the header" or elisp expression
+   ("Field" . value(elisp expression))
+   @dots{}))
+@end example
+
+Per default, there are 10 following sub-functions.
+
+@example
+'header:      Inserts the specified string at the bottom of the header.
+'header-file: Inserts the specified file at the bottom of the header.
+'x-face:      Inserts "X-Face" field with the content of the specified file.
+'top:         Inserts the specified string at the top of the body.
+'top-file:    Inserts the specified file at the top of the body.
+'body:        Replaces the body with the specified string.
+              Specifying nil deletes the entire body string.
+'body-file:   Replaces the body with the content of the specified file.
+'bottom:      Inserts the specified string at the bottom of the body.
+'bottom-file: Inserts the specified file at the top of the body.
+'template:    Applies the specified template.
+              (refer to the next subsection)
+@end example
+
+These are defined in @code{wl-draft-config-sub-func-alist} and you can
+change them or add your own functions.  If you read the code, you can
+easily find how to write the functions.
+
+At the first of each item, "a regular expression of the header" or an
+elisp expression should be specified.  In the case of an elisp
+expression, the item is applied when the expression is evaluated
+non-nil.
+
+Per default, when multiple items match or are evaluated non-nil, all
+such items are applied, but if you set a variable
+@code{wl-draft-config-matchone} to t, only the first matching one is
+applied.
+
+At the second of the item, a cons or a list of functions should be
+specified.  The car part of the cons should be a header field, a
+variable, or a sub-function.  When a header field is specified, the field
+will be modified.  If a variable is specified, the value of the variable
+will be modified temporarily.
+
+In the cdr part of a cons, not only a variable but also an elisp
+expression can be specified as is.  If the car part is a header field
+and the cdr part is nil, the field will be deleted.
+
+See the next example as well:
+
+@lisp
+(setq wl-draft-config-alist
+      '((reply                         ;; @r{(1)}
+         "X-ML-Name: \\(Wanderlust\\|emacs-mime-ja\\|apel-ja\\)"
+         ;; @r{applied if it matches the header of the buffer being replied}
+         (body . "  Hello.\n")
+         (template . "default")
+         )))
+@end lisp
+
+As in the (1) above, if a header regexp is prepended with @code{reply},
+it is applied when the draft is prepared by @code{wl-summary-reply} for
+example, and when it matches the header being replied.  It is ignored
+when there is no buffer being replied, like after @code{wl-draft} was
+invoked.
+
+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 
+aborting transmission, execute @kbd{C-c C-e}
+(@code{wl-draft-config-exec}).
+
+If you want to apply @code{wl-draft-config-alist} when a draft buffer is 
+prepared, do the following:
+
+@lisp
+(add-hook 'wl-mail-setup-hook 'wl-draft-config-exec)
+@end lisp
+
+@subsection Inserting Templates
+@cindex Template
+@cindex Apply Template
+
+Set a variable @code{wl-template-alist}, and type
+@kbd{C-c C-j} or @kbd{M-x wl-template-select}
+in the draft buffer.
+
+The format of @code{wl-template-alist} is almost the same as
+@code{wl-draft-config-alist}.
+
+@lisp
+(setq wl-template-alist
+      '(("default"
+         ("From" . wl-from)
+         ("Organization" . "~/.wl sample")
+         (body . "Hello.\n"))
+        ("report"
+         (template . "default")                 ;; @r{(a)}
+         ("To" . "jousi@@kaisha.jp")
+         ("Subject" . "Report")
+         (body-file . "~/work/report.txt")
+         )
+        ))
+@end lisp
+
+As you can see, the only difference is item (template) names such as
+"default" and "report", instead of a regexp of header.
+Because definition of each item is the same as
+@code{wl-draft-config-alist}, you can call another template, like (a).
+
+Executing the command @code{wl-template-select} results in template
+selection, but the result differs depending on variable
+@code{wl-template-visible-select}.
+
+If @code{wl-template-visible-select} is t (default), a buffer window is
+shown below the draft buffer.  You can select a template by @kbd{n} and
+@kbd{p} seeing the buffer window.
+
+Press the RETURN key and the template is actually applied to the draft
+buffer.  If you press @kbd{q}, nothing is applied.  In addition, you can 
+adjust the window size by @code{wl-template-buffer-lines}.
+
+If @code{wl-template-visible-select} is nil, you should type the name of
+the template in the mini buffer.
+
+As shown in the example in @code{wl-draft-config-alist}, you can select
+"default" template by writing:
+
+@example
+(template . "default")
+@end example
+
+@noindent
+
+@subsection Sending mail by POP-before-SMTP
+@cindex POP-before-SMTP
+
+You can send mail by POP-before-SMTP with this single line:
+
+@lisp
+(setq wl-draft-send-mail-func 'wl-draft-send-mail-with-pop-before-smtp)
+@end lisp
+
+@noindent
+Configure the following variables if you need.
+
+@table @code
+@item wl-pop-before-smtp-user
+The POP user name for POP-before-SMTP authentication.
+If unset, @code{elmo-default-pop3-user} is used.
+
+@item wl-pop-before-smtp-server
+The POP server name for POP-before-SMTP authentication.
+If unset, @code{elmo-default-pop3-server} is used.
+
+@item wl-pop-before-smtp-authenticate-type
+The POP authentication method for POP-before-SMTP authentication.
+If unset, @code{elmo-default-pop3-authenticate-type} is used.
+
+@item wl-pop-before-smtp-port
+The POP port number for POP-before-SMTP authentication.
+If unset, @code{elmo-default-pop3-port} is used.
+
+@item wl-pop-before-smtp-ssl
+If non-nil, POP connection is established using SSL.
+If 'starttls, STARTTLS (RFC2595) connection will be established.
+If unset, @code{elmo-default-pop3-ssl} is used.
+@end table
+
+If variables for POP-before-SMTP (@code{wl-pop-before-smtp-*}) are 
+unset, settings for POP folders (@code{elmo-default-pop3-*}) are
+used.
+Therefore, if SMTP server and POP server are actually the same, and if
+POP folder per default (such as @samp{&}) is available, no settings are
+required.
+
+Refer to the following URL about POP-before-SMTP.
+
+@example
+http://spam.ayamura.org/tools/smPbS.html
+http://www.iecc.com/pop-before-smtp.html
+@end example
+
+@section Key Bindings
+@cindex Keybind, Draft Mode
+@cindex Keybind, Draft Buffer
+
+@table @kbd
+
+@item C-c C-y
+@kindex C-c C-y (Draft)
+@findex wl-draft-yank-original
+Cites the content of the current message buffer.
+(@code{wl-draft-yank-original})
+
+@item C-c C-p
+@kindex C-c C-p (Draft)
+@findex wl-draft-preview-message
+Previews the content of the current draft.
+This is useful for previewing MIME multi-part messages.
+(@code{wl-draft-preview-message})
+
+@item C-c C-s
+@kindex C-c C-s (Draft)
+@findex wl-draft-send
+Sends the content of the current draft.  Does not erase the draft buffer.
+This is useful for sending multiple messages, which are a little different
+from each other.
+(@code{wl-draft-send})
+
+@item C-c C-c
+@kindex C-c C-c (Draft)
+@findex wl-draft-send-and-exit
+Sends the content of the current draft and erases the draft buffer.
+(@code{wl-draft-send-and-exit})
+
+@item C-x C-s
+@kindex C-x C-s (Draft)
+@findex wl-draft-save
+Save the current draft.
+(@code{wl-draft-save})
+
+@item C-c C-k
+@kindex C-c C-k (Draft)
+@findex wl-draft-kill
+Kills the current draft.
+(@code{wl-draft-kill})
+
+@c @item C-x k
+@c @kindex C-x k (Draft)
+@c @findex wl-draft-mimic-kill-buffer
+@c Kills the current draft.
+@c (@code{wl-draft-mimic-kill-buffer})
+
+@item C-c C-z
+@kindex C-c C-z (Draft)
+@findex wl-draft-save-and-exit
+Saves the current draft, and erases the draft buffer.
+This is useful if you want to suspend editing of the draft.
+You can resume editing by pressing @kbd{E} (@code{wl-summary-reedit}) in
+the @samp{+draft} folder.
+(@code{wl-draft-save-and-exit})
+
+@item C-c C-r
+@kindex C-c C-r (Draft)
+@findex wl-caesar-region
+Encodes or decodes the specified region in Caesar cipher.
+(@code{wl-caesar-region})
+
+@item M-t
+@kindex M-t (Draft)
+@findex wl-toggle-plugged
+Toggles off-line/on-line states of Wanderlust.
+(@code{wl-toggle-plugged})
+
+@item C-c C-o
+@kindex C-c C-o (Draft)
+@findex wl-jump-to-draft-buffer
+Jumps to the other draft buffer, if exists.
+With prefix argument, reads a file (if any) from the draft folder when
+there is no such buffer.
+(@code{wl-jump-to-draft-buffer})
+
+@item C-c C-e
+@kindex C-c C-e (Draft)
+@findex wl-draft-config-exec
+Applies @code{wl-draft-config-alist}.
+(@code{wl-draft-config-exec})
+
+@item C-c C-j
+@kindex C-c C-j (Draft)
+@findex wl-template-select
+Selects a template.
+(@code{wl-template-select})
+
+@item C-c C-a
+@kindex C-c C-a (Draft)
+@findex wl-draft-insert-x-face-field
+Inserts the content of a file @file{~/.xface} (the value of the variable
+@code{wl-x-face-file}) as an X-Face field in the draft buffer.
+
+There should be encoded X-Face strings as a content of a file @file{~/.xface}.
+(@code{wl-draft-insert-x-face-field})
+@end table
+
+@section Customizable Variables
+
+@table @code
+@item wl-subscribed-mailing-list
+@vindex wl-subscribed-mailing-list
+The initial setting is nil.
+Mailing lists to which you subscribe.
+If any of these are contained in To or Cc field of a reply draft,
+removes your own address from Mail-Followup-To and Cc.
+And if any of these are contained in To or Cc field of a message to be
+automatically re-filed, the destination folder will be leaned in
+connection with the address.
+@item wl-insert-mail-followup-to
+@vindex wl-insert-mail-followup-to
+The initial setting is nil.
+If non-nil, Mail-Followup-To field is automatically inserted in the
+draft buffer.
+
+@item wl-insert-mail-reply-to
+@vindex wl-insert-mail-reply-to
+The initial setting is nil.
+If non-nil, Mail-Reply-To field is automatically inserted in the
+draft buffer.
+
+@item wl-auto-insert-x-face
+@vindex wl-auto-insert-x-face
+The initial setting is t.
+If non-nil and there is an encoded X-Face string in a file
+@file{~/.xface} (the value of the variable @code{wl-x-face-file}),
+inserts it as an X-Face field in the draft buffer.
+If nil, it is not automatically inserted. Press @kbd{C-c C-a} to insert.
+
+@item wl-insert-message-id
+@vindex wl-insert-message-id
+The initial setting is t.
+If non-nil, Message-ID field is automatically inserted on the
+transmission.
+
+@item wl-local-domain
+@vindex wl-local-domain
+The initial setting is nil.
+If nil, the return value of the function @code{system-name} will be
+used as the domain part of Message-ID.
+
+If @code{system-name} does not return FQDN (i.e. the full name of the
+host, like @samp{smtp.gohome.org}), you @strong{must} set this variable to the
+string of the local domain name without hostname (like @samp{gohome.org}). 
+That is, a concatenation of @code{system-name} "." @code{wl-local-domain} 
+is used as domain part of the Message-ID.
+
+If your terminal does not have global IP, set the value of
+@code{wl-message-id-domain}.
+(You might be beaten up on the Net News if you use invalid Message-ID.)
+
+Moreover, 
+concatenation of @code{system-name} "." @code{wl-local-domain} 
+will be used as an argument to the HELO command in SMTP.
+
+@item wl-message-id-domain
+@vindex wl-message-id-domain
+The initial setting is nil.
+If non-nil, this value is used as a domain part of the Message-ID.
+If your terminal does not have global IP, set unique string to this value
+(e.x. your e-mail address).
+
+@item wl-message-id-domain
+@vindex wl-message-id-domain
+The initial setting is nil.
+If nil, the return value of the function @code{system-name} will be
+used as the domain part of Message-ID.
+If @code{system-name} does not return FQDN (i.e. the full name of the
+host, like smtp.gohome.org), you @strong{must} set this variable to the
+string of the full name of the host.  Otherwise, you might be beaten up
+on the Net News.
+
+@item wl-draft-config-alist
+@vindex wl-draft-config-alist
+The initial setting is nil.
+Modifies the draft message just before the transmission.
+The content of @code{wl-draft-config-alist} will be automatically
+applied only once on the transmission.  If you want to apply it
+manually, use @kbd{C-c C-e}.  This command can be used many times.
+
+@item wl-template-alist
+@vindex wl-template-alist
+The initial setting is nil.
+This variable specifies the template to be applied in the draft buffer.
+
+@item wl-draft-config-matchone
+@vindex wl-draft-config-matchone
+The initial setting is nil.
+If non-nil, only the first matching item is used when
+@code{wl-draft-config-alist} is applied.  If nil, all matching items are 
+used.
+
+@item wl-template-visible-select
+@vindex wl-template-visible-select
+The initial setting is t.
+If non-nil, you can preview the result of the template selection in
+another window.
+
+@item wl-template-confirm
+@vindex wl-template-confirm
+The initial setting is nil.
+If non-nil, asks for confirmation when you press the enter key to select
+template while previewing.
+
+@item wl-template-buffer-lines
+@vindex wl-template-buffer-lines
+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-reply-buffer-style
+@vindex wl-draft-reply-buffer-style
+The initial setting is 'split.
+'split or 'full can be specified.
+In the case of 'full, the whole frame will be used for a reply draft
+buffer when it is prepared.
+
+@item wl-from
+@vindex wl-from
+The initial setting is the value of the variable @code{user-mail-address}.
+The value of this variable is inserted as a From field of the draft when
+it is prepared.
+
+@item wl-envelope-from
+@vindex wl-envelope-from
+The initial setting is nil.
+The value of this variable is used for envelope from (MAIL FROM).
+If nil, the address part of @code{wl-from} is used.
+
+@item wl-user-mail-address-list
+@vindex wl-user-mail-address-list
+The initial setting is nil.
+This is the User's address list.  If you have multiple addresses,
+set this variable.
+
+@item wl-fcc
+@vindex wl-fcc
+The initial setting is nil.
+If non-nil, the value of this variable is inserted as a FCC of the draft
+when it is prepared.
+
+@item wl-bcc
+@vindex wl-bcc
+The initial setting is nil.
+If non-nil, the value of this variable is inserted as a Bcc of the draft
+when it is prepared.
+
+@item wl-reply-subject-prefix
+@vindex wl-reply-subject-prefix
+The initial setting is "Re: ".
+In the Subject of the reply draft, this string is prepended to the
+Subject of being replied.
+
+@item wl-draft-enable-queuing
+@vindex wl-draft-enable-queuing
+The initial setting is t.
+This flag controls off-line transmission.  If non-nil, the draft is
+sent off-line.
+
+@item wl-auto-flush-queue
+@vindex wl-auto-flush-queue
+The initial setting is t.
+This flag controls automatic transmission of the queue when Wanderlust
+becomes on-line.  If non-nil, the queue is automatically transmitted
+(with confirmation by @code{y-or-n-p}).  If you want to transmit it
+manually, press @kbd{F} in the folder mode.
+
+@item wl-draft-always-delete-myself
+@vindex wl-draft-always-delete-myself
+If non-nil, always removes your own address from To and CC when you are
+replying to the mail addressed to you.
+
+@item wl-smtp-posting-server
+@vindex wl-smtp-posting-server
+The initial setting is nil.
+This is the SMTP server name for mail transmission.
+
+@item wl-smtp-posting-user
+@vindex wl-smtp-posting-user
+The initial setting is nil.
+This is the user name for SMTP AUTH authentication.
+If nil, @code{smtp-authenticate-user} is used.
+
+@item wl-smtp-authenticate-type
+@vindex wl-smtp-authenticate-type
+The initial setting is nil.
+This is the authentication method for SMTP AUTH authentication.
+If nil, @code{smtp-authenticate-type} is used.
+If it is still nil, authentication will not be carried out.
+
+@item wl-smtp-connection-type
+@vindex wl-smtp-connection-type
+The initial setting is nil.
+This variable specifies how to establish SMTP connections.
+If nil, @code{smtp-connection-type} is used.
+If it is 'starttls, STARTTLS (RFC2595) is used.
+
+@item wl-nntp-posting-server
+@vindex wl-nntp-posting-server
+The initial setting is nil.
+This is the NNTP server name used for news submission.
+If nil, @code{elmo-default-nntp-server} is used.
+
+@item wl-nntp-posting-user
+@vindex wl-nntp-posting-user
+The initial setting is nil.
+This is the user name for AUTHINFO authentication on news submission.
+If nil, @code{elmo-default-nntp-user} is used.
+If it is still nil, AUTHINFO authentication will not be carried out.
+
+@item wl-nntp-posting-port
+@vindex wl-nntp-posting-port
+The initial setting is nil.
+This is the port number of the NNTP server used for news submission.
+If nil, @code{elmo-default-nntp-server} is used.
+
+@item wl-nntp-posting-ssl
+@vindex wl-nntp-posting-ssl
+The initial setting is nil.
+If nil, @code{elmo-default-nntp-ssl} is evaluated.
+If non-nil, SSL is used for news submission.
+If 'starttls, STARTTLS (RFC2595) connection will be established.
+
+@item wl-pop-before-smtp-user
+@vindex wl-pop-before-smtp-user
+The initial setting is nil.
+This is the POP user name for POP-before-SMTP.
+If it is nil, @code{elmo-default-pop3-user} is used.
+
+@item wl-pop-before-smtp-server
+@vindex wl-pop-before-smtp-server
+The initial setting is nil.
+This is the POP server name for POP-before-SMTP.
+If it is nil, @code{elmo-default-pop3-server} is used.
+
+@item wl-pop-before-smtp-authenticate-type
+@vindex wl-pop-before-smtp-authenticate-type
+The initial setting is nil.
+This is the authentication method for POP-before-SMTP authentication.
+If it is nil, @code{elmo-default-pop3-authenticate} is used.
+
+@item wl-pop-before-smtp-port
+@vindex wl-pop-before-smtp-port
+The initial setting is nil.
+This is the POP port number for POP-before-SMTP.
+If it is nil, @code{elmo-default-pop3-port} is used.
+
+@item wl-pop-before-smtp-ssl
+@vindex wl-pop-before-smtp-ssl
+The initial setting is nil.
+This flag controls the use of SSL for POP-before-SMTP.
+If it is nil, @code{elmo-default-pop3-ssl} is used.
+
+@item wl-draft-queue-save-variables
+@vindex wl-draft-queue-save-variables
+Specifies a list of variable to which queued messages are saved on the
+off-line transmission.
+
+@item wl-draft-sendlog
+@vindex wl-draft-sendlog
+The initial setting is t.
+If t, transmission log is written in @file{~/.elmo/sendlog}.
+It is written when drafts are sent by smtp or qmail, and when they are
+saved into folders by fcc or queuing (it is written even if the
+transmission fails).
+But transmission by im-wl.el is not written in the sendlog and left to
+the logging function of imput.
+
+@item wl-draft-sendlog-max-size
+@vindex wl-draft-sendlog-max-size
+The initial setting is 20000 (in bytes).
+If @code{wl-draft-sendlog} is t, the log is rotated when it grows beyond 
+the size specified by this variable.
+@end table
+
+
+@c
+@c  Disconnected Operations
+@c
+@node Disconnected Operations, Expire and Archive, Draft, Top
+@chapter Off-line Management
+@cindex Disconnected Operations
+
+@section Off-line State
+
+Wanderlust has on-line and off-line states.
+In the off-line state, you cannot access messages via network, unless
+they are cached.
+
+@samp{[ON]} in the mode line indicates the on-line state.
+@samp{[--]} in the mode line indicates the off-line state.
+In folder or summary modes, press @kbd{M-t} to switch between off-
+and on-line.
+
+You can invoke Wanderlust in the off-line state by setting
+@code{wl-plugged} to nil in @file{~/.wl} or anything appropriate.
+
+Even in the off-line state, provided that relevant messages are cached,
+and the variable @code{elmo-enable-disconnected-operation} (described
+later) is non-nil, you can:
+
+@itemize @minus
+@item transmit messages
+@item re-file and copy (IMAP4)
+@item create folders (IMAP4)
+@item mark (IMAP4)
+@item pre-fetch (IMAP4, NNTP)
+@end itemize
+
+As soon as Wanderlust becomes on-line, such operations invoked
+off-line are reflected in the servers via network.
+
+@section Transmission of Messages
+
+You can send mail/news messages off-line (if you are using im-wl.el, it
+is irrelevant).  Messages sent off-line are accumulated in the queue
+folder, @samp{+queue}.  These messages are transmitted at once when
+Wanderlust becomes on-line.
+
+You can visit @samp{+queue} in the off-line state and confirm content
+of messages in the queue.  You can also remove messages.  Removed messages
+are not transmitted even in the on-line state.
+
+@section Re-file and Copy (IMAP4)
+
+Re-file and copy operations to IMAP folders invoked during the off-line
+state are accumulated in the queue, and reflected in the server side
+when Wanderlust becomes on-line.  If you visit destination folders after
+off-line re-file or copy, it looks as if messages were appended even in
+off-line state.
+
+For the safety reasons, messages re-filed off-line are removed from
+source folders only if their Message-ID match messages on the servers.
+While the queue is processed, messages that failed to be re-filed or
+copied to the specified folders are appended to the folder
+@samp{+lost+found}.
+
+@section Creation of Folders (IMAP4)
+
+You can create IMAP folders off-line.  The creation of folders are
+reflected in the servers when Wanderlust becomes on-line.  At that time, 
+if folders failed to be created on the servers for any reasons, messages
+re-filed to such folders are appended to the folder "+lost+found".
+
+@section Marking (IMAP4)
+
+Off-line changes in unread/read and importance mark @samp{$} information
+are also reflected in the servers when Wanderlust becomes on-line.
+
+@section 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 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.
+
+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.
+
+@section Switching On-line/Off-line per Server/Port
+
+@kbd{M-t} described above switches networking states as a whole, but you 
+can switch on-line/off-line per server/port.
+
+Pressing @kbd{C-t} in the folder or summary modes brings you in
+wl-plugged-mode shown below, in which you can change the plugged state
+for each port.
+
+@example
+Queuing:[ON] AutoFlushQueue:[--] DisconnectedOperation:[ON]
+[ON](wl-plugged)
+  [--]hosta
+    [--]smtp        +queue: 2 msgs (1,2)        @dots{}@r{sending queue}
+    [--]nntp(119)   +queue: 1 msg (3)           @dots{}@r{sending queue}
+  [ON]hostb
+    [--]imap4/cram-md5(143) %#mh/wl(prefetch-msgs:3,mark-as-important:1)
+                            %inbox(delete-msgids:1)    @dots{}@r{dop queue}
+    [ON]nntp(119)
+    [ON]smtp
+@end example
+
+The first line indicates status of the following three variables, and
+simply pressing @kbd{@key{SPC}} or @kbd{@key{RET}} in each labelled
+column modifies the values of these variables.
+
+@example
+"Queuing"               wl-draft-enable-queuing
+"AutoFlushQueue"        wl-auto-flush-queue
+"DisconnectedOperation" elmo-enable-disconnected-operation
+@end example
+
+where @samp{[ON]} means its value is t, and @samp{[--]} means nil.
+
+The second and after lines indicate on-line/off-line states of servers
+and ports, where @samp{[ON]} stands for on-line and @samp{[--]} for
+off-line (in XEmacs, they are shown with icons).  Pressing
+@kbd{@key{SPC}} or @kbd{@key{RET}} in each line switches its state.
+
+"sending queue" means messages accumulated in the folder @samp{+queue}
+for off-line transmission, and "dop queue" means off-line operations
+when @code{elmo-enable-disconnected-operation} is t.
+@c If the variable @code{elmo-enable-disconnected-operation} is non-nil, 
+@c off-line operations are enabled.
+
+They are displayed if there are any of them.  In the example above,
+in the sending queue there are two messages (the first and the second
+in the queue folder) for smtp to hosta and one (the third) for nntp to
+hosta, and in the dop queue there are one for @samp{%inbox} and two for
+@samp{%#mh/wl}.
+
+If you change (wl-plugged) in the second line, the variable
+@code{wl-plugged} is changed, so that the mode line indicator and
+plugged states of all ports are affected.
+If you change plugged states of any servers or ports, wl-plugged in the
+second line is affected depending on @code{elmo-plugged-condition}
+settings and the plugged state of each port.
+
+@section Invoking Wanderlust in the Off-line State
+
+As described before, if you set @code{wl-plugged} to nil in @file{~/.wl}
+or anything appropriate, you can invoke Wanderlust in the off-line
+state.  You can specify off-line state on a per server or port basis.
+Refer to @code{wl-reset-plugged-alist} also.
+
+Usually, when Wanderlust starts up, the plugged state of each port is
+read from @file{~/.folder} and @code{wl-smtp-posting-server},
+@code{wl-nntp-posting-server} and so on.  If you want to change the
+plugged state of these ports or to add other ports, configure
+@code{wl-make-plugged-hook} with a function.
+
+@lisp
+(add-hook 'wl-make-plugged-hook
+          '(lambda ()
+             (elmo-set-plugged plugged-value(t/nil) server port)
+                 ;; @r{add or change plugged states of the port of the server}
+             (elmo-set-plugged plugged-value(t/nil) server)
+                 ;; @r{if the port is omitted, all ports are affected}
+                 ;; @r{(you cannot omit the port if you newly add the server)}
+             ))
+@end lisp
+
+@section Customizable Variables
+
+@table @code
+@item wl-plugged
+@vindex wl-plugged
+If this variable is set to nil, Wanderlust starts up in off-line mode from
+the beginning.
+
+@item wl-queue-folder
+@vindex wl-queue-folder
+The initial setting is "+queue".
+This is the folder in which messages in the transmission queue are
+accumulated.
+
+@item wl-auto-flush-queue
+@vindex wl-auto-flush-queue
+The initial setting is t.
+This flag controls automatic transmission of the queue when Wanderlust
+becomes on-line.  If non-nil, the queue is automatically transmitted
+(with confirmation by @code{y-or-n-p}).  If you want to transmit it
+manually, press @kbd{F} in the folder mode.
+
+@item elmo-enable-disconnected-operation
+@vindex elmo-enable-disconnected-operation
+The initial setting is nil.  Controls off-line operations regarding IMAP4.
+If non-nil, off-line operations are carried out.
+
+@item elmo-lost+found-folder
+@vindex elmo-lost+found-folder
+The initial setting is "+lost+found".
+This is the folder to which messages are saved when they fails to be
+appended while the off-line re-file/copy queue is processed.
+
+@item elmo-plugged-condition
+@vindex elmo-plugged-condition
+The initial setting is 'one.
+The value of @code{wl-plugged} reflects the return value of the function 
+@code{elmo-plugged-p} (without arguments).
+This variable @code{elmo-plugged-condition} specifies the condition on
+which the return value of (elmo-plugged-p) should be t depending on the
+plugged state of each port.
+
+@example
+'one         : plugged if one or more ports are plugged.
+'all         : plugged if all ports are plugged.
+'independent : reflects wl-plugged (elmo-plugged) regardless of plugged
+               states of the ports.
+function     : reflects the return value of the function
+ functions available per default
+ 'elmo-plug-on-by-servers
+             : reflects the plugged state of the servers specified by the
+               variable elmo-plug-on-servers.
+ 'elmo-plug-on-by-exclude-servers
+             : reflects the plugged state of the servers that are not
+               in elmo-plug-on-exclude-servers.
+                  elmo-plug-on-exclude-servers defaults to
+                   '("localhost"
+                     (system-name)
+                     (system-name)without the domain part)
+@end example
+
+@example
+Example 1:
+ (setq elmo-plugged-condition 'all)
+Example 2:
+ (setq elmo-plug-on-servers '("smtpserver" "newsserver"))
+ (setq elmo-plugged-condition 'elmo-plug-on-by-servers)
+Example 3:
+ (setq elmo-plug-on-exclude-servers '("localhost" "myname"))
+ (setq elmo-plugged-condition 'elmo-plug-on-by-exclude-servers)
+@end example
+
+@item wl-reset-plugged-alist
+@vindex wl-reset-plugged-alist
+The initial setting is t.  If non-nil, plugged states are initialized on
+a per server or port basis when Wanderlust starts up.
+
+If nil, plugged states are retained while Emacs is running.
+In other words, they are initialized when Emacs is restarted even if the
+value is nil.
+@end table
+
+@c
+@c  Expire and Archive
+@c
+@node Expire and Archive, Scoring, Disconnected Operations, Top
+@chapter Automatic Expiration and Archiving of Messages
+@cindex Expire and Archive
+
+@menu
+* Expire::      Expiration and Archiving
+* Archive::     Archiving All Messages
+@end menu
+
+
+@node Expire, Archive, Expire and Archive, Expire and Archive
+@section Expiration
+@cindex Expire Message
+
+Expiration means deletion of old messages which have outlasted a
+certain period of time.
+
+@code{wl-expire} supports not only simple deletion, but also moving to
+specified archiving folders.
+
+@section How to Use
+
+Configure @code{wl-expire-alist} and press @kbd{e} in the folder mode,
+or @kbd{M-e} in the summary mode.
+
+@subsection Configuring @code{wl-expire-alist}
+
+An example configuration of @code{wl-expire-alist} is shown below.
+Everything in this @code{wl-expire-alist} makes a great difference in
+expiration, so be careful.
+I advise you to set @code{wl-expire-use-log} to t, especially in the
+initial stage.
+
+@lisp
+(setq wl-expire-alist
+      '(("^\\+trash$"   (date 14) remove)
+                                  ;; @r{delete}
+        ("^\\+tmp$"     (date 7) trash)
+                                  ;; @r{re-file to @code{wl-trash-folder}}
+        ("^\\+outbox$"  (number 300) "$outbox;lha")
+                                  ;; @r{re-file to the specific folder}
+        ("^\\+ml/tmp$"  nil)
+                           ;; @r{do not expire}
+        ("^\\+ml/wl$"   (number 500 510) wl-expire-archive-number1 t)
+                           ;; @r{archive by message number (retaining numbers)}
+        ("^\\+ml/.*"    (number 300 310) wl-expire-archive-number2 t)
+                           ;; @r{archive by a fixed number (retaining numbers)}
+        ("^\\+nikki$"   (date 30) wl-expire-archive-date)
+                           ;; @r{archive by year and month (numbers discarded)}
+        ))
+@end lisp
+
+Items in the list has the format of:
+
+@example
+("regexp_for_folders"  (specification_of_messages_to_be_deleted) destination)
+@end example
+
+@noindent
+
+The folder is examined if it matches "regexp_for_folders" from the
+beginning of the list.  If you invoke expiration on the folder that does
+not match any of them, nothing will happen.
+And if either the second or the third element of the item is nil,
+expiration will not take place.
+
+You can use any one of the following for
+specification_of_message_to_be_deleted:
+
+@table @code
+@item (number n1 [n2])
+deletes messages depending on the number of messages in the folder.
+
+n1 is the number of messages which should survive deletion, for example
+if its value is 500, the newest 500 messages survive and the rests are
+deleted.
+
+n2 is the number of messages in the folder on which expiration should
+take place, which defaults to n1 + 1.  For example if its value is 510,
+folders with 510 or more messages are expired.
+If you configured automatic expiration, frequently used folders may
+expire every time it receive messages, and you may be annoyed with the
+long delay in reading mail.
+In that case, you can set a wide margin between n2 and n1, so that
+expiration would not take place until a certain number of messages
+accumulate.
+
+Messages with marks in @code{wl-summary-expire-reserve-marks} (marked
+with important/new/unread) are not deleted.
+If @code{wl-expire-number-with-reserve-marks} is non-nil, the folder
+will expire so as to have 500 messages including such ones.
+Otherwise, it will have 500 messages except such ones.
+
+@item (date d1)
+deletes messages depending on the dates.
+
+Messages dated d1 or more days ago are deleted, for example if its value
+is seven, messages seven days old or more are deleted.
+Note that the date is the one in the Date field of the message, not when 
+the message entered the folder.
+
+Messages with no or invalid Date field does not expire; you might have
+to delete them by hand.
+@end table
+
+You can use any one of the following in the place of destination:
+
+@table @code
+@item 'remove
+deletes the messages instantly.
+
+@item 'trash
+moves the messages to @code{wl-trash-folder}.
+
+@item string(folder)
+moves the messages to the specified folder.
+
+It would be useful for specifying an archiving folder, but because this
+does not move important messages, it might be better to use the
+standard functions described below.
+
+@item function
+invokes the specified function.
+
+To the function, three arguments are passed: a folder name, a list of
+messages to be deleted, and msgdb information of the summary.
+You can specify function-specific arguments after the name of the
+function.
+Note that the list contains messages with marks in
+@code{wl-summary-expire-reserve-marks}, be careful in writing your own
+function.
+
+These are three standard functions; they moves messages to an archive
+folder in the specified way.  This means old messages can be compressed
+and saved in a file, being deleted from the original folder.
+
+@table @code
+@item wl-expire-archive-number1
+re-files to archiving folders corresponding to the message numbers of
+the messages being deleted.
+For example, a message numbered 102 will be re-filed to
+@file{wl-00100.zip}, 390 to @file{wl-00300.zip}, and so on.
+If @code{wl-expire-archive-files} is 200, messages will be re-filed to
+@file{wl-00000.zip}, @file{wl-00200.zip}, @file{wl-00400.zip}, @dots{}.
+
+The archiving folders to which messages are re-filed are determined by
+the name of the folder as follows
+(in this case, archiving folders are handled as if
+@code{elmo-archive-treat-file} were non-nil).
+
+@table @code
+@item If the folder type is localdir:
+
+@code{$ArchiveDir/foldername-xxxxx.zip}
+For example, @samp{+ml/wl} corresponds to @samp{$ml/wl;zip}
+(@file{~/Mail/ml/wl-00100.zip}).
+
+@item The folder type is other than localdir:
+@code{$ArchiveDir/foldertype/foldername-xxxxx.zip}
+
+For example, @samp{%#mh/ml/wl} corresponds to
+@samp{$imap4/#mh/ml/wl;zip} (@file{~/Mail/imap4/#mh/ml/wl-00100.zip}).
+@end table
+
+As you can see, in the case of localdir, the folder type is not included
+in the path name, but otherwise it is included.
+And you can control the prefix to the archiving folder name by
+@code{wl-expire-archive-folder-prefix}.
+Refer to @code{wl-expire-archive-folder-prefix} for details.
+
+@item wl-expire-archive-number2
+re-files every certain number of messages to archiving folders.
+
+This differs from @samp{wl-expire-archive-number1} in that this re-files
+to the folder up to the specified number regardless of message numbers.
+The archiving folders to which messages are re-filed are determined in the 
+same way as @code{wl-expire-archive-number1}.
+
+@item wl-expire-archive-date
+re-files messages depending on its date (year and month) to archive
+folders.
+
+For example, a message dated December 1998 is re-filed to
+@code{$folder-199812;zip}.
+The name of the archiving folders except the date part are determined in
+the same way as @code{wl-expire-archive-number1}.
+@end table
+
+You can set the first argument to these three standard functions to non-nil
+in @code{wl-expire-alist} so as to retain message numbers in the folder.
+For example, it can be specified just after the name of the function:
+
+@example
+("^\\+ml/wl$" (number 300 310) wl-expire-archive-number1 t)
+@end example
+
+If you omit the argument, consecutive numbers from 1 are assigned for
+each archiving folder.
+@end table
+
+@subsection Treatment for Important or Unread Messages
+
+If you specify any of 'remove, 'trash, a folder name, or a standard
+function, messages with marks in @code{wl-summary-expire-reserve-marks}
+(which are called @dfn{reserved messages} thereafter) are retained.
+
+Per default, this variable include the important, new, and unread marks,
+so that messages with these marks are not removed.
+Note that you cannot include the temporary mark (i.e. temporary marks
+are removed anyway), and be sure to process temporary marks before you
+invoke expiration.
+
+@subsection Auto Expiration
+
+The following setup invokes expiration when you move into the summary
+mode.  There will be no confirmation, so make sure you made no mistake
+in regexp and other settings before you set up this.
+
+@lisp
+(add-hook 'wl-summary-prepared-pre-hook
+          'wl-summary-expire)
+@end lisp
+
+In the folder mode, you can invoke expiration per group as well as per
+folder.  Therefore, if you specify @samp{Desktop} group, all folders
+matching @code{wl-expire-alist} expire.
+
+@section Tips
+
+@subsection Treating archive folders.
+To treat archive folders created by @code{wl-expire-archive-number1} and so on,
+you must set non-nil value to @code{elmo-archive-treat-file}.
+
+@subsection Confirming
+
+If you are to use 'remove, try 'trash at first and see messages move to
+@code{wl-trash-folder} as expected, then replace it with 'remove.
+It would be dangerous to use 'remove from the beginning.
+
+If you are to use @code{wl-expire-archive-number1} and the like, try to
+make a folder of the archiver type ('zip or 'lha) and see if you can
+append messages to it.
+Even if settings in @code{wl-expire-alist} and @code{elmo-archive} are
+correct, messages would not be saved anywhere and disappeared in case
+the archiver program fails.
+
+After you make sure you can archive to the folder correctly, you can
+invoke expiration and utilize the log.
+
+If you set @code{wl-expire-use-log} to t, @file{~/.elmo/expired-log}
+should contain the log, for example:
+
+@example
+delete  +ml/wl  (593 594 595 596 597 598 599)
+move    +ml/wl -> $ml/wl-00600;tgz;wl  (600 601 602)
+@end example
+
+The first column indicates the operation, i.e. delete, copy, or move.
+The next is the name of the folder that expired.  In the case of copy
+and move, the destination folder is recorded after @samp{->}.
+The last is the list of message numbers that are actually deleted or
+moved (in the case of copy and move, the number is the one in the source 
+folder, rather than the destination folder).
+
+@subsection Re-filing Reserved Messages
+
+The three standard functions copy reserved messages to the archive
+folder, but do not delete them from the source folder.  Because
+reserved messages and the like always remain, they are recorded in
+@file{~/.elmo/expired-alist} so that they are not copied over and over
+again.  They are not recorded if copied by @code{wl-summary-archive}.
+
+If you enabled logging, usually "move" is recorded for re-filing, but
+instead "copy" and "delete" are recorded separately if reserved messages
+are involved.
+This is because it actually copies messages including reserved, then
+deletes ones except reserved in that case.
+
+@section Customizable Variables
+
+@table @code
+@item wl-expire-alist
+@vindex wl-expire-alist
+The initial setting is nil.
+This variable specifies folders and methods to expire.  For details,
+refer to @code{wl-expire-alist} settings above.
+
+@item wl-summary-expire-reserve-marks
+@vindex wl-summary-expire-reserve-marks
+The initial setting is the list below.
+
+@lisp
+(list wl-summary-important-mark
+      wl-summary-new-mark
+      wl-summary-unread-mark
+      wl-summary-unread-uncached-mark
+      wl-summary-unread-cached-mark)
+@end lisp
+
+Messages with these marks are retained in the folder, even after
+expiration.
+Only permanent marks can be listed, not temporary marks.
+
+You can list marks one by one as in the default; you can use the
+following settings as well:
+
+@table @code
+@item 'all
+All messages with permanent marks are retained,
+i.e. @code{wl-summary-read-uncached-mark} is included in addition to the 
+defaults.
+
+@item 'none
+All messages are handled as usual ones that are already read, no matter
+what marks they have; even important messages are deleted.
+@end table
+
+@item wl-expire-archive-files
+@vindex wl-expire-archive-files
+The initial setting is 100.
+This variable specifies the number of messages to be retained in one
+archiving folder.
+
+@item wl-expire-number-with-reserve-marks
+@vindex wl-expire-number-with-reserve-marks
+The initial setting is nil.
+If non-nil, if expiring messages are specified by "number", messages
+with @code{wl-summary-expire-reserve-marks} are also retained.
+
+@item wl-expire-archive-get-folder-func
+@vindex wl-expire-archive-get-folder-func
+The initial setting is 'wl-expire-archive-get-folder.
+
+This variable specifies a function that returns the name of an archiving 
+folder for standard functions in the place of destination.
+You can use the following three variables for simple modification of
+folder names; if you want more complex settings, define your own
+function in this variable.
+
+@code{wl-expire-archive-get-folder} can be customized by these
+variables:
+@itemize @bullet
+@item wl-expire-archive-folder-name-fmt
+@item wl-expire-archive-folder-type
+@item wl-expire-archive-folder-prefix
+@end itemize
+
+@item wl-expire-archive-folder-name-fmt
+@vindex wl-expire-archive-folder-name-fmt
+The initial setting is "%s-%%05d;%s".
+This is a format string for archiving folders used in
+@code{wl-expire-archive-number1} and @code{wl-expire-archive-number2}.
+Note that you must specify the message number by @samp{%%d}, because it
+is parsed twice by @code{format}.
+
+If you modify this, adjust @code{wl-expire-archive-folder-num-regexp} as 
+well.
+
+@item wl-expire-archive-date-folder-name-fmt
+@vindex wl-expire-archive-date-folder-name-fmt
+The initial setting is "%s-%%04d%%02d;%s".
+This is a format string for archiving folders used in
+@code{wl-expire-archive-date}.
+Note that you must specify the message number by @samp{%%d}, because it
+is parsed twice by @code{format}.
+There should be @code{%%d} twice, one for the year and the other for the
+month.
+
+If you modify this, adjust
+@code{wl-expire-archive-date-folder-num-regexp} as well.
+
+@item wl-expire-archive-folder-type
+@vindex wl-expire-archive-folder-type
+The initial setting is 'zip.
+This variable specifies an archiver type of the archiving folders.
+
+@item wl-expire-archive-folder-prefix
+@vindex wl-expire-archive-folder-prefix
+The initial setting is nil.
+This variable specifies the prefix (directory structure) to archiving
+folders.
+Exercise extreme caution in using this feature, as it has not been
+seriously tested.
+In the worst case, there is a fear of destructing archiving folders.
+
+@table @code
+@item nil
+There will be no prefix.
+
+@item 'short
+For example, @samp{+ml/wl} will be prefixed by @samp{wl}, resulting in
+@samp{$ml/wl-00000;zip;wl}.
+
+@item t
+For example, @samp{+ml/wl} will be prefixed by prefix @samp{ml/wl},
+resulting in
+
+@samp{$ml/wl-00000;zip;ml/wl}.
+@end table
+
+@item wl-expire-archive-folder-num-regexp
+@vindex wl-expire-archive-folder-num-regexp
+The initial setting is "-\\([-0-9]+\\);".
+This variable specifies the regular expression to be used for getting
+message numbers from multiple archiving folders specified by
+@code{elmo-list-folders}.
+Set it in accordance with @code{wl-expire-archive-folder-name-fmt}.
+
+@item wl-expire-archive-date-folder-num-regexp
+@vindex wl-expire-archive-date-folder-num-regexp
+The initial setting is "-\\([-0-9]+\\);".
+This is the regular expression to be used for getting message numbers
+from multiple archiving folders specified by @code{elmo-list-folders}.
+Set it in accordance with @code{wl-expire-archive-date-folder-name-fmt}.
+
+@item wl-expire-delete-oldmsg-confirm
+@vindex wl-expire-delete-oldmsg-confirm
+The initial setting is t.
+If non-nil, messages older than the one with the largest number will be
+deleted with confirmation.
+If nil, they are deleted without confirmation.
+
+This feature is valid only if non-nil is specified as a argument to the
+standard functions so as to retain numbers.
+
+@item wl-expire-use-log
+@vindex wl-expire-use-log
+The initial setting is nil.
+If non-nil, expiration logs are recorded in @file{~/.elmo/expired-log}.
+They are appended but not truncated or rotated automatically; you might
+need to remove it manually.
+
+@item wl-expire-add-seen-list
+@vindex wl-expire-add-seen-list
+The initial setting is t.
+
+If non-nil, when messages are re-filed by expiration, read/unread
+information is passed to the destination folder.
+
+However if you do not read the destination folder from Wanderlust,
+@file{seen} under @file{~/.elmo/} grows larger and larger, so you might
+want to set this to nil if you are simply saving to some archiving
+folders.  Even if its value is nil, messages in the archiving folders
+are simply treated as unread; it does not affect expiration itself.
+
+@item wl-expire-folder-update-msgdb
+@vindex wl-expire-folder-update-msgdb
+The initial setting is t.
+If t, in the folder mode, expiration is carried out after updating
+summary information.
+If you specified a list of regular expressions of folder names, summary
+information is updated for matching folders only.
+@end table
+
+
+@node Archive,  , Expire, Expire and Archive
+@section Archiving Messages
+
+@subsection Archiving Messages
+@kbd{M-x wl-summary-archive} copies the whole folder to archiving
+folders.  If there are the archiving folders already, only new messages
+are appended.
+
+You can use @code{wl-archive-alist} in order to specify how messages are 
+archived according to their folder names, as in @code{wl-expire-alist}.
+For example:
+
+@lisp
+(setq wl-archive-alist
+      '(("^\\+tmp$"     wl-archive-date)
+        ("^\\+outbox$"  wl-archive-number2)
+        (".*"           wl-archive-number1)
+        ))
+@end lisp
+
+Each item in the list has the following format:
+
+@example
+("folders_regexp"  deleting_function)
+@end example
+
+As you can see, you can only use a function after @samp{folders_regexp}.
+Per default, there are three functions:
+
+@itemize @bullet
+@item wl-archive-number1
+@item wl-archive-number2
+@item wl-archive-date
+@end itemize
+
+As inferred from their names, they work similarly to "expire" versions,
+other than the following points:
+
+@itemize @minus
+@item No messages are deleted
+@item Message numbers are retained even if invoked without arguments
+@end itemize
+
+These functions are good to archive all messages in a folder by their
+numbers or by their dates.
+These are also useful for backup or confirmation purposes before
+expiration.
+If you try to re-file them after they are archived, they are deleted but 
+not re-filed.
+
+Per default, the archiving folders to which messages are copied are
+determined automatically by @code{wl-expire-archive-get-folder-func}.
+You can copy to a specific folder by invoking with a prefix argument,
+i.e. @kbd{C-u M-x wl-summary-archive}.
+
+Note that this feature has not been seriously tested, because you can
+simply copy to an archiving folder, for example by
+@code{wl-summary-copy-region}.
+
+The archiving folders are determined by the same logic as in
+@code{wl-summary-expire}; the following customizable variables are
+relevant:
+
+@itemize @bullet
+@item wl-expire-archive-files
+@item wl-expire-archive-get-folder-func
+@item wl-expire-archive-folder-name-fmt
+@item wl-expire-archive-folder-type
+@item wl-expire-archive-folder-prefix
+@item wl-expire-archive-folder-num-regexp
+@end itemize
+
+@subsection Customizable Variables
+
+@table @code
+@item wl-archive-alist
+@vindex wl-archive-alist
+The initial setting is '((".*" wl-archive-number1)).
+
+This variable specifies a function that copies to archiving folders.
+To the function, three arguments are passed: a folder name, a list of
+messages in the folder, and msgdb information of the summary.
+Needless to say, you can use your own function.
+@end table
+
+
+@c
+@c  Scoring
+@c
+@node Scoring, Customization, Expire and Archive, Top
+@chapter Score of the Messages
+@cindex Scoring
+@c @cindex Kill File
+
+Scoring is the function that associates a score (value) with each
+message, and marks as read or deletes from the summary according to it.
+
+You can put temp or important marks on essential messages, or read marks
+on the ones you do not want to read, for example spam articles.
+
+This scoring function has a capability and a format similar to the one
+that Gnus has, although there are some unsupported features and
+Wanderlust specifics.
+
+@menu
+* Score Commands::             Score Commands
+* Score File Format::          Score File Format
+@end menu
+
+
+@node Score Commands, Score File Format, Scoring, Scoring
+@section Score Commands
+@cindex Score Commands
+
+@subsection Score File Specification
+
+@code{wl-score-folder-alist} specifies score files or variables in which 
+scores are defined, corresponding to folder names.
+
+@lisp
+(setq wl-score-folder-alist
+      '(("^-.*"
+         "news.SCORE"
+         "my.SCORE")
+        (".*"
+         "all.SCORE")))
+@end lisp
+
+If paths to the score files are omitted, the directory specified in the
+variable @code{wl-score-files-dir} is assumed.
+
+No matter what you write in @code{wl-score-folder-alist}, the default
+score file @code{wl-score-default-file} (@file{all.SCORE}) is always
+read (it does not have to exist).
+Therefore, in the example above, the three score files,
+@file{news.SCORE}, @file{my.SCORE}, and @file{all.SCORE} are read for
+the folders that matches @samp{^-.*}.
+
+@subsection Scored Messages
+
+Scores are attached to the messages that are specified by
+@code{wl-summary-score-marks} temporarily when the summary is updated;
+when you exit from the summary, the scores are removed and reverts to
+the defaults.
+
+@subsection Creation of Score Files
+
+In the summary buffer, move to an appropriate message and type @kbd{L}.
+Then type @kbd{s}, @kbd{s}, and @kbd{p} at a prompt in a mini-buffer.
+The string in Subject is presented.  Edit it and press @kbd{@key{RET}}.
+
+This makes -1000 are scored for messages with the same Subject as the
+string you entered.  That is, such a score file is created
+automatically.
+
+Then, try typing @kbd{h} and @kbd{e} in the same summary buffer.
+The score file you just made appears.
+This buffer is called "score editing buffer" thereafter.
+When you type @kbd{C-c C-e} in it, you are prompted in the mini-buffer
+as you are previously; type @kbd{a}.  Then a score entry for "From"
+should be inserted.
+In this way, you can create a score file easily either in the summary
+buffer or in the score editing buffer.
+
+By the way, you might be aware the numbers of key strokes are different
+between @kbd{s s p} and @kbd{a}.
+This is determined by @code{wl-score-header-default-entry}.
+This variable specifies the default score entries corresponding to
+header fields.
+For example, for "subject" field, a type and a time limit are prompted,
+but for "from" field, they are fixed upon automatically as substring and
+permanent respectively.
+However, score values can be modified by the prefix argument.
+Typing @kbd{?} at the mini-buffer shows a help on keys and corresponding 
+headers and types.
+
+At last, type @kbd{C-c C-c} in the score editing buffer.  This saves the 
+score file and terminates the edit mode.  Typing @kbd{C-c C-c} after
+erasing contents of the buffer deletes the score file being edited.
+
+@subsection Tips
+
+@subsubsection Selecting Score Files
+
+You can change score files to which scores are appended by
+@code{wl-summary-increase-score} and @code{wl-summary-lower-score} by
+@code{wl-score-change-score-file}.
+
+@subsubsection Summing Up the Score
+
+If you add the same entries by @code{wl-summary-increase-score},
+@code{wl-summary-lower-score}, and @code{wl-score-edit-insert-entry},
+scores for the entry is summed up.
+
+For example, if you create @samp{from} entry with the score of -1000 by
+@kbd{L a} and again @samp{from} with -200, one entry with the score of
+-1200 will be created as a result.
+
+@subsubsection Creating Thread Key
+
+Creating @samp{Thread} key by @code{wl-summary-increase-score} or
+@code{wl-summary-lower-score} appends @samp{Message-ID} of all children.
+
+@subsubsection Creating Followup Key
+
+Creating @samp{Followup} key by @code{wl-summary-increase-score} or
+@code{wl-summary-lower-score} appends @samp{Message-ID} of the message
+at the cursor to @samp{References} key.
+If @code{wl-score-auto-make-followup-entry} is non-nil,
+@samp{Message-ID} of all messages to be followed up within dates
+specified by @code{wl-score-expiry-days}.
+
+@subsection Key Bindings
+
+@table @kbd
+@item K
+@kindex K (Summary)
+@findex wl-summary-increase-score
+Increases the score for the current message.
+And the score entry is appended to the score file at the same moment.
+You can specify the score value by a prefix argument.
+
+@item L
+@kindex L (Summary)
+@findex wl-summary-lower-score
+Decreases the score for the current message.
+And the score entry is appended to the score file at the same moment.
+You can specify the score value by a prefix argument.
+
+@item h R
+@kindex h R (Summary)
+@findex wl-summary-rescore
+Re-applies the scoring.
+However, already scored messages are not scored anew.
+
+@item h c
+@kindex h c (Summary)
+@findex wl-score-change-score-file
+Changes the score file currently selected.
+
+@item h e
+@kindex h e (Summary)
+@findex wl-score-edit-current-scores
+Edits the score file currently selected.
+If there are multiple score files, the previously specified one is
+selected.
+
+@item h f
+@kindex h f (Summary)
+@findex wl-score-edit-file
+Edits an arbitrary score file and selects it.
+
+@item h F
+@kindex h F (Summary)
+@findex wl-score-flush-cache
+Erases caches associated to the score files that are read.
+If you modified score files directly (from other than Wanderlust), you
+need to re-read them after erasing the cache.
+
+@item h m
+@kindex h m (Summary)
+@findex wl-score-set-mark-below
+Specifies the criterion for scores to be marked as read.
+Messages with scores less than this value are marked as read.
+
+@item h x
+@kindex h x (Summary)
+@findex wl-score-set-expunge-below
+Specifies the criterion for scores to be deleted from the summary.
+Messages with scores less than this value are deleted.
+"Deleted" means it is not shown; they are not removed from the summary
+information or the folder.
+The deleted messages can be shown by rescan-noscore again.
+@end table
+
+@subsection Key Bindings in the Score Editing Buffer
+
+@table @kbd
+@item C-c C-k
+@kindex C-c C-k (Score Mode)
+@findex wl-score-edit-kill
+Abandons the file being edited.
+
+@item C-c C-c
+@kindex C-c C-c (Score Mode)
+@findex wl-score-edit-exit
+Saves the file being edited, and quits from the edit mode.
+
+@item C-c C-p
+@kindex C-c C-p (Score Mode)
+@findex wl-score-pretty-print
+Re-draws the score.
+
+@item C-c C-d
+@kindex C-c C-d (Score Mode)
+@findex wl-score-edit-insert-date
+Inserts the number of dates from Dec. 31, 1 B.C.
+It is used for creating the third factor of time-limited scores.
+
+@item C-c C-s
+@kindex C-c C-s (Score Mode)
+@findex wl-score-edit-insert-header
+Inserts the header of the message selected in the summary buffer.
+
+@item C-c C-e
+@kindex C-c C-e (Score Mode)
+@findex wl-score-edit-insert-entry
+Inserts the score entry of the message selected in the summary buffer.
+@end table
+
+@subsection Customizable Variables
+
+@table @code
+@item wl-summary-default-score
+@vindex wl-summary-default-score
+The initial setting is zero.
+This variable specifies the default value of the score.
+The score is increased or decreased based upon this value.
+
+@item wl-summary-important-above
+@vindex wl-summary-important-above
+The initial setting is nil.
+Messages with scores larger than this value are attached with the
+important mark (@samp{$}).
+If nil, no important marks are attached.
+
+@item wl-summary-temp-above
+@vindex wl-summary-temp-above
+The initial setting is nil.
+Messages with scores larger than this value are attached with the temp
+mark (@samp{*}).
+If nil, no temp marks are attached.
+
+@item wl-summary-mark-below
+@vindex wl-summary-mark-below
+The initial setting is zero.
+Messages with scores smaller than this value are marked as read.
+
+@item wl-summary-expunge-below
+@vindex wl-summary-expunge-below
+The initial setting is nil.
+Messages with scores smaller than this value are deleted from the
+summary.
+If nil, they are not deleted.
+
+@item wl-summary-score-marks
+@vindex wl-summary-score-marks
+The initial setting is '("N" "!" "U").
+Messages with these marks are scored.
+
+@item wl-use-scoring
+@vindex wl-use-scoring
+The initial setting is t.
+If non-nil, scoring is enabled.
+
+@item wl-score-files-dir
+@vindex wl-score-files-dir
+The initial setting is "~/.elmo/".
+The default directory for score files.
+
+@item wl-score-interactive-default-score
+@vindex wl-score-interactive-default-score
+The initial setting is 1000.
+This value is used as a score when a score factor is nil in the score
+file.
+It is also used in @code{wl-summary-increase-score} and
+@code{wl-summary-lower-score}, on condition that the value of
+@code{wl-score-header-default-entry} is nil.
+
+@item wl-score-expiry-days
+@vindex wl-score-expiry-days
+The initial setting is 7.
+This is the number of days before time-limited scores are deleted.
+
+@item wl-score-update-entry-dates
+@vindex wl-score-update-entry-dates
+The initial setting is t.
+If non-nil, it enables deletion of time-limited scores.
+
+@item wl-score-header-default-entry
+@vindex wl-score-header-default-entry
+Specifies the default value for each header field for score entries
+created by @code{wl-summary-increase-score},
+@code{wl-summary-lower-score}, and @code{wl-score-edit-insert-entry}.
+
+@item wl-score-simplify-fuzzy-regexp
+@vindex wl-score-simplify-fuzzy-regexp
+In the case of a type of a score entry is "fuzzy", this specifies a
+regular expression to be deleted from the string.
+Because this is usually used for Subject, the default is prefixes that
+are attached by mailing list programs.
+
+@item wl-summary-rescore-partial-threshold
+@vindex wl-summary-rescore-partial-threshold
+The initial setting is 200.
+When sync-all or rescan is executed, if there are messages more than
+this value, only the last same number of messages as this value are
+scored.
+
+@item wl-summary-auto-sync-marks
+@vindex wl-summary-auto-sync-marks
+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 'mark folder.
+The initial setting is t.
+@end table
+
+
+@node Score File Format,  , Score Commands, Scoring
+@section Score File Format
+@cindex Score File Format
+
+The format of score files are the same as Gnus, and basically you can
+use Gnus score files as they are.  But they are not fully compatible
+because some keys are not supported and there are Wanderlust specifics.
+
+@example
+(("subject"
+  ("for sale" -1000 nil s)
+  ("profit" -1000 nil s))
+ ("from"
+  ("spam@@spamspamspam" -10000 nil s))
+ ("followup"
+  ("my@@address" 3001 nil s))
+ ("chars"
+  (1000000 -10 nil >))
+ (important 5000)
+ (temp 3000)
+ (mark 0)
+ (expunge -3000))
+@end example
+
+@table @code
+@item string
+If the key is a string, it is the name of the header to be matched.
+The following keys are available:
+@code{Subject}, @code{From}, @code{Date}, @code{Message-ID},
+@code{References}, @code{To}, @code{Cc}, @code{Chars}, @code{Lines},
+@code{Xref}, @code{Extra}, @code{Followup}, @code{Thread}
+@code{Chars} and @code{Lines} mean the size and the number of lines of
+the message, respectively.  @code{Extra}, @code{Followup}, @code{Thread}
+are described later.
+The rest corresponds the field of the same name.
+
+Arbitrary numbers of core entries are specified after the key.
+Each score entry consists of these five factors:
+
+@enumerate
+@item
+A factor that matches header.  This should be a number in the cases of
+"lines" and "chars", otherwise a string.
+
+@item
+A score factor.  When the first item matches, the score of the message
+is increased or decreased by this value.
+
+@item
+A time limiting factor.  If nil, the score is permanent, and in the case
+of a number, the score is deleted if it does not match for days
+(@code{wl-score-expiry-days}) from the date specified by this.
+The date is since Dec. 31, 1 B.C.
+
+@item
+A type factor.  This specifies the way the first factor matches.
+Available types depend on keys.
+
+@table @dfn
+@item From, Subject, References, Message-ID
+For these keys in string, @code{r} and @code{R} (regexp),
+@code{s} and @code{S} (substring), @code{e} and @code{E} (exact match),
+as well as @code{f} and @code{F} (fuzzy) can be used.
+@code{R}, @code{S}, @code{E}, and @code{F} are case sensitive.
+
+@item Lines, Chars
+For these keys, the following five numerical relative operators can be
+used: @code{<}, @code{>}, @code{=}, @code{>=}, @code{<=}.
+
+@item Followup
+This key matches @code{From} header, and scores all follow-ups to the
+message.
+For example, it would be useful for increasing scores for follow-ups to
+you own article.
+
+You can use the same types as @code{From} except for @code{f}.
+And a @samp{Followup} entry is automatically appended to the score file.
+
+@item Thread
+This key scores (sub-)threads beginning with @code{Message-ID} @var{x}.
+A @samp{Thread} entry is automatically appended for each article that
+has @var{x} in the @code{References} header.
+You can make sure the whole thread including messages that does not have
+all ancestors @code{Message-ID} in @code{References} is scored.
+
+You can use the same types as @code{References} except for @code{f}.
+And a @samp{Thread} entry is automatically appended to the score file.
+@end table
+
+@item
+A factor for extension header.  This is meaningful only if the key is
+@code{Extra}.
+This specifies headers to be matched other than standard headers like
+@code{Subject} and @code{From}.
+Note that you should specify the header in
+@code{elmo-msgdb-extra-fields} also.
+Therefore it does not work in folders where extension headers cannot be
+retrieved.
+
+@end enumerate
+
+The sum of these scores @emph{after all factors are applied} becomes the 
+score of the message.
+
+@cindex Score File Atoms
+@item mark
+Messages with a score less than this value is marked as read.
+The default is @code{wl-summary-mark-below}.
+
+@item expunge
+Messages with a score less than this value is deleted from the summary.
+The default is @code{wl-summary-expunge-below}.
+
+@item mark-and-expunge
+Both @code{mark} and @code{expunge} are applied,
+i.e. messages with a score less than this value is marked as read and
+deleted from the summary.
+
+@item temp
+Messages with a score greater than this value is attached with temp
+marks.
+The default is @code{wl-summary-temp-above}.
+
+@item important
+Messages with a score greater than this value is attached with important
+marks.
+The default is @code{wl-summary-important-above}.
+@end table
+
+@subsection Caveats
+
+Not to mention the @code{extra} key, if @code{lines} or @code{xref} keys 
+are used, you need to set @code{elmo-msgdb-extra-fields}.
+
+@lisp
+(setq elmo-msgdb-extra-fields '("lines" "xref"))
+@end lisp
+
+There are other restrictions as shown below:
+
+@itemize @bullet
+@item Because @samp{References} field in the summary information
+contains only the last @samp{Message-ID}, @code{references} key matches
+the last one only.
+@end itemize
+
+Keys that can be seen by folder of types:
+
+@example
+                        chars lines xref  extra
+localdir,localnews        Y     E     E     E
+nntp (supporting xover)   Y     E     E     N
+     (otherwise)          N     E     E     E
+imap4                     Y     E     E     E
+pop3                      N     E     E     E
+
+                Y: can be seen
+                N: cannot be seen (ignored)
+                E: can be seen with @code{elmo-msgdb-extra-fields} settings
+@end example
+
+
+@c
+@c  Customization
+@c
+@node Customization, Mailing List, Scoring, Top
+@chapter Customizing Wanderlust
+@cindex Customization
+
+@menu
+* Living with other packages:: Living with other packages
+* Highlights::                 Highlights
+* Advanced Settings::          Advanced Settings
+* Customizable Variables::     Customizable Variables
+@end menu
+
+
+@node Living with other packages, Highlights, Customization, Customization
+@section Living with other packages
+
+Examples with other packages.
+
+@menu
+* BBDB::                        BBDB
+* supercite::                   supercite.el
+* mu-cite::                     mu-cite.el
+* x-face-mule::                 x-face-mule.el
+* dired-dd::                    dired-dd.el
+@end menu
+
+
+@node BBDB, supercite, Living with other packages, Living with other packages
+@subsection bbdb.el
+@pindex BBDB
+
+Place @file{util/bbdb-wl.el} on the load-path and do the following
+settings.
+
+If BBDB is on the load-path at the installation, @file{bbdb-wl.el} is
+byte-compiled and installed.
+@xref{Install}.
+
+@lisp
+(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)
+(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-func '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 lisp
+
+@node supercite, mu-cite, BBDB, 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
+(autoload 'sc-cite-original "sc" nil t)
+(setq mail-yank-hooks 'sc-cite-original)
+(setq sc-preferred-header-style 1)
+(setq sc-electric-references-p nil)
+(setq sc-citation-leader "")
+(setq sc-load-hook '(lambda () (require 'sc-register)))
+(setq sc-preferred-attribution 'registeredname)
+@end lisp
+
+
+@node mu-cite, x-face-mule, 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
+(autoload 'mu-cite/cite-original "mu-cite" nil t)
+(setq mail-citation-hook 'mu-cite/cite-original)
+@end lisp
+
+If you use mu-cite version 8.1 or later:
+
+@lisp
+(autoload 'mu-cite-original "mu-cite" nil t)
+(add-hook 'mail-citation-hook (function mu-cite-original))
+@end lisp
+
+@node x-face-mule, dired-dd, mu-cite, Living with other packages
+@subsection x-face-mule.el
+@pindex x-face-mule
+@pindex bitmap-mule
+
+It depends on the version of x-face-mule.
+If you use x-face-mule 0.19 or older, do the following:
+
+@lisp
+(setq wl-highlight-x-face-func
+      (function
+       (lambda (beg end)
+        (x-face-mule:x-face-decode-message-header))))
+
+If you use x-face-mule 0.20 or later, try the following.
+
+(setq wl-highlight-x-face-func
+      (function
+       (lambda (beg end)
+        (x-face-mule-x-face-decode-message-header))))
+(require 'x-face-mule)
+@end lisp
+
+Use these settings when you use @file{x-face-mule.el} attached to
+bitmap-mule 8.0 or later.
+
+@lisp
+(autoload 'x-face-decode-message-header "x-face-mule")
+(setq wl-highlight-x-face-func
+      (function x-face-decode-message-header))
+@end lisp
+
+If there is an encoded X-Face string in a file @file{~/.xface} (the value
+of the variable @code{wl-x-face-file}), it is inserted as a X-Face field
+in the draft buffer (if @code{wl-auto-insert-x-face} is non-nil).
+
+
+@node dired-dd,  , x-face-mule, Living with other packages
+@subsection dired-dd(Dired-DragDrop)
+@pindex Dired-DragDrop
+@pindex Dired-DD
+@cindex Drag and Drop
+
+If you embed @file{dired-dd-mime.el} in the dired-dd package, you can
+compose multi-part by simple Drag&Drop from dired to the draft buffer
+being edited in GNU Emacs (this feature is not Wanderlust specific, but
+general-purpose for tm/SEMI).
+
+@lisp
+;; @r{dired-dd:} http://www.asahi-net.or.jp/~pi9s-nnb/dired-dd-home.html
+(add-hook
+ 'dired-load-hook
+ (function
+  (lambda ()
+    (load "dired-x")
+    ;; @r{Set dired-x variables here.}
+    ;; @r{To and flo@dots{}}
+    (if window-system
+        (progn (require 'dired-dd)
+               (require 'dired-dd-mime))))))
+@end lisp
+
+
+@node Highlights, Advanced Settings, Living with other packages, Customization
+@section Highlights
+
+@subsection Customizable Variables
+
+@table @code
+@item  wl-summary-highlight
+@vindex wl-summary-highlight
+The initial setting is t.
+If non-nil, the summary is highlighted.
+
+@item  wl-highlight-max-summary-lines
+@vindex wl-highlight-max-summary-lines
+The initial setting is 10000.
+The summary is not highlighted if it has more lines than this value.
+
+@item  wl-summary-highlight-partial-threshold
+@vindex wl-summary-highlight-partial-threshold
+The initial setting is 1000.
+This is a threshold whether the whole summary is highlighted.
+If there are more lines of messages in the summary, it is partially
+highlighted.
+
+@item  wl-summary-partial-highlight-above-lines
+@vindex wl-summary-partial-highlight-above-lines
+The initial setting is 30.
+If there are more lines of messages than
+@code{wl-summary-highlight-partial-threshold} in the summary, messages
+after the point that is the same number of lines as this value above the
+cursor line are highlighted partially.
+(If this value is nil, the last same number of lines as the value of
+@code{wl-summary-highlight-partial-threshold} are highlighted.)
+
+@item wl-highlight-body-too
+@vindex  wl-highlight-body-too
+The initial setting is t.
+If non-nil, bodies of drafts and messages are also highlighted.
+
+@item  wl-highlight-message-header-alist
+@vindex wl-highlight-message-header-alist
+When highlighting headers of drafts and messages, this variable
+specifies which faces are allocated to important
+(@code{wl-highlight-message-important-header-contents}), secondly
+important (@code{wl-highlight-message-important-header-contents2}), and
+unimportant (@code{wl-highlight-message-unimportant-header-contents})
+message headers.
+Similarly, it can be used for allocating arbitrary faces to arbitrary
+regular expressions.
+
+@item wl-highlight-citation-prefix-regexp
+@vindex  wl-highlight-citation-prefix-regexp
+Specifies a regular expression to which quoted lines in bodies of 
+drafts and messages match.
+Bodies matching to this regular expression are highlighted by the faces
+specified by (@code{wl-highlight-message-cited-text-*}).
+
+@item  wl-highlight-highlight-citation-too
+@vindex wl-highlight-highlight-citation-too
+The initial setting is nil.
+If non-nil, the quoting regular expression itself given by
+@code{wl-highlight-citation-prefix-regexp} is also highlighted.
+
+@item  wl-highlight-citation-header-regexp
+@vindex wl-highlight-citation-header-regexp
+Specifies a regular expression that denotes beginning of quotation.
+Bodies matching to this regular expression are highlighted by the face
+specified by @code{wl-highlight-message-headers}.
+
+@item  wl-highlight-max-message-size
+@vindex wl-highlight-max-message-size
+The initial setting is 10000.
+If a message is larger than this value, it will not be highlighted.
+With this variable, highlight is suppressed for uuencode or huge digest
+messages.
+
+@item  wl-highlight-signature-separator
+@vindex wl-highlight-signature-separator
+Specifies regular expressions that denotes the boundary of a signature.
+It can be a regular expression, or a list of ones.
+Messages after the place that matches this regular expression are
+highlighted by the face specified by
+@code{wl-highlight-message-signature}.
+
+@item  wl-max-signature-size
+@vindex wl-max-signature-size
+The initial setting is 400.
+This is the largest size for a signature to be highlighted.
+
+@item wl-use-highlight-mouse-line
+@vindex  wl-use-highlight-mouse-line
+The initial setting is t.
+If non-nil, the line pointed by the mouse is highlighted in the folder
+mode, summary mode, and the like.
+@end table
+
+@subsection Setting Colors and Fonts of the Characters
+
+If you want to change colors or fonts of the characters, you need to
+modify faces defined in Wanderlust.  Use set-face-font if you want to
+change fonts, and set-face-foreground for colors, and so on.
+You cannot write face settings in @file{.emacs}; write in @file{~/.wl}.
+
+For example, if you want to change the color for signatures to yellow,
+write
+
+@lisp
+(set-face-foreground 'wl-highlight-message-signature "yellow")
+@end lisp
+
+@noindent
+in @file{~/.wl}.
+
+Faces defined in Wanderlust:
+
+@table @code
+@item wl-highlight-message-headers
+The face for field names of message headers.
+
+@item wl-highlight-message-header-contents
+The face for field bodies of message headers.
+
+@item wl-highlight-message-important-header-contents
+The face for important parts of message headers.
+Per default, this face is used for a body of Subject field.
+You can change its value by editing
+@code{wl-highlight-message-header-alist}.
+
+@item wl-highlight-message-important-header-contents2
+The face for secondly important parts of message headers.
+Per default, this face is used for bodies of From and To fields.
+You can change its value by editing
+@code{wl-highlight-message-header-alist}.
+
+@item wl-highlight-message-unimportant-header-contents
+The face for unimportant parts of message headers.
+Per default, this face is used for bodies of X- fields User-Agent fields.
+You can change its value by editing
+@code{wl-highlight-message-header-alist}.
+
+@item wl-highlight-message-citation-header
+The face for headers of quoted messages.
+
+@item wl-highlight-message-cited-text-*
+The face for texts of quoted messages.
+The last "*" is a single figure so that 10 different colors can be used
+according to citation levels.
+
+@item wl-highlight-message-signature
+The face for signatures of messages.
+The initial settings are khaki for light background colors, and
+DarkSlateBlue for dark background colors.
+
+@item wl-highlight-header-separator-face
+The face for header separators of draft messages.
+
+@item wl-highlight-summary-important-face
+The face for message lines with important marks in the summary.
+
+@item wl-highlight-summary-new-face
+The face for message lines with new marks in the summary.
+
+@item wl-highlight-summary-displaying-face
+The face for the message line that is currently displayed.
+This face is overlaid.
+
+@item wl-highlight-thread-indent-face
+The face for the threads that is currently displayed.
+
+@item wl-highlight-summary-unread-face
+The face for message lines with unread marks in the summary.
+
+@item wl-highlight-summary-deleted-face
+The face for message lines with delete marks in the summary.
+
+@item wl-highlight-summary-refiled-face
+The face for message lines with re-file marks in the summary.
+
+@item wl-highlight-refile-destination-face
+The face for re-file information part of message lines with re-file
+marks in the summary.
+
+@item wl-highlight-summary-copied-face
+The face for message lines with copy marks in the summary.
+
+@item wl-highlight-summary-target-face
+The face for message lines with temp marks @samp{*} in the summary.
+
+@item wl-highlight-summary-thread-top-face
+The face for message lines that are on the top of the thread in the
+summary.
+
+@item wl-highlight-summary-normal-face
+The face for message lines that are not on top of the thread in the
+summary.
+
+@item wl-highlight-folder-unknown-face
+The face for folders that are not known to have how many unsync messages
+in the folder mode.
+
+@item wl-highlight-folder-zero-face
+The face for folders that have no unsync messages in the folder mode.
+
+@item wl-highlight-folder-few-face
+The face for folders that have some unsync messages in the folder mode.
+
+@item wl-highlight-folder-many-face
+The face for folders that have many unsync messages in the folder mode.
+The boundary between `some' and `many' is specified by the variable
+@code{wl-folder-many-unsync-threshold}.
+
+@item wl-highlight-folder-unread-face
+The face for folders that have no unsync but unread messages in the
+folder mode.
+
+@item wl-highlight-folder-killed-face
+The face for folders that are deleted from the access group in the
+folder mode.
+
+@item wl-highlight-folder-opened-face
+The face for open groups in the folder mode.
+It is meaningful when @code{wl-highlight-group-folder-by-numbers} is nil.
+
+@item wl-highlight-folder-closed-face
+The face for close groups in the folder mode.
+It is meaningful when @code{wl-highlight-group-folder-by-numbers} is nil.
+
+@item wl-highlight-folder-path-face
+The face for the path to the currently selected folder in the folder
+mode.
+
+@item wl-highlight-logo-face
+The face for logo in the demo.
+
+@item wl-highlight-demo-face
+The face for strings (for example, a version number) in the demo.
+@end table
+
+@node Advanced Settings, Customizable Variables, Highlights, Customization
+@section Advanced Settings
+
+@menu
+* Draft for Reply::             Draft for Reply
+* Thread Format::               Appearance of Thread
+* User-Agent Header::           User-Agent Header
+@end menu
+
+
+@node Draft for Reply, Thread Format, Advanced Settings, Advanced Settings
+@subsection Draft for Replay
+
+If you want, when you replying to articles in mailing lists, the address
+in Reply-To field of the original message to be prepared to To field of
+the reply draft by simply pressing @kbd{a} in the summary mode, try the
+following settings:
+
+@lisp
+(setq wl-draft-reply-without-argument-list
+      '(("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
+        ("Followup-To" . (nil nil ("Followup-To")))
+        (("X-ML-Name" "Reply-To") . (("Reply-To") nil nil))
+        ("From" . (("From") ("To" "Cc") ("Newsgroups")))))
+@end lisp
+
+@noindent
+(Only if there are both of "X-ML-Name" and "Reply-To" fields in the
+original message, Reply-To: field in the original is copied to To:
+field.)
+
+@node Thread Format, User-Agent Header, Draft for Reply, Advanced Settings
+@subsection Appearance of Threads
+
+@example
+  389  09/18(Fri)01:07 [ Teranishi         ] wl-0.6.3
+  390  09/18(Fri)07:25 +-[ Tsumura-san       ]
+  391  09/18(Fri)19:24 +-[ Murata-san        ]
+  392  09/20(Sun)21:49 +-[ Okunishi-san      ]
+  396  09/20(Sun)22:11 | +-[ Tsumura-san       ]
+  398  09/21(Mon)00:17 |   +-[ Tsumura-san       ]
+  408  09/21(Mon)22:37 |     +-[ Okunishi-san      ]
+  411  09/22(Tue)01:34 |       +-[ Tsumura-san       ]
+  412  09/22(Tue)09:28 |       +-[ Teranishi         ]
+  415  09/22(Tue)11:52 |         +-[ Tsumura-san       ]
+  416  09/22(Tue)12:38 |           +-[ Teranishi         ]
+  395  09/20(Sun)21:49 +-[ Okunishi-san      ]
+  397  09/21(Mon)00:15 +-[ Okunishi-san      ]
+@end example
+
+Settings to make appearance of threads like shown above:
+
+@lisp
+(setq wl-thread-indent-level 2)
+(setq wl-thread-have-younger-brother-str "+")
+(setq wl-thread-youngest-child-str       "+")
+(setq wl-thread-vertical-str             "|")
+(setq wl-thread-horizontal-str           "-")
+(setq wl-thread-space-str                " ")
+@end lisp
+
+If you do not want to see branches, do the following:
+
+@lisp
+(setq wl-thread-indent-level 2)
+(setq wl-thread-have-younger-brother-str " ")
+(setq wl-thread-youngest-child-str       " ")
+(setq wl-thread-vertical-str             " ")
+(setq wl-thread-horizontal-str           " ")
+(setq wl-thread-space-str                " ")
+@end lisp
+
+
+@node User-Agent Header,  , Thread Format, Advanced Settings
+@subsection User-Agent
+
+If you are eccentric enough to elaborate X-Mailer or User-Agent fields,
+define a function that inserts appropriate strings as you like, and set
+it to @code{wl-generate-mailer-string-func}.
+
+The following is an example.
+
+@lisp
+(setq wl-generate-mailer-string-func
+      (function
+       (lambda ()
+         (concat "X-Mailer: "
+                 (format "%s/%s (%s)" wl-appname wl-version wl-codename)))))
+@end lisp
+
+@node Customizable Variables,  , Advanced Settings, Customization
+@section Customizable Variables
+
+Customizable variables that have not been described yet:
+
+@table @code
+@item wl-default-folder
+@vindex wl-default-folder
+The initial setting is "%inbox".  This is the default value for moving to
+a folder and the like.
+
+@item wl-draft-folder
+@vindex wl-draft-folder
+The initial setting is "+draft".  It is the folder to which drafts are
+saved.  It must be a localdir folder.
+
+@item wl-trash-folder
+@vindex wl-trash-folder
+The initial setting is "+trash".  It is the wastebasket folder.
+If you changed this variable, you had better restart Wanderlust.
+
+@item wl-interactive-exit
+@vindex wl-interactive-exit
+The initial setting is t.
+If non-nil, you are asked for confirmation when Wanderlust terminates.
+
+@item wl-interactive-send
+@vindex wl-interactive-send
+The initial setting is nil.
+If non-nil, you are asked for confirmation when mail is sent.
+
+@item wl-folder-sync-range-alist
+@vindex wl-folder-sync-range-alist
+The initial setting is the list shown below:
+@example
+(("^&.*$" . "all")
+ ("^\\+draft$\\|^\\+queue$" . "all"))
+@end example
+This is an associative list of regular expressions of folder names and
+update range of the summary.
+Update range is one of the "all", "update", "rescan", "rescan-noscore", "first"
+ and "last". If a folder do not match, "update" is used.
+
+@item wl-ask-range
+@vindex wl-ask-range
+The initial setting is t.
+If nil, the value of @code{wl-folder-sync-range-alist} is used for
+updating the summary when you changed folders.
+
+@item wl-mime-charset
+@vindex wl-mime-charset
+The initial setting is 'x-ctext.
+This is the MIME charset for messages that are not MIME (e.g. without
+Content-Type). This value also used as default charset for summary.
+(If you want to share Summary on Nemacs and other Emacsen,
+set this value as 'iso-2022-jp.)
+
+@item wl-search-mime-charset
+@vindex wl-search-mime-charset
+The initial setting is 'iso-2022-jp.
+This is used as a MIME charset for searching.
+
+@item wl-highlight-folder-with-icon
+@vindex wl-highlight-folder-with-icon
+This is meaningful for XEmacs only.  The initial setting depends on
+XEmacs (t for XEmacs with icons).
+
+@item wl-strict-diff-folders
+@vindex wl-strict-diff-folders
+This is a list of regular expressions of folders.
+Unread messages are checked, for example when you press @kbd{s} in
+the folder mode, usually in a brief way (rapidly processed but not
+accurate).
+The folders matching this variable are seriously checked.
+You may want to set this variable so as to match conditional filter
+folders for IMAP4 folders.
+The initial setting is nil.
+
+@item wl-folder-use-server-diff
+@vindex wl-folder-use-server-diff
+When unread messages are checked, for example when you press @kbd{s} in
+the folder mode, usually (the number of messages on the server) - (the
+number of local messages) will be the number of unread messages.
+However, if this variable is non-nil, the number of unread messages on
+the server is checked.  This affects IMAP4 folders only, but IMAP4
+folders in mail boxes matching
+@code{elmo-imap4-disuse-server-flag-mailbox-regexp} are not checked for
+the number of unread messages on the server, even if they matches this
+variable.  The initial setting is t.
+
+@item wl-auto-check-folder-name
+@vindex wl-auto-check-folder-name
+The initial setting is nil.
+If non-nil, the folder with the name of the value is checked for unread
+messages at the start.
+If it is 'none, no folders are checked.
+If it is a list, all folders in the list are checked at the start.
+
+@item wl-auto-uncheck-folder-list
+@vindex wl-auto-uncheck-folder-list
+The initial setting is '("\\$.*").
+Folders with the name matching this variable are not checked for unread
+messages at the start, even if they are included in the groups in
+@code{wl-auto-check-folder-name}.
+
+@item wl-auto-check-folder-list
+@vindex wl-auto-check-folder-list
+The initial setting is nil.
+Folders with the name matching this variable are always checked for
+unread messages at the start, if they are included in the groups in
+@code{wl-auto-check-folder-name}.
+This takes precedence over @code{wl-auto-uncheck-folder-list}.
+
+@item wl-no-save-folder-list
+@vindex wl-no-save-folder-list
+The initial setting is '("^/.*$").
+This is a list of regular expressions of folders not to be saved.
+
+@item wl-save-folder-list
+@vindex wl-save-folder-list
+The initial setting is nil.
+This is a list of regular expressions of folders to be saved.
+This takes precedence over @code{wl-no-save-folder-list}.
+
+@item wl-folder-mime-charset-alist
+@vindex wl-folder-mime-charset-alist
+The initial setting is the list shown below:
+
+@lisp
+'(("^-alt\\.chinese" . big5)
+  ("^-relcom\\." . koi8-r)
+  ("^-tw\\." . big5)
+  ("^-han\\." . euc-kr)
+  )
+@end lisp
+
+This is an associative list of regular expressions of folder names and
+MIME charsets.
+If a folder do not match, @code{wl-mime-charset} is used.
+
+@item wl-folder-init-load-access-folders
+@vindex wl-folder-init-load-access-folders
+The initial setting is nil.
+This is a list of access groups to be loaded specifically at the start.
+If it is  nil, @code{wl-folder-init-no-load-access-folders} is referred.
+
+@item wl-folder-init-no-load-access-folders
+@vindex wl-folder-init-no-load-access-folders
+The initial setting is nil.
+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
+The initial setting is '(("^-" . remove)).
+This list determines disposition of messages with delete marks.
+Each item in the list is a folder and destination; you can specify any
+one of the following in the place of destination:
+
+@example
+'remove or 'null : deletes the messages instantly.
+string           : moves the messages to the specific folder.
+'trash or others : moves the messages to `wl-trash-folder'.
+@end example
+
+@item wl-refile-policy-alist
+@vindex wl-refile-policy-alist
+The initial setting is '(("^[-=]" . copy) (".*" . move)).
+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 copy or move.
+
+@item wl-x-face-file
+@vindex wl-x-face-file
+The initial setting is "~/.xface".
+The name of the file that contains encoded X-Face strings.
+@xref{x-face-mule}.
+
+@item wl-demo-display-logo
+@vindex wl-demo-display-logo
+If non-nil, bitmap image is shown on the opening demo.
+
+@item elmo-use-database
+@vindex  elmo-use-database
+This is meaningful for XEmacs only.  The initial setting depends on
+XEmacs (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 "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).
+This is period in seconds during which results of @samp{list} and
+@samp{list active} in NNTP are cached.  If it is nil, they are not
+cached.
+
+@item elmo-nntp-max-number-precedes-list-active
+@vindex elmo-nntp-max-number-precedes-list-active
+The initial setting is nil.
+If non-nil, the number of article obtained by @samp{list active} in NNTP
+are used as the maximum article number of the folder.
+Set this to t if you are using for example INN 2.3 as an NNTP server,
+and if the number of read messages is not correct.
+
+@item elmo-nntp-default-use-listgroup
+@vindex elmo-nntp-default-use-listgroup
+The initial setting is t.
+If non-nil, @samp{listgroup} is used for checking the total number of
+articles.
+If it is nil, @samp{group} is used.  In the latter case, the processing
+will be a little faster at the sacrifice of accuracy.
+
+@item elmo-pop3-send-command-synchronously
+@vindex elmo-pop3-send-command-synchronously
+The initial setting is nil.
+If non-nil, POP3 commands are issued synchronously.  Some implementation
+of POP3 server fails to get summary information without this setting.
+You may have to set this variable to t, if the process hangs while
+looking up POP3.
+
+@item elmo-dop-flush-confirm
+@vindex elmo-dop-flush-confirm
+The initial setting is t.
+If non-nil, you are asked for confirmation if accumulated off-line
+operations are executed.
+@end table
+
+
+@c
+@c  Mailing List
+@c
+@node Mailing List, Addition, Customization, Top
+@chapter Wanderlust Mailing List
+
+@display
+Wanderlust Mailing List @t{<wl@@lists.airs.net>}
+@end display
+
+Topics related to Wanderlust are discussed in the mailing list.
+The latest version is also announced there (in Japanese, sorry).
+
+A guide can be obtained automatically by sending mail to
+@t{wl-ctl@@lists.airs.net} with the body
+
+@example
+# guide
+@end example
+Please send bug reports or patches to the mailing list.
+You can post to the mailing list even though you are not a member of it.
+
+I would like to express my thanks to the members of the mailing list for 
+valuable advice and many pieces of code they contributed.
+
+
+@c
+@c  Addition
+@c
+@node Addition, Index, Mailing List, Top
+@chapter Additional Information
+
+@section Brief History
+
+@example
+1998  3/05    Tried to make a prototype that displays MH messages in threads.
+      3/10    Made a msgdb mechanism by elisp.
+      3/26    IMAP and NNTP can be displayed in threads.
+      4/13    Began to assemble thread display modules as elmo.
+      5/01    Finished 0.1.0, initial version with many defects.
+      6/12    I made a slip of the tongue and said I was writing elisp
+              mailer supporting IMAP
+      6/16    0.1.3 was announced at tm-ja, elisp ML.
+      6/22    Thanks to Kitame-san, the mailing list started at northeye.org.
+      7/01    Support for mm-backend (0.3.0).
+      8/25    multi folder added (0.5.0).
+      8/28    filter folder added (0.5.1).
+      9/10    You can open/close threads (0.6.0).
+      9/11    fldmgr by Murata-san made editing folders easy.
+      9/18    lha folders added by Okunishi-san (0.6.3).
+      9/24    Display of branches of threads (0.6.5).
+      9/28    Compression folder supporting multiple archivers by Okunishi-san.
+     10/28    Off-line operations (0.7.4).
+     12/09    Becomes beta version.
+     12/21    wl-expire by Murata-san.
+1999  2/03    auto-refile by Tsumura-san.
+      4/28    wl-template by Murata-san.
+      5/18    Released 1.0.0 stable.
+      7/5     Scoring by Murata-san (2.1.0).
+@end example
+
+See @file{ChangeLog} for details.
+
+@section The Name
+
+According to a dictionary, Wanderlust has the meaning:
+
+@display
+wanderlust
+  n eager longing for or impulse towards travelling in distant lands
+  [Ger, fr wandern to wander + lust desire, pleasure]
+@end display
+
+@noindent
+but I had no profound intention.
+(if farfetched, IMAP @t{=>} you can read mail anywhere @t{=>} desire to
+wander ?)
+
+Elmo is the abbreviation of @samp{Elisp Library for Message
+Orchestration}.
+At first I meant the red puppet in the Sesame Street, but you may
+associate it with
+Wandering @t{=>} Drifting @t{=>} Guidepost @t{=>} St.@: Elmo's fire @t{=>} elmo.
+
+@section Code Names
+
+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.
+
+(@samp{http://www.summer.com.br/~pfilho/html/top40/index.html})
+
+
+@node Index,  , Addition, Top
+@unnumbered Index
+
+@menu
+* Concept Index::               Concept Index
+* Key Index::                   Key Index
+* Variable Index::              Variable Index
+* Function Index::              Function Index
+@end menu
+
+@node Concept Index, Key Index, Index, Index
+@unnumberedsec Concept Index
+@printindex cp
+
+@node Key Index, Variable Index, Concept Index, Index
+@unnumberedsec Key Index
+@printindex ky
+
+@node Variable Index, Function Index, Key Index, Index
+@unnumberedsec Variable Index
+@printindex vr
+
+@node Function Index,  , Variable Index, Index
+@unnumberedsec Function Index
+@printindex fn
+
+@summarycontents
+@contents
+@bye
diff --git a/elmo/ChangeLog b/elmo/ChangeLog
new file mode 100644 (file)
index 0000000..11ba6ae
--- /dev/null
@@ -0,0 +1,14 @@
+2000-04-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-pop3.el (elmo-pop3-open-connection): Enclose with
+       as-binary-process.
+
+2000-03-29  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * elmo-util.el (elmo-display-progress): Fixed.
+
+2000-03-27  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * elmo-util.el (elmo-display-progress): New function.
+       All other related modules are changed.
+
diff --git a/elmo/elmo-archive.el b/elmo/elmo-archive.el
new file mode 100644 (file)
index 0000000..323d47b
--- /dev/null
@@ -0,0 +1,1054 @@
+;;; elmo-archive.el -- Archive folder of ELMO.
+
+;; Copyright 1998,1999,2000 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author:  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;; Keywords: mail, net news
+;; Created: Sep 13, 1998
+;; Revised: Dec 15, 1998
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+;; TODO:
+;; [\e$B%\%=\e(B] append-msgs() \e$B$,M_$7$$!J$1$I\e(B multi-refile \e$BIT2D!K!#\e(B
+;; Info-Zip \e$B@lMQ%(!<%8%'%s%H$rMQ$$$?F|K\8l8!:w!J\e(BOS/2 \e$B@lMQ!K!#\e(B
+
+;;; Code:
+;; 
+
+(require 'elmo-msgdb)
+(require 'emu)
+(require 'std11)
+(eval-when-compile (require 'elmo-localdir))
+
+;;; Const
+(defconst elmo-archive-version "v0.18 [990729/alpha]")
+
+;;; User vars.
+(defvar elmo-archive-lha-dos-compatible
+  (memq system-type '(OS/2 emx windows-nt))
+  "*If non-nil, regard your LHA as compatible to DOS version.")
+
+(defvar elmo-archive-use-izip-agent (memq system-type '(OS/2 emx))
+  "*If non-nil, use the special agent in fetching headers.")
+
+(defvar elmo-archive-folder-path "~/Mail"
+  "*Base directory for archive folders.")
+
+(defvar elmo-archive-basename "elmo-archive"
+  "*Common basename of archive folder file, w/o suffix.")
+
+(defvar elmo-archive-cmdstr-max-length 8000 ; SASAKI Osamu's suggestion
+  "*Command line string limitation under OS/2, exactly 8190 bytes.")
+
+(defvar elmo-archive-fetch-headers-volume 50
+  "*Quantity of article headers to fetch per once.")
+
+(defvar elmo-archive-dummy-file ".elmo-archive"
+  "*Name of dummy file that will be appended when the folder is null.")
+
+(defvar elmo-archive-check-existance-strict t
+  "*Check existance of archive contents if non-nil.")
+
+(defvar elmo-archive-load-hook nil
+  "*Hook called after loading elmo-archive.el.")
+
+(defvar elmo-archive-treat-file nil
+  "*Treat archive folder as a file if non-nil.")
+
+;;; MMDF parser -- info-zip agent w/ REXX
+(defvar elmo-mmdf-delimiter "^\01\01\01\01$"
+  "*Regular expression of MMDF delimiter.")
+
+(defvar elmo-unixmail-delimiter "^From \\([^ \t]+\\) \\(.+\\)"
+  "*Regular expression of UNIX Mail delimiter.")
+
+(defvar elmo-archive-header-regexp "^[ \t]*[-=][-=][-=][-=]"
+  "*Common regexp of the delimiter in listing archive.") ;; marche
+
+(defvar elmo-archive-file-regexp-alist
+  (append
+   (if elmo-archive-lha-dos-compatible
+       '((lha . "^%s\\([0-9]+\\)$"))           ; OS/2,DOS w/  "-x"
+     '((lha . "^.*[ \t]%s\\([0-9]+\\)$")))
+   '((zip . "^.*[ \t]%s\\([0-9]+\\)$")
+     (zoo . "^.*[ \t]%s\\([0-9]+\\)$")
+     (tar . "^%s\\([0-9]+\\)$") ; ok
+     (tgz . "^%s\\([0-9]+\\)$") ; ok
+     (rar . "^[ \t]%s\\([0-9]+\\)$"))))
+
+(defvar elmo-archive-suffix-alist
+   '((lha . ".lzh")  ; default
+;    (lha . ".lzs")
+     (zip . ".zip")
+     (zoo . ".zoo")
+;    (arc . ".arc")
+;    (arj . ".arj")
+     (rar . ".rar")
+     (tar . ".tar")
+     (tgz . ".tar.gz")))
+
+;;; lha
+(defvar elmo-archive-lha-method-alist
+  (if elmo-archive-lha-dos-compatible
+      ;; OS/2
+      '((cp  . ("lha" "u" "-x"))
+       (mv  . ("lha" "m" "-x"))
+       (rm  . ("lha" "d"))
+       (ls  . ("lha" "l" "-x"))
+       (cat . ("lha" "p" "-n"))
+       (ext . ("lha" "x")) ; "-x"
+       )
+    ;; some UN|X
+    '((cp  . ("lha" "u"))
+      (mv  . ("lha" "m"))
+      (rm  . ("lha" "d"))
+      (ls  . ("lha" "l"))
+      (cat . ("lha" "pq"))
+      (ext . ("lha" "x")))))
+
+;;; info-zip/unzip
+(defvar elmo-archive-zip-method-alist
+  '((cp       . ("zip" "-9q"))
+    (cp-pipe  . ("zip" "-9q@"))
+    (mv       . ("zip" "-mDq9"))
+    (mv-pipe  . ("zip" "-mDq9@"))
+    (rm       . ("zip" "-dq"))
+    (rm-pipe  . ("zip" "-dq@"))
+    (ls       . ("unzip" "-lq"))
+    (cat      . ("unzip" "-pq"))
+    (ext      . ("unzip"))
+    (cat-headers . ("izwlagent" "--cat"))))
+
+;;; zoo
+(defvar elmo-archive-zoo-method-alist
+  '((cp       . ("zoo" "aq"))
+    (cp-pipe  . ("zoo" "aqI"))
+    (mv       . ("zoo" "aMq"))
+    (mv-pipe  . ("zoo" "aMqI"))
+    (rm       . ("zoo" "Dq"))
+    (ls       . ("zoo" "l"))  ; normal
+    (cat      . ("zoo" "xpq"))
+    (ext      . ("zoo" "xq"))))
+
+;;; rar
+(defvar elmo-archive-rar-method-alist
+  '((cp       . ("rar" "u" "-m5"))
+    (mv       . ("rar" "m" "-m5"))
+    (rm       . ("rar" "d"))
+    (ls       . ("rar" "v"))
+    (cat      . ("rar" "p" "-inul"))
+    (ext      . ("rar" "x"))))
+
+;;; GNU tar (*.tar)
+(defvar elmo-archive-tar-method-alist
+  (if elmo-archive-lha-dos-compatible
+      '((ls   . ("gtar" "-tf"))
+       (cat  . ("gtar" "--posix Oxf"))
+       (ext  . ("gtar" "-xf"))
+       ;;(rm   . ("gtar" "--posix" "--delete" "-f")) ;; well not work
+       )
+  '((ls    . ("gtar" "-tf"))
+    (cat   . ("gtar" "-Oxf"))
+    (ext   . ("gtar" "-xf"))
+    ;;(rm    . ("gtar" "--delete" "-f")) ;; well not work
+    )))
+
+;;; GNU tar (*.tar.gz, *.tar.Z, *.tar.bz2)
+(defvar elmo-archive-tgz-method-alist
+  '((ls         . ("gtar" "-ztf"))
+    (cat        . ("gtar" "-Ozxf"))
+    (create     . ("gtar" "-zcf"))
+    ;;(rm       . elmo-archive-tgz-rm-func)
+    (cp         . elmo-archive-tgz-cp-func)
+    (mv         . elmo-archive-tgz-mv-func)
+    (ext        . ("gtar" "-zxf"))
+    ;; tgz special method
+    (decompress . ("gzip" "-d"))
+    (compress   . ("gzip"))
+    (append     . ("gtar" "-uf"))
+    ;;(delete     . ("gtar" "--delete" "-f")) ;; well not work
+    ))
+
+(defvar elmo-archive-method-list
+  '(elmo-archive-lha-method-alist
+    elmo-archive-zip-method-alist
+    elmo-archive-zoo-method-alist
+;   elmo-archive-tar-method-alist
+    elmo-archive-tgz-method-alist
+;   elmo-archive-arc-method-alist
+;   elmo-archive-arj-method-alist
+    elmo-archive-rar-method-alist))
+
+;;; Internal vars.
+(defvar elmo-archive-method-alist nil)
+(defvar elmo-archive-suffixes nil)
+
+
+;;; Macro
+(defmacro elmo-archive-get-method (type action)
+  (` (cdr (assq (, action) (cdr (assq (, type)
+                                     elmo-archive-method-alist))))))
+
+(defmacro elmo-archive-get-suffix (type)
+  (` (cdr (assq (, type)
+               elmo-archive-suffix-alist))))
+
+(defmacro elmo-archive-get-regexp (type)
+  (` (cdr (assq (, type)
+               elmo-archive-file-regexp-alist))))
+
+(defsubst elmo-archive-call-process (prog args &optional output)
+  (= (apply 'call-process prog nil output nil args) 0))
+
+(defsubst elmo-archive-call-method (method args &optional output)
+  (cond
+   ((functionp method)
+    (funcall method args output))
+   (t
+    (elmo-archive-call-process
+     (car method) (append (cdr method) args) output))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Scan Folder
+
+(defsubst elmo-archive-list-folder-subr (file type prefix &optional nonsort)
+  "*Returns list of number-file(int, not string) in archive FILE.
+TYPE specifies the archiver's symbol."
+  (let* ((method (elmo-archive-get-method type 'ls))
+        (args (list file))
+        (file-regexp (format (elmo-archive-get-regexp type)
+                             (elmo-concat-path (regexp-quote prefix) "")))
+        buf file-list header-end)
+    (when (file-exists-p file)
+      (save-excursion
+       (set-buffer (setq buf (get-buffer-create " *ELMO ARCHIVE ls*")))
+       (unless (elmo-archive-call-method method args t)
+         (error "%s exited abnormally!" method))
+       (goto-char (point-min))
+       (when (re-search-forward elmo-archive-header-regexp nil t)
+         (forward-line 1)
+         (setq header-end (point))
+         (when (re-search-forward elmo-archive-header-regexp nil t)
+             (beginning-of-line)
+             (narrow-to-region header-end (point))
+             (goto-char (point-min))))
+       (while (and (re-search-forward file-regexp nil t)
+                   (not (eobp)))  ; for GNU tar 981010
+         (setq file-list (nconc file-list (list (string-to-int
+                                                 (match-string 1))))))
+       (kill-buffer buf)))
+    (if nonsort
+       (cons (or (elmo-max-of-list file-list) 0) (length file-list))
+      (sort file-list '<))))
+
+(defun elmo-archive-list-folder (spec)
+  (let* ((type (nth 2 spec))
+        (prefix (nth 3 spec))
+        (arc (elmo-archive-get-archive-name (nth 1 spec) type spec)))
+    (elmo-archive-list-folder-subr arc type prefix)))
+
+(defun elmo-archive-max-of-folder (spec)
+  (let* ((type (nth 2 spec))
+        (prefix (nth 3 spec))
+         (arc (elmo-archive-get-archive-name (nth 1 spec) type spec)))
+    (elmo-archive-list-folder-subr arc type prefix t)))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Folder related functions
+
+(defsubst elmo-archive-get-archive-directory (name)
+  ;; allow fullpath. return format is "/foo/bar/".
+  (if (file-name-absolute-p name)
+      (if (find-file-name-handler name 'copy-file)
+         name
+       (expand-file-name name))
+    (expand-file-name name elmo-archive-folder-path)))
+
+(defun elmo-archive-get-archive-name (folder type &optional spec)
+  (let ((dir (elmo-archive-get-archive-directory folder))
+        (suffix (elmo-archive-get-suffix type))
+       filename dbdir)
+    (if elmo-archive-treat-file
+       (if (string-match (concat (regexp-quote suffix) "$") folder)
+           (expand-file-name
+            folder
+            elmo-archive-folder-path)
+         (expand-file-name
+          (concat folder suffix)
+          elmo-archive-folder-path))
+      (if (and (not (find-file-name-handler dir 'copy-file)) ; dir is local.
+              (or (not (file-exists-p dir))
+                  (file-directory-p dir)))
+         (expand-file-name
+          (concat elmo-archive-basename suffix)
+          dir)
+       ;; for full-path specification.
+       (if (and (find-file-name-handler dir 'copy-file) ; ange-ftp, efs
+                spec)
+           (progn
+             (setq filename (expand-file-name 
+                             (concat elmo-archive-basename suffix)
+                             (setq dbdir (elmo-msgdb-expand-path nil spec))))
+             (if (file-directory-p dbdir)
+                 (); ok.
+               (if (file-exists-p dbdir)
+                   (error "File %s already exists" dbdir)
+                 (elmo-make-directory dbdir)))
+             (if (not (file-exists-p filename))
+                 (copy-file
+                  (if (file-directory-p dir)
+                      (expand-file-name
+                       (concat elmo-archive-basename suffix)
+                       dir)
+                    dir)
+                  filename))
+             filename)
+         dir)))))
+
+(defun elmo-archive-folder-exists-p (spec)
+  (file-exists-p
+   (elmo-archive-get-archive-name (nth 1 spec) (nth 2 spec) spec)))
+
+(defun elmo-archive-folder-creatable-p (spec)
+  t)
+
+(defun elmo-archive-create-folder (spec)
+  (let* ((dir (directory-file-name ;; remove tail slash.
+              (elmo-archive-get-archive-directory (nth 1 spec))))
+         (type (nth 2 spec))
+         (arc (elmo-archive-get-archive-name (nth 1 spec) type)))
+    (if elmo-archive-treat-file
+       (setq dir (directory-file-name (file-name-directory dir))))
+    (cond ((and (file-exists-p dir)
+               (not (file-directory-p dir)))
+           ;; file exists
+           (error "Create folder failed; File \"%s\" exists" dir))
+          ((file-directory-p dir)
+           (if (file-exists-p arc)
+               t  ; return value
+            (elmo-archive-create-file arc type spec)))
+          (t
+          (elmo-make-directory dir)
+          (elmo-archive-create-file arc type spec)
+          t))))
+
+(defun elmo-archive-create-file (archive type spec)
+  (save-excursion
+    (let* ((tmp-dir (directory-file-name
+                    (elmo-msgdb-expand-path nil spec)))
+           (dummy elmo-archive-dummy-file)
+           (method (or (elmo-archive-get-method type 'create)
+                      (elmo-archive-get-method type 'mv)))
+          (args (list archive dummy)))
+      (when (null method)
+       (ding)
+       (error "WARNING: read-only mode: %s (method undefined)" type))
+      (cond
+       ((file-directory-p tmp-dir)
+       ()) ;nop
+       ((file-exists-p tmp-dir)
+       ;; file exists
+       (error "Create directory failed; File \"%s\" exists" tmp-dir))
+       (t
+       (elmo-make-directory tmp-dir)))
+      (elmo-bind-directory
+       tmp-dir
+       (write-region (point) (point) dummy nil 'no-msg)
+       (prog1
+          (elmo-archive-call-method method args)
+        (if (file-exists-p dummy)
+            (delete-file dummy)))
+       ))))
+
+(defun elmo-archive-delete-folder (spec)
+  (let* ((arc (elmo-archive-get-archive-name (nth 1 spec) (nth 2 spec))))
+    (if (not (file-exists-p arc))
+       (error "no such file: %s" arc)
+      (delete-file arc)
+      t)))
+
+(defun elmo-archive-rename-folder (old-spec new-spec)
+  (let* ((old-arc (elmo-archive-get-archive-name
+                  (nth 1 old-spec) (nth 2 old-spec)))
+        (new-arc (elmo-archive-get-archive-name
+                  (nth 1 new-spec) (nth 2 new-spec))))
+    (unless (and (eq (nth 2 old-spec) (nth 2 new-spec))
+                (equal (nth 3 old-spec) (nth 3 new-spec)))
+      (error "not same archive type and prefix"))
+    (if (not (file-exists-p old-arc))
+       (error "no such file: %s" old-arc)
+      (if (file-exists-p new-arc)
+         (error "already exists: %s" new-arc)
+       (rename-file old-arc new-arc)
+       t))))
+
+(defun elmo-archive-list-folders (spec &optional hierarchy)
+  (let ((folder (concat "$" (nth 1 spec)))
+       (elmo-localdir-folder-path elmo-archive-folder-path))
+    (if elmo-archive-treat-file
+       (let* ((path (elmo-localdir-get-folder-directory spec))
+              (base-folder (or (file-name-directory (nth 1 spec)) ""))
+              (suffix (nth 2 spec))
+              (prefix (if (string= (nth 3 spec) "")
+                          "" (concat ";" (nth 3 spec))))
+              (dir (if (file-directory-p path)
+                       path (file-name-directory path)))
+              (name (if (file-directory-p path)
+                        "" (file-name-nondirectory path)))
+              (flist (and (file-directory-p dir)
+                          (directory-files dir nil name nil)))
+              (regexp (format "^\\(.*\\)\\(%s\\)$"
+                              (mapconcat
+                               '(lambda (x) (regexp-quote (cdr x)))
+                               elmo-archive-suffix-alist
+                               "\\|"))))
+         (delq
+          nil
+          (mapcar
+           '(lambda (x)
+              (when (and (string-match regexp x)
+                         (eq suffix
+                             (car
+                              (rassoc (elmo-match-string 2 x)
+                                      elmo-archive-suffix-alist))))
+                (format "$%s;%s%s"
+                        (elmo-concat-path base-folder (elmo-match-string 1 x))
+                        suffix prefix)
+                ))
+           flist)))
+      (elmo-localdir-list-folders-subr folder hierarchy))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Article file related functions
+;;; read(extract) / append(move) / delete(delete) / query(list)
+
+(defun elmo-archive-read-msg (spec number outbuf)
+  (save-excursion
+    (let* ((type (nth 2 spec))
+          (arc (elmo-archive-get-archive-name (nth 1 spec) type spec))
+          (prefix (nth 3 spec))
+          (method (elmo-archive-get-method type 'cat))
+          (args (list arc (elmo-concat-path 
+                           prefix (int-to-string number)))))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p arc)
+       (and
+        (as-binary-process
+         (elmo-archive-call-method method args t))
+        (elmo-delete-cr-get-content-type))))))
+
+(defun elmo-archive-append-msg (spec string &optional msg no-see) ;;; verrrrrry slow!!
+  (let* ((type (nth 2 spec))
+        (prefix (nth 3 spec))
+        (arc (elmo-archive-get-archive-name (nth 1 spec) type))
+        (method (elmo-archive-get-method type 'mv))
+        (tmp-buffer (get-buffer-create " *ELMO ARCHIVE mv*"))
+        (next-num (or msg
+                      (1+ (if (file-exists-p arc)
+                              (car (elmo-archive-max-of-folder spec)) 0))))
+        (tmp-dir (elmo-msgdb-expand-path nil spec))
+        newfile)
+    (when (null method)
+      (ding)
+      (error "WARNING: read-only mode: %s (method undefined)" type))
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (let ((tmp-dir (expand-file-name prefix tmp-dir)))
+       (when (not (file-directory-p tmp-dir))
+         (elmo-make-directory (directory-file-name tmp-dir))))
+      (setq newfile (elmo-concat-path
+                    prefix
+                    (int-to-string next-num)))
+      (unwind-protect
+         (elmo-bind-directory
+          tmp-dir
+          (if (and (or (functionp method) (car method))
+                   (file-writable-p newfile))
+              (progn
+                (insert string)
+                (as-binary-output-file
+                 (write-region (point-min) (point-max) newfile nil 'no-msg))
+                (elmo-archive-call-method method (list arc newfile)))
+            nil))
+       (kill-buffer tmp-buffer)))))
+
+;;; (localdir, maildir, localnews, archive) -> archive
+(defun elmo-archive-copy-msgs (dst-spec msgs src-spec
+                                       &optional loc-alist same-number)
+  (let* ((dst-type (nth 2 dst-spec))
+        (arc (elmo-archive-get-archive-name (nth 1 dst-spec) dst-type))
+        (prefix (nth 3 dst-spec))
+        (p-method (elmo-archive-get-method dst-type 'mv-pipe))
+        (n-method (elmo-archive-get-method dst-type 'mv))
+        (new (unless same-number
+               (1+ (car (elmo-archive-max-of-folder dst-spec)))))
+        (src-dir (elmo-localdir-get-folder-directory src-spec))
+        (tmp-dir
+         (file-name-as-directory (elmo-msgdb-expand-path nil dst-spec)))
+        (do-link t)
+        src tmp newfile tmp-msgs)
+    (when (not (elmo-archive-folder-exists-p dst-spec))
+      (elmo-archive-create-folder dst-spec))
+    (when (null (or p-method n-method))
+      (ding)
+      (error "WARNING: read-only mode: %s (method undefined)" dst-type))
+    (when (and same-number
+              (not (eq (car src-spec) 'maildir))
+              (string-match (concat prefix "$") src-dir)
+              (or
+               (elmo-archive-get-method dst-type 'cp-pipe)
+               (elmo-archive-get-method dst-type 'cp)))
+      (setq tmp-dir (substring src-dir 0 (match-beginning 0)))
+      (setq p-method (elmo-archive-get-method dst-type 'cp-pipe)
+           n-method (elmo-archive-get-method dst-type 'cp))
+      (setq tmp-msgs (mapcar '(lambda (x) 
+                               (elmo-concat-path prefix (int-to-string x)))
+                            msgs))
+      (setq do-link nil))
+    (when do-link
+      (let ((tmp-dir (expand-file-name prefix tmp-dir)))
+       (when (not (file-directory-p tmp-dir))
+         (elmo-make-directory (directory-file-name tmp-dir))))
+      (while msgs
+       (setq newfile (elmo-concat-path prefix (int-to-string
+                                               (if same-number
+                                                   (car msgs)
+                                                 new))))
+       (setq tmp-msgs (nconc tmp-msgs (list newfile)))
+       (elmo-copy-file
+        ;; src file
+        (elmo-call-func src-spec "get-msg-filename" (car msgs) loc-alist)
+        ;; tmp file
+        (expand-file-name newfile tmp-dir))
+       (setq msgs (cdr msgs))
+       (unless same-number (setq new (1+ new)))))
+    (save-excursion
+      (elmo-bind-directory
+       tmp-dir
+       (cond
+       ((functionp n-method)
+        (funcall n-method (cons arc tmp-msgs)))
+       (p-method
+        (let ((p-prog (car p-method))
+              (p-prog-arg (cdr p-method)))
+          (elmo-archive-exec-msgs-subr1
+           p-prog (append p-prog-arg (list arc)) tmp-msgs)))
+       (t
+        (let ((n-prog (car n-method))
+              (n-prog-arg (cdr n-method)))
+          (elmo-archive-exec-msgs-subr2
+           n-prog (append n-prog-arg (list arc)) tmp-msgs (length arc)))))))))
+
+;;; archive -> (localdir, localnews, archive)
+(defun elmo-archive-copy-msgs-froms (dst-spec msgs src-spec
+                                             &optional loc-alist same-number)
+  (let* ((src-type (nth 2 src-spec))
+        (arc (elmo-archive-get-archive-name (nth 1 src-spec) src-type))
+        (prefix (nth 3 src-spec))
+        (p-method (elmo-archive-get-method src-type 'ext-pipe))
+        (n-method (elmo-archive-get-method src-type 'ext))
+        (tmp-dir
+         (file-name-as-directory (elmo-msgdb-expand-path nil src-spec)))
+        (tmp-msgs (mapcar '(lambda (x) (elmo-concat-path
+                                        prefix
+                                        (int-to-string x)))
+                          msgs))
+        result)
+    (unwind-protect
+       (setq result
+             (and
+              ;; extract messages
+              (save-excursion
+                (elmo-bind-directory
+                 tmp-dir
+                 (cond
+                  ((functionp n-method)
+                   (funcall n-method (cons arc tmp-msgs)))
+                  (p-method
+                   (let ((p-prog (car p-method))
+                         (p-prog-arg (cdr p-method)))
+                     (elmo-archive-exec-msgs-subr1
+                      p-prog (append p-prog-arg (list arc)) tmp-msgs)))
+                  (t
+                   (let ((n-prog (car n-method))
+                         (n-prog-arg (cdr n-method)))
+                     (elmo-archive-exec-msgs-subr2
+                      n-prog (append n-prog-arg (list arc)) tmp-msgs (length arc)))))))
+              ;; call elmo-*-copy-msgs of destination folder
+              (elmo-call-func dst-spec "copy-msgs"
+                              msgs src-spec loc-alist same-number)))
+      ;; clean up tmp-dir
+      (elmo-bind-directory
+       tmp-dir
+       (while tmp-msgs
+        (if (file-exists-p (car tmp-msgs))
+            (delete-file (car tmp-msgs)))
+        (setq tmp-msgs (cdr tmp-msgs))))
+      result)))
+
+(defun elmo-archive-delete-msgs (spec msgs)
+  (save-excursion
+    (let* ((type (nth 2 spec))
+          (prefix (nth 3 spec))
+          (arc (elmo-archive-get-archive-name (nth 1 spec) type))
+          (p-method (elmo-archive-get-method type 'rm-pipe))
+          (n-method (elmo-archive-get-method type 'rm))
+          (msgs (mapcar '(lambda (x) (elmo-concat-path
+                                      prefix
+                                      (int-to-string x)))
+                        msgs)))
+      (cond ((functionp n-method)
+            (funcall n-method (cons arc msgs)))
+            (p-method
+            (let ((p-prog (car p-method))
+                  (p-prog-arg (cdr p-method)))
+              (elmo-archive-exec-msgs-subr1
+               p-prog (append p-prog-arg (list arc)) msgs)))
+            (n-method
+            (let ((n-prog (car n-method))
+                  (n-prog-arg (cdr n-method)))
+              (elmo-archive-exec-msgs-subr2
+               n-prog (append n-prog-arg (list arc)) msgs (length arc))))
+           (t
+            (ding)
+            (error "WARNING: not delete: %s (method undefined)" type))) )))
+
+(defun elmo-archive-exec-msgs-subr1 (prog args msgs)
+  (let ((buf (get-buffer-create " *ELMO ARCHIVE exec*")))
+    (set-buffer buf)
+    (insert (mapconcat 'concat msgs "\n")) ;string
+    (unwind-protect
+       (= 0
+          (apply 'call-process-region (point-min) (point-max)
+                 prog nil nil nil args))
+      (kill-buffer buf))))
+
+(defun elmo-archive-exec-msgs-subr2 (prog args msgs arc-length)
+  (let ((max-len (- elmo-archive-cmdstr-max-length arc-length))
+       (n (length msgs))
+       rest i sum)
+    (setq rest msgs) ;string
+    (setq i 1)
+    (setq sum 0)
+    (catch 'done
+      (while (and rest (<= i n))
+       (mapcar '(lambda (x)
+                  (let* ((len (length x))
+                         (files (member x (reverse rest))))
+                    ;; total(previous) + current + white space
+                    (if (<= max-len (+ sum len 1))
+                        (progn
+                          (unless
+                              (elmo-archive-call-process
+                               prog (append args files))
+                            (throw 'done nil))
+                          (setq sum 0) ;; reset
+                          (setq rest (nthcdr i rest)))
+                      (setq sum (+ sum len 1)))
+                    (setq i (1+ i)))) msgs))
+      (throw 'done
+            (or (not rest)
+                (elmo-archive-call-process prog (append args rest))))
+      )))
+
+(defsubst elmo-archive-article-exists-p (arc msg type)
+  (if (not elmo-archive-check-existance-strict)
+      t  ; nop
+    (save-excursion ;; added 980915
+      (let* ((method (elmo-archive-get-method type 'ls))
+            (args (list arc msg))
+            (buf (get-buffer-create " *ELMO ARCHIVE query*"))
+            (error-msg "\\(no file\\|0 files\\)")
+            ret-val)
+       (set-buffer buf)
+       (erase-buffer)
+       (elmo-archive-call-method method args t)
+       ;; pointer: point-max
+       (setq ret-val (not (re-search-backward error-msg nil t)))
+       (kill-buffer buf)
+       ret-val))))
+
+(defun elmo-archive-tgz-common-func (args exec-type &optional copy)
+  (let* ((arc (car args))
+        (tmp-msgs (cdr args))
+        (decompress (elmo-archive-get-method 'tgz 'decompress))
+        (compress (elmo-archive-get-method 'tgz 'compress))
+        (exec (elmo-archive-get-method 'tgz exec-type))
+        (suffix (elmo-archive-get-suffix 'tgz))
+        (tar-suffix (elmo-archive-get-suffix 'tar))
+        arc-tar ret-val
+        )
+    (when (null (and decompress compress exec))
+      (ding)
+      (error "WARNING: special method undefined: %s of %s"
+            (or (if (null decompress) 'decompress)
+                (if (null compress) 'compress)
+                (if (null exec) exec-type))
+            'tgz))
+    (unless tar-suffix
+      (ding)
+      (error "WARNING: `tar' suffix undefined"))
+    (if (string-match (concat (regexp-quote suffix) "$") arc)
+       (setq arc-tar
+             (concat (substring arc 0 (match-beginning 0)) tar-suffix))
+      (error "%s: not match suffix [%s]" arc suffix))
+    (and
+     ;; decompress
+     (elmo-archive-call-process
+      (car decompress) (append (cdr decompress) (list arc)))
+     ;; append (or delete)
+     (elmo-archive-exec-msgs-subr2
+      (car exec) (append (cdr exec) (list arc-tar)) tmp-msgs (length arc-tar))
+     ;; compress
+     (setq ret-val
+          (elmo-archive-call-process
+           (car compress) (append (cdr compress) (list arc-tar)))))
+    ;; delete tmporary messages
+    (if (and (not copy)
+            (eq exec-type 'append))
+       (while tmp-msgs
+         (if (file-exists-p (car tmp-msgs))
+             (delete-file (car tmp-msgs)))
+         (setq tmp-msgs (cdr tmp-msgs))))
+    ret-val))
+
+(defun elmo-archive-tgz-cp-func (args &optional output)
+  (elmo-archive-tgz-common-func args 'append t))
+
+(defun elmo-archive-tgz-mv-func (args &optional output)
+  (elmo-archive-tgz-common-func args 'append))
+
+(defun elmo-archive-tgz-rm-func (args &optional output)
+  (elmo-archive-tgz-common-func args 'delete))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; MessageDB functions (from elmo-localdir.el)
+
+(defsubst elmo-archive-msgdb-create-entity-subr (number)
+  (let (header-end)
+    (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+    (goto-char (point-min))
+    (if (re-search-forward "\\(^--.*$\\)\\|\\(\n\n\\)" nil t)
+       (setq header-end (point))
+      (setq header-end (point-max)))
+    (narrow-to-region (point-min) header-end)
+    (elmo-msgdb-create-overview-from-buffer number)))
+
+(defsubst elmo-archive-msgdb-create-entity (method archive number type &optional prefix) ;; verrrry slow!!
+  (let* ((msg (elmo-concat-path prefix (int-to-string number)))
+        (arg-list (list archive msg)))
+    (when (elmo-archive-article-exists-p archive msg type)
+      ;; insert article.
+      (as-binary-process
+       (elmo-archive-call-method method arg-list t))
+      (elmo-archive-msgdb-create-entity-subr number))))
+
+(defun elmo-archive-msgdb-create-as-numlist (spec numlist new-mark
+                                                 already-mark seen-mark
+                                                 important-mark seen-list)
+  (when numlist
+    (save-excursion ;; 981005
+      (if (and elmo-archive-use-izip-agent
+              (elmo-archive-get-method (nth 2 spec) 'cat-headers))
+         (elmo-archive-msgdb-create-as-numlist-subr2
+           spec numlist new-mark already-mark seen-mark important-mark 
+          seen-list)
+       (elmo-archive-msgdb-create-as-numlist-subr1
+         spec numlist new-mark already-mark seen-mark important-mark
+        seen-list)))))
+
+(defalias 'elmo-archive-msgdb-create 'elmo-archive-msgdb-create-as-numlist)
+
+
+(defun elmo-archive-msgdb-create-as-numlist-subr1 (spec numlist new-mark
+                                                       already-mark seen-mark
+                                                       important-mark 
+                                                       seen-list)
+  (let* ((type (nth 2 spec))
+        (file (elmo-archive-get-archive-name (nth 1 spec) type spec))
+        (method (elmo-archive-get-method type 'cat))
+        (tmp-buf (get-buffer-create " *ELMO ARCHIVE msgdb*"))
+        overview number-alist mark-alist entity
+        i percent num message-id seen gmark)
+    (save-excursion
+      (set-buffer tmp-buf)
+      (setq num (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (erase-buffer)
+       (setq entity
+             (elmo-archive-msgdb-create-entity
+              method file (car numlist) type (nth 3 spec)))
+       (when entity
+         (setq overview
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add
+                number-alist
+                (elmo-msgdb-overview-entity-get-number entity)
+                (car entity)))
+         (setq message-id (car entity))
+         (setq seen (member message-id seen-list))
+         (if (setq gmark
+                   (or (elmo-msgdb-global-mark-get message-id)
+                       (if (elmo-cache-exists-p message-id) ; XXX
+                           (if seen
+                               nil
+                             already-mark)
+                         (if seen
+                             seen-mark
+                           new-mark))))
+             (setq mark-alist
+                   (elmo-msgdb-mark-append 
+                    mark-alist
+                    (elmo-msgdb-overview-entity-get-number entity)
+                    gmark))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) num))
+       (elmo-display-progress
+        'elmo-archive-msgdb-create-as-numlist-subr1 "Creating msgdb..."
+        percent)
+       (setq numlist (cdr numlist)))
+      (kill-buffer tmp-buf)
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist)) ))
+
+;;; info-zip agent
+(defun elmo-archive-msgdb-create-as-numlist-subr2 (spec numlist new-mark
+                                                       already-mark seen-mark
+                                                       important-mark
+                                                       seen-list)
+  (let* ((buf (get-buffer-create " *ELMO ARCHIVE headers*"))
+        (delim1 elmo-mmdf-delimiter)           ;; MMDF
+        (delim2 elmo-unixmail-delimiter)       ;; UNIX Mail
+        (type (nth 2 spec))
+        (prefix (nth 3 spec))
+        (method (elmo-archive-get-method type 'cat-headers))
+        (prog (car method))
+        (args (cdr method))
+        (arc (elmo-archive-get-archive-name (nth 1 spec) type))
+        n i percent num result overview number-alist mark-alist
+        msgs case-fold-search)
+    (set-buffer buf)
+    (setq num (length numlist))
+    (setq i 0)
+    (message "Creating msgdb...")
+    (while numlist
+      (setq n (min (1- elmo-archive-fetch-headers-volume)
+                  (1- (length numlist))))
+      (setq msgs (reverse (memq (nth n numlist) (reverse numlist))))
+      (setq numlist (nthcdr (1+ n) numlist))
+      (erase-buffer)
+      (insert
+       (mapconcat
+       'concat
+       (mapcar '(lambda (x) (elmo-concat-path prefix (int-to-string x))) msgs)
+       "\n"))
+      (message "Fetching headers...")
+      (as-binary-process (apply 'call-process-region
+                               (point-min) (point-max)
+                               prog t t nil (append args (list arc))))
+      (goto-char (point-min))
+      (cond
+       ((looking-at delim1)    ;; MMDF
+       (setq result (elmo-archive-parse-mmdf msgs
+                                             new-mark
+                                             already-mark seen-mark
+                                             seen-list))
+       (setq overview (append overview (nth 0 result)))
+       (setq number-alist (append number-alist (nth 1 result)))
+       (setq mark-alist (append mark-alist (nth 2 result))))
+;      ((looking-at delim2)    ;; UNIX MAIL
+;      (setq result (elmo-archive-parse-unixmail msgs))
+;      (setq overview (append overview (nth 0 result)))
+;      (setq number-alist (append number-alist (nth 1 result)))
+;      (setq mark-alist (append mark-alist (nth 2 result))))
+       (t                      ;; unknown format
+       (error "unknown format!")))
+      (setq i (+ n i))
+      (setq percent (/ (* i 100) num))
+      (elmo-display-progress
+       'elmo-archive-msgdb-create-as-numlist-subr2 "Creating msgdb..."
+       percent))
+    (kill-buffer buf)
+    (list overview number-alist mark-alist)) )
+
+(defun elmo-archive-parse-mmdf (msgs new-mark
+                                    already-mark 
+                                    seen-mark 
+                                    seen-list)
+  (let ((delim elmo-mmdf-delimiter)
+       number sp ep rest entity overview number-alist mark-alist ret-val
+       message-id seen gmark)
+    (goto-char (point-min))
+    (setq rest msgs)
+    (while (and rest (re-search-forward delim nil t)
+                (not (eobp)))
+      (setq number (car rest))
+      (setq sp (1+ (point)))
+      (setq ep (prog2 (re-search-forward delim)
+                  (1+ (- (point) (length delim)))))
+      (if (>= sp ep) ; no article!
+         ()  ; nop
+        (save-excursion
+          (narrow-to-region sp ep)
+          (setq entity (elmo-archive-msgdb-create-entity-subr number))
+         (setq overview
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add
+                number-alist
+                (elmo-msgdb-overview-entity-get-number entity)
+                (car entity)))
+         (setq message-id (car entity))
+         (setq seen (member message-id seen-list))
+         (if (setq gmark 
+                   (or (elmo-msgdb-global-mark-get message-id)
+                       (if (elmo-cache-exists-p message-id) ; XXX
+                           (if seen
+                               nil
+                             already-mark)
+                         (if seen
+                             seen-mark
+                           new-mark))))
+             (setq mark-alist
+                   (elmo-msgdb-mark-append 
+                    mark-alist
+                    (elmo-msgdb-overview-entity-get-number entity)
+                    gmark)))
+          (setq ret-val (append ret-val (list overview number-alist mark-alist)))
+         (widen)))
+      (forward-line 1)
+      (setq rest (cdr rest)))
+    ret-val))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Search functions
+
+(defsubst elmo-archive-field-condition-match (spec number condition prefix)
+  (save-excursion
+    (let* ((type (nth 2 spec))
+          (arc (elmo-archive-get-archive-name (nth 1 spec) type spec))
+          (method (elmo-archive-get-method type 'cat))
+          (args (list arc (elmo-concat-path prefix (int-to-string number)))))
+      (elmo-set-work-buf
+       (when (file-exists-p arc)
+        (as-binary-process
+         (elmo-archive-call-method method args t))
+        (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+        (decode-mime-charset-region (point-min)(point-max) elmo-mime-charset)
+        (elmo-buffer-field-condition-match condition))))))
+
+(defun elmo-archive-search (spec condition &optional from-msgs)
+  (let* (;;(args (elmo-string-to-list key))
+        ;; XXX: I don't know whether `elmo-archive-list-folder'
+        ;;      updates match-data.
+        ;; (msgs (or from-msgs (elmo-archive-list-folder spec)))
+        (msgs (or from-msgs (elmo-archive-list-folder spec)))
+        (num (length msgs))
+        (i 0)
+        (case-fold-search nil)
+        ret-val)
+    (while msgs
+      (if (elmo-archive-field-condition-match spec (car msgs)
+                                             condition
+                                             (nth 3 spec))
+         (setq ret-val (cons (car msgs) ret-val)))
+      (setq i (1+ i))
+      (elmo-display-progress
+       'elmo-archive-search "Searching..."
+       (/ (* i 100) num))
+      (setq msgs (cdr msgs)))
+    (nreverse ret-val)))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Misc functions
+
+(defun elmo-archive-check-validity (spec validity-file)
+  t) ; ok.
+
+(defun elmo-archive-sync-validity (spec validity-file)
+  t) ; ok.
+
+\f
+;;; method(alist)
+(if (null elmo-archive-method-alist)
+    (let ((mlist elmo-archive-method-list) ; from mew-highlight.el
+         method type str)
+      (while mlist
+       (setq method (car mlist))
+       (setq mlist (cdr mlist))
+       (setq str (symbol-name method))
+       (string-match "elmo-archive-\\([^-].*\\)-method-alist$" str)
+       (setq type (intern-soft
+                   (elmo-match-string 1 str)))
+       (setq elmo-archive-method-alist
+             (cons (cons type
+                         (symbol-value method))
+                   elmo-archive-method-alist)))))
+
+;;; valid suffix(list)
+(if (null elmo-archive-suffixes)
+    (let ((slist elmo-archive-suffix-alist)
+         tmp)
+      (while slist
+       (setq tmp (car slist))
+       (setq elmo-archive-suffixes
+             (nconc elmo-archive-suffixes (list (cdr tmp))))
+       (setq slist (cdr slist)))))
+
+(defun elmo-archive-use-cache-p (spec number)
+  elmo-archive-use-cache)
+
+(defun elmo-archive-local-file-p (spec number)
+  nil)
+
+(defun elmo-archive-get-msg-filename (spec number &optional loc-alist)
+  (let ((tmp-dir (file-name-as-directory (elmo-msgdb-expand-path nil spec)))
+       (prefix (nth 3 spec)))
+    (expand-file-name
+     (elmo-concat-path prefix (int-to-string number))
+     tmp-dir)))
+
+(defalias 'elmo-archive-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-archive-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-archive-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-archive-commit 'elmo-generic-commit)
+
+;;; End
+(run-hooks 'elmo-archive-load-hook)
+(provide 'elmo-archive)
+
+;;; elmo-archive.el ends here
diff --git a/elmo/elmo-cache.el b/elmo/elmo-cache.el
new file mode 100644 (file)
index 0000000..f0ea53c
--- /dev/null
@@ -0,0 +1,737 @@
+;;; elmo-cache.el -- Cache modules for Elmo.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright 2000 Kenichi OKADA <okada@opaopa.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;;         Kenichi OKADA <okada@opaopa.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/01 09:57:55 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'elmo-vars)
+(require 'elmo-util)
+
+(defun elmo-cache-delete (msgid folder number)
+  "Delete cache file associated with message-id 'MSGID', FOLDER, NUMBER."
+  (let ((path (elmo-cache-exists-p msgid folder number)))
+    (if path (delete-file path))))
+
+(defsubst elmo-cache-to-msgid (filename)
+  (concat "<" (elmo-recover-msgid-from-filename filename) ">"))
+
+(defun elmo-cache-force-delete (path &optional locked)
+  "Delete cache file."
+  ;; for safety...
+  (unless (string-match elmo-cache-dirname path)
+    (error "%s is not cache file!" path))
+  (let (message-id)
+    (if (or (elmo-msgdb-global-mark-get 
+            (setq message-id
+                  (elmo-cache-to-msgid (file-name-nondirectory path))))
+           (member message-id locked))
+       nil ;; Don't delete caches with mark (or locked message).
+      (if (and path 
+              (file-directory-p path))
+         (progn
+           (mapcar 'delete-file (directory-files path t "^[^\\.]"))
+           (delete-directory path))
+       (delete-file path))
+      t)))
+
+(defun elmo-cache-delete-partial (msgid folder number)
+  "Delete cache file only if it is partial message."
+  (if msgid
+      (let ((path1 (elmo-cache-get-path msgid))
+           path2)
+       (if (and path1 
+                (file-exists-p path1))
+           (if (and folder
+                    (file-directory-p path1))
+               (when (file-exists-p (setq path2 
+                                          (expand-file-name
+                                           (format "%s@%s" 
+                                                   number
+                                                   (elmo-safe-filename
+                                                    folder))
+                                           path1)))
+                 (delete-file path2)
+                 (unless (directory-files path1 t "^[^\\.]")
+                   (delete-directory path1))))))))
+
+(defun elmo-cache-read (msgid &optional folder number outbuf)
+  "Read cache contents to outbuf"
+  (save-excursion
+    (let ((path (elmo-cache-exists-p msgid folder number)))
+      (when path
+       (if outbuf (set-buffer outbuf))
+       (erase-buffer)
+       (as-binary-input-file (insert-file-contents path))
+       t))))
+
+(defun elmo-cache-expire ()
+  (interactive)
+  (let* ((completion-ignore-case t)
+        (method (completing-read (format "Expire by (%s): "
+                                         elmo-cache-expire-default-method)
+                                 '(("size" . "size")
+                                   ("age" . "age")))))
+    (if (string= method "")
+       (setq method elmo-cache-expire-default-method))
+    (funcall (intern (concat "elmo-cache-expire-by-" method)))))
+
+(defun elmo-read-float-value-from-minibuffer (prompt &optional initial)
+  (let ((str (read-from-minibuffer prompt initial)))
+    (cond 
+     ((string-match "[0-9]*\\.[0-9]+" str)
+      (string-to-number str))
+     ((string-match "[0-9]+" str)
+      (string-to-number (concat str ".0")))
+     (t (error "%s is not number" str)))))
+
+(defun elmo-cache-expire-by-size (&optional kbytes)
+  "Expire cache file by size. 
+If KBYTES is kilo bytes (This value must be float)."
+  (interactive)
+  (let ((size (or kbytes
+                 (and (interactive-p)
+                      (elmo-read-float-value-from-minibuffer
+                       "Enter cache disk size (Kbytes): "
+                       (number-to-string
+                        (if (integerp elmo-cache-expire-default-size)
+                            (float elmo-cache-expire-default-size)
+                          elmo-cache-expire-default-size))))
+                 (if (integerp elmo-cache-expire-default-size)
+                     (float elmo-cache-expire-default-size))))
+       (locked (elmo-dop-lock-list-load))
+       (count 0)
+       (Kbytes 1024)
+       total beginning)
+    (message "Checking disk usage...")
+    (setq total (/ (elmo-disk-usage
+                   (expand-file-name
+                    elmo-cache-dirname elmo-msgdb-dir)) Kbytes))
+    (setq beginning total)
+    (message "Checking disk usage...done.")
+    (let ((cfl (elmo-cache-get-sorted-cache-file-list))
+         (deleted 0)
+         oldest 
+         cur-size cur-file)
+      (while (and (<= size total)
+                 (setq oldest (elmo-cache-get-oldest-cache-file-entity cfl)))
+       (setq cur-file (expand-file-name (car (cdr oldest)) (car oldest)))
+       (if (file-directory-p cur-file)
+           (setq cur-size (elmo-disk-usage cur-file))
+         (setq cur-size 
+               (/ (float (nth 7 (file-attributes cur-file)))
+                  Kbytes)))
+       (when (elmo-cache-force-delete cur-file locked)
+         (setq count (+ count 1))
+         (message "%d cache(s) are expired." count))
+       (setq deleted (+ deleted cur-size))
+       (setq total (- total cur-size)))
+      (message "%d cache(s) are expired from disk (%d Kbytes/%d Kbytes)." 
+              count deleted beginning))))
+
+(defun elmo-cache-make-file-entity (filename path)
+  (cons filename (elmo-get-last-accessed-time filename path)))
+
+(defun elmo-cache-get-oldest-cache-file-entity (cache-file-list)
+  (let ((cfl cache-file-list)
+       flist firsts oldest-entity wonlist)
+    (while cfl
+      (setq flist (cdr (car cfl)))
+      (setq firsts (append firsts (list 
+                                  (cons (car (car cfl)) 
+                                        (car flist)))))
+      (setq cfl (cdr cfl)))
+;    (prin1 firsts)
+    (while firsts
+      (if (and (not oldest-entity)
+              (cdr (cdr (car firsts))))
+         (setq oldest-entity (car firsts)))
+      (if (and (cdr (cdr (car firsts)))
+              (cdr (cdr oldest-entity))
+              (> (cdr (cdr oldest-entity)) (cdr (cdr (car firsts)))))
+         (setq oldest-entity (car firsts)))
+      (setq firsts (cdr firsts)))
+    (setq wonlist (assoc (car oldest-entity) cache-file-list))
+    (and wonlist
+        (setcdr wonlist (delete (car (cdr wonlist)) (cdr wonlist))))
+    oldest-entity))
+
+(defun elmo-cache-get-sorted-cache-file-list ()
+  (let ((dirs (directory-files 
+              (expand-file-name elmo-cache-dirname elmo-msgdb-dir) 
+              t "^[^\\.]"))
+       (i 0) num
+       elist
+       ret-val)
+    (setq num (length dirs))
+    (message "Collecting cache info...")
+    (while dirs
+      (setq elist (mapcar (lambda (x) 
+                           (elmo-cache-make-file-entity x (car dirs)))
+                         (directory-files (car dirs) nil "^[^\\.]")))
+      (setq ret-val (append ret-val
+                           (list (cons
+                                  (car dirs)
+                                  (sort 
+                                   elist
+                                   (lambda (x y)
+                                     (< (cdr x)
+                                        (cdr y))))))))
+      (setq i (+ i 1))
+      (elmo-display-progress
+       'elmo-cache-get-sorted-cache-file-list "Collecting cache info..."
+       (/ (* i 100) num))
+      (setq dirs (cdr dirs)))
+    ret-val))
+
+(defun elmo-cache-expire-by-age (&optional days)
+  (let ((age (or (and days (int-to-string days))
+                (and (interactive-p)
+                     (read-from-minibuffer 
+                      (format "Enter days (%s): "
+                              elmo-cache-expire-default-age)))
+                (int-to-string elmo-cache-expire-default-age)))
+       (dirs (directory-files 
+              (expand-file-name elmo-cache-dirname elmo-msgdb-dir) 
+              t "^[^\\.]"))
+       (locked (elmo-dop-lock-list-load))
+       (count 0)
+       curtime)
+    (if (string= age "")
+       (setq age elmo-cache-expire-default-age)
+      (setq age (string-to-int age)))
+    (setq curtime (current-time))
+    (setq curtime (+ (* (nth 0 curtime) 
+                       (float 65536)) (nth 1 curtime)))
+    (while dirs
+      (let ((files (directory-files (car dirs) t "^[^\\.]"))
+           (limit-age (* age 86400)))
+       (while files
+         (when (> (- curtime (elmo-get-last-accessed-time (car files)))
+                  limit-age)
+           (when (elmo-cache-force-delete (car files) locked)
+             (setq count (+ 1 count))
+             (message "%d cache file(s) are expired." count)))
+         (setq files (cdr files))))
+      (setq dirs (cdr dirs)))))
+
+(defun elmo-cache-save (msgid partial folder number &optional inbuf)
+  "If partial is non-nil, save current buffer (or INBUF) as partial cache."
+  (condition-case nil
+  (save-excursion
+    (let* ((path (if partial
+                    (elmo-cache-get-path msgid folder number)
+                  (elmo-cache-get-path msgid)))
+          dir tmp-buf)
+      (when path 
+       (setq dir (directory-file-name (file-name-directory path)))
+       (if (not (file-exists-p dir))
+           (elmo-make-directory dir))
+       (if inbuf (set-buffer inbuf))
+       (goto-char (point-min))
+       (as-binary-output-file (write-region (point-min) (point-max)
+                                            path nil 'no-msg)))))
+  (error)))
+
+(defun elmo-cache-exists-p (msgid &optional folder number)
+  "Returns the path if the cache exists."
+  (save-match-data
+    (if msgid
+       (let ((path (elmo-cache-get-path msgid)))
+         (if (and path
+                  (file-exists-p path))
+             (if (and folder
+                      (file-directory-p path))
+                 (if (file-exists-p (setq path (expand-file-name
+                                                (format "%s@%s" 
+                                                        (or number "") 
+                                                        (elmo-safe-filename
+                                                         folder))
+                                                path)))
+                     path
+                   )
+               ;; not directory.
+               path))))))
+
+(defun elmo-cache-search-all (folder condition from-msgs)
+  (let* ((number-alist (elmo-msgdb-number-load
+                       (elmo-msgdb-expand-path folder)))
+        (nalist number-alist)
+        (num (length number-alist))
+        cache-file
+        ret-val
+        case-fold-search msg
+        percent i)
+    (setq i 0)    
+    (while nalist
+      (if (and (setq cache-file (elmo-cache-exists-p (cdr (car nalist))
+                                                    folder 
+                                                    (car (car nalist))))
+              (elmo-file-field-condition-match cache-file condition))
+         (setq ret-val (append ret-val (list (caar nalist)))))
+      (setq i (1+ i))
+      (setq percent (/ (* i 100) num))
+      (elmo-display-progress
+       'elmo-cache-search-all "Searching..."
+       percent)
+      (setq nalist (cdr nalist)))
+    ret-val))
+
+(defun elmo-cache-collect-sub-directories (init dir &optional recursively)
+  "Collect subdirectories under 'dir'"
+  (let ((dirs 
+        (delete (expand-file-name elmo-cache-dirname
+                                  elmo-msgdb-dir)
+                (directory-files dir t "^[^\\.]")))
+       ret-val)
+    (setq dirs (elmo-delete-if (lambda (x) (not (file-directory-p x))) dirs))
+    (setq ret-val (append init dirs))
+    (while (and recursively dirs)
+      (setq ret-val
+           (elmo-cache-collect-sub-directories 
+            ret-val
+            (car dirs) recursively))
+      (setq dirs (cdr dirs)))
+    ret-val))
+
+(defun elmo-msgid-to-cache (msgid)
+  (when (and msgid 
+            (string-match "<\\(.+\\)>$" msgid))
+    (elmo-replace-msgid-as-filename (elmo-match-string 1 msgid))))
+
+(defun elmo-cache-get-path (msgid &optional folder number)
+  "Get path for cache file associated with MSGID, FOLDER, and NUMBER."
+  (if (setq msgid (elmo-msgid-to-cache msgid))
+      (expand-file-name
+       (expand-file-name
+       (if folder
+           (format "%s/%s/%s@%s" 
+                   (elmo-cache-get-path-subr msgid)
+                   msgid
+                   (or number "")
+                   (elmo-safe-filename folder))
+         (format "%s/%s" 
+                 (elmo-cache-get-path-subr msgid)
+                 msgid))
+       (expand-file-name elmo-cache-dirname
+                         elmo-msgdb-dir)))))
+
+(defsubst elmo-cache-get-path-subr (msgid)
+  (let ((chars '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?A ?B ?C ?D ?E ?F))
+       (clist (string-to-char-list msgid))
+       (sum 0))
+    (while clist
+      (setq sum (+ sum (car clist)))
+      (setq clist (cdr clist)))
+    (format "%c%c"
+           (nth (% (/ sum 16) 2) chars)
+           (nth (% sum 16) chars))))
+  
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; buffer cache module
+
+(defconst elmo-buffer-cache-name " *elmo cache*")
+
+(defvar elmo-buffer-cache nil
+  "Message cache. (old ... new) order alist with association
+ ((\"folder\" message \"message-id\") . cache-buffer)")
+
+(defmacro elmo-buffer-cache-buffer-get (entry)
+  (` (cdr (, entry))))
+
+(defmacro elmo-buffer-cache-folder-get (entry)
+  (` (car (car (, entry)))))
+
+(defmacro elmo-buffer-cache-message-get (entry)
+  (` (cdr (car (, entry)))))
+
+(defmacro elmo-buffer-cache-entry-make (fld-msg-id buf)
+  (` (cons (, fld-msg-id) (, buf))))
+
+(defmacro elmo-buffer-cache-hit (fld-msg-id)
+  "Return value assosiated with key."
+  (` (elmo-buffer-cache-buffer-get
+      (assoc (, fld-msg-id) elmo-buffer-cache))))
+
+(defun elmo-buffer-cache-sort (entry)
+  (let* ((pointer (cons nil elmo-buffer-cache))
+        (top pointer))
+    (while (cdr pointer)
+      (if (equal (car (cdr pointer)) entry)
+         (setcdr pointer (cdr (cdr pointer)))
+       (setq pointer (cdr pointer))))
+    (setcdr pointer (list entry))
+    (setq elmo-buffer-cache (cdr top))))
+
+(defun elmo-buffer-cache-add (fld-msg-id)
+  "Adding (fld-msg-id . buf) to the top of \"elmo-buffer-cache\".
+Returning its cache buffer."
+  (let ((len (length elmo-buffer-cache))
+       (buf nil))
+    (if (< len elmo-buffer-cache-size)
+       (setq buf (get-buffer-create (format "%s%d" elmo-buffer-cache-name len)))
+      (setq buf (elmo-buffer-cache-buffer-get (nth (1- len) elmo-buffer-cache)))
+      (setcdr (nthcdr (- len 2) elmo-buffer-cache) nil))
+    (setq elmo-buffer-cache
+         (cons (elmo-buffer-cache-entry-make fld-msg-id buf)
+               elmo-buffer-cache))
+    buf))
+
+(defun elmo-buffer-cache-delete ()
+  "Delete the most recent cache entry."
+  (let ((buf (elmo-buffer-cache-buffer-get (car elmo-buffer-cache))))
+    (setq elmo-buffer-cache
+         (nconc (cdr elmo-buffer-cache)
+                (list (elmo-buffer-cache-entry-make nil buf))))))
+
+(defun elmo-buffer-cache-clean-up ()
+  "A function to flush all decoded messages in cache list."
+  (interactive)
+  (let ((n 0) buf)
+    (while (< n elmo-buffer-cache-size)
+      (setq buf (concat elmo-buffer-cache-name (int-to-string n)))
+      (elmo-kill-buffer buf)
+      (setq n (1+ n))))
+  (setq elmo-buffer-cache nil))
+
+;;;
+;;; cache backend by Kenichi OKADA <okada@opaopa.org>
+;;;
+
+(defsubst elmo-cache-get-folder-directory (spec)
+  (if (file-name-absolute-p (nth 1 spec))
+      (nth 1 spec) ; already full path.
+    (expand-file-name (nth 1 spec)
+                     (expand-file-name elmo-cache-dirname elmo-msgdb-dir))))
+
+(defun elmo-cache-msgdb-expand-path (spec)
+  (let ((fld-name (nth 1 spec)))
+    (expand-file-name fld-name
+                     (expand-file-name "internal/cache"
+                                       elmo-msgdb-dir))))
+
+(defun elmo-cache-number-to-filename (spec number)
+  (let ((number-alist
+        (elmo-cache-list-folder-subr spec nil t)))
+    (elmo-msgid-to-cache
+     (cdr (assq number number-alist)))))
+
+(if (boundp 'nemacs-version)
+    (defsubst elmo-cache-insert-header (file)
+      "Insert the header of the article (Does not work on nemacs)."
+      (as-binary-input-file
+       (insert-file-contents file)))
+  (defsubst elmo-cache-insert-header (file)
+    "Insert the header of the article."
+    (let ((beg 0)
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook
+         format-alist)
+      (when (file-exists-p file)
+       ;; Read until header separator is found.
+       (while (and (eq elmo-localdir-header-chop-length
+                       (nth 1 
+                            (as-binary-input-file 
+                             (insert-file-contents
+                              file nil beg
+                              (incf beg elmo-localdir-header-chop-length)))))
+                   (prog1 (not (search-forward "\n\n" nil t))
+                     (goto-char (point-max)))))))))
+
+(defsubst elmo-cache-msgdb-create-overview-entity-from-file (number file)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO Cache Temp*"))
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook header-end
+         (attrib (file-attributes file))
+         ret-val size mtime)
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (if (not (file-exists-p file))
+         ()
+       (setq size (nth 7 attrib))
+       (setq mtime (timezone-make-date-arpa-standard
+                    (current-time-string (nth 5 attrib)) (current-time-zone)))
+       ;; insert header from file.
+       (catch 'done
+         (condition-case nil
+             (elmo-cache-insert-header file)
+           (error (throw 'done nil)))
+         (goto-char (point-min))
+         (setq header-end
+               (if (re-search-forward "\\(^--.*$\\)\\|\\(\n\n\\)" nil t)
+                   (point)
+                 (point-max)))
+         (narrow-to-region (point-min) header-end)
+         (setq ret-val (elmo-msgdb-create-overview-from-buffer number size mtime))
+         (kill-buffer tmp-buffer))
+       ret-val))))
+
+(defun elmo-cache-msgdb-create-as-numlist (spec numlist new-mark
+                                                  already-mark seen-mark
+                                                  important-mark seen-list)
+  (when numlist
+    (let ((dir (elmo-cache-get-folder-directory spec))
+         (nalist (elmo-cache-list-folder-subr spec nil t))
+         overview number-alist mark-alist entity message-id
+         i percent len num seen gmark)
+      (setq len (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (setq entity
+             (elmo-cache-msgdb-create-overview-entity-from-file
+              (car numlist)
+              (expand-file-name
+               (elmo-msgid-to-cache
+                (setq message-id (cdr (assq (car numlist) nalist)))) dir)))
+       (if (null entity)
+           ()
+         (setq num (elmo-msgdb-overview-entity-get-number entity))
+         (setq overview
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist num message-id))
+         (setq seen (member message-id seen-list))
+         (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                             (if seen
+                                 nil
+                               new-mark)))
+             (setq mark-alist
+                   (elmo-msgdb-mark-append 
+                    mark-alist 
+                    num
+                    gmark))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) len))
+       (elmo-display-progress
+        'elmo-cache-msgdb-create-as-numlist "Creating msgdb..."
+        percent)
+       (setq numlist (cdr numlist)))
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist))))
+
+(defalias 'elmo-cache-msgdb-create 'elmo-cache-msgdb-create-as-numlist)
+
+(defun elmo-cache-list-folders (spec &optional hierarchy)
+  (let ((folder (concat "'cache" (nth 1 spec))))
+    (elmo-cache-list-folders-subr folder hierarchy)))
+
+(defun elmo-cache-list-folders-subr (folder &optional hierarchy)
+  (let ((case-fold-search t)
+       folders curdir dirent relpath abspath attr
+       subprefix subfolder)
+    (condition-case ()
+       (progn
+         (setq curdir
+               (expand-file-name
+                (nth 1 (elmo-folder-get-spec folder))
+                (expand-file-name elmo-cache-dirname elmo-msgdb-dir)))
+         (if (string-match "^[+=$!]$" folder) ;; localdir, archive, localnews
+             (setq subprefix folder)
+           (setq subprefix (concat folder elmo-path-sep)))
+           ;; include parent
+           ;(setq folders (list folder)))
+         (setq dirent (directory-files curdir nil "^[01][0-9A-F]$"))
+         (catch 'done
+          (while dirent
+           (setq relpath (car dirent))
+           (setq dirent (cdr dirent))
+           (setq abspath (expand-file-name relpath curdir))
+           (and
+            (eq (nth 0 (setq attr (file-attributes abspath))) t)
+            (setq subfolder (concat subprefix relpath))
+            (setq folders (nconc folders (list subfolder))))))
+         folders)
+      (file-error folders))))
+
+(defsubst elmo-cache-list-folder-subr (spec &optional nonsort nonalist)
+  (let* ((dir (elmo-cache-get-folder-directory spec))
+        (flist (mapcar 'file-name-nondirectory
+                       (elmo-delete-if 'file-directory-p
+                                       (directory-files 
+                                        dir t "^[^@]+@[^@]+$" t))))
+        (folder (concat "'cache/" (nth 1 spec)))
+        (number-alist (or (elmo-msgdb-number-load 
+                           (elmo-msgdb-expand-path folder))
+                          (list nil)))
+        nlist)
+    (setq nlist
+         (mapcar '(lambda (filename)
+                    (elmo-cache-filename-to-number filename number-alist))
+                 flist))
+    (if nonalist
+       number-alist
+      (if nonsort
+         (cons (or (elmo-max-of-list nlist) 0) (length nlist))
+       (sort nlist '<)))))
+
+(defsubst elmo-cache-filename-to-number (filename number-alist)
+  (let* ((msgid (elmo-cache-to-msgid filename))
+        number)
+    (or (car (rassoc msgid number-alist))
+       (prog1
+           (setq number (+ (or (caar (last number-alist))
+                               0) 1))
+         (if (car number-alist)
+             (nconc number-alist
+                    (list (cons number msgid)))
+           (setcar number-alist (cons number msgid)))))))
+
+(defun elmo-cache-append-msg (spec string message-id &optional msg no-see)
+  (let ((dir (elmo-cache-get-folder-directory spec))
+       (tmp-buffer (get-buffer-create " *ELMO Temp buffer*"))
+       filename)
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (setq filename (expand-file-name (elmo-msgid-to-cache message-id) dir))
+      (unwind-protect
+         (if (file-writable-p filename)
+             (progn
+               (insert string)
+               (as-binary-output-file
+                (write-region (point-min) (point-max) filename nil 'no-msg))
+               t)
+           nil)
+       (kill-buffer tmp-buffer)))))
+
+(defun elmo-cache-delete-msg (spec number locked)
+  (let* ((dir (elmo-cache-get-folder-directory spec))
+        (file (expand-file-name
+               (elmo-cache-number-to-filename spec number) dir)))
+    ;; return nil if failed.
+    (elmo-cache-force-delete file locked)))
+
+(defun elmo-cache-read-msg (spec number outbuf &optional set-mark)
+  (save-excursion
+    (let* ((dir (elmo-cache-get-folder-directory spec))
+          (file (expand-file-name 
+                 (elmo-cache-number-to-filename spec number) dir)))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p file)
+       (as-binary-input-file (insert-file-contents file))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-cache-delete-msgs (spec msgs)
+  (let ((locked (elmo-dop-lock-list-load)))
+    (not (memq nil
+              (mapcar '(lambda (msg) (elmo-cache-delete-msg spec msg locked))
+                      msgs)))))
+
+(defun elmo-cache-list-folder (spec); called by elmo-cache-search()
+  (elmo-cache-list-folder-subr spec))
+
+(defun elmo-cache-max-of-folder (spec)
+  (elmo-cache-list-folder-subr spec t))
+
+(defun elmo-cache-check-validity (spec validity-file)
+  t)
+
+(defun elmo-cache-sync-validity (spec validity-file)
+  t)
+
+(defun elmo-cache-folder-exists-p (spec)
+  (file-directory-p (elmo-cache-get-folder-directory spec)))
+
+(defun elmo-cache-folder-creatable-p (spec)
+  nil)
+
+(defun elmo-cache-create-folder (spec)
+  nil)
+
+(defun elmo-cache-search (spec condition &optional from-msgs)
+  (let* ((number-alist (elmo-cache-list-folder-subr spec nil t))
+        (msgs (or from-msgs (mapcar 'car number-alist)))
+        (num (length msgs))
+        (i 0) case-fold-search ret-val)
+    (while msgs
+      (if (elmo-file-field-condition-match
+          (expand-file-name 
+           (elmo-msgid-to-cache
+            (cdr (assq (car msgs) number-alist)))
+           (elmo-cache-get-folder-directory spec))
+                                           condition)
+         (setq ret-val (cons (car msgs) ret-val)))
+      (setq i (1+ i))
+      (elmo-display-progress
+       'elmo-cache-search "Searching..."
+       (/ (* i 100) num))
+      (setq msgs (cdr msgs)))
+    (nreverse ret-val)))
+
+;;; (localdir, maildir, localnews) -> cache
+(defun elmo-cache-copy-msgs (dst-spec msgs src-spec
+                                     &optional loc-alist same-number)
+  (let ((dst-dir
+        (elmo-cache-get-folder-directory dst-spec))
+       (next-num (1+ (car (elmo-cache-list-folder-subr dst-spec t))))
+       (number-alist
+        (elmo-msgdb-number-load
+         (elmo-msgdb-expand-path nil src-spec))))
+    (if same-number (error "Not implemented"))
+    (while msgs
+      (elmo-copy-file
+       ;; src file
+       (elmo-call-func src-spec "get-msg-filename" (car msgs) loc-alist)
+       ;; dst file
+       (expand-file-name
+       (elmo-msgid-to-cache
+        (cdr (assq (if same-number (car msgs) next-num) number-alist)))
+        dst-dir))
+      (if (and (setq msgs (cdr msgs))
+              (not same-number))
+         (setq next-num (1+ next-num))))
+    t))
+
+(defun elmo-cache-use-cache-p (spec number)
+  nil)
+
+(defun elmo-cache-local-file-p (spec number)
+  t)
+
+(defun elmo-cache-get-msg-filename (spec number &optional loc-alist)
+  (expand-file-name
+   (elmo-cache-number-to-filename spec number)
+   (elmo-cache-get-folder-directory spec)))
+
+(defalias 'elmo-cache-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-cache-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-cache-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-cache-commit 'elmo-generic-commit)
+
+(provide 'elmo-cache)
+
+;;; elmo-cache.el ends here
diff --git a/elmo/elmo-cache2.el b/elmo/elmo-cache2.el
new file mode 100644 (file)
index 0000000..9c45e94
--- /dev/null
@@ -0,0 +1,338 @@
+;;; elmo-cache2.el -- Cache Folder Interface for ELMO.
+
+;; Author: Kenichi OKADA <okada@opaopa.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/01 09:58:07 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'emu)
+(require 'std11)
+
+(require 'elmo-cache)
+(require 'elmo-msgdb)
+
+(defsubst elmo-cache-get-folder-directory (spec)
+  (if (file-name-absolute-p (nth 1 spec))
+      (nth 1 spec) ; already full path.
+    (expand-file-name (nth 1 spec)
+                     (expand-file-name elmo-cache-dirname elmo-msgdb-dir))))
+
+(defun elmo-cache-msgdb-expand-path (spec)
+  (let ((fld-name (nth 1 spec)))
+    (expand-file-name fld-name
+                     (expand-file-name "internal/cache"
+                                       elmo-msgdb-dir))))
+
+(defun elmo-cache-number-to-filename (spec number)
+  (let ((number-alist
+        (elmo-cache-list-folder-subr spec nil t)))
+    (elmo-msgid-to-cache
+     (cdr (assq number number-alist)))))
+
+(if (boundp 'nemacs-version)
+    (defsubst elmo-cache-insert-header (file)
+      "Insert the header of the article (Does not work on nemacs)."
+      (as-binary-input-file
+       (insert-file-contents file)))
+  (defsubst elmo-cache-insert-header (file)
+    "Insert the header of the article."
+    (let ((beg 0)
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook
+         format-alist)
+      (when (file-exists-p file)
+       ;; Read until header separator is found.
+       (while (and (eq elmo-localdir-header-chop-length
+                       (nth 1 
+                            (as-binary-input-file 
+                             (insert-file-contents
+                              file nil beg
+                              (incf beg elmo-localdir-header-chop-length)))))
+                   (prog1 (not (search-forward "\n\n" nil t))
+                     (goto-char (point-max)))))))))
+
+(defsubst elmo-cache-msgdb-create-overview-entity-from-file (number file)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO Cache Temp*"))
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook header-end
+         (attrib (file-attributes file))
+         ret-val size mtime)
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (if (not (file-exists-p file))
+         ()
+       (setq size (nth 7 attrib))
+       (setq mtime (timezone-make-date-arpa-standard
+                    (current-time-string (nth 5 attrib)) (current-time-zone)))
+       ;; insert header from file.
+       (catch 'done
+         (condition-case nil
+             (elmo-cache-insert-header file)
+           (error (throw 'done nil)))
+         (goto-char (point-min))
+         (setq header-end
+               (if (re-search-forward "\\(^--.*$\\)\\|\\(\n\n\\)" nil t)
+                   (point)
+                 (point-max)))
+         (narrow-to-region (point-min) header-end)
+         (setq ret-val (elmo-msgdb-create-overview-from-buffer number size mtime))
+         (kill-buffer tmp-buffer))
+       ret-val))))
+
+(defun elmo-cache-msgdb-create-as-numlist (spec numlist new-mark
+                                                  already-mark seen-mark
+                                                  important-mark seen-list)
+  (when numlist
+    (let ((dir (elmo-cache-get-folder-directory spec))
+         (nalist (elmo-cache-list-folder-subr spec nil t))
+         overview number-alist mark-alist entity message-id
+         i percent len num seen gmark)
+      (setq len (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (setq entity
+             (elmo-cache-msgdb-create-overview-entity-from-file
+              (car numlist)
+              (expand-file-name
+               (elmo-msgid-to-cache
+                (setq message-id (cdr (assq (car numlist) nalist)))) dir)))
+       (if (null entity)
+           ()
+         (setq num (elmo-msgdb-overview-entity-get-number entity))
+         (setq overview
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist num message-id))
+         (setq seen (member message-id seen-list))
+         (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                             (if seen
+                                 nil
+                               new-mark)))
+             (setq mark-alist
+                   (elmo-msgdb-mark-append 
+                    mark-alist 
+                    num
+                    gmark))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) len))
+       (message "Creating msgdb...%d%%" percent)
+       (setq numlist (cdr numlist)))
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist))))
+
+(defalias 'elmo-cache-msgdb-create 'elmo-cache-msgdb-create-as-numlist)
+
+(defun elmo-cache-list-folders (spec &optional hierarchy)
+  (let ((folder (concat "!" (nth 1 spec))))
+    (elmo-cache-list-folders-subr folder hierarchy)))
+
+(defun elmo-cache-list-folders-subr (folder &optional hierarchy)
+  (let ((case-fold-search t)
+       folders curdir dirent relpath abspath attr
+       subprefix subfolder)
+    (condition-case ()
+       (progn
+         (setq curdir
+               (expand-file-name (nth 1 (elmo-folder-get-spec folder))
+                                 (expand-file-name elmo-cache-dirname elmo-msgdb-dir)))
+         (if (string-match "^[+=$!]$" folder) ;; localdir, archive, localnews
+             (setq subprefix folder)
+           (setq subprefix (concat folder elmo-path-sep))
+           ;; include parent
+           (setq folders (list folder)))
+         (setq dirent (directory-files curdir nil "^[01][0-9A-F]$"))
+         (catch 'done
+          (while dirent
+           (setq relpath (car dirent))
+           (setq dirent (cdr dirent))
+           (setq abspath (expand-file-name relpath curdir))
+           (and
+            (eq (nth 0 (setq attr (file-attributes abspath))) t)
+            (setq subfolder (concat subprefix relpath))
+            (setq folders (nconc folders (list subfolder))))))
+         folders)
+      (file-error folders))))
+
+(defsubst elmo-cache-list-folder-subr (spec &optional nonsort nonalist)
+  (let* ((dir (elmo-cache-get-folder-directory spec))
+        (flist (directory-files dir nil "^[^@]+@[^@]+$" t))
+        (folder (concat "!" (nth 1 spec)))
+        (number-alist (or (elmo-msgdb-number-load (elmo-msgdb-expand-path folder))
+                      (list nil)))
+        nlist)
+    (setq nlist
+         (mapcar '(lambda (filename)
+                    (elmo-cache-filename-to-number filename number-alist))
+                 flist))
+    (if nonalist
+       number-alist
+      (if nonsort
+         (cons (or (elmo-max-of-list nlist) 0) (length nlist))
+       (sort nlist '<)))))
+
+(defsubst elmo-cache-filename-to-number (filename number-alist)
+  (let* ((msgid (elmo-cache-to-msgid filename))
+        number)
+    (or (car (rassoc msgid number-alist))
+       (prog1
+           (setq number (+ (or (caar (last number-alist))
+                               0) 1))
+         (if (car number-alist)
+             (nconc number-alist
+                    (list (cons number msgid)))
+           (setcar number-alist (cons number msgid)))))))
+
+(defun elmo-cache-append-msg (spec string message-id &optional msg no-see)
+  (let ((dir (elmo-cache-get-folder-directory spec))
+       (tmp-buffer (get-buffer-create " *ELMO Temp buffer*"))
+       filename)
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (setq filename (expand-file-name (elmo-msgid-to-cache message-id) dir))
+      (unwind-protect
+         (if (file-writable-p filename)
+             (progn
+               (insert string)
+               (as-binary-output-file
+                (write-region (point-min) (point-max) filename nil 'no-msg))
+               t)
+           nil)
+       (kill-buffer tmp-buffer)))))
+
+(defun elmo-cache-delete-msg (spec number)
+  (let* ((dir (elmo-cache-get-folder-directory spec))
+        (file (expand-file-name
+              (elmo-cache-number-to-filename spec number) dir)))
+    (if (and (file-exists-p file)
+            (file-writable-p file)
+            (not (file-directory-p file)))
+       (progn (delete-file file)
+              t))))
+
+(defun elmo-cache-read-msg (spec number outbuf &optional set-mark)
+  (save-excursion
+    (let* ((dir (elmo-cache-get-folder-directory spec))
+          (file (expand-file-name 
+                 (elmo-cache-number-to-filename spec number) dir)))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p file)
+       (as-binary-input-file (insert-file-contents file))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-cache-delete-msgs (spec msgs)
+  (mapcar '(lambda (msg) (elmo-cache-delete-msg spec msg))
+         msgs))
+
+(defun elmo-cache-list-folder (spec); called by elmo-cache-search()
+  (elmo-cache-list-folder-subr spec))
+
+(defun elmo-cache-max-of-folder (spec)
+  (elmo-cache-list-folder-subr spec t))
+
+(defun elmo-cache-check-validity (spec validity-file)
+  t)
+
+(defun elmo-cache-sync-validity (spec validity-file)
+  t)
+
+(defun elmo-cache-folder-exists-p (spec)
+  (file-directory-p (elmo-cache-get-folder-directory spec)))
+
+(defun elmo-cache-folder-creatable-p (spec)
+  nil)
+
+(defun elmo-cache-create-folder (spec)
+  nil)
+
+(defun elmo-cache-search (spec condition &optional from-msgs)
+  (let* ((number-alist (elmo-cache-list-folder-subr spec nil t))
+        (msgs (or from-msgs (mapcar 'car number-alist)))
+        (num (length msgs))
+        (i 0) case-fold-search ret-val)
+    (while msgs
+      (if (elmo-file-field-condition-match
+          (expand-file-name 
+           (elmo-msgid-to-cache
+            (cdr (assq (car msgs) number-alist)))
+           (elmo-cache-get-folder-directory spec))
+                                           condition)
+         (setq ret-val (cons (car msgs) ret-val)))
+      (setq i (1+ i))
+      (message "Searching...%d%%" (/ (* i 100) num))
+      (setq msgs (cdr msgs)))
+    (nreverse ret-val)))
+
+;;; (localdir, maildir, localnews) -> cache
+(defun elmo-cache-copy-msgs (dst-spec msgs src-spec
+                                     &optional loc-alist same-number)
+  (let ((dst-dir
+        (elmo-cache-get-folder-directory dst-spec))
+       (next-num (1+ (car (elmo-cache-list-folder-subr dst-spec t))))
+       (number-alist
+        (elmo-msgdb-number-load
+         (elmo-msgdb-expand-path nil src-spec))))
+    (if same-number (error "Not implemented"))
+    (while msgs
+      (elmo-copy-file
+       ;; src file
+       (elmo-call-func src-spec "get-msg-filename" (car msgs) loc-alist)
+       ;; dst file
+       (expand-file-name
+       (elmo-msgid-to-cache
+        (cdr (assq (if same-number (car msgs) next-num) number-alist)))
+        dst-dir))
+      (if (and (setq msgs (cdr msgs))
+              (not same-number))
+         (setq next-num (1+ next-num))))
+    t))
+
+(defun elmo-cache-use-cache-p (spec number)
+  nil)
+
+(defun elmo-cache-local-file-p (spec number)
+  t)
+
+(defun elmo-cache-get-msg-filename (spec number &optional loc-alist)
+  (expand-file-name
+   (elmo-cache-number-to-filename spec number)
+   (elmo-cache-get-folder-directory spec)))
+
+(defalias 'elmo-cache-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-cache-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-cache-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-cache-commit 'elmo-generic-commit)
+
+(provide 'elmo-cache2)
+
+;;; elmo-cache2.el ends here
diff --git a/elmo/elmo-database.el b/elmo/elmo-database.el
new file mode 100644 (file)
index 0000000..2b6a61b
--- /dev/null
@@ -0,0 +1,74 @@
+;;; elmo-database.el -- Database module for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-01-07 00:19:44 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'elmo-vars)
+(require 'elmo-msgdb)
+
+(defvar elmo-database-msgid nil)
+(defvar elmo-database-msgid-filename "msgid")
+
+(defun elmo-database-get (dbsym dbname)
+  (if (not (and (symbol-value dbsym)
+               (database-live-p (symbol-value dbsym))))
+      (set dbsym (open-database (expand-file-name
+                                dbname
+                                elmo-msgdb-dir
+                                )))
+    (symbol-value dbsym)))
+
+(defun elmo-database-close ()
+  (and elmo-database-msgid
+       (database-live-p elmo-database-msgid)
+       (close-database elmo-database-msgid)))
+
+(defun elmo-database-msgid-put (msgid folder number)
+  (let ((db (elmo-database-get 'elmo-database-msgid
+                              elmo-database-msgid-filename)))
+    (and msgid db
+        (progn
+          (remove-database msgid db)
+          (put-database msgid (prin1-to-string 
+                               (list folder number)) db)))))
+
+(defun elmo-database-msgid-delete (msgid)
+  (remove-database msgid (elmo-database-get 
+                         'elmo-database-msgid
+                         elmo-database-msgid-filename)))
+
+(defun elmo-database-msgid-get (msgid)
+  (let ((match (get-database msgid (elmo-database-get 
+                                   'elmo-database-msgid
+                                   elmo-database-msgid-filename))))
+    (and match (read match))))
+
+(provide 'elmo-database)
+
+;;; elmo-database.el ends here
diff --git a/elmo/elmo-date.el b/elmo/elmo-date.el
new file mode 100644 (file)
index 0000000..7dd66bb
--- /dev/null
@@ -0,0 +1,144 @@
+;;; elmo-date.el -- Date processing module for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:38:44 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+
+(require 'path-util)
+(if (module-installed-p 'timezone)
+    (require 'timezone))
+(require 'elmo-vars)
+
+(defvar elmo-date-descriptions
+  '((yesterday . [0 0 1])
+    (lastweek  . [0 0 7])
+    (lastmonth . [0 1 0])
+    (lastyear  . [1 0 0])))
+
+(defun elmo-date-get-description (datevec)
+  (format "%d-%s-%d"
+         (aref datevec 2)
+         (car (rassq (aref datevec 1)
+                     timezone-months-assoc))
+         (aref datevec 0)))
+
+(defun elmo-date-get-datevec (description)
+  (cond 
+   ((not elmo-date-match)
+    (error "date match is not available"))
+   ((string-match "^[ \t]*\\([0-9]+\\)?[ \t]*\\([a-zA-Z]+\\)$" description)
+    (let ((today 
+          (save-match-data
+            (timezone-fix-time (current-time-string) (current-time-zone)
+                               nil)))
+         (number 
+          (string-to-int
+           (if (match-beginning 1)
+               (elmo-match-string 1 description)
+             "0")))
+         (suffix (downcase (elmo-match-string 2 description)))
+         pair)
+      (if (setq pair (assq (intern suffix) elmo-date-descriptions))
+         (elmo-datevec-substitute today (cdr pair))
+       (if (string= "daysago" suffix)
+           (elmo-date-get-offset-datevec today number)
+         (error "%s is not supported yet" suffix)))))
+   ((string-match "[0-9]+-[A-Za-z]+-[0-9]+" description)
+    (timezone-fix-time 
+     (concat (elmo-replace-in-string description "-" " ") " 0:00")
+     nil nil))))
+
+(defun elmo-datevec-substitute (datevec1 datevec2)
+  (if (/= (aref datevec2 2) 0)
+      (elmo-date-get-offset-datevec datevec1 (aref datevec2 2))
+    (let ((year (- (aref datevec1 0) (aref datevec2 0)))
+         (month (- (aref datevec1 1) (aref datevec2 1)))
+         (timezone (current-time-zone)))
+      (while (<= month 0)
+       (setq year (1- year)
+             month (+ 12 month)))
+      (timezone-fix-time
+       (format "%d %s %d 0:00 %s"
+              (aref datevec1 2)
+              (car (rassq month timezone-months-assoc))
+              year
+              (cadr timezone)) nil nil))))
+
+(defun elmo-date-get-week (year month mday)
+  (let ((wday (symbol-value (intern (format
+                                    "elmo-weekday-name-%s"
+                                    elmo-lang))))
+       y1 days p)
+    (setq y1 (- year 1))
+    (setq days (- (+ (* y1 365) (/ y1 400) (/ y1 4)) (/ y1 100)))
+    (setq p 1)
+    (while (< p month)
+      (setq days (+ days (timezone-last-day-of-month p year)))
+      (setq p (+ p 1))
+      )
+    (setq days (+ days mday))
+    (aref wday (% days 7))))
+
+(defun elmo-date-get-offset-datevec (datevec offset &optional time)
+  (let ((year  (aref datevec 0))
+       (month (aref datevec 1))
+       (day   (aref datevec 2))
+       (hour     (aref datevec 3))
+       (minute   (aref datevec 4))
+       (second   (aref datevec 5))
+       (timezone (aref datevec 6))
+       day-number p 
+       day-of-month)
+    (setq p 1)
+    (setq day-number (- (timezone-day-number month day year)
+                       offset))
+    (while (<= day-number 0)
+      (setq year (1- year)
+           day-number (+ (timezone-day-number 12 31 year)
+                         day-number)))
+    (while (> day-number (setq day-of-month
+                              (timezone-last-day-of-month p year)))
+      (setq day-number (- day-number day-of-month))
+      (setq p (1+ p)))
+    (setq month p)
+    (setq day day-number)
+    (timezone-fix-time
+     (format "%d %s %d %s %s"
+            day
+            (car (rassq month timezone-months-assoc))
+            year
+            (if time
+                (format "%d:%d:%d" hour minute second)
+              "0:00")
+            (cadr timezone)) nil nil)))
+
+(provide 'elmo-date)
+
+;;; elmo-date.el ends here
diff --git a/elmo/elmo-dop.el b/elmo/elmo-dop.el
new file mode 100644 (file)
index 0000000..3643a42
--- /dev/null
@@ -0,0 +1,551 @@
+;;; elmo-dop.el -- Modules for Disconnected Operations on ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:39:23 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-msgdb)
+(require 'elmo-util)
+(eval-when-compile
+  (require 'elmo-imap4)
+  (require 'elmo-localdir))
+
+;; global variable.
+(defvar elmo-dop-queue nil
+  "A list of (folder-name function-to-be-called argument-list).
+Automatically loaded/saved.")
+
+(defun elmo-dop-queue-append (folder function argument)
+  (let ((operation (list (format "%s" folder) function argument)))
+    (elmo-dop-queue-load)
+    (unless (member operation elmo-dop-queue) ;; don't append same operation
+      (setq elmo-dop-queue 
+           (append elmo-dop-queue
+                   (list operation)))
+      (elmo-dop-queue-save))))
+
+(defun elmo-dop-queue-flush ()
+  (elmo-dop-queue-load) ; load cache.
+  (elmo-dop-queue-merge)
+  (let ((queue elmo-dop-queue)
+       (count 0)
+       len)
+    (while queue
+      (if (elmo-folder-plugged-p (caar queue))
+         (setq count (1+ count)))
+      (setq queue (cdr queue)))
+    (when (> count 0)
+      (if (elmo-y-or-n-p 
+          (format "%d pending operation(s) exists. Perform now?" count)
+          (not elmo-dop-flush-confirm) t)
+         (progn
+           (message "")
+           (sit-for 0)
+           (let ((queue elmo-dop-queue)
+                 (performed 0)
+                 (i 0)
+                 (num (length elmo-dop-queue))
+                 folder func failure)
+             (while queue
+               ;; now perform pending processes.
+               (setq failure nil)
+               (setq i (+ 1 i))
+               (message "Flushing queue....%d/%d." i num)
+               (condition-case err
+                   (if (not (elmo-folder-plugged-p (nth 0 (car queue))))
+                       (setq failure t)
+                     (setq folder (nth 0 (car queue))
+                           func (nth 1 (car queue)))
+                     (cond
+                      ((string= func "prefetch-msgs")
+                       (elmo-prefetch-msgs
+                        folder
+                        (nth 2 (car queue)))) ;argunemt
+                      ((string= func "append-operations")
+                       (elmo-dop-flush-pending-append-operations
+                        folder nil t))
+                      (t
+                       (elmo-call-func
+                        folder
+                        func
+                        (nth 2 (car queue)) ;argunemt
+                        ))))
+                 (quit  (setq failure t))
+                 (error (setq failure err)))
+               (if failure 
+                   ;; create-folder was failed.
+                   (when (and (string= func "create-folder-maybe")
+                              (elmo-y-or-n-p 
+                               (format 
+                                "Create folder %s failed. Abort creating?"
+                                folder)
+                               (not elmo-dop-flush-confirm) t))
+                     (elmo-dop-save-pending-messages folder)
+                     (setq elmo-dop-queue (delq (car queue) elmo-dop-queue)))
+                 (setq elmo-dop-queue (delq (car queue) elmo-dop-queue))
+                 (setq performed (+ 1 performed)))
+               (setq queue (cdr queue)))
+             (message "%d/%d operation(s) are performed successfully."
+                      performed num)
+             (sit-for 1) ; 
+             (elmo-dop-queue-save)))
+       (if (elmo-y-or-n-p "Clear all pending operations?"
+                          (not elmo-dop-flush-confirm) t)
+           (let ((queue elmo-dop-queue))
+             (while queue
+               (if (string= (nth 1 (car queue)) "append-operations")
+                   (elmo-dop-append-list-save (nth 0 (car queue)) nil))
+               (setq queue (cdr queue)))
+             (setq elmo-dop-queue nil)
+             (message "All pending operations are cleared.")
+             (elmo-dop-queue-save))
+         (message "")))
+      count)))
+
+(defconst elmo-dop-merge-funcs
+  '("delete-msgids"
+    "prefetch-msgs"
+    "unmark-important"
+    "mark-as-important"
+    "mark-as-read"
+    "mark-as-unread"))
+
+(defun elmo-dop-queue-merge ()
+  (let ((queue elmo-dop-queue)
+        new-queue match-queue que)
+    (while (setq que (car queue))
+      (if (and 
+          (member (cadr que) elmo-dop-merge-funcs)
+          (setq match-queue
+                (car (delete nil
+                             (mapcar '(lambda (new-queue)
+                                        (if (and 
+                                             (string= (car que) (car new-queue))
+                                             (string= (cadr que) (cadr new-queue)))
+                                            new-queue))
+                                     new-queue)))))
+         (setcar (cddr match-queue)
+                 (append (nth 2 match-queue) (nth 2 que)))
+       (setq new-queue (append new-queue (list que))))
+      (setq queue (cdr queue)))
+    (setq elmo-dop-queue new-queue)))
+
+(defun elmo-dop-queue-load ()
+  (save-excursion
+    (setq elmo-dop-queue 
+         (elmo-object-load
+          (expand-file-name elmo-queue-filename
+                            elmo-msgdb-dir)))))
+
+(defun elmo-dop-queue-save ()
+  (save-excursion
+    (elmo-object-save
+     (expand-file-name elmo-queue-filename
+                      elmo-msgdb-dir)
+     elmo-dop-queue)))
+
+(defun elmo-dop-lock-message (message-id &optional lock-list)
+  (let ((locked (or lock-list
+                   (elmo-object-load 
+                    (expand-file-name
+                     elmo-msgdb-lock-list-filename
+                     elmo-msgdb-dir)))))
+    (setq locked (cons message-id locked))
+    (elmo-object-save
+     (expand-file-name elmo-msgdb-lock-list-filename
+                      elmo-msgdb-dir)
+     locked)))
+
+(defun elmo-dop-unlock-message (message-id &optional lock-list)
+  (let ((locked (or lock-list
+                   (elmo-object-load 
+                    (expand-file-name elmo-msgdb-lock-list-filename
+                                      elmo-msgdb-dir)))))
+    (setq locked (delete message-id locked))
+    (elmo-object-save
+     (expand-file-name elmo-msgdb-lock-list-filename
+                      elmo-msgdb-dir)
+     locked)))
+
+(defun elmo-dop-lock-list-load ()
+  (elmo-object-load 
+   (expand-file-name elmo-msgdb-lock-list-filename
+                    elmo-msgdb-dir)))
+
+(defun elmo-dop-lock-list-save (lock-list)
+  (elmo-object-save
+   (expand-file-name elmo-msgdb-lock-list-filename
+                    elmo-msgdb-dir)
+   lock-list))
+
+(defun elmo-dop-append-list-load (folder &optional resume)
+  (elmo-object-load 
+   (expand-file-name (if resume
+                        elmo-msgdb-resume-list-filename
+                      elmo-msgdb-append-list-filename)
+                    (elmo-msgdb-expand-path folder))))
+
+(defun elmo-dop-append-list-save (folder append-list &optional resume)
+  (if append-list
+      (elmo-object-save
+       (expand-file-name (if resume
+                            elmo-msgdb-resume-list-filename
+                          elmo-msgdb-append-list-filename)
+                        (elmo-msgdb-expand-path folder))
+       append-list)
+    (condition-case ()
+       (delete-file (expand-file-name (if resume
+                                          elmo-msgdb-resume-list-filename
+                                        elmo-msgdb-append-list-filename)
+                                      (elmo-msgdb-expand-path folder)))
+      (error))))
+
+(defun elmo-dop-deleting-numbers-to-msgids (alist numbers appended)
+  "returns (new-appended . deleting-msgids)."
+  (let (msgid deleting-msgids)
+    (while numbers
+      (setq msgid (cdr (assq (car numbers) alist)))
+      (if (member msgid appended)
+         (setq appended (delete msgid appended))
+       (setq deleting-msgids (append deleting-msgids (list msgid))))
+      (setq numbers (cdr numbers)))
+    (cons appended deleting-msgids)))
+
+(defun elmo-dop-delete-msgs (folder msgs msgdb)
+  (save-match-data
+    (let ((folder-numbers (elmo-make-folder-numbers-list folder msgs))
+         appended-deleting)
+      (while folder-numbers
+       (if (eq (elmo-folder-get-type (car (car folder-numbers))) 
+               'imap4)
+           (if elmo-enable-disconnected-operation
+               (progn
+                 (setq appended-deleting
+                       (elmo-dop-deleting-numbers-to-msgids
+                        (elmo-msgdb-get-number-alist msgdb)
+                        msgs ; virtual number
+                        (elmo-dop-append-list-load folder)))
+                 (if (cdr appended-deleting)
+                     (elmo-dop-queue-append 
+                      (car (car folder-numbers)) ; real folder
+                      "delete-msgids" ;; for secure removal.
+                      (cdr appended-deleting)))
+                 (elmo-dop-append-list-save folder (car appended-deleting)))
+             (error "Unplugged"))
+         ;; not imap4 folder...delete now!
+         (elmo-call-func (car (car folder-numbers)) "delete-msgs"
+                         (cdr (car folder-numbers))))
+       (setq folder-numbers (cdr folder-numbers))))
+    t))
+
+(defun elmo-dop-prefetch-msgs (folder msgs)
+  (save-match-data
+    (elmo-dop-queue-append folder "prefetch-msgs" msgs)))
+
+(defun elmo-dop-list-folder (folder)
+  (if (or (memq (elmo-folder-get-type folder)
+               '(imap4 nntp pop3 filter pipe))
+         (and (elmo-multi-p folder) (not (elmo-folder-local-p folder))))
+      (if elmo-enable-disconnected-operation
+         (let* ((number-alist (elmo-msgdb-number-load
+                               (elmo-msgdb-expand-path folder)))
+                (number-list (mapcar 'car number-alist))
+                (append-list (elmo-dop-append-list-load folder))
+                (append-num (length append-list))
+                alreadies
+                (i 0)
+                max-num)
+           (while append-list
+             (if (rassoc (car append-list) number-alist)
+                 (setq alreadies (append alreadies 
+                                         (list (car append-list)))))
+             (setq append-list (cdr append-list)))
+           (setq append-num (- append-num (length alreadies)))
+           (setq max-num 
+                 (or (nth (max (- (length number-list) 1) 0) 
+                          number-list) 0))
+           (while (< i append-num)
+             (setq number-list
+                   (append number-list
+                           (list (+ max-num i 1))))
+             (setq i (+ 1 i)))
+           number-list)
+       (error "Unplugged"))
+    ;; not imap4 folder...list folder
+    (elmo-call-func folder "list-folder")))
+
+(defun elmo-dop-count-appended (folder)
+  (length (elmo-dop-append-list-load folder)))
+
+(defun elmo-dop-call-func-on-msgs (folder func-name msgs msgdb)
+  (let ((append-list (elmo-dop-append-list-load folder))
+       (number-alist (elmo-msgdb-get-number-alist msgdb))
+       matched)
+    (if (eq (elmo-folder-get-type folder) 'imap4)
+       (progn
+         (while append-list
+           (if (setq matched (car (rassoc (car append-list) number-alist)))
+               (setq msgs (delete matched msgs)))
+           (setq append-list (cdr append-list)))
+         (if msgs
+             (elmo-dop-queue-append folder func-name msgs)))
+      ;; maildir... XXX hard coding.....
+      (if (not (featurep 'elmo-maildir))
+         (require 'maildir))
+      (funcall (intern (format "elmo-maildir-%s" func-name))
+              (elmo-folder-get-spec folder)
+              msgs msgdb))))
+
+(defun elmo-dop-max-of-folder (folder)
+  (if (eq (elmo-folder-get-type folder) 'imap4)
+      (if elmo-enable-disconnected-operation
+         (let* ((number-alist (elmo-msgdb-number-load 
+                                      (elmo-msgdb-expand-path folder)))
+                (number-list (mapcar 'car number-alist))
+                (append-list (elmo-dop-append-list-load folder))
+                (append-num (length append-list))
+                alreadies
+                (i 0)
+                max-num)
+           (while append-list
+             (if (rassoc (car append-list) number-alist)
+                 (setq alreadies (append alreadies 
+                                         (list (car append-list)))))
+             (setq append-list (cdr append-list)))
+           (setq max-num 
+                 (or (nth (max (- (length number-list) 1) 0) number-list)
+                     0))
+           (cons (- (+ max-num append-num) (length alreadies))
+                 (- (+ (length number-list) append-num) (length alreadies))))
+       (error "Unplugged"))
+    ;; not imap4 folder.
+    (elmo-call-func folder "max-of-folder")))
+
+(defun elmo-dop-save-pending-messages (folder)
+  (message (format "Saving queued message in %s..." elmo-lost+found-folder))
+  (let* ((append-list (elmo-dop-append-list-load folder))
+        file-string)
+    (while append-list
+      (when (setq file-string (elmo-get-file-string  ; message string
+                              (elmo-cache-get-path 
+                               (car append-list))))
+       (elmo-append-msg elmo-lost+found-folder file-string)
+       (elmo-dop-unlock-message (car append-list)))
+      (setq append-list (cdr append-list))
+      (elmo-dop-append-list-save folder nil)))
+  (message (format "Saving queued message in %s...done." 
+                  elmo-lost+found-folder)))
+
+(defun elmo-dop-flush-pending-append-operations (folder &optional appends resume)
+  (message "Appending queued messages...")
+  (let* ((append-list (or appends 
+                         (elmo-dop-append-list-load folder)))
+        (appendings append-list)
+        (i 0)
+        (num (length append-list))
+        failure file-string)
+    (when resume
+      ;; Resume msgdb changed by elmo-dop-msgdb-create.
+      (let* ((resumed-list (elmo-dop-append-list-load folder t))
+            (number-alist (elmo-msgdb-number-load 
+                           (elmo-msgdb-expand-path folder)))
+            (appendings append-list)
+            pair dels)
+       (while appendings
+         (if (setq pair (rassoc (car appendings) number-alist))
+             (setq resumed-list (append resumed-list
+                                        (list (car appendings)))))
+         (setq appendings (cdr appendings)))
+       (elmo-dop-append-list-save folder resumed-list t)))
+    (while appendings
+      (setq failure nil)
+      (setq file-string (elmo-get-file-string  ; message string
+                        (elmo-cache-get-path 
+                         (car appendings))))
+      (when file-string
+       (condition-case ()
+           (elmo-append-msg folder file-string (car appendings))
+         (quit  (setq failure t))
+         (error (setq failure t)))
+       (setq i (+ 1 i))
+       (message (format "Appending queued messages...%d" i))
+       (if failure
+           (elmo-append-msg elmo-lost+found-folder
+                            file-string (car appendings))))
+      (elmo-dop-unlock-message (car appendings))
+      (setq appendings (cdr appendings)))
+    ;; All pending append operation is flushed.
+    (elmo-dop-append-list-save folder nil)
+    (elmo-commit folder)
+    (unless resume
+      ;; delete '(folder "append-operations") in elmo-dop-queue.
+      (let (elmo-dop-queue)
+       (elmo-dop-queue-load)
+       (setq elmo-dop-queue (delete (list folder "append-operations" nil)
+                                    elmo-dop-queue))
+       (elmo-dop-queue-save))))
+  (message "Appending queued messages...done."))
+
+(defun elmo-dop-folder-exists-p (folder)
+  (if (and elmo-enable-disconnected-operation
+          (eq (elmo-folder-get-type folder) 'imap4))
+      (file-exists-p (elmo-msgdb-expand-path folder))
+    (elmo-call-func folder "folder-exists-p")))
+
+(defun elmo-dop-create-folder (folder)
+  (if (eq (elmo-folder-get-type folder) 'imap4)
+      (if elmo-enable-disconnected-operation
+         (elmo-dop-queue-append folder "create-folder-maybe" nil)
+       (error "Unplugged"))
+    (elmo-call-func folder "create-folder")))
+
+(defun elmo-dop-delete-folder (folder)
+  (error "Unplugged"))
+
+(defun elmo-dop-rename-folder (old-folder new-folder)
+  (error "Unplugged"))
+
+(defun elmo-dop-append-msg (folder string message-id &optional msg)
+  (if elmo-enable-disconnected-operation
+      (if message-id
+         (progn
+           (unless (elmo-cache-exists-p message-id)
+             (elmo-set-work-buf
+              (insert string)
+              (elmo-cache-save message-id nil folder msg (current-buffer))))
+           (let ((append-list (elmo-dop-append-list-load folder))
+                 (number-alist (elmo-msgdb-number-load 
+                                (elmo-msgdb-expand-path folder))))
+             (when (and ; not in current folder.
+                    (not (rassoc message-id number-alist))
+                    (not (member message-id append-list)))
+               (setq append-list
+                     (append append-list (list message-id)))
+               (elmo-dop-lock-message message-id)
+               (elmo-dop-append-list-save folder append-list)
+               (elmo-dop-queue-append folder "append-operations" nil))
+             t))
+       nil)
+    (error "Unplugged")))
+
+(defalias 'elmo-dop-msgdb-create 'elmo-dop-msgdb-create-as-numlist)
+
+(defun elmo-dop-msgdb-create-as-numlist (folder numlist new-mark already-mark
+                                               seen-mark important-mark
+                                               seen-list)
+  (if (or (eq (elmo-folder-get-type folder) 'imap4)
+         (eq (elmo-folder-get-type folder) 'nntp))
+      (if elmo-enable-disconnected-operation
+         (let* ((num-alist (elmo-msgdb-number-load 
+                            (elmo-msgdb-expand-path folder)))
+                (number-list (mapcar 'car num-alist))
+                (ov (elmo-msgdb-overview-load
+                     (elmo-msgdb-expand-path folder)))
+                (append-list (elmo-dop-append-list-load folder))
+                (num (length numlist))
+                (i 0)
+                overview number-alist mark-alist msgid ov-entity
+                max-num percent seen gmark)
+           (setq max-num
+                 (or (nth (max (- (length number-list) 1) 0) number-list)
+                     0))
+           (while numlist
+             (if (setq msgid
+                       (nth (+ (length append-list) 
+                               (- (car numlist) max-num 1 num))
+                            append-list))
+                 (progn
+                   (setq overview
+                         (elmo-msgdb-append-element
+                          overview
+                          (elmo-localdir-msgdb-create-overview-entity-from-file
+                           (car numlist)
+                           (elmo-cache-get-path msgid))))
+                   (setq number-alist
+                         (elmo-msgdb-number-add number-alist
+                                                (car numlist) msgid))
+                   (setq seen (member msgid seen-list))
+                   (if (setq gmark
+                             (or (elmo-msgdb-global-mark-get msgid)
+                                 (if (elmo-cache-exists-p 
+                                      msgid
+                                      folder
+                                      (car number-alist))
+                                     (if seen
+                                         nil
+                                       already-mark)
+                                   (if seen
+                                       seen-mark)
+                                   new-mark)))
+                       (setq mark-alist
+                             (elmo-msgdb-mark-append
+                              mark-alist (car numlist) gmark))))
+               
+               (when (setq ov-entity (assoc 
+                                      (cdr (assq (car numlist) num-alist))
+                                      ov))
+                 (setq overview
+                       (elmo-msgdb-append-element
+                        overview ov-entity))
+                 (setq number-alist
+                       (elmo-msgdb-number-add number-alist
+                                              (car numlist)
+                                              (car ov-entity)))
+                 (setq seen (member ov-entity seen-list))
+                 (if (setq gmark
+                           (or (elmo-msgdb-global-mark-get (car ov-entity))
+                               (if (elmo-cache-exists-p
+                                    msgid
+                                    folder
+                                    (car ov-entity))
+                                   (if seen
+                                       nil
+                                     already-mark)
+                                 (if seen
+                                     seen-mark)
+                                 new-mark)))
+                     (setq mark-alist
+                           (elmo-msgdb-mark-append
+                            mark-alist (car numlist) gmark)))))
+             (setq i (1+ i))
+             (setq percent (/ (* i 100) num))
+             (elmo-display-progress
+              'elmo-dop-msgdb-create-as-numlist "Creating msgdb..."
+              percent)
+             (setq numlist (cdr numlist)))
+           (list overview number-alist mark-alist))
+       (error "Unplugged"))
+    ;; not imap4 folder...
+    (elmo-call-func folder "msgdb-create" numlist new-mark already-mark
+                   seen-mark important-mark seen-list)))
+
+(provide 'elmo-dop)
+
+;;; elmo-dop.el ends here
diff --git a/elmo/elmo-filter.el b/elmo/elmo-filter.el
new file mode 100644 (file)
index 0000000..3446140
--- /dev/null
@@ -0,0 +1,197 @@
+;;; elmo-filter.el -- Filtered Folder Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/13 18:58:42 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'elmo-msgdb)
+
+(defun elmo-filter-msgdb-create (spec numlist new-mark already-mark 
+                                     seen-mark important-mark seen-list)
+  (if (eq (nth 2 spec) 'partial)
+      (elmo-msgdb-create (nth 2 spec)
+                        numlist 
+                        new-mark
+                        already-mark
+                        seen-mark important-mark seen-list)
+    (elmo-msgdb-create-as-numlist (nth 2 spec)
+                                 numlist
+                                 new-mark
+                                 already-mark
+                                 seen-mark important-mark seen-list)))
+
+(defun elmo-filter-msgdb-create-as-numlist (spec numlist new-mark already-mark
+                                                seen-mark important-mark 
+                                                seen-list)
+  (elmo-msgdb-create-as-numlist (nth 2 spec)
+                               numlist
+                               new-mark
+                               already-mark
+                               seen-mark important-mark seen-list))
+  
+(defun elmo-filter-list-folders (spec &optional hierarchy)
+  nil)
+
+(defun elmo-filter-append-msg (spec string &optional msg no-see)
+  (elmo-call-func (nth 2 spec) "append" string))
+
+(defun elmo-filter-read-msg (spec number outbuf)
+  (elmo-call-func (nth 2 spec) "read-msg" number outbuf))
+
+(defun elmo-filter-delete-msgs (spec msgs)
+  (elmo-call-func (nth 2 spec) "delete-msgs" msgs))
+
+(defun elmo-filter-list-folder (spec)
+  (let ((filter (nth 1 spec))
+       (folder (nth 2 spec))
+       msgs)
+    (cond 
+     ((vectorp filter)
+      (cond ((string= (elmo-filter-key filter)
+                     "last")
+            (setq msgs (elmo-list-folder folder))
+            (nthcdr (max (- (length msgs) 
+                            (string-to-int (elmo-filter-value filter)))
+                         0)
+                    msgs))
+           ((string= (elmo-filter-key filter)
+                     "first")
+            (setq msgs (elmo-list-folder folder))
+            (let ((rest (nthcdr (string-to-int (elmo-filter-value filter) )
+                                msgs)))
+              (mapcar '(lambda (x) 
+                         (delete x msgs)) rest))
+            msgs)))
+     ((listp filter)
+      (elmo-search folder filter)))))
+
+(defun elmo-filter-list-folder-unread (spec mark-alist unread-marks)
+  (let ((filter (nth 1 spec))
+       (folder (nth 2 spec))
+       msgs pair)
+    (cond 
+     ((vectorp filter)
+      (cond ((string= (elmo-filter-key filter)
+                     "last")
+            (setq msgs (elmo-list-folder-unread folder mark-alist 
+                                                unread-marks))
+            (nthcdr (max (- (length msgs) 
+                            (string-to-int (elmo-filter-value filter)))
+                         0)
+                    msgs))
+           ((string= (elmo-filter-key filter)
+                     "first")
+            (setq msgs (elmo-list-folder-unread folder
+                                                mark-alist
+                                                unread-marks))
+            (let ((rest (nthcdr (string-to-int (elmo-filter-value filter) )
+                                msgs)))
+              (mapcar '(lambda (x) 
+                         (delete x msgs)) rest))
+            msgs)))
+     ((listp filter)
+      (elmo-list-filter 
+       (elmo-search folder filter)
+       (elmo-list-folder-unread folder mark-alist unread-marks))))))
+
+(defun elmo-filter-list-folder-important (spec overview)
+  (let ((filter (nth 1 spec))
+       (folder (nth 2 spec))
+       msgs pair)
+    (cond 
+     ((vectorp filter)
+      (cond ((string= (elmo-filter-key filter)
+                     "last")
+            (setq msgs (elmo-list-folder-important folder overview))
+            (nthcdr (max (- (length msgs) 
+                            (string-to-int (elmo-filter-value filter)))
+                         0)
+                    msgs))
+           ((string= (elmo-filter-key filter)
+                     "first")
+            (setq msgs (elmo-list-folder-important folder overview))
+            (let ((rest (nthcdr (string-to-int (elmo-filter-value filter) )
+                                msgs)))
+              (mapcar '(lambda (x) 
+                         (delete x msgs)) rest))
+            msgs)))
+     ((listp filter)
+      (elmo-list-filter 
+       (mapcar
+       '(lambda (x) (elmo-msgdb-overview-entity-get-number x))
+       overview)
+       (elmo-list-folder-important folder overview))))))
+
+(defun elmo-filter-max-of-folder (spec)
+  (elmo-max-of-folder (nth 2 spec)))
+
+(defun elmo-filter-folder-exists-p (spec)
+  (elmo-folder-exists-p (nth 2 spec)))
+
+(defun elmo-filter-folder-creatable-p (spec)
+  (elmo-call-func (nth 2 spec) "folder-creatable-p"))
+
+(defun elmo-filter-create-folder (spec)
+  (elmo-create-folder (nth 2 spec)))
+
+(defun elmo-filter-search (spec condition &optional numlist)
+  ;; search from messages in this folder
+  (elmo-list-filter 
+   numlist 
+   (elmo-call-func (nth 2 spec) "search" condition 
+                  (elmo-filter-list-folder spec))))
+
+(defun elmo-filter-use-cache-p (spec number)
+  (elmo-call-func (nth 2 spec) "use-cache-p" number))
+
+(defun elmo-filter-local-file-p (spec number)
+  (elmo-call-func (nth 2 spec) "local-file-p" number))
+
+(defun elmo-filter-commit (spec)
+  (elmo-commit (nth 2 spec)))
+
+(defun elmo-filter-plugged-p (spec)
+  (elmo-folder-plugged-p (nth 2 spec)))
+
+(defun elmo-filter-set-plugged (spec plugged add)
+  (elmo-folder-set-plugged (nth 2 spec) plugged add))
+
+(defun elmo-filter-get-msg-filename (spec number &optional loc-alist)
+  ;; This function may be called when elmo-filter-local-file-p()
+  ;; returns t.
+  (elmo-call-func (nth 2 spec) "get-msg-filename" number loc-alist))
+
+(defun elmo-filter-sync-number-alist (spec number-alist)
+  (elmo-call-func (nth 2 spec) "sync-number-alist" number-alist))
+
+(defun elmo-filter-server-diff (spec)
+  (elmo-call-func (nth 2 spec) "server-diff"))
+
+(provide 'elmo-filter)
+
+;;; elmo-filter.el ends here
diff --git a/elmo/elmo-imap4.el b/elmo/elmo-imap4.el
new file mode 100644 (file)
index 0000000..66f3d0b
--- /dev/null
@@ -0,0 +1,1588 @@
+;;; elmo-imap4.el -- IMAP4 Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:40:38 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-util)
+(require 'elmo-msgdb)
+(require 'elmo-date)
+(require 'elmo-cache)
+(require 'utf7)
+
+;;; Code:
+(condition-case nil
+    (progn
+      (require 'sasl))
+  (error))
+;; silence byte compiler.
+(eval-when-compile
+  (require 'cl)
+  (condition-case nil
+      (progn
+       (require 'starttls)
+       (require 'sasl))
+    (error))
+  (defun-maybe sasl-cram-md5 (username passphrase challenge))
+  (defun-maybe sasl-digest-md5-digest-response 
+    (digest-challenge username passwd serv-type host &optional realm))
+  (defun-maybe starttls-negotiate (a))  
+  (defun-maybe elmo-generic-list-folder-unread (spec mark-alist unread-marks))
+  (defsubst-maybe utf7-decode-string (string &optional imap) string))
+
+(defvar elmo-imap4-use-lock t
+  "USE IMAP4 with locking process.")
+;;
+;; internal variables
+;;
+(defvar elmo-imap4-seq-prefix "elmo-imap4")
+(defvar elmo-imap4-seqno 0)
+(defvar elmo-imap4-connection-cache nil
+  "Cache of imap connection.")
+(defvar elmo-imap4-use-uid t
+  "Use UID as message number.")
+
+;; buffer local variable
+(defvar elmo-imap4-read-point 0)
+
+(defvar elmo-imap4-extra-namespace-alist
+  '(("^{.*/nntp}.*$" . ".")) ; Default is for UW's remote nntp mailbox...
+  "Extra namespace alist. A list of cons cell like: (REGEXP . DELIMITER) ")
+
+;; buffer local variable
+(defvar elmo-imap4-server-capability nil)
+(defvar elmo-imap4-server-namespace nil)
+
+(defvar elmo-imap4-lock nil)
+
+;; For debugging. 
+(defvar elmo-imap4-debug nil
+  "Non-nil forces IMAP4 folder as debug mode. 
+Debug information is inserted in the buffer \"*IMAP4 DEBUG*\"")
+
+(defsubst elmo-imap4-debug (message &rest args)
+  (if elmo-imap4-debug
+      (with-current-buffer (get-buffer-create "*IMAP4 DEBUG*")
+       (goto-char (point-max))
+       (insert (apply 'format message args) "\n"))))
+
+(defun elmo-imap4-flush-connection ()
+  (interactive)
+  (let ((cache elmo-imap4-connection-cache)
+       buffer process)
+    (while cache
+      (setq buffer (car (cdr (car cache))))
+      (if buffer (kill-buffer buffer))
+      (setq process (car (cdr (cdr (car cache)))))
+      (if process (delete-process process))
+      (setq cache (cdr cache)))
+    (setq elmo-imap4-connection-cache nil)))
+
+(defsubst elmo-imap4-get-process (spec)
+  (elmo-imap4-connection-get-process (elmo-imap4-get-connection spec)))
+
+(defun elmo-imap4-process-folder-list (string)
+  (with-temp-buffer
+    (let ((case-fold-search t)
+         mailbox-list val)
+      (elmo-set-buffer-multibyte nil)
+      (insert string)
+      (goto-char (point-min))
+      ;; XXX This doesn't consider literal name response.
+      (while (re-search-forward 
+             "\\* LIST (\\([^)]*\\)) \"[^\"]*\" \\([^\n]*\\)$" nil t)
+       (unless (string-match "noselect"
+                             (elmo-match-buffer 1))
+         (setq val (elmo-match-buffer 2))
+         (if (string-match "^\"\\(.*\\)\"$" val)
+             (setq val (match-string 1 val)))      
+         (setq mailbox-list 
+               (append mailbox-list 
+                       (list val)))))
+      mailbox-list)))
+
+(defun elmo-imap4-list-folders (spec &optional hierarchy)
+  (save-excursion
+    (let* ((root (elmo-imap4-spec-folder spec))
+          (process (elmo-imap4-get-process spec))
+          (delim (or
+                (cdr
+                 (elmo-string-matched-assoc root
+                                            (save-excursion
+                                              (set-buffer
+                                               (process-buffer process))
+                                              elmo-imap4-server-namespace)))
+                "/"))
+          response result append-serv ssl)
+      ;; Append delimiter
+      (if (and root
+              (not (string= root ""))
+              (not (string-match (concat "\\(.*\\)" 
+                                         (regexp-quote delim)
+                                         "\\'")
+                                 root)))
+         (setq root (concat root delim)))
+      (elmo-imap4-send-command (process-buffer process) 
+                              process
+                              (format "list \"%s\" *" root))
+      (setq response (elmo-imap4-read-response (process-buffer process)
+                                              process))
+      (setq result (elmo-imap4-process-folder-list response))
+      (unless (string= (elmo-imap4-spec-username spec)
+                      elmo-default-imap4-user)
+       (setq append-serv (concat ":" (elmo-imap4-spec-username spec))))
+      (unless (string= (elmo-imap4-spec-hostname spec) 
+                      elmo-default-imap4-server)
+       (setq append-serv (concat append-serv "@" (elmo-imap4-spec-hostname
+                                                  spec))))
+      (unless (eq (elmo-imap4-spec-port spec)
+                 elmo-default-imap4-port)
+       (setq append-serv (concat append-serv ":" 
+                                 (int-to-string 
+                                  (elmo-imap4-spec-port spec)))))
+      (unless (eq (setq ssl (elmo-imap4-spec-ssl spec))
+                 elmo-default-imap4-ssl)
+       (if ssl
+           (setq append-serv (concat append-serv "!")))
+       (if (eq ssl 'starttls)
+           (setq append-serv (concat append-serv "!"))))
+      (mapcar '(lambda (fld)
+                (concat "%" (elmo-imap4-decode-folder-string fld)
+                        (and append-serv 
+                             (eval append-serv))))
+             result))))
+
+(defun elmo-imap4-folder-exists-p (spec)
+  (let ((process (elmo-imap4-get-process spec)))
+    (elmo-imap4-send-command (process-buffer process)
+                            process
+                            (format "status \"%s\" (messages)"
+                                    (elmo-imap4-spec-folder spec)))
+    (elmo-imap4-read-response (process-buffer process) process)))
+
+(defun elmo-imap4-folder-creatable-p (spec)
+  t)
+
+(defun elmo-imap4-create-folder-maybe (spec dummy)
+  "Create folder if necessary."
+  (if (not (elmo-imap4-folder-exists-p spec))
+      (elmo-imap4-create-folder spec)))
+
+(defun elmo-imap4-create-folder (spec)
+  (let ((process (elmo-imap4-get-process spec))
+       (folder (elmo-imap4-spec-folder spec)))
+    (when folder
+;;     For UW imapd 4.6, this workaround is needed to create #mh mailbox.
+;      (if (string-match "^\\(#mh/\\).*[^/]$" folder)
+;        (setq folder (concat folder "/"))) ;; make directory
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format "create %s" folder))
+      (if (null (elmo-imap4-read-response (process-buffer process)
+                                         process))
+         (error "Create folder %s failed" folder)
+       t))))
+
+(defun elmo-imap4-delete-folder (spec)
+  (let ((process (elmo-imap4-get-process spec))
+       msgs)
+    (when (elmo-imap4-spec-folder spec)
+      (when (setq msgs (elmo-imap4-list-folder spec))
+       (elmo-imap4-delete-msgs spec msgs))
+      (elmo-imap4-send-command (process-buffer process) process "close")
+      (elmo-imap4-read-response (process-buffer process) process)
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format "delete %s"
+                                      (elmo-imap4-spec-folder spec)))
+      (if (null (elmo-imap4-read-response (process-buffer process)
+                                         process))
+         (error "Delete folder %s failed" (elmo-imap4-spec-folder spec))
+       t))))
+
+(defun elmo-imap4-rename-folder (old-spec new-spec)
+  (let ((process (elmo-imap4-get-process old-spec)))
+    (when (elmo-imap4-spec-folder old-spec)
+      (elmo-imap4-send-command (process-buffer process) process "close")
+      (elmo-imap4-read-response (process-buffer process) process)
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format "rename %s %s"
+                                      (elmo-imap4-spec-folder old-spec)
+                                      (elmo-imap4-spec-folder new-spec)))
+      (if (null (elmo-imap4-read-response (process-buffer process) process))
+         (error "Rename folder from %s to %s failed"
+                (elmo-imap4-spec-folder old-spec)
+                (elmo-imap4-spec-folder new-spec))
+       t))))
+
+(defun elmo-imap4-max-of-folder (spec)
+  (save-excursion
+    (let* ((process (elmo-imap4-get-process spec))
+          response)
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format "status \"%s\" (uidnext messages)"
+                                      (elmo-imap4-spec-folder spec)))
+      (setq response (elmo-imap4-read-response (process-buffer process)
+                                              process))
+      (when (and response (string-match 
+                          "\\* STATUS [^(]* \\(([^)]*)\\)" response))
+       (setq response (read (downcase (elmo-match-string 1 response))))
+       (cons (- (cadr (memq 'uidnext response)) 1)
+             (cadr (memq 'messages response)))))))
+
+(defun elmo-imap4-get-connection (spec)
+  (let* ((user   (elmo-imap4-spec-username spec))
+        (server (elmo-imap4-spec-hostname spec))
+        (port   (elmo-imap4-spec-port spec))
+        (auth   (elmo-imap4-spec-auth spec))
+        (ssl    (elmo-imap4-spec-ssl spec))
+        (user-at-host (format "%s@%s" user server))
+        ret-val result buffer process proc-stat
+        user-at-host-on-port)
+    (if (not (elmo-plugged-p server port))
+       (error "Unplugged"))
+    (setq user-at-host-on-port 
+         (concat user-at-host ":" (int-to-string port)
+                 (if (eq ssl 'starttls) "!!" (if ssl "!"))))
+    (setq ret-val (assoc user-at-host-on-port
+                        elmo-imap4-connection-cache))
+    (if (and ret-val 
+            (or (eq (setq proc-stat 
+                          (process-status (cadr (cdr ret-val)))) 
+                    'closed)
+                (eq proc-stat 'exit)))
+       ;; connection is closed...
+       (progn
+         (kill-buffer (car (cdr ret-val)))
+         (setq elmo-imap4-connection-cache 
+               (delete ret-val elmo-imap4-connection-cache))
+         (setq ret-val nil)))
+    (if ret-val
+       (progn 
+         (setq ret-val (cdr ret-val)) ;; connection cache exists.
+         ret-val)
+      (setq result
+           (elmo-imap4-open-connection server user auth port
+                                       (elmo-get-passwd user-at-host)
+                                       ssl))
+      (if (null result)
+         (error "Connection failed"))
+      (elmo-imap4-debug "Connected to %s" user-at-host-on-port)
+      (setq buffer (car result))
+      (setq process (cdr result))
+      (when (and process (null buffer))
+       (elmo-remove-passwd user-at-host)
+       (delete-process process)
+       (error "Login failed"))
+      (setq elmo-imap4-connection-cache 
+           (append elmo-imap4-connection-cache 
+                   (list 
+                    (cons user-at-host-on-port
+                          (setq ret-val (list buffer process 
+                                              ""; current-folder..
+                                              ))))))
+      ret-val)))
+
+(defun elmo-imap4-process-filter (process output)
+  (save-match-data 
+    (with-current-buffer (process-buffer process)
+      (goto-char (point-max))
+      (insert output)
+      (forward-line -1)
+      (beginning-of-line)
+      (if (looking-at (concat 
+                      "\\(^" 
+                      elmo-imap4-seq-prefix 
+                      (int-to-string elmo-imap4-seqno)
+                      "\\|^\\* OK\\|^\\* BYE\\'\\|^\\+\\)[^\n]*\n\\'"))
+         (progn
+           (setq elmo-imap4-lock nil) ; unlock process buffer.
+           (elmo-imap4-debug "unlock(%d) %s" elmo-imap4-seqno output))
+       (elmo-imap4-debug "continue(%d) %s" elmo-imap4-seqno output))
+      (goto-char (point-max)))))
+
+(defun elmo-imap4-read-response (buffer process &optional not-command)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         (response-string nil)
+         (response-continue t)
+         (return-value nil)
+         match-end)
+      (while response-continue
+       (goto-char elmo-imap4-read-point)
+       (while (not (search-forward "\r\n" nil t))
+         (accept-process-output process)
+         (goto-char elmo-imap4-read-point))
+       
+       (setq match-end (point))
+       (setq response-string
+             (buffer-substring elmo-imap4-read-point (- match-end 2)))
+       (goto-char elmo-imap4-read-point)
+       (if (looking-at (format "%s[0-9]+ OK.*$\\|\\+.*$" 
+                               elmo-imap4-seq-prefix))
+           (progn (setq response-continue nil)
+                  (setq elmo-imap4-read-point match-end)
+                  (setq return-value 
+                        (if return-value 
+                            (concat return-value "\n" response-string)
+                          response-string)))
+         (if (looking-at (format "\\(. BYE.*\\|%s[0-9]+ \\(NO\\|BAD\\).*\\)$" 
+                                 elmo-imap4-seq-prefix))
+             (progn (setq response-continue nil)
+                    (setq elmo-imap4-read-point match-end)
+                    (elmo-imap4-debug "error response: %s" response-string)
+                    (setq return-value nil))
+           (setq elmo-imap4-read-point match-end)
+           (if not-command
+               (setq response-continue nil))
+           (setq return-value 
+                 (if return-value 
+                     (concat return-value "\n" response-string)
+                   response-string)))
+         (setq elmo-imap4-read-point match-end)))
+      return-value)))
+
+(defun elmo-imap4-read-contents (buffer process)
+  "Read OK response"
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         (response-string nil)
+         match-end)
+      (goto-char elmo-imap4-read-point)
+      (while (not (re-search-forward 
+                  (format "%s[0-9]+ \\(NO\\|BAD\\|OK\\).*$" 
+                          elmo-imap4-seq-prefix)
+                  nil t))
+       (accept-process-output process)
+       (goto-char elmo-imap4-read-point))
+      (beginning-of-line)
+      (setq match-end (point))
+      (setq response-string (buffer-substring 
+                            elmo-imap4-read-point match-end))
+      (if (eq (length response-string) 0)
+         nil
+       response-string))))
+
+(defun elmo-imap4-read-bytes (buffer process bytes)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         (return-value nil)
+         start gc-message)
+      (setq start elmo-imap4-read-point);; starting point
+      (while (< (point-max) (+ start bytes))
+       (accept-process-output process))
+      (setq return-value (buffer-substring
+                         start (+ start bytes)))
+      (setq return-value (elmo-delete-cr return-value))
+      (setq elmo-imap4-read-point bytes)
+      return-value)))
+
+(defun elmo-imap4-read-body (buffer process bytes outbuf)
+  (let (start gc-message ret-val)
+    (with-current-buffer buffer
+      (setq start elmo-imap4-read-point)
+      (while (< (point-max) (+ start bytes))
+       (accept-process-output process))      
+      (with-current-buffer outbuf
+       (erase-buffer)
+       (insert-buffer-substring buffer start (+ start bytes))
+       (setq ret-val (elmo-delete-cr-get-content-type)))
+      (setq elmo-imap4-read-point (+ start bytes))
+      ret-val)))
+  
+(defun elmo-imap4-noop (connection)
+  (let ((buffer (car connection))
+       (process (cadr connection)))
+    (save-excursion
+      (elmo-imap4-send-command buffer 
+                              process "noop")
+      (elmo-imap4-read-response buffer process))))
+
+(defun elmo-imap4-commit (spec)
+  (save-excursion
+    (let ((connection (elmo-imap4-get-connection spec))
+         response ret-val beg end)
+      (and (not (null (elmo-imap4-spec-folder spec)))
+          (if (not (string= (elmo-imap4-connection-get-cwf connection) 
+                            (elmo-imap4-spec-folder spec)))
+              (if (null (setq response 
+                              (elmo-imap4-select-folder 
+                               (elmo-imap4-spec-folder spec)
+                               connection)))
+                  (error "Select folder failed"))
+            (if elmo-imap4-use-select-to-update-status
+                (elmo-imap4-select-folder 
+                 (elmo-imap4-spec-folder spec)
+                 connection) 
+              (elmo-imap4-check connection)))))))
+
+(defun elmo-imap4-check (connection)
+  (let ((process (elmo-imap4-connection-get-process connection)))
+    (save-excursion
+      (elmo-imap4-send-command (process-buffer process) 
+                              process "check")
+      (elmo-imap4-read-response (process-buffer process) process))))
+
+(defun elmo-imap4-select-folder (folder connection)
+  (let ((process (elmo-imap4-connection-get-process connection))
+       response)
+    (save-excursion
+      (unwind-protect
+         (progn
+           (elmo-imap4-send-command (process-buffer process)
+                                    process (format "select \"%s\"" 
+                                                    folder))
+           (setq response (elmo-imap4-read-response 
+                           (process-buffer process) process)))
+       (if (null response)
+           (progn
+             (setcar (cddr connection) nil)
+             (error "Select folder failed"))
+         (setcar (cddr connection) folder))))
+    response))
+
+(defun elmo-imap4-check-validity (spec validity-file)
+  "get uidvalidity value from server and compare it with validity-file."
+  (let* ((process (elmo-imap4-get-process spec))
+        response)
+    (save-excursion
+      (elmo-imap4-send-command (process-buffer process)
+                              process 
+                              (format "status \"%s\" (uidvalidity)" 
+                                      (elmo-imap4-spec-folder spec)))
+      (setq response (elmo-imap4-read-response 
+                     (process-buffer process) process))
+      (if (string-match "UIDVALIDITY \\([0-9]+\\)" response)
+         (string= (elmo-get-file-string validity-file)
+                  (elmo-match-string 1 response))
+       nil))))
+
+(defun elmo-imap4-sync-validity  (spec validity-file)
+  "get uidvalidity value from server and save it to validity-file."
+  (let* ((process (elmo-imap4-get-process spec))
+        response)
+    (save-excursion
+      (elmo-imap4-send-command (process-buffer process)
+                              process 
+                              (format "status \"%s\" (uidvalidity)" 
+                                      (elmo-imap4-spec-folder spec)))
+      (setq response (elmo-imap4-read-response 
+                     (process-buffer process) process))
+      (if (string-match "UIDVALIDITY \\([0-9]+\\)" response)
+         (progn
+           (elmo-save-string
+            (elmo-match-string 1 response)
+            validity-file)
+           t)
+       nil))))
+
+(defsubst elmo-imap4-list (spec str)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          response ret-val beg end)
+      (and (elmo-imap4-spec-folder spec)
+          (if (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (if (null (setq response 
+                              (elmo-imap4-select-folder 
+                               (elmo-imap4-spec-folder spec)
+                               connection)))
+                  (error "Select folder failed"))
+            ;; for status update.
+            (if elmo-imap4-use-select-to-update-status
+                (elmo-imap4-select-folder (elmo-imap4-spec-folder spec) 
+                                          connection)
+              (unless (elmo-imap4-check connection)
+                ;; Check failed...not selected??
+                (elmo-imap4-select-folder (elmo-imap4-spec-folder spec) 
+                                          connection)))))
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format (if elmo-imap4-use-uid 
+                                          "uid search %s"
+                                        "search %s") str))
+      (setq response (elmo-imap4-read-response (process-buffer process)
+                                              process))
+      (if (and response (string-match "\\* SEARCH" response))
+         (progn
+           (setq response (substring response (match-end 0)))
+           (if (string-match "\n" response)
+               (progn
+                 (setq end (match-end 0))
+                 (setq ret-val (read (concat "(" (substring 
+                                                  response 
+                                                  0 end) ")"))))
+             (error "SEARCH failed"))))
+      ret-val)))
+
+(defun elmo-imap4-list-folder (spec)
+  (elmo-imap4-list spec "all"))
+
+(defun elmo-imap4-list-folder-unread (spec mark-alist unread-marks)
+  (if (elmo-imap4-use-flag-p spec)
+      (elmo-imap4-list spec "unseen")
+    (elmo-generic-list-folder-unread spec mark-alist unread-marks)))
+
+(defun elmo-imap4-list-folder-important (spec overview)
+  (and (elmo-imap4-use-flag-p spec)
+       (elmo-imap4-list spec "flagged")))
+
+(defun elmo-imap4-search-internal (process buffer filter)
+  (let ((search-key (elmo-filter-key filter))
+       word response)
+    (cond
+     ((or (string= "since" search-key)
+         (string= "before" search-key))
+      (setq search-key (concat "sent" search-key))
+      (elmo-imap4-send-command buffer process
+                              (format 
+                               (if elmo-imap4-use-uid
+                                   "uid search %s %s" 
+                                 " search %s %s")
+                               search-key
+                               (elmo-date-get-description
+                                (elmo-date-get-datevec 
+                                 (elmo-filter-value filter))))))
+     (t
+      (setq word (encode-mime-charset-string (elmo-filter-value filter) 
+                                            elmo-search-mime-charset))
+      (elmo-imap4-send-command buffer process 
+                              (format 
+                               (if elmo-imap4-use-uid
+                                   "uid search CHARSET %s%s %s {%d}" 
+                                 " search CHARSET %s%s %s {%d}")
+                               (symbol-name elmo-search-mime-charset)
+                               (if (eq (elmo-filter-type filter) 'unmatch)
+                                   " not" "")
+                               (elmo-filter-key filter)
+                               (length word)))
+      (if (null (elmo-imap4-read-response buffer process t))
+         (error "Searching failed because of server capability??"))
+      (elmo-imap4-send-string buffer process word)))
+    (if (null (setq response (elmo-imap4-read-response buffer process)))
+       (error "Search failed for %s" (elmo-filter-key filter)))
+    (if (string-match "^\\* SEARCH\\([^\n]*\\)$" response)
+       (read (concat "(" (elmo-match-string 1 response) ")"))
+      (error "SEARCH failed"))))
+
+(defun elmo-imap4-search (spec condition &optional from-msgs)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          response ret-val len word)
+      (if (and (elmo-imap4-spec-folder spec)
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (null (elmo-imap4-select-folder 
+                     (elmo-imap4-spec-folder spec) connection)))
+         (error "Select folder failed"))
+      (while condition
+       (setq response (elmo-imap4-search-internal process
+                                                  (process-buffer process)
+                                                  (car condition)))
+       (setq ret-val (nconc ret-val response))
+       (setq condition (cdr condition)))
+      (if from-msgs
+         (elmo-list-filter 
+          from-msgs
+          (elmo-uniq-list (sort ret-val '<)))
+       (elmo-uniq-list (sort ret-val '<))))))
+
+(defsubst elmo-imap4-value (value)
+  (if (eq value 'NIL) nil
+    value))
+
+(defmacro elmo-imap4-nth (pos list)
+  (` (let ((value (nth (, pos) (, list))))
+       (if (eq 'NIL value)
+          nil
+        value))))
+  
+(defun elmo-imap4-use-flag-p (spec)
+  (not (string-match elmo-imap4-disuse-server-flag-mailbox-regexp
+                    (elmo-imap4-spec-folder spec))))
+
+(defsubst elmo-imap4-make-address (name mbox host)
+  (cond (name
+        (concat name " <" mbox "@" host ">"))
+       (t
+        (concat mbox "@" host))))
+
+(static-cond 
+ ((fboundp 'float)
+  ;; Emacs can parse dot symbol.
+  (defvar elmo-imap4-rfc822-size "RFC822\.SIZE")
+  (defvar elmo-imap4-header-fields "HEADER\.FIELDS")
+  (defmacro elmo-imap4-replace-dot-symbols ()) ;; noop
+  )
+ (t 
+  ;; Cannot parse dot symbol, replace it.
+  (defvar elmo-imap4-rfc822-size "RFC822_SIZE")
+  (defvar elmo-imap4-header-fields "HEADER_FIELDS")
+  (defmacro elmo-imap4-replace-dot-symbols ()
+    (goto-char (point-min))
+    (while (re-search-forward "RFC822\\.SIZE" nil t)
+      (replace-match elmo-imap4-rfc822-size))
+    (goto-char (point-min))
+    (while (re-search-forward "HEADER\\.FIELDS" nil t)
+      (replace-match elmo-imap4-header-fields))
+    (goto-char (point-min)))))
+
+(defsubst elmo-imap4-make-attributes-object (string)
+  (save-match-data
+    (elmo-set-work-buf
+     (elmo-set-buffer-multibyte nil)
+     (insert string)
+     (goto-char (point-min))
+     (let ((case-fold-search t))
+       (goto-char (point-min))
+       (while (re-search-forward "{\\([0-9]+\\)}\r\n" nil t)
+        (let (str)
+          (goto-char (+ (point) 
+                        (string-to-int (elmo-match-buffer 1))))
+          (setq str (save-match-data 
+                      (elmo-replace-in-string 
+                       (buffer-substring (match-end 0) (point))
+                       "\r" "")))
+          (delete-region (match-beginning 0) (point))
+          (insert (prin1-to-string str))))
+       (goto-char (point-min))
+       (elmo-imap4-replace-dot-symbols)
+       (read (current-buffer))))))
+
+
+(defun elmo-imap4-parse-overview-string (string)
+  (if (null string)
+      (error "Getting overview failed"))
+  (with-temp-buffer
+    (let (ret-val beg attr number)
+      (elmo-set-buffer-multibyte nil)
+      (insert string)
+      (goto-char (point-min))
+      (setq beg (point))
+      (if (re-search-forward "^\* \\([0-9]+\\) FETCH" 
+                            nil t)
+         (progn
+           (setq beg (point))
+           (unless elmo-imap4-use-uid
+             (setq number (string-to-int (elmo-match-buffer 1))))
+           (while (re-search-forward 
+                   "^\* \\([0-9]+\\) FETCH" 
+                   nil t)
+             (setq attr (elmo-imap4-make-attributes-object
+                         (buffer-substring beg (match-beginning 0))))
+             (setq beg (point))
+             (unless elmo-imap4-use-uid
+               (setq attr(nconc (list 'UID number) attr))
+               (setq number (string-to-int (elmo-match-buffer 1))))
+             (setq ret-val (cons attr ret-val)))
+           ;; process last one...
+           (setq attr (elmo-imap4-make-attributes-object
+                       (buffer-substring beg (point-max))))
+           (unless elmo-imap4-use-uid
+             (setq attr(nconc (list 'UID number) attr)))
+           (setq ret-val (cons attr ret-val))))
+      (nreverse ret-val))))
+
+(defun elmo-imap4-create-msgdb-from-overview-string (str
+                                                    folder
+                                                    new-mark
+                                                    already-mark
+                                                    seen-mark
+                                                    important-mark
+                                                    seen-list
+                                                    &optional numlist)
+  (let ((case-fold-search t)
+       (size-sym (intern elmo-imap4-rfc822-size))
+       overview attr-list attr pair section
+       number important message-id from-list from-string
+       to-string cc-string
+       number-alist mark-alist
+       reference subject date-string size flags gmark seen
+       index extras extra-fields sym value)
+    (setq attr-list (elmo-imap4-parse-overview-string str))
+    (while attr-list
+      (setq attr (car attr-list))
+      ;; Remove section data. (origin octed is not considered.(OK?))
+      (setq section (cadr (memq 'BODY attr)))
+      (if (vectorp section)
+         (delq section attr))
+      ;; number
+      (setq number (cadr (memq 'UID attr)))
+      (when (or (null numlist)
+               (memq number numlist))
+       (while attr
+         (setq sym (car attr))
+         (setq value (cadr attr))
+         (setq attr (cdr (cdr attr)))
+         (cond
+          ((eq sym 'UID))
+          ;; noop
+          ((eq sym 'FLAGS)
+           (setq flags value))
+          ((eq sym size-sym)
+           (setq size value))
+          ((eq sym 'BODY)
+           (setq extra-fields (elmo-collect-field-from-string value t)))
+          ((eq sym 'ENVELOPE)
+           ;; According to rfc2060, 
+           ;; 0 date, 1 subject, 2 from, 3 sender,
+           ;; 4 reply-to, 5 to, 6 cc, 7 bcc, 8 in-reply-to, 9 message-id.
+           (setq date-string (elmo-imap4-nth 0 value))
+           (setq subject (elmo-mime-string (or (elmo-imap4-nth 1 value)
+                                               elmo-no-subject)))
+           (setq from-list (car (elmo-imap4-nth 2 value)))
+           (setq from-string (or
+                              (and (or (elmo-imap4-nth 0 from-list)
+                                       (elmo-imap4-nth 2 from-list)
+                                       (elmo-imap4-nth 3 from-list))
+                                   (elmo-delete-char 
+                                    ?\"
+                                    (elmo-imap4-make-address
+                                     (elmo-imap4-nth 0 from-list)
+                                     (elmo-imap4-nth 2 from-list)
+                                     (elmo-imap4-nth 3 from-list))
+                                    'uni))
+                              elmo-no-from))
+           (setq to-string (mapconcat
+                            '(lambda (to)
+                               (elmo-imap4-make-address
+                                (elmo-imap4-nth 0 to)
+                                (elmo-imap4-nth 2 to)
+                                (elmo-imap4-nth 3 to)))
+                            (elmo-imap4-nth 5 value) ","))
+           (setq cc-string (mapconcat
+                            '(lambda (cc)
+                               (elmo-imap4-make-address
+                                (elmo-imap4-nth 0 cc)
+                                (elmo-imap4-nth 2 cc)
+                                (elmo-imap4-nth 3 cc)))
+                            (elmo-imap4-nth 6 value) ","))     
+           (setq reference (elmo-msgdb-get-last-message-id
+                            (elmo-imap4-nth 8 value)))
+           (setq message-id (elmo-imap4-nth 9 value)))))
+       (when (setq pair (assoc "references" extra-fields))
+         (setq extra-fields (delq pair extra-fields)))
+       (unless reference
+         (setq reference (elmo-msgdb-get-last-message-id (cdr pair))))
+       (setq overview
+             (elmo-msgdb-append-element
+              overview
+              (cons message-id
+                    (vector number
+                            reference
+                            (elmo-mime-string from-string)
+                            (elmo-mime-string subject)
+                            date-string
+                            to-string
+                            cc-string
+                            size
+                            extra-fields))))
+       (if (memq 'Flagged flags)
+           (elmo-msgdb-global-mark-set message-id important-mark))
+       (setq number-alist
+             (elmo-msgdb-number-add number-alist number message-id))
+       (setq seen (member message-id seen-list))
+       (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                           (if (elmo-cache-exists-p message-id) ;; XXX
+                               (if (or (memq 'Seen flags) seen)
+                                   nil
+                                 already-mark)
+                             (if (or (memq 'Seen flags) seen)
+                                 (if elmo-imap4-use-cache
+                                     seen-mark)
+                               new-mark))))
+           (setq mark-alist (elmo-msgdb-mark-append
+                             mark-alist
+                             number
+                             ;; managing mark with message-id is evil.
+                             gmark))))
+      (setq attr-list (cdr attr-list)))
+    (list overview number-alist mark-alist)))
+
+(defun elmo-imap4-add-to-cont-list (cont-list msg)
+  (let ((elist cont-list)
+       (ret-val cont-list)
+       entity found)
+    (while (and elist (not found))
+      (setq entity (car elist))
+      (cond 
+       ((and (consp entity)
+            (eq (+ 1 (cdr entity)) msg))
+       (setcdr entity msg)
+       (setq found t))
+       ((and (integerp entity)
+            (eq (+ 1 entity) msg))
+       (setcar elist (cons entity msg))
+       (setq found t))
+       ((or (and (integerp entity) (eq entity msg))
+           (and (consp entity) 
+                (<= (car entity) msg)
+                (<= msg (cdr entity)))) ; included
+       (setq found t))); noop
+      (setq elist (cdr elist)))
+    (if (not found)
+       (setq ret-val (append cont-list (list msg))))
+    ret-val))
+
+(defun elmo-imap4-make-number-set-list (msg-list &optional chop-length)
+  "Make RFC2060's message set specifier from MSG-LIST.
+Returns a list of (NUMBER . SET-STRING).
+SET-STRING is the message set specifier described in RFC2060.
+NUMBER is contained message number in SET-STRING.
+Every SET-STRING does not contain number of messages longer than CHOP-LENGTH.
+If CHOP-LENGTH is not specified, message set is not chopped."
+  (let (count cont-list set-list)
+    (setq msg-list (sort msg-list '<))
+    (while msg-list
+      (setq cont-list nil)
+      (setq count 0)
+      (unless chop-length
+       (setq chop-length (length msg-list)))
+      (while (and (not (null msg-list))
+                 (< count chop-length))
+       (setq cont-list 
+             (elmo-imap4-add-to-cont-list 
+              cont-list (car msg-list)))
+       (incf count)
+       (setq msg-list (cdr msg-list)))
+      (setq set-list 
+           (cons
+            (cons
+             count
+             (mapconcat
+              (lambda (x)
+                (cond ((consp x)
+                       (format "%s:%s" (car x) (cdr x)))
+                      ((integerp x)
+                       (int-to-string x))))
+              cont-list
+              ","))
+            set-list)))
+    (nreverse set-list)))
+
+;;
+;; set mark
+;; read-mark -> "\\Seen"
+;; important -> "\\Flagged"
+;; 
+;; (delete -> \\Deleted)
+(defun elmo-imap4-mark-set-on-msgs (spec msgs mark &optional unmark no-expunge)
+  "SET flag of MSGS as MARK.
+If optional argument UNMARK is non-nil, unmark."
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          (msg-list (copy-sequence msgs))
+          set-list ent)
+      (if (and (elmo-imap4-spec-folder spec)
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (null (elmo-imap4-select-folder 
+                     (elmo-imap4-spec-folder spec) connection)))
+         (error "Select folder failed"))
+      (setq set-list (elmo-imap4-make-number-set-list msg-list))
+      (when set-list
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format 
+                                 (if elmo-imap4-use-uid 
+                                     "uid store %s %sflags.silent (%s)"
+                                   "store %s %sflags.silent (%s)")
+                                 (cdr (car set-list))
+                                 (if unmark "-" "+")
+                                 mark))
+       (unless (elmo-imap4-read-response (process-buffer process) process)
+         (error "Store %s flag failed" mark))
+       (unless no-expunge
+         (elmo-imap4-send-command 
+          (process-buffer process) process "expunge")
+         (unless (elmo-imap4-read-response (process-buffer process) process)
+           (error "Expunge failed"))))
+      t)))
+
+(defun elmo-imap4-mark-as-important (spec msgs)
+  (and (elmo-imap4-use-flag-p spec)
+       (elmo-imap4-mark-set-on-msgs spec msgs "\\Flagged" nil 'no-expunge)))
+
+(defun elmo-imap4-mark-as-read (spec msgs)
+  (and (elmo-imap4-use-flag-p spec)
+       (elmo-imap4-mark-set-on-msgs spec msgs "\\Seen" nil 'no-expunge)))
+
+(defun elmo-imap4-unmark-important (spec msgs)
+  (and (elmo-imap4-use-flag-p spec)
+       (elmo-imap4-mark-set-on-msgs spec msgs "\\Flagged" 'unmark 
+                                   'no-expunge)))
+
+(defun elmo-imap4-mark-as-unread (spec msgs)
+  (and (elmo-imap4-use-flag-p spec)
+       (elmo-imap4-mark-set-on-msgs spec msgs "\\Seen" 'unmark 'no-expunge)))
+
+(defun elmo-imap4-delete-msgs (spec msgs)
+  (elmo-imap4-mark-set-on-msgs spec msgs "\\Deleted"))
+
+(defun elmo-imap4-delete-msgs-no-expunge (spec msgs)
+  (elmo-imap4-mark-set-on-msgs spec msgs "\\Deleted" nil 'no-expunge))
+
+(defun elmo-imap4-msgdb-create-as-numlist (spec numlist new-mark already-mark 
+                                               seen-mark important-mark 
+                                               seen-list)
+  "Create msgdb for SPEC for NUMLIST."
+  (elmo-imap4-msgdb-create spec numlist new-mark already-mark
+                          seen-mark important-mark seen-list t))
+
+(defun elmo-imap4-msgdb-create (spec numlist new-mark already-mark seen-mark 
+                                    important-mark seen-list &optional as-num)
+  "Create msgdb for SPEC."
+  (when numlist
+    (save-excursion
+      (let* ((connection (elmo-imap4-get-connection spec))
+            (process    (elmo-imap4-connection-get-process connection))
+            (filter     (and as-num numlist))
+            (case-fold-search t)
+            (extra-fields (if elmo-msgdb-extra-fields
+                              (concat " " (mapconcat
+                                           'identity
+                                           elmo-msgdb-extra-fields " "))
+                            ""))
+            rfc2060 count ret-val set-list ov-str length)
+       (setq rfc2060 (with-current-buffer (process-buffer process)
+                       (if (memq 'imap4rev1 elmo-imap4-server-capability)
+                           t
+                         (if (memq 'imap4 elmo-imap4-server-capability)
+                             nil
+                           (error "No IMAP4 capability!!")))))
+       (setq count 0)
+       (setq length (length numlist))
+       (setq set-list (elmo-imap4-make-number-set-list 
+                       numlist
+                       elmo-imap4-overview-fetch-chop-length))
+       (message "Getting overview...")
+       (if (and (elmo-imap4-spec-folder spec)
+                (not (string= (elmo-imap4-connection-get-cwf connection)
+                              (elmo-imap4-spec-folder spec)))
+                (null (elmo-imap4-select-folder 
+                       (elmo-imap4-spec-folder spec) connection)))
+           (error "Select imap folder %s failed" 
+                  (elmo-imap4-spec-folder spec)))
+       (while set-list
+         (elmo-imap4-send-command 
+          (process-buffer process)
+          process
+          ;; get overview entity from IMAP4
+          (format 
+           (if rfc2060
+               (concat
+                (if elmo-imap4-use-uid "uid " "")
+                "fetch %s (envelope body.peek[header.fields (references"
+                extra-fields
+                ")] rfc822.size flags)")
+             (concat
+              (if elmo-imap4-use-uid "uid " "")
+              "fetch %s (envelope rfc822.size flags)"))
+           (cdr (car set-list))))
+         ;; process string while waiting for response
+         (with-current-buffer (process-buffer process)
+           (if ov-str
+               (setq ret-val
+                     (elmo-msgdb-append 
+                      ret-val
+                      (elmo-imap4-create-msgdb-from-overview-string 
+                       ov-str
+                       (elmo-imap4-spec-folder spec)
+                       new-mark already-mark seen-mark important-mark
+                       seen-list filter)))))
+         (setq count (+ count (car (car set-list))))
+         (setq ov-str (elmo-imap4-read-contents (process-buffer process)
+                                                process))
+         (elmo-display-progress
+          'elmo-imap4-msgdb-create "Getting overview..." 
+          (/ (* count 100) length))
+         (setq set-list (cdr set-list)))
+       ;; process last one.
+       (with-current-buffer (process-buffer process)
+         (if ov-str
+             (setq ret-val
+                   (elmo-msgdb-append 
+                    ret-val
+                    (elmo-imap4-create-msgdb-from-overview-string 
+                     ov-str 
+                     (elmo-imap4-spec-folder spec)
+                     new-mark already-mark seen-mark important-mark
+                     seen-list filter)))))
+       (message "Getting overview...done.")
+       ret-val))))
+
+(defun elmo-imap4-parse-response (string)
+  (if (string-match "^\\*\\(.*\\)$" string)
+      (read (concat "(" (elmo-match-string 1 string) ")"))))
+
+(defun elmo-imap4-parse-capability (string)
+  (if (string-match "^\\*\\(.*\\)$" string)
+      (read (concat "(" (downcase (elmo-match-string 1 string)) ")"))))
+
+(defun elmo-imap4-parse-namespace (obj)
+  (let ((ns (cdr obj))
+       (i 0)
+       prefix delim
+       cur namespace-alist)
+    ;; 0: personal, 1: other, 2: shared
+    (while (< i 3)
+      (setq cur (elmo-imap4-nth i ns))
+      (incf i)
+      (while cur
+       (setq prefix (elmo-imap4-nth 0 (car cur)))
+       (setq delim    (elmo-imap4-nth 1 (car cur)))
+       (if (and prefix delim
+                (string-match (concat "\\(.*\\)" 
+                                      (regexp-quote delim)
+                                      "\\'")
+                              prefix))
+           (setq prefix (substring prefix (match-beginning 1)(match-end 1))))
+       (setq namespace-alist (nconc namespace-alist
+                                    (list (cons
+                                           (concat "^" (regexp-quote prefix)
+                                                   ".*$")
+                                           delim))))
+       (setq cur (cdr cur))))
+    (append
+     elmo-imap4-extra-namespace-alist
+     (sort namespace-alist
+          '(lambda (x y)
+             (> (length (car x))
+                (length (car y))))))))
+
+(defun elmo-imap4-open-connection (imap4-server user auth port passphrase ssl)
+  "Open Imap connection and returns 
+the list of (process session-buffer current-working-folder).
+Return nil if connection failed."
+  (let ((process nil)
+       (host imap4-server)
+       process-buffer ret-val response capability)
+    (catch 'done
+      (as-binary-process
+       (setq process-buffer
+            (get-buffer-create (format " *IMAP session to %s:%d" host port)))
+       (save-excursion
+        (set-buffer process-buffer)
+        (elmo-set-buffer-multibyte nil)         
+        (make-variable-buffer-local 'elmo-imap4-server-capability)
+        (make-variable-buffer-local 'elmo-imap4-lock)
+        (erase-buffer))
+       (setq process
+            (elmo-open-network-stream "IMAP" process-buffer host port ssl))
+       (and (null process) (throw 'done nil))
+       (set-process-filter process 'elmo-imap4-process-filter)
+       ;; flush connections when exiting...
+       (save-excursion
+        (set-buffer process-buffer)
+        (make-local-variable 'elmo-imap4-read-point)
+        (setq elmo-imap4-read-point (point-min))
+        (if (null (setq response
+                        (elmo-imap4-read-response process-buffer process t)))
+            (throw 'done nil)
+          (when (string-match "^\\* PREAUTH" response)
+            (setq ret-val (cons process-buffer process))
+            (throw 'done nil)))
+        (elmo-imap4-send-command process-buffer process "capability")
+        (setq elmo-imap4-server-capability
+              (elmo-imap4-parse-capability
+               (elmo-imap4-read-response process-buffer process)))
+        (setq capability elmo-imap4-server-capability)
+        (if (eq ssl 'starttls)
+            (if (and (memq 'starttls capability)
+                     (progn
+                       (elmo-imap4-send-command process-buffer process "starttls")
+                       (setq response
+                             (elmo-imap4-read-response process-buffer process)))
+                     
+                     (string-match 
+                      (concat "^\\(" elmo-imap4-seq-prefix 
+                              (int-to-string elmo-imap4-seqno)
+                              "\\|\\*\\) OK")
+                      response))
+                (starttls-negotiate process)
+              (error "STARTTLS aborted")))
+        (if (or (and (string= "auth" auth)
+                     (not (memq 'auth=login capability)))
+                (and (string= "cram-md5" auth)
+                     (not (memq 'auth=cram-md5 capability)))
+                (and (string= "digest-md5" auth)
+                     (not (memq 'auth=digest-md5 capability))))
+            (if (or elmo-imap4-force-login
+                    (y-or-n-p 
+                     (format 
+                      "There's no %s capability in server. continue?" auth)))
+                (setq auth "login")
+              (error "Login aborted")))
+        (cond 
+         ((string= "auth" auth)
+          (elmo-imap4-send-command
+           process-buffer process "authenticate login" 'no-lock)
+          ;; Base64 
+          (when (null (elmo-imap4-read-response process-buffer process t))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (elmo-imap4-send-string
+           process-buffer process (elmo-base64-encode-string user))
+          (when (null (elmo-imap4-read-response process-buffer process t))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (elmo-imap4-send-string
+           process-buffer process (elmo-base64-encode-string passphrase))
+          (when (null (elmo-imap4-read-response process-buffer process))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (setq ret-val (cons process-buffer process)))
+         ((string= "cram-md5" auth)
+          (elmo-imap4-send-command 
+           process-buffer process "authenticate cram-md5" 'no-lock)
+          (when (null (setq response 
+                            (elmo-imap4-read-response 
+                             process-buffer process t)))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (setq response (cadr (split-string response " ")))
+          (elmo-imap4-send-string
+           process-buffer process 
+           (elmo-base64-encode-string
+            (sasl-cram-md5 user passphrase 
+                           (elmo-base64-decode-string response))))
+          (when (null (elmo-imap4-read-response process-buffer process))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (setq ret-val (cons process-buffer process)))
+         ((string= "digest-md5" auth)
+          (elmo-imap4-send-command 
+           process-buffer process "authenticate digest-md5" 'no-lock)
+          (when (null (setq response
+                            (elmo-imap4-read-response 
+                             process-buffer process t)))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (setq response (cadr (split-string response " ")))
+          (elmo-imap4-send-string
+           process-buffer process
+           (elmo-base64-encode-string
+            (sasl-digest-md5-digest-response
+             (elmo-base64-decode-string response)
+             user passphrase "imap" host)
+            'no-line-break))
+          (when (null (elmo-imap4-read-response
+                       process-buffer process t))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (elmo-imap4-send-string process-buffer process "")
+          (when (null (elmo-imap4-read-response process-buffer process))
+            (setq ret-val (cons nil process))
+            (throw 'done nil))
+          (setq ret-val (cons process-buffer process)))
+         (t ;; not auth... try login
+          (elmo-imap4-send-command 
+           process-buffer process 
+           (format "login %s \"%s\"" user 
+                   (elmo-replace-in-string passphrase
+                                           "\"" "\\\\\"")) 
+           nil 'no-log) ;; No LOGGING.
+          (if (null (elmo-imap4-read-response process-buffer process))
+              (setq ret-val (cons nil process))
+            (setq ret-val (cons process-buffer process)))))
+        ;; get namespace of server if possible.
+        (when (memq 'namespace elmo-imap4-server-capability)
+          (elmo-imap4-send-command process-buffer process "namespace")
+          (setq elmo-imap4-server-namespace
+                (elmo-imap4-parse-namespace
+                 (elmo-imap4-parse-response
+                  (elmo-imap4-read-response process-buffer process))))))))
+    ret-val))
+           
+(defun elmo-imap4-get-seqno ()
+  (setq elmo-imap4-seqno (+ 1 elmo-imap4-seqno)))
+
+(defun elmo-imap4-setup-send-buffer (string)
+  (let ((tmp-buf (get-buffer-create " *elmo-imap4-setup-send-buffer*")))
+    (save-excursion
+      (save-match-data
+       (set-buffer tmp-buf)
+       (erase-buffer)
+       (elmo-set-buffer-multibyte nil)
+       (insert string)
+       (goto-char (point-min))
+       (if (eq (re-search-forward "^$" nil t) 
+               (point-max))
+           (insert "\n"))
+       (goto-char (point-min))
+       (while (search-forward "\n" nil t)
+         (replace-match "\r\n"))))
+    tmp-buf))
+
+(defun elmo-imap4-send-command (buffer process command &optional no-lock
+                                      no-log)
+  "Send COMMAND string to server with sequence number."
+  (save-excursion
+    (set-buffer buffer)
+    (when (and elmo-imap4-use-lock
+              elmo-imap4-lock)
+      (elmo-imap4-debug "send: (%d) is still locking." elmo-imap4-seqno)
+      (error "IMAP4 process is locked; Please try later (or plug again)"))
+    (erase-buffer)
+    (goto-char (point-min))
+    (setq elmo-imap4-read-point (point))
+    (unless no-lock
+      ;; for debug.
+      (if no-log
+         (elmo-imap4-debug "lock(%d): (No-logging command)." (+ elmo-imap4-seqno 1))
+       (elmo-imap4-debug "lock(%d): %s" (+ elmo-imap4-seqno 1) command))
+      (setq elmo-imap4-lock t))
+    (process-send-string process (concat (format "%s%d " 
+                                                elmo-imap4-seq-prefix 
+                                                (elmo-imap4-get-seqno))
+                                        command))
+    (process-send-string process "\r\n")))
+
+(defun elmo-imap4-send-string (buffer process string)
+  "Send STRING to server."
+  (save-excursion
+    (set-buffer buffer)
+    (erase-buffer)
+    (goto-char (point-min))
+    (setq elmo-imap4-read-point (point))
+    (process-send-string process string)
+    (process-send-string process "\r\n")))
+
+(defun elmo-imap4-read-part (folder msg part)
+  (save-excursion
+    (let* ((spec (elmo-folder-get-spec folder))
+          (connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          response ret-val bytes)
+      (when (elmo-imap4-spec-folder spec)
+       (when (not (string= (elmo-imap4-connection-get-cwf connection)
+                           (elmo-imap4-spec-folder spec)))
+         (if (null (setq response 
+                         (elmo-imap4-select-folder 
+                          (elmo-imap4-spec-folder spec) connection)))
+             (error "Select folder failed")))
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format 
+                                 (if elmo-imap4-use-uid 
+                                     "uid fetch %s body.peek[%s]"
+                                   "fetch %s body.peek[%s]")
+                                 msg part))
+       (if (null (setq response (elmo-imap4-read-response 
+                                 (process-buffer process) 
+                                 process t)))
+           (error "Fetch failed"))
+       (save-match-data
+         (while (string-match "^\\* OK" response)
+           (if (null (setq response (elmo-imap4-read-response 
+                                     (process-buffer process) 
+                                     process t)))
+               (error "Fetch failed"))))
+       (save-match-data
+         (if (string-match ".*{\\([0-9]+\\)}" response)
+             (setq bytes
+                   (string-to-int
+                    (elmo-match-string 1 response)))
+           (error "Fetch failed")))
+       (if (null (setq response (elmo-imap4-read-bytes 
+                                 (process-buffer process) process bytes)))
+           (error "Fetch message failed"))
+       (setq ret-val response)
+       (elmo-imap4-read-response (process-buffer process)
+                                 process)) ;; ignore remaining..
+      ret-val)))
+
+(defun elmo-imap4-prefetch-msg (spec msg outbuf)
+  (elmo-imap4-read-msg spec msg outbuf 'unseen))
+
+(defun elmo-imap4-read-msg (spec msg outbuf 
+                                &optional leave-seen-flag-untouched)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          response ret-val bytes)
+      (as-binary-process
+       (when (elmo-imap4-spec-folder spec)
+        (when (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+          (if (null (setq response 
+                          (elmo-imap4-select-folder 
+                           (elmo-imap4-spec-folder spec) 
+                           connection)))
+              (error "Select folder failed")))
+        (elmo-imap4-send-command (process-buffer process)
+                                 process
+                                 (format 
+                                  (if elmo-imap4-use-uid 
+                                      "uid fetch %s body%s[]" 
+                                    "fetch %s body%s[]")
+                                  msg
+                                  (if leave-seen-flag-untouched
+                                      ".peek" "")))
+        (if (null (setq response (elmo-imap4-read-response 
+                                  (process-buffer process)
+                                  process t)))
+            (error "Fetch failed"))
+        (save-match-data
+          (while (string-match "^\\* OK" response)
+            (if (null (setq response (elmo-imap4-read-response 
+                                      (process-buffer process) 
+                                      process t)))
+                (error "Fetch failed"))))
+        (save-match-data
+          (if (string-match ".*{\\([0-9]+\\)}" response)
+              (setq bytes
+                    (string-to-int
+                     (elmo-match-string 1 response)))
+            (error "Fetch failed")))
+        (setq ret-val (elmo-imap4-read-body 
+                       (process-buffer process) 
+                       process bytes outbuf))
+        (elmo-imap4-read-response (process-buffer process) 
+                                  process)) ;; ignore remaining..
+       )
+      ret-val)))
+
+(defun elmo-imap4-setup-send-buffer-from-file (file)
+  (let ((tmp-buf (get-buffer-create 
+                 " *elmo-imap4-setup-send-buffer-from-file*")))
+    (save-excursion
+      (save-match-data
+       (set-buffer tmp-buf)
+       (erase-buffer)
+       (as-binary-input-file
+        (insert-file-contents file))
+       (goto-char (point-min))
+       (if (eq (re-search-forward "^$" nil t) 
+               (point-max))
+           (insert "\n"))      
+       (goto-char (point-min))
+       (while (search-forward "\n" nil t)
+         (replace-match "\r\n"))))
+    tmp-buf))
+
+(defun elmo-imap4-delete-msgids (spec msgids)
+  "If actual message-id is matched, then delete it."
+  (let ((message-ids msgids)
+       (i 0)
+       (num (length msgids)))
+    (while message-ids
+      (setq i (+ 1 i))
+      (message "Deleting message...%d/%d" i num)
+      (elmo-imap4-delete-msg-by-id spec (car message-ids))
+      (setq message-ids (cdr message-ids)))
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection)))
+      (elmo-imap4-send-command (process-buffer process) 
+                              process "expunge")
+      (if (null (elmo-imap4-read-response (process-buffer process)
+                                         process))
+         (error "Expunge failed")))))
+
+(defun elmo-imap4-delete-msg-by-id (spec msgid)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          ;;(size (length string))
+          response msgs)
+      (if (and (elmo-imap4-spec-folder spec)
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (null (elmo-imap4-select-folder 
+                     (elmo-imap4-spec-folder spec) 
+                     connection)))
+         (error "Select folder failed"))
+      (save-excursion
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format 
+                                 (if elmo-imap4-use-uid 
+                                     "uid search header message-id \"%s\""
+                                   "search header message-id \"%s\"")
+                                 msgid))
+       (setq response (elmo-imap4-read-response 
+                       (process-buffer process) process))
+       (if (and response 
+                (string-match "^\\* SEARCH\\([^\n]*\\)$" response))
+           (setq msgs (read (concat "(" (elmo-match-string 1 response) ")")))
+         (error "SEARCH failed"))
+       (elmo-imap4-delete-msgs-no-expunge spec msgs)))))
+
+(defun elmo-imap4-append-msg-by-id (spec msgid)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          send-buf)
+      (if (and (elmo-imap4-spec-folder spec)
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (null (elmo-imap4-select-folder 
+                     (elmo-imap4-spec-folder spec) connection)))
+         (error "Select folder failed"))
+      (save-excursion
+       (setq send-buf (elmo-imap4-setup-send-buffer-from-file 
+                       (elmo-cache-get-path msgid)))
+       (set-buffer send-buf)
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format "append %s (\\Seen) {%d}"
+                                        (elmo-imap4-spec-folder spec)
+                                        (buffer-size)))
+       (process-send-string process (buffer-string))
+       (process-send-string process "\r\n") ; finished appending.
+       )
+      (kill-buffer send-buf)
+      (if (null (elmo-imap4-read-response (process-buffer process)
+                                         process))
+         (error "Append failed")))
+    t))
+
+(defun elmo-imap4-append-msg (spec string &optional msg no-see)
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          send-buf)
+      (if (and (elmo-imap4-spec-folder spec)
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            (elmo-imap4-spec-folder spec)))
+              (null (elmo-imap4-select-folder (elmo-imap4-spec-folder spec)
+                                              connection)))
+         (error "Select folder failed"))
+      (save-excursion
+       (setq send-buf (elmo-imap4-setup-send-buffer string))
+       (set-buffer send-buf)
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format "append %s %s{%d}"
+                                        (elmo-imap4-spec-folder spec)
+                                        (if no-see "" "(\\Seen) ")
+                                        (buffer-size)))
+       (if (null (elmo-imap4-read-response (process-buffer process)
+                                           process))
+           (error "Cannot append messages to this folder"))
+       (process-send-string process (buffer-string))
+       (process-send-string process "\r\n") ; finished appending.
+       )
+      (kill-buffer send-buf)
+      (current-buffer)
+      (if (null (elmo-imap4-read-response (process-buffer process)
+                                         process))
+         (error "Append failed")))
+    t))
+
+(defun elmo-imap4-copy-msgs (dst-spec msgs src-spec &optional expunge-it same-number)
+  "Equivalence of hostname, username is assumed."
+  (save-excursion
+    (let* ((src-folder (elmo-imap4-spec-folder src-spec))
+          (dst-folder (elmo-imap4-spec-folder dst-spec))
+          (connection (elmo-imap4-get-connection src-spec))
+          (process (elmo-imap4-connection-get-process connection))
+          (mlist msgs))
+      (if (and src-folder
+              (not (string= (elmo-imap4-connection-get-cwf connection)
+                            src-folder))
+              (null (elmo-imap4-select-folder
+                     src-folder connection)))
+         (error "Select folder failed"))
+      (while mlist
+       (elmo-imap4-send-command (process-buffer process)
+                                process
+                                (format
+                                 (if elmo-imap4-use-uid 
+                                     "uid copy %s %s" 
+                                   "copy %s %s")
+                                 (car mlist) dst-folder))
+       (if (null (elmo-imap4-read-response (process-buffer process)
+                                           process))
+           (error "Copy failed")
+         (setq mlist (cdr mlist))))
+      (when expunge-it
+       (elmo-imap4-send-command (process-buffer process) 
+                                process "expunge")
+       (if (null (elmo-imap4-read-response (process-buffer process)
+                                           process))
+           (error "Expunge failed")))
+      t)))
+
+(defun elmo-imap4-server-diff (spec)
+  "get server status"
+  (save-excursion
+    (let* ((connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          response)
+      ;; commit when same folder.
+      (if (string= (elmo-imap4-connection-get-cwf connection)
+                  (elmo-imap4-spec-folder spec))
+         (elmo-imap4-commit spec))
+      (elmo-imap4-send-command (process-buffer process)
+                              process
+                              (format
+                               "status \"%s\" (unseen messages)"
+                               (elmo-imap4-spec-folder spec)))
+      (setq response (elmo-imap4-read-response 
+                     (process-buffer process) process))
+      (when (string-match "\\* STATUS [^(]* \\(([^)]*)\\)" response)
+       (setq response (read (downcase (elmo-match-string 1 response))))
+       (cons (cadr (memq 'unseen response))
+             (cadr (memq 'messages response)))))))
+
+(defun elmo-imap4-use-cache-p (spec number)
+  elmo-imap4-use-cache)
+
+(defun elmo-imap4-local-file-p (spec number)
+  nil)
+
+(defun elmo-imap4-port-label (spec)
+  (concat "imap4"
+         (if (nth 6 spec) "!ssl" "")))
+
+(defsubst elmo-imap4-portinfo (spec)
+  (list (elmo-imap4-spec-hostname spec) (elmo-imap4-spec-port spec)))
+
+(defun elmo-imap4-plugged-p (spec)
+  (apply 'elmo-plugged-p
+        (append (elmo-imap4-portinfo spec)
+                (list nil (quote (elmo-imap4-port-label spec))))))
+
+(defun elmo-imap4-set-plugged (spec plugged add)
+  (apply 'elmo-set-plugged plugged
+        (append (elmo-imap4-portinfo spec)
+                (list nil nil (quote (elmo-imap4-port-label spec)) add))))
+
+(defalias 'elmo-imap4-sync-number-alist 'elmo-generic-sync-number-alist)
+
+(provide 'elmo-imap4)
+
+;;; elmo-imap4.el ends here
diff --git a/elmo/elmo-internal.el b/elmo/elmo-internal.el
new file mode 100644 (file)
index 0000000..2c5fd14
--- /dev/null
@@ -0,0 +1,263 @@
+;;; elmo-internal.el -- Internal Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-03 11:12:17 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'elmo-localdir)
+
+(defsubst elmo-internal-list-folder-subr (spec &optional nonsort)
+  (let* ((directive (nth 1 spec))
+        (arg (nth 2 spec))
+        (flist (elmo-list-folder-by-location
+                spec
+                (elmo-internal-list-location directive arg))))
+    (if nonsort
+       (cons (or (elmo-max-of-list flist) 0)
+             (length flist))
+      (sort flist '<))))
+
+(defun elmo-internal-list-folder (spec)
+  (elmo-internal-list-folder-subr spec))
+
+(defun elmo-internal-list-folder-by-location (spec location &optional msgdb)
+  (let* ((path (elmo-msgdb-expand-path nil spec))
+        (location-alist 
+         (if msgdb
+             (elmo-msgdb-get-location msgdb)
+           (elmo-msgdb-location-load path)))
+        (i 0)
+        result pair
+        location-max modified)
+    (setq location-max
+         (or (elmo-max-of-list (mapcar 'car location-alist)) 0))
+    (when location-max
+      (while location
+       (if (setq pair (rassoc (car location) location-alist))
+           (setq result
+                 (append result
+                         (list (cons (car pair) (car location)))))
+         (setq i (1+ i))
+         (setq result (append result
+                              (list 
+                               (cons (+ location-max i) (car location))))))
+       (setq location (cdr location))))
+    (setq result (sort result '(lambda (x y)
+                                (< (car x)(car y)))))
+    (if (not (equal result location-alist))
+       (setq modified t))
+    (if modified
+       (elmo-msgdb-location-save path result))
+    (mapcar 'car result)))
+
+(defun elmo-internal-list-location (directive arg)
+  (let ((mark-alist 
+        (or elmo-msgdb-global-mark-alist
+            (setq elmo-msgdb-global-mark-alist
+                  (elmo-object-load (expand-file-name 
+                                     elmo-msgdb-global-mark-filename
+                                     elmo-msgdb-dir)))))
+       result)
+    (mapcar (function (lambda (x)
+                       (setq result (cons (car x) result))))
+           mark-alist)
+    (nreverse result)))
+
+(defun elmo-internal-msgdb-create-entity (number loc-alist)
+  (elmo-localdir-msgdb-create-overview-entity-from-file
+   number
+   (elmo-cache-get-path (cdr (assq number loc-alist)))))
+
+(defun elmo-internal-msgdb-create (spec numlist new-mark 
+                                      already-mark seen-mark 
+                                      important-mark 
+                                      seen-list
+                                      &optional msgdb)
+  (when numlist
+    (let* ((directive (nth 1 spec))
+          (arg       (nth 2 spec))
+          (loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                       (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                  nil spec))))
+          (loc-list (elmo-internal-list-location directive arg))
+          overview number-alist mark-alist entity
+          i percent num location pair)
+      (setq num (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (setq entity
+             (elmo-internal-msgdb-create-entity
+              (car numlist) loc-alist))
+       (if (null entity)
+           ()
+         (setq overview 
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist
+                                      (elmo-msgdb-overview-entity-get-number
+                                       entity)
+                                      (elmo-msgdb-overview-entity-get-id
+                                       entity)))
+         (setq location (cdr (assq (car numlist) loc-alist)))
+         (unless (memq location seen-list)
+           (setq mark-alist
+                 (elmo-msgdb-mark-append
+                  mark-alist 
+                  (elmo-msgdb-overview-entity-get-number
+                   entity)
+                                       ;(nth 0 entity)
+                  (or (elmo-msgdb-global-mark-get 
+                       (elmo-msgdb-overview-entity-get-id
+                        entity))
+                      (if (elmo-cache-exists-p 
+                           (elmo-msgdb-overview-entity-get-id
+                            entity))
+                          already-mark
+                        new-mark))))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) num))
+       (elmo-display-progress
+        'elmo-internal-msgdb-create "Creating msgdb..."
+        percent)
+       (setq numlist (cdr numlist)))
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist loc-alist))))
+
+(defalias 'elmo-internal-msgdb-create-as-numlist 'elmo-internal-msgdb-create)
+
+(defun elmo-internal-list-folders (spec &optional hierarchy)
+  ;; XXX hard cording.
+  (unless (nth 1 spec) ; toplevel.
+    (list (list "'cache") "'mark")))
+
+(defvar elmo-internal-mark "$")
+
+(defun elmo-internal-append-msg (spec string &optional msg no-see)
+  (elmo-set-work-buf
+   (insert string)
+   (let* ((msgid (elmo-field-body "message-id"))
+         (path (elmo-cache-get-path msgid))
+         dir)
+     (when path 
+       (setq dir (directory-file-name (file-name-directory path)))
+       (if (not (file-exists-p dir))
+          (elmo-make-directory dir))
+       (as-binary-output-file (write-region (point-min) (point-max)
+                                           path nil 'no-msg)))
+     (elmo-msgdb-global-mark-set msgid elmo-internal-mark))))
+
+(defun elmo-internal-delete-msgs (spec msgs &optional msgdb)
+  (let ((loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                    (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                               nil spec)))))
+    (mapcar '(lambda (msg) (elmo-internal-delete-msg spec msg
+                                                    loc-alist))
+           msgs)))
+
+(defun elmo-internal-delete-msg (spec number loc-alist)
+  (let ((pair (assq number loc-alist)))
+    (elmo-msgdb-global-mark-delete (cdr pair))))
+
+(defun elmo-internal-read-msg (spec number outbuf &optional msgdb)
+  (save-excursion
+    (let* ((loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                       (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                  nil spec))))
+          (file (elmo-cache-get-path (cdr (assq number loc-alist)))))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p file)
+       (as-binary-input-file (insert-file-contents file))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-internal-max-of-folder (spec)
+  (elmo-internal-list-folder-subr spec t))
+
+(defun elmo-internal-check-validity (spec)
+  nil)
+
+(defun elmo-internal-sync-validity (spec)
+  nil)
+
+(defun elmo-internal-folder-exists-p (spec)
+  t)
+
+(defun elmo-internal-folder-creatable-p (spec)
+  nil)
+
+(defun elmo-internal-create-folder (spec)
+  nil)
+
+(defun elmo-internal-search (spec condition &optional from-msgs msgdb)
+  (let* ((mark-alist 
+        (or elmo-msgdb-global-mark-alist
+            (setq elmo-msgdb-global-mark-alist
+                  (elmo-object-load (expand-file-name 
+                                     elmo-msgdb-global-mark-filename
+                                     elmo-msgdb-dir)))))
+        (loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                     (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                nil spec))))    
+        cache-file
+        ret-val
+        case-fold-search msg
+        percent i num)
+    (setq num (length loc-alist))
+    (setq i 0)
+    (while loc-alist
+      (if (and (setq cache-file (elmo-cache-exists-p (cdr (car loc-alist))))
+              (elmo-file-field-condition-match cache-file
+                                               condition))
+         (setq ret-val (append ret-val (list (car (car loc-alist))))))
+      (setq i (1+ i))
+      (setq percent (/ (* i 100) num))
+      (elmo-display-progress
+       'elmo-internal-search "Searching..."
+       percent)
+      (setq loc-alist (cdr loc-alist)))
+    ret-val))
+
+(defun elmo-internal-use-cache-p (spec number)
+  nil)
+
+(defun elmo-internal-local-file-p (spec number)
+  nil ;; XXXX
+  )
+
+(defalias 'elmo-internal-sync-number-alist 'elmo-generic-sync-number-alist)
+(defalias 'elmo-internal-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-internal-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-internal-commit 'elmo-generic-commit)
+
+(provide 'elmo-internal)
+
+;;; elmo-internal.el ends here
diff --git a/elmo/elmo-localdir.el b/elmo/elmo-localdir.el
new file mode 100644 (file)
index 0000000..068b076
--- /dev/null
@@ -0,0 +1,466 @@
+;;; elmo-localdir.el -- Localdir Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/22 00:03:39 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'emu)
+(require 'std11)
+
+(eval-when-compile
+  (require 'elmo-cache))
+(require 'elmo-msgdb)
+
+(defsubst elmo-localdir-get-folder-directory (spec)
+  (if (file-name-absolute-p (nth 1 spec))
+      (nth 1 spec) ; already full path.
+    (expand-file-name (nth 1 spec)
+                     (cond ((eq (car spec) 'localnews)
+                            elmo-localnews-folder-path)
+                           (t
+                            elmo-localdir-folder-path)))))
+
+(defun elmo-localdir-msgdb-expand-path (spec)
+  (let ((fld-name (nth 1 spec)))
+    (expand-file-name fld-name
+                     (expand-file-name "localdir"
+                                       elmo-msgdb-dir))))
+
+(defun elmo-localdir-number-to-filename (spec dir number &optional loc-alist)
+  (expand-file-name (int-to-string number) dir))
+
+(if (boundp 'nemacs-version)
+    (defsubst elmo-localdir-insert-header (file)
+      "Insert the header of the article (Does not work on nemacs)."
+      (as-binary-input-file
+       (insert-file-contents file)))
+  (defsubst elmo-localdir-insert-header (file)
+    "Insert the header of the article."
+    (let ((beg 0)
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook
+         format-alist)
+      (when (file-exists-p file)
+       ;; Read until header separator is found.
+       (while (and (eq elmo-localdir-header-chop-length
+                       (nth 1 
+                            (as-binary-input-file 
+                             (insert-file-contents
+                              file nil beg
+                              (incf beg elmo-localdir-header-chop-length)))))
+                   (prog1 (not (search-forward "\n\n" nil t))
+                     (goto-char (point-max)))))))))
+
+
+(defsubst elmo-localdir-msgdb-create-overview-entity-from-file (number file)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO LocalDir Temp*"))
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook header-end
+         (attrib (file-attributes file))
+         ret-val size mtime)
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (if (not (file-exists-p file))
+         ()
+       (setq size (nth 7 attrib))
+       (setq mtime (timezone-make-date-arpa-standard
+                    (current-time-string (nth 5 attrib)) (current-time-zone)))
+       ;; insert header from file.
+       (catch 'done
+         (condition-case nil
+             (elmo-localdir-insert-header file)
+           (error (throw 'done nil)))
+         (goto-char (point-min))
+         (setq header-end 
+               (if (re-search-forward "\\(^--.*$\\)\\|\\(\n\n\\)" nil t)
+                   (point)
+                 (point-max)))
+         (narrow-to-region (point-min) header-end)
+         (setq ret-val (elmo-msgdb-create-overview-from-buffer number size mtime))
+         (kill-buffer tmp-buffer))
+       ret-val
+       ))))
+
+(defun elmo-localdir-msgdb-create-entity (dir number)
+  (elmo-localdir-msgdb-create-overview-entity-from-file
+   number (expand-file-name (int-to-string number) dir)))
+
+(defun elmo-localdir-msgdb-create-as-numlist (spec numlist new-mark 
+                                                  already-mark seen-mark 
+                                                  important-mark seen-list)
+  (when numlist
+    (let ((dir (elmo-localdir-get-folder-directory spec))
+         overview number-alist mark-alist entity message-id
+         i percent len num seen gmark)
+      (setq len (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (setq entity
+             (elmo-localdir-msgdb-create-entity 
+              dir (car numlist)))
+       (if (null entity)
+           ()
+         (setq num (elmo-msgdb-overview-entity-get-number entity))
+         (setq overview 
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist
+                                      num
+                                      (elmo-msgdb-overview-entity-get-id
+                                       entity)))
+         (setq message-id (elmo-msgdb-overview-entity-get-id entity))
+         (setq seen (member message-id seen-list))
+         (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                             (if (elmo-cache-exists-p message-id) ; XXX
+                                 (if seen 
+                                     nil
+                                   already-mark)
+                               (if seen 
+                                   nil ;;seen-mark
+                                 new-mark))))
+             (setq mark-alist
+                   (elmo-msgdb-mark-append 
+                    mark-alist 
+                    num
+                    gmark))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) len))
+       (elmo-display-progress
+        'elmo-localdir-msgdb-create-as-numlist "Creating msgdb..."
+        percent)
+       (setq numlist (cdr numlist)))
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist))))
+
+(defalias 'elmo-localdir-msgdb-create 'elmo-localdir-msgdb-create-as-numlist)
+
+(defvar elmo-localdir-list-folders-spec-string "+")
+(defvar elmo-localdir-list-folders-filter-regexp "^\\(\\.\\.?\\|[0-9]+\\)$")
+
+(defun elmo-localdir-list-folders (spec &optional hierarchy)
+  (let ((folder (concat elmo-localdir-list-folders-spec-string (nth 1 spec))))
+    (elmo-localdir-list-folders-subr folder hierarchy)))
+
+(defun elmo-localdir-list-folders-subr (folder &optional hierarchy)
+  (let ((case-fold-search t)
+       folders curdir dirent relpath abspath attr
+       subprefix subfolder)
+    (condition-case ()
+       (progn
+         (setq curdir
+               (expand-file-name (nth 1 (elmo-folder-get-spec folder))
+                                 elmo-localdir-folder-path))
+         (if (string-match "^[+=$.]$" folder) ; localdir, archive, localnews
+             (setq subprefix folder)
+           (setq subprefix (concat folder elmo-path-sep))
+           ;; include parent
+           (setq folders (list folder)))
+         (setq dirent (directory-files curdir))
+         (catch 'done
+          (while dirent
+           (setq relpath (car dirent))
+           (setq dirent (cdr dirent))
+           (setq abspath (expand-file-name relpath curdir))
+           (and
+            (not (string-match 
+                  elmo-localdir-list-folders-filter-regexp
+                  relpath))
+            (eq (nth 0 (setq attr (file-attributes abspath))) t)
+            (if (eq hierarchy 'check)
+                (throw 'done (nconc folders t))
+              t)
+            (setq subfolder (concat subprefix relpath))
+            (setq folders (nconc folders
+                                 (if (and hierarchy
+                                          (if elmo-have-link-count
+                                              (< 2 (nth 1 attr))
+                                            (cdr
+                                             (elmo-localdir-list-folders-subr
+                                              subfolder 'check))))
+                                     (list (list subfolder))
+                                   (list subfolder))))
+            (or
+             hierarchy
+             (and elmo-have-link-count (>= 2 (nth 1 attr)))
+             (setq folders
+                   (nconc folders (cdr (elmo-localdir-list-folders-subr
+                                        subfolder hierarchy))))))))
+         folders)
+      (file-error folders))))
+
+(defsubst elmo-localdir-list-folder-subr (spec &optional nonsort)
+  (let* ((dir (elmo-localdir-get-folder-directory spec))
+        (flist (mapcar 'string-to-int
+                       (directory-files dir nil "^[0-9]+$" t))))
+    (if nonsort
+       (cons (or (elmo-max-of-list flist) 0) (length flist))
+      (sort flist '<))))
+
+(defun elmo-localdir-append-msg (spec string &optional msg no-see)
+  (let ((dir (elmo-localdir-get-folder-directory spec))
+       (tmp-buffer (get-buffer-create " *ELMO Temp buffer*"))
+       (next-num (or msg
+                     (1+ (car (elmo-localdir-list-folder-subr spec t)))))
+       filename)
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (setq filename (expand-file-name (int-to-string
+                                       next-num)
+                                      dir))
+      (unwind-protect
+         (if (file-writable-p filename)
+             (progn
+               (insert string)
+               (as-binary-output-file
+                (write-region (point-min) (point-max) filename nil 'no-msg))
+               t)
+           nil
+           )
+       (kill-buffer tmp-buffer)))))
+
+(defun elmo-localdir-delete-msg (spec number)
+  (let (file
+       (dir (elmo-localdir-get-folder-directory spec))
+        (number (int-to-string number)))
+    (setq file (expand-file-name number dir))
+    (if (and (string-match "[0-9]+" number) ; for safety.
+            (file-exists-p file)
+            (file-writable-p file) 
+            (not (file-directory-p file)))
+       (progn (delete-file file)
+              t))))
+
+(defun elmo-localdir-read-msg (spec number outbuf &optional set-mark)
+  (save-excursion
+    (let* ((number (int-to-string number))
+          (dir (elmo-localdir-get-folder-directory spec))
+          (file (expand-file-name number dir)))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p file)
+       (as-binary-input-file (insert-file-contents file))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-localdir-delete-msgs (spec msgs)
+  (mapcar '(lambda (msg) (elmo-localdir-delete-msg spec msg))
+         msgs))
+
+(defun elmo-localdir-list-folder (spec); called by elmo-localdir-search()
+  (elmo-localdir-list-folder-subr spec))
+
+(defun elmo-localdir-max-of-folder (spec)
+  (elmo-localdir-list-folder-subr spec t))
+
+(defun elmo-localdir-check-validity (spec validity-file)
+  (let* ((dir (elmo-localdir-get-folder-directory spec))
+        (cur-val (nth 5 (file-attributes dir)))
+        (file-val (read 
+                   (or (elmo-get-file-string validity-file)
+                       "nil"))))
+    (cond
+     ((or (null cur-val) (null file-val)) nil)
+     ((> (car cur-val) (car file-val)) nil)
+     ((= (car cur-val) (car file-val))
+      (if (> (cadr cur-val) (cadr file-val)) nil t)) ; t if same
+     (t t))))
+
+(defun elmo-localdir-sync-validity (spec validity-file)
+  (save-excursion
+    (let* ((dir (elmo-localdir-get-folder-directory spec))
+          (tmp-buffer (get-buffer-create " *ELMO TMP*"))
+          (number-file (expand-file-name elmo-msgdb-number-filename dir)))
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (prin1 (nth 5 (file-attributes dir)) tmp-buffer)
+      (princ "\n" tmp-buffer)
+      (if (file-writable-p validity-file)
+         (write-region (point-min) (point-max) 
+                       validity-file nil 'no-msg)
+       (message (format "%s is not writable." number-file)))
+      (kill-buffer tmp-buffer))))
+
+(defun elmo-localdir-folder-exists-p (spec)
+  (file-directory-p (elmo-localdir-get-folder-directory spec)))
+
+(defun elmo-localdir-folder-creatable-p (spec)
+  t)
+
+(defun elmo-localdir-create-folder (spec)
+  (save-excursion
+    (let ((dir (elmo-localdir-get-folder-directory spec)))
+      (if (file-directory-p dir)
+          ()
+       (if (file-exists-p dir)
+           (error "Create folder failed")
+         (elmo-make-directory dir))
+       t
+       ))))
+
+(defun elmo-localdir-delete-folder (spec)
+  (let* ((dir (elmo-localdir-get-folder-directory spec)))
+    (if (not (file-directory-p dir))
+       (error "no such directory: %s" dir)
+      (elmo-delete-directory dir t)
+      t)))
+
+(defun elmo-localdir-rename-folder (old-spec new-spec)
+  (let* ((old (elmo-localdir-get-folder-directory old-spec))
+        (new (elmo-localdir-get-folder-directory new-spec))
+        (new-dir (directory-file-name (file-name-directory new))))
+    (if (not (file-directory-p old))
+       (error "no such directory: %s" old)
+      (if (file-exists-p new)
+         (error "already exists directory: %s" new)
+       (if (not (file-exists-p new-dir))
+           (elmo-make-directory new-dir))
+       (rename-file old new)
+       t))))
+
+(defsubst elmo-localdir-field-condition-match (spec number condition)
+  (elmo-file-field-condition-match 
+   (expand-file-name (int-to-string number)
+                    (elmo-localdir-get-folder-directory spec))
+   condition))
+
+(defun elmo-localdir-search (spec condition &optional from-msgs)
+  (let* ((msgs (or from-msgs (elmo-localdir-list-folder spec)))
+        (num (length msgs))
+        (i 0) case-fold-search ret-val)
+    (while msgs
+      (if (elmo-localdir-field-condition-match spec (car msgs)
+                                              condition)
+         (setq ret-val (cons (car msgs) ret-val)))
+      (setq i (1+ i))
+      (elmo-display-progress
+       'elmo-localdir-search "Searching..."
+       (/ (* i 100) num))
+      (setq msgs (cdr msgs)))
+    (nreverse ret-val)))
+
+;;; (localdir, maildir, localnews) -> localdir
+(defun elmo-localdir-copy-msgs (dst-spec msgs src-spec
+                                        &optional loc-alist same-number)
+  (let ((dst-dir
+        (elmo-localdir-get-folder-directory dst-spec))
+       (next-num (1+ (car (elmo-localdir-list-folder-subr dst-spec t)))))
+    (while msgs
+      (elmo-copy-file
+       ;; src file
+       (elmo-call-func src-spec "get-msg-filename" (car msgs) loc-alist)
+       ;; dst file
+       (expand-file-name (int-to-string
+                         (if same-number (car msgs) next-num))
+                        dst-dir))
+      (if (and (setq msgs (cdr msgs))
+              (not same-number))
+         (setq next-num
+               (if (and (eq (car dst-spec) 'localdir)
+                        (elmo-localdir-locked-p))
+                   ;; MDA is running.
+                   (1+ (car (elmo-localdir-list-folder-subr dst-spec t)))
+                 (1+ next-num)))))
+    t))
+
+(defun elmo-localdir-pack-number (spec msgdb arg)
+  (let ((dir (elmo-localdir-get-folder-directory spec))
+       (onum-alist (elmo-msgdb-get-number-alist msgdb))
+       (omark-alist (elmo-msgdb-get-mark-alist msgdb))
+       (oov (elmo-msgdb-get-overview msgdb))
+       i flist onum mark new-mark-alist total)
+    (setq i 1)
+    (setq flist
+         (if elmo-pack-number-check-strict
+             (elmo-call-func spec "list-folder") ;; allow localnews
+           (mapcar 'car onum-alist)))
+    (setq total (length flist))
+    (while flist
+      (elmo-display-progress
+       'elmo-localdir-pack-number "Packing..."
+       (/ (* i 100) total))
+      (setq onum (car flist))
+      (when (not (eq onum i)) ;; why \=() is wrong..
+        (elmo-bind-directory
+        dir
+        ;; xxx  nfs,hardlink
+        (rename-file (int-to-string onum) (int-to-string i) t))
+        ;; update overview
+        (elmo-msgdb-overview-entity-set-number
+        (elmo-msgdb-overview-get-entity-by-number
+         oov onum) i)
+       ;; update number-alist
+       (setcar (assq onum onum-alist) i))
+      ;; update mark-alist
+      (when (setq mark (cadr (assq onum omark-alist)))
+       (setq new-mark-alist
+             (elmo-msgdb-mark-append
+              new-mark-alist
+              i mark)))
+      (setq i (1+ i))
+      (setq flist (cdr flist)))
+    (message "Packing...done.")
+    (list (elmo-msgdb-get-overview msgdb)
+         onum-alist
+         new-mark-alist
+         (elmo-msgdb-get-location msgdb))))
+
+(defun elmo-localdir-use-cache-p (spec number)
+  nil)
+
+(defun elmo-localdir-local-file-p (spec number)
+  t)
+
+(defun elmo-localdir-get-msg-filename (spec number &optional loc-alist)
+  (expand-file-name 
+   (int-to-string number)
+   (elmo-localdir-get-folder-directory spec)))
+
+(defun elmo-localdir-locked-p ()
+  (if elmo-localdir-lockfile-list
+      (let ((lock elmo-localdir-lockfile-list))
+       (catch 'found
+         (while lock
+           (if (file-exists-p (car lock))
+               (throw 'found t))
+           (setq lock (cdr lock)))))))
+
+(defalias 'elmo-localdir-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-localdir-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-localdir-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-localdir-commit 'elmo-generic-commit)
+
+(provide 'elmo-localdir)
+
+;;; elmo-localdir.el ends here
diff --git a/elmo/elmo-localnews.el b/elmo/elmo-localnews.el
new file mode 100644 (file)
index 0000000..67a3a6a
--- /dev/null
@@ -0,0 +1,133 @@
+;;; elmo-localnews.el -- Local News Spool Interface for ELMO.
+
+;; Copyright 1998,1999,2000 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author:  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;; Time-stamp: <2000-01-24 12:20:07 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'elmo-localdir)
+
+(defmacro elmo-localnews-as-newsdir (&rest body)
+  (` (let ((elmo-localdir-folder-path elmo-localnews-folder-path))
+       (,@ body))))
+
+(defun elmo-localnews-msgdb-create-as-numlist (spec numlist new-mark
+                                                   already-mark seen-mark
+                                                   important-mark seen-list)
+  (when numlist
+    (elmo-localnews-as-newsdir
+     (elmo-localdir-msgdb-create-as-numlist spec numlist new-mark
+                                           already-mark seen-mark
+                                           important-mark seen-list))))
+
+(defalias 'elmo-localnews-msgdb-create 'elmo-localnews-msgdb-create-as-numlist)
+
+(defun elmo-localnews-list-folders (spec &optional hierarchy)
+  (let ((folder (concat "=" (nth 1 spec))))
+    (elmo-localnews-as-newsdir
+     (elmo-localdir-list-folders-subr folder hierarchy))))
+
+(defun elmo-localnews-append-msg (spec string &optional msg no-see)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-append-msg spec string)))
+
+(defun elmo-localnews-delete-msgs (dir number)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-delete-msgs dir number)))
+
+(defun elmo-localnews-read-msg (spec number outbuf)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-read-msg spec number outbuf)))
+
+(defun elmo-localnews-list-folder (spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-list-folder-subr spec)))
+
+(defun elmo-localnews-max-of-folder (spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-list-folder-subr spec t)))
+
+(defun elmo-localnews-check-validity (spec validity-file)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-check-validity spec validity-file)))
+
+(defun elmo-localnews-sync-validity (spec validity-file)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-sync-validity spec validity-file)))
+
+(defun elmo-localnews-folder-exists-p (spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-folder-exists-p spec)))
+
+(defun elmo-localnews-folder-creatable-p (spec)
+  t)
+
+(defun elmo-localnews-create-folder (spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-create-folder spec)))
+
+(defun elmo-localnews-delete-folder (spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-delete-folder spec)))
+
+(defun elmo-localnews-rename-folder (old-spec new-spec)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-rename-folder old-spec new-spec)))
+
+(defun elmo-localnews-search (spec condition &optional from-msgs)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-search spec condition from-msgs)))
+
+(defun elmo-localnews-copy-msgs (dst-spec msgs src-spec
+                                         &optional loc-alist same-number)
+  (elmo-localdir-copy-msgs
+   dst-spec msgs src-spec loc-alist same-number))
+
+(defun elmo-localnews-pack-number (spec msgdb arg)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-pack-number spec msgdb arg)))
+
+(defun elmo-localnews-use-cache-p (spec number)
+  nil)
+
+(defun elmo-localnews-local-file-p (spec number)
+  t)
+
+(defun elmo-localnews-get-msg-filename (spec number &optional loc-alist)
+  (elmo-localnews-as-newsdir
+   (elmo-localdir-get-msg-filename spec number loc-alist)))
+
+(defalias 'elmo-localnews-sync-number-alist 'elmo-generic-sync-number-alist)
+(defalias 'elmo-localnews-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-localnews-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-localnews-commit 'elmo-generic-commit)
+
+(provide 'elmo-localnews)
+
+;;; elmo-localnews.el ends here
diff --git a/elmo/elmo-maildir.el b/elmo/elmo-maildir.el
new file mode 100644 (file)
index 0000000..df092c4
--- /dev/null
@@ -0,0 +1,478 @@
+;;; elmo-maildir.el -- Maildir interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/22 00:14:31 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(eval-when-compile (require 'cl))
+(require 'elmo-util)
+(require 'elmo-localdir)
+
+(defvar elmo-maildir-sequence-number-internal 0
+  "Sequence number for the pid part of unique filename.
+This variable should not be used in elsewhere.")
+
+(defsubst elmo-maildir-get-folder-directory (spec)
+  (if (file-name-absolute-p (nth 1 spec))
+      (nth 1 spec) ; already full path.
+    (expand-file-name (nth 1 spec)
+                     elmo-maildir-folder-path)))
+
+(defun elmo-maildir-number-to-filename (dir number loc-alist)
+  (let ((location (cdr (assq number loc-alist))))
+    (and location (elmo-maildir-get-filename location dir))))
+
+(defun elmo-maildir-get-filename (location dir)
+  "Get a filename that is corresponded to LOCATION in DIR."
+  (expand-file-name
+   (let ((file (file-name-completion (symbol-name location)
+                                    (expand-file-name "cur" dir))))
+     (if (eq file t) location file))
+   (expand-file-name "cur" dir)))
+
+(defsubst elmo-maildir-list-location (dir &optional child-dir)
+  (let* ((cur-dir (expand-file-name (or child-dir "cur") dir))
+        (cur (directory-files cur-dir
+                              nil "^[^.].*$" t))
+        seen-list seen sym list)
+    (setq list
+         (mapcar 
+          (lambda (x)
+            (if (string-match "^\\([^:]+\\):\\([^:]+\\)$" x)
+                (progn
+                  (setq seen nil)
+                  (save-match-data
+                    (if (string-match
+                         "S"
+                         (elmo-match-string 2 x))
+                        (setq seen t)))
+                  (setq sym (intern (elmo-match-string 1 x)))
+                  (if seen
+                      (setq seen-list (cons sym seen-list)))
+                  sym)
+              (intern x)))
+          cur))
+    (cons list seen-list)))
+
+(defun elmo-maildir-msgdb-create-entity (dir number loc-alist)
+  (elmo-localdir-msgdb-create-overview-entity-from-file
+   number
+   (elmo-maildir-number-to-filename dir number loc-alist)))
+
+(defun elmo-maildir-cleanup-temporal (dir)
+  ;; Delete files in the tmp dir which are not accessed
+  ;; for more than 36 hours.
+  (let ((cur-time (current-time))
+       (count 0)
+       last-accessed)
+    (mapcar (function 
+            (lambda (file)
+              (setq last-accessed (nth 4 (file-attributes file)))
+              (when (or (> (- (car cur-time)(car last-accessed)) 1)
+                        (and (eq (- (car cur-time)(car last-accessed)) 1)
+                             (> (- (cadr cur-time)(cadr last-accessed))
+                                64064))) ; 36 hours.
+                (message "Maildir: %d tmp file(s) are cleared."
+                         (setq count (1+ count)))
+                (delete-file file))))
+           (directory-files (expand-file-name "tmp" dir)
+                            t ; full
+                            "^[^.].*$" t))))
+
+(defun elmo-maildir-update-current (spec)
+  "Move all new msgs to cur in the maildir"
+  (let* ((maildir (elmo-maildir-get-folder-directory spec))
+        (news (directory-files (expand-file-name "new"
+                                                 maildir)
+                               nil
+                               "^[^.].*$" t)))
+    ;; cleanup tmp directory.
+    (elmo-maildir-cleanup-temporal maildir)
+    ;; move new msgs to cur directory.
+    (mapcar (lambda (x)
+             (rename-file 
+              (expand-file-name x (expand-file-name "new" maildir))
+              (expand-file-name (concat x ":2,")
+                                (expand-file-name "cur" maildir))))
+           news)))
+
+(defun elmo-maildir-set-mark (filename mark)
+  "Mark the file in the maildir. MARK is a character."
+  (if (string-match "^\\([^:]+:2,\\)\\(.*\\)$" filename)
+      (let ((flaglist (string-to-char-list (elmo-match-string 
+                                           2 filename))))
+       (unless (memq mark flaglist)
+         (setq flaglist (sort (cons mark flaglist) '<))
+         (rename-file filename
+                      (concat (elmo-match-string 1 filename)
+                              (char-list-to-string flaglist)))))))
+
+(defun elmo-maildir-delete-mark (filename mark)
+  "Mark the file in the maildir. MARK is a character."
+  (if (string-match "^\\([^:]+:2,\\)\\(.*\\)$" filename)
+      (let ((flaglist (string-to-char-list (elmo-match-string 
+                                           2 filename))))
+       (when (memq mark flaglist)
+         (setq flaglist (delq mark flaglist))
+         (rename-file filename
+                      (concat (elmo-match-string 1 filename)
+                              (if flaglist
+                                  (char-list-to-string flaglist))))))))
+
+(defsubst elmo-maildir-set-mark-msgs (spec mark msgs msgdb)
+  (let ((dir (elmo-maildir-get-folder-directory spec))
+       (locs (if msgdb
+                 (elmo-msgdb-get-location msgdb)
+               (elmo-msgdb-location-load (elmo-msgdb-expand-path nil spec))))
+       file)
+    (while msgs
+      (if (setq file (elmo-maildir-number-to-filename dir (car msgs) locs))
+         (elmo-maildir-set-mark file mark))
+      (setq msgs (cdr msgs)))))
+
+(defsubst elmo-maildir-delete-mark-msgs (spec mark msgs msgdb)
+  (let ((dir (elmo-maildir-get-folder-directory spec))
+       (locs (if msgdb
+                 (elmo-msgdb-get-location msgdb)
+               (elmo-msgdb-location-load (elmo-msgdb-expand-path nil spec))))
+       file)
+    (while msgs
+      (if (setq file (elmo-maildir-number-to-filename dir (car msgs) locs))
+         (elmo-maildir-delete-mark file mark))
+      (setq msgs (cdr msgs)))))
+
+(defun elmo-maildir-mark-as-important (spec msgs &optional msgdb)
+  (elmo-maildir-set-mark-msgs spec ?F msgs msgdb))
+  
+(defun elmo-maildir-unmark-important (spec msgs &optional msgdb)
+  (elmo-maildir-delete-mark-msgs spec ?F msgs msgdb))
+
+(defun elmo-maildir-mark-as-read (spec msgs &optional msgdb)
+  (elmo-maildir-set-mark-msgs spec ?S msgs msgdb))
+
+(defun elmo-maildir-mark-as-unread (spec msgs &optional msgdb)
+  (elmo-maildir-delete-mark-msgs spec ?S msgs msgdb))
+
+(defun elmo-maildir-msgdb-create (spec numlist new-mark 
+                                      already-mark seen-mark 
+                                      important-mark 
+                                      seen-list
+                                      &optional msgdb)
+  (when numlist
+    (let* ((dir (elmo-maildir-get-folder-directory spec))
+          (loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                       (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                  nil spec))))
+          (loc-seen (elmo-maildir-list-location dir))
+          (loc-list  (car loc-seen))
+          (seen-list (cdr loc-seen))
+          overview number-alist mark-alist entity
+          i percent num location pair)
+      (setq num (length numlist))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while numlist
+       (setq entity
+             (elmo-maildir-msgdb-create-entity
+              dir (car numlist) loc-alist))
+       (if (null entity)
+           ()
+         (setq overview 
+               (elmo-msgdb-append-element
+                overview entity))
+         (setq number-alist
+               (elmo-msgdb-number-add number-alist
+                                      (elmo-msgdb-overview-entity-get-number
+                                       entity)
+                                      (elmo-msgdb-overview-entity-get-id
+                                       entity)))
+         (setq location (cdr (assq (car numlist) loc-alist)))
+         (unless (member location seen-list)
+           (setq mark-alist
+                 (elmo-msgdb-mark-append 
+                  mark-alist 
+                  (elmo-msgdb-overview-entity-get-number
+                   entity)
+                  (or (elmo-msgdb-global-mark-get 
+                       (elmo-msgdb-overview-entity-get-id
+                        entity))
+                      new-mark)))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) num))
+       (elmo-display-progress
+        'elmo-maildir-msgdb-create "Creating msgdb..."
+        percent)
+       (setq numlist (cdr numlist)))
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist loc-alist))))
+
+(defalias 'elmo-maildir-msgdb-create-as-numlist 'elmo-maildir-msgdb-create)
+
+(defun elmo-maildir-list-folders (spec &optional hierarchy)
+  (let ((elmo-localdir-folder-path elmo-maildir-folder-path)
+       (elmo-localdir-list-folders-spec-string ".")
+       (elmo-localdir-list-folders-filter-regexp
+        "^\\(\\.\\.?\\|cur\\|tmp\\|new\\)$")
+       elmo-have-link-count folders)
+    (setq folders (elmo-localdir-list-folders spec hierarchy))
+    (if (eq (length (nth 1 spec)) 0) ; top
+       (setq folders (append
+                      (list (concat elmo-localdir-list-folders-spec-string
+                                    (nth 1 spec)))
+                      folders)))
+    (elmo-delete-if
+     (function (lambda (folder)
+                (not (or (listp folder) (elmo-folder-exists-p folder)))))
+     folders)))
+
+(static-cond 
+ ((>= emacs-major-version 19)
+  (defun elmo-maildir-make-unique-string ()
+    "This function generates a string that can be used as a unique
+file name for maildir directories."    
+     (let ((cur-time (current-time)))
+       (format "%.0f.%d_%d.%s"
+             (+ (* (car cur-time)
+                    (float 65536)) (cadr cur-time))
+             (emacs-pid)
+             (incf elmo-maildir-sequence-number-internal)
+             (system-name)))))
+ ((eq emacs-major-version 18)
+  ;; A fake function for v18
+  (defun elmo-maildir-make-unique-string ()
+    "This function generates a string that can be used as a unique
+file name for maildir directories."
+    (unless (fboundp 'float-to-string)
+      (load-library "float"))
+    (let ((time (current-time)))
+      (format "%s%d.%d.%s"
+             (substring
+              (float-to-string
+               (f+ (f* (f (car time))
+                       (f 65536))
+                   (f (cadr time)))) 
+              0 5)                   
+             (cadr time)
+             (% (abs (random t)) 10000); dummy pid
+             (system-name))))))
+
+(defun elmo-maildir-temporal-filename (basedir)
+  (let ((filename (expand-file-name 
+                  (concat "tmp/" (elmo-maildir-make-unique-string))
+                  basedir)))
+    (unless (file-exists-p (file-name-directory filename))
+      (make-directory (file-name-directory filename)))
+    (while (file-exists-p filename)
+      ;; (sleep-for 2) ; I don't want to wait.
+      (setq filename 
+           (expand-file-name 
+            (concat "tmp/" (elmo-maildir-make-unique-string))
+            basedir)))
+    filename))
+
+(defun elmo-maildir-append-msg (spec string &optional msg no-see)
+  (let ((basedir (elmo-maildir-get-folder-directory spec))
+       filename)
+    (condition-case nil
+       (with-temp-buffer
+         (setq filename (elmo-maildir-temporal-filename basedir))
+         (insert string)
+         (as-binary-output-file
+          (write-region (point-min) (point-max) filename nil 'no-msg))
+         ;; add link from new.
+         (elmo-add-name-to-file
+          filename
+          (expand-file-name 
+           (concat "new/" (file-name-nondirectory filename))
+           basedir))
+         t)
+      ;; If an error occured, return nil.
+      (error))))
+
+(defun elmo-maildir-delete-msg (spec number loc-alist)
+  (let ((dir (elmo-maildir-get-folder-directory spec))
+       file)
+    (setq file (elmo-maildir-number-to-filename dir number loc-alist))
+    (if (and (file-writable-p file) 
+            (not (file-directory-p file)))
+       (progn (delete-file file)
+              t))))
+
+(defun elmo-maildir-read-msg (spec number outbuf &optional msgdb)
+  (save-excursion
+    (let* ((loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                       (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                  nil spec))))
+          (dir (elmo-maildir-get-folder-directory spec))
+          (file (elmo-maildir-number-to-filename dir number loc-alist)))
+      (set-buffer outbuf)
+      (erase-buffer)
+      (when (file-exists-p file)
+       (as-binary-input-file (insert-file-contents file))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-maildir-delete-msgs (spec msgs &optional msgdb)
+  (let ((loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                    (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                               nil spec)))))
+    (mapcar '(lambda (msg) (elmo-maildir-delete-msg spec msg
+                                                   loc-alist))
+           msgs)))
+
+(defsubst elmo-maildir-list-folder-subr (spec &optional nonsort)
+  (let* ((dir (elmo-maildir-get-folder-directory spec))
+        (flist (elmo-list-folder-by-location 
+                spec
+                (car (elmo-maildir-list-location dir))))
+        (news (car (elmo-maildir-list-location dir "new"))))
+    (if nonsort
+       (cons (+ (or (elmo-max-of-list flist) 0) (length news))
+             (+ (length flist) (length news)))
+      (sort flist '<))))
+
+(defun elmo-maildir-list-folder (spec)
+  (elmo-maildir-update-current spec)
+  (elmo-maildir-list-folder-subr spec))
+
+(defun elmo-maildir-max-of-folder (spec)
+  (elmo-maildir-list-folder-subr spec t))
+
+(defalias 'elmo-maildir-check-validity 'elmo-localdir-check-validity)
+
+(defalias 'elmo-maildir-sync-validity  'elmo-localdir-sync-validity)
+
+(defun elmo-maildir-folder-exists-p (spec)
+  (let ((basedir (elmo-maildir-get-folder-directory spec)))
+    (and (file-directory-p (expand-file-name "new" basedir))
+        (file-directory-p (expand-file-name "cur" basedir))
+        (file-directory-p (expand-file-name "tmp" basedir)))))
+
+(defun elmo-maildir-folder-creatable-p (spec)
+  t)
+
+(defun elmo-maildir-create-folder (spec)
+  (let ((basedir (elmo-maildir-get-folder-directory spec)))
+    (condition-case nil
+       (progn
+         (mapcar (function (lambda (dir)
+                             (setq dir (expand-file-name dir basedir))
+                             (or (file-directory-p dir)
+                                 (progn
+                                   (elmo-make-directory dir)
+                                   (set-file-modes dir 448)))))
+                 '("." "new" "cur" "tmp"))
+         t)
+      (error))))
+
+(defun elmo-maildir-delete-folder (spec)
+  (let ((basedir (elmo-maildir-get-folder-directory spec)))
+    (condition-case nil
+       (let ((tmp-files (directory-files
+                         (expand-file-name "tmp" basedir)
+                         t "[^.].*")))
+         ;; Delete files in tmp.
+         (and tmp-files (mapcar 'delete-file tmp-files))
+         (mapcar
+          (function
+           (lambda (dir)
+             (setq dir (expand-file-name dir basedir))
+             (if (not (file-directory-p dir))
+                 (error)
+               (elmo-delete-directory dir t))))
+          '("new" "cur" "tmp" "."))
+         t)
+      (error))))
+
+(defun elmo-maildir-search (spec condition &optional from-msgs msgdb)
+  (save-excursion
+    (let* ((msgs (or from-msgs (elmo-maildir-list-folder spec)))
+          (loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
+                       (elmo-msgdb-location-load (elmo-msgdb-expand-path 
+                                                  nil spec))))
+          (dir (elmo-maildir-get-folder-directory spec))
+          (i 0)
+          case-fold-search ret-val
+          percent num
+          (num (length msgs))
+          msg-num)
+      (while msgs
+       (setq msg-num (car msgs))
+       (if (elmo-file-field-condition-match 
+            (elmo-maildir-number-to-filename
+             dir (car msgs) loc-alist)
+            condition)
+           (setq ret-val (append ret-val (list msg-num))))
+       (setq i (1+ i))
+       (setq percent (/ (* i 100) num))
+       (elmo-display-progress
+        'elmo-maildir-search "Searching..."
+        percent)
+       (setq msgs (cdr msgs)))
+      ret-val)))
+
+;;; (maildir) -> maildir
+(defun elmo-maildir-copy-msgs (dst-spec msgs src-spec 
+                                       &optional loc-alist same-number)
+  (let (srcfile)
+    (while msgs
+      (setq srcfile 
+           (elmo-maildir-get-msg-filename src-spec (car msgs) loc-alist))
+      (elmo-copy-file
+       ;; src file
+       srcfile
+       ;; dst file
+       (expand-file-name 
+       (file-name-nondirectory srcfile)
+       (concat (elmo-maildir-get-folder-directory dst-spec) "/cur")))
+      (setq msgs (cdr msgs))))
+  t)
+
+(defun elmo-maildir-use-cache-p (spec number)
+  nil)
+
+(defun elmo-maildir-local-file-p (spec number)
+  t)
+
+(defun elmo-maildir-get-msg-filename (spec number &optional loc-alist)
+  (elmo-maildir-number-to-filename 
+   (elmo-maildir-get-folder-directory spec)
+   number (or loc-alist (elmo-msgdb-location-load 
+                        (elmo-msgdb-expand-path 
+                         nil spec)))))
+
+(defalias 'elmo-maildir-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-maildir-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-maildir-list-folder-important
+  'elmo-generic-list-folder-important)
+
+(provide 'elmo-maildir)
+
+;;; elmo-maildir.el ends here
diff --git a/elmo/elmo-msgdb.el b/elmo/elmo-msgdb.el
new file mode 100644 (file)
index 0000000..595a435
--- /dev/null
@@ -0,0 +1,720 @@
+;;; elmo-msgdb.el -- Message Database for Elmo.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/06 13:24:13 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(eval-when-compile (require 'cl))
+(require 'elmo-vars)
+(require 'elmo-util)
+(require 'emu)
+(require 'std11)
+(require 'elmo-cache)
+
+(defun elmo-msgdb-expand-path (folder &optional spec)
+  (convert-standard-filename
+   (let* ((spec (or spec (elmo-folder-get-spec folder)))
+         (type (car spec))
+         fld)
+     (cond 
+      ((eq type 'imap4)
+       (setq fld (elmo-imap4-spec-mailbox spec))
+       (if (string= "inbox" (downcase fld))
+          (setq fld "inbox"))
+       (if (eq (string-to-char fld) ?/)
+          (setq fld (substring fld 1 (length fld))))
+       (expand-file-name 
+       fld
+       (expand-file-name (or (elmo-imap4-spec-username spec) "nobody")
+                         (expand-file-name (or 
+                                            (elmo-imap4-spec-hostname spec)
+                                            "nowhere")
+                                           (expand-file-name 
+                                            "imap"
+                                            elmo-msgdb-dir)))))
+      ((eq type 'nntp)
+       (expand-file-name 
+       (elmo-nntp-spec-group spec)
+       (expand-file-name (or (elmo-nntp-spec-hostname spec) "nowhere")
+                         (expand-file-name "nntp"
+                                           elmo-msgdb-dir))))
+      ((eq type 'maildir)
+       (expand-file-name (elmo-safe-filename (nth 1 spec))
+                        (expand-file-name "maildir"
+                                          elmo-msgdb-dir)))
+      ((eq type 'folder)
+       (expand-file-name (elmo-safe-filename (nth 1 spec))
+                        (expand-file-name "folder"
+                                          elmo-msgdb-dir)))
+      ((eq type 'multi)
+       (expand-file-name (elmo-safe-filename folder)
+                        (expand-file-name "multi"
+                                          elmo-msgdb-dir)))
+      ((eq type 'filter)
+       (expand-file-name
+       (elmo-safe-filename folder)
+       (expand-file-name "filter"
+                         elmo-msgdb-dir)))
+      ((eq type 'archive)
+       (expand-file-name 
+       (directory-file-name
+        (concat
+         (elmo-replace-in-string 
+          (elmo-replace-in-string
+           (elmo-replace-in-string 
+            (nth 1 spec)
+            "/" "_")
+           ":" "__")
+          "~" "___")
+         "/" (nth 3 spec)))
+       (expand-file-name (concat (symbol-name type) "/" 
+                                 (symbol-name (nth 2 spec)))
+                         elmo-msgdb-dir)))
+      ((eq type 'pop3)
+       (expand-file-name 
+       (elmo-safe-filename (elmo-pop3-spec-username spec))
+       (expand-file-name (elmo-pop3-spec-hostname spec)
+                         (expand-file-name
+                          "pop"
+                          elmo-msgdb-dir))))
+      ((eq type 'localnews)
+       (expand-file-name
+       (elmo-replace-in-string (nth 1 spec) "/" ".")
+       (expand-file-name "localnews"
+                         elmo-msgdb-dir)))
+      ((eq type 'internal)
+       (expand-file-name (elmo-safe-filename (concat (symbol-name (nth 1 spec))
+                                                    (nth 2 spec)))
+                        (expand-file-name "internal"
+                                          elmo-msgdb-dir)))
+      ((eq type 'cache)
+       (expand-file-name (elmo-safe-filename (nth 1 spec))
+                        (expand-file-name "internal/cache"
+                                          elmo-msgdb-dir)))
+      (t ; local dir or undefined type
+       ;; absolute path
+       (setq fld (nth 1 spec))
+       (if (file-name-absolute-p fld)
+          (setq fld (elmo-safe-filename fld)))
+       (expand-file-name fld
+                        (expand-file-name (symbol-name type)
+                                          elmo-msgdb-dir)))))))
+
+(defsubst elmo-msgdb-append-element (list element)
+  (if list
+      ;(append list (list element))
+      (nconc list (list element))
+    ;; list is nil
+    (list element)))
+
+(defsubst elmo-msgdb-get-overview (msgdb)
+  (car msgdb))
+(defsubst elmo-msgdb-get-number-alist (msgdb)
+  (cadr msgdb))
+(defsubst elmo-msgdb-get-mark-alist (msgdb)
+  (caddr msgdb))
+(defsubst elmo-msgdb-get-location (msgdb)
+  (cadddr msgdb))
+
+;;
+;; number <-> Message-ID handling
+;;
+(defsubst elmo-msgdb-number-add (alist number id)
+  (let ((ret-val alist))
+    (setq ret-val 
+         (elmo-msgdb-append-element ret-val (cons number id)))
+    ret-val))
+
+;;;
+;; parsistent mark handling
+;; (for global!)
+
+(defvar elmo-msgdb-global-mark-alist nil)
+
+(defun elmo-msgdb-global-mark-delete (msgid)
+  (let* ((path (expand-file-name
+               elmo-msgdb-global-mark-filename
+               elmo-msgdb-dir))
+        (malist (or elmo-msgdb-global-mark-alist 
+                    (setq elmo-msgdb-global-mark-alist 
+                          (elmo-object-load path))))
+        match)
+    (when (setq match (assoc msgid malist))
+      (setq elmo-msgdb-global-mark-alist
+           (delete match elmo-msgdb-global-mark-alist))
+      (elmo-object-save path elmo-msgdb-global-mark-alist))))
+
+(defun elmo-msgdb-global-mark-set (msgid mark)
+  (let* ((path (expand-file-name
+               elmo-msgdb-global-mark-filename
+               elmo-msgdb-dir))
+        (malist (or elmo-msgdb-global-mark-alist 
+                    (setq elmo-msgdb-global-mark-alist 
+                          (elmo-object-load path))))
+        match)
+    (if (setq match (assoc msgid malist))
+       (setcdr match mark)
+      (setq elmo-msgdb-global-mark-alist
+           (nconc elmo-msgdb-global-mark-alist
+                  (list (cons msgid mark)))))
+    (elmo-object-save path elmo-msgdb-global-mark-alist)))
+
+(defun elmo-msgdb-global-mark-get (msgid)
+  (cdr (assoc msgid (or elmo-msgdb-global-mark-alist 
+                       (setq elmo-msgdb-global-mark-alist 
+                             (elmo-object-load 
+                              (expand-file-name
+                               elmo-msgdb-global-mark-filename
+                               elmo-msgdb-dir)))))))
+
+;;
+;; number <-> location handling
+;;
+(defsubst elmo-msgdb-location-load (dir)
+  (elmo-object-load
+   (expand-file-name
+    elmo-msgdb-location-filename
+    dir)))
+                         
+(defsubst elmo-msgdb-location-add (alist number location)
+  (let ((ret-val alist))
+    (setq ret-val 
+         (elmo-msgdb-append-element ret-val (cons number location)))
+    ret-val))
+
+(defsubst elmo-msgdb-location-save (dir alist)
+  (elmo-object-save 
+   (expand-file-name
+    elmo-msgdb-location-filename
+    dir) alist))
+
+(defun elmo-list-folder-by-location (spec locations &optional msgdb)
+  (let* ((path (elmo-msgdb-expand-path nil spec))
+        (location-alist (if msgdb
+                            (elmo-msgdb-get-location msgdb)
+                          (elmo-msgdb-location-load path)))
+        (locations-in-db (mapcar 'cdr location-alist))
+        result new-locs new-alist deleted-locs i
+        modified)
+    (setq new-locs
+         (elmo-delete-if (function
+                          (lambda (x) (member x locations-in-db)))
+                         locations))
+    (setq deleted-locs
+         (elmo-delete-if (function
+                          (lambda (x) (member x locations)))
+                         locations-in-db))
+    (setq modified new-locs)
+    (setq i (or (elmo-max-of-list (mapcar 'car location-alist)) 0))
+    (mapcar 
+     (function 
+      (lambda (x)
+       (setq location-alist
+             (delq (rassoc x location-alist) location-alist))))
+     deleted-locs)
+    (while new-locs
+      (setq i (1+ i))
+      (setq new-alist (cons (cons i (car new-locs)) new-alist))
+      (setq new-locs (cdr new-locs)))
+    (setq result (nconc location-alist new-alist))
+    (setq result (sort result (lambda (x y) (< (car x)(car y)))))
+    (if modified (elmo-msgdb-location-save path result))
+    (mapcar 'car result)))
+
+;;;
+;; persistent mark handling
+;; (for each folder)
+(defun elmo-msgdb-mark-set (alist id mark)
+  (let ((ret-val alist)
+       entity)
+    (setq entity (assq id alist))
+    (if entity
+       (if (eq mark nil)
+           ;; delete this entity
+           (setq ret-val (delq entity alist))
+         ;; set mark
+         (setcar (cdr entity) mark))
+      (if mark 
+         (setq ret-val (elmo-msgdb-append-element ret-val
+                                                  (list id mark)))))
+    ret-val))
+
+(defun elmo-msgdb-mark-append (alist id mark)
+  "Append mark"
+  (setq alist (elmo-msgdb-append-element alist
+                                        (list id mark))))
+
+(defun elmo-msgdb-mark-alist-to-seen-list (number-alist mark-alist seen-marks)
+  "Make seen-list from mark-alist"
+  (let ((seen-mark-list (string-to-char-list seen-marks))
+       ret-val ent)
+    (while number-alist
+      (if (setq ent (assq (car (car number-alist)) mark-alist))
+         (if (and (cadr ent)
+                  (memq (string-to-char (cadr ent)) seen-mark-list))
+             (setq ret-val (cons (cdr (car number-alist)) ret-val)))
+       (setq ret-val (cons (cdr (car number-alist)) ret-val)))
+      (setq number-alist (cdr number-alist)))
+    ret-val))
+
+;;
+;; overview handling
+;;
+
+(defsubst elmo-msgdb-get-field-value (field-name beg end buffer)
+  (save-excursion
+    (save-restriction
+      (set-buffer buffer)
+      (narrow-to-region beg end)
+      (elmo-field-body field-name))))
+
+(defun elmo-multiple-field-body (name &optional boundary)
+  (save-excursion
+    (save-restriction
+      (std11-narrow-to-header boundary)
+      (goto-char (point-min))
+      (let ((case-fold-search t)
+           (field-body nil))
+       (while (re-search-forward (concat "^" name ":[ \t]*") nil t)
+         (setq field-body
+               (nconc field-body
+                      (list (buffer-substring-no-properties 
+                             (match-end 0) (std11-field-end))))))
+       field-body))))
+
+(defun elmo-multiple-fields-body-list (field-names &optional boundary)
+  "Return list of each field-bodies of FIELD-NAMES of the message header
+in current buffer. If BOUNDARY is not nil, it is used as message
+header separator."
+  (save-excursion
+    (save-restriction
+      (std11-narrow-to-header boundary)
+      (let* ((case-fold-search t)
+            (s-rest field-names)
+            field-name field-body)
+       (while (setq field-name (car s-rest))
+         (goto-char (point-min))
+         (while (re-search-forward (concat "^" field-name ":[ \t]*") nil t)
+           (setq field-body
+                 (nconc field-body
+                        (list (buffer-substring-no-properties
+                               (match-end 0) (std11-field-end))))))
+         (setq s-rest (cdr s-rest)))
+       field-body))))
+
+(defsubst elmo-msgdb-remove-field-string (string)
+  (if (string-match (concat std11-field-head-regexp "[ \t]*") string)
+      (substring string (match-end 0))
+    string))
+
+(defsubst elmo-msgdb-get-last-message-id (string)
+  (if string
+      (save-match-data
+       (let (beg)
+         (elmo-set-work-buf
+          (insert string)
+          (goto-char (point-max))
+          (when (search-backward "<" nil t)
+            (setq beg (point))
+            (if (search-forward ">" nil t)
+                (elmo-replace-in-string
+                 (buffer-substring beg (point)) "\n[ \t]*" ""))))))))
+
+(defun elmo-msgdb-number-load (dir)
+  (elmo-object-load 
+   (expand-file-name elmo-msgdb-number-filename dir)))
+
+(defun elmo-msgdb-overview-load (dir)
+  (elmo-object-load 
+   (expand-file-name elmo-msgdb-overview-filename dir)))
+
+(defun elmo-msgdb-mark-load (dir)
+  (elmo-object-load 
+   (expand-file-name elmo-msgdb-mark-filename dir)))
+
+(defsubst elmo-msgdb-seen-load (dir)
+  (elmo-object-load (expand-file-name
+                    elmo-msgdb-seen-filename
+                    dir)))
+
+(defun elmo-msgdb-number-save (dir obj)
+  (elmo-object-save 
+   (expand-file-name elmo-msgdb-number-filename dir)
+   obj))
+
+(defun elmo-msgdb-mark-save (dir obj)
+  (elmo-object-save 
+   (expand-file-name elmo-msgdb-mark-filename dir)
+   obj))
+
+(defsubst elmo-msgdb-seen-save (dir obj)
+  (elmo-object-save 
+   (expand-file-name elmo-msgdb-seen-filename dir)
+   obj))
+
+(defsubst elmo-msgdb-overview-save (dir overview)
+  (elmo-object-save 
+   (expand-file-name elmo-msgdb-overview-filename dir)
+   overview))
+
+(defun elmo-msgdb-delete-msgs (folder msgs msgdb &optional reserve-cache)
+  "Delete MSGS from FOLDER in MSGDB. 
+content of MSGDB is changed."
+  (save-excursion
+    (let* ((msg-list msgs)
+          (dir (elmo-msgdb-expand-path folder))
+          (overview (or (car msgdb)
+                        (elmo-msgdb-overview-load dir)))
+          (number-alist (or (cadr msgdb)
+                            (elmo-msgdb-number-load dir)))
+          (mark-alist (or (caddr msgdb)
+                          (elmo-msgdb-mark-load dir)))
+          message-id)
+      ;; remove from current database.
+      (while msg-list
+       (setq message-id (cdr (assq (car msg-list) number-alist)))
+       (if (and (not reserve-cache) message-id) 
+           (elmo-cache-delete message-id
+                              folder (car msg-list)))
+       ;; This is no good!!!!
+       ;(setq overview (delete (assoc message-id overview) overview))
+       (setq overview 
+             (delq
+              (elmo-msgdb-overview-get-entity-by-number overview 
+                                                        (car msg-list))
+              overview))
+       (setq number-alist
+             (delq (assq (car msg-list) number-alist) number-alist))
+       (setq mark-alist (delq (assq (car msg-list) mark-alist) mark-alist))
+       (setq msg-list (cdr msg-list)))
+      (setcar msgdb overview)
+      (setcar (cdr msgdb) number-alist)
+      (setcar (cddr msgdb) mark-alist))
+    t)) ;return value
+
+(defsubst elmo-msgdb-set-overview (msgdb overview)
+  (setcar msgdb overview))
+
+(defsubst elmo-msgdb-set-number-alist (msgdb number-alist)
+  (setcar (cdr msgdb) number-alist))
+
+(defsubst elmo-msgdb-set-mark-alist (msgdb mark-alist)
+  (setcar (cddr msgdb) mark-alist))
+
+(defsubst elmo-msgdb-overview-entity-get-references (entity)
+  (and entity (aref (cdr entity) 1)))
+
+;; entity -> parent-entity
+(defsubst elmo-msgdb-overview-get-parent-entity (entity database)
+  (setq entity (elmo-msgdb-overview-entity-get-references entity))
+  ;; entity is parent-id.
+  (and entity (assoc entity database)))
+  
+(defsubst elmo-msgdb-overview-entity-get-number (entity)
+  (and entity (aref (cdr entity) 0)))
+
+(defsubst elmo-msgdb-overview-entity-get-from-no-decode (entity)
+  (and entity (aref (cdr entity) 2)))
+
+(defsubst elmo-msgdb-overview-entity-get-from (entity)
+  (and entity
+       (aref (cdr entity) 2)
+       (decode-mime-charset-string (aref (cdr entity) 2) 
+                                  elmo-mime-charset)))
+
+(defsubst elmo-msgdb-overview-entity-set-number (entity number)
+  (and entity (aset (cdr entity) 0 number))
+  entity)
+  ;(setcar (cadr entity) number) entity)
+
+(defsubst elmo-msgdb-overview-entity-set-from (entity from)
+  (and entity (aset (cdr entity) 2 from))
+  entity)
+
+(defsubst elmo-msgdb-overview-entity-get-subject (entity)
+  (and entity
+       (aref (cdr entity) 3)
+       (decode-mime-charset-string (aref (cdr entity) 3)
+                                  elmo-mime-charset)))
+
+(defsubst elmo-msgdb-overview-entity-get-subject-no-decode (entity)
+  (and entity (aref (cdr entity) 3)))
+
+(defsubst elmo-msgdb-overview-entity-set-subject (entity subject)
+  (and entity (aset (cdr entity) 3 subject))
+  entity)
+
+(defsubst elmo-msgdb-overview-entity-get-date (entity)
+  (and entity (aref (cdr entity) 4)))
+
+(defsubst elmo-msgdb-overview-entity-get-to (entity)
+  (and entity (aref (cdr entity) 5)))
+
+(defsubst elmo-msgdb-overview-entity-get-cc (entity)
+  (and entity (aref (cdr entity) 6)))
+
+(defsubst elmo-msgdb-overview-entity-get-size (entity)
+  (and entity (aref (cdr entity) 7)))
+
+(defsubst elmo-msgdb-overview-entity-get-id (entity)
+  (and entity (car entity)))
+
+(defsubst elmo-msgdb-overview-entity-get-extra-field (entity field-name)
+  (let ((extra (and entity (aref (cdr entity) 8))))
+    (and extra
+        (cdr (assoc field-name extra)))))
+
+(defun elmo-msgdb-overview-get-entity-by-number (database number)
+  (let ((db database)
+       entity)
+    (catch 'loop
+      (while db
+       (if (eq (elmo-msgdb-overview-entity-get-number (car db)) number)
+           (progn
+             (setq entity (car db))
+             (throw 'loop nil))
+         (setq db (cdr db)))))
+    entity))
+
+;;
+;; deleted message handling
+;;
+(defun elmo-msgdb-killed-list-load (dir)
+  (elmo-object-load
+   (expand-file-name elmo-msgdb-killed-filename dir)
+   nil t))
+
+(defun elmo-msgdb-killed-list-save (dir killed-list)
+  (elmo-object-save
+   (expand-file-name elmo-msgdb-killed-filename dir)
+   killed-list))
+
+(defun elmo-msgdb-killed-message-p (killed-list msg)
+  (and killed-list
+       (not (listp
+            (catch 'found
+              (mapcar 
+               (function 
+                (lambda (entity)
+                  (cond 
+                   ((integerp entity)
+                    (if (eq entity msg)
+                        (throw 'found t)))
+                   ((consp entity)
+                    (if (and (<= (car entity) msg)
+                             (<= msg (cdr entity)))
+                        (throw 'found t)))))
+                killed-list)))))))
+
+(defun elmo-msgdb-set-as-killed (killed-list msg)
+  "if cons cell, set car-cdr messages as killed.
+if integer, set number th message as killed."
+  (let ((dlist killed-list)
+       (ret-val killed-list)
+       entity found)
+    (cond
+     ((integerp msg)
+      (while (and dlist (not found))
+       (setq entity (car dlist))
+       (if (or (and (integerp entity) (eq entity msg))
+               (and (consp entity) 
+                    (<= (car entity) msg)
+                    (<= msg (cdr entity))))
+           (setq found t))
+       (setq dlist (cdr dlist))
+       )
+      (if (not found)
+         (setq ret-val (elmo-msgdb-append-element killed-list msg)))
+      )
+     ((consp msg)
+      (while (and dlist (not found))
+       (setq entity (car dlist))
+       (if (integerp entity)
+           (cond 
+            ((and (<= (car msg) entity)(<= entity (cdr msg)))
+             (setcar dlist msg)
+             (setq found t)
+             )
+            ((= (1- (car msg)) entity)
+             (setcar dlist (cons entity (cdr msg)))
+             (setq found t)
+             )
+            ((= (1+ (cdr msg)) entity)
+             (setcar dlist (cons (car msg) entity))
+             (setq found t)
+             ))
+         ;; entity is consp
+         (cond  ; there are four patterns
+          ((and (<= (car msg) (car entity))
+                (<= (cdr entity) (cdr msg)))
+           (setcar dlist msg)
+           (setq found t))
+          ((and (< (car entity)(car msg))
+                (< (cdr msg) (cdr entity)))
+           (setq found t))
+          ((and (<= (car msg) (car entity))
+                (<= (cdr msg) (cdr entity)))
+           (setcar dlist (cons (car msg) (cdr entity)))
+           (setq found t))
+          ((and (<= (car entity) (car msg))
+                (<= (cdr entity) (cdr msg)))
+           (setcar dlist (cons (car entity) (cdr msg)))
+           (setq found t))))
+       (setq dlist (cdr dlist)))
+      (if (not found)
+         (setq ret-val (elmo-msgdb-append-element killed-list msg)))))
+    ret-val))
+
+(defun elmo-msgdb-finfo-load ()
+  (elmo-object-load (expand-file-name 
+                    elmo-msgdb-finfo-filename
+                    elmo-msgdb-dir)
+                   elmo-mime-charset t))
+
+(defun elmo-msgdb-finfo-save (finfo)
+  (elmo-object-save (expand-file-name
+                    elmo-msgdb-finfo-filename
+                    elmo-msgdb-dir)
+                   finfo elmo-mime-charset))
+
+(defun elmo-msgdb-flist-load (folder)
+  (let ((flist-file (expand-file-name
+                    elmo-msgdb-flist-filename
+                    (elmo-msgdb-expand-path folder (list 'folder folder)))))
+    (elmo-object-load flist-file nil t)))
+
+(defun elmo-msgdb-flist-save (folder flist)
+  (let ((flist-file (expand-file-name
+                    elmo-msgdb-flist-filename
+                    (elmo-msgdb-expand-path folder (list 'folder folder)))))
+    (elmo-object-save flist-file flist)))
+
+(defun elmo-crosspost-alist-load ()
+  (elmo-object-load (expand-file-name
+                    elmo-crosspost-alist-filename
+                    elmo-msgdb-dir)
+                   nil t))
+
+(defun elmo-crosspost-alist-save (alist)
+  (elmo-object-save (expand-file-name
+                    elmo-crosspost-alist-filename
+                    elmo-msgdb-dir)
+                   alist))
+
+(defsubst elmo-msgdb-create-overview-from-buffer (number &optional size time)
+  "Create overview entity from current buffer. 
+Header region is supposed to be narrowed."
+  (save-excursion
+    (let ((extras elmo-msgdb-extra-fields)
+         message-id references from subject to cc date
+         extra field-body)
+      (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+      (setq message-id (elmo-field-body "message-id"))
+      (setq references
+           (or (elmo-msgdb-get-last-message-id
+                (elmo-field-body "in-reply-to"))
+               (elmo-msgdb-get-last-message-id
+                (elmo-field-body "references"))))
+      (setq from (elmo-mime-string (elmo-delete-char
+                                   ?\"
+                                   (or 
+                                    (elmo-field-body "from")
+                                    elmo-no-from))))
+      (setq subject (elmo-mime-string (or (elmo-field-body "subject")
+                                         elmo-no-subject)))
+      (setq date (or (elmo-field-body "date") time))
+      (setq to   (mapconcat 'identity (elmo-multiple-field-body "to") ","))
+      (setq cc   (mapconcat 'identity (elmo-multiple-field-body "cc") ","))
+      (or size
+         (if (setq size (elmo-field-body "content-length"))
+             (setq size (string-to-int size))
+           (setq size 0)));; No mean...
+      (while extras
+       (if (setq field-body (elmo-field-body (car extras)))
+           (setq extra (cons (cons (downcase (car extras))
+                                   field-body) extra)))
+       (setq extras (cdr extras)))
+      (cons message-id (vector number references 
+                              from subject date to cc
+                              size extra))
+      )))
+  
+(defun elmo-msgdb-overview-sort-by-date (overview)
+  (sort overview
+       (function
+        (lambda (x y) 
+          (condition-case nil
+              (string<
+               (timezone-make-date-sortable 
+                (elmo-msgdb-overview-entity-get-date x))
+               (timezone-make-date-sortable 
+                (elmo-msgdb-overview-entity-get-date y)))
+            (error))))))
+
+(defun elmo-msgdb-sort-by-date (msgdb)
+  (message "Sorting...")
+  (let ((overview (elmo-msgdb-get-overview msgdb)))
+    (setq overview (elmo-msgdb-overview-sort-by-date overview))
+    (message "Sorting...done.")
+    (list overview (nth 1 msgdb)(nth 2 msgdb))))
+
+(defsubst elmo-msgdb-search-overview-entity (number number-alist overview)
+  (let ((message-id (cdr (assq number number-alist)))
+       ovs)
+    (if message-id
+       (assoc message-id overview)
+      (elmo-msgdb-overview-get-entity-by-number overview number))))
+
+(defsubst elmo-msgdb-append (msgdb msgdb-append)
+  (list 
+   (nconc (car msgdb) (car msgdb-append))
+   (nconc (cadr msgdb) (cadr msgdb-append))
+   (nconc (caddr msgdb) (caddr msgdb-append))
+   (nconc (cadddr msgdb) (cadddr msgdb-append))))
+
+(defun elmo-msgdb-delete-path (folder &optional spec)
+  (let ((path (elmo-msgdb-expand-path folder spec)))
+    (if (file-directory-p path)
+       (elmo-delete-directory path t))))
+
+(defun elmo-msgdb-rename-path (old-folder new-folder &optional old-spec new-spec)
+  (let* ((old (directory-file-name (elmo-msgdb-expand-path old-folder old-spec)))
+        (new (directory-file-name (elmo-msgdb-expand-path new-folder new-spec)))
+        (new-dir (directory-file-name (file-name-directory new))))
+    (if (not (file-directory-p old))
+       ()
+      (if (file-exists-p new)
+         (error "already exists directory: %s" new)
+       (if (not (file-exists-p new-dir))
+           (elmo-make-directory new-dir))
+       (rename-file old new)))))
+
+(provide 'elmo-msgdb)
+
+;;; elmo-msgdb.el ends here
diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el
new file mode 100644 (file)
index 0000000..afa7669
--- /dev/null
@@ -0,0 +1,365 @@
+;;; elmo-multi.el -- Multiple Folder Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:41:07 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-msgdb)
+(require 'elmo-vars)
+(require 'elmo2)
+
+(defun elmo-multi-msgdb (msgdb base)
+  (list (mapcar (function
+                (lambda (x) 
+                  (elmo-msgdb-overview-entity-set-number
+                   x
+                   (+ base
+                      (elmo-msgdb-overview-entity-get-number x)))))
+               (nth 0 msgdb))
+       (mapcar (function
+                (lambda (x) (cons
+                             (+ base (car x))
+                             (cdr x))))
+               (nth 1 msgdb))
+       (mapcar (function
+                (lambda (x) (cons
+                             (+ base (car x))
+                             (cdr x)))) (nth 2 msgdb))))
+
+(defun elmo-multi-msgdb-create-as-numlist (spec numlist new-mark already-mark
+                                               seen-mark important-mark
+                                               seen-list)
+  (when numlist
+    (let* ((flds (cdr spec))
+          overview number-alist mark-alist entity
+          one-list-list
+          cur-number
+          i percent num
+          ret-val)
+      (setq one-list-list (elmo-multi-get-intlist-list numlist))
+      (setq cur-number 0)
+      (while (< cur-number (length flds))
+       (setq ret-val 
+             (elmo-msgdb-append 
+              ret-val
+              (elmo-multi-msgdb
+               (elmo-msgdb-create-as-numlist (nth cur-number flds)
+                                             (nth cur-number one-list-list)
+                                             new-mark already-mark
+                                             seen-mark important-mark
+                                             seen-list)
+               (* elmo-multi-divide-number (1+ cur-number)))))
+       (setq cur-number (1+ cur-number)))
+      (elmo-msgdb-sort-by-date ret-val))))
+
+;; returns append-msgdb
+(defun elmo-multi-delete-crossposts (already-msgdb append-msgdb)
+  (let* ((number-alist (elmo-msgdb-get-number-alist append-msgdb))
+        (dummy (copy-sequence (append 
+                               number-alist
+                               (elmo-msgdb-get-number-alist already-msgdb))))
+        (cur number-alist)
+        to-be-deleted
+        overview mark-alist
+        same)
+    (while cur
+      (setq dummy (delq (car cur) dummy))
+      (if (setq same (rassoc (cdr (car cur)) dummy)) ;; same message id is remained
+         (unless (= (/ (car (car cur)) elmo-multi-divide-number)
+                    (/ (car same) elmo-multi-divide-number))
+           ;; base is also same...delete it!
+           (setq to-be-deleted (append to-be-deleted (list (car cur))))))
+      (setq cur (cdr cur)))
+    (setq overview (elmo-delete-if 
+                   (function
+                    (lambda (x)
+                      (assq
+                       (elmo-msgdb-overview-entity-get-number x)
+                       to-be-deleted)))
+                   (elmo-msgdb-get-overview append-msgdb)))
+    (setq mark-alist (elmo-delete-if 
+                     (function
+                      (lambda (x)
+                        (assq
+                         (car x) to-be-deleted)))
+                     (elmo-msgdb-get-mark-alist append-msgdb)))
+    ;; keep number-alist untouched for folder diff!!
+    (cons (and to-be-deleted (length to-be-deleted))
+         (list overview number-alist mark-alist))))
+
+(defun elmo-multi-msgdb-create (spec numlist new-mark already-mark
+                                    seen-mark important-mark seen-list)
+  (when numlist
+    (let* ((flds (cdr spec))
+          overview number-alist mark-alist entity
+          one-list-list
+          cur-number
+          i percent num
+          ret-val)
+      (setq one-list-list (elmo-multi-get-intlist-list numlist))
+      (setq cur-number 0)
+      (while (< cur-number (length flds))
+       (setq ret-val 
+             (elmo-msgdb-append 
+              ret-val
+              (elmo-multi-msgdb
+               (elmo-msgdb-create (nth cur-number flds)
+                                  (nth cur-number one-list-list)
+                                  new-mark already-mark
+                                  seen-mark important-mark
+                                  seen-list)
+               (* elmo-multi-divide-number (1+ cur-number)))))
+       (setq cur-number (1+ cur-number)))
+      (elmo-msgdb-sort-by-date ret-val))))
+
+(defun elmo-multi-list-folders (spec &optional hierarchy)
+  ;; not implemented.
+  nil)
+
+(defun elmo-multi-append-msg (spec string)
+  (error "Cannot append messages to multi folder"))
+
+(defun elmo-multi-read-msg (spec number outbuf)
+  (let* ((flds (cdr spec))
+        (folder (nth (- (/ number elmo-multi-divide-number) 1) flds))
+        (number (% number elmo-multi-divide-number)))
+    (elmo-call-func folder "read-msg" number outbuf)))
+
+(defun elmo-multi-delete-msgs (spec msgs)
+  (let ((flds (cdr spec))
+       one-list-list
+       (cur-number 0))
+    (setq one-list-list (elmo-multi-get-intlist-list msgs))
+    (while (< cur-number (length flds))
+      (elmo-delete-msgs (nth cur-number flds) 
+                       (nth cur-number one-list-list))
+      (setq cur-number (+ 1 cur-number)))
+    t))
+
+(defun elmo-multi-mark-alist-list (mark-alist)
+  (let ((cur-number 0)
+       one-alist result)
+    (while mark-alist
+      (setq cur-number (+ cur-number 1))
+      (setq one-alist nil)
+      (while (and mark-alist
+                 (eq 0
+                     (/ (- (car (car mark-alist))
+                           (* elmo-multi-divide-number cur-number))
+                        elmo-multi-divide-number)))
+       (setq one-alist (nconc
+                        one-alist 
+                        (list 
+                         (list (% (car (car mark-alist))
+                                  (* elmo-multi-divide-number cur-number))
+                               (cadr (car mark-alist))))))
+       (setq mark-alist (cdr mark-alist)))
+      (setq result (nconc result (list one-alist))))
+    result))
+
+(defun elmo-multi-list-folder-unread (spec mark-alist unread-marks)
+  (let* ((flds (cdr spec))
+        (cur-number 0)
+        mark-alist-list
+        ret-val)
+    (setq mark-alist-list (elmo-multi-mark-alist-list mark-alist))
+    (while flds
+      (setq cur-number (+ cur-number 1))
+      (setq ret-val (append 
+                    ret-val
+                    (mapcar 
+                     (function
+                      (lambda (x)
+                        (+ 
+                         (* elmo-multi-divide-number cur-number) x)))
+                     (elmo-list-folder-unread (car flds)
+                                              (car mark-alist-list) 
+                                              unread-marks))))
+      (setq mark-alist-list (cdr mark-alist-list))
+      (setq flds (cdr flds)))
+    ret-val))
+
+(defun elmo-multi-list-folder-important (spec overview)
+  (let* ((flds (cdr spec))
+        (cur-number 0)
+        ret-val)
+    (while flds
+      (setq cur-number (+ cur-number 1))
+      (setq ret-val (append 
+                    ret-val
+                    (mapcar 
+                     (function
+                      (lambda (x)
+                        (+ 
+                         (* elmo-multi-divide-number cur-number) x)))
+                     (elmo-list-folder-important (car flds) overview))))
+      (setq flds (cdr flds)))
+    ret-val))
+
+(defun elmo-multi-list-folder (spec)
+  (let* ((flds (cdr spec))
+        (cur-number 0)
+        ret-val)
+    (while flds
+      (setq cur-number (+ cur-number 1))
+      (setq ret-val (append 
+                    ret-val
+                    (mapcar 
+                     (function
+                      (lambda (x)
+                        (+ 
+                         (* elmo-multi-divide-number cur-number) x)))
+                     (elmo-list-folder (car flds)))))
+      (setq flds (cdr flds)))
+    ret-val))
+
+(defun elmo-multi-folder-exists-p (spec)
+  (let* ((flds (cdr spec)))
+    (catch 'exists
+      (while flds
+       (unless (elmo-folder-exists-p (car flds))
+         (throw 'exists nil))
+       (setq flds (cdr flds)))
+      t)))
+
+(defun elmo-multi-folder-creatable-p (spec)
+  (let* ((flds (cdr spec)))
+    (catch 'creatable
+      (while flds
+       (when (and (elmo-call-func (car flds) "folder-creatable-p")
+                  (not (elmo-folder-exists-p (car flds))))
+             ;; If folder already exists, don't to `creatable'.
+             ;; Because this function is called, when folder doesn't exists.
+         (throw 'creatable t))
+       (setq flds (cdr flds)))
+      nil)))
+
+(defun elmo-multi-create-folder (spec)
+  (let* ((flds (cdr spec)))
+    (catch 'create
+      (while flds
+       (unless (or (elmo-folder-exists-p (car flds))
+                   (elmo-create-folder (car flds)))
+         (throw 'create nil))
+       (setq flds (cdr flds)))
+      t)))
+
+(defun elmo-multi-search (spec condition &optional numlist)
+  (let* ((flds (cdr spec))
+        (cur-number 0)
+        numlist-list cur-numlist ; for filtered search.
+        ret-val)
+    (if numlist
+       (setq numlist-list
+             (elmo-multi-get-intlist-list numlist t)))
+    (while flds
+      (setq cur-number (+ cur-number 1))
+      (when numlist
+       (setq cur-numlist (car numlist-list))
+       (if (null cur-numlist)
+           ;; t means filter all.
+           (setq cur-numlist t)))
+      (setq ret-val (append 
+                    ret-val
+                    (elmo-list-filter 
+                     cur-numlist
+                     (mapcar 
+                      (function
+                       (lambda (x)
+                         (+ 
+                          (* elmo-multi-divide-number cur-number) x)))
+                      (elmo-call-func
+                       (car flds) "search" condition)))))
+      (when numlist
+       (setq numlist-list (cdr numlist-list)))
+      (setq flds (cdr flds)))
+    ret-val))
+
+(defun elmo-multi-use-cache-p (spec number)
+  (elmo-call-func (nth (- (/ number elmo-multi-divide-number) 1) 
+                      (cdr spec))
+                 "use-cache-p" 
+                 (% number elmo-multi-divide-number)))
+
+(defun elmo-multi-local-file-p (spec number)
+  (elmo-call-func (nth (- (/ number elmo-multi-divide-number) 1) 
+                      (cdr spec))
+                 "local-file-p" 
+                 (% number elmo-multi-divide-number)))
+
+(defun elmo-multi-commit (spec)
+  (mapcar 'elmo-commit (cdr spec)))
+
+(defun elmo-multi-plugged-p (spec)
+  (let* ((flds (cdr spec)))
+    (catch 'plugged
+      (while flds
+       (unless (elmo-folder-plugged-p (car flds))
+         (throw 'plugged nil))
+       (setq flds (cdr flds)))
+      t)))
+
+(defun elmo-multi-set-plugged (spec plugged add)
+  (let* ((flds (cdr spec)))
+    (while flds
+      (elmo-folder-set-plugged (car flds) plugged add)
+      (setq flds (cdr flds)))))
+
+(defun elmo-multi-get-msg-filename (spec number &optional loc-alist)
+  (elmo-call-func (nth (- (/ number elmo-multi-divide-number) 1)
+                      (cdr spec))
+                 "get-msg-filename"
+                 (% number elmo-multi-divide-number)
+                 loc-alist))
+
+(defun elmo-multi-sync-number-alist (spec number-alist)
+  (let ((folder-list (cdr spec))
+       (number-alist-list
+        (elmo-multi-get-number-alist-list number-alist))
+       (multi-base 0)
+       append-alist result-alist)
+    (while folder-list
+      (incf multi-base)
+      (setq append-alist
+           (elmo-call-func (nth (- multi-base 1) (cdr spec)) ;; folder name
+                           "sync-number-alist" 
+                           (nth (- multi-base 1) number-alist-list)))
+      (mapcar 
+       (function
+       (lambda (x)
+         (setcar x 
+                 (+ (* elmo-multi-divide-number multi-base) (car x)))))
+       append-alist)
+      (setq result-alist (nconc result-alist append-alist))
+      (setq folder-list (cdr folder-list)))
+    result-alist))
+
+(provide 'elmo-multi)
+
+;;; elmo-multi.el ends here
diff --git a/elmo/elmo-nntp.el b/elmo/elmo-nntp.el
new file mode 100644 (file)
index 0000000..ee7dda8
--- /dev/null
@@ -0,0 +1,1349 @@
+;;; elmo-nntp.el -- NNTP Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:41:50 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-msgdb)
+(eval-when-compile
+  (condition-case nil
+      (progn
+       (require 'starttls))
+    (error))
+  (require 'elmo-cache)
+  (require 'elmo-util)
+  (defun-maybe starttls-negotiate (a)))
+
+;;
+;; internal variables
+;;
+
+(defvar elmo-nntp-connection-cache nil
+  "Cache of NNTP connection.")
+;; buffer local variable
+
+(defvar elmo-nntp-list-folders-use-cache 600
+  "*Time to cache of list folders, as the number of seconds.
+Don't cache if nil.")
+
+(defvar elmo-nntp-list-folders-cache nil)
+(defvar elmo-nntp-groups-hashtb nil)
+(defvar elmo-nntp-groups-async nil)
+(defvar elmo-nntp-header-fetch-chop-length 200)
+
+(defvar elmo-nntp-read-point 0)
+
+(defvar elmo-nntp-send-mode-reader t)
+
+(defvar elmo-nntp-opened-hook nil)
+
+(defvar elmo-nntp-get-folders-securely nil)
+
+(defvar elmo-nntp-default-use-xover t)
+
+(defvar elmo-nntp-default-use-listgroup t)
+
+(defvar elmo-nntp-default-use-list-active t)
+
+(defvar elmo-nntp-server-command-alist nil)
+
+
+(defconst elmo-nntp-server-command-index '((xover . 0)
+                                          (listgroup . 1)
+                                          (list-active . 2)))
+
+(put 'elmo-nntp-setting 'lisp-indent-function 1)
+
+(defmacro elmo-nntp-setting (spec &rest body)
+  (` (let* ((ssl (elmo-nntp-spec-ssl (, spec)))
+           (port (elmo-nntp-spec-port (, spec)))
+           (user (elmo-nntp-spec-username (, spec)))
+           (server (elmo-nntp-spec-hostname (, spec)))
+           (folder (elmo-nntp-spec-group (, spec)))
+           (connection (elmo-nntp-get-connection server user port ssl))
+           (buffer  (car connection))
+           (process (cadr connection)))
+       (,@ body))))
+
+(defmacro elmo-nntp-get-server-command (server port)
+  (` (assoc (cons (, server) (, port)) elmo-nntp-server-command-alist)))
+
+(defmacro elmo-nntp-set-server-command (server port com value)
+  (` (let (entry)
+       (unless (setq entry (cdr (elmo-nntp-get-server-command
+                                (, server) (, port))))
+        (setq elmo-nntp-server-command-alist
+              (nconc elmo-nntp-server-command-alist
+                     (list (cons (cons (, server) (, port))
+                                 (setq entry
+                                       (vector
+                                        elmo-nntp-default-use-xover
+                                        elmo-nntp-default-use-listgroup
+                                        elmo-nntp-default-use-list-active))
+                                 )))))
+       (aset entry
+            (cdr (assq (, com) elmo-nntp-server-command-index))
+            (, value)))))
+
+(defmacro elmo-nntp-xover-p (server port)
+  (` (let ((entry (elmo-nntp-get-server-command (, server) (, port))))
+       (if entry
+          (aref (cdr entry)
+                (cdr (assq 'xover elmo-nntp-server-command-index)))
+        elmo-nntp-default-use-xover))))
+
+(defmacro elmo-nntp-set-xover (server port value)
+  (` (elmo-nntp-set-server-command (, server) (, port) 'xover (, value))))
+
+(defmacro elmo-nntp-listgroup-p (server port)
+  (` (let ((entry (elmo-nntp-get-server-command (, server) (, port))))
+       (if entry
+          (aref (cdr entry)
+                (cdr (assq 'listgroup elmo-nntp-server-command-index)))
+        elmo-nntp-default-use-listgroup))))
+
+(defmacro elmo-nntp-set-listgroup (server port value)
+  (` (elmo-nntp-set-server-command (, server) (, port) 'listgroup (, value))))
+
+(defmacro elmo-nntp-list-active-p (server port)
+  (` (let ((entry (elmo-nntp-get-server-command (, server) (, port))))
+       (if entry
+          (aref (cdr entry)
+                (cdr (assq 'list-active elmo-nntp-server-command-index)))
+        elmo-nntp-default-use-list-active))))
+
+(defmacro elmo-nntp-set-list-active (server port value)
+  (` (elmo-nntp-set-server-command (, server) (, port) 'list-active (, value))))
+
+(defsubst elmo-nntp-max-number-precedes-list-active-p ()
+  elmo-nntp-max-number-precedes-list-active)
+
+(defsubst elmo-nntp-folder-postfix (user server port ssl)
+  (concat
+   (and user (concat ":" user))
+   (if (and server
+           (null (string= server elmo-default-nntp-server)))
+       (concat "@" server))
+   (if (and port
+           (null (eq port elmo-default-nntp-port)))
+       (concat ":" (if (numberp port)
+                      (int-to-string port) port)))
+   (unless (eq ssl elmo-default-nntp-ssl)
+     (if (eq ssl 'starttls)
+        "!!"
+       (if ssl "!")))))
+
+(defun elmo-nntp-flush-connection ()
+  (interactive)
+  (let ((cache elmo-nntp-connection-cache)
+       buffer process)
+    (while cache
+      (setq buffer (car (cdr (car cache))))
+      (if buffer (kill-buffer buffer))
+      (setq process (car (cdr (cdr (car cache)))))
+      (if process (delete-process process))
+      (setq cache (cdr cache)))
+    (setq elmo-nntp-connection-cache nil)))
+
+(defun elmo-nntp-get-connection (server user port ssl)
+  (let* ((user-at-host (format "%s@%s" user server))
+        (user-at-host-on-port (concat 
+                               user-at-host ":" (int-to-string port)
+                               (if (eq ssl 'starttls) "!!" (if ssl "!"))))
+        ret-val result buffer process errmsg proc-stat)
+    (if (not (elmo-plugged-p server port))
+       (error "Unplugged"))
+    (setq ret-val (assoc user-at-host-on-port elmo-nntp-connection-cache))
+    (if (and ret-val 
+            (or (eq  (setq proc-stat 
+                           (process-status (cadr (cdr ret-val))))
+                     'closed)
+                (eq proc-stat 'exit)))
+       ;; connection is closed...
+       (progn
+         (kill-buffer (car (cdr ret-val)))
+         (setq elmo-nntp-connection-cache 
+               (delete ret-val elmo-nntp-connection-cache))
+         (setq ret-val nil)))
+    (if ret-val
+       (cdr ret-val)
+      (setq result (elmo-nntp-open-connection server user port ssl))
+      (if (null result)
+         (progn
+           (if process (delete-process process))
+           (if buffer (kill-buffer buffer))
+           (error "Connection failed"))
+       (setq buffer (car result))
+       (setq process (cdr result))
+       (setq elmo-nntp-connection-cache
+             (nconc elmo-nntp-connection-cache
+                    (list
+                     (cons user-at-host-on-port
+                           (setq ret-val (list buffer process nil))))))
+       ret-val))))
+
+(defun elmo-nntp-process-filter (process output)
+  (save-excursion
+    (set-buffer (process-buffer process))
+    (goto-char (point-max))
+    (insert output)))
+
+(defun elmo-nntp-read-response (buffer process &optional not-command)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         (response-string nil)
+         (response-continue t)
+         (return-value nil)
+         match-end)
+      (while response-continue
+       (goto-char elmo-nntp-read-point)
+       (while (not (search-forward "\r\n" nil t))
+         (accept-process-output process)
+         (goto-char elmo-nntp-read-point))
+
+       (setq match-end (point))
+       (setq response-string
+             (buffer-substring elmo-nntp-read-point (- match-end 2)))
+       (goto-char elmo-nntp-read-point)
+       (if (looking-at "[23][0-9]+ .*$")
+           (progn (setq response-continue nil)
+                  (setq elmo-nntp-read-point match-end)
+                  (setq return-value 
+                        (if return-value 
+                            (concat return-value "\n" response-string)
+                          response-string)))
+         (if (looking-at "[^23][0-9]+ .*$")
+             (progn (setq response-continue nil)
+                    (setq elmo-nntp-read-point match-end)
+                    (setq return-value nil))
+           (setq elmo-nntp-read-point match-end)
+           (if not-command
+               (setq response-continue nil))
+           (setq return-value 
+                 (if return-value 
+                     (concat return-value "\n" response-string)
+                   response-string)))
+         (setq elmo-nntp-read-point match-end)))
+      return-value)))
+
+(defun elmo-nntp-read-raw-response (buffer process)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil))
+      (goto-char elmo-nntp-read-point)
+      (while (not (search-forward "\r\n" nil t))
+       (accept-process-output process)
+       (goto-char elmo-nntp-read-point))
+      (buffer-substring elmo-nntp-read-point (- (point) 2)))))
+
+(defun elmo-nntp-read-contents (buffer process)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         match-end)
+      (goto-char elmo-nntp-read-point)
+      (while (not (re-search-forward "^\\.\r\n" nil t))
+       (accept-process-output process)
+       (goto-char elmo-nntp-read-point))
+      (setq match-end (point))
+      (elmo-delete-cr
+       (buffer-substring elmo-nntp-read-point 
+                        (- match-end 3))))))
+
+(defun elmo-nntp-read-body (buffer process outbuf)
+  (with-current-buffer buffer
+    (let ((start elmo-nntp-read-point)
+         end)
+      (goto-char start)
+      (while (not (re-search-forward "^\\.\r\n" nil t))
+       (accept-process-output process)
+       (goto-char start))
+      (setq end (point))
+      (with-current-buffer outbuf
+       (erase-buffer)
+       (insert-buffer-substring buffer start (- end 3))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-nntp-goto-folder (server folder user port ssl)
+  (let* ((connection (elmo-nntp-get-connection server user port ssl))
+        (buffer  (car connection))
+        (process (cadr connection))
+        (cwf     (caddr connection)))
+    (save-excursion
+      (condition-case ()
+         (if (not (string= cwf folder))
+             (progn
+               (elmo-nntp-send-command buffer 
+                                       process 
+                                       (format "group %s" folder))
+               (if (elmo-nntp-read-response buffer process)
+                   (setcar (cddr connection) folder)))
+           t)
+       (error
+        nil)))))
+
+(defun elmo-nntp-list-folders-get-cache (folder buf)
+  (when (and elmo-nntp-list-folders-use-cache
+            elmo-nntp-list-folders-cache
+            (string-match (concat "^"
+                                  (regexp-quote
+                                   (or
+                                    (nth 1 elmo-nntp-list-folders-cache)
+                                    "")))
+                          (or folder "")))
+    (let* ((cache-time (car elmo-nntp-list-folders-cache)))
+      (unless (elmo-time-expire cache-time
+                               elmo-nntp-list-folders-use-cache)
+       (save-excursion
+         (set-buffer buf)
+         (erase-buffer)
+         (insert (nth 2 elmo-nntp-list-folders-cache))
+         (goto-char (point-min))
+         (and folder
+              (keep-lines (concat "^" (regexp-quote folder) "\\.")))
+         t
+         )))))
+
+(defsubst elmo-nntp-catchup-msgdb (msgdb max-number)
+  (let (msgdb-max number-alist)
+    (setq number-alist (elmo-msgdb-get-number-alist msgdb))
+    (setq msgdb-max (car (nth (max (- (length number-alist) 1) 0)
+                             number-alist)))
+    (if (or (not msgdb-max)
+           (and msgdb-max max-number
+                (< msgdb-max max-number)))
+       (elmo-msgdb-set-number-alist
+        msgdb
+        (nconc number-alist (list (cons max-number nil)))))))
+
+(defun elmo-nntp-list-folders (spec &optional hierarchy)
+  (elmo-nntp-setting spec
+   (let* ((cwf     (caddr connection))  
+         (tmp-buffer (get-buffer-create " *ELMO NNTP list folders TMP*"))
+         response ret-val top-ng append-serv use-list-active start)
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (if (and folder
+              (elmo-nntp-goto-folder server folder user port ssl))
+         (setq ret-val (list folder))) ;; add top newsgroups
+      (unless (setq response (elmo-nntp-list-folders-get-cache
+                             folder tmp-buffer))
+       (when (setq use-list-active (elmo-nntp-list-active-p server port))
+         (elmo-nntp-send-command buffer
+                                 process
+                                 (concat "list"
+                                         (if (and folder
+                                                  (null (string= folder "")))
+                                             (concat " active"
+                                                     (format " %s.*" folder) ""))))
+         (if (elmo-nntp-read-response buffer process t)
+             (if (null (setq response (elmo-nntp-read-contents
+                                       buffer process)))
+                 (error "NNTP List folders failed")
+               (when elmo-nntp-list-folders-use-cache
+                 (setq elmo-nntp-list-folders-cache
+                       (list (current-time) folder response)))
+               (erase-buffer)
+               (insert response))
+           (elmo-nntp-set-list-active server port nil)
+           (setq use-list-active nil)))
+       (when (null use-list-active)
+         (elmo-nntp-send-command buffer process "list")
+         (if (null (and (elmo-nntp-read-response buffer process t)
+                        (setq response (elmo-nntp-read-contents
+                                        buffer process))))
+             (error "NNTP List folders failed"))
+         (when elmo-nntp-list-folders-use-cache
+           (setq elmo-nntp-list-folders-cache
+                 (list (current-time) nil response)))
+         (erase-buffer)
+         (setq start nil)
+         (while (string-match (concat "^"
+                                      (regexp-quote
+                                       (or folder "")) ".*$")
+                              response start)
+           (insert (match-string 0 response) "\n")
+           (setq start (match-end 0)))))
+      (goto-char (point-min))
+      (let ((len (count-lines (point-min) (point-max)))
+           (i 0) regexp)
+       (if hierarchy
+           (progn
+             (setq regexp
+                   (format "^\\(%s[^. ]+\\)\\([. ]\\).*\n"
+                           (if folder (concat folder "\\.") "")))
+             (while (looking-at regexp)
+               (setq top-ng (elmo-match-buffer 1))
+               (if (string= (elmo-match-buffer 2) " ")
+                   (if (not (or (member top-ng ret-val)
+                                (assoc top-ng ret-val)))
+                       (setq ret-val (nconc ret-val (list top-ng))))
+                 (if (member top-ng ret-val)
+                     (setq ret-val (delete top-ng ret-val)))
+                 (if (not (assoc top-ng ret-val))
+                     (setq ret-val (nconc ret-val (list (list top-ng))))))
+               (setq i (1+ i))
+               (and (zerop (% i 10))
+                    (elmo-display-progress
+                     'elmo-nntp-list-folders "Parsing active..."
+                     (/ (* i 100) len)))
+               (forward-line 1)
+               ))
+         (while (re-search-forward "\\([^ ]+\\) .*\n" nil t)
+           (setq ret-val (nconc ret-val
+                                (list (elmo-match-buffer 1))))
+           (setq i (1+ i))
+           (and (zerop (% i 10))
+                (elmo-display-progress
+                 'elmo-nntp-list-folders "Parsing active..."
+                 (/ (* i 100) len))))))
+      (kill-buffer tmp-buffer)
+      (unless (string= server elmo-default-nntp-server)
+       (setq append-serv (concat "@" server)))
+      (unless (eq port elmo-default-nntp-port)
+       (setq append-serv (concat append-serv ":" (int-to-string port))))
+      (unless (eq ssl elmo-default-nntp-ssl)
+       (if ssl
+           (setq append-serv (concat append-serv "!")))
+       (if (eq ssl 'starttls)
+           (setq append-serv (concat append-serv "!"))))
+      (mapcar '(lambda (fld)
+                (if (consp fld)
+                    (list (concat "-" (car fld)
+                                  (and user
+                                       (concat ":" user))
+                                  (and append-serv
+                                       (concat append-serv))))
+                  (concat "-" fld
+                          (and user
+                               (concat ":" user))
+                          (and append-serv 
+                               (concat append-serv)))))
+             ret-val)))))
+
+(defun elmo-nntp-make-msglist (beg-str end-str)
+  (elmo-set-work-buf
+   (let ((beg-num (string-to-int beg-str))
+        (end-num (string-to-int end-str))
+        i)
+     (setq i beg-num)
+     (insert "(")
+     (while (<= i end-num)
+       (insert (format "%s " i))
+       (setq i (1+ i)))
+     (insert ")")
+     (goto-char (point-min))
+     (read (current-buffer)))))
+
+(defun elmo-nntp-list-folder (spec)
+  (elmo-nntp-setting spec
+   (let* ((server (format "%s" server)) ;; delete text property
+         response retval use-listgroup)
+    (save-excursion
+      (when (setq use-listgroup (elmo-nntp-listgroup-p server port))
+       (elmo-nntp-send-command buffer
+                               process
+                               (format "listgroup %s" folder))
+       (if (not (elmo-nntp-read-response buffer process t))
+           (progn
+             (elmo-nntp-set-listgroup server port nil)
+             (setq use-listgroup nil))
+         (if (null (setq response (elmo-nntp-read-contents buffer process)))
+             (error "Fetching listgroup failed"))
+         (setq retval (elmo-string-to-list response))))
+      (if use-listgroup
+         retval
+       (elmo-nntp-send-command buffer 
+                               process 
+                               (format "group %s" folder))
+       (if (null (setq response (elmo-nntp-read-response buffer process)))
+           (error "Select folder failed"))
+       (setcar (cddr connection) folder)
+       (if (and
+            (string-match "211 \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) [^.].+$" 
+                          response)
+            (> (string-to-int (elmo-match-string 1 response)) 0))
+           (elmo-nntp-make-msglist
+            (elmo-match-string 2 response)
+            (elmo-match-string 3 response))
+         nil))))))
+
+(defun elmo-nntp-max-of-folder (spec)
+  (let* ((port (elmo-nntp-spec-port spec))
+        (user (elmo-nntp-spec-username spec))
+        (server (elmo-nntp-spec-hostname spec))
+        (ssl (elmo-nntp-spec-ssl spec))
+        (folder (elmo-nntp-spec-group spec)))
+    (if elmo-nntp-groups-async
+       (let* ((fld (concat folder
+                           (elmo-nntp-folder-postfix user server port ssl)))
+              (entry (elmo-get-hash-val fld elmo-nntp-groups-hashtb)))
+         (if entry
+             (cons (nth 2 entry)
+                   (car entry))
+           (error "No such newsgroup \"%s\"" fld)))
+      (let* ((connection (elmo-nntp-get-connection server user port ssl))
+            (buffer  (car connection))
+            (process (cadr connection))
+            response e-num end-num)
+       (if (not connection)
+           (error "Connection failed"))
+       (save-excursion
+         (elmo-nntp-send-command buffer 
+                                 process 
+                                 (format "group %s" folder))
+         (setq response (elmo-nntp-read-response buffer process))
+         (if (and response 
+                  (string-match 
+                   "211 \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\) [^.].+$" 
+                   response))
+             (progn
+               (setq end-num (string-to-int
+                              (elmo-match-string 3 response)))
+               (setq e-num (string-to-int
+                            (elmo-match-string 1 response)))
+               (cons end-num e-num))
+           (if (null response)
+               (error "Selecting newsgroup \"%s\" failed" folder)
+             nil)))))))
+
+(defconst elmo-nntp-overview-index
+  '(("number" . 0)
+    ("subject" . 1)
+    ("from" . 2)
+    ("date" . 3)
+    ("message-id" . 4)
+    ("references" . 5)
+    ("size" . 6)
+    ("lines" . 7)
+    ("xref" . 8)))
+
+(defun elmo-nntp-create-msgdb-from-overview-string (str 
+                                                   folder
+                                                   new-mark
+                                                   already-mark
+                                                   seen-mark
+                                                   important-mark
+                                                   seen-list
+                                                   &optional numlist)
+  (let (ov-list gmark message-id seen
+       ov-entity overview number-alist mark-alist num
+       extras extra ext field field-index)
+    (setq ov-list (elmo-nntp-parse-overview-string str))
+    (while ov-list
+      (setq ov-entity (car ov-list))
+      ;; INN bug??
+;      (if (or (> (setq num (string-to-int (aref ov-entity 0)))
+;               99999)
+;            (<= num 0))
+;        (setq num 0))
+;     (setq num (int-to-string num))
+      (setq num (string-to-int (aref ov-entity 0)))
+      (when (or (null numlist)
+               (memq num numlist))
+       (setq extras elmo-msgdb-extra-fields
+             extra nil)
+       (while extras
+         (setq ext (downcase (car extras)))
+         (when (setq field-index (cdr (assoc ext elmo-nntp-overview-index)))
+           (setq field (aref ov-entity field-index))
+           (when (eq field-index 8) ;; xref
+             (setq field (elmo-msgdb-remove-field-string field)))
+           (setq extra (cons (cons ext field) extra)))
+         (setq extras (cdr extras)))
+       (setq overview
+             (elmo-msgdb-append-element 
+              overview
+              (cons (aref ov-entity 4)
+                    (vector num
+                            (elmo-msgdb-get-last-message-id 
+                             (aref ov-entity 5))
+                            ;; from
+                            (elmo-mime-string (elmo-delete-char 
+                                               ?\"
+                                               (or 
+                                                (aref ov-entity 2) 
+                                                elmo-no-from) 'uni))
+                            ;; subject
+                            (elmo-mime-string (or (aref ov-entity 1)
+                                                  elmo-no-subject))
+                            (aref ov-entity 3) ;date
+                            nil ; to
+                            nil ; cc
+                            (string-to-int
+                             (aref ov-entity 6)) ; size
+                            extra ; extra-field-list
+                            ))))
+       (setq number-alist
+             (elmo-msgdb-number-add number-alist num
+                                    (aref ov-entity 4)))
+       (setq message-id (aref ov-entity 4))
+       (setq seen (member message-id seen-list))
+       (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                           (if (elmo-cache-exists-p message-id);; XXX
+                               (if seen
+                                   nil
+                                 already-mark)
+                             (if seen
+                                 (if elmo-nntp-use-cache
+                                     seen-mark)
+                               new-mark))))
+           (setq mark-alist
+                 (elmo-msgdb-mark-append mark-alist 
+                                         num gmark))))
+      (setq ov-list (cdr ov-list)))
+    (list overview number-alist mark-alist)))
+
+(defun elmo-nntp-msgdb-create-as-numlist (spec numlist new-mark already-mark
+                                              seen-mark important-mark
+                                              seen-list)
+  "Create msgdb for SPEC for NUMLIST."
+  (elmo-nntp-msgdb-create spec numlist new-mark already-mark
+                         seen-mark important-mark seen-list
+                         t))
+
+(defun elmo-nntp-msgdb-create (spec numlist new-mark already-mark
+                                   seen-mark important-mark 
+                                   seen-list &optional as-num)
+  (when numlist
+    (save-excursion
+     (elmo-nntp-setting spec
+      (let* ((cwf     (caddr connection))
+            (filter  (and as-num numlist))
+            beg-num end-num cur length
+            ret-val ov-str use-xover)
+       (if (and folder
+                (not (string= cwf folder))
+                (null (elmo-nntp-goto-folder server folder user port ssl)))
+           (error "group %s not found" folder))
+       (when (setq use-xover (elmo-nntp-xover-p server port))
+         (setq beg-num (car numlist)
+               cur beg-num
+               end-num (nth (1- (length numlist)) numlist)
+               length  (+ (- end-num beg-num) 1))
+         (message "Getting overview...")
+         (while (<= cur end-num)
+           (elmo-nntp-send-command buffer process 
+                                   (format 
+                                    "xover %s-%s" 
+                                    (int-to-string cur)
+                                    (int-to-string 
+                                     (+ cur 
+                                        elmo-nntp-overview-fetch-chop-length))))
+           (with-current-buffer buffer
+             (if ov-str
+                 (setq ret-val 
+                       (elmo-msgdb-append
+                        ret-val
+                        (elmo-nntp-create-msgdb-from-overview-string 
+                         ov-str
+                         folder
+                         new-mark
+                         already-mark
+                         seen-mark
+                         important-mark
+                         seen-list
+                         filter
+                         )))))
+           (if (null (elmo-nntp-read-response buffer process t))
+               (progn
+                 (setq cur end-num);; exit while loop
+                 (elmo-nntp-set-xover server port nil)
+                 (setq use-xover nil))
+             (if (null (setq ov-str (elmo-nntp-read-contents buffer process)))
+                 (error "Fetching overview failed")))
+           (setq cur (+ elmo-nntp-overview-fetch-chop-length cur 1))
+           (elmo-display-progress
+            'elmo-nntp-msgdb-create "Getting overview..." 
+            (/ (* (+ (- (min cur
+                             end-num)
+                        beg-num) 1) 100) length))))
+       (if (not use-xover)
+           (setq ret-val (elmo-nntp-msgdb-create-by-header
+                          folder buffer process numlist
+                          new-mark already-mark seen-mark seen-list))
+         (with-current-buffer buffer
+           (if ov-str
+               (setq ret-val 
+                     (elmo-msgdb-append
+                      ret-val
+                      (elmo-nntp-create-msgdb-from-overview-string 
+                       ov-str
+                       folder
+                       new-mark
+                       already-mark
+                       seen-mark
+                       important-mark
+                       seen-list
+                       filter)))))
+         (message "Getting overview...done."))
+       ;; If there are canceled messages, overviews are not obtained
+       ;; to max-number(inn 2.3?).
+       (when (and (elmo-nntp-max-number-precedes-list-active-p)
+                  (elmo-nntp-list-active-p server port))
+         (elmo-nntp-send-command buffer process 
+                                 (format "list active %s" folder))
+         (if (null (elmo-nntp-read-response buffer process))
+             (progn
+               (elmo-nntp-set-list-active server port nil)
+               (error "NNTP list command failed")))
+         (elmo-nntp-catchup-msgdb 
+          ret-val 
+          (nth 1 (read (concat "(" (elmo-nntp-read-contents 
+                                    buffer process) ")")))))
+       ret-val)))))
+
+(defun elmo-nntp-sync-number-alist (spec number-alist)
+  (if (elmo-nntp-max-number-precedes-list-active-p)
+      (elmo-nntp-setting spec
+       (if (elmo-nntp-list-active-p server port)
+           (let* ((cwf (caddr connection))
+                  msgdb-max max-number)
+             ;; If there are canceled messages, overviews are not obtained
+             ;; to max-number(inn 2.3?).
+             (if (and folder
+                      (not (string= cwf folder))
+                      (null (elmo-nntp-goto-folder
+                             server folder user port ssl)))
+                 (error "group %s not found" folder))
+             (elmo-nntp-send-command buffer process
+                                     (format "list active %s" folder))
+             (if (null (elmo-nntp-read-response buffer process))
+                 (error "NNTP list command failed"))
+             (setq max-number
+                   (nth 1 (read (concat "(" (elmo-nntp-read-contents
+                                             buffer process) ")"))))
+             (setq msgdb-max
+                   (car (nth (max (- (length number-alist) 1) 0)
+                             number-alist)))
+             (if (or (and number-alist (not msgdb-max))
+                     (and msgdb-max max-number
+                          (< msgdb-max max-number)))
+                 (nconc number-alist
+                        (list (cons max-number nil)))
+               number-alist))
+         number-alist))))
+
+(defun elmo-nntp-msgdb-create-by-header (folder buffer process numlist
+                                               new-mark already-mark 
+                                               seen-mark seen-list)
+  (let ((tmp-buffer (get-buffer-create " *ELMO Overview TMP*"))
+       ret-val)
+    (elmo-nntp-retrieve-headers
+     buffer tmp-buffer process numlist)
+    (setq ret-val
+         (elmo-nntp-msgdb-create-message
+          tmp-buffer (length numlist) folder new-mark already-mark 
+          seen-mark seen-list))
+    (kill-buffer tmp-buffer)
+    ret-val))
+
+(defun elmo-nntp-parse-overview-string (string)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO Overview TMP*"))
+         ret-list ret-val beg)
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (elmo-set-buffer-multibyte nil)
+      (insert string)
+      (goto-char (point-min))
+      (setq beg (point))
+      (while (not (eobp))
+       (end-of-line)
+       (setq ret-list (save-match-data
+                        (apply 'vector (split-string 
+                                        (buffer-substring beg (point)) 
+                                        "\t"))))
+       (beginning-of-line)
+       (forward-line 1)
+       (setq beg (point))
+       (setq ret-val (nconc ret-val (list ret-list))))
+;      (kill-buffer tmp-buffer)
+      ret-val)))
+
+(defun elmo-nntp-get-overview (server beg end folder user port ssl)
+  (save-excursion
+    (let* ((connection (elmo-nntp-get-connection server user port ssl))
+          (buffer  (car connection))
+          (process (cadr connection))
+;         (cwf     (caddr connection))  
+          response errmsg ov-str)  
+      (catch 'done
+       (if folder
+           (if (null (elmo-nntp-goto-folder server folder user port ssl))
+               (progn
+                 (setq errmsg (format "group %s not found." folder))
+                 (throw 'done nil))))
+       (elmo-nntp-send-command buffer process 
+                               (format "xover %s-%s" beg end))
+       (if (null (setq response (elmo-nntp-read-response
+                                 buffer process t)))
+           (progn
+             (setq errmsg "Getting overview failed.")
+             (throw 'done nil)))
+       (if (null (setq response (elmo-nntp-read-contents
+                                 buffer process)))
+           (progn
+             ;(setq errmsg "Fetching header failed")
+             (throw 'done nil)))
+       (setq ov-str response)
+       )
+      (if errmsg
+         (progn 
+           (message errmsg)
+           nil)
+       ov-str))))
+
+
+(defun elmo-nntp-get-message (server user number folder outbuf port ssl)
+  "Get nntp message on FOLDER at SERVER. 
+Returns message string."
+  (save-excursion
+    (let* ((connection (elmo-nntp-get-connection server user port ssl))
+          (buffer  (car connection))
+          (process (cadr connection))
+          (cwf     (caddr connection))  
+          response errmsg)
+      (catch 'done
+       (if (and folder
+                (not (string= cwf folder)))
+           (if (null (elmo-nntp-goto-folder server folder user port ssl))
+               (progn
+                 (setq errmsg (format "group %s not found." folder))
+                 (throw 'done nil))))
+       (elmo-nntp-send-command buffer process 
+                               (format "article %s" number))
+       (if (null (setq response (elmo-nntp-read-response
+                                 buffer process t)))
+           (progn
+             (setq errmsg "Fetching message failed")
+             (set-buffer outbuf)
+             (erase-buffer)
+             (insert "\n\n")
+             (throw 'done nil)))
+       (setq response (elmo-nntp-read-body buffer process outbuf))
+       (set-buffer outbuf)
+       (goto-char (point-min))
+       (while (re-search-forward "^\\." nil t)
+         (replace-match "")
+         (forward-line))
+       )
+      (if errmsg
+         (progn 
+           (message errmsg)
+           nil))
+      response)))
+
+(defun elmo-nntp-get-newsgroup-by-msgid (msgid server user port ssl)
+  "Get nntp header string."
+  (save-excursion
+    (let* ((connection (elmo-nntp-get-connection server user port ssl))
+          (buffer  (car connection))
+          (process (cadr connection)))
+      (elmo-nntp-send-command buffer process 
+                             (format "head %s" msgid))
+      (if (elmo-nntp-read-response buffer process)
+         (elmo-nntp-read-contents buffer process))
+      (set-buffer buffer)
+      (std11-field-body "Newsgroups"))))
+
+(defun elmo-nntp-open-connection (server user portnum ssl)
+  "Open NNTP connection and returns 
+the list of (process session-buffer current-working-folder).
+Return nil if connection failed."
+  (let ((process nil)
+       (host server)
+       (port (or portnum
+                 elmo-default-nntp-port))
+       (user-at-host (format "%s@%s" user server))
+       process-buffer)
+    (as-binary-process
+     (catch 'done
+       (setq process-buffer
+            (get-buffer-create (format " *NNTP session to %s:%d" host port)))
+       (save-excursion
+        (set-buffer process-buffer)
+        (elmo-set-buffer-multibyte nil)
+        (erase-buffer))
+       (setq process
+            (elmo-open-network-stream "NNTP" process-buffer host port ssl))
+       (and (null process) (throw 'done nil))
+       (set-process-filter process 'elmo-nntp-process-filter)
+       ;; flush connections when exiting...?
+       ;; (add-hook 'kill-emacs-hook 'elmo-nntp-flush-connection)
+       (save-excursion
+        (set-buffer process-buffer)
+        (elmo-set-buffer-multibyte nil)
+        (make-local-variable 'elmo-nntp-read-point)
+        (setq elmo-nntp-read-point (point-min))
+        (if (null (elmo-nntp-read-response process-buffer process t))
+            (throw 'done nil))
+        (if elmo-nntp-send-mode-reader
+            (elmo-nntp-send-mode-reader process-buffer process))
+        ;; starttls
+        (if (eq ssl 'starttls)
+            (if (progn
+                  (elmo-nntp-send-command process-buffer process "starttls")
+                  (elmo-nntp-read-response process-buffer process))
+                (starttls-negotiate process)
+              (error "STARTTLS aborted")))
+        (if user
+            (progn
+              (elmo-nntp-send-command process-buffer process
+                                      (format "authinfo user %s" user))
+              (if (null (elmo-nntp-read-response process-buffer process))
+                  (error "Authinfo failed"))
+              (elmo-nntp-send-command process-buffer process
+                                      (format "authinfo pass %s"
+                                              (elmo-get-passwd user-at-host)))
+              (if (null (elmo-nntp-read-response process-buffer process))
+                  (progn
+                    (elmo-remove-passwd user-at-host)
+                    (error "Authinfo failed")))))
+        (run-hooks 'elmo-nntp-opened-hook)) ; XXX
+       (cons process-buffer process)))))
+
+(defun elmo-nntp-send-mode-reader (buffer process)
+  (elmo-nntp-send-command buffer
+                         process
+                         "mode reader")
+  (if (null (elmo-nntp-read-response buffer process t))
+      (error "mode reader failed")))
+  
+(defun elmo-nntp-send-command (buffer process command &optional noerase)
+  "Send COMMAND string to server with sequence number."
+  (save-excursion
+    (set-buffer buffer)
+    (when (not noerase)
+      (erase-buffer)
+      (goto-char (point-min)))
+    (setq elmo-nntp-read-point (point))
+    (process-send-string process command)
+    (process-send-string process "\r\n")))
+
+(defun elmo-nntp-read-msg (spec msg outbuf)
+  (elmo-nntp-get-message (elmo-nntp-spec-hostname spec)
+                        (elmo-nntp-spec-username spec)
+                        msg 
+                        (elmo-nntp-spec-group spec)
+                        outbuf 
+                        (elmo-nntp-spec-port spec)
+                        (elmo-nntp-spec-ssl spec)))
+
+;(defun elmo-msgdb-nntp-overview-create-range (spec beg end mark)
+;    (elmo-nntp-overview-create-range hostname beg end mark folder)))
+
+;(defun elmo-msgdb-nntp-max-of-folder (spec)
+;    (elmo-nntp-max-of-folder hostname folder)))
+
+(defun elmo-nntp-append-msg (spec string &optional msg no-see))
+
+(defun elmo-nntp-post (hostname content-buf)
+  (let* (;(folder (nth 1 spec))
+        (connection 
+         (elmo-nntp-get-connection 
+          hostname 
+          elmo-default-nntp-user
+          elmo-default-nntp-port elmo-default-nntp-ssl))
+        (buffer (car connection))
+        (process (cadr connection))
+        response has-message-id
+        )
+    (save-excursion
+      (set-buffer content-buf)
+      (goto-char (point-min))
+      (if (search-forward mail-header-separator nil t)
+         (delete-region (match-beginning 0)(match-end 0)))
+      (setq has-message-id (std11-field-body "message-id"))
+      (elmo-nntp-send-command buffer process "post")
+      (if (string-match "^340" (setq response 
+                                    (elmo-nntp-read-raw-response 
+                                     buffer process)))
+         (if (string-match "recommended ID \\(<[^@]+@[^>]+>\\)" response)
+             (unless has-message-id
+               (goto-char (point-min))
+               (insert (concat "Message-ID: "
+                               (elmo-match-string 1 response)
+                               "\n"))))
+       (error "POST failed"))
+      (current-buffer)
+      (run-hooks 'elmo-nntp-post-pre-hook)
+      (set-buffer buffer)
+      (elmo-nntp-send-data process content-buf)
+      (elmo-nntp-send-command buffer process ".")
+      ;(elmo-nntp-read-response buffer process t)
+      (if (not (string-match 
+               "^2" (setq response (elmo-nntp-read-raw-response
+                                    buffer process))))
+         (error (concat "NNTP error: " response))))))
+
+(defun elmo-nntp-send-data-line (process data)
+  (goto-char (point-max))
+
+  ;; Escape "." at start of a line
+  (if (eq (string-to-char data) ?.)
+      (process-send-string process "."))
+  (process-send-string process data)
+  (process-send-string process "\r\n"))
+
+(defun elmo-nntp-send-data (process buffer)
+  (let
+      ((data-continue t)
+       (sending-data nil)
+       this-line
+       this-line-end)
+    (save-excursion
+      (set-buffer buffer)
+      (goto-char (point-min)))
+
+    (while data-continue
+      (save-excursion
+       (set-buffer buffer)
+       (beginning-of-line)
+       (setq this-line (point))
+       (end-of-line)
+       (setq this-line-end (point))
+       (setq sending-data nil)
+       (setq sending-data (buffer-substring this-line this-line-end))
+       (if (/= (forward-line 1) 0)
+           (setq data-continue nil)))
+
+      (elmo-nntp-send-data-line process sending-data))))
+
+
+(defun elmo-nntp-delete-msgs (spec msgs)
+  "MSGS on FOLDER at SERVER pretended as Deleted. Returns nil if failed."
+  (let* ((dir (elmo-msgdb-expand-path nil spec))
+;       (msgs (mapcar 'string-to-int msgs))
+        (killed-list (elmo-msgdb-killed-list-load dir)))
+    (mapcar '(lambda (msg)
+              (setq killed-list
+                    (elmo-msgdb-set-as-killed killed-list msg)))
+           msgs)
+    (elmo-msgdb-killed-list-save dir killed-list)
+    t))
+
+(defun elmo-nntp-check-validity (spec validity-file)
+  t)
+(defun elmo-nntp-sync-validity (spec validity-file)
+  t)
+
+(defun elmo-nntp-folder-exists-p (spec)
+  (if (elmo-nntp-plugged-p spec)
+      (elmo-nntp-setting spec
+       (elmo-nntp-send-command buffer
+                               process
+                               (format "group %s" folder))
+       (elmo-nntp-read-response buffer process))
+    t))
+
+(defun elmo-nntp-folder-creatable-p (spec)
+  nil)
+
+(defun elmo-nntp-create-folder (spec)
+  nil) ; noop
+
+(defun elmo-nntp-search (spec condition &optional from-msgs)
+  (error "Search by %s for %s is not implemented yet." condition (car spec))
+  nil)
+
+(defun elmo-nntp-get-folders-info-prepare (spec connection-keys)
+  (condition-case ()
+      (elmo-nntp-setting spec
+       (let (key count)
+         (save-excursion
+           (set-buffer buffer)
+           (unless (setq key (assoc (cons buffer process) connection-keys))
+             (erase-buffer)
+             (setq key (cons (cons buffer process)
+                             (vector 0 server user port ssl)))
+             (setq connection-keys (nconc connection-keys (list key))))
+           (elmo-nntp-send-command buffer 
+                                   process 
+                                   (format "group %s" folder)
+                                   t ;; don't erase-buffer
+                                   )
+           (if elmo-nntp-get-folders-securely
+               (accept-process-output process 1))
+           (setq count (aref (cdr key) 0))
+           (aset (cdr key) 0 (1+ count)))))
+    (error
+     (when elmo-auto-change-plugged
+       (sit-for 1))
+     nil))
+  connection-keys)
+
+(defun elmo-nntp-get-folders-info (connection-keys)
+  (let ((connections connection-keys)
+       (cur (get-buffer-create " *ELMO NNTP Temp*")))
+    (while connections
+      (let* ((connect (caar connections))
+            (key     (cdar connections))
+            (buffer  (car connect))
+            (process (cdr connect))
+            (count   (aref key 0))
+            (server  (aref key 1))
+            (user    (aref key 2))
+            (port    (aref key 3))
+            (ssl     (aref key 4))
+            (hashtb (or elmo-nntp-groups-hashtb
+                        (setq elmo-nntp-groups-hashtb
+                              (elmo-make-hash count)))))
+       (save-excursion
+         (elmo-nntp-groups-read-response buffer cur process count)
+         (set-buffer cur)
+         (goto-char (point-min))
+         (let ((case-replace nil)
+               (postfix (elmo-nntp-folder-postfix user server port ssl)))
+           (if (not (string= postfix ""))
+               (save-excursion
+                 (replace-regexp "^\\(211 [0-9]+ [0-9]+ [0-9]+ [^ \n]+\\).*$"
+                                 (concat "\\1" postfix)))))
+         (let (len min max group)
+           (while (not (eobp))
+             (condition-case ()
+                 (when (= (following-char) ?2)
+                   (read cur)
+                   (setq len (read cur)
+                         min (read cur)
+                         max (read cur))
+                   (set (setq group (let ((obarray hashtb)) (read cur)))
+                        (list len min max)))
+               (error (and group (symbolp group) (set group nil))))
+             (forward-line 1))))
+       (setq connections (cdr connections))))
+    (kill-buffer cur)))
+
+;; original is 'nntp-retrieve-groups [Gnus]
+(defun elmo-nntp-groups-read-response (buffer tobuffer process count)
+  (let* ((received 0)
+        (last-point (point-min)))
+    (save-excursion
+      (set-buffer buffer)
+      (accept-process-output process 1)
+      (discard-input)
+      ;; Wait for all replies.
+      (message "Getting folders info...")
+      (while (progn
+              (goto-char last-point)
+              ;; Count replies.
+              (while (re-search-forward "^[0-9]" nil t)
+                (setq received
+                      (1+ received)))
+              (setq last-point (point))
+              (< received count))
+       (accept-process-output process 1)
+       (discard-input)
+       (and (zerop (% received 10))
+            (elmo-display-progress
+             'elmo-nntp-groups-read-response "Getting folders info..."
+             (/ (* received 100) count)))
+       )
+      ;; Wait for the reply from the final command.
+      (goto-char (point-max))
+      (re-search-backward "^[0-9]" nil t)
+      (when (looking-at "^[23]")
+       (while (progn
+                (goto-char (point-max))
+                (not (re-search-backward "\r?\n" (- (point) 3) t)))
+         (accept-process-output process 1)
+         (discard-input)))
+      ;; Now all replies are received.  We remove CRs.
+      (goto-char (point-min))
+      (while (search-forward "\r" nil t)
+       (replace-match "" t t))
+      (copy-to-buffer tobuffer (point-min) (point-max)))))
+
+(defun elmo-nntp-make-groups-hashtb (folders &optional size)
+  (let ((hashtb (or elmo-nntp-groups-hashtb
+                   (setq elmo-nntp-groups-hashtb
+                         (elmo-make-hash (or size (length folders)))))))
+    (mapcar
+     '(lambda (fld)
+       (or (elmo-get-hash-val fld hashtb)
+           (elmo-set-hash-val fld nil hashtb)))
+     folders)
+    hashtb))
+
+;; from nntp.el [Gnus]
+
+(defsubst elmo-nntp-next-result-arrived-p ()
+  (cond
+   ((eq (following-char) ?2)
+    (if (re-search-forward "\n\\.\r?\n" nil t)
+       t
+      nil))
+   ((looking-at "[34]")
+    (if (search-forward "\n" nil t)
+       t
+      nil))
+   (t
+    nil)))
+
+(defun elmo-nntp-retrieve-headers (buffer tobuffer process articles)
+  "Retrieve the headers of ARTICLES."
+  (save-excursion
+    (set-buffer buffer)
+    (erase-buffer)
+    (let ((number (length articles))
+         (count 0)
+         (received 0)
+         (last-point (point-min))
+         article)
+      ;; Send HEAD commands.
+      (while (setq article (pop articles))
+       (elmo-nntp-send-command
+        buffer
+        process
+        (format "head %s" article)
+        t ;; not erase-buffer
+        )
+       (setq count (1+ count))
+       ;; Every 200 requests we have to read the stream in
+       ;; order to avoid deadlocks.
+       (when (or (null articles)       ;All requests have been sent.
+                 (zerop (% count elmo-nntp-header-fetch-chop-length)))
+         (accept-process-output process 1)
+         (discard-input)
+         (while (progn
+                  (set-buffer buffer)
+                  (goto-char last-point)
+                  ;; Count replies.
+                  (while (elmo-nntp-next-result-arrived-p)
+                    (setq last-point (point))
+                    (setq received (1+ received)))
+                  (< received count))
+           (and (zerop (% received 20))
+                (elmo-display-progress
+                 'elmo-nntp-retrieve-headers "Getting headers..."
+                 (/ (* received 100) number)))
+           (accept-process-output process 1)
+           (discard-input)
+           )))
+      (message "Getting headers...done")
+      ;; Remove all "\r"'s.
+      (goto-char (point-min))
+      (while (search-forward "\r\n" nil t)
+       (replace-match "\n"))
+      (copy-to-buffer tobuffer (point-min) (point-max)))))
+
+;; end of from Gnus
+
+(defun elmo-nntp-msgdb-create-message (buffer len folder new-mark 
+                                             already-mark seen-mark seen-list)
+  (save-excursion
+    (let (beg
+         overview number-alist mark-alist
+         entity i num gmark seen message-id)
+      (set-buffer buffer)
+      (elmo-set-buffer-multibyte nil)
+      (goto-char (point-min))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while (not (eobp))
+       (setq beg (save-excursion (forward-line 1) (point)))
+       (setq num
+             (and (looking-at "^2[0-9]*[ ]+\\([0-9]+\\)")
+                  (string-to-int 
+                   (elmo-match-buffer 1))))
+       (elmo-nntp-next-result-arrived-p)
+       (when num
+         (save-excursion
+           (forward-line -1)
+           (save-restriction
+             (narrow-to-region beg (point))
+             (setq entity
+                   (elmo-msgdb-create-overview-from-buffer num))
+             (when entity
+               (setq overview 
+                     (elmo-msgdb-append-element
+                      overview entity))
+               (setq number-alist
+                     (elmo-msgdb-number-add number-alist
+                                            (elmo-msgdb-overview-entity-get-number entity)
+                                            (car entity)))
+               (setq message-id (car entity))
+               (setq seen (member message-id seen-list))
+               (if (setq gmark 
+                         (or (elmo-msgdb-global-mark-get message-id)
+                             (if (elmo-cache-exists-p message-id);; XXX
+                                 (if seen
+                                     nil
+                                   already-mark)
+                               (if seen
+                                   seen-mark
+                                 new-mark))))
+                   (setq mark-alist
+                         (elmo-msgdb-mark-append 
+                          mark-alist 
+                          num gmark)))
+               ))))
+       (setq i (1+ i))
+       (and (zerop (% i 20))
+            (elmo-display-progress
+             'elmo-nntp-msgdb-create-message "Creating msgdb..."
+             (/ (* i 100) len)))
+       )
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist))))
+
+(defun elmo-nntp-use-cache-p (spec number)
+  elmo-nntp-use-cache)
+
+(defun elmo-nntp-local-file-p (spec number)
+  nil)
+
+(defun elmo-nntp-port-label (spec)
+  (concat "nntp"
+         (if (elmo-nntp-spec-ssl spec) "!ssl" "")))
+
+(defsubst elmo-nntp-portinfo (spec)
+  (list (elmo-nntp-spec-hostname spec) 
+       (elmo-nntp-spec-port spec)))
+
+(defun elmo-nntp-plugged-p (spec)
+  (apply 'elmo-plugged-p
+        (append (elmo-nntp-portinfo spec)
+                (list nil (quote (elmo-nntp-port-label spec))))))
+
+(defun elmo-nntp-set-plugged (spec plugged add)
+  (apply 'elmo-set-plugged plugged
+        (append (elmo-nntp-portinfo spec)
+                (list nil nil (quote (elmo-nntp-port-label spec)) add))))
+
+(defalias 'elmo-nntp-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-nntp-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-nntp-commit 'elmo-generic-commit)
+
+(provide 'elmo-nntp)
+
+;;; elmo-nntp.el ends here
diff --git a/elmo/elmo-pipe.el b/elmo/elmo-pipe.el
new file mode 100644 (file)
index 0000000..a6d1c8f
--- /dev/null
@@ -0,0 +1,142 @@
+;;; elmo-pipe.el -- PIPE Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-03 14:06:56 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-msgdb)
+
+(defsubst elmo-pipe-spec-src (spec)
+  (nth 1 spec))
+
+(defsubst elmo-pipe-spec-dst (spec)
+  (nth 2 spec))
+
+(defalias 'elmo-pipe-msgdb-create 'elmo-pipe-msgdb-create-as-numlist)
+
+(defun elmo-pipe-msgdb-create-as-numlist (spec numlist new-mark already-mark
+                                              seen-mark important-mark 
+                                              seen-list)
+  (elmo-msgdb-create-as-numlist (elmo-pipe-spec-dst spec)
+                               numlist new-mark already-mark
+                               seen-mark important-mark seen-list))
+
+(defun elmo-pipe-list-folders (spec &optional hierarchy)
+  nil)
+
+(defun elmo-pipe-append-msg (spec string &optional msg no-see)
+  (elmo-append-msg (elmo-pipe-spec-dst spec) string))
+
+(defun elmo-pipe-read-msg (spec number outbuf)
+  (elmo-call-func (elmo-pipe-spec-dst spec)
+                 "read-msg" 
+                 number outbuf))
+
+(defun elmo-pipe-delete-msgs (spec msgs)
+  (elmo-delete-msgs (elmo-pipe-spec-dst spec) msgs))
+
+(defvar elmo-pipe-drained-hook nil "A hook called when the pipe is flushed.")
+
+(defun elmo-pipe-drain (src dst)
+  (let ((msgdb (elmo-msgdb-load src))
+       elmo-nntp-use-cache 
+       elmo-imap4-use-cache
+       elmo-pop3-use-cache) ; Inhibit caching while moving messages.
+    (message "Checking %s..." src)
+    (elmo-move-msgs src (elmo-list-folder src) dst msgdb)
+    (elmo-msgdb-save src msgdb)
+    (run-hooks 'elmo-pipe-drained-hook)))
+
+(defun elmo-pipe-list-folder (spec)
+  (elmo-pipe-drain (elmo-pipe-spec-src spec)
+                  (elmo-pipe-spec-dst spec))
+  (elmo-list-folder (elmo-pipe-spec-dst spec)))
+
+(defun elmo-pipe-list-folder-unread (spec mark-alist unread-marks)
+  (elmo-list-folder-unread (elmo-pipe-spec-dst spec) mark-alist unread-marks))
+  
+(defun elmo-pipe-list-folder-important (spec overview)
+  (elmo-list-folder-important (elmo-pipe-spec-dst spec) overview))
+
+(defun elmo-pipe-max-of-folder (spec)
+  (let ((src-length (length (elmo-list-folder (elmo-pipe-spec-src spec))))
+       (dst-list (elmo-list-folder (elmo-pipe-spec-dst spec))))
+    (cons (+ src-length (elmo-max-of-list dst-list))
+         (+ src-length (length dst-list)))))
+
+(defun elmo-pipe-folder-exists-p (spec)
+  (and (elmo-folder-exists-p (elmo-pipe-spec-src spec))
+       (elmo-folder-exists-p (elmo-pipe-spec-dst spec))))
+
+(defun elmo-pipe-folder-creatable-p (spec)
+  (or (elmo-folder-creatable-p (elmo-pipe-spec-src spec))
+      (elmo-folder-creatable-p (elmo-pipe-spec-dst spec))))
+
+(defun elmo-pipe-create-folder (spec)
+  (if (and (not (elmo-folder-exists-p (elmo-pipe-spec-src spec)))
+          (elmo-folder-creatable-p (elmo-pipe-spec-src spec)))
+      (elmo-create-folder (elmo-pipe-spec-src spec)))
+  (if (and (not (elmo-folder-exists-p (elmo-pipe-spec-dst spec)))
+          (elmo-folder-creatable-p (elmo-pipe-spec-dst spec)))
+      (elmo-create-folder (elmo-pipe-spec-dst spec))))
+
+(defun elmo-pipe-search (spec condition &optional numlist)
+  (elmo-search (elmo-pipe-spec-dst spec) condition numlist))
+
+(defun elmo-pipe-use-cache-p (spec number)
+  (elmo-use-cache-p (elmo-pipe-spec-dst spec) number))
+
+(defun elmo-pipe-commit (spec)
+  (elmo-commit (elmo-pipe-spec-src spec))
+  (elmo-commit (elmo-pipe-spec-dst spec)))
+
+(defun elmo-pipe-plugged-p (spec)
+  (and (elmo-folder-plugged-p (elmo-pipe-spec-src spec))
+       (elmo-folder-plugged-p (elmo-pipe-spec-dst spec))))
+
+(defun elmo-pipe-set-plugged (spec plugged add)
+  (elmo-folder-set-plugged (elmo-pipe-spec-src spec) plugged add)
+  (elmo-folder-set-plugged (elmo-pipe-spec-dst spec) plugged add))
+
+(defun elmo-pipe-local-file-p (spec number)
+  (elmo-local-file-p (elmo-pipe-spec-dst spec) number))
+
+(defun elmo-pipe-get-msg-filename (spec number &optional loc-alist)
+  (elmo-get-msg-filename (elmo-pipe-spec-dst spec) number loc-alist))
+
+(defun elmo-pipe-sync-number-alist (spec number-alist)
+  (elmo-call-func (elmo-pipe-spec-src spec) 
+                 "sync-number-alist" number-alist)) ; ??
+
+(defun elmo-pipe-server-diff (spec)
+  nil)
+
+(provide 'elmo-pipe)
+
+;;; elmo-pipe.el ends here
diff --git a/elmo/elmo-pop3.el b/elmo/elmo-pop3.el
new file mode 100644 (file)
index 0000000..bef19c0
--- /dev/null
@@ -0,0 +1,673 @@
+;;; elmo-pop3.el -- POP3 Interface for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-04-03 09:29:38 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-msgdb)
+(eval-when-compile
+  (require 'elmo-util)
+  (condition-case nil
+      (progn
+       (require 'starttls)
+       (require 'sasl))
+    (error))
+  (defun-maybe md5 (a))
+  (defun-maybe sasl-digest-md5-digest-response 
+    (digest-challenge username passwd serv-type host &optional realm))  
+  (defun-maybe sasl-scram-md5-client-msg-1
+    (authenticate-id &optional authorize-id))
+  (defun-maybe sasl-scram-md5-client-msg-2
+    (server-msg-1 client-msg-1 salted-pass))
+  (defun-maybe sasl-scram-md5-make-salted-pass
+    (server-msg-1 passphrase))
+  (defun-maybe sasl-scram-md5-authenticate-server
+    (server-msg-1 server-msg-2 client-msg-1 salted-pass))
+  (defun-maybe starttls-negotiate (a)))
+(condition-case nil
+    (progn
+      (require 'sasl))
+  (error))
+
+(defvar elmo-pop3-exists-exactly t)
+(defvar elmo-pop3-read-point nil)
+(defvar elmo-pop3-connection-cache nil
+  "Cache of pop3 connection.")
+
+(defun elmo-pop3-close-connection (connection &optional process buffer)
+  (save-excursion
+    (let* ((buffer  (or buffer (nth 0 connection)))
+          (process (or process (nth 1 connection))))
+      (elmo-pop3-send-command buffer process "quit")
+      (when (null (elmo-pop3-read-response buffer process t))
+       (error "POP error: QUIT failed")))))
+
+(defun elmo-pop3-flush-connection ()
+  (interactive)
+  (let ((cache elmo-pop3-connection-cache)
+       buffer process proc-stat)
+    (while cache
+      (setq buffer (car (cdr (car cache))))
+      (setq process (car (cdr (cdr (car cache)))))
+      (if (and process
+              (not (or (eq (setq proc-stat 
+                                 (process-status process)) 
+                           'closed)
+                       (eq proc-stat 'exit))))
+         (condition-case ()
+             (elmo-pop3-close-connection nil process buffer)
+           (error)))
+      (if buffer (kill-buffer buffer))
+      ;;(setq process (car (cdr (cdr (car cache)))))
+      (if process (delete-process process))
+      (setq cache (cdr cache)))
+    (setq elmo-pop3-connection-cache nil)))
+
+(defun elmo-pop3-get-connection (spec)
+  (let* ((user   (elmo-pop3-spec-username spec))
+        (server (elmo-pop3-spec-hostname spec))
+        (port   (elmo-pop3-spec-port spec))
+        (auth   (elmo-pop3-spec-auth spec))
+        (ssl    (elmo-pop3-spec-ssl spec))
+        (user-at-host (format "%s@%s" user server))
+        ret-val result buffer process errmsg proc-stat
+        user-at-host-on-port)
+    (if (not (elmo-plugged-p server port))
+       (error "Unplugged"))
+    (setq user-at-host-on-port 
+         (concat user-at-host ":" (int-to-string port)
+                 (if (eq ssl 'starttls) "!!" (if ssl "!"))))
+    (setq ret-val (assoc user-at-host-on-port elmo-pop3-connection-cache))
+    (if (and ret-val 
+            (or (eq (setq proc-stat 
+                          (process-status (cadr (cdr ret-val)))) 
+                    'closed)
+                (eq proc-stat 'exit)))
+       ;; connection is closed...
+       (progn
+         (kill-buffer (car (cdr ret-val)))
+         (setq elmo-pop3-connection-cache 
+               (delete ret-val elmo-pop3-connection-cache))
+         (setq ret-val nil)
+         ))
+    (if ret-val
+       (cdr ret-val)
+      (setq result
+           (elmo-pop3-open-connection 
+            server user port auth
+            (elmo-get-passwd user-at-host) ssl))
+      (if (null result)
+         (error "Connection failed"))
+      (setq buffer (car result))
+      (setq process (cdr result))
+      (when (and process (null buffer))
+       (elmo-remove-passwd user-at-host)
+       (delete-process process)
+       (error "Login failed")
+       )
+      (setq elmo-pop3-connection-cache 
+           (append elmo-pop3-connection-cache 
+                   (list 
+                    (cons user-at-host-on-port
+                          (setq ret-val (list buffer process))))))
+      ret-val)))
+
+(defun elmo-pop3-send-command (buffer process command)
+  (save-excursion
+    (set-buffer buffer)
+    (erase-buffer)
+    (goto-char (point-min))
+    (setq elmo-pop3-read-point (point))
+    (process-send-string process command)
+    (process-send-string process "\r\n")))
+
+(defun elmo-pop3-send-command-no-erase (buffer process command)
+  (save-excursion
+    (set-buffer buffer)
+    ;(erase-buffer)
+    (goto-char (point-min))
+    (setq elmo-pop3-read-point (point))
+    (process-send-string process command)
+    (process-send-string process "\r\n")))
+
+(defun elmo-pop3-read-response (buffer process &optional not-command)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         (response-string nil)
+         (response-continue t)
+         (return-value nil)
+         match-end)
+      (while response-continue
+       (goto-char elmo-pop3-read-point)
+       (while (not (re-search-forward "\r?\n" nil t))
+         (accept-process-output process)
+         (goto-char elmo-pop3-read-point))
+       (setq match-end (point))
+       (setq response-string
+             (buffer-substring elmo-pop3-read-point (- match-end 2)))
+       (goto-char elmo-pop3-read-point)
+       (if (looking-at "\\+.*$")
+           (progn 
+             (setq response-continue nil)
+             (setq elmo-pop3-read-point match-end)
+             (setq return-value 
+                   (if return-value 
+                       (concat return-value "\n" response-string)
+                     response-string
+                     )))
+         (if (looking-at "\\-.*$")
+             (progn 
+               (setq response-continue nil)
+               (setq elmo-pop3-read-point match-end)
+               (setq return-value nil))
+           (setq elmo-pop3-read-point match-end)
+           (if not-command
+               (setq response-continue nil))
+           (setq return-value 
+                 (if return-value 
+                     (concat return-value "\n" response-string)
+                   response-string)))
+         (setq elmo-pop3-read-point match-end)))
+      return-value)))
+
+(defun elmo-pop3-process-filter (process output)
+  (save-excursion
+    (set-buffer (process-buffer process))
+    (goto-char (point-max))
+    (insert output)))
+
+(defun elmo-pop3-open-connection (server user port auth passphrase ssl)
+  (let ((process nil)
+       (host server)
+       process-buffer ret-val response capability)
+    (catch 'done
+      (as-binary-process
+       (setq process-buffer
+            (get-buffer-create (format " *POP session to %s:%d" host port)))
+       (save-excursion
+        (set-buffer process-buffer)
+        (elmo-set-buffer-multibyte nil)         
+        (erase-buffer))
+       (setq process
+            (elmo-open-network-stream "POP" process-buffer host port ssl))
+       (and (null process) (throw 'done nil))
+       (set-process-filter process 'elmo-pop3-process-filter)
+       ;; flush connections when exiting...
+       (save-excursion
+        (set-buffer process-buffer)
+        (make-local-variable 'elmo-pop3-read-point)
+        (setq elmo-pop3-read-point (point-min))
+        (when (null (setq response
+                          (elmo-pop3-read-response process-buffer process t)))
+          (setq ret-val (cons nil process))
+          (throw 'done nil))
+        (when (eq ssl 'starttls)
+          (elmo-pop3-send-command process-buffer process "stls")
+          (string-match "^\+OK" 
+                        (elmo-pop3-read-response 
+                         process-buffer process))
+          (starttls-negotiate process))
+        (cond ((string= auth "apop")
+               ;; try only APOP
+               (if (string-match "^\+OK .*\\(<[^\>]+>\\)" response)
+                   ;; good, APOP ready server
+                   (progn
+                     (require 'md5)
+                     (elmo-pop3-send-command  
+                      process-buffer process 
+                      (format "apop %s %s" 
+                              user
+                              (md5 
+                               (concat (match-string 1 response)
+                                           passphrase)))))
+                 ;; otherwise, fail (only APOP authentication)
+                 (setq ret-val (cons nil process))
+                 (throw 'done nil)))
+              ((string= auth "cram-md5")
+               (elmo-pop3-send-command  
+                process-buffer process "auth cram-md5")
+               (when (null (setq response
+                                 (elmo-pop3-read-response
+                                  process-buffer process t)))
+                 (setq ret-val (cons nil process))
+                 (throw 'done nil))
+               (elmo-pop3-send-command
+                process-buffer process
+                (elmo-base64-encode-string
+                 (sasl-cram-md5 user passphrase 
+                                (elmo-base64-decode-string
+                                 (cadr (split-string response " ")))))))
+              ((string= auth "digest-md5")
+               (elmo-pop3-send-command  
+                process-buffer process "auth digest-md5")
+               (when (null (setq response
+                                 (elmo-pop3-read-response
+                                  process-buffer process t)))
+                 (setq ret-val (cons nil process))
+                 (throw 'done nil))
+               (elmo-pop3-send-command
+                process-buffer process
+                (elmo-base64-encode-string
+                 (sasl-digest-md5-digest-response
+                  (elmo-base64-decode-string
+                   (cadr (split-string response " ")))
+                  user passphrase "pop" host)
+                 'no-line-break))
+               (when (null (setq response
+                                 (elmo-pop3-read-response
+                                  process-buffer process t)))
+                 (setq ret-val (cons nil process))
+                 (throw 'done nil))
+               (elmo-pop3-send-command process-buffer process ""))
+              ((string= auth "scram-md5")
+               (let (server-msg-1 server-msg-2 client-msg-1 client-msg-2
+                                  salted-pass)
+                 (elmo-pop3-send-command
+                  process-buffer process
+                  (format "auth scram-md5 %s"
+                          (elmo-base64-encode-string
+                           (setq client-msg-1
+                                 (sasl-scram-md5-client-msg-1 user)))))
+                 (when (null (setq response
+                                   (elmo-pop3-read-response
+                                    process-buffer process t)))
+                   (setq ret-val (cons nil process))
+                   (throw 'done nil))
+                 (setq server-msg-1
+                       (elmo-base64-decode-string
+                        (cadr (split-string response " "))))
+                 (elmo-pop3-send-command
+                  process-buffer process
+                  (elmo-base64-encode-string
+                   (sasl-scram-md5-client-msg-2
+                    server-msg-1
+                    client-msg-1
+                    (setq salted-pass
+                          (sasl-scram-md5-make-salted-pass 
+                           server-msg-1 passphrase)))))
+                 (when (null (setq response
+                                   (elmo-pop3-read-response
+                                    process-buffer process t)))
+                   (setq ret-val (cons nil process))
+                   (throw 'done nil))
+                 (setq server-msg-2
+                       (elmo-base64-decode-string
+                        (cadr (split-string response " "))))
+                 (if (null (sasl-scram-md5-authenticate-server
+                            server-msg-1
+                            server-msg-2
+                            client-msg-1
+                            salted-pass))
+                     (throw 'done nil))
+                 (elmo-pop3-send-command
+                  process-buffer process "") ))
+              (t
+               ;; try USER/PASS
+               (elmo-pop3-send-command  process-buffer process 
+                                        (format "user %s" user))
+               (when (null (elmo-pop3-read-response process-buffer process t))
+                 (setq ret-val (cons nil process))
+                 (throw 'done nil))
+               (elmo-pop3-send-command  process-buffer process 
+                                        (format "pass %s" passphrase))))
+        ;; read PASS or APOP response
+        (when (null (elmo-pop3-read-response process-buffer process t))
+          (setq ret-val (cons nil process))
+          (throw 'done nil))
+        (setq ret-val (cons process-buffer process)))))
+    ret-val))
+
+(defun elmo-pop3-read-contents (buffer process)
+  (save-excursion
+    (set-buffer buffer)
+    (let ((case-fold-search nil)
+         match-end)
+      (goto-char elmo-pop3-read-point)
+      (while (not (re-search-forward "^\\.\r\n" nil t))
+       (accept-process-output process)
+       (goto-char elmo-pop3-read-point))
+      (setq match-end (point))
+      (elmo-delete-cr
+       (buffer-substring elmo-pop3-read-point 
+                        (- match-end 3))))))
+
+;; dummy functions
+(defun elmo-pop3-list-folders (spec &optional hierarchy) nil)
+(defun elmo-pop3-append-msg (spec string) nil nil)
+(defun elmo-pop3-folder-creatable-p (spec) nil)
+(defun elmo-pop3-create-folder (spec) nil)
+
+(defun elmo-pop3-folder-exists-p (spec)
+  (if (and elmo-pop3-exists-exactly
+          (elmo-pop3-plugged-p spec))
+      (save-excursion
+       (let (elmo-auto-change-plugged) ;;don't change plug status.
+         (condition-case nil
+             (prog1
+                 (elmo-pop3-get-connection spec)
+               (elmo-pop3-flush-connection))
+           (error nil))))
+    t))
+
+(defun elmo-pop3-parse-list-response (string)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO PARSE TMP*"))
+         ret-val)
+      (set-buffer tmp-buffer)
+      (let ((case-fold-search t))
+       (erase-buffer)
+       (insert string)
+       (goto-char (point-min))
+       (while (re-search-forward "^\\([0-9]*\\)[\t ].*$" nil t)
+         (setq ret-val
+               (cons
+                (string-to-int
+                 (elmo-match-buffer 1))
+                ret-val)))
+       (kill-buffer tmp-buffer)
+       (nreverse ret-val)))))
+
+(defun elmo-pop3-list-folder (spec)
+  (save-excursion
+    (elmo-pop3-flush-connection)
+    (let* ((connection (elmo-pop3-get-connection spec))
+          (buffer  (nth 0 connection))
+          (process (nth 1 connection))
+          response errmsg ret-val)
+      (elmo-pop3-send-command buffer process "list")
+      (if (null (elmo-pop3-read-response buffer process))
+         (error "POP List folder failed"))
+      (if (null (setq response (elmo-pop3-read-contents buffer process)))
+         (error "POP List folder failed"))
+      ;; POP server always returns a sequence of serial numbers.
+      (elmo-pop3-parse-list-response response))))
+
+(defun elmo-pop3-max-of-folder (spec)
+  (save-excursion
+    (elmo-pop3-flush-connection)
+    (let* ((connection (elmo-pop3-get-connection spec))
+          (buffer  (nth 0 connection))
+          (process (nth 1 connection))
+          (total 0)
+          response)
+      (elmo-pop3-send-command buffer process "STAT")
+      (setq response (elmo-pop3-read-response buffer process))
+      ;; response: "^\+OK 2 7570$"
+      (if (not (string-match "^\+OK[ \t]*\\([0-9]*\\)" response))
+         (error "POP STAT command failed")
+       (setq total
+             (string-to-int
+              (substring response (match-beginning 1)(match-end 1 ))))
+       (cons total total)))))
+
+(defvar elmo-pop3-header-fetch-chop-length 200)
+
+(defsubst elmo-pop3-next-result-arrived-p ()
+  (cond
+   ((eq (following-char) ?+)
+    (if (re-search-forward "\n\\.\r?\n" nil t)
+       t
+      nil))
+   ((looking-at "-")
+    (if (search-forward "\n" nil t)
+       t
+      nil))
+   (t
+    nil)))
+     
+(defun elmo-pop3-retrieve-headers (buffer tobuffer process articles)
+  (save-excursion
+    (set-buffer buffer)
+    (erase-buffer)
+    (let ((number (length articles))
+         (count 0)
+         (received 0)
+         (last-point (point-min)))
+      ;; Send HEAD commands.
+      (while articles
+       (elmo-pop3-send-command-no-erase
+        buffer
+        process
+        (format "top %s 0" (car articles))
+        )
+       ; (accept-process-output process 1)
+       (setq articles (cdr articles))
+       (setq count (1+ count))
+       ;; Every 200 requests we have to read the stream in
+       ;; order to avoid deadlocks.
+       (when (or elmo-pop3-send-command-synchronously
+                 (null articles)       ;All requests have been sent.
+                 (zerop (% count elmo-pop3-header-fetch-chop-length)))
+         (unless elmo-pop3-send-command-synchronously
+           (accept-process-output process 1))
+         (discard-input)
+         (while (progn
+                  (set-buffer buffer)
+                  (goto-char last-point)
+                  ;; Count replies.
+                  (while (elmo-pop3-next-result-arrived-p)
+                    (setq last-point (point))
+                    (setq received (1+ received)))
+                  (< received count))
+           (and (zerop (% received 20))
+                (elmo-display-progress
+                 'elmo-pop3-retrieve-headers "Getting headers..."
+                 (/ (* received 100) number)))
+           (accept-process-output process 1)
+           ;(accept-process-output process)
+           (discard-input)
+           )))
+      (message "Getting headers...done")
+      ;; Remove all "\r"'s.
+      (goto-char (point-min))
+      (while (search-forward "\r\n" nil t)
+       (replace-match "\n"))
+      (copy-to-buffer tobuffer (point-min) (point-max))
+      ;(elmo-pop3-close-connection nil process buffer) ; close connection
+      )))
+
+(defalias 'elmo-pop3-msgdb-create 'elmo-pop3-msgdb-create-as-numlist)
+(defun elmo-pop3-msgdb-create-as-numlist (spec numlist new-mark
+                                              already-mark seen-mark
+                                              important-mark seen-list)
+  (when numlist
+    (let* ((connection (elmo-pop3-get-connection spec))
+          (buffer (nth 0 connection))
+          (process (nth 1 connection))
+          response errmsg ret-val)
+      (elmo-pop3-msgdb-create-by-header buffer process numlist
+                                       new-mark already-mark 
+                                       seen-mark seen-list))))
+
+(defun elmo-pop3-msgdb-create-by-header (buffer process numlist
+                                               new-mark already-mark 
+                                               seen-mark
+                                               seen-list)
+  (let ((tmp-buffer (get-buffer-create " *ELMO Overview TMP*"))
+       ret-val)
+    (elmo-pop3-retrieve-headers
+     buffer tmp-buffer process numlist)
+    (setq ret-val
+         (elmo-pop3-msgdb-create-message
+          tmp-buffer 
+          (length numlist)
+          numlist
+          new-mark already-mark seen-mark seen-list))
+    (kill-buffer tmp-buffer)
+    ret-val))
+
+(defun elmo-pop3-msgdb-create-message (buffer 
+                                      num numlist new-mark already-mark 
+                                      seen-mark
+                                      seen-list)
+  (save-excursion
+    (let (beg
+         overview number-alist mark-alist
+         entity i number message-id gmark seen)
+      (set-buffer buffer)
+      (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+      (goto-char (point-min))
+      (setq i 0)
+      (message "Creating msgdb...")
+      (while (not (eobp))
+       (setq beg (save-excursion (forward-line 1) (point)))
+       (elmo-pop3-next-result-arrived-p)
+       (save-excursion
+         (forward-line -1)
+         (save-restriction
+           (narrow-to-region beg (point))
+           (setq entity
+                 (elmo-msgdb-create-overview-from-buffer 
+                  (car numlist)))
+           (setq numlist (cdr numlist))
+           (when entity
+             (setq overview 
+                   (elmo-msgdb-append-element
+                    overview entity))
+             (setq number-alist
+                   (elmo-msgdb-number-add number-alist
+                                          (elmo-msgdb-overview-entity-get-number entity)
+                                          (car entity)))
+             (setq message-id (car entity))
+             (setq seen (member message-id seen-list))
+             (if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
+                                 (if (elmo-cache-exists-p 
+                                      message-id) ; XXX
+                                     (if seen
+                                         nil
+                                       already-mark)
+                                   (if seen
+                                       (if elmo-pop3-use-cache
+                                           seen-mark)
+                                     new-mark))))
+                 (setq mark-alist
+                       (elmo-msgdb-mark-append 
+                        mark-alist
+                        (elmo-msgdb-overview-entity-get-number entity)
+                        gmark)))
+             )))
+       (setq i (1+ i))
+       (and (zerop (% i 20))
+            (elmo-display-progress
+             'elmo-pop3-msgdb-create-message "Creating msgdb..."
+             (/ (* i 100) num)))
+       )
+      (message "Creating msgdb...done.")
+      (list overview number-alist mark-alist))))
+
+(defun elmo-pop3-read-body (buffer process outbuf)
+  (with-current-buffer buffer
+    (let ((start elmo-pop3-read-point)
+         end)
+      (goto-char start)
+      (while (not (re-search-forward "^\\.\r?\n" nil t))
+       (accept-process-output process)
+       (goto-char start))
+      (setq end (point))
+      (with-current-buffer outbuf
+       (erase-buffer)
+       (insert-buffer-substring buffer start (- end 3))
+       (elmo-delete-cr-get-content-type)))))
+
+(defun elmo-pop3-read-msg (spec number outbuf)
+  (save-excursion
+    (let* ((connection (elmo-pop3-get-connection spec))
+          (buffer  (car connection))
+          (process (cadr connection))
+          (cwf     (caddr connection))  
+          response errmsg msg)
+      (elmo-pop3-send-command buffer process 
+                             (format "retr %s" number))
+      (when (null (setq response (elmo-pop3-read-response
+                                 buffer process t)))
+       (error "Fetching message failed"))
+      (setq response (elmo-pop3-read-body buffer process outbuf))
+      (set-buffer outbuf)
+      (goto-char (point-min))
+      (while (re-search-forward "^\\." nil t)
+       (replace-match "")
+       (forward-line))
+      response)))
+
+(defun elmo-pop3-delete-msg (buffer process number)
+  (let (response errmsg msg)
+    (elmo-pop3-send-command buffer process 
+                           (format "dele %s" number))
+    (when (null (setq response (elmo-pop3-read-response
+                               buffer process t)))
+      (error "Deleting message failed"))))
+
+(defun elmo-pop3-delete-msgs (spec msgs)
+  (save-excursion
+    (let* ((connection (elmo-pop3-get-connection spec))
+          (buffer  (car connection))
+          (process (cadr connection)))
+      (mapcar '(lambda (msg) (elmo-pop3-delete-msg 
+                             buffer process msg))
+             msgs))))
+
+(defun elmo-pop3-search (spec condition &optional numlist)
+  (error "Searching in pop3 folder is not implemented yet"))
+
+(defun elmo-pop3-use-cache-p (spec number)
+  elmo-pop3-use-cache)
+
+(defun elmo-pop3-local-file-p (spec number)
+  nil)
+
+(defun elmo-pop3-port-label (spec)
+  (concat "pop3"
+         (if (elmo-pop3-spec-ssl spec) "!ssl" "")))
+
+(defsubst elmo-pop3-portinfo (spec)
+  (list (elmo-pop3-spec-hostname spec) 
+       (elmo-pop3-spec-port spec)))
+
+(defun elmo-pop3-plugged-p (spec)
+  (apply 'elmo-plugged-p
+        (append (elmo-pop3-portinfo spec)
+                (list nil (quote (elmo-pop3-port-label spec))))))
+
+(defun elmo-pop3-set-plugged (spec plugged add)
+  (apply 'elmo-set-plugged plugged
+        (append (elmo-pop3-portinfo spec)
+                (list nil nil (quote (elmo-pop3-port-label spec)) add))))
+
+(defalias 'elmo-pop3-sync-number-alist 
+  'elmo-generic-sync-number-alist)
+(defalias 'elmo-pop3-list-folder-unread 
+  'elmo-generic-list-folder-unread)
+(defalias 'elmo-pop3-list-folder-important
+  'elmo-generic-list-folder-important)
+(defalias 'elmo-pop3-commit 'elmo-generic-commit)
+
+(provide 'elmo-pop3)
+
+;;; elmo-pop3.el ends here
diff --git a/elmo/elmo-util.el b/elmo/elmo-util.el
new file mode 100644 (file)
index 0000000..9c6de8c
--- /dev/null
@@ -0,0 +1,1617 @@
+;;; elmo-util.el -- Utilities for Elmo.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-29 09:42:41 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-date)
+(eval-when-compile (require 'cl))
+(require 'std11)
+(require 'eword-decode)
+(require 'utf7)
+
+(eval-when-compile 
+  (condition-case nil 
+      (progn
+       (require 'ssl)
+       (require 'starttls))
+    (error))
+  (defun-maybe starttls-negotiate (a))
+  (defun-maybe starttls-open-stream (a b c d))
+  (defun-maybe open-ssl-stream (a b c d)))
+
+(defmacro elmo-set-buffer-multibyte (flag)
+  "Set the multibyte flag of the current buffer to FLAG."
+  (cond ((boundp 'MULE)
+         (list 'setq 'mc-flag flag))
+        ((featurep 'xemacs)
+         flag)
+        ((and (boundp 'emacs-major-version) (>= emacs-major-version 20))
+         (list 'set-buffer-multibyte flag))
+        (t
+         flag)))
+
+(defvar elmo-work-buf-name " *elmo work*")
+(defvar elmo-temp-buf-name " *elmo temp*")
+
+(or (boundp 'default-enable-multibyte-characters)
+    (defvar default-enable-multibyte-characters (featurep 'mule)
+      "The mock variable except for Emacs 20."))
+
+(defun elmo-base64-encode-string (string &optional no-line-break))
+(defun elmo-base64-decode-string (string))
+
+;; base64 encoding/decoding
+(require 'mel)
+(fset 'elmo-base64-encode-string 
+      (mel-find-function 'mime-encode-string "base64"))
+(fset 'elmo-base64-decode-string
+      (mel-find-function 'mime-decode-string "base64"))
+
+;; Any Emacsen may have add-name-to-file(), because loadup.el requires it. :-p
+;; Check make-symbolic-link() instead.  -- 981002 by Fuji
+(if (fboundp 'make-symbolic-link)  ;; xxx
+    (defalias 'elmo-add-name-to-file 'add-name-to-file)
+  (defun elmo-add-name-to-file 
+    (filename newname &optional ok-if-already-exists)
+    (copy-file filename newname ok-if-already-exists t)))
+
+(require 'broken)
+(broken-facility timezone-y2k
+  "timezone.el does not clear Y2K."
+  (or (not (featurep 'timezone))
+      (string= (aref (timezone-parse-date "Sat, 1 Jan 00 07:00:00 JST") 0) 
+              "2000")))
+
+(when-broken timezone-y2k
+  (defun timezone-parse-date (date)
+    "Parse DATE and return a vector [YEAR MONTH DAY TIME TIMEZONE].
+19 is prepended to year if necessary.  Timezone may be nil if nothing.
+Understands the following styles:
+ (1) 14 Apr 89 03:20[:12] [GMT]
+ (2) Fri, 17 Mar 89 4:01[:33] [GMT]
+ (3) Mon Jan 16 16:12[:37] [GMT] 1989
+ (4) 6 May 1992 1641-JST (Wednesday)
+ (5) 22-AUG-1993 10:59:12.82
+ (6) Thu, 11 Apr 16:17:12 91 [MET]
+ (7) Mon, 6  Jul 16:47:20 T 1992 [MET]"
+    (condition-case nil
+       (progn
+         ;; Get rid of any text properties.
+         (and (stringp date)
+              (or (text-properties-at 0 date)
+                  (next-property-change 0 date))
+              (setq date (copy-sequence date))
+              (set-text-properties 0 (length date) nil date))
+         (let ((date (or date ""))
+               (year nil)
+               (month nil)
+               (day nil)
+               (time nil)
+               (zone nil))                     ;This may be nil.
+           (cond ((string-match
+                   "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\'" date)
+                  ;; Styles: (6) and (7) without timezone
+                  (setq year 6 month 3 day 2 time 4 zone nil))
+                 ((string-match
+                   "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
+                  ;; Styles: (6) and (7) with timezone and buggy timezone
+                  (setq year 6 month 3 day 2 time 4 zone 7))
+                 ((string-match
+                   "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\'" date)
+                  ;; Styles: (1) and (2) without timezone
+                  (setq year 3 month 2 day 1 time 4 zone nil))
+                 ((string-match
+                   "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
+                  ;; Styles: (1) and (2) with timezone and buggy timezone
+                  (setq year 3 month 2 day 1 time 4 zone 5))
+                 ((string-match
+                   "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([0-9]+\\)" date)
+                  ;; Styles: (3) without timezone
+                  (setq year 4 month 1 day 2 time 3 zone nil))
+                 ((string-match
+                   "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([-+a-zA-Z0-9]+\\)[ \t]+\\([0-9]+\\)" date)
+                  ;; Styles: (3) with timezone
+                  (setq year 5 month 1 day 2 time 3 zone 4))
+                 ((string-match
+                   "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
+                  ;; Styles: (4) with timezone
+                  (setq year 3 month 2 day 1 time 4 zone 5))
+                 ((string-match
+                   "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)\\.[0-9]+" date)
+                  ;; Styles: (5) without timezone.
+                  (setq year 3 month 2 day 1 time 4 zone nil))
+                 )
+           (if year
+               (progn
+                 (setq year
+                       (substring date (match-beginning year) 
+                                  (match-end year)))
+                 (if (< (length year) 4)
+                     (let ((yr (string-to-int year)))
+                       (when (>= yr 100)
+                         (setq yr (- yr 100)))
+                       (setq year (format "%d%02d"
+                                          (if (< yr 70)
+                                              20
+                                            19)
+                                          yr))))
+                 (let ((string (substring date
+                                          (match-beginning month)
+                                          (+ (match-beginning month) 3))))
+                   (setq month
+                         (int-to-string
+                          (cdr (assoc (upcase string) 
+                                      timezone-months-assoc)))))
+                 (setq day
+                       (substring date (match-beginning day) (match-end day)))
+                 (setq time
+                       (substring date (match-beginning time) 
+                                  (match-end time)))))
+           (if zone
+               (setq zone
+                     (substring date (match-beginning zone) 
+                                (match-end zone))))
+           (if year
+               (vector year month day time zone)
+             (vector "0" "0" "0" "0" nil))
+           )
+         )
+      (t (signal 'invalid-date (list date))))))
+
+(defsubst elmo-call-func (folder func-name &rest args)
+  (let* ((spec (if (stringp folder)
+                  (elmo-folder-get-spec folder)
+                folder))
+        (type (symbol-name (car spec)))
+        (backend-str (concat "elmo-" type))
+        (backend-sym (intern backend-str)))
+    (unless (featurep backend-sym)
+      (require backend-sym))
+    (apply (intern (format "%s-%s" backend-str func-name))
+          spec
+          args)))
+
+(defmacro elmo-set-work-buf (&rest body)
+  "Execute BODY on work buffer. Work buffer remains."
+  (` (save-excursion
+       (set-buffer (get-buffer-create elmo-work-buf-name))
+       (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+       (erase-buffer)
+       (,@ body))))
+
+(defmacro elmo-match-substring (pos string from)
+  "Substring of POSth matched string of STRING. "
+  (` (substring (, string) 
+               (+ (match-beginning (, pos)) (, from))
+               (match-end (, pos)))))
+
+(defmacro elmo-match-string (pos string)
+  "Substring POSth matched string."
+  (` (substring (, string) (match-beginning (, pos)) (match-end (, pos)))))
+
+(defmacro elmo-match-buffer (pos)
+  "Substring POSth matched from the current buffer."
+  (` (buffer-substring-no-properties
+      (match-beginning (, pos)) (match-end (, pos)))))
+
+(defmacro elmo-bind-directory (dir &rest body)
+  "Set current directory DIR and execute BODY."
+  (` (let ((default-directory (file-name-as-directory (, dir))))
+       (,@ body))))
+
+(defmacro elmo-folder-get-type (folder)
+  "Get type of FOLDER."
+  (` (and (stringp (, folder))
+         (cdr (assoc (string-to-char (, folder)) elmo-spec-alist)))))
+
+(defun elmo-object-load (filename &optional mime-charset no-err)
+  "Load OBJECT from the file specified by FILENAME.
+File content is decoded with MIME-CHARSET."
+    (if (not (file-readable-p filename))
+       nil
+      (elmo-set-work-buf
+       (as-binary-input-file
+       (insert-file-contents filename))
+       (when mime-charset
+        (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+        (decode-mime-charset-region (point-min) (point-max) mime-charset))
+       (condition-case nil
+          (read (current-buffer)) 
+        (error (unless no-err
+                 (message "Warning: Loading object from %s failed."
+                          filename)
+                 (elmo-object-save filename nil))
+               nil)))))
+
+(defsubst elmo-save-buffer (filename &optional mime-charset)
+  "Save current buffer to the file specified by FILENAME.
+Directory of the file is created if it doesn't exist.
+File content is encoded with MIME-CHARSET."
+  (let ((dir (directory-file-name (file-name-directory filename))))
+    (if (file-directory-p dir)
+       () ; ok.
+      (unless (file-exists-p dir)
+       (elmo-make-directory dir)))
+    (if (file-writable-p filename)
+       (progn
+         (when mime-charset
+           ;;(elmo-set-buffer-multibyte default-enable-multibyte-characters)
+           (encode-mime-charset-region (point-min) (point-max) mime-charset))
+         (as-binary-output-file
+          (write-region (point-min) (point-max) filename nil 'no-msg)))
+      (message (format "%s is not writable." filename)))))
+
+(defun elmo-object-save (filename object &optional mime-charset)
+  "Save OBJECT to the file specified by FILENAME.
+Directory of the file is created if it doesn't exist.
+File content is encoded with MIME-CHARSET."
+  (elmo-set-work-buf
+   (prin1 object (current-buffer))
+   ;;(princ "\n" (current-buffer))
+   (elmo-save-buffer filename mime-charset)))
+
+(defsubst elmo-imap4-decode-folder-string (string)
+  (if elmo-imap4-use-modified-utf7
+      (utf7-decode-string string 'imap)
+    string))
+
+(defsubst elmo-imap4-encode-folder-string (string)
+  (if elmo-imap4-use-modified-utf7
+      (utf7-encode-string string 'imap)
+    string))
+
+(defun elmo-network-get-spec (folder default-server default-port default-tls)
+  (let (server port tls)
+    (if (string-match "\\(@[^@:/!]+\\)?\\(:[0-9]+\\)?\\(!*\\)$" folder)
+       (progn
+         (if (match-beginning 1)
+             (setq server (elmo-match-substring 1 folder 1))
+           (setq server default-server))
+         (if (match-beginning 2)
+             (setq port 
+                   (string-to-int (elmo-match-substring 2 folder 1)))
+           (setq port default-port))
+         (setq tls (elmo-match-string 3 folder))
+         (if (and (match-beginning 3)
+                  (> (length tls) 0))
+             (setq tls (if (= 2 (length tls)) 'starttls
+                         (string= tls "!")))
+           (setq tls default-tls))
+         (setq folder (substring folder 0 (match-beginning 0))))
+      (setq server default-server
+           port   default-port
+           tls    default-tls))
+    (cons folder (list server port tls))))
+
+(defun elmo-imap4-get-spec (folder)
+  (let ((default-user    elmo-default-imap4-user)
+       (default-server  elmo-default-imap4-server)
+       (default-port    elmo-default-imap4-port)
+       (default-tls     elmo-default-imap4-ssl)
+       spec mailbox user auth)
+    (when (string-match "\\(.*\\)@\\(.*\\)" default-server)
+      ;; case: default-imap4-server is specified like 
+      ;; "hoge%imap.server@gateway".
+      (setq default-user (elmo-match-string 1 default-server))
+      (setq default-server (elmo-match-string 2 default-server)))
+    (setq spec (elmo-network-get-spec 
+               folder default-server default-port default-tls))
+    (setq folder (car spec))
+    (when (string-match
+          "^\\(%\\)\\([^:@!]*\\)\\(:[^/!]+\\)?\\(/[^/:@!]+\\)?"
+          folder)
+      (progn
+       (setq mailbox (if (match-beginning 2) 
+                         (elmo-match-string 2 folder)
+                       elmo-default-imap4-mailbox))
+       (setq user (if (match-beginning 3)
+                      (elmo-match-substring 3 folder 1)
+                    default-user))
+       (setq auth (if (match-beginning 4)
+                      (elmo-match-substring 4 folder 1)
+                    elmo-default-imap4-authenticate-type))
+       (append (list 'imap4 
+                     (elmo-imap4-encode-folder-string mailbox)
+                     user auth)
+               (cdr spec))))))
+
+(defsubst elmo-imap4-spec-mailbox (spec)
+  (nth 1 spec))
+
+(defsubst elmo-imap4-spec-username (spec)
+  (nth 2 spec))
+
+(defsubst elmo-imap4-spec-auth (spec)
+  (nth 3 spec))
+
+(defsubst elmo-imap4-spec-hostname (spec)
+  (nth 4 spec))
+
+(defsubst elmo-imap4-spec-port (spec)
+  (nth 5 spec))
+
+(defsubst elmo-imap4-spec-ssl (spec)
+  (nth 6 spec))
+
+(defsubst elmo-imap4-spec-folder (spec) ;; obsolete
+  (nth 1 spec))
+
+(defsubst elmo-imap4-connection-get-process (conn)
+  (nth 1 conn))
+
+(defsubst elmo-imap4-connection-get-buffer (conn)
+  (nth 0 conn))
+
+(defsubst elmo-imap4-connection-get-cwf (conn)
+  (nth 2 conn))
+
+(defun elmo-nntp-get-spec (folder)
+  (let (spec group user)
+    (setq spec (elmo-network-get-spec folder
+                                     elmo-default-nntp-server
+                                     elmo-default-nntp-port
+                                     elmo-default-nntp-ssl))
+    (setq folder (car spec))
+    (when (string-match
+          "^\\(-\\)\\([^:@!]*\\)\\(:[^/!]+\\)?\\(/[^/:@!]+\\)?"
+          folder)
+      (setq group 
+           (if (match-beginning 2)
+               (elmo-match-string 2 folder)))
+      (setq user 
+           (if (match-beginning 3) 
+               (elmo-match-substring 3 folder 1)
+             elmo-default-nntp-user))
+      (append (list 'nntp group user)
+             (cdr spec)))))
+
+(defsubst elmo-nntp-spec-group (spec)
+  (nth 1 spec))
+
+(defsubst elmo-nntp-spec-username (spec)  
+  (nth 2 spec))
+
+;; future use?
+;; (defsubst elmo-nntp-spec-auth (spec))
+
+(defsubst elmo-nntp-spec-hostname (spec)
+  (nth 3 spec))
+
+(defsubst elmo-nntp-spec-port (spec)
+  (nth 4 spec))
+
+(defsubst elmo-nntp-spec-ssl (spec)
+  (nth 5 spec))
+
+(defun elmo-localdir-get-spec (folder)
+  (let (fld-name path)
+    (when (string-match
+          "^\\(\\+\\)\\(.*\\)$"
+          folder)
+      (if (eq (length (setq fld-name
+                           (elmo-match-string 2 folder))) 0)
+         (setq fld-name "")
+       )
+      (if (file-name-absolute-p fld-name)
+         (setq path (expand-file-name fld-name))
+       (setq path fld-name))
+       ;(setq path (expand-file-name fld-name
+       ;elmo-localdir-folder-path)))
+      (list (if (elmo-folder-maildir-p folder)
+               'maildir
+             'localdir) path))))
+
+(defun elmo-maildir-get-spec (folder)
+  (let (fld-name path)
+    (when (string-match
+          "^\\(\\.\\)\\(.*\\)$"
+          folder)
+      (if (eq (length (setq fld-name
+                           (elmo-match-string 2 folder))) 0)
+         (setq fld-name ""))
+      (if (file-name-absolute-p fld-name)
+         (setq path (expand-file-name fld-name))
+       (setq path fld-name))
+      (list 'maildir path))))
+
+(defun elmo-folder-maildir-p (folder)
+  (catch 'found
+    (let ((li elmo-maildir-list))
+      (while li
+       (if (string-match (car li) folder)
+           (throw 'found t))
+       (setq li (cdr li))))))
+
+(defun elmo-localnews-get-spec (folder)
+  (let (fld-name)
+    (when (string-match
+        "^\\(=\\)\\(.*\\)$"
+        folder)
+      (if (eq (length (setq fld-name
+                           (elmo-match-string 2 folder))) 0)
+         (setq fld-name "")
+       )
+      (list 'localnews 
+           (elmo-replace-in-string fld-name "\\." "/")))))
+
+(defun elmo-cache-get-spec (folder)
+  (let (fld-name)
+    (when (string-match
+        "^\\(!\\)\\(.*\\)$"
+        folder)
+      (if (eq (length (setq fld-name
+                           (elmo-match-string 2 folder))) 0)
+         (setq fld-name "")
+       )
+      (list 'cache
+           (elmo-replace-in-string fld-name "\\." "/")))))
+
+;; Archive interface by OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+(defun elmo-archive-get-spec (folder)
+  (require 'elmo-archive)
+  (let (fld-name type prefix)
+    (when (string-match
+          "^\\(\\$\\)\\([^;]*\\);?\\([^;]*\\);?\\([^;]*\\)$"
+          folder)
+      ;; Drive letter is OK!
+      (if (eq (length (setq fld-name
+                           (elmo-match-string 2 folder))) 0)
+         (setq fld-name "")
+       )
+      (if (eq (length (setq type
+                           (elmo-match-string 3 folder))) 0)
+         (setq type (symbol-name elmo-archive-default-type)))
+      (if (eq (length (setq prefix
+                           (elmo-match-string 4 folder))) 0)
+         (setq prefix ""))
+      (list 'archive fld-name (intern-soft type) prefix))))
+
+(defun elmo-pop3-get-spec (folder)
+  (let (spec user auth)
+    (setq spec (elmo-network-get-spec folder
+                                     elmo-default-pop3-server
+                                     elmo-default-pop3-port
+                                     elmo-default-pop3-ssl))
+    (setq folder (car spec))
+    (when (string-match
+          "^\\(&\\)\\([^:/!]*\\)\\(/[^/:@!]+\\)?"
+          folder)
+      (setq user (if (match-beginning 2)
+                    (elmo-match-string 2 folder)))
+      (if (eq (length user) 0)
+         (setq user elmo-default-pop3-user))
+      (setq auth (if (match-beginning 3)
+                    (elmo-match-substring 3 folder 1)
+                  elmo-default-pop3-authenticate-type))
+      (append (list 'pop3 user auth)
+             (cdr spec)))))
+
+(defsubst elmo-pop3-spec-username (spec)
+  (nth 1 spec))
+
+(defsubst elmo-pop3-spec-auth (spec)
+  (nth 2 spec))
+
+(defsubst elmo-pop3-spec-hostname (spec)
+  (nth 3 spec))
+
+(defsubst elmo-pop3-spec-port (spec)
+  (nth 4 spec))
+
+(defsubst elmo-pop3-spec-ssl (spec)
+  (nth 5 spec))
+
+(defun elmo-internal-get-spec (folder)
+  (if (string-match "\\('\\)\\([^/]*\\)/?\\(.*\\)$" folder)
+      (let* ((item (downcase (elmo-match-string 2 folder)))
+            (sym (and (> (length item) 0) (intern item))))
+       (cond ((or (null sym)
+                  (eq sym 'mark))
+              (list 'internal sym (elmo-match-string 3 folder)))
+             ((eq sym 'cache)
+              (list 'cache (elmo-match-string 3 folder)))
+             (t (error "Invalid internal folder spec"))))))
+
+(defun elmo-multi-get-spec (folder)
+  (save-match-data
+    (when (string-match
+          "^\\(\\*\\)\\(.*\\)$"
+          folder)
+      (append (list 'multi)
+             (split-string
+              (elmo-match-string 2 folder)
+              ",")))))
+
+(defun elmo-filter-get-spec (folder)
+  (save-match-data
+    (when (string-match
+          "^\\(/\\)\\(.*\\)$"
+          folder)
+      (let ((spec (elmo-match-string 2 folder))
+           filter)
+       (when (string-match "\\([^/]+\\)/" spec)
+         (setq filter (elmo-match-string 1 spec))
+         (setq spec (substring spec (match-end 0))))
+       (cond
+        ((string-match "^\\(last\\|first\\):\\(.*\\)$" filter) ; partial
+         (setq filter (vector 'partial
+                              (elmo-match-string 1 filter)
+                              (elmo-match-string 2 filter))))
+        (t
+         (setq filter (elmo-parse-search-condition filter))))
+       (list 'filter filter spec)))))
+
+(defun elmo-pipe-get-spec (folder)
+  (when (string-match "^\\(|\\)\\([^|]*\\)|\\(.*\\)$" folder)
+    (list 'pipe
+         (elmo-match-string 2 folder)
+         (elmo-match-string 3 folder))))
+
+(defun elmo-folder-get-spec (folder)
+  "return spec of folder"
+  (let ((type (elmo-folder-get-type folder)))
+    (if type
+       (funcall (intern (concat "elmo-" (symbol-name type) "-get-spec"))
+                folder)
+      (error "%s is not supported folder type" folder))))
+
+(defun elmo-parse-search-condition (condition)
+  (let ((terms (split-string condition "|")) ; split by OR
+       term ret-val)
+    (while terms
+      (setq term (car terms))
+      (cond 
+       ((string-match "^\\([a-zA-Z\\-]+\\)=\\(.*\\)$" term)
+       (if (save-match-data
+             (string-match "tocc" (elmo-match-string 1 term))) ;; syntax sugar
+           (setq ret-val (nconc
+                          ret-val
+                          (list (vector 'match "to"
+                                        (elmo-match-string 2 term))
+                                (vector 'match "cc"
+                                        (elmo-match-string 2 term)))))
+         (setq ret-val (cons (vector 'match 
+                                     (elmo-match-string 1 term)
+                                     (elmo-match-string 2 term))
+                             ret-val))))
+       ((string-match "^\\([a-zA-Z\\-]+\\)!=\\(.*\\)$" term)
+       (if (save-match-data
+             (string-match "tocc" (elmo-match-string 1 term))) ;; syntax sugar
+           (setq ret-val (nconc
+                          ret-val
+                          (list (vector 'unmatch "to"
+                                        (elmo-match-string 2 term))
+                                (vector 'unmatch "cc"
+                                        (elmo-match-string 2 term)))))
+         (setq ret-val (cons (vector 'unmatch 
+                                     (elmo-match-string 1 term)
+                                     (elmo-match-string 2 term))
+                             ret-val))))
+       ((string-match "^\\(since\\|before\\):\\(.*\\)$" term)
+       (setq ret-val (cons (vector 'date
+                                   (elmo-match-string 1 term)
+                                   (elmo-match-string 2 term))
+                           ret-val))))
+      (setq terms (cdr terms)))
+    ret-val))
+
+(defun elmo-multi-get-real-folder-number (folder number)
+  (let* ((spec (elmo-folder-get-spec folder))
+        (flds (cdr spec))
+        (num number)
+        (fld (nth (- (/ num elmo-multi-divide-number) 1) flds)))
+    (cons fld (% num elmo-multi-divide-number))))
+
+(defsubst elmo-buffer-replace (regexp &optional newtext)
+  (goto-char (point-min))
+  (while (re-search-forward regexp nil t)
+    (replace-match (or newtext ""))))
+
+(defsubst elmo-delete-char (char string &optional unibyte)
+  (save-match-data
+    (elmo-set-work-buf
+     (let ((coding-system-for-read 'no-conversion)
+          (coding-system-for-write 'no-conversion))
+       (if unibyte (elmo-set-buffer-multibyte nil))
+       (insert string)
+       (goto-char (point-min))
+       (while (search-forward (char-to-string char) nil t)
+        (replace-match ""))
+       (buffer-string)))))
+
+(defsubst elmo-delete-cr-get-content-type ()
+  (save-excursion
+    (goto-char (point-min))
+    (while (search-forward "\r\n" nil t)
+      (replace-match "\n"))
+    (goto-char (point-min))
+    (or (std11-field-body "content-type")
+       t)))
+
+(defun elmo-delete-cr (string)
+  (save-match-data
+    (elmo-set-work-buf
+     (insert string)
+     (goto-char (point-min))
+     (while (search-forward "\r\n" nil t)
+       (replace-match "\n"))
+     (buffer-string))))
+
+(defun elmo-uniq-list (lst)
+  "Distractively uniqfy elements of LST."
+  (let ((tmp lst))
+    (while tmp (setq tmp (setcdr tmp (and (cdr tmp) (delete (car tmp) (cdr tmp)))))))
+  lst)
+
+(defun elmo-string-partial-p (string)
+  (and (stringp string) (string-match "message/partial" string)))
+
+(defun elmo-get-file-string (filename &optional remove-final-newline)
+  (elmo-set-work-buf
+   (let (insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+        insert-file-contents-post-hook)
+     (when (file-exists-p filename)
+       (if filename
+          (as-binary-input-file (insert-file-contents filename)))
+       (when (and remove-final-newline
+                 (> (buffer-size) 0)
+                 (= (char-after (1- (point-max))) ?\n))
+        (goto-char (point-max))
+        (delete-backward-char 1))
+       (buffer-string)))))
+
+(defun elmo-save-string (string filename)
+  (if string
+      (elmo-set-work-buf
+       (as-binary-output-file
+       (insert string)
+       (write-region (point-min) (point-max) 
+                     filename nil 'no-msg))
+       )))
+
+(defun elmo-max-of-list (nlist)
+  (let ((l nlist) 
+       (max-num 0))
+    (while l
+      (if (< max-num (car l))
+         (setq max-num (car l)))
+      (setq l (cdr l)))
+    max-num))
+
+(defun elmo-concat-path (path filename)
+  (if (not (string= path ""))
+      (if (string= elmo-path-sep (substring path (- (length path) 1)))
+         (concat path filename)
+       (concat path elmo-path-sep filename))
+    filename))
+
+(defvar elmo-passwd-alist nil)
+
+(defun elmo-passwd-alist-load ()
+  (save-excursion
+    (let ((filename (expand-file-name elmo-passwd-alist-file-name
+                                      elmo-msgdb-dir))
+          (tmp-buffer (get-buffer-create " *elmo-passwd-alist-tmp*"))
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+          insert-file-contents-post-hook 
+          ret-val)
+      (if (not (file-readable-p filename))
+          ()
+        (set-buffer tmp-buffer)
+        (insert-file-contents filename)
+        (setq ret-val
+              (condition-case nil
+                  (read (current-buffer)) 
+                (error nil nil))))
+      (kill-buffer tmp-buffer)
+      ret-val)))
+
+(defun elmo-passwd-alist-save ()
+  "Save password into file."
+  (interactive)
+  (save-excursion
+    (let ((filename (expand-file-name elmo-passwd-alist-file-name
+                                      elmo-msgdb-dir))
+          (tmp-buffer (get-buffer-create " *elmo-passwd-alist-tmp*")))
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (prin1 elmo-passwd-alist tmp-buffer)
+      (princ "\n" tmp-buffer)
+;      (if (and (file-exists-p filename)
+;             (not (equal 384 (file-modes filename))))
+;        (error "%s is not safe.chmod 600 %s!" filename filename))
+      (if (file-writable-p filename)
+         (progn
+           (write-region (point-min) (point-max) 
+                         filename nil 'no-msg)
+           (set-file-modes filename 384))
+        (message (format "%s is not writable." filename)))
+      (kill-buffer tmp-buffer))))
+
+(defun elmo-get-passwd (user-at-host)
+  "Get password from password pool."
+  (let (data pass)
+    (if (not elmo-passwd-alist)
+       (setq elmo-passwd-alist (elmo-passwd-alist-load)))
+    (setq data (assoc user-at-host elmo-passwd-alist))
+    (if data
+       (elmo-base64-decode-string (cdr data))
+      (setq pass (elmo-read-passwd (format "Password for %s: " 
+                                          user-at-host) t))
+      (setq elmo-passwd-alist
+           (append elmo-passwd-alist
+                   (list (cons user-at-host 
+                               (elmo-base64-encode-string pass)))))
+      pass)))
+
+(defun elmo-remove-passwd (user-at-host)
+  "Remove password from password pool (for failure)."
+  (setq elmo-passwd-alist
+       (delete (assoc user-at-host elmo-passwd-alist)
+               elmo-passwd-alist
+               )))
+
+(defmacro elmo-read-char-exclusive ()
+  (cond ((featurep 'xemacs)
+         '(let ((table (quote ((backspace . ?\C-h) (delete . ?\C-?)
+                               (left . ?\C-h))))
+                event key)
+            (while (not
+                    (and
+                     (key-press-event-p (setq event (next-command-event)))
+                     (setq key (or (event-to-character event)
+                                   (cdr (assq (event-key event) table)))))))
+            key))
+        ((fboundp 'read-char-exclusive)
+         '(read-char-exclusive))
+        (t
+         '(read-char))))
+
+(defun elmo-read-passwd (prompt &optional stars)
+  "Read a single line of text from user without echoing, and return it."
+  (let ((ans "")
+       (c 0)
+       (echo-keystrokes 0)
+       (cursor-in-echo-area t)
+       (log-message-max-size 0)
+       message-log-max done msg truncate)
+    (while (not done)
+      (if (or (not stars) (string= "" ans))
+         (setq msg prompt)
+       (setq msg (concat prompt (make-string (length ans) ?.)))
+       (setq truncate
+             (1+ (- (length msg) (window-width (minibuffer-window)))))
+       (and (> truncate 0)
+            (setq msg (concat "$" (substring msg (1+ truncate))))))
+      (message "%s" msg)
+      (setq c (elmo-read-char-exclusive))
+      (cond ((= c ?\C-g)
+            (setq quit-flag t
+                  done t))
+           ((or (= c ?\r) (= c ?\n) (= c ?\e))
+            (setq done t))
+           ((= c ?\C-u)
+            (setq ans ""))
+           ((and (/= c ?\b) (/= c ?\177))
+            (setq ans (concat ans (char-to-string c))))
+           ((> (length ans) 0)
+            (setq ans (substring ans 0 -1)))))
+    (if quit-flag
+       (prog1
+           (setq quit-flag nil)
+         (message "Quit")
+         (beep t))
+      (message "")
+      ans)))
+
+;; from subr.el
+(defun elmo-replace-in-string (str regexp newtext &optional literal)
+  "Replaces all matches in STR for REGEXP with NEWTEXT string,
+ and returns the new string.
+Optional LITERAL non-nil means do a literal replacement.
+Otherwise treat \\ in NEWTEXT string as special:
+  \\& means substitute original matched text,
+  \\N means substitute match for \(...\) number N,
+  \\\\ means insert one \\."
+  (let ((rtn-str "")
+       (start 0)
+       (special)
+       match prev-start)
+    (while (setq match (string-match regexp str start))
+      (setq prev-start start
+           start (match-end 0)
+           rtn-str
+           (concat
+             rtn-str
+             (substring str prev-start match)
+             (cond (literal newtext)
+                   (t (mapconcat
+                       (function
+                        (lambda (c)
+                          (if special
+                              (progn
+                                (setq special nil)
+                                (cond ((eq c ?\\) "\\")
+                                      ((eq c ?&)
+                                       (elmo-match-string 0 str))
+                                      ((and (>= c ?0) (<= c ?9))
+                                       (if (> c (+ ?0 (length
+                                                       (match-data))))
+                                       ; Invalid match num
+                                           (error "Invalid match num: %c" c)
+                                         (setq c (- c ?0))
+                                         (elmo-match-string c str)))
+                                      (t (char-to-string c))))
+                            (if (eq c ?\\) (progn (setq special t) nil)
+                              (char-to-string c)))))
+                       newtext ""))))))
+    (concat rtn-str (substring str start))))
+
+(defun elmo-string-to-list (string)
+  (elmo-set-work-buf
+   (insert string)
+   (goto-char (point-min))
+   (insert "(")
+   (goto-char (point-max))
+   (insert ")")
+   (goto-char (point-min))
+   (read (current-buffer))))
+
+(defun elmo-plug-on-by-servers (alist &optional servers)
+  (let ((server-list (or servers elmo-plug-on-servers)))
+    (catch 'plugged
+      (while server-list
+       (if (elmo-plugged-p (car server-list))
+           (throw 'plugged t))
+       (setq server-list (cdr server-list))))))
+
+(defun elmo-plug-on-by-exclude-servers (alist &optional servers)
+  (let ((server-list (or servers elmo-plug-on-exclude-servers))
+       server other-servers)
+    (while alist
+      (when (and (not (member (setq server (caaar alist)) server-list))
+                (not (member server other-servers)))
+       (push server other-servers))
+      (setq alist (cdr alist)))
+    (elmo-plug-on-by-servers alist other-servers)))
+
+(defun elmo-plugged-p (&optional server port alist label-exp)
+  (let ((alist (or alist elmo-plugged-alist))
+       plugged-info)
+    (cond ((and (not port) (not server))
+          (cond ((eq elmo-plugged-condition 'one)
+                 (catch 'plugged
+                   (while alist
+                     (if (nth 2 (car alist))
+                         (throw 'plugged t))
+                     (setq alist (cdr alist)))))
+                ((eq elmo-plugged-condition 'all)
+                 (catch 'plugged
+                   (while alist
+                     (if (not (nth 2 (car alist)))
+                         (throw 'plugged nil))
+                     (setq alist (cdr alist)))
+                   t))
+                ((functionp elmo-plugged-condition)
+                 (funcall elmo-plugged-condition alist))
+                (t ;; independent
+                 elmo-plugged)))
+         ((not port) ;; server
+          (catch 'plugged
+            (while alist
+              (when (string= server (caaar alist))
+                (if (nth 2 (car alist))
+                    (throw 'plugged t)))
+              (setq alist (cdr alist)))))
+         (t
+          (setq plugged-info (assoc (cons server port) alist))
+          (if (not plugged-info)
+              ;; add elmo-plugged-alist automatically
+              (progn
+                (elmo-set-plugged elmo-plugged server port nil nil label-exp)
+                elmo-plugged)
+            (if (and elmo-auto-change-plugged
+                     (> elmo-auto-change-plugged 0)
+                     (nth 3 plugged-info)  ;; time
+                     (elmo-time-expire (nth 3 plugged-info)
+                                       elmo-auto-change-plugged))
+                t
+              (nth 2 plugged-info)))))))
+
+(defun elmo-set-plugged (plugged &optional server port time
+                                alist label-exp add)
+  (let ((alist (or alist elmo-plugged-alist))
+       label plugged-info)
+    (cond ((and (not port) (not server))
+          (setq elmo-plugged plugged)
+          ;; set plugged all element of elmo-plugged-alist.
+          (while alist
+            (setcdr (cdar alist) (list plugged time))
+            (setq alist (cdr alist))))
+         ((not port)
+          ;; set plugged all port of server
+          (while alist
+            (when (string= server (caaar alist))
+              (setcdr (cdar alist) (list plugged time)))
+            (setq alist (cdr alist))))
+         (t
+          ;; set plugged one port of server
+          (setq plugged-info (assoc (cons server port) alist))
+          (setq label (if label-exp
+                          (eval label-exp)
+                        (nth 1 plugged-info)))
+          (if plugged-info
+              ;; if add is non-nil, don't reset plug state.
+              (unless add
+                (setcdr plugged-info (list label plugged time)))
+            (setq alist
+                  (setq elmo-plugged-alist
+                        (nconc elmo-plugged-alist
+                               (list
+                                (list (cons server port) label plugged time))))))))
+    alist))
+
+(defun elmo-delete-plugged (&optional server port alist)
+  (let* ((alist (or alist elmo-plugged-alist))
+        (alist2 alist))
+    (cond ((and (not port) (not server))    
+          (setq alist nil))
+         ((not port)
+          ;; delete plugged all port of server
+          (while alist2
+            (when (string= server (caaar alist2))
+              (setq alist (delete (car alist2) alist)))
+            (setq alist2 (cdr alist2))))
+         (t
+          ;; delete plugged one port of server
+          (setq alist
+                (delete (assoc (cons server port) alist)) alist)))
+    alist))
+
+(defun elmo-disk-usage (path)
+  "Get disk usage (bytes) in PATH."
+  (let ((file-attr 
+        (condition-case () (file-attributes path) (error nil))))
+    (if file-attr
+       (if (nth 0 file-attr) ; directory
+           (let ((files (condition-case () 
+                            (directory-files path t "^[^\\.]")
+                          (error nil)))
+                 (result 0.0))
+             ;; (result (nth 7 file-attr))) ... directory size
+             (while files
+               (setq result (+ result (or (elmo-disk-usage (car files)) 0)))
+               (setq files (cdr files)))
+             result)
+         (float (nth 7 file-attr))))))
+
+(defun elmo-get-last-accessed-time (path &optional dir)
+  "Returns last accessed time."
+  (let ((last-accessed (nth 4 (file-attributes (or (and dir
+                                                       (expand-file-name
+                                                        path dir))
+                                                  path)))))
+    (if last-accessed
+       (setq last-accessed (+ (* (nth 0 last-accessed)
+                                 (float 65536)) (nth 1 last-accessed)))
+      0)))
+
+(defun elmo-get-last-modification-time (path &optional dir)
+  "Returns last accessed time."
+  (let ((last-modified (nth 5 (file-attributes (or (and dir
+                                                       (expand-file-name
+                                                        path dir))
+                                                  path)))))
+    (setq last-modified (+ (* (nth 0 last-modified)
+                             (float 65536)) (nth 1 last-modified)))))
+
+(defun elmo-make-directory (path)
+  "create directory recursively."
+  (let ((parent (directory-file-name (file-name-directory path))))
+    (if (null (file-directory-p parent))
+       (elmo-make-directory parent))
+    (make-directory path)
+    (if (string= path (expand-file-name elmo-msgdb-dir))
+       (set-file-modes path 448) ; 700
+      )))
+
+(defun elmo-delete-directory (path &optional no-hierarchy)
+  "delete directory recursively."
+  (let ((dirent (directory-files path))
+       relpath abspath hierarchy)
+    (while dirent
+      (setq relpath (car dirent)
+           dirent (cdr dirent)
+           abspath (expand-file-name relpath path))
+      (when (not (string-match "^\\.\\.?$" relpath))
+       (if (eq (nth 0 (file-attributes abspath)) t)
+           (if no-hierarchy
+               (setq hierarchy t)
+             (elmo-delete-directory abspath no-hierarchy))
+         (delete-file abspath))))
+    (unless hierarchy
+      (delete-directory path))))
+
+(defun elmo-list-filter (l1 l2)
+  "L1 is filter."
+  (if (eq l1 t)
+      ;; t means filter all.
+      nil
+    (if l1
+       (elmo-delete-if (lambda (x) (not (memq x l1))) l2)
+      ;; filter is nil
+      l2)))
+
+(defun elmo-folder-local-p (folder)
+  "Return whether FOLDER is a local folder or not."
+  (let ((type (elmo-folder-get-type folder)))
+    (memq type '(localdir localnews archive maildir internal cache))))
+
+(defun elmo-folder-writable-p (folder)
+  (let ((type (elmo-folder-get-type folder)))
+    (memq type '(imap4 localdir archive))))
+
+(defun elmo-multi-get-intlist-list (numlist &optional as-is)
+  (let ((numbers (sort numlist '<))
+       (cur-number 0)
+       one-list int-list-list)
+    (while numbers
+      (setq cur-number (+ cur-number 1))
+      (setq one-list nil)
+      (while (and numbers 
+                 (eq 0
+                     (/ (- (car numbers)
+                           (* elmo-multi-divide-number cur-number))
+                        elmo-multi-divide-number)))
+       (setq one-list (nconc
+                       one-list 
+                       (list 
+                        (if as-is
+                            (car numbers)
+                          (% (car numbers)
+                             (* elmo-multi-divide-number cur-number))))))
+       (setq numbers (cdr numbers)))
+      (setq int-list-list (nconc int-list-list (list one-list))))
+    int-list-list))
+
+(defsubst elmo-list-delete-if-smaller (list number)
+  (let ((ret-val (copy-sequence list)))
+    (while list
+      (if (< (car list) number)
+         (setq ret-val (delq (car list) ret-val)))
+      (setq list (cdr list)))
+    ret-val))
+
+(defun elmo-list-diff (list1 list2 &optional mes)
+  (if mes 
+      (message mes))
+  (let ((clist1 (copy-sequence list1))
+       (clist2 (copy-sequence list2)))
+    (while list2
+      (setq clist1 (delq (car list2) clist1))
+      (setq list2 (cdr list2)))
+    (while list1
+      (setq clist2 (delq (car list1) clist2))
+      (setq list1 (cdr list1)))
+    (if mes
+       (message (concat mes "done.")))
+    (list clist1 clist2)))
+
+(defun elmo-list-bigger-diff (list1 list2 &optional mes)
+  "Returns a list (- +). + is bigger than max of LIST1, in LIST2"
+  (if (null list2)
+      (cons list1  nil)
+    (let* ((l1 list1)
+          (l2 list2)
+          (max-of-l2 (or (nth (max 0 (1- (length l2))) l2) 0))
+          diff1 num i percent
+          )
+      (setq i 0)
+      (setq num (+ (length l1)))
+      (while l1
+       (if (memq (car l1) l2)
+           (if (eq (car l1) (car l2))
+               (setq l2 (cdr l2))
+             (delq (car l1) l2))
+         (if (> (car l1) max-of-l2)
+             (setq diff1 (nconc diff1 (list (car l1))))))
+       (if mes
+           (progn
+             (setq i (+ i 1))
+             (setq percent (/ (* i 100) num))
+             (if (eq (% percent 5) 0)
+                 (elmo-display-progress
+                  'elmo-list-bigger-diff "%s%d%%" percent mes))))
+       (setq l1 (cdr l1)))
+      (cons diff1 (list l2)))))
+
+(defun elmo-multi-list-bigger-diff (list1 list2 &optional mes)
+  (let ((list1-list (elmo-multi-get-intlist-list list1 t))
+       (list2-list (elmo-multi-get-intlist-list list2 t))
+       result
+       dels news)
+    (while (or list1-list list2-list)
+      (setq result (elmo-list-bigger-diff (car list1-list) (car list2-list) 
+                                         mes))
+      (setq dels (append dels (car result)))
+      (setq news (append news (cadr result)))
+      (setq list1-list (cdr list1-list))
+      (setq list2-list (cdr list2-list)))
+    (cons dels (list news))))
+
+(defvar elmo-imap4-name-space-regexp-list nil)
+(defun elmo-imap4-identical-name-space-p (fld1 fld2)
+  ;; only on UW?
+  (if (or (eq (string-to-char fld1) ?#)
+         (eq (string-to-char fld2) ?#))
+      (string= (car (split-string fld1 "/"))
+              (car (split-string fld2 "/")))
+    t))
+
+(defun elmo-folder-identical-system-p (folder1 folder2)
+  "folder1 and folder2 should be real folder (not virtual)."
+  (cond ((eq (elmo-folder-get-type folder1) 'imap4)
+        (let ((spec1 (elmo-folder-get-spec folder1))
+              (spec2 (elmo-folder-get-spec folder2)))
+          (and (elmo-imap4-identical-name-space-p
+                (nth 1 spec1) (nth 1 spec2))
+               (string= (elmo-imap4-spec-hostname spec1)
+                        (elmo-imap4-spec-hostname spec2))    ; hostname
+               (string= (elmo-imap4-spec-username spec1)
+                        (elmo-imap4-spec-username spec2))))) ; username
+       (t
+        (elmo-folder-direct-copy-p folder1 folder2))))
+
+(defconst elmo-folder-direct-copy-alist
+  '((localdir  . (localdir localnews archive))
+    (maildir   . (maildir  localdir localnews archive))
+    (localnews . (localdir localnews archive))
+    (archive   . (localdir localnews archive))
+    (cache     . (localdir localnews archive))))
+
+(defun elmo-folder-direct-copy-p (src-folder dst-folder)
+  (let ((src-type (car (elmo-folder-get-spec src-folder)))
+       (dst-type (car (elmo-folder-get-spec dst-folder)))
+       dst-copy-type)
+    (and (setq dst-copy-type
+              (cdr (assq src-type elmo-folder-direct-copy-alist)))
+        (memq dst-type dst-copy-type))))
+
+(defmacro elmo-filter-type (filter)
+  (` (aref (, filter) 0)))
+
+(defmacro elmo-filter-key (filter)
+  (` (aref (, filter) 1)))
+
+(defmacro elmo-filter-value (filter)
+  (` (aref (, filter) 2)))
+
+(defsubst elmo-buffer-field-condition-match (condition)
+  (let (term)
+    (catch 'done
+      (while condition
+       (goto-char (point-min))
+       (setq term (car condition))
+       (cond 
+        ((and (eq (elmo-filter-type term) 'date)
+              (string= (elmo-filter-key term) "since"))
+         (let ((date (elmo-date-get-datevec (elmo-filter-value term))))
+           (if (string<
+                (timezone-make-sortable-date (aref date 0) 
+                                             (aref date 1)
+                                             (aref date 2)
+                                             (timezone-make-time-string
+                                              (aref date 3) 
+                                              (aref date 4) 
+                                              (aref date 5)))
+                (timezone-make-date-sortable (std11-field-body "date")))
+               (throw 'done t))))
+        ((and (eq (elmo-filter-type term) 'date)
+              (string= (elmo-filter-key term) "before"))
+         (let ((date (elmo-date-get-datevec (elmo-filter-value term))))
+           (if (string<
+                (timezone-make-date-sortable (std11-field-body "date"))
+                (timezone-make-sortable-date (aref date 0) 
+                                             (aref date 1)
+                                             (aref date 2)
+                                             (timezone-make-time-string
+                                              (aref date 3) 
+                                              (aref date 4) 
+                                              (aref date 5))))
+               (throw 'done t))))
+        ((eq (elmo-filter-type term) 'match)
+         (if (string= "body" (elmo-filter-key term))
+             (progn
+               (re-search-forward "^$" nil t)     ; goto body
+               (if (search-forward (elmo-filter-value term) nil t)
+                   (throw 'done t)))
+           (let ((fval (eword-decode-string
+                        (or (std11-field-body (elmo-filter-key term)) ""))))
+             (if (and fval (string-match (elmo-filter-value term)
+                                         fval))
+                 (throw 'done t)))))
+        ((eq (elmo-filter-type term) 'unmatch)
+         (if (string= "body" (elmo-filter-key term))
+             (progn
+               (re-search-forward "^$" nil t)     ; goto body
+               (if (not (search-forward (elmo-filter-value term) nil t))
+                   (throw 'done t)))
+           (let ((fval (eword-decode-string
+                        (or (std11-field-body (elmo-filter-key term)) ""))))
+             (if fval
+                 (if (not (string-match (elmo-filter-value term)
+                                        fval))
+                     (throw 'done t))
+               (throw 'done t)))))) ; OK?
+       (setq condition (cdr condition)))
+      (throw 'done nil))))
+
+(defsubst elmo-file-field-condition-match (file condition)
+  (elmo-set-work-buf
+   (as-binary-input-file
+    (insert-file-contents file))
+   (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+   (decode-mime-charset-region (point-min)(point-max) elmo-mime-charset)
+   (elmo-buffer-field-condition-match condition)))
+
+(defun elmo-cross-device-link-error-p (err)
+  (let ((errobj err)
+       cur)
+    (catch 'done
+      (while errobj
+       (if (and (stringp (setq cur (car errobj)))
+                (or (string-match "cross-device" cur)
+                    (string-match "operation not supported" cur)))
+           (throw 'done t))
+       (setq errobj (cdr errobj)))
+      nil)))
+
+(defmacro elmo-get-hash-val (string hashtable)
+  (let ((sym (list 'intern-soft string hashtable)))
+    (list 'if (list 'boundp sym)
+       (list 'symbol-value sym))))
+
+(defmacro elmo-set-hash-val (string value hashtable)
+  (list 'set (list 'intern string hashtable) value))
+
+;; Make a hash table (default and minimum size is 1024).
+(defun elmo-make-hash (&optional hashsize)
+  (make-vector (if hashsize (max (elmo-create-hash-size hashsize) 1024) 1024) 0))
+
+(defsubst elmo-mime-string (string)
+  "Normalize MIME encoded string."
+    (and string
+        (let (str)
+          (elmo-set-work-buf
+           (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+           (setq str (eword-decode-string
+                      (decode-mime-charset-string string elmo-mime-charset)))
+           (setq str (encode-mime-charset-string str elmo-mime-charset))
+           (elmo-set-buffer-multibyte nil)
+           str))))
+
+(defsubst elmo-collect-field (beg end downcase-field-name)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (let ((regexp (concat "\\(" std11-field-head-regexp "\\)[ \t]*"))
+           dest name body)
+       (while (re-search-forward regexp nil t)
+         (setq name (buffer-substring-no-properties
+                     (match-beginning 1)(1- (match-end 1))))
+         (if downcase-field-name
+             (setq name (downcase name)))
+         (setq body (buffer-substring-no-properties
+                     (match-end 0) (std11-field-end)))
+         (or (assoc name dest)
+             (setq dest (cons (cons name body) dest))))
+       dest))))
+
+(defsubst elmo-collect-field-from-string (string downcase-field-name)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-min))
+    (let ((regexp (concat "\\(" std11-field-head-regexp "\\)[ \t]*"))
+         dest name body)
+      (while (re-search-forward regexp nil t)
+       (setq name (buffer-substring-no-properties
+                   (match-beginning 1)(1- (match-end 1))))
+       (if downcase-field-name
+           (setq name (downcase name)))
+       (setq body (buffer-substring-no-properties
+                   (match-end 0) (std11-field-end)))
+       (or (assoc name dest)
+           (setq dest (cons (cons name body) dest))))
+      dest)))
+
+(defun elmo-create-hash-size (min)
+  (let ((i 1))
+    (while (< i min)
+      (setq i (* 2 i)))
+    i))
+
+(defun elmo-safe-filename (folder)
+  (elmo-replace-in-string
+   (elmo-replace-in-string
+    (elmo-replace-in-string folder "/" " ")
+    ":" "__")
+   "|" "_or_"))
+
+(defvar elmo-msgid-replace-chars nil)
+
+(defsubst elmo-replace-msgid-as-filename (msgid)
+  "Replace message-id string as filename." 
+  (setq msgid (elmo-replace-in-string msgid " " "  "))
+  (if (null elmo-msgid-replace-chars)
+      (setq elmo-msgid-replace-chars 
+           (regexp-quote (mapconcat 
+                          'car elmo-msgid-replace-string-alist ""))))
+  (while (string-match (concat "[" elmo-msgid-replace-chars "]")
+                      msgid)
+    (setq msgid (concat 
+                (substring msgid 0 (match-beginning 0))
+                (cdr (assoc 
+                      (substring msgid 
+                                 (match-beginning 0) (match-end 0))
+                      elmo-msgid-replace-string-alist))
+                (substring msgid (match-end 0)))))
+  msgid)
+
+(defsubst elmo-recover-msgid-from-filename (filename)
+  "Recover Message-ID from filename."
+  (let (tmp result)
+    (while (string-match " " filename)
+      (setq tmp (substring filename 
+                          (match-beginning 0)
+                          (+ (match-end 0) 1)))
+      (if (string= tmp "  ")
+         (setq tmp " ")
+       (setq tmp (car (rassoc tmp 
+                              elmo-msgid-replace-string-alist))))
+      (setq result
+           (concat result 
+                   (substring filename 0 (match-beginning 0))
+                   tmp))
+      (setq filename (substring filename (+ (match-end 0) 1))))
+    (concat result filename)))
+
+(defsubst elmo-copy-file (src dst)
+  (condition-case err
+      (elmo-add-name-to-file src dst t)
+    (error (if (elmo-cross-device-link-error-p err)
+              (copy-file src dst t)
+            (error "copy file failed")))))
+
+(defmacro elmo-buffer-exists-p (buffer)
+  (` (when (, buffer)
+       (funcall (if (stringp (, buffer)) 'get-buffer 'buffer-name)
+               (, buffer)))))
+
+(defmacro elmo-kill-buffer (buffer)
+  (` (when (elmo-buffer-exists-p (, buffer))
+       (kill-buffer (, buffer)))))
+
+(defun elmo-delete-lists (keys list)
+  "Delete all entries in LIST that equal to KEYS."
+  (while keys
+    (setq list (delete (car keys) list))
+    (setq keys (cdr keys)))
+  list)
+
+(defun elmo-delete-if (pred lst)
+  "Returns new list contains items which don't satisfy PRED in LST."
+  (let (result)
+    (while lst
+      (unless (funcall pred (car lst))
+       (setq result (nconc result (list (car lst)))))
+      (setq lst (cdr lst)))
+    result))
+
+(defun elmo-list-delete (list1 list2)
+  "Any element of list1 is deleted from list2."
+  (while list1
+    (setq list2 (delete (car list1) list2))
+    (setq list1 (cdr list1)))  
+  list2)
+
+(defun elmo-list-member (list1 list2)
+  "If any element of list1 is member of list2, returns t."
+  (catch 'done
+    (while list1
+      (if (member (car list1) list2)
+         (throw 'done t))
+      (setq list1 (cdr list1)))))
+
+(defun elmo-count-matches (regexp beg end)
+  (let ((count 0))
+    (save-excursion
+      (goto-char beg)
+      (while (re-search-forward regexp end t)
+       (setq count (1+ count)))
+      count)))
+
+(if (fboundp 'display-error)
+    (defalias 'elmo-display-error 'display-error)
+  (defun elmo-display-error (error-object stream)
+    "a tiny function to display error-object to the stream."
+    (let ((first t)
+         (errobj error-object)
+         err-mes)
+      (while errobj
+       (setq err-mes (concat err-mes (format 
+                                      (if (stringp (car errobj))
+                                          "%s"
+                                        (if (boundp 'nemacs-version)
+                                            "%s"
+                                          "%S")) (car errobj))))
+       (setq errobj (cdr errobj))
+       (if errobj (setq err-mes (concat err-mes (if first ": " ", "))))
+       (setq first nil))
+      (princ err-mes stream))))
+
+(if (fboundp 'lprogress-display)
+    (defalias 'elmo-display-progress 'lprogress-display)
+  (defun elmo-display-progress (label format &optional value &rest args)
+    "Print a progress message."
+    (if (and (null format) (null args))
+       (message nil)
+      (apply (function message) (concat format " %d%%")
+            (nconc args (list value))))))
+
+(defun elmo-time-expire (before-time diff-time)
+  (let* ((current (current-time))
+        (rest (when (< (nth 1 current) (nth 1 before-time))
+                (expt 2 16)))
+        diff)
+    (setq diff
+         (list (- (+ (car current) (if rest -1 0)) (car before-time))
+               (- (+ (or rest 0) (nth 1 current)) (nth 1 before-time))))
+    (and (eq (car diff) 0)
+        (< diff-time (nth 1 diff)))))
+
+(defun elmo-open-network-stream (name buffer host service ssl)
+  (let ((auto-plugged (and elmo-auto-change-plugged
+                          (> elmo-auto-change-plugged 0)))
+       process)
+    (if (eq ssl 'starttls)
+       (require 'starttls)
+      (if ssl (require 'ssl)))
+    (condition-case err
+       (let (process-connection-type)
+         (setq process
+               (if (eq ssl 'starttls)
+                   (starttls-open-stream name buffer host service)
+                 (if ssl
+                     (open-ssl-stream name buffer host service)
+                   (open-network-stream name buffer host service)))))
+      (error
+       (when auto-plugged
+        (elmo-set-plugged nil host service (current-time))
+        (message "Auto plugged off at %s:%d" host service)
+        (sit-for 1))
+       (signal (car err) (cdr err))))
+    (when process
+      (process-kill-without-query process)
+      (when auto-plugged
+       (elmo-set-plugged t host service))
+      process)))
+
+(if (fboundp 'std11-fetch-field)
+    (defalias 'elmo-field-body 'std11-fetch-field) ;;no narrow-to-region
+  (defalias 'elmo-field-body 'std11-field-body))
+
+(defmacro elmo-string (string)
+  "String without text property"
+  (` (let ((obj (copy-sequence (, string))))
+       (set-text-properties 0 (length obj) nil obj)
+       obj)))
+
+(defun elmo-y-or-n-p (prompt &optional auto default)
+  "Same as `y-or-n-p'.
+But if optional argument AUTO is non-nil, DEFAULT is returned."
+  (if auto
+      default
+    (y-or-n-p prompt)))
+
+(defun elmo-string-member (string slist)
+  "Returns t if STRING is a member of the SLIST."
+  (catch 'found
+    (while slist
+      (if (and (stringp (car slist))
+              (string= string (car slist)))
+         (throw 'found t))
+      (setq slist (cdr slist)))))
+
+(defun elmo-string-match-member (str list &optional case-ignore)
+  (let ((case-fold-search case-ignore))
+    (catch 'member
+      (while list
+       (if (string-match (car list) str)
+           (throw 'member (car list)))
+       (setq list (cdr list))))))
+
+(defsubst elmo-string-delete-match (string pos)
+  (concat (substring string
+                    0 (match-beginning pos))
+         (substring string
+                    (match-end pos)
+                    (length string))))
+
+(defun elmo-string-match-assoc (key alist &optional case-ignore)
+  (let ((case-fold-search case-ignore)
+       a)
+    (catch 'loop
+      (while alist
+       (setq a (car alist))
+       (if (and (consp a)
+                (stringp (car a))
+                (string-match key (car a)))
+           (throw 'loop a))
+       (setq alist (cdr alist))))))
+
+(defun elmo-string-matched-assoc (key alist &optional case-ignore)
+  (let ((case-fold-search case-ignore)
+       a)
+    (catch 'loop
+      (while alist
+       (setq a (car alist))
+       (if (and (consp a)
+                (stringp (car a))
+                (string-match (car a) key))
+           (throw 'loop a))
+       (setq alist (cdr alist))))))
+
+(defun elmo-string-assoc (key alist)
+  (let (a)
+    (catch 'loop
+      (while alist
+       (setq a (car alist))
+       (if (and (consp a)
+                (stringp (car a))
+                (string= key (car a)))
+           (throw 'loop a))
+       (setq alist (cdr alist))))))
+
+(defun elmo-string-rassoc (key alist)
+  (let (a)
+    (catch 'loop
+      (while alist
+       (setq a (car alist))
+       (if (and (consp a)
+                (stringp (cdr a))
+                (string= key (cdr a)))
+           (throw 'loop a))
+       (setq alist (cdr alist))))))
+
+(provide 'elmo-util)
+
+;;; elmo-util.el ends here
diff --git a/elmo/elmo-vars.el b/elmo/elmo-vars.el
new file mode 100644 (file)
index 0000000..43af0ce
--- /dev/null
@@ -0,0 +1,330 @@
+;;; elmo-vars.el -- User variables for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-24 14:46:43 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'poe)
+
+(eval-when-compile
+  (defun-maybe dynamic-link (a))
+  (defun-maybe dynamic-call (a b)))
+
+;; Version info.
+(defconst elmo-version "1.1.1")
+(defconst elmo-appname "ELMO")
+
+(defun elmo-version ()
+  (format "%s/%s" elmo-appname elmo-version))
+
+;; IMAP4
+(defvar elmo-default-imap4-mailbox "inbox"
+  "*Default IMAP4 mailbox.")
+(defvar elmo-default-imap4-server "localhost"
+  "*Default IMAP4 server.")
+(defvar elmo-default-imap4-authenticate-type "auth"
+  "*Default Authentication type for IMAP4.") ; "auth" or "login"
+(defvar elmo-default-imap4-user (or (getenv "USER") 
+                                   (getenv "LOGNAME") 
+                                   (user-login-name))
+  "*Default username for IMAP4")
+(defvar elmo-default-imap4-port 143 
+  "*Default Port number of IMAP.")
+(defvar elmo-default-imap4-ssl nil
+  "*Non-nil forces using SSL by default.")
+
+;; POP3
+(defvar elmo-default-pop3-user (or (getenv "USER") 
+                                  (getenv "LOGNAME") 
+                                  (user-login-name))
+  "*Default username for POP3")
+(defvar elmo-default-pop3-server  "localhost"
+  "*Default POP3 server.")
+(defvar elmo-default-pop3-authenticate-type "user"
+  "*Default Authentication type for POP3") ; "apop" or "user"
+(defvar elmo-default-pop3-port 110
+  "*Default POP3 port.")
+(defvar elmo-default-pop3-ssl nil
+  "*Non-nil forces using SSL by default.")
+
+;; NNTP
+(defvar elmo-default-nntp-server  "localhost"
+  "*Default NNTP server.")
+(defvar elmo-default-nntp-user nil
+  "*Default User of NNTP. nil means no user authentication.")
+(defvar elmo-default-nntp-port 119 
+  "*Default Port number of NNTP")
+(defvar elmo-default-nntp-ssl nil
+  "*Non-nil forces using SSL by default.")
+
+(defvar elmo-localdir-folder-path "~/Mail"
+  "*Local mail folder path.")
+(defvar elmo-localnews-folder-path "~/News"
+  "*Local news folder path.")
+(defvar elmo-maildir-folder-path "~/Maildir"
+  "*Maildir folder path.")
+(defvar elmo-maildir-list '("\\+~/Maildir")
+  "*All Folders that match this list will be treated as Maildir.
+Each elements are regexp of folder name (This is obsolete).")
+(defvar elmo-msgdb-dir "~/.elmo"
+  "*ELMO Message Database path.")
+(defvar elmo-passwd-alist-file-name "passwd"
+  "*ELMO Password filename.")
+(defvar elmo-warning-threshold 30000
+  "*Display warning when the bytes of message exceeds this value.")
+(defvar elmo-msg-appended-hook nil
+  "A hook called when message is appended to database.")
+(defvar elmo-msg-deleted-hook nil
+  "A hook called when message is deleted from database")
+(defvar elmo-nntp-post-pre-hook nil
+  "A hook called just before the nntp posting.")
+(defvar elmo-lang "ja"
+  "Language for displayed messages.")
+
+(defvar elmo-mime-charset 'iso-2022-jp)
+(defvar elmo-search-mime-charset 'iso-2022-jp)
+
+(defvar elmo-msgdb-mark-filename "mark"
+  "Mark database.")
+(defvar elmo-msgdb-overview-filename "overview"
+  "Overview database.")
+(defvar elmo-msgdb-number-filename "number"
+  "Message number <=> Message-ID database.")
+(defvar elmo-msgdb-location-filename "location"
+  "Message number <=> Actual location symbol.")
+(defvar elmo-msgdb-seen-filename "seen"
+  "Seen message list for append.")
+(defvar elmo-msgdb-killed-filename "killed"
+  "Deleted messages... contains elmo-killed-msgs-list.")
+(defvar elmo-msgdb-validity-filename "validity")
+(defvar elmo-msgdb-flist-filename "flist"
+  "Folder list cache (for access folder).")
+(defvar elmo-msgdb-finfo-filename "finfo"
+  "Folder information cache...list of '(filename . '(new unread all)).")
+(defvar elmo-msgdb-append-list-filename "append"
+  "Appended messages...Structure is same as number-alist. 
+For disconnected operations.")
+(defvar elmo-msgdb-resume-list-filename "resume"
+  "Resumed messages. For disconnected operations.")
+(defvar elmo-msgdb-lock-list-filename "lock"
+  "Locked messages...list of message-id. 
+For disconnected operations.")
+(defvar elmo-msgdb-global-mark-filename "global-mark"
+  "Alist of global mark .")
+(defvar elmo-lost+found-folder "+lost+found"
+  "Lost and found.")
+(defvar elmo-crosspost-alist-filename "crosspost-alist"
+  "Alist of crosspost messages.")
+
+(defvar elmo-use-server-diff t
+  "Non-nil forces to get unread message information on server.")
+
+(defvar elmo-imap4-disuse-server-flag-mailbox-regexp "^#mh" ; UW imapd
+  "If mailbox name matches this value, flags on server are not used except
+ \Delete flag.")
+
+(defvar elmo-msgdb-extra-fields nil
+  "Extra fields for msgdb.")
+
+(defvar elmo-queue-filename "queue"
+  "*IMAP pending event queue is saved in this file.")
+(defvar elmo-enable-disconnected-operation nil
+  "*Enable disconnected operations.")
+
+(defvar elmo-imap4-overview-fetch-chop-length 200
+  "*Number of overviews to fetch in one request in imap4.")
+(defvar elmo-nntp-overview-fetch-chop-length 200
+ "*Number of overviews to fetch in one request in nntp.") 
+(defvar elmo-localdir-header-chop-length 2048
+  "*Number of bytes to get header in one reading from file.")
+(defvar elmo-imap4-force-login nil
+  "*Non-nil forces to try 'login' if there is no 'auth' capability in imapd.")
+(defvar elmo-imap4-use-select-to-update-status nil
+  "*Some imapd have to send select command to update status.
+(ex. UW imapd 4.5-BETA?).  For these imapd, you must set this variable t.")
+
+(defvar elmo-imap4-use-modified-utf7 nil
+  "*Use mofidied UTF-7 (rfc2060) encoding for IMAP4 folder name.")
+
+(defvar elmo-auto-change-plugged 600
+  "*Time to expire change plugged state automatically,
+as the number of seconds. Don't change plugged state automatically if nil.")
+
+(defvar elmo-plugged-condition 'one
+  "*The condition for `elmo-plugged' becomes on.
+If `all', when all port is on. If `one', when even one port is on.
+If `independent', independent port plugged.
+If function, return value of function.")
+
+(defvar elmo-plug-on-servers nil)
+
+(defvar elmo-plug-on-exclude-servers
+  (list "localhost"
+       (system-name)
+       (and (string-match "[^.]+" (system-name))
+            (substring (system-name) 0 (match-end 0)))))
+
+(defvar elmo-plugged-alist nil)
+
+(defvar elmo-dop-flush-confirm t
+  "*Flush disconnected operations queue with confirmation.")
+
+(defvar elmo-path-sep "/"
+  "*Path separator.")
+(defvar elmo-plugged t)
+(defvar elmo-use-semi nil)
+(defvar elmo-no-subject "(No Subject in original.)"
+  "*A string used when no subject field exists.")
+(defvar elmo-no-from "nobody@nowhere?"
+  "*A string used when no from field exists.")
+
+(defvar elmo-multi-divide-number 100000
+  "*Multi divider number.")
+
+;;; User variables for elmo-archive.
+(defvar elmo-archive-default-type 'zip
+  "*Default archiver type. The value must be a symbol.")
+
+;; database dynamic linking
+(defvar elmo-database-dl-module
+  (expand-file-name "database.so" exec-directory))
+
+(defvar elmo-database-dl-handle
+  (if (and (fboundp 'dynamic-link)
+          (file-exists-p
+           elmo-database-dl-module))
+      (if (fboundp 'open-database)
+         t ;;
+       (dynamic-link elmo-database-dl-module))))
+
+(if (and elmo-database-dl-handle
+        (integerp elmo-database-dl-handle))
+    (dynamic-call "emacs_database_init" elmo-database-dl-handle))
+
+(defvar elmo-use-database (or (featurep 'dbm)
+                             (featurep 'gnudbm)
+                             (featurep 'berkdb)
+                             (featurep 'berkeley-db)
+                             ;; static/dl-database
+                             (fboundp 'open-database)))
+
+(defvar elmo-date-match (not (boundp 'nemacs-version))
+  "Date match is available or not")
+
+(defconst elmo-spec-alist
+  '((?%  . imap4)
+    (?-  . nntp)
+    (?\+ . localdir)
+    (?\* . multi)
+    (?\/ . filter)
+    (?\$ . archive)
+    (?&  . pop3)
+    (?=  . localnews)
+    (?'  . internal)
+    (?|  . pipe)
+    (?.  . maildir)))
+
+(defvar elmo-debug nil)
+(defconst mmelmo-entity-buffer-name "*MMELMO-BUFFER*")
+
+(defvar elmo-folder-info-hashtb nil
+  "Array of folder database information '(max length new unread).")
+
+(defvar elmo-crosspost-message-alist nil
+  "List of crosspost message.")
+
+(defvar elmo-cache-expire-default-method "size"
+  "Default expiration method.")
+
+(defvar elmo-cache-expire-default-size 30000
+  "Cache expiration disk size (Kilo bytes). This must be float value.")
+
+(defvar elmo-cache-expire-default-age 50
+  "Cache expiration age (days).")
+(defvar elmo-cache-dirname "cache"
+  "Directory name for cache storage.")
+
+(defvar elmo-use-buffer-cache t
+  "Use buffer cache.")
+
+(defvar elmo-buffer-cache-size 10
+  "*Number of buffer for message cache.")
+
+(defvar elmo-pack-number-check-strict t
+  "Pack number strictly.")
+
+(defvar elmo-have-link-count
+  (not
+   ;; OS/2: EMX always returns the link count "1" :-(
+   (or (memq system-type '(OS/2 emx))
+       ;; Meadow seems to have pseudo link count.(suggestion by S.YAMAGUCHI)
+       (and (eq system-type 'windows-nt) (not (featurep 'meadow)))))
+  "Your file system has link count, or not.")
+
+(defvar elmo-weekday-name-en '["Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"])
+(defvar elmo-weekday-name-ja '["\e$BF|\e(B" "\e$B7n\e(B" "\e$B2P\e(B" "\e$B?e\e(B" "\e$BLZ\e(B" "\e$B6b\e(B" "\e$BEZ\e(B"])
+(defvar elmo-weekday-name-fr '["Dim" "Lun" "Mar" "Mer" "Jeu" "Ven" "Sam"])
+(defvar elmo-weekday-name-de '["Son" "Mon" "Die" "Mit" "Don" "Fre" "Sam"])
+
+(defvar elmo-msgid-replace-string-alist
+  '((":"  . " c")
+    ("*"  . " a")
+    ("?"  . " q")
+    ("<"  . " l")
+    (">"  . " g")
+    ("\"" . " d")
+    ("|"  . " p")
+    ("/"  . " s")
+    ("\\" . " b")))
+
+(defvar elmo-archive-use-cache nil
+  "Use cache in archive folder.")
+
+(defvar elmo-nntp-use-cache t
+  "Use cache in nntp folder.")
+
+(defvar elmo-imap4-use-cache t
+  "Use cache in imap4 folder.")
+
+(defvar elmo-pop3-use-cache t
+  "Use cache in pop3 folder.")
+
+(defvar elmo-localdir-lockfile-list nil)
+
+(defvar elmo-nntp-max-number-precedes-list-active nil
+  "If non-nil, max number of the msgdb is set as the max number of 
+'list active' (needed for inn 2.3 or later?). ")
+
+(defvar elmo-pop3-send-command-synchronously nil
+  "If non-nil, commands are send synchronously.
+If server doesn't accept asynchronous commands, this variable should be 
+set as non-nil.")
+
+(provide 'elmo-vars)
+
+;;; elmo-vars.el ends here
diff --git a/elmo/elmo2.el b/elmo/elmo2.el
new file mode 100644 (file)
index 0000000..79dc003
--- /dev/null
@@ -0,0 +1,1023 @@
+;;; elmo2.el -- ELMO main file (I don't remember why this is 2).
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:43:10 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-msgdb)
+(require 'elmo-cache)
+(require 'elmo-util)
+(require 'elmo-dop)
+(provide 'elmo2)
+
+(eval-when-compile
+  (require 'elmo-localdir)
+  (require 'elmo-imap4)
+  (require 'elmo-nntp)
+  (require 'elmo-pop3)
+  (require 'elmo-pipe)
+;  (require 'elmo-multi)
+  (require 'elmo-filter)
+  (require 'elmo-archive)
+  ;(require 'elmo-cache2)
+  )
+
+(if (or (featurep 'dbm)
+       (featurep 'gnudbm)
+       (featurep 'berkdb)
+       (featurep 'berkeley-db))
+    (require 'elmo-database))
+
+(defun elmo-quit ()
+  (interactive)
+  (if (featurep 'elmo-imap4)
+      (elmo-imap4-flush-connection))
+  (if (featurep 'elmo-nntp)
+      (elmo-nntp-flush-connection))
+  (if (featurep 'elmo-pop3)
+      (elmo-pop3-flush-connection))
+  (if (get-buffer elmo-work-buf-name)
+      (kill-buffer elmo-work-buf-name))
+  )
+
+(defun elmo-cleanup-variables ()
+  (setq elmo-folder-info-hashtb nil
+       elmo-nntp-groups-hashtb nil
+       elmo-nntp-list-folders-cache nil
+       ))
+
+;;  (cons of max . estimated message number) elmo-max-of-folder (folder)
+(defun elmo-max-of-folder (folder)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "max-of-folder")
+    (elmo-dop-max-of-folder folder)))
+
+;;  list elmo-list-folder (folder)
+(defun elmo-list-folder (folder)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "list-folder")
+    (elmo-dop-list-folder folder)))
+
+;;  list elmo-list-folders (folder)
+
+(defun elmo-list-folders (folder &optional hierarchy)
+  (elmo-call-func folder "list-folders" hierarchy))
+
+;; bool elmo-folder-exists-p (folder)
+(defun elmo-folder-exists-p (folder)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "folder-exists-p")
+    (elmo-dop-folder-exists-p folder)))
+
+;; bool elmo-folder-creatable-p (folder)
+(defun elmo-folder-creatable-p (folder)
+  (elmo-call-func folder "folder-creatable-p"))
+
+;; bool elmo-create-folder (folder)
+;; create folder
+(defun elmo-create-folder (folder)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "create-folder")
+    (elmo-dop-create-folder folder)))
+
+(defun elmo-delete-folder (folder)
+  (let ((type (elmo-folder-get-type folder)))
+    (if (or (not (memq type '(localdir localnews archive imap4 maildir)))
+           (if (elmo-folder-plugged-p folder)
+               (elmo-call-func folder "delete-folder")
+             (elmo-dop-delete-folder folder)))
+       ;; If folder doesn't support delete folder, delete msgdb path only.
+       (elmo-msgdb-delete-path folder))))
+
+(defun elmo-rename-folder (old-folder new-folder)
+  (let ((old-type (elmo-folder-get-type old-folder))
+       (new-type (elmo-folder-get-type new-folder)))
+    (if (not (eq old-type new-type))
+       (error "not same folder type")
+      (unless (and (memq old-type '(localdir localnews archive imap4))
+                  (elmo-folder-identical-system-p old-folder new-folder))
+       (error "rename folder not supported"))
+      (if (elmo-folder-plugged-p old-folder)
+         (and
+          (if (or (file-exists-p (elmo-msgdb-expand-path new-folder))
+                  (elmo-folder-exists-p new-folder))
+              (error "already exists folder: %s" new-folder)
+            t)
+          (elmo-call-func old-folder "rename-folder"
+                          (elmo-folder-get-spec new-folder))
+          (elmo-msgdb-rename-path old-folder new-folder))
+       (elmo-dop-rename-folder old-folder new-folder)))))
+
+(defun elmo-read-msg-no-cache (folder msg outbuf &optional msgdb)
+  "Read messsage into outbuf without cacheing.
+If msgdb is specified, use cache."
+  (let (ret-val)
+    (when msgdb
+      (set-buffer outbuf)
+      (erase-buffer)
+      (setq ret-val
+           (elmo-cache-read 
+            ;; message-id
+            (cdr (assq msg (elmo-msgdb-get-number-alist msgdb)))
+            folder msg)))
+    (if (not ret-val)
+       (elmo-call-func folder "read-msg" msg outbuf))))
+
+(defun elmo-force-cache-msg (folder number msgid &optional loc-alist)
+  "Force cache message."
+  (let* ((cache-file (elmo-cache-get-path msgid))
+        dir)
+    (when cache-file
+      (setq dir (directory-file-name (file-name-directory cache-file)))
+      (if (not (file-exists-p dir))
+         (elmo-make-directory dir))
+      (if (elmo-local-file-p folder number)
+         (elmo-copy-file (elmo-get-msg-filename folder number loc-alist)
+                         cache-file)
+       (with-temp-buffer
+         (elmo-call-func folder "read-msg" number (current-buffer))
+         (as-binary-output-file 
+          (write-region (point-min) (point-max) cache-file nil 'no-msg)))))))
+
+(defun elmo-prefetch-msg (folder msg outbuf msgdb)
+  "Read message into outbuf with cacheing."
+  (save-excursion
+    (let* ((number-alist (elmo-msgdb-get-number-alist 
+                         (or msgdb (elmo-msgdb-load folder))))
+          (dir (elmo-msgdb-expand-path folder))
+          (message-id (cdr (assq msg number-alist)))
+          type
+          cache-status 
+          ret-val part-num real-fld-num)
+      (set-buffer outbuf)
+      (if (elmo-cache-exists-p message-id)
+         t
+       ;; cache doesn't exist.
+       (setq real-fld-num (elmo-get-real-folder-number
+                           folder msg))
+       (setq type (elmo-folder-get-type (car real-fld-num)))
+       (cond ((eq type 'imap4)
+              (setq ret-val (elmo-imap4-prefetch-msg 
+                             (elmo-folder-get-spec (car real-fld-num))
+                             (cdr real-fld-num) 
+                             outbuf)))
+             ((elmo-folder-local-p (car real-fld-num)))
+             (t (setq ret-val (elmo-call-func (car real-fld-num) 
+                                              "read-msg" 
+                                              (cdr real-fld-num) outbuf))))
+       (if ret-val
+           (elmo-cache-save message-id
+                            (elmo-string-partial-p ret-val)
+                            folder msg))
+       (and ret-val t)))))
+
+(defun elmo-prefetch-msgs (folder msgs)
+  "prefetch messages for queueing."
+  (let* ((msgdb (elmo-msgdb-load folder))
+         (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (len (length msgs))
+        (count 0)
+         msgid msg)
+    (while msgs
+      (setq msg (car msgs))
+      (setq msgid (cdr (assq msg number-alist)))
+      (message "%s:Prefetching... %d/%d message(s)"
+              folder
+              (setq count (+ 1 count)) len)
+      (elmo-force-cache-msg folder msg msgid)
+      (setq msgs (cdr msgs)))))
+
+;;  elmo-read-msg (folder msg outbuf msgdb)
+;;; read message 
+(defun elmo-read-msg (folder msg outbuf msgdb &optional force-reload)
+  "Read message into outbuf."
+  (let ((inhibit-read-only t))
+    (if (not (elmo-use-cache-p folder msg))
+       (elmo-read-msg-no-cache folder msg outbuf msgdb)
+      (elmo-read-msg-with-cache folder msg outbuf msgdb force-reload))))
+
+(defun elmo-read-msg-with-cache (folder msg outbuf msgdb 
+                                       &optional force-reload)
+  "Read message into outbuf with cacheing."
+  (let* ((number-alist (elmo-msgdb-get-number-alist 
+                       (or msgdb (elmo-msgdb-load folder))))
+        (dir (elmo-msgdb-expand-path folder))
+        (message-id (cdr (assq msg number-alist)))
+        (type (elmo-folder-number-get-type folder msg))
+        cache-status 
+        ret-val part-num real-fld-num)
+    (set-buffer outbuf)
+    (if (and (not force-reload)
+            (not (elmo-local-file-p folder msg)))
+       (setq ret-val (elmo-cache-read message-id folder msg)))
+    (if ret-val 
+       t
+      ;; cache doesn't exist.
+      (setq real-fld-num (elmo-get-real-folder-number
+                         folder msg))
+      (if (setq ret-val (elmo-call-func (car real-fld-num) 
+                                       "read-msg" 
+                                       (cdr real-fld-num) outbuf))
+         (if (not (elmo-local-file-p folder msg))
+             (elmo-cache-save message-id
+                              (elmo-string-partial-p ret-val)
+                              folder msg)))
+      (and ret-val t))))
+
+(defun elmo-copy-msgs (src-folder msgs dst-folder &optional msgdb same-number)
+  (let* ((src-spec (elmo-folder-get-spec src-folder))
+        (loc-alist (if msgdb
+                       (elmo-msgdb-get-location msgdb)
+                     (elmo-msgdb-location-load
+                      (elmo-msgdb-expand-path nil src-spec)))))
+    (if (eq (car src-spec) 'archive)
+       (elmo-archive-copy-msgs-froms
+        (elmo-folder-get-spec dst-folder)
+        msgs src-spec loc-alist same-number)
+      (elmo-call-func dst-folder "copy-msgs"
+                     msgs src-spec loc-alist same-number))))
+
+(defun elmo-move-msgs (src-folder msgs dst-folder 
+                                 &optional msgdb all done
+                                 no-delete-info
+                                 no-delete
+                                 same-number
+                                 unread-marks)
+  (save-excursion
+    (let* ((db (or msgdb (elmo-msgdb-load src-folder)))
+          (number-alist (elmo-msgdb-get-number-alist db))
+          (mark-alist   (elmo-msgdb-get-mark-alist db))
+          (messages msgs)
+          (len (length msgs))
+          (all-msg-num (or all len))
+          (done-msg-num (or done 0))
+          (tmp-buf (get-buffer-create " *elmo-move-msg*"))
+          ;elmo-no-cache-flag
+          ret-val real-fld-num done-copy dir
+          mes-string message-id src-cache i percent unseen seen-list)
+      (setq i done-msg-num)
+      (set-buffer tmp-buf)
+      (when (and (not (eq dst-folder 'null))
+                (elmo-folder-direct-copy-p src-folder dst-folder))
+       (message (concat (if no-delete "Copying" "Moving")
+                        " %d message(s)...") (length messages))
+       (unless (elmo-copy-msgs src-folder
+                               messages
+                               dst-folder
+                               db
+                               same-number)
+         (error "Copy message to %s failed" dst-folder))
+       (setq done-copy t))
+      (while messages
+       (setq real-fld-num (elmo-get-real-folder-number src-folder
+                                                       (car messages)))
+       (setq message-id (cdr (assq (car messages) number-alist)))
+       ;; seen-list.
+       (if (and (not (eq dst-folder 'null))
+                (not (and unread-marks
+                          (member
+                           (cadr (assq (car messages) mark-alist))
+                           unread-marks))))
+           (setq seen-list (cons message-id seen-list)))
+       (unless (or (eq dst-folder 'null) done-copy)
+         (if (and (elmo-folder-plugged-p src-folder)
+                  (elmo-folder-plugged-p dst-folder)
+                  (elmo-folder-identical-system-p (car real-fld-num)
+                                                  dst-folder))
+             ;; online and identical system...so copy 'em!
+             (unless
+                 (elmo-copy-msgs (car real-fld-num) 
+                                 (list (cdr real-fld-num))
+                                 dst-folder 
+                                 db
+                                 same-number)
+               (error "Copy message to %s failed" dst-folder))
+           ;; use cache if exists.
+           (elmo-read-msg src-folder (car messages) tmp-buf msgdb)
+           (unless (elmo-append-msg dst-folder (buffer-string) message-id
+                                    (if same-number (car messages))
+                                    ;; null means all unread.
+                                    (or (null unread-marks) 
+                                        unseen))
+             (error "move: append message to %s failed" dst-folder))))
+       ;; delete src cache if it is partial.
+       (elmo-cache-delete-partial message-id src-folder (car messages))
+       (setq ret-val (append ret-val (list (car messages))))
+       (setq i (+ i 1))
+       (setq percent (/ (* i 100) all-msg-num))
+       (if no-delete 
+           (elmo-display-progress
+            'elmo-move-msgs "Copying messages..."
+            percent)
+         (elmo-display-progress
+          'elmo-move-msgs "Moving messages..."
+          percent))
+       (setq messages (cdr messages)))
+      ;; Save seen-list.
+      (unless (eq dst-folder 'null)
+       (setq dir (elmo-msgdb-expand-path dst-folder))
+       (elmo-msgdb-seen-save dir
+                             (append (elmo-msgdb-seen-load dir) seen-list)))
+      (kill-buffer tmp-buf)
+      (if (and (not no-delete) ret-val)
+         (progn
+           (if (not no-delete-info) 
+               (message "Cleaning up src folder..."))
+           (if (and (elmo-delete-msgs src-folder ret-val db)
+                    (elmo-msgdb-delete-msgs src-folder ret-val db t))
+               (setq ret-val t)
+             (message "move: delete messages from %s failed." src-folder)
+             (setq ret-val nil)
+             )
+           (if (and ret-val
+                    (not no-delete-info))
+               (message "Cleaning up src folder...done.")
+             )
+           ret-val)
+       (if no-delete
+           (progn
+             (message "Copying messages...done.")
+             t)
+         (if (eq len 0)
+             (message "No message was moved.")
+           (message "Moving messages failed.")
+           nil ; failure
+           ))))))
+
+;;  boolean elmo-delete-msgs (folder msgs)
+(defun elmo-delete-msgs (folder msgs &optional msgdb)
+  ;; remove from real folder.
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "delete-msgs" msgs)
+    (elmo-dop-delete-msgs folder msgs msgdb)))
+
+;;
+;; Server side search.
+;;
+(defun elmo-search (folder condition &optional from-msgs)
+  (let ((type (elmo-folder-get-type folder)))
+    (if (elmo-folder-plugged-p folder)
+       (elmo-call-func folder "search" condition from-msgs)
+      (elmo-cache-search-all folder condition from-msgs))))
+
+(defun elmo-msgdb-create (folder numlist new-mark already-mark 
+                                seen-mark important-mark seen-list)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "msgdb-create" numlist new-mark already-mark 
+                     seen-mark important-mark seen-list)
+    (elmo-dop-msgdb-create folder numlist new-mark already-mark
+                          seen-mark important-mark seen-list)))
+
+(defun elmo-make-folder-numbers-list (folder msgs)
+  (let ((msg-list msgs)
+       pair fld-list
+       ret-val)
+    (while msg-list
+      (when (> (car msg-list) 0)
+       (setq pair (elmo-get-real-folder-number folder (car msg-list)))
+       (if (setq fld-list (assoc (car pair) ret-val))
+           (setcdr fld-list (cons (cdr pair) (cdr fld-list)))
+         (setq ret-val (cons (cons (car pair) (list (cdr pair))) ret-val))))
+      (setq msg-list (cdr msg-list)))
+    ret-val))
+
+(defun elmo-call-func-on-markable-msgs (folder func-name msgs msgdb)
+  (save-match-data
+    (let ((folder-numbers (elmo-make-folder-numbers-list folder msgs))
+         type)
+      (while folder-numbers
+       (if (or (eq 
+                (setq type (car
+                            (elmo-folder-get-spec 
+                             (car (car folder-numbers)))))
+                'imap4)
+               (memq type '(maildir internal)))
+           (if (elmo-folder-plugged-p folder)
+               (elmo-call-func (car (car folder-numbers)) func-name
+                               (cdr (car folder-numbers)))
+             (if elmo-enable-disconnected-operation
+                 (elmo-dop-call-func-on-msgs 
+                  (car (car folder-numbers)) ; real folder
+                  func-name 
+                  (cdr (car folder-numbers)) ; real number
+                  msgdb)
+               (error "Unplugged"))))
+       (setq folder-numbers (cdr folder-numbers))))))
+
+(defun elmo-unmark-important (folder msgs msgdb)
+  (elmo-call-func-on-markable-msgs folder "unmark-important" msgs msgdb))
+  
+(defun elmo-mark-as-important (folder msgs msgdb)
+  (elmo-call-func-on-markable-msgs folder "mark-as-important" msgs msgdb))
+
+(defun elmo-mark-as-read (folder msgs msgdb)
+  (elmo-call-func-on-markable-msgs folder "mark-as-read" msgs msgdb))
+
+(defun elmo-mark-as-unread (folder msgs msgdb)
+  (elmo-call-func-on-markable-msgs folder "mark-as-unread" msgs msgdb))
+
+(defun elmo-msgdb-create-as-numlist (folder numlist new-mark already-mark 
+                                           seen-mark important-mark seen-list)
+  (if (elmo-folder-plugged-p folder)
+      (elmo-call-func folder "msgdb-create-as-numlist" numlist 
+                     new-mark already-mark seen-mark important-mark seen-list)
+    (elmo-dop-msgdb-create-as-numlist 
+     folder numlist new-mark already-mark
+     seen-mark important-mark seen-list)))
+
+;;   msgdb elmo-msgdb-load        (folder)
+(defun elmo-msgdb-load (folder &optional spec)
+  (message "Loading msgdb for %s..." folder)
+  (let* ((path (elmo-msgdb-expand-path folder spec))
+        (ret-val 
+         (list (elmo-msgdb-overview-load path)
+               (elmo-msgdb-number-load path)
+               (elmo-msgdb-mark-load path)
+               (elmo-msgdb-location-load path))))
+    (message "Loading msgdb for %s...done." folder)
+    (elmo-folder-set-info-max-by-numdb folder (nth 1 ret-val))
+    ret-val))
+
+;;   boolean elmo-msgdb-save (folder msgdb)
+(defun elmo-msgdb-save (folder msgdb)
+  (message "Saving msgdb for %s..." folder)
+  (save-excursion
+    (let ((path (elmo-msgdb-expand-path folder)))
+      (elmo-msgdb-overview-save path (car msgdb))
+      (elmo-msgdb-number-save path (cadr msgdb))
+      (elmo-msgdb-mark-save path (caddr msgdb))
+      (elmo-msgdb-location-save path (cadddr msgdb))
+    ;(elmo-sync-validity folder);; for validity check!!
+      ))
+  (message "Saving msgdb for %s...done." folder)
+  (elmo-folder-set-info-max-by-numdb folder (cadr msgdb)))
+
+(defun elmo-msgdb-add-msgs-to-seen-list-subr (msgs msgdb seen-marks seen-list)
+  "Add to seen list."
+  (let* ((seen-mark-list (string-to-char-list seen-marks))
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (mark-alist   (elmo-msgdb-get-mark-alist msgdb))
+        ent)
+    (while msgs
+      (if (setq ent (assq (car msgs) mark-alist))
+         (if (memq (string-to-char (cadr ent)) seen-mark-list)
+             (setq seen-list
+                   (cons (cdr (assq (car msgs) number-alist)) seen-list)))
+       ;; no mark ... seen...
+       (setq seen-list
+             (cons (cdr (assq (car msgs) number-alist)) seen-list)))
+      (setq msgs (cdr msgs)))
+    seen-list))
+
+(defun elmo-msgdb-add-msgs-to-seen-list (folder msgs msgdb seen-marks)
+  "Add to seen list."
+  (unless (eq folder 'null) ;; black hole
+    (let* ((dir (elmo-msgdb-expand-path folder))
+          (seen-list (elmo-msgdb-seen-load dir)))
+      (setq seen-list
+           (elmo-msgdb-add-msgs-to-seen-list-subr
+            msgs msgdb seen-marks seen-list))
+      (elmo-msgdb-seen-save dir seen-list))))
+
+;;  msgdb elmo-append-msg (folder string)
+(defun elmo-append-msg (folder string &optional message-id msg no-see)
+  (let ((type (elmo-folder-get-type folder))
+       filename)
+    (cond ((eq type 'imap4)
+          (if (elmo-folder-plugged-p folder)
+              (elmo-call-func folder "append-msg" string msg no-see)
+            (elmo-dop-append-msg folder string message-id)))
+         ((eq type 'cache)
+          (if message-id
+              (elmo-cache-append-msg
+               (elmo-folder-get-spec folder)
+               string message-id msg no-see)
+            (error "elmo-cache-append-msg require message-id")))
+         (t
+          (elmo-call-func folder "append-msg" string msg no-see)))))
+
+(defun elmo-check-validity (folder)
+  (elmo-call-func folder "check-validity" 
+                 (expand-file-name
+                  elmo-msgdb-validity-filename
+                  (elmo-msgdb-expand-path folder))))
+
+(defun elmo-pack-number (folder msgdb arg)
+  (if (string-match "^[\\+=].*" folder)
+      (elmo-call-func folder "pack-number" msgdb arg)
+    (error "pack-number not supported")))
+
+(defun elmo-sync-validity (folder)
+  (elmo-call-func folder "sync-validity" 
+                 (expand-file-name
+                  elmo-msgdb-validity-filename
+                  (elmo-msgdb-expand-path folder))))
+
+(defun elmo-use-cache-p (folder number)
+  (elmo-call-func folder "use-cache-p" number)
+  )
+
+(defun elmo-local-file-p (folder number)
+  (elmo-call-func folder "local-file-p" number))
+
+(defun elmo-folder-portinfo (folder)
+  (condition-case nil
+      (elmo-call-func folder "portinfo")
+    (error)))
+
+(defun elmo-folder-plugged-p (folder)
+  (and folder
+       (or (elmo-folder-local-p folder)
+          (elmo-call-func folder "plugged-p"))))
+
+(defun elmo-folder-set-plugged (folder plugged &optional add)
+  (if (elmo-folder-local-p folder)
+      nil      ;; nop
+    (elmo-call-func folder "set-plugged" plugged add)))
+
+(defun elmo-generic-sync-number-alist (spec number-alist)
+  "Just return number-alist."
+  number-alist)
+
+(defun elmo-generic-list-folder-unread (spec mark-alist unread-marks)
+  (elmo-delete-if 
+   'null
+   (mapcar 
+    (function (lambda (x)
+               (if (member (cadr (assq (car x) mark-alist)) unread-marks)
+                   (car x))))
+    mark-alist)))
+
+(defun elmo-generic-list-folder-important (spec overview)
+  nil)
+
+(defun elmo-update-number (folder msgdb)
+  (when (elmo-folder-plugged-p folder)
+    (message "Synchronize number...")
+    (let* ((numlist (elmo-msgdb-get-number-alist msgdb))
+          (len (length numlist))
+          new-numlist)
+      (if (eq (length (setq 
+                      new-numlist
+                      (elmo-call-func folder "sync-number-alist" numlist)))
+             len)
+         nil
+       (elmo-msgdb-set-number-alist msgdb new-numlist)
+       (message "Synchronize number...done.")
+       new-numlist))))
+
+(defun elmo-get-msg-filename (folder number &optional loc-alist)
+  "Available if elmo-local-file-p is t."
+  (elmo-call-func folder "get-msg-filename" number loc-alist))
+
+(defun elmo-strict-folder-diff (fld &optional number-alist) 
+  (interactive)
+  (let* ((dir (elmo-msgdb-expand-path fld))
+        (nalist (or number-alist 
+                    (elmo-msgdb-number-load dir)))
+        (in-db (sort (mapcar 'car nalist) '<))
+        (in-folder  (elmo-list-folder fld))
+        append-list delete-list diff)
+    (cons (if (equal in-folder in-db)
+             0
+           (setq diff (elmo-list-diff
+                       in-folder in-db
+                       nil
+                       ))
+           (setq append-list (car diff))
+           (setq delete-list (cadr diff))
+           (if append-list 
+               (length append-list)
+             (if delete-list
+                 (- 0 (length delete-list))
+               0)))
+         (length in-folder))))
+
+(defun elmo-list-folder-unread (folder mark-alist unread-marks)
+  (elmo-call-func folder "list-folder-unread" mark-alist unread-marks))
+
+(defun elmo-list-folder-important (folder overview)
+  (let (importants)
+    ;; server side importants...(append only.)
+    (if (elmo-folder-plugged-p folder)
+       (setq importants (elmo-call-func folder "list-folder-important"
+                                        overview)))
+    (or elmo-msgdb-global-mark-alist
+       (setq elmo-msgdb-global-mark-alist
+             (elmo-object-load (expand-file-name
+                                elmo-msgdb-global-mark-filename
+                                elmo-msgdb-dir))))
+    (while overview
+      (car overview)
+      (if (assoc (elmo-msgdb-overview-entity-get-id (car overview))
+                elmo-msgdb-global-mark-alist)
+         (setq importants (cons  
+                           (elmo-msgdb-overview-entity-get-number
+                            (car overview))
+                           importants)))
+      (setq overview (cdr overview)))
+    importants))
+
+(defun elmo-generic-commit (folder)
+  nil)
+
+(defun elmo-commit (folder)
+  (elmo-call-func folder "commit"))
+
+;; returns cons cell of (unsync . number-of-messages-in-folder)
+(defun elmo-folder-diff (fld &optional number-alist)
+  (interactive)
+  (let ((type (elmo-folder-get-type fld)))
+    (cond ((eq type 'multi)
+          (elmo-multi-folder-diff fld))
+         ((and (eq type 'filter)
+               (or (elmo-multi-p fld)
+                   (not 
+                    (vectorp (nth 1 (elmo-folder-get-spec fld)))))
+               ;; not partial...unsync number is unknown.
+               (cons nil 
+                     (cdr (elmo-folder-diff 
+                           (nth 2 (elmo-folder-get-spec fld)))))))
+         ((and (eq type 'imap4)
+               elmo-use-server-diff)
+          (elmo-call-func fld "server-diff")) ;; imap4 server side diff.
+         (t 
+          (let ((cached-in-db-max (elmo-folder-get-info-max fld))
+                (in-folder (elmo-max-of-folder fld))
+                (in-db t)
+                unsync nomif
+                in-db-max)
+            (if (or number-alist
+                    (not cached-in-db-max))
+                (let* ((dir (elmo-msgdb-expand-path fld))
+                       (nalist (or number-alist 
+                                   (elmo-msgdb-number-load dir))))
+                  ;; No info-cache.
+                  (setq in-db (sort (mapcar 'car nalist) '<))
+                  (setq in-db-max (or (nth (max 0 (1- (length in-db))) in-db)
+                                      0))
+                  (if (not number-alist)
+                      ;; Number-alist is not used.
+                      (elmo-folder-set-info-hashtb fld in-db-max
+                                                   nil))
+;;                                                (or 
+;;                                                 (and in-db (length in-db)) 
+;;                                                 0)))
+                  )
+              ;; info-cache exists.
+              (setq in-db-max cached-in-db-max))
+            (setq unsync (if (and in-db 
+                                  (car in-folder))
+                             (- (car in-folder) in-db-max)
+                           (if (and in-folder
+                                    (null in-db))
+                               (cdr in-folder)
+                             (if (null (car in-folder))
+                                 nil))))
+            (setq nomif (cdr in-folder))
+            (if (and unsync nomif (> unsync nomif))
+                (setq unsync nomif))
+            (cons (or unsync 0) (or nomif 0)))))))
+    
+(defsubst elmo-folder-get-info (folder &optional hashtb)
+  (elmo-get-hash-val folder
+                    (or hashtb elmo-folder-info-hashtb)))
+
+(defun elmo-folder-set-info-hashtb (folder max numbers &optional new unread)
+  (let ((info (elmo-folder-get-info folder)))
+    (when info
+      (or new     (setq new     (nth 0 info)))
+      (or unread  (setq unread  (nth 1 info)))
+      (or numbers (setq numbers (nth 2 info)))
+      (or max     (setq max     (nth 3 info))))
+    (elmo-set-hash-val folder
+                      (list new unread numbers max)
+                      elmo-folder-info-hashtb)))
+
+(defun elmo-multi-get-number-alist-list (number-alist)
+  (let ((alist (sort number-alist (function (lambda (x y) (< (car x)
+                                                            (car y))))))
+       (cur-number 0)
+       one-alist ret-val num)
+    (while alist
+      (setq cur-number (+ cur-number 1))
+      (setq one-alist nil)
+      (while (and alist
+                 (eq 0
+                     (/ (- (setq num (car (car alist)))
+                           (* elmo-multi-divide-number cur-number))
+                        elmo-multi-divide-number)))
+       (setq one-alist (nconc
+                        one-alist 
+                        (list
+                         (cons
+                          (% num (* elmo-multi-divide-number cur-number))
+                          (cdr (car alist))))))
+       (setq alist (cdr alist)))
+      (setq ret-val (nconc ret-val (list one-alist))))
+    ret-val))
+
+(defun elmo-multi-folder-diff (fld)
+  (let ((flds (cdr (elmo-folder-get-spec fld)))
+       (num-alist-list
+        (elmo-multi-get-number-alist-list 
+         (elmo-msgdb-number-load (elmo-msgdb-expand-path fld))))
+       (count 0)
+       diffs (unsync 0) (nomif 0))
+    (while flds
+      (setq diffs (nconc diffs (list (elmo-folder-diff (car flds) 
+                                                      (nth count 
+                                                           num-alist-list)
+                                                      ))))
+      (setq count (+ 1 count))
+      (setq flds (cdr flds)))
+    (while diffs
+      (setq unsync (+ unsync (car (car diffs))))
+      (setq nomif  (+ nomif (cdr (car diffs))))
+      (setq diffs (cdr diffs)))
+    (elmo-folder-set-info-hashtb fld nil nomif)
+    (cons unsync nomif)))
+
+(defun elmo-folder-set-info-max-by-numdb (folder msgdb-number)
+  (let ((num-db (sort (mapcar 'car msgdb-number) '<)))
+    (elmo-folder-set-info-hashtb
+     folder
+     (or (nth (max 0 (1- (length num-db))) num-db) 0)
+     nil ;;(length num-db)
+     )))
+
+(defun elmo-folder-get-info-max (folder)
+  "Get folder info from cache."
+  (nth 3 (elmo-folder-get-info folder)))
+
+(defun elmo-folder-get-info-length (folder)
+  (nth 2 (elmo-folder-get-info folder)))
+
+(defun elmo-folder-get-info-unread (folder)
+  (nth 1 (elmo-folder-get-info folder)))
+
+(defun elmo-folder-info-make-hashtb (info-alist hashtb)
+  (let* ((hashtb (or hashtb
+                    (elmo-make-hash (length info-alist)))))
+    (mapcar
+     '(lambda (x)
+       (let ((info (cadr x)))
+         (and (intern-soft (car x) hashtb)
+              (elmo-set-hash-val (car x)
+                                 (list (nth 2 info)   ;; new
+                                       (nth 3 info)   ;; unread
+                                       (nth 1 info)   ;; length
+                                       (nth 0 info))  ;; max
+                                 hashtb))))
+     info-alist)
+    (setq elmo-folder-info-hashtb hashtb)))
+
+(defun elmo-crosspost-message-set (message-id folders &optional type)
+  (if (assoc message-id elmo-crosspost-message-alist)
+      (setcdr (assoc message-id elmo-crosspost-message-alist)
+             (list folders type))
+    (setq elmo-crosspost-message-alist
+         (nconc elmo-crosspost-message-alist
+                (list (list message-id folders type))))))
+
+(defun elmo-crosspost-message-delete (message-id folders)
+  (let* ((id-fld (assoc message-id elmo-crosspost-message-alist))
+        (folder-list (nth 1 id-fld)))
+    (when id-fld
+      (if (setq folder-list (elmo-delete-lists folders folder-list))
+         (setcar (cdr id-fld) folder-list)
+       (setq elmo-crosspost-message-alist
+             (delete id-fld elmo-crosspost-message-alist))))))
+
+
+(defun elmo-get-msgs-with-mark (mark-alist mark)
+  (let (ret-val)
+    (while mark-alist
+      (if (string= (cadr (car mark-alist)) mark)
+         (cons (car (car mark-alist)) ret-val))
+      (setq mark-alist (cdr mark-alist)))
+    (nreverse ret-val)))
+
+(defun elmo-buffer-cache-message (fld msg &optional msgdb force-reload)
+  (let* ((msg-id (cdr (assq msg (elmo-msgdb-get-number-alist msgdb))))
+        (hit (elmo-buffer-cache-hit (list fld msg msg-id)))
+        (read nil))
+    (if hit
+       (elmo-buffer-cache-sort
+        (elmo-buffer-cache-entry-make (list fld msg msg-id) hit))
+      (setq hit (elmo-buffer-cache-add (list fld msg msg-id)))
+      (setq read t))
+    (if (or force-reload read)
+       (condition-case err
+           (save-excursion
+             (set-buffer hit)
+             (elmo-read-msg fld msg
+                            (current-buffer)
+                            msgdb force-reload))
+         (quit
+          (elmo-buffer-cache-delete)
+          (error "read message %s/%s is quitted" fld msg))
+         (error
+          (elmo-buffer-cache-delete)
+          (signal (car err) (cdr err))
+          nil))) ;; will not be used
+    hit)) ;; retrun value
+
+(defun elmo-read-msg-with-buffer-cache (fld msg outbuf msgdb &optional force-reload)
+  (if elmo-use-buffer-cache
+      (let (hit start end)
+       (when (setq hit (elmo-buffer-cache-message
+                        (elmo-string fld) msg
+                        msgdb force-reload))
+         (erase-buffer)
+         (save-excursion
+           (set-buffer hit)
+           (setq start (point-min) end (point-max)))
+         (insert-buffer-substring hit start end)))
+    (elmo-read-msg fld msg outbuf msgdb force-reload)))
+
+(defun elmo-folder-pipe-p (folder)
+  (let ((type (elmo-folder-get-type folder)))
+    (cond
+     ((eq type 'multi)
+      (let ((flds (cdr (elmo-folder-get-spec folder))))
+       (catch 'done
+         (while flds
+           (if (elmo-folder-pipe-p (car flds))
+               (throw 'done t)))
+         nil)))
+     ((eq type 'pipe)
+      t)
+     ((eq type 'filter)
+      (elmo-folder-pipe-p
+       (nth 2 (elmo-folder-get-spec folder))))
+     (t
+      nil
+      ))))
+
+(defun elmo-multi-p (folder)
+  (let ((type (elmo-folder-get-type folder)))
+    (cond
+     ((eq type 'multi)
+      t)
+     ((eq type 'pipe)
+      (elmo-multi-p
+       (elmo-pipe-spec-dst (elmo-folder-get-spec folder))))
+     ((eq type 'filter)
+      (elmo-multi-p
+       (nth 2 (elmo-folder-get-spec folder))))
+     (t
+      nil
+      ))))
+
+(defun elmo-get-real-folder-number (folder number)
+  (let ((type (elmo-folder-get-type folder)))
+    (cond
+     ((eq type 'multi)
+      (elmo-multi-get-real-folder-number folder number))
+     ((eq type 'pipe)
+      (elmo-get-real-folder-number 
+       (elmo-pipe-spec-dst (elmo-folder-get-spec folder) )
+       number))
+     ((eq type 'filter)
+      (elmo-get-real-folder-number
+       (nth 2 (elmo-folder-get-spec folder)) number))
+     (t
+      (cons folder number)
+      ))))
+
+(defun elmo-folder-get-primitive-spec-list (folder &optional spec-list)
+  (let ((type (elmo-folder-get-type folder))
+       specs)
+    (cond
+     ((or (eq type 'multi)
+         (eq type 'pipe))
+      (let ((flds (cdr (elmo-folder-get-spec folder)))
+           spec)
+       (while flds
+         (setq spec (elmo-folder-get-primitive-spec-list (car flds)))
+         (if (not (memq (car spec) specs))
+             (setq specs (append specs spec)))
+         (setq flds (cdr flds)))))
+     ((eq type 'filter)
+      (setq specs
+           (elmo-folder-get-primitive-spec-list
+            (nth 2 (elmo-folder-get-spec folder)))))
+     (t
+      (setq specs (list (elmo-folder-get-spec folder)))
+      ))
+    specs))
+
+(defun elmo-folder-get-primitive-folder-list (folder)
+  (let* ((type (elmo-folder-get-type folder)))
+    (cond
+     ((or (eq type 'multi)
+         (eq type 'pipe))
+      (let ((flds (cdr (elmo-folder-get-spec folder)))
+           ret-val)
+       (while flds
+         (setq ret-val (append ret-val
+                               (elmo-folder-get-primitive-folder-list
+                                (car flds))))
+         (setq flds (cdr flds)))
+       ret-val))
+     ((eq type 'filter)
+      (elmo-folder-get-primitive-folder-list
+       (nth 2 (elmo-folder-get-spec folder))))
+     (t
+      (list folder)
+      ))))
+
+(defun elmo-folder-contains-multi (folder)
+  (let ((cur-spec (elmo-folder-get-spec folder)))
+    (catch 'done
+      (while cur-spec
+       (cond 
+        ((eq (car cur-spec) 'filter)
+         (setq cur-spec (elmo-folder-get-spec (nth 2 cur-spec))))
+        ((eq (car cur-spec) 'pipe)
+         (setq cur-spec (elmo-folder-get-spec (elmo-pipe-spec-src cur-spec))))
+        ((eq (car cur-spec) 'multi)
+         (throw 'done nil))
+        (t (setq cur-spec nil)))))
+    cur-spec))
+
+(defun elmo-folder-contains-type (folder type)
+  (let ((spec (elmo-folder-get-spec folder)))
+    (cond 
+     ((eq (car spec) 'filter)
+      (elmo-folder-contains-type (nth 2 spec) type))
+     ((eq (car spec) 'pipe)
+      (elmo-folder-contains-type (elmo-pipe-spec-dst spec) type))
+     ((eq (car spec) 'multi)
+      (let ((folders (cdr spec)))
+       (catch 'done
+         (while folders
+           (if (elmo-folder-contains-type (car folders) type)
+               (throw 'done t))
+           (setq folders (cdr folders))))))
+     ((eq (car spec) type)
+      t)
+     (t nil))))
+
+(defun elmo-folder-number-get-spec (folder number)
+  (let ((type (elmo-folder-get-type folder)))
+    (cond
+     ((eq type 'multi)
+      (elmo-multi-folder-number-get-spec folder number))
+     ((eq type 'pipe)
+      (elmo-folder-number-get-spec
+       (elmo-pipe-spec-dst (elmo-folder-get-spec folder)) number))
+     ((eq type 'filter)
+      (elmo-folder-number-get-spec
+       (nth 2 (elmo-folder-get-spec folder)) number))
+     (t
+      (elmo-folder-get-spec folder)
+      ))))
+
+(defun elmo-folder-number-get-type (folder number)
+  (car (elmo-folder-number-get-spec folder number)))
+
+(defun elmo-multi-folder-number-get-spec (folder number)
+  (let* ((spec (elmo-folder-get-spec folder))
+        (flds (cdr spec))
+        (fld (nth (- (/ number elmo-multi-divide-number) 1) flds)))
+    (elmo-folder-number-get-spec fld number)))
+
+;; autoloads
+(autoload 'elmo-imap4-get-connection "elmo-imap4")
+(autoload 'elmo-nntp-make-groups-hashtb "elmo-nntp")
+(autoload 'elmo-nntp-post "elmo-nntp")
+(autoload 'elmo-localdir-max-of-folder "elmo-localdir")
+(autoload 'elmo-localdir-msgdb-create-overview-entity-from-file "elmo-localdir")
+(autoload 'elmo-multi-folder-diff "elmo-multi")
+(autoload 'elmo-archive-copy-msgs-froms "elmo-archive")
+
+;;; elmo2.el ends here
diff --git a/elmo/mmelmo-1.el b/elmo/mmelmo-1.el
new file mode 100644 (file)
index 0000000..9109817
--- /dev/null
@@ -0,0 +1,110 @@
+;;; mmelmo-1.el -- mm-backend (for FLIM 1.12.x) by ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/06 18:35:49 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'mime)
+(require 'mime-parse)
+(eval-when-compile
+  (require 'std11))
+
+(require 'mmelmo)
+
+(defvar mmelmo-force-reload nil)
+(defvar mmelmo-sort-field-list nil)
+
+;;; mmelmo: Only the initialization method is different from mmbuffer.
+(mm-define-backend elmo (buffer))
+
+(mm-define-method initialize-instance ((entity elmo))
+  (mime-entity-set-buffer-internal 
+   entity
+   (get-buffer-create (concat mmelmo-entity-buffer-name "0")))
+    (save-excursion
+      (set-buffer (mime-entity-buffer-internal entity))
+      (mmelmo-original-mode)
+      (let ((buffer-read-only nil)
+           (location (mime-entity-location-internal entity))
+           header-start header-end body-start body-end)
+       (erase-buffer)
+       (setq mime-message-structure entity)
+       (elmo-read-msg-with-buffer-cache (nth 0 location)
+                                        (nth 1 location)
+                                        (current-buffer)
+                                        (nth 2 location)
+                                        mmelmo-force-reload)
+       (setq header-start (point-min))
+       (setq body-end (point-max))
+       (goto-char header-start)
+       (if (re-search-forward 
+            (concat "^" (regexp-quote mail-header-separator) "$\\|^$" )
+            nil t)
+           (setq header-end (match-beginning 0)
+                 body-start (if (= header-end body-end)
+                                body-end
+                              (1+ (match-end 0))))
+         (setq header-end (point-min)
+               body-start (point-min)))
+       (save-restriction
+         (narrow-to-region header-start header-end)
+         (mime-entity-set-content-type-internal
+          entity
+          (let ((str (std11-fetch-field "Content-Type")))
+            (if str
+                (mime-parse-Content-Type str)
+              )))
+         )
+       (mime-entity-set-header-start-internal entity header-start)
+       (mime-entity-set-header-end-internal entity header-end)
+       (mime-entity-set-body-start-internal entity body-start)
+       (mime-entity-set-body-end-internal entity body-end)
+       )))
+
+(mm-define-method insert-header ((entity elmo)
+                                &optional invisible-fields visible-fields)
+  (mmelmo-insert-sorted-header-from-buffer
+   (mime-entity-buffer entity)
+   (mime-entity-header-start-internal entity)
+   (mime-entity-header-end-internal entity)
+   invisible-fields visible-fields))
+
+(mm-define-method insert-text-content ((entity elmo))
+  (insert
+   (decode-mime-charset-string (mime-entity-content entity)
+                               (or (mime-content-type-parameter
+                                    (mime-entity-content-type entity)
+                                    "charset")
+                                   default-mime-charset)
+                               'CRLF))
+  (run-hooks 'mmelmo-entity-content-inserted-hook))
+
+(provide 'mmelmo-1)
+
+;;; mmelmo-1.el ends here
diff --git a/elmo/mmelmo-2.el b/elmo/mmelmo-2.el
new file mode 100644 (file)
index 0000000..c97f3b7
--- /dev/null
@@ -0,0 +1,142 @@
+;;; mmelmo-2.el -- mm-backend (for FLIM 1.13.x) by ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-21 17:39:07 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'mmelmo-imap4)
+(require 'mmelmo)
+(require 'mmbuffer)
+
+(defvar mmelmo-force-reload nil)
+(defvar mmelmo-sort-field-list nil)
+
+(eval-and-compile
+  (luna-define-class mime-elmo-entity (mime-buffer-entity)
+                    (imap folder number msgdb size))
+  (luna-define-internal-accessors 'mime-elmo-entity))
+
+(luna-define-method initialize-instance :after ((entity mime-elmo-entity)
+                                               &rest init-args)
+  "The initialization method for elmo.
+mime-elmo-entity has its own member variable,
+`imap', `folder', `msgdb' and `size'.
+imap:   boolean. if non-nil, entity becomes mime-elmo-imap4-entity class.
+folder: string.  folder name.
+msgdb:  msgdb of elmo.
+size:   size of the entity."
+  (if (mime-elmo-entity-imap-internal entity)
+      ;; use imap part fetching.
+      ;; child mime-entity's class becomes `mime-elmo-imap4-entity'
+      ;; which implements `entity-buffer' method.
+      (progn
+       (let (new-entity)
+         (mime-buffer-entity-set-buffer-internal entity nil)
+         (setq new-entity
+               (mmelmo-imap4-get-mime-entity
+                (mime-elmo-entity-folder-internal entity) ; folder
+                (mime-elmo-entity-number-internal entity) ; number
+                (mime-elmo-entity-msgdb-internal entity)  ; msgdb
+                ))
+         (mime-entity-set-content-type-internal
+          entity
+          (mime-entity-content-type-internal new-entity))
+         (mime-entity-set-encoding-internal
+          entity
+          (mime-entity-encoding-internal new-entity))
+         (mime-entity-set-children-internal
+          entity
+          (mime-entity-children-internal new-entity))
+         (mime-elmo-entity-set-size-internal
+          entity
+          (mime-elmo-entity-size-internal new-entity))
+         (mime-entity-set-representation-type-internal
+          entity 'mime-elmo-imap4-entity)
+         entity))
+    (set-buffer (mime-buffer-entity-buffer-internal entity))
+    (mmelmo-original-mode)
+    (when (mime-root-entity-p entity)
+      (let ((buffer-read-only nil)
+           header-end body-start)
+       (erase-buffer)
+       (elmo-read-msg-with-buffer-cache
+        (mime-elmo-entity-folder-internal entity)
+        (mime-elmo-entity-number-internal entity)
+        (current-buffer)
+        (mime-elmo-entity-msgdb-internal entity)
+        mmelmo-force-reload)
+       (goto-char (point-min))
+       (if (re-search-forward
+            (concat "^" (regexp-quote mail-header-separator) "$\\|^$" )
+            nil t)
+           (setq header-end (match-beginning 0)
+                 body-start (if (= (match-end 0) (point-max))
+                                (point-max)
+                              (1+ (match-end 0))))
+         (setq header-end (point-min)
+               body-start (point-min)))
+       (mime-buffer-entity-set-header-start-internal entity (point-min))
+       (mime-buffer-entity-set-header-end-internal entity header-end)
+       (mime-buffer-entity-set-body-start-internal entity body-start)
+       (mime-buffer-entity-set-body-end-internal entity (point-max))
+       (save-restriction
+         (narrow-to-region (mime-buffer-entity-header-start-internal entity)
+                           (mime-buffer-entity-header-end-internal entity))
+         (mime-entity-set-content-type-internal
+          entity
+          (let ((str (std11-fetch-field "Content-Type")))
+            (if str
+                (mime-parse-Content-Type str)
+              ))))))
+    entity))
+
+(luna-define-method mime-insert-header ((entity mime-elmo-entity)
+                                       &optional invisible-fields
+                                       visible-fields)
+  (mmelmo-insert-sorted-header-from-buffer
+   (mime-entity-buffer entity)
+   (mime-buffer-entity-header-start-internal entity)
+   (mime-buffer-entity-header-end-internal entity)
+   invisible-fields visible-fields mmelmo-sort-field-list))
+
+(luna-define-method mime-insert-text-content :around ((entity
+                                                      mime-elmo-entity))
+  (luna-call-next-method)
+  (run-hooks 'mmelmo-entity-content-inserted-hook))
+
+;(luna-define-method mime-entity-content ((entity mime-elmo-entity))
+;  (mime-decode-string
+;   (with-current-buffer (mime-buffer-entity-buffer-internal entity)
+;     (buffer-substring (mime-buffer-entity-body-start-internal entity)
+;                     (mime-buffer-entity-body-end-internal entity)))
+;   (mime-entity-encoding entity)))
+
+(provide 'mmelmo-2)
+
+;;; mmelmo-2.el ends here
diff --git a/elmo/mmelmo-imap4-1.el b/elmo/mmelmo-imap4-1.el
new file mode 100644 (file)
index 0000000..1114063
--- /dev/null
@@ -0,0 +1,350 @@
+;;; mmelmo-imap4-1.el -- MM backend of IMAP4 for ELMO (for FLIM 1.12.x).
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:43:18 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'mmelmo)
+
+(defvar mmelmo-imap4-threshold nil)
+(defvar mmelmo-imap4-skipped-parts nil)
+(defvar mmelmo-imap4-current-message-structure nil)
+
+(defun mmelmo-imap4-node-id-to-string (node-id)
+  (let ((i (length node-id))
+       result)
+    (while (> i 0)
+      (setq result 
+           (concat result 
+                   (if result 
+                       (concat "." (int-to-string 
+                                    (+ 1 (nth (- i 1) node-id))))
+                     (int-to-string (or 
+                                     (+ 1 (nth (- i 1) node-id))
+                                     0)))))
+      (setq i (- i 1)))
+    (or result "0")))
+
+;; parse IMAP4 body structure entity recursively.
+(defun mmelmo-imap4-parse-bodystructure-entity (location node-id entity parent)
+  (cond
+   ((listp (car entity));; multipart
+    (let (cur-entity
+         children
+         content-type ret-val
+         (num 0))
+      (setq ret-val
+           (make-mime-entity-internal 'elmo-imap4
+                                      location
+                                      nil      ; content-type
+                                      nil            ; children
+                                      parent         ; parent
+                                      node-id  ; node-id
+                                      ))
+      (while (and (setq cur-entity (car entity))
+                 (listp cur-entity))
+       (setq children
+             (append children
+                     (list
+                      (mmelmo-imap4-parse-bodystructure-entity
+                       (list (nth 0 location)
+                             (nth 1 location)
+                             (nth 2 location)
+                             (append (list num) node-id))
+                       (append (list num) node-id)
+                       cur-entity
+                       ret-val ; myself as parent
+                       ))))
+       (setq num (+ num 1))
+       (setq entity (cdr entity))
+       )
+      (mime-entity-set-children-internal ret-val children)
+      (setq content-type (list (cons 'type 'multipart)))
+      (setq content-type (append content-type 
+                                (list (cons 'subtype 
+                                            (intern 
+                                             (downcase (car entity)))))))
+      (setq content-type (append content-type 
+                                (mime-parse-parameters-from-list
+                                 (elmo-imap4-nth 1 entity))))
+      (mime-entity-set-content-type-internal ret-val content-type)
+      ret-val))
+   (t ;; singlepart
+    (let (content-type result)
+      ;; append size information into location 
+      (setq location (append location (list (nth 6 entity))))
+      (setq content-type (list (cons 'type (intern (downcase (car entity))))))
+      (if (elmo-imap4-nth 1 entity)
+         (setq content-type (append content-type
+                                    (list 
+                                     (cons 'subtype 
+                                           (intern 
+                                            (downcase
+                                             (elmo-imap4-nth 1 entity))))))))
+      (if (elmo-imap4-nth 2 entity)
+         (setq content-type (append content-type 
+                                    (mime-parse-parameters-from-list
+                                     (elmo-imap4-nth 2 entity)))))
+      (setq result (make-mime-entity-internal 'elmo-imap4
+                                             location
+                                             content-type      ; content-type
+                                             nil     ; children
+                                             parent  ; parent 
+                                             node-id ; node-id
+                                             ))
+      (mime-entity-set-encoding-internal result 
+                                        (and (elmo-imap4-nth 5 entity)
+                                             (downcase 
+                                              (elmo-imap4-nth 5 entity))))
+      result))))
+
+(defun mmelmo-imap4-parse-bodystructure-string (location string)
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *ELMO bodystructure TMP*"))
+         (raw-buffer (current-buffer))
+         str
+         entity)
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (insert string)
+      (goto-char (point-min))
+      (when (search-forward "FETCH" nil t)
+       (narrow-to-region (match-end 0) (point-max))
+       (while (re-search-forward "{\\([0-9]+\\)}\r\n" nil t)
+         (goto-char (+ (point) 
+                       (string-to-int (elmo-match-buffer 1))))
+         (setq str (buffer-substring (match-end 0) (point)))
+         (delete-region (match-beginning 0) (point))
+         (insert (prin1-to-string str))); (insert "\""))
+       (setq entity 
+             (nth 1 (memq 'BODYSTRUCTURE 
+                          (read (buffer-string)))))
+       (set-buffer raw-buffer)
+       (mmelmo-imap4-parse-bodystructure-entity location nil entity nil)
+       ))))
+
+(defun mmelmo-imap4-multipart-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'multipart)
+  )
+
+(defun mmelmo-imap4-rfc822part-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'rfc822)
+  )
+
+(defun mmelmo-imap4-textpart-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'text)
+  )
+      
+(defun mmelmo-imap4-get-mime-entity (location)
+  (save-excursion
+    (let* ((spec (elmo-folder-get-spec (nth 0 location)))
+          (msg (nth 1 location))
+          (connection (elmo-imap4-get-connection spec))
+          (process (elmo-imap4-connection-get-process connection))
+          (read-it t)
+          response errmsg ret-val bytes)
+      (when (elmo-imap4-spec-folder spec)
+       (save-excursion
+         (when (not (string= (elmo-imap4-connection-get-cwf connection)
+                             (elmo-imap4-spec-folder spec)))
+           (if (null (setq response 
+                           (elmo-imap4-select-folder 
+                            (elmo-imap4-spec-folder spec) connection)))
+               (error "Select folder failed")))
+         (elmo-imap4-send-command (process-buffer process)
+                                  process
+                                  (format "uid fetch %s bodystructure" 
+                                          msg))
+         (if (null (setq response (elmo-imap4-read-contents
+                                   (process-buffer process) process)))
+             (error "Fetching body structure failed")))
+       (mmelmo-imap4-parse-bodystructure-string location 
+                                                response); make mime-entity
+       ))))
+
+(defun mmelmo-imap4-read-part (entity location)
+  (if (or (not mmelmo-imap4-threshold)
+         (not (nth 4 location))
+         (and (nth 4 location)
+              mmelmo-imap4-threshold   
+              (<= (nth 4 location) mmelmo-imap4-threshold)))
+      (cond ((mmelmo-imap4-multipart-p entity)) ; noop
+           (t
+            (insert (elmo-imap4-read-part 
+                     (nth 0 location)
+                     (nth 1 location)
+                     (mmelmo-imap4-node-id-to-string 
+                      (nth 3 location))))
+            (mime-entity-set-body-start-internal entity (point-min))
+            (mime-entity-set-body-end-internal entity (point-max))))
+    (setq mmelmo-imap4-skipped-parts 
+         (append
+          mmelmo-imap4-skipped-parts
+          (list (mmelmo-imap4-node-id-to-string 
+                 (nth 3 location)))))))
+
+(defun mmelmo-imap4-read-body (entity)
+  (let ((location (mime-entity-location-internal entity)))
+    (mime-entity-set-body-start-internal entity (- (point) 1))
+    (if (or (not mmelmo-imap4-threshold)
+           (not (nth 4 location))
+           (and (nth 4 location)
+                mmelmo-imap4-threshold 
+                (<= (nth 4 location) mmelmo-imap4-threshold)))
+       (insert (elmo-imap4-read-part (nth 0 location)
+                                     (nth 1 location)
+                                     "1"
+                                     ))
+      (setq mmelmo-imap4-skipped-parts 
+           (append
+            mmelmo-imap4-skipped-parts
+            (list 
+             (mmelmo-imap4-node-id-to-string 
+              (nth 3 location))))))))
+
+;;; mm-backend definitions for elmo-imap4
+(mm-define-backend elmo-imap4 (elmo))
+
+(mm-define-method initialize-instance ((entity elmo-imap4))
+  (let ((new-entity (mmelmo-imap4-get-mime-entity 
+                    (mime-entity-location-internal entity))))
+    ;; ...
+    (aset entity 1
+         (mime-entity-location-internal new-entity))
+    (mime-entity-set-content-type-internal 
+     entity
+     (mime-entity-content-type-internal new-entity))
+    (mime-entity-set-encoding-internal 
+     entity
+     (mime-entity-encoding-internal new-entity))
+    (mime-entity-set-children-internal
+     entity
+     (mime-entity-children-internal new-entity))
+    (mime-entity-set-body-start-internal
+     entity
+     (mime-entity-body-start-internal new-entity))
+    (mime-entity-set-body-end-internal
+     entity
+     (mime-entity-body-end-internal new-entity))))
+
+(mm-define-method entity-buffer ((entity elmo-imap4))
+  (let ((buffer (get-buffer-create 
+                (concat mmelmo-entity-buffer-name
+                        (mmelmo-imap4-node-id-to-string 
+                         (mime-entity-node-id-internal entity)))))
+       (location (mime-entity-location-internal entity)))
+    (set-buffer buffer)
+    (mmelmo-original-mode)
+    (mime-entity-set-buffer-internal entity buffer)  ; set buffer.
+    (let ((buffer-read-only nil))
+      (erase-buffer)
+      (if (nth 3 location)   ; not top
+         (progn
+           (setq mime-message-structure mmelmo-imap4-current-message-structure)
+           (mmelmo-imap4-read-part entity location))
+       ;; TOP
+       (setq mmelmo-imap4-current-message-structure entity)
+       (setq mime-message-structure entity)
+       (setq mmelmo-imap4-skipped-parts nil)
+       ;;      (setq mmelmo-fetched-entire-message nil)
+       ;; header
+       (insert (elmo-imap4-read-part (nth 0 location)
+                                     (nth 1 location)
+                                     "header"
+                                     ))
+       (mime-entity-set-header-start-internal entity (point-min))
+       (mime-entity-set-header-end-internal entity (- (point) 1))
+       (if (not (mime-entity-children-internal entity)) ; body part!
+           (progn
+             (mmelmo-imap4-read-body entity)
+             (mime-entity-set-body-end-internal entity (point))
+             ))))
+    buffer))
+
+(mm-define-method entity-point-min ((entity elmo-imap4))
+  (let ((buffer (mime-entity-buffer-internal entity)))
+    (set-buffer buffer)
+    (point-min)))
+
+(mm-define-method entity-point-max ((entity elmo-imap4))
+  (let ((buffer (mime-entity-buffer-internal entity)))
+    (set-buffer buffer)
+    (point-max)))
+
+(mm-define-method entity-children ((entity elmo-imap4))
+  (let* ((content-type (mime-entity-content-type entity))
+         (primary-type (mime-content-type-primary-type content-type)))
+    (cond ((eq primary-type 'multipart)
+           (mime-parse-multipart entity)
+           )
+          ((and (eq primary-type 'message)
+                (memq (mime-content-type-subtype content-type)
+                      '(rfc822 news external-body)
+                      ))
+          (save-excursion
+            (set-buffer (mime-entity-buffer-internal entity))
+            (mime-entity-set-body-start-internal entity (point-min))
+            (mime-entity-set-body-end-internal entity (point-max)))
+           (mime-parse-encapsulated entity)
+           ))
+    ))
+
+(mm-define-method entity-body-start ((entity elmo-imap4))
+  (point-min))
+
+(mm-define-method entity-body-end ((entity elmo-imap4))
+  (point-max))
+
+;; override generic function for dynamic body fetching.
+(mm-define-method entity-content ((entity elmo-imap4))
+  (save-excursion
+    (set-buffer (mime-entity-buffer entity))
+    (mime-decode-string
+     (buffer-substring (mime-entity-body-start entity)
+                      (mime-entity-body-end entity))
+     (mime-entity-encoding entity))))
+
+(mm-define-method fetch-field ((entity elmo-imap4) field-name)
+  (save-excursion
+    (let ((buf (mime-entity-buffer-internal entity)))
+      (when buf 
+       (set-buffer buf)
+       (save-restriction
+         (if (and (mime-entity-header-start-internal entity)
+                  (mime-entity-header-end-internal entity))
+             (progn
+               (narrow-to-region 
+                (mime-entity-header-start-internal entity)
+                (mime-entity-header-end-internal entity))
+               (std11-fetch-field field-name))
+           nil))))))
+
+(provide 'mmelmo-imap4-1)
+
+;;; mmelmo-imap4-1.el ends here
diff --git a/elmo/mmelmo-imap4-2.el b/elmo/mmelmo-imap4-2.el
new file mode 100644 (file)
index 0000000..2b4f15c
--- /dev/null
@@ -0,0 +1,394 @@
+;;; mmelmo-imap4-1.el -- MM backend of IMAP4 for ELMO (for FLIM 1.13.x).
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:43:27 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+(require 'mmbuffer)
+(require 'mmelmo)
+(defvar mmelmo-imap4-threshold nil)
+(defvar mmelmo-imap4-skipped-parts nil)
+(defvar mmelmo-imap4-current-message-structure nil)
+
+;; Buffer local variable.
+(defvar mmelmo-imap4-fetched nil)
+(make-variable-buffer-local 'mmelmo-imap4-fetched)
+
+(defun mmelmo-imap4-node-id-to-string (node-id)
+  (let ((i (length node-id))
+       result)
+    (while (> i 0)
+      (setq result 
+           (concat result 
+                   (if result 
+                       (concat "." (int-to-string 
+                                    (+ 1 (nth (- i 1) node-id))))
+                     (int-to-string (or 
+                                     (+ 1 (nth (- i 1) node-id))
+                                     0)))))
+      (setq i (- i 1)))
+    (or result "0")))
+
+;; parse IMAP4 body structure entity recursively.
+(defun mmelmo-imap4-parse-bodystructure-object (folder 
+                                               number msgdb
+                                               node-id object parent)
+  (cond
+   ((listp (car object));; multipart
+    (let (cur-obj children content-type ret-val (num 0))
+      (setq ret-val
+           (luna-make-entity
+            (mm-expand-class-name 'elmo-imap4)
+            :folder   folder
+            :number   number
+            :msgdb    msgdb
+            :parent   parent
+            :node-id  node-id))
+      (while (and (setq cur-obj (car object))
+                 (listp cur-obj))
+       (setq children
+             (append children
+                     (list
+                      (mmelmo-imap4-parse-bodystructure-object
+                       folder number msgdb
+                       (append (list num) node-id)
+                       cur-obj
+                       ret-val ; myself as parent
+                       ))))
+       (setq num (+ num 1))
+       (setq object (cdr object)))
+      (mime-entity-set-children-internal ret-val children)
+      (setq content-type (list (cons 'type 'multipart)))
+      (if (elmo-imap4-nth 0 object)
+         (setq content-type (append content-type 
+                                    (list (cons 'subtype 
+                                                (intern 
+                                                 (downcase
+                                                  (elmo-imap4-nth
+                                                   0
+                                                   object))))))))
+      (setq content-type (append content-type 
+                                (mime-parse-parameters-from-list
+                                 (elmo-imap4-nth 1 object))))
+      (mime-entity-set-content-type-internal ret-val content-type)
+      ret-val))
+   (t ;; singlepart
+    (let (content-type ret-val)
+      ;; append size information into location
+      (setq content-type (list (cons 'type (intern (downcase (car object))))))
+      (if (elmo-imap4-nth 1 object)
+         (setq content-type (append content-type
+                                    (list 
+                                     (cons 'subtype 
+                                           (intern 
+                                            (downcase
+                                             (elmo-imap4-nth 1 object))))))))
+      (if (elmo-imap4-nth 2 object)
+         (setq content-type (append content-type 
+                                    (mime-parse-parameters-from-list
+                                     (elmo-imap4-nth 2 object)))))
+      (setq ret-val 
+           (luna-make-entity
+            (mm-expand-class-name 'elmo-imap4)
+            :folder folder
+            :number number
+            :size (nth 6 object)
+            :content-type content-type
+            :parent parent
+            :node-id node-id))
+      (mime-entity-set-encoding-internal ret-val
+                                        (and (elmo-imap4-nth 5 object)
+                                             (downcase 
+                                              (elmo-imap4-nth 5 object))))
+      ret-val))))
+
+(defun mmelmo-imap4-parse-bodystructure-string (folder number msgdb string)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-min))
+    (when (search-forward "FETCH" nil t)
+      (narrow-to-region (match-end 0) (point-max))
+      (while (re-search-forward "{\\([0-9]+\\)}\r\n" nil t)
+       (let (str)
+         (goto-char (+ (point) 
+                       (string-to-int (elmo-match-buffer 1))))
+         (setq str (buffer-substring (match-end 0) (point)))
+         (delete-region (match-beginning 0) (point))
+         (insert (prin1-to-string str))))
+      (goto-char (point-min))
+      (mmelmo-imap4-parse-bodystructure-object 
+       folder ; folder
+       number ; number
+       msgdb  ; msgdb
+       nil    ; node-id
+       (nth 1 (memq 'BODYSTRUCTURE (read (current-buffer)))) ; bodystructure-object
+       nil    ; parent
+       ))))
+
+(defun mmelmo-imap4-multipart-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'multipart))
+
+(defun mmelmo-imap4-rfc822part-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'rfc822))
+
+(defun mmelmo-imap4-textpart-p (entity)
+  (eq (cdr (assq 'type (mime-entity-content-type entity))) 'text))
+      
+(defun mmelmo-imap4-get-mime-entity (fld number msgdb)
+  (save-excursion
+    (let* ((spec (elmo-folder-get-spec fld))
+          (connection (elmo-imap4-get-connection spec))
+          (folder (elmo-imap4-spec-folder spec))
+          response)
+      (when folder
+       (save-excursion
+         (when (not (string= (elmo-imap4-connection-get-cwf connection)
+                             folder))
+           (if (null (elmo-imap4-select-folder folder connection))
+               (error "Select folder failed")))
+         (elmo-imap4-send-command (elmo-imap4-connection-get-buffer
+                                   connection)
+                                  (elmo-imap4-connection-get-process
+                                   connection)
+                                  (format 
+                                   (if elmo-imap4-use-uid
+                                       "uid fetch %s bodystructure"
+                                     "fetch %s bodystructure")
+                                   number))
+         (if (null (setq response (elmo-imap4-read-contents
+                                   (elmo-imap4-connection-get-buffer
+                                    connection)
+                                   (elmo-imap4-connection-get-process
+                                    connection))))
+             (error "Fetching body structure failed")))
+       (mmelmo-imap4-parse-bodystructure-string fld number msgdb
+                                                response)))))
+
+(defun mmelmo-imap4-read-part (entity)
+  (if (or (not mmelmo-imap4-threshold)
+         (not (mime-elmo-entity-size-internal entity))
+         (and (mime-elmo-entity-size-internal entity)
+              mmelmo-imap4-threshold
+              (<= (mime-elmo-entity-size-internal entity)
+                  mmelmo-imap4-threshold)))
+      (progn
+       (cond ((mmelmo-imap4-multipart-p entity)) ; noop
+             (t (insert (elmo-imap4-read-part 
+                         (mime-elmo-entity-folder-internal entity)
+                         (mime-elmo-entity-number-internal entity)
+                         (mmelmo-imap4-node-id-to-string 
+                          (mime-entity-node-id-internal entity))))))
+       (setq mmelmo-imap4-fetched t)
+       (mime-buffer-entity-set-body-start-internal entity (point-min))
+       (mime-buffer-entity-set-body-end-internal entity (point-max)))
+    (setq mmelmo-imap4-fetched nil)
+    (mime-buffer-entity-set-body-start-internal entity (point-min))
+    (mime-buffer-entity-set-body-end-internal entity (point-min))
+    (setq mmelmo-imap4-skipped-parts 
+         (append
+          mmelmo-imap4-skipped-parts
+          (list (mmelmo-imap4-node-id-to-string 
+                 (mime-entity-node-id-internal entity)))))))
+
+(defun mmelmo-imap4-insert-body (entity)
+  (mime-buffer-entity-set-body-start-internal entity (- (point) 1))
+  (if (or (not mmelmo-imap4-threshold)
+         (not (mime-elmo-entity-size-internal entity))
+         (and (mime-elmo-entity-size-internal entity)
+              mmelmo-imap4-threshold   
+              (<= (mime-elmo-entity-size-internal entity)
+                  mmelmo-imap4-threshold)))
+      (insert (elmo-imap4-read-part
+              (mime-elmo-entity-folder-internal entity)
+              (mime-elmo-entity-number-internal entity) "1"))
+    (setq mmelmo-imap4-skipped-parts 
+         (append
+          mmelmo-imap4-skipped-parts
+          (list (mmelmo-imap4-node-id-to-string 
+                 (mime-entity-node-id-internal entity)))))))
+
+;;; mime-elmo-imap4-entity class definitions.
+(luna-define-class mime-elmo-imap4-entity (mime-buffer-entity)
+                  (imap folder number msgdb size))
+(luna-define-internal-accessors 'mime-elmo-imap4-entity)
+
+(luna-define-method initialize-instance ((entity mime-elmo-imap4-entity)
+                                        &rest init-args)
+  "The initialization method for elmo-imap4.
+mime-elmo-entity has its own instance variable 
+`imap', `folder', `msgdb', and `size'.
+These value must be specified as argument for `luna-make-entity'."  
+  (apply (car (luna-class-find-functions
+              (luna-find-class 'standard-object)
+              'initialize-instance))
+        entity init-args))
+
+(luna-define-method mime-entity-buffer ((entity mime-elmo-imap4-entity))
+  (if (mime-buffer-entity-buffer-internal entity)
+      (save-excursion
+       (set-buffer (mime-buffer-entity-buffer-internal entity))
+       (unless (mime-root-entity-p entity)
+         (unless mmelmo-imap4-fetched
+           (setq mmelmo-imap4-skipped-parts nil) ; No need?
+           (let ((mmelmo-imap4-threshold
+                  (mime-elmo-entity-size-internal entity)))
+             (mime-buffer-entity-set-buffer-internal entity nil)
+             (message "Fetching skipped part...")
+             (luna-send entity 'mime-entity-buffer entity)
+             (message "Fetching skipped part...done."))
+           (setq mmelmo-imap4-fetched t)))
+       (mime-buffer-entity-buffer-internal entity))
+    (save-excursion
+      (set-buffer (get-buffer-create 
+                  (concat mmelmo-entity-buffer-name
+                          (mmelmo-imap4-node-id-to-string 
+                           (mime-entity-node-id-internal entity)))))
+      (mmelmo-original-mode)
+      (mime-buffer-entity-set-buffer-internal entity (current-buffer))
+      (let ((buffer-read-only nil))
+       (erase-buffer)
+       (mime-entity-node-id entity)
+       (if (mime-root-entity-p entity)
+           (progn
+             ;; root entity
+             (setq mmelmo-imap4-current-message-structure entity)
+             (setq mime-message-structure entity)
+             (setq mmelmo-imap4-skipped-parts nil)
+             ;; insert header
+             (insert (elmo-imap4-read-part 
+                      (mime-elmo-entity-folder-internal 
+                       entity)
+                      (mime-elmo-entity-number-internal entity)
+                      "header"))
+             (mime-buffer-entity-set-header-start-internal 
+              entity (point-min))
+             (mime-buffer-entity-set-header-end-internal
+              entity (max (- (point) 1) 1))
+             (if (null (mime-entity-children-internal entity))
+                 (progn
+                   (mime-buffer-entity-set-body-start-internal 
+                    entity (point))
+                   ;; insert body if size is OK.
+                   (mmelmo-imap4-insert-body entity)
+                   (mime-buffer-entity-set-body-end-internal 
+                    entity (point)))))
+         (setq mime-message-structure 
+               mmelmo-imap4-current-message-structure)
+         (mmelmo-imap4-read-part entity)))
+      (current-buffer))))
+
+(luna-define-method mime-goto-header-start-point ((entity mime-elmo-imap4-entity))
+  (set-buffer (mime-entity-buffer entity))
+  (point-min))
+
+(luna-define-method mime-goto-body-end-point ((entity mime-elmo-imap4-entity))
+  (set-buffer (mime-entity-buffer entity))
+  (point-max))
+
+(luna-define-method mime-entity-point-min ((entity mime-elmo-imap4-entity))
+  (set-buffer (mime-buffer-entity-buffer-internal entity))
+  (point-min))
+
+(luna-define-method mime-entity-point-max ((entity mime-elmo-imap4-entity))
+  (set-buffer (mime-buffer-entity-buffer-internal entity))
+  (point-max))
+
+(luna-define-method mime-entity-children ((entity mime-elmo-imap4-entity))
+  (let* ((content-type (mime-entity-content-type entity))
+         (primary-type (mime-content-type-primary-type content-type)))
+    (cond ((eq primary-type 'multipart)
+           (mime-parse-multipart entity))
+          ((and (eq primary-type 'message)
+                (memq (mime-content-type-subtype content-type)
+                      '(rfc822 news external-body)
+                      ))
+          (save-excursion
+            (set-buffer (luna-send entity 'mime-entity-buffer entity))
+            (mime-buffer-entity-set-body-start-internal entity (point-min))
+            (mime-buffer-entity-set-body-end-internal entity (point-max)))
+           (mime-parse-encapsulated entity)))))
+
+;; override generic function for dynamic body fetching.
+(luna-define-method mime-entity-content ((entity 
+                                         mime-elmo-imap4-entity))
+  (save-excursion
+    (set-buffer (mime-entity-buffer entity))
+    (mime-decode-string
+     (buffer-substring (mime-buffer-entity-body-start-internal entity)
+                      (mime-buffer-entity-body-end-internal entity))
+     (mime-entity-encoding entity))))
+
+(luna-define-method mime-entity-fetch-field ((entity mime-elmo-imap4-entity) 
+                                            field-name)
+  (save-excursion
+    (save-restriction
+      (when (mime-buffer-entity-buffer-internal entity)
+       (set-buffer (mime-buffer-entity-buffer-internal entity))
+       (if (and (mime-buffer-entity-header-start-internal entity)
+                (mime-buffer-entity-header-end-internal entity))
+           (progn
+             (narrow-to-region 
+              (mime-buffer-entity-header-start-internal entity)
+              (mime-buffer-entity-header-end-internal entity))
+             (std11-fetch-field field-name))
+         nil)))))
+
+(luna-define-method mime-insert-header ((entity mime-elmo-imap4-entity)
+                                       &optional invisible-fields 
+                                       visible-fields)
+  (mmelmo-insert-sorted-header-from-buffer
+   (mime-entity-buffer entity)
+   (mime-buffer-entity-header-start-internal entity)
+   (mime-buffer-entity-header-end-internal entity)
+   invisible-fields visible-fields))
+
+(luna-define-method mime-entity-header-buffer ((entity mime-elmo-imap4-entity))
+  (mime-entity-buffer entity))
+
+(luna-define-method mime-entity-body-buffer ((entity mime-elmo-imap4-entity))
+  (mime-entity-buffer entity))
+
+(luna-define-method mime-write-entity-content ((entity mime-elmo-imap4-entity)
+                                              filename)
+  (save-excursion
+    (set-buffer (mime-entity-buffer entity))
+    (unless mmelmo-imap4-fetched
+      (setq mmelmo-imap4-skipped-parts nil) ; No need?
+      (let ((mmelmo-imap4-threshold (mime-elmo-entity-size-internal entity)))
+       (mime-buffer-entity-set-buffer-internal entity nil) ; To re-fetch.
+       (message "Fetching skipped part...")
+       (luna-send entity 'mime-entity-buffer entity)
+       (message "Fetching skipped part...done.")))
+    (mime-write-decoded-region (mime-buffer-entity-body-start-internal entity)
+                              (mime-buffer-entity-body-end-internal entity)
+                              filename
+                              (or (mime-entity-encoding entity) "7bit"))))
+
+(provide 'mmelmo-imap4-2)
+
+;;; mmelmo-imap4-2.el ends here
diff --git a/elmo/mmelmo-imap4.el b/elmo/mmelmo-imap4.el
new file mode 100644 (file)
index 0000000..53c8f1c
--- /dev/null
@@ -0,0 +1,41 @@
+;;; mmelmo-imap4.el -- MM backend of IMAP4 for ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/07 17:00:30 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(static-if (fboundp 'luna-define-method)
+    ;; FLIM 1.13 or later
+    (require 'mmelmo-imap4-2)
+  ;; FLIM 1.12
+  (require 'mmelmo-imap4-1))
+
+(provide 'mmelmo-imap4)
+
+;;; mmelmo-imap4.el ends here
diff --git a/elmo/mmelmo.el b/elmo/mmelmo.el
new file mode 100644 (file)
index 0000000..e7c541e
--- /dev/null
@@ -0,0 +1,159 @@
+;;; mmelmo.el -- mm-backend by ELMO.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/07 17:00:43 teranisi>
+
+;; This file is part of ELMO (Elisp Library for Message Orchestration).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-util)
+(require 'mime-parse)
+(require 'mmbuffer)
+
+(defvar mmelmo-header-max-column fill-column
+  "*Inserted header is folded with this value.
+If function is specified, its return value is used.")
+
+(defvar mmelmo-header-inserted-hook nil
+  "*A hook called when header is inserted.")
+
+(defvar mmelmo-entity-content-inserted-hook nil
+  "*A hook called when entity-content is inserted.")
+
+(defun mmelmo-get-original-buffer ()
+  (save-excursion
+    (let (ret-val)
+      (if (setq ret-val 
+               (get-buffer (concat mmelmo-entity-buffer-name "0")))
+         ret-val
+       (set-buffer (setq ret-val
+                         (get-buffer-create 
+                          (concat mmelmo-entity-buffer-name "0"))))
+       (mmelmo-original-mode)
+       ret-val))))
+
+(defun mmelmo-cleanup-entity-buffers ()
+  "Cleanup entity buffers of mmelmo."
+  (mapcar (lambda (x)
+           (if (string-match mmelmo-entity-buffer-name x)
+               (kill-buffer x)))
+         (mapcar 'buffer-name (buffer-list))))
+
+(defun mmelmo-insert-sorted-header-from-buffer (buffer 
+                                               start end
+                                               &optional invisible-fields
+                                               visible-fields
+                                               sorted-fields)
+  (let ((the-buf (current-buffer))
+       (mode-obj (mime-find-field-presentation-method 'wide))
+       field-decoder
+       f-b p f-e field-name field field-body
+        vf-alist (sl sorted-fields))
+    (save-excursion
+      (set-buffer buffer)
+      (save-restriction
+       (narrow-to-region start end)
+       (goto-char start)
+       (while (re-search-forward std11-field-head-regexp nil t)
+         (setq f-b (match-beginning 0)
+               p (match-end 0)
+               field-name (buffer-substring f-b p)
+               f-e (std11-field-end))
+         (when (mime-visible-field-p field-name
+                                     visible-fields invisible-fields)
+           (setq field (intern
+                        (capitalize (buffer-substring f-b (1- p))))
+                 field-body (buffer-substring p f-e)
+                 field-decoder (inline (mime-find-field-decoder-internal
+                                        field mode-obj)))
+            (setq vf-alist (append (list
+                                    (cons field-name
+                                          (list field-body field-decoder)))
+                                   vf-alist))))
+        (and vf-alist
+             (setq vf-alist
+                   (sort vf-alist
+                         (function (lambda (s d)
+                                     (let ((n 0) re
+                                           (sf (car s))
+                                           (df (car d)))
+                                       (catch 'done
+                                         (while (setq re (nth n sl))
+                                           (setq n (1+ n))
+                                           (and (string-match re sf)
+                                                (throw 'done t))
+                                           (and (string-match re df)
+                                                (throw 'done nil)))
+                                         t)))))))
+        (with-current-buffer the-buf
+          (while vf-alist
+            (let* ((vf (car vf-alist))
+                   (field-name (car vf))
+                   (field-body (car (cdr vf)))
+                   (field-decoder (car (cdr (cdr vf)))))
+              (insert field-name)
+             (insert (if field-decoder
+                         (funcall field-decoder field-body
+                                   (string-width field-name)
+                                  (if (functionp mmelmo-header-max-column)
+                                      (funcall mmelmo-header-max-column)
+                                    mmelmo-header-max-column))
+                       ;; Don't decode
+                       field-body))
+              (insert "\n"))
+            (setq vf-alist (cdr vf-alist)))
+         (run-hooks 'mmelmo-header-inserted-hook))))))
+
+(defun mmelmo-original-mode ()
+  (setq major-mode 'mmelmo-original-mode)
+  (setq buffer-read-only t)
+  (elmo-set-buffer-multibyte nil)
+  (setq mode-name "MMELMO-Original"))
+
+;; For FLIMs without rfc2231 feature .
+(if (not (fboundp 'mime-parse-parameters-from-list))
+    (defun mime-parse-parameters-from-list (attrlist)
+      (let (ret-val)
+       (if (not (eq (% (length attrlist) 2) 0))
+           (message "Invalid attributes."))
+       (while attrlist
+         (setq ret-val (append ret-val
+                               (list (cons (downcase (car attrlist))
+                                           (downcase (car (cdr attrlist)))))))
+         (setq attrlist (cdr (cdr attrlist))))
+       ret-val)))
+
+(provide 'mmelmo) ; for circular dependency.
+(static-if (fboundp 'luna-define-method)
+    ;; FLIM 1.13 or later
+    (require 'mmelmo-2)
+  ;; FLIM 1.12
+  (require 'mmelmo-1))
+
+
+;;; mmelmo.el ends here
diff --git a/elmo/utf7.el b/elmo/utf7.el
new file mode 100644 (file)
index 0000000..81e66ee
--- /dev/null
@@ -0,0 +1,258 @@
+;;; utf7.el --- UTF-7 encoding/decoding for Emacs
+;; Copyright (C) 1999 Free Software Foundation, Inc.
+
+;; Author: Jon K Hellan <hellan@item.ntnu.no>
+;; Keywords: mail
+
+;; This file is part of GNU Emacs, but the same permissions apply
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+;;; UTF-7 - A Mail-Safe Transformation Format of Unicode - RFC 2152
+;;; This is a transformation format of Unicode that contains only 7-bit
+;;; ASCII octets and is intended to be readable by humans in the limiting 
+;;; case that the document consists of characters from the US-ASCII
+;;; repertoire.
+;;; In short, runs of characters outside US-ASCII are encoded as base64 
+;;; inside delimiters.
+;;; A variation of UTF-7 is specified in IMAP 4rev1 (RFC 2060) as the way
+;;; to represent characters outside US-ASCII in mailbox names in IMAP.
+;;; This library supports both variants, but the IMAP variation was the
+;;; reason I wrote it. 
+;;; The routines convert UTF-7 -> UTF-16 (16 bit encoding of Unicode) 
+;;; -> current character set, and vice versa. 
+;;; However, until Emacs supports Unicode, the only Emacs character set
+;;; supported here is ISO-8859.1, which can trivially be converted to/from
+;;; Unicode.
+;;; When decoding results in a character outside the Emacs character set,
+;;; an error is thrown. It is up to the application to recover.
+
+;;; Modified 8 December 1999 by Yuuichi Teranishi so that it will work under
+;;; Emacs+Mule-UCS and XEmacs.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'pces))
+(eval-when-compile (require 'static))
+
+;; base64 stuff.
+;;(static-if (and (fboundp 'base64-decode-region)
+;;             (subrp (symbol-function 'base64-decode-region)))
+;;    (eval-and-compile (fset 'utf7-base64-decode-region 'base64-decode-region))
+;;  (require 'mel)
+;;  (defun utf7-base64-decode-region (start end)
+;;    (fset 'utf7-base64-decode-string
+;;       (symbol-function (mel-find-function 'mime-decode-region "base64")))
+;;    (utf7-base64-decode-region start end)))
+
+;;(static-if (and (fboundp 'base64-encode-region)
+;;             (subrp (symbol-function 'base64-encode-region)))
+;;    (eval-and-compile (fset 'utf7-base64-encode-region 'base64-encode-region))
+;;  (defun utf7-base64-encode-string (start end)
+;;    (fset 'utf7-base64-encode-region
+;;       (symbol-function (mel-find-function 'mime-encode-region "base64")))
+;;    (utf7-base64-encode-region start end)))
+
+;; On XEmacs which does not support UTF-16 have to use u7tou8 and u8tou7. 
+;; These programs are included in
+;; ftp://ftp.ifcss.org/pub/software/unix/convert/utf7.tar.gz
+(defvar utf7-utf7-to-utf8-program "u7tou8"
+  "Program to convert utf7 to utf8.")
+(defvar utf7-utf8-to-utf7-program "u8tou7"
+  "Program to convert utf8 to utf7.")
+
+(defvar utf7-direct-encoding-chars " -%'-*,-[]-} \t\n\r"
+  "Characters ranges which do not need escaping in UTF-7")
+(defvar utf7-imap-direct-encoding-chars 
+  (concat utf7-direct-encoding-chars "+\\\\~")
+  "Characters ranges which do not need escaping in the IMAP modified variant of UTF-7")
+
+(defsubst utf7-imap-get-pad-length (len modulus)         
+  "Return required length of padding for IMAP modified base64 fragment."
+  (mod (- len) modulus))
+
+(static-cond
+ ((and (featurep 'xemacs) 
+       (module-installed-p 'xemacs-ucs))
+  (defun utf7-fragment-decode (start end &optional imap)
+    "Decode base64 encoded fragment from START to END of UTF-7 text in buffer.
+Use IMAP modification if IMAP is non-nil."  
+    (require 'xemacs-ucs)
+    (save-restriction 
+      (narrow-to-region start end)
+      (when imap
+       (goto-char start)
+       (while (search-forward "," nil 'move-to-end) (replace-match "/")))
+      (goto-char (point-min))
+      (insert "+")
+      (as-binary-process
+       (call-process-region (point-min) (point-max)
+                           utf7-utf7-to-utf8-program
+                           t (current-buffer)))
+      (decode-coding-region (point-min) (point-max) 'utf-8)))
+
+  (defun utf7-fragment-encode (start end &optional imap)
+    "Decode base64 encoded fragment from START to END of UTF-7 text in buffer.
+Use IMAP modification if IMAP is non-nil."  
+    (require 'xemacs-ucs)
+    (let ((buffer (current-buffer))
+         encoded-string)
+      (setq encoded-string
+           (with-temp-buffer
+             (insert-buffer-substring buffer start end)
+             (save-excursion 
+               (goto-char (point-max))
+               (insert "\n"))
+             (encode-coding-region (point-min) (point-max) 'utf-8)
+             (as-binary-process
+              (call-process-region (point-min) (point-max)
+                                   utf7-utf8-to-utf7-program
+                                   t (current-buffer)))
+             (goto-char (point-min))
+             (when imap
+               (skip-chars-forward "+")
+               (delete-region (point-min) (point))
+               (insert "&")
+               (while (search-forward "/" nil t)
+                 (replace-match ",")))
+             (goto-char (point-max))
+             (delete-backward-char 1)
+             (insert "-")
+             (buffer-string)))
+      (delete-region start end)
+      (insert encoded-string))))
+ ((module-installed-p 'un-define) ;; Emacs
+  (defun utf7-fragment-decode (start end &optional imap)
+    "Decode base64 encoded fragment from START to END of UTF-7 text in buffer.
+Use IMAP modification if IMAP is non-nil."
+    (require 'un-define)
+    (save-restriction
+      (narrow-to-region start end)
+      (goto-char (point-min))
+      (insert "+")
+      (when imap
+       (goto-char start)
+       (while (search-forward "," nil 'move-to-end) (replace-match "/")))
+      (decode-coding-region (point-min) (point-max) 'utf-7)
+      ))
+
+  (defun utf7-fragment-encode (start end &optional imap)
+    "Encode text from START to END in buffer as UTF-7 escape fragment.
+Use IMAP modification if IMAP is non-nil."
+    (require 'un-define)
+    (let ((buffer (current-buffer))
+         encoded-string)
+      (setq encoded-string
+           (with-temp-buffer
+             (insert-buffer-substring buffer start end)
+             (encode-coding-region (point-min) 
+                                   (point-max) 'utf-7)
+             (goto-char (point-min))
+             (when imap
+               (skip-chars-forward "+")
+               (delete-region (point-min) (point))
+               (insert "&")
+               (while (search-forward "/" nil t)
+                 (replace-match ",")))
+             (skip-chars-forward "^= \t\n" (point-max))
+             (delete-region (point) (point-max))
+             (buffer-string)))
+      (delete-region start end)
+      (insert encoded-string))))
+ (t
+  ;; Define as null function.
+  (defun utf7-fragment-decode (start end &optional imap)
+    "Encode text from START to END in buffer as UTF-7 escape fragment.
+Use IMAP modification if IMAP is non-nil."
+    )
+
+  (defun utf7-fragment-encode (start end &optional imap)
+    "Encode text from START to END in buffer as UTF-7 escape fragment.
+Use IMAP modification if IMAP is non-nil."
+    )))
+
+(defun utf7-encode-region (start end &optional imap)
+  "Encode text in region as UTF-7.
+Use IMAP modification if IMAP is non-nil."
+  (interactive "r")
+  (save-restriction
+    ;;(set-buffer-multibyte default-enable-multibyte-characters)
+    (narrow-to-region start end)
+    (goto-char start)
+    (let ((esc-char (if imap ?& ?+))
+         (direct-encoding-chars 
+          (if imap utf7-imap-direct-encoding-chars
+            utf7-direct-encoding-chars)))
+      (while (not (eobp))
+       (skip-chars-forward direct-encoding-chars)
+       (unless (eobp)
+         (let ((p (point))
+               (fc (following-char))
+               (run-length 
+                (skip-chars-forward (concat "^" direct-encoding-chars))))
+           (if (and (= fc esc-char)
+                    (= run-length 1))  ; Lone esc-char?
+               (delete-backward-char 1) ; Now there's one too many
+             (utf7-fragment-encode p (point) imap))))))))
+
+(defun utf7-decode-region (start end &optional imap)
+  "Decode UTF-7 text in region.
+Use IMAP modification if IMAP is non-nil."
+  (interactive "r")
+  (save-excursion
+    (goto-char start)
+    (let* ((esc-pattern (concat "^" (char-to-string (if imap ?& ?+))))
+          (base64-chars (concat "A-Za-z0-9+" 
+                                (char-to-string (if imap ?, ?/)))))
+      (while (not (eobp))
+       (skip-chars-forward esc-pattern)
+       (unless (eobp)
+         (forward-char)
+         (let ((p (point))
+               (run-length (skip-chars-forward base64-chars)))
+           (when (and (not (eobp)) (= (following-char) ?-))
+             (delete-char 1))
+           (unless (= run-length 0)    ; Encoded lone esc-char?
+             (save-excursion
+               (utf7-fragment-decode p (point) imap)
+               (goto-char p)
+               (delete-backward-char 1)))))))
+    ;;(set-buffer-multibyte default-enable-multibyte-characters)
+    ))
+
+(defun utf7-encode-string (string &optional imap)
+  "Encode UTF-7 string. Use IMAP modification if IMAP is non-nil."
+  (with-temp-buffer
+    (insert string)
+    (utf7-encode-region (point-min) (point-max) imap)
+    (buffer-string)))
+
+(defun utf7-decode-string (string &optional imap)
+  "Decode UTF-7 string. Use IMAP modification if IMAP is non-nil."
+  (with-temp-buffer
+    (insert string)
+    (utf7-decode-region (point-min) (point-max) imap)
+    (buffer-string)))
+
+;; For compatibility.
+(defalias 'utf7-decode 'utf7-decode-string)
+(defalias 'utf7-encode 'utf7-encode-string)
+
+(provide 'utf7)
+
+;;; utf7.el ends here
diff --git a/etc/ChangeLog.1.ja b/etc/ChangeLog.1.ja
new file mode 100644 (file)
index 0000000..b9e0896
--- /dev/null
@@ -0,0 +1,2031 @@
+1998-12-02  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.8.8 - "Veronica"
+       * news \e$B5-;v$r%-%c%s%;%k$9$k$H$-$b\e(B wl-mail-send-pre-hook \e$B$r8F$V\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * im-wl.el \e$B$NHsF14|\e(B imput \e$B$r;H$C$F$$$k>l9g\e(B news \e$B5-;v$r\e(B
+         \e$B%-%c%s%;%k$G$-$J$+$C$?$N$r=$@5!#\e(B
+       * Summary \e$B$G\e(B 'E' reedit \e$B$7$?$H$-!"\e(Bdraft \e$B$N%P%C%U%!$,\e(B read-only \e$B$K\e(B
+         \e$B$J$C$F$7$^$&>l9g$,$"$kLdBj$KBP=h!#\e(B
+         (\e$B?@V:$5$s\e(B <kamisima@etl.go.jp> \e$B$h$j8f;XE&!#\e(B)
+       * \e$BJD$8$?%9%l%C%I$r:o=|$7$?$H$-$K$=$N;R$I$b$,9TJ}ITL@$K$J$k$N$r\e(B
+         \e$B=$@5\e(B(\e$B?@V:$5$s\e(B <kamisima@etl.go.jp> \e$B$h$j8f;XE&!#\e(B)
+       * wl-mail-send-pre-hook \e$B$N8F$P$lJ}$rJQ99!#\e(B
+         im-wl.el \e$B$G\e(B imput \e$B$r;H$&>l9g$H\e(B elisp \e$BHG$N>l9g$G%P%C%U%!$N>uBV$,\e(B
+         \e$BF1$8$K$J$k$h$&$K$7$?!#\e(B
+
+1998-12-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$BJQ?t\e(B wl-insert-message-id \e$B$,$^$k$C$-$jL5;k$5$l$F$$$?$N$r=$@5!#\e(B
+
+1998-12-01  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * update all \e$B$G%5%^%j$r:n$jD>$9$H$-!$%9%l%C%I$N?F$h$j;R$,<c$$HV\e(B
+         \e$B9f$@$H!$;R$,%5%^%j$KI=<($5$l$J$$$N$r=$@5$7$?!#\e(B
+       * wl-thread-insert-entity, wl-thread-update-line-on-buffer
+         wl-thread-entity-get-children-num, wl-thread-entity-get-children-msgs
+         wl-thread-entity-check-next-mark,wl-thread-entity-check-prev-mark
+         wl-thread-entity-check-next-mark-from-younger-brother
+         wl-thread-entity-check-prev-mark-from-older-brother
+         \e$B0J>e$N4X?t$r:F5"E*$K8F$S=P$5$J$$$h$&=$@5!#\e(B
+       * \e$BJ6$i$o$7$$0l;~JQ?t$NL>A0$r=$@5\e(B (num -> len, number -> num)\e$B!#\e(B
+       * nntp (not xover) \e$B$G?75,%a%C%;!<%8$K\e(B "N" \e$B%^!<%/$,$D$+$J$$$N$r=$@5!#\e(B
+       * wl-auto-select-next \e$B$,\e(B t \e$B$N$H$-$K%5%^%jFb$r0\F0$7$F$b\e(B
+         "Updated (-0/+1) message(s)" \e$B$J$I$NI=<($r>C$5$J$$$h$&$K$7$?!#\e(B
+
+1998-11-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * msgdb \e$B$K\e(B \e$B:G8e$N\e(B message-id \e$B$7$+J]B8$7$J$$$h$&$K$7$?!#\e(B
+       * wl-summary-weekday-name-lang \e$B$,<B$OH?1G$5$l$F$$$J$+$C$?$N$r=$@5!#\e(B
+       * 0.8.7 - "Union Of The Snake"
+       * pack \e$B$G!"L$FI%^!<%/$rJ]B8$9$k$h$&$K$7$?!#\e(B
+       * elmo-set-work-buf \e$B$N%^%/%m$,\e(B mule-2.3@19.28 \e$B$GF0$+$J$$$N$r=$@5!#\e(B
+
+1998-11-30  IMAI Takeshi <imai@ed2.com1.fc.nec.co.jp>
+
+       * wl-highlight-body-too\e$B$,\e(Bnil\e$B$N;~$O!"%I%i%U%H$N\e(B body \e$B$b%O%$%i%$%H$7\e(B
+         \e$B$J$$$h$&$K$7$?!#\e(B
+
+1998-11-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo]elmo-localdir-msgdb-create-overview-entity-from-file \e$BCf$N\e(B
+         insert-file-contents \e$B$G5/$3$k%(%i!<$rL5;k$9$k$h$&$K$7$?!#\e(B
+         (\e$B2,ED$5$s\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp> \e$B$h$j8f;XE&!#\e(B)
+       * wl-summary-mark-collect \e$B$,!"JD$8$?%9%l%C%I$G%a%C%;!<%8$r=EJ#$7$F\e(B
+         \e$B=8$a$F$7$^$&$?$a!":o=|;~$K%9%l%C%I$,$*$+$7$/$J$k$3$H$,$"$k$N$r=$@5!#\e(B
+
+1998-11-29  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * local[dir|news] \e$B$@$1\e(B pack \e$B$r%5%]!<%H!#\e(B
+
+1998-11-29  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-thread-insert-entity, wl-thread-update-line-on-buffer,
+         wl-thread-entity-check-prev-mark,
+         wl-thread-entity-check-next-mark \e$B$N3F4X?t$G:F5"E*$K\e(B binding \e$B$5\e(B
+         \e$B$l$k%m!<%+%kJQ?t$r:o8:$7$?!#\e(B
+       * wl-summary.el \e$B$H\e(B wl-thread.el \e$B$N%P%$%H%3%s%Q%$%k;~$N%a%C%;!<%8\e(B
+         \e$B$r:o8:$7$?\e(B(\e$B%m!<%+%kJQ?t$N@0M}$r$7$?\e(B)\e$B!#\e(B
+       * timezone-fix-time \e$B$G%(%i!<$,5/$3$C$F$b%5%^%j$r:n@.$G$-$k$h$&$K\e(B
+         \e$B$7$?!#\e(B
+       * \e$BJ#?t%a%C%;!<%8$G$N%9%l%C%I%"%C%W%G!<%H$H%9%l%C%I:o=|$N9bB.2=$r\e(B
+         \e$B9T$C$?!#\e(B
+       * \e$B%5%^%j>pJs$,$J$$>l9g\e(B wl-summary-buffer-msgdb \e$B$,\e(B '(nil nil nil
+         nil) \e$B$K$J$k$3$H$,H?1G$5$l$F$$$J$+$C$?$N$rH?1G$7$?!#\e(B
+       * wl-summary-sync \e$B$N\e(B update all \e$B$G8E$$\e(B entity \e$B>pJs$,;D$C$F$7$^$&\e(B
+         \e$B$N$r=$@5$7$?!#\e(Bwl-thread-entities \e$B$,\e(B nil \e$B$K\e(B set \e$B$5$l$F$$$J$+$C\e(B
+         \e$B$?$?$a!#\e(B
+       * elmo-util.el \e$B$H\e(B wl-util.el \e$B$N4X?t$G8DJL$K%P%C%U%!$r:n$C$F$$$?$N\e(B
+         \e$B$r\e(B1\e$B$D$K$^$H$a$F9bB.2=$7$?!#\e(B
+       * sample.dot.wl \e$B$r99?7$7$?!#\e(Bwl-highlight-group-folder-by-numbers
+         \e$B$NDI2C$H!$\e(Bmy-wl-summary-from-func-petname \e$B$N%P%0=$@5!#\e(B
+
+1998-11-29  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$K2CI.!&=$@5!#\e(B
+       * [elmo] localdir, archive, pop3, nntp \e$B$N3F%^!<%/@8@.ItJ,$G\e(B seen-list
+         \e$B$rMxMQ$9$k$h$&=$@5!#\e(B
+       * sync-all, sync-update \e$B$GA0$NL$FI>uBV$r0z$-7Q$0$h$&$K$7$?!#\e(B
+       * [elmo] elmo-msgdb-create \e$B$N0z?t$K\e(B seen-list \e$B$rDI2C!#\e(B
+
+1998-11-28  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-call-func \e$B$NJQ99$N$?$a!"5/F0;~$K\e(Barchive \e$B%U%)%k%@$N\e(B
+         \e$B%U%)%k%@%A%'%C%/$K<:GT$9$k$h$&$K$J$C$F$7$^$C$?$N$r=$@5!#\e(B
+
+1998-11-28  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-summary-weekday-name-lang\e$B!#%G%U%)%k%H$O\e(B "ja"\e$B!#\e(B
+       * wl-summary-wday-use-japanese -> \e$BGQ;_!#\e(B
+       * [elmo] elmo-plugged \e$B$,\e(B 2 \e$B2s\e(B defvar \e$B$5$l$F$$$?$N$r=$@5\e(B
+         (\e$B;{ED$5$s\e(B <te@isl.ntt.co.jp> \e$B$h$j8f;XE&!#\e(B)
+
+1998-11-27  Masayuki TERADA <te@isl.ntt.co.jp>
+
+       * [elmo] elmo-folder-identical-system-p \e$B$N%m%8%C%/$,:xAn$7$F$$$?$N\e(B
+         \e$B$r2~A1!#\e(B
+
+1998-11-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-interactive-exit \e$B$,\e(B t \e$B$N$H$-!$=*N;3NG'$G\e(B n \e$B$HEz$($F$+$i:FEY\e(B
+         M-x wl \e$B$r<B9T$9$k$H!$%G%b2hLL$,$G$F=i4|2=$,<B9T$5$l$F$7$^$&$N$r\e(B
+         \e$B=$@5!#\e(B
+
+1998-11-27  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * elmo-date \e$B$,%$%s%9%H!<%i$KF~$C$F$$$J$+$C$?$N$r=$@5!#\e(B
+
+1998-11-27  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.8.6 - "True Colors"
+       * localdir, imap4 \e$B$O\e(B since \e$B$H\e(B before \e$B$GF|IU8!:w$G$-$k$h$&$K$7$?!#\e(B
+         (\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * \e$BF|IU$1=hM}%b%8%e!<%kMQ?75,%U%!%$%k\e(B elmo-date.el \e$B$rDI2C!#\e(B
+       * \e$B%9%l%C%I$,:o=|$5$l$?$H$-!"%9%l%C%I%H%C%W$N%j%9%H$,@5$7$/$J$/$J$k\e(B
+         \e$B$N$r=$@5\e(B (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+       * elmo-localdir-copy-msgs \e$B$K\e(B (require 'elmo-archive) \e$B$rDI2C!#\e(B
+         (\e$B;{ED$5$s\e(B <te@isl.ntt.co.jp> \e$B$h$j8f;XE&!#\e(B)
+
+1998-11-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-call-func \e$B$G\e(B elmo-folder-get-spec \e$B$,L5BL$K8F$P$l$F$$$?$N$r\e(B
+         \e$B=$@5!#\e(B
+       * .folders \e$B$NF,$K$D$1$F$$$?%U%)%k%@%?%$%W$N@bL@$r:o=|!#\e(B
+
+1998-11-26  Shun-ichi GOTO <gotoh@taiyo.co.jp>
+
+       * elmo-read-passwd \e$B$G\e(B prompt \e$B$K\e(B '%' \e$B$,4^$^$l$F$$$k$H%(%i!<$K$J$k\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1998-11-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%9%l%C%I9=B$$N%;!<%V$K$+$+$k;~4V$rC;=L!#\e(B
+         \e$B"*\e(B \e$B%;!<%V;~$K$$$A$$$A\e(B obarray \e$B$+$i%;!<%V$9$k\e(Blist \e$B$r@8@.$9$k$N$r$d$a!"\e(B
+         \e$B%9%l%C%ILZ9=B$$N%N!<%I$N%j%9%H$r%P%C%U%!%m!<%+%kJQ?t$KJ];}$9$k$3$H\e(B
+         \e$B$K$7$?!#\e(B
+       * \e$BJD$8$?%9%l%C%I$K1#$5$l$?%a%C%;!<%8$N=hM}$,<B9T$5$l$J$$%P%0$r=$@5!#\e(B
+       * pick \e$B$G$-$J$$%P%0$r=$@5!#\e(B
+
+1998-11-25  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.8.5 - "Sussudio"
+       * IMAP4 \e$B$G\e(B RFC822 \e$B$N%Q!<%H$,5pBg$G%9%-%C%W$5$l$?>l9g$K\e(B mime-entity \e$B$N\e(B
+         body-start \e$B$H\e(B body-end \e$B$,<h$l$J$/$F%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * \e$BF1$8\e(B Message-ID \e$B$N%a%C%;!<%8$,J#?t$"$k$H$-$K$=$N$&$A0l$D$r:o=|\e(B
+         \e$B$9$k$H\e(B Summary \e$B$,$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * Folder \e$B%b!<%I$G\e(B 'rc' \e$B$r2!$9$H\e(B 'c' \e$B$r%j!<%8%g%s<B9T$9$k$h$&$K$7$?!#\e(B
+       * Folder \e$B%b!<%I$G\e(B 'c' \e$B$r2!$9$H!"A4ItFI$s$@$3$H$K$9$k$h$&$K$7$?!#\e(B
+         (\e$B2,ED$5$s\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp> \e$B$h$j8fMWK>\e(B)
+       * \e$BB<ED$5$s$K$h$k$$$/$D$+$NJQ99$rH?1G$7K:$l$F$$$?$N$rH?1G\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+
+1998-11-25  Shun-ichi GOTO <gotoh@taiyo.co.jp>
+
+       * \e$B4X?t\e(B elmo-pop3-get-connection \e$B$K?7$7$$0z?t\e(B auth\e$B$rDI2C!#\e(B
+       * \e$B4X?t\e(B elmo-pop3-open-connection \e$B$K?7$7$$0z?t\e(B auth\e$B$rDI2C!#\e(B
+       * \e$B?75,4X?t\e(B elmo-pop-make-apop-digest<f> \e$B$rDI2C!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-default-pop3-authenticate-type (\e$B%G%U%)%k%H$NG'>ZJ}K!\e(B)\e$B!#\e(B
+       * \e$B4X?t\e(B elmo-pop3-open-connection \e$B$K$F!"\e(BAPOP\e$B%3%^%s%I$K$h$kG'>Z$N$?$a$N\e(B
+         \e$B%3!<%I$rDI2C!#\e(B
+       * POP \e$B%U%)%k%@$N=q<0$r\e(B user[/auth]@host[:port] \e$B$H$7$?!#\e(B
+       * [elmo-pop3] APOP \e$BBP1~!#\e(B
+
+1998-11-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.8.4 - "Rosanna"
+       * 'mo' 'mO' \e$B$G%^!<%/$,$J$$$H$-@hF,$K%^!<%/$,$D$$$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B%9%l%C%I$,$^$@$&$^$/:o=|$G$-$F$J$+$C$?$N$r=$@5!#\e(B
+         (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f;XE&\e(B)
+       * "#" \e$B$O$d$C$Q$j$^$:$$$N$G\e(B pop3 \e$B$N%U%)%k%@J8;z$r\e(B "&" \e$B$KJQ99!#\e(B
+         (\e$B8eF#$5$s\e(BShun-ichi GOTO <gotoh@taiyo.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+
+1998-11-24  Shun-ichi GOTO <gotoh@taiyo.co.jp>
+
+       * POP3 \e$B$O%;%C%7%g%sCf$K?7Ce%a!<%k$r8!=P$9$k5!G=$,$J$$$?$a\e(B
+         scan: update \e$B$7$F$b?7Ce$,8=$l$J$$BP:v$H$7$F\e(B
+         list\e$B;~$K$O6/@)E*$K0lEY%;%C%7%g%s$r@Z$k$h$&$K$7$?!#\e(B
+
+1998-11-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.8.3 - "Pop Life"
+       * \e$B%9%l%C%I$,$&$^$/:o=|$G$-$J$$%P%0$r=$@5!#\e(B
+       * elmo-maildir.el \e$B$,%$%s%9%H!<%k$5$l$J$$$N$r=$@5!#\e(B
+       * 0.8.2 - "Open Arms"
+
+1998-11-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%m!<%+%k%K%e!<%9$N%Q%9$N%G%j%_%?$O\e(B "." \e$B$G$b$h$$$3$H$K$7$?!#\e(B
+
+1998-11-23  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B%m!<%+%k%K%e!<%9!"\e(B'=' \e$B$N%5%]!<%H!#\e(B
+
+1998-11-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * update \e$B;~$K%(%i!<$,$"$k$H\e(B Summary \e$B$,\e(B modified \e$B$K$J$C$F$7$^$&$N$r\e(B
+         \e$B=$@5!#\e(B
+       * XEmacs \e$B$G%"%/%;%9%0%k!<%W$K4^$^$l$k<+J,<+?H$N%"%$%3%s$,\e(B
+         \e$BI=<($5$l$J$$%P%0$r=$@5!#\e(B
+
+1998-11-22  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-thread-{open|close}-all \e$B$G=hM}$N?JD=$rI=<($9$k$h$&$K$7$?!#\e(B
+       * \e$B%9%l%C%I$NF~$l;R4IM}$r$d$a!"%9%l%C%I9=B$$N8!:w$K$O\e(B
+         obarray (hashtable) \e$B$r;H$&$h$&$K$7$?!#\e(B
+         (\e$B8eF#$5$s\e(B Shun-ichi GOTO <gotoh@taiyo.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+       * wl-thread-jump-to-next-unread \e$B$N\e(B hereto \e$B$,$&$^$/F0$+$J$$>l9g$,\e(B
+         \e$B$"$C$?$N$r=$@5!#\e(B
+       * elmo-pop3.el \e$B$r<BAu!#\e(B(\e$B%U%)%k%@J8;z$O\e(B "#" \e$B$H$7$?!#\e(B)
+         (\e$B8eF#$5$s\e(B Shun-ichi GOTO <gotoh@taiyo.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+
+1998-11-21  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [typo] wl-draft-enable-queueing -> wl-draft-enable-queuing\e$B!#\e(B
+       * [typo] wl-interacitve-save-folders -> wl-interactive-save-folders\e$B!#\e(B
+       * [wl-ja.texi] x-face-mule \e$B$N@_DjNc$r=$@5!#\e(B
+
+1998-11-21  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [wl-ja.texi] \e$BJd4V\e(B -> \e$BJd40!#\e(B
+
+1998-11-21  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * elmo-maildir \e$B$NDI2C$KH<$&JQ99B??t!#\e(B
+       * \e$B?75,%U%!%$%k\e(B elmo-maildir.el\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-maildir-list\e$B!#%^%C%A$9$k\e(B localdir \e$B%U%)%k%@$O\e(B
+         Maildir \e$B$H$7$F07$&!#\e(B
+
+1998-11-20  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * sample.dot.wl \e$B$G\e(B msgdb \e$B$K\e(B jka-compr \e$B$rMxMQ$9$kNc$rDI2C!#\e(B
+
+1998-11-19  Susumu Wakabayashi <susumu-w@ops.dti.ne.jp>
+
+       * \e$B%I%-%e%a%s%H$NJ8>O$G$$$/$D$+$^$k$,H4$1$F$$$?$N$r=$@5!#\e(B
+
+1998-11-18  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,%U%!%$%k\e(B sample.dot.wl\e$B!#\e(B
+
+1998-11-17  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * elmo-cache-expire-by-size \e$B$,\e(B mule-2.3@19.28 \e$B$G$bF0$/$h$&$K$7$?!#\e(B
+       * \e$B%O%$%i%$%H$N%G%U%)%k%H@_Dj$O\e(B wl-highlight-background-mode \e$B$NCM$r8+$k\e(B
+         \e$B$h$&$K$7$?\e(B(Takehama Hirohisa <thiro@kt.rim.or.jp> \e$B$5$s!"\e(B
+          \e$B85LZ$5$s\e(B <mokkun@iname.com>\e$B$N8f0U8+$K4p$E$/\e(B)\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-highlight-background-mode\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-highlight-group-folder-by-numbers\e$B!#\e(B
+       * \e$B%0%k!<%W%U%)%k%@$r!"%a%C%;!<%8$N?t$K1~$8$F?'$rJQ$($i$l$k$h$&$K\e(B
+         \e$B$7$?\e(B(\e$BBg_7$5$s\e(B <ohsawa@pms.mmlab.toshiba.co.jp>\e$B!"\e(B
+         \e$B85LZ$5$s\e(B <mokkun@iname.com> \e$B$h$j8fMWK>\e(B)\e$B!#\e(B
+
+1998-11-16  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * wl-summary-exit \e$B$9$k$H$-$K\e(B Message \e$B%P%C%U%!$r\e(B kill \e$B$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+
+1998-11-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-delete-folder-alist \e$B$N\e(B docstring \e$B$N4V0c$$$r=$@5!#\e(B
+
+1998-11-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * summary \e$B$N\e(B update \e$B;~$K\e(B important mark \e$B$NIU$$$?%a%C%;!<%8$,4{$K\e(B
+         \e$BB8:_$7$J$$$H!$%5%^%j$+$i>C$($F$7$^$&$N$r=$@5$7$?!#\e(B
+       * \e$B%a%C%;!<%8$r:o=|$7$?$H$-$N%]%j%7!<$r%f!<%6$,JQ99$G$-$k$h$&$K$7\e(B
+         \e$B$?!#\e(B
+
+1998-11-15  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Message \e$B%P%C%U%!$,\e(B modified \e$B$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+
+1998-11-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%9%l%C%I$,\e(B closed \e$B$J$H$-\e(B prefetch \e$B$K<:GT$9$k$N$r=$@5!#\e(B
+       * \e$B%9%l%C%I$N\e(B prefetch \e$B;~!"%a%C%;!<%8?t$,$*$+$7$+$C$?$N$r=$@5!#\e(B
+       * [elmo-archive] elmo-archive-get-archive-name \e$B$G!"B8:_$7$J$$\e(B
+         \e$B%U%)%k%@$N$H$-$K4|BT$5$l$k%U%!%$%kL>$,JV$C$FMh$J$$$N$r=$@5!#\e(B
+         (\e$B1|@>$5$s\e(B<fuji0924@mbox.kyoto-inet.or.jp> \e$B$N8f;XE&\e(B)
+
+1998-11-14  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * typo fix elmo-funcall() -> elmo-call-func()\e$B!#\e(B
+       * \e$B%G%#%l%/%H%j$r7!$kA0$KF1L>$N%U%!%$%k$,B8:_$9$k$+$r??LLL\$K\e(B
+         \e$B%A%'%C%/!#\e(B
+       * [elmo-archive] \e$BIQHK$K8F$P$l$J$$4X?t$O\e(B defun \e$B$KLa$7$?!#\e(B
+
+1998-11-12  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-localdir.el, elmo-imap4.el, elmo-nntp.el \e$B$,5/F0;~$+$i\e(B
+         load \e$B$5$l$J$$$h$&$K$7$?!#\e(B
+       * nntp\e$B%U%)%k%@$,\e(B1\e$B$D$b$J$/$F$b5/F0;~$K\e(B elmo-nntp.el \e$B$,\e(B load \e$B$5$l\e(B
+         \e$B$k$N$r=$@5$7$?!#\e(B
+       * `wl-summary-prepared-hook' \e$B$rDI2C!#\e(B
+
+1998-11-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.8.1 - "Nasty"
+
+1998-11-09  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-toggle-plugged \e$B$G\e(B modeline \e$B$,IT@53N$JI=<($K$J$C$F$7$^$&>l9g\e(B
+         \e$B$,$"$k$N$r=$@5!#\e(B
+       * ps-print.el \e$B$,L5$$4D6-MQ$N?75,JQ?t\e(B wl-print-message-func\e$B!#\e(B
+         wl-summary-print-message->wl-summary-print-message-with-ps-print\e$B!#\e(B
+
+1998-11-09 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * unplugged \e$B$J>uBV$G\e(B local \e$B%U%)%k%@$N$_$N%0%k!<%W$r%A%'%C%/$9$k\e(B
+         \e$B$H!$%A%'%C%/8e$K\e(B "Unplugged." \e$B$N%a%C%;!<%8$,=P$k$N$r=$@5!#\e(B
+
+1998-11-09  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * MsgDB \e$B$,\e(B vector \e$B2=$5$l$?$N$K\e(B elmo-archive-parse-mmdf() \e$B$,BP\e(B
+         \e$B1~$7$F$J$+$C$?!J\e(BOS/2 \e$B$G\e(B 'zip \e$B$J>l9g$K\e(B msgdb \e$B:n@.Cf$K$3$1$k!K\e(B
+         \e$BIT6q9g$r=$@5!#\e(B
+
+1998-11-08  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * unplugged \e$B$J$H$-$O%9%l%C%I%S%e!<$G$b\e(B wl-summary-cursor-down \e$B$G\e(B
+         cache \e$B$5$l$F$$$k%a%C%;!<%8$KHt$V$h$&$K$7$?\e(B
+         (\e$BC.@P$5$s\e(B<taru@sunicom.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * [elmo] autoload \e$B2=!#\e(B
+       * [elmo] elmo-call-func \e$B$G\e(B featurep \e$B$G$J$$\e(B backend \e$B$r\e(B
+         require \e$B$9$k$h$&$K$7$?\e(B(\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$N8f=u8@\e(B
+         \e$B$K4p$E$/\e(B)\e$B!#\e(B
+
+1998-11-06  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * WL-ELS \e$B$r\e(B 0.7.4 \e$B$N>uBV$KLa$7$?!#\e(B
+       * elmo-enable-disconnected-operation \e$B$,\e(B nil \e$B$N$H$-$N\e(B
+         \e$BIT6q9g$r$$$/$D$+=$@5\e(B(\e$BC.@P$5$s\e(B<taru@sunicom.co.jp>\e$B!"\e(B
+         \e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-11-05 \e$BIpED\e(B \e$BK'?.\e(B <takeda@kumagaya.nikon-sys.co.jp>
+
+       * wl-summary-print-message (with ps-print)\e$B!#\e(B
+
+1998-11-05  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * [im-wl] imput \e$B%W%m%;%9$NHsF14|2=!#\e(B
+
+1998-11-05 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * rassq -> rassoc\e$B!#\e(B
+       * wl-summary-reedit(wl-draft-reedit) \e$B$,\e(Binteger\e$B2=$K$h$jF0$+$J$/\e(B
+         \e$B$J$C$?$N$r=$@5!#\e(B
+
+1998-11-04 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * nntp (not xover) \e$B$,\e(Binteger\e$B2=$KBP1~$7$F$$$J$+$C$?$N$r=$@5!#\e(B
+
+1998-11-04  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$BAjJQ$o$i$:\e(B easymenu \e$B$N4X?t$,8+IU$+$i$:%(%i!<$K$J$k>l9g$,$"$k$N$G\e(B
+         (require 'easymenu) \e$B$r\e(B wl-folder.el \e$B$KDI2C\e(B(take@isl.ntt.co.jp
+         \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+       * reply \e$B$K<:GT$9$k%P%0$r=$@5!#\e(B
+       * 0.8.0 - "Manic Monday"
+       * WL-ELS \e$B$G\e(B mime-setup \e$B$N\e(B require \e$B$K<:GT$7$?$i!"\e(Bmail-mime-setup \e$B$b\e(B
+         \e$B;n$9$h$&$K$7$?!#\e(B(\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-11-03  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B?75,4X?t\e(B elmo-msgdb-overview-entity-get-extra-field\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-msgdb-extra-fields\e$B!#\e(B
+       * '*' \e$B%^!<%/$,%S%e!<%-%c%C%7%e$K;D$C$F$7$^$&%P%0$r=$@5!#\e(B
+       * \e$B%P%C%U%!$+$i\e(B overview \e$B$r@8@.$9$k4X?t$r0l$D$K$^$H$a$?!#\e(B
+       * overview \e$B$r\e(B vector \e$B2=!#\e(B
+
+1998-11-02 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [fldmgr] access \e$B%?%$%W0J30$N%0%k!<%W$K$O\e(B petname \e$B$,IU$1$i$l$J\e(B
+         \e$B$$$h$&$K$7$?!#\e(B
+       * [fldmgr] \e$B%"%/%;%9%0%k!<%W$rJQ99$7$F:o=|$7$?8e$K%;!<%V$9$k$H!$\e(B
+         \e$B$=$N%"%/%;%9%0%k!<%W$N%j%9%H$,6u$K$J$k$N$r=$@5$7$?!#\e(B
+       * [fldmgr] append \e$B$r$G$-$k$+$.$j\e(B nconc \e$B$KCV$-49$($?!#\e(B
+       * wl-folder-access-info-alist \e$B$r\e(B wl-folder-entity \e$B$KE}9g$5$;$?!#\e(B
+       * new command `wl-folder-open-unread-current-entity',
+         `wl-folder-open-only-unread-folder'.
+       * wl-folder-open-all-unread-folder, wl-folder-open-all,
+         wl-folder-close-all \e$B$N3F%3%^%s%I$r<B9T$7$F$b!$%+!<%=%k$r85$"$C\e(B
+         \e$B$?\e(B entity\e$B!$$b$7$/$O?F\e(B entity \e$B$N0LCV$KLa$9$h$&$K$7$?!#\e(B
+       * wl-folder-reconstruct-entity-alist \e$B$G\e(B id \e$B$r?6$jD>$9$H!$%P%C%U%!\e(B
+         \e$B>e$N\e(B id \e$B$HJQ?t$N\e(B id \e$B$,0[$J$C$F$7$^$&$N$r=$@5$7$?!#\e(B
+       * wl-folder-exit \e$B$G=*N;$9$k$H$-!$<g$JJQ?t$O\e(B nil \e$B$K=i4|2=$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * draft \e$B$G$NJd40$G8uJd$,\e(B1\e$B$D$K7h$^$l$P8uJd%j%9%H$N%P%C%U%!%&%#%s\e(B
+         \e$B%I%&$r>C$9$h$&$K$7$?!#$^$?!$8uJd$,\e(B1\e$B2hLL$K<}$^$i$J$$$H$-$O%9%/\e(B
+         \e$B%m!<%k$9$k$h$&$K$7$?!#\e(B
+
+1998-11-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] imap4, multi, dop \e$B$N\e(B msg-num \e$B$b\e(B integer \e$B2=!#\e(B
+
+1998-10-29  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [wl-*, elmo-*] msg-num \e$B$N\e(B integer \e$B2=!#\e(B
+       * [wl-*, elmo-*. smtp.el]
+         integer, symbol \e$B$NHf3S$r\e(B eq, memq, assq, rassq \e$B$G$*$3$J$&!#\e(B
+       * [elmo-archive]
+         macro \e$B$N5-=R0LCV$rA0$NJ}$K0\F0!#\e(B
+
+1998-10-29  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] \e$B%*%U%i%$%s!&%P!<%A%c%k\e(B(imap4 \e$B$N$_\e(B...)\e$B!#\e(B
+       * [elmo] \e$B%*%U%i%$%s!&%U%)%k%@@8@.!#\e(B
+
+1998-10-28  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.7.4 - "Luka"
+
+1998-10-27  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$NJ8;z%3!<%I$r\e(B JIS \e$B$K$7$?!#\e(B
+       * [elmo] \e$B%*%U%i%$%s!&%j%U%!%$%k\e(B/\e$B%3%T!<!#\e(B
+       * \e$BF1$8%U%)%k%@$X$N%j%U%!%$%k\e(B/\e$B%3%T!<$r6X;_$7$?!#\e(B
+       * unplugged \e$B$G\e(B 'i' (prefetch) \e$B$9$k$H%5%^%j$,$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * burst \e$B$r<BAu!#\e(B
+       * [elmo] FLIM \e$B$G$O\e(B (require 'mel-b) \e$B$9$k$N$r$d$a!"\e(B
+         mel-find-function \e$B$G\e(B base64 decoder \e$B$r8+$D$1$k$h$&$K$7$?!#\e(B
+
+1998-10-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * bbdb-wl.el \e$B$G!"\e(Bbbdb-user-mail-names \e$B$,8z$$$F$k$H$-$K\e(B To \e$B$K\e(B
+         encoded-word \e$B$,$"$k$H$^$:$$$N$r=$@5!#\e(B
+
+1998-10-26  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [elmo] wl-match-buffer->elmo-match-buffer.
+
+1998-10-25  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-nntp.el \e$B$N\e(B typo \e$B=$@5!#\e(B
+
+1998-10-25  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$K2CI.\e(B/\e$B=$@5!#\e(B
+       * wl-generate-mailer-string-func \e$B$N\e(B default \e$B$r\e(B
+         'wl-generate-user-agent-string \e$B$K$7$?!#\e(B
+       * Folder 'F' -- \e$B%-%e!<$K$"$k%a%C%;!<%8$rAw?.!#\e(B
+       * \e$B?75,JQ?t\e(B wl-auto-flush-queue \e$B%H%0%k$7$?$H$-$K<+F0E*$K%-%e!<$rAw$k!#\e(B
+       * \e$B?75,JQ?t\e(B wl-draft-enable-queueing\e$B!#\e(Boffline \e$B$J$iAw?.$r%-%e!<%$%s%0!#\e(B
+       * \e$B%*%U%i%$%s%a%C%;!<%8Aw?.!#\e(B
+       * Folder \e$B$G\e(B'\e$B%4%_H"$r6u$K\e(B'\e$B$7$?$"$H!"%5%^%j$,$*$+$7$/$J$k$N$r=$@5!#\e(B
+
+1998-10-24  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * bbdb-wl.el \e$B$G!"\e(Bbbdb-user-mail-names \e$B$,8z$/$h$&$K$7$?!#\e(B
+
+1998-10-24  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-archive.el \e$B$G\e(B 'tgz \e$B0J30$G$OFI$a$J$/$J$C$F$?$N$r=$@5!#\e(B
+
+1998-10-24  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$BB??t$N%K%e!<%9%0%k!<%W%U%)%k%@$N%A%'%C%/=hM}$rBgI}$K9bB.2=$7$?!#\e(B
+       * \e$BJQ?t\e(B `wl-folder-newsgroups-alist' \e$B$rG[Ns\e(B(vector)
+         `wl-folder-newsgroups-hashtb' \e$B$KJQ99$7$?!#\e(B
+       * [elmo-nntp] xover \e$B$KBP1~$7$F$$$J$$%K%e!<%9%5!<%P$G$b\e(B overview
+         \e$B>pJs$,<hF@=PMh$k$h$&$K$7$?!#\e(B
+       * wl-match-buffer \e$B$r\e(B elmo-match-buffer \e$B$KJQ$($F!$\e(Bwl-match-buffer
+         \e$B$O$=$N\e(B alias \e$B$H$7$?!#$^$?!$\e(Belmo-match-string \e$B$r?75,:n@.$7!$\e(B
+         wl-match-string \e$B$O$=$N\e(B alias \e$B$H$7$?!#\e(B
+       * wl-make-hash, wl-get-hash-val, wl-set-hash-val \e$B$r\e(B elmo \e$B$K0\$7!$\e(B
+         wl \e$B$N4X?tL>$O$=$l$>$l\e(B elmo \e$B$NBP1~$9$k4X?t$N\e(B alias \e$B$H$7$?!#\e(B
+       * elmo-msgdb-get-field-value \e$B$,\e(B2\e$BEY\e(B narrow-to-region \e$B$9$k$N$G!$\e(B
+         SEMI \e$B$N>l9g$K\e(B std11-fetch-field \e$B$,$"$k$J$i$=$l$r;H$&$h$&$K$7$?!#\e(B
+
+1998-10-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-use-semi \e$B$N\e(B default \e$B$r\e(B (module-installed-p 'mime-view) \e$B$K$7$?!#\e(B
+       * wl-from \e$B$N\e(B default \e$B$r\e(B user-mail-address \e$B$K$7$?!#\e(B
+       * \e$B3+;O;~$K\e(B wl-plugged \e$B$,\e(B nil \e$B$J$i%*%U%i%$%s>uBV$+$i3+;O\e(B
+         \e$B$9$k$h$&$K$7$?!#\e(B
+       * view-cache \e$B$N%;!<%V;~$K0l;~E*%^!<%/$r>C$9$h$&$K$7$?!#\e(B
+       * Summary \e$B$KL$=hM}$N\e(B refile, delete, copy \e$B$N%^!<%/$,$"$k$N$K\e(B
+         \e$B=*N;$7$h$&$H$7$?>l9g$O=hM}$9$k$+$I$&$+3NG'$9$k$h$&$K$7$?!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f=u8@\e(B)
+
+1998-10-22  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [elmo] localdir \e$B$r$A$g$C$H$@$19bB.2=!#\e(B
+
+1998-10-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.7.3 - "Kyrie"
+       * access \e$B%U%)%k%@$N%U%)%k%@>pJs%U%!%$%k$N\e(B old compatibility
+         \e$B$N%A%'%C%/ItJ,\e(B(?)\e$B$r=$@5!#\e(B
+       * wl-thread-jump-to-prev-unread \e$B$r<BAu!#\e(B
+       * +foo \e$B$H\e(B +foo/ \e$B$,6&B8$G$-$J$$LdBj$r=$@5!#\e(B
+
+1998-10-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$K2CI.!#\e(B
+       * User-Agent \e$B%U%#!<%k%I$N@8@.$O4X?t\e(B wl-generate-user-agent-string \e$BFb$G\e(B
+         \e$B$N$_9T$J$&$h$&$K$7$?!#\e(Bmime-edit-insert-user-agent-field \e$B$,\e(B t \e$B$J$i\e(B
+         mime-edit-user-agent-value \e$B$NCM$r;H$&!#\e(B
+       * \e$B%^%k%A%U%)%k%@$G%a%C%;!<%8$,8:$C$?$H$-$K%9%l%C%I9=B$$,$*$+$7$/$J$k\e(B
+         \e$B$3$H$,$"$C$?$N$r=$@5!#\e(B
+       * \e$BJD$8$?%9%l%C%I$N%"%C%W%G!<%H;~$K%O%$%i%$%H$,$*$+$7$+$C$?$r=$@5!#\e(B
+       * [elmo] mmelmo-imap4 \e$B%P%C%/%(%s%I$,%a%=%C%I\e(B
+         content-entity \e$B$G%(%i!<$rH/@8$9$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+1998-10-18  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * eq \e$B$G:Q$`$H$3$m!J\e(Bsymbol \e$B$NHf3S!K$^$G\e(B equal \e$B$,;H$o$l$F$?$N$,\e(B
+         \e$BL\N)$C$?$N$G!"L@$i$+$K\e(B symbol \e$B$NHf3S$H$o$+$k$H$3$m$rCV49$7$?!#\e(B
+       * wl-folder-accessible-p() \e$B$K\e(B 'archive \e$B$r2C$($?!#\e(B
+       * wl-ja.texi \e$B$N%"!<%+%$%V%U%)%k%@It$N5-=R$N=$@5!#\e(B
+
+1998-10-18  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * fldmgr \e$B$G3F<oA`:n$r9T$&$H!$%0%k!<%W$NL$FI?t\e(B/\e$BAm?t$rH?1G$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * fldmgr \e$B$G%0%k!<%W$NDI2C$r$7$?:]!$\e(Bwl-folder-entity-id-name-alist
+         \e$B$K%0%k!<%W$N\e(B entity \e$B$,DI2C$5$l$J$$$N$r=$@5$7$?!#\e(B
+       * wl-folder-entity-alist \e$B$r\e(B finfo \e$B$r;H$C$FI|85$5$;$k$H$-!$F1$8\e(B
+         entity \e$B$,J#?t$"$k$H\e(B1\e$B$D$7$+I|85$5$l$J$$$N$r=$@5$7$?!#\e(B
+       * \e$B%0%k!<%W$NL$FI?t$rH?1G$9$k:]!$%0%k!<%W$,2<$N3,AX$K$"$C$FI=<($5\e(B
+         \e$B$l$F$$$J$$>l9g!$\e(BDesktop \e$B%0%k!<%W$KB?=E$KL$FI?t$,DI2C$5$l$k$N$r\e(B
+         \e$B=$@5$7$?!#\e(B
+       * wl-fldmgr.el \e$B$N%3!<%I$N\e(B refine (equal->eq \e$BEy$r4^$`\e(B)\e$B!#\e(B
+
+1998-10-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] capability \e$B$N%A%'%C%/$,\e(B XEmacs \e$B0J30$G$&$^$/F0$+$:!"\e(B
+         IMAP4rev1 \e$B$G$b\e(B IMAP4 \e$B$H4*0c$$$9$k$h$&$K$J$C$F$$$?$?$a!"\e(B
+         References \e$B$r;H$C$?%9%l%C%I2=$,\e(B XEmacs \e$B0J30$GF0$+$J$/$J$C$F\e(B
+         \e$B$7$^$C$F$$$?$N$r=$@5!#\e(B
+       * [fldmgr] \e$B%U%)%k%@$N%;!<%V;~!"\e(B.folders \e$B$,B8:_$7$J$$$H$-!"\e(B
+         .bak \e$B$K\e(B rename-file \e$B$7$h$&$H$7$F%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * convert-standard-filename \e$B$G%U%!%$%kL>$K;H$($J$$J8;z$rCV$-49$($k\e(B
+         \e$B$h$&$K$7$?!#\e(BMule for Win32 \e$B$X$OFH<+$KBP1~!#\e(B
+       * [elmo] \e$B%M%C%H%o!<%/%W%m%;%9$N\e(B process-status \e$B$,\e(B 'exit \e$B$N$H$-$b\e(B
+         \e$B%3%M%/%7%g%s$rD%$j$J$*$9$h$&$K$7$?!#\e(B
+
+1998-10-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] XEmacs 21.2 \e$B$G\e(B backspace \e$B$J$I$N\e(B event \e$B%-!<$N0lIt$r\e(B
+         char \e$B$H$7$FFI$a$k$h$&$K$9$k%3!<%I$r\e(B x-pgp-sig \e$B$+$i%Q%/$i$;$F\e(B
+         \e$B$$$?$@$$$?!#\e(B
+
+1998-10-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.7.2 - "Joanna"
+       * [elmo] RFC1730 \e$B$G$b$=$3$=$3F0$/$h$&$K$7$?!#\e(B
+       * \e$B%+%l%s%H%U%)%k%@$N%O%$%i%$%H$N\e(B regexp \e$B=$@5!#\e(B
+       * XEmacs \e$B$N%Q%C%1!<%8$H$7$F%$%s%9%H!<%k$G$-$k$h$&$K$7$?!#\e(B
+         (make package; make install-package)
+       * easymenu \e$B$O\e(B require \e$B$9$k$h$&$K$7$?!#\e(B
+
+1998-10-12  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-open-folder \e$B$,@5>o$KF0:n$7$J$/$J$C$?$N$r=$@5$7$?!#\e(B
+       * wl-folder-unread-regex \e$B$N0z?t\e(B group \e$B$,\e(B nil \e$B$NF0:n$,JQ$o$C$?$N\e(B
+         \e$B$r=$@5$7$?!#\e(B
+       * wl-folder-move-cur-folder \e$B$,\e(B non-nil \e$B$N;~$NF0:n$,JQ$o$C$?$N$r\e(B
+         \e$B=$@5$7$?!#\e(B
+       * \e$BF1$8\e(B entity \e$B$,J#?t$"$C$?>l9g!$\e(Bwl-folder-update-unread \e$B$G$O\e(B
+         wl-folder-entity-alist \e$B$d%0%k!<%W$NI=<(?t$,\e(B1\e$B$D$N\e(B entity \e$B$7$+99\e(B
+         \e$B?7$5$l$J$$$N$r=$@5$7$?!#\e(B
+
+1998-10-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Folder \e$B%A%'%C%/;~$KL$FI?t$N99?7$,$*$+$7$+$C$?$N$r=$@5\e(B
+       * wl-thread- \e$B7O$N%3%^%s%I$G:G8e$N%a%C%;!<%8$,=hM}$5$l$J$/$J$C$F\e(B
+         \e$B$7$^$C$?$N$r=$@5!#\e(B(\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f;XE&\e(B)
+       * 0.7.1 - "In Too Deep"
+
+1998-10-11  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo-archive.el] \e$B%U%)%k%@$N:G8e$,\e(B "/" \e$B$@$H\e(B .folders \e$B$K\e(B
+         \e$B=q$1$J$$$N$G%U%)%k%@$NBh\e(B 3 \e$B%9%Z%C%/\e(B (\e$B=q8KFb$N%Q%9>pJs\e(B)\e$B$NKvHx$K\e(B
+         "/" \e$B$r$D$1$J$/$F$b$h$$$h$&$K$7$?!#\e(B
+       * [elmo] \e$B%*%U%i%$%s\e(B FCC\e$B!#\e(B
+       * Message-ID \e$B$,$J$$$H$-$K\e(B Summary \e$B$,$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * Folder mode \e$B$G%0%k!<%W$K$bL$FI?tI=<(!#\e(B
+       * [im-wl.el] Message-Id -> Message-ID\e$B!#\e(B
+
+1998-10-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [elmo] filter\e$B$d\e(Bmulti\e$B%U%)%k%@Fb$N\e(B localdir \e$B%a%C%;!<%8$O\e(B
+         cache \e$B$7$J$$$h$&$K$7$?!#\e(B
+       * \e$B%"%/%;%9%0%k!<%W$O\e(B rename \e$B$G$-$J$$$h$&$K$7$?!#\e(B
+       * save \e$B;~$K;HMQ$5$l$F$$$J$$\e(B petname \e$B$O:o=|$9$k$h$&$K$7$?!#\e(B
+
+1998-10-11  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       [elmo-archive.el]
+       * elmo-archive-header-delimiter \e$B$r=PNO$7$J$$%"!<%+%$%P!J\e(BGNU tar \e$B$J$I!K\e(B
+         \e$B$N>l9g!"\e(Blist-folder-subr() \e$BFbIt$GL58B%k!<%W$K4Y$k$N$r=$@5$7$?!#\e(B
+       * \e$B1\Mw@lMQ%b!<%I$r@Q6KE*$K%5%]!<%H$9$k$?$a!"=q8K$N2~JQ$rH<$J$&4X?t$K$D\e(B
+         \e$B$$$F$O%a%=%C%I$,Dj5A$5$l$F$k$+$I$&$+$rD4$Y$k$3$H$G%(%i!<$rH/@8$9$k$h\e(B
+         \e$B$&$K$7$?!#\e(B
+       * Info-Zip \e$B$,:G$bE,$7$F$$$k$H$N7kO@$+$i!"%G%U%)%k%H$r\e(B 'zip \e$B$K$7$?!#\e(B
+       * tar => gtar
+       [elmo-util.el]
+       * elmo-archive-get-spec() \e$B$G%I%i%$%V%l%?!<$b<hF@$G$-$k$h$&=$@5$7$?!#\e(B
+       [im-wl.el]
+       * Message-ID: \e$B$NIU$1J}$,JQ99$5$l$?$?$a!"\e(Bim-wl.el \e$B$r;H$C$F$$$k>l9g$K\e(B
+         Fcc \e$B$9$k$H\e(B Fcc \e$B$5$l$?%a%C%;!<%8$K\e(B Message-ID: \e$B$,$D$+$J$$IT6q9g$,H/@8\e(B
+         \e$B$7$F$$$?$N$r=$@5$7$?!#\e(B
+       * more typo fix (s/strucuture/structure/g)
+
+1998-10-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-temp-mark-region \e$B$NHO0O$rJQ99!#\e(B
+         (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f;XE&\e(B)
+
+1998-10-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo-archive.el]
+         ':'->';', ange-ftp/efs \e$B$X$NBP1~\e(B, tar+gz \e$BBP1~\e(B, \e$B=q8KFb%Q%9>pJs!#\e(B
+
+1998-10-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B$h$/8F$P$l$k\e(B defun \e$B$r\e(B defsubst \e$B$KCV$-49$($?\e(B (scan \e$B$NB.EY$,Ls\e(B 20%
+         \e$B$/$i$$8~>e\e(B)\e$B!#\e(B
+
+1998-10-08  pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp>
+
+       * wl-summary-temp-mark-copy \e$B$N%a%C%;!<%8$r=$@5!#\e(B
+
+1998-10-07  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Message-Id -> Message-ID\e$B!#\e(B
+       * wl-highlight-message \e$B$G!"\e(Bre-search-forward \e$B$N0z?t$,B-$j$J$+$C$?\e(B
+         \e$B$?$a$K%(%i!<$,5/$3$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+1998-10-05  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B$$$/$D$+$N%a%C%;!<%8$N\e(B typo \e$B$r=$@5!#\e(B
+        (\e$B;086$5$s\e(B<mihara@prd.fc.nec.co.jp> \e$B$h$j8f;XE&\e(B)
+       * 0.7.0 - "Hungry Heart"
+
+1998-10-04  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%K%e!<%95-;v$N9TF,$K$"$k%I%C%H\e(B(.)\e$B$r:o$k=hM}$,4V0c$C$F$$$?\e(B(\e$BM>J,$J\e(B
+         \e$B%I%C%H$,IU$$$?$^$^$K$J$k\e(B)\e$B$N$r=$@5$7$?!#\e(B
+       * 1\e$BDL$b5-;v$,$J$$%K%e!<%9%0%k!<%W$G$O\e(B elmo-nntp-list-folder \e$B$NLa$jCM\e(B
+         \e$B$,\e(B nil \e$B$K$J$k$h$&$K$7$?!#\e(B
+
+1998-10-04  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-ja.texi \e$B$N4V0c$$$r=$@5!#\e(B
+
+1998-10-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] \e$B%^!<%/!&%*%U%i%$%s=hM}$N<B83E*<BAu!#\e(B
+       * [elmo] \e$B?75,%U%!%$%k\e(B elmo-dop.el\e$B!#%*%U%i%$%s=hM}MQ%b%8%e!<%k!#\e(B
+       * [elmo] IMAP \e$B%U%)%k%@$G$OL$FI\e(B/\e$B4{FI\e(B/\e$B=EMW%^!<%/A`:n$r%5!<%P$K\e(B
+         \e$BH?1G$5$;$k$h$&$K$7$?!#\e(B
+
+1998-10-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%0%k!<%W$G$b\e(B petname \e$B$r$D$1$i$l$k$h$&$K$7$?!#\e(B
+       * [elmo] auth->login \e$B@ZBX$(;~!"\e(By-or-n-p \e$B$G3NG'$9$k$h$&$K$7$?!#\e(B
+        (\e$BC.@P\e(B \e$B$5$s\e(B<taru@sunicom.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+       * [elmo] imapd \e$B$N\e(B capability \e$B$r%A%'%C%/$9$k$h$&$K$7!"\e(Bauthenticate \e$B$,\e(B
+         \e$B$G$-$J$1$l$P\e(B 'auth' \e$B$G$b\e(B 'login' \e$B$GG'>Z$9$k$h$&$K$7$?!#\e(B
+       * [elmo] append \e$B;~$K\e(B append \e$B2DG=$+$I$&$+%A%'%C%/$9$k$h$&$K$7$?!#\e(B
+       * [elmo] Cyrus imapd \e$B$KBP1~!#\e(B
+
+1998-10-03  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-archive-default-type \e$B$,;2>H$5$l$F$J$+$C$?$N$r=$@5!#\e(B
+       * \e$B%O!<%I%j%s%/2DG=$+$I$&$+$rD4$Y$k$N$K!"\e(Badd-name-to-file<f> \e$B$,$"$k$+\e(B
+         \e$B$I$&$+$rD4$Y$k$N$OA4$/0UL#$,$J$$$N$G!"\e(Bmake-symbolic-link<f> \e$B$rD4$Y\e(B
+         \e$B$k$3$H$GBeMQ$7$?!#\e(B
+       * elmo-archive-list-folders<f> \e$B$G:FMxMQ$9$k$?$a$K\e(B
+         elmo-localdir-list-folders-subr<f> \e$B$G$N@55,I=8=$rJQ99!#\e(B
+       * elmo-archive-copy-msgs() \e$B$r<BAu!#\e(Blocaldir => archive \e$B$N;~$@$1M-8z!#\e(B
+
+1998-10-02  pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp>
+
+       * Mule for win32 \e$B$G$bG'<1$G$-$k$h$&\e(B wl-highlight.el \e$B$N?'Dj5A$r\e(B
+         \e$B=$@5!#\e(B
+
+1998-10-02  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+           OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-ja.texi \e$B$N4V0c$$$r=$@5!#\e(B
+
+1998-10-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * citation \e$B$N%O%$%i%$%H?'$r0zMQ$4$H$KJQ$($k$h$&$K$7$?!#\e(B
+         (\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * wl-highlight-message-cited-text -> \e$BGQ;_!#\e(B
+       * 0.6.6 - "Get It On"
+
+1998-09-30  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-archive.el 0.09\e$B!#\e(B
+
+1998-09-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Folder, Summary \e$B$N%a%K%e!<%P!<$r$A$g$C$H@0M}!#\e(B
+       * Message-Id \e$B$OAw?.;~$K<+F0E*$K$D$1$k$h$&$K$7$?!#\e(B
+
+1998-09-30  Masato Taruishi <taru@sunicom.co.jp>
+
+       * [elmo] user-login-name -> (user-login-name) \e$B$N=$@5!#\e(B
+
+1998-09-30  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%"%/%;%9%0%k!<%W$G$b\e(B fldmgr \e$B$+$i$"$@L>$rDI2C$G$-$k$h$&$K$7$?!#\e(B
+
+1998-09-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * .folders \e$B$K$"$@L>$N$_$rDj5A$9$k\e(B syntax \e$B$rDI2C!#\e(B
+       * \e$B%3%^%s%I!"\e(Bwl-message-refer-article-or-url \e$B$G\e(B browse-url \e$B$r8F$V$N\e(B
+         \e$B$r$d$a!"\e(Btm/SEMI \e$B$N\e(B button-dispatcher \e$B$r8F$V$h$&$K$7$?!#\e(B
+
+1998-09-29  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-forward \e$B$GF|K\8l%5%V%8%'%/%H$,2=$1$k$N$r=$@5!#\e(B
+         (\e$BIpED$5$s\e(B <takeda@kumagaya.nikon-sys.co.jp> \e$B$h$j8f;XE&\e(B)
+       * mime-edit-insert-user-agent-field \e$B$,\e(B t \e$B$J$i\e(B
+         mime-edit-user-agent-value \e$B$NCM$r;H$C$F\e(B User-Agent:
+         \e$B%U%#!<%k%I$rA^F~$9$k$h$&$K$7$?!#\e(Bnil \e$B$J$i=>MhDL$j!#\e(B
+
+1998-09-28  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * elmo-util.el \e$B$K\e(B (require 'cl) \e$B$rDI2C!#\e(B
+         (Hermit-chan (\e$B$O$_$A$c$s\e(B) <hermit@tomato.saino.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * elmo-filter-msgdb-create \e$B$N4V0c$$$r=$@5!#\e(B
+         (\e$B1|@>$5$s\e(B<fuji0924@mbox.kyoto-inet.or.jp> \e$B$N8f;XE&\e(B)
+
+1998-09-28 Masato Taruishi <taru@sunicom.co.jp>
+
+       * [elmo] IMAP\e$B$N%0%k!<%W%U%)%k%@$r\e(B fetch \e$B$9$k$H$-$K%f!<%6L>$r\e(B
+         \e$BIU2C$7$F$J$$$?$a%f!<%6L>$N0c$&\e(BIMAP\e$B%5!<%P$X%"%/%;%9$9$k$HLdBj$,\e(B
+         \e$B5/$-$k$N$r=$@5!#\e(B
+
+1998-09-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%/%m%9%]%9%H5-;v$r4{FI=hM}$9$k;~$KL$FI?t$,@5>o$KH?1G$5$l$J$$$N$r\e(B
+         \e$B=$@5!#\e(B
+       * \e$B%/%m%9%]%9%HBP>]$N%a%C%;!<%8$,JD$8$?%9%l%C%I$NCf$K$"$C$F$bI=<($7\e(B
+         \e$B$F=hM}$9$k$h$&$K$7$?!#\e(B
+       * fldmgr \e$B$G%U%)%k%@$rDI2C$9$k$H$-!$%U%)%k%@>pJs$NH?1G$,$*$+$7$/$J$k\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1998-09-27  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t!"\e(Bwl-draft-reply-buffer-style\e$B!#\e(B
+         \e$BCM$,\e(B 'full \e$B$J$i!"%j%W%i%$;~$K%U%l!<%`A4BN$r;H$&\e(B
+         (\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$h$j8fMWK>\e(B)\e$B!#\e(B
+       * wl-mail-setup-hook \e$B$O\e(B reply \e$B;~$K$O%P%C%U%!$NFbMF$,3NDj$7$F$+$i\e(B
+         \e$B8F$V$h$&$K$7$?!#\e(B
+       * update \e$B;~$K;R$I$b%9%l%C%I?t$N\e(B update \e$B$,$*$+$7$+$C$?$N$r=$@5!#\e(B
+
+1998-09-26  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-ja.texi \e$B$K\e(B elmo-archive \e$B$N@bL@$rDI2C!#\e(B
+
+1998-09-25  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-lha \e$B2~$a\e(B elmo-archive.el(lha, info-zip \e$BBP1~\e(B)
+
+1998-09-25  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * HTML \e$B$N%a!<%k$r\e(B cite \e$B$9$k$H\e(B w3 \e$B$N\e(B keymap \e$B$N\e(B text-property \e$B$,\e(B
+         \e$B$D$$$F$-$F$7$^$&$N$r2sHr!#\e(B
+
+1998-09-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * update \e$B;~$N%O%$%i%$%HMQ\e(B regexp \e$B$,4V0c$C$F$$$?$N$r=$@5!#\e(B
+
+1998-09-23  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.6.5 - "Footloose"
+       * [elmo] Reference \e$B$H\e(B In-Reply-To \e$B$+$i\e(B message-id \e$B$r@Z$j=P$9\e(B
+         \e$B%b%8%e!<%k$N\e(B regexp \e$B$r=$@5!#\e(B
+       * XEmacs \e$B$G%a%C%;!<%8$N%I%i%C%0!u%I%m%C%W$,I|3h\e(B
+         (21.0 \e$B$N\e(B API \e$B$K9g$o$;$?\e(B)\e$B!#\e(B
+       * [elmo] imap4 \e$B$G!"%a%C%;!<%8HV9f$,Ht$s$G$$$k$H$-$K\e(B overview \e$B$N\e(B
+         \e$B@8@.$K<:GT$9$k$N$r2sHr\e(B(\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * elmo-multi-max-of-folder \e$B$,$J$$$HE\$i$l$k$N$r2sHr!#\e(B
+         (\e$B1|@>$5$s\e(B<fuji0924@mbox.kyoto-inet.or.jp>,
+          \e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$h$j8f;XE&\e(B)
+       * \e$B%9%l%C%I;^$N2D;k2=$KH<$&JQ99B??t!#\e(B
+         \e$B%9%l%C%IFb$N%a%C%;!<%8$,J#?t0lEY$K0\F0$7$?$H$-$KI=<($,$:$l$kLdBj\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)\e$B$bF1;~$K=$@5!#\e(B
+       * \e$B%9%l%C%I$N;^$r2D;k2=!#\e(B
+        (\e$BC.@P\e(B \e$B$5$s\e(B<taru@sunicom.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+       * \e$B?75,JQ?t\e(B:
+               wl-thread-indent-level
+               wl-thread-have-younger-brother-str
+               wl-thread-youngest-child-str
+               wl-thread-vertical-str
+               wl-thread-horizontal-str
+               wl-thread-space-str
+       * wl-summary-indent-level -> \e$BGQ;_!#\e(B
+
+1998-09-22  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-thread-goto-bottom-of-sub-thread :
+         \e$B%a%C%;!<%8$,;RB9$+$I$&$+!"8+$?$a$GH=CG$9$k$N$r$d$a$?!#\e(B
+       * [elmo] IMAP4 \e$B$@$H\e(B In-Reply-To \e$B$K$"$k\e(B Message-ID \e$B$r$b$H$K%9%l%C%I\e(B
+         \e$B$,:n$i$l$J$+$C$?$N$r=$@5!#\e(B
+       * \e$B%U%!%$%k%7%9%F%`$r$^$?$,$k\e(B local \e$B$I$&$7$N\e(B refile \e$B$,%(%i!<$K$J$k$N\e(B
+         \e$B$r=$@5!#\e(B(\e$B8eF#\e(B(\e$B$H\e(B) \e$B$5$s\e(B <pf21@pure.cpdc.canon.co.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-09-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%4%_H"%U%)%k%@$G$R$H$D$E$D40A4:o=|$7$h$&$H$9$k$HL58B%k!<%W$9$k\e(B
+         \e$B$N$r=$@5!#\e(B
+         (\e$B8eF#\e(B(\e$B$H\e(B) \e$B$5$s\e(B <pf21@pure.cpdc.canon.co.jp> \e$B$+$i$b8f;XE&\e(B)
+       * 0.6.4 - "Easy Lover"
+
+1998-09-21  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * elmo-lha \e$B$G!"\e(Bzip \e$B$J$I$G\e(B append \e$B;~$K\e(B directory \e$BL>$,$D$+$J$$\e(B
+         \e$B$h$&$K$7$?!#\e(B
+
+1998-09-21  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B?75,%P%C%/%(%s%I$r:n$k;~!"4{B8%3!<%I$G$O\e(B elmo-msgdb \e$B$@$1$O\e(B
+         \e$B%Q%C%AF~$l$J$$$H\e(B localdir \e$B$K$J$C$F$7$^$&$N$r2sHr$9$k:v!#\e(B
+
+1998-09-20  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * lha-prog-arg-get-list \e$B$@$1$,B>$N%*%W%7%g%sJQ?t$HHsBP>N$@$C$?$N$G!"\e(B
+         *-getlist \e$B$K=L$a$?!#\e(B
+       * LHA \e$B<B8z7A<0$,\e(B DOS\e$B!"J?>>\e(B OS/2 \e$BHG$H%*%W%7%g%s8_49$+$I$&$+$r\e(B
+         system-type \e$B$+$iH=Dj$7$F!"<+F0E*$KE,@Z$JCM$r%;%C%H$9$k$h$&$K$7$?!#\e(B
+       * lha-file-regexp \e$B$N\e(B UN|X \e$BHG\e(B LHA \e$BBP1~$K$h$j\e(B OS/2 \e$B$G%^%C%A$7$J$/$J$C$F\e(B
+         \e$B$$$?$N$G0BD>$KD>$7$?!#\e(B
+       * elmo-localdir-folder-path \e$B$H$NBP>N@-$+$i\e(B elmo-lha-basedir \e$B$r\e(B
+         elmo-lha-folder-path \e$B$KJQ99!#%G%U%)%k%H$O\e(B "~/Mail"
+       * \e$BB8:_$7$J$$\e(B LHA \e$B%U%)%k%@$N>l9g$K\e(B elmo-lha-list-folder() \e$B$+$i\e(B
+         elmo-lha-list-folder-subr() \e$B$r8F$S=P$7$F\e(B lha \e$B$,0[>o=*N;$7$F$3$1$F$?\e(B
+         \e$B$N$G!"B8:_$7$J$$;~$O%5%V%k!<%A%s$r8F$S=P$5$J$$$h$&$K$7$?!#\e(B
+       * elmo-lha-get-archive-name() \e$B$,%U%k%Q%9$N\e(B LHA \e$B%U%)%k%@$rDL$;$k$h$&$K\e(B
+         \e$B$7$?!#\e(B$/foo/bar \e$B$N$h$&$K\e(B "/" \e$B$G;O$^$k>l9g$O\e(B /foo/bar.lzh \e$B$H8+Pv$9!#\e(B
+         \e$B0l;~E*$KG$0U$N%U%)%k%@$r%^%&%s%H$7$?$$$H$-$J$I!#\e(B
+
+1998-09-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$r=q$$$F$_$?!#\e(B
+       * tm \e$B$G$O\e(B wl-use-folder-petname-on-modeline \e$B$rL5;k$7$F$$$?$N$r=$@5!#\e(B
+       * tm \e$B$G%*%U%i%$%s>uBV$G\e(B IMAP \e$B$N%a%C%;!<%8$rFI$b$&$H$9$k$H%a%C%;!<%8\e(B
+         \e$B%P%C%U%!$K%+!<%=%k$,9T$C$F$7$^$&$N$r=$@5!#\e(B
+
+1998-09-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Summary \e$B$N\e(B From \e$BIt$KF|K\8l$,$"$k$HJD$8$?%9%l%C%I$N\e(B update \e$B$,\e(B
+         \e$B$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * \e$BFCDj$N%^!<%/$@$1A4$F>C$9!"\e(B'U' wl-summary-unmark-all\e$B!#\e(B
+       * \e$B4X?t\e(B wl-thread-force-open \e$B$,A4A3%9%l%C%I$r3+$+$J$/$J$C$F$$$?$N$r\e(B
+         \e$BD>$9!#\e(B
+       * local->local, IMAP->IMAP \e$B$N%3%T!<$r:GE,2=!"%a%C%;!<%8$N0\F0$r\e(B
+         (\e$B$?$V$s\e(B)\e$B9bB.2=!#\e(B
+       * \e$B%*%U%i%$%s>uBV$G$b\e(B fldmgr \e$B$G\e(B IMAP4 \e$B%U%)%k%@$rIU$1B-$;$k$h$&$K$7$?!#\e(B
+       * ~/.folders \e$B$,L5$/$F$b5/F0$G$-$k$h$&$K$7$?!#\e(B
+       * \e$B%O%$%i%$%H$,2?$+JQ$@$C$?$N$rD>$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B
+       * partial filter \e$B$J$i\e(B unsync \e$B$r\e(B nil \e$B$K$;$:!"IaDL$K%A%'%C%/$9$k\e(B
+         \e$B$h$&$K$7$?\e(B (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$N8f=u8@\e(B)\e$B!#\e(B
+
+1998-09-18  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * Folder \e$B$NL$FI?t$r%A%'%C%/$9$k$?$S$KL$FI?t$,A}$($F9T$/$3$H$,$"$k\e(B
+         \e$B$N$r=$@5!#\e(B
+       * elmo-folder-info-alist \e$B$N\e(B save \e$B;~$K$O!$B8:_$7$J$$\e(B entity \e$B$N>pJs\e(B
+         \e$B$r:o=|$9$k$h$&$K$7$?!#\e(B
+       * fldmgr \e$B$G@hF,$K%U%)%k%@$rA^F~$7$?>l9g!$\e(Bwl-folder-entity-alist \e$B$N99\e(B
+         \e$B?7J}K!$,4V0c$C$F$$$?$N$r=$@5$7$?!#\e(B
+
+1998-09-18  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * \e$BB8:_$7$J$$\e(B lha folder \e$B$K\e(B refile \e$B$7$?$H$-$J$I$K!"?75,$K\e(B lha folder
+         \e$B$,:n@.$5$l$J$$$N$r=$@5!#\e(B
+
+1998-09-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.6.3 - "Danger Zone"
+
+1998-09-17  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo \e$B$G\e(B wl \e$B$N4X?t$r;HMQ$7$F$$$k$N$rD>$7$?!#\e(B
+       * Emacs-19 \e$B$NF1$8J8;zNs$NHf3S\e(B(equal)\e$B$G\e(B nil \e$B$K$J$k$3$H$,$"$k$?$a!$\e(B
+         \e$B0lIt$N\e(B member \e$B$H\e(B assoc \e$B$r\e(B wl-string-member \e$B$d\e(B wl-string-assoc \e$B$K\e(B
+         \e$BCV$-49$($?!#\e(Bwl-string-assoc \e$B$O\e(B \e$B?75,4X?t!#\e(B
+       * wl-folder-goto-first-unread-folder \e$B$G0lHV:G=i$N\e(B entity \e$B$,\e(B unread \e$B$N\e(B
+         \e$B>l9g!$$=$N%U%)%k%@$K0\F0$7$J$$$N$r=$@5$7$?!#\e(B
+       * folder mode \e$B$G$N%U%)%k%@$N8!:w;~$K0[$J$k\e(B petname \e$B$,%^%C%A$9$k$3$H$,\e(B
+         \e$B$"$k$N$r=$@5$7$?!#\e(B
+       * wl-summary-mark-as-read-region \e$B$N$_\e(B region \e$B$,9TKv$^$G$K$J$C$F$$$J$$\e(B
+         \e$B$N$G!$\e(Bwl-thread-mark-as-read \e$B$,@5>o$KF0:n$7$J$$$N$r=$@5$7$?!#\e(B
+       * \e$BJ#?t%U%)%k%@$N\e(B crosspost \e$B=hM}$K$*$$$F!$\e(Bmulti \e$B$d\e(B filter \e$B$,J#?t$K$J$C\e(B
+         \e$B$?%U%)%k%@$b9MN8$9$k$h$&$K$7$?!#$^$?!$4{FI=hM}$7$?%a%C%;!<%8?t$rI=\e(B
+         \e$B<($9$k$h$&$K$7$?!#\e(B
+       * wl-summary.el \e$B$K$*$$$F%m!<%+%kJQ?t\e(B children \e$B$,\e(B let \e$B$G@k8@$5$l$F$$$J\e(B
+         \e$B$+$C$?ItJ,$r=$@5!#\e(B
+
+1998-09-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * multi \e$B$N$H$-$K\e(B mmelmo-imap4 \e$B$,$*$+$7$+$C$?$N$r=$@5!#\e(B
+       * wl-summary-mark-as-read-all \e$B$,\e(B local,uncache \e$B$rL5;k$7$F$7$^$C$F$$$?\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1998-09-17  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-lha.el \e$B$r%^!<%8!#\e(B
+
+1998-09-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-thread-jump-to-next-unread \e$B$,\e(B hereto \e$B$rL5;k$7$F$$$?$N$r=$@5!#\e(B
+       * ':' \e$B$,%U%!%$%kL>$K;H$o$l$F$$$k$H$^$:$$>l9g$,$"$k$N$G;H$o$J$$$h$&\e(B
+         \e$B$K=$@5\e(B(\e$B1|@>$5$s\e(B<fuji0924@mbox.kyoto-inet.or.jp> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * elmo-lha-search \e$B$r<BAu!#\e(B
+       * elmo-lha.el \e$B$rB?>/=$@5!#\e(B
+
+1998-09-16  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B?75,%U%!%$%k\e(B elmo-lha.el\e$B!#\e(BLHA \e$BMQ%$%s%?%U%'!<%9!#\e(B
+
+1998-09-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.6.2 - "China Girl"
+       * wl-stay-folder-window \e$B$,\e(B nil \e$B$J$i\e(B E \e$B$G\e(B trash \e$B$r6u$K$9$k$H$-$b\e(B
+         \e$BJ,3d$7$J$$$h$&$K$7$?\e(B(\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-fix-timezone\e$B!#%5%^%j$N\e(B Timezone \e$B$r9g$o$;$k!#\e(B
+       * \e$B%9%l%C%IA`:n%3%^%s%I$r@0M}!#\e(B
+         \e$B$D$$$G$K%^!<%/A`:n!"%j!<%8%g%sA`:n%3%^%s%I$b@0M}!#\e(B
+
+1998-09-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-thread-open-close \e$B$G\e(B refile \e$B%^!<%/$D$-$N%9%l%C%I$r3+$$$?;~!"\e(B
+         refile \e$B@h$NI=<($,ESCf$^$G$7$+=P$J$+$C$?$N$r=$@5!#\e(B
+       * 'O' \e$B$G%3%T!<$r<B8=!#\e(B
+       * \e$B?75,JQ?t\e(B wl-highlight-summary-copied-face\e$B!#\e(B
+       * wl-summary-refer-article-or-url \e$B$r\e(B wl-message-refer-article-or-url
+         \e$B$H$7!"\e(BMessage \e$B$N%\%?%s\e(B 2 \e$B$K3d$jEv$F$?!#\e(B
+       * wl-summary-move-direction-downward \e$B$N\e(B default \e$B$r\e(B t \e$B$K!#\e(B
+
+1998-09-15  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * Emacs-19.34 \e$B$G$O!$\e(Bwl-fldmgr-unsubscribe \e$B$,@5>o$K5!G=$;$:!"\e(B
+         \e$B$^$?F1$8%0%k!<%W$KJ#?t$N\e(B entity \e$B$,:n$l$F$7$^$&IT6q9g$r=$@5!#\e(B
+       * XEmacs-21.0 \e$B$G$O!$\e(Bunsubscribe \e$B$d\e(B remove \e$B$5$l$?%U%)%k%@$K\e(B
+         text-property \e$B$,IU$/$N$r=$@5!#\e(B
+       * wl-folder.el \e$B$NJQ99$KH4$1$,$"$C$?$N$r=$@5!#\e(B
+       * \e$B0[$J$k\e(B folder \e$B$NF1$8\e(B petname \e$B$O8!=P$9$k$h$&$K$7$?!#\e(B
+       * access\e$B%0%k!<%W$G$b%U%)%k%@$NDI2C!$A^F~!$:o=|$,9T$($k$h$&$K$7$?!#\e(B
+       * access\e$B%0%k!<%W$GI=<($7$J$$%U%)%k%@$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+       * fldmgr \e$B$N\e(B region\e$BA`:n$r9bB.2=$7$?!#\e(B
+       * access \e$B%0%k!<%W$N\e(B fetching \e$B;~$K?7$7$$%U%)%k%@$H:o=|$5$l$?%U%)%k%@$,\e(B
+         \e$BJ,$+$k$h$&$K$7$?!#?7$7$$%U%)%k%@$O@hF,$KI=<($5$l$^$9!#\e(B
+       * wl-summary-move-order \e$B$,\e(B 'new \e$B0J30$@$H\e(Bwl-thread-jump-to-next-unread
+         \e$B$G%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * wl-summary-read \e$B$G<!$NL$FI%U%)%k%@$K0\F0$9$k$H$-!$0\F0@h%U%)%k%@$N\e(B
+         \e$BL$FI?t$,\e(B 0 \e$B$J$i!$$D$E$1$F<!$NL$FI%U%)%k%@$K0\$l$k$h$&$K$7$?!#\e(B
+       * folder mode \e$B$G%0%k!<%W$rA4$FJD$8$k%3%^%s%I\e(B(wl-folder-close-all)\e$B$H\e(B
+         \e$BA4$F3+$/%3%^%s%I\e(B(wl-folder-open-all)\e$B$rDI2C$7$?!#\e(B
+       * summary \e$B$K0\F0$7$?:]!$\e(Bfolder mode \e$B$N%+!<%=%k0LCV$rBP1~$5$;$k$h$&$K\e(B
+         \e$B$7$?!#%G%U%)%k%H$O$7$J$$!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-next-no-unread (default \e$B$O\e(B t)
+       * \e$B?75,JQ?t\e(B wl-summary-exit-next-move (default \e$B$O\e(B t)
+       * \e$B?75,JQ?t\e(B wl-folder-move-cur-folder (default \e$B$O\e(B nil)
+       * \e$B?75,JQ?t\e(B wl-highlight-folder-killed-face (default \e$B$O\e(B gray50)
+       * fldmgr \e$B$N5!G=$r@bL@$9$k?75,%U%!%$%k!"\e(BREADME-fldmgr.ja\e$B!#\e(B
+
+1998-09-15 pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp>
+
+       * Summary \e$B$G\e(B o \e$B$d\e(B d \e$B$G%^!<%/$9$k$H$-$K\e(B
+         gnus, mh-e \e$BIw$K!"FI$s$G$$$kJ}8~$r0U<1$7$F0\F0$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-move-direction-downward \e$B$,\e(B t \e$B$N;~!"\e(B
+         \e$B:G8e$K<B9T$5$l$?\e(B p,P,n,N \e$B$N7k2L$G!"<!$N%a%C%;!<%8$,>e$+2<$+$r\e(B
+         \e$B@Z$jBX$($k!#\e(B
+
+1998-09-13  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B4X?t\e(B wl-summary-refer-article-or-url\e$B!#\e(B
+
+1998-09-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.6.1 - "Billie Jean"
+       * \e$B%9%l%C%I$r3+JD$7$F$b0l;~E*%^!<%/$,>C$($J$$$h$&!"\e(Bdelete mark,
+         temp mark \e$B$rJQ?t$KJ];}$9$k$h$&$K$7$?!#\e(B
+       * wl-thread-jump-to-next-unread \e$B$NCY$5$r$@$$$V7Z8:!#\e(B
+       * \e$B%9%l%C%I$r:o=|$7$?$H$-$KB>$N%a%C%;!<%89T$b>C$7$F$7$^$&>l9g$,$"$k\e(B
+         \e$BIT6q9g$rD>$9!#\e(B
+         (\e$B?9;3$5$s\e(B <taka@airlab.cs.ritsumei.ac.jp> \e$B$N8f;XE&$K$h$k!#\e(B)
+       * wl-address.el \e$BCf$N\e(B insert-file \e$B$r\e(B insert-file-contents \e$B$KCV$-49$(\e(B
+         \e$B$k$N$r$o$9$l$F$?!#\e(B
+         (\e$B?9;3$5$s\e(B <taka@airlab.cs.ritsumei.ac.jp> \e$B$N8f;XE&$K$h$k!#\e(B)
+       * wl-fldmgr.el \e$B$,\e(B write-file-as-mime-charset \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+       * wl-fldmgr.el \e$B$,\e(B alist.el \e$B$r\e(B require \e$B$7$J$$$h$&$K$7$?!#\e(B
+       * wl-fldmgr.el \e$B$r%^!<%8!#\e(B
+
+1998-09-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,%U%!%$%k\e(B wl-fldmgr.el\e$B!#\e(B
+         \e$B%U%)%k%@%b!<%I$+$i\e(B .folders \e$B$NJT=8$,2DG=$K$J$C$?!#\e(B
+       * wl-folder.el \e$B$GF1$8\e(B petname \e$B$,$"$k$H$-$NIT6q9g$rD>$9!#\e(B
+
+1998-09-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * mt \e$B$N$H$-$K%9%l%C%I$r3+$/$h$&$K$7$?!#\e(B
+        (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+       * 0.6.0 - "Angelia"
+
+1998-09-10  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+        * wl-summary-jump-to-parent-message \e$B$G;2>H@h$N\e(B msg-id \e$B$rF@$k$H$-$K6u\e(B
+          \e$BGr$,4^$^$l$k$?$a$K!$?F%a%C%;!<%8$,;2>H$G$-$J$$>l9g$,$"$k$N$r=$@5$7\e(B
+          \e$B$?!#\e(B
+        * wl-parse-newsgroups \e$B$G\e(B split-string \e$B$NBe$o$j$K\e(B wl-parse \e$B$r;H$&$h$&\e(B
+          \e$B$K$7$?!#\e(B
+
+1998-09-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * pick \e$B$5$l$?%a%C%;!<%8$N%9%l%C%I$O3+$/$h$&$K$7$?!#\e(B
+       * thread \e$BA`:nMQ$N%-!<%P%$%s%I$r\e(B
+         '/' -> wl-thread-open-close
+         '[' -> wl-thread-open-all
+         ']' -> wl-thread-close-all
+         \e$B$H$9$k!#\e(B
+       * wl-thread.el \e$B$K:GDc8BI,MW$J%b%8%e!<%k$,$H$j$"$($:40@.!#\e(B
+       * \e$B?75,JQ?t\e(B wl-thread-insert-opened\e$B!#\e(B
+         t   \e$B$J$i%9%l%C%I$r3+$$$FA^F~!#\e(B
+         nil \e$B$J$i%9%l%C%I$rJD$8$FA^F~!#%G%U%)%k%H$O\e(B nil \e$B$H$7$?!#\e(B
+       * elmo \e$B$G$b0lIt\e(B append \e$B$r\e(B nconc \e$B$KJQ99$G$-$k$H$3$m$rCV$-49$($F$_$?!#\e(B
+
+1998-09-09  Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp>
+
+       * wl-folder.el \e$B$G\e(Bappend\e$B$7$F$$$k$H$3$m$GJQ99$G$-$kItJ,$r\e(Bnconc\e$B$G\e(B
+         \e$BCV$-49$($?!#\e(B
+       * wl-address.el \e$BCf$N\e(B insert-file \e$B$r\e(B insert-file-contents \e$B$KCV$-49$($?!#\e(B
+
+1998-09-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B4X?t\e(B wl-address-setup \e$B$G\e(B file-exists-p \e$B$H\e(B file-readable-p \e$B$N\e(B and \e$B$r\e(B
+         \e$B<h$C$F$$$?$N$r\e(B file-exists-p \e$B$N$_$GH=Dj$9$k$h$&$K$7$?!#\e(B
+         (\e$BC.@P\e(B \e$B$5$s\e(B Masato Taruishi <taru@sunicom.co.jp> \e$B$h$j8f;XE&\e(B)
+       * \e$B?75,JQ?t\e(B wl-use-folder-petname-on-modeline \e$B$,\e(B t (default \e$B$O\e(B t)\e$B$J$i\e(B
+         modeline \e$B$K\e(B folder \e$B$N$"$@L>$r=P$9$h$&$K$7$?!#\e(B
+       * \e$B%5%^%j\e(B/\e$B%a%C%;!<%8$N%^%&%9%[%$!<%k40A4\e(B(?)\e$BBP1~!#\e(B
+       * multi \e$B$J$i%/%m%9%]%9%H$N5-;v$r>C$9$h$&$K$7$?!#\e(B
+       * [elmo] multi \e$B$O\e(B Date \e$B$G\e(B sort\e$B!#\e(B
+       * [elmo] mark-alist \e$B$r\e(B ("Message-Number" . "Mark") \e$B$N\e(B assoc list \e$B$K\e(B
+         \e$BJQ99!#\e(B
+
+1998-09-08  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * petname \e$B$N<hF@$G%a!<%kBgJ8;z>.J8;z$,6hJL$5$l$F$$$?$N$rL5;k$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * filter \e$B$d\e(B multi \e$B$K$J$k$H!$\e(Bimap, nntp,localdir \e$B$NH=CG$,$G$-$F$$$J$$\e(B
+         \e$BItJ,$,$"$C$?$N$r=$@5!#\e(B
+
+1998-09-06  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-folder-diff \e$B$G\e(B info-alist \e$B$NCM$rJQ99$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,%U%!%$%k\e(B wl-thread.el\e$B!#\e(Binteractive \e$B$J\e(B thread \e$BI=<(%b%8%e!<%k72!#\e(B
+        (\e$BC.@P$5$s\e(B Masato Taruishi <taru@sunicom.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+
+1998-09-05  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * .folders \e$B$G!"%U%)%k%@L>$N$&$7$m$K\e(B "" \e$B$G$/$/$C$F\e(B Petname \e$B$rDj5A\e(B
+         \e$B$G$-$k$h$&$K$7$?!#\e(B
+        (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp>\e$B!"\e(B
+         \e$BC.@P$5$s\e(B Masato Taruishi <taru@sunicom.co.jp> \e$B$N8fDs0F$K4p$E$/\e(B)
+
+1998-09-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.5.4 - "You Might Think"
+       * \e$B?75,JQ?t\e(B wl-force-fetch-folders \e$B$,\e(B non-nil \e$B$J$i%"%/%;%97?%U%)%k%@$r\e(B
+        \e$B3+$$$?$H$-$K>o$K:G?7$N%j%9%H$r<h$j$K9T$/$h$&$K$7$?!#\e(B
+        (\e$BC.@P$5$s\e(B Masato Taruishi <taru@sunicom.co.jp> \e$B$N8f=u8@$K4p$E$/\e(B)
+
+1998-09-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * unplugged \e$B$N$H$-$K\e(B wl-summary-{next|prev} \e$B$NF0:n$,$*$+$7$/$J$C$F\e(B
+         \e$B$$$?$N$rD>$9!#\e(B
+       * wl-draft-send-mail-with-smtp \e$B$H\e(B wl-draft-send-mail-with-qmail \e$B$b\e(B
+         wl-mail-send-pre-hook \e$B$rI>2A$9$k$N$r\e(B wl-do-fcc() \e$B<B9TA0$K!#\e(B
+       * [elmo] IMAP \e$B$G\e(B \Seen \e$B%U%i%0$,IU$$$F$$$?$i!"?75,%a!<%k$G$b4{FI\e(B
+         \e$B$"$D$+$$$9$k$h$&$K$7$F$_$?!#\e(B
+       * [elmo] elmo-imap4-list-folders \e$B$,$^$H$b$KF0$+$J$+$C$?$N$r=$@5!#\e(B
+         (\e$BC.@P$5$s\e(B Masato Taruishi <taru@sunicom.co.jp> \e$B$N8f;XE&$K$h$k\e(B)
+         \e$B$^$@IT40A4!)\e(B
+       * \e$BNc$($P\e(B /last:100/... \e$B$G\e(B 100 \e$B8D$J$+$C$?$i%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1998-09-03 Ishikawa Ichiro <ichiro@mail.ne.jp>
+
+       * Message-Id \e$B$dK\J8$,$J$$%a%C%;!<%8$,$"$k$H$-$NLdBj$r=$@5!#\e(B
+
+1998-09-03 TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Emacs20.2 \e$B$G\e(B update \e$B$,%(%i!<$K$J$kLdBj$r=$@5!#\e(B
+
+1998-09-03 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-init() \e$B$G\e(B wl-demo() \e$B$9$k%?%$%_%s%0$r\e(B ~/.wl \e$B%m!<%I8e$K!#\e(B
+       * im-wl.el \e$B$G\e(B wl-mail-send-pre-hook \e$B$rI>2A$9$k$N$r\e(B wl-do-fcc() \e$B<B9T\e(B
+         \e$BA0$K!#\e(B
+
+1998-09-02  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-draft-reply-without-argument-list \e$B$*$h$S\e(B
+         wl-draft-reply-with-argument-list \e$B$rDI2C!"\e(Breply \e$B;~$N%G%U%)%k%H$r\e(B
+         \e$B%+%9%?%^%$%:$G$-$k$h$&$K$7$?!#\e(B
+       * ChangeLog \e$B$,4V0c$C$F$$$?$N$r=$@5!#\e(B
+        (\e$BB<ED$5$s\e(B Masahiro MURATA <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)
+
+       * 0.5.3 - "Xanadu"
+       * elmo-nntp-msgdb-create-as-numlist \e$B$N$3$H$r$o$9$l$F$?$N$G:n$C$?!#\e(B
+        (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-09-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,%U%!%$%k!"\e(BREADME-FOLDER.ja\e$B!#\e(B \e$B%U%)%k%@$N=q<0$r@bL@$9$k%a%b!#\e(B
+       * Summary \e$B$G\e(B "V" \e$BEy$G:n$i$l$?2>A[%U%)%k%@$+$iC&=P$9$k?75,%3%^%s%I!"\e(B
+         wl-summary-unvirtual \e$B$r\e(B "U" \e$B$K%P%$%s%I!#\e(B
+       * [elmo] elmo-filter-search \e$B$r$A$g$C$H$^$8$a$K<BAu!#\e(B
+       * [elmo] imap4 \e$B$N\e(B filter \e$B%9%Z%C%/MQ\e(B msgdb \e$B@8@.4X?t$G!"\e(B
+         \e$B%a%C%;!<%8Kh$K\e(B envelope \e$B>pJs$r\e(B fetch \e$B$9$k$N$r$d$a!"\e(B
+         \e$BEv3:ItJ,$N\e(B envelope \e$B$rA4It\e(B fetch \e$B$7$?$"$H%/%i%$%"%s%HB&$G\e(B filter
+         \e$B$9$k$h$&$K$7$F9bB.2=\e(B(\e$B%a%b%j;H$&$1$I\e(B)\e$B!#\e(B
+
+1998-09-01 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-auto-select-first \e$B$,\e(B nil \e$B$N$H$-!$:G=i$NL$FI%a%C%;!<%8$K\e(B
+         \e$BHt$V$h$&=$@5!#\e(B
+
+1998-09-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * update \e$B$N\e(B message \e$B$r=P$9%?%$%_%s%0$rJQ99!#\e(B
+       * [elmo] "Message-ID: <>" \e$B$@$H:o=|$G$-$J$$$H$$$&LdBj$,;D$C$F$$$?$N\e(B
+         \e$B$rD>$9!#\e(B
+
+1998-08-31  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.5.2 - "Wild Boys"
+       * [elmo] \e$B$^$?$b$d\e(B "Message-ID: <>" \e$B$@$HF0$+$J$/$J$C$F$$$?$N$rD>$9!#\e(B
+       * [elmo] localdir \e$B$G!"?t;z$,O"B3E*$G$J$$$HL5BL$K%k!<%W$r2s$k$N$r=$@5!#\e(B
+       * wl-summary-goto-folder \e$B$G!"\e(Bhighlight \e$B$N;EJ}$r4V0c$($F$$$?$N$rD>$9!#\e(B
+       * XEmacs \e$B$@$H\e(B .folders \e$B$K\e(B filter \e$B$r;XDj$7$F$$$k$H%(%i!<$K$J$k$N$r=$@5\e(B
+         (\e$B%"%$%3%s$N$3$H$o$9$l$F$?\e(B)\e$B!#\e(B
+        (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f;XE&$K4p$E$/JQ99\e(B)
+       * [elmo] elmo-folder-diff \e$B$G!"\e(Bfilter \e$B$N$H$-$K\e(B multi \e$B$r;XDj$7$F$$$k$H\e(B
+         \e$B%(%i!<$K$J$k$N$rD>$9!#\e(B
+        (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f;XE&$K4p$E$/JQ99\e(B)
+       * [elmo] elmo-filter-append-msg \e$B$rD>$9!#\e(B
+
+1998-08-28  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.5.1 - "Valotte"
+       * filter \e$B$NDI2C$KH<$&JQ99B??t!#\e(B
+       * \e$B?75,JQ?t\e(B wl-folder-no-save-list, wl-folder-save-list\e$B!#\e(B
+       * [elmo] \e$B?75,%U%!%$%k\e(B elmo-filter.el\e$B!#\e(B
+
+1998-08-26 Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.5.0 - "Uptown Girl"
+
+1998-08-25 Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * multi \e$B$NDI2C$KH<$&JQ99B??t!#\e(B
+       * [elmo] \e$B?75,%U%!%$%k\e(B elmo-multi.el\e$B!#\e(B
+       * elmo-cache-expire-by-size \e$B$r<BAu!#\e(B
+
+1998-08-25  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * XEmacs \e$B$GJ#?t\e(B frame \e$B$r;H$C$F$$$k>l9g!"\e(Bonly one window \e$B$J\e(B frame \e$B$G\e(B
+         wl-draft-hide \e$B$9$k$H!"\e(Bframe \e$B$4$H>C$($F$7$^$&$N$r2sHr!#\e(B
+
+1998-08-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Summary \e$B$,0lDj9T?t0J>e$"$k>l9g$O!":G=i$KI=<($9$k%a%C%;!<%8$N\e(B
+         \e$B$"$?$j$+$i2<$@$1%O%$%i%$%H$9$k$h$&$K$7$?!#\e(B
+        (\e$B0lDj?t\e(B = wl-summary-highlight-partial-threshold, default \e$B$O\e(B 1000)
+       * Summary \e$B$N\e(B highlight \e$B$G\e(B looking-at \e$B$N2s?t$r8:$i$7$F$A$g$C$H$@$1\e(B
+         \e$B9bB.2=\e(B(15% \e$B$/$i$$\e(B?)\e$B!#\e(B
+       * Summary \e$B$N\e(B \e$B%a%C%;!<%8HV9f$NI=<(7e?t$N@_Dj$rHFMQ2=!#\e(B
+
+1998-08-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-folder-info-save \e$B$,\e(B t \e$B$J$iL$FI>pJsI=<($b%j%8%e!<%`$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * elmo-folder-info-save -> wl-folder-info-save (default \e$B$r\e(B t \e$B$K\e(B)\e$B!#\e(B
+       * fdbinfo -> finfo.
+
+1998-08-23  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B3F%U%)%k%@$N:GBg%a%C%;!<%8HV9f$dL$FI?t$r\e(B cache \e$B$7$F\e(B
+         wl-folder-check-entity \e$B$r9bB.2=$7$?!#\e(B
+         elmo-folder-info-save \e$B$,\e(B non-nil \e$B$J$i\e(B save \e$B$7$F<!2s5/F0;~$bMxMQ\e(B
+         \e$B$9$k!#\e(B
+       * NetNews \e$B%U%)%k%@$K$F%/%m%9%]%9%H$5$l$?5-;v$rJL%U%)%k%@$G4{FI07$$$9$k\e(B
+        \e$B$h$&$K$7$?!#\e(B
+       * draft mode \e$B$K$F\e(B Newsgroup \e$BL>$,Jd40$G$-$k$h$&$K$7$?!#\e(B
+       * alias \e$B%U%!%$%k$N2r@O;~$K9TF,$N\e(B '#' ';' \e$B$r%3%a%s%H07$$$K$7$?!#\e(B
+       * wl-folder-empty-trash \e$B<B9T8e$K\e(B msgdb \e$B$b\e(B save \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-delete-all-msgs \e$B<B9T8e$K\e(B new-count \e$B$H\e(B unread-count
+         \e$B$r99?7$9$k$h$&$K$7$?!#\e(B
+       * new \e$B%a%C%;!<%8$rFI$^$:$K\e(B delete \e$B$9$k$H!$\e(Bmark msgdb \e$B$,99?7$5$l$J\e(B
+         \e$B$$$N$r=$@5$7$?!#$^$?\e(B wl-summary-exec-region \e$B<B9T8e$K\e(B
+         wl-folder-set-folder-updated \e$B$K$F%a%C%;!<%8?t$J$I$r99?7$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+
+1998-08-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * important-mark \e$B$r%0%m!<%P%k$K4IM}$9$k$h$&$K$7$?!#\e(B
+
+1998-08-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-jump-to-parent-msg-by-message-id \e$B$G!"Ev3:%a%C%;!<%8$,\e(B
+         \e$B0c$&%U%)%k%@$K$"$k>l9g$OHt$V$3$H$b$G$-$k$h$&$K$7$?!#\e(B
+         (XEmacs \e$B$G\e(B elmo-use-database \e$B$,\e(B t \e$B$N>l9g$N$_\e(B)
+       * [elmo] dbm \e$B%b%8%e!<%k72MQ?75,%U%!%$%k!"\e(Belmo-database.el \e$B:n@.!#\e(B
+         (XEmacs \e$B@lMQ\e(B)
+
+1998-08-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-mark-as-read-all \e$B$G$$$A$$$A%-%c%C%7%e$,B8:_$9$k$+$I$&$+\e(B
+         \e$B%A%'%C%/$7$J$$$h$&$K$7$?!#\e(B
+       * XEmacs \e$B8~$1\e(B Opening Logo \e$B$r0l?7!#\e(B
+       * [elmo] elmo-cache-search \e$B$r?7%-%c%C%7%eJ}<0$KDI=>!#\e(B
+
+1998-08-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] \e$B%-%c%C%7%e$r%0%m!<%P%k$K4IM}$9$k$h$&$K$7$?!#\e(B
+       * [elmo] \e$B%-%c%C%7%e4IM}%b%8%e!<%k72MQ?75,%U%!%$%k!"\e(Belmo-cache.el \e$B$r\e(B
+         \e$B:n@.!#\e(B
+
+1998-08-18 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * search-parent \e$B$N=$@5!#\e(B
+
+1998-08-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] imap4 \e$B$G\e(B select \e$B$;$:$K\e(B list folder \e$B$9$k$H!"<B:]$OFbMF$,\e(B
+         \e$BJQ2=$7$F$$$F$b7k2L$,99?7$5$l$J$$$N$G!"\e(Blist folder \e$B$NA0$K\e(B
+         noop \e$B$rAw$k$h$&$K$7$?!#\e(B
+       * v0.4.4 - "Thriller"
+
+1998-08-17 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * search-parent \e$B$G2?HVA0$N?F$+$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+
+1998-08-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-mime.el \e$B$G!"\e(Bfollow-current-entity \e$B$NA0$K\e(B widen \e$B$9$k$h$&$K$7$?!#\e(B
+       * original buffer \e$B$r\e(B read-only \e$B$K$7$?!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-08-16 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-break-pages \e$B$,$A$c$s$HH?1G$5$l$J$$$N$r=$@5!#\e(B
+
+1998-08-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-goto-first-unread-folder, wl-folder-open-all-unread-folder,
+         wl-folder-open-folder \e$B$r\e(B wl-folder-get-path \e$B$r;H$&$h$&JQ99!#\e(B
+       * wl-highlight-folder-path \e$B$N2~NI!#\e(B
+
+1998-08-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * localdir \e$B$J\e(B access \e$B%0%k!<%W$r\e(B fetching \e$B$9$k$H$-$K!$%0%k!<%WL>$K\e(B
+         property \e$B$,$D$$$F$$$k$;$$$G<hF@$7$?%j%9%H$K$bM>7W$J\e(B property \e$B$,IU$/\e(B
+         \e$B$N$r=$@5!#\e(B
+       * wl-folder-goto-folder \e$B$G0\F0$9$k$H$-$K\e(B
+         wl-folder-buffer-cur-entity-id \e$B$r%;%C%H$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,4X?t\e(B wl-folder-goto-first-unread-folder ('f')
+         \e$BL$FI%a%C%;!<%8$,$"$k:G=i$N%U%)%k%@$K0\F0$9$k!#\e(B
+       * \e$B?75,4X?t\e(B wl-folder-jump-folder ('J')
+         \e$B;XDj$7$?%U%)%k%@$K0\F0$9$k!#$=$N;~!$%U%)%k%@$,B0$7$F$$$k%0%k!<%W\e(B
+         \e$B$r3+$/!#\e(B
+       * \e$B?75,4X?t\e(B wl-folder-open-all-unread-folder ('o')
+         \e$BL$FI%a%C%;!<%8$,$"$k%U%)%k%@$N%0%k!<%W$rA4$F3+$/!#\e(B
+       * \e$B?75,4X?t\e(B wl-folder-open-folder
+         \e$B;XDj$7$?%U%)%k%@$N%0%k!<%W$r3+$/!#\e(B
+
+1998-08-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] delete \e$B;~!"\e(Bexpunge \e$B$N%?%$%_%s%0$rJQ99\e(B(\e$B$+$J$j9bB.2=\e(B)\e$B!#\e(B
+       * trash folder \e$B$G$N\e(B "D" \e$B%^!<%/$O\e(B(\e$B??$N\e(B)\e$B:o=|$r<B9T$9$k$h$&$K$7$?!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-08-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * msgdb \e$B$O\e(B save \e$B$5$l$F!$\e(Bsummary-cache \e$B$O\e(B save \e$B$5$l$J$$>u67$,H/@8$9$k\e(B
+         \e$B>l9g$,$"$k$N$r2sHr!#\e(B
+
+1998-08-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Summary \e$B$KDI2C$5$l$k9T$N\e(B highlight \e$B$NJ}K!$rJQ99\e(B(\e$BB?>/9bB.2=\e(B)\e$B!#\e(B
+       * \e$B%G%U%)%k%H$N\e(B cite \e$B$@$H\e(BFrom:\e$B$K4A;z$,4^$^$l$F$$$k$H\e(B internal \e$B$K$J$C$F\e(B
+         \e$B$7$^$&$N$r=$@5!#\e(B(te@gohome.org \e$B$h$j8f;XE&\e(B)
+       * no-cache-folder \e$B$G$b!"\e(Bimportant-mark \e$B$r$D$1$k$H$-$K%-%c%C%7%e$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B(\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f0U8+\e(B)
+       * Message-Id: <> \e$B$N%a!<%k$,%-%c%C%7%e;~$K%(%i!<$K$J$k$N$r2sHr!#\e(B
+         (\e$B1-;t$5$s\e(B <ukai@debian.or.jp> \e$B$h$j8f;XE&\e(B)
+       * [bbdb-wl.el] bbdb\e$B%(%s%H%j$r%-%c%C%7%e$9$k$h$&JQ99!#\e(B
+
+1998-08-13 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [bbdb-wl.el] Emacs20.x \e$B$G%(%i!<$,5/$3$k$N$r2sHr!#\e(B
+
+1998-08-11  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-set-string-width \e$B$G!"%;%C%H$7$h$&$H$7$F$$$kD9$5$,\e(B string \e$B$H\e(B
+         \e$B$A$g$&$IF1$8$@$H\e(B XEmacs \e$B$G$O$J$<$+\e(B1\e$BJ8;zD9$/$J$C$F$7$^$&$N$r2sHr!#\e(B
+       * [elmo] imap4 \e$B$N\e(B bodystructure \e$B<h$j4s$;$G!"E:IU%U%!%$%k$N\e(B
+         \e$B%U%!%$%kL>$,F|K\8l$@$C$?$j$9$k$H\e(B parse \e$B$K<:GT$9$k$N$r2sHr!#\e(B
+
+1998-08-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.4.3 - "Starting Over"
+       * wl-no-cache-folder-list \e$B$r?7@_!"%^%C%A$7$?%U%)%k%@$O\e(B
+         \e$B%a%C%;!<%8$rFI$s$G$b%-%c%C%7%e$7$J$$!#\e(B
+       * elmo-imap4-msgdb-create-range, elmo-nntp-msgdb-create-range
+         \e$B$K$*$1$k\e(B overview \e$B$N<h$j4s$;$H$=$N2r@O=hM}$rHsF14|2=!#\e(B
+
+1998-08-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * msgdb \e$B$N%;!<%V$r!"JQ99$,$"$C$?ItJ,$@$19T$&$h$&$K$7$?!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-08-07 Fumitoshi UKAI <ukai@debian.or.jp>
+
+       * elmo-imap4-msgdb-create-range  \e$B$r9bB.2=!#\e(B
+
+1998-08-06 Fumitoshi UKAI <ukai@debian.or.jp>
+
+       * msgdb \e$B$N\e(B load \e$B$H\e(B imap4 select folder \e$B$rHsF14|$K9T$&\e(B
+         wl-summary-msgdb-load-async \e$B$N<B8=!#\e(B
+
+1998-08-06  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.4.2 - "Rock Me Amadeus"
+       * imap4, nntp \e$B$G\e(B overview \e$B$r<h$j4s$;$k$H$-$K$$$C$Z$s$KA4$F$G$O$J$/\e(B
+         \e$B0lDj?t$E$D\e(B fetch \e$B$9$k$h$&$K$7$?!#%G%U%)%k%H$O\e(B 200 \e$B$E$D!#\e(B
+         (\e$B1-;t$5$s\e(B <ukai@debian.or.jp> \e$B$h$j8f=u8@\e(B)
+       * Summary \e$B$N\e(B Update \e$B$G\e(B, \e$BDI2C$5$l$?%a%C%;!<%8$N\e(B highlight \e$B$NJ}K!$rJQ99!#\e(B
+
+1998-08-06  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-reedit \e$B$r\e(B draft \e$B%U%)%k%@$G<B9T$9$k$H$-!$\e(B
+         \e$BF1$8%a%C%;!<%8HV9f$r;HMQ$9$k$h$&$K$7$?!#\e(B
+       * \e$BJQ?t\e(B wl-draft-config-alist \e$B$r?7@_!#%X%C%@\e(B(\e$B08@h$J$I\e(B)\e$B$K1~$8$FB>$N\e(B
+         \e$B%X%C%@\e(B(From\e$B$J$I\e(B)\e$B$rJQ99$9$k5!G=$rDI2C$7$?!#\e(B
+
+1998-08-06  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] current folder \e$B$,F1$8$J$i\e(B select folder \e$B$7$J$$$h$&$K$7$?!#\e(B
+         (\e$B1-;t$5$s\e(B <ukai@debian.or.jp> \e$B$h$j8f=u8@\e(B)
+
+1998-08-06 Fumitoshi UKAI <ukai@debian.or.jp>
+
+       * [elmo] elmo-msgdb-list-diff2 \e$B$r9bB.2=!#\e(B
+
+1998-08-05  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%a%C%;!<%8%X%C%@$N\e(B highlight \e$B$r$b$C$H<+M3$KDj5A$G$-$k$h$&$K$7$?!#\e(B
+
+1998-08-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] scan \e$B$NB.EY8~>e$N$?$a$K\e(B overview \e$B%G!<%?%Y!<%9$O!"%a%b%j>e!"\e(B
+         HDD\e$B>e$$$:$l$b\e(B iso-2022-jp(\e$B$=$N%U%)%k%@$N\e(B mime-charset)\e$B$GJ]B8$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * wl-summary-toggle-thread \e$B$r<BAu!#\e(B't' \e$B$K\e(B bind\e$B!#\e(B
+
+1998-08-04  Yuji Yamano <u90156@uis-inf.co.jp>
+
+       * tm \e$B$G0zMQ$7$F%j%W%i%$$7$h$&$H$9$k$H\e(B
+         (void-variable mime::preview/mother-buffer) \e$B$K$J$k>l9g$,$"$k$N$r\e(B
+         \e$B2sHr!#\e(B
+
+1998-08-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$BJQ?t\e(B wl-summary-indent-length-limit \e$B$r?7@_!#\e(B
+         \e$B$I$s$J$K%9%l%C%I$,?<$/$F$b$3$ND9$50J>e%$%s%G%s%H$7$J$$!#\e(B
+         \e$B%G%U%)%k%H$O\e(B 46 (\e$B:,5r$J$7\e(B)\e$B!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-08-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] localdir \e$B$N\e(B search \e$B;~!"$A$c$s$H\e(B elmo-mime-charset \e$B$G\e(B
+         decode \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-sort \e$B$r<BAu!"\e(B(by date, number, subject, from).
+         'S' \e$B$K\e(B bind.
+       * wl-summary-jump-to-parent-message \e$B$N\e(B arg \e$B$N0UL#$r5U$K$7$?!#\e(B
+       * v0.4.1 - "Private Eyes"
+
+1998-08-02  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,%a%C%;!<%8$r\e(B prefetch \e$B$9$k4X?t\e(B wl-summary-incorporate \e$B$rDI2C!#\e(B
+       * tm \e$B$G5pBg%a%C%;!<%8$r<h$C$FMh$k$+$I$&$+<ALd$9$k$h$&$K$9$k$N$r\e(B
+         \e$BK:$l$F$?$N$rD>$9!#\e(B
+       * prefetch \e$B$9$k$HL$FI?tI=<($,$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * wl-folder-sync-entity \e$B$,@5$7$/%5%^%j%S%e!<%-%c%C%7%e$r99?7$7$J$$\e(B
+         \e$B%P%0$r=$@5!#\e(B
+       * wl-summary-down \e$B$,\e(B interrupt \e$B$5$l$?;~$K%+%l%s%H%U%)%k%@>pJs$,\e(B
+         \e$B$*$+$7$/$J$k$N$r=$@5!#\e(B
+       * 00README.ja \e$B$K\e(B install.el \e$B$K4X$9$kCm0U=q$-$rDI2C!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f=u8@\e(B)
+
+1998-07-31 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [elmo] elmo-nntp-list-folder \e$B$,\e(B XEmacs \e$B0J30$GF0$+$J$$%P%0$r=$@5!#\e(B
+
+1998-07-31  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] imap4 \e$B$G!"%7%s%0%k%Q!<%H$N5pBg$J%a%C%;!<%8$N>l9g!"\e(B
+         \e$B<h$C$FMh$J$$$H8@$C$F$$$k$N$K<h$C$FMh$F$7$^$&%P%0$r=$@5!#\e(B
+       * [elmo] read-msg \e$B$G$N%3%T!<2s?t$r8:$i$7$F%a%b%j;HMQNL$r@aLs!#\e(B
+       * Emacs \e$B=*N;;~$K\e(B Summary \e$B$,;D$C$F$$$?$i\e(B cache \e$B$H\e(B mark \e$B$r%;!<%V$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+
+1998-07-30  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%0%k!<%W%U%)%k%@>e$K%+!<%=%k$,$"$k$H$-$K%4%_H"$r6u$K$9$k$H!"\e(B
+         summary window \e$B$,;D$C$F$7$^$&$N$r2sHr!#\e(B
+       * get-text-property \e$B$NB?MQ$G!"\e(Bwl-folder-update-unread \e$BEy$,\e(B
+         \e$BCY$/$J$C$F$$$?$N$G!"6KNO\e(B get-text-property \e$B$r8:$i$7$?!#\e(B
+       * wl-message-window-size \e$B$N%G%U%)%k%H$r\e(B '(1 . 4) \e$B$K$7$?!#\e(B
+       * \e$BJQ?t\e(B wl-summary-recenter \e$B$,\e(B non-nil \e$B$J$i!"\e(Bredisplay \e$B;~$K\e(B
+         recenter \e$B$9$k$h$&$K$7$?!#\e(B
+       * v0.4.0 - "One More Try"
+
+1998-07-29  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-folder-petname-alist \e$B$r?7@_!#%^%C%A$7$?$i%U%)%k%@$r$"$@L>I=<(!#\e(B
+       * wl-auto-select-next \e$B$,\e(B non-nil \e$B$N$H$-!"\e(BSPC \e$B$@$1$G$J$/!"\e(B
+         \e$B8=:_$N%3%^%s%I$,<B9T$5$l$?%-!<!"$b$7$/$O%^%&%9%$%Y%s%H$,B3$1$F\e(B
+         \e$BF~NO$5$l$?>l9g$G$b<!$N%U%)%k%@$K0\$l$k$h$&$K$7$?!#\e(B
+       * wl-auto-select-next \e$B$,\e(B non-nil \e$B$J$i!":G8e$N%a%C%;!<%8$G\e(B
+         'n' \e$B$r2!$7$?$H$-$b<!$N%U%)%k%@$KB(0\F0$G$-$k$h$&$K$7$?!#\e(B
+       * [elmo] elmo-nntp-list-folder \e$B$rBgI}$K9bB.2=\e(B (\e$B:#$^$G$,CY$9$.!)\e(B)\e$B!#\e(B
+
+1998-07-28  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%X%C%@$N%U%)%s%H$N%G%U%)%k%H$r\e(B bold \e$B$K$7$?!#\e(B
+       * \e$B8=:_A*Br$5$l$F$$$k%U%)%k%@\e(B(\e$B$N%Q%9\e(B)\e$B$H%a%C%;!<%8$r%O%$%i%$%H$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * wl-summary-auto-select-next \e$B$G!"<!$NL$FI$,$"$k%U%)%k%@$,\e(B
+         Folder \e$B%b!<%I$K8=$l$F$$$J$/$F$b\e(B(\e$BJD$8$i$l$?%U%)%k%@Fb$K$"$C$F$b\e(B)
+         \e$BE,Ev$J$b$N$r3d$j=P$7$F0\F0$9$k$h$&$K$7$?!#\e(B
+       * \e$B3F%U%)%k%@$K\e(B Id \e$B$r?6$k$h$&$K$7!"%P%C%U%!>e$G$O\e(B text-property,
+         'wl-folder-entity-id \e$B$G;2>H$G$-$k$h$&$K$7$?!#\e(B
+         wl-folder-entity-alist \e$B$N9=B$$K$b\e(B entity-id \e$B$rDI2C!#\e(B
+
+1998-07-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%-%c%C%7%e$GK\J88!:w\e(B(\e$B%-%c%C%7%e8!:w\e(B)\e$B$G$-$k$h$&$K$7$?!#\e(Bimap4 \e$B$N\e(B
+         offline \e$B>uBV!"$*$h$S!"\e(Bnntp \e$B$G$O!"$3$N%-%c%C%7%e8!:w$rMQ$$$k!#\e(B
+       * Message-ID \e$B$K\e(B "/" \e$B$,4^$^$l$k$H$-!"%-%c%C%7%e$N%U%!%$%kL>$G$O\e(B " "
+         \e$B$KCV$-49$($k$3$H$K$7$?!#\e(B
+       * \e$B%j%U%!%$%k%^!<%/$rIU$1$?$^$^%U%)%k%@$rC&=P$9$k$H!"%4%_$,%;!<%V\e(B
+         \e$B$5$l$k$N$r2sHr$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B
+       * \e$B%5%^%j%S%e!<%-%c%C%7%e$N\e(BHDD\e$B$X$N=q$-9~$_$r!"JQ99$,$"$k$?$S$G$O$J$/!"\e(B
+         \e$B%U%)%k%@!<$r0\F0!&H4$1$k;~$K0l5$$K=q$-=P$9$h$&$K$7$?!#\e(B
+       * NNTP \e$B$G$b%U%)%k%@%j%9%H$N<h$j4s$;$r$G$-$k$h$&$K$7$?!#\e(B
+         (.folders \e$B$K\e(B "-fj.rec /" \e$B$N$h$&$K=q$1$k$h$&$K$J$C$?!#\e(B)
+       * XEmacs \e$B$N%a%K%e!<$rF|K\8lI=<($9$k%j%=!<%9!"\e(Betc/ja.Emacs \e$B$rDI2C!#\e(B
+       * \e$BF1$8\e(B Message-ID \e$B$N%a%C%;!<%8$,J#?t$"$k>l9g!"L$FI%^!<%/$N?t$,\e(B
+         \e$B$*$+$7$/$J$k$N$rD>$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B
+       * \e$B%U%)%k%@%j%9%H$r%-%c%C%7%e$9$k$h$&$K$7$?!#\e(B
+         \e$B:G?7%j%9%H$K99?7$9$k$K$O!"\e(BC-u RET \e$B$G%U%)%k%@$r3+$-D>$9!#\e(B
+         unplugged \e$B>uBV$G$b\e(B access \e$B7?%0%k!<%W%U%)%k%@$rMxMQ$G$-$k\e(B
+         \e$B$h$&$K$J$C$?!#\e(B
+
+1998-07-24  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-auto-select-first \e$B$r\e(B non-nil \e$B$K$9$k$H!$\e(Bwl-folder-empty-trash
+         \e$B$r<B9T$7$?$H$-$K!$\e(Bwl-folder-toggle-disp-summary \e$B$N\e(B select-window
+         \e$B$G%(%i!<$K$J$k$N$r=$@5!#\e(B
+
+1998-07-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * folder-mode-map \e$B$G\e(B "P" \e$B$r\e(B wl-folder-prev-unread, "N" \e$B$r\e(B
+         wl-folder-next-unread \e$B$K$7$?$[$&$,;H$$$d$9$$5$$,$7$F$-$?$N$G\e(B
+         \e$B%G%U%)%k%H$r$=$N$h$&$KJQ99!#\e(B
+       * [elmo] elmo-localdir \e$B$G!"\e(Boverview \e$B@8@.;~$N%U%!%$%k$+$i$N%G!<%?\e(B
+         \e$BFI$_9~$_NL$r:o8:!#%a%b%j;HMQNL$,8:$C$?\e(B(\e$B$O$:\e(B)\e$B!#\e(B
+
+1998-07-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.6 - "Never Surrender"
+
+1998-07-23  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder.el \e$B$G!"\e(Bget-buffer-{window|buffer} \e$B$,<:GT$7$?$H$-$K\e(B
+         \e$B8mF0:n$9$k$N$r=$@5!#\e(B
+
+1998-07-22  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-summary-buffer-mime-charset, wl-folder-mime-charset-alist
+         \e$B$r@_CV!"\e(BSummary \e$B$N@8@.!"K\J8$N%G%3!<%I$GMxMQ$9$k$h$&$K$7$?!#\e(B
+       * MIME-Version \e$B$,$J$$$H$-$b@8\e(B JIS \e$B%5%V%8%'%/%H$r%G%3!<%I$7$FI=<(!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+       * wl-draft-normal-send-func \e$B$G!"\e(BDate field \e$B$rA^F~$9$k$h$&$K$7$?!#\e(B
+       * wl-mail-do-fcc-insert-date-header -> wl-draft-insert-date-field
+         \e$BL>A0JQ99$HF1;~$K!"\e(Btimezone.el \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * wl-summary-auto-select-next \e$B$,\e(B non-nil \e$B$N$H$-$NF0:n$,\e(B IMAP4
+         \e$B%U%)%k%@$G$*$+$7$/$J$C$F$7$^$&$N$r=$@5!#\e(B
+       * IMAP4 \e$B$b%*!<%W%s$9$k$H!$\e(BEmacs \e$B$N=*N;;~$K3NG'$r9T$&$N$GL5;k$9$k$h\e(B
+         \e$B$&$K$7$?!#\e(B
+
+1998-07-22 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$BL$FI%U%)%k%@!<4V$r0\F0$9$k\e(B wl-folder-(prev|next)-unread \e$B$r?75,\e(B
+         \e$B:n@.$7$?!#\e(B
+       * \e$BJQ?t\e(B `wl-auto-select-first' \e$B$,\e(B non-nil \e$B$J$i!$%U%)%k%@$K0\F08e\e(B
+         \e$B:G=i$NL$FI%a%C%;!<%8$rB(I=<($9$k$h$&$K$7$?!#\e(B
+       * \e$BJQ?t\e(B `wl-auto-select-next' \e$B$,\e(B non-nil \e$B$J$i!$:G8e$N%a%C%;!<%8$r\e(B
+         \e$BFI$_=*$($?8e$K<!$NL$FI%U%)%k%@$KB(0\F0$9$k$h$&$K$7$?!#\e(B
+       * \e$BJQ?t\e(B `wl-summary-move-order' \e$B$K$h$j!$%a%C%;!<%80\F0;~$NM%@h=g\e(B
+         \e$B0L$rJQ992DG=$K$7$?!#JQ?t$K$O\e(B `new' \e$B$H\e(B `unread' \e$B$,;XDj$G$-$k!#\e(B
+       * \e$BL$FI%U%)%k%@$N\e(B wl-highlight-folder-unread-face \e$B$r?75,DI2C$7$?!#\e(B
+       * (buffer-substring (match...)) \e$B$N%3!<%I$r@0M}$7$?!#\e(B
+         (wl-folder.el, wl-summary.el \e$B$N$_\e(B)
+       * wl-draft-send-mail-with-qmail \e$B$r;HMQ$9$k$H!$\e(Bvoid-variable
+         header-end \e$B%(%i!<$,=P$k$N$G=$@5$7$?!#\e(B
+       * NNTP \e$B$r%*!<%W%s$9$k$H!$\e(BEmacs \e$B$N=*N;;~$K3NG'$r9T$&$N$GL5;k$9$k$h$&$K\e(B
+         \e$B$7$?!#\e(B
+
+1998-07-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] imap4 \e$B$NK\J88!:w$GF|K\8l$r%-!<$H$7$FM?$($i$l$k$h$&$K$7$?!#\e(B
+
+1998-07-21 TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-folder-empty-trash \e$B$G%U%)%k%@%G!<%?$r6u$K%;%C%H$9$k$H$-$N\e(B
+         \e$B%P%0$rD>$9!#\e(B
+
+1998-07-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.5 - "Miss Me Blind"
+
+1998-07-21 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * WL-ELS \e$B$G\e(B ./WL.hack \e$B$r$A$c$s$H\e(B load \e$B$9$k$h$&\e(B "." \e$B$r\e(B load-path \e$B$K\e(B
+         \e$BDI2C$9$k9T$r0\F0!#\e(B
+
+1998-07-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Folder \e$B$K$b\e(B unread \e$B?t$rI=<($9$k$h$&$K$7$?!#$$$/$D$+$N4XO"4X?t$b\e(B
+         \e$BJQ99!#\e(B(\e$BB<EDA442\e(B <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@$K4p$E$/JQ99\e(B)
+       * Summary \e$B$N\e(B modeline \e$B$K\e(B new \e$B$H\e(B unread \e$B$N?t$rI=<($9$k$h$&$K$7$?!#\e(B
+         \e$B%P%C%U%!%m!<%+%kJQ?t!"\e(Bwl-summary-buffer-unread-count,
+         wl-summary-buffer-new-count \e$B$G4IM}!#\e(B
+         (\e$BB<EDA442\e(B <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@$K4p$E$/JQ99\e(B)
+       * \e$BL$FI%a!<%k$r\e(B1\e$BDLFI$`EY$K\e(B mark \e$B%U%!%$%k$r\e(BHDD\e$B$K=q$-9~$^$:!"\e(B
+         \e$B%U%)%k%@!<$r0\F0!&H4$1$k;~$K0l5$$K=q$-=P$9$h$&$K$7$?!#\e(B
+         (\e$BB<EDA442\e(B <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@$K4p$E$/JQ99\e(B)
+       * mark \e$B%U%!%$%k$K$?$^$K\e(B (("<Message-ID>" nil)) \e$B$,;D$k%P%0$r=$@5\e(B
+         \e$B$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B(\e$BB<EDA442\e(B <muse@ba2.so-net.ne.jp> \e$B$5$s$h$j8f;XE&\e(B)
+
+1998-07-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Semi-vm \e$B$N<jK!$r;29M$K!"J8;zNs$r8GDjD9$K$9$k=hM}$r9T$&\e(B
+         \e$B?75,4X?t\e(B wl-set-string-width \e$B$rDI2C!#\e(B
+       * wl-display-error \e$B$,\e(B error \e$B$r=P$9$N$r2sHr$7$?\e(B(\e$B$,!"$^$@$$$^$$$A\e(B)\e$B!#\e(B
+       * wl-draft-folder \e$B$,\e(B localdir \e$B$G$J$1$l$P!"\e(Bwl-init \e$B$G%(%i!<%a%C%;!<%8\e(B
+         \e$B$r=P$9$h$&$K$7$?!#\e(B
+       * Folder mode \e$B$KLa$i$:$K\e(B goto-folder \e$B$P$C$+$j$7$F$$$k$H!"0\F0$9$kEY$K\e(B
+         modeline \e$B>e$N\e(B `[ON]' \e$B$,A}2C$7$F$7$^$&%P%0$r=$@5!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-07-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.4 - "La Bamba" wl release.
+
+1998-07-15 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$BM>7W$J%W%m%Q%F%#$r<h$C$F$[$7$$$H$3$m$rE,Ev$K8+A6$C$F\e(B
+         buffer-substring->buffer-substring-no-properties \e$B$KCV49!#\e(B
+       * wl-summary-redisplay() \e$B$,I,$:$7$bI,MW$G$J$/!"\e(B
+         wl-summary-set-message-buffer-or-redisplay() \e$B$G:Q$`$H$3$m$OCV49!#\e(B
+
+1998-07-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * mh \e$B7A<0$N\e(B alias file \e$B$,\e(B wl-alias-file \e$B$K@_Dj$5$l$F$$$?$i!"\e(B
+         completion \e$B$G;H$($k$h$&$K$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B
+       * modeline \e$B$N\e(B toggle-status \e$B$r\e(B mode-line-buffer-identification \e$B$N\e(B
+         \e$BA0$K=q$/$3$H$K$7$F$_$?!#\e(B
+       * wl-draft-insert-message \e$B$G\e(B mail-citation-hook \e$B$H\e(B mail-yank-hooks \e$B$r\e(B
+         nil \e$B$K94B+$9$k$N$rK:$l$F$?!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+       * Mule2.3@19.28 \e$B$K$O\e(B display-error \e$B$,$J$$$h$&$J$N$G!"\e(B
+         \e$B$=$l$C$]$$4X?t$r<+A0$GMQ0U$7$?!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+       * wl-summary-redisplay-all-header, wl-summary-redisplay-no-mime \e$B$G$b\e(B
+         \e$BL$FI%^!<%/=hM}$9$k$h$&$K$7$?!#\e(B
+
+1998-07-14 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,4X?t\e(B wl-folder-goto-folder, wl-folder-suspend\e$B!#\e(B
+
+1998-07-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-mmelmo-message-redisplay: \e$B$9$G$K\e(B cache \e$B$5$l$F$$$k$K$b$+$+$o$i$:\e(B
+         \e$BA4ItFI$`$+$I$&$+<ALd$7$F$7$^$&$N$rD>$9!#\e(B
+       * [elmo] message/partial \e$B$b%-%c%C%7%e4IM}$G$-$k$h$&$K$7$?!#\e(B
+       * [elmo] read-msg \e$B$NJV$jCM$r\e(B (content-type . message) \e$B$H$7$?!#\e(B
+       * wl-draft.el: (insert-body) -> (insert body)
+
+1998-07-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.3 - "Karma Chameleon" wl release.
+
+1998-07-13 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B?75,4X?t\e(B wl-summary-jump-to-parent-message\e$B!#\e(B
+
+1998-07-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$BL$FI$,$J$$$H$-$O\e(B update \e$B;~$K:G8e$N%a%C%;!<%8$K0\F0!#\e(B
+       (\e$BB<EDA442\e(B <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f;XE&$K4p$E$/JQ99\e(B)
+       * elmo-nntp-send-mode-reader \e$B$G\e(B response \e$B$rFI$`$h$&$K$7$?!#\e(B
+
+1998-07-12 Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B=i$a$F0\F0$9$k\e(B folder \e$B$K0\$k$H!$\e(Bsummary \e$B%b!<%I$G\e(B2\e$B$DL\$N%a%C%;!<%8$K\e(B
+         \e$B%+!<%=%k$,0\F0$9$kIT6q9g$r=$@5!#\e(B
+       * NNTP \e$B$G:G=i$K\e(B "mode reader" \e$B%3%^%s%I$rAw?.$9$k!#\e(B
+       * from \e$B$K0[>o\e(B(?)\e$B$JJ8;z$,4^$^$l$F$$$k$H!$\e(Bwl-substring \e$BFb$N\e(B sref \e$B$G%(%i!<\e(B
+         \e$B$,=P$k$N$rL5;k!#\e(B
+       * wl-auto-check-folder-pre-hook \e$B$rDI2C!#\e(B
+       * wl-interactive-exit \e$B$,\e(B nil \e$B$J$i=*N;;~$K3NG'$r<h$i$J$$!#\e(B
+       * wl-interactive-send \e$B$,\e(B t \e$B$J$iAw?.;~$K3NG'$r<h$k!#\e(B
+
+1998-07-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * News \e$B5-;v$N%-%c%s%;%k5-;v$r=P$9;~$K\e(B wl-draft-raw-send \e$B$r8F$V$h$&$K\e(B
+         \e$B$7$?!#\e(B
+       * \e$B?75,4X?t\e(B wl-draft-raw-send\e$B!#\e(B
+       * \e$B?75,4X?t\e(B wl-mime-request-patrial-message\e$B!#\e(B
+       * WL-ELS, install.el \e$B$,%$%s%9%H!<%k$5$l$F$$$l$P!"\e(B
+         \e$B<+F0E*$K\e(B ELISPDIR \e$B$r8!=P$G$-$k$h$&$K$9$k!#\e(B
+       * wl-summary-reedit, wl-draft-open-file  \e$B$N$H$-$O!"\e(B
+         edit-again \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * wl-draft-send \e$B$GAw?.;~$OJL%P%C%U%!$r;H$&$h$&$K$7$?!#\e(B
+        (\e$B<i2,\e(B \e$BCNI'\e(B <morioka@jaist.ac.jp> \e$B$5$s$N8f=u8@$K4p$E$/JQ99\e(B)
+       * semi-wl.el -> wl-mime.el
+        (\e$B<i2,\e(B \e$BCNI'\e(B <morioka@jaist.ac.jp> \e$B$5$s$N8f=u8@$K4p$E$/JQ99\e(B)
+       * \e$BJQ?t\e(B wl-init-file \e$B$rDI2C!#\e(Bwl-init \e$B$G\e(B load-file \e$B$9$k!#\e(B
+
+1998-07-11 OKUNISHI - PatchMan II - Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B5/F0$7$F\e(B Summary mode \e$B$K0\9T$;$:!"\e(BGroup mode \e$B$+$i$$$-$J$j\e(B "w" \e$B$9$k\e(B
+         \e$B;~>l9g$K\e(B tm-wl.el \e$B$G4X?t$NL$Dj5A%(%i!<$,=P$kIT6q9g$KBP=h!#\e(B
+       * bbdb \e$B$,FI$^$l$F$$$k$K$b4X$o$i$:!"0l2sL\$N\e(B compose \e$B;~$K\e(B M-[TAB] \e$B$,\e(B
+        \e$B!J\e(Btext-mode \e$B$N!K\e(Bispell-complete-word() \e$B$N$^$^!"$H$$$&Ff$N8=>]$KBP=h!#\e(B
+       * \e$B4X?t\e(B wl-summary-pipe-message \e$B$rDI2C!#\e(B
+
+1998-07-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * User-Agent \e$B%U%#!<%k%I$r@8@.$9$k4X?t!"\e(Bwl-generate-user-agent-string\e$B!#\e(B
+       * draft-send \e$BCf$N\e(B error, quit \e$B$r\e(B resume \e$B$9$k$h$&$K$7$F$_$?!#\e(B
+
+1998-07-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-folder-{next|prev}-unsync \e$B$N\e(B regexp \e$B$r=$@5!#\e(B
+       * Flim-Chao \e$B$K9g$o$;!"\e(Bmmelmo \e$B$N=q$-49$(!#\e(B
+         mmelmo \e$B$r\e(B mmelmo \e$B$H\e(B mmelmo-imap4 \e$B$KJ,3d!#\e(B
+         mmelmo \e$B$H\e(B mmelmo-imap4 \e$B$N\e(B dispatch \e$B$O\e(B FLIM \e$BB&$KG$$;$k$h$&$K$7$?!#\e(B
+
+1998-07-07  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.2 - "Jump" wl release.
+
+1998-07-06  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-draft-send \e$B$r=$@5!#%(%i!<$r8!CN$G$-$?$H$-$O!"\e(Bedit-mode \e$B$KLa$k!#\e(B
+         im-wl.el \e$B$b$=$l$K9g$o$;$F=$@5!#\e(B
+       * utils/x-face-wl.el, utils/x-pgp-sig-wl.el deleted.
+       * elmo-imap4, elmo-nntp \e$B$b\e(B coding-system \e$B4X78$N94B+$r\e(B
+         as-binary-* \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+1998-07-06 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * coding-system \e$B4X78$N94B+$r\e(B as-binary-* \e$B$r;H$&$h$&$K$9$k!#\e(B
+
+1998-07-05 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * New im-wl.el
+
+1998-07-05  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * util/bbdb-wl.el
+       * wl-summary-update \e$B8e\e(B folder\e$B%b!<%I$NA4%a%C%;!<%8?tI=<($,4V0c$C$F\e(B
+         \e$B$$$?$N$rD>$9!#\e(B
+       * wl-message-back-to-summary-hook -> wl-message-exit-hook
+       * wl-message-back-to-summary -> wl-message-exit
+       * wl-summary-toggle-disp-off-hook \e$BDI2C\e(B
+       * wl-summary-exit-hook \e$BDI2C\e(B
+       * wl-summary-goto-folder-mode -> wl-summary-exit
+       * wl-folder-{next|prev}-unsync \e$B$N\e(B regexp \e$B$r=$@5!#\e(B
+       * wl-auto-check-folder-name \e$BDI2C\e(B
+       * wl-plugged \e$B$+$I$&$+$r\e(B Folder \e$B%b!<%I$H\e(B Summary \e$B%b!<%I$N\e(B
+         modeline \e$B$KI=<(!#\e(B
+       * wl-summary-next, wl-summary-prev, wl-summary-cursor-up,
+         wl-summary-cursor-down \e$B$O\e(B unplugged \e$B$N;~$K$OFI$a$J$$%a%C%;!<%8$r\e(B
+         \e$B$H$P$9$h$&$K$9$k!#\e(B
+       * wl-draft-kill \e$B$G$?$^$K%(%i!<$,=P$k%P%0$r=$@5!#\e(B
+       * [elmo] imap4, nntp \e$B$O\e(B plugged \e$B$G$J$1$l$P%(%i!<$H$9$k!#\e(B
+       * \e$B4X?t\e(B wl-toggle-plugged \e$B$r<B8=!#\e(BM-t \e$B$G%H%0%k!#\e(B
+       * wl-summary-goto-folder \e$B$G$b\e(B (wl-summary-folder-cache-save)\e$B!#\e(B
+         (\e$BDEM88x6G\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$N8f;XE&$K4p$E$/JQ99\e(B)
+
+1998-07-04  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * x-face-wl.el, x-pgp-sig-wl.el \e$B$O\e(B coding-system \e$B$r94B+$7$J$/$F$h$$!#\e(B
+
+1998-07-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Folder \e$B$N3+JD$r\e(B delete-region \e$B$G$d$k$h$&JQ99$7$?!#\e(B
+
+1998-07-02  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.1 - "Invisible Touch" wl release.
+       * [elmo] imap4 \e$B$G\e(B overview \e$B<hF@;~$K!"$X$s$J%a%C%;!<%8$N\e(B
+         References \e$B%U%#!<%k%I$N\e(B parse \e$B$K<:GT$9$k%P%0$r=$@5!#\e(B
+       * [elmo] imap4 \e$B$G\e(B closed \e$B%3%M%/%7%g%s$rI|3h$7$?$H$-!"\e(Binbox \e$B$N\e(B fetch \e$B$K\e(B
+         \e$B<:GT$9$k%P%0$r2r7h\e(B(\e$B$7$?$D$b$j\e(B)\e$B!#\e(B
+       * mmelmo-imap4-node-id-to-string \e$B$,\e(B 0 (integer) \e$B$rJV$9%P%0$r=$@5!#\e(B
+       * wl-folders-file \e$B$,\e(B newline \e$B$G=*$o$C$F$$$J$$$H!"\e(BSyntax error
+         \e$B$K$J$k$N$r2sHr!#\e(B
+         (\e$B;3LnM5;J\e(B <u90156@uis-inf.co.jp> \e$B$5$s$N8f;XE&$K4p$E$/=$@5\e(B)
+       * wl-draft-send-with-smtp \e$B$G\e(B user-mail-address \e$B$,@_Dj$5$l$F$$$J\e(B
+         \e$B$1$l$P!"\e(Bwl-from \e$B$+$i%a!<%k%"%I%l%9$r<h$j=P$7$F;H$&$h$&$K$9$k!#\e(B
+         (\e$B;3LnM5;J\e(B <u90156@uis-inf.co.jp> \e$B$5$s$N8f;XE&$K4p$E$/JQ99\e(B)
+
+1998-07-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.3.0 - "Human Nature" wl release.
+       * mmelmo backend \e$B$N<BAu!#\e(B
+         SEMI \e$B$r;H$&>l9g$O\e(B 1.8.2 \e$B0J9_$G$J$$$HF0$+$J$$!#\e(B
+       * wl-mmelmo-display-message \e$B$r<BAu!#\e(B
+         (wl-fetch-confirm-threshold \e$B0J>e$N%Q!<%H$r!"<h$j4s$;$:$KI=<(\e(B)
+       * wl-insert-mail-followup-to \e$B$,\e(B nil \e$B$N$H$-$K$*$+$7$J$3$H$K$J$k\e(B
+         \e$B%P%0$KBP=h\e(B
+       * semi-elmo-imap4.el -> mmelmo.el
+       * (wl-message-mail-p) \e$B$+\e(B (wl-message-news-p) \e$B$N;~$N$_\e(B wl-draft-send
+         \e$B$9$k!#\e(B
+
+1998-06-28  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.2.2 - "Girls Just Want To Have Fun" wl release.
+       * imap4, localdir \e$B$N%"%$%3%s$N3($rJQ99\e(B(XEmacs)\e$B!#\e(B
+       * Folder \e$B0lMw$NI=<($r!"!XL$F14|%a%C%;!<%8?t\e(B/\e$BA4%a%C%;!<%8?t!Y$K$7$?!#\e(B
+       * [elmo] elmo-localdir-search \e$B$r<BAu!#\e(B
+         (localdir \e$B$G$b\e(B pick by Body \e$B$,$G$-$k$h$&$K$J$C$?!#\e(B)
+
+1998-06-27  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * WL-ELS \e$B$r\e(B Makefile \e$B$+$i8F$V$h$&$K$9$k!#\e(B
+       * WL-ELS \e$B$K\e(B install \e$B$H\e(B uninstall \e$B$rDI2C$7$F$_$?!#\e(B
+
+1998-06-26  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * byte-compile \e$B$r9bB.$K9T$&$?$a$N\e(B WL-ELS\e$B!#\e(B
+       * \e$B%-%c%C%7%e%U%!%$%k$NFI$_=q$-$r!"\e(Bfile-coding-system-for-read
+         \e$B$G$O$J$/\e(B {in|out}put-coding-system \e$B$G94B+!#\e(B
+       * Makefile \e$B$N\e(B bytecomp \e$B$N%3%^%s%I$r\e(B -batch \e$B$,:G=i$KMh$k$h$&$KJQ99!#\e(B
+
+1998-06-25  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * folder \e$B$N3+JD$r$9$3$7%9%`!<%9$KI=<($9$k$h$&$K$7$?!#\e(B
+       * draft, trash \e$B%U%)%k%@$K$OFCJL$J%"%$%3%s$r=P$9$h$&$K$7$?\e(B(XEmacs)\e$B!#\e(B
+
+1998-06-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * elmo-imap4-search \e$B$r<BAu!#\e(B
+         Body \e$B$N8!:w$r%5!<%PB&$G9T$&\e(B(imap4 \e$B$G\e(B pick \e$B;~\e(B)\e$B!#\e(B
+         \e$BF|K\8l8!:w$,!"F0$+$J$$!#\e(B
+
+1998-06-23  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.2.1 - "Freedom" wl release.
+       * wl-draft-insert-signature \e$B$+$i\e(B signature.el \e$B$N\e(B
+         insert-signature \e$B$r8F$V\e(B (XEmacs \e$B%D!<%k%P!<MQ\e(B)\e$B!#\e(B
+       * wl-draft-normal-send-func \e$B$rJQ99$7!"%K%e!<%9$K$N$_Aw$k>l9g\e(B
+         \e$B$G$b\e(B mail-send-hook \e$B$r\e(B run-hooks \e$B$9$k$h$&$K$7$?!#\e(B
+         (\e$BDEM88x6G\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$N8f;XE&$K4p$E$/JQ99\e(B)
+       * wl-organization \e$B$,\e(B non-nil \e$B$J$i\e(B Organization \e$B%U%#!<%k%I$r\e(B
+         \e$BA^F~$9$k$h$&$K$7$?!#\e(B
+         (\e$BDEM88x6G\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$N8f;XE&$K4p$E$/JQ99\e(B)
+       * 00README.ja \e$B$K%a!<%j%s%0%j%9%H$N@bL@$rDI2C!#\e(B
+
+1998-06-22  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.2.0 - "Every Breath You Take" wl release.
+       * [elmo] nntp \e$B$G$b%5%$%:$rFI$`$h$&$K$9$k!#\e(B
+       * \e$B%W%j%U%'%C%A;~$b\e(B wl-fetch-confirm-threshold \e$B$r1[$($k$b$N$O\e(B
+         \e$B<ALd$9$k$h$&$K$7$?!#\e(B
+       * SEMI-1.7.0 \e$B0J9_$G\e(B wl-message-redisplay \e$B$r!"?75,4X?t\e(B
+         wl-semi-message-redisplay \e$B$K$9$jBX$($k$h$&$K$7$?!#\e(B
+         \e$BogCM\e(B wl-fetch-confirm-threshold \e$B$r1[$($k%P%$%H?t!"\e(B
+         \e$B$+$D!"%^%k%A%Q!<%H$G:G=i$N%Q!<%H$,\e(B text \e$B$N>l9g!"\e(B
+         \e$B:G=i$N%Q!<%H$@$1$rI=<($G$-$k$h$&$K$7$F$_$?!#\e(B
+       * \e$BJQ?t\e(B wl-fetch-confirm-threshold \e$B$rDI2C!#\e(B
+         \e$B$3$N%P%$%H?t0J>e$N%a%C%;!<%8$K$D$$$F$O!"\e(B
+         \e$BFI$`$+$I$&$+<ALd$9$k$h$&$K$9$k!#\e(B
+
+1998-06-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B4X?t\e(B semi-elmo-imap4-read-first-part,
+         \e$B%^%k%A%Q!<%H$N:G=i$N%Q!<%H$@$1$N\e(B raw-buffer \e$B$r$D$/$k!#\e(B
+       * \e$B4X?t\e(B semi-elmo-imap4-get-mime-entity,
+         bodystructure \e$B$rFI$s$G!"\e(Bmime-parse-message \e$B$N=PNOAjEv$r:n$k!#\e(B
+       * [elmo] imap4 \e$B$G%5%$%:$rFI$`$h$&$K$9$k!#\e(B
+       * \e$B%U%!%$%k\e(B semi-elmo-imap4.el \e$B$r?75,DI2C!#\e(B
+
+1998-06-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.1.4 - "Dancing In The Dark"
+       * \e$BJQ?t\e(B wl-strict-diff-folders \e$B$rDI2C!#\e(B
+         \e$B$3$NJQ?t$K@_Dj$5$l$?\e(B IMAP4 \e$B%U%)%k%@$?$A$O\e(B
+         \e$BL$F14|%a%C%;!<%8?t$N%A%'%C%/$r87L)$K$d$k$h$&$K$7$?!#\e(B
+         "%inbox" \e$B$J$I!"IQHK$KJQ99$5$l$k%U%)%k%@8~$1!#\e(B
+       * \e$B%"%/%;%97?%0%k!<%W%U%)%k%@$r:G=i$K3+$$$?$H$-$K!"\e(B
+         \e$BA4%U%)%k%@$NL$FI?t$,=i4|2=$5$l$F$7$^$&%P%0$r2r>C!#\e(B
+       * [elmo] IMAP4 \e$B$G\e(B read-msg \e$B$N$?$S$K\e(B select folder \e$B$9$k$N$r\e(B
+         \e$B$d$a$?\e(B(UW v10.224 \e$B$h$j8E$$\e(B imapd \e$B$@$HLdBj$"$k$+$b\e(B)\e$B!#\e(B
+       * Summary \e$B$N\e(B view \e$B$r\e(B cache \e$B$9$k$H$-$K!"$$$A$$$A1JB3E*%^!<%/\e(B
+         \e$B$r%j%8%e!<%`$5$;$k$N$r$d$a$?!#\e(B
+
+1998-06-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 00README.ja \e$B$N$$$/$D$+$N4V0c$$$rD>$9!#\e(B
+       (\e$B;3LnM5;J\e(B <u90156@uis-inf.co.jp> \e$B$5$s$h$j8f;XE&\e(B)
+
+1998-06-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.1.3 - "Centerfold" announced in elips, tm-ja.
+
+1998-06-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Summary \e$B$N\e(B resume-mark \e$B$H\e(B highlight \e$B$r0l2s$N\e(B scan \e$B$G\e(B
+         \e$B=*$i$;$k$h$&$K$7$?!#\e(B
+
+1998-06-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Folder \e$B%U%!%$%k$K\e(B "%#mh /" \e$B$_$?$$$K=q$1$k$h$&$K$9$k!#\e(B
+       * \e$B%"%/%;%97?%0%k!<%W%U%)%k%@$N>l9g!"3+$/$^$GFbMF$r<h$j\e(B
+         \e$B4s$;$J$$$h$&$K$9$k!#\e(B
+       * wl-use-full-window -> wl-stay-folder-window\e$B!#\e(B
+
+1998-06-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * toolbar \e$B$N\e(B refine\e$B!#\e(B
+       * folder-mode \e$B$NF0:n$r=$@5!#\e(B
+       * replicate->prefetch\e$B!#\e(B
+       * refile \e$B$N?dB,$G<+J,$r3X=,$NBP>]$+$i30$9!#\e(B
+       * make \e$B$r$$$C$Q$D$G!#\e(B
+
+1998-06-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$BJV;v$r=q$/;~!"\e(BCc \e$B$K<+J,$,;22C$7$F$$$k\e(B ML \e$B$H<+J,$,4^$^$l$F$7$^$&\e(B
+         \e$B;~$K$O<+J,$O>C$9$h$&$K$9$k\e(B(\e$B@5$7$$\e(B?)\e$B!#\e(B
+       * Mail-Followup-To, Mail-Reply-To \e$B$KBP1~$7$F$_$?!#\e(B
+
+1998-06-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-insert-summary \e$B$r8+D>$7!"%9%l%C%I@8@.B.EY$r\e(B
+         \e$B9bB.2=\e(B(\e$BLs\e(B 1.5 \e$BG\\e(B)\e$B!#\e(B
+
+1998-06-07  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Summary \e$B$G\e(B News \e$B5-;v$r%-%c%s%;%k$9$k4X?t\e(B wl-summary-cancel-message
+         \e$B$r?7@_!"\e(B'C' \e$B$K%P%$%s%I!#\e(B
+       * Newsgroups \e$B$,IU$$$F$$$l$P\e(B News \e$B$K$b%]%9%H$9$k$h$&$K$7$?\e(B(\e$B$D$b$j\e(B)\e$B!#\e(B
+       * \e$B$[$+$N\e(B SEMI MUA \e$B$N$3$H$r9M$($F\e(B toolbar \e$B$rIU$1$k$N$r\e(B hook \e$B$G$O$J$/$9!#\e(B
+
+1998-06-02  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo] "/" \e$B$r4^$`\e(B Message-ID \e$B$r%U%!%$%k$K%;!<%V$9$k$N$K<:GT$9\e(B
+         \e$B$k$N$r2sHr!#\e(B ("_" \e$B$KCV49$9$k$h$&$K$7$?$,$$$$$N$+!#\e(B)
+       * wl-summary-redisplay \e$B$G!"\e(Brecenter \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-cursor-up \e$B$G!"\e(Bimportant-mark \e$B$r\e(B regexp-quote \e$B$9$k$N\e(B
+         \e$BK:$l$F$?!#\e(B
+
+1998-05-31  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$BJQ?t\e(B wl-draft-folder \e$B$r@_CV!"\e(BMew \e$B$HF1$8$h$&$K!"\e(BDraft \e$B%b!<%I$G\e(B
+         \e$B%;!<%V$9$k$H\e(B wl-draft-folder \e$B$G;XDj$5$l$?%U%)%k%@$K\e(B
+         \e$B?75,%a%C%;!<%8$H$7$FJ]B8$9$k$h$&$K$7$?!#\e(B
+       * Summary \e$B$G\e(B TAB \e$B$r2!$9$HA0$KI=<($7$?%a%C%;!<%8$KLa$k$h$&$K$9$k!#\e(B
+       * Summary \e$B$G!"\e(Bdefault-directory \e$B$r\e(B wl-tmp-dir \e$B$K$9$k!#\e(B
+       * wl-draft-open-file \e$B$rDI2C!#\e(B
+
+1998-05-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.1.2 - "Beat It" internal release.
+       * CVS \e$B$r;H$$$O$8$a$k!#\e(B
+       * Summary \e$B$N\e(B highlight \e$B$r\e(B2\e$B!A\e(B3\e$BG\9bB.2=!#\e(B
+       * te@isl.ntt.co.jp \e$B$N8f0U8+$K$h$j\e(B Folder \e$B$G%P%C%AE*$K\e(B msgdb \e$B$r\e(B
+         Sync \e$B$9$k\e(B "S" wl-folder-sync-current-entity \e$B$rDI2C!#\e(B
+
+1998-05-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B$d$C$FMh$kJV;v$O:G6a$N%a%C%;!<%8$KBP$9$k$b$N$,B?$$$H$$$&\e(B
+         \e$B%9%l%C%IDI2C$N6I=j@-$rMxMQ$7$F$A$g$C$H$@$1%9%l%C%I@8@.$r9bB.2=!#\e(B
+       * qmail-inject \e$B$r%5%]!<%H!#\e(B
+       * \e$BCfESH>C<$K\e(B miee.el \e$B$r%5%]!<%H$7$F$$$?$,!"$H$j$"$($:$d$a$F!"\e(B
+         default \e$B$O\e(B Semi-gnus \e$B$K$D$$$F$$$?\e(B smtp.el \e$B$rMxMQ$9$k$h$&$K$9$k!#\e(B
+
+1998-05-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Makefile \e$B$N\e(B ELMODIR \e$B$r\e(B elmo \e$B$K$9$k\e(B (Report by te@isl.ntt.co.jp)\e$B!#\e(B
+
+1998-05-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Tiny toolbars for XEmacsen\e$B!#\e(B
+       * important \e$B%^!<%/\e(B "$" \e$BIU$-$N%a%C%;!<%8$O!"\e(Bexpire \e$B$5$l$F$b>C$5$J$$\e(B.
+       * Summary \e$B$G\e(B "i" \e$B$r2!$9$H!"\e(Breplicate-unreplicated-msgs \e$B$r<B9T!#\e(B
+       * "U", "u", "N" \e$B%^!<%/$r?7@_!#\e(B
+       * Summary \e$B$G\e(B undo \e$B$r\e(B disable\e$B!#\e(B
+       * refile \e$B;~$K%U%!%$%k@h$r3P$($k\e(B wl-refile.el\e$B!#\e(B
+
+1998-05-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Copyright \e$BI=<($r3F%U%!%$%k$K2C$($k!#\e(B
+       * [elmo] mule2.3@19.28 \e$B$N%@%5$$\e(B string-match \e$B$G$b$&$4$/$h$&$K\e(B imap4 \e$B$G\e(B
+         search all \e$B$N7k2L$r<h$j=P$9\e(B regexp \e$B$rJQ99!#\e(B
+       * empty-trash \e$B$N$H$-\e(B goto-folder \e$B$G\e(B 'force-update \e$B$9$k$h$&$K$7$?!#\e(B
+
+1998-05-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.1.1 - "Amanda". internal release.
+       * 00README.ja, sample.addresses, sample.folders\e$B!#\e(B
+       * wl-vars.el \e$B$N@0M}!#\e(B
+       * \e$B$O$d$j$K$N$C$F\e(B X-MimeOLE: \e$B$r2C$($k$h$&$K$7$F$_$?!#\e(B
+       * XEmacs \e$B$N\e(B 'dragdrop \e$B$KBP1~!#\e(Bwl-dnd.el
+
+1998-05-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-folder.el \e$B:F5"E*\e(B folder \e$B%Q!<%5!#\e(B
+
+1998-05-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Wanderlust \e$B$H$7$F%Q%C%1!<%82=\e(B (v0.1.0)\e$B!#JQ99$,B?$9$.$F5-O?$G$-$:!#\e(B
+         (wl-draft.el/wl-address.el/wl-highlight.el \e$B$NDI2C\e(B,
+          SEMI/tm \e$B$N\e(B API \e$B$X$NBP1~\e(B,
+          mule2.3 \e$B$GF0$/$h$&$K$9$k\e(B, \e$BEy\e(B)
+
+1998-04-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * nntp \e$B$G\e(B \e$BB8:_$7$J$$%0%k!<%W$N\e(B max-of-folder \e$B$,$3$1$k%P%0$H$j!#\e(B
+
+1998-04-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * create-summary-line \e$B$G\e(B From \e$B$,\e(B nil \e$B$N>l9g$KBP=h!#\e(BDate \e$B$b!#\e(B
+       * folder-quit \e$B$G\e(B kill-buffer \e$B$K0z?tEO$9$NK:$l$F$?!#\e(B
+       * nntp \e$B$GF1$8%0%k!<%W$X$NA`:n$,B3$$$?>l9g$K$3$1$k%P%0$H$j!#\e(B
+       * Makefile \e$B$G\e(B lp.el \e$B$N0MB84X78$r=$@5\e(B (Report by te@isl.ntt.co.jp)\e$B!#\e(B
+
+1998-03-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.09
+       * Summary \e$B$NJ8;z2=$1$r2r>C!"$G$b\e(B mule2.3 \e$B$G$&$4$+$J$/$J$C$?!#\e(B
+       * update \e$B$7$?$H$-!"8:$C$?%a%C%;!<%8$,%P%C%U%!$+$i>C$($J$$%P%0$r$H$k!#\e(B
+       * v0.08
+       * IMAP4 \e$B$KBP1~!#\e(B
+
+1998-03-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * folder diff \e$B$r\e(B integer list \e$B$NHf3S$K5"Ce$5$;$k$3$H$K$h$j9bB.2=!#\e(B
+
+1998-03-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.07
+       * Mule-2.3 \e$B$KBP1~!#\e(B
+       * update \e$B$H\e(B scan-all \e$B$rE}9g!#\e(B
+       * \e$B$"$H$G8+D>$7$?$$%a%C%;!<%8$K$D$1$k%^!<%/!"\e(B"$" -- important mark \e$B$r\e(B
+         \e$B?7@_!#\e(B
+       * update \e$B$,I,MW$+$I$&$+$N%A%'%C%/$r\e(B list \e$B$NHf3S$K5"Ce$5$;$F9bB.2=!#\e(B
+       * \e$B%$%s%G%C%/%9$N%-%c%C%7%eMQ$K\e(B buffer-local-variable \e$B$r@_$1!"\e(B
+         \e$BF1$8%P%C%U%!$KBP$9$k#22sL\0J9_$N99?7A`:n$r9bB.2=!#\e(B
+       * mt \e$B$G8=:_$N%9%l%C%I$K0l3g\e(B "*" \e$B%^!<%/!#\e(B
+       * c \e$B$GA4$F$N%a%C%;!<%8$r0l3g$7$F4{FI$K!#\e(B
+
+1998-03-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.06
+       * \e$BI=<(I}$r0lDj$K$9$k!#\e(B
+       * update \e$B$r7Z$/$9$k!#\e(B
+       * \e$B%a%C%;!<%8$,8:$C$?$3$H$b\e(B update\e$B!#\e(B
+       * cache \e$B%$%s%5!<%H;~$K%^!<%/$r%j%8%e!<%`!#\e(B
+       * font-lock \e$B$N\e(B regexp \e$B$rJQ99!#\e(B
+
+1998-03-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.05
+       * \e$BL$FI%^!<%/!"\e(B"!"\e$B!#\e(B
+       * update scan\e$B!#\e(B
+       * font-lock\e$B!#\e(B             
+       * \e$BMKF|$N1Q8l\e(B/\e$BF|K\8l@ZBX$($r2DG=$K!#\e(B
+       * Petname\e$B!#\e(B
+
+1998-03-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.04
+       * \e$BMKF|$rF|K\8l$GI=<(!#\e(B
+       * \e$B%U%#!<%k%ICM$N3MF@$K<:GT$7$J$$$h$&$K\e(B overview \e$B:n@.;~$N\e(B
+         coding-system-for-read \e$B$r\e(B 'junet \e$B$K94B+!#\e(B
+
+1998-03-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.03
+       * \e$B%$%s%G%C%/%9$N\e(B elisp \e$B%*%V%8%'%/%H2=$K$h$j9bB.2=!#\e(B
+       * Date \e$B$r=P$9\e(B
+       * \e$BF1$8%9%l%C%I$G$b!"0c$&\e(B Subject \e$B$J$iI=<(\e(B
+
+1998-03-06  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.02
+       * \e$B%9%l%C%I$N4V0c$$$rD>$9\e(B
+       * indent-level \e$B$r%+%9%?%^%$%:$G$-$k$h$&$K$9$k!#\e(B
+
+1998-03-05  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * v0.01 Summary \e$B$r%9%l%C%II=<($G$-$k$@$1$N%W%m%H%?%$%W!#\e(B
+
diff --git a/etc/ChangeLog.2 b/etc/ChangeLog.2
new file mode 100644 (file)
index 0000000..b6d749c
--- /dev/null
@@ -0,0 +1,1608 @@
+1999-05-18  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * New File: [ChangeLog.en].
+
+1999-05-18  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       mouse-2 does not work in Message buffer.
+
+1999-05-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.0 pre2 - "Kokomo-pre2".
+       * Fix:
+       region of hilighting varies when the number of unread messages is
+       decreased.
+       (pointed out by Toshihiko Koadama
+               <kodama@ayame.mfd.cs.fujitsu.co.jp>).
+       * Change:
+       C-cC-s in draft and keybind of menubar is set as local-set-key in
+       each draft bufer.
+       * Fix:
+       wl-summary-mark-as-read-all does not work well when target
+       messages is hidden in close threads.
+       (pointed out by Hajime Ohsawa <ohsawa@mxq.mesh.ne.jp>).
+
+1999-05-18  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       insert mail body into a different position from position specified
+       by wl-draft-prepared-config-alist in wl-summary-reply-with-citation.
+
+1999-05-17  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Change: [bbdb-wl.el].
+       corresponding to change from wl-folder-exit-hook to wl-exit-hook.
+
+1999-05-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * pre 1.0.0 - "Kokomo-pre".
+       * Change:
+       not use replace-match().
+
+1999-05-17  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Add: [wl-ja.texi]
+       about POP-before-SMTP.
+       * Change:
+       corresponding to POP-before-SMTP.
+
+1999-05-17  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change:
+       add elmo-multi-get-msg-filename().
+       * Change:
+       wl-message-refer-article-or-url() corresponds to "mailto:".
+
+1999-05-17  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not change wl-folder-buffer-cur-{path|entity-id}, when
+       wl-summary-goto-folder is executed at interactive.
+       * Change:
+       not expire when, 2nd and 3rd elements of wl-expire-alist is nil.
+
+1999-05-17  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Add: [wl-ja.texi]
+       about AUTHINFO.
+
+1999-05-17  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       hilighting at a line pointed by a mouse.
+
+1999-05-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       remove BETA.
+       * Fix:
+       toobar is not available at Folders on XEmacs.
+       * Fix:
+       merging partial does not work well when Subjects are written in
+       Japanese.
+       * 0.10.3 - "Jumpin' Jack Flash".
+
+1999-05-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       not consider WL_PREFIX, ELMO_PREFIX when doing "make uninstall".
+       * Change:
+       not use (point-at-bol), (point-at-eol) for Mule2.3.
+       * Change:
+       wl-folder-exit-hook -> wl-exit-hook\e$B!#\e(B
+       * Change:
+       rename wl-folder-exit -> wl-exit\e$B!#\e(B
+       * Change:
+       update ja.Emacs.
+       * Add: [wl-ja.texi]
+       about wl-summary-print-message.
+
+1999-05-16  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not delete a message buffer when there are no unread messages,
+       even if wl-auto-select-first is t.
+
+1999-05-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Add: [wl-ja.texi]
+       about highlight\e$B!"\e(Binternal Folder.
+       * Change:
+       defvars in wl-highlight move into wl-vars, and is set as defcustom.
+       * Fix:
+       error happens when selecting nntp Folder in unplugged.
+       (pointed out by MARUYAMA Yoshio <maru@kthree.co.jp>).
+       * Fix:
+       some inconvinience related to Stick Summary happen when
+       wl-stay-folder-window is t.
+       * Change:
+       hilighting a line pointed by a mouse on Summary from begging of
+       line to end.
+       * Change:
+       change an order of initizalization and messages in wl-init.
+       not check existence of basic Folder with prefix-arg.
+       * Change:
+       save view cache when exiting Sticky Summary.
+
+1999-05-14  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       not call wl-mail-setup-hook when doing wl-summary-reedit().
+
+1999-05-14  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       modificaton of wl-summary-next-folder-or-exit() is not considered
+       in case that wl-auto-select-first is t.
+       * Change:
+       change of move command is enable when wl-summary-next-no-unread is
+       t.
+
+1999-05-14  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Add: [wl-ja.texi]
+       about wl-draft-write-current-newsgroup.
+
+1999-05-13  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Change:
+       hilight mouse-face without useing mode-motion-hook.
+       * Change:
+       add wl-version-show.
+
+1999-05-13  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * Add: [wl-ja.texi]
+       about Sticky Summary.
+
+1999-05-13  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       select an unexpected window after doing wl-summary-forward at a
+       Folder wl-summary-stick does.
+
+1999-05-13  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       do wl-template without using recursive-edit.
+
+1999-05-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       add 'x-face as a sub function of wl-draft-config-alist.
+       * Change: [wl-template]
+       hilight select buffer.
+
+1999-05-13  Mito <mit@nines.nec.co.jp>
+
+       * Change:
+       do (wl-summary-toggle-disp-msg 'off) in
+       wl-summary-next-folder-or-exit() in order to avoid the event that
+       previous message is displayed when moveing to other folders.
+       * Fix:
+       error happens when calling wl-summary-toggle-disp-msg() if its arg
+       is off.
+
+1999-05-13  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       error happens when NNTP Folder is updated by
+       wl-folder-update-recursive-current-entity.
+
+1999-05-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       caching does not work in pop3 and imap4, nntp when
+       elmo-*-use-cache is nil.
+       (pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>).
+
+1999-05-12  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       not read messages in localnews.
+       args of elmo-localnews-local-file-p() is not enough.
+
+1999-05-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 0.10.2 - "I'm Your Man".
+
+1999-05-12  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Add: [wl-ja.texi]
+       about some commands.
+
+1999-05-12  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * Add: [sample.dot.wl]
+       about auto-refile configuration.
+       * Add: [wl-ja.texi]
+       about wl-summary-auto-refile-skip-marks.
+
+1999-05-12  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       checking newsgroups with upper case letters fails.
+
+1999-05-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       read message is not cached in localdir.
+       * New Variables: wl-ps-print-buffer-func.
+       assign a function in ps-print.
+       default is  'ps-print-buffer-with-faces.
+       (requested by Mito <mit@nines.nec.co.jp>).
+       * Change:
+       display an error message if same name exists between group and
+       petname when analyzing .folders.
+
+1999-05-11  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       update sample.dot.wl.
+       * Fix:
+       description about access group and so on.
+
+1999-05-11  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       when messages targeted for "$" in filter Folder are local files,
+       they are marked but not cached.
+
+1999-05-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       implement partial unification functions for tm.
+       * Fix:
+       wl-defface does not work on Nemacs.
+       * Change:
+       speed up wl-summary-exec.
+       * Fix:
+       not assign 'D' on Summary.
+       * Fix:
+       when deleting messages in imap4, the case they are not deleted
+       from msgdb exists in some thread circumstances.
+       * Change:
+       do (sit-for 0) in order to display results at once in
+       wl-folder-check-one-entity.
+       * Change:
+       wl-message-redisplay-hook is unwind-protected in order to make
+       a cursor position a return to Summary when doing C-g at a prompt
+       like bbdb.
+
+1999-05-10  Tomokazu Matsumaru <matty@tamtam.co.jp>
+
+       * Fix:
+       hang up POP3 Folder with a lot of messages.
+
+1999-05-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New Variable: wl-folder-sync-range-alist, wl-default-sync-range.
+       change default of sync in each folder is enable.
+       (requested by Toshihiro KAMISHIMA <kamisima@etl.go.jp>).
+       * Fix:
+       "make" command fails on Mule 2.3.
+       (pointed out by Toshihiko Koadama
+               <kodama@ayame.mfd.cs.fujitsu.co.jp>).
+       * Fix:
+       display letters in an unexpected code because wl-vars.el is
+       written by EUC.
+       (pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>).
+       * 0.10.1 - "Harlem Shuffle".
+
+1999-05-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: (maybe)
+       make current Folder strange when doing C-g while select-folder in
+       imap4.
+       (pointed by Mizuhara <mizuhara@acm.org>).
+       * New Variable: elmo-archive-use-cache\e$B!"\e(Belmo-nntp-use-cache,
+                       elmo-imap4-use-cache\e$B!"\e(Belmo-pop3-use-cache.
+       determine each read message to cache or not
+       * Change:
+       do away with wl-no-cache-folder-list.
+       * Change:
+       cache is enable at once after marking as important-mark.
+
+1999-05-08  Koichiro Ohba <koichiro@ca.mbn.or.jp>
+
+       * Change: [wl-ja.texi]
+       typo and so on.
+
+1999-05-08  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [wl-ja.texi]
+       typo and so on.
+
+1999-05-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       a cursor does not return to Summary from message buffer after
+       wl-message-prev-page() in the case that ^L is used for starting a
+       new page.
+       * Change:
+       do rename-file() for *.elc files when doing "make install".
+       * Change:
+       because mode-motion-hook is particular for XEmacs, delete error
+       messages when it is byte-compiled on GNU Emacs.
+
+1999-05-05  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       errors happens in wl-summary-refile-region,
+       wl-summary-copy-region, wl-thread-refile,  wl-thread-copy.
+
+1999-05-05  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix: [elmo-{nntp|imap4|pop3}.el]
+       case-fold-search is not enable in target buffer.
+
+1999-05-04  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       variables of wl-draft-config-alist are not enable when
+       wl-draft-send is aborted once and retried.
+
+1999-05-01  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Change:
+       in NNTP Folder enable to read newsgroup having top categories
+       whose initials are numeral.
+
+1999-04-30  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * New Function: wl-defface.
+       define face as portable.
+
+1999-04-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       duplicate a name part of folder when re-editing drafts on edit
+       from Summary.
+       (pointed out by OKAZAKI Tetsurou <okazaki@be.to>).
+       * Fix:
+       asking where to jump when doing s->rescan in empty Folder occurs.
+       (pointed out by OKAZAKI Tetsurou <okazaki@be.to>).
+       * Change: [bbdb-wl]
+       add (require 'wl).
+       * Fix:
+       asking where to jump when doing wl-thread-open-close at a message
+       with no children and no parents of threads.
+       * New Commands: wl-summary-drop-unsync,
+                      wl-folder-drop-unsync-current-entity.
+       make all not synchronous messages no existence.
+       assing as 'D'.
+
+1999-04-28  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * New Variable: wl-draft-prepared-config-alist.
+       extend some functions in wl-draft-config-alist.
+       * New File: [wl-template].
+       new feature to select or insert template on draft buffer.
+
+1999-04-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       use wl-draft-mode-map except excepting Nemacs.
+       (advised by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-04-13  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       case-fold-search on Summery buffer is always treated as nil.
+       * Fix:
+       return value when elmo-nntp-open-connection fails is different
+       from it written in docstring.
+
+1999-04-28  Mito <mit@nines.nec.co.jp>
+
+       * Fix:
+       mail send command fails when wl-draft-buffer-cur-summary-buffer is
+       #<killed buffer>.
+
+1999-04-27  Mito <mit@nines.nec.co.jp>
+
+       * Change:
+       execute confirmation when printing out by '#' on Summary.
+
+1999-04-27  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       wl-summary-refile-region works wrong.
+
+1999-04-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       not work on Nemacs.
+       * Fix:
+       problems happen when custom does not exist.
+       * Fix:
+       merge forgotten patches (including modification for POP3 hang-up
+       problem).
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * 0.10.0 - "Got My Mind Set On You".
+       * Fix:
+       localnews is not treated as local in wl-summary-local-p.
+       (reported by Kentaro Toda <ktoda@v7.com>)
+
+1999-04-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       implement each backend function of elmo-internal.el.
+       * Fix:
+       modify (get-buffer wl-summary-buffer-name) all over for
+       correspondence to Sticky Summary.
+       * New command: wl-summary-stick.
+       change present summary to be sticky.
+       assign it as \M-s.
+
+1999-04-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       rewrite partial unification functions for SEMI.
+       * Change: [bbdb-wl].
+       corresponding to Sticky Summary.
+       * Fix:
+       wl-default-draft-cite works wrong.
+       (set a wrong citation title when a cursor on Summary get out of
+       position.)
+
+1999-04-23  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       jump to right message-id by clicking center of left message-id
+       when body has two message-id at one line.
+
+1999-04-23 Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       error happens if it is empty when doing wl-thread-{copy,refile} at
+       end of line on wl-summary mode.
+
+1999-04-22  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       moves to Sticky Summary when moving to Folder with prefix arg.
+       (former "wl-folder-goto-folder\e$B!"\e(Bwl-summary-goto-folder" changes to
+       wl-folder-goto-folder-subr\e$B!"\e(Bwl-summary-goto-folder-subr
+       respectively.)
+       * Change:
+       not re-highlight on draft-buffer by "^L" when
+       wl-highlight-body-too is nil.
+       (modified by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Change:
+       Sticky Summary.
+       (requested by Mito <mit@nines.nec.co.jp>).
+       * Change:
+       mmelmo-imap4 succeeds to mmelmo.
+
+1999-04-21  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       some bugs in wl-folder-close-parent-entity.
+       * Change:
+       extend functions of wl-thread-open-close in order to close its
+       parents when having no children.
+       * Change:
+       wl-folder-close-parent-entity -> wl-folder-open-close.
+       * Change:
+       assign wl-folder-open-close as "/".
+
+1999-04-21  Mito <mit@nines.nec.co.jp>
+
+       * Change:
+       expand nested aliases.
+
+1999-04-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       not set cursor at a first message in wl-summary-goto-folder when
+       wl-summary-move-order is 'new and the message is marked as "$" and
+       no marks excepting "$" exists in Folder.
+       * Fix:
+       doing wl-summary-cursor-down twice(!) in wl-summary-goto-folder.
+
+1999-04-21  Kazuyuki IENAGA <ienaga@jsys.co.jp>
+
+       * corresponding to custom.
+
+1999-04-21  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not enable to get get information of folders with host name in the
+       case that server append extra messages to response against group
+       commands, ex. leafnode.
+
+1999-04-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * New File: [elmo-internal.el].
+       Folder for browsing internal data.
+
+1999-04-19  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * New Variable: wl-draft-highlight-and-recenter.
+       recenter after hilighting by C-l on draft.
+       * Fix: [elmo-nntp.el].
+       args of elmo-nntp-search are wrong.
+
+1999-04-19  Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp>
+
+       * Change:
+       enable to specify port number in folder definition of nntp.
+
+1999-04-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       delete keybind \M-O (wl-summary-copy-prev-destination) to avoid
+       the problems as to a cursor on vt-100.
+       (pointed out by SUGANO KEI <siesta@mvd.biglobe.ne.jp>,
+        advised by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Fix:
+       each message number is always set as 0 when the number of messages
+       is beyond 6 digits.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+
+1999-04-19  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       not display additional messages on offline when visiting
+       destination Folder after doing offline refile/copy.
+       * Change:
+       execute processing of unread messages on offline.
+
+1999-04-19  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Change:
+       delete keybind \M-O in Summary.
+
+1999-04-17  Koichiro Ohba <koichiro@ca.mbn.or.jp>
+
+       * Add: [wl-ja.texi].
+       about wl-summary-auto-refile.
+       * Add: [wl-ja.texi].
+       about wl-summary-auto-refile.
+       * Change: [sample.dot.wl].
+       disable to add Mail-Followup-To and Mail-Reply-To by itself.
+
+1999-04-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       changes mode of draft buffer to wl-draft-mode that mail-mode
+       derived.
+       (advised by Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>)
+       * New Variable: [WL-ELS] WL_PREFIX\e$B!"\e(BELMO_PREFIX.
+       install wl and elmo modules using each values as relative
+       directory from ELISPDIR.
+       default is "".
+       (advised by Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>).
+       * Fix:
+       when *.elc files compiled by other meacs exists, "make clean" does
+       not work on other emacs because of loading WL-ELS.
+       * Fix:
+       POP hangs up when multiple messages exist.
+       (reported by Ishikawa Ichiro <ichiro@mail.ne.jp>).
+
+1999-04-13  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: [elmo-nntp.el].
+       about typo in docstring.
+
+1999-04-12  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       all bodies change to signature-face when re-edting by "E" summary
+       buffer.
+       * Change:
+       hilight at a line pointed by mouse in summary mode and folder mode
+       on XEmacs only.
+
+1999-04-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       when on draft a line begins from TAB and the next field is empty
+       bug to delete the line happens.
+       (pointed put by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Fix:
+       buffer displaying in wrong code remains when doing C-g at once
+       after typing 'q' on Summary.
+       (pointed out by Abe <take@gohome.org>).
+       * Fix:
+       pick up Japanese Subject fails on XEmacs.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Add: [ChangeLog].
+       forget to add a modification against the problem
+       elmo-nntp-get-folders-info hangs up on 4/2.
+       (pointed out by Nakagawa Makoto <nakagawa@pochi.tis.co.jp>).
+       * 0.9.8 - "Faith".
+
+1999-04-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * New Variable: elmo-msgid-replace-string-alist.
+       define rules of conversion from message-id to cache file name.
+
+1999-04-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix: [elmo-imap4.el].
+       LOGIN certification fails when password includes brank space.
+       (reported by Tadashi KUMANO <kumano@strl.nhk.or.jp>).
+
+1999-04-07  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Change:
+       [NNTP] corresponding to AUTHINFO.
+
+1999-04-07  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       re-load by C-u even if caches exist.
+       * Change:
+       enable to start up by C-g even if network is not connected when
+       initializing.
+
+1999-04-06 SHIMADA Mitsunobu <simm-wl@fan.gr.jp>
+
+       * Fix:
+       the bugs to fail to delete or refile mails in Maildir occur.
+
+1999-04-03 OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: [wl-ja.texi].
+       description about default value of
+       wl-insert-mail-(followup|reply)-to is wrong.
+
+1999-04-02  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * New Variable: elmo-nntp-get-folders-securely.
+       when non-nil, modification to avoid elmo-nntp-get-folders-info not
+       returing is enable.
+       default is nil.
+
+1999-04-02  Nakagawa Makoto  <nakagawa@pochi.tis.co.jp>
+
+       * Fix:
+       the bug that elmo-nntp-get-folders-info does not return and hangs
+       up occurs on cnews(?).
+
+1999-03-31  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       change petname-alist to obarray.
+       * New Variable: wl-summary-divide-thread-when-subject-changed.
+       makes thread when subject changes if it is t.
+       (requested by akira yamada <akira@arika.org>).
+       * New Variable: wl-summary-subject-filter-func.
+       assign a function to process before comparison with subjects.
+       * Change:
+       not funcall wl-summary-from-func and wl-summary-subject-func,
+       wl-summary-subject-filter-func and fset them at startup.
+       * Change:
+       change wl-draft-config-exec-flag to buffer local variable.
+       * Fix:
+       error happens by M->j->q on Summary.
+       (pointed out by Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>).
+       * Change:
+       default of face for signature is set as colorful fonts.
+
+1999-03-30  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Change:
+       disable to do 'd' at an empty line.
+       * Fix:
+       if there are multiple articles with target message-id in same
+       folder, elmo-imap4-delete-msg-by-id fails when doing
+       elmo-dop-queue-flush after deleting one of messages.
+
+1999-03-29  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Change:
+       detect signature region wiser.
+       * Change:
+       hilight signature.
+
+1999-03-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       summary is wrongly displayed when doing goto-folder to present
+       (same) folder.
+       (pointed out by OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>).
+       * New Variable: wl-draft-clone-local-variable-regexp.
+       default is "^mime".
+       copy values of local variables matching its value to sending
+       buffer.
+
+1999-03-26  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Command: wl-summary-write-current-newsgroup.
+       do completiton of Newsgroup: field and prepare draft buffer when
+       posting messages to the current-folder newsgroup in Summary
+       mode.
+       assign 'W'.
+
+1999-03-25  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * Fix:
+       not call wl-mail-setup-hook in wl-summary-forward().
+
+1999-03-25  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       merge MURATA's patch that lambda expression is available in
+       wl-draft-config-alist.
+
+1999-03-25  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not decode file created by only one message in
+       wl-summary-temp-mark-uudecode.
+
+1999-03-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       not send messages when default-case-fold-search is nil.
+       (pointed out by Kenji Kuzuhara <kuz@post1.com>).
+
+1999-03-24  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Command: wl-folder-close-parent-entity.
+       assign M-SPC.
+       * New Variable: wl-draft-config-exec-flag.
+       execute wl-draft-config-exec only once.
+
+1999-03-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix: [im-wl.el] (again).
+       message-id is wrongly added when wl-insert-message-id is nil.
+       (pointed out by Ishikawa Ichiro <ichiro@mail.ne.jp>).
+       * Fix: (again)
+       warning messages appear on xemacs with (featurep 'xpm) and -nw
+       option when startup.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+
+1999-03-18  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Add: [wl-ja.texi].
+       about completion.
+       * Change:
+       when doing completion of headers like "To:" or "Cc:" in draft
+       completion from lower case letters is enable.
+
+1999-03-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.7 - "Everything She Wants".
+       * Fix:
+       abort creating msgdb when there are some messages with strange
+       date in multi Folder.
+
+1999-03-17  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Add:
+       a function to edit petname interactively.
+
+1999-03-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       can do nothing in present folder when aborting to refile messages
+       to non-existent IMAP folder.
+       (pointed out by Abe <take@gohome.org>).
+       * Change:
+       dot distinguish between groups and normal Folders in
+       wl-folder-next-unsync.
+       * Fix:
+       messages is incomplete when doing syncing by toolbar button on
+       XEmacs.
+
+1999-03-12  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * Fix: [00README].
+
+1999-03-12  Masato Taruishi <taru@debian.or.jp>
+
+       * Add: [00README].
+
+1999-03-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       if a partial failure occurs in refile or copy, it does not affect
+       the whole action.
+       * Change: [wl-ja.texi].
+       change construction of each section to be obvious in using pTeX.
+       (pointed out by Morifuji <hajime@morito.org>)
+
+1999-03-09 Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Change:
+       fix confusing problem that cursor moving to end of buffer while
+       doing refile.
+
+1999-03-06 Ishikawa Ichiro  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Fix: [im-wl.el].
+       message-id is wrongly added when wl-insert-message-id is nil.
+
+1999-03-04 Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Change: [tm-wl.el].
+       not use (fset 'mime-preview/x-face-function-use-highlight-headers
+       nil) in tm-wl-setup.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * New Command: wl-summary-refile-prev-destination.
+       assign 'M-o'.
+       (requested by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * New Command: wl-summary-copy-prev-destination.
+       assign 'M-O'.
+
+1999-03-05  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       '\n' is wrongly inserted into User-Agent: when using tm.
+       * Change:
+       corresponding to subject like [???, 0000].
+
+1999-03-04  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       warning messages appear on xemacs with (featurep 'xpm) and -nw
+       option when startup.
+       * New Variable: wl-auto-insert-x-face.
+       default is t.
+       * Change:
+       when wl-auto-insert-x-face is t and ~/.xface exists it is
+       automatically inserted. (as usual, default)
+       * Change:
+       insertion of X-Face: by wl-draft-insert-x-face-field is enable
+       when making draft.
+       * Change:
+       error messages are displayed if ~/.xface does not exist when doing
+       C-c C-a.
+
+1999-03-03  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * New Hook: hook wl-summary-refile-hook.
+
+1999-03-03  Hajime MORITO  <hajime@morito.org>
+
+       * Change: [wl-ja.texi].
+       remove errors in using ptex.
+       * Fix: [wl-ja.texi].
+       not display '{','}'.
+
+1999-03-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.6 - "Dirty Diana".
+       * Change:
+       [elmo] avoid the problem that expiring cache is disable when there
+       is a strange  cache file.
+       * New Variable: wl-summary-auto-refile-skip-marks.
+       unread messages is not target of auto-refile.
+       (requested by Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>).
+       * Fix:
+       set extra(!) unread flag when displaying messages in imap4
+       * Change: [wl-ja.texi].
+       delete about wl-summary-wday-use-japanese.
+       add about wl-summary-weekday-name-lang.
+       (pointed out by Kunihiro Ishiguro <kunihiro@zebra.org>).
+       * Add: [wl-ja.texi].
+       about wl-summary-fix-timezone.
+       (pointed out by Iba <iba+@andrew.cmu.edu>).
+
+1999-03-01  Hermit-chan <hermit@tomato.saino.ne.jp>
+
+       * Fix:
+       errors happen if M-x wl-draft is done before M-x wl when
+       wl-draft-folder is configured.
+
+1999-03-01  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * Fix: [wl-highlight.el, ChangeLog].
+       typo.
+
+1999-03-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       not distinguish between all events excepting XEmacs key in
+       wl-ask-folder.
+
+1999-02-28  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       extend expression of wl-draft-config-alist.
+
+1999-02-26  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change: [wl-refile.el].
+       do downcase in getting extra-field.
+       * Change: [wl-refile.el].
+       delete unnecessary variables.
+
+1999-02-26  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix:
+       menues of Summary
+
+1999-02-25  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       fail to check unread messages in filter Folder.
+
+1999-02-10  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change:
+       avoid font-lock being enable in draft.
+
+1999-02-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.5 - "California Girls".
+
+1999-02-25  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       not display minus number and do synchronization when
+       wl-folder-notify-deleted is 'sync.
+
+1999-02-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * New Variable: wl-folder-notify-deleted.
+       display minus number when messages are deleted.
+       default is nil.
+       * Change:
+       execute wl-summary-auto-refile by default in closing threads.
+       execute it in opening all threads if with Prefix argument.
+       * New Variable: wl-x-face-file.
+       default is  "~/.xface".
+
+1999-02-16  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Variables: elmo-passwd-alist-{load,save}.
+       load/save password from/to file configured by new variable
+       elmo-passwd-alist-file-name.
+
+1999-02-11  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * Add: [wl-ja.texi].
+       about "~/.xface".
+
+1999-02-06  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change:
+       concatinate "\n" firstly before insert header by
+       wl-draft-replace-field.
+
+1999-02-06  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Change:
+       in imap unread information is reported to destination of copy.
+
+1999-02-05  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * New Variable: wl-highlight-refile-destination-face.
+       face for destination of refile.
+       * Fix: [wl-ja.texi].
+       about '$'.
+       (advised by GOTO <pf21@pure.cpdc.canon.co.jp>)
+
+1999-02-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Fix:
+       hilighting is wrong after checking unread messages in folders on
+       XEmacs.
+
+1999-02-03  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Variable: wl-folder-prefetch-entity.
+       assign 'I'.
+
+1999-02-03  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * Change: [sample.dot.wl].
+       function to refer folder name in my-wl-summary-from-func-petname
+       is called in summary-mode only.
+
+1999-02-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * New Functions: wl-summary-auto-refile, wl-refile-rule-alist.
+
+1999-02-02  IMAI Takeshi <imai@ed2.com1.fc.nec.co.jp>
+
+       * Fix:
+       errors happen when doing refile to imap folder in wl-expire.
+
+1999-01-29  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * Change:
+       do widen when views in Summary mode is saved into cache.
+
+1999-01-22  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       extend wl-auto-check-folder-name.
+
+1999-01-19  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       update summary information before doing expire in folder mode.
+       * Fix:
+       errors happen because of omission of reserve-marked-msg when no
+       messages to expire exist.
+       * Change:
+       give consideration to year change in elmo-datevec-substitute.
+
+1999-01-19  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * New Variables: wl-auto-uncheck-folder-list,
+                        wl-auto-check-folder-list.
+       skip checking group when startup.
+       checking archive folders is skipped by default.
+       (requested by Akihiro Motoki <motoki@ptl.abk.nec.co.jp>).
+       * Fix: [elmo-nntp.el].
+       getting message-id from server does not work well.
+
+1999-01-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Add: [wl-ja.texi].
+       about mA, mf and so on.
+       * Change:
+       not jump to groups having no unread messages in
+       wl-folder-{prev,next}-unread. (if with Prefix ARG, jumps).
+       (pointed out by Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>).
+       * Change:
+       avoid errors when no folders exist in wl-folder-check-entity.
+       (pointed out by Ishikawa Ichiro <ichiro@mail.ne.jp>).
+
+1999-01-16  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * New Variable: wl-summary-temp-mark-uudecode.
+       * Change: [wl-ja.texi].
+       about @item->@defvar.
+
+1999-01-15  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       errors happen because of doing reference to non-existent
+       property when non-existent folders in ~/.foders is specified in
+       wl-{folder|summary}-goto-folder.
+
+1999-01-15  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change: [elmo-archive.el].
+       check footer in header-regexp.
+       * CHange: [elmo-archive.el].
+       make compression rate of rar high.
+
+1999-01-15  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       wl-expire does not work on Emacs based on 19.28.
+       * Fix: [wl-fldmgr.el].
+       wl-fldmgr-add does not work on Emacs-19.
+
+1999-01-14  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not create hierarchical structure of access groups on Emacs-19 or
+       before.
+       * Fix: [wl-fldmgr.el].
+       errors happen when inserting folder into empty folder.
+       * Change: [wl-expire.el].
+       stop process in displaying error when calling elmo fails.
+
+1999-01-14  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       implement wl-summary-temp-mark-prefetch, which does not work well,
+       again.
+       (pointed out by Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>).
+       * Fix:
+       a subject of mail prepared in draft buffer is displayed in way of
+       including ESC code when trying to reply mails with Japanese
+       subject on Meadow.
+       (pointed out by Koji IIDA <iida@isl.ntt.co.jp>).
+
+1999-01-13  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change:
+       LHA archive is enable on Windows.
+
+1999-01-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.4 - "Broken Wings".
+       * Fix:
+       not load information of all folders when both
+       wl-folder-init-no-load-access-folders and
+       wl-folder-init-load-access-folders are nil.
+       * Fix:
+       fetch errors happen when visiting to same folder after leaving
+       from multi folder in NNTP.
+
+1999-01-13  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       change wl-folder-entity-alist and wl-folder-entity-id-name-alist
+       to obarray (hashtable).
+       * Change:
+       merge wl-folder-entity-alist and elmo-folder-info-alist.
+       * Change:
+       fasten display update when checking.
+       abolish variable wl-folder-check-fast.
+       * Change:
+       definition of folder of access group loaded in initialization is
+       enable.
+       * Change:
+       getting lists of access group in hierarchical structure is enable.
+       * Change:
+       change mark of unsubscribe folders to '#'.
+       * Change:
+       display elapse time in case that processing of operations in
+       folder mode take a lot of time.
+
+1999-01-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       make wl-tmp-dir if it does not exist.
+       (pointed out by Tadashi Kadowaki <kadowaki@stat.phys.titech.ac.jp>).
+       * Change:
+       make wl-queue-folder when startup if it does not exist.
+
+1999-01-12  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       xpm is not in center in wl-demo in case that window-width is 100,
+       for example.
+
+1999-01-12  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change: [elmo-archive.el].
+       add parameter of rar and fix for windows-nt.
+
+1999-01-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change: [elmo-nntp.el].
+       display all newsgroups by "-/".
+       (pointed out by Ichiro Ishikawa <ichiro@mail.ne.jp>).
+       (notes: this chenge is overwritten by MURATA's patch on 1999-1-13).
+       * Fix:
+       behaviour in filter folder at unplugged is wrong.
+       * Add:
+       'mA' (reply with multiple citation to messages with temporary mark).
+       'mf' (multiple forward messages with temporary mark).
+         (\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * Fix:
+       cache is not saved when leaving from Summary after being at
+       unplugged.
+       * Change: [elmo-nntp.el].
+       corresponding to Cancel-Lock.
+
+1999-01-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change: [wl-dnd.el].
+       adjust it to API on XEmacs21.2.8.
+
+1999-01-08  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not include parent folders in elmo-localdir-list-folders-subr.
+
+1999-01-06  Ken'ichi OKADA <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Hook: wl-highlight-message-hook.
+
+1999-01-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [elmo-util.el].
+       specification of elmo-default-imap4-server in a form such as
+       "hoge%imap_server@gw" is enable.
+
+1999-01-05  Hironori Fukuchi <nory@valis.co.jp>
+
+       * Fix:
+       sending process fails though the message "sending...done" is
+       displayed in minibuffer when non-existent address is written in To
+       field.
+
+1999-01-03  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       To: field is always set as nil because of type in
+       wl-draft-edit-string.
+
+1998-12-31  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       wrongly duplicate parent folder having sub directory in
+       elmo-localdir-list-folders-subr.
+       * Change:
+       wl-break-pages is restricted by being always nil in
+       wl-summary-redisplay-no-mime.
+       * Change:
+       return value of two or more lower directories in
+       elmo-localdir-list-folders-subr even if file system does not have
+       concept of link count.
+       (it is enable on OS/2 version variant and Mule for Win32 by
+       default).
+       * Change:
+       delete uselessness functions not called.
+
+1998-12-27  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       errors happen when folder having the same name as group exists
+       before the group.
+
+1998-12-27  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [wl-folder.el].
+       not move to all folders and only do catchup for folders with
+       new/unread messages in wl-folder-mark-as-read-all-current-entity
+       (for speed up).
+
+1998-12-25  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Fix:
+       modification to fix display of summary in wrong code does not work
+       on Emacs 20.2 or below including Meadow.
+       (pointed out by Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>).
+
+1998-12-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.3 - "Last Christmas". Christmas limited version(?).
+
+1998-12-23  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       fix not to use "/" as pass separator.
+       * CHange:
+       replace delq with delete if possible.
+
+1998-12-21  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * New File: [wl-expire.el].
+       add a new feature to delete or move old messages automatically.
+       * Change:
+       be to autoload wl-fldmgr.el.
+       * Change: [wl-folder.el].
+       arrange and speed up some commands related with automatic open of
+       groups.
+       * Change:
+       not load LOGO files excepting XEmacs in byte-compiling wl-demo.el.
+       * Fix: [elmo-archive.el].
+       errors happen if directories do not exist in
+       elmo-archive-list-folders when elmo-archive-treat-file is non-nil.
+       * Fix:
+       last two patches in [WL 838] is not used.
+
+1998-12-21  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       avoid wrong type argument errors when errors happen in sending
+       process on XEmacs.
+       (pointed out by Toshihiro KAMISHIMA <kamisima@etl.go.jp>).
+
+1998-12-18  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       show an atmosphere like Christmas.
+       * Change:
+       use decoded letters as arg of wl-draft.
+       (based on modification by Hidekazu NAKAMURA
+                                 <u90121@uis-inf.co.jp>).
+       * Fix:
+       display summary in wrong code on Emacs 20.2 or below including
+       Meadow.
+       (pointed out by Hidekazu NAKAMURA <u90121@uis-inf.co.jp>,
+                       Fujii <fujii@mail.fjts.fujitsu.co.jp>).
+
+1998-12-17  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * Change:
+       avoid result being "Re: Re:" in case of encoding letters including
+       "Re:".
+
+1998-12-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.2 - "Addicted To Love".
+
+1998-12-17  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix: [wl-fldmgr.el].
+       possible to destory wl-folder-entity-id-name-alist when an empty
+       folder is deleted.
+       * Change: [elmo-archive.el].
+       to use a function in method is enable.
+       * Change: [elmo-archive.el].
+       to add or to delete messages is enable in 'tgz.
+       change suffix of 'tgz to ".tar.gz".
+       * Fix: [elmo-archive.el].
+       not give consideration to prefix in
+       elmo-archive-msgdb-create-as-numlist-subr2.
+
+1998-12-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       replace contents of commands in menu for mail with it for wl in
+       draft buffer.
+       * Change:
+       define open-network-stream-as-binary if it is not defined so that
+       smtp.el works well when the latest version apel is not used.
+       * Change:
+       adjust smtp.el to the latest version FLIM.
+
+1998-12-16  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix: [wl-fldmgr.el].
+       wl-folder-newsgroups-hashtb is always nil when adding not nntp
+       folders.
+
+1998-12-16  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * Change: [WL-ELS].
+       not install smtp.el when using SEMI.
+
+1998-12-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       put date parts of In-Reply-To: in "".
+       * Change:
+       storage of summary created by wl-summary-rescan is executed in
+       finishment of summary not but of scan.
+       * New Variable: wl-folder-thread-indent-set-alist.
+       enable to select indent letters of thread in each folder.
+       change to use wl-thread-indent-level,
+       wl-thread-have-younger-brother-str, wl-thread-youngest-child-str,
+       wl-thread-vertical-str, wl-thread-horizontal-str,
+       wl-thread-space-str as default value when nothing is matched by
+       using rules defined by it.
+       * New Variable: wl-folder-weekday-name-lang-alist.
+       enable to select method to display day of the week in each folder.
+       change to use wl-summary-weekday-name-lang as default value when
+       nothing is matched by rules defined by it.
+       * Fix: [elmo-nntp.el, elmo-imap4.el, elmo-msgdb.el].
+       display Chinese or Hangul letters in wrong code because of wrong
+       creattion of Subject or From for saving msgdb.
+       * Change:
+       to {insert|store} cache of summary is done in
+       as-binary-{input|output}-file, and to do encode/decode is done in
+       mime-charst of each buffer.
+       * Change:
+       call elmo-create-folder even when wl-draft-folder does not exist
+       in wl-init.
+       * Change:
+       become wl-generate-user-agent-string corresponding to Nemacs.
+       insert version information of tm.
+       * Fix:
+       insert child thread into an unexpected position if target message
+       is hidden in close thread when deleting messages. (maybe)
+       * Change: [bbdb-wl.el].
+       do require necessary modules in byte-compiling.
+       * Change:
+       put smtp-via-smtp in (as-binary-process).
+       (based on reports by
+         Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp> and others).
+       * Change: [wl-ja.texi].
+       @directory is enable by default.
+       (pointed out by SENDA Shigeya <senda@iod.ricoh.co.jp>).
+
+1998-12-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * New File: [wl-mule.el, wl-nemacs.el].
+       * Change:
+       merge wl-nemacs and a main trunk.
+
+1998-12-10  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not refer Reference field instead of In-Reply-To field if
+       In-Reply-To field contains no message-id.
+
+1998-12-11  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.1 - "Yankee Rose".
+
+1998-12-10  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       change name of draft buffer ("1" -> "+draft/1").
+       * New Variable: wl-jump-to-draft-buffer.
+       * Change:
+       processing of matching in wl-draft-config-alist continues when is
+       succeeded once.
+       * Add Hook: wl-draft-config-exec-hook.
+       * New Variable: wl-draft-always-delete-myself.
+       * Fix:
+       elmo-archive-list-folder always returns nil wrongly when prefix of
+       archive folder includes numeral.
+       * Change:
+       elmo-*-copy-msgs returns non-nil if suceeded.
+       * Change:
+       not execute deletion if processing of copy in elmo-move-msgs
+       fails.
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       use elmo-match-string, elmo-match-buffer if possible.
+       * Change:
+       default value os wl-insert-mail-followup-to,
+       wl-insert-mail-reply-to is nil.
+       * Change: [wl-ja.info].
+       work well on Emacs 20.3.
+       * Change:
+       start up by "M-x wl-draft" work well.
+       * Change:
+       reduce warning messages in byte-compiling on Mule.
+
+1998-12-10  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Fix:
+       not update number-alist of msgdb after pack-number.
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       insert Bcc: field regardless of value of mail-self-blind when
+       wl-bcc is defined (adjustment to an action of wl-fcc).
+
+1998-12-10  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * New Variable: wl-bcc.
+       put value of wl-bcc into Bcc: field when non-nil.
+
+1998-12-10  SENDA Shigeya <senda@iod.ricoh.co.jp>
+
+       * Change: [wl-ja.texi].
+       fix for XEmacs.
+       * Fix: [wl-ja.texi].
+       one vindex is lack.
+       * Change: [WL-ELS].
+       install info when choosing install-package on XEmacs.
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Fix:
+       when in the middle of thread there are any messages in close thread
+       hereafter threads do not be inserted.
+
+1998-12-09  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Add Variables: elmo-move-msgs, elmo-copy-msgs, elmo-append-msg.
+       move or copy in keeping number in source folder by
+       elmo-{move|copy}-msg and copy in keeping number specified by
+       elmo-append-msg.
+       * Change:
+       deal with multiple message once when copying from 'localdir to
+       'archive.
+
+1998-12-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.0 - "With Or Without You".
+       * Change: [elmo-archive.el].
+       delete warning in byte-compiling.
+
+1998-12-09  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * New File: [elmo-archive.el]
+       "v0.16 [981208/alpha]".
+       * Change:
+       make folders of dst-spec in copy-msgs if not.
+       (pointed out by Masayuki TERADA <te@isl.ntt.co.jp>).
+       * Fix:
+       regexp-quote() of suffix is not executed in get-archive-name when
+       elmo-archive-treat-file is non-nil.
+
+1998-12-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       call elmo-create-folder if target folder does not exist in
+       wl-folder-check-entity.
+       * Change:
+       call elmo-create-folder if wl-trash-folder does not exist in
+       wl-init.
+       (pointed out by OKUNISHI Fujikazu
+                       <fuji0924@mbox.kyoto-inet.or.jp>).
+
+1998-12-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Change:
+       reduce warnings in byte-compiling on XEmacs, Emacs.
+       * Fix:
+       errors happen because of wrong dealing with parent in processing
+       of mime-entity in mmelmo-imap4.
+
+1998-12-07  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Fix: [00README.ja]
+       address of ML is still old.
+
+1998-12-06  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       ignore hereto of wl-summary-cursor-up when wl-summary-buffer-view
+       is 'thread.
+       * Fix:
+       return value is wrongly nil if no success-mark exist and cursor
+       goes into position of failure-mark when hereto is non-nil in
+       wl-thread-jump-to-next-unread, wl-thread-jump-to-prev-unread.
+       * Change:
+       display progress of process in deletion of summary update.
+
+1998-12-06  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change:
+       remove debug code and display elapse time in
+       elmo-localdir-pack-number.
+       * Change:
+       use SPEC in elmo-call-func in order to avoid free var based on
+       data scope problem (for deletion of byte-compile warning).
+
+1998-12-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: [wl-ja.texi].
+       some errors.
+
+1998-12-05  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * New Variable: elmo-archive-treat-file.
+       targets of archive folder are files when non-nil.
+
+1998-12-04  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       temporary buffers created by elmo still remains after finishing
+       WL.
+       * Change:
+       after doing wl-summary-rescan cursor goes into same position as
+       before.
+       * Change:
+       two periods are not side by side in display of summary update.
+       * Change:
+       enable to compele value of Since and Before in wl-summary-pick.
+       * Change:
+       arrage lists of completing-read.
+       * Change:
+       not display messages if there are no marks excepting marks with
+       low pirority by wl-summary-move-order even when
+       wl-auto-select-first is t.
+       * Change:
+       return value is t when deletion by elmo-archive-delete-msgs is
+       success.
+
+1998-12-04  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       call wl-summary-unread-message-hook in wl-summary-mark-as-read.
+
+1998-12-04  Ken'ichi OKADA  <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * New Hook: wl-summary-unread-message-hook.
+       call it when reading unread messages.
+
+1998-12-03  Masahiro MURATA  <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       not update display after checking archive folder in folder mode.
+
+1998-12-03  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Change:
+       make a branch for wl_nemacs corresponding to Nemacs.
+       * Change:
+       replace old smtp.el with smtp.el in flim-1.12.
+       adjust to its API.
+       (deletion of smtp-do-bcc, change of args of smtp-via-smtp).
+       * Fix:
+       always ignore wl-insert-message-id in im-wl.el.
+       * Fix:
+       errors display in a large size in wl-summary-prefetch-msg.
+       * Change:
+       speed up all operations of multi folder by replacement append with
+       nconc.
+
+1998-12-02  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+           Hironori Fukuchi <nory@valis.co.jp>
+
+       * Fix: [wl-ja.texi].
+       fix some errors.
+
+1998-12-02  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * alpha -> beta.
+       * Change:
+       move old ChangeLog to etc directory.
diff --git a/etc/ChangeLog.2.ja b/etc/ChangeLog.2.ja
new file mode 100644 (file)
index 0000000..31f2f27
--- /dev/null
@@ -0,0 +1,1290 @@
+1999-05-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.0 - "Kokomo"
+
+1999-05-18  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * \e$B?75,%U%!%$%k\e(B ChangeLog.en \e$BDI2C!#\e(B
+
+1999-05-18  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Message \e$B$G\e(B mouse-2 \e$B$,F0$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+
+1999-05-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.0 pre2 - "Kokomo-pre2"
+       * Folder \e$B$G\e(B \e$B%0%k!<%W$NCf$NL$FI?t$,8:$k$H%O%$%i%$%H$NHO0O$,JQ$o\e(B
+         \e$B$C$F$7$^$&$N$r=$@5!#\e(B
+         (\e$B>.6L$5$s\e(B <kodama@ayame.mfd.cs.fujitsu.co.jp> \e$B$N8f;XE&\e(B)
+       * Draft \e$B$N\e(B C-cC-s \e$B$H\e(B menubar \e$B$N%-!<%P%$%s%I$O%I%i%U%H%P%C%U%!Kh$K\e(B
+         local-set-key \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-mark-as-read-all \e$B$,!$%9%l%C%I$,JD$8$?>uBV$G1#$l$F\e(B
+         \e$B$$$k%a%C%;!<%8$KBP$7$F8z$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+         (\e$BBg_7$5$s\e(B <ohsawa@mxq.mesh.ne.jp> \e$B$N8f;XE&\e(B)
+
+1999-05-18  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-reply-with-citation \e$B$G$O\e(B
+         wl-draft-prepared-config-alist \e$B$G$NK\J8A^F~0LCV$,68$&$N$r=$@5\e(B
+         \e$B$7$?!#\e(B
+
+1999-05-17  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * [bbdb.el] wl-folder-exit-hook -> wl-exit-hook \e$B$KBP1~!#\e(B
+
+1999-05-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * pre 1.0.0 - "Kokomo-pre"
+       * replace-match () \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+
+1999-05-17  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * POP-before-SMTP \e$B$N%I%-%e%a%s%HDI2C!#\e(B
+       * POP-before-SMTP \e$B$KBP1~!#\e(B
+
+1999-05-17  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-multi-get-msg-filename() \e$B$,B8:_$7$J$+$C$?$N$GDI2C!#\e(B
+       * wl-message-refer-article-or-url() \e$B$G\e(B mailto: \e$B$rDL$9!#\e(B
+
+1999-05-17  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-goto-folder \e$B$r\e(B interactive \e$B$G<B9T$7$?>l9g!$\e(B
+         wl-folder-buffer-cur-{path|entity-id} \e$B$,JQ99$5$l$J$$$N$r=$@5$7\e(B
+         \e$B$?!#\e(B
+       * wl-expire-alist \e$B$N\e(B 2\e$B!$\e(B3\e$BHVL\$NMWAG$N$$$:$l$+$,\e(B nil \e$B$N>l9g$O\e(B
+         expire \e$B$7$J$$$h$&$K$7$?!#\e(B
+
+1999-05-17  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * AUTHINFO \e$B$K4X$9$kItJ,$N%I%-%e%a%s%HDI2C!#\e(B
+
+1999-05-17  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * \e$B%^%&%99T%O%$%i%$%H$N%P%0=$@5!#\e(B
+
+1999-05-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B$"$A$3$A$+$i\e(B BETA \e$B$r<h$k!#\e(B
+       * XEmacs \e$B$G\e(B Folder \e$B$K\e(B toolbar \e$B$,IU$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+       * \e$B%5%V%8%'%/%H$,F|K\8l$@$H\e(B partial \e$B$N%^!<%8$,$&$^$/$$$+$J$$$N$r=$@5!#\e(B
+       * 0.10.3 - "Jumpin' Jack Flash"
+
+1999-05-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * make uninstall \e$B$,\e(B WL_PREFIX, ELMO_PREFIX \e$B$r9MN8$7$F$$$J$+$C$?$N$r\e(B
+         \e$B=$@5!#\e(B
+       * Mule2.3 \e$B8~$1$K\e(B (point-at-bol), (point-at-eol) \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+       * \e$BL>A0JQ99\e(B wl-folder-exit-hook -> wl-exit-hook\e$B!#\e(B
+       * \e$BL>A0JQ99\e(B wl-folder-exit -> wl-exit\e$B!#\e(B
+       * ja.Emacs \e$B$r99?7!#\e(B
+       * [wl-ja.texi] wl-summary-print-message \e$B$N@bL@DI2C!#\e(B
+
+1999-05-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-auto-select-first \e$B$,\e(B t \e$B$G$"$C$F$bL$FI$,$J$$>l9g!$\e(B
+         \e$B%a%C%;!<%8%P%C%U%!$,>C$($J$$$N$r=$@5!#\e(B
+
+1999-05-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * [wl-ja.texi] highlight\e$B!"\e(Binternal \e$B%U%)%k%@$N@bL@$rDI2C!#\e(B
+       * wl-highlight \e$B$+$i$$$/$D$+$N\e(B defvar \e$B$r\e(B wl-vars \e$B$K0\$7!"\e(B
+         defcustom \e$B$K$7$?!#\e(B
+       * unplugged \e$B$G\e(B nntp \e$B%U%)%k%@$rA*Br$9$k$H%(%i!<$,=P$k$N$r=$@5!#\e(B
+         (\e$B4];3$5$s\e(B <maru@kthree.co.jp> \e$B$h$j8f;XE&\e(B)
+       * wl-stay-folder-window \e$B$,\e(B t \e$B$N$H$-!"\e(BSticky Summary \e$B$,Mm$`$H\e(B
+         \e$B%-%c%C%7%e$,99?7$5$l$J$$$J$I$NIT6q9g$,H/@8$7$F$$$?$N$r=$@5!#\e(B
+       * Summary \e$B$N%^%&%99T$N%O%$%i%$%H$r9TF,$+$i9TKv$^$G$K$7$?!#\e(B
+       * wl-init \e$B$N=i4|2=$N=g=x$H%a%C%;!<%8$r0lItJQ99!#\e(B
+         prefix-arg \e$B$D$-$G$O!"4pK\%U%)%k%@$NB8:_$r%A%'%C%/$7$J$$$h$&$K$7$?!#\e(B
+       * Sticky Summary \e$B$r\e(B exit \e$B$9$k$H$-$K!"%S%e!<%-%c%C%7%e$b\e(B
+         \e$B%;!<%V$9$k$h$&$K$7$?!#\e(B
+
+1999-05-14  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-summary-reedit() \e$B$7$?;~$K\e(B wl-mail-setup-hook \e$B$,;2>H$5$l$J$$\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1999-05-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-next-folder-or-exit() \e$B$N=$@5$,\e(B
+         wl-auto-select-first \e$B$,\e(B t \e$B$N>l9g$,9MN8$5$l$F$J$$$N$r=$@5!#\e(B
+       * wl-summary-next-no-unread \e$B$,\e(B t \e$B$N$H$-$N0\F0%3%^%s%I$rJQ99$G$-\e(B
+         \e$B$k$h$&$K$7$?!#\e(B
+
+1999-05-14  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * [wl-ja.texi] wl-draft-write-current-newsgroup \e$B$N%I%-%e%a%s%HDI2C!#\e(B
+
+1999-05-13  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * mode-motion-hook \e$B$rMQ$$$:$K\e(B mouse-face \e$B$N\e(Bhighlight \e$B$r9T$&;v$K$7$?!#\e(B
+       * wl-version-show \e$B$rDI2C$7$?!#\e(B
+
+1999-05-13  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * [wl-ja.texi] Sticky Summary \e$B$N@bL@$rDI2C!#\e(B
+
+1999-05-13  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * wl-summary-stick\e$B$7$?%U%)%k%@$G!$\e(Bwl-summary-forward\e$B$7$?8e!$\e(B
+         \e$BJQ$J%&%$%s%I%&$K9T$C$F$7$^$&$N$r=$@5!#\e(B
+
+1999-05-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-template \e$B$,\e(B recursive-edit \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+
+1999-05-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft-config-alist \e$B$N%5%V4X?t$K\e(B 'x-face \e$B$rDI2C!#\e(B
+       * [wl-template] select \e$B%P%C%U%!$r%O%$%i%$%H$9$k$h$&$K$7$?!#\e(B
+
+1999-05-13  Mito <mit@nines.nec.co.jp>
+
+       * \e$B%U%)%k%@$r0\F0$7$F$b!"D>A0$N%a%C%;!<%8$,I=<($5$l$?$^$^$J$N$r\e(B
+         \e$BHr$1$k$?$a\e(B wl-summary-next-folder-or-exit() \e$B$G\e(B
+         (wl-summary-toggle-disp-msg 'off) \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-toggle-disp-msg() \e$B$G\e(B arg \e$B$K\e(B off \e$B$r;XDj$7$F8F\e(B
+         \e$B$S=P$7$?>l9g%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-05-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * NNTP \e$B%U%)%k%@$r\e(B wl-folder-update-recursive-current-entity \e$B$G99\e(B
+         \e$B?7$9$k$H%(%i!<$K$J$k$N$r=$@5$7$?!#\e(B
+
+1999-05-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * pop3, imap4, nntp \e$B$G!"\e(Belmo-*-use-cache \e$B$,\e(B nil \e$B$N$H$-$K\e(B
+         uncached \e$B$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$N8f;XE&\e(B)
+
+1999-05-12  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+        * localnews \e$B$,FI$a$J$/$J$C$F$$$?%P%0$r=$@5!#$^$?!"\e(B
+          elmo-localnews-local-file-p() \e$B$N0z?t$,B-$j$J$+$C$?$N$r=$@5!#\e(B
+
+1999-05-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 0.10.2 - "I'm Your Man"
+
+1999-05-12  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * [wl-ja.texi] \e$B$$$/$D$+$N%3%^%s%I$N@bL@$rDI2C!#\e(B
+
+1999-05-12  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * [sample.dot.wl] auto-refile \e$B@_Dj$rDI2C!#\e(B
+       * [wl-ja.texi] wl-summary-auto-refile-skip-marks \e$B$N@bL@$rDI2C!#\e(B
+
+1999-05-12  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$BBgJ8;z$N%K%e!<%9%0%k!<%WL>$N%A%'%C%/$K<:GT$9$k$N$r=$@5!#\e(B
+
+1999-05-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * localdir \e$B$G4{FI%a%C%;!<%8$,\e(B uncached \e$B$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B?75,JQ?t\e(B wl-ps-print-buffer-func\e$B!#\e(Bps-print \e$B$G;H$&4X?t$r;XDj!#\e(B
+         default \e$B$O\e(B 'ps-print-buffer-with-faces\e$B!#\e(B
+         (\e$B?e8M$5$s\e(B <mit@nines.nec.co.jp> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * .folders \e$B2r@O;~$K%0%k!<%W$H\e(B petname \e$B$KF1$8L>A0$,$G$F$-$?$i\e(B
+          \e$B%(%i!<$r=P$9$h$&$K$7$?!#\e(B
+
+1999-05-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * sample.dot.wl \e$B$r99?7!#\e(B
+       * \e$B%"%/%;%9%0%k!<%W$N5-=R$N=$@5B>!#\e(B
+
+1999-05-11  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B%U%#%k%?%U%)%k%@$G\e(B "$" \e$B$r$D$1$kBP>]$,%m!<%+%k%U%!%$%k$G$"$k\e(B
+         \e$B>l9g$K!"%^!<%/$O$D$/$,%-%c%C%7%e$G$-$J$$%P%0$r=$@5!#\e(B
+
+1999-05-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * tm \e$B8~$1\e(B partial \e$B7k9g4X?t$r<BAu!#\e(B
+       * Nemacs \e$B$G\e(B wl-defface \e$B$,F0$+$J$+$C$?$N$r=$@5!#\e(B
+       * wl-summary-exec \e$B$r9bB.2=!#\e(B
+       * Summary \e$B$K\e(B 'D' \e$B$r3d$j?6$k$N$rK:$l$F$$$?!#\e(B
+       * imap4 \e$B$N%a%C%;!<%8:o=|;~!"%9%l%C%I$N6q9g$K$h$C$F$O\e(B msgdb \e$B$+$i\e(B
+         \e$B:o=|$5$l$J$$>l9g$,$"$C$?$N$r=$@5!#\e(B
+       * wl-folder-check-one-entity \e$B$G$9$0$K7k2L$,I=<($5$l$k$h$&\e(B
+         (sit-for 0) \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-message-redisplay-hook \e$B$r\e(B unwind-protect \e$B$7!"\e(B
+         bbdb \e$B$J$I$N\e(B prompt \e$B$G\e(B C-g \e$B$7$?$H$-$K$b\e(B Summary
+         \e$B$K%+!<%=%k$,La$k$h$&$K$7$?!#\e(B
+
+1999-05-10  Tomokazu Matsumaru <matty@tamtam.co.jp>
+
+       * \e$B$?$/$5$s%a%C%;!<%8$,$"$k\e(B POP3 \e$B%U%)%k%@$,%O%s%0$9$kLdBj$r=$@5!#\e(B
+
+1999-05-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B wl-folder-sync-range-alist, wl-default-sync-range\e$B!#\e(B
+         \e$B%U%)%k%@$4$H$K\e(B sync \e$B$N%G%U%)%k%H$rJQ$($i$l$k$h$&$K$7$?!#\e(B
+         (\e$B?@V:$5$s\e(B<kamisima@etl.go.jp>\e$B$h$j8fMWK>\e(B)
+       * Mule 2.3 \e$B$G\e(B make \e$B$K<:GT$9$k$N$r=$@5!#\e(B
+         (\e$B>.6L$5$s\e(B <kodama@ayame.mfd.cs.fujitsu.co.jp> \e$B$N8f;XE&\e(B)
+       * wl-vars.el \e$B$,\e(B euc \e$B$K$J$C$F$$$F%9%l%C%I;^$,J8;z2=$1$9$k$N$r=$@5!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$N8f;XE&\e(B)
+       * 0.10.1 - "Harlem Shuffle"
+
+1999-05-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * imap4 \e$B$G!"\e(Bselect-folder \e$BCf$K\e(B C-g \e$B$9$k$H!"%+%l%s%H%U%)%k%@$,\e(B
+         \e$B$*$+$7$/$J$k$N$r=$@5\e(B(\e$B$7$?$D$b$j\e(B)\e$B!#\e(B
+        (\e$B?e86!wI=@i2H\e(B <mizuhara@acm.org> \e$B$5$s$N8f;XE&\e(B)
+       * \e$B?75,JQ?t!"\e(Belmo-archive-use-cache\e$B!"\e(Belmo-nntp-use-cache
+         elmo-imap4-use-cache\e$B!"\e(Belmo-pop3-use-cache\e$B!#\e(B
+         \e$B$=$l$>$l!"FI$s$@;~$K%a%C%;!<%8$r%-%c%C%7%e$9$k$+$I$&$+$r@_Dj!#\e(B
+       * wl-no-cache-folder-list -> \e$BGQ;_!#\e(B
+       * important-mark \e$B$rIU$1$?=V4V$K%-%c%C%7%e$9$k$h$&$K$7$?!#\e(B
+
+1999-05-08  Koichiro Ohba <koichiro@ca.mbn.or.jp>
+
+       * [wl-ja.texi] typo \e$BB>$N=$@5!#\e(B
+
+1999-05-08  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [wl-ja.texi] typo \e$BB>$N=$@5!#\e(B
+
+1999-05-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * ^L \e$B$G2~JG$5$l$F$k;~$K8B$j\e(B wl-message-prev-page() \e$B$9$k$H%+!<\e(B
+         \e$B%=%k$,%a%C%;!<%8%P%C%U%!$+$i%5%^%j$XLa$i$J$$%P%0$r=$@5!#\e(B
+       * make install \e$B;~$K$O\e(B *.elc \e$B$O\e(B rename-file() \e$B$9$k!#\e(B
+       * mode-motion-hook \e$B$O\e(B XEmacs \e$B8GM-$J$?$a!"\e(BGNU Emacs \e$B$G%P%$%H%3\e(B
+         \e$B%s%Q%$%k$9$k$H%(%i!<%a%C%;!<%8$,=P$k$N$rL[$i$;$k!#\e(B
+
+1999-05-05  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-summary-refile-region, wl-summary-copy-region, wl-thread-refile,
+         wl-thread-copy \e$B$,%P%0$C$F$$$?$N$r=$@5!#\e(B
+
+1999-05-05  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-{nntp|imap4|pop3}.el \e$B$G\e(B case-fold-search \e$B$,A`:nBP>]%P%C%U%!\e(B
+         \e$B$GM-8z$K$J$C$F$$$J$+$C$?$N$r=$@5$7$?!#\e(B
+
+1999-05-04  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft-send \e$B$r\e(B1\e$BEYCfCG$7$?8e$KAw?.$r9T$&$H!$\e(B
+         wl-draft-config-alist \e$B$NJQ?t$,E,MQ$5$l$J$$LdBj$r=$@5$7$?!#\e(B
+
+1999-05-01  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * NNTP \e$B%U%)%k%@$G\e(B top \e$B%+%F%4%j$NF,J8;z$,?t;z$K$J$C$F$$$k\e(B
+         \e$B%K%e!<%9%0%k!<%W$rFI$a$kMM$K$7$?!#\e(B
+
+1999-04-30  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * face \e$B$r%]!<%?%V%k$KDj5A$9$k4X?t!"\e(Bwl-defface \e$B$rDj5A!#\e(B
+
+1999-04-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$BJT=8Cf$N%I%i%U%H$r\e(B Summary \e$B$+$i\e(B reedit \e$B$9$k$H%P%C%U%!L>$N\e(B
+         \e$B%U%)%k%@L>ItJ,$,A}?#$7$F$7$^$&$N$r=$@5!#\e(B
+         (\e$B2,:j$5$s\e(B OKAZAKI Tetsurou <okazaki@be.to> \e$B$h$j8f;XE&\e(B)
+       * \e$B6u%U%)%k%@$G\e(B s->rescan \e$B$9$k$H$I$3$K%8%c%s%W$9$k$+?V$$$F$7$^$&\e(B
+         \e$B$N$r=$@5!#\e(B
+         (\e$B2,:j$5$s\e(B OKAZAKI Tetsurou <okazaki@be.to> \e$B$h$j8f;XE&\e(B)
+       * [bbdb-wl] (require 'wl) \e$B$9$k$h$&$K$7$?!#\e(B
+       * Thread \e$B$N;R$b?F$b$J$$%a%C%;!<%8$G\e(B wl-thread-open-close \e$B$9$k$H\e(B
+         \e$B$I$3$K%8%c%s%W$9$k$+?V$$$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B?75,%3%^%s%I!"\e(Bwl-summary-drop-unsync,
+         wl-folder-drop-unsync-current-entity\e$B!#\e(B
+         \e$BA4$F$NL$F14|%a%C%;!<%8$r!"$J$+$C$?$3$H$K$9$k!#\e(B
+         'D' \e$B$K3d$jEv$F!#\e(B
+
+1999-04-28  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,JQ?t\e(B wl-draft-prepared-config-alist\e$B!#\e(B
+         wl-draft-config-alist \e$B$K4v$D$+$N5!G=3HD%$r9T$C$?!#\e(B
+       * \e$B?75,%U%!%$%k\e(B wl-template\e$B!#\e(B
+         \e$B%I%i%U%H$K%F%s%W%l!<%H$rA*Br!&A^F~$9$k5!G=$rDI2C$7$?!#\e(B
+
+1999-04-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Nemacs \e$B0J30$O\e(B wl-draft-mode-map \e$B$r;H$&$h$&$K$7$?!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$h$j8f=u8@\e(B)
+
+1999-04-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * Summary \e$B%P%C%U%!$N\e(B case-fold-search \e$B$,>o$K\e(B nil \e$B$K$J$C$F$7$^$&$N$r\e(B
+         \e$B=$@5!#\e(B
+       * elmo-nntp-open-connection \e$B$,<:GT$7$?$H$-$NJV$jCM$,\e(B docstring \e$B$H\e(B
+         \e$B0[$J$C$F$$$?$N$r=$@5!#\e(B
+
+1999-04-28  Mito <mit@nines.nec.co.jp>
+
+       * wl-draft-buffer-cur-summary-buffer \e$B$,\e(B #<killed buffer> \e$B$K$J$C$?\e(B
+         \e$B$H$-$KAw?.%3%^%s%I$,<:GT$7$F$7$^$&$N$r=$@5!#\e(B
+
+1999-04-27  Mito <mit@nines.nec.co.jp>
+
+       * Summary \e$B$+$i\e(B '#' \e$B$G%W%j%s%H$9$k;~$K3NG'$r5a$a$k$h$&$K$7$?!#\e(B
+
+1999-04-27  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * wl-summary-refile-region \e$B$,$*$+$7$/$J$C$F$?$N$r=$@5!#\e(B
+
+1999-04-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Nemacs \e$B$GF0$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+       * custom \e$B$,$J$$4D6-$GLdBj$,$"$C$?$N$r=$@5!#\e(B
+       * \e$B$$$/$D$+K:$l$F$$$?%Q%C%A$N%^!<%8\e(B (pop3 \e$B$,%O%s%0$9$kLdBj$N=$@54^$`\e(B)\e$B!#\e(B
+         (\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp> \e$B$h$j8f;XE&\e(B)
+       * 0.10.0 - "Got My Mind Set On You"
+       * localnews \e$B$,\e(B wl-summary-local-p \e$B$G\e(B local \e$B07$$$5$l$F$$$J$+$C$?$N$r\e(B
+         \e$B=$@5\e(B(\e$B8MED$5$s\e(B <ktoda@v7.com> \e$B$h$j8fJs9p\e(B)
+
+1999-04-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-internal.el \e$B$N3F%P%C%/%(%s%I4X?t$r<BAu!#\e(B
+       * Sticky Summary \e$BBP1~$N$?$a!"\e(B
+         (get-buffer wl-summary-buffer-name) \e$B$r$7$i$_$D$V$7$K=$@5!#\e(B
+       * \e$B8=:_$N%5%^%j$r\e(B sticky \e$B$K$9$k?75,%3%^%s%I!"\e(Bwl-summary-stick \e$B$rDI2C!#\e(B
+         \M-s \e$B$K%P%$%s%I!#\e(B
+
+1999-04-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * SEMI \e$B$G\e(B partial \e$B$r7k9g$9$k4X?t$r=q$-D>$7$?!#\e(B
+       * [bbdb-wl] Sticky Summary \e$B$KBP1~!#\e(B
+       * wl-default-draft-cite \e$B$,%P%0$C$F$$$?$N$r=$@5!#\e(B
+         (\e$B%5%^%j$N%+!<%=%k0LCV$,$:$l$F$$$k$H!"4V0c$C$?\e(B citation title \e$B$r\e(B
+          \e$B$D$1$F$7$^$&\e(B)
+
+1999-04-23  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * body \e$B$N0l$D$N9T$KFs$D\e(B message-id\e$B$,$"$k$H$-$K!":8$N\e(Bmessage-id\e$B$r\e(B
+         \e$B??Cf%/%j%C%/$9$k$H1&$N\e(B message-id \e$B$KHt$s$G$7$^$&$N$r=$@5!#\e(B
+
+1999-04-23 \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * wl-summary\e$B%b!<%I$N:G2<9T$N6u9T$G!$\e(Bwl-thread-{copy,refile}\e$B$9$k$H!$\e(B
+         \e$B%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-04-22  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * prefix arg \e$B$D$-$G%U%)%k%@0\F0$9$k$H!"\e(BSticky Summary \e$B$K\e(B
+         \e$B0\F0$9$k$h$&$K$7$?!#\e(B
+         (\e$B$3$l$^$G$N\e(B wl-folder-goto-folder\e$B!"\e(Bwl-summary-goto-folder \e$B$r\e(B
+          \e$B$=$l$>$l\e(B wl-folder-goto-folder-subr\e$B!"\e(Bwl-summary-goto-folder-subr
+          \e$B$KJQ99\e(B)
+       * wl-highlight-body-too \e$B$,\e(B nil \e$B$N;~$K\e(B draft-buffer \e$B$G\e(B"^L" \e$B$7$F$b\e(B
+         re-highlight \e$B$7$J$$$h$&$K$7$?!#\e(B
+          (\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp> \e$B$N=$@5\e(B)\e$B!#\e(B
+       * \e$B$7$D$3$$%5%^%j!"\e(BSticky Summary\e$B!#\e(B
+         (\e$B?e8M$5$s\e(B <mit@nines.nec.co.jp> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * mmelmo-imap4 \e$B$O\e(B mmelmo \e$B$r7Q>5$9$k$h$&$K$7$?!#\e(B
+
+1999-04-21  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * wl-folder-close-parent-entity \e$B$K%P%0$,$"$C$?$N$r=$@5!#\e(B
+       * wl-thread-open-close \e$B$N5!G=$r3HD%$7!";R$,$J$$>l9g$O?F$r\e(B close
+         \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-folder-close-parent-entity -> wl-folder-open-close
+       * wl-folder-open-close \e$B$r\e(B "/" \e$B$K%P%$%s%I!#\e(B
+
+1999-04-21  Mito <mit@nines.nec.co.jp>
+
+       * \e$B%M%9%H$7$F$k\e(B alias \e$B$bE83+$9$k$h$&$K$7$?!#\e(B
+
+1999-04-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary-move-order \e$B$,\e(B 'new\e$B!"$+$D:G=i$N%a%C%;!<%8$N%^!<%/$,\e(B
+         "$" \e$B$+$D%U%)%k%@Fb$K\e(B "$" \e$B0J30$N%^!<%/$,$J$$$H$-!"\e(B
+         wl-summary-goto-folder \e$B$G:G=i$N%a%C%;!<%8$K%+!<%=%k$,9T$+$J$$\e(B
+         \e$B$N$r=$@5!#\e(B
+       * wl-summary-goto-folder \e$B$GL@$i$+$K#22s\e(B wl-summary-cursor-down \e$B$r\e(B
+         \e$B9T$C$F$$$?\e(B(!)\e$B$N$r=$@5!#\e(B
+
+1999-04-21  Kazuyuki IENAGA <ienaga@jsys.co.jp>
+
+       * custom \e$B$KBP1~!#\e(B
+
+1999-04-21  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * leafnode \e$B$J$I\e(B group \e$B%3%^%s%I$N%l%9%]%s%9$KM>J,$J%a%C%;!<%8$rIU\e(B
+         \e$B$1$k%5!<%P$G$O!$%[%9%HL>$rIU2C$7$?%U%)%k%@$N>pJs$,<hF@$G$-$J$$\e(B
+         \e$B%P%0$r=$@5$7$?!#\e(B
+
+1999-04-20  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,%U%!%$%k\e(B elmo-internal.el\e$B!#\e(B
+         \e$BFbIt%G!<%?$r%V%i%&%:$9$k$?$a$N%U%)%k%@!#\e(B
+
+1999-04-19  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * \e$B?75,4X?t\e(B wl-draft-highlight-and-recenter\e$B!#%I%i%U%H$G\e(B C-l \e$B$9$k$H!"\e(B
+         \e$B%O%$%i%$%H8e\e(B recenter\e$B!#\e(B
+       * [elmo-nntp] elmo-nntp-search \e$B$N0z?t$,0c$C$F$$$?$N$r=$@5!#\e(B
+
+1999-04-19  Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp>
+
+       * nntp \e$B$N\e(B folder \e$BDj5A$K%]!<%H;XDj$r$G$-$k$h$&$K$7$?!#\e(B
+
+1999-04-19  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-summary-copy-prev-destination \e$B$r\e(B \M-O \e$B$K3d$j?6$C$F$$$?$N$,\e(B
+         vt-100\e$B$N%+!<%=%k$^$o$j$GLdBj$,$"$C$?$N$G%-!<%P%$%s%I$r30$7$?!#\e(B
+         (\e$B$9$,$N$5$s\e(B <siesta@mvd.biglobe.ne.jp> \e$B$h$j8f;XE&!"\e(B
+          \e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp> \e$B$h$j8f=u8@\e(B)\e$B!#\e(B
+       * nntp \e$B$G%a%C%;!<%8HV9f$,\e(B 6 \e$B7e$r1[$($k$HHV9f$,A4It\e(B 0 \e$B$K$J$C$F\e(B
+         \e$B$7$^$&$N$r=$@5\e(B(\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+
+1999-04-19  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B%*%U%i%$%s!&%j%U%!%$%k\e(B/\e$B%3%T!<$N$"$H!"%j%U%!%$%k\e(B/\e$B%3%T!<@h$N%U%)%k\e(B
+         \e$B%@$rK,$l$k$H!"%*%U%i%$%s$G$b%a%C%;!<%8$,DI2C$5$l$F$$$k$h$&$K8+$($J$$\e(B
+         \e$B$N$r=$@5!#\e(B
+       * \e$B%*%U%i%$%s;~$NL$FI=hM}$b$9$k$h$&$K=$@5!#\e(B
+
+1999-04-19  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * \e$B%5%^%j$N\e(B \M-O \e$B$N%P%$%s%I$r30$9!#\e(B
+
+1999-04-17  Koichiro Ohba <koichiro@ca.mbn.or.jp>
+
+       * wl-summary-auto-refile \e$B$N%I%-%e%a%s%HDI2C!#\e(B
+       * wl-summary-auto-refile \e$B$N%-!<%P%$%s%IDI2C!#\e(B
+       * sample.dot.wl \e$B$G\e(B Mail-Followup-To \e$B$H\e(B Mail-Reply-To \e$B$r<+A0$GIU$1\e(B
+         \e$B$F$$$k$N$r=$@5!#\e(B
+
+1999-04-14  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%I%i%U%H%P%C%U%!$N%b!<%I$r\e(B mail-mode \e$B$r\e(B derive \e$B$7$?\e(B
+         wl-draft-mode \e$B$K$7$?!#\e(B
+         (\e$B>.NS$5$s\e(B <shuhei@aqua.ocn.ne.jp> \e$B$N8f=u8@\e(B)
+       * [WL-ELS] \e$B?75,JQ?t\e(B WL_PREFIX\e$B!"\e(BELMO_PREFIX \e$B$r@_$1!"\e(B
+         \e$B$=$l$>$l$NCM$r\e(B ELISPDIR \e$B$+$i$NAjBP%G%#%l%/%H%j$H$7$F\e(B
+          wl, elmo \e$B%b%8%e!<%k$r%$%s%9%H!<%k$9$k$h$&$K$7$?!#\e(Bdefault \e$B$O\e(B ""\e$B!#\e(B
+          (\e$B>.NS$5$s\e(B <shuhei@aqua.ocn.ne.jp> \e$B$N8f=u8@\e(B)
+       * "make clean" \e$B$,\e(B WL-ELS \e$B$r\e(B load \e$B$7$F$7$^$&$N$G!"B>$N\e(B emacs \e$B$G\e(B
+          compile \e$B$7$?\e(B *.elc \e$B$N$"$k\e(B source tree \e$B$GJL$N\e(B emacs \e$B$GF0$+$J$$$N$r\e(B
+          \e$B=$@5!#\e(B
+       * \e$BJ#?t%a%C%;!<%8$,$"$k$H\e(B POP \e$B$,%O%s%0$7$F$7$^$&$N$r=$@5!#\e(B
+         (\e$B@P@n$5$s\e(B <ichiro@mail.ne.jp> \e$B$h$j8fJs9p\e(B)
+
+1999-04-13  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * [elmo-nntp] docstring \e$B$N\e(B typo \e$B=$@5!#\e(B
+
+1999-04-12  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * summary buffer\e$B$G!"\e(B"E" \e$B$r2!$7$F\e(B reedit \e$B$9$k$H!"\e(Bbody \e$B$,A4It\e(B
+         signature-face \e$B$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+       * summary mode \e$B$H\e(B folder mode \e$B$N;~$K!"\e(Bmouse \e$B9T$r\e(B
+         highlight \e$B$5$;$k\e(B(xemacs\e$B$N$_\e(B)\e$B!#\e(B
+
+1999-04-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B%I%i%U%H$G!"%?%V$G;O$^$k9T$N<!$N%U%#!<%k%I$,6u$@$H!"\e(B
+         \e$B%?%V$G;O$^$k9T$^$G$b$,>C$5$l$F$7$^$&%P%0$r=$@5\e(B
+         (\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * Summary \e$B$G\e(B 'q' \e$B$r2!$7$?8e$9$+$5$:\e(B C-g \e$B$9$k$HJ8;z2=$1$7$?\e(B
+         \e$B%P%C%U%!$,;D$C$F$7$^$&$N$r=$@5\e(B(\e$B0$It$5$s\e(B <take@gohome.org> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * XEmacs \e$B$GF|K\8l\e(B Subject \e$B$N\e(B pick \e$B$,<:GT$9$k$N$r=$@5\e(B
+         (\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * 4/2 \e$B$N\e(B elmo-nntp-get-folders-info \e$B$,%O%s%0$7$F$7$^$&=$@5$r\e(B
+         ChangeLog \e$B$K2C$($k$N$rK:$l$F$$$?$N$GDI2C!#\e(B
+         (\e$BCf@n$5$s\e(B <nakagawa@pochi.tis.co.jp> \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+       * 0.9.8 - "Faith"
+
+1999-04-10  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t!"\e(Belmo-msgid-replace-string-alist
+         Message-id ->\e$B%-%c%C%7%e$N%U%!%$%kL>$NJQ49%k!<%k$r@_Dj!#\e(B
+
+1999-04-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo-imap4] LOGIN \e$B$G%Q%9%o!<%I$K6uGrJ8;z$,$"$k$P$"$$$K\e(B
+         \e$BG'>Z$K<:GT$9$k$N$r=$@5!#\e(B
+         (\e$B7'Ln$5$s\e(B <kumano@strl.nhk.or.jp> \e$B$h$j8fJs9p\e(B)
+
+1999-04-07  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * [NNTP] AUTHINFO \e$B$KBP1~!#\e(B
+
+1999-04-07  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * C-u . \e$B$G!"%-%c%C%7%e$,$"$C$F$b:FFI$_9~$_$9$k$h$&$K$7$?!#\e(B
+       * \e$B=i4|2=;~!"%M%C%H%o!<%/$K$D$J$,$C$F$$$J$/$F$b\e(B C-g \e$B$r2!$;$P\e(B
+         \e$B5/F0$G$-$k$h$&$K$7$?!#\e(B
+
+1999-04-06 SHIMADA Mitsunobu <simm-wl@fan.gr.jp>
+
+       *  Maildir \e$B$N%a!<%k$N:o=|!"%j%U%!%$%k$K<:GT$9$k>l9g$,$"$C$?$N$r=$@5!#\e(B
+
+1999-04-03 OKAZAKI Tetsurou <okazaki@be.to>
+
+       * [wl-ja.texi] \e$BJQ?t\e(B wl-insert-mail-(followup|reply)-to \e$B$N=i4|@_DjCM\e(B
+         \e$B$N4V0c$$$r=$@5!#\e(B
+
+1999-04-02  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,JQ?t\e(B elmo-nntp-get-folders-securely\e$B!#\e(BNon-nil \e$B$K$9$k$H\e(B
+         elmo-nntp-get-folders-info \e$B$,La$C$F$3$J$/$J$k$N$r=$@5$9$kJQ99$,\e(B
+         \e$BM-8z$K$J$k!#\e(Bdefault \e$B$O\e(B nil\e$B!#\e(B
+
+1999-04-02  nakagawa@pochi.tis.co.jp (\e$BCf@n\e(B \e$B@?\e(B)
+
+       * cnews(?) \e$B$@$H\e(B elmo-nntp-get-folders-info \e$B$,La$C$F$3$J$/$J$j!"\e(B
+         \e$B%O%s%0$7$F$7$^$&$N$r=$@5!#\e(B
+
+1999-03-31  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * petname-alist \e$B$r\e(B obarray \e$B2=!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-divide-thread-when-subject-changed\e$B!#\e(B
+         t \e$B$J$i%5%V%8%'%/%H$,JQ$o$C$?$H$-$K%9%l%C%I$r@Z$k$h$&$K$7$?!#\e(B
+        (\e$B$d$^$@$"$-$i$5$s\e(B <akira@arika.org> \e$B$N8fMWK>\e(B)
+       * \e$B?75,JQ?t\e(B wl-summary-subject-filter-func \e$B%5%V%8%'%/%HHf3SA0$K\e(B
+         \e$B=hM}$r9T$&4X?t$r;XDj!#\e(B
+       * wl-summary-from-func, wl-summary-subject-func,
+         wl-summary-subject-filter-func \e$B$r\e(B funcall \e$B$9$k$N$r$d$a!"\e(B
+         \e$B5/F0;~$K\e(B fset \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-draft-config-exec-flag \e$B$r%P%C%U%!%m!<%+%kJQ?t$K$7$?!#\e(B
+       * Summary \e$B$G\e(B M->j->q \e$B$9$k$H%(%i!<$,H/@8$9$k$N$r=$@5!#\e(B
+         (\e$B2,ED$5$s\e(B<kokada@tamaru.kuee.kyoto-u.ac.jp>\e$B$N8f;XE&\e(B)
+       * signature \e$B$N\e(B face \e$B$N%G%U%)%k%H$r?'$D$-%U%)%s%H$K$7$?!#\e(B
+
+1999-03-30  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B6u9T$G\e(B'd'\e$B$G$-$J$$$h$&$K$7$?!#\e(B
+       * \e$B3:Ev$N\e(BMessage-Id\e$B$N5-;v$,F1$8%U%)%k%@$KJ#?t$"$k$H$-$K$=$N$&$A0l$D$r\e(B
+         \e$B%*%U%i%$%s$G:o=|$7$F\e(B elmo-dop-queue-flush \e$B$9$k$H!$\e(B
+         elmo-imap4-delete-msg-by-id\e$B$,<:GT$9$k$N$r=$@5!#\e(B
+
+1999-03-29  A. SAGATA <sagata@nttvdt.hil.ntt.co.jp>
+
+       * signature \e$BNN0h$N8!=P$r8-$/$7$?!#\e(B
+       * signature \e$B$r%O%$%i%$%H$9$k$h$&$K$7$?!#\e(B
+
+1999-03-26  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B8=:_$$$k!JF1$8!K%U%)%k%@$K8m$C$F\e(B goto-folder \e$B$9$k$H!"%5%^%j$,\e(B
+         \e$B2=$1$F$7$^$&LdBj$r=$@5\e(B(\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp>
+         \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * \e$BJQ?t\e(B wl-draft-clone-local-variable-regexp (\e$B%G%U%)%k%H$O\e(B "^mime")
+         \e$B$K%^%C%A$9$k%m!<%+%kJQ?t$NCM$rAw?.%P%C%U%!$K%3%T!<$9$k$h$&$K$7$?!#\e(B
+
+1999-03-26  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B?75,%3%^%s%I\e(B wl-summary-write-current-newsgroup ()
+         Summary\e$B%b!<%I$G!$\e(Bcurrent-folder\e$B$N%K%e!<%9%0%k!<%W$KEj9F$9$k$H$-$K!$\e(B
+         Newsgroup: \e$B%U%#!<%k%I$r$"$i$+$8$aJd4V$7$F$+$i\e(Bdraft\e$B%P%C%U%!$rMQ0U\e(B
+         \e$B$9$k!#\e(B"W" \e$B$K%P%$%s%I!#\e(B
+
+1999-03-25  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * wl-summary-forward() \e$B$G!"\e(Bwl-mail-setup-hook \e$B$,8F$P$l$J$+$C$?\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1999-03-25  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$BB<ED$5$s$K$h$k\e(B wl-draft-config-alist \e$B$K\e(B lambda \e$B<0$r=q$1$k$h$&$K$9$k\e(B
+         \e$B%Q%C%A$r%^!<%8$7$o$9$l$F$$$?$N$r%^!<%8!#\e(B
+
+1999-03-25  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-temp-mark-uudecode \e$B$G%a%C%;!<%8\e(B1\e$B$D$@$1$N%U%!%$%k\e(B
+         \e$B$,%G%3!<%I$G$-$J$$$N$r=$@5!#\e(B
+
+1999-03-24  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * default-case-fold-search \e$B$,\e(B nil \e$B$N>l9g!"%a%C%;!<%8$,Aw?.$5$l$J$$\e(B
+         \e$B$N$r=$@5\e(B(\e$B3k86$5$s\e(B<kuz@post1.com>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+
+1999-03-24  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B?75,%3%^%s%I\e(B wl-folder-close-parent-entity\e$B!"\e(BM-SPC \e$B$K%P%$%s%I!#\e(B
+       * \e$B?75,JQ?t\e(B wl-draft-config-exec-flag \e$B$r@_$1!"\e(Bwl-draft-config-exec \e$B$O\e(B
+         \e$B0lEY$7$+<B9T$5$l$J$$$h$&$K$7$?!#\e(B
+
+1999-03-21  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [im-wl.el] (\e$B:F\e(B) wl-insert-message-id \e$B$r\e(B nil \e$B$K@_Dj$7$F$b!"\e(BMessage-Id
+         \e$B$r$D$1$F$7$^$&=$@5\e(B(\e$B@P@n$5$s\e(B <ichiro@mail.ne.jp> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * (\e$B:F\e(B)(featurep 'xpm) \e$B$N\e(B xemacs \e$B$r\e(B -nw \e$B$G$"$2$?$H$-$K\e(B wl \e$B$r5/F0$9$k$H\e(B
+         warning \e$B$,=P$k=$@5\e(B(\e$B:72eED$5$s\e(B<sagata@nttvdt.hil.ntt.co.jp>\e$B$N8f;XE&\e(B)\e$B!#\e(B
+
+1999-03-18  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * wl-ja.texi \e$B$K@bL@$rDI2C!#\e(B
+       * \e$B%I%i%U%H$G!"\e(B "To:" \e$B$d\e(B "Cc:" \e$B$N%X%C%@<+BN$NJd40$r$9$k$H$-$K!"\e(B
+         \e$B>.J8;z$+$i$G$bJd40$9$k$h$&$K$7$?!#\e(B
+
+1999-03-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.7 - "Everything She Wants"
+       * multi \e$B%U%)%k%@$K$X$s$JF|IU$1$N%a%C%;!<%8$,$"$k$H\e(B msgdb \e$B@8@.$,\e(B
+         \e$BCfCG$5$l$F$7$^$&$N$r=$@5!#\e(B
+
+1999-03-17  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * petname \e$B$r%$%s%?%i%/%F%#%V$KJT=8$9$k4X?t$rDI2C!#\e(B
+
+1999-03-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * IMAP \e$B$NB8:_$7$J$$%U%)%k%@$K%j%U%!%$%k$7$h$&$H$7$F$d$a$k$H!"$=$N8e\e(B
+         \e$B8=:_$N%U%)%k%@$,A`:nITG=$K$J$C$F$7$^$&%P%0$r=$@5!#\e(B
+        (\e$B0$It$5$s\e(B <take@gohome.org> \e$B$N8f;XE&\e(B)\e$B!#\e(B
+       * wl-folder-next-unsync \e$B$,%0%k!<%W$HDL>o%U%)%k%@$r6hJL$7$J$$$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * XEmacs \e$B$N%D!<%k%P!<%\%?%s$r2!$7$F\e(B sync \e$B$7$?$H$-$K%a%C%;!<%8$,\e(B
+         \e$BCfESH>C<$@$C$?$N$r=$@5!#\e(B
+
+1999-03-12  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * 00README \e$B$r=$@5!#\e(B
+
+1999-03-12  Masato Taruishi <taru@debian.or.jp>
+
+       * 00README \e$B$rDI2C!#\e(B
+
+1999-03-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * refile, copy \e$B$,0lIt<:GT$7$F$bA4BN$K1F6A$7$J$$$h$&$K$7$?!#\e(B
+       * wl-ja.texi \e$B$r\e(B ptex \e$B$G%U%)!<%^%C%H$7$F8+$d$9$$$h$&\e(Bsection \e$B3d$j$r\e(B
+         \e$B9=@.$7$J$*$9\e(B (\e$B?9F#$5$s\e(B <hajime@morito.org> \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+
+1999-03-09 Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * \e$B$^$.$i$o$7$$$N$G%j%U%!%$%kCf!"%+!<%=%k$,%P%C%U%!KvHx$K\e(B
+         \e$B0\F0$7$J$$$h$&$K$7$?!#\e(B
+
+1999-03-06 Ishikawa Ichiro  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * [im-wl.el] wl-insert-message-id \e$B$r\e(B nil \e$B$K@_Dj$7$F$b!"\e(BMessage-Id
+         \e$B$r$D$1$F$7$^$&$N$r=$@5!#\e(B
+
+1999-03-04 Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * tm-wl.el \e$B$N\e(B tm-wl-setup() \e$B$G!"\e(B
+         (fset 'mime-preview/x-face-function-use-highlight-headers nil)
+         \e$B$7$F$$$?$N$r$d$a$k!#\e(B
+         (\e$B:72eED$5$s\e(B <sagata@nttvdt.hil.ntt.co.jp> \e$B$h$j8f;XE&\e(B)
+       * \e$B?75,%3%^%s%I\e(B wl-summary-refile-prev-destination "M-o" \e$B$K%P%$%s%I!#\e(B
+         (\e$B:72eED$5$s\e(B <sagata@nttvdt.hil.ntt.co.jp> \e$B$h$j8fMWK>\e(B)
+       * \e$B?75,%3%^%s%I\e(B wl-summary-copy-prev-destination "M-O" \e$B$K%P%$%s%I!#\e(B
+
+1999-03-05  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * tm \e$B$r;H$C$F$$$k;~$K\e(B User-Agent: \e$B$K\e(B '\n' \e$B$,F~$C$F$7$^$&$N$r=$@5!#\e(B
+       * Subject \e$B$r\e(B [???, 0000] \e$B$N$h$&$K$D$1$k\e(B ML \e$B$KBP1~!#\e(B
+
+1999-03-04  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * (featurep 'xpm) \e$B$N\e(B xemacs \e$B$r\e(B -nw \e$B$G$"$2$?$H$-$K\e(B wl \e$B$r5/F0$9$k$H\e(B
+          warning \e$B$,=P$k$N$r=$@5!#\e(B
+       * \e$BJQ?t\e(B wl-auto-insert-x-face \e$B$NDI2C!#\e(B(default = t)
+       * wl-auto-insert-x-face t \e$B$G$+$D!"\e(B~/.xface \e$B$,$"$k$H$-$O<+F0E*$KA^F~!#\e(B
+         (\e$B:#$^$GDL$j\e(B,default)
+       * draft \e$B:n@.;~$K\e(B wl-draft-insert-x-face-field\e$B$G\e(B X-Face: \e$B$rA^F~2DG=\e(B
+         \e$B$H$7$?!#\e(B(C-c C-a \e$B$K%P%$%s%I\e(B)
+       * C-c C-a \e$B$N;~$K!"\e(B ~/.xface \e$B$,L5$1$l$P\e(B error message \e$B$rH/@8$5$;$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+
+1999-03-03  A.SAGATA  <sagata@nttvdt.hil.ntt.co.jp>
+
+       * \e$B?75,\e(B hook wl-summary-refile-hook \e$B$rDI2C!#\e(B
+
+1999-03-03  Hajime MORITO  <hajime@morito.org>
+
+       * [wl-ja.texi] ptex \e$B$G@07A$9$k$H%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * [wl-ja.texi] '{','}' \e$B$,I=<($5$l$F$$$J$$ItJ,$r=$@5!#\e(B
+
+1999-03-03  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.6 - "Dirty Diana"
+       * [elmo] \e$B$X$s$J\e(B cache \e$B%U%!%$%k$,$"$C$?$H$-$K\e(B cache \e$B$N\e(B expire \e$B$,\e(B
+         \e$BF0$+$J$+$C$?$N$r2sHr!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-auto-refile-skip-marks\e$B!#L$FI%a%C%;!<%8$O\e(B
+         auto-refile \e$B$NBP>]$+$i30$7$?!#\e(B
+         (\e$BBg>l$5$s\e(B <Koichiro.Ohba@nf-system.co.jp> \e$B$h$j8fMWK>\e(B)
+       * imap4 \e$B$G%a%C%;!<%8$rI=<($7$?$H$-$KM>J,$KL$FI%U%i%0$r%;%C%H\e(B
+         \e$B$7$F$$$?\e(B(!)\e$B$N$r=$@5!#\e(B
+       * [wl-ja.texi] wl-summary-wday-use-japanese \e$B$N5-=R$r:o=|!#\e(B
+         wl-summary-weekday-name-lang \e$B$N@bL@$rDI2C!#\e(B
+         (\e$B@P9u$5$s\e(B <kunihiro@zebra.org> \e$B$h$j8f;XE&\e(B)
+       * [wl-ja.texi] wl-summary-fix-timezone \e$B$N5-=R$rDI2C!#\e(B
+         (\e$B<M>l$5$s\e(B <iba+@andrew.cmu.edu> \e$B$h$j8f;XE&\e(B)
+
+1999-03-01  Hermit-chan <hermit@tomato.saino.ne.jp>
+
+       * wl-draft-folder \e$B$r@_Dj$7$F$$$k>l9g!"\e(B
+         M-x wl \e$B$9$kA0$K\e(B M-x wl-draft \e$B$9$k$H!"\e(Berror \e$B$K$J$k$N$r=$@5!#\e(B
+
+1999-03-01  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * wl-highlight \e$B$H\e(B ChangeLog \e$B$N\e(B typo \e$B=$@5!#\e(B
+
+1999-03-01  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B4X?t\e(B wl-ask-folder \e$B$,\e(B XEmacs \e$B$N%-!<0J30$N%$%Y%s%H$r$9$Y$F\e(B
+         \e$BF1$8$H$_$J$7$F$7$^$&$N$r=$@5!#\e(B
+
+1999-02-28  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft-config-alist \e$B$N=q<0$r3HD%!#\e(B
+
+1999-02-26  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * [wl-refile] extra-field \e$B$r<h$k$H$-$K\e(B downcase \e$B$9$k$h$&$K$7$?!#\e(B
+       * [wl-refile] \e$B$$$i$J$$JQ?t$r:o=|!#\e(B
+
+1999-02-26  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Summary \e$B$N%a%K%e!<$r=$@5!#\e(B
+
+1999-02-25  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B%U%#%k%?%U%)%k%@$NL$FI%A%'%C%/$,<:GT$9$k$N$r=$@5!#\e(B
+
+1999-02-10  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * draft \e$B$G\e(B font-lock \e$B$,M-8z$K$J$k$N$r2sHr!#\e(B
+
+1999-02-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.5 - "California Girls"
+
+1999-02-25  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-notify-deleted \e$B$,\e(B 'sync \e$B$J$iIi$N?t$rI=<($;$:\e(B
+         \e$BF14|$5$;$k$h$&$K$7$?!#\e(B
+
+1999-02-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-folder-notify-deleted\e$B!#%a%C%;!<%8$,:o=|$5$l$F$$$?$H$-\e(B
+         \e$B$KIi$N?t;z$rI=<($7$FCN$i$;$k$+$I$&$+!#\e(Bdefault \e$B$O\e(B nil \e$B$K$7$?!#\e(B
+       * wl-summary-auto-refile \e$B$r%G%U%)%k%H$G$O%9%l%C%I$rJD$8$?$^$^\e(B
+         \e$B=hM}$9$k$h$&$K$7$?!#\e(BPrefix argument \e$B$D$-$J$iA4%9%l%C%I$r3+$$$F\e(B
+         \e$B$+$i<B9T!#\e(B
+       * \e$B?75,JQ?t\e(B wl-x-face-file\e$B!#%G%U%)%k%H$O\e(B "~/.xface"\e$B!#\e(B
+
+1999-02-16  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B?75,4X?t\e(B elmo-passwd-alist-{load,save}\e$B!#\e(B
+         \e$B?75,JQ?t\e(B elmo-passwd-alist-file-name \e$B$K@_Dj$5$l$?%U%!%$%k\e(B{\e$B$+$i\e(B|\e$B$X\e(B}
+         \e$B%Q%9%o!<%I$r\e(B{\e$B%m!<%I\e(B|\e$B%;!<%V\e(B}\e$B$9$k!#\e(B
+
+1999-02-11  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * [wl-ja.texi] \e$B$K\e(B "~/.xface" \e$B$N@bL@$rDI2C!#\e(B
+
+1999-02-06  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-draft-replace-field () \e$B$G\e(B header \e$B$r\e(B insert \e$B$9$k$H$-$K\e(B
+         "\n" \e$B$r@h$K\e(B concatinate \e$B$7$F$+$i\e(B insert \e$B$9$k$h$&$K$7$?!#\e(B
+
+1999-02-06  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * imap \e$B$GL$FI>pJs$r%3%T!<@h$K$b0z$-7Q$0$h$&$K$7$?!#\e(B
+
+1999-02-05  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * refile \e$B$N08@hMQ$N\e(B face\e$B!"\e(Bwl-highlight-refile-destination-face
+         \e$B$r?7@_!#\e(B
+       * [wl-ja.texi] '$' \e$B$N@bL@J8$r=$@5!#\e(B
+         (\e$B8eF#\e(B(\e$B$H\e(B)\e$B$5$s\e(B <pf21@pure.cpdc.canon.co.jp> \e$B$h$j8f=u8@\e(B)
+
+1999-02-04  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * XEmacs \e$B$G%U%)%k%@$NL$FI%A%'%C%/8e%O%$%i%$%H$,$*$+$7$/$J$k>l9g$,\e(B
+         \e$B$"$C$?$N$r=$@5!#\e(B
+
+1999-02-03  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B?75,4X?t\e(B wl-folder-prefetch-entity\e$B!#\e(B"I" \e$B$K%P%$%s%I!#\e(B
+
+1999-02-03  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * [sample.dot.wl] my-wl-summary-from-func-petname \e$B$N\e(B
+         folder \e$BL>$r;2>H$9$kItJ,$r\e(B summary-mode \e$B$G$N$_8F$P$l$k$h$&$K$7$?!#\e(B
+
+1999-02-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * \e$B4X?t\e(B wl-summary-auto-refile, wl-refile-rule-alist \e$B$NDI2C!#\e(B
+
+1999-02-02  IMAI Takeshi <imai@ed2.com1.fc.nec.co.jp>
+
+       * wl-expire \e$B$G\e(B imap \e$B@h$K\e(B refile \e$B$9$k$H%(%i!<$K$J$k$N$r=$@5!#\e(B
+
+1999-01-29  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * Summary\e$B%b!<%I$N\e(B view \e$B$r\e(B cache \e$B$K%;!<%V$9$k$H$-!$\e(B
+         widen \e$B$9$k$h$&$KJQ99!#\e(B
+
+1999-01-22  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-auto-check-folder-name \e$B$N3HD%!#\e(B
+
+1999-01-19  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%U%)%k%@%b!<%I$G\e(B expire \e$B$r$9$k;~$K!$%5%^%j>pJs$r\e(Bupdate\e$B$7$F$+$i\e(B
+         expire \e$B$,9T$($k$h$&$K$7$?!#\e(B
+       * reserve-marked-msg \e$B$r>J$$$?7k2L!$\e(Bexpire\e$B$9$k%a%C%;!<%8$,$J$/\e(B
+         \e$B$J$k$H!$%(%i!<$,5/$3$k$N$r=$@5$7$?!#\e(B
+       * elmo-datevec-substitute \e$B$K$*$$$FG/$r$^$?$0>l9g$r9MN8$7$?!#\e(B
+
+1999-01-19  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-auto-uncheck-folder-list, wl-auto-check-folder-list\e$B!#\e(B
+         \e$B5/F0;~$N%0%k!<%W%A%'%C%/$G%A%'%C%/$r%9%-%C%W$9$k$+$I$&$+@_Dj$G$-$k\e(B
+         \e$B$h$&$K$7$?!#\e(B(\e$B85LZ$5$s\e(B <motoki@ptl.abk.nec.co.jp> \e$B$h$j8fMWK>\e(B)
+         \e$B%G%U%)%k%H$G$O\e(B archive \e$B%U%)%k%@$N%A%'%C%/$r%9%-%C%W!#\e(B
+       * [elmo-nntp] \e$B%5!<%P$+$i\e(B Message-ID \e$B$r$b$i$&ItJ,$,%P%0$C$F$$$?$N$r\e(B
+         \e$B=$@5!#\e(B
+
+1999-01-18  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-ja.texi \e$B$r99?7\e(B (mA, mf \e$B$N@bL@DI2CEy\e(B)\e$B!#\e(B
+       * wl-folder-{prev,next}-unread \e$B$G\e(B unread \e$B$G$J$$\e(Bgroup\e$B$X$OHt$P$J$$\e(B
+         \e$B$h$&$K$7$?\e(B(Prefix ARG \e$B$D$-$J$i\e(B group \e$B$X$bHt$V\e(B)\e$B!#\e(B
+         (\e$B2,ED$5$s\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp> \e$B$N8f;XE&\e(B)
+       * wl-folder-check-entity \e$B$G%U%)%k%@$,$J$/$J$C$F$$$?$H$-$J$I\e(B
+         \e$B%(%i!<$G;_$^$C$F$7$^$&$N$r2sHr!#\e(B
+         (\e$B@P@n$5$s\e(B <ichiro@mail.ne.jp> \e$B$h$j8f;XE&\e(B)
+
+1999-01-16  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B?75,4X?t\e(B wl-summary-temp-mark-uudecode\e$B!#\e(B
+       * wl-ja.texi \e$B$rJQ99\e(B (@item->@defvar \e$BEy\e(B)\e$B!#\e(B
+
+1999-01-15  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-{folder|summary}-goto-folder() \e$B$G\e(B ~/.folders \e$B$K$J$$%U%)%k\e(B
+         \e$B%@$r;XDj$7$?>l9g$K$b!"B8:_$7$J$$\e(B property \e$B$r;2>H$7$h$&$H$7$F\e(B
+         \e$B$3$1$k%P%0$r=$@5!#\e(B
+
+1999-01-15  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * [elmo-archive] header-regexp \e$B$G\e(B footer \e$B$b\e(B check\e$B!#\e(B
+       * [elmo-archive] rar \e$B$N05=LN($r>e$2$?!#\e(B
+
+1999-01-15  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * 19.28\e$B%Y!<%9$N\e(B Emacs \e$B$G\e(B wl-expire \e$B$,=PMh$J$+$C$?$N$r=$@5$7$?!#\e(B
+       * elmo-date \e$B$GG/$r$^$?$$$@;XDj$,9T$($k$h$&$K$7$?!#\e(B
+       * [fldmgr] Emacs-19 \e$B$G\e(B wl-fldmgr-add \e$B$,@5>o$KF0:n$7$J$+$C$?$N$r\e(B
+         \e$B=$@5$7$?!#\e(B
+
+1999-01-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * Emacs-19 \e$B0JA0$G$O%"%/%;%9%0%k!<%W$N3,AX9=B$$,:n$i$l$J$$$N$r=$\e(B
+         \e$B@5$7$?!#\e(B
+       * [fldmgr] \e$B6u$N%0%k!<%W$K%U%)%k%@$rA^F~$9$k$H%(%i!<$K$J$k$N$r=$\e(B
+         \e$B@5$7$?!#\e(B
+       * [expire] elmo \e$B$N8F=P$7$G<:GT$7$?>l9g$O%(%i!<$G;_$a$k$h$&$K$7$?!#\e(B
+
+1999-01-14  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-summary-temp-mark-prefetch \e$B$,F0$+$J$/$J$C$F$$$?$N$G:F<BAu!#\e(B
+         (\e$B2,ED$5$s\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp> \e$B$N8f;XE&\e(B)
+       * Meadow\e$B$GF|K\8l\e(B Subject\e$B$N%a!<%k$KJV;v$r=q$3$&$H$9$k$H!$\e(B
+         \e$B%I%i%U%H$KMQ0U$5$l$?%a!<%k$N%5%V%8%'%/%H$,!$%(%9%1!<%W\e(B
+         \e$B%3!<%I4]=P$7$G2=$1$F$7$^$&$N$r=$@5!#\e(B
+         (\e$BHSED$5$s\e(B <iida@isl.ntt.co.jp> \e$B$N8f;XE&\e(B)
+
+1999-01-13  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Windows \e$B$G\e(B LHA archive \e$B$,F0$/$h$&$K=$@5!#\e(B
+
+1999-01-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.4 - "Broken Wings"
+       * wl-folder-init-no-load-access-folders \e$B$H\e(B
+         wl-folder-init-load-access-folders \e$B$NN>J}$,\e(B nil \e$B$N$H$-!"\e(B
+         \e$BA4$F$N%U%)%k%@>pJs$r%m!<%I$7$J$+$C$?$N$r=$@5!#\e(B
+       * NNTP \e$B$N\e(B multi \e$B%U%)%k%@$rC&=P8e!"F1$8%U%)%k%@$K9T$-D>$9$H!"\e(B
+         fetch error \e$B$,H/@8$9$k>l9g$,$"$C$?$N$r=$@5!#\e(B
+
+1999-01-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-entity-alist \e$B$H\e(B wl-folder-entity-id-name-alist \e$B$r\e(B
+         obarray (hashtable) \e$B$K$7$?!#\e(B
+       * wl-folder-entity-alist \e$B$H\e(B elmo-folder-info-alist \e$B$rE}9g$7$?!#\e(B
+       * check \e$B;~$NI=<(99?7$r9bB.2=$7$?!#$^$?!$JQ?t\e(B
+         wl-folder-check-fast \e$B$rGQ;_$7$?!#\e(B
+       * \e$B=i4|2=;~$K%m!<%I$9$k%"%/%;%9%0%k!<%W$N%U%)%k%@$r;XDj$G$-$k$h$&$K\e(B
+         \e$B$7$?!#\e(B
+       * \e$B%"%/%;%9%0%k!<%W$N%j%9%H$r3,AX9=B$$G<hF@$G$-$k$h$&$K$7$?!#\e(B
+       * unsubscribe\e$B$5$l$?%U%)%k%@$rI=<($9$k$H$-$N%^!<%/$r\e(B '#' \e$B$KJQ$($?!#\e(B
+       * \e$B%U%)%k%@%b!<%I$G$NA`:n$G;~4V$,$+$+$k$b$N$O7P2a$rI=<($9$k$h$&$K\e(B
+         \e$B$7$?!#\e(B
+
+1999-01-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-tmp-dir \e$B$,$J$1$l$P5/F0;~$K$D$/$k$h$&$K$7$?!#\e(B
+         (\e$BLgOF$5$s\e(B <kadowaki@stat.phys.titech.ac.jp> \e$B$h$j8f;XE&\e(B)
+       * wl-queue-folder \e$B$,$J$1$l$P5/F0;~$K:n$k$h$&$K$7$?!#\e(B
+
+1999-01-12  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * window-width \e$B$,\e(B 100 \e$B$N;~$J$I$K!$\e(Bwl-demo \e$B$G\e(B xpm \e$B$,??$sCf$K$G$J$$\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1999-01-12  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * [elmo-archive] rar \e$B$N%Q%i%a!<%?DI2C$H\e(B windows-nt \e$B8~$1=$@5!#\e(B
+
+1999-01-12  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * [elmo-nntp] "-/" \e$B$GA4%K%e!<%9%0%k!<%W$rI=<($9$k$h$&$K$7$?!#\e(B
+         (\e$B@P@n$5$s\e(B <ichiro@mail.ne.jp> \e$B$h$j8f;XE&\e(B)
+         (\e$B$7$+$7\e(B 1999-1-13 \e$B$NB<ED$5$s%Q%C%A$G$3$NJQ99$O>e=q$-!#\e(B)
+       * unplugged \e$B$G\e(B filter \e$B%U%)%k%@$NF0:n$,$*$+$7$+$C$?$N$r=$@5!#\e(B
+       * 'mA' (\e$B0l;~%^!<%/$D$-%a%C%;!<%8$KBP$9$k%^%k%A0zMQ$D$-%j%W%i%$\e(B)\e$B!$\e(B
+         'mf' (\e$B0l;~%^!<%/$D$-%a%C%;!<%8$N%^%k%A%U%)%o!<%I\e(B)\e$B!#\e(B
+         (\e$BKLL\$5$s\e(B <kitame@northeye.org> \e$B$N8fMWK>$K4p$E$/\e(B)\e$B!#\e(B
+       * unplugged \e$B$K$7$?$"$H%5%^%j$rC&=P$9$k$H%-%c%C%7%e$,%;!<%V$5$l$J$$\e(B
+         \e$B%P%0$r=$@5!#\e(B
+       * [elmo-nntp] Cancel-Lock \e$B$KBP1~$7$?$D$b$j!#\e(B
+
+1999-01-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-dnd.el XEmacs21.2.8 \e$B$N\e(B API \e$B$K9g$o$;$?!#\e(B
+
+1999-01-08  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-localdir-list-folders-subr() \e$B$G\e(B
+         \e$B?F%U%)%k%@$,4^$^$l$J$/$J$C$F$7$^$&$N$r=$@5!#\e(B
+
+1999-01-06  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$B?75,\e(B hook\e$B!$\e(Bwl-highlight-message-hook \e$BDI2C!%\e(B
+
+1999-01-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [elmo-util] elmo-default-imap4-server \e$B$r\e(B
+         "hoge%imap_server@gw" \e$B$N$h$&$J7A<0$G$b;XDj$G$-$k$h$&$K$7$?!#\e(B
+
+1999-01-05  Hironori Fukuchi <nory@valis.co.jp>
+
+       * To\e$B$KB8:_$7$J$$%"%I%l%9$r=q$$$FAw?.$9$k$H!"%_%K%P%C%U%!$K$O\e(B
+         sending...done\e$B$HI=<($5$l!"@5>o$KAw?.$5$l$?$+$N$h$&$K8+$($k$,\e(B
+         \e$B<B:]$K$OAw?.$K<:GT$7$F$7$^$&%P%0$r=$@5!#\e(B
+
+1999-01-03  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-draft-edit-string() \e$B$G\e(B To: \e$B%U%#!<%k%I$,>o$K\e(B nil \e$B$K$5$l$F\e(B
+         \e$B$7$^$&%P%0\e(B (typo) \e$B$r=$@5!#\e(B
+
+1998-12-31  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-localdir-list-folders-subr() \e$B$G%5%V%G%#%l%/%H%j$,B8:_$9\e(B
+         \e$B$k?F%U%)%k%@$,=EJ#$7$F$7$^$&%P%0$r=$@5!#\e(B
+       * wl-summary-redisplay-no-mime() \e$B$G$O\e(B wl-break-pages \e$B$r\e(B nil \e$B$K\e(B
+         \e$BB+G{$9$k!#\e(B
+       * elmo-localdir-list-folders-subr() \e$B$G\e(B link count \e$B35G0$N$J$$%U%!\e(B
+         \e$B%$%k%7%9%F%`$G$bFs3,AX0J>e2<AX$N%G%#%l%/%H%j$bJV$9$h$&$K$7$?\e(B
+         \e$B!J=i4|CM$G$O\e(B OS/2 \e$BHG\e(B variant \e$B$H\e(B Mule for Win32 \e$B$N$_!K!#\e(B
+       * \e$B<B:]$K8F$P$l$F$J$$L5BL$J4X?t$r>C$7$?!#\e(B
+
+1998-12-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$BF1$8L>A0$N%U%)%k%@$,%0%k!<%W$h$j$bA0$KB8:_$9$k$H%(%i!<$,H/@8$9$k$N$r\e(B
+         \e$B=$@5!#\e(B
+
+1998-12-27  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [wl-folder] wl-folder-mark-as-read-all-current-entity() \e$B$GA4\e(B
+         \e$B$F$N%U%)%k%@$K0\F0$;$:!"?75,!?L$FI$,B8:_$9$k%U%)%k%@$@$1$r\e(B
+         catchup \e$B$9$k$h$&$K$7$?!J9bB.2=$N$?$a!K!#\e(B
+
+1998-12-25  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * Meadow \e$BEy$N\e(B Emacs20.2 \e$B0J2<$G%5%^%j$,J8;z2=$1$9$k%P%0$N=$@5$r\e(B
+         \e$BH?1G$7K:$l$F$$$?!#\e(B
+         (\e$B$P$P$5$s\e(B <tbaba@mtl.t.u-tokyo.ac.jp> \e$B$h$j8f;XE&\e(B)\e$B!#\e(B
+
+1998-12-24  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.3 - "Last Christmas" \e$B%/%j%9%^%98BDjHG\e(B(?)
+
+1998-12-23  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%Q%9%;%Q%l!<%?$H$7$F\e(B "/" \e$B$r;H$C$F$$$?$N$r=$@5$7$?!#\e(B
+       * delete \e$B$N;HMQ$G\e(B delq \e$B$G:Q$`$H$3$m$OCV$-49$($?!#\e(B
+
+1998-12-21  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,%U%!%$%k\e(B wl-expire\e$B!#\e(B
+         \e$B8E$$%a%C%;!<%8$r<+F0E*$K:o=|!&0\F0$9$k5!G=$rDI2C$7$?!#\e(B
+       * wl-fldmgr \e$B$r\e(B autoload \e$B2=$7$?!#\e(B
+       * wl-folder \e$B$G4v$D$+$N%3%^%s%I\e(B(\e$B%0%k!<%W$N<+F0\e(Bopen\e$B4X78\e(B)\e$B$N@0M}!&9b\e(B
+         \e$BB.2=$r9T$C$?!#\e(B
+       * wl-demo.el \e$B$N%P%$%H%3%s%Q%$%k$G\e(B XEmacs \e$B0J30$G$O%m%4%U%!%$%k$r\e(B
+         \e$BFI$_9~$^$J$$$h$&$K$7$?!#\e(B
+       * [elmo-archive] elmo-archive-treat-file \e$B$,\e(B non-nil \e$B$N$H$-!$\e(B
+         elmo-archive-list-folders \e$B$G%G%#%l%/%H%j$,B8:_$7$J$$>l9g$K%(%i!<\e(B
+         \e$B$K$J$k$3$H$,$"$k$N$r=$@5$7$?!#\e(B
+       * [WL 838] \e$B$K$"$k8e$m$N\e(B2\e$B$D$N%Q%C%A$,Ev$?$C$F$$$J$+$C$?$N$rH?1G$7\e(B
+         \e$B$?!#\e(B
+
+1998-12-21  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$BAw?.;~$K\e(B XEmacs \e$B$G%(%i!<$,H/@8$9$k$H\e(B wrong type argument \e$B%(%i!<$,\e(B
+         \e$BH/@8$9$k$N$r2sHr!#\e(B(\e$B?@V:$5$s\e(B<kamisima@etl.go.jp>\e$B$h$j8f;XE&\e(B)
+
+1998-12-18  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B%/%j%9%^%9$i$7$$5$J,$r=P$7$F$_$?!#\e(B
+       * wl-draft \e$B$N0z?t$O%G%3!<%I$5$l$?J8;zNs$H$9$k$3$H$K$7$?!#\e(B
+         (\e$BCfB<$5$s\e(B<u90121@uis-inf.co.jp> \e$B$N=$@5$K4p$E$/JQ99\e(B)
+       * Meadow \e$BEy$N\e(B Emacs20.2 \e$B0J2<$G%5%^%j$,J8;z2=$1$9$k%P%0$N=$@5!#\e(B
+         (\e$BCfB<$5$s\e(B<u90121@uis-inf.co.jp>\e$B!"\e(B
+          \e$BF#0f$5$s\e(B<fujii@mail.fjts.fujitsu.co.jp> \e$B$h$j8fJs9p\e(B)
+
+1998-12-17  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * "Re:" \e$B$r4^$a$F%(%s%3!<%I$5$l$k>l9g$K\e(B "Re: Re:" \e$B$H$J$C$F$7$^$&\e(B
+         \e$B$N$r2sHr!#\e(B
+
+1998-12-17  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.2 - "Addicted To Love"
+
+1998-12-17  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [fldmgr] \e$B6u$N%0%k!<%W$r:o=|$9$k$H!$\e(B
+         wl-folder-entity-id-name-alist \e$B$,2u$l$k>l9g$,$"$k$N$r=$@5$7$?!#\e(B
+       * [elmo-archive] method \e$B$K4X?t$,Dj5A$G$-$k$h$&$K$7$?!#\e(B
+       * [elmo-archive] 'tgz \e$B7A<0$G$bDI2C$H:o=|$,9T$($k$h$&$K$7$?!#\e(B
+         \e$B$^$?!$\e(B'tgz \e$B$N\e(B suffix \e$B$r\e(B ".tar.gz" \e$B$KJQ99$7$?!#\e(B
+       * [elmo-archive] elmo-archive-msgdb-create-as-numlist-subr2() \e$B$,\e(B
+         prefix \e$B$r9MN8$7$F$J$+$C$?$N$r=$@5!#\e(B
+
+1998-12-16  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * Draft \e$B%P%C%U%!$G!"\e(BMail \e$BMQ%a%K%e!<$N%3%^%s%I$NFbMF$r\e(B
+         wl \e$B$N$b$N$KCV$-49$($k$h$&$K$7$?!#\e(B
+       * smtp.el \e$B$,:G?7$N\e(B apel \e$B$G$J$/$H$bF0:n$9$k$h$&!"\e(B
+         open-network-stream-as-binary \e$B$,L$Dj5A$J$iDj5A$9$k$h$&$K$7$?!#\e(B
+       * smtp.el \e$B$r:G?7$N\e(B FLIM \e$B$N$b$N$K9g$o$;$?!#\e(B
+
+1998-12-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * [fldmgr] nntp\e$B$G$J$$%U%)%k%@$rDI2C$9$k$H!$\e(B
+         wl-folder-newsgroups-hashtb \e$B$,\e(B nil \e$B$K$J$k$N$r=$@5$7$?!#\e(B
+
+1998-12-16  Hidekazu NAKAMURA <u90121@uis-inf.co.jp>
+
+       * SEMI \e$B$rMxMQ$9$k>l9g\e(B smtp.el \e$B$r%$%s%9%H!<%k$7$J$$$h$&\e(B WL-ELS \e$B$r\e(B
+         \e$BJQ99!#\e(B
+
+1998-12-15  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * In-Reply-To: \e$B$NF|IUItJ,$r\e(B "" \e$B$G3g$k$h$&$K$7$?!#\e(B
+       * wl-summary-rescan \e$B$G@8@.$5$l$?%5%^%j$NJ]B8$O!"%9%-%c%s=*N;;~$G$O\e(B
+         \e$B$J$/%5%^%j=*N;;~$K$^$H$a$F$d$k$h$&$K$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-folder-thread-indent-set-alist\e$B!#%U%)%k%@$4$H$K\e(B
+         \e$B%9%l%C%I$N%$%s%G%s%HJ8;zNs$rA*$Y$k$h$&$K$7$?!#\e(B
+         wl-thread-indent-level, wl-thread-have-younger-brother-str,
+         wl-thread-youngest-child-str, wl-thread-vertical-str,
+         wl-thread-horizontal-str, wl-thread-space-str \e$B$O\e(B
+         \e$B$3$l$K%^%C%A$7$J$$>l9g$N\e(B default \e$BCM$H$7$FMQ$$$k$h$&JQ99!#\e(B
+       * \e$B?75,JQ?t\e(B wl-folder-weekday-name-lang-alist\e$B!#%U%)%k%@$4$H$K\e(B
+         \e$BMKF|I=<($N8@8l$rA*$Y$k$h$&$K$7$?!#\e(B
+         wl-summary-weekday-name-lang \e$B$O$3$l$K%^%C%A$7$J$$>l9g$N\e(B
+         default \e$BCM$H$7$FMQ$$$k$h$&JQ99!#\e(B
+       * elmo-nntp.el,elmo-imap4.el,elmo-msgdb.el \e$B$G!"\e(Bmsgdb \e$B$KJ]B8$9$k\e(B
+         Subject, From \e$B$NJ8;zNs$N:n$jJ}$,4V0c$C$F$$$?$?$a!"Cf9q8l$d%O%s%0%k\e(B
+         \e$B$,2=$1$F$7$^$C$F$$$?$N$r=$@5!#\e(B
+       * Summary \e$B$N\e(B cache \e$B$N\e(B{\e$BA^F~\e(B|\e$BJ]B8\e(B}\e$B$r\e(B as-binary-{input|output}-file
+         \e$B$G9T$J$&$h$&$K$7!"%P%C%U%!$4$H$N\e(B mime-charset \e$B$G\e(B{encode|decode}\e$B$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * wl-init \e$B$G\e(B wl-draft-folder \e$B$,B8:_$7$J$$$H$-$b\e(B elmo-create-folder ()
+         \e$B$r8F$V$h$&$K$7$?!#\e(B
+       * wl-generate-user-agent-string \e$B$r\e(B Nemacs \e$BBP1~!#\e(B
+         \e$B$D$$$G$K\e(B tm \e$B$N%P!<%8%g%s>pJs$bF~$l$k$h$&$K$7$?!#\e(B
+       * \e$B%a%C%;!<%8:o=|;~!"Ev3:%a%C%;!<%8$,JD$8$?%9%l%C%I$K1#$l$F$$$?$H$-$K!"\e(B
+         \e$B;R$I$b%9%l%C%I$r$*$+$7$J0LCV$KA^F~$7$F$7$^$&$3$H$,$"$k$N$r=$@5\e(B
+         (\e$B$7$?$D$b$j!D\e(B)\e$B!#\e(B
+       * bbdb-wl.el \e$B$G%P%$%H%3%s%Q%$%k$KI,MW$J%b%8%e!<%k$r\e(B require \e$B$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * smtp-via-smtp \e$B$r\e(B (as-binary-process) \e$B$G3g$C$?!#\e(B
+         (\e$B>.6L\e(B \e$B$5$s\e(B <kodama@ayame.mfd.cs.fujitsu.co.jp> \e$BB>$h$j$$$?$@$$$?\e(B
+          \e$B8fJs9p$K4p$E$/\e(B)
+       * [wl-ja.texi] \e$B%G%U%)%k%H$G\e(B @directory \e$B$,M-8z$K$J$k$h$&$K$7$?!#\e(B
+         (\e$B@iED$5$s\e(B <senda@iod.ricoh.co.jp> \e$B$h$j8f;XE&\e(B)
+
+1998-12-13  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * \e$B?75,%U%!%$%k\e(B wl-mule.el, wl-nemacs.el\e$B!#\e(B
+       * wl-nemacs \e$B%V%i%s%A$r%^!<%8!#\e(B
+
+1998-12-10  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * message-id \e$B$,4^$^$l$F$$$J$$\e(B In-Reply-To \e$B%U%#!<%k%I$,$"$k$H!$Be\e(B
+         \e$B$o$j$K\e(B Reference \e$B%U%#!<%k%I$,$"$C$F$b;2>H$5$l$J$$%P%0$r=$@5!#\e(B
+
+1998-12-11  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 0.9.1 - "Yankee Rose"
+
+1998-12-10  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%I%i%U%H%P%C%U%!$NL>A0$rJQ99$7$?!#\e(B("1" -> "+draft/1")
+       * \e$B?75,4X?t\e(B wl-jump-to-draft-buffer\e$B!#\e(B
+       * wl-draft-config-alist \e$B$N=hM}$G\e(B1\e$B$D%^%C%A$7$F$bB3$1$F=hM}$r9T$&\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * wl-draft-config-exec-hook \e$B$rDI2C!#\e(B
+       * \e$B?75,JQ?t\e(B wl-draft-always-delete-myself\e$B!#\e(B
+       * \e$B%"!<%+%$%V%U%)%k%@$N\e(B prefix \e$B$K?t;z$,4^$^$l$F$$$?>l9g!$\e(B
+         elmo-archive-list-folder \e$B$,>o$K\e(B nil \e$B$rJV$9$N$r=$@5$7$?!#\e(B
+       * elmo-*-copy-msgs \e$B$O@.8y$9$l$P\e(B non-nil \e$B$rJV$9$h$&$K$7$?!#\e(B
+       * elmo-move-msgs \e$B$G$N%3%T!<$K<:GT$9$l$P:o=|$r<B9T$7$J$$$h$&$K$7\e(B
+         \e$B$?!#\e(B
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * elmo-match-string, elmo-match-buffer \e$B$r;H$($k$H$3$m$O;H$&$h$&$K$7$?!#\e(B
+       * wl-insert-mail-followup-to, wl-insert-mail-reply-to \e$B$N\e(B default \e$B$r\e(B
+         nil \e$B$K$7$?!#\e(B
+       * wl-ja.info \e$B$r\e(B Emacs 20.3 \e$B$G:n$k$h$&$K$7$?!#\e(B
+       * "M-x wl-draft" \e$B$G$b@5$7$/5/F0$G$-$k$h$&$K$7$?!#\e(B
+       * Mule \e$B$b%P%$%H%3%s%Q%$%k;~$N\e(B Warning \e$B$r8:$i$7$?!#\e(B
+
+1998-12-10  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * pack-number \e$B8e$K!"\e(Bmsgdb \e$B$N\e(B number-alist \e$B$,99?7$5$l$F$J$+$C$?\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-bcc \e$B$,@_Dj$5$l$F$$$l$P\e(B mail-self-blind \e$B$NCM$K4X78$J$/\e(B Bcc: \e$B$r\e(B
+         \e$BA^F~$9$k$h$&$K$7$?\e(B (wl-fcc \e$B$HF0:n$r9g$o$;$?\e(B)\e$B!#\e(B
+
+1998-12-10  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * \e$B?75,JQ?t\e(B wl-bcc\e$B!#\e(Bnon-nil \e$B$N$H$-$O\e(B wl-bcc \e$B$NCM$,\e(B Bcc: \e$B$KF~$k!#\e(B
+
+1998-12-10  SENDA Shigeya <senda@iod.ricoh.co.jp>
+
+       * XEmacs \e$B8~$1$K\e(B wl-ja.texi \e$B$r=$@5!#\e(B
+       * wl-ja.texi \e$B$G\e(B vindex\e$B$,0l$DH4$1$F$$$?$N$r=$@5!#\e(B
+       * WL-ELS \e$B$G\e(B xemacs \e$B$N\e(B install-package \e$B$N$H$-\e(B info \e$B$,%$%s%9%H!<%k\e(B
+         \e$B$5$l$k$h$&$K$7$?!#\e(B
+
+1998-12-10  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * \e$B%9%l%C%I$NESCf$G!"JD$8$?%9%l%C%I$N%a%C%;!<%8$,$"$C$?;~!"\e(B
+         \e$B$=$N%a%C%;!<%80J9_$N%9%l%C%I$,A^F~$5$l$J$$%P%0$,$"$C$?$N$r=$@5!#\e(B
+
+1998-12-09  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-move-msgs, elmo-copy-msgs \e$B$G%*%W%7%g%s;XDj$K$h$j!$%U%)%k\e(B
+         \e$B%@85$NHV9f$N$^$^0\F0!$%3%T!<$9$k5!G=$NDI2C!#4XO"$7$F!$\e(B
+         elmo-append-msg \e$B$b%*%W%7%g%s$G;XDj$7$?HV9f$GDI2C$9$k5!G=$NDI2C!#\e(B
+       * 'localdir \e$B$+$i\e(B 'archive \e$B$K%3%T!<$9$k>l9g$O\e(B1\e$BEY$KJ#?t$N%a%C%;!<\e(B
+         \e$B%8$r=hM}$9$k$h$&$K$7$?!#\e(B
+
+1998-12-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * 0.9.0 - "With Or Without You"
+       * elmo-archive.el \e$B$N%P%$%H%3%s%Q%$%k;~$K\e(B Warning \e$B$,=P$J$$$h$&$K\e(B
+         \e$B$7$?!#\e(B
+
+1998-12-09  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-archive.el "v0.16 [981208/alpha]"\e$B!#\e(B
+       * copy-msgs() \e$B$G\e(B dst-spec \e$B$N%U%)%k%@$,$J$1$l$P:n$k$h$&$K$7$?\e(B
+         \e$B!J;{ED$5$s\e(B Masayuki TERADA <te@isl.ntt.co.jp> \e$B$N$4;XE&!K!#\e(B
+       * elmo-archive-treat-file \e$B$,\e(B non-nil \e$B$N;~$K\e(B get-archive-name()
+         \e$B$G\e(B suffix \e$B$,\e(B regexp-quote() \e$B$5$l$F$J$$%P%0$r=$@5!#\e(B
+
+1998-12-09  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * wl-folder-check-entity \e$B$GBP>]%U%)%k%@$,$^$@\e(B
+         \e$BB8:_$7$J$$$H$-$O\e(B elmo-create-folder () \e$B$r8F$V$h$&$K$7$?!#\e(B
+       * wl-init \e$B$G\e(B wl-trash-folder \e$B$,B8:_$7$J$$$H$-$O\e(B
+         elmo-create-folder () \e$B$r8F$V$h$&$K$7$?!#\e(B
+         (\e$B1|@>$5$s\e(B<fuji0924@mbox.kyoto-inet.or.jp> \e$B$N8f;XE&\e(B)
+
+1998-12-08  Yuuichi Teranishi  <teranisi@isl.ntt.co.jp>
+
+       * XEmacs, Emacs \e$B$G%P%$%H%3%s%Q%$%i$,@8@.$9$k\e(B Warning \e$B$r8:$i$7$?!#\e(B
+       * mmelmo-imap4 \e$B$N\e(B mime-entity \e$B@8@.ItJ,$G\e(B parent \e$B$N07$$$,4V0c$C$F$$\e(B
+         \e$B$?$?$a%(%i!<$,H/@8$9$k>l9g$,$"$C$?$N$r=$@5!#\e(B
+
+1998-12-07  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * 00README.ja \e$B$N%a!<%j%s%0%j%9%H%"%I%l%9$,8E$$$^$^$@$C$?$N$r=$@5!#\e(B
+
+1998-12-06  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-summary-buffer-view \e$B$,\e(B 'thread \e$B$N;~!$\e(Bwl-summary-cursor-up
+         \e$B$N\e(B hereto \e$B$,L5;k$5$l$F$$$?$N$r=$@5$7$?!#\e(B
+       * wl-thread-jump-to-next-unread, wl-thread-jump-to-prev-unread\e$B$G\e(B
+         hereto \e$B$,\e(B non-nil \e$B$N$H$-!$\e(Bsuccess-mark \e$B$,$J$/%+!<%=%k$,\e(B
+         failure-mark \e$B$N0LCV$K$"$k$H!$La$jCM$,\e(B nil \e$B$K$J$k$N$r=$@5$7$?!#\e(B
+       * \e$B%5%^%j$N%"%C%W%G!<%H;~$N:o=|$G=hM}$N?JD=$rI=<($9$k$h$&$K$7$?!#\e(B
+
+1998-12-06  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-localdir-pack-number() \e$B$N%G%P%C%0%3!<%I=|5n$H7P2aI=<(!#\e(B
+       * data scope \e$BLdBj$G\e(B free var \e$B$K$J$i$J$$$h$&$K\e(B elmo-call-func()
+         \e$B$G\e(B SPEC \e$B$rDL$9$h$&$K$7$?!J\e(Bbyte-compile warning \e$B$r>C$9$?$a!K!#\e(B
+
+1998-12-05  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-ja.texi \e$B$N$$$/$D$+$N$"$d$^$j$r=$@5!#\e(B
+
+1998-12-05  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,JQ?t\e(B elmo-archive-treat-file\e$B!#\e(Bnon-nil \e$B$N>l9g\e(B
+         \e$B$O\e(B archive \e$B%U%)%k%@$,%U%!%$%k$rBP>]$H$9$k$h$&$K$7$?!#\e(B
+
+1998-12-04  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo \e$B$G:n@.$9$k0l;~%P%C%U%!$,\e(B WL \e$B$r=*N;$7$F$b;D$k>l9g$,$"$k$N\e(B
+         \e$B$r=$@5$7$?!#\e(B
+       * wl-summary-rescan \e$B<B9T8e$b!$%+!<%=%k0LCV$r<B9TA0$HF1$8%a%C%;!<\e(B
+         \e$B%8$N0LCV$K0\F0$9$k$h$&$K$7$?!#\e(B
+       * \e$B%5%^%j$N%"%C%W%G!<%HI=<($G%T%j%*%I$,\e(B2\e$B$D$+$5$J$i$J$$$h$&$K$7$?!#\e(B
+       * wl-summary-pick \e$B$G\e(B Since \e$B$H\e(B Before \e$B$NCM$rF~NO$9$k$H$-$O8uJd$,\e(B
+         \e$BJd40$G$-$k$h$&$K$7$?!#\e(B
+       * completing-read \e$B$N%j%9%H$r@0M}$7$?!#\e(B
+       * wl-auto-select-first \e$B$,\e(B t \e$B$N$H$-$G$b!$\e(Bwl-summary-move-order \e$B$N\e(B
+         \e$B;XDj$GM%@hEY$,Dc$$%^!<%/$7$+$J$$>l9g$O%a%C%;!<%8$rI=<($7$J$$$h\e(B
+         \e$B$&$K$7$?!#\e(B
+       * elmo-archive-delete-msgs \e$B$,:o=|$K@.8y$7$?$H$-\e(B t \e$B$rJV$9$h$&$K$7$?!#\e(B
+
+1998-12-04  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl-summary-unread-message-hook \e$B$r\e(B
+         wl-summary-mark-as-read  () \e$B$NCf$G8F$V$h$&JQ99!#\e(B
+
+1998-12-04  \e$B2,ED\e(B \e$B7r0l\e(B <kokada@tamaru.kuee.kyoto-u.ac.jp>
+
+       * \e$BL$FI5-;v$,FI$^$l$?$H$-$K8F$P$l$k\e(B wl-summary-unread-message-hook
+         \e$B$rDI2C!#\e(B
+
+1998-12-03  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * folder mode \e$B$G%"!<%+%$%V%U%)%k%@$r\e(B check \e$B$7$F$bI=<($,99?7$5$l$J\e(B
+         \e$B$$$H$-$,$"$k$N$r=$@5!#\e(B
+
+1998-12-03  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * wl_nemacs \e$B%V%i%s%A$r:n@.!"\e(BNemacs \e$BBP1~3+;O!#\e(B
+       * smtp.el \e$B$r\e(B flim-1.12 \e$BIUB0$N\e(B smtp.el \e$B$HF~$l49$(!"\e(B
+         \e$BJQ99$5$l$?\e(B API \e$B$K9g$o$;$?\e(B
+         (smtp-do-bcc \e$B$N:o=|!"\e(Bsmtp-via-smtp \e$B$N0z?t$NJQ99\e(B)\e$B!#\e(B
+       * im-wl.el \e$B$G$bJQ?t\e(B wl-insert-message-id \e$B$,$^$k$C$-$jL5;k$5$l$F$$$?\e(B
+         \e$B$N$r=$@5!#\e(B
+       * wl-summary-prefetch-msg \e$B;~!"Bg$-$J%a%C%;!<%8$G%(%i!<$,$G$F$7$^$&\e(B
+         \e$B%(%i!<$r=$@5!#\e(B
+       * \e$BIQHK$K;H$o$l$F$$$?\e(B append \e$B$r\e(B nconc \e$B$KCV$-49$($k$3$H$G\e(B
+         multi \e$B%U%)%k%@$NF0:n$rA4HL$K9bB.2=!#\e(B
+
+1998-12-02  OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+           Hironori Fukuchi <nory@valis.co.jp>
+
+       * wl-ja.texi \e$B$N$$$/$D$+$N$"$d$^$j$r=$@5!#\e(B
+
+1998-12-02  Yuuichi Teranishi  <teranisi@kyrie.dq.isl.ntt.co.jp>
+
+       * alpha -> beta\e$B!#\e(B
+       * \e$B$3$l$^$G$N\e(B ChangeLog \e$B$r\e(B etc \e$B$K0\F0!#\e(B
diff --git a/etc/ChangeLog.3 b/etc/ChangeLog.3
new file mode 100644 (file)
index 0000000..57e218a
--- /dev/null
@@ -0,0 +1,2967 @@
+2000-03-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0 - "Overjoyed"
+
+2000-03-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-refile.el (wl-refile-guess-func-list): Fixed defvar.
+       (Pointed out by KOYAMA Tetsuji <koyama@hoge.org>)
+       * 1.1.0pre6 - "Overjoyed-pre6"
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       Fixed localnews definition problem.
+       (Pointed out by AOXI Tenghe <fuji0924@mbox.kyoto-inet.or.jp>
+       and others)
+
+2000-03-23  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * wl-summary.el (wl-summary-mode-menu-spec): Changed wl-draft
+       to wl-summary-write.
+       (wl-summary-msg-marked-as-target):
+       Renamed from wl-summary-msg-marked-as-temp.
+       * wl-thread.el (wl-thread-close-all): Renamed local variable.
+
+2000-03-22  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-refile.el (wl-refile-guess-func-list): New variable.
+       (wl-refile-guess): Use wl-refile-guess-func-list.
+
+2000-03-22  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el: Reduced byte compile warnings.
+       * wl-xmas.el,wl-mule.el,wl-nemacs.el (wl-make-modeline): Defined.
+       XEmacs shows plugged icon by default.
+       (Advised by Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>)
+       * wl-util.el (wl-make-modeline-subr): Renamed from wl-make-modeline.
+       * utils/bbdb-wl.el (bbdb-wl-update-record): Fixed sticky summary
+       problem.
+       (bbdb-wl-update-record, bbdb-wl-get-update-record):
+       Avoid raw buffer to be multibyte.
+       * wl-draft.el (wl-draft-reply): Likewise.
+       * 1.1.0pre5 - "Overjoyed-pre5"
+
+2000-03-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * NEWS.ja: New file.
+       * elmo-maildir.el (elmo-maildir-list-folders):
+       Bind elmo-have-link-count as nil.
+       (Advised by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * wl-summary.el (wl-summary-edit-addresses-subr): Downcase addresses.
+
+2000-03-18  TAKAHASHI Kaoru <nil@din.or.jp>
+
+       * NEWS: New file.
+
+2000-03-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-message.el (wl-message-follow-current-entity):
+       Refer original buffer.
+       (Pointed out by OKAZAKI Tetsurou <okazaki@be.to>)
+       * elmo-maildir.el (elmo-maildir-list-folders):
+       Check if directory is Maildir.
+       (Pointed out by <hermit@lei.homeip.net>)
+
+2000-03-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       Fixed space regexp.
+       * wl-summary.el (wl-summary-edit-addresses): Get address from original
+       buffer.
+       (wl-summary-prefetch): Don't bind wl-prefetch-threshold as nil.
+
+2000-03-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0pre4 - "Overjoyed-pre4"
+       * Fixed error messages in all files (don't finish message with ".")
+       * elmo/elmo-archive.el (elmo-archive-copy-msgs):
+       Don't use filename when same-number is non-nil in maildir.
+       * wl-expire.el (wl-expire-archive-get-folder):
+       Use elmo-replace-msgid-as-filename instead of elmo-safe-filename.
+       * wl-folder.el (wl-folder-goto-folder-subr): Set default as
+       wl-default-folder.
+       (Adviced by okada@opaopa.org (Kenichi OKADA))
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       Allow white space in folder name.
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id):
+       Use wl-thread-jump-to-msg when message was found in current folder.
+
+2000-03-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-summary-skip-mark-list): New variable.
+       * wl-summary.el (wl-summary-prefetch): Set wl-prefetch-threshold
+       nil only when interactive-p.
+       (Pointed out by Akihiro MOTOKI <motoki@ptl.abk.nec.co.jp>)
+       (wl-summary-exec-subr): Fixed mark counting bug.
+       (Pointed out by OKAZAKI Tetsurou <okazaki@be.to>)
+       (wl-summary-next, wl-summary-prev): Use wl-summary-skip-mark-list.
+       (wl-summary-move-cached-regex): defmacro->defun.
+       * etc/ja.Emacs: Update.
+       * elmo-imap4.el (elmo-imap4-search): Regard from-msgs.
+       * elmo-maildir.el (elmo-maildir-search): Fixed.
+       * mmelmo-imap4-1.el (mmelmo-imap4-parse-bodystructure-string):
+       Fixed literal parsing.
+
+2000-03-13  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-expire.el: Fixed problem of expiring in filter folder.
+       * wl-fldmgr.el: Inhibited newline character in folder name or petname.
+
+2000-03-12  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-fldmgr.el (wl-fldmgr-get-path-from-buffer):
+       Fixed problem when wl-desktop group is closed.
+
+2000-03-11  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-folder.el (wl-folder-mode-menu-spec): Updated.
+
+2000-03-08  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-vars.el (wl-score-files-dir): Renamed from
+       wl-score-files-directory.
+       * wl-score.el (wl-score-edit-file, wl-score-load-file,
+       wl-score-change-score-file): Ditto.
+
+2000-03-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-mime-charset): Set default value as x-ctext.
+
+2000-03-08  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-nntp.el (elmo-nntp-list-folders):
+       Fixed problem when root name is "".
+
+2000-03-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0pre3 - "Overjoyed-pre3"
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       Use local unread information.
+       * elmo2.el (elmo-delete-folder): Added maildir folder.
+       (elmo-move-msgs): Local unread information was not taken over.
+       * elmo-maildir.el (elmo-maildir-delete-folder): Rewrite.
+       * mmelmo.el (mime-parse-parameters-from-list):
+       Moved from mmelmo-imap4.el.
+       * wl-message.el (wl-mmelmo-message-redisplay):
+       Bind mime-display-header-hook as nil.
+       * wl-mime.el (wl-mime-display-message): Fixed SEMI version detection.
+       (wl-summary-burst): Don't refer mime-message-structure.
+       (wl-mime-entity-read-field): New alias/macro.
+       (wl-mime-combine-message/partial-pieces):
+       Use wl-mime-entity-read-field.
+       (mime-edit-user-agent-value):
+       Workaround for duplicated XEmacs beta version (for SEMI 1.13.4
+       or earlier).
+
+2000-03-06  katsuta@cced.mt.nec.co.jp
+
+       * elmo-util.el (elmo-buffer-field-condition-match):
+       Fix problem when std11-field-body returns nil.
+
+2000-03-04  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-prefetch-msg): Don't refer mark.
+
+2000-03-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-read-folder): Use default when "".
+       * wl-fldmgr.el, wl-folder.el, etc: Begin message with upcase character.
+       * wl-draft.el (wl-draft-yank-original):
+       Fix problem in citation from kill-ring.
+       * mmelmo-1.el (insert-header):
+       Use mmelmo-insert-sorted-header-from-buffer.
+       (insert-text-content): New method.
+       Add (run-hooks 'mmelmo-entity-content-inserted-hook).
+       * utils/bbdb-wl.el (bbdb-wl-show-bbdb-buffer): New function.
+       Added to wl-summary-toggle-disp-folder-message-resumed-hook.
+       * 1.1.0pre2 - "Overjoyed-pre2"
+       * elmo-maildir.el (elmo-maildir-sequence-number-internal): New variable.
+       (elmo-maildir-make-unique-string): Definition for v19.
+       Don't use elmo-maildir-sequence-number-internal.
+       (elmo-maildir-temporal-filename): Don't wait 2 seconds.
+       (toplevel): Added (eval-when-compile (require 'cl).
+       * wl-summary.el (wl-summary-buffer-number-column-detect):
+       Don't use return value of re-search-forward.
+
+2000-03-06  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-pop3.el (elmo-pop3-port-label): Fixed typo (port->ssl).
+       * elmo-nntp.el (elmo-nntp-sync-number-alist):
+       Fixed bug that unread number sometimes becomes negative.
+
+2000-03-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-switch-to-clone-buffer):
+       Take over wl-summary-buffer-number-column,
+       wl-summary-buffer-number-regexp.
+       (wl-summary-write): New command. Binded to 'w'.
+       * wl-draft.el (wl-draft): Added behaviors for wl-summary-write.
+
+2000-03-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache.el (elmo-cache-list-folder-subr): Ignore directories.
+       * wl-summary.el (wl-summary-insert-line): New function.
+       (wl-summary-insert-summary, wl-summary-update-thread):
+       Use `wl-summary-insert-line'.
+       * wl-thread.el (wl-thread-update-line-on-buffer-sub):
+       Ditto.
+       * WL-MK (wl-info-lang): Install each element when listp.
+       * elmo/elmo-maildir.el (elmo-maildir-append-msg):
+       Use same name with tmp in new.
+       (elmo-maildir-list-folders): Contain root.
+
+2000-03-04  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-buffer-set-folder): Deleted column setting.
+       (wl-summary-goto-folder-subr): Dynamic detecting of column number.
+       (wl-summary-target-mark-forward): Fixed order of forward.
+       (wl-summary-cleanup-temp-marks): Delete target marks.
+
+2000-02-29  Ryota Nishikawa <nisikawa@nisikawa.org>
+
+       * wl-draft.el (wl-draft-send-mail-with-pop-before-smtp):
+       Workaround for error which occurs in offline status.
+
+2000-03-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-thread.el (wl-thread-update-children-number):
+       Renamed from wl-thread-update-children-number.
+       New hook, wl-thread-update-children-number-hook.
+
+2000-03-04  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       wl-folder.el (wl-folder-sync-entity,
+       wl-folder-mark-as-read-all-entity,
+       wl-folder-prefetch-entity): Fixed highlighing in sticky
+       summary.
+
+2000-03-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo2.el (elmo-move-msgs): Skip saving unread info when target is
+       'null.
+       * elmo-maildir.el (elmo-maildir-make-unique-string):
+       Renamed from elmo-maildir-create-unique-string.
+       (Adviced by OKAZAKI Tetsurou <okazaki@be.to>)
+       * 1.1.0 pre1 - "Overjoyed-pre1"
+
+2000-03-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft-reply-buffer): New buffer local variable.
+       (wl-draft-reply): Set `wl-draft-reply-buffer'.
+       (wl-draft-config-exec): Refer `wl-draft-reply-buffer'.
+       (wl-draft-reply<var>): Eliminated.
+       * WL-MK, WL-CFG (wl-info-lang): New variable.
+       * wl.texi: New file.
+       * Makefile, WL-MK, WL-CFG: ELISPDIR->LISPDIR.
+       (Adviced by TAKAHASHI Kaoru <kaoru@kaisei.org>)
+       * elmo-maildir.el: Rewrite.
+       * elmo-util.el, elmo-msgdb.el, elmo-vars.el: Define
+       maildir's spec as  '.'.
+       * wl-folder.el, wl-summary.el, elmo-pop3.el, etc:
+       Upcase messages' first character.
+       * elmo-vars.el (elmo-maildir-folder-path): New variable.
+       * elmo-internal.el (elmo-internal-list-folders): Return
+       'cache and 'mark in root.
+
+2000-03-02  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-nntp.el: Fixed starttls.
+       * elmo-nntp.el, elmo-imap4.el:
+       Fixed a bug that elmo-list-folders deletes "!".
+
+2000-03-01  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-score.el: Use "Invalid" instead of "Illegal" in error
+       message.
+
+2000-03-01  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-refile-subr): Adjust target name for cache.
+       * elmo-nntp.el: starttls feature. (experimental)
+
+2000-03-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache2.el: Merged to elmo-cache.el.
+       * elmo-internal.el, elmo-util.el, elmo-msgdb.el:
+       Tread 'cache' as a part of internal.
+
+2000-03-01  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-cache2.el: New backend 'cache'.
+
+2000-02-29  IMAI Takeshi <take-i@ceres.dti.ne.jp>
+
+       * wl-expire.el (wl-folder-expire-entity): Fixed highlighing in sticky
+       summary.
+
+2000-02-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo2.el (elmo-move-msgs): Take over unread status.
+       Added `unread-marks' argument.
+       * wl-summary.el (wl-summary-exec):
+       Take over unread marks to elmo-move-msgs.
+       (wl-summary-edit-petname): Now To and Cc are also candidate.
+       (wl-summary-edit-addresses): Renamed from `wl-summary-edit-petname'.
+       (wl-summary-edit-petname): Eliminated.
+       (wl-summary-mark-as-unread): Consider cache status.
+       * wl-vars.el (wl-summary-toggle-disp-folder-message-resumed-hook)
+       (wl-summary-line-inserted-hook): New hook.
+       (wl-summary-print-destination):
+       Put 'wl-summary-destination property.
+       * wl-thread.el, wl-summary.el: Call wl-summary-line-inserted-hook.
+       * utils/bbdb-wl.el:
+       Popup in wl-summary-toggle-disp-folder-message-resumed-hook.
+
+2000-02-28  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Scoring in wl-folder-sync-current-entity.
+       * wl-summary-buffer-disp-msg sometimes wrong in sticky summary.
+
+2000-02-25  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-message.el (wl-message-refer-article-or-url):
+       Don't call wl-summary-redisplay
+       when wl-summary-jump-to-msg-by-message-id failed.
+       * wl-vars.el (wl-local-domain): Changed initial setting.
+       * wl.el (wl-check-environment): Regard wl-local-domain as local domain
+       without hostname.
+       * wl-util.el (wl-draft-make-message-id-string): Ditto.
+
+2000-02-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-expire.el (wl-folder-expire-entity): Call wl-summary-save-status.
+
+2000-02-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-draft-send-hook): New hook.
+       * wl-draft.el (wl-draft-send): Call wl-draft-send-hook.
+       (Demand from Kenichi Sato <ksato@sonycom.com>)
+
+2000-02-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache.el (elmo-cache-save):
+       Added (condition-case), a workaround for long file name.
+       (Report by Mikya Tani <wani@mx2.nisiq.net>)
+       * wl-draft.el: Consider FCC IMAP's modified utf7.
+       (Pointed out by HIRATA Naoto <hirata-naoto@sannet.ne.jp>)
+
+2000-02-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-address.el (wl-address-header-extract-address): Don't
+       regard '\n' as a e-mail address character.
+       (Pointed out by
+       Tomotaka SUWA <cooper@saitama.fujimic.fujisankei-g.co.jp>)
+       * mmelmo.el (mmelmo-header-max-column): New variable.
+       (Demand by Kenichi Sato <ksato@sonycom.com>)
+       (mmelmo-header-inserted-hook): New hook.
+       (mmelmo-entity-content-inserted-hook): New hook.
+       * mmelmo-2.el (mime-insert-text-content): New entity method.
+       Call mmelmo-entity-content-inserted-hook.
+       * mmelmo.el (mmelmo-insert-sorted-header-from-buffer):
+       Moved from elmo-util.el and use `mmelmo-header-max-column'.
+       Call mmelmo-header-inserted-hook.
+
+2000-02-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-message.el (wl-mmelmo-message-redisplay):
+       Use wl-mime-display-message.
+       (Pointed out by Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+       * wl-mime.el (wl-mime-display-message): New macro/alias.
+       * 2.2.18 - "Please Forgive Me"
+       * wl-summary.el (wl-summary-move-cached-regex):
+       Added ignoring expression of 'D' mark for unplugged status.
+       * elmo-msgdb.el (elmo-msgdb-expand-path): Downcase IMAP4's INBOX
+       (Pointed out by Takeshi Chiba <chiba@d3.bs1.fc.nec.co.jp>).
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       Changed expression of detecting access group for '}'.
+       * wl-message.el (wl-mmelmo-message-redisplay):
+       Pass major-mode to mime-display-message.
+
+2000-02-18  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-demo.el: Fixed for Emacs 21.
+
+2000-02-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mime-entity-buffer): Don't change current buffer.
+       Fetch skipped part.
+       * mmelmo-imap4-2.el (mime-write-entity-content):
+       New method. Fetch skipped part.
+       * mmelmo-imap4-2.el (mmelmo-imap4-fetched):
+       New buffer local variable.
+       * elmo-imap4.el (elmo-imap4-server-namespace):
+       New buffer local variable.
+       (elmo-imap4-open-connection):
+       Set elmo-imap4-server-namespace.
+       (elmo-imap4-parse-namespace): New function.
+       (elmo-imap4-process-folder-list):
+       Use elmo-imap4-server-namespace.
+       (elmo-imap4-extra-namespace-alist): New variable.
+       * wl-util.el (wl-string-member, wl-string-match-member,
+       wl-string-delete-match, wl-string-match-assoc, wl-string-rassoc):
+       Renamed to elmo-* and define as defalias.
+
+2000-02-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * bbdb-wl.el: Added wl-summary-toggle-disp-folder-off-hook's setting.
+
+2000-02-16  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-demo.el: Caluculate frame's font parameter.
+
+2000-02-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-toggle-disp-folder): New implementation.
+       (Pointed out by Shigeru OKUMURA <sokumura@jaist.ac.jp>)
+       * wl-draft.el (wl-draft-insert-x-face-field-here): Delete white spaces.
+       (Pointed out by Akihiro MOTOKI <mokkun@iname.com>)
+
+2000-02-12  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo/elmo-localdir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       Pass value of `current-time-zone' to `timezone-make-date-arpa-standard'.
+
+2000-02-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo/mmelmo-imap4-2.el (mmelmo-imap4-node-id-to-string):
+       "header" -> "0".
+       * elmo/mmelmo-imap4-1.el (mmelmo-imap4-node-id-to-string):
+       Ditto.
+       (Pointed out by TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>)
+       * wl-message.el (wl-message-follow-current-entity): wl-draft-reply
+       pass summary buffer to `wl-draft-reply'.
+       * wl-summary.el (wl-summary-reply):
+       pass current-buffer to `wl-draft-reply'.
+       (wl-summary-msgdb-load-async): enclose mailbox with "".
+       * elmo-imap4.el: Ditto.
+
+2000-02-09  UENO Kazuaki <kazu@a-u.net>
+
+       * wl-draft.el (wl-draft-queue-flush): Use `elmo-dop-flush-confirm'.
+
+2000-02-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft): Changed initialization order.
+       (Adviced by Taiji.Can@atesoft.advantest.co.jp)
+
+2000-02-08  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-score.el (wl-summary-score-update-all-lines):
+       Consider folder type when putting read-uncached mark.
+
+2000-02-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-target-mark-prefetch): Fixed for
+       uncached message's mark.
+       (Pointed out by Hironori Fukuchi <nory@valis.co.jp>)
+       * wl-summary.el (wl-summary-target-mark-prefetch):
+       Display progress. Remain '*' marks if not prefetched.
+       * wl-dnd.el (start-drag): defined with static-cond.
+       * elmo2.el (elmo-buffer-cache-message): Fixed the bug of `Quit'ting
+       while reading.
+       * elmo-filter.el (elmo-filter-list-folder-important):
+       Don't call 'elmo-search'.
+       (Adviced by Akihiro MOTOKI <mokkun@iname.com>)
+
+2000-02-07  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-xmas.el (wl-highlight-folder-current-line):
+       Don't use set-extent-properties.
+
+       * wl-draft.el (wl-smtp-extension-bind): Fixed.
+
+2000-02-07  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo-util.el (elmo-buffer-field-condition-match):
+       Compare field value after `eword-decode-string'.
+
+2000-02-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-dnd.el: Eliminated byte-compile warnings.
+       (Pointed out by okada@opaopa.org (Kenichi OKADA).)
+       * utils/sasl/sha1.el, utils/sasl/md5-el.el,
+       utils/sasl/hex-util.el, utils/sasl/sha1-el.el: Update.
+       (Pointed out by okada@opaopa.org (Kenichi OKADA).)
+       * wl-vars.el (wl-demo-use-bitmap): Renamed to wl-demo-display-logo.
+       (wl-demo-display-logo): New variable.
+       * wl-demo.el: Use wl-demo-display-logo.
+
+2000-02-07  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-vars.el (wl-demo-use-bitmap): Changed initial value.
+
+2000-02-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.17 - "One Of Us"
+       * elmo-util.el (elmo-y-or-n-p): New function.
+       * elmo-vars.el (elmo-dop-flush-confirm): New variable.
+       * elmo-dop.el (elmo-dop-queue-flush): Use elmo-y-or-n-p,
+       elmo-dop-flush-confirm.
+       * elmo-imap4.el (elmo-delete-msgids): Display progress.
+       Call expunge once at last.
+
+2000-02-07  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-folder.el, wl-xmas.el: Display icons although a frame is opened
+       by XEmacsen invoked with -nw argument.
+
+2000-02-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-highlight.el (wl-highlight-summary-target-face): New face
+       (Renamed from ...-temp-face).
+       * wl-vars.el (wl-demo-use-bitmap): Moved from wl-demo.el.
+       Defined as defcustom. Initial value is
+       (module-installed-p 'bitmap).
+       * wl-demo.el (wl-demo-use-bitmap): Moved to wl-vars.el.
+       * elmo-vars.el: Require 'poe, eliminated bytecompiling warnings.
+       * wl-nemacs.el (buffer-disable-undo, rassoc, delete, string-to-number,
+       window-live-p, completing-read, accept-process-output,
+       get-buffer-window): Eliminated.
+
+2000-02-04  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-demo.el (wl-demo): Check wl-demo-use-bitmap at run-time.
+
+2000-02-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * INSTALL, INSTALL.ja: Changed tm-8's URL.
+       * utils/hmac -> utils/sasl.
+       * WL-ELS: HMAC->SASL.
+       * WL-MK: HMAC->SASL.
+
+2000-02-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-localdir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       Use `timezone-make-date-arpa-standard' instead of `format-time-string'.
+       * elmo-vars.el (elmo-time-format): Eliminated.
+
+2000-02-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-dop.el (elmo-dop-queue-flush): Added canceling process of
+       append-operations.
+       * wl-summary.el (wl-summary-refile-prev-destination,
+       wl-summary-copy-prev-destination): Fixed.
+       (Reported by IMAI Takeshi <take-i@ceres.dti.ne.jp>)
+
+2000-02-02  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-vars.el (wl-prefetch-confirm-threshold): Eliminated and separated
+       to `wl-prefetch-confirm' and `wl-prefetch-threshold'.
+       (wl-prefetch-confirm, wl-prefetch-threshold): New variable.
+       * wl-summary.el (wl-summary-prefetch-msg): Use wl-prefetch-confirm,
+       wl-prefetch-threshold.
+
+2000-02-02  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features): `smtp-authenticate-type' is changed
+       to symbol.
+
+2000-01-31  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-nntp.el (elmo-nntp-get-folders-info): Fixed.
+
+2000-01-31  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-demo.el: Display wl-logo.xpm in Emacs21.
+
+2000-01-30  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * INSTALL, INSTALL.ja: Fixed.
+
+2000-01-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * WL-ELS: Add elmo-database to ELMO-MODULES
+       if open-database is already defined.
+
+2000-01-30  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo-loacaldir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       If Date: field does not exist, get file's modified time.
+       * elmo-msgdb.el (elmo-msgdb-create-overview-from-buffer):
+       Added argument time.
+       * elmo-vars.el (elmo-time-format): New variable.
+
+2000-01-29  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id):
+       Added selecting NNTP server option.
+       (wl-summary-jump-to-msg-by-message-id-via-nntp)
+       Now server can be specified like "-:username@servername:8119!".
+       * elmo-nntp.el (elmo-nntp-folder-postfix): Added argument `ssl'.
+
+2000-01-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-vars.el (elmo-database-dl-module, elmo-database-dl-handle):
+       New variable.
+       (toplevel): if elmo-database-dl-handle is non-nil,
+       dynamic_call emacs_database_init.
+       (elmo-use-database): Set elmo-use-database when open-database
+       is bound.
+       * WL-ELS: If 'dynamic-link is bound, add elmo-database to ELMO-MODULES.
+
+2000-01-28  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-demo.el (wl-demo): Fix copyright information.
+
+2000-01-27  Takeshi Chiba <chiba@d3.bs1.fc.nec.co.jp>
+
+       * mmelmo-imap4-2.el ([luna]mime-entity-buffer):
+       section "0" -> "header".
+
+2000-01-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-node-id-to-string):
+       section "0" -> "header".
+       * mmelmo-imap4-1.el: Ditto.
+
+2000-01-26  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-imap4.el (elmo-imap4-create-folder):
+       UW imapd-4.7 cannot create new folder.
+
+2000-01-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-parse-bodystructure-string):
+       Retrieve BODYSTRUCTURE.
+       (mmelmo-imap4-parse-bodystructure-object):
+       Don't cause error when content-type subtype is NIL.
+       * mmelmo-imap4-1.el: Ditto.
+       * utils/hmac/unique-id.el: New file.
+       * WL-ELS (HMAC-MODULES): Added scram-md5, digest-md5, unique-id.
+       * wl-dnd.el (wl-dnd-drop-func): Fixed.
+       * 2.2.16 - "No Son Of Mine"
+
+2000-01-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-summary-reserve-mark-list): New variable.
+       * wl-summary.el: temp-mark -> target-mark changed name.
+       Use `wl-summary-reserve-mark-list' in mark commands.
+       * wl-score.el, wl-thread.el: Ditto.
+       * wl-folder.el (toplevel): require 'wl.
+
+2000-01-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mule.el, wl-xmas.el, wl-nemacs.el (wl-summary-format-date):
+       Moved to wl-summary.el.
+       * utils/hmac/lisp/sasl.el, utils/hmac/lisp/digest-md5.el,
+       utils/hmac/lisp/scram-md5.el: Update to latest SLIM.
+       * wl-fldmgr.el (wl-fldmgr-ext): Changed confirm message.
+       * doc/TODO.ja: Updated.
+
+2000-01-22  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * wl-folder.el (toplevel): Fixed menu.
+
+2000-01-21  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-imap4.el: Added DIGEST-MD5 authentication.
+       * elmo-pop3: Added CRAM-MD5, DIGEST-MD5, SCRAM-MD5 authentication.
+
+2000-01-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (toplevel): Changed binding position for
+       region commands.
+       (wl-summary-prefetch-region): Prefetch hided messages.
+       (Reported by OKAZAKI Tetsurou <okazaki@be.to>)
+       * elmo: Added argument no-see to append-msg, move-msgs.
+       * elmo-pipe: Specify 'no-see at elmo-msg-move.
+       * wl-folder.el (wl-folder-mimic-kill-buffer): New command.
+       (toplevel): Bind ` wl-folder-mimic-kill-buffer' to C-xk,
+       `wl-save' to C-xC-s.
+
+2000-01-19  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-nemacs.el (accept-process-output): New function.
+       * Makefile: Modified comment.
+
+2000-01-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-folder-identical-system-p): Don't treat
+       folders which have same mailbox name and different server
+       as identical folder.
+       (Pointed out by Tatsuya Matsui <t.matsui@rdc.east.ntt.co.jp>)
+       * wl-address.el (wl-complete-field-body-or-tab): Eliminated argument.
+
+2000-01-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el
+       (wl-prefetch-confirm-threshold, wl-cache-fetch-threshold):
+       New variables.
+       * wl-summary.el (wl-summary-prefetch-msg):
+       Use `wl-prefetch-confirm-threshold'.
+       (wl-cache-prefetch-message): Use `wl-cache-fetch-threshold'.
+
+2000-01-13  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-message.el
+       (wl-message-decide-backend, wl-normal-message-redisplay):
+       Force fetch if `wl-fetch-confirm-threshold' is nil.
+
+2000-01-11  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-draft.el (wl-draft-delete):
+       Conscious that `wl-draft-buffer-file-name' is nil.
+
+2000-01-11  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * wl-draft.el (wl-draft-save-and-exit):
+       Fix the bug that kills unexpected buffer.
+
+2000-01-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.15 - "More Than Words"
+
+2000-01-11  Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
+
+       * samples/ja/dot.folders, samples/en/dot.folders: Added description
+       about 'access group'.
+
+2000-01-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el, tm-wl.el (wl-draft-preview-message): Display all header.
+       * wl-summary.el (wl-summary-mode): Don't set tab-width.
+       (Pointed out by Yoshinari NOMURA <nom@csce.kyushu-u.ac.jp>)
+       (wl-summary-copy, wl-summary-refile): Inhibited copying to
+       `wl-draft-folder'.
+       (Pointed out by okada@opaopa.org (Kenichi OKADA))
+       (wl-summary-overview-entity-compare-by-date): Ignore error.
+       (Pointed out by MIZUHARA Bun <mizuhara@acm.org>)
+       * wl.el (wl-plugged-mode): Don't set inhibit-read-only.
+       (Pointed out by Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>)
+       * wl-vars.el (wl-draft-reedit-hook): New hook.
+       * wl-draft.el (wl-draft-save, wl-draft-mimic-kill-buffer):
+       New function.
+       (wl-draft): Don't use buffer names which are already used.
+       (wl-draft-reedit): run-hook `wl-draft-reedit-hook' instead of
+       `wl-mail-setup-hook'.
+       (Requirement by okada@opaopa.org (Kenichi OKADA))
+       * wl-xmas.el, wl-mule.el (wl-draft-key-setup):
+       Binded `wl-draft-save' to `C-xC-s', `wl-draft-mimic-kill-buffer'
+       to `C-xk'.
+       * wl-nemacs.el (wl-draft-overload-functions): Ditto.
+
+2000-01-09  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-mule.el, wl-util.el: Fix run time (require 'static).
+       * wl.el (wl-save): Add docstring.
+
+2000-01-08  Mito <mit@nines.nec.co.jp>
+
+       * wl-score.el (wl-score-guess-like-gnus): Enclosed with
+       (when (stringp fld-name)..).
+
+2000-01-08  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-config-info-operation): New function.
+       (wl-draft-delete, wl-draft-save-and-exit, wl-draft-reedit):
+       Use `wl-draft-config-info-operation'.
+
+2000-01-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-demo.el (toplevel): Eliminated warnings when bitmap is not
+       installed.
+       (wl-demo-use-bitmap): New variable.
+       * WL-CFG: Added example of setting wl-demo-use-bitmap to nil.
+       * wl-nemacs.el (toplevel): Quit timezone emulating (Assume APEL 10).
+       * wl-demo.el, wl-draft.el, wl-folder.el, wl-util.el,
+       wl-message.el, wl-summary.el (toplevel): set the return value of
+       make-local-variable.
+       (Adviced by Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>)
+
+2000-01-07  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features, wl-smtp-parse-extension): Fixed.
+
+2000-01-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-user-agent-compose): call wl-draft interactively.
+       (Pointed out by Atsushi Tada <tada@tworks.co.jp>)
+       * Makefile (EMACS): set default to `emacs'.
+       (XEMACS): New variable.
+       (package, install-package): Use $(XEMACS).
+       * 2.2.14 - "Layla"
+       * wl-summary.el (wl-summary-mode): Quit setting default-directory.
+       * wl-vars.el (wl-tmp-dir): set default as "~/tmp/"(cf. WL-ML 3735).
+
+2000-01-06  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features): New variable.
+       (wl-smtp-extension-bind): New macro.
+       * wl-summary.el (wl-summary-mode-map):
+       Binded `wl-summary-prev-page' to backspace.
+
+2000-01-06  Kentaro Yoshitomi <yositomi-wl@center.osaka-wu.ac.jp>
+
+       * elmo-maildir.el (elmo-maildir-create-folder):
+       Fixed a bug which occurs when directory ends with "/".
+
+2000-01-06  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-draft.el: sync up with SLIM's smtp.el.
+
+2000-01-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-util.el (wl-load-profile): Moved from wl.el.
+       * COPYING: New file (renamed from etc/copyright).
+       * wl-vars.el (wl-smtp-connection-type): Renamed from wl-smtp-use-tls.
+       * wl-draft.el (wl-draft-send-mail-with-smtp):
+       Bind smtp-connection-type with wl-smtp-connection-type.
+       (wl-draft-queue-save-filename): fixed typo.
+       * wl-vars.el (wl-cs-*): Changed definitions for Nemacs.
+       * all files: Updated copyright information and checkdoc fix.
+
+2000-01-05  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-ja.texi: Add copyright and permissions text.
+
+2000-01-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-score.el (wl-summary-score-update-all-lines):
+       Mark as read-uncached when marked by scoring.
+       * elmo-util.el (elmo-imap4-get-spec):
+       Fixed a bug which occurs when elmo-default-imap4-ssl is t.
+       (Reported by Taro FUNAKI <taro@bear.ecl.ntt.co.jp>)
+       * tm-wl.el (wl-draft-yank-current-message-entity):
+       Fixed binding of mime-viewer/following-method-alist.
+       (Reported by Taiji.Can@atesoft.advantest.co.jp)
+
+2000-01-04  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-message.el (wl-message-decode):
+       Decode with wl-cs-autoconv when 'no-mime.
+
+1999-12-31  Kentaro Yoshitomi <yositomi-wl@center.osaka-wu.ac.jp>
+
+       * elmo-maildir.el, elmo-util.el:
+       Implemented create, delete and copy method of Maildir.
+
+1999-12-29  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft): Call `wl-load-profile'.
+       (Pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * elmo-imap4.el (elmo-imap4-make-number-set-list): New function.
+       (elmo-imap4-msgdb-create): Use `elmo-imap4-make-number-set-list'.
+       (elmo-imap4-mark-set-on-msgs): Ditto.
+
+1999-12-11  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-get-sync-range):
+       Don't claim unplugged in pop3.
+
+1999-12-28  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * elmo-msgdb.el (elmo-msgdb-expand-path): fixed wrong expansion.
+
+1999-12-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.13 - "Keep The Faith"
+
+1999-12-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-network-get-spec): New variable.
+       (elmo-*-get-spec): Rewrote so that 'user' can contain '@'.
+       (okada@opaopa.org (Kenichi OKADA)'s demand.)
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       Corresponded to Emacsen that cannot treat float.
+       * elmo-pop3.el (elmo-pop3-get-connection): Changed argument.
+       * check-paren fix.
+
+1999-12-21  Koga Masato <mkoga@mail7.dddd.ne.jp>
+
+       * wl-draft.el (wl-draft-reedit): Obey to `wl-draft-use-frame'.
+
+1999-12-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-vars.el (elmo-imap4-use-modified-utf7): New variable.
+
+1999-12-20  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el, tm-wl.el (wl-mime-save-content): Remember last
+       saved directory.
+       * wl.el (wl-save): New command. Save current folder status.
+       (A demand from JINMEI Tatuya <jinmei@isl.rdc.toshiba.co.jp>.)
+       * wl-folder.el (wl-folder-mode-map): Binded `wl-save' to "\M-s".
+       * elmo-util.el (elmo-imap4-get-spec): Use `utf7-encode-string'.
+       * elmo-imap4.el (elmo-imap4-list-folders): Use `utf7-decode-string'.
+       * elmo/utf7.el: New file.
+
+1999-12-20  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * elmo-imap4.el (elmo-imap4-open-connection): Fixed starttls.
+       * wl-draft.el: featurep->boundp.
+
+1999-12-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-search-mime-charset): New variable.
+       * wl-summary.el (wl-summary-pick): Use `wl-search-mime-charset'.
+
+1999-12-16  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * WL-MK (wl-texinfo-format): Add `@direntry' emulation for
+       old texinfmt.el.
+
+1999-12-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft-config-exec): Re-highlight draft.
+       (Pointed out by Motomichi Matsuzaki <mzaki@e-mail.ne.jp>)
+       * wl-summary.el (toplevel): Changed key bind order of 
+       `wl-summary-temp-mark-region'.
+       (okada@opaopa.org (Kenichi OKADA)'s report.)
+
+1999-12-16  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-mark-as-important-region,
+       wl-summary-mark-as-unread-region,
+       wl-thread-mark-as-important,
+       wl-thread-mark-as-unread,
+       wl-summary-temp-mark-mark-as-important,
+       wl-summary-temp-mark-mark-as-unread): New functions.
+       (wl-summary-save-region): Eliminated bogus process.
+       (wl-summary-prefetch-region): Use `elmo-cache-exists-p'
+       instead of `wl-summary-message-uncached-marks'.
+       * wl-thread.el (wl-thread-get-children-msgs-uncached): Ditto.
+
+1999-12-14  okada@opaopa.org (Kenichi OKADA)
+
+       * Changed behavior of TLS in pop and imap 
+       when server does not provide TLS feature.
+
+1999-12-14  TSUMURA Tomoaki <tsumura@notredame.ac.jp>
+
+       * dot.wl: Added an example setting;
+       wl-default-folder shows ML-name and ML-count and
+       other folder shows ML-count.
+
+1999-12-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-parse-bodystructure-string):
+       Fix: Parse fails if JIS filename is contained.
+       * wl-summary.el (wl-summary-copy): Fixed bug.
+       (Reported by Hiroshi Watanabe <whoami@din.or.jp>)
+
+1999-12-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-goto-folder-subr): Changed timing
+       to be sticky (Adviced by Masahiro MURATA <muse@ba2.so-net.ne.jp>).
+       * wl-vars.el (wl-folder-sync-range-alist): 
+       Changed range of draft and queue folder.
+
+1999-12-11  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-get-sync-range):
+       Don't claim unplugged in pop3.
+
+1999-12-10  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Eliminated defalias for elmo function in wl modules.
+
+1999-12-07  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-nntp.el: Changed behavior when
+       elmo-nntp-max-number-precedes-list-active is `t' and
+       list-active is not provided.
+
+1999-12-07  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * INSTALL.ja: Fixed.
+       * wl-summary.el (wl-summary-always-sticky-folder-p): New macro.
+       (wl-summary-goto-folder-subr): Use `wl-summary-always-sticky-folder-p'.
+
+1999-12-07  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-vars.el (wl-summary-always-sticky-folder-list): New variable.
+       * wl-summary.el (wl-summary-stick): New optional argument.
+       (wl-summary-goto-folder-subr): Folders that match
+       `wl-summary-always-sticky-folder-list' stick automatically.
+
+1999-12-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * INSTALL.ja: Changed to ISO-2022-JP.
+       * wl-draft.el (wl-draft-send-mail-with-smtp): 
+       Fixed binding of (default-)?case-fold-search.
+       (Reported by Atsushi Tada <tada@tworks.co.jp>, <tao@pfu.co.jp>, etc.)
+       (wl-draft-send): Don't use `with-current-buffer'.
+       * 2.2.12 - "Joyride"
+
+1999-12-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * etc/icons/wl-logo.xbm: Christmas version.
+
+1999-12-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el (elmo-imap4-parse-overview-string):
+       Fix: Cannot parse number when elmo-imap4-use-uid is nil.
+       * utils/hmac/scram-md5.el, utils/hmac/hmac-util.el: Removed.
+       * wl-summary.el (wl-summary-mark-as-unread):
+       Fixed wrong-type-argument error.
+       * wl-folder.el (wl-folder-empty-trash):
+       Fix: Summary information is incleased everytime.
+       (Reported by OKAZAKI Tetsurou <okazaki@be.to>)
+
+1999-12-07  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-condig-exec):
+       Set wl-draft-config-exec-flag as nil only if wl-draft-config-alist
+       was applied.
+
+1999-12-06  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * WL-ELS (HMAC-MODULES): Updated.
+
+1999-12-06  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * INSTALL: New file.
+
+1999-12-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       Fix: filter does not work correctly.
+       (Reported by Kazuyoshi Mii <mii@isl.ntt.co.jp>)
+       * 2.2.11 - "Iris"
+       * utils/hmac/elisp/*.el: Sync up with slim-1.13.4
+       * elmo-imap4.el
+       (elmo-imap4-open-connection): Use `sasl-cram-md5' for cram-md5.
+       (toplevel): (require 'sasl) instead of (require 'hmac-md5).
+       Eliminated eval-when-compile.
+
+1999-12-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-mark-as-read):
+       Avoid marking messages which is not in msgdb.
+       * wl-summary.el (wl-summary-pick):
+       Notify if no message was picked from msgdb.
+
+1999-12-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-msgdb.el (elmo-msgdb-overview-get-parent-entity):
+       Changed argument.
+       * wl-vars.el (wl-smtp-posting-server): Set default value as nil.
+       (Adviced by okada@opaopa.org (Kenichi OKADA))
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       downcase extra-field name.
+       (Pointed out by Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp>)
+       * elmo-util.el (elmo-collect-field(-from-string)?):
+       Argument `downcase-field-name' is added.
+
+1999-12-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-folder.el (wl-folder-empty-trash):
+       Fix: Summary information is incleased everytime.
+
+1999-12-03  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * wl-summary.el (wl-summary-default-from): Newsgroup name is not
+       displayed.
+
+1999-12-03  TAKAHASHI Kaoru <nil@din.or.jp>
+
+       * INSTALL.ja: New file.
+       * wl-summary.el (wl-summary-reedit): When reedit draft
+       for news arcticle, don't add To: header.
+
+1999-12-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-mime-string): Enclose with elmo-set-work-buf.
+       (Pointed out by Mikiya Tani <m-tani@hml.cl.nec.co.jp>)
+       * etc/icons/wl-logo.xpm: Christmas version.
+       * elmo-imap4.el (elmo-imap4-make-attributes-object):
+       Nemacs causes error in read.
+       * elmo-dop.el (elmo-dop-list-folder): correspond to pipe feature.
+       (Pointed out by OKAZAKI Tetsurou <okazaki@be.to>)
+
+1999-12-03  sen_ml@eccosys.com
+
+       * utils/wl-mailto.el: 0.5.
+
+1999-12-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-1.el: eliminated buffer read only error.
+       * wl-mime.el, tm-wl.el: Changed key bind of wl-draft-preview-message.
+       (Based of the report by Makoto.Nakagawa@jp.compaq.com)
+       * utils/ssl.el: Sync up to newest version.
+       (Adviced by okada@opaopa.org (Kenichi OKADA))
+       * elmo-util.el (elmo-mime-string, elmo-decode-mime-charset-string):
+       New function.
+       * elmo-imap4.el: FETCH analyzing module is replaced.
+
+1999-12-02  Hironori Fukuchi <nory@valis.co.jp>
+
+       * wl-xmas.el: If (featurep 'dragdrop) is nil,
+       wl-dnd-set-drop-target causes error.
+
+1999-12-02  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-util.el: encolsed (require 'starttld) by condition-case.
+
+1999-12-01  okada@opaopa.org (Kenichi OKADA)
+
+       * Fix: Error occurs when wl-smtp-posting-user is nil in smtp auth.
+       * Fixed an error which occurs when nntp port number is specified.
+
+1999-11-27  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-reedit): eliminated judgement by
+       `(interactive-p)' because it is not interactive.
+       * New command: wl-fldmgr-delete.
+       * Rename: wl-fldmgr-rename-group -> wl-fldmgr-rename.
+       * New function: elmo-folder-creatable-p.
+       * Create directory when `#mh' type folder is created
+         in IMAP4 folder.
+       * wl-folder-check-one-entity creates folder if it does't exist.
+       * New macro: wl-folder-clear-entity-info.
+
+1999-11-25  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-message.el (wl-message-narrow-to-page): Fixed
+       `beginning-of-buffer' error occurs, when read "^L\n^L"
+       inclueded message.
+
+1999-11-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-mode): Eliminated argument.
+       * wl-address.el (wl-address-petname-add-or-change):
+       Fix: When there's no newline character in the last line of
+       `.addresses', wrong entry is added.
+       * elmo-imap4-[12].el (mmelmo-imap4-parse-bodystructure-entity):
+       Use mime-parse-parameters-from-list.
+
+1999-11-24  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * x-face-xmas-mew-display-x-face -> x-face-xmas-wl-display-x-face
+
+1999-11-22  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-vars.el (wl-smtp-authenticate-type, wl-smtp-use-tls):
+       New variable.
+       * wl-draft.el (wl-draft-send-mail-with-smtp):
+       Added SMTP TLS feature.
+
+1999-11-21  okada@opaopa.org (Kenichi OKADA)
+
+       * When wl-summary-jump-to-msg-internal is called via
+       wl-summary-jump-to-msg-by-message-id-via-nntp,
+       `scan-type' becomes `update'.
+
+1999-11-22  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * elmo-imap4.el, elmo-pop3.el: Added STARTTLS feature.
+
+1999-11-20  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-send-mail-with-smtp):
+       Bind process-connection-type nil.
+
+1999-11-20  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-util.el (elmo-open-network-stream):
+       Bind process-connection-type nil.
+
+1999-11-20  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * Fixed an error when an important message is marked-as-important
+       by scoring, it disappeared.
+
+1999-11-19  Hironori Fukuchi <nory@valis.co.jp>
+
+       * tm-wl.el: fixed typo.
+
+1999-11-18  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * Signal an error when no message is displayed
+       at wl-draft-insert-message.
+
+1999-11-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el: New variable wl-summary-showto-folder-regexp.
+       * wl-summary.el (wl-summary-default-from):
+       renamed from my-wl-summary-from-func-petname in sample/../dot.wl
+       (adviced from Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * wl-summary.el (wl-summary-simple-from): wl-summary-default-from
+       renamed.
+
+1999-11-17  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-message.el (wl-message-get-buffer-create):
+       Fixed an error which occurs when sticky message is displayed.
+
+1999-11-17  sen_ml@eccosys.com
+
+       * wl-mailto.el: 0.5-pre1.
+
+1999-11-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-delete-cr-get-content-type):
+       If Content-Type does not exist, return t.
+       * 2.2.9 - "Gonna Make You Sweat"
+
+1999-11-15  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-util.el (wl-unique-id): Don't use current-time and timezone.
+
+1999-11-14  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el, wl-summary.el: Set vaiable wl-draft-reply t in reply,
+       wl-draft-forward t in forward.
+       * wl-folder.el, wl.el: Make wl-make-plugged-alist only when
+       wl-folder made folder list.
+
+1999-11-14  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-pipe.el (elmo-pipe-use-cache-p): Implemented.
+       * elmo2.el (elmo-folder-number-get-spec): Fixed.
+
+1999-11-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el: insert-mail is implemented.
+       * If 'a' is pushed on MIME button, its part is cited in draft.
+       * wl-user-agent.el: Removed.
+       * wl-draft.el: Merged wl-user-agent.el.
+       * wl-mime.el, tm-wl.el: Rearranged API to MIME modules.
+
+1999-11-12  okada@opaopa.org (Kenichi OKADA)
+
+       * Fix: elmo-imap4.el: If folder does not exist,
+       wl-folder-check-current-entity fails.
+       * wl-draft.el: wl-draft-config-list, wl-template-alist can specify
+       `header', `header-file'.
+
+1999-11-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-util.el (wl-draft-make-message-id-string, wl-unique-id,
+       wl-number-base36): New functions.
+       (wl-unique-id-char): New internal variable.
+
+       * wl-mule.el (wl-draft-make-message-id-string): Remove.
+       * wl-nemacs.el (wl-draft-make-message-id-string): Remove.
+       * wl-xmas.el (wl-draft-make-message-id-string): Remove.
+
+       * wl-draft.el (wl-draft-send-mail-with-smtp): Funcall `smtp-server'
+       if it is a function; leave the handling of Resent-* fields to
+       `smtp'.
+
+1999-11-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft (wl-draft-get-fcc-list): Create folder when FCC contains
+       new folder.
+       * Rename: wl-draft-config-body-goto-{top|bottom}
+       -> wl-draft-body-goto-{top|bottom}
+       * Rename: wl-summary-confirm-folder-existence ->
+       wl-folder-confirm-existence.
+       (Adviced by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * Rename: wl-mime-edit-preview-message-hook
+       -> wl-draft-preview-message-hook
+       * elmo-nntp.el (elmo-nntp-string-to-vector): Eliminated.
+       * elmo-util.el (elmo-tokenize-string): Eliminated.
+       Replaced with split-string
+       * wl-highlight.el: New face, wl-highlight-logo-face for logo.
+
+1999-11-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-demo.el: Corresponded to bitmap-mule.
+       * wl-logo.xbm: New file.
+       * elmo-nntp.el (elmo-nntp-string-to-vector): Unlimit the length of
+       vector.
+       (elmo-nntp-parse-overview-string): Don't specify the 2nd arg of
+       `elmo-nntp-string-to-vector'.
+
+1999-11-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el: Searching fails if Message-ID contains '%'.
+       (Adviced by OKAZAKI Tetsurou <okazaki@be.to>)
+       * wl-message.el, mmelmo-[12].el: Rearranged read-only setting.
+       * Rename: wl-draft-save-and-hide -> wl-draft-save-and-exit.
+         Binded to C-c C-z.
+
+1999-11-11  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * wl-summary.el (wl-summary-temp-mark-forward):
+       Enclose as multipart/digest if multiple messages are included.
+
+1999-11-11  okada@opaopa.org (Kenichi OKADA)
+
+       * New variable wl-nntp-posting-port, wl-nntp-posting-ssl.
+       wl-nntp-posting-{user,server,port,ssl} corresponds to
+       elmo-default-nntp-{user,server,port,ssl}.
+       * Set the initial value of wl-nntp-posting-* as nil.
+       If they are nil, use elmo-default-nntp-* value.
+       * utils/bbdb-wl.el: If bbdb-use-pop-up is nil, error occurs.
+       * wl-draft.el: New function wl-draft-save-and-hide.
+
+1999-11-10  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-demo.el: calculate the displayed position of wl-logo.xpm.
+
+1999-11-10  Tsutomu Okada <okada@furuno.co.jp>
+
+       * wl-message.el (wl-message-refer-article-or-url):
+       Not to move cursor to message buffer with mouse-button-2.
+
+1999-11-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-set-message-buffer-or-redisplay):
+       Sticky Message sometimes provides wrong message.
+       (Reported by Mito <mit@nines.nec.co.jp>)
+       * wl-util.el (wl-string): alias to elmo-string.
+       * elmo-util.el (elmo-string): New function.
+       * New variable: wl-smtp-posting-port.
+       * Binded wl-summary-resend-bounced-mail to "\eE".
+
+1999-11-10  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * WL-ELS: fixed typo.
+
+1999-11-10  kurati@bigfoot.com
+
+       * When new folder is created, add it to the completion candidate.
+       * FCC: If new folder is specified, confirm to create it.
+       * auto-refile: If new folder is specified, confirm to create it.
+
+1999-11-10  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * wl-summary.el (wl-summary-resend-message,
+       wl-summary-resend-bounced-mail): New command.
+       * wl-draft.el (wl-draft-dispatch-message): Dont send via nntp
+       if dispatched message includes Resent-to header.
+
+1999-11-09  okada@opaopa.org (Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-jump-to-msg-internal): message is not
+       displayed in some cases.
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id-via-nntp):
+       If there are multiple newsgroup candidates,
+       newsgroup in the wl-folder-newsgroups-hashtb is preceded.
+
+1999-11-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.8 - "Free As A Bird"
+
+1999-11-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: wl-draft.el (wl-draft-send): C-cC-s becomes insert-signature
+       after sending. (Reported by Akihiro MOTOKI <motoki@ptl.abk.nec.co.jp>)
+       * WL-MK: (fset 'file-executable-p 'file-exists-p) for Nemacs.
+       * WL-MK, WL-CFG: Changed default value of WL_PREFIX and ELMO_PREFIX
+       to "wl".
+       * New variable: wl-user-mail-address-list.
+       * New function: wl-address-user-mail-address-p
+       Judge whether an address is user's or not using
+       wl-user-mail-address-list and wl-from.
+       * wl-summary.el (wl-summary-cancel-message,
+       wl-summary-supersedes-message): Use wl-address-user-mail-address-p
+       to judge whether an address is user's or not.
+       (Based on the changes by okada@opaopa.org (Kenichi OKADA))
+       * wl-refile.el (wl-refile-learn, wl-refile-guess-by-history): Ditto.
+       * wl-draft.el (wl-draft-make-mail-followup-to, wl-draft-reply
+       wl-draft-delete-myself-from-cc): Ditto.
+       * elmo-filter.el (elmo-filter-list-folder-unread,
+       elmo-filter-list-folder-important): filtering was not valid.
+       (Reported by Kazuyoshi Mii <mii@isl.ntt.co.jp>)
+
+1999-11-08  okada@opaopa.org (Kenichi OKADA)
+
+       * Altered the initialization of POP-before-SMTP variables.
+
+1999-11-07  okada@opaopa.org (Kenichi OKADA)
+
+       * elmo-nntp.el: Use `list' if `list active' was in vain.
+
+1999-11-07  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Eliminated wl-draft-prepared-confi-alist and unified with
+         wl-draft-config-alist.
+       * Take over local variables in wl-template-select.
+       * Process Fcc after the message sending is finished.
+       * Changed from user-mail-address to wl-envelope-from in
+       wl-draft-queue-save-variables.
+       * Fix: An error occurs in wl-draft-insert-from-field when
+       user-mail-address is nil.
+
+1999-11-06  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * Display mode map by describe-mode.
+
+1999-11-06  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-folder.el (wl-folder-mode-map): Change key bind of
+       wl-fldmgr-copy-region.
+
+1999-11-06  Hironori Fukuchi <nory@valis.co.jp>
+
+       * wl-summary.el (wl-summary-stick): parenthesis position is invalid.
+
+1999-11-06  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * utils/wl-user-agent.el: altered to unify the behavior with
+       sendmail-user-agent.
+
+1999-11-06  sen_ml@eccosys.com
+
+       * utils/wl-user-agent.el: 0.5.
+
+1999-11-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el: Rearranged all modules.
+       * elmo-imap4.el: New variable `elmo-imap4-debug'.
+       Non-nil forces debug information appair on "*IMAP4 DEBUG*" buffer.
+       * elmo-imap4.el, elmo-pop3.el, elmo-nntp.el:
+       Number of times of copying entire message is suppressed.
+       * elmo-imap4.el: Lock the process until the response is returned from
+       server.
+       * wl-summary.el: Auto refile failes if wl-refile-rule-alist is nil.
+       * WL-MK: install-package does not install info.
+       (Reported by "MATSUBAYASHI 'Shaolin' Kohji"
+       <shaolin@rins.st.ryukoku.ac.jp>)
+       * elmo-cache.el (elmo-cache-search): Corresponded to partial caching.
+       (Reported by Yasuo OKABE <okabe@i.kyoto-u.ac.jp>)
+
+1999-11-04  okada@opaopa.org (Kenichi OKADA)
+
+       * Rearranged POP-before-SMTP variables.
+       * New variable: elmo-default-pop3-user, wl-pop-before-smtp-user,
+       wl-pop-before-smtp-server, wl-pop-before-smtp-port,
+       wl-pop-before-smtp-ssl, wl-pop-before-smtp-authenticate-type.
+       * elmo-pop-before-smtp-* -> wl-pop-before-smtp-*
+
+1999-11-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el (wl-mime-edit-preview-message):
+       New hook: wl-mime-edit-preview-message-hook.
+       * elmo-util.el: Suppressed warnings.
+       * wl-summary.el (wl-summary-sync-marks): Make mark synchronization
+       faster.
+       * elmo-pipe.el (elmo-pipe-max-of-folder): Unread number is not valid
+       in IMAP4 folders.
+       (Reported by Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+
+1999-11-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.7 - "Escapade"
+       * WL-MK: install-info causes strange INFODIR message.
+       * Fix: Error occurs the first prefetch from Folder.
+       (Reported by Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>)
+       * mmelmo: changed mime-elmo-entity as subclass of mime-buffer-entity
+       to avoid effects on other MUAs.
+       * wl-thread.el: Number is not highlighted when message is appended to
+       the closed thread.
+       * Some functions are corresponded with pipe-folder.
+
+1999-11-03  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: folder petname can be used for folder name completion.
+       * Fix: If wl-force-fetch-folders is non-nil, access groups cannot
+       be opened in the unplugged status.
+       * wl-fldmgr.el: inhibited to call `wl-fldmgr-set-petname'
+       in the end of line.
+       * wl.el: If there is no change in wl-plugged-mode,
+       wl-toggle-plugged is not called.
+       * rearranged buffer removal of wl-exit and wl-folder-suspend.
+       * wl-folder.el: some functions are replaced with
+       wl-folder-buffer-group-p.
+       * wl-summary.el: some functions are replaced with
+       wl-summary-entity-info-msg.
+       * Change: changed wl-reset-plugged-alist's default value to t.
+       * Fix: plugged status is reset.
+
+1999-11-03  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-summary.el (wl-summary-reedit): When reedit draft
+       for news arcticle, don't add To: header.
+
+1999-11-03  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * wl-summary.el (wl-summary-write-current-newsgroup):
+       use elmo-folder-get-primitive-folder-list.
+       * New command: wl-folder-write-current-newsgroup
+       * elmo-util.el (elmo-folder-get-primitive-folder-list,
+       elmo-folder-get-primitive-spec-list): changed for pipe-folder.
+       * Fix: wl-toggle-plugged fails if the network downed before 
+       elmo-pop3-flush-connection.
+
+1999-11-03  sike@ic.netlaputa.ne.jp
+
+       * Fix: the problem when Message-Id contains newline. 
+
+1999-11-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.6 - "Diamonds And Pearls"
+       * Set plug status to wl-plugged in wl-init.
+       (Pointed out by Yasuo OKABE <okabe@i.kyoto-u.ac.jp>)
+       * WL-MK: rewrote for Nemacs.
+       * Rename: wl-address-complete-address
+       -> wl-complete-field-body
+       * Rename: wl-address-complete-address-or-tab
+       -> wl-complete-field-body-or-tab
+
+1999-11-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: simplified the icon init function.
+       * elmo-pipe: New module.
+
+1999-11-01  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: typo in WL-ELS.
+       * Fix: new WL-MK causes error when byte-compiling
+       wl-user-agent.el and wl-mailto.el.
+
+1999-10-29  Takaaki MORIYAMA  <taka@airlab.cs.ritsumei.ac.jp>
+
+       * Remove wl-save-status from kill-emacs-hook in wl-exit.
+
+1999-10-28  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * new file: WL-ELS.
+       * WL-MK: rewrote for install.el.
+
+1999-10-28  okada@opaopa.org (Kenichi OKADA)
+
+       * Fix: wl-ja.texi: key binding of wl-template-select was wrong.
+       * Fix: synchronize unread number for INN 2.3.
+
+1999-10-28  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * Fix: wl-ja.texi: many fixes.
+
+1999-10-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: binded 'Z' in Folder to `wl-status-update'.
+       * Fix: wl-summary-goto-last-displayed-msg doesn't jump to
+       previously displayed message when only one message was displayed.
+
+1999-10-26  kurati <kurati@bigfoot.com>
+
+       * Change: FCC: is also target of completion.
+
+1999-10-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Sync important mark though folder is in the 
+       unplugged status.
+       * Change: Check existence of folder before auto-refile.
+       (Demanding feature by Toshihiko Kodama 
+       <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+       * Fix: Mark expunged message as read on IMAP4 server.
+
+1999-10-22  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: marking of thread causes strange behavior when
+       cursor is not at the beginning of line.
+       * Change: Don't move cursor when same folder is specified in
+       wl-thread-refile.
+       * Change: Changed message when wl-summary-jump-to-parent-message
+       failed.
+       * Change: Changed region adjusting of wl-summary-exec-region to
+       intuitive way.
+
+1999-10-25  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: wl-fldmgr causes error when group folder is added.
+       * Change: define wl-defface statically.
+       * Change: wl-folder-buffer-search-entity matches unread
+       status unknown.
+       * Fix: wl-summary-redisplay-no-mime does not set
+       wl-summary-buffer-disp-msg and wl-current-summary-buffer.
+
+1999-10-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Check domain name at startup time.
+       * New variable: wl-local-domain.
+       For those systems that doesn't return FQDN.
+       * Change: Deleted horizontal scrollbar for Folder in XEmacs.
+       (Pointed out by "MATSUBAYASHI 'Shaolin' Kohji"
+       <shaolin@rins.st.ryukoku.ac.jp>)
+       * New function: wl-mime-edit-preview-message.
+       * Change: Move cursor on readable message when entered to Summary
+       in the unplugged status.
+       * Fix:  typo in WL-CFG utils.
+       (Pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * Fix: cannot make info.
+       (Pointed out by Kazufumi Hayasaka <hayakazu@hauN.org>)
+       * 2.2.5 - "Come Undone"
+
+1999-10-24  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * Fix: simplified double negative.
+
+1999-10-24  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: If FCC is unplugged folder, append to dop-queue.
+       * Change: New elmo-dop-queue operation "append-operations".
+       * Change: wl-summary-flush-pending-append-operations takes over
+       existing message's unread status.
+
+1999-10-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New file: WL-CFG.
+       * Fix: FCC to IMAP4 Folder is ignored in the offline status.
+       (Reported by Masafumi NAKANE <max@wide.ad.jp>)
+       * Fix: refile-alist cannot be shared between Emacs and XEmacs.
+       (Reported by Takuro KITAME <kitame@northeye.org>)
+       * wl-ja.texi: fixed original site of tm, semi.
+       * Fix: If there are IMAP4 folders which have same name and different
+       servers, wrong folder is sometimes updated its unread number.
+       (Reported by Kazuyoshi Mii <mii@isl.ntt.co.jp>)
+
+1999-10-23  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix: queued functions not in elmo-dop-merge-funcs are discarded.
+
+1999-10-23  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: Plugged status:
+       display label of every port.
+       * Change: Plugged status:
+       displaying dop-queue displayed more in detail.
+       * Fix: elmo-dop-queue-merge sometimes set elmo-dop-queue to nil.
+
+1999-10-23  okada@opaopa.org (Kenichi OKADA)
+
+       * Change: elmo-prefetch-msgs displays the progress.
+
+1999-10-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Set wl-mime-save-content as Wanderlust specific method on SEMI.
+       * Fix: FLIM-1.12.x fails to merge partial messages.
+       * WL-MK: Rewrote configuration process.
+
+1999-10-22  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * Rename: wl-score-edit-exit-function -> wl-score-edit-exit-func
+
+1999-10-22  Takuro KITAME <kitame@northeye.org>
+
+       * Fix: etc/ja.Emacs: Some values are duplicated.
+
+1999-10-22  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Add: [wl-ja.texi]
+       Added explanations of wl-summary-save-*,
+       wl-summary-jump-to-msg-by-message-id-via-nntp,
+       offline prefetch, wl-folder-jump-to-current-entity, cram-md5, and SSL.
+
+1999-10-22  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: Set md5 CODING to 'binary for XEmacs built-in function.
+       * Fix: Move from sticky summary to other by "g",
+       temp mark face is not recovered.
+       * New variable: wl-prog-uudecode-no-stdout-option.
+       Non-nil forces save with filename specified in uuencode stream.
+
+1999-10-21  okada@opaopa.org (Kenichi OKADA)
+
+       * Merge offline queue.
+
+1999-10-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Don't use std11.el in wl-address-header-extract-address.
+
+1999-10-20  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: Don't reset `elmo-plugged-alist' when startup.
+
+1999-10-20  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: Emacs 20.2 causes buffer-read-only error on Folder mode.
+       (Reported by Yasuhiro Ohta <yohta@acsu.buffalo.edu>
+       Adviced by TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>)
+       * Fix: Check the feature of scrollbar and toolbar on XEmacs.
+       (Adviced by Shigeru OKUMURA <sokumura@jaist.ac.jp>)
+
+1999-10-20  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix: An error occurs when message with invalid header is refiled.
+       * Fix: Access grop content is not appeared automatically at first
+       open operation.
+
+1999-10-19  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: 'E' in Folder causes error at wl-folder-toggle-disp-summary.
+       (Reported by Shigeru OKUMURA <sokumura@jaist.ac.jp>)
+       * Change: Don't use 'eval-after-load' for timezone y2k.
+       * 2.2.4 - "Black Or White"
+
+1999-10-19  okada@opaopa.org (Kenichi OKADA)
+
+       * Fix: prefetching removes mark in summary although it was canceled.
+       * Change: Offline Prefetch.
+
+1999-10-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: inhibit 'm f' command in the last line of Folder mode.
+       * Change: reduced warnings in byte-compile.
+       * Added hmac package and ssl.el in utils subdirectory.
+       (If wl-install-hmac is Non-nil, hmac package is installed.)
+       * Change: corresponded to FLIM-1.12.
+       * Fix: IMAP4 folder claims in unplugged status.
+       * Change: Ask update number in summary if message number is larger 
+       than wl-summary-update-confirm-threshold.
+       * New variable: wl-summary-update-confirm-threshold
+
+1999-10-18  okada@opaopa.org (Kenichi OKADA)
+
+       * New variable: wl-summary-search-via-nntp.
+       if Non-nil, call wl-summary-jump-to-msg-by-message-id-via-nntp in
+       wl-summary-jump-to-msg-by-message-id. If 'confirm, it confirms.
+       * New variable: wl-summary-jump-to-msg-by-message-id-via-nntp
+       Search message by Message-ID via NNTP and change folder.
+
+1999-10-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: call elmo-commit in elmo-imap4-server-diff.
+       * New function: elmo-commit.
+       * Fix: wl-folder-check-one-entity removed useless folder check.
+       * elmo-imap4-max-of-folder: new implementation.
+       * elmo-imap4-folder-exists-p: new implementation.
+
+1999-10-14  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * Fix: wl-ja.texi: typo (@kbd {l} -> @kbd{l}).
+
+1999-10-14  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * Fix: wl-local-variable-p does not work on xemacs.
+
+1999-10-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: flag on server was not changed when cached message was read.
+       (Pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * Change: Use std11.el in wl-address-header-extract-address.
+
+1999-10-14  Masafumi NAKANE <max@wide.ad.jp>
+
+       * Fixed Typo: exit-> exist.
+
+1999-10-13  okada@opaopa.org (Kenichi OKADA)
+
+       * Change: unplugged.xpm: added red.
+
+1999-10-13  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: elmo-filter-get-spec change was not completed
+       (elmo-folder-diff).
+
+1999-10-13  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: lighten wl-plugged-mode.
+       * Fix: wl-draft-raw-send
+       wl-draft-config-alist was binded to nil.
+
+1999-10-13  Sasaki Toshiya <toshi@unicorn.tohoku.nttcom.co.jp>
+
+       * Change: wl-folder-use-sever-diff-p
+       If multi-folder contains IMAP4 folder, then t.
+
+1999-10-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Set filename in 'm U' (wl-summary-temp-mark-uudecode).
+       * Change: Wheel works in Folder mode.
+       * Fix: tm-wl.el was not completed.
+       (Pointed out by Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+       * Change: wl-ja.texi: added explanation of 'OR'.
+       * Change: removed dependency for time-stamp.el.
+
+1999-10-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.3 - "Always"
+       * read-directroy-name -> wl-read-directory-name.
+
+1999-10-12  okada@opaopa.org (Kenichi OKADA)
+
+       * New commands: wl-summary-save-region (ry), wl-thread-save (ty),
+       wl-summary-temp-mark-save (my).
+
+1999-10-11  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * New variable: wl-draft-sendlog
+       Sending log is saved when this value is non-nil.
+       * New plugged system-II.
+
+1999-10-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New command: wl-summary-temp-mark-pick (binded to m?).
+       * New variable: elmo-imap4-disuse-server-flag-mailbox-regexp.
+       * Rename: wl-address-file-name -> wl-address-file.
+       * Rename: wl-score-default-file-name -> wl-score-default-file.
+       * New variable: wl-summary-auto-sync-marks.
+       Non-nil forces summary to synchronize unread/important marks at 's'.
+       * Change: default value for wl-stirict-diff-folders is changed to nil.
+       * Change: important marks are synchronized in server.
+       * Change: IMAP4 Folder synchronizes unread status with server.
+       * New command: wl-summary-sync-marks.
+       * Change: IMAP4 Folder server can display side diff.
+       * New variable: wl-folder-use-server-diff.
+
+1999-10-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New variable: wl-envelope-from which sets envelope from.
+       If nil, wl-from is used as envelope from.
+
+1999-10-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: defined easy saving method as default (for SEMI).
+       * Change: wl-draft-send kills sending-buffer only when
+       it is buffer-live-p.
+       * Change: Folder existence is checked only when folder checking
+       was failed.
+       * Fix: wheel causes error when cursor is on message buffer.
+
+1999-10-04  okada@opaopa.org (Kenichi OKADA)
+
+       * Change: C-u SPC calls wl-folder-update-recursive-current-entity
+       on group folder.
+
+1999-10-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: filtered IMAP4 folder queues needless remove process.
+       (Pointed out by OKAZAKI Tetsurou <okazaki@be.to>)
+
+1999-10-04  okada@opaopa.org (Kenichi OKADA)
+
+       * Fix: wl-folder-update-recursive-current-entity does not work
+       when access group has petname.
+
+1999-10-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Fix: keys (mail addresses) are downcased when they are registered
+       to wl-refile-alist.
+
+1999-10-02  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * Change: If number is specified as prefix argument for C-l,
+       the number is passed to recenter.
+
+1999-10-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: Avoided mark as read entire message when part was fetched
+       in IMAP4.
+
+1999-09-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: Emacs 20 with argument '-nw' could not print out.
+
+1999-09-28  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: Summary sometimes appears on unexpected window
+       when moving from Folder to Summary.
+       * Fix: wl-plugged-change causes error.
+       * Change: wl-plugged-change can be called from Summary.
+
+1999-09-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: quit loading wl.el in compile time.
+       (Pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-09-27  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: New plugged system sometimes causes an error.
+
+1999-09-26  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: New plugged system.
+
+1999-09-24  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: execute wl-summary-redisplay-internal ()
+       instead of wl-summary-set-message-buffer-or-redisplay() to affect
+       wl-break-pages value in printing.
+       * Fix: If wl-break-pages is t, next page does not printed.
+
+1999-09-23  Kenichi OKADA <okada@opaopa.org>
+
+       * Change: set truncate-line t in folder-mode
+       when wl-stay-folder-window is non-nil.
+
+1999-09-23  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: elmo-filter-get-spec change was not completed
+       (elmo-folder-diff).
+
+1999-09-23  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: use file-name-absolute-p () for absolute path detecting.
+
+1999-09-20  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: kill buffers of mime-view-caesar when exit summary.
+
+1999-09-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: elmo-safe-filename: corresponded to OS/2 filesystem.
+
+1999-09-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.2 - "You Could Be Mine"
+       * Change: folders in Folder mode are saved ignoring
+       wl-save-folder-list.
+       * Change: 'tocc' field means 'To' or 'Cc' in filter spec.
+       * Change: OR condition, NOT condition are now available in filter
+       folder.
+       * Change: wl-uniq-list -> elmo-uniq-list
+       * Fix: wl-summary-save always complains "No message to save."
+       * Change: move local-variable-p definition to wl-util.el.
+       (according to the report from Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-02-02  IMAI Takeshi <imai@ed2.com1.fc.nec.co.jp>
+
+       * Fix: cannot expire to IMAP folder.
+
+1999-09-20  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: kill buffers of mime-view-caesar when exit summary.
+
+1999-09-19  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * Fix: set process-buffer of open-network-stream as unibyte.
+
+1999-09-19  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: wl-ja.texi
+
+1999-09-17  HAYAKAWA akio <akio-h@po.iijnet.or.jp>
+
+       * Change: consider multi folder as local folder if
+       it contains only local folder.
+
+1999-09-16  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * typo fix.
+
+1999-09-16  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: recycle message window in one frame.
+       * Change: resume message window status in wl-summary-goto-folder
+       according to wl-summary-buffer-disp-msg.
+
+1999-09-15  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * WL-MK:
+         Fix: install-wl-package ignored wl-install-els for elmo modules.
+         New function: wl-install-modules
+
+1999-09-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.1 - "Wild World"
+       * typo: stickey -> sticky.
+       * New function: wl-nemacs.el
+       local-variable-p for Nemacs.
+       * Rename: etc/ChangeLog.* -> etc/ChangeLog.*.ja
+       * Rename: etc/ChangeLog.*.en -> etc/ChangeLog.*
+       * Fix: XEmacs doesn't show logo.
+       * Fix: install fails in XEmacs package.
+       (Pointed out by Hidetomo Machi <machi@ailab.is.tsukuba.ac.jp>)
+       * Change: wl-ja.texi
+       Sync up section MIME modules.
+       * Change: keep info files.
+       * New function: wl-kill-buffers
+       * Change: delete Sticky Message buffer in
+       wl-summary-force-exit and wl-exit.
+       (Adviced by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-09-14  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: wl-summary-read causes error in sticky summary under
+       XEmacs-21.1.6.
+
+1999-09-14  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * Fix: ja/dot.wl
+       elmo-eword-decode-string is still used.
+
+1999-09-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: tm-wl.el
+       defined some functions by defalias-maybe.
+       * Remove: smtp.el
+       flim or clime includes it.
+
+1999-09-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.0 - "Vogue"
+       * smtp.el: Sync up with flim-1.13.2.
+       * New variable: wl-install-els.
+       If nil, el files are not installed(for WL-CFG).
+       * Stickey Message changes for wl-draft-reply etc.
+       * Rename: wl-drfat-buffer-cur-message-buffer ->
+       wl-current-message-buffer(moved to wl-util.el)
+       * Change: elmo-cross-device-link-error-p definition
+       for MSDOS-mounted filesystem in UNIX.
+       (According to the report from pf21 GOTO_Toshiya
+       <pf21@pure.cpdc.canon.co.jp>)
+
+1999-09-13  Mito <mit@nines.nec.co.jp>
+
+       * Change: Stickey Message.
+       * Change: New guess module of score file.
+       * Change: el files are also installed with elc files.
+
+1999-09-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New file: samples/en/dot.*
+       * New directory: samples.
+       * Move: etc/*.xpm -> etc/icons/*.xpm
+       * Move: etc/TODO -> doc/TODO.ja
+
+1999-09-12 OKAZAKI Tetsurou <okazaki@be.to>
+
+       * Fix: filter syntax of since, before is changed.
+
+1999-09-10  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * im-wl-prog-imput-error-msg -> im-wl-dispatcher-error-msg.
+
+1999-09-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * removed defmacro of convert-standard-filename.
+       * removed defmacro of open-network-stream-as-binary.
+       * removed defmacro of with-current-buffer, with-temp-buffer etc.
+       * elmo-eword-decode-string -> abolished.
+
+1999-09-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New variable elmo-default-imap4-user.
+       (According to the advice from Taiji.Can@atesoft.advantest.co.jp)
+       * 2.1.5 - "Unbelievable"
+
+1999-09-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New variable: elmo-nntp-max-number-precedes-list-active.
+       Non-nil precedes max number obtained by `list active' command in nntp.
+       * New function: elmo-update-number which synchronizes max number of
+       nntp folder when elmo-nntp-max-number-precedes-list-active is
+       non-nil.
+       (Based on Kenichi OKADA <okada@opaopa.org>'s report.)
+
+1999-09-06  Akihiro Motoki <mokkun@iname.com>
+
+       * Fix: elmo-localnews-append-msg has wrong number of arguments.
+
+1999-09-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * [im-wl] Copy `im-wl-prog-imput-error-msg' value to process buffer.
+       * Change: 'N','P' also ignores if current folder is
+       (elmo-folder-local-p).
+       (Adviced by Akihiro Motoki <mokkun@iname.com>)
+
+1999-09-03  Akihiro Motoki <mokkun@iname.com>
+
+       * Fix: 'p' skipps unread message even in localdir.
+       * New function: (elmo-folder-local-p)
+
+1999-09-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: key bind of wl-template-select is changed to `C-cC-j'.
+       (Adviced by TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+       Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-08-31  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Message is changed for sending or queueing of draft.
+
+1999-08-31  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [im-wl] quit setting buffer in sub-process.
+
+1999-08-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: [wl-ja.texi] now IMAP folder collects extra-fields.
+       (Pointed out by Sasaki Toshiya<toshi@unicorn.tohoku.nttcom.co.jp>)
+       * Fix: Splited MIME message causes deadlock.
+       (Pointed out by Mikio Nakajima <minakaji@osaka.email.ne.jp>)
+
+1999-08-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * new im-wl.el
+
+1999-08-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: `K'/`L' (wl-summary-increase/lower-score) proceeds to
+       rule input status in the last line of Summary.
+       (Adviced by TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>)
+       * New variable: elmo-pop3-send-command-synchronously.
+       Wait sending next command until server response is received.
+       (According to Atsushi Tada <tada@tworks.co.jp>'s patch)
+       * Fix: mime-store-message/partial-piece causes error in recent SEMI.
+       * Fix: Toolbar is not appeared in Draft mode in XEmacs.
+
+1999-08-26  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * Fix: wl-summary-save causes error in the last line of summary.
+
+1999-08-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: default color for light background.
+       * Fix: invalid filter syntax /last=200/ causes error.
+       * Fix: imap access group could not specify root.
+
+1999-08-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.1.4 - "Tears In Heaven"
+       * Change: [wl-ja.texi] Added explanation of C-u . in Summary.
+       (Pointed out by susumu-w@ops.dti.ne.jp)
+
+1999-08-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: Cause error when refile or delete was failed in
+       wl-summary-exit.
+       * Fix: headers in split messages are not encoded.
+       * Fix: Unread status is not reflected for messages read in
+       unplugged status.
+       * Fix: In unplugged status, previous message is displayed if
+       uncached message is read.
+       * Fix: temp-mark highlighting doesn't precedes persistent marks in
+       wl-thread-open-close. (Pointed out by susumu-w@ops.dti.ne.jp)
+       * Change: wl-thread-insert-message:
+       don't use wl-summary-goto-top-of-current-thread.
+       * Change: (wl-summary-goto-top-of-current-thread) new implementation.
+       * Fix: wl-mail-setup-hook is not called when draft is created by "W".
+         (Pointed out by Kenichi OKADA <okada@opaopa.org>)
+       * Change: push -> wl-push.
+         (Pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-08-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: quit defaliasing elmo-eword-decode-string.
+       * Change: display version of flim in User-Agent when tm is used.
+       * Fix: comparing function of partial ID.
+
+1999-08-22  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: elmo-nntp.el (elmo-nntp-catchup-msgdb):
+       if overview is not obtained, msgdb becomes (nil nil nil nil).
+
+1999-08-20  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-pop3.el: reorganized elmo-pop3-list-folder.
+
+1999-08-20  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * New variable: wl-score-folder-alist-matchone.
+       * Change: expanded syntax of wl-score-folder-alist.
+
+1999-08-20  Mito <mit@nines.nec.co.jp>
+
+       * Change: [wl-score] if symbol 'guess' is specified
+       instead of score file name in wl-score-folder-alist,
+       file name is guessed from folder name.
+
+1999-08-19  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: (wl-summary-switch-to-clone-buffer): added
+         wl-summary-buffer-temp-mark-list, wl-summary-default-score,
+         wl-summary-important-above, wl-summary-temp-above,
+         wl-summary-mark-below, wl-summary-expunge-below to copy variables.
+
+1999-08-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: Implemented wl-thread-exec.
+         (Pointed out by "KJ.TASAKI" <kj.tasaki@18software.co.jp>)
+       * Change: Check remaining temp-marks before sync-all.
+         (Pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * Fix: [elmo-vars.el] berkeley-db fix was not reflected.
+         (Pointed out by Mikio Nakajima <minakaji@osaka.email.ne.jp>)
+       * Fix: y2k problem in timezone-parse-date.
+         (Pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+
+1999-08-17  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * Fix: autload setting of interactive commands in wl-fldmgr.el.
+
+1999-08-16  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: Speed up scoring functions.
+       * Change: wl-summary-sort-by-{from|subject}: faster implementation.
+       * Change: wl-summary-switch-to-clone-buffer copies
+       wl-current-score-file and wl-score-alist.
+       * Added wl-as-mime-charset.
+       * Change: Use wl-score-mode-mime-charset instead of
+         wl-score-mode-coding-system.
+       * Change: set default table size of elmo-make-hash to 1024.
+
+1999-08-14  susumu-w@ops.dti.ne.jp
+
+       * Fix: wl-thread-jump-to-msg causes error when called as command.
+       * Change: bind "J" to wl-thread-jump-to-msg in Summary.
+       * Change: localdir, localnew, maildir ignores unplugged status
+       in cursor moving.
+       * Change: t d doesn't take direction into account.
+       * Fix: c-u t d marks previous thread.
+       * Fix: 'd' displays next message, but t d does not.
+       * Change: skip message marked with 'D' in n & p.
+
+1999-08-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: [elmo] Cannot access remote folder of UW imapd.
+
+1999-08-04  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: message body is not displayed in wl-queue-folder.
+         (Pointed out by <no_bo@geocities.co.jp>)
+       * 2.1.3 - "Sukiyaki"
+
+1999-08-03  Kenichi OKADA <okada@opaopa.org>
+
+       * Change: Deleted extra Tab/Spaces from ChangeLogs.
+       * Fix: typo in wl-vars.el.
+       * Add: [wl-ja.texi]
+       wl-folder-{prefetch|mark-as-read-all}-current-entity.
+
+1999-08-03  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: even when queued messages caused error, they are deleted.
+       (Pointed out by Mikio Nakajima <minakaji@osaka.email.ne.jp>)
+       * mmelmo-imap4.el: mime-goto-header-start-point,
+       mime-goto-header-end-point, mime-entity-header-buffer,
+       mime-entity-body-buffer is implemented.
+       (Pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * smtp.el: Trial new option: smtp-notify-success.
+       * wl-mime.el: merging pertial mesages sometimes failed.
+       (Pointed out by Shuichi Nishioka <shu@gohome.org>)
+       * Fix: Multipart message could not be re-edited.
+       * Fix: temp mark processing is unwind-protected.
+       (Pointed out by Mito <mit@nines.nec.co.jp>,
+       Masahiro MURATA <muse@ba2.so-net.ne.jp>,
+       Taiji.Can@atesoft.advantest.co.jp)
+
+1999-08-02  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * Fix: cannot toggle to online when POP3 connection is disappeared.
+       * Fix: [wl-ja.texi]
+       wl-toggle-plugged -> wl-draft-toggle-plugged.
+
+1999-08-01  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * Fix: If XEmacs is build with configure --with-database=berkdb,
+       elmo-database.el is not loaded although elmo-use-database
+       is set as non-nil.
+
+1999-07-30  Mito <mit@nines.nec.co.jp>
+
+       * Fix: Error causes when Summary's (window-height) is small.
+
+1999-07-29  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: copy from (localdir, maildir, localnews, archive) to
+        (localdir, localnews, archive).
+       * Fix: wl-summary-pick
+       If multiple messages have same Message-ID, temp mark is put on only
+       first message.
+       * Change: correspond to `Followup-To: poster'.
+       * New command: wl-summary-supersedes-message
+       * wl-util.el (wl-string): Use set-text-properties instead of
+         format.
+
+1999-07-28  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix: cannot reply to mails which are sent by user.
+
+1999-07-27  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * New function: elmo-multiple-field-body and
+       elmo-multiple-fields-body-list.
+
+1999-07-26  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: elmo-localnews-copy-msgs is called although it is not defined.
+
+1999-07-24  HAYAKAWA akio <akio-h@po.iijnet.or.jp>
+
+       * Fix: error causes when wl-(un)plugged-hook is set.
+
+1999-07-23  Kenichi OKADA <okada@opaopa.org>
+
+       * Fix: wl-mail-setup-hook is not called when draft is created by "W".
+
+1999-07-22  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: wl-summary-cancel-message is not corresponded to
+       Sticky Summary.
+
+1999-07-16  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * Fix: [sample.dot.wl] To field is not decoded.
+
+1999-07-15  Masahiro Murata  <muse@ba2.so-net.ne.jp>
+
+       * Fix: void-function wl-summary-rescore-msgs.
+
+1999-07-15  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: elmo-imap4 also causes moji-bake in Emacs20 because of
+       wrong multibyte settings.
+       * 2.1.2 - "Rico Suave"
+
+1999-07-14  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Change: Skip checking when "I" in Summary is invoked with
+       prefix-arg.
+       * Fix: In elmo-nntp, multibyte setting for Emacs 20 was invalid.
+       * Fix: messages with 'u' mark couldn't be set as unread.
+       * Fix: 'M-x wl-draft' causes error in XEmacs.
+         (pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * Fix: wl-summary-highlight is ignored in wl-summary-update3.
+       * Change: Display prefetched message number after "I".
+       * Fix: Summary buffer is set as modified after prefetching.
+       * Fix: messages marked with "U" cannot be prefetched by "I" in Folder.
+         (susumu-w@ops.dti.ne.jp)
+
+1999-07-14  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: [wl-score] (wl-score-simplify-subject)
+       use wl-score-simplify-fuzzy-regexp instead of
+       wl-summary-subject-func.
+       * Fix: multiple same cache is created in buffer-cache.
+
+1999-07-13  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * delete-if -> elmo-delete-if.
+
+1999-07-13  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: skipped prefetching messages are not taken into account in 'I'.
+         (reported by susumu-w@ops.dti.ne.jp)
+       * 2.1.1 - "Praying For Time"
+
+1999-07-12  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-draft-insert-signature -> eliminated.
+       * wl-summary-prefetch-all-new -> eliminated.
+       * Fix: when password prompt is interrupted by C-g,
+         wrong-type-argument databasep nil sometimes occurs.
+         (pointed out by "MATSUBAYASHI 'Shaolin' Kohji"
+          <shaolin@rins.st.ryukoku.ac.jp>)
+       * New variable: wl-summary-incorporate-marks.
+        messages with specified marks are prefetched by 'I' in Summary.
+       * Fix: delete '(elmo-set-buffer-multibyte nil)' from elmo-nntp.el and
+         mmelmo.el (adviced by Shigeru OKUMURA <sokumura@jaist.ac.jp>)
+       * Fix: define dummy make-face function in wl-mule.el if not bounded.
+         (adviced by HAYAKAWA akio <akio-h@po.iijnet.or.jp>,
+          OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>)
+       * Fix: pop3 folder caused in unplugged status.
+         (pointed out by HAYAKAWA akio <akio-h@po.iijnet.or.jp>.)
+
+1999-07-12  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: fetcing failed if elmo-msgdb-extra-fields is nil.
+
+1999-07-11  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * save elmo-crosspost-message-alist.
+       * Change: use elmo-object-load and elmo-object-save if possible.
+       * Change: [Scoring]
+       references or thread entries are not added automatically
+       in wl-summary-rescan or sync-all.
+       * extra field can be fetched in imap4 folders.
+
+1999-07-10  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Change: 'W' in localnews also completes Newsgrops field.
+
+1999-07-08  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: internal("'mark") was not work on Nemacs.
+
+1999-07-07  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: custom group of wl-summary-mark-below is 'wl-score.
+       (Pointed out by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * Change: In wl-summary-incorporate, use
+       (wl-summary-prefetch-region (point-min) (point-max))
+       instead of wl-summary-prefetch-all-new.
+       (Adviced by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * Fix: C-u . does not work in Summary.
+         (pointed out by Hideo Matsumoto <hideo-m@nerv.org>)
+
+1999-07-06  sen_ml@eccosys.com
+
+       * rfc2368.el - version 0.3.
+
+1999-07-06  Hideo Matsumoto <hideo-m@nerv.org>
+
+       * New variable: wl-draft-use-frame.
+       If non-nil, a new frame is created for draft.
+
+1999-07-06  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: quoted lambda in mapcar of wl-day-number.
+       * Change: [wl-score.el]
+       Simplify subject string matching in wl-summary-{increase|lower}-score.
+       Changed to buffer local variable: wl-current-score-file and
+       wl-score-alist.
+       * Change: [wl-summary.el]
+       timing of setting wl-summary-scored to nil.
+       * Rename:
+         wl-score-simplify-subject-fuzzy-regexp ->
+         wl-score-simplify-fuzzy-regexp
+         wl-score-simplify-buffer-fuzzy-step -> elmo-buffer-replace.
+       * Change: [wl-ja.texi] score description is changed.
+       * Fix: [wl-draft.el] added autoload setting.
+       * Fix: [sample.dot.wl]
+       deleted wl-summary-next-no-unread. added score setting.
+
+1999-07-06  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: load timing for wl-nemacs.el etc. is changed.
+       * Fix: defined rassoc for Nemacs.
+       * Fix: Nemacs causes error when 'm' is typed in Folder mode.
+       * Fix: default value for wl-use-scoring is set to nil in Nemacs.
+       * New function: elmo-delete-if. replacement of delete-if.
+       * Fix: Nemacs bytecompiler causes error (defvar nil nil).
+         (pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * 2.1.0 - "Ordinary World"
+
+1999-07-05  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: partial messages couldn't be merged.
+       (pointed out by Taiji.Can@atesoft.advantest.co.jp)
+       * Change:
+       wl-summary-rescore also uses wl-summary-rescore-partial-threshold.
+       * Change: display processing message in
+       wl-summary-score-update-all-lines.
+
+1999-07-04  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Add: New key wl-score.el: date, extra, followup, thread.
+       * Change: File specified by `wl-score-default-file-name'
+       is always loaded.
+       * New Feature: Score editing in Summary, Score.
+       * Change: [wl-vars.el] defcustoms are re-arranged.
+       * Add: [wl-highlight.el] defface group.
+
+1999-07-01  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * New Feature: New sync range: rescan-noscore.
+       * Change: score takes effect on read messages in rescan/sync-all.
+       * New variable: wl-summary-rescore-partial-threshold.
+       for scoring in rescan, sync-all.
+       * wl-edit-again-func->wl-edit-decode-message-func
+       (adviced by tomo@etl.go.jp (MORIOKA Tomohiko).)
+       * Change: eliminated japanese comment of elmo-util.el.
+       * Change: Implementation of wl-refile-alist-setup is changed.
+
+1999-06-29  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Change: Don't check wl-refile-(msgid-)alist is loaded or not
+       every wl-refile-(msgid-)learn or wl-refile-guess-*.
+       * Change: Don't execute wl-refile-alist-save every
+       wl-refile-(msgid-)learn.
+       * Change: return value of wl-refile-(msgid-)learn.
+
+1999-06-29  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * Change: Enclosed require 'cl by eval-when-compile.
+
+1999-06-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: Nemacs couldn't exit folder by [Space] if unread was 0.
+       * Fix: cl.el' member () overrides poe-18.el' member ().
+
+1999-06-29  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Change: corresponded to AIR MAIL(AIRCimapd release 2.00).
+       (Based on the report from Sasaki Toshiya
+       <toshi@unicorn.tohoku.nttcom.co.jp>)
+
+1999-06-29  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Change: changed the meaning of expunge to
+       'mark as read and eliminate from summary buffer'.
+       * report expunged messages.
+
+1999-06-28  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * Change: Eliminated to use md5-encode in elmo-pop3.el.
+
+1999-06-28  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * MK-MK:
+       quoted (mapcar (lambda ..)) for Emacsen based on v18.
+       * Fix: Nemacs installes wl-mule.elc.
+       redefined defgroup(), defcustom().
+       * Fix: wl-summary.el, wl-demo.el:
+       Avoided error for non-float Emacsen.
+       * Fix: wl-nemacs.el:
+       dummy completing-read() is added.
+       read-char-exclusive() causes error.
+
+1999-06-28  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: wl-summary-pick doesn't work correctly if
+       default-case-fold-search is nil.
+       * Fix: Although wl-auto-select-next is non-nil,
+       doesn't change folder if there are more than two important marks.
+
+1999-06-28  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * New function: wl-summary-delete-all-delete-marks.
+       * Fix: (wl-summary-cleanup-temp-marks) was called twice.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+
+1999-06-27  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: no scoring when changing folder by
+       wl-summary-goto-folder-subr.
+       * Change: Abolished wl-summary-next-no-unread.
+       * Change: default value of wl-summary-move-order: 'new -> 'unread.
+
+1999-06-27  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: Nemacs causes  (wrong-type-argument listp 1).
+       * Fix: Nemacs causes error because of absense of timer function.
+
+1999-06-27  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: set coding system for score file as ctext (*ctext).
+
+1999-06-26  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Add: Handle "nntp:" and "news:" URL like "mailto:".
+         (-> wl-utils.el)
+
+1999-06-25  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: [wl-score.el]
+       coding-system processing was wrong.
+
+1999-06-25  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * New file: [wl-score.el]
+       Scoring feature!
+       * Change: [wl-summary.el] (wl-summary-sync-update3)
+       Changed the timing of wl-folder-set-folder-updated.
+       * Change: (wl-summary-update-crosspost)
+       mark as read without opening thread.
+       * New function: [wl-util.el] `wl-delete-alist'.
+       * New macro: [wl-util.el]
+       `wl-as-coding-system' and emulate function `pp'.
+
+1999-06-24  pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp>
+
+       * Add: [wl-ja.texi]
+       added explanation of wl-thread-open-reading-thread.
+
+1999-06-24  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix: elmo-cache-expire causes error.
+
+1999-06-24  sen_ml@eccosys.com
+
+       * Fix: utils/rfc2368.el.
+
+1999-06-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.0.1 - "Now And Forever"
+       * Fix(incompletely):
+       wl-draft-reedit deletes lines before "--text follows this line--"
+       in message body.
+       (pointed out by Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>)
+
+1999-06-24  MAKINO Takashi <makino@cyber.office.ne.jp>
+
+       * New function: wl-refile-guess-by-msgid.
+
+1999-06-23  Akihiro Motoki <mokkun@iname.com>
+
+       * Fix: When (setq wl-stay-folder-window t) and started with
+       'wl-draft' command, wl-draft-send-and-exit and wl-draft-kill failes.
+
+1999-06-23  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix: [wl-ja.texi]
+       wl-template-alist : file -> body-file
+
+1999-06-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: C-c C-y with prefix in Draft cites from cut buffer.
+       * Change: elmo-imap4-int-string-to-list: abolished.
+         (advised by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * Change: binded wl-summary-save to 'e' in Summary.
+       * Change: removed unused let binding in wl-set-string-width.
+       * Fix: Unplugged MH refile calls elmo-copy-msgs and elmo-append-msg.
+         (pointed out by Koji IIDA <kiida@nttx.co.jp>)
+
+1999-06-22  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: wl-draft-prepared-config-exec was binded to C-c C-d and C-c C-e.
+       * Change: set wl-completion-buf-name as standard "*Completions*".
+       * Fix: wl-message-buffer-created-hook was not called correctly.
+         (pointed out by Akihiro Motoki <mokkun@iname.com>)
+
+1999-06-22  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: [elmo-nntp.el] XOVER size value was wrong.
+       * Change: (elmo-nntp-string-to-vector): Renamed from
+       `elmo-nntp-string-to-list'.
+       * Change: [elmo-localdir.el] get file size by file-attributes.
+
+1999-06-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [elmo-pop3]
+       elmo-pop3-max-of-folder: new implementation.
+
+1999-06-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: display syntax errors in .wl.
+       * tiny additional patch.
+
+1999-06-19  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * ignore defface definition when (featurep 'tinycustom).
+
+1999-06-18  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * Fix: nntp still causes moji-bake.
+
+1999-06-18  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix: '@' expands alias address correctly.
+
+1999-06-16  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * New variable: wl-use-dnd.
+
+1999-06-16  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change: [elmo-nntp]
+       elmo-list-folder uses "LISTGROUP" command.
+       * Change: [elmo-nntp]
+       keep xover settings for each server.
+
+1999-06-16  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * Fix:
+       sjis or euc message causes moji-bake.
+
+1999-06-16  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Change: [elmo-imap4]
+       corresponds cram-md5.
+
+1999-06-15  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Fix: [tm-wl.el]
+       error: Split sender is not specified for `wl-draft-mode'.
+       (pointed out by Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+
+1999-06-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: [wl-ja.texi]
+       explanation for `wl-draft-enable-queuing' was duplicated.
+       (pointed out by Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp>)
+
+1999-06-14  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change:
+       wl-detect-info-directory() detects directory more cleverly.
+
+1999-06-13  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * buffer cache.
+       * New variable: elmo-use-buffer-cache
+       * buffer cache prefetching is implemented.
+       * New variable: wl-cache-prefetch-folder-type-list.
+       * New variable: elmo-buffer-cache-size.
+       * New variable: wl-cache-prefetch-folder-list.
+       * New variable: wl-summary-no-mime-folder-list.
+
+1999-06-13  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * WL-MK:
+         Fix: wl-texinfo-format() requires 'wl-vars.
+         Change: `WL_TEXINFO_NOTAGIFY' was abolished.
+         Change: Don't keep back `wl-ja.info' in the source-tree when
+                 installing.
+
+1999-06-13 Sen Nagata <sen@eccosys.com>
+
+       * New file: utils/wl-use-agent.el, utils/rfc2368.el
+
+1999-06-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix:
+       argunemt for elmo-imap4-get-connection was invalid.
+       (pointed out by <kokada@tamaru.kuee.kyoto-u.ac.jp>)
+       * 2.0.0 - "Mmmbop"
+       * Change:
+       if wl-summary-partial-highlight-above-lines is nil, use
+       wl-summary-highlight-partial-threshold to highlight summary lines.
+       * Change:
+       Updated util/wl-user-agent.el provided by Sen Nagata <sen@eccosys.com>
+       (pointed out by OKUNISHI -GTO- Fujikazu
+       <fuji0924@mbox.kyoto-inet.or.jp>).
+
+1999-06-10  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       error occurs when accessing to imap4 or nntp access group
+       if port number is not default value.
+
+1999-06-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Rename:
+       ChangeLog.en -> ChangeLog
+       ChangeLog -> ChangeLog.ja
+       * Add: [wl-ja.texi]
+       added explanation of variable `wl-plugged'.
+       (adviced by Daisuke Ikeda <daisuke@cc.kyushu-u.ac.jp>)
+
+1999-06-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * New variable:
+       elmo-default-pop3-ssl, elmo-default-nntp-ssl, elmo-default-imap4-ssl.
+       * Rename:
+       elmo-nntp-port -> elmo-default-nntp-port
+       elmo-imap4-port -> elmo-default-imap4-port.
+       (Adviced by Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>)
+       * Change: [elmo]
+       use SSL if "!" is specified in the tail of folder name of
+       imap4, nntp, pop3.
+       * Fix: [elmo]
+       connection cache for imap4, nntp, pop3 are conflicted.
+
+1999-06-09  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * New variable: elmo-default-pop3-server.
+       * Fix: [mmelmo-imap4.el].
+       * Fix: [wl-ja.texi].
+
+1999-06-08  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Change:
+       port nunber can be specified in IMAP4 folder name.
+
+1999-06-07  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * Fix:
+       preserve message order in trash folder.
+       * Change:
+       wl-summary-pick can use field names in elmo-msgdb-extra-fields.
+
+1999-06-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       wl-summary-jump-to-parent-message() precedes In-Reply-To.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Change:
+       if From field matches wl-from, preserve To, Cc, Newsgroups in reply.
+       (adviced by TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>)
+
+1999-06-06  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * unread message is not highlighted in
+       wl-folder-mark-as-read-all-entity, wl-folder-sync-entity,
+       wl-folder-prefetch-entity on sticky summary.
+
+1999-06-05  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       wl-folder-no-auto-check-folder-p precedes wl-auto-check-folder-list.
+       * Fix:
+       wl-summary-switch-to-clone-buffer doesn't copy
+       wl-summary-buffer-new-count and wl-summary-buffer-unread-count.
+       * Fix:
+       wl-folder-empty-trash doesn't show summary.
+       * Fix:
+       wl-summary-goto-folder-subr causes error in recenter.
+       * Fix:
+       suppress warnings while byte-compiling bbdb-wl.el with bbdb2.
+       * New variable:
+       wl-folder-suspend-hook.
+
+1999-06-06  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix:
+       "V" requires sync update. also, "C-u V" requires sync update.
+
+1999-06-04  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: [wl-draft.el (wl-draft-reedit)]
+       bind change-major-mode-hook to nil to avoid font-lock.
+       * Fix: [wl-message.el (wl-message-refer-article-or-url)]
+       move cursor in the summary buffer.
+
+1999-06-03  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       when move from sticky summary, temp-mark is deleted but
+       highlight remains.
+       * Fix:
+       make wl-summary-buffer-copy-list buffer-local-variables.
+       * Change:
+       when entering summary, use set-buffer instead of switch-to-buffer
+       if function is not called interactive.
+
+1999-06-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Fix: implemented elmo-imap4-identical-name-space-p.
+       (pointed out by Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp>)
+
+1999-06-03  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix: strange behavior of wl-draft-exit
+       when sticky summar exists.
+       * Fix: mR and mf are duplicated in menubar.
+       * Fix: wl-summary-jump-to-current-message.
+
+1999-06-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change: [WL-MK]
+       compile and install "bbdb-wl" if BBDB exists in install-package for
+       XEmacs.
+       * New variable: wl-summary-keep-cursor-command
+       command list for keep cursor.
+       * Change: [mmelmo.el, mmelmo-imap4.el]
+       correspond to FLIM 1.13 API.
+
+1999-06-02  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change: [WL-MK]
+       compile and install "bbdb-wl" if BBDB exists.
+
+1999-06-02  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Fix:
+       suppressed warnings while byte-compiling elmo-pop3.el
+       * Fix: [WL-MK]
+       second make causes error after changing elmo-*.el
+
+1999-06-02  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Fix:
+       new message is not highlighted in sticky summary updating.
+
+1999-06-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * branched from 1.0.1.
+
+1999-06-01  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * Change:
+       if summary buffer already exists, don't update and keep cursor
+       position when entering summary.
+       * New variable: wl-ask-range
+       if non-nil, 'g' uses value of wl-folder-sync-range-alist.
+       * Change:
+       store history of wl-summary-read-folder in wl-read-folder-hist.
+       * New command: wl-summary-goto-last-visited-folder
+
+1999-06-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.1 - "The Look"
+       * Change:
+       deleted wl-ja.info from package.
+
+1999-06-01  Sen Nagata <sen@eccosys.com>
+
+       * New file: [wl-user-agent.el]
+       support interface of compose-mail.
+
+1999-05-31  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Change:
+       when draft is finished by sending or quitting, resume folder window
+       when wl-stay-folder-window is non-nil.
+
+1999-05-31  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       wl-folder-sync-range-alist takes effect when
+       entered to folder from folder mode.
+       (pointed out by Toshihiro KAMISHIMA <kamisima@etl.go.jp>).
+       * Fix:
+       multi-reply/forward causes error when wl-draft-reply-buffer-style
+       is 'full.
+       (pointed out by A.SAGATA <sagata@nttvdt.hil.ntt.co.jp>).
+       * Change:
+       don't load msgdb when entered to the sticky summary.
+       (advised by Masahiro MURATA <muse@ba2.so-net.ne.jp>)
+       * Fix:
+       wl-summary-exit saves msgdb uselessly.
+
+1999-05-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Fix: [wl-mime.el, tm-wl.el]
+         regexp was not regexp-quote'ed in
+         (tm-)wl-mime-combine-message/partial-pieces()
+
+1999-05-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Change:
+       speed up elmo-localdir-search.
+
+1999-05-26  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * Change:
+       speed up elmo-archive-search.
+
+1999-05-25  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Change:
+       speed up  elmo-move-msgs() for localdir, localnews.
+       new variable `elmo-localdir-lockfile-list' must be specified for
+       MDA like procmail.
+       * Change:
+       speed up some functions.
+
+1999-05-24  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * Change:
+       support SSL for POP3.
+       * Change:
+       in elmo-pop3-get-spec, change type of variable port from string
+       to integer.
+       * Fix:
+       elmo-default-pop3-port,elmo-default-pop3-authenticate-type does
+       not take effect.
+
+1999-05-24  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Fix:
+       customize causes some mismatches.
+
+1999-05-24  Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Change: wl-use-highlight-mouse-line' s default value is set to nil.
+
+1999-05-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Rename:
+       WL-ELS -> WL-MK
+
+1999-05-20  Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Change:
+       removed delete-other-windows () in wl-exit ().
+       * Fix:
+       Make wl-summary-force-exit interactive
+       (pointed out by Ishikawa Ichiro <ichiro@mail.ne.jp>).
+
+1999-05-20 Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp>
+
+       * Fix:
+       highlight is not active on ttys when device-class is color.
+
+1999-05-20  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Add: [wl-ja.texi]
+       about highlights.
+
+1999-05-19  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * Add:
+       wl-highlight-signature-separator.
+
+1999-05-19  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * Fix:
+       wl-summary-jump-to-message-by-message-id does not work well when
+       parent message is hidden in closed threads.
+
+1999-05-19  Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * Fix:
+       wl-summary-msgdb-load-async.
+       * Change:
+       timing of set-buffer in wl-summary-goto-folder.
+       * Fix:
+       wl-summary-mark-as-read-all does not work well when target
+       messages is hidden in closed threads.
+       (pointed out by Hajime Ohsawa <ohsawa@mxq.mesh.ne.jp>).
diff --git a/etc/ChangeLog.3.ja b/etc/ChangeLog.3.ja
new file mode 100644 (file)
index 0000000..aaacf5e
--- /dev/null
@@ -0,0 +1,3066 @@
+2000-03-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0 - "Overjoyed"
+
+2000-03-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-refile.el (wl-refile-guess-func-list): \e$BJQ?tDj5A$r=$@5!#\e(B
+       (KOYAMA Tetsuji <koyama@hoge.org> \e$B$5$s$h$j8f;XE&\e(B)
+       * 1.1.0pre6 - "Overjoyed-pre6"
+       * wl-folder.el (wl-create-folder-entity-from-buffer): localnews \e$B$NDj5A\e(B
+       \e$B$,$"$@L>Dj5A$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+       (AOXI Tenghe <fuji0924@mbox.kyoto-inet.or.jp> \e$B$5$sB>$h$j8f;XE&\e(B)
+
+2000-03-23  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * wl-summary.el (wl-summary-mode-menu-spec): wl-draft \e$B$r\e(B
+       wl-summary-write \e$B$KJQ99!#\e(B
+       (wl-summary-msg-marked-as-target):
+       wl-summary-msg-marked-as-temp \e$B$+$i2~L>!#\e(B
+       * wl-thread.el (wl-thread-close-all): \e$B6I=jJQ?tL>$rJQ99!#\e(B
+
+2000-03-22  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-refile.el (wl-refile-guess-func-list): \e$B?75,JQ?t!#\e(B
+       (wl-refile-guess): wl-refile-guess-func-list \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+2000-03-22  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el: Byte compile \e$B$N\e(B Warning \e$B$r8:$i$7$?!#\e(B
+       * wl-xmas.el,wl-mule.el,wl-nemacs.el (wl-make-modeline): \e$BDj5A!#\e(B
+       XEmacs \e$B$G$O%W%i%0$N%"%$%3%sI=<($r%G%U%)%k%H$K$7$?!#\e(B
+       (Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp> \e$B$5$s$h$j8f=u8@\e(B)
+       * wl-util.el (wl-make-modeline-subr): wl-make-modeline \e$B$+$i2~L>!#\e(B
+       * utils/bbdb-wl.el (bbdb-wl-update-record): Sticky summary \e$BBP1~!#\e(B
+       (bbdb-wl-update-record, bbdb-wl-get-update-record):
+       raw buffer \e$B$,\e(B multibyte \e$B$K$J$i$J$$$h$&$K$7$?!#\e(B
+       * wl-draft.el (wl-draft-reply): \e$BF1MM!#\e(B
+       * 1.1.0pre5 - "Overjoyed-pre5"
+
+2000-03-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * NEWS.ja: \e$B?75,%U%!%$%k!#\e(B
+       * elmo-maildir.el (elmo-maildir-list-folders):
+       elmo-have-link-count \e$B$r\e(B nil \e$B$K94B+\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@\e(B)\e$B!#\e(B
+       * wl-summary.el (wl-summary-edit-addresses-subr):
+       \e$B%"%I%l%9$r\e(B downcase \e$B$9$k$h$&$K$7$?!#\e(B
+
+2000-03-18  TAKAHASHI Kaoru <nil@din.or.jp>
+
+       * NEWS: \e$B?75,%U%!%$%k!#\e(B
+
+2000-03-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-message.el (wl-message-follow-current-entity):
+       \e$B%*%j%8%J%k%P%C%U%!$r;2>H$9$k$h$&$K$7$?\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       * elmo-maildir.el (elmo-maildir-list-folders):
+       Maildir \e$B$K$J$C$F$$$k$+$I$&$+%A%'%C%/$9$k$h$&$K$7$?!#\e(B
+       (<hermit@lei.homeip.net> \e$B$5$s$N8f;XE&\e(B)
+
+2000-03-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-folder.el (wl-create-folder-entity-from-buffer): \e$B6uGr$,#28D0J>e\e(B
+       \e$B$"$k>l9g$K2r@O$K<:GT$9$k$N$r=$@5!#\e(B
+       * wl-summary.el (wl-summary-edit-addresses): \e$B%*%j%8%J%k%P%C%U%!$+$i\e(B
+       \e$B%"%I%l%9>pJs$rF@$k$h$&$K$7$?!#\e(B
+       (wl-summary-prefetch): wl-prefetch-threshold \e$B$r\e(B nil \e$B$K94B+$9$k$N$O\e(B
+       \e$B$d$a$?!#\e(B
+
+2000-03-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0pre4 - "Overjoyed-pre4"
+       * \e$B%(%i!<%a%C%;!<%8$N:G8e$,\e(B "." \e$B$G=*$i$J$$$h$&$K$7$?!#\e(B
+       * elmo/elmo-archive.el (elmo-archive-copy-msgs): same-number \e$B$N$H$-$K\e(B
+       maildir \e$B$J$i%U%!%$%kL>$=$N$^$^$@$H;W$o$J$$$h$&$K$7$?!#\e(B
+       * wl-expire.el (wl-expire-archive-get-folder): elmo-safe-filename \e$B$N\e(B
+       \e$BBe$o$j$K\e(B elmo-replace-msgid-as-filename \e$B$r;H$&$h$&$K$7$?!%\e(B
+       * wl-folder.el (wl-folder-goto-folder-subr): \e$B%G%U%)%k%H$r\e(B
+       wl-default-folder \e$B$H$7$?!%\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$N8f=u8@\e(B)
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       \e$B%U%)%k%@L>$K6uGr$,4^$^$l$F$$$F$b$h$$$h$&$K$7$?!#\e(B
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id):
+       \e$B%+%l%s%H%U%)%k%@$G%?!<%2%C%H$,8+IU$+$C$?>l9g$O\e(B
+       wl-thread-jump-to-msg \e$B$r;H$&$h$&$K$7$?!%\e(B
+
+2000-03-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-summary-skip-mark-list): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el (wl-summary-prefetch): interactive \e$B$N>l9g$@$1\e(B
+       wl-prefetch-threshold \e$B$r\e(B nil \e$B$H$9$k$h$&$K$7$?!#\e(B
+       (Akihiro MOTOKI <motoki@ptl.abk.nec.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       (wl-summary-exec-subr): \e$B%^!<%/Am?t$N?t$(J}$,4V0c$C$F$$$?$N$r=$@5\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       (wl-summary-next, wl-summary-prev): wl-summary-skip-mark-list \e$B$r;H$&\e(B
+       \e$B$h$&$K$7$?!#\e(B
+       (wl-summary-move-cached-regex): defmacro->defun\e$B!#\e(B
+       * etc/ja.Emacs: \e$B99?7!#\e(B
+       * elmo-imap4.el (elmo-imap4-search): from-msgs \e$B$r9MN8$9$k$h$&$K$7$?!#\e(B
+       * elmo-maildir.el (elmo-maildir-search): \e$B=$@5!#\e(B
+       * mmelmo-imap4-1.el (mmelmo-imap4-parse-bodystructure-string):
+       literal \e$B$NFI$_<h$jItJ,$r=$@5!#\e(B
+
+2000-03-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-expire.el: Filter folder \e$B$G\e(B expire \e$B=PMh$J$$>l9g$,$"$k$N$r=$@5$7$?!#\e(B
+       * wl-fldmgr.el: \e$B2~9T$r4^$`%U%)%k%@L>$d$"$@L>$J$I$r07$($J$$$h$&$K$7$?!#\e(B
+
+2000-03-12  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-fldmgr.el (wl-fldmgr-get-path-from-buffer):
+       wl-desktop group \e$B$,JD$8$F$$$k$H$-$K%(%i!<$,=P$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+2000-03-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder.el (wl-folder-mode-menu-spec): \e$BDI2C!"99?7!#\e(B
+
+2000-03-08  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-vars.el (wl-score-files-dir): wl-score-files-directory \e$B$+$i2~L>!#\e(B
+       * wl-score.el (wl-score-edit-file, wl-score-load-file,
+       wl-score-change-score-file): \e$BF1>e!#\e(B
+
+2000-03-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-mime-charset): \e$B%G%U%)%k%HCM$r\e(B x-ctext \e$B$H$7$?!#\e(B
+
+2000-03-08  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-nntp.el (elmo-nntp-list-folders):
+       \e$B%k!<%H%U%)%k%@L>$,\e(B "" \e$B$N$H$-$NIT6q9g$r=$@5!#\e(B
+
+2000-03-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.1.0pre3 - "Overjoyed-pre3"
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       \e$B%m!<%+%k$NL$FI>pJs$r9MN8$7K:$l$F$$$?$N$r=$@5!#\e(B
+       * elmo2.el (elmo-delete-folder): maildir \e$B$b%U%)%k%@:o=|2DG=$H$7$?!#\e(B
+       (elmo-move-msgs): \e$B%m!<%+%k$NL$FI>pJs$,0z$-7Q$,$l$J$$$N$r=$@5!#\e(B
+       * elmo-maildir.el (elmo-maildir-delete-folder): \e$B=q$-D>$7!#\e(B
+       * mmelmo.el (mime-parse-parameters-from-list): mmelmo-imap4.el \e$B$+$i\e(B
+       \e$B0\F0!#\e(B
+       * wl-message.el (wl-mmelmo-message-redisplay): mime-display-header-hook
+       \e$B$r\e(B nil \e$B$K94B+!#\e(B
+       * wl-mime.el (wl-mime-display-message): SEMI \e$B$N%P!<%8%g%sH=Dj$,\e(B
+       \e$B4V0c$C$F$$$?$N$r=$@5!#\e(B
+       (wl-summary-burst): mime-message-structure \e$B$r;2>H$7$J$$$h$&$K$7$?!#\e(B
+       (wl-mime-entity-read-field): \e$B?75,\e(B alias/macro\e$B!#\e(B
+       (wl-mime-combine-message/partial-pieces): wl-mime-entity-read-field
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (mime-edit-user-agent-value): XEmacs beta \e$B$N%P!<%8%g%sI=<($,=EJ#$9$k\e(B
+       \e$B$N$KBP=h\e(B (For SEMI 1.13.4 or earlier)\e$B!#\e(B
+
+2000-03-06  katsuta@cced.mt.nec.co.jp
+
+       * elmo-util.el (elmo-buffer-field-condition-match): std11-field-body
+       \e$B$,\e(B nil \e$B$rJV$9>l9g$KBP=h!#\e(B
+
+2000-03-04  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-prefetch-msg): \e$B%^!<%/$r;2>H$7$J$$\e(B
+       \e$B$h$&$K$7$?!#\e(B
+
+2000-03-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-read-folder): "" \e$B$N$H$-$O%G%U%)%k%H$r;H$&\e(B
+       \e$B$h$&$K$7$?!#\e(B
+       * wl-fldmgr.el, wl-folder.el, etc: \e$B%a%C%;!<%8$OBgJ8;z$G\e(B
+       \e$B;O$^$k$h$&$K$7$?!#\e(B
+       * wl-draft.el (wl-draft-yank-original): kill-ring \e$B$+$i$N\e(B yank \e$B$,\e(B
+       \e$BF0$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+       * mmelmo-1.el (insert-header): mmelmo-insert-sorted-header-from-buffer
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (insert-text-content): \e$B?75,%a%=%C%I!#\e(B
+       (run-hooks 'mmelmo-entity-content-inserted-hook) \e$B$9$k$h$&$K$7$?!#\e(B
+       * utils/bbdb-wl.el (bbdb-wl-show-bbdb-buffer): \e$B?75,4X?t!#\e(B
+       wl-summary-toggle-disp-folder-message-resumed-hook \e$B$KDI2C!#\e(B
+       * 1.1.0pre2 - "Overjoyed-pre2"
+       * elmo-maildir.el (elmo-maildir-sequence-number-internal): \e$B?75,JQ?t!#\e(B
+       (elmo-maildir-make-unique-string):
+       v19 \e$B8~$1$KDj5A$5$l$F$$$J$+$C$?$N$r=$@5!#$^$?!"\e(B
+       elmo-maildir-sequence-number-internal \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (elmo-maildir-temporal-filename): 2 \e$BICBT$?$J$$$h$&$K$7$?!#\e(B
+       (toplevel): (eval-when-compile (require 'cl) \e$B$rDI2C!#\e(B
+       * wl-summary.el (wl-summary-buffer-number-column-detect):
+       re-search-forward \e$B$NJV$jCM$r;H$o$J$$$h$&$K$7$?!#\e(B
+
+2000-03-06  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-pop3.el (elmo-pop3-port-label): typo \e$B=$@5\e(B (port->ssl)\e$B!#\e(B
+       * elmo-nntp.el (elmo-nntp-sync-number-alist):
+       folder-mode\e$B$GL$FI?t$,%^%$%J%9$K$J$C$?$^$^$K$J$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+2000-03-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-switch-to-clone-buffer):
+       wl-summary-buffer-number-column,
+       wl-summary-buffer-number-regexp \e$B$r0z$-7Q$0$h$&$K$7$?!#\e(B
+       (wl-summary-write): \e$B?75,%3%^%s%I!#\e(B'w' \e$B$K%P%$%s%I!#\e(B
+       * wl-draft.el (wl-draft): wl-summary-write \e$B8~$1$NF0:n$rDI2C!#\e(B
+
+2000-03-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache.el (elmo-cache-list-folder-subr): \e$B%G%#%l%/%H%j$rL5;k!#\e(B
+       * wl-summary.el (wl-summary-insert-line): \e$B?75,4X?t!#\e(B
+       (wl-summary-insert-summary, wl-summary-update-thread):
+       `wl-summary-insert-line' \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * wl-thread.el (wl-thread-update-line-on-buffer-sub):
+       \e$BF1>e!#\e(B
+       * WL-MK (wl-info-lang): list \e$B$J$i4^$^$l$k\e(B lang \e$B$rA4It%$%s%9%H!<%k$9$k\e(B
+       \e$B$h$&$K$7$?!#\e(B
+       * elmo/elmo-maildir.el (elmo-maildir-append-msg):
+       new \e$B$G\e(B tmp \e$B$N%U%!%$%kL>$r$=$N$^$^;H$&$h$&$K$7$?!#\e(B
+       (elmo-maildir-list-folders): \e$B%k!<%H$r4^$`$h$&$K$7$?!#\e(B
+
+2000-03-04  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-buffer-set-folder): \e$B%3%i%`?t$N@_Dj$r:o=|!#\e(B
+       (wl-summary-goto-folder-subr): \e$B%3%i%`?t$rF0E*$K8!=P$9$k$h$&$K$7$?!#\e(B
+       (wl-summary-target-mark-forward): \e$B%U%)%o!<%I=g=x$r=$@5!#\e(B
+       (wl-summary-cleanup-temp-marks): \e$B$^$H$a=hM}%^!<%/$r:o=|$9$k$h$&$K$7$?!#\e(B
+
+2000-02-29  nisikawa@nisikawa.org (\e$B@>@n\e(B \e$BN<B@\e(B)
+
+       * wl-draft.el (wl-draft-send-mail-with-pop-before-smtp):
+       \e$B%*%U%i%$%s$G%a!<%k$r\e(B +queue \e$B$K$?$a$k:]$K%(%i!<$,=P$k$N$KBP=h!#\e(B
+
+2000-03-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-thread.el (wl-thread-update-children-number):
+       wl-thread-update-children-number \e$B$+$i2~L>!#\e(B
+       \e$B?75,\e(B hook\e$B!"\e(Bwl-thread-update-children-number-hook \e$B$r8F$V$h$&$K$7$?!#\e(B
+
+2000-03-04  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       wl-folder.el (wl-folder-sync-entity,
+       wl-folder-mark-as-read-all-entity,
+       wl-folder-prefetch-entity): Sticky \e$B8~$1$N%O%$%i%$%H@_Dj$N=$@5!#\e(B
+
+2000-03-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo2.el (elmo-move-msgs): target \e$B$,\e(B 'null \e$B$N$H$-$OL$FI$NJ]B8$r\e(B
+       \e$B%9%-%C%W$9$k$h$&$K$7$?!#\e(B
+       * elmo-maildir.el (elmo-maildir-make-unique-string):
+       elmo-maildir-create-unique-string \e$B$+$iJQ99!#\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f=u8@\e(B)
+       * 1.1.0 pre1 - "Overjoyed-pre1"
+
+2000-03-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft-reply-buffer): \e$B?75,%P%C%U%!%m!<%+%kJQ?t\e(B
+       (wl-draft-reply): `wl-draft-reply-buffer' \e$B$r@_Dj$9$k$h$&$K$7$?!#\e(B
+       (wl-draft-config-exec): `wl-draft-reply-buffer' \e$B$r;2>H$9$k$h$&$K$7$?!#\e(B
+       (wl-draft-reply<var>): \e$BGQ;_!#\e(B
+       * WL-MK, WL-CFG (wl-info-lang): \e$B?75,JQ?t!#\e(B
+       * wl.texi: \e$B?75,%U%!%$%k!#\e(B
+       * Makefile, WL-MK, WL-CFG: ELISPDIR->LISPDIR\e$B!#\e(B
+       (TAKAHASHI Kaoru <kaoru@kaisei.org> \e$B$5$s$h$j8fDs0F\e(B)
+       * elmo-maildir.el: \e$BBgI}$K=q$-D>$7!#\e(B
+       * elmo-util.el, elmo-msgdb.el, elmo-vars.el: maildir \e$B$N5-9f$r\e(B '.'
+       \e$B$H$7$?!#\e(B
+       * wl-folder.el, wl-summary.el, elmo-pop3.el, etc: \e$B%a%C%;!<%8$,BgJ8;z$G\e(B
+       \e$B;O$^$k$h$&$K$7$?!#\e(B
+       * elmo-vars.el (elmo-maildir-folder-path): \e$B?75,JQ?t!#\e(B
+       * elmo-internal.el (elmo-internal-list-folders): 'cache \e$B$H\e(B 'mark \e$B$r\e(B
+       \e$BJV5Q$9$k$h$&$K$7$?!#\e(B
+
+2000-03-02  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-nntp.el: starttls \e$BItJ,$N=$@5!#\e(B
+       * elmo-nntp.el, elmo-imap4.el:
+       list-folders \e$B$G\e(B "!" \e$B%^!<%/$,>C$($F$7$^$&$N$r=$@5!#\e(B
+
+2000-03-01  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-score.el: \e$B%(%i!<%a%C%;!<%8$N\e(B "Illegal" \e$B$r\e(B "Invalid" \e$B$KJQ$($?!#\e(B
+
+2000-03-01  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-refile-subr): \e$B%-%c%C%7%e%U%)%k%@$X$N\e(B
+       \e$B%j%U%!%$%k$GL>A0$rE,@Z$J$b$N$K=$@5!#\e(B
+       * elmo-nntp.el: starttls \e$B$KBP1~\e(B(\e$B<B83E*\e(B)\e$B!#\e(B
+
+2000-03-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache2.el: elmo-cache.el \e$B$K%^!<%8!#\e(B
+       * elmo-internal.el, elmo-util.el, elmo-msgdb.el: cache \e$B%P%C%/%(%s%I$r\e(B
+       internal \e$B$N0lIt$H$7$F07$&$h$&$K$7$?!#\e(B
+
+2000-03-01  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-cache2.el: \e$B?75,%P%C%/%(%s%I\e(B 'cache' \e$BDI2C!#\e(B
+
+2000-02-29  IMAI Takeshi <take-i@ceres.dti.ne.jp>
+
+       * wl-expire.el (wl-folder-expire-entity): Sticky \e$B8~$1$N\e(B
+       \e$B%O%$%i%$%H@_Dj$N=$@5!#\e(B
+
+2000-02-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo2.el (elmo-move-msgs): \e$BL$FI>pJs$r0z$-7Q$0$h$&$K$7$?!#\e(B
+       \e$B0z?t\e(B unread-marks \e$BDI2C!#\e(B
+       (elmo-msgdb-sync): \e$B:o=|!#\e(B
+       * wl-summary.el (wl-summary-exec):
+       elmo-move-msgs \e$B$KL$FI%^!<%/$rEO$9$h$&$K$7$?!#\e(B
+       (wl-summary-edit-petname): To \e$B$d\e(B Cc \e$B$bJT=8BP>]$H\e(B
+       \e$B$J$k$h$&$K$7$?!#\e(B
+       (wl-summary-edit-addresses): wl-summary-edit-petname \e$B$+$iJQL>!#\e(B
+       (wl-summary-edit-petname): \e$B:o=|!#\e(B
+       (wl-summary-mark-as-unread): \e$B%-%c%C%7%e$rM-8z$+$I$&$+$r9MN8!#\e(B
+       * wl-vars.el (wl-summary-toggle-disp-folder-message-resumed-hook)
+       (wl-summary-line-inserted-hook): \e$B?75,\e(B hook\e$B!#\e(B
+       (wl-summary-print-destination): \e$BHs2D;kNN0h$K\e(B
+       'wl-summary-destination \e$B%W%m%Q%F%#$rDI2C$9$k$h$&$K$7$?!#\e(B
+       * wl-thread.el, wl-summary.el: \e$B%5%^%j9T$,\e(B insert \e$B$5$l$?8e!"\e(B
+       wl-summary-line-inserted-hook \e$B$r8F$V$h$&$K$7$?!#\e(B
+       * utils/bbdb-wl.el:
+       wl-summary-toggle-disp-folder-message-resumed-hook \e$B$G%]%C%W%"%C%W$9$k\e(B
+       \e$B$h$&$K$7$?!#\e(B
+
+2000-02-28  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-sync-current-entity \e$B$G$b\e(B Scoring \e$B$9$k$h$&$K$7$?!#\e(B
+       * sticky\e$B%U%)%k%@$G\e(B wl-summary-buffer-disp-msg \e$B$H%P%C%U%!$NI=<($,\e(B
+         \e$B$"$C$F$$$J$$$3$H$,$"$k$N$r=$@5$7$?!#\e(B
+
+2000-02-25  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-message.el (wl-message-refer-article-or-url):
+       wl-summary-jump-to-msg-by-message-id\e$B$r8F$V:]!"5-;v$rH/8+$G$-$J$+$C$?\e(B
+       \e$B>l9g$O!"\e(Bwl-summary-redisplay \e$B$7$J$$$h$&$K$7$?!#\e(B
+       * wl-vars.el (wl-local-domain): \e$B=i4|@_DjJQ99!#\e(B
+       * wl.el (wl-check-environment): wl-local-domain \e$B$r\e(B hostname \e$B$r\e(B
+       \e$B=|$$$?ItJ,$H$_$J$9$h$&JQ99!#\e(B
+       * wl-util.el (wl-draft-make-message-id-string): \e$BF1>e!#\e(B
+
+2000-02-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-expire.el (wl-folder-expire-entity): wl-summary-save-status \e$B$r\e(B
+       \e$B8F$V$h$&$K$7$?!#\e(B
+
+2000-02-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-draft-send-hook): \e$B?75,\e(B hook\e$B!#\e(B
+       * wl-draft.el (wl-draft-send): wl-draft-send-hook \e$B$r8F$V$h$&$K$7$?!#\e(B
+       (Kenichi Sato <ksato@sonycom.com> \e$B$5$s$N8fMWK>\e(B)
+
+2000-02-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-cache.el (elmo-cache-save): \e$B%U%!%$%kL>$,D9$9$.$F%;!<%V$K\e(B
+       \e$B<:GT$9$k>l9g$KHw$($F\e(B (condition-case) \e$B$G3g$k$h$&$K$7$?!#\e(B
+       (Mikya Tani <wani@mx2.nisiq.net> \e$B$5$s$N8fJs9p\e(B)
+       * wl-draft.el: FCC \e$B$K\e(B IMAP \e$B$NF|K\8l%U%)%k%@$,07$($J$+$C$?$N$r=$@5!#\e(B
+       (HIRATA Naoto <hirata-naoto@sannet.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+
+2000-02-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-address.el (wl-address-header-extract-address): '\n' \e$B$r%"%I%l%9\e(B
+       \e$BJ8;zNs$H$_$J$7$F$7$^$&>l9g$,$"$k$N$r=$@5!#\e(B
+       (Tomotaka SUWA (\e$B?[K,\e(B \e$BM'?r\e(B) <cooper@saitama.fujimic.fujisankei-g.co.jp>
+        \e$B$5$s$N8f;XE&\e(B)
+       * mmelmo.el (mmelmo-header-max-column): \e$B?75,JQ?t!#\e(B
+       (Kenichi Sato <ksato@sonycom.com> \e$B$5$s$h$j8fMWK>\e(B)
+       (mmelmo-header-inserted-hook): \e$B?75,\e(B hook.
+       (mmelmo-entity-content-inserted-hook): \e$B?75,\e(B hook.
+       * mmelmo-2.el (mime-insert-text-content): \e$B?75,\e(B entity \e$B%a%=%C%I!#\e(B
+       mmelmo-entity-content-inserted-hook \e$B$r8F$V$h$&$K$7$?!#\e(B
+       * mmelmo.el (mmelmo-insert-sorted-header-from-buffer): elmo-util.el
+       \e$B$+$i0\F0!"\e(B`mmelmo-header-max-column' \e$B$r;H$&$h$&$K$7$?!#\e(B
+       \e$B$^$?!"\e(Bmmelmo-header-inserted-hook \e$B$r8F$V$h$&$K$7$?!#\e(B
+
+2000-02-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-message.el (wl-mmelmo-message-redisplay): wl-mime-display-message
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (Toshihiko Kodama (\e$B>.6L\e(B \e$BMxI'\e(B) <kodama@ayame.mfd.cs.fujitsu.co.jp>
+       \e$B$5$s$N8f;XE&\e(B)
+       * wl-mime.el (wl-mime-display-message): \e$B?75,\e(B macro/alias.
+       * 2.2.18 - "Please Forgive Me"
+       * wl-summary.el (wl-summary-move-cached-regex):
+       unplugged \e$B$G$b\e(B 'D' \e$B%^!<%/$r%9%-%C%W$9$k$h$&$K$7$?!#\e(B
+       * elmo-msgdb.el (elmo-msgdb-expand-path): IMAP4 \e$B$N\e(B INBOX \e$B$r\e(B downcase
+       \e$B$9$k$h$&$K$7$?\e(B(Takeshi Chiba <chiba@d3.bs1.fc.nec.co.jp> \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       \e$B%"%/%;%9%U%)%k%@Dj5A$K\e(B '}' \e$B$r4^$s$G$b$h$$$h$&$K$7$?!#\e(B
+       * wl-message.el (wl-mmelmo-message-redisplay):
+       mime-display-message \e$B$K%a%8%c!<%b!<%I$rEO$9$h$&$K$7$?!#\e(B
+
+2000-02-18  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-demo.el: Emacs 21 \e$BBP1~$N=$@5!#\e(B
+
+2000-02-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mime-entity-buffer): \e$B%+%l%s%H%P%C%U%!$,\e(B
+       \e$BJQ2=$7$J$$$h$&$K$7$?!#\e(B
+       \e$B$^$?!"$^$@%U%'%C%A$5$l$F$$$J$$>l9g!"%U%'%C%A$9$k$h$&$K$7$?!#\e(B
+       * mmelmo-imap4-2.el (mime-write-entity-content):
+       \e$B?75,%a%=%C%I!#%;!<%V;~$K%9%-%C%W$7$?%Q!<%H$r%U%'%C%A$9$k!#\e(B
+       * mmelmo-imap4-2.el (mmelmo-imap4-fetched):
+       \e$B?75,%P%C%U%!%m!<%+%kJQ?t!#\e(B
+       * elmo-imap4.el (elmo-imap4-server-namespace):
+       \e$B?75,%P%C%U%!%m!<%+%kJQ?t!#\e(B
+       (elmo-imap4-open-connection):
+       elmo-imap4-server-namespace \e$B$r@_Dj$9$k$h$&$K$7$?!#\e(B
+       (elmo-imap4-parse-namespace): \e$B?75,4X?t!#\e(B
+       (elmo-imap4-process-folder-list):
+       elmo-imap4-server-namespace \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (elmo-imap4-extra-namespace-alist): \e$B?75,JQ?t!#\e(B
+       * wl-util.el (wl-string-member, wl-string-match-member,
+       wl-string-delete-match, wl-string-match-assoc, wl-string-rassoc):
+       elmo-* \e$B$K2~L>!"\e(Bdefalias \e$B$H$7$?!#\e(B
+
+2000-02-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * bbdb-wl.el: wl-summary-toggle-disp-folder-off-hook \e$B$N@_Dj$rDI2C!#\e(B
+
+2000-02-16  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-demo.el: frame \e$B$N\e(B font parameter \e$B$G\e(B <CHARSET_REGISTRY> \e$B$,\e(B
+       \e$BM?$($i$l$F$$$k>l9g$K!"\e(Bfont-info \e$B$+$iCf1{$N:BI8$r7W;;$9$k$h$&$K$7$?!#\e(B
+
+2000-02-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-toggle-disp-folder): \e$B%&%#%s%I%&%5%$%:$,\e(B
+       \e$B>.$5$/$J$k>l9g$,$"$k$N$r=$@5!#\e(B
+       (Shigeru OKUMURA <sokumura@jaist.ac.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-draft.el (wl-draft-insert-x-face-field-here): \e$B:G=i$N6uGr$r:o=|!#\e(B
+       (Akihiro MOTOKI <mokkun@iname.com> \e$B$5$s$N8f;XE&\e(B)
+
+2000-02-12  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo/elmo-localdir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       `timezone-make-date-arpa-standard' \e$B$K\e(B `current-time-zone' \e$B$NCM$r\e(B
+       \e$BEO$9$h$&$K$7$?!#\e(B
+
+2000-02-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo/mmelmo-imap4-2.el (mmelmo-imap4-node-id-to-string):
+       "header" -> "0"\e$B!#\e(B
+       * elmo/mmelmo-imap4-1.el (mmelmo-imap4-node-id-to-string):
+       \e$BF1>e!#\e(B
+       (TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-message.el (wl-message-follow-current-entity): wl-draft-reply
+       \e$B$N0z?t$K%5%^%j%P%C%U%!$rEO$9$h$&$K$7$?!#\e(B
+       * wl-summary.el (wl-summary-reply): wl-draft-reply \e$B$N0z?t$K\e(B
+       current-buffer \e$B$rEO$9$h$&$K$7$?!#\e(B
+       (wl-summary-msgdb-load-async): mailbox \e$B$r\e(B "" \e$B$G3g$k$h$&$K$7$?!#\e(B
+       * elmo-imap4.el: \e$BF1>e!#\e(B
+
+2000-02-09  UENO Kazuaki <kazu@a-u.net>
+
+       * wl-draft.el (wl-draft-queue-flush): elmo-dop-flush-confirm
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+2000-02-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft): \e$B=i4|2=$N=g=xJQ99!#\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$N8fJs9p$K4p$E$/\e(B)
+
+2000-02-08  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-score.el (wl-summary-score-update-all-lines):
+       \e$B4{FI$K$7$?%a%C%;!<%8$K\e(B read-uncached mark \e$B$rIU$1$k;~$K%U%)%k%@<oJL$r\e(B
+       \e$B9MN8$9$k$h$&$K$7$?!#\e(B
+
+2000-02-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-target-mark-prefetch):
+       \e$B4{FIL$%-%c%C%7%e%^!<%/$,>C$($J$$$N$r=$@5!#\e(B
+       (Hironori Fukuchi <nory@valis.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-summary.el (wl-summary-target-mark-prefetch):
+       \e$B%W%j%U%'%C%A$N?JD=$rI=<($9$k$h$&$K$7$?!#$^$?!"\e(B
+       \e$B%-%c%C%7%e$7$J$+$C$?>l9g$O\e(B '*' \e$B%^!<%/$r;D$9$h$&$K$7$?!#\e(B
+       * wl-dnd.el (start-drag): static-cond \e$B$GDj5A$7$J$*$7$?!#\e(B
+       * elmo2.el (elmo-buffer-cache-message): \e$BFI$_=P$7Cf$K\e(B
+       quit \e$B$9$k$H0c$&%a%C%;!<%8$rI=<($7$F$7$^$&$N$r=$@5!#\e(B
+       * elmo-filter.el (elmo-filter-list-folder-important):
+       elmo-search \e$B$N2s?t$r8:$i$7$?\e(B
+       (Akihiro MOTOKI <mokkun@iname.com> \e$B$5$s$N8f=u8@\e(B)\e$B!#\e(B
+
+2000-02-07  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-xmas.el (wl-highlight-folder-current-line):
+       set-extent-properties \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+
+       * wl-draft.el (wl-smtp-extension-bind): Fixed.
+
+2000-02-07  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo-util.el (elmo-buffer-field-condition-match):
+       \e$B%X%C%@$NCM$r\e(B eword-decode-string \e$B$G%G%3!<%I$7$F$+$iHf3S$9$k$h$&$K$7$?!#\e(B
+
+2000-02-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-dnd.el: \e$B%P%$%H%3%s%Q%$%k;~$N\e(B Warning \e$B$r8:$i$7$?!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$N8f;XE&\e(B)
+       * utils/sasl/sha1.el, utils/sasl/md5-el.el,
+       utils/sasl/hex-util.el, utils/sasl/sha1-el.el: \e$B:G?7HG$K\e(B update\e$B!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$N8f;XE&\e(B)
+       * wl-vars.el (wl-demo-use-bitmap): wl-demo-display-logo \e$B$KJQ99!#\e(B
+       (wl-demo-display-logo): \e$B?75,JQ?t!#\e(B
+       * wl-demo.el: wl-demo-display-logo \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+2000-02-07  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-vars.el (wl-demo-use-bitmap): \e$B=i4|CM@_DjJ}K!$rJQ$($?!#\e(B
+
+2000-02-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.17 - "One Of Us"
+       * elmo-util.el (elmo-y-or-n-p): \e$B?75,4X?t!#\e(B
+       * elmo-vars.el (elmo-dop-flush-confirm): \e$B?75,JQ?t!#\e(B
+       * elmo-dop.el (elmo-dop-queue-flush): elmo-y-or-n-p,
+       elmo-dop-flush-confirm \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * elmo-imap4.el (elmo-delete-msgids): \e$B?JD=$rI=<($9$k$h$&$K$7$?!#\e(B
+       \e$B$^$?!"\e(Bexpunge \e$B$O:G8e$K#12s$@$1<B9T$9$k$h$&$K$7$?!#\e(B
+
+2000-02-07  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-folder.el, wl-xmas.el: -nw \e$B$G5/F0$5$l$?\e(B XEmacs \e$B$G\e(B frame \e$B$r\e(B
+       \e$B3+$$$?>l9g$G$b%"%$%3%s$,I=<($5$l$k$h$&$K$7$?!#\e(B
+
+2000-02-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-highlight.el (wl-highlight-summary-target-face): \e$B?75,\e(B face\e$B!#\e(B
+       (temp-face \e$B$+$i2~L>\e(B)
+       * wl-vars.el (wl-demo-use-bitmap): wl-demo.el \e$B$+$i0\F0!#\e(B
+       defcustom \e$B$K$7$?!#$^$?!"=i4|CM$r\e(B (module-installed-p 'bitmap) \e$B$H$7$?!#\e(B
+       * wl-demo.el (wl-demo-use-bitmap): wl-vars.el \e$B$K0\F0!#\e(B
+       * WL-CFG: wl-demo-use-bitmap \e$B$r:o=|!#\e(B
+       * elmo-vars.el: Require 'poe, \e$B%P%$%H%3%s%Q%$%k;~$N\e(B warning \e$B$r8:$i$9!#\e(B
+       * wl-nemacs.el (buffer-disable-undo, rassoc, delete, string-to-number,
+       window-live-p, completing-read, accept-process-output,
+       get-buffer-window): \e$B:o=|!#\e(B
+
+2000-02-04  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-demo.el (wl-demo): wl-demo-use-bitmap \e$B$r<B9T;~$K%A%'%C%/$9$k\e(B
+       \e$B$h$&$K$7$?!#\e(B
+
+2000-02-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * INSTALL, INSTALL.ja: tm-8 \e$B$N\e(B URL \e$B$r99?7!#\e(B
+       * utils/hmac -> utils/sasl \e$B$K2~L>!#\e(B
+       * WL-ELS: HMAC->SASL\e$B!#\e(B
+       * WL-MK: HMAC->SASL\e$B!#\e(B
+
+2000-02-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-localdir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       format-time-string \e$B$r;H$&$N$r;_$a!"\e(Btimezone-make-date-arpa-standard
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * elmo-vars.el (elmo-time-format): \e$B:o=|!#\e(B
+
+2000-02-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-dop.el (elmo-dop-queue-flush): append-operations \e$B$N%-%c%s%;%k\e(B
+       \e$B=hM}$rDI2C!#\e(B
+       * wl-summary.el (wl-summary-refile-prev-destination,
+       wl-summary-copy-prev-destination): Fixed.
+       (IMAI Takeshi <take-i@ceres.dti.ne.jp> \e$B$5$s$N8fJs9p\e(B)
+
+2000-02-02  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-vars.el (wl-prefetch-confirm-threshold): \e$BGQ;_$7!"\e(B
+       wl-prefetch-confirm \e$B$H\e(B wl-prefetch-threshold \e$B$KJ,N%!#\e(B
+       (wl-prefetch-confirm, wl-prefetch-threshold): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el (wl-summary-prefetch-msg): wl-prefetch-confirm,
+       wl-prefetch-threshold \e$B$K=>$&$h$&$K$7$?!#\e(B
+
+2000-02-02  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features): smtp-authenticate-type \e$B$,\e(B symbol
+       \e$B$K$J$C$?$N$KBP1~!#\e(B
+
+2000-01-31  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-nntp.el (elmo-nntp-get-folders-info): Fixed.
+
+2000-01-31  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-demo.el: Emacs21 \e$B$G\e(B wl-logo.xpm \e$B$rI=<($9$k$h$&$K$7$?!#\e(B
+
+2000-01-30  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * INSTALL, INSTALL.ja: Fixed.
+
+2000-01-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * WL-ELS: \e$B4{$K\e(B open-database \e$B$,Dj5A:Q$_$N>l9g$b\e(B     ELMO-MODULES \e$B$K\e(B
+       elmo-database \e$B$rDI2C$9$k$h$&$K$7$?!#\e(B
+
+2000-01-30  Akihiro MOTOKI <mokkun@iname.com>
+
+       * elmo-loacaldir.el
+       (elmo-localdir-msgdb-create-overview-entity-from-file):
+       Date: \e$B%U%#!<%k%I$,$J$$>l9g$O!"%U%!%$%k$N:G=*99?7F|$rF|IU$H$7$FI=<($9$k\e(B
+       \e$B$h$&$K$7$?!#\e(B
+       * elmo-msgdb.el (elmo-msgdb-create-overview-from-buffer):
+       \e$B0z?t\e(B time \e$B$rDI2C!#\e(B
+       * elmo-vars.el (elmo-time-format): \e$B?75,JQ?t!#\e(B
+
+2000-01-29  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id):
+       NNTP \e$B%5!<%P$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+       (wl-summary-jump-to-msg-by-message-id-via-nntp)
+       \e$B%5!<%P;XDj;~$K!"C1$J$k%5!<%PL>$@$1$G$J$/!"\e(B
+       "-:username@servername:8119!"\e$B$N$h$&$J;XDj$b$G$-$k$h$&$K$7$?!#\e(B
+       * elmo-nntp.el (elmo-nntp-folder-postfix): \e$B0z?t\e(B ssl \e$BDI2C!#\e(B
+
+2000-01-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-vars.el (elmo-database-dl-module, elmo-database-dl-handle):
+       \e$B?75,JQ?t!#\e(B
+       (toplevel): elmo-database-dl-handle \e$B$,\e(B non-nil \e$B$J$i\e(B
+       emacs_database_init \e$B$r\e(B dynamic_call \e$B$9$k$h$&$K$7$?!#\e(B
+       (elmo-use-database): open-database \e$B$,$"$l$P\e(B elmo-use-database \e$B$r@_Dj!#\e(B
+       * WL-ELS: 'dynamic-link \e$B$,$"$l$P\e(B ELMO-MODULES \e$B$K\e(B elmo-database \e$B$rDI2C!#\e(B
+
+2000-01-28  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-demo.el (wl-demo): Fix copyright information.
+
+2000-01-27  Takeshi Chiba <chiba@d3.bs1.fc.nec.co.jp>
+
+       * mmelmo-imap4-2.el ([luna]mime-entity-buffer):
+       section "0" -> "header".
+
+2000-01-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-node-id-to-string):
+       section "0" -> "header".
+       * mmelmo-imap4-1.el: \e$BF1>e!#\e(B
+
+2000-01-26  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-imap4.el (elmo-imap4-create-folder):
+       UW imapd-4.7 \e$B$G?7$7$/\e(B folder \e$B$,:n$l$J$$LdBj$X$NBP=h!#\e(B
+
+2000-01-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-parse-bodystructure-string):
+       BODYSTRUCTURE \e$B$N<h$j=P$7J}$r=$@5!#\e(B
+       (mmelmo-imap4-parse-bodystructure-object): content-type \e$B$N\e(B subtype
+       \e$B$,\e(B NIL \e$B$N>l9g$r9MN8$9$k$h$&$K$7$?!#\e(B
+       * mmelmo-imap4-1.el: \e$BF1>e!#\e(B
+       * utils/hmac/unique-id.el: \e$B?75,%U%!%$%k!#\e(B
+       * WL-ELS (HMAC-MODULES): scram-md5, digest-md5, unique-id \e$B$rDI2C!#\e(B
+       * wl-dnd.el (wl-dnd-drop-func): Fixed.
+       * 2.2.16 - "No Son Of Mine"
+
+2000-01-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-summary-reserve-mark-list): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el: temp-mark -> target-mark \e$BL>A0JQ99!#\e(B
+       \e$B0l;~%^!<%/7O%3%^%s%I$G\e(B `wl-summary-reserve-mark-list'
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * wl-score.el, wl-thread.el: \e$BF1>e!#\e(B
+       * wl-folder.el (toplevel): require 'wl \e$B$9$k$h$&$K$7$?!#\e(B
+       * elmo-util.el (elmo-imap4-encode-string): optional \e$B0z?t$rDI2C!#\e(B
+
+2000-01-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mule.el, wl-xmas.el, wl-nemacs.el (wl-summary-format-date):
+       \e$B:o=|!"\e(Bwl-summary.el \e$B$X0\F0!#\e(B
+       * utils/hmac/lisp/sasl.el, utils/hmac/lisp/digest-md5.el,
+       utils/hmac/lisp/scram-md5.el: \e$B:G?7HG$K\e(B update\e$B!#\e(B
+       * wl-fldmgr.el (wl-fldmgr-ext): \e$B3NG'%a%C%;!<%8$rJQ99!#\e(B
+       * doc/TODO.ja: \e$B99?7!#\e(B
+
+2000-01-22  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * wl-folder.el (toplevel): Fixed menu.
+
+2000-01-21  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-imap4.el: DIGEST-MD5 \e$B$KBP1~!#\e(B
+       * elmo-pop3: CRAM-MD5, DIGEST-MD5, SCRAM-MD5\e$B$KBP1~!#\e(B
+
+2000-01-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (toplevel): \e$B%j!<%8%g%s7O%-!<%P%$%s%I$NDj5A0LCV$rJQ99!#\e(B
+       (wl-summary-prefetch-region): \e$BJD$8$?%9%l%C%I$N%a%C%;!<%8$r%W%j%U%'%C%A\e(B
+       \e$B$7$J$$$N$r=$@5!#\e(B(OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$sB>$h$j8fJs9p\e(B)
+       * elmo: append-msg, move-msgs \e$B%a%=%C%I$K0z?t\e(B no-see \e$B$rDI2C!#\e(B
+       * elmo-pipe: move-msgs \e$B$G\e(B 'no-see \e$B$r;XDj$9$k$h$&$K$7$?!#\e(B
+       * wl-folder.el (wl-folder-mimic-kill-buffer): \e$B?75,%3%^%s%I!#\e(B
+       (toplevel): C-xk \e$B$K\e(B` wl-folder-mimic-kill-buffer' \e$B$r!"\e(B
+       C-xC-s \e$B$K\e(B `wl-save' \e$B$r$=$l$>$l3d$jEv$F!#\e(B
+
+2000-01-19  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-nemacs.el (accept-process-output): \e$B?75,4X?t!#\e(B
+       * Makefile: \e$B%3%a%s%H=$@5!#\e(B
+
+2000-01-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-folder-identical-system-p): \e$BJL%5!<%P$G\e(B
+       \e$BF1$8L>A0$N%a!<%k%\%C%/%9$,F10l;k$5$l$F$7$^$&$N$r=$@5!#\e(B
+       (Tatsuya Matsui <t.matsui@rdc.east.ntt.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-address.el (wl-complete-field-body-or-tab): \e$B0z?t$r$J$/$7$?!#\e(B
+
+2000-01-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el
+       (wl-prefetch-confirm-threshold, wl-cache-fetch-threshold): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el (wl-summary-prefetch-msg):
+       wl-prefetch-confirm-threshold \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (wl-cache-prefetch-message): wl-cache-fetch-threshold \e$B$r;H$&$h$&\e(B
+       \e$B$K$7$?!#\e(B
+
+2000-01-13  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-message.el
+       (wl-message-decide-backend, wl-normal-message-redisplay):
+       wl-fetch-confirm-threshold \e$B$,\e(B nil \e$B$J$i3NG'$7$J$$$h$&$K$7$?!#\e(B
+
+2000-01-11  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-draft.el (wl-draft-delete): wl-draft-buffer-file-name \e$B$,\e(B
+       nil \e$B$N;~$r9MN8$9$k$h$&$K$7$?!#\e(B
+
+2000-01-11  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * wl-draft.el (wl-draft-save-and-exit): \e$B4X78$J$$%P%C%U%!$r\e(B kill
+       \e$B$7$F$7$^$&$3$H$,$"$k$N$r=$@5!#\e(B
+
+2000-01-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.15 - "More Than Words"
+
+2000-01-11  Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
+
+       * samples/ja/dot.folders, samples/en/dot.folders: '\e$B%"%/%;%9%0%k!<%W\e(B'
+       \e$B$N5-=R$r2C$($?!#\e(B
+
+2000-01-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el, tm-wl.el (wl-draft-preview-message): \e$BA4%X%C%@$rI=<(\e(B
+       \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary.el (wl-summary-mode): tab-width \e$B$r@_Dj$7$J$$$h$&$K$7$?!#\e(B
+       (Yoshinari NOMURA <nom@csce.kyushu-u.ac.jp> \e$B$5$s$N8f;XE&\e(B)
+       (wl-summary-copy, wl-summary-refile): wl-draft-folder \e$B$K%3%T!<\e(B
+       \e$B$G$-$J$$$h$&$K$7$?\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)\e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       (wl-summary-overview-entity-compare-by-date): \e$B%(%i!<$rL5;k\e(B
+       (MIZUHARA Bun <mizuhara@acm.org> \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       * wl.el (wl-plugged-mode): inhibit-read-only \e$B$N@_Dj$r:o=|!#\e(B
+       (Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-vars.el (wl-draft-reedit-hook): \e$B?75,\e(B hook\e$B!#\e(B
+       * wl-draft.el (wl-draft-save, wl-draft-mimic-kill-buffer):
+       \e$B?75,4X?t!#\e(B
+       (wl-draft): \e$B4{$K;H$o$l$F$$$k%P%C%U%!L>$O;H$o$J$$$h$&$K$7$?!#\e(B
+       (wl-draft-reedit): wl-mail-setup-hook \e$B$r\e(Brun-hook\e$B$;$:!"$+$o$j$K\e(B
+       wl-draft-reedit-hook \e$B$r\e(B run-hook \e$B$9$k$h$&$K$7$?!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)\e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       * wl-xmas.el, wl-mule.el (wl-draft-key-setup):
+       C-xC-s \e$B$K\e(B wl-draft-save \e$B$r!"\e(BC-xk \e$B$K\e(B wl-draft-mimic-kill-buffer \e$B$r\e(B
+       \e$B3d$jEv$F$?!#\e(B
+       * wl-nemacs.el (wl-draft-overload-functions): \e$BF1>e!#\e(B
+
+2000-01-09  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-mule.el, wl-util.el: (require 'static) \e$B$r\e(B
+       (eval-when-compile (require 'static)) \e$B$KJQ99!#\e(B
+       * wl.el (wl-save): \e$B$N\e(B docstring \e$B$rDI2C!#\e(B
+
+2000-01-08  Mito <mit@nines.nec.co.jp>
+
+       * wl-score.el (wl-score-guess-like-gnus): (when (stringp fld-name)..)
+       \e$B$G3g$C$?!#\e(B
+
+2000-01-08  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-config-info-operation): \e$B?75,4X?t!#\e(B
+       (wl-draft-delete, wl-draft-save-and-exit, wl-draft-reedit):
+       `wl-draft-config-info-operation' \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+2000-01-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-demo.el (toplevel): bitmap \e$B$,%$%s%9%H!<%k$5$l$F$$$J$$>l9g$K\e(B
+       \e$B%P%$%H%3%s%Q%$%k$G=P$k\e(B Warning \e$B$r8:$i$7$?!#\e(B
+       (wl-demo-use-bitmap): \e$B?75,JQ?t!#\e(Bbitmap \e$B$N%G%b$rI=<($9$k$+$I$&$+$r;XDj!#\e(B
+       \e$B%G%U%)%k%H$O\e(B t\e$B!#\e(B
+       * WL-CFG: wl-demo-use-bitmap \e$B$r\e(B nil \e$B$K$9$kNc$rDI2C!#\e(B
+       * wl-nemacs.el (toplevel): timezone \e$B$N%(%_%e%l!<%7%g%s$r;_$a$?\e(B
+       (APEL 10 \e$B!A\e(B \e$B$rA0Ds\e(B)\e$B!#\e(B
+       * wl-demo.el, wl-draft.el, wl-folder.el, wl-util.el,
+       wl-message.el, wl-summary.el (toplevel): \e$BL$Dj5AJQ?t$O\e(B
+       make-local-variable \e$B$GF@$i$l$k%7%s%\%k$KCM$r\e(B set \e$B$9$k$h$&$K$7$?!#\e(B
+       (Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp> \e$B$5$s$N8f=u8@\e(B)
+
+2000-01-07  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features, wl-smtp-parse-extension): \e$B=$@5!#\e(B
+
+2000-01-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-user-agent-compose): wl-draft \e$B$r\e(B interactive \e$B$K8F$V\e(B
+       \e$B$h$&$K$7$?!#\e(B(Atsushi Tada <tada@tworks.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       * Makefile (EMACS): \e$B%G%U%)%k%H$r\e(B emacs \e$B$K$7$?!#\e(B
+       (XEMACS): \e$B?75,JQ?t!#\e(B
+       (package, install-package): $(XEMACS) \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * 2.2.14 - "Layla"
+       * wl-summary.el (wl-summary-mode): default-directory \e$B$r@_Dj$9$k$N$r\e(B
+       \e$B$d$a$?!#\e(B
+       * wl-vars.el (wl-tmp-dir): \e$B%G%U%)%k%H$r\e(B"~/tmp/" \e$B$H$7$?\e(B
+       (WL-ML 3735 \e$B$N%9%l%C%I;2>H\e(B)\e$B!#\e(B
+
+2000-01-06  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * wl-draft.el (wl-smtp-features): \e$B?75,JQ?t!#\e(B
+       (wl-smtp-extension-bind): \e$B?75,%^%/%m!#\e(B
+       * wl-summary.el (wl-summary-mode-map):
+       wl-summary-prev-page \e$B$N%-!<%P%$%s%I$r\e(B backspace \e$B$K$b3dEv$F$?!#\e(B
+
+2000-01-06  Kentaro Yoshitomi <yositomi-wl@center.osaka-wu.ac.jp>
+
+       * elmo-maildir.el (elmo-maildir-create-folder):
+       \e$B%G%#%l%/%H%jL>$,\e(B "/" \e$B$G=*$k$H$-$K\e(B error \e$B$K$J$k$N$r=$@5!#\e(B
+
+2000-01-06  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-draft.el: smtp.el \e$BJQ?tL>$N\e(B authenticate \e$B$X$NJQ99$KBP1~!#\e(B
+
+2000-01-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-util.el (wl-load-profile): wl.el \e$B$+$i0\F0!#\e(B
+       * COPYING: \e$B?75,%U%!%$%k\e(B (etc/copyright \e$B$+$i2~L>\e(B).
+       * wl-vars.el (wl-smtp-connection-type): wl-smtp-use-tls \e$B$+$i2~L>!#\e(B
+       * wl-draft.el (wl-draft-send-mail-with-smtp): smtp-connection-type
+       \e$B$r\e(B wl-smtp-connection-type \e$B$G\e(B bind \e$B$9$k$h$&$K$7$?!#\e(B
+       (wl-draft-queue-save-filename): fixed typo.
+       * wl-vars.el (wl-cs-*): Nemacs \e$B8~$1$NDj5A$rJQ99!#\e(B
+       * all files: \e$BCx:n8"I=<($N99?7!"\e(Bcheckdoc fix\e$B!#\e(B
+
+2000-01-05  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-ja.texi: \e$BCx:n8"I=<($HJ#<L5v2DI=<($rDI2C!#\e(B
+
+2000-01-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-score.el (wl-summary-score-update-all-lines):
+       \e$B%9%3%"$GFI$s$@$3$H$K$9$k>l9g$K!"L$%-%c%C%7%e$H$9$k$h$&$K$7$?!#\e(B
+       * elmo-util.el (elmo-imap4-get-spec):
+       elmo-default-imap4-ssl \e$B$,\e(B t \e$B$N>l9g$KBP1~$7$F$$$J$+$C$?$N$r=$@5!#\e(B
+       (Taro FUNAKI <taro@bear.ecl.ntt.co.jp> \e$B$5$s$h$j8fJs9p\e(B)
+       * tm-wl.el (wl-draft-yank-current-message-entity):
+       mime-viewer/following-method-alist \e$B$N=$@5$b$l$r=$@5!#\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$h$j8fJs9p\e(B)
+
+2000-01-04  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-message.el (wl-message-decode):
+       'no-mime \e$B$N$H$-$K\e(B wl-cs-autoconv \e$B$G%G%3!<%I$9$k$h$&$K$7$?!#\e(B
+
+1999-12-31  Kentaro Yoshitomi <yositomi-wl@center.osaka-wu.ac.jp>
+
+       * elmo-maildir.el, elmo-util.el: Maildir \e$B%U%)%k%@$N:n@.!":o=|!"\e(B
+       \e$B%3%T!<$XBP1~!#\e(B
+
+1999-12-29  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft): `wl-load-profile' \e$B$r8F$V$h$&$K$7$?!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * elmo-imap4.el (elmo-imap4-make-number-set-list): \e$B?75,4X?t!#\e(B
+       (elmo-imap4-msgdb-create): `elmo-imap4-make-number-set-list'
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (elmo-imap4-mark-set-on-msgs): \e$BF1>e!#\e(B
+
+1999-12-11  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-get-sync-range):
+       offline \e$B;~$K\e(B POP \e$B%U%)%k%@$KF~$k$?$S$K\e(B Unplugged \e$B$HJ86g$r\e(B
+       \e$B8@$o$l$J$$$h$&$K$7$?!#\e(B
+
+1999-12-28  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * elmo-msgdb.el (elmo-msgdb-expand-path): \e$B%"!<%+%$%V%U%)%k%@$N%Q%9\e(B
+       \e$BE83+$K<:GT$7$F$$$?$N$r=$@5!#\e(B
+
+1999-12-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.13 - "Keep The Faith"
+
+1999-12-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-network-get-spec): \e$B?75,4X?t!#\e(B
+       (elmo-*-get-spec): \e$B=q$-D>$7!"%f!<%6L>It$K\e(B '@' \e$B$r4^$a$i$l$k$h$&$K$7$?!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$N8f;XE&$K4p$E$/\e(B)
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       float \e$B$,07$($J$$\e(B Emacs \e$B$X$NBP1~!#\e(B
+       * elmo-pop3.el (elmo-pop3-get-connection): \e$B0z?t$rJQ99!#\e(B
+       * check-paren fix.
+
+1999-12-21  Koga Masato <mkoga@mail7.dddd.ne.jp>
+
+       * wl-draft.el (wl-draft-reedit):
+       `wl-draft-use-frame' \e$B$,8z$/$h$&$K$7$?!#\e(B
+
+1999-12-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-vars.el (elmo-imap4-use-modified-utf7): \e$B?75,JQ?t!#\e(B
+       \e$B%G%U%)%k%H$O\e(B nil\e$B!#\e(B
+
+1999-12-20  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el, tm-wl.el (wl-mime-save-content): \e$B:G8e$K%;!<%V$7$?\e(B
+       \e$B%G%#%l%/%H%j$r3P$($k$h$&$K$7$?!#\e(B
+       * wl.el (wl-save): \e$B?75,%3%^%s%I!#8=:_$N%U%)%k%@>uBVEy$r%;!<%V$9$k!#\e(B
+       (JINMEI Tatuya <jinmei@isl.rdc.toshiba.co.jp> \e$B$5$s$h$j8fMWK>\e(B)
+       * wl-folder.el (wl-folder-mode-map): "\M-s" \e$B$K\e(B `wl-save' \e$B$r%P%$%s%I!#\e(B
+       * elmo-util.el (elmo-imap4-get-spec): `utf7-encode-string' \e$B$r\e(B
+       \e$B;H$&$h$&$K$7$?!#\e(B
+       * elmo-imap4.el (elmo-imap4-list-folders): `utf7-decode-string'
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       * elmo/utf7.el: \e$B?75,%U%!%$%k!#\e(B
+
+1999-12-20  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * elmo-imap4.el (elmo-imap4-open-connection): starttls \e$BBP1~$N=$@5!#\e(B
+       * wl-draft.el: featurep->boundp\e$B!#\e(B
+
+1999-12-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el (wl-search-mime-charset): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el (wl-summary-pick): `wl-search-mime-charset' \e$B$r\e(B
+       \e$B;H$&$h$&$K$7$?!#\e(B
+
+1999-12-16  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * WL-MK (wl-texinfo-format): \e$B8E$$\e(B texinfmt.el \e$B$r;H$C$F$$\e(B
+       \e$B$k$H$-$K$O\e(B `@direntry' \e$B$r%(%_%e%l!<%7%g%s$9$k$h$&$K$7$?!#\e(B
+
+1999-12-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft-config-exec): \e$B%O%$%i%$%H$7$J$*$9$h$&$K$7$?!#\e(B
+       (Motomichi Matsuzaki <mzaki@e-mail.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-summary.el (toplevel): `wl-summary-temp-mark-region' \e$B$N\e(B
+       \e$B%-!<%P%$%s%I=g$rJQ$($?\e(B (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B / Kenichi OKADA)
+       \e$B$5$s$N8f=u8@\e(B)\e$B!#\e(B
+
+1999-12-16  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-mark-as-important-region,
+       wl-summary-mark-as-unread-region,
+       wl-thread-mark-as-important,
+       wl-thread-mark-as-unread,
+       wl-summary-temp-mark-mark-as-important,
+       wl-summary-temp-mark-mark-as-unread): New functions.
+       (wl-summary-save-region): \e$BL5BL$J=hM}$r:o=|!%\e(B
+       (wl-summary-prefetch-region): wl-summary-message-uncached-marks \e$B$G\e(B
+       \e$BH=CG$9$k$N$r$d$a!"\e(Belmo-cache-exists-p\e$B$r;H$&$h$&$K$7$?!#\e(B
+       * wl-thread.el (wl-thread-get-children-msgs-uncached): \e$BF1>e!#\e(B
+
+1999-12-14  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * pop, imap \e$B$N\e(B STARTTLS \e$B$G!"\e(Btls \e$B$r;HMQ$9$k$h$&$K;XDj$7$F$$$k$N$K!$\e(B
+       \e$B%5!<%P$,5v2D$7$F$$$J$$>l9g$O!$\e(Berror \e$B$r=P$9$h$&$K$7$?!#\e(B
+
+1999-12-14  TSUMURA Tomoaki <tsumura@notredame.ac.jp>
+
+       * dot.wl: wl-default-folder \e$B$G$O\e(B ML-name \e$B$H\e(B ML-count \e$B$rI=<($7!"\e(B
+       \e$B$=$l0J30$N\e(B folder \e$B$G$O\e(B ML-count \e$B$N$_I=<($9$kNc$rDI2C!#\e(B
+
+1999-12-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-2.el (mmelmo-imap4-parse-bodystructure-string):
+       \e$B@8\e(B JIS \e$B$N%U%!%$%kL>$,$"$C$?$j$9$k$H\e(B parse \e$B$K<:GT$9$k$N$r=$@5!#\e(B
+       * wl-summary.el (wl-summary-copy): \e$B#22sL\$N%3%T!<;X<($,EPO?$5$l$J$$$N$r\e(B
+       \e$B=$@5!#\e(B(Hiroshi Watanabe <whoami@din.or.jp> \e$B$5$s$h$j8fJs9p\e(B)
+
+1999-12-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-goto-folder-subr): sticky \e$B$K$9$k\e(B
+       \e$B%?%$%_%s%0$rJQ99\e(B (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+       \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+       * wl-vars.el (wl-folder-sync-range-alist): \e$B%G%U%)%k%H$G%I%i%U%H$H\e(B
+       \e$B%-%e!<$N%l%s%8$r\e(B "all" \e$B$H$7$?!#\e(B
+
+1999-12-11  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-get-sync-range):
+       offline \e$B;~$K\e(B POP \e$B%U%)%k%@$KF~$k$?$S$K\e(B Unplugged \e$B$HJ86g$r\e(B
+       \e$B8@$o$l$J$$$h$&$K$7$?!#\e(B
+
+1999-12-10  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo \e$B$K$"$k4X?t$r\e(B defalias \e$B$7$F$$$k\e(B wl \e$B$N4X?t$r\e(B
+       elmo \e$B$N4X?t$KCV$-49$($?!#\e(B
+
+1999-12-07  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-nntp.el: elmo-nntp-max-number-precedes-list-active \e$B$,\e(B t 
+       \e$B$+$D\e(B list-active \e$B$,Ds6!$5$l$F$$$J$$>l9g$N5sF0$r=$@5!#\e(B
+
+1999-12-07  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * INSTALL.ja: \e$B=$@5!#\e(B
+       * wl-summary.el (wl-summary-always-sticky-folder-p): \e$B?75,%^%/%m!#\e(B
+       (wl-summary-goto-folder-subr): (wl-summary-always-sticky-folder-p)
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+1999-12-07  Akihiro MOTOKI <mokkun@iname.com>
+
+       * wl-vars.el (wl-summary-always-sticky-folder-list): \e$B?75,JQ?t!#\e(B
+       * wl-summary.el (wl-summary-stick): Optional \e$B0z?t$r2C$($?!#\e(B
+       (wl-summary-goto-folder-subr): wl-summary-always-sticky-folder-list
+       \e$B$K%^%C%A$9$k%U%)%k%@$O<+F0E*$K\e(B Sticky \e$B$K$J$k$h$&$K$7$?!#\e(B
+
+1999-12-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * INSTALL.ja: \e$BJ8;z%3!<%I$r\e(B ISO-2022-JP \e$B$K$7$?!#\e(B
+       * wl-draft.el (wl-draft-send-mail-with-smtp): 
+       (default-)?case-fold-search \e$B$N%P%$%s%I0LCV$rJQ99!#\e(B
+       (Atsushi Tada <tada@tworks.co.jp> \e$B$5$s!"\e(B
+        \e$BDE6b5WNQ\e(B <tao@pfu.co.jp>\e$B$5$sB>$h$j8fJs9p\e(B)
+       (wl-draft-send): with-current-buffer \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+       * 2.2.12 - "Joyride"
+
+1999-12-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * etc/icons/wl-logo.xbm: Christmas version.
+
+1999-12-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el (elmo-imap4-parse-overview-string):
+       elmo-imap4-use-uid \e$B$,\e(B nil \e$B$N$H$-F0$+$J$+$C$?$N$r=$@5!#\e(B
+       * utils/hmac/scram-md5.el, utils/hmac/hmac-util.el: \e$B:o=|!#\e(B
+       * wl-summary.el (wl-summary-mark-as-unread):
+       wrong-type-argument \e$B%(%i!<$,=P$k$N$r=$@5!#\e(B
+       * wl-folder.el (wl-folder-empty-trash): \e$B%5%^%jA}?#8=>]$N=$@5$b$l!#\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8fJs9p\e(B)
+
+1999-12-07  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-condig-exec):
+       wl-draft-config-exec-flag \e$B$O\e(B wl-draft-config-alist \e$B$,E,MQ$5$l$?\e(B
+       \e$B$H$-$N$_\e(B nil \e$B$K$9$k$h$&JQ99!#\e(B
+
+1999-12-06  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * WL-ELS (HMAC-MODULES): \e$B99?7!#\e(B
+
+1999-12-06  Tsunehiko Baba <tbaba@mtl.t.u-tokyo.ac.jp>
+
+       * INSTALL: \e$B?75,%U%!%$%k!#\e(B
+
+1999-12-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       \e$B%U%#%k%?$,$&$^$/F0$+$J$$$N$r=$@5!#\e(B
+       (Kazuyoshi Mii <mii@isl.ntt.co.jp> \e$B$5$s$h$j8fJs9p\e(B)
+       * 2.2.11 - "Iris"
+       * utils/hmac/lisp/*.el: Sync up with slim-1.13.4.
+       * elmo-imap4.el
+       (elmo-imap4-open-connection): cram-md5 \e$BG'>Z$G\e(B sasl-cram-md5 \e$B$r\e(B
+       \e$B;H$&$h$&$K$7$?!#\e(B
+       (toplevel): (require 'hmac-md5) \e$B$G$O$J$/!"\e(B(require 'sasl) \e$B$H$9$k\e(B
+       \e$B$h$&$K$7$?!#$^$?!"\e(Beval-when-compile \e$B$r30$7$?!#\e(B
+
+1999-12-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-mark-as-read): msgdb \e$B$KB8:_$7$J$$\e(B
+       \e$B%a%C%;!<%8$K$O%^!<%/$rIU$1$J$$$h$&$K$7$?!#\e(B
+       * wl-summary.el (wl-summary-pick): msgdb \e$BBP>]$N$H$-$K$R$H$D$b\e(B pick
+       \e$B$G$-$J$+$C$?$H$-$K%a%C%;!<%8$r=P$9$h$&$K$7$?!#\e(B
+
+1999-12-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-msgdb.el (elmo-msgdb-overview-get-parent-entity):
+       \e$B0z?t$rJQ99!#\e(B
+       * wl-vars.el (wl-smtp-posting-server): \e$B=i4|CM$r\e(B nil \e$B$H$7$?!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$N8f=u8@\e(B)
+       * elmo-imap4.el (elmo-imap4-create-msgdb-from-overview-string):
+       extra-field \e$BL>$r\e(B downcase \e$B$9$k$h$&$K$7$?!#\e(B
+       (Takaaki MORIYAMA <taka@airlab.cs.ritsumei.ac.jp> \e$B$5$s$h$j8f;XE&\e(B)
+       * elmo-util.el (elmo-collect-field(-from-string)?):
+       \e$B0z?t\e(B downcase-field-name \e$B$rA}$d$7$?!#\e(B
+
+1999-12-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-folder.el (wl-folder-empty-trash): \e$B%5%^%jA}?#8=>]$N=$@5!#\e(B
+
+1999-12-03  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * wl-summary.el (wl-summary-default-from): Newsgroup \e$BL>$,I=<(\e(B
+       \e$B$5$l$J$+$C$?$N$r=$@5!#\e(B
+
+1999-12-03  TAKAHASHI Kaoru <nil@din.or.jp>
+
+       * INSTALL.ja: \e$B?75,%U%!%$%k!#\e(B
+       * draft \e$B:FJT=8;~$K!"\e(BNewsgroups: \e$B%X%C%@$,$"$l$P!"\e(BTo: \e$B$rIU2C$7$J$$$h\e(B
+       \e$B$&$K$9$k=$@5$N%^!<%8$7K:$l$r=$@5!#\e(B
+
+1999-12-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-mime-string): elmo-set-work-buf \e$B$G3g$k$h$&$K$7$?!#\e(B
+       (Mikiya Tani <m-tani@hml.cl.nec.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       * 2.2.10 - "Human Touch"
+       * etc/icons/wl-logo.xpm: Christmas version.
+       * elmo-imap4.el (elmo-imap4-make-attributes-object):
+       Nemacs \e$B$G\e(B read \e$B$,<:GT$7$F$7$^$&$N$KBP=h!#\e(B
+       * elmo-dop.el (elmo-dop-list-folder): pipe \e$BBP1~K:$l$r=$@5!#\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f;XE&\e(B)
+
+1999-12-03  sen_ml@eccosys.com
+
+       * utils/wl-mailto.el: 0.5.
+
+1999-12-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-1.el: buffer read only \e$B$N%(%i!<$,=P$k$N$r=$@5!#\e(B
+       * wl-mime.el, tm-wl.el: wl-draft-preview-message \e$B$N%-!<%P%$%s%I$rJQ99!#\e(B
+       (Makoto.Nakagawa@jp.compaq.com (\e$BCf@n\e(B \e$B@?\e(B) \e$B$5$s$N8fJs9p$K4p$E$/\e(B)
+       * utils/ssl.el: \e$B:G?7HG$KF~$l49$(!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)\e$B$5$s$N8f;XE&\e(B)
+       * elmo-util.el (elmo-mime-string, elmo-decode-mime-charset-string):
+       \e$B?75,4X?t!#\e(B
+       * elmo-imap4.el: FETCH \e$B7k2L2r@O=hM}ItJ,$rBgI}$K=q$-49$($?!#\e(B
+
+1999-12-02  Hironori Fukuchi <nory@valis.co.jp>
+
+       * wl-xmas.el: (featurep 'dragdrop) \e$B$,\e(B nil \e$B$N$H$-$K!"\e(B
+       wl-dnd-set-drop-target \e$B$,%(%i!<$rH/@8$9$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+1999-12-02  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * starttls.el \e$B$,$J$$$H%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-12-01  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * smtp auth\e$B$N$H$3$m$G!$\e(Bwl-smtp-posting-user\e$B$,\e(B nil \e$B$G$b\e(B
+       error \e$B$r=P$5$J$$$h$&$K$7$?!#\e(B
+       * nntp\e$B%U%)%k%@$G%]!<%HHV9f$r;XDj$9$k$H%(%i!<$,=P$k$N$r=$@5\e(B
+
+1999-11-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-reedit): interactive \e$B$G$J$$$N$K\e(B
+       wl-mail-setup-hook \e$B$r8F$V$+$I$&$+$,\e(B (interactive-p) \e$B$GH=JL$5$l$F\e(B
+       \e$B$$$?$N$r=$@5!#\e(B
+       * New command: wl-fldmgr-delete.
+       * Rename: wl-fldmgr-rename-group -> wl-fldmgr-rename.
+       * New function: elmo-folder-creatable-p.
+       * imap4 \e$B$G\e(B #mh \e$B%?%$%W$N%U%)%k%@$r:n$k$H$-!$I,$:%G%#%l%/%H%j$,:n\e(B
+         \e$B@.$5$l$k$h$&$K$7$?!#\e(B
+       * wl-folder-check-one-entity \e$B$GB8:_$7$J$$%U%)%k%@$r:n@.$9$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * New macro: wl-folder-clear-entity-info.
+
+1999-11-25  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-message.el (wl-message-narrow-to-page): "^L\n^L" \e$B$r4^$`%a%C%;!<\e(B
+       \e$B%8$rFI$`$H$-$K\e(B `beginning-of-buffer' \e$B%(%i!<$,=P$J$$$h$&$K$7$?!#\e(B
+
+1999-11-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary-mode \e$B$N0z?t$r$J$/$7$?!#\e(B
+       * wl-address.el (wl-address-petname-add-or-change):
+       .addresses \e$B$N:G8e$N9T$K2~9T$,$J$$>l9g$KBP=h!#\e(B
+       * elmo-imap4-[12].el (mmelmo-imap4-parse-bodystructure-entity):
+       mime-parse-parameters-from-list \e$B$r;H$&$h$&$K$7$?!#\e(B
+
+1999-11-24  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * x-face-xmas-mew-display-x-face -> x-face-xmas-wl-display-x-face
+
+1999-11-22  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-vars.el (wl-smtp-authenticate-type, wl-smtp-use-tls): \e$B?75,JQ?t!#\e(B
+       * wl-draft.el (wl-draft-send-mail-with-smtp): SMTP \e$B$N\e(B TLS \e$BBP1~!#\e(B
+
+1999-11-21  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary-jump-to-msg-internal\e$B$,\e(B
+       wl-summary-jump-to-msg-by-message-id-via-nntp\e$B$+$i8F$P$l$k$H$-$K!$\e(B
+       scan-type\e$B$,\e(Bupdate\e$B$K$J$k$h$&$K$7$?!#\e(B
+
+1999-11-22  Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+       * elmo-imap4.el, elmo-pop3.el: STARTTLS \e$BBP1~!#\e(B
+
+1999-11-20  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el (wl-draft-send-mail-with-smtp):
+       connection \e$B$rD%$k;~$K\e(B process-connection-type \e$B$r\e(B nil \e$B$K94B+$7$?!#\e(B
+
+1999-11-20  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-util.el (elmo-open-network-stream):
+       connection \e$B$rD%$k;~$K\e(B process-connection-type \e$B$r\e(B nil \e$B$K94B+$7$?!#\e(B
+
+1999-11-20  Nishimoto Masaki <gaju@ceres.dti.ne.jp>
+
+       * \e$B4{$K\e(Bimportant\e$B%^!<%/$,$D$$$F$$$k%a%C%;!<%8$K\e(B
+       important\e$B$J%9%3%"$,$D$/$H%^!<%/$,>C$($F$7$^$&$N$r=$@5!#\e(B
+
+1999-11-19  Hironori Fukuchi <nory@valis.co.jp>
+
+       * tm-wl.el: fixed typo.
+
+1999-11-18  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * \e$BI=<($7$F$$$k%a%C%;!<%8$,$J$$>uBV$G\e(B wl-draft-insert-message \e$B$r<B\e(B
+       \e$B9T$9$k$H%(%i!<$,=P$k$h$&$K$7$?!#\e(B
+
+1999-11-17  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-vars.el: \e$B?75,JQ?t\e(B wl-summary-showto-folder-regexp\e$B!#\e(B
+       * wl-summary.el (wl-summary-default-from):
+       my-wl-summary-from-func-petname \e$B$K$7$?!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@\e(B)
+       * wl-summary.el (wl-summary-simple-from): wl-summary-default-from
+       \e$B$+$iL>A0JQ99!#\e(B
+
+1999-11-17  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-message.el (wl-message-get-buffer-create):
+       sticky \e$B%a%C%;!<%8$rI=<($9$k$H$-$K%(%i!<$K$J$k$N$r=$@5$7$?!#\e(B
+
+1999-11-17  sen_ml@eccosys.com
+
+       * wl-mailto.el: 0.5-pre1.
+
+1999-11-16  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-util.el (elmo-delete-cr-get-content-type):
+       Content-Type \e$B$,$J$$$H$-$K\e(B t \e$B$rJV5Q$9$k$h$&$K$7$?!#\e(B
+       * 2.2.9 - "Gonna Make You Sweat"
+
+1999-11-15  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-util.el (wl-unique-id): current-time \e$B$H\e(B timezone \e$B$r;H$o$J$$HG!#\e(B
+
+1999-11-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft.el, wl-summary.el: reply \e$B;~$O\e(B wl-draft-reply \e$B$r\e(B t \e$B$K\e(B,
+        forward \e$B;~$O\e(B wl-draft-forward \e$B$r\e(B t \e$B$K@_Dj$9$k$h$&$K$7$?!#\e(B
+       * wl-folder.el, wl.el: wl-folder \e$B$G%U%)%k%@%j%9%H$r@8@.$7$?$H$-$N$_!$\e(B
+         wl-make-plugged-alist \e$B$r8F$V$h$&$K$7$?!#\e(B
+
+1999-11-14  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-pipe.el (elmo-pipe-use-cache-p): \e$B<BAu!#\e(B
+       * elmo2.el (elmo-folder-number-get-spec): \e$B=$@5!#\e(B
+
+1999-11-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-nemacs.el: current-time \e$B<BAu$r<h$j9~$s$@!#\e(B
+       * wl-draft.el: insert-mail \e$B$N<BAu!#\e(B
+       * \e$B%a%C%;!<%8$N\e(B MIME \e$B%\%?%s$G\e(B 'a' \e$B$r2!$7$?$H$-$K!"$=$N%Q!<%H$r0zMQ$7$?\e(B
+       \e$B%I%i%U%H$rMQ0U$9$k$h$&$K$7$?!#\e(B
+       * wl-draft.el: wl-user-agent.el \e$B$r%^!<%8$7$?!#\e(B
+       * wl-mime.el, tm-wl.el: MIME module \e$B$H$N\e(B API \e$B$r@0M}$7$J$*$7$?!#\e(B
+
+1999-11-12  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-imap4.el: \e$BB8:_$7$J$$%U%)%k%@$KBP$7$F\e(B
+       wl-folder-check-current-entity \e$B$r<B9T$9$k$H%(%i!<$,=P$k$N$r=$@5!#\e(B
+       * wl-draft.el: wl-draft-config-list, wl-template-alist \e$B$G\e(B
+       header, header-file \e$B$b;XDj$G$-$k$h$&$K$7$?!#\e(B
+
+1999-11-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-util.el (wl-draft-make-message-id-string, wl-unique-id,
+       wl-number-base36): New functions.
+       (wl-unique-id-char): New internal variable.
+
+       * wl-mule.el (wl-draft-make-message-id-string): Remove.
+       * wl-nemacs.el (wl-draft-make-message-id-string): Remove.
+       * wl-xmas.el (wl-draft-make-message-id-string): Remove.
+
+       * wl-draft.el (wl-draft-send-mail-with-smtp): `smtp-server' \e$B$,4X?t\e(B
+       \e$B$@$C$?$i\e(B funcall \e$B$9$k$h$&$K$7$?\e(B; Resent-* \e$B%U%#!<%k%I$N07$$$r\e(B `smtp'
+       \e$B$KG$$;$k$h$&$K$7$?!#\e(B
+
+1999-11-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft (wl-draft-get-fcc-list): FCC \e$B$K;XDj$5$l$?%U%)%k%@$,\e(B
+       \e$BB8:_$7$J$$$H$-$K%(%i!<$H$;$:!":n@.$9$k$+$I$&$+$-$/$h$&$K$7$?!#\e(B
+       * Rename: wl-summary-confirm-folder-existence ->
+       wl-folder-confirm-existence\e$B!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@$K\e(B
+       \e$B4p$E$/\e(B)
+       * Rename: wl-mime-edit-preview-message-hook
+       -> wl-draft-preview-message-hook
+       * elmo-nntp.el (elmo-nntp-string-to-vector): \e$B4X?t8F$S=P$7$K$9$k$N$r\e(B
+       \e$B;_$a$?!#\e(B
+       * elmo-util.el (elmo-tokenize-string): \e$BGQ;_!#\e(Bsplit-string \e$B$GBeMQ!#\e(B
+       * wl-highlight.el: \e$B?75,\e(B face\e$B!"\e(Bwl-highlight-logo-face\e$B!#%m%4MQ\e(B face\e$B!#\e(B
+
+1999-11-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * wl-demo.el: bitmap-mule \e$BBP1~!#\e(B
+       * wl-logo.xbm: \e$B?75,%U%!%$%k!#\e(B
+       * elmo-nntp.el (elmo-nntp-string-to-vector): vector \e$B$ND9$5$rL5@)8B\e(B
+       \e$B$K$7$?!#\e(B
+       (elmo-nntp-parse-overview-string): `elmo-nntp-string-to-vector' \e$B$K\e(B
+       \e$BBh#20z?t$rM?$($k$N$r$d$a$?!#\e(B
+
+1999-11-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el: Message-ID \e$B$K\e(B '%' \e$B$,4^$^$l$F$$$k$H8!:w$K<:GT$9$k$N\e(B
+       \e$B$r=$@5!#\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f=u8@\e(B)
+       * wl-message.el, mmelmo-[12].el: read-only \e$B$N@_Dj$r@0M}!#\e(B
+       * wl-draft-save-and-hide -> wl-draft-save-and-exit \e$B$H$7!"\e(B
+         C-c C-z \e$B$K%P%$%s%I$7$?!#\e(B
+
+1999-11-11  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * wl-summary.el (wl-summary-temp-mark-forward):
+       \e$B%^!<%/$5$l$F$$$k%a%C%;!<%8$,J#?t$J$i$PA4BN$r\e(B multipart/digest \e$B$G0O$`\e(B
+       \e$B$h$&$K$7$?!#\e(B
+
+1999-11-11  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B?75,JQ?t\e(B wl-nntp-posting-port, wl-nntp-posting-ssl
+       wl-nntp-posting-{user,server,port,ssl}\e$B$H\e(B
+       elmo-default-nntp-{user,server,port,ssl} \e$B$rBP1~$5$;$k$h$&$K$7$?!#\e(B
+       * wl-nntp-posting-* \e$B$N=i4|@_Dj$O\e(B nil \e$B$H$7!"\e(B
+       nil \e$B$N$^$^$J$i\e(B elmo-default-nntp-* \e$B$rMxMQ$9$k$h$&$K$7$?!#\e(B
+       * utils/bbdb-wl.el: (setq bbdb-use-pop-up nil) \e$B$N>l9g!"\e(B
+       \e$B%5%^%j$G\e(B ':' \e$B$r2!$7$?8e\e(B q \e$B$H2!$9$H%(%i!<$,=P$k$N$r=$@5!#\e(B
+       * wl-draft.el: \e$B?75,4X?t\e(B wl-draft-save-and-hide\e$B!#\e(B
+
+1999-11-10  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-demo\e$B$G!$\e(Bwl-logo.xpm\e$B$NI=<(0LCV$r$A$c$s$H7W;;$9$k$h$&$K$7$?!#\e(B
+
+1999-11-10  Tsutomu Okada (\e$B2,ED\e(B \e$BJY\e(B) <okada@furuno.co.jp>
+
+       * wl-message.el (wl-message-refer-article-or-url):
+       \e$B%a%C%;!<%8%P%C%U%!$G\e(B mouse-button-2 \e$B$r2!$7$F$b%+!<%=%k$,\e(B
+       \e$B%a%C%;!<%8%P%C%U%!$K0\F0$7$J$$$h$&$K$7$?!#\e(B
+
+1999-11-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary.el (wl-summary-set-message-buffer-or-redisplay):
+       Sticky Message \e$B$,$"$k$H%*%j%8%J%k%P%C%U%!$,<B:]$H0[$J$C$?$^$^$K\e(B
+       \e$B$J$k>l9g$,$"$k$N$r=$@5!#\e(B(Mito <mit@nines.nec.co.jp> \e$B$5$s$h$j8fJs9p\e(B)
+       * wl-util.el (wl-string): elmo-string \e$B$X$N\e(B alias \e$B$H$7$?!#\e(B
+       * elmo-util.el (elmo-string): \e$B?75,4X?t!#\e(B
+       * \e$B?75,JQ?t\e(B wl-smtp-posting-port\e$B!#\e(B
+       * wl-summary-resend-bounced-mail \e$B$r\e(B "\eE" \e$B$K%P%$%s%I!#\e(B
+
+1999-11-10  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * WL-ELS \e$B$N\e(B typo \e$B$N=$@5$b$l$N=$@5!#\e(B
+
+1999-11-10  kurati@bigfoot.com
+
+       * refile \e$B$G%U%)%k%@:n@.$7$?$H$-$K%U%)%k%@L>Jd408uJd$K2C$o$k$h$&$K$7$?!#\e(B
+       * FCC: \e$B$K?75,%U%)%k%@$r;XDj$7$?;~$K:n@.$9$k$+J9$/$h$&$K$7$?!#\e(B
+       * auto-refile \e$B$N$H$-!"B8:_$7$J$$%U%)%k%@$,$"$C$?;~$K:n@.$9$k$+J9$/!#\e(B
+
+1999-11-10  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * wl-summary.el (wl-summary-resend-message,
+       wl-summary-resend-bounced-mail): \e$B?75,%3%^%s%I!#\e(B
+       * wl-draft.el (wl-draft-dispatch-message): dispatch \e$B$5$l$?\e(B
+       \e$B%a%C%;!<%8$,\e(B Resent-to \e$B%X%C%@$r4^$s$G$$$?>l9g$O\e(B Newsgroups \e$B%X%C%@\e(B
+       \e$B$r;}$C$F$$$F$b%K%e!<%9$K$OAw$i$J$$!#\e(B
+
+1999-11-09  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-summary.el (wl-summary-jump-to-msg-internal): \e$B5-;v$,\e(B
+       \e$BI=<($5$l$J$$>l9g$,$"$k$N$r=$@5!#\e(B
+       * wl-summary.el (wl-summary-jump-to-msg-by-message-id-via-nntp):
+       \e$B0\F0@h$N%K%e!<%9%0%k!<%W$N8uJd$,J#?t$"$k$H$-$K\e(B
+       wl-folder-newsgroups-hashtb \e$B$K4^$^$l$k$b$N$rM%@h$9$k$h$&$K$7$?!#\e(B
+
+1999-11-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.8 - "Free As A Bird"
+
+1999-11-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-draft.el (wl-draft-send): \e$BAw?.8e!"\e(BC-cC-s \e$B$,\e(B insert-signature \e$B$K\e(B
+       \e$B$J$C$F$7$^$&$N$r2sHr!#\e(B(Akihiro MOTOKI <motoki@ptl.abk.nec.co.jp> \e$B$5$s\e(B
+       \e$B$h$j8fJs9p\e(B)
+       * WL-MK: Nemacs \e$B$G$O\e(B (fset 'file-executable-p 'file-exists-p) \e$B$H$7$?!#\e(B
+       * WL-MK, WL-CFG: WL_PREFIX \e$B$H\e(B ELMO_PREFIX \e$B$N%G%U%)%k%H$r\e(B "wl"
+       \e$B$H$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-user-mail-address-list\e$B!#\e(B
+       \e$B%f!<%6$N%a!<%k%"%I%l%9$,J#?t$"$k$H$-$K<+J,$+$I$&$+$NH=Dj$KMQ$$$i$l$k!#\e(B
+       * \e$B?75,4X?t\e(B wl-address-user-mail-address-p
+       wl-user-mail-address-list \e$B$H\e(B wl-from \e$B$r;H$C$F<+J,$N%"%I%l%9$+$I$&$+\e(B
+       \e$BH=JL$9$k!#\e(B
+       * wl-summary.el (wl-summary-cancel-message,
+       wl-summary-supersedes-message): wl-address-user-mail-address-p
+       \e$B$r;H$C$F%"%I%l%9H=Dj$9$k$h$&$K$7$?!#\e(B
+       (okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA) \e$B$5$s$NJQ99$K4p$E$/\e(B)
+       * wl-refile.el (wl-refile-learn, wl-refile-guess-by-history): \e$BF1>e!#\e(B
+       * wl-draft.el (wl-draft-make-mail-followup-to, wl-draft-reply
+       wl-draft-delete-myself-from-cc): \e$BF1>e!#\e(B
+       * elmo-filter.el (elmo-filter-list-folder-unread,
+       elmo-filter-list-folder-important): \e$B%U%#%k%?=hM}$,4V0c$C$F$$$?\e(B
+       \e$B$N$r=$@5!#\e(B(Kazuyoshi Mii <mii@isl.ntt.co.jp> \e$B$5$s$h$j8fJs9p\e(B)
+
+1999-11-08  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * POP-before-SMTP \e$B4XO"JQ?t$N=i4|2=K!$rJQ99!#\e(B
+
+1999-11-07  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-nntp.el: list active \e$B$,<:GT$7$?$i!$\e(Blist \e$B$r<B9T$9$k$h$&$K$7$?!#\e(B
+
+1999-11-07  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-draft-prepared-confi-alist \e$B$rGQ;_$7!$\e(B
+         wl-draft-config-alist \e$B$HE}9g$7$?!#\e(B
+       * wl-template-select \e$B$r<B9T$7$?$H$-$G$b%m!<%+%kJQ?t$r7Q>5$9$k$h\e(B
+         \e$B$&$K$7$?!#\e(B
+       * Fcc \e$B%U%)%k%@$N=hM}$rAw?.$,@.8y$7$?;~$K9T$&$h$&$K$7$?!#\e(B
+       * wl-draft-queue-save-variables \e$B$NJQ?t$r\e(B user-mail-address \e$B$+$i\e(B
+         wl-envelope-from \e$B$KJQ99$7$?!#\e(B
+       * wl-draft-insert-from-field \e$B$K$*$$$F!$\e(Buser-mail-address \e$B$,\e(B nil
+         \e$B$N$H$-$K%(%i!<$K$J$k$N$r=$@5$7$?!#\e(B
+
+1999-11-06  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * describe-mode \e$B$G%b!<%I%^%C%W$,I=<($5$l$k$h$&$K$7$?!#\e(B
+
+1999-11-06  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-folder.el (wl-folder-mode-map):
+       wl-fldmgr-copy-region \e$B$N%-!<%P%$%s%I$rJQ$($?!#\e(B
+
+1999-11-06  Hironori Fukuchi <nory@valis.co.jp>
+
+       * wl-summary.el (wl-summary-stick): \e$B3g8L$N0LCV$,$:$l$F$$$?$N$r=$@5!#\e(B
+
+1999-11-06  Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+
+       * utils/wl-user-agent.el: sendmail-user-agent \e$B$NF0:n$K9g$o$;$?!#\e(B
+
+1999-11-06  sen_ml@eccosys.com
+
+       * utils/wl-user-agent.el: 0.5.
+
+1999-11-05  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-imap4.el: \e$B%=!<%9$r$+$J$j@0M}$7$?!#\e(B
+       * elmo-imap4.el: \e$B?75,JQ?t\e(B elmo-imap4-debug\e$B!#\e(B
+       Non-nil \e$B$J$i\e(B "*IMAP4 DEBUG*" \e$B%P%C%U%!$K%G%P%C%0>pJs$r=PNO$9$k!#\e(B
+       * elmo-imap4.el, elmo-pop3.el, elmo-nntp.el:
+       \e$B%a%C%;!<%8K\BNFI$_=P$7;~$N%3%T!<2s?t$r:o8:!#\e(B
+       * elmo-imap4.el: \e$B%3%^%s%I$NJVEz$,:G8e$^$GF@$i$l$k$^$G%m%C%/$9$k$h$&$K\e(B
+       \e$B$7$?!#\e(B
+       * wl-summary.el: wl-refile-rule-alist \e$B$,\e(B nil \e$B$@$H%*!<%H%j%U%!%$%k$,\e(B
+       \e$B%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * WL-MK: install-package \e$B$G\e(B info \e$B$,%$%s%9%H!<%k$5$l$J$$$N$r=$@5!#\e(B
+       ("MATSUBAYASHI 'Shaolin' Kohji" <shaolin@rins.st.ryukoku.ac.jp> \e$B$5$s\e(B
+       \e$B$h$j8fJs9p\e(B)
+       * elmo-cache.el (elmo-cache-search): \e$BItJ,%-%c%C%7%e$N8!:w$KBP1~\e(B
+       \e$B$7$F$$$J$+$C$?$N$r=$@5\e(B (Yasuo OKABE <okabe@i.kyoto-u.ac.jp>
+       \e$B$5$s$N8f;XE&\e(B)\e$B!#\e(B
+
+1999-11-04  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * POP-before-SMTP \e$B$N@0M}$H3HD%!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-default-pop3-user, wl-pop-before-smtp-user,
+       wl-pop-before-smtp-server, wl-pop-before-smtp-port,
+       wl-pop-before-smtp-ssl, wl-pop-before-smtp-authenticate-type\e$B!#\e(B
+       * elmo-pop-before-smtp-* -> wl-pop-before-smtp-*
+
+1999-11-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime.el (wl-mime-edit-preview-message):
+       \e$B?75,\e(B hook: wl-mime-edit-preview-message-hook\e$B!#\e(B
+       * elmo-util.el: \e$B%P%$%H%3%s%Q%$%i$N=P$9\e(B Warning \e$B$r:o8:$7$?!#\e(B
+       * wl-summary.el (wl-summary-sync-marks): \e$B%^!<%/F14|=hM}$rBgI}$K9bB.2=!#\e(B
+       * elmo-pipe.el (elmo-pipe-max-of-folder): \e$BIQHK$K:o=|$5$l$k\e(B
+       IMAP4 \e$B%U%)%k%@$G$OL$FI?t$,$*$+$7$/$J$k$N$r=$@5!#\e(B
+       (Toshihiko Kodama (\e$B>.6L\e(B \e$BMxI'\e(B) <kodama@ayame.mfd.cs.fujitsu.co.jp>
+       \e$B$5$s$N8fJs9p$K4p$E$/\e(B)
+
+1999-11-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.7 - "Escapade"
+       * WL-MK: install-info \e$B$9$k$H\e(B INFODIR \e$B$N%a%C%;!<%8$,$*$+$7$/$J$k$N\e(B
+       \e$B$r=$@5!#\e(B
+       * \e$B5/F0$7$F:G=i$K\e(B Folder \e$B%b!<%I$+$i\e(B prefetch \e$B$9$k$H%(%i!<$,H/@8$9$k\e(B
+       \e$B$N$r=$@5\e(B (\e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+       \e$B$5$s$h$j8fJs9p\e(B)\e$B!#\e(B
+       * mime-elmo-entity \e$B%/%i%9$r\e(B mime-buffer-entity \e$B%/%i%9$N\e(B
+       \e$B%5%V%/%i%9$H$7!"B>$N\e(B MUA \e$B$K1F6A$,5Z$P$J$$$h$&$K$7$?!#\e(B
+       * \e$BJD$8$?%9%l%C%I$K%a%C%;!<%8$,DI2C$5$l$?$H$-$KHV9fItJ,$,\e(B
+       \e$B%O%$%i%$%H$5$l$J$+$C$?$N$r=$@5!#\e(B
+       * pipe \e$B$KBP1~$7K:$l$F$$$?ItJ,$rBP1~$5$;$?!#\e(B
+
+1999-11-03  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%U%)%k%@L>$NJd40$J$I$G!$\e(Bfolder petname \e$B$r;HMQ$9$k$h$&$K$7$?!#\e(B
+       * wl-force-fetch-folders \e$B$,\e(B non-nil \e$B$N>l9g!$%"%/%;%9%0%k!<%W$,\e(B
+         unplugged \e$B$@$H3+$1$J$/$J$k$N$r=$@5$7$?!#\e(B
+       * \e$B%U%)%k%@%b!<%I$N:G2<9T$G\e(B wl-fldmgr-set-petname \e$B$,=PMh$J$$$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * wl-plugged-mode \e$B$GJQ99$7$J$+$C$?>l9g$O!$\e(Bwl-toggle-plugged \e$B$r8F\e(B
+         \e$B$P$J$$$h$&$K$7$?!#\e(B
+       * wl-exit \e$B$H\e(B wl-folder-suspend \e$B;~$N%P%C%U%!>C5n$r@0M}$7$?!#\e(B
+       * wl-folder.el: \e$B0lIt$r4X?t\e(B wl-folder-buffer-group-p \e$B$GCV$-49$($?!#\e(B
+       * wl-summary.el: \e$B0lIt$r4X?t\e(B wl-summary-entity-info-msg \e$B$GCV$-49\e(B
+         \e$B$($?!#\e(B
+       * wl-reset-plugged-alist \e$B$N%G%U%)%k%HCM$r\e(B t \e$B$KJQ99$7$?!#\e(B
+       * wl-plugged-mode \e$B$G\e(B plugged \e$B>uBV$rJQ99$7$F$bA4It%j%;%C%H$5$l$F\e(B
+         \e$B$7$^$&$N$r=$@5$7$?!#\e(B
+
+1999-11-03  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * wl-summary.el (wl-summary-reedit): \e$B%K%e!<%95-;v$N:FJT\e(B
+       \e$B=8;~$K!"\e(BTo: \e$B%X%C%@$r2C$($J$$$h$&$K$7$?!#\e(B
+
+1999-11-03  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * wl-summary-write-current-newsgroup \e$B$G\e(B
+       elmo-folder-get-primitive-folder-list\e$B$r;H$&$h$&$K$7$?!#\e(B
+       * \e$B?75,%3%^%s%I\e(B wl-folder-write-current-newsgroup
+       * elmo-folder-get-primitive-folder-list \e$B$H\e(B
+       elmo-folder-get-primitive-spec-list \e$B$r\e(B pipe \e$B%U%)%k%@$KBP1~$5$;$?!%\e(B
+       * elmo-pop3-flush-connection\e$B$9$kA0$KEEOC$r@Z$k$H!$\e(B
+       wl-toggle-plugged \e$B$G$-$J$/$J$k$N$r=$@5!#\e(B
+
+1999-11-03  sike@ic.netlaputa.ne.jp
+
+       * Message-Id \e$B$NESCf$G2~9T$,$"$C$F$bBg>fIW$J$h$&$K$7$?!#\e(B
+
+1999-11-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.6 - "Diamonds And Pearls"
+       * \e$B5/F0;~$K\e(B plug status \e$B$r\e(B wl-plugged \e$B$K9g$o$;$k$h$&$K$7$?!#\e(B
+       (Yasuo OKABE <okabe@i.kyoto-u.ac.jp> \e$B$5$s$N8f;XE&\e(B)
+       * WL-MK: \e$BBgI}$K=q$-49$($?!#\e(B
+       * Rename: wl-address-complete-address
+       -> wl-complete-field-body
+       * Rename: wl-address-complete-address-or-tab
+       -> wl-complete-field-body-or-tab
+
+1999-11-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%U%)%k%@%"%$%3%s=i4|2=4X?t$r4JN,2=!#\e(B
+       * elmo-pipe: New module.
+
+1999-11-01  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * WL-ELS \e$B$N\e(B typo \e$B=$@5!#\e(B
+       * wl-user-agent.el \e$B$H\e(B wl-mailto.el \e$B$N\e(B byte-compile \e$B;~$K\e(B
+       "Cannot open load file wl" \e$B$N%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-10-29  Takaaki MORIYAMA  <taka@airlab.cs.ritsumei.ac.jp>
+
+       * wl-exit \e$B$G\e(B kill-emacs-hook \e$B$+$i\e(B wl-save-status \e$B$r>C$9$h$&$K$7$?!#\e(B
+
+1999-10-28  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * new file: WL-ELS\e$B!#\e(B
+       * WL-MK: install.el \e$B$r;H$&$h$&BgI}$K=q$-49$($?!#\e(B
+
+1999-10-28  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-ja.texi: wl-template-select \e$B$N%-!<%P%$%s%I$,4V0c$C$F$$$?$N$r\e(B
+       \e$B=$@5!#\e(B
+       * INN 2.3 \e$B$G$bL$FI?t$,0lCW$9$k$h$&$K$7$?!#\e(B
+
+1999-10-28  TAKAHASHI Kaoru (\e$B9b66\e(B \e$B0j\e(B) <kaoru@kaisei.org>
+
+       * wl-ja.texi: \e$BBgI}$K=$@5!#\e(B
+
+1999-10-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Folder \e$B%b!<%I$G$b\e(B 'Z' \e$B$K\e(B wl-status-update \e$B$r%P%$%s%I$7$?!#\e(B
+       * Fix: wl-summary-goto-last-displayed-msg
+       \e$B#1$D$7$+I=<($7$?$3$H$,$J$$;~$KA0$N%a%C%;!<%8$KLa$l$J$+$C$?$N$r\e(B
+       \e$B=$@5!#\e(B
+
+1999-10-26  kurati <kurati@bigfoot.com>
+
+       * FCC: \e$B$GJd40$,8z$/$h$&$K$7$?!#\e(B
+
+1999-10-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Unplugged \e$B;~$G$b=EMW%^!<%/$NF14|$O$9$k$h$&$K$7$?!#\e(B
+       * auto-refile \e$B$NA0$KB8:_$9$k$+$I$&$+%A%'%C%/$9$k$h$&$K$7$?!#\e(B
+       (Toshihiko Kodama (\e$B>.6L\e(B \e$BMxI'\e(B) <kodama@ayame.mfd.cs.fujitsu.co.jp>
+       \e$B$5$s$N8fMWK>$K4p$E$/\e(B)
+       * Fix: score \e$B$G\e(B expunge \e$B$7$?%a%C%;!<%8$O\e(B IMAP4 \e$B%5!<%P>e$G$b\e(B
+       \e$BFI$s$@$3$H$K$9$k$3$H$K$7$?!#\e(B
+
+1999-10-22  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * \e$B%5%^%j%P%C%U%!\e(B(\e$B%9%l%C%I%b!<%I\e(B)\e$B$G%+!<%=%k$,9TF,$K$J$$$H$-$K\e(B
+       \e$B%9%l%C%I$KBP$9$k\e(B mark \e$BA`:n$r$9$k$HF0:n$,JQ$K$J$k$N$r=$@5!#\e(B
+       * wl-thread-refile \e$B$G\e(B refile \e$B@h$K\e(B refile \e$B85$HF1$8%U%)%k%@$r\e(B
+       (\e$B4V0c$C$F\e(B)\e$B;XDj$7$F%(%i!<$H$J$C$?$H$-$K%+!<%=%k$r0\F0$7$J$$MM$K$7$?!#\e(B
+       * wl-summary-jump-to-parent-message \e$B$G\e(B message \e$B$N8!:w$,<:GT$7$?;~$N\e(B
+       \e$B%a%C%;!<%8$rJQ$($?!#\e(B
+       * wl-summary-exec-region \e$B$G9TC10L$G$J$$\e(B region \e$B$r;XDj$7$?;~$N\e(B
+       region \e$B$NJd@5J}K!$,D>4QE*$G$J$+$C$?$N$rJQ99$7$?!#\e(B
+
+1999-10-25  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * fldmgr: \e$B%0%k!<%W%U%)%k%@$rDI2C$9$k$H%(%i!<$K$J$k$N$r=$@5$7$?!#\e(B
+       * wl-defface \e$B$N@_Dj$r\e(B static \e$B$K$7$?!#\e(B
+       * wl-folder-buffer-search-entity, wl-folder-folder-name \e$B$G\e(B
+         \e$BL$FI?t$J$IITL@$N%U%)%k%@$K$b%^%C%A$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-redisplay-no-mime \e$B$G$b!$\e(Bwl-summary-buffer-disp-msg \e$B$H\e(B
+         wl-current-summary-buffer \e$B$r@_Dj$9$k$h$&$K$7$?!#\e(B
+
+1999-10-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B5/F0;~$K%I%a%$%sL>$,@5$7$$$+%A%'%C%/$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-local-domain\e$B!#\e(BFQDN \e$B$rJV$5$J$$%7%9%F%`MQ$N%I%a%$%sL>\e(B
+       \e$B$r@_Dj!#\e(B
+       * \e$B%U%)%k%@%b!<%I$N2#%9%/%m!<%k%P!<$r>C$7$?!#\e(B
+       ("MATSUBAYASHI 'Shaolin' Kohji" <shaolin@rins.st.ryukoku.ac.jp> \e$B$N\e(B
+       \e$B8fJs9p$K4p$E$/\e(B)
+       * \e$B?75,4X?t\e(B wl-mime-edit-preview-message\e$B!#%W%l%S%e!<$N?'$D$1!#\e(B
+       * unplugged \e$B$+$D!"%-%c%C%7%e$5$l$?L$FI$,$J$$$H$-!"\e(B
+       \e$B%+!<%=%k$r%"%/%;%9$G$-$k:G8e$N%a%C%;!<%8$K9g$o$;$k$h$&$K$7$?!#\e(B
+       * WL-CFG \e$B$N\e(B utils \e$B$N;XDj$N;EJ}$,$^$A$,$C$F$$$?$N$r=$@5!#\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$N8f;XE&\e(B)
+       * make info \e$B$K<:GT$9$k$N$r=$@5!#\e(B
+       (Kazufumi Hayasaka <hayakazu@hauN.org> \e$B$5$s$N8f;XE&\e(B)
+       * 2.2.5 - "Come Undone"
+
+1999-10-24  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * double negative \e$B$r\e(B simplify\e$B!#\e(B
+
+1999-10-24  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * FCC \e$B$,\e(B unplugged folder \e$B$J$i\e(B dop \e$B%-%e!<$KDI2C$9$k$h$&$K$7$?!#\e(B
+       * elmo-dop-queue \e$B$K\e(B "append-operations" \e$B$rDI2C$7$?!#\e(B
+       * wl-summary-flush-pending-append-operations \e$B$K$*$$$F4{FI%a%C%;!<\e(B
+         \e$B%8$r0z$-7Q$0$h$&$K$7$?!#\e(B
+
+1999-10-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * WL-CFG \e$B$H$7$F$=$l$C$]$$$N$rMQ0U$7$F$_$?!#\e(B
+       * \e$B%*%U%i%$%sAw?.$G\e(B IMAP4 \e$B%U%)%k%@$X$N\e(B FCC \e$B$,L5;k$5$l$k$N$r=$@5!#\e(B
+       (Masafumi NAKANE <max@wide.ad.jp> \e$B$5$s$h$j8fJs9p\e(B)
+       * Emacs \e$B$H\e(B XEmacs \e$B$G\e(B refile-alist \e$B$r6&M-$G$-$J$+$C$?$N$r=$@5!#\e(B
+       (Takuo KITAME / \e$BKLL\BsO:\e(B <kitame@northeye.org> \e$B$5$s$h$j8fJs9p\e(B)
+       * wl-ja.texi: tm, semi \e$B$NG[I[85$r=$@5!#\e(B
+       * Folder \e$B%b!<%I$GJL%5!<%P$GF1$8L>A0$N\e(B IMAP4 \e$B%U%)%k%@$,$"$C$?$H$-$K!"\e(B
+       \e$BJL$N%U%)%k%@$NL$FI?t$,=q$-JQ$o$C$F$7$^$&$3$H$,$"$k$N$r=$@5!#\e(B
+       (Kazuyoshi Mii <mii@isl.ntt.co.jp> \e$B$5$s$h$j8fJs9p\e(B)
+
+1999-10-23  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * elmo-dop-merge-funcs \e$B$K$J$$A`:n$r!$<N$F$k$h$&$K$J$C$F$$$?$N$r\e(B
+       \e$B=$@5!#\e(B
+
+1999-10-23  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * port \e$B$N\e(B label \e$B$r<+F0E*$K:n@.$9$k$h$&$K$7$?!#\e(B
+       * dop queue \e$B$NI=<($r>/$7$@$1>\:Y$K$7$?!#\e(B
+       * elmo-dop-queue-merge \e$B$G\e(B elmo-dop-queue \e$B$,\e(B nil \e$B$K$J$k$3$H$,$"$k$N\e(B
+         \e$B$r=$@5$7$?!#\e(B
+
+1999-10-23  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * elmo-prefetch-msgs \e$B$G!$=hM}$N?J$_$0$"$$$r%+%&%s%H$9$k$h$&$K$7$?!%\e(B
+
+1999-10-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-mime-save-content \e$B$r\e(B SEMI \e$B$KEPO?$9$k$H$-$K\e(B Wanderlust \e$B@lMQ\e(B
+       \e$B%a%=%C%I$H$9$k$h$&$K$7$?!#\e(B
+       * FLIM-1.12 \e$B7O$G\e(B partial \e$B$N%^!<%8$K<:GT$9$k$N$r=$@5!#\e(B
+       * WL-MK: \e$BBgI}$K=q$-D>$7$?!#\e(B
+
+1999-10-22  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * Rename: wl-score-edit-exit-function -> wl-score-edit-exit-func
+
+1999-10-22  Takuo KITAME / \e$BKLL\BsO:\e(B <kitame@northeye.org>
+
+       * etc/ja.Emacs: \e$B$$$/$D$+CM$,=EJ#$7$F$$$?$N$r=$@5!#\e(B
+
+1999-10-22  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * [wl-ja.texi] wl-summary-save-*
+         wl-summary-jump-to-msg-by-message-id-via-nntp
+         \e$B%*%U%i%$%s\e(Bprefetch
+         wl-folder-jump-to-current-entity
+         cram-md5,SSL \e$B$N@bL@$rDI2C!#\e(B
+
+1999-10-22  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * XEmacs built-in \e$B$N\e(B md5 \e$B$r8F$V$H$-$N\e(B CODING \e$B$r\e(B 'binary \e$B$K$7$?!#\e(B
+       * sticky summary \e$B$+$i\e(B "g" \e$B$GJL$N%U%)%k%@$K0\F0$9$k$H!$\e(B
+       temp \e$B%^!<%/$J$I$,>C$($k$K$b4X$o$i$:\e(B face \e$B$,85$KLa$i$J$$$N$r=$@5!#\e(B
+       * \e$B?75,JQ?t\e(B wl-prog-uudecode-no-stdout-option\e$B!#\e(BNon-nil \e$B$J$i\e(B
+       \e$B;XDj$5$l$?%U%!%$%kL>$G%;!<%V$9$k$h$&$K$7$?!#\e(B
+
+1999-10-21  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B%*%U%i%$%s=hM}%-%e!<$N%^!<%8=hM}!#\e(B
+
+1999-10-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-address-header-extract-address \e$B$G\e(B std11.el \e$B$rMxMQ$7$J$$$h$&$K\e(B
+       \e$B$7$?!#\e(B
+
+1999-10-20  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-reset-plugged-alist \e$B$,\e(B nil \e$B$J$i%5!<%P!&%]!<%HJL$N%W%i%0>uBV$r\e(B
+         \e$B=i4|2=$7$J$$$h$&$K$7$?!#\e(B
+
+1999-10-20  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Emacs 20.2 \e$B$G$O!"\e(BFolder \e$B%b!<%I=i4|2=;~$K\e(B buffer-read-only
+       \e$B$N%(%i!<$,H/@8$9$k$N$r=$@5!#\e(B
+       (Yasuhiro Ohta <yohta@acsu.buffalo.edu> \e$B$5$s$h$j8fJs9p!"\e(B
+       TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$h$j8f=u8@\e(B)
+       * XEmacs \e$B$G\e(B scrollbar \e$B$H\e(B toolbar \e$B$N%A%'%C%/$r$9$k$h$&$K$7$?!#\e(B
+       (Shigeru OKUMURA <sokumura@jaist.ac.jp> \e$B$5$s$h$j8f=u8@\e(B)
+
+1999-10-20  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * \e$BIT@5$J%X%C%@$N%a!<%k$r%j%U%!%$%k$7$h$&$H$9$k$H%(%i!<$,H/@8$9$k$N$r\e(B
+       \e$B=$@5!#\e(B
+       * \e$B%"%/%;%9%0%k!<%W$r:G=i$K3+$$$?$H$-$KFbMF$,8=$l$J$/$J$C$F$$$?\e(B
+       \e$B$N$r=$@5!#\e(B
+
+1999-10-19  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Folder \e$B%b!<%I$N\e(B 'E' \e$B$G\e(B wl-folder-toggle-disp-summary \e$B$,%(%i!<\e(B
+       \e$B$rH/@8$9$k$N$r=$@5!#\e(B
+       (Shigeru OKUMURA <sokumura@jaist.ac.jp> \e$B$5$s$N8fJs9p\e(B)
+       * timezone \e$B$N\e(B y2k \e$BBP:v$G\e(B eval-after-load \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+       * 2.2.4 - "Black Or White"
+
+1999-10-19  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * wl-fetch-confirm-threshold\e$B$r1[$($k%a%C%;!<%8$r\e(B
+       prefetch\e$B$7$h$&$H$7$?$H$-$K!"\e(B'n'\e$B$r2!$7$F%-%c%s%;%k$7$F$b\e(B
+       \e$B%^!<%/$,6u$K$J$C$F$7$^$&%P%0$N=$@5!#\e(B
+       * Offline Prefetch\e$B!#\e(B
+
+1999-10-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%U%)%k%@%b!<%I$N:G8e$N9T$G\e(B 'm f' \e$B$G$-$J$$$h$&$K$7$?!#\e(B
+       * \e$B%P%$%H%3%s%Q%$%k;~$N\e(B Warning \e$B$r8:$i$7$?!#\e(B
+       * hmac \e$B%Q%C%1!<%8$H\e(B ssl.el \e$B$r\e(B utils/ \e$B$K4^$a$F$_$?!#\e(B
+       (WL-CFG \e$B$G\e(B wl-install-hmac \e$B$,\e(B t \e$B$J$i%$%s%9%H!<%k$9$k$h$&$K$7$?!#\e(B)
+       * FLIM-1.12 \e$B$G$bF0$/$h$&$K$7$?!#\e(B
+       * Unplugged \e$B;~$K\e(B IMAP4 \e$B%U%)%k%@$K0\F0$9$k$H%(%i!<$,=P$k$N$r=$@5!%\e(B
+       * \e$B%5%^%j99?7;~!"\e(Bwl-summary-update-confirm-threshold \e$B$h$j$b99?7?t$,\e(B
+       \e$BB?$$$J$i$P!"0lItJ,$@$199?7$K$9$k$+$I$&$+!"<ALd$9$k$h$&$K$7$?!%\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-update-confirm-threshold\e$B!%\e(B
+
+1999-10-18  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B?75,JQ?t\e(B wl-summary-search-via-nntp\e$B!#\e(BNon-nil \e$B$G\e(B
+       wl-summary-jump-to-msg-by-message-id \e$B$+$i\e(B
+       wl-summary-jump-to-msg-by-message-id-via-nntp \e$B$r8F$V!#\e(B
+       \e$BCM$,\e(B 'confirm \e$B$J$i!"3NG'$r5a$a$F$+$i8F$S=P$9!#\e(B
+       * \e$B?75,4X?t\e(B wl-summary-jump-to-msg-by-message-id-via-nntp
+       \e$B;XDj$5$l$?\e(B Message-ID \e$B$N%K%e!<%95-;v$r\e(B NNTP \e$B7PM3$G8!:w$7!"\e(B
+       \e$B%U%)%k%@0\F0!#\e(B
+
+1999-10-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * expire \e$B$,\e(B number-or-marker-p error \e$B$rH/@8$9$k>l9g$,$"$k$N$r=$@5!#\e(B
+       * filter \e$B@8@.;~$K\e(B tocc \e$B$GJd40$G$-$k$h$&$K$7$?!#\e(B
+       * \e$B%U%)%k%@%b!<%I$G$N\e(B filter \e$B$N:n$jJ}$rJQ99!#\e(B
+
+1999-10-15  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * IMAP4 \e$B%U%)%k%@$NL$FI?t$,@5$7$/H?1G$5$l$k$h$&!$\e(B
+       elmo-imap4-server-diff \e$B;~$K!"\e(Belmo-imap4-commit \e$B$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,4X?t\e(B elmo-commit\e$B!#%5!<%P$N>uBV$r%"%C%W%G!<%H$5$;$k!#\e(B
+       * wl-folder-check-one-entity \e$B$,L5BL$K%U%)%k%@$NB8:_$r%A%'%C%/$7$F\e(B
+       \e$B$$$?$N$r=$@5!#\e(B
+       * elmo-imap4-max-of-folder: new implementation.
+       * elmo-imap4-folder-exists-p: new implementation.
+
+1999-10-14  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * wl-ja.texi: fixed typo (@kbd {l} -> @kbd{l}).
+
+1999-10-14  TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+       * xemacs \e$B$G\e(B wl-local-variable-p \e$BB>$,F0$+$J$$$N$r=$@5!#\e(B
+
+1999-10-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%-%c%C%7%e$,$"$k$H$$$/$iFI$s$G$bL$FI%^!<%/$,>C$($J$/$J$C$F$7$^$&$N\e(B
+       \e$B$r=$@5!#\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$N8f;XE&\e(B)
+       * wl-address-header-extract-address \e$B$G\e(B std11.el \e$B$rMxMQ$9$k$h$&$K$7$?!#\e(B
+
+1999-10-14  Masafumi NAKANE <max@wide.ad.jp>
+
+       * Fixed Typo: exit-> exist.
+
+1999-10-13  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * unplugged.xpm: \e$B@V$rF~$l$?!#\e(B
+
+1999-10-13  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-filter-get-spec \e$B$N;EMMJQ99$K4X78$9$k=$@51L$l$N=$@51L$l\e(B
+       \e$B$r=$@5\e(B (elmo-folder-diff)\e$B!#\e(B
+
+1999-10-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-plugged-mode \e$B$N%&%#%s%I%&:n@.=hM}$NIi2Y$r7Z$/$7$?!#\e(B
+       * wl-draft-raw-send \e$B$G\e(B wl-draft-config-alist \e$B$r\e(B nil \e$B$K\e(B
+       \e$B94B+$7$J$$$h$&$K$7$?!#\e(B
+
+1999-10-13  Sasaki Toshiya <toshi@unicorn.tohoku.nttcom.co.jp>
+
+       * wl-folder-use-sever-diff-p: \e$B%^%k%A%U%)%k%@$G!"0l$D$G$b\e(B
+       IMAP4 \e$B%U%)%k%@$,$"$l$P\e(B t \e$B$K$J$k$h$&$K$7$?!#\e(B
+
+1999-10-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 'm U' (wl-summary-temp-mark-uudecode)\e$B$G!"=PNO@h$N\e(B
+       \e$B%U%!%$%kL>$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+       * \e$B%U%)%k%@%b!<%I$b%[%$!<%k$KBP1~$5$;$?!#\e(B
+       * tm-wl.el \e$B$,JT=8Cf$@$C$?$N$r=$@5!#\e(B
+       (Toshihiko Kodama (\e$B>.6L\e(B \e$BMxI'\e(B) <kodama@ayame.mfd.cs.fujitsu.co.jp> \e$B$5$s\e(B
+       \e$B$N8f;XE&\e(B)
+       * wl-ja.texi: OR \e$B>r7o$N@bL@$rDI2C!#\e(B
+       * time-stamp \e$B$K0MB8$7$J$$$h$&$K$7$?!#\e(B
+
+1999-10-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.3 - "Always"
+       * read-directroy-name -> wl-read-directory-name\e$B!#\e(B
+
+1999-10-12  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B?75,4X?t\e(B wl-summary-save-region (ry), wl-thread-save (ty),
+       wl-summary-temp-mark-save (my)\e$B!#\e(B
+
+1999-10-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,JQ?t\e(B wl-draft-sendlog\e$B!#\e(Bnon-nil \e$B$J$iAw?.%m%0$r@8@.$9$k!#\e(B
+       * New plugged system \e$BBh#2CF\e(B.
+
+1999-10-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,4X?t\e(B wl-summary-temp-mark-pick (m? \e$B$K%P%$%s%I\e(B)\e$B!#\e(B
+       \e$B0l;~%^!<%/$,$D$$$?%a%C%;!<%8$rBP>]$H$7$F8!:w!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-imap4-disuse-server-flag-mailbox-regexp\e$B!#\e(B
+       \e$BJ8;zNs$,%^%C%A$7$?%a!<%k%\%C%/%9$N%U%i%0$r;H$o$J$$!#\e(B
+       \e$B%G%U%)%k%H$O\e(B "^#mh"\e$B!#\e(B
+       * wl-address-file-name -> wl-address-file\e$B!#\e(B
+       * wl-score-default-file-name -> wl-score-default-file\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-auto-sync-marks\e$B!#\e(B
+       Non-nil \e$B$J$i%5%^%jF14|;~$KL$FI\e(B/\e$B=EMW%^!<%/$bF14|$9$k!#\e(B
+       \e$B%G%U%)%k%H$O\e(B t\e$B!#\e(B
+       * wl-stirict-diff-folders \e$B$N%G%U%)%k%H$r\e(B nil \e$B$K$7$?!#\e(B
+       * \e$B%5%^%j$G=EMW%^!<%/$rF14|$9$k$h$&$K$7$?!#\e(B
+       * IMAP4 \e$B%U%)%k%@$GL$FI%U%i%0$rF14|$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,%3%^%s%I\e(B wl-summary-sync-marks\e$B!#\e(B
+       * IMAP4 \e$B%U%)%k%@$G%5!<%PB&$NL$FI?t$rI=<($G$-$k$h$&$K$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-folder-use-server-diff\e$B!#\e(B
+
+1999-10-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B wl-envelope-from\e$B!#\e(Benvelope from \e$B$r@_Dj!#\e(B
+       nil \e$B$J$i\e(B wl-from \e$B$,\e(B envelope from \e$B$H$J$k!#%G%U%)%k%H$O\e(B nil\e$B!#\e(B
+
+1999-10-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Message \e$B%P%C%U%!$G\e(B 'e' \e$B$r2!$7$?$H$-$N%;!<%V4X?t$r\e(B
+       \e$B$A$g$C$H$@$1?F@Z$J$b$N$r%G%U%)%k%H$H$7$?\e(B (SEMI \e$BMQ\e(B)\e$B!#\e(B
+       * wl-draft-send \e$B$G!"\e(Bsending-buffer \e$B$,\e(B buffer-live-p \e$B$N>l9g$@$1\e(B
+       kill-buffer \e$B$9$k$h$&$K$7$F$_$?!#\e(B
+       * \e$BL$FI?t%A%'%C%/;~!"%U%)%k%@$NB8:_$r$$$A$$$AD4$Y$k$N$r$d$a!"\e(B
+       \e$B%A%'%C%/$K<:GT$7$?$H$-$K%U%)%k%@$NB8:_$rD4$Y$k$h$&$K$7$?!#\e(B
+       * \e$B%a%C%;!<%8%P%C%U%!$K%+!<%=%k$,$"$k$H$-$K%[%$!<%k$r2s$9$H%(%i!<\e(B
+       \e$B$K$J$k$N$r=$@5!#\e(B
+
+1999-10-04  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B%0%k!<%W%U%)%k%@\e(B(\e$BHs%"%/%;%9%0%k!<%W\e(B)\e$B$KBP$7$F!$\e(B
+       C-u SPC \e$B$7$?;~$K!$\e(Bwl-folder-update-recursive-current-entity \e$B$r\e(B
+       \e$B8F$V$h$&$K$7$?!%\e(B
+
+1999-10-04  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * filter \e$B$5$l$?\e(B IMAP4 \e$B%U%)%k%@$N%*%U%i%$%s=hM}$GL5BL$J:o=|=hM}\e(B
+       \e$B%-%e!<$,N/$k$N$r=$@5!#\e(B
+       (OKAZAKI Tetsurou <okazaki@be.to> \e$B$5$s$N8f;XE&\e(B)
+
+1999-10-04  okada@opaopa.org (\e$B2,ED\e(B \e$B7r0l\e(B /  Kenichi OKADA)
+
+       * \e$B%"%/%;%9%0!<%W$K\e(B Petname \e$B$r$D$1$k$H\e(B
+       wl-folder-update-recursive-current-entity \e$B$,F0$+$J$+$C$?$N$r=$@5!%\e(B
+
+1999-10-03  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-refile-alist \e$B$KEPO?$9$k:]$N\e(B key (mail address) \e$B$K\e(B
+        downcase \e$B$r$+$1$k$h$&$K$7$?!#\e(B
+
+1999-10-02  Tetsuya Uemura <uemura@pp.iij4u.or.jp>
+
+       * \e$B%I%i%U%H%P%C%U%!$G%a!<%k$r:n@.Cf$K!"\e(B
+       C-u 0 C-l \e$B$J$I$G;XDj$N0LCV$K%+!<%=%k$,9T$/$h$&$K=$@5!#\e(B
+
+1999-10-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * IMAP4 \e$B$N%Q!<%H%U%'%C%A$G$O!"$=$N%a%C%;!<%8$rFI$s$@$3$H$K\e(B
+       \e$B$7$J$$$h$&$K$7$?!#\e(B
+
+1999-09-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * -nw \e$B$G5/F0$7$?\e(B Emacs 20 \e$B$G%W%j%s%H$G$-$J$$$N$r=$@5!#\e(B
+
+1999-09-28  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%U%)%k%@$+$i%5%^%j$K0\F0$9$k:]!$%U%)%k%@$rI=<($7$F$$$J$$%&%#%s\e(B
+         \e$B%I%&$K%5%^%j$,I=<($5$l$k$3$H$,$"$k$N$r=$@5$7$?!#\e(B
+       * \e$B%[%9%H$,\e(B2\e$B$D0J2<$@$H\e(B wl-plugged-change \e$B$G%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * \e$B%5%^%j$G$b\e(B wl-plugged-change \e$B$G$-$k$h$&$K$7$?!#\e(B
+
+1999-09-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%3%s%Q%$%k;~$K\e(B wl.el \e$B$r\e(B load \e$B$7$J$$$h$&$K$7$?!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f;XE&$K\e(B
+        \e$B4p$E$/\e(B)
+
+1999-09-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * New plugged system \e$B$G\e(B error \e$B$,H/@8$9$k>l9g$,$"$k$N$r=$@5!#\e(B
+
+1999-09-26  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * New plugged system.
+
+1999-09-24  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-break-pages \e$B$r\e(B nil \e$B$K94B+$7$F$b\e(B
+       wl-summary-set-message-buffer-or-redisplay() \e$B$G$O:FIA2h$5$l$J$$$N$G!"\e(B
+       wl-summary-redisplay-internal () \e$B$r<B9T$9$k$h$&$K$7$?!#\e(B
+       * wl-break-pages \e$B$,\e(B t \e$B$N;~$O2~JG$5$l$?8e$NItJ,$,%W%j%s%H=PNO\e(B
+       \e$B$5$l$J$$$N$r=$@5!#\e(B
+
+1999-09-23  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <okada@opaopa.org>
+
+       * wl-stay-folder-window t\e$B$G;H$C$F$$$k$H!$9T$,@^$jJV$5$l$F!$\e(B
+       \e$BHs>o$K8+?I$$$N$G!$\e(Btruncate-line t\e$B$K$7$?!#\e(B
+
+1999-09-23  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * elmo-filter-get-spec \e$B$N;EMMJQ99$K4X78$9$k=$@51L$l$r=$@5\e(B
+       (elmo-folder-diff)\e$B!#\e(B
+
+1999-09-23  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * localdir \e$BEy$,@dBP%Q%9$+$I$&$+$r\e(B file-name-absolute-p \e$B$GH=Dj$7!"\e(B
+       .elmo \e$B0J2<$K\e(B db \e$B$r:n$k$h$&$K$7$?!#\e(B
+
+1999-09-20  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * mime-view-caesar \e$B$G:n$i$l$?%P%C%U%!$r>C5n$9$k%3!<%I$,\e(B
+       \e$BKu;&$5$l$F$7$^$C$?$N$rI|3h!#\e(B
+
+1999-09-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B4X?t\e(B elmo-safe-filename \e$B$G\e(B OS/2 \e$B$G$O\e(B "|<>" \e$B$r%U%!%$%kL>$H$7$F\e(B
+       \e$B;H$($J$$$N$KBP1~!#\e(B
+
+1999-09-21  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.2 - "You Could Be Mine"
+       * \e$B%U%)%k%@%b!<%I$K$"$k%U%)%k%@$O!"\e(Bwl-save-folder-list \e$B$NCM$K\e(B
+       \e$B4X78$J$/%;!<%V$9$k$h$&$K$7$F$_$?!#\e(B
+       * filter \e$B$G%U%#!<%k%IL>$K\e(B 'tocc' \e$B$r;XDj$9$k$H\e(B to \e$B$+\e(B cc \e$B$K;XDjJ8;zNs$,\e(B
+       \e$B4^$^$l$k%a%C%;!<%8$r<h$j=P$9$h$&$K$7$?!#\e(B
+       * filter \e$B%U%)%k%@$G\e(B OR \e$B>r7o!"\e(BNOT \e$B>r7o$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+       * wl-uniq-list -> elmo-uniq-list
+
+1999-09-20  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * timezone.el \e$B$N\e(B y2k \e$BBP:v$NDj5A$rJQ99!#\e(B
+       * wl-summary-save \e$B$G!"%;!<%V8e\e(B "No message to save." \e$B$H\e(B
+       \e$B8@$o$l$k$N$r=$@5!#\e(B
+       * local-variable-p \e$B$NDj5A$r\e(B wl-util.el \e$B$X0\F0!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8fJs9p\e(B
+       \e$B$K4p$E$/\e(B)
+
+1999-02-02  IMAI Takeshi <imai@ed2.com1.fc.nec.co.jp>
+
+       * IMAP \e$B%U%)%k%@$K\e(B expire \e$B$G$-$J$+$C$?$N$r=$@5!#\e(B
+
+1999-09-20  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * mime-view-caesar \e$B$G:n$i$l$?%P%C%U%!$r>C5n$9$k%3!<%I$,\e(B
+       \e$BKu;&$5$l$F$7$^$C$?$N$rI|3h!#\e(B
+
+1999-09-19  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * open-network-stream \e$B$N\e(B process-buffer \e$B$r\e(B unibyte \e$B$K@_Dj!#\e(B
+
+1999-09-19  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * wl-ja.texi \e$B$N=$@5!#\e(B
+
+1999-09-17  HAYAKAWA akio <akio-h@po.iijnet.or.jp>
+
+       * \e$B%m!<%+%k$N%U%)%k%@$@$1$G9=@.$5$l$F$$$k%^%k%A%U%)%k%@\e(B
+       \e$B$b%m!<%+%k$H$_$J$9$h$&$K$7$?!#\e(B
+
+1999-09-16  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * typo fix.
+
+1999-09-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * 1\e$B$D$N%U%l!<%`$K$*$$$F%a%C%;!<%8$rI=<($9$k%&%#%s%I%&$O6&M-$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * wl-summary-goto-folder \e$B$7$?;~$K!$\e(Bwl-summary-buffer-disp-msg
+         \e$B$NCM$K$h$j%a%C%;!<%8$NI=<($rI|85$9$k$h$&$K$7$?!#\e(B
+
+1999-09-15  OKAZAKI Tetsurou <okazaki@be.to>
+
+       * make install \e$B$G\e(B elmo \e$B4X78$N\e(B el \e$B%U%!%$%k$,L5>r7o$K\e(B
+       \e$B%$%s%9%H!<%k$5$l$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B?75,4X?t\e(B wl-install-modules\e$B!#\e(B
+
+1999-09-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.1 - "Wild World"
+       * typo: stickey -> sticky.
+       * wl-nemacs.el: Nemacs \e$B8~$1$K\e(B local-variable-p \e$B$rDj5A!#\e(B
+       * Rename: etc/ChangeLog.* -> etc/ChangeLog.*.ja
+       * Rename: etc/ChangeLog.*.en -> etc/ChangeLog.*
+       * XEmacs \e$B$G%m%4$,=P$J$$$N$r=$@5!#\e(B
+       * XEmacs \e$B$N%$%s%9%H!<%k4X?t$,$3$o$l$F$$$?$N$r=$@5!#\e(B
+       (Hidetomo Machi <machi@ailab.is.tsukuba.ac.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-ja.texi: MIME \e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k$N9`$r99?7!#\e(B
+       * \e$B%$%s%9%H!<%k;~!":n$C$?\e(B info \e$B%U%!%$%k$r>C$5$J$$$h$&$K$7$?!#\e(B
+       * \e$B?75,4X?t\e(B wl-kill-buffers\e$B!#\e(B
+       * wl-summary-force-exit \e$B$H\e(B wl-exit \e$B$N$H$-$K\e(B Sticky Message \e$B$r:o=|\e(B
+       \e$B$9$k$h$&$K$7$?!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f=u8@\e(B)
+
+1999-09-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * XEmacs-21.1.6 \e$B$G$O\e(B sticky \e$B%5%^%j$G\e(B wl-summary-read \e$B$,%(%i!<$K$J\e(B
+         \e$B$k$N$r=$@5$7$?!#\e(B
+
+1999-09-14  Koichiro Ohba <Koichiro.Ohba@nf-system.co.jp>
+
+       * ja/dot.wl \e$B$N\e(B elmo-eword-decode-string \e$B$NJQ991L$l$r=$@5!#\e(B
+
+1999-09-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * tm-wl.el: SEMI API \e$B$K$"$o$;$F\e(B defalias-maybe \e$B$7$?!#\e(B
+       * \e$B$h$/9M$($?$i\e(B smtp.el \e$B$O\e(B flim|clime \e$B$K4^$^$l$F$$$k$N$G:o=|!%\e(B
+
+1999-09-13  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.2.0 - "Vogue"
+       * smtp.el: Sync up with flim-1.13.2\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-install-els\e$B!#\e(Bnil \e$B$J$i\e(B el \e$B%U%!%$%k$r%$%s%9%H!<%k$7$J$$!#\e(B
+       (for WL-CFG)
+       * wl-draft-reply \e$BEy$r\e(B Sticky Message \e$BBP1~!#\e(B
+       * wl-drfat-buffer-cur-message-buffer ->
+       wl-current-message-buffer \e$B$H$7!"\e(Bwl-util.el \e$B$K0\F0!#\e(B
+       * elmo-cross-device-link-error-p \e$B$rJQ99!#\e(B
+       (pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp> \e$B$5$s$N8fJs9p$K4p$E$/\e(B)
+
+1999-09-13  Mito <mit@nines.nec.co.jp>
+
+       * Sticky Message\e$B!#\e(B
+       * Score \e$B%U%!%$%k$N\e(B guess \e$BJ}K!$N3HD%!#\e(B
+       * elc \e$B$@$1$G$J$/\e(B el \e$B%U%!%$%k$b%$%s%9%H!<%k$5$l$k$h$&$K$7$?!#\e(B
+
+1999-09-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%5%s%W%k%U%!%$%k$O\e(B samples \e$B%G%#%l%/%H%j$K$^$H$a$k$h$&$K$7$?!#\e(B
+       * \e$B%5%s%W%k%U%!%$%k1Q8lHG$rDI2C!#\e(B
+       * etc/*.xpm -> etc/icons/*.xpm
+       * etc/TODO -> doc/TODO.ja
+
+1999-09-12 OKAZAKI Tetsurou <okazaki@be.to>
+
+       * since, before \e$B4X78$N=$@5!#\e(B
+
+1999-09-10  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * im-wl-prog-imput-error-msg -> im-wl-dispatcher-error-msg\e$B!#\e(B
+
+1999-09-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * convert-standard-filename \e$B$N\e(B defmacro \e$B$rGQ;_!#\e(B
+       * open-network-stream-as-binary \e$B$N\e(B defmacro \e$B$r:o=|!#\e(B
+       * with-current-buffer, with-temp-buffer \e$BEy$N\e(B defmacro \e$B$r:o=|!#\e(B
+       * elmo-eword-decode-string -> \e$BGQ;_!#\e(B
+
+1999-09-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B elmo-default-imap4-user\e$B!%\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s\e(B \e$B$N8f=u8@$K4p$E$/\e(B)
+       * 2.1.5 - "Unbelievable"
+
+1999-09-08  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B elmo-nntp-max-number-precedes-list-active\e$B!#\e(B
+       Non-nil \e$B$J$i\e(B list active \e$B$GF@$i$l$k?t;z$r5-;vHV9f$N:GBgCM$H$7$F07$&!#\e(B
+       * \e$B?75,4X?t\e(B elmo-update-number\e$B!#\e(B
+       elmo-nntp-max-number-precedes-list-active \e$B$,\e(B non-nil \e$B$N$H$-$K\e(B
+       \e$B%5%^%j$NF14|;~$K!"\e(Bmsgdb \e$B$N99?7$,$J$/$F$b5-;vHV9f$N:GBgCM$rF14|\e(B
+       \e$B$5$;$k$h$&$K$7$?!#\e(B
+       (\e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <okada@opaopa.org> \e$B$5$s$N8f;XE&$K4p$E$/\e(B)
+
+1999-09-06  Akihiro Motoki <mokkun@iname.com>
+
+       * elmo-localnews-append-msg \e$B$N0z?t$,B-$j$J$+$C$?$N$r=$@5!#\e(B
+
+1999-09-06  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * [im-wl] im-wl-prog-imput-error-msg \e$B$,%P%C%U%!%m!<%+%k$K$J$C$F$b\e(B
+       \e$BBg>fIW$J$h$&!"%W%m%;%9%P%C%U%!$KCM$r%3%T!<$9$k$h$&$K$7$?!#\e(B
+       * (elmo-folder-local-p) \e$B$r;H$C$F!"\e(B'N','P' \e$B$b\e(B local \e$B$J$i\e(B plug \e$B>uBV\e(B
+       \e$B$K4X78$J$/F0:n$9$k$h$&$K$7$?!#\e(B
+       (Akihiro Motoki <mokkun@iname.com> \e$B$5$s$N8f=u8@\e(B)
+
+1999-09-03  Akihiro Motoki <mokkun@iname.com>
+
+       * 'p' \e$B$,\e(B localdir \e$B$G$bL$FI%a%C%;!<%8$r%9%-%C%W$7$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B?75,4X?t\e(B (elmo-folder-local-p)
+
+1999-09-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%F%s%W%l!<%HA*Br$N%-!<%P%$%s%I$r\e(B C-cC-j \e$B$K$7$?!#\e(B
+       (TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>\e$B$5$s!"\e(B
+       Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f=u8@\e(B)
+
+1999-08-31  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%I%i%U%H$NAw?.;~!"%-%e!<=hM};~$N%a%C%;!<%8$N=P$7J}$rJQ99!#\e(B
+
+1999-08-31  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [im-wl] \e$B%5%V%W%m%;%9$N8F$S=P$7;~$K%P%C%U%!$rJQ99$;$:!"\e(B
+         \e$B%W%m%;%9$N=PNO$@$1\e(B" *Wl Watch*" \e$B$K8~$1$k$h$&$K$7$?!#\e(B
+
+1999-08-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * [wl-ja.texi] extra-fields \e$B$,\e(B IMAP \e$B%U%)%k%@$GM-8z$K$J$C$F$$$?$N$r\e(B
+       \e$BH?1G!#\e(B(Sasaki Toshiya <toshi@unicorn.tohoku.nttcom.co.jp>\e$B$5$s$N8f;XE&\e(B)
+       *  \e$BJ,3d$5$l$?\e(B MIME encode \e$B$5$l$?%a%C%;!<%8$rAw$m$&$H;W$&$H!"\e(B
+       \e$BL58B%k!<%W$K4Y$C$F$7$^$&$N$r=$@5!#\e(B
+       (Mikio Nakajima <minakaji@osaka.email.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+
+1999-08-30  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * new im-wl.el
+
+1999-08-27  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B:G2<9T$G\e(B `K'/`L' (wl-summary-increase/lower-score) \e$B$9$k$H\e(B,
+       rule \e$BF~NO$KFMF~$7$F$7$^$&$N$G\e(B if \e$BJ8$r$R$H$DHo$;$?!#\e(B
+       (TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp> \e$B$5$s$N8f=u8@\e(B)
+       * EMWAC \e$BEy$N%5!<%P!<$G$O!"%5!<%P!<$+$i$NJVEz$rBT$DA0$K%3%^%s%I$r\e(B
+       \e$BAw$C$F$7$^$&$H$=$N8e%5!<%P!<$+$i$N1~Ez$,$J$/$J$C$F$7$^$&$i$7$$$N$G!"\e(B
+       \e$B?75,JQ?t\e(B elmo-pop3-send-command-synchronously \e$B$,\e(B non-nil \e$B$J$i\e(B
+       \e$B%5!<%P$NJVEz$rBT$D$h$&$K$7$?!#\e(B
+       (Atsushi Tada <tada@tworks.co.jp> \e$B$5$s$N%Q%C%A$K4p$E$/\e(B)
+       * \e$B:G6a$N\e(B SEMI \e$B$G\e(B mime-store-message/partial-piece \e$B$,F0$+$J$/\e(B
+       \e$B$J$C$?$N$r=$@5!#\e(B
+       * XEmacs \e$B$G%I%i%U%H%b!<%I$N%"%$%3%s$,=P$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+
+1999-08-26  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * \e$B%5%^%j%b!<%I$G:G8e$N9T!J%a%C%;!<%8$,$J$$9T!K$K%+!<%=%k$r$*$$\e(B
+       \e$B$F\e(B "y" \e$B$rF~NO$9$k!J\e(Bwl-summary-save\e$B$r<B9T$7$h$&$H$9$k!K$H!"%a%C\e(B
+       \e$B%;!<%8HV9f$,<h$l$J$$$?$a%(%i!<$H$J$k$N$r=$@5!#\e(B
+
+1999-08-26  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$BGX7J$,L@?'$N>l9g$N?'$N%G%U%)%k%H$r$A$g$C$HJQ99$7$F$_$?!#\e(B
+       * \e$B%U%#%k%?;XDj$G\e(B /last=200/ \e$B$H$7$F$7$^$&$H$^$:$$$3$H$K$J$k$N$r=$@5!%\e(B
+       * % \e$B$N%"%/%;%9%0%k!<%W$H$7$F\e(B root \e$B$r;XDj$G$-$J$+$C$?$N$r=$@5!%\e(B
+
+1999-08-25  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.1.4 - "Tears In Heaven"
+       * [wl-ja.texi] Summary \e$B$N\e(B C-u . \e$B$N@bL@$rDI2C\e(B
+         (susumu-w@ops.dti.ne.jp \e$B$N8f;XE&\e(B)\e$B!#\e(B
+
+1999-08-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%U%)%k%@C&=P;~$N%^!<%/<B9T$,<:GT$7$?>l9g!"%5%^%j$K%4%_$,\e(B
+         \e$B;D$C$F$7$^$&$N$G!"<:GT$7$?>l9g$O%(%i!<$rH/@8$9$k$h$&$K$7$?!#\e(B
+       * split \e$B$5$l$?%a%C%;!<%8$N%X%C%@$,\e(B encode \e$B$5$l$J$$$3$H$,$"$k$N$r=$@5!#\e(B
+       * Unplugged \e$B$G!$%-%c%C%7%e$5$l$?\e(BIMAP\e$B%U%)%k%@$NL$FI%a%C%;!<%8$r\e(B
+         \e$BFI$s$@$3$H$,!$%*%s%i%$%s$K$J$C$?=V4V$K%5!<%PB&$KH?1G$5$l$J$$$N$r\e(B
+         \e$B=$@5!%\e(B
+       * Unplugged \e$B$G!$%U%!%$%k%-%c%C%7%e$5$l$F$$$J$$%a%C%;!<%8$rFI$`$H!$\e(B
+         \e$BA0$N%a%C%;!<%8$,I=<($5$l$F$7$^$&$N$r=$@5!%\e(B
+       * \e$BA4HL$K\e(B, \e$B%9%l%C%I$r3+JD$9$k$H\e(B temp-mark \e$B$h$j\e(B mark \e$B$NJ}$,M%@h\e(B
+         \e$B$5$l$F?'$,$D$/$N$r=$@5\e(B(susumu-w@ops.dti.ne.jp \e$B$N8f;XE&\e(B)\e$B!%\e(B
+       * wl-thread-insert-message: wl-summary-goto-top-of-current-thread \e$B$r\e(B
+         \e$B;H$o$J$$$h$&$K$7$?!#\e(B
+       * wl-summary-goto-top-of-current-thread: \e$B=q$-D>$7!#\e(B
+       * "W" \e$B$G%I%i%U%H$r:n@.$7$?$H$-$K!$\e(B
+         wl-mail-setup-hook \e$B$,8F$P$l$J$$=$@5$,$J$5$l$F$$$J$+$C$?!%\e(B
+         (\e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <okada@opaopa.org> \e$B$5$s$N8f;XE&\e(B)
+       * push -> wl-push\e$B!%\e(B
+         (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f=u8@\e(B)
+
+1999-08-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-eword-decode-string \e$B$r\e(B defalias \e$B$9$k$N$r$d$a$k!#\e(B
+       * tm \e$B$G\e(B flim \e$B$,;H$o$l$F$$$l$P\e(B User-Agent \e$B$K%P!<%8%g%s$rI=<(!%\e(B
+       * partial merge \e$B4X?t$N\e(B ID \e$BHf3SItJ,$r=$@5!%\e(B
+
+1999-08-22  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-nntp.el (elmo-nntp-catchup-msgdb): overview \e$B$,F@$i$l$J$/$F!$\e(B
+       msgdb \e$B$,\e(B (nil nil nil nil) \e$B$H$J$k>l9g$KBP=h!#\e(B
+
+1999-08-20  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-pop3.el: elmo-pop3-list-folder \e$B$r@0M}!#\e(B
+
+1999-08-20  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B?75,JQ?t\e(B wl-score-folder-alist-matchone\e$B!#\e(B
+       * wl-score-folder-alist \e$B$N=q<0$r3HD%$7$?!#\e(B
+
+1999-08-20  Mito <mit@nines.nec.co.jp>
+
+       * wl-score-folder-alist \e$B$N\e(B score file \e$B$r;XDj$9$k=j$K\e(B
+         guess \e$B$H$$$&%7%s%\%k$r;XDj$7$?>l9g$O$=$N%U%)%k%@L>$+$i\e(B score
+         file \e$B$r?dB,$9$k$h$&$K$7$?!#\e(B
+
+1999-08-19  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * (wl-summary-switch-to-clone-buffer): \e$B%3%T!<$9$kJQ?t$K\e(B
+         wl-summary-buffer-temp-mark-list, wl-summary-default-score,
+         wl-summary-important-above, wl-summary-temp-above,
+         wl-summary-mark-below, wl-summary-expunge-below \e$B$rDI2C$7$?!#\e(B
+
+1999-08-18  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$BK:$l5n$i$l$F$$$?\e(B wl-thread-exec \e$B$r<BAu!#\e(B
+         ("KJ.TASAKI" <kj.tasaki@18software.co.jp> \e$B$5$s$N8f;XE&\e(B)
+       * sync-all \e$B$N$H$-$b\e(B temp-mark \e$B$,;D$C$F$$$l$P!"<B9T$9$k$+$I$&$+\e(B
+         \e$B3NG'$9$k$h$&$K$7$?!#\e(B
+         (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$N8f;XE&\e(B)
+       * elmo-vars.el \e$B$N\e(B berkeley-db \e$B$N=$@51L$l!#\e(B
+         (Mikio Nakajima <minakaji@osaka.email.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * timezone-parse-date \e$B$N\e(B y2k \e$BBP:v!#\e(B
+         (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f;XE&\e(B)
+
+1999-08-17  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * wl-fldmgr.el \e$B$N\e(B interactive command \e$B$N\e(B autoload \e$B@_Dj$r@0M}!#\e(B
+
+1999-08-16  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * Scoring \e$B=hM}$r9bB.2=$7$?!#\e(B
+       * wl-summary-sort-by-{from|subject} \e$B$r9bB.2=$7$?!#\e(B
+       * wl-summary-switch-to-clone-buffer \e$B$GJQ?t\e(B wl-current-score-file
+         \e$B$H\e(B wl-score-alist \e$B$b%3%T!<$9$k$h$&$K$7$?!#\e(B
+       * \e$B4X?t\e(B wl-as-mime-charset \e$B$rDI2C$7$?!#\e(B
+       * Use wl-score-mode-mime-charset instead of
+         wl-score-mode-coding-system.
+       * elmo-make-hash \e$B$N%G%U%)%k%H%F!<%V%k%5%$%:$r\e(B 1024 \e$B$H$7$?!#\e(B
+
+1999-08-14  susumu-w@ops.dti.ne.jp
+
+       * wl-thread-jump-to-msg \e$B$,\e(B interactive \e$B$G8F$P$l$k$H%(%i!<$K$J$k\e(B
+         \e$B$N$r=$@5!%\e(B
+       * Summary \e$B$N\e(B "J" \e$B$K\e(B wl-thread-jump-to-msg \e$B$r3d$jEv$F!%\e(B
+       * localdir, localnew, maildir \e$B$K$*$$$F\e(B unplugged \e$B$G$b\e(B
+         plugged \e$B$HF1$8$h$&$K\e(B n,p \e$B$9$k!%\e(B
+       * t d \e$B$G$OJ}8~$r9MN8$7$F$/$l$J$$$N$r=$@5!%\e(B
+       * c-u t d \e$B$G\e(B \e$B$$$C$3A0$N%9%l%C%I$,\e(B D \e$B$5$l$F$7$^$&$N$r=$@5!%\e(B
+       * d \e$B$@$H<!$N%a%C%;!<%8$,I=<($5$l$k$,\e(B, t d \e$B$@$HI=<($5$l$J$$$N$r=$@5!%\e(B
+       * n,p \e$B$K$*$$$F\e(B, D \e$B$,IU$$$?%a%C%;!<%8$rHt$P$9$h$&$K$7$?!%\e(B
+
+1999-08-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * [elmo] UW imapd \e$B$N%j%b!<%H%U%)%k%@$K%"%/%;%9$G$-$J$+$C$?$N$r=$@5!%\e(B
+
+1999-08-04  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-queue-folder \e$B$K3JG<$5$l$?%a%C%;!<%8$NK\J8$,\e(B
+         \e$BI=<($5$l$J$$$N$r=$@5\e(B(\e$B?\:j\e(B \e$B>:\e(B <no_bo@geocities.co.jp> \e$B$5$s$N8f;XE&\e(B)\e$B!%\e(B
+       * 2.1.3 - "Sukiyaki"
+
+1999-08-03  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <okada@opaopa.org>
+
+       * ChangeLog \e$B$+$iM>J,$J\e(B Tab/Space \e$B$r:o=|!#\e(B
+       * wl-vars.el \e$B$N\e(B typo \e$B=$@5!#\e(B
+       * wl-ja.texi: wl-folder-{prefetch|mark-as-read-all}-current-entity
+       \e$B$N@bL@$rDI2C!#\e(B
+
+1999-08-03  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * \e$B%-%e!<$KN/$C$?%a%C%;!<%8$NAw?.;~$K%(%i!<$,H/@8$7$F$b%-%e!<$+$i\e(B
+       \e$B>C$($F$7$^$&$N$r=$@5!#\e(B
+       (Mikio Nakajima <minakaji@osaka.email.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * mmelmo-imap4.el: mime-goto-header-start-point,
+       mime-goto-header-end-point, mime-entity-header-buffer,
+       mime-entity-body-buffer \e$B$r<BAu!#\e(B
+       (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$N8f;XE&\e(B)
+       * smtp.el: \e$B;n$7$K?75,%*%W%7%g%s\e(B smtp-notify-success \e$B$r$D$1$F$_$?!#\e(B
+       * wl-mime.el: pertial \e$B$N%^!<%8$K<:GT$9$k>l9g$,$"$k$N$r=$@5!#\e(B
+       (Shuichi Nishioka <shu@gohome.org> \e$B$5$s$N8f;XE&\e(B)
+       * reedit \e$B;~$K%^%k%A%Q!<%H$N%a%C%;!<%8$r:FJT=8$G$-$J$/$J$C$F$$$?$N\e(B
+       \e$B$r=$@5!#\e(B
+       * \e$B0l;~%^!<%/$N=hM}$r\e(B unwind-protect \e$B$G0O$^$J$$$h$&$K$7!"\e(B
+       \e$B%5%^%jC&=P;~$K0l;~%^!<%/$N=hM}$r\e(B C-g \e$B$GCfCG$G$-$k$h$&$K$7$?!#\e(B
+       (Mito <mit@nines.nec.co.jp> \e$B$5$s!"\e(B
+       Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s\e(B,
+       Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$i$N8f;XE&8f=u8@$K4p$E$/\e(B)
+
+1999-08-02  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * POP3 \e$B$N@\B3$,@Z$l$F$7$^$C$?$H$-$K%*%U%i%$%s$X$N%H%0%k$,\e(B
+       \e$B$G$-$J$$$N$r=$@5!#\e(B
+       * wl-ja.texi \e$B$G\e(B wl-toggle-plugged \e$B$,\e(B wl-draft-toggle-plugged \e$B$K\e(B
+       \e$B$J$C$F$$$?$N$r=$@5!#\e(B
+
+1999-08-01  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * XEmacs \e$B$N\e(B configure \e$B$K\e(B --with-database=berkdb \e$B%*%W%7%g%s$rIU$1\e(B
+       \e$B$F%3%s%Q%$%k$7$F$$$k>l9g!"\e(Belmo-use-database
+       \e$B$r\e(B non-nil \e$B$K%;%C%H$7$F$b\e(B elmo-database.el \e$B$,\e(B load \e$B$5$l$F$J$$$N$r\e(B
+       \e$B=$@5!#\e(B
+
+1999-07-30  Mito <mit@nines.nec.co.jp>
+
+       * Summary \e$B$N\e(B (window-height) \e$B$,>.$5$$;~!"\e(BSPC \e$B$G%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-07-29  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * (localdir, maildir, localnews, archive) ->
+        (localdir, localnews, archive) \e$B$H$$$&%3%T!<$d0\F0$OD>@\\e(B link(copy)
+       \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-pick \e$B$K$*$$$F!$F1$8\e(B Message-ID \e$B$G$"$kJ#?t$N%a%C%;!<\e(B
+         \e$B%8$K%^%C%A$7$F$b\e(B1\e$B$DL\$K$7$+\e(Btemp\e$B%^!<%/$,IU$+$J$$$N$r=$@5$7$?!#\e(B
+       * Followup-To: poster \e$B$KBP1~$7$?!#\e(B
+       * Superseds \e$B%a%C%;!<%8$r:n@.$9$k%3%^%s%I\e(B
+        wl-summary-supersedes-message \e$B$r?75,:n@.$7$?!#\e(B
+       * wl-util.el (wl-string): Use set-text-properties instead of
+         format.
+
+1999-07-28  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * \e$B@h$N\e(B elmo-multiple-field-body \e$B$N=$@5$G<+J,$,=P$7$?%a!<%k$K\e(B
+         reply \e$B$G$-$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+
+1999-07-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * New function: elmo-multiple-field-body and
+         elmo-multiple-fields-body-list. \e$BF1L>$NJ#?t$N%U%#!<%k%I$r<hF@$9\e(B
+         \e$B$k$h$&$K$7$?!#\e(B
+
+1999-07-26  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-localnews-copy-msgs \e$B$,L$Dj5A$K$b4X$o$i$:8F$P$l$k$N$r=$@5!#\e(B
+
+1999-07-24  HAYAKAWA akio <akio-h@po.iijnet.or.jp>
+
+       *  wl-(un)plugged-hook \e$B$rDj5A$9$k$H%(%i!<$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+
+1999-07-23  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <okada@opaopa.org>
+
+       * "W"\e$B$G%I%i%U%H$r:n@.$7$?$H$-$K\e(B wl-mail-setup-hook \e$B$,8F$P$l$J$$\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1999-07-22  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-summary-cancel-message \e$B$r\e(B Sticky Summary \e$B$KBP1~$5$;$?!#\e(B
+
+1999-07-16  Teruki SHIGITANI <shigi@tel.ts.fujitsu.co.jp>
+
+       * sample.dot.wl\e$BFb$K!"Aw?.$7$?%a%C%;!<%8$N$H$-$O:9=P?M$NBe$o$j$K\e(BTo\e$B$d\e(B
+         Newsgroups\e$B$rI=<($9$k5!G=$r<B8=$9$k%3!<%I$G!"\e(BTo \e$B$,\e(B
+         mime-encode\e$B$5$l$?$^$^$K$J$C$F$7$^$&IT6q9g$r=$@5!#\e(B
+
+1999-07-15  Masahiro Murata  <muse@ba2.so-net.ne.jp>
+
+       * Fix: void-function wl-summary-rescore-msgs.
+
+1999-07-15  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * elmo-imap4 \e$B$b\e(B Emacs20 \e$B$N\e(B multibyte \e$B$N@_Dj$,$*$+$7$/$F\e(B
+       \e$BJ8;z2=$1$7$F$$$?$N$r=$@5!#\e(B
+       * 2.1.2 - "Rico Suave"
+
+1999-07-14  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Summary \e$B$G$N\e(B "I" \e$B$b\e(B prefix-arg \e$B$D$-$J$i%A%'%C%/$r%9%-%C%W$9$k\e(B
+       \e$B$h$&$K$7$?!#\e(B
+       * elmo-nntp \e$B$G\e(B Emacs20 \e$B$N\e(B multibyte \e$B$N@_Dj$,$*$+$7$/$F\e(B
+       \e$BJ8;z2=$1$7$F$$$?$N$r=$@5!#\e(B
+       * 'u' \e$B$N%a%C%;!<%8$rFI$^$J$+$C$?$3$H$K$G$-$J$+$C$?$N$r=$@5!#\e(B
+       * XEmacs \e$B$G$$$-$J$j\e(B wl-draft \e$B$r<B9T$9$k$H%(%i!<$,H/@8$r=$@5!#\e(B
+         (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$h$j8f;XE&\e(B)
+       * \e$B0lIt$G\e(B wl-summary-highlight \e$B$,L5;k$5$l$F$$$?$N$r=$@5!#\e(B
+       * \e$B%U%)%k%@$N%0%k!<%W$+$i\e(B "I" \e$B$7$?$H$-$K9g7W$rI=<($9$k$h$&$K$7$?!#\e(B
+       * \e$B%W%j%U%'%C%A$9$k$H%5%^%j$,\e(B modified \e$B$K$J$C$F$7$^$&$N$r=$@5!#\e(B
+       * \e$B%U%)%k%@$+$i\e(B "U" \e$B$N%a%C%;!<%8$r\e(B "I" \e$B$G$-$J$$$N$r=$@5!#\e(B
+         (susumu-w@ops.dti.ne.jp \e$B$5$s$h$j8fJs9p\e(B)
+
+1999-07-14  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-score: (wl-score-simplify-subject)
+       wl-summary-subject-func \e$B$r8F$VBe$o$j$K\e(B
+       wl-score-simplify-fuzzy-regexp \e$B$r;HMQ$9$k$h$&$K$7$?!#\e(B
+       * \e$B%P%C%U%!%-%c%C%7%e5!G=$GF1$8%-%c%C%7%e%P%C%U%!$,J#?t$G$-$k$N$r\e(B
+         \e$B=$@5$7$?!#\e(B
+
+1999-07-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * delete-if -> elmo-delete-if\e$B!#\e(B
+
+1999-07-13  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * 'I' \e$B$G!"%5%$%:$,Bg$-$/$F%W%j%U%'%C%A$r%9%-%C%W$7$F$b\e(B
+         \e$B%W%j%U%'%C%A$7$??t$K4^$^$l$F$7$^$&$N$r=$@5!#\e(B
+         (susumu-w@ops.dti.ne.jp \e$B$5$s$h$j8fJs9p\e(B)
+       * 2.1.1 - "Praying For Time"
+
+1999-07-12  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-draft-insert-signature -> \e$BGQ;_!#\e(B
+       * wl-summary-prefetch-all-new -> \e$B:o=|!#\e(B
+       * C-g \e$B$G%Q%9%o!<%IF~NO$rCfCG$9$k$H\e(B wrong-type-argument databasep nil
+         \e$B$,=P$k$3$H$,$"$k$N$r=$@5\e(B(\e$B$7$?$D$b$j\e(B)\e$B!#\e(B
+         ("MATSUBAYASHI 'Shaolin' Kohji" <shaolin@rins.st.ryukoku.ac.jp>
+          \e$B$5$s$N8fJs9p$K4p$E$/\e(B)
+       * \e$B?75,JQ?t\e(B wl-summary-incorporate-marks\e$B!#\e(B
+        'I' \e$B$G%W%j%U%'%C%A$9$k%^!<%/$r;XDj!#%G%U%)%k%H$O!"\e(B"N" \e$B$H\e(B "U"\e$B!#\e(B
+       * elmo-nntp.el \e$B$H\e(B mmelmo.el \e$B$+$i\e(B (elmo-set-buffer-multibyte nil)
+         \e$B$r:o=|\e(B (Shigeru OKUMURA <sokumura@jaist.ac.jp> \e$B$5$s$N8f=u8@\e(B)\e$B!#\e(B
+       * wl-mule.el \e$B$K\e(B make-face \e$B$,Dj5A$5$l$F$$$J$$$H$-$K%@%_!<4X?t$rDj5A!#\e(B
+         (HAYAKAWA akio <akio-h@po.iijnet.or.jp> \e$B$5$s!"\e(B
+          OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp> \e$B$5$s$N\e(B
+          \e$B8f=u8@$K4p$E$/\e(B)
+       * pop3 \e$B%U%)%k%@$,\e(B unplugged \e$B$G%(%i!<$rH/@8$9$k$N$r=$@5\e(B(\e$B$7$?$D$b$j\e(B)\e$B!#\e(B
+         (HAYAKAWA akio <akio-h@po.iijnet.or.jp> \e$B$5$s$N8f;XE&\e(B)
+
+1999-07-12  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-msgdb-extra-fields \e$B$,\e(B nil \e$B$N$H$-!$\e(Bfetch \e$B$,<:GT$9$k$N$r=$\e(B
+         \e$B@5$7$?!#\e(B
+
+1999-07-11  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * elmo-crosspost-message-alist \e$B$r%U%!%$%k$KJ]B8$9$k$h$&$K$7$?!#\e(B
+       * \e$BJQ?tCM$rJ]B8$9$k:]$O!$$J$k$Y$/\e(B elmo-object-load \e$B$H\e(B
+         elmo-object-save \e$B$r;HMQ$9$k$h$&$KJQ99$7$?!#\e(B
+       * Scoring \e$B5!G=$G\e(B wl-summary-rescan \e$B$d\e(B sync-all \e$B;~$K$O\e(B references
+         \e$B$d\e(B thread \e$B$N%(%s%H%j$r<+F0DI2C$7$J$$$h$&$K$7$?!#\e(B
+       * imap4 \e$B%U%)%k%@$G\e(B extra \e$B%U%#!<%k%I$,<hF@$G$-$k$h$&$K$7$?!#\e(B
+
+1999-07-10  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * localnews \e$B$G$b\e(B 'W' \e$B$G\e(B Newsgrops \e$B$rJd40$7$F%I%i%U%H$r:n@.$G$-$k$h$&\e(B
+         \e$B$K$7$?!#\e(B
+
+1999-07-08  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Nemacs \e$B$G\e(B internal("'mark") \e$B$,FI$a$J$+$C$?$N$r=$@5!#\e(B
+
+1999-07-07  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-summary-mark-below \e$B$N\e(Bcustom\e$B$N%0%k!<%W$r\e(B 'wl-score \e$B$K=$@5!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f;XE&\e(B)
+       * wl-summary-incorporate \e$B$G!"\e(Bwl-summary-prefetch-all-new \e$B$N$+$o$j$K\e(B
+       (wl-summary-prefetch-region (point-min) (point-max))
+       \e$B$r;H$&$h$&$K$7$?!#\e(B
+       (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp> \e$B$5$s$N8f=u8@\e(B)
+       * Summary \e$B$N\e(B C-u . \e$B$,8z$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+       (Hideo Matsumoto <hideo-m@nerv.org> \e$B$5$s$h$j8f;XE&\e(B)
+
+1999-07-06 sen_ml@eccosys.com
+
+       * rfc2368.el - version 0.3
+
+1999-07-06  Hideo Matsumoto <hideo-m@nerv.org>
+
+       * \e$B?75,JQ?t\e(B wl-draft-use-frame\e$B!#\e(B
+       draft\e$B$r3+$/$H$-$K?7$7$$\e(Bframe\e$B$r3+$/!#\e(B
+
+1999-07-06  Masahiro MURATA (\e$BB<EDA442\e(B)  <muse@ba2.so-net.ne.jp>
+
+       * \e$B4X?t\e(B wl-day-number \e$B$N\e(B mapcar \e$B$K$"$k\e(B lambda \e$B$r\e(B quote\e$B!#\e(B
+       * wl-score.el: wl-summary-{increase|lower}-score \e$B$G\e(B Subject \e$B$N%^%C\e(B
+         \e$B%AJ8;zNs$r4JN,2=$9$k$h$&$K$7$?!#\e(B
+         wl-current-score-file \e$B$H\e(B wl-score-alist \e$B$r\e(B buffer-local \e$B$K$7$?!#\e(B
+       * wl-summary.el: wl-summary-scored \e$B$r\e(B nil \e$B$K$9$k0LCV$rJQ99$7$?!#\e(B
+       * Rename:
+         wl-score-simplify-subject-fuzzy-regexp ->
+         wl-score-simplify-fuzzy-regexp
+         wl-score-simplify-buffer-fuzzy-step -> elmo-buffer-replace.
+       * wl-ja.texi: \e$B%9%3%"5!G=$NJQ99!#\e(B
+       * wl-draft.el: autoload \e$B@_Dj$NDI2C!#\e(B
+       * sample.dot.wl: wl-summary-next-no-unread\e$B$N:o=|!#\e(Bscore\e$B5!G=$N@_\e(B
+         \e$BDjDI2C!#\e(B
+
+1999-07-06  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * Summary \e$B$N\e(B C-u . \e$B$,8z$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+         (Hideo Matsumoto <hideo-m@nerv.org> \e$B$5$s$h$j8f;XE&\e(B)
+       * Nemacs \e$B$G$O\e(B wl-summary-{print|remove}-destination \e$B$r\e(B
+       \e$B%@%_!<4X?t$K$9$k!#\e(B
+       * Nemacs \e$BMQ$K\e(B rassoc \e$B$rDj5A!#\e(B
+       * Nemacs \e$B$N\e(B Folder \e$B%b!<%I$G\e(B 'm' \e$B$r2!$9$H%(%i!<$K$J$k$N$r=$@5!#\e(B
+       * Nemacs \e$B$G$O\e(B wl-use-scoring \e$B$N\e(B default \e$B$r\e(B nil \e$B$K$7$?!#\e(B
+       * \e$B?75,4X?t\e(B elmo-delete-if\e$B!#\e(Breplacement of delete-if\e$B!#\e(B
+       * Nemacs \e$B$G%P%$%H%3%s%Q%$%k$9$k$H$J$<$+\e(B (defvar nil nil) \e$B$N%(%i!<\e(B
+         \e$B$,=P$k$N$r=$@5!#\e(B
+         (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$h$j8f;XE&\e(B)
+       * 2.1.0 - "Ordinary World"
+
+1999-07-05  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * partial \e$B$r%^!<%8$G$-$J$+$C$?$N$r=$@5!#\e(B
+         (Taiji.Can@atesoft.advantest.co.jp \e$B$5$s$h$j8f;XE&\e(B)
+       * wl-summary-rescore \e$B$b\e(B wl-summary-rescore-partial-threshold \e$B$K=>$&\e(B
+         \e$B$h$&$K$7$F$_$?!#\e(B
+       * wl-summary-score-update-all-lines \e$B$N=hM}Cf%a%C%;!<%8$r=P$9$h$&$K\e(B
+         \e$B$7$?!#\e(B
+
+1999-07-04  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-score.el: date, extra, followup, thread \e$B%-!<$rDI2C$7$?!#\e(B
+       * `wl-score-default-file-name' \e$B$G;XDj$5$l$?%9%3%"%U%!%$%k$rI,$:FI$_\e(B
+       \e$B9~$`$h$&$K$7$?!#\e(B
+       * \e$B%5%^%j%P%C%U%!!$$*$h$S%9%3%"JT=8%P%C%U%!$G%9%3%"%U%!%$%k$r:n@.$9$k\e(B
+       \e$B5!G=$rDI2C$7$?!#\e(B
+       * wl-vars.el: defcustom \e$B$r@0M}$7$?!#\e(B
+       * wl-highlight.el: defface \e$B$K%0%k!<%W$rDI2C$7$?!#\e(B
+
+1999-07-01  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * \e$B?75,\e(B sync \e$B%l%s%8\e(B rescan-noscore\e$B!#%9%3%"$rH?1G$;$:I=<($7$J$*$9!#\e(B
+       * rescan/sync-all \e$B$G$O4{FI%a%C%;!<%8$G$b\e(B score \e$B$rH?1G$9$k$h$&$K$7$?!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-rescore-partial-threshold\e$B!#\e(Brescan, sync-all \e$B$G\e(B
+         \e$B%9%3%"IU$1$9$k%a%C%;!<%8?t$N>e8B$r;XDj!#\e(B
+       * wl-edit-again-func->wl-edit-decode-message-func
+       (tomo@etl.go.jp (\e$B<i2,\e(B \e$BCNI'\e(B / MORIOKA Tomohiko) \e$B$5$s$N8f=u8@\e(B)
+       * elmo-util.el \e$B$+$iF|K\8l%3%a%s%H$r>C$9!#\e(B
+       * wl-refile-alist-setup \e$B$N<BAu$rJQ99!#\e(B
+
+1999-06-29  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-refile-(msgid-)learn \e$B$d\e(B, wl-refile-guess-* \e$B$NCf$G\e(B,
+         \e$BKh2s\e(B wl-refile-(msgid-)alist \e$B$,\e(B load \e$B$5$l$F$k$+$I$&$+D4$Y$k$N$O\e(B
+         \e$BL5BL$J$N$G5/F0;~$KI,$:\e(B load \e$B$9$k$h$&$K$7$?!#\e(B
+       * wl-refile-(msgid-)learn \e$B$,0lEY8F$P$l$kKh$K\e(B wl-refile-alist-save
+         \e$B$9$k$N$O\e(B, \e$BL5BL$J$N$G\e(B WL \e$B=*N;;~$K0l2s$@$1\e(B save \e$B$9$k$h$&$K\e(B
+         \e$B$7$?!#\e(B
+       * wl-refile-(msgid-)learn \e$B$NJV$jCM$rJQ99!#\e(B
+
+1999-06-29  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * cl \e$B$N\e(B require \e$B$r\e(B eval-when-compile \e$B$G3g$j!"=gHV$rJQ$($k!#\e(B
+
+1999-06-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * unread \e$B$,\e(B 0 \e$B$N;~\e(B [Space] \e$B$G%5%^%j$+$iH4$1$i$l$J$+$C$?$N$r=$@5!#\e(B
+       * cl.el \e$B$N\e(B member () \e$B$,\e(B poe-18.el \e$B$N\e(B member () \e$B$r>e=q$-$7$F$7$^$&\e(B
+         \e$B$N$r=$@5!#\e(B
+
+1999-06-29  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * AIR MAIL(AIRCimapd release 2.00) \e$B$KBP1~!#\e(B
+       (Sasaki Toshiya <toshi@unicorn.tohoku.nttcom.co.jp> \e$B$5$s$N8fJs9p\e(B
+        \e$B$K4p$E$/\e(B)
+
+1999-06-29  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * wl-score \e$B$G$N\e(B expunge \e$B$r!VFI$s$@$3$H$K$7$F!"\e(B
+         \e$B%5%^%j%P%C%U%!$+$i>C$9$@$1!W$H$7$?!#\e(B
+       * update \e$B;~$K\e(B expunge \e$B$7$?$3$H$rJs9p!#\e(B
+
+1999-06-28  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * elmo-pop3.el \e$B$G\e(B md5-encode \e$B$r;H$o$J$$$h$&$K$7$?!#\e(B
+
+1999-06-28  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * MK-MK:
+       (mapcar (lambda ..)) \e$B$,\e(B v18 \e$B$G$OF0$+$J$$$N$G\e(B quote \e$B$9$k!#\e(B
+       Nemacs \e$B$G$b\e(B wl-mule.elc \e$B$,%$%s%9%H!<%k$5$l$k$3$H$K$J$C$F$?$N$r\e(B
+       \e$B=$@5!#\e(B
+       defgroup(), defcustom() \e$BLdBj2sHr%3!<%I$rI|3h!#\e(B
+       * wl-summary.el, wl-demo.el:
+       float \e$B$,;H$($J$$0lIt$N\e(B Emacsen \e$B$G$N%(%i!<2sHr!#\e(B
+       * wl-nemacs.el:
+       completing-read() \e$B$O0z?t$r8^$D$^$G$7$+<uIU$1$J$$$N$G4X?t$rCV49\e(B
+       \e$B!J6K0-!K!#\e(B
+       read-char-exclusive() \e$B$,B8:_$7$J$$>l9g$K%(%i!<$K$J$i$J$$$h$&$K\e(B
+       \e$B$9$k!#\e(B
+
+1999-06-28  Masahiro MURATA (\e$BB<EDA442\e(B)  <muse@ba2.so-net.ne.jp>
+
+       * default-case-fold-search \e$B$,\e(B nil \e$B$N$H$-!$\e(Bwl-summary-pick \e$B$,@5>o\e(B
+         \e$B$KF0:n$7$J$$$N$r=$@5$7$?!#\e(B
+       * important \e$B%^!<%/$,\e(B2\e$B$D0J>e$"$k$H!$\e(Bwl-auto-select-next \e$B$,\e(Bnon-nil
+         \e$B$N$H$-$K<!$NL$FI%U%)%k%@$K0\$i$J$$$N$r=$@5$7$?!#\e(B
+
+1999-06-28  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * \e$B4X?t\e(B wl-summary-delete-all-delete-marks () \e$BDI2C!#\e(B
+       * (wl-summary-cleanup-temp-marks) \e$B$,$J$<$+#22s8F$P$l$F$$$?$N$r=$@5!#\e(B
+       (\e$B:72eED$5$s\e(B <sagata@nttvdt.hil.ntt.co.jp> \e$B$N8f;XE&\e(B)
+
+1999-06-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * folder \e$B%b!<%I$G\e(B wl-summary-goto-folder-subr \e$B$r0l;~E*$K%5%^%j$K0\\e(B
+         \e$BF0$7$?;~$O!$\e(BScoring \e$B$5$l$J$$$h$&$K$7$?!#\e(B
+       * wl-summary-next-no-unread \e$B$r:o=|$7!$\e(Bwl-auto-select-next \e$B$@$1$G@)\e(B
+         \e$B8f$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-move-order \e$B$N%G%U%)%k%HCM$r\e(B 'new \e$B$+$i\e(B 'unread \e$B$KJQ99\e(B
+         \e$B$7$?!#\e(B
+
+1999-06-27  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * Nemacs \e$B$G\e(B  (wrong-type-argument listp 1) \e$B$,H/@8$9$k$N$r=$@5!#\e(B
+       * Nemacs \e$B$,\e(B timer \e$B$,$J$/$F%(%i!<$K$J$k$N$r\e(B condition-case \e$B$G2sHr!#\e(B
+
+1999-06-27  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%9%3%"%U%!%$%k$r\e(B ctext (*ctext) \e$B$GFI$_=q$-$9$k$h$&$K$7$?!#\e(B
+
+1999-06-26  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * mailto: \e$B$HF1MM\e(B nntp: news: \e$B$KBP1~$5$;$k4X?t!%\e(B
+         (-> wl-utils.el \e$B$KDI2C!#\e(B)
+
+1999-06-25  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-score.el: coding-system \e$B$,%P%0$C$F$$$?$N$r=$@5!#\e(B
+
+1999-06-25  Masahiro MURATA <muse@ba2.so-net.ne.jp>
+
+       * wl-score.el: \e$B?75,%U%!%$%k!#\e(BScore \e$B5!G=$rDI2C$7$?!#\e(B
+       * wl-summary.el: (wl-summary-sync-update3)
+        wl-folder-set-folder-updated \e$B$N%?%$%_%s%0$rJQ99$7$?!#\e(B
+       * (wl-summary-update-crosspost) \e$B%9%l%C%I$r%*!<%W%s$;$:$K4{FI%^!<\e(B
+        \e$B%/$rIU$1$k$h$&$KJQ99$7$?!#\e(B
+       * wl-util.el: New function `wl-delete-alist'.
+        New macro `wl-as-coding-system'. Add emulate function `pp'.
+
+1999-06-24  pf21 GOTO_Toshiya <pf21@pure.cpdc.canon.co.jp>
+
+       * [wl-ja.texi] wl-thread-open-reading-thread \e$B$N@bL@DI2C!#\e(B
+
+1999-06-24  Kenichi OKADA <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * elmo-cache-expire \e$B$,%(%i!<$rH/@8$9$k$N$r=$@5!#\e(B
+
+1999-06-24  sen_ml@eccosys.com
+
+       * utils/rfc2368.el \e$B$N%P%0=$@5!#\e(B
+
+1999-06-24  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 2.0.1 - "Now And Forever"
+       * body \e$B$K\e(B --text follows this line-- \e$B$,$"$k$H$=$N9T0JA0$,$J$/$J$k\e(B
+         \e$B$N$r=$@5\e(B(\e$BIT40A4\e(B)\e$B!#\e(B
+         (\e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp> \e$B$5$s\e(B
+          \e$B$N8f;XE&\e(B)
+
+1999-06-24  MAKINO Takashi <makino@cyber.office.ne.jp>
+
+       * \e$B?75,4X?t\e(B wl-refile-guess-by-msgid\e$B!#\e(B
+
+1999-06-23  Akihiro Motoki <mokkun@iname.com>
+
+       * wl \e$B$r5/F0$7$F$$$J$$>uBV\e(B \e$B$+$D\e(B (setq wl-stay-folder-window t)\e$B$N>l9g!"\e(B
+         wl-draft \e$B$r9T$&$H!"\e(Bwl-draft-send-and-exit \e$B$b\e(B wl-draft-kill \e$B$b\e(B
+         \e$B<:GT$9$k$N$r=$@5!#\e(B
+
+1999-06-23  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * wl-ja.texi: wl-template-alist \e$B$N@bL@\e(B: file -> body-file
+
+1999-06-23  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * Draft \e$B$G\e(B prefix \e$B$D$-$G\e(B C-c C-y \e$B$9$k$H%+%C%H%P%C%U%!$+$i\e(B
+         \e$B0zMQ$9$k$h$&$K$7$F$_$?!#\e(B
+       * elmo-imap4-int-string-to-list -> \e$BGQ;_!#\e(B
+         (Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>\e$B$5$s$N8f=u8@\e(B)
+       * \e$B:G6a$h$/4V0c$($k$N$G\e(B Summary \e$B$N\e(B 'e' \e$B$r\e(B wl-summary-save \e$B$K\e(B
+         \e$B3d$jEv$F$?!#\e(B
+       * wl-set-string-width \e$B$+$iITMW$H;W$o$l$k\e(B let \e$B$r<h$C$?!#\e(B
+       * Unplugged\e$B>uBV$@$H!$\e(BMH\e$B%U%)%k%@4V$G$N\e(Brefile\e$B$G!$\e(Belmo-copy-msgs \e$B$N$"$H$K\e(B
+         elmo-append-msg \e$B$b8F$P$l$k$N$r=$@5!#\e(B
+         (Koji IIDA / \e$BHSED\e(B \e$B9@Fs\e(B <kiida@nttx.co.jp> \e$B$5$s$h$j8f;XE&\e(B)
+
+1999-06-22  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * mule/emacs \e$B$G\e(B wl-draft-prepared-config-exec \e$B$,\e(B
+         C-c C-d \e$B$H\e(B C-c C-e \e$B$NN>J}$K3d$j$"$F$i$l$F$$$?$N$r=$@5!#\e(B
+       * wl-completion-buf-name \e$B$NCM$r\e(B
+         emacs \e$BI8=`$NJd40MQ%P%C%U%!\e(B *Completions* \e$B$K9g$o$;$?!#\e(B
+       * wl-message-buffer-created-hook \e$B$r@_Dj$7$F$bE,@Z$K\e(B hook \e$B$,\e(B
+         \e$B8F$P$l$F$$$J$$$N$r=$@5!#\e(B
+         (Akihiro Motoki <mokkun@iname.com> \e$B$5$s$h$j8f;XE&\e(B)
+
+1999-06-22  Masahiro MURATA (\e$BB<EDA442\e(B)  <muse@ba2.so-net.ne.jp>
+
+       * elmo-nntp.el: XOVER \e$B$G$N\e(B size \e$B$N<hF@$,8m$C$F$$$?$N$r=$@5$7$?!#\e(B
+       (elmo-nntp-string-to-vector): Renamed from
+       `elmo-nntp-string-to-list'.
+       * elmo-localdir.el: \e$B%U%!%$%k%5%$%:$r\e(B file-attributes \e$B$G<hF@$9$k$h\e(B
+       \e$B$&$K$7$?!#\e(B
+
+1999-06-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * elmo-pop3 \e$B$N\e(B max-of-folder \e$B$r8zN(2=!#\e(B
+
+1999-06-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * .wl \e$B$N\e(B syntax \e$BEy$N%(%i!<$r$A$c$s$HEG$+$;$k!J%f!<%6$KCN$i$;$k!K\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * \e$B$*$^$1!#\e(B
+
+1999-06-19  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * (featurep 'tinycustom) \e$B$J$i\e(B defface \e$B$NDj5A$rL5;k$9$k!#\e(B
+
+1999-06-18  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * nntp \e$B$NJ8;z2=$1$,$^$@D>$C$F$$$J$+$C$?$N$r=$@5!#\e(B
+
+1999-06-18  Masahiro MURATA (\e$BB<EDA442\e(B)  <muse@ba2.so-net.ne.jp>
+
+       * @ \e$B$G@5$7$/%"%I%l%9$r\e(B expand \e$B$9$k$h$&$K$7$?!#\e(B
+
+1999-06-16  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B wl-use-dnd\e$B!#%I%i%C%0%"%s%I%I%m%C%W5!G=$r$D$+$&$+$I$&$+!#\e(B
+
+1999-06-16  Masahiro MURATA (\e$BB<EDA442\e(B)  <muse@ba2.so-net.ne.jp>
+
+       * [elmo-nntp] elmo-list-folder \e$B$G\e(B "LISTGROUP" \e$B%3%^%s%I$r;H$&$h$&\e(B
+         \e$B$K$7$?!#\e(B
+       * [elmo-nntp] xover \e$B$N;HMQ2DH]$r%5!<%P$4$H$KJ];}$9$k$h$&$K$7$?!#\e(B
+
+1999-06-16  Shigeru OKUMURA <sokumura@jaist.ac.jp>
+
+       * Content-Type\e$B$,\e(Bsjis\e$B$d\e(Beuc\e$B$@$H\e(B mail\e$B$d\e(Bnews\e$B$,2=$1$F$7$^$&$N$r=$@5!#\e(B
+
+1999-06-16  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * [elmo-imap4] cram-md5 \e$BBP1~!#\e(B
+
+1999-06-15  Yuuichi Teranishi <teranisi@gohome.org>
+
+       * tm \e$B$G\e(B error: Split sender is not specified for `wl-draft-mode'.
+         \e$B$H=P$k$N$r=$@5!#\e(B
+       (Toshihiko Kodama <kodama@ayame.mfd.cs.fujitsu.co.jp> \e$B$5$s$N8f;XE&\e(B)
+
+1999-06-14  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * `wl-draft-enable-queuing' \e$B$N@bL@$,%@%V$C$F$$$?$N$r=$@5!#\e(B
+       (Toshihiko Kodama (\e$B>.6L\e(B \e$BMxI'\e(B) <kodama@ayame.mfd.cs.fujitsu.co.jp>
+       \e$B$5$s$h$j8f=u8@\e(B)
+
+1999-06-14  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * wl-detect-info-directory() \e$B$r$A$g$C$H8-$/$7$F$_$?!#\e(B
+
+1999-06-13  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B%P%C%U%!%-%c%C%7%e!#\e(B
+          \e$B?75,JQ?t\e(B elmo-use-buffer-cache \e$B$,\e(B non-nil \e$B$J$i%-%c%C%7%e!#\e(B
+         \e$B%G%U%)%k%H$O\e(B t\e$B!#\e(B
+        \e$B0lC6FI$s$@%a%C%;!<%8$r%P%C%U%!$K;D$7$F$*$/5!G=!#\e(B
+       * \e$B%a%C%;!<%8$N@hFI$_\e(B(cache-prefetch)\e$B!#\e(B
+         \e$B%a%C%;!<%8$rFI$s$G$$$k4V$K<!$N\e(B(\e$BL$FI\e(B)\e$B%a%C%;!<%8$r@hFI$_$7$F\e(B
+         \e$B%P%C%U%!%-%c%C%7%e$K$?$a$F$*$/!#\e(B
+         \e$B?75,JQ?t\e(B wl-cache-prefetch-folder-type-list \e$B$K$"$k%U%)%k%@$r\e(B
+         \e$B%-%c%C%7%e$9$k!#%G%U%)%k%H$O\e(B '(nntp imap4)\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B elmo-buffer-cache-size\e$B!#%G%U%)%k%H$O\e(B 10\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-cache-prefetch-folder-list\e$B!#%G%U%)%k%H$O\e(B nil\e$B!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-no-mime-folder-list\e$B!#%G%U%)%k%H$O\e(B
+         '("^\\+draft$")\e$B!#\e(Bmime\e$B2r@O$;$:$KI=<($9$k%U%)%k%@$N@_Dj!#\e(B
+
+1999-06-13  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * WL-MK:
+         info \e$B@8@.;~$N\e(B codesys \e$B$N7hDj$O\e(B wl-vars.el \e$B$rMxMQ$9$k!#\e(B
+         info \e$B$NJ,3d%*%W%7%g%s$rGQ;_!#\e(B
+         info \e$B$N%$%s%9%H!<%k;~$K$OJ#<L$G$O$J$/0\F0$9$k!#\e(B
+
+1999-06-13 Sen Nagata <sen@eccosys.com>
+
+       * \e$B?75,%U%!%$%k\e(B utils/wl-use-agent.el, utils/rfc2368.el
+
+1999-06-11  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * mmelmo-imap4-get-mime-entity\e$B$NCf$N\e(B
+         elmo-imap4-get-connection\e$B$N0z?t$,>/$J$+$C$?$N$r=$@5!#\e(B
+         (\e$B2,ED7r0l$5$s\e(B<kokada@tamaru.kuee.kyoto-u.ac.jp>\e$B$N8f=u8@\e(B)
+       * 2.0.0 - "Mmmbop"
+       * wl-summary-partial-highlight-above-lines \e$B$,\e(B nil \e$B$J$i\e(B
+         Summary \e$B3+;O;~$N%+!<%=%k$N0LCV$K4X78$J$/:G8e$+$i\e(B
+         wl-summary-highlight-partial-threshold \e$B9T$@$1%O%$%i%$%H$9$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+       * Sen Nagata <sen@eccosys.com> \e$B$5$s:n$N\e(B util/wl-user-agent.el \e$B$r\e(B
+         \e$B:G?7HG$K99?7!#\e(B
+         (\e$B1|@>$5$s\e(B <fuji0924@mbox.kyoto-inet.or.jp> \e$B$h$j8f;XE&\e(B)
+
+1999-06-10  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * IAMP4\e$B$H\e(BNNTP\e$B$N%"%/%;%9%0%k!<%W$G!$%]!<%HHV9f$,\e(B
+         \e$B%G%U%)%k%H$H0c$&$H%(%i!<$,=P$k$N$r=$@5!#\e(B
+
+1999-06-10  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B%U%!%$%kL>JQ99\e(B
+         ChangeLog.en -> ChangeLog
+         ChangeLog -> ChangeLog.ja
+       * [wl-ja.texi] wl-plugged \e$B$N@bL@$rDI2C!#\e(B
+         (\e$BCSED$5$s\e(B <daisuke@cc.kyushu-u.ac.jp> \e$B$h$j8f=u8@\e(B)
+
+1999-06-09  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * \e$B?75,JQ?t\e(B elmo-default-pop3-ssl elmo-default-nntp-ssl
+         elmo-default-imap4-ssl\e$B!#\e(Bnon-nil \e$B$J$i\e(B "!" \e$B$rIU$1$J$/$F$b\e(B SSL \e$B$r;H$&!#\e(B
+       * \e$BL>A0JQ99\e(B
+         elmo-nntp-port -> elmo-default-nntp-port
+         elmo-imap4-port -> elmo-default-imap4-port\e$B!#\e(B
+         (\e$B2,ED$5$s\e(B <kokada@vlsi.kuee.kyoto-u.ac.jp> \e$B$N8f=u8@\e(B)
+       * [elmo] imap4, nntp, pop3 \e$B$G%U%)%k%@L>$N:G8e$K\e(B "!" \e$B$,$D$$$?$i\e(B SSL \e$B$r\e(B
+         \e$B;H$&$h$&$K$7$?!#\e(B
+       * [elmo] imap4, nntp, pop3 \e$B$G%]!<%H$r;XDj$7$F$J$$%5!<%P$H$N%;%C%7%g%s$H\e(B
+         \e$B%]!<%H$r;XDj$7$?F1$8%5!<%P$H$N%;%C%7%g%s$G%3%M%/%7%g%s$,\e(B
+         \e$B$+$A$"$o$J$$$h$&$K$7$?!#\e(B
+
+1999-06-09  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * POP \e$B$G$bJQ?t\e(B elmo-default-pop3-server \e$B$r?7@_!"\e(B"&USER" \e$B$@$1$G\e(B
+         \e$B$b%"%/%;%9$G$-$k$h$&$K$7$?!#\e(B
+       * mmelmo-imap4.el \e$B$K%]!<%HHV9f;XDj$N=$@5!#\e(B
+       * [wl-ja.texi] \e$B=$@5!#\e(B
+
+1999-06-08  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * IMAP4 \e$B%U%)%k%@$G\e(B port \e$BHV9f$r;XDj$G$-$k$h$&$K$7$?!#\e(B
+
+1999-06-07  Akihiro Motoki <motoki@ptl.abk.nec.co.jp>
+
+       * \e$B%a!<%k$N=g=x$,\e(B \e$B:o=|A0$N%U%)%k%@$H\e(B trash\e$B%U%)%k%@$G5U$K$J$C$F$7$^$&\e(B
+         \e$B$N$r=$@5!#\e(B
+       * wl-summary-pick \e$B$G\e(B field-name \e$B$H$7$F\e(B elmo-msgdb-extra-fields \e$B$r;XDj\e(B
+         \e$B$G$-$k$h$&$K$7$?!#\e(B
+
+1999-06-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-summary-jump-to-parent-message() \e$B$O!"%9%l%C%I$HF1MM\e(B
+         In-Reply-To \e$B$rM%@h$9$k!#\e(B
+         (\e$B:72eED$5$s\e(B <sagata@nttvdt.hil.ntt.co.jp> \e$B$N8f;XE&\e(B)
+       * From \e$B$,\e(B wl-from \e$B$K%^%C%A$9$k%a%C%;!<%8$KJV;v$r=q$/$H$-$O!"\e(B
+         To, Cc, Newsgroups \e$B$rJ]B8$9$k!#\e(B
+         (\e$BDEM8$5$s\e(B <tsumura@kuis.kyoto-u.ac.jp> \e$B$N8f=u8@\e(B)
+
+1999-06-06  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * sticky\e$B%5%^%j$KBP$7$F!$\e(Bwl-folder-mark-as-read-all-entity,
+         wl-folder-sync-entity, wl-folder-prefetch-entity \e$B$r<B9T$9$k$H!$\e(B
+         \e$BL$FI%a%C%;!<%8$J$I$K\e(B highlight \e$B$,$D$+$J$$$N$r=$@5$7$?!#\e(B
+
+1999-06-05  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * wl-folder-no-auto-check-folder-p \e$B$G\e(B wl-auto-check-folder-list \e$B$r\e(B
+         \e$BM%@h$5$;$k$h$&$K$7$?!#\e(B
+       * wl-summary-switch-to-clone-buffer \e$B$G\e(B
+         wl-summary-buffer-new-count \e$B$H\e(B wl-summary-buffer-unread-count \e$B$,\e(B
+         \e$B%3%T!<$5$l$J$$$N$r=$@5$7$?!#\e(B
+       * wl-folder-empty-trash \e$B$G%5%^%j%P%C%U%!$,I=<($5$l$J$$$N$r=$@5$7$?!#\e(B
+       * bbdb2 \e$B$G\e(B bbdb-wl.el \e$B$r%3%s%Q%$%k$9$k;~$N\e(Bwarning\e$B$r$J$/$7$?!#\e(B
+       * interactive \e$B$r\e(B nil \e$B$K$7$F\e(B wl-summary-goto-folder-subr \e$B$7$?:]!$\e(B
+         recenter \e$B$G%(%i!<$,=P$k$3$H$,$"$k$N$r=$@5$7$?!#\e(B
+       * bbdb2 \e$B$G\e(B bbdb-wl.el \e$B$r%3%s%Q%$%k$9$k;~$N\e(Bwarning\e$B$r$J$/$7$?!#\e(B
+       * wl-folder-suspend-hook \e$B$rDI2C$7$?!#\e(B
+
+1999-06-06  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * "V" \e$B$G2>A[%U%)%k%@$r:n@.$9$k$H%5%^%j$,I=<($5$l$:!"\e(Bsync update
+         \e$B$7$J$1$l$P$J$i$J$$!#$^$?!"99$K\e(B "V" \e$B$7$F$+$i\e(B "C-u V" \e$B$G85$N2>A[\e(B
+         \e$B%U%)%k%@$KLa$k$H:F$S%5%^%j$,I=<($5$l$J$/$J$C$F$7$^$&!#\e(B
+
+1999-06-04  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * font-lock \e$B$K$h$kJ@32$rHr$1$k$?$a!"\e(Bwl-draft-reedit() \e$B$G$b\e(B
+         change-major-mode-hook \e$B$r\e(B nil \e$B$KB+G{$9$k!#\e(B
+       * wl-message-refer-article-or-url() \e$B$r<B9T$7$?:]!"%5%^%j$N%+!<\e(B
+         \e$B%=%k$,Ev3:%a%C%;!<%8$K0\F0$7$J$$%P%0$r=$@5!#\e(B
+
+1999-06-03  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * sticky \e$B%5%^%j$+$i0\F0$9$k:]!$\e(Btemp-mark \e$B$,$D$$$F$$$k$H$=$N\e(B
+         \e$B%^!<%/$O>C$($F$b\e(B highlight \e$B$,;D$C$?$^$^$K$J$k$N$r=$@5$7$?!#\e(B
+       * wl-summary-buffer-copy-list \e$B$,\e(B buffer-local-variables \e$B$K$J$C$F\e(B
+         \e$B$$$J$+$C$?$N$r=$@5$7$?!#\e(B
+       * \e$B%5%^%j$N0\F0;~$K\e(B interactive \e$B$G$J$$>l9g$O\e(B switch-to-buffer \e$B$G\e(B
+         \e$B$O$J$/!$\e(Bset-buffer \e$B$9$k$h$&$K$7$?!#\e(B
+
+1999-06-03  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       *  \e$B4X?t\e(B elmo-imap4-identical-name-space-p \e$B$r<BAu$9$k$N$rK:$l$F$$$?!#\e(B
+          (\e$B?9;3$5$s\e(B <taka@airlab.cs.ritsumei.ac.jp> \e$B$N8f;XE&\e(B)
+       * [mmelmo.el, mmelmo-imap4.el] FLIM 1.13 API \e$B$KBP1~!#\e(B
+
+1999-06-03  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * sticky summary\e$B$r;H$&$H!"\e(Bdraft\e$B=*N;8e!"JL$N\e(Bsummary\e$B$KLa$k;v$,$"$k!#\e(B
+       * menu \e$B$K\e(B mR \e$B$H\e(B mf\e$B$,Fs$D$E$D$"$C$?$N$r=$@5!#\e(B
+       * wl-summary-jump-to-current-message \e$B$,$A$g$C$HJQ$@$C$?$N$r=$@5!#\e(B
+
+1999-06-02  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * XEmacs package \e$B$G$b\e(B BBDB \e$B$,B8:_$9$l$P\e(B utils/bbdb-wl.el \e$B$b\e(B
+         bytecomp/install \e$B$9$k!#\e(B
+       * \e$B?75,JQ?t\e(B wl-summary-keep-cursor-command\e$B!#\e(B
+         \e$B%3%^%s%I$4$H$K%+!<%=%k0LCV$r$=$N$^$^$K$9$k$+$I$&$+$r@_Dj$G$-$k\e(B
+         \e$B$h$&$K$7$?!#\e(B
+
+1999-06-02  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * BBDB \e$B$,B8:_$9$l$P\e(B utils/bbdb-wl.el \e$B$b\e(B bytecomp/install \e$B$9$k!#\e(B
+
+1999-06-02  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * elmo-pop3\e$B$N%P%$%H%3%s%Q%$%k;~$N%r!<%K%s%0$r$H$k!#\e(B
+       * [WL-MK] \e$B0lEY!$\e(Bmake\e$B$7$F\e(Belc\e$B$r:n$C$?8e$K!$\e(Belmo-*.el\e$B$rJQ99$7$F!$\e(B
+         \e$B$b$&0lEY\e(Bmake\e$B$9$k$H!$%(%i!<$K$J$k$N$r=$@5!#\e(B
+
+1999-06-02  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * sticky \e$B%5%^%j$G$N\e(B update \e$B;~$K!$?75,%a%C%;!<%8$,\e(B highlight \e$B$5$l$J$/\e(B
+         \e$B$J$C$?$N$r=$@5$7$?!#\e(B
+
+1999-06-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.1 \e$B$+$iJ,4t!#\e(B
+
+1999-06-01  Masahiro MURATA (\e$BB<EDA442\e(B) <muse@ba2.so-net.ne.jp>
+
+       * \e$B0\F0@h$N%P%C%U%!$,4{$KB8:_$7$F$$$?>l9g$NF0:n$rJQ99$7!"\e(B
+         'g' \e$B$G8F$P$l$?>l9g$O\e(B update \e$B$;$:$K%+!<%=%k0LCV$rJ];}$9$k$h$&$K$7$?!#\e(B
+       * 'g' \e$B$G0\F0$9$k:]!$\e(Bwl-ask-range(\e$B?75,JQ?t\e(B) \e$B$,\e(B nil \e$B$J$i!$\e(B
+         wl-folder-sync-range-alist \e$B$NCM$r;HMQ$9$k$h$&$K$7$?!#\e(B
+       * wl-summary-read-folder \e$B$GF~NO$7$?%U%)%k%@L>$N$_$NMzNr$r\e(B
+         wl-read-folder-hist \e$B$K5-O?$9$k$h$&$K$7$?!#\e(B
+       * \e$B8r8_$K%5%^%j$r@Z$jBX$($k?75,%3%^%s%I!"\e(B
+         wl-summary-goto-last-visited-folder\e$B!#\e(B(\e$B%-!<%P%$%s%I$K$OL$3d$jEv$F\e(B)
+
+1999-06-01  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * 1.0.1 - "The Look"
+       * wl-ja.info \e$B$r%Q%C%1!<%8$+$i:o=|!#\e(B
+
+1999-06-01  Sen Nagata <sen@eccosys.com>
+
+       * compose-mail \e$B$N%$%s%?!<%U%'!<%9$r%5%]!<%H!#\e(B
+         (\e$B?75,%U%!%$%k\e(B wl-user-agent.el \e$B$rDI2C\e(B)
+
+1999-05-31  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * wl-stay-folder-window \e$B$,\e(B non-nil \e$B$N$H$-!"\e(Bfull window \e$B$G\e(B
+         draft \e$B$r:n@.$7$?8e!"\e(B C-cC-k \e$B$d\e(B C-cC-c \e$B$G!"\e(Bdraft \e$B$r=*N;$7$F\e(B
+         summary mode \e$B$KLa$C$?;~$K!"\e(Bfolder window \e$B$,>C$($F$7$^$o$J$$\e(B
+         \e$B$h$&$K$7$?!#\e(B
+
+1999-05-31  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * folder \e$B%b!<%I$J$I$+$i%U%)%k%@0\F0$9$k$H$-!"\e(B
+         wl-folder-sync-range-alist \e$B$NCM$rH?1G$9$k$h$&$K$7$?!#\e(B
+         (\e$B?@V:$5$s\e(B <mag00573@nifty.ne.jp> \e$B$N8f=u8@\e(B)
+       * wl-draft-reply-buffer-style \e$B$,\e(B 'full \e$B$N$H$-!"\e(Bmulti-reply/forward
+         \e$B$,%(%i!<$K$J$k$N$r=$@5!#\e(B
+         (\e$B:72eED$5$s\e(B <sagata@nttvdt.hil.ntt.co.jp> \e$B$N8f;XE&\e(B)
+       * sticky summary \e$B$K0\F0$7$?$H$-$O\e(B msgdb \e$B$r%m!<%I$7$J$$$h$&$K$7$?!#\e(B
+         (\e$BB<ED$5$s\e(B <muse@ba2.so-net.ne.jp> \e$B$N8f=u8@\e(B)
+       * wl-summary-exit \e$B$,L5BL$K%;!<%V$7$F$7$^$&$N$r=$@5!#\e(B
+
+
+1999-05-29  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * [wl-mime.el, tm-wl.el]
+         (tm-)wl-mime-combine-message/partial-pieces() \e$B$G\e(B
+         regexp \e$B$,\e(B regexp-quote() \e$B$5$l$F$J$+$C$?$N$r=$@5!#\e(B
+
+1999-05-28  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-localdir-search \e$B$r$3$3$m$b$A9bB.2=!#\e(B
+
+1999-05-26  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+       * elmo-archive-search \e$B$r$3$3$m$b$A9bB.2=!#\e(B
+
+1999-05-25  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * \e$B08@h$,\e(B localdir, localnews \e$B$N;~$G$b\e(B elmo-move-msgs() \e$B$r9bB.\e(B
+         \e$B2=$7$?!#$J$*!"\e(Bprocmail \e$B$J$I$N\e(B MDA \e$B$r;H$C$F$$$k>l9g!"JQ?t\e(B
+         `elmo-localdir-lockfile-list'\e$B!J=i4|CM$O\e(B nil\e$B!K$K\e(B MDA \e$B$,@8@.$9\e(B
+         \e$B$k%m%C%/%U%!%$%kL>$r;XDj$9$k!#\e(B
+       * \e$B$$$/$D$+$N4X?t$r$3$3$m$b$A9bB.2=\e(B
+
+1999-05-24  \e$B2,ED\e(B \e$B7r0l\e(B (Kenichi OKADA) <kokada@vlsi.kuee.kyoto-u.ac.jp>
+
+       * POP3 \e$B$r\e(B SSL \e$B$KBP1~$5$;$?!#\e(B
+       * elmo-pop3-get-spec\e$B$G\e(B port \e$B$,\e(B string \e$B$@$C$?$N$r\e(B int \e$B$K$7$?!#\e(B
+       * elmo-default-pop3-port,elmo-default-pop3-authenticate-type\e$B$r\e(B
+         \e$BH?1G$7$F$$$J$+$C$?$N$r=$@5!#\e(B
+
+1999-05-24  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * customize \e$B$G4v$D$+\e(B `mismatch' \e$B$,=P$F$$$?$N$r=$@5!#\e(B
+
+1999-05-21  OKUNISHI -GTO- Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+
+       * WL-ELS \e$B$r\e(B WL-MK \e$B$K2~L>!#\e(B
+       * make install \e$B$G\e(B Emacs \e$B$,#22s5/F0$5$l$J$$$h$&$K$9$k!#\e(B
+
+1999-05-20  Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * wl-exit () \e$BCf$N\e(B delete-other-windows () \e$B$r:o=|!#\e(B
+       * wl-summary-force-exit \e$B$r\e(B interactive \e$B$K$9$k$N$rK:$l$F$$$?!#\e(B
+       (\e$B@P@n$5$s\e(B Ishikawa Ichiro <ichiro@mail.ne.jp> \e$B$N8f;XE&\e(B)
+
+1999-05-20 Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp>
+
+       * device-class \e$B$,\e(B color \e$B$N\e(B tty \e$B$N$H$-$NIT6q9g$r=$@5!#\e(B
+
+1999-05-20  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * highlight\e$B$r\e(Bcustom\e$B$KBP1~$7$?\e(B.
+       * \e$B%O%$%i%$%HJQ?t$N\e(Binfo\e$B$rDI2C$7$?\e(B.
+
+1999-05-19  "A. SAGATA" <sagata@nttvdt.hil.ntt.co.jp>
+
+       * wl-highlight-signature-separator \e$B$rDI2C!#\e(B
+
+1999-05-19  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
+
+       * wl-summary-jump-to-message-by-message-id () \e$B$,\e(B
+         \e$B%9%l%C%I$,JD$8$?>uBV$G1#$l$F$$$k%a%C%;!<%8$KHt$P$J$$$N$r=$@5!#\e(B
+
+1999-05-19  Yuuichi Teranishi  <teranisi@wanderlust.dq.isl.ntt.co.jp>
+
+       * wl-summary-msgdb-load-async () \e$B$r=$@5!#\e(B
+       * \e$B%U%)%k%@0\F0;~$N%P%C%U%!@ZBX$($N%?%$%_%s%0$rJQ99!#\e(B
+       * wl-summary-mark-as-read-all \e$B$,!$%9%l%C%I$,JD$8$?>uBV$G1#$l$F\e(B
+         \e$B$$$k%a%C%;!<%8$KBP$7$F8z$+$J$/$J$C$F$$$?$N$r=$@5!#\e(B
+         (\e$BBg_7$5$s\e(B <ohsawa@mxq.mesh.ne.jp> \e$B$N8f;XE&\e(B)
+
diff --git a/etc/icons/archive.xpm b/etc/icons/archive.xpm
new file mode 100644 (file)
index 0000000..6b645b9
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * lha_xpm[] = {
+"16 16 9 1",
+"      c None",
+".     c #61856595CF3C",
+"X     c #E79DE79DE79D",
+"o     c #BEFBBEFBBEFB",
+"O     c #000000000000",
+"+     c #08200C300820",
+"@     c #965896589658",
+"#     c #C71BC30BC71B",
+"$     c #FFFFEBAD79E7",
+"                ",
+"         ...    ",
+"         ...    ",
+"        .....   ",
+"   XXXXX ...    ",
+"  XoooooX .     ",
+" XooooOoXOXXOX+ ",
+" XoooOOoOOoOO@+ ",
+" X#oO$OO$OO$O@O ",
+" X#O$$O$$O$$O@O ",
+" X#O$$O$$O$$O@O ",
+" X#O$$O$$O$$O@O ",
+" X#O$OO$OO$Oo@O ",
+" X@OO@OO@OO@@@O ",
+" OOOOOOOOOOOOOO ",
+"                "};
diff --git a/etc/icons/closed.xpm b/etc/icons/closed.xpm
new file mode 100644 (file)
index 0000000..ef05ae2
--- /dev/null
@@ -0,0 +1,23 @@
+/* XPM */
+static char * closed_xpm[] = {
+"16 16 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #CF3CBAEA9658",
+"                ",
+"                ",
+"  .....         ",
+" .XXXXX.        ",
+".XoooooX....... ",
+".XooooooXXXXXXX.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+".Xooooooooooooo.",
+" .............. ",
+"                ",
+"                "};
diff --git a/etc/icons/draft.xpm b/etc/icons/draft.xpm
new file mode 100644 (file)
index 0000000..d0b02cf
--- /dev/null
@@ -0,0 +1,25 @@
+/* XPM */
+static char * draft_xpm[] = {
+"16 16 6 1",
+"      c None",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #FFFFFFFFFFFF",
+"O     c #59656595C71B",
+"+     c #79E7B2CAF7DE",
+"                ",
+" ...........  ..",
+"  .XXXXXXXXX. ..",
+"  .XXXXXXXXX..o.",
+"   .XXXXXXX.ooo.",
+"   .XXXXXX.oooo.",
+"  .......X.oooo.",
+"  .OOOOO.X.ooo. ",
+"  ........oo.o. ",
+"   .+++.X.oo.o. ",
+"  .+o+++..oo.o. ",
+" .+o+++++.o.oo. ",
+" .OoOOOOO...o.X.",
+" .OoOOOOO.X..XX.",
+" .OOOOOOO.X.XXX.",
+"  .......X..... "};
diff --git a/etc/icons/elmo.xpm b/etc/icons/elmo.xpm
new file mode 100644 (file)
index 0000000..a3aa73d
--- /dev/null
@@ -0,0 +1,19 @@
+/* XPM */
+static char * elmo2_xpm[] = {
+"18 13 3 1",
+"      c None",
+".     c #71C66DB6FFFF",
+"X     c #B6DAEFBEFFFF",
+"        ..        ",
+"       . ..       ",
+"      .. ...      ",
+"    . ...... .    ",
+"    ..........    ",
+"    .....X....    ",
+"    ....XX.X..    ",
+"   ...X.XXX...    ",
+"  ...XXXXXX....   ",
+"  ...XXXXXXX...   ",
+"  ...XXXXXXX...   ",
+"   ...XXXXX...    ",
+"    ........      "};
diff --git a/etc/icons/filter.xpm b/etc/icons/filter.xpm
new file mode 100644 (file)
index 0000000..3336a38
--- /dev/null
@@ -0,0 +1,34 @@
+/* XPM */
+static char * filter_xpm[] = {
+"16 16 15 1",
+"      c None",
+".     c #CF3CCF3CCF3C",
+"X     c #E79DE79DE79D",
+"o     c #CF3CEFBEFFFF",
+"O     c #FFFF79E7A699",
+"+     c #FFFF34D371C6",
+"@     c #000000000000",
+"#     c #BEFBE79DF7DE",
+"$     c #B6DADF7DF7DE",
+"%     c #AEBAD75CEFBE",
+"&     c #9E79A2899E79",
+"*     c #A699CF3CEFBE",
+"=     c #965892488617",
+"-     c #618565956185",
+";     c #9E79C71BE79D",
+"                ",
+"        ..XX    ",
+"       .ooooX   ",
+"      .oOOO+o.  ",
+"     .oO+ooO+o.@",
+"     .####O+##.@",
+"     X$$$O+$$$.@",
+"     X%%%%%%%%.@",
+"     &X**O+**.=@",
+"      -X;;;;.=@ ",
+"     --&X...=@  ",
+"    --&@&&&&@   ",
+"   --&@ @@@@    ",
+"  --&@          ",
+"  &&@           ",
+"  @@            "};
diff --git a/etc/icons/imap.xpm b/etc/icons/imap.xpm
new file mode 100644 (file)
index 0000000..1d7794b
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * imap_xpm[] = {
+"16 16 8 1",
+"      c None",
+".     c #E79DE79DE79D",
+"X     c #C71BC30BC71B",
+"o     c #BEFBBEFBBEFB",
+"O     c #000000000000",
+"+     c #965896589658",
+"@     c #61856595CF3C",
+"#     c #30C230C26185",
+"                ",
+"   .....        ",
+"  .XoooX.       ",
+" .Xoooooo.....O ",
+" .XoooooXXXXo+O ",
+" .XooooXXXXoo+O ",
+" .XooooXXXooo+O ",
+" .XooXXXXXXXX+O ",
+" .XoXXXXXXXXX+O ",
+" .++++++++++++O ",
+" OOOOOOOOOOOOOO ",
+"                ",
+"@@@@##XXXX##@@@@",
+"      @@@@      ",
+"       @@       ",
+"        @@@@@   "};
diff --git a/etc/icons/internal.xpm b/etc/icons/internal.xpm
new file mode 100644 (file)
index 0000000..eb78519
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * internal_xpm[] = {
+"16 16 10 1",
+"      c None",
+".     c #000000000000",
+"X     c #E79DCB2B9E79",
+"o     c #CF3CBAEA9658",
+"O     c #B6DAA6998617",
+"+     c #BEFBE79DF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #CF3CCF3CCF3C",
+"$     c #51445144FFFF",
+"%     c #9E79A2899E79",
+"                ",
+"                ",
+"   ....         ",
+"  .XXXX.        ",
+" .XooooX......  ",
+" .Xooo...XXXXO. ",
+" .Xoo.+++.oooO. ",
+" .Xo.+@@++.ooO. ",
+" .Xo.+@@++.ooO. ",
+" .Xo.+++++.ooO. ",
+" .Xo#.+++.#ooO. ",
+" .Xoo#...$$ooO. ",
+" .OOOOOOOO$$OO. ",
+"  .........$$.  ",
+"            %%  ",
+"                "};
diff --git a/etc/icons/local.xpm b/etc/icons/local.xpm
new file mode 100644 (file)
index 0000000..6f45a09
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * local_xpm[] = {
+"16 16 7 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #CF3CD34CCF3C",
+"O     c #E79DE79DE79D",
+"+     c #C71BC30BC71B",
+"@     c #965896589658",
+"                ",
+"                ",
+"  .........     ",
+"  .XXXXXX.X.    ",
+"  .XXXXXX.XX.   ",
+"  .XXXXXX....o  ",
+"  .XXXXXXooo.o  ",
+"  .XXXXXXXXX.o  ",
+"  .XXXXXXXXX.o  ",
+"  .XXXXXXXXX.o  ",
+" OOOOOOOOOOO+++ ",
+" O++++++++++@@@ ",
+" O++++++++++@@@ ",
+" O++++++++++@@@ ",
+" .............. ",
+"                "};
diff --git a/etc/icons/localnews.xpm b/etc/icons/localnews.xpm
new file mode 100644 (file)
index 0000000..24a3d3e
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * localnews_xpm[] = {
+"16 16 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #BEFBB2CA69A6",
+"o     c #FFFFFFFFFFFF",
+"O     c #EFBEE38D8617",
+"                ",
+"                ",
+" .............  ",
+".X.oooooooooo.  ",
+".X.oX.X...o.o.  ",
+"..X.ooooooooo.  ",
+".X..o..X..X.Xo. ",
+" .XX.oooooo.oo. ",
+" ..X.oXXXooooo. ",
+" ..X.oXXX.o.o.o.",
+"  .X.OOOOOOOOOo.",
+"  ..OOOOOOOOOO. ",
+"   ...........  ",
+"                ",
+"                ",
+"                "};
diff --git a/etc/icons/maildir.xpm b/etc/icons/maildir.xpm
new file mode 100644 (file)
index 0000000..3905f2e
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * maildir_xpm[] = {
+"16 16 7 1",
+"      c None",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #CF3CD34CCF3C",
+"O     c #DF7DD75C79E7",
+"+     c #BEFBB2CA69A6",
+"@     c #A6999E795965",
+"                ",
+"                ",
+"  .........     ",
+"  .XXXXXX.X.    ",
+"  .XXXXXX.XX.   ",
+"  .XXXXXX....o  ",
+"  .XXXXXXooo.o  ",
+"  .XXXXXXXXX.o  ",
+"  .XXXXXXXXX.o  ",
+"  .XXXXXXXXX.o  ",
+" OOOOOOOOOOO+++ ",
+" O++++++++++@@@ ",
+" O++++++++++@@@ ",
+" O++++++++++@@@ ",
+" .............. ",
+"                "};
diff --git a/etc/icons/multi.xpm b/etc/icons/multi.xpm
new file mode 100644 (file)
index 0000000..f84ad4e
--- /dev/null
@@ -0,0 +1,25 @@
+/* XPM */
+static char * multi_xpm[] = {
+"16 16 6 1",
+"      c None",
+".     c #9E799A69FFFF",
+"X     c #000000000000",
+"o     c #FFFFEBADD75C",
+"O     c #EFBEFFFFC71B",
+"+     c #FFFFFFFFFFFF",
+"                ",
+"  ........X     ",
+"  .oooooooX     ",
+"  .o.........   ",
+"  .o.OOOOOOOX   ",
+"  .o.O......... ",
+"  .o.O.+++++++X ",
+"  .o.O.+++++++X ",
+"  .o.O.+.+..++X ",
+"  .o.O.+++++++X ",
+"  XX.O.+X+X.++X ",
+"    .O.+++++XXX ",
+"    XX.+++++X+X ",
+"      .+++++XX  ",
+"      XXXXXXX   ",
+"                "};
diff --git a/etc/icons/news.xpm b/etc/icons/news.xpm
new file mode 100644 (file)
index 0000000..b3d5b98
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * news_xpm[] = {
+"16 16 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #9E799A699E79",
+"o     c #FFFFFFFFFFFF",
+"O     c #CF3CD34CCF3C",
+"                ",
+"                ",
+" .............  ",
+".X.oooooooooo.  ",
+".X.oX.X...o.o.  ",
+"..X.ooooooooo.  ",
+".X..o..X..X.Xo. ",
+" .XX.oooooo.oo. ",
+" ..X.oXXXooooo. ",
+" ..X.oXXX.o.o.o.",
+"  .X.OOOOOOOOOo.",
+"  ..OOOOOOOOOO. ",
+"   ...........  ",
+"                ",
+"                ",
+"                "};
diff --git a/etc/icons/opened.xpm b/etc/icons/opened.xpm
new file mode 100644 (file)
index 0000000..631e9ad
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * opened_xpm[] = {
+"16 16 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #9E798E3869A6",
+"o     c #FFFFE38DB6DA",
+"O     c #CF3CBAEA9658",
+"                ",
+"                ",
+"   ....         ",
+"  .XXXX.        ",
+"  ....XX....... ",
+" .oooo.XXXXXXXX.",
+".oOOOOo......XX.",
+".oOOOOOoooooo.X.",
+" .oOOOOOOOOOO.X.",
+" .oOOOOOOOOOOO..",
+" .oOOOOOOOOOOO..",
+"  .oOOOOOOOOOOO.",
+"  .oOOOOOOOOOOO.",
+"   ............ ",
+"                ",
+"                "};
diff --git a/etc/icons/pipe.xpm b/etc/icons/pipe.xpm
new file mode 100644 (file)
index 0000000..628be44
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * pipe_xpm[] = {
+"16 16 9 1",
+"      c None",
+".     c #9E799E79FFFF",
+"X     c #51445144FFFF",
+"o     c #2081208169A6",
+"O     c #00000000FFFF",
+"+     c #D75CD75CD75C",
+"@     c #FFFF00000000",
+"#     c #FFFFFFFFFFFF",
+"$     c #A699A289A699",
+"                ",
+"                ",
+"     .XXXo      ",
+"     .XXXo      ",
+"     .XXXo      ",
+"O+@+O.XXXo@+O+@ ",
+"+####.XXXo####+$",
+"@##.XXXXXXXo##O$",
+"+###.XXXXXo###+$",
+"O####.XXXo####@$",
+"+#####.Xo#####+$",
+"@######o######O$",
+"+#############+$",
+"O+@+O+@+O+@+O+@$",
+" $$$$$$$$$$$$$$$",
+"                "};
diff --git a/etc/icons/plugged.xpm b/etc/icons/plugged.xpm
new file mode 100644 (file)
index 0000000..03e25df
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char *plugged[] = {
+"32 16 8 1",
+"  c None",
+". c #a6caf0",
+"# c #8fa5cf",
+"a c #717171",
+"b c #5d5d97",
+"c c #8488ca",
+"d c #9f9f9f",
+"e c #7f8080",
+"                                ",
+"                                ",
+"            ...                 ",
+"           .ccb....             ",
+"           accb####.            ",
+"          .accb#####..          ",
+"   eeeeeeeeaccb#####.eeeeeeee   ",
+"   dddddddcaccb#####.dedddddd   ",
+"   dddddddcaccb#####.dedddddd   ",
+"   eeeeeeeeaccb#####.eeeeeeee   ",
+"          aaccb####aaa          ",
+"           accbaaaaa            ",
+"           aaaaaaaa             ",
+"            aaa                 ",
+"                                ",
+"                                "
+};
diff --git a/etc/icons/pop.xpm b/etc/icons/pop.xpm
new file mode 100644 (file)
index 0000000..52d6820
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * pop_xpm[] = {
+"16 16 7 1",
+"      c None",
+".     c #DF7DD75C79E7",
+"X     c #BEFBB2CA69A6",
+"o     c #000000000000",
+"O     c #A6999E795965",
+"+     c #61856595CF3C",
+"@     c #30C230C26185",
+"                ",
+"   .....        ",
+"  .XXXXX.       ",
+" .XXXXXXX.....o ",
+" .XXXXXXXXXXXOo ",
+" .XXXXXXXXXXXOo ",
+" .XXXXXXXXXXXOo ",
+" .XXXXXXXXXXXOo ",
+" .XXXXXXXXXXXOo ",
+" .OOOOOOOOOOOOo ",
+" oooooooooooooo ",
+"                ",
+"++++@@....@@++++",
+"      ++++      ",
+"       ++       ",
+"        +++++   "};
diff --git a/etc/icons/queue.xpm b/etc/icons/queue.xpm
new file mode 100644 (file)
index 0000000..bfb7711
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * queue_xpm[] = {
+"16 16 8 1",
+"      c None",
+".     c #69A68E38EFBE",
+"X     c #000000000000",
+"o     c #FFFFFFFFFFFF",
+"O     c #CF3CD34CCF3C",
+"+     c #E79DCB2B9E79",
+"@     c #CF3CBAEA9658",
+"#     c #9E798E3869A6",
+"      .         ",
+"     ...        ",
+"    .....       ",
+"   .......      ",
+"     ...        ",
+"   XX...XXX     ",
+"   Xo...oXoX    ",
+"   Xo...oXXXO   ",
+"   XoooooOOXO   ",
+"   XoooooooXO   ",
+"   XoooooooXO   ",
+"   XoooooooXO   ",
+" +++++++++++@@  ",
+" +@@@@@@@@@@##  ",
+" +@@@@@@@@@@##  ",
+" XXXXXXXXXXXXX  "};
diff --git a/etc/icons/trash-e.xpm b/etc/icons/trash-e.xpm
new file mode 100644 (file)
index 0000000..6cb4069
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char * trash_xpm[] = {
+"16 16 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #BEFBBEFBBEFB",
+"o     c #E79DE79DE79D",
+"O     c #71C671C671C6",
+"                ",
+"    .......     ",
+"   .XXXXXXX.    ",
+"  .XXXXXXXXX.   ",
+"  ..XXXXXXX..   ",
+"  .o.......O.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"  .oXoXXXOXO.   ",
+"   .XoXXXOX.    ",
+"    .......     ",
+"                "};
diff --git a/etc/icons/trash.xpm b/etc/icons/trash.xpm
new file mode 100644 (file)
index 0000000..f1cdc59
--- /dev/null
@@ -0,0 +1,25 @@
+/* XPM */
+static char * trash_xpm[] = {
+"16 16 6 1",
+"      c None",
+".     c #000000000000",
+"X     c #BEFBBEFBBEFB",
+"o     c #F7DEF7DEF7DE",
+"O     c #E79DE79DE79D",
+"+     c #71C671C671C6",
+"   ......       ",
+"  .XXXXXX..     ",
+"   .XXXXXXX.    ",
+"  .o.....XXX.   ",
+"  ..ooooo....   ",
+"  .O.......+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"  .OXOXXX+X+.   ",
+"   .XOXXX+X.    ",
+"    .......     ",
+"                "};
diff --git a/etc/icons/unplugged.xpm b/etc/icons/unplugged.xpm
new file mode 100644 (file)
index 0000000..b690c87
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * unplugged_xpm[] = {
+"32 16 9 1",
+"      s None  c None",
+".     c tomato",
+"X     c #a6caf0",
+"o     c #8488ca",
+"O     c #5d5d97",
+"+     c #8fa5cf",
+"@     c #717171",
+"#     c #7f8080",
+"$     c #9f9f9f",
+"                                ",
+"                                ",
+"          XXX......             ",
+"           ...    ...           ",
+"          ..O     ....X         ",
+"         ..oO    ...+..XX       ",
+"   ######.ooO   ...+++.X#####   ",
+"   $$$$$o.ooO  ...@+++.X$#$$$   ",
+"   $$$$$o.ooO ... @+++.X$#$$$   ",
+"   ######.ooO...  @+++.X#####   ",
+"         ..o...   @++..@@       ",
+"          ....    @@..@         ",
+"           ...    ...@          ",
+"             ......             ",
+"                                ",
+"                                "};
diff --git a/etc/icons/wl-draft-insert-signature-up.xpm b/etc/icons/wl-draft-insert-signature-up.xpm
new file mode 100644 (file)
index 0000000..ca38e48
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * wl_draft_insert_signature_up_xpm[] = {
+"32 32 3 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                        .       ",
+"                       ..       ",
+"                      .X.       ",
+"                     .X.        ",
+"                    .XX.        ",
+"                  ..XXX.        ",
+"                 .XXXX.         ",
+"                .XXXX.          ",
+"                .XXXX.          ",
+"               .XXXXX.          ",
+"               .XX.XX.          ",
+"               .XX.X.           ",
+"               .XX.X.           ",
+"               .X.XX.           ",
+"                ..X.            ",
+"          ..     ..             ",
+"  .  .   ...     .              ",
+" .   . . . .     .              ",
+" .  .... ... .   .              ",
+" ... ... ... ....               ",
+" ..     .. ...                  ",
+"                                ",
+"                                ",
+"                                ",
+"            .                   ",
+"        ...                     ",
+"       .    .  ... ...          ",
+"       ...  . .  . .  .         ",
+"          . . .  . .  .         ",
+"          . .  ... .  .         ",
+"       ...  .    . .  .         ",
+"               ..               "};
diff --git a/etc/icons/wl-draft-kill-up.xpm b/etc/icons/wl-draft-kill-up.xpm
new file mode 100644 (file)
index 0000000..59f7a90
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+static char * wl_summary_delete_up_xpm[] = {
+"32 32 8 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #E79DCB2B9E79",
+"o     c #69A68E38EFBE",
+"O     c #CF3CBAEA9658",
+"+     c #FFFFFFFFFFFF",
+"@     c #B6DAA6998617",
+"#     c #965896589658",
+"                                ",
+"            ....                ",
+"           .XXXX..              ",
+"     o     .XOOOXX..            ",
+"     oo   ..XOOOOOOO..          ",
+" ooooooo .++.XOOOOOOOO.         ",
+" oooooooo .. ..@@@OOOO@.        ",
+" ooooooooo.+.++...@@@@@.        ",
+" oooooooo  .++..++......        ",
+" ooooooo   ...++.+.+#...        ",
+"     oo    .XO.......@@.        ",
+"     o     .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.##      ",
+"            ..XOOO@O@..####     ",
+"              .......#####      ",
+"              #########         ",
+"                .      .        ",
+"      ....      .      .        ",
+"      .   .  .  .  .  ... .     ",
+"      .   . . . . . .  . . .    ",
+"      .   . ... . ...  . ...    ",
+"      .   . .   . .    . .      ",
+"      ....   .. .  ..  .  ..    ",
+"                                "};
diff --git a/etc/icons/wl-draft-send-from-toolbar-down.xpm b/etc/icons/wl-draft-send-from-toolbar-down.xpm
new file mode 100644 (file)
index 0000000..07fab96
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_draft_send_and_exit_down_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #618596586185",
+"o     c #0000FFFFFFFF",
+"O     c #FFFFFFFF0000",
+"+     c #FFFFE38DA699",
+"@     c #9E799A699E79",
+"                                ",
+"                                ",
+"                                ",
+"           ......      ...      ",
+"          .XXXXX...   .oo.      ",
+"          .XXXXXXXX.  ...       ",
+"           .XXOXXXX.  .         ",
+"           .X....XX.            ",
+"          ..........     ..     ",
+"         ...........    .oo.    ",
+"           .++.+.++.   . ..     ",
+"           .++.+.++.            ",
+"           .++.+.++.            ",
+"           .+++++++.            ",
+"            .+++++.             ",
+"            .......             ",
+"            .X.XXXX.@@@@@@      ",
+"           .XXX.XXXX.@@@@@@     ",
+"           .XXXX.XXX.@@@@@      ",
+"           .XXXXX.....@@@       ",
+"           .XXXXXX....@@        ",
+"           ...........@         ",
+"                  ....          ",
+"                                ",
+"                        .       ",
+"        ...             .       ",
+"       .     .  ...   ...       ",
+"       ...  . . .  . .  .       ",
+"          . ... .  . .  .       ",
+"          . .   .  . .  .       ",
+"       ...   .. .  .  ...       ",
+"                                "};
diff --git a/etc/icons/wl-draft-send-from-toolbar-up.xpm b/etc/icons/wl-draft-send-from-toolbar-up.xpm
new file mode 100644 (file)
index 0000000..0455911
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * wl_draft_send_and_exit_up_xpm[] = {
+"32 32 6 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #618596586185",
+"o     c #FFFFFFFF0000",
+"O     c #FFFFE38DA699",
+"+     c #9E799A699E79",
+"                                ",
+"                                ",
+"                                ",
+"           ......               ",
+"          .XXXXX...             ",
+"          .XXXXXXXX.            ",
+"           .XXoXXXX.            ",
+"           .X....XX.            ",
+"          ..........            ",
+"         ...........            ",
+"           .OO.O.OO.            ",
+"           .OO.O.OO.            ",
+"           .OO.O.OO.            ",
+"           .OOOOOOO.            ",
+"            .OOOOO.             ",
+"            .......             ",
+"            .X.XXXX.++++++      ",
+"           .XXX.XXXX.++++++     ",
+"           .XXXX.XXX.+++++      ",
+"           .XXXXX.....+++       ",
+"           .XXXXXX....++        ",
+"           ...........+         ",
+"                  ....          ",
+"                                ",
+"                        .       ",
+"        ...             .       ",
+"       .     .  ...   ...       ",
+"       ...  . . .  . .  .       ",
+"          . ... .  . .  .       ",
+"          . .   .  . .  .       ",
+"       ...   .. .  .  ...       ",
+"                                "};
diff --git a/etc/icons/wl-draft-up.xpm b/etc/icons/wl-draft-up.xpm
new file mode 100644 (file)
index 0000000..783bcea
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_draft_up_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #FFFFFFFFFFFF",
+"O     c #9E799A699E79",
+"+     c #59656595C71B",
+"@     c #79E7B2CAF7DE",
+"                                ",
+"      ...............   .       ",
+"       .XXXXXXXXXXXXX. ..       ",
+"        .XXXXXXXXXXXX..o.       ",
+"        .XXXXXXXXXXX..o.        ",
+"        .XXXXXXXXXXX.oo.        ",
+"       .XXXXXXXXXX..ooo.        ",
+"       .XXXXXXXXX.oooo.         ",
+"       .XXXXXXXX.oooo.          ",
+"       .XXXXXXXX.oooo.          ",
+"       .XXXXXXX.ooooo.          ",
+"        .XXXXXX.oo.oo.OOOOOO    ",
+"        .XXXXXX.oo.o.X.OOOOO    ",
+"        .XXXXXX.oo.o.X.OOO      ",
+"      .......XXXo.oo.XX.OO      ",
+"      .+++++.XXX..o.XXX.O       ",
+"      .......XXXX..XXXX.O  OOOO ",
+"       .@@@.XXXXX.XXXX.OOOOO    ",
+"      .@o@@@.XXXX.XXX.OOOOOO    ",
+"     .@o@@@@@........OOOOO      ",
+"     .+o+++++.  . OOOOO         ",
+"     .+o+++++.OOOOOOO           ",
+"     .+++++++.OO                ",
+"      .......OOO                ",
+"      OOOOOOOOO                 ",
+"        .   .                   ",
+"        ..  .  .  . . .         ",
+"        . . . . . . . .         ",
+"        . . . ... . . .         ",
+"        .  .. .    . .          ",
+"        .   .  ..  . .          ",
+"                                "};
diff --git a/etc/icons/wl-draft-yank-original-up.xpm b/etc/icons/wl-draft-yank-original-up.xpm
new file mode 100644 (file)
index 0000000..a2df68d
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_draft_yank_original_up_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #FFFFFFFFFFFF",
+"O     c #9E799A699E79",
+"+     c #59656595C71B",
+"@     c #79E7B2CAF7DE",
+"                                ",
+"             ...............   .",
+"              .XXXXXXXXXXXXX. ..",
+"               .XXXXXXXXXXXX..o.",
+"  ..............XOXOOOXXXXX..o. ",
+"  .oooooooooooo.XXXXXXXXXXX.oo. ",
+"  .o++o    ooo.XXOXOOXXXX..ooo. ",
+"  .o++oooooooo.XXXXXXXXX.oooo.  ",
+"  .oooo    ooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXX.ooooo.   ",
+"  .oooooooooooo.XXXXXX.oo.oo.OOO",
+"  .oooooooooooo.XXXXXX.oo.o.X.OO",
+"  .oooooooooooo.XXXXXX.oo.o.X.OO",
+"  ..................XXXo.oo.XX.O",
+"   OOOOOOOOOO.+++++.XXX..o.XXX.O",
+"   OOOOOOOOOO.......XXXX..XXXX.O",
+"              .@@@.XXXXX.XXXX.OO",
+"             .@o@@@.XXXX.XXX.OOO",
+"            .@o@@@@@........OOOO",
+"            .+o+++++.  . OOOOO  ",
+"            .+o+++++.OOOOOOO    ",
+"            .+++++++.OO         ",
+"             .......OOO         ",
+"                     .          ",
+"      ..  .          .          ",
+"       .  . ..  ...  . .        ",
+"       .  .   . .  . ..         ",
+"        ..  ... .  . ..         ",
+"        .   . . .  . . .        ",
+"      ..    .. ..  . . .        ",
+"                                "};
diff --git a/etc/icons/wl-exit-up.xpm b/etc/icons/wl-exit-up.xpm
new file mode 100644 (file)
index 0000000..7eb9182
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_folder_quit_up_xpm[] = {
+"32 32 7 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #CF3CBAEA9658",
+"O     c #AEBAB2CAAEBA",
+"+     c #B6DA965869A6",
+"@     c #69A68E38EFBE",
+"                                ",
+"                                ",
+"                                ",
+"            ...........         ",
+"            .XXooooooo.OO       ",
+"            .X.......o.OO       ",
+"            .o.++++X.o.OO       ",
+"            .o.+oooX.o.OO       ",
+"       @    .o.+oooX.o.OO       ",
+"       @@   .o.+oooX.o.OO       ",
+" @@@@@@@@@  .o.XXXXX.o.OO       ",
+" @@@@@@@@@@ .o.......o.OO       ",
+" @@@@@@@@@@@.XXooooooo.OO       ",
+" @@@@@@@@@@O.XXooooooo.OO       ",
+" @@@@@@@@@OO.o.......o.OO       ",
+" OOOOOO@@OO .o.++++X.o.OO       ",
+" OOOOOO@OO  .o.+oooX.o.OO       ",
+"       OO   .o.+oooX.o.OO       ",
+"       O    .o.+oooX.o.OO       ",
+"       O    .o.XXXXX.o.OO       ",
+"            .o.......o.OO       ",
+"            .ooooooooo.OO       ",
+"            ...........OO       ",
+"             OOOOOOOOOOOO       ",
+"                 .  .           ",
+"       ....         .           ",
+"       .    .  . . ...          ",
+"       ...  .  . .  .           ",
+"       .     ..  .  .           ",
+"       .    .  . .  .           ",
+"       .... .  . .  .           ",
+"                                "};
diff --git a/etc/icons/wl-folder-check-current-entity-up.xpm b/etc/icons/wl-folder-check-current-entity-up.xpm
new file mode 100644 (file)
index 0000000..5e852dd
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+static char * wl_folder_check_entity_up_xpm[] = {
+"32 32 8 1",
+"      c #CF3CCF3CCF3C  s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #E79DCB2B9E79",
+"O     c #B6DAA6998617",
+"+     c #CF3CBAEA9658",
+"@     c #BEFB492471C6",
+"#     c #AEBAAAAAAEBA",
+"                                ",
+"                                ",
+"                                ",
+"        ............            ",
+"     ...XXXXXXXXXXXX...         ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    ....XXXXXXXXXXXX....        ",
+"    .ooo............OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++@@@@@@++OOO.        ",
+"    .ooo+++@@@@@@@@+OOO.        ",
+"    .ooo+++@@@++@@@+OOO.        ",
+"    .ooo+++@@@++@@@+OOO.        ",
+"    .ooo+++++++@@@++OOO.        ",
+"    .ooo++++++@@@@+++OO.        ",
+"    #...++++++@@@+++...###      ",
+"    ####.....@@@....#######     ",
+"     ########@@@############    ",
+"        #####@@@###########     ",
+"             #############      ",
+"             @@@#               ",
+"             @@@#               ",
+"           . @@@#       .       ",
+"      ...  .            .       ",
+"     .   . ...   .   .. . .     ",
+"     .     .  . . . .   ..      ",
+"     .     .  . ... .   ..      ",
+"     .   . .  . .   .   . .     ",
+"      ...  .  .  ..  .. . .     ",
+"                                "};
diff --git a/etc/icons/wl-folder-empty-trash-up.xpm b/etc/icons/wl-folder-empty-trash-up.xpm
new file mode 100644 (file)
index 0000000..942165e
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_folder_empty_trash_up_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #E79DCB2B9E79",
+"o     c #CF3CBAEA9658",
+"O     c #B6DAA6998617",
+"+     c #FFFFFFFFFFFF",
+"@     c #965896589658",
+"                                ",
+"            ....                ",
+"           .XXXX..              ",
+"           .XoooXX..            ",
+"       ..  .Xooooooo..          ",
+"      .     .Xoooooooo.         ",
+"     .       ..XXXooooO.        ",
+"     .      .OO...OOOOO.        ",
+"           .OOOOOO......        ",
+"   ...     ...OOOOOOO...        ",
+"  .+++.    .Xo.......OO.        ",
+" . ++..    .XoXoooOoOOO.        ",
+" . +.+.    .XoXoooOoOOO.        ",
+"  .. .     .XoXoooOoOOO.        ",
+"    .      .XoXoooOoOOO.        ",
+"           .XoXoooOoOOO.        ",
+"           .XoXoooOoOOO.        ",
+"           .XoXoooOoOOO.        ",
+"           .XoXoooOoOOO.        ",
+"      @@   .XoXoooOoOOO.        ",
+"     @@@@@ .XoXoooOoOOO.@@      ",
+"      @@@   ..XoooOoO..@@@@     ",
+"              .......@@@@@      ",
+"              @@@@@@@@@         ",
+"                       .        ",
+"      ....             .        ",
+"      .    ....  ...  ....  .   ",
+"      ...  . . . .  .  . .  .   ",
+"      .    . . . .  .  . .  .   ",
+"      .    . . . .  .  .  ..    ",
+"      .... . . . ...   .  .     ",
+"                 .       .      "};
diff --git a/etc/icons/wl-folder-jump-to-current-entity-no-sync-up.xpm b/etc/icons/wl-folder-jump-to-current-entity-no-sync-up.xpm
new file mode 100644 (file)
index 0000000..b5f012c
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * wl_folder_jump_to_current_entity_up_xpm[] = {
+"32 32 6 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #69A68E38EFBE",
+"X     c #000000000000",
+"o     c #9E798E3869A6",
+"O     c #FFFFE38DB6DA",
+"+     c #CF3CBAEA9658",
+"                                ",
+"               .....            ",
+"               .....            ",
+"               .....            ",
+"             .........          ",
+"        XXXXXX.......           ",
+"       XooooooX.....            ",
+"      XXXXXXoooX...XXXXX        ",
+"     XOOOOOOXoooo.ooooooX       ",
+"    XO++++++OXXXXXXXXXooX       ",
+"    XO+++++++OOOOOOOOOXoX       ",
+"     XO+++++++++++++++XoX       ",
+"     XO+++++++++++++++XoX       ",
+"     XO++++++++++++++++XX       ",
+"      XO+++++++++++++++XX       ",
+"      XO+++++++++++++++XX       ",
+"      XO++++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"        XXXXXXXXXXXXXXXXX       ",
+"                                ",
+"                                ",
+"                                ",
+"                 X              ",
+"      XXXX       X              ",
+"      X    XXX  XXX X  X X      ",
+"      XXX  X  X  X X X XX       ",
+"      X    X  X  X XXX X        ",
+"      X    X  X  X X   X        ",
+"      XXXX X  X  X  XX X        ",
+"                                "};
diff --git a/etc/icons/wl-folder-jump-to-current-entity-up.xpm b/etc/icons/wl-folder-jump-to-current-entity-up.xpm
new file mode 100644 (file)
index 0000000..b5f012c
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * wl_folder_jump_to_current_entity_up_xpm[] = {
+"32 32 6 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #69A68E38EFBE",
+"X     c #000000000000",
+"o     c #9E798E3869A6",
+"O     c #FFFFE38DB6DA",
+"+     c #CF3CBAEA9658",
+"                                ",
+"               .....            ",
+"               .....            ",
+"               .....            ",
+"             .........          ",
+"        XXXXXX.......           ",
+"       XooooooX.....            ",
+"      XXXXXXoooX...XXXXX        ",
+"     XOOOOOOXoooo.ooooooX       ",
+"    XO++++++OXXXXXXXXXooX       ",
+"    XO+++++++OOOOOOOOOXoX       ",
+"     XO+++++++++++++++XoX       ",
+"     XO+++++++++++++++XoX       ",
+"     XO++++++++++++++++XX       ",
+"      XO+++++++++++++++XX       ",
+"      XO+++++++++++++++XX       ",
+"      XO++++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"       XO+++++++++++++++X       ",
+"        XXXXXXXXXXXXXXXXX       ",
+"                                ",
+"                                ",
+"                                ",
+"                 X              ",
+"      XXXX       X              ",
+"      X    XXX  XXX X  X X      ",
+"      XXX  X  X  X X X XX       ",
+"      X    X  X  X XXX X        ",
+"      X    X  X  X X   X        ",
+"      XXXX X  X  X  XX X        ",
+"                                "};
diff --git a/etc/icons/wl-folder-next-entity-up.xpm b/etc/icons/wl-folder-next-entity-up.xpm
new file mode 100644 (file)
index 0000000..b4bd524
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_next_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #59656595C71B",
+"O     c #965896589658",
+"+     c #596569A6C71B",
+"@     c #59656DB6CF3C",
+"#     c #596571C6CF3C",
+"$     c #596575D6CF3C",
+"%     c #618579E7D75C",
+"&     c #61857DF7D75C",
+"*     c #61857DF7DF7D",
+"=     c #61858207DF7D",
+"-     c #69A68A28E79D",
+";     c #61858617E79D",
+":     c #69A68E38EFBE",
+">     c #69A69248EFBE",
+",     c #69A69658F7DE",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"             .....              ",
+"             .Xoo.O             ",
+"             .Xoo.O             ",
+"             .X++.O             ",
+"             .X@@.O             ",
+"             .X##.O             ",
+"             .X$$.O             ",
+"             .X%%.O             ",
+"             .X&&.O             ",
+"             .X**.O             ",
+"        ......X==......         ",
+"         .X-;;;;;;;;;.OO        ",
+"          .X--------.OO         ",
+"           .X::::::.OO          ",
+"            .X>>>>.OO           ",
+"             .X,,.OO            ",
+"              .X.OO             ",
+"               .OO              ",
+"               OO               ",
+"                                ",
+"                       .        ",
+"       .   .           .        ",
+"       ..  .  .  .  . ...       ",
+"       . . . . . .  .  .        ",
+"       . . . ...  ..   .        ",
+"       .  .. .   .  .  .        ",
+"       .   .  .. .  .  .        ",
+"                                "};
diff --git a/etc/icons/wl-folder-prev-entity-up.xpm b/etc/icons/wl-folder-prev-entity-up.xpm
new file mode 100644 (file)
index 0000000..0d1895c
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_previous_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #69A69658F7DE",
+"O     c #69A69248EFBE",
+"+     c #69A68E38EFBE",
+"@     c #69A68A28E79D",
+"#     c #61858617E79D",
+"$     c #61858207DF7D",
+"%     c #965896589658",
+"&     c #61857DF7DF7D",
+"*     c #61857DF7D75C",
+"=     c #618579E7D75C",
+"-     c #596575D6CF3C",
+";     c #596571C6CF3C",
+":     c #59656DB6CF3C",
+">     c #596569A6C71B",
+",     c #59656595C71B",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               .                ",
+"              .X.               ",
+"             .Xoo.              ",
+"            .XOOOO.             ",
+"           .X++++++.            ",
+"          .X@@@@@@@@.           ",
+"         .X@#########.          ",
+"        ......X$$......         ",
+"         %%%%.X&&.%%%%%         ",
+"             .X**.%             ",
+"             .X==.%             ",
+"             .X--.%             ",
+"             .X;;.%             ",
+"             .X::.%             ",
+"             .X>>.%             ",
+"             .X,,.%             ",
+"             .X,,.%             ",
+"             .....%             ",
+"              %%%%%             ",
+"                                ",
+"                                ",
+"         ...                    ",
+"         .  . . . .  .  .       ",
+"         .  . .. . . .  .       ",
+"         ...  .  ... .  .       ",
+"         .    .  .   . .        ",
+"         .    .   ..  .         ",
+"                                "};
diff --git a/etc/icons/wl-folder-read-up.xpm b/etc/icons/wl-folder-read-up.xpm
new file mode 100644 (file)
index 0000000..1277854
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_jump_to_current_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #8617BEFBF7DE",
+"O     c #8617BAEAF7DE",
+"+     c #8617B6DAF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #79E7AEBAEFBE",
+"$     c #79E7AEBAF7DE",
+"%     c #79E7B2CAF7DE",
+"&     c #79E7A699EFBE",
+"*     c #79E7AAAAEFBE",
+"=     c #71C6A289EFBE",
+"-     c #71C69E79EFBE",
+";     c #71C69A69E79D",
+":     c #69A69658E79D",
+">     c #69A69248E79D",
+",     c #69A68A28E79D",
+"<     c #965896589658",
+"1     c #AEBAAEBAAEBA",
+"                                ",
+"                                ",
+"                  ....          ",
+"                ..XXXX..        ",
+"               .XoO+++Oo.       ",
+"              .Xo+@@#$%+o.      ",
+"             .Xo+$@@&&*$+o.     ",
+"             .XO%*=-;-=*%O.     ",
+"             .X+$&-:>:-&$+.     ",
+"             .X+#&;>,>;&#+.     ",
+"             ..X$&-:>:-&$..     ",
+"             .<.%*=-;-=*.<.     ",
+"              .1..*&&&..1.<     ",
+"               .@@....11.<<     ",
+"                ..@@@1..<<      ",
+"                <.....<<<       ",
+"               <..<<<<<<        ",
+"               <..<<<<          ",
+"              <..<<             ",
+"              <..<              ",
+"             <..<<              ",
+"             @@.<               ",
+"             <<<<               ",
+"             <<<<               ",
+"              <        .        ",
+"       ...             .        ",
+"       .  .  .  ..   ...        ",
+"       .  . . .   . .  .        ",
+"       ...  ... ... .  .        ",
+"       .  . .   . . .  .        ",
+"       .  .  .. .. . ...        ",
+"                                "};
diff --git a/etc/icons/wl-folder-select-entity-up.xpm b/etc/icons/wl-folder-select-entity-up.xpm
new file mode 100644 (file)
index 0000000..2a4cd19
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_select_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #BEFBBEFBBEFB",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #8617BEFBF7DE",
+"O     c #8617BAEAF7DE",
+"+     c #8617B6DAF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #79E7AEBAEFBE",
+"$     c #79E7AEBAF7DE",
+"%     c #79E7B2CAF7DE",
+"&     c #79E7A699EFBE",
+"*     c #79E7AAAAEFBE",
+"=     c #71C6A289EFBE",
+"-     c #71C69E79EFBE",
+";     c #71C69A69E79D",
+":     c #69A69658E79D",
+">     c #69A69248E79D",
+",     c #69A68A28E79D",
+"<     c #965896589658",
+"1     c #AEBAAEBAAEBA",
+"                                ",
+"                                ",
+"                  ....          ",
+"                ..XXXX..        ",
+"               .XoO+++Oo.       ",
+"              .Xo+@@#$%+o.      ",
+"             .Xo+$@@&&*$+o.     ",
+"             .XO%*=-;-=*%O.     ",
+"             .X+$&-:>:-&$+.     ",
+"             .X+#&;>,>;&#+.     ",
+"             ..X$&-:>:-&$..     ",
+"             .<.%*=-;-=*.<.     ",
+"              .1..*&&&..1.<     ",
+"               .@@....11.<<     ",
+"                ..@@@1..<<      ",
+"                <.....<<<       ",
+"               <..<<<<<<        ",
+"               <..<<<<          ",
+"              <..<<             ",
+"              <..<              ",
+"             <..<<              ",
+"             @@.<               ",
+"             <<<<               ",
+"             <<<<               ",
+"              <                 ",
+"      ....                      ",
+"         .  ..   ..  ....       ",
+"        .  .  . .  . . . .      ",
+"       .   .  . .  . . . .      ",
+"      .    .  . .  . . . .      ",
+"      ....  ..   ..  . . .      ",
+"                                "};
diff --git a/etc/icons/wl-folder-sync-current-entity-up.xpm b/etc/icons/wl-folder-sync-current-entity-up.xpm
new file mode 100644 (file)
index 0000000..ab8002e
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_sync_current_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #E79DCB2B9E79",
+"O     c #B6DAA6998617",
+"+     c #CF3CBAEA9658",
+"@     c #514471C6FFFF",
+"#     c #59656DB6EFBE",
+"$     c #618569A6DF7D",
+"%     c #69A66595D75C",
+"&     c #79E76185C71B",
+"*     c #AEBAAAAAAEBA",
+"=     c #86175D75BEFB",
+"-     c #96585965AEBA",
+";     c #9E7955559E79",
+":     c #A69951448E38",
+">     c #C71BC30BC71B",
+",     c #AEBA4D348617",
+"<     c #BEFB492471C6",
+"1     c #C71B492469A6",
+"                                ",
+"                                ",
+"                                ",
+"        ............            ",
+"     ...XXXXXXXXXXXX...         ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    ....XXXXXXXXXXXX....        ",
+"    .ooo............OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo+++++@@+++++OOO.        ",
+"    .ooo++++####++++OOO.        ",
+"    .ooo+++$$$$$$+++OOO.        ",
+"    .ooo++%%%%%%%%++OOO.        ",
+"    .ooo++++&&&&+++++OO.        ",
+"    *...++++====++++...***      ",
+"    ****....----....*******     ",
+"     *******;;;;************    ",
+"        **::::::::*********     ",
+"         >>,,,,,,*********      ",
+"            <<<<                ",
+"             11                 ",
+"                                ",
+"        ...                     ",
+"       .    .  . ...   ..       ",
+"       ...  .  . .  . .         ",
+"          . .  . .  . .         ",
+"          .  ..  .  . .         ",
+"       ...   .   .  .  ..       ",
+"            .                   "};
diff --git a/etc/icons/wl-folder-zoom-entity-up.xpm b/etc/icons/wl-folder-zoom-entity-up.xpm
new file mode 100644 (file)
index 0000000..2688452
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_select_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #8617BEFBF7DE",
+"O     c #8617BAEAF7DE",
+"+     c #8617B6DAF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #79E7AEBAEFBE",
+"$     c #79E7AEBAF7DE",
+"%     c #79E7B2CAF7DE",
+"&     c #79E7A699EFBE",
+"*     c #79E7AAAAEFBE",
+"=     c #71C6A289EFBE",
+"-     c #71C69E79EFBE",
+";     c #71C69A69E79D",
+":     c #69A69658E79D",
+">     c #69A69248E79D",
+",     c #69A68A28E79D",
+"<     c #965896589658",
+"1     c #AEBAAEBAAEBA",
+"                                ",
+"                                ",
+"                  ....          ",
+"                ..XXXX..        ",
+"               .XoO+++Oo.       ",
+"              .Xo+@@#$%+o.      ",
+"             .Xo+$@@&&*$+o.     ",
+"             .XO%*=-;-=*%O.     ",
+"             .X+$&-:>:-&$+.     ",
+"             .X+#&;>,>;&#+.     ",
+"             ..X$&-:>:-&$..     ",
+"             .<.%*=-;-=*.<.     ",
+"              .1..*&&&..1.<     ",
+"               .@@....11.<<     ",
+"                ..@@@1..<<      ",
+"                <.....<<<       ",
+"               <..<<<<<<        ",
+"               <..<<<<          ",
+"              <..<<             ",
+"              <..<              ",
+"             <..<<              ",
+"             @@.<               ",
+"             <<<<               ",
+"             <<<<               ",
+"              <                 ",
+"      ....                      ",
+"         .  ..   ..  ....       ",
+"        .  .  . .  . . . .      ",
+"       .   .  . .  . . . .      ",
+"      .    .  . .  . . . .      ",
+"      ....  ..   ..  . . .      ",
+"                                "};
diff --git a/etc/icons/wl-logo.xbm b/etc/icons/wl-logo.xbm
new file mode 100644 (file)
index 0000000..d0d3218
--- /dev/null
@@ -0,0 +1,622 @@
+#define wl-logo_width 464
+#define wl-logo_height 160
+static char wl-logo_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xa2,0xa8,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x14,0x04,0x2a,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x28,0xa1,0xa2,0x80,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x24,0x85,0x08,0x10,0x2a,0x28,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x49,0x28,0xa5,0x8a,0x80,0x82,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x6d,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x40,0x24,0x45,0x48,0x40,0x2a,0x24,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0x76,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x92,
+ 0x10,0x85,0x2a,0x80,0x08,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x6b,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x48,0x24,0xa5,0x28,
+ 0x80,0x2a,0x42,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x22,0x49,0x12,0x82,0x2a,0x80,
+ 0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xb7,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x55,0x92,0xa4,0x54,0x00,0x25,0x02,0x54,
+ 0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x6d,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x94,0x08,0x09,0x11,0x82,0xaa,0x88,0x90,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xa0,0xbb,0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x51,0x52,0x52,0xa4,0x28,0x00,0x22,0x44,0x24,0x21,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x6d,
+ 0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x8a,0x8a,0x24,0x09,0x85,0xaa,0x08,0x11,0x02,0x84,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0xb7,0x6b,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x29,0x29,
+ 0x89,0xa4,0x28,0x01,0xa2,0x84,0xa8,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6f,0x6d,0x7d,0x00,0x00,0x00,
+ 0x00,0x00,0xa0,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xa4,0xa4,0x50,0x12,
+ 0x12,0xaa,0x08,0x50,0x00,0x82,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xb5,0xdb,0x76,0x00,0x00,0x00,0x00,0x00,
+ 0x58,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x12,0x49,0x0a,0x49,0xa1,0x00,
+ 0x42,0x05,0x92,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0xdf,0xb6,0x3b,0x00,0x00,0x00,0x00,0x00,0x6a,0x35,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x4a,0xaa,0x92,0xa2,0x20,0x0a,0xaa,0x28,0xa0,
+ 0x04,0x88,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x78,0xb5,0x6d,0x3d,0x00,0x00,0x00,0x00,0x00,0xad,0x6a,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x25,0x49,0x48,0x14,0x95,0x50,0x01,0x82,0x0a,0xa0,0x02,
+ 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xd6,0x6e,0xdb,0x36,0x00,0x00,0x00,0x00,0x00,0x55,0x6b,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0xa8,0x24,0x95,0xa2,0x68,0x0f,0xa8,0x28,0xa0,0x0a,0x28,0x11,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7a,0xdb,
+ 0xbd,0x3b,0x00,0x00,0x00,0x00,0xc0,0x6a,0xd5,0x00,0x00,0x00,0x00,0x00,0x50,
+ 0x95,0x92,0x42,0xfc,0x1f,0xc0,0x0f,0x82,0x0a,0x20,0x01,0x24,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xd7,0x76,0x6b,0x1d,
+ 0x00,0x00,0x00,0x00,0x40,0xab,0xea,0x00,0x00,0x00,0x00,0x00,0x24,0x49,0x4a,
+ 0xe9,0x0f,0x00,0x00,0xe0,0x28,0x90,0x04,0x90,0x60,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xbd,0xdb,0xb6,0x1f,0x00,0x00,
+ 0x00,0x00,0x50,0x55,0xd5,0x00,0x00,0x00,0x00,0x00,0x90,0x24,0x29,0x7e,0x00,
+ 0x00,0x00,0x00,0x86,0x42,0x50,0x05,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xd7,0xd7,0xb6,0x6d,0x1d,0x00,0x00,0x00,0x00,
+ 0xa0,0xda,0xf6,0x00,0x00,0x00,0x00,0x00,0xaa,0xaa,0xd4,0x07,0x00,0x00,0x00,
+ 0x00,0x30,0x10,0x02,0xa0,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0xba,0x7a,0x6f,0xb7,0x0f,0x00,0x00,0x00,0x00,0x70,0xab,
+ 0x6a,0x00,0x00,0x00,0x00,0x80,0x4a,0x92,0xfa,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x45,0x11,0x09,0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x01,0x5e,0xdf,0xd7,0xba,0xdb,0x0e,0x00,0x00,0x00,0x00,0x58,0x55,0x75,0x00,
+ 0x00,0x00,0x00,0x40,0x29,0x49,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x44,
+ 0x20,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xfe,0xf5,
+ 0x6b,0xbd,0x6d,0x6d,0x07,0x00,0x00,0x00,0x00,0x56,0xad,0x75,0x00,0x00,0x00,
+ 0x00,0x50,0x4a,0xd5,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x04,0x09,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xab,0x5e,0xbd,0x6b,
+ 0xb7,0xbb,0x07,0x00,0x00,0x00,0x00,0xaa,0x55,0x75,0x00,0x00,0x00,0x00,0x48,
+ 0xa5,0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x42,0x41,0x80,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xfe,0xeb,0x6e,0xdd,0xdb,0xed,
+ 0x03,0x00,0x00,0x00,0x00,0xb5,0xb6,0x3a,0x00,0x00,0x00,0x00,0xa0,0x54,0x3e,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x14,0x25,0x06,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xab,0xbe,0xf5,0x77,0xbd,0xda,0x01,0x00,
+ 0x00,0x00,0x80,0x56,0xd5,0x3a,0x00,0x00,0x00,0x00,0x54,0x92,0x0f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xfe,0xeb,0xaf,0xda,0xd6,0xf7,0x00,0x00,0x00,0x00,
+ 0x80,0x6a,0x55,0x1d,0x00,0x00,0x00,0x00,0x95,0xca,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x28,0x92,0x28,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xab,0xbe,0xda,0x6f,0x7b,0x7d,0x00,0x00,0x00,0x00,0xa0,0xad,
+ 0xaa,0x1e,0x00,0x00,0x00,0x00,0x55,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0xd7,0xbf,0xba,0xad,0x3b,0x00,0x00,0x00,0x00,0x60,0xd5,0xb6,0x0e,
+ 0x00,0x00,0x00,0x80,0x92,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x50,0x49,0x88,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xab,
+ 0xfa,0x6a,0xd7,0xd7,0x1e,0x00,0x00,0x00,0x00,0xa0,0x5a,0x55,0x0f,0x00,0x00,
+ 0x00,0xa0,0x54,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x20,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x5f,0xff,
+ 0xbb,0x7a,0x0f,0x00,0x00,0x00,0x00,0x58,0xab,0xaa,0x07,0x00,0x00,0x00,0x90,
+ 0x92,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x84,0x82,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0xea,0x55,0xed,0xde,
+ 0x07,0x00,0x00,0x00,0x00,0xa8,0xd5,0xb6,0x03,0x00,0x00,0x00,0x48,0xd5,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0x7f,0xbb,0xb7,0xeb,0x01,0x00,
+ 0x00,0x00,0x00,0x68,0x6d,0xd5,0x01,0x00,0x00,0x00,0xa4,0xf4,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x85,0x40,0x1a,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0xd5,0x6e,0x6d,0xfd,0x00,0x00,0x00,0x00,
+ 0x00,0xac,0xaa,0xea,0x00,0x00,0x00,0x00,0xa8,0x7a,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x12,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0xbf,0xdb,0xbb,0x3f,0x00,0x00,0x00,0x00,0x00,0xd6,
+ 0x56,0x7b,0x00,0x00,0x00,0x00,0x2a,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x41,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xb0,0xea,0xbd,0x6e,0x0f,0x00,0x00,0x00,0x00,0x00,0x5a,0xb5,0x3a,
+ 0x00,0x00,0x00,0x00,0x55,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x49,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x7f,0xeb,0xf5,0x03,0x00,0x00,0x00,0x00,0x00,0x6b,0xab,0x1d,0x00,0x00,
+ 0x00,0x40,0xa5,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x22,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xaa,
+ 0x5f,0xef,0x01,0x00,0x00,0x00,0x00,0x80,0x55,0xb5,0x0e,0x00,0x00,0x00,0x40,
+ 0xd5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x24,
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xf5,0x7a,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xb6,0xad,0x07,0x00,0x00,0x00,0x50,0xe9,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x36,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0xaf,0x3f,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x5a,0xd5,0x03,0x00,0x00,0x00,0xa0,0x7a,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x39,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x1e,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0xd5,0xea,0x01,0x00,0x00,0x00,0x28,0x3d,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4a,0x00,0x35,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x07,0x00,0x00,0x00,0x00,0x00,0x70,
+ 0x57,0xfd,0x00,0x00,0x00,0x00,0x54,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0xa4,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfa,0x07,0x00,0x00,0x00,0x00,0x00,0xa0,0x6a,0x3b,
+ 0x00,0x00,0x00,0x00,0x54,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x41,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x00,0x00,0x00,0xb0,0xb5,0x1e,0x00,0x00,
+ 0x00,0x00,0xaa,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0xa4,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x94,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xeb,0x01,0x00,0x00,0x00,0x00,0x00,0xd8,0xae,0x0f,0x00,0x00,0x00,0x00,
+ 0xa5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,
+ 0x50,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xd5,0x03,0x00,0x00,0x00,0x80,0xea,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x75,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x94,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7b,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xa8,0xf5,0x01,0x00,0x00,0x00,0x40,0xf5,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x58,0x35,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xc8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x3e,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x6e,0xed,0x00,0x00,0x00,0x00,0x40,0x75,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x35,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xb4,0x76,0x00,0x00,0x00,0x00,0xa0,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xa8,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xd0,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0xab,0x75,
+ 0x00,0x00,0x00,0x00,0x50,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x56,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xdd,0x3a,0x00,0x00,
+ 0x00,0x00,0xa8,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xa9,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0xc8,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1c,0x00,0x00,
+ 0x00,0xa8,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x6a,0x3d,0x00,0x00,0x00,0x00,
+ 0x50,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x28,0xaa,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xe5,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x0c,0x00,0x00,0x00,0xf4,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x56,0x1b,0x00,0x00,0x00,0x00,0xac,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,
+ 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x70,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xdc,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0xb5,0x1d,0x00,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x55,0x1d,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x75,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xa0,0xad,0x0e,0x00,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0xaa,0x0e,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x92,0x07,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xd0,0xd6,0x0e,0x00,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xaa,0x0e,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x15,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x03,0x00,0x00,0x80,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x6b,
+ 0x0f,0x00,0x00,0x00,0x80,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x48,0x55,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,
+ 0x01,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x6a,0x5d,0x07,0x00,
+ 0x00,0x00,0x40,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x50,0x55,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x95,
+ 0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xe0,0x00,0x00,
+ 0x00,0xc0,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0xbd,0xaa,0x07,0x00,0x00,0x00,
+ 0x80,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xa0,0x2a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x48,0x06,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x60,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x40,0xd5,0x6d,0x03,0x00,0x00,0x00,0x40,0x1d,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,
+ 0x95,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x32,0x00,0x00,0x00,0xb0,0x0f,0x00,
+ 0x00,0x00,0x00,0x00,0xa0,0xaf,0xb6,0x03,0x00,0x00,0x00,0x40,0x1d,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x95,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xc9,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0x38,0x00,0x00,0x00,0xd8,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0xd8,0x76,0xd5,0x03,0x00,0x00,0x00,0xb0,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0xc5,0x01,0x00,0x00,
+ 0x00,0x00,0xa0,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xd0,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,0xe8,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0xe8,0xab,0xdb,0x01,0x00,0x00,0x00,0x40,0x07,0x00,0x00,0x38,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xc5,0x01,0x00,0x50,0x01,0x00,
+ 0xa8,0x01,0x00,0x40,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x00,
+ 0x00,0x20,0x0e,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,0x00,0x00,0x00,0xde,0x5f,
+ 0xd5,0x01,0x00,0x00,0x00,0xb0,0x07,0x00,0x00,0x56,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x54,0xd1,0x00,0x00,0x8a,0x0a,0x00,0xe2,0x01,
+ 0x00,0x50,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x08,
+ 0x07,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x00,0x00,0x00,0xf5,0xea,0xee,0x01,
+ 0x00,0x00,0x00,0x94,0x03,0x00,0x00,0xfa,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x15,0x55,0xe1,0x00,0x00,0x69,0x1a,0x00,0xe8,0x00,0x00,0x80,
+ 0x3a,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x80,0x44,0x00,0x10,0x81,0x03,0x00,
+ 0x00,0x00,0xfd,0x00,0x00,0x00,0x00,0x00,0xc0,0x7b,0x55,0xd5,0x00,0x00,0x00,
+ 0x00,0xd4,0x03,0x00,0x00,0xd6,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,
+ 0xe8,0x0f,0xaa,0x70,0x00,0xa0,0x94,0x1a,0x00,0x6b,0x00,0x00,0x50,0x1c,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x90,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+ 0xef,0x00,0x00,0x00,0x00,0x00,0xa0,0x1e,0xdd,0xb6,0x00,0x00,0x00,0x00,0xd4,
+ 0x01,0x00,0xff,0xed,0x01,0x00,0x80,0xf6,0x00,0x00,0x00,0x00,0x00,0xfd,0x00,
+ 0x55,0x74,0x00,0xa0,0x57,0x1a,0x80,0x48,0x00,0x00,0x28,0x0f,0x00,0x40,0xd5,
+ 0x00,0x00,0x00,0x00,0x40,0x42,0x01,0x44,0x20,0x00,0x0f,0x00,0x80,0x7a,0x00,
+ 0x00,0x00,0x00,0x00,0x68,0x8f,0x6a,0xdb,0x01,0x00,0x00,0x00,0xea,0x00,0xf0,
+ 0x7a,0xf7,0x01,0x00,0x80,0x6d,0x00,0x2c,0x00,0x00,0xc0,0x1e,0x00,0x15,0x31,
+ 0x00,0xc8,0xa1,0x1a,0x40,0x25,0x01,0x00,0x80,0x07,0x00,0x00,0xe0,0x00,0x00,
+ 0x15,0x00,0x10,0x00,0x02,0x00,0x01,0xf2,0x03,0x00,0xc0,0x7f,0x00,0x00,0x00,
+ 0x00,0x00,0xb4,0x07,0x5b,0xd5,0x01,0x00,0x00,0x00,0xea,0x00,0xd4,0xc7,0xed,
+ 0x00,0x00,0x60,0x7b,0x00,0xd7,0x00,0x00,0xb0,0x07,0x00,0x15,0x38,0x00,0x64,
+ 0x50,0x1d,0x20,0x95,0x02,0x00,0xd4,0x03,0x00,0x40,0x75,0x00,0x40,0x30,0x00,
+ 0x00,0x29,0x06,0x70,0xf0,0x7f,0x00,0x00,0xa0,0x3a,0x00,0x00,0x00,0x00,0x00,
+ 0xdb,0x83,0xd6,0xb6,0x01,0x00,0x00,0x00,0x75,0x00,0xff,0x40,0x7b,0x00,0x00,
+ 0xb0,0x7d,0xc0,0xf5,0x00,0x00,0xd4,0x03,0x80,0x4a,0x1d,0x00,0x1d,0x90,0x0e,
+ 0xa0,0x52,0x18,0x00,0xe0,0x01,0x00,0x20,0x70,0x00,0x00,0x3a,0x00,0x40,0x80,
+ 0x04,0x00,0x34,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x80,0xf6,0x80,
+ 0x6d,0x5b,0x03,0x00,0x00,0x00,0x75,0xc0,0x7a,0x80,0x5d,0x00,0x00,0xd0,0x3a,
+ 0x40,0xad,0x01,0x00,0xea,0x01,0x00,0x05,0x0c,0x80,0x0e,0x50,0x07,0x20,0x49,
+ 0x35,0x00,0x74,0x00,0x00,0x48,0x3d,0x00,0xa0,0x18,0x00,0xc0,0x04,0x0c,0x80,
+ 0x38,0x00,0x00,0x00,0x50,0x1d,0x00,0x00,0x00,0x00,0x80,0x7d,0xc0,0xb6,0xaa,
+ 0x03,0x00,0x00,0x00,0x35,0x60,0x1f,0x00,0xeb,0x01,0x00,0x6c,0x1f,0xb0,0xd6,
+ 0x01,0x00,0xed,0x00,0xc0,0x22,0x0e,0x40,0x0e,0xa0,0x03,0x90,0x2a,0x35,0x00,
+ 0x3a,0x00,0x00,0x10,0x1e,0x00,0x10,0x1e,0x00,0x20,0x40,0x08,0x00,0x18,0x00,
+ 0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0xf0,0x3e,0x40,0x5b,0xdb,0x06,0x00,
+ 0x00,0x00,0x3d,0xd8,0x1d,0x80,0x5e,0x03,0x00,0xb8,0x1d,0x68,0xdb,0x01,0x00,
+ 0x75,0x00,0x40,0x09,0x07,0x40,0x07,0xd4,0x01,0xc0,0xa5,0x38,0x00,0x39,0x00,
+ 0x00,0xa2,0x07,0x00,0x88,0x0e,0x00,0x08,0x12,0x19,0x00,0x1d,0x00,0x00,0x00,
+ 0x6c,0x1d,0x00,0x00,0x00,0x00,0x50,0x0f,0x40,0xed,0xad,0x06,0x00,0x00,0xc0,
+ 0x1a,0x74,0x0f,0x00,0xb5,0x07,0x00,0xd6,0x0e,0xb4,0xad,0x01,0x80,0x75,0x00,
+ 0x40,0x81,0x03,0x40,0x03,0xf5,0x00,0x04,0x94,0x1e,0x00,0x1c,0x00,0x00,0xc8,
+ 0x03,0x00,0xa2,0x07,0x00,0x00,0x00,0x18,0x20,0x0c,0x00,0x00,0x00,0xd8,0x0f,
+ 0x00,0x00,0x00,0x00,0xde,0x07,0x80,0xab,0xea,0x0e,0x00,0x00,0x40,0x1d,0xde,
+ 0x07,0x80,0xed,0x06,0x00,0x6d,0x0f,0x72,0xf5,0x01,0xc0,0x3a,0x00,0xa0,0xa4,
+ 0x03,0xa0,0x43,0x3c,0x00,0x00,0x50,0x0e,0x80,0x0e,0x00,0x00,0xe2,0x00,0x00,
+ 0xc4,0x01,0x00,0x00,0x90,0x1c,0x00,0x0e,0x00,0x00,0x00,0xfe,0x0e,0x00,0x00,
+ 0x00,0x00,0xea,0x03,0x40,0xb5,0x36,0x0b,0x00,0x00,0x80,0x0e,0x74,0x07,0x40,
+ 0x5c,0x0f,0x00,0xdb,0x06,0xc8,0x96,0x01,0xa0,0x36,0x00,0x50,0x81,0x01,0x90,
+ 0xaa,0x0f,0x00,0x00,0x80,0x07,0x00,0x0d,0x00,0x00,0x74,0x00,0x00,0xe0,0x00,
+ 0x00,0x00,0x00,0x1c,0x00,0x06,0x00,0x00,0x00,0x55,0x0f,0x00,0x00,0x00,0xc0,
+ 0xfb,0x01,0x80,0x5d,0xdb,0x1d,0x00,0x00,0xe0,0x0e,0xdf,0x07,0x40,0xf0,0x0d,
+ 0x80,0xb6,0x07,0x00,0xeb,0x01,0xa0,0x3a,0x00,0xa8,0xe8,0x00,0x50,0xff,0x00,
+ 0x00,0x00,0xb0,0x03,0x00,0x0c,0x00,0x00,0x71,0x00,0x00,0x75,0x00,0x00,0x00,
+ 0x40,0x0c,0x40,0x06,0x00,0x00,0x00,0xff,0x0d,0x00,0x00,0x00,0xa0,0x76,0x00,
+ 0xc0,0xea,0x55,0x15,0x00,0x00,0x00,0x8f,0x75,0x07,0x20,0xa8,0x0e,0x80,0x6d,
+ 0x07,0x80,0xb5,0x01,0xb0,0x35,0x00,0xa6,0xe2,0x00,0xc8,0x03,0x00,0x00,0x00,
+ 0xc0,0x01,0x80,0x0a,0x00,0x00,0x34,0x00,0x80,0x30,0x00,0x00,0x00,0x00,0x0e,
+ 0x10,0x06,0x00,0x00,0x80,0xb6,0x0f,0x00,0x00,0x00,0x68,0x3f,0x00,0x40,0xaf,
+ 0xb6,0x3a,0x00,0x00,0xe0,0x86,0xbe,0x07,0x10,0xdc,0x0f,0x80,0xb6,0x03,0x80,
+ 0x5e,0x01,0x50,0x6d,0x00,0xd1,0x72,0x00,0xa8,0x01,0x00,0x00,0x00,0xe8,0x00,
+ 0x40,0x12,0x00,0x80,0x32,0x00,0x20,0x34,0x00,0x00,0x00,0x40,0x0e,0x00,0x04,
+ 0x00,0x00,0xc0,0xef,0x0e,0x00,0x00,0x00,0xdc,0x0e,0x00,0x00,0xb5,0xda,0x6d,
+ 0x00,0x00,0x30,0x87,0xd7,0x06,0x0c,0xb4,0x0e,0xd0,0xdb,0x03,0x00,0xd5,0x03,
+ 0xd4,0x6a,0x80,0xaa,0x3a,0x00,0x50,0x03,0x00,0x40,0x00,0x68,0x00,0x08,0x29,
+ 0x00,0x40,0x60,0x00,0x00,0x31,0x00,0x00,0x00,0x00,0x07,0x80,0x0c,0x00,0x00,
+ 0x80,0xba,0x1d,0x00,0x00,0x00,0xeb,0x07,0x00,0x80,0x55,0xab,0x6a,0x00,0x00,
+ 0xc8,0xc3,0xfa,0x0f,0x15,0x7a,0x0f,0x44,0x6d,0x07,0x80,0x6b,0x03,0x52,0xab,
+ 0x69,0xa9,0x1a,0x00,0xa8,0x06,0x00,0x00,0x00,0x6a,0x00,0xa0,0x04,0x00,0x80,
+ 0x8a,0x00,0xa8,0x24,0x00,0x08,0x09,0x00,0x03,0x20,0x10,0x00,0x00,0xe0,0xef,
+ 0x1f,0x00,0x00,0x40,0xdd,0x03,0x00,0x00,0xde,0xb5,0xd6,0x00,0x00,0x50,0xc3,
+ 0x5f,0xf5,0x0b,0xd6,0x06,0x73,0xb7,0x15,0x00,0x5d,0x43,0x59,0xad,0xaa,0xa8,
+ 0x2a,0x00,0x91,0x0a,0x00,0xa8,0x00,0x68,0x80,0x5a,0xaa,0x04,0x20,0x51,0x00,
+ 0x00,0x10,0x80,0x44,0x18,0xa0,0x03,0x08,0x01,0x00,0x08,0x60,0xbb,0x3a,0x00,
+ 0x00,0xa0,0xf7,0x00,0x00,0x00,0xb3,0xae,0xb5,0x01,0x00,0xd0,0xa3,0xea,0x5f,
+ 0x07,0xba,0xcf,0x8c,0xda,0x0e,0x80,0xaa,0xad,0x6f,0xb5,0x6a,0x51,0xab,0xaa,
+ 0x56,0x29,0x00,0x42,0x40,0x65,0x20,0x0e,0x21,0x49,0x24,0x04,0x85,0x4e,0x45,
+ 0x90,0x01,0x12,0xc0,0x01,0x00,0x10,0x00,0x07,0xd0,0xee,0x3f,0x00,0x00,0x70,
+ 0x7d,0x00,0x00,0x00,0xdc,0x6a,0xad,0x01,0x00,0xac,0xe1,0xbf,0xea,0x83,0xef,
+ 0xba,0xe7,0xaf,0x07,0x80,0x6d,0xf5,0xab,0x55,0x75,0x54,0x55,0xd5,0x53,0xa5,
+ 0xaa,0x3c,0x80,0xaa,0x84,0x87,0x4a,0x22,0x5d,0xa9,0x20,0x2f,0x10,0xe5,0x90,
+ 0x30,0xc0,0x00,0x44,0x84,0x80,0x03,0xf0,0xbf,0x6a,0x00,0x00,0xbe,0x1f,0x00,
+ 0x00,0x00,0x54,0xb5,0x55,0x03,0x00,0xd4,0x41,0xd5,0xff,0x81,0x5a,0xef,0x41,
+ 0xf5,0x03,0x00,0x56,0xeb,0xa8,0x6a,0xbb,0x68,0x55,0xd5,0x59,0x55,0x49,0x1e,
+ 0x20,0x49,0xd5,0x43,0x28,0x49,0x0e,0x04,0x94,0x03,0x45,0x70,0x00,0x28,0x68,
+ 0x00,0x10,0x00,0xe8,0x01,0xa8,0xea,0xff,0x00,0x80,0x6a,0x0f,0x00,0x00,0x00,
+ 0xe8,0xae,0xb6,0x06,0x00,0xe8,0xe1,0x7f,0xf5,0x80,0xed,0xfa,0x60,0xdb,0x01,
+ 0x00,0xeb,0x7a,0xd0,0x56,0x1d,0x50,0x55,0xf5,0x40,0x55,0x55,0x0f,0x80,0x24,
+ 0xe9,0x01,0x45,0x92,0x47,0xa9,0xc2,0xa1,0x10,0x3d,0xa0,0x42,0x30,0x00,0x00,
+ 0x11,0x71,0x00,0xf8,0x7f,0x55,0x03,0xd0,0xdf,0x03,0x00,0x00,0x00,0xb0,0xd5,
+ 0xaa,0x0d,0x00,0xd4,0x40,0xd5,0x3f,0x40,0x77,0x3f,0xa0,0xed,0x00,0x00,0x5d,
+ 0x3d,0x50,0x5b,0x0f,0xa5,0xaa,0x7a,0x50,0x95,0xaa,0x07,0x50,0x95,0x74,0x80,
+ 0x12,0xc9,0x03,0x22,0xf0,0x00,0x44,0x0e,0x00,0x10,0x1d,0x00,0x40,0x00,0x3c,
+ 0x00,0xb0,0xd5,0xff,0x1d,0x7e,0xf5,0x01,0x00,0x00,0x00,0x50,0x6d,0x6d,0x0d,
+ 0x00,0xea,0xc0,0xff,0x1e,0xc0,0xad,0x1f,0xc0,0x76,0x00,0x00,0xaa,0x1f,0xb0,
+ 0xaa,0x57,0x50,0x55,0x3d,0xa0,0x54,0xd2,0x01,0x50,0x52,0x3a,0x00,0xa8,0xe4,
+ 0x80,0x88,0x7a,0x40,0x81,0x07,0x20,0x42,0x0e,0x00,0x00,0x49,0x0e,0x00,0x7c,
+ 0x7f,0x55,0xef,0xd5,0x7e,0x00,0x00,0x00,0x00,0xc0,0xb6,0xb6,0x1a,0x00,0xf4,
+ 0x80,0xaa,0x07,0x80,0xf6,0x07,0x80,0x3d,0x00,0x00,0xb6,0x07,0x40,0xed,0x83,
+ 0x7c,0xab,0x0e,0x40,0x53,0xf5,0x00,0x20,0xa9,0x1e,0x00,0x04,0x7a,0x00,0x44,
+ 0x1e,0x00,0xd4,0x03,0x80,0x88,0x07,0x00,0x00,0x80,0x07,0x00,0xd4,0xdb,0xff,
+ 0x5b,0xbb,0x3d,0x00,0x00,0x00,0x00,0x60,0xd5,0xd5,0x36,0x00,0x6b,0x00,0xfe,
+ 0x01,0x80,0xfb,0x01,0xc0,0x1e,0x00,0x00,0xec,0x03,0x80,0xf5,0x14,0x1c,0xd5,
+ 0x07,0x80,0x54,0x3d,0x00,0x40,0x45,0x0f,0x00,0x54,0x1f,0x00,0x92,0x0f,0x80,
+ 0xf2,0x00,0x00,0xf0,0x01,0x00,0x40,0xf0,0x01,0x00,0xfc,0x76,0xab,0xf6,0xee,
+ 0x0f,0x00,0x00,0x00,0x00,0x40,0x5b,0x56,0x2b,0x00,0x75,0x00,0x00,0x00,0x00,
+ 0x3e,0x00,0x80,0x0f,0x00,0x00,0xf8,0x00,0x00,0x3f,0x40,0x0f,0xfe,0x01,0x00,
+ 0xaa,0x0f,0x00,0x00,0xd5,0x03,0x00,0xe0,0x03,0x00,0xf8,0x01,0x00,0x3e,0x00,
+ 0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0xb4,0xdf,0xfe,0xbd,0xb7,0x07,0x00,
+ 0x00,0x00,0x00,0x80,0xad,0x5b,0x75,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x07,0x00,0x00,0x00,0xf0,0x01,
+ 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xec,0xfa,0x57,0xd7,0xfa,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0xb5,0x6a,0xd5,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xbc,0x5f,0xfd,0xbd,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x54,0x55,0xab,0x81,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf4,0xea,0x57,0xef,0x3d,0x00,0x0c,0x03,0x00,0x00,0x00,0xab,0x55,
+ 0x55,0x03,0x3a,0x00,0x00,0x00,0x00,0x18,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,
+ 0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xdc,0x7f,0xfd,0x75,0x0f,0x00,0x08,0xe1,0xef,0x1f,0x80,0x57,0xdb,0xed,0xf3,
+ 0x77,0x10,0xfe,0xf8,0x00,0x38,0x1c,0xfe,0x70,0xe0,0xc0,0x00,0x03,0x7f,0x20,
+ 0x7a,0x90,0x7f,0xfe,0xf8,0xc0,0x0f,0x03,0x0e,0x7f,0x00,0xc6,0x30,0x04,0x40,
+ 0x00,0x82,0xc0,0x80,0x83,0x83,0x3f,0x86,0x00,0x00,0x00,0x00,0x00,0xf4,0xd6,
+ 0x6f,0xef,0x03,0x00,0x98,0xa1,0x44,0x0b,0x80,0x51,0x67,0x3a,0x86,0x70,0x10,
+ 0x4a,0x28,0x01,0x28,0x06,0x4a,0xac,0x58,0xc1,0xc1,0x0d,0x4b,0x12,0xdb,0x10,
+ 0x2d,0x96,0x28,0x63,0x80,0x83,0x13,0x49,0x00,0x83,0x31,0x04,0x40,0x00,0xc2,
+ 0xe0,0xe0,0x46,0x8d,0x25,0x86,0x00,0x00,0x00,0x00,0x00,0xbc,0x7d,0xb5,0xfd,
+ 0x00,0x00,0x70,0x20,0x00,0x03,0x80,0xa4,0x55,0x0c,0x8a,0x74,0x10,0x02,0x08,
+ 0x01,0x28,0x1a,0x02,0x04,0x08,0x40,0x21,0x00,0x01,0x08,0x43,0x11,0x04,0x02,
+ 0x08,0x22,0x80,0xc2,0x00,0x01,0x00,0x01,0x51,0x04,0xc0,0x07,0xc6,0xa0,0x30,
+ 0x40,0x80,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0xd0,0xdb,0xff,0x3f,0x00,0x00,
+ 0x40,0xe0,0x03,0x01,0x40,0x8c,0x4a,0x4d,0x9b,0xd9,0x1f,0x3e,0xf8,0x01,0x58,
+ 0x0b,0x3e,0x78,0xf0,0x20,0x21,0x00,0x1f,0xc1,0x43,0x13,0x0c,0x3e,0xf8,0xe1,
+ 0x83,0x44,0x00,0x1f,0x00,0x01,0x91,0x04,0x40,0x05,0x24,0x21,0x11,0xc0,0x83,
+ 0x0f,0x92,0x00,0x00,0x00,0x00,0x00,0x70,0xf7,0xaa,0x0f,0x00,0x00,0x20,0x20,
+ 0x01,0x03,0xc0,0x0b,0x5b,0xaa,0xf6,0x58,0x00,0x12,0x88,0x40,0x48,0x19,0x02,
+ 0xa0,0x41,0xa3,0x22,0x0e,0x03,0xe8,0x43,0x14,0x0c,0x12,0x98,0x20,0xc0,0x44,
+ 0x00,0x0b,0x00,0x81,0x11,0x05,0x40,0x00,0xaa,0x30,0x11,0x00,0x8c,0x04,0xa2,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0xbd,0xff,0x01,0x00,0x00,0x20,0x20,0x00,0x03,
+ 0x60,0x10,0x69,0x4c,0xa2,0x59,0x10,0x02,0x88,0xa0,0x9a,0x18,0x02,0x00,0x01,
+ 0xb2,0x26,0x08,0x11,0x75,0x42,0x14,0x0c,0x06,0x88,0x61,0x40,0xcd,0x10,0x01,
+ 0x00,0x83,0x10,0x06,0x40,0x00,0x98,0x50,0x33,0x04,0x88,0x01,0xc2,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x6f,0x3f,0x00,0x00,0x00,0x20,0xe0,0x0f,0x03,0x20,0x10,
+ 0xd2,0xb2,0x93,0x5c,0x10,0xfe,0x08,0x29,0x99,0x08,0xfe,0xdc,0xb8,0x11,0xc4,
+ 0x0d,0x6f,0x3c,0x42,0x18,0x0c,0xfe,0x08,0x21,0x20,0x88,0x1f,0x7f,0x00,0xfc,
+ 0x10,0x06,0x40,0x1f,0x92,0x09,0xe2,0xc7,0x8d,0x3f,0x82,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x03,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2a,0x4a,
+ 0xd0,0x18,0x10,0x40,0x00,0x95,0x0a,0x10,0x50,0x40,0x80,0x00,0x00,0x00,0x41,
+ 0x0e,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x00,0x04,0x48,0x00,0x00,0x20,0x00,
+ 0x40,0x09,0x00,0x00,0x00,0x00,0x01,0x24,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0xaa,0x54,0x1c,
+ 0x00,0x00,0x00,0xa0,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x95,0xaa,0x0e,0x00,0x00,
+ 0x00,0xad,0x2a,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x6a,0x55,0x0d,0x00,0x00,0x80,0x52,
+ 0x92,0x14,0x00,0x00,0x00,0x00,0x00,0xa0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x40,0xad,0x5a,0x0d,0x00,0x00,0x00,0x4a,0xa9,0x2a,
+ 0x00,0x00,0x00,0x00,0x00,0x14,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x55,0xab,0x0e,0x00,0x00,0x80,0x2a,0x95,0x64,0x00,0x00,
+ 0x00,0x00,0x80,0x42,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x6a,0x55,0x0d,0x00,0x00,0x00,0x55,0xa5,0x52,0x00,0x00,0x00,0x00,
+ 0x00,0xd0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xac,0xb5,0x0d,0x00,0x00,0x00,0xa4,0x54,0xaa,0x00,0x00,0x00,0x00,0xa0,0xfa,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0xaa,
+ 0x1a,0x00,0x00,0x00,0x95,0x4a,0x49,0x01,0x00,0x00,0x00,0x14,0x3d,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0xad,0x1a,0x00,
+ 0x00,0x00,0x54,0x29,0xa5,0x02,0x00,0x00,0x80,0xc2,0x0f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x55,0x35,0x00,0x00,0x00,
+ 0x50,0xa5,0x54,0x0a,0x00,0x00,0x52,0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xda,0x6a,0x00,0x00,0x00,0x90,0x94,
+ 0x92,0x12,0x00,0x40,0x08,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x6b,0x00,0x00,0x00,0x40,0x55,0x4a,0x49,
+ 0x92,0x94,0xd2,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x56,0xd5,0x00,0x00,0x00,0x80,0x52,0xa9,0x54,0x49,0x22,
+ 0xf9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xa8,0xda,0x00,0x00,0x00,0x00,0xae,0x4a,0x92,0x2a,0x55,0x1f,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xd8,0xaa,0x01,0x00,0x00,0x00,0x60,0xa5,0x4a,0xa4,0xf8,0x03,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0xd5,
+ 0x01,0x00,0x00,0x00,0x00,0xbc,0xa9,0xfa,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0x56,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0xaa,0x03,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0xaa,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x58,0x55,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x50,0xad,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xa8,0xb5,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,
+ 0x55,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0xaa,0x0e,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x55,0x0d,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0xab,0x0a,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x5a,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x50,0xd5,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x60,0x55,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xa0,0xaa,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x56,
+ 0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xaa,0x3a,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x55,0x35,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xda,0x3a,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x55,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xaa,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x55,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xab,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x5a,0x35,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x3a,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x35,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xaa,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x54,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x68,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,
+ 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
diff --git a/etc/icons/wl-logo.xpm b/etc/icons/wl-logo.xpm
new file mode 100644 (file)
index 0000000..0d5b307
--- /dev/null
@@ -0,0 +1,438 @@
+/* XPM */
+static char *wl-logo4[] = {
+/* width height num_colors chars_per_pixel */
+"   491   176      255            2",
+/* colors */
+".. c None",
+".# c #030404",
+".a c #506cc2",
+".b c #1f4269",
+".c c #ce9adc",
+".d c #235bb4",
+".e c #926474",
+".f c #5c556a",
+".g c #887dcc",
+".h c #39414c",
+".i c #0d263c",
+".j c #836993",
+".k c #ad81bc",
+".l c #3d5684",
+".m c #202624",
+".n c #21508c",
+".o c #ba758e",
+".p c #61618f",
+".q c #f1b9d4",
+".r c #8073b4",
+".s c #4462ac",
+".t c #b78ed4",
+".u c #143654",
+".v c #2c4159",
+".w c #db8dac",
+".x c #474c5f",
+".y c #6c73c4",
+".z c #97719e",
+".A c #3162bc",
+".B c #615056",
+".C c #17232b",
+".D c #415c94",
+".E c #7e6074",
+".F c #6569a7",
+".G c #dda7dc",
+".H c #a787d2",
+".I c #0d1515",
+".J c #c37c9c",
+".K c #273338",
+".L c #2e4e7c",
+".M c #1d497c",
+".N c #315894",
+".O c #5062a0",
+".P c #c88cc4",
+".Q c #51494c",
+".R c #aa749c",
+".S c #9f7cbd",
+".T c #71607f",
+".U c #e09fcc",
+".V c #625b78",
+".W c #3d4656",
+".X c #8f6c94",
+".Y c #505064",
+".Z c #2a302e",
+".0 c #b384bc",
+".1 c #817acc",
+".2 c #1e3445",
+".3 c #2b476c",
+".4 c #1f2b2e",
+".5 c #121715",
+".6 c #d89fdb",
+".7 c #295eb6",
+".8 c #ce819e",
+".9 c #a278ab",
+"#. c #4d5b89",
+"## c #f4bfd6",
+"#a c #eab4dc",
+"#b c #445378",
+"#c c #6771c4",
+"#d c #6170c4",
+"#e c #4a5677",
+"#f c #2356a4",
+"#g c #2c3b45",
+"#h c #305590",
+"#i c #5967ac",
+"#j c #c996d7",
+"#k c #ab6e84",
+"#l c #454344",
+"#m c #b886c1",
+"#n c #5d6bb4",
+"#o c #233f58",
+"#p c #152d42",
+"#q c #836fa4",
+"#r c #7b79cc",
+"#s c #26476d",
+"#t c #9d82cc",
+"#u c #6c5b71",
+"#v c #2858a5",
+"#w c #6a679d",
+"#x c #eda9c6",
+"#y c #33404c",
+"#z c #7373c3",
+"#A c #795b67",
+"#B c #746aa4",
+"#C c #0f1f2c",
+"#D c #1a2d40",
+"#E c #50609a",
+"#F c #060e14",
+"#G c #9582cc",
+"#H c #79699c",
+"#I c #294e7c",
+"#J c #d082a0",
+"#K c #4a68bc",
+"#L c #c195d4",
+"#M c #a073a0",
+"#N c #273844",
+"#O c #74668f",
+"#P c #9479bc",
+"#Q c #223d54",
+"#R c #e79dbc",
+"#S c #d39ad3",
+"#T c #9f697c",
+"#U c #8f7dcc",
+"#V c #69618c",
+"#W c #8f71a4",
+"#X c #c191d4",
+"#Y c #193d64",
+"#Z c #435073",
+"#0 c #3c66bc",
+"#1 c #7b5b66",
+"#2 c #e4a7d4",
+"#3 c #0a1b2b",
+"#4 c #ca84ac",
+"#5 c #394e6f",
+"#6 c #375da5",
+"#7 c #5964a1",
+"#8 c #ad7aac",
+"#9 c #a57eb9",
+"a. c #4b5985",
+"a# c #f1b4ce",
+"aa c #e295b4",
+"ab c #d587a5",
+"ac c #f1b8d4",
+"ad c #b7738c",
+"ae c #363d44",
+"af c #282e2c",
+"ag c #8d657c",
+"ah c #181e1c",
+"ai c #5d4f54",
+"aj c #946e95",
+"ak c #f7cbde",
+"al c #88606e",
+"am c #e6a1c4",
+"an c #37475c",
+"ao c #715760",
+"ap c #e7b1dc",
+"aq c #3b3d3c",
+"ar c #14232c",
+"as c #bb80ac",
+"at c #3662bb",
+"au c #c67b97",
+"av c #f3b9d2",
+"aw c #0c0f0e",
+"ax c #1a467c",
+"ay c #3f60ac",
+"az c #5d5f8b",
+"aA c #113254",
+"aB c #c489c4",
+"aC c #7470b4",
+"aD c #2c5594",
+"aE c #3b5484",
+"aF c #b77a9f",
+"aG c #eca7c4",
+"aH c #645871",
+"aI c #435784",
+"aJ c #4a64ac",
+"aK c #183654",
+"aL c #1a201e",
+"aM c #214a7d",
+"aN c #ce90c4",
+"aO c #223644",
+"aP c #484546",
+"aQ c #676db5",
+"aR c #b18ad4",
+"aS c #26446c",
+"aT c #295292",
+"aU c #385284",
+"aV c #9a79b9",
+"aW c #956576",
+"aX c #855f6c",
+"aY c #cd809e",
+"aZ c #2e3537",
+"a0 c #565d8b",
+"a1 c #515675",
+"a2 c #ae6f86",
+"a3 c #21313c",
+"a4 c #866c9c",
+"a5 c #a26a7e",
+"a6 c #5a5874",
+"a7 c #3c5a94",
+"a8 c #222826",
+"a9 c #61649b",
+"b. c #4166bc",
+"b# c #153a64",
+"ba c #2c445f",
+"bb c #9a74a6",
+"bc c #6a545c",
+"bd c #1d4d8c",
+"be c #305aa3",
+"bf c #5165ab",
+"bg c #c692d0",
+"bh c #ae78a4",
+"bi c #71638b",
+"bj c #dfa4dc",
+"bk c #3f495c",
+"bl c #1e3954",
+"bm c #504950",
+"bn c #bd89c5",
+"bo c #5c6ec4",
+"bp c #274c7c",
+"bq c #715e7c",
+"br c #285bb4",
+"bs c #324359",
+"bt c #7675c6",
+"bu c #785e74",
+"bv c #716db1",
+"bw c #8b75b4",
+"bx c #f3bcd4",
+"by c #354a67",
+"bz c #12293c",
+"bA c #3864bc",
+"bB c #4b5372",
+"bC c #7c6690",
+"bD c #333736",
+"bE c #d49fdc",
+"bF c #1f282c",
+"bG c #546fc4",
+"bH c #d09ddc",
+"bI c #9f697c",
+"bJ c #c27994",
+"bK c #8575ba",
+"bL c #bb92d4",
+"bM c #485064",
+"bN c #19272c",
+"bO c #475f9c",
+"bP c #aa8ad4",
+"bQ c #c880a1",
+"bR c #29363c",
+"bS c #315284",
+"bT c #9d7ec0",
+"bU c #535266",
+"bV c #313634",
+"bW c #304b6d",
+"bX c #131816",
+"bY c #daa3dc",
+"bZ c #f6c8dc",
+"b0 c #b7738c",
+"b1 c #f0b1cc",
+"b2 c #1b3144",
+"b3 c #7e6da1",
+"b4 c #d486a4",
+"b5 c #ab6e84",
+"b6 c #927fcc",
+"b7 c #855f6c",
+"b8 c #e7add9",
+/* pixels */
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................................................................................................................................................................................................................................aRaRaRaRaRaRaR.t.t.t..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............................................................................................................................................b.b.#0.................................................................................................................................................................................................................................................................................................H.H.HbPaRaRaRaRaR.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"............................................................................................................................................b.#0b.ay.#.....................................................................................................................................................................................................................................................................................H.HaRaRaRaRaR.HaRaRaRaRaRaRaRaR.t.t.taR.t.t.t.t.t.t#X#X#X#X#X.t.t.t........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..........................................................................................................................................#0b.b.b.#0#Faw.............................................................................................................................................................................................................................................................................H.H.H.HaR.H.HbPaRaRaRaRaRbP.t.taR.t.taR.t.t.t.t.t.t#X#X#X.t.t.t.t#X#X#X#X#X#X.t#X................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................................................bAb.b.b.b.b.bz.#....................................................................................................................................................................................................................................................................#t#t.H.H.H.H.0.HaRbP.HbPaRbP.HaRaRaRbPaRaRaR.taRbn.tbn.t.t.t.t.t.t#X#X#X.t#X#X.t#X#Xbg#X#X#X.0............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................#0b.#0b.b.b.b.bz.#................................................................................................................................................................................................................................................................#t.H.H.H.H.H.HbPbP.H.H.0bP.0.HaRaRaRaRaRaR.taR.taR.t.t.t.t.t.t.t.t.tbL.t.t.t#X#X#X#X#X#X#X#X#X#X#L#Lbg#9......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................b.b.#0bAb.b.b.b.#K.b.#..........................................................................................................................................................................................................................................................#t.H.H.H.H.H#t.H.H.H.H.H.HbP.HbPaR.HaR.HaRaRaRaRaRaR.taR.taR.tbn.t.t.t.t.t.t#X#X.t.t.t#X.t#X#X#X#L#Xbgbg#L#j#LbgaV..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................bAbAbAb.b.#0#0b.#0b.bp.#......................................................................................................................................................................................................................................................#t#t.H#t#t#t.H.H.H.H.H.H.HaRbP.HaR.HbPaRbPaRbPaRaRbP.taRaR.taR.t.t.t.t.t.t#X.t#X.t.t#X#X#X#X#X#X#X#X#X#j#X#Lbg#L#j#j#j#L#8..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............................................................................................................................b.#0b.bAb.bAb.#0b.b.b.bp.#................................................................................................................................................................................................................................................#G#t#t#t#t#t.H.H#t#t.H#t.H.H.H.H.HaR.HaR.HaR.0bPaRaRaRaRaRaRaRaR.t.taR.t.t.t.t.t.t.t.t#X.t.t#X.t#X.t#X#X#X#X#X#X#L#X#X#L#j#j#j#L.kbC..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"............................................................................................................................#0bAbAbAb.#0b.b.b.b.#0#K.b.#............................................................................................................................................................................................................................................b6#t#t#t#t.H#t.H#t#t.H.H.H.H.H.0.H.H.0.HaR.HaRbPbPaRaRbPaRaRaRbP.t.taRaR.t.t.t.t.t.t#X.t#X.t#X#X.t#X#X#XbL#X#X#X#L#X#X#j#j#j#L#j#j#j#j.caj........................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................................bAbA.s#0b.#0bAb.bAb.b.b.b.#0bz.#........................................................................................................................................................................................................................................#t#tb6#t#t#t#t#t#t#t.H#t.H#t.H.H.H.H.H.H.H.HbP.H.HaR.H.H.0bPaRaR.taRaR.t.t.taRbnbn.t.t.t.t.t#X.t.t#X#X.t#X#XbL#X#X#X#X#X#X#X#X#Xbg#X#j#j#j#j#L.k.Y....................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................bAbAbA#0bAbAbAb.#0b.#0#0#0#0#Kbz.#......................................................................................................................................................................................................................................#t#G#t#t#t#G#t#t.H#t.H#t.H#t.H.H#t.H.H.HbP.H.H.HaRaRbPaRaRbPaRaRaRaRaRbPaRaRaR.t.t.t.t.t.t#X.t.t#X#X.t.t#X#X.t#X#X#X#X#j#j#j#j#j#j#j#j#j#j#L.c.c#j#ja6..................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................bAbAbAbA#0b.b.#0bAb.b.b.b.b.b.#0bz.#..................................................................................................................................................................................................................................#tb6b6#t#tb6#t#t#t#t#t#t#t#t.H.H#t.H#t.H.H.HbPaRbP.H.H.HbPaRaRaRaRbPaRaRbnbP.t.t.t.t.t.t.t.t.t.t.t.t.t#X#XbL.t#X#X#X#X#X#X#X#X#X#X#L#L#j#L#j#j#j#j.c#j#j.cbC................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................atbAbAbA#0bAbAbAbAbAb.#0#0#0b.b.#0#K#3.#..............................................................................................................................................................................................................................b6bTb6#t#tb6#G#t#t#G#t#t.H#t.H.H#t#t.H.H.H.H.H.H.0.H.HbPaRaRaRbPbPbPaRaRaRbP.t.taRaRaR.t.t.t.t.t.t#X.t.t#X.t.t.t#X#X#X#X#X#X#X#X#X#L#j#X#j#jbg#j#j#j#j#j#j.c#j.cbb#g............................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............................................................................................................bA.AbAbAbAbAbAb.b.b.#0bAbAb.#0#0b.b.b..#.#..............................................................................................#d#d#c......................................................................................................................b6b6b6b6b6b6#tb6#tb6#t#t#t#t#t#t#t.H.H.H.H.H.H.H.H.H.H.H.0.H.H.H.0.H.0bPaRaR.tbPaRaR.t.taRaRbnaR.t.t.t#X#X.t#X#X#X#X#X.t#XbL#X#X#X#X#X#X#j#X#X#j#L#j#L#j#j.c#j#j#j.c#jasa3..........................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................................................................................AbAbAbAbAbA.sb.bAbAbAbAbAb.b.b.b.b.b.#0#K.#.#..........................................................................................#d#c#c#c#d.y.y.O..............................................................................................................b6b6b6#G#t#t#tb6#t#t#t#t#t#t#G.H#t#t#t#t#t#t.H.H.H.H.H.H.H.HbPbPbPbPaRbPaRaRbPbPbnbP.taRaR.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t#X.t#X#X#X#L#L#X#j#X#j#j#jbg#j#j#j#j#j#j.c.c#j.c.c#mbF........................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................bAbA.AbAbAatbAbAbA#0bAbAb.b.#0#0bAb.b.#0b.b.bp.#.#......................................................................................bo#c#d#c#c#c#c#d.y#c.3........................................................................................................#Ub6b6b6b6b6b6b6#t#tb6#t#t#t#G#t#t#t#t#t.H.H.H#t#t.H.H.H.HbPbP.H.0.HbPbPaR.HbPaRaRaRaRaRaR.taR.t.t.tbn.t.t.t.t.t.t#X#X#X#X#X#X#X#X#X#X#X#j#X#L#X#L#L#j#X#j#j#j#j#j#j#j.c#j.c.c.cbbaw......................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................at.A.AbA.AbAbAbAbAbAbA.s#0bAbAbA#0b.bA#0b.#0b.aK.#......................................................................................#c#c#d#d#d.y.y#c.y#c.y.y#C....................................................................................................b6b6b6b6b6b6b6b6#tb6b6#t#Gb6#t#t#t#G.H.H.H#t#t#t.H.0.H.H.H.0.H.H.HbPaR.HaRbPaRaRaRaRbP.tbP.taR.taR.t.t.t.t.t.t.t#X#X.t.t.t.t#X#X#XbL#X#X#X#X#X#X#j#X#X#j#j#j#j#j#j.c#j#j#j#S#j#j.c.cbC.5....................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".................................................................................................A.AatbA.AbA.AbAbAbAbAbA#0bAbAb.b.bAb.b.bAb.b.#0b.#3.#....................................................................................#d#daQ#c#d#d#d#d#c.y#d.y.yaE.#..............................................................................................b6b6b6#Ub6b6b6#tb6b6#t#t#Gb6#tb6#t#t#t#t#t#t#t.H.H.H.H#G#t.H.H.H.H.0.H.HaR.H.0bP.0bPaRaRaRaRaRaRaR.taRaR.tbn.t.t.t.t.t.t#X#X#X.t#X.t#XbL#X#X#X#X#X#X#j#j#L#L#X#j#L#j#j#j#j#j#j.c.c#j.c.c.c.x....................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".............................................................................................A.AatbAbA.AbAatbAbAbAbAbAbAbAbA#0bAbAb.#0#0b.b.b.b.b..#.#..................................................................................bo#d#d#d#d#c#c#d.y#d#c.y#c.y#i.#............................................................................................#U#Ub6b6b6b6b6b6b6#tb6b6b6b6#t#t#t#t#t#t#t#t#t.H#t#t#t.H.H.H.H.H.H.HbP.HaR#P.p.p.p.p#V.p#V.pbi.S.t.taR.t.t.t.t.t.t.t.t.t#X.t.t.t#X.t#X#X#X#X#X#X#L#j#j#X#X#X#j#j#j#j#j#L.c.c.c.c#j#j#S#j.c.c.cbN..................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".........................................................................................A.A.AbA.A.AatatbAbA.AbA.AbAbAbAbAbAbAb.bAbAb.#0bAb.b.#0bp.#.#................................................................................#dbobo#dbo#d#d#c#d#c#c#c.y#c.y#c.#aw........................................................................................b6b6.g#Ub6b6b6b6#t#U#t#t#t#t#t#t#tb6#t#t#t#t#t#t#t.H.H#t.H.Haz.pbRbR.C.#.#.#.#.#aw..................awaw#g#Nbi#V.t.t.tbg.t.t#X#X.t#X#X.t#X#X#X#X#X#X#X#j#j#j#X#j#j#j#j#j#j#j#j#j.c.c.c#S.c#S.c.c#m.I................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".....................................................................................7.A.A.A.A.A.A.AbAbA.A.AbAatbAbAbAbAb.bAb.bA#0b.bAb.b.#0b.b.#3.#................................................................................bobo#c#c#c#c#c#c#d#d.y.y.y#c.y.y.y.#.#.....................................................................................g.g.g#Ub6b6b6#Ub6b6b6#tb6b6b6b6b6b6#t#t#t#t#t#t.H#t.Hazbs#N.#.#.#.#...................................................xbkbi.t#X.t.t#X.t#X#X#X#X#X#X#X#X#X#X#X#X#j#L#L#j#j#j#j#j#j#j#j#j#j.c#j.c.c.c.c.Vaw..............................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".................................................................................A.A.A.7.A.A.A.A.A.A.AbAbAbAbAbAatbAbAbAbAbAbAbAbAb.bA#0bAb.b.#6.#.#..............................................................................bo#cbo#d#d#d#d#d#c#c#c#d#d.y#d#c.y#c.#.#...................................................................................g#Ub6b6#Ub6#Ub6b6b6b6b6b6b6#tb6#t#tb6#tb6#t#t#ta0anar.#.#.#.....................................................................Vbi.t#X.t#X.t.t#X#X#X#X#X#X#j#j#L#X#j#j#L#j#j#j#j#j#j.c.c#j#S#j.c#S.c.c.c.4..............................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................................................7.A.A.7.A.A.A.A.A.AbAbA.Aat.A.A.AbAbAbAbAbAbAb.bAb.b.b.bAb.b.b.#0b.aK.#aw..............................................................................#dbo#dbobo#d#d#c#d#d#d#d#c#c.y.y.y.l.#.#.................................................................................g.gb6.g.gb6#Ub6b6b6b6b6#U#tb6b6#tb6b6#t#GbKa0aO.#.#.#..................................................................................bC#W#X#X#X#X#X#X#L#L#L#X#X#X#jbg#j#j#j#L.c.c.c.c#j#j.c.c#S#j.c.c.cbE#M.#............................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".....................................................................7.7.7.7.7.A.7#6.A.7.A.A.A.A#6.AbAbAbA.A.AbAbAbAbAbAbAbAbAbAb.#0bAb.bAb.be.#.#..............................................................................bo#dbo#d#cboaQbo#c#c#c#c.y#d#c#c#c#c.3.#...............................................................................g.gb6.g#Ub6#Ub6b6b6#Ub6b6b6b6#tb6b6#t#t#ta0.C.#.#aw..............................................................................................#9#X#X#X#X#X#X#L#j#j#j#L#j#j#j#j#j#j#L#j.c.c#j#j.c#S.c#S.c#SbH.c.x.5..........................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".......................................d.d#v................brbr.7.7.7.7.7.7.A.7.A.7.A.A.A.A.A.A.AbA.A.A.AbAbAbAatbAbAbA#0bAbA#0bAbAb.#0b.#0aK.#aw............................................................................bGaQbo#cbobo#c#d#c#d#d#d.y#d.y.y.y.y.yar.#.............................................................................g.g#U.g.gb6.gb6#U#U#Ub6#Ub6b6b6b6b6b6#waO.#.#.#........................................................................................................#9#X#X#X#X#X#X#X#X#j#X#L#j#j#j#j#j#j#j#j.c.c.c.c.c.c.c.c.c.cbn.#..........................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".......................................d.d.d.d.d.d.d.7.7.7.7.7br.7.7.7.A.7.7at.A.A.A.A.A.A.AbA.AbA.AatbAatbA.AbAbAbAbAbAbAbAbAb.b.#0bAb.b.#h.#.#............................................................................#d#dbobo#d#d#d#d#d#d#c#d#d#d#d#d#d#d.y#i.#.#...........................................................................1.g.g.g.g.gb6.gb6b6b6b6b6#Ub6b6b6#t#b.C.#.#.5................................................................................................................#X#X#X#j#L#j#X#j#j#L#j#j#j#j#j#j#j#j#j#j.c.c.c#S.c#S.c.c.c.4aw........................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".........................................d.d.7.dbr.7br.d.d.7.7.7.7.7.7.7.A.7.7.7.A.7.A.A.A.A.A.A.AbAbA.AbA.AbAbAatbAbAbA#0b.bAbAbAbAb.#0#0#F.#.5..........................................................................bobobobobobobobo#d#d#c#d#c#c#c#c#c.y.y#c.3.#aw.........................................................................g#U.g.g.gb6.g.gb6#U#U#Ub6b6b6b6.rbs#F.#.#.........................................................................................................................t#X#X#X#X#j#Lbg#j#L#j#j.c.c#j.c.c.c.c#j#j.c.c.c.cbH#S#S.9.#........................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".........................................7.d.7.7.d.7.7.7br.7.7br.7.7.7.7.7.A.A.7.A.7.7.A.A.AbA.A.A.A.A.AbAbAbAbAatbAbAbAbAbAb.b.b.#0bAbAbz.#.#............................................................................bobo#dboaQ#d#dbobobo#c#d#d#c#c.y#d#c.y.y#F.#.........................................................................g.g.1.g#U.g#U#U.gb6b6b6#Ub6b6.rbs.#.#aw................................................................................................................................#X#j#X#X#j#X#j#j#L#j#j.c#L#j#j#j#S.c#j#j#S.c#S.c.c.c.c.I.5......................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".........................................d.d.d.d.7.d.d.7.7.d.7.7.7.7.7#6.A.7.7.A.7.A.A.7.A.A.A.A.A.AbAbA.A.A.AbAbAbAbAbAbA#0bAbAbAbAb..b.#.#............................................................................bGbobobG#d#dbobo#c#c#c#d#c#c#d.y#d#c.y#c.3.#.#.......................................................................1.g.g#U.g.g.gb6.g#U.g#U#Ub6aCbs.#.#aw......................................................................................................................................#X#j#j#L#j#j#j#j#L#j#j#j#L.c.c#j.c.c#S.c.c.cbHbH#SbE.Y.#......................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".........................................d.d.d.d.7.7.d.d.7br.7br.7.7.7.7.7#6.7.A.A.A.A.7.A.A.A#6bA.A.AbAbAbAbAbAatbAbAbAbAbAbAb.b.#0bp.#.#............................................................................bobobobobobo#d#dbo#d#dbo#d#d#d#d#c#c#c.y.y#F.#.......................................................................g.1.1.g.g.g.g.gb6.g#Ub6b6#Ubs.#.#aw............................................................................................................................................bL#X#j#X#X#j#j#j#j#j#S#j#j.c#j.c.c#j.c#S.c#S.c.c.cbb.#......................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................7.7.d.d.7.7.7.7.7.7.7.7.7.7.7.7.7.A.7.7.A.A.A.A.AbA.A.A.Aat.Aat.A.AbAbAbAbA.sbAbA#0bAbAaM.#.#.............................................................................aboboboboboboboaQ#dbo#d#c#d#c#c#c#d.y#d#c#Q.#.#.....................................................................1.1.g.g.g.g.g.g.g.gb6b6.gaUaw.#.#..................................................................................................................................................#j#L#j#j#j#j#j#j.c#j#j.c#j.c.c.c#S.c.c.c.cbH#SbEbE.I.5....................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................d.7.7.d.d.7.d.7br.7.7.7.7.7.A.A.7.A.A.7.A.A.A.A.A.A.A.AbAatbAbAbA.AbAaybAbAbA#0bAbAb.aK.#.#...............................................................................abobobobo#dbo#dbo#dbo#daQbo#d#d#c#d#c#d.D.#.#.....................................................................1.g.1.g.1.g.g.g.g.g.g.ga9.C.#.#........................................................................................................................................................#j#j#L#j#j#j#j#j.c#j.c#j#j#j.c.c.c.c#S.c.c.c.c#S#y.#....................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................d.d.d.d.7.d.7br.7.7.7.7.7.7.7.7.7.7#6.A.7.A.7.A.A.AbAbA.AbA.A.A.AbAbAbAbAbAbAbAbA#6bz.#.#..............................................................................bobobGbobG#dbobobo#dbo#c#d#d#c#c#c#d#c.y#iaw.#.5...................................................................1.g.1.g.1.g.1.1.g.g.gaCba.#.#.5............................................................................................................................................................#j#j#L#j#j#j#j#j#j#L.c#S.c.c.c#S.c.c.cbH#SbEbH.j.#....................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".............................................d.7.d.7br.7.7br.7.7.7.A.7.7.7.A.A.7.A.7.A.7.A.A.A.A.A.AatbAbAbA.AbAatbAbAbA.saT#F.#aw..............................................................................bGbobobobobobobGbobo#dbobo#d#d#d#d#c#d#d#db2.#aw...................................................................g.1.g.1.g.g.g.g.1.g.ga0aw.#aw..................................................................................................................................................................bg#j#L#j.c#j#j.c#j#j.c#L#j#j.c.c#S#S.c.c.cbE#m.#....................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".............................................7.d.7.d.7.dbr.7brbr.7.7.7.A.A.7.7.A.7.A.A.A.A.A.A.A.A.AbA.Aat.AbAbAbAbAbAbA.u.#.#.5.................................................................................abo.abobobobG#daQbobo#d#c#d#d#d#c#d#c#c#Q.#.#...................................................................1.1.1.1.g.1.1.g.g#U.gaO.#.#......................................................................................................................................................................#j#j#j#j#j#j.c#j.c.c#j#S#S#S.c#S.c.cbH#SbE#SbE.#aw..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...............................................d.7.d.7.7.7.7.7.7.7.7.7.7.7.7.7.A.A.A.A.A.A.A.AbA.A.AbAbAbAbA.AbAbAbAaT#F.#.#..................................................................................bo.abobGbobGaQbG#d#dbobobobobo#cbo#c#d#caE.#.#..................................................................#r.1.1.1.1.g.g.1.g.ga9aw.#.#..........................................................................................................................................................................#j#j#j.c#L#j#j#j.c.c.c.c#j.c.c#S.cbH.cbH.c.cbF.#..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...............................................7.d.7.d.dbr.7.7br.7.7.7.7#6.A.A#6.7.7.A.7.A.A.A.AbA.A.A.A.A.AbAbAbebz.#.#.5...................................................................................a.abobobobGbobGbobobo#d#d#d#c#cbo#c#d#daE.#.#...................................................................1.1#r.gbK.1.1.1#U.1#5.#.#.5..............................................................................................................................................................................#L#j#j#j#j#j.c#j#j.c.c.c.c.c.c.c.c#S.cbEbE#y.#..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".................................................d.7.7.7br.7.7br.7.7.7.A.7.7.A.A.A.7.A.A.A.A.A.A.A.AbAbAbAbA.AaA.#.#aw......................................................................................bobGbGbobobo#dboboboboaQbobo#d#c#d#d#caE.#.#..................................................................bt.1.1.1#r.g.1.g.1aC.K.#.#..................................................................................................................................................................................#j#j#j.c.c#j.c.c#j#j.c.c.c#S.c#S.c#S.c#SbH#g.#..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...................................................7br.d.7br.7.7.7.7.7.7.7.7.7.7.7.A.A.A.A.A.A.AbAat.A.A.AaM#F.#.#.........................................................................................a.a.a#n.abGbGbobG#dbobobo#d#dbo#d#d#daE.#.#...................................................................1.1.1.1#r.g.1.g.1a9aw.#aw......................................................................................................................................................................................#L.c#j#j#j#L#j.c.c.c.c.c.c#S.cbHbHbEbH#S.X.#..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".....................................................7.d.7.7.7br.7.7.7.7.7.A.A.A.A.A.A.7.A.A.A.AbA.Aat.N.I.#.#..........................................................................................bGbobobGbobo#nbGbobo#dbG#dbobo#dbobo#caU.#.#..................................................................#r.1#r.1.1.1.1.1.1a..#.#.5........................................................................................................................................................................................#j#j#j#j#j#S#j.c#j#j.c.c.c#S.c#S.c#SbH.c.j.#..................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".......................................................7brbr.7.7.7.7.7.A.A.7.7.7.7.7.A.A.A.A.A.A.A.A#Y.#.#aw.............................................................................................a.a.a#nbG.abGbobobGbo#dbobo#dbo#c#c.3.#.#..................................................................#rbK#rbK#r.1#r.g.1ba.#.#..............................................................................................................................................................................................#j#j.c.c#j.c#j#S#S.c.c.c.c.c.c#SbH#jaRb3.#...............................................................................................................................................................H.H................................................................................................................................................................................................................................................................",
+"...........................................................d.7br.7.7.7.7.7#6.A.A.A.7.A.A.A.A.A.Abe#3.#.#..............................................................................................#nbGbGbG#nbGbo#nbGboboboboboaQ#dbo#d#p.#.#..................................................................bt#rbt#r.1.1.1.1.1a3.#.#.................................................................................................................................................................................................c#j#j#j#j.c.c.c#j.c#S.c#S.c.c.c#j.1btbt#C.5..........................................................................................................................................................aRaR.H.k.#............................................................................................................................................................................................................................................................",
+"..............................................................bd#f.7.7.7.7.A.7.7.7.A.A.A.A.A.A.n#F.#aw.................................................................................................a.a.a.abGbobGbGbobobobobG#d#dbobf#C.#.#..................................................................bt.1#r.1.1bt#r.1aQar.#.#..................................................................................................................................................................................................#j#j#j.c.c#j#L.c.c.c.c.c.cbHbH#j.1btbtbtaI.#.........................................................................................................................................................HaRaRaRbP.#aw..........................................................................................................................................................................................................................................................",
+"....................................................................bzbz.i.i#F#F#v.7.7.A.A.AaM.#.#.5................................................................................................bG.a#nbG.a.a#nbobGbobobo#dbobobo.D#F.#aw...................................................................1btbt.1#r.1.1.1bvaw.#aw......................................................................................................................................................................................................#j#j#j.c#S#j.c#j.c.c#S#S#S.c#UbtbtbtbtaI.#......................................................................................................................................................aR.HaRbPaRbP.#.#..........................................................................................................................................................................................................................................................",
+"...............................................................................7.7.A.A#6at#v.#.#...................................................................................................a.a.abG.abobobGbGbobobGbobobobo.3.#.#.5....................................................................bt.1.1#rbK.1#raQ#F.#aw.........................................................................................................................................................................................................c#j#j#j#j.c.c#S.c.c.c.c.c#tbtbtbtbtbtbt.#.......................................................................................................................................................HaR.HaRaRaR.#.#..........................................................................................................................................................................................................................................................",
+".............................................................................7at.A.A.A.7aM#F.#aw..................................................................................................#nbG.abo.a.abo#nbG.aaQbGbobobf#p.#.#......................................................................btbtbtbt#r#rbKaQaw.#aw..........................................................................................................................................................................................................#j#j#j.c#j#j.c#j.c.c.c#S#Xbtbtbtbtbtbtbt.#.#..................................................................................................................................................aR.HaR.HbP.0bP.#.#..........................................................................................................................................................................................................................................................",
+".............................................................................A.7.7.7.A#v.#.#.....................................................................................................a.a.a.a.abGbG.abG.abobobobG.D#F.#aw......................................................................bt#r.1.1.1#rbtaQaw.#aw.............................................................................................................................................................................................................c.c#S#L.c.c.c#S.c.c.c.c#r#z#zbtbtbKbtbt.#.#.................................................................................................................................................H.HaR.HaR.HbPaR.#.#..........................................................................................................................................................................................................................................................",
+"...........................................................................7.A.A.A.A#v#F.#aw.....................................................................................................a.a#n.a.a#nbGbobobGbGbobobl.#.#.5......................................................................#rbtbtbtbtbK#raQ#F.#aw..............................................................................................................................................................................................................#j#j#j#j#j#j.c.c.c.c#S#tbtbtbtbtbtbtbt#n.#.#................................................................................................................................................aR.HaRaRaRaR.HaR.#.#..........................................................................................................................................................................................................................................................",
+".........................................................................7#6.7.7.A#f#F.#aw.....................................................................................................a.a.abG.a.abG.a.abGboboa7#F.#.#..........................................................................btbKbt#r#r#raQaw.#aw..................................................................................................................................................................................................................#j.c.c.c.c.c#j.c.cbLbtbtbtbtbtbtbtbtaI.#aw..............................................................................................................................................aR.HaR.H.HbPaRaRbP.#.#..........................................................................................................................................................................................................................................................",
+".......................................................................A.7.A.A.7#v#F.#aw.......................................................................................................a.a.abobG.abobo#n.a#nbf.#.#.5..........................................................................btbt#rbtbtbtbv#F.#aw....................................................................................................................................................................................................................#j#j#j#L#j#S#j#j#S.gbtbt#z#zbtbtbtbtaI.#................................................................................................................................................bP.HaRaR.H.HaR.0.p.#.#..........................................................................................................................................................................................................................................................",
+".......................................................................7.A.7.7.A.i.#aw......................................................................................................#i.a.a.a.a.a#n.a.abGbGbGbl.#aw..........................................................................btbt#rbtbt.1.1#F.#aw......................................................................................................................................................................................................................#j#j.c.c.c.c.c.c.H.y.y#zbtbtbtbtbtbt.v.#...............................................................................................................................................H.HaR.H.HaRaRbPbP.p.#................................................................................................................................................................................................bY..........................................................",
+".....................................................................7.7.7.7.7.i.#.#.........................................................................................................a.a.a.a.abG.abG.abobGbo.#.#..........................................................................btbtbtbt.1btbt.2.#.#........................................................................................................................................................................................................................#j#j#j#j#j.c#S#Xbtbtbtbtbtbtbtbtbtbtb2.#.............................................................................................................................................H.0.HaRbP.HbP.HaR.HbR.#...........................................................................................................................................................................................G.G.G.G.G#S......................................................",
+"...................................................................7.7.7.7.A#Y.#.#.........................................................................................................a#i.a.a.a#n.abo.abo.aboaS.#.#..........................................................................btbtbtbtbtbt.2.#.#...........................................................................................................................................................................................................................c#j.c.c.c.c.cb6.y.ybtbtbtbtbtbtbtbt.#.#............................................................................................................................................bP.H.H.H.0bP.0aRaRaRbN.#......................................................................................................................................................................................bY.Gbjbjbj.G#2.G.#aw..................................................",
+".................................................................7.7.7.A.7ax.#.#...........................................................................................................a.a.a.a.a.a.a#n.abo.abo#F.#..........................................................................#zbtbtbtbtbKaI.#.#............................................................................................................................................................................................................................#j#j#j#j#j#j.tbtbt.y.y#zbtbtbtbtbtaI.#.#...........................................................................................................................................HbPbPbPbP.HbPbP.HbP#P.#.#....................................................................................................................................................................................bYbY.G.G.GbY.G.Gbq.#.#..................................................",
+".................................................................7.7.7.7aD.#.#..........................................................................................................#K.a#K.a.a.a.a.abGbG.abo#s.#.#........................................................................btbtbtbtbtbta..#.#...............................................................................................................................................................................................................................c#j.c.c#S.c.1.y.ybtbtbt#zbtbtbtbt#C.#.............................................................................................................................................H.H.H.H.HaR.H.0aRaRbB.#aw..................................................................................................................................................................................bYbjbjbYbYbY.GbYbj.I.#....................................................",
+"..............................................................br.7.7.7#v#F.#aw...........................................................................................................a.a#i.a.a.a.a.a.abo.a.a#F.#..........................................................................btbtbtbtbt#n#F.#................................................................................................................................................................................................................................#j#j#j#j.c.H#zbt#zbtbtbt#zbtbtbt#7.#.#...........................................................................................................................................H.H.H.H.H.HbPbPbP.HaRaw.#.....................................................................................................................................................................................GbYbY.G.Gbj.G.G.T.#.#....................................................",
+".............................................................7.7.7.7.7#3.#aw...........................................................................................................a#K.a.a.a.a.abo.a#n.abobS.#.#........................................................................#zbt#zbtbtbtaw.#aw.................................................................................................................................................................................................................................c#j.c.c#X.ybt.ybt.ybtbtbtbtbtbt#C.#.5...........................................................................................................................................H.H.H.0bPaR.H.H.0aR#e.#.#..................................................................................................................................................................................bYbY.G.Gbjbj.GbjaN.#.#......................................................",
+".............................................................7.7.7.7aA.#.#..........................................................................................................#K.a.a.a.a.a.a.a.abG.a.a#n#3.#........................................................................bt.ybt#zbtbtb2.#.#..................................................................................................................................................................................................................................#j#j#j#j#t.ybt.ybt.ybtbt#zbtbta9.#.#...........................................................................................................................................H.H.HbP.H.HaRbPbPbP#Paw.#..................................................................................................................................................................................bYbYbYbYbY.GbY.G.P.5.#aw......................................................",
+"..........................................................br.7br.7ax.#.#...........................................................................................................a.a.a#K.a#i.a.a.abo.abobGa7.#.#.........................................................................ybtbtbtbtaI.#.#.....................................................................................................................................................................................................................................c#j.c#j.y.y.ybt.ybt.ybtbtbt.1#F.#.5.........................................................................................................................................H.H.H.H.H.H.H.H.H.H.H#N.#aw..................................................................................................................................................................................bYbYbYbj.GbY.GbY.h.#aw........................................................",
+".........................................................7br.7.7#f.#.#........................................................................................................#K#K#K#K.a#K.a.a.a.a.a.a.a.abGbl.#.5......................................................................btbtbtbtbtaQ#F.#.......................................................................................................................................................................................................................................c#j#j.1#z.y.ybt#zbt.ybtbt#zb3.#.#...........................................................................................................................................H.H.H.H.HaR.HaRaRaR#V.#.#..................................................................................................................................................................................bYbYbYbYbY.Gbj.G.Y.#.#..........................................................",
+".......................................................dbr.7.7br#F.#aw......................................................................................................#K#K.a.a.a.a.a.a.a.a.a.a#n.a.a.s.#.#.......................................................................y.y#z#zbtbt#C.#aw......................................................................................................................................................................................................................................#j#j.tbtbt#z#z.ybt#zbtbt#zaR#y.#.5.........................................................................................................................................H.H.H.H.0bP.HaR.H.Haz.#.#..................................................................................................................................................................................bYbYbjbY.GbYbY.G.X.#.#............................................................",
+".......................................................7.7.7.7aA.#.#......................................................................................................#K.a#K#K#K#K.a.a.a.a.a.a.a.a#n.aaS.#aw......................................................................btbtbt#zbt#5.#.#......................................................................................................................................................................................................................................#j#j#j.1.ybt.y#z.ybtbt.ybtb6#m.#.#...........................................................................................................................................k.H.H.H.H.H.H.HaR#Paw.#....................................................................................................................................................................................bYbYbYbYbjbYbYaj.#.#..............................................................",
+".....................................................d.dbrbr.n.#.#....................................................................................................#K#K#K#K#K.a#K#K.a#K#K.a.a.a.abGbG.a#F.#......................................................................bt.y.y.ybt#n.#.#........................................................................................................................................................................................................................................#j.c.t.y.y.y.ybtbt.y.ybtb6.c#u.#aw.........................................................................................................................................H.H.H.H.H.H.H.HbP#P.I.#aw...................................................................................................................................c.c#S..........................................bYbYbYbYbY.Gbj#8.#.#................................................................",
+"...................................................7.7.7.7#f#F.#.5..................................................................................................#K#K#K#K#I#I#KbG#K.a.a.a#i.a.a.a.aboa7.#.#......................................................................btbtbtbt#z#C.#aw........................................................................................................................................................................................................................................#j#j.1.y.ybt.y.ybtbtbtb6bE.c.I.#........................................................................................b6.................................................H.H.H.H.0.H.H.0bwaw.#aw...................................................................................................................................c#S.cbE.Iaw......................................bYbYbYbYbY.G.P.I.#.5................................................................",
+".................................................d.7.7.d.d.i.#aw................................................................................................b.#K#0#K#K#I.#bA#K#K.a.a.a#K.a.a.a#n.a.abl.#.5.....................................................................y.y.y#z.y#5.#.#..........................................................................................................................................................................................................................................#j.t.y.ybt.y.y#z.y#zb6.c.c.9.#.#......................................................................................b6b6b6#w...........................................H.H#t.H.H.H.HbP#P.I.#aw...................................................................................................................................c#SbHbH.V.#.#....................................bY.6bYbYbYbY.P.5.#aw..................................................................",
+".................................................d.d.7.7bd.#.#................................................................................................#K#K#K#K#K#p.#aK.a.a#K#K.a.a.a#K.a.a.a.a.a#F.#......................................................................#z#zbtbt#i#F.#.................................................A.A.A......................................................................................................................................................................................#j.1.y.y.y.y.ybtbtb6.c.c.cbN.#.5.......................................1.1.g.g.1.1..................................b6b6b6bKaw.#........................................#t.H.H.H.H.H.Hbwaw.#aw.................................................................................................................................c.c.c.c.c#m.#.#......................................bYbYbYbYbYbY#3.#aw....................................................................",
+"...............................................d.d.7brbr#F.#.5..............................................................................................#K#0#K#Kat#C.#.##K#K#K#K.a#K.a.a.a.a.a.a.a.s.#.#....................................................................bt.ybt.y.yb2.#aw.............................................A.A.AbAataM...................................................................................................................................................................................c.t.y.y.ybtbtbt.y#U.c#S.c.9.#.#...................................1.1.1.1.1.1.1.g.g.1aO..........................#Ub6b6bTaCaw.#aw.......................................H.H.H.H.H.H.Hbw.I.#aw........................................aR.......................................................................................c.c.c#S.c#S.j.#aw.......................6.6.6bY.6bE.6bYbY.6bYbYbY.h.#.#......................................................................",
+".............................................d.7.d.7.db#.#.#............................................................................................#Kb.#Kb.#K#6#F.#aw..#K.a#K.a.a.a#K.a.a.a.a#n.a.L.#aw...................................................................ybt.ybtbt.O.#.#..............................................atat.AbAatat.#......................................................b.b.................................................................................................#d#d#d#d#c.yboaQ......#j.1.y.y.y.y.y.yb6#j.c.c.c.4.#.5...............................1#r.1.1.1.1.1.g.1.1.g.1a..#......................b6b6#Ub6b6bs.#aw......................................#t.H.H.H.H.H.H#Paw.#aw.......................................t.t.taR#q.................................................................................c#j#S.c#S.c.c.c.I......................bEbE.6bEbY.6bYbYbYbYbYbYbY#8.h#y................bj......................................................",
+"...........................................d.7.d.7.d#f.#.#............................................................................................b.b.#0#K#Kbp.#.#aw..#K#K#K#K#K#K#K.a.a.a.a.a.abGbS.#.....................................................................y.y.y.y.y#C.#.5.............................................AbAbA.A.AbAbA.#.#................................................#0#K#K#Kb..#......................................................................................bo#d#c#c#n#5.5.#.#.#........#X.y.y.y.y.y.yb6.c.c.c.c#M.#.#............................bt.1.1.1#r.g.g.g.g.1.g.g.g.g#..#....................b6b6b6b6b6b6#Z.#.........................................H.H#t#t#t.H#Paw.#aw....................................aRaR.t.t.t.t.t.#.............................................................................c#S.c.c.c.c.c#S.c#m.I..................bEbYbYbY.6bEbYbEbY.6bYbYbYbYbYbYbYbYbY.G.G.G.G.GbjaN......................................................",
+"...........................................d.7.d.7.7aA.#aw..........................................................................................b.#K#K#0#Kb#.#.#.......a#K#K.a#K.a.a#K.a#i.a.a.a.a.a.#...................................................................y.y.y#z#zbW.#.#...............................7.7.7.7.7.A.A.A.A.A.AbA.A.A.n.#.#............................................b.b.b.b.#K#Kbp.#aw..............................................................................bo#c#cbobf#N.#.#aw..............#jb6#z.y.y#z#z#U.c.c.c.cbHbF.#.5...........................1bKbt#b.K#oaQ.1.1.1.1.1.1.g.1a3.#..................#U#U#Ub6#Ub6b6b6a0........................................#t.H.H.H#tbw.I.#aw.....................................t.taR.t.t.tbn.S.#.#..............................#X#X#X#X..................................#j#j.c#j.c#S#S.c#S.c#S#mbF................bEbEbEbEbEbEbY.6bYbY.6.6bjbYbYbY.G.GbYbYbjbj.PbU.#.#aw....................................................",
+".........................................d.d.d.d.d#f.#.#........................................................................................b.#0b.#0#K#6bz.#.#......#K#K#K#K.a#K.a.a.a#K.a.a.a.a#n.a#C.#.................................................................y.ybt.ybtaw.#.........................7.7.A.A.7beaS.4.#.#aK.A.A.AbA.AbAbA#3.#.5..........................................b.b.#K#0#Kb.b.#3.#....................#K#K.a.a#K..............................................bo#d#d#d.Oaw.#.#....................#j.y.y.y.y.yb6.c#j.c.c.cbb.#.#........................bt#r.1...#.#.5....bK.1.g.g.g.g.g.g.I.#................#Ub6b6b6b6b6b6b6b6b6b6#w...................................H.H.H.H.H#P.I.#aw....................................aRaRaR.taRaR.t.ta1.#aw............................#X#X#Xbgbg.k.#...............................c#S.c#S.c.c.c.cbH#S.cbH#maw................bEbEbYbYbYbEbYbY.6bYbYbYbYbYbYbYbYbYaFbq.4.#.#aw........................................................",
+".......................................d.d.d.7.d.daA.#aw......................................................................................#0b.#K#0b.at#F.#aw........#K#K#K#K#K#K#K.a.a.a.a.a.a.a.a.aaS.#...............................................................y#z.ybt.ybW.#.#.....................7.7.7.7.n#3.#.#aw.......A.A.A.A.A.A.AaM.#.#..........................................b.#K#0#Kb.#K#K.N.#.#.................a.a.a.a.a#K.aaS.5........................................#dbobo#n#p.#.#........................#t#c#c#z.y#U#j.c#j#S.c.c.4.#bX.......................1bt#r...#aw.........1.1.1.1.1.1.g.v.#.#..............b6.g.gb6#Ub6b6b6b6b6b6b6b6b6.r..............................#t#t.H.Hbwaw.#aw....................................aRaR.taR.t.taR.t.Saw.#............................#X#X#L#L#Xbg#X.#aw..............................#j.c.c.c.c#S.cbHbH#SbH#S.jaw..................#y#y#ybhbEbYbYbY.X.X.Xbq.h.h.4.#.#.#.5..............................................................",
+".....................................d.7.7.d.d.7#f.#.#....................................................................................#0b.b.b.b.b.bp.#.#aw..........#0.a.a#K.a#K.a#K.a.a.a.a.a.abo.a.s.#...............................................................y.y.y.y.y#F.#...................7.7.7.7#v.I.#.#.............A.AbA.A.A.AbA#Y.#..........................................b.#0b.b.b.#0b.b.#3.#.5..............#K#K#K#K#K.a.a.a.a.#....................................bo#dbo#d#i#F.#aw........................#j.1#z.y.y.1.c.c#j.c#j#j.V.#.#.......................1bt.1.5.#...............1.1.g.g.ga..#.#.................gb6b6#Ub6b6b6b6b6bTb6b6b6b6#G.r.K.........................H.H.H#taz.#.#aw.......................................t.taR.taR.t.t.S#g.#aw..........................#X#X#X#X#X#L#Xa6.#.#..........................#j#j.c#X#j.c.c.c.c.c.c.c#SbH#SbF........................bYbYbYbY#8.#.#................................................................................",
+".....................................d.d.7.d.d.db#.#aw..................................................................................bAb.b.b.b.#Kbz.#.#.............a#K#K#K#K#K#K#K.a#K#K.a.a.a.a#n.a.a#Qaw.............................................................y.y.y.ybW.#.#...............7.7.7.7.A.M.#.#aw...............A.A.AbA.A.Aat.A.n........................................b.b.b.b.b.#K#K#K.b.#.#..............#K#K.a.a.a#K.a#K.a.a#p.#................................bobobobobf#F.#aw...........................t.y.y#cbt#X#j.c.c.c.c#m.I.#......................bt.1bt.C.#.................1.1.1.1a..#.#....................#Ub6b6#Ub6b6b6b6b6b6#tbTb6#G#GaOaw......................#t#t.Haz.#.#........................................aRaR.taR.tbn.t.S.I.#aw..........................#XbL#X#X#X#Xbg.k.I.#...........................c.c.....##m.c#S.c#S.cbEbH.cbHbH.j.#.....................6.6bE.6.6.4.#.5................................................................................",
+"...................................d.d.d.d.7.d.d#3.#..................................................................................b.b.#0#0#0#6#3.#.#..............#K#0#K.a#KbG#K.a.a.a.a.a.a.a.abG.a.a.s.#...........................................................y.y.y.ybtaw.#...............7.7.7.7.7bd.#.#.....................AbA.AbA.AbAbAbAbeb2..................................#0#0b.#0#K#K#0b.b.#F.#..............#K#K.a#K#K#K.a.a.a.a.a#p.#..............................bobobo#d#d#Q.#aw..........................#jb6.y.y.y.t#j.c#j#j.c.cae.#aw....................bt#rbtan.#aw...............g.g.1.ga..#.#....................b6b6bK#Ub6#U#Ub6b6b6b6b6#Gb6b6bT.C.#....................#t.H.H#B.#.#........................................aRaRaRbP.taR.tbk.#.#aw..........................#X#X#X#X#X#Xbg#taw.#aw........................#j.......5.....c.c.c.c#S.c.cbE#S#S#m.#....................bYbYbYbY#8.#.#..................................................................................",
+".................................d.d.d.d.d.7.d#f.#.#..............................................................................b.#0#0bAb.b.bp#F.#aw.................a.a#K.a#0.a#K#K.a.a.a#i.a.a.abG#n.a.ablaw........................................................#z.y.y.ybW.#.#...........7.7br.7.7.7.7#F.#.5.....................A.A.AbA.A.AatatbAbe#3................................b.b.b.b.#0b.b.#K.b.#.#............#K.a#K#K.a.a#K#K.a#K#K.abl.#............................bo#dboaQbobf.#.#............................#j#c#c.y.H#j#j.c.c#j.c.j.#.#......................bt.1#w.#.#...............1.1.1aC.K.#.#.....................g.g..aw.#az.r#Ub6b6b6b6b6b6b6#G#b.#.#....................#t#t.S#F.#.5......................................aRaRaRbnaRbP#qaw.#.#...............................t#X#X#X#X#X#9.5.#aw........................#j....aw..........#S.c.c.c#S.cbHbHbE.c.#aw................bEbEbEbYbY#y.#bX..................................................................................",
+"...............................d.d.d.d.d.d.d.dax.#aw............................................................................#0bAb.b.b.b..b.#.#....................#K#0.a#K#K.a#K.a#K.a#K.a.a.a.a.abG.aboaJ.#.......................................................y.y#z#z.y#F.#...........d.7.7.7.7.7.7b#.#.#.........................A.A.A.AbAbAbA.Aat.baw............................b.b.#0#0b.b.#0#K#6.#.#............#K#Kb.#K.a#K#K.a.a.a.a.a.a.L.#..........................bGbobG#dbobo#s.#aw............................#t.y.ybt#j.c#j#j#j.cas.I.#......................bKbtbt#F.#............#r.1.1.1az.#.#aw.....................g..............bKb6b6b6b6b6#t#t#Z.#.#......................#G.Han.#aw........................................bP.tbPaRaRbk.#.#.5..............................bL#X#XbL#X#X#O.I.#aw........................#j....................#S.c#S.c#S.c#S.cbE.#.#.................6bYbYbEbY.#.#....................................................................................",
+"...............................d.d.d.d.d.d.7.daA.#..........................................................................bA.s#0bAbAb.be#p.#.#......................#K#K#K#K#K#K#K.a#K.a.a.a.a.a.a.a.a.abG.ablaw.....................................................y.y.y.ybW.#.#.........7.d.d.7br.7.7.7.i.#........................at.A..bA.A.A.AbAbA.AbA#F..........................b.bAb.b.#0b.#K#0b..b.#aw..........#K.....##o#K.a#K#K#K.a.a.a.a#I.#..........................bobobo#dbGbo#p.#.............................H.y.y#c#t#j.c.c.c#j.c#g.#aw......................btbt#E.#.#......bt.1.1#r.1a9.#.#.#......................#U..................b6b6b6b6b6b6aO.#.#......................#t#t.H.#.#........................................aRaR.t.t.t#g.#.#.................................t#X.t#X#X#Xa6.#.#.....................................................cbHbHbEbHbE#Sbb.#.#................bEbEbY.6a4.#.#....................................................................................",
+".............................d.d.d.d.d.d.d.d.d.i.#........................................................................bA#0#0bAb.b.aD#F.#aw.........................a#K#K.a#KbG#K.a.a.a.a.a.a.a#n.abo.a.abGbo#F...................................................y#c.y.y.y#C.#..........br.7.7.7.7.7.7.7.#.#.......................A.A....aT.AbAbA.A.AbAbA.i.#........................b.b.b.b.#0#Kb.b.#K#F.#..........#K....aw.....a#K.a.a.a.a.a#K.abS.#........................bobobobobo#dbob2.#..........................#Ubt#c.y.yaR#j#j#j#j.cbC.#.#......................bt#r#r.1btbt#r.1.1bKaCbM.5.#.#.5................................................b6b6b6b6aO.#.#.........................H#t#t.#.#........................................aRbPbPbPb3.#.#.................................t#X#X#X#X#X#g.#.#.........................................................c.c.c.c#SbHbq.#.5..............bY.6bYbEbY.Y.#......................................................................................",
+"...........................d.d.d.d.d.d.d.d.d.d#3.#....................................................................bAbAbAbAb.bA#0.b.#.#.5..........................#K#K#K#K#0bG#K.a#K#K#K#i.a.a.a.a#n.a#n.a#nbS.#.................................................y#c.y#z#E.#.#.........7.7.7br.7br.7.7.7.#.#.......................A.........A.AbAbAbAatbA.i.#......................bAb.b.b.b.b.#0b.b.aD.#.#........................#K#K#K#K#K.a.a.a.L.#.......................abobobobobo#dbobl.#.........................y.g.g#c.y.y.H#j#j#j#j.0.#.#........................btbtbt#7.va3.2.#.#.#.#.5........................................................b6b6b6aO.#.#...........................H#t#tbs.#......................................aRaRaRbnbP#N.#.5..............................#X#X.t#X#X#X#O.#.#..........................................................#S#SbEbH.c.cbN.#................bYbEbY.6.6#y.#......................................................................................",
+"..........................#f.d.d.d.d.d.7.d.d.7.i.#..................................................................bAbAbAbAbAbA#6bz.#.#..............................#0#K#K#K#K#K.a#K.a.a.a.a.a.a.a.abGbGbGbGbGbG#p.................................................y.y.y.yb2.#.5.......d.d.d.d.7.7.7.7.7br#F.#.....................A...........AbA.Aat.AbAat#3.#......................b.#0#0#0b.#0#0#Kb..b.#.5.........................a.a.a.a.a.a.a.abS.#......................bobGbobobobobobo.D.#......................#c#r#X#z.y.y.y#z#j#j.c.c.I.#aw......................btbKbtbta3.#.5..................................................................b6b6b6aO.#.#..........................#t#t.H.H.HaO......................................aRbPbPaR.tbR.#.................................t.t#XbLbLbL.I.#...............................................................c.c.cbE.9.#.#..............bEbE.6bEbYbY.Y.#......................................................................................",
+".........................d.d.d.d.d.d.d.d.7.d.dax.#..............................................................atbAbAbAbA.s#0aM#F.#aw.................................a#K.a#K#K#K#K.a.a.a.a#K.a.a.a.a.a.a.a.a#nbGaJ.#.............................................y.y.y.y#i.#.#.........7.7.7.7br.7.7.7.7.7aA.#.................A.7..........at.AbAbAbAbAbAbA.#.#....................#0bAb.b.#0b.#K#0b.#Kbz.#..........................#K#K#K.a.a#K#K.a.a.#......................bobobGboboaQbobobobl.5..................#d.y#X#j#c#c#c.y.yb6#j#jae.#.#........................btbt.1bt.O.#....................................................................b6b6b3.#.#........................#t..#t#t#t#t.H.Hbs..................................bPaRaRaRaRaRb3.#..............................#X#XbL.t#X#X#X#F.#........................#j....................................#S#S.c#S.4.#bX...............6bYbEbEbE.6bh.#......................................................................................",
+".......................d.d#f.d.d.d.d.d.7.d.d.d#f.#............................................................bAbAbAbAbA#0#0aA.#.#......................................#K#K.a#K#K#K#K#K.a.a.a.a.a.a.a#n.abobobG#nboaSaw..........................................#c.y#c.ybW.#aw.......d.7br.7.d.7.7.7.7.7br#f#F...............7.A............bA.A.A.A.A.AbA#v.#.#................b...b.b.bA#0b.b.#0b.#0b.bz.#...........................a.a.a#K#K.a.a.a.a#F.#.................abGbGbobobobG#d#d#d#d#d#Q..............#d#c#caR#L.H.y.y.y.y.y#c#U.V.#.#........................btbt#rbt#rbtaI.5.........................................g.g....................b6b6b6.C.#........................#t....#t#t#t.H#t#t.H#B................................aRaRaRaRbP.taR#V.5.........................t.t.t.t.t#X.t.tbL.x.#......................#L..........#j#j#j.......................cbHbE.j.#.#................bEbEbYbYbYbYbY.X.5...............................G....................................................",
+"......................#f.d.d.d.d.d.d.d.d.d.7.d.d#3#F......................................................bAbAbA.AbAbAbAbe#3.#.#.........................................a#K#K#KbG#K.a#K#K.a.a.a.a.a.a.a.a.a.abG.abobo#3.........................................y#c.y#c.y#C.#.........d.7.d.7.7br.7.7.7.7.7.7#v#Y.........A.A.A...5.........AbAbAbAbAbA.AbAaM.#aw............#0bA....b.b.b.#0#0b.b.#K#0b.#6blb.........................#K#K.a.a.a.a#K.a.aaS.#............bobo..#nbGbobo#dbobGbobobobo#da7bf....#d#c#c#c#c.jbg#L#t#c.y.y.y.y.y.y#i#C........................bt..btbtbtbt.1btaI.K.....................................g.g....................b6b6b6b6.#.#....................bT#t....bz#t#t#t.H.H#t.H.H#t#U..........................aR.HaRbPaRaR.tbP.tb3.x.....................t.t#X#X#X#X#X#X.t#XbL#g..................#j#j.....5....#j#j#j.c.kaf...................c.cbn.I.#..................bEbEbEbEbEbYbEbY.Xae.........................Gbj......................................................",
+".....................d.d.d#f.d.d.d.d.d.d.d.d.d.d#f.#...................................................AbA.AbAbAbAbAbA#Y.#.#aw............................................#K#K#K#K#K.a.a.a.a#i.a#n.abGbo.abobG#nbobGbGbf.#......................................#c.y.y.y#E.#.#.........d.d.7br.d.7br.7.7.7.7.7.7.7.7.7.7.A#6.7...#...........A.A.A.A.A.AbAbAaT.#..........bAbA....aw#s#0b.bAb.b.b.#0b.b.#Kb.b.#h..aw....................#K.a#K#K.a.a.a.a.a.abl.........abo.a....bo.abobGbobGaQbobo#d#dbo#c#d#c#c#d#d#d#nbs#L#j#j.1.y#c#c#c.y.y.y.y.y#7..................#zbt....btbtbK#rbt.1#rbt#7...............................1#U#U..aw................b6#U#Ub6b6ar.#................b6#t#t...5.#...H.H#t#t#t.H#t.H.H.H.H.HbT#t...............HaR.HaRaRaRaRaRaRaRaR.taR.k.H.............t.t.t...t.t.t.t#X#X#X#X#X#X#W............#X#j#j....aw....#j#j#j.c#j.c.Vaw...............c#S#S.4.#aw................bEbE.6.6bYbYbEbYbY.6bY#m................bYbY.G....aw....................................................",
+"....................#f.d.d.d.d.d.d.d.d.d.d.7.d.dbrb#aw..............................................atatbA.A.AbAbAbebz.#.#.................................................a#K.a#K#K.a#K.a.a.a.a.a.a.abG.a.abGbGbo#nbGbobSaw.....................................y.y.y.y#Q.#bX.......7.7.d.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.A.i.#.#...........A.A.AbAbAbAat.A.AataA#Q..bAbAbAbA..aw.#....#0b.bAbAb.b.#0#K#0b.b.bp.#.#......................#K.a.a#K#K.a#K.a.a.a.a.a.a.a#n.a#na3.#awbobGbobobo#dbobobobo#dbobo#d#dbo#c#cbfar.k#X#X#j.1.y.y.y.y#c#c.y.ybt.y.y.y#c.y.y.y.ybtbt#z...5#ybtbtbt#rbtbtbKbt.1bt#zbt.....................g.g.g.....#..............b6#Ub6b6b6b6b6#w.#............#t#t#t#G#y.#.#....#t.H#t.H#t.H#t.H#t.H.H.H.H.H.H.H.H.HaRaRaRbP..#HbPaRaRbPaR.taRaR.taR.t.t.taRaR.t.t.t.tbn.5#g#X#X#X.t#X#XbL#X#X#X#X#X#X#Xbg#j#L#L.t.5.#.........c.c#j#j#j#j#j.#...............c.c.j.#.#..................bYbEbEbEbEbYbYbYbY.6.6bYbYbYbYbYbYbY.G.G.G.Gajaw.#......................................................",
+"..................#f.d.d#f.d.d.d.d.d.d.7.d.d.7.d.d.d.i...........................................A.AbAbA.AbAbAbAaM#F.#aw....................................................#K#K#K.a#K.a#K.a.a.a.a.a.a.a.abG#n.a.abo.abobo#p..................................#c#c#c.y#c#F.#.........d.d.7.d.d.d.7br.7.7.7.7.7.7.A.7.A.A.i.#.#...........AbAatat.A.A.AbAbAbAbAbAbAbAbAbAbe.#.#aw....b.bAb.b.b.b.#0b.b.b.b.#I.#.#.........................a#K#K.a.a.a.a.a.a.a.a.a#n.abGbS#F.#aw..bGbobobobobG#d#dbo#dbo#d#c#d#c#c#dbf#Fbi#X#L#j#L.g#c#c.y#c.y.y.y.y.ybtbt.y#z#zbtbtbtbtbt.4.#aw..bt#rbtbt#r#r#r.1#r.1.1.1#r.1.1.1.1.1.1.1.1.g.g.g#b.#.#.................gb6b6b6b6b6b6b6aC#Bb6b6b6#t#tb6#G#Paw.#aw......#t#t.H#t.H#t.H.H.H#t.H.H.H.H.H.H.HbP.H.H.p.#.##HaRbPaRaRaRaRaRaRaR.taR.t.t.t.t.t.t.tbi.#.#.V.t.t.t#X.t#X.t#X#X#X#X#X#X#X#L#Xbg#g.#.#........#j#j#j#j.c.c.c.c.x.#...........cbH.c.#.#....................bEbYbY.6bY.6bEbEbYbYbYbYbYbYbYbYbYbYbjbj.P.5.#.#........................................................",
+"...................d#f.d.d#f.d.d.d.d.d.d.d.d.7.d.7.dbr.i.....................................A.AbA.A.AbAatbA#var.#.#..........................................................#K#K#K.a.a.a#K.a.a.a.a#n.a.abGbobGbGbo.aboboaJ#F.................................y.y#c.y#E.#.#.........7.d.7.7.7.d.7.7.7.7.7.7.7.7.A.7#f#F.#.#.............AbA.A.AatbA.AatbAbAbAbAbAbAbebz.#.#........b.#0b.#0bAb.#0#0b.#KaM.#.#.............................a#K.a#K.a#K.a.a.a.abGbG.aaS.#.#......#nbGbobGaQbGbo#daQ#dbobobobo#dbo#i#Fa6bg#X#X#X#jb6.y#c.y.y.y.y.y.y.y.y#zbtbt.y#zbtbtbtb2.#.#....btbtbtbKbtbtbtbK#r.1bK.1.1#r.1.1.1.1.1.g.1.1aCar.#.#................b6#U#Ub6#Ub6b6b6b6b6b6b6b6b6b6#tb6bK#F.#aw........#t#t#t#t.H#t#t.H.H#t.H.H.H.H.0.H.HbPaRan.#.#....aRaRaRaRaR.t.taRaR.taR.t.t.taR.t.tbR.#.#....#X#X.t#X.t#X.t#X#X#X#X#X#X#Xbg.kbF.#.#..........#j#j#j#j#j#j#j#j.k.I.........c.c#Saw.#........................bEbEbEbYbYbYbYbYbY.6bYbYbYbYbjbjbY.G.X.#.#aw..........................................................",
+"................#f.d.d#f.d.d.d.d.d.d.d.7.d.d.d.7.d.7.d.dax...............................A.A.A.A.A.Aat.AbA.M#F.#aw............................................................#KbG#K.a.a#K.a.a.a.a.a.abG#n.a.a.aboboboboboboa7aw..............................#c#c.y.y#Q.#.5.........d.7.7.7br.7.7br.7.7.7.7.7.7.7ax.#.#aw.............A.A.AbA.AbA.AbAbA.AbAatbAbAaM#F.#aw..........bAbA#0b.b.b.b.b.#0bp.#.#..............................#K.a#K.a.a.a.a.a.a.a.a.a#p.#.#........bGbobGbobobobobobobo#d#d#c#c#daE#F#y#j#L#j#j#j#L.H#c.y.y.y.y.y.y.y.y.y.y.y.ybtbt.y#n#F.#.#......bt.1btbt.1.1.1#r#r#r#rbt.1.1.1.1.1.1.g.1.ga9aw.#aw.................g#Ub6b6#Ub6b6b6b6b6b6bTb6bTb6#tb6az.#.#aw..........#t#t.H.H#t.H.H.H.H.H.H.H.H.HbPbP.0#P.C.#.#......aRaRbPaRbPaRbP.t.taR.taR.t.t.t.tbR.#.#.......t.t#X.t#X#X#X#X#X#X#X#L#j#X#O.I.#aw............#j#j.c#j#j.c.c.c.cas.V...c.c#S..aw.#..........................bEbY.6bE.6bEbEbYbYbYbYbYbYbY.G.G.P.h.#.#..............................................................",
+".................d#f.d.d#f.d.d.d.d.d.d.d.d.d.d.7.d.7.7.d.7.d.n.....................7.A.7.A.A.A.A.A.AbA#v.i.#.#..................................................................#K#K#K.a.a#K.a.a.a.a.abGbGbobo.abGbobobobobobobl.5...........................y.y.y.y.y#C.#.............d.d.7.7.d.7.7br.7.7.A.7aD.i.#.#.................A.A.AbA.A.A.A.AbA.AbA.A.N#3.#.#..............b.bAbAb.b.b.b.#Kbp.#.#................................#K.a.a#K.a.a.a.a.a.a.O#F.#.#............#nbGbobobobo#dbobobobo#dbo.3.#bNbL#X#X#X#X#X#j#j.y#c#c#c#c#z.y.y.ybt.y.y.y.ybt#iaw.#aw..........#r#rbtbtbtbtbKbt.1.1bK#r#r.1.g.g.1.1.1#5.#.#.5..................b6.g.gb6b6b6b6b6b6b6b6#t#Gb6b6#t#Z.#.#................#t#t.H#t#t#t.H.H.H.H.H.H.H.H.Haz.I.#aw........bPaRaRaRaRbnaRbP.taR.tbnaR.t.S.I.#.#........#X.t#X#X#X#X#XbL#X#X#X#X#Xbk.#.#..................#j#j#j#j#j#j#j.c#j.c#j.c.c.f.#.#............................bEbY.6bYbYbYbE.6bY.6bYbYbYbYbYaj.I.#aw................................................................",
+".................d.d#f.d.d#f.d.d.d.d.d.d.7.7.7.d.7.7br.7br.7br.7#vbr.........7.7.A.A.A.A.A.A#6.AbAbA.M#F.#aw.......................................................................a.a#K.a.a.a.a.a.a#n.a.a.a.abo#nbGbGbGbobo#d#d#C..........................#d#c#c#c#i.#.#.............d.7.d.d.7.7br.7.7.7.7b#.#.#aw...................A.A.A.A.AbAbAbA.AbAbe.u.#.#aw................bAb.b.b.#0#0#0bp.#.#...................................a#K#K.a.a.a.a.a.aaS.#.#aw..............bGbobobG#dbobo#d#d#d#dbfb2.#aw.t#X#X#X#j#j#j#L#L#Z.y.y.y.y.y.y.y.y.y.y#z#zbtaEaw.#aw..............btbt#r#r.1#r.1#r#r#r.1.1.1.1.1.1aC.C.#.#.......................gb6b6#Ub6#U#Ub6b6b6b6b6b6#t.raO.#.#....................#t#t.H.H.H#t.H#t.H.H.H.H#P#N.#.#..............aRaRbPbPaRbPbnaR.taR.t.t.f.#.#aw............#X.t.t.tbLbL#X#X#X#X#W.I.#.#....................#L.c.c#j.c.c.c#j.c#j.cbb.I.#.#................................bEbYbE.6.6bYbYbYbYbYbYbYaB.4.#.#....................................................................",
+"...............d#f.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.7.d.7.7.7br.7.7.7.7.7.7.7.A.7.A.A.A.7.A.AbA.A#v.i.#.#............................................................................#K.a.a.a.a#nbG.a.a#n.abG.abG#n.abobobobobobobf#F.........................y.y.y.yaE.#aw...............7.7.7.d.7.7br.7b##F.#.#.......................A.A.A.A.A.A.AbA#vaA.#.#aw......................#0bAbAb.b.bp.#.#.......................................a.a#K#K#K.aa7#C.#.#....................bGbobo#dboboaQbobo#s#F.#bN.tbg#X#X#X#X#X#X.k#D.#aE.y.y#c#c.y#z.ybtbt.y.y.v.#.#....................btbtbtbt#rbt.1.1bK#r.1.1.1.1#5.#.#aw..........................#Ub6#Ub6b6#Ub6b6b6b6b6b6#w#F.#aw........................#t#t#t.H#t.H.H.H.Hbwan.#.#aw..................aR.t.t.t.tbP.t.t.t#qbN.#.#..................#X#X.t#X#X#XbL#9#g.#.#.5........................#j#j#j#j#j.c.c.c#m.x.#.#.5.....................................6bYbYbYbY.6bY.6bY.P.Y.#.#aw......................................................................",
+"...............d.d#f.d#f.d#f.d.d.d.d.d.d.d.d.7.d.d.d.7.dbr.7.7.7.7.7.7.7.7.A#6.A.7.7.A.A.A.A.A#Y#F.#aw..............................................................................#K.a.a.a.abG.abGbo.abo.abo.abGbo#nbobobobobobobSaw.....................y#d#c#c#cb2.#....................bdaxaxb#bz.#.#.#.............................A.AbA.AbAbpbz.#.#aw..........................b.b.b.b.aK.#.#........................................#K#K.a.a.sbl.#.#.5........................bobGbobobGbf.3#F.#.#..bg#X#X#L#j#X#L#j.k.I.#aw.....y.y.y.y.y.y.y.ybW#F.#.#........................bt.1#rbK#rbK#r#r.1#r#r#5aw.#.#.................................gb6b6b6b6b6b6b6b6.rbs.#.#.5.............................Sbw#t.H.H.Haz#N.#.#aw.........................0aRaRaR.tbPbibN.#.#.5.......................t#X.t.t#qbk.#.#aw..............................#j#j.c.c#jbb#y.#.#aw...........................................cbEbEbYbYbY#8.h.#.#aw..........................................................................",
+"..............#f.d.d.d.d.d.d.d#f.d.d.d.d.d.d.7.7.7.7.7.7.d.7.d.7.7.7.7.A.7.7.7.A.A.7.A.A.A.n.I.#.#.....................................................................................a.a.a.a.a.a.abG.abo.abobobGbobG#dbGbo#d#d#d#d#Q.....................y.y.y.y.y#F.#....................................................................bp#3.#.#.#..................................#0bp#3.#.#..............................................bW#C.#.#aw................................bWb2#F.#.#aw....#X#j#L#X#X#L#X#X.k.5.#aw........bf#b.laI.lb2.#.#.#................................#.aQ#r.1.1bva..K.#.#.#........................................b3b6b6b6#t.r#Z.I.#aw......................................aL.#.#.#.#..................................bU#g#g.#.#.#.................................x.5.#.#.5.......................................x.4.#.#.#.5..................................................aH#y#y.#.#.#.5..............................................................................",
+"...............d#f.d#f.d#f.d.d.d.d.d.d.d.d.d.d.d.d.d.7.d.7.7.7.7.7.7.7.7.7.A.A.7#6.A.A#v.u.#.#.5.........................................................................................a#n.abG#nbG.abo.abobGbGbobGbobobo#dbobobobo#d#C..................#d.y.y.y#i.#.#....................................................................................................................aw..........................................................................................................#X#X#X#X#X#L#X#jbb.5.#aw..................................................................aw.#.#.#aw..................................................a1#NaO.#.#aw............................................................................................................................................................................................................................................................................................................................................",
+"..............#f.d.d.d.d.d#f.d.d.d.d.d.7.d.d.7.7.7.d.7.7.d.7.7br.7.7.7.7.7.7.A.A.A.7#Y#F.#aw..............................................................................................bobo#dbobo.abobGbobobo#dbobo#dbo#d#d#d#dbo#d#i#F.................y.y.y.y.l.#.5...............................................................................................................................................................................................................................t#Xbg#j#j#X#j#L#O.#.#.5........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............#f.d#f.d#f.d.d.d.d.d.d.d.d.7.7.d.d.d.7.7.d.7.7br.A.7.7.7.A.7.7.7.7.n#3.#.#.....................................................................................................y.y#c#daQbG.abobobobo#dbobo#dboboboaQ#c#c#d#E.5.............y.ybt.y.y.2.#..............................................................................................................................................................................................................................#X#X#X#j#j.c.c#j.V.#.#............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...............d.d.d.d.d#f.d.d.d.d.d.d.d.d.d.d.d.d.d.7brbr.7brbr.7.7.7.7.7.7.n#3.#.#.5.........................5aL........ahaL............................................................aLaf.1bt.ybobobobo#d#d#d#d#d#d#c#c#d.y#d#d.y.ybt#Zah...........1.1.g.1bt.4#F..........................................................................ah.m..........aLa8af...............................................................................................................................t#X#j#LaHbX.P.c.Wawaw......................................................................................................................................................................aL.ma8a8a8...............................................m.ZbDbDbDbVa8..................................................................................................................................................................................................................................................",
+"...............d#f.d#f.d.d.d.d.d.d.d.d.d.d.d.7.7.7.7br.7.7.7.7.A.7.7.7.A#vaA.#.#.5..............................a8aa......a8#Rbx....ahaLaL.maLaLaL..ahahaL.m.m.m.maL....................a8aqaqaub6#r.y#dbo#bbsaQ.ybt.ybyaI.y.y#c.y#i#Zan#Z#i#g....bXahaZbM.YbM.x.p.5.5ah..........bX........bXaLaL.maLaLah......ahaLaL.maL......................bVbDao.........ZaqaW##......ahaLaL.maLaLah........ahahaL............ahahaL............ahah................ahah............bXahaLaLaLaLah.........t#X#X#X#jbba8b1bmahbXah..........bX....ahahaL.m.m.m.maL....ahahaLaLaLaLah......ahahaLaLaL............ahahaLaLahah........ahaL..............ahahaL........ahahaLaLaLaLah.....................m.B##a#abbcaq........ahah........ah.......................Zab.w.wababab##......ah..........ah............ahaL..............ahahaL..........ahaLaL..........ahahaLaLaLaLah......ahah........ah............................................................................................................................",
+"..............#f.d.d.d#f.d#f.d.d.d.d.d.d.d.d.d.d.d.7.d.dbr.7br.7.7.7#faA.#.#aw..................................aPaP....bD#ka#......af.o.obJ.oadad##..#kad.QaibJ.oadbx..................af#k.oaobx.gbt#d#d#..Z#AbTbtbK.W.R#Sbt.yaza8bib0.Jbm#u.4....bJaYbVb5b4#J#JbcahaLbx........aqbx......a8.o.obJ.o.oadbx....af.o.obJ.obD....................afao.Qaa.....Zaq#Ta5bZ......af.o.obJ.o.oadbx..aLaLa5ad#Taq......ahaLa5ad#Taq..........aLaib7..........bX.m#Tadao.Z........a8#k.o.o.o.oaWa#..#X#X#XbL#X#X#j.RaZa#.Zaf...mbV........aqbx....a5ad.QaibJ.oad##..af#k.o.o.o.oaWa#....a8#k.o.o.o.B#1......ah#Tbxbx##bxaabx.....m#lbD##........ah.m#TadaWaf......a8#k.o.o.o.oaWa#................aL.ea#........aPbc.......Z.Z#k......aLbx....................aq##..................bXaa.......m.mad.........m#lbD##........ah.m#TadaWaf......ah...o.oai.Q......a8#k.o.o.o.oaWa#....af.Z#k......aLbx..........................................................................................................................",
+"..............#f.d#f.d.d.d.d.d.d.d.d.d.d.7.d.7.d.7.d.7.7.7br.7.7bd#p.#.#aw........................................aPaW#lala#........a8##...................Qb7bx........................bD###R.B#R..bt.y#daz.zaqbIb6.g.x.Jbgbt.FafbnavbY#j.caq#4af.....6aqab#a.6as.Qaf.Zbx........#l##......a8bx.................mbx......#lau...................Zal.oaW....#lab#TaW##......a8bx..............aL#R##....aabx.....maa##....aaa#........af#RbD#R......aL..a###.....8a#.......m##..........bx#X#L#X#X.t.t#j#jbmbVbx......af#T#l......aq##.........Qb7bx.........m##.................m##......aobc.......m.o.................m#R.Bad.......maqa#bZ....aaa#.....m##.............................Za#............aq##....a8abbV.......Za#....................#la2ai.QaP.............Qao......afao.8.........m#R.Bad.......maqa#bZ....aaa#.....Qbx......#R##.....m##.................mab.Z.......Za#..........................................................................................................................",
+"................#f.d.d#f.d.d.d.d.d.d.d.d.d.d.7.d.7.7.7.d.7.7bd#3.#.#.5..............................................aP.e##..........afaoaqbV.Z.............Z#1bZ......................afaWbZ..bc.e....bt.yaz.zaBaPbQ#G.fbQ#j.1#ebU#x.Hb6#U#UbU#T.9af..#taqabbj#t.Wah..bD#laP#laqaq.Q##......afaoaqbVbV..........a8aobVbDbDaqbx...................Zb7#xbcaa#l.Q##bcaW##.......ZaoaqbVbV...........mbD.ZbV..........a8bD.Z.Z..........a8aWbxaP#k......a8bx...................mbcbV.Z.Z....#jbg#XbL#X#X.t.kbFafbDbx......afbZaob7....aP##.........Z#1bZ........a8bcbVbVaf...........m.B.ZbDbDbVau##....a8.QaPafa8..........afa#...Q......a8##................a8bcbVbV.Z......................bVa#............aqaG....af##...Q....aqa#....................#la2a5aWaobx...........eai.o...Z..b7bJ........afa#...Q......a8##................afaq.ZbV..........a8bcbVbVaf...........m##...Q....aqa#..........................................................................................................................",
+"..................#f.d.d#f.d.d.d.d.d.d.d.7.d.d.d.d.d.d#fb##F.#.#.5..................................................#l.wbZ...........Z.8auau#kbx..........afao##......................bV.Q.B#Abc.Baa....#c#Eaj#jbT.Q#8#u#J#S.ga6buacb6#U.g.gbUbI#2a0a.bTaq.wbj#tanah..aq########abaW##.......Z.8auau#kbx........a8auauaWb7##bx.......1.1.1......afb7ak.Bb7ai.w##aPalbZ.......Z.8auau#kbx...........waua5.Q.B.........wau#k.Q.B......afau#T..aq#R....a8bx....a8af.Z........a8albJauaY.wb8.c#L#X#XbL#Xa6#F.5.ZbDbx......a8##..aoao...Q##........afao##........a8albJbJbJab.........mbJbJbJaPaGbx.......m.o####aba#.......maoau..aq.o.....Z#R................a8albJbJbJab....................bVaG..........bVaPbx....af##..aW.Q..aPbx....................#l##bZbZ####..........al..aq..bV##aPau.......maoau..aq.o.....Z#R..................#RauauaobD......a8albJbJbJab........a8##..aW.Q..aPbx..........................................................................................................................",
+".....................d.d#f.d.d.d.d.d.d.d.d.d.7.7#fax#3.#.#aw........................................................aq.w............bVbx..................afaobx....................a8#1bxbx####bJ#T......#.ajbg.gbbaq#Ab4#S#U.ra8amb6.g.gbKa8am#2#U.pb6bVabbYbT.4bX..bDbx.........Q##......bVbx................a8bx....aPau....b6#U.g.g.g.g#UbT.haobZ...Q.o##..aqb7##......bVbx........................auao##............auao##..a8.BabaWaW.Ba5....afau......##.e.o......a8bJ##..#aapbY#j#LbLbL#9.4.#.#....bVa#.......m##....#l.B.Q##........afaobx........a8bJbZ...............m##....bcal........a8.o...............mau.o#Tb7.Q....bVal........aL......a8bJbZ..........................#l.Q..........bV.obx....a8##....aoao.Qbx....................aq##..................al..aqbD..bZbVbJ......a8au.o#Tb7.Q....bVal........aL................#la#....afbJbZ...............mbx....ao#1.Qbx..........................................................................................................................",
+"........................bd.d.d.d.d.d.d.d.daxaA#3.#.#aw...............................................................Zab.............Z.eaqbDbVa8.m.........m.B##.....................m##..........aq#R.......j.t#r.g.zbD.8#S.g.gb3ai.Vbia1.W.Xa#.H.1.1#U.Z.8.6b6.5.5...Zbx.........Q##......bVaWaqbDbVa8.m.......m##......#l#a.Hb6b6.1.1.g.gb6#tbUaX.q...QaGbZ..bVao##......bVaWaqbDbVa8.m....aL.Zaf..bV.Z..##...m.Z.Z..bV.Z..##...m##........bV#R....aiaqaf..bDbVab......a8.Q#A.EbuaH.x.c#j#Xa6.#.#aw.......Za#.......mbx.......Qal##.........m.B##.........m.Q.QbV.Za8a8......aL##......aqab......aLad............ah..##......aPad.....Baqafa8.ma8.o....a8.Q.Q.Z.Za8a8.....................ebDbDafaf.ZaWa#......aLbx......aoaPbx....................aq#Taqaq.Za8.m........#1....aob1...Z.o....aL..##......aPad.....Baqafa8.ma8.o.....mbV.Z..bVbVbx....a8.Q.QbV.Za8a8......aL##......aoaPbx..........................................................................................................................",
+"............................aA.i.i.i.i.#.#.#.#.........................................................................8...............8aubJbJ.oadbx.........obx......................a#.............w......aX.Pbt#rbKbh.8#j.1.1.1#jaYbh.z#2ac#j#U#r#r.r#B.w#S.g.5aw....#R........alaa.........8aubJbJ.oadbx......aa......agab#G#U#U.g.1.1.g.g#P#HaY.q.t.kav.......o#R.........8aubJbJ.oad##....bxau.oa5#Ra#......a#au.oa5#Ra#......a#...........w......abbJad..bZa#.......f#Jaub4b4au#k.qbba3.#.#...........e#R........aa........au#R...........obx...........oau.obJ.oaWa#.......8........bJ........ab..............#R..........bJ......#RaubJaba#bx.......oaubJbJ.oaWa#....................#R.8.o.obxa#...........8........bJ.w.....................eabbJaubJ.o.oaa..............##....ab......#R..........bJ......#RaubJaba#bx.......w.oa2aubx##.......oau.obJ.oaWa#.......8........bJ.w..........................................................................................................................",
+"................................................................................................................................................................................................................#d.ybtb6#j#jbtbtbtbt.1bgaNbg.1.1bt#z.ybt#t#jaRa.aw#F.......................................................H#S.tb6.g.1.g.g.1.gb6aR.6.6.H.H.H#P..........................................................................................................#X.cb8#a#a#ab8.UaY.5#FbX......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................bo.y#z#zbt#c.y.y.ybt.ybtbt#zbtbt.y.y.ybt.1#r#e.#........................................................#Ub6.g.g.g.1.g.g.g.g#Ub6bT#t#G#t#G#t#t#b...................................................................................................t.t#X#X#Xbg#j#j#VbFaw.5..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................bo#d#c#d#d#d#c#c#c.y.y#c.y#c#c.y.y.y#z.y.yaI.#.......................................................1.1.1.g.1.1.g.1.g.1.1.g#Ub6b6b6b6b6b6b6b6an............................................................................................aR.t.t.t.t.tbL#X#W.Kaw.#..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................#dbo#dbo#d#d#d#c#c#c#c#c.y#d#d#c.y.y.y.y#5.#.......................................................1.g.1.g.g.1.g.1#U#U.g.g.g.g.g.g#U#U#U#Ub6b6.I.......................................................................................t.t.t.t.taR.t.tbT.4.#.#bX................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..........................................................................................................................................................................................................................bo#dbo#dbobobo#c#d#d#d#c#c.y#c#c#c.yb2.#.......................................................1.1.1.1.1.g.1.g.g.g.g.g.g.g#U#U.gb6b6b6b6b6a0.#.................................................................................HaRaRaRaRaRaR.t.Sbk.#.#.5....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"............................................................................................................................................................................................................................#dbo#d#d#d#d#d#c#c#d#d#d.y.y.y#d#cb2.#......................................................bt.1.1.1.1.g.1.1.1.1.g.g.g.gb6b6.g.g.gb6#U#Ub6aO............................................................................aRaRaRaRaRaR.t.t.Sbk.#.#aw........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............................................................................................................................................................................................................................bobobo#dbo#d#dbo#c#c#d#d#d#c.y.y#i.#.........................................................1.1.1.1.1.1.1.g.g.g.g.g.g.g.g.g.gb6.gb6b6#U#Uar.......................................................................HaRaRaRbPaRaRaRb3bR.#.#aw............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................bobo#dbo#d#c#d#d#c#c#c.y#d#c#d#c.3aw.......................................................1.1.1.1.g.g#r.1.1.1.g.g.1.g.g#U.g.g.g.gb6b6#Ub6aO...............................................................HaRaRbPbPaRaRbPaR#qbN.#.#.5................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................bobo#dbo#d#d#d#d#d#d#d#d.y.y.y.y#C.........................................................1.1.1#r.1.1.g.g.g.1.g.g.g.g.g#U#U#Ub6#U#Ub6b6#U#Z.......................................................H.H.HaR.H.H.HaRbP#PbU.I.#.#.5....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................bo#dbobo#c#d#d#c#c.y#d#d#d#c#cbO.#.........................................................1.1.1.g.1.1.1.g.1.g.1#U.g.gb6b6.gb6b6.g#Ub6b6b6aCa9..........................................#t#t.H.H.H.H.H.HaRaR.Hb3bR.#.#aw..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................................................................................................................................................#d#cboaQ#c#d#d#d#c#c.y.y.y#c#C.5.........................................................1.1.1.1.g.g.1.g.g#U.g.g.g.g.g.g.g#Ub6b6b6#Ub6b6b6bK.r............................#t#t#t.H.H.H.H.H.H.HbP.HaR#Pan.I.#.#.5..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..........................................................................................................................................................................................................................................#d#d#d#c#c#c#c#c#c#c#c.y.y#i.#............................................................aC.1.1.g.g.1.g.g.g.g.g#Ub6b6b6.g#U#Ub6#Ub6b6b6b6b6b6b6b6b6b6b6b6bT#G#t#t#t#t#t#t.H#t.H.H.H#t.H.H.H#PbB.C.#.#aw....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"............................................................................................................................................................................................................................................#dbo#d#d#d.y.y#d.y.y#c#c.y#Qaw..............................................................az.1.1.g.g.g.g.g.g.g.g.g.gb6b6b6b6b6b6b6b6b6bTb6bTb6#t#t#t#t#G#t#t#t#t#t#t.H#t.H#t.H.H.Haz.Waw.#.#aw..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..............................................................................................................................................................................................................................................#d#c#d#d#d#d#c#c.y.y.y.y#E.#..................................................................a0#5bv.g.g.g.g.g.gb6.g.g.g#Ub6b6b6b6b6b6b6b6b6bTb6#G#G#tb6#t#t#t#t.H#t#t#t.H#B#b#N.#.#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#d#c#c#d.y#d.y#c#c.y#c.y#C.5........................................................................bs#5#.#U#U.gb6b6b6b6b6#Ub6b6b6b6#t#G#t#G#tb6#t#t#t#G#t#t#t#Baz#NbN.#.#.#.5........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#d#d#c#d#c#c.y.y#c.y#c.y#E.#..................................................................................araOaOa.a.a0a0#Ub6b6b6b6b6b6b6#t#wa0az#ZaOaO.I.#.#.#.5..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#c#d#c.y#d#d#c.y.y.y#c.y#F.5...................................................................................................#.#.#.#.#.#.#.#.#.5..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#d#c#d#d.y.y.y#d#c.y.y.y.ybW.#........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#d#c#c#d#d#c.y.y.y.y.y.y#i.#........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#d#d#c#c.y#d#c#c.y#c.y.y.y#Caw......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#c#c#c#c#d.y.y.y#c.y#c.y.yby.#......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#d#d#d.y#c#c#d#c.y.y.y#z.y.y#i.#......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#c#d#d#d#d.y.y#c.y.y.y.y.y.y#Caw....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#d#c#c.y#c#c#c.y#c.y.y#c.y.y.y#Q.#....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................#c#d#d#d.y#d.y#c.y#c#c.y.y#z.yaI.#....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................................#c#d#d.y#d.y#d.y.y.y.y.y#z.y.y.#....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................................#d#c#c#d#c#c.y#c.y.y.y.y.y.y.y#C.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................................#d#d#c#c.y#d.y#c#c#c.y.y.y.y.yb2.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................................#c#c#d.y#c.y#c.y.y.y#c.y.y.y.yaE.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..................................................................................................................................................................................................................................................#d#d#c#d#d.y#d.y.y.y.y.y#z#z.y#E.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................#c#d#c#c#c.y#c.y.y#c.y.y.y.y.y.#.5................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................#c.y#d.y#d.y#c.y.y#c.y.y#z.y.y.#.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................#d#d.y#c.y#c.y#c.y.y.y.y.y.y.y#C.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................................................................................................................................................................................................................................#c#d#d#c.y#d.y.y.y#c.y.y#z#z.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................#c#c#d#c.y#c#c.y.y.y.y.y.y#zb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".......................................................................................................................................................................................................................................................y.y#d#c.y.y#c.y.y.y.y.y.y.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................#d#d.y.y#c#c.y#z#c.y.y.y.y.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................................................................................................................................................................#d#d.y.y.y#c.y.y.y.y.y#z.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"........................................................................................................................................................................................................................................................#c#c#d#c#c.y.y.y.y#z#z.y.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...........................................................................................................................................................................................................................................................y.y.y.y.y#c.y.y.y.y#z.yb2.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"..........................................................................................................................................................................................................................................................#d#d#c#c#c#z#c.y.y.y.y.y#F.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".............................................................................................................................................................................................................................................................y.y.y.y.y.y.y.y.y#z.y.#.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"............................................................................................................................................................................................................................................................#d#c#d.y.y.y.y#z.y.yaI.#.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...............................................................................................................................................................................................................................................................y#c.y#c.y.y.y.y.y#C.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+".................................................................................................................................................................................................................................................................y#c.y.y.y#z.y#..#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"...................................................................................................................................................................................................................................................................y.y.y.y.ybO#F.#.5..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................aIb2#C.#.#.5....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................"
+};
diff --git a/etc/icons/wl-message-extract-content-up.xpm b/etc/icons/wl-message-extract-content-up.xpm
new file mode 100644 (file)
index 0000000..4e093d7
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+static char * wl_message_extract_content_up_xpm[] = {
+"32 32 8 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #E79DCB2B9E79",
+"O     c #B6DAA6998617",
+"+     c #CF3CBAEA9658",
+"@     c #514471C6FFFF",
+"#     c #AEBAAAAAAEBA",
+"                                ",
+"                                ",
+"                                ",
+"        ............            ",
+"     ...XXXXXXXXXXXX...         ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    ....XXXXXXXXXXXX....        ",
+"    .ooo............OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo+++++++@++++OOO.        ",
+"    .ooo++++++@@++++OOO.        ",
+"    .ooo+++++@@@@@@@@@O@@ @@ @@ ",
+"    .ooo++++@@@@@@@@@@O@@ @@ @@ ",
+"    .ooo++++@@@@@@@@@@O@@ @@ @@ ",
+"    .ooo+++++@@@@@@@@@O@@ @@ @@ ",
+"    .ooo++++++@@++++OOO.        ",
+"    .ooo+++++++@++++OOO.##      ",
+"    .ooo++++++++++++OO+.####    ",
+"     ...++++++++++++...#####    ",
+"        ............#######     ",
+"         ##############         ",
+"                                ",
+"                                ",
+"              .             .   ",
+"   ....       .             .   ",
+"   .    .  . .... ...   .. ...  ",
+"   ...  .  .  . ..   . .    .   ",
+"   .     ..   . .  ... .    .   ",
+"   .    .  .  . .  . . .    .   ",
+"   .... .  .  . .  .. . ..  .   ",
+"                                "};
diff --git a/etc/icons/wl-message-next-content-up.xpm b/etc/icons/wl-message-next-content-up.xpm
new file mode 100644 (file)
index 0000000..b4bd524
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_next_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #59656595C71B",
+"O     c #965896589658",
+"+     c #596569A6C71B",
+"@     c #59656DB6CF3C",
+"#     c #596571C6CF3C",
+"$     c #596575D6CF3C",
+"%     c #618579E7D75C",
+"&     c #61857DF7D75C",
+"*     c #61857DF7DF7D",
+"=     c #61858207DF7D",
+"-     c #69A68A28E79D",
+";     c #61858617E79D",
+":     c #69A68E38EFBE",
+">     c #69A69248EFBE",
+",     c #69A69658F7DE",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"             .....              ",
+"             .Xoo.O             ",
+"             .Xoo.O             ",
+"             .X++.O             ",
+"             .X@@.O             ",
+"             .X##.O             ",
+"             .X$$.O             ",
+"             .X%%.O             ",
+"             .X&&.O             ",
+"             .X**.O             ",
+"        ......X==......         ",
+"         .X-;;;;;;;;;.OO        ",
+"          .X--------.OO         ",
+"           .X::::::.OO          ",
+"            .X>>>>.OO           ",
+"             .X,,.OO            ",
+"              .X.OO             ",
+"               .OO              ",
+"               OO               ",
+"                                ",
+"                       .        ",
+"       .   .           .        ",
+"       ..  .  .  .  . ...       ",
+"       . . . . . .  .  .        ",
+"       . . . ...  ..   .        ",
+"       .  .. .   .  .  .        ",
+"       .   .  .. .  .  .        ",
+"                                "};
diff --git a/etc/icons/wl-message-play-content-up.xpm b/etc/icons/wl-message-play-content-up.xpm
new file mode 100644 (file)
index 0000000..6e79248
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * wl_message_play_content_up_xpm[] = {
+"32 32 6 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #BEFBBEFBBEFB",
+"o     c #69A669A669A6",
+"O     c #9E799A699E79",
+"+     c #D75C5D755965",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"        ............            ",
+"       .XXXXXXXXXXXo.           ",
+"    .. .XOOOOOOOOOOo.           ",
+"    .. .XOOOOOO........         ",
+"    .X..XOOOOOO.XXOOOO.         ",
+"    .O..XOOOOOO.oooooo.         ",
+"    .o..XOOOOOO........         ",
+"    .o..XOOOOOOOOOOo.           ",
+"    .o..XOOOOOOOOOOo.           ",
+"    .. .XOOOOOOOOOOo.           ",
+"    .. .XOOOOOOOOOOo.           ",
+"       .oooooooooooo.           ",
+"        ............   +        ",
+"                       ++       ",
+"        ++ ++ ++ +++++++++      ",
+"        ++ ++ ++ ++++++++++     ",
+"        ++ ++ ++ ++++++++++     ",
+"        ++ ++ ++ +++++++++      ",
+"                       ++       ",
+"                       +        ",
+"              .                 ",
+"         ...  .                 ",
+"         .  . . ..  .  .        ",
+"         .  . .   . .  .        ",
+"         ...  . ... .  .        ",
+"         .    . . .  ..         ",
+"         .    . .. . .          ",
+"                    .           "};
diff --git a/etc/icons/wl-message-prev-content-up.xpm b/etc/icons/wl-message-prev-content-up.xpm
new file mode 100644 (file)
index 0000000..0d1895c
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_previous_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #69A69658F7DE",
+"O     c #69A69248EFBE",
+"+     c #69A68E38EFBE",
+"@     c #69A68A28E79D",
+"#     c #61858617E79D",
+"$     c #61858207DF7D",
+"%     c #965896589658",
+"&     c #61857DF7DF7D",
+"*     c #61857DF7D75C",
+"=     c #618579E7D75C",
+"-     c #596575D6CF3C",
+";     c #596571C6CF3C",
+":     c #59656DB6CF3C",
+">     c #596569A6C71B",
+",     c #59656595C71B",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               .                ",
+"              .X.               ",
+"             .Xoo.              ",
+"            .XOOOO.             ",
+"           .X++++++.            ",
+"          .X@@@@@@@@.           ",
+"         .X@#########.          ",
+"        ......X$$......         ",
+"         %%%%.X&&.%%%%%         ",
+"             .X**.%             ",
+"             .X==.%             ",
+"             .X--.%             ",
+"             .X;;.%             ",
+"             .X::.%             ",
+"             .X>>.%             ",
+"             .X,,.%             ",
+"             .X,,.%             ",
+"             .....%             ",
+"              %%%%%             ",
+"                                ",
+"                                ",
+"         ...                    ",
+"         .  . . . .  .  .       ",
+"         .  . .. . . .  .       ",
+"         ...  .  ... .  .       ",
+"         .    .  .   . .        ",
+"         .    .   ..  .         ",
+"                                "};
diff --git a/etc/icons/wl-message-quit-up.xpm b/etc/icons/wl-message-quit-up.xpm
new file mode 100644 (file)
index 0000000..7eb9182
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_folder_quit_up_xpm[] = {
+"32 32 7 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #CF3CBAEA9658",
+"O     c #AEBAB2CAAEBA",
+"+     c #B6DA965869A6",
+"@     c #69A68E38EFBE",
+"                                ",
+"                                ",
+"                                ",
+"            ...........         ",
+"            .XXooooooo.OO       ",
+"            .X.......o.OO       ",
+"            .o.++++X.o.OO       ",
+"            .o.+oooX.o.OO       ",
+"       @    .o.+oooX.o.OO       ",
+"       @@   .o.+oooX.o.OO       ",
+" @@@@@@@@@  .o.XXXXX.o.OO       ",
+" @@@@@@@@@@ .o.......o.OO       ",
+" @@@@@@@@@@@.XXooooooo.OO       ",
+" @@@@@@@@@@O.XXooooooo.OO       ",
+" @@@@@@@@@OO.o.......o.OO       ",
+" OOOOOO@@OO .o.++++X.o.OO       ",
+" OOOOOO@OO  .o.+oooX.o.OO       ",
+"       OO   .o.+oooX.o.OO       ",
+"       O    .o.+oooX.o.OO       ",
+"       O    .o.XXXXX.o.OO       ",
+"            .o.......o.OO       ",
+"            .ooooooooo.OO       ",
+"            ...........OO       ",
+"             OOOOOOOOOOOO       ",
+"                 .  .           ",
+"       ....         .           ",
+"       .    .  . . ...          ",
+"       ...  .  . .  .           ",
+"       .     ..  .  .           ",
+"       .    .  . .  .           ",
+"       .... .  . .  .           ",
+"                                "};
diff --git a/etc/icons/wl-message-read-up.xpm b/etc/icons/wl-message-read-up.xpm
new file mode 100644 (file)
index 0000000..1277854
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_jump_to_current_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #8617BEFBF7DE",
+"O     c #8617BAEAF7DE",
+"+     c #8617B6DAF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #79E7AEBAEFBE",
+"$     c #79E7AEBAF7DE",
+"%     c #79E7B2CAF7DE",
+"&     c #79E7A699EFBE",
+"*     c #79E7AAAAEFBE",
+"=     c #71C6A289EFBE",
+"-     c #71C69E79EFBE",
+";     c #71C69A69E79D",
+":     c #69A69658E79D",
+">     c #69A69248E79D",
+",     c #69A68A28E79D",
+"<     c #965896589658",
+"1     c #AEBAAEBAAEBA",
+"                                ",
+"                                ",
+"                  ....          ",
+"                ..XXXX..        ",
+"               .XoO+++Oo.       ",
+"              .Xo+@@#$%+o.      ",
+"             .Xo+$@@&&*$+o.     ",
+"             .XO%*=-;-=*%O.     ",
+"             .X+$&-:>:-&$+.     ",
+"             .X+#&;>,>;&#+.     ",
+"             ..X$&-:>:-&$..     ",
+"             .<.%*=-;-=*.<.     ",
+"              .1..*&&&..1.<     ",
+"               .@@....11.<<     ",
+"                ..@@@1..<<      ",
+"                <.....<<<       ",
+"               <..<<<<<<        ",
+"               <..<<<<          ",
+"              <..<<             ",
+"              <..<              ",
+"             <..<<              ",
+"             @@.<               ",
+"             <<<<               ",
+"             <<<<               ",
+"              <        .        ",
+"       ...             .        ",
+"       .  .  .  ..   ...        ",
+"       .  . . .   . .  .        ",
+"       ...  ... ... .  .        ",
+"       .  . .   . . .  .        ",
+"       .  .  .. .. . ...        ",
+"                                "};
diff --git a/etc/icons/wl-summary-delete-up.xpm b/etc/icons/wl-summary-delete-up.xpm
new file mode 100644 (file)
index 0000000..59f7a90
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+static char * wl_summary_delete_up_xpm[] = {
+"32 32 8 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #E79DCB2B9E79",
+"o     c #69A68E38EFBE",
+"O     c #CF3CBAEA9658",
+"+     c #FFFFFFFFFFFF",
+"@     c #B6DAA6998617",
+"#     c #965896589658",
+"                                ",
+"            ....                ",
+"           .XXXX..              ",
+"     o     .XOOOXX..            ",
+"     oo   ..XOOOOOOO..          ",
+" ooooooo .++.XOOOOOOOO.         ",
+" oooooooo .. ..@@@OOOO@.        ",
+" ooooooooo.+.++...@@@@@.        ",
+" oooooooo  .++..++......        ",
+" ooooooo   ...++.+.+#...        ",
+"     oo    .XO.......@@.        ",
+"     o     .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.        ",
+"           .XOXOOO@O@@@.##      ",
+"            ..XOOO@O@..####     ",
+"              .......#####      ",
+"              #########         ",
+"                .      .        ",
+"      ....      .      .        ",
+"      .   .  .  .  .  ... .     ",
+"      .   . . . . . .  . . .    ",
+"      .   . ... . ...  . ...    ",
+"      .   . .   . .    . .      ",
+"      ....   .. .  ..  .  ..    ",
+"                                "};
diff --git a/etc/icons/wl-summary-exit-up.xpm b/etc/icons/wl-summary-exit-up.xpm
new file mode 100644 (file)
index 0000000..7eb9182
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_folder_quit_up_xpm[] = {
+"32 32 7 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #CF3CBAEA9658",
+"O     c #AEBAB2CAAEBA",
+"+     c #B6DA965869A6",
+"@     c #69A68E38EFBE",
+"                                ",
+"                                ",
+"                                ",
+"            ...........         ",
+"            .XXooooooo.OO       ",
+"            .X.......o.OO       ",
+"            .o.++++X.o.OO       ",
+"            .o.+oooX.o.OO       ",
+"       @    .o.+oooX.o.OO       ",
+"       @@   .o.+oooX.o.OO       ",
+" @@@@@@@@@  .o.XXXXX.o.OO       ",
+" @@@@@@@@@@ .o.......o.OO       ",
+" @@@@@@@@@@@.XXooooooo.OO       ",
+" @@@@@@@@@@O.XXooooooo.OO       ",
+" @@@@@@@@@OO.o.......o.OO       ",
+" OOOOOO@@OO .o.++++X.o.OO       ",
+" OOOOOO@OO  .o.+oooX.o.OO       ",
+"       OO   .o.+oooX.o.OO       ",
+"       O    .o.+oooX.o.OO       ",
+"       O    .o.XXXXX.o.OO       ",
+"            .o.......o.OO       ",
+"            .ooooooooo.OO       ",
+"            ...........OO       ",
+"             OOOOOOOOOOOO       ",
+"                 .  .           ",
+"       ....         .           ",
+"       .    .  . . ...          ",
+"       ...  .  . .  .           ",
+"       .     ..  .  .           ",
+"       .    .  . .  .           ",
+"       .... .  . .  .           ",
+"                                "};
diff --git a/etc/icons/wl-summary-forward-up.xpm b/etc/icons/wl-summary-forward-up.xpm
new file mode 100644 (file)
index 0000000..0a957d5
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * wl_summary_forward_up_xpm[] = {
+"32 32 6 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #59656595C71B",
+"O     c #9E799A699E79",
+"+     c #D75C38E34103",
+"                                ",
+"  ..................            ",
+"  .XXXXXXXXXXXXXXXX.            ",
+"  .XooX    XXXXXXXX.O           ",
+"  .XooXXXXXXXXXXXXX.O           ",
+"  .XXXX    XXXXXXXX.O           ",
+"  .XXXXXXXXXXXXXXXX.O +         ",
+"  .XXXXXXXXXXXXXXXX.O++         ",
+"  .XXXXXXXXXXXXXXXX.+++++       ",
+"  .XXXXXXXXXXXXXXXX.O++ +       ",
+"  .XXXXXXXXXXXXXXXX.O + +       ",
+"  ..................O   +       ",
+"   OOOOOOOOOOOOOOOOOO   +       ",
+"   OOOOOOOOOO.................. ",
+"             .XXXXXXXXXXXXXXXX. ",
+"             .XooX    XXXXXXXX.O",
+"             .XooXXXXXXXXXXXXX.O",
+"             .XXXX    XXXXXXXX.O",
+"             .XXXXXXXXXXXXXXXX.O",
+"             .XXXXXXXXXXXXXXXX.O",
+"             .XXXXXXXXXXXXXXXX.O",
+"             .XXXXXXXXXXXXXXXX.O",
+"             .XXXXXXXXXXXXXXXX.O",
+"             ..................O",
+"              OOOOOOOOOOOOOOOO.O",
+"  ....        OOOOOOOOOOOOOOOO.O",
+"  .    ..  . .. . . ..  . . ... ",
+"  ... .  . .. . . .   . .. .  . ",
+"  .   .  . .  . . . ... .  .  . ",
+"  .   .  . .   . .  . . .  .  . ",
+"  .    ..  .   . .  .. ..   ... ",
+"                                "};
diff --git a/etc/icons/wl-summary-jump-to-current-message-up.xpm b/etc/icons/wl-summary-jump-to-current-message-up.xpm
new file mode 100644 (file)
index 0000000..0c206ef
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_summary_jump_to_current_message_up_xpm[] = {
+"32 32 7 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #CF3CBAEA9658",
+"O     c #F7DEFFFFBEFB",
+"+     c #AEBAB2CAAEBA",
+"@     c #69A68E38EFBE",
+"                                ",
+"                                ",
+"            ............        ",
+"           .X.oOOOOOOOO.++      ",
+"          .X.oOOOOOOOOO.++      ",
+"         .XX.oOOOOOOOOO.++      ",
+"        .X...oOOOOOOOOO.++      ",
+"        ..ooooOO+O+++OO.++      ",
+"        .oOOOOOOOOOOOOO.++      ",
+"        .OOOOOOOOOOOOOO.++      ",
+"      @ .OO++OOOO++++OO.++      ",
+"      @@.OOOOOOOOOOOOOO.++      ",
+"  @@@@@@@OOOOOOOOOOOOOO.++      ",
+"  @@@@@@@@O+OO++OOO++OO.++      ",
+"  @@@@@@@@@OOOOOOOOOOOO.++      ",
+"  @@@@@@@@OOOOOOOOOOOOO.++      ",
+"  @@@@@@@OO++OO++O+++OO.++      ",
+"      @@.OOOOOOOOOOOOOO.++      ",
+"      @ .OOOOOOOOOOOOOO.++      ",
+"        .OOOOOOOOOOOOOO.++      ",
+"        .OOOOOOOOOOOOOO.++      ",
+"        .OOOOOOOOOOOOOO.++      ",
+"         ...............++      ",
+"          ++++++++++++++++      ",
+"          +++++++++.++++++      ",
+"        ....       .            ",
+"        .    ...  ... .  . .    ",
+"        ...  .  .  . . . ..     ",
+"        .    .  .  . ... .      ",
+"        .    .  .  . .   .      ",
+"        .... .  .  .  .. .      ",
+"                                "};
diff --git a/etc/icons/wl-summary-mark-as-important-up.xpm b/etc/icons/wl-summary-mark-as-important-up.xpm
new file mode 100644 (file)
index 0000000..d4210b9
--- /dev/null
@@ -0,0 +1,43 @@
+/* XPM */
+static char * wl_summary_mark_as_important_up_xpm[] = {
+"32 32 8 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #E79DCB2B9E79",
+"o     c #CF3CBAEA9658",
+"O     c #B6DAA6998617",
+"+     c #FFFFFFFFFFFF",
+"@     c #AEBAAEBAAEBA",
+"#     c #69A68E38EFBE",
+"                                ",
+"        ..................      ",
+"       ..XoooooooooooooooO.     ",
+"       ..XoooooooooooooooO.     ",
+"       ..Xoooooooooooooooo.     ",
+"       .+.ooooooooooooooooO.    ",
+"       .+.XoooooooooooooooO.    ",
+"       .+.XoooooooooooooooO.    ",
+"       .+.XooooooooooooooooO.   ",
+"        .+.XoooooooooooooooO.   ",
+"        .+.OOOOOOOOOOOOOOOOO.   ",
+"        .+.................O.   ",
+"        .+.@@@@@@@@@@@@@@@@..   ",
+"         .+@+++++++++++++++@.   ",
+"        .++@++++++++++++++++.   ",
+"       .+++...@+++++++++++++.   ",
+" #    .+++++.@++++++++++++++.   ",
+" ##  .+++++.@@++++++++++++++.   ",
+"  # .+++++.@@@+++++++++++++.    ",
+"  ## .#++..................     ",
+"   ####+.                       ",
+"       .                        ",
+"                                ",
+"                                ",
+"                      .         ",
+"         .   .        .         ",
+"         .. .. ..  . .. .       ",
+"         . . .   . .. ..        ",
+"         . . . ... .  ..        ",
+"         . . . . . .  . .       ",
+"         . . . .. ..  . .       ",
+"                                "};
diff --git a/etc/icons/wl-summary-next-page-up.xpm b/etc/icons/wl-summary-next-page-up.xpm
new file mode 100644 (file)
index 0000000..b4bd524
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_next_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #59656595C71B",
+"O     c #965896589658",
+"+     c #596569A6C71B",
+"@     c #59656DB6CF3C",
+"#     c #596571C6CF3C",
+"$     c #596575D6CF3C",
+"%     c #618579E7D75C",
+"&     c #61857DF7D75C",
+"*     c #61857DF7DF7D",
+"=     c #61858207DF7D",
+"-     c #69A68A28E79D",
+";     c #61858617E79D",
+":     c #69A68E38EFBE",
+">     c #69A69248EFBE",
+",     c #69A69658F7DE",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"             .....              ",
+"             .Xoo.O             ",
+"             .Xoo.O             ",
+"             .X++.O             ",
+"             .X@@.O             ",
+"             .X##.O             ",
+"             .X$$.O             ",
+"             .X%%.O             ",
+"             .X&&.O             ",
+"             .X**.O             ",
+"        ......X==......         ",
+"         .X-;;;;;;;;;.OO        ",
+"          .X--------.OO         ",
+"           .X::::::.OO          ",
+"            .X>>>>.OO           ",
+"             .X,,.OO            ",
+"              .X.OO             ",
+"               .OO              ",
+"               OO               ",
+"                                ",
+"                       .        ",
+"       .   .           .        ",
+"       ..  .  .  .  . ...       ",
+"       . . . . . .  .  .        ",
+"       . . . ...  ..   .        ",
+"       .  .. .   .  .  .        ",
+"       .   .  .. .  .  .        ",
+"                                "};
diff --git a/etc/icons/wl-summary-next-up.xpm b/etc/icons/wl-summary-next-up.xpm
new file mode 100644 (file)
index 0000000..b4bd524
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_next_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #59656595C71B",
+"O     c #965896589658",
+"+     c #596569A6C71B",
+"@     c #59656DB6CF3C",
+"#     c #596571C6CF3C",
+"$     c #596575D6CF3C",
+"%     c #618579E7D75C",
+"&     c #61857DF7D75C",
+"*     c #61857DF7DF7D",
+"=     c #61858207DF7D",
+"-     c #69A68A28E79D",
+";     c #61858617E79D",
+":     c #69A68E38EFBE",
+">     c #69A69248EFBE",
+",     c #69A69658F7DE",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"             .....              ",
+"             .Xoo.O             ",
+"             .Xoo.O             ",
+"             .X++.O             ",
+"             .X@@.O             ",
+"             .X##.O             ",
+"             .X$$.O             ",
+"             .X%%.O             ",
+"             .X&&.O             ",
+"             .X**.O             ",
+"        ......X==......         ",
+"         .X-;;;;;;;;;.OO        ",
+"          .X--------.OO         ",
+"           .X::::::.OO          ",
+"            .X>>>>.OO           ",
+"             .X,,.OO            ",
+"              .X.OO             ",
+"               .OO              ",
+"               OO               ",
+"                                ",
+"                       .        ",
+"       .   .           .        ",
+"       ..  .  .  .  . ...       ",
+"       . . . . . .  .  .        ",
+"       . . . ...  ..   .        ",
+"       .  .. .   .  .  .        ",
+"       .   .  .. .  .  .        ",
+"                                "};
diff --git a/etc/icons/wl-summary-prev-page-up.xpm b/etc/icons/wl-summary-prev-page-up.xpm
new file mode 100644 (file)
index 0000000..0d1895c
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_previous_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #69A69658F7DE",
+"O     c #69A69248EFBE",
+"+     c #69A68E38EFBE",
+"@     c #69A68A28E79D",
+"#     c #61858617E79D",
+"$     c #61858207DF7D",
+"%     c #965896589658",
+"&     c #61857DF7DF7D",
+"*     c #61857DF7D75C",
+"=     c #618579E7D75C",
+"-     c #596575D6CF3C",
+";     c #596571C6CF3C",
+":     c #59656DB6CF3C",
+">     c #596569A6C71B",
+",     c #59656595C71B",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               .                ",
+"              .X.               ",
+"             .Xoo.              ",
+"            .XOOOO.             ",
+"           .X++++++.            ",
+"          .X@@@@@@@@.           ",
+"         .X@#########.          ",
+"        ......X$$......         ",
+"         %%%%.X&&.%%%%%         ",
+"             .X**.%             ",
+"             .X==.%             ",
+"             .X--.%             ",
+"             .X;;.%             ",
+"             .X::.%             ",
+"             .X>>.%             ",
+"             .X,,.%             ",
+"             .X,,.%             ",
+"             .....%             ",
+"              %%%%%             ",
+"                                ",
+"                                ",
+"         ...                    ",
+"         .  . . . .  .  .       ",
+"         .  . .. . . .  .       ",
+"         ...  .  ... .  .       ",
+"         .    .  .   . .        ",
+"         .    .   ..  .         ",
+"                                "};
diff --git a/etc/icons/wl-summary-prev-up.xpm b/etc/icons/wl-summary-prev-up.xpm
new file mode 100644 (file)
index 0000000..0d1895c
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * wl_folder_previous_unsync_up_xpm[] = {
+"32 32 18 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #69A69658F7DE",
+"O     c #69A69248EFBE",
+"+     c #69A68E38EFBE",
+"@     c #69A68A28E79D",
+"#     c #61858617E79D",
+"$     c #61858207DF7D",
+"%     c #965896589658",
+"&     c #61857DF7DF7D",
+"*     c #61857DF7D75C",
+"=     c #618579E7D75C",
+"-     c #596575D6CF3C",
+";     c #596571C6CF3C",
+":     c #59656DB6CF3C",
+">     c #596569A6C71B",
+",     c #59656595C71B",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               .                ",
+"              .X.               ",
+"             .Xoo.              ",
+"            .XOOOO.             ",
+"           .X++++++.            ",
+"          .X@@@@@@@@.           ",
+"         .X@#########.          ",
+"        ......X$$......         ",
+"         %%%%.X&&.%%%%%         ",
+"             .X**.%             ",
+"             .X==.%             ",
+"             .X--.%             ",
+"             .X;;.%             ",
+"             .X::.%             ",
+"             .X>>.%             ",
+"             .X,,.%             ",
+"             .X,,.%             ",
+"             .....%             ",
+"              %%%%%             ",
+"                                ",
+"                                ",
+"         ...                    ",
+"         .  . . . .  .  .       ",
+"         .  . .. . . .  .       ",
+"         ...  .  ... .  .       ",
+"         .    .  .   . .        ",
+"         .    .   ..  .         ",
+"                                "};
diff --git a/etc/icons/wl-summary-read-up.xpm b/etc/icons/wl-summary-read-up.xpm
new file mode 100644 (file)
index 0000000..1277854
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_jump_to_current_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #8E38C30BFFFF",
+"o     c #8617BEFBF7DE",
+"O     c #8617BAEAF7DE",
+"+     c #8617B6DAF7DE",
+"@     c #FFFFFFFFFFFF",
+"#     c #79E7AEBAEFBE",
+"$     c #79E7AEBAF7DE",
+"%     c #79E7B2CAF7DE",
+"&     c #79E7A699EFBE",
+"*     c #79E7AAAAEFBE",
+"=     c #71C6A289EFBE",
+"-     c #71C69E79EFBE",
+";     c #71C69A69E79D",
+":     c #69A69658E79D",
+">     c #69A69248E79D",
+",     c #69A68A28E79D",
+"<     c #965896589658",
+"1     c #AEBAAEBAAEBA",
+"                                ",
+"                                ",
+"                  ....          ",
+"                ..XXXX..        ",
+"               .XoO+++Oo.       ",
+"              .Xo+@@#$%+o.      ",
+"             .Xo+$@@&&*$+o.     ",
+"             .XO%*=-;-=*%O.     ",
+"             .X+$&-:>:-&$+.     ",
+"             .X+#&;>,>;&#+.     ",
+"             ..X$&-:>:-&$..     ",
+"             .<.%*=-;-=*.<.     ",
+"              .1..*&&&..1.<     ",
+"               .@@....11.<<     ",
+"                ..@@@1..<<      ",
+"                <.....<<<       ",
+"               <..<<<<<<        ",
+"               <..<<<<          ",
+"              <..<<             ",
+"              <..<              ",
+"             <..<<              ",
+"             @@.<               ",
+"             <<<<               ",
+"             <<<<               ",
+"              <        .        ",
+"       ...             .        ",
+"       .  .  .  ..   ...        ",
+"       .  . . .   . .  .        ",
+"       ...  ... ... .  .        ",
+"       .  . .   . . .  .        ",
+"       .  .  .. .. . ...        ",
+"                                "};
diff --git a/etc/icons/wl-summary-reply-up.xpm b/etc/icons/wl-summary-reply-up.xpm
new file mode 100644 (file)
index 0000000..59ee885
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_summary_reply_up_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #FFFFFFFFFFFF",
+"O     c #59656595C71B",
+"+     c #9E799A699E79",
+"@     c #79E7B2CAF7DE",
+"                                ",
+"             ...............   .",
+"              .XXXXXXXXXXXXX. ..",
+"               .XXXXXXXXXXXX..o.",
+"  ..............XXXXXXXXXXX..o. ",
+"  .oooooooooooo.XXXXXXXXXXX.oo. ",
+"  .oOOo    ooo.XXXXXXXXXX..ooo. ",
+"  .oOOoooooooo.XXXXXXXXX.oooo.  ",
+"  .oooo    ooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXX.ooooo.   ",
+"  .oooooooooooo.XXXXXX.oo.oo.+++",
+"  .oooooooooooo.XXXXXX.oo.o.X.++",
+"  .oooooooooooo.XXXXXX.oo.o.X.++",
+"  ..................XXXo.oo.XX.+",
+"   ++++++++++.OOOOO.XXX..o.XXX.+",
+"   ++++++++++.......XXXX..XXXX.+",
+"              .@@@.XXXXX.XXXX.++",
+"             .@o@@@.XXXX.XXX.+++",
+"            .@o@@@@@........++++",
+"            .OoOOOOO.  . +++++  ",
+"            .OoOOOOO.+++++++    ",
+"            .OOOOOOO.++         ",
+"             .......+++         ",
+"                     .          ",
+"       ...           .          ",
+"       .  .  .  ...  . .  .     ",
+"       .  . . . .  . . .  .     ",
+"       ...  ... .  . . .  .     ",
+"       .  . .   .  . .  ..      ",
+"       .  .  .. ...  .  .       ",
+"                .      .        "};
diff --git a/etc/icons/wl-summary-reply-with-citation-up.xpm b/etc/icons/wl-summary-reply-with-citation-up.xpm
new file mode 100644 (file)
index 0000000..771d731
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char * wl_summary_reply_with_citation_up_xpm[] = {
+"32 32 7 1",
+"      c #BEFBBEFBBEFB s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #EFBEFFFFC71B",
+"o     c #FFFFFFFFFFFF",
+"O     c #9E799A699E79",
+"+     c #59656595C71B",
+"@     c #79E7B2CAF7DE",
+"                                ",
+"             ...............   .",
+"              .XXXXXXXXXXXXX. ..",
+"               .XXXXXXXXXXXX..o.",
+"  ..............XOXOOOXXXXX..o. ",
+"  .oooooooooooo.XXXXXXXXXXX.oo. ",
+"  .o++o    ooo.XXOXOOXXXX..ooo. ",
+"  .o++oooooooo.XXXXXXXXX.oooo.  ",
+"  .oooo    ooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXXX.oooo.   ",
+"  .ooooooooooo.XXXXXXX.ooooo.   ",
+"  .oooooooooooo.XXXXXX.oo.oo.OOO",
+"  .oooooooooooo.XXXXXX.oo.o.X.OO",
+"  .oooooooooooo.XXXXXX.oo.o.X.OO",
+"  ..................XXXo.oo.XX.O",
+"   OOOOOOOOOO.+++++.XXX..o.XXX.O",
+"   OOOOOOOOOO.......XXXX..XXXX.O",
+"              .@@@.XXXXX.XXXX.OO",
+"             .@o@@@.XXXX.XXX.OOO",
+"            .@o@@@@@........OOOO",
+"            .+o+++++.  . OOOOO  ",
+"            .+o+++++.OOOOOOO    ",
+"            .+++++++.OO         ",
+"             .......OOO         ",
+"                  .  .          ",
+"             ...     .          ",
+"       .    .   . . ... .       ",
+"       .    .     .  . . .      ",
+"     ....   .     .  . ...      ",
+"       .    .   . .  . .        ",
+"       .     ...  .  .  ..      ",
+"                                "};
diff --git a/etc/icons/wl-summary-sync-force-update-up.xpm b/etc/icons/wl-summary-sync-force-update-up.xpm
new file mode 100644 (file)
index 0000000..ab8002e
--- /dev/null
@@ -0,0 +1,55 @@
+/* XPM */
+static char * wl_folder_sync_current_entity_up_xpm[] = {
+"32 32 20 1",
+"      c #CF3CCF3CCF3C s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFE38DB6DA",
+"o     c #E79DCB2B9E79",
+"O     c #B6DAA6998617",
+"+     c #CF3CBAEA9658",
+"@     c #514471C6FFFF",
+"#     c #59656DB6EFBE",
+"$     c #618569A6DF7D",
+"%     c #69A66595D75C",
+"&     c #79E76185C71B",
+"*     c #AEBAAAAAAEBA",
+"=     c #86175D75BEFB",
+"-     c #96585965AEBA",
+";     c #9E7955559E79",
+":     c #A69951448E38",
+">     c #C71BC30BC71B",
+",     c #AEBA4D348617",
+"<     c #BEFB492471C6",
+"1     c #C71B492469A6",
+"                                ",
+"                                ",
+"                                ",
+"        ............            ",
+"     ...XXXXXXXXXXXX...         ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    .XXXXXXXXXXXXXXXXXX.        ",
+"    ....XXXXXXXXXXXX....        ",
+"    .ooo............OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo++++++++++++OOO.        ",
+"    .ooo+++++@@+++++OOO.        ",
+"    .ooo++++####++++OOO.        ",
+"    .ooo+++$$$$$$+++OOO.        ",
+"    .ooo++%%%%%%%%++OOO.        ",
+"    .ooo++++&&&&+++++OO.        ",
+"    *...++++====++++...***      ",
+"    ****....----....*******     ",
+"     *******;;;;************    ",
+"        **::::::::*********     ",
+"         >>,,,,,,*********      ",
+"            <<<<                ",
+"             11                 ",
+"                                ",
+"        ...                     ",
+"       .    .  . ...   ..       ",
+"       ...  .  . .  . .         ",
+"          . .  . .  . .         ",
+"          .  ..  .  . .         ",
+"       ...   .   .  .  ..       ",
+"            .                   "};
diff --git a/etc/ja.Emacs b/etc/ja.Emacs
new file mode 100644 (file)
index 0000000..34a5bc1
--- /dev/null
@@ -0,0 +1,100 @@
+Emacs*XlwMenu.folder.labelString:         ¥Õ¥©¥ë¥À
+Emacs*XlwMenu.enterCurrentFolder.labelString:     ¥Õ¥©¥ë¥À¤Ø°ÜÆ°
+Emacs*XlwMenu.prevFolder.labelString:  Á°¤Î¥Õ¥©¥ë¥À
+Emacs*XlwMenu.nextFolder.labelString:   ¼¡¤Î¥Õ¥©¥ë¥À
+Emacs*XlwMenu.checkCurrentFolder.labelString:  ºÇ¿·¥á¥Ã¥»¡¼¥¸¤Î¥Á¥§¥Ã¥¯
+Emacs*XlwMenu.syncCurrentFolder.labelString:   ¥µ¥Þ¥ê¤ò¹¹¿·
+Emacs*XlwMenu.dropCurrentFolder.labelString:   Ì¤Æ±´ü¤ò¤Ê¤¯¤¹
+Emacs*XlwMenu.prefetchCurrentFolder.labelString:       ¥×¥ê¥Õ¥§¥Ã¥Á
+Emacs*XlwMenu.flushQueue.labelString:  ¥­¥å¡¼¤Ë¤¢¤ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®
+Emacs*XlwMenu.addFolder.labelString:   ¥Õ¥©¥ë¥À¤òÄɲÃ
+Emacs*XlwMenu.addGroup.labelString:    ¥°¥ë¡¼¥×¤òÄɲÃ
+Emacs*XlwMenu.setPetname.labelString:  ¤¢¤À̾¤ò¤Ä¤±¤ë
+Emacs*XlwMenu.exit.labelString:                ½ªÎ»
+Emacs*XlwMenu.togglePlugStatus.labelString:    ¥ª¥ó¥é¥¤¥ó/¥ª¥Õ¥é¥¤¥ó
+Emacs*XlwMenu.changePlugStatus.labelString:    ¥×¥é¥°¾õÂÖ´ÉÍý
+Emacs*XlwMenu.saveCurrentStatus.labelString:   ¸½ºß¤Î¾õÂÖ¤ò¥»¡¼¥Ö
+Emacs*XlwMenu.markAsReadAllCurrentFolder.labelString:   ¤¹¤Ù¤ÆÆɤó¤À¤³¤È¤Ë¤¹¤ë
+Emacs*XlwMenu.expireCurrentFolder.labelString:   Expire (¼«Æ°ºï½ü/¥¢¡¼¥«¥¤¥Ö)
+Emacs*XlwMenu.folderManager.labelString:   ¥Õ¥©¥ë¥ÀÊÔ½¸
+Emacs*XlwMenu.rename.labelString:   Ì¾Á°Êѹ¹
+Emacs*XlwMenu.openAllUnreadFolder.labelString:  Á´¤Æ¤Î̤ÆÉ¥Õ¥©¥ë¥À¤ò³«¤¯
+Emacs*XlwMenu.updateStatus.labelString:  ¾õÂÖ¤ò¹¹¿·
+Emacs*XlwMenu.emptyTrash.labelString:   ¥´¥ßÈ¢¤ò¶õ¤Ë¤¹¤ë
+Emacs*XlwMenu.emptyTrash.labelString:   ¥´¥ßÈ¢¤ò¶õ¤Ë¤¹¤ë
+Emacs*XlwMenu.unsubscribe.labelString:  ¹ØÆɤò¤ä¤á¤ë(¥¢¥¯¥»¥¹·¿)
+Emacs*XlwMenu.displayAll.labelString:   ¤¹¤Ù¤Æɽ¼¨(¥¢¥¯¥»¥¹·¿)
+
+Emacs*XlwMenu.summary.labelString:     ¥µ¥Þ¥ê
+Emacs*XlwMenu.read.labelString:        Æɤ߿ʤá¤ë
+Emacs*XlwMenu.prevPage.labelString:        Á°¤Î¥Ú¡¼¥¸
+Emacs*XlwMenu.nextPage.labelString:       ¼¡¤Î¥Ú¡¼¥¸
+Emacs*XlwMenu.prev.labelString:            Á°¤Î¥á¥Ã¥»¡¼¥¸
+Emacs*XlwMenu.next.labelString:           ¼¡¤Î¥á¥Ã¥»¡¼¥¸
+Emacs*XlwMenu.up.labelString:              Á°¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸
+Emacs*XlwMenu.down.labelString:           ¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸
+Emacs*XlwMenu.parentMessage.labelString:       ¿Æ¥á¥Ã¥»¡¼¥¸¤Ø°ÜÆ°
+Emacs*XlwMenu.setDeleteMark.labelString:       ºï½ü¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
+Emacs*XlwMenu.setRefileMark.labelString:       ¥ê¥Õ¥¡¥¤¥ë¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
+Emacs*XlwMenu.setTargetMark.labelString:       ¤Þ¤È¤á½èÍýÍÑ¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
+Emacs*XlwMenu.unmark.labelString:              °ì»þ¥Þ¡¼¥¯¤ò¾Ã¤¹
+Emacs*XlwMenu.unmarkAll.labelString:           ¤¹¤Ù¤Æ¤Î°ì»þ¥Þ¡¼¥¯¤ò¾Ã¤¹
+Emacs*XlwMenu.enterTheMessage.labelString:     ¥á¥Ã¥»¡¼¥¸¤Ø°ÜÆ°
+Emacs*XlwMenu.markAsImportant.labelString:     ¤·¤ª¤ê(½ÅÍ×¥Þ¡¼¥¯¤ò¤Ä¤±¤ë)
+Emacs*XlwMenu.markAsUnread.labelString:        Æɤޤʤ«¤Ã¤¿¤³¤È¤Ë¤¹¤ë
+Emacs*XlwMenu.cancelPostedNews.labelString:    ¥Ë¥å¡¼¥¹µ­»ö¤ò¥­¥ã¥ó¥»¥ë¤¹¤ë
+Emacs*XlwMenu.supersedesMessage.labelString:   ¥Ë¥å¡¼¥¹µ­»ö¤ò¾å½ñ¤­¤¹¤ë
+Emacs*XlwMenu.resendBouncedMail.labelString:   ¥¨¥é¡¼¥á¡¼¥ë¤òºÆÁ÷¤¹¤ë
+Emacs*XlwMenu.resendMessage.labelString:       ºÆÁ÷¤¹¤ë
+Emacs*XlwMenu.sync.labelString:                Æ±´ü¤ò¤È¤ë
+Emacs*XlwMenu.execute.labelString:             ¥ê¥Õ¥¡¥¤¥ë/¥³¥Ô¡¼/ºï½ü¥Þ¡¼¥¯¤ò¼Â¹Ô
+Emacs*XlwMenu.goToOtherFolder.labelString:     Â¾¤Î¥Õ¥©¥ë¥À¤Ø°ÜÆ°
+Emacs*XlwMenu.pick.labelString:                ¸¡º÷¤·¤Æ¥Þ¡¼¥¯
+Emacs*XlwMenu.markAsReadAll.labelString:       Á´ÉôÆɤó¤À¤³¤È¤Ë¤¹¤ë
+Emacs*XlwMenu.stick.labelString:                      ¥¹¥Æ¥£¥Ã¥­¡¼¥µ¥Þ¥ê¤Ë¤¹¤ë
+Emacs*XlwMenu.messageOperation.labelString:    ¥á¥Ã¥»¡¼¥¸¤ÎÁàºî
+Emacs*XlwMenu.threadOperation.labelString:     ¥¹¥ì¥Ã¥É¤ÎÁàºî
+Emacs*XlwMenu.regionOperation.labelString:     ¥ê¡¼¥¸¥ç¥ó¤ÎÁàºî
+Emacs*XlwMenu.markOperation.labelString:       ¤Þ¤È¤á½èÍýÍÑ¥Þ¡¼¥¯¤ÎÁàºî
+Emacs*XlwMenu.markAsRead.labelString:          Æɤó¤À¤³¤È¤Ë¤¹¤ë
+Emacs*XlwMenu.setCopyMark.labelString:         ¥³¥Ô¡¼¥Þ¡¼¥¯¤òÉÕ¤±¤ë
+Emacs*XlwMenu.toggleDisplayMessage.labelString:  ¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤ò¥È¥°¥ë
+Emacs*XlwMenu.displayFolder.labelString:       ¥Õ¥©¥ë¥À°ìÍ÷¤òɽ¼¨
+Emacs*XlwMenu.pipeMessage.labelString:         ¥Ñ¥¤¥×¤¹¤ë
+Emacs*XlwMenu.writingMessages.labelString:     ¥á¥Ã¥»¡¼¥¸¤ò½ñ¤¯
+Emacs*XlwMenu.writeAMessage.labelString:       ¥á¥Ã¥»¡¼¥¸¤ò½ñ¤¯
+Emacs*XlwMenu.reply.labelString:               ÊÖ»ö¤ò½ñ¤¯
+Emacs*XlwMenu.replyWithCitation.labelString:   °úÍѤ·¤ÆÊÖ»ö¤ò½ñ¤¯
+Emacs*XlwMenu.forward.labelString:             Å¾Á÷¤¹¤ë
+Emacs*XlwMenu.prefetch.labelString:            ¥×¥ê¥Õ¥§¥Ã¥Á
+Emacs*XlwMenu.printMessage.labelString:        °õºþ¤¹¤ë
+Emacs*XlwMenu.openOrClose.labelString:         ¥¹¥ì¥Ã¥É¤ò³«ÊÄ
+Emacs*XlwMenu.openAll.labelString:             ¥¹¥ì¥Ã¥É¤òÁ´Éô³«¤¯
+Emacs*XlwMenu.closeAll.labelString:            ¥¹¥ì¥Ã¥É¤òÁ´ÉôÊĤ¸¤ë
+Emacs*XlwMenu.exitCurrentFolder.labelString:   ¸½ºß¤Î¥µ¥Þ¥ê¤ò½ªÎ»
+Emacs*XlwMenu.toggleThreading.labelString:     ¥¹¥ì¥Ã¥Éɽ¼¨¤Î On/Off
+Emacs*XlwMenu.sort.labelString:               ¥½¡¼¥È
+Emacs*XlwMenu.byNumber.labelString:            ¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤Ç¥½¡¼¥È
+Emacs*XlwMenu.byDate.labelString:             ÆüÉÕ¤±¤Ç¥½¡¼¥È
+Emacs*XlwMenu.byFrom.labelString:              Á÷¿®¼Ô¤Ç¥½¡¼¥È
+Emacs*XlwMenu.bySubject.labelString:           ¥µ¥Ö¥¸¥§¥¯¥È¤Ç¥½¡¼¥È
+
+Emacs*XlwMenu.scoreOperation.labelString: ¥¹¥³¥¢Áàºî
+Emacs*XlwMenu.switchCurrentScoreFile.labelString: ¥¹¥³¥¢¥Õ¥¡¥¤¥ë¤òÊѹ¹
+Emacs*XlwMenu.editCurrentScoreFile.labelString: ¸½ºß¤Î¥¹¥³¥¢¥Õ¥¡¥¤¥ë¤òÊÔ½¸
+Emacs*XlwMenu.editScoreFile.labelString: ¥¹¥³¥¢¥Õ¥¡¥¤¥ë¤òÊÔ½¸
+Emacs*XlwMenu.setMarkBelow.labelString: ÆÀÅÀ¤¬Ä㤤¥á¥Ã¥»¡¼¥¸¤Ë¥Þ¡¼¥¯
+Emacs*XlwMenu.setExpungeBelow.labelString: ÆÀÅÀ¤¬Ä㤤¥á¥Ã¥»¡¼¥¸¤ò¾Ã¤¹
+Emacs*XlwMenu.rescoreBuffer.labelString: ¥¹¥³¥¢É¾²Á¤ò¤ä¤êľ¤¹¡£
+Emacs*XlwMenu.increaseScore.labelString: ÆÀÅÀ¤ò¾å¤²¤ë
+Emacs*XlwMenu.lowerScore.labelString: ÆÀÅÀ¤ò²¼¤²¤ë
+
+Emacs*XlwMenu.plugged.labelString:       ¥×¥é¥°´ÉÍý
+Emacs*XlwMenu.togglePlugged.labelString: ¥×¥é¥°¤Î¥ª¥ó/¥ª¥Õ
+Emacs*XlwMenu.togglePlugged.labelString: ¥×¥é¥°¤Î¥ª¥ó/¥ª¥Õ
+Emacs*XlwMenu.toggleAllPlugged.labelString: Á´¥×¥é¥°¤Î¥ª¥ó/¥ª¥Õ
+Emacs*XlwMenu.toggleAllPlugged.labelString: Á´¥×¥é¥°¤Î¥ª¥ó/¥ª¥Õ
+Emacs*XlwMenu.prevPort.labelString: ¾å¤Î¥Ý¡¼¥È¥Ø
+Emacs*XlwMenu.nextPort.labelString: ²¼¤Î¥Ý¡¼¥È¤Ø
+Emacs*XlwMenu.prevServer.labelString: ¾å¤Î¥µ¡¼¥Ð¥Ø
+Emacs*XlwMenu.nextServer.labelString: ²¼¤Î¥µ¡¼¥Ð¥Ø
diff --git a/samples/en/dot.addresses b/samples/en/dot.addresses
new file mode 100644 (file)
index 0000000..891a3d7
--- /dev/null
@@ -0,0 +1,15 @@
+#
+# "~/.addresses" sample file.
+#                    by Yuuichi Teranishi <teranisi@gohome.org>
+# Time-stamp: <99/09/10 15:45:37 teranisi>
+#
+# Lines begin with '#' are comment.
+# Empty lines are ignored.
+# Format of each line:
+# email-address  "petname" "realname"
+# petname is used for Summary displaying.
+# realname is used for To: field.
+#
+teranisi@gohome.org    "YT"    "Yuuichi Teranishi"
+foo@bar.com            "Mr. Foo"       "John Foo"
+bar@foo.com            "Mr. Bar"       "Michael Bar"
diff --git a/samples/en/dot.folders b/samples/en/dot.folders
new file mode 100644 (file)
index 0000000..bfa1164
--- /dev/null
@@ -0,0 +1,72 @@
+#
+#  "~/.folders" sample file.
+#                    by Yuuichi Teranishi <teranisi@gohome.org>
+# Time-stamp: <99/09/10 15:49:11 teranisi>
+#
+# Lines begin with '#' are comment.
+# Empty lines are ignored.
+# 
+
+%inbox
++trash
++draft
+%#mh/Backup@my.imap.server.com
+%#mh/spool/mm
+# group definition
+Emacsen{
+       %#mh/spool/xemacs-beta
+       %#mh/spool/mew-dist
+       %#mh/spool/tm-ja
+       %#mh/spool/mule-win32
+       -fj.news.reader.gnus@other.nntp.server.com
+# multi folder
+# following line defines multi folder of  -fj.editor.xemacs,-fj.editor.mule,
+# and -fj.editor.emacs.
+       *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs
+       -gnu.emacs.sources
+}
+UNIX{
+# You can define multi level group.
+ BSD {
+ %#mh/spool/freebsd-users-jp
+ -fj.os.bsd.freebsd
+ -japan.comp.freebsd
+ %#mh/spool/bsd-nomads
+ -fj.os.bsd.misc
+ }
+ Linux {
+ -fj.os.linux
+ -japan.comp.linux
+ }
+-fj.kanji
+-fj.lang.perl
+-fj.unix
+-fj.questions.unix
+-fj.sys.sun
+-fj.sys.j3100
+-comp.windows.x.i386unix
+-fj.comp.x11
+}
+Television{
+%#mh/spool/tvdrama
+-fj.rec.tv
+-japan.tv
+-fj.rec.tv.cm
+-japan.tv.cm
+-fj.rec.idol
+-fj.rec.music
+}
+My folders {
+INBOXes {
+%inbox@localhost
+#
+# access group
+# If there is '/' in the end of line,
+# all subfolders are added to group
+#
+%#mh/expire@localhost /
+}
+# following definition adds all MH subfolders to group.
++ /
+%#mh@my.imap.server.com
+}
diff --git a/samples/en/dot.wl b/samples/en/dot.wl
new file mode 100644 (file)
index 0000000..2d293aa
--- /dev/null
@@ -0,0 +1,372 @@
+;;;                                                    -*- emacs-lisp -*-
+;;; ~/.wl (setting file for Wanderlust)
+;;;                                            Last-Modified: 1999-11-07
+;;;
+
+;; Following must be included in ~/.emacs
+;; for .emacs begin
+(require 'mime-setup)
+(autoload 'wl "wl" "Wanderlust" t)
+(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)
+;; for .emacs end
+
+;;; [[ Private Setting ]]
+
+;; Header From 
+;(setq wl-from "Your Name <e-mail-address>")
+;; Organization
+;(setq wl-organization "")
+
+;;; [[ Basic Setting ]]
+
+;; A directory for message database.
+(setq elmo-msgdb-dir "~/.elmo")
+
+;; Home directory for MH (localdir) 
+(setq elmo-localdir-folder-path "~/Mail")
+;; Default IMAP4 server
+(setq elmo-default-imap4-server "localhost")
+;; Default POP server
+(setq elmo-default-pop3-server "localhost")
+;; Default NNTP server
+(setq elmo-default-nntp-server "localhost")
+;; NNTP server name for posting
+(setq wl-nntp-posting-server elmo-default-nntp-server)
+;; SMTP server
+(setq wl-smtp-posting-server "localhost")
+
+;; Icon directory (XEmacs)
+;; (No need if installed as XEmacs package.)
+;(setq wl-icon-dir "~/work/wl/etc")
+
+;; If (system-name) does not return FQDN,
+;; set following as a local domain name without hostname.
+;; ((system-name) "." wl-local-domain is used as domain part of Message-ID
+;; and an argument of HELO in SMTP.
+;(setq wl-local-domain "localdomain")
+;; Specific domain part for message-id.
+;(setq wl-message-id-domain "localhost.localdomain")
+
+;(setq wl-default-folder "+inbox")   ;; Default folder for 
+                                    ;; wl-summary-goto-folder.
+;(setq wl-default-spec "+")         ;; Default string for 
+                                    ;; folder name completion.
+
+;(setq wl-fcc "+outbox")            ;; Folder Carbon Copy
+
+(setq wl-interactive-exit t)        ;; Confirm at exit time.
+(setq wl-interactive-send t)        ;; Confirm at message sending time.
+
+(setq wl-auto-select-first t)       ;; display first message automatically.
+(setq wl-auto-select-next t)        ;; goto next folder when exit from 
+                                    ;; summary.
+;(setq wl-summary-next-no-unread 'skip-no-unread)  
+                                    ;; folder is skipped if there is no 
+                                     ;; unread.
+
+(setq wl-summary-move-order 'unread) ;; jump to unread message in 'N' or 'P'.
+(setq wl-thread-insert-opened t)     ;; Create opened thread.
+
+;(setq wl-stay-folder-window t)             ;; folder mode and summary mode is
+                                    ;; displayed at the same time.
+
+;; cache setting.
+;; (messages in localdir, localnews, maildir are not cached.)
+;(setq elmo-archive-use-cache nil)
+;(setq elmo-nntp-use-cache nil)
+;(setq elmo-imap4-use-cache t)
+;(setq elmo-pop3-use-cache t)
+
+;; Enable disconnected operation in IMAP folder.
+;(setq elmo-enable-disconnected-operation t)
+
+;; Store draft message in queue folder if message is sent in unplugged status.
+(setq wl-draft-enable-queuing t)
+;; when plug status is changed from unplugged to plugged, 
+;; queued message is flushed automatically.
+(setq wl-auto-flush-queue t)
+
+;; offline at startup.
+;(setq wl-plugged nil)
+;; change plug status by server or port at startup.
+;(add-hook 'wl-make-plugged-hook
+;        '(lambda ()
+;           (elmo-set-plugged plugged(t/nil) server port)
+;           (elmo-set-plugged plugged(t/nil) server)
+;           ))
+
+
+;; highlight setting (for light background)
+
+;; decide group folder color by number.
+;(setq wl-highlight-group-folder-by-numbers nil)
+
+(setq wl-highlight-message-header-alist
+      '(("Subject[ \t]*:" . wl-highlight-message-subject-header-contents)
+       ("From[ \t]*:" . wl-highlight-message-from-header-contents)
+       ("\\(.*To\\|Cc\\|Newsgroups\\)[ \t]*:" . wl-highlight-message-important-header-contents)
+       ("\\(User-Agent\\|X-Mailer\\|X-Newsreader\\)[ \t]*:" .
+        wl-highlight-message-unimportant-header-contents)
+       ))
+;; don't change color by citation level.
+;(setq wl-highlight-citation-face-list
+;      '(wl-highlight-message-cited-text-1))
+
+(defun my-wl-set-face (face spec)
+  (make-face face)
+  (cond ((fboundp 'face-spec-set)
+        (face-spec-set face spec))
+       (t
+        (wl-declare-face face spec))))
+
+;; header.
+(my-wl-set-face 'wl-highlight-message-subject-header-contents
+               '((t (:foreground "blue" :bold t))))
+(my-wl-set-face 'wl-highlight-message-from-header-contents
+               '((t (:foreground "red" :bold t))))
+(my-wl-set-face 'wl-highlight-message-important-header-contents
+               '((t (:foreground "purple" :bold t))))
+(my-wl-set-face 'wl-highlight-message-unimportant-header-contents
+               '((t (:foreground "RoyalBlue" :bold t))))
+(my-wl-set-face 'wl-highlight-message-headers
+               '((t (:foreground "magenta3" :bold t))))
+(my-wl-set-face 'wl-highlight-message-header-contents
+               '((t (:foreground "brown" :bold nil))))
+(my-wl-set-face 'wl-highlight-message-signature
+               '((t (:foreground "blue"))))
+;; citation.
+(my-wl-set-face 'wl-highlight-message-citation-header
+               '((t (:foreground "DarkGreen"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-1
+               '((t (:foreground "forest green"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-2
+               '((t (:foreground "SaddleBrown"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-3
+               '((t (:foreground "orchid3"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-4
+               '((t (:foreground "purple1"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-5
+               '((t (:foreground "MediumPurple1"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-6
+               '((t (:foreground "PaleVioletRed"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-7
+               '((t (:foreground "LightPink"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-8
+               '((t (:foreground "salmon"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-9
+               '((t (:foreground "SandyBrown"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-10
+               '((t (:foreground "wheat"))))
+;; summary.
+(my-wl-set-face 'wl-highlight-summary-important-face
+               '((t (:foreground "purple"))))
+(my-wl-set-face 'wl-highlight-summary-new-face
+               '((t (:foreground "tomato"))))
+(my-wl-set-face 'wl-highlight-summary-unread-face
+               '((t (:foreground "RoyalBlue"))))
+(my-wl-set-face 'wl-highlight-summary-deleted-face
+               '((t (:foreground "gray"))))
+(my-wl-set-face 'wl-highlight-summary-refiled-face
+               '((t (:foreground "blue"))))
+(my-wl-set-face 'wl-highlight-summary-temp-face
+               '((t (:foreground "salmon"))))
+(my-wl-set-face 'wl-highlight-summary-displaying-face
+               '((t (:bold t :underline t))))
+;; (thread)
+(my-wl-set-face 'wl-highlight-summary-thread-top-face
+               '((t (:foreground "green4"))))
+(my-wl-set-face 'wl-highlight-summary-normal-face
+               '((t (:foreground "SeaGreen"))))
+;; folder
+(my-wl-set-face 'wl-highlight-folder-unknown-face
+               '((t (:foreground "RoyalBlue"))))
+(my-wl-set-face 'wl-highlight-folder-killed-face
+               '((t (:foreground "gray50"))))
+(my-wl-set-face 'wl-highlight-folder-unread-face
+               '((t (:foreground "brown"))))
+(my-wl-set-face 'wl-highlight-folder-zero-face
+               '((t (:foreground "blue4"))))
+(my-wl-set-face 'wl-highlight-folder-few-face
+               '((t (:foreground "tomato"))))
+(my-wl-set-face 'wl-highlight-folder-many-face
+               '((t (:foreground "HotPink1"))))
+;; group
+(my-wl-set-face 'wl-highlight-folder-opened-face
+               '((t (:foreground "forest green"))))
+(my-wl-set-face 'wl-highlight-folder-closed-face
+               '((t (:foreground "DarkOliveGreen4"))))
+;; demo
+(my-wl-set-face 'wl-highlight-demo-face
+               '((t (:foreground "blue2"))))
+
+
+;;; [[ Special Setting ]]
+
+;; compress ~/elmo  using jka-compr.
+;(setq elmo-msgdb-overview-filename "overview.gz")
+;(setq elmo-msgdb-number-filename "number.gz")
+;(setq wl-summary-cache-file ".wl-summary-cache.gz")
+;(setq wl-thread-top-file ".wl-thread-top.gz")
+
+
+;; open unread group folder after checking.
+(add-hook 'wl-folder-check-entity-hook
+         '(lambda ()
+            (wl-folder-open-unread-folder entity)
+            ))
+
+;; User's mail addresses.
+(setq wl-user-mail-address-list
+      (list (wl-address-header-extract-address wl-from)
+           ;;"e-mail2@bbb.com" ...
+           ))
+
+;; Change summary display function.
+
+;; get extra field values as overview information (only localdir folder).
+(setq elmo-msgdb-extra-fields '("newsgroups"
+                               "x-ml-name"
+                               "x-mail-count" "x-ml-count"
+                               "x-sequence"
+                               "mailing-list"))
+
+;;; ML message displays ML name and ML sequence number in subject.
+(setq wl-summary-subject-func 'my-wl-summary-subject-func-ml)
+(defun my-wl-summary-subject-func-ml (subject-string)
+  (let ((folder wl-summary-buffer-folder-name)
+       (subj subject-string) (sequence) (ml-name) (ml-count))
+    (setq sequence (elmo-msgdb-overview-entity-get-extra-field
+                   entity "x-sequence")
+         ml-name (or (elmo-msgdb-overview-entity-get-extra-field
+                      entity "x-ml-name")
+                     (and sequence
+                          (car (split-string sequence " "))))
+         ml-count (or (elmo-msgdb-overview-entity-get-extra-field
+                       entity "x-mail-count")
+                      (elmo-msgdb-overview-entity-get-extra-field
+                       entity "x-ml-count")
+                      (and sequence
+                           (cadr (split-string sequence " ")))))
+    (if (string-match
+        "^\\s(\\(.+\\)[ :]\\([0-9]+\\)\\s)[ \t]*"
+        subject-string)
+       (progn
+         (setq subj (substring subject-string (match-end 0)))
+         (if (not ml-name) (setq ml-name (match-string 1 subject-string)))
+         (if (not ml-count) (setq ml-count (match-string 2 subject-string)))))
+    (if (and ml-name ml-count)
+       (if (string= folder wl-default-folder)
+           (format "(%s %05d) %s"
+                   (car (split-string ml-name " "))
+                   (string-to-int ml-count)
+                   subj)
+         (format "#%05d %s"
+                 (string-to-int ml-count) subj))
+      subj)))
+
+;; imput asynchronously.
+;; (utils/im-wl.el is needed to be installed.
+;;  Don't forget setting ~/.im/Config (Smtpservers).
+;;  note that wl-draft-enable-queuing is not valid.)
+;(autoload 'wl-draft-send-with-imput-async "im-wl")
+;(setq wl-draft-send-func 'wl-draft-send-with-imput-async)
+
+
+;; template
+(setq wl-template-alist
+      '(("default"
+        ("From" . wl-from)
+        ("Organization" . "~/.wl sample")
+        (body . "Hello, this is XXX \n"))              ;; body
+       ("report"
+        ("To" . "boss@company.jp")
+        ("Subject" . "Report")
+        (top . "Sir, here is my report\n")             ;; insert in top.
+;;      (file-bottom . "~/work/report.txt")    ;; insert file in bottom
+        )
+       ))
+;; Change headers in draft sending time.
+(setq wl-draft-config-alist
+      '((reply         ;; see reply buffer
+        "^To: .*\\(test-notsend-wl@lists.airs.net\\)"
+        (template . "default"))                ;; template
+       ("^To: .*\\(test-notsend-wl@lists.airs.net\\)"
+        wl-ml-draft-config-func                ;; function
+        ("From" . wl-from)                     ;; variable
+        ("Organization" . "~/.wl sample"))     ;; string
+       ("^Newsgroups: test.*"
+        ("Organization" . "organization for nntp."))
+       ))
+;; Change headers in draft preparation time.
+; (add-hook 'wl-mail-setup-hook
+;           '(lambda ()
+;              (unless wl-draft-reedit    ;; don't apply when reedit.
+;                (wl-draft-config-exec wl-draft-config-alist))))
+
+;; header value setting for mail reply.
+
+;; "a" (without-argument) reply to author (Reply-To or From).
+;; if 'X-ML-Name' and 'Reply-To' exists, reply to 'Reply-To'.
+; (setq wl-draft-reply-without-argument-list
+;       '((("X-ML-Name" "Reply-To") . (("Reply-To") nil nil))
+;      ("X-ML-Name" . (("To" "Cc") nil nil))
+;      ("Followup-To" . (nil nil ("Followup-To")))
+;      ("Newsgroups" . (nil nil ("Newsgroups")))
+;      ("Reply-To" . (("Reply-To") nil nil))
+;      ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
+;      ("From" . (("From") nil nil))))
+; 
+;; "C-u a" (with-argument) reply to all.
+; (setq wl-draft-reply-with-argument-list
+;       '(("Followup-To" . (("From") nil ("Followup-To")))
+;      ("Newsgroups" . (("From") nil ("Newsgroups")))
+;      ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
+;      ("From" . (("From") ("To" "Cc") ("Newsgroups")))))
+
+
+;; X-Face (requires x-face (and x-face-mule))
+
+(when (and window-system
+          (module-installed-p 'x-face))
+  (cond (wl-on-xemacs                          ;; for XEmacs
+        (autoload 'x-face-xmas-wl-display-x-face "x-face" nil t)
+        (setq wl-highlight-x-face-func
+              'x-face-xmas-wl-display-x-face))
+       ((module-installed-p 'x-face-mule)      ;; for Mule (GNU Emacs)
+        ;; after x-face-mule 0.20
+        (setq wl-highlight-x-face-func
+              (function
+               (lambda (beg end)
+                 (x-face-mule-x-face-decode-message-header beg end))))
+        (setq x-face-mule-highlight-x-face-style 'xmas)
+        (require 'x-face-mule)
+        )))
+
+;; rule for auto refile.
+;(setq wl-refile-rule-alist
+;      '(
+;      ("x-ml-name"
+;       ("^Wanderlust" . "+wl")
+;       ("^Elisp" . "+elisp"))
+;      ("From"
+;       ("teranisi@isl.ntt.co.jp" . "+teranisi"))))
+
+;; Marks to skip auto-refile (default is "N" "U" "!").
+;; nil means all message is auto-refiled.
+;(setq wl-summary-auto-refile-skip-marks nil)
+
+;; Scoring.
+;; "all.SCORE" file is used regardless of wl-score-folder-alist.
+; (setq wl-score-folder-alist
+;       '(("^-comp\\."
+;       "news.comp.SCORE"
+;       "news.SCORE")
+;      ("^-"
+;       "news.SCORE")))
+;; directory for storing score files.
+; (setq wl-score-files-directory "~/.elmo/")
+
+
+;;;
+;;; end of file
+;;;
diff --git a/samples/ja/dot.addresses b/samples/ja/dot.addresses
new file mode 100644 (file)
index 0000000..40c0d51
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# \e$B%"%I%l%9%U%!%$%k%5%s%W%k\e(B
+#                    by Yuuichi Teranishi <teranisi@gohome.org>
+# Time-stamp: <98/06/15 00:32:30 teranisi>
+#
+# '#' \e$B$G;O$^$k9T$O%3%a%s%H!#\e(B
+# \e$B6u9T$OL5;k!#\e(B
+#
+# \e$B%a!<%k%"%I%l%9\e(B  "\e$B$"$@L>\e(B" "\e$BK\L>\e(B"
+#
+teranisi@gohome.org            "\e$B$F$i$K$7\e(B"        "\e$B;{@>M50l\e(B"
+foo@bar.com                    "\e$B$U!<$5$s\e(B"        "Mr. Foo"
+bar@foo.com                    "\e$B$P!<$5$s\e(B"        "Mr. Bar"
diff --git a/samples/ja/dot.folders b/samples/ja/dot.folders
new file mode 100644 (file)
index 0000000..d3f722d
--- /dev/null
@@ -0,0 +1,73 @@
+#
+# \e$B%U%)%k%@Dj5A%U%!%$%k%5%s%W%k\e(B
+#                    by Yuuichi Teranishi <teranisi@gohome.org>
+# Time-stamp: <98/10/02 18:31:06 teranisi>
+#
+# '#' \e$B$G;O$^$k9T$O%3%a%s%H!#\e(B
+# \e$B6u9T$OL5;k!#\e(B
+# 
+# \e$B8D!9$N%U%)%k%@$N=q<0$K$D$$$F$O\e(B info \e$B$r;2>H$N$3$H!#\e(B
+#
+
+%inbox
++trash
++draft
+%#mh/Backup@my.imap.server.com
+%#mh/spool/mm
+# \e$B%0%k!<%W$NDj5A\e(B
+Emacsen{
+       %#mh/spool/xemacs-beta
+       %#mh/spool/mew-dist
+       %#mh/spool/tm-ja
+       %#mh/spool/mule-win32
+       -fj.news.reader.gnus@other.nntp.server.com
+# \e$B%^%k%A%U%)%k%@\e(B(\e$BJ#?t$N%U%)%k%@$r2>A[E*$K0l$D$K8+$($k$h$&$K$9$k%U%)%k%@\e(B)
+# \e$B<!$N9T$O\e(B -fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs \e$B$r0l$D$K$9$kNc\e(B
+       *-fj.editor.xemacs,-fj.editor.mule,-fj.editor.emacs
+       -gnu.emacs.sources
+}
+UNIX \e$B4XO"\e(B{
+# \e$B%0%k!<%W$NF~$l;R$b2D\e(B
+ BSD {
+ %#mh/spool/freebsd-users-jp
+ -fj.os.bsd.freebsd
+ -japan.comp.freebsd
+ %#mh/spool/bsd-nomads
+ -fj.os.bsd.misc
+ }
+ Linux {
+ -fj.os.linux
+ -japan.comp.linux
+ }
+-fj.kanji
+-fj.lang.perl
+-fj.unix
+-fj.questions.unix
+-fj.sys.sun
+-fj.sys.j3100
+-comp.windows.x.i386unix
+-fj.comp.x11
+}
+\e$B7]G=2;3Z\e(B{
+%#mh/spool/tvdrama
+-fj.rec.tv
+-japan.tv
+-fj.rec.tv.cm
+-japan.tv.cm
+-fj.rec.idol
+-fj.rec.music
+}
+\e$B%^%$%U%)%k%@!<\e(B {
+INBOXes {
+%inbox@localhost
+#
+# \e$B%"%/%;%9%0%k!<%W\e(B
+# \e$B9TKv$K\e(B '/' \e$B$,$D$/$H!"$=$N%U%)%k%@$K4^$^$l$k%5%V%U%)%k%@A4$F$,\e(B
+# \e$B$R$H$D$N%0%k!<%W$H$J$k!#\e(B
+#
+%#mh/expire@localhost /
+}
+# MH \e$B$N%U%)%k%@A4$F$r$R$H$D$N%0%k!<%W$K$9$kNc!#\e(B
++ /
+%#mh@my.imap.server.com
+}
diff --git a/samples/ja/dot.wl b/samples/ja/dot.wl
new file mode 100644 (file)
index 0000000..c70bd88
--- /dev/null
@@ -0,0 +1,382 @@
+;;;                                                    -*- emacs-lisp -*-
+;;; ~/.wl (setting file for Wanderlust)
+;;;                                            Last-Modified: 1999-11-07
+;;;
+
+;; \e$B$^$:!$<!$N@_Dj$r\e(B ~/.emacs \e$B$J$I$K=q$$$F$/$@$5$$!#\e(B
+;; \e$B$3$3$+$i\e(B
+(require 'mime-setup)
+(autoload 'wl "wl" "Wanderlust" t)
+(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)
+;; \e$B$3$3$^$G\e(B
+
+;;; [[ \e$B8D?M>pJs$N@_Dj\e(B ]]
+
+;; From \e$B$N@_Dj\e(B
+;(setq wl-from "Your Name <e-mail-address>")
+;; Organization \e$B$N@_Dj\e(B
+;(setq wl-organization "")
+
+;;; [[ \e$B4pK\E*$J@_Dj\e(B ]]
+
+;; \e$B%a%C%;!<%8%G!<%?%Y!<%9$r:n$k%G%#%l%/%H%j\e(B
+(setq elmo-msgdb-dir "~/.elmo")
+
+;; MH (localdir) \e$B$N%[!<%`\e(B
+(setq elmo-localdir-folder-path "~/Mail")
+;; IMAP4\e$B%5!<%P$N@_Dj\e(B
+(setq elmo-default-imap4-server "localhost")
+;; POP\e$B%5!<%P$N@_Dj\e(B
+(setq elmo-default-pop3-server "localhost")
+;; \e$B%K%e!<%9%5!<%P$N@_Dj\e(B
+(setq elmo-default-nntp-server "localhost")
+;; \e$BEj9F@h$N\e(B \e$B%K%e!<%9%5!<%P\e(B
+(setq wl-nntp-posting-server elmo-default-nntp-server)
+;; \e$B%a!<%k$rAw?.$9$k@h$N\e(B (SMTP)\e$B%5!<%P\e(B
+(setq wl-smtp-posting-server "localhost")
+
+;; \e$B%"%$%3%s$rCV$/%G%#%l%/%H%j\e(B (XEmacs \e$B$N$_\e(B)
+;; (XEmacs \e$B$N\e(B package \e$B$H$7$F%$%s%9%H!<%k$5$l$F$$$k>l9g!"I,MW$"$j$^$;$s\e(B)
+;(setq wl-icon-dir "~/work/wl/etc")
+
+;; (system-name) \e$B$,\e(BFQDN\e$B$rJV$5$J$$>l9g!"\e(B
+;; \e$B0J2<$r%[%9%HL>$r=|$$$?%I%a%$%sL>$r@_Dj$7$F$/$@$5$$!#\e(B
+;; ((system-name)  "." wl-local-domain \e$B$,\e(B Message-ID \e$B$N:n@.!"\e(B
+;; SMTP \e$B$N\e(B HELO \e$B$K;HMQ\e(B \e$B$5$l$^$9!#\e(B)
+;(setq wl-local-domain "localdomain")
+;; Message-ID \e$B$N%I%a%$%s%Q!<%H$r6/@)E*$K;XDj\e(B
+;(setq wl-message-id-domain "localhost.localdomain")
+
+;(setq wl-default-folder "+inbox")   ;; wl-summary-goto-folder \e$B$N;~$KA*Br$9$k\e(B
+                                    ;; \e$B%G%U%)%k%H$N%U%)%k%@\e(B
+;(setq wl-default-spec "+")         ;; \e$B%U%)%k%@L>Jd40;~$K;HMQ$9$k\e(B
+                                    ;; \e$B%G%U%)%k%H$N%9%Z%C%/\e(B
+
+;(setq wl-fcc "+outbox")            ;; Folder Carbon Copy
+
+(setq wl-interactive-exit t)        ;; \e$B=*N;;~$K3NG'$9$k\e(B
+(setq wl-interactive-send t)        ;; \e$B%a!<%kAw?.;~$K$O3NG'$9$k\e(B
+
+(setq wl-auto-select-first t)       ;; \e$B%5%^%j0\F08e$K@hF,%a%C%;!<%8$rI=<($9$k\e(B
+(setq wl-auto-select-next t)        ;; \e$B%5%^%jFb$N0\F0$GL$FI%a%C%;!<%8$,$J$$$H\e(B
+                                    ;; \e$B<!$N%U%)%k%@$K0\F0$9$k\e(B
+;(setq wl-auto-select-next 'skip-no-unread)
+                                    ;; \e$BL$FI$,$J$$%U%)%k%@$OHt$P$9\e(B
+                                    ;; SPC\e$B%-!<$@$1$GFI$_?J$a$k>l9g$OJXMx\e(B
+(setq wl-summary-move-order 'unread) ;; \e$BL$FI%a%C%;!<%8$rM%@hE*$KFI$`\e(B
+(setq wl-thread-insert-opened t)     ;; thread\e$B:n@.;~$O>o$K\e(Bopen\e$B$K$9$k\e(B
+
+;(setq wl-stay-folder-window t)             ;; \e$B%5%^%j$K0\F0$7$?$H$-$K%U%)%k%@%P%C%U%!\e(B
+                                    ;; \e$B$N1&$K%5%^%j$N%P%C%U%!$rI=<($9$k\e(B
+
+;; \e$B%U%)%k%@<oJL$4$H$N%-%c%C%7%e$N@_Dj\e(B
+;; (localdir, localnews, maildir \e$B$O%-%c%C%7%e$7$J$$\e(B)
+;(setq elmo-archive-use-cache nil)
+;(setq elmo-nntp-use-cache t)
+;(setq elmo-imap4-use-cache t)
+;(setq elmo-pop3-use-cache t)
+
+;; \e$B%*%U%i%$%s\e(B(unplugged)\e$BA`:n$rM-8z$K$9$k\e(B(\e$B8=:_$O\e(BIMAP\e$B%U%)%k%@$N$_\e(B)
+;(setq elmo-enable-disconnected-operation t)
+
+;; unplugged \e$B>uBV$GAw?.$9$k$H!$%-%e!<\e(B(`wl-queue-folder')\e$B$K3JG<$9$k\e(B
+(setq wl-draft-enable-queuing t)
+;; unplugged \e$B$+$i\e(B plugged \e$B$KJQ$($k$H!$%-%e!<$K$"$k%a%C%;!<%8$rAw?.$9$k\e(B
+(setq wl-auto-flush-queue t)
+
+;; \e$B5/F0;~$O%*%U%i%$%s>uBV$K$9$k\e(B
+;(setq wl-plugged nil)
+;; \e$B5/F0;~$K%]!<%H$4$H$N\e(Bplug\e$B>uBV$rJQ99$9$k\e(B
+;(add-hook 'wl-make-plugged-hook
+;        '(lambda ()
+;           ;; server,port\e$B$N\e(Bplug\e$B>uBV$r?75,DI2C$b$7$/$OJQ99$9$k\e(B
+;           (elmo-set-plugged plugged\e$BCM\e(B(t/nil) server port)
+;           ;; port \e$B$r>JN,$9$k$H\e(Bserver\e$B$NA4\e(Bport\e$B$,JQ99$5$l$k\e(B
+;           ;; (port \e$B$r>JN,$7$F?75,$NDI2C$O$G$-$J$$\e(B)
+;           (elmo-set-plugged plugged\e$BCM\e(B(t/nil) server)
+;           ))
+
+
+;; highlight\e$B$N@_Dj\e(B (\e$BL@$k$$GX7J?'$N>l9g$G$9\e(B)
+
+;; \e$B%0%k!<%W$rL$FI?t$K$h$j?'J,$1$7$J$$!#3+JD>uBV$K$h$j?'J,$1$9$k!#\e(B
+;(setq wl-highlight-group-folder-by-numbers nil)
+
+(setq wl-highlight-message-header-alist
+      '(("Subject[ \t]*:" . wl-highlight-message-subject-header-contents)
+       ("From[ \t]*:" . wl-highlight-message-from-header-contents)
+       ("\\(.*To\\|Cc\\|Newsgroups\\)[ \t]*:" . wl-highlight-message-important-header-contents)
+       ("\\(User-Agent\\|X-Mailer\\|X-Newsreader\\)[ \t]*:" .
+        wl-highlight-message-unimportant-header-contents)
+       ))
+;; \e$B0zMQ%l%Y%k$G?'J,$1$7$J$$\e(B
+;(setq wl-highlight-citation-face-list
+;      '(wl-highlight-message-cited-text-1))
+
+(defun my-wl-set-face (face spec)
+  (make-face face)
+  (cond ((fboundp 'face-spec-set)
+        (face-spec-set face spec))
+       (t
+        (wl-declare-face face spec))))
+
+;; \e$B%a%C%;!<%8%X%C%@\e(B
+(my-wl-set-face 'wl-highlight-message-subject-header-contents
+               '((t (:foreground "blue" :bold t))))
+(my-wl-set-face 'wl-highlight-message-from-header-contents
+               '((t (:foreground "red" :bold t))))
+(my-wl-set-face 'wl-highlight-message-important-header-contents
+               '((t (:foreground "purple" :bold t))))
+(my-wl-set-face 'wl-highlight-message-unimportant-header-contents
+               '((t (:foreground "RoyalBlue" :bold t))))
+(my-wl-set-face 'wl-highlight-message-headers
+               '((t (:foreground "magenta3" :bold t))))
+(my-wl-set-face 'wl-highlight-message-header-contents
+               '((t (:foreground "brown" :bold nil))))
+(my-wl-set-face 'wl-highlight-message-signature
+               '((t (:foreground "blue"))))
+;; \e$B0zMQ\e(B
+(my-wl-set-face 'wl-highlight-message-citation-header
+               '((t (:foreground "DarkGreen"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-1
+               '((t (:foreground "forest green"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-2
+               '((t (:foreground "SaddleBrown"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-3
+               '((t (:foreground "orchid3"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-4
+               '((t (:foreground "purple1"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-5
+               '((t (:foreground "MediumPurple1"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-6
+               '((t (:foreground "PaleVioletRed"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-7
+               '((t (:foreground "LightPink"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-8
+               '((t (:foreground "salmon"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-9
+               '((t (:foreground "SandyBrown"))))
+(my-wl-set-face 'wl-highlight-message-cited-text-10
+               '((t (:foreground "wheat"))))
+;; \e$B%5%^%j\e(B
+(my-wl-set-face 'wl-highlight-summary-important-face
+               '((t (:foreground "purple"))))
+(my-wl-set-face 'wl-highlight-summary-new-face
+               '((t (:foreground "tomato"))))
+(my-wl-set-face 'wl-highlight-summary-unread-face
+               '((t (:foreground "RoyalBlue"))))
+(my-wl-set-face 'wl-highlight-summary-deleted-face
+               '((t (:foreground "gray"))))
+(my-wl-set-face 'wl-highlight-summary-refiled-face
+               '((t (:foreground "blue"))))
+(my-wl-set-face 'wl-highlight-summary-temp-face
+               '((t (:foreground "salmon"))))
+(my-wl-set-face 'wl-highlight-summary-displaying-face
+               '((t (:bold t :underline t))))
+;; (\e$B%9%l%C%I\e(B)
+(my-wl-set-face 'wl-highlight-summary-thread-top-face
+               '((t (:foreground "green4"))))
+(my-wl-set-face 'wl-highlight-summary-normal-face
+               '((t (:foreground "SeaGreen"))))
+;; \e$B%U%)%k%@\e(B
+(my-wl-set-face 'wl-highlight-folder-unknown-face
+               '((t (:foreground "RoyalBlue"))))
+(my-wl-set-face 'wl-highlight-folder-killed-face
+               '((t (:foreground "gray50"))))
+(my-wl-set-face 'wl-highlight-folder-unread-face
+               '((t (:foreground "brown"))))
+(my-wl-set-face 'wl-highlight-folder-zero-face
+               '((t (:foreground "blue4"))))
+(my-wl-set-face 'wl-highlight-folder-few-face
+               '((t (:foreground "tomato"))))
+(my-wl-set-face 'wl-highlight-folder-many-face
+               '((t (:foreground "HotPink1"))))
+;; \e$B%0%k!<%W\e(B
+(my-wl-set-face 'wl-highlight-folder-opened-face
+               '((t (:foreground "forest green"))))
+(my-wl-set-face 'wl-highlight-folder-closed-face
+               '((t (:foreground "DarkOliveGreen4"))))
+;; \e$B%9%?!<%H%"%C%W%G%b\e(B
+(my-wl-set-face 'wl-highlight-demo-face
+               '((t (:foreground "blue2"))))
+
+
+;;; [[ \e$BFC<l$J@_Dj\e(B ]]
+
+;; jka-compr \e$B$rMxMQ$7$F\e(B ~/elmo/SPEC/ \e$B0J2<$N%G!<%?%Y!<%9$r05=L$9$k\e(B
+;(setq elmo-msgdb-overview-filename "overview.gz")
+;(setq elmo-msgdb-number-filename "number.gz")
+;(setq wl-summary-cache-file ".wl-summary-cache.gz")
+;(setq wl-thread-top-file ".wl-thread-top.gz")
+
+
+;; \e$B%0%k!<%W$r\e(Bcheck\e$B$7$?8e$KL$FI$,$"$k%U%)%k%@$N%0%k!<%W$r<+F0E*$K3+$/\e(B
+(add-hook 'wl-folder-check-entity-hook
+         '(lambda ()
+            (wl-folder-open-unread-folder entity)
+            ))
+
+;; \e$B<+J,$N%a!<%k%"%I%l%9$N%j%9%H\e(B
+(setq wl-user-mail-address-list
+      (list (wl-address-header-extract-address wl-from)
+           ;;"e-mail2@bbb.com" ...
+           ))
+
+;; \e$B%5%^%jI=<(4X?t$rJQ99$9$k\e(B
+
+;; \e$B%5%^%jI=<($K$*$$$F;HMQ$9$k>pJs$r;}$D%U%#!<%k%I$r\e(Boverview\e$B>pJs$K\e(B
+;; \e$BF~$l$k@_Dj\e(B(\e$B$?$@$7!$\e(Blocal\e$B%U%)%k%@$N$_\e(B)
+;; \e$B<+F0%j%U%!%$%k$KI,MW$J%U%#!<%k%I$b@_Dj\e(B
+(setq elmo-msgdb-extra-fields '("newsgroups"
+                               "x-ml-name"
+                               "x-mail-count" "x-ml-count"
+                               "x-sequence"
+                               "mailing-list"))
+
+;;; ML \e$B$N%a%C%;!<%8$G$"$l$P!$%5%^%j$N\e(B Subject \e$BI=<($K\e(B
+;;; ML\e$BL>\e(B \e$B$d\e(B ML\e$B$K$*$1$k%a%C%;!<%8HV9f$bI=<($9$k\e(B
+(setq wl-summary-subject-func 'my-wl-summary-subject-func-ml)
+(defun my-wl-summary-subject-func-ml (subject-string)
+  (let ((folder wl-summary-buffer-folder-name)
+       (subj subject-string) (sequence) (ml-name) (ml-count))
+    (setq sequence (elmo-msgdb-overview-entity-get-extra-field
+                   entity "x-sequence")
+         ml-name (or (elmo-msgdb-overview-entity-get-extra-field
+                      entity "x-ml-name")
+                     (and sequence
+                          (car (split-string sequence " "))))
+         ml-count (or (elmo-msgdb-overview-entity-get-extra-field
+                       entity "x-mail-count")
+                      (elmo-msgdb-overview-entity-get-extra-field
+                       entity "x-ml-count")
+                      (and sequence
+                           (cadr (split-string sequence " ")))))
+    (if (string-match
+        "^\\s(\\(.+\\)[ :]\\([0-9]+\\)\\s)[ \t]*"
+        subject-string)
+       (progn
+         (setq subj (substring subject-string (match-end 0)))
+         (if (not ml-name) (setq ml-name (match-string 1 subject-string)))
+         (if (not ml-count) (setq ml-count (match-string 2 subject-string)))))
+    (if (and ml-name ml-count)
+       (if (string= folder wl-default-folder)
+           (format "(%s %05d) %s"
+                   (car (split-string ml-name " "))
+                   (string-to-int ml-count)
+                   subj)
+         (format "#%05d %s"
+                 (string-to-int ml-count) subj))
+      subj)))
+
+;; imput \e$B$K$h$jHsF14|$GAw?.$9$k\e(B
+;; (utils/im-wl.el \e$B$r%$%s%9%H!<%k$7$F$*$/I,MW$,$"$j$^$9!#\e(B
+;;  \e$B$^$?!$\e(B~/.im/Config \e$B$N@_Dj\e(B(Smtpservers)\e$B$rK:$l$J$$$3$H$H!$\e(B
+;;  wl-draft-enable-queuing \e$B$N5!G=$,F/$+$J$/$J$k$3$H$KCm0U!#\e(B)
+;(autoload 'wl-draft-send-with-imput-async "im-wl")
+;(setq wl-draft-send-func 'wl-draft-send-with-imput-async)
+
+;; \e$B%F%s%W%l!<%H$N@_Dj\e(B
+(setq wl-template-alist
+      '(("default"
+        ("From" . wl-from)
+        ("Organization" . "~/.wl sample")
+        (body . "  \e$B!{!{$G$9!#\e(B\n"))               ;; \e$BK\J8\e(B
+       ("report"
+        ("To" . "boss@company.jp")
+        ("Subject" . "\e$BJs9p\e(B")
+        (top . "\e$B:#=5$NJs9p$G$9!#\e(B\n")             ;; \e$BK\J8@hF,$X$NA^F~\e(B
+;;      (file-bottom . "~/work/report.txt")    ;; \e$BK\J8KvHx$X%U%!%$%k$NA^F~\e(B
+        )
+       ))
+
+;; \e$B%I%i%U%H%P%C%U%!$NFbMF$K$h$j\e(B From \e$B$d\e(B Organization \e$B$J$I$N%X%C%@$r<+\e(B
+;; \e$BF0E*$KJQ99$9$k\e(B
+(setq wl-draft-config-alist
+      '((reply                 ;; \e$BJV?.85$N%P%C%U%!$r8+$k\e(B
+        "^To: .*\\(test-notsend-wl@lists.airs.net\\)"
+        (template . "default"))                ;; \e$B%F%s%W%l!<%H\e(B
+       ("^To: .*\\(test-notsend-wl@lists.airs.net\\)"
+        wl-ml-draft-config-func                ;; \e$B4X?t\e(B
+        ("From" . wl-from)                     ;; \e$BJQ?t\e(B
+        ("Organization" . "~/.wl sample"))     ;; \e$BJ8;zNs\e(B
+       ("^Newsgroups: test.*"
+        ("Organization" . "\e$B%K%e!<%9Ej9F;~$NAH?%L>\e(B"))
+       ))
+;; \e$B%I%i%U%H:n@.;~\e(B(\e$BJV?.;~\e(B)\e$B$K!$<+F0E*$K%X%C%@$rJQ99$9$k\e(B
+; (add-hook 'wl-mail-setup-hook
+;           '(lambda ()
+;              (unless wl-draft-reedit    ;; \e$B:FJT=8;~$OE,MQ$7$J$$\e(B
+;                (wl-draft-config-exec wl-draft-config-alist))))
+
+;; \e$B%a!<%k$NJV?.;~$K08@h$rIU$1$kJ}?K$N@_Dj\e(B
+
+;; \e$B2<5-JQ?t$N\e(B alist \e$B$NMWAG\e(B
+;; ('\e$BJV?.85$KB8:_$9$k%U%#!<%k%I\e(B' .
+;;   ('To\e$B%U%#!<%k%I\e(B' 'Cc\e$B%U%#!<%k%I\e(B' 'Newsgroups\e$B%U%#!<%k%I\e(B'))
+
+;; "a" (without-argument)\e$B$G$O\e(B Reply-To \e$B$d\e(B From \e$B$J$I$G;XDj$5$l$?M#0l?M\e(B
+;; \e$B$^$?$OM#0l$D$NEj9F@h$KJV?.$9$k!#$^$?!$\e(BX-ML-Name \e$B$H\e(B Reply-To \e$B$,$D$$\e(B
+;; \e$B$F$$$k$J$i\e(B Reply-To \e$B08$K$9$k!#\e(B
+; (setq wl-draft-reply-without-argument-list
+;       '((("X-ML-Name" "Reply-To") . (("Reply-To") nil nil))
+;      ("X-ML-Name" . (("To" "Cc") nil nil))
+;      ("Followup-To" . (nil nil ("Followup-To")))
+;      ("Newsgroups" . (nil nil ("Newsgroups")))
+;      ("Reply-To" . (("Reply-To") nil nil))
+;      ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
+;      ("From" . (("From") nil nil))))
+; 
+;; "C-u a" (with-argument)\e$B$G$"$l$P4X78$9$kA4$F$N?M!&Ej9F@h$KJV?.$9$k!#\e(B
+; (setq wl-draft-reply-with-argument-list
+;       '(("Followup-To" . (("From") nil ("Followup-To")))
+;      ("Newsgroups" . (("From") nil ("Newsgroups")))
+;      ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
+;      ("From" . (("From") ("To" "Cc") ("Newsgroups")))))
+
+
+;; X-Face \e$B$rI=<($9$k\e(B (\e$BMW\e(B x-face (and x-face-mule))
+
+(when (and window-system
+          (module-installed-p 'x-face))
+  (cond (wl-on-xemacs                          ;; for XEmacs
+        (autoload 'x-face-xmas-wl-display-x-face "x-face" nil t)
+        (setq wl-highlight-x-face-func
+              'x-face-xmas-wl-display-x-face))
+       ((module-installed-p 'x-face-mule)      ;; for Mule (GNU Emacs)
+        ;; x-face-mule 0.20\e$B0J8e\e(B
+        (setq wl-highlight-x-face-func
+              (function
+               (lambda (beg end)
+                 (x-face-mule-x-face-decode-message-header beg end))))
+        (setq x-face-mule-highlight-x-face-style 'xmas)
+        (require 'x-face-mule)
+        )))
+
+;; \e$B<+F0%j%U%!%$%k$N%k!<%k@_Dj\e(B
+;(setq wl-refile-rule-alist
+;      '(
+;      ("x-ml-name"
+;       ("^Wanderlust" . "+wl")
+;       ("^Elisp" . "+elisp"))
+;      ("From"
+;       ("teranisi@isl.ntt.co.jp" . "+teranisi"))))
+
+;; \e$B<+F0%j%U%!%$%k$7$J$$1JB3%^!<%/$r@_Dj\e(B
+;; \e$BI8=`$G$O\e(B "N" "U" "!" \e$B$K$J$C$F$*$j!"L$FI%a%C%;!<%8$r<+F0%j%U%!%$%k$7\e(B
+;; \e$B$^$;$s!#\e(Bnil \e$B$G$9$Y$F$N%a%C%;!<%8$,BP>]$K$J$j$^$9!#\e(B
+;(setq wl-summary-auto-refile-skip-marks nil)
+
+;; \e$B%9%3%"5!G=$N@_Dj\e(B
+;; wl-score-folder-alist \e$B$N@_Dj$K4X$o$i$:I,$:\e(B "all.SCORE" \e$B$O;HMQ$5$l$k!#\e(B
+; (setq wl-score-folder-alist
+;       '(("^-comp\\."
+;       "news.comp.SCORE"
+;       "news.SCORE")
+;      ("^-"
+;       "news.SCORE")))
+;; \e$B%9%3%"%U%!%$%k$rCV$/%G%#%l%/%H%j\e(B
+; (setq wl-score-files-directory "~/.elmo/")
+
+;;;
+;;; end of file
+;;;
diff --git a/utils/bbdb-wl.el b/utils/bbdb-wl.el
new file mode 100644 (file)
index 0000000..8aa0354
--- /dev/null
@@ -0,0 +1,254 @@
+;;
+;; bbdb setup.
+;;
+(eval-when-compile
+  (require 'mime-setup)
+  (require 'elmo-vars)
+  (require 'elmo-util)
+  (require 'bbdb)
+  (require 'wl-summary)
+  (require 'wl-message)
+  (require 'wl-draft)
+  (require 'wl-address)
+  (defvar bbdb-pop-up-elided-display nil)
+  (or (fboundp 'bbdb-extract-field-value-internal)
+      (defun bbdb-extract-field-value-internal (field))))
+
+(defvar bbdb-wl-get-update-record-hook nil)
+
+(defun bbdb-wl-setup ()
+  (require 'bbdb)
+  (add-hook 'wl-message-redisplay-hook 'bbdb-wl-get-update-record)
+  (add-hook 'wl-summary-exit-hook 'bbdb-wl-hide-bbdb-buffer)
+  (add-hook 'wl-message-window-deleted-hook 'bbdb-wl-hide-bbdb-buffer)
+  (add-hook 'wl-exit-hook 'bbdb-wl-exit)
+  (add-hook 'wl-summary-toggle-disp-off-hook 'bbdb-wl-hide-bbdb-buffer)
+  (add-hook 'wl-summary-toggle-disp-folder-on-hook 'bbdb-wl-hide-bbdb-buffer)
+  (add-hook 'wl-summary-toggle-disp-folder-off-hook 'bbdb-wl-hide-bbdb-buffer)
+  (add-hook 'wl-summary-toggle-disp-folder-message-resumed-hook
+           'bbdb-wl-show-bbdb-buffer)
+  (add-hook 'wl-summary-mode-hook
+           (function
+            (lambda ()
+              (define-key (current-local-map) ":" 'bbdb-wl-show-sender)
+              (define-key (current-local-map) ";" 'bbdb-wl-edit-notes))))
+  (add-hook 'wl-summary-exit-hook 'bbdb-flush-all-caches)
+  (add-hook 'wl-summary-exec-hook 'bbdb-flush-all-caches)
+  (add-hook 'wl-mail-setup-hook
+           (function
+            (lambda ()
+;             (local-set-key "\M-\t" 'bbdb-complete-name)
+              (define-key (current-local-map) "\M-\t" 'bbdb-complete-name)
+              ))))
+
+(defun bbdb-wl-exit ()
+  (let (bbdb-buf)
+    (if (setq bbdb-buf (get-buffer bbdb-buffer-name))
+       (kill-buffer bbdb-buf)))
+  (bbdb-save-db t))
+
+(defun bbdb-wl-get-update-record ()
+  (set-buffer (wl-message-get-original-buffer))
+  (bbdb-wl-update-record)
+  (run-hooks 'bbdb-wl-get-update-record-hook))
+
+(defun bbdb-wl-hide-bbdb-buffer ()
+  (let (bbdb-buf bbdb-win)
+    (if (setq bbdb-buf (get-buffer bbdb-buffer-name))
+       (if (setq bbdb-win (get-buffer-window bbdb-buf))
+           (delete-window bbdb-win)))))
+
+(defun bbdb-wl-show-bbdb-buffer ()
+  (save-selected-window
+    (if (get-buffer-window bbdb-buffer-name)
+       nil  
+      (let ((mes-win (get-buffer-window 
+                     (save-excursion
+                       (if (buffer-live-p  wl-current-summary-buffer)
+                           (set-buffer wl-current-summary-buffer))
+                       wl-message-buf-name)))
+           (cur-win (selected-window))
+           (b (current-buffer)))
+       (and mes-win (select-window mes-win))
+       (let ((size (min
+                    (- (window-height mes-win)
+                       window-min-height 1)
+                    (- (window-height mes-win)
+                       (max window-min-height
+                            (1+ bbdb-pop-up-target-lines))))))    
+         (split-window mes-win (if (> size 0) size window-min-height)))
+       ;; goto the bottom of the two...
+       (select-window (next-window))
+       ;; make it display *BBDB*...
+       (let ((pop-up-windows nil))
+         (switch-to-buffer (get-buffer-create bbdb-buffer-name)))))))
+
+(defun bbdb-wl-from-func (string)
+  "A candidate for wl-summary-from-func..."
+  (let ((hit (bbdb-search-simple nil (wl-address-header-extract-address
+                                     string)))
+       first-name last-name from-str)
+    (if hit 
+       (progn
+         (setq first-name (aref hit 0))
+         (setq last-name (aref hit 1))
+         (cond ((and (null first-name)
+                     (null last-name))
+                (setq from-str string))
+               ((and first-name last-name)
+                (setq from-str (concat first-name " " last-name)))
+               ((or first-name last-name)
+                (setq from-str (or first-name last-name))))
+         from-str)
+      string)))
+
+(defun bbdb-wl-update-record (&optional offer-to-create)
+  "Returns the record corresponding to the current WL message, 
+creating or modifying it as necessary.  A record will be created if 
+bbdb/mail-auto-create-p is non-nil, or if OFFER-TO-CREATE is true and
+the user confirms the creation."
+  (save-excursion
+    (if bbdb-use-pop-up
+       (bbdb-wl-pop-up-bbdb-buffer offer-to-create)
+      (let ((key 
+            (save-excursion
+              (set-buffer 
+               (save-excursion
+                 (if (buffer-live-p wl-current-summary-buffer)
+                     (set-buffer wl-current-summary-buffer))
+                 wl-message-buf-name))
+              (intern (format
+                       "%s-%d"
+                       wl-current-summary-buffer
+                       wl-message-buffer-cur-number)))))
+       (or (bbdb-message-cache-lookup key nil)
+           (and key
+                (let* ((from (or (std11-field-body "From") ""))
+                       (addr (and from
+                                  (nth 1 (std11-extract-address-components
+                                          from)))))
+                  (if (or (null from)
+                          (null addr)
+                          (string-match (bbdb-user-mail-names) addr))
+                      (setq from (or (std11-field-body "To") from)))
+                  (with-temp-buffer ; to keep raw buffer unibyte.
+                    (elmo-set-buffer-multibyte
+                     default-enable-multibyte-characters)
+                    (setq from (eword-decode-string
+                                (decode-mime-charset-string
+                                 from
+                                 wl-mime-charset))))
+                  (if from
+                      (bbdb-encache-message
+                       key
+                       (bbdb-annotate-message-sender
+                        from t
+                        (or (bbdb-invoke-hook-for-value
+                             bbdb/mail-auto-create-p)
+                            offer-to-create)
+                        offer-to-create))))))))))
+
+(defun bbdb-wl-annotate-sender (string)
+  "Add a line to the end of the Notes field of the BBDB record 
+corresponding to the sender of this message."
+  (interactive (list (if bbdb-readonly-p
+                        (error "The Insidious Big Brother Database is read-only.")
+                      (read-string "Comments: "))))
+  (set-buffer (wl-message-get-original-buffer))
+  (bbdb-annotate-notes (bbdb-wl-update-record t) string))
+
+(defun bbdb-wl-edit-notes (&optional arg)
+  "Edit the notes field or (with a prefix arg) a user-defined field
+of the BBDB record corresponding to the sender of this message."
+  (interactive "P")
+  (wl-summary-redisplay)
+  (set-buffer (wl-message-get-original-buffer))
+  (let ((record (or (bbdb-wl-update-record t) (error ""))))
+    (bbdb-display-records (list record))
+    (if arg
+       (bbdb-record-edit-property record nil t)
+      (bbdb-record-edit-notes record t))))
+
+(defun bbdb-wl-show-sender ()
+  "Display the contents of the BBDB for the sender of this message.
+This buffer will be in bbdb-mode, with associated keybindings."
+  (interactive)
+  (wl-summary-redisplay)
+  (set-buffer (wl-message-get-original-buffer))
+  (let ((record (bbdb-wl-update-record t))
+       bbdb-win)
+    (if record
+       (progn
+         (bbdb-wl-pop-up-bbdb-buffer)
+         (bbdb-display-records (list record)))
+      (error "unperson"))
+    (setq bbdb-win (get-buffer-window (get-buffer bbdb-buffer-name)))
+    (and bbdb-win
+        (select-window bbdb-win))))
+
+
+(defun bbdb-wl-pop-up-bbdb-buffer (&optional offer-to-create)
+  "Make the *BBDB* buffer be displayed along with the WL window(s),
+displaying the record corresponding to the sender of the current message."
+  (if (get-buffer-window bbdb-buffer-name)
+      nil  
+    (let ((mes-win (get-buffer-window 
+                   (save-excursion
+                     (if (buffer-live-p  wl-current-summary-buffer)
+                         (set-buffer wl-current-summary-buffer))
+                     wl-message-buf-name)))
+         (cur-win (selected-window))
+         (b (current-buffer)))
+      (and mes-win
+          (select-window mes-win))
+      (let ((size (min
+                  (- (window-height mes-win)
+                     window-min-height 1)
+                  (- (window-height mes-win)
+                     (max window-min-height
+                          (1+ bbdb-pop-up-target-lines))))))    
+       (split-window mes-win (if (> size 0) size window-min-height)))
+      ;; goto the bottom of the two...
+      (select-window (next-window))
+      ;; make it display *BBDB*...
+      (let ((pop-up-windows nil))
+       (switch-to-buffer (get-buffer-create bbdb-buffer-name)))
+      ;; select the original window we were in...
+      (select-window cur-win)
+      ;; and make sure the current buffer is correct as well.
+      (set-buffer b)))
+  (let ((bbdb-gag-messages t)
+       (bbdb-use-pop-up nil)
+       (bbdb-electric-p nil))
+    (let ((record (bbdb-wl-update-record offer-to-create))
+         (bbdb-elided-display (bbdb-pop-up-elided-display))
+         (b (current-buffer)))
+      (bbdb-display-records (if record (list record) nil))
+      (set-buffer b)
+      record)))
+
+(defun bbdb-wl-send-mail-internal (&optional to subj records)
+  (unwind-protect
+      (wl-draft (wl-address-header-extract-address to) "" (or subj ""))
+    (condition-case nil (delete-other-windows) (error))))
+
+;;; @ bbdb-extract-field-value -- stolen from tm-bbdb.
+;;;
+(and (not (fboundp 'bbdb-extract-field-value-internal))
+     (not (fboundp 'tm:bbdb-extract-field-value)) ;; tm-bbdb
+;;   (not (fboundp 'PLEASE_REPLACE_WITH_SEMI-BASED_MIME-BBDB)) ;; mime-bbdb
+    (progn
+      ;; (require 'bbdb-hooks) ; not provided.
+      ;; (or (fboundp 'bbdb-extract-field-value) ; defined as autoload
+      (or (fboundp 'bbdb-header-start)
+          (load "bbdb-hooks"))
+      (fset 'bbdb-extract-field-value-internal
+            (symbol-function 'bbdb-extract-field-value))
+      (defun bbdb-extract-field-value (field)
+       (let ((value (bbdb-extract-field-value-internal field)))
+         (and value
+              (eword-decode-string value))))
+      ))
+
+
+(provide 'bbdb-wl)
diff --git a/utils/im-wl.el b/utils/im-wl.el
new file mode 100644 (file)
index 0000000..947646c
--- /dev/null
@@ -0,0 +1,178 @@
+;;;
+;;;               im-wl -- IM/Nifty4U+ interface for Wanderlust.
+;;;                          ...not completed.
+;;;
+;;; Copyright (C) 1998,1999 OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;;; Copyright (C) 1998,1999 Yuuichi Teranishi <teranisi@gohome.org>
+;;;
+;;; Time-stamp: <1999-09-10 22:58:45 fuji0924>
+;;; Author: OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
+;;;         Yuuichi Teranishi <teranisi@gohome.org>
+;;; Keywords: mail, news, Wanderlust, IM, Nifty4U+
+
+;;; This program is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 2, or (at your option)
+;;; any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;;; Boston, MA 02111-1307, USA.
+;;;
+
+;;;
+;;;  General settings:
+;;;  (autoload 'wl-draft-send-with-imput-async "im-wl")
+;;;  (setq wl-draft-send-func 'wl-draft-send-with-imput-async)
+;;;
+;;;  for Nifty4U+ users:
+;;;  (add-hook 'wl-mail-setup-hook '(lambda () (require 'im-wl)))
+;;;  (setq wl-draft-config-alist
+;;;       '(("^Newsgroups: nifty\\..*"
+;;;          ;; to avoid header-encoding.
+;;;          ;; [cf. slrn-ja-0.9.4.6.jp4/doc/README.macros.euc]
+;;;          ;(eword-field-encoding-method-alist . '((t . iso-2022-jp-2)))
+;;;          (wl-draft-send-func . 'wl-draft-send-with-imput-async)
+;;;          (im-wl-dispatcher . '("~/nifty4u-plus/inews-nifty4u" "-h"))
+;;;          (im-wl-dispatcher-error-msg
+;;;           . (format "^%s :" (expand-file-name (car im-wl-dispatcher)))))))
+
+;;; Code:
+;(require 'emu)
+
+;;; Variables:
+(defvar im-wl-dispatcher
+  '("imput" "-h" "-watch" "--debug=no" "-verbose" "--Queuing=yes")
+  "Program to post an article and its arguments.
+This is most commonly `imput(impost)' or `inews-nifty4u'.")
+
+(defvar im-wl-dispatcher-error-msg (format "^%s: ERROR:" (car im-wl-dispatcher))
+  "Error message of dispatcher")
+
+(defvar im-wl-default-temp-file-name "~/.imput-temp"
+  "Default temporary file name (for async).")
+
+;; xxx for Emacs18/19.x
+(or (boundp 'shell-command-switch)
+    (defvar shell-command-switch "-c"))
+
+;; Buffer local variables (For async).
+(defvar im-wl-buffer-editing-buffer nil)
+(defvar im-wl-buffer-sending-buffer nil)
+(defvar im-wl-buffer-kill-when-done nil)
+(make-variable-buffer-local 'im-wl-buffer-editing-buffer)
+(make-variable-buffer-local 'im-wl-buffer-sending-buffer)
+(make-variable-buffer-local 'im-wl-buffer-kill-when-done)
+
+\f
+;;;###autoload
+(defun wl-draft-send-with-imput-async (editing-buffer kill-when-done)
+  "Send the message in the current buffer with imput asynchronously."
+  (let (buffer-process process-connection-type watch-buffer
+       (sending-buffer (current-buffer))
+       (error-msg-regexp im-wl-dispatcher-error-msg)
+       (msg (save-excursion
+              (set-buffer editing-buffer)
+              (or wl-draft-buffer-file-name
+                  (setq wl-draft-buffer-file-name
+                        (expand-file-name
+                         im-wl-default-temp-file-name))))))
+    ;; current buffer is raw buffer.
+    (save-excursion
+      (goto-char (point-max))
+      ;; require one newline at the end.
+      (or (= (preceding-char) ?\n)
+         (insert ?\n))
+      ;; Change header-delimiter to be what imput expects.
+      (let (delimline
+           (case-fold-search t))
+       (save-restriction
+         (std11-narrow-to-header mail-header-separator)
+         ;; Insert Message-ID: 'cause wl-do-fcc() does not take care..
+         (goto-char (point-min))
+         (when (and wl-insert-message-id
+                    (not (re-search-forward "^Message-ID[ \t]*:" nil t)))
+           (insert (concat "Message-ID: "
+                           (wl-draft-make-message-id-string) "\n")))
+         ;; Insert date field.
+         (goto-char (point-min))
+         (or (re-search-forward "^Date[ \t]*:" nil t)
+             (wl-draft-insert-date-field)))
+       (run-hooks 'wl-mail-send-pre-hook) ;; X-PGP-Sig, Cancel-Lock
+       (goto-char (point-min))
+       (re-search-forward
+        (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
+       (replace-match "\n")
+       (forward-char -1)
+       (setq delimline (point-marker))
+       ;; ignore any blank lines in the header
+       (goto-char (point-min))
+       (while (and (re-search-forward "\n\n\n*" delimline t)
+                   (< (point) delimline))
+         (replace-match "\n"))
+       ;; Find and handle any FCC fields. 
+       ;; 'cause imput can NOT handle `Fcc: %IMAP'.
+       (goto-char (point-min))
+       (if (re-search-forward "^FCC:" delimline t)
+           (wl-draft-do-fcc delimline))))
+    (set-buffer-modified-p t)
+    (as-binary-output-file
+     (write-region (point-min)(point-max) msg nil t))
+    ;; The local variables must be binded to 'watch-buffer.
+    (set-buffer (setq watch-buffer (generate-new-buffer " *Wl Watch*")))
+    (setq im-wl-buffer-sending-buffer sending-buffer)
+    (setq im-wl-buffer-editing-buffer editing-buffer)
+    (setq im-wl-buffer-kill-when-done kill-when-done)
+    (setq im-wl-dispatcher-error-msg error-msg-regexp)
+    ;; Variables specified in wl-draft-config-alist are buffer-local, so
+    ;; we have to run subprocess under the editing-buffer.
+    ;; The filter function can find 'watch-buffer by process-buffer().
+    (set-buffer sending-buffer)
+    (setq buffer-process
+         ;; start-process-shell-command() is Emacs19/20's function.
+         (start-process
+          "DISPATCHER" watch-buffer
+          shell-file-name shell-command-switch
+          (format "%s < %s"
+                  (mapconcat 'identity im-wl-dispatcher " ") msg)))
+    (set-process-sentinel buffer-process 'im-wl-watch-process-async)
+    (message "Sending a message in background")
+    (if kill-when-done
+       (wl-draft-hide editing-buffer))))
+
+(defun im-wl-watch-process-async (process event)
+  (let ((process-buffer (process-buffer process))
+       editing-buffer kill-when-done raw-buffer)
+    (set-buffer process-buffer)
+    (setq editing-buffer im-wl-buffer-editing-buffer)
+    (setq kill-when-done im-wl-buffer-kill-when-done)
+    (setq raw-buffer im-wl-buffer-sending-buffer)
+    (goto-char (point-min))
+    (if (null (re-search-forward im-wl-dispatcher-error-msg nil t))
+       (progn
+         ;; sent successfully.
+         (kill-buffer raw-buffer)
+         (kill-buffer process-buffer)
+         (if kill-when-done
+             (wl-draft-delete editing-buffer)))
+      (ding)
+      (message "Send failed")
+      (kill-buffer raw-buffer)
+      (switch-to-buffer editing-buffer)
+      (condition-case ()
+         (progn
+           (split-window-vertically)
+           (select-window (next-window)))
+       (error)) ; ignore error.
+      (switch-to-buffer process-buffer)
+      (beginning-of-line))))
+
+(provide 'im-wl)
+
+;;; im-wl.el ends here
diff --git a/utils/rfc2368.el b/utils/rfc2368.el
new file mode 100644 (file)
index 0000000..f66a5f6
--- /dev/null
@@ -0,0 +1,152 @@
+;;; rfc2368.el --- support for rfc 2368
+
+;;; Copyright 1999 Sen Nagata <sen@eccosys.com>
+
+;; Keywords: rfc 2368, mailto, mail
+;; Version: 0.3
+;; License: GPL 2
+
+;; This file is not a part of GNU Emacs.
+
+;;; Commentary:
+;;
+;; notes:
+;;
+;;   -repeat after me: "the colon is not part of the header name..."
+;;   -if w3 becomes part of emacs, then it may make sense to have this
+;;    file depend on w3 -- the maintainer of w3 says merging w/ emacs
+;;    is planned!
+;;
+;; historical note:
+;;
+;;   this is intended as a replacement for mailto.el
+;;
+;; acknowledgements:
+;;
+;;   the functions that deal w/ unhexifying in this file were basically
+;; taken from w3 -- i hope to replace them w/ something else soon OR
+;; perhaps if w3 becomes a part of emacs soon, use the functions from w3.
+
+;;; History:
+;;
+;; 0.3:
+;;
+;;  added the constant rfc2368-version
+;;  implemented first potential fix for a bug in rfc2368-mailto-regexp
+;;  implemented first potential fix for a bug in rfc2368-parse-mailto
+;;  (both bugs reported by Kenichi OKADA)
+;;
+;; 0.2:
+;;
+;;  started to use checkdoc
+;;
+;; 0.1:
+;;
+;;  initial implementation
+
+;;; Code:
+(defconst rfc2368-version "rfc2368.el 0.3")
+
+;; only an approximation?
+;; see rfc 1738
+(defconst rfc2368-mailto-regexp
+  "^\\(mailto:\\)\\([^?]+\\)*\\(\\?\\(.*\\)\\)*"
+  "Regular expression to match and aid in parsing a mailto url.")
+
+;; describes 'mailto:'
+(defconst rfc2368-mailto-scheme-index 1
+  "Describes the 'mailto:' portion of the url.")
+;; i'm going to call this part the 'prequery'
+(defconst rfc2368-mailto-prequery-index 2
+  "Describes the portion of the url between 'mailto:' and '?'.")
+;; i'm going to call this part the 'query'
+(defconst rfc2368-mailto-query-index 4
+  "Describes the portion of the url after '?'.")
+
+;; for dealing w/ unhexifying strings, my preferred approach is to use
+;; a 'string-replace-match-using-function' which can perform a
+;; string-replace-match and compute the replacement text based on a
+;; passed function -- however, emacs doesn't seem to have such a
+;; function yet :-(
+
+;; for the moment a rip-off of url-unhex (w3/url.el)
+(defun rfc2368-unhexify-char (char)
+  "Unhexify CHAR -- e.g. %20 -> <SPC>."
+  (if (> char ?9)
+      (if (>= char ?a)
+         (+ 10 (- char ?a))
+       (+ 10 (- char ?A)))
+    (- char ?0)))
+
+;; for the moment a rip-off of url-unhex-string (w3/url.el) (slightly modified)
+(defun rfc2368-unhexify-string (string)
+  "Unhexify STRING -- e.g. 'hello%20there' -> 'hello there'."
+  (let ((case-fold-search t)
+       (result ""))
+    (while (string-match "%[0-9a-f][0-9a-f]" string)
+      (let* ((start (match-beginning 0))
+            (hex-code (+ (* 16
+                            (rfc2368-unhexify-char (elt string (+ start 1))))
+                         (rfc2368-unhexify-char (elt string (+ start 2))))))
+       (setq result (concat
+                     result (substring string 0 start)
+                     (char-to-string hex-code))
+             string (substring string (match-end 0)))))
+    ;; it seems clearer to do things this way than to just return:
+    ;; (concat result string)
+    (setq result (concat result string))
+    result))
+
+(defun rfc2368-parse-mailto-url (mailto-url)
+  "Parse MAILTO-URL, and return an alist of header-name, header-value pairs.
+MAILTO-URL should be a RFC 2368 (mailto) compliant url.  A cons cell w/ a
+key of 'Body' is a special case and is considered a header for this purpose.
+The returned alist is intended for use w/ the `compose-mail' interface.
+Note: make sure MAILTO-URL has been 'unhtmlized' (e.g. &amp; -> &), before
+calling this function."
+  (let ((case-fold-search t)
+       prequery query headers-alist)
+
+    (if (string-match rfc2368-mailto-regexp mailto-url)
+       (progn
+
+         (setq prequery
+               (match-string rfc2368-mailto-prequery-index mailto-url))
+         
+         (setq query
+               (match-string rfc2368-mailto-query-index mailto-url))
+
+         ;; build alist of header name-value pairs
+         (if (not (null query))
+             (setq headers-alist
+                   (mapcar
+                    (lambda (x)
+                      (let* ((temp-list (split-string x "="))
+                             (header-name (car temp-list))
+                             (header-value (cadr temp-list)))
+                        ;; return ("Header-Name" . "header-value")
+                        (cons
+                         (capitalize (rfc2368-unhexify-string header-name))
+                         (rfc2368-unhexify-string header-value))))
+                    (split-string query "&"))))
+
+         ;; deal w/ multiple 'To' recipients
+         (if prequery
+             (progn
+               (if (assoc "To" headers-alist)
+                   (let* ((our-cons-cell
+                           (assoc "To" headers-alist))
+                          (our-cdr
+                           (cdr our-cons-cell)))
+                     (setcdr our-cons-cell (concat our-cdr ", " prequery)))
+                 (setq headers-alist
+                       (cons (cons "To" prequery) headers-alist)))))
+         
+         headers-alist)
+      
+      (error "Failed to match a mailto: url"))
+    ))
+
+(provide 'rfc2368)
+
+;;; rfc2368.el ends here
diff --git a/utils/sasl/README.en b/utils/sasl/README.en
new file mode 100644 (file)
index 0000000..ab8fad8
--- /dev/null
@@ -0,0 +1,17 @@
+README: SASL library for Emacs.
+=========================================================
+
+How to compile elisp files:
+
+  cd lisp
+  emacs --batch --no-init-file --no-site-file \
+    --eval '(setq load-path (cons "." load-path))' \
+    --funcall batch-byte-compile *.el
+
+How to compile DL modules (Emacs 20.3 and later with DL patch):
+
+  cd src
+  gcc -shared -nostdlib -fPIC -I${EMACSSRCDIR}/src -o md5.so md5-dl.c -lcrypto
+  gcc -shared -nostdlib -fPIC -I${EMACSSRCDIR}/src -o sha1.so sha1-dl.c -lcrypto
+
+  Current version of DL modules require libcrypto library from OpenSSL.
diff --git a/utils/sasl/lisp/digest-md5.el b/utils/sasl/lisp/digest-md5.el
new file mode 100644 (file)
index 0000000..e72c535
--- /dev/null
@@ -0,0 +1,144 @@
+;;; digest-md5.el --- Compute DIGEST-MD5.
+
+;; Copyright (C) 1999 Kenichi OKADA
+
+;; Author: Kenichi OKADA <okada@opaopa.org>
+;;     Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+;; Keywords: DIGEST-MD5, HMAC-MD5, SASL, IMAP, POP, ACAP
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This program is implemented from draft-leach-digest-sasl-05.txt.
+;;
+;; It is caller's responsibility to base64-decode challenges and
+;; base64-encode responses in IMAP4 AUTHENTICATE command.
+;;
+;; Passphrase should be longer than 16 bytes. (See RFC 2195)
+
+;; Examples.
+;;
+;; (digest-md5-parse-digest-challenge 
+;;   "realm=\"elwood.innosoft.com\",nonce=\"OA6MG9tEQGm2hh\",qop=\"auth\",algorithm=md5-sess,charset=utf-8")
+;; => (realm "elwood.innosoft.com" nonce "OA6MG9tEQGm2hh" qop "auth" algorithm md5-sess charset utf-8)
+
+;; (digest-md5-build-response-value
+;;   "chris" "elwood.innosoft.com" "secret" "OA6MG9tEQGm2hh"
+;;   "OA6MHXh6VqTrRk" 1 "imap/elwood.innosoft.com" "auth")
+;; => "d388dad90d4bbd760a152321f2143af7"
+
+;;; Code:
+
+(require 'hmac-md5)
+(require 'unique-id)
+
+(defvar digest-md5-challenge nil)
+
+(defvar digest-md5-parse-digest-challenge-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?= "." table)
+    (modify-syntax-entry ?, "." table)
+    table)
+  "A syntax table for parsing digest-challenge attributes.")
+
+;;;###autoload
+(defun digest-md5-parse-digest-challenge (digest-challenge)
+  ;; return a property list of 
+  ;; (realm nonce qop-options stale maxbuf charset 
+  ;; algorithm cipher-opts auth-param).
+  (with-temp-buffer
+    (set-syntax-table digest-md5-parse-digest-challenge-syntax-table)
+    (insert digest-challenge)
+    (goto-char (point-min))
+    (insert "(")
+    (while (progn (forward-sexp) (not (eobp)))
+      (delete-char 1)
+      (insert " "))
+    (insert ")")
+    (condition-case nil
+       (setplist 'digest-md5-challenge (read (point-min-marker)))
+      (end-of-file
+       (error "Parse error in digest-challenge.")))))
+
+(defun digest-md5-digest-uri (serv-type host &optional serv-name)
+  (concat serv-type "/" host
+         (if (and serv-name
+                  (null (string= host serv-name)))
+             (concat "/" serv-name))))
+
+(defmacro digest-md5-cnonce ()
+  ;; It is RECOMMENDED that it 
+  ;; contain at least 64 bits of entropy.
+  '(concat (unique-id-m "") (unique-id-m "")))
+
+(defmacro digest-md5-challenge (prop)
+  (list 'get ''digest-md5-challenge prop))
+
+(defmacro digest-md5-build-response-value
+  (username realm passwd nonce cnonce nonce-count digest-uri qop)
+  `(encode-hex-string
+    (md5-binary
+     (concat
+      (encode-hex-string
+       (md5-binary (concat (md5-binary 
+                           (concat ,username 
+                                   ":" ,realm
+                                   ":" ,passwd))
+                          ":" ,nonce
+                          ":" ,cnonce
+                          (let ((authzid (digest-md5-challenge 'authzid)))
+                            (if authzid (concat ":" authzid) nil)))))
+      ":" ,nonce
+      ":" (format "%08x" ,nonce-count) ":" ,cnonce ":" ,qop ":"
+      (encode-hex-string
+       (md5-binary
+       (concat "AUTHENTICATE:" ,digest-uri
+               (if (string-equal "auth-int" ,qop)
+                   ":00000000000000000000000000000000"
+                 nil))))))))
+
+;;;###autoload
+(defun digest-md5-digest-response
+  (username realm passwd nonce cnonce nonce-count digest-uri
+           &optional charset qop maxbuf cipher authzid)
+  (concat
+   "username=\"" username "\","
+   "realm=\"" realm "\","
+   "nonce=\"" nonce "\","
+   (format "nc=%08x," nonce-count)
+   "cnonce=\"" cnonce "\","
+   "digest-uri=\"" digest-uri "\","
+   "response=" 
+   (digest-md5-build-response-value
+    username realm passwd nonce cnonce nonce-count digest-uri
+    (or qop "auth"))
+   ","
+   (mapconcat 
+    #'identity
+    (delq nil 
+         (mapcar (lambda (prop)
+                   (if (digest-md5-challenge prop)
+                       (format "%s=%s"
+                               prop (digest-md5-challenge prop))))
+                 '(charset qop maxbuf cipher authzid)))
+    ",")))
+  
+(provide 'digest-md5)
+
+;;; digest-md5.el ends here
diff --git a/utils/sasl/lisp/hex-util.el b/utils/sasl/lisp/hex-util.el
new file mode 100644 (file)
index 0000000..92a09ff
--- /dev/null
@@ -0,0 +1,73 @@
+;;; hex-util.el --- Functions to encode/decode hexadecimal string.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: data
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-when-compile
+  (defmacro hex-char-to-num (chr)
+    (` (let ((chr (, chr)))
+        (cond
+         ((and (<= ?a chr)(<= chr ?f)) (+ (- chr ?a) 10))
+         ((and (<= ?A chr)(<= chr ?F)) (+ (- chr ?A) 10))
+         ((and (<= ?0 chr)(<= chr ?9)) (- chr ?0))
+         (t (error "Invalid hexadecimal digit `%c'" chr))))))
+  (defmacro num-to-hex-char (num)
+    (` (aref "0123456789abcdef" (, num)))))
+
+(defun decode-hex-string (string)
+  "Decode hexadecimal STRING to octet string."
+  (let* ((len (length string))
+        (dst (make-string (/ len 2) 0))
+        (idx 0)(pos 0))
+    (while (< pos len)
+;;; logior and lsh are not byte-coded.
+;;;  (aset dst idx (logior (lsh (hex-char-to-num (aref string pos)) 4)
+;;;                        (hex-char-to-num (aref string (1+ pos)))))
+      (aset dst idx (+ (* (hex-char-to-num (aref string pos)) 16)
+                      (hex-char-to-num (aref string (1+ pos)))))
+      (setq idx (1+ idx)
+            pos (+ 2 pos)))
+    dst))
+
+(defun encode-hex-string (string)
+  "Encode octet STRING to hexadecimal string."
+  (let* ((len (length string))
+        (dst (make-string (* len 2) 0))
+        (idx 0)(pos 0))
+    (while (< pos len)
+;;; logand and lsh are not byte-coded.
+;;;  (aset dst idx (num-to-hex-char (logand (lsh (aref string pos) -4) 15)))
+      (aset dst idx (num-to-hex-char (/ (aref string pos) 16)))
+      (setq idx (1+ idx))
+;;;  (aset dst idx (num-to-hex-char (logand (aref string pos) 15)))
+      (aset dst idx (num-to-hex-char (% (aref string pos) 16)))
+      (setq idx (1+ idx)
+            pos (1+ pos)))
+    dst))
+
+(provide 'hex-util)
+
+;;; hex-util.el ends here
diff --git a/utils/sasl/lisp/hmac-def.el b/utils/sasl/lisp/hmac-def.el
new file mode 100644 (file)
index 0000000..7525c89
--- /dev/null
@@ -0,0 +1,85 @@
+;;; hmac-def.el --- A macro for defining HMAC functions.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This program is implemented from RFC 2104,
+;; "HMAC: Keyed-Hashing for Message Authentication".
+
+;;; Code:
+
+(defmacro define-hmac-function (name H B L &optional bit)
+  "Define a function NAME(TEXT KEY) which computes HMAC with function H.
+
+HMAC function is H(KEY XOR opad, H(KEY XOR ipad, TEXT)):
+
+H is a cryptographic hash function, such as SHA1 and MD5, which takes
+a string and return a digest of it (in binary form).
+B is a byte-length of a block size of H. (B=64 for both SHA1 and MD5.)
+L is a byte-length of hash outputs. (L=16 for MD5, L=20 for SHA1.)
+If BIT is non-nil, truncate output to specified bits."
+  (` (defun (, name) (text key)
+       (, (concat "Compute "
+                 (upcase (symbol-name name))
+                 " over TEXT with KEY."))
+       (let ((key-xor-ipad (make-string (, B) ?\x36))
+            (key-xor-opad (make-string (, B) ?\x5C))
+            (len (length key))
+            (pos 0))
+        (unwind-protect
+            (progn
+              ;; if `key' is longer than the block size, apply hash function
+              ;; to `key' and use the result as a real `key'.
+              (if (> len (, B))
+                  (setq key ((, H) key)
+                        len (, L)))
+              (while (< pos len)
+                (aset key-xor-ipad pos (logxor (aref key pos) ?\x36))
+                (aset key-xor-opad pos (logxor (aref key pos) ?\x5C))
+                (setq pos (1+ pos)))
+              (setq key-xor-ipad (unwind-protect
+                                     (concat key-xor-ipad text)
+                                   (fillarray key-xor-ipad 0))
+                    key-xor-ipad (unwind-protect
+                                     ((, H) key-xor-ipad)
+                                   (fillarray key-xor-ipad 0))
+                    key-xor-opad (unwind-protect
+                                     (concat key-xor-opad key-xor-ipad)
+                                   (fillarray key-xor-opad 0))
+                    key-xor-opad (unwind-protect
+                                     ((, H) key-xor-opad)
+                                   (fillarray key-xor-opad 0)))
+              ;; now `key-xor-opad' contains
+              ;; H(KEY XOR opad, H(KEY XOR ipad, TEXT)).
+              (, (if (and bit (< (/ bit 8) L))
+                     (` (substring key-xor-opad 0 (, (/ bit 8))))
+                   ;; return a copy of `key-xor-opad'.
+                   (` (concat key-xor-opad)))))
+          ;; cleanup.
+          (fillarray key-xor-ipad 0)
+          (fillarray key-xor-opad 0))))))
+
+(provide 'hmac-def)
+
+;;; hmac-def.el ends here
diff --git a/utils/sasl/lisp/hmac-md5.el b/utils/sasl/lisp/hmac-md5.el
new file mode 100644 (file)
index 0000000..9c936d0
--- /dev/null
@@ -0,0 +1,95 @@
+;;; hmac-md5.el --- Compute HMAC-MD5.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;;     Kenichi OKADA <okada@opaopa.org>
+;; Maintainer: Kenichi OKADA <okada@opaopa.org>
+;; Keywords: HMAC, RFC 2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Test cases from RFC 2202, "Test Cases for HMAC-MD5 and HMAC-SHA-1".
+;;
+;; (encode-hex-string (hmac-md5 "Hi There" (make-string 16 ?\x0b)))
+;;  => "9294727a3638bb1c13f48ef8158bfc9d"
+;;
+;; (encode-hex-string (hmac-md5 "what do ya want for nothing?" "Jefe"))
+;;  => "750c783e6ab0b503eaa86e310a5db738"
+;;
+;; (encode-hex-string (hmac-md5 (make-string 50 ?\xdd) (make-string 16 ?\xaa)))
+;;  => "56be34521d144c88dbb8c733f0e8b3f6"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   (make-string 50 ?\xcd)
+;;   (decode-hex-string "0102030405060708090a0b0c0d0e0f10111213141516171819")))
+;;  => "697eaf0aca3a3aea3a75164746ffaa79"
+;;
+;; (encode-hex-string
+;;  (hmac-md5 "Test With Truncation" (make-string 16 ?\x0c)))
+;;  => "56461ef2342edc00f9bab995690efd4c"
+;; (encode-hex-string
+;;  (hmac-md5-96 "Test With Truncation" (make-string 16 ?\x0c)))
+;;  => "56461ef2342edc00f9bab995"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   "Test Using Larger Than Block-Size Key - Hash Key First"
+;;   (make-string 80 ?\xaa)))
+;;  => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
+;;   (make-string 80 ?\xaa)))
+;;  => "6f630fad67cda0ee1fb1f562db3aa53e"
+
+;;; Code:
+
+(eval-when-compile (require 'hmac-def))
+(require 'hex-util)                    ; (decode-hex-string STRING)
+(require 'md5)                         ; expects (md5 STRING)
+
+;; We cannot define this function in md5.el because recent XEmacs provides
+;; built-in md5 function and provides feature 'md5 at startup.
+(if (and (featurep 'xemacs)
+        (fboundp 'md5)
+        (subrp (symbol-function 'md5))
+        (condition-case nil
+            ;; `md5' of XEmacs 21 takes 4th arg CODING (and 5th arg NOERROR).
+            (md5 "" nil nil 'binary)   ; => "fb5d2156096fa1f254352f3cc3fada7e"
+          (error nil)))
+    ;; XEmacs 21.
+    (defun md5-binary (string &optional start end)
+      "Return the MD5 of STRING in binary form."
+      (decode-hex-string (md5 string start end 'binary)))
+  ;; not XEmacs 21 and not DL.
+  (if (not (fboundp 'md5-binary))
+      (defun md5-binary (string)
+       "Return the MD5 of STRING in binary form."
+       (decode-hex-string (md5 string)))))
+
+(define-hmac-function hmac-md5 md5-binary 64 16) ; => (hmac-md5 TEXT KEY)
+;; (define-hmac-function hmac-md5-96 md5-binary 64 16 96)
+
+(provide 'hmac-md5)
+
+;;; hmac-md5.el ends here
diff --git a/utils/sasl/lisp/hmac-sha1.el b/utils/sasl/lisp/hmac-sha1.el
new file mode 100644 (file)
index 0000000..6b2beea
--- /dev/null
@@ -0,0 +1,80 @@
+;;; hmac-sha1.el --- Compute HMAC-SHA1.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104, HMAC-SHA1, SHA1, Cancel-Lock
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Test cases from RFC 2202, "Test Cases for HMAC-MD5 and HMAC-SHA-1".
+;;
+;; (encode-hex-string (hmac-sha1 "Hi There" (make-string 20 ?\x0b)))
+;;  => "b617318655057264e28bc0b6fb378c8ef146be00"
+;;
+;; (encode-hex-string (hmac-sha1 "what do ya want for nothing?" "Jefe"))
+;;  => "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"
+;;
+;; (encode-hex-string (hmac-sha1 (make-string 50 ?\xdd) (make-string 20 ?\xaa)))
+;;  => "125d7342b9ac11cd91a39af48aa17b4f63f175d3"
+;;
+;; (encode-hex-string
+;;  (hmac-sha1
+;;   (make-string 50 ?\xcd)
+;;   (decode-hex-string "0102030405060708090a0b0c0d0e0f10111213141516171819")))
+;;  => "4c9007f4026250c6bc8414f9bf50c86c2d7235da"
+;;
+;; (encode-hex-string
+;;  (hmac-sha1 "Test With Truncation" (make-string 20 ?\x0c)))
+;;  => "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04"
+;; (encode-hex-string
+;;  (hmac-sha1-96 "Test With Truncation" (make-string 20 ?\x0c)))
+;;  => "4c1a03424b55e07fe7f27be1"
+;;
+;; (encode-hex-string
+;;  (hmac-sha1
+;;   "Test Using Larger Than Block-Size Key - Hash Key First"
+;;   (make-string 80 ?\xaa)))
+;;  => "aa4ae5e15272d00e95705637ce8a3b55ed402112"
+;;
+;; (encode-hex-string
+;;  (hmac-sha1
+;;   "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
+;;   (make-string 80 ?\xaa)))
+;;  => "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"
+
+;;; Code:
+
+(eval-when-compile (require 'hmac-def))
+(require 'hex-util)                    ; (decode-hex-string STRING)
+(require 'sha1)                                ; expects (sha1 STRING)
+
+;;; For consintency with hmac-md5.el, we define this function here.
+(or (fboundp 'sha1-binary)
+    (defun sha1-binary (string)
+      "Return the SHA1 of STRING in binary form."
+      (decode-hex-string (sha1 string))))
+
+(define-hmac-function hmac-sha1 sha1-binary 64 20) ; => (hmac-sha1 TEXT KEY)
+;; (define-hmac-function hmac-sha1-96 sha1-binary 64 20 96)
+
+(provide 'hmac-sha1)
+
+;;; hmac-sha1.el ends here
diff --git a/utils/sasl/lisp/md5-dl.el b/utils/sasl/lisp/md5-dl.el
new file mode 100644 (file)
index 0000000..4bc12bf
--- /dev/null
@@ -0,0 +1,66 @@
+;;; md5-dl.el --- MD5 Message Digest Algorithm using DL module.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: MD5, RFC 1321
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(defvar md5-dl-module
+  (if (and (fboundp 'md5-string)
+          (subrp (symbol-function 'md5-string)))
+      nil
+    (if (fboundp 'dynamic-link)
+       (let ((path (expand-file-name "md5.so" exec-directory)))
+         (and (file-exists-p path)
+              path)))))
+
+(defvar md5-dl-handle
+  (and (stringp md5-dl-module)
+       (file-exists-p md5-dl-module)
+       (dynamic-link md5-dl-module)))
+
+;;; md5-dl-module provides `md5-string'.
+(dynamic-call "emacs_md5_init" md5-dl-handle)
+
+(defun md5-region (beg end)
+  (interactive "r")
+  (md5-string (buffer-substring-no-properties beg end)))
+
+;;; Note that XEmacs built-in version takes two more args: CODING and NOERROR.
+;;;###autoload
+(defun md5 (object &optional beg end)
+  "Return the MD5 (a secure message digest algorithm) of an object.
+OBJECT is either a string or a buffer.
+Optional arguments BEG and END denote buffer positions for computing the
+hash of a portion of OBJECT."
+  (if (stringp object)
+      (md5-string object)
+    (save-excursion
+      (set-buffer object)
+      (md5-region (or beg (point-min)) (or end (point-max))))))
+
+(provide 'md5-dl)
+(provide 'md5)
+
+;;; md5-dl.el ends here.
diff --git a/utils/sasl/lisp/md5-el.el b/utils/sasl/lisp/md5-el.el
new file mode 100644 (file)
index 0000000..a339cec
--- /dev/null
@@ -0,0 +1,408 @@
+;;; md5.el -- MD5 Message Digest Algorithm
+;;; Gareth Rees <gdr11@cl.cam.ac.uk>
+
+;; LCD Archive Entry:
+;; md5|Gareth Rees|gdr11@cl.cam.ac.uk|
+;; MD5 cryptographic message digest algorithm|
+;; 13-Nov-95|1.0|~/misc/md5.el.Z|
+
+;;; Details: ------------------------------------------------------------------
+
+;; This is a direct translation into Emacs LISP of the reference C
+;; implementation of the MD5 Message-Digest Algorithm written by RSA
+;; Data Security, Inc.
+;; 
+;; The algorithm takes a message (that is, a string of bytes) and
+;; computes a 16-byte checksum or "digest" for the message.  This digest
+;; is supposed to be cryptographically strong in the sense that if you
+;; are given a 16-byte digest D, then there is no easier way to
+;; construct a message whose digest is D than to exhaustively search the
+;; space of messages.  However, the robustness of the algorithm has not
+;; been proven, and a similar algorithm (MD4) was shown to be unsound,
+;; so treat with caution!
+;; 
+;; The C algorithm uses 32-bit integers; because GNU Emacs
+;; implementations provide 28-bit integers (with 24-bit integers on
+;; versions prior to 19.29), the code represents a 32-bit integer as the
+;; cons of two 16-bit integers.  The most significant word is stored in
+;; the car and the least significant in the cdr.  The algorithm requires
+;; at least 17 bits of integer representation in order to represent the
+;; carry from a 16-bit addition.
+
+;;; Usage: --------------------------------------------------------------------
+
+;; To compute the MD5 Message Digest for a message M (represented as a
+;; string or as a vector of bytes), call
+;; 
+;;   (md5-encode M)
+;; 
+;; which returns the message digest as a vector of 16 bytes.  If you
+;; need to supply the message in pieces M1, M2, ... Mn, then call
+;; 
+;;   (md5-init)
+;;   (md5-update M1)
+;;   (md5-update M2)
+;;   ...
+;;   (md5-update Mn)
+;;   (md5-final)
+
+;;; Copyright and licence: ----------------------------------------------------
+
+;; Copyright (C) 1995, 1996, 1997 by Gareth Rees
+;; Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
+;; 
+;; md5.el is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by the
+;; Free Software Foundation; either version 2, or (at your option) any
+;; later version.
+;; 
+;; md5.el is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+;; for more details.
+;; 
+;; The original copyright notice is given below, as required by the
+;; licence for the original code.  This code is distributed under *both*
+;; RSA's original licence and the GNU General Public Licence.  (There
+;; should be no problems, as the former is more liberal than the
+;; latter).
+
+;;; Original copyright notice: ------------------------------------------------
+
+;; Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
+;;
+;; License to copy and use this software is granted provided that it is
+;; identified as the "RSA Data Security, Inc. MD5 Message- Digest
+;; Algorithm" in all material mentioning or referencing this software or
+;; this function.
+;;
+;; License is also granted to make and use derivative works provided
+;; that such works are identified as "derived from the RSA Data
+;; Security, Inc. MD5 Message-Digest Algorithm" in all material
+;; mentioning or referencing the derived work.
+;;
+;; RSA Data Security, Inc. makes no representations concerning either
+;; the merchantability of this software or the suitability of this
+;; software for any particular purpose.  It is provided "as is" without
+;; express or implied warranty of any kind.
+;;
+;; These notices must be retained in any copies of any part of this
+;; documentation and/or software.
+
+;;; Code: ---------------------------------------------------------------------
+
+(defvar md5-program "md5"
+  "*Program that reads a message on its standard input and writes an
+MD5 digest on its output.")
+
+(defvar md5-maximum-internal-length 4096
+  "*The maximum size of a piece of data that should use the MD5 routines
+written in lisp.  If a message exceeds this, it will be run through an
+external filter for processing.  Also see the `md5-program' variable.
+This variable has no effect if you call the md5-init|update|final
+functions - only used by the `md5' function's simpler interface.")
+
+(defvar md5-bits (make-vector 4 0)
+  "Number of bits handled, modulo 2^64.
+Represented as four 16-bit numbers, least significant first.")
+(defvar md5-buffer (make-vector 4 '(0 . 0))
+  "Scratch buffer (four 32-bit integers).")
+(defvar md5-input (make-vector 64 0)
+  "Input buffer (64 bytes).")
+
+(defun md5-unhex (x)
+  (if (> x ?9)
+      (if (>= x ?a)
+         (+ 10 (- x ?a))
+       (+ 10 (- x ?A)))
+    (- x ?0)))
+
+(defun md5-encode (message)
+  "Encodes MESSAGE using the MD5 message digest algorithm.
+MESSAGE must be a string or an array of bytes.
+Returns a vector of 16 bytes containing the message digest."
+  (if (or (null md5-maximum-internal-length)
+          (<= (length message) md5-maximum-internal-length))
+      (progn
+       (md5-init)
+       (md5-update message)
+       (md5-final))
+    (save-excursion
+      (set-buffer (get-buffer-create " *md5-work*"))
+      (erase-buffer)
+      (insert message)
+      (call-process-region (point-min) (point-max)
+                          md5-program
+                          t (current-buffer))
+      ;; MD5 digest is 32 chars long
+      ;; mddriver adds a newline to make neaten output for tty
+      ;; viewing, make sure we leave it behind.
+      (let ((data (buffer-substring (point-min) (+ (point-min) 32)))
+           (vec (make-vector 16 0))
+           (ctr 0))
+       (while (< ctr 16)
+         (aset vec ctr (+ (* 16 (md5-unhex (aref data (* ctr 2))))
+                          (md5-unhex (aref data (1+ (* ctr 2))))))
+         (setq ctr (1+ ctr)))))))
+
+(defsubst md5-add (x y)
+  "Return 32-bit sum of 32-bit integers X and Y."
+  (let ((m (+ (car x) (car y)))
+        (l (+ (cdr x) (cdr y))))
+    (cons (logand 65535 (+ m (lsh l -16))) (logand l 65535))))
+
+;; FF, GG, HH and II are basic MD5 functions, providing transformations
+;; for rounds 1, 2, 3 and 4 respectively.  Each function follows this
+;; pattern of computation (where ROTATE(x,y) means rotate 32-bit value x
+;; by y bits to the left):
+;; 
+;;   FF(a,b,c,d,x,s,ac) = ROTATE(a + F(b,c,d) + x + ac,s) + b
+;; 
+;; so we use the macro `md5-make-step' to construct each one.  The
+;; helper functions F, G, H and I operate on 16-bit numbers; the full
+;; operation splits its inputs, operates on the halves separately and
+;; then puts the results together.
+
+(defsubst md5-F (x y z) (logior (logand x y) (logand (lognot x) z)))
+(defsubst md5-G (x y z) (logior (logand x z) (logand y (lognot z))))
+(defsubst md5-H (x y z) (logxor x y z))
+(defsubst md5-I (x y z) (logxor y (logior x (logand 65535 (lognot z)))))
+
+(defmacro md5-make-step (name func)
+  (`
+   (defun (, name) (a b c d x s ac)
+     (let*
+         ((m1 (+ (car a) ((, func) (car b) (car c) (car d)) (car x) (car ac)))
+          (l1 (+ (cdr a) ((, func) (cdr b) (cdr c) (cdr d)) (cdr x) (cdr ac)))
+          (m2 (logand 65535 (+ m1 (lsh l1 -16))))
+          (l2 (logand 65535 l1))
+          (m3 (logand 65535 (if (> s 15)
+                                (+ (lsh m2 (- s 32)) (lsh l2 (- s 16)))
+                              (+ (lsh m2 s) (lsh l2 (- s 16))))))
+          (l3 (logand 65535 (if (> s 15)
+                                (+ (lsh l2 (- s 32)) (lsh m2 (- s 16)))
+                              (+ (lsh l2 s) (lsh m2 (- s 16)))))))
+       (md5-add (cons m3 l3) b)))))
+
+(md5-make-step md5-FF md5-F)
+(md5-make-step md5-GG md5-G)
+(md5-make-step md5-HH md5-H)
+(md5-make-step md5-II md5-I)
+
+(defun md5-init ()
+  "Initialise the state of the message-digest routines."
+  (aset md5-bits 0 0)
+  (aset md5-bits 1 0)
+  (aset md5-bits 2 0)
+  (aset md5-bits 3 0)
+  (aset md5-buffer 0 '(26437 .  8961))
+  (aset md5-buffer 1 '(61389 . 43913))
+  (aset md5-buffer 2 '(39098 . 56574))
+  (aset md5-buffer 3 '( 4146 . 21622)))
+
+(defun md5-update (string)
+  "Update the current MD5 state with STRING (an array of bytes)."
+  (let ((len (length string))
+        (i 0)
+        (j 0))
+    (while (< i len)
+      ;; Compute number of bytes modulo 64
+      (setq j (% (/ (aref md5-bits 0) 8) 64))
+
+      ;; Store this byte (truncating to 8 bits to be sure)
+      (aset md5-input j (logand 255 (aref string i)))
+
+      ;; Update number of bits by 8 (modulo 2^64)
+      (let ((c 8) (k 0))
+        (while (and (> c 0) (< k 4))
+          (let ((b (aref md5-bits k)))
+            (aset md5-bits k (logand 65535 (+ b c)))
+            (setq c (if (> b (- 65535 c)) 1 0)
+                  k (1+ k)))))
+
+      ;; Increment number of bytes processed
+      (setq i (1+ i))
+
+      ;; When 64 bytes accumulated, pack them into sixteen 32-bit
+      ;; integers in the array `in' and then tranform them.
+      (if (= j 63)
+          (let ((in (make-vector 16 (cons 0 0)))
+                (k 0)
+                (kk 0))
+            (while (< k 16)
+              (aset in k (md5-pack md5-input kk))
+              (setq k (+ k 1) kk (+ kk 4)))
+            (md5-transform in))))))
+
+(defun md5-pack (array i)
+  "Pack the four bytes at ARRAY reference I to I+3 into a 32-bit integer."
+  (cons (+ (lsh (aref array (+ i 3)) 8) (aref array (+ i 2)))
+        (+ (lsh (aref array (+ i 1)) 8) (aref array (+ i 0)))))
+
+(defun md5-byte (array n b)
+  "Unpack byte B (0 to 3) from Nth member of ARRAY of 32-bit integers."
+  (let ((e (aref array n)))
+    (cond ((eq b 0) (logand 255 (cdr e)))
+          ((eq b 1) (lsh (cdr e) -8))
+          ((eq b 2) (logand 255 (car e)))
+          ((eq b 3) (lsh (car e) -8)))))
+
+(defun md5-final ()
+  (let ((in (make-vector 16 (cons 0 0)))
+        (j 0)
+        (digest (make-vector 16 0))
+        (padding))
+
+    ;; Save the number of bits in the message
+    (aset in 14 (cons (aref md5-bits 1) (aref md5-bits 0)))
+    (aset in 15 (cons (aref md5-bits 3) (aref md5-bits 2)))
+
+    ;; Compute number of bytes modulo 64
+    (setq j (% (/ (aref md5-bits 0) 8) 64))
+
+    ;; Pad out computation to 56 bytes modulo 64
+    (setq padding (make-vector (if (< j 56) (- 56 j) (- 120 j)) 0))
+    (aset padding 0 128)
+    (md5-update padding)
+
+    ;; Append length in bits and transform
+    (let ((k 0) (kk 0))
+      (while (< k 14)
+        (aset in k (md5-pack md5-input kk))
+        (setq k (+ k 1) kk (+ kk 4))))
+    (md5-transform in)
+
+    ;; Store the results in the digest
+    (let ((k 0) (kk 0))
+      (while (< k 4)
+        (aset digest (+ kk 0) (md5-byte md5-buffer k 0))
+        (aset digest (+ kk 1) (md5-byte md5-buffer k 1))
+        (aset digest (+ kk 2) (md5-byte md5-buffer k 2))
+        (aset digest (+ kk 3) (md5-byte md5-buffer k 3))
+        (setq k (+ k 1) kk (+ kk 4))))
+
+    ;; Return digest
+    digest))
+
+;; It says in the RSA source, "Note that if the Mysterious Constants are
+;; arranged backwards in little-endian order and decrypted with the DES
+;; they produce OCCULT MESSAGES!"  Security through obscurity?
+
+(defun md5-transform (in)
+  "Basic MD5 step. Transform md5-buffer based on array IN."
+  (let ((a (aref md5-buffer 0))
+        (b (aref md5-buffer 1))
+        (c (aref md5-buffer 2))
+        (d (aref md5-buffer 3)))
+    (setq
+     a (md5-FF a b c d (aref in  0)  7 '(55146 . 42104))
+     d (md5-FF d a b c (aref in  1) 12 '(59591 . 46934))
+     c (md5-FF c d a b (aref in  2) 17 '( 9248 . 28891))
+     b (md5-FF b c d a (aref in  3) 22 '(49597 . 52974))
+     a (md5-FF a b c d (aref in  4)  7 '(62844 .  4015))
+     d (md5-FF d a b c (aref in  5) 12 '(18311 . 50730))
+     c (md5-FF c d a b (aref in  6) 17 '(43056 . 17939))
+     b (md5-FF b c d a (aref in  7) 22 '(64838 . 38145))
+     a (md5-FF a b c d (aref in  8)  7 '(27008 . 39128))
+     d (md5-FF d a b c (aref in  9) 12 '(35652 . 63407))
+     c (md5-FF c d a b (aref in 10) 17 '(65535 . 23473))
+     b (md5-FF b c d a (aref in 11) 22 '(35164 . 55230))
+     a (md5-FF a b c d (aref in 12)  7 '(27536 .  4386))
+     d (md5-FF d a b c (aref in 13) 12 '(64920 . 29075))
+     c (md5-FF c d a b (aref in 14) 17 '(42617 . 17294))
+     b (md5-FF b c d a (aref in 15) 22 '(18868 .  2081))
+     a (md5-GG a b c d (aref in  1)  5 '(63006 .  9570))
+     d (md5-GG d a b c (aref in  6)  9 '(49216 . 45888))
+     c (md5-GG c d a b (aref in 11) 14 '( 9822 . 23121))
+     b (md5-GG b c d a (aref in  0) 20 '(59830 . 51114))
+     a (md5-GG a b c d (aref in  5)  5 '(54831 .  4189))
+     d (md5-GG d a b c (aref in 10)  9 '(  580 .  5203))
+     c (md5-GG c d a b (aref in 15) 14 '(55457 . 59009))
+     b (md5-GG b c d a (aref in  4) 20 '(59347 . 64456))
+     a (md5-GG a b c d (aref in  9)  5 '( 8673 . 52710))
+     d (md5-GG d a b c (aref in 14)  9 '(49975 .  2006))
+     c (md5-GG c d a b (aref in  3) 14 '(62677 .  3463))
+     b (md5-GG b c d a (aref in  8) 20 '(17754 .  5357))
+     a (md5-GG a b c d (aref in 13)  5 '(43491 . 59653))
+     d (md5-GG d a b c (aref in  2)  9 '(64751 . 41976))
+     c (md5-GG c d a b (aref in  7) 14 '(26479 .   729))
+     b (md5-GG b c d a (aref in 12) 20 '(36138 . 19594))
+     a (md5-HH a b c d (aref in  5)  4 '(65530 . 14658))
+     d (md5-HH d a b c (aref in  8) 11 '(34673 . 63105))
+     c (md5-HH c d a b (aref in 11) 16 '(28061 . 24866))
+     b (md5-HH b c d a (aref in 14) 23 '(64997 . 14348))
+     a (md5-HH a b c d (aref in  1)  4 '(42174 . 59972))
+     d (md5-HH d a b c (aref in  4) 11 '(19422 . 53161))
+     c (md5-HH c d a b (aref in  7) 16 '(63163 . 19296))
+     b (md5-HH b c d a (aref in 10) 23 '(48831 . 48240))
+     a (md5-HH a b c d (aref in 13)  4 '(10395 . 32454))
+     d (md5-HH d a b c (aref in  0) 11 '(60065 . 10234))
+     c (md5-HH c d a b (aref in  3) 16 '(54511 . 12421))
+     b (md5-HH b c d a (aref in  6) 23 '( 1160 .  7429))
+     a (md5-HH a b c d (aref in  9)  4 '(55764 . 53305))
+     d (md5-HH d a b c (aref in 12) 11 '(59099 . 39397))
+     c (md5-HH c d a b (aref in 15) 16 '( 8098 . 31992))
+     b (md5-HH b c d a (aref in  2) 23 '(50348 . 22117))
+     a (md5-II a b c d (aref in  0)  6 '(62505 .  8772))
+     d (md5-II d a b c (aref in  7) 10 '(17194 . 65431))
+     c (md5-II c d a b (aref in 14) 15 '(43924 .  9127))
+     b (md5-II b c d a (aref in  5) 21 '(64659 . 41017))
+     a (md5-II a b c d (aref in 12)  6 '(25947 . 22979))
+     d (md5-II d a b c (aref in  3) 10 '(36620 . 52370))
+     c (md5-II c d a b (aref in 10) 15 '(65519 . 62589))
+     b (md5-II b c d a (aref in  1) 21 '(34180 . 24017))
+     a (md5-II a b c d (aref in  8)  6 '(28584 . 32335))
+     d (md5-II d a b c (aref in 15) 10 '(65068 . 59104))
+     c (md5-II c d a b (aref in  6) 15 '(41729 . 17172))
+     b (md5-II b c d a (aref in 13) 21 '(19976 .  4513))
+     a (md5-II a b c d (aref in  4)  6 '(63315 . 32386))
+     d (md5-II d a b c (aref in 11) 10 '(48442 . 62005))
+     c (md5-II c d a b (aref in  2) 15 '(10967 . 53947))
+     b (md5-II b c d a (aref in  9) 21 '(60294 . 54161)))
+
+     (aset md5-buffer 0 (md5-add (aref md5-buffer 0) a))
+     (aset md5-buffer 1 (md5-add (aref md5-buffer 1) b))
+     (aset md5-buffer 2 (md5-add (aref md5-buffer 2) c))
+     (aset md5-buffer 3 (md5-add (aref md5-buffer 3) d))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Here begins the merger with the XEmacs API and the md5.el from the URL
+;;; package.  Courtesy wmperry@cs.indiana.edu
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun md5 (object &optional start end)
+  "Return the MD5 (a secure message digest algorithm) of an object.
+OBJECT is either a string or a buffer.
+Optional arguments START and END denote buffer positions for computing the
+hash of a portion of OBJECT."
+ (let ((buffer nil))
+    (unwind-protect
+       (save-excursion
+         (setq buffer (generate-new-buffer " *md5-work*"))
+         (set-buffer buffer)
+         (cond
+          ((bufferp object)
+           (insert-buffer-substring object start end))
+          ((stringp object)
+           (insert (if (or start end)
+                       (substring object start end)
+                     object)))
+          (t nil))
+         (prog1
+             (if (or (null md5-maximum-internal-length)
+                     (<= (point-max) md5-maximum-internal-length))
+                 (mapconcat
+                  (function (lambda (node) (format "%02x" node)))
+                  (md5-encode (buffer-string))
+                  "")
+               (call-process-region (point-min) (point-max)
+                                    shell-file-name
+                                    t buffer nil
+                                    shell-command-switch md5-program)
+               ;; MD5 digest is 32 chars long
+               ;; mddriver adds a newline to make neaten output for tty
+               ;; viewing, make sure we leave it behind.
+               (buffer-substring (point-min) (+ (point-min) 32)))
+           (kill-buffer buffer)))
+      (and buffer (buffer-name buffer) (kill-buffer buffer) nil))))
+
+(provide 'md5)
diff --git a/utils/sasl/lisp/md5.el b/utils/sasl/lisp/md5.el
new file mode 100644 (file)
index 0000000..634b2f0
--- /dev/null
@@ -0,0 +1,65 @@
+;;; md5.el --- MD5 Message Digest Algorithm.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: MD5, RFC 1321
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Examples from RFC 1321.
+;;
+;; (md5 "")
+;; => d41d8cd98f00b204e9800998ecf8427e
+;;
+;; (md5 "a")
+;; => 0cc175b9c0f1b6a831c399e269772661
+;;
+;; (md5 "abc")
+;; => 900150983cd24fb0d6963f7d28e17f72
+;;
+;; (md5 "message digest")
+;; => f96b697d7cb7938d525a2f31aaf161d0
+;;
+;; (md5 "abcdefghijklmnopqrstuvwxyz")
+;; => c3fcd3d76192e4007dfb496cca67e13b
+;;
+;; (md5 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
+;; => d174ab98d277d9f5a5611c2c9f419d9f
+;;
+;; (md5 "12345678901234567890123456789012345678901234567890123456789012345678901234567890")
+;; => 57edf4a22be3c955ac49da2e2107b67a
+
+;;; Code:
+
+(cond
+ ((and (fboundp 'md5)
+       (subrp (symbol-function 'md5)))
+  ;; recent XEmacs has `md5' as a built-in function.
+  ;; (and 'md5 is already provided.)
+  )
+ ((and (fboundp 'dynamic-link)
+       (file-exists-p (expand-file-name "md5.so" exec-directory)))
+  ;; Emacs with DL patch.
+  (require 'md5 "md5-dl"))
+ (t
+  (require 'md5 "md5-el")))
+
+;;; md5.el ends here.
diff --git a/utils/sasl/lisp/sasl.el b/utils/sasl/lisp/sasl.el
new file mode 100644 (file)
index 0000000..3e78040
--- /dev/null
@@ -0,0 +1,156 @@
+;;; sasl.el --- basic functions for SASL
+
+;; Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
+
+;; Author: Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SMTP, SASL, RFC2222
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Example.
+;;
+;; (base64-encode-string
+;;  (sasl-scram-md5-client-msg-2
+;;   (base64-decode-string "dGVzdHNhbHQBAAAAaW1hcEBlbGVhbm9yLmlubm9zb2Z0LmNvbQBqaGNOWmxSdVBiemlGcCt2TFYrTkN3")
+;;   (base64-decode-string "AGNocmlzADx0NG40UGFiOUhCMEFtL1FMWEI3MmVnQGVsZWFub3IuaW5ub3NvZnQuY29tPg==")
+;;   (scram-md5-make-salted-pass
+;;    "secret stuff" "testsalt")))
+;; => "AQAAAMg9jU8CeB4KOfk7sUhSQPs="
+;;
+;; (base64-encode-string
+;;  (scram-md5-make-server-msg-2
+;;   (base64-decode-string "dGVzdHNhbHQBAAAAaW1hcEBlbGVhbm9yLmlubm9zb2Z0LmNvbQBqaGNOWmxSdVBiemlGcCt2TFYrTkN3")
+;;   (base64-decode-string "AGNocmlzADx0NG40UGFiOUhCMEFtL1FMWEI3MmVnQGVsZWFub3IuaW5ub3NvZnQuY29tPg==")
+;;   (scram-make-security-info nil t 0)
+;;   "testsalt"
+;;   (scram-md5-make-salted-pass
+;;    "secret stuff" "testsalt")))
+;; => "U0odqYw3B7XIIW0oSz65OQ=="
+
+;;; Code:
+
+(require 'hmac-md5)
+
+(eval-when-compile
+  (require 'scram-md5)
+  (require 'digest-md5))
+
+(eval-and-compile
+  (autoload 'open-ssl-stream "ssl")
+  (autoload 'base64-decode-string "base64")
+  (autoload 'base64-encode-string "base64")
+  (autoload 'starttls-open-stream "starttls")
+  (autoload 'starttls-negotiate "starttls")
+  (autoload 'digest-md5-parse-digest-challenge "digest-md5")
+  (autoload 'digest-md5-digest-response "digest-md5")
+  (autoload 'scram-md5-make-salted-pass "scram-md5")
+  (autoload 'scram-md5-parse-server-msg-1 "scram-md5")
+  (autoload 'scram-md5-make-client-msg-1 "scram-md5"))
+
+;;; CRAM-MD5
+(defun sasl-cram-md5 (username passphrase challenge)
+  (let ((secure-word (copy-sequence passphrase)))
+    (setq secure-word (unwind-protect
+                         (hmac-md5 challenge secure-word)
+                       (fillarray secure-word 0))
+         secure-word (unwind-protect
+                         (encode-hex-string secure-word)
+                       (fillarray secure-word 0))
+         secure-word (unwind-protect
+                         (concat username " " secure-word)
+                       (fillarray secure-word 0)))))
+
+;;; PLAIN
+(defun sasl-plain (authorid authenid passphrase)
+  (concat authorid "\0" authenid "\0" passphrase))
+
+;;; SCRAM-MD5
+(eval-when-compile
+  (defvar sasl-scram-md5-client-security-info
+    (scram-make-security-info nil t 0)))
+
+(defun sasl-scram-md5-make-salted-pass (server-msg-1 passphrase)
+  (scram-md5-make-salted-pass
+   passphrase
+   (car
+    (scram-md5-parse-server-msg-1 server-msg-1))))
+
+(defun sasl-scram-md5-client-msg-1 (authenticate-id &optional authorize-id)
+  (scram-md5-make-client-msg-1 authenticate-id authorize-id))
+
+(defun sasl-scram-md5-client-msg-2 (server-msg-1 client-msg-1 salted-pass)
+  (let (client-proof client-key shared-key client-verifier)
+    (setq client-key
+         (scram-md5-make-client-key salted-pass))
+    (setq client-verifier
+         (scram-md5-make-client-verifier client-key))
+    (setq shared-key
+         (unwind-protect
+             (scram-md5-make-shared-key
+              server-msg-1
+              client-msg-1
+              sasl-scram-md5-client-security-info
+              client-verifier)
+           (fillarray client-verifier 0)))
+    (setq client-proof
+         (unwind-protect
+             (scram-md5-make-client-proof
+              client-key shared-key)
+           (fillarray client-key 0)
+           (fillarray shared-key 0)))
+    (unwind-protect
+       (scram-md5-make-client-msg-2
+        sasl-scram-md5-client-security-info
+        client-proof)
+      (fillarray client-proof 0))))
+            
+(defun sasl-scram-md5-authenticate-server (server-msg-1 
+                                          server-msg-2
+                                          client-msg-1
+                                          salted-pass)
+  (string= server-msg-2
+          (scram-md5-make-server-msg-2
+           server-msg-1
+           client-msg-1
+           sasl-scram-md5-client-security-info
+           (car
+            (scram-md5-parse-server-msg-1 server-msg-1))
+           salted-pass)))
+
+;;; DIGEST-MD5
+
+(defvar sasl-digest-md5-nonce-count 1)
+
+(defun sasl-digest-md5-digest-response (digest-challenge username passwd
+                                                        serv-type host &optional realm)
+  (digest-md5-parse-digest-challenge digest-challenge)
+  (digest-md5-digest-response
+   username
+   (or realm (digest-md5-challenge 'realm)) ;; need to check.
+   passwd
+   (digest-md5-challenge 'nonce)
+   (digest-md5-cnonce)
+   sasl-digest-md5-nonce-count
+   (digest-md5-digest-uri serv-type host) ;; MX host
+   ))
+
+(provide 'sasl)
+
+;;; sasl.el ends here
\ No newline at end of file
diff --git a/utils/sasl/lisp/scram-md5.el b/utils/sasl/lisp/scram-md5.el
new file mode 100644 (file)
index 0000000..6891600
--- /dev/null
@@ -0,0 +1,154 @@
+;;; scram-md5.el --- Compute SCRAM-MD5.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;;     Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SCRAM-MD5, HMAC-MD5, SASL, IMAP, POP, ACAP
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This program is implemented from draft-newman-auth-scram-03.txt.
+;;
+;; It is caller's responsibility to base64-decode challenges and
+;; base64-encode responses in IMAP4 AUTHENTICATE command.
+;;
+;; Passphrase should be longer than 16 bytes. (See RFC 2195)
+
+;; Examples.
+;;
+;; (scram-make-security-info nil t 0)
+;; => "^A^@^@^@"
+
+;;; Code:
+
+(require 'hmac-md5)
+(require 'unique-id)
+
+(defmacro scram-security-info-no-security-layer (security-info)
+  `(eq (logand (aref ,security-info 0) 1) 1))
+(defmacro scram-security-info-integrity-protection-layer (security-info)
+  `(eq (logand (aref ,security-info 0) 2) 2))
+(defmacro scram-security-info-buffer-size (security-info)
+  `(let ((ssecinfo ,security-info))
+     (+ (lsh (aref ssecinfo 1) 16)
+       (lsh (aref ssecinfo 2) 8)
+       (aref ssecinfo 3))))
+
+(defun scram-make-security-info (integrity-protection-layer
+                                no-security-layer buffer-size)
+  (let ((csecinfo (make-string 4 0)))
+    (when integrity-protection-layer
+      (aset csecinfo 0 2))
+    (if no-security-layer
+       (aset csecinfo 0 (logior (aref csecinfo 0) 1))
+      (aset csecinfo 1
+           (lsh (logand buffer-size (lsh 255 16)) -16))
+      (aset csecinfo 2
+           (lsh (logand buffer-size (lsh 255 8)) -8))
+      (aset csecinfo 3 (logand buffer-size 255)))
+    csecinfo))
+
+(defun scram-make-unique-nonce ()      ; 8*OCTET, globally unique.
+  ;; For example, concatenated string of process-identifier, system-clock,
+  ;; sequence-number, random-number, and domain-name.
+  (let (id)
+    (unwind-protect
+       (concat "<" 
+               (setq id (unique-id-m ".sasl"))
+               "@" (system-name) ">")
+      (fillarray id 0))))
+
+(defun scram-xor-string (str1 str2)
+  ;; (length str1) == (length str2) == (length dst) == 16 (in SCRAM-MD5)
+  (let* ((len (length str1))
+         (dst (make-string len 0))
+         (pos 0))
+    (while (< pos len)
+      (aset dst pos (logxor (aref str1 pos) (aref str2 pos)))
+      (setq pos (1+ pos)))
+    dst))
+
+(defun scram-md5-make-client-msg-1 (authenticate-id &optional authorize-id)
+  "Make an initial client message from AUTHENTICATE-ID and AUTHORIZE-ID.
+If AUTHORIZE-ID is the same as AUTHENTICATE-ID, it may be omitted."
+  (let (nonce)
+    (unwind-protect
+       (concat authorize-id "\0" authenticate-id "\0" 
+               (setq nonce (scram-make-unique-nonce)))
+      (fillarray nonce 0))))
+
+(defun scram-md5-parse-server-msg-1 (server-msg-1)
+  "Parse SERVER-MSG-1 and return a list of (SALT SECURITY-INFO SERVICE-ID)."
+  (when (and (> (length server-msg-1) 16)
+            (eq (string-match "[^@]+@[^\0]+\0" server-msg-1 12) 12))
+    (list (substring server-msg-1 0 8) ; salt
+         (substring server-msg-1 8 12) ; server-security-info
+         (substring server-msg-1       ; service-id
+                    12 (1- (match-end 0))))))
+
+(defun scram-md5-make-salted-pass (passphrase salt)
+  (hmac-md5 salt passphrase))
+
+(defun scram-md5-make-client-key (salted-pass)
+  (md5-binary salted-pass))
+
+(defun scram-md5-make-client-verifier (client-key)
+  (md5-binary client-key))
+
+(defun scram-md5-make-shared-key (server-msg-1
+                                 client-msg-1
+                                 client-security-info
+                                 client-verifier)
+  (let (buff)
+    (unwind-protect
+       (hmac-md5
+        (setq buff
+              (concat server-msg-1 client-msg-1 client-security-info))
+        client-verifier)
+      (fillarray buff 0))))
+
+(defun scram-md5-make-client-proof (client-key shared-key)
+  (scram-xor-string client-key shared-key))
+
+(defun scram-md5-make-client-msg-2 (client-security-info client-proof)
+  (concat client-security-info client-proof))
+
+(defun scram-md5-make-server-msg-2 (server-msg-1
+                                   client-msg-1
+                                   client-security-info
+                                   salt salted-pass)
+  (let (buff server-salt)
+    (setq server-salt
+         (hmac-md5 salt salted-pass))
+    (unwind-protect
+       (hmac-md5
+        (setq buff
+              (concat
+               client-msg-1
+               server-msg-1
+               client-security-info))
+        server-salt)
+      (fillarray server-salt 0)
+      (fillarray buff 0))))
+
+(provide 'scram-md5)
+
+;;; scram-md5.el ends here
diff --git a/utils/sasl/lisp/sha1-dl.el b/utils/sasl/lisp/sha1-dl.el
new file mode 100644 (file)
index 0000000..06f51a2
--- /dev/null
@@ -0,0 +1,56 @@
+;;; sha1-dl.el --- SHA1 Secure Hash Algorithm using DL module.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: SHA1, FIPS 180-1
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(provide 'sha1-dl)                     ; beware of circular dependency.
+(eval-when-compile (require 'sha1))    ; sha1-dl-module.
+
+(defvar sha1-dl-handle
+  (and (stringp sha1-dl-module)
+       (file-exists-p sha1-dl-module)
+       (dynamic-link sha1-dl-module)))
+
+;;; sha1-dl-module provides `sha1-string' and `sha1-binary'.
+(dynamic-call "emacs_sha1_init" sha1-dl-handle)
+
+(defun sha1-region (beg end)
+  (sha1-string (buffer-substring-no-properties beg end)))
+
+(defun sha1 (object &optional beg end)
+  "Return the SHA1 (Secure Hash Algorithm) of an object.
+OBJECT is either a string or a buffer.
+Optional arguments BEG and END denote buffer positions for computing the
+hash of a portion of OBJECT."
+  (if (stringp object)
+      (sha1-string object)
+    (save-excursion
+      (set-buffer object)
+      (sha1-region (or beg (point-min)) (or end (point-max))))))
+
+(provide 'sha1-dl)
+
+;;; sha1-dl.el ends here
diff --git a/utils/sasl/lisp/sha1-el.el b/utils/sasl/lisp/sha1-el.el
new file mode 100644 (file)
index 0000000..96d52a3
--- /dev/null
@@ -0,0 +1,408 @@
+;;; sha1-el.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: SHA1, FIPS 180-1
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This program is implemented from the definition of SHA-1 in FIPS PUB
+;; 180-1 (Federal Information Processing Standards Publication 180-1),
+;; "Announcing the Standard for SECURE HASH STANDARD".
+;; <URL:http://www.itl.nist.gov/div897/pubs/fip180-1.htm>
+;; EXCEPTION:
+;;  * Two optimizations taken from GnuPG/cipher/sha1.c.
+;;
+;; BUGS:
+;;  * It is assumed that length of input string is less than 2^29 bytes.
+;;  * It is caller's responsibility to make string (or region) unibyte.
+
+;;; Code:
+
+(require 'hex-util)
+
+;;;
+;;; external SHA1 function.
+;;;
+
+(defvar sha1-maximum-internal-length 500
+  "*Maximum length of message to use lisp version of SHA1 function.
+If message is longer than this, `sha1-program' is used instead.
+
+If this variable is set to 0, use extarnal program only.
+If this variable is set to nil, use internal function only.")
+
+(defvar sha1-program '("openssl" "sha1")
+  "*Name of program to compute SHA1.
+It must be a string \(program name\) or list of strings \(name and its args\).")
+
+(defun sha1-string-external (string)
+  ;; `with-temp-buffer' is new in v20, so we do not use it.
+  (save-excursion
+    (let (buffer)
+      (unwind-protect
+         (let (prog args)
+           (if (consp sha1-program)
+               (setq prog (car sha1-program)
+                     args (cdr sha1-program))
+             (setq prog sha1-program
+                   args nil))
+           (setq buffer (set-buffer
+                         (generate-new-buffer " *sha1 external*")))
+           (insert string)
+           (apply (function call-process-region)
+                  (point-min)(point-max)
+                  prog t t nil args)
+           ;; SHA1 is 40 bytes long in hexadecimal form.
+           (buffer-substring (point-min)(+ (point-min) 40)))
+       (and buffer
+            (buffer-name buffer)
+            (kill-buffer buffer))))))
+
+(defun sha1-region-external (beg end)
+  (sha1-string-external (buffer-substring-no-properties beg end)))
+
+;;;
+;;; internal SHA1 function.
+;;;
+
+(eval-when-compile
+  ;; optional second arg of string-to-number is new in v20.
+  (defconst sha1-K0-high 23170)                ; (string-to-number "5A82" 16)
+  (defconst sha1-K0-low  31129)                ; (string-to-number "7999" 16)
+  (defconst sha1-K1-high 28377)                ; (string-to-number "6ED9" 16)
+  (defconst sha1-K1-low  60321)                ; (string-to-number "EBA1" 16)
+  (defconst sha1-K2-high 36635)                ; (string-to-number "8F1B" 16)
+  (defconst sha1-K2-low  48348)                ; (string-to-number "BCDC" 16)
+  (defconst sha1-K3-high 51810)                ; (string-to-number "CA62" 16)
+  (defconst sha1-K3-low  49622)                ; (string-to-number "C1D6" 16)
+
+;;; original definition of sha1-F0.
+;;; (defmacro sha1-F0 (B C D)
+;;;   (` (logior (logand (, B) (, C))
+;;;         (logand (lognot (, B)) (, D)))))
+;;; a little optimization from GnuPG/cipher/sha1.c.
+  (defmacro sha1-F0 (B C D)
+    (` (logxor (, D) (logand (, B) (logxor (, C) (, D))))))
+  (defmacro sha1-F1 (B C D)
+    (` (logxor (, B) (, C) (, D))))
+;;; original definition of sha1-F2.
+;;; (defmacro sha1-F2 (B C D)
+;;;   (` (logior (logand (, B) (, C))
+;;;         (logand (, B) (, D))
+;;;         (logand (, C) (, D)))))
+;;; a little optimization from GnuPG/cipher/sha1.c.
+  (defmacro sha1-F2 (B C D)
+    (` (logior (logand (, B) (, C))
+              (logand (, D) (logior (, B) (, C))))))
+  (defmacro sha1-F3 (B C D)
+    (` (logxor (, B) (, C) (, D))))
+
+  (defmacro sha1-S1  (W-high W-low)
+    (` (let ((W-high (, W-high))
+            (W-low  (, W-low)))
+        (setq S1W-high (+ (% (* W-high 2) 65536)
+                          (/ W-low (, (/ 65536 2)))))
+        (setq S1W-low (+ (/ W-high (, (/ 65536 2)))
+                         (% (* W-low 2) 65536))))))
+  (defmacro sha1-S5  (A-high A-low)
+    (` (progn
+        (setq S5A-high (+ (% (* (, A-high) 32) 65536)
+                          (/ (, A-low) (, (/ 65536 32)))))
+        (setq S5A-low  (+ (/ (, A-high) (, (/ 65536 32)))
+                          (% (* (, A-low) 32) 65536))))))
+  (defmacro sha1-S30 (B-high B-low)
+    (` (progn
+        (setq S30B-high (+ (/ (, B-high) 4)
+                           (* (% (, B-low) 4) (, (/ 65536 4)))))
+        (setq S30B-low  (+ (/ (, B-low) 4)
+                           (* (% (, B-high) 4) (, (/ 65536 4))))))))
+
+  (defmacro sha1-OP (round)
+    (` (progn
+        (sha1-S5 sha1-A-high sha1-A-low)
+        (sha1-S30 sha1-B-high sha1-B-low)
+        (setq sha1-A-low (+ ((, (intern (format "sha1-F%d" round)))
+                             sha1-B-low sha1-C-low sha1-D-low)
+                            sha1-E-low
+                            (, (symbol-value
+                                (intern (format "sha1-K%d-low" round))))
+                            (aref block-low idx)
+                            (progn
+                              (setq sha1-E-low sha1-D-low)
+                              (setq sha1-D-low sha1-C-low)
+                              (setq sha1-C-low S30B-low)
+                              (setq sha1-B-low sha1-A-low)
+                              S5A-low)))
+        (setq carry (/ sha1-A-low 65536))
+        (setq sha1-A-low (% sha1-A-low 65536))
+        (setq sha1-A-high (% (+ ((, (intern (format "sha1-F%d" round)))
+                                 sha1-B-high sha1-C-high sha1-D-high)
+                                sha1-E-high
+                                (, (symbol-value
+                                    (intern (format "sha1-K%d-high" round))))
+                                (aref block-high idx)
+                                (progn
+                                  (setq sha1-E-high sha1-D-high)
+                                  (setq sha1-D-high sha1-C-high)
+                                  (setq sha1-C-high S30B-high)
+                                  (setq sha1-B-high sha1-A-high)
+                                  S5A-high)
+                                carry)
+                             65536)))))
+
+  (defmacro sha1-add-to-H (H X)
+    (` (progn
+        (setq (, (intern (format "sha1-%s-low" H)))
+              (+ (, (intern (format "sha1-%s-low" H)))
+                 (, (intern (format "sha1-%s-low" X)))))
+        (setq carry (/ (, (intern (format "sha1-%s-low" H))) 65536))
+        (setq (, (intern (format "sha1-%s-low" H)))
+              (% (, (intern (format "sha1-%s-low" H))) 65536))
+        (setq (, (intern (format "sha1-%s-high" H)))
+              (% (+ (, (intern (format "sha1-%s-high" H)))
+                    (, (intern (format "sha1-%s-high" X)))
+                    carry)
+                 65536)))))
+  )
+
+;;; buffers (H0 H1 H2 H3 H4).
+(defvar sha1-H0-high)
+(defvar sha1-H0-low)
+(defvar sha1-H1-high)
+(defvar sha1-H1-low)
+(defvar sha1-H2-high)
+(defvar sha1-H2-low)
+(defvar sha1-H3-high)
+(defvar sha1-H3-low)
+(defvar sha1-H4-high)
+(defvar sha1-H4-low)
+
+(defun sha1-block (block-high block-low)
+  (let (;; step (c) --- initialize buffers (A B C D E).
+       (sha1-A-high sha1-H0-high) (sha1-A-low sha1-H0-low)
+       (sha1-B-high sha1-H1-high) (sha1-B-low sha1-H1-low)
+       (sha1-C-high sha1-H2-high) (sha1-C-low sha1-H2-low)
+       (sha1-D-high sha1-H3-high) (sha1-D-low sha1-H3-low)
+       (sha1-E-high sha1-H4-high) (sha1-E-low sha1-H4-low)
+       (idx 16))
+    ;; step (b).
+    (let (;; temporary variables used in sha1-S1 macro.
+         S1W-high S1W-low)
+      (while (< idx 80)
+       (sha1-S1 (logxor (aref block-high (- idx 3))
+                        (aref block-high (- idx 8))
+                        (aref block-high (- idx 14))
+                        (aref block-high (- idx 16)))
+                (logxor (aref block-low  (- idx 3))
+                        (aref block-low  (- idx 8))
+                        (aref block-low  (- idx 14))
+                        (aref block-low  (- idx 16))))
+       (aset block-high idx S1W-high)
+       (aset block-low  idx S1W-low)
+       (setq idx (1+ idx))))
+    ;; step (d).
+    (setq idx 0)
+    (let (;; temporary variables used in sha1-OP macro.
+         S5A-high S5A-low S30B-high S30B-low carry)
+      (while (< idx 20) (sha1-OP 0) (setq idx (1+ idx)))
+      (while (< idx 40) (sha1-OP 1) (setq idx (1+ idx)))
+      (while (< idx 60) (sha1-OP 2) (setq idx (1+ idx)))
+      (while (< idx 80) (sha1-OP 3) (setq idx (1+ idx))))
+    ;; step (e).
+    (let (;; temporary variables used in sha1-add-to-H macro.
+         carry)
+      (sha1-add-to-H H0 A)
+      (sha1-add-to-H H1 B)
+      (sha1-add-to-H H2 C)
+      (sha1-add-to-H H3 D)
+      (sha1-add-to-H H4 E))))
+
+(defun sha1-binary (string)
+  "Return the SHA1 of STRING in binary form."
+  (let (;; prepare buffers for a block. byte-length of block is 64.
+       ;; input block is split into two vectors.
+       ;;
+       ;; input block: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ...
+       ;; block-high:  +-0-+       +-1-+       +-2-+       +-3-+
+       ;; block-low:         +-0-+       +-1-+       +-2-+       +-3-+
+       ;;
+       ;; length of each vector is 80, and elements of each vector are
+       ;; 16bit integers.  elements 0x10-0x4F of each vector are
+       ;; assigned later in `sha1-block'.
+       (block-high (eval-when-compile (make-vector 80 nil)))
+       (block-low  (eval-when-compile (make-vector 80 nil))))
+    (unwind-protect
+       (let* (;; byte-length of input string.
+              (len (length string))
+              (lim (* (/ len 64) 64))
+              (rem (% len 4))
+              (idx 0)(pos 0))
+         ;; initialize buffers (H0 H1 H2 H3 H4).
+         (setq sha1-H0-high 26437      ; (string-to-number "6745" 16)
+               sha1-H0-low  8961       ; (string-to-number "2301" 16)
+               sha1-H1-high 61389      ; (string-to-number "EFCD" 16)
+               sha1-H1-low  43913      ; (string-to-number "AB89" 16)
+               sha1-H2-high 39098      ; (string-to-number "98BA" 16)
+               sha1-H2-low  56574      ; (string-to-number "DCFE" 16)
+               sha1-H3-high 4146       ; (string-to-number "1032" 16)
+               sha1-H3-low  21622      ; (string-to-number "5476" 16)
+               sha1-H4-high 50130      ; (string-to-number "C3D2" 16)
+               sha1-H4-low  57840)     ; (string-to-number "E1F0" 16)
+         ;; loop for each 64 bytes block.
+         (while (< pos lim)
+           ;; step (a).
+           (setq idx 0)
+           (while (< idx 16)
+             (aset block-high idx (+ (* (aref string pos) 256)
+                                     (aref string (1+ pos))))
+             (setq pos (+ pos 2))
+             (aset block-low  idx (+ (* (aref string pos) 256)
+                                     (aref string (1+ pos))))
+             (setq pos (+ pos 2))
+             (setq idx (1+ idx)))
+           (sha1-block block-high block-low))
+         ;; last block.
+         (if (prog1
+                 (< (- len lim) 56)
+               (setq lim (- len rem))
+               (setq idx 0)
+               (while (< pos lim)
+                 (aset block-high idx (+ (* (aref string pos) 256)
+                                         (aref string (1+ pos))))
+                 (setq pos (+ pos 2))
+                 (aset block-low  idx (+ (* (aref string pos) 256)
+                                         (aref string (1+ pos))))
+                 (setq pos (+ pos 2))
+                 (setq idx (1+ idx)))
+               ;; this is the last (at most) 32bit word.
+               (cond
+                ((= rem 3)
+                 (aset block-high idx (+ (* (aref string pos) 256)
+                                         (aref string (1+ pos))))
+                 (setq pos (+ pos 2))
+                 (aset block-low  idx (+ (* (aref string pos) 256)
+                                         128)))
+                ((= rem 2)
+                 (aset block-high idx (+ (* (aref string pos) 256)
+                                         (aref string (1+ pos))))
+                 (aset block-low  idx 32768))
+                ((= rem 1)
+                 (aset block-high idx (+ (* (aref string pos) 256)
+                                         128))
+                 (aset block-low  idx 0))
+                (t ;; (= rem 0)
+                 (aset block-high idx 32768)
+                 (aset block-low  idx 0)))
+               (setq idx (1+ idx))
+               (while (< idx 16)
+                 (aset block-high idx 0)
+                 (aset block-low  idx 0)
+                 (setq idx (1+ idx))))
+             ;; last block has enough room to write the length of string.
+             (progn
+               ;; write bit length of string to last 4 bytes of the block.
+               (aset block-low  15 (* (% len 8192) 8))
+               (setq len (/ len 8192))
+               (aset block-high 15 (% len 65536))
+               ;; XXX: It is not practical to compute SHA1 of
+               ;;      such a huge message on emacs.
+               ;; (setq len (/ len 65536))     ; for 64bit emacs.
+               ;; (aset block-low  14 (% len 65536))
+               ;; (aset block-high 14 (/ len 65536))
+               (sha1-block block-high block-low))
+           ;; need one more block.
+           (sha1-block block-high block-low)
+           (fillarray block-high 0)
+           (fillarray block-low  0)
+           ;; write bit length of string to last 4 bytes of the block.
+           (aset block-low  15 (* (% len 8192) 8))
+           (setq len (/ len 8192))
+           (aset block-high 15 (% len 65536))
+           ;; XXX: It is not practical to compute SHA1 of
+           ;;      such a huge message on emacs.
+           ;; (setq len (/ len 65536))         ; for 64bit emacs.
+           ;; (aset block-low  14 (% len 65536))
+           ;; (aset block-high 14 (/ len 65536))
+           (sha1-block block-high block-low))
+         ;; make output string (in binary form).
+         (let ((result (make-string 20 0)))
+           (aset result  0 (/ sha1-H0-high 256))
+           (aset result  1 (% sha1-H0-high 256))
+           (aset result  2 (/ sha1-H0-low  256))
+           (aset result  3 (% sha1-H0-low  256))
+           (aset result  4 (/ sha1-H1-high 256))
+           (aset result  5 (% sha1-H1-high 256))
+           (aset result  6 (/ sha1-H1-low  256))
+           (aset result  7 (% sha1-H1-low  256))
+           (aset result  8 (/ sha1-H2-high 256))
+           (aset result  9 (% sha1-H2-high 256))
+           (aset result 10 (/ sha1-H2-low  256))
+           (aset result 11 (% sha1-H2-low  256))
+           (aset result 12 (/ sha1-H3-high 256))
+           (aset result 13 (% sha1-H3-high 256))
+           (aset result 14 (/ sha1-H3-low  256))
+           (aset result 15 (% sha1-H3-low  256))
+           (aset result 16 (/ sha1-H4-high 256))
+           (aset result 17 (% sha1-H4-high 256))
+           (aset result 18 (/ sha1-H4-low  256))
+           (aset result 19 (% sha1-H4-low  256))
+           result))
+      ;; do not leave a copy of input string.
+      (fillarray block-high nil)
+      (fillarray block-low  nil))))
+
+(defun sha1-string-internal (string)
+  (encode-hex-string (sha1-binary string)))
+
+(defun sha1-region-internal (beg end)
+  (sha1-string-internal (buffer-substring-no-properties beg end)))
+
+;;;
+;;; application interface.
+;;;
+
+(defun sha1-region (beg end)
+  (if (and sha1-maximum-internal-length
+          (> (abs (- end beg)) sha1-maximum-internal-length))
+      (sha1-region-external beg end)
+    (sha1-region-internal beg end)))
+
+(defun sha1-string (string)
+  (if (and sha1-maximum-internal-length
+          (> (length string) sha1-maximum-internal-length))
+      (sha1-string-external string)
+    (sha1-string-internal string)))
+
+(defun sha1 (object &optional beg end)
+  "Return the SHA1 (Secure Hash Algorithm) of an object.
+OBJECT is either a string or a buffer.
+Optional arguments BEG and END denote buffer positions for computing the
+hash of a portion of OBJECT."
+  (if (stringp object)
+      (sha1-string object)
+    (save-excursion
+      (set-buffer object)
+      (sha1-region (or beg (point-min)) (or end (point-max))))))
+
+(provide 'sha1-el)
+
+;;; sha1-el.el ends here
diff --git a/utils/sasl/lisp/sha1.el b/utils/sasl/lisp/sha1.el
new file mode 100644 (file)
index 0000000..a7265b6
--- /dev/null
@@ -0,0 +1,77 @@
+;;; sha1.el --- SHA1 Secure Hash Algorithm.
+
+;; Copyright (C) 1999 Shuhei KOBAYASHI
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;;     Kenichi OKADA <okada@opaopa.org>
+;; Maintainer: Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SHA1, FIPS 180-1
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Examples from FIPS PUB 180-1.
+;; <URL:http://www.itl.nist.gov/div897/pubs/fip180-1.htm>
+;;
+;; (sha1 "abc")
+;; => a9993e364706816aba3e25717850c26c9cd0d89d
+;;
+;; (sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
+;; => 84983e441c3bd26ebaae4aa1f95129e5e54670f1
+;;
+;; (sha1 (make-string 1000000 ?a))
+;; => 34aa973cd4c4daa4f61eeb2bdbad27316534016f
+
+;;; Code:
+
+(require 'hex-util)
+
+(eval-when-compile
+  (defun-maybe sha1-string (a)))
+
+(defvar sha1-dl-module
+  (if (and (fboundp 'sha1-string)
+          (subrp (symbol-function 'sha1-string)))
+      nil
+    (if (fboundp 'dynamic-link)
+       (let ((path (expand-file-name "sha1.so" exec-directory)))
+         (and (file-exists-p path)
+              path)))))
+
+(cond
+ (sha1-dl-module
+  ;; Emacs with DL patch.
+  (require 'sha1-dl))
+ (t
+  (require 'sha1-el)))
+
+;; compatibility for another sha1.el by Keiichi Suzuki.
+(defun sha1-encode (string)
+  (decode-hex-string 
+   (sha1-string string)))
+(defun sha1-encode-binary (string)
+  (decode-hex-string
+   (sha1-string string)))
+
+(make-obsolete 'sha1-encode "It's old API.")
+(make-obsolete 'sha1-encode-binary "It's old API.")
+
+(provide 'sha1)
+
+;;; sha1.el ends here
diff --git a/utils/sasl/lisp/unique-id.el b/utils/sasl/lisp/unique-id.el
new file mode 100644 (file)
index 0000000..f80b2d4
--- /dev/null
@@ -0,0 +1,92 @@
+;;; unique-id.el --- Compute DIGEST-MD5.
+
+;; Copyright (C) 1999 Kenichi OKADA
+
+;; Author: Katsumi Yamaoka  <yamaoka@jpl.org>
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;;; Code:
+
+;;; Gnus 5.8.3: message.el
+
+(defvar unique-id-m-char nil)
+
+;; If you ever change this function, make sure the new version
+;; cannot generate IDs that the old version could.
+;; You might for example insert a "." somewhere (not next to another dot
+;; or string boundary), or modify the suffix string (default to "fsf").
+(defun unique-id-m (&optional suffix)
+  ;; Don't use microseconds from (current-time), they may be unsupported.
+  ;; Instead we use this randomly inited counter.
+  (setq unique-id-m-char
+       (% (1+ (or unique-id-m-char (logand (random t) (1- (lsh 1 20)))))
+          ;; (current-time) returns 16-bit ints,
+          ;; and 2^16*25 just fits into 4 digits i base 36.
+          (* 25 25)))
+  (let ((tm (current-time)))
+    (concat
+     (if (memq system-type '(ms-dos emx vax-vms))
+        (let ((user (downcase (user-login-name))))
+          (while (string-match "[^a-z0-9_]" user)
+            (aset user (match-beginning 0) ?_))
+          user)
+       (unique-id-m-number-base36 (user-uid) -1))
+     (unique-id-m-number-base36 (+ (car   tm)
+                                  (lsh (% unique-id-m-char 25) 16)) 4)
+     (unique-id-m-number-base36 (+ (nth 1 tm)
+                                  (lsh (/ unique-id-m-char 25) 16)) 4)
+     ;; Append the suffix, because while the generated ID is unique to
+     ;; the application, other applications might otherwise generate
+     ;; the same ID via another algorithm.
+     (or suffix ".fsf"))))
+
+(defun unique-id-m-number-base36 (num len)
+  (if (if (< len 0)
+         (<= num 0)
+       (= len 0))
+      ""
+    (concat (unique-id-m-number-base36 (/ num 36) (1- len))
+           (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+                                 (% num 36))))))
+
+\f
+;;; Wanderlust 1.0.3: wl-draft.el, wl-mule.el
+
+(defun unique-id-w-random-alphabet ()
+  (let ((alphabet '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M
+                      ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z)))
+    (nth (abs (% (random) 26)) alphabet)))
+
+(defun unique-id-w ()
+  (let ((time (current-time)))
+    (format "%d.%d.%d.%d%c"
+           (car time) (nth 1 time) (nth 2 time)
+           (random 100000)
+           (unique-id-w-random-alphabet))))
+
+\f
+;;; VM 6.75: vm-misc.el
+
+(defun unique-id-v ()
+  (let ((time (current-time)))
+    (format "%d.%d.%d.%d"
+           (car time) (nth 1 time) (nth 2 time)
+           (random 1000000))))
+
+\f
+;;; X-PGP-Sig 1.3.5.1
+
+(defun unique-id-x (&optional length)
+  (let ((i (or length 16))
+       s)
+    (while (> i 0)
+      (setq i (1- i)
+           s (concat s (char-to-string (+ (/ (* 94 (% (abs (random)) 100))
+                                             100) 33)))))
+    s))
+
+(provide 'unique-id)
+
+;;; unique-id.el ends here
+
diff --git a/utils/sasl/src/md5-dl.c b/utils/sasl/src/md5-dl.c
new file mode 100644 (file)
index 0000000..bdd17a1
--- /dev/null
@@ -0,0 +1,85 @@
+/* Dynamic loading module to compute MD5 for Emacs 20 with DL support.
+
+   Copyright (C) 1999 Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING.  If not, write to
+   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+*/
+
+/*
+  How to compile: (OpenSSL is required)
+
+  gcc -shared -nostdlib -fPIC -I${EMACS}/src -o md5.so md5-dl.c -lcrypto
+
+*/
+
+#include "config.h"
+#include "lisp.h"
+
+/* for 20.2 (not tested)
+#ifndef STRING_BYTES
+#define STRING_BYTES(STR) ((STR)->size)
+#define make_unibyte_string make_string
+#endif
+*/
+
+#include <openssl/md5.h>
+
+static unsigned char to_hex[] = {'0', '1', '2', '3', '4', '5', '6', '7',
+                                 '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+DEFUN ("md5-string", Fmd5_string, Smd5_string, 1, 1, 0,
+  "Return the MD5 of the STRING.")
+  (string)
+     Lisp_Object string;
+{
+  unsigned char *md;
+  unsigned char md_hex[MD5_DIGEST_LENGTH*2];
+  int i, j;
+
+  CHECK_STRING (string, 0);
+
+  md = MD5 (XSTRING (string)->data, STRING_BYTES (XSTRING (string)),
+            (unsigned char *) 0);
+
+  for (i = j = 0; i < MD5_DIGEST_LENGTH; i++, j++)
+    {
+      md_hex[j]   = to_hex[(unsigned int)(md[i] / 16)];
+      md_hex[++j] = to_hex[(unsigned int)(md[i] & 15)];
+    }
+
+  return make_unibyte_string (md_hex, sizeof(md_hex));
+}
+
+/*
+ * setting
+ */
+static struct Lisp_Subr *s_md5_string;
+
+void
+emacs_md5_init ()
+{
+  s_md5_string = (struct Lisp_Subr *) xmalloc (sizeof (struct Lisp_Subr));
+  bcopy (&Smd5_string, s_md5_string, sizeof (struct Lisp_Subr));
+  defsubr (s_md5_string);
+}
+
+void
+emacs_md5_fini ()
+{
+  undefsubr (s_md5_string);
+  free (s_md5_string);
+}
diff --git a/utils/sasl/src/sha1-dl.c b/utils/sasl/src/sha1-dl.c
new file mode 100644 (file)
index 0000000..045fef8
--- /dev/null
@@ -0,0 +1,84 @@
+/* Dynamic loading module to compute SHA-1 for Emacs 20 with DL support.
+
+   Copyright (C) 1999 Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING.  If not, write to
+   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+*/
+
+/*
+  How to compile: (OpenSSL is required)
+
+  gcc -shared -nostdlib -fPIC -I${EMACS}/src -o sha1.so sha1-dl.c -lcrypto
+
+*/
+
+#include "config.h"
+#include "lisp.h"
+
+/* for 20.2 (not tested)
+#ifndef STRING_BYTES
+#define STRING_BYTES(STR) ((STR)->size)
+#define make_unibyte_string make_string
+#endif
+*/
+
+#include <openssl/sha.h>
+
+static unsigned char to_hex[] = {'0', '1', '2', '3', '4', '5', '6', '7',
+                                 '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+DEFUN ("sha1-string", Fsha1_string, Ssha1_string, 1, 1, 0,
+  "Return the SHA-1 of the STRING.")
+  (string)
+     Lisp_Object string;
+{
+  unsigned char *md;
+  unsigned char md_hex[SHA_DIGEST_LENGTH*2];
+  int i, j;
+
+  CHECK_STRING (string, 0);
+
+  md = SHA1 (XSTRING (string)->data, STRING_BYTES (XSTRING (string)),
+             (unsigned char *) 0);
+
+  for (i = j = 0; i < SHA_DIGEST_LENGTH; i++, j++)
+    {
+      md_hex[j]   = to_hex[(unsigned int)(md[i] / 16)];
+      md_hex[++j] = to_hex[(unsigned int)(md[i] & 15)];
+    }
+
+  return make_unibyte_string (md_hex, sizeof(md_hex));
+}
+
+/*
+ * setting
+ */
+static struct Lisp_Subr *s_sha1_string;
+
+void
+emacs_sha1_init ()
+{
+  s_sha1_string = (struct Lisp_Subr *) xmalloc (sizeof (struct Lisp_Subr));
+  bcopy (&Ssha1_string, s_sha1_string, sizeof (struct Lisp_Subr));
+  defsubr (s_sha1_string);
+}
+
+void
+emacs_sha1_fini ()
+{
+  undefsubr (s_sha1_string);
+  free (s_sha1_string);
+}
diff --git a/utils/ssl.el b/utils/ssl.el
new file mode 100644 (file)
index 0000000..f8a9998
--- /dev/null
@@ -0,0 +1,201 @@
+;;; ssl.el,v --- ssl functions for emacsen without them builtin
+;; Author: wmperry
+;; Created: 1999/10/14 12:44:18
+;; Version: 1.2
+;; Keywords: comm
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Copyright (c) 1995, 1996 by William M. Perry <wmperry@cs.indiana.edu>
+;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc.
+;;;
+;;; This file is part of GNU Emacs.
+;;;
+;;; GNU Emacs is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 2, or (at your option)
+;;; any later version.
+;;;
+;;; GNU Emacs is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;;; Boston, MA 02111-1307, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(require 'cl)
+(require 'base64)
+
+(eval-and-compile
+  (condition-case ()
+      (require 'custom)
+    (error nil))
+  (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
+      nil ;; We've got what we needed
+    ;; We have the old custom-library, hack around it!
+    (defmacro defgroup (&rest args)
+      nil)
+    (defmacro defcustom (var value doc &rest args) 
+      (` (defvar (, var) (, value) (, doc))))))
+
+(defgroup ssl nil
+  "Support for `Secure Sockets Layer' encryption."
+  :group 'comm)
+  
+(defcustom ssl-certificate-directory "~/.w3/certs/"
+  "*Directory to store CA certificates in"
+  :group 'ssl
+  :type 'directory)
+
+(defcustom ssl-rehash-program-name "c_rehash"
+  "*Program to run after adding a cert to a directory .
+Run with one argument, the directory name."
+  :group 'ssl
+  :type 'string)
+
+(defcustom ssl-view-certificate-program-name "x509"
+  "*The program to run to provide a human-readable view of a certificate."
+  :group 'ssl
+  :type 'string)
+
+(defcustom ssl-view-certificate-program-arguments '("-text" "-inform" "DER")
+  "*Arguments that should be passed to the certificate viewing program.
+The certificate is piped to it.
+Maybe a way of passing a file should be implemented"
+  :group 'ssl
+  :type 'list)
+
+(defcustom ssl-certificate-directory-style 'ssleay
+  "*Style of cert database to use, the only valid value right now is `ssleay'.
+This means a directory of pem encoded certificates with hash symlinks."
+  :group 'ssl
+  :type '(choice (const :tag "SSLeay" :value ssleay)
+                (const :tag "OpenSSL" :value openssl)))
+
+(defcustom ssl-certificate-verification-policy 0
+  "*How far up the certificate chain we should verify."
+  :group 'ssl
+  :type '(choice (const :tag "No verification" :value 0)
+                (const :tag "Verification required" :value 1)
+                (const :tag "Reject connection if verification fails" :value 3)
+                (const :tag "SSL_VERIFY_CLIENT_ONCE" :value 5)))
+
+(defcustom ssl-program-name "openssl"
+  "*The program to run in a subprocess to open an SSL connection."
+  :group 'ssl
+  :type 'string)
+
+(defcustom ssl-program-arguments
+  '("s_client"
+    "-quiet"
+    "-host" host
+    "-port" service
+    "-verify" (int-to-string ssl-certificate-verification-policy)
+    "-CApath" ssl-certificate-directory
+    )
+  "*Arguments that should be passed to the program `ssl-program-name'.
+This should be used if your SSL program needs command line switches to
+specify any behaviour (certificate file locations, etc).
+The special symbols 'host and 'port may be used in the list of arguments
+and will be replaced with the hostname and service/port that will be connected
+to."
+  :group 'ssl
+  :type 'list)
+
+(defun ssl-certificate-information (der)
+  "Return an assoc list of information about a certificate in DER format."
+  (let ((certificate (concat "-----BEGIN CERTIFICATE-----\n"
+                            (base64-encode-string der)
+                            "\n-----END CERTIFICATE-----\n"))
+       (exit-code 0))
+    (save-excursion
+      (set-buffer (get-buffer-create " *openssl*"))
+      (erase-buffer)
+      (insert certificate)
+      (setq exit-code (condition-case ()
+                         (call-process-region (point-min) (point-max)
+                                              ssl-program-name
+                                              t (list (current-buffer) nil) t
+                                              "x509"
+                                              "-subject" ; Print the subject DN
+                                              "-issuer" ; Print the issuer DN
+                                              "-dates" ; Both before and after dates
+                                              "-serial" ; print out serial number
+                                              "-noout" ; Don't spit out the certificate
+                                              )
+                       (error -1)))
+      (if (/= exit-code 0)
+         nil
+       (let ((vals nil))
+         (goto-char (point-min))
+         (while (re-search-forward "^\\([^=\n\r]+\\)\\s *=\\s *\\(.*\\)" nil t)
+           (push (cons (match-string 1) (match-string 2)) vals))
+         vals)))))
+  
+(defun ssl-accept-ca-certificate ()
+  "Ask if the user is willing to accept a new CA certificate. The buffer-name
+should be the intended name of the certificate, and the buffer should probably
+be in DER encoding"
+  ;; TODO, check if it is really new or if we already know it
+  (let* ((process-connection-type nil)
+        (tmpbuf (generate-new-buffer "X509 CA Certificate Information"))
+        (response (save-excursion
+                    (and (eq 0 
+                             (apply 'call-process-region
+                                    (point-min) (point-max) 
+                                    ssl-view-certificate-program-name 
+                                    nil tmpbuf t
+                                    ssl-view-certificate-program-arguments))
+                         (switch-to-buffer tmpbuf)
+                         (goto-char (point-min))
+                         (or (recenter) t)
+                         (yes-or-no-p
+                          "Accept this CA to vouch for secure server identities? ")
+                         (kill-buffer tmpbuf)))))
+    (if (not response)
+       nil
+      (if (not (file-directory-p ssl-certificate-directory))
+         (make-directory ssl-certificate-directory))
+      (case ssl-certificate-directory-style
+       (ssleay
+        (base64-encode-region (point-min) (point-max))
+        (goto-char (point-min))
+        (insert "-----BEGIN CERTIFICATE-----\n")
+        (goto-char (point-max))
+        (insert "-----END CERTIFICATE-----\n")
+        (let ((f (expand-file-name
+                  (concat (file-name-sans-extension (buffer-name)) ".pem")
+                  ssl-certificate-directory)))
+          (write-file f)
+          (call-process ssl-rehash-program-name
+                        nil nil nil
+                        (expand-file-name ssl-certificate-directory))))))))
+
+(defun open-ssl-stream (name buffer host service)
+  "Open a SSL connection for a service to a host.
+Returns a subprocess-object to represent the connection.
+Input and output work as for subprocesses; `delete-process' closes it.
+Args are NAME BUFFER HOST SERVICE.
+NAME is name for process.  It is modified if necessary to make it unique.
+BUFFER is the buffer (or buffer-name) to associate with the process.
+ Process output goes at end of that buffer, unless you specify
+ an output stream or filter function to handle the output.
+ BUFFER may be also nil, meaning that this process is not associated
+ with any buffer
+Third arg is name of the host to connect to, or its IP address.
+Fourth arg SERVICE is name of the service desired, or an integer
+specifying a port number to connect to."
+  (if (integerp service) (setq service (int-to-string service)))
+  (let* ((process-connection-type nil)
+        (port service)
+        (proc (eval
+               (`
+                (start-process name buffer ssl-program-name
+                               (,@ ssl-program-arguments))))))
+    (process-kill-without-query proc)
+    proc))
+
+(provide 'ssl)
diff --git a/utils/wl-mailto.el b/utils/wl-mailto.el
new file mode 100644 (file)
index 0000000..09fb0c6
--- /dev/null
@@ -0,0 +1,130 @@
+;;; wl-mailto.el --- some mailto support for wanderlust
+
+;;; Copyright (C) 1999 Sen Nagata
+
+;; Author: Sen Nagata <sen@eccosys.com>
+;; Version: 0.5
+;; License: GPL 2
+;; Warning: not optimized at all
+
+;; This file is not a part of GNU Emacs.
+
+;;; Commentary:
+;;
+;; required elisp packages:
+;;
+;;   -wl (>= 0.9.6?)
+;;   
+;;   -rfc2368.el
+;;   -thingatpt.el or browse-url.el
+;;
+;; installation:
+;;
+;;   -put this file (and rfc2368.el) in an appropriate directory (so emacs 
+;;    can find it)
+;;
+;;   <necessary>
+;;   -put:
+;;
+;;     (add-hook 'wl-init-hook (lambda () (require 'wl-mailto)))
+;;
+;;    in .emacs or .wl
+;;
+;; details:
+;;
+;;   this package provides a number of interactive functions
+;; (commands) for the user.  each of the commands ultimately creates a
+;; draft message based on some information.  the names of the commands
+;; and brief descriptions are:
+;;
+;;     1) wl-mailto-compose-message-from-mailto-url
+;;            make a draft message from a user-specified mailto: url
+;;
+;;     2) wl-mailto-compose-message-from-mailto-url-at-point
+;;            make a draft message from a mailto: url at point
+;;
+;; usage:
+;;
+;;   -invoke wl
+;;   -try out the commands mentioned above in 'details'
+
+;;; History:
+;;
+;; 0.5
+;;
+;;   wl-user-agent functionality merged into wl-draft.el, so removed
+;;    dependency
+;;
+;; 1999-06-24:
+;;
+;;   incorporated a patch from Kenichi OKADA for
+;;     wl-mailto-compose-message-from-mailto-url-at-point
+;;
+;; 1999-06-11:
+;;
+;;   fixed a typo
+;; 
+;; 0.4
+;;
+;; 1999-06-01:
+;;
+;;   checkdoc checking
+;;   xemacs compatibility
+;;
+;; 1999-05-31:
+;;
+;;   rewrote to use rfc2368.el and wl-user-agent.el
+
+;;; Code:
+(defconst wl-mailto-version "wl-mailto.el 0.5")
+
+;; how should we handle the dependecy on wl?
+;; will this work?
+(eval-when-compile 
+  (require 'wl))
+
+;; use rfc2368 support -- should be usable for things other than wl too
+(require 'rfc2368)
+
+;; yucky compatibility stuff -- someone help me w/ this, please...
+(if (and (string-match "^XEmacs \\([0-9.]+\\)" (emacs-version))
+        (< (string-to-int (match-string 1 (emacs-version))) 21))
+    ;; for xemacs versions less than 21, use browse-url.el
+    (progn
+      (require 'browse-url)
+      (fset 'wl-mailto-url-at-point 
+           'browse-url-url-at-point))
+  ;; for everything else, use thingatpt.el
+  (progn
+    (require 'thingatpt)
+    (fset 'wl-mailto-url-at-point
+         (lambda () 
+           (thing-at-point 'url)))))
+
+(defun wl-mailto-compose-message-from-mailto-url (url &optional dummy)
+  "Compose a message from URL (RFC 2368).
+The optional second argument, DUMMY, exists to match the interface 
+provided by `browse-url-mail' (w3) -- DUMMY does not do anything."
+  (interactive "sURL: ")
+  (if (string-match rfc2368-mailto-regexp url)
+      (let* ((other-headers (rfc2368-parse-mailto-url url))
+            (to (cdr (assoc-ignore-case "to" other-headers)))
+            (subject (cdr (assoc-ignore-case "subject" other-headers))))
+
+       (wl-user-agent-compose to subject other-headers))
+    (message "Not a mailto: url.")))
+
+;; prepare a message from a mailto: url at point
+(defun wl-mailto-compose-message-from-mailto-url-at-point ()
+  "Draft a new message based on URL (RFC 2368) at point."
+  (interactive)
+  (let ((url (wl-mailto-url-at-point)))
+    (if (and url (string-match rfc2368-mailto-regexp url))
+       (wl-mailto-compose-message-from-mailto-url url)
+      ;; tell the user that we didn't find a mailto: url at point
+      (message "No mailto: url detected at point."))))
+
+;; since this will be used via 'require'...
+(provide 'wl-mailto)
+
+;;; wl-mailto.el ends here
diff --git a/wl/ChangeLog b/wl/ChangeLog
new file mode 100644 (file)
index 0000000..7485720
--- /dev/null
@@ -0,0 +1,31 @@
+2000-03-30  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * wl-demo.el (wl-title-logo): Refer wl-icon-dir.
+
+       * wl-folder.el (wl-create-folder-entity-from-buffer):
+       Fixed problem when '}' character is contained in folder name.
+
+       * wl-xmas.el (wl-make-modeline): Consider plugged status.
+
+2000-03-29  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-fldmgr.el (wl-fldmgr-add-completion-hashtb): New variable.
+       (wl-fldmgr-add-completion-all-completions):
+       Use wl-fldmgr-add-completion-hashtb.
+
+2000-03-28  Daiki Ueno <ueno@kiss.kake.info.waseda.ac.jp>
+
+       * wl-fldmgr.el (wl-fldmgr-add-completion-all-completions,
+       wl-fldmgr-add-completion-subr): New functions.
+       * wl-folder.el (wl-folder-completion-func): New variable.
+       * wl-summary.el (wl-summary-read-folder):
+       Use wl-folder-completion-func.
+
+       * wl-refile.el: Eliminate throw & catch.
+
+       * wl.el (wl-plugged-sending-queue-status): Fixed.
+
+2000-03-27  Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+       * wl-draft.el (wl-draft): Put category property on
+       mail-header-separator.
diff --git a/wl/tm-wl.el b/wl/tm-wl.el
new file mode 100644 (file)
index 0000000..885dd7e
--- /dev/null
@@ -0,0 +1,285 @@
+;;; wl-mime.el -- tm implementations of MIME processing on Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:32:32 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(autoload 'mime/editor-mode "tm-edit" nil t)
+(autoload 'mime/edit-again "tm-edit" nil t)
+
+(eval-when-compile (require 'tm-edit))
+
+(defalias 'wl-draft-editor-mode 'mime/editor-mode)
+
+(defun wl-draft-decode-message-in-buffer (&optional default-content-type)
+  (when default-content-type 
+    (insert "Content-type: " default-content-type "\n")
+    (insert "\n"))
+  (mime-editor::edit-again 'code-conversion))
+
+(defun wl-draft-yank-current-message-entity ()
+  "Yank currently displayed message entity. 
+By setting following-method as yank-content."  
+  (let ((wl-draft-buffer (current-buffer))
+       (mime-viewer/following-method-alist 
+        (list (cons 'wl-message-original-mode 
+                    (function wl-draft-yank-to-draft-buffer)))))
+    (if (get-buffer (wl-current-message-buffer))
+       (save-excursion
+         (save-restriction
+           (set-buffer (wl-current-message-buffer))
+           (setq mime::preview/mother-buffer nil)
+           (widen)
+           (mime-viewer/follow-content))))))
+
+(defmacro wl-draft-enclose-digest-region (beg end)
+  (` (mime-editor/enclose-region "digest" (, beg) (, end))))
+
+(defun wl-draft-preview-message ()
+  (interactive)
+  (let ((mime-viewer/content-header-filter-hook 'wl-highlight-headers)
+       (mime-viewer/ignored-field-regexp "^:$")
+       (mime-editor/translate-buffer-hook 
+        (append
+         (list 'wl-draft-config-exec)
+         mime-editor/translate-buffer-hook)))
+    (mime-editor/preview-message)
+    (let ((buffer-read-only nil))
+    (let ((buffer-read-only nil))
+      (when wl-highlight-body-too 
+       (wl-highlight-body))
+      (run-hooks 'wl-draft-preview-message-hook)))))
+
+(defmacro wl-draft-caesar-region (beg end)
+  (` (tm:caesar-region)))
+
+(defalias 'wl-draft-insert-message 'mime-editor/insert-message)
+
+(defalias 'wl-draft-insert-mail 'mime-editor/insert-mail)
+
+;;; Message
+
+(defun wl-message-decode-mode (outbuf inbuf)
+  (let ((mime-viewer/content-header-filter-hook 'wl-highlight-headers))
+    (mime/viewer-mode nil nil nil inbuf outbuf)))
+
+(defun wl-message-decode-with-all-header (outbuf inbuf)
+  (let ((mime-viewer/ignored-field-regexp "^:$")
+       (mime-viewer/content-header-filter-hook 'wl-highlight-headers))
+    (mime/viewer-mode nil nil nil inbuf outbuf)))
+
+(defun wl-message-delete-mime-out-buf ()
+  (let (mime-out-buf mime-out-win)
+    (if (setq mime-out-buf (get-buffer mime/output-buffer-name))
+       (if (setq mime-out-win (get-buffer-window mime-out-buf))
+           (delete-window mime-out-win)))))
+
+(defun wl-message-request-partial (folder number msgdb)
+  (elmo-set-work-buf
+   (elmo-read-msg-no-cache folder number (current-buffer) msgdb)
+   (mime/parse-message nil nil)))
+
+(defalias 'wl-message-read            'mime-viewer/scroll-up-content)
+(defalias 'wl-message-next-content    'mime-viewer/next-content)
+(defalias 'wl-message-prev-content    'mime-viewer/previous-content)
+(defalias 'wl-message-play-content    'mime-viewer/play-content)
+(defalias 'wl-message-extract-content 'mime-viewer/extract-content)
+(defalias 'wl-message-quit            'mime-viewer/quit)
+(defalias 'wl-message-button-dispatcher 'tm:button-dispatcher)
+
+;;; Summary
+(defun wl-summary-burst ()
+  (interactive)
+  (let ((raw-buf (wl-message-get-original-buffer))
+       (i 0)
+       target 
+       children message-entity content-type)
+    (save-excursion
+      (setq target wl-summary-buffer-folder-name)
+      (while (not (elmo-folder-writable-p target))
+       (setq target 
+             (wl-summary-read-folder wl-default-folder "to extract to ")))
+      (wl-summary-set-message-buffer-or-redisplay)
+      (set-buffer raw-buf)
+      (setq children (mime::content-info/children mime::article/content-info))
+      (message "Bursting...")
+      (while children
+       (setq content-type (mime::content-info/type (car children)))
+       (when (string= "message/rfc822" (downcase content-type))
+         (message (format "Bursting...%s" (setq i (+ 1 i))))
+         (setq message-entity 
+               (car (mime::content-info/children (car children))))
+         (save-restriction
+           (narrow-to-region (mime::content-info/point-min message-entity)
+                             (mime::content-info/point-max message-entity))
+           (elmo-append-msg target
+                            (buffer-substring (point-min) (point-max))
+                            (std11-field-body "Message-ID"))))
+       (setq children (cdr children)))
+      (message "Bursting...done."))
+    (if (elmo-folder-plugged-p target)
+       (elmo-commit target))
+    (wl-summary-sync-update3)))
+
+;; internal variable.
+(defvar wl-mime-save-dir nil "Last saved directory.")
+;;; Yet another save method.
+(defun wl-mime-save-content (beg end cal)
+  (goto-char beg)
+  (let* ((name
+         (save-restriction
+           (narrow-to-region beg end)
+           (mime-article/get-filename cal)))
+        (encoding (cdr (assq 'encoding cal)))
+        (filename (read-file-name "Save to file: "
+                                  (expand-file-name
+                                   (or name ".")
+                                   (or wl-mime-save-dir 
+                                       wl-tmp-dir))))
+        tmp-buf)
+    (while (file-directory-p filename)
+      (setq filename (read-file-name "Please set filename (not directory): "
+                                    filename)))
+    (if (file-exists-p filename)
+        (or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
+            (error "Not saved")))
+    (setq wl-mime-save-dir (file-name-directory filename))
+    (setq tmp-buf (generate-new-buffer (file-name-nondirectory filename)))
+    (re-search-forward "\n\n")
+    (append-to-buffer tmp-buf (match-end 0) end)
+    (save-excursion
+      (set-buffer tmp-buf)
+      (mime-decode-region (point-min)(point-max) encoding)
+      (as-binary-output-file (write-file filename))
+      (kill-buffer tmp-buf))))
+
+;;; Yet another combine method.
+(defun wl-mime-combine-message/partial-pieces (beg end cal)
+  (interactive)
+  (let* (folder
+        (msgdb (save-excursion
+                 (set-buffer wl-message-buffer-cur-summary-buffer)
+                 (setq folder wl-summary-buffer-folder-name)
+                 wl-summary-buffer-msgdb))
+        (mime-viewer/content-header-filter-hook 'wl-highlight-headers)
+        (id (cdr (assoc "id" cal)))
+        (mother mime::article/preview-buffer)
+        (target (cdr (assq 'major-mode cal)))
+        (article-buffer (buffer-name (current-buffer)))
+        (subject-buf (eval (cdr (assq 'summary-buffer-exp cal))))
+        subject-id overviews
+        (root-dir (expand-file-name
+                   (concat "m-prts-" (user-login-name)) mime/tmp-dir))
+        full-file)
+    (setq root-dir (concat root-dir "/" (replace-as-filename id)))
+    (setq full-file (concat root-dir "/FULL"))
+    (if (null target)
+       (error "%s is not supported. Sorry." target))
+    (if (or (file-exists-p full-file)
+           (not (y-or-n-p "Merge partials?")))
+       (mime-article/decode-message/partial beg end cal)
+      (message "Merging...")
+      (let (cinfo the-id parameters)
+       (setq subject-id 
+             (eword-decode-string
+              (decode-mime-charset-string 
+               (std11-field-body "Subject")
+               wl-summary-buffer-mime-charset)))
+       (if (string-match "[0-9\n]+" subject-id)
+           (setq subject-id (substring subject-id 0 (match-beginning 0))))
+       (setq overviews (elmo-msgdb-get-overview msgdb))
+       (catch 'tag
+         (while overviews
+           (when (string-match
+                  (regexp-quote subject-id)
+                  (elmo-msgdb-overview-entity-get-subject
+                   (car overviews)))
+             (setq cinfo
+                   (wl-message-request-partial
+                    folder
+                    (elmo-msgdb-overview-entity-get-number (car overviews))
+                    msgdb))
+             (setq parameters (mime::content-info/parameters cinfo))
+             (setq the-id (assoc-value "id" parameters))
+             (if (string= the-id id)
+                 (progn
+                   (set-buffer elmo-work-buf-name)
+                   (setq mime::article/preview-buffer
+                         (get-buffer wl-message-buf-name))
+                   (mime-article/decode-message/partial
+                    (point-min)(point-max) parameters)
+                   (if (file-exists-p full-file)
+                       (throw 'tag nil)))))
+           (setq overviews (cdr overviews)))
+         (message "Not all partials found."))))))
+
+(defun wl-mime-setup ()
+  (require 'tm-view)
+  (set-alist 'mime-viewer/quitting-method-alist
+            'wl-message-original-mode 'wl-message-exit)
+  (set-alist 'mime-viewer/over-to-previous-method-alist
+            'wl-message-original-mode 'wl-message-exit)
+  (set-alist 'mime-viewer/over-to-next-method-alist 
+            'wl-message-original-mode  'wl-message-exit)
+  (add-hook 'wl-summary-redisplay-hook 'wl-message-delete-mime-out-buf)
+  (add-hook 'wl-message-exit-hook      'wl-message-delete-mime-out-buf)
+  (set-atype 'mime/content-decoding-condition
+            '((type . "message/partial")
+              (method . wl-message-combine-message/partial-pieces)
+              (major-mode . wl-message-original-mode)
+              (summary-buffer-exp . wl-summary-buffer-name)))
+  (set-atype 'mime/content-decoding-condition
+            '((mode . "extract")
+              (method . wl-mime-save-content)
+              (major-mode . wl-message-original-mode))
+            'remove
+            '((method "tm-file"  nil 'file 'type 'encoding 'mode 'name)
+              (mode . "extract"))
+            'replacement)
+  (set-alist 'mime-viewer/following-method-alist
+            'wl-message-original-mode
+            (function wl-message-follow-current-entity))
+
+  (set-alist 'mime-editor/message-inserter-alist
+            'wl-draft-mode (function wl-draft-insert-current-message))
+  (set-alist 'mime-editor/mail-inserter-alist
+            'wl-draft-mode (function wl-draft-insert-get-message))
+  (set-alist 'mime-editor/split-message-sender-alist
+            'wl-draft-mode 
+            (cdr (assq 'mail-mode 
+                       mime-editor/split-message-sender-alist)))
+  (setq mime-viewer/code-converter-alist 
+       (append
+        (list (cons 'wl-message-original-mode 'mime-charset/decode-buffer))
+        mime-viewer/code-converter-alist))
+  (defvar-maybe mime::preview/mother-buffer nil))
+  
+(provide 'tm-wl)
+
+;;; tm-wl.el ends here
diff --git a/wl/wl-address.el b/wl/wl-address.el
new file mode 100644 (file)
index 0000000..50ef029
--- /dev/null
@@ -0,0 +1,381 @@
+;;; wl-address.el -- Tiny address management for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-03 00:59:01 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-util)
+(require 'std11)
+
+(defvar wl-address-complete-header-regexp "^\\(To\\|From\\|Cc\\|Bcc\\|Mail-Followup-To\\|Reply-To\\|Return-Receipt-To\\):")
+(defvar wl-newsgroups-complete-header-regexp "^\\(Newsgroups\\|Followup-To\\):")
+(defvar wl-folder-complete-header-regexp "^\\(FCC\\):")
+(defvar wl-address-list nil)
+(defvar wl-address-completion-list nil)
+(defvar wl-address-petname-hash nil)
+
+(defun wl-complete-field-to ()
+  (interactive)
+  (let ((cl wl-address-completion-list))
+    (if cl
+       (completing-read "To: " cl)
+      (read-string "To: "))))
+
+(defun wl-complete-field-body-or-tab ()
+  (interactive)
+  (let ((case-fold-search t)
+       epand-char skip-chars
+       completion-list)
+    (if (wl-draft-on-field-p)
+       (wl-complete-field)
+      (if (and
+          (< (point)
+             (save-excursion
+               (goto-char (point-min))
+               (search-forward (concat "\n" mail-header-separator "\n") nil 0)
+               (point)))
+          (save-excursion
+            (beginning-of-line)
+            (while (and (looking-at "^[ \t]")
+                        (not (= (point) (point-min))))
+              (forward-line -1))
+            (cond ((looking-at wl-address-complete-header-regexp)
+                   (setq completion-list wl-address-completion-list)
+                   (setq epand-char ?@))
+                  ((looking-at wl-folder-complete-header-regexp)
+                   (setq completion-list wl-folder-entity-hashtb)
+                   (setq skip-chars "^, "))
+                  ((looking-at wl-newsgroups-complete-header-regexp)
+                   (setq completion-list wl-folder-newsgroups-hashtb)))))
+         (wl-complete-field-body completion-list 
+                                 epand-char skip-chars)
+       (indent-for-tab-command)))))
+
+(defvar wl-completion-buf-name "*Completions*")
+
+(defvar wl-complete-candidates nil)
+
+(defun wl-complete-window-show (all)
+  (if (and (get-buffer-window wl-completion-buf-name)
+          (equal wl-complete-candidates all))
+      (let ((win (get-buffer-window wl-completion-buf-name)))
+       (save-excursion
+         (set-buffer wl-completion-buf-name)
+         (if (pos-visible-in-window-p (point-max) win)
+             (set-window-start win 1)
+           (scroll-other-window))))
+    (message "Making completion list...")
+    (setq wl-complete-candidates all)
+    (with-output-to-temp-buffer
+       wl-completion-buf-name
+      (display-completion-list all))
+    (message "Making completion list... done")))
+
+(defun wl-complete-window-delete ()
+  (let (comp-buf comp-win)
+    (if (setq comp-buf (get-buffer wl-completion-buf-name))
+       (if (setq comp-win (get-buffer-window comp-buf))
+           (delete-window comp-win)))))
+
+(defun wl-complete-field ()
+  (interactive)
+  (let* ((end (point))
+        (start (save-excursion
+                 (skip-chars-backward "_a-zA-Z0-9+@%.!\\-")
+                 (point)))
+        (completion)
+        (pattern (buffer-substring start end))
+        (cl wl-draft-field-completion-list))
+    (if (null cl)
+       nil
+      (setq completion 
+            (let ((completion-ignore-case t))
+              (try-completion pattern cl)))
+      (cond ((eq completion t)
+            (let ((alias (assoc pattern cl)))
+              (if alias
+                  (progn
+                    (delete-region start end)
+                    (insert (cdr alias))
+               ;     (wl-highlight-message (point-min)(point-max) t)
+                    )))
+            (wl-complete-window-delete))
+           ((null completion)
+            (message "Can't find completion for \"%s\"" pattern)
+            (ding))
+           ((not (string= pattern completion))
+            (delete-region start end)
+            (insert completion)
+            (wl-complete-window-delete)
+            (wl-highlight-message (point-min)(point-max) t))
+           (t
+            (let ((list (all-completions pattern cl)))
+              (wl-complete-window-show list)))))))
+
+(defun wl-complete-insert (start end pattern completion-list)
+  (let ((alias (and (consp completion-list)
+                   (assoc pattern completion-list)))
+       comp-buf comp-win)
+    (if alias
+       (progn
+         (delete-region start end)
+         (insert (cdr alias))
+         (if (setq comp-buf (get-buffer wl-completion-buf-name))
+             (if (setq comp-win (get-buffer-window comp-buf))
+                 (delete-window comp-win)))))))
+
+(defun wl-complete-field-body (completion-list &optional epand-char skip-chars)
+  (interactive)
+  (let* ((end (point))
+        (start (save-excursion
+;                (skip-chars-backward "_a-zA-Z0-9+@%.!\\-")
+                 (skip-chars-backward (or skip-chars 
+                                          "_a-zA-Z0-9+@%.!\\-/"))
+                 (point)))
+        (completion)
+        (pattern (buffer-substring start end))
+        (len (length pattern))
+        (cl completion-list))
+    (if (null cl)
+       nil
+      (setq completion (try-completion pattern cl))
+      (cond ((eq completion t)
+            (wl-complete-insert start end pattern completion-list)
+            (wl-complete-window-delete)
+            (message "Sole completion"))
+           ((and epand-char
+                 (> len 0)
+                 (char-equal (aref pattern (1- len)) epand-char)
+                 (assoc (substring pattern 0 (1- len)) cl))
+            (wl-complete-insert
+             start end
+             (substring pattern 0 (1- len))
+             cl))
+           ((null completion)
+            (message "Can't find completion for \"%s\"" pattern)
+            (ding))
+           ((not (string= pattern completion))
+            (delete-region start end)
+            (insert completion))
+           (t
+            (let ((list (sort (all-completions pattern cl) 'string<)))
+              (wl-complete-window-show list)))))))
+
+(defvar wl-address-init-func 'wl-local-address-init)
+
+(defun wl-address-init ()
+  (funcall wl-address-init-func))
+
+(defun wl-local-address-init ()
+  (message "Updating addresses...")
+  (setq wl-address-list 
+       (wl-address-make-address-list wl-address-file))
+  (setq wl-address-completion-list 
+       (wl-address-make-completion-list wl-address-list))
+  (if (file-readable-p wl-alias-file)
+      (setq wl-address-completion-list 
+           (append wl-address-completion-list 
+                   (wl-address-make-alist-from-alias-file wl-alias-file))))
+  (setq wl-address-petname-hash (elmo-make-hash))
+  (mapcar 
+   (function
+       (lambda (x)
+         (elmo-set-hash-val (downcase (car x))
+                                                (cadr x)
+                                                wl-address-petname-hash)))
+   wl-address-list)
+  (message "Updating addresses...done."))
+
+
+(defun wl-address-expand-aliases (alist nest-count)
+  (when (< nest-count 5)
+    (let (expn-str new-expn-str expn new-expn(n 0) (expanded nil))
+      (while (setq expn-str (cdr (nth n alist)))
+        (setq new-expn-str nil)
+        (while (string-match "^[ \t]*\\([^,]+\\)" expn-str)
+          (setq expn (elmo-match-string 1 expn-str))
+         (setq expn-str (wl-string-delete-match expn-str 0))
+          (if (string-match "^[ \t,]+" expn-str)
+             (setq expn-str (wl-string-delete-match expn-str 0)))
+          (if (string-match "[ \t,]+$" expn)
+             (setq expn (wl-string-delete-match expn 0)))
+          (setq new-expn (cdr (assoc expn alist)))
+          (if new-expn
+              (setq expanded t))
+          (setq new-expn-str (concat new-expn-str (and new-expn-str ", ")
+                                     (or new-expn expn))))
+        (when new-expn-str
+          (setcdr (nth n alist) new-expn-str))
+        (setq n (1+ n)))
+      (and expanded
+           (wl-address-expand-aliases alist (1+ nest-count))))))
+
+(defun wl-address-make-alist-from-alias-file (file)
+  (elmo-set-work-buf
+    (let ((case-fold-search t)
+         alias expn alist)
+      (insert-file-contents file)
+      (while (re-search-forward ",$" nil t)
+       (end-of-line)
+       (forward-char 1)
+       (delete-backward-char 1))
+      (goto-char (point-min))
+      (while (re-search-forward "^\\([^#;\n][^:]+\\):[ \t]*\\(.*\\)$" nil t)
+       (setq alias (wl-match-buffer 1)
+             expn (wl-match-buffer 2))
+       (setq alist (cons (cons alias expn) alist)))
+      (wl-address-expand-aliases alist 0)
+      (nreverse alist) ; return value
+      )))
+       
+(defun wl-address-make-address-list (path)
+  (if (and path (file-readable-p path))
+      (elmo-set-work-buf
+       (let (ret
+             (coding-system-for-read wl-cs-autoconv))
+         (insert-file-contents path)
+         (goto-char (point-min))
+         (while (not (eobp))
+           (if (looking-at 
+ "^\\([^#\n][^ \t\n]+\\)[ \t]+\"\\(.*\\)\"[ \t]+\"\\(.*\\)\"[ \t]*.*$")
+               (setq ret 
+                     (wl-append-element 
+                      ret
+                      (list (wl-match-buffer 1)
+                            (wl-match-buffer 2)
+                            (wl-match-buffer 3)))))
+           (forward-line))
+         ret))))
+
+(defsubst wl-address-get-petname (str)
+  (let ((addr (downcase (wl-address-header-extract-address str))))
+    (or (elmo-get-hash-val addr wl-address-petname-hash)
+       str)))
+
+(defsubst wl-address-make-completion-list (address-list)
+  (mapcar '(lambda (entity)
+            (cons (nth 0 entity)
+                  (concat (nth 2 entity) " <"(nth 0 entity)">"))) address-list))
+
+(defsubst wl-address-user-mail-address-p (address)
+  "Judge whether ADDRESS is user's or not."
+  (member (downcase (wl-address-header-extract-address address))
+         (or (mapcar 'downcase wl-user-mail-address-list)
+             (list (downcase 
+                    (wl-address-header-extract-address
+                     wl-from))))))
+
+(defsubst wl-address-header-extract-address (str)
+  "Extracts a real e-mail address from STR and returns it.
+e.g. \"Mine Sakurai <m-sakura@ccs.mt.nec.co.jp>\"
+  ->  \"m-sakura@ccs.mt.nec.co.jp\".
+e.g. \"m-sakura@ccs.mt.nec.co.jp (Mine Sakurai)\"
+  ->  \"m-sakura@ccs.mt.nec.co.jp\"."
+  (cond ((string-match ".*<\\([^>]*\\)>" str) ; .* to extract last <>
+         (wl-match-string 1 str))
+        ((string-match "\\([^ \t\n]*@[^ \t\n]*\\)" str)
+        (wl-match-string 1 str))
+        (t str)))
+
+(defsubst wl-address-header-extract-realname (str)
+  "Extracts a real name from STR and returns it.
+e.g. \"Mr. bar <hoge@foo.com>\"
+  ->  \"Mr. bar\"."
+  (cond ((string-match "\\(.*[^ \t]\\)[ \t]*<[^>]*>" str)
+         (wl-match-string 1 str))
+        (t "")))
+
+(defun wl-address-petname-delete (the-email)
+  "Delete petname in wl-address-file."
+  (let* ( (tmp-buf (get-buffer-create " *wl-petname-tmp*"))
+         (output-coding-system 
+          (mime-charset-to-coding-system wl-mime-charset)))
+    (set-buffer tmp-buf)
+    (message "Deleting Petname...")
+    (erase-buffer)
+    (insert-file-contents wl-address-file)
+    (delete-matching-lines (concat "^[ \t]*" the-email))
+    (write-region (point-min) (point-max)
+                 wl-address-file nil 'no-msg)
+    (message "Deleting Petname...done")
+    (kill-buffer tmp-buf)))
+
+
+(defun wl-address-petname-add-or-change (the-email 
+                                        default-petname 
+                                        default-realname 
+                                        &optional change-petname)
+  "Add petname to wl-address-file, if not registerd.
+If already registerd, change it."
+  (let (the-realname the-petname)
+
+    ;; setup output "petname"
+    ;; if null petname'd, let default-petname be the petname.
+    (setq the-petname
+         (read-from-minibuffer (format "Petname: ") default-petname))
+    (if (string= the-petname "")
+       (setq the-petname default-petname))
+
+    ;; setup output "realname"
+    (setq the-realname
+       (read-from-minibuffer (format "Real Name: ") default-realname))
+;;     (if (string= the-realname "")
+;;         (setq the-realname default-petname))
+
+    ;; writing to ~/.address
+    (let ( (tmp-buf (get-buffer-create " *wl-petname-tmp*"))
+          (output-coding-system (mime-charset-to-coding-system wl-mime-charset)))
+      (set-buffer tmp-buf)
+      (message "Adding Petname...")
+      (erase-buffer)
+      (if (file-exists-p wl-address-file)
+         (insert-file-contents wl-address-file))
+      (if (not change-petname)
+         ;; if only add
+         (progn
+           (goto-char (point-max))
+           (if (and (> (buffer-size) 0)
+                    (not (eq (char-after (1- (point-max))) ?\n)))
+               (insert "\n")))
+       ;; if change
+       (if (re-search-forward (concat "^[ \t]*" the-email) nil t)
+           (delete-region (save-excursion (beginning-of-line)
+                                          (point))
+                          (save-excursion (end-of-line)
+                                          (+ 1 (point))))))
+      (insert (format "%s\t\"%s\"\t\"%s\"\n"
+                     the-email the-petname the-realname))
+      (write-region (point-min) (point-max)
+                   wl-address-file nil 'no-msg)
+      (message "Adding Petname...done")
+      (kill-buffer tmp-buf))))
+
+(provide 'wl-address)
+
+;;; wl-address.el ends here
diff --git a/wl/wl-demo.el b/wl/wl-demo.el
new file mode 100644 (file)
index 0000000..52a3a0d
--- /dev/null
@@ -0,0 +1,201 @@
+;;; wl-demo.el -- Opening demo on Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-30 15:56:54 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-vars)
+(provide 'wl-demo)
+(if (featurep 'xemacs)
+    (require 'wl-xmas))
+
+(eval-when-compile
+  (defun-maybe device-on-window-system-p ())
+  (defun-maybe glyph-height (a))
+  (defun-maybe glyph-width (a))
+  (defun-maybe make-extent (a b))
+  (defun-maybe make-glyph (a))
+  (defun-maybe set-extent-end-glyph (a b))
+  (defun-maybe startup-center-spaces (a))
+  (defun-maybe window-pixel-height ())
+  (defun-maybe window-pixel-width ())
+  (condition-case nil
+      (require 'bitmap)
+    (error nil))
+  (defun-maybe bitmap-compose (a))
+  (defun-maybe bitmap-decode-xbm (a))
+  (defun-maybe bitmap-read-xbm-file (a))
+  (unless (boundp ':data)
+    (set (make-local-variable ':data) nil))
+  (unless (boundp ':type)
+    (set (make-local-variable ':type) nil))
+  (condition-case nil
+      (require 'image)
+    (error nil))
+  (defun-maybe frame-char-height ())
+  (defun-maybe frame-char-width ())
+  (defun-maybe image-type-available-p (a)))
+
+(static-condition-case nil
+    (progn
+      (insert-image '(image))
+      (defalias 'wl-insert-image 'insert-image))
+  (wrong-number-of-arguments
+   (defun wl-insert-image (image)
+     (insert-image image "x")))
+  (void-function
+   (defun wl-insert-image (image))))
+
+;;
+;; demo ;-)
+;;
+(eval-when-compile
+  (cond ((or (featurep 'xemacs) (featurep 'image))
+        (defmacro wl-title-logo ()
+          (let ((file (expand-file-name "wl-logo.xpm" wl-icon-dir)))
+            (if (file-exists-p file)
+                (let ((buffer (generate-new-buffer " *wl-logo*"))
+                      (coding-system-for-read 'binary)
+                      buffer-file-format format-alist
+                      insert-file-contents-post-hook
+                      insert-file-contents-pre-hook)
+                  (prog1
+                      (save-excursion
+                        (set-buffer buffer)
+                        (insert-file-contents file)
+                        (buffer-string))
+                    (kill-buffer buffer)))))))
+       ((condition-case nil
+            (require 'bitmap)
+          (error nil))
+        (defmacro wl-title-logo ()
+          (let ((file (expand-file-name "wl-logo.xbm" wl-icon-dir)))
+            (if (file-exists-p file)
+                (condition-case nil
+                    (bitmap-decode-xbm (bitmap-read-xbm-file file))
+                  (error (message "Bitmap Logo is not used.")))))))
+       (t
+        (defmacro wl-title-logo ()))))
+
+(defconst wl-title-logo
+  (cond ((or (and (featurep 'xemacs)
+                  (featurep 'xpm)
+                  (device-on-window-system-p))
+             (and (eval-when-compile (featurep 'image))
+                  (image-type-available-p 'xpm)))
+        (wl-title-logo))
+       ((and window-system
+             (condition-case nil
+                 (require 'bitmap)
+               (error nil)))
+        (let ((cmp (wl-title-logo)))
+          (if cmp
+              (condition-case nil
+                  (let ((len (length cmp))
+                        (bitmap (bitmap-compose (aref cmp 0)))
+                        (i 1))
+                    (while (< i len)
+                      (setq bitmap (concat bitmap "\n"
+                                           (bitmap-compose (aref cmp i)))
+                            i (1+ i)))
+                    bitmap)
+                (error nil)))))))
+
+(defun wl-demo ()
+  (interactive)
+  (let ((demo-buf (get-buffer-create "*WL Demo*"))
+       logo-ext start)
+    (switch-to-buffer demo-buf)
+    (erase-buffer)
+    (if (and wl-demo-display-logo wl-title-logo)
+       (cond
+         ((featurep 'xemacs)
+          (let ((wl-logo (make-glyph (vector 'xpm :data wl-title-logo))))
+            (insert-char ?\n (max 1 (/ (- (window-height) 6
+                                          (/ (glyph-height wl-logo)
+                                             (/ (window-pixel-height)
+                                                (window-height)))) 2)))
+            (indent-to (startup-center-spaces wl-logo))
+            (insert-char ?\ (max 0 (/ (- (window-width)
+                                         (/ (glyph-width wl-logo)
+                                            (/ (window-pixel-width)
+                                               (window-width)))) 2)))
+            (setq logo-ext (make-extent (point)(point)))
+            (set-extent-end-glyph logo-ext wl-logo)))
+         ((featurep 'image)
+          (let ((wl-logo (list 'image :type 'xpm :data wl-title-logo))
+                pixel-width pixel-height)
+            (with-temp-buffer
+              (insert wl-title-logo)
+              (goto-char (point-min))
+              (skip-syntax-forward "^\"")
+              (when (looking-at "\"[ \t]*\\([0-9]+\\)[ \t]*\\([0-9]+\\)")
+                (setq pixel-width (string-to-int (match-string 1))
+                      pixel-height (string-to-int (match-string 2)))))
+            (insert-char ?\n (max 1 (/ (- (window-height) 6
+                                          (/ pixel-height 
+                                             (frame-char-height))) 2)))
+            (insert-char ?\  (max 0 (/ (- (window-width)
+                                          (/ pixel-width 
+                                             (frame-char-width))) 2)))
+            (wl-insert-image wl-logo)
+            (insert "\n")))
+         (t
+         (insert wl-title-logo)
+         (indent-rigidly (point-min) (point-max)
+                         (max 0 (/ (- (window-width) (current-column)) 2)))
+         (insert "\n")
+         (goto-char (point-min))
+         (insert-char ?\n (max 0 (/ (- (window-height)
+                                       (count-lines (point) (point-max))
+                                       6) 2)))
+         (goto-char (point-max))))
+      (insert-char ?\n (max 1 (- (/ (window-height) 3) 2))))
+    (setq start (point))
+    (insert "\n" (if (and wl-demo-display-logo wl-title-logo)
+                    ""
+                  (concat wl-appname "\n")))
+    (let ((fill-column (window-width)))
+      (center-region start (point)))
+    (setq start (point))
+    (put-text-property (point-min) (point) 'face 'wl-highlight-logo-face)
+    (insert (format "\nversion %s - \"%s\"\n\n"
+                   wl-version wl-codename
+                   ))
+    (insert "Copyright (C) 1998-2000 Yuuichi Teranishi <teranisi@gohome.org>")
+    (put-text-property start (point-max) 'face 'wl-highlight-demo-face)
+    (let ((fill-column (window-width)))
+      (center-region start (point)))
+    (goto-char (point-min))
+    (sit-for
+     (if (featurep 'lisp-float-type) (/ (float 5) (float 10)) 1))
+    ;;(if (featurep 'xemacs) (delete-extent logo-ext))
+    demo-buf))
+
+;;; wl-demo.el ends here
diff --git a/wl/wl-dnd.el b/wl/wl-dnd.el
new file mode 100644 (file)
index 0000000..5578a7a
--- /dev/null
@@ -0,0 +1,103 @@
+;;; wl-dnd.el -- dragdrop support on Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-02-18 19:14:53 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(provide 'wl-dnd)
+
+(static-cond
+ ((featurep 'offix)
+  (defun start-drag (event what &optional typ)
+    (if (numberp typ)
+       (funcall (intern "offix-start-drag") event what typ)
+      (funcall (intern "offix-start-drag") event what))))
+ ((featurep 'cde)
+  (defun start-drag (event what &optional typ)
+    (if (not typ)
+       (funcall (intern "cde-start-drag-internal") event nil 
+                (list what))
+      (funcall (intern "cde-start-drag-internal") event t what))))
+ (t (defun start-drag (event what &optional typ))))
+
+(defun wl-dnd-start-drag (event)
+  (interactive "@e")
+  (mouse-set-point event)
+  (start-drag event (concat 
+                    wl-summary-buffer-folder-name " "
+                    (int-to-string (wl-summary-message-number)))))
+
+(defun wl-dnd-drop-func (event object text)
+  (interactive "@e")
+  (mouse-set-point event)
+  (beginning-of-line)
+  (when (looking-at "^[ ]*\\([^\\[].+\\):.*\n")
+    (let* ((src-spec (save-match-data
+                      (split-string (nth 2 (car (cdr object)))
+                                    " ")))
+          (src-fld (nth 0 src-spec))
+          (number  (string-to-int (nth 1 src-spec)))
+          target)
+      (setq target
+           (wl-folder-get-folder-name-by-id (get-text-property 
+                                             (point)
+                                             'wl-folder-entity-id)))
+      (message "%s is dropped at %s." number
+              (buffer-substring (match-beginning 1)
+                                (match-end 1)))
+      (set-buffer (wl-summary-get-buffer src-fld))
+      (save-match-data
+       (wl-summary-jump-to-msg number))
+      (wl-summary-refile target number)
+      (select-window (get-buffer-window (current-buffer)))
+      ))
+  t)
+
+(defun wl-dnd-default-drop-message (event object)
+  (message "Dropping here is meaningless.")
+  t)
+
+(defun wl-dnd-set-drop-target (beg end)
+  (let (ext substr)
+    (setq ext (make-extent beg end))
+    (set-extent-property 
+     ext
+     'experimental-dragdrop-drop-functions
+     '((wl-dnd-drop-func t t (buffer-substring beg end))))))
+;    (set-extent-property ext 'mouse-face 'highlight)))
+
+(defun wl-dnd-set-drag-starter (beg end)
+  (let (ext kmap)
+    (setq ext (make-extent beg end))
+;    (set-extent-property ext 'mouse-face 'isearch)
+    (setq kmap (make-keymap))
+    (define-key kmap [button1] 'wl-dnd-start-drag)
+    (set-extent-property ext 'keymap kmap)))
+                                            
+;;; wl-dnd.el ends here
diff --git a/wl/wl-draft.el b/wl/wl-draft.el
new file mode 100644 (file)
index 0000000..b85bfc7
--- /dev/null
@@ -0,0 +1,1854 @@
+;;; wl-draft.el -- Message draft mode for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-22 19:12:26 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'sendmail)
+(require 'wl-template)
+(require 'emu)
+(if (module-installed-p 'timezone)
+    (require 'timezone))
+(require 'std11)
+(require 'wl-vars)
+
+(eval-when-compile
+  (require 'smtp)
+  (require 'elmo-pop3)
+  (mapcar
+   (function
+    (lambda (symbol)
+      (unless (boundp symbol)
+       (set (make-local-variable symbol) nil))))
+   '(x-face-add-x-face-version-header 
+     mail-reply-buffer
+     mail-from-style
+     smtp-authenticate-type
+     smtp-authenticate-user
+     smtp-authenticate-passphrase
+     smtp-connection-type
+     ))
+  (defun-maybe x-face-insert (a))
+  (defun-maybe x-face-insert-version-header ())
+  (defun-maybe wl-init (&optional a))
+  (defun-maybe wl-draft-mode ()))
+
+(defvar wl-draft-buf-name "Draft")
+(defvar wl-caesar-region-func nil)
+(defvar wl-draft-cite-func 'wl-default-draft-cite)
+(defvar wl-draft-buffer-file-name nil)
+(defvar wl-draft-field-completion-list nil)
+(defvar wl-draft-verbose-send t)
+(defvar wl-draft-verbose-msg nil)
+(defvar wl-draft-queue-flushing nil)
+(defvar wl-draft-config-variables nil)
+(defvar wl-draft-config-exec-flag t)
+(defvar wl-draft-buffer-cur-summary-buffer nil)
+(defvar wl-draft-clone-local-variable-regexp "^\\(wl\\|mime\\)")
+(defvar wl-draft-sendlog-filename "sendlog")
+(defvar wl-draft-queue-save-filename "qinfo")
+(defvar wl-draft-config-save-filename "config")
+(defvar wl-draft-queue-flush-send-func 'wl-draft-dispatch-message)
+(defvar wl-sent-message-via nil)
+(defvar wl-sent-message-modified nil)
+(defvar wl-draft-fcc-list nil)
+(defvar wl-draft-reedit nil)
+(defvar wl-draft-reply-buffer nil)
+(defvar wl-draft-forward nil)
+
+(defvar wl-draft-config-sub-func-alist
+  '((body        . wl-draft-config-sub-body)
+    (top         . wl-draft-config-sub-top)
+    (bottom      . wl-draft-config-sub-bottom)
+    (header      . wl-draft-config-sub-header)
+    (body-file   . wl-draft-config-sub-body-file)
+    (top-file    . wl-draft-config-sub-top-file)
+    (bottom-file . wl-draft-config-sub-bottom-file)
+    (header-file . wl-draft-config-sub-header-file)
+    (template    . wl-draft-config-sub-template)
+    (x-face      . wl-draft-config-sub-x-face)))
+
+(make-variable-buffer-local 'wl-draft-buffer-file-name)
+(make-variable-buffer-local 'wl-draft-buffer-cur-summary-buffer)
+(make-variable-buffer-local 'wl-draft-config-variables)
+(make-variable-buffer-local 'wl-draft-config-exec-flag)
+(make-variable-buffer-local 'wl-sent-message-via)
+(make-variable-buffer-local 'wl-draft-fcc-list)
+(make-variable-buffer-local 'wl-draft-reply-buffer)
+
+;;; SMTP binding by Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+(defvar wl-smtp-features
+  '(((smtp-authenticate-type
+      (if wl-smtp-authenticate-type
+         (intern (downcase (format "%s" wl-smtp-authenticate-type)))))
+     ((smtp-authenticate-user wl-smtp-posting-user)
+      ((smtp-authenticate-passphrase
+       (elmo-get-passwd
+        (format "%s@%s" 
+                smtp-authenticate-user
+                smtp-server))))))
+    (smtp-connection-type))
+  "Additional SMTP features.")
+
+(eval-when-compile
+  (defun wl-smtp-parse-extension (exts parents)
+    (let (bindings binding feature)
+      (dolist (ext exts)
+       (setq feature (if (listp (car ext)) (caar ext) (car ext))
+             binding 
+             (` ((, feature)
+                 (or (, (if (listp (car ext))
+                            (cadar ext)
+                          (let ((wl-feature
+                                 (intern
+                                  (concat "wl-" (symbol-name feature))))) 
+                            (if (boundp wl-feature) 
+                                wl-feature))))
+                     (and (boundp '(, feature)) (, feature))))))
+       (when parents 
+         (setcdr binding (list (append '(and) parents (cdr binding)))))
+       (setq bindings 
+             (nconc bindings (list binding)
+                    (wl-smtp-parse-extension 
+                     (cdr ext) (cons feature parents)))))
+      bindings)))
+
+(defmacro wl-smtp-extension-bind (&rest body)
+  "Return a `let' form that binds all variables of SMTP extension.
+After this is done, BODY will be executed in the scope
+of the `let' form.
+
+The variables bound and their default values are described by
+the `wl-smtp-features' variable."
+  (` (let* (, (wl-smtp-parse-extension wl-smtp-features nil))
+       (,@ body))))
+
+(defun wl-draft-insert-date-field ()
+  (insert "Date: " (wl-make-date-string) "\n"))
+
+(defun wl-draft-insert-from-field ()
+  ;; Put the "From:" field in unless for some odd reason
+  ;; they put one in themselves.
+  (let* ((login (or user-mail-address (user-login-name)))
+        (fullname (user-full-name)))
+    (cond ((eq mail-from-style 'angles)
+          (insert "From: " fullname)
+          (let ((fullname-start (+ (point-min) 6))
+                (fullname-end (point-marker)))
+            (goto-char fullname-start)
+            ;; Look for a character that cannot appear unquoted
+            ;; according to RFC 822.
+            (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
+                                   fullname-end 1)
+                (progn
+                  ;; Quote fullname, escaping specials.
+                  (goto-char fullname-start)
+                  (insert "\"")
+                  (while (re-search-forward "[\"\\]"
+                                            fullname-end 1)
+                    (replace-match "\\\\\\&" t))
+                  (insert "\""))))
+          (insert " <" login ">\n"))
+         ((eq mail-from-style 'parens)
+          (insert "From: " login " (")
+          (let ((fullname-start (point)))
+            (insert fullname)
+            (let ((fullname-end (point-marker)))
+              (goto-char fullname-start)
+              ;; RFC 822 says \ and nonmatching parentheses
+              ;; must be escaped in comments.
+              ;; Escape every instance of ()\ ...
+              (while (re-search-forward "[()\\]" fullname-end 1)
+                (replace-match "\\\\\\&" t))
+              ;; ... then undo escaping of matching parentheses,
+              ;; including matching nested parentheses.
+              (goto-char fullname-start)
+              (while (re-search-forward 
+                      "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
+                      fullname-end 1)
+                (replace-match "\\1(\\3)" t)
+                (goto-char fullname-start))))
+          (insert ")\n"))
+         ((null mail-from-style)
+          (insert "From: " login "\n")))))
+
+(defun wl-draft-insert-x-face-field ()
+  "Insert x-face header."
+  (interactive)
+  (if (not (file-exists-p wl-x-face-file))
+      (error "File %s does not exist" wl-x-face-file)
+    (beginning-of-buffer)
+    (search-forward mail-header-separator nil t)
+    (beginning-of-line)
+    (wl-draft-insert-x-face-field-here)
+    (run-hooks 'wl-draft-insert-x-face-field-hook) ; highlight it if you want.
+    ))
+
+(defun wl-draft-insert-x-face-field-here ()
+  "insert x-face field at point."
+  (let ((x-face-string (elmo-get-file-string wl-x-face-file)))
+    (if (string-match "^[ \t]*" x-face-string)
+       (setq x-face-string (substring x-face-string (match-end 0))))
+    (insert "X-Face: " x-face-string))
+  (if (not (= (preceding-char) ?\n))
+      (insert ?\n))
+  (and (fboundp 'x-face-insert-version-header) ; x-face.el...
+       (boundp 'x-face-add-x-face-version-header)
+       x-face-add-x-face-version-header
+       (x-face-insert-version-header)))
+
+(defun wl-draft-setup ()
+  (let ((field wl-draft-fields)
+       ret-val)
+    (while field
+      (setq ret-val (append ret-val
+                           (list (cons (concat (car field) " ")
+                                       (concat (car field) " ")))))
+      (setq field (cdr field)))
+    (setq wl-draft-field-completion-list ret-val)))
+
+(defun wl-draft-make-mail-followup-to (recipients)
+  (if (elmo-list-member 
+       (or wl-user-mail-address-list
+          (list (wl-address-header-extract-address wl-from)))
+       recipients)
+      (let ((rlist (elmo-list-delete 
+                   (or wl-user-mail-address-list
+                       (list (wl-address-header-extract-address wl-from)))
+                   (copy-sequence recipients))))
+       (if (elmo-list-member rlist (mapcar 'downcase 
+                                           wl-subscribed-mailing-list))
+           rlist
+         (append rlist (list (wl-address-header-extract-address 
+                              wl-from)))))
+    recipients))
+
+(defun wl-draft-delete-myself-from-cc (to cc)
+  (let ((myself (or wl-user-mail-address-list
+                   (list (wl-address-header-extract-address wl-from)))))
+    (if wl-draft-always-delete-myself
+       (elmo-list-delete myself cc)
+      (if (elmo-list-member myself cc)
+         (if (elmo-list-member (append to cc) 
+                               (mapcar 'downcase wl-subscribed-mailing-list))
+             ;; member list is contained in recipients.
+             (elmo-list-delete myself cc)
+           cc
+           )
+       cc))))
+
+(defun wl-draft-forward (original-subject summary-buf)
+  (wl-draft "" (concat "Forward: " original-subject) 
+           nil nil nil nil nil nil nil nil summary-buf)
+  (goto-char (point-max))
+  (wl-draft-insert-message)
+  (mail-position-on-field "To"))
+
+(defun wl-draft-reply (buf no-arg summary-buf)
+;  (save-excursion 
+  (let ((r-list (if no-arg wl-draft-reply-without-argument-list
+                 wl-draft-reply-with-argument-list))
+       to mail-followup-to cc subject in-reply-to references newsgroups
+       from)
+    (set-buffer buf)
+    (if (wl-address-user-mail-address-p 
+        (setq from
+              (wl-address-header-extract-address (std11-field-body "From"))))
+       (setq to (mapconcat 'identity (elmo-multiple-field-body "To") ",")
+             cc (mapconcat 'identity (elmo-multiple-field-body "Cc") ",")
+             newsgroups (or (std11-field-body "Newsgroups") ""))
+      (catch 'done
+       (while r-list
+         (when (let ((condition (car (car r-list))))
+                 (cond ((stringp condition)
+                        (std11-field-body condition))
+                       ((listp condition)
+                        (catch 'done
+                          (while condition
+                            (if (not (std11-field-body (car condition)))
+                                (throw 'done nil))
+                            (setq condition (cdr condition)))
+                          t))
+                       ((symbolp condition)
+                        (funcall condition))))
+           (let ((r-to-list (nth 0 (cdr (car r-list))))
+                 (r-cc-list (nth 1 (cdr (car r-list))))
+                 (r-ng-list (nth 2 (cdr (car r-list)))))
+             (when (and (member "Followup-To" r-ng-list)
+                        (string= (std11-field-body "Followup-To") "poster"))
+               (setq r-to-list (cons "From" r-to-list))
+               (setq r-ng-list (delete "Followup-To" (copy-sequence r-ng-list))))
+             (setq to (wl-concat-list (cons to
+                                            (elmo-multiple-fields-body-list
+                                             r-to-list))
+                                      ","))
+             (setq cc (wl-concat-list (cons cc
+                                            (elmo-multiple-fields-body-list
+                                             r-cc-list))
+                                      ","))
+             (setq newsgroups (wl-concat-list (cons newsgroups 
+                                                    (std11-field-bodies 
+                                                     r-ng-list))
+                                              ",")))
+           (throw 'done nil))
+         (setq r-list (cdr r-list)))
+       (error "No match field: check your `wl-draft-reply-without-argument-list'")))
+    (setq subject (std11-field-body "Subject"))
+    (with-temp-buffer ; to keep raw buffer unibyte.
+      (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+      (setq subject (or (and subject
+                            (eword-decode-string
+                             (decode-mime-charset-string
+                              subject
+                              wl-mime-charset))))))
+    (and subject wl-reply-subject-prefix
+        (let ((case-fold-search t))
+          (not
+           (equal
+            (string-match (regexp-quote wl-reply-subject-prefix)
+                          subject)
+            0)))
+        (setq subject (concat wl-reply-subject-prefix subject)))
+    (and (setq in-reply-to (std11-field-body "Message-Id"))
+        (setq in-reply-to
+              (format "In your message of \"%s\"\n\t%s"
+                      (or (std11-field-body "Date") "some time ago")
+                      in-reply-to)))
+    (setq references (nconc
+                     (std11-field-bodies '("References" "In-Reply-To"))
+                     (list in-reply-to)))
+    (setq to (wl-parse-addresses to)
+         cc (wl-parse-addresses cc))
+    (setq to (mapcar '(lambda (addr)
+                       (wl-address-header-extract-address
+                        addr)) to))
+    (setq cc (mapcar '(lambda (addr)
+                       (wl-address-header-extract-address
+                        addr)) cc))
+    ;; if subscribed mailing list is contained in cc or to
+    ;; and myself is contained in cc,
+    ;; delete myself from cc.
+    (setq cc (wl-draft-delete-myself-from-cc to cc))
+    (if wl-insert-mail-followup-to
+       (progn
+         (setq mail-followup-to 
+               (wl-draft-make-mail-followup-to (append to cc)))
+         (setq mail-followup-to (wl-delete-duplicates mail-followup-to 
+                                                      nil t))))
+    (setq newsgroups (wl-parse newsgroups 
+                              "[ \t\f\r\n,]*\\([^ \t\f\r\n,]+\\)")
+         newsgroups (wl-delete-duplicates newsgroups)
+         newsgroups (if newsgroups (mapconcat 'identity newsgroups ",")))
+    (setq to (wl-delete-duplicates to nil t))
+    (setq cc (wl-delete-duplicates 
+             (append (wl-delete-duplicates cc nil t)
+                     to (copy-sequence to))
+             t t))
+    (and to (setq to (mapconcat 'identity to ",\n\t")))
+    (and cc (setq cc (mapconcat 'identity cc ",\n\t")))
+    (and mail-followup-to (setq mail-followup-to 
+                               (mapconcat 'identity 
+                                          mail-followup-to ",\n\t")))
+    (and (null to) (setq to cc cc nil))
+    (setq references (delq nil references)
+         references (mapconcat 'identity references " ")
+         references (wl-parse references "[^<]*\\(<[^>]+>\\)")
+         references (wl-delete-duplicates references)
+         references (if references 
+                        (mapconcat 'identity references "\n\t")))
+    (wl-draft
+     to subject in-reply-to cc references newsgroups mail-followup-to
+     nil nil nil summary-buf)
+    (setq wl-draft-reply-buffer buf))
+  (run-hooks 'wl-reply-hook))
+
+(defun wl-draft-yank-from-mail-reply-buffer (decode-it)
+  (interactive)
+  (save-restriction
+    (current-buffer)
+    (narrow-to-region (point)(point))
+    (insert 
+     (save-excursion
+       (set-buffer mail-reply-buffer)
+       (if decode-it
+          (decode-mime-charset-region (point-min) (point-max)
+                                      wl-mime-charset))       
+       (buffer-substring-no-properties 
+       (point-min) (point-max))))
+    (goto-char (point-max))
+    (push-mark)
+    (goto-char (point-min)))
+  (let ((beg (point)))
+    (cond (mail-citation-hook (run-hooks 'mail-citation-hook))
+         (mail-yank-hooks (run-hooks 'mail-yank-hooks))
+         (t (and wl-draft-cite-func
+                 (funcall wl-draft-cite-func)))) ; default cite
+    (run-hooks 'wl-draft-cited-hook)
+    (if wl-highlight-body-too
+       (wl-highlight-body-region beg (point-max)))))
+
+(defun wl-draft-confirm ()
+  (interactive)
+  (y-or-n-p (format "Send current draft as %s? "
+                   (if (wl-message-mail-p)
+                       (if (wl-message-news-p) "Mail and News" "Mail")
+                     "News"))))
+
+(defun wl-message-news-p ()
+  (std11-field-body "Newsgroups"))
+
+(defun wl-message-field-exists-p (field)
+  (let ((value (std11-field-body field)))
+    (and value
+        (not (string= value "")))))
+
+(defun wl-message-mail-p ()
+  (or (wl-message-field-exists-p "To")
+      (wl-message-field-exists-p "Cc")
+      (wl-message-field-exists-p "Bcc")
+      ;;(wl-message-field-exists-p "Fcc")              ; This may be needed..
+      ))
+
+(defun wl-draft-open-file (&optional file)
+  (interactive)                                ; "*fFile to edit: ")
+  (wl-draft-edit-string (elmo-get-file-string 
+                        (or file
+                            (read-file-name "File to edit: " 
+                                            (or wl-tmp-dir "~/"))))))
+
+(defun wl-draft-edit-string (string)
+  (let ((cur-buf (current-buffer))
+       (tmp-buf (get-buffer-create " *wl-draft-edit-string*"))
+       to subject in-reply-to cc references newsgroups mail-followup-to
+       content-type 
+       body-beg buffer-read-only
+       )
+    (set-buffer tmp-buf)
+    (erase-buffer)
+    (insert string)
+    (setq to (std11-field-body "To"))
+    (setq to (and to
+                 (eword-decode-string
+                  (decode-mime-charset-string
+                   to
+                   wl-mime-charset))))
+    (setq subject (std11-field-body "Subject"))
+    (setq subject (and subject
+                      (eword-decode-string
+                       (decode-mime-charset-string
+                        subject
+                        wl-mime-charset))))
+    (setq in-reply-to (std11-field-body "In-Reply-To"))
+    (setq cc (std11-field-body "Cc"))
+    (setq cc (and cc
+                 (eword-decode-string
+                  (decode-mime-charset-string
+                   cc
+                   wl-mime-charset))))
+    (setq references (std11-field-body "References"))
+    (setq newsgroups (std11-field-body "Newsgroups"))
+    (setq mail-followup-to (std11-field-body "Mail-Followup-To"))
+    (setq content-type  (std11-field-body "Content-Type"))
+    (goto-char (point-min))
+    (or (re-search-forward "\n\n" nil t)
+       (search-forward (concat mail-header-separator "\n") nil t))
+    (unwind-protect
+       (set-buffer
+        (wl-draft to subject in-reply-to cc references newsgroups 
+                  mail-followup-to
+                  content-type
+                  (buffer-substring (point) (point-max))
+                  'edit-again
+                  ))
+      (and to (mail-position-on-field "To"))
+      (delete-other-windows)
+      (kill-buffer tmp-buf)))
+  (setq buffer-read-only nil) ;;??
+  (run-hooks 'wl-mail-setup-hook))
+
+(defun wl-draft-insert-current-message (dummy)
+  (interactive)
+  (let ((mail-reply-buffer (wl-message-get-original-buffer))
+       mail-citation-hook mail-yank-hooks
+       wl-draft-cite-func)
+    (if (eq 0
+           (save-excursion
+             (set-buffer mail-reply-buffer)
+             (buffer-size)))
+       (error "No current message")
+      (wl-draft-yank-from-mail-reply-buffer nil))))
+
+(defun wl-draft-insert-get-message (dummy)
+  (let ((fld (completing-read 
+             "Folder name: " 
+             (if (memq 'read-folder wl-use-folder-petname)
+                 (wl-folder-get-entity-with-petname)
+               wl-folder-entity-hashtb)
+             nil nil wl-default-spec
+             'wl-read-folder-hist))
+       (number (call-interactively 
+                (function (lambda (num)
+                            (interactive "nNumber: ")
+                            num))))
+       (mail-reply-buffer (get-buffer-create "*wl-draft-insert-get-message*"))
+       mail-citation-hook mail-yank-hooks
+       wl-draft-cite-func)
+    (unwind-protect
+       (progn
+         (save-excursion
+           (elmo-read-msg-with-cache fld number mail-reply-buffer nil))
+         (wl-draft-yank-from-mail-reply-buffer nil))
+      (kill-buffer mail-reply-buffer))))
+
+;;
+;; default body citation func
+;;
+(defun wl-default-draft-cite ()
+  (let ((mail-yank-ignored-headers "[^:]+:")
+       (mail-yank-prefix "> ")
+       (summary-buf wl-current-summary-buffer)
+       (message-buf (get-buffer (wl-current-message-buffer)))
+       from date cite-title num entity)
+    (if (and summary-buf
+            (buffer-live-p summary-buf)
+            message-buf
+            (buffer-live-p message-buf))
+       (progn
+         (save-excursion 
+           (set-buffer summary-buf)
+           (setq num 
+                 (save-excursion
+                   (set-buffer message-buf)
+                   wl-message-buffer-cur-number))
+           (setq entity (assoc (cdr (assq num 
+                                          (elmo-msgdb-get-number-alist 
+                                           wl-summary-buffer-msgdb)))
+                               (elmo-msgdb-get-overview 
+                                wl-summary-buffer-msgdb)))
+           (setq from (elmo-msgdb-overview-entity-get-from entity))
+           (setq date (elmo-msgdb-overview-entity-get-date entity)))
+         (setq cite-title (format "At %s,\n%s wrote:" 
+                                  (or date "some time ago")
+                                  (wl-summary-from-func-internal
+                                   (or from "you"))))))
+    (and cite-title 
+        (insert cite-title "\n"))
+    (mail-indent-citation)))
+
+(defvar wl-draft-buffer nil "Draft buffer to yank content")
+(defun wl-draft-yank-to-draft-buffer (buffer)
+  "Yank BUFFER content to `wl-draft-buffer'."
+  (set-buffer wl-draft-buffer)
+  (let ((mail-reply-buffer buffer))
+    (wl-draft-yank-from-mail-reply-buffer nil)
+    (kill-buffer buffer)))
+
+(defun wl-draft-yank-original (&optional arg)
+  "Yank original message."
+  (interactive "P")
+  (if arg
+      (let (buf mail-reply-buffer)
+       (elmo-set-work-buf
+        (yank)
+        (setq buf (current-buffer)))
+       (setq mail-reply-buffer buf)
+       (wl-draft-yank-from-mail-reply-buffer nil))
+    (wl-draft-yank-current-message-entity)))
+
+(defun wl-draft-hide (editing-buffer)
+  "Hide the editing draft buffer if possible."
+  (interactive)
+  (when (and editing-buffer
+            (buffer-live-p editing-buffer))
+    (set-buffer editing-buffer)
+    (let ((sum-buf wl-draft-buffer-cur-summary-buffer)
+         fld-buf sum-win fld-win)
+      (if (and wl-draft-use-frame
+              (> (length (visible-frame-list)) 1))
+         ;; hide draft frame
+         (delete-frame)
+       ;; hide draft window
+       (or (one-window-p)
+           (delete-window)))
+      ;; stay folder window if required
+      (when wl-stay-folder-window
+       (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+           (if (setq fld-win (get-buffer-window fld-buf))
+               (select-window fld-win)
+             (if wl-draft-resume-folder-window ;; resume folder window
+                 (switch-to-buffer fld-buf)))))
+      (if (buffer-live-p sum-buf)
+         (if (setq sum-win (get-buffer-window sum-buf t))
+             ;; if Summary is on the frame, select it.
+             (select-window sum-win)
+           ;; if summary is not on the frame, switch to it.
+           (if (and wl-stay-folder-window 
+                    (or wl-draft-resume-folder-window fld-win))
+               (wl-folder-select-buffer sum-buf)
+             (switch-to-buffer sum-buf)))))))
+
+(defun wl-draft-delete (editing-buffer)
+  "kill the editing draft buffer and delete the file corresponds to it."
+  (save-excursion
+    (when editing-buffer
+      (set-buffer editing-buffer)
+      (if wl-draft-buffer-file-name
+         (progn
+           (if (file-exists-p wl-draft-buffer-file-name)
+               (delete-file wl-draft-buffer-file-name))
+           (let ((msg (and wl-draft-buffer-file-name
+                           (string-match "[0-9]+$" wl-draft-buffer-file-name)
+                           (string-to-int 
+                            (elmo-match-string 0 wl-draft-buffer-file-name)))))
+             (wl-draft-config-info-operation msg 'delete))))
+      (set-buffer-modified-p nil)              ; force kill
+      (kill-buffer editing-buffer))))
+
+(defun wl-draft-kill (&optional force-kill)
+  "Kill current draft buffer and quit editing."
+  (interactive "P")
+  (save-excursion
+    (when (and (or (eq major-mode 'wl-draft-mode)
+                  (eq major-mode 'mail-mode))
+              (or force-kill
+                  (y-or-n-p "Kill Current Draft?")))
+      (let ((cur-buf (current-buffer)))
+       (wl-draft-hide cur-buf)
+       (wl-draft-delete cur-buf)))
+    (message "")))
+
+(defun wl-draft-fcc ()
+  "Add a new FCC field, with file name completion."
+  (interactive)
+  (or (mail-position-on-field "fcc" t)  ;Put new field after exiting FCC.
+      (mail-position-on-field "to"))
+  (insert "\nFCC: "))
+
+;; function for wl-sent-message-via
+
+(defmacro wl-draft-sent-message-p (type)
+  (` (eq (nth 1 (assq (, type) wl-sent-message-via)) 'sent)))
+
+(defmacro wl-draft-set-sent-message (type result &optional server-port)
+  (` (let ((element (assq (, type) wl-sent-message-via)))
+       (if element
+          (unless (eq (nth 1 element) (, result))
+            (setcdr element (list (, result) (, server-port)))
+            (setq wl-sent-message-modified t))
+        (push (list (, type) (, result) (, server-port)) wl-sent-message-via)
+        (setq wl-sent-message-modified t)))))
+
+(defun wl-draft-sent-message-results ()
+  (let ((results wl-sent-message-via)
+       unplugged-via sent-via)
+    (while results
+      (cond ((eq (nth 1 (car results)) 'unplugged)
+            (push (caar results) unplugged-via))
+           ((eq (nth 1 (car results)) 'sent)
+            (push (caar results) sent-via)))
+      (setq results (cdr results)))
+    (list unplugged-via sent-via)))
+
+(defun wl-draft-write-sendlog (status proto server to id)
+  "Write send log file, if `wl-draft-sendlog' is non-nil."
+  (when wl-draft-sendlog
+    (save-excursion
+      (let* ((tmp-buf (get-buffer-create " *wl-draft-sendlog*"))
+            (filename (expand-file-name wl-draft-sendlog-filename
+                                        elmo-msgdb-dir))
+            (filesize (nth 7 (file-attributes filename)))
+            (server (if server (concat " server=" server) ""))
+            (to (if to (cond
+                        ((memq proto '(fcc queue))
+                         (format " folder=\"%s\"" to))
+                        ((eq proto 'nntp)
+                         (format " ng=<%s>" to))
+                        (t
+                         (concat " to="
+                                 (mapconcat
+                                  'identity
+                                  (mapcar '(lambda(x) (format "<%s>" x)) to)
+                                  ","))))
+                  ""))
+            (id (if id (concat " id=" id) ""))
+            (time (wl-sendlog-time)))
+       (set-buffer tmp-buf)
+       (erase-buffer)
+       (insert (format "%s proto=%s stat=%s%s%s%s\n"
+                       time proto status server to id))
+       (if (and wl-draft-sendlog-max-size filesize
+                (> filesize wl-draft-sendlog-max-size))
+           (rename-file filename (concat filename ".old") t))
+       (if (file-writable-p filename)
+           (write-region (point-min) (point-max) 
+                         filename t 'no-msg)
+         (message (format "%s is not writable." filename)))
+       (kill-buffer tmp-buf)))))
+
+(defun wl-draft-get-header-delimiter (&optional delete)
+  ;; If DELETE is non-nil, replace the header delimiter with a blank line
+  (let (delimline)
+    (goto-char (point-min))
+    (when (re-search-forward
+          (concat "^" (regexp-quote mail-header-separator) "$\\|^$") nil t)
+      (replace-match "")
+      (if delete
+         (forward-char -1))
+      (setq delimline (point-marker)))
+    delimline))
+
+(defun wl-draft-send-mail-with-qmail ()
+  "Pass the prepared message buffer to qmail-inject.
+Refer to the documentation for the variable `send-mail-function'
+to find out how to use this."
+  (if (and wl-draft-qmail-send-plugged
+          (not (elmo-plugged-p)))
+      (wl-draft-set-sent-message 'mail 'unplugged)
+    ;; send the message
+    (let ((id (std11-field-body "Message-ID"))
+         (to (std11-field-body "To")))
+      (case
+         (as-binary-process
+          (apply
+           'call-process-region 1 (point-max) wl-qmail-inject-program
+           nil nil nil
+           wl-qmail-inject-args))
+       ;; qmail-inject doesn't say anything on it's stdout/stderr,
+       ;; we have to look at the retval instead
+       (0   (progn
+              (wl-draft-set-sent-message 'mail 'sent)
+              (wl-draft-write-sendlog 'ok 'qmail nil (list to) id)))
+       (1   (error "qmail-inject reported permanent failure"))
+       (111 (error "qmail-inject reported transient failure"))
+       ;; should never happen
+       (t   (error "qmail-inject reported unknown failure"))))))
+
+;;
+;; from Semi-gnus
+;;
+(defun wl-draft-send-mail-with-smtp ()
+  "Send the prepared message buffer with SMTP."
+  (require 'smtp)
+  (let* ((errbuf (if mail-interactive
+                    (generate-new-buffer " smtp errors")
+                  0))
+        (case-fold-search t)
+        (default-case-fold-search t)
+        (sender (or wl-envelope-from
+                    (wl-address-header-extract-address wl-from)))
+        (delimline (save-excursion
+                     (goto-char (point-min))
+                     (re-search-forward
+                      (concat "^" (regexp-quote mail-header-separator)
+                              "$\\|^$") nil t)
+                     (point-marker)))
+        (recipients (smtp-deduce-address-list (current-buffer)
+                                              (point-min) delimline))
+        (smtp-server (or wl-smtp-posting-server
+                         (if (functionp smtp-server)
+                             (funcall smtp-server sender
+                                      recipients)
+                           (or smtp-server "localhost"))))
+        (smtp-service (or wl-smtp-posting-port smtp-service))
+        (smtp-local-domain (or smtp-local-domain wl-local-domain))
+        (id (std11-field-body "message-id")))
+    (if (not (elmo-plugged-p smtp-server smtp-service))
+       (wl-draft-set-sent-message 'mail 'unplugged
+                                  (cons smtp-server smtp-service))
+      (unwind-protect
+         (save-excursion
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
+           (goto-char (1+ delimline))
+           (if (eval mail-mailer-swallows-blank-line)
+               (newline))
+           ;;(run-hooks 'wl-mail-send-pre-hook)
+           (if mail-interactive
+               (save-excursion
+                 (set-buffer errbuf)
+                 (erase-buffer)))
+           (wl-draft-delete-field "bcc" delimline)
+           (wl-draft-delete-field "resent-bcc" delimline)
+           (let (process-connection-type)
+             (as-binary-process
+              (when recipients
+                (wl-smtp-extension-bind
+                 (let ((err (smtp-via-smtp sender recipients 
+                                           (current-buffer))))
+                   (when (not (eq err t))
+                     (wl-draft-write-sendlog 'failed 'smtp smtp-server
+                                             recipients id)
+                     (error "Sending failed; SMTP protocol error:%s" err))))
+                (wl-draft-set-sent-message 'mail 'sent)
+                (wl-draft-write-sendlog 
+                 'ok 'smtp smtp-server recipients id)))))
+       (if (bufferp errbuf)
+           (kill-buffer errbuf))))))
+
+(defun wl-draft-send-mail-with-pop-before-smtp ()
+  "Send the prepared message buffer with POP-before-SMTP."
+  (require 'elmo-pop3)
+  (condition-case ()
+      (elmo-pop3-get-connection 
+       (list 'pop3
+            (or wl-pop-before-smtp-user
+                elmo-default-pop3-user)
+            (or wl-pop-before-smtp-authenticate-type
+                elmo-default-pop3-authenticate-type)
+            (or wl-pop-before-smtp-server
+                elmo-default-pop3-server)
+            (or wl-pop-before-smtp-port
+                elmo-default-pop3-port)
+            (or wl-pop-before-smtp-ssl
+                elmo-default-pop3-ssl)))
+    (error))
+  (wl-draft-send-mail-with-smtp))
+
+(defun wl-draft-insert-required-fields (&optional force-msgid)
+  ;; Insert Message-Id field...
+  (goto-char (point-min))
+  (when (and (or force-msgid
+                wl-insert-message-id)
+            (not (re-search-forward "^Message-ID[ \t]*:" nil t)))
+    (insert (concat "Message-ID: "
+                   (wl-draft-make-message-id-string)
+                   "\n")))
+  ;; Insert date field.
+  (goto-char (point-min))
+  (or (re-search-forward "^Date[ \t]*:" nil t)
+      (wl-draft-insert-date-field))
+  ;; Insert from field.
+  (goto-char (point-min))
+  (or (re-search-forward "^From[ \t]*:" nil t)
+      (wl-draft-insert-from-field)))
+
+(defun wl-draft-normal-send-func (editing-buffer kill-when-done)
+  "Send the message in the current buffer. "
+  (save-restriction
+    (std11-narrow-to-header mail-header-separator)
+    (wl-draft-insert-required-fields)
+    ;; Delete null fields.
+    (goto-char (point-min))
+    (while (re-search-forward "^[^ \t\n:]+:[ \t]*\n" nil t)
+      (replace-match ""))
+    ;; ignore any blank lines in the header
+    (while (re-search-forward "\n\n\n*" nil t)
+      (replace-match "\n")))
+  (run-hooks 'wl-mail-send-pre-hook) ;; X-PGP-Sig, Cancel-Lock
+  (wl-draft-dispatch-message)
+  (when kill-when-done
+    ;; hide editing-buffer.
+    (wl-draft-hide editing-buffer)
+    ;; delete editing-buffer and its file.
+    (wl-draft-delete editing-buffer)))
+
+(defun wl-draft-dispatch-message (&optional mes-string)
+  "Send the message in the current buffer. Not modified the header fields."
+  (let (delimline)
+    (if (and wl-draft-verbose-send mes-string)
+       (message mes-string))
+    ;; get fcc folders.
+    (setq delimline (wl-draft-get-header-delimiter t))
+    (unless wl-draft-fcc-list
+      (setq wl-draft-fcc-list (wl-draft-get-fcc-list delimline)))
+    ;;
+    (setq wl-sent-message-modified nil)
+    (unwind-protect
+       (progn
+         (if (and (wl-message-mail-p)
+                  (not (wl-draft-sent-message-p 'mail)))
+             (funcall wl-draft-send-mail-func))
+         (if (and (wl-message-news-p)
+                  (not (wl-draft-sent-message-p 'news))
+                  (not (wl-message-field-exists-p "Resent-to")))
+             (funcall wl-draft-send-news-func)))
+      ;;
+      (let* ((status (wl-draft-sent-message-results))
+            (unplugged-via (car status))
+            (sent-via (nth 1 status)))
+       ;; If one sent, process fcc folder.
+       (when (and sent-via wl-draft-fcc-list)
+         (wl-draft-do-fcc (wl-draft-get-header-delimiter) wl-draft-fcc-list)
+         (setq wl-draft-fcc-list nil))
+       ;; If one unplugged, append queue.
+       (when (and unplugged-via
+                  wl-sent-message-modified)
+         (if wl-draft-enable-queuing
+             (wl-draft-queue-append wl-sent-message-via)
+           (error "Unplugged")))
+       (when wl-draft-verbose-send
+         (if (and unplugged-via sent-via);; combined message
+             (progn
+               (setq wl-draft-verbose-msg 
+                     (format "Sending%s and Queuing%s..."
+                             sent-via unplugged-via))
+               (message (concat wl-draft-verbose-msg "done")))
+           (if mes-string
+               (message (concat mes-string
+                                (if sent-via "done." "failed.")))))))))
+  (not wl-sent-message-modified)) ;; return value
+
+(defun wl-draft-raw-send (&optional kill-when-done force-pre-hook mes-string)
+  "Force send current buffer as raw message."
+  (interactive)
+  (save-excursion
+    (let (wl-interactive-send
+;        wl-draft-verbose-send
+         (wl-mail-send-pre-hook (and force-pre-hook wl-mail-send-pre-hook))
+;        wl-news-send-pre-hook
+         mail-send-hook
+         mail-send-actions)
+      (wl-draft-send kill-when-done mes-string))))
+
+(defun wl-draft-clone-local-variables ()
+  (let ((locals (buffer-local-variables))
+       result)
+    (mapcar
+     (function
+      (lambda (local)
+       (when (and (consp local)
+                  (car local)
+                  (string-match 
+                   wl-draft-clone-local-variable-regexp
+                   (symbol-name (car local))))
+         (setq result (wl-append result (list (car local)))))))
+     locals)
+    result))
+
+(defun wl-draft-send (&optional kill-when-done mes-string)
+  "Send current draft message. 
+If optional argument is non-nil, current draft buffer is killed"
+  (interactive)
+  (wl-draft-config-exec)
+  (run-hooks 'wl-draft-send-hook)
+  (when (or (not wl-interactive-send)
+           (y-or-n-p "Send current draft. OK?"))
+    (let ((send-mail-function 'wl-draft-raw-send)
+         (editing-buffer (current-buffer))
+         (sending-buffer (wl-draft-generate-clone-buffer 
+                          " *wl-draft-sending-buffer*"
+                          (append wl-draft-config-variables
+                                  (wl-draft-clone-local-variables))))
+         (wl-draft-verbose-msg nil)
+         err)
+      (unwind-protect
+         (save-excursion (set-buffer sending-buffer)
+           (if (and (not (wl-message-mail-p))
+                    (not (wl-message-news-p)))
+               (error "No recipient is specified"))
+           (expand-abbrev) ; for mail-abbrevs
+           (run-hooks 'mail-send-hook) ; translate buffer
+           (if wl-draft-verbose-send
+               (message (or mes-string "Sending...")))
+           (funcall wl-draft-send-func editing-buffer kill-when-done)
+           ;; Now perform actions on successful sending.
+           (while mail-send-actions
+             (condition-case ()
+                 (apply (car (car mail-send-actions))
+                        (cdr (car mail-send-actions)))
+               (error))
+             (setq mail-send-actions (cdr mail-send-actions)))
+           (if (or (eq major-mode 'wl-draft-mode)
+                   (eq major-mode 'mail-mode))
+               (local-set-key "\C-c\C-s" 'wl-draft-send)) ; override
+           (if wl-draft-verbose-send
+               (message (concat (or wl-draft-verbose-msg
+                                    mes-string "Sending...")
+                                "done."))))
+       ;; kill sending buffer, anyway.
+       (and (buffer-live-p sending-buffer)
+            (kill-buffer sending-buffer))))))
+
+(defun wl-draft-save ()
+  "Save current draft."
+  (interactive)
+  (save-buffer)
+  (wl-draft-config-info-operation
+   (and (string-match "[0-9]+$" wl-draft-buffer-file-name)
+       (string-to-int
+        (elmo-match-string 0 wl-draft-buffer-file-name)))
+   'save))
+
+(defun wl-draft-mimic-kill-buffer ()
+  "Kill the current (draft) buffer with query."
+  (interactive)
+  (let ((bufname (read-buffer (format "Kill buffer: (default %s) "
+                                     (buffer-name))))
+       wl-draft-use-frame)
+    (if (or (not bufname)
+           (string-equal bufname "")
+           (string-equal bufname (buffer-name)))
+       (wl-draft-save-and-exit)
+      (kill-buffer bufname))))
+
+(defun wl-draft-save-and-exit ()
+  "Save current draft and exit current draft mode."
+  (interactive)
+  (wl-draft-save)
+  (let ((editing-buffer (current-buffer)))
+    (wl-draft-hide editing-buffer)
+    (kill-buffer editing-buffer)))
+  
+(defun wl-draft-send-and-exit ()
+  "Send current draft message and kill it."
+  (interactive)
+  (wl-draft-send t))
+
+(defun wl-draft-send-from-toolbar ()
+  (interactive)
+  (let ((wl-interactive-send t))
+    (wl-draft-send-and-exit)))
+
+(defun wl-draft-delete-field (field &optional delimline)
+  (wl-draft-delete-fields (regexp-quote field) delimline))
+
+(defun wl-draft-delete-fields (regexp &optional delimline)
+  (save-restriction
+    (unless delimline
+      (if (search-forward "\n\n" nil t)
+         (setq delimline (point))
+       (setq delimline (point-max))))
+    (narrow-to-region (point-min) delimline)
+    (goto-char (point-min))
+    (let ((regexp (concat "^" regexp ":"))
+         (case-fold-search t)
+         last)
+      (while (not (eobp))
+       (if (looking-at regexp)
+           (progn
+             (delete-region
+              (point)
+              (progn
+                (forward-line 1)
+                (if (re-search-forward "^[^ \t]" nil t)
+                    (goto-char (match-beginning 0))
+                  (point-max)))))
+         (forward-line 1)
+         (if (re-search-forward "^[^ \t]" nil t)
+             (goto-char (match-beginning 0))
+           (point-max)))))))
+
+(defun wl-draft-get-fcc-list (header-end)
+  (let (fcc-list
+       (case-fold-search t))
+    (or (markerp header-end) (error "header-end must be a marker"))
+    (save-excursion
+      (goto-char (point-min))
+      (while (re-search-forward "^FCC:[ \t]*" header-end t)
+       (setq fcc-list
+             (cons (buffer-substring-no-properties
+                    (point)
+                    (progn
+                      (end-of-line)
+                      (skip-chars-backward " \t")
+                      (point)))
+                   fcc-list))
+       (save-match-data
+         (wl-folder-confirm-existence (eword-decode-string (car fcc-list))))
+       (delete-region (match-beginning 0)
+                      (progn (forward-line 1) (point)))))
+    fcc-list))
+
+(defun wl-draft-do-fcc (header-end &optional fcc-list)
+  (let ((send-mail-buffer (current-buffer))
+       (tembuf (generate-new-buffer " fcc output"))
+       (case-fold-search t)
+       beg end)
+    (or (markerp header-end) (error "header-end must be a marker"))
+    (save-excursion
+      (unless fcc-list
+       (setq fcc-list (wl-draft-get-fcc-list header-end)))
+      (set-buffer tembuf)
+      (erase-buffer)
+      ;; insert just the headers to avoid moving the gap more than
+      ;; necessary (the message body could be arbitrarily huge.)
+      (insert-buffer-substring send-mail-buffer 1 header-end)
+      (wl-draft-insert-required-fields t)
+      (goto-char (point-max))
+      (insert-buffer-substring send-mail-buffer header-end)
+      (let ((id (std11-field-body "Message-ID"))
+           (elmo-enable-disconnected-operation t)
+           cache-saved)
+       (while fcc-list
+         (unless (or cache-saved
+                     (elmo-folder-plugged-p (car fcc-list)))
+           (elmo-cache-save id nil nil nil) ;; for disconnected operation
+           (setq cache-saved t))
+         (if (elmo-append-msg (eword-decode-string (car fcc-list))
+                              (buffer-substring 
+                               (point-min) (point-max))
+                              id)
+             (wl-draft-write-sendlog 'ok 'fcc nil (car fcc-list) id)
+           (wl-draft-write-sendlog 'failed 'fcc nil (car fcc-list) id))
+         (setq fcc-list (cdr fcc-list)))))
+    (kill-buffer tembuf)))
+
+(defun wl-draft-on-field-p ()
+  (if (< (point)
+        (save-excursion
+          (goto-char (point-min))
+          (search-forward (concat "\n" mail-header-separator "\n") nil 0)
+          (point)))
+      (if (bolp)
+         (if (bobp) 
+             t
+           (save-excursion
+             (forward-line -1)
+             (if (looking-at ".*,[ \t]?$") nil t)))
+       (let ((pos (point)))
+         (save-excursion
+           (beginning-of-line)
+           (if (looking-at "^[ \t]")
+               nil
+             (if (re-search-forward ":" pos t) nil t)))))))
+
+(defun wl-draft-random-alphabet ()
+  (let ((alphabet '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z)))
+    (nth (abs (% (random) 26)) alphabet)))
+
+;;;###autoload
+(defun wl-draft (&optional to subject in-reply-to cc references newsgroups
+                          mail-followup-to
+                          content-type
+                          body edit-again summary-buf)
+  "Write and send mail/news message with Wanderlust."
+  (interactive)
+  (unless (featurep 'wl)
+    (require 'wl))
+  (unless wl-init
+    (wl-load-profile))
+  (wl-init) ;; returns immediately if already initialized.
+  (if (interactive-p)
+      (setq summary-buf (wl-summary-get-buffer wl-summary-buffer-folder-name)))
+  (let ((draft-folder-spec (elmo-folder-get-spec wl-draft-folder))
+       buf-name file-name num wl-demo change-major-mode-hook)
+    (if (not (eq (car draft-folder-spec) 'localdir))
+       (error "%s folder cannot be used for draft folder" wl-draft-folder))
+    (setq num (elmo-max-of-list (or (elmo-list-folder wl-draft-folder) '(0))))
+    (setq num (+ 1 num))
+    ;; To get unused buffer name.
+    (while (get-buffer (concat wl-draft-folder "/" (int-to-string num)))
+      (setq num (+ 1 num)))
+    (setq buf-name (find-file-noselect 
+                   (setq file-name
+                         (elmo-get-msg-filename wl-draft-folder
+                                                num))))
+    (if wl-draft-use-frame
+       (switch-to-buffer-other-frame buf-name)
+      (switch-to-buffer buf-name))
+    (set-buffer buf-name)
+    (if (not (string-match (regexp-quote wl-draft-folder)
+                          (buffer-name)))
+       (rename-buffer (concat wl-draft-folder "/" (int-to-string num))))
+    (if (or (eq wl-draft-reply-buffer-style 'full)
+           (eq this-command 'wl-draft)
+           (eq this-command 'wl-summary-write)
+           (eq this-command 'wl-summary-write-current-newsgroup))
+       (delete-other-windows))
+    (auto-save-mode -1)
+    (wl-draft-mode)
+    (setq wl-sent-message-via nil)
+    (if (stringp wl-from)
+       (insert "From: " wl-from "\n"))
+    (and (or (interactive-p)
+            (eq this-command 'wl-summary-write)
+            to)
+        (insert "To: " (or to "") "\n"))
+    (and cc (insert "Cc: " (or cc "") "\n"))
+    (insert "Subject: " (or subject "") "\n")
+    (and newsgroups (insert "Newsgroups: " newsgroups "\n"))
+    (and mail-followup-to (insert "Mail-Followup-To: " mail-followup-to "\n"))
+    (and wl-insert-mail-reply-to 
+        (insert "Mail-Reply-To: " 
+                (wl-address-header-extract-address
+                 wl-from) "\n"))
+    (and in-reply-to (insert "In-Reply-To: " in-reply-to "\n"))
+    (and references (insert "References: " references "\n"))
+    (insert (funcall wl-generate-mailer-string-func) 
+           "\n")
+    (setq wl-draft-buffer-file-name file-name)
+    (if mail-default-reply-to
+       (insert "Reply-To: " mail-default-reply-to "\n"))
+    (if (or wl-bcc mail-self-blind)
+       (insert "Bcc: " (or wl-bcc (user-login-name)) "\n"))
+    (if wl-fcc
+       (insert "FCC: " wl-fcc "\n"))
+    (if wl-organization
+       (insert "Organization: " wl-organization "\n"))
+    (and wl-auto-insert-x-face
+        (file-exists-p wl-x-face-file)
+        (wl-draft-insert-x-face-field-here))
+    (if mail-default-headers
+       (insert mail-default-headers))
+    (if (not (= (preceding-char) ?\n))
+       (insert ?\n))
+    (if edit-again
+       (let (start)
+         (setq start (point))
+         (when content-type 
+           (insert "Content-type: " content-type "\n\n"))
+         (and body (insert body))
+         (save-restriction
+           (narrow-to-region start (point))
+           (and edit-again
+                (wl-draft-decode-message-in-buffer))
+           (widen)
+           (goto-char start)
+           (put-text-property (point)
+                              (progn
+                                (insert mail-header-separator "\n")
+                                (1- (point)))
+                              'category 'mail-header-separator)))
+      (put-text-property (point)
+                        (progn
+                          (insert mail-header-separator "\n")
+                          (1- (point)))
+                        'category 'mail-header-separator)
+      (and body (insert body)))
+    (if wl-on-nemacs
+       (push-mark (point) t)
+      (push-mark (point) t t))
+    (as-binary-output-file
+     (write-region (point-min)(point-max) wl-draft-buffer-file-name
+                  nil t))
+    (wl-draft-editor-mode)
+    (wl-draft-overload-functions)
+    (let (wl-highlight-x-face-func)
+      (wl-highlight-headers))
+    (goto-char (point-min))
+    (if (interactive-p)
+       (run-hooks 'wl-mail-setup-hook))
+    (wl-user-agent-compose-internal) ;; user-agent
+    (cond ((eq this-command 'wl-summary-write-current-newsgroup)
+          (mail-position-on-field "Subject"))
+         ((and (interactive-p) (null to))
+          (mail-position-on-field "To"))
+         (t
+          (goto-char (point-max))))    
+    (setq wl-draft-config-exec-flag t)
+    (setq wl-draft-buffer-cur-summary-buffer (or summary-buf
+                                                (get-buffer
+                                                 wl-summary-buffer-name)))    
+    buf-name))
+
+(defun wl-draft-elmo-nntp-send ()
+  (let ((elmo-nntp-post-pre-hook wl-news-send-pre-hook)
+       (elmo-default-nntp-user
+        (or wl-nntp-posting-user elmo-default-nntp-user))
+       (elmo-default-nntp-server
+        (or wl-nntp-posting-server elmo-default-nntp-server))
+       (elmo-default-nntp-port
+        (or wl-nntp-posting-port elmo-default-nntp-port))
+       (elmo-default-nntp-ssl
+        (or wl-nntp-posting-ssl elmo-default-nntp-ssl)))
+    (if (not (elmo-plugged-p elmo-default-nntp-server elmo-default-nntp-port))
+       (wl-draft-set-sent-message 'news 'unplugged
+                                  (cons elmo-default-nntp-server
+                                        elmo-default-nntp-port))
+      (elmo-nntp-post elmo-default-nntp-server (current-buffer))
+      (wl-draft-set-sent-message 'news 'sent)
+      (wl-draft-write-sendlog 'ok 'nntp elmo-default-nntp-server
+                             (std11-field-body "Newsgroups")
+                             (std11-field-body "Message-ID")))))
+
+(defun wl-draft-generate-clone-buffer (name &optional local-variables)
+  "generate clone of current buffer named NAME."
+  (let ((editing-buffer (current-buffer)))
+    (save-excursion
+      (set-buffer (generate-new-buffer name))
+      (erase-buffer)
+      (wl-draft-mode)
+      (wl-draft-editor-mode)
+      (insert-buffer editing-buffer)
+      (message "")
+      (when local-variables
+       (mapcar
+        (function
+         (lambda (var)
+           (make-local-variable var)
+           (set var (save-excursion
+                      (set-buffer editing-buffer)
+                      (symbol-value var)))))
+        local-variables))
+      (current-buffer))))
+
+(defun wl-draft-reedit (number)
+  (let ((draft-folder-spec (elmo-folder-get-spec wl-draft-folder))
+       (wl-draft-reedit t)
+       buf-name file-name change-major-mode-hook)
+    (setq file-name (expand-file-name
+                    (int-to-string number)
+                    (expand-file-name
+                     (nth 1 draft-folder-spec)
+                     elmo-localdir-folder-path)))
+    (unless (file-exists-p file-name)
+      (error "File %s does not exist" file-name))
+    (setq buf-name (find-file-noselect file-name))
+    (if wl-draft-use-frame
+       (switch-to-buffer-other-frame buf-name)
+      (switch-to-buffer buf-name))
+    (set-buffer buf-name)
+    (if (not (string-match (regexp-quote wl-draft-folder)
+                          (buffer-name)))
+       (rename-buffer (concat wl-draft-folder "/" (buffer-name))))    
+    (auto-save-mode -1)
+    (wl-draft-mode)
+    (setq wl-sent-message-via nil)
+    (setq wl-draft-buffer-file-name file-name)
+    (wl-draft-config-info-operation number 'load)
+    (goto-char (point-min))
+    (or (re-search-forward "\n\n" nil t)
+       (search-forward (concat mail-header-separator "\n") nil t))
+    (if wl-on-nemacs
+       (push-mark (point) t)
+      (push-mark (point) t t))
+    (write-region (point-min)(point-max) wl-draft-buffer-file-name
+                 nil t)
+    (wl-draft-overload-functions)
+    (wl-draft-editor-mode)
+    (let (wl-highlight-x-face-func)
+      (wl-highlight-headers))
+    (run-hooks 'wl-draft-reedit-hook)
+    (goto-char (point-max))
+    buf-name
+    ))
+
+(defmacro wl-draft-body-goto-top ()
+  (` (progn
+       (goto-char (point-min))
+       (if (re-search-forward mail-header-separator nil t)
+          (forward-char 1)
+        (goto-char (point-max))))))
+
+(defmacro wl-draft-body-goto-bottom ()
+  (` (goto-char (point-max))))
+
+(defmacro wl-draft-config-body-goto-header ()
+  (` (progn
+       (goto-char (point-min))
+       (if (re-search-forward mail-header-separator nil t)
+          (beginning-of-line)
+        (goto-char (point-max))))))
+
+(defun wl-draft-config-sub-body (content)
+  (wl-draft-body-goto-top)
+  (delete-region (point) (point-max))
+  (if content (insert (eval content))))
+
+(defun wl-draft-config-sub-top (content)
+  (wl-draft-body-goto-top)
+  (if content (insert (eval content))))
+
+(defun wl-draft-config-sub-bottom (content)
+  (wl-draft-body-goto-bottom)
+  (if content (insert (eval content))))
+
+(defun wl-draft-config-sub-header (content)
+  (wl-draft-config-body-goto-header)
+  (if content (insert (concat (eval content) "\n"))))
+
+(defsubst wl-draft-config-sub-file (content)
+  (let ((coding-system-for-read wl-cs-autoconv)
+       (file (expand-file-name (eval content))))
+    (if (file-exists-p file)
+       (insert-file-contents file)
+      (error "%s: no exists file" file))))
+
+(defun wl-draft-config-sub-body-file (content)
+  (wl-draft-body-goto-top)
+  (delete-region (point) (point-max))
+  (wl-draft-config-sub-file content))
+
+(defun wl-draft-config-sub-top-file (content)
+  (wl-draft-body-goto-top)
+  (wl-draft-config-sub-file content))
+
+(defun wl-draft-config-sub-bottom-file (content)
+  (wl-draft-body-goto-bottom)
+  (wl-draft-config-sub-file content))
+
+(defun wl-draft-config-sub-header-file (content)
+  (wl-draft-config-body-goto-header)
+  (wl-draft-config-sub-file content))
+
+(defun wl-draft-config-sub-template (content)
+  (setq wl-draft-config-variables
+       (wl-template-insert (eval content))))
+
+(defun wl-draft-config-sub-x-face (content)
+  (if (and (string-match "\\.xbm\\(\\.gz\\)?$" content) 
+          (fboundp 'x-face-insert)) ; x-face.el is installed.
+      (x-face-insert content)
+    (wl-draft-replace-field "X-Face" (elmo-get-file-string content t) t)))
+
+(defsubst wl-draft-config-sub-func (field content)
+  (let (func)
+    (if (setq func (assq field wl-draft-config-sub-func-alist))
+       (let (wl-draft-config-variables)
+         (funcall (cdr func) content)
+         ;; for wl-draft-config-sub-template
+         (cons t wl-draft-config-variables)))))
+
+(defsubst wl-draft-config-exec-sub (clist)
+  (let (config local-variables)
+    (while clist
+      (setq config (car clist))
+      (cond
+       ((consp config)
+       (let ((field (car config))
+             (content (cdr config))
+             ret-val)
+         (cond
+          ((stringp field)
+           (wl-draft-replace-field field (eval content) t))
+          ((setq ret-val (wl-draft-config-sub-func field content))
+           (if (cdr ret-val) ;; for wl-draft-config-sub-template
+               (wl-append local-variables (cdr ret-val))))
+          ((boundp field) ;; variable
+           (make-local-variable field)
+           (set field (eval content))
+           (wl-append local-variables (list field)))
+          (t
+           (error "%s: not variable" field)))))
+       ((or (functionp config)
+           (and (symbolp config)
+                (fboundp config)))
+       (funcall config))
+       (t
+       (error "%s: not supported type" config)))
+      (setq clist (cdr clist)))
+    local-variables))
+
+(defun wl-draft-prepared-config-exec (&optional config-alist reply-buf)
+  "Change headers in draft preparation time."
+  (interactive)
+  (unless wl-draft-reedit
+    (let ((config-alist 
+          (or config-alist
+              (and (boundp 'wl-draft-prepared-config-alist)
+                   wl-draft-prepared-config-alist)     ;; For compatible.
+              wl-draft-config-alist)))
+      (if config-alist
+         (wl-draft-config-exec config-alist reply-buf)))))
+
+(defun wl-draft-config-exec (&optional config-alist reply-buf)
+  "Change headers in draft sending time."
+  (interactive)
+  (let ((case-fold-search t)
+       (alist (or config-alist wl-draft-config-alist))
+       (reply-buf (or reply-buf (and (buffer-live-p wl-draft-reply-buffer)
+                                     wl-draft-reply-buffer)))
+       (local-variables wl-draft-config-variables)
+       key clist found)
+    (when (and (or (interactive-p)
+                  wl-draft-config-exec-flag)
+              alist)
+      (save-excursion
+       (catch 'done
+         (while alist
+           (setq key (caar alist)
+                 clist (cdar alist))
+           (cond
+            ((eq key 'reply)
+             (when (and
+                    reply-buf
+                    (save-excursion
+                      (set-buffer reply-buf)
+                      (save-restriction
+                        (std11-narrow-to-header)
+                        (goto-char (point-min))
+                        (re-search-forward (car clist) nil t))))
+               (wl-draft-config-exec-sub (cdr clist))
+               (setq found t)))
+            ((stringp key)
+             (when (save-restriction
+                     (std11-narrow-to-header mail-header-separator)
+                     (goto-char (point-min))
+                     (re-search-forward key nil t))
+               (wl-append local-variables
+                          (wl-draft-config-exec-sub clist))
+               (setq found t)))
+            ((eval key)
+             (wl-append local-variables
+                        (wl-draft-config-exec-sub clist))
+             (setq found t)))
+           (if (and found wl-draft-config-matchone)
+               (throw 'done t))
+           (setq alist (cdr alist))))
+       (if found
+           (setq wl-draft-config-exec-flag nil))
+       (run-hooks 'wl-draft-config-exec-hook)
+       (put-text-property (point-min)(point-max) 'face nil)
+       (wl-highlight-message (point-min)(point-max) t)
+       (setq wl-draft-config-variables
+             (elmo-uniq-list local-variables))))))
+
+(defun wl-draft-replace-field (field content &optional add)
+  (save-excursion
+    (save-restriction
+      (let ((case-fold-search t)
+           (inhibit-read-only t) ;; added by teranisi.
+           beg)
+       (std11-narrow-to-header mail-header-separator)
+       (goto-char (point-min))
+       (if (re-search-forward (concat "^" (regexp-quote field) ":") nil t)
+           (if content
+               ;; replace field
+               (progn
+                 (setq beg (point))
+                 (re-search-forward "^[^ \t]" nil 'move)
+                 (beginning-of-line)
+                 (skip-chars-backward "\n")
+                 (delete-region beg (point))
+                 (insert " " content))
+             ;; delete field
+             (save-excursion
+               (beginning-of-line)
+               (setq beg (point)))
+             (re-search-forward "^[^ \t]" nil 'move)
+             (beginning-of-line)
+             (delete-region beg (point)))
+         (when (and add content)
+           ;; add field
+           (goto-char (point-max))
+           (insert (concat field ": " content "\n"))))))))
+
+(defun wl-draft-config-info-operation (msg operation)
+  (let* ((msgdb-dir (elmo-msgdb-expand-path wl-draft-folder))
+        (filename
+         (expand-file-name
+          (format "%s-%d" wl-draft-config-save-filename msg)
+          msgdb-dir))
+        element alist variable)
+    (cond
+     ((eq operation 'save)
+      (let ((variables (elmo-uniq-list wl-draft-config-variables)))
+       (while (setq variable (pop variables))
+         (when (boundp variable)
+           (wl-append alist
+                      (list (cons variable (eval variable))))))
+       (elmo-object-save filename alist)))
+     ((eq operation 'load)
+      (setq alist (elmo-object-load filename))
+      (while (setq element (pop alist))
+       (set (make-local-variable (car element)) (cdr element))
+       (wl-append wl-draft-config-variables (list (car element)))))
+     ((eq operation 'delete)
+      (if (file-exists-p filename)
+         (delete-file filename))))))
+
+(defun wl-draft-queue-info-operation (msg operation
+                                         &optional add-sent-message-via)
+  (let* ((msgdb-dir (elmo-msgdb-expand-path wl-queue-folder))
+        (filename
+         (expand-file-name
+          (format "%s-%d" wl-draft-queue-save-filename msg)
+          msgdb-dir))
+        element alist variable)
+    (cond
+     ((eq operation 'save)
+      (let ((variables (elmo-uniq-list
+                       (append wl-draft-queue-save-variables
+                               wl-draft-config-variables
+                               (list 'wl-draft-fcc-list)))))
+       (if add-sent-message-via
+           (push 'wl-sent-message-via variables))
+       (while (setq variable (pop variables))
+         (when (boundp variable)
+           (wl-append alist
+                      (list (cons variable (eval variable))))))
+       (elmo-object-save filename alist)))
+     ((eq operation 'load)
+      (setq alist (elmo-object-load filename))
+      (while (setq element (pop alist))
+       (set (make-local-variable (car element)) (cdr element))))
+     ((eq operation 'get-sent-via)
+      (setq alist (elmo-object-load filename))
+      (cdr (assq 'wl-sent-message-via alist)))
+     ((eq operation 'delete)
+      (if (file-exists-p filename)
+         (delete-file filename))))))
+
+(defun wl-draft-queue-append (wl-sent-message-via)
+  (if wl-draft-verbose-send
+      (message "Queuing..."))
+  (let ((send-buffer (current-buffer))
+       (message-id (std11-field-body "Message-ID")))
+    (if (elmo-append-msg wl-queue-folder
+                        (buffer-substring (point-min) (point-max))
+                        message-id)
+       (progn
+         (if message-id
+             (elmo-dop-lock-message message-id))
+         (wl-draft-queue-info-operation
+          (car (elmo-max-of-folder wl-queue-folder))
+          'save wl-sent-message-via)
+         (wl-draft-write-sendlog 'ok 'queue nil wl-queue-folder message-id)
+         (when wl-draft-verbose-send
+           (setq wl-draft-verbose-msg "Queuing...")
+           (message "Queuing...done.")))
+      (wl-draft-write-sendlog 'failed 'queue nil wl-queue-folder message-id)
+      (error "Queuing failed"))))
+
+(defun wl-draft-queue-flush ()
+  "Flush draft queue."
+  (interactive)
+  (let ((msgs2 (elmo-list-folder wl-queue-folder))
+       (i 0)
+       (performed 0)
+       (wl-draft-queue-flushing t)
+       msgs failure len buffer msgid sent-via)
+    ;; get plugged send message
+    (while msgs2
+      (setq sent-via (wl-draft-queue-info-operation (car msgs2) 'get-sent-via))
+      (catch 'found
+       (while sent-via
+         (when (and (eq (nth 1 (car sent-via)) 'unplugged)
+                    (elmo-plugged-p
+                     (car (nth 2 (car sent-via)))
+                     (cdr (nth 2 (car sent-via)))))
+           (wl-append msgs (list (car msgs2)))
+           (throw 'found t))
+         (setq sent-via (cdr sent-via))))
+      (setq msgs2 (cdr msgs2)))
+    (when (> (setq len (length msgs)) 0)
+      (if (elmo-y-or-n-p (format
+                         "%d message(s) are in the sending queue. Send now?"
+                         len)
+                        (not elmo-dop-flush-confirm) t)
+         (progn
+           (save-excursion
+             (setq buffer (get-buffer-create " *wl-draft-queue-flush*"))
+             (set-buffer buffer)
+             (while msgs
+               ;; reset buffer local variables
+               (kill-all-local-variables)
+               (erase-buffer)
+               (setq i (+ 1 i)
+                     failure nil)
+               (setq wl-sent-message-via nil)
+               (wl-draft-queue-info-operation (car msgs) 'load)
+               (elmo-read-msg-no-cache wl-queue-folder (car msgs) 
+                                       (current-buffer))
+               (condition-case err
+                   (setq failure (funcall
+                                  wl-draft-queue-flush-send-func
+                                  (format "Sending (%d/%d)..." i len)))
+;;                 (wl-draft-raw-send nil nil
+;;                                    (format "Sending (%d/%d)..." i len))
+                 (error
+                  (elmo-display-error err t)
+                  (setq failure t))
+                 (quit 
+                  (setq failure t)))
+               (unless failure
+                 (elmo-delete-msgs wl-queue-folder (cons (car msgs) nil))
+                 (wl-draft-queue-info-operation (car msgs) 'delete)
+                 (elmo-dop-unlock-message (std11-field-body "Message-ID"))
+                 (setq performed (+ 1 performed)))
+               (setq msgs (cdr msgs)))
+             (kill-buffer buffer)
+             (message "%d message(s) are sent." performed)))
+       (message "%d message(s) are remained to be sent." len))
+      len)))
+
+(defun wl-jump-to-draft-buffer (&optional arg)
+  "Jump to the draft if exists."
+  (interactive "P")
+  (if arg
+      (wl-jump-to-draft-folder)
+    (let ((bufs (buffer-list))
+         (draft-regexp (concat
+                        "^" (regexp-quote
+                             (expand-file-name
+                              (nth 1 (elmo-folder-get-spec wl-draft-folder))
+                              (expand-file-name
+                               elmo-localdir-folder-path)))))
+         buf draft-bufs)
+      (while bufs
+       (if (and
+            (setq buf (buffer-file-name (car bufs)))
+            (string-match draft-regexp buf))
+           (setq draft-bufs (cons (buffer-name (car bufs)) draft-bufs)))
+       (setq bufs (cdr bufs)))
+      (cond
+       ((null draft-bufs)
+       (message "No draft buffer exist."))
+       (t
+       (setq draft-bufs
+             (sort draft-bufs (function (lambda (a b) (not (string< a b))))))
+       (if (setq buf (cdr (member (buffer-name) draft-bufs)))
+           (setq buf (car buf))
+         (setq buf (car draft-bufs)))
+       (switch-to-buffer buf))))))
+
+(defun wl-jump-to-draft-folder ()
+  (let ((msgs (reverse (elmo-list-folder wl-draft-folder)))
+       (mybuf (buffer-name))
+       msg buf)
+    (if (not msgs)
+       (message "No draft message exist.")
+      (if (string-match (concat "^" wl-draft-folder "/") mybuf)
+         (setq msg (cadr (memq
+                          (string-to-int (substring mybuf (match-end 0)))
+                          msgs))))
+      (or msg (setq msg (car msgs)))
+      (if (setq buf (get-buffer (format "%s/%d" wl-draft-folder msg)))
+         (switch-to-buffer buf)
+       (wl-draft-reedit msg)))))
+
+(defun wl-draft-highlight-and-recenter (&optional n)
+  (interactive "P")
+  (if wl-highlight-body-too
+      (let ((beg (point-min))
+           (end (point-max)))
+       (put-text-property beg end 'face nil)
+       (wl-highlight-message beg end t)))
+  (recenter n))
+
+;;;; user-agent support by Sen Nagata
+
+;; this appears to be necessarily global...
+(defvar wl-user-agent-compose-p nil)
+(defvar wl-user-agent-headers-and-body-alist nil)
+
+;; this should be a generic function for mail-mode -- i wish there was
+;; something like it in sendmail.el
+(defun wl-user-agent-insert-header (header-name header-value)
+  "Insert HEADER-NAME w/ value HEADER-VALUE into a message."
+  ;; it seems like overriding existing headers is acceptable -- should
+  ;; we provide an option?
+  
+  ;; plan was: unfold header (might be folded), remove existing value, insert
+  ;;           new value
+  ;; wl doesn't seem to fold header lines yet anyway :-)
+  
+  (let ((kill-whole-line t)
+       end-of-line)
+    (mail-position-on-field (capitalize header-name))
+    (setq end-of-line (point))
+    (beginning-of-line)
+    (re-search-forward ":" end-of-line)
+    (insert (concat " " header-value "\n"))
+    (kill-line)))
+
+;; this should be a generic function for mail-mode -- i wish there was
+;; something like it in sendmail.el
+;;
+;; ** haven't dealt w/ case where the body is already set **
+(defun wl-user-agent-insert-body (body-text)
+  "Insert a body of text, BODY-TEXT, into a message."
+  ;; code defensively... :-P
+  (goto-char (point-min))
+  (search-forward mail-header-separator)
+  (forward-line 1)
+  (insert body-text))
+
+;;;###autoload
+(defun wl-user-agent-compose (&optional to subject other-headers continue
+                                       switch-function yank-action
+                                       send-actions)
+  "Support the `compose-mail' interface for wl.
+Only support for TO, SUBJECT, and OTHER-HEADERS has been implemented.
+Support for CONTINUE, YANK-ACTION, and SEND-ACTIONS has not
+been implemented yet.  Partial support for SWITCH-FUNCTION now supported."
+
+  ;; protect these -- to and subject get bound at some point, so it looks
+  ;; to be necessary to protect the values used w/in
+  (let ((wl-user-agent-headers-and-body-alist other-headers)
+       (wl-draft-use-frame (eq switch-function 'switch-to-buffer-other-frame))
+       (wl-draft-reply-buffer-style 'split))
+    (when (eq switch-function 'switch-to-buffer-other-window)
+      (when (one-window-p t)
+       (if (window-minibuffer-p) (other-window 1))
+       (split-window))
+      (other-window 1))
+    (if to
+       (if (wl-string-match-assoc "to" wl-user-agent-headers-and-body-alist
+                                  'ignore-case)
+           (setcdr
+            (wl-string-match-assoc "to" wl-user-agent-headers-and-body-alist
+                                   'ignore-case)
+            to)
+         (setq wl-user-agent-headers-and-body-alist
+               (cons (cons "to" to)
+                     wl-user-agent-headers-and-body-alist))))
+    (if subject
+       (if (wl-string-match-assoc "subject" 
+                                  wl-user-agent-headers-and-body-alist
+                                  'ignore-case)
+           (setcdr
+            (wl-string-match-assoc "subject" 
+                                   wl-user-agent-headers-and-body-alist
+                                   'ignore-case)
+            subject)
+         (setq wl-user-agent-headers-and-body-alist
+               (cons (cons "subject" subject)
+                     wl-user-agent-headers-and-body-alist))))
+    ;; i think this is what we want to use...
+    (unwind-protect
+       (progn
+         ;; tell the hook-function to do its stuff
+         (setq wl-user-agent-compose-p t)
+         ;; because to get the hooks working, wl-draft has to think it has
+         ;; been called interactively
+         (call-interactively 'wl-draft))
+      (setq wl-user-agent-compose-p nil))))
+
+(defun wl-user-agent-compose-internal ()
+  "Manipulate headers and/or a body of a draft message."
+  ;; being called from wl-user-agent-compose?
+  (if wl-user-agent-compose-p
+      (progn
+       ;; insert headers
+       (let ((case-fold-search t))
+         (mapcar
+          (lambda (x)
+            (let ((header-name (car x))
+                  (header-value (cdr x)))
+              ;; skip body
+              (if (not (string-match "^body$" header-name))
+                  (wl-user-agent-insert-header header-name header-value)
+                t)))
+          wl-user-agent-headers-and-body-alist))
+       ;; highlight headers (from wl-draft in wl-draft.el)
+       (let (wl-highlight-x-face-func)
+         (wl-highlight-headers))
+       ;; insert body
+       (if (wl-string-match-assoc "body" wl-user-agent-headers-and-body-alist
+                                  'ignore-case)
+           (wl-user-agent-insert-body
+            (cdr (wl-string-match-assoc
+                  "body"
+                  wl-user-agent-headers-and-body-alist 'ignore-case)))))
+    t))
+
+(provide 'wl-draft)
+
+;;; wl-draft.el ends here
diff --git a/wl/wl-expire.el b/wl/wl-expire.el
new file mode 100644 (file)
index 0000000..003c749
--- /dev/null
@@ -0,0 +1,729 @@
+;;; wl-expire.el -- Message expire modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:34:13 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+(require 'wl-summary)
+(require 'wl-thread)
+(require 'wl-folder)
+
+;;; Code:
+
+(eval-when-compile
+  (require 'wl-util)
+  (require 'elmo-archive))
+
+;; Variables
+
+(defvar wl-expired-alist nil)
+(defvar wl-expired-alist-file-name "expired-alist")
+(defvar wl-expired-log-alist nil)
+(defvar wl-expired-log-alist-file-name "expired-log")
+
+(defun wl-expired-alist-load ()
+  (elmo-object-load (expand-file-name
+                    wl-expired-alist-file-name
+                    elmo-msgdb-dir)))
+
+(defun wl-expired-alist-save (&optional alist)
+  (elmo-object-save (expand-file-name
+                    wl-expired-alist-file-name
+                    elmo-msgdb-dir)
+                   (or alist wl-expired-alist)))
+
+(defsubst wl-expire-msg-p (msg-num mark-alist)
+  (cond ((consp wl-summary-expire-reserve-marks)
+        (let ((mark (nth 1 (assq msg-num mark-alist))))
+          (not (or (member mark wl-summary-expire-reserve-marks)
+                   (and wl-summary-buffer-disp-msg
+                        (eq msg-num wl-summary-buffer-current-msg))))))
+       ((eq wl-summary-expire-reserve-marks 'all)
+        (not (or (assq msg-num mark-alist)
+                 (and wl-summary-buffer-disp-msg
+                      (eq msg-num wl-summary-buffer-current-msg)))))
+       ((eq wl-summary-expire-reserve-marks 'none)
+        t)
+       (t
+        (error "invalid marks: %s" wl-summary-expire-reserve-marks))))
+
+(defmacro wl-expire-make-sortable-date (date)
+  (` (timezone-make-sortable-date
+      (aref (, date) 0) (aref (, date) 1) (aref (, date) 2)
+      (timezone-make-time-string
+       (aref (, date) 3) (aref (, date) 4) (aref (, date) 5)))))
+
+(defsubst wl-expire-date-p (key-datevec date)
+  (let ((datevec (condition-case nil
+                    (timezone-fix-time date nil nil)
+                  (error nil))))
+    (and
+     datevec (> (aref datevec 1) 0)
+     (string<
+      (wl-expire-make-sortable-date datevec)
+      (wl-expire-make-sortable-date key-datevec)))))
+
+(defun wl-expire-delete-reserve-marked-msgs-from-list (msgs mark-alist)
+  (let ((dlist msgs))
+    (while dlist
+      (unless (wl-expire-msg-p (car dlist) mark-alist)
+       (setq msgs (delq (car dlist) msgs)))
+      (setq dlist (cdr dlist)))
+    msgs))
+
+(defun wl-expire-delete (folder delete-list msgdb &optional no-reserve-marks)
+  "Delete message for expire."
+  (unless no-reserve-marks
+    (setq delete-list
+         (wl-expire-delete-reserve-marked-msgs-from-list
+          delete-list (elmo-msgdb-get-mark-alist msgdb))))
+  (when delete-list
+   (let ((mess
+        (format "Expiring (delete) %s msgs..."
+                (length delete-list))))
+    (message "%s" mess)
+    (if (elmo-delete-msgs folder
+                         delete-list
+                         msgdb)
+       (progn
+         (elmo-msgdb-delete-msgs folder
+                                 delete-list
+                                 msgdb
+                                 t)
+         (wl-expire-append-log folder delete-list nil 'delete)
+         (message "%s" (concat mess "done")))
+      (error (concat mess "failed!")))))
+  (cons delete-list (length delete-list)))
+
+(defun wl-expire-refile (folder refile-list msgdb dst-folder
+                               &optional no-reserve-marks preserve-number copy)
+  "Refile message for expire. If COPY is non-nil, copy message."
+  (when (not (string= folder dst-folder))
+    (unless no-reserve-marks
+      (setq refile-list
+           (wl-expire-delete-reserve-marked-msgs-from-list
+            refile-list (elmo-msgdb-get-mark-alist msgdb))))
+    (when refile-list
+     (let* ((doingmes (if copy
+                        "Copying %s"
+                      "Expiring (move %s)"))
+          (mess (format (concat doingmes " %s msgs...")
+                        dst-folder (length refile-list))))
+      (message "%s" mess)
+      (unless (or (elmo-folder-exists-p dst-folder)
+                 (elmo-create-folder dst-folder))
+       (error "%s: create folder failed" dst-folder))
+      (if wl-expire-add-seen-list
+         (elmo-msgdb-add-msgs-to-seen-list 
+          dst-folder
+          refile-list
+          msgdb 
+          (concat wl-summary-important-mark
+                  wl-summary-read-uncached-mark)))
+      (if (elmo-move-msgs folder
+                         refile-list
+                         dst-folder
+                         msgdb
+                         nil nil t
+                         copy
+                         preserve-number)
+         (progn
+           (wl-expire-append-log folder refile-list dst-folder (if copy 'copy 'move))
+           (message "%s" (concat mess "done")))
+       (error (concat mess "failed!")))))
+    (cons refile-list (length refile-list))))
+
+(defun wl-expire-refile-with-copy-reserve-msg
+  (folder refile-list msgdb dst-folder
+         &optional no-reserve-marks preserve-number copy)
+  "Refile message for expire.
+If REFILE-LIST includes reserve mark message, so copy."
+  (when (not (string= folder dst-folder))
+    (let ((msglist refile-list)
+         (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+         (number-alist (elmo-msgdb-get-number-alist msgdb))
+         (ret-val t)
+         (copy-reserve-message)
+         (copy-len 0)
+         msg msg-id)
+      (message "Expiring (move %s) %s msgs..."
+              dst-folder (length refile-list))
+      (unless (or (elmo-folder-exists-p dst-folder)
+                 (elmo-create-folder dst-folder))
+       (error "%s: create folder failed" dst-folder))
+      (while (setq msg (wl-pop msglist))
+       (unless (wl-expire-msg-p msg mark-alist)
+         (setq msg-id (cdr (assq msg number-alist)))
+         (if (assoc msg-id wl-expired-alist)
+             ;; reserve mark message already refiled or expired
+             (setq refile-list (delq msg refile-list))
+           ;; reserve mark message not refiled
+           (wl-append wl-expired-alist (list (cons msg-id dst-folder)))
+           (setq copy-reserve-message t))))
+      (when refile-list
+       (if wl-expire-add-seen-list
+           (elmo-msgdb-add-msgs-to-seen-list 
+            dst-folder
+            refile-list
+            msgdb 
+            (concat wl-summary-important-mark
+                    wl-summary-read-uncached-mark)))
+       (unless
+           (setq ret-val
+                 (elmo-move-msgs folder
+                                 refile-list
+                                 dst-folder
+                                 msgdb
+                                 nil nil t
+                                 copy-reserve-message
+                                 preserve-number))
+         (error "expire: move msgs to %s failed" dst-folder))
+       (wl-expire-append-log folder refile-list dst-folder
+                          (if copy-reserve-message 'copy 'move))
+       (setq copy-len (length refile-list))
+       (when copy-reserve-message
+         (setq refile-list
+               (wl-expire-delete-reserve-marked-msgs-from-list
+                refile-list 
+                mark-alist))
+         (when refile-list 
+          (if (setq ret-val
+                   (elmo-delete-msgs folder
+                                     refile-list
+                                     msgdb))
+             (progn
+               (elmo-msgdb-delete-msgs folder
+                                       refile-list
+                                       msgdb
+                                       t)
+               (wl-expire-append-log folder refile-list nil 'delete))))))
+      (let ((mes (format "Expiring (move %s) %s msgs..."
+                        dst-folder (length refile-list))))
+       (if ret-val
+           (message (concat mes "done"))
+         (error (concat mes "failed!"))))
+      (cons refile-list copy-len))))
+
+(defun wl-expire-archive-get-folder (src-folder &optional fmt)
+  "Get archive folder name from src-folder."
+  (let* ((spec (elmo-folder-get-spec src-folder))
+        (fmt (or fmt wl-expire-archive-folder-name-fmt))
+        (archive-spec (char-to-string
+                       (car (rassq 'archive elmo-spec-alist))))
+        dst-folder-base dst-folder-fmt prefix)
+    (cond ((eq (car spec) 'localdir)
+          (setq dst-folder-base (concat archive-spec (nth 1 spec))))
+         ((stringp (nth 1 spec))
+          (setq dst-folder-base
+                (elmo-concat-path (format "%s%s" archive-spec (car spec))
+                                  (nth 1 spec))))
+         (t
+          (setq dst-folder-base
+                (elmo-concat-path (format "%s%s" archive-spec (car spec))
+                                  (elmo-replace-msgid-as-filename 
+                                   src-folder)))))
+    (setq dst-folder-fmt (format fmt
+                                dst-folder-base
+                                wl-expire-archive-folder-type))
+    (setq dst-folder-base (format "%s;%s"
+                                 dst-folder-base
+                                 wl-expire-archive-folder-type))
+    (when (and wl-expire-archive-folder-prefix
+              (stringp (nth 1 spec)))
+      (cond ((eq wl-expire-archive-folder-prefix 'short)
+            (setq prefix (file-name-nondirectory (nth 1 spec))))
+           (t
+            (setq prefix (nth 1 spec))))
+      (setq dst-folder-fmt (concat dst-folder-fmt ";" prefix))
+      (setq dst-folder-base (concat dst-folder-base ";" prefix)))
+    (cons dst-folder-base dst-folder-fmt)))
+
+(defsubst wl-expire-archive-get-max-number (dst-folder-base &optional regexp)
+  (let ((files (reverse (sort (elmo-list-folders dst-folder-base)
+                             'string<)))
+       (regexp (or regexp wl-expire-archive-folder-num-regexp))
+       filenum in-folder)
+    (catch 'done
+      (while files
+       (when (string-match regexp (car files))
+         (setq filenum (elmo-match-string 1 (car files)))
+         (setq in-folder (elmo-max-of-folder (car files)))
+         (throw 'done (cons in-folder filenum)))
+       (setq files (cdr files))))))
+
+(defun wl-expire-archive-number-delete-old (dst-folder-base
+                                           preserve-number msgs mark-alist
+                                           &optional no-confirm regexp file)
+  (let ((len 0) (max-num 0)
+       folder-info dels)
+    (if (or (and file (setq folder-info
+                           (cons (elmo-max-of-folder file) nil)))
+           (setq folder-info (wl-expire-archive-get-max-number dst-folder-base
+                                                               regexp)))
+       (progn
+         (setq len (cdar folder-info))
+         (when preserve-number
+           ;; delete small number than max number of dst-folder
+           (setq max-num (caar folder-info))
+           (while (and msgs (>= max-num (car msgs)))
+             (wl-append dels (list (car msgs)))
+             (setq msgs (cdr msgs)))
+           (setq dels (wl-expire-delete-reserve-marked-msgs-from-list
+                       dels mark-alist))
+           (unless (and dels
+                        (or (or no-confirm (not wl-expire-delete-oldmsg-confirm))
+                            (progn
+                              (if (eq major-mode 'wl-summary-mode)
+                                  (wl-thread-jump-to-msg (car dels)))
+                              (y-or-n-p (format "Delete old messages %s? "
+                                                dels)))))
+             (setq dels nil)))
+         (list msgs dels max-num (cdr folder-info) len))
+      (list msgs dels 0 "0" 0))))
+
+(defun wl-expire-archive-number1 (folder delete-list msgdb
+                                        &optional preserve-number no-delete)
+  "Standard function for `wl-summary-expire'.
+Refile to archive folder followed message number."
+  (let* ((elmo-archive-treat-file t)   ;; treat archive folder as a file.
+        (dst-folder-fmt (funcall
+                         wl-expire-archive-get-folder-func folder))
+        (dst-folder-base (car dst-folder-fmt))
+        (dst-folder-fmt (cdr dst-folder-fmt))
+        (refile-func (if no-delete
+                         'wl-expire-refile
+                       'wl-expire-refile-with-copy-reserve-msg))
+        tmp dels dst-folder
+        prev-arcnum arcnum msg arcmsg-list
+        deleted-list ret-val)
+    (setq tmp (wl-expire-archive-number-delete-old
+              dst-folder-base preserve-number delete-list
+              (elmo-msgdb-get-mark-alist msgdb)
+              no-delete))
+    (when (and (not no-delete)
+              (setq dels (nth 1 tmp)))
+      (wl-append deleted-list (car (wl-expire-delete folder dels msgdb))))
+    (setq delete-list (car tmp))
+    (catch 'done
+      (while t
+       (if (setq msg (wl-pop delete-list))
+           (setq arcnum (/ msg wl-expire-archive-files))
+         (setq arcnum nil))
+       (when (and prev-arcnum
+                  (not (eq arcnum prev-arcnum)))
+         (setq dst-folder (format dst-folder-fmt
+                                  (* prev-arcnum wl-expire-archive-files)))
+         (and (setq ret-val
+                    (funcall
+                     refile-func
+                     folder arcmsg-list msgdb dst-folder t preserve-number
+                     no-delete))
+              (wl-append deleted-list (car ret-val)))
+         (setq arcmsg-list nil))
+       (if (null msg)
+           (throw 'done t))
+       (wl-append arcmsg-list (list msg))
+       (setq prev-arcnum arcnum)))
+    deleted-list
+    ))
+
+(defun wl-expire-archive-number2 (folder delete-list msgdb
+                                        &optional preserve-number no-delete)
+  "Standard function for `wl-summary-expire'.
+Refile to archive folder followed the number of message in one archive folder."
+  (let* ((elmo-archive-treat-file t)   ;; treat archive folder as a file.
+        (dst-folder-fmt (funcall
+                         wl-expire-archive-get-folder-func folder))
+        (dst-folder-base (car dst-folder-fmt))
+        (dst-folder-fmt (cdr dst-folder-fmt))
+        (refile-func (if no-delete
+                         'wl-expire-refile
+                       'wl-expire-refile-with-copy-reserve-msg))
+        (len 0) (filenum 0)
+        tmp dels dst-folder
+        arc-len msg arcmsg-list
+        deleted-list ret-val)
+    (setq tmp (wl-expire-archive-number-delete-old
+              dst-folder-base preserve-number delete-list
+              (elmo-msgdb-get-mark-alist msgdb)
+              no-delete))
+    (when (and (not no-delete)
+              (setq dels (nth 1 tmp)))
+      (wl-append deleted-list (car (wl-expire-delete folder dels msgdb))))
+    (setq delete-list (car tmp)
+         filenum (string-to-int (nth 3 tmp))
+         len (nth 4 tmp)
+         arc-len len)
+    (catch 'done
+      (while t
+       (if (setq msg (wl-pop delete-list))
+           (setq len (1+ len))
+         (setq len (1+ wl-expire-archive-files)))
+       (when (> len wl-expire-archive-files)
+         (when arcmsg-list
+           (setq dst-folder (format dst-folder-fmt filenum))
+           (and (setq ret-val
+                      (funcall
+                       refile-func
+                       folder arcmsg-list msgdb dst-folder t preserve-number
+                       no-delete))
+                (wl-append deleted-list (car ret-val)))
+           (setq arc-len (+ arc-len (cdr ret-val))))
+         (setq arcmsg-list nil)
+         (if (< arc-len wl-expire-archive-files)
+             (setq len (1+ arc-len))
+           (setq filenum (+ filenum wl-expire-archive-files)
+                 len (- len arc-len)   ;; maybe 1
+                 arc-len (1- len)      ;; maybe 0
+                 )))
+       (if (null msg)
+           (throw 'done t))
+       (wl-append arcmsg-list (list msg))))
+    deleted-list
+    ))
+
+(defun wl-expire-archive-date (folder delete-list msgdb
+                                     &optional preserve-number no-delete)
+  "Standard function for `wl-summary-expire'.
+Refile to archive folder followed message date."
+  (let* ((elmo-archive-treat-file t)   ;; treat archive folder as a file.
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (overview (elmo-msgdb-get-overview msgdb))
+        (dst-folder-fmt (funcall
+                         wl-expire-archive-get-folder-func
+                         folder
+                         wl-expire-archive-date-folder-name-fmt
+                         ))
+        (dst-folder-base (car dst-folder-fmt))
+        (dst-folder-fmt (cdr dst-folder-fmt))
+        (refile-func (if no-delete
+                         'wl-expire-refile
+                       'wl-expire-refile-with-copy-reserve-msg))
+        tmp dels dst-folder date time
+        msg arcmsg-alist arcmsg-list
+        deleted-list ret-val)
+    (setq tmp (wl-expire-archive-number-delete-old
+              dst-folder-base preserve-number delete-list
+              (elmo-msgdb-get-mark-alist msgdb)
+              no-delete
+              wl-expire-archive-date-folder-num-regexp))
+    (when (and (not no-delete)
+              (setq dels (nth 1 tmp)))
+      (wl-append deleted-list (car (wl-expire-delete folder dels msgdb))))
+    (setq delete-list (car tmp))
+    (while (setq msg (wl-pop delete-list))
+      (setq date (elmo-msgdb-overview-entity-get-date
+                 (assoc (cdr (assq msg number-alist)) overview)))
+      (setq time
+           (condition-case nil
+               (timezone-fix-time date nil nil)
+             (error [0 0 0 0 0 0 0])))
+      (if (= (aref time 1) 0)  ;; if (month == 0)
+         (aset time 0 0))      ;;    year = 0
+      (setq dst-folder (format dst-folder-fmt
+                              (aref time 0)  ;; year
+                              (aref time 1)  ;; month
+                              ))
+      (setq arcmsg-alist
+           (wl-append-assoc-list
+            dst-folder
+            msg
+            arcmsg-alist)))
+    (while arcmsg-alist
+      (setq dst-folder (caar arcmsg-alist))
+      (setq arcmsg-list (cdar arcmsg-alist))
+      (and (setq ret-val
+                (funcall
+                 refile-func
+                 folder arcmsg-list msgdb dst-folder t preserve-number
+                 no-delete))
+          (wl-append deleted-list (car ret-val)))
+      (setq arcmsg-alist (cdr arcmsg-alist)))
+    deleted-list
+    ))
+
+(defsubst wl-expire-folder-p (folder)
+  (wl-get-assoc-list-value wl-expire-alist folder))
+
+(defun wl-summary-expire (&optional folder-name notsummary nolist)
+  (interactive)
+  (let ((folder (or folder-name wl-summary-buffer-folder-name))
+       (alist wl-expire-alist)
+       expires)
+    (when (and (or (setq expires (wl-expire-folder-p folder))
+                  (progn (and (interactive-p)
+                              (message "no match %s in wl-expire-alist" 
+                                       folder))
+                         nil))
+              (or (not (interactive-p))
+                  (y-or-n-p (format "Expire %s? " folder))))
+      (let* ((msgdb (or wl-summary-buffer-msgdb
+                       (elmo-msgdb-load folder)))
+            (number-alist (elmo-msgdb-get-number-alist msgdb))
+            (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+            expval rm-type val-type value more args
+            delete-list)
+       (save-excursion
+         (setq expval (car expires)
+               rm-type (nth 1 expires)
+               args (cddr expires))
+         (setq val-type (car expval)
+               value (nth 1 expval)
+               more (nth 2 expval))
+         (run-hooks 'wl-summary-expire-pre-hook)
+         (cond
+          ((eq val-type nil))
+          ((eq val-type 'number)
+           (let* ((msgs (if (not nolist)
+                            (elmo-list-folder folder)
+                          (mapcar 'car number-alist)))
+                  (msglen (length msgs))
+                  (more (or more (1+ value)))
+                  count)
+             (when (>= msglen more)
+               (setq count (- msglen value))
+               (while (and msgs (> count 0))
+                 (when (assq (car msgs) number-alist) ;; don't expire new message
+                   (wl-append delete-list (list (car msgs)))
+                   (when (or (not wl-expire-number-with-reserve-marks)
+                             (wl-expire-msg-p (car msgs) mark-alist))
+                     (setq count (1- count))))
+                 (setq msgs (cdr msgs))))))
+          ((eq val-type 'date)
+           (let* ((overview (elmo-msgdb-get-overview msgdb))
+                  (key-date (elmo-date-get-offset-datevec 
+                             (timezone-fix-time (current-time-string)
+                                                (current-time-zone) nil)
+                             value t)))
+             (while overview
+               (when (wl-expire-date-p
+                      key-date
+                      (elmo-msgdb-overview-entity-get-date
+                       (car overview)))
+                 (wl-append delete-list
+                            (list (elmo-msgdb-overview-entity-get-number
+                                   (car overview)))))
+               (setq overview (cdr overview)))))
+          (t
+           (error "%s: not supported" val-type)))
+         (when delete-list
+           (or wl-expired-alist
+               (setq wl-expired-alist (wl-expired-alist-load)))
+           (setq delete-list
+                 (cond ((eq rm-type nil) nil)
+                       ((eq rm-type 'remove)
+                        (car (wl-expire-delete folder delete-list msgdb)))
+                       ((eq rm-type 'trash)
+                        (car (wl-expire-refile folder delete-list msgdb wl-trash-folder)))
+                       ((stringp rm-type)
+                        (car (wl-expire-refile folder delete-list msgdb rm-type)))
+                       ((fboundp rm-type)
+                        (apply rm-type (append (list folder delete-list msgdb)
+                                               args)))
+                       (t
+                        (error "%s: invalid type" rm-type))))
+           (when (and (not notsummary) delete-list)
+             (wl-summary-delete-messages-on-buffer delete-list)
+             (wl-summary-folder-info-update)
+             (wl-summary-set-message-modified)
+             (wl-summary-set-mark-modified)
+             (sit-for 0)
+             (set-buffer-modified-p nil))
+           (wl-expired-alist-save))
+         (run-hooks 'wl-summary-expire-hook)
+         (if delete-list
+             (message "Expiring %s is done" folder)
+           (and (interactive-p)
+                (message "No expire"))))
+       delete-list
+       ))))
+
+(defun wl-folder-expire-entity (entity)
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity)))
+      (while flist
+       (wl-folder-expire-entity (car flist))
+       (setq flist (cdr flist)))))
+   ((stringp entity)
+    (when (wl-expire-folder-p entity)
+      (let ((update-msgdb (cond
+                          ((consp wl-expire-folder-update-msgdb)
+                           (wl-string-match-member
+                            entity
+                            wl-expire-folder-update-msgdb))
+                          (t
+                           wl-expire-folder-update-msgdb)))
+           (wl-summary-highlight (if (or (wl-summary-sticky-p entity)
+                                         (wl-summary-always-sticky-folder-p
+                                          entity))
+                                     wl-summary-highlight))
+           wl-auto-select-first ret-val)
+       (save-window-excursion
+         (save-excursion
+           (and update-msgdb
+                (wl-summary-goto-folder-subr entity 'force-update nil))
+           (setq ret-val (wl-summary-expire entity (not update-msgdb)))
+           (if update-msgdb
+               (wl-summary-save-status 'keep)
+             (if ret-val
+                 (wl-folder-check-entity entity))))))))))
+
+;; Command
+
+(defun wl-folder-expire-current-entity ()
+  (interactive)
+  (let ((entity-name
+        (or (wl-folder-get-folder-name-by-id
+             (get-text-property (point) 'wl-folder-entity-id))
+            (wl-folder-get-realname (wl-folder-folder-name)))))
+    (when (and entity-name
+              (or (not (interactive-p))
+                  (y-or-n-p (format "Expire %s? " entity-name))))
+      (wl-folder-expire-entity
+       (wl-folder-search-entity-by-name entity-name
+                                       wl-folder-entity))
+      (if (get-buffer wl-summary-buffer-name)
+         (kill-buffer wl-summary-buffer-name))
+      (message "Expiring %s is done" entity-name))))
+
+;;; Archive
+
+(defun wl-folder-archive-current-entity ()
+  (interactive)
+  (let ((entity-name
+        (or (wl-folder-get-folder-name-by-id
+             (get-text-property (point) 'wl-folder-entity-id))
+            (wl-folder-get-realname (wl-folder-folder-name)))))
+    (when (and entity-name
+              (or (not (interactive-p))
+                  (y-or-n-p (format "Archive %s? " entity-name))))
+      (wl-folder-archive-entity
+       (wl-folder-search-entity-by-name entity-name
+                                       wl-folder-entity))
+      (message "Archiving %s is done" entity-name))))
+
+(defun wl-archive-number1 (folder archive-list msgdb)
+  (wl-expire-archive-number1 folder archive-list msgdb t t))
+
+(defun wl-archive-number2 (folder archive-list msgdb)
+  (wl-expire-archive-number2 folder archive-list msgdb t t))
+
+(defun wl-archive-date (folder archive-list msgdb)
+  (wl-expire-archive-date folder archive-list msgdb t t))
+
+(defun wl-archive-folder (folder archive-list msgdb dst-folder)
+  (let* ((elmo-archive-treat-file t)   ;; treat archive folder as a file.
+        copied-list ret-val)
+    (setq archive-list
+         (car (wl-expire-archive-number-delete-old
+               nil t archive-list
+               (elmo-msgdb-get-mark-alist msgdb)
+               t ;; no-confirm
+               nil dst-folder)))
+    (when archive-list
+      (and (setq ret-val
+                (wl-expire-refile
+                 folder archive-list msgdb dst-folder t t t)) ;; copy!!
+          (wl-append copied-list ret-val)))
+    copied-list
+    ))
+
+(defun wl-summary-archive (&optional arg folder-name notsummary nolist)
+  (interactive "P")
+  (let* ((folder (or folder-name wl-summary-buffer-folder-name))
+        (msgdb (or wl-summary-buffer-msgdb
+                   (elmo-msgdb-load folder)))
+        (msgs (if (not nolist)
+                  (elmo-list-folder folder)
+                (mapcar 'car (elmo-msgdb-get-number-alist msgdb))))
+        (alist wl-archive-alist)
+        func dst-folder archive-list)
+    (if arg
+       (let ((wl-default-spec (char-to-string
+                               (car (rassq 'archive elmo-spec-alist)))))
+         (setq dst-folder (wl-summary-read-folder
+                           (concat wl-default-spec (substring folder 1))
+                           "for archive"))))
+    (run-hooks 'wl-summary-archive-pre-hook)
+    (if dst-folder
+       (wl-archive-folder folder msgs msgdb dst-folder)
+      (when (and (catch 'match
+                  (while alist
+                    (when (string-match (caar alist) folder)
+                      (setq func (cadar alist))
+                      (throw 'match t))
+                    (setq alist (cdr alist)))
+                  (and (interactive-p)
+                       (message "No match %s in wl-archive-alist" folder))
+                  (throw 'match nil))
+                (or (not (interactive-p))
+                    (y-or-n-p (format "Archive %s? " folder))))
+       (setq archive-list
+             (funcall func folder msgs msgdb))
+       (run-hooks 'wl-summary-archive-hook)
+       (if archive-list
+           (message "Archiving %s is done" folder)
+         (and (interactive-p)
+              (message "No archive")))))))
+
+(defun wl-folder-archive-entity (entity)
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity)))
+      (while flist
+       (wl-folder-archive-entity (car flist))
+       (setq flist (cdr flist)))))
+   ((stringp entity)
+    (wl-summary-archive nil entity t))))
+
+;; append log
+
+(defun wl-expire-append-log (src-folder msgs dst-folder action)
+  (when wl-expire-use-log
+    (save-excursion
+      (let ((tmp-buf (get-buffer-create " *wl-expire work*"))
+           (filename (expand-file-name wl-expired-log-alist-file-name
+                                       elmo-msgdb-dir)))
+       (set-buffer tmp-buf)
+       (erase-buffer)
+       (if dst-folder
+           (insert (format "%s\t%s -> %s\t%s\n"
+                           action
+                           src-folder dst-folder msgs))
+         (insert (format "%s\t%s\t%s\n"
+                         action
+                         src-folder msgs)))
+       (if (file-writable-p filename)
+           (write-region (point-min) (point-max) 
+                         filename t 'no-msg)
+         (message (format "%s is not writable." filename)))
+       (kill-buffer tmp-buf)))))
+
+(provide 'wl-expire)
+
+;;; wl-expire.el ends here
diff --git a/wl/wl-fldmgr.el b/wl/wl-fldmgr.el
new file mode 100644 (file)
index 0000000..d9f6c01
--- /dev/null
@@ -0,0 +1,1388 @@
+;;; wl-fldmgr.el -- Folder manager for Wanderlust.
+
+;; Copyright 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:34:28 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-folder)
+(require 'wl-summary)
+(require 'wl-highlight)
+(eval-when-compile
+  (require 'wl-util))
+
+;;; Global Variable
+
+(defvar wl-fldmgr-modified nil)
+(defvar wl-fldmgr-modified-access-list nil)
+(defvar wl-fldmgr-cut-entity-list nil)
+(defvar wl-fldmgr-entity-list nil)
+(defvar wl-fldmgr-group-insert-opened nil)
+
+(defconst wl-fldmgr-folders-header
+  "#
+# Folder definition file
+# This file is generated automatically by %s %s (%s).
+#
+
+")
+
+(defconst wl-fldmgr-filter-completion-alist
+  '(("/last:")
+    ("/first:")
+    ("/since:")
+    ("/before:")
+    ("/from=")
+    ("/subject=")
+    ("/date=")
+    ("/to=")
+    ("/cc=")
+    ("/tocc=")
+    ("/body=")))
+
+;;; Initial setup
+
+(defvar wl-fldmgr-mode-map nil)
+(if wl-fldmgr-mode-map
+    nil
+  (define-prefix-command 'wl-fldmgr-mode-map)
+  (define-key wl-fldmgr-mode-map "\C-s"   'wl-fldmgr-save-folders)
+  (define-key wl-fldmgr-mode-map "m"      'wl-fldmgr-make-multi)
+  (define-key wl-fldmgr-mode-map "g"      'wl-fldmgr-make-group)
+  (define-key wl-fldmgr-mode-map "A"      'wl-fldmgr-make-access-group)
+  (define-key wl-fldmgr-mode-map "f"      'wl-fldmgr-make-filter)
+  (define-key wl-fldmgr-mode-map "p"      'wl-fldmgr-set-petname)
+  (define-key wl-fldmgr-mode-map "a"      'wl-fldmgr-add)
+  (define-key wl-fldmgr-mode-map "d"      'wl-fldmgr-delete)
+  (define-key wl-fldmgr-mode-map "R"      'wl-fldmgr-rename)
+  (define-key wl-fldmgr-mode-map "c"      'wl-fldmgr-copy)
+  (define-key wl-fldmgr-mode-map "k"      'wl-fldmgr-cut)
+  (define-key wl-fldmgr-mode-map "W"      'wl-fldmgr-copy-region)
+  (define-key wl-fldmgr-mode-map "\C-w"   'wl-fldmgr-cut-region)
+  (define-key wl-fldmgr-mode-map "y"      'wl-fldmgr-yank)
+  (define-key wl-fldmgr-mode-map "s"      'wl-fldmgr-sort)
+  (define-key wl-fldmgr-mode-map "l"      'wl-fldmgr-access-display-normal)
+  (define-key wl-fldmgr-mode-map "L"      'wl-fldmgr-access-display-all)
+  (define-key wl-fldmgr-mode-map "q"      'wl-fldmgr-clear-cut-entity-list)
+  (define-key wl-fldmgr-mode-map "r"      'wl-fldmgr-reconst-entity-hashtb)
+  (define-key wl-fldmgr-mode-map "u"      'wl-fldmgr-unsubscribe)
+  (define-key wl-fldmgr-mode-map "U"      'wl-fldmgr-unsubscribe-region))
+
+(add-hook 'wl-folder-mode-hook 'wl-fldmgr-init)
+
+(defun wl-fldmgr-init ()
+  (setq wl-fldmgr-cut-entity-list nil)
+  (setq wl-fldmgr-modified nil)
+  (setq wl-fldmgr-modified-access-list nil))
+
+(defun wl-fldmgr-exit ()
+  (when (and wl-fldmgr-modified
+            (or (not wl-interactive-save-folders)
+                (y-or-n-p "Folder view was modified. Save current folders? ")))
+    (wl-fldmgr-save-folders)))
+
+;;; Macro and misc Function
+;;
+
+(defmacro wl-fldmgr-delete-line ()
+  (` (delete-region (save-excursion (beginning-of-line)
+                                   (point))
+                   (save-excursion (end-of-line)
+                                   (+ 1 (point))))))
+
+(defmacro wl-fldmgr-make-indent (level)
+  (` (concat " " (make-string (* 2 (, level)) ? ))))
+
+(defmacro wl-fldmgr-get-entity-id (&optional entity)
+  (` (get-text-property (if (, entity)
+                           0
+                         (point))
+                       'wl-folder-entity-id
+                       (, entity))))
+
+(defmacro wl-fldmgr-assign-id (entity &optional id)
+  (` (let ((entity-id (or (, id) wl-folder-entity-id)))
+       (put-text-property 0 (length (, entity))
+                         'wl-folder-entity-id 
+                         entity-id
+                         (, entity)))))
+
+(defsubst wl-fldmgr-read-string (str)
+  (if (string-match "\n" str)
+      (error "Not supported name: %s" str)
+    (elmo-string str)))
+
+(defsubst wl-fldmgr-add-modified-access-list (group)
+  (if (not (member group wl-fldmgr-modified-access-list))
+      (wl-append wl-fldmgr-modified-access-list (list group))))
+
+(defsubst wl-fldmgr-delete-modified-access-list (group)
+  (if (member group wl-fldmgr-modified-access-list)
+      (setq wl-fldmgr-modified-access-list
+           (delete group wl-fldmgr-modified-access-list))))
+
+(defsubst wl-fldmgr-add-group (group)
+  (or (assoc group wl-folder-group-alist)
+      (wl-append wl-folder-group-alist
+                (list (cons group
+                            wl-fldmgr-group-insert-opened)))))
+
+(defsubst wl-fldmgr-delete-group (group)
+  (wl-fldmgr-delete-modified-access-list group)
+  (setq wl-folder-group-alist
+       (delete (assoc group wl-folder-group-alist)
+               wl-folder-group-alist)))
+
+(defun wl-fldmgr-add-entity-hashtb (entities)
+  "update `wl-folder-entity-hashtb', `wl-folder-newsgroups-hashtb'.
+return value is diffs '(new unread all)."
+  (let* ((new-diff 0)
+        (unread-diff 0)
+        (all-diff 0)
+        val entity entity-stack)
+    (setq wl-folder-newsgroups-hashtb
+         (or (wl-folder-create-newsgroups-hashtb entities t)
+             wl-folder-newsgroups-hashtb))
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (wl-fldmgr-add-group (car entity))
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (if (not (setq val (wl-folder-get-entity-info entity)))
+           (wl-folder-set-entity-info entity nil)
+         (setq new-diff    (+ new-diff    (or (nth 0 val) 0)))
+         (setq unread-diff (+ unread-diff (or (nth 1 val) 0)))
+         (setq all-diff    (+ all-diff    (or (nth 2 val) 0))))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    (setq unread-diff (+ unread-diff new-diff))
+    (list new-diff unread-diff all-diff)))
+
+(defun wl-fldmgr-delete-entity-hashtb (entities &optional clear)
+  "update `wl-folder-entity-hashtb'.
+return value is diffs '(-new -unread -all)."
+  (let* ((new-diff 0)
+        (unread-diff 0)
+        (all-diff 0)
+        entity val
+        entity-stack)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (wl-fldmgr-delete-group (car entity))
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (when (setq val (wl-folder-get-entity-info entity))
+         (setq new-diff    (+ new-diff    (or (nth 0 val) 0)))
+         (setq unread-diff (+ unread-diff (or (nth 1 val) 0)))
+         (setq all-diff    (+ all-diff    (or (nth 2 val) 0)))
+         (and clear (wl-folder-clear-entity-info entity)))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    (setq unread-diff (+ unread-diff new-diff))
+    (list (- 0 new-diff) (- 0 unread-diff) (- 0 all-diff))))
+
+;; return value
+;; example: '(("Desktop" group) ("+ml" access) "+ml/wl")
+
+(defun wl-fldmgr-get-path (entity target-entity &optional group-target)
+  (let* ((target-id (wl-fldmgr-get-entity-id target-entity))
+        (entities (list entity))
+        entity-stack result-path)
+    (reverse
+     (catch 'done
+       (while entities
+        (setq entity (wl-pop entities))
+        (cond
+         ((consp entity)
+          (if (and (string= target-entity (car entity))
+                   (eq target-id (wl-fldmgr-get-entity-id (car entity))))
+              (throw 'done
+                     (wl-push (if group-target
+                                  (car entity)
+                                (list (car entity) (nth 1 entity)))
+                              result-path))
+            (wl-push (list (car entity) (nth 1 entity))
+                     result-path))
+          (wl-push entities entity-stack)
+          (setq entities (nth 2 entity)))
+         ((stringp entity)
+          (if (and (string= target-entity entity)
+                   (eq target-id (wl-fldmgr-get-entity-id entity)))
+              (throw 'done
+                     (wl-push entity result-path)))))
+        (unless entities
+          (while (and entity-stack
+                      (not entities))
+            (setq result-path (cdr result-path))
+            (setq entities (wl-pop entity-stack)))))))))
+
+;; (defun wl-fldmgr-get-previous-entity (entity key-id)
+;;   (cdr (wl-fldmgr-get-previous-entity-internal '(nil . nil) entity key-id)))
+;; 
+;; (defun wl-fldmgr-get-previous-entity-internal (result entity key-id)
+;;   (cond
+;;    ((stringp entity)
+;;     (if (eq key-id (wl-fldmgr-get-entity-id entity))
+;;     (cons t result)
+;;       (cons nil (cons entity entity))))
+;;    ((consp entity)
+;;     (if (eq key-id (wl-fldmgr-get-entity-id (car entity)))
+;;     (cons t result)
+;;       (setcar result (car entity))
+;;       (let ((flist (nth 2 entity))
+;;         return found)
+;;     (while (and flist (not found))
+;;       (if (car (setq return
+;;                      (wl-fldmgr-get-previous-entity-internal
+;;                       result (car flist) key-id)))
+;;           (setq found t))
+;;       (setq result (cdr return))
+;;       (setq flist (cdr flist)))
+;;     (cons found result))))))
+
+;; path is get `wl-fldmgr-get-path-from-buffer'.
+(defun wl-fldmgr-update-group (path diffs)
+  (save-excursion
+    (while (and path (consp (car path)))
+      (if (string= (caar path) wl-folder-desktop-name) ; update desktop
+         (progn
+           (goto-char (point-min))
+           (wl-folder-update-diff-line diffs))
+       ;; goto the path line.
+       (goto-char (point-min))
+       (if (wl-folder-buffer-search-group
+            (wl-folder-get-petname (caar path)))
+           (wl-folder-update-diff-line diffs)))
+      (setq path (cdr path)))))
+
+;;; Function for wl-folder-entity
+;;
+
+;; usage:
+;; (wl-delete-entity '(("Desktop") ("ML") "+ml/wl") '("+ml/wl") wl-folder-entity)
+;; (wl-delete-entity '(("Desktop") "ML") '("+inbox" "ML") wl-folder-entity)
+;; (wl-delete-entity '(("Desktop") "ML") nil wl-folder-entity)
+
+(defun wl-delete-entity (key-path delete-list entity &optional clear)
+  (let (wl-fldmgr-entity-list)
+    (when (and (string= (caar key-path) (car entity))
+              (wl-delete-entity-sub (cdr key-path) delete-list entity clear))
+      ;; return value is non-nil (diffs)
+      (wl-fldmgr-delete-entity-hashtb wl-fldmgr-entity-list clear))))
+
+(defun wl-delete-entity-sub (key-path delete-list entity clear)
+  (let ((flist (nth 2 entity))
+       (key (car key-path))
+       next)
+    (cond
+     ((consp key);; into group
+      (if (setq next (assoc (car key) flist))
+         (wl-delete-entity-sub (cdr key-path)
+                               delete-list
+                               next
+                               clear)
+       ;; not found
+       nil))
+     ((stringp key) ;; delete entities
+      (if (not delete-list)
+         (setq delete-list (list key)))
+      (let* ((group (car entity))
+            (access (eq (nth 1 entity) 'access))
+            (unsubscribes (and access (nth 3 entity)))
+            (update t)
+            cut-entity is-group)
+       (catch 'done
+         (while delete-list
+           (setq key (car delete-list))
+           (cond ((member key flist);; entity
+                  (setq flist (delete key flist))
+                  (unless clear
+                    (wl-push key wl-fldmgr-cut-entity-list))
+                  (wl-append wl-fldmgr-entity-list (list key))
+                  (setq is-group nil))
+                 ((setq cut-entity (assoc key flist));; group
+                  (setq flist (delete cut-entity flist))
+                  (unless clear
+                    (wl-push cut-entity wl-fldmgr-cut-entity-list))
+                  (wl-append wl-fldmgr-entity-list (list cut-entity))
+                  (setq is-group t))
+                 (t
+                  ;; not found
+                  (message "%s not found" key)
+                  (setq update nil)
+                  (throw 'done t)))
+           (when access
+             (if is-group
+                 (wl-append unsubscribes
+                            (list (list (elmo-string key) 'access nil)))
+               (wl-append unsubscribes (list (elmo-string key)))))
+           (setq delete-list (cdr delete-list))))
+       (when update
+         (setcdr (cdr entity) (list flist unsubscribes))
+         (when access
+           (wl-fldmgr-add-modified-access-list group))
+         t
+         ))))))
+
+;; usage:
+;; (wl-add-entity '(("Desktop") ("ML") "ml/wl") '("+ml/new") wl-folder-entity 12)
+;; (wl-add-entity '(("Desktop") "ML") '("+ml/new")  wl-folder-entity 10)
+
+(defun wl-add-entity (key-path new entity prev-entity-id &optional errmes)
+  (when (string= (caar key-path) (car entity))
+    (mapcar
+     '(lambda (ent)
+       (wl-folder-entity-assign-id
+        ent
+        wl-folder-entity-id-name-hashtb
+        t))
+     new)
+    (when (wl-add-entity-sub (cdr key-path) new entity errmes)
+      ;; return value is non-nil (diffs)
+      (wl-fldmgr-add-entity-hashtb new))))
+
+(defun wl-add-entity-sub (key-path new entity &optional errmes)
+  (let ((flist (nth 2 entity))
+       entry)
+    (catch 'success
+      (cond
+       ((consp (car key-path));; into group
+       (if (setq entry (assoc (caar key-path) flist))
+           (if (not (wl-add-entity-sub (cdr key-path)
+                                       new
+                                       entry
+                                       errmes))
+               (throw 'success nil))
+         (and errmes (message "%s not found" (caar key-path)))
+         (throw 'success nil)))
+       (t;; insert entities
+       (let* ((new2 new)
+              (group (car entity))
+              (access (eq (nth 1 entity) 'access))
+              (unsubscribes (and access (nth 3 entity))))
+         ;; check
+         (while new2
+           (cond
+            ((stringp (car new2)) ;; folder
+             (cond
+              ((wl-string-member (car new2) flist)
+               (and errmes (message "%s: already exists" (car new2)))
+               (throw 'success nil))
+              ((and access
+                    (not (wl-string-member (car new2) unsubscribes)))
+               (and errmes (message "%s: not access group folder" (car new2)))
+               (throw 'success nil))))
+            (t                    ;; group
+             (when (and access
+                        (not (wl-string-assoc (caar new2) unsubscribes)))
+               (and errmes (message "%s: can't insert access group"
+                                    (caar new2)))
+               (throw 'success nil))))
+           (setq new2 (cdr new2)))
+         ;; do it
+         (when access
+           ;; remove from unsubscribe
+           (mapcar
+            '(lambda (x)
+               (cond
+                ((consp x)
+                 (setq unsubscribes
+                       (delete (wl-string-assoc (car x) unsubscribes)
+                               unsubscribes)))
+                (t
+                 (setq unsubscribes (delete (elmo-string x) unsubscribes)))))
+            new)
+;;         (setq new2 new)
+;;         (while new2
+;;           (setq unsubscribes (delete (elmo-string (car new2)) unsubscribes))
+;;           (setq new2 (cdr new2)))
+           (setcdr (cddr entity) (list unsubscribes))
+           (wl-fldmgr-add-modified-access-list group))
+         (if (not key-path);; insert group top
+             (if (cddr entity)
+                 (setcar (cddr entity) (append new flist))
+               (setcdr (cdr entity) (list new)))
+           (let (akey)
+             (if (catch 'done
+                   (while flist
+                     (setq akey (car flist))
+                     (cond ((consp akey);; group
+                            (if (equal (car key-path) (car akey))
+                                (throw 'done t)))
+                           (t
+                            (if (equal (car key-path) akey)
+                                (throw 'done t))))
+                     (setq flist (cdr flist))))
+                 (setcdr flist (append new (cdr flist)))
+               (and errmes (message "%s not found" (car key-path)))
+               (throw 'success nil)))))))
+      (throw 'success t))))
+
+;; return value is
+;; (path indent-level (group . type) previous-entity-id target-entity)
+;; previous-entity-id is (id-name-alist-prev-id . entity-alist-prev-id)
+;; example: 
+;; '((("Desktop" group) ("ML" group) "+ml/wl") '(3 2) ("ML" . group) nil "+ml/wl")
+
+(defun wl-fldmgr-get-path-from-buffer (&optional prev)
+  (let ((indent-level 0)
+       (group-target t)
+       folder-path group-type previous-entity entity)
+    (save-excursion
+      (beginning-of-line)
+      (when prev
+;;     (wl-folder-next-entity-skip-invalid t)
+;;     (and (setq previous-entity
+;;                (wl-fldmgr-get-previous-entity wl-folder-entity
+;;                                               (wl-fldmgr-get-entity-id)))
+;;          ;; change entity to id
+;;          (setq previous-entity
+;;                (cons
+;;                 (and (car previous-entity)
+;;                      (wl-fldmgr-get-entity-id (car previous-entity)))
+;;                 (and (cdr previous-entity)
+;;                      (wl-fldmgr-get-entity-id (cdr previous-entity))))))
+       (wl-folder-prev-entity-skip-invalid))
+      (if (and prev
+              (looking-at wl-folder-group-regexp)
+              (string= (wl-match-buffer 2) "-"))
+         (setq group-target nil)
+       (if (and prev (bobp))
+           (error "out of desktop group")))
+      (setq folder-path (wl-fldmgr-get-path wl-folder-entity
+                                           (wl-folder-get-entity-from-buffer)
+                                           ;;(wl-fldmgr-get-entity-id)
+                                           group-target))
+      (let ((fp folder-path))
+       (while fp
+         (if (consp (car fp))
+             (progn
+               (setq indent-level (1+ indent-level))
+               (setq group-type (cons (caar fp) (nth 1 (car fp)))))
+           (setq entity (car fp)))
+         (setq fp (cdr fp))))
+      (list folder-path indent-level group-type previous-entity entity))))
+
+;;; Command
+;;
+
+(defun wl-fldmgr-clear-cut-entity-list ()
+  (interactive)
+  (setq wl-fldmgr-cut-entity-list nil)
+  (message "Cleared cut entity list"))
+
+(defun wl-fldmgr-reconst-entity-hashtb (&optional arg nomes)
+  (interactive "P")
+  (or nomes (message "Reconstructing entity alist..."))
+  (when (not arg)
+    (setq wl-folder-entity-id 0)
+    (wl-folder-entity-assign-id wl-folder-entity))
+  (setq wl-folder-entity-hashtb
+       (wl-folder-create-entity-hashtb
+        wl-folder-entity
+        wl-folder-entity-hashtb
+        t))
+  ;; reset property on buffer
+  (when (not arg)
+    (let ((inhibit-read-only t)
+         (cur-point (point)))
+      (erase-buffer)
+      (wl-folder-insert-entity " " wl-folder-entity)
+      (goto-char cur-point)
+      (set-buffer-modified-p nil)))
+  (or nomes (message "Reconstructing entity alist...done")))
+
+
+(defun wl-fldmgr-cut-region ()
+  (interactive)
+  (let* ((p1 (region-beginning))
+        (p2 (region-end))
+        (r1 (progn
+              (goto-char p1)
+              (beginning-of-line)
+              (point)))
+        (r2 (progn
+              (goto-char p2)
+              (beginning-of-line)
+              (point)))
+        (from (min r1 r2))
+        (to (max r1 r2))
+        (count 0)
+        (errmes nil)
+        (cut-list nil)
+        name pre-indent indent)
+    (catch 'err
+      (save-excursion
+       (goto-char from)
+       (and (looking-at "^\\([ ]*\\)")
+            (setq pre-indent (wl-match-buffer 1)))
+       (while (< (point) to)
+         (and (looking-at "^\\([ ]*\\)")
+              (setq indent (wl-match-buffer 1)))
+         (cond ((= (length pre-indent) (length indent))
+                (setq pre-indent indent)
+                (setq count (1+ count))
+                (and (setq name (wl-folder-get-entity-from-buffer))
+                     (wl-append cut-list (list name)))
+                (forward-line 1))
+               ((< (length pre-indent) (length indent))
+                (wl-folder-goto-bottom-of-current-folder pre-indent)
+                (beginning-of-line))
+               (t
+                (setq errmes "bad region")
+                (throw 'err t))))
+       (unless (eq (point) to)
+         (setq errmes "bad region")
+         (throw 'err t)))
+      (save-excursion
+       (let ((count2 (length cut-list))
+             tmp path ent diffs)
+         (goto-char from)
+         (save-excursion
+           (wl-folder-next-entity-skip-invalid t)
+           (setq tmp (wl-fldmgr-get-path-from-buffer)))
+         (setq path (car tmp))
+         (setq diffs
+               (wl-delete-entity path cut-list wl-folder-entity))
+         (catch 'done
+           (while (> count 0)
+             (setq ent (looking-at wl-folder-entity-regexp))
+             (if (not (wl-fldmgr-cut (and ent tmp)
+                                     (and ent (pop cut-list))))
+                 (throw 'done nil))
+             (setq count (1- count))))
+         (if (> count2 0)
+             (wl-push count2 wl-fldmgr-cut-entity-list))
+         (if diffs
+             (wl-fldmgr-update-group path diffs))
+         t))
+      (throw 'err nil))
+    (if errmes
+       (message "%s" errmes))))
+
+(defun wl-fldmgr-cut (&optional tmp entity clear)
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((ret-val nil)
+         (inhibit-read-only t)
+         path diffs)
+      (if (bobp)
+         (message "Can't remove desktop group")
+       (or tmp (setq tmp (wl-fldmgr-get-path-from-buffer)))
+       (setq path (car tmp))
+       (if (not path)
+           (if (not (eobp))
+               (wl-fldmgr-delete-line))   ;; unsubscribe or removed folder
+         (if (not entity)
+             (setq diffs
+                   (wl-delete-entity path nil wl-folder-entity clear)))
+         (setq wl-fldmgr-modified t)
+         ;;
+         (if (looking-at wl-folder-group-regexp)
+             ;; group
+             (let (beg end indent opened)
+               (setq indent (wl-match-buffer 1))
+               (setq opened (wl-match-buffer 2))
+               (if (string= opened "+")
+                   (wl-fldmgr-delete-line)
+                 (setq beg (point))
+                 (end-of-line)
+                 (save-match-data
+                   (setq end
+                         (progn
+                           (wl-folder-goto-bottom-of-current-folder indent)
+                           (beginning-of-line)
+                           (point))))
+                 (delete-region beg end)))
+           ;; entity
+           (wl-fldmgr-delete-line))
+         (if diffs
+             (wl-fldmgr-update-group path diffs))
+         (set-buffer-modified-p nil))
+       (setq ret-val t))
+      ret-val)))
+
+(defun wl-fldmgr-copy-region ()
+  (interactive)
+  (let* ((p1 (region-beginning))
+        (p2 (region-end))
+        (r1 (progn
+              (goto-char p1)
+              (beginning-of-line)
+              (point)))
+        (r2 (progn
+              (goto-char p2)
+              (beginning-of-line)
+              (point)))
+        (from (min r1 r2))
+        (to (max r1 r2))
+        (errmes nil)
+        (cut-list nil)
+        (count 0)
+        name
+        pre-indent indent)
+    (catch 'err
+      (save-excursion
+       (goto-char from)
+       (when (bobp)
+         (setq errmes "can't copy desktop group")
+         (throw 'err t))
+       (and (looking-at "^\\([ ]*\\)")
+            (setq pre-indent (wl-match-buffer 1)))
+       (while (< (point) to)
+         (and (looking-at "^\\([ ]*\\)")
+              (setq indent (wl-match-buffer 1)))
+         (if (looking-at wl-folder-group-regexp)
+             (progn
+               (setq errmes "can't copy group folder")
+               (throw 'err t)))
+         (cond ((= (length pre-indent) (length indent))
+                (if (setq name (wl-folder-get-entity-from-buffer))
+                    (progn
+                      (setq pre-indent indent)
+                      (wl-push name cut-list)))
+                (forward-line 1))
+               ((< (length pre-indent) (length indent))
+                (wl-folder-goto-bottom-of-current-folder pre-indent)
+                (beginning-of-line))
+               (t
+                (setq errmes "bad region")
+                (throw 'err t))))
+       (unless (eq (point) to)
+         (setq errmes "bad region")
+         (throw 'err t)))
+      (catch 'done
+       (setq cut-list (reverse cut-list))
+       (while cut-list
+         (setq name (pop cut-list))
+         (unless (wl-fldmgr-copy name)
+           (throw 'done nil))
+         (setq count (1+ count)))
+       (wl-push count wl-fldmgr-cut-entity-list)
+       (message "Copy %s folders" count)
+       (throw 'err nil)))
+    (if errmes
+       (message "%s" errmes))))
+
+(defun wl-fldmgr-copy (&optional ename)
+  (interactive "P")
+  (save-excursion
+    (beginning-of-line)
+    (let ((ret-val nil))
+      (if (and (not ename)
+              (looking-at wl-folder-group-regexp))
+         (message "Can't copy group folder")
+       (let* ((name (or ename (wl-folder-get-entity-from-buffer)))
+              (entity (elmo-string name)))
+         (when name
+           (if (member entity wl-fldmgr-cut-entity-list)
+               (setq wl-fldmgr-cut-entity-list
+                     (delete entity wl-fldmgr-cut-entity-list)))
+           (wl-push entity wl-fldmgr-cut-entity-list)
+           (or ename
+               (message "Copy: %s" name))
+           (setq ret-val t))))
+      ret-val)))
+
+(defun wl-fldmgr-yank ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (bobp)
+       (message "Can't insert in the out of desktop group")
+      (let ((inhibit-read-only t)
+           (top (car wl-fldmgr-cut-entity-list))
+           tmp indent path count new
+           access new-list diffs)
+       (if (not top)
+           (message "No cut buffer")
+         (setq tmp (wl-fldmgr-get-path-from-buffer t))
+         (setq path (car tmp))
+         (setq indent (wl-fldmgr-make-indent (nth 1 tmp)))
+         (if (numberp top)
+             (setq count (pop wl-fldmgr-cut-entity-list))
+           (setq count 1))
+         (if (catch 'err
+               (let ((count count)
+                     (cut-list wl-fldmgr-cut-entity-list))
+                 ;; check insert entity
+                 (while (> count 0)
+                   (setq new (car cut-list))
+                   (wl-push new new-list)
+                   (when (consp new);; group
+                     (cond
+                      (access
+                       (message "Can't insert group in access")
+                       (throw 'err t))
+                      ((wl-string-assoc (car new) wl-folder-group-alist)
+                       (message "%s: group already exists" (car new))
+                       (throw 'err t))))
+                   (setq cut-list (cdr cut-list))
+                   (setq count (1- count))))
+               (if (not (setq diffs
+                              (wl-add-entity
+                               path new-list wl-folder-entity (nth 3 tmp) t)))
+                   (throw 'err t))
+               (while (> count 0)
+                 (setq new (pop wl-fldmgr-cut-entity-list))
+                 (save-excursion
+                   (wl-folder-insert-entity indent new)
+                   (setq wl-fldmgr-modified t))
+                 (setq count (1- count)))
+               (wl-fldmgr-update-group path diffs)
+               (set-buffer-modified-p nil))
+             ;; error
+             (wl-push count wl-fldmgr-cut-entity-list)))))))
+
+(defvar wl-fldmgr-add-completion-hashtb (make-vector 7 0))
+
+(defun wl-fldmgr-add-completion-all-completions (string)
+  (let ((table
+        (catch 'found
+          (mapatoms
+           (function
+            (lambda (atom)
+              (if (string-match (symbol-name atom) string)
+                  (throw 'found (symbol-value atom)))))
+           wl-fldmgr-add-completion-hashtb)))
+       (pattern
+        (if (string-match "\\.$"
+                          (car (elmo-network-get-spec
+                                string nil nil nil)))
+            (substring string 0 (match-beginning 0))
+          (concat string nil))))
+    (or table
+       (setq table (elmo-list-folders pattern))
+       (and table
+            (or (/= (length table) 1)
+                (elmo-folder-exists-p (car table))))
+       (setq pattern
+             (if (string-match "\\.[^\\.]+$" string)
+                 (substring string 0 (match-beginning 0))
+               (char-to-string (aref string 0)))
+             table (elmo-list-folders pattern)))
+    (setq pattern (concat "^" (regexp-quote pattern)))
+    (unless (intern-soft pattern wl-fldmgr-add-completion-hashtb)
+      (set (intern pattern wl-fldmgr-add-completion-hashtb) table))
+    table))
+
+(defun wl-fldmgr-add-completion-subr (string predicate flag)
+  (let ((table
+        (if (string= string "")
+            (mapcar (function (lambda (spec)
+                                (list (char-to-string (car spec)))))
+                    elmo-spec-alist)
+          (when (assq (aref string 0) elmo-spec-alist)
+            (delq nil (mapcar
+                       (function list)
+                       (condition-case nil
+                           (wl-fldmgr-add-completion-all-completions string)
+                         (error nil))))))))
+    (if (null flag)
+       (try-completion string table predicate)
+      (if (eq flag 'lambda)
+         (eq t (try-completion string table predicate))
+       (if flag
+           (all-completions string table predicate))))))
+
+(defun wl-fldmgr-add (&optional name)
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((ret-val nil)
+         (inhibit-read-only t)
+         (wl-folder-completion-func (function wl-fldmgr-add-completion-subr))
+         tmp indent path diffs)
+      (if (bobp)
+         (message "Can't insert in the out of desktop group")
+       (setq tmp (wl-fldmgr-get-path-from-buffer t))
+       (setq path (car tmp))
+       (setq indent (wl-fldmgr-make-indent (nth 1 tmp)))
+       (or name
+           (setq name (wl-fldmgr-read-string
+                       (wl-summary-read-folder wl-default-folder "to add"))))
+       ;; maybe add elmo-plugged-alist.
+       (when (stringp name)
+         (elmo-folder-set-plugged name wl-plugged t))
+       (when (setq diffs
+                   (wl-add-entity
+                    path (list name) wl-folder-entity (nth 3 tmp) t))
+         (wl-folder-insert-entity indent name)
+         (wl-fldmgr-update-group path diffs)
+         (setq wl-fldmgr-modified t)
+         (set-buffer-modified-p nil)
+         (setq ret-val t)))
+      ret-val)))
+
+(defun wl-fldmgr-delete ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (looking-at wl-folder-group-regexp)
+       (error "can't delete group folder"))
+    (let* ((inhibit-read-only t)
+          (tmp (wl-fldmgr-get-path-from-buffer))
+          (entity (elmo-string (nth 4 tmp)))
+          (msgs (and (elmo-folder-exists-p entity)
+                     (elmo-list-folder entity))))
+      (when (yes-or-no-p (format "%sDo you really delete \"%s\"? "
+                                (if (> (length msgs) 0)
+                                    (format "%d msg(s) exists. " (length msgs))
+                                  "")
+                                entity))
+       (elmo-delete-folder entity)
+       (wl-fldmgr-cut tmp nil t)))))
+
+(defun wl-fldmgr-rename ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (bobp)
+       (message "Can't rename desktop group")
+      (cond
+       ((looking-at wl-folder-group-regexp) ;; group
+       (let* ((indent (wl-match-buffer 1))
+              (old-group (wl-folder-get-realname (wl-match-buffer 3)))
+              (group-entity (wl-folder-search-group-entity-by-name 
+                             old-group wl-folder-entity))
+              group)
+         (if (eq (nth 1 group-entity) 'access)
+             (message "%s: can't rename access group folder" old-group)
+           (setq group (wl-fldmgr-read-string
+                        (read-from-minibuffer "Rename: " old-group)))
+           (if (string-match "/$" group)
+               (message "Remove tail slash.")
+             (cond
+              ((or (string= group "")
+                   (string= old-group group))
+               nil)
+              (t
+               (if (wl-string-assoc group wl-folder-group-alist)
+                   (message "%s: group already exists" group)
+                 (let ((inhibit-read-only t)
+                       (id (wl-fldmgr-get-entity-id
+                            (car group-entity))))
+                   (wl-fldmgr-assign-id group id)
+                   (setcar group-entity group)
+                   (setcar (wl-string-assoc old-group wl-folder-group-alist)
+                           group)
+                   ;;(setcdr (assq id wl-folder-entity-id-name-alist) group)
+                   (wl-folder-set-id-name id group)
+                   (wl-fldmgr-delete-line)
+                   (wl-folder-insert-entity
+                    indent
+                    group-entity t)
+                   (setq wl-fldmgr-modified t)
+                   (set-buffer-modified-p nil)))))))))
+       (t ;; folder
+       (let* ((tmp (wl-fldmgr-get-path-from-buffer))
+              (old-folder (nth 4 tmp))
+              new-folder)
+         (if (eq (cdr (nth 2 tmp)) 'access)
+             (error "can't rename access folder"))
+         (setq new-folder
+               (wl-fldmgr-read-string
+                (wl-summary-read-folder old-folder "to rename" t t old-folder)))
+         (if (or (wl-folder-entity-exists-p new-folder)
+                 (file-exists-p (elmo-msgdb-expand-path new-folder)))
+             (error "already exists folder: %s" new-folder))
+         (elmo-rename-folder old-folder new-folder)
+         (wl-folder-set-entity-info
+          new-folder
+          (wl-folder-get-entity-info old-folder))
+         (when (wl-fldmgr-cut tmp nil t)
+           (wl-fldmgr-add new-folder))))))))
+
+(defun wl-fldmgr-make-access-group ()
+  (interactive)
+  (wl-fldmgr-make-group nil t))
+
+(defun wl-fldmgr-make-group (&optional group-name access)
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (bobp)
+       (message "Can't insert in the out of desktop group")
+      (let ((inhibit-read-only t)
+           (type 'group)
+           group tmp indent path new prev-id flist diffs)
+       (setq tmp (wl-fldmgr-get-path-from-buffer t))
+       (setq path (car tmp))
+       (setq indent (wl-fldmgr-make-indent (nth 1 tmp)))
+       (setq prev-id (nth 3 tmp))
+       (if (eq (cdr (nth 2 tmp)) 'access)
+           (message "Can't insert access group")
+         (setq group (or group-name
+                         (wl-fldmgr-read-string
+                          (read-from-minibuffer 
+                           (if access "Access Type Group: " "Group: ")))))
+         (when (or access (string-match "[\t ]*/$" group))
+           (setq group (if access group
+                         (substring group 0 (match-beginning 0))))
+           (setq type 'access)
+           (setq flist (wl-create-access-folder-entity group)))
+         (if (string= group "")
+             nil
+           (if (wl-string-assoc group wl-folder-group-alist)
+               (message "%s: group already exists" group)
+             (setq new (append (list group type) flist))
+             (when (setq diffs (wl-add-entity path
+                                              (list new)
+                                              wl-folder-entity
+                                              prev-id))
+               (wl-folder-insert-entity indent new)
+               (wl-fldmgr-update-group path diffs)
+               (setq wl-fldmgr-modified t)
+               (set-buffer-modified-p nil)))))))))
+
+(defun wl-fldmgr-make-multi ()
+  (interactive)
+  (if (not wl-fldmgr-cut-entity-list)
+      (message "No cut buffer")
+    (let ((cut-entity wl-fldmgr-cut-entity-list)
+         (new-entity "")
+         (first t)
+         status)
+      (setq status
+           (catch 'done
+             (while cut-entity
+               (cond
+                ((numberp (car cut-entity))
+                 nil)
+                ((consp (car cut-entity))
+                 (message "Can't make multi included group folder")
+                 (throw 'done nil))
+                (t
+                 (let ((spec (elmo-folder-get-spec (car cut-entity)))
+                       multi-fld)
+                   (if (eq (car spec) 'multi)
+                       (setq multi-fld
+                             (substring (car cut-entity) 1)))
+                   (setq new-entity
+                         (format "%s%s%s"
+                                 (or multi-fld (car cut-entity))
+                                 (if first "" ",")
+                                 new-entity))
+                   (setq first nil))))
+               (setq cut-entity (cdr cut-entity)))
+             (throw 'done t)))
+      (when status
+       (setq new-entity (concat "*" new-entity))
+       (wl-fldmgr-add new-entity)))))
+
+(defun wl-fldmgr-make-filter ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (looking-at wl-folder-group-regexp)
+       (message "This folder is group")
+      (let ((tmp (wl-fldmgr-get-path-from-buffer)))
+       (if (eq (cdr (nth 2 tmp)) 'access)
+           (message "Tan't change access group")
+         (let* ((entity (nth 4 tmp))
+                (old-entity entity)
+                old-filter
+                filter new-entity)
+           (unless entity (error "no folder"))
+           (when (string-match "^\\(\\(/[^/]+/\\)+\\)\\(.*\\)" entity)
+             (setq old-filter (substring entity
+                                         (match-beginning 1)
+                                         (match-end 1)))
+             (setq old-entity (substring entity
+                                         (match-beginning 3)
+                                         (match-end 3))))
+           (setq filter (completing-read "Filter: "
+                                         wl-fldmgr-filter-completion-alist
+                                         nil nil
+                                         (or old-filter "/")))
+           (unless (or (string= filter "")
+                       (string-match "/$" filter))
+             (setq filter (concat filter "/")))
+           (setq new-entity (concat filter old-entity))
+           (let ((entity new-entity)
+                 spec)
+             ;; check filter syntax
+             (while (eq
+                     (car (setq spec (elmo-folder-get-spec entity)))
+                     'filter)
+               (setq entity (nth 2 spec))))
+           (wl-fldmgr-add new-entity)))))))
+
+(defun wl-fldmgr-sort ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         entity flist indent opened)
+      (when (looking-at wl-folder-group-regexp)
+       (setq indent (wl-match-buffer 1))
+       (setq opened (wl-match-buffer 2))
+       (setq entity (wl-folder-search-group-entity-by-name
+                     (wl-folder-get-realname (wl-match-buffer 3))
+                     wl-folder-entity))
+       (message "Sorting...")
+       (setq flist (sort (nth 2 entity) wl-fldmgr-sort-func))
+       (setcar (cddr entity) flist)
+       (wl-fldmgr-add-modified-access-list (car entity))
+       (setq wl-fldmgr-modified t)
+       ;;
+       (when (string= opened "-")
+         (let (beg end)
+           (setq beg (point))
+           (end-of-line)
+           (save-match-data
+             (setq end
+                   (progn
+                     (wl-folder-goto-bottom-of-current-folder indent)
+                     (beginning-of-line)
+                     (point))))
+           (delete-region beg end)
+           (wl-folder-insert-entity indent entity)))
+       ;;(wl-fldmgr-reconst-entity-hashtb t t)
+       (message "Sorting...done")
+       (set-buffer-modified-p nil)))))
+
+(defun wl-fldmgr-sort-standard (x y)
+  (cond ((and (consp x) (not (consp y)))
+        wl-fldmgr-sort-group-first)
+       ((and (not (consp x)) (consp y))
+        (not wl-fldmgr-sort-group-first))
+       ((and (consp x) (consp y))
+        (string-lessp (car x) (car y)))
+       (t
+        (string-lessp x y))))
+
+(defun wl-fldmgr-subscribe-region ()
+  (interactive)
+  (wl-fldmgr-unsubscribe-region -1))
+
+(defun wl-fldmgr-unsubscribe-region (&optional arg)
+  (interactive "P")
+  (let* ((p1 (region-beginning))
+        (p2 (region-end))
+        (r1 (progn
+              (goto-char p1)
+              (beginning-of-line)
+              (point)))
+        (r2 (progn
+              (goto-char p2)
+              (beginning-of-line)
+              (point)))
+        (from (min r1 r2))
+        (to (max r1 r2))
+        (count 0))
+    (goto-char from)
+    (while (< (point) to)
+      (setq count (1+ count))
+      (forward-line))
+    (goto-char from)
+    (message "Unsubscribe region...")
+    (while (and (> count 0)
+               (wl-fldmgr-unsubscribe (or arg 1) t))
+      (setq count (1- count)))
+    (message "Unsubscribe region...done")))
+
+(defun wl-fldmgr-subscribe ()
+  (interactive)
+  (wl-fldmgr-unsubscribe -1))
+
+(defun wl-fldmgr-unsubscribe (&optional arg force)
+  (interactive "P")
+  (let ((type (and arg (prefix-numeric-value arg)))
+       execed is-group)
+    (save-excursion
+      (beginning-of-line)
+      (let ((inhibit-read-only t)
+           folder
+           tmp indent beg)
+       (cond
+        ((looking-at (format "^[ ]*%s\\[[+-]\\]\\(.*\\)" wl-folder-unsubscribe-mark))
+         (if (and type (> type 0))
+             nil
+           (setq folder (list (wl-match-buffer 1) 'access nil))
+           (if (wl-string-assoc (car folder) wl-folder-group-alist)
+               (message "%s: group already exists" (car folder))
+             (wl-fldmgr-delete-line)
+             (when (wl-fldmgr-add folder)
+               (wl-folder-maybe-load-folder-list folder)
+;;              (wl-folder-search-group-entity-by-name (car folder)
+;;                                                     wl-folder-entity))
+               (setq execed t)))))
+        ((looking-at (format "^[ ]*%s\\(.*\\)" wl-folder-unsubscribe-mark))
+         (if (and type (> type 0))
+             nil
+           (setq folder (wl-match-buffer 1))
+           (wl-fldmgr-delete-line)
+           (when (wl-fldmgr-add folder)
+             (setq execed t))))
+        (t
+         (if (and type (< type 0))
+             nil
+           (setq is-group (looking-at wl-folder-group-regexp))
+           (setq tmp (wl-fldmgr-get-path-from-buffer))
+           (setq indent (wl-fldmgr-make-indent (nth 1 tmp)))
+           (if (eq (cdr (nth 2 tmp)) 'access)
+               (when (wl-fldmgr-cut tmp)
+                 (pop wl-fldmgr-cut-entity-list)  ;; don't leave cut-list
+                 (setq beg (point))
+                 (insert indent wl-folder-unsubscribe-mark
+                         (if is-group
+                             (concat "[+]" (nth 4 tmp))
+                           (nth 4 tmp))
+                         "\n")
+                 (save-excursion (forward-line -1)
+                                 (wl-highlight-folder-current-line))
+                 (remove-text-properties beg (point) '(wl-folder-entity-id))
+                 (setq execed t))))))
+       (set-buffer-modified-p nil)))
+    (if (or force execed)
+       (progn
+         (forward-line)
+         t))))
+
+(defun wl-fldmgr-access-display-normal (&optional arg)
+  (interactive "P")
+  (wl-fldmgr-access-display-all (not arg)))
+
+(defun wl-fldmgr-access-display-all (&optional arg)
+  (interactive "P")
+  (let ((id (save-excursion
+             (wl-folder-prev-entity-skip-invalid t)
+             (wl-fldmgr-get-entity-id))))
+    (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         entity indent opened
+         unsubscribes beg)
+      (when (not (looking-at wl-folder-group-regexp))
+       (wl-folder-goto-top-of-current-folder)
+       (looking-at wl-folder-group-regexp))
+      (setq indent (wl-match-buffer 1))
+      (setq opened (wl-match-buffer 2))
+      (setq entity (wl-folder-search-group-entity-by-name
+                   (wl-folder-get-realname (wl-match-buffer 3))
+                   wl-folder-entity))
+      (when (eq (nth 1 entity) 'access)
+       (save-excursion
+         (if (string= opened "-")
+             (let (beg end)
+               (setq beg (point))
+               (end-of-line)
+               (save-match-data
+                 (setq end
+                       (progn
+                         (wl-folder-goto-bottom-of-current-folder indent)
+                         (beginning-of-line)
+                         (point))))
+               (delete-region beg end))
+           (wl-fldmgr-delete-line)
+           (setcdr (assoc (car entity) wl-folder-group-alist) t));; set open
+         (wl-folder-insert-entity indent entity))
+       (when (not arg)
+         (setq unsubscribes (nth 3 entity))
+         (forward-line)
+         (while unsubscribes
+           (setq beg (point))
+           (insert indent "  " wl-folder-unsubscribe-mark
+                   (if (consp (car unsubscribes))
+                       (concat "[+]" (caar unsubscribes))
+                     (car unsubscribes))
+                   "\n")
+           (remove-text-properties beg (point) '(wl-folder-entity-id))
+           (save-excursion (forward-line -1)
+                           (wl-highlight-folder-current-line))
+           (setq unsubscribes (cdr unsubscribes))))
+       (set-buffer-modified-p nil))))
+    (wl-folder-move-path id)))
+
+(defun wl-fldmgr-set-petname ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+      (let* ((is-group (looking-at wl-folder-group-regexp))
+            (name (wl-folder-get-entity-from-buffer))
+            (searchname (wl-folder-get-petname name))
+            (pentry (wl-string-assoc name wl-folder-petname-alist))
+            (old-petname (or (cdr pentry) ""))
+            (change)
+            petname)
+       (unless name (error "no folder"))
+       (if (and is-group
+                (not (eq (nth 1 (wl-folder-search-group-entity-by-name
+                                 name wl-folder-entity))
+                         'access)))
+           (message "Can't set petname. please rename.")
+       (setq petname (wl-fldmgr-read-string
+                      (read-from-minibuffer "Petname: " old-petname)))
+       (cond
+        ((string= petname "")
+         (when pentry
+           (setq wl-folder-petname-alist
+                 (delete pentry wl-folder-petname-alist))
+           (setq change t)))
+        (t
+         (if (string= petname old-petname)
+             nil
+           (if (or (rassoc petname wl-folder-petname-alist)
+                   (wl-string-assoc petname wl-folder-group-alist))
+               (message "%s: already exists" petname)
+             (wl-folder-append-petname name petname)
+             (setq change t)))))
+       (when change
+         (let ((inhibit-read-only t)
+               indent)
+           (goto-char (point-min))
+           (if is-group
+               (progn
+                 (if (string= old-petname "")
+                     (setq old-petname name))
+                 (while (wl-folder-buffer-search-group old-petname) 
+                   (beginning-of-line)           
+                   (and (looking-at "^\\([ ]*\\)")
+                        (setq indent (wl-match-buffer 1)))
+                   (wl-fldmgr-delete-line)
+                   (wl-folder-insert-entity
+                    indent
+                    (wl-folder-search-group-entity-by-name 
+                     name wl-folder-entity) 
+                    t)))
+             (while (wl-folder-buffer-search-entity name searchname)
+               (save-excursion
+                 (beginning-of-line)             
+                 (and (looking-at "^\\([ ]*\\)")
+                      (setq indent (wl-match-buffer 1)))
+                 (wl-fldmgr-delete-line))
+               (wl-folder-insert-entity indent name)))
+           (setq wl-fldmgr-modified t)
+           (set-buffer-modified-p nil)))))))
+
+;;; Function for save folders
+;;
+
+(defun wl-fldmgr-insert-folders-buffer (indent entities &optional pet-entities)
+  (let ((flist entities)
+       name petname)
+    (while flist
+      (setq name (car flist))
+      (cond ((stringp name)
+            (if (setq petname (cdr (wl-string-assoc name wl-folder-petname-alist)))
+                (wl-append pet-entities (list name)))
+            (insert indent name
+                    (if petname
+                        (concat "\t\"" petname "\"")
+                      "")
+                    "\n"))
+           ((consp name)
+            (let ((group (wl-folder-get-realname (car name)))
+                  (type (nth 1 name)))
+              (if (not (string= group (car name))) ; petname.
+                  (wl-append pet-entities (list (car name))))
+              (cond ((eq type 'group)
+                     (insert indent group "{\n")
+                     (setq pet-entities
+                           (wl-fldmgr-insert-folders-buffer
+                            (concat indent wl-fldmgr-folders-indent)
+                            (nth 2 name) pet-entities))
+                     (insert indent "}\n"))
+                    ((eq type 'access)
+                     (insert indent group "/\n"))))))
+      (setq flist (cdr flist))))
+  pet-entities)
+
+(defun wl-fldmgr-insert-petname-buffer (pet-entities)
+  (let ((alist wl-folder-petname-alist))
+    (while alist
+      (if (wl-string-member (caar alist) pet-entities)
+         nil
+       (insert "=\t" (caar alist) "\t\"" (cdar alist) "\"\n"))
+      (setq alist (cdr alist)))))
+
+(defun wl-fldmgr-delete-disused-petname ()
+  (let ((alist wl-folder-petname-alist))
+    (while alist
+      (unless (wl-folder-search-entity-by-name (caar alist) wl-folder-entity)
+       (setq wl-folder-petname-alist
+             (delete (car alist) wl-folder-petname-alist)))
+      (setq alist (cdr alist)))))
+
+(defun wl-fldmgr-save-folders ()
+  (interactive)
+  (let ((tmp-buf (get-buffer-create " *wl-fldmgr-tmp*"))
+       (access-list wl-fldmgr-modified-access-list)
+       entity
+       save-petname-entities)
+    (message "Saving folders...")
+    (set-buffer tmp-buf)
+    (erase-buffer)
+    (insert (format wl-fldmgr-folders-header
+                   wl-appname wl-version wl-codename))
+    (wl-fldmgr-delete-disused-petname)
+    (setq save-petname-entities
+         (wl-fldmgr-insert-folders-buffer "" (nth 2 wl-folder-entity)))
+    (insert "\n# petname definition (group, folder in access group)\n")
+    (wl-fldmgr-insert-petname-buffer save-petname-entities)
+    (insert "\n# end of file.\n")
+    (if (and wl-fldmgr-make-backup
+            (file-exists-p wl-folders-file))
+       (rename-file wl-folders-file (concat wl-folders-file ".bak") t))
+    (let ((output-coding-system (mime-charset-to-coding-system 
+                                wl-mime-charset)))
+      (write-region
+       (point-min)
+       (point-max)
+       wl-folders-file
+       nil
+       'no-msg)
+      (set-file-modes wl-folders-file 384)) ; 600
+    (kill-buffer tmp-buf)
+    (while access-list
+      (setq entity (wl-folder-search-group-entity-by-name
+                   (car access-list) wl-folder-entity))
+      (elmo-msgdb-flist-save
+       (car access-list)
+       (list
+       (wl-folder-make-save-access-list (nth 2 entity))
+       (wl-folder-make-save-access-list (nth 3 entity))))
+      (setq access-list (cdr access-list)))
+    (setq wl-fldmgr-modified nil)
+    (setq wl-fldmgr-modified-access-list nil)
+    (message "Saving folders...done")))
+
+(provide 'wl-fldmgr)
+
+;;; wl-fldmgr.el ends here
diff --git a/wl/wl-folder.el b/wl/wl-folder.el
new file mode 100644 (file)
index 0000000..083e8e3
--- /dev/null
@@ -0,0 +1,2679 @@
+;;; wl-folder.el -- Folder mode for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/25 16:30:59 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+(require 'elmo-util)
+(require 'elmo2)
+(require 'wl-vars)
+(condition-case ()
+    (require 'easymenu) ; needed here.
+  (error))
+
+(eval-when-compile
+  (require 'cl)
+  (require 'wl-util)
+  (provide 'wl-folder)
+  (require 'wl)
+  (require 'elmo-nntp)
+  (if wl-use-semi
+      (require 'mmelmo))
+  (unless (boundp ':file)
+    (set (make-local-variable ':file) nil))
+  (defun-maybe mmelmo-cleanup-entity-buffers ()))
+
+(defvar wl-folder-buffer-name "Folder")
+(defvar wl-folder-entity nil)          ; desktop entity.
+(defvar wl-folder-group-alist nil)     ; opened or closed
+(defvar wl-folder-entity-id nil) ; id
+(defvar wl-folder-entity-hashtb nil)
+(defvar wl-folder-entity-id-name-hashtb nil)
+(defvar wl-folder-newsgroups-hashtb nil)
+(defvar wl-folder-info-alist-modified nil)
+(defvar wl-folder-completion-func nil)
+
+(defvar wl-folder-mode-map nil)
+
+(defvar wl-folder-opened-glyph nil)
+(defvar wl-folder-closed-glyph nil)
+(defvar wl-folder-nntp-glyph nil)
+(defvar wl-folder-imap4-glyph nil)
+(defvar wl-folder-pop3-glyph nil)
+(defvar wl-folder-localdir-glyph nil)
+(defvar wl-folder-localnews-glyph nil)
+(defvar wl-folder-internal-glyph nil)
+(defvar wl-folder-multi-glyph nil)
+(defvar wl-folder-filter-glyph nil)
+(defvar wl-folder-archive-glyph nil)
+(defvar wl-folder-pipe-glyph nil)
+(defvar wl-folder-maildir-glyph nil)
+(defvar wl-folder-trash-empty-glyph nil)
+(defvar wl-folder-trash-glyph nil)
+(defvar wl-folder-draft-glyph nil)
+(defvar wl-folder-queue-glyph nil)
+
+(defvar wl-folder-buffer-disp-summary nil)
+(make-variable-buffer-local 'wl-folder-buffer-disp-summary)
+(defvar wl-folder-buffer-cur-entity-id nil)
+(make-variable-buffer-local 'wl-folder-buffer-cur-entity-id)
+(defvar wl-folder-buffer-cur-path nil)
+(make-variable-buffer-local 'wl-folder-buffer-cur-entity-id)
+(defvar wl-folder-buffer-cur-point nil)
+(make-variable-buffer-local 'wl-folder-buffer-cur-point)
+
+(defconst wl-folder-entity-regexp "^\\([ ]*\\)\\(\\[[\\+-]\\]\\)?\\([^\\[].+\\):[-*0-9]+/[-*0-9]+/[-*0-9]+")
+(defconst wl-folder-group-regexp  "^\\([ ]*\\)\\[\\([\\+-]\\)\\]\\(.+\\):[-0-9-]+/[0-9-]+/[0-9-]+\n")
+;;                             1:indent 2:opened 3:group-name
+(defconst wl-folder-unsync-regexp ":[^0\\*][0-9]*/[0-9\\*-]+/[0-9\\*-]+$")
+
+(defvar wl-folder-mode-menu-spec
+  '("Folder"
+    ["Enter Current Folder" wl-folder-jump-to-current-entity t]
+    ["Prev Folder"          wl-folder-prev-entity t]
+    ["Next Folder"          wl-folder-next-entity t]
+    ["Check Current Folder" wl-folder-check-current-entity t]
+    ["Sync Current Folder"  wl-folder-sync-current-entity t]
+    ["Drop Current Folder" wl-folder-drop-unsync-current-entity t]
+    ["Prefetch Current Folder" wl-folder-prefetch-current-entity t]
+    ["Mark as Read all Current Folder" wl-folder-mark-as-read-all-current-entity t]
+    ["Expire Current Folder" wl-folder-expire-current-entity t]
+    ["Empty trash" wl-folder-empty-trash t]
+    ["Flush queue" wl-folder-flush-queue t]
+    ["Open All" wl-folder-open-all t]
+    ["Open All Unread folder" wl-folder-open-all-unread-folder t]
+    ["Close All" wl-folder-close-all t]
+    ("Folder Manager"
+     ["Add folder" wl-fldmgr-add t]
+     ["Add group" wl-fldmgr-make-group t]
+     ["Copy" wl-fldmgr-copy t]
+     ["Cut" wl-fldmgr-cut t]
+     ["Paste" wl-fldmgr-yank t]
+     ["Set petname" wl-fldmgr-set-petname t]
+     ["Rename" wl-fldmgr-rename t]
+     ["Save" wl-fldmgr-save-folders t]
+     "----"
+     ["Unsubscribe" wl-fldmgr-unsubscribe t]
+     ["Display all" wl-fldmgr-access-display-all t])
+    "----"
+    ["Write a message" wl-draft t]
+    "----"
+    ["Toggle Plug Status" wl-toggle-plugged t]
+    ["Change Plug Status" wl-plugged-change t]
+    "----"
+    ["Save Current Status"  wl-save t]
+    ["Update Satus"         wl-status-update t]
+    ["Exit"                 wl-exit t]
+    ))
+
+(if wl-on-xemacs
+    (defun wl-folder-setup-mouse ()
+      (define-key wl-folder-mode-map 'button2 'wl-folder-click)
+      (define-key wl-folder-mode-map 'button4 'wl-folder-prev-entity)
+      (define-key wl-folder-mode-map 'button5 'wl-folder-next-entity)
+      (define-key wl-folder-mode-map [(shift button4)] 
+       'wl-folder-prev-unread)
+      (define-key wl-folder-mode-map [(shift button5)] 
+       'wl-folder-next-unread))
+  (if wl-on-nemacs
+      (defun wl-folder-setup-mouse ())
+    (defun wl-folder-setup-mouse ()
+      (define-key wl-folder-mode-map [mouse-2] 'wl-folder-click)
+      (define-key wl-folder-mode-map [mouse-4] 'wl-folder-prev-entity)
+      (define-key wl-folder-mode-map [mouse-5] 'wl-folder-next-entity)
+      (define-key wl-folder-mode-map [S-mouse-4] 'wl-folder-prev-unread)
+      (define-key wl-folder-mode-map [S-mouse-5] 'wl-folder-next-unread))))
+
+(if wl-folder-mode-map
+    nil
+  (setq wl-folder-mode-map (make-sparse-keymap))
+  (define-key wl-folder-mode-map " "    'wl-folder-jump-to-current-entity)
+;  (define-key wl-folder-mode-map "\M- " 'wl-folder-open-close)
+  (define-key wl-folder-mode-map "/"    'wl-folder-open-close)
+  (define-key wl-folder-mode-map "\C-m" 'wl-folder-jump-to-current-entity)
+  (define-key wl-folder-mode-map "\M-\C-m" 'wl-folder-update-recursive-current-entity)
+  (define-key wl-folder-mode-map "rc"    'wl-folder-mark-as-read-all-region)
+  (define-key wl-folder-mode-map "c"    'wl-folder-mark-as-read-all-current-entity)
+  (define-key wl-folder-mode-map "g"    'wl-folder-goto-folder)
+  (define-key wl-folder-mode-map "j"    'wl-folder-jump-to-current-entity)
+  (define-key wl-folder-mode-map "w"    'wl-draft)
+  (define-key wl-folder-mode-map "W"    'wl-folder-write-current-newsgroup)
+  (define-key wl-folder-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
+  (define-key wl-folder-mode-map "rS"   'wl-folder-sync-region)
+  (define-key wl-folder-mode-map "S"    'wl-folder-sync-current-entity)
+  (define-key wl-folder-mode-map "rs"   'wl-folder-check-region)
+  (define-key wl-folder-mode-map "s"    'wl-folder-check-current-entity)
+  (define-key wl-folder-mode-map "I"    'wl-folder-prefetch-current-entity)
+  (define-key wl-folder-mode-map "D"    'wl-folder-drop-unsync-current-entity)
+  (define-key wl-folder-mode-map "p"    'wl-folder-prev-entity)
+  (define-key wl-folder-mode-map "n"    'wl-folder-next-entity)
+  (define-key wl-folder-mode-map "v"    'wl-folder-toggle-disp-summary)
+  (define-key wl-folder-mode-map "P"    'wl-folder-prev-unread)
+  (define-key wl-folder-mode-map "N"    'wl-folder-next-unread)
+  (define-key wl-folder-mode-map "J"    'wl-folder-jump-folder)
+  (define-key wl-folder-mode-map "f"    'wl-folder-goto-first-unread-folder)
+  (define-key wl-folder-mode-map "o"    'wl-folder-open-all-unread-folder)
+  (define-key wl-folder-mode-map "["    'wl-folder-open-all)
+  (define-key wl-folder-mode-map "]"    'wl-folder-close-all)
+  (define-key wl-folder-mode-map "e"    'wl-folder-expire-current-entity)
+  (define-key wl-folder-mode-map "E"    'wl-folder-empty-trash)
+  (define-key wl-folder-mode-map "F"    'wl-folder-flush-queue)
+  (define-key wl-folder-mode-map "q"    'wl-exit)
+  (define-key wl-folder-mode-map "z"    'wl-folder-suspend)  
+  (define-key wl-folder-mode-map "\M-t" 'wl-toggle-plugged)
+  (define-key wl-folder-mode-map "\C-t" 'wl-plugged-change)
+  (define-key wl-folder-mode-map "<"    'beginning-of-buffer)
+  (define-key wl-folder-mode-map ">"    'end-of-buffer)
+  ;; wl-fldmgr
+  (unless wl-on-nemacs
+    (define-key wl-folder-mode-map "m"    'wl-fldmgr-mode-map))
+  (define-key wl-folder-mode-map "*"    'wl-fldmgr-make-multi)
+  (define-key wl-folder-mode-map "+"    'wl-fldmgr-make-group)
+  (define-key wl-folder-mode-map "|"    'wl-fldmgr-make-filter)
+  (define-key wl-folder-mode-map "\M-c" 'wl-fldmgr-copy)
+  (define-key wl-folder-mode-map "\M-w" 'wl-fldmgr-copy-region)
+  (define-key wl-folder-mode-map "\C-k" 'wl-fldmgr-cut)
+  (define-key wl-folder-mode-map "\C-w" 'wl-fldmgr-cut-region)
+  (define-key wl-folder-mode-map "\C-y" 'wl-fldmgr-yank)
+  (define-key wl-folder-mode-map "R"    'wl-fldmgr-rename)
+  (define-key wl-folder-mode-map "u"    'wl-fldmgr-unsubscribe)
+  (define-key wl-folder-mode-map "ru"   'wl-fldmgr-unsubscribe-region)
+  (define-key wl-folder-mode-map "U"    'wl-fldmgr-unsubscribe-region)
+  (define-key wl-folder-mode-map "l"    'wl-fldmgr-access-display-normal)
+  (define-key wl-folder-mode-map "L"    'wl-fldmgr-access-display-all)
+  (define-key wl-folder-mode-map "Z"    'wl-status-update)
+  (define-key wl-folder-mode-map "\C-x\C-s" 'wl-save)
+  (define-key wl-folder-mode-map "\M-s"     'wl-save)
+  (define-key wl-folder-mode-map "\C-xk"    'wl-folder-mimic-kill-buffer)
+  (wl-folder-setup-mouse)
+  (easy-menu-define
+   wl-folder-mode-menu
+   wl-folder-mode-map
+   "Menu used in Folder mode."
+   wl-folder-mode-menu-spec))
+
+(defmacro wl-folder-unread-regex (group)
+  (` (concat "^[ ]*.+:[0-9\\*-]+/[^0\\*][0-9]*/[0-9\\*-]+$"
+            (if (, group)
+                "\\|^[ ]*\\[[+-]\\]"
+              ""))))
+
+(defmacro wl-folder-buffer-group-p ()
+  (` (save-excursion (beginning-of-line)
+                    (looking-at wl-folder-group-regexp))))
+
+(defmacro wl-folder-folder-name ()
+  (` (save-excursion
+       (beginning-of-line)
+       (if (or (looking-at "^[ ]*\\[[\\+-]\\]\\(.+\\):[-0-9\\*-]+/[0-9\\*-]+/[0-9\\*-]+\n")
+              (looking-at "^[ ]*\\([^\\[].+\\):.*\n"))
+          (wl-match-buffer 1)))))
+
+(defmacro wl-folder-entity-name ()
+  (` (save-excursion
+       (beginning-of-line)
+       (if (looking-at "^[ ]*\\([^\\[].+\\):.*\n")
+          (wl-match-buffer 1)))))
+
+(defun wl-folder-buffer-search-group (group)
+  (re-search-forward
+   (concat 
+    "^\\([ \t]*\\)\\[[\\+-]\\]"
+    (regexp-quote group) ":[-0-9-]+/[0-9-]+/[0-9-]+") nil t))
+
+(defun wl-folder-buffer-search-entity (folder &optional searchname)
+  (let ((search (or searchname (wl-folder-get-petname folder))))
+    (re-search-forward
+     (concat 
+      "^[ \t]*"
+      (regexp-quote search) ":[-0-9\\*-]+/[0-9\\*-]+/[0-9\\*-]+") nil t)))
+
+(defsubst wl-folder-get-folder-name-by-id (entity-id &optional hashtb)
+  (and (numberp entity-id)
+       (elmo-get-hash-val (format "#%d" entity-id)
+                         (or hashtb wl-folder-entity-id-name-hashtb))))
+
+(defsubst wl-folder-set-id-name (entity-id entity &optional hashtb)
+  (and (numberp entity-id)
+       (elmo-set-hash-val (format "#%d" entity-id)
+                         entity (or hashtb wl-folder-entity-id-name-hashtb))))
+
+(defmacro wl-folder-get-entity-id (entity)
+  (` (or (get-text-property 0
+                           'wl-folder-entity-id
+                           (, entity))
+        (, entity)))) ;; for nemacs
+
+(defmacro wl-folder-get-entity-from-buffer (&optional getid)
+  (` (let ((id (get-text-property (point)
+                                 'wl-folder-entity-id)))
+       (if (not id) ;; for nemacs
+          (wl-folder-get-realname (wl-folder-folder-name))
+        (if (, getid)
+            id
+          (wl-folder-get-folder-name-by-id id))))))
+
+(defmacro wl-folder-entity-exists-p (entity &optional hashtb)
+  (` (let ((sym (intern-soft (, entity)
+                            (or (, hashtb) wl-folder-entity-hashtb))))
+       (and sym (boundp sym)))))
+
+(defmacro wl-folder-clear-entity-info (entity &optional hashtb)
+  (` (let ((sym (intern-soft (, entity)
+                            (or (, hashtb) wl-folder-entity-hashtb))))
+       (if (boundp sym)
+          (makunbound sym)))))
+
+(defmacro wl-folder-get-entity-info (entity &optional hashtb)
+  (` (elmo-get-hash-val (, entity) (or (, hashtb) wl-folder-entity-hashtb))))
+
+(defmacro wl-folder-set-entity-info (entity value &optional hashtb)
+  (` (let* ((hashtb (or (, hashtb) wl-folder-entity-hashtb))
+           (info (wl-folder-get-entity-info (, entity) hashtb)))
+       (elmo-set-hash-val (, entity)
+                         (if (< (length (, value)) 4)
+                             (append (, value) (list (nth 3 info)))
+                           (, value))
+                         hashtb))))
+
+(defun wl-folder-persistent-p (folder)
+  (or (elmo-get-hash-val folder wl-folder-entity-hashtb) ; on Folder mode.
+      (catch 'found
+       (let ((li wl-save-folder-list))
+         (while li
+           (if (string-match (car li) folder)
+               (throw 'found t))
+           (setq li (cdr li)))))
+      (not (catch 'found
+            (let ((li wl-no-save-folder-list))
+              (while li
+                (if (string-match (car li) folder)
+                    (throw 'found t))
+                (setq li (cdr li))))))))
+
+(defun wl-folder-prev-entity ()
+  (interactive)
+  (forward-line -1))
+
+(defun wl-folder-next-entity ()
+  (interactive)
+  (forward-line 1))
+
+(defun wl-folder-prev-entity-skip-invalid (&optional hereto)
+  "move to previous entity. skip unsubscribed or removed entity."
+  (interactive)
+  (if hereto
+      (end-of-line))
+  (if (re-search-backward wl-folder-entity-regexp nil t)
+      (beginning-of-line)
+    (goto-char (point-min))))
+
+(defun wl-folder-next-entity-skip-invalid (&optional hereto)
+  "move to next entity. skip unsubscribed or removed entity."
+  (interactive)
+  (beginning-of-line)
+  (if (not hereto)
+      (forward-line 1))
+  (if (re-search-forward wl-folder-entity-regexp nil t)
+      (beginning-of-line)
+    (goto-char (point-max))))
+
+(defun wl-folder-search-group-entity-by-name (name entity)
+  (wl-folder-search-entity-by-name name entity 'group))
+
+(defun wl-folder-search-entity-by-name (name entity &optional type)
+  (let ((entities (list entity))
+       entity-stack)
+    (catch 'done
+      (while entities
+       (setq entity (wl-pop entities))
+       (cond
+        ((consp entity)
+         (if (and (not (eq type 'folder))
+                  (string= name (car entity)))
+             (throw 'done entity))
+         (and entities
+              (wl-push entities entity-stack))
+         (setq entities (nth 2 entity)))
+        ((and (not (eq type 'group))
+              (stringp entity))
+         (if (string= name entity)
+             (throw 'done entity))))
+       (unless entities
+         (setq entities (wl-pop entity-stack)))))))
+
+(defun wl-folder-search-entity-list-by-name (name entity &optional get-id)
+  (let ((entities (list entity))
+       entity-stack ret-val)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (if (string= name entity)
+           (wl-append ret-val (if get-id
+                                  (list (wl-folder-get-entity-id entity))
+                                (list entity))))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    ret-val))
+
+(defun wl-folder-get-prev-folder (id &optional unread)
+  (let ((name (if (stringp id)
+                 id
+               (wl-folder-get-folder-name-by-id id)))
+       entity entity-stack last-entity finfo
+       (entities (list wl-folder-entity)))
+    (catch 'done
+      (while entities
+       (setq entity (wl-pop entities))
+       (cond
+        ((consp entity)
+;;       (if (and (string= name (car entity))
+;;                (eq id (wl-folder-get-entity-id (car entity))))
+;;           (throw 'done last-entity))
+         (and entities
+              (wl-push entities entity-stack))
+         (setq entities (nth 2 entity)))
+        ((stringp entity)
+         (if (and (string= name entity)
+                  ;; don't use eq, `id' is string on Nemacs.
+                  (equal id (wl-folder-get-entity-id entity)))
+             (throw 'done last-entity))
+         (if (or (not unread)
+                 (and (setq finfo (wl-folder-get-entity-info entity))
+                      (and (nth 0 finfo)(nth 1 finfo))
+                      (> (+ (nth 0 finfo)(nth 1 finfo)) 0)))
+             (setq last-entity entity))))
+       (unless entities
+         (setq entities (wl-pop entity-stack)))))))
+
+(defun wl-folder-get-next-folder (id &optional unread)
+  (let ((name (if (stringp id)
+                 id
+               (wl-folder-get-folder-name-by-id id)))
+       entity entity-stack found finfo
+       (entities (list wl-folder-entity)))
+    (catch 'done
+      (while entities
+       (setq entity (wl-pop entities))
+       (cond
+        ((consp entity)
+;;       (if (and (string= name (car entity))
+;;                (eq id (wl-folder-get-entity-id (car entity))))
+;;           (setq found t))
+         (and entities
+              (wl-push entities entity-stack))
+         (setq entities (nth 2 entity)))
+        ((stringp entity)
+         (if found
+             (when (or (not unread)
+                       (and (setq finfo (wl-folder-get-entity-info entity))
+                            (and (nth 0 finfo)(nth 1 finfo))
+                            (> (+ (nth 0 finfo)(nth 1 finfo)) 0)))
+               (throw 'done entity))
+           (if (and (string= name entity)
+                    ;; don't use eq, `id' is string on Nemacs.
+                    (equal id (wl-folder-get-entity-id entity)))
+               (setq found t)))))
+       (unless entities
+         (setq entities (wl-pop entity-stack)))))))
+
+(defun wl-folder-flush-queue ()
+  "Flush queue."
+  (interactive)
+  (let ((cur-buf (current-buffer))
+       (wl-auto-select-first nil)
+       (wl-plugged t)
+       emptied)
+    (if (not (elmo-list-folder wl-queue-folder))
+       (error "No queue exists")
+      (if wl-stay-folder-window
+         (wl-folder-select-buffer 
+          (wl-summary-get-buffer-create wl-queue-folder)))
+      (wl-summary-goto-folder-subr wl-queue-folder 'force-update nil)
+      (unwind-protect
+         (wl-draft-queue-flush)
+       (if wl-summary-cache-use (wl-summary-save-view-cache))
+       (wl-summary-msgdb-save)
+       (if (get-buffer-window cur-buf)
+           (select-window (get-buffer-window cur-buf)))
+       (set-buffer cur-buf)
+       (if wl-stay-folder-window
+           (wl-folder-toggle-disp-summary 'off wl-queue-folder)
+         (switch-to-buffer cur-buf))))))
+
+(defun wl-folder-empty-trash ()
+  "Empty trash."
+  (interactive)
+  (let ((cur-buf (current-buffer))
+       (wl-auto-select-first nil)
+       trash-buf emptied)
+    (if wl-stay-folder-window
+       (wl-folder-select-buffer 
+        (wl-summary-get-buffer-create wl-trash-folder)))
+    (wl-summary-goto-folder-subr wl-trash-folder 'force-update nil nil t)
+    (setq trash-buf (current-buffer))
+    (unwind-protect
+       (setq emptied (wl-summary-delete-all-msgs))
+      (when emptied
+       (setq wl-thread-entities nil
+             wl-thread-entity-list nil)
+       (if wl-summary-cache-use (wl-summary-save-view-cache))
+       (wl-summary-msgdb-save))
+      (if (get-buffer-window cur-buf)
+         (select-window (get-buffer-window cur-buf)))
+      (set-buffer cur-buf)
+      (if emptied
+         (wl-folder-set-folder-updated wl-trash-folder '(0 0 0)))
+      (if wl-stay-folder-window
+         (wl-folder-toggle-disp-summary 'off wl-trash-folder)
+       (switch-to-buffer cur-buf))
+      (and trash-buf 
+          (kill-buffer trash-buf)))))
+
+(defun wl-folder-goto-top-of-current-folder ()
+  (if (re-search-backward "^\\([ ]*\\)\\[\\([\\+-]\\)\\]\\(.+\\)\n" nil t)
+      (beginning-of-line)
+    (goto-char (point-min))))
+
+(defun wl-folder-goto-bottom-of-current-folder (indent)
+  (if (catch 'done
+       (while (re-search-forward "^\\([ ]*\\)[^ ]" nil t)
+         (if (<= (length (wl-match-buffer 1))
+                 (length indent))
+             (throw 'done nil)))
+       (throw 'done t))
+      (goto-char (point-max))))
+
+(defsubst wl-folder-update-group (entity diffs &optional is-group)
+  (let ((path (wl-folder-get-path 
+              wl-folder-entity
+              (wl-folder-get-entity-id entity)
+              entity)))
+    (if (not is-group)
+       ;; delete itself from path
+       (setq path (delete (nth (- (length path) 1) path) path)))
+    (goto-char (point-min))
+    (catch 'done
+      (while path
+       ;; goto the path line.
+       (if (or (eq (car path) 0) ; update desktop
+               (wl-folder-buffer-search-group
+                (wl-folder-get-petname
+                 (if (stringp (car path))
+                     (car path)
+                   (wl-folder-get-folder-name-by-id
+                    (car path))))))
+           ;; update it.
+           (wl-folder-update-diff-line diffs)
+         (throw 'done t))
+       (setq path (cdr path))))))
+
+(defun wl-folder-maybe-load-folder-list (entity)
+  (when (null (caddr entity))
+    (setcdr (cdr entity)
+           (elmo-msgdb-flist-load (car entity)))
+    (when (cddr entity)
+      (let (diffs)
+       (save-excursion
+         (wl-folder-entity-assign-id entity
+                                     wl-folder-entity-id-name-hashtb
+                                     t)
+         (setq diffs (wl-fldmgr-add-entity-hashtb (list entity)))
+         (unless (equal diffs '(0 0 0))
+           (wl-folder-update-group (car entity) diffs t)))))))
+
+(defsubst wl-folder-force-fetch-p (entity)
+  (cond
+   ((consp wl-force-fetch-folders)
+    (wl-string-match-member entity wl-force-fetch-folders))
+   (t
+    wl-force-fetch-folders)))
+
+(defun wl-folder-jump-to-current-entity (&optional arg)
+  "Enter the current folder. If optional arg exists, update folder list. "
+  (interactive "P")
+  (beginning-of-line)
+  (let (entity beg end indent opened fname err fld-name)
+    (cond 
+     ((looking-at wl-folder-group-regexp)
+      (save-excursion
+       (setq fname (wl-folder-get-realname (wl-match-buffer 3)))
+       (setq indent (wl-match-buffer 1))
+       (setq opened (wl-match-buffer 2))
+       (if (string= opened "+")
+           (progn
+             (setq entity (wl-folder-search-group-entity-by-name 
+                           fname
+                           wl-folder-entity))
+             (setq beg (point))
+             (if arg
+                 (wl-folder-update-recursive-current-entity entity)
+             ;; insert as opened
+             (setcdr (assoc (car entity) wl-folder-group-alist) t)
+             (if (eq 'access (cadr entity))
+                 (wl-folder-maybe-load-folder-list entity))
+             (condition-case errobj
+                 (progn
+                   (if (or (wl-folder-force-fetch-p (car entity))
+                           (and
+                            (eq 'access (cadr entity))
+                            (null (caddr entity))))
+                       (wl-folder-update-newest indent entity)
+                     (wl-folder-insert-entity indent entity))
+                   (wl-highlight-folder-path wl-folder-buffer-cur-path))
+               (quit
+                (setq err t)
+                (setcdr (assoc fname wl-folder-group-alist) nil))
+               (error 
+                (elmo-display-error errobj t)
+                (ding)
+                (setq err t)
+                (setcdr (assoc fname wl-folder-group-alist) nil)))
+             (if (not err)
+                 (let ((buffer-read-only nil))
+                   (delete-region (save-excursion (beginning-of-line)
+                                                  (point))
+                                  (save-excursion (end-of-line)
+                                                  (+ 1 (point))))))))
+         (setq beg (point))
+         (end-of-line)
+         (save-match-data
+           (setq end
+                 (progn (wl-folder-goto-bottom-of-current-folder indent)
+                        (beginning-of-line)
+                        (point))))
+         (setq entity (wl-folder-search-group-entity-by-name 
+                       fname
+                       wl-folder-entity))
+         (let ((buffer-read-only nil))
+           (delete-region beg end))
+         (setcdr (assoc (car entity) wl-folder-group-alist) nil)
+         (wl-folder-insert-entity indent entity) ; insert entity
+         (forward-line -1)
+         (wl-highlight-folder-path wl-folder-buffer-cur-path)
+;        (wl-delete-all-overlays)
+;        (wl-highlight-folder-current-line)
+         )))
+     ((setq fld-name (wl-folder-entity-name))
+      (if wl-on-nemacs
+         (progn
+           (wl-folder-set-current-entity-id 
+            (wl-folder-get-entity-from-buffer))
+           (setq fld-name (wl-folder-get-realname fld-name)))
+       (wl-folder-set-current-entity-id 
+        (get-text-property (point) 'wl-folder-entity-id))
+       (setq fld-name (wl-folder-get-folder-name-by-id
+                       wl-folder-buffer-cur-entity-id)))
+      (let ((summary-buf (wl-summary-get-buffer-create fld-name arg))
+           error-selecting)
+       (if wl-stay-folder-window
+           (wl-folder-select-buffer summary-buf)
+         (if (and summary-buf
+                  (get-buffer-window summary-buf))
+             (delete-window)))
+       (wl-summary-goto-folder-subr fld-name 
+                                    (wl-summary-get-sync-range fld-name)
+                                    nil arg t)))))
+  (set-buffer-modified-p nil))
+
+(defun wl-folder-close-entity (entity)
+  (let ((entities (list entity))
+       entity-stack)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (setcdr (assoc (car entity) wl-folder-group-alist) nil)
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))))
+
+(defun wl-folder-update-recursive-current-entity (&optional entity)
+  (interactive)
+  (when (wl-folder-buffer-group-p)
+    (cond
+     ((string= (wl-match-buffer 2) "+")
+      (save-excursion
+       (if entity ()
+         (setq entity
+               (wl-folder-search-group-entity-by-name 
+                (wl-folder-get-realname (wl-match-buffer 3))
+                wl-folder-entity)))
+       (let ((inhibit-read-only t)
+             (entities (list entity))
+             entity-stack err indent)
+         (while (and entities (not err))
+           (setq entity (wl-pop entities))
+           (cond
+            ((consp entity)
+             (wl-folder-close-entity entity)
+             (setcdr (assoc (car entity) wl-folder-group-alist) t)
+             (unless (wl-folder-buffer-search-group
+                      (wl-folder-get-petname (car entity)))
+               (error "%s: not found group" (car entity)))
+             (setq indent (wl-match-buffer 1))
+             (if (eq 'access (cadr entity))
+                 (wl-folder-maybe-load-folder-list entity))
+             (beginning-of-line)
+             (setq err nil)
+             (save-excursion
+               (condition-case errobj
+                   (wl-folder-update-newest indent entity)
+                 (quit
+                  (setq err t)
+                  (setcdr (assoc (car entity) wl-folder-group-alist) nil))
+                 (error 
+                  (elmo-display-error errobj t)
+                  (ding)
+                  (setq err t)
+                  (setcdr (assoc (car entity) wl-folder-group-alist) nil)))
+               (if (not err)
+                   (delete-region (save-excursion (beginning-of-line)
+                                                  (point))
+                                  (save-excursion (end-of-line)
+                                                  (+ 1 (point))))))
+             ;;
+             (and entities
+                  (wl-push entities entity-stack))
+             (setq entities (nth 2 entity))))
+           (unless entities
+             (setq entities (wl-pop entity-stack)))))
+       (set-buffer-modified-p nil)))
+     (t
+      (wl-folder-jump-to-current-entity)))))
+
+(defun wl-folder-no-auto-check-folder-p (folder)
+  (if (stringp folder)
+      (if (catch 'found
+           (let ((li wl-auto-check-folder-list))
+             (while li
+               (if (string-match (car li) folder)
+                   (throw 'found t))
+               (setq li (cdr li)))))
+         nil
+       (catch 'found
+         (let ((li wl-auto-uncheck-folder-list))
+           (while li
+             (if (string-match (car li) folder)
+                 (throw 'found t))     ; no check!
+             (setq li (cdr li))))))))
+
+(defsubst wl-folder-add-folder-info (pre-value value)
+  (list
+   (+ (or (nth 0 pre-value) 0) (or (nth 0 value) 0))
+   (+ (or (nth 1 pre-value) 0) (or (nth 1 value) 0))
+   (+ (or (nth 2 pre-value) 0) (or (nth 2 value) 0))))
+
+(defun wl-folder-check-entity (entity &optional auto)
+  "Check unsync message number."
+  (let ((start-pos (point))
+       ret-val)
+    (run-hooks 'wl-folder-check-entity-pre-hook)
+    (if (and (consp entity)            ;; group entity
+            wl-folder-check-async)     ;; very fast
+       (setq ret-val (wl-folder-check-entity-async entity auto))
+      (save-excursion
+       (cond
+        ((consp entity)
+         (let ((flist (if auto 
+                          (elmo-delete-if
+                           'wl-folder-no-auto-check-folder-p
+                           (nth 2 entity))
+                        (nth 2 entity)))
+               (wl-folder-check-entity-pre-hook nil)
+               (wl-folder-check-entity-hook nil)
+               new unread all)
+           (while flist
+             (setq ret-val
+                   (wl-folder-add-folder-info
+                    ret-val
+                    (wl-folder-check-entity (car flist))))
+             (setq flist (cdr flist)))
+           ;(wl-folder-buffer-search-entity (car entity))
+           ;(wl-folder-update-line ret-val)
+           ))
+        ((and (stringp entity)
+              (elmo-folder-plugged-p entity))
+         (message "Checking \"%s\"" entity)
+         (setq ret-val (wl-folder-check-one-entity entity))
+         (goto-char start-pos)
+         (sit-for 0))
+        (t
+         (message "Uncheck(unplugged) \"%s\"" entity)))))
+    (if ret-val
+       (message "Checking \"%s\" is done." 
+                (if (consp entity) (car entity) entity)))
+    (run-hooks 'wl-folder-check-entity-hook)
+    ret-val))
+
+;; All contained folders are imap4 and persistent flag, then 
+;; use server diff.
+(defun wl-folder-use-server-diff-p (folder)
+  (let ((spec (elmo-folder-get-spec folder)))
+    (cond
+     ((eq (car spec) 'multi)
+      (let ((folders (cdr spec)))
+       (catch 'done
+         (while folders
+           (if (wl-folder-use-server-diff-p (car folders))
+               (throw 'done t))
+           (setq folders (cdr folders)))
+         nil)))
+    ((eq (car spec) 'filter)
+     (wl-folder-use-server-diff-p (nth 2 spec)))
+    ((eq (car spec) 'imap4)
+     (and wl-folder-use-server-diff
+         (elmo-imap4-use-flag-p spec)))
+    (t nil))))
+
+(defun wl-folder-check-one-entity (entity)
+  (let* ((elmo-use-server-diff (wl-folder-use-server-diff-p entity))
+        (nums (condition-case err
+                  (if (wl-string-member entity wl-strict-diff-folders)
+                      (elmo-strict-folder-diff entity)
+                    (elmo-folder-diff entity))
+                (error
+                 ;; maybe not exist folder.
+                 (if (not (elmo-folder-exists-p entity))
+                     (if (not (elmo-folder-creatable-p entity))
+                         (error "Folder %s is not found" entity)
+                       (if (y-or-n-p 
+                            (format "Folder %s does not exist, create it?" 
+                                    entity))
+                           (progn
+                             (unless (elmo-create-folder entity)
+                               (error "Create folder failed"))
+                             ;; one more try.
+                             (if (wl-string-member entity wl-strict-diff-folders)
+                                 (elmo-strict-folder-diff entity)
+                               (elmo-folder-diff entity)))
+                         (error "Folder is not created")))
+                   (signal (car err) (cdr err))))))
+        unread unsync nomif)
+    (if (and (eq wl-folder-notify-deleted 'sync)
+            (car nums)
+            (or (> 0 (car nums)) (> 0 (cdr nums))))
+       (progn
+         (wl-folder-sync-entity entity)
+         (setq nums (elmo-folder-diff entity)))
+      (unless wl-folder-notify-deleted
+       (setq unsync (if (and (car nums) (> 0 (car nums))) 0 (car nums)))
+       (setq nomif (if (and (car nums) (> 0 (cdr nums))) 0 (cdr nums)))
+       (setq nums (cons unsync nomif)))
+      (wl-folder-entity-hashtb-set wl-folder-entity-hashtb entity
+                                  (list (car nums)
+                                        (setq 
+                                         unread
+                                         (or 
+                                          ;; If server diff, All unreads are
+                                          ;; treated as unsync.
+                                          (if elmo-use-server-diff 0)
+                                          (elmo-folder-get-info-unread entity)
+                                          (wl-summary-count-unread
+                                           (elmo-msgdb-mark-load
+                                            (elmo-msgdb-expand-path entity))
+                                           entity)))
+                                        (cdr nums))
+                                  (current-buffer)))
+    (setq wl-folder-info-alist-modified t)
+    (sit-for 0)
+    (list (if wl-folder-notify-deleted
+             (car nums)
+           (max (or (car nums) 0))) unread (cdr nums))))
+
+(defun wl-folder-check-entity-async (entity &optional auto)
+  (let ((elmo-nntp-groups-async t)
+       (elist (if auto
+                  (elmo-delete-if
+                   'wl-folder-no-auto-check-folder-p
+                   (wl-folder-get-entity-list entity))
+                (wl-folder-get-entity-list entity)))
+       (nntp-connection-keys nil)
+       folder spec-list local-elist net-elist server
+       ret-val)
+    (while elist
+      (if (not (elmo-folder-plugged-p (car elist)))
+         (message "Uncheck \"%s\"" (car elist))
+       (setq spec-list
+             (elmo-folder-get-primitive-spec-list (elmo-string (car elist))))
+       (cond ((assq 'nntp spec-list)
+              (wl-append net-elist (list (car elist)))
+              (while spec-list
+                (when (eq (caar spec-list) 'nntp)
+                  (when (not (string= server (nth 2 (car spec-list))))
+                    (setq server (nth 2 (car spec-list)))
+                    (message "Checking on \"%s\"" server))
+                  (setq nntp-connection-keys
+                        (elmo-nntp-get-folders-info-prepare
+                         (car spec-list)
+                         nntp-connection-keys)))
+                (setq spec-list (cdr spec-list))))
+             (t
+              (wl-append local-elist (list (car elist))))))
+      (setq elist (cdr elist)))
+    ;; check local entity at first
+    (while (setq folder (pop local-elist))
+      (if (not (elmo-folder-plugged-p folder))
+         (message "Uncheck \"%s\"" folder)
+       (message "Checking \"%s\"" folder)
+       (setq ret-val
+             (wl-folder-add-folder-info
+              ret-val
+              (wl-folder-check-one-entity folder)))
+       ;;(sit-for 0)
+       ))
+    ;; check network entity at last
+    (when net-elist
+      (elmo-nntp-get-folders-info nntp-connection-keys)
+      (while (setq folder (pop net-elist))
+       (if (not (elmo-folder-plugged-p folder))
+           (message "Uncheck \"%s\"" folder)
+         (message "Checking \"%s\"" folder)
+         (setq ret-val
+               (wl-folder-add-folder-info
+                ret-val
+                (wl-folder-check-one-entity folder)))
+         ;;(sit-for 0)
+         )))
+    ret-val))
+
+;;
+(defun wl-folder-resume-entity-hashtb-by-finfo (entity-hashtb info-alist)
+  "Resume unread info for entity alist."
+  (let (info)
+    (while info-alist
+      (setq info (nth 1 (car info-alist)))
+      (wl-folder-set-entity-info (caar info-alist)
+                                (list (nth 2 info)(nth 3 info)(nth 1 info))
+                                entity-hashtb)
+      (setq info-alist (cdr info-alist)))))
+
+(defun wl-folder-move-path (path)
+  (let ((fp (if (consp path)
+               path
+             ;; path is entity-id
+             (wl-folder-get-path wl-folder-entity path))))
+    (goto-char (point-min))
+    (while (and fp
+               (not (eobp)))
+      (when (equal (car fp)
+                  (wl-folder-get-entity-from-buffer t))
+       (setq fp (cdr fp))
+       (setq wl-folder-buffer-cur-point (point)))
+      (forward-line 1))
+    (and wl-folder-buffer-cur-point
+        (goto-char wl-folder-buffer-cur-point))))
+
+(defun wl-folder-set-current-entity-id (entity-id)
+  (let ((buf (get-buffer wl-folder-buffer-name)))
+    (if buf
+       (save-excursion 
+         (set-buffer buf)
+         (setq wl-folder-buffer-cur-entity-id entity-id)
+         (setq wl-folder-buffer-cur-path (wl-folder-get-path wl-folder-entity
+                                                             entity-id))
+         (wl-highlight-folder-path wl-folder-buffer-cur-path)
+         (and wl-folder-move-cur-folder
+              wl-folder-buffer-cur-point
+              (goto-char wl-folder-buffer-cur-point))))
+    (if (eq (current-buffer) buf)
+       (and wl-folder-move-cur-folder
+            wl-folder-buffer-cur-point
+            (goto-char wl-folder-buffer-cur-point)))))
+
+(defun wl-folder-check-current-entity ()
+  "Check folder at position. 
+If current line is group folder, check all sub entries."
+  (interactive)
+  (let* ((entity-name (wl-folder-get-entity-from-buffer))
+        (group (wl-folder-buffer-group-p))
+        (desktop (string= entity-name wl-folder-desktop-name)))
+    (when entity-name
+      (wl-folder-check-entity
+       (if group
+          (wl-folder-search-group-entity-by-name entity-name
+                                                 wl-folder-entity)
+        entity-name)
+       desktop))))
+
+(defun wl-folder-sync-entity (entity &optional unread-only)
+  "Synchronize the msgdb of ENTITY."
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity)))
+      (while flist
+       (wl-folder-sync-entity (car flist) unread-only)
+       (setq flist (cdr flist)))))
+   ((stringp entity)
+    (let ((nums (wl-folder-get-entity-info entity))
+         (wl-summary-highlight (if (or (wl-summary-sticky-p entity)
+                                       (wl-summary-always-sticky-folder-p
+                                        entity))
+                                   wl-summary-highlight))
+         wl-auto-select-first new unread)
+      (setq new (or (car nums) 0))
+      (setq unread (or (cadr nums) 0))
+      (if (or (not unread-only)
+             (or (< 0 new) (< 0 unread)))
+         (save-window-excursion
+           (save-excursion
+             (wl-summary-goto-folder-subr entity 
+                                          (wl-summary-get-sync-range entity)
+                                          nil nil nil t)
+             (wl-summary-exit))))))))
+
+(defun wl-folder-sync-current-entity (&optional unread-only)
+  "Synchronize the folder at position. 
+If current line is group folder, check all subfolders."
+  (interactive "P")
+  (save-excursion
+    (let ((entity-name (wl-folder-get-entity-from-buffer))
+         (group (wl-folder-buffer-group-p)))
+      (when (and entity-name
+                (y-or-n-p (format "Sync %s?" entity-name)))
+       (wl-folder-sync-entity
+        (if group
+            (wl-folder-search-group-entity-by-name entity-name
+                                                   wl-folder-entity)
+          entity-name)
+        unread-only)
+       (message "Syncing %s is done!" entity-name)))))
+
+(defun wl-folder-mark-as-read-all-entity (entity)
+  "Mark as read all messages in the ENTITY"
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity)))
+      (while flist
+       (wl-folder-mark-as-read-all-entity (car flist))
+       (setq flist (cdr flist)))))
+   ((stringp entity)
+    (let ((nums (wl-folder-get-entity-info entity))
+         (wl-summary-highlight (if (or (wl-summary-sticky-p entity)
+                                       (wl-summary-always-sticky-folder-p
+                                        entity))
+                                   wl-summary-highlight))
+         wl-auto-select-first new unread)
+      (setq new (or (car nums) 0))
+      (setq unread (or (cadr nums) 0))
+      (if (or (< 0 new) (< 0 unread))
+       (save-window-excursion
+         (save-excursion
+           (wl-summary-goto-folder-subr entity 
+                                        (wl-summary-get-sync-range entity)
+                                        nil)
+           (wl-summary-mark-as-read-all)
+           (wl-summary-exit)))
+       (sit-for 0))))))
+
+(defun wl-folder-mark-as-read-all-current-entity ()
+  "Mark as read all messages in the folder at position. 
+If current line is group folder, all subfolders are marked."
+  (interactive)
+  (save-excursion
+    (let ((entity-name (wl-folder-get-entity-from-buffer))
+         (group (wl-folder-buffer-group-p))
+         summary-buf)
+      (when (and entity-name
+                (y-or-n-p (format "Mark all messages in %s as read?" entity-name)))
+       (wl-folder-mark-as-read-all-entity
+        (if group
+            (wl-folder-search-group-entity-by-name entity-name
+                                                   wl-folder-entity)
+          entity-name))
+       (message "All messages in %s are marked!" entity-name)))))
+
+(defun wl-folder-check-region (beg end)
+  (interactive "r")
+  (goto-char beg)
+  (beginning-of-line)
+  (setq beg (point))
+  (goto-char end)
+  (beginning-of-line)
+  (setq end (point))
+  (goto-char beg)
+  (let ((inhibit-read-only t)
+       entity)
+    (while (< (point) end)
+      ;; normal folder entity
+      (if (looking-at "^[\t ]*\\([^\\[]+\\):\\(.*\\)\n") 
+         (save-excursion
+           (setq entity (wl-folder-get-entity-from-buffer))
+           (if (not (elmo-folder-plugged-p entity))
+               (message "Uncheck %s" entity)
+             (message "Checking %s" entity)
+             (wl-folder-check-one-entity entity)
+             (sit-for 0))))
+      (forward-line 1)))
+  (message ""))
+
+(defun wl-folder-sync-region (beg end)
+  (interactive "r")
+  (goto-char beg)
+  (beginning-of-line)
+  (setq beg (point))
+  (goto-char end)
+  (end-of-line)
+  (setq end (point))
+  (goto-char beg)
+  (while (< (point) end)
+    ;; normal folder entity
+    (if (looking-at "^[\t ]*\\([^\\[]+\\):\\(.*\\)\n") 
+       (save-excursion
+         (let ((inhibit-read-only t)
+               entity)
+           (setq entity (wl-folder-get-entity-from-buffer))
+           (wl-folder-sync-entity entity)
+           (message "Syncing %s is done!" entity)
+           (sit-for 0))))
+    (forward-line 1))
+  (message ""))
+
+(defun wl-folder-mark-as-read-all-region (beg end)
+  (interactive "r")
+  (goto-char beg)
+  (beginning-of-line)
+  (setq beg (point))
+  (goto-char end)
+  (end-of-line)
+  (setq end (point))
+  (goto-char beg)
+  (while (< (point) end)
+    ;; normal folder entity
+    (if (looking-at "^[\t ]*\\([^\\[]+\\):\\(.*\\)\n") 
+       (save-excursion
+         (let ((inhibit-read-only t)
+               entity)
+           (setq entity (wl-folder-get-entity-from-buffer))
+           (wl-folder-mark-as-read-all-entity entity)
+           (message "All messages in %s are marked!" entity)
+           (sit-for 0))))
+    (forward-line 1))
+  (message ""))
+
+(defsubst wl-create-access-init-load-p (folder)
+  (let ((no-load-regexp (when (and
+                              (not wl-folder-init-load-access-folders)
+                              wl-folder-init-no-load-access-folders)
+                         (mapconcat 'identity
+                                    wl-folder-init-no-load-access-folders
+                                    "\\|")))
+       (load-regexp (and wl-folder-init-load-access-folders
+                         (mapconcat 'identity
+                                    wl-folder-init-load-access-folders
+                                    "\\|"))))
+    (cond (load-regexp (string-match load-regexp folder))
+         (t (not (and no-load-regexp
+                      (string-match no-load-regexp folder)))))))
+
+(defun wl-create-access-folder-entity (name)
+  (let (flists flist)
+    (when (wl-create-access-init-load-p name)
+      (setq flists (elmo-msgdb-flist-load name)) ; load flist.
+      (setq flist (car flists))
+      (while flist
+       (when (consp (car flist))
+         (setcdr (cdar flist)
+                 (wl-create-access-folder-entity (caar flist))))
+       (setq flist (cdr flist)))
+      flists)))
+
+(defun wl-create-folder-entity-from-buffer ()
+  "Create folder entity recursively."
+  (cond
+   ((looking-at "^[ \t]*$")            ; blank line
+    (goto-char (+ 1(match-end 0)))
+    'ignore)
+   ((looking-at "^#.*$")               ; comment
+    (goto-char (+ 1 (match-end 0)))
+    'ignore)
+   ((looking-at "^[\t ]*\\(.+\\)[\t ]*{[\t ]*$") ; group definition
+    (let (name entity flist)
+      (setq name (wl-match-buffer 1))
+      (goto-char (+ 1 (match-end 0)))
+      (while (setq entity (wl-create-folder-entity-from-buffer))
+       (unless (eq entity 'ignore)
+         (wl-append flist (list entity))))
+      (if (looking-at "^[\t ]*}[\t ]*$") ; end of group 
+         (progn
+           (goto-char (+ 1 (match-end 0)))
+           (if (wl-string-assoc name wl-folder-petname-alist)
+               (error "%s already defined as petname" name))
+           (list name 'group flist))
+       (error "Syntax error in folder definition"))))
+   ((looking-at "^[\t ]*\\([^\t \n]+\\)[\t ]*/$") ; access it!
+    (let (name)
+      (setq name (wl-match-buffer 1))
+      (goto-char (+ 1 (match-end 0)))
+;      (condition-case ()
+;        (unwind-protect
+;            (setq flist (elmo-list-folders name)))
+;      (error (message "Access to folder %s failed." name)))
+;;       (setq flist (elmo-msgdb-flist-load name)) ; load flist.
+;;       (setq unsublist (nth 1 flist))
+;;       (setq flist (car flist))
+;;       (list name 'access flist unsublist)))
+      (append (list name 'access) (wl-create-access-folder-entity name))))
+   ;((looking-at "^[\t ]*\\([^\t \n}]+\\)[\t ]*\\(\"[^\"]*\"\\)?[\t ]*$") ; normal folder entity   
+   ((looking-at "^[\t ]*=[ \t]+\\([^\n]+\\)$"); petname definition
+    (goto-char (+ 1 (match-end 0)))
+    (let ((rest (elmo-match-buffer 1))
+         petname)
+      (when (string-match "\\(\"[^\"]*\"\\)[\t ]*$" rest)
+       (setq petname (elmo-delete-char ?\" (elmo-match-string 1 rest)))
+       (setq rest (substring rest 0 (match-beginning 0))))
+      (when (string-match "^[\t ]*\\(.*[^\t ]+\\)[\t ]+$" rest)
+       (wl-folder-append-petname (elmo-match-string 1 rest)
+                                 petname))
+      'ignore))
+   ((looking-at "^[ \t]*}[ \t]*$") ; end of group
+    nil)
+   ((looking-at "^.*$") ; normal folder entity
+    (goto-char (+ 1 (match-end 0)))
+    (let ((rest (elmo-match-buffer 0))
+         realname petname)
+      (if (string-match "\\(\"[^\"]*\"\\)[\t ]*$" rest)
+         (progn
+           (setq petname (elmo-delete-char ?\" (elmo-match-string 1 rest)))
+           (setq rest (substring rest 0 (match-beginning 0)))
+           (when (string-match "^[\t ]*\\(.*[^\t ]+\\)[\t ]+$" rest)
+             (wl-folder-append-petname
+              (setq realname (elmo-match-string 1 rest))
+              petname)
+             realname))
+       (if (string-match "^[\t ]*\\(.+\\)$" rest)
+           (elmo-match-string 1 rest)
+         rest))))))
+
+(defun wl-folder-create-folder-entity ()
+  "Create folder entries."
+  (let ((tmp-buf (get-buffer-create " *wl-folder-tmp*"))
+       entity ret-val)
+    (condition-case ()
+       (progn
+         (set-buffer tmp-buf)
+         (erase-buffer)
+         (insert-file-contents wl-folders-file)
+         (goto-char (point-min))
+         (while (and (not (eobp))
+                     (setq entity (wl-create-folder-entity-from-buffer)))
+           (unless (eq entity 'ignore)
+             (wl-append ret-val (list entity))))
+         (kill-buffer tmp-buf))
+      (file-error nil))
+    (setq ret-val (list wl-folder-desktop-name 'group ret-val))))
+
+(defun wl-folder-entity-assign-id (entity &optional hashtb on-noid)
+  (let* ((hashtb (or hashtb 
+                    (setq wl-folder-entity-id-name-hashtb
+                          (elmo-make-hash wl-folder-entity-id))))
+        (entities (list entity))
+        entity-stack)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (when (not (and on-noid
+                       (get-text-property 0
+                                          'wl-folder-entity-id
+                                          (car entity))))
+         (put-text-property 0 (length (car entity))
+                            'wl-folder-entity-id 
+                            wl-folder-entity-id
+                            (car entity))
+         (wl-folder-set-id-name wl-folder-entity-id
+                                (car entity) hashtb))
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (when (not (and on-noid
+                       (get-text-property 0
+                                          'wl-folder-entity-id
+                                          entity)))
+         (put-text-property 0 (length entity) 
+                            'wl-folder-entity-id 
+                            wl-folder-entity-id
+                            entity)
+         (wl-folder-set-id-name wl-folder-entity-id
+                                entity hashtb))))
+      (setq wl-folder-entity-id (+ 1 wl-folder-entity-id))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))))
+
+(defun wl-folder-click (e)
+  (interactive "e")
+  (mouse-set-point e)
+  (beginning-of-line)
+  (save-excursion
+    (wl-folder-jump-to-current-entity)))
+
+(defun wl-folder-select-buffer (buffer)
+  (let ((gbw (get-buffer-window buffer))
+       ret-val)
+    (if gbw
+       (progn (select-window gbw)
+              (setq ret-val t))
+      (condition-case ()
+         (unwind-protect
+             (split-window-horizontally wl-folder-window-width)
+           (other-window 1))
+       (error nil)))
+    (set-buffer buffer)
+    (switch-to-buffer buffer)
+    ret-val
+    ))
+
+(defun wl-folder-toggle-disp-summary (&optional arg folder)
+  (interactive)
+  (if (or (and folder (assoc folder wl-folder-group-alist))
+         (and (interactive-p) (wl-folder-buffer-group-p)))
+      (error "This command is not available on Group"))
+  (beginning-of-line)
+  (let (wl-auto-select-first)
+    (cond
+     ((eq arg 'on)
+      (setq wl-folder-buffer-disp-summary t))
+     ((eq arg 'off)
+      (setq wl-folder-buffer-disp-summary nil)
+      ;; hide wl-summary window.
+      (let ((cur-buf (current-buffer))
+           (summary-buffer (wl-summary-get-buffer folder)))
+       (wl-folder-select-buffer summary-buffer)
+       (delete-window)
+       (select-window (get-buffer-window cur-buf))))
+     (t
+      (setq wl-folder-buffer-disp-summary 
+           (not wl-folder-buffer-disp-summary))
+      (let ((cur-buf (current-buffer))
+           folder-name)
+       (when (looking-at "^[ ]*\\([^\\[].+\\):.*\n")
+         (setq folder-name (wl-folder-get-entity-from-buffer))
+         (if wl-folder-buffer-disp-summary
+             (progn
+               (wl-folder-select-buffer 
+                (wl-summary-get-buffer-create folder-name))
+               (unwind-protect
+                   (wl-summary-goto-folder-subr folder-name 'no-sync nil)
+                 (select-window (get-buffer-window cur-buf))))
+           (wl-folder-select-buffer (wl-summary-get-buffer folder-name))
+           (delete-window)
+           (select-window (get-buffer-window cur-buf)))))))))
+
+(defun wl-folder-prev-unsync ()
+  "move cursor to the previous unsync folder."
+  (interactive)
+  (let (start-point)
+    (setq start-point (point))
+    (beginning-of-line)
+    (if (re-search-backward wl-folder-unsync-regexp nil t)
+       (beginning-of-line)
+      (goto-char start-point)
+      (message "No more unsync folder"))))
+
+(defun wl-folder-next-unsync (&optional plugged)
+  "move cursor to the next unsync."
+  (interactive)
+  (let (start-point entity)
+    (setq start-point (point))
+    (end-of-line)
+    (if (catch 'found
+         (while (re-search-forward wl-folder-unsync-regexp nil t)
+           (if (or (wl-folder-buffer-group-p)
+                   (not plugged)
+                   (setq entity
+                         (wl-folder-get-realname
+                          (wl-folder-folder-name)))
+                   (elmo-folder-plugged-p entity))
+               (throw 'found t))))
+       (beginning-of-line)
+      (goto-char start-point)
+      (message "No more unsync folder"))))
+
+(defun wl-folder-prev-unread (&optional group)
+  "move cursor to the previous unread folder."
+  (interactive "P")
+  (let (start-point)
+    (setq start-point (point))
+    (beginning-of-line)
+    (if (re-search-backward (wl-folder-unread-regex group) nil t)
+       (progn
+         (beginning-of-line)
+         (wl-folder-folder-name))
+      (goto-char start-point)
+      (message "No more unread folder")
+      nil)))
+
+(defun wl-folder-next-unread (&optional group)
+  "move cursor to the next unread folder."
+  (interactive "P")
+  (let (start-point)
+    (setq start-point (point))
+    (end-of-line)
+    (if (re-search-forward (wl-folder-unread-regex group) nil t)
+       (progn
+         (beginning-of-line)
+         (wl-folder-folder-name))
+      (goto-char start-point)
+      (message "No more unread folder")
+      nil)))
+
+(defun wl-folder-mode ()
+  "Major mode for Wanderlust Folder.
+See info under Wanderlust for full documentation.
+
+Special commands:
+\\{wl-folder-mode-map}
+
+Entering Folder mode calls the value of `wl-folder-mode-hook'."
+  (interactive)
+  (setq major-mode 'wl-folder-mode)
+  (setq mode-name "Folder")
+  (use-local-map wl-folder-mode-map)
+  (setq buffer-read-only t)
+  (setq inhibit-read-only nil)
+  (setq truncate-lines t)
+  (when wl-show-plug-status-on-modeline 
+    (setq mode-line-format (wl-make-modeline)))
+  (easy-menu-add wl-folder-mode-menu)
+  (wl-xmas-setup-folder)
+  (run-hooks 'wl-folder-mode-hook))
+
+(defun wl-folder-append-petname (realname petname)
+  (let (pentry)
+    ;; check group name.
+    (if (wl-folder-search-group-entity-by-name petname wl-folder-entity)
+       (error "%s already defined as group name" petname))
+    (when (setq pentry (wl-string-assoc realname wl-folder-petname-alist))
+      (setq wl-folder-petname-alist
+           (delete pentry wl-folder-petname-alist)))
+    (wl-append wl-folder-petname-alist
+              (list (cons realname petname)))))
+
+(defun wl-folder (&optional arg)
+  (interactive "P")
+  (let (initialize)
+;  (delete-other-windows)
+  (if (get-buffer wl-folder-buffer-name)
+      (switch-to-buffer  wl-folder-buffer-name)
+    (switch-to-buffer (get-buffer-create wl-folder-buffer-name))
+    (setq mode-line-buffer-identification '("Wanderlust: %12b"))
+    (wl-folder-mode)
+    (wl-folder-init)
+    (wl-folder-init-icons)
+    (set-buffer wl-folder-buffer-name)
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil))
+      (erase-buffer)
+      (setcdr (assoc (car wl-folder-entity) wl-folder-group-alist) t)
+      (save-excursion
+       (wl-folder-insert-entity " " wl-folder-entity)))
+    (set-buffer-modified-p nil)
+    (sit-for 0)
+    (setq initialize t))
+  (if (not arg)
+      (progn
+       (run-hooks 'wl-auto-check-folder-pre-hook)
+       (cond
+        ((eq wl-auto-check-folder-name 'none))
+        ((or (consp wl-auto-check-folder-name)
+             (stringp wl-auto-check-folder-name))
+         (let ((folder-list (if (consp wl-auto-check-folder-name)
+                                wl-auto-check-folder-name
+                              (list wl-auto-check-folder-name)))
+               entity)
+           (while folder-list
+             (if (setq entity (wl-folder-search-entity-by-name
+                               (car folder-list)
+                               wl-folder-entity))
+                 (wl-folder-check-entity entity 'auto))
+             (setq folder-list (cdr folder-list)))))
+        (t
+         (wl-folder-check-entity wl-folder-entity 'auto)))
+       (run-hooks 'wl-auto-check-folder-hook)))
+  initialize))
+
+(defun wl-folder-set-folder-updated (name value)
+  (save-excursion
+    (let (buf)
+      (if (setq buf (get-buffer wl-folder-buffer-name))
+         (wl-folder-entity-hashtb-set 
+          wl-folder-entity-hashtb name value buf))
+;;       (elmo-folder-set-info-hashtb (elmo-string name)
+;;                               nil
+;;                               (nth 2 value)
+;;                               (nth 0 value)
+;;                               (nth 1 value))
+      (setq wl-folder-info-alist-modified t))))
+
+(defun wl-folder-calc-finfo (entity)
+  ;; calcurate finfo without inserting.
+  (let ((entities (list entity))
+       entity-stack
+       new unread all nums)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (setq nums (wl-folder-get-entity-info entity))
+       (setq new    (+ (or new 0) (or (nth 0 nums) 0)))
+       (setq unread (+ (or unread 0)
+                       (or (and (nth 0 nums)(nth 1 nums)
+                                (+ (nth 0 nums)(nth 1 nums))) 0)))
+       (setq all    (+ (or all 0) (or (nth 2 nums) 0)))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    (list new unread all)))
+
+(defsubst wl-folder-make-save-access-list (list)
+  (mapcar '(lambda (x)
+            (cond
+             ((consp x)
+              (list (elmo-string (car x)) 'access))
+             (t
+              (elmo-string x))))
+         list))
+
+(defun wl-folder-update-newest (indent entity)
+  (let (ret-val new unread all)
+    (cond 
+     ((consp entity)
+      (let ((inhibit-read-only t)
+           (buffer-read-only nil)
+           (flist (nth 2 entity))
+           (as-opened (cdr (assoc (car entity) wl-folder-group-alist)))
+           beg
+           )
+       (setq beg (point))
+       (if as-opened
+           (let (update-flist flist-unsub new-flist removed group-name-end)
+             (when (and (eq (cadr entity) 'access)
+                        (elmo-folder-plugged-p (car entity)))
+               (message "Fetching folder entries...")
+               (when (setq new-flist
+                           (elmo-list-folders
+                            (elmo-string (car entity))
+                            (wl-string-member
+                             (car entity)
+                             wl-folder-hierarchy-access-folders)))
+                 (setq update-flist
+                       (wl-folder-update-access-group entity new-flist))
+                 (setq flist (nth 1 update-flist))
+                 (when (car update-flist) ;; diff
+                   (setq flist-unsub (nth 2 update-flist))
+                   (setq removed (nth 3 update-flist))
+                   (elmo-msgdb-flist-save
+                    (car entity) 
+                    (list
+                     (wl-folder-make-save-access-list flist)
+                     (wl-folder-make-save-access-list flist-unsub)))
+                   (wl-folder-entity-assign-id
+                    entity
+                    wl-folder-entity-id-name-hashtb
+                    t)
+                   (setq wl-folder-entity-hashtb
+                         (wl-folder-create-entity-hashtb
+                          entity
+                          wl-folder-entity-hashtb
+                          t))
+                   (setq wl-folder-newsgroups-hashtb
+                         (or
+                          (wl-folder-create-newsgroups-hashtb
+                           entity nil)
+                          wl-folder-newsgroups-hashtb))))
+               (message "Fetching folder entries...done."))
+             (wl-folder-insert-entity indent entity))))))))
+
+(defun wl-folder-insert-entity (indent entity &optional onlygroup)
+  (let (ret-val new unread all)
+    (cond 
+     ((consp entity)
+      (let ((inhibit-read-only t)
+           (buffer-read-only nil)
+           (flist (nth 2 entity))
+           (as-opened (cdr (assoc (car entity) wl-folder-group-alist)))
+           beg
+           )
+;      (insert indent "[" (if as-opened "-" "+") "]" (car entity) "\n")
+;      (save-excursion (forward-line -1)
+;                    (wl-highlight-folder-current-line))
+       (setq beg (point))
+       (if (and as-opened
+                (not onlygroup))
+           (let (update-flist flist-unsub new-flist removed group-name-end)
+;            (when (and (eq (cadr entity) 'access)
+;                       newest)
+;              (message "fetching folder entries...")
+;              (when (setq new-flist
+;                          (elmo-list-folders
+;                           (elmo-string (car entity))
+;                           (wl-string-member
+;                            (car entity)
+;                            wl-folder-hierarchy-access-folders)
+;                           ))
+;                (setq update-flist
+;                      (wl-folder-update-access-group entity new-flist))
+;                (setq flist (nth 1 update-flist))
+;                (when (car update-flist) ;; diff
+;                  (setq flist-unsub (nth 2 update-flist))
+;                  (setq removed (nth 3 update-flist))
+;                  (elmo-msgdb-flist-save
+;                   (car entity) 
+;                   (list
+;                    (wl-folder-make-save-access-list flist)
+;                    (wl-folder-make-save-access-list flist-unsub)))
+;                  ;;
+;                  ;; reconstruct wl-folder-entity-id-name-hashtb and
+;                  ;;           wl-folder-entity-hashtb
+;                  ;;
+;                  (wl-folder-entity-assign-id
+;                   entity
+;                   wl-folder-entity-id-name-hashtb
+;                   t)
+;                  (setq wl-folder-entity-hashtb
+;                        (wl-folder-create-entity-hashtb
+;                         entity
+;                         wl-folder-entity-hashtb
+;                         t))
+;                  (setq wl-folder-newsgroups-hashtb
+;                        (or
+;                         (wl-folder-create-newsgroups-hashtb
+;                          entity nil)
+;                         wl-folder-newsgroups-hashtb))))
+;              (message "fetching folder entries...done."))
+             (insert indent "[" (if as-opened "-" "+") "]" 
+                     (wl-folder-get-petname (car entity)))
+             (setq group-name-end (point))
+             (insert ":0/0/0\n")
+             (put-text-property beg (point) 'wl-folder-entity-id
+                                (get-text-property 0 'wl-folder-entity-id 
+                                                   (car entity)))
+             (when removed
+               (setq beg (point))
+               (while removed
+                 (insert indent "  " 
+                         wl-folder-removed-mark
+                         (if (listp (car removed))
+                             (concat "[+]" (caar removed))
+                           (car removed))
+                         "\n")
+                 (save-excursion (forward-line -1)
+                                 (wl-highlight-folder-current-line))
+                 (setq removed (cdr removed)))
+               (remove-text-properties beg (point) '(wl-folder-entity-id)))
+             (let* ((len (length flist))
+                    (mes (> len 100))
+                    (i 0))
+               (while flist
+                 (setq ret-val
+                       (wl-folder-insert-entity 
+                        (concat indent "  ") (car flist)))
+                 (setq new    (+ (or new 0) (or (nth 0 ret-val) 0)))
+                 (setq unread (+ (or unread 0) (or (nth 1 ret-val) 0)))
+                 (setq all    (+ (or all 0) (or (nth 2 ret-val) 0)))
+                 (when mes
+                   (setq i (1+ i))
+                   (and (zerop (% i 10))
+                        (elmo-display-progress
+                         'wl-folder-insert-entity "Inserting group %s..."
+                         (/ (* i 100) len) (car entity))))
+                 (setq flist (cdr flist)))
+               (when mes (message "")))
+             (save-excursion
+               (goto-char group-name-end)
+               (delete-region (point) (save-excursion (end-of-line)
+                                                      (point)))
+               (insert (format ":%d/%d/%d" (or new 0)
+                               (or unread 0) (or all 0)))
+               (setq ret-val (list new unread all))
+               (wl-highlight-folder-current-line ret-val)))
+         (setq ret-val (wl-folder-calc-finfo entity))
+         (insert indent "[" (if as-opened "-" "+") "]" 
+                 (wl-folder-get-petname (car entity)) 
+                 (format ":%d/%d/%d" 
+                         (or (nth 0 ret-val) 0)
+                         (or (nth 1 ret-val) 0)
+                         (or (nth 2 ret-val) 0))
+                 "\n")
+         (put-text-property beg (point) 'wl-folder-entity-id
+                            (get-text-property 0 'wl-folder-entity-id 
+                                               (car entity)))
+         (save-excursion (forward-line -1)
+                         (wl-highlight-folder-current-line ret-val)))))
+     ((stringp entity)
+      (let* ((inhibit-read-only t)
+            (buffer-read-only nil)
+            (nums (wl-folder-get-entity-info entity))
+            beg)
+       (setq beg (point))
+       (insert indent (wl-folder-get-petname entity)
+               (format ":%s/%s/%s\n" 
+                       (or (setq new (nth 0 nums)) "*")
+                       (or (setq unread (and (nth 0 nums)(nth 1 nums)
+                                             (+ (nth 0 nums)(nth 1 nums))))
+                           "*")
+                       (or (setq all (nth 2 nums)) "*")))
+       (put-text-property beg (point) 'wl-folder-entity-id
+                          (get-text-property 0 'wl-folder-entity-id entity))
+       (save-excursion (forward-line -1)
+                       (wl-highlight-folder-current-line nums))
+       (setq ret-val (list new unread all)))))
+    (set-buffer-modified-p nil)
+    ret-val))
+
+(defun wl-folder-check-all ()
+  (interactive)
+  (wl-folder-check-entity wl-folder-entity))
+
+(defun wl-folder-entity-hashtb-set (entity-hashtb name value buffer)
+  (let (cur-val 
+       (new-diff 0)
+       (unread-diff 0)
+       (all-diff 0)
+       diffs
+       entity-list)
+    (setq cur-val (wl-folder-get-entity-info name entity-hashtb))
+    (setq new-diff    (- (or (nth 0 value) 0) (or (nth 0 cur-val) 0)))
+    (setq unread-diff 
+         (+ new-diff
+            (- (or (nth 1 value) 0) (or (nth 1 cur-val) 0))))
+    (setq all-diff    (- (or (nth 2 value) 0) (or (nth 2 cur-val) 0)))
+    (setq diffs (list new-diff unread-diff all-diff))
+    (unless (and (nth 0 cur-val)
+                (equal diffs '(0 0 0)))
+      (wl-folder-set-entity-info name value entity-hashtb)
+      (save-match-data
+       (save-excursion
+         (set-buffer buffer)
+         (setq entity-list (wl-folder-search-entity-list-by-name
+                            name wl-folder-entity))
+         (while entity-list
+           (wl-folder-update-group (car entity-list) diffs)
+           (setq entity-list (cdr entity-list)))
+         (goto-char (point-min))
+         (while (wl-folder-buffer-search-entity name)
+           (wl-folder-update-line value)))))))
+
+(defun wl-folder-update-unread (folder unread)
+  (save-window-excursion
+    (let ((buf (get-buffer wl-folder-buffer-name))
+         cur-unread
+         (unread-diff 0)
+         ;;(fld (elmo-string folder))
+         value newvalue entity-list)
+      ;; Update folder-info
+      ;;(elmo-folder-set-info-hashtb fld nil nil nil unread)
+      (setq cur-unread (or (nth 1 (wl-folder-get-entity-info folder)) 0))
+      (setq unread-diff (- (or unread 0) cur-unread))
+      (setq value (wl-folder-get-entity-info folder))
+
+      (setq newvalue (list (nth 0 value)
+                          unread
+                          (nth 2 value)))
+      (wl-folder-set-entity-info folder newvalue)
+      (setq wl-folder-info-alist-modified t)
+      (when (and buf
+                (not (eq unread-diff 0)))
+       (save-match-data
+         (save-excursion
+           (set-buffer buf)
+           (save-excursion
+             (setq entity-list (wl-folder-search-entity-list-by-name
+                                folder wl-folder-entity))
+             (while entity-list
+               (wl-folder-update-group (car entity-list) (list 0
+                                                               unread-diff
+                                                               0))
+               (setq entity-list (cdr entity-list)))
+             (goto-char (point-min))
+             (while (wl-folder-buffer-search-entity folder)
+               (wl-folder-update-line newvalue)))))))))
+
+(defun wl-folder-create-entity-hashtb (entity &optional hashtb reconst)
+  (let* ((hashtb (or hashtb (elmo-make-hash wl-folder-entity-id)))
+        (entities (list entity))
+        entity-stack)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (when (not (and reconst
+                       (wl-folder-get-entity-info entity)))
+         (wl-folder-set-entity-info entity
+                                    nil
+                                    hashtb))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    hashtb))
+
+;; Unsync number is reserved.
+;; (defun wl-folder-reconstruct-entity-hashtb (entity &optional hashtb id-name)
+;;   (let* ((hashtb (or hashtb (elmo-make-hash wl-folder-entity-id)))
+;;      (entities (list entity))
+;;      entity-stack)
+;;     (while entities
+;;       (setq entity (wl-pop entities))
+;;       (cond
+;;        ((consp entity)
+;;     (if id-name
+;;         (wl-folder-set-id-name (wl-folder-get-entity-id (car entity))
+;;                                (car entity)))
+;;     (and entities
+;;          (wl-push entities entity-stack))
+;;     (setq entities (nth 2 entity))
+;;     )
+;;        ((stringp entity)
+;;     (wl-folder-set-entity-info entity
+;;                          (wl-folder-get-entity-info entity)
+;;                          hashtb)
+;;     (if id-name
+;;         (wl-folder-set-id-name (wl-folder-get-entity-id entity)
+;;                                entity))))
+;;       (unless entities
+;;     (setq entities (wl-pop entity-stack))))
+;;     hashtb))
+
+(defun wl-folder-create-newsgroups-from-nntp-access2 (entity)
+  (let ((flist (nth 2 entity))
+       folders)
+    (and
+     (setq folders
+          (delq
+           nil
+           (mapcar
+            '(lambda (fld)
+               (if (consp fld)
+                   (wl-folder-create-newsgroups-from-nntp-access2 fld)
+                 (nth 1 (elmo-folder-get-spec fld))))
+            flist)))
+     (elmo-nntp-make-groups-hashtb folders 1024))
+    nil))
+
+(defun wl-folder-create-newsgroups-from-nntp-access (entity)
+  (let ((flist (nth 2 entity))
+       folders)
+    (while flist
+      (wl-append folders
+                (cond
+                 ((consp (car flist))
+                  (wl-folder-create-newsgroups-from-nntp-access (car flist)))
+                 (t
+                  (list (nth 1 (elmo-folder-get-spec (car flist)))))))
+      (setq flist (cdr flist)))
+    folders))
+
+(defun wl-folder-create-newsgroups-hashtb (entity &optional is-list info)
+  (let ((entities (if is-list entity (list entity)))
+       entity-stack spec-list folders fld make-hashtb)
+    (and info (message "Creating newsgroups..."))
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (if (eq (nth 1 entity) 'access)
+           (when (eq (elmo-folder-get-type (car entity)) 'nntp)
+             (wl-append folders 
+                        (wl-folder-create-newsgroups-from-nntp-access entity))
+             (setq make-hashtb t))
+         (and entities
+              (wl-push entities entity-stack))
+         (setq entities (nth 2 entity))))
+       ((stringp entity)
+       (setq spec-list (elmo-folder-get-primitive-spec-list entity))
+       (while spec-list
+         (when (and (eq (caar spec-list) 'nntp)
+                    (setq fld (nth 1 (car spec-list))))
+           (wl-append folders (list (elmo-string fld))))
+         (setq spec-list (cdr spec-list)))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    (and info (message "Creating newsgroups...done"))
+    (if (or folders make-hashtb)
+       (elmo-nntp-make-groups-hashtb folders))))
+
+(defun wl-folder-get-path (entity target-id &optional string)
+  (let* ((entities (list entity))
+        entity-stack result-path)
+    (reverse
+     (catch 'done
+       (while entities
+        (setq entity (wl-pop entities))
+        (cond
+         ((consp entity)
+          (if (and (or (not string) (string= string (car entity)))
+                   ;; don't use eq, `id' is string on Nemacs.
+                   (equal target-id (wl-folder-get-entity-id (car entity))))
+              (throw 'done
+                     (wl-push target-id result-path))
+            (wl-push (wl-folder-get-entity-id (car entity)) result-path))
+          (wl-push entities entity-stack)
+          (setq entities (nth 2 entity)))
+         ((stringp entity)
+          (if (and (or (not string) (string= string entity))
+                   ;; don't use eq, `id' is string on Nemacs.
+                   (equal target-id (wl-folder-get-entity-id entity)))
+              (throw 'done
+                     (wl-push target-id result-path)))))
+        (unless entities
+          (while (and entity-stack
+                      (not entities))
+            (setq result-path (cdr result-path))
+            (setq entities (wl-pop entity-stack)))))))))
+
+(defun wl-folder-create-group-alist (entity)
+  (if (consp entity)
+      (let ((flist (nth 2 entity)) cur-alist append-alist)
+       (setq cur-alist (list (cons (car entity) nil)))
+       (while flist
+         (if (consp (car flist))
+             (wl-append append-alist
+                        (wl-folder-create-group-alist (car flist))))
+         (setq flist (cdr flist)))
+       (append cur-alist append-alist))))
+
+(defun wl-folder-init-info-hashtb ()
+  (let ((info-alist (and wl-folder-info-save
+                        (elmo-msgdb-finfo-load))))
+    (elmo-folder-info-make-hashtb
+     info-alist
+     wl-folder-entity-hashtb)))
+;;     (wl-folder-resume-entity-hashtb-by-finfo
+;;      wl-folder-entity-hashtb
+;;      info-alist)))
+
+(defun wl-folder-cleanup-variables ()
+  (setq wl-folder-entity nil
+       wl-folder-entity-hashtb nil
+       wl-folder-entity-id-name-hashtb nil
+       wl-folder-group-alist nil
+       wl-folder-petname-alist nil
+       wl-folder-newsgroups-hashtb nil
+       wl-fldmgr-cut-entity-list nil
+       wl-fldmgr-modified nil
+       wl-fldmgr-modified-access-list nil
+       wl-score-cache nil
+       ))
+
+(defun wl-make-plugged-alist ()
+  (let ((entity-list (wl-folder-get-entity-list wl-folder-entity))
+       (add (not wl-reset-plugged-alist)))
+    (while entity-list
+      (elmo-folder-set-plugged
+       (elmo-string (car entity-list)) wl-plugged add)
+      (setq entity-list (cdr entity-list)))
+    ;; smtp posting server
+    (when wl-smtp-posting-server
+      (elmo-set-plugged wl-plugged
+                       wl-smtp-posting-server  ; server
+                       (or (and (boundp 'smtp-service) smtp-service)
+                           "smtp")     ; port
+                       nil nil "smtp" add))
+    ;; nntp posting server
+    (when wl-nntp-posting-server
+      (elmo-set-plugged wl-plugged
+                       wl-nntp-posting-server
+                       elmo-default-nntp-port
+                       nil nil "nntp" add))
+    (wl-plugged-init-icons)
+    ;; user setting
+    (run-hooks 'wl-make-plugged-hook)))
+
+(defvar wl-folder-init-func 'wl-local-folder-init)
+
+(defun wl-folder-init ()
+  (interactive)
+  (funcall wl-folder-init-func))
+
+(defun wl-local-folder-init ()
+  (message "Initializing folder...")
+  (save-excursion
+    (let* ((entity (wl-folder-create-folder-entity))
+          (inhibit-read-only t))
+      (setq wl-folder-entity entity)
+      (setq wl-folder-entity-id 0)
+      (wl-folder-entity-assign-id wl-folder-entity)
+      (setq wl-folder-entity-hashtb
+           (wl-folder-create-entity-hashtb entity))
+      (setq wl-folder-group-alist
+           (wl-folder-create-group-alist entity))
+      (setq wl-folder-newsgroups-hashtb
+           (wl-folder-create-newsgroups-hashtb wl-folder-entity))
+      (wl-folder-init-info-hashtb)
+      (setq wl-folder-buffer-cur-entity-id nil
+           wl-folder-buffer-cur-path nil
+           wl-folder-buffer-cur-point nil)))
+  (message "Initializing folder...done."))
+
+(defun wl-folder-get-realname (petname)
+  (or (car 
+       (wl-string-rassoc 
+       petname
+       wl-folder-petname-alist))
+      petname))
+
+(defun wl-folder-get-petname (folder)
+  (or (cdr 
+       (wl-string-assoc 
+       folder 
+       wl-folder-petname-alist))
+      folder))
+
+(defun wl-folder-get-entity-with-petname ()
+  (let ((alist wl-folder-petname-alist)
+       (hashtb (copy-sequence wl-folder-entity-hashtb)))
+    (while alist
+      (wl-folder-set-entity-info (cdar alist) nil hashtb)
+      (setq alist (cdr alist)))
+    hashtb))
+
+(defun wl-folder-update-diff-line (diffs)
+  (let ((inhibit-read-only t)
+       (buffer-read-only nil)
+       cur-new new-new
+       cur-unread new-unread
+       cur-all new-all
+       id)
+    (save-excursion
+      (beginning-of-line)
+      (setq id (get-text-property (point) 'wl-folder-entity-id))
+      (when (looking-at "^[ ]*\\(.*\\):\\([0-9\\*-]*\\)/\\([0-9\\*-]*\\)/\\([0-9\\*]*\\)")  
+       ;;(looking-at "^[ ]*\\([^\\[].+\\):\\([0-9\\*-]*/[0-9\\*-]*/[0-9\\*]*\\)")  
+       (setq cur-new (string-to-int 
+                      (wl-match-buffer 2)))
+       (setq cur-unread (string-to-int 
+                         (wl-match-buffer 3)))
+       (setq cur-all (string-to-int 
+                      (wl-match-buffer 4)))
+       (delete-region (match-beginning 2)
+                      (match-end 4))
+       (goto-char (match-beginning 2))
+       (insert (format "%s/%s/%s" 
+                       (setq new-new (+ cur-new (nth 0 diffs)))
+                       (setq new-unread (+ cur-unread (nth 1 diffs)))
+                       (setq new-all (+ cur-all (nth 2 diffs)))))
+       (put-text-property (match-beginning 2) (point)
+                          'wl-folder-entity-id id)
+       (if wl-use-highlight-mouse-line 
+           (put-text-property (match-beginning 2) (point)
+                              'mouse-face 'highlight))
+       (wl-highlight-folder-group-line (list new-new new-unread new-all))
+       (setq buffer-read-only t)
+       (set-buffer-modified-p nil)))))
+
+(defun wl-folder-update-line (nums &optional is-group)
+  (let ((inhibit-read-only t)
+       (buffer-read-only nil)
+       id)
+    (save-excursion
+      (beginning-of-line)
+      (setq id (get-text-property (point) 'wl-folder-entity-id))
+      (if (looking-at "^[ ]*\\(.*\\):\\([0-9\\*-]*/[0-9\\*-]*/[0-9\\*]*\\)")  
+         ;;(looking-at "^[ ]*\\([^\\[].+\\):\\([0-9\\*-]*/[0-9\\*-]*/[0-9\\*]*\\)")  
+         (progn
+           (delete-region (match-beginning 2)
+                          (match-end 2))
+           (goto-char (match-beginning 2))
+           (insert (format "%s/%s/%s" 
+                           (or (nth 0 nums) "*")
+                           (or (and (nth 0 nums)(nth 1 nums)
+                                    (+ (nth 0 nums)(nth 1 nums)))
+                               "*")
+                           (or (nth 2 nums) "*")))
+           (put-text-property (match-beginning 2) (point)
+                              'wl-folder-entity-id id)
+           (if is-group
+               ;; update only colors
+               (wl-highlight-folder-group-line nums)
+             (wl-highlight-folder-current-line nums))
+           (set-buffer-modified-p nil))))))
+
+(defun wl-folder-goto-folder (&optional arg)
+  (interactive "P")
+  (wl-folder-goto-folder-subr nil arg))
+
+(defun wl-folder-goto-folder-subr (&optional folder sticky)
+  (beginning-of-line)
+  (let (summary-buf fld-name entity id error-selecting)
+;;    (setq fld-name (wl-folder-get-entity-from-buffer))
+;;    (if (or (null fld-name)
+;;         (assoc fld-name wl-folder-group-alist))
+    (setq fld-name wl-default-folder)
+    (setq fld-name (or folder
+                      (wl-summary-read-folder fld-name)))
+    (if (and (setq entity
+                  (wl-folder-search-entity-by-name fld-name
+                                                   wl-folder-entity
+                                                   'folder))
+            (setq id (wl-folder-get-entity-id entity)))
+       (wl-folder-set-current-entity-id id))
+    (setq summary-buf (wl-summary-get-buffer-create fld-name sticky))
+    (if wl-stay-folder-window
+       (wl-folder-select-buffer summary-buf)
+      (if (and summary-buf
+              (get-buffer-window summary-buf))
+         (delete-window)))
+    (wl-summary-goto-folder-subr fld-name 
+                                (wl-summary-get-sync-range fld-name)
+                                nil sticky t)))
+
+(defun wl-folder-suspend ()
+  (interactive)
+  (run-hooks 'wl-folder-suspend-hook)
+  (wl-folder-info-save)
+  (wl-crosspost-alist-save)
+  (wl-kill-buffers
+   (format "^\\(%s\\)$"
+          (mapconcat 'identity
+                     (list (format "%s\\(:.*\\)?"
+                                   (default-value 'wl-message-buf-name))
+                           wl-original-buf-name)
+                     "\\|")))
+  (if (fboundp 'mmelmo-cleanup-entity-buffers)
+      (mmelmo-cleanup-entity-buffers))
+  (bury-buffer wl-folder-buffer-name)
+  (delete-windows-on wl-folder-buffer-name t))
+
+(defun wl-folder-info-save ()
+  (when (and wl-folder-info-save
+            wl-folder-info-alist-modified)
+    (let ((entities (list wl-folder-entity))
+         entity entity-stack info-alist info)
+      (while entities
+       (setq entity (wl-pop entities))
+       (cond
+        ((consp entity)
+         (and entities
+              (wl-push entities entity-stack))
+         (setq entities (nth 2 entity)))
+        ((stringp entity)
+         (when (and (setq info (elmo-folder-get-info entity))
+                    (not (equal info '(nil))))
+           (wl-append info-alist (list (list (elmo-string entity)
+                                             (list (nth 3 info)  ;; max
+                                                   (nth 2 info)  ;; length
+                                                   (nth 0 info)  ;; new
+                                                   (nth 1 info)) ;; unread
+                                             ))))))
+       (unless entities
+         (setq entities (wl-pop entity-stack))))
+      (elmo-msgdb-finfo-save info-alist)
+      (setq wl-folder-info-alist-modified nil))))
+
+(defun wl-folder-goto-first-unread-folder (&optional arg)
+  (interactive "P")
+  (let ((entities (list wl-folder-entity))
+       entity entity-stack ret-val
+       first-entity finfo)
+    (setq first-entity
+         (catch 'done
+           (while entities
+             (setq entity (wl-pop entities))
+             (cond
+              ((consp entity)
+               (and entities
+                    (wl-push entities entity-stack))
+               (setq entities (nth 2 entity)))
+              ((stringp entity)
+               (if (and (setq finfo (wl-folder-get-entity-info entity))
+                        (and (nth 0 finfo)(nth 1 finfo))
+                        (> (+ (nth 0 finfo)(nth 1 finfo)) 0))
+                   (throw 'done entity))
+               (wl-append ret-val (list entity))))
+             (unless entities
+               (setq entities (wl-pop entity-stack))))))
+    (if first-entity
+       (progn
+         (when arg
+           (wl-folder-jump-folder first-entity)
+           (sit-for 0))
+         (wl-folder-goto-folder-subr first-entity))
+      (message "No unread folder"))))
+
+(defun wl-folder-jump-folder (&optional fld-name noopen)
+  (interactive)
+  (if (not fld-name)
+      (setq fld-name (wl-summary-read-folder wl-default-folder)))
+  (goto-char (point-min))
+  (if (not noopen)
+      (wl-folder-open-folder fld-name))
+  (and (wl-folder-buffer-search-entity fld-name)
+       (beginning-of-line)))
+
+(defun wl-folder-get-entity-list (entity)
+  (let ((entities (list entity))
+       entity-stack ret-val)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity)))
+       ((stringp entity)
+       (wl-append ret-val (list entity))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))
+    ret-val))
+
+(defun wl-folder-open-unread-folder (entity)
+  (save-excursion
+    (let ((alist (wl-folder-get-entity-list entity))
+         (unread 0)
+         finfo path-list path id)
+      (while alist
+       (when (and (setq finfo (wl-folder-get-entity-info (car alist)))
+                  (nth 0 finfo) (nth 1 finfo)
+                  (> (+ (nth 0 finfo)(nth 1 finfo)) 0))
+         (setq unread (+ unread (+ (nth 0 finfo)(nth 1 finfo))))
+         (setq id (wl-folder-get-entity-id (car alist)))
+         (setq path (delete id (wl-folder-get-path
+                                wl-folder-entity
+                                id
+                                (car alist))))
+         (if (not (member path path-list))
+             (wl-append path-list (list path))))
+       (setq alist (cdr alist)))
+      (while path-list
+       (wl-folder-open-folder-sub (car path-list))
+       (setq path-list (cdr path-list)))
+      (message "%s unread folder"
+              (if (> unread 0) unread "No")))))
+
+(defun wl-folder-open-unread-current-entity ()
+  (interactive)
+  (let ((entity-name (wl-folder-get-entity-from-buffer))
+       (group (wl-folder-buffer-group-p)))
+    (when entity-name
+      (wl-folder-open-unread-folder
+       (if group
+          (wl-folder-search-group-entity-by-name entity-name
+                                                 wl-folder-entity)
+        entity-name)))))
+
+(defun wl-folder-open-only-unread-folder ()
+  (interactive)
+  (let ((id (progn
+             (wl-folder-prev-entity-skip-invalid t)
+             (wl-folder-get-entity-from-buffer t))))
+    (wl-folder-open-all-unread-folder)
+    (save-excursion
+      (goto-char (point-max))
+      (while (and (re-search-backward
+                  "^[ ]*\\[[-]\\].+:0/0/[0-9-]+" nil t)
+                 (not (bobp)))
+       (wl-folder-jump-to-current-entity) ;; close it
+       ))
+    (wl-folder-move-path id)
+    (recenter)))
+
+(defun wl-folder-open-all-unread-folder (&optional arg)
+  (interactive "P")
+  (let ((id (progn
+             (wl-folder-prev-entity-skip-invalid t)
+             (wl-folder-get-entity-from-buffer t))))
+    (wl-folder-open-unread-folder wl-folder-entity)
+    (if (not arg)
+       (wl-folder-move-path id)
+      (goto-char (point-min))
+      (wl-folder-next-unread t))))
+
+(defun wl-folder-open-folder (&optional fld-name)
+  (interactive)
+  (if (not fld-name)
+      (setq fld-name (wl-summary-read-folder wl-default-folder)))
+  (let* ((id (wl-folder-get-entity-id
+             (wl-folder-search-entity-by-name fld-name wl-folder-entity
+                                              'folder)))
+        (path (and id (wl-folder-get-path wl-folder-entity id))))
+      (if path
+         (wl-folder-open-folder-sub path))))
+
+(defun wl-folder-open-folder-sub (path)
+  (let ((inhibit-read-only t)
+       (buffer-read-only nil)
+       indent name entity
+       err)
+    (save-excursion
+      (goto-char (point-min))
+      (while (and path
+                 (wl-folder-buffer-search-group
+                  (wl-folder-get-petname
+                   (if (stringp (car path))
+                       (car path)
+                     (wl-folder-get-folder-name-by-id 
+                      (car path))))))
+       (beginning-of-line)
+       (setq path (cdr path))
+       (if (and (looking-at wl-folder-group-regexp)
+                (string= "+" (wl-match-buffer 2)));; closed group
+           (save-excursion
+             (setq indent (wl-match-buffer 1))
+             (setq name (wl-folder-get-realname (wl-match-buffer 3)))
+             (setq entity (wl-folder-search-group-entity-by-name
+                           name
+                           wl-folder-entity))
+             ;; insert as opened
+             (setcdr (assoc (car entity) wl-folder-group-alist) t)
+             (if (eq 'access (cadr entity))
+                 (wl-folder-maybe-load-folder-list entity))
+             (wl-folder-insert-entity indent entity)
+             (delete-region (save-excursion (beginning-of-line)
+                                            (point))
+                            (save-excursion (end-of-line)
+                                            (+ 1 (point)))))))
+      (set-buffer-modified-p nil))))
+
+(defun wl-folder-open-all-pre ()
+  (let ((entities (list wl-folder-entity))
+       entity entity-stack group-entry)
+    (while entities
+      (setq entity (wl-pop entities))
+      (cond
+       ((consp entity)
+       (unless (or (not (setq group-entry
+                              (assoc (car entity) wl-folder-group-alist)))
+                   (cdr group-entry))
+         (setcdr group-entry t)
+         (when (eq 'access (cadr entity))
+           (wl-folder-maybe-load-folder-list entity)))
+       (and entities
+            (wl-push entities entity-stack))
+       (setq entities (nth 2 entity))))
+      (unless entities
+       (setq entities (wl-pop entity-stack))))))
+
+(defun wl-folder-open-all (&optional refresh)
+  (interactive "P")
+  (let* ((inhibit-read-only t)
+        (buffer-read-only nil)
+        (len (length wl-folder-group-alist))
+        (i 0)
+        indent name entity)
+    (if refresh
+       (let ((id (progn
+                   (wl-folder-prev-entity-skip-invalid t)
+                   (wl-folder-get-entity-from-buffer t))))
+         (mapcar '(lambda (x)
+                    (setcdr x t))
+                 wl-folder-group-alist)
+         (erase-buffer)
+         (wl-folder-insert-entity " " wl-folder-entity)
+         (wl-folder-move-path id))
+      (message "Opening all folders...")
+      (wl-folder-open-all-pre)
+      (save-excursion
+       (goto-char (point-min))
+       (while (re-search-forward
+               "^\\([ ]*\\)\\[\\([+]\\)\\]\\(.+\\):[-0-9-]+/[0-9-]+/[0-9-]+\n"
+               nil t)
+         (setq indent (wl-match-buffer 1))
+         (setq name (wl-folder-get-realname (wl-match-buffer 3)))
+         (setq entity (wl-folder-search-group-entity-by-name
+                       name
+                       wl-folder-entity))
+         ;; insert as opened
+         (setcdr (assoc (car entity) wl-folder-group-alist) t)
+         (forward-line -1)
+         (wl-folder-insert-entity indent entity)
+         (delete-region (save-excursion (beginning-of-line)
+                                        (point))
+                        (save-excursion (end-of-line)
+                                        (+ 1 (point))))
+         (setq i (1+ i))
+         (and (zerop (% i 10))
+              (elmo-display-progress
+               'wl-folder-open-all "Opening all folders..."
+               (/ (* i 100) len))))))
+    (message "Opening all folders...done")
+    (set-buffer-modified-p nil)))
+
+(defun wl-folder-close-all ()
+  (interactive)
+  (let ((inhibit-read-only t)
+       (buffer-read-only nil)
+       (alist wl-folder-group-alist)
+       (id (progn
+             (wl-folder-prev-entity-skip-invalid t)
+             (wl-folder-get-entity-from-buffer t))))
+    (while alist
+      (setcdr (car alist) nil)
+      (setq alist (cdr alist)))
+    (setcdr (assoc (car wl-folder-entity) wl-folder-group-alist) t)
+    (erase-buffer)
+    (wl-folder-insert-entity " " wl-folder-entity)
+    (wl-folder-move-path id)
+    (recenter)
+    (set-buffer-modified-p nil)))
+
+(defun wl-folder-open-close ()
+  "open or close parent entity."
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (if (wl-folder-buffer-group-p)
+       ;; if group (whether opend or closed.)
+       (wl-folder-jump-to-current-entity)
+      ;; if folder
+      (let (indent)
+       (setq indent (save-excursion
+                      (re-search-forward "\\([ ]*\\)." nil t)
+                      (wl-match-buffer 1)))
+       (while (looking-at indent)
+         (forward-line -1)))
+      (wl-folder-jump-to-current-entity))))
+
+(defsubst wl-folder-access-subscribe-p (group folder)
+  (let (subscr regexp match)
+    (if (setq subscr (wl-get-assoc-list-value
+                     wl-folder-access-subscribe-alist
+                     group))
+       (progn
+         (setq regexp (mapconcat 'identity (cdr subscr) "\\|"))
+         (setq match (string-match regexp folder))
+         (if (car subscr)
+             match
+           (not match)))
+      t)))
+
+(defun wl-folder-update-access-group (entity new-flist)
+  (let* ((flist (nth 2 entity))
+        (unsubscribes (nth 3 entity))
+        (len (+ (length flist) (length unsubscribes)))
+        (i 0)
+        diff new-unsubscribes removes
+        subscribed-list folder group entry)
+    ;; check subscribed groups
+    (while flist
+      (cond
+       ((listp (car flist))    ;; group
+       (setq group (elmo-string (caar flist)))
+       (cond
+        ((assoc group new-flist)       ;; found in new-flist
+         (setq new-flist (delete (assoc group new-flist)
+                                 new-flist))
+         (if (wl-folder-access-subscribe-p (car entity) group)
+             (wl-append subscribed-list (list (car flist)))
+           (wl-append new-unsubscribes (list (car flist)))
+           (setq diff t)))
+        (t
+         (setq wl-folder-group-alist
+               (delete (wl-string-assoc group wl-folder-group-alist)
+                       wl-folder-group-alist))
+         (wl-append removes (list (list group))))))
+       (t                      ;; folder
+       (setq folder (elmo-string (car flist)))
+       (cond
+        ((member folder new-flist)     ;; found in new-flist
+         (setq new-flist (delete folder new-flist))
+         (if (wl-folder-access-subscribe-p (car entity) folder)
+             (wl-append subscribed-list (list (car flist)))
+           (wl-append new-unsubscribes (list folder))
+           (setq diff t)))
+        (t
+         (wl-append removes (list folder))))))
+      (setq i (1+ i))
+      (and (zerop (% i 10))
+          (elmo-display-progress
+           'wl-folder-update-access-group "Updating access group..."
+           (/ (* i 100) len)))
+      (setq flist (cdr flist)))
+    ;; check unsubscribed groups
+    (while unsubscribes
+      (cond
+       ((listp (car unsubscribes))
+       (when (setq entry (assoc (caar unsubscribes) new-flist))
+         (setq new-flist (delete entry new-flist))
+         (wl-append new-unsubscribes (list (car unsubscribes)))))
+       (t
+       (when (member (car unsubscribes) new-flist)
+         (setq new-flist (delete (car unsubscribes) new-flist))
+         (wl-append new-unsubscribes (list (car unsubscribes))))))
+      (setq i (1+ i))
+      (and (zerop (% i 10))
+          (elmo-display-progress
+           'wl-folder-update-access-group "Updating access group..."
+           (/ (* i 100) len)))
+      (setq unsubscribes (cdr unsubscribes)))
+    ;;
+    (if (or new-flist removes)
+       (setq diff t))
+    (setq new-flist
+         (mapcar '(lambda (x)
+                    (cond ((consp x) (list (car x) 'access))
+                          (t x)))
+                 new-flist))
+    ;; check new groups
+    (let ((new-list new-flist))
+      (while new-list
+       (if (not (wl-folder-access-subscribe-p
+                 (car entity)
+                 (if (listp (car new-list))
+                     (caar new-list)
+                   (car new-list))))
+           ;; auto unsubscribe
+           (progn
+             (wl-append new-unsubscribes (list (car new-list)))
+             (setq new-flist (delete (car new-list) new-flist)))
+         (cond
+          ((listp (car new-list))
+           ;; check group exists
+           (if (wl-string-assoc (caar new-list) wl-folder-group-alist)
+               (progn
+                 (message "%s: group already exists." (caar new-list))
+                 (sit-for 1)
+                 (wl-append new-unsubscribes (list (car new-list)))
+                 (setq new-flist (delete (car new-list) new-flist)))
+             (wl-append wl-folder-group-alist
+                        (list (cons (caar new-list) nil)))))))
+       (setq new-list (cdr new-list))))
+    (if new-flist
+       (message "%d new folder(s)." (length new-flist))
+      (message "Updating access group...done"))
+    (wl-append new-flist subscribed-list)      ;; new is first
+    (run-hooks 'wl-folder-update-access-group-hook)
+    (setcdr (cdr entity) (list new-flist new-unsubscribes))
+    (list diff new-flist new-unsubscribes removes)))
+
+(defun wl-folder-prefetch-entity (entity)
+  "Prefetch all new messages in the ENTITY"
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity))
+         (sum-done 0)
+         (sum-all 0)     
+         result)
+      (while flist
+       (setq result (wl-folder-prefetch-entity (car flist)))
+       (setq sum-done (+ sum-done (car result)))
+       (setq sum-all (+ sum-all (cdr result)))
+       (setq flist (cdr flist)))
+      (message "Prefetched %d/%d message(s) in \"%s\"." 
+              sum-done sum-all 
+              (wl-folder-get-petname (car entity)))
+      (cons sum-done sum-all)))
+   ((stringp entity)
+    (let ((nums (wl-folder-get-entity-info entity))
+         (wl-summary-highlight (if (or (wl-summary-sticky-p entity)
+                                       (wl-summary-always-sticky-folder-p
+                                        entity))
+                                   wl-summary-highlight))
+         wl-summary-exit-next-move
+         wl-auto-select-first ret-val 
+         count)
+      (setq count (or (car nums) 0))
+      (setq count (+ count (wl-folder-count-incorporates entity)))
+      (if (< 0 count)
+         (save-window-excursion
+           (save-excursion
+             (wl-summary-goto-folder-subr entity 
+                                          (wl-summary-get-sync-range entity)
+                                          nil)
+             (setq ret-val (wl-summary-incorporate))
+             (wl-summary-exit)
+             ret-val))
+       (cons 0 0))))))
+
+(defun wl-folder-count-incorporates (folder)
+  (let ((sum 0))
+    (mapcar '(lambda (x)
+              (if (member (cadr x)
+                          wl-summary-incorporate-marks)
+                  (incf sum)))
+           (elmo-msgdb-mark-load (elmo-msgdb-expand-path folder)))
+    sum))
+
+(defun wl-folder-prefetch-current-entity (&optional no-check)
+  "Prefetch all uncached messages in the folder at position. 
+If current line is group folder, all subfolders are prefetched."
+  (interactive "P")
+  (save-excursion
+    (let ((entity-name (wl-folder-get-entity-from-buffer))
+         (group (wl-folder-buffer-group-p))
+         wl-folder-check-entity-hook
+         summary-buf entity)
+      (when entity-name
+       (setq entity
+             (if group
+                 (wl-folder-search-group-entity-by-name entity-name
+                                                        wl-folder-entity)
+               entity-name))
+       (if (not no-check)
+           (wl-folder-check-entity entity))
+       (wl-folder-prefetch-entity entity)))))
+
+(defun wl-folder-drop-unsync-entity (entity)
+  "Drop all unsync messages in the ENTITY"
+  (cond
+   ((consp entity)
+    (let ((flist (nth 2 entity)))
+      (while flist
+       (wl-folder-drop-unsync-entity (car flist))
+       (setq flist (cdr flist)))))
+   ((stringp entity)
+    (let ((nums (wl-folder-get-entity-info entity))
+         wl-summary-highlight wl-auto-select-first new)
+      (setq new (or (car nums) 0))
+      (if (< 0 new)
+         (save-window-excursion
+           (save-excursion
+             (wl-summary-goto-folder-subr entity 'no-sync nil)
+             (wl-summary-drop-unsync)
+             (wl-summary-exit))))))))
+
+(defun wl-folder-drop-unsync-current-entity (&optional force-check)
+  "Drop all unsync messages in the folder at position. 
+If current line is group folder, all subfolders are dropped.
+If optional arg exists, don't check any folders."
+  (interactive "P")
+  (save-excursion
+    (let ((entity-name (wl-folder-get-entity-from-buffer))
+         (group (wl-folder-buffer-group-p))
+         wl-folder-check-entity-hook
+         summary-buf entity)
+      (when (and entity-name
+                (y-or-n-p (format 
+                           "Drop all unsync messages in %s?" entity-name)))
+       (setq entity
+             (if group
+                 (wl-folder-search-group-entity-by-name entity-name
+                                                        wl-folder-entity)
+               entity-name))
+       (if (null force-check)
+           (wl-folder-check-entity entity))
+       (wl-folder-drop-unsync-entity entity)
+       (message "All unsync messages in %s are dropped!" entity-name)))))
+
+(defun wl-folder-write-current-newsgroup ()
+  (interactive)
+  (wl-summary-write-current-newsgroup (wl-folder-entity-name)))
+
+(defun wl-folder-mimic-kill-buffer ()
+  "Kill the current (Folder) buffer with query."
+  (interactive)
+  (let ((bufname (read-buffer (format "Kill buffer: (default %s) "
+                                     (buffer-name))))
+       wl-interactive-exit)
+    (if (or (not bufname)
+           (string-equal bufname "")
+           (string-equal bufname (buffer-name)))
+       (wl-exit)
+      (kill-buffer bufname))))
+
+(defun wl-folder-confirm-existence (fld &optional ignore-error)
+  (if (or (wl-folder-entity-exists-p fld)
+         (file-exists-p (elmo-msgdb-expand-path fld)))
+      ()
+    (if ignore-error
+       (condition-case nil
+           (if (elmo-folder-exists-p fld)
+               ()
+             (if (elmo-folder-creatable-p fld)
+                 (if (y-or-n-p 
+                      (format "Folder %s does not exist, create it?" fld))
+                     (progn
+                       (setq wl-folder-entity-hashtb
+                             (wl-folder-create-entity-hashtb
+                              fld
+                              wl-folder-entity-hashtb))
+                       (elmo-create-folder fld)))))
+         (error))
+      (if (elmo-folder-exists-p fld)
+         ()
+       (if (not (elmo-folder-creatable-p fld))
+           (error "Folder %s is not found" fld)
+         (if (y-or-n-p 
+              (format "Folder %s does not exist, create it?" fld))
+             (progn
+               (setq wl-folder-entity-hashtb
+                     (wl-folder-create-entity-hashtb
+                      fld
+                      wl-folder-entity-hashtb))
+               (unless (elmo-create-folder fld)
+                 (error "Create folder failed")))
+           (error "Folder is not created")))))))
+
+(provide 'wl-folder)
+
+;;; wl-folder.el ends here
diff --git a/wl/wl-highlight.el b/wl/wl-highlight.el
new file mode 100644 (file)
index 0000000..b9f4c20
--- /dev/null
@@ -0,0 +1,1224 @@
+;;; wl-highlight.el -- Hilight modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/05 00:59:10 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(if (and (featurep 'xemacs)
+        (featurep 'dragdrop))
+    (require 'wl-dnd))
+(require 'wl-vars)
+(provide 'wl-highlight)
+
+(eval-when-compile
+  (if wl-on-xemacs
+      (require 'wl-xmas)
+    (if wl-on-nemacs
+       (require 'wl-nemacs)
+      (require 'wl-mule)))
+  (defun-maybe extent-begin-glyph (a))
+  (defun-maybe delete-extent (a))
+  (defun-maybe make-extent (a b))
+  (defun-maybe set-extent-begin-glyph (a b))
+  (defun-maybe set-extent-end-glyph (a b))
+  (defun-maybe extent-at (a b c d e))
+  (defun-maybe wl-dnd-set-drop-target (a b))
+  (defun-maybe wl-dnd-set-drag-starter (a b)))
+
+(put 'wl-defface 'lisp-indent-function 'defun)
+
+(defgroup wl-faces nil
+  "Wanderlust, Faces."
+  :prefix "wl-highlight-"
+  :group 'wl-highlight
+  :group 'wl)
+
+(defgroup wl-summary-faces nil
+  "Wanderlust, Faces of summary buffer."
+  :prefix "wl-highlight-"
+  :group 'wl-highlight
+  :group 'wl-summary)
+
+(defgroup wl-folder-faces nil
+  "Wanderlust, Faces of folder buffer."
+  :prefix "wl-highlight-"
+  :group 'wl-highlight
+  :group 'wl-folder)
+
+(defgroup wl-message-faces nil
+  "Wanderlust, Faces of message buffer."
+  :prefix "wl-highlight-"
+  :group 'wl-highlight)
+
+;; for message header and signature
+
+(wl-defface wl-highlight-message-headers
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "gray" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "gray50" :bold t)))
+  "Face used for displaying header names."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-header-contents
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color)
+      (background dark))
+     (:foreground "LightSkyBlue" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "purple" :bold t)))
+  "Face used for displaying header content."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-important-header-contents
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "yellow"))
+    (((class color)
+      (background dark))
+     (:foreground "yellow" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "brown" :bold t)))
+  "Face used for displaying contents of special headers."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-important-header-contents2
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "red"))
+    (((class color)
+      (background dark))
+     (:foreground "orange" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "DarkSlateBlue" :bold t)))
+  "Face used for displaying contents of special headers."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-citation-header
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "SkyBlue"))
+    (((class color)
+      (background light))
+     (:foreground "DarkGreen")))
+  "Face used for displaying header of quoted texts."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-unimportant-header-contents
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color)
+      (background dark))
+     (:foreground "GreenYellow" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "DarkGreen" :bold t)))
+  "Face used for displaying contents of unimportant headers."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-signature
+  '((((class color)
+      (background dark))
+     (:foreground "khaki"))
+    (((class color)
+      (background light))
+     (:foreground "DarkSlateBlue")))
+  "Face used for displaying signature."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+;; for draft
+
+(wl-defface wl-highlight-header-separator-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "black" :background "yellow"))
+    (((class color))
+     (:foreground "Black" :background "DarkKhaki")))
+  "Face used for displaying header separator."
+  :group 'wl-draft
+  :group 'wl-faces)
+
+;; important messages
+
+(wl-defface wl-highlight-summary-important-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "magenta"))
+    (((class color)
+      (background dark))
+     (:foreground "orange"))
+    (((class color)
+      (background light))
+     (:foreground "purple")))
+  "Face used for displaying important messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-new-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "red"))
+    (((class color)
+      (background dark))
+     (:foreground "tomato"))
+    (((class color)
+      (background light))
+     (:foreground "tomato")))
+  "Face used for displaying new messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-displaying-face
+  '((t
+     (:underline t :bold t)))
+  "Face used for displaying message."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-thread-indent-face
+  '((t
+     (:foreground "gray40")))
+  "Face used for displaying indented thread."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+;; unimportant messages
+
+(wl-defface wl-highlight-summary-unread-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "LightSkyBlue"))
+    (((class color)
+      (background light))
+     (:foreground "RoyalBlue")))
+  "Face used for displaying unread messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-deleted-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color)
+      (background dark))
+     (:foreground "gray"))
+    (((class color)
+      (background light))
+     (:foreground "DarkKhaki")))
+  "Face used for displaying messages mark as deleted."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-refiled-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color)
+      (background dark))
+     (:foreground "blue"))
+    (((class color)
+      (background light))
+     (:foreground "firebrick")))
+  "Face used for displaying messages mark as refiled."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-copied-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background light))
+     (:foreground "blue")))
+  "Face used for displaying messages mark as copied."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+;; obsolete.
+(wl-defface wl-highlight-summary-temp-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "gold"))
+    (((class color))
+     (:foreground "HotPink1")))
+  "Face used for displaying messages mark as temp."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-target-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "gold"))
+    (((class color))
+     (:foreground "HotPink1")))
+  "Face used for displaying messages mark as target."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-low-read-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "yellow" :italic t))
+    (((class color)
+      (background dark))
+     (:foreground "PaleGreen" :italic t))
+    (((class color)
+      (background light))
+     (:foreground "Green3" :italic t)))
+  "Face used for displaying low interest read messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-high-read-face
+  '(
+    (((type tty))
+     (:bold t))
+    (((class color)
+      (background dark))
+     (:foreground "PaleGreen" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "SeaGreen" :bold t)))
+  "Face used for displaying high interest read messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-low-unread-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan" :italic t))
+    (((class color)
+      (background dark))
+     (:foreground "LightSkyBlue" :italic t))
+    (((class color)
+      (background light))
+     (:foreground "RoyalBlue" :italic t)))
+  "Face used for displaying low interest unread messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-high-unread-face
+  '(
+    (((type tty))
+     (:foreground "red" :bold t))
+    (((class color)
+      (background dark))
+     (:foreground "tomato" :bold t))
+    (((class color)
+      (background light))
+     (:foreground "tomato" :bold t)))
+  "Face used for displaying high interest unread messages."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+;; ordinary messages
+
+(wl-defface wl-highlight-summary-thread-top-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color)
+      (background dark))
+     (:foreground "GreenYellow"))
+    (((class color)
+      (background light))
+     (:foreground "green4")))
+  "Face used for displaying top thread message."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-summary-normal-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "yellow"))
+    (((class color)
+      (background dark))
+     (:foreground "PaleGreen"))
+    (((class color)
+      (background light))
+     (:foreground "SeaGreen")))
+  "Face used for displaying normal message."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+;; folder
+
+(wl-defface wl-highlight-folder-unknown-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "pink"))
+    (((class color)
+      (background light))
+     (:foreground "RoyalBlue")))
+  "Face used for displaying unread folder."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-killed-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "gray"))
+    (((class color))
+     (:foreground "gray50")))
+  "Face used for displaying killed folder."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-zero-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color)
+      (background dark))
+     (:foreground "SkyBlue"))
+    (((class color)
+      (background light))
+     (:foreground "BlueViolet")))
+  "Face used for displaying folder needs no sync."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-few-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "yellow"))
+    (((class color)
+      (background dark))
+     (:foreground "orange"))
+    (((class color)
+      (background light))
+     (:foreground "OrangeRed3")))
+  "Face used for displaying folder contains few unsync messages."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-many-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "red"))
+    (((class color)
+      (background dark))
+     (:foreground "HotPink1"))
+    (((class color)
+      (background light))
+     (:foreground "tomato")))
+  "Face used for displaying folder contains many unsync messages."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-unread-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "magenta"))
+    (((class color)
+      (background dark))
+     (:foreground "gold"))
+    (((class color)
+      (background light))
+     (:foreground "MediumVioletRed")))
+  "Face used for displaying unread folder."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-opened-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color)
+      (background dark))
+     (:foreground "PaleGreen"))
+    (((class color)
+      (background light))
+     (:foreground "ForestGreen")))
+  "Face used for displaying opened group folder."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-closed-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "GreenYellow"))
+    (((class color)
+      (background light))
+     (:foreground "DarkOliveGreen4")))
+  "Face used for displaying closed group folder."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-folder-path-face
+  '((t
+     (:bold t :underline t)))
+  "Face used for displaying path."
+  :group 'wl-folder-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-demo-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color)
+      (background dark))
+     (:foreground "GreenYellow"))
+    (((class color)
+      (background light))
+     (:foreground "blue2")))
+  "Face used for displaying demo."
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-logo-face
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color)
+      (background dark))
+     (:foreground "SkyBlue"))
+    (((class color)
+      (background light))
+     (:foreground "SteelBlue")))
+  "Face used for displaying demo."
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-refile-destination-face
+  '((((class color)
+      (background dark))
+     (:foreground "pink"))
+    (((class color)
+      (background light))
+     (:foreground "red")))
+  "Face used for displaying refile destination."
+  :group 'wl-summary-faces
+  :group 'wl-faces)
+
+;; cited face
+
+(wl-defface wl-highlight-message-cited-text-1
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "magenta"))
+    (((class color)
+      (background dark))
+     (:foreground "HotPink1"))
+    (((class color)
+      (background light))
+     (:foreground "ForestGreen")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-2
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color))
+     (:foreground "violet")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-3
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color))
+     (:foreground "orchid3")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-4
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color))
+     (:foreground "purple1")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-5
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "yellow"))
+    (((class color))
+     (:foreground "MediumPurple1")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-6
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "red"))
+    (((class color))
+     (:foreground "PaleVioletRed")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-7
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "magenta"))
+    (((class color))
+     (:foreground "LightPink")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-8
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "blue"))
+    (((class color))
+     (:foreground "salmon")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-9
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "cyan"))
+    (((class color))
+     (:foreground "SandyBrown")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(wl-defface wl-highlight-message-cited-text-10
+  '(
+    (((type tty)
+      (background dark))
+     (:foreground "green"))
+    (((class color))
+     (:foreground "wheat")))
+  "Face used for displaying quoted text from other messages."
+  :group 'wl-message-faces
+  :group 'wl-faces)
+
+(defvar wl-highlight-folder-opened-regexp " *\\(\\[\\-\\]\\)")
+(defvar wl-highlight-folder-closed-regexp " *\\(\\[\\+\\]\\)")
+(defvar wl-highlight-folder-leaf-regexp "[ ]*\\([-%\\+]\\)\\(.*\\):.*$")
+
+(defvar wl-highlight-summary-unread-regexp " *[0-9]+[^0-9]\\(!\\|U\\)")
+(defvar wl-highlight-summary-important-regexp " *[0-9]+[^0-9]\\$")
+(defvar wl-highlight-summary-new-regexp " *[0-9]+[^0-9]N")
+(defvar wl-highlight-summary-deleted-regexp " *[0-9]+D")
+(defvar wl-highlight-summary-refiled-regexp " *[0-9]+o")
+(defvar wl-highlight-summary-copied-regexp " *[0-9]+O")
+(defvar wl-highlight-summary-target-regexp " *[0-9]+\\*")
+;(defvar wl-highlight-summary-thread-top-regexp " *[0-9]+[^0-9][^0-9]../..\(.*\)..:.. \\[")
+
+(defvar wl-highlight-citation-face-list
+  '(wl-highlight-message-cited-text-1
+    wl-highlight-message-cited-text-2
+    wl-highlight-message-cited-text-3
+    wl-highlight-message-cited-text-4
+    wl-highlight-message-cited-text-5
+    wl-highlight-message-cited-text-6
+    wl-highlight-message-cited-text-7
+    wl-highlight-message-cited-text-8
+    wl-highlight-message-cited-text-9
+    wl-highlight-message-cited-text-10))
+
+(defmacro defun-hilit (name &rest everything-else)
+  "Define a function for highlight. Nemacs implementation is set as empty."
+  (if wl-on-nemacs
+      (` (defun (, name) nil nil))
+    (` (defun (, name) (,@ everything-else)))))
+
+(defmacro defun-hilit2 (name &rest everything-else)
+  "Define a function for highlight w/o nemacs."
+  (if wl-on-nemacs
+      () ; noop
+    (` (defun (, name) (,@ everything-else)))))
+
+(defun-hilit wl-highlight-summary-displaying ()
+  (interactive)
+  (wl-delete-all-overlays)
+  (let (bol eol ov)
+    (save-excursion
+      (beginning-of-line)
+      (setq bol (point))
+      (save-excursion (end-of-line) (setq eol (point)))
+      (setq ov (make-overlay bol eol))
+      (overlay-put ov 'face 'wl-highlight-summary-displaying-face))))
+
+(defun-hilit2 wl-highlight-folder-group-line (numbers)
+  (if wl-highlight-group-folder-by-numbers
+      (let (fsymbol bol eol)
+       (beginning-of-line)
+       (setq bol (point))
+       (save-excursion (end-of-line) (setq eol (point)))
+       (setq fsymbol 
+             (let ((unsync (nth 0 numbers))
+                   (unread (nth 1 numbers)))
+               (cond ((and unsync (eq unsync 0))
+                      (if (and unread (> unread 0))
+                          'wl-highlight-folder-unread-face
+                        'wl-highlight-folder-zero-face))
+                     ((and unsync 
+                           (>= unsync wl-folder-many-unsync-threshold))
+                      'wl-highlight-folder-many-face)
+                     (t
+                      'wl-highlight-folder-few-face))))
+       (put-text-property bol eol 'face fsymbol))
+    (let ((highlights (list "opened" "closed"))
+         fregexp fsymbol bol eol matched type extent num type)
+      (beginning-of-line)
+      (setq bol (point))
+      (save-excursion (end-of-line) (setq eol (point)))
+      (catch 'highlighted
+       (while highlights
+         (setq fregexp (symbol-value
+                        (intern (format "wl-highlight-folder-%s-regexp" 
+                                        (car highlights)))))
+         (setq fsymbol (intern (format "wl-highlight-folder-%s-face"
+                                       (car highlights))))
+         (when (looking-at fregexp)
+           (put-text-property bol eol 'face fsymbol)
+           (setq matched t)
+           (throw 'highlighted nil))
+         (setq highlights (cdr highlights)))))))
+
+(defun-hilit2 wl-highlight-summary-line-string (line mark temp-mark indent)
+  (let (fsymbol)
+    (cond ((and (string= temp-mark "+")
+               (member mark (list wl-summary-unread-cached-mark
+                                  wl-summary-unread-uncached-mark
+                                  wl-summary-new-mark)))
+          (setq fsymbol 'wl-highlight-summary-high-unread-face))
+         ((and (string= temp-mark "-")
+               (member mark (list wl-summary-unread-cached-mark
+                                  wl-summary-unread-uncached-mark
+                                  wl-summary-new-mark)))
+          (setq fsymbol 'wl-highlight-summary-low-unread-face))
+         ((string= temp-mark "o")
+          (setq fsymbol 'wl-highlight-summary-refiled-face))
+         ((string= temp-mark "O")
+          (setq fsymbol 'wl-highlight-summary-copied-face))
+         ((string= temp-mark "D")
+          (setq fsymbol 'wl-highlight-summary-deleted-face))
+         ((string= temp-mark "*")
+          (setq fsymbol 'wl-highlight-summary-temp-face))        
+         ((string= mark wl-summary-new-mark)
+          (setq fsymbol 'wl-highlight-summary-new-face))
+         ((member mark (list wl-summary-unread-cached-mark
+                             wl-summary-unread-uncached-mark))
+          (setq fsymbol 'wl-highlight-summary-unread-face))
+         ((or (string= mark wl-summary-important-mark))
+          (setq fsymbol 'wl-highlight-summary-important-face))
+         ((string= temp-mark "-")
+          (setq fsymbol 'wl-highlight-summary-low-read-face))
+         ((string= temp-mark "+")
+          (setq fsymbol 'wl-highlight-summary-high-read-face))
+         (t (if (= 0 (length indent))
+                (setq fsymbol 'wl-highlight-summary-thread-top-face)
+              (setq fsymbol 'wl-highlight-summary-normal-face))))
+    (put-text-property 0 (length line) 'face fsymbol line))
+  (if wl-use-highlight-mouse-line 
+      (put-text-property 0 (length line) 'mouse-face 'highlight line)))
+  
+(defun-hilit2 wl-highlight-summary-current-line (&optional smark regexp temp-too)
+  (interactive)
+  (save-excursion
+    (let ((inhibit-read-only t)
+         (case-fold-search nil) temp-mark status-mark
+         (sregexp (concat 
+                   "^" 
+                   wl-summary-buffer-number-regexp 
+                   "\\(.\\)\\(.\\)../..\(.*\)..:.. \\("
+                   wl-highlight-thread-indent-string-regexp
+                   "\\)\\["))
+         fregexp fsymbol bol eol matched thread-top looked-at)
+      (beginning-of-line)
+      (setq bol (point))
+      (save-excursion (end-of-line) (setq eol (point)))
+      (if smark 
+         (setq status-mark smark)
+       (setq looked-at (looking-at sregexp))
+       (setq status-mark (buffer-substring (match-beginning 2)
+                                           (match-end 2))))
+      (when temp-too
+       (unless looked-at
+         (setq looked-at (looking-at sregexp)))
+       (when looked-at
+         (setq temp-mark (buffer-substring (match-beginning 1)
+                                           (match-end 1)))
+         (cond
+          ((string= temp-mark "*")
+           (setq fsymbol 'wl-highlight-summary-temp-face))
+          ((string= temp-mark "D")
+           (setq fsymbol 'wl-highlight-summary-deleted-face))
+          ((string= temp-mark "O")
+           (setq fsymbol 'wl-highlight-summary-copied-face))
+          ((string= temp-mark "o")
+           (setq fsymbol 'wl-highlight-summary-refiled-face)))))
+      (if (not fsymbol)
+         (cond 
+          ((and (string= temp-mark "+")
+                (member status-mark (list wl-summary-unread-cached-mark
+                                          wl-summary-unread-uncached-mark
+                                          wl-summary-new-mark)))
+           (setq fsymbol 'wl-highlight-summary-high-unread-face))
+          ((and (string= temp-mark "-")
+                (member status-mark (list wl-summary-unread-cached-mark
+                                          wl-summary-unread-uncached-mark
+                                          wl-summary-new-mark)))
+           (setq fsymbol 'wl-highlight-summary-low-unread-face))
+          ((string= status-mark wl-summary-new-mark)
+           (setq fsymbol 'wl-highlight-summary-new-face))
+          ((member status-mark (list wl-summary-unread-cached-mark
+                                     wl-summary-unread-uncached-mark))
+           (setq fsymbol 'wl-highlight-summary-unread-face))
+          ((string= status-mark wl-summary-important-mark)
+           (setq fsymbol 'wl-highlight-summary-important-face))
+          ;; score mark
+          ((string= temp-mark "-")
+           (setq fsymbol 'wl-highlight-summary-low-read-face))
+          ((string= temp-mark "+")
+           (setq fsymbol 'wl-highlight-summary-high-read-face))
+          ;;
+          (t (if (and looked-at
+                      (string= (buffer-substring
+                                (match-beginning 3) 
+                                (match-end 3)) ""))
+                 (setq fsymbol 'wl-highlight-summary-thread-top-face)
+               (setq fsymbol 'wl-highlight-summary-normal-face)))))
+      (put-text-property bol eol 'face fsymbol)
+      (if wl-use-highlight-mouse-line 
+         (put-text-property bol;(1- (match-end 0))
+                            eol 'mouse-face 'highlight))
+;      (put-text-property (match-beginning 3) (match-end 3)
+;                       'face 'wl-highlight-thread-indent-face)
+      ;; Dnd stuff.
+      (if wl-use-dnd
+         (wl-dnd-set-drag-starter bol eol)))))
+
+(defun-hilit2 wl-highlight-folder (start end)
+  "Highlight folder between start and end.
+Faces used:
+  wl-highlight-folder-unknown-face      unread messages
+  wl-highlight-folder-zero-face         folder needs no sync
+  wl-highlight-folder-few-face          folder contains few unsync messages
+  wl-highlight-folder-many-face         folder contains many unsync messages
+  wl-highlight-folder-opened-face       opened group folder
+  wl-highlight-folder-closed-face       closed group folder
+
+Variables used:
+  wl-highlight-folder-opened-regexp     matches opened group folder
+  wl-highlight-folder-closed-regexp     matches closed group folder
+"
+  (interactive "r")
+  (if (< end start)
+      (let ((s start)) (setq start end end s)))
+  (let* ((lines (count-lines start end))
+        (real-end end)
+        gc-message)
+    (save-excursion
+      (save-restriction
+       (widen)
+       (narrow-to-region start end)
+       (save-restriction
+         (goto-char start)
+         (while (not (eobp))
+           (wl-highlight-folder-current-line)
+           (forward-line 1)))))))
+
+(if (not wl-on-nemacs)
+    (defsubst wl-delete-all-overlays ()
+      (mapcar (lambda (x) 
+               (delete-overlay x))
+             (overlays-in (point-min) (point-max)))))
+
+(defun-hilit2 wl-highlight-folder-path (folder-path)
+  "Highlight current folder path...overlay"
+  (save-excursion
+    (wl-delete-all-overlays)
+    (let ((fp folder-path) ov)
+      (goto-char (point-min))
+      (while (and fp
+                 (not (eobp)))
+       (beginning-of-line)
+       (or (looking-at "^[ ]*\\[[\\+-]\\]\\(.+\\):.*\n")
+           (looking-at "^[ ]*\\([^ \\[].+\\):.*\n"))
+       (when (equal
+              (get-text-property (point) 'wl-folder-entity-id)
+              (car fp))
+         (setq fp (cdr fp))
+         (setq ov (make-overlay 
+                   (match-beginning 1)
+                   (match-end 1)))
+         (setq wl-folder-buffer-cur-point (point))
+         (overlay-put ov 'face 'wl-highlight-folder-path-face))
+       (forward-line 1)))))
+
+(defun-hilit2 wl-highlight-refile-destination-string (string)
+  (put-text-property 0 (length string) 'face 
+                    'wl-highlight-refile-destination-face
+                    string))
+
+(defun-hilit wl-highlight-summary-all ()
+  "For evaluation"
+  (interactive)
+  (wl-highlight-summary (point-min)(point-max)))
+  
+(defun-hilit2 wl-highlight-summary (start end)
+  "Highlight summary between start and end.
+Faces used:
+  wl-highlight-summary-unread-face      unread messages
+  wl-highlight-summary-important-face   important messages
+  wl-highlight-summary-deleted-face     messages mark as deleted 
+  wl-highlight-summary-refiled-face     messages mark as refiled
+  wl-highlight-summary-copied-face      messages mark as copied
+  wl-highlight-summary-new-face         new messages
+
+Variables used:
+  wl-highlight-summary-unread-regexp    matches unread messages
+  wl-highlight-summary-important-regexp matches important messages
+  wl-highlight-summary-deleted-regexp   matches messages mark as deleted 
+  wl-highlight-summary-refiled-regexp   matches messages mark as refiled
+  wl-highlight-summary-copied-regexp    matches messages mark as copied
+  wl-highlight-summary-new-regexp       matches new messages
+
+If HACK-SIG is true,then we search backward from END for something that
+looks like the beginning of a signature block, and don't consider that a
+part of the message (this is because signatures are often incorrectly
+interpreted as cited text.)"
+  (if (< end start)
+      (let ((s start)) (setq start end end s)))
+  (let* ((lines (count-lines start end))
+        (too-big (and wl-highlight-max-summary-lines
+                      (> lines wl-highlight-max-summary-lines)))
+        (real-end end)
+        gc-message
+        e p hend i percent)
+    (save-excursion
+      (save-restriction
+       (widen)
+       (narrow-to-region start end)
+       (if (not too-big)
+           (save-restriction
+             (goto-char start)
+             (setq i 0)
+             (while (not (eobp))
+               (wl-highlight-summary-current-line nil nil wl-summary-scored)
+               (setq i (+ i 1))
+               (setq percent (/ (* i 100) lines))
+               (if (eq (% percent 5) 0)
+                   (elmo-display-progress
+                    'wl-highlight-summary "Highlighting..."
+                    percent))
+               (forward-line 1))
+             (message "Highlighting...done.")))))))
+
+(defun wl-highlight-headers ()
+  (let ((beg (point-min))
+       (end (or (save-excursion (re-search-forward "^$" nil t))
+                (point-max))))
+    (wl-highlight-message beg end nil)
+    (and wl-highlight-x-face-func
+        (funcall wl-highlight-x-face-func beg end))
+    (run-hooks 'wl-highlight-headers-hook)))
+
+(defun wl-highlight-body-all ()
+  (wl-highlight-message (point-min) (point-max) t t))
+
+(defun-hilit wl-highlight-body ()
+  (let ((beg (or (save-excursion (goto-char (point-min))
+                                (re-search-forward "^$" nil t))
+                (point-min)))
+       (end (point-max)))
+    (wl-highlight-message beg end t)))
+
+(defun-hilit2 wl-highlight-body-region (beg end)
+  (wl-highlight-message beg end t t))
+
+(defun wl-highlight-signature-search-simple (beg end)
+  "Search signature area in the body message between beg and end.
+Returns start point of signature."
+  (save-excursion
+    (goto-char end)
+    (if (re-search-backward "\n--+ *\n" beg t)
+       (if (eq (char-after (point)) ?\n)
+           (1+ (point))
+         (point))
+      end)))
+
+(defun wl-highlight-signature-search (beg end)
+  "Search signature area in the body message between beg and end.
+Returns start point of signature."
+  (save-excursion
+    (goto-char end)
+    (or
+     ;; look for legal signature separator (check at first for fasten)
+     (re-search-backward "\n-- \n" beg t)
+
+     ;; look for dual separator
+     (save-excursion
+       (and
+       (re-search-backward "^[^A-Za-z0-9> \t\n]+ *$" beg t)
+       (> (- (match-end 0) (match-beginning 0)) 10);; "10" is a magic number.
+       (re-search-backward 
+        (concat "^" 
+                (regexp-quote (buffer-substring (match-beginning 0) (match-end 0))) 
+                "$") beg t)))
+
+     ;; look for user specified signature-separator
+     (if (stringp wl-highlight-signature-separator)
+        (re-search-backward wl-highlight-signature-separator nil t);; case one string
+       (let ((sep wl-highlight-signature-separator))           ;; case list
+        (while (and sep
+                    (not (re-search-backward (car sep) beg t)))
+          (setq sep (cdr sep)))
+        (point)))      ;; if no separator found, returns end.
+     )))
+
+(defun-hilit2 wl-highlight-message (start end hack-sig &optional body-only)
+  "Highlight message headers between start and end.
+Faces used:
+  wl-highlight-message-headers                   the part before the colon
+  wl-highlight-message-header-contents           the part after the colon
+  wl-highlight-message-important-header-contents  contents of \"special\" 
+                                                  headers
+  wl-highlight-message-important-header-contents2 contents of \"special\" 
+                                                  headers
+  wl-highlight-message-unimportant-header-contents contents of unimportant 
+                                                   headers
+  wl-highlight-message-cited-text                 quoted text from other 
+                                                   messages
+  wl-highlight-message-citation-header             header of quoted texts
+  wl-highlight-message-signature                   signature
+
+Variables used:
+  wl-highlight-important-header-regexp  what makes a \"special\" header
+  wl-highlight-important-header2-regexp         what makes a \"special\" header
+  wl-highlight-unimportant-header-regexp what makes a \"special\" header
+  wl-highlight-citation-prefix-regexp   matches lines of quoted text
+  wl-highlight-citation-header-regexp   matches headers for quoted text
+
+If HACK-SIG is true,then we search backward from END for something that
+looks like the beginning of a signature block, and don't consider that a
+part of the message (this is because signatures are often incorrectly
+interpreted as cited text.)"
+  (if (< end start)
+      (let ((s start)) (setq start end end s)))
+  (let* ((too-big (and wl-highlight-max-message-size
+                      (> (- end start)
+                         wl-highlight-max-message-size)))
+        (real-end end)
+        current  beg
+        e p hend)
+    (save-excursion
+      (save-restriction
+       (widen)
+       ;; take off signature
+       (if (and hack-sig (not too-big))
+           (setq end (funcall wl-highlight-signature-search-func 
+                              (- end wl-max-signature-size) end)))
+       (if hack-sig
+           (put-text-property end (point-max)
+                              'face 'wl-highlight-message-signature))
+       (narrow-to-region start end)
+
+       (save-restriction
+         ;; narrow down to just the headers...
+         (goto-char start)
+         ;; If this search fails then the narrowing performed above
+         ;; is sufficient
+         (if (re-search-forward (format 
+                                 "^$\\|%s" 
+                                 (regexp-quote mail-header-separator)) nil t)
+             (narrow-to-region (point-min) (point)))
+         (goto-char start)
+         (while (and (not body-only)
+                     (not (eobp)))
+           (cond
+            ((looking-at "^\\([^ \t\n:]+[ \t]*:\\) *\\(.*\\(\n[ \t].*\\)*\n\\)")
+             (setq hend (match-end 0))
+             (put-text-property (match-beginning 1) (match-end 1)
+                                'face 'wl-highlight-message-headers)
+             (setq p (match-end 1))
+             (cond
+              ((catch 'match
+                 (let ((regexp-alist wl-highlight-message-header-alist))
+                   (while regexp-alist
+                     (when (save-match-data
+                             (looking-at (caar regexp-alist)))
+                       (put-text-property
+                        (match-beginning 2) (match-end 2)
+                        'face
+                        (cdar regexp-alist))
+                       (throw 'match t))
+                     (setq regexp-alist (cdr regexp-alist)))
+                   (throw 'match nil))))
+              (t
+               (put-text-property
+                (match-beginning 2) (match-end 2)
+                'face 'wl-highlight-message-header-contents)))
+             (goto-char hend))
+            ((looking-at mail-header-separator)
+             (put-text-property (match-beginning 0) (match-end 0)
+                                'face 'wl-highlight-header-separator-face)
+             (goto-char (match-end 0)))
+            ;; ignore non-header field name lines
+            (t (forward-line 1)))))
+       ;; now do the body, unless it's too big....
+       (if too-big
+           nil
+         (let (prefix prefix-face-alist pair end)
+         (while (not (eobp))
+           (cond 
+            ((null wl-highlight-force-citation-header-regexp)
+             nil) 
+            ((looking-at wl-highlight-force-citation-header-regexp)
+             (setq current 'wl-highlight-message-citation-header)
+             (setq end (match-end 0)))
+            ((null wl-highlight-citation-prefix-regexp)
+             nil)
+            ((looking-at wl-highlight-citation-prefix-regexp)
+             (setq prefix (buffer-substring (point)
+                                            (match-end 0)))
+             (setq pair (assoc prefix prefix-face-alist))
+             (unless pair
+               (setq prefix-face-alist
+                     (append prefix-face-alist
+                             (list 
+                              (setq pair 
+                                    (cons 
+                                     prefix
+                                     (nth 
+                                      (% (length prefix-face-alist)
+                                         (length
+                                          wl-highlight-citation-face-list))
+                                      wl-highlight-citation-face-list)))))))
+             (unless wl-highlight-highlight-citation-too
+               (goto-char (match-end 0)))
+             (setq current (cdr pair)))
+            ((null wl-highlight-citation-header-regexp)
+             nil)
+            ((looking-at wl-highlight-citation-header-regexp)
+             (setq current 'wl-highlight-message-citation-header)
+             (setq end (match-end 0)))
+            (t (setq current nil)))
+           (cond (current
+                  (setq p (point))
+                  (forward-line 1) ; this is to put the \n in the face too
+                  (let ();(inhibit-read-only t))
+                    (put-text-property p (or end (point))
+                                       'face current)
+                    (setq end nil))
+                  (forward-char -1)))
+           (forward-line 1)))
+         (run-hooks 'wl-highlight-message-hook))))))
+
+
+;; highlight-mouse-line for folder mode
+
+(defun wl-highlight-folder-mouse-line ()
+  (interactive)
+  (let* ((end (save-excursion (end-of-line) (point)))
+        (beg (progn
+               (re-search-forward "[^ ]" end t)
+               (1- (point))))
+        (inhibit-read-only t))
+    (put-text-property beg end 'mouse-face 'highlight)))
+
+;;; wl-highlight.el ends here
diff --git a/wl/wl-message.el b/wl/wl-message.el
new file mode 100644 (file)
index 0000000..37bb7ba
--- /dev/null
@@ -0,0 +1,615 @@
+;;; wl-message.el -- Message displaying modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-17 10:19:41 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-vars)
+(require 'wl-highlight)
+
+(eval-when-compile
+  (if wl-use-semi
+      (progn
+       (require 'wl-mime)
+       (require 'mime-view)
+       (require 'mmelmo-imap4))
+    (require 'tm-wl))
+  (mapcar
+   (function
+    (lambda (symbol)
+      (unless (boundp symbol)
+       (set (make-local-variable symbol) nil))))
+   '(mime-view-ignored-field-list mmelmo-imap4-skipped-parts))
+  (defun-maybe event-window (a))
+  (defun-maybe posn-window (a))
+  (defun-maybe event-start (a))
+  (defun-maybe mime-open-entity (a b)))
+
+(defvar wl-original-buf-name "*Message*")
+(defvar wl-message-buf-name "Message")
+(defvar wl-message-buffer-cur-summary-buffer nil)
+(defvar wl-message-buffer-cur-folder nil)
+(defvar wl-message-buffer-cur-number nil)
+
+(defvar wl-original-buffer-cur-folder nil)
+(defvar wl-original-buffer-cur-number nil)
+(defvar wl-original-buffer-cur-msgdb  nil)
+
+(mapcar 
+ (function make-variable-buffer-local)
+ (list 'wl-message-buffer-cur-folder
+       'wl-message-buffer-cur-number))
+
+(provide 'wl-message)
+
+(defvar wl-fixed-window-configuration nil)
+
+(defun wl-message-buffer-window ()
+  (let* ((mes-buf (concat "^" (default-value 'wl-message-buf-name)))
+        (start-win (selected-window))
+        (cur-win start-win))
+    (catch 'found
+      (while (progn
+              (setq cur-win (next-window cur-win))
+              (if (string-match mes-buf (buffer-name (window-buffer cur-win)))
+                  (throw 'found cur-win))
+              (not (eq cur-win start-win)))))))
+
+(defun wl-select-buffer (buffer)
+  (let ((gbw (or (get-buffer-window buffer)
+                (wl-message-buffer-window)))
+       (sum (car wl-message-window-size))
+       (mes (cdr wl-message-window-size))
+       whi)
+    (when (and gbw
+              (not (eq (save-excursion (set-buffer (window-buffer gbw))
+                                       wl-message-buffer-cur-summary-buffer)
+                       (current-buffer))))
+      (delete-window gbw)
+      (run-hooks 'wl-message-window-deleted-hook)
+      (setq gbw nil))
+    (if gbw
+       (select-window gbw)
+;      (if (or (null mes)
+;            wl-stay-folder-window)
+;        (delete-other-windows))
+      (when wl-fixed-window-configuration
+        (delete-other-windows)
+        (and wl-stay-folder-window
+             (wl-summary-toggle-disp-folder)))
+      (setq whi (1- (window-height)))
+      (if mes
+         (progn
+           (let ((total (+ sum mes)))
+             (setq sum (max window-min-height (/ (* whi sum) total)))
+             (setq mes (max window-min-height (/ (* whi mes) total))))
+            (if (< whi (+ sum mes))
+                (enlarge-window (- (+ sum mes) whi)))))
+      (split-window (get-buffer-window (current-buffer)) sum)
+      (other-window 1))
+    (switch-to-buffer buffer)))
+
+;;
+;; called by wl-summary-mode buffer
+;;
+(defvar wl-message-func-called-hook nil)
+
+(defun wl-message-scroll-down (amount)
+  (let ((view-message-buffer (get-buffer-create wl-message-buf-name))
+       (cur-buf (current-buffer)))
+    (wl-select-buffer view-message-buffer)
+    (if (bobp)
+       ()
+      (scroll-down))
+    (select-window (get-buffer-window cur-buf))))  
+
+(defun wl-message-scroll-up (amount)
+  (let ((view-message-buffer (get-buffer-create wl-message-buf-name))
+       (cur-buf (current-buffer)))
+    (wl-select-buffer view-message-buffer)
+    (save-excursion
+      (save-restriction
+       (widen)
+       (forward-page 1)
+       (if (pos-visible-in-window-p (point))
+           (wl-message-narrow-to-page 1))))            ;Go to next page.
+    (if (eobp)
+       ()
+      (scroll-up))
+    (select-window (get-buffer-window cur-buf))))
+  
+(defun wl-message-follow-current-entity (buffer)
+  "Follow to current message"
+  (wl-draft-reply (wl-message-get-original-buffer)
+                 'to-all wl-message-buffer-cur-summary-buffer)
+  (let ((mail-reply-buffer buffer))
+    (wl-draft-yank-from-mail-reply-buffer nil)))
+
+(defun wl-message-original-mode ()
+  (setq major-mode 'wl-message-original-mode)
+  (setq mode-name "Original")
+  (setq buffer-read-only t)
+  (if (fboundp 'set-buffer-file-coding-system)
+      (set-buffer-file-coding-system wl-cs-noconv)))
+
+(defun wl-message-mode ()
+  (interactive)
+  (setq major-mode 'wl-message-mode)
+  (setq buffer-read-only t)
+  (setq mode-name "Message"))
+
+(defun wl-message-get-buffer-create ()
+  (let ((buf-name wl-message-buf-name))
+    (or (get-buffer buf-name)
+       (save-excursion
+         (set-buffer (get-buffer-create buf-name))
+         (wl-message-mode)
+         (run-hooks 'wl-message-buffer-created-hook)
+         (get-buffer buf-name)))))
+
+(defun wl-message-original-get-buffer-create ()
+  (or (get-buffer wl-original-buf-name)
+      (save-excursion
+       (set-buffer (get-buffer-create wl-original-buf-name))
+       (wl-message-original-mode)
+       (get-buffer wl-original-buf-name))))
+  
+(defun wl-message-exit ()
+  (interactive)
+  (let (summary-buf summary-win)
+    (if (setq summary-buf wl-message-buffer-cur-summary-buffer)
+       (if (setq summary-win (get-buffer-window summary-buf))
+           (select-window summary-win)
+         (switch-to-buffer summary-buf)
+         (wl-select-buffer wl-message-buf-name)
+         (select-window (get-buffer-window summary-buf))))
+    (run-hooks 'wl-message-exit-hook)))
+
+(defun wl-message-decode (outbuf inbuf flag)
+  (cond
+   ((eq flag 'all-header)
+    (save-excursion
+      (set-buffer inbuf)
+      (let ((buffer-read-only nil))
+       (decode-mime-charset-region (point-min) 
+                                   (save-excursion
+                                     (goto-char (point-min))
+                                     (re-search-forward "^$" nil t)
+                                     (point))
+                                   wl-mime-charset)))
+    (wl-message-decode-with-all-header outbuf inbuf))
+   ((eq flag 'no-mime)
+    (save-excursion
+      (set-buffer inbuf)
+      (let ((buffer-read-only nil))
+       (save-excursion 
+         (set-buffer outbuf)
+         (elmo-set-buffer-multibyte nil))
+       (copy-to-buffer outbuf (point-min) (point-max))
+       (set-buffer outbuf)
+       (local-set-key "q" 'wl-message-exit)
+       (local-set-key "p" 'wl-message-exit)
+       (local-set-key "n" 'wl-message-exit)
+       (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+       ;;(decode-mime-charset-region (point-min) (point-max) wl-mime-charset)
+       ;; we can call decode-coding-region() directly, because multibyte flag is t.
+       (decode-coding-region (point-min) (point-max) wl-cs-autoconv)
+       (wl-highlight-message (point-min)
+                             (save-excursion
+                               (goto-char (point-min))
+                               (re-search-forward "^$" nil t)) nil))))
+   (t                                  ; normal
+    (save-excursion
+      (set-buffer inbuf)
+      (let ((buffer-read-only nil))
+       (decode-mime-charset-region (point-min) 
+                                   (save-excursion
+                                     (goto-char (point-min))
+                                     (re-search-forward "^$" nil t)
+                                     (point))
+                                   wl-mime-charset)))
+    (wl-message-decode-mode outbuf inbuf))))
+
+(defun wl-message-prev-page (&optional lines)
+  "Scroll down this message. Returns non-nil if top of message"
+  (interactive)
+  (let ((cur-buf (current-buffer))
+       (view-message-buffer (get-buffer-create wl-message-buf-name))
+       ret-val)  
+    (wl-select-buffer view-message-buffer)
+    (move-to-window-line 0)
+    (if (and wl-break-pages
+            (bobp)
+            (not (save-restriction (widen) (bobp))))
+       (progn
+         (wl-message-narrow-to-page -1)
+         (goto-char (point-max))
+         (recenter -1))
+      (if (not (bobp))
+         (scroll-down lines)
+       (setq ret-val t)))
+    (select-window (get-buffer-window cur-buf))
+    ret-val))
+
+(static-if (fboundp 'luna-make-entity)
+    (defsubst wl-message-make-mime-entity (backend number backend folder msgdb)
+      (luna-make-entity (mm-expand-class-name 'elmo)
+                       :location (get-buffer-create 
+                                  (concat mmelmo-entity-buffer-name "0"))
+                       :imap (eq backend 'elmo-imap4) 
+                       :folder folder
+                       :number number
+                       :msgdb msgdb :size 0))
+  (defsubst wl-message-make-mime-entity (backend number backend folder msgdb)
+    (mime-open-entity backend (list folder number msgdb nil))))
+
+(defun wl-message-next-page (&optional lines)
+  "Scroll up this message. Returns non-nil if bottom of message"
+  (interactive)
+  (let ((cur-buf (current-buffer))
+       (view-message-buffer (get-buffer-create wl-message-buf-name))
+       ret-val)
+    (wl-select-buffer view-message-buffer)
+    (move-to-window-line -1)
+    (if (save-excursion
+         (end-of-line)
+         (and (pos-visible-in-window-p)
+              (eobp)))
+       (if (or (null wl-break-pages)
+               (save-excursion
+                 (save-restriction
+                   (widen) (forward-line) (eobp))))
+           (setq ret-val t)
+         (wl-message-narrow-to-page 1)
+         (setq ret-val nil))
+      (condition-case ()
+         (scroll-up lines)
+       (end-of-buffer
+        (goto-char (point-max))))
+      (setq ret-val nil))
+    (select-window (get-buffer-window cur-buf))
+    ret-val
+    ))
+
+(defun wl-message-narrow-to-page (&optional arg)
+  (interactive "P")
+  (setq arg (if arg (prefix-numeric-value arg) 0))
+  (save-excursion
+    (condition-case ()
+        (forward-page -1)               ; Beginning of current page.
+      (beginning-of-buffer
+       (goto-char (point-min))))
+    (forward-char 1)  ; for compatibility with emacs-19.28 and emacs-19.29
+    (widen)
+    (cond
+     ((> arg 0)        (forward-page arg))
+     ((< arg 0) (forward-page (1- arg))))
+    (forward-page)
+    (if wl-break-pages
+       (narrow-to-region (point)
+                         (progn
+                           (forward-page -1)
+                           (if (and (eolp) (not (bobp)))
+                               (forward-line))
+                           (point)))) ))
+
+(defun wl-message-toggle-disp-summary ()
+  (interactive)
+  (let ((summary-buf (get-buffer wl-message-buffer-cur-summary-buffer))
+       summary-win)
+    (if (and summary-buf
+            (buffer-live-p summary-buf))
+       (if (setq summary-win (get-buffer-window summary-buf))
+           (delete-window summary-win)
+         (switch-to-buffer summary-buf)
+         (wl-select-buffer wl-message-buf-name))
+      (wl-summary-goto-folder-subr wl-message-buffer-cur-folder 'no-sync
+                                  nil nil t)
+                                       ; no summary-buf
+      (let ((sum-buf (current-buffer)))
+       (wl-select-buffer wl-message-buf-name)
+       (setq wl-message-buffer-cur-summary-buffer sum-buf)))))
+
+(defun wl-message-normal-get-original-buffer ()
+  (let (ret-val)
+    (if (setq ret-val (get-buffer wl-original-buf-name))
+       ret-val
+      (set-buffer (setq ret-val 
+                       (get-buffer-create wl-original-buf-name)))
+      (wl-message-original-mode)
+      ret-val)))
+
+
+(if wl-use-semi
+    (defalias 'wl-message-get-original-buffer 
+      'mmelmo-get-original-buffer)
+  (defalias 'wl-message-get-original-buffer 
+    'wl-message-normal-get-original-buffer))
+
+(defvar wl-message-redisplay-func 'wl-normal-message-redisplay)
+(defvar wl-message-cache-used nil) ;whether cache is used or not.
+
+(defun wl-message-redisplay (folder number flag msgdb &optional force-reload)
+  (let ((default-mime-charset wl-mime-charset)
+       (buffer-read-only nil))
+    (setq wl-message-cache-used nil)
+    (if wl-message-redisplay-func
+       (funcall wl-message-redisplay-func
+                folder number flag msgdb force-reload))))
+
+;; nil means don't fetch all.
+(defun wl-message-decide-backend (folder number message-id size)
+  (let ((dont-do-that (and 
+                      (not (setq wl-message-cache-used
+                                 (or
+                                  (elmo-buffer-cache-hit
+                                   (list folder number message-id))
+                                  (elmo-cache-exists-p message-id 
+                                                       folder number))))
+                      (integerp size)
+                      (not (elmo-local-file-p folder number))
+                      wl-fetch-confirm-threshold
+                      (>= size wl-fetch-confirm-threshold)
+                      (not (y-or-n-p 
+                            (format "Fetch entire message? (%dbytes)" 
+                                    size))))))
+    (message "")
+    (cond ((and dont-do-that
+               (eq (elmo-folder-number-get-type folder number) 'imap4)
+               (not (and (elmo-use-cache-p folder number)
+                         (elmo-cache-exists-p message-id folder number))))
+          'elmo-imap4)
+         (t (if (not dont-do-that) 'elmo)))))
+
+(defmacro wl-message-original-buffer-folder ()
+  wl-original-buffer-cur-folder)
+
+(defmacro wl-message-original-buffer-number ()
+  wl-original-buffer-cur-number)
+
+(defun wl-message-set-original-buffer-information (folder number)
+  (when (or (not (string= folder (or wl-original-buffer-cur-folder "")))
+           (not (eq number (or wl-original-buffer-cur-number 0))))
+    (setq wl-original-buffer-cur-folder folder)
+    (setq wl-original-buffer-cur-number number)))
+
+;; Works on FLIM-1.9.0/SEMI-1.8.2 or later (maybe).
+(defun wl-mmelmo-message-redisplay (folder number flag msgdb
+                                          &optional force-reload)
+  (let* ((cur-buf (current-buffer))
+        (view-message-buffer (wl-message-get-buffer-create))
+        (message-id (cdr (assq number 
+                               (elmo-msgdb-get-number-alist msgdb))))
+        (size (elmo-msgdb-overview-entity-get-size
+               (assoc message-id 
+                      (elmo-msgdb-get-overview msgdb))))
+        (backend (wl-message-decide-backend folder number message-id size))
+        cur-entity ret-val header-end real-fld-num summary-win)
+    (require 'mmelmo)
+    (wl-select-buffer view-message-buffer)
+    (set-buffer view-message-buffer)
+    (unwind-protect
+       (progn
+         (setq wl-message-buffer-cur-summary-buffer cur-buf)
+         (setq wl-message-buffer-cur-folder folder)
+         (setq wl-message-buffer-cur-number number)
+         (setq buffer-read-only nil)
+         (erase-buffer)
+         (if backend
+             (let (mime-display-header-hook ;; bind to nil...
+                   (mime-view-ignored-field-list 
+                    (if (eq flag 'all-header)
+                        nil
+                      mime-view-ignored-field-list))
+                   (mmelmo-force-reload force-reload)
+                   (mmelmo-imap4-threshold wl-fetch-confirm-threshold))
+               (setq real-fld-num (elmo-get-real-folder-number
+                                   folder number))
+               (setq cur-entity
+                     (wl-message-make-mime-entity
+                      backend 
+                      (if (eq backend 'elmo-imap4)
+                          (cdr real-fld-num)
+                        number)
+                      backend
+                      (if (eq backend 'elmo-imap4)
+                          (car real-fld-num)
+                        folder)
+                      msgdb))
+               (setq mmelmo-imap4-skipped-parts nil)
+               ;;; mime-display-message sets buffer-read-only variable as t.
+               ;;; which makes buffer read-only status confused...
+               (wl-mime-display-message cur-entity view-message-buffer
+                                        nil nil 'mmelmo-original-mode)
+               (if mmelmo-imap4-skipped-parts
+                   (progn
+                     (message "Skipped fetching of %s."
+                              (mapconcat 
+                               (lambda (x)
+                                 (format "[%s]" x))
+                               mmelmo-imap4-skipped-parts ","))))
+               (if (and (eq backend 'elmo-imap4)
+                        (null mmelmo-imap4-skipped-parts))
+                   (message "No required part was skipped."))
+               (setq ret-val (not (eq backend 'elmo-imap4))))
+           (message "Skipped fetching.")
+           (setq ret-val nil)))
+      (setq buffer-read-only nil)
+      (wl-message-set-original-buffer-information folder number)
+      (wl-message-overload-functions)
+      ;; highlight body
+      (when wl-highlight-body-too
+       (wl-highlight-body))
+      (condition-case ()
+         (wl-message-narrow-to-page)
+       (error nil));; ignore errors.
+      (setq mode-line-buffer-identification
+           (format "Wanderlust: << %s / %s >>"
+                   (if (memq 'modeline wl-use-folder-petname)
+                       (wl-folder-get-petname folder)
+                     folder) number))
+      (goto-char (point-min))
+      (unwind-protect
+         (save-excursion
+           (run-hooks 'wl-message-redisplay-hook))
+       ;; go back to summary mode
+       (set-buffer-modified-p nil)
+       (setq buffer-read-only t)
+       (set-buffer cur-buf)
+       (setq summary-win (get-buffer-window cur-buf))
+       (if (window-live-p summary-win)
+           (select-window summary-win))))
+    ret-val
+    ))
+
+(defun wl-normal-message-redisplay (folder number flag msgdb 
+                                          &optional force-reload)
+  (interactive)
+  (let* ((cur-buf (current-buffer))
+        (original-message-buffer (wl-message-get-original-buffer))
+        (view-message-buffer (wl-message-get-buffer-create))
+        (message-id (cdr (assq number 
+                               (elmo-msgdb-get-number-alist msgdb))))
+        (size (elmo-msgdb-overview-entity-get-size
+               (assoc message-id 
+                      (elmo-msgdb-get-overview msgdb))))
+        header-end ret-val summary-win
+        )
+    (wl-select-buffer view-message-buffer)
+    (unwind-protect
+       (progn
+         (setq wl-message-buffer-cur-summary-buffer cur-buf)
+         (setq wl-message-buffer-cur-folder folder)
+         (setq wl-message-buffer-cur-number number)
+         (setq buffer-read-only nil)
+         (erase-buffer)
+         (if (or (eq (elmo-folder-number-get-type folder number) 'localdir)
+                 (not (and (integerp size)
+                           wl-fetch-confirm-threshold
+                           (>= size wl-fetch-confirm-threshold)
+                           (not (elmo-cache-exists-p message-id 
+                                                     folder number))
+                           (not (y-or-n-p
+                                 (format "Fetch entire message? (%dbytes)" 
+                                         size))))))
+             (progn
+               (save-excursion
+                 (set-buffer original-message-buffer)
+                 (let ((buffer-read-only nil))
+                   (elmo-read-msg-with-buffer-cache
+                    folder number original-message-buffer msgdb force-reload)))
+               ;; decode MIME message.
+               (wl-message-decode 
+                view-message-buffer 
+                original-message-buffer flag)
+               (setq ret-val t))
+           (save-excursion
+             (set-buffer view-message-buffer)
+             (insert "\n\n"))))
+      (setq buffer-read-only nil)
+      (wl-message-set-original-buffer-information folder number)
+      (wl-message-overload-functions)
+      ;; highlight body
+      (and wl-highlight-body-too (wl-highlight-body))
+      (condition-case ()
+         (wl-message-narrow-to-page)
+       (error nil)) ; ignore errors.
+      (setq mode-line-buffer-identification
+           (format "Wanderlust: << %s / %s >>" 
+                   (if (memq 'modeline wl-use-folder-petname)
+                       (wl-folder-get-petname folder)
+                     folder)
+                   number))
+      (goto-char (point-min))
+      (unwind-protect
+         (run-hooks 'wl-message-redisplay-hook)
+       ;; go back to summary mode
+       (set-buffer-modified-p nil)      
+       (setq buffer-read-only t)
+       (set-buffer cur-buf)
+       (setq summary-win (get-buffer-window cur-buf))
+       (if (window-live-p summary-win)
+           (select-window summary-win)))
+      ret-val
+      )))
+
+(defun wl-message-refer-article-or-url (e)
+  "Read article specified by message-id around point. If failed,
+   attempt to execute button-dispatcher."
+  (interactive "e")
+  (let ((window (get-buffer-window (current-buffer)))
+       mouse-window point beg end msg-id)
+    (unwind-protect
+       (progn
+         (mouse-set-point e)
+         (setq mouse-window (get-buffer-window (current-buffer)))
+         (setq point (point))
+         (setq beg (save-excursion (beginning-of-line) (point)))
+         (setq end (save-excursion (end-of-line) (point)))
+         (search-forward ">" end t)      ;Move point to end of "<....>".
+         (if (and (re-search-backward "\\(<[^<> \t\n]+@[^<> \t\n]+>\\)" 
+                                      beg t)
+                  (not (string-match "mailto:" 
+                                     (setq msg-id (wl-match-buffer 1)))))
+             (progn
+               (goto-char point)
+               (switch-to-buffer-other-window 
+                wl-message-buffer-cur-summary-buffer)
+               (if (wl-summary-jump-to-msg-by-message-id msg-id)
+                   (wl-summary-redisplay)))
+           (wl-message-button-dispatcher e)))
+      (if (eq mouse-window (get-buffer-window (current-buffer)))
+         (select-window window)))))
+
+(defun wl-message-uu-substring (buf outbuf &optional first last)
+  (save-excursion
+    (set-buffer buf)
+    (search-forward "\n\n")
+    (let ((sp (point))
+         ep filename case-fold-search)
+      (if first
+         (progn
+           (re-search-forward "^begin[ \t]+[0-9]+[ \t]+\\([^ ].*\\)" nil t)
+           (setq filename (buffer-substring (match-beginning 1)(match-end 1))))
+       (re-search-forward "^M.*$" nil t)) ; uuencoded string
+      (beginning-of-line)
+      (setq sp (point))
+      (goto-char (point-max))
+      (if last
+         (re-search-backward "^end" sp t)
+        (re-search-backward "^M.*$" sp t)) ; uuencoded string
+      (forward-line 1)
+      (setq ep (point))
+      (set-buffer outbuf)
+      (goto-char (point-max))
+      (insert-buffer-substring buf sp ep)
+      (set-buffer buf)
+      filename)))
+
+;;; wl-message.el ends here
diff --git a/wl/wl-mime.el b/wl/wl-mime.el
new file mode 100644 (file)
index 0000000..f1fb91b
--- /dev/null
@@ -0,0 +1,369 @@
+;;; wl-mime.el -- SEMI implementations of MIME processing on Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-23 15:53:53 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'mime-view)
+(require 'mime-edit)
+(require 'mime-play)
+(require 'mmelmo)
+
+(eval-when-compile
+  (defun-maybe Meadow-version ())
+  (mapcar
+   (function
+    (lambda (symbol)
+      (unless (boundp symbol)
+       (set (make-local-variable symbol) nil))))
+   '(xemacs-betaname
+     xemacs-codename
+     enable-multibyte-characters
+     mule-version)))
+
+;;; Draft
+
+(defalias 'wl-draft-editor-mode 'mime-edit-mode)
+
+(defalias 'wl-draft-decode-message-in-buffer 
+  'mime-edit-decode-message-in-buffer)
+
+(defun wl-draft-yank-current-message-entity ()
+  "Yank currently displayed message entity. 
+By setting following-method as yank-content."
+  (let ((wl-draft-buffer (current-buffer))
+       (mime-view-following-method-alist 
+        (list (cons 'mmelmo-original-mode 
+                    (function wl-draft-yank-to-draft-buffer))))
+       (mime-preview-following-method-alist 
+        (list (cons 'mmelmo-original-mode
+                    (function wl-draft-yank-to-draft-buffer)))))
+    (if (get-buffer (wl-current-message-buffer))
+       (save-excursion
+         (save-restriction
+           (set-buffer (wl-current-message-buffer))
+           (widen)
+           (mime-preview-follow-current-entity))))))
+
+(defalias 'wl-draft-enclose-digest-region 'mime-edit-enclose-digest-region)
+
+;; SEMI 1.13.5 or later.
+;; (mime-display-message 
+;;  MESSAGE &optional 
+;;  PREVIEW-BUFFER MOTHER DEFAULT-KEYMAP-OR-FUNCTION ORIGINAL-MAJOR-MODE)
+;; SEMI 1.13.4 or earlier.
+;; (mime-display-message 
+;;  MESSAGE &optional 
+;;  PREVIEW-BUFFER MOTHER DEFAULT-KEYMAP-OR-FUNCTION)
+(static-if (or (and mime-user-interface-product
+                   (eq (nth 0 (aref mime-user-interface-product 1)) 1)
+                   (>= (nth 1 (aref mime-user-interface-product 1)) 14))
+              (and mime-user-interface-product
+                   (eq (nth 0 (aref mime-user-interface-product 1)) 1)
+                   (eq (nth 1 (aref mime-user-interface-product 1)) 13)
+                   (>= (nth 2 (aref mime-user-interface-product 1)) 5)))
+    ;; Has original-major-mode optional argument.
+    (defalias 'wl-mime-display-message 'mime-display-message)
+  (defmacro wl-mime-display-message (message &optional
+                                            preview-buffer mother
+                                            default-keymap-or-function
+                                            original-major-mode)
+    (` (mime-display-message (, message) (, preview-buffer) (, mother)
+                            (, default-keymap-or-function))))
+  ;; User agent field of XEmacs has problem on SEMI 1.13.4 or earlier.
+  (setq mime-edit-user-agent-value
+       (concat 
+        (mime-product-name mime-user-interface-product) "/"
+        (mapconcat 
+         #'number-to-string
+         (mime-product-version mime-user-interface-product) ".")
+        " (" (mime-product-code-name mime-user-interface-product)
+        ") " (mime-product-name mime-library-product)
+        "/" (mapconcat #'number-to-string
+                       (mime-product-version mime-library-product) ".")
+        " (" (mime-product-code-name mime-library-product) ") "
+        (if (featurep 'xemacs)
+            (concat 
+             (if (featurep 'mule) "MULE")
+             " XEmacs"
+             (if (string-match "\\s +\\((\\|\\\"\\)" emacs-version)
+                 (concat "/" (substring emacs-version 0
+                                        (match-beginning 0))
+                         (if (and (boundp 'xemacs-betaname)
+                                  ;; It does not exist in XEmacs
+                                  ;; versions prior to 20.3.
+                                  xemacs-betaname)
+                             (concat " " xemacs-betaname)
+                           "")
+                         " (" xemacs-codename ") ("
+                         system-configuration ")")
+               " (" emacs-version ")"))
+          (let ((ver (if (string-match "\\.[0-9]+$" emacs-version)
+                         (substring emacs-version 0 (match-beginning 0))
+                       emacs-version)))
+            (if (featurep 'mule)
+                (if (boundp 'enable-multibyte-characters)
+                    (concat "Emacs/" ver
+                            " (" system-configuration ")"
+                            (if enable-multibyte-characters
+                                (concat " MULE/" mule-version)
+                              " (with unibyte mode)")
+                            (if (featurep 'meadow)
+                                (let ((mver (Meadow-version)))
+                                  (if (string-match "^Meadow-" mver)
+                                      (concat " Meadow/"
+                                              (substring mver
+                                                         (match-end 0)))))))
+                  (concat "MULE/" mule-version
+                          " (based on Emacs " ver ")"))
+              (concat "Emacs/" ver " (" system-configuration ")")))))))
+
+;; FLIM 1.12.7
+;; (mime-read-field FIELD-NAME &optional ENTITY)
+;; FLIM 1.13.2 or later
+;; (mime-entity-read-field ENTITY FIELD-NAME)
+(static-if (fboundp 'mime-entity-read-field)
+    (defalias 'wl-mime-entity-read-field 'mime-entity-read-field)
+  (defmacro wl-mime-entity-read-field (entity field-name)
+    (` (mime-read-field (, field-name) (, entity)))))
+
+(defun wl-draft-preview-message ()
+  (interactive)
+  (let ((mime-display-header-hook 'wl-highlight-headers)
+       mime-view-ignored-field-list ; all header.
+       (mime-edit-translate-buffer-hook (append
+                                         (list 'wl-draft-config-exec)
+                                         mime-edit-translate-buffer-hook)))
+    (mime-edit-preview-message)
+    (let ((buffer-read-only nil))
+      (when wl-highlight-body-too 
+       (wl-highlight-body))
+      (run-hooks 'wl-draft-preview-message-hook))))
+
+(defalias 'wl-draft-caesar-region  'mule-caesar-region)
+
+(defalias 'wl-draft-insert-message 'mime-edit-insert-message)
+
+(defalias 'wl-draft-insert-mail 'mime-edit-insert-mail)
+
+;;; Message
+
+(defun wl-message-decode-mode (outbuf inbuf)
+  (let ((mime-view-content-header-filter-hook 'wl-highlight-headers)
+       (mime-display-header-hook 'wl-highlight-headers))
+    (mime-view-mode nil nil nil inbuf outbuf)))
+
+(defun wl-message-decode-with-all-header (outbuf inbuf)
+  (let ((mime-view-ignored-field-regexp "^:$")
+       (mime-view-content-header-filter-hook 'wl-highlight-headers)
+       (mime-display-header-hook 'wl-highlight-headers)
+       mime-view-ignored-field-list)
+    (mime-view-mode nil nil nil inbuf outbuf)))
+
+(defun wl-message-delete-mime-out-buf ()
+  (let (mime-out-buf mime-out-win)
+    (if (setq mime-out-buf (get-buffer mime-echo-buffer-name))
+       (if (setq mime-out-win (get-buffer-window mime-out-buf))
+           (delete-window mime-out-win)))))
+
+(defun wl-message-request-partial (folder number msgdb)
+  (elmo-set-work-buf
+   (elmo-read-msg-no-cache folder number (current-buffer) msgdb)
+   (mime-parse-buffer nil))); 'mime-buffer-entity)))
+
+(defalias 'wl-message-read            'mime-preview-scroll-up-entity)
+(defalias 'wl-message-next-content    'mime-preview-move-to-next)
+(defalias 'wl-message-prev-content    'mime-preview-move-to-previous)
+(defalias 'wl-message-play-content    'mime-preview-play-current-entity)
+(defalias 'wl-message-extract-content 'mime-preview-extract-current-entity)
+(defalias 'wl-message-quit            'mime-preview-quit)
+(defalias 'wl-message-button-dispatcher 'mime-button-dispatcher)
+
+;;; Summary
+(defun wl-summary-burst ()
+  (interactive)
+  (let ((raw-buf (wl-message-get-original-buffer))
+       (i 0)
+       target 
+       children message-entity content-type)
+    (save-excursion
+      (setq target wl-summary-buffer-folder-name)
+      (while (not (elmo-folder-writable-p target))
+       (setq target 
+             (wl-summary-read-folder wl-default-folder "to extract to")))
+      (wl-summary-set-message-buffer-or-redisplay)
+      (save-excursion
+       (set-buffer (get-buffer wl-message-buf-name))
+       (setq message-entity (get-text-property (point-min) 'mime-view-entity)))
+      (set-buffer raw-buf)
+      (setq children (mime-entity-children message-entity))
+      (message "Bursting...")
+      (while children
+       (setq content-type (mime-entity-content-type (car children)))
+       (when (and (eq (cdr (assq 'type content-type)) 'message)
+                  (eq (cdr (assq 'subtype content-type)) 'rfc822))
+         (message (format "Bursting...%s" (setq i (+ 1 i))))
+         (setq message-entity
+               (car (mime-entity-children (car children))))
+         (save-restriction
+           (narrow-to-region (mime-entity-point-min message-entity)
+                             (mime-entity-point-max message-entity))
+           (elmo-append-msg target
+                            ;;(mime-entity-content (car children))))
+                            (buffer-substring (point-min) (point-max))
+                            (std11-field-body "Message-ID"))))
+       (setq children (cdr children)))
+      (message "Bursting...done."))
+    (if (elmo-folder-plugged-p target)
+       (elmo-commit target))
+    (wl-summary-sync-update3)))
+
+
+;; internal variable.
+(defvar wl-mime-save-dir nil "Last saved directory.")
+;;; Yet another save method.
+(defun wl-mime-save-content (entity situation)
+  (let ((filename (read-file-name "Save to file: "
+                                 (expand-file-name 
+                                  (or (mime-entity-safe-filename entity)
+                                      ".")
+                                  (or wl-mime-save-dir
+                                      wl-tmp-dir)))))
+    (while (file-directory-p filename)
+      (setq filename (read-file-name "Please set filename (not directory): "
+                                    filename)))
+    (if (file-exists-p filename)
+       (or (yes-or-no-p (format "File %s exists. Save anyway? " filename))
+           (error "Not saved")))
+    (setq wl-mime-save-dir (file-name-directory filename))
+    (mime-write-entity-content entity filename)))
+
+;;; Yet another combine method.
+(defun wl-mime-combine-message/partial-pieces (entity situation)
+  "Internal method for wl to combine message/partial messages
+automatically."
+  (interactive)
+  (let* ((msgdb (save-excursion 
+                 (set-buffer wl-message-buffer-cur-summary-buffer)
+                 wl-summary-buffer-msgdb))
+        (mime-display-header-hook 'wl-highlight-headers)
+        (folder wl-message-buffer-cur-folder)
+        (id (or (cdr (assoc "id" situation)) ""))
+        (mother (current-buffer))
+        subject-id overviews
+        (root-dir (expand-file-name
+                   (concat "m-prts-" (user-login-name))
+                   temporary-file-directory))
+        full-file)
+    (setq root-dir (concat root-dir "/" (replace-as-filename id)))
+    (setq full-file (concat root-dir "/FULL"))
+    (if (or (file-exists-p full-file)
+           (not (y-or-n-p "Merge partials?")))
+       (with-current-buffer mother
+         (mime-store-message/partial-piece entity situation))
+      (setq subject-id 
+           (eword-decode-string
+            (decode-mime-charset-string 
+             (wl-mime-entity-read-field entity 'Subject)
+             wl-summary-buffer-mime-charset)))
+      (if (string-match "[0-9\n]+" subject-id)
+         (setq subject-id (substring subject-id 0 (match-beginning 0))))
+      (setq overviews (elmo-msgdb-get-overview msgdb))
+      (catch 'tag
+       (while overviews
+         (when (string-match
+                (regexp-quote subject-id)
+                (elmo-msgdb-overview-entity-get-subject (car overviews)))
+           (let* ((message
+                   ;; request message at the cursor in Subject buffer.
+                   (wl-message-request-partial
+                    folder
+                    (elmo-msgdb-overview-entity-get-number (car overviews))
+                    msgdb))
+                  (situation (mime-entity-situation message))
+                  (the-id (or (cdr (assoc "id" situation)) "")))
+             (when (string= (downcase the-id) 
+                            (downcase id))
+               (with-current-buffer mother
+                 (mime-store-message/partial-piece message situation))
+               (if (file-exists-p full-file)
+                   (throw 'tag nil)))))
+         (setq overviews (cdr overviews)))
+       (message "Not all partials found.")))))
+
+;;; Setup methods.
+(defun wl-mime-setup ()
+  (set-alist 'mime-preview-quitting-method-alist
+            'mmelmo-original-mode 'wl-message-exit)
+  (set-alist 'mime-view-over-to-previous-method-alist
+            'mmelmo-original-mode 'wl-message-exit)
+  (set-alist 'mime-view-over-to-next-method-alist 
+            'mmelmo-original-mode 'wl-message-exit)
+  (set-alist 'mime-preview-over-to-previous-method-alist
+            'mmelmo-original-mode 'wl-message-exit)
+  (set-alist 'mime-preview-over-to-next-method-alist
+            'mmelmo-original-mode 'wl-message-exit)
+  (add-hook 'wl-summary-redisplay-hook 'wl-message-delete-mime-out-buf)
+  (add-hook 'wl-message-exit-hook 'wl-message-delete-mime-out-buf)
+
+  (ctree-set-calist-strictly
+   'mime-acting-condition
+   '((type . message) (subtype . partial)
+     (method .  wl-mime-combine-message/partial-pieces)
+     (request-partial-message-method . wl-message-request-partial)
+     (major-mode . mmelmo-original-mode)))
+  (ctree-set-calist-strictly
+   'mime-acting-condition
+   '((mode . "extract")
+     (major-mode . mmelmo-original-mode)
+     (method . wl-mime-save-content)))
+  (set-alist 'mime-preview-following-method-alist 
+            'mmelmo-original-mode
+            (function wl-message-follow-current-entity))
+  (set-alist 'mime-view-following-method-alist 
+            'mmelmo-original-mode
+            (function wl-message-follow-current-entity))
+  (set-alist 'mime-edit-message-inserter-alist
+            'wl-draft-mode (function wl-draft-insert-current-message))
+  (set-alist 'mime-edit-mail-inserter-alist
+            'wl-draft-mode (function wl-draft-insert-get-message))
+  (set-alist 'mime-edit-split-message-sender-alist
+            'wl-draft-mode 
+            (cdr (assq 'mail-mode mime-edit-split-message-sender-alist)))
+  (set-alist 'mime-raw-representation-type-alist
+            'mmelmo-original-mode 'binary)
+  ;; Sort and highlight header fields.
+  (setq mmelmo-sort-field-list wl-message-sort-field-list)
+  (add-hook 'mmelmo-header-inserted-hook 'wl-highlight-headers)
+  (add-hook 'mmelmo-entity-content-inserted-hook 'wl-highlight-body))
+  
+
+(provide 'wl-mime)
+
+;;; wl-mime.el ends here
diff --git a/wl/wl-mule.el b/wl/wl-mule.el
new file mode 100644 (file)
index 0000000..e4e85cf
--- /dev/null
@@ -0,0 +1,299 @@
+;;; wl-mule.el -- Wanderlust modules for Mule compatible Emacsen.
+;;                (Mule2.3@19.28, Mule2.3@19.34, Emacs 20.x)
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-22 15:57:29 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(eval-when-compile
+  (require 'wl-folder)
+  (require 'wl-summary)
+  (require 'wl-draft)
+  (require 'wl-message)
+  (require 'wl-highlight)
+  (require 'wl-vars)
+  (defvar-maybe wl-draft-mode-map (make-sparse-keymap)))
+
+(defun wl-draft-mode-setup ()
+  (require 'derived)
+  (define-derived-mode wl-draft-mode mail-mode "Draft"
+    "draft mode for Wanderlust derived from mail mode.
+See info under Wanderlust for full documentation.
+
+Special commands:
+\\{wl-draft-mode-map}"))
+
+;; Common implementations.
+(defun wl-highlight-folder-current-line (&optional numbers)
+  "Highlight current folder line."
+  (interactive)
+  (save-excursion
+    (let ((highlights (list "opened" "closed"))
+         (inhibit-read-only t)
+         (fld-name (wl-folder-get-folder-name-by-id
+                    (get-text-property (point) 'wl-folder-entity-id)))
+         fregexp fsymbol bol eol matched type extent num type)
+      (beginning-of-line)
+      (setq bol (point))
+      (save-excursion (end-of-line) (setq eol (point)))
+      (if (and numbers (nth 0 numbers) (nth 1 numbers))
+         (progn
+           (setq fsymbol 
+                 (let ((unsync (nth 0 numbers))
+                       (unread (nth 1 numbers)))
+                   (cond ((and unsync (eq unsync 0))
+                          (if (and unread (> unread 0))
+                              'wl-highlight-folder-unread-face
+                            'wl-highlight-folder-zero-face))
+                         ((and unsync 
+                               (>= unsync wl-folder-many-unsync-threshold))
+                          'wl-highlight-folder-many-face)
+                         (t
+                          'wl-highlight-folder-few-face))))
+           (put-text-property bol eol 'face fsymbol)
+           (setq matched t)))
+      (catch 'highlighted
+       (while highlights
+         (setq fregexp (symbol-value 
+                        (intern (format "wl-highlight-folder-%s-regexp" 
+                                        (car highlights)))))
+         (if (not wl-highlight-group-folder-by-numbers)
+             (setq fsymbol (intern (format "wl-highlight-folder-%s-face"
+                                           (car highlights)))))
+         (when (looking-at fregexp)
+           (put-text-property bol eol 'face fsymbol)
+           (setq matched t)
+           (throw 'highlighted nil))
+         (setq highlights (cdr highlights))))
+      (if (not matched)
+         (if (looking-at (format "^[ ]*\\(%s\\|%s\\)"
+                                 wl-folder-unsubscribe-mark
+                                 wl-folder-removed-mark))
+             (put-text-property bol eol 'face
+                                'wl-highlight-folder-killed-face)
+           (put-text-property bol eol 'face
+                              'wl-highlight-folder-unknown-face)))
+      (if wl-use-highlight-mouse-line 
+         (wl-highlight-folder-mouse-line)))))
+  
+(defun wl-highlight-plugged-current-line ())
+(defun wl-plugged-set-folder-icon (folder string)
+  string)
+
+(defun wl-folder-init-icons ()) ; dummy.
+(defun wl-plugged-init-icons ()) ; dummy.
+
+(defun wl-xmas-setup-folder ()) ; dummy
+(defun wl-xmas-setup-summary ())
+(defun wl-xmas-setup-draft-toolbar ())
+
+(defun wl-message-overload-functions ()
+  (local-set-key "l" 'wl-message-toggle-disp-summary)
+  (local-set-key [mouse-2] 'wl-message-refer-article-or-url)
+  (local-set-key [mouse-4] 'wl-message-wheel-down)
+  (local-set-key [mouse-5] 'wl-message-wheel-up)
+  (local-set-key [S-mouse-4] 'wl-message-wheel-down)
+  (local-set-key [S-mouse-5] 'wl-message-wheel-up))
+
+(defun wl-message-wheel-up (event)
+  (interactive "e")
+  (if (string-match wl-message-buf-name (buffer-name))
+      (wl-message-next-page)
+    (let ((cur-buf (current-buffer))
+         proceed)
+      (save-selected-window
+       (select-window (posn-window (event-start event)))
+       (set-buffer cur-buf)
+       (setq proceed (wl-message-next-page)))
+      (if proceed
+         (if (memq 'shift (event-modifiers event))
+             (wl-summary-down t)
+           (wl-summary-next t))))))
+
+(defun wl-message-wheel-down (event)
+  (interactive "e")
+  (if (string-match wl-message-buf-name (buffer-name))
+      (wl-message-prev-page)
+    (let ((cur-buf (current-buffer))
+         proceed)
+      (save-selected-window
+       (select-window (posn-window (event-start event)))
+       (set-buffer cur-buf)
+       (setq proceed (wl-message-prev-page)))
+      (if proceed
+         (if (memq 'shift (event-modifiers event))
+             (wl-summary-up t)
+           (wl-summary-prev t))))))
+
+(defun wl-draft-key-setup ()
+  (define-key wl-draft-mode-map "\C-c\C-y" 'wl-draft-yank-original)
+  (define-key wl-draft-mode-map "\C-c\C-a" 'wl-draft-insert-x-face-field)
+  (define-key wl-draft-mode-map "\C-c\C-s" 'wl-draft-send)
+  (define-key wl-draft-mode-map "\C-c\C-c" 'wl-draft-send-and-exit)
+  (define-key wl-draft-mode-map "\C-c\C-z" 'wl-draft-save-and-exit)
+  (define-key wl-draft-mode-map "\C-c\C-k" 'wl-draft-kill)
+  (define-key wl-draft-mode-map "\C-l"     'wl-draft-highlight-and-recenter)
+  (define-key wl-draft-mode-map "\C-i"     'wl-complete-field-body-or-tab)
+  (define-key wl-draft-mode-map "\C-c\C-r" 'wl-draft-caesar-region)
+  (define-key wl-draft-mode-map "\M-t"     'wl-toggle-plugged)
+  (define-key wl-draft-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
+  (define-key wl-draft-mode-map "\C-c\C-e" 'wl-draft-config-exec)
+  (define-key wl-draft-mode-map "\C-c\C-j" 'wl-template-select)
+  (define-key wl-draft-mode-map "\C-c\C-p" 'wl-draft-preview-message)
+  (define-key wl-draft-mode-map "\C-x\C-s" 'wl-draft-save)
+  (define-key wl-draft-mode-map "\C-xk" 'wl-draft-mimic-kill-buffer))
+
+(defun wl-draft-overload-menubar ()
+  (local-set-key [menu-bar mail send]
+    '("Send Message" . wl-draft-send-and-exit))
+  (local-set-key [menu-bar mail send-stay]
+    '("Send, Keep Editing" . wl-draft-send))
+  (local-set-key [menu-bar mail cancel]
+    '("Kill Current Draft" . wl-draft-kill))
+  (local-set-key [menu-bar mail yank]
+    '("Cite Message" . wl-draft-yank-original))
+  (local-set-key [menu-bar mail signature]
+    '("Insert Signature" . insert-signature))
+  (local-set-key [menu-bar headers fcc]
+    '("FCC" . wl-draft-fcc)))
+
+(defun wl-draft-overload-functions ()
+  (setq mode-line-buffer-identification
+       (format "Wanderlust: %s" (buffer-name)))
+  (local-set-key "\C-c\C-s" 'wl-draft-send)    ; override
+  (wl-draft-overload-menubar)
+  (when wl-show-plug-status-on-modeline
+    (setq mode-line-format (wl-make-modeline))))
+
+(defalias 'wl-make-modeline 'wl-make-modeline-subr)
+
+;; for "ja-mule-canna-2.3.mini" on PocketBSD
+(defun-maybe make-face (a))
+
+(eval-when-compile 
+  (require 'static))
+(static-cond
+ ((and (fboundp 'defface)
+       (not (featurep 'tinycustom)))
+  (defalias 'wl-defface 'defface)
+  (eval-when-compile
+    (defun wl-face-spec-set-match-display (display frame))
+    (defun wl-frame-parameter (frame property &optional default))
+    (defun wl-get-frame-properties (&optional frame))))
+ (t
+  (defmacro wl-defface (face spec doc &rest args)
+    (nconc (list 'wl-declare-face (list 'quote face) spec)))
+
+  (defun wl-declare-face (face spec)
+    (make-face face)
+    (while spec
+      (let* ((entry (car spec))
+            (display (nth 0 entry))
+            (atts (nth 1 entry)))
+       (setq spec (cdr spec))
+       (when (wl-face-spec-set-match-display display nil)
+         (apply 'wl-face-attributes-set face nil atts)))))
+
+  (defconst wl-face-attributes
+    '((:bold set-face-bold-p)
+      (:italic set-face-italic-p)
+      (:underline set-face-underline-p)
+      (:foreground set-face-foreground)
+      (:background set-face-background)
+      (:stipple set-face-stipple)))
+
+  (defun wl-face-attributes-set (face frame &rest atts)
+    "For FACE on FRAME set the attributes [KEYWORD VALUE]....
+Each keyword should be listed in `custom-face-attributes'.
+
+If FRAME is nil, set the default face."
+    (while atts 
+      (let* ((name (nth 0 atts))
+            (value (nth 1 atts))
+            (fun (nth 1 (assq name wl-face-attributes))))
+       (setq atts (cdr (cdr atts)))
+       (condition-case nil
+           (funcall fun face value frame)
+         (error nil)))))
+
+  (defun wl-frame-parameter (frame property &optional default)
+    "Return FRAME's value for property PROPERTY."
+    (or (cdr (assq property (frame-parameters frame)))
+       default))
+
+  (eval-when-compile
+    (defun-maybe x-display-grayscale-p ()))
+
+  (defun wl-get-frame-properties (&optional frame)
+    "Return a plist with the frame properties of FRAME used by custom."
+    (list (cons 'type window-system)
+         (cons 'class (or (wl-frame-parameter frame 'display-type)
+                          (when window-system
+                            (cond ((x-display-color-p)
+                                   'color)
+                                  ((and (fboundp 'x-display-grayscale-p)
+                                        (x-display-grayscale-p))
+                                   'grayscale)
+                                  (t 'mono)))))
+         (cons 'background (or (wl-frame-parameter frame 'background-mode)
+                               wl-highlight-background-mode))))
+
+  (defun wl-face-spec-set-match-display (display frame)
+    "Non-nil iff DISPLAY matches FRAME.
+If FRAME is nil, the current FRAME is used."
+    ;; This is a kludge to get started, we really should use specifiers!
+    (if (eq display t)
+       t
+      (let* ((props (wl-get-frame-properties frame))
+            (type (cdr (assq 'type props)))
+            (class (cdr (assq 'class props)))
+            (background (cdr (assq 'background props)))
+            (match t)
+            (entries display)
+            entry req options)
+       (while (and entries match)
+         (setq entry (car entries)
+               entries (cdr entries)
+               req (car entry)
+               options (cdr entry)
+               match (cond ((eq req 'type)
+                            (memq type options))
+                           ((eq req 'class)
+                            (memq class options))
+                           ((eq req 'background)
+                            (memq background options))
+                           (t
+                            (message (format "\
+Warning: Unknown req `%S' with options `%S'" req options))
+                            nil))))
+       match)))))
+
+(provide 'wl-mule)
+
+;;; wl-mule.el ends here
diff --git a/wl/wl-nemacs.el b/wl/wl-nemacs.el
new file mode 100644 (file)
index 0000000..4a28f3e
--- /dev/null
@@ -0,0 +1,172 @@
+;;; wl-nemacs.el -- Wanderlust modules for Nemacs.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-22 15:57:31 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(defun wl-xmas-setup-folder ()) ; dummy
+(defun wl-xmas-setup-summary ())
+(defun wl-xmas-setup-draft-toolbar ())
+
+(defun wl-summary-setup-mouse ())
+(defun wl-message-overload-functions ()
+  (local-set-key "l" 'wl-message-toggle-disp-summary))
+
+(defun wl-message-wheel-up (event)
+  (interactive "e"))
+(defun wl-message-wheel-down (event)
+  (interactive "e"))
+
+(defun wl-highlight-folder-current-line (&optional numbers))
+(defun wl-highlight-folder-path (folder-path))
+(defun wl-highlight-summary (start end))
+(defun wl-highlight-folder-group-line (numbers))
+(defun wl-highlight-summary-line-string (line mark indent before-indent))
+(defun wl-highlight-body-region (beg end))
+(defun wl-highlight-message (start end hack-sig &optional body-only))
+(defun wl-delete-all-overlays ())
+(defun wl-highlight-summary-current-line (&optional smark regexp temp-too))
+
+(defun wl-highlight-plugged-current-line ())
+(defun wl-plugged-set-folder-icon (folder string)
+  string)
+
+(defun wl-folder-init-icons ()) ; dummy.
+(defun wl-plugged-init-icons ()) ; dummy.
+
+(defmacro wl-defface (face spec doc &rest args)
+  (` (defvar (, face) (, spec) (, doc))))
+
+(defsubst elmo-archive-call-process (prog args &optional output)
+  (apply 'call-process prog nil output nil args)
+  0)
+
+(defun wl-draft-mode-setup ()
+  (defalias 'wl-draft-mode 'mail-mode))
+(defun wl-draft-key-setup ())
+
+;; ??? 
+(defvar mime-article/kanji-code-alist
+  (list (cons t (mime-charset-to-coding-system default-mime-charset))))
+
+(defun wl-draft-overload-functions ()
+  (setq mode-line-buffer-identification
+       (format "Wanderlust: %s" (buffer-name)))
+  (local-set-key "\C-c\C-y" 'wl-draft-yank-original)
+  (local-set-key "\C-c\C-s" 'wl-draft-send)
+  (local-set-key "\C-c\C-a" 'wl-draft-insert-x-face-field)
+  (local-set-key "\C-c\C-c" 'wl-draft-send-and-exit)
+  (local-set-key "\C-c\C-z" 'wl-draft-save-and-exit)
+  (local-set-key "\C-c\C-k" 'wl-draft-kill)
+  (local-set-key "\C-l"     'wl-draft-highlight-and-recenter)
+  (local-set-key "\C-i"     'wl-complete-field-body-or-tab)
+  (local-set-key "\C-c\C-r" 'wl-draft-caesar-region)
+  (local-set-key "\M-t"     'wl-toggle-plugged)
+  (local-set-key "\C-c\C-o" 'wl-jump-to-draft-buffer)
+  (local-set-key "\C-c\C-j" 'wl-template-select)
+  (local-set-key "\C-c\C-p" 'wl-draft-preview-message)
+  (local-set-key "\C-x\C-s" 'wl-draft-save)
+  (local-set-key "\C-xk"    'wl-draft-mimic-kill-buffer)
+  (when wl-show-plug-status-on-modeline
+    (set (make-variable-buffer-local 'mode-line-format) (wl-make-modeline))))
+
+(defalias 'wl-make-modeline 'wl-make-modeline-subr)
+
+;;; Emulations.
+
+(defvar-maybe user-mail-address nil)
+(defvar-maybe mail-send-actions nil)
+(defvar-maybe mail-default-headers nil)
+(defvar-maybe mail-citation-hook nil)
+(defvar-maybe mail-yank-hooks nil)
+(defvar-maybe mail-mailer-swallows-blank-line nil)
+
+(defvar mail-send-actions nil)
+
+(defun-maybe mail-indent-citation ()
+  "Modify text just inserted from a message to be cited.
+The inserted text should be the region.
+When this function returns, the region is again around the modified text.
+
+Normally, indent each nonblank line `mail-indentation-spaces' spaces.
+However, if `mail-yank-prefix' is non-nil, insert that prefix on each line."
+  (let ((start (point)))
+    (mail-yank-clear-headers start (mark t))
+    (if (null mail-yank-prefix)
+       (indent-rigidly start (mark t) mail-indentation-spaces)
+      (save-excursion
+       (goto-char start)
+       (while (< (point) (mark t))
+         (insert mail-yank-prefix)
+         (forward-line 1))))))
+
+(defun-maybe mail-yank-clear-headers (start end)
+  (save-excursion
+    (goto-char start)
+    (if (search-forward "\n\n" end t)
+       (save-restriction
+         (narrow-to-region start (point))
+         (goto-char start)
+         (while (let ((case-fold-search t))
+                  (re-search-forward mail-yank-ignored-headers nil t))
+           (beginning-of-line)
+           (delete-region (point)
+                          (progn (re-search-forward "\n[^ \t]")
+                                 (forward-char -1)
+                                 (point))))))))
+
+(defun-maybe find-file-name-handler (filename operation))
+
+(defun-maybe read-event ()
+  (setq unread-command-events 
+       (if (fboundp 'read-char-exclusive)
+           (read-char-exclusive)
+         ;; XXX Emacs18.59 does not have read-char-exclusive().
+         (read-char))))
+
+(defmacro easy-menu-define (a b c d)
+  (` (defvar (, a) nil (, c))))
+(defmacro easy-menu-add (a)
+  (` nil))
+
+(defun copy-face (a b))
+(defun make-face (a))
+(defun set-face-foreground (a b))
+(defun set-face-background (a b))
+(defun set-face-underline-p (a b))
+(defun set-face-font (a b))
+
+;;; XXX cl's member() brings evil upon MIME-View.
+;; cl is always called after poe-18, so `(require 'poe-18)' is
+;; a dead duck... We MUST re-load it certainly.
+(load-library "poe-18")
+
+(provide 'wl-nemacs)
+
+;;; wl-nemacs.el ends here
diff --git a/wl/wl-refile.el b/wl/wl-refile.el
new file mode 100644 (file)
index 0000000..836fe54
--- /dev/null
@@ -0,0 +1,204 @@
+;;; wl-refile.el -- Refile modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/23 19:07:28 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-vars)
+(require 'wl-util)
+(provide 'wl-refile)
+
+
+(defvar wl-refile-alist nil)
+(defvar wl-refile-alist-file-name "refile-alist")
+;; should be renamed to "refile-from-alist"
+(defvar wl-refile-msgid-alist nil)
+(defvar wl-refile-msgid-alist-file-name "refile-msgid-alist")
+
+(defvar wl-refile-alist-max-length 1000)
+
+(defun wl-refile-alist-setup ()
+  (setq wl-refile-alist
+       (elmo-object-load
+        (expand-file-name wl-refile-alist-file-name
+                          elmo-msgdb-dir)))
+  (setq wl-refile-msgid-alist
+       (elmo-object-load
+        (expand-file-name wl-refile-msgid-alist-file-name
+                          elmo-msgdb-dir))))
+
+(defun wl-refile-alist-save (file-name alist)
+  (save-excursion
+    (let ((filename (expand-file-name file-name
+                                     elmo-msgdb-dir))
+         (tmp-buffer (get-buffer-create " *wl-refile-alist-tmp*")))
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (if (> (length alist) wl-refile-alist-max-length)
+         (setcdr (nthcdr (1- wl-refile-alist-max-length) alist) nil))
+      (prin1 alist tmp-buffer)
+      (princ "\n" tmp-buffer)
+      (if (file-writable-p filename)
+         (write-region (point-min) (point-max) 
+                       filename nil 'no-msg)
+       (message (format "%s is not writable." filename)))
+      (kill-buffer tmp-buffer))))
+
+(defun wl-refile-learn (entity dst)
+  (let (tocc-list from key hit ml)
+    (setq dst (elmo-string dst))
+    (setq tocc-list 
+         (mapcar (function
+                  (lambda (entity) 
+                    (downcase (wl-address-header-extract-address entity))))
+                 (wl-parse-addresses 
+                  (concat
+                   (elmo-msgdb-overview-entity-get-to entity) ","
+                   (elmo-msgdb-overview-entity-get-cc entity)))))
+    (while tocc-list
+      (if (wl-string-member 
+          (car tocc-list) 
+          (mapcar (function downcase) wl-subscribed-mailing-list))
+         (setq ml (car tocc-list)
+               tocc-list nil)
+       (setq tocc-list (cdr tocc-list))))
+    (if ml
+       (setq key ml) ; subscribed entity!!
+      (or (wl-address-user-mail-address-p
+          (setq from 
+                (downcase 
+                 (wl-address-header-extract-address
+                  (elmo-msgdb-overview-entity-get-from 
+                   entity)))))
+         (setq key from)))
+    (if (not ml)
+       (wl-refile-msgid-learn entity dst))
+    (if key
+       (if (setq hit (assoc key wl-refile-alist))
+           (setcdr hit dst)
+         (setq wl-refile-alist
+               (nconc wl-refile-alist (list (cons key dst))))))))
+
+(defun wl-refile-msgid-learn (entity dst)
+  (let ((key (elmo-msgdb-overview-entity-get-id entity))
+       hit)
+    (setq dst (elmo-string dst))
+    (if key
+       (if (setq hit (assoc key wl-refile-msgid-alist))
+           (setcdr hit dst)
+         (setq wl-refile-msgid-alist (cons (cons key dst)
+                                           wl-refile-msgid-alist))))))
+
+;;
+;; refile guess
+;;
+(defvar wl-refile-guess-func-list
+  '(wl-refile-guess-by-rule
+    wl-refile-guess-by-msgid
+    wl-refile-guess-by-history)
+  "*Functions in this list are used for guessing refile destination folder.")
+
+(defun wl-refile-guess (entity)
+  (let ((flist wl-refile-guess-func-list) guess)
+    (while flist
+      (if (setq guess (funcall (car flist) entity))
+         (setq flist nil)
+       (setq flist (cdr flist))))
+    guess))
+
+(defun wl-refile-guess-by-rule (entity)
+  (let ((rules wl-refile-rule-alist)
+       (rule-set) (field) (field-cont))
+    (catch 'found
+      (while rules
+       (setq rule-set (cdr (car rules))
+             field (car (car rules)))
+       (cond ((string-match field "From")
+              (setq field-cont
+                    (elmo-msgdb-overview-entity-get-from entity)))
+             ((string-match field "Subject")
+              (setq field-cont
+                    (elmo-msgdb-overview-entity-get-subject entity)))
+             ((string-match field "To")
+              (setq field-cont
+                    (elmo-msgdb-overview-entity-get-to entity)))
+             ((string-match field "Cc")
+              (setq field-cont
+                    (elmo-msgdb-overview-entity-get-cc entity)))
+             (t
+              (setq field-cont
+                    (elmo-msgdb-overview-entity-get-extra-field
+                     entity (downcase field)))))
+       (if field-cont
+           (while rule-set
+             (if (string-match (car (car rule-set)) field-cont)
+                 (throw 'found (cdr (car rule-set)))
+               (setq rule-set (cdr rule-set)))))
+       (setq rules (cdr rules))))))
+
+(defun wl-refile-guess-by-history (entity)
+  (let ((tocc-list 
+        (mapcar (function
+                 (lambda (entity)
+                   (downcase (wl-address-header-extract-address entity))))
+                (wl-parse-addresses 
+                 (concat
+                  (elmo-msgdb-overview-entity-get-to entity) ","
+                  (elmo-msgdb-overview-entity-get-cc entity)))))
+       ret-val)
+    (setq tocc-list (elmo-list-delete
+                    (or wl-user-mail-address-list
+                        (list (wl-address-header-extract-address wl-from)))
+                    tocc-list))
+    (while tocc-list
+      (if (setq ret-val (cdr (assoc (car tocc-list) wl-refile-alist)))
+         (setq tocc-list nil)
+       (setq tocc-list (cdr tocc-list))))
+    (or ret-val
+       (wl-refile-guess-by-from entity))))
+
+(defun wl-refile-get-account-part-from-address (address)
+  (if (string-match "\\([^@]+\\)@[^@]+" address)
+      (wl-match-string 1 address)
+    address))
+                
+(defun wl-refile-guess-by-from (entity)
+  (let ((from
+        (downcase (wl-address-header-extract-address
+                   (elmo-msgdb-overview-entity-get-from entity)))))
+    ;; search from alist
+    (or (cdr (assoc from wl-refile-alist))
+       (format "%s/%s" wl-refile-default-from-folder 
+               (wl-refile-get-account-part-from-address from)))))
+  
+(defun wl-refile-guess-by-msgid (entity)
+  (cdr (assoc (elmo-msgdb-overview-entity-get-references entity)
+             wl-refile-msgid-alist)))
+
+;;; wl-refile.el ends here
diff --git a/wl/wl-score.el b/wl/wl-score.el
new file mode 100644 (file)
index 0000000..69aca75
--- /dev/null
@@ -0,0 +1,1499 @@
+;;; wl-score.el -- Scoring in Wanderlust.
+
+;; Copyright 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/14 19:35:28 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; Original codes are gnus-score.el and score-mode.el
+
+;;; Code:
+;; 
+
+
+(require 'wl-vars)
+(require 'wl-util)
+(eval-when-compile
+  (provide 'elmo-msgdb))
+
+(defvar wl-score-edit-header-char
+  '((?a "from" nil string)
+    (?s "subject" nil string)
+    (?i "message-id" nil string)
+    (?r "references" "message-id" string)
+    (?x "xref" nil string)
+    (?e "extra" nil string)
+    (?l "lines" nil number)
+    (?d "date" nil date)
+    (?f "followup" nil string)
+    (?t "thread" "message-id" string)))
+
+(defvar wl-score-edit-type-char
+  '((?s s "substring" string)
+    (?e e "exact string" string)
+    (?f f "fuzzy string" string)
+    (?r r "regexp string" string)
+    (?b before "before date" date)
+    (?a after "after date" date)
+    (?n at "this date" date)
+    (?< < "less than number" number)
+    (?> > "greater than number" number)
+    (?= = "equal to number" number)))
+
+(defvar wl-score-edit-perm-char
+  '((?t temp "temporary")
+    (?p perm "permanent")
+    (?i now "immediate")))
+
+;;; Global Variable
+
+(defconst wl-score-header-index
+  ;; Name to function alist.
+  '(("number"     wl-score-integer  elmo-msgdb-overview-entity-get-number) ;;0
+    ("subject"    wl-score-string   3 charset)
+    ("from"       wl-score-string   2 charset)
+    ("date"       wl-score-date     elmo-msgdb-overview-entity-get-date) ;;4
+    ("message-id" wl-score-string   elmo-msgdb-overview-entity-get-id)
+    ("references" wl-score-string   1)
+    ("to"         wl-score-string   5)
+    ("cc"         wl-score-string   6)
+    ("chars"      wl-score-integer  elmo-msgdb-overview-entity-get-size) ;;7
+    ("lines"      wl-score-integer  wl-score-overview-entity-get-lines)
+    ("xref"       wl-score-string   wl-score-overview-entity-get-xref)
+    ("extra"      wl-score-extra    wl-score-overview-entity-get-extra mime)
+    ("followup"   wl-score-followup 2 charset)
+    ("thread"     wl-score-thread   1)))
+
+(defvar wl-score-auto-make-followup-entry nil)
+(defvar wl-score-debug nil)
+(defvar wl-score-trace nil)
+
+(defvar wl-score-alist nil)
+(defvar wl-score-index nil)
+(defvar wl-score-cache nil)
+(defvar wl-scores-messages nil)
+(defvar wl-current-score-file nil)
+(defvar wl-score-make-followup nil)
+(defvar wl-score-stop-add-entry nil)
+
+(defvar wl-prev-winconf nil)
+(defvar wl-score-help-winconf nil)
+(defvar wl-score-header-buffer-list nil)
+(defvar wl-score-alike-hashtb nil)
+
+(defvar wl-score-edit-exit-func nil
+  "Function run on exit from the score buffer.")
+
+(mapcar 
+ (function make-variable-buffer-local)
+ (list 'wl-current-score-file
+       'wl-score-alist))
+
+;; Utility functions 
+
+(defun wl-score-simplify-buffer-fuzzy ()
+  "Simplify string in the buffer fuzzily.
+The string in the accessible portion of the current buffer is simplified.
+It is assumed to be a single-line subject.
+Whitespace is generally cleaned up, and miscellaneous leading/trailing
+matter is removed.  Additional things can be deleted by setting
+wl-score-simplify-fuzzy-regexp."
+  (let ((case-fold-search t)
+       (modified-tick))
+    (elmo-buffer-replace "\t" " ")
+    (while (not (eq modified-tick (buffer-modified-tick)))
+      (setq modified-tick (buffer-modified-tick))
+      (cond
+       ((listp wl-score-simplify-fuzzy-regexp)
+       (mapcar 'elmo-buffer-replace
+               wl-score-simplify-fuzzy-regexp))
+       (wl-score-simplify-fuzzy-regexp
+       (elmo-buffer-replace
+        wl-score-simplify-fuzzy-regexp)))
+      (elmo-buffer-replace "^ *\\[[-+?*!][-+?*!]\\] *")
+      (elmo-buffer-replace
+       "^ *\\(re\\|fw\\|fwd\\|forward\\)[[{(^0-9]*[])}]?[:;] *")
+      (elmo-buffer-replace "^[[].*:\\( .*\\)[]]$" "\\1"))
+    (elmo-buffer-replace " *[[{(][^()\n]*[]})] *$")
+    (elmo-buffer-replace "  +" " ")
+    (elmo-buffer-replace " $")
+    (elmo-buffer-replace "^ +")))
+
+(defun wl-score-simplify-string-fuzzy (string)
+  "Simplify a string fuzzily.
+See `wl-score-simplify-buffer-fuzzy' for details."
+  (elmo-set-work-buf
+   (let ((case-fold-search t))
+     (insert string)
+     (wl-score-simplify-buffer-fuzzy)
+     (buffer-string))))
+
+(defun wl-score-simplify-subject (subject)
+  (elmo-set-work-buf
+   (let ((case-fold-search t))
+     (insert subject)
+     (cond
+      ((listp wl-score-simplify-fuzzy-regexp)
+       (mapcar 'elmo-buffer-replace
+              wl-score-simplify-fuzzy-regexp))
+      (wl-score-simplify-fuzzy-regexp
+       (elmo-buffer-replace
+       wl-score-simplify-fuzzy-regexp)))
+     (elmo-buffer-replace
+      "^[ \t]*\\(re\\|was\\|fw\\|fwd\\|forward\\)[:;][ \t]*")
+     (buffer-string))))
+
+;;
+
+(defun wl-score-overview-entity-get-lines (entity)
+  (let ((lines
+        (elmo-msgdb-overview-entity-get-extra-field entity "lines")))
+    (and lines
+        (string-to-int lines))))
+
+(defun wl-score-overview-entity-get-xref (entity)
+  (or (elmo-msgdb-overview-entity-get-extra-field entity "xref")
+      ""))
+
+(defun wl-score-overview-entity-get-extra (entity header &optional decode)
+  (let ((extra (elmo-msgdb-overview-entity-get-extra-field entity header)))
+    (if (and extra decode)
+       (eword-decode-string
+        (decode-mime-charset-string extra elmo-mime-charset))
+      (or extra ""))))
+
+(defun wl-string> (s1 s2)
+  (not (or (string< s1 s2)
+          (string= s1 s2))))
+
+(defmacro wl-score-ov-entity-get-by-index (entity index)
+  (` (aref (cdr (, entity)) (, index))))
+
+(defsubst wl-score-ov-entity-get (entity index &optional extra decode)
+  (let ((str (cond ((integerp index)
+                   (wl-score-ov-entity-get-by-index entity index))
+                  (extra
+                   (funcall index entity extra decode))
+                  (t
+                   (funcall index entity)))))
+    (if (and decode (not extra))
+       (decode-mime-charset-string str elmo-mime-charset)
+      str)))
+
+(defun wl-score-string-index< (a1 a2)
+  (string-lessp (wl-score-ov-entity-get-by-index (car a1) wl-score-index)
+               (wl-score-ov-entity-get-by-index (car a2) wl-score-index)))
+
+(defun wl-score-string-func< (a1 a2)
+  (string-lessp (funcall wl-score-index (car a1))
+               (funcall wl-score-index (car a2))))
+
+(defun wl-score-string-sort (messages index)
+  (let ((func (cond ((integerp index)
+                    'wl-score-string-index<)
+                   (t
+                    'wl-score-string-func<))))
+    (sort messages func)))
+
+(defsubst wl-score-get (symbol &optional alist)
+  ;; Get SYMBOL's definition in ALIST.
+  (cdr (assoc symbol
+             (or alist
+                 wl-score-alist))))
+
+(defun wl-score-set (symbol value &optional alist warn)
+  ;; Set SYMBOL to VALUE in ALIST.
+  (let* ((alist (or alist wl-score-alist))
+        (entry (assoc symbol alist)))
+    (cond ((wl-score-get 'read-only alist)
+          ;; This is a read-only score file, so we do nothing.
+          (when warn
+            (message "Note: read-only score file; entry discarded")))
+         (entry
+          (setcdr entry value))
+         ((null alist)
+          (error "Empty alist"))
+         (t
+          (setcdr alist
+                  (cons (cons symbol value) (cdr alist)))))))
+
+(defun wl-score-cache-clean ()
+  (interactive)
+  (setq wl-score-cache nil))
+
+(defun wl-score-load-score-alist (file)
+  "Read score FILE."
+  (let (alist)
+    (if (not (file-readable-p file))
+       (setq wl-score-alist nil)
+      (with-temp-buffer
+       (wl-as-mime-charset wl-score-mode-mime-charset
+         (insert-file-contents file))
+       (goto-char (point-min))
+       ;; Only do the loading if the score file isn't empty.
+       (when (save-excursion (re-search-forward "[()0-9a-zA-Z]" nil t))
+         (setq alist
+               (condition-case ()
+                   (read (current-buffer))
+                 (error "Problem with score file %s" file))))
+       (cond
+        ((and alist
+              (atom alist))
+         (error "Invalid syntax with score file %s" file))
+        (t
+         (setq wl-score-alist alist)))))))
+
+(defun wl-score-save ()
+  ;; Save all score information.
+  (let ((cache wl-score-cache)
+       entry score file dir)
+    (with-temp-buffer
+      (setq wl-score-alist nil)
+      (while cache
+       (setq entry (pop cache)
+             file (car entry)
+             score (cdr entry))
+       (unless (or (not (equal (wl-score-get 'touched score) '(t)))
+                   (wl-score-get 'read-only score)
+                   (and (file-exists-p file)
+                        (not (file-writable-p file))))
+         (setq score (setcdr entry (wl-delete-alist 'touched score)))
+         (erase-buffer)
+         (let (emacs-lisp-mode-hook
+               (lisp-mode-syntax-table wl-score-mode-syntax-table))
+           (pp score (current-buffer)))
+         (setq dir (file-name-directory file))
+         (if (file-directory-p dir)
+             (); ok.
+           (if (file-exists-p dir)
+               (error "File %s already exists" dir)
+             (elmo-make-directory dir)))
+         ;; If the score file is empty, we delete it.
+         (if (zerop (buffer-size))
+             (when (file-exists-p file) ; added by teranisi.
+               (delete-file file))
+           ;; There are scores, so we write the file.
+           (when (file-writable-p file)
+             (wl-as-mime-charset wl-score-mode-mime-charset
+               (write-region (point-min) (point-max)
+                             file nil 'no-msg)))))))))
+
+(defun wl-score-remove-from-cache (file)
+  (setq wl-score-cache
+       (delq (assoc file wl-score-cache) wl-score-cache)))
+
+(defun wl-score-load-file (file)
+  (let* ((file (expand-file-name
+               (or (and (string-match
+                         (concat "^" (regexp-quote
+                                      (expand-file-name
+                                       wl-score-files-dir)))
+                         (expand-file-name file))
+                        file)
+                   (expand-file-name
+                    file
+                    (file-name-as-directory wl-score-files-dir)))))
+        (cached (assoc file wl-score-cache))
+        alist)
+    (if cached
+       ;; The score file was already loaded.
+       (setq alist (cdr cached))
+      ;; We load the score file.
+      (setq wl-score-alist nil)
+      (setq alist (wl-score-load-score-alist file))
+      (unless (assq 'touched alist)
+       (wl-push (list 'touched nil) alist))
+      (wl-push (cons file alist) wl-score-cache))
+    (let ((a alist))
+      (while a
+       ;; Downcase all header names.
+       (cond
+        ((stringp (caar a))
+         (setcar (car a) (downcase (caar a)))))
+       (pop a)))
+    (setq wl-current-score-file file)
+    (setq wl-score-alist alist)))
+
+(defun wl-score-guess-like-gnus (folder)
+  (let* (score-list
+         (spec (elmo-folder-get-spec folder))
+         (method (symbol-name (car spec)))
+         (fld-name (car (cdr spec))))
+    (when (stringp fld-name)
+      (while (string-match "[\\/:,;*?\"<>|]" fld-name)
+        (setq fld-name (replace-match "." t nil fld-name)))
+      (setq score-list (list (concat method "@" fld-name ".SCORE")))
+      (while (string-match "[\\/.][^\\/.]*$" fld-name)
+        (setq fld-name (substring fld-name 0 (match-beginning 0)))
+        (wl-append score-list (list (concat method "@" fld-name
+                                            ".all.SCORE"))))
+      score-list)))
+
+(defun wl-score-get-score-files (score-alist folder)
+  (let ((files (wl-get-assoc-list-value
+               score-alist folder
+               (if (not wl-score-folder-alist-matchone) 'all-list)))
+        fl f)
+    (while (setq f (wl-pop files))
+      (wl-append
+       fl
+       (cond ((functionp f)
+             (funcall f  folder))
+            ((and (symbolp f) (eq f 'guess))
+              (wl-score-guess-like-gnus folder))
+            (t
+             (list f)))))
+    fl))
+
+(defun wl-score-get-score-alist (&optional folder)
+  (interactive)
+  (let* ((fld (or folder wl-summary-buffer-folder-name))
+        (score-alist (reverse
+                      (wl-score-get-score-files wl-score-folder-alist fld)))
+        alist scores)
+    (setq wl-current-score-file nil)
+    (unless (and wl-score-default-file
+                (member wl-score-default-file score-alist))
+      (wl-push wl-score-default-file score-alist))
+    (while score-alist
+      (setq alist
+           (cond ((stringp (car score-alist))  ;; file
+                  (wl-score-load-file (car score-alist)))
+                 ((consp (car score-alist))    ;; alist
+                  (car score-alist))
+                 ((boundp (car score-alist))   ;; variable
+                  (symbol-value (car score-alist)))
+                 (t
+                  (error "Void variable: %s" (car score-alist)))))
+      (let ((mark (car (wl-score-get 'mark alist)))
+           (expunge (car (wl-score-get 'expunge alist)))
+           (mark-and-expunge (car (wl-score-get 'mark-and-expunge alist)))
+           (temp (car (wl-score-get 'temp alist)))
+           (important (car (wl-score-get 'important alist))))
+       (setq wl-summary-important-above
+             (or important wl-summary-important-above))
+       (setq wl-summary-temp-above
+             (or temp wl-summary-temp-above))
+       (setq wl-summary-mark-below
+             (or mark mark-and-expunge wl-summary-mark-below))
+       (setq wl-summary-expunge-below
+             (or expunge mark-and-expunge wl-summary-expunge-below)))
+      (wl-append scores (list alist))
+      (setq score-alist (cdr score-alist)))
+    scores))
+
+(defun wl-score-headers (scores &optional msgdb force-msgs not-add)
+  (let* ((elmo-mime-charset wl-summary-buffer-mime-charset)
+        (now (wl-day-number (current-time-string)))
+        (expire (and wl-score-expiry-days
+                     (- now wl-score-expiry-days)))
+        (overview (elmo-msgdb-get-overview
+                   (or msgdb wl-summary-buffer-msgdb)))
+        (mark-alist (elmo-msgdb-get-mark-alist
+                     (or msgdb wl-summary-buffer-msgdb)))
+        (wl-score-stop-add-entry not-add)
+        entries
+        news new num entry ov header)
+    (setq wl-scores-messages nil)
+    (message "Scoring...")
+
+    ;; Create messages, an alist of the form `(OVERVIEW . SCORE)'.
+    (while (setq ov (pop overview))
+      (when (and (not (assq
+                      (setq num
+                            (elmo-msgdb-overview-entity-get-number ov))
+                      wl-summary-scored))
+                (or (memq num force-msgs)
+                    (member (cadr (assq num mark-alist))
+                            wl-summary-score-marks)))
+       (setq wl-scores-messages
+             (cons (cons ov (or wl-summary-default-score 0))
+                   wl-scores-messages))))
+
+    (save-excursion
+      (setq news scores)
+      (while news
+       (setq scores news
+             news nil)
+       ;; Run each header through the score process.
+       (setq entries wl-score-header-index)
+       (while entries
+         (setq entry (pop entries)
+               header (car entry))
+         (if (> (length wl-scores-messages) 500)
+             (message "Scoring...\"%s\"" header))
+         (when (< 0 (apply 'max (mapcar
+                                 (lambda (score)
+                                   (length (wl-score-get header score)))
+                                 scores)))
+           ;; Call the scoring function for this type of "header".
+           (when (setq new (funcall (nth 1 entry) scores header now expire))
+             (wl-push new news))))))
+
+    ;; Add messages to `wl-summary-scored'.
+    (let (entry num score)
+      (while wl-scores-messages
+       (when (or (/= wl-summary-default-score
+                     (cdar wl-scores-messages)))
+         (setq num (elmo-msgdb-overview-entity-get-number
+                    (caar wl-scores-messages))
+               score (cdar wl-scores-messages))
+         (if (setq entry (assq num wl-summary-scored))
+             (setcdr entry (+ score (cdr entry)))
+           (wl-push (cons num score)
+                 wl-summary-scored)))
+       (setq wl-scores-messages (cdr wl-scores-messages))))
+    (message "Scoring...done")
+    ;; Remove buffers.
+    (mapcar '(lambda (x) (elmo-kill-buffer x))
+           wl-score-header-buffer-list)
+    (setq wl-score-header-buffer-list nil)))
+
+(defun wl-score-integer (scores header now expire)
+  (let ((wl-score-index (nth 2 (assoc header wl-score-header-index)))
+       entries alist)
+
+    ;; Find matches.
+    (while scores
+      (setq alist (car scores)
+           scores (cdr scores)
+           entries (assoc header alist))
+      (while (cdr entries)             ;First entry is the header index.
+       (let* ((rest (cdr entries))
+              (kill (car rest))
+              (match (nth 0 kill))
+              (type (or (nth 3 kill) '>))
+              (score (or (nth 1 kill) wl-score-interactive-default-score))
+              (date (nth 2 kill))
+              (found nil)
+              (match-func (if (memq type '(> < <= >= =))
+                              type
+                            (error "Invalid match type: %s" type)))
+              (messages wl-scores-messages))
+         (while messages
+           (when (funcall match-func
+                          (or (wl-score-ov-entity-get
+                               (caar messages) wl-score-index)
+                              0)
+                          match)
+             (setq found t)
+             (setcdr (car messages) (+ score (cdar messages))))
+           (setq messages (cdr messages)))
+         ;; Update expire date
+         (cond ((null date))           ;Permanent entry.
+               ((and found wl-score-update-entry-dates) ;Match, update date.
+                (wl-score-set 'touched '(t) alist)
+                (setcar (nthcdr 2 kill) now))
+               ((and expire (< date expire)) ;Old entry, remove.
+                (wl-score-set 'touched '(t) alist)
+                (setcdr entries (cdr rest))
+                (setq rest entries)))
+         (setq entries rest)))))
+  nil)
+
+(defun wl-score-date (scores header now expire)
+  (let ((wl-score-index (nth 2 (assoc header wl-score-header-index)))
+       entries alist match match-func message)
+    ;; Find matches.
+    (while scores
+      (setq alist (car scores)
+           scores (cdr scores)
+           entries (assoc header alist))
+      (while (cdr entries)             ;First entry is the header index.
+       (let* ((rest (cdr entries))
+              (kill (car rest))
+              (type (or (nth 3 kill) 'before))
+              (score (or (nth 1 kill) wl-score-interactive-default-score))
+              (date (nth 2 kill))
+              (found nil)
+              (messages wl-scores-messages)
+              l)
+         (cond
+          ((eq type 'after)
+           (setq match-func 'string<
+                 match (wl-date-iso8601 (nth 0 kill))))
+          ((eq type 'before)
+           (setq match-func 'wl-string>
+                 match (wl-date-iso8601 (nth 0 kill))))
+          ((eq type 'at)
+           (setq match-func 'string=
+                 match (wl-date-iso8601 (nth 0 kill))))
+          ((eq type 'regexp)
+           (setq match-func 'string-match
+                 match (nth 0 kill)))
+          (t (error "Invalid match type: %s" type)))
+         (while (setq message (pop messages))
+           (when (and
+                  (setq l (wl-score-ov-entity-get
+                           (car message) wl-score-index))
+                  (funcall match-func match (wl-date-iso8601 l)))
+             (setq found t)
+             (setcdr message (+ score (cdr message)))))
+         ;; Update expire date
+         (cond ((null date))           ;Permanent entry.
+               ((and found wl-score-update-entry-dates) ;Match, update date.
+                (wl-score-set 'touched '(t) alist)
+                (setcar (nthcdr 2 kill) now))
+               ((and expire (< date expire)) ;Old entry, remove.
+                (wl-score-set 'touched '(t) alist)
+                (setcdr entries (cdr rest))
+                (setq rest entries)))
+         (setq entries rest)))))
+  nil)
+
+(defsubst wl-score-lines ()
+  (save-excursion
+    (beginning-of-line)
+    (count-lines 1 (point))))
+
+(defun wl-score-extra (scores header now expire)
+  (let ((score-list scores)
+       entries alist extra extras)
+    (while score-list
+      (setq alist (pop score-list)
+           entries (assoc header alist))
+      (while (cdr entries)
+       (setq extra (nth 4 (cadr entries)))
+       (unless (member extra extras)
+         (wl-push extra extras))
+       (setq entries (cdr entries))))
+    (while extras
+      (wl-score-string scores header now expire (car extras))
+      (setq extras (cdr extras)))
+    nil))
+
+(defmacro wl-score-put-alike ()
+  (` (elmo-set-hash-val (format "#%d" (wl-score-lines))
+                       alike
+                       wl-score-alike-hashtb)))
+;;(push (cons (wl-score-lines) alike) wl-score-alike-alist)
+;;(put-text-property (1- (point)) (point) 'messages alike)
+
+(defmacro wl-score-get-alike ()
+  (` (elmo-get-hash-val (format "#%d" (wl-score-lines))
+                       wl-score-alike-hashtb)))
+;;(cdr (assq (wl-score-lines) wl-score-alike-alist))
+;;(get-text-property (point) 'messages)))
+
+(defun wl-score-insert-header (header messages &optional extra-header)
+  (let ((mime-decode (nth 3 (assoc header wl-score-header-index)))
+       (buffer-name (concat "*Score-Headers-" header
+                            (if extra-header
+                                (concat "-" extra-header)
+                              "")
+                            "*"))
+       buf)
+    (if (setq buf (get-buffer buffer-name))
+       (set-buffer buf)
+      (set-buffer (setq buf (get-buffer-create buffer-name)))
+      (wl-append wl-score-header-buffer-list (list buf))
+      (buffer-disable-undo (current-buffer))
+      (make-local-variable 'wl-score-alike-hashtb)
+      (setq wl-score-alike-hashtb (elmo-make-hash (* (length messages) 2)))
+      (when mime-decode
+       (elmo-set-buffer-multibyte default-enable-multibyte-characters))
+      (let (art last this alike)
+       (while (setq art (pop messages))
+         (setq this (wl-score-ov-entity-get (car art)
+                                            wl-score-index
+                                            extra-header))
+         (and this (setq this (std11-unfold-string this)))
+         (if (equal last this)
+             ;; O(N*H) cons-cells used here, where H is the number of
+             ;; headers.
+             (wl-push art alike)
+           (when last
+             (wl-score-put-alike)
+             (insert last ?\n))
+           (setq alike (list art)
+                 last this)))
+       (when last
+         (wl-score-put-alike)
+         (insert last ?\n))
+       (when mime-decode
+         (decode-mime-charset-region (point-min) (point-max)
+                                     elmo-mime-charset)
+         (when (eq mime-decode 'mime)
+           (eword-decode-region (point-min) (point-max))))))))
+
+(defun wl-score-string (scores header now expire &optional extra-header)
+  ;; Insert the unique message headers in the buffer.
+  (let ((wl-score-index (nth 2 (assoc header wl-score-header-index)))
+       entries alist messages
+       fuzzies kill)
+    (when (integerp wl-score-index)
+      (setq wl-scores-messages
+           (wl-score-string-sort wl-scores-messages wl-score-index)))
+    (setq messages wl-scores-messages)
+
+    (wl-score-insert-header header messages extra-header)
+
+    ;; Go through all the score alists and pick out the entries
+    ;; for this header.
+    (while scores
+      (setq alist (pop scores)
+           entries (assoc header alist))
+      (while (cdr entries)             ;First entry is the header index.
+       (let* ((kill (cadr entries))
+              (type (or (nth 3 kill) 's))
+              (score (or (nth 1 kill) wl-score-interactive-default-score))
+              (date (nth 2 kill))
+              (extra (nth 4 kill))     ; non-standard header; string.
+              (mt (aref (symbol-name type) 0))
+              (case-fold-search (not (memq mt '(?R ?S ?E ?F))))
+              (dmt (downcase mt))
+              (match (nth 0 kill))
+              (search-func
+               (cond ((= dmt ?r) 're-search-forward)
+                     ((memq dmt '(?e ?s ?f)) 'search-forward)
+                     ((= dmt ?w) nil)
+                     (t (error "Invalid match type: %s" type))))
+              arts art found)
+         (if (and extra-header
+                  (or (not extra)
+                      (not (string= extra-header extra))))
+             (setq entries (cdr entries))
+           (cond
+            ;; Fuzzy matches.  We save these for later.
+            ((= dmt ?f)
+             (wl-push (cons entries alist) fuzzies)
+             (setq entries (cdr entries)))
+            (t
+             ;; Regexp, substring and exact matching.
+             (goto-char (point-min))
+             (when (and (not (= dmt ?e))
+                        (string= match ""))
+               (setq match "\n"))
+             (while (and (not (eobp))
+                         (funcall search-func match nil t))
+               (when (or (not (= dmt ?e))
+                         ;; Is it really exact?
+                         (and (eolp)
+                              (= (save-excursion (forward-line 0) (point))
+                                 (match-beginning 0))))
+                 ;;(end-of-line)
+                 (setq found (setq arts (wl-score-get-alike)))
+                 ;; Found a match, update scores.
+                 (while (setq art (pop arts))
+                   (setcdr art (+ score (cdr art)))))
+               (forward-line 1))
+             ;; Update expiry date
+             (cond
+              ;; Permanent entry.
+              ((null date)
+               (setq entries (cdr entries)))
+              ;; We have a match, so we update the date.
+              ((and found wl-score-update-entry-dates)
+               (wl-score-set 'touched '(t) alist)
+               (setcar (nthcdr 2 kill) now)
+               (setq entries (cdr entries)))
+              ;; This entry has expired, so we remove it.
+              ((and expire (< date expire))
+               (wl-score-set 'touched '(t) alist)
+               (setcdr entries (cddr entries)))
+              ;; No match; go to next entry.
+              (t
+               (setq entries (cdr entries))))))))))
+
+    ;; Find fuzzy matches.
+    (when fuzzies
+      ;; Simplify the entire buffer for easy matching.
+      (wl-score-simplify-buffer-fuzzy)
+      (while (setq kill (cadaar fuzzies))
+       (let* ((match (nth 0 kill))
+              (type (nth 3 kill))
+              (score (or (nth 1 kill) wl-score-interactive-default-score))
+              (date (nth 2 kill))
+              (mt (aref (symbol-name type) 0))
+              (case-fold-search (not (= mt ?F)))
+              arts art found)
+         (goto-char (point-min))
+         (while (and (not (eobp))
+                     (search-forward match nil t))
+           (when (and (eolp)
+                      (= (save-excursion (forward-line 0) (point))
+                         (match-beginning 0)))
+             (setq found (setq arts (wl-score-get-alike)))
+             (while (setq art (pop arts))
+               (setcdr art (+ score (cdr art)))))
+           (forward-line 1))
+         ;; Update expiry date
+         (cond
+          ;; Permanent.
+          ((null date))
+          ;; Match, update date.
+          ((and found wl-score-update-entry-dates)
+           (wl-score-set 'touched '(t) (cdar fuzzies))
+           (setcar (nthcdr 2 kill) now))
+          ;; Old entry, remove.
+          ((and expire (< date expire))
+           (wl-score-set 'touched '(t) (cdar fuzzies))
+           (setcdr (caar fuzzies) (cddaar fuzzies))))
+         (setq fuzzies (cdr fuzzies)))))
+    nil))
+
+(defun wl-score-thread (scores header now expire)
+  (wl-score-followup scores header now expire t))
+
+(defun wl-score-followup (scores header now expire &optional thread)
+  ;; Insert the unique message headers in the buffer.
+  (let ((wl-score-index (nth 2 (assoc header wl-score-header-index)))
+       (all-scores scores)
+       entries alist messages
+       new news)
+    (when (integerp wl-score-index)
+      (setq wl-scores-messages
+           (wl-score-string-sort wl-scores-messages wl-score-index)))
+    (setq messages wl-scores-messages)
+
+    (wl-score-insert-header (if thread "references" "from") messages)
+
+    ;; Find matches.
+    (while scores
+      (setq alist (car scores)
+           scores (cdr scores)
+           entries (assoc header alist))
+      (while (cdr entries)             ;First entry is the header index.
+       (let* ((rest (cdr entries))
+              (kill (car rest))
+              (match (nth 0 kill))
+              (type (or (nth 3 kill) 's))
+              (score (or (nth 1 kill) wl-score-interactive-default-score))
+              (date (nth 2 kill))
+              (found nil)
+              (mt (aref (symbol-name type) 0))
+              (case-fold-search (not (memq mt '(?R ?S ?E ?F))))
+              (dmt (downcase mt))
+              (search-func
+               (cond ((= dmt ?r) 're-search-forward)
+                     ((memq dmt '(?e ?s ?f)) 'search-forward)
+                     (t (error "Invalid match type: %s" type))))
+              arts art day)
+         (goto-char (point-min))
+         (while (funcall search-func match nil t)
+           (when (or (not (= dmt ?e))
+                     (and (eolp)
+                          (= (progn (beginning-of-line) (point))
+                             (match-beginning 0))))
+             ;;(end-of-line)
+             (setq found (setq arts (wl-score-get-alike)))
+             ;; Found a match, update scores.
+             (while (setq art (pop arts))
+               (setq day nil)
+               (when (or (not wl-score-make-followup)
+                         (and wl-score-update-entry-dates
+                              expire
+                              (< expire
+                                 (setq day
+                                       (wl-day-number
+                                        (elmo-msgdb-overview-entity-get-date
+                                         (car art)))))))
+                 (when (setq new (wl-score-add-followups
+                                  (car art) score all-scores alist thread
+                                  day))
+                   (when thread
+                     (unless wl-score-stop-add-entry
+                       (wl-append rest (list new)))
+                     (setcdr art (+ score (cdr art))))
+                   (wl-push new news))))
+             (forward-line 1)))
+         ;; Update expire date
+         (cond ((null date))           ;Permanent entry.
+               ((and found wl-score-update-entry-dates) ;Match, update date.
+                (wl-score-set 'touched '(t) alist)
+                (setcar (nthcdr 2 kill) now))
+               ((and expire (< date expire)) ;Old entry, remove.
+                (wl-score-set 'touched '(t) alist)
+                (setcdr entries (cdr rest))
+                (setq rest entries)))
+         (setq entries rest))))
+    (when (and news (not thread))
+      (list (cons "references" news)))))
+
+(defun wl-score-add-followups (header score scores alist &optional thread day)
+  (let* ((id (car header))
+        (scores (car scores))
+        entry dont)
+    (when id
+      ;; Don't enter a score if there already is one.
+      (while (setq entry (pop scores))
+       (and (member (car entry) '("thread" "references"))
+            (memq (nth 3 (cadr entry)) '(s nil))
+            (assoc id entry)
+            (setq dont t)))
+      (unless dont
+       (let ((entry (list id score
+                          (or day (wl-day-number (current-time-string))) 's)))
+         (unless (or thread wl-score-stop-add-entry)
+           (wl-score-update-score-entry "references" entry alist))
+         (wl-score-set 'touched '(t) alist)
+         entry)))))
+
+(defun wl-score-flush-cache ()
+  "Flush the cache of score files."
+  (interactive)
+  (wl-score-save)
+  (setq wl-score-cache nil
+       wl-score-alist nil)
+  (message "The score cache is now flushed"))
+
+(defun wl-score-set-mark-below (score)
+  "Automatically mark messages with score below SCORE as read."
+  (interactive
+   (list (or (and current-prefix-arg (prefix-numeric-value current-prefix-arg))
+            (string-to-int (read-string "Mark below: ")))))
+  (setq score (or score wl-summary-default-score 0))
+  (wl-score-set 'mark (list score))
+  (wl-score-set 'touched '(t))
+  (setq wl-summary-mark-below score)
+  (wl-summary-score-update-all-lines t))
+
+(defun wl-score-set-expunge-below (score)
+  "Automatically expunge messages with score below SCORE."
+  (interactive
+   (list (or (and current-prefix-arg (prefix-numeric-value current-prefix-arg))
+            (string-to-int (read-string "Expunge below: ")))))
+  (setq score (or score wl-summary-default-score 0))
+  (wl-score-set 'expunge (list score))
+  (wl-score-set 'touched '(t)))
+
+(defun wl-score-change-score-file (file)
+  "Change current score alist."
+  (interactive
+   (list (read-file-name "Change to score file: " wl-score-files-dir)))
+  (wl-score-load-file file))
+
+(defun wl-score-default (level)
+  (if level (prefix-numeric-value level)
+    wl-score-interactive-default-score))
+
+(defun wl-summary-lower-score (&optional score)
+  (interactive "P")
+  (wl-summary-increase-score score t))
+
+(defun wl-summary-increase-score (&optional score lower)
+  (interactive "P")
+  (if (wl-summary-message-number)
+  (let* ((rscore (if lower
+                    (- (wl-score-default score))
+                  (wl-score-default score)))
+        (increase (> rscore 0))
+        lscore entry list match type)
+    (setq entry (wl-score-get-header-entry nil rscore))
+    (setq list (nth 1 entry))
+    (setq match (car list))
+    (setq type (nth 3 list))
+    (cond ((memq type '(r R s S nil))
+          (when (and match (string= (car entry) "subject"))
+            (setq match (wl-score-simplify-subject match))))
+         ((memq type '(f F))
+          (setq match (wl-score-simplify-string-fuzzy match))))
+    (setq match (read-string
+                (format "Match on %s, %s: "
+                        (car entry)
+                        (if increase "raise" "lower"))
+                (if (numberp match)
+                    (int-to-string match)
+                  match)))
+    ;; transform from string to int.
+    (when (eq (nth 1 (assoc (car entry) wl-score-header-index))
+             'wl-score-integer)
+      (setq match (string-to-int match)))
+    ;; set score
+    (if score
+       (setq lscore rscore)
+      (setq lscore (nth 1 list))
+      (setq lscore
+           (abs (if lscore
+                    lscore
+                  wl-score-interactive-default-score)))
+      (setq lscore (if lower (- lscore) lscore)))
+    (setcar (cdr list)
+           (if (eq lscore wl-score-interactive-default-score)
+               nil
+             lscore))
+    ;; update score file
+    (setcar list match)
+    (unless (eq (nth 2 list) 'now)
+      (let ((alist (if wl-current-score-file
+                      (cdr (assoc wl-current-score-file wl-score-cache))
+                    wl-score-alist)))
+       (wl-score-update-score-entry (car entry) list alist)
+       (wl-score-set 'touched '(t) alist)))
+    (wl-summary-score-effect (car entry) list (eq (nth 2 list) 'now)))))
+
+(defun wl-score-get-latest-msgs ()
+  (let* ((now (wl-day-number (current-time-string)))
+        (expire (and wl-score-expiry-days
+                     (- now wl-score-expiry-days)))
+        (roverview (reverse (elmo-msgdb-get-overview
+                             wl-summary-buffer-msgdb)))
+        msgs)
+    (if (not expire)
+       (mapcar 'car (elmo-msgdb-get-number-alist
+                     wl-summary-buffer-msgdb)) ;; all messages
+      (catch 'break
+       (while roverview
+         (if (< (wl-day-number
+                 (elmo-msgdb-overview-entity-get-date (car roverview)))
+                expire)
+             (throw 'break t))
+         (wl-push (elmo-msgdb-overview-entity-get-number (car roverview))
+               msgs)
+         (setq roverview (cdr roverview))))
+      msgs)))
+
+(defsubst wl-score-get-overview ()
+  (let ((num (wl-summary-message-number)))
+    (if num
+       (assoc (cdr (assq num (elmo-msgdb-get-number-alist
+                              wl-summary-buffer-msgdb)))
+              (elmo-msgdb-get-overview wl-summary-buffer-msgdb)))))
+
+(defun wl-score-get-header (header &optional extra)
+  (let ((index (nth 2 (assoc header wl-score-header-index)))
+       (decode (nth 3 (assoc header wl-score-header-index))))
+    (if index
+       (wl-score-ov-entity-get (wl-score-get-overview) index extra decode))))
+
+(defun wl-score-kill-help-buffer ()
+  (when (get-buffer "*Score Help*")
+    (kill-buffer "*Score Help*")
+    (when wl-score-help-winconf
+      (set-window-configuration wl-score-help-winconf))))
+
+(defun wl-score-insert-help (string alist idx)
+  (setq wl-score-help-winconf (current-window-configuration))
+  (let ((cur-win (selected-window))
+       mes-win)
+    (save-excursion
+      (set-buffer (get-buffer-create "*Score Help*"))
+      (buffer-disable-undo (current-buffer))
+      (delete-windows-on (current-buffer))
+      (erase-buffer)
+      (insert string ":\n\n")
+      (let ((max -1)
+           (list alist)
+           (i 0)
+           n width pad format)
+       ;; find the longest string to display
+       (while list
+         (setq n (length (nth idx (car list))))
+         (unless (> max n)
+           (setq max n))
+         (setq list (cdr list)))
+       (setq max (+ max 4))            ; %c, `:', SPACE, a SPACE at end
+       (setq n (/ (1- (window-width)) max)) ; items per line
+       (setq width (/ (1- (window-width)) n)) ; width of each item
+       ;; insert `n' items, each in a field of width `width'
+       (while alist
+         (unless (< i n)
+           (setq i 0)
+           (delete-char -1)            ; the `\n' takes a char
+           (insert "\n"))
+         (setq pad (- width 3))
+         (setq format (concat "%c: %-" (int-to-string pad) "s"))
+         (insert (format format (caar alist) (nth idx (car alist))))
+         (setq alist (cdr alist))
+         (setq i (1+ i))
+         (set-buffer-modified-p nil)))
+      (when (and (get-buffer wl-message-buf-name)
+                (setq mes-win (get-buffer-window
+                               (get-buffer wl-message-buf-name))))
+       (select-window mes-win)
+       (unless (eq (next-window) cur-win)
+         (delete-window (next-window))))
+      (split-window)
+      (pop-to-buffer "*Score Help*")
+      (let ((window-min-height 1))
+       (shrink-window-if-larger-than-buffer))
+      (select-window cur-win))))
+
+(defun wl-score-get-header-entry (&optional match-func increase)
+  (let (hchar tchar pchar
+       header score perm type extra hentry entry)
+    (unwind-protect
+       (progn
+         ;; read the header to score.
+         (while (not hchar)
+           (message "%s header (%s?): "
+                    (if increase
+                        (if (> increase 0) "Increase" "Lower")
+                      "Set")
+                    (mapconcat (lambda (s) (char-to-string (car s)))
+                               wl-score-edit-header-char ""))
+           (setq hchar (read-char))
+           (when (or (= hchar ??) (= hchar ?\C-h))
+             (setq hchar nil)
+             (wl-score-insert-help "Match on header"
+                                   wl-score-edit-header-char 1)))
+         (wl-score-kill-help-buffer)
+         (unless (setq hentry (assq (downcase hchar)
+                                    wl-score-edit-header-char))
+           (error "Invalid header type"))
+
+         (message "")
+         (setq entry (assoc (setq header (nth 1 hentry))
+                            wl-score-header-default-entry))
+         (setq score (nth 1 entry)
+               perm (nth 2 entry)
+               type (nth 3 entry))
+
+         ;; read extra header.
+         (when (equal header "extra")
+           (setq extra
+                 (completing-read
+                  "Set extra header: "
+                  (mapcar 'list
+                          elmo-msgdb-extra-fields))))
+
+         ;; read the type.
+         (unless type
+           (let ((valid-types
+                  (delq nil
+                        (mapcar (lambda (s)
+                                  (if (eq (nth 3 hentry)
+                                          (nth 3 s))
+                                      s nil))
+                                (copy-sequence
+                                 wl-score-edit-type-char)))))
+             (while (not tchar)
+               (message "Set header '%s' with match type (%s?): "
+                        header
+                        (mapconcat (lambda (s) (char-to-string (car s)))
+                                   valid-types ""))
+               (setq tchar (read-char))
+               (when (or (= tchar ??) (= tchar ?\C-h))
+                 (setq tchar nil)
+                 (wl-score-insert-help "Match type" valid-types 2)))
+             (wl-score-kill-help-buffer)
+             (unless (setq type (nth 1 (assq (downcase tchar) valid-types)))
+               (error "Invalid match type"))
+             (message "")))
+
+         ;; read the permanence.
+         (unless perm
+           (while (not pchar)
+             (message "Set permanence (%s?): "
+                      (mapconcat (lambda (s) (char-to-string (car s)))
+                                 wl-score-edit-perm-char ""))
+             (setq pchar (read-char))
+             (when (or (= pchar ??) (= pchar ?\C-h))
+               (setq pchar nil)
+               (wl-score-insert-help "Match permanence"
+                                     wl-score-edit-perm-char 2)))
+           (wl-score-kill-help-buffer)
+           (unless (setq perm (nth 1 (assq (downcase pchar)
+                                           wl-score-edit-perm-char)))
+             (error "Invalid match duration"))
+           (message ""))
+
+         ;; read the score.
+         (unless (or score increase)
+           (setq score (string-to-int (read-string "Set score: "))))
+         (message "")))
+
+    (let* ((match-header (or (nth 2 hentry) header))
+          (match (if match-func
+                     (funcall match-func match-header extra)
+                   (wl-score-get-header match-header extra)))
+          (match (cond ((memq type '(r R regexp Regexp))
+                        (regexp-quote match))
+                       ((eq (nth 1 (assoc (car entry) wl-score-header-index))
+                            'wl-score-integer)
+                        match)
+                       (t
+                        (or match ""))))
+          (perm (cond ((eq perm 'perm)
+                       nil)
+                      ((eq perm 'temp)
+                       (wl-day-number (current-time-string)))
+                      ((eq perm 'now)
+                       perm)))
+          (new (list match score perm type extra)))
+      (list header new))))
+
+(defun wl-score-update-score-entries (header entries &optional alist)
+  (while entries
+    (wl-score-update-score-entry header (car entries) alist)
+    (setq entries (cdr entries)))
+  (wl-score-set 'touched '(t) alist))
+
+(defun wl-score-update-score-entry (header new &optional alist)
+  (let ((old (wl-score-get header alist))
+       (match (nth 0 new))
+       elem)
+    (if (and old
+            (setq elem (assoc match old))
+            (eq (nth 3 elem) (nth 3 new))
+            (or (and (numberp (nth 2 elem)) (numberp (nth 2 new)))
+                (and (not (nth 2 elem)) (not (nth 2 new)))))
+       (setcar (cdr elem) (+ (or (nth 1 elem)
+                                 wl-score-interactive-default-score)
+                             (or (nth 1 new)
+                                 wl-score-interactive-default-score)))
+      (wl-score-set header (if old (cons new old) (list new)) alist t))))
+
+;; functions for summary mode
+
+(defun wl-summary-score-effect (header entry &optional now)
+  (let ((scores (list (list (list header entry)))))
+    (setq wl-summary-scored nil)
+    (cond ((string= header "followup")
+          (if wl-score-auto-make-followup-entry
+              (let ((wl-score-make-followup t))
+                (wl-score-headers scores nil (wl-score-get-latest-msgs)))
+            (wl-score-headers scores nil
+                              (if (eq wl-summary-buffer-view 'thread)
+                                  (wl-thread-get-children-msgs
+                                   (wl-summary-message-number))
+                                (list (wl-summary-message-number)))))
+          (unless now
+            (wl-score-update-score-entries
+             "references"
+             (cdr (assoc "references" (car scores))))))
+         ((string= header "thread")
+          (wl-score-headers scores nil
+                            (if (eq wl-summary-buffer-view 'thread)
+                                (wl-thread-get-children-msgs
+                                 (wl-summary-message-number))
+                              (list (wl-summary-message-number))))
+          (unless now
+            (wl-score-update-score-entries header
+                                           ;; remove parent
+                                           (cdr (cdaar scores)))))
+         (t
+          (wl-score-headers scores nil
+                            (list (wl-summary-message-number)))))
+    (wl-summary-score-update-all-lines t)))
+
+(defun wl-summary-rescore-msgs (number-alist)
+  (mapcar
+   'car
+   (nthcdr 
+    (max (- (length number-alist)
+           wl-summary-rescore-partial-threshold)
+        0)
+    number-alist)))
+
+(defun wl-summary-rescore (&optional arg)
+  "Redo the entire scoring process in the current summary."
+  (interactive "P")
+  (let (number-alist expunged)
+    (wl-score-save)
+    (setq wl-score-cache nil)
+    (setq wl-summary-scored nil)
+    (setq number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+    (wl-summary-score-headers nil wl-summary-buffer-msgdb
+                             (unless arg
+                               (wl-summary-rescore-msgs number-alist)))
+    (setq expunged (wl-summary-score-update-all-lines t))
+    (if expunged 
+       (message "%d message(s) are expunged by scoring." (length expunged)))
+    (set-buffer-modified-p nil)))
+
+;; optional argument force-msgs is added by teranisi.
+(defun wl-summary-score-headers (&optional folder msgdb force-msgs not-add)
+  "Do scoring if scoring is required."
+  (let ((scores (wl-score-get-score-alist
+                (or folder wl-summary-buffer-folder-name))))
+    (when scores
+      (wl-score-headers scores msgdb force-msgs not-add))))
+
+(defun wl-summary-score-update-all-lines (&optional update)
+  (let* ((alist wl-summary-scored)
+        (count (length alist))
+        (folder wl-summary-buffer-folder-name)
+        (i 0)
+        (update-unread nil)
+        num score dels visible score-mark mark-alist)
+    (save-excursion
+      (message "Updating score...")
+      (while alist
+       (setq num (caar alist)
+             score (cdar alist))
+       (when wl-score-debug
+         (message "Scored %d with %d" score num)
+         (wl-push (list (elmo-string wl-summary-buffer-folder-name) num score)
+               wl-score-trace))
+       (setq score-mark (wl-summary-get-score-mark num))
+       (and (setq visible (wl-summary-jump-to-msg num))
+            (wl-summary-set-score-mark score-mark))
+       (cond ((and wl-summary-expunge-below
+                   (< score wl-summary-expunge-below))
+              (wl-push num dels))
+             ((< score wl-summary-mark-below)
+              (if visible
+                  (wl-summary-mark-as-read
+                   t nil nil nil (elmo-use-cache-p folder num));; opened
+                (setq update-unread t)
+                (wl-thread-msg-mark-as-read num)));; closed
+             ((and wl-summary-important-above
+                   (> score wl-summary-important-above))
+              (if (wl-thread-jump-to-msg num);; force open
+                  (wl-summary-mark-as-important num " ")))
+             ((and wl-summary-temp-above
+                   (> score wl-summary-temp-above))
+              (if visible
+                  (wl-summary-mark-line "*"))
+              (setq wl-summary-buffer-target-mark-list
+                    (cons num wl-summary-buffer-target-mark-list))))
+       (setq i (1+ i))
+       (and (zerop (% i 10))
+            (message "Updating score...%d%%" (/ (* i 100) count)))
+       (setq alist (cdr alist)))
+      (when dels
+;      (elmo-msgdb-delete-msgs wl-summary-buffer-folder-name
+;                              dels wl-summary-buffer-msgdb t)
+       ;; mark as read.
+       (setq mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       (mapcar (function (lambda (x)
+                           (setq mark-alist 
+                                 (elmo-msgdb-mark-set mark-alist x nil))))
+               dels)
+       (elmo-mark-as-read wl-summary-buffer-folder-name
+                          dels wl-summary-buffer-msgdb)
+       (elmo-msgdb-set-mark-alist wl-summary-buffer-msgdb mark-alist)
+       (wl-summary-delete-messages-on-buffer dels))
+      (when (and update update-unread)
+       (let ((num-db (elmo-msgdb-get-number-alist
+                      wl-summary-buffer-msgdb))
+             (mark-alist (elmo-msgdb-get-mark-alist
+                          wl-summary-buffer-msgdb)))
+         ;; Update Folder mode
+         (wl-folder-set-folder-updated wl-summary-buffer-folder-name
+                                       (list 0
+                                             (wl-summary-count-unread 
+                                              mark-alist)
+                                             (length num-db)))
+         (wl-summary-update-modeline)))
+      (message "Updating score...done.")
+      dels)))
+
+(defun wl-score-edit-done ()
+  (let ((bufnam (buffer-file-name (current-buffer)))
+       (winconf wl-prev-winconf))
+    (when winconf
+      (set-window-configuration winconf))
+    (wl-score-remove-from-cache bufnam)
+    (wl-score-load-file bufnam)))
+
+(defun wl-score-edit-current-scores (file)
+  "Edit the current score alist."
+  (interactive (list wl-current-score-file))
+  (if file
+      (wl-score-edit-file file)
+    (call-interactively 'wl-score-edit-file)))
+
+(defun wl-score-edit-file (file)
+  "Edit a score file."
+  (interactive
+   (list (read-file-name "Edit score file: " wl-score-files-dir)))
+  (when (wl-collect-summary)
+    (wl-score-save))
+  (let ((winconf (current-window-configuration))
+       (edit-buffer (wl-as-mime-charset wl-score-mode-mime-charset
+                      (find-file-noselect file)))
+       (sum-buf (current-buffer)))
+    (if (string-match (concat "^" wl-summary-buffer-name) (buffer-name))
+       (let ((cur-buf (current-buffer))
+             (view-message-buffer (get-buffer wl-message-buf-name)))
+         (when view-message-buffer
+           (wl-select-buffer view-message-buffer)
+           (delete-window)
+           (select-window (get-buffer-window cur-buf)))
+         (wl-select-buffer edit-buffer))
+      (switch-to-buffer edit-buffer))
+    (wl-score-mode)
+    (setq wl-score-edit-exit-func 'wl-score-edit-done)
+    (setq wl-score-edit-summary-buffer sum-buf)
+    (make-local-variable 'wl-prev-winconf)
+    (setq wl-prev-winconf winconf))
+  (message
+   (substitute-command-keys
+    "\\<wl-score-mode-map>\\[wl-score-edit-exit] to save edits")))
+
+;; score-mode
+
+(defvar wl-score-edit-summary-buffer nil)
+
+(defvar wl-score-mode-syntax-table
+  (let ((table (copy-syntax-table lisp-mode-syntax-table)))
+    (modify-syntax-entry ?| "w" table)
+    table)
+  "Syntax table used in score-mode buffers.")
+
+(defvar wl-score-mode-map nil)
+(defvar wl-score-mode-menu-spec
+  '("Score"
+    ["Exit" wl-score-edit-exit t]
+    ["Insert date" wl-score-edit-insert-date t]
+    ["Format" wl-score-pretty-print t]))
+
+(unless wl-score-mode-map
+  (setq wl-score-mode-map (copy-keymap emacs-lisp-mode-map))
+  (define-key wl-score-mode-map "\C-c\C-k" 'wl-score-edit-kill)
+  (define-key wl-score-mode-map "\C-c\C-c" 'wl-score-edit-exit)
+  (define-key wl-score-mode-map "\C-c\C-p" 'wl-score-pretty-print)
+  (define-key wl-score-mode-map "\C-c\C-d" 'wl-score-edit-insert-date)
+  (define-key wl-score-mode-map "\C-c\C-s" 'wl-score-edit-insert-header)
+  (define-key wl-score-mode-map "\C-c\C-e" 'wl-score-edit-insert-header-entry)
+
+  (unless (boundp 'wl-score-menu)
+    (easy-menu-define
+     wl-score-menu wl-score-mode-map "Menu used in score mode."
+     wl-score-mode-menu-spec)))
+
+(defun wl-score-mode ()
+  "Mode for editing Wanderlust score files.
+This mode is an extended emacs-lisp mode.
+
+Special commands;
+\\{wl-score-mode-map}
+Entering Score mode calls the value of `wl-score-mode-hook'."
+  (interactive)
+  (kill-all-local-variables)
+  (use-local-map wl-score-mode-map)
+  (set-syntax-table wl-score-mode-syntax-table)
+  (setq major-mode 'wl-score-mode)
+  (setq mode-name "Score")
+  (lisp-mode-variables nil)
+  (make-local-variable 'wl-score-edit-exit-func)
+  (make-local-variable 'wl-score-edit-summary-buffer)
+  (run-hooks 'emacs-lisp-mode-hook 'wl-score-mode-hook))
+
+(defun wl-score-edit-insert-date ()
+  "Insert date in numerical format."
+  (interactive)
+  (princ (wl-day-number (current-time-string)) (current-buffer)))
+
+(defun wl-score-pretty-print ()
+  "Format the current score file."
+  (interactive)
+  (goto-char (point-min))
+  (let ((form (read (current-buffer))))
+    (erase-buffer)
+    (let ((emacs-lisp-mode-syntax-table wl-score-mode-syntax-table))
+      (pp form (current-buffer))))
+  (goto-char (point-min)))
+
+(defun wl-score-edit-exit ()
+  "Stop editing the score file."
+  (interactive)
+  (unless (file-exists-p (file-name-directory (buffer-file-name)))
+    (elmo-make-directory (file-name-directory (buffer-file-name))))
+  (if (zerop (buffer-size))
+      (progn
+       (set-buffer-modified-p nil)
+       (and (file-exists-p (buffer-file-name))
+            (delete-file (buffer-file-name))))
+    (wl-as-mime-charset wl-score-mode-mime-charset
+      (save-buffer)))
+  (let ((buf (current-buffer)))
+    (when wl-score-edit-exit-func
+      (funcall wl-score-edit-exit-func))
+    (kill-buffer buf)))
+
+(defun wl-score-edit-kill ()
+  "Cancel editing the score file."
+  (interactive)
+  (let ((buf (current-buffer)))
+    (set-buffer-modified-p nil)
+    (when wl-score-edit-exit-func
+      (funcall wl-score-edit-exit-func))
+    (kill-buffer buf)))
+
+(defun wl-score-edit-get-summary-buf ()
+  (let ((summary-buf (and wl-score-edit-summary-buffer
+                         (get-buffer wl-score-edit-summary-buffer))))
+    (if (and summary-buf
+            (buffer-live-p summary-buf))
+       summary-buf
+      (if (and (setq summary-buf (window-buffer (previous-window)))
+              (string-match (concat "^" wl-summary-buffer-name)
+                            (buffer-name summary-buf)))
+         summary-buf))))
+
+(defun wl-score-edit-get-header (header &optional extra)
+  (let ((sum-buf (wl-score-edit-get-summary-buf))
+       (index (nth 2 (assoc header wl-score-header-index))))
+    (when (and sum-buf index)
+      (save-excursion
+       (set-buffer sum-buf)
+       (wl-score-get-header header extra)))))
+
+(defun wl-score-edit-insert-number ()
+  (interactive)
+  (let ((sum-buf (wl-score-edit-get-summary-buf))
+       num)
+    (when sum-buf
+      (if (setq num (save-excursion
+                     (set-buffer sum-buf)
+                     (wl-summary-message-number)))
+         (prin1 num (current-buffer))))))
+
+(defun wl-score-edit-insert-header ()
+  (interactive)
+  (let (hchar entry)
+    (unwind-protect
+       (progn
+         (while (not hchar)
+           (message "Insert header (%s?): "
+                    (mapconcat (lambda (s) (char-to-string (car s)))
+                               wl-score-edit-header-char ""))
+           (setq hchar (read-char))
+           (when (or (= hchar ??) (= hchar ?\C-h))
+             (setq hchar nil)
+             (wl-score-insert-help "Match on header"
+                                   wl-score-edit-header-char 1)))
+         (wl-score-kill-help-buffer)
+         (unless (setq entry (assq (downcase hchar)
+                                   wl-score-edit-header-char))
+           (error "Invalid match type")))
+      (message "")
+      (let* ((header (nth 1 entry))
+            (value (wl-score-edit-get-header header)))
+       (and value (prin1 value (current-buffer)))))))
+
+(defun wl-score-edit-insert-header-entry ()
+  (interactive)
+  (let (form entry)
+    (goto-char (point-min))
+    (setq form (and (not (zerop (buffer-size)))
+                   (condition-case ()
+                       (read (current-buffer))
+                     (error "Invalid syntax"))))
+    (setq entry (wl-score-get-header-entry 'wl-score-edit-get-header))
+    (unless (eq (nth 2 (nth 1 entry)) 'now)
+      (if form
+         (wl-score-update-score-entry (car entry) (nth 1 entry) form)
+       (setq form (list entry)))
+      (erase-buffer)
+      (let ((emacs-lisp-mode-syntax-table wl-score-mode-syntax-table))
+       (pp form (current-buffer)))
+      (goto-char (point-min)))))
+
+(provide 'wl-score)
+
+;;; wl-score.el ends here
diff --git a/wl/wl-summary.el b/wl/wl-summary.el
new file mode 100644 (file)
index 0000000..b62d9c5
--- /dev/null
@@ -0,0 +1,5872 @@
+;;; wl-summary.el -- Summary mode for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/22 01:00:41 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo2)
+(require 'elmo-multi)
+(require 'wl-message)
+(require 'wl-vars)
+(require 'wl-highlight)
+(require 'wl-refile)
+(require 'wl-util)
+(condition-case ()
+    (progn
+      (require 'timezone)
+      (require 'easymenu))
+  (error))
+(require 'elmo-date)
+(condition-case nil
+    (require 'ps-print)
+  (error))
+
+(eval-when-compile
+  (require 'cl)
+  (condition-case () (require 'timer) (error nil))
+  (mapcar
+   (function
+    (lambda (symbol)
+      (unless (boundp symbol)
+       (set (make-local-variable symbol) nil))))
+   '(dragdrop-drop-functions scrollbar-height mail-reply-buffer))
+  (defun-maybe ps-print-buffer-with-faces (a))
+  (defun-maybe elmo-database-msgid-put (a b c))
+  (defun-maybe elmo-database-close ())
+  (defun-maybe elmo-database-msgid-get (a))
+  (defun-maybe run-with-idle-timer (secs repeat function &rest args)))
+
+(defvar wl-summary-buffer-name "Summary")
+(defvar wl-summary-mode-map nil)
+(defvar wl-current-summary-buffer nil)
+
+(defvar wl-summary-buffer-msgdb       nil)
+(defvar wl-summary-buffer-folder-name nil)
+(defvar wl-summary-buffer-disp-msg    nil)
+(defvar wl-summary-buffer-disp-folder nil)
+(defvar wl-summary-buffer-refile-list nil) 
+(defvar wl-summary-buffer-delete-list nil) 
+(defvar wl-summary-buffer-last-displayed-msg nil)
+(defvar wl-summary-buffer-current-msg nil)
+(defvar wl-summary-buffer-unread-status " (0 new/0 unread)")
+(defvar wl-summary-buffer-unread-count 0)
+(defvar wl-summary-buffer-new-count    0)
+(defvar wl-summary-buffer-mime-charset  nil)
+(defvar wl-summary-buffer-weekday-name-lang  nil)
+(defvar wl-summary-buffer-thread-indent-set-alist  nil)
+(defvar wl-summary-buffer-message-redisplay-func nil)
+(defvar wl-summary-buffer-view 'thread)
+(defvar wl-summary-buffer-message-modified nil)
+(defvar wl-summary-buffer-mark-modified nil)
+(defvar wl-summary-buffer-number-column nil)
+(defvar wl-summary-buffer-number-regexp nil)
+(defvar wl-summary-buffer-persistent nil)
+(defvar wl-summary-buffer-thread-nodes nil)
+(defvar wl-summary-buffer-target-mark-list nil)
+(defvar wl-summary-buffer-copy-list nil) 
+(defvar wl-summary-buffer-prev-refile-destination nil)
+(defvar wl-summary-buffer-prev-copy-destination nil)
+(defvar wl-thread-indent-level-internal nil)
+(defvar wl-thread-have-younger-brother-str-internal nil)
+(defvar wl-thread-youngest-child-str-internal nil)
+(defvar wl-thread-vertical-str-internal nil)
+(defvar wl-thread-horizontal-str-internal nil)
+(defvar wl-thread-space-str-internal nil)
+(defvar wl-summary-last-visited-folder nil)
+(defvar wl-read-folder-hist nil)
+(defvar wl-summary-scored nil)
+(defvar wl-crosspost-alist-modified nil)
+
+(defvar wl-summary-message-regexp "^ *\\([0-9]+\\)")
+
+(defvar wl-summary-shell-command-last "")
+
+(defvar wl-ps-preprint-hook nil)
+(defvar wl-ps-print-hook nil)
+
+(mapcar 
+ (function make-variable-buffer-local)
+ (list 'wl-summary-buffer-msgdb
+       'wl-summary-buffer-disp-msg
+       'wl-summary-buffer-disp-folder
+       'wl-summary-buffer-refile-list
+       'wl-summary-buffer-copy-list
+       'wl-summary-buffer-target-mark-list
+       'wl-summary-buffer-delete-list
+       'wl-summary-buffer-folder-name
+       'wl-summary-buffer-last-displayed-msg
+       'wl-summary-buffer-unread-status
+       'wl-summary-buffer-unread-count
+       'wl-summary-buffer-new-count
+       'wl-summary-buffer-mime-charset
+       'wl-summary-buffer-weekday-name-lang
+       'wl-summary-buffer-thread-indent-set
+       'wl-summary-buffer-message-redisplay-func
+       'wl-summary-buffer-view
+       'wl-summary-buffer-message-modified
+       'wl-summary-buffer-mark-modified
+       'wl-summary-buffer-number-column
+       'wl-summary-buffer-number-regexp
+       'wl-summary-buffer-persistent
+       'wl-summary-buffer-thread-nodes
+       'wl-summary-buffer-prev-refile-destination
+       'wl-summary-scored
+       'wl-summary-default-score
+       'wl-summary-move-direction-downward
+       'wl-summary-important-above
+       'wl-summary-temp-above
+       'wl-summary-mark-below
+       'wl-summary-expunge-below
+       'wl-thread-indent-level-internal
+       'wl-thread-have-younger-brother-str-internal
+       'wl-thread-youngest-child-str-internal
+       'wl-thread-vertical-str-internal
+       'wl-thread-horizontal-str-internal
+       'wl-thread-space-str-internal))
+
+;; internal functions (dummy)
+(unless (fboundp 'wl-summary-append-message-func-internal)
+  (defun wl-summary-append-message-func-internal (entity overview 
+                                                        mark-alist update)))
+(unless (fboundp 'wl-summary-from-func-internal)
+  (defun wl-summary-from-func-internal (from)
+    from))
+(unless (fboundp 'wl-summary-subject-func-internal)
+  (defun wl-summary-subject-func-internal (subject)
+    subject))
+(unless (fboundp 'wl-summary-subject-filter-func-internal)
+  (defun wl-summary-subject-filter-func-internal (subject)
+    subject))
+
+(defmacro wl-summary-sticky-buffer-name (folder)
+  (` (concat wl-summary-buffer-name ":" (, folder))))
+
+(defun wl-summary-default-subject (subject-string)
+  (if (string-match "^[ \t]*\\[[^:]+[,: ][0-9]+\\][ \t]*" subject-string)
+      (substring subject-string (match-end 0))
+    subject-string))
+
+(eval-when-compile (defvar-maybe entity nil)) ; silence byte compiler.
+(defun wl-summary-default-from (from)
+  (let (retval tos ng)
+    (unless
+       (and (eq major-mode 'wl-summary-mode)
+            (stringp wl-summary-showto-folder-regexp)
+            (string-match wl-summary-showto-folder-regexp
+                          wl-summary-buffer-folder-name)
+            (wl-address-user-mail-address-p from)
+            (cond
+             ((and (setq tos (elmo-msgdb-overview-entity-get-to entity))
+                   (not (string= "" tos)))
+              (setq retval
+                    (concat "To:"
+                            (mapconcat
+                             (function
+                              (lambda (to)
+                                (eword-decode-string
+                                 (if wl-use-petname
+                                     (wl-address-get-petname to)
+                                   (car 
+                                    (std11-extract-address-components to))))))
+                             (wl-parse-addresses tos)
+                             ","))))
+             ((setq ng (elmo-msgdb-overview-entity-get-extra-field
+                        entity "newsgroups"))
+              (setq retval (concat "Ng:" ng)))))
+      (if wl-use-petname
+         (setq retval (wl-address-get-petname from))
+       (setq retval from)))
+    retval))
+
+(defun wl-summary-simple-from (string)
+  (if wl-use-petname
+      (wl-address-get-petname string)
+    string))
+
+(defvar wl-summary-mode-menu-spec
+  '("Summary"
+    ["Read" wl-summary-read t]
+    ["Prev page" wl-summary-prev-page t]
+    ["Next page" wl-summary-next-page t]
+    ["Top"       wl-summary-display-top t]
+    ["Bottom"    wl-summary-display-bottom t]
+    ["Prev"      wl-summary-prev t]
+    ["Next"      wl-summary-next t]
+    ["Up"        wl-summary-up t]
+    ["Down"      wl-summary-down t]
+    ["Parent message" wl-summary-jump-to-parent-message t]
+    "----"
+    ["Sync"            wl-summary-sync t]
+    ["Execute"         wl-summary-exec t]
+    ["Go to other folder" wl-summary-goto-folder t]
+    ["Pick" wl-summary-pick t]
+    ["Mark as read all" wl-summary-mark-as-read-all t]
+    ["Unmark all"      wl-summary-unmark-all t]
+    ["Toggle display message" wl-summary-toggle-disp-msg t]
+    ["Display folder" wl-summary-toggle-disp-folder t]
+    ["Toggle threading" wl-summary-toggle-thread t]
+    ["Stick" wl-summary-stick t]
+    ("Sort"
+     ["By Number" wl-summary-sort-by-number t]
+     ["By Date" wl-summary-sort-by-date t]
+     ["By From" wl-summary-sort-by-from t]
+     ["By Subject" wl-summary-sort-by-subject t])    
+    "----"
+    ("Message Operation"
+     ["Mark as read"    wl-summary-mark-as-read t]
+     ["Mark as important" wl-summary-mark-as-important t]
+     ["Mark as unread"   wl-summary-mark-as-unread t]
+     ["Set delete mark" wl-summary-delete t]
+     ["Set refile mark" wl-summary-refile t]
+     ["Set copy mark"   wl-summary-copy t]
+     ["Prefetch"        wl-summary-prefetch t]
+     ["Set target mark" wl-summary-target-mark t]
+     ["Unmark"          wl-summary-unmark t]
+     ["Save"           wl-summary-save t]
+     ["Cancel posted news" wl-summary-cancel-message t]
+     ["Supersedes message" wl-summary-supersedes-message t]
+     ["Resend bounced mail" wl-summary-resend-bounced-mail t]
+     ["Resend message" wl-summary-resend-message t]
+     ["Enter the message" wl-summary-jump-to-current-message t]
+     ["Pipe message" wl-summary-pipe-message t]
+     ["Print message" wl-summary-print-message t])
+    ("Thread Operation"
+     ["Open or Close" wl-thread-open-close (eq wl-summary-buffer-view 'thread)]
+     ["Open all"     wl-thread-open-all (eq wl-summary-buffer-view 'thread)]
+     ["Close all"    wl-thread-close-all (eq wl-summary-buffer-view 'thread)]
+     ["Mark as read" wl-thread-mark-as-read (eq wl-summary-buffer-view 'thread)]
+     ["Mark as important"      wl-thread-mark-as-important (eq wl-summary-buffer-view 'thread)]
+     ["Mark as unread"         wl-thread-mark-as-unread (eq wl-summary-buffer-view 'thread)]
+     ["Set delete mark"  wl-thread-delete (eq wl-summary-buffer-view 'thread)]
+     ["Set refile mark"  wl-thread-refile (eq wl-summary-buffer-view 'thread)]
+     ["Set copy mark"    wl-thread-copy (eq wl-summary-buffer-view 'thread)]
+     ["Prefetch"     wl-thread-prefetch (eq wl-summary-buffer-view 'thread)]
+     ["Set target mark"        wl-thread-target-mark (eq wl-summary-buffer-view 'thread)]
+     ["Unmark"      wl-thread-unmark (eq wl-summary-buffer-view 'thread)]
+     ["Save"           wl-thread-save (eq wl-summary-buffer-view 'thread)]
+     ["Execute"      wl-thread-exec (eq wl-summary-buffer-view 'thread)])
+    ("Region Operation"
+     ["Mark as read" wl-summary-mark-as-read-region t]
+     ["Mark as important" wl-summary-mark-as-important-region t]
+     ["Mark as unread" wl-summary-mark-as-unread-region t]
+     ["Set delete mark" wl-summary-delete-region t]
+     ["Set refile mark" wl-summary-refile-region t]
+     ["Set copy mark" wl-summary-copy-region t]
+     ["Prefetch" wl-summary-prefetch-region t]
+     ["Set target mark" wl-summary-target-mark-region t]
+     ["Unmark" wl-summary-unmark-region t]
+     ["Save" wl-summary-save-region t]
+     ["Execute" wl-summary-exec-region t])
+    ("Mark Operation"
+     ["Mark as read" wl-summary-target-mark-mark-as-read t]
+     ["Mark as important" wl-summary-target-mark-mark-as-important t]
+     ["Mark as unread" wl-summary-target-mark-mark-as-unread t]
+     ["Set delete mark" wl-summary-target-mark-delete t]
+     ["Set refile mark" wl-summary-target-mark-refile t]
+     ["Set copy mark" wl-summary-target-mark-copy t]
+     ["Prefetch" wl-summary-target-mark-prefetch t]
+     ["Save" wl-summary-target-mark-save t]
+     ["Reply with citation" wl-summary-target-mark-reply-with-citation t]
+     ["Forward" wl-summary-target-mark-forward t]
+     ["uudecode" wl-summary-target-mark-uudecode t])
+    ("Score Operation"
+     ["Switch current score file" wl-score-change-score-file t]
+     ["Edit current score file" wl-score-edit-current-scores t]
+     ["Edit score file" wl-score-edit-file t]
+     ["Set mark below" wl-score-set-mark-below t]
+     ["Set expunge below" wl-score-set-expunge-below t]
+     ["Rescore buffer" wl-summary-rescore t]
+     ["Increase score" wl-summary-increase-score t]
+     ["Lower score" wl-summary-lower-score t])
+    "----"
+    ("Writing Messages"
+     ["Write a message" wl-summary-write t]
+     ["Reply" wl-summary-reply t]
+     ["Reply with citation" wl-summary-reply-with-citation t]
+     ["Forward" wl-summary-forward t])
+    "----"
+    ["Toggle Plug Status" wl-toggle-plugged t]
+    ["Change Plug Status" wl-plugged-change t]
+    "----"
+    ["Exit Current Folder" wl-summary-exit t]))
+
+(if wl-on-xemacs
+    (defun wl-summary-setup-mouse ()
+      (define-key wl-summary-mode-map 'button4 'wl-summary-prev)
+      (define-key wl-summary-mode-map 'button5 'wl-summary-next)
+      (define-key wl-summary-mode-map [(shift button4)] 
+       'wl-summary-up)
+      (define-key wl-summary-mode-map [(shift button5)] 
+       'wl-summary-down)
+      (define-key wl-summary-mode-map 'button2 'wl-summary-click))
+  (if wl-on-nemacs
+      (defun wl-summary-setup-mouse ())
+    (defun wl-summary-setup-mouse ()
+      (define-key wl-summary-mode-map [mouse-4] 'wl-summary-prev)
+      (define-key wl-summary-mode-map [mouse-5] 'wl-summary-next)
+      (define-key wl-summary-mode-map [S-mouse-4] 'wl-summary-up)
+      (define-key wl-summary-mode-map [S-mouse-5] 'wl-summary-down)
+      (define-key wl-summary-mode-map [mouse-2] 'wl-summary-click))))
+
+(if wl-summary-mode-map
+    ()
+  (setq wl-summary-mode-map (make-sparse-keymap))
+  (define-key wl-summary-mode-map " "    'wl-summary-read)
+  (define-key wl-summary-mode-map "."    'wl-summary-redisplay)
+  (define-key wl-summary-mode-map "<"    'wl-summary-display-top)
+  (define-key wl-summary-mode-map ">"    'wl-summary-display-bottom)
+  (define-key wl-summary-mode-map "\177" 'wl-summary-prev-page)
+  (unless wl-on-nemacs
+    (define-key wl-summary-mode-map [backspace] 'wl-summary-prev-page))
+  (define-key wl-summary-mode-map "\r"   'wl-summary-next-line-content)
+  (define-key wl-summary-mode-map "\C-m" 'wl-summary-next-line-content)
+  (define-key wl-summary-mode-map "/"    'wl-thread-open-close)
+  (define-key wl-summary-mode-map "["    'wl-thread-open-all)
+  (define-key wl-summary-mode-map "]"    'wl-thread-close-all)
+  (define-key wl-summary-mode-map "-"    'wl-summary-prev-line-content)
+  (define-key wl-summary-mode-map "\e\r" 'wl-summary-prev-line-content)
+  (define-key wl-summary-mode-map "g"    'wl-summary-goto-folder)
+  (define-key wl-summary-mode-map "c"    'wl-summary-mark-as-read-all)
+  (define-key wl-summary-mode-map "D"    'wl-summary-drop-unsync)
+  
+  (define-key wl-summary-mode-map "a"    'wl-summary-reply)
+  (define-key wl-summary-mode-map "A"    'wl-summary-reply-with-citation)
+  (define-key wl-summary-mode-map "C"    'wl-summary-cancel-message)
+  (define-key wl-summary-mode-map "E"    'wl-summary-reedit)
+  (define-key wl-summary-mode-map "\eE"  'wl-summary-resend-bounced-mail)
+  (define-key wl-summary-mode-map "f"    'wl-summary-forward)
+  (define-key wl-summary-mode-map "$"    'wl-summary-mark-as-important)
+  (define-key wl-summary-mode-map "@"    'wl-summary-edit-addresses)
+
+  (define-key wl-summary-mode-map "y"    'wl-summary-save)
+  (define-key wl-summary-mode-map "n"    'wl-summary-next)
+  (define-key wl-summary-mode-map "p"    'wl-summary-prev)
+  (define-key wl-summary-mode-map "N"    'wl-summary-down)
+  (define-key wl-summary-mode-map "P"    'wl-summary-up)
+;  (define-key wl-summary-mode-map "w"    'wl-draft)
+  (define-key wl-summary-mode-map "w"    'wl-summary-write)
+  (define-key wl-summary-mode-map "W"    'wl-summary-write-current-newsgroup)
+;  (define-key wl-summary-mode-map "e"     'wl-draft-open-file)
+  (define-key wl-summary-mode-map "e"     'wl-summary-save)
+  (define-key wl-summary-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
+  (define-key wl-summary-mode-map "H"    'wl-summary-redisplay-all-header)
+  (define-key wl-summary-mode-map "M"    'wl-summary-redisplay-no-mime)
+  (define-key wl-summary-mode-map "B"    'wl-summary-burst)
+  (define-key wl-summary-mode-map "Z"    'wl-status-update)
+  (define-key wl-summary-mode-map "#"    'wl-summary-print-message)
+  (define-key wl-summary-mode-map "|"    'wl-summary-pipe-message)
+  (define-key wl-summary-mode-map "q"    'wl-summary-exit)
+  (define-key wl-summary-mode-map "Q"    'wl-summary-force-exit)
+  
+  (define-key wl-summary-mode-map "j"    'wl-summary-jump-to-current-message)
+  (define-key wl-summary-mode-map "J"    'wl-thread-jump-to-msg)
+  (define-key wl-summary-mode-map "I"    'wl-summary-incorporate)
+  (define-key wl-summary-mode-map "\M-j" 'wl-summary-jump-to-msg-by-message-id)
+  (define-key wl-summary-mode-map "^"    'wl-summary-jump-to-parent-message)
+  (define-key wl-summary-mode-map "!"    'wl-summary-mark-as-unread)
+  
+  (define-key wl-summary-mode-map "s"    'wl-summary-sync)
+  (define-key wl-summary-mode-map "S"    'wl-summary-sort)
+  (define-key wl-summary-mode-map "\M-s"    'wl-summary-stick)
+  (define-key wl-summary-mode-map "T"    'wl-summary-toggle-thread)
+
+  (define-key wl-summary-mode-map "l"    'wl-summary-toggle-disp-folder)
+  (define-key wl-summary-mode-map "v"    'wl-summary-toggle-disp-msg)
+  (define-key wl-summary-mode-map "V"    'wl-summary-virtual)
+
+  (define-key wl-summary-mode-map "\C-i"  'wl-summary-goto-last-displayed-msg)
+  (define-key wl-summary-mode-map "?"    'wl-summary-pick)
+  (define-key wl-summary-mode-map "\ee"  'wl-summary-expire)
+
+  ;; line commands
+  (define-key wl-summary-mode-map "R"    'wl-summary-mark-as-read)
+  (define-key wl-summary-mode-map "i"    'wl-summary-prefetch)
+  (define-key wl-summary-mode-map "x"    'wl-summary-exec)
+  (define-key wl-summary-mode-map "*"    'wl-summary-target-mark)
+  (define-key wl-summary-mode-map "o"    'wl-summary-refile)
+  (define-key wl-summary-mode-map "O"    'wl-summary-copy)
+  (define-key wl-summary-mode-map "\M-o" 'wl-summary-refile-prev-destination)
+;  (define-key wl-summary-mode-map "\M-O" 'wl-summary-copy-prev-destination)
+  (define-key wl-summary-mode-map "\C-o" 'wl-summary-auto-refile)  
+  (define-key wl-summary-mode-map "d"    'wl-summary-delete)
+  (define-key wl-summary-mode-map "u"    'wl-summary-unmark)
+  (define-key wl-summary-mode-map "U"    'wl-summary-unmark-all)
+
+  ;; thread commands
+  (define-key wl-summary-mode-map "t"  (make-sparse-keymap))
+  (define-key wl-summary-mode-map "tR" 'wl-thread-mark-as-read)
+  (define-key wl-summary-mode-map "ti" 'wl-thread-prefetch)
+  (define-key wl-summary-mode-map "tx" 'wl-thread-exec)
+  (define-key wl-summary-mode-map "t*" 'wl-thread-target-mark)
+  (define-key wl-summary-mode-map "to" 'wl-thread-refile)
+  (define-key wl-summary-mode-map "tO" 'wl-thread-copy)
+  (define-key wl-summary-mode-map "td" 'wl-thread-delete)
+  (define-key wl-summary-mode-map "tu" 'wl-thread-unmark)
+  (define-key wl-summary-mode-map "t!" 'wl-thread-mark-as-unread)
+  (define-key wl-summary-mode-map "t$" 'wl-thread-mark-as-important)
+  (define-key wl-summary-mode-map "ty" 'wl-thread-save)
+
+  ;; target-mark commands
+  (define-key wl-summary-mode-map "m"    (make-sparse-keymap))
+  (define-key wl-summary-mode-map "mi"   'wl-summary-target-mark-prefetch)
+  (define-key wl-summary-mode-map "mR"   'wl-summary-target-mark-mark-as-read)
+  (define-key wl-summary-mode-map "mo"   'wl-summary-target-mark-refile)
+  (define-key wl-summary-mode-map "mO"   'wl-summary-target-mark-copy)
+  (define-key wl-summary-mode-map "md"   'wl-summary-target-mark-delete)
+  (define-key wl-summary-mode-map "my"   'wl-summary-target-mark-save)
+  (define-key wl-summary-mode-map "m!"   'wl-summary-target-mark-mark-as-unread)
+  (define-key wl-summary-mode-map "m$"   'wl-summary-target-mark-mark-as-important)
+  (define-key wl-summary-mode-map "mu"   'wl-summary-delete-all-temp-marks)
+  (define-key wl-summary-mode-map "mU"   'wl-summary-target-mark-uudecode)
+  (define-key wl-summary-mode-map "ma"   'wl-summary-target-mark-all)
+  (define-key wl-summary-mode-map "mt"   'wl-summary-target-mark-thread)
+  (define-key wl-summary-mode-map "mA"   'wl-summary-target-mark-reply-with-citation)
+  (define-key wl-summary-mode-map "mf"   'wl-summary-target-mark-forward)
+  (define-key wl-summary-mode-map "m?"   'wl-summary-target-mark-pick)
+  
+  ;; region commands
+  (define-key wl-summary-mode-map "r"    (make-sparse-keymap))
+  (define-key wl-summary-mode-map "rR"   'wl-summary-mark-as-read-region)
+  (define-key wl-summary-mode-map "ri"   'wl-summary-prefetch-region)
+  (define-key wl-summary-mode-map "rx"   'wl-summary-exec-region)
+  (define-key wl-summary-mode-map "mr"   'wl-summary-target-mark-region)
+  (define-key wl-summary-mode-map "r*"   'wl-summary-target-mark-region)
+  (define-key wl-summary-mode-map "ro"   'wl-summary-refile-region)
+  (define-key wl-summary-mode-map "rO"   'wl-summary-copy-region)
+  (define-key wl-summary-mode-map "rd"   'wl-summary-delete-region)
+  (define-key wl-summary-mode-map "ru"   'wl-summary-unmark-region)
+  (define-key wl-summary-mode-map "r!"   'wl-summary-mark-as-unread-region)
+  (define-key wl-summary-mode-map "r$"   'wl-summary-mark-as-important-region)
+  (define-key wl-summary-mode-map "ry"   'wl-summary-save-region)
+
+  ;; score commands
+  (define-key wl-summary-mode-map "K"    'wl-summary-increase-score)
+  (define-key wl-summary-mode-map "L"    'wl-summary-lower-score)
+  (define-key wl-summary-mode-map "h"    (make-sparse-keymap))
+  (define-key wl-summary-mode-map "hR"   'wl-summary-rescore)
+  (define-key wl-summary-mode-map "hc"   'wl-score-change-score-file)
+  (define-key wl-summary-mode-map "he"   'wl-score-edit-current-scores)
+  (define-key wl-summary-mode-map "hf"   'wl-score-edit-file)
+  (define-key wl-summary-mode-map "hF"   'wl-score-flush-cache)
+  (define-key wl-summary-mode-map "hm"  'wl-score-set-mark-below)
+  (define-key wl-summary-mode-map "hx"   'wl-score-set-expunge-below)
+
+  (define-key wl-summary-mode-map "\M-t" 'wl-toggle-plugged)
+  (define-key wl-summary-mode-map "\C-t" 'wl-plugged-change)
+  ;;
+  (wl-summary-setup-mouse)
+  (easy-menu-define
+   wl-summary-mode-menu
+   wl-summary-mode-map
+   "Menu used in Summary mode."
+   wl-summary-mode-menu-spec))
+
+(defun wl-status-update ()
+  (interactive)
+  (wl-address-init))
+
+(defun wl-summary-display-top ()
+  (interactive)
+  (goto-char (point-min))
+  (if wl-summary-buffer-disp-msg
+      (wl-summary-redisplay)))
+
+(defun wl-summary-display-bottom ()
+  (interactive)
+  (goto-char (point-max))
+  (forward-line -1)
+  (if wl-summary-buffer-disp-msg
+      (wl-summary-redisplay)))
+
+(defun wl-summary-collect-unread (mark-alist &optional folder)
+  (let (mark ret-val)
+    (while mark-alist
+      (setq mark (cadr (car mark-alist)))
+      (and mark
+          (or (string= mark wl-summary-new-mark)
+              (string= mark wl-summary-unread-uncached-mark)
+              (string= mark wl-summary-unread-cached-mark))
+          (setq ret-val (cons (car (car mark-alist)) ret-val)))
+      (setq mark-alist (cdr mark-alist)))
+    ret-val))
+
+(defun wl-summary-count-unread (mark-alist &optional folder)
+  (let ((new 0)
+       (unread 0)
+       mark)
+    (while mark-alist
+      (setq mark (cadr (car mark-alist)))
+      (and mark
+          (cond 
+           ((string= mark wl-summary-new-mark)
+            (setq new (+ 1 new)))
+           ((or (string= mark wl-summary-unread-uncached-mark)
+                (string= mark wl-summary-unread-cached-mark))
+            (setq unread (+ 1 unread)))))
+      (setq mark-alist (cdr mark-alist)))
+    (if (eq major-mode 'wl-summary-mode)
+       (setq wl-summary-buffer-new-count new 
+             wl-summary-buffer-unread-count unread))
+    (+ new unread)))
+
+(defun wl-summary-make-modeline ()
+  "Create new modeline format for Wanderlust"
+  (let* ((duplicated (copy-sequence mode-line-format))
+        (cur-entry duplicated)
+        return-modeline)
+    (if (memq 'wl-plug-state-indicator mode-line-format)
+       duplicated
+      (catch 'done
+       (while cur-entry
+         (if (or (and (symbolp (car cur-entry))
+                      (eq 'mode-line-buffer-identification 
+                             (car cur-entry)))
+                 (and (consp (car cur-entry))
+                      (or 
+                       (eq 'modeline-buffer-identification 
+                              (car (car cur-entry)))
+                       (eq 'modeline-buffer-identification 
+                              (cdr (car cur-entry))))))
+             (progn
+               (setq return-modeline (append return-modeline
+                                             (list 
+                                              'wl-plug-state-indicator
+                                              (car cur-entry)
+                                              'wl-summary-buffer-unread-status)
+                                             (cdr cur-entry)))
+               (throw 'done return-modeline))
+           (setq return-modeline (append return-modeline
+                                         (list (car cur-entry)))))
+         (setq cur-entry (cdr cur-entry)))))))
+
+(defun wl-summary-reedit (&optional arg)
+  "Re-edit current message.
+If optional argument is non-nil, Supersedes message"
+  (interactive "P")
+  (if arg
+      (wl-summary-supersedes-message)
+    (if (string= wl-summary-buffer-folder-name wl-draft-folder)
+       (if (wl-summary-message-number)
+           (unwind-protect
+               (wl-draft-reedit (wl-summary-message-number))
+             (if (wl-message-news-p)
+                 (mail-position-on-field "Newsgroups")
+               (mail-position-on-field "To"))
+             (delete-other-windows)))
+      (save-excursion
+       (let ((mmelmo-force-fetch-entire-message t))
+         (wl-summary-set-message-buffer-or-redisplay)
+         (set-buffer (wl-message-get-original-buffer))
+         (wl-draft-edit-string (buffer-substring (point-min)
+                                                 (point-max))))))))
+
+(defun wl-summary-resend-bounced-mail ()
+  "Re-mail the current message.
+This only makes sense if the current message is a bounce message which
+contains some mail you have written but has been bounced back to
+you."
+  (interactive)
+  (save-excursion
+    (let ((mmelmo-force-fetch-entire-message t))
+      (wl-summary-set-message-buffer-or-redisplay)
+      (set-buffer (wl-message-get-original-buffer))
+      (goto-char (point-min))
+      (let ((case-fold-search nil))
+       (cond
+        ((and
+          (re-search-forward
+           (concat "^\\($\\|[Cc]ontent-[Tt]ype:[ \t]+multipart/report\\)") nil t)
+          (not (bolp))
+          (re-search-forward "boundary=\"\\([^\"]+\\)\"" nil t))
+         (let ((boundary (buffer-substring (match-beginning 1) (match-end 1)))
+               start)
+           (cond
+            ((and (setq start (re-search-forward
+                          (concat "^--" boundary "\n"
+                                  "[Cc]ontent-[Tt]ype:[ \t]+"
+                                  "\\(message/rfc822\\|text/rfc822-headers\\)\n"
+                                  "\\(.+\n\\)*\n") nil t))
+                  (re-search-forward
+                        (concat "\n\\(--" boundary "\\)--\n") nil t))
+             (wl-draft-edit-string (buffer-substring start (match-beginning 1))))
+            (t
+             (message "Seems no message/rfc822 part.")))))
+        ((let ((case-fold-search t))
+           (re-search-forward wl-rejected-letter-start nil t))
+         (skip-chars-forward " \t\n")
+         (wl-draft-edit-string (buffer-substring (point) (point-max))))
+        (t
+         (message "Does not appear to be a rejected letter.")))))))
+
+(defun wl-summary-resend-message (address)
+  "Resend the current message to ADDRESS."
+  (interactive "sResend message to: ")
+  (if (or (null address) (string-match "^[ \t]*$" address))
+      (message "No address specified.")
+    (message "Resending message to %s..." address)
+    (save-excursion
+      (let ((mmelmo-force-fetch-entire-message t))
+       (wl-summary-set-message-buffer-or-redisplay)
+       ;; We first set up a normal mail buffer.
+       (set-buffer (get-buffer-create " *wl-draft-resend*"))
+       (buffer-disable-undo (current-buffer))
+       (erase-buffer)
+       (setq wl-sent-message-via nil)
+       ;; Insert our usual headers.
+       (wl-draft-insert-from-field)
+       (wl-draft-insert-date-field)
+       (insert "to: " address "\n")
+       (goto-char (point-min))
+       ;; Rename them all to "Resent-*".
+       (while (re-search-forward "^[A-Za-z]" nil t)
+         (forward-char -1)
+         (insert "Resent-"))
+       (widen)
+       (forward-line)
+       (delete-region (point) (point-max))
+       (let ((beg  (point)))
+         ;; Insert the message to be resent.
+         (insert-buffer-substring (wl-message-get-original-buffer))
+         (goto-char (point-min))
+         (search-forward "\n\n")
+         (forward-char -1)
+         (save-restriction
+           (narrow-to-region beg (point))
+           (wl-draft-delete-fields wl-ignored-resent-headers)
+           (goto-char (point-max)))
+         (insert mail-header-separator)
+         ;; Rename all old ("Previous-")Resent headers.
+         (while (re-search-backward "^\\(Previous-\\)*Resent-" beg t)
+           (beginning-of-line)
+           (insert "Previous-"))
+         ;; Quote any "From " lines at the beginning.
+         (goto-char beg)
+         (when (looking-at "From ")
+           (replace-match "X-From-Line: ")))
+       ;; Send it.
+       (wl-draft-dispatch-message)
+       (kill-buffer (current-buffer)))
+      (message "Resending message to %s...done" address))))
+
+(defun wl-summary-msgdb-load-async (folder)
+  "Loading msgdb and selecting folder is executed asynchronously in IMAP4.
+Returns nil if selecting folder was in failure."
+  (if (and (elmo-folder-plugged-p folder)
+          (eq (elmo-folder-get-type folder) 'imap4))
+      (let* ((spec (elmo-folder-get-spec folder))
+            (connection (elmo-imap4-get-connection spec))
+            (process (elmo-imap4-connection-get-process connection))
+            msgdb response)
+       (save-excursion
+         (unwind-protect
+             (progn
+               (elmo-imap4-send-command (process-buffer process)
+                                        process
+                                        (format "select \"%s\"" 
+                                                (elmo-imap4-spec-folder
+                                                 spec)))
+               (setq msgdb (elmo-msgdb-load (elmo-string folder)))
+               (setq response (elmo-imap4-read-response 
+                               (process-buffer process)
+                               process)))
+           (if (null response)
+               (progn
+                 (setcar (cddr connection) nil)
+                 (error "Select folder failed"))
+             (setcar (cddr connection) (elmo-imap4-spec-folder spec))))
+         (if response msgdb)))
+    (elmo-msgdb-load (elmo-string folder))))
+
+(defun wl-summary-buffer-set-folder (folder)
+  (setq wl-summary-buffer-folder-name folder)
+  (when (wl-summary-sticky-p)
+    (make-local-variable 'wl-message-buf-name)
+    (setq wl-message-buf-name (format "%s:%s" wl-message-buf-name folder)))
+  (setq wl-summary-buffer-mime-charset (or (wl-get-assoc-list-value 
+                                           wl-folder-mime-charset-alist
+                                           folder)
+                                          wl-mime-charset))
+  (setq wl-summary-buffer-weekday-name-lang 
+       (or (wl-get-assoc-list-value 
+            wl-folder-weekday-name-lang-alist
+            folder)
+           wl-summary-weekday-name-lang))
+  (setq wl-summary-buffer-thread-indent-set
+       (wl-get-assoc-list-value 
+        wl-folder-thread-indent-set-alist
+        folder))
+  (setq wl-summary-buffer-persistent (wl-folder-persistent-p folder))
+  (setq 
+   wl-thread-indent-level-internal
+   (or (nth 0 wl-summary-buffer-thread-indent-set)
+       wl-thread-indent-level)
+   wl-thread-have-younger-brother-str-internal
+   (or (nth 1 wl-summary-buffer-thread-indent-set)
+       wl-thread-have-younger-brother-str)
+   wl-thread-youngest-child-str-internal
+   (or (nth 2 wl-summary-buffer-thread-indent-set)
+       wl-thread-youngest-child-str)
+   wl-thread-vertical-str-internal
+   (or (nth 3 wl-summary-buffer-thread-indent-set)
+       wl-thread-vertical-str)
+   wl-thread-horizontal-str-internal
+   (or (nth 4 wl-summary-buffer-thread-indent-set)
+       wl-thread-horizontal-str)
+   wl-thread-space-str-internal
+   (or (nth 5 wl-summary-buffer-thread-indent-set)
+       wl-thread-space-str))
+  (setq wl-thread-indent-regexp 
+       (concat 
+        (regexp-quote wl-thread-have-younger-brother-str-internal) "\\|"
+        (regexp-quote wl-thread-youngest-child-str-internal) "\\|"
+        (regexp-quote wl-thread-vertical-str-internal) "\\|"
+        (regexp-quote wl-thread-horizontal-str-internal) "\\|"
+        (regexp-quote wl-thread-space-str-internal)))
+  (run-hooks 'wl-summary-buffer-set-folder-hook))
+
+(defun wl-summary-mode ()
+  "Major mode for reading threaded messages.
+The keys that are defined for this mode are:\\<wl-summary-mode-map>
+
+SPC    Read messages. 
+DEL    Back-scroll this message. 
+.      Force to display this message. 
+RET    Make this message scroll up with one line.
+M-RET -        Make this message scroll down with one line.
+
+C-n    Go to the next line.
+C-p    Go to the previous line.
+n      Move to below then display. 
+N       Move to next unread.
+p      Move to above then display. 
+P       Move to previous unread.
+s      Sync current folder.
+t       Same as 's' but force update. 
+g      Go to the folder which you input.
+w      Write a message. A new draft is prepared.
+a      Answer to this message. A new draft is prepared in Draft mode. 
+f      Forward this message to a third person. A new draft is prepared in 
+       Draft mode and this message is automatically attached.
+v      Toggle \"Summary and Folder view\".
+        You can quickly put the delete marks since the next message is not 
+        displayed.
+i       Prefetch message if uncached.
+o      Put the refile mark('o') on this message. 
+!      Mark current message as unread.
+$      Toggle mark current message as important.
+d      Put the delete mark('D') on this message.
+c       Check all messages as read.
+*      Put the temporal mark('*') on this message. 
+u      Cancel the mark on this message.
+x      Process marked messages. 
+
+mo     Put the refile mark onto all messages marked with '*'.
+       This is very convenient to refile all messages picked by '?'.
+md     Put the delete mark onto all messages marked with '*'.
+mi      Prefetch all messages marked with '*'.
+mu     Unmark all target-marked messages.
+mt      Put the '*' mark onto all messages which belong to th current thread.
+ma      Put the '*' mark onto all messages.
+?      Pick messages according to a pick pattern which you input, 
+       then put the '*' mark onto them.
+q      Goto folder mode.
+"
+  (interactive)
+  (setq major-mode 'wl-summary-mode)
+  (setq mode-name "Summary")
+  (use-local-map wl-summary-mode-map)
+  (setq wl-summary-buffer-refile-list nil)
+  (setq wl-summary-buffer-target-mark-list nil)
+  (setq wl-summary-buffer-delete-list nil)
+  (setq wl-summary-scored nil)
+  (setq wl-summary-buffer-disp-msg nil)  
+;; (setq default-directory (or wl-tmp-dir (expand-file-name "~/")))  
+  (setq buffer-read-only t)
+  (setq truncate-lines t)
+;  (make-local-variable 'tab-width)
+;  (setq tab-width 1)
+  (buffer-disable-undo (current-buffer))
+  (if wl-use-semi
+      (setq wl-summary-buffer-message-redisplay-func 
+           'wl-mmelmo-message-redisplay)
+    (setq wl-summary-buffer-message-redisplay-func
+         'wl-normal-message-redisplay))
+  (wl-xmas-setup-summary) ; setup toolbar, dnd, etc.
+  (when wl-show-plug-status-on-modeline 
+    (setq mode-line-format (wl-summary-make-modeline)))
+  (easy-menu-add wl-summary-mode-menu)
+  (run-hooks 'wl-summary-mode-hook))
+
+(defun wl-summary-overview-entity-compare-by-date (x y)
+  "Compare entity by date"
+  (condition-case nil
+      (string<
+       (timezone-make-date-sortable 
+       (elmo-msgdb-overview-entity-get-date x))
+       (timezone-make-date-sortable 
+       (elmo-msgdb-overview-entity-get-date y)))
+    (error))) ;; ignore error.
+
+(defun wl-summary-overview-entity-compare-by-number (x y)
+  "Compare entity by number"
+  (<
+   (elmo-msgdb-overview-entity-get-number x)
+   (elmo-msgdb-overview-entity-get-number y)))
+
+(defun wl-summary-overview-entity-compare-by-from (x y)
+  "Compare entity by from"
+  (string<
+   (wl-address-header-extract-address
+    (or (elmo-msgdb-overview-entity-get-from-no-decode x)
+       wl-summary-no-from-message))
+   (wl-address-header-extract-address
+    (or (elmo-msgdb-overview-entity-get-from-no-decode y)
+       wl-summary-no-from-message))))
+
+(defun wl-summary-overview-entity-compare-by-subject (x y)
+  "Compare entity by subject"
+  (string< (elmo-msgdb-overview-entity-get-subject-no-decode x)
+          (elmo-msgdb-overview-entity-get-subject-no-decode y)))
+
+(defun wl-summary-sort-by-date ()
+  (interactive)
+  (wl-summary-rescan "date"))
+(defun wl-summary-sort-by-number ()
+  (interactive)
+  (wl-summary-rescan "number"))
+(defun wl-summary-sort-by-subject ()
+  (interactive)
+  (wl-summary-rescan "subject"))
+(defun wl-summary-sort-by-from ()
+  (interactive)
+  (wl-summary-rescan "from"))
+
+(defun wl-summary-rescan (&optional sort-by)
+  "Rescan current folder without updating."
+  (interactive)
+  (let* ((cur-buf (current-buffer))
+        (msgdb wl-summary-buffer-msgdb) 
+        (overview (elmo-msgdb-get-overview msgdb))
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        (elmo-mime-charset wl-summary-buffer-mime-charset)
+        i percent num
+        gc-message entity
+        curp
+        (inhibit-read-only t)
+        (buffer-read-only nil)
+        expunged)
+    (fset 'wl-summary-append-message-func-internal 
+         (wl-summary-get-append-message-func))
+    (erase-buffer)
+    (message "Re-scanning...")
+    (setq i 0)
+    (setq num (length overview))
+    (when sort-by
+      (message "Sorting by %s..." sort-by)
+      (setq overview
+           (sort overview
+                 (intern (format "wl-summary-overview-entity-compare-by-%s"
+                                 sort-by))))
+      (message "Sorting by %s...done" sort-by)
+      (elmo-msgdb-set-overview wl-summary-buffer-msgdb
+                              overview))
+    (setq curp overview)
+    (set-buffer cur-buf)
+    (setq wl-thread-entity-hashtb (elmo-make-hash (* (length overview) 2)))
+    (setq wl-thread-entity-list nil)
+    (setq wl-thread-entities nil)
+    (setq wl-summary-buffer-target-mark-list nil)
+    (setq wl-summary-buffer-refile-list nil)
+    (setq wl-summary-buffer-delete-list nil)
+    (message "Constructing summary structure..." percent)
+    (while curp
+      (setq entity (car curp))
+      (wl-summary-append-message-func-internal entity overview mark-alist
+                                              nil)
+      (setq curp (cdr curp))
+      (setq i (+ i 1))
+      (elmo-display-progress
+       'wl-summary-rescan "Constructing summary structure..."
+       (/ (* i 100) num)))
+    (message "Constructing summary structure...done." percent)
+    (set-buffer cur-buf)
+    (when (eq wl-summary-buffer-view 'thread)
+      (message "Inserting thread...")
+      (wl-thread-insert-top)
+      (message "Inserting thread...done."))
+    (when wl-use-scoring
+      (setq wl-summary-scored nil)
+      (wl-summary-score-headers nil msgdb
+                               (wl-summary-rescore-msgs number-alist)
+                               t)
+      (setq expunged (wl-summary-score-update-all-lines))
+      (if expunged
+         (message "%d message(s) are expunged by scoring." (length expunged))))
+    (wl-summary-set-message-modified)
+    (wl-summary-count-unread mark-alist)
+    (wl-summary-update-modeline)    
+    (goto-char (point-max))
+    (forward-line -1)
+    (set-buffer-modified-p nil)))
+    
+(defun wl-summary-next-folder-or-exit (&optional next-entity upward)
+  (if (and next-entity
+          wl-auto-select-next)
+      (let (retval)
+       (wl-summary-toggle-disp-msg 'off)
+       (unwind-protect
+           (setq retval
+                 (wl-summary-goto-folder-subr next-entity 
+                                              'force-update
+                                              nil
+                                              nil ; not sticky
+                                              t   ; interactive!
+                                              ))
+         (wl-folder-set-current-entity-id (wl-folder-get-entity-id next-entity))
+         (if (and (eq retval 'more-next)
+                  (memq wl-auto-select-next '(unread skip-no-unread))
+                  (memq this-command wl-summary-next-no-unread-command))
+             (if upward
+                 (wl-summary-up
+                  t (eq wl-auto-select-next 'skip-no-unread))
+               (goto-char (point-max))
+               (forward-line -1)
+               (wl-summary-down
+                t (eq wl-auto-select-next 'skip-no-unread))))))
+    (wl-summary-exit)))
+
+(defun wl-summary-entity-info-msg (entity finfo)
+  (or (and entity
+          (concat
+           (elmo-replace-in-string
+            (if (memq 'ask-folder wl-use-folder-petname)
+                (wl-folder-get-petname entity)
+              entity)
+            "%" "%%")
+           (if (null (car finfo))
+               " (? new/? unread)"
+             (format 
+              " (%d new/%d unread)" 
+              (nth 0 finfo)
+              (+ (nth 0 finfo)
+                 (nth 1 finfo))))))
+      "folder mode"))
+
+(defun wl-summary-set-message-modified ()
+  (setq wl-summary-buffer-message-modified t))
+(defun wl-summary-message-modified-p ()
+  wl-summary-buffer-message-modified)
+(defun wl-summary-set-mark-modified ()
+  (setq wl-summary-buffer-mark-modified t))
+(defun wl-summary-mark-modified-p ()
+  wl-summary-buffer-mark-modified)
+
+(defun wl-summary-msgdb-save ()
+  "Save msgdb if modified."
+  (when wl-summary-buffer-msgdb
+    (save-excursion
+      (let (path)
+       (when (wl-summary-message-modified-p)
+         (setq path (elmo-msgdb-expand-path wl-summary-buffer-folder-name))
+         (elmo-msgdb-overview-save 
+          path 
+          (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
+         (elmo-msgdb-number-save 
+          path 
+          (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+         (elmo-folder-set-info-max-by-numdb
+          (elmo-string wl-summary-buffer-folder-name)
+          (elmo-msgdb-get-number-alist
+           wl-summary-buffer-msgdb))
+         (setq wl-summary-buffer-message-modified nil))
+       (when (wl-summary-mark-modified-p)
+         (or path 
+             (setq path (elmo-msgdb-expand-path
+                         wl-summary-buffer-folder-name)))
+         (elmo-msgdb-mark-save 
+          path
+          (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+;;       (elmo-folder-set-info-hashtb
+;;        (elmo-string wl-summary-buffer-folder-name)
+;;        nil nil
+;;        0
+;;        (+ wl-summary-buffer-new-count wl-summary-buffer-unread-count))
+;;       (setq wl-folder-info-alist-modified t)
+         (setq wl-summary-buffer-mark-modified nil))))))
+
+(defsubst wl-summary-cleanup-temp-marks (&optional sticky)
+  (if (or wl-summary-buffer-refile-list
+         wl-summary-buffer-copy-list
+         wl-summary-buffer-delete-list)
+      (if (y-or-n-p "Marks remain to be executed. Execute them?")
+         (progn
+           (wl-summary-exec)
+           (if (or wl-summary-buffer-refile-list
+                   wl-summary-buffer-copy-list
+                   wl-summary-buffer-delete-list)
+               (error "Some execution was failed")))
+       ;; delete temp-marks
+       (message "")
+       (wl-summary-delete-all-refile-marks)
+       (wl-summary-delete-all-copy-marks)
+       (wl-summary-delete-all-delete-marks)))
+  (if wl-summary-buffer-target-mark-list
+      (progn
+       (wl-summary-delete-all-target-marks)
+       (setq wl-summary-buffer-target-mark-list nil)))
+  (wl-summary-delete-all-temp-marks-on-buffer sticky)
+  (setq wl-summary-scored nil))
+
+;; a subroutine for wl-summary-exit/wl-save-status
+(defun wl-summary-save-status (&optional sticky)
+  ;; already in summary buffer.
+  (when wl-summary-buffer-persistent
+    ;; save the current summary buffer view.
+    (if (and wl-summary-cache-use 
+            (or (wl-summary-message-modified-p)
+                (wl-summary-mark-modified-p)))
+       (wl-summary-save-view-cache sticky))
+    ;; save msgdb ... 
+    (wl-summary-msgdb-save)))
+
+(defun wl-summary-force-exit ()
+  "Exit current summary. Buffer is deleted even the buffer is sticky"
+  (interactive)
+  (wl-summary-exit 'force-exit))
+
+(defun wl-summary-exit (&optional force-exit)
+  "Exit current summary. if FORCE-EXIT, exits even the summary is sticky."
+  (interactive "P")
+  (let ((summary-buf (current-buffer))
+       (sticky (wl-summary-sticky-p))
+       (message-buf (get-buffer wl-message-buf-name))
+       summary-win
+       message-buf message-win
+       folder-buf folder-win)
+    (wl-summary-cleanup-temp-marks sticky)
+    (unwind-protect
+       ;; save summary status
+       (progn
+         (wl-summary-save-status sticky)
+         ;(wl-summary-msgdb-save)
+         (if wl-use-scoring
+             (wl-score-save)))
+      ;; for sticky summary
+      (wl-delete-all-overlays)
+      (setq wl-summary-buffer-disp-msg nil)
+      ;; delete message window if displayed.
+      (if (setq message-buf (get-buffer wl-message-buf-name))
+         (if (setq message-win (get-buffer-window message-buf))
+             (delete-window message-win)))
+      (if (setq folder-buf (get-buffer wl-folder-buffer-name))
+         (if (setq folder-win (get-buffer-window folder-buf))
+             ;; folder win is already displayed.
+             (select-window folder-win)
+           ;; folder win is not displayed.
+           (switch-to-buffer folder-buf))
+       ;; currently no folder buffer
+       (wl-folder))
+      (and wl-folder-move-cur-folder
+          wl-folder-buffer-cur-point
+          (goto-char wl-folder-buffer-cur-point))
+      (setq wl-folder-buffer-cur-path nil)
+      (setq wl-folder-buffer-cur-entity-id nil)
+      (wl-delete-all-overlays)
+      (if wl-summary-exit-next-move
+         (wl-folder-next-unsync t)
+       (beginning-of-line))
+      (if (setq summary-win (get-buffer-window summary-buf))
+         (delete-window summary-win))
+      (if (or force-exit 
+             (not sticky))
+         (progn
+           (set-buffer summary-buf)
+           (and (get-buffer wl-message-buf-name)
+                (kill-buffer wl-message-buf-name))
+           ;; kill buffers of mime-view-caesar
+           (wl-kill-buffers
+            (format "^%s-([0-9 ]+)$" (regexp-quote wl-message-buf-name)))
+           (kill-buffer summary-buf)))
+      (run-hooks 'wl-summary-exit-hook))))
+
+(defun wl-summary-sync-force-update (&optional unset-cursor)
+  (interactive)
+  (let ((msgdb-dir (elmo-msgdb-expand-path wl-summary-buffer-folder-name))
+       ret-val seen-list)
+    (unwind-protect
+       (progn
+         (setq seen-list (elmo-msgdb-seen-load msgdb-dir))
+         (setq ret-val (wl-summary-sync-update3 seen-list unset-cursor))
+         (elmo-msgdb-seen-save msgdb-dir nil))
+      (set-buffer (current-buffer)))
+    (if (interactive-p)
+       (message "%s" ret-val))
+    ret-val))
+
+(defun wl-summary-sync (&optional unset-cursor force-range)
+  (interactive)
+  (let* ((folder wl-summary-buffer-folder-name)
+        (inhibit-read-only t)
+        (buffer-read-only nil)
+        (msgdb-dir (elmo-msgdb-expand-path
+                    folder))
+        (range (or force-range (wl-summary-input-range folder)))
+        mes seen-list)
+    (cond ((string= range "all")
+          ;; initialize buffer local databases.
+          (unless (elmo-folder-plugged-p folder) ; forbidden
+            (error "Unplugged"))
+          (wl-summary-cleanup-temp-marks)
+          (setq seen-list
+                (nconc
+                 (elmo-msgdb-mark-alist-to-seen-list
+                  (elmo-msgdb-get-number-alist
+                   wl-summary-buffer-msgdb)
+                  (elmo-msgdb-get-mark-alist 
+                   wl-summary-buffer-msgdb)
+                  (concat wl-summary-important-mark
+                          wl-summary-read-uncached-mark))
+                 (elmo-msgdb-seen-load msgdb-dir)))
+          (setq wl-thread-entity-hashtb (elmo-make-hash
+                                         (* (length (elmo-msgdb-get-number-alist
+                                                     wl-summary-buffer-msgdb)) 2)))
+          (setq wl-summary-buffer-msgdb '(nil nil nil nil))
+          (setq wl-thread-entity-list nil)
+          (setq wl-thread-entities nil)
+          (setq wl-summary-buffer-target-mark-list nil)
+          (setq wl-summary-buffer-refile-list nil)
+          (setq wl-summary-buffer-copy-list nil)
+          (setq wl-summary-buffer-delete-list nil)
+          (wl-summary-buffer-number-column-detect nil)
+          (setq mes (wl-summary-sync-update3 seen-list unset-cursor))
+          (elmo-msgdb-seen-save msgdb-dir nil) ; delete all seen.
+          (if mes (message "%s" mes)))
+;         (wl-summary-sync-all folder t))
+         ((string= range "rescan")
+          (let ((msg (wl-summary-message-number)))
+            (wl-summary-rescan)
+            (and msg (wl-summary-jump-to-msg msg))))
+         ((string= range "rescan-noscore")
+          (let ((msg (wl-summary-message-number))
+                wl-use-scoring)
+            (wl-summary-rescan)
+            (and msg (wl-summary-jump-to-msg msg))))
+         ((or (string-match "last:" range)
+              (string-match "first:" range))
+          (wl-summary-goto-folder-subr (concat "/" range "/" folder)
+                                       'force-update nil nil t))
+         ((string= range "no-sync")
+          ;; do nothing.
+          )
+         (t 
+          (setq seen-list (elmo-msgdb-seen-load msgdb-dir))
+          (setq mes (wl-summary-sync-update3 seen-list unset-cursor))
+          (elmo-msgdb-seen-save msgdb-dir nil) ; delete all seen.
+          (if mes (message "%s" mes))))))
+
+(defvar wl-summary-edit-addresses-candidate-fields
+  ;; First element becomes default.
+  '("from" "to" "cc"))
+
+(defun wl-summary-edit-addresses-collect-candidate-fields (mime-charset)
+  (let ((fields wl-summary-edit-addresses-candidate-fields)
+       body candidates components)
+    (while fields
+      (setq body 
+           (mapconcat 'identity (elmo-multiple-field-body (car fields))
+                      ","))
+      (setq body (wl-parse-addresses body))
+      (if body (setq candidates (append candidates body)))
+      (setq fields (cdr fields)))
+    (setq candidates (elmo-uniq-list candidates))
+    (elmo-set-work-buf
+     (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+     (mapcar (function
+             (lambda (x)
+               (setq components (std11-extract-address-components x))
+               (cons (nth 1 components)
+                     (and (car components)
+                          (eword-decode-string
+                           (decode-mime-charset-string
+                            (car components)
+                            mime-charset))))))
+            candidates))))
+
+(defun wl-summary-edit-addresses-subr (the-email name-in-addr)
+  ;; returns nil if there's no change.
+  (if (elmo-get-hash-val (downcase the-email) wl-address-petname-hash)
+      (let (char)
+       (message (format "'%s' already exists. (e)dit/(d)elete/(c)ancel?"
+                        the-email))
+       (while (not (or (eq (setq char (read-char)) ?\r)
+                       (eq char ?\n)
+                       (eq char ? )
+                       (eq char ?e)
+                       (eq char ?c)
+                       (eq char ?d)))
+         (message
+          "Please answer `e' or `d' or `c'. (e)dit/(d)elete/(c)ancel?"))
+       (cond
+        ((or (eq char ?e)
+             (eq char ?\n)
+             (eq char ?\r)
+             (eq char ? ))
+         ;; Change Addresses
+         (wl-address-petname-add-or-change 
+          the-email
+          (elmo-get-hash-val the-email wl-address-petname-hash)
+          (wl-address-header-extract-realname
+           (cdr (assoc (downcase the-email)
+                       wl-address-completion-list))) t)
+         "edited")
+        ((eq char ?d)
+         ;; Delete Addresses
+         (if (y-or-n-p (format "Delete '%s'? "
+                               the-email))
+             (progn
+               (wl-address-petname-delete the-email)
+               "deleted")
+           (message "")
+           nil))
+        (t (message "")
+           nil)))
+    ;; Add Petname
+    (wl-address-petname-add-or-change 
+     the-email name-in-addr name-in-addr)
+    "added"))
+
+(defun wl-summary-edit-addresses (&optional addr-str)
+  "Edit address book interactively.
+Optional argument ADDR-STR is used as a target address if specified."
+  (interactive (if current-prefix-arg
+                  (list (read-from-minibuffer "Target address: "))))
+  (save-excursion
+    (wl-summary-set-message-buffer-or-redisplay))
+  (let* ((charset wl-summary-buffer-mime-charset)
+        (candidates
+         (with-current-buffer (wl-message-get-original-buffer)
+           (wl-summary-edit-addresses-collect-candidate-fields
+            charset)))
+        address pair result)
+    (if addr-str
+       (setq address addr-str)
+      (when candidates
+       (setq address (car (car candidates)))
+       (setq address
+             (completing-read 
+              (format "Target address (%s): " address)
+              (mapcar
+               (function (lambda (x) (cons (car x) (car x))))
+               candidates)
+              nil nil nil nil address))))
+    (when address
+      (setq pair (assoc address candidates))
+      (unless pair
+       (setq pair (cons address nil)))
+      (when (setq result (wl-summary-edit-addresses-subr (car pair) (cdr pair)))
+       ;; update alias
+       (wl-status-update)
+       (setq address (assoc (car pair) wl-address-list))
+       (if address
+           (message "%s, %s, <%s> is %s."
+                    (nth 2 address)
+                    (nth 1 address)
+                    (nth 0 address)
+                    result)))
+      ;; i'd like to update summary-buffer, but...
+      ;;(wl-summary-rescan)
+      (run-hooks 'wl-summary-edit-addresses-hook))))
+
+(defun wl-summary-incorporate (&optional arg)
+  "Check and prefetch all uncached messages.
+If optional argument is non-nil, checking is omitted."
+  (interactive "P")
+  (unless arg
+    (wl-summary-sync-force-update))
+  (wl-summary-prefetch-region (point-min) (point-max)
+                             wl-summary-incorporate-marks))
+
+(defun wl-summary-prefetch-msg (number)
+  "Returns status-mark. if skipped, returns nil."
+  ;; prefetching procedure.
+  (save-excursion
+    (let* ((msgdb wl-summary-buffer-msgdb)
+          (mark-alist (elmo-msgdb-get-mark-alist msgdb))         
+          (number-alist (elmo-msgdb-get-number-alist msgdb))
+          (message-id (cdr (assq number number-alist)))
+          (ov (assoc message-id 
+                     (elmo-msgdb-get-overview msgdb)))
+          (entity ov)
+          (size (elmo-msgdb-overview-entity-get-size ov))
+          (inhibit-read-only t)
+          (buffer-read-only nil)          
+          (force-read (and size
+                           (or (null wl-prefetch-threshold)
+                               (< size wl-prefetch-threshold))))
+          mark new-mark)
+      (unwind-protect
+         (progn
+           (when (and size (not force-read) wl-prefetch-confirm)
+             (setq force-read
+                   (save-restriction
+                     (widen)
+                     (y-or-n-p
+                      (format
+                       "Message from %s has %d bytes. Prefetch it?" 
+                       (concat 
+                        "[ "
+                        (save-match-data 
+                          (wl-set-string-width 
+                           wl-from-width
+                           (wl-summary-from-func-internal
+                            (eword-decode-string
+                             (elmo-delete-char 
+                              ?\"
+                              (or 
+                               (elmo-msgdb-overview-entity-get-from ov)
+                               "??")))))) " ]")
+                       size))))
+             (message "")); flush.
+           (setq mark (cadr (assq number mark-alist)))
+            (if force-read
+             (save-excursion
+               (save-match-data
+                 (if (and (null (elmo-folder-plugged-p
+                                 wl-summary-buffer-folder-name))
+                          elmo-enable-disconnected-operation)
+                     (progn ;; append-queue for offline
+                       (elmo-dop-prefetch-msgs
+                        wl-summary-buffer-folder-name (list number))
+                       (setq new-mark
+                             (cond
+                              ((string= mark
+                                        wl-summary-unread-uncached-mark)
+                               wl-summary-unread-cached-mark)
+                              ((string= mark wl-summary-new-mark)
+                               (setq wl-summary-buffer-new-count
+                                     (- wl-summary-buffer-new-count 1))
+                               (setq wl-summary-buffer-unread-count
+                                     (+ wl-summary-buffer-unread-count 1))
+                               wl-summary-unread-cached-mark)
+                              ((or (null mark)
+                                   (string= mark wl-summary-read-uncached-mark))
+                               (setq wl-summary-buffer-unread-count
+                                     (+ wl-summary-buffer-unread-count 1))
+                               wl-summary-unread-cached-mark)
+                              (t mark))))
+                   ;; online
+                   (elmo-prefetch-msg wl-summary-buffer-folder-name
+                                      number
+                                      (wl-message-get-original-buffer)
+                                      msgdb)
+                   (setq new-mark
+                         (cond
+                          ((string= mark 
+                                    wl-summary-unread-uncached-mark)
+                           wl-summary-unread-cached-mark)
+                          ((string= mark wl-summary-new-mark)
+                           (setq wl-summary-buffer-new-count 
+                                 (- wl-summary-buffer-new-count 1))
+                           (setq wl-summary-buffer-unread-count
+                                 (+ wl-summary-buffer-unread-count 1))
+                           wl-summary-unread-cached-mark)
+                          ((string= mark wl-summary-read-uncached-mark)
+                           nil)
+                          (t mark))))
+                 (setq mark-alist (elmo-msgdb-mark-set
+                                   mark-alist number new-mark))
+                 (or new-mark (setq new-mark " "))
+                 (elmo-msgdb-set-mark-alist msgdb mark-alist)
+                 (wl-summary-set-mark-modified)
+                 (wl-summary-update-modeline)
+                 (wl-folder-update-unread
+                  wl-summary-buffer-folder-name
+                  (+ wl-summary-buffer-unread-count
+                     wl-summary-buffer-new-count)))
+               new-mark)))))))
+
+;(defvar wl-summary-message-uncached-marks
+;  (list wl-summary-new-mark 
+;      wl-summary-unread-uncached-mark
+;      wl-summary-read-uncached-mark))
+
+(defun wl-summary-prefetch-region (beg end &optional prefetch-marks)
+  (interactive "r")
+  (let ((count 0)
+       targets
+       mark length
+       entity msg
+       start-pos)
+    (save-excursion
+      (setq start-pos (point))
+      (save-restriction
+       (narrow-to-region beg end)
+       ;; collect prefetch targets.
+       (message "Collecting marks...")
+       (goto-char (point-min))
+       (while (not (eobp))
+         (beginning-of-line)
+         (when (looking-at "^ *\\([0-9]+\\)[^0-9]\\([^0-9]\\)")
+           (setq mark (wl-match-buffer 2))
+           (setq msg (string-to-int (wl-match-buffer 1)))
+           (if (or (and (null prefetch-marks)
+                        msg
+                        (null (elmo-cache-exists-p
+                               (cdr (assq msg
+                                          (elmo-msgdb-get-number-alist
+                                           wl-summary-buffer-msgdb))))))
+                   (member mark prefetch-marks))
+               (setq targets (nconc targets (list msg))))
+           (setq entity (wl-thread-get-entity msg))
+           (if (or (not (eq wl-summary-buffer-view 'thread))
+                   (wl-thread-entity-get-opened entity))
+               (); opened. no hidden children.
+             ;; hidden children!!
+             (setq targets (nconc
+                            targets
+                            (wl-thread-get-children-msgs-uncached
+                             msg prefetch-marks)))))
+         (forward-line 1))
+       (setq length (length targets))
+       (message "Prefetching...")
+       (while targets
+         (setq mark (if (not (wl-thread-entity-parent-invisible-p
+                              (wl-thread-get-entity (car targets))))
+                        (progn
+                          (wl-summary-jump-to-msg (car targets))
+                          (wl-summary-prefetch))
+                      (wl-summary-prefetch-msg (car targets))))
+         (if (if prefetch-marks
+                 (string= mark wl-summary-unread-cached-mark)
+               (or (string= mark wl-summary-unread-cached-mark)
+                   (string= mark " ")))
+             (message "Prefetching... %d/%d message(s)"
+                      (setq count (+ 1 count)) length))
+         ;; redisplay!
+         (save-excursion
+           (save-restriction
+             (widen)
+             (goto-char start-pos)
+             (sit-for 0)))
+         (setq targets (cdr targets)))
+       (message "Prefetched %d/%d message(s)" count length)
+       (cons count length)))))
+
+(defun wl-summary-prefetch ()
+  "Prefetch current message."
+  (interactive)
+  (save-excursion
+    (save-match-data
+      (beginning-of-line)
+      (when (looking-at "^ *\\([0-9]+\\)[^0-9]\\([^0-9]\\)")
+       (goto-char (match-beginning 2))
+       (let ((inhibit-read-only t)
+             (buffer-read-only nil)
+             mark)
+         (setq mark (wl-summary-prefetch-msg
+                     (string-to-int (wl-match-buffer 1))))
+         (when mark
+           (delete-region (match-beginning 2)
+                          (match-end 2))
+           (insert mark)
+           (if wl-summary-highlight
+               (wl-highlight-summary-current-line)))
+         (set-buffer-modified-p nil)
+         mark)))))
+
+(defun wl-summary-delete-all-status-marks-on-buffer ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         (case-fold-search nil))
+      (while (re-search-forward 
+             (concat "^" wl-summary-buffer-number-regexp ".\\(.\\)") nil t)
+       (delete-region (match-beginning 1) (match-end 1))
+       (insert " ")))))
+
+(defun wl-summary-delete-copy-marks-on-buffer (cpys)
+  (mapcar (function
+          (lambda (x)
+            (wl-summary-unmark x)))
+         cpys))
+
+(defun wl-summary-delete-all-refile-marks ()
+  (mapcar (function
+          (lambda (x)
+            (wl-summary-unmark (car x)))) wl-summary-buffer-refile-list))
+
+(defun wl-summary-delete-all-copy-marks ()
+  (mapcar (function
+          (lambda (x)
+            (wl-summary-unmark (car x)))) wl-summary-buffer-copy-list))
+(defun wl-summary-delete-all-delete-marks ()
+  (mapcar 'wl-summary-unmark wl-summary-buffer-delete-list))
+
+(defun wl-summary-delete-all-target-marks ()
+  (mapcar 'wl-summary-unmark wl-summary-buffer-target-mark-list))
+
+(defun wl-summary-delete-all-temp-marks-on-buffer (&optional sticky)
+  ;; for summary view cache saving.
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         (case-fold-search nil)
+         (regexp (concat "^" wl-summary-buffer-number-regexp "\\([^ ]\\)" )))
+      (while (re-search-forward regexp nil t)
+       (delete-region (match-beginning 1) (match-end 1))
+       (insert " ")
+       (if (and sticky wl-summary-highlight)
+           (wl-highlight-summary-current-line))))))
+
+(defun wl-summary-delete-all-marks (mark-alist mark)
+  "Delete all MARKs in MARK-ALIST"
+  (let ((malist mark-alist)
+       (ret-val mark-alist)
+       entity)
+    (while malist
+      (setq entity (car malist))
+      (if (string= (cadr entity) mark)
+         ;; delete this entity
+         (setq ret-val (delete entity ret-val)))
+      (setq malist (cdr malist)))
+    ret-val))
+
+;; Does not work correctly...
+(defun wl-summary-mark-as-read-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end);(save-excursion (goto-char end)
+                                       ;    (end-of-line) (point)))
+      (goto-char (point-min))
+      (if (eq wl-summary-buffer-view 'thread)
+         (progn
+           (while (not (eobp))
+             (let* ((number (wl-summary-message-number))
+                    (entity (wl-thread-get-entity number))
+                    children)
+               (if (wl-thread-entity-get-opened entity)
+                   ;; opened...mark line.
+                   ;; Crossposts are not processed
+                   (wl-summary-mark-as-read t)
+                 ;; closed
+                 (wl-summary-mark-as-read t) ; mark itself.
+                 (setq children (wl-thread-get-children-msgs number))
+                 (while children 
+                   (wl-thread-msg-mark-as-read (car children))
+                   (setq children (cdr children))))
+               (forward-line 1))))
+       (while (not (eobp))
+         (wl-summary-mark-as-read t)
+         (forward-line 1)))))
+  (wl-summary-count-unread (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+  (wl-summary-update-modeline))
+
+(defun wl-summary-mark-as-unread-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end);(save-excursion (goto-char end)
+                                       ;    (end-of-line) (point)))
+      (goto-char (point-min))
+      (if (eq wl-summary-buffer-view 'thread)
+         (progn
+           (while (not (eobp))
+             (let* ((number (wl-summary-message-number))
+                    (entity (wl-thread-get-entity number))
+                    children)
+               (if (wl-thread-entity-get-opened entity)
+                   ;; opened...mark line.
+                   ;; Crossposts are not processed
+                   (wl-summary-mark-as-unread)
+                 ;; closed
+                 (wl-summary-mark-as-unread) ; mark itself.
+                 (setq children 
+                       (delq number (wl-thread-get-children-msgs number)))
+                 (while children 
+                   (wl-thread-msg-mark-as-unread (car children))
+                   (setq children (cdr children))))
+               (forward-line 1))))
+       (while (not (eobp))
+         (wl-summary-mark-as-unread)
+         (forward-line 1)))))
+  (wl-summary-count-unread (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+  (wl-summary-update-modeline))
+
+(defun wl-summary-mark-as-important-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end);(save-excursion (goto-char end)
+                                       ;    (end-of-line) (point)))
+      (goto-char (point-min))
+      (if (eq wl-summary-buffer-view 'thread)
+         (progn
+           (while (not (eobp))
+             (let* ((number (wl-summary-message-number))
+                    (entity (wl-thread-get-entity number))
+                    children)
+               (if (wl-thread-entity-get-opened entity)
+                   ;; opened...mark line.
+                   ;; Crossposts are not processed
+                   (wl-summary-mark-as-important)
+                 ;; closed
+                 (wl-summary-mark-as-important) ; mark itself.
+                 (setq children 
+                       (delq number (wl-thread-get-children-msgs number)))
+                 (while children 
+                   (wl-thread-msg-mark-as-important (car children))
+                   (setq children (cdr children))))
+               (forward-line 1))))
+       (while (not (eobp))
+         (wl-summary-mark-as-important)
+         (forward-line 1)))))
+  (wl-summary-count-unread (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+  (wl-summary-update-modeline))
+
+(defun wl-summary-mark-as-read-all ()
+  (interactive)
+  (if (or (not (interactive-p))
+         (y-or-n-p "Mark all messages as read?"))
+      (let* ((folder wl-summary-buffer-folder-name)
+            (cur-buf (current-buffer))
+            (msgdb wl-summary-buffer-msgdb)
+            ;;(number-alist (elmo-msgdb-get-number-alist msgdb))
+            (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+            (malist mark-alist)
+            (inhibit-read-only t)
+            (buffer-read-only nil)
+            (case-fold-search nil)
+            msg mark)
+       (message "Setting all msgs as read...")
+       (elmo-mark-as-read folder (wl-summary-collect-unread mark-alist)
+                          msgdb)
+       (save-excursion
+         (goto-char (point-min))
+         (while (re-search-forward "^ *\\([0-9]+\\)[^0-9]\\([^0-9 ]\\)" nil t)
+           (setq msg (string-to-int (wl-match-buffer 1)))
+           (setq mark (wl-match-buffer 2))
+           (when (and (not (string= mark wl-summary-important-mark))
+                      (not (string= mark wl-summary-read-uncached-mark)))
+             (delete-region (match-beginning 2) (match-end 2))
+             (if (or (not (elmo-use-cache-p folder msg))
+                     (string= mark wl-summary-unread-cached-mark))
+                 (progn
+                   (insert " ")
+                   (setq mark-alist
+                         (elmo-msgdb-mark-set 
+                          mark-alist
+                          msg ;(cdr (assq msg number-alist)) 
+                          nil)))
+               ;; New mark and unread-uncached mark
+               (insert wl-summary-read-uncached-mark)
+               (setq mark-alist
+                     (elmo-msgdb-mark-set mark-alist
+                                          msg
+                                       ; (cdr (assq msg number-alist)) 
+                                          wl-summary-read-uncached-mark)))
+             (if wl-summary-highlight
+                 (wl-highlight-summary-current-line nil nil t)))))
+       (setq mark-alist (wl-summary-set-as-read-mark-alist mark-alist))
+       (wl-summary-set-mark-modified)
+       (set-buffer cur-buf); why is this needed???
+       (elmo-msgdb-set-mark-alist msgdb mark-alist)
+       (wl-folder-update-unread wl-summary-buffer-folder-name 0)
+       (setq wl-summary-buffer-unread-count 0)
+       (setq wl-summary-buffer-new-count    0) 
+       (wl-summary-update-modeline)
+       (message "Setting all msgs as read...done.")
+       (set-buffer-modified-p nil))))
+
+(defun wl-summary-delete-cache ()
+  "Delete cache of current message."
+  (interactive)
+  (save-excursion
+    (let* ((inhibit-read-only t)
+          (buffer-read-only nil)
+          (folder wl-summary-buffer-folder-name)
+          (msgdb wl-summary-buffer-msgdb)
+          (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+          (number-alist (elmo-msgdb-get-number-alist msgdb))
+          (case-fold-search nil)
+          mark number unread new-mark)
+;      (re-search-backward "^ *[0-9]+..[0-9]+/[0-9]+" nil t) ; set cursor line
+      (beginning-of-line)
+      (when (looking-at "^ *\\([0-9]+\\)[^0-9]\\([^0-9]\\)")
+       (progn
+         (setq mark (wl-match-buffer 2))
+         (cond 
+          ((or (string= mark wl-summary-new-mark)
+               (string= mark wl-summary-unread-uncached-mark)
+               (string= mark wl-summary-important-mark))
+           ;; noop
+           )
+          ((string= mark wl-summary-unread-cached-mark)
+           (setq new-mark wl-summary-unread-uncached-mark))
+          (t 
+           (setq new-mark wl-summary-read-uncached-mark)))
+         (when new-mark
+           (setq number (string-to-int (wl-match-buffer 1)))
+           (delete-region (match-beginning 2) (match-end 2))
+           (goto-char (match-beginning 2))
+           (insert new-mark)
+           (elmo-cache-delete (cdr (assq number number-alist))
+                              wl-summary-buffer-folder-name
+                              number)
+           (setq mark-alist
+                 (elmo-msgdb-mark-set mark-alist number new-mark))
+           (elmo-msgdb-set-mark-alist msgdb mark-alist)
+           (wl-summary-set-mark-modified)
+           (if wl-summary-highlight
+               (wl-highlight-summary-current-line nil nil t))
+           (set-buffer-modified-p nil)))))))
+  
+(defun wl-summary-resume-cache-status ()
+  "Resume the cache status of all messages in the current folder."
+  (interactive)
+  (let* ((folder wl-summary-buffer-folder-name)
+        (cur-buf (current-buffer))
+        (msgdb wl-summary-buffer-msgdb)
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        (inhibit-read-only t)
+        (buffer-read-only nil)
+        (case-fold-search nil)
+        msg mark msgid set-mark)
+    (message "Resuming cache status...")
+    (save-excursion
+      (goto-char (point-min))
+      (while (re-search-forward "^ *\\([0-9]+\\)[^0-9]\\([^0-9]\\)" nil t)
+       (setq msg (string-to-int
+                  (wl-match-buffer 1)))
+       (setq mark (wl-match-buffer 2))
+       (setq msgid (cdr (assq msg number-alist)))
+       (setq set-mark nil)
+       (if (elmo-cache-exists-p msgid folder msg)
+           (if (or
+                (string= mark wl-summary-unread-uncached-mark) ; U -> !
+                (string= mark wl-summary-new-mark)             ; N -> !
+                )
+               (setq set-mark wl-summary-unread-cached-mark)
+             (if (string= mark wl-summary-read-uncached-mark)  ; u -> ' '
+                 (setq set-mark " ")))
+         (if (string= mark " ")                            
+             (setq set-mark wl-summary-read-uncached-mark)     ;' ' -> u
+           (if (string= mark wl-summary-unread-cached-mark) 
+               (setq set-mark wl-summary-unread-uncached-mark) ; !  -> U
+             )))
+       (when set-mark
+         (delete-region (match-beginning 2) (match-end 2))
+         (insert set-mark)
+         (setq mark-alist
+               (elmo-msgdb-mark-set 
+                mark-alist msg ; msgid 
+                (if (string= set-mark " ") nil set-mark)))
+         (if wl-summary-highlight
+             (wl-highlight-summary-current-line))))
+      (wl-summary-set-mark-modified)
+      (set-buffer cur-buf); why is this needed???
+      (elmo-msgdb-set-mark-alist msgdb mark-alist)
+      (wl-summary-count-unread mark-alist)
+      (wl-summary-update-modeline)
+      (message "Resuming cache status...done.")
+      (set-buffer-modified-p nil))))
+
+(defun wl-summary-resume-marks-and-highlight ()
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        ;;(number-alist (elmo-msgdb-get-number-alist msgdb))
+        (count (count-lines (point-min)(point-max)))
+        (i 0)
+        msg-num percent smark)
+    (save-excursion
+      (goto-char (point-min))
+      (message "Resuming all marks...")
+      (while (not (eobp))
+       (setq msg-num (wl-summary-message-number))
+       (setq smark (car (cdr (assq msg-num mark-alist))))
+       (if (looking-at (format "^ *%s \\( \\)" msg-num))
+           (progn
+             (goto-char (match-end 1))
+             (delete-region (match-beginning 1) (match-end 1))
+             (insert (or smark " "))))
+       (wl-highlight-summary-current-line smark)
+       (setq i (+ i 1))
+       (setq percent (/ (* i 100) count))
+       (elmo-display-progress
+        'wl-summary-resume-marks-and-highlight "Resuming all marks..."
+        percent)
+       (forward-line 1)))
+    (message "Resuming all marks...done.")))
+
+(defun wl-summary-resume-marks ()
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (count (length mark-alist))
+        (i 0)
+        entity msg-num percent)
+    (save-excursion
+      (message "Resuming all marks...")
+      (while mark-alist
+       (setq entity (car mark-alist))
+       (if (setq msg-num (car (rassoc (car entity) number-alist)))
+           (progn ;(goto-char (point-min))
+             (if (re-search-forward (format "^ *%s \\( \\)" msg-num) nil t)
+                 (progn
+                   (delete-region (match-beginning 1) (match-end 1))
+                   (insert (or (cadr entity)
+                               " ")))
+               (if (re-search-backward (format "^ *%s \\( \\)" msg-num) nil t)
+                   (progn
+                     (goto-char (match-end 1))
+                     (delete-region (match-beginning 1) (match-end 1))
+                     (insert (or (cadr entity)
+                                 " ")))))))
+       (setq i (+ i 1))
+       (setq percent (/ (* i 100) count))
+       (elmo-display-progress
+        'wl-summary-resume-marks "Resuming all marks..."
+        percent)
+       (setq mark-alist (cdr mark-alist)))
+      (message "Resuming all marks...done."))))
+
+(defun wl-summary-delete-messages-on-buffer (msgs &optional deleting-info)
+  (interactive)
+  (save-excursion
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         (msgs2 msgs)
+         (len (length msgs))
+         (i 0)
+         update-list)
+      (while msgs
+       (if (eq wl-summary-buffer-view 'thread)
+           (progn
+             (setq update-list
+                   (wl-append update-list
+                              (wl-thread-delete-message (car msgs))))
+             (setq update-list (and update-list
+                                    (delete (car msgs) update-list))))
+         (goto-char (point-min))
+         (if (re-search-forward (format "^ *%d[^0-9]\\([^0-9]\\).*$" 
+                                        (car msgs)) nil t)
+             (progn
+               (delete-region (match-beginning 0) (match-end 0))
+               (delete-char 1) ; delete '\n'
+               )))
+       (when deleting-info
+         (setq i (1+ i))
+         (and (zerop (% i 10))
+              (elmo-display-progress
+               'wl-summary-delete-messages-on-buffer "Deleting..."
+               (/ (* i 100) len))))
+       (setq msgs (cdr msgs)))
+      (if (eq wl-summary-buffer-view 'thread)
+         (wl-thread-update-line-msgs (elmo-uniq-list update-list)))
+      (wl-thread-cleanup-symbols msgs2)
+      (wl-summary-count-unread 
+       (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+      (wl-summary-update-modeline)         
+      (wl-folder-update-unread
+       wl-summary-buffer-folder-name
+       (+ wl-summary-buffer-unread-count wl-summary-buffer-new-count)))))
+
+(defun wl-summary-set-as-read-mark-alist (mark-alist)
+  (let ((marks (list (cons wl-summary-unread-cached-mark 
+                          nil)
+                    (cons wl-summary-unread-uncached-mark 
+                          wl-summary-read-uncached-mark)
+                    (cons wl-summary-new-mark
+                          wl-summary-read-uncached-mark)))
+       (ret-val mark-alist)
+       entity pair)
+    (while mark-alist
+      (setq entity (car mark-alist))
+      (when (setq pair (assoc (cadr entity) marks))
+       (if (elmo-use-cache-p wl-summary-buffer-folder-name
+                             (caar mark-alist))
+           (if (cdr pair)
+               (setcar (cdr entity) (cdr pair))
+               (setq ret-val (delete entity ret-val)))
+         (setq ret-val (delete entity ret-val))))
+      (setq mark-alist (cdr mark-alist)))
+    ret-val))
+
+(defun wl-summary-set-status-marks (mark-alist before after)
+  "Set the BEFORE marks to AFTER"
+  (let ((ret-val mark-alist)
+       entity)
+    (while mark-alist
+      (setq entity (car mark-alist))
+      (when (string= (cadr entity) before)
+       (if after
+           (setcar (cdr entity) after)
+         (setq ret-val (delete entity ret-val))))
+      (setq mark-alist (cdr mark-alist)))
+    ret-val))
+
+(defun wl-summary-set-status-marks-on-buffer (before after)
+  "Set the MARKS marks on buffer"
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         (regexp (concat "^" wl-summary-buffer-number-regexp ".\\(\\%s\\)")))
+      (while (re-search-forward 
+             (format regexp (regexp-quote before)) nil t)
+       (delete-region (match-beginning 1) (match-end 1))
+       (insert after)
+       (if wl-summary-highlight
+           (wl-highlight-summary-current-line))))))
+
+(defun wl-summary-get-delete-folder (folder)
+  (if (string= folder wl-trash-folder)
+      'null
+    (let* ((type (or (wl-get-assoc-list-value wl-delete-folder-alist folder)
+                    'trash)))
+      (cond ((stringp type)
+            type)
+           ((or (equal type 'remove) (equal type 'null))
+            'null)
+           (t;; (equal type 'trash)
+            wl-trash-folder)))))
+
+(defun wl-summary-delete-important-msgs-from-list (delete-list 
+                                                  mark-alist)
+  (let ((dlist delete-list))
+    (while dlist
+      (if (string= wl-summary-important-mark 
+                  (car (cdr (assq (car dlist) mark-alist))))
+         (setq delete-list (delete (car dlist) delete-list)))
+      (setq dlist (cdr dlist)))
+    delete-list))
+
+(defun wl-summary-delete-canceled-msgs-from-list (delete-list msgdb)
+  (let ((dlist delete-list))
+    (while dlist
+      (if (null (cdr (assq (car dlist) (cadr msgdb))))
+         (setq delete-list (delete (car dlist) delete-list)))
+      (setq dlist (cdr dlist)))
+    delete-list))
+  
+(defun wl-summary-get-append-message-func ()
+  (if (eq wl-summary-buffer-view 'thread)
+      'wl-summary-insert-thread-entity
+;      'wl-summary-insert-thread
+    'wl-summary-insert-summary))
+
+(defun wl-summary-sort ()
+  (interactive)
+  (let ((sort-by (let ((input-range-list '("number" "date" "subject" "from"))
+                      (default "date")
+                      in)
+                  (setq in
+                        (completing-read 
+                         (format "Sort by (%s): " default)
+                         (mapcar 
+                          (function (lambda (x) (cons x x)))
+                          input-range-list)))
+                  (if (string= in "")
+                      default
+                    in))))
+    (if (not (member sort-by '("number" "date" "subject" "from")))
+       (error "Sort by %s is not implemented"  sort-by))
+    (wl-summary-rescan sort-by)))
+
+(defun wl-summary-sync-marks ()
+  "Update marks in summary."
+  (interactive)
+  (let ((plugged (elmo-folder-plugged-p wl-summary-buffer-folder-name))
+       mark-alist unread-marks msgs mark importants unreads 
+       importants-in-db unreads-in-db has-imap4 diff diffs
+       mes)
+    ;; synchronize marks.
+    (when (not (eq (elmo-folder-get-type 
+                   wl-summary-buffer-folder-name)
+                  'internal))
+      (message "Updating marks...")
+      (setq unread-marks (list wl-summary-unread-cached-mark
+                              wl-summary-unread-uncached-mark
+                              wl-summary-new-mark)
+           mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb)
+           importants (elmo-list-folder-important 
+                       wl-summary-buffer-folder-name
+                       (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
+           has-imap4 (elmo-folder-contains-type 
+                      wl-summary-buffer-folder-name 'imap4)
+           unreads (if (and has-imap4 plugged)
+                       (elmo-list-folder-unread 
+                        wl-summary-buffer-folder-name
+                        mark-alist unread-marks)))
+      (while mark-alist 
+       (if (string= (cadr (car mark-alist))
+                    wl-summary-important-mark)
+           (setq importants-in-db (cons (car (car mark-alist))
+                                        importants-in-db))
+         (if (member (cadr (car mark-alist)) unread-marks)
+             (setq unreads-in-db (cons (car (car mark-alist))
+                                       unreads-in-db))))
+       (setq mark-alist (cdr mark-alist)))      
+      (setq diff (elmo-list-diff importants importants-in-db))
+      (setq diffs (cadr diff)) ; important-deletes
+      (setq mes (format "Updated (-%d" (length diffs)))
+      (while diffs
+       (wl-summary-mark-as-important (car diffs)
+                                     wl-summary-important-mark
+                                     'no-server)
+       (setq diffs (cdr diffs)))
+      (setq diffs (car diff)) ; important-appends
+      (setq mes (concat mes (format "/+%d) important," (length diffs))))
+      (while diffs
+       (wl-summary-mark-as-important (car diffs) " " 'no-server)
+       (setq diffs (cdr diffs)))
+      (when (and has-imap4 plugged)
+       (setq diff (elmo-list-diff unreads unreads-in-db))
+       (setq diffs (cadr diff))
+       (setq mes (concat mes (format "(-%d" (length diffs))))
+       (while diffs
+         (wl-summary-mark-as-read t 'no-server nil (car diffs) 'no-cache)
+         (setq diffs (cdr diffs)))
+       (setq diffs (car diff)) ; unread-appends
+       (setq mes (concat mes (format "/+%d) unread mark(s)." (length diffs))))
+       (while diffs
+         (wl-summary-mark-as-unread (car diffs) 'no-server 'no-modeline)
+         (setq diffs (cdr diffs))))
+      (if (interactive-p) (message mes)))))
+
+(defun wl-summary-confirm-appends (appends)
+  (condition-case nil
+      (let ((len (length appends))
+           in)
+       (if (> len wl-summary-update-confirm-threshold)
+           (if (y-or-n-p (format "Too many messages(%d). Continue?" len))
+               appends
+             (setq in wl-summary-update-confirm-threshold)
+             (catch 'end
+               (while t
+                 (setq in (read-from-minibuffer "Update number: " 
+                                                (int-to-string in))
+                       in (string-to-int in))
+                 (if (y-or-n-p (format "%d messages are disappeared. OK?" 
+                                       (- len in)))
+                     (throw 'end in))))
+             (nthcdr (max (- len in) 0) appends))
+         appends))
+    (quit nil)
+    (error nil))) ;
+
+(defun wl-summary-sync-update3 (&optional seen-list unset-cursor)
+  "Update the summary view."
+  (interactive)
+  (let* ((folder wl-summary-buffer-folder-name)
+        (cur-buf (current-buffer))
+        (msgdb wl-summary-buffer-msgdb)
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        (overview (elmo-msgdb-get-overview msgdb))
+        ;;(location (elmo-msgdb-get-location msgdb))
+        (case-fold-search nil)
+        (elmo-mime-charset wl-summary-buffer-mime-charset)
+        (inhibit-read-only t)
+        (buffer-read-only nil)
+        diff append-list delete-list
+        i percent num result
+        gc-message
+        in-folder
+        in-db curp
+        overview-append
+        entity ret-val crossed crossed2 sync-all
+        top-num update-top-list mark
+        expunged msgs unreads importants)
+    ;(setq seen-list nil) ;for debug.
+    (fset 'wl-summary-append-message-func-internal 
+         (wl-summary-get-append-message-func))
+    ;; Flush pending append operations (disconnected operation).
+    (setq seen-list
+         (wl-summary-flush-pending-append-operations seen-list))
+    (goto-char (point-max))
+    (message "Checking folder diff...")
+    (setq in-folder (elmo-list-folder folder))
+    (setq in-db (sort (mapcar 'car number-alist) '<))
+    (when (or (eq msgdb nil) ; trick for unplugged...
+             (equal msgdb '(nil nil nil nil)))
+      (setq sync-all t)
+      (wl-summary-set-message-modified)
+      (wl-summary-set-mark-modified)
+      (erase-buffer))
+    (setq diff (if (eq (elmo-folder-get-type folder) 'multi)
+                  (elmo-multi-list-bigger-diff in-folder in-db)
+                (elmo-list-bigger-diff in-folder in-db)))
+    (setq append-list (car diff))
+    (setq delete-list (cadr diff))
+    (message "Checking folder diff...done.")
+    ;; Don't delete important-marked msgs other than 'internal.
+    (unless (eq (elmo-folder-get-type folder) 'internal)
+      (setq delete-list
+           (wl-summary-delete-important-msgs-from-list delete-list 
+                                                       mark-alist)))
+    (if (and (elmo-folder-contains-type folder 'nntp)
+            (elmo-nntp-max-number-precedes-list-active-p))
+       ;; XXX this does not work correctly in rare case.
+       (setq delete-list
+             (wl-summary-delete-canceled-msgs-from-list delete-list
+                                                        msgdb)))    
+    (if (or (equal diff '(nil nil))
+           (equal diff '(nil))
+           (and (eq (length delete-list) 0)
+                (eq (length append-list) 0)))
+       (progn
+         ;; For max-number update...
+         (if (and (elmo-folder-contains-type folder 'nntp)
+                    (elmo-nntp-max-number-precedes-list-active-p)
+                    (elmo-update-number folder msgdb))
+             (wl-summary-set-message-modified)
+           (setq ret-val (format "No update is needed for \"%s\"" folder))))
+      (when delete-list
+       (message "Deleting...")
+       (elmo-msgdb-delete-msgs folder delete-list msgdb t) ; reserve cache.
+       ;;(set-buffer cur-buf)
+       (wl-summary-delete-messages-on-buffer delete-list t)
+       (message "Deleting...done."))
+      ;;(set-buffer cur-buf)
+      ;; Change "New" marks to "Uncached Unread" marks.
+      (wl-summary-set-status-marks mark-alist 
+                                  wl-summary-new-mark 
+                                  wl-summary-unread-uncached-mark)
+      (wl-summary-set-status-marks-on-buffer 
+       wl-summary-new-mark 
+       wl-summary-unread-uncached-mark)
+      ;; Confirm appended message number.
+      (setq append-list (wl-summary-confirm-appends append-list))
+      (setq num (length append-list))
+      (if append-list
+         (progn
+           (setq i 0)
+           (setq result (elmo-msgdb-create 
+                         folder 
+                         append-list
+                         wl-summary-new-mark
+                         wl-summary-unread-cached-mark ; !
+                         wl-summary-read-uncached-mark ; u ;; XXXX
+                         wl-summary-important-mark
+                         seen-list))
+           ;; delete duplicated messages.
+           (when (elmo-folder-contains-multi folder)
+             (setq crossed (elmo-multi-delete-crossposts
+                            msgdb result))
+             (setq result (cdr crossed))
+             (setq crossed (car crossed)))
+           (setq overview-append (car result))
+           (setq msgdb (elmo-msgdb-append msgdb result))
+           ;; set these value for append-message-func
+           (setq overview (elmo-msgdb-get-overview msgdb))
+           (setq number-alist (elmo-msgdb-get-number-alist msgdb))
+           (setq mark-alist (elmo-msgdb-get-mark-alist msgdb))
+           ;; (setq location (elmo-msgdb-get-location msgdb))
+           (setq curp overview-append)
+           (setq num (length curp))
+           (while curp
+             (setq entity (car curp))
+             (setq top-num
+                   (wl-summary-append-message-func-internal 
+                    entity overview mark-alist 
+                    (not sync-all)))
+             (when top-num
+               (wl-append update-top-list (list top-num)))
+             (if elmo-use-database
+                 (elmo-database-msgid-put 
+                  (car entity) folder
+                  (elmo-msgdb-overview-entity-get-number entity)))
+             (setq curp (cdr curp))
+             (setq i (+ i 1))
+             (setq percent (/ (* i 100) num))
+             (elmo-display-progress
+              'wl-summary-sync-update3 "Updating thread..."
+              percent))
+           (setq update-top-list
+                 (elmo-uniq-list update-top-list))
+           (when (and (eq wl-summary-buffer-view 'thread)
+                      update-top-list )
+             (message "Updating indent...")
+             (wl-thread-update-indent-string-thread update-top-list)
+             (message "Updating indent...done."))
+           (message "Updating thread...done.")
+           ;;(set-buffer cur-buf)
+           ))
+      (wl-summary-set-message-modified)
+      (wl-summary-set-mark-modified)
+      (setq wl-summary-buffer-msgdb msgdb)
+      (when (and sync-all (eq wl-summary-buffer-view 'thread))
+       (message "Inserting thread...")
+       (setq wl-thread-entity-cur 0)
+       (wl-thread-insert-top)
+       (message "Inserting thread...done."))
+      (if elmo-use-database
+         (elmo-database-close))
+      (run-hooks 'wl-summary-sync-updated-hook)
+      (setq ret-val (format "Updated (-%d/+%d) message(s)" 
+                           (length delete-list) num)))
+    ;; synchronize marks.
+    (if wl-summary-auto-sync-marks
+       (wl-summary-sync-marks))
+    ;; scoring
+    (when wl-use-scoring
+      (setq wl-summary-scored nil)
+      (wl-summary-score-headers nil msgdb 
+                               (and sync-all
+                                    (wl-summary-rescore-msgs number-alist))
+                               sync-all)
+      (setq expunged (wl-summary-score-update-all-lines))
+      (if expunged
+         (setq ret-val (concat ret-val 
+                               (format " (%d expunged)" 
+                                       (length expunged))))))
+    ;; crosspost
+    (setq crossed2 (wl-summary-update-crosspost))
+    (if (or crossed crossed2)
+       (let ((crosses (+ (or crossed 0)
+                         (or crossed2 0))))
+         (setq ret-val
+               (if ret-val
+                   (concat ret-val
+                           (format " (%d crosspost)" crosses))
+                 (format "%d crosspost message(s)" crosses))))
+      (and ret-val
+          (setq ret-val (concat ret-val "."))))
+    ;; Update Folder mode
+    (wl-folder-set-folder-updated folder (list 0 
+                                              (wl-summary-count-unread 
+                                               (elmo-msgdb-get-mark-alist
+                                                msgdb))
+                                              (length in-folder)))
+    (wl-summary-update-modeline)
+    ;;
+    (unless unset-cursor
+      (goto-char (point-min))
+      (if (not (wl-summary-cursor-down t))
+         (progn
+           (goto-char (point-max))
+           (forward-line -1))
+       (if (and wl-summary-highlight
+                (not (get-text-property (point) 'face)))
+           (save-excursion
+             (forward-line (- 0 
+                              (or
+                               wl-summary-partial-highlight-above-lines
+                               wl-summary-highlight-partial-threshold)))
+             (wl-highlight-summary (point) (point-max))))))
+    (wl-delete-all-overlays)
+    (set-buffer-modified-p nil)
+    ret-val))
+
+(defun wl-summary-set-score-mark (mark)
+  (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         msg-num
+         cur-mark)
+      (when (looking-at "^ *\\([0-9]+\\)\\([^0-9]\\)")
+       (setq msg-num  (string-to-int (wl-match-buffer 1)))
+       (setq cur-mark (wl-match-buffer 2))
+       (when (member cur-mark (list " "
+                                    wl-summary-score-below-mark
+                                    wl-summary-score-over-mark))
+         (goto-char (match-end 1))
+         (delete-region (match-beginning 2) (match-end 2))
+         (insert mark)
+         (if wl-summary-highlight
+             (wl-highlight-summary-current-line nil nil t))
+         (set-buffer-modified-p nil))))))
+
+(defun wl-summary-get-score-mark (msg-num)
+  (let ((score (cdr (assq msg-num wl-summary-scored))))
+    (if score
+       (cond ((< score wl-summary-default-score)
+              "-")
+             ((> score wl-summary-default-score)
+              "+")))))
+
+(defun wl-summary-update-modeline ()
+  (setq wl-summary-buffer-unread-status 
+       (format " {%s}(%d new/%d unread)"
+               (if (eq wl-summary-buffer-view 'thread)
+                   "T" "S")
+               wl-summary-buffer-new-count
+               (+ wl-summary-buffer-new-count
+                  wl-summary-buffer-unread-count))))
+
+(defsubst wl-summary-jump-to-msg (&optional number)
+  (interactive)
+  (let ((num (or number 
+                (string-to-int 
+                 (read-from-minibuffer "Jump to Message(No.): ")))))
+    (setq num (int-to-string num))
+    (if (re-search-forward (concat "^[ \t]*" num "[^0-9]") nil t)
+       (progn
+         (beginning-of-line)
+         t)
+      (if (re-search-backward (concat "^[ \t]*" num "[^0-9]") nil t)
+         (progn
+           (beginning-of-line)
+           t)
+       nil))))
+
+(defun wl-summary-highlight-msgs (msgs)
+  (save-excursion
+    (let ((len (length msgs))
+         i)
+      (message "Hilighting...")
+      (setq i 0)
+      (while msgs
+       (setq i (+ i 1))
+       (elmo-display-progress
+        'wl-summary-highlight-msgs "Highlighting..."
+        (/ (* i 100) len))
+       (if (wl-summary-jump-to-msg (car msgs))
+           (wl-highlight-summary-current-line))
+       (setq msgs (cdr msgs)))
+      (message "Highlighting...done."))))
+
+(defun wl-summary-message-number ()
+  (save-excursion
+    (beginning-of-line)
+    (if (looking-at "^ *\\([0-9]+\\)")
+       (string-to-int (wl-match-buffer 1))
+      nil)))
+
+(defun wl-summary-move (src dsts-msgs)
+  (let* ((dsts (car dsts-msgs))                ; (+foo +bar)
+;;      (msgs (cdr dsts-msgs))         ; (1 2 3)
+;;      (msgdb wl-summary-buffer-msgdb)
+;;      result)
+        )
+    (while dsts
+      (setq dsts (cdr dsts)))))
+
+(defun wl-summary-flush-pending-append-operations (&optional seen-list)
+  "Execute append operations that are done while offline status."
+  (when (and (elmo-folder-plugged-p wl-summary-buffer-folder-name)
+            elmo-enable-disconnected-operation)
+    (let* ((resumed-list (elmo-dop-append-list-load 
+                         wl-summary-buffer-folder-name t))
+          (append-list (elmo-dop-append-list-load 
+                        wl-summary-buffer-folder-name))
+          (appends (append resumed-list append-list))
+          (number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+          dels pair)
+      (when appends
+       (while appends
+         (if (setq pair (rassoc (car appends) number-alist))
+             (setq dels (append dels (list (car pair)))))
+         (setq appends (cdr appends)))
+       (when dels
+         (setq seen-list
+               (elmo-msgdb-add-msgs-to-seen-list-subr
+                dels
+                wl-summary-buffer-msgdb
+                (concat wl-summary-important-mark
+                        wl-summary-read-uncached-mark)
+                seen-list))
+         (message "Resuming summary status...")
+         (elmo-msgdb-delete-msgs wl-summary-buffer-folder-name
+                                 dels wl-summary-buffer-msgdb t)
+         (wl-summary-delete-messages-on-buffer dels)
+         (message "Resuming summary status...done."))
+       ;; delete resume-file
+       (elmo-dop-append-list-save wl-summary-buffer-folder-name nil t)
+       (when append-list
+         (elmo-dop-flush-pending-append-operations 
+          wl-summary-buffer-folder-name append-list)))))
+  seen-list)
+
+(defun wl-summary-delete-all-msgs ()
+  (interactive)
+  (let ((cur-buf (current-buffer))
+       (dels (elmo-list-folder wl-summary-buffer-folder-name)))
+    (set-buffer cur-buf)
+    (if (null dels)
+       (message "No message to delete.")
+      (if (y-or-n-p (format "%s has %d message(s). Delete all?"
+                           wl-summary-buffer-folder-name
+                           (length dels)))
+         (progn
+           (message "Deleting...")
+           (elmo-delete-msgs wl-summary-buffer-folder-name dels
+                             wl-summary-buffer-msgdb)
+           (elmo-msgdb-delete-msgs wl-summary-buffer-folder-name
+                                   dels wl-summary-buffer-msgdb)
+           ;;(elmo-msgdb-save wl-summary-buffer-folder-name nil)
+           (wl-summary-set-message-modified)
+           (wl-summary-set-mark-modified)
+           (wl-folder-set-folder-updated wl-summary-buffer-folder-name
+                                         (list 0 0 0))
+           ;; for thread.
+           ;; (setq wl-thread-top-entity '(nil t nil nil))
+           (setq wl-summary-buffer-unread-count 0)
+           (setq wl-summary-buffer-new-count    0)
+           (wl-summary-update-modeline)
+           (set-buffer cur-buf)
+           (let ((inhibit-read-only t)
+                 (buffer-read-only nil))
+             (erase-buffer))
+           ;;    (if wl-summary-cache-use (wl-summary-save-view-cache))      
+           (message "Deleting...done.")
+           t)
+       nil))))
+
+(defun wl-summary-toggle-thread (&optional arg)
+  "Toggle thread status (T)hread and (S)equencial."
+  (interactive "P")
+  (when (or arg
+           (y-or-n-p (format "Toggle threading? (y=%s): " 
+                             (if (eq wl-summary-buffer-view 'thread)
+                                 "\"off\"" "\"on\""))))
+    (if (eq wl-summary-buffer-view 'thread)
+       (setq wl-summary-buffer-view 'sequence)
+      (setq wl-summary-buffer-view 'thread))
+    (wl-summary-update-modeline)
+    (force-mode-line-update)
+    (wl-summary-rescan)))
+
+(defun wl-summary-load-file-object (filename)
+  "Load lisp object from dir."
+  (save-excursion
+    (let ((tmp-buffer (get-buffer-create " *wl-summary-load-file-object*"))
+         insert-file-contents-pre-hook   ; To avoid autoconv-xmas...
+         insert-file-contents-post-hook 
+         ret-val)
+      (if (not (file-readable-p filename))
+         ()
+       (set-buffer tmp-buffer)
+       (as-binary-input-file (insert-file-contents filename))
+       (setq ret-val
+             (condition-case nil
+                 (read (current-buffer)) 
+               (error (error "reading failed")))))
+      (kill-buffer tmp-buffer)
+      ret-val)))
+
+(defun wl-summary-goto-folder (&optional arg)
+  (interactive "P")
+  (wl-summary-goto-folder-subr nil nil nil arg t))
+
+(defun wl-summary-goto-last-visited-folder ()
+  (interactive)
+  (let ((entity
+        (wl-folder-search-entity-by-name wl-summary-last-visited-folder
+                                         wl-folder-entity
+                                         'folder)))
+    (if entity (wl-folder-set-current-entity-id
+               (wl-folder-get-entity-id entity))))
+  (wl-summary-goto-folder-subr wl-summary-last-visited-folder nil nil nil t))
+
+(defun wl-summary-sticky-p (&optional fld)
+  (if fld
+      (get-buffer (wl-summary-sticky-buffer-name fld))
+    (not (string= wl-summary-buffer-name (buffer-name)))))
+
+(defmacro wl-summary-always-sticky-folder-p (fld)
+  (` (wl-string-match-member (, fld) wl-summary-always-sticky-folder-list)))
+
+(defun wl-summary-stick (&optional force)
+  "Make current summary buffer sticky."
+  (interactive "P")
+  (if (wl-summary-sticky-p)
+      (message "Current summary buffer is already sticky.")
+    (when (or force (y-or-n-p "Stick current summary buffer?"))
+      (wl-summary-toggle-disp-msg 'off)
+      (wl-summary-switch-to-clone-buffer 
+       (wl-summary-sticky-buffer-name 
+       wl-summary-buffer-folder-name))
+;;; ???hang up
+;      (rename-buffer (wl-summary-sticky-buffer-name 
+;                    wl-summary-buffer-folder-name)))
+      (message "Folder `%s' is now sticky." wl-summary-buffer-folder-name))))
+
+(defun wl-summary-switch-to-clone-buffer (buffer-name)
+  (let ((cur-buf (current-buffer))
+       (msg (wl-summary-message-number))
+       (buf (get-buffer-create buffer-name))
+       (folder wl-summary-buffer-folder-name)
+       (copy-variables
+        (append '(wl-summary-buffer-view
+                  wl-summary-buffer-refile-list
+                  wl-summary-buffer-delete-list
+                  wl-summary-buffer-copy-list
+                  wl-summary-buffer-target-mark-list
+                  wl-summary-buffer-msgdb
+                  wl-summary-buffer-number-column
+                  wl-summary-buffer-number-regexp
+                  wl-summary-buffer-message-modified
+                  wl-summary-buffer-mark-modified)
+                (and (eq wl-summary-buffer-view 'thread)
+                     '(wl-thread-entity-hashtb
+                       wl-thread-entities
+                       wl-thread-entity-list))
+                (and wl-use-scoring
+                     '(wl-summary-scored
+                       wl-summary-default-score
+                       wl-summary-important-above
+                       wl-summary-temp-above
+                       wl-summary-mark-below
+                       wl-summary-expunge-below))
+                (and (featurep 'wl-score)
+                     '(wl-current-score-file
+                       wl-score-alist)))))
+    (set-buffer buf)
+    (wl-summary-buffer-set-folder folder)
+    (wl-summary-mode)
+    (let ((buffer-read-only nil))
+      (insert-buffer cur-buf))
+    (set-buffer-modified-p nil)
+    (mapcar
+     (function
+      (lambda (var)
+       (set var (save-excursion
+                  (set-buffer cur-buf)
+                  (symbol-value var)))))
+     copy-variables)
+    (switch-to-buffer buf)
+    (kill-buffer cur-buf)
+    (setq mode-line-buffer-identification
+         (format "Wanderlust: %s" 
+                 (if (memq 'modeline wl-use-folder-petname)
+                     (wl-folder-get-petname folder)
+                   folder)))
+    (wl-summary-count-unread 
+     (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+    (wl-summary-update-modeline)
+    (if msg
+       (if (eq wl-summary-buffer-view 'thread)
+           (wl-thread-jump-to-msg msg)
+         (wl-summary-jump-to-msg msg))
+      (goto-char (point-max))
+      (beginning-of-line))))
+
+(defun wl-summary-get-buffer (folder)
+  (or (and folder
+          (get-buffer (wl-summary-sticky-buffer-name folder)))
+      (get-buffer wl-summary-buffer-name)))
+
+(defun wl-summary-get-buffer-create (folder &optional force-sticky)
+  (if force-sticky
+      (get-buffer-create 
+       (wl-summary-sticky-buffer-name folder))
+    (or (get-buffer (wl-summary-sticky-buffer-name folder))
+       (get-buffer-create wl-summary-buffer-name))))
+
+(defun wl-summary-disp-msg (folder disp-msg)
+  (let (disp mes-win)
+    (if (and disp-msg
+            wl-summary-buffer-disp-msg)
+       (let ((view-message-buffer (get-buffer wl-message-buf-name))
+             (number (wl-summary-message-number))
+             cur-folder cur-number sel-win)
+         (when view-message-buffer
+           (save-excursion
+             (set-buffer view-message-buffer)
+             (setq cur-folder wl-message-buffer-cur-folder
+                   cur-number wl-message-buffer-cur-number))
+           (when (and (string= folder cur-folder)
+                      (eq number cur-number))
+             (setq sel-win (selected-window))
+             (wl-select-buffer view-message-buffer)
+             (select-window sel-win)
+             (setq disp t)))))
+    (if (not disp)
+       (setq wl-summary-buffer-disp-msg nil))
+    (when (and (not disp)
+              (setq mes-win (wl-message-buffer-window)))
+      (delete-window mes-win)
+      (run-hooks 'wl-summary-toggle-disp-off-hook))))
+
+(defun wl-summary-goto-folder-subr (&optional folder scan-type other-window 
+                                             sticky interactive scoring)
+  "Display target folder on summary"
+  (interactive)
+  (let* ((keep-cursor (memq this-command
+                           wl-summary-keep-cursor-command))
+        (fld (or folder (wl-summary-read-folder wl-default-folder)))
+        (cur-fld wl-summary-buffer-folder-name)
+        buf mes hilit reuse-buf
+        retval entity)
+    (if (string= fld "")
+       (setq fld wl-default-folder))
+    (when (and (not (string= cur-fld fld)) ; folder is moved.
+              (eq major-mode 'wl-summary-mode)) ; called in summary.
+      (setq wl-summary-last-visited-folder wl-summary-buffer-folder-name)
+      (wl-summary-cleanup-temp-marks (wl-summary-sticky-p))
+      (wl-summary-save-status 'keep)) ;; keep current buffer, anyway.
+    (setq buf (wl-summary-get-buffer-create fld sticky))
+    (setq reuse-buf
+         (save-excursion
+           (set-buffer buf)
+           (string= fld wl-summary-buffer-folder-name)))
+    (unwind-protect
+       (if reuse-buf
+           (if interactive
+               (switch-to-buffer buf)
+             (set-buffer buf))
+         (if other-window
+             (delete-other-windows))
+         (set-buffer buf)
+         (wl-summary-buffer-set-folder fld)
+         (unless (eq major-mode 'wl-summary-mode)
+           (wl-summary-mode))
+         (setq wl-summary-buffer-disp-msg nil)
+         (setq wl-summary-buffer-last-displayed-msg nil)
+         (setq wl-summary-buffer-current-msg nil)
+         (let ((case-fold-search nil)
+               (inhibit-read-only t)
+               (buffer-read-only nil))
+           (erase-buffer)
+           (setq mode-line-buffer-identification
+                 (format "Wanderlust: %s" 
+                         (if (memq 'modeline wl-use-folder-petname)
+                             (wl-folder-get-petname fld)
+                           fld)))
+             ;; resume summary cache
+           (if wl-summary-cache-use
+               (let* ((dir (elmo-msgdb-expand-path fld))
+                      (cache (expand-file-name wl-summary-cache-file dir))
+                      (view (expand-file-name wl-summary-view-file dir)))
+                 (when (file-exists-p cache)
+                   (as-binary-input-file
+                    (insert-file-contents cache))
+                   (elmo-set-buffer-multibyte
+                    default-enable-multibyte-characters)
+                   (decode-mime-charset-region
+                    (point-min)(point-max)
+                    wl-summary-buffer-mime-charset))
+                 (when (file-exists-p view)
+                   (setq wl-summary-buffer-view 
+                         (wl-summary-load-file-object view)))
+                 (if (eq wl-summary-buffer-view 'thread)
+                     (wl-thread-resume-entity fld))))
+           ;; Load msgdb
+           (setq wl-summary-buffer-msgdb nil) ; new msgdb
+           (setq wl-summary-buffer-msgdb 
+                 (wl-summary-msgdb-load-async fld))
+           (if (null wl-summary-buffer-msgdb)
+               (setq wl-summary-buffer-msgdb 
+                     (elmo-msgdb-load (elmo-string fld))))
+           (wl-summary-count-unread 
+            (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+           (wl-summary-update-modeline)))
+      (wl-summary-buffer-number-column-detect t)
+      (wl-summary-disp-msg fld (and reuse-buf keep-cursor))
+      (unless (and reuse-buf keep-cursor)
+       (setq hilit wl-summary-highlight)
+       (unwind-protect
+           (let ((wl-summary-highlight (if reuse-buf wl-summary-highlight))
+                 (wl-use-scoring
+                  (if (or scoring interactive) wl-use-scoring)))
+             (if (and (not scan-type)
+                      interactive
+                      (not wl-ask-range))
+                 (setq scan-type (wl-summary-get-sync-range fld)))
+             (cond 
+              ((eq scan-type nil)
+               (wl-summary-sync 'unset-cursor))
+              ((eq scan-type 'all)
+               (wl-summary-sync 'unset-cursor "all"))
+              ((eq scan-type 'no-sync))
+              ((or (eq scan-type 'force-update)
+                   (eq scan-type 'update))
+               (setq mes (wl-summary-sync-force-update 'unset-cursor)))))
+         (if interactive
+             (switch-to-buffer buf)
+           (set-buffer buf))
+         ;; stick always-sticky-folder
+         (when (wl-summary-always-sticky-folder-p fld)
+           (or (wl-summary-sticky-p) (wl-summary-stick t)))
+         (run-hooks 'wl-summary-prepared-pre-hook)
+         (set-buffer-modified-p nil)
+         (goto-char (point-min))
+         (if (wl-summary-cursor-down t)
+             (let ((unreadp (wl-thread-next-mark-p
+                             (wl-thread-entity-get-mark 
+                              (wl-summary-message-number))
+                             wl-summary-move-order)))
+               (cond ((and wl-auto-select-first unreadp)
+                      (setq retval 'disp-msg))
+                     ((not unreadp)
+                      (setq retval 'more-next))))
+           (goto-char (point-max))
+           (if (elmo-folder-plugged-p folder) 
+               (forward-line -1)
+             (wl-summary-prev))
+           (setq retval 'more-next))
+         (setq wl-summary-highlight hilit)
+         (if (and wl-summary-highlight
+                  (not reuse-buf))
+             (if (and wl-summary-highlight-partial-threshold
+                      (> (count-lines (point-min) (point-max))
+                         wl-summary-highlight-partial-threshold))
+                 (save-excursion
+                   (forward-line (- 
+                                  0 
+                                  wl-summary-partial-highlight-above-lines))
+                   (wl-highlight-summary (point) (point-max)))
+               (wl-highlight-summary (point-min) (point-max))))
+         (if (null wl-summary-buffer-msgdb) ;; one more try.
+             (setq wl-summary-buffer-msgdb 
+                   (elmo-msgdb-load (elmo-string fld))))
+         (if (eq retval 'disp-msg)
+             (wl-summary-redisplay))
+         (if mes (message "%s" mes))
+         (if (and interactive wl-summary-recenter)
+             (recenter (/ (- (window-height) 2) 2))))))
+    ;; set current entity-id
+    (if (and (not folder)
+            (setq entity
+                  (wl-folder-search-entity-by-name fld
+                                                   wl-folder-entity
+                                                   'folder)))
+       ;; entity-id is unknown.
+       (wl-folder-set-current-entity-id
+        (wl-folder-get-entity-id entity)))
+    (unwind-protect
+       (run-hooks 'wl-summary-prepared-hook)
+      (set-buffer-modified-p nil))
+    retval))
+
+(defun wl-summary-summary-line-already-exists-p (parent-number buffer)
+  "returns the depth."
+  (set-buffer buffer)
+  (goto-char (point-max))
+  (let ((depth 0))
+    (when (re-search-backward (format "^ *%s..../..\(.*\)..:.. "
+                                     parent-number) nil t)
+      (goto-char (match-end 0))
+      (while (string-match wl-thread-indent-regexp 
+                          (char-to-string
+                           (char-after (point))))        
+       (setq depth (+ 1 depth))
+       (forward-char))
+      (/ depth wl-thread-indent-level-internal))))
+
+(defun wl-summary-goto-bottom-of-current-thread ()
+  (if (re-search-forward (concat "^" wl-summary-buffer-number-regexp 
+                                "..../..\(.*\)..:.. \\[") nil t)
+      ()
+    (goto-char (point-max))))
+
+(defun wl-summary-goto-top-of-current-thread ()
+  (wl-summary-jump-to-msg
+   (wl-thread-entity-get-number
+    (wl-thread-entity-get-top-entity (wl-thread-get-entity 
+                                     (wl-summary-message-number))))))
+
+(defun wl-summary-goto-bottom-of-sub-thread (&optional depth)
+  (interactive)
+  (let ((depth (or depth 
+                  (wl-thread-get-depth-of-current-line))))
+    (forward-line 1)
+    (while (and (not (eobp))
+               (>= (wl-thread-get-depth-of-current-line) 
+                   depth))
+      (forward-line 1))
+    (beginning-of-line)))
+
+(defun wl-summary-insert-line (line)
+  "Insert LINE in the Summary."
+  (if wl-use-highlight-mouse-line 
+      ;; remove 'mouse-face of current line.
+      (put-text-property
+       (save-excursion (beginning-of-line)(point))
+       (save-excursion (end-of-line)(point))
+       'mouse-face nil))
+  (insert line "\n")
+  (if wl-use-highlight-mouse-line 
+      ;; remove 'mouse-face of current line.
+      (put-text-property
+       (save-excursion (beginning-of-line)(point))
+       (save-excursion (end-of-line)(point))
+       'mouse-face nil))
+  (condition-case nil ; it's dangerous, so ignore error.
+      (run-hooks 'wl-summary-line-inserted-hook)
+    (error (ding)
+          (message "Error in wl-summary-line-inserted-hook"))))
+
+(defun wl-summary-insert-summary (entity database mark-alist dummy)
+  (let ((overview-entity entity)
+       summary-line msg)
+    (setq msg (elmo-msgdb-overview-entity-get-number entity))
+    (when (setq summary-line
+               (wl-summary-overview-create-summary-line 
+                msg entity nil 0 mark-alist))
+      (let ((inhibit-read-only t)
+           buffer-read-only)
+       (goto-char (point-max))
+       (wl-summary-insert-line summary-line)))))
+
+(defun wl-summary-default-subject-filter (subject)
+  (let ((case-fold-search t))
+    (setq subject (elmo-replace-in-string subject "[ \t]*\\(re\\|was\\):" ""))
+    (setq subject (elmo-replace-in-string subject "[ \t]" ""))
+    (elmo-replace-in-string subject "^\\[.*\\]" "")))
+
+(defun wl-summary-subject-equal (subject1 subject2)
+  (string= (wl-summary-subject-filter-func-internal subject1)
+          (wl-summary-subject-filter-func-internal subject2)))
+
+(defun wl-summary-insert-thread-entity (entity overview mark-alist update)
+  (let* ((this-id (elmo-msgdb-overview-entity-get-id entity))
+        (parent-entity 
+         (elmo-msgdb-overview-get-parent-entity entity overview));; temp
+        ;;(parent-id (elmo-msgdb-overview-entity-get-id parent-entity))
+        (parent-number (elmo-msgdb-overview-entity-get-number parent-entity))
+        msg)
+    (if (and parent-number
+            wl-summary-divide-thread-when-subject-changed
+            (not (wl-summary-subject-equal 
+                  (or (elmo-msgdb-overview-entity-get-subject 
+                       entity) "")
+                  (or (elmo-msgdb-overview-entity-get-subject 
+                       parent-entity) ""))))
+       (setq parent-number nil))
+    (setq msg (elmo-msgdb-overview-entity-get-number entity))
+    (wl-thread-insert-message entity overview mark-alist
+                             msg parent-number update)))
+
+(defun wl-summary-update-thread (entity 
+                                overview 
+                                mark-alist 
+                                thr-entity
+                                parent-entity)
+  (let* ((depth 0)
+        (this-id (elmo-msgdb-overview-entity-get-id entity))
+        (overview-entity entity)
+        (parent-id (elmo-msgdb-overview-entity-get-id parent-entity))
+        (parent-number (elmo-msgdb-overview-entity-get-number parent-entity))
+        summary-line msg subject-differ)
+    (cond 
+     ((or (not parent-id)
+         (string= this-id parent-id))
+      (goto-char (point-max))
+      (beginning-of-line))
+     ;; parent already exists in buffer.
+     ((setq depth (or (wl-summary-summary-line-already-exists-p 
+                      parent-number (current-buffer)) -1))
+      (setq depth (+ 1 depth))
+      (wl-thread-goto-bottom-of-sub-thread)))
+    (if (and (elmo-msgdb-overview-entity-get-number entity))
+       (if (setq summary-line
+                 (wl-summary-overview-create-summary-line 
+                  (elmo-msgdb-overview-entity-get-number entity)
+                  entity parent-entity depth mark-alist nil nil
+                  thr-entity))
+           (let ((inhibit-read-only t)
+                 (buffer-read-only nil))
+             (wl-summary-insert-line summary-line))))))
+
+(defun wl-summary-mark-as-unread (&optional number 
+                                           no-server-update
+                                           no-modeline-update)
+  (interactive)
+  (save-excursion
+    (let* (eol
+         (inhibit-read-only t)
+         (buffer-read-only nil)
+         (folder wl-summary-buffer-folder-name)
+         (msgdb wl-summary-buffer-msgdb)
+         (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+         ;;(number-alist (elmo-msgdb-get-number-alist msgdb))
+         new-mark visible mark)
+      (if number 
+         (progn
+           (setq visible (wl-summary-jump-to-msg number))
+           (unless (setq mark (cadr (assq number mark-alist)))
+             (setq mark " ")))
+       ;; interactive
+       (setq visible t))
+      (end-of-line)
+      (setq eol (point))
+      (re-search-backward (concat "^" wl-summary-buffer-number-regexp
+                                 "..../..")) ; set cursor line
+      (beginning-of-line)
+      (if (or (and (not visible)
+                  ;; already exists in msgdb.
+                  (assq number (elmo-msgdb-get-number-alist msgdb)))
+             (re-search-forward 
+              (format (concat "^ *\\(" 
+                              (if number (int-to-string number)
+                                "[0-9]+")
+                              "\\)[^0-9]\\(%s\\|%s\\)")
+                      wl-summary-read-uncached-mark
+                      " ") eol t))
+         (progn
+           (setq number (or number (string-to-int (wl-match-buffer 1))))
+           (setq mark (or mark (elmo-match-buffer 2)))
+           (save-match-data
+             (setq new-mark (if (string= mark
+                                         wl-summary-read-uncached-mark)
+                                wl-summary-unread-uncached-mark
+                              (if (elmo-use-cache-p folder number)
+                                  wl-summary-unread-mark
+                                wl-summary-unread-uncached-mark))))
+           ;; server side mark
+           (unless no-server-update
+             (elmo-mark-as-unread folder (list number)
+                                  msgdb))
+           (when visible
+             (delete-region (match-beginning 2) (match-end 2))
+             (insert new-mark))
+           (setq mark-alist
+                 (elmo-msgdb-mark-set mark-alist
+                                      number
+                                      new-mark))
+           (elmo-msgdb-set-mark-alist msgdb mark-alist)
+           (unless no-modeline-update
+             (setq wl-summary-buffer-unread-count 
+                   (+ 1 wl-summary-buffer-unread-count))
+             (wl-summary-update-modeline)
+             (wl-folder-update-unread 
+              folder
+              (+ wl-summary-buffer-unread-count 
+                 wl-summary-buffer-new-count)))
+           (wl-summary-set-mark-modified)
+           (if (and visible wl-summary-highlight)
+               (wl-highlight-summary-current-line))))))
+  (set-buffer-modified-p nil))
+
+(defun wl-summary-delete (&optional number)
+  "Mark Delete mark 'D'.
+If optional argument NUMBER is specified, mark message specified by NUMBER."
+  (interactive)
+  (let* ((buffer-num (wl-summary-message-number))
+        (msg-num (or number buffer-num))
+        mark)
+    (catch 'done
+      (when (null msg-num)
+       (if (interactive-p)
+           (message "No message."))
+       (throw 'done nil))
+      (when (setq mark (wl-summary-get-mark msg-num))
+       (when (wl-summary-reserve-temp-mark-p mark)
+         (if (interactive-p)
+             (error "Already marked as `%s'" mark))
+         (throw 'done nil))
+       (wl-summary-unmark msg-num))
+      (if (or (interactive-p)
+             (eq number buffer-num))
+         (wl-summary-mark-line "D"))
+      (setq wl-summary-buffer-delete-list
+           (cons msg-num wl-summary-buffer-delete-list))
+      (if (interactive-p)
+         (if (eq wl-summary-move-direction-downward nil)
+             (wl-summary-prev)
+           (wl-summary-next)))
+      msg-num)))
+
+(defun wl-summary-remove-destination ()
+  (save-excursion
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+          (buf (current-buffer))
+          sol eol rs re)
+      (beginning-of-line)
+      (setq sol (point))
+      (end-of-line)
+      (setq eol (point))
+      (setq rs (next-single-property-change sol 'wl-summary-destination
+                                           buf eol))
+      (setq re (next-single-property-change rs 'wl-summary-destination
+                                           buf eol))
+      (put-text-property rs re 'wl-summary-destination nil)
+      (put-text-property rs re 'invisible nil)
+      (goto-char re)
+      (delete-char (- eol re)))))
+
+(defun wl-summary-check-mark (msg mark)
+  (let ((check-func (cond ((string= mark "o")
+                          'wl-summary-msg-marked-as-refiled)
+                         ((string= mark "O")
+                          'wl-summary-msg-marked-as-copied)
+                         ((string= mark "D")
+                          'wl-summary-msg-marked-as-deleted)
+                         ((string= mark "*")
+                          'wl-summary-msg-marked-as-target))))
+    (if check-func
+       (funcall check-func msg))))
+
+(defun wl-summary-mark-collect (mark &optional begin end)
+  (save-excursion
+    (save-restriction
+      (let (msglist)
+       (narrow-to-region (or begin (point-min))
+                         (or end (point-max)))
+       (goto-char (point-min))
+       ;; for thread...
+       (if (eq wl-summary-buffer-view 'thread)
+           (progn
+             (while (not (eobp))
+               (let* ((number (wl-summary-message-number))
+                      (entity (wl-thread-get-entity number))
+                      result)
+                 ;; opened...only myself is checked.
+                 (if (wl-summary-check-mark number mark)
+                     (wl-append msglist (list number)))
+                 (unless (wl-thread-entity-get-opened entity) 
+                   ;; closed...children is also checked.
+                   (if (setq result (wl-thread-get-children-msgs-with-mark
+                                     number
+                                     mark))
+                       (wl-append msglist result)))
+                 (forward-line 1)))
+             (elmo-uniq-list msglist))
+         (let* ((case-fold-search nil)
+                (re (format (concat wl-summary-message-regexp "%s") 
+                            (regexp-quote mark))))
+           (while (re-search-forward re nil t)
+             (setq msglist (cons (wl-summary-message-number) msglist)))
+           (nreverse msglist)))))))
+
+(defun wl-summary-exec ()
+  (interactive)
+  (wl-summary-exec-subr (mapcar 'car wl-summary-buffer-refile-list)
+                       (reverse wl-summary-buffer-delete-list)
+                       (mapcar 'car wl-summary-buffer-copy-list)))
+
+(defun wl-summary-exec-region (beg end)
+  (interactive "r")
+  (message "Collecting marks ...")
+  (save-excursion
+    (goto-char beg)
+    (beginning-of-line)
+    (setq beg (point))
+    (goto-char (1- end))
+    (forward-line)
+    (setq end (point))
+    (wl-summary-exec-subr (wl-summary-mark-collect "o" beg end)
+                         (wl-summary-mark-collect "D" beg end)
+                         (wl-summary-mark-collect "O" beg end))))
+  
+(defun wl-summary-exec-subr (msgs dels cpys)
+  (save-excursion
+    (let* ((del-fld (wl-summary-get-delete-folder 
+                    wl-summary-buffer-folder-name))
+          (start (point))
+          dst tmp msg msgs2 cpys2
+          msg-dst dst-msgs len 
+          refile-failures 
+          copy-failures
+          succeeds result executed)
+      (if (not (or msgs dels cpys))
+         (message "No marks")
+       (message "Executing ...")
+       (setq msgs (append msgs dels))
+       (setq msgs2 msgs)
+       (while dels
+         (when (not (assq (car dels) wl-summary-buffer-refile-list))
+           (wl-append wl-summary-buffer-refile-list
+                      (list (cons (car dels) del-fld)))
+           (setq wl-summary-buffer-delete-list
+                 (delete (car dels) wl-summary-buffer-delete-list)))
+         (setq dels (cdr dels)))
+       (setq len (length msgs2))
+       ;; begin refile...
+       (while msgs
+         (setq msg (car msgs))
+         (setq msgs (cdr msgs))
+         (setq msg-dst (assq msg wl-summary-buffer-refile-list))
+         (setq dst (cdr msg-dst))
+         (if dst
+             (if (setq tmp (assoc dst dst-msgs))
+                 (setq dst-msgs (cons (append tmp (list msg))
+                                        (delete tmp dst-msgs)))
+               (setq dst-msgs (cons (list dst msg) dst-msgs)))))
+       (setq refile-failures 0)
+       (goto-char start) ; avoid moving cursor to the bottom line.
+       (setq executed 0)
+       (while dst-msgs
+         ;;(elmo-msgdb-add-msgs-to-seen-list 
+         ;; (car (car dst-msgs)) ;dst-folder      
+         ;; (cdr (car dst-msgs)) ;msgs 
+         ;; wl-summary-buffer-msgdb 
+         ;; (concat wl-summary-important-mark
+         ;;  wl-summary-read-uncached-mark))
+         (setq result nil)
+         (condition-case nil
+             (setq result (elmo-move-msgs wl-summary-buffer-folder-name 
+                                          (cdr (car dst-msgs))
+                                          (car (car dst-msgs))
+                                          wl-summary-buffer-msgdb 
+                                          len executed (cdr dst-msgs)
+                                          nil ; no-delete
+                                          nil ; same-number
+                                          (list wl-summary-unread-cached-mark
+                                                wl-summary-unread-uncached-mark
+                                                wl-summary-new-mark)))
+           (error nil))
+         (if result ; succeeded.
+             (progn
+               ;; update buffer.
+               (wl-summary-delete-messages-on-buffer 
+                (cdr (car dst-msgs)))
+               ;; update refile-alist.
+               (mapcar 
+                (function 
+                 (lambda (x)
+                   (setq wl-summary-buffer-refile-list
+                         (delq (assq x wl-summary-buffer-refile-list)
+                               wl-summary-buffer-refile-list))))
+                (cdr (car dst-msgs))))
+           (setq refile-failures 
+                 (+ refile-failures (length (cdr (car dst-msgs))))))
+         (setq executed (+ executed (length (cdr (car dst-msgs)))))
+         (setq dst-msgs (cdr dst-msgs)))
+       ;; end refile
+       ;; begin cOpy...
+       (setq cpys2 cpys)
+       (setq len (length cpys2))
+       (while cpys
+         (setq msg (car cpys))
+         (setq cpys (cdr cpys))
+         (setq msg-dst (assq msg wl-summary-buffer-copy-list))
+         (setq dst (cdr msg-dst))
+         (if dst
+             (if (setq tmp (assoc dst dst-msgs))
+                 (setq dst-msgs (cons (append tmp (list msg))
+                                      (delete tmp dst-msgs)))
+               (setq dst-msgs (cons (list dst msg) dst-msgs)))))
+       (setq copy-failures 0)
+       (setq executed 0)
+       (while dst-msgs
+         ;;(elmo-msgdb-add-msgs-to-seen-list 
+         ;;(car (car dst-msgs)) ;dst-folder       
+         ;;(cdr (car dst-msgs)) ;msgs 
+         ;;wl-summary-buffer-msgdb 
+         ;;(concat wl-summary-important-mark
+         ;;wl-summary-read-uncached-mark))
+         (setq result nil)
+         (condition-case nil
+             (setq result (elmo-move-msgs wl-summary-buffer-folder-name 
+                                          (cdr (car dst-msgs))
+                                          (car (car dst-msgs))
+                                          wl-summary-buffer-msgdb 
+                                          len executed 
+                                          (cdr dst-msgs) 
+                                          t ; t is no-delete (copy)
+                                          nil ; same number
+                                          (list 
+                                           wl-summary-unread-cached-mark
+                                           wl-summary-unread-uncached-mark
+                                           wl-summary-new-mark)))
+           (error nil))
+         (if result ; succeeded.
+             (progn
+               ;; update buffer.
+               (wl-summary-delete-copy-marks-on-buffer (cdr (car dst-msgs)))
+               ;; update copy-alist
+               (mapcar
+                (function
+                 (lambda (x)
+                   (setq wl-summary-buffer-copy-list
+                         (delq (assq x wl-summary-buffer-copy-list)
+                               wl-summary-buffer-copy-list))))
+                (cdr (car dst-msgs))))
+           (setq copy-failures
+                 (+ copy-failures (length (cdr (car dst-msgs))))))
+         (setq executed (+ executed (length (cdr (car dst-msgs)))))
+         (setq dst-msgs (cdr dst-msgs)))
+       ;; end cOpy 
+       (wl-summary-folder-info-update)
+       (wl-summary-set-message-modified)
+       (wl-summary-set-mark-modified)
+       (run-hooks 'wl-summary-exec-hook)
+       (set-buffer-modified-p nil)
+       (message (concat "Executing ... done"
+                        (if (> refile-failures 0)
+                            (format " (%d refiling failed)" refile-failures)
+                          "")
+                        (if (> copy-failures 0)
+                            (format " (%d copying failed)" copy-failures)
+                          "")
+                        "."))))))
+
+(defun wl-summary-read-folder (default &optional purpose ignore-error
+                               no-create init)
+  (let ((fld (completing-read
+             (format "Folder name %s(%s): " (or purpose "")
+                     default)
+             (or wl-folder-completion-func
+                 (if (memq 'read-folder wl-use-folder-petname)
+                     (wl-folder-get-entity-with-petname)
+                   wl-folder-entity-hashtb))
+             nil nil (or init wl-default-spec)
+             'wl-read-folder-hist)))
+    (setq fld (elmo-string (wl-folder-get-realname fld)))
+    (if (string-match "\n" fld)
+       (error "Not supported folder name: %s" fld))
+    (if (or (string= fld wl-default-spec)
+           (string= fld ""))
+       (setq fld default))
+    (unless no-create
+      (wl-folder-confirm-existence fld ignore-error))
+    fld))
+
+(defun wl-summary-print-destination (msg-num folder)
+  "Print refile destination on line."
+  (wl-summary-remove-destination)
+  (let ((inhibit-read-only t)
+       (buffer-read-only nil)
+       len rs re c)
+    (setq len (string-width folder))
+    (if (< len 1) ()
+      (end-of-line)
+      (setq re (point))
+      (setq c 0)
+      (while (< c len)
+       (forward-char -1)
+       (setq c (+ c (char-width (following-char)))))
+      (setq rs (point))
+      (put-text-property rs re 'invisible t)
+      (put-text-property rs re 'wl-summary-destination t)
+      (goto-char re)
+      (wl-highlight-refile-destination-string folder)
+      (insert folder)
+      (set-buffer-modified-p nil))))
+
+;; override.
+(when wl-on-nemacs
+  (defun wl-summary-print-destination (msg-num &optional folder))
+  (defun wl-summary-remove-destination ()))
+
+(defsubst wl-summary-get-mark (number)
+  "Returns a temporal mark of message specified by NUMBER."
+  (or (and (memq number wl-summary-buffer-delete-list) "D")
+      (and (assq number wl-summary-buffer-copy-list) "O")
+      (and (assq number wl-summary-buffer-refile-list) "o")
+      (and (assq number wl-summary-buffer-target-mark-list) "*")))
+
+(defsubst wl-summary-reserve-temp-mark-p (mark)
+  "Returns t if temporal MARK should be reserved."
+  (member mark wl-summary-reserve-mark-list))
+
+(defun wl-summary-refile (&optional dst number)
+  "Put refile mark on current line message.
+If optional argument DST is specified, put mark without asking
+destination folder.
+If optional argument NUMBER is specified, mark message specified by NUMBER.
+
+If folder is read-only, message should be copied. 
+See `wl-refile-policy-alist' for more details."  
+  (interactive)
+  (let ((policy (wl-get-assoc-list-value wl-refile-policy-alist
+                                        wl-summary-buffer-folder-name)))
+    (cond ((eq policy 'copy)
+          (if (interactive-p)
+              (call-interactively 'wl-summary-copy)
+            (wl-summary-copy dst number)))
+         (t
+          (wl-summary-refile-subr "refile" (interactive-p) dst number)))))
+
+(defun wl-summary-copy (&optional dst number)
+  "Put refile mark on current line message.
+If optional argument DST is specified, put mark without asking
+destination folder.
+If optional argument NUMBER is specified, mark message specified by NUMBER."
+  (interactive)
+  (wl-summary-refile-subr "copy" (interactive-p) dst number))
+
+(defun wl-summary-refile-subr (copy-or-refile interactive &optional dst number)
+  (interactive)
+  (let* ((buffer-num (wl-summary-message-number))
+        (msg-num (or number buffer-num))
+        (msgid (and msg-num 
+                    (cdr (assq msg-num
+                               (elmo-msgdb-get-number-alist
+                                wl-summary-buffer-msgdb)))))
+        (entity (and msg-num
+                     (elmo-msgdb-overview-get-entity-by-number
+                      (elmo-msgdb-get-overview wl-summary-buffer-msgdb)
+                      msg-num)))
+        (variable 
+         (intern (format "wl-summary-buffer-%s-list" copy-or-refile)))
+        folder mark already tmp-folder)
+    (catch 'done
+      (when (null entity)
+       ;; msgdb is empty?
+       (if interactive
+           (message "Cannot refile."))
+       (throw 'done nil))
+      (when (null msg-num)
+       (if interactive
+           (message "No message."))
+       (throw 'done nil))
+      (when (setq mark (wl-summary-get-mark msg-num))
+       (when (wl-summary-reserve-temp-mark-p mark)
+         (if interactive
+             (error "Already marked as `%s'" mark))
+         (throw 'done nil)))
+      (setq folder (and msg-num
+                       (or dst (wl-summary-read-folder 
+                                (or (wl-refile-guess entity) wl-trash-folder)
+                                (format "for %s" copy-or-refile)))))
+      ;; Cache folder hack by okada@opaopa.org
+      (if (and (eq (car (elmo-folder-get-spec folder)) 'cache)
+              (not (string= folder
+                            (setq tmp-folder
+                                  (concat "'cache/" 
+                                          (elmo-cache-get-path-subr
+                                           (elmo-msgid-to-cache msgid)))))))
+         (progn 
+           (setq folder tmp-folder)
+           (message "Force refile to %s." folder)))
+      (if (string= folder wl-summary-buffer-folder-name)
+         (error "Same folder"))
+      (if (and
+          (not (elmo-folder-plugged-p folder))
+          (or (null msgid)
+              (not (elmo-cache-exists-p msgid))))
+         (error "Unplugged (no cache or msgid)"))
+      (if (or (string= folder wl-queue-folder)
+             (string= folder wl-draft-folder))
+         (error "Don't %s messages to %s" copy-or-refile folder))
+      ;; learn for refile.
+      (if (string= "refile" copy-or-refile)
+         (wl-refile-learn entity folder))
+      (wl-summary-unmark msg-num)
+      (set variable (append 
+                    (symbol-value variable)
+                    (list (cons msg-num folder))))
+      (when (or interactive
+               (eq number buffer-num))
+       (wl-summary-mark-line (if (string= "refile" copy-or-refile)
+                                 "o" "O"))
+       ;; print refile destination
+       (wl-summary-print-destination msg-num folder))
+      (if interactive
+         (if (eq wl-summary-move-direction-downward nil)
+             (wl-summary-prev)
+           (wl-summary-next)))
+      (run-hooks (intern (format "wl-summary-%s-hook" copy-or-refile)))
+      (setq wl-summary-buffer-prev-refile-destination folder)
+      msg-num)))
+
+(defun wl-summary-refile-prev-destination ()
+  "Refile message to previously refiled destination"
+  (interactive)
+  (wl-summary-refile wl-summary-buffer-prev-refile-destination
+                    (wl-summary-message-number))
+  (if (eq wl-summary-move-direction-downward nil)
+      (wl-summary-prev)
+    (wl-summary-next)))
+
+(defun wl-summary-copy-prev-destination ()
+  "Refile message to previously refiled destination"
+  (interactive)
+  (wl-summary-copy wl-summary-buffer-prev-copy-destination
+                  (wl-summary-message-number))
+  (if (eq wl-summary-move-direction-downward nil)
+      (wl-summary-prev)
+    (wl-summary-next)))
+
+(defsubst wl-summary-no-auto-refile-message-p (msg mark-alist) 
+  (member (cadr (assq msg mark-alist)) wl-summary-auto-refile-skip-marks))
+
+(defun wl-summary-auto-refile-check-refile-rule-alist ()
+  (when wl-refile-rule-alist
+    (message "Checking destination folders...")
+    (let ((ralist wl-refile-rule-alist)
+         pairs dsts)
+      (while ralist
+       (setq pairs (cdr (car ralist)))
+       (while pairs
+         (if (not (member (cdr (car pairs)) dsts))
+             (setq dsts (cons (cdr (car pairs)) dsts)))
+         (setq pairs (cdr pairs)))
+       (setq ralist (cdr ralist)))
+      (mapcar 
+       'wl-folder-confirm-existence
+       dsts))
+    (message "Checking destination folders...done.")))
+
+(defun wl-summary-auto-refile (&optional open-all)
+  "Set refile mark automatically according to wl-refile-guess-by-rule."
+  (interactive "P")
+  (wl-summary-auto-refile-check-refile-rule-alist)
+  (message "Marking...")
+  (save-excursion
+    (if (and (eq wl-summary-buffer-view 'thread)
+            open-all) 
+       (wl-thread-open-all))
+    (let* ((spec wl-summary-buffer-folder-name)
+          (overview (elmo-msgdb-get-overview
+                     wl-summary-buffer-msgdb))
+          (mark-alist (elmo-msgdb-get-mark-alist
+                       wl-summary-buffer-msgdb))
+          (count 0)
+          number dst thr-entity)
+      (goto-line 1)
+      (while (not (eobp))
+       (setq number (wl-summary-message-number))
+       (when (and (not (wl-summary-no-auto-refile-message-p number 
+                                                            mark-alist))
+                  (setq dst
+                        (wl-refile-guess-by-rule
+                         (elmo-msgdb-overview-get-entity-by-number
+                          overview number)))
+                  (not (equal dst spec)))
+         ;(wl-folder-confirm-existence dst)
+         (if (wl-summary-refile dst number)
+             (incf count))
+         (message "Marking...%d message(s)." count))
+       (if (eq wl-summary-buffer-view 'thread)
+           ;; process invisible children.
+           (if (not (wl-thread-entity-get-opened
+                     (setq thr-entity (wl-thread-get-entity number))))
+               (mapcar 
+                (function
+                 (lambda (x)
+                   (when (and (setq dst 
+                                    (wl-refile-guess-by-rule
+                                     (elmo-msgdb-overview-get-entity-by-number 
+                                      overview x)))
+                              (not (equal dst spec)))
+                     (if (wl-summary-refile dst x)
+                         (incf count))
+                     (message "Marking...%d message(s)." count))))
+                (elmo-delete-if
+                 (function (lambda (x)
+                             (wl-summary-no-auto-refile-message-p 
+                              x
+                              mark-alist)))
+                 (wl-thread-entity-get-descendant thr-entity)))))
+       (forward-line))
+      (if (eq count 0)
+         (message "No message was marked.")
+       (message "Marked %d message(s)." count)))))
+
+(defun wl-summary-unmark (&optional number)
+  "Unmark marks (temporary, refile, copy, delete)of current line. 
+If optional argument NUMBER is specified, unmark message specified by NUMBER."
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         visible
+         msg-num
+         cur-mark
+         score-mark)
+      (if number
+         (setq visible (wl-summary-jump-to-msg number))
+       (setq visible t))
+      ;; Delete mark on buffer.
+      (when (and visible 
+                (looking-at "^ *\\([0-9]+\\)\\([^0-9]\\)"))
+       (goto-char (match-end 2))
+       (or number
+           (setq number (string-to-int (wl-match-buffer 1))))
+       (setq cur-mark (wl-match-buffer 2))
+       (if (string= cur-mark " ")
+           ()
+         (delete-region (match-beginning 2) (match-end 2))
+         (if (setq score-mark (wl-summary-get-score-mark number))
+             (insert score-mark)
+           (insert " ")))
+       (if (or (string= cur-mark "o")
+               (string= cur-mark "O"))
+           (wl-summary-remove-destination))
+       (if wl-summary-highlight          
+           (wl-highlight-summary-current-line nil nil score-mark))
+       (set-buffer-modified-p nil))
+      ;; Remove from temporary mark structure.
+      (and number
+          (wl-summary-delete-mark number)))))
+
+(defun wl-summary-msg-marked-as-target (msg)
+  (if (memq msg wl-summary-buffer-target-mark-list)
+      t))
+
+(defun wl-summary-msg-marked-as-copied (msg)
+  (assq msg wl-summary-buffer-copy-list))
+
+(defun wl-summary-msg-marked-as-deleted (msg)
+  (if (memq msg wl-summary-buffer-delete-list)
+      t))
+
+(defun wl-summary-msg-marked-as-refiled (msg)
+  (assq msg wl-summary-buffer-refile-list))
+
+(defun wl-summary-target-mark (&optional number)
+  "Put target mark '*' on current message.
+If optional argument NUMBER is specified, mark message specified by NUMBER."
+  (interactive)
+  (let* ((buffer-num (wl-summary-message-number))
+        (msg-num (or number buffer-num))
+        mark)
+    (catch 'done
+      (when (null msg-num)
+       (if (interactive-p)
+           (message "No message."))
+       (throw 'done nil))
+      (when (setq mark (wl-summary-get-mark msg-num))
+       (when (wl-summary-reserve-temp-mark-p mark)
+         (if (interactive-p)
+             (error "Already marked as `%s'" mark))
+         (throw 'done nil))
+       (wl-summary-unmark msg-num))
+      (if (or (interactive-p)
+             (eq number buffer-num))
+         (wl-summary-mark-line "*"))
+      (setq wl-summary-buffer-target-mark-list
+           (cons msg-num wl-summary-buffer-target-mark-list))
+      (if (interactive-p)
+         (if (eq wl-summary-move-direction-downward nil)
+             (wl-summary-prev)
+           (wl-summary-next)))
+      msg-num)))
+
+
+(defun wl-summary-refile-region (beg end)
+  "Put copy mark on messages in the region specified by BEG and END."
+  (interactive "r")
+  (wl-summary-refile-region-subr "refile" beg end))
+  
+(defun wl-summary-copy-region (beg end)
+  "Put copy mark on messages in the region specified by BEG and END."
+  (interactive "r")
+  (wl-summary-refile-region-subr "copy" beg end))
+
+(defun wl-summary-refile-region-subr (copy-or-refile beg end)
+  (save-excursion
+    (save-restriction
+      (goto-char beg)
+      ;; guess by first msg
+      (let* ((msgid (cdr (assq (wl-summary-message-number)
+                               (elmo-msgdb-get-number-alist
+                                wl-summary-buffer-msgdb))))
+            (function (intern (format "wl-summary-%s" copy-or-refile)))
+            (entity (assoc msgid (elmo-msgdb-get-overview
+                                  wl-summary-buffer-msgdb)))
+            folder)
+       (if entity
+           (setq folder (wl-summary-read-folder (wl-refile-guess entity)
+                                                (format "for %s"
+                                                        copy-or-refile))))
+       (narrow-to-region beg end)
+       (if (eq wl-summary-buffer-view 'thread)
+           (progn
+             (while (not (eobp))
+               (let* ((number (wl-summary-message-number))
+                      (entity (wl-thread-get-entity number))
+                      children)
+                 (if (wl-thread-entity-get-opened entity)
+                     ;; opened...refile line.
+                     (funcall function folder number)
+                   ;; closed
+                   (mapcar
+                    (function
+                     (lambda (x)
+                       (funcall function folder x)))
+                    (wl-thread-get-children-msgs number)))
+                 (forward-line 1))))
+         (while (not (eobp))
+           (funcall function folder (wl-summary-message-number))
+           (forward-line 1)))))))
+
+(defun wl-summary-unmark-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (if (eq wl-summary-buffer-view 'thread)
+         (progn
+           (while (not (eobp))
+             (let* ((number (wl-summary-message-number))
+                    (entity (wl-thread-get-entity number)))
+               (if (wl-thread-entity-get-opened entity)
+                   ;; opened...unmark line.
+                   (wl-summary-unmark)
+                 ;; closed
+                 (mapcar
+                  'wl-summary-unmark
+                  (wl-thread-get-children-msgs number))))
+             (forward-line 1)))
+       (while (not (eobp))
+         (wl-summary-unmark)
+         (forward-line 1))))))
+
+(defun wl-summary-mark-region-subr (function beg end)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (if (eq wl-summary-buffer-view 'thread)
+         (progn
+           (while (not (eobp))
+             (let* ((number (wl-summary-message-number))
+                    (entity (wl-thread-get-entity number))
+                    (wl-summary-move-direction-downward t))
+               (if (wl-thread-entity-get-opened entity)
+                   ;; opened...delete line.
+                   (funcall function number)
+                 ;; closed
+                 (mapcar
+                  function
+                  (wl-thread-get-children-msgs number)))
+               (forward-line 1))))
+       (while (not (eobp))
+         (funcall function (wl-summary-message-number))
+         (forward-line 1))))))
+
+(defun wl-summary-delete-region (beg end)
+  (interactive "r")
+  (wl-summary-mark-region-subr 'wl-summary-delete beg end))
+
+(defun wl-summary-target-mark-region (beg end)
+  (interactive "r")
+  (wl-summary-mark-region-subr 'wl-summary-target-mark beg end))
+
+(defun wl-summary-target-mark-all ()
+  (interactive)
+  (wl-summary-target-mark-region (point-min) (point-max))
+  (setq wl-summary-buffer-target-mark-list 
+       (mapcar 'car 
+               (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))))
+
+(defun wl-summary-delete-all-mark (mark)
+  (goto-char (point-min))
+  (let ((case-fold-search nil))
+    (while (re-search-forward (format "^ *[0-9]+%s" 
+                                     (regexp-quote mark)) nil t)
+      (wl-summary-unmark))
+    (cond ((string= mark "*")
+          (setq wl-summary-buffer-target-mark-list nil))
+         ((string= mark "D")
+          (setq wl-summary-buffer-delete-list nil))
+         ((string= mark "O")
+          (setq wl-summary-buffer-copy-list nil))
+         ((string= mark "o")
+          (setq wl-summary-buffer-refile-list nil)))))
+
+(defun wl-summary-unmark-all ()
+  "Unmark all according to what you input."
+  (interactive)
+  (let ((unmarks (string-to-char-list (read-from-minibuffer "Unmark: ")))
+       cur-mark)
+    (save-excursion
+      (while unmarks
+       (setq cur-mark (char-to-string (car unmarks)))
+       (wl-summary-delete-all-mark cur-mark)
+       (setq unmarks (cdr unmarks))))))
+
+(defun wl-summary-target-mark-thread ()
+  (interactive)
+  (let (beg end)
+    (end-of-line)
+    (wl-summary-goto-top-of-current-thread)
+    (wl-thread-force-open)
+    (setq beg (point))
+    (end-of-line)
+    (wl-summary-goto-bottom-of-current-thread)
+;    (forward-line -1)
+    (beginning-of-line)
+    (setq end (point))
+    (wl-summary-target-mark-region beg end)))
+
+(defun wl-summary-target-mark-msgs (msgs)
+  (while msgs
+    (if (eq wl-summary-buffer-view 'thread)
+       (wl-thread-jump-to-msg (car msgs))
+      (wl-summary-jump-to-msg (car msgs)))
+    (wl-summary-target-mark (wl-summary-message-number))
+    (setq msgs (cdr msgs))))
+
+(defun wl-summary-pick (&optional from-list delete-marks)
+  (interactive)
+  (save-excursion
+    (let* ((completion-ignore-case t)
+          (field (completing-read
+                  (format "Field name (%s): " wl-summary-pick-field-default)
+                  (mapcar 'list
+                          (append '("From" "Subject" "Date"
+                                    "To" "Cc" "Body" "Since" "Before")
+                                  elmo-msgdb-extra-fields))))
+          (field (if (string= field "")
+                     (setq field wl-summary-pick-field-default)
+                   field))
+          (value (if (string-match field "Since\\|Before")
+                     (completing-read "Value: "
+                                      (mapcar (function
+                                               (lambda (x)
+                                                 (list (format "%s" (car x)))))
+                                              elmo-date-descriptions))
+                   (read-from-minibuffer "Value: ")))
+          (overview (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
+          (number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+          (elmo-search-mime-charset wl-search-mime-charset)
+          server-side-search
+          result get-func sum)
+      (if delete-marks
+         (let ((mlist wl-summary-buffer-target-mark-list))
+           (while mlist
+             (when (wl-summary-jump-to-msg (car mlist))
+               (wl-summary-unmark))
+             (setq mlist (cdr mlist)))
+           (setq wl-summary-buffer-target-mark-list nil)))
+      (setq field (downcase field))
+      (cond 
+       ((string-match field "from")
+       (setq get-func 'elmo-msgdb-overview-entity-get-from))
+       ((string-match field "subject")
+       (setq get-func 'elmo-msgdb-overview-entity-get-subject))
+       ((string-match field "date")
+       (setq get-func 'elmo-msgdb-overview-entity-get-date))
+       ((string-match field "to")
+       (setq get-func 'elmo-msgdb-overview-entity-get-to))
+       ((string-match field "cc")
+       (setq get-func 'elmo-msgdb-overview-entity-get-cc))
+       ((string-match field "since")
+       (setq server-side-search (vector 'date "since" value)))
+       ((string-match field "before")
+       (setq server-side-search (vector 'date "before" value)))
+       ((string-match field "body")
+       (setq server-side-search (vector 'match "body" value)))
+       ((member field elmo-msgdb-extra-fields)
+       (setq get-func
+             (lambda (entity)
+               (elmo-msgdb-overview-entity-get-extra-field entity field))))
+       (t
+       (error "Pick by %s is not supported" field)))
+      (unwind-protect
+         (if server-side-search
+             (progn
+               (message "Searching...")
+               (let ((elmo-mime-charset wl-summary-buffer-mime-charset))
+                 (setq result (elmo-search wl-summary-buffer-folder-name 
+                                           (list server-side-search))))
+               (if from-list
+                   (setq result (elmo-list-filter from-list result)))
+               (message "%d message(s) are picked." (length result)))
+           (setq sum 0)
+           (message "Searching...")
+           (while overview
+             (when (and (string-match value
+                                      (or 
+                                       (funcall get-func (car overview))
+                                       ""))
+                        (or (not from-list)
+                            (memq 
+                             (elmo-msgdb-overview-entity-get-number
+                              (car overview)) from-list)))
+               (setq result
+                     (append result
+                             (list
+                              (elmo-msgdb-overview-entity-get-number
+                               (car overview)))))
+               (message "Picked %d message(s)." (setq sum (+ sum 1))))
+             (setq overview (cdr overview)))
+           (message "%d message(s) are picked." sum))
+       (if (null result)
+           (message "No message was picked.")
+         (wl-summary-target-mark-msgs result))))))
+  
+(defun wl-summary-unvirtual ()
+  "Exit from current virtual folder."
+  (interactive)
+  (if (eq 'filter
+         (elmo-folder-get-type wl-summary-buffer-folder-name))
+      (wl-summary-goto-folder-subr (nth 2 (elmo-folder-get-spec
+                                          wl-summary-buffer-folder-name))
+                                  'update nil nil t)
+    (error "This folder is not filtered")))
+
+(defun wl-summary-virtual (&optional arg)
+  "Goto virtual folder."
+  (interactive "P")
+  (if arg
+      (wl-summary-unvirtual)
+    (let* ((completion-ignore-case t)
+          (field (completing-read (format "Field name (%s): " 
+                                          wl-summary-pick-field-default)
+                                  '(("From" . "From") 
+                                    ("Subject" . "Subject")
+                                    ("To" . "To")
+                                    ("Cc" . "Cc")
+                                    ("Body" . "Body")
+                                    ("Since" . "Since")
+                                    ("Before" . "Before"))))
+          (value (read-from-minibuffer "Value: ")))
+      (if (string= field "")
+         (setq field wl-summary-pick-field-default))
+      (wl-summary-goto-folder-subr (concat "/" (downcase field) "=" value "/" 
+                                          wl-summary-buffer-folder-name)
+                                  'update nil nil t))))
+
+(defun wl-summary-delete-all-temp-marks ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (message "Unmarking...")
+    (while (not (eobp))
+      (wl-summary-unmark)
+      (forward-line))
+    (message "Unmarking...done.")
+    (setq wl-summary-buffer-target-mark-list nil)
+    (setq wl-summary-buffer-delete-list nil)
+    (setq wl-summary-buffer-refile-list nil)
+    (setq wl-summary-buffer-copy-list nil)))
+    
+(defun wl-summary-delete-mark (number)
+  "Delete temporary mark of the message specified by NUMBER."
+  (cond
+   ((memq number wl-summary-buffer-target-mark-list)
+    (setq wl-summary-buffer-target-mark-list
+         (delq number wl-summary-buffer-target-mark-list)))
+   ((memq number wl-summary-buffer-delete-list)
+    (setq wl-summary-buffer-delete-list
+         (delq number wl-summary-buffer-delete-list)))
+   (t
+    (let (pair)
+      (cond 
+       ((setq pair (assq number wl-summary-buffer-copy-list))
+       (setq wl-summary-buffer-copy-list
+             (delq pair wl-summary-buffer-copy-list)))
+       ((setq pair (assq number wl-summary-buffer-refile-list))
+       (setq wl-summary-buffer-refile-list
+             (delq pair wl-summary-buffer-refile-list))))))))
+
+(defun wl-summary-mark-line (mark)
+  "Put MARK on current line. Returns message number."
+  (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         msg-num
+         cur-mark)
+      (when (looking-at "^ *\\([0-9]+\\)\\([^0-9]\\)")
+       (setq msg-num  (string-to-int (wl-match-buffer 1)))
+       (setq cur-mark (wl-match-buffer 2))
+       (goto-char (match-end 1))
+       (delete-region (match-beginning 2) (match-end 2))
+       ;(wl-summary-delete-mark msg-num)
+       (insert mark)
+       (if wl-summary-highlight
+           (wl-highlight-summary-current-line nil nil t))
+       (set-buffer-modified-p nil)
+       msg-num))))
+
+(defun wl-summary-target-mark-delete ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+         number mlist)
+      (while (re-search-forward regexp nil t)
+       (let (wl-summary-buffer-disp-msg)
+         (when (setq number (wl-summary-message-number))
+           (wl-summary-delete number)
+           (setq wl-summary-buffer-target-mark-list
+                 (delq number wl-summary-buffer-target-mark-list)))))
+      (setq mlist wl-summary-buffer-target-mark-list)
+      (while mlist
+       (wl-append wl-summary-buffer-delete-list (list (car mlist)))
+       (setq wl-summary-buffer-target-mark-list
+             (delq (car mlist) wl-summary-buffer-target-mark-list))
+       (setq mlist (cdr mlist))))))
+
+(defun wl-summary-target-mark-prefetch ()
+  (interactive)
+  (save-excursion
+    (let* ((mlist (nreverse wl-summary-buffer-target-mark-list))
+          (inhibit-read-only t)
+          (buffer-read-only nil)
+          (count 0)
+          (length (length mlist))
+          (pos (point))
+          skipped
+          new-mark)
+      (while mlist
+       (setq new-mark (wl-summary-prefetch-msg (car mlist)))
+       (if new-mark
+           (progn
+             (message "Prefetching... %d/%d message(s)"
+                      (setq count (+ 1 count)) length)
+             (when (wl-summary-jump-to-msg (car mlist))
+               (wl-summary-unmark)
+               (when new-mark
+                 (when (looking-at "^ *[0-9]+[^0-9]\\([^0-9]\\)")
+                   (delete-region (match-beginning 1) (match-end 1)))
+                 (goto-char (match-beginning 1))
+                 (insert new-mark)
+                 (if wl-summary-highlight      
+                     (wl-highlight-summary-current-line))
+                 (save-excursion
+                   (goto-char pos)
+                   (sit-for 0)))))
+         (setq skipped (cons (car mlist) skipped)))
+       (setq mlist (cdr mlist)))
+      (setq wl-summary-buffer-target-mark-list skipped)
+      (message "Prefetching... %d/%d message(s)." count length)
+      (set-buffer-modified-p nil))))
+
+(defun wl-summary-target-mark-refile-subr (copy-or-refile)
+  (let ((variable
+        (intern (format "wl-summary-buffer-%s-list" copy-or-refile)))
+       (function
+        (intern (format "wl-summary-%s" copy-or-refile)))
+       regexp number msgid entity folder mlist)
+    (save-excursion
+      (goto-char (point-min))
+      (setq regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+      ;; guess by first mark
+      (when (re-search-forward regexp nil t)
+       (setq msgid (cdr (assq (setq number (wl-summary-message-number))
+                              (elmo-msgdb-get-number-alist
+                               wl-summary-buffer-msgdb)))
+             entity (assoc msgid
+                           (elmo-msgdb-get-overview
+                            wl-summary-buffer-msgdb)))
+       (if (null entity)
+           (error "Cannot %s" copy-or-refile))
+       (funcall function
+                (setq folder (wl-summary-read-folder
+                              (wl-refile-guess entity)
+                              (format "for %s" copy-or-refile)))
+                number)
+       (if number
+           (setq wl-summary-buffer-target-mark-list
+                 (delq number wl-summary-buffer-target-mark-list)))
+       (while (re-search-forward regexp nil t)
+         (let (wl-summary-buffer-disp-msg)
+           (when (setq number (wl-summary-message-number))
+             (funcall function folder number)
+             (setq wl-summary-buffer-target-mark-list
+                   (delq number wl-summary-buffer-target-mark-list)))))
+       ;; process invisible messages.
+       (setq mlist wl-summary-buffer-target-mark-list)
+       (while mlist
+         (set variable 
+              (append (symbol-value variable)
+                      (list (cons (car mlist) folder))))
+         (setq wl-summary-buffer-target-mark-list
+               (delq (car mlist) wl-summary-buffer-target-mark-list))
+         (setq mlist (cdr mlist)))))))
+
+(defun wl-summary-target-mark-copy ()
+  (interactive)
+  (wl-summary-target-mark-refile-subr "copy"))
+
+(defun wl-summary-target-mark-refile ()
+  (interactive)
+  (wl-summary-target-mark-refile-subr "refile"))
+
+(defun wl-summary-target-mark-mark-as-read ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+         (inhibit-read-only t)
+         (buffer-read-only nil)
+         number mlist)
+      (while (re-search-forward regexp nil t)
+       (let (wl-summary-buffer-disp-msg)
+         ;; delete target-mark from buffer.
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert " ")
+         (setq number (wl-summary-mark-as-read t))
+         (if wl-summary-highlight      
+             (wl-highlight-summary-current-line))
+         (if number
+             (setq wl-summary-buffer-target-mark-list
+                   (delq number wl-summary-buffer-target-mark-list)))))
+      (setq mlist wl-summary-buffer-target-mark-list)
+      (while mlist
+       (wl-thread-msg-mark-as-read (car mlist))
+       (setq wl-summary-buffer-target-mark-list
+             (delq (car mlist) wl-summary-buffer-target-mark-list))
+       (setq mlist (cdr mlist)))
+      (wl-summary-count-unread 
+       (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+      (wl-summary-update-modeline))))
+
+(defun wl-summary-target-mark-mark-as-unread ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+         (inhibit-read-only t)
+         (buffer-read-only nil)
+         number mlist)
+      (while (re-search-forward regexp nil t)
+       (let (wl-summary-buffer-disp-msg)
+         ;; delete target-mark from buffer.
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert " ")
+         (setq number (wl-summary-mark-as-unread))
+         (if wl-summary-highlight      
+             (wl-highlight-summary-current-line))
+         (if number
+             (setq wl-summary-buffer-target-mark-list
+                   (delq number wl-summary-buffer-target-mark-list)))))
+      (setq mlist wl-summary-buffer-target-mark-list)
+      (while mlist
+       (wl-summary-mark-as-unread (car mlist))
+       (wl-thread-msg-mark-as-unread (car mlist))
+       (setq wl-summary-buffer-target-mark-list
+             (delq (car mlist) wl-summary-buffer-target-mark-list))
+       (setq mlist (cdr mlist)))
+      (wl-summary-count-unread 
+       (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+      (wl-summary-update-modeline))))
+
+(defun wl-summary-target-mark-mark-as-important ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+         (inhibit-read-only t)
+         (buffer-read-only nil)
+         number mlist)
+      (while (re-search-forward regexp nil t)
+       (let (wl-summary-buffer-disp-msg)
+         ;; delete target-mark from buffer.
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert " ")
+         (setq number (wl-summary-mark-as-important))
+         (if wl-summary-highlight      
+             (wl-highlight-summary-current-line))
+         (if number
+             (setq wl-summary-buffer-target-mark-list
+                   (delq number wl-summary-buffer-target-mark-list)))))
+      (setq mlist wl-summary-buffer-target-mark-list)
+      (while mlist
+       (wl-summary-mark-as-important (car mlist))
+       (wl-thread-msg-mark-as-important (car mlist))
+       (setq wl-summary-buffer-target-mark-list
+             (delq (car mlist) wl-summary-buffer-target-mark-list))
+       (setq mlist (cdr mlist)))
+      (wl-summary-count-unread 
+       (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+      (wl-summary-update-modeline))))
+
+(defun wl-summary-target-mark-save ()
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (let ((wl-save-dir
+          (wl-read-directory-name "Save to directory: " wl-tmp-dir))
+         (regexp (concat "^" wl-summary-buffer-number-regexp "\\(\\*\\)"))
+         number mlist)
+      (if (null (file-exists-p wl-save-dir))
+         (make-directory wl-save-dir))
+      (while (re-search-forward regexp nil t)
+       (let (wl-summary-buffer-disp-msg)
+         (setq number (wl-summary-save t wl-save-dir))
+         (wl-summary-unmark)
+         (if number
+             (setq wl-summary-buffer-target-mark-list
+                   (delq number wl-summary-buffer-target-mark-list))))))))
+
+(defun wl-summary-target-mark-pick ()
+  (interactive)
+  (wl-summary-pick wl-summary-buffer-target-mark-list 'delete))
+
+(defun wl-summary-mark-as-read (&optional notcrosses 
+                                         leave-server-side-mark-untouched
+                                         displayed 
+                                         number
+                                         no-cache)
+  (interactive)
+  (save-excursion
+    (let* (eol
+          (inhibit-read-only t)
+          (buffer-read-only nil)
+          (folder wl-summary-buffer-folder-name)
+          (msgdb wl-summary-buffer-msgdb)
+          (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+          ;;(number-alist (elmo-msgdb-get-number-alist msgdb))
+          (case-fold-search nil)
+          mark unread visible uncached new-mark)
+      (if number 
+         (progn
+           (setq visible (wl-summary-jump-to-msg number))
+           (setq mark (cadr (assq number mark-alist))))
+       (setq visible t))
+      (beginning-of-line)
+      (if (or (not visible)
+             (looking-at
+              (format "^ *\\([0-9]+\\)[^0-9]\\(%s\\|%s\\|%s\\|%s\\).*$" 
+                      (regexp-quote wl-summary-read-uncached-mark)
+                      (regexp-quote wl-summary-unread-uncached-mark)
+                      (regexp-quote wl-summary-unread-cached-mark)
+                      (regexp-quote wl-summary-new-mark))))
+         (progn
+           (setq mark (or mark (wl-match-buffer 2)))
+           (when mark
+             (cond 
+              ((string= mark wl-summary-new-mark) ; N
+               (setq wl-summary-buffer-new-count 
+                     (- wl-summary-buffer-new-count 1))
+               (setq uncached t)
+               (setq unread t))
+              ((string= mark wl-summary-unread-uncached-mark) ; U
+               (setq wl-summary-buffer-unread-count 
+                     (- wl-summary-buffer-unread-count 1))
+               (setq uncached t)
+               (setq unread t))
+              ((string= mark wl-summary-unread-cached-mark)  ; !
+               (setq wl-summary-buffer-unread-count 
+                     (- wl-summary-buffer-unread-count 1))
+               (setq unread t))
+              (t
+               ;; no need to mark server.
+               (setq leave-server-side-mark-untouched t)))
+             (wl-summary-update-modeline)
+             (wl-folder-update-unread 
+              folder
+              (+ wl-summary-buffer-unread-count 
+                 wl-summary-buffer-new-count)))
+           (setq number (or number (string-to-int (wl-match-buffer 1))))
+           ;; set server side mark...
+           (setq new-mark (if (and uncached no-cache) 
+                              wl-summary-read-uncached-mark
+                            nil))
+           (if (not leave-server-side-mark-untouched)
+               (elmo-mark-as-read folder
+                                  (list number) msgdb))
+           (when visible
+             (goto-char (match-end 2))
+             (delete-region (match-beginning 2) (match-end 2))
+             (insert (or new-mark " ")))
+           (setq mark-alist
+                 (elmo-msgdb-mark-set mark-alist number new-mark))
+           (elmo-msgdb-set-mark-alist msgdb mark-alist)
+           (wl-summary-set-mark-modified)
+           (if (and visible wl-summary-highlight)
+               (wl-highlight-summary-current-line nil nil t))
+           (if (not notcrosses)
+               (wl-summary-set-crosspost nil (and wl-summary-buffer-disp-msg
+                                                   (interactive-p))))))
+      (set-buffer-modified-p nil)
+      (if unread
+         (run-hooks 'wl-summary-unread-message-hook))
+      number ;return value
+      )))
+
+(defun wl-summary-mark-as-important (&optional number
+                                              mark
+                                              no-server-update)
+  (interactive)
+  (if (eq (elmo-folder-get-type wl-summary-buffer-folder-name)
+         'internal)
+      (error "Cannot process mark in this folder"))
+  (save-excursion
+    (let* (eol
+         (inhibit-read-only t)
+         (buffer-read-only nil)
+         (folder wl-summary-buffer-folder-name)
+         (msgdb wl-summary-buffer-msgdb)
+         (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+         (number-alist (elmo-msgdb-get-number-alist msgdb))
+         message-id visible)
+      (if number 
+         (progn
+           (setq visible (wl-summary-jump-to-msg number))
+           (setq mark (or mark (cadr (assq number mark-alist)))))
+       (setq visible t))
+      (end-of-line)
+      (setq eol (point))
+      (if visible
+         (re-search-backward (concat "^" wl-summary-buffer-number-regexp
+                                     "..../..") nil t)) ; set cursor line
+      (beginning-of-line)
+      (if (re-search-forward "^ *\\([0-9]+\\)[^0-9]\\([^0-9]\\)" eol t)
+         (progn
+           (setq number (or number (string-to-int (wl-match-buffer 1))))
+           (setq mark (or mark (wl-match-buffer 2)))
+           (setq message-id (cdr (assq number number-alist)))
+           (if (string= mark wl-summary-important-mark)
+               (progn
+                 ;; server side mark
+                 (unless no-server-update
+                   (elmo-unmark-important folder (list number) msgdb)
+                   (elmo-msgdb-global-mark-delete message-id))
+                 (when visible
+                   (delete-region (match-beginning 2) (match-end 2))
+                   (insert " "))
+                 (setq mark-alist
+                       (elmo-msgdb-mark-set mark-alist
+                                            number
+                                            nil)))
+             ;; server side mark
+             (unless no-server-update
+               (elmo-mark-as-important folder (list number) msgdb))
+             (when visible
+               (delete-region (match-beginning 2) (match-end 2))
+               (insert wl-summary-important-mark))
+             (setq mark-alist
+                   (elmo-msgdb-mark-set mark-alist
+                                        (string-to-int (wl-match-buffer 1))
+                                        wl-summary-important-mark))
+             ;; Force cache message!!
+             (save-match-data
+               (unless (elmo-cache-exists-p message-id)
+                 (elmo-force-cache-msg folder number message-id
+                                       (elmo-msgdb-get-location msgdb))))
+             (unless no-server-update
+               (elmo-msgdb-global-mark-set message-id 
+                                           wl-summary-important-mark)))
+           (elmo-msgdb-set-mark-alist msgdb mark-alist)
+           (wl-summary-set-mark-modified)))
+      (if (and visible wl-summary-highlight)
+         (wl-highlight-summary-current-line nil nil t))))
+  (set-buffer-modified-p nil)
+  number)
+
+(defsubst wl-summary-format-date (date-string)
+  (condition-case nil
+      (let ((datevec (timezone-fix-time date-string nil 
+                                       wl-summary-fix-timezone)))
+       (format "%02d/%02d(%s)%02d:%02d"
+               (aref datevec 1)
+               (aref datevec 2)
+               (elmo-date-get-week (aref datevec 0)
+                                   (aref datevec 1)
+                                   (aref datevec 2))
+               (aref datevec 3)
+               (aref datevec 4)))
+    (error "??/??(??)??:??")))
+
+(defun wl-summary-overview-create-summary-line (msg 
+                                               entity 
+                                               parent-entity 
+                                               depth
+                                               mark-alist
+                                               &optional 
+                                               children-num
+                                               temp-mark thr-entity
+                                               subject-differ)
+  (let ((wl-mime-charset wl-summary-buffer-mime-charset)
+       (elmo-mime-charset wl-summary-buffer-mime-charset)
+       no-parent before-indent
+       from subject parent-raw-subject parent-subject
+       mark line
+       (elmo-lang wl-summary-buffer-weekday-name-lang)
+       (children-num (if children-num (int-to-string children-num)))
+       (thr-str ""))
+    (if thr-entity
+       (setq thr-str (wl-thread-make-indent-string thr-entity)))
+    (if (string= thr-str "")
+       (setq no-parent t)) ; no parent
+    (if (and wl-summary-width 
+            wl-summary-indent-length-limit
+            (< wl-summary-indent-length-limit
+               (string-width thr-str)))
+       (setq thr-str (wl-set-string-width 
+                      wl-summary-indent-length-limit
+                      thr-str)))
+    (setq from 
+         (wl-set-string-width 
+          (if children-num
+              (- wl-from-width (length children-num) 2)
+            wl-from-width)
+          (elmo-delete-char ?\n
+                            (wl-summary-from-func-internal
+                             (elmo-msgdb-overview-entity-get-from entity)))))
+    (setq subject
+         (elmo-delete-char ?\n
+                           (or (elmo-msgdb-overview-entity-get-subject 
+                                entity)
+                               wl-summary-no-subject-message)))
+    (setq parent-raw-subject 
+         (elmo-msgdb-overview-entity-get-subject parent-entity))
+    (setq parent-subject 
+         (if parent-raw-subject 
+             (elmo-delete-char ?\n parent-raw-subject)))
+    (setq mark (or (cadr (assq msg mark-alist)) " "))
+    (setq line 
+         (concat 
+          (setq before-indent
+                (format (concat "%" 
+                                (int-to-string 
+                                 wl-summary-buffer-number-column)
+                                "s%s%s%s %s")
+                        msg
+                        (or temp-mark " ")
+                        mark
+                        (wl-summary-format-date
+                         (elmo-msgdb-overview-entity-get-date entity))
+                        (if thr-str thr-str "")))
+          (format "[%s ] %s"
+                  (if children-num
+                      (concat "+" children-num ": " from)
+                    (concat " " from))
+                  (if (or no-parent
+                          (null parent-subject)
+                          (not (wl-summary-subject-equal 
+                                subject parent-subject)))
+                      (wl-summary-subject-func-internal subject) ""))))
+    (if wl-summary-width (setq line 
+                              (wl-set-string-width 
+                               (- wl-summary-width 1) line)))
+    (if wl-summary-highlight
+       (wl-highlight-summary-line-string line 
+                                         mark
+                                         temp-mark
+                                         thr-str))
+    line))
+
+(defsubst wl-summary-buffer-number-column-detect (update)
+  (let (end)
+    (save-excursion
+      (setq wl-summary-buffer-number-column
+           (or
+            (if (and update 
+                     (setq end (if (re-search-forward "^ *[0-9]+[^0-9]" nil t)
+                                   (point))))
+                (- end (progn (beginning-of-line) (point)) 1))
+            (wl-get-assoc-list-value wl-summary-number-column-alist
+                                     wl-summary-buffer-folder-name)
+            wl-summary-default-number-column))
+      (setq wl-summary-buffer-number-regexp
+           (wl-repeat-string "." wl-summary-buffer-number-column)))))
+       
+(defsubst wl-summary-proc-wday (wday-str year month mday)
+  (save-match-data
+    (if (string-match "\\([A-Z][a-z][a-z]\\).*" wday-str)
+       (wl-match-string 1 wday-str)
+      (elmo-date-get-week year month mday))))
+
+(defmacro wl-summary-cursor-move-regex ()
+  (` (let ((mark-alist
+           (if (elmo-folder-plugged-p wl-summary-buffer-folder-name)
+               (cond ((eq wl-summary-move-order 'new)
+                      (list
+                       (list
+                        wl-summary-new-mark)
+                       (list
+                        wl-summary-unread-uncached-mark
+                        wl-summary-unread-cached-mark
+                        wl-summary-important-mark)))
+                     ((eq wl-summary-move-order 'unread)
+                      (list
+                      (list
+                       wl-summary-unread-uncached-mark
+                       wl-summary-unread-cached-mark
+                       wl-summary-new-mark)
+                      (list
+                       wl-summary-important-mark)))
+                     (t
+                      (list
+                      (list
+                       wl-summary-unread-uncached-mark
+                       wl-summary-unread-cached-mark
+                       wl-summary-new-mark
+                       wl-summary-important-mark))))
+             (cond ((eq wl-summary-move-order 'unread)
+                    (list
+                    (list
+                     wl-summary-unread-cached-mark)
+                    (list
+                     wl-summary-important-mark)))
+                   (t
+                    (list
+                    (list
+                     wl-summary-unread-cached-mark
+                     wl-summary-important-mark)))))))
+       (mapcar
+       (function
+        (lambda (mark-list)
+          (concat wl-summary-message-regexp
+                  ".\\("
+                  (mapconcat 'regexp-quote
+                             mark-list
+                             "\\|")
+                  "\\)\\|"
+                  wl-summary-message-regexp "\\*")))
+       mark-alist))))
+
+;;
+;; Goto unread or important
+;; 
+(defun wl-summary-cursor-up (&optional hereto)
+  (interactive "P")
+  (if (and (not wl-summary-buffer-target-mark-list)
+          (eq wl-summary-buffer-view 'thread))
+      (progn
+       (if (eobp)
+           (forward-line -1))
+       (wl-thread-jump-to-prev-unread hereto))
+    (if hereto
+       (end-of-line)
+      (beginning-of-line))
+    (let ((case-fold-search nil)
+         regex-list)
+      (setq regex-list (wl-summary-cursor-move-regex))
+      (catch 'done
+       (while regex-list
+         (when (re-search-backward
+                (car regex-list)
+                nil t nil)
+           (beginning-of-line)
+           (throw 'done t))
+         (setq regex-list (cdr regex-list)))
+       (beginning-of-line)
+       (throw 'done nil)))))
+
+;;
+;; Goto unread or important
+;; returns t if next message exists in this folder.
+(defun wl-summary-cursor-down (&optional hereto)
+  (interactive "P")
+  (if (and (null wl-summary-buffer-target-mark-list)
+          (eq wl-summary-buffer-view 'thread))
+      (wl-thread-jump-to-next-unread hereto)
+    (if hereto
+       (beginning-of-line)
+      (end-of-line))
+    (let ((case-fold-search nil)
+         regex-list)
+      (setq regex-list (wl-summary-cursor-move-regex))
+      (catch 'done
+       (while regex-list
+         (when (re-search-forward
+                (car regex-list)
+                nil t nil)
+           (beginning-of-line)
+           (throw 'done t))
+         (setq regex-list (cdr regex-list)))
+       (beginning-of-line)
+       (throw 'done nil)))))
+
+(defun wl-summary-save-view-cache (&optional keep-current-buffer)
+  (save-excursion
+    (let* ((dir (elmo-msgdb-expand-path wl-summary-buffer-folder-name))
+          (cache (expand-file-name wl-summary-cache-file dir))
+          (view (expand-file-name wl-summary-view-file dir))
+          ;;(coding-system-for-write wl-cs-cache)
+          ;;(output-coding-system wl-cs-cache)
+          (save-view wl-summary-buffer-view)
+          (tmp-buffer(get-buffer-create " *wl-summary-save-view-cache*"))
+          charset)
+      (if (file-directory-p dir)
+         (); ok.
+       (if (file-exists-p dir)
+           (error "File %s already exists" dir)
+         (elmo-make-directory dir)))
+      (if (eq save-view 'thread)
+         (wl-thread-save-entity dir))
+      (unwind-protect
+         (progn
+           (when (file-writable-p cache)
+             (if keep-current-buffer
+                 (progn
+                   (save-excursion
+                     (set-buffer tmp-buffer)
+                     (erase-buffer))
+                   (setq charset wl-summary-buffer-mime-charset)
+                   (copy-to-buffer tmp-buffer (point-min) (point-max))
+                   (save-excursion
+                     (set-buffer tmp-buffer)
+                     (widen)
+                     (encode-mime-charset-region 
+                      (point-min) (point-max) charset)
+                     (as-binary-output-file
+                      (write-region (point-min)
+                                    (point-max) cache nil 'no-msg))))
+               (let (buffer-read-only)
+                 (widen)
+                 (encode-mime-charset-region (point-min) (point-max)
+                                             wl-summary-buffer-mime-charset)
+                 (as-binary-output-file
+                  (write-region (point-min) (point-max) cache nil 'no-msg)))))
+           (when (file-writable-p view) ; 'thread or 'sequence
+             (save-excursion
+               (set-buffer tmp-buffer)
+               (erase-buffer)
+               (prin1 save-view tmp-buffer)
+               (princ "\n" tmp-buffer)
+               (write-region (point-min) (point-max) view nil 'no-msg))))
+       ;; kill tmp buffer.
+       (kill-buffer tmp-buffer)))))
+
+(defsubst wl-summary-get-sync-range (folder)
+  (intern (or (and
+              (elmo-folder-plugged-p folder)
+              (wl-get-assoc-list-value 
+               wl-folder-sync-range-alist
+               folder))
+             wl-default-sync-range)))
+
+;; redefined for wl-summary-sync-update
+(defun wl-summary-input-range (folder)
+  "returns update or all or rescan."
+  ;; for the case when parts are expanded in the bottom of the folder
+  (let ((input-range-list '("update" "all" "rescan" "first:" "last:" 
+                           "no-sync" "rescan-noscore"))
+       (default (or (wl-get-assoc-list-value 
+                     wl-folder-sync-range-alist
+                     folder) 
+                    wl-default-sync-range))
+       range)
+    (setq range
+         (completing-read (format "Range (%s): " default)
+                          (mapcar
+                           (function (lambda (x) (cons x x)))
+                           input-range-list)))
+    (if (string= range "")
+       default
+      range)))
+
+(defun wl-summary-toggle-disp-folder (&optional arg)
+  (interactive)
+  (let (fld-buf fld-win
+       (view-message-buffer (wl-message-get-buffer-create))
+       (cur-buf (current-buffer))
+       (summary-win (get-buffer-window (current-buffer))))
+    (cond 
+     ((eq arg 'on)
+      (setq wl-summary-buffer-disp-folder t)
+      ;; hide your folder window
+      (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+         (if (setq fld-win (get-buffer-window fld-buf))
+             (delete-window fld-win))))
+     ((eq arg 'off)
+      (setq wl-summary-buffer-disp-folder nil)
+      ;; hide your wl-message window!
+      (wl-select-buffer view-message-buffer)
+      (delete-window)
+      (select-window (get-buffer-window cur-buf))
+      ;; display wl-folder window!!
+      (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+         (if (setq fld-win (get-buffer-window fld-buf))
+             ;; folder win is already displayed.
+             (select-window fld-win)
+           ;; folder win is not displayed.
+           (switch-to-buffer fld-buf))
+       ;; no folder buf
+       (wl-folder))
+      ;; temporarily delete summary-win.
+      (if summary-win
+         (delete-window summary-win))
+      (split-window-horizontally wl-folder-window-width)
+      (other-window 1)
+      (switch-to-buffer cur-buf))
+     (t
+      (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+         (if (setq fld-win (get-buffer-window fld-buf))      
+             (setq wl-summary-buffer-disp-folder nil)
+           (setq wl-summary-buffer-disp-folder t)))
+      (if (not wl-summary-buffer-disp-folder)
+         ;; hide message window
+         (let ((mes-win (get-buffer-window view-message-buffer))
+               (wl-stay-folder-window t))
+           (if mes-win (delete-window mes-win))
+           ;; hide your folder window
+           (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+               (if (setq fld-win (get-buffer-window fld-buf))
+                   (progn
+                     (delete-window (get-buffer-window cur-buf))
+                     (select-window fld-win)
+                     (switch-to-buffer cur-buf))))
+           (run-hooks 'wl-summary-toggle-disp-folder-off-hook)
+           ;; resume message window.
+           (when mes-win
+             (wl-select-buffer view-message-buffer)
+             (run-hooks 'wl-summary-toggle-disp-folder-message-resumed-hook)
+             (select-window (get-buffer-window cur-buf)))
+           )
+       (save-excursion
+         ;; hide message window
+         (let ((mes-win (get-buffer-window view-message-buffer))
+               (wl-stay-folder-window t))
+           (if mes-win (delete-window mes-win))
+           (select-window (get-buffer-window cur-buf))
+           ;; display wl-folder window!!
+           (if (setq fld-buf (get-buffer wl-folder-buffer-name))
+               (if (setq fld-win (get-buffer-window fld-buf))
+                   ;; folder win is already displayed.
+                   (select-window fld-win)
+                 ;; folder win is not displayed...occupy all.
+                 (switch-to-buffer fld-buf))
+             ;; no folder buf
+             (wl-folder))
+           (split-window-horizontally wl-folder-window-width)
+           (other-window 1)
+           (switch-to-buffer cur-buf)
+           ;; resume message window.
+           (run-hooks 'wl-summary-toggle-disp-folder-on-hook)
+           (when mes-win
+             (wl-select-buffer view-message-buffer)
+             (run-hooks 'wl-summary-toggle-disp-folder-message-resumed-hook)
+             (select-window (get-buffer-window cur-buf))))
+         )))))
+  (run-hooks 'wl-summary-toggle-disp-folder-hook))
+  
+(defun wl-summary-toggle-disp-msg (&optional arg)
+  (interactive)
+  (let (fld-buf fld-win
+       (view-message-buffer (wl-message-get-buffer-create))
+       (cur-buf (current-buffer))
+       summary-win)
+    (cond 
+     ((eq arg 'on)
+      (setq wl-summary-buffer-disp-msg t)
+      ;; hide your folder window
+      (if (and (not wl-stay-folder-window)
+              (setq fld-buf (get-buffer wl-folder-buffer-name)))
+         (if (setq fld-win (get-buffer-window fld-buf))
+             (delete-window fld-win))))
+     ((eq arg 'off)
+      (wl-delete-all-overlays)
+      (setq wl-summary-buffer-disp-msg nil)
+      (save-excursion
+        (wl-select-buffer view-message-buffer)
+        (delete-window)
+       (and (get-buffer-window cur-buf)
+            (select-window (get-buffer-window cur-buf)))
+        (run-hooks 'wl-summary-toggle-disp-off-hook)))
+     (t
+      (if (get-buffer-window view-message-buffer) ; already displayed
+         (setq wl-summary-buffer-disp-msg nil)
+       (setq wl-summary-buffer-disp-msg t))
+      (if wl-summary-buffer-disp-msg
+         (progn
+           (wl-summary-redisplay)
+           ;; hide your folder window
+;;             (setq fld-buf (get-buffer wl-folder-buffer-name))
+;;             (if (setq fld-win (get-buffer-window fld-buf))
+;;                 (delete-window fld-win)))       
+           (run-hooks 'wl-summary-toggle-disp-on-hook))
+       (wl-delete-all-overlays)
+       (save-excursion
+         (wl-select-buffer view-message-buffer)
+         (delete-window)
+         (select-window (get-buffer-window cur-buf))
+         (run-hooks 'wl-summary-toggle-disp-off-hook))
+       ;;(switch-to-buffer cur-buf)
+       )))))
+
+(defun wl-summary-next-line-content ()
+  (interactive)
+  (let ((cur-buf (current-buffer)))
+    (wl-summary-toggle-disp-msg 'on)
+    (when (wl-summary-set-message-buffer-or-redisplay 'ignore-original)
+      (set-buffer cur-buf)
+      (wl-message-next-page 1))))
+
+(defun wl-summary-prev-line-content ()
+  (interactive)
+  (let ((cur-buf (current-buffer)))
+    (wl-summary-toggle-disp-msg 'on)
+    (when (wl-summary-set-message-buffer-or-redisplay 'ignore-original)
+      (set-buffer cur-buf)
+      (wl-message-prev-page 1))))
+
+(defun wl-summary-next-page ()
+  (interactive)
+  (wl-message-next-page))
+
+(defun wl-summary-prev-page ()
+  (interactive)
+  (wl-message-prev-page))
+  
+(defsubst wl-summary-no-mime-p (folder)
+  (wl-string-match-member folder wl-summary-no-mime-folder-list))
+
+(defun wl-summary-set-message-buffer-or-redisplay (&optional ignore-original)
+  ;; if current message is not displayed, display it.
+  ;; return t if exists.
+  (let ((folder wl-summary-buffer-folder-name)
+       (number (wl-summary-message-number))
+       cur-folder cur-number message-last-pos
+       (view-message-buffer (wl-message-get-buffer-create)))
+    (save-excursion
+      (set-buffer view-message-buffer)
+      (setq cur-folder wl-message-buffer-cur-folder)
+      (setq cur-number wl-message-buffer-cur-number))
+    (if (and (not ignore-original)
+            (not 
+             (and (eq number (wl-message-original-buffer-number))
+                  (string= folder (wl-message-original-buffer-folder)))))
+       (progn
+         (if (wl-summary-no-mime-p folder)
+             (wl-summary-redisplay-no-mime folder number)
+           (wl-summary-redisplay-internal folder number))
+         nil)
+      (if (and (string= folder (or cur-folder ""))
+              (eq number (or cur-number 0)))
+         (progn
+           (set-buffer view-message-buffer)
+           t)
+       (if (wl-summary-no-mime-p folder)
+           (wl-summary-redisplay-no-mime folder number)
+         (wl-summary-redisplay-internal folder number))
+       nil))))
+
+(defun wl-summary-target-mark-forward (&optional arg)
+  (interactive "P")
+  (let ((mlist (nreverse wl-summary-buffer-target-mark-list))
+       (summary-buf (current-buffer))
+       (wl-draft-forward t)
+       start-point
+       draft-buf)
+    (wl-summary-jump-to-msg (car mlist))
+    (wl-summary-forward t)
+    (setq start-point (point))
+    (setq draft-buf (current-buffer))
+    (setq mlist (cdr mlist))
+    (save-window-excursion
+      (when mlist
+       (while mlist
+         (set-buffer summary-buf)
+         (wl-summary-jump-to-msg (car mlist))
+         (wl-summary-redisplay)
+         (set-buffer draft-buf)
+         (goto-char (point-max))
+         (wl-draft-insert-message)
+         (setq mlist (cdr mlist)))
+       (wl-draft-body-goto-top)
+       (wl-draft-enclose-digest-region (point) (point-max)))
+      (goto-char start-point)
+      (save-excursion
+       (set-buffer summary-buf)
+       (wl-summary-delete-all-temp-marks)))
+    (run-hooks 'wl-mail-setup-hook)))
+
+(defun wl-summary-target-mark-reply-with-citation (&optional arg)
+  (interactive "P")
+  (let ((mlist (nreverse wl-summary-buffer-target-mark-list))
+       (summary-buf (current-buffer))
+       change-major-mode-hook
+       start-point
+       draft-buf)
+    (wl-summary-jump-to-msg (car mlist))
+    (wl-summary-reply arg t)
+    (goto-char (point-max))
+    (setq start-point (point))
+    (setq draft-buf (current-buffer))
+    (save-window-excursion
+      (while mlist
+       (set-buffer summary-buf)
+       (wl-summary-jump-to-msg (car mlist))
+       (wl-summary-redisplay)
+       (set-buffer draft-buf)
+       (goto-char (point-max))
+       (wl-draft-yank-original)
+       (setq mlist (cdr mlist)))
+      (goto-char start-point)
+      (save-excursion
+       (set-buffer summary-buf)
+       (wl-summary-delete-all-temp-marks)))
+    (run-hooks 'wl-mail-setup-hook)))
+
+(defun wl-summary-reply-with-citation (&optional arg)
+  (interactive "P")
+  (unwind-protect
+      (wl-summary-reply arg t)
+    (goto-char (point-max))
+    (wl-draft-yank-original)
+    (run-hooks 'wl-mail-setup-hook)))
+
+(defun wl-summary-jump-to-msg-by-message-id (&optional id)
+  (interactive)
+  (let* ((original (wl-summary-message-number))
+        (msgid (elmo-string (or id (read-from-minibuffer "Message-ID: "))))
+        (number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+        msg otherfld schar
+        (errmsg
+         (format "No message with id \"%s\" in the folder." msgid)))
+    (if (setq msg (car (rassoc msgid number-alist)))
+       ;;(wl-summary-jump-to-msg-internal
+       ;;wl-summary-buffer-folder-name msg 'no-sync)
+       (progn
+         (wl-thread-jump-to-msg msg)
+         t)
+      ;; for XEmacs!
+      (if (and elmo-use-database
+              (setq errmsg
+                    (format 
+                     "No message with id \"%s\" in the database." msgid))
+              (setq otherfld (elmo-database-msgid-get msgid)))
+         (if (cdr (wl-summary-jump-to-msg-internal
+                   (car otherfld) (nth 1 otherfld) 'no-sync))
+             t ; succeed.
+           ;; Back to original.
+           (wl-summary-jump-to-msg-internal
+            wl-summary-buffer-folder-name original 'no-sync))
+       (cond ((eq wl-summary-search-via-nntp 'confirm)
+              (message "Search message in nntp server \"%s\" <y/n/s(elect)>?"
+                       elmo-default-nntp-server)
+              (setq schar (read-char))
+              (cond ((eq schar ?y)
+                     (wl-summary-jump-to-msg-by-message-id-via-nntp msgid))
+                    ((eq schar ?s)
+                     (wl-summary-jump-to-msg-by-message-id-via-nntp
+                      msgid 
+                      (read-from-minibuffer "NNTP Server: ")))
+                    (t
+                     (message errmsg)
+                     nil)))
+             (wl-summary-search-via-nntp
+              (wl-summary-jump-to-msg-by-message-id-via-nntp msgid))
+             (t
+              (message errmsg)
+              nil))))))
+
+(defun wl-summary-jump-to-msg-by-message-id-via-nntp (&optional id server-spec)
+  (interactive)
+  (let* ((msgid (elmo-string (or id (read-from-minibuffer "Message-ID: "))))
+        newsgroups folder ret
+        user server port ssl spec)
+    (if server-spec
+       (if (string-match "^-" server-spec)
+           (setq spec (elmo-nntp-get-spec server-spec)
+                 user (nth 2 spec)
+                 server (nth 3 spec)
+                 port (nth 4 spec)
+                 ssl (nth 5 spec))
+         (setq server server-spec)))
+    (when (setq ret (elmo-nntp-get-newsgroup-by-msgid
+                    msgid
+                    (or server elmo-default-nntp-server)
+                    (or user elmo-default-nntp-user)
+                    (or port elmo-default-nntp-port)
+                    (or ssl elmo-default-nntp-ssl)))
+      (setq newsgroups (wl-parse-newsgroups ret))
+      (setq folder (concat "-" (car newsgroups)
+                          (elmo-nntp-folder-postfix user server port ssl)))
+      (catch 'found
+       (while newsgroups
+         (if (wl-folder-entity-exists-p (car newsgroups)
+                                        wl-folder-newsgroups-hashtb)
+             (throw 'found
+                    (setq folder (concat "-" (car newsgroups)
+                                         (elmo-nntp-folder-postfix user server port ssl)))))
+         (setq newsgroups (cdr newsgroups)))))
+    (if ret
+       (wl-summary-jump-to-msg-internal folder nil 'update msgid)
+      (message "No message id \"%s\" in nntp server \"%s\"."
+              msgid (or server elmo-default-nntp-server))
+      nil)))
+
+(defun wl-summary-jump-to-msg-internal (folder msg scan-type &optional msgid)
+  (let (wl-auto-select-first entity)
+    (if (or (string= folder wl-summary-buffer-folder-name)
+           (y-or-n-p 
+            (format
+             "Message was found in the folder \"%s\". Jump to it? "
+             folder)))
+       (progn
+         (unwind-protect
+             (wl-summary-goto-folder-subr
+              folder scan-type nil nil t)
+           (if msgid
+               (setq msg
+                     (car (rassoc msgid
+                                  (elmo-msgdb-get-number-alist
+                                   wl-summary-buffer-msgdb)))))
+           (setq entity (wl-folder-search-entity-by-name folder
+                                                         wl-folder-entity
+                                                         'folder))
+           (if entity
+               (wl-folder-set-current-entity-id 
+                (wl-folder-get-entity-id entity))))
+         (if (null msg)
+             (message "Message was not found currently in this folder.")
+           (setq msg (and (wl-thread-jump-to-msg msg) msg)))
+         (cons folder msg)))))
+
+(defun wl-summary-jump-to-parent-message (arg)
+  (interactive "P")
+  (let ((cur-buf (current-buffer))
+       (regexp "\\(<[^<>]*>\\)[ \t]*$")
+       (i -1) ;; xxx
+       msg-id ref-list ref irt)
+    (wl-summary-set-message-buffer-or-redisplay)
+    (set-buffer (wl-message-get-original-buffer))
+    (message "Searching parent message...")
+    (setq ref (std11-field-body "References")
+         irt (std11-field-body "In-Reply-To"))
+    (cond
+     ((and arg (not (numberp arg)) ref (not (string= ref ""))
+          (string-match regexp ref))
+      ;; The first message of the thread.
+      (setq msg-id (wl-match-string 1 ref)))
+     ;; "In-Reply-To:" has only one msg-id.
+     ((and irt (not (string= irt ""))
+          (string-match regexp irt))
+      (setq msg-id (wl-match-string 1 irt)))
+     ((and (or (null arg) (numberp arg)) ref (not (string= ref ""))
+          (string-match regexp ref))
+      ;; "^" searching parent, "C-u 2 ^" looking for grandparent.
+      (while (string-match regexp ref)
+       (setq ref-list
+             (append (list
+                      (wl-match-string 1 ref))
+                     ref-list))
+       (setq ref (substring ref (match-end 0)))
+       (setq i (1+ i)))
+      (setq msg-id
+            (if (null arg) (nth 0 ref-list) ;; previous
+              (if (<= arg i) (nth (1- arg) ref-list)
+                (nth i ref-list))))))
+    (set-buffer cur-buf)
+    (cond ((null msg-id)
+          (message "No parent message!")
+          nil)
+         ((wl-summary-jump-to-msg-by-message-id msg-id)
+          (wl-summary-redisplay)
+          (message "Searching parent message...done.")
+          t)
+         (t ; failed.
+          (message "Parent message was not found.")
+          nil))))
+
+(defun wl-summary-reply (&optional arg without-setup-hook)
+  "Reply to current message. Default is \"wide\" reply.
+Reply to author if invoked with argument."
+  (interactive "P")
+  (let ((folder wl-summary-buffer-folder-name)
+       (number (wl-summary-message-number))
+       (summary-buf (current-buffer))
+       mes-buf)
+    (wl-summary-redisplay-internal folder number)
+    (wl-select-buffer (get-buffer (setq mes-buf (wl-current-message-buffer))))
+    (set-buffer mes-buf)
+    (goto-char (point-min))
+    (or wl-draft-use-frame
+       (split-window-vertically))
+    (other-window 1)
+    (when (setq mes-buf (wl-message-get-original-buffer))
+      (wl-draft-reply mes-buf (not arg) summary-buf)
+      (unless without-setup-hook
+       (run-hooks 'wl-mail-setup-hook)))))
+
+(defun wl-summary-write ()
+  "Write a new draft from Summary."
+  (interactive)
+  (wl-draft nil nil nil nil nil
+           nil nil nil nil nil (current-buffer))
+  (run-hooks 'wl-mail-setup-hook)
+  (mail-position-on-field "To"))
+
+(defun wl-summary-write-current-newsgroup (&optional folder)
+  (interactive)
+  (let* ((folder (or folder wl-summary-buffer-folder-name))
+        (flist (elmo-folder-get-primitive-folder-list folder))
+        newsgroups fld ret)
+    (while (setq fld (car flist))
+      (if (setq ret
+               (cond ((eq 'nntp (elmo-folder-get-type fld))
+                      (nth 1 (elmo-folder-get-spec fld)))
+                     ((eq 'localnews (elmo-folder-get-type fld))
+                      (elmo-replace-in-string
+                       (nth 1 (elmo-folder-get-spec fld)) "/" "\\."))))
+         (setq newsgroups (cond (newsgroups
+                                 (concat newsgroups "," ret))
+                                (t ret))))
+      (setq flist (cdr flist)))
+    (if newsgroups
+       (progn
+         (wl-draft nil nil nil nil nil newsgroups)
+         (run-hooks 'wl-mail-setup-hook))
+      (error "%s is not newsgroup" folder))))
+
+(defun wl-summary-forward (&optional without-setup-hook)
+  (interactive)
+  (let ((folder wl-summary-buffer-folder-name)
+       (number (wl-summary-message-number))
+       (summary-buf (current-buffer))
+       (wl-draft-forward t)
+       entity subject num)
+    (wl-summary-redisplay-internal folder number)
+    (wl-select-buffer (get-buffer wl-message-buf-name))
+    (or wl-draft-use-frame
+       (split-window-vertically))
+    (other-window 1)
+    ;; get original subject.
+    (if summary-buf
+       (save-excursion 
+         (set-buffer summary-buf)
+         (setq num (wl-summary-message-number))
+         (setq entity (assoc (cdr (assq num 
+                                        (elmo-msgdb-get-number-alist 
+                                         wl-summary-buffer-msgdb)))
+                             (elmo-msgdb-get-overview 
+                              wl-summary-buffer-msgdb)))
+         (and entity
+              (setq subject 
+                    (or (elmo-msgdb-overview-entity-get-subject entity) 
+                        "")))))
+    (wl-draft-forward subject summary-buf)
+    (unless without-setup-hook
+      (run-hooks 'wl-mail-setup-hook))))
+
+(defun wl-summary-click (e)
+  (interactive "e")
+  (mouse-set-point e)
+  (wl-summary-read))
+
+(defun wl-summary-read ()
+  (interactive)
+  (let ((folder wl-summary-buffer-folder-name)
+       (number (wl-summary-message-number))
+       cur-folder cur-number message-last-pos
+       (view-message-buffer (get-buffer-create wl-message-buf-name))
+        (sticky-buf-name (and (wl-summary-sticky-p) wl-message-buf-name))
+        (summary-buf-name (buffer-name)))
+    (save-excursion
+      (set-buffer view-message-buffer)
+      (when (and sticky-buf-name
+                 (not (wl-local-variable-p 'wl-message-buf-name
+                                          (current-buffer))))
+        (make-local-variable 'wl-message-buf-name)
+        (setq wl-message-buf-name sticky-buf-name)
+        (make-local-variable 'wl-message-buffer-cur-summary-buffer)
+        (setq wl-message-buffer-cur-summary-buffer summary-buf-name))
+      (setq cur-folder wl-message-buffer-cur-folder)
+      (setq cur-number wl-message-buffer-cur-number))
+    (wl-summary-toggle-disp-msg 'on)
+    (if (and (string= folder cur-folder)
+            (eq number cur-number))
+       (progn
+         (if (wl-summary-next-page)
+             (wl-summary-down t)))
+;          (wl-summary-scroll-up-content)))
+      (if (wl-summary-no-mime-p folder)
+         (wl-summary-redisplay-no-mime folder number)
+       (wl-summary-redisplay-internal folder number)))))
+
+(defun wl-summary-move-cached-regex (skip-marks)
+  (if (eq wl-summary-move-order 'unread)
+      (list
+       (format "^%s[^%s]\\(%s\\)"
+              wl-summary-buffer-number-regexp
+              skip-marks
+              (regexp-quote wl-summary-unread-cached-mark))
+       (format "^%s[^%s]\\(%s\\| \\)"
+              wl-summary-buffer-number-regexp
+              skip-marks
+              (regexp-quote wl-summary-important-mark)))
+    (list
+     (format "^%s[^%s]\\(%s\\|%s\\| \\)"
+            wl-summary-buffer-number-regexp
+            skip-marks
+            (regexp-quote wl-summary-unread-cached-mark)
+            (regexp-quote wl-summary-important-mark)))))
+
+(defun wl-summary-prev (&optional interactive)
+  (interactive)
+  (if wl-summary-move-direction-toggle
+      (setq wl-summary-move-direction-downward nil))
+  (let ((type (elmo-folder-get-type wl-summary-buffer-folder-name))
+       (skip-mark-regexp (mapconcat
+                          'regexp-quote
+                          wl-summary-skip-mark-list ""))
+       goto-next regex-list regex next-entity finfo)
+    (beginning-of-line)
+    (if (elmo-folder-plugged-p wl-summary-buffer-folder-name)
+       (progn
+         (setq regex (format "^%s[^%s]"
+                             wl-summary-buffer-number-regexp
+                             skip-mark-regexp))
+         (unless (re-search-backward regex nil t)
+           (setq goto-next t)))
+      (setq regex-list (wl-summary-move-cached-regex skip-mark-regexp))
+      (catch 'done
+       (while regex-list
+         (if (re-search-backward (car regex-list) nil t)
+             (throw 'done t))
+         (setq regex-list (cdr regex-list)))
+       (setq goto-next t)))
+    (beginning-of-line)
+    (if (not goto-next)
+       (progn
+         (if wl-summary-buffer-disp-msg
+             (wl-summary-redisplay)))
+      (if (or interactive (interactive-p))
+         (progn
+           (when wl-auto-select-next
+             (setq next-entity (wl-summary-get-prev-folder))
+             (if next-entity
+                 (setq finfo (wl-folder-get-entity-info next-entity))))
+           (wl-ask-folder 
+            '(lambda () (wl-summary-next-folder-or-exit next-entity))
+            (format
+             "No more messages. Type SPC to go to %s."
+             (wl-summary-entity-info-msg next-entity finfo))))))))
+
+(defun wl-summary-next (&optional interactive)
+  (interactive)
+  (if wl-summary-move-direction-toggle
+      (setq wl-summary-move-direction-downward t))
+  (let ((type (elmo-folder-get-type wl-summary-buffer-folder-name))
+       (skip-mark-regexp (mapconcat
+                          'regexp-quote
+                          wl-summary-skip-mark-list ""))
+       goto-next regex regex-list next-entity finfo)
+    (end-of-line)
+    (if (elmo-folder-plugged-p wl-summary-buffer-folder-name)
+       (progn
+         (setq regex (format "^%s[^%s]"
+                             wl-summary-buffer-number-regexp
+                             skip-mark-regexp))
+         (unless (re-search-forward regex nil t)
+           (forward-line 1)
+           (setq goto-next t)))
+      (setq regex-list (wl-summary-move-cached-regex skip-mark-regexp))
+      (catch 'done
+       (while regex-list
+         (if (re-search-forward (car regex-list) nil t)
+             (throw 'done t))
+         (setq regex-list (cdr regex-list)))
+       (setq goto-next t)))
+    (beginning-of-line)
+    (if (not goto-next)
+       (if wl-summary-buffer-disp-msg
+           (wl-summary-redisplay))
+      (if (or interactive (interactive-p))
+         (progn
+           (when wl-auto-select-next
+             (setq next-entity (wl-summary-get-next-folder))
+             (if next-entity
+                 (setq finfo (wl-folder-get-entity-info next-entity))))
+           (wl-ask-folder 
+            '(lambda () (wl-summary-next-folder-or-exit next-entity))
+            (format
+             "No more messages. Type SPC to go to %s."
+             (wl-summary-entity-info-msg next-entity finfo))))))))
+
+(defun wl-summary-up (&optional interactive skip-no-unread)
+  (interactive)
+  (if wl-summary-move-direction-toggle
+      (setq wl-summary-move-direction-downward nil))
+  (if (wl-summary-cursor-up)
+      (if wl-summary-buffer-disp-msg
+         (wl-summary-redisplay))
+    (if (or interactive
+           (interactive-p))
+       (let (next-entity finfo)
+         (when wl-auto-select-next
+           (progn
+             (setq next-entity (wl-summary-get-prev-unread-folder))
+             (if next-entity
+                 (setq finfo (wl-folder-get-entity-info next-entity)))))
+         (if (and skip-no-unread
+                  (eq wl-auto-select-next 'skip-no-unread))
+             (wl-summary-next-folder-or-exit next-entity t)
+           (wl-ask-folder 
+            '(lambda () (wl-summary-next-folder-or-exit next-entity t))
+            (format
+             "No more unread messages. Type SPC to go to %s."
+             (wl-summary-entity-info-msg next-entity finfo))))))))
+
+(defun wl-summary-get-prev-folder ()
+  (let ((folder-buf (get-buffer wl-folder-buffer-name))
+       last-entity cur-id)
+    (when folder-buf
+      (setq cur-id (save-excursion (set-buffer folder-buf)
+                                  wl-folder-buffer-cur-entity-id))
+      (wl-folder-get-prev-folder cur-id))))
+
+(defun wl-summary-get-next-folder ()
+  (let ((folder-buf (get-buffer wl-folder-buffer-name))
+       cur-id)
+    (when folder-buf
+      (setq cur-id (save-excursion (set-buffer folder-buf)
+                                  wl-folder-buffer-cur-entity-id))
+      (wl-folder-get-next-folder cur-id))))
+
+(defun wl-summary-get-next-unread-folder ()
+  (let ((folder-buf (get-buffer wl-folder-buffer-name))
+       cur-id)
+    (when folder-buf
+      (setq cur-id (save-excursion (set-buffer folder-buf)
+                                  wl-folder-buffer-cur-entity-id))
+      (wl-folder-get-next-folder cur-id 'unread))))
+
+(defun wl-summary-get-prev-unread-folder ()
+  (let ((folder-buf (get-buffer wl-folder-buffer-name))
+       cur-id)
+    (when folder-buf
+      (setq cur-id (save-excursion (set-buffer folder-buf)
+                                  wl-folder-buffer-cur-entity-id))
+      (wl-folder-get-prev-folder cur-id 'unread))))
+
+(defun wl-summary-down (&optional interactive skip-no-unread)
+  (interactive)
+  (if wl-summary-move-direction-toggle
+      (setq wl-summary-move-direction-downward t))
+  (if (wl-summary-cursor-down)
+      (if wl-summary-buffer-disp-msg
+         (wl-summary-redisplay))
+    (if (or interactive
+           (interactive-p))
+       (let (next-entity finfo)
+         (when wl-auto-select-next
+           (setq next-entity (wl-summary-get-next-unread-folder))
+           (if next-entity
+               (setq finfo (wl-folder-get-entity-info next-entity))))
+         (if (and skip-no-unread
+                  (eq wl-auto-select-next 'skip-no-unread))
+             (wl-summary-next-folder-or-exit next-entity)
+           (wl-ask-folder 
+            '(lambda () (wl-summary-next-folder-or-exit next-entity))
+            (format
+             "No more unread messages. Type SPC to go to %s."
+             (wl-summary-entity-info-msg next-entity finfo))))))))
+
+(defun wl-summary-goto-last-displayed-msg ()
+  (interactive)
+  (unless wl-summary-buffer-last-displayed-msg
+    (setq wl-summary-buffer-last-displayed-msg 
+         wl-summary-buffer-current-msg))
+  (if wl-summary-buffer-last-displayed-msg
+      (progn
+       (wl-summary-jump-to-msg wl-summary-buffer-last-displayed-msg)
+       (if wl-summary-buffer-disp-msg
+           (wl-summary-redisplay)))
+    (message "No last message.")))
+
+(defun wl-summary-redisplay (&optional arg)
+  (interactive "P")
+  (if (and (not arg)
+          (wl-summary-no-mime-p wl-summary-buffer-folder-name))
+      (wl-summary-redisplay-no-mime)
+    (wl-summary-redisplay-internal nil nil arg)))
+
+(defsubst wl-summary-redisplay-internal (&optional folder number force-reload)
+  (interactive)
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (fld (or folder wl-summary-buffer-folder-name))
+        (num (or number (wl-summary-message-number)))
+        (wl-mime-charset      wl-summary-buffer-mime-charset)
+        (default-mime-charset wl-summary-buffer-mime-charset)
+        (wl-message-redisplay-func 
+         wl-summary-buffer-message-redisplay-func)
+        fld-buf fld-win thr-entity)
+    (if (and wl-thread-open-reading-thread
+            (eq wl-summary-buffer-view 'thread)
+            (not (wl-thread-entity-get-opened 
+                  (setq thr-entity (wl-thread-get-entity 
+                                    num))))
+            (wl-thread-entity-get-children thr-entity))
+       (wl-thread-force-open))
+    (if num
+       (progn
+         (setq wl-summary-buffer-disp-msg t)
+         (setq wl-summary-buffer-last-displayed-msg 
+               wl-summary-buffer-current-msg)
+         ;; hide folder window
+         (if (and (not wl-stay-folder-window)
+                  (setq fld-buf (get-buffer wl-folder-buffer-name)))
+             (if (setq fld-win (get-buffer-window fld-buf))
+                 (delete-window fld-win)))       
+          (setq wl-current-summary-buffer (current-buffer))
+         (if (wl-message-redisplay fld num 'mime msgdb force-reload) 
+             (wl-summary-mark-as-read nil
+                                      ;; cached, then change server-mark.
+                                      (if wl-message-cache-used
+                                          nil
+                                        ;; plugged, then leave server-mark.
+                                        (if (elmo-folder-plugged-p
+                                             wl-summary-buffer-folder-name)
+                                            'leave))
+                                      t) ;; displayed
+           )
+         (setq wl-summary-buffer-current-msg num)
+         (if wl-summary-recenter
+             (recenter (/ (- (window-height) 2) 2)))
+         (wl-highlight-summary-displaying)
+         (wl-cache-prefetch-next fld num (current-buffer))
+         (run-hooks 'wl-summary-redisplay-hook))
+      (message "No message to display."))))
+
+(defun wl-summary-redisplay-no-mime (&optional folder number)
+  (interactive)
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (fld (or folder wl-summary-buffer-folder-name))
+        (num (or number (wl-summary-message-number)))
+        (wl-mime-charset      wl-summary-buffer-mime-charset)
+        (default-mime-charset wl-summary-buffer-mime-charset)   
+        wl-break-pages)
+    (if num
+       (progn
+         (setq wl-summary-buffer-disp-msg t)
+         (setq wl-current-summary-buffer (current-buffer))
+         (wl-normal-message-redisplay fld num 'no-mime msgdb)
+         (wl-summary-mark-as-read nil nil t)
+         (setq wl-summary-buffer-current-msg num)
+         (if wl-summary-recenter
+             (recenter (/ (- (window-height) 2) 2)))
+         (wl-highlight-summary-displaying)
+         (run-hooks 'wl-summary-redisplay-hook))
+      (message "No message to display.")
+      (wl-ask-folder 'wl-summary-exit
+                    "No more messages. Type SPC to go to folder mode."))))
+
+(defun wl-summary-redisplay-all-header (&optional folder number)
+  (interactive)
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (fld (or folder wl-summary-buffer-folder-name))
+        (num (or number (wl-summary-message-number)))
+        (wl-mime-charset      wl-summary-buffer-mime-charset)
+        (default-mime-charset wl-summary-buffer-mime-charset)   
+        (wl-message-redisplay-func wl-summary-buffer-message-redisplay-func))
+    (if num
+       (progn
+         (if (wl-message-redisplay fld num 'all-header msgdb); t if displayed.
+             (wl-summary-mark-as-read nil nil t))
+         (run-hooks 'wl-summary-redisplay-hook))
+      (message "No message to display."))))
+        
+(defun wl-summary-jump-to-current-message ()
+  (interactive)
+  (let (message-buf message-win)
+    (if (setq message-buf (get-buffer wl-message-buf-name))
+       (if (setq message-win (get-buffer-window message-buf))
+           (select-window message-win)
+         (wl-select-buffer (get-buffer wl-message-buf-name)))
+      (wl-summary-redisplay)
+      (wl-select-buffer (get-buffer wl-message-buf-name)))
+    (goto-char (point-min))))
+
+(defun wl-summary-cancel-message ()
+  "Cancel an article on news."
+  (interactive)
+  (let ((summary-buf (current-buffer))
+       message-buf)
+    (wl-summary-set-message-buffer-or-redisplay)
+    (if (setq message-buf (wl-message-get-original-buffer))
+       (set-buffer message-buf))
+    (unless (wl-message-news-p)
+      (error "This is not a news article; canceling is impossible"))
+    (when (yes-or-no-p "Do you really want to cancel this article? ")
+      (let (from newsgroups message-id distribution buf)
+       (save-excursion
+         (setq from (std11-field-body "from")
+               newsgroups (std11-field-body "newsgroups")
+               message-id (std11-field-body "message-id")
+               distribution (std11-field-body "distribution"))
+         ;; Make sure that this article was written by the user.
+         (unless (wl-address-user-mail-address-p 
+                  (wl-address-header-extract-address
+                   (car (wl-parse-addresses from))))
+           (error "This article is not yours"))
+         ;; Make control message.
+         (setq buf (set-buffer (get-buffer-create " *message cancel*")))
+         (setq wl-draft-buffer-cur-summary-buffer summary-buf)
+         (buffer-disable-undo (current-buffer))
+         (erase-buffer)
+         (insert "Newsgroups: " newsgroups "\n"
+                 "From: " (wl-address-header-extract-address
+                           wl-from) "\n"
+                           "Subject: cmsg cancel " message-id "\n"
+                           "Control: cancel " message-id "\n"
+                           (if distribution
+                               (concat "Distribution: " distribution "\n")
+                             "")
+                           mail-header-separator "\n"
+                           wl-summary-cancel-message)
+         (message "Canceling your message...")
+         (wl-draft-raw-send t t) ; kill when done, force-pre-hooks.
+         (message "Canceling your message...done"))))))
+
+(defun wl-summary-supersedes-message ()
+  "Supersede current message."
+  (interactive)
+  (let ((summary-buf (current-buffer))
+       (mmelmo-force-fetch-entire-message t)
+       message-buf from)
+    (wl-summary-set-message-buffer-or-redisplay)
+    (if (setq message-buf (wl-message-get-original-buffer))
+       (set-buffer message-buf))
+    (unless (wl-message-news-p)
+      (error "This is not a news article; supersedes is impossible"))
+    (save-excursion
+      (setq from (std11-field-body "from"))
+      ;; Make sure that this article was written by the user.
+      (unless (wl-address-user-mail-address-p 
+              (wl-address-header-extract-address
+               (car (wl-parse-addresses from))))
+       (error "This article is not yours"))
+      (let* ((message-id (std11-field-body "message-id"))
+            (followup-to (std11-field-body "followup-to"))
+            (mail-default-headers
+             (concat mail-default-headers
+                     "Supersedes: " message-id "\n"
+                     (and followup-to
+                          (concat "Followup-To: " followup-to "\n")))))
+       (set-buffer (wl-message-get-original-buffer))
+       (wl-draft-edit-string (buffer-substring (point-min) (point-max)))))))
+
+(defun wl-summary-save (&optional arg wl-save-dir)
+  (interactive)
+  (let ((filename)
+       (num (wl-summary-message-number))
+       (mmelmo-force-fetch-entire-message t))
+    (if (null wl-save-dir)
+       (setq wl-save-dir wl-tmp-dir))
+    (if num
+       (save-excursion
+         (setq filename (expand-file-name
+                         (int-to-string num)
+                         wl-save-dir))
+         (if (null (and arg
+                        (null (file-exists-p filename))))
+             (setq filename
+                   (read-file-name "Save to file: " filename)))
+                                
+         (wl-summary-set-message-buffer-or-redisplay)
+         (set-buffer (wl-message-get-original-buffer))
+         (if (and (null arg) (file-exists-p filename))
+             (if (y-or-n-p "file already exists. override it?")
+                 (write-region (point-min) (point-max) filename))
+           (write-region (point-min) (point-max) filename)))
+      (message "No message to save."))
+    num))
+
+(defun wl-summary-save-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (let ((wl-save-dir
+            (wl-read-directory-name "Save to directory: " wl-tmp-dir)))
+       (if (null (file-exists-p wl-save-dir))
+           (make-directory wl-save-dir))
+       (if (eq wl-summary-buffer-view 'thread)
+           (progn
+             (while (not (eobp))
+               (let* ((number (wl-summary-message-number))
+                      (entity (wl-thread-get-entity number)))
+                 (if (wl-thread-entity-get-opened entity)
+                     (wl-summary-save t wl-save-dir)
+                   ;; closed
+                   (wl-summary-save t wl-save-dir))
+                 (forward-line 1))))
+         (while (not (eobp))
+           (wl-summary-save t wl-save-dir)
+           (forward-line 1)))))))
+
+;; mew-summary-pipe-message()
+(defun wl-summary-pipe-message (prefix command)
+  "Send this message via pipe."
+  (interactive
+   (list current-prefix-arg
+        (read-string "Shell command on message: " wl-summary-shell-command-last)))
+  (if (y-or-n-p "Send this message to pipe? ")
+      (save-excursion
+       (wl-summary-set-message-buffer-or-redisplay)
+       (set-buffer (wl-message-get-original-buffer))
+       (if (string= command "")
+           (setq command wl-summary-shell-command-last))
+       (goto-char (point-min)) ; perhaps this line won't be necessary
+       (if prefix
+           (search-forward "\n\n"))
+       (shell-command-on-region (point) (point-max) command nil)
+       (setq wl-summary-shell-command-last command))))
+
+(defun wl-summary-print-message (&optional arg)
+  (interactive "P")
+  (save-excursion
+    (wl-summary-set-message-buffer-or-redisplay)
+    (if (or (not (interactive-p))
+           (y-or-n-p "Print ok?"))
+       (progn
+         (let* ((message-buffer (get-buffer wl-message-buf-name))
+                ;; (summary-buffer (get-buffer wl-summary-buffer-name))
+                (buffer (generate-new-buffer " *print*")))
+           (set-buffer message-buffer)
+           (copy-to-buffer buffer (point-min) (point-max))
+           (set-buffer buffer)
+           (funcall wl-print-buffer-func)
+           (kill-buffer buffer)))
+      (message ""))))
+
+(defun wl-summary-print-message-with-ps-print (&optional filename)
+  (interactive (list (ps-print-preprint current-prefix-arg)))
+  (if (or (not (interactive-p))
+         (y-or-n-p "Print ok?"))
+      (let ((summary-buffer (current-buffer))
+           wl-break-pages)
+       (save-excursion
+         ;;(wl-summary-set-message-buffer-or-redisplay)
+         (wl-summary-redisplay-internal)
+         (let* ((message-buffer (get-buffer wl-message-buf-name))
+                (buffer (generate-new-buffer " *print*"))
+                (entity (progn
+                          (set-buffer summary-buffer)
+                          (assoc (cdr (assq 
+                                       (wl-summary-message-number)
+                                       (elmo-msgdb-get-number-alist 
+                                        wl-summary-buffer-msgdb)))
+                                 (elmo-msgdb-get-overview 
+                                  wl-summary-buffer-msgdb))))
+                (wl-ps-subject
+                 (and entity
+                      (or (elmo-msgdb-overview-entity-get-subject entity) 
+                          "")))
+                (wl-ps-from
+                 (and entity
+                      (or (elmo-msgdb-overview-entity-get-from entity) "")))
+                (wl-ps-date
+                 (and entity
+                      (or (elmo-msgdb-overview-entity-get-date entity) ""))))
+           (run-hooks 'wl-ps-preprint-hook)
+           (set-buffer message-buffer)
+           (copy-to-buffer buffer (point-min) (point-max))
+           (set-buffer buffer)
+           (unwind-protect
+               (let ((ps-left-header
+                      (list (concat "(" wl-ps-subject ")")
+                            (concat "(" wl-ps-from ")")))
+                     (ps-right-header 
+                      (list "/pagenumberstring load" 
+                            (concat "(" wl-ps-date ")"))))
+                 (run-hooks 'wl-ps-print-hook)
+                 (funcall wl-ps-print-buffer-func filename))
+             (kill-buffer buffer)))))
+    (message "")))
+  
+(if (featurep 'ps-print) ; ps-print is available.
+    (fset 'wl-summary-print-message 'wl-summary-print-message-with-ps-print))
+
+(defun wl-summary-folder-info-update ()
+  (let ((folder (elmo-string wl-summary-buffer-folder-name))
+       (num-db (elmo-msgdb-get-number-alist
+                wl-summary-buffer-msgdb)))
+    (wl-folder-set-folder-updated folder
+                                 (list 0
+                                       (+ wl-summary-buffer-unread-count 
+                                          wl-summary-buffer-new-count)
+                                       (length num-db)))))
+
+(defun wl-summary-get-newsgroups ()
+  (let ((spec-list (elmo-folder-get-primitive-spec-list
+                   (elmo-string wl-summary-buffer-folder-name)))
+       ng-list)
+    (while spec-list
+      (when (eq (caar spec-list) 'nntp)
+       (wl-append ng-list (list (nth 1 (car spec-list)))))
+      (setq spec-list (cdr spec-list)))
+    ng-list))
+
+(defun wl-summary-set-crosspost (&optional type redisplay)
+  (let* ((number (wl-summary-message-number))
+        (spec (elmo-folder-number-get-spec wl-summary-buffer-folder-name
+                                           number))
+        (folder (nth 1 spec))
+        message-buf newsgroups)
+    (when (eq (car spec) 'nntp)
+      (if redisplay
+         (wl-summary-redisplay))
+      (save-excursion
+       (if (setq message-buf (wl-message-get-original-buffer))
+           (set-buffer message-buf))
+       (setq newsgroups (std11-field-body "newsgroups")))
+      (when newsgroups
+       (let* ((msgdb wl-summary-buffer-msgdb)
+              (num-db (elmo-msgdb-get-number-alist msgdb))
+              (ng-list (wl-summary-get-newsgroups)) ;; for multi folder
+              crosspost-folders)
+         (when (setq crosspost-folders
+                     (elmo-delete-lists ng-list
+                                        (wl-parse-newsgroups newsgroups t)))
+           (elmo-crosspost-message-set (cdr (assq number num-db)) ;;message-id
+                                       crosspost-folders
+                                       type) ;;not used
+           (setq wl-crosspost-alist-modified t)))))))
+
+(defun wl-summary-is-crosspost-folder (spec-list fld-list)
+  (let (fld flds)
+    (while spec-list
+      (if (and (eq (caar spec-list) 'nntp)
+              (member (setq fld (nth 1 (car spec-list))) fld-list))
+         (wl-append flds (list fld)))
+      (setq spec-list (cdr spec-list)))
+    flds))
+
+(defun wl-summary-update-crosspost ()
+  (let* ((msgdb wl-summary-buffer-msgdb) 
+        (number-alist (elmo-msgdb-get-number-alist msgdb))
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        (spec-list (elmo-folder-get-primitive-spec-list
+                    (elmo-string wl-summary-buffer-folder-name)))
+        (alist elmo-crosspost-message-alist)
+        (crossed 0)
+        mark ngs num)
+    (when (assq 'nntp spec-list)
+      (while alist
+       (when (setq ngs
+                   (wl-summary-is-crosspost-folder
+                    spec-list
+                    (nth 1 (car alist))))
+         (when (setq num (car (rassoc (caar alist) number-alist)))
+           (if (and (setq mark (cadr (assq num mark-alist)))
+                    (member mark (list wl-summary-new-mark
+                                       wl-summary-unread-uncached-mark
+                                       wl-summary-unread-cached-mark)))
+               (setq crossed (1+ crossed)))
+           (if (wl-summary-jump-to-msg num)
+               (wl-summary-mark-as-read t);; opened
+             (wl-thread-msg-mark-as-read num)));; closed
+         ;; delete if message does't exists.
+         (elmo-crosspost-message-delete (caar alist) ngs)
+         (setq wl-crosspost-alist-modified t))
+       (setq alist (cdr alist))))
+    (if (> crossed 0)
+       crossed)))
+
+(defun wl-crosspost-alist-load ()
+  (setq elmo-crosspost-message-alist (elmo-crosspost-alist-load))
+  (setq wl-crosspost-alist-modified nil))
+
+(defun wl-crosspost-alist-save ()
+  (when wl-crosspost-alist-modified
+    ;; delete non-exists newsgroups
+    (let ((alist elmo-crosspost-message-alist)
+         newsgroups)
+      (while alist
+       (setq newsgroups
+             (elmo-delete-if
+              '(lambda (x)
+                 (not (intern-soft x wl-folder-newsgroups-hashtb)))
+              (nth 1 (car alist))))
+       (if newsgroups
+           (setcar (cdar alist) newsgroups)
+         (setq elmo-crosspost-message-alist
+               (delete (car alist) elmo-crosspost-message-alist)))
+       (setq alist (cdr alist)))
+      (elmo-crosspost-alist-save elmo-crosspost-message-alist)
+      (setq wl-crosspost-alist-modified nil))))
+
+(defun wl-summary-pack-number (&optional arg)
+  (interactive "P")
+  (setq wl-summary-buffer-msgdb
+       (elmo-pack-number
+        wl-summary-buffer-folder-name wl-summary-buffer-msgdb arg))
+  (wl-summary-rescan))
+
+(defun wl-summary-target-mark-uudecode ()
+  (interactive)
+  (let ((mlist (reverse wl-summary-buffer-target-mark-list))
+       (summary-buf (current-buffer))
+       (tmp-buf (get-buffer-create "*WL UUENCODE*"))
+       orig-buf i k filename rc errmsg)
+    (setq i 1)
+    (setq k (length mlist))
+    (set-buffer tmp-buf)
+    (erase-buffer)
+    (save-window-excursion
+      (while mlist
+       (set-buffer summary-buf)
+       (wl-summary-jump-to-msg (car mlist))
+       (wl-summary-redisplay)
+       (set-buffer (setq orig-buf (wl-message-get-original-buffer)))
+       (goto-char (point-min))
+       (cond ((= i 1) ; first
+              (setq filename (wl-message-uu-substring 
+                              orig-buf tmp-buf t 
+                              (= i k))))
+             ((< i k)
+              (wl-message-uu-substring orig-buf tmp-buf))
+             (t ; last
+              (wl-message-uu-substring orig-buf tmp-buf nil t)))
+       (setq i (1+ i))
+       (setq mlist (cdr mlist)))
+      (set-buffer tmp-buf)
+      (message "Exec %s..." wl-prog-uudecode)
+      (unwind-protect
+         (let ((decode-dir wl-tmp-dir))
+           (if (not wl-prog-uudecode-no-stdout-option)
+               (setq filename (read-file-name "Save to file: "
+                                              (expand-file-name
+                                               (elmo-safe-filename filename)
+                                               wl-tmp-dir)))
+             (setq decode-dir
+                   (wl-read-directory-name "Save to directory: "
+                                           wl-tmp-dir))
+             (setq filename (expand-file-name filename decode-dir)))
+           (if (file-exists-p filename)
+               (or (yes-or-no-p (format "File %s exists. Save anyway? " 
+                                        filename))
+                   (error "")))
+           (elmo-bind-directory
+            decode-dir
+            (setq rc
+                  (as-binary-process
+                   (apply 'call-process-region (point-min) (point-max)
+                          wl-prog-uudecode t (current-buffer) nil
+                          wl-prog-uudecode-arg))))
+           (when (not (= 0 rc))
+             (setq errmsg (buffer-substring (point-min)(point-max)))
+             (error "uudecode error: %s" errmsg))
+           (if (not wl-prog-uudecode-no-stdout-option)
+               (let (file-name-handler-alist) ;; void jka-compr
+                 (as-binary-output-file
+                  (write-region (point-min) (point-max)
+                                filename nil 'no-msg))))
+           (save-excursion
+             (set-buffer summary-buf)
+             (wl-summary-delete-all-temp-marks))
+           (if (file-exists-p filename)
+               (message "Saved as %s" filename)))
+       (kill-buffer tmp-buf)))))
+
+(defun wl-summary-drop-unsync ()
+  "Drop all unsync messages."
+  (interactive)
+  (if (elmo-folder-pipe-p wl-summary-buffer-folder-name)
+      (error "You cannot drop unsync messages in this folder"))
+  (if (or (not (interactive-p))
+         (y-or-n-p "Drop all unsync messages?"))
+      (let* ((folder-list (elmo-folder-get-primitive-folder-list
+                          wl-summary-buffer-folder-name))
+            (is-multi (elmo-multi-p wl-summary-buffer-folder-name))
+            (sum 0)
+            (multi-num 0)
+            pair)
+       (message "Dropping...")
+       (while folder-list
+         (setq pair (elmo-max-of-folder (car folder-list)))
+         (when is-multi ;; dirty hack...
+           (incf multi-num)
+           (setcar pair (+ (* multi-num elmo-multi-divide-number)
+                           (car pair))))
+         (elmo-msgdb-set-number-alist 
+          wl-summary-buffer-msgdb 
+          (nconc 
+           (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb)
+           (list (cons (car pair) nil))))
+         (setq sum (+ sum (cdr pair)))
+         (setq folder-list (cdr folder-list)))
+       (wl-summary-set-message-modified)
+       (wl-folder-set-folder-updated wl-summary-buffer-folder-name
+                                     (list 0
+                                           (+ wl-summary-buffer-unread-count 
+                                              wl-summary-buffer-new-count)
+                                           sum))
+       (message "Dropping...done."))))
+
+(defun wl-summary-default-get-next-msg (msg)
+  (let (next)
+    (if (and (not wl-summary-buffer-target-mark-list)
+            (eq wl-summary-buffer-view 'thread)
+            (if (eq wl-summary-move-direction-downward nil)
+                (setq next (wl-thread-get-prev-unread msg))
+              (setq next (wl-thread-get-next-unread msg))))
+       next
+      (save-excursion
+       (wl-summary-jump-to-msg msg)
+       (let (wl-summary-buffer-disp-msg)
+         (if (eq wl-summary-move-direction-downward nil)
+             (unless (wl-summary-cursor-up)
+               (wl-summary-prev))
+           (unless (wl-summary-cursor-down)
+             (wl-summary-next)))
+         (wl-summary-message-number))))))
+
+(defsubst wl-cache-prefetch-p (fld &optional num)
+  (cond ((and num wl-cache-prefetch-folder-type-list)
+        (memq
+         (elmo-folder-number-get-type fld num)
+         wl-cache-prefetch-folder-type-list))
+       (wl-cache-prefetch-folder-type-list
+        (let ((list wl-cache-prefetch-folder-type-list)
+              type)
+          (catch 'done
+            (while (setq type (pop list))
+              (if (elmo-folder-contains-type fld type)
+                  (throw 'done t))))))
+       ((consp wl-cache-prefetch-folder-list)
+        (wl-string-match-member fld wl-cache-prefetch-folder-list))
+       (t
+        wl-cache-prefetch-folder-list)))
+
+(defconst wl-cache-prefetch-idle-time 
+  (if (featurep 'lisp-float-type) (/ (float 1) (float 10)) 1))
+
+(defun wl-cache-prefetch-next (fld msg &optional summary)
+  (if (wl-cache-prefetch-p fld)
+      (if (not elmo-use-buffer-cache)
+        ;; (message "`elmo-use-buffer-cache' is nil, cache prefetch is disable.")
+       (save-excursion
+         (set-buffer (or summary (get-buffer wl-summary-buffer-name)))
+         (let ((next (funcall wl-cache-prefetch-get-next-func msg)))
+           (when (and next
+                      (wl-cache-prefetch-p fld next))
+             (if (not (fboundp 'run-with-idle-timer))
+                 (when (sit-for wl-cache-prefetch-idle-time)
+                   (wl-cache-prefetch-message fld next summary))
+               (run-with-idle-timer
+                wl-cache-prefetch-idle-time
+                nil
+                'wl-cache-prefetch-message fld next summary)
+               (sit-for 0))))))))
+
+(defvar wl-cache-prefetch-debug nil)
+(defun wl-cache-prefetch-message (folder msg summary &optional next)
+  (when (buffer-live-p summary)
+    (save-excursion
+      (set-buffer summary)
+      (when (string= folder wl-summary-buffer-folder-name)
+       (unless next
+         (setq next msg))
+       (let* ((msgdb wl-summary-buffer-msgdb)
+              (message-id (cdr (assq next
+                                     (elmo-msgdb-get-number-alist msgdb)))))
+         (if (not (elmo-buffer-cache-hit (list folder next message-id)))
+             (let* ((size (elmo-msgdb-overview-entity-get-size
+                           (assoc message-id 
+                                  (elmo-msgdb-get-overview msgdb)))))
+               (when (or (elmo-local-file-p folder next)
+                         (not (and (integerp size)
+                                   wl-cache-prefetch-threshold
+                                   (>= size wl-cache-prefetch-threshold)
+                                   (not (elmo-cache-exists-p message-id
+                                                             folder next)))))
+                 (if wl-cache-prefetch-debug
+                     (message "Reading %d..." msg))
+                 (elmo-buffer-cache-message folder next msgdb)
+                 (if wl-cache-prefetch-debug
+                     (message "Reading %d... done" msg))))))))))
+
+(provide 'wl-summary)
+
+;;; wl-summary.el ends here
diff --git a/wl/wl-template.el b/wl/wl-template.el
new file mode 100644 (file)
index 0000000..78d49f5
--- /dev/null
@@ -0,0 +1,194 @@
+;;; wl-template.el -- Draft template feature for Wanderlust.
+
+;; Copyright 1998,1999,2000 Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;;                          Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Masahiro MURATA <muse@ba2.so-net.ne.jp>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-03 13:18:35 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+
+;;; Code:
+;; 
+
+;; Variables
+
+(defvar wl-template-default-name "default")
+(defvar wl-template-buffer-name "*WL-Template*")
+(defvar wl-template-mode-map nil)
+
+(defvar wl-template nil)
+(defvar wl-template-cur-num 0)
+(defvar wl-template-max-num 0)
+(defvar wl-template-draft-buffer nil)
+
+;;; Code
+
+(if wl-template-mode-map
+    nil
+  (setq wl-template-mode-map (make-sparse-keymap))
+  (define-key wl-template-mode-map "p"     'wl-template-prev)
+  (define-key wl-template-mode-map "n"     'wl-template-next)
+  (define-key wl-template-mode-map "q"     'wl-template-abort)
+  (define-key wl-template-mode-map "\r"    'wl-template-set)
+  (define-key wl-template-mode-map "\n"    'wl-template-set))
+
+(defun wl-template-apply (name)
+  (let (template)
+    (when name
+      (if (string= name "")
+         (setq name wl-template-default-name))
+      (when (setq template (cdr (assoc name wl-template-alist)))
+       (save-excursion
+         (setq wl-draft-config-variables
+               (elmo-uniq-list
+                (nconc wl-draft-config-variables
+                       (save-excursion
+                         (wl-draft-config-exec-sub template)))))
+         ;; rehighlight
+         (if wl-highlight-body-too
+             (let ((beg (point-min))
+                   (end (point-max)))
+               (put-text-property beg end 'face nil)
+               (wl-highlight-message beg end t))))))))
+
+(defun wl-template-mode ()
+  "Major mode for Wanderlust template.
+See info under Wanderlust for full documentation.
+
+\\{wl-template-mode}
+
+Enterring WL-Template mode calls the value of `wl-template-mode-hook'."
+  (kill-all-local-variables)
+  (setq mode-name "Wl-Template"
+       major-mode 'wl-template-mode)
+  (use-local-map wl-template-mode-map)
+  (setq buffer-read-only t)
+  (run-hooks 'wl-template-mode-hook))
+
+(defun wl-template-select ()
+  (interactive)
+  (if (not wl-template-visible-select)
+      (wl-template-apply
+       (completing-read (format "Template (%s): " wl-template-default-name)
+                       wl-template-alist))
+    (let* ((begin wl-template-default-name)
+          (work wl-template-alist))
+      (if (and begin (cdr (assoc begin wl-template-alist)))
+         (while (not (string= (car (car work)) begin))
+           (setq wl-template-cur-num (1+ wl-template-cur-num))
+           (setq work (cdr work))))
+      (setq wl-template nil
+           wl-template-cur-num 0
+           wl-template-max-num (length wl-template-alist))
+      (setq wl-template-draft-buffer (current-buffer))
+      (if (get-buffer-window wl-template-buffer-name)
+         (select-window (get-buffer-window wl-template-buffer-name))
+       (let* ((cur-win (selected-window))
+              (size (min
+                     (- (window-height cur-win)
+                        window-min-height 1)
+                     (- (window-height cur-win)
+                        (max window-min-height
+                             (1+ wl-template-buffer-lines))))))
+         (split-window cur-win (if (> size 0) size window-min-height))
+         ;; goto the bottom of the two...
+         (select-window (next-window))
+         ;; make it display...
+         (let ((pop-up-windows nil))
+           (switch-to-buffer (get-buffer-create wl-template-buffer-name)))))
+      (set-buffer wl-template-buffer-name)
+      (wl-template-mode)
+      (wl-template-show))))
+
+(defun wl-template-show (&optional arg)
+  "Show reference INDEX in wl-template-alist."
+  (save-excursion
+    (set-buffer wl-template-buffer-name)
+    (let ((buffer-read-only nil)
+         (mail-header-separator  "--header separater--"))
+      (erase-buffer)
+      (goto-char (point-min))
+      (wl-template-insert
+       (setq wl-template (car (nth wl-template-cur-num wl-template-alist)))
+       mail-header-separator)
+      (wl-highlight-message (point-min) (point-max) t)
+      (and wl-highlight-x-face-func
+          (funcall 
+           wl-highlight-x-face-func 
+           (point-min) (re-search-forward mail-header-separator nil t)))
+      (setq mode-line-process (concat ":" wl-template))
+      (set-buffer-modified-p nil))))
+
+(defun wl-template-next ()
+  "Display next reference in other buffer."
+  (interactive)
+  (if (eq wl-template-max-num
+         (setq wl-template-cur-num (1+ wl-template-cur-num)))
+      (setq wl-template-cur-num 0))
+  (wl-template-show))
+
+(defun wl-template-prev ()
+  "Display previous reference in other buffer."
+  (interactive)
+  (setq wl-template-cur-num (if (eq wl-template-cur-num 0)
+                               (1- wl-template-max-num)
+                             (1- wl-template-cur-num)))
+  (wl-template-show))
+
+(defun wl-template-abort ()
+  "Exit from electric reference mode without inserting reference."
+  (interactive)
+  (setq wl-template nil)
+  (delete-window)
+  (kill-buffer wl-template-buffer-name)
+  (when (buffer-live-p wl-template-draft-buffer)
+    (set-buffer wl-template-draft-buffer)
+    (let ((win (get-buffer-window wl-template-draft-buffer)))
+      (if win (select-window win)))))
+
+(defun wl-template-set ()
+  "Exit from electric reference mode and insert selected reference."
+  (interactive)
+  (if (and wl-template-confirm
+          (not (y-or-n-p "Are you sure ? ")))
+      (message "")
+    (delete-window)
+    (kill-buffer wl-template-buffer-name)
+    (when (buffer-live-p wl-template-draft-buffer)
+      (set-buffer wl-template-draft-buffer)
+      (wl-template-apply wl-template)
+      (let ((win (get-buffer-window wl-template-draft-buffer)))
+       (if win (select-window win))))))
+
+(defun wl-template-insert (name &optional mail-header)
+  (let ((template (cdr (assoc name wl-template-alist)))
+       (mail-header-separator (or mail-header
+                                  mail-header-separator)))
+    (when template
+      (if mail-header
+         (insert mail-header-separator "\n"))
+      (wl-draft-config-exec-sub template))))
+
+(provide 'wl-template)
+
+;;; wl-template.el ends here
diff --git a/wl/wl-thread.el b/wl/wl-thread.el
new file mode 100644 (file)
index 0000000..ac11584
--- /dev/null
@@ -0,0 +1,1427 @@
+;;; wl-thread.el -- Thread display modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/13 16:10:25 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'wl-summary)
+(require 'wl-highlight)
+
+;; buffer local variables.
+;(defvar wl-thread-top-entity '(nil t nil nil)) ; top entity
+(defvar wl-thread-tops nil)           ; top number list (number)
+(defvar wl-thread-entities nil)
+(defvar wl-thread-entity-list nil)    ; entity list
+(defvar wl-thread-entity-hashtb nil)  ; obarray
+(defvar wl-thread-indent-regexp nil)
+
+(mapcar 
+ (function make-variable-buffer-local)
+ (list 'wl-thread-entity-hashtb
+       'wl-thread-entities     ; -> ".wl-thread-entity"
+       'wl-thread-entity-list  ; -> ".wl-thread-entity-list"
+       'wl-thread-entity-cur
+       'wl-thread-indent-regexp))
+
+;;; global flag
+(defvar wl-thread-insert-force-opened nil)
+
+;;;;;; each entity is (number opened-or-not children parent) ;;;;;;;
+
+(defun wl-meaning-of-mark (mark)
+  (if (not (elmo-folder-plugged-p wl-summary-buffer-folder-name))
+      (cond 
+       ((string= mark wl-summary-unread-cached-mark)
+       'unread)
+       ((string= mark wl-summary-important-mark)
+       'important))
+    (cond 
+     ((string= mark wl-summary-new-mark)
+      'new)
+     ((or (string= mark wl-summary-unread-uncached-mark)
+         (string= mark wl-summary-unread-cached-mark))
+      'unread)
+     ((string= mark wl-summary-important-mark)
+      'important))))
+  
+(defun wl-thread-next-mark-p (mark next)
+  (cond ((not (elmo-folder-plugged-p wl-summary-buffer-folder-name))
+        (or (string= mark wl-summary-unread-cached-mark)
+            (string= mark wl-summary-important-mark)))
+       ((eq next 'new)
+        (string= mark wl-summary-new-mark))
+       ((eq next 'unread)
+        (or (string= mark wl-summary-unread-uncached-mark)
+            (string= mark wl-summary-unread-cached-mark)
+            (string= mark wl-summary-new-mark)))
+       (t 
+        (or (string= mark wl-summary-unread-uncached-mark)
+            (string= mark wl-summary-unread-cached-mark)
+            (string= mark wl-summary-new-mark)
+            (string= mark wl-summary-important-mark)))))
+
+(defun wl-thread-next-failure-mark-p (mark next)
+  (cond ((not (elmo-folder-plugged-p wl-summary-buffer-folder-name))
+        (string= mark wl-summary-unread-cached-mark))
+       ((or (eq next 'new)
+            (eq next 'unread))
+        (or (string= mark wl-summary-unread-uncached-mark)
+            (string= mark wl-summary-unread-cached-mark)
+            (string= mark wl-summary-new-mark)
+            (string= mark wl-summary-important-mark)))
+       (t t)))
+
+(defun wl-thread-resume-entity (fld)
+  (let (entities top-list)
+    (setq entities (wl-summary-load-file-object 
+                   (expand-file-name wl-thread-entity-file
+                                     (elmo-msgdb-expand-path fld))))
+    (setq top-list
+         (wl-summary-load-file-object
+          (expand-file-name wl-thread-entity-list-file
+                            (elmo-msgdb-expand-path fld))))
+    (current-buffer)
+    (message "Resuming thread structure...")
+    ;; set obarray value.
+    (setq wl-thread-entity-hashtb (elmo-make-hash (* (length entities) 2)))
+    (mapcar 
+     '(lambda (x)
+       (elmo-set-hash-val (format "#%d" (car x))
+                         x
+                         wl-thread-entity-hashtb))
+     entities)
+    ;; set buffer local variables.
+    (setq wl-thread-entities entities)
+    (setq wl-thread-entity-list top-list)
+    (message "Resuming thread structure...done.")))
+
+(defun wl-thread-save-entity (dir)
+  (wl-thread-save-entities dir)
+  (wl-thread-save-top-list dir))
+
+(defun wl-thread-save-top-list (dir)
+  (let ((top-file (expand-file-name wl-thread-entity-list-file dir))
+       (entity wl-thread-entity-list)
+       (tmp-buffer (get-buffer-create " *wl-thread-save-top-list*")))
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (when (file-writable-p top-file)
+       (prin1 entity tmp-buffer)
+       (princ "\n" tmp-buffer)
+       (write-region (point-min) (point-max) top-file nil 'no-msg)
+       (kill-buffer tmp-buffer)))))
+
+(defun wl-thread-save-entities (dir)
+  (let ((top-file (expand-file-name wl-thread-entity-file dir))
+       (entities wl-thread-entities)
+       (tmp-buffer (get-buffer-create " *wl-thread-save-entities*")))
+    (save-excursion
+      (set-buffer tmp-buffer)
+      (erase-buffer)
+      (when (file-writable-p top-file)
+       (prin1 entities tmp-buffer)
+       (princ "\n" tmp-buffer)
+       (write-region (point-min) (point-max) top-file nil 'no-msg)
+       (kill-buffer tmp-buffer)))))
+
+(defsubst wl-thread-entity-get-number (entity)
+  (nth 0 entity))
+(defsubst wl-thread-entity-get-opened (entity)
+  (nth 1 entity))
+(defsubst wl-thread-entity-get-children (entity)
+  (nth 2 entity))
+(defsubst wl-thread-entity-get-parent (entity)
+  (nth 3 entity))
+
+(defsubst wl-thread-create-entity (num parent &optional opened)
+  (list num (or opened wl-thread-insert-opened) nil parent))
+
+(defsubst wl-thread-get-entity (num)
+  (and num
+       (boundp (intern (format "#%d" num) wl-thread-entity-hashtb))
+       (elmo-get-hash-val (format "#%d" num) wl-thread-entity-hashtb)))
+
+(defsubst wl-thread-entity-set-parent (entity parent)
+  (setcar (cdddr entity) parent)
+  entity)
+
+(defsubst wl-thread-entity-set-children (entity children)
+  (setcar (cddr entity) children))
+
+(defsubst wl-thread-entity-insert-as-top (entity)
+  (when (and entity
+            (car entity))
+    (setq wl-thread-entity-list (append wl-thread-entity-list
+                                       (list (car entity))))
+    (setq wl-thread-entities (cons entity wl-thread-entities))
+    (elmo-set-hash-val (format "#%d" (car entity)) entity
+                      wl-thread-entity-hashtb)))
+
+(defsubst wl-thread-entity-insert-as-children (to entity)
+  (let ((children (nth 2 to)))
+    (setcar (cddr to) (wl-append children 
+                                (list (car entity))))
+    (setq wl-thread-entities (cons entity wl-thread-entities))
+    (elmo-set-hash-val (format "#%d" (car entity)) entity
+                      wl-thread-entity-hashtb)))
+
+(defsubst wl-thread-entity-set-opened (entity opened)
+  (setcar (cdr entity) opened))
+
+(defsubst wl-thread-entity-get-children-num (entity)
+  (let (children
+       ret-val msgs-stack
+       (msgs (list (car entity))))
+   (while msgs
+     (setq msgs (cdr msgs))
+     (setq children (wl-thread-entity-get-children entity))
+     (if (null children)
+        (while (and (null msgs) msgs-stack)
+          (setq msgs (wl-pop msgs-stack)))
+       (setq ret-val (+ (or ret-val 0) (length children)))
+       (wl-push msgs msgs-stack)
+       (setq msgs children))
+     (setq entity (wl-thread-get-entity (car msgs))))
+   ret-val))
+
+(defsubst wl-thread-entity-get-descendant (entity)
+  (let (children
+       ret-val msgs-stack
+       (msgs (list (car entity))))
+   (while msgs
+     (setq msgs (cdr msgs))
+     (setq children (wl-thread-entity-get-children entity))
+     (if (null children)
+        (while (and (null msgs) msgs-stack)
+          (setq msgs (wl-pop msgs-stack)))
+       (setq ret-val (append ret-val (copy-sequence children)))
+       (wl-push msgs msgs-stack)
+       (setq msgs children))
+     (setq entity (wl-thread-get-entity (car msgs))))
+   ret-val))  
+
+(defsubst wl-thread-entity-get-parent-entity (entity)
+  (wl-thread-get-entity (wl-thread-entity-get-parent entity)))
+
+(defun wl-thread-entity-get-top-entity (entity)
+  (let ((cur-entity entity)
+       p-num)
+    (while (setq p-num (wl-thread-entity-get-parent cur-entity))
+      (setq cur-entity (wl-thread-get-entity p-num)))
+    cur-entity))
+
+(defun wl-thread-entity-parent-invisible-p (entity)
+  "If parent of ENTITY is invisible, the top invisible ancestor entity of 
+ENTITY is returned."
+  (let ((cur-entity entity)
+       ret-val)
+    (catch 'done
+      (while (setq cur-entity (wl-thread-entity-get-parent-entity 
+                              cur-entity))
+       (if (null (wl-thread-entity-get-number cur-entity))
+           ;; top!!
+           (progn
+             ;;(setq ret-val nil)
+             (throw 'done nil))
+         (when (not (wl-thread-entity-get-opened cur-entity))
+           ;; not opened!!
+           (setq ret-val cur-entity)))))
+    ;; top of closed entity in the path.
+    ret-val))
+
+(defun wl-thread-entity-get-mark (number)
+  (let ((mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       mark)
+    (setq mark (cadr (assq number mark-alist)))
+    (if (string= mark wl-summary-read-uncached-mark)
+       ()
+      mark)))
+
+(defun wl-thread-meaning-alist-get-result (meaning-alist)
+  (let ((malist meaning-alist)
+       ret-val)
+    (catch 'done
+      (while malist
+       (if (setq ret-val (cdr (car malist)))
+           (throw 'done ret-val))
+       (setq malist (cdr malist))))))
+
+(defun wl-thread-entity-check-prev-mark (entity prev-marks)
+  "Check prev mark. Result is stored in PREV-MARK."
+  (let ((msgs (list (car entity)))
+       (succeed-list (car prev-marks))
+       (failure-list (cdr prev-marks))
+       msgs-stack children
+       mark meaning success failure parents)
+  (catch 'done
+    (while msgs
+      (if (and (not (memq (car msgs) parents))
+              (setq children (reverse (wl-thread-entity-get-children entity))))
+         (progn
+           (wl-append parents (list (car msgs)))
+           (wl-push msgs msgs-stack)
+           (setq msgs children))
+       (if (setq mark (wl-thread-entity-get-mark (car entity)))
+           (if (setq meaning (wl-meaning-of-mark mark))
+               (if (setq success (assq meaning succeed-list))
+                   (progn
+                     (setcdr success entity)
+                     (throw 'done nil))
+                 (setq failure (assq meaning failure-list))
+                 (unless (cdr failure)               
+                   (setcdr (assq meaning failure-list) entity)))))
+       (setq msgs (cdr msgs)))
+       (unless msgs
+         (while (and (null msgs) msgs-stack)
+           (setq msgs (wl-pop msgs-stack))))
+      (setq entity (wl-thread-get-entity (car msgs)))))))
+
+(defun wl-thread-entity-check-next-mark (entity next-marks)
+  "Check next mark. Result is stored in NEXT-MARK."
+  (let ((msgs (list (car entity)))
+       (succeed-list (car next-marks))
+       (failure-list (cdr next-marks))
+       msgs-stack children
+       mark meaning success failure)
+  (catch 'done
+    (while msgs
+      (if (setq mark (wl-thread-entity-get-mark (car entity)))
+         (if (setq meaning (wl-meaning-of-mark mark))
+             (if (setq success (assq meaning succeed-list))
+                 (progn
+                   (setcdr success entity)
+                   (throw 'done nil))
+               (setq failure (assq meaning failure-list))
+               (unless (cdr failure)                 
+                 (setcdr (assq meaning failure-list) entity)))))
+      (setq msgs (cdr msgs))
+      (setq children (wl-thread-entity-get-children entity))
+      (if children
+         (progn
+           (wl-push msgs msgs-stack)
+           (setq msgs children))
+       (unless msgs
+         (while (and (null msgs) msgs-stack)
+           (setq msgs (wl-pop msgs-stack)))))
+      (setq entity (wl-thread-get-entity (car msgs)))))))
+
+(defun wl-thread-entity-get-older-brothers (entity &optional parent)
+  (let* ((parent (or parent
+                    (wl-thread-entity-get-parent-entity entity)))
+        (brothers (wl-thread-entity-get-children parent))
+        ret-val)
+    (if parent
+       brothers
+      (setq brothers wl-thread-entity-list))
+    (catch 'done
+      (while brothers
+       (if (not (eq (wl-thread-entity-get-number entity)
+                    (car brothers)))
+           (wl-append ret-val (list (car brothers)))
+         (throw 'done ret-val))
+       (setq brothers (cdr brothers))))))
+
+(defun wl-thread-entity-get-younger-brothers (entity &optional parent)
+  (let* ((parent (or parent
+                    (wl-thread-entity-get-parent-entity entity)))
+        (brothers (wl-thread-entity-get-children parent)))
+    (if parent 
+       (cdr (memq (wl-thread-entity-get-number entity)
+                  brothers))
+      ;; top!!
+      (cdr (memq (car entity) wl-thread-entity-list)))))
+
+(defun wl-thread-entity-check-prev-mark-from-older-brother (entity prev-marks)
+  (let* (older-brother parent)
+  (catch 'done
+    (while entity
+      (setq older-brother
+           (reverse (wl-thread-entity-get-older-brothers entity)))
+      ;; check itself
+      (let ((succeed-list (car prev-marks))
+           (failure-list (cdr prev-marks))
+           mark meaning success failure)
+       (if (setq mark (wl-thread-entity-get-mark (car entity)))
+           (if (setq meaning (wl-meaning-of-mark mark))
+               (if (setq success (assq meaning succeed-list))
+                   (progn
+                     (setcdr success entity)
+                     (throw 'done nil))
+                 (setq failure (assq meaning failure-list))
+                 (unless (cdr failure)               
+                   (setcdr (assq meaning failure-list) entity))))))
+      ;; check older brothers
+      (while older-brother
+       (wl-thread-entity-check-prev-mark (wl-thread-get-entity
+                                          (car older-brother))
+                                         prev-marks)
+       (if (wl-thread-meaning-alist-get-result
+            (car prev-marks))
+           (throw 'done nil))
+       (setq older-brother (cdr older-brother)))
+      (setq entity (wl-thread-entity-get-parent-entity entity))))))
+
+(defun wl-thread-entity-get-prev-marked-entity (entity prev-marks)
+  (let ((older-brothers (reverse 
+                        (wl-thread-entity-get-older-brothers entity)))
+       marked)
+    (or (catch 'done
+         (while older-brothers
+           (wl-thread-entity-check-prev-mark 
+            (wl-thread-get-entity (car older-brothers)) prev-marks)
+           (if (setq marked
+                     (wl-thread-meaning-alist-get-result
+                      (car prev-marks)))
+               (throw 'done marked))
+           (setq older-brothers (cdr older-brothers))))
+       (wl-thread-entity-check-prev-mark-from-older-brother
+        (wl-thread-entity-get-parent-entity entity) prev-marks)
+       (if (setq marked
+                 (wl-thread-meaning-alist-get-result
+                  (car prev-marks)))
+           marked
+         (if (setq marked
+                   (wl-thread-meaning-alist-get-result
+                    (cdr prev-marks)))
+             marked)))))
+
+(defun wl-thread-get-prev-unread (msg &optional hereto)
+  (let ((cur-entity (wl-thread-get-entity msg))
+       (prev-marks (cond ((eq wl-summary-move-order 'new)
+                          (cons (list (cons 'new nil))
+                                (list (cons 'unread nil)
+                                      (cons 'important nil))))
+                         ((eq wl-summary-move-order 'unread)
+                          (cons (list (cons 'unread nil)
+                                      (cons 'new nil))
+                                (list (cons 'important nil))))
+                         (t 
+                          (cons (list (cons 'unread nil)
+                                      (cons 'new nil)
+                                      (cons 'important nil))
+                                nil))))
+       mark ret-val)
+    (if hereto
+       (when (wl-thread-next-mark-p (setq mark
+                                          (wl-thread-entity-get-mark 
+                                           (car cur-entity)))
+                                    (caaar prev-marks))
+         ;;(setq mark (cons cur-entity
+         ;;(wl-thread-entity-get-mark cur-entity)))
+         (setq ret-val msg)))
+    (when (and (not ret-val)
+              (or (setq cur-entity 
+                        (wl-thread-entity-get-prev-marked-entity
+                         cur-entity prev-marks))
+                  (and hereto mark)))
+      (if (and hereto
+              (catch 'done
+                (let ((success-list (car prev-marks)))
+                  (while success-list
+                    (if (cdr (car success-list))
+                        (throw 'done nil))
+                    (setq success-list (cdr success-list)))
+                  t))
+              (wl-thread-next-failure-mark-p mark (caaar prev-marks)))
+         (setq ret-val msg)
+       (when cur-entity
+         (setq ret-val (car cur-entity)))))
+    ret-val))
+    
+(defun wl-thread-jump-to-prev-unread (&optional hereto)
+  "If prev unread is a children of a closed message, 
+the closed parent will be opened."
+  (interactive "P")
+  (let ((msg (wl-thread-get-prev-unread
+             (wl-summary-message-number) hereto)))
+    (when msg
+      (wl-thread-entity-force-open (wl-thread-get-entity msg))
+      (wl-summary-jump-to-msg msg)
+      t)))
+
+(defun wl-thread-jump-to-msg (&optional number)
+  (interactive)
+  (let ((num (or number 
+                 (string-to-int 
+                  (read-from-minibuffer "Jump to Message(No.): ")))))
+    (wl-thread-entity-force-open (wl-thread-get-entity num))
+    (wl-summary-jump-to-msg num)))
+
+(defun wl-thread-get-next-unread (msg &optional hereto)
+  (let ((cur-entity (wl-thread-get-entity msg))
+       (next-marks (cond ((not (elmo-folder-plugged-p
+                                wl-summary-buffer-folder-name))
+                          (cons (list (cons 'unread nil))
+                                (list (cons 'important nil))))
+                         ((eq wl-summary-move-order 'new)
+                          (cons (list (cons 'new nil))
+                                (list (cons 'unread nil)
+                                      (cons 'important nil))))
+                         ((eq wl-summary-move-order 'unread)
+                          (cons (list (cons 'unread nil)
+                                      (cons 'new nil))
+                                (list (cons 'important nil))))
+                         (t 
+                          (cons (list (cons 'unread nil)
+                                      (cons 'new nil)
+                                      (cons 'important nil))
+                                nil))))
+       mark ret-val)
+    (if hereto
+       (when (wl-thread-next-mark-p (setq mark
+                                          (wl-thread-entity-get-mark 
+                                           (car cur-entity)))
+                                    (caaar next-marks))
+         (setq ret-val msg)))
+    (when (and (not ret-val)
+              (or (setq cur-entity 
+                        (wl-thread-entity-get-next-marked-entity 
+                         cur-entity next-marks))
+                  (and hereto mark)))
+      (if (and hereto
+              ;; all success-list is nil
+              (catch 'done
+                (let ((success-list (car next-marks)))
+                  (while success-list
+                    (if (cdr (car success-list))
+                      (throw 'done nil))
+                    (setq success-list (cdr success-list)))
+                  t))
+              (wl-thread-next-failure-mark-p mark (caaar next-marks)))
+         (setq ret-val msg)
+       (when cur-entity
+         (setq ret-val (car cur-entity)))))
+    ret-val))
+
+(defun wl-thread-jump-to-next-unread (&optional hereto)
+  "If next unread is a children of a closed message, 
+the closed parent will be opened."
+  (interactive "P")
+  (let ((msg (wl-thread-get-next-unread
+             (wl-summary-message-number) hereto)))
+    (when msg
+      (wl-thread-entity-force-open (wl-thread-get-entity msg))
+      (wl-summary-jump-to-msg msg)
+      t)))
+
+(defun wl-thread-close-all ()
+  "Close all top threads."
+  (interactive)
+  (message "Closing all threads...")
+  (let ((entities wl-thread-entity-list)
+       (cur 0)
+       (len (length wl-thread-entity-list)))
+    (while entities
+      (when (and (wl-thread-entity-get-opened (wl-thread-get-entity
+                                              (car entities)))
+                (wl-thread-entity-get-children (wl-thread-get-entity
+                                                (car entities))))
+       (wl-summary-jump-to-msg (car entities))
+       (wl-thread-open-close)
+       (setq cur (1+ cur))
+       (elmo-display-progress
+        'wl-thread-close-all "Closing all threads..." 
+        (/ (* cur 100) len)))
+      (setq entities (cdr entities))))
+  (message "Closing all threads...done.")
+  (goto-char (point-max)))
+
+(defun wl-thread-open-all ()
+  "Open all threads."
+  (interactive)
+  (message "Opening all threads...")
+  (let ((entities wl-thread-entity-list)
+       (cur 0)
+       (len (length wl-thread-entity-list)))
+    (while entities
+      (if (not (wl-thread-entity-get-opened (wl-thread-get-entity
+                                            (car entities))))
+         (wl-thread-entity-force-open (wl-thread-get-entity
+                                       (car entities))))
+      (setq cur (1+ cur))
+      (elmo-display-progress
+       'wl-thread-open-all "Opening all threads..." 
+       (/ (* cur 100) len))
+      (setq entities (cdr entities))))
+  (message "Opening all threads...done.")
+  (goto-char (point-max)))
+
+(defun wl-thread-open-all-unread ()
+  (interactive)
+  (let ((mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       mark)
+    (while mark-alist
+      (if (setq mark (nth 1 (car mark-alist)))
+         (if (or (string= mark wl-summary-unread-uncached-mark)
+                 (string= mark wl-summary-unread-cached-mark)
+                 (string= mark wl-summary-new-mark)
+                 (string= mark wl-summary-important-mark))
+             (wl-thread-entity-force-open (wl-thread-get-entity
+                                           (nth 0 (car mark-alist))))))
+      (setq mark-alist (cdr mark-alist)))))
+
+;;; a subroutine for wl-thread-entity-get-next-marked-entity.
+(defun wl-thread-entity-check-next-mark-from-younger-brother 
+  (entity next-marks)
+  (let* (parent younger-brother)
+    (catch 'done
+      (while entity
+       (setq parent (wl-thread-entity-get-parent-entity entity)
+             younger-brother 
+             (wl-thread-entity-get-younger-brothers entity parent))
+       ;; check my brother!
+       (while younger-brother
+         (wl-thread-entity-check-next-mark 
+          (wl-thread-get-entity (car younger-brother))
+          next-marks)
+         (if  (wl-thread-meaning-alist-get-result
+               (car next-marks))
+             (throw 'done nil))
+         (setq younger-brother (cdr younger-brother)))
+       (setq entity parent)))))
+
+(defun wl-thread-entity-get-next-marked-entity (entity next-marks)
+  (let ((children (wl-thread-entity-get-children entity))
+       marked)
+    (or (catch 'done
+         (while children
+           (wl-thread-entity-check-next-mark 
+            (wl-thread-get-entity (car children)) next-marks)
+           (if (setq marked 
+                     (wl-thread-meaning-alist-get-result 
+                      (car next-marks)))
+               (throw 'done marked))
+           (setq children (cdr children))))
+       ;; check younger brother
+       (wl-thread-entity-check-next-mark-from-younger-brother
+        entity next-marks)
+       (if (setq marked 
+                 (wl-thread-meaning-alist-get-result 
+                  (car next-marks)))
+           marked
+         (if (setq marked
+                   (wl-thread-meaning-alist-get-result
+                    (cdr next-marks)))
+             marked)))))
+
+(defun wl-thread-update-line-msgs (msgs)
+  (wl-delete-all-overlays)
+  (while msgs
+    (setq msgs
+         (wl-thread-update-line-on-buffer (car msgs) nil msgs))))
+
+(defsubst wl-thread-update-line-on-buffer-sub (entity &optional msg parent-msg)
+  (let ((number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+       (overview (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
+       (mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       (buffer-read-only nil)
+       (inhibit-read-only t)
+       ;;(parent-msg parent-msg)
+       overview-entity
+       temp-mark
+       children-num
+       summary-line)
+    (if (memq msg wl-summary-buffer-delete-list)
+       (setq temp-mark "D"))
+    (if (memq msg wl-summary-buffer-target-mark-list)
+       (setq temp-mark "*"))
+    (if (assq msg wl-summary-buffer-refile-list)
+       (setq temp-mark "o"))
+    (if (assq msg wl-summary-buffer-copy-list)
+       (setq temp-mark "O"))
+    (unless temp-mark
+      (setq temp-mark (wl-summary-get-score-mark msg)))
+    ;(setq parent-entity (wl-thread-entity-get-parent-entity entity))
+    (unless parent-msg
+      (setq parent-msg (wl-thread-entity-get-parent entity)))
+    ;;(setq children (wl-thread-entity-get-children entity))
+    (setq children-num (wl-thread-entity-get-children-num entity))
+    (setq overview-entity
+         (elmo-msgdb-search-overview-entity msg 
+                                            number-alist overview))
+    ;;(wl-delete-all-overlays)
+    (when overview-entity
+      (setq summary-line 
+           (wl-summary-overview-create-summary-line
+            msg
+            overview-entity
+            (assoc                     ; parent-entity
+             (cdr (assq parent-msg
+                        number-alist)) overview)
+            nil
+            mark-alist
+            (if wl-thread-insert-force-opened
+                nil
+              (if (not (wl-thread-entity-get-opened entity))
+                  (or children-num)))
+            temp-mark entity))
+      (wl-summary-insert-line summary-line))))
+
+(defun wl-thread-update-line-on-buffer (&optional msg parent-msg updates)
+  (interactive)
+  (let ((msgs (list (or msg (wl-summary-message-number))))
+       entity children msgs-stack)
+   (while msgs
+    (setq msg (wl-pop msgs))
+    (setq updates (and updates (delete msg updates)))
+    (when (wl-thread-delete-line-from-buffer msg)
+      (setq entity (wl-thread-get-entity msg))
+      (wl-thread-update-line-on-buffer-sub entity msg parent-msg)
+      ;;
+      (setq children (wl-thread-entity-get-children entity))
+      (if children
+         ;; update children
+         (when (wl-thread-entity-get-opened entity)
+           (wl-push msgs msgs-stack)
+           (setq parent-msg msg
+                 msgs children))
+       (unless msgs
+         (while (and (null msgs) msgs-stack)
+           (setq msgs (wl-pop msgs-stack)))
+         (when msgs
+           (setq parent-msg
+                 (wl-thread-entity-get-number
+                  (wl-thread-entity-get-parent-entity
+                   (wl-thread-get-entity (car msgs))))))))))
+   updates))
+
+(defun wl-thread-delete-line-from-buffer (msg)
+  "Simply delete msg line."
+  (let (beg)
+    (if (wl-summary-jump-to-msg msg)
+       (progn
+         (setq beg (point))
+         (forward-line 1)
+         (delete-region beg (point))
+         t)
+      nil)))
+
+(defun wl-thread-cleanup-symbols (msgs)
+  (let (sym)
+    (while msgs
+      ;; free symbol.
+      (when (boundp (setq sym (intern (format "#%d" (car msgs))
+                                     wl-thread-entity-hashtb)))
+       ;; delete entity.
+       (setq wl-thread-entities 
+             (delq (wl-thread-get-entity (car msgs))
+                   wl-thread-entities))
+       (makunbound sym))
+      (setq msgs (cdr msgs)))))
+
+(defun wl-thread-delete-message (msg &optional update)
+  "Delete MSG from entity and buffer."
+  (save-excursion
+    (let* ((entity (wl-thread-get-entity msg))
+          children children2
+          older-brothers younger-brothers ;;brothers
+          parent num)
+      (when entity
+       (setq parent (wl-thread-entity-get-parent-entity entity))
+       (if parent 
+           (progn
+             ;; has parent.
+             ;;(setq brothers (wl-thread-entity-get-children parent))
+             (setq older-brothers (wl-thread-entity-get-older-brothers
+                                   entity parent))
+             (setq younger-brothers (wl-thread-entity-get-younger-brothers
+                                     entity parent))
+             ;; 
+             (setq children (wl-thread-entity-get-children entity))
+             (mapcar '(lambda (x)
+                       (wl-thread-entity-set-parent 
+                        (wl-thread-get-entity x)
+                        (wl-thread-entity-get-number parent)))
+                     children)
+             (wl-thread-entity-set-children
+              parent
+              (append
+               (append
+                older-brothers
+                children)
+               younger-brothers)))
+         ;; top...children becomes top.
+         (mapcar '(lambda (x)
+                   (wl-thread-entity-set-parent (wl-thread-get-entity x)
+                                                nil))
+                 (setq children (wl-thread-entity-get-children entity)))
+         ;; delete myself from top list.
+         (setq older-brothers (wl-thread-entity-get-older-brothers
+                               entity nil))
+         (setq younger-brothers (wl-thread-entity-get-younger-brothers
+                                 entity nil))
+         (setq wl-thread-entity-list
+               (append (append older-brothers children) 
+                       younger-brothers))))
+      
+      ;; delete myself from buffer.
+      (unless (wl-thread-delete-line-from-buffer msg)
+       ;; jump to suitable point.
+       ;; just upon the oldest younger-brother of my top.
+       (let ((younger-bros (wl-thread-entity-get-younger-brothers
+                            (wl-thread-entity-get-top-entity entity)
+                            nil)))
+         (if younger-bros
+             (wl-summary-jump-to-msg (car younger-bros))
+           (goto-char (point-max)))) ; no younger brothers.
+       )
+      ;; insert children if thread is closed.
+      (when (not (wl-thread-entity-get-opened entity))
+       (setq children2 children)
+       (while children2
+         (wl-thread-insert-entity 0 ; no mean now...
+                                  (wl-thread-get-entity 
+                                   (car children2))
+                                  entity nil)
+         (setq children2 (cdr children2))))
+      (if update
+         ;; modify buffer.
+         (progn
+           (if parent
+               ;; update parent on buffer.
+               (progn
+                 (setq num (wl-thread-entity-get-number parent))
+                 (when num
+                   (wl-thread-update-line-on-buffer num)))
+             ;; update children lines on buffer.
+             (mapcar '(lambda (x)
+                       (wl-thread-update-line-on-buffer 
+                        x
+                        (wl-thread-entity-get-number parent)))
+                     children)))
+       ;; don't update buffer
+       (if parent
+           ;; return parent number
+           (list (wl-thread-entity-get-number parent))
+         children))
+       ;; update the indent string 
+;          (wl-summary-goto-top-of-current-thread)
+;          (setq beg (point))
+;          (wl-thread-goto-bottom-of-sub-thread)
+;          (wl-thread-update-indent-string-region beg (point)))
+      )))
+  
+(defun wl-thread-insert-message (overview-entity overview mark-alist
+                                msg parent-msg &optional update)
+  "Insert MSG to the entity.
+When optional argument UPDATE is non-nil, 
+Message is inserted to the summary buffer."
+  (let ((parent (wl-thread-get-entity parent-msg))
+       child-entity invisible-top)
+;; Update the thread view...not implemented yet.
+;    (when force-insert
+;      (if parent
+;        (wl-thread-entity-force-open parent))
+    (if parent
+       ;; insert as children.
+       (wl-thread-entity-insert-as-children
+        parent
+        (setq child-entity (wl-thread-create-entity msg (nth 0 parent))))
+      ;; insert as top message.
+      (wl-thread-entity-insert-as-top
+       (wl-thread-create-entity msg nil)))
+    (if update
+       (if (not (setq invisible-top
+                      (wl-thread-entity-parent-invisible-p child-entity)))
+           ;; visible.
+           (progn
+             (wl-summary-update-thread 
+              overview-entity
+              overview 
+              mark-alist 
+              child-entity
+              (elmo-msgdb-overview-get-entity-by-number overview parent-msg))
+             (when parent
+               ;; use thread structure.
+               (wl-thread-entity-get-number
+                (wl-thread-entity-get-top-entity parent)))); return value;
+;;           (setq beg (point))
+;;           (wl-thread-goto-bottom-of-sub-thread)
+;;           (wl-thread-update-indent-string-region beg (point)))
+         ;; currently invisible.. update closed line.
+         (wl-thread-update-children-number invisible-top)
+         nil))))
+
+(defun wl-thread-update-indent-string-thread (top-list)
+  (let (beg)
+    (while top-list
+      (wl-summary-jump-to-msg (car top-list))
+      (setq beg (point))
+      (wl-thread-goto-bottom-of-sub-thread)
+      (wl-thread-update-indent-string-region beg (point))
+      (setq top-list (cdr top-list)))))
+
+(defun wl-thread-update-children-number (entity)
+  "Update the children number."
+  (save-excursion
+    (wl-summary-jump-to-msg (wl-thread-entity-get-number entity))
+    (beginning-of-line)
+    (let ((text-prop (get-text-property (point) 'face))
+         from from-end beg str)
+      (cond 
+       ((looking-at (concat "^" wl-summary-buffer-number-regexp 
+                           "..../..\(.*\)..:.. ["
+                           wl-thread-indent-regexp
+                           "]*\\[\\+\\([0-9]+\\):"))
+       (delete-region (match-beginning 1)(match-end 1))
+       (goto-char (match-beginning 1))
+       (setq str (format "%s" (wl-thread-entity-get-children-num entity)))
+       (if wl-summary-highlight
+           (put-text-property 0 (length str) 'face text-prop str))
+       (insert str))
+       ((looking-at (concat "^" wl-summary-buffer-number-regexp 
+                           "..../..\(.*\)..:.. ["
+                           wl-thread-indent-regexp
+                           "]*\\["))
+       (goto-char (match-end 0))
+       (setq beg (current-column))
+       (setq from-end (save-excursion 
+                        (move-to-column (+ 1 beg wl-from-width))
+                        (point)))
+       (setq from (buffer-substring (match-end 0) from-end))
+       (delete-region (match-end 0) from-end)
+       (setq str (wl-set-string-width 
+                  (1+ wl-from-width)
+                  (format 
+                   "+%s:%s" 
+                   (wl-thread-entity-get-children-num
+                    entity)
+                   from)))
+       (if wl-summary-highlight
+           (put-text-property 0 (length str) 'face text-prop str))
+       (insert str)
+       (condition-case nil ; it's dangerous, so ignore error.
+           (run-hooks 'wl-thread-update-children-number-hook)
+         (error
+          (ding)
+          (message "Error in wl-thread-update-children-number-hook."))))))))
+
+;; 
+;; Thread oriented commands.
+;;
+(defun wl-thread-call-region-func (func &optional arg)
+  (save-excursion
+    (if arg
+       (wl-summary-goto-top-of-current-thread)
+      (beginning-of-line))
+    (let ((beg (point)))
+      (wl-thread-goto-bottom-of-sub-thread)
+      (funcall func beg (point)))))
+
+(defun wl-thread-prefetch (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-prefetch-region arg))
+
+(defun wl-thread-msg-mark-as-read (msg)
+  "Set mark as read for invisible MSG. Modeline is not changed."
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        cur-mark)
+    (setq cur-mark (cadr (assq msg mark-alist)))
+    (cond ((or (string= cur-mark wl-summary-new-mark)
+              (string= cur-mark wl-summary-unread-uncached-mark))
+          ;; N,U -> u or " "
+          (setq mark-alist
+                (elmo-msgdb-mark-set mark-alist
+                                     msg
+                                     (if (elmo-use-cache-p
+                                          wl-summary-buffer-folder-name
+                                          msg)
+                                         wl-summary-read-uncached-mark)))
+          (elmo-msgdb-set-mark-alist msgdb mark-alist)
+          (wl-summary-set-mark-modified))
+         ((string= cur-mark wl-summary-unread-cached-mark)
+          ;; "!" -> " "
+          (setq mark-alist (elmo-msgdb-mark-set mark-alist msg nil))
+          (elmo-msgdb-set-mark-alist msgdb mark-alist)
+          (wl-summary-set-mark-modified)))))
+
+(defun wl-thread-msg-mark-as-unread (msg)
+  "Set mark as unread for invisible MSG. Modeline is not changed."
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        cur-mark)
+    (setq cur-mark (cadr (assq msg mark-alist)))
+    (cond ((string= cur-mark wl-summary-read-uncached-mark)
+          ;; u -> U
+          (setq mark-alist
+                (elmo-msgdb-mark-set mark-alist
+                                     msg
+                                     wl-summary-unread-uncached-mark))
+          (elmo-msgdb-set-mark-alist msgdb mark-alist)
+          (wl-summary-set-mark-modified))
+         ((null cur-mark)
+          ;; " " -> "!"
+          (setq mark-alist (elmo-msgdb-mark-set mark-alist msg 
+                                     wl-summary-unread-cached-mark))
+          (elmo-msgdb-set-mark-alist msgdb mark-alist)
+          (wl-summary-set-mark-modified)))))
+
+(defun wl-thread-msg-mark-as-important (msg)
+  "Set mark as important for invisible MSG. Modeline is not changed."
+  (let* ((msgdb wl-summary-buffer-msgdb)
+        (mark-alist (elmo-msgdb-get-mark-alist msgdb))
+        cur-mark)
+    (setq cur-mark (cadr (assq msg mark-alist)))
+    (setq mark-alist
+         (elmo-msgdb-mark-set mark-alist
+                              msg
+                              (if (string= cur-mark wl-summary-important-mark)
+                                  nil
+                                wl-summary-important-mark)))
+    (elmo-msgdb-set-mark-alist msgdb mark-alist)
+    (wl-summary-set-mark-modified)))
+
+(defun wl-thread-mark-as-read (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-mark-as-read-region arg))
+
+(defun wl-thread-mark-as-unread (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-mark-as-unread-region arg))
+
+(defun wl-thread-mark-as-important (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-mark-as-important-region arg))
+
+(defun wl-thread-copy (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-copy-region arg))
+
+(defun wl-thread-refile (&optional arg)
+  (interactive "P")
+  (condition-case err
+      (progn
+       (wl-thread-call-region-func 'wl-summary-refile-region arg)
+       (if arg
+           (wl-summary-goto-top-of-current-thread))
+       (wl-thread-goto-bottom-of-sub-thread))
+    (error
+     (elmo-display-error err t)
+     nil)))
+       
+(defun wl-thread-delete (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-delete-region arg)
+  (if arg
+      (wl-summary-goto-top-of-current-thread))
+  (if (not wl-summary-move-direction-downward)
+      (wl-summary-prev)
+    (wl-thread-goto-bottom-of-sub-thread)
+    (if wl-summary-buffer-disp-msg
+       (wl-summary-redisplay))))
+
+(defun wl-thread-target-mark (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-target-mark-region arg))
+
+(defun wl-thread-unmark (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-unmark-region arg))
+
+(defun wl-thread-exec (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-exec-region arg))
+
+(defun wl-thread-save (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-save-region arg))
+
+(defun wl-thread-force-open (&optional msg-num)
+  "force open current folder"
+  (if msg-num
+      (wl-summary-jump-to-msg msg-num))
+  (let ((wl-thread-insert-force-opened t))
+    (wl-thread-open-close)))
+
+(defun wl-thread-entity-force-open (entity)
+  (let ((wl-thread-insert-force-opened t)
+       notopen)
+    (if (null (wl-thread-entity-get-parent entity))
+       ;; top!!
+       (if (and (not (wl-thread-entity-get-opened entity))
+                (wl-thread-entity-get-children entity))
+           (wl-thread-force-open (wl-thread-entity-get-number entity)))
+      (if (setq notopen (wl-thread-entity-parent-invisible-p entity))
+         (wl-thread-force-open (wl-thread-entity-get-number notopen))))))
+
+(defun wl-thread-insert-top ()
+  (let ((elist wl-thread-entity-list)
+       (len (length wl-thread-entity-list))
+       (cur 0))
+    (wl-delete-all-overlays)
+    (while elist
+      (wl-thread-insert-entity 
+       0
+       (wl-thread-get-entity (car elist))
+       nil
+       len)
+      (setq cur (1+ cur))
+      (elmo-display-progress
+       'wl-thread-insert-top "Inserting thread..."
+       (/ (* cur 100) len))
+      (setq elist (cdr elist)))))
+
+(defsubst wl-thread-insert-entity-sub (indent entity parent-entity all)
+  (let ((number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+       (overview (elmo-msgdb-get-overview wl-summary-buffer-msgdb))
+       (mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       msg-num
+       overview-entity
+       temp-mark
+       children-num
+       summary-line
+       score)
+    (when (setq msg-num (wl-thread-entity-get-number entity))
+      (unless all ; all...means no temp-mark.
+       (cond ((memq msg-num wl-summary-buffer-delete-list)
+              (setq temp-mark "D"))
+             ((memq msg-num wl-summary-buffer-target-mark-list)
+              (setq temp-mark "*"))
+             ((assq msg-num wl-summary-buffer-refile-list)
+              (setq temp-mark "o"))
+             ((assq msg-num wl-summary-buffer-copy-list)
+              (setq temp-mark "O"))))
+      (unless temp-mark
+       (setq temp-mark (wl-summary-get-score-mark msg-num)))
+      (setq children-num (wl-thread-entity-get-children-num entity))
+      (setq overview-entity 
+           (elmo-msgdb-search-overview-entity
+            (nth 0 entity) number-alist overview))
+      ;;(wl-delete-all-overlays)
+      (when overview-entity
+       (setq summary-line 
+             (wl-summary-overview-create-summary-line
+              msg-num
+              overview-entity
+              (assoc  ; parent-entity
+               (cdr (assq (nth 0 parent-entity)
+                          number-alist)) overview)
+              (1+ indent)
+              mark-alist
+              (if wl-thread-insert-force-opened
+                  nil
+                (if (not (wl-thread-entity-get-opened entity))
+                    (or children-num)))
+              temp-mark entity))
+       (wl-summary-insert-line summary-line)))))
+
+(defun wl-thread-insert-entity (indent entity parent-entity all)
+  "Insert thread entity in current buffer."
+  (let ((msgs (list (car entity)))
+       children msgs-stack)
+    (while msgs
+      (wl-thread-insert-entity-sub indent entity parent-entity all)
+      (setq msgs (cdr msgs))
+      (setq children (nth 2 entity))
+      (if children
+         ;; insert children
+         (when (or wl-thread-insert-force-opened
+                   (wl-thread-entity-get-opened entity))
+           (wl-thread-entity-set-opened entity t)
+           (wl-push msgs msgs-stack)
+           (setq msgs children
+                 indent (1+ indent)
+                 parent-entity entity)))
+      (unless msgs
+       (while (and (null msgs) msgs-stack)
+         (setq msgs (wl-pop msgs-stack))
+         (setq indent (1- indent)))
+       (when msgs
+         (setq entity (wl-thread-get-entity (car msgs)))
+         (setq parent-entity (wl-thread-entity-get-parent-entity entity))))
+      (setq entity (wl-thread-get-entity (car msgs))))))
+
+(defun wl-thread-descendant-p (mynumber number)
+  (let ((cur (wl-thread-get-entity number))
+       num)
+    (catch 'done
+      (while cur
+       (setq cur (wl-thread-entity-get-parent-entity cur))
+       (if (null (setq num (wl-thread-entity-get-number cur))) ; top!
+           (throw 'done nil))
+       (if (and num
+                (eq mynumber (wl-thread-entity-get-number cur)))
+           (throw 'done t)))
+      nil)))
+
+; (defun wl-thread-goto-bottom-of-sub-thread ()
+;   (interactive)
+;   (let ((depth (wl-thread-get-depth-of-current-line)))
+;     (forward-line 1)
+;     (while (and (not (eobp))
+;              (> (wl-thread-get-depth-of-current-line) 
+;                 depth))
+;       (forward-line 1))
+;     (beginning-of-line)))
+
+(defun wl-thread-goto-bottom-of-sub-thread (&optional msg)
+  (interactive)
+  (let ((mynumber (or msg (wl-summary-message-number))))
+    (forward-line 1)
+    (while (wl-thread-descendant-p mynumber (wl-summary-message-number))
+      (forward-line 1))
+    (beginning-of-line)))
+
+(defun wl-thread-remove-destination-region (beg end)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (while (not (eobp))
+       (let ((num (wl-summary-message-number)))
+         (if (assq num wl-summary-buffer-refile-list)
+             (wl-summary-remove-destination)))
+       (forward-line 1)))))
+
+(defun wl-thread-print-destination-region (beg end)
+  (if (or wl-summary-buffer-refile-list
+         wl-summary-buffer-copy-list)
+      (save-excursion
+       (save-restriction
+         (narrow-to-region beg end)
+         (goto-char (point-min))
+         (while (not (eobp))
+           (let ((num (wl-summary-message-number))
+                 pair)
+             (if (or (setq pair (assq num wl-summary-buffer-refile-list))
+                     (setq pair (assq num wl-summary-buffer-copy-list)))
+                 (wl-summary-print-destination (car pair) (cdr pair))))
+           (forward-line 1))))))
+
+(defsubst wl-thread-get-children-msgs (msg)
+  (let ((msgs (list msg))
+       msgs-stack children
+       ret-val)
+    (while msgs
+      (wl-append ret-val (list (car msgs)))
+      (setq children (wl-thread-entity-get-children
+                     (wl-thread-get-entity (car msgs))))
+      (setq msgs (cdr msgs))
+      (if (null children)
+         (while (and (null msgs) msgs-stack)
+           (setq msgs (wl-pop msgs-stack)))
+       (wl-push msgs msgs-stack)
+       (setq msgs children)))
+    ret-val))
+
+(defun wl-thread-get-children-msgs-uncached (msg &optional uncached-marks)
+  (let ((children-msgs (wl-thread-get-children-msgs msg))
+       (mark-alist (elmo-msgdb-get-mark-alist wl-summary-buffer-msgdb))
+       (number-alist (elmo-msgdb-get-number-alist wl-summary-buffer-msgdb))
+       mark
+       uncached-list)
+    (while children-msgs
+      (if (and (not (eq msg (car children-msgs))) ; except itself
+              (or (and uncached-marks
+                       (setq mark (cadr (assq (car children-msgs)
+                                              mark-alist)))
+                       (member mark uncached-marks))
+                  (and (not uncached-marks)
+                       (null (elmo-cache-exists-p
+                              (cdr (assq (car children-msgs)
+                                         number-alist)))))))
+         (wl-append uncached-list (list (car children-msgs))))
+      (setq children-msgs (cdr children-msgs)))
+    uncached-list))
+
+(defun wl-thread-get-children-msgs-with-mark (msg mark)
+  (let ((children-msgs (wl-thread-get-children-msgs msg))
+       (check-func (cond ((string= mark "o")
+                          'wl-summary-msg-marked-as-refiled)
+                         ((string= mark "O")
+                          'wl-summary-msg-marked-as-copied)
+                         ((string= mark "D")
+                          'wl-summary-msg-marked-as-deleted)
+                         ((string= mark "*")
+                          'wl-summary-msg-marked-as-target)))
+       ret-val)
+    (while children-msgs
+      (if (funcall check-func (car children-msgs))
+         (wl-append ret-val (list (car children-msgs))))
+      (setq children-msgs (cdr children-msgs)))
+    ret-val))
+
+(defun wl-thread-close (entity)
+  (let (depth beg)
+    (wl-thread-entity-set-opened entity nil)
+    (setq depth (wl-thread-get-depth-of-current-line))
+    (beginning-of-line)
+    (setq beg (point))
+    (wl-thread-goto-bottom-of-sub-thread)
+    (wl-thread-remove-destination-region beg 
+                                        (point))
+    (forward-char -1)  ;; needed for mouse-face.
+    (delete-region beg (point))
+    (wl-thread-insert-entity (- depth 1)
+                            entity 
+                            (wl-thread-get-entity
+                             (nth 3 entity))
+                            nil)
+    (delete-char 1) ; delete '\n'
+    (wl-thread-print-destination-region beg (point))))
+
+(defun wl-thread-open (entity)
+  (let (depth beg)
+    (beginning-of-line)
+    (setq beg (point))
+    (setq depth (wl-thread-get-depth-of-current-line))
+    (end-of-line)
+    (delete-region beg (point))
+    (wl-thread-entity-set-opened entity t)
+    (wl-thread-insert-entity depth ;(- depth 1) 
+                            entity 
+                            (wl-thread-get-entity
+                             (nth 3 entity)) nil)
+    (delete-char 1) ; delete '\n'
+    (wl-thread-print-destination-region beg (point))))
+
+(defun wl-thread-open-close (&optional force-open)
+  (interactive "P")
+  (when (eq wl-summary-buffer-view 'thread)
+    ;(if (equal wl-thread-top-entity '(nil t nil nil))
+    ;(error "There's no thread structure."))
+    (save-excursion
+      (let ((inhibit-read-only t)
+           (buffer-read-only nil)
+           (wl-thread-insert-force-opened 
+            (or wl-thread-insert-force-opened 
+                force-open))
+           msg entity beg depth parent)
+       (setq msg (wl-summary-message-number))
+       (setq entity (wl-thread-get-entity msg))
+       (if (wl-thread-entity-get-opened entity)
+           ;; if already opened, close its child!
+         (if (wl-thread-entity-get-children entity)
+             (wl-thread-close entity)
+           ;; opened, but has no children, close its parent!
+           (when (setq parent (wl-thread-entity-get-parent entity))
+             (wl-summary-jump-to-msg parent)
+             (wl-thread-close
+              (wl-thread-get-entity (wl-summary-message-number)))))
+         ;; if closed (or it is just a thread bottom message)
+         ;; has children, open it!
+         (if (wl-thread-entity-get-children entity)
+             (wl-thread-open entity)
+           ;; closed, and has no children, close its parent!
+           (setq msg (or (wl-thread-entity-get-parent entity)
+                         (wl-thread-entity-get-number entity)))
+           (when msg
+             (wl-summary-jump-to-msg msg)
+             (wl-thread-close
+              (wl-thread-get-entity (wl-summary-message-number)))))))
+      (wl-summary-set-message-modified)
+      (set-buffer-modified-p nil))))
+  
+
+(defun wl-thread-get-depth-of-current-line ()
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((depth 0))
+      (if (re-search-forward (concat "^" wl-summary-buffer-number-regexp 
+                                    "..../..\(.*\)..:.. ")
+                            nil t)
+         (while (string-match wl-thread-indent-regexp 
+                              (char-to-string
+                               (char-after (point))))
+           (setq depth (1+ depth))
+           (forward-char)))
+      (/ depth wl-thread-indent-level-internal))))
+
+(defun wl-thread-update-indent-string-region (beg end)
+  (interactive "r")
+  (save-excursion
+    (goto-char beg)
+    (while (< (point) end)
+      (wl-thread-update-indent-string)
+      (forward-line 1))))
+
+(defsubst wl-thread-make-indent-string (entity)
+  (let ((cur entity)
+       (ret-val "")
+       (space-str (wl-repeat-string wl-thread-space-str-internal
+                                    (- wl-thread-indent-level-internal 1)))
+       parent)
+    (when (wl-thread-entity-get-number 
+          (setq parent (wl-thread-entity-get-parent-entity cur)))
+      (if (wl-thread-entity-get-younger-brothers cur)
+         (setq ret-val wl-thread-have-younger-brother-str-internal)
+       (setq ret-val wl-thread-youngest-child-str-internal))
+      (setq ret-val (concat ret-val 
+                           (wl-repeat-string
+                            wl-thread-horizontal-str-internal
+                            (- wl-thread-indent-level-internal 1))))
+      (setq cur parent)
+      (while (wl-thread-entity-get-number 
+             (wl-thread-entity-get-parent-entity cur))
+       (if (wl-thread-entity-get-younger-brothers cur)
+           (setq ret-val (concat wl-thread-vertical-str-internal
+                                 space-str
+                                 ret-val))
+         (setq ret-val (concat wl-thread-space-str-internal 
+                               space-str
+                               ret-val)))
+       (setq cur (wl-thread-entity-get-parent-entity cur))))
+    ret-val))
+
+(defun wl-thread-update-indent-string ()
+  "Update indent string of current line."
+  (interactive)
+  (save-excursion
+    (beginning-of-line)
+    (let ((inhibit-read-only t)
+         (buffer-read-only nil)
+         thr-str)
+      (when (looking-at (concat "^ *\\([0-9]+\\)"
+                               "..../..\(.*\)..:.. \\("
+                               wl-highlight-thread-indent-string-regexp
+                               "\\)\\["))
+       (goto-char (match-beginning 2))
+       (delete-region (match-beginning 2)
+                      (match-end 2))
+       (setq thr-str
+             (wl-thread-make-indent-string 
+              (wl-thread-get-entity (string-to-int (wl-match-buffer 1)))))
+       (if (and wl-summary-width 
+                wl-summary-indent-length-limit
+                (< wl-summary-indent-length-limit
+                   (string-width thr-str)))
+           (setq thr-str (wl-set-string-width 
+                          wl-summary-indent-length-limit
+                          thr-str)))
+       (insert thr-str)
+       (if wl-summary-highlight
+           (wl-highlight-summary-current-line))))))
+
+(provide 'wl-thread)
+
+;;; wl-thread.el ends here
diff --git a/wl/wl-util.el b/wl/wl-util.el
new file mode 100644 (file)
index 0000000..0102e10
--- /dev/null
@@ -0,0 +1,820 @@
+;;; wl-util.el -- Utility modules for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <2000-03-22 15:56:12 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(provide 'wl-util)
+(eval-when-compile
+  (provide 'elmo-util))
+
+(condition-case ()
+    (require 'tm-edit)
+  (error))
+(condition-case ()
+    (require 'pp)
+  (error))
+(eval-when-compile
+  (mapcar
+   (function
+    (lambda (symbol)
+      (unless (boundp symbol)
+       (set (make-local-variable symbol) nil))))
+   '(mule-version 
+     nemacs-version 
+     emacs-beta-version
+     xemacs-codename
+     mime-edit-insert-user-agent-field
+     mime-edit-user-agent-value
+     mime-editor/version
+     mime-editor/codename))
+  (require 'time-stamp)
+  (defun-maybe read-event ())
+  (defun-maybe next-command-event ())
+  (defun-maybe event-to-character (a))
+  (defun-maybe key-press-event-p (a))
+  (defun-maybe button-press-event-p (a))
+  (defun-maybe set-process-kanji-code (a b))
+  (defun-maybe set-process-coding-system (a b c))
+  (defun-maybe dispatch-event (a)))
+
+(defalias 'wl-set-work-buf 'elmo-set-work-buf)
+(make-obsolete 'wl-set-work-buf 'elmo-set-work-buf)
+
+(defmacro wl-append (val func)
+  (list 'if val
+      (list 'nconc val func)
+    (list 'setq val func)))
+
+(defun wl-parse (string regexp &optional matchn)
+  (or matchn (setq matchn 1))
+  (let (list)
+    (store-match-data nil)
+    (while (string-match regexp string (match-end 0))
+      (setq list (cons (substring string (match-beginning matchn)
+                                  (match-end matchn)) list)))
+    (nreverse list)))
+
+(defun wl-delete-duplicates (list &optional all hack-addresses)
+  "Delete duplicate equivalent strings from the list.
+If ALL is t, then if there is more than one occurrence of a string in the list,
+ then all occurrences of it are removed instead of just the subsequent ones.
+If HACK-ADDRESSES is t, then the strings are considered to be mail addresses,
+ and only the address part is compared (so that \"Name <foo>\" and \"foo\"
+ would be considered to be equivalent.)"
+  (let ((hashtable (make-vector 29 0))
+       (new-list nil)
+       sym-string sym)
+    (fillarray hashtable 0)
+    (while list
+      (setq sym-string
+           (if hack-addresses
+               (wl-address-header-extract-address (car list))
+             (car list))
+           sym-string (or sym-string "-unparseable-garbage-")
+           sym (intern sym-string hashtable))
+      (if (boundp sym)
+         (and all (setcar (symbol-value sym) nil))
+       (setq new-list (cons (car list) new-list))
+       (set sym new-list))
+      (setq list (cdr list)))
+    (delq nil (nreverse new-list))))
+
+;; string utils.
+(defalias 'wl-string-member 'elmo-string-member)
+(defalias 'wl-string-match-member 'elmo-string-match-member)
+(defalias 'wl-string-delete-match 'elmo-string-delete-match)
+(defalias 'wl-string-match-assoc 'elmo-string-match-assoc)
+(defalias 'wl-string-assoc 'elmo-string-assoc)
+(defalias 'wl-string-rassoc 'elmo-string-rassoc)
+
+(defun wl-parse-addresses (string)
+  (if (null string)
+      ()
+    (elmo-set-work-buf
+     ;;(unwind-protect
+     (let (list start s char)
+       (insert string)
+       (goto-char (point-min))
+       (skip-chars-forward "\t\f\n\r ")
+       (setq start (point))
+       (while (not (eobp))
+        (skip-chars-forward "^\"\\,(")
+        (setq char (following-char))
+        (cond ((= char ?\\)
+               (forward-char 1)
+               (if (not (eobp))
+                   (forward-char 1)))
+              ((= char ?,)
+               (setq s (buffer-substring start (point)))
+               (if (or (null (string-match "^[\t\f\n\r ]+$" s))
+                       (not (string= s "")))
+                   (setq list (cons s list)))
+               (skip-chars-forward ",\t\f\n\r ")
+               (setq start (point)))
+              ((= char ?\")
+               (re-search-forward "[^\\]\"" nil 0))
+              ((= char ?\()
+               (let ((parens 1))
+                 (forward-char 1)
+                 (while (and (not (eobp)) (not (zerop parens)))
+                   (re-search-forward "[()]" nil 0)
+                   (cond ((or (eobp)
+                              (= (char-after (- (point) 2)) ?\\)))
+                         ((= (preceding-char) ?\()
+                          (setq parens (1+ parens)))
+                         (t
+                          (setq parens (1- parens)))))))))
+       (setq s (buffer-substring start (point)))
+       (if (and (null (string-match "^[\t\f\n\r ]+$" s))
+               (not (string= s "")))
+          (setq list (cons s list)))
+       (nreverse list)) ; jwz: fixed order
+     )))
+
+(defun wl-version (&optional with-codename)
+  (format "%s %s%s" wl-appname wl-version 
+         (if with-codename 
+             (format " - \"%s\"" wl-codename) "")))
+
+(defun wl-version-show ()
+  (interactive)
+  (message "%s" (wl-version t)))
+
+;; from gnus
+(defun wl-extended-emacs-version (&optional with-codename)
+  "Stringified Emacs version"
+  (interactive)
+  (cond
+   ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
+    (concat "Emacs " (wl-match-string 1 emacs-version)
+           (and (boundp 'mule-version)(concat "/Mule " mule-version))))
+   ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
+                 emacs-version)
+    (concat (wl-match-string 1 emacs-version)
+           (format " %d.%d" emacs-major-version emacs-minor-version)
+           (if (and (boundp 'emacs-beta-version)
+                    emacs-beta-version)
+               (format "b%d" emacs-beta-version))
+           (if with-codename
+               (if (boundp 'xemacs-codename)
+                   (concat " - \"" xemacs-codename "\"")))))
+   (t emacs-version)))
+
+(defun wl-extended-emacs-version2 (&optional delimiter with-codename)
+  "Stringified Emacs version"
+  (interactive)
+  (cond
+   ((and (boundp 'mule-version)
+        mule-version
+        (string-match "\\([0-9]+\.[0-9]+\\)\\(.*$\\)" mule-version))
+    (format "Mule%s%s@%d.%d%s" 
+           (or delimiter " ")
+           (wl-match-string 1 mule-version)
+           emacs-major-version
+           emacs-minor-version
+           (if with-codename
+               (wl-match-string 2 mule-version)
+             "")))
+   ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
+    (if (boundp 'nemacs-version)
+       (concat "Nemacs" (or delimiter " ") 
+               nemacs-version
+               "@"
+               (substring emacs-version
+                          (match-beginning 1)
+                          (match-end 1)))
+      (concat "Emacs" (or delimiter " ")
+             (wl-match-string 1 emacs-version))))
+   ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
+                 emacs-version)
+    (concat (wl-match-string 1 emacs-version)
+           (or delimiter " ")
+           (format "%d.%d" emacs-major-version emacs-minor-version)
+           (if (and (boundp 'emacs-beta-version)
+                    emacs-beta-version)
+               (format "b%d" emacs-beta-version))
+           (if (and with-codename
+                    (boundp 'xemacs-codename)
+                    xemacs-codename)
+               (format " (%s)" xemacs-codename))))
+   (t emacs-version)))
+
+(defun wl-extended-emacs-version3 (&optional delimiter with-codename)
+  "Stringified Emacs version"
+  (interactive)
+  (cond
+   ((and (boundp 'mule-version)
+        mule-version
+        (string-match "\\([0-9]+\.[0-9]+\\)\\(.*$\\)" mule-version))
+    (format "Emacs%s%d.%d Mule%s%s%s" 
+           (or delimiter " ")
+           emacs-major-version
+           emacs-minor-version
+           (or delimiter " ")
+           (wl-match-string 1 mule-version)
+           (if with-codename
+               (wl-match-string 2 mule-version)
+             "")))
+   ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
+    (if (boundp 'nemacs-version)
+       (let ((nemacs-codename-assoc '(("3.3.2" . " (FUJIMUSUME)")
+                                      ("3.3.1" . " (HINAMATSURI)")
+                                      ("3.2.3" . " (YUMENO-AWAYUKI)"))))
+         (format "Emacs%s%s Nemacs%s%s%s"
+                 (or delimiter " ")              
+                 (wl-match-string 1 emacs-version)
+                 (or delimiter " ")              
+                 nemacs-version
+                 (or (and with-codename
+                          (cdr (assoc nemacs-version
+                                      nemacs-codename-assoc)))
+                     "")))
+      (concat "Emacs" (or delimiter " ")
+             (wl-match-string 1 emacs-version))))
+   ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
+                 emacs-version)
+    (concat (wl-match-string 1 emacs-version)
+           (or delimiter " ")
+           (format "%d.%d" emacs-major-version emacs-minor-version)
+           (if (and (boundp 'emacs-beta-version)
+                    emacs-beta-version)
+               (format "b%d" emacs-beta-version))
+           (if (and with-codename
+                    (boundp 'xemacs-codename)
+                    xemacs-codename)
+               (format " (%s)" xemacs-codename))))
+   (t emacs-version)))
+
+(defun wl-append-element (list element)
+  (if element
+      (append list (list element))
+    list))
+
+(defun wl-read-event-char ()
+  "Get the next event."
+  (let ((event (read-event)))
+    ;; should be gnus-characterp, but this can't be called in XEmacs anyway
+    (cons (and (numberp event) event) event)))
+
+(defun wl-xmas-read-event-char ()
+  "Get the next event."
+  (let ((event (next-command-event)))
+    (sit-for 0)
+    ;; We junk all non-key events.  Is this naughty?
+    (while (not (or (key-press-event-p event)
+                   (button-press-event-p event)))
+      (dispatch-event event)
+      (setq event (next-command-event)))
+    (cons (and (key-press-event-p event)
+              (event-to-character event))
+         event)))
+
+(if running-xemacs
+    (fset 'wl-read-event-char 'wl-xmas-read-event-char))
+
+(defmacro wl-push (v l)
+  (list 'setq l (list 'cons v l)))
+
+(defmacro wl-pop (l)
+  (list 'car (list 'prog1 l (list 'setq l (list 'cdr l)))))
+
+(defun wl-ask-folder (func mes-string)
+  (let* (key keve
+            (cmd (if (featurep 'xemacs)
+                     (event-to-character last-command-event)
+                   (string-to-char (format "%s" (this-command-keys))))))
+    (message mes-string)
+    (setq key (car (setq keve (wl-read-event-char))))
+    (if (or (equal key ?\ )
+           (and cmd
+                (equal key cmd)))
+       (progn
+         (message "")
+         (funcall func))
+      (wl-push (cdr keve) unread-command-events))))
+
+;(defalias 'wl-make-hash 'elmo-make-hash)
+;(make-obsolete 'wl-make-hash 'elmo-make-hash)
+
+;(defalias 'wl-get-hash-val 'elmo-get-hash-val)
+;(make-obsolete 'wl-get-hash-val 'elmo-get-hash-val)
+
+;(defalias 'wl-set-hash-val 'elmo-set-hash-val)
+;(make-obsolete 'wl-set-hash-val 'elmo-set-hash-val)
+
+(defsubst wl-set-string-width (width string)
+  (elmo-set-work-buf
+   (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+   (insert string)
+   (if (> (current-column) width)
+       (if (> (move-to-column width) width)
+          (progn
+            (condition-case nil ; ignore error 
+                (backward-char 1)
+              (error))
+            (concat (buffer-substring (point-min) (point)) " "))
+        (buffer-substring (point-min) (point)))
+     (if (= (current-column) width)
+        string
+       (concat string
+              (format (format "%%%ds" 
+                              (- width (current-column)))
+                      " "))))))
+
+(defun wl-display-bytes (num)
+  (let (result remain)
+    (cond
+     ((> (setq result (/ num 1000000)) 0)
+      (setq remain (% num 1000000))
+      (if (> remain 400000)
+         (setq result (+ 1 result)))
+      (format "%dM" result))
+     ((> (setq result (/ num 1000)) 0)
+      (setq remain (% num 1000))
+      (if (> remain 400)
+         (setq result (+ 1 result)))
+      (format "%dK" result))
+     (t (format "%dB" result)))))
+
+(defun wl-generate-user-agent-string ()
+  "A candidate of wl-generate-mailer-string-func. 
+Insert User-Agent field instead of X-Mailer field."
+  (let ((mime-user-agent (and (boundp 'mime-edit-insert-user-agent-field)
+                             mime-edit-insert-user-agent-field
+                             mime-edit-user-agent-value)))
+    (if mime-user-agent
+       (concat "User-Agent: "
+               wl-appname "/" wl-version
+               " (" wl-codename ") "
+               mime-user-agent)
+      (if (and (boundp 'mime-editor/version)
+              mime-editor/version)
+         (concat "User-Agent: "
+                 wl-appname "/" wl-version
+                 " (" wl-codename ") "
+                 "tm/" mime-editor/version
+                 (if (and (boundp 'mime-editor/codename)
+                          mime-editor/codename)
+                     (concat " (" mime-editor/codename ")"))
+                 (if (and (boundp 'mime-library-product)
+                          mime-library-product)
+                     (concat " " (aref mime-library-product 0)
+                             "/"
+                             (mapconcat 'int-to-string
+                                        (aref mime-library-product 1)
+                                        ".")
+                             " (" (aref mime-library-product 2) ")"))
+                 (condition-case nil
+                     (progn
+                       (require 'apel-ver)
+                       (concat " " (apel-version)))
+                   (file-error nil))
+                 " " (wl-extended-emacs-version3 "/" t))
+       (concat "User-Agent: " wl-appname "/" wl-version " (" wl-codename ") "
+               (wl-extended-emacs-version3 "/" t))))))
+
+(defun wl-make-modeline-subr ()
+  (let* ((duplicated (copy-sequence mode-line-format))
+        (cur-entry duplicated)
+        return-modeline)
+    (if (memq 'wl-plug-state-indicator mode-line-format)
+       duplicated
+      (catch 'done
+       (while cur-entry
+         (if (or (and (symbolp (car cur-entry))
+                      (eq 'mode-line-buffer-identification 
+                             (car cur-entry)))
+                 (and (consp (car cur-entry))
+                      (or 
+                       (eq 'modeline-buffer-identification 
+                              (car (car cur-entry)))
+                       (eq 'modeline-buffer-identification 
+                              (cdr (car cur-entry))))))
+             (progn
+               (setq return-modeline (append return-modeline
+                                             (list 'wl-plug-state-indicator)
+                                             cur-entry))
+               (throw 'done return-modeline))
+           (setq return-modeline (append return-modeline
+                                         (list (car cur-entry)))))
+         (setq cur-entry (cdr cur-entry)))))))
+
+(defalias 'wl-display-error 'elmo-display-error)
+(make-obsolete 'wl-display-error 'elmo-display-error)
+
+(defun wl-get-assoc-list-value (assoc-list folder &optional match)
+  (catch 'found
+    (let ((alist assoc-list)
+         value pair)
+      (while alist
+       (setq pair (car alist))
+       (if (string-match (car pair) folder)
+           (cond ((eq match 'all)
+                  (setq value (append value (list (cdr pair)))))
+                 ((eq match 'all-list)
+                  (setq value (append value (cdr pair))))
+                 ((not match)
+                  (throw 'found (cdr pair)))))
+       (setq alist (cdr alist)))
+      value)))
+
+(defmacro wl-match-string (pos string)
+  "Substring POSth matched string."
+  (` (substring (, string) (match-beginning (, pos)) (match-end (, pos)))))
+
+(defmacro wl-match-buffer (pos)
+  "Substring POSth matched from the current buffer."
+  (` (buffer-substring-no-properties
+      (match-beginning (, pos)) (match-end (, pos)))))
+
+(put 'wl-as-coding-system 'lisp-indent-function 1)
+(put 'wl-as-mime-charset 'lisp-indent-function 1)
+
+(eval-and-compile
+  (if wl-on-mule3
+      (defmacro wl-as-coding-system (coding-system &rest body)
+       (` (let ((coding-system-for-read (, coding-system))
+                (coding-system-for-write (, coding-system)))
+            (,@ body))))
+    (if wl-on-mule
+       (defmacro wl-as-coding-system (coding-system &rest body)
+         (` (let ((file-coding-system-for-read (, coding-system))
+                  (file-coding-system (, coding-system)))
+              (,@ body))))
+      (if wl-on-nemacs
+         (defmacro wl-as-coding-system (coding-system &rest body)
+           (` (let ((default-kanji-fileio-code (, coding-system))
+                    (kanji-fileio-code (, coding-system))
+                    kanji-expected-code)
+                (,@ body))))))))
+
+(defmacro wl-as-mime-charset (mime-charset &rest body)
+  (` (wl-as-coding-system (mime-charset-to-coding-system (, mime-charset))
+       (,@ body))))
+
+(defalias 'wl-string 'elmo-string)
+(make-obsolete 'wl-string 'elmo-string)
+
+(defun wl-parse-newsgroups (string &optional subscribe-only)
+  (let* ((nglist (wl-parse string "[ \t\f\r\n,]*\\([^ \t\f\r\n,]+\\)"))
+        spec ret-val)
+    (if (not subscribe-only)
+       nglist
+      (while nglist
+       (if (intern-soft (car nglist) wl-folder-newsgroups-hashtb)
+           (wl-append ret-val (list (car nglist))))
+       (setq nglist (cdr nglist)))
+      ret-val)))
+
+;; Check if active region exists or not.
+(if (boundp 'mark-active)
+    (defmacro wl-region-exists-p ()
+      'mark-active)
+  (if (fboundp 'region-exists-p)
+      (defmacro wl-region-exists-p ()
+       (list 'region-exists-p))))
+  
+(if (not (fboundp 'overlays-in))
+    (defun overlays-in (beg end)
+      "Return a list of the overlays that overlap the region BEG ... END.
+Overlap means that at least one character is contained within the overlay
+and also contained within the specified region.
+Empty overlays are included in the result if they are located at BEG
+or between BEG and END."
+      (let ((ovls (overlay-lists))
+           tmp retval)
+       (if (< end beg)
+           (setq tmp end
+                 end beg
+                 beg tmp))
+       (setq ovls (nconc (car ovls) (cdr ovls)))
+       (while ovls
+         (setq tmp (car ovls)
+               ovls (cdr ovls))
+         (if (or (and (<= (overlay-start tmp) end)
+                      (>= (overlay-start tmp) beg))
+                 (and (<= (overlay-end tmp) end)
+                      (>= (overlay-end tmp) beg)))
+             (setq retval (cons tmp retval))))
+       retval)))
+
+(defsubst wl-repeat-string (str times)
+  (let ((loop times)
+       ret-val)
+    (while (> loop 0)
+      (setq ret-val (concat ret-val str))
+      (setq loop (- loop 1)))
+    ret-val))
+
+(defun wl-list-diff (list1 list2)
+  "Return a list of elements of LIST1 that do not appear in LIST2."
+  (let ((list1 (copy-sequence list1)))
+    (while list2
+      (setq list1 (delq (car list2) list1))
+      (setq list2 (cdr list2)))
+    list1))
+
+(defun wl-append-assoc-list (item value alist)
+  "make assoc list '((item1 value1-1 value1-2 ...)) (item2 value2-1 ...)))"
+  (let ((entry (assoc item alist)))
+    (if entry
+       (progn
+         (when (not (member value (cdr entry)))
+           (nconc entry (list value)))
+         alist)
+      (append alist
+             (list (list item value))))))
+
+(defun wl-delete-alist (key alist)
+  "Delete all entries in ALIST that have a key eq to KEY."
+  (let (entry)
+    (while (setq entry (assq key alist))
+      (setq alist (delq entry alist)))
+    alist))
+
+(eval-when-compile 
+  (require 'static))
+(static-unless (fboundp 'pp)
+  (defvar pp-escape-newlines t)
+  (defun pp (object &optional stream)
+    "Output the pretty-printed representation of OBJECT, any Lisp object.
+Quoting characters are printed when needed to make output that `read'
+can handle, whenever this is possible.
+Output stream is STREAM, or value of `standard-output' (which see)."
+    (princ (pp-to-string object) (or stream standard-output)))
+
+  (defun pp-to-string (object)
+    "Return a string containing the pretty-printed representation of OBJECT,
+any Lisp object.  Quoting characters are used when needed to make output
+that `read' can handle, whenever this is possible."
+    (save-excursion
+      (set-buffer (generate-new-buffer " pp-to-string"))
+      (unwind-protect
+         (progn
+           (lisp-mode-variables t)
+           (let ((print-escape-newlines pp-escape-newlines))
+             (prin1 object (current-buffer)))
+           (goto-char (point-min))
+           (while (not (eobp))
+             (cond
+              ((looking-at "\\s(\\|#\\s(")
+               (while (looking-at "\\s(\\|#\\s(")
+                 (forward-char 1)))
+              ((and (looking-at "\\(quote[ \t]+\\)\\([^.)]\\)")
+                    (> (match-beginning 1) 1)
+                    (= ?\( (char-after (1- (match-beginning 1))))
+                    ;; Make sure this is a two-element list.
+                    (save-excursion
+                      (goto-char (match-beginning 2))
+                      (forward-sexp)
+                      ;; Avoid mucking with match-data; does this test work?
+                      (char-equal ?\) (char-after (point)))))
+               ;; -1 gets the paren preceding the quote as well.
+               (delete-region (1- (match-beginning 1)) (match-end 1))
+               (insert "'")
+               (forward-sexp 1)
+               (if (looking-at "[ \t]*\)")
+                   (delete-region (match-beginning 0) (match-end 0))
+                 (error "Malformed quote"))
+               (backward-sexp 1))            
+              ((condition-case err-var
+                   (prog1 t (down-list 1))
+                 (error nil))
+               (backward-char 1)
+               (skip-chars-backward " \t")
+               (delete-region
+                (point)
+                (progn (skip-chars-forward " \t") (point)))
+               (if (not (char-equal ?' (char-after (1- (point)))))
+                   (insert ?\n)))
+              ((condition-case err-var
+                   (prog1 t (up-list 1))
+                 (error nil))
+               (while (looking-at "\\s)")
+                 (forward-char 1))
+               (skip-chars-backward " \t")
+               (delete-region
+                (point)
+                (progn (skip-chars-forward " \t") (point)))
+               (if (not (char-equal ?' (char-after (1- (point)))))
+                   (insert ?\n)))
+              (t (goto-char (point-max)))))
+           (goto-char (point-min))
+           (indent-sexp)
+           (buffer-string))
+       (kill-buffer (current-buffer))))))
+
+(defsubst wl-get-date-iso8601 (date)
+  (or (get-text-property 0 'wl-date date)
+      (let* ((d1 (timezone-fix-time date nil nil))
+            (time (format "%04d%02d%02dT%02d%02d%02d"
+                          (aref d1 0) (aref d1 1) (aref d1 2)
+                          (aref d1 3) (aref d1 4) (aref d1 5))))
+       (put-text-property 0 1 'wl-date time date)
+       time)))
+
+(defun wl-make-date-string ()
+  (let ((s (current-time-string)))
+    (string-match "\\`\\([A-Z][a-z][a-z]\\) +[A-Z][a-z][a-z] +[0-9][0-9]? *[0-9][0-9]?:[0-9][0-9]:[0-9][0-9] *[0-9]?[0-9]?[0-9][0-9]"
+                 s)
+    (concat (wl-match-string 1 s) ", "
+           (timezone-make-date-arpa-standard s (current-time-zone)))))
+(defun wl-date-iso8601 (date)
+  "Convert the DATE to YYMMDDTHHMMSS."
+  (condition-case ()
+      (wl-get-date-iso8601 date)
+    (error "")))
+(defun wl-day-number (date)
+  (let ((dat (mapcar '(lambda (s) (and s (string-to-int s)) )
+                    (timezone-parse-date date))))
+    (timezone-absolute-from-gregorian
+     (nth 1 dat) (nth 2 dat) (car dat))))
+
+(defun wl-url-news (url &rest args)
+  (interactive "sURL: ")
+  (if (string-match "^news:\\(.*\\)$" url)
+      (wl-summary-goto-folder-subr
+       (concat "-" (elmo-match-string 1 url)) nil nil nil t)
+    (message "Not a news: url.")))
+
+(defun wl-url-nntp (url &rest args)
+  (interactive "sURL: ")
+  (let (folder fld-name server port msg)
+    (if (string-match
+        "^nntp://\\([^:/]*\\):?\\([0-9]*\\)/\\([^/]*\\)/\\([0-9]*\\).*$" url)
+       (progn
+         (if (eq (length (setq fld-name
+                                (elmo-match-string 3 url))) 0)
+              (setq fld-name nil))
+         (if (eq (length (setq port
+                               (elmo-match-string 2 url))) 0)
+              (setq port (int-to-string elmo-default-nntp-port)))
+         (if (eq (length (setq server
+                                (elmo-match-string 1 url))) 0)
+              (setq server elmo-default-nntp-server))
+         (setq folder (concat "-" fld-name "@" server ":" port))
+         (if (eq (length (setq msg
+                               (elmo-match-string 4 url))) 0)
+             (wl-summary-goto-folder-subr
+              folder nil nil nil t)
+           (wl-summary-goto-folder-subr
+            folder 'update nil nil t)
+           (goto-char (point-min))
+           (re-search-forward (concat "^ *" msg) nil t)
+           (wl-summary-redisplay)))
+      (message "Not a nntp: url."))))
+
+(defmacro wl-concat-list (list separator)
+  (` (mapconcat 'identity (delete "" (delq nil (, list))) (, separator))))
+
+(defmacro wl-current-message-buffer ()
+  (` (save-excursion
+       (if (buffer-live-p wl-current-summary-buffer)
+           (set-buffer wl-current-summary-buffer))
+       wl-message-buf-name)))
+
+(defmacro wl-kill-buffers (regexp)
+  (` (mapcar (function
+             (lambda (x)
+               (if (and (buffer-name x)
+                        (string-match (, regexp) (buffer-name x)))
+                   (and (get-buffer x)
+                        (kill-buffer x)))))
+            (buffer-list))))
+(defun wl-sendlog-time ()
+  (static-if (fboundp 'format-time-string)
+      (format-time-string "%Y/%m/%d %T")
+    (let ((date (current-time-string)))
+      (format "%s/%02d/%02d %s"
+             (substring date -4)
+             (cdr (assoc (upcase (substring date 4 7)) 
+                         timezone-months-assoc))
+             (string-to-int (substring date 8 10))
+             (substring date 11 19)))))
+
+(defun wl-collect-summary ()
+  (let (result)
+    (mapcar
+     (function (lambda (x)
+                (if (and (string-match "^Summary"
+                                       (buffer-name x))
+                         (save-excursion
+                           (set-buffer x)
+                           (equal major-mode 'wl-summary-mode)))
+                    (setq result (nconc result (list x))))))
+     (buffer-list))
+    result))
+
+(static-if (fboundp 'read-directory-name)
+    (defalias 'wl-read-directory-name 'read-directory-name)
+  (defun wl-read-directory-name (prompt dir)
+    (let ((dir (read-file-name prompt dir)))
+      (unless (file-directory-p dir)
+       (error "%s is not directory" dir))
+      dir)))
+
+;; local variable check.
+(static-if (fboundp 'local-variable-p)
+    (defalias 'wl-local-variable-p 'local-variable-p)
+  (defmacro wl-local-variable-p (symbol &optional buffer)
+    (` (if (assq (, symbol) (buffer-local-variables (, buffer)))
+          t))))
+
+(defun wl-number-base36 (num len)
+  (if (if (< len 0)
+         (<= num 0)
+       (= len 0))
+      ""
+    (concat (wl-number-base36 (/ num 36) (1- len))
+           (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+                                 (% num 36))))))
+
+(defvar wl-unique-id-char nil)
+
+(defun wl-unique-id ()
+  ;; Don't use microseconds from (current-time), they may be unsupported.
+  ;; Instead we use this randomly inited counter.
+  (setq wl-unique-id-char
+       (% (1+ (or wl-unique-id-char (logand (random t) (1- (lsh 1 20)))))
+          ;; (current-time) returns 16-bit ints,
+          ;; and 2^16*25 just fits into 4 digits i base 36.
+          (* 25 25)))
+  (let ((tm (static-if (fboundp 'current-time)
+               (current-time)
+             (let* ((cts (split-string (current-time-string) "[ :]"))
+                    (m (cdr (assoc (nth 1 cts)
+                                   '(("Jan" . "01") ("Feb" . "02")
+                                     ("Mar" . "03") ("Apr" . "04")
+                                     ("May" . "05") ("Jun" . "06")
+                                     ("Jul" . "07") ("Aug" . "08")
+                                     ("Sep" . "09") ("Oct" . "10")
+                                     ("Nov" . "11") ("Dec" . "12"))))))
+               (list (string-to-int (concat (nth 6 cts) m
+                                            (substring (nth 2 cts) 0 1)))
+                     (string-to-int (concat (substring (nth 2 cts) 1)
+                                            (nth 4 cts) (nth 5 cts)
+                                            (nth 6 cts))))))))
+    (concat
+     (if (memq system-type '(ms-dos emx vax-vms))
+        (let ((user (downcase (user-login-name))))
+          (while (string-match "[^a-z0-9_]" user)
+            (aset user (match-beginning 0) ?_))
+          user)
+       (wl-number-base36 (user-uid) -1))
+     (wl-number-base36 (+ (car   tm)
+                         (lsh (% wl-unique-id-char 25) 16)) 4)
+     (wl-number-base36 (+ (nth 1 tm)
+                         (lsh (/ wl-unique-id-char 25) 16)) 4)
+     ;; Append the name of the message interface, because while the
+     ;; generated ID is unique to this newsreader, other newsreaders
+     ;; might otherwise generate the same ID via another algorithm.
+     ".wl")))
+
+(defun wl-draft-make-message-id-string ()
+  (concat "<" (wl-unique-id) "@"
+         (or wl-message-id-domain
+             (if wl-local-domain
+                 (concat (system-name) "." wl-local-domain)
+               (system-name)))
+         ">"))
+
+;;; Profile loading.
+(defvar wl-load-profile-func 'wl-local-load-profile)
+(defun wl-local-load-profile ()
+  (message "Initializing ...")
+  (load wl-init-file 'noerror 'nomessage))
+  
+(defun wl-load-profile ()
+  (funcall wl-load-profile-func))
+
+;;; wl-util.el ends here
diff --git a/wl/wl-vars.el b/wl/wl-vars.el
new file mode 100644 (file)
index 0000000..3146152
--- /dev/null
@@ -0,0 +1,1949 @@
+;;; wl-vars.el -- Variable definitions for Wanderlust.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/25 00:19:06 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo-vars)
+
+(if (module-installed-p 'custom)
+    (require 'custom))
+
+(defconst wl-appname  "Wanderlust")
+(defconst wl-version  elmo-version) ; equals to ELMO version.
+(defconst wl-codename "Purple Rain")
+
+;;; Customizable Variables
+
+(defgroup wl nil
+  "Wanderlust, a news and mail reading software."
+  :tag "Wanderlust"
+  :link '(custom-manual "(wl-ja)Top")
+  :group 'news
+  :group 'mail)
+
+(defgroup wl-pref nil
+  "Wanderlust, Preferences."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-folder nil
+  "Wanderlust, folder buffer."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-summary nil
+  "Wanderlust, summary buffer."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-summary-marks nil
+  "Wanderlust, marks used in summary buffers."
+  :prefix "wl-summary-"
+  :group 'wl-summary)
+
+(defgroup wl-expire nil
+  "Wanderlust, Expiring and archiving."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-score nil
+  "Wanderlust, Score file handling."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-highlight nil
+  "Wanderlust, Highlights."
+  :prefix "wl-"
+  :group 'wl)
+
+(defgroup wl-draft nil
+  "Wanderlust, draft mode."
+  :prefix "wl-"
+  :group 'wl)
+
+;;; Emacsen
+(defconst wl-on-emacs20 (> emacs-major-version 19))
+
+(defconst wl-on-xemacs (featurep 'xemacs))
+
+(defconst wl-on-nemacs (fboundp 'nemacs-version))
+
+(defconst wl-on-mule (featurep 'mule))
+
+(defconst wl-on-mule3
+  (and wl-on-mule (or wl-on-xemacs wl-on-emacs20)))
+
+(require 'elmo-vars)
+
+(eval-when-compile
+  (defun-maybe locate-data-directory (a)))
+
+(defvar wl-cs-noconv
+  (cond (wl-on-mule3 'binary)
+        (wl-on-mule  '*noconv*)
+       (wl-on-nemacs 0)
+        (t           nil)))
+
+(defvar wl-cs-autoconv
+  (cond (wl-on-mule3 'undecided)
+        (wl-on-mule  '*autoconv*)
+       (wl-on-nemacs 2) ; junet...
+        (t           nil)))
+
+(defvar wl-cs-local
+  (cond (wl-on-mule3  'junet)
+        (wl-on-mule   '*junet*)
+        (wl-on-nemacs 2)
+        (t           nil)))
+
+(defvar wl-cs-cache wl-cs-local)
+
+(defvar wl-use-semi (module-installed-p 'mime-view) ; If nil, use tm.
+  "*Use SEMI or not")
+
+(defcustom wl-from (if (boundp 'user-mail-address)
+                      user-mail-address)
+  "*From string used in draft."
+  :type 'string
+  :group 'wl)
+
+(defcustom wl-user-mail-address-list nil
+  "*A list of user's mail addresses. 
+This list is used to judge whether an address is user's or not.
+You should set this variable if you use multiple e-mail addresses.
+If you don't have multiple e-mail addresses, you don't have to set this."
+  :type '(repeat string)
+  :group 'wl)
+
+(defcustom wl-organization nil
+  "Organization name."
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+
+(defcustom wl-tmp-dir "~/tmp/"
+  "*Default temporary directory to save message, part."
+  :type 'directory
+  :group 'wl)
+
+(defcustom wl-icon-dir (if (fboundp 'locate-data-directory)
+                          (locate-data-directory "wl"))
+  "*Icon directory (XEmacs)."
+  :type '(choice (const :tag "none" nil)
+                string)
+  :group 'wl)
+
+(defcustom wl-summary-from-func 'wl-summary-default-from
+  "*A function for displaying sender (From: field) information."
+  :type 'function
+  :group 'wl-summary)
+
+(defcustom wl-summary-subject-func 'wl-summary-default-subject
+  "*A function for displaying subject."
+  :type 'function
+  :group 'wl-summary)
+
+(defcustom wl-summary-subject-filter-func 'wl-summary-default-subject-filter
+  "*A filter function for comparing subjects."
+  :type 'function
+  :group 'wl-summary)
+
+(defcustom wl-summary-update-confirm-threshold 500
+  "*Confirm updating summary if message number is larger than this value."
+  :type 'integer
+  :group 'wl-summary)
+
+;; Important folders
+(defcustom wl-default-folder "%inbox"
+  "*Default folder used in wl-summary-goto-folder."
+  :type 'string
+  :group 'wl)
+(defcustom wl-draft-folder "+draft"
+  "*Draft folder"
+  :type 'string
+  :group 'wl)
+(defcustom wl-trash-folder "+trash"
+  "*Trash folder"
+  :type 'string
+  :group 'wl)
+(defcustom wl-queue-folder "+queue"
+  "*Queue folder"
+  :type 'string
+  :group 'wl)
+
+(defcustom wl-default-spec "%"
+  "*Default spec"
+  :type 'string
+  :group 'wl)
+
+(defcustom wl-insert-mail-followup-to nil
+  "*Insert Mail-Followup-To: field if non-nil."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-insert-mail-reply-to nil
+  "*Insert Mail-Reply-To: field if non-nil."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-insert-message-id t
+  "*Insert Message-ID: field if non-nil."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-auto-insert-x-face t
+  "*Insert X-Face: field automatically"
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-x-face-file "~/.xface"
+  "*If file exists and `wl-auto-insert-x-face' is non-nil, 
+X-Face field is inserted using its contents."
+  :type 'file
+  :group 'wl-draft)
+
+(defcustom wl-subscribed-mailing-list nil
+  "*Subscribed mailing list. You had better set this variable 
+if you set wl-insert-mail-followup-to as t."
+  :type '(repeat string)
+  :group 'wl-pref)
+
+(defcustom wl-demo t
+  "*Display demo at start time."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-envelope-from nil
+  "*Envelope From used in SMTP.
+If nil, wl-from is used."
+  :type '(choice (const :tag "Same as 'From' field." nil)
+                string)
+  :group 'wl)
+
+(defcustom wl-smtp-connection-type nil
+  "*SMTP connection type.
+If nil, default smtp connection type is used."
+  :type '(choice (const :tag "default" nil)
+                (const :tag "Use STARTTLS" starttls)
+                symbol)
+  :group 'wl)
+
+(defcustom wl-smtp-posting-user nil
+  "*SMTP authentication user. "
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+
+(defcustom wl-smtp-posting-server nil
+  "*SMTP server name to send mail (wl-draft-send-mail-with-smtp)."
+  :type 'string
+  :group 'wl)
+
+(defcustom wl-smtp-posting-port nil
+  "*SMTP port number in `wl-smtp-posting-server'.
+If nil, default SMTP port number(25) is used."
+  :type '(choice (const :tag "Default (25)" nil)
+                 integer)
+  :group 'wl)
+
+(defcustom wl-smtp-authenticate-type nil
+  "*SMTP Authentication type. 
+If nil, don't authenticate."
+  :type '(choice (const :tag "none" nil)
+                (const :tag "PLAIN" "plain")
+                (const :tag "CRAM-MD5" "cram-md5")
+                (const :tag "LOGIN" "login")
+                (string :tag "Other"))
+  :group 'wl)
+
+(defcustom wl-pop-before-smtp-user nil
+  "*POP3 user name to send mail using POP-before-SMTP.
+If nil, elmo-default-pop3-user is used.
+To use POP-before-SMTP,
+(setq wl-draft-send-mail-func 'wl-draft-send-mail-with-pop-before-smtp)"
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+
+(defcustom wl-pop-before-smtp-server nil
+  "*POP3 server for POP-before-SMTP.
+If nil, elmo-default-pop3-server is used."
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+
+(defcustom wl-pop-before-smtp-port nil
+  "*POP3 port for POP-before-SMTP.
+If nil, elmo-default-pop3-port is used."
+  :type '(choice (const :tag "none" nil)
+                integer string)
+  :group 'wl)
+
+(defcustom wl-pop-before-smtp-ssl nil
+  "*Non-nil forces using SSL by default for POP-before-SMTP.
+If nil, elmo-default-pop3-ssl is used."
+  :type 'boolean
+  :group 'wl)
+
+(defcustom wl-pop-before-smtp-authenticate-type nil
+  "*Default Authentication type for POP-before-SMTP
+If nil, elmo-default-pop3-authenticate-type is used."
+  :type '(choice (const :tag "none" nil)
+                (const :tag "APOP" "apop")
+                (const :tag "POP3" "user"))
+  :group 'wl)
+
+(defcustom wl-nntp-posting-server nil
+  "*NNTP server name to post news.
+If nil, elmo-default-nntp-server is used."
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+(defcustom wl-nntp-posting-user nil
+  "*NNTP user name to post news for authinfo.
+If nil, elmo-default-nntp-user is used.
+If nil, don't authenticate."
+  :type '(choice (const :tag "none" nil)
+                 string)
+  :group 'wl)
+(defcustom wl-nntp-posting-port nil
+  "*NNTP port to post news.
+If nil, elmo-default-nntp-port is used."
+  :type '(choice (const :tag "none" nil)
+                integer string)
+  :group 'wl)
+(defcustom wl-nntp-posting-ssl nil
+  "*Non-nil forces using SSL to post news.
+If nil, elmo-default-nntp-ssl is used."
+  :type 'boolean
+  :group 'wl)
+
+(defcustom wl-fetch-confirm-threshold 30000
+  "*Confirm fetching if message size is larger than this value."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-prefetch-confirm t
+  "*Confirm prefetching if message size is larger than `wl-prefetch-threshold'."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-prefetch-threshold 30000
+  "*Maximum size of message prefetched without confirmation.
+If nil, all messages prefetched regardless of its size.
+If message size is larger than this value, confirm prefetching
+when `wl-prefetch-confirm' is non-nil."
+  :type '(choice (integer :tag "Threshold (bytes)")
+                (const :tag "No limitation" nil))
+  :group 'wl-pref)
+
+(defcustom wl-cache-prefetch-threshold 30000
+  "*Quit forward cache prefetching if message size is larger than this value."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-thread-insert-opened nil
+  "*Non-nil forces to insert thread as opened in updating."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-thread-open-reading-thread t
+  "*Non-nil forces to open reading thread."
+  :type 'boolean
+  :group 'wl-summary)
+
+;;;; Hooks
+(defvar wl-folder-mode-hook nil
+  "A hook called when wanderlust folder mode is started.")
+(defvar wl-summary-toggle-disp-on-hook nil
+  "A hook called when message is toggled.")
+(defvar wl-summary-toggle-disp-off-hook nil
+  "A hook called when message is disappeared.")
+(defvar wl-summary-toggle-disp-folder-on-hook nil
+  "A hook called when folder is toggled.")
+(defvar wl-summary-toggle-disp-folder-off-hook nil
+  "A hook called when folder is disappeared.")
+(defvar wl-summary-toggle-disp-folder-message-resumed-hook nil
+  "A hook called when message window is resumed when folder is toggled.")
+(defvar wl-summary-mode-hook nil
+  "A hook called when summary mode is started.")
+(defvar wl-summary-prepared-pre-hook nil
+  "A hook called before the summary buffer has been generated.")
+(defvar wl-summary-prepared-hook nil
+  "A hook called after the summary buffer has been generated.")
+(defvar wl-summary-sync-updated-hook nil
+  "A hook called when update summary buffer.")
+(defvar wl-summary-unread-message-hook nil
+  "A hook called when unread message is displayed.")
+(defvar wl-summary-edit-addresses-hook nil
+  "A hook called when address book is edited.")
+(defvar wl-summary-divide-thread-when-subject-changed nil
+  "Divide thread when subject is changed.")
+(defvar wl-init-hook nil
+  "A hook called when initialization is finished.")
+(defvar wl-hook nil
+  "A hook called when Wanderlust is invoked.")
+(defvar wl-reply-hook nil
+  "A hook called when replied.")
+(defvar wl-mail-setup-hook nil
+  "A hook called when Draft is prepared.")
+(defvar wl-draft-reedit-hook nil
+  "A hook called when Draft is re-edited.")
+(defvar wl-draft-send-hook nil
+  "A hook called on the draft editing buffer before sending process starts.")
+(defvar wl-mail-send-pre-hook nil
+  "A hook called just before the mail sending process starts.")
+(defvar wl-news-send-pre-hook nil
+  "A hook called just before the news sending process starts.")
+(defvar wl-message-buffer-created-hook nil
+  "A hook called when Message buffer is prepared.")
+(defvar wl-message-redisplay-hook nil
+  "A hook called when Message is displayed.")
+(defvar wl-message-exit-hook nil
+  "A hook called when quit message.")
+(defvar wl-summary-exit-hook nil
+  "A hook called when exit summary mode.")
+(defvar wl-highlight-headers-hook nil
+  "A hook called when header is highlighted.")
+(defvar wl-highlight-message-hook nil
+  "A hook called when message is highlighted.")
+(defvar wl-exit-hook nil
+  "A hook called when exit wanderlust.")
+(defvar wl-folder-suspend-hook nil
+  "A hook called when suspend wanderlust.")
+(defvar wl-auto-check-folder-pre-hook nil
+  "A hook called before auto check folders.")
+(defvar wl-auto-check-folder-hook nil
+  "A hook called when auto check folders.")
+(defvar wl-folder-check-entity-pre-hook nil
+  "A hook called before check entity.")
+(defvar wl-folder-check-entity-hook nil
+  "A hook called when check entity.")
+(defvar wl-draft-config-exec-hook nil
+  "A hook called when execute header-config on draft.")
+(defvar wl-summary-expire-pre-hook nil
+  "A hook called before expire.")
+(defvar wl-summary-expire-hook nil
+  "A hook called when expired.")
+(defvar wl-summary-archive-pre-hook nil
+  "A hook called before archive.")
+(defvar wl-summary-archive-hook nil
+  "A hook called when archived.")
+(defvar wl-summary-line-inserted-hook nil
+  "A hook called when summary line is inserted.")
+(defvar wl-thread-update-children-number-hook nil
+  "A hook called when children number is updated.")
+(defvar wl-folder-update-access-group-hook nil
+  "A hook called when update access group folder.")
+(defvar wl-draft-cited-hook nil
+  "A hook called after a message is cited.")
+(defvar wl-draft-insert-x-face-field-hook nil
+  "A hook called after a x-face field is inserted.")
+(defvar wl-template-mode-hook nil
+  "A hook called when template mode is started.")
+(defvar wl-score-mode-hook nil
+  "A hook called when score mode is started.")
+(defvar wl-make-plugged-hook nil
+  "A hook called when make plugged alist.")
+(defvar wl-plugged-exit-hook nil
+  "A hook called when exit plugged mode.")
+
+;;;; functions for draft
+(defcustom wl-draft-send-func 'wl-draft-normal-send-func
+  "A function to send message."
+  :type 'function
+  :group 'wl-draft)
+
+(defcustom wl-draft-send-news-func 'wl-draft-elmo-nntp-send
+  "A function to send news."
+  :type 'function
+  :group 'wl-draft)
+
+(defcustom wl-draft-send-mail-func 'wl-draft-send-mail-with-smtp
+  "A function to send mail.
+Prepared candidates are 'wl-draft-send-mail-with-smtp,
+'wl-draft-send-mail-with-qmail and 'wl-draft-send-mail-with-pop-before-smtp."
+  :type '(radio (function-item wl-draft-send-mail-with-smtp)
+               (function-item wl-draft-send-mail-with-qmail)
+               (function-item wl-draft-send-mail-with-pop-before-smtp)
+               (function :tag "Other"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-reply-with-argument-list
+  '(("Reply-To" . (("Reply-To") nil nil))
+    ("Mail-Reply-To" . (("Mail-Reply-To") nil nil))
+    ("From" . (("From") nil nil)))
+  "Alist of cons cell of 
+('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
+If car of each cons cell exists in original message,
+cdr of each cons cell is used for draft message.
+Default is for 'reply-to-author'."
+  :type '(repeat (cons (choice (string :tag "Field Name")
+                              (repeat (string :tag "Field Name")))
+                      (list (repeat :tag "Fields For To" string)
+                            (repeat :tag "Fields For Cc" string)
+                            (repeat :tag "Fields For Newsgroups" string))))
+  :group 'wl-draft)
+  
+(defcustom wl-draft-reply-without-argument-list
+  '(("Followup-To" . (nil nil ("Followup-To")))
+    ("Mail-Followup-To" . (("Mail-Followup-To") nil ("Newsgroups")))
+    ("From" . (("From") ("To" "Cc") ("Newsgroups"))))
+  "Alist of cons cell of 
+('field-name' .  ('fields for To' 'fields for Cc' 'fields for Newsgroups'))
+'field-name' is a string.
+'fields for ***' is a list of strings.
+If car of each cons cell exists in original message,
+cdr of each cons cell is used for draft message.
+Default is for 'reply-to-all'."
+  :type '(repeat (cons (choice (string :tag "Field Name")
+                              (repeat (string :tag "Field Name")))
+                      (list (repeat :tag "Fields For To" string)
+                            (repeat :tag "Fields For Cc" string)
+                            (repeat :tag "Fields For Newsgroups" string))))
+  :group 'wl-draft)
+
+(defcustom wl-draft-always-delete-myself nil
+  "*Always delete myself from reciepient if non-nil."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-resume-folder-window t
+  "*Resume folder window in wl-draft-hide"
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-use-frame nil
+  "*Raise new frame when composing draft."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-qmail-send-plugged nil
+  "*Send mail when plugged is on, in the `wl-draft-send-mail-with-qmail'."
+  :type 'boolean
+  :group 'wl-draft)
+
+;;;; 
+(defcustom wl-init-file "~/.wl"
+  "*User customization setting file."
+  :type 'file
+  :group 'wl)
+
+(defcustom wl-folders-file "~/.folders"
+  "*Folders file"
+  :type 'file
+  :group 'wl)
+
+(defcustom wl-address-file "~/.addresses"
+  "*Addresses file"
+  :type 'file
+  :group 'wl)
+
+(defcustom wl-alias-file "~/.im/Aliases"
+  "*Alias file for completion"
+  :type 'file
+  :group 'wl)
+
+(defcustom wl-folder-info-save t
+  "If non-nil, save elmo-folder-info-alist."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-summary-unread-mark "!"
+  "Mark for unread message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-important-mark "$"
+  "Mark for important message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-new-mark "N"
+  "Mark for new message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-unread-uncached-mark "U"
+  "Mark for unread and uncached message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-unread-cached-mark "!"
+  "Mark for unread but already cached message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-read-uncached-mark "u"
+  "Mark for read but uncached message."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-score-over-mark "+"
+  "Score mark used for messages with high scores."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+(defcustom wl-summary-score-below-mark "-"
+  "Score mark used for messages with low scores."
+  :type '(string :tag "Mark")
+  :group 'wl-summary-marks)
+
+(defcustom wl-summary-no-mime-folder-list
+  (list (concat "^" (regexp-quote wl-draft-folder) "$"))
+  "*All folders that match this list don't analysis mime."
+  :type '(repeat string)
+  :group 'wl-summary)
+
+(defcustom wl-summary-fix-timezone "JST"
+  "Non-nil forces to fix timezone of summary date."
+  :type 'string
+  :group 'wl-summary)
+
+(defcustom wl-summary-default-score 0
+  "*Default message score level.
+All scores generated by the score files will be added to this score.
+If this variable is nil, scoring will be disabled."
+  :type '(choice (const :tag "disable" nil)
+                integer)
+  :group 'wl-score)
+
+(defcustom wl-summary-important-above nil
+  "*Mark all messages with a score above this variable as important.
+This variable is local to the summary buffers."
+  :type '(choice (const :tag "off" nil)
+                integer)
+  :group 'wl-score)
+
+(defcustom wl-summary-temp-above nil
+  "*Mark all messages with a score above this variable as temp.
+This variable is local to the summary buffers."
+  :type '(choice (const :tag "off" nil)
+                integer)
+  :group 'wl-score)
+
+(defcustom wl-summary-mark-below 0
+  "*Mark all messages with a score below this variable as read.
+This variable is local to each summary buffer and usually set by the
+score file."
+  :type 'integer
+  :group 'wl-score)
+
+(defcustom wl-summary-expunge-below nil
+  "All messages that have a score less than this variable will be expunged.
+This variable is local to the summary buffers."
+  :type '(choice (const :tag "off" nil)
+                integer)
+  :group 'wl-score)
+
+(defcustom wl-summary-score-marks 
+  (list wl-summary-new-mark)
+  "Persistent marks to scoring."
+  :type '(repeat (string :tag "Mark"))
+  :group 'wl-score)
+
+(defcustom wl-use-scoring (not wl-on-nemacs)
+  "*If non-nil, enable scoring."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-summary-rescore-partial-threshold 200
+  "*Summary is not scored entirely if there are messages more than this value
+in sync-all or rescan."
+  :type 'integer
+  :group 'wl-score)
+
+(defcustom wl-score-files-dir (concat elmo-msgdb-dir elmo-path-sep)
+  "*Name of the directory where score files will be stored (default \"~/.elmo\")."
+  :type 'directory
+  :group 'wl)
+
+(defcustom wl-score-interactive-default-score 1000
+  "*Scoring commands will raise/lower the score with this number as the default."
+  :type 'integer
+  :group 'wl-score)
+
+(defcustom wl-score-expiry-days 7
+  "*Number of days before unused score file entries are expired.
+If this variable is nil, no score file entries will be expired."
+  :type '(choice (const :tag "never" nil)
+                number)
+  :group 'wl-score)
+
+(defcustom wl-score-update-entry-dates t
+  "*In non-nil, update matching score entry dates.
+If this variable is nil, then score entries that provide matches
+will be expired along with non-matching score entries."
+  :type 'boolean
+  :group 'wl-score)
+
+(defcustom wl-score-folder-alist nil
+  "*Alist of folder regexp and score file."
+  :type '(repeat (list (regexp :tag "Folder Regexp")
+                      (repeat :inline t
+                              (choice file
+                                      (symbol :tag "Variable")))))
+  :group 'wl-score)
+
+(defcustom wl-score-folder-alist-matchone t
+  "*If non-nil, getting only one element of `wl-score-folder-alist'."
+  :type 'boolean
+  :group 'wl-score)
+
+(defcustom wl-score-default-file "all.SCORE"
+  "*Default score file name."
+  :type 'file
+  :group 'wl-score)
+
+(defcustom wl-score-simplify-fuzzy-regexp
+  '("^[ \t]*\\[[^:]+[,: ][0-9]+\\][ \t]*")
+  "*Strings to be removed when doing fuzzy matches.
+This can either be a regular expression or list of regular expressions."
+  :type '(repeat regexp)
+  :group 'wl-score)
+
+(defcustom wl-score-header-default-entry
+  '(("number" -1000 perm =)
+    ("subject" -1000 nil nil)
+    ("from" -1000 perm s)
+    ("message-id" -1000 temp e)
+    ("references" -1000 perm e)
+    ("to" -1000 perm s)
+    ("cc" -1000 perm s)
+    ("date" -1000 temp nil)
+    ("xref" -1000 perm s)
+    ("extra" -1000 perm s)
+    ("chars" -1000 perm >)
+    ("lines" -1000 perm >)
+    ("followup" -1000 perm s)
+    ("thread" -1000 temp s))
+  "*Default entry when insert score entry."
+  :type '(repeat (list (string :tag "Header")
+                      (choice (integer :tag "Score")
+                              (const :tag "Ask" nil))
+                      (choice (const :tag "Permanent" perm)
+                              (const :tag "Temporary" temp)
+                              (const :tag "Ask" nil))
+                      (choice (const :tag "Regexp string" r)
+                              (const :tag "Substring" s)
+                              (const :tag "fuzzy string" f)
+                              (const :tag "Exact string" e)
+                              (const :tag "REGEXP STRING" R)
+                              (const :tag "SUBSTRING" S)
+                              (const :tag "FUZZY STRING" F)
+                              (const :tag "EXACT STRING" E)
+                              (const :tag "less than" <)
+                              (const :tag "less equal" <=)
+                              (const :tag "greater than" >)
+                              (const :tag "greater equal" >=)
+                              (const :tag "equal" =)
+                              (const :tag "Ask" nil))))
+  :group 'wl-score)
+
+(defcustom wl-score-mode-mime-charset 'x-ctext
+  "*MIME Charset for score file."
+  :type 'symbol
+  :group 'wl-score)
+
+(defcustom wl-draft-fields
+  '("To:" "Cc:" "Bcc:" "FCC:" "Distribution:" "Organization:"
+    "Newsgroups:" "Followup-To:" "Mail-Followup-To:" "From:" "Reply-To:") 
+  "Fields used in draft mode."
+  :type '(repeat (string :tag "Field"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-config-alist nil
+  "Alist of configuration field on draft.
+ex.
+'((\"^To: .*wl@lists.airs.net\"
+   (\"From\" . wl-from2)
+   (\"Organization\" . wl-organization2))
+  (\"^To: .*hogehoge@\"
+   (\"From\" . \"Anonymous <hogehoge@aaa.ne.jp>\")
+   wl-my-draft-config-func-hoge))"
+  :type '(repeat (list (sexp :tag "Match")
+                      (repeat
+                       :inline t
+                       (choice (cons (sexp :tag "Field(Variable)")
+                                     (sexp :tag "Value"))
+                               (sexp :tag "Function")))))
+  :group 'wl-draft)
+
+(defcustom wl-draft-config-matchone nil
+  "*If non-nil, applied only one element of `wl-draft-config-alist'."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-template-alist nil
+  "Alist of template."
+  :type '(repeat (list (string :tag "Name")
+                      (repeat
+                       :inline t
+                       (choice (cons (sexp :tag "Field(Variable)")
+                                     (sexp :tag "Value"))
+                               (sexp :tag "Function")))))
+  :group 'wl-draft)
+
+(defcustom wl-template-visible-select t
+  "*If non-nil, select template with visible."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-template-confirm nil
+  "*If non-nil, require your confirmation when selected template."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-template-buffer-lines 7
+  "*Lines of template buffer."
+  :type 'integer
+  :group 'wl-draft)
+
+;; queued sending.
+(defcustom wl-draft-enable-queuing t
+  "*Non-nil enables queued sending."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-auto-flush-queue t
+  "*If non-nil, sending queue is flushed when network status is toggled."
+  :type 'boolean
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-draft-reply-buffer-style 'split
+  "'split or 'full"
+  :type '(radio (const split)
+               (const full))
+  :group 'wl-draft)
+
+(defcustom wl-draft-queue-save-variables
+  '(wl-envelope-from
+    wl-smtp-posting-server smtp-service
+    wl-nntp-posting-server elmo-default-nntp-port)
+  "*Saving variables in queue info."
+  :type '(repeat (sexp :tag "Variable"))
+  :group 'wl-draft)
+
+(defcustom wl-draft-sendlog t
+  "*Keep send state in log if non-nil."
+  :type 'boolean
+  :group 'wl-draft)
+
+(defcustom wl-draft-sendlog-max-size 20000
+  "*Max file size of sendlog."
+  :type 'integer
+  :group 'wl-draft)
+
+(defcustom wl-summary-default-number-column 5
+  "number of columns in summary buffer."
+  :type 'integer
+  :group 'wl-summary)
+
+(defcustom wl-summary-number-column-alist '(("\\*.*" . 6))
+  "Alist of folder and its number column.
+If no matches, 'wl-summary-default-number-column' is used.
+ex.
+'((\"^%inbox@qmail-maildir\" . 9)
+  (\"^-.*@news-server\" . 6))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp") integer))
+  :group 'wl-summary)
+
+(defcustom wl-summary-highlight t
+  "Non-nil forces Summary buffer to be highlighted."
+  :type 'boolean
+  :group 'wl-summary
+  :group 'wl-highlight)
+
+(defcustom wl-summary-highlight-partial-threshold 1000
+  "Summary is not highlighted entirely 
+if there are lines more than this value."
+  :type 'integer
+  :group 'wl-summary
+  :group 'wl-highlight)
+
+(defcustom wl-summary-partial-highlight-above-lines 30
+  "If Summary has lines more than wl-summary-highlight-partial-threshold,
+Summary lines are highlighted partialy above current position."
+  :type 'integer
+  :group 'wl-summary
+  :group 'wl-highlight)
+
+(defcustom wl-summary-cache-use t
+  "Non-nil forces wl-summary to use cache file."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-summary-auto-sync-marks t
+  "Non-nil forces to synchronize unread/important marks."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-summary-cache-file ".wl-summary-cache"
+  "*Cache file for summary mode contents."
+  :type 'file
+  :group 'wl-summary)
+(defcustom wl-summary-view-file ".wl-summary-view"
+  "*current summary view."
+  :type 'file
+  :group 'wl-summary)
+(defcustom wl-thread-top-file ".wl-thread-top"
+  "*current thread top entity... obsolete."
+  :type 'file
+  :group 'wl-summary)
+(defcustom wl-thread-entity-file ".wl-thread-entity"
+  "*thread entities."
+  :type 'file
+  :group 'wl-summary)
+(defcustom wl-thread-entity-list-file ".wl-thread-entity-list"
+  "*thread top entity list."
+  :type 'file
+  :group 'wl-summary)
+
+(defcustom wl-print-buffer-func 'lpr-buffer
+  "A function to print current buffer."
+  :type 'function
+  :group 'wl-pref)
+
+(defcustom wl-ps-print-buffer-func 
+  (if window-system 'ps-print-buffer-with-faces 'ps-print-buffer)
+  "A function to print current buffer with ps-print."
+  :type 'function
+  :group 'wl-pref)
+
+;;;; Preferences
+(defcustom wl-use-petname t
+  "*Display petname in summary and default citation title."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-use-folder-petname
+  '(modeline)
+  "*List of situation using folder petname. Allowed situations are:
+
+  modeline    : displayed on modeline.
+  ask-folder  : displayed on minibuffer when ask folder.
+  read-folder : can used for completion at `wl-summary-read-folder'."
+  :type '(set (const modeline)
+             (const ask-folder)
+             (const read-folder))
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-folder-petname-alist nil
+  "A list of (realname . petname)"
+  :type '(repeat (cons (string :tag "Realname") (string :tag "Petname")))
+  :group 'wl-folder)
+
+(defcustom wl-summary-weekday-name-lang "ja"
+  "*Language to display week day."
+  :type '(choice (const "ja")
+                (const "en")
+                (const "fr")
+                (const "de")
+                (string :tag "Other"))
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-local-domain nil
+  "*Domain part of this client (without hostname).  
+Set this if (system-name) does not return FQDN."
+  :type '(choice (const :tag "Use System Name" nil)
+                 string)
+  :group 'wl-pref)
+
+(defcustom wl-message-id-domain nil
+  "*Specific domain part of Message-ID."
+  :type '(choice (const :tag "Use System Name" nil)
+                 string)
+  :group 'wl-pref)
+
+(defcustom wl-break-pages t
+  "*Break Pages at ^L."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-message-scroll-amount 5
+  "*Scroll amount by SPC key."
+  :type 'integer
+  :group 'wl-pref)
+
+(defcustom wl-message-window-size '(1 . 4)
+  "*Size of summary and message window. cons cell of (Summary : Message)."
+  :type '(cons integer integer)
+  :group 'wl-pref)
+
+(defcustom wl-message-sort-field-list '("Return-Path" "Received" "^To" "^Cc" 
+                                       "Newsgroups" "Subject" "^From")
+  "*Sort order of header fields. Each elements are regexp of field name.
+(Not valid on tm.)"
+  :type '(repeat (string :tag "Field Regexp"))
+  :group 'wl-pref)
+
+(defcustom wl-folder-window-width 20
+  "*Width of folder window."
+  :type 'integer
+  :group 'wl-folder
+  :group 'wl-pref)
+
+(defcustom wl-summary-recenter t
+  "*Recenter on redisplay"
+  :type 'boolean
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-stay-folder-window nil
+  "*Stay folder window when folder is selected if non-nil."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-reply-subject-prefix "Re: "
+  "*Prefix of the subject of the replied message."
+  :type 'string
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-folder-many-unsync-threshold 70
+  "*Folders which contains messages more than this number are highlighted
+with wl-highlight-folder-many-face."
+  :type 'integer
+  :group 'wl-folder
+  :group 'wl-pref)
+
+(defcustom wl-fcc nil
+  "*Folder Carbon Copy."
+  :type '(choice (const :tag "disable" nil)
+                 string)
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-bcc nil
+  "*Blind Carbon Copy."
+  :type '(choice (const :tag "disable" nil)
+                 string)
+  :group 'wl-draft
+  :group 'wl-pref)
+
+(defcustom wl-folder-desktop-name "Desktop"
+  "*An implicit name of the folder top entity."
+  :type 'string
+  :group 'wl-folder
+  :group 'wl-pref)
+
+(defcustom wl-summary-indent-length-limit 46
+  "*Limit of indent length for thread."
+  :type 'integer
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-summary-no-from-message "nobody@nowhere?"
+  "*A string displayed in summary when no from field exists."
+  :type 'string
+  :group 'wl-summary)
+
+(defcustom wl-summary-no-subject-message "(WL:No Subject in original.)"
+  "*A string displayed in summary when no subject field exists."
+  :type 'string
+  :group 'wl-summary)
+
+(defcustom wl-summary-cancel-message "I'd like to cancel my message."
+  "*The body content of a cancel message."
+  :type 'string
+  :group 'wl-summary)
+
+(defcustom wl-summary-width 80
+  "*Set summary line width if non nil."
+  :type 'integer
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-summary-pick-field-default "Body"
+  "*Default field for pick."
+  :type '(radio (const "From")
+               (const "Subject")
+               (const "Date")
+               (const "To")
+               (const "Cc")
+               (const "Body")
+               (const "Since")
+               (const "Before")
+               (string :tag "Other"))
+  :group 'wl-summary)
+
+(defcustom wl-from-width 17
+  "*From width in summary."
+  :type 'integer
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-mime-charset (if wl-on-nemacs
+                              'iso-2022-jp
+                            'x-ctext)
+  "*MIME Charset for summary and message."
+  :type 'symbol
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-generate-mailer-string-func 'wl-generate-user-agent-string
+  "A function to create X-Mailer field string ."
+  :type 'function
+  :group 'wl-draft)
+
+(defcustom wl-highlight-background-mode  (if (boundp 'hilit-background-mode)
+                                            (or hilit-background-mode 'dark)
+                                          'dark)
+  "*Background mode of highlight (for Old Emacsen). 'dark or 'light"
+  :type '(radio (const dark)
+               (const light))
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-x-face-func nil
+  "A function to display X-Face."
+  :type 'function
+  :group 'wl-highlight)
+
+(defcustom wl-qmail-inject-program "/var/qmail/bin/qmail-inject"
+  "Location of the qmail-inject program."
+  :type '(string :tag "Program")
+  :group 'wl-draft)
+
+(defcustom wl-qmail-inject-args nil
+  "Arguments passed to qmail-inject programs.
+This should be a list of strings, one string for each argument.
+
+For e.g., if you wish to set the envelope sender address so that bounces
+go to the right place or to deal with listserv's usage of that address, you
+might set this variable to '(\"-f\" \"you@some.where\")."
+  :type '(repeat (string :tag "Argument"))
+  :group 'wl-draft)
+
+(defcustom wl-rejected-letter-start 
+  "^[\t ]*-+[\t ]+\\(original\\|\\(\\(the \\)?unsent\\)\\) message\\( follows\\)?[\t ]+-+[\t ]*$"
+  "Regexp specifying the beginning of the wrapper around a returned letter.
+  This wrapper is generated by the mail system when rejecting a letter."
+  :type 'regexp
+  :group 'wl-draft)
+
+(defcustom wl-ignored-resent-headers "\\(return-receipt\\|[bdf]cc\\)"
+  "*All headers that match this regexp will be deleted when resending a message."
+  :type 'regexp
+  :group 'wl-draft)
+
+(defcustom wl-refile-default-from-folder "+from"
+  "*Folder name to refile by `wl-refile-guess-by-from'."
+  :type '(string :tag "Folder")
+  :group 'wl-pref)
+
+(defcustom wl-summary-auto-refile-skip-marks 
+  (list wl-summary-new-mark
+       wl-summary-unread-uncached-mark
+       wl-summary-unread-cached-mark)
+  "Persistent marks to skip auto-refiling."
+  :type '(repeat (string :tag "Mark"))
+  :group 'wl-summary)
+
+(defcustom wl-summary-reserve-mark-list
+  (list "o" "O" "D")
+  "If a message is already marked as temporal marks in this list, 
+the message is not marked by any mark command."
+  :type '(repeat (string :tag "Temp-Mark"))
+  :group 'wl-summary)
+
+(defcustom wl-summary-skip-mark-list
+  (list "D")
+  "If a message is already marked as temporal marks in this list, 
+the message is skipped at cursor move."
+  :type '(repeat (string :tag "Temp-Mark"))
+  :group 'wl-summary)
+
+(defcustom wl-summary-incorporate-marks
+  (list wl-summary-new-mark
+       wl-summary-unread-uncached-mark)
+  "Persistent marks to prefetch at `wl-summary-incorporate'"
+  :type '(repeat (string :tag "Mark"))
+  :group 'wl-summary)
+
+(defcustom wl-refile-rule-alist nil
+  "Refile rule alist.
+e.x.
+'(
+  (\"From\"
+   (\"teranisi@isl.ntt.co.jp\" . \"+teranisi\"))
+  (\"x-ml-name\"
+   (\"^Wanderlust\"    . \"+wl\")
+   (\"^Elips\" . \"+elips\")))"
+  :type '(repeat (list (string :tag "Field")
+                      (repeat :inline t
+                              (cons (regexp :tag "Value")
+                                    (string :tag "Folder")))))
+  :group 'wl-pref)
+
+(defcustom wl-strict-diff-folders nil
+  "Folders in this list are checked its unsync message number strictly."
+  :type '(repeat (string :tag "Folder"))
+  :group 'wl-folder)
+
+(defcustom wl-folder-use-server-diff t
+  "Checked unread message number on IMAP4 server. 
+Only IMAP4 folders have an effect."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-force-fetch-folders nil
+  "Non-nil forces to fetch subfolders when user opened an 'access' folder."
+  :type '(choice (const :tag "off" nil)
+                (const :menu-tag "on" t)
+                (repeat (regexp :tag "Folder Regexp")))
+  :group 'wl-folder)
+
+(defcustom wl-auto-check-folder-name nil
+  "*The folder specified by this variable will be automatically checked 
+at start time."
+  :type '(choice (string :tag "Folder")
+                (repeat (string :tag "Folder"))
+                (const none))
+  :group 'wl-folder)
+
+(defcustom wl-auto-uncheck-folder-list '("\\$.*")
+  "All folders that match this list won't be checked when group is 
+automatically checked (or desktop is checked).
+This value is preceded by wl-auto-check-folder-list.
+Each elements are regexp of folder name."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-folder)
+
+(defcustom wl-auto-check-folder-list nil
+  "All folders that match this list are checked when group is 
+automatically checked (or desktop is checked).
+This value precedes wl-auto-uncheck-folder-list.
+Each elements are regexp of folder name."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-folder)
+
+(defcustom wl-interactive-send nil
+  "*If non-nil, require your confirmation when sending draft message."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-interactive-exit t
+  "*If non-nil, require your confirmation when exiting WL."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-summary-move-order 'unread
+  "*The order of priority when move in summary mode.
+If this variable is `unread', precede \"U\", \"!\", \"N\" mark.
+If this variable is `new', precede \"N\" mark."
+  :type '(radio (const new)
+               (const unread))
+  :group 'wl-summary)
+
+(defvar wl-summary-move-direction-downward t)
+
+(defcustom wl-summary-move-direction-toggle t
+  "*If non-nil, search direction for the next message will be determined
+depends on previous search direction. 
+It uses wl-summary-move-direction-downward as a direction flag."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-auto-select-first nil
+  "*If non-nil, display selected first message when enter summary."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-auto-select-next nil
+  "*If non-nil, offer to go to the next folder from the end of the previous.
+If the value is the symbol `unread', go to the next folder 
+that no unread message exists. If the value is the symbol `skip-no-unread',
+skip the folder that no unread message exists.
+
+See also variable `wl-summary-next-no-unread-command'."
+  :type '(radio (const :tag "off" nil)
+               (const :tag "on" t)
+               (const unread)
+               (const skip-no-unread))
+  :group 'wl-pref)
+
+(defcustom wl-cache-prefetch-folder-type-list '(imap4 nntp)
+  "*All folder types that match this list prefetch next message, 
+and reserved buffer cache."
+  :type '(set (const localdir)
+             (const localnews)
+             (const imap4)
+             (const nntp)
+             (const pop3)
+             (const archive)
+             (const internal))
+  :group 'wl-pref)
+
+(defcustom wl-cache-prefetch-folder-list nil
+  "*All folders that match this list prefetch next message, 
+and reserved buffer cache.
+e.x.
+'(\"^[-%]\")"
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-pref)
+
+(defcustom wl-cache-prefetch-get-next-func 'wl-summary-default-get-next-msg
+  "*A function to get message number when prefetch next message."
+  :type 'function
+  :group 'wl-pref)
+
+;; obsolete
+;(defvar wl-no-cache-folder-list '("^\\$.*")
+;  "All folders that match this list won't be cached when reading messages.
+;Each elements are regexp of folder name.")
+
+(defcustom wl-summary-always-sticky-folder-list nil
+  "All folders that match this list has sticky summary.
+Each elements are regexp of folder name."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-pref)
+
+(defcustom wl-no-save-folder-list '("^/.*$")
+  "All folders that match this list won't save its msgdb.
+Each elements are regexp of folder name."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-pref)
+
+(defcustom wl-save-folder-list nil
+  "All folders that match this list save its msgdb.
+Each elements are regexp of folder name."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-pref)
+
+(defcustom wl-search-mime-charset 'iso-2022-jp
+  "*MIME Charset for searching message."
+  :type 'symbol
+  :group 'wl-pref)
+
+(defcustom wl-folder-mime-charset-alist
+  '(("^-alt\\.chinese" . big5)
+    ("^-relcom\\." . koi8-r)
+    ("^-tw\\." . big5)
+    ("^-han\\." . euc-kr))
+  "Charset alist. If no match, wl-mime-charset is used."
+  :type '(repeat (cons (regexp :tag "Folder Regexp") (symbol :tag "Charset")))
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-folder-weekday-name-lang-alist
+  '(("^-alt\\.chinese" . "en")
+    ("^-relcom\\." . "en")
+    ("^-tw\\." . "en")
+    ("^-han\\." . "en"))
+  "Weekday name lang alist. If no match, wl-summary-weekday-name-lang 
+is used.
+e.x.
+'((\"xemacs-beta$\" . \"en\")
+  (\"^-fj\" . \"ja\"))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (choice (const "ja")
+                              (const "en")
+                              (const "fr")
+                              (const "de")
+                              (string :tag "Other"))))
+  :group 'wl-pref)
+
+(defcustom wl-folder-thread-indent-set-alist
+  '(("^-alt\\.chinese" . (2 "+" "+" "|" "-" " "))
+    ("^-relcom\\." . (2 "+" "+" "|" "-" " "))
+    ("^-tw\\." . (2 "+" "+" "|" "-" " "))
+    ("^-han\\." . (2 "+" "+" "|" "-" " ")))
+  "Thread indent set alist. 
+If no match, following indent set is used.
+(wl-thread-indent-level
+ wl-thread-have-younger-brother-str
+ wl-thread-youngest-child-str
+ wl-thread-vertical-str
+ wl-thread-horizontal-str
+ wl-thread-space-str)
+e.x.
+'((\"xemacs-beta$\" . (2 \"+\" \"+\" \"|\" \"-\" \" \")))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (group (integer :tag "Indent")
+                             (string :tag "Yonger Brother")
+                             (string :tag "Yonger Child")
+                             (string :tag "Vertical")
+                             (string :tag "Horizontal")
+                             (string :tag "Space"))))
+  :group 'wl-pref)
+
+(defcustom wl-folder-sync-range-alist 
+  (list (cons "^&.*$" "all")
+       (cons (concat "^" (regexp-quote wl-draft-folder) "$\\|^" 
+                     (regexp-quote wl-queue-folder) "$")
+             "all"))
+  "*Default sync range alist. If no matches, `wl-default-sync-range' is used."
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (choice (const "update")
+                              (const "all")
+                              (const "rescan")
+                              (const "first:")
+                              (const "last:")
+                              (const "no-sync")
+                              (const :tag "none" nil))))
+  :group 'wl-pref)
+
+(defcustom wl-default-sync-range  "update"
+  "*Default sync range."
+  :type '(choice (const "update")
+                (const "all")
+                (const "rescan")
+                (const "first:")
+                (const "last:")
+                (const "no-sync")
+                (const :tag "none" nil))
+  :group 'wl-pref)
+
+(defcustom wl-ask-range t
+  "*If non-nil, ask for a range for summary synchronization. 
+If nil, always use default."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-folder-move-cur-folder nil
+  "*Non-nil, move to current folder on folder-mode when goto folder."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-folder-check-async (not wl-on-nemacs)
+  "*Check the folder asynchronous."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-folder-notify-deleted nil
+  "*Non-nil, display negative number on folder-mode when message is deleted
+in folder. If the value is 'sync, msgdb would be synchronized."
+  :type '(choice (const :tag "off" nil)
+                (const :tag "on" t)
+                (const sync))
+  :group 'wl-folder)
+
+(defcustom wl-summary-exit-next-move t
+  "*Non-nil, move to next-unsync or next-entity when exit summary."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-summary-next-no-unread-command 
+  '(wl-summary-read wl-summary-down wl-summary-up)
+  "*Command list available when the value of `wl-auto-select-next' is 'unread
+or 'skip-no-unread."
+  :type '(repeat function)
+  :group 'wl-summary)
+
+(defcustom wl-summary-search-via-nntp 'confirm
+  "*Non-nil, search message via nntp after `wl-summary-jump-to-msg-by-message-id'. If the value is 'confirm, confirm before search."
+  :type 'boolean
+  :group 'wl-summary)
+
+(defcustom wl-summary-keep-cursor-command 
+  '(wl-summary-goto-folder wl-summary-goto-last-visited-folder)
+  "*Command list to keep cursor position when folder is changed to
+already existing summary."
+  :type '(repeat function)
+  :group 'wl-summary)
+
+(defcustom wl-summary-showto-folder-regexp nil
+  "Regexp specifying the folder that shows the To (or Newsgroups) field as
+  Sender information in summary mode."
+  :type 'regexp
+  :group 'wl-summary)
+
+(defcustom wl-folder-removed-mark "#<removed>"
+  "Mark for removed folder."
+  :type 'string
+  :group 'wl-folder)
+
+(defcustom wl-folder-unsubscribe-mark "#"
+  "Mark for unsubscribe folder."
+  :type 'string
+  :group 'wl-folder)
+
+(defcustom wl-delete-folder-alist '(("^-" . remove))
+  "*Alist of folder and delete policy. 
+Each element is (folder-regexp . policy).
+
+The policy is one of the followings:
+'remove or
+'null     : remove message.
+string    : refile to the specified folder.
+'trash or 
+otherwise : refile to the `wl-trash-folder'.
+ex.
+'((\"^%\" . \"%#mh/trash\")
+  (\"^-\" . remove)
+  (\"^\\\\+\" . trash))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (choice :tag "Policy"
+                              (const remove)
+                              (const :tag "remove(null)" null)
+                              (const trash)
+                              (const :tag "trash(other)" trash)
+                              (string :tag "Folder"))))
+  :group 'wl-folder)
+
+(defcustom wl-refile-policy-alist '(("^[-=']" . copy)
+                                   (".*" . move))
+  "*List of refile policy. Each element is (FOLDER-REGEXP . POLICY).
+POLICY is copy or move."
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (choice (const copy)
+                              (const move))))
+  :group 'wl-summary
+  :group 'wl-pref)
+
+(defcustom wl-folder-hierarchy-access-folders '("-" "-alt")
+  "*Access group folders to make hierarchy structure."
+  :type '(repeat (string :tag "Folder"))
+  :group 'wl-folder)
+
+(defcustom wl-folder-init-load-access-folders nil
+  "*Access group folders to load folder list on `wl-folder-init'.
+If this variable is non-nil,
+`wl-folder-init-no-load-access-folders' will be ignored."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-folder)
+
+(defcustom wl-folder-init-no-load-access-folders nil
+  "*Access group folders to not load folder list on `wl-folder-init'.
+If `wl-folder-init-load-access-folders' is non-nil,
+this variable will be ignored."
+  :type '(repeat (regexp :tag "Folder Regexp"))
+  :group 'wl-folder)
+
+(defcustom wl-folder-access-subscribe-alist nil
+  "*Subscribe folders to fetching folder entries.
+Each element is (group-regexp (subscribe folder-regexp ...)).
+If subscribe is non-nil, subscribe when match folder-regexp.
+If subscribe is nil, unsubscribe when match folder-regexp.
+
+ex.
+'((\"^-fj$\"   . (t   \"^-fj\\\\.\\\\(editor\\\\|mail\\\\|net\\\\|news\\\\)\"))
+  (\"^-comp$\" . (t   \"^-comp\\\\.unix\" \"^-comp\\\\.sys\"))
+  (\"^-$\"     . (nil \"^-alt\" \"^-rec\")))"
+  :type '(repeat (cons (regexp :tag "Folder Regexp")
+                      (list (boolean :tag "Subscribed")
+                            (repeat :inline t
+                                    (regexp :tag "Folder Regexp")))))
+  :group 'wl-folder)
+
+;;; For Folder Manager 
+
+(defcustom wl-interactive-save-folders t
+  "*Non-nil require your confirmation when save folders."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-fldmgr-make-backup t
+  "*Non-nil make backup file when save folders."
+  :type 'boolean
+  :group 'wl-folder)
+
+(defcustom wl-fldmgr-folders-indent "\t"
+  "*Indent string for folders file."
+  :type 'string
+  :group 'wl-folder)
+
+(defcustom wl-fldmgr-sort-func 'wl-fldmgr-sort-standard
+  "*A function to sort folder."
+  :type 'function
+  :group 'wl-folder)
+
+(defcustom wl-fldmgr-sort-group-first t
+  "*Non-nil Group folder is first when sort."
+  :type 'function
+  :group 'wl-folder)
+
+;;; For Expire and Archive
+
+(defcustom wl-expire-alist nil
+  "Alist to decide a policy for expire.
+Each element is (folder-regexp (number or date) policy).
+
+The policy is one of the followings:
+'remove  : remove messsage.
+'trash   : refile wl-trash-folder.
+string   : refile string folder.
+function : call function.
+
+ex.
+'((\"^\\\\+ml/wl$\"            (number 500 510) wl-expire-archive-number1 t)
+  (\"^\\\\+ml/\"               (number 300 305) wl-expire-archive-number2)
+  (\"^\\\\+outbox$\"           (number 300) \"$outbox;lha\")
+  (\"^\\\\(\\\\+tmp\\\\|\\\\+trash\\\\)$\"     (date 7) remove)
+  (\"^\\\\+misc$\"             (date 14) trash))"
+  :type '(repeat (choice (list :tag "No-match"
+                              (regexp :tag "Folder Regexp")
+                              (const nil))
+                        (list :tag "Match"
+                              (regexp :tag "Folder Regexp")
+                              (list (radio :value number
+                                           (const number)
+                                           (const date))
+                                    (list :inline t
+                                          integer
+                                          (repeat :inline t integer)))
+                              (choice :tag "Policy"
+                                      :value remove
+                                      (const remove)
+                                      (const trash)
+                                      (string :tag "folder")
+                                      function)
+                              (repeat :inline t
+                                      :tag "Arg for function"
+                                      sexp))))
+  :group 'wl-expire)
+
+(defcustom wl-archive-alist '((".*" wl-archive-number1))
+  "Alist to decide a policy for archive.
+Each element is (folder-regexp policy(function)).
+
+ex.
+'((\"\\\\+work$\" wl-archive-date)
+  (\"\\\\+ml/\"   wl-archive-number1)
+  (\".*\"       wl-archive-number2))"
+  :type '(repeat (list (regexp :tag "Folder Regexp")
+                      function
+                      (repeat :inline t
+                              (sexp :tag "Argument"))))
+  :group 'wl-expire)
+
+(defcustom wl-summary-expire-reserve-marks
+  (list wl-summary-important-mark
+       wl-summary-new-mark
+       wl-summary-unread-mark
+       wl-summary-unread-uncached-mark
+       wl-summary-unread-cached-mark)
+  "Permanent marks of reserved message when expire.
+Don't reserve temporary mark message.
+
+ex.
+'all  : reserved all permanent marks.
+'none : not reserve permanent marks.
+list  : reserved specified permanent marks."
+  :type '(repeat (string :tag "Mark"))
+  :group 'wl-expire)
+
+(defcustom wl-expire-number-with-reserve-marks nil
+  "If non-nil, include reserve message when expire by number."
+  :type 'boolean
+  :group 'wl-expire)
+
+(defcustom wl-expire-add-seen-list t
+  "*If non-nil, add seen message list when refile message at expire."
+  :type 'boolean
+  :group 'wl-expire)
+
+(defcustom wl-expire-use-log nil
+  "*If non-nil, write a log when expired."
+  :type 'boolean
+  :group 'wl-expire)
+
+(defcustom wl-expire-folder-update-msgdb t
+  "*Non-nil update summary msgdb when expire on folder mode."
+  :type 'boolean
+  :group 'wl-expire)
+
+;; for wl-expire-archive-{number1|number2}
+(defcustom wl-expire-archive-files 100
+  "*The number of one archive folder."
+  :type 'integer
+  :group 'wl-expire)
+
+;; for wl-expire-archive-{number1|number2|date}
+(defcustom wl-expire-archive-get-folder-func
+  'wl-expire-archive-get-folder
+  "*A function to get archive folder name."
+  :type 'function
+  :group 'wl-expire)
+
+(defcustom wl-expire-delete-oldmsg-confirm t
+  "*If non-nil, require your confirmation when delete old message."
+  :type 'boolean
+  :group 'wl-expire)
+
+;; for wl-expire-archive-get-folder
+(defcustom wl-expire-archive-folder-type 'zip
+  "*Archiver type of archive folder."
+  :type '(radio (const zip)
+               (const lha)
+               (const zoo)
+               (const rar)
+               (const tar)
+               (const tgz)
+               (symbol :tag "Other"))
+  :group 'wl-expire)
+
+(defcustom wl-expire-archive-folder-name-fmt "%s-%%05d;%s" ;; $folder-00100;zip
+  "*A format string for archive folder name."
+  :type 'string
+  :group 'wl-expire)
+
+(defcustom wl-expire-archive-folder-num-regexp "-\\([0-9]+\\);"
+  "*A regexp string for archive folder name."
+  :type 'string
+  :group 'wl-expire)
+
+(defcustom wl-expire-archive-date-folder-name-fmt "%s-%%04d%%02d;%s"
+                                               ;; $folder-199812;zip
+  "*A format string for archive date folder name."
+  :type 'string
+  :group 'wl-expire)
+
+(defcustom wl-expire-archive-date-folder-num-regexp "-\\([0-9]+\\);"
+  "*A regexp string for archive date folder name."
+  :type 'string
+  :group 'wl-expire)
+
+(defcustom wl-expire-archive-folder-prefix nil
+  "*Prefix for archive folder."
+  :type '(radio (const :tag "nothing" nil)
+               (const :tag "full" t)
+               (const short))
+  :group 'wl-expire)
+
+;;;; Highlights.
+
+;; highilght about summary
+(defcustom wl-highlight-max-summary-lines 10000
+  "*If the summary is larger than this lines, don't highlight it."
+  :type 'integer
+  :group 'wl-highlight)
+;; highilght about draft and message
+(defcustom wl-highlight-body-too t
+  "*In addition to header, highlight the body too. if non nil."
+  :type 'boolean
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-message-header-alist
+  '(("Subject[ \t]*:" . wl-highlight-message-important-header-contents)
+    ("From[ \t]*:\\|To[ \t]*:" . wl-highlight-message-important-header-contents2)
+    ("X-[^ \t]*:\\|User-Agent[ \t]*:" . wl-highlight-message-unimportant-header-contents))
+  ""
+  :type '(repeat (cons regexp face))
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-citation-prefix-regexp 
+  "^[>|:} ]*[>|:}]\\([^ \n>]*>\\)?\\|^[^ <\n>]*>"
+  "All lines that match this regexp will be highlighted with
+ `wl-highlight-message-cited-text-*' face."
+  :type 'regexp
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-highlight-citation-too nil
+  "*Whether the whole citation line should go in the 
+  `wl-highlight-citation-face' face.
+If nil, the text matched by `wl-highlight-citation-prefix-regexp' is in the
+default face, and the remainder of the line is in the 
+wl-highlight-message-cited-text face."
+  :type 'boolean
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-force-citation-header-regexp
+  "^>>>.*$\\|^[ \t]*<[^>]*>[ \t]*$"
+  "*The pattern to match the prolog of a cited block.
+Text in the body of a message which matches this will be displayed in
+the `wl-highlight-message-headers' face."
+  :type 'regexp
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-citation-header-regexp
+  (concat "In article.*$\\|In message.*$\\|In the message.*$\\|"
+         "^At[^\n]+\n[^\n]+wrote:\n\\|" 
+         "^.*\\(writes\\|wrote\\|said\\):\n")
+  "*The pattern to match the prolog of a cited block.
+Text in the body of a message which matches this will be displayed in
+the `wl-highlight-message-headers' face."
+   :type 'regexp
+   :group 'wl-highlight)
+
+(defcustom wl-highlight-max-message-size 10000
+  "*If the message body is larger than this many chars, don't highlight it.
+This is to prevent us from wasting time trying to fontify things like
+uuencoded files and large digests.  If this is nil, all messages will
+be highlighted."
+    :type 'integer
+    :group 'wl-highlight)
+  
+;; highilght about signature (of draft and message)
+(defcustom wl-highlight-signature-separator 
+  '("\n--+\n" "\n\n--+.*\n*\\'")
+  "List of regexps matching signature separator.
+It will be verified from head to tail looking for a separator.  
+Verification will be done from the end of the buffer.
+No need to specify \"^-- $\" in this list, 
+because it is verified by default.
+This variable can also be a regex. "
+  :type '(repeat regexp)
+  :group 'wl-highlight)
+
+(defcustom wl-max-signature-size 400
+  "*If the signature is larger than this chars, don't treat it as a signature."
+  :type 'integer
+  :group 'wl-highlight)
+  
+;; highilght about mouse
+(defcustom wl-use-highlight-mouse-line (and wl-on-xemacs window-system)
+  "*Highlight mouse line, if non nil."
+  :type 'boolean
+  :group 'wl-highlight)
+;; highilght about folder
+(defcustom wl-highlight-folder-with-icon 
+  (and (featurep 'xemacs)
+       (featurep 'xpm))
+  "*Highlight folder with icon(XEmacs)."
+  :type 'boolean
+  :group 'wl-highlight)
+(defcustom wl-highlight-group-folder-by-numbers t
+  "*Highlight group folder by numbers."
+  :type 'boolean
+  :group 'wl-highlight)
+
+(defcustom wl-highlight-signature-search-func 'wl-highlight-signature-search
+  "Function to search signature area in the message body."
+  :type 'function
+  :group 'wl-highlight)
+
+(defcustom wl-use-dnd (and wl-on-xemacs
+                          (featurep 'dragdrop))
+  "If Non-nil, support dragdrop feature in XEmacs."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-reset-plugged-alist t
+  "*If non-nil, reset `elmo-plugged-alist' when startup."
+  :type 'boolean
+  :group 'wl-pref)
+
+(defcustom wl-demo-display-logo (or (and (featurep 'xemacs)
+                                        (featurep 'xpm))
+                                   (and (module-installed-p 'image)
+                                        (image-type-available-p 'xpm))
+                                   (module-installed-p 'bitmap))
+  "If non-nil, display image (or bitmap) logo in th Wanderlust opening demo."
+  :type 'boolean
+  :group 'wl-pref)
+
+;;; Internal variables
+(defvar wl-init nil)
+
+;; For disconnected operations.
+(defvar wl-plugged-hook nil)
+(defvar wl-unplugged-hook nil)
+(defvar wl-plugged t)
+
+(defvar wl-plug-state-indicator-on  " [ON] ")
+(defvar wl-plug-state-indicator-off " [--] ")
+(defvar wl-plug-state-indicator wl-plug-state-indicator-on)
+
+(defvar wl-show-plug-status-on-modeline t)
+
+;; Advanced thread view.  
+(defvar wl-thread-indent-level 1
+  "*Indent level for thread.")
+(defvar wl-thread-have-younger-brother-str "\e$B(2\e(B"
+  "*A string for thread branch line. It should contain one character.")
+(defvar wl-thread-youngest-child-str       "\e$B(1\e(B"
+  "*A string for thread branch line. It should contain one character.")
+(defvar wl-thread-vertical-str             "\e$B(-\e(B"
+  "*A string for thread branch line. It should contain one character.")
+(defvar wl-thread-horizontal-str           "\e$B(,\e(B"
+  "*A string for thread branch line. It should contain one character.")
+(defvar wl-thread-space-str                "\e$B!!\e(B"
+  "*A string for thread branch line. It should contain one character.")
+
+(defvar wl-highlight-thread-indent-string-regexp "[^\\[]*"
+  "* A regexp string for thread indent...for highlight.")
+
+;; folder icons. filename relative to wl-icon-dir
+(defvar wl-opened-group-folder-icon "opened.xpm"
+  "*Icon file for opened group folder.")
+(defvar wl-closed-group-folder-icon "closed.xpm"
+  "*Icon file for closed group folder.")
+(defvar wl-nntp-folder-icon "news.xpm"
+  "*Icon file for nntp folder.")
+(defvar wl-imap-folder-icon "imap.xpm"
+  "*Icon file for imap folder.")
+(defvar wl-pop-folder-icon  "pop.xpm"
+  "*Icon file for pop folder.")
+(defvar wl-localdir-folder-icon "local.xpm"
+  "*Icon file for localdir folder.")
+(defvar wl-localnews-folder-icon "localnews.xpm"
+  "*Icon file for localnews folder.")
+(defvar wl-internal-folder-icon "internal.xpm"
+  "*Icon file for internal folder.")
+(defvar wl-multi-folder-icon "multi.xpm"
+  "*Icon file for multi folder.")
+(defvar wl-filter-folder-icon "filter.xpm"
+  "*Icon file for filter folder.")
+(defvar wl-archive-folder-icon "archive.xpm"
+  "*Icon file for archive folder.")
+(defvar wl-pipe-folder-icon "pipe.xpm"
+  "*Icon file for pipe folder.")
+(defvar wl-maildir-folder-icon "maildir.xpm"
+  "*Icon file for maildir folder.")
+(defvar wl-empty-trash-folder-icon "trash-e.xpm"
+  "*Icon file for emptied trash folder.")
+(defvar wl-trash-folder-icon "trash.xpm"
+  "*Icon file for trash folder.")
+(defvar wl-draft-folder-icon "draft.xpm"
+  "*Icon file for draft folder.")
+(defvar wl-queue-folder-icon "queue.xpm"
+  "*Icon file for queue folder.")
+(defvar wl-plugged-icon "plugged.xpm"
+  "*Icon file for plugged state.")
+(defvar wl-unplugged-icon "unplugged.xpm"
+  "*Icon file for unplugged state.")
+(defvar wl-prog-uudecode "uudecode"
+  "*uudecode program name")
+(defvar wl-prog-uudecode-arg '("-p") ;; outout is stdout.
+  "*arguments for uudecode program")
+(defvar wl-prog-uudecode-no-stdout-option nil
+  "*If non-nil, uudecode program don't have option for output to stdout.")
+
+;; Obsolete variables. for compatibility.
+(defvar wl-address-filename wl-address-file)
+(make-obsolete-variable 'wl-address-filename 'wl-address-file)
+(defvar wl-score-default-file-name wl-score-default-file)
+(make-obsolete-variable 'wl-score-default-file-name 'wl-score-default-file)
+(defvar wl-draft-prepared-config-alist nil)
+(make-obsolete-variable 'wl-draft-prepared-config-alist 'wl-draft-config-alist)
+(defvar wl-score-files-directory wl-score-files-dir)
+(make-obsolete-variable 'wl-score-files-directory 'wl-score-files-dir)
+
+;; plug
+(defvar wl-plugged-plug-on "ON")
+(defvar wl-plugged-plug-off "--")
+(defvar wl-plugged-auto-off "**")
+(defvar wl-plugged-server-indent 2)
+(defvar wl-plugged-port-indent 4)
+(defvar wl-plugged-queue-status-column 25)
+
+(provide 'wl-vars)
+
+;;; wl-vars.el ends here
diff --git a/wl/wl-xmas.el b/wl/wl-xmas.el
new file mode 100644 (file)
index 0000000..9ad923f
--- /dev/null
@@ -0,0 +1,463 @@
+;;; wl-xmas.el -- Wanderlust modules for XEmacsen.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/24 14:44:00 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(eval-when-compile
+  (require 'wl-folder)
+  (require 'wl-summary)
+  (require 'wl-draft)  
+  (require 'wl-message)
+  (require 'wl-highlight)
+  (defvar-maybe wl-draft-mode-map (make-sparse-keymap)))
+
+(defun wl-xmas-setup-toolbar (bar)
+  (let ((dir wl-icon-dir)
+       icon up down disabled name)
+    (when dir
+      (while bar
+       (setq icon (aref (car bar) 0)
+             name (symbol-name icon)
+             bar (cdr bar))
+       (when (not (boundp icon))
+         (setq up (concat dir elmo-path-sep name "-up.xpm"))
+         (setq down (concat dir elmo-path-sep name "-down.xpm"))
+         (setq disabled (concat dir elmo-path-sep name "-disabled.xpm"))
+         (if (not (file-exists-p up))
+             (setq bar nil
+                   dir nil)
+           (set icon (toolbar-make-button-list
+                      up (and (file-exists-p down) down)
+                      (and (file-exists-p disabled) disabled)))))))
+    dir))
+
+(defvar wl-use-toolbar (if (featurep 'toolbar) 'default-toolbar nil))
+(defvar wl-plugged-glyph nil)
+(defvar wl-unplugged-glyph nil)
+
+(defvar wl-folder-toolbar
+  '([wl-folder-jump-to-current-entity
+     wl-folder-jump-to-current-entity t "Enter Current Folder"]
+    [wl-folder-next-entity
+     wl-folder-next-entity t "Next Folder"]
+    [wl-folder-prev-entity
+     wl-folder-prev-entity t "Previous Folder"]
+    [wl-folder-check-current-entity
+     wl-folder-check-current-entity t "Check Current Folder"]
+;    [wl-draft
+;     wl-draft t "Write a New Message"]
+    [wl-folder-sync-current-entity
+     wl-folder-sync-current-entity t "Sync Current Folder"]
+    [wl-draft
+     wl-draft t "Write a New Message"]
+    [wl-folder-empty-trash
+     wl-folder-empty-trash t "Empty Trash"]
+    [wl-exit
+     wl-exit t "Quit Wanderlust"]
+    )
+  "The Folder buffer toolbar.")
+
+(defvar wl-summary-toolbar
+  '([wl-summary-read
+     wl-summary-read t "Read Messages"]
+    [wl-summary-next
+     wl-summary-next t "Next Message"]
+    [wl-summary-prev
+     wl-summary-prev t "Previous Message"]
+    [wl-summary-jump-to-current-message
+     wl-summary-jump-to-current-message t "Jump to Current Message"]
+    [wl-summary-sync-force-update
+     wl-summary-sync-force-update t "Sync Current Folder"]
+    [wl-summary-delete
+     wl-summary-delete t "Delete Current Message"]
+    [wl-summary-mark-as-important
+     wl-summary-mark-as-important t "Mark Current Message as Important"]
+    [wl-draft
+     wl-draft t "Write a New Message"]
+    [wl-summary-reply
+     wl-summary-reply t "Reply to Current Message" ]
+    [wl-summary-reply-with-citation
+     wl-summary-reply-with-citation t "Reply to Current Message with Citation"]
+    [wl-summary-forward
+     wl-summary-forward t "Forward Current Message"]
+    [wl-summary-exit
+     wl-summary-exit t "Exit Current Summary"]    
+    )
+  "The Summary buffer toolbar.")
+
+(defvar wl-message-toolbar
+  '([wl-message-read
+     wl-message-read t "Read Contents"]
+    [wl-message-next-content
+     wl-message-next-content t "Next Content"]
+    [wl-message-prev-content
+     wl-message-prev-content t "Previous Content"]
+    [wl-message-quit
+     wl-message-quit t "Back to Summary"]
+    [wl-message-play-content
+     wl-message-play-content t "Play Content"]
+    [wl-message-extract-content
+     wl-message-extract-content t "Extract Content"]
+    )
+  "The Message buffer toolbar.")
+
+(defalias 'wl-draft-insert-signature 'insert-signature) ;; for draft toolbar.
+
+(defvar wl-draft-toolbar
+  '([wl-draft-send-from-toolbar
+     wl-draft-send-from-toolbar t "Send Current Draft"]
+    [wl-draft-yank-original
+     wl-draft-yank-original t "Yank Displaying Message"]
+    [wl-draft-insert-signature
+     wl-draft-insert-signature t "Insert Signature"]
+    [wl-draft-kill
+     wl-draft-kill t "Kill Current Draft"]
+    )
+  "The Draft buffer toolbar.")
+
+(defun wl-xmas-setup-folder-toolbar ()
+  (and wl-use-toolbar
+       (wl-xmas-setup-toolbar wl-folder-toolbar)
+       (set-specifier (symbol-value wl-use-toolbar)
+                     (cons (current-buffer) wl-folder-toolbar))))
+
+(defun wl-xmas-setup-summary-toolbar ()
+  (and wl-use-toolbar
+       (wl-xmas-setup-toolbar wl-summary-toolbar)
+       (set-specifier (symbol-value wl-use-toolbar)
+                     (cons (current-buffer) wl-summary-toolbar))))
+
+(defun wl-xmas-setup-message-toolbar ()
+  (and wl-use-toolbar
+       (wl-xmas-setup-toolbar wl-message-toolbar)
+       (set-specifier (symbol-value wl-use-toolbar)
+                     (cons (current-buffer) wl-message-toolbar))))
+
+(defun wl-xmas-setup-draft-toolbar ()
+  (and wl-use-toolbar
+       (wl-xmas-setup-toolbar wl-draft-toolbar)
+       (set-specifier (symbol-value wl-use-toolbar)
+                     (cons (current-buffer) wl-draft-toolbar))))
+
+;; XEmacs implementations.
+(defun wl-highlight-folder-current-line (&optional numbers)
+  (interactive)
+  (save-excursion
+    (let ((highlights (list "opened" "closed"))
+         (inhibit-read-only t)
+         (fld-name (wl-folder-get-folder-name-by-id
+                    (get-text-property (point) 'wl-folder-entity-id)))
+         fregexp fsymbol bol eol matched type extent num type glyph)
+      (setq eol (progn (end-of-line) (point))
+           bol (progn (beginning-of-line) (point)))
+      (when (and fld-name (looking-at "[ \t]+\\([^ \t]+\\)"))
+       (if (and (setq extent (extent-at (match-beginning 1) nil nil nil 'at))
+                (extent-begin-glyph extent))
+           (delete-extent extent))
+       (setq extent (make-extent (match-beginning 1) (match-beginning 1)))
+       (cond
+        ((string= fld-name wl-trash-folder) ;; set trash folder icon
+         (setq num (nth 2 numbers)) ;; number of messages
+         (set-extent-begin-glyph extent
+                                 (if (or (null num) 
+                                         (eq num 0))
+                                     wl-folder-trash-empty-glyph
+                                   wl-folder-trash-glyph)))
+        ((string= fld-name wl-draft-folder) ;; set draft folder icon
+         (set-extent-begin-glyph extent wl-folder-draft-glyph))
+        ((string= fld-name wl-queue-folder)
+         (set-extent-begin-glyph extent wl-folder-queue-glyph))
+        ((and (setq type (elmo-folder-get-type fld-name))
+              (or numbers ;; XXX dirty...!!
+                  (not (assoc fld-name wl-folder-group-alist))))
+         ;; not group folder.
+         (set-extent-begin-glyph extent 
+                                 (symbol-value
+                                  (intern (format "wl-folder-%s-glyph"
+                                                  type)))))))
+      (when (and numbers (nth 0 numbers) (nth 1 numbers))
+       (setq fsymbol 
+             (let ((unsync (nth 0 numbers))
+                   (unread (nth 1 numbers)))
+               (cond ((and unsync (eq unsync 0))
+                      (if (and unread (> unread 0))
+                          'wl-highlight-folder-unread-face
+                        'wl-highlight-folder-zero-face))
+                     ((and unsync 
+                           (>= unsync wl-folder-many-unsync-threshold))
+                      'wl-highlight-folder-many-face)
+                     (t
+                      'wl-highlight-folder-few-face))))
+       (put-text-property bol eol 'face nil)
+       (put-text-property bol eol 'face fsymbol)
+       (setq matched t))
+      (while highlights
+       (setq fregexp (symbol-value 
+                      (intern (format "wl-highlight-folder-%s-regexp" 
+                                      (car highlights)))))
+       (if (not wl-highlight-group-folder-by-numbers)
+           (setq fsymbol (intern (format "wl-highlight-folder-%s-face"
+                                         (car highlights)))))
+       (when (looking-at fregexp)
+         (setq extent (make-extent (match-beginning 1) (match-end 1))
+               glyph (intern (format "wl-folder-%s-glyph"
+                                     (car highlights))))
+         (if (null (symbol-value glyph))
+             (set glyph (wl-xmas-make-icon-glyph
+                         (extent-string extent)
+                         (symbol-value
+                          (cdr (assq glyph wl-folder-toggle-icon-list))))))
+         (setq glyph (symbol-value glyph))
+         (set-extent-property extent 'end-open t)
+         (set-extent-property extent 'start-closed t)
+         (set-extent-property extent 'invisible t)
+         (set-extent-end-glyph extent glyph)
+         (put-text-property bol eol 'face nil)
+         (put-text-property bol eol 'face fsymbol)
+         (setq matched t highlights nil))
+       (setq highlights (cdr highlights)))
+      (when (not matched)
+       (put-text-property bol eol 'face nil)
+       (if (looking-at (format "^[ ]*\\(%s\\|%s\\)"
+                               wl-folder-unsubscribe-mark
+                               wl-folder-removed-mark))
+           (put-text-property bol eol 'face
+                              'wl-highlight-folder-killed-face)
+         (put-text-property bol eol 'face
+                            'wl-highlight-folder-unknown-face)))
+      (if wl-use-highlight-mouse-line 
+         (wl-highlight-folder-mouse-line))
+      (if (and (featurep 'dragdrop) wl-use-dnd)
+         (wl-dnd-set-drop-target bol eol)))))
+
+(defun wl-highlight-plugged-current-line ()
+  (interactive)
+  (save-excursion
+    (let ((inhibit-read-only t)
+         extent switch)
+      (beginning-of-line)
+      (when (looking-at "[ \t]*\\(\\[\\([^]]+\\)\\]\\)")
+       (setq switch (elmo-match-buffer 2))
+       (if (and (setq extent (extent-at (match-end 1) nil nil nil 'at))
+                (extent-end-glyph extent))
+           (delete-extent extent))
+       (setq extent (make-extent (match-beginning 1) (match-end 1)))
+       (set-extent-property extent 'end-open t)
+       (set-extent-property extent 'start-closed t)
+       (set-extent-property extent 'invisible t)
+       (set-extent-end-glyph extent (if (string= switch wl-plugged-plug-on)
+                                        wl-plugged-glyph
+                                      wl-unplugged-glyph))))))
+
+(defun wl-plugged-set-folder-icon (folder string)
+  (let ((string (copy-sequence string))
+       (len (length string))
+       type)
+    (if (string= folder wl-queue-folder)
+       (put-text-property 0 len 'begin-glyph wl-folder-queue-glyph string)
+      (if (setq type (elmo-folder-get-type folder))
+         (put-text-property 0 len
+                            'begin-glyph
+                            (symbol-value
+                             (intern (format "wl-folder-%s-glyph" type)))
+                            string)))
+    string))
+
+(defvar wl-folder-internal-icon-list
+  ;; alist of (glyph . icon-file)
+  '((wl-folder-nntp-glyph         . wl-nntp-folder-icon)
+    (wl-folder-imap4-glyph        . wl-imap-folder-icon)
+    (wl-folder-pop3-glyph         . wl-pop-folder-icon)
+    (wl-folder-localdir-glyph     . wl-localdir-folder-icon)
+    (wl-folder-localnews-glyph    . wl-localnews-folder-icon)
+    (wl-folder-internal-glyph     . wl-internal-folder-icon)
+    (wl-folder-multi-glyph        . wl-multi-folder-icon)
+    (wl-folder-filter-glyph       . wl-filter-folder-icon)
+    (wl-folder-archive-glyph      . wl-archive-folder-icon)
+    (wl-folder-pipe-glyph         . wl-pipe-folder-icon)
+    (wl-folder-maildir-glyph      . wl-maildir-folder-icon)
+    (wl-folder-trash-empty-glyph  . wl-empty-trash-folder-icon)
+    (wl-folder-draft-glyph        . wl-draft-folder-icon)
+    (wl-folder-queue-glyph        . wl-queue-folder-icon)
+    (wl-folder-trash-glyph        . wl-trash-folder-icon)))
+
+(defvar wl-folder-toggle-icon-list
+  '((wl-folder-opened-glyph       . wl-opened-group-folder-icon)
+    (wl-folder-closed-glyph       . wl-closed-group-folder-icon)))
+
+(defun wl-xmas-make-icon-glyph (icon-string icon-file &optional locale tag-set)
+  (let ((glyph (make-glyph (vector 'string :data icon-string))))
+    (if wl-highlight-folder-with-icon
+       (set-glyph-image glyph
+                        (vector 'xpm :file (expand-file-name
+                                            icon-file wl-icon-dir))
+                        locale tag-set 'prepend))
+    glyph))
+
+(defun wl-folder-init-icons ()  
+  (mapcar
+   (lambda (x)
+     (if (null (symbol-value (car x)))
+        (set (car x) (wl-xmas-make-icon-glyph "" (symbol-value (cdr x))))))
+   wl-folder-internal-icon-list))
+
+(defun wl-plugged-init-icons ()
+  (if (null wl-plugged-glyph)
+      (setq wl-plugged-glyph
+           (wl-xmas-make-icon-glyph
+            (concat "[" wl-plugged-plug-on "]")
+            wl-plugged-icon)))
+  (if (null wl-unplugged-glyph)
+      (setq wl-unplugged-glyph
+           (wl-xmas-make-icon-glyph
+            (concat "[" wl-plugged-plug-off "]")
+            wl-unplugged-icon))))
+
+(defun wl-make-modeline ()
+  "Make modeline for Wanderlust"
+  (wl-plugged-init-icons)
+  (let ((extent (make-extent nil nil))
+       (toggle-keymap (make-sparse-keymap)))
+    (define-key toggle-keymap 'button2 (make-modeline-command-wrapper
+                                       'wl-toggle-plugged))
+    (set-extent-keymap extent toggle-keymap)
+    (set-extent-property extent 'help-echo "button2 toggles plugged status")
+    (setq wl-plug-state-indicator-on (cons extent wl-plugged-glyph))
+    (setq wl-plug-state-indicator-off (cons extent wl-unplugged-glyph))
+    (setq wl-plug-state-indicator (if wl-plugged 
+                                     wl-plug-state-indicator-on
+                                   wl-plug-state-indicator-off)))
+  (wl-make-modeline-subr))
+
+(defun wl-make-date-string ()
+  (let ((s (current-time-string)))
+    (string-match "\\`\\([A-Z][a-z][a-z]\\) +[A-Z][a-z][a-z] +[0-9][0-9]? *[0-9][0-9]?:[0-9][0-9]:[0-9][0-9] *[0-9]?[0-9]?[0-9][0-9]"
+                 s)
+    (concat (wl-match-string 1 s) ", "
+           (timezone-make-date-arpa-standard s (current-time-zone)))))
+
+
+(defun wl-xmas-setup-folder ()
+  (and (featurep 'scrollbar)
+       (set-specifier scrollbar-height (cons (current-buffer) 0)))
+  (wl-xmas-setup-folder-toolbar))
+
+(defun wl-xmas-setup-summary ()
+  (make-local-variable 'dragdrop-drop-functions)
+  (setq dragdrop-drop-functions '((wl-dnd-default-drop-message t t)))
+  (and (featurep 'scrollbar)
+       (set-specifier scrollbar-height (cons (current-buffer) 0)))
+  (wl-xmas-setup-summary-toolbar))
+
+(defun wl-message-overload-functions ()
+  (wl-xmas-setup-message-toolbar)
+  (local-set-key "l" 'wl-message-toggle-disp-summary)
+  (local-set-key 'button2 'wl-message-refer-article-or-url)
+  (local-set-key 'button4 'wl-message-wheel-down)
+  (local-set-key 'button5 'wl-message-wheel-up)
+  (local-set-key [(shift button4)] 'wl-message-wheel-down)
+  (local-set-key [(shift button5)] 'wl-message-wheel-up))
+
+(defun wl-message-wheel-up (event)
+  (interactive "e")
+  (let ((cur-buf (current-buffer))
+       proceed)
+    (save-selected-window
+      (select-window (event-window event))
+      (set-buffer cur-buf)
+      (setq proceed (wl-message-next-page)))
+    (if proceed
+       (if (memq 'shift (event-modifiers event))
+           (wl-summary-down t)
+         (wl-summary-next t)))))
+
+(defun wl-message-wheel-down (event)
+  (interactive "e")
+  (let ((cur-buf (current-buffer))
+       proceed)
+    (save-selected-window
+      (select-window (event-window event))
+      (set-buffer cur-buf)
+      (setq proceed (wl-message-prev-page)))
+    (if proceed
+       (if (memq 'shift (event-modifiers event))
+           (wl-summary-up t)
+         (wl-summary-prev t)))))
+
+(defun wl-draft-overload-menubar ()
+  (add-menu-item '("Mail") "Send, Keep Editing" 
+                'wl-draft-send t "Send Mail")
+  (add-menu-item '("Mail") "Send Message" 
+                'wl-draft-send-and-exit t "Send and Exit")
+  (delete-menu-item '("Mail" "Send Mail"))
+  (delete-menu-item '("Mail" "Send and Exit"))
+  )
+
+(defun wl-draft-mode-setup ()
+  (require 'derived)
+  (define-derived-mode wl-draft-mode mail-mode "Draft"
+    "draft mode for Wanderlust derived from mail mode.
+See info under Wanderlust for full documentation.
+
+Special commands:
+\\{wl-draft-mode-map}"))
+
+(defun wl-draft-key-setup ()
+  (define-key wl-draft-mode-map "\C-c\C-y" 'wl-draft-yank-original)
+  (define-key wl-draft-mode-map "\C-c\C-s" 'wl-draft-send)
+  (define-key wl-draft-mode-map "\C-c\C-a" 'wl-draft-insert-x-face-field)
+  (define-key wl-draft-mode-map "\C-c\C-c" 'wl-draft-send-and-exit)
+  (define-key wl-draft-mode-map "\C-c\C-z" 'wl-draft-save-and-exit)
+  (define-key wl-draft-mode-map "\C-c\C-k" 'wl-draft-kill)
+  (define-key wl-draft-mode-map "\C-l" 'wl-draft-highlight-and-recenter)
+  (define-key wl-draft-mode-map "\C-i" 'wl-complete-field-body-or-tab)
+  (define-key wl-draft-mode-map "\C-c\C-r" 'wl-draft-caesar-region)
+  (define-key wl-draft-mode-map "\M-t" 'wl-toggle-plugged)
+  (define-key wl-draft-mode-map "\C-c\C-o" 'wl-jump-to-draft-buffer)
+  (define-key wl-draft-mode-map "\C-c\C-e" 'wl-draft-config-exec)
+  (define-key wl-draft-mode-map "\C-c\C-j" 'wl-template-select)
+  (define-key wl-draft-mode-map "\C-c\C-p" 'wl-draft-preview-message)
+  (define-key wl-draft-mode-map "\C-x\C-s" 'wl-draft-save)
+  (define-key wl-draft-mode-map "\C-xk"    'wl-draft-mimic-kill-buffer))
+
+(defun wl-draft-overload-functions ()
+  (setq mode-line-buffer-identification
+       (format "Wanderlust: %s" (buffer-name)))
+  (local-set-key "\C-c\C-s" 'wl-draft-send) ; override
+  (wl-xmas-setup-draft-toolbar)
+  (wl-draft-overload-menubar)
+  (when wl-show-plug-status-on-modeline
+    (setq mode-line-format (wl-make-modeline))))
+
+(defalias 'wl-defface 'defface)
+
+(provide 'wl-xmas)
+
+;;; wl-xmas.el ends here
diff --git a/wl/wl.el b/wl/wl.el
new file mode 100644 (file)
index 0000000..3efc943
--- /dev/null
+++ b/wl/wl.el
@@ -0,0 +1,811 @@
+;;; wl.el -- Wanderlust bootstrap.
+
+;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+
+;; Author: Yuuichi Teranishi <teranisi@gohome.org>
+;; Keywords: mail, net news
+;; Time-stamp: <00/03/22 15:44:44 teranisi>
+
+;; This file is part of Wanderlust (Yet Another Message Interface on Emacsen).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+;;
+
+;;; Commentary:
+;; 
+
+;;; Code:
+;; 
+
+(require 'elmo2)
+;; from x-face.el
+(unless (and (fboundp 'defgroup)
+             (fboundp 'defcustom))
+  (require 'backquote)
+  (defmacro defgroup (&rest args))
+  (defmacro defcustom (symbol value &optional doc &rest args)
+    (let ((doc (concat "*" (or doc ""))))
+      (` (defvar (, symbol) (, value) (, doc))))))
+
+(require 'wl-vars)
+(require 'wl-util)
+
+(if wl-on-xemacs
+    (require 'wl-xmas)
+  (if wl-on-nemacs
+      (require 'wl-nemacs)
+    (require 'wl-mule)))
+
+(provide 'wl) ; circular dependency
+(require 'wl-folder)
+(require 'wl-summary)
+(require 'wl-thread)
+(require 'wl-address)
+
+(wl-draft-mode-setup)
+(require 'wl-draft)
+(wl-draft-key-setup)
+
+(require 'wl-demo)
+(require 'wl-highlight)
+
+(eval-when-compile 
+  (require 'smtp)
+  (require 'wl-score)
+  (unless wl-on-nemacs
+    (require 'wl-fldmgr))
+  (if wl-use-semi
+      (require 'wl-mime)
+    (require 'tm-wl)))
+
+(defun wl-plugged-init (&optional make-alist)
+  (setq elmo-plugged wl-plugged)
+  (if wl-reset-plugged-alist
+      (elmo-set-plugged elmo-plugged))
+  (when make-alist
+    (wl-make-plugged-alist))
+  ;; Plug status.
+  (setq elmo-plugged (setq wl-plugged (elmo-plugged-p)))
+  (setq wl-plug-state-indicator
+       (if wl-plugged
+           wl-plug-state-indicator-on
+         wl-plug-state-indicator-off))
+  (force-mode-line-update t))
+
+(defun wl-toggle-plugged (&optional arg queue-flush-only)
+  (interactive)
+  (elmo-quit) ; Disconnect current connection.
+  (unless queue-flush-only
+    (cond
+     ((eq arg 'on)
+      (setq wl-plugged t))
+     ((eq arg 'off)
+      (setq wl-plugged nil))
+     (t (setq wl-plugged (null wl-plugged))))
+    (elmo-set-plugged wl-plugged))
+  (setq elmo-plugged wl-plugged)
+  (save-excursion
+    (mapcar 
+     (function 
+      (lambda (x)
+       (set-buffer x)
+       (wl-summary-msgdb-save)
+       ;; msgdb is saved, but cache is not saved yet.
+       (wl-summary-set-message-modified)))
+     (wl-collect-summary)))
+  (if wl-plugged
+      (progn
+       ;; flush queue!!
+       (setq wl-plug-state-indicator wl-plug-state-indicator-on)
+       (elmo-dop-queue-flush)
+       (if (and wl-draft-enable-queuing
+                wl-auto-flush-queue)
+           (wl-draft-queue-flush))
+       (when (and (eq major-mode 'wl-summary-mode)
+                  (elmo-folder-plugged-p wl-summary-buffer-folder-name))
+         (let* ((msgdb-dir (elmo-msgdb-expand-path
+                            wl-summary-buffer-folder-name))
+                (seen-list (elmo-msgdb-seen-load msgdb-dir)))
+           (setq seen-list
+                 (wl-summary-flush-pending-append-operations seen-list))
+           (elmo-msgdb-seen-save msgdb-dir seen-list)))
+       (run-hooks 'wl-plugged-hook))
+    (setq wl-plug-state-indicator wl-plug-state-indicator-off)
+    (run-hooks 'wl-unplugged-hook))
+  (force-mode-line-update t))
+
+;;; wl-plugged-mode
+
+(defvar wl-plugged-port-label-alist
+  (list (cons elmo-default-nntp-port "nntp")
+       (cons elmo-default-imap4-port "imap4")
+       (cons elmo-default-pop3-port "pop3")))
+       ;;(cons elmo-pop-before-smtp-port "pop3")
+
+(defconst wl-plugged-switch-variables
+  '(("Queuing" . wl-draft-enable-queuing)
+    ("AutoFlushQueue" . wl-auto-flush-queue)
+    ("DisconnectedOperation" . elmo-enable-disconnected-operation)))
+(defvar wl-plugged-buf-name "Plugged")
+(defvar wl-plugged-mode-map nil)
+(defvar wl-plugged-alist nil)
+(defvar wl-plugged-switch nil)
+(defvar wl-plugged-winconf nil)
+(defvar wl-plugged-sending-queue-alist nil)
+(defvar wl-plugged-dop-queue-alist nil)
+(defvar wl-plugged-alist-modified nil)
+
+(defvar wl-plugged-glyph nil)
+(defvar wl-unplugged-glyph nil)
+
+(defvar wl-plugged-mode-menu-spec
+  '("Plugged"
+    ["Toggle plugged" wl-plugged-toggle t]
+    ["Toggle All plugged" wl-plugged-toggle-all t]
+    ["Prev Port"      wl-plugged-move-to-previous t]
+    ["Next Port"      wl-plugged-move-to-next t]
+    ["Prev Server"    wl-plugged-move-to-previous-server t]
+    ["Next Server"    wl-plugged-move-to-next-server t]
+    ["Flush queue"    wl-plugged-flush-queue t]
+    "----"
+    ["Exit"           wl-plugged-exit t]))
+
+(eval-and-compile
+  (if wl-on-xemacs
+      (defun wl-plugged-setup-mouse ()
+       (define-key wl-plugged-mode-map 'button2 'wl-plugged-click))
+    (if wl-on-nemacs
+       (defun wl-plugged-setup-mouse ())
+      (defun wl-plugged-setup-mouse ()
+       (define-key wl-plugged-mode-map [mouse-2] 'wl-plugged-click)))))
+
+(unless wl-plugged-mode-map
+  (setq wl-plugged-mode-map (make-sparse-keymap))
+  (define-key wl-plugged-mode-map " "    'wl-plugged-toggle)
+  (define-key wl-plugged-mode-map "\C-m" 'wl-plugged-toggle)
+  (define-key wl-plugged-mode-map "\M-t" 'wl-plugged-toggle-all)
+  (define-key wl-plugged-mode-map "q"    'wl-plugged-exit)
+  (define-key wl-plugged-mode-map "\C-t" 'wl-plugged-exit)
+  (define-key wl-plugged-mode-map "F"    'wl-plugged-flush-queue)
+  (define-key wl-plugged-mode-map "P"    'wl-plugged-move-to-previous-server)
+  (define-key wl-plugged-mode-map "N"    'wl-plugged-move-to-next-server)
+  (define-key wl-plugged-mode-map "p"    'wl-plugged-move-to-previous)
+  (define-key wl-plugged-mode-map "n"    'wl-plugged-move-to-next)
+  (define-key wl-plugged-mode-map "\e\t" 'wl-plugged-move-to-previous)
+  (define-key wl-plugged-mode-map "\t"   'wl-plugged-move-to-next)
+  (wl-plugged-setup-mouse)
+  (easy-menu-define
+   wl-plugged-mode-menu
+   wl-plugged-mode-map
+   "Menu used in Plugged mode."
+   wl-plugged-mode-menu-spec))
+
+(defun wl-plugged-mode ()
+  "Mode for setting Wanderlust plugged.
+See info under Wanderlust for full documentation.
+
+Special commands:
+\\{wl-plugged-mode-map}
+
+Entering Plugged mode calls the value of `wl-plugged-mode-hook'."
+  (interactive)
+  (kill-all-local-variables)
+  (use-local-map wl-plugged-mode-map)
+  (setq major-mode 'wl-plugged-mode)
+  (setq mode-name "Plugged")
+  (easy-menu-add wl-plugged-mode-menu)
+  (when wl-show-plug-status-on-modeline 
+    (setq mode-line-format (wl-make-modeline)))
+  (setq wl-plugged-switch wl-plugged)
+  (setq wl-plugged-alist-modified nil)
+  (setq buffer-read-only t)
+  (run-hooks 'wl-plugged-mode-hook))
+
+(defmacro wl-plugged-string (plugged &optional time)
+  (` (if (, time) wl-plugged-auto-off
+       (if (, plugged) wl-plugged-plug-on wl-plugged-plug-off))))
+
+(defmacro wl-plugged-server-indent ()
+  (` (make-string wl-plugged-server-indent ? )))
+
+(defun wl-plugged-set-variables ()
+  (setq wl-plugged-sending-queue-alist
+       (wl-plugged-sending-queue-info))
+  (setq wl-plugged-dop-queue-alist
+       (wl-plugged-dop-queue-info))
+  (setq wl-plugged-alist
+       (sort (copy-sequence elmo-plugged-alist)
+             '(lambda (a b)
+                (string< (caar a) (caar b))))))
+
+(defun wl-plugged-sending-queue-info ()
+  ;; sending queue status
+  (let (alist msgs sent-via server port)
+    (setq msgs (elmo-list-folder wl-queue-folder))
+    (while msgs
+      (setq sent-via (wl-draft-queue-info-operation (car msgs) 'get-sent-via))
+      (while sent-via
+       (when (eq (nth 1 (car sent-via)) 'unplugged)
+         (setq server (car (nth 2 (car sent-via)))
+               port (cdr (nth 2 (car sent-via))))
+         (elmo-plugged-p server port)  ;; add elmo-plugged-alist if nothing.
+         (setq alist
+               (wl-append-assoc-list
+                (cons server port)
+                (car msgs)
+                alist)))
+       (setq sent-via (cdr sent-via)))
+      (setq msgs (cdr msgs)))
+    alist))
+
+(defun wl-plugged-sending-queue-status (qinfo)
+  ;; sending queue status
+  (let ((len (length (cdr qinfo))))
+    (concat (wl-plugged-set-folder-icon
+            wl-queue-folder
+            (wl-folder-get-petname wl-queue-folder))
+           (if (> len 1)
+               (format ": %d msgs (" len)
+             (format ": %d msg (" len))
+           (mapconcat (function int-to-string) (cdr qinfo) ",")
+           ")")))
+
+(defun wl-plugged-dop-queue-info ()
+  ;; dop queue status
+  (let* ((count 0)
+        elmo-dop-queue dop-queue last alist server-info
+        ope operation)
+    (elmo-dop-queue-load)
+    (elmo-dop-queue-merge)
+    (setq dop-queue (sort elmo-dop-queue '(lambda (a b)
+                                           (string< (car a) (car b)))))
+    (wl-append dop-queue (list nil)) ;; terminate(dummy)
+    (setq last (caar dop-queue)) ;; first
+    (while dop-queue
+      (setq ope (cons (nth 1 (car dop-queue))
+                     (length (nth 2 (car dop-queue)))))
+      (if (string= last (caar dop-queue))
+         (wl-append operation (list ope))
+       ;;(setq count (1+ count))
+       (when (and last (setq server-info (elmo-folder-portinfo last)))
+         (setq alist
+               (wl-append-assoc-list
+                (cons (car server-info) (nth 1 server-info)) ;; server port
+                (cons last operation)
+                alist)))
+       (setq last (caar dop-queue)
+             operation (list ope)))
+      (setq dop-queue (cdr dop-queue)))
+    alist))
+
+(defun wl-plugged-dop-queue-status (qinfo &optional column)
+  ;; dop queue status
+  (let ((operations (cdr qinfo))
+       (column (or column wl-plugged-queue-status-column)))
+    (mapconcat
+     '(lambda (folder-ope)
+       (concat (wl-plugged-set-folder-icon
+                (car folder-ope)
+                (wl-folder-get-petname (car folder-ope)))
+               "("
+               (mapconcat
+                '(lambda (ope)
+                   (if (> (cdr ope) 0)
+                       (format "%s:%d" (car ope) (cdr ope))
+                     (format "%s" (car ope))))
+                (cdr folder-ope) ",")
+               ")"))
+     operations
+     (concat "\n" (wl-set-string-width column "")))))
+
+(defun wl-plugged-drawing (plugged-alist)
+  (let ((buffer-read-only nil)
+       (alist plugged-alist)
+       (vars wl-plugged-switch-variables)
+       last server port label plugged time
+       line len qinfo column)
+    (erase-buffer)
+    (while vars
+      (insert (format "%s:[%s]%s"
+                     (caar vars)
+                     (wl-plugged-string (symbol-value (cdar vars)))
+                     (if (cdr vars) " " "")))
+      (setq vars (cdr vars)))
+    (insert "\n")
+    (let ((elmo-plugged wl-plugged-switch))
+      (setq line (format "[%s](wl-plugged)"
+                        (wl-plugged-string (elmo-plugged-p))))
+      ;; sending queue status
+      (when (setq qinfo (assoc (cons nil nil) wl-plugged-sending-queue-alist))
+       (setq line (concat
+                   (wl-set-string-width wl-plugged-queue-status-column line)
+                   (wl-plugged-sending-queue-status qinfo))))
+      (insert line "\n"))
+    (while alist
+      (setq server (caaar alist)
+           port (cdaar alist)
+           label (nth 1 (car alist))
+           plugged (nth 2 (car alist))
+           time (nth 3 (car alist)))
+      (unless (string= last server)
+       ;; server plug
+       (insert (format "%s[%s]%s\n"
+                       (wl-plugged-server-indent)
+                       (wl-plugged-string
+                        (elmo-plugged-p server nil plugged-alist))
+                       server))
+       (setq last server))
+      ;; port plug
+      (setq line
+           (format "%s[%s]%s"
+                   (make-string wl-plugged-port-indent ? )
+                   (wl-plugged-string plugged time)
+                   (cond
+                    ((stringp port)
+                     port)
+                    (t
+                     (format "%s(%d)"
+                             (or label
+                                 (cdr (assq port wl-plugged-port-label-alist))
+                                 "")
+                             port)))))
+      (setq column (max (if line (1+ (string-width line)) 0)
+                       wl-plugged-queue-status-column))
+      (cond
+       ;; sending queue status
+       ((setq qinfo (assoc (cons server port) wl-plugged-sending-queue-alist))
+       (setq line
+             (concat
+              (wl-set-string-width column line)
+              (wl-plugged-sending-queue-status qinfo))))
+       ;; dop queue status
+       ((setq qinfo (assoc (cons server port) wl-plugged-dop-queue-alist))
+       (setq line
+             (concat
+              (wl-set-string-width column line)
+              (wl-plugged-dop-queue-status qinfo column)))))
+      (insert line "\n")
+      (setq alist (cdr alist)))
+    (delete-region (1- (point-max)) (point-max)) ;; delete line at the end.
+    (goto-char (point-min))
+    (while (not (eobp))
+      (wl-highlight-plugged-current-line)
+      (forward-line 1)))
+  (set-buffer-modified-p nil)
+  (count-lines (point-min) (point-max)))
+
+(defun wl-plugged-redrawing-switch (indent switch &optional time)
+  (beginning-of-line)
+  (when (re-search-forward
+        (format "^%s\\[\\([^]]+\\)\\]" (make-string indent ? )))
+    (goto-char (match-beginning 1))
+    (delete-region (match-beginning 1) (match-end 1))
+    (insert (wl-plugged-string switch time))
+    (wl-highlight-plugged-current-line)
+    (forward-line 1)))
+
+(defun wl-plugged-redrawing (plugged-alist)
+  (let ((buffer-read-only nil)
+       (alist plugged-alist)
+       last server port plugged time)
+    (goto-char (point-min))
+    (wl-plugged-redrawing-switch 0 (elmo-plugged-p))
+    (while alist
+      (setq server (caaar alist)
+           port (cdaar alist)
+           plugged (nth 2 (car alist))
+           time (nth 3 (car alist)))
+      (unless (string= last server)
+       ;; server plug
+       (wl-plugged-redrawing-switch
+        wl-plugged-server-indent
+        (elmo-plugged-p server nil plugged-alist))
+       (setq last server))
+      ;; port plug
+      (wl-plugged-redrawing-switch
+       wl-plugged-port-indent plugged time)
+      (setq alist (cdr alist))))
+  (set-buffer-modified-p nil))
+
+(defun wl-plugged-change ()
+  (interactive)
+  (if (not elmo-plugged-alist)
+      (message "No plugged info")
+    (setq wl-plugged-winconf (current-window-configuration))
+    (let* ((cur-win (selected-window))
+          (max-lines (if (eq major-mode 'wl-summary-mode)
+                         (/ (frame-height) 2)
+                       (window-height)))
+          window-lines lines)
+      (save-excursion
+       (set-buffer (get-buffer-create wl-plugged-buf-name))
+       (wl-plugged-mode)
+       (buffer-disable-undo (current-buffer))
+       (delete-windows-on (current-buffer))
+       (wl-plugged-set-variables)
+       (setq lines (wl-plugged-drawing wl-plugged-alist)))
+      (select-window cur-win)
+      (setq window-lines (min max-lines (max lines window-min-height)))
+      (when (> (- (window-height) window-lines) window-min-height)
+       (split-window cur-win (- (window-height) window-lines)))
+      (switch-to-buffer wl-plugged-buf-name)
+      (condition-case nil
+         (progn
+           (enlarge-window (- window-lines (window-height)))
+           (when (fboundp 'pos-visible-in-window-p)
+             (goto-char (point-min))
+             (while (and (<= (window-height) max-lines)
+                         (not (pos-visible-in-window-p (1- (point-max)))))
+               (enlarge-window 2))))
+       (error))
+      (goto-char (point-min))
+      (forward-line 1)
+      (wl-plugged-move-to-next)))) ;; goto first entry
+
+(defsubst wl-plugged-get-server ()
+  (save-excursion
+    (end-of-line)
+    (wl-plugged-move-to-previous-server)
+    (beginning-of-line)
+    (when (looking-at (format "^%s\\[[^]]+\\]\\(.*\\)"
+                             (wl-plugged-server-indent)))
+      (elmo-match-buffer 1))))
+
+(defun wl-plugged-toggle ()
+  (interactive)
+  (let ((cur-point (point)))
+    (save-excursion
+      (beginning-of-line)
+      (cond
+       ;; swtich variable
+       ((bobp)
+       (let (variable switch name)
+         (goto-char cur-point)
+         (when (and (not (bobp))
+                    (not (eq (char-before) ? )))
+           (if (re-search-backward " [^ ]+" nil t)
+               (forward-char 1)
+             (re-search-backward "^[^ ]+" nil t)))
+         (when (looking-at "\\([^ :[]+\\):?\\[\\([^]]+\\)\\]")
+           (setq name (elmo-match-buffer 1))
+           (setq switch (not (string= (elmo-match-buffer 2) wl-plugged-plug-on)))
+           (when (setq variable (cdr (assoc name wl-plugged-switch-variables)))
+             (set variable switch))
+           (goto-char (match-beginning 2))
+           (let ((buffer-read-only nil))
+             (delete-region (match-beginning 2) (match-end 2))
+             (insert (wl-plugged-string switch))
+             (set-buffer-modified-p nil)))))
+       ;; swtich plug
+       ((looking-at "^\\( *\\)\\[\\([^]]+\\)\\]\\([^ \n]*\\)")
+       (let* ((indent (length (elmo-match-buffer 1)))
+              (switch (elmo-match-buffer 2))
+              (name (elmo-match-buffer 3))
+              (plugged (not (string= switch wl-plugged-plug-on)))
+              (alist wl-plugged-alist)
+              server port)
+         (cond
+          ((eq indent wl-plugged-port-indent)  ;; toggle port plug
+           (cond
+            ((string-match "\\([^([]*\\)(\\([^)[]+\\))" name)
+             (setq port (string-to-int (elmo-match-string 2 name))))
+            (t
+             (setq port name)))
+           (setq server (wl-plugged-get-server))
+           (elmo-set-plugged plugged server port nil alist))
+          ((eq indent wl-plugged-server-indent)  ;; toggle server plug
+           (elmo-set-plugged plugged name nil nil alist))
+          ((eq indent 0)  ;; toggle all plug
+           (elmo-set-plugged plugged nil nil nil alist)))
+         ;; redraw
+         (wl-plugged-redrawing wl-plugged-alist)
+         ;; change wl-plug-state-indicator
+         (let ((elmo-plugged wl-plugged-switch))
+           (setq wl-plugged-switch (elmo-plugged-p))
+           (setq wl-plug-state-indicator
+                 (if wl-plugged-switch
+                     wl-plug-state-indicator-on
+                   wl-plug-state-indicator-off))
+           (force-mode-line-update t))))))
+    (setq wl-plugged-alist-modified t)
+    (goto-char cur-point)))
+
+(defun wl-plugged-click (e)
+  (interactive "e")
+  (mouse-set-point e)
+  (wl-plugged-toggle))
+
+(defun wl-plugged-toggle-all ()
+  (interactive)
+  (let ((cur-point (point)))
+    (setq wl-plugged-switch (not wl-plugged-switch))
+    (elmo-set-plugged wl-plugged-switch nil nil nil wl-plugged-alist)
+    (wl-plugged-redrawing wl-plugged-alist)
+    (goto-char cur-point)
+    (setq wl-plugged-alist-modified t)
+    ;; change wl-plug-state-indicator
+    (setq wl-plug-state-indicator
+         (if wl-plugged-switch
+             wl-plug-state-indicator-on
+           wl-plug-state-indicator-off))
+    (force-mode-line-update t)))
+
+(defun wl-plugged-exit ()
+  (interactive)
+  (setq ;;elmo-plugged-alist wl-plugged-alist
+       wl-plugged wl-plugged-switch
+       wl-plugged-alist nil
+       wl-plugged-sending-queue-alist nil
+       wl-plugged-dop-queue-alist nil)
+  (run-hooks 'wl-plugged-exit-hook)
+  (when wl-plugged-alist-modified
+    (wl-toggle-plugged (if wl-plugged 'on 'off) t))
+  (kill-buffer (current-buffer))
+  (if wl-plugged-winconf
+      (set-window-configuration wl-plugged-winconf)))
+
+(defun wl-plugged-flush-queue ()
+  (interactive)
+  (let ((cur-point (point))
+       (dop-status (elmo-dop-queue-flush))
+       (send-status (wl-draft-queue-flush)))
+    (unless (or dop-status send-status)
+      (message "No processing queue."))
+    (wl-plugged-set-variables)
+    (wl-plugged-drawing wl-plugged-alist)
+    (goto-char cur-point)))
+
+(defun wl-plugged-move-to-next ()
+  (interactive)
+  (when (re-search-forward "\\[\\([^]]+\\)\\]" nil t)
+    (let ((pos (match-beginning 1)))
+      (if (invisible-p pos)
+         (goto-char (next-visible-point pos))
+       (goto-char pos)))))
+
+(defun wl-plugged-move-to-previous ()
+  (interactive)
+  (if (eq (char-before) ?\]) (forward-char -1))
+  (when (re-search-backward "\\[\\([^]]+\\)\\]" nil t)
+    (let ((pos (match-beginning 1)))
+      (if (invisible-p pos)
+         (goto-char (next-visible-point pos))
+       (goto-char pos)))))
+
+(defun wl-plugged-move-to-next-server ()
+  (interactive)
+  (let ((regexp
+        (format "^%s\\[\\([^]]+\\)\\]" (wl-plugged-server-indent)))
+       point)
+    (save-excursion
+      (end-of-line)
+      (if (re-search-forward regexp nil t)
+         (setq point (match-beginning 1))))
+    (if point (goto-char point))))
+
+(defun wl-plugged-move-to-previous-server ()
+  (interactive)
+  (let ((regexp
+        (format "^%s\\[\\([^]]+\\)\\]" (wl-plugged-server-indent))))
+    (if (re-search-backward regexp nil t)
+       (goto-char (match-beginning 1)))))
+
+;;; end of wl-plugged-mode
+
+(defun wl-save ()
+  "Save summary and folder status."
+  (interactive)
+  (wl-save-status 'keep-summary))
+
+(defun wl-save-status (&optional keep-summary)
+  (message "Saving summary and folder status...")
+  (let (summary-buf)
+    (save-excursion
+      (let ((summaries (wl-collect-summary)))
+       (mapcar 
+        (function
+         (lambda (x)
+           (set-buffer x)
+           (unless keep-summary
+             (wl-summary-cleanup-temp-marks))
+           (wl-summary-save-status keep-summary)
+           (unless keep-summary
+             (kill-buffer x))))
+        summaries))))
+  (wl-refile-alist-save
+   wl-refile-alist-file-name wl-refile-alist)
+  (wl-refile-alist-save
+   wl-refile-msgid-alist-file-name wl-refile-msgid-alist)
+  (wl-folder-info-save)
+  (and (featurep 'wl-fldmgr) (wl-fldmgr-exit))
+  (wl-crosspost-alist-save)
+  (message "Saving summary and folder status...done."))
+
+(defun wl-exit ()
+  (interactive)
+  (when (or (not wl-interactive-exit)
+           (y-or-n-p "Quit Wanderlust?"))
+    (elmo-quit)
+    (run-hooks 'wl-exit-hook)
+    (wl-save-status)
+    (wl-folder-cleanup-variables)
+    (elmo-cleanup-variables)
+    (wl-kill-buffers
+     (format "^\\(%s\\)$"
+            (mapconcat 'identity
+                       (list (format "%s\\(:.*\\)?"
+                                     (default-value 'wl-message-buf-name))
+                             wl-original-buf-name
+                             wl-folder-buffer-name)
+                       "\\|")))
+    (elmo-buffer-cache-clean-up)
+    (if (fboundp 'mmelmo-cleanup-entity-buffers)
+       (mmelmo-cleanup-entity-buffers))
+    (setq wl-init nil)
+    (unless wl-on-nemacs
+      (remove-hook 'kill-emacs-hook 'wl-save-status))
+    t)
+  (message "") ;; empty minibuffer.
+  )
+
+(defun wl-init (&optional arg)
+  (when (not wl-init)
+    (setq elmo-plugged wl-plugged)
+    (let (succeed demo-buf)
+      (if wl-demo
+         (setq demo-buf (wl-demo)))
+      (unless wl-on-nemacs
+       (add-hook 'kill-emacs-hook 'wl-save-status))
+      (unwind-protect
+         (progn
+           (wl-address-init)
+           (wl-draft-setup)
+           (wl-refile-alist-setup)
+           (wl-crosspost-alist-load)
+           (if wl-use-semi
+               (progn
+                 (require 'wl-mime)
+                 (setq elmo-use-semi t))
+             (require 'tm-wl)
+             (setq elmo-use-semi nil))
+           ;; defined above.
+           (wl-mime-setup)
+           (fset 'wl-summary-from-func-internal 
+                 (symbol-value 'wl-summary-from-func))
+           (fset 'wl-summary-subject-func-internal 
+                 (symbol-value 'wl-summary-subject-func))
+           (fset 'wl-summary-subject-filter-func-internal 
+                 (symbol-value 'wl-summary-subject-filter-func))
+           (setq elmo-no-from wl-summary-no-from-message)
+           (setq elmo-no-subject wl-summary-no-subject-message)
+           (setq succeed t)
+           (progn
+             (message "Checking environment...")
+             (wl-check-environment arg)
+             (message "Checking environment...done.")))
+       (if demo-buf
+           (kill-buffer demo-buf))
+       (if succeed
+           (setq wl-init t))
+       (run-hooks 'wl-init-hook)))))
+
+(defun wl-check-environment (no-check-folder)
+  (unless (featurep 'mime-setup)
+    (require 'mime-setup))
+  (unless wl-from
+    (error "Please set `wl-from'"))
+  (unless (string-match "[^.]\\.[^.]" (or wl-message-id-domain
+                                         (if wl-local-domain
+                                             (concat (system-name)
+                                                     "." wl-local-domain)
+                                           (system-name))))
+    (error "Please set `wl-local-domain' to get valid FQDN"))
+  (when (not no-check-folder)
+    (if (not (eq (elmo-folder-get-type wl-draft-folder) 'localdir))
+       (error "%s is not allowed for draft folder" wl-draft-folder))
+    (unless (elmo-folder-exists-p wl-draft-folder)
+      (if (y-or-n-p 
+          (format "Draft Folder %s does not exist, create it?" 
+                  wl-draft-folder))
+         (elmo-create-folder wl-draft-folder)
+       (error "Draft Folder is not created")))
+    (if (and wl-draft-enable-queuing
+            (not (elmo-folder-exists-p wl-queue-folder)))
+       (if (y-or-n-p 
+            (format "Queue Folder %s does not exist, create it?" 
+                    wl-queue-folder))
+           (elmo-create-folder wl-queue-folder)
+         (error "Queue Folder is not created")))
+    (unless (elmo-folder-exists-p wl-trash-folder)
+      (if (y-or-n-p 
+          (format "Trash Folder %s does not exist, create it?" 
+                  wl-trash-folder))
+         (elmo-create-folder wl-trash-folder)
+       (error "Trash Folder is not created")))
+    (unless (elmo-folder-exists-p elmo-lost+found-folder)
+      (elmo-create-folder elmo-lost+found-folder)))
+  (unless (file-exists-p wl-tmp-dir)
+    (if (y-or-n-p 
+        (format "Temp directory (to save multipart) %s does not exist, create it now?" 
+                wl-tmp-dir))
+       (make-directory wl-tmp-dir)
+      (error "Temp directory is not created"))))
+
+;;;###autoload
+(defun wl (&optional arg)
+  "Start Wanderlust -- Yet Another Message Interface On Emacsen.
+If prefix argument is specified, folder checkings are skipped."
+  (interactive "P")
+  (unless wl-init
+    (wl-load-profile))
+  (unwind-protect
+      (wl-init arg)
+    (let ((make (wl-folder arg)))
+      (wl-plugged-init make)))
+  (run-hooks 'wl-hook))
+
+;; Define some autoload functions WL might use.
+(eval-and-compile
+  ;; This little mapcar goes through the list below and marks the
+  ;; symbols in question as autoloaded functions.
+  (mapcar
+   (function
+    (lambda (package)
+      (let ((interactive (nth 1 (memq ':interactive package))))
+       (mapcar
+        (function
+         (lambda (function)
+           (let (keymap)
+             (when (consp function)
+               (setq keymap (car (memq 'keymap function)))
+               (setq function (car function)))
+             (autoload function (car package) nil interactive keymap))))
+        (if (eq (nth 1 package) ':interactive)
+            (cdddr package)
+          (cdr package))))))
+   '(("wl-fldmgr" :interactive t
+      wl-fldmgr-access-display-all wl-fldmgr-access-display-normal
+      wl-fldmgr-add wl-fldmgr-clear-cut-entity-list wl-fldmgr-copy
+      wl-fldmgr-copy-region wl-fldmgr-cut wl-fldmgr-cut-region
+      wl-fldmgr-make-access-group wl-fldmgr-make-filter
+      wl-fldmgr-make-group wl-fldmgr-make-multi
+      wl-fldmgr-reconst-entity-hashtb wl-fldmgr-rename wl-fldmgr-delete
+      wl-fldmgr-save-folders wl-fldmgr-set-petname wl-fldmgr-sort
+      wl-fldmgr-subscribe wl-fldmgr-subscribe-region
+      wl-fldmgr-unsubscribe wl-fldmgr-unsubscribe-region wl-fldmgr-yank )
+     ("wl-fldmgr"
+      (wl-fldmgr-mode-map keymap)
+      wl-fldmgr-add-entity-hashtb)
+     ("wl-expire" :interactive t
+      wl-folder-archive-current-entity
+      wl-folder-expire-current-entity wl-summary-archive
+      wl-summary-expire )
+     ("wl-score"
+      wl-score-save wl-summary-rescore-msgs wl-summary-score-headers
+      wl-summary-score-update-all-lines )
+     ("wl-score" :interactive t
+      wl-score-change-score-file wl-score-edit-current-scores
+      wl-score-edit-file wl-score-flush-cache wl-summary-rescore
+      wl-score-set-mark-below wl-score-set-expunge-below
+      wl-summary-increase-score wl-summary-lower-score ))))
+
+;; for backward compatibility
+(defalias 'wl-summary-from-func-petname 'wl-summary-default-from)
+(provide 'wl)
+
+;;; wl.el ends here