Feeding back from `t-gnus-6_14' into `pgnus-ichikawa'. before-feeding-back-t-gnus-6_15- branch-out-to-t-gnus-6_15-
authoryamaoka <yamaoka>
Sun, 15 Apr 2001 23:10:37 +0000 (23:10 +0000)
committeryamaoka <yamaoka>
Sun, 15 Apr 2001 23:10:37 +0000 (23:10 +0000)
(The branch `pgnus-ichikawa' is the trunk of T-gnus.)

240 files changed:
ChangeLog
GNUS-NEWS
Makefile.in
Mule23@1934.en
Mule23@1934.ja
README
README-gnus-bbdb.en
README-gnus-bbdb.ja
README.T-gnus
README.branch
README.branch.ja
README.semi
README.semi.ja
acinclude.m4 [deleted file]
aclocal.m4
configure
configure.in
contrib/README [new file with mode: 0644]
contrib/mml-smime.el [new file with mode: 0644]
contrib/one-line-cookie.diff [new file with mode: 0644]
contrib/rfc2015.el [new file with mode: 0644]
contrib/smime.el [new file with mode: 0644]
contrib/timer.el [new file with mode: 0644]
contrib/vcard.el [new file with mode: 0644]
etc/gnus-tut.txt
etc/gnus/bar.xbm [new file with mode: 0644]
etc/gnus/bar.xpm [new file with mode: 0644]
etc/gnus/gnus-group-catchup-current-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-catchup-current-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-catchup-current.xbm [new file with mode: 0644]
etc/gnus/gnus-group-catchup-current.xpm [new file with mode: 0644]
etc/gnus/gnus-group-describe-group-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-describe-group-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-exit-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-exit-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-get-new-news-this-group-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-get-new-news-this-group-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-get-new-news-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-get-new-news-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-kill-group-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-kill-group-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-subscribe-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-subscribe-up.xpm [new file with mode: 0644]
etc/gnus/gnus-group-unsubscribe-up.xbm [new file with mode: 0644]
etc/gnus/gnus-group-unsubscribe-up.xpm [new file with mode: 0644]
etc/gnus/gnus-pointer.xbm [new file with mode: 0644]
etc/gnus/gnus-pointer.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-caesar-message-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-caesar-message-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-cancel-article-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-cancel-article-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-catchup-and-exit-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-catchup-and-exit-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-catchup-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-catchup-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-exit-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-exit-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-followup-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-followup-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-followup-with-original-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-followup-with-original-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-copy-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-copy-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-delete-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-delete-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-forward-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-forward-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-get-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-get-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-originate-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-originate-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-reply-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-reply-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-save-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-mail-save-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-next-unread-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-next-unread-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-post-news-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-post-news-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-prev-unread-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-prev-unread-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-reply-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-reply-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-reply-with-original-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-reply-with-original-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-save-article-file-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-save-article-file-up.xpm [new file with mode: 0644]
etc/gnus/gnus-summary-save-article-up.xbm [new file with mode: 0644]
etc/gnus/gnus-summary-save-article-up.xpm [new file with mode: 0644]
etc/gnus/gnus-uu-decode-uu-up.xbm [new file with mode: 0644]
etc/gnus/gnus-uu-decode-uu-up.xpm [new file with mode: 0644]
etc/gnus/gnus-uu-post-news-up.xbm [new file with mode: 0644]
etc/gnus/gnus-uu-post-news-up.xpm [new file with mode: 0644]
etc/gnus/gnus.xbm [new file with mode: 0644]
etc/gnus/gnus.xpm [new file with mode: 0644]
etc/smilies/frown.pbm [new file with mode: 0644]
etc/smilies/smile.pbm [new file with mode: 0644]
etc/smilies/wry.pbm [new file with mode: 0644]
lisp/ChangeLog
lisp/Makefile.in
lisp/base64.el
lisp/binhex.el
lisp/dgnushack.el
lisp/dgnuspath.el.in
lisp/drums.el [deleted file]
lisp/earcon.el
lisp/flow-fill.el [new file with mode: 0644]
lisp/format-spec.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-async.el
lisp/gnus-audio.el
lisp/gnus-bbdb.el
lisp/gnus-bcklg.el
lisp/gnus-cache.el
lisp/gnus-cite.el
lisp/gnus-clfns.el [new file with mode: 0644]
lisp/gnus-cus.el
lisp/gnus-demon.el
lisp/gnus-draft.el
lisp/gnus-dup.el
lisp/gnus-eform.el
lisp/gnus-ems.el
lisp/gnus-gl.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-kill.el
lisp/gnus-load.el
lisp/gnus-logic.el
lisp/gnus-mailcap.el
lisp/gnus-mh.el
lisp/gnus-ml.el [new file with mode: 0644]
lisp/gnus-mlspl.el
lisp/gnus-move.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-offline.el
lisp/gnus-ofsetup.el
lisp/gnus-picon.el
lisp/gnus-range.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-spec.el
lisp/gnus-srvr.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-topic.el
lisp/gnus-undo.el
lisp/gnus-util.el
lisp/gnus-uu.el
lisp/gnus-vers.el [new file with mode: 0644]
lisp/gnus-vm.el
lisp/gnus-win.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/ietf-drums.el
lisp/imap.el
lisp/lpath.el
lisp/mail-parse.el
lisp/mail-prsvr.el
lisp/mail-source.el
lisp/mailheader.el [deleted file]
lisp/md5.el
lisp/message.el
lisp/messagexmas.el
lisp/messcompat.el
lisp/mm-bodies.el
lisp/mm-decode.el
lisp/mm-encode.el
lisp/mm-partial.el [new file with mode: 0644]
lisp/mm-util.el
lisp/mm-uu.el
lisp/mm-view.el
lisp/mml.el
lisp/nnagent.el
lisp/nnbabyl.el
lisp/nndb.el
lisp/nndir.el
lisp/nndoc.el
lisp/nndraft.el
lisp/nneething.el
lisp/nnfolder.el
lisp/nngateway.el
lisp/nnheader.el
lisp/nnheaderxm.el
lisp/nnimap.el
lisp/nnkiboze.el
lisp/nnlistserv.el
lisp/nnmail.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnoo.el
lisp/nnshimbun.el [new file with mode: 0644]
lisp/nnslashdot.el
lisp/nnsoup.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnultimate.el
lisp/nnvirtual.el
lisp/nnwarchive.el
lisp/nnweb.el
lisp/nnwfm.el [new file with mode: 0644]
lisp/parse-time.el
lisp/pop3.el
lisp/ptexinfmt.el [new file with mode: 0644]
lisp/qp.el
lisp/read-passwd.el
lisp/rfc1843.el
lisp/rfc2045.el
lisp/rfc2047.el
lisp/rfc2104.el
lisp/rfc2231.el
lisp/score-mode.el
lisp/smiley-ems.el [new file with mode: 0644]
lisp/smiley.el
lisp/starttls.el [new file with mode: 0644]
lisp/time-date.el
lisp/utf7.el
lisp/uudecode.el
lisp/webmail.el
make.bat
mkinstalldirs
sample.lpath.el
texi/ChangeLog
texi/Makefile.in
texi/TRANSLATION.ja
texi/doclicense.texi [new file with mode: 0644]
texi/emacs-mime.texi
texi/gnus-faq-ja.texi
texi/gnus-ja.texi
texi/gnus.texi
texi/gnusref.tex
texi/message-ja.texi
texi/message.texi
texi/postamble.tex
texi/refcard.tex
texi/texi2latex.el [new file with mode: 0644]

index ace1615..01580b3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2001-04-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-interactive): Fix mismatched parentheses.
+
+       * lisp/nnshimbun.el: Enclose w3m stuff with `eval-and-compile';
+       bind `w3m-work-buffer-name' and `w3m-retrieve' when compiling.
+
+2001-04-03  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-type-definition: Follow changes in
+       asahi.com.
+       (nnshimbun-asahi-get-headers): Ditto.
+       (nnshimbun-retrieve-url): Use `w3m-retrieve' if it is available.
+
+2001-03-19  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-kill.el (gnus-execute): Work with the extra headers.
+       * lisp/gnus-sum.el (gnus-summary-execute-command): Ditto.
+
+2001-03-13  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-fix-before-sending): Hide again the
+       invisible property of encoded binary data parts after checking is
+       done.
+       (message-find-invisible-regions): New function.
+       (message-save-drafts, message-send): Inherit the invisible property
+       of encoded binary data parts to make MIME-Edit find the MIME part
+       boundaries.
+
+2001-03-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-article-prepare-display): Setup MIME
+       entity even if `gnus-show-mime' is nil.
+
+2001-03-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-retrieve-url): Check if
+       `url-current-mime-charset' is bound.
+
+2001-03-04  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-info-find-node): Pretend to be
+       `gnus-article-mode' in the article buffer.
+
+2001-03-02  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-kinsoku-eol-list): Simplified.
+       (nnshimbun-kinsoku-bol-list): Ditto.
+
+2001-03-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 04.
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): Simplified.
+
+       * lisp/dgnushack.el: Load cl-macs to ensure that the macro `dolist'
+       is defined properly.
+
+       * lisp/nnwfm.el: Require `gnus-clfns' when compiling.
+       * lisp/nnshimbun.el: Ditto.
+       * lisp/mm-util.el: Ditto.
+       * lisp/gnus-vers.el: Ditto.
+       * lisp/gnus-score.el: Ditto.
+       * lisp/gnus-nocem.el: Ditto.
+
+       * lisp/gnus-ofsetup.el: Don't require `gnus-clfns'.
+       (gnus-ofsetup-customize-done): Use `dolist' instead of `mapc'.
+       (gnus-setup-for-offline): Ditto.
+
+       * lisp/gnus-offline.el: Don't use `mapc' for binding some vars;
+       don't require `gnus-clfns'.
+       (gnus-offline-get-menu-items): Rewrite using `dolist'.
+
+       * lisp/gnus-clfns.el (butlast): New compiler macro.
+       (mapc): Remove.
+
+       * lisp/gnus-art.el: Use `dolist' instead of `mapcar' for defining
+       `gnus-article-read-summary-keys'.
+
+2001-02-28  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-article-mime-edit-article-setup): Leave
+       the forwarded parts undecoded.
+       (gnus-article-decode-article-as-default-mime-charset): Set the
+       value of `default-mime-charset' buffer-locally.
+
+2001-02-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el: Add autoloads for
+       `gnus-summary-digest-post-forward' and
+       `gnus-summary-digest-mail-forward'.
+
+       * lisp/gnus-sum.el (gnus-summary-post-menu): Replace
+       `gnus-uu-digest-mail-forward' and `gnus-uu-digest-post-forward'
+       with `gnus-summary-digest-post-forward' and
+       `gnus-summary-digest-mail-forward'.
+
+       * lisp/gnus-msg.el (gnus-summary-digest-post-forward): Restore and
+       repair the command `gnus-summary-post-digest' and rename it.
+       (gnus-summary-digest-mail-forward): Ditto.
+       (gnus-summary-send-map): Replace `gnus-uu-digest-mail-forward' and
+       `gnus-uu-digest-post-forward' with
+       `gnus-summary-digest-post-forward' and
+       `gnus-summary-digest-mail-forward'.
+
+2001-02-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-sum.el (gnus-summary-show-article): Bind
+       `gnus-inhibit-treatment' to t while fetching the raw article.
+
+       * lisp/gnus-art.el (gnus-article-mime-edit-exit): Bind
+       `mime-edit-insert-user-agent-field' to nil while `mime-edit-exit'
+       is being done;  turn off font-lock first;  query if the buffer is
+       modified.
+       (gnus-article-mime-edit-done): New function.
+       (gnus-article-mime-edit-article-setup): Make the window fill its
+       frame;  clear the buffere modified flag;  substitute key definition
+       `gnus-article-edit-done' with `gnus-article-mime-edit-done';  don't
+       turn off font-lock here;  bind `mime-edit-insert-user-agent-field'
+       to nil while `mime-edit-exit' is being done.
+       (gnus-article-mime-edit-article-unwind): Turn off font-lock first.
+
+2001-02-23  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el: Don't require `emu'.
+
+2001-02-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-forward-subject-author-subject): Decode
+       `From' field.
+
+2001-02-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 03.
+
+       * lisp/gnus-sum.el (gnus-get-newsgroup-headers-xover): Don't use
+       `gnus-retrieve-parsed-headers' when the backend is nnimap.  It is
+       only a temporary fix for an infloop on nnimap.  FIXME!!!
+       (gnus-select-newsgroup): Ditto.
+
+2001-02-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * texi/gnus-faq-ja.texi (Q2.1): Remove mention of
+       `gnus-article-display-hook.'
+
+       * lisp/gnus.el (gnus-article-display-hook): Abolished.
+
+       * lisp/gnus-uu.el (gnus-uu-grab-articles): Don't care about
+       `gnus-article-display-hook'.
+       * lisp/gnus-sum.el (gnus-summary-show-article): Ditto.
+       (gnus-summary-search-article): Ditto.
+
+       * lisp/gnus-bbdb.el (gnus-bbdb-insinuate): Use
+       `gnus-article-prepare-hook' instead of `gnus-article-display-hook'.
+
+       * lisp/gnus-art.el (gnus-article-prepare-display): Evaluate
+       `gnus-article-prepare-hook' after an article has been prepared;
+       don't evaluate `gnus-article-display-hook'.
+
+2001-02-15  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-cite-original-without-signature):
+       Extract from field for the simple citation line.
+
+2001-02-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-fml-get-headers): Fix unbalanced
+       parentheses.
+
+2001-02-08  Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/nnshimbun.el: Add `bbdb-ml' support.
+
+2001-02-02  Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-type-definition): Follow URL change
+       of `xemacs'.
+       (nnshimbun-xemacs-get-headers): Ditto.
+
+2001-02-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * README-gnus-bbdb.{en,ja}: Update the patch for BBDB v2.2.
+
+2001-02-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-texi-format): A workaround for
+       @ifnottex.
+
+       * texi/Makefile.in (.texi, %.info): Don't use makeinfo command when
+       gnus-ja.texi or message-ja.texi is given.  It is needed for some
+       make command if which can not understand "%-ja:" or "%-ja.info:".
+       (.texi, %.info, %-ja.info, %-ja): Don't eval `EMACSINFOHACK'.
+       (EMACSINFOHACK): Move to lisp/dgnushack.el.
+
+2001-01-29  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-article-mime-edit-exit): Use
+       `buffer-substring-no-properties' instead of `format'.
+
+2001-01-23  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el: Support @letterpaper and @afivepaper.
+
+2001-01-22  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 02.
+
+       * Makefile.in (install-package-lisp): Use
+       `install-without-compiling' instead of `install'.
+
+       * lisp/Makefile.in (install): Use `install-without-compiling'.
+       (install-without-compiling): New target.
+
+2001-01-18  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 01.
+
+2001-01-17  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-make-autoloads): Do nothing if the
+       files for autoloads already exist.
+       (dgnushack-unexporting-files): More useful message.
+
+       * lisp/Makefile.in (install): Call `clever' before installing.
+       (install-lisp): Remove.
+       (clever): Check for whether the all elc files should be recompiled.
+
+       * Makefile.in (xclever): New target.
+       (install-package-lisp): Replace `install-lisp' with `install'.
+       (install-package-ja): Replace `xlick' with `xclever'.
+       (install-package): Ditto.
+
+2001-01-17  KOSEKI Yoshinori  <kose@wizard.tamra.co.jp>
+
+       * Makefile.in: Unset `PWD' for Meadow/NTEmacs.
+
+2001-01-15  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnheader.el: Require `pces', `poem' and `std11' to reduce
+       the required value of `recursive-load-depth-limit' for Emacs 21.
+
+       * lisp/message.el (message-followup): Handle "Mail-Copies-To:"
+       correctly.
+       (message-get-reply-headers): Ditto.
+
+2001-01-15  Keiichi Suzuki  <keiichi@nanap.org>
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/update-record): Save excursion
+       while `bbdb-annotate-message-sender' is being done.
+
+2001-01-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-treatment-function-alist): Use backquote.
+
+2001-01-13  Kinji Itoh  <kinji-i@ma.neweb.ne.jp>
+
+       * Makefile.in (install-package-lisp): Specify EMACS=$(XEMACS).
+
+2001-01-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (T-gnus): Update to 6.14.6.
+       (gnus-revision-number): Clear to 00.
+
+       * Sync up with Gnus v5.8.8.
+
+2001-01-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-copy-article-buffer): Remove smiley
+       extents for XEmacs 21.1 using `format'.
+
+2001-01-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el: Don't autoload "smiley" for `smiley-toggle-buffer';
+       don't autoload "gnus-bitmap" or "x-face-mule" when Emacs 21 is
+       running.
+
+       * lisp/gnus-art.el (TopLevel): Autoload "gnus-bitmap" for
+       `smiley-toggle-buffer' when compiling.
+       (gnus-treatment-function-alist): Use `gnus-smiley-display' for
+       `gnus-treat-display-smileys' by default when XEmacs or Emacs 21 is
+       running.
+       (gnus-treat-display-smileys): Check for `smiley-mule' instead of
+       `gnus-bitmap'.
+       (gnus-article-x-face-command): Don't check for xbm for x-face-e21.
+
+2000-12-22  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-debug): Use `sit-for' in the inside of
+       `save-excursion'.
+       (gnus-bug): Pop up the sending buffer first.
+
+       * lisp/dgnushack.el
+       (byte-compile-file-form-custom-declare-variable): Use `defvar'
+       instead of `custom-declare-variable' to make the variable
+       uncustomizable if the arguments has the keyword `:version'.
+
+2000-12-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (TopLevel): Byte-optimize
+       `custom-declare-variable', `custom-declare-group, and
+       `custom-declare-face' to omit unsupported keywords when Mule is
+       running.
+
+2000-12-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (TopLevel): Defalias `coding-system-category'
+       to `get-code-mnemonic' for Mule.
+       (TopLevel): Make codesys `euc-japan' and `shift_jis' for Mule.
+       (nnshimbun-type-definition): Use `static-if' to determine codesys.
+       (TopLevel): Require `static'.
+
+2000-12-06  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-retrieve-url): coding detection is
+       improved.
+       (nnshimbun-meta-content-type-charset-regexp): New constant.
+       (nnshimbun-meta-charset-content-type-regexp): Ditto.
+
+2000-12-03  Tetsuo Tsukamoto  <czkmt@remus.dti.ne.jp>
+
+       * texi/gnus-ja.texi: Fixes for the last modification.
+
+2000-12-02  Tetsuo Tsukamoto  <czkmt@remus.dti.ne.jp>
+
+       * texi/gnus-ja.texi: Translate description about
+       `nnmail-split-fancy-with-parent'.
+
+       * texi/message-ja.texi: Use two lines for direntry.
+
+2000-12-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el: Attempt to add another FLIM path to `load-path'
+       if the module `mel' does not found.  This procedure may be needed
+       when recent FLIM 1.14 is used under old Emacsen.
+
+2000-11-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 08.
+
+       * lisp/message.el (message-send-mail-with-smtp): Leave the error
+       handling in `smtp-send-buffer's own care.
+
+2000-11-22  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 07.
+
+       * lisp/gnus.el: Add autoloads for x-face-e21.
+
+       * lisp/gnus-sum.el (gnus-summary-search-article-position-point):
+       Search for `x-face-image' as well as `x-face-mule-bitmap-image'.
+
+       * lisp/gnus-art.el (gnus-article-x-face-command): Default to
+       `x-face-decode-message-header' when Emacs 21 is running and
+       x-face-e21 is installed.
+
+2000-11-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-send-mail-with-smtp): Use
+       `smtp-send-buffer' if it exists instead of `smtp-via-smtp'.
+
+       * lisp/dgnushack.el (describe-key-briefly): New compiler macro for
+       old Emacsen.
+
+2000-11-17  Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/nnheader.el (nnheader-header-value): Save point.
+
+2000-11-16  Katsuhiro Hermit Endo  <hermit@koka-in.org>
+
+       * texi/gnus-ja.texi (Drafts): Fix typo.
+
+2000-11-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (article-verify-x-pgp-sig): Autoload "mm-uu".
+       (gnus-treat-x-pgp-sig): Default to nil.
+
+2000-11-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * Mule23@1934.en, Mule23@1934.ja, sample.lpath.el: Upgrade.
+
+       * configure: Regenerate.
+       * aclocal.m4 (AC_PATH_PACKAGEDIR): No need to quote a string for
+       `AC_MSG_RESULT'.
+       (AC_CHECK_W3): Ignore cache; no need to quote a string for
+       `AC_MSG_RESULT'.
+       (AC_CHECK_EMACS_FLAVOR): Ignore cache.
+       (AC_CHECK_EMACS): Ignore cache.
+       (AC_DEFINE_GNUS_PRODUCT_NAME): Cache.
+
+2000-11-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * configure: Regenerate.
+
+       * aclocal.m4 (AC_CHECK_W3): Substitute `W3' with empty string
+       instead of "no" if it is not acceptable.
+
+       * lisp/dgnushack.el: Load dgnuspath.el and ~/.lpath.el just before
+       path-util is loaded.
+       (dgnushack-compile): Show `load-path'.
+       (dgnushack-w3-dir): Ignore the env var W3DIR if it is empty.
+
+       * lisp/lpath.el: Move out `load-path' modification for APEL, FLIM
+       and SEMI to dgnushack.el.
+       * lisp/dgnushack.el: Move here.
+
+       * lisp/lpath.el (md5): Don't bind.
+       (url-insert-file-contents): Fbind for FSF Emacsen.
+
+2000-11-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * texi/Makefile.in (install-ja-info): Specify `EMACS' and
+       `infodir'.
+       (install-info): Ditto.
+       (install-ja): Ditto.
+
+       * lisp/lpath.el (md5): Fbind using `maybe-fbind'.
+
+       * lisp/dgnushack.el (dgnushack-compose-package): Remove function.
+       (dgnushack-install-package-info-ja): Remove function.
+       (dgnushack-install-package-info): Remove function.
+       (dgnushack-install-package-lick): Remove function.
+       (dgnushack-install-package-pkginfo): Remove function.
+       (dgnushack-install-package-info-files): Remove function.
+       (dgnushack-install-package-manifest): New function.
+       (dgnushack-remove-extra-files-in-package): New function.
+       (dgnushack-gnus-product-name): Remove function.
+       (dgnushack-examine-package-dir): Remove function.
+       (dgnushack-exporting-files): Rename from `dgnushack-exported-files'.
+       (dgnushack-unexporting-files): Rename from
+       `dgnushack-unexported-files'; attempt to fix `load-path' for W3 and
+       retry to load `w3-forms' if it is failed.
+       (dgnushack-w3-dir): New variable.
+
+       * lisp/Makefile.in (remove-extra-files-in-package): New target.
+       (install-package-manifest): New target.
+       (install-package-info-ja): Remove target.
+       (install-package-info): Remove target.
+       (install-package-lick): Remove target.
+       (install-lisp): New target detached from `install'.
+       (install): Call `clever' and `install-lisp'.
+       (EXPORTING_FILES, GNUS_PRODUCT_NAME): New variables.
+
+       * configure: Regenerate.
+
+       * aclocal.m4 (AC_PATH_PACKAGEDIR): Examine `PACKAGEDIR' if it is
+       not specified under XEmacs.
+       (AC_EXAMINE_PACKAGEDIR): New function.
+       (AC_PATH_LISPDIR): Don't say annotations about install-package if
+       FSFmacs is used.
+       (AC_DEFINE_GNUS_PRODUCT_NAME): Add substitution for
+       `GNUS_PRODUCT_NAME'.
+
+       * Makefile.in (remove-extra-files-in-package): New target.
+       (install-package-manifest): New target.
+       (install-package-info-ja): Examine `PACKAGEDIR' if it is not
+       specified; call install-ja-info in texi/Makefile.
+       (install-package-info): Examine `PACKAGEDIR' if it is not
+       specified; call install-info in texi/Makefile.
+       (install-package-lisp): Rename from `install-package-lick'; examine
+       `PACKAGEDIR' if it is not specified; call `install-lisp' in
+       lisp/Makefile.
+       (install-package-ja): Call `xlick', `compose-package',
+       `remove-extra-files-in-package', `install-package-lisp',
+       `install-package-info', `install-package-info-ja' and
+       `install-package-manifest'.
+       (install-package): Call `xlick', `compose-package',
+       `remove-extra-files-in-package', `install-package-lisp',
+       `install-package-info' and `install-package-manifest'.
+       (install-info-ja, install-info): Specify `infodir'.
+       (EXAMINE_PACKAGEDIR, GNUS_PRODUCT_NAME, infodir): New variables.
+
+2000-11-07  Tetsuo Tsukamoto  <czkmt@remus.dti.ne.jp>
+
+       * texi/gnus-ja.texi: Do not use characters other than ascii ones
+       for direntries.
+       * texi/message-ja.texi: Ditto.
+
+2000-11-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/Makefile.in (install): Don't check for the file names.
+
+2000-11-04  Katsuhiro Hermit Endo  <hermit@koka-in.org>
+
+       * lisp/gnus-topic.el (gnus-group-topic-map): Define "T" prefix
+       command in `gnus-topic-mode-map' instead of `gnus-group-mode-map'.
+
+2000-10-25  Katsuhiro Hermit Endo  <hermit@tomato.saino.ne.jp>
+
+       * lisp/gnus-topic.el (gnus-topic-rename): Use current topic as
+       initial value for read-string.
+
+2000-11-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/Makefile.in (install): Use the lisp function
+       `dgnushack-exported-files'.
+
+       * lisp/nnmail.el (nnmail-pathname-coding-system): Default to
+       `binary'.
+       * lisp/nnheader.el (nnheader-pathname-coding-system): Ditto.
+
+       * lisp/message.el (message-get-reply-headers): Remove useless
+       `concat'.
+
+       * lisp/md5.el: Restore the file.
+
+       * lisp/dgnushack.el (dgnushack-compile): Refer to the constant
+       `dgnushack-exported-files'.
+       (dgnushack-exported-files): New function.
+       (dgnushack-exported-files): New constant.
+       (dgnushack-unexported-files): Add some files.
+       (dgnushack-tool-files): Remove, merge it into
+       `dgnushack-unexported-files'.
+
+       * lisp/base64.el: New file -- base64 encoding functions using MEL.
+
+2000-11-05  Tetsuo Tsukamoto  <czkmt@remus.dti.ne.jp>
+
+       * lisp/smiley.el (smiley-deformed-regexp-alist): Modify regexp for
+       the winking face.
+
+2000-11-02  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-make-manifest): Fix info directory.
+
+2000-11-02  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * Makefile.in (install-package-ja): Compile and install lisp files
+       first.
+       (install-package): Ditto.
+       (compose-package, install-package-info-ja, install-package-info,
+       install-package-lick): New sub targets.
+
+       * lisp/Makefile.in (install-package-info-ja, install-package-info,
+       install-package-lick): New targets.
+       (compose-package): Rename from `package'.
+       (install-package): Remove.
+
+       * lisp/dgnushack.el (dgnushack-install-package-info-ja,
+       dgnushack-install-package-info, dgnushack-install-package-lick,
+       dgnushack-install-package-pkginfo,
+       dgnushack-install-package-info-files, dgnushack-make-manifest,
+       dgnushack-gnus-product-name, dgnushack-examine-package-dir,
+       dgnushack-make-autoloads): New functions.
+       (dgnushack-install-package): Remove.
+       (dgnushack-compose-package): Rename from `dgnushack-make-package'.
+       (dgnushack-info-file-regexp-ja, dgnushack-info-file-regexp-en):
+       Split from `dgnushack-info-file-regexp'.
+       (dgnushack-texi-file-regexp): Remove.
+
+2000-11-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-texi-format): Remove @ignore'd areas
+       before processing.
+
+2000-11-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 06.
+
+       * lisp/gnus.el (gnus-product-variable-file-list): Check for
+       `emacs-version' in the file "cache" as well.
+       * lisp/gnus-start.el (gnus-product-read-variable-file-1): Make it
+       talkative.
+
+2000-10-31  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el: Bind `:key-type' and `:value-type' for old
+       Emacsen.
+
+2000-10-31  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (texinfo-format-direntry): Fixed broken
+       direntry generate probrem.
+       (Advised by Tetsuo Tsukamoto <czkmt@remus.dti.ne.jp>)
+
+2000-10-31  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-sum.el (gnus-summary-insert-line): Work with quoted
+       double-quote characters.
+       (gnus-summary-prepare-threads): Ditto.
+
+2000-10-30  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (ptexinfmt-disable-broken-notice-flag): Renamed
+       from `ptexinfmt-disable-broken-notice'.
+
+2000-10-27  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (texinfo-format-printindex): Mule for Windows
+       detection fixed.
+
+2000-10-26  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-group-startup-message): Rewrite for Emacs 21.
+       * lisp/lpath.el: Fbind `propertize'.
+
+2000-10-22  Katsuhiro Hermit Endo <hermit@tomato.saino.ne.jp>
+
+       * texi/gnus-ja.texi (Changing Servers): Fix typo.
+
+2000-10-19  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-netbsd-get-headers): Fix regular
+       expression to extract xover urls.
+
+2000-10-12  Jesper Harder <jesper_harder@hotmail.com>
+
+       * make.bat: Makes it possible to generate the Info files on
+       windows again.
+
+2000-10-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * Makefile.in (info-ja, xinfo-ja): No need to use `MAKEINFO=no'.
+       (install-info-ja, install-info, install-lisp, install-ja): New
+       targets (possibly for FSF Emacsen).
+
+       * texi/Makefile.in (install-ja-info, install-info, install-ja,
+       %-ja.info, %-ja): New targets.
+
+       * texi/message-ja.texi (direntry): Replace "message" with
+       "message-ja".
+
+2000-10-08  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-type-definition): Fix regular
+       expression to extract article body from `ZDNet'.
+
+2000-10-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/imap.el: Require `base64' instead of to autoload it.
+
+2000-10-05  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-xmas.el (gnus-xmas-group-startup-message): Don't use
+       `gnus-point-at-eol'.
+       * lisp/gnus.el (gnus-group-startup-message): Ditto.
+
+       * lisp/gnus-ems.el (gnus-ems-redefine): Revive annulling of
+       `gnus-summary-set-display-table'.
+
+2000-10-04  Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/gnus-sum.el (gnus-build-sparse-threads): Use
+       `make-full-mail-header-from-decoded-header' instead of
+       `make-full-mail-header'.
+
+2000-10-03  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-group.el (gnus-group-get-new-news): Update modeline
+       using `gnus-agent-toggle-plugged' if agent is activated.
+       * lisp/gnus-agent.el (gnus-group-get-new-news): Don't advise it,
+       merge it into gnus-group.el instead.
+
+       * lisp/gnus-offline.el (gnus-offline-after-jobs-done): Use `ding'
+       with `play-sound-file' for XEmacs statically.
+
+       * lisp/gnus-art.el (gnus-article-add-button): Quote
+       `:button-keymap' for Mule 2.3 but it won't work.
+
+2000-09-29  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-ignored-supersedes-headers): Synch with
+       Gnus.
+
+2000-09-27  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * list/ptexinfmt.el (texinfo-multitable-widths): Fix
+       broken-facility probrem when use multitable unsupported
+       texinfmt.el.
+
+2000-09-26  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (texinfo-format-printindex): Use (featurep
+       'meadow) instead of `texinfmt-version'.
+
+2000-09-25  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 05.
+
+       * texi/gnus-faq-ja.texi, lisp/gnus.el, README.semi.ja, README.semi,
+       README: Replace "<semi-gnus-*@meadow.scphys.kyoto-u.ac.jp>" with
+       "<semi-gnus-*@meadowy.org>".
+
+2000-09-22  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (texinfo-format-printindex): Add
+       broken-facility check, for Mule for Windows.
+       (texinfo-format-printindex): New function.
+
+2000-09-19  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-copy-article-buffer): Encode bitmap
+       smileys to ordinary text before removing any text properties.  It
+       is synchronized with the latest smiley-mule.el.
+
+2000-09-19  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-type-definition): Follow URL change
+       of `ZDNet'.
+
+2000-09-15   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/gnus-art.el: Always require `wid-edit'.
+
+2000-09-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-compile): Don't compile gnus-ml.el
+       when FSFmacs is running.
+
+       * lisp/gnus-ml.el: Bind some undeclared variables.
+
+       * lisp/gnus-art.el (gnus-article-add-button): Add widget button.
+       (gnus-article-display-mime-message): Don't set
+       `mime-button-mother-dispatcher'.
+
+       * lisp/message.el: Require `reporter' for the function
+       `define-mail-user-agent' when Mule 2.3 is running.
+
+2000-09-07  Tadashi Watanabe  <watanabe@sigmaitec.co.jp>
+
+       * lisp/smiley.el (smiley-buffer, smiley-create-glyph): Work with
+       GTK XEmacs as well.
+
+2000-09-06  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-header-xref): New function.
+       (nnshimbun-insert-header): Use `nnshimbun-header-xref', instead of
+       `mail-header-xref'.
+       (nnshimbun-make-mhonarc-contents): Took a measure against
+       unexpected TAB characters.
+
+2000-09-05  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Add `netbsd' support.
+       (nnshimbun-nov-fix-header): Change a form storing Message-Id.
+       (nnshimbun-search-id): Ditto.
+       (nnshimbun-make-mhonarc-contents): Use optional header
+       information.
+
+2000-09-05   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/pop3.el (pop3-quit): Don't clear `pop3-uidl-obarray'.
+       (pop3-save-uidls): Clear `pop3-uidl-obarray' here.
+
+2000-09-04   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/mail-source.el (pop3-leave-mail-on-server): Declare.
+       (mail-source-keyword-map): New keyword `:leave' for pop.
+       (mail-source-fetch-pop): Refer it.
+
+       * lisp/pop3.el (pop3-ssl-program-name): New variable.
+
+2000-08-31  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * lisp/ptexinfmt.el (texinfo-multitable-widths,
+       texinfo-multitable-item): Apply char-width probrem fix patch
+       (by KOIE Hidetaka <koie@skipjack.koie.org>).
+       Newsgroups: fj.editor.emacs
+       Message-ID: <5dzom3nxq7.fsf@skipjack.koie.org>
+
+       * lisp/ptexinfmt.el (ptexinfmt-disable-broken-notice): New
+       variable.
+
+2000-08-29  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-zdnet-get-headers): Follow changes
+       of ZDNet.
+
+2000-08-25  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 04.
+
+2000-08-25  Yagi Tatsuya  <yagi@is.titech.ac.jp>
+            Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nntp.el (nntp-list-options, nntp-options-subscribe,
+       nntp-options-not-subscribe): New server variables.
+       (nntp-request-list): Use them.
+       * texi/gnus.texi, texi/gnus-ja.texi: Update for them.
+
+2000-08-23  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-group-startup-message): Use `image-size' to
+       simplify the program.
+
+       * lisp/gnus-group.el (gnus-group-rename-group): Inhibit renaming of
+       zombie or killed groups.
+
+2000-08-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnheader.el (nnheader-replace-chars-in-string): Use
+       `static-if'.
+       * lisp/message.el (message-replace-chars-in-string): Ditto.
+
+2000-08-19  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-type-definition): Follow changes of
+       ZDNet.
+       (nnshimbun-make-text-or-html-contents): Ditto.
+       (nnshimbun-make-html-contents): Ditto.
+
+2000-08-18  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+            Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/nnshimbun.el: Add `mew' and `xemacs' support.
+
+2000-08-17  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-texi-format): Require `ptexinfmt'
+       instead of `texinfmt'.
+       (dgnushack-install-package): Don't install ptexinfmt.el.
+       (dgnushack-make-package): Don't include ptexinfmt.el in MANIFEST.
+       (dgnushack-compile): Don't compile dgnushack.el nor ptexinfmt.el.
+       (dgnushack-unexported-files, dgnushack-tool-files): New constants.
+
+       * lisp/Makefile.in (install-package): No need to remove
+       dgnushack.elc.
+       (install): Don't install ptexinfmt.el; no need to remove
+       dgnushack.elc.
+
+       * lisp/ptexinfmt.el: New file imported from Wanderlust.
+
+2000-08-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nntp.el (nntp-open-telnet): Wait for the telnet prompt
+       before sending a command; allow the rtelnet prompt as well.
+
+       * lisp/message.el (message-make-forward-subject): Remove garbage
+       line.
+
+2000-08-01  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * configure: Regenerate.
+       * aclocal.m4 (AC_CHECK_EMACS): Unset `EMACS' environment variable
+       if it is `t'.
+
+2000-07-24  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 03.
+
+       * configure: Regenerate with autoconf v2.14.1.
+
+       * configure.in: Rewrite for using new macros in aclocal.m4.
+
+       * aclocal.m4: (AC_ADD_LOAD_PATH, AC_PATH_PACKAGEDIR,
+       AC_CHECK_EMACS, AC_DEFINE_GNUS_PRODUCT_NAME): New macros.
+       (AC_PATH_LISPDIR): Set `lispdir' to ".../site-lisp/t-gnus" by
+       default.
+       (AC_CHECK_EMACS_FLAVOR): Rename from `AC_XEMACS_P'; check for
+       `MULE' as well.
+       (AM_PATH_LISPDIR): Remove.
+
+       * acinclude.m4: Remove.
+
+       * lisp/dgnushack.el: Don't add "/usr/share/emacs/site-lisp" to
+       `load-path'.
+
+       * lisp/gnus-ems.el (gnus-ems-redefine): Defalias
+       `gnus-summary-set-display-table' to `(lambda ())' instead of
+       `ignore' (don't synch. with Gnus).
+
+2000-07-21   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/update-record): Use
+       mime-entity-fetch-field instead of mail-header-from.
+
+2000-07-18   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 02.
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/update-record): Don't refer
+       gnus-original-article-buffer.
+       (gnus-bbdb-insinuate): Set gnus-article-display-hook instead of
+       gnus-article-prepare-hook.
+       (gnus-bbdb/extract-field-value): Use mime-entity-fetch-field
+       instead of mail-fetch-field.
+       (gnus-bbdb/extract-field-value-init): Just return extractor.
+
+2000-07-15   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 01.
+
+       * README-gnus-bbdb.{ja|en}: Add example setting about
+       gnus-bbdb-insinuate-message.
+       (bbdb-auto-notes-hook): Don't use pop.
+
+       * lisp/gnus-bbdb.el: Check defvaralias when compiling.
+
+       * lisp/gnus-art.el (gnus-article-setup-buffer): Set
+       gnus-original-article-buffer as unibyte.
+       (gnus-request-article-this-buffer): Ditto.
+
+       * lisp/nnimap.el (nnimap-callback): Don't use nnimap-demule.
+       (nnimap-request-article-part): Ditto.
+
+       * lisp/imap.el (imap-open): Set process buffer as unibyte.
+
+2000-07-13 10:09:52  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * acinclude.m4 (AC_CHECK_W3): Fix typo.
+
+2000-07-13  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * configure: Regenerate with autoconf v2.14.1.
+       * aclocal.m4: Regenerate with aclocal v1.4.
+
+       * configure.in: Don't call `AC_CHECK_PROG' for `EMACS'.
+
+       * acinclude.m4: Merge ShengHuo's changes.
+       (AC_CHECK_W3): Use `quote' instead of '.
+       (AC_XEMACS_P): Don't modify the value of `XEMACS'.
+       (AC_EMACS_LISP): Safely quote the elisp form.
+
+2000-07-12 15:47:06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * aclocal.m4: Stolen macros from w3.
+       * configure.in: Use them.
+       * configure: Generate it.
+
+2000-07-03  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (T-gnus): Update to 6.14.5.
+       (gnus-revision-number): Clear to 00.
+
+       * README.T-gnus: Update.
+
+       * lisp/{webmail.el,rfc2047.el,qp.el,pop3.el,nnwarchive.el,
+       nnsoup.el,nnslashdot.el,nnml.el,nnmh.el,nnmbox.el,nnmail.el,
+       nnimap.el,nnheader.el,nnfolder.el,nndraft.el,nndoc.el,mml.el,
+       mm-view.el,mm-uu.el,mm-util.el,mm-decode.el,mm-bodies.el,
+       message.el,mail-source.el,lpath.el,imap.el,gnus.el,gnus-uu.el,
+       gnus-util.el,gnus-topic.el,gnus-sum.el,gnus-start.el,gnus-srvr.el,
+       gnus-soup.el,gnus-score.el,gnus-msg.el,gnus-mailcap.el,
+       gnus-group.el,gnus-ems.el,gnus-demon.el,gnus-cus.el,gnus-art.el,
+       gnus-agent.el,ChangeLog}: Sync up with Gnus v5.8.7.
+
+       * texi/{message.texi,gnus.texi,gnus-ja.texi,ChangeLog}: Sync up
+       with Gnus v5.8.7.
+
+       * contrib/rfc2015.el: New file.
+
+2000-06-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 04.
+
+       * lisp/gnus-sum.el (gnus-mime-extract-message/rfc822): Use
+       `mime-insert-entity-content' instead of obsolete functions.
+
+2000-06-13  Hirokazu FUKUI  <hfukui@sannet.ne.jp>
+
+       * lisp/gnus-bbdb.el(gnus-bbdb/update-record): Fix to fetch last
+       mail field.
+
+2000-06-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-news-group-p): Sync with Gnus.
+       (gnus-select-method): Remove "*" from doc string.
+       (gnus-group-startup-message): Use `dino' colors.
+
+2000-06-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-fix-before-sending): Expose all
+       invisible text with the property `message-invisible'; don't expose
+       invisible X-Face fields; widen at first.
+       (message-invisible-region): New function, substitute for
+       `invisible-region'.
+       (message-send): Call `message-fix-before-sending' after evaluating
+       `message-send-hook'.
+       (message-check-ignore-invisible-x-face-field): Remove.  You can use
+       (add-hook 'message-send-hook 'x-face-xmas-remove-x-face-glyph)
+       instead.
+
+2000-06-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-save-drafts): Rewrite.
+
+       * lisp/nnheader.el (nnheader-text-coding-system-for-write,
+       nnheader-text-coding-system): New variables, substitutes for
+       `mm-text-coding-system-for-write' or `mm-text-coding-system'.
+
+       * lisp/nnmbox.el (nnmbox-active-file-coding-system,
+       nnmbox-file-coding-system): Use `nnheader-text-coding-system'.
+       * lisp/nnmail.el (nnmail-incoming-coding-system): Ditto.
+       * lisp/nnfolder.el (nnfolder-file-coding-system): Ditto.
+       (nnfolder-active-file-coding-system): Ditto.
+
+       * lisp/mail-source.el (mail-source-text-coding-system): Remove.
+       (TopLevel): require `nnheader'.
+
+       * lisp/nndraft.el (nndraft-request-article): Bind coding system to
+       `nnheader-text-coding-system'.
+       (nndraft-request-replace-article): Ditto.
+       * lisp/mail-source.el (mail-source-fetch-maildir): Ditto.
+       * lisp/gnus-uu.el (gnus-uu-save-article): Ditto.
+       * lisp/gnus-util.el (gnus-output-to-mail, gnus-output-to-rmail):
+       Ditto.
+       * lisp/gnus-soup.el (gnus-soup-write-prefixes): Ditto.
+
+       * lisp/gnus-util.el (gnus-write-buffer): Bind
+       `file-name-coding-system' to `nnmail-pathname-coding-system'.
+       * lisp/gnus-start.el (gnus-slave-save-newsrc): Bind coding system
+       to `gnus-startup-file-coding-system'.
+
+2000-06-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 03.
+
+       * lisp/message.el (message-fix-before-sending): Don't check for
+       invisible X-Face fields if
+       `message-check-ignore-invisible-x-face-field' is non-nil.
+       (message-send): Call `message-fix-before-sending' before encoding.
+       (message-check-ignore-invisible-x-face-field): New user option.
+
+2000-06-01  KANEMATSU Daiji <kanematu@sra.co.jp>
+
+       * texi/gnus-ja.texi (gnus-summary-hide-all-threads): Fix typo.
+
+2000-05-28  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * nnshimbun.el (nnshimbun-request-article-1): Fix to insert x-face
+       unless SERVER.
+       (nnshimbun-asahi-get-headers): Fix for subjects which contain ^M.
+
+2000-05-26  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-write-nov): New function.
+       (nnshimbun-close-group): Call nnshimbun-write-nov.
+       (nnshimbun-generate-nov-database): Ditto.
+       (nnshimbun-generate-nov-for-each-group): Fix bug which occur new
+       entries add NOV database.
+       (nnshimbun-generate-nov-for-all-groups): Ditto.
+       (nnshimbun-search-id): Add argument to return header, and modify
+       for search of original message id.
+       (nnshimbun-nov-fix-header): New function.
+       (nnshimbun-make-date-string): Fix for a two-digit year.
+
+2000-05-26  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-make-html-contents): Show X-Face.
+       (nnshimbun-make-text-or-html-contents): Ditto.
+       (nnshimbun-request-article-1): Ditto.
+       (nnshimbun-x-face-alist): New variable.
+
+2000-05-25  Tanaka Akira      <akr@m17n.org>
+
+       * README.semi, README.semi.ja: Update for CVS via SSH.
+
+2000-05-25  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * texi/gnus-ja.texi: Change coding-system to `iso-2022-7bit-ss2'.
+       * texi/TRANSLATION.ja: Replace CRLF with LF.
+
+2000-05-25  Keiichi Suzuki  <keiichi@mdcnet.co.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-fill-line): Use
+       `nnshimbun-fill-column' instead of `fill-column'.
+
+2000-05-25  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Clean up codes.
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): Follow
+       changes in nnshimbun.el.
+       * texi/gnus-ja.texi (nnshimbun): Ditto.
+
+2000-05-24  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Add `ZDNet Japan', `Yomiuri', and `Wired
+       News' support.
+       (nnshimbun-regexp-opt): New function.
+       (nnshimbun-wired-get-all-headers): Replace regexp-opt with
+       nnshimbun-regexp-opt.
+
+2000-05-24  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): Complete
+       completions.
+
+2000-05-24  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Add `CNET Japan' support.
+       (nnshimbun-make-date-string): New function.
+       (nnshimbun-asahi-get-headers): Use nnshimbun-make-date-string.
+       (nnshimbun-sponichi-get-headers): Ditto.
+
+2000-05-24  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-retrieve-url): Add argument to
+       ignore w3's cache.
+
+2000-05-24  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): Add
+       completion to the shimbun address; delete empty strings from
+       `gnus-group-shimbun-type-history' and
+       `gnus-group-shimbun-address-history'.
+
+       * lisp/nnshimbun.el (nnshimbun-asahi-get-headers): Don't use
+       `timezone'.
+       (nnshimbun-type-definition): Add address.
+
+2000-05-23  Tatsuya Ichikawa <ichikawa@erc.epson.com>
+
+       * lisp/nnshimbun.el: Add `sponichi' support.
+
+2000-05-23  KOSEKI Yoshinori  <kose@wizard.tamra.co.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-mime-encode-string): Fix wrong
+       close brackets.
+
+2000-05-23  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Change coding-system.
+
+2000-05-21  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * texi/gnus-ja.texi (nnshimbun): Add description.
+
+2000-05-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 02.
+
+       * lisp/dgnushack.el (dgnushack-texi-format): Fix last change.
+
+2000-05-21  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: New backend.
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): New command.
+
+2000-05-17  Kenichi OKADA <okada@opaopa.org>
+
+       * lisp/imap.el (imap-digest-md5-auth): Rewrite for the use of
+       `sasl-digest-md5-digest-response' instead of
+       `digest-md5-digest-response'.
+       (TopLevel): Require `sasl' when compiling instead of `digest-md5';
+       don't autoload "digest-md5".
+
+2000-05-17  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nndraft.el (nndraft-request-replace-article): Replace
+       `mm-text-coding-system' with `mail-source-text-coding-system';
+       Replace `mm-auto-save-coding-system' with
+       `message-draft-coding-system'.
+
+       * lisp/mail-source.el (mail-source-fetch-maildir): Replace
+       `mm-text-coding-system' with `mail-source-text-coding-system'.
+       (mail-source-text-coding-system): New variable.
+
+       * lisp/dgnushack.el (dgnushack-texi-format): Use
+       `output-coding-system' instead of `coding-system-for-write' when
+       old Mule is used.
+
+2000-05-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-forward) Replace the use of `eolp' with
+       `bolp' for detecting the start of the line.
+       (message-indent-citation): Ditto.
+
+2000-05-10   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/pop-up-bbdb-buffer): Don't bind
+       `bbdb-use-pop-up' while executing `bbdb-pop-up-bbdb-buffer'.
+
+2000-05-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-debug): Break MIME tags from the snoopies.
+       (gnus-bug): Insert text/plain tag at the end of the buffer.
+
+2000-05-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 01.
+
+2000-05-10  Keiichi Suzuki  <keiichi@mdcnet.co.jp>
+
+       * lisp/message.el (message-list-references): Do not insert
+       duplicate Message-Id, when specified
+       `message-list-references-add-position'.
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/split-mail): Support group address.
+       (gnus-bbdb/insert-address-regexp): New function.
+
+2000-05-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-debug): Add "nntp.el" and `defvoo'.
+
+2000-05-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (T-gnus): Update to 6.14.4.
+
+       * README.T-gnus: Update.
+
+       * lisp/{webmail.el,rfc2047.el,nnmbox.el,nndoc.el,mml.el,mm-view.el,
+       mm-partial.el,mm-decode.el,mm-bodies.el,message.el,lpath.el,
+       gnus.el,gnus-vers.el,gnus-util.el,gnus-start.el,gnus-score.el,
+       gnus-msg.el,gnus-mailcap.el,gnus-ems.el,gnus-draft.el,gnus-art.el,
+       ChangeLog}: Sync up with Gnus v5.8.6.
+       * texi/{postamble.tex,message.texi,message-ja.texi,gnusref.tex,
+       gnus.texi,gnus-ja.texi,emacs-mime.texi,Makefile.in,ChangeLog}: Sync
+       up with Gnus v5.8.6.
+
+2000-04-28  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * texi/gnus.texi, texi/gnus-ja.texi, texi/gnus-faq-ja.texi, README:
+       You might be able to use T-gnus with the versions of XEmacs prior
+       to 21.1.1.
+
+       * contrib/timer.el: New file. Imported from fsf-compat-1.07-pkg.
+
+2000-04-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/mm-view.el (gnus-article-mime-handles): Don't bind it.
+
+       * lisp/gnus-sum.el (gnus-article-mime-handles): Restore from Gnus.
+       (gnus-article-decoded-p): Ditto.
+
+       * lisp/gnus-art.el (gnus-article-mime-handles): Don't bind it.
+       (gnus-article-decoded-p): Ditto.
+
+2000-04-25  NAKAJI Hiroyuki  <nakaji@tutrp.tut.ac.jp>
+
+       * lisp/dgnushack.el: Add code to avoid mule-2.3@19.34 failing to
+       make info from texi. Thanks to Hayashi-san.
+
+2000-04-25  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (union, member-if, mapcon, last): Remove
+       compiler macros.
+
+2000-04-24  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (T-gnus): Update to 6.14.3.
+
+       * README.T-gnus: Update.
+
+       * GNUS-NEWS: Sync up with Gnus v5.8.5.
+       * lisp/{webmail.el,utf7.el,time-date.el,smiley.el,rfc2047.el,
+       rfc1843.el,qp.el,pop3.el,parse-time.el,nnweb.el,nnwarchive.el,
+       nnvirtual.el,nnultimate.el,nntp.el,nnspool.el,nnslashdot.el,
+       nnml.el,nnmail.el,nnimap.el,nnheader.el,nnfolder.el,nndraft.el,
+       nndoc.el,nnagent.el,mml.el,mm-view.el,mm-uu.el,mm-util.el,
+       mm-encode.el,mm-decode.el,mm-bodies.el,message.el,mail-source.el,
+       mail-prsvr.el,mail-parse.el,lpath.el,imap.el,ietf-drums.el,gnus.el,
+       gnus-xmas.el,gnus-win.el,gnus-uu.el,gnus-util.el,gnus-topic.el,
+       gnus-sum.el,gnus-start.el,gnus-srvr.el,gnus-spec.el,gnus-score.el,
+       gnus-msg.el,gnus-move.el,gnus-mlspl.el,gnus-mh.el,gnus-mailcap.el,
+       gnus-logic.el,gnus-kill.el,gnus-int.el,gnus-group.el,gnus-ems.el,
+       gnus-eform.el,gnus-dup.el,gnus-draft.el,gnus-cite.el,gnus-cache.el,
+       gnus-bcklg.el,gnus-async.el,gnus-art.el,gnus-agent.el,
+       format-spec.el,flow-fill.el,fill-flowed.el,dgnushack.el,ChangeLog}:
+       Sync up with Gnus v5.8.5.
+       * texi/{refcard.tex,gnusref.tex,gnus.texi,gnus-ja.texi,
+       gnus-faq-ja.texi,Makefile.in,ChangeLog}: Sync up with Gnus v5.8.5.
+
+       * README: Requires XEmacs 21.1.1 and later.
+       * texi/{gnus.texi, gnus-faq-ja.texi}: Ditto.
+
+2000-04-20  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (T-gnus): Update to 6.14.2.
+       (gnus-revision-number): Clear to 00.
+
+       * README.T-gnus: Update.
+
+       * lisp/{webmail.el,utf7.el,time-date.el,rfc2047.el,qp.el,pop3.el,
+       parse-time.el,nnweb.el,nnwarchive.el,nnultimate.el,nntp.el,
+       nnslashdot.el,nnml.el,nnmail.el,nnimap.el,nnheader.el,nnfolder.el,
+       mm-view.el,mm-util.el,mm-decode.el,mm-bodies.el,message.el,
+       mail-source.el,mail-parse.el,lpath.el,imap.el,ietf-drums.el,
+       gnus.el,gnus-win.el,gnus-vers.el,gnus-uu.el,gnus-topic.el,
+       gnus-sum.el,gnus-start.el,gnus-srvr.el,gnus-mailcap.el,
+       gnus-group.el,gnus-cus.el,gnus-art.el,gnus-agent.el,base64.el,
+       ChangeLog}: Sync up with Gnus v5.8.4.
+
+       * lisp/fill-flowed.el: New file.
+
+       * texi/{gnus.texi,gnus-ja.texi,ChangeLog}: Sync up with Gnus v5.8.4.
+
+       * contrib/{vcard.el,one-line-cookie.diff,README}: New files.
+
+2000-04-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-summary-yank-message): Rewrite for the use
+       of the separated message frames; use `gnus-copy-article-buffer'.
+
+2000-04-13  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 18.
+       (gnus-extended-version): Use `gnus-product-name' and
+       `gnus-version-number' instead of the use of `product-string'.
+       (gnus-version-number): Exclude `gnus-revision-number'.
+       (Defining product): Include `gnus-revision-number'.
+       (TopLevel): Require `poe' for the function `butlast'.
+
+2000-04-13  Keiichi Suzuki  <keiichi@mdcnet.co.jp>
+
+       * lisp/gnus-spec.el (gnus-update-format): Fix a bug in last
+       modification.
+       (gnus-search-or-regist-spec): Change interface.
+
+2000-04-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-article-prev-page): Bind
+       `window-pixel-scroll-increment' to nil while scrolling for
+       canceling a backlash and a modeline erosion.  It may work under
+       XEmacs 21.2.20 and later.
+       (gnus-article-next-page): Ditto.
+
+2000-04-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 17.
+
+       * lisp/gnus-spec.el (gnus-format-specs-compiled): Fix doc string.
+
+2000-04-11  Keiichi Suzuki  <keiichi@mdcnet.co.jp>
+
+       * lisp/gnus-start.el (gnus-product-variable-touch): Support multiple
+       arguments.
+
+       * lisp/gnus-spec.el (gnus-search-or-regist-spec): New utility macro.
+       (gnus-update-format-specifications): Support new data structure of
+       `gnus-format-specs-compiled'.
+       (gnus-update-format-specification-1): Likewise.
+       (gnus-update-format): Support new data structure of
+       `gnus-format-specs'.
+       (gnus-format-specs): Modify data structure.
+
+2000-04-10   Daiki Ueno  <ueno@unixuser.org>
+
+       * lisp/imap.el (imap-body-lines): Check Content-Type: of the
+       article case insensitively.
+
+2000-04-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-cite-original): Use "unknown sender" if
+       from field does not exist in the yanked article.
+
+2000-04-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-cite-original): Extract from field for
+       the simple citation line.
+
+2000-03-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnimap.el (nnimap-request-article-part): Returns nil if the
+       article does not exist.
+
+2000-03-17  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 16.
+
+       * lisp/nnweb.el (nnweb-fetch-url): Bind `input-coding-system' and
+       `output-coding-system' for Mule 2.3.
+       * lisp/mail-source.el (mail-source-fetch-imap): Ditto.
+       * lisp/imap.el (imap-ssl-open): Ditto.
+       * lisp/gnus-start.el (gnus-product-read-variable-file-1): Ditto.
+
+2000-03-17  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-start.el (gnus-re-read-newsrc-el-file): New function.
+       (gnus-read-newsrc-el-file): If it fails, attempt to re-read the
+       file using `gnus-re-read-newsrc-el-file'.  In that case, the
+       compiled format specs in the file which may be created by the other
+       Gnusae should be ignored.
+
+2000-03-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-product-variable-file-list): Use `*ctext*'
+       when Mule 2.3 is running.
+
+2000-03-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 15.
+
+       * lisp/gnus.el (gnus-continuum-version): Remove.
+       (gnus-product-variable-file-list): Use `product-version' instead of
+       the constant values.
+       (TopLevel): Don't autoload "gnus-msg" for the function
+       `gnus-extended-version'.
+       (gnus-version): Move to gnus-vers.el.
+       (gnus-version): Ditto.
+       (gnus-version-number): Ditto.
+       (gnus-product-name): Ditto.
+       (gnus-original-product-name): Ditto.
+       (running-pterodactyl-gnus-0_73-or-later): Ditto.
+       (gnus-original-version-number): Ditto.
+       (gnus-revision-number): Ditto.
+
+       * lisp/gnus-vers.el (gnus-extended-version): Move from gnus-msg.el.
+       (gnus-version): Move from gnus.el.
+       (gnus-version): Ditto.
+       (gnus-version-number): Ditto.
+       (gnus-product-name): Ditto.
+       (gnus-original-product-name): Ditto.
+       (running-pterodactyl-gnus-0_73-or-later): Ditto.
+       (gnus-original-version-number): Ditto.
+       (gnus-revision-number): Ditto.
+
+       * lisp/gnus-start.el (gnus-product-quick-file-format): Use
+       `gnus-vers' instead of `gnus' for the product.
+       (gnus-product-save-variable-file-1): Message an absolute file name;
+       use `save-buffer-as-coding-system'; use `gnus-vers' instead of
+       `gnus' for the product.
+       (gnus-convert-old-ticks): Remove.
+       (gnus-convert-old-newsrc): Remove.
+       (gnus-read-newsrc-file): Don't call `gnus-read-newsrc-file'.
+
+       * lisp/gnus-spec.el (gnus-compile): Modify for the new form of
+       `gnus-format-specs-compiled'.
+       (gnus-update-format-specifications): Specify the arg `format' for
+       `gnus-update-format-specification-1'.
+       (gnus-update-format-specification-1): Modify for the new form of
+       `gnus-format-specs-compiled'; add a new arg `format'.
+       (gnus-format-specs-compiled): Allow the plural compiled functions
+       for each element.
+
+       * lisp/gnus-msg.el (gnus-extended-version): Move to gnus-vers.el.
+
+2000-03-14  Keiichi Suzuki  <keiichi@nanap.org>
+
+       NOTE: It requires `product' in APEL 10.0 or later.
+       Will be created ``~/News/.T-gnus/'' directory automatically by
+       default.   You can customize location by `gnus-product-directory'.
+       ``cache'' and  ``strict-cache'' files will be created under the
+       directory.
+
+       * lisp/gnus.el (TopLevel): Require `gnus-vers'.
+       (gnus-product-name): Abolished.
+       (gnus-version-number): Ditto.
+       (gnus-version): Use `product-string'. (Format changed)
+       (gnus-variable-list): Delete `gnus-format-specs'.
+       (gnus-product-variable-file-list): New variable.
+       (TopLevel): Use `product-provide'.
+
+       * lisp/gnus-vers.el: New file.
+
+       * lisp/gnus-start.el (gnus-product-directory): New user option.
+       (gnus-clear-quick-file-variables): New function.
+       (gnus-clear-system): Use `gnus-clear-quick-file-variables'.
+       (gnus-read-newsrc-file): Likewise.
+       (gnus-read-newsrc-el-file): Read product's variable files.
+       (gnus-product-read-variable-file-1): New function.
+       (gnus-save-newsrc-file): Save product's variable files.
+       (gnus-product-variable-touch): New function.
+       (gnus-product-variables-dirty-p): Ditto.
+       (gnus-product-save-variable-file): Ditto.
+       (gnus-product-save-variable-file-1): Ditto.
+       (gnus-product-quick-file-format): Ditto.
+
+       * lisp/gnus-spec.el (gnus-update-format): Use
+       `gnus-product-variable-touch'.
+       (gnus-update-format-specification-1): Likewise.
+       (gnus-update-format-specifications): Do not check `emacs-version'
+       and `gnus-newsrc-file-version'.  Use
+       `gnus-product-variable-touch'.
+
+       * lisp/gnus-msg.el (gnus-inews-add-send-actions): Use
+       `product-string'.
+
+2000-03-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 14.
+       (gnus-compile-user-specs): New user option.
+
+       * texi/gnus.texi: Update.
+       * texi/gnus-ja.texi: Update.
+
+       * lisp/gnus-start.el (gnus-setup-news): Revert.
+       (gnus-setup-news-hook): Revert.
+
+       * lisp/gnus-spec.el (gnus-compile): Modify the actual format specs
+       as well; don't bind `gnus-tmp-func'.
+       (gnus-update-format-specifications): Revert; use
+       `gnus-update-format-specification-1'.
+       (gnus-update-format-specification-1): New function.
+       (gnus-format-specs-compiled): Modify the form.
+       (TopLevel): Require `alist'.
+
+2000-03-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 13.
+
+       * texi/gnus.texi: Update.
+       * texi/gnus-ja.texi: Update.
+
+       * lisp/gnus-start.el (gnus-setup-news): Update all format specs
+       just before `gnus-setup-news-hook' is evaluated.
+       (gnus-setup-news-hook): Default to `gnus-compile'.
+
+       * lisp/gnus-spec.el (gnus-compile): Don't modify the value of
+       `gnus-format-specs', generate compiled specs in
+       `gnus-format-specs-compiled' instead; don't touch the dribble
+       buffer.
+       (gnus-update-format-specifications): Bind `gnus-format-specs' to
+       `gnus-format-specs-compiled' if the latter is non-nil; use
+       `gnus-update-format-specifications-1'.
+       (gnus-update-format-specifications-1): Rename from
+       `gnus-update-format-specifications'; update the value of
+       `gnus-newsrc-file-version' if the updating is forced.
+       (gnus-format-specs-compiled): New internal variable.
+
+2000-03-05  Keiichi Suzuki  <keiichi@nanap.org>
+
+       * lisp/gnus-spec.el (gnus-update-format-specifications): Force
+       update format specifications, when differ `gnus-version' and
+       `gnus-newsrc-file-version' instead of `gnus-version' and
+       `gnus-version' in `gnus-format-specs'.
+       Do not add `gnus-version' into `gnus-format-specs'.
+
+2000-03-04   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus-spec.el (gnus-compile): Remove gnus-version entry
+       from gnus-format-specs.
+
+2000-02-21  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * nnvirtual.el (nnvirtual-request-article):
+       Bind gnus-override-method to nil.
+       (nnvirtual-request-update-mark): Don't update mark when
+       article is not there.
+
+2000-03-03   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 12.
+
+       * lisp/gnus-sum.el: Add autoload setting for `pgg-decrypt-region'
+       and `pgg-verify-region'.
+       (gnus-summary-decrypt-article): New command.
+       (gnus-summary-verify-article): New command.
+       (gnus-summary-article-map): Bind them.
+       (gnus-wheel-summary-scroll): Fix paren style.
+
+2000-03-02  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 11.
+
+2000-03-01  MORIOKA Tomohiko  <tomo@m17n.org>
+
+       * lisp/nnheader.el (nnheader-insert-nov): Use
+       `mime-entity-fetch-field' instead of `mime-fetch-field'.
+
+       * lisp/gnus-sum.el (gnus-summary-line-format-alist): Use
+       `mime-entity-read-field' instead of `mime-read-field'.
+       (gnus-article-sort-by-author): Likewise.
+
+2000-03-02   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/nnimap.el (nnimap-request-article-part): Don't use
+       `imap-capability' to detect BODYDETAIL response.
+
+2000-03-01   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 10.
+
+       * lisp/nnimap.el
+       (nnimap-request-article-part): Handle `BODY' fetch response when
+       the server implements IMAP4 rev1 capabilities.
+       (nnimap-request-article): Use BODY.PEEK rather than RFC822.PEEK.
+       this attribute was obsoleted in RFC2060.
+       (nnimap-request-body): Ditto.
+
+2000-02-29  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 09.
+
+       * lisp/gnus-ems.el (gnus-tilde-cut-form, gnus-tilde-max-form): Copy
+       from gnus-xmas.el; share them with XEmacs-MULE.
+
+       * lisp/gnus-xmas.el (gnus-tilde-cut-form, gnus-tilde-max-form):
+       Move to gnus-ems.el.
+
+2000-02-20   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 08.
+
+       * lisp/gnus-bbdb.el: Sync up with Nana-gnus 7 for supporting
+       `gnus-bbdb/split-mail'.
+       * README-gnus-bbdb.ja: Ditto.
+
+2000-02-08  Yoshiki Hayashi <yoshiki@xemacs.org>
+
+       * gnus-art.el (article-display-face): Show folded X-Face.
+
+2000-02-08  Keiichi Suzuki  <keiichi@nanap.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 07.
+
+       * lisp/nnmail.el (nnmail-get-new-mail): Do not check
+       `nnmail-spool-file'.
+
+2000-02-06   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 06.
+
+       * lisp/gnus-ofsetup.el: Provide `gnus-ofsetup'.
+       (gnus-setup-for-offline): Add `starttls' to IMAP streams; add
+       `digest-md5' to IMAP authenticators.
+
+       * lisp/gnus-offline.el (gnus-group-get-new-news,
+       gnus-agent-toggle-plugged,gnus-agent-expire,
+       gnus-agent-mode): Check whether `gnus-ofsetup' is provided before
+       redefining.
+
+       * lisp/imap.el (imap-stream-alist): Remove redundant entry for TLS.
+
+       * lisp/nnimap.el (nnimap-retrieve-headers-progress): Remove
+       confusing tabs from original header.
+
+2000-02-02  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/pop3.el (pop3-md5): Fset to `md5' if the module `md5' is
+       installed.
+       (pop3-apop): Use built-in `md5' if it exists.
+
+2000-01-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 05.
+
+       * lisp/gnus-art.el (gnus-treat-display-smileys): Check for the
+       module `gnus-bitmap' instead of `smiley-mule'.
+
+       * lisp/gnus-sum.el (gnus-summary-exit): Recenter the group buffer
+       without redisplaying if the point is out of view.
+
+2000-01-25  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 04.
+
+2000-01-24  SANETO Takanori <sanewo@ba2.so-net.ne.jp>
+
+       * lisp/gnus-spec.el: Call `gnus-ems-redefine'.
+
+       * lisp/pop3.el (pop3-movemail): Don't use `format' for `message'.
+       * lisp/gnus-offline.el (gnus-offline-toggle-articles-to-fetch):
+       Ditto.
+
+       * lisp/read-passwd.el (read-pw-read-noecho): Use "%s" for the 1st
+       arg of `message'.
+       * lisp/gnus.el (gnus-version): Ditto.
+       * lisp/gnus-sum.el (gnus-summary-simplify-subject-query): Ditto.
+       * lisp/gnus-offline.el (gnus-offline-set-interval-time,
+       gnus-offline-empting-spool, gnus-offline-toggle-on/off-send-mail,
+       gnus-offline-set-auto-ppp, gnus-offline-after-jobs-done,
+       gnus-offline-hangup-line, gnus-offline-get-new-news-function,
+       gnus-offline-connect-server): Ditto.
+       * lisp/dgnushack.el (dgnushack-make-package): Ditto.
+
+2000-01-18  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 03.
+
+       * lisp/gnus-sum.el (gnus-summary-exit): Don't recenter the group
+       buffer if it is called non-interactively.
+
+2000-01-18  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 02.
+
+       * lisp/gnus-sum.el (gnus-summary-exit): Recenter the group buffer
+       if the point is out of view.
+
+2000-01-15  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-art.el (gnus-article-next-page): Scroll up LINES if
+       `pos-visible-in-window-p' returns nil.
+
+2000-01-15  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-offline.el (gnus-agent-mode): New advice.
+
+2000-01-12  Hirokazu FUKUI  <hfukui@sannet.ne.jp>
+
+       * lisp/base64.el: Unbound base64-*-string and base64-*-region
+       when defined by autoload.
+
+2000-01-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-sum.el (gnus-summary-reselect-current-group): Restore
+       the original code; hide group contents while rescanning.
+
+2000-01-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-sum.el (gnus-summary-reselect-current-group): Truncate
+       lines in the imitation buffer; turn off h-scrollbar for XEmacs.
+
+2000-01-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 01.
+
+       * lisp/{rfc2231.el,nnweb.el,nnultimate.el,nntp.el,nnspool.el,
+       nnslashdot.el,nnml.el,nnmh.el,nnkiboze.el,nnimap.el,gnus-topic.el,
+       gnus-ofsetup.el,gnus-offline.el,gnus-mlspl.el,gnus-cache.el,
+       gnus-agent.el}: Require `gnus-clfns' when compiling.
+
+       * lisp/rfc2231.el: Require `cl' when compiling.
+
+       * lisp/gnus-clfns.el: New file.
+
+       * lisp/dgnushack.el: Move compiler macros to gnus-clfns.el; load
+       gnus-clfns.el.
+
+       * lisp/gnus-sum.el (gnus-summary-reselect-current-group): Don't
+       rescan the current newsgroup before exiting; wear an imitation
+       summary buffer while rescanning.
+
+2000-01-06  Hirokazu FUKUI  <hfukui@sannet.ne.jp>
+
+       * lisp/dgnushack.el (char-before): Use the byte-optimaization.
+
+2000-01-05  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.14.1.
+       (gnus-revision-number): Clear to 00.
+
+       * README.T-gnus: Update.
+
+       * lisp/{webmail.el,uudecode.el,utf7.el,time-date.el,smiley.el,
+       score-mode.el,rfc2047.el,rfc1843.el,qp.el,pop3.el,parse-time.el,
+       nnweb.el,nnwarchive.el,nnvirtual.el,nnultimate.el,nntp.el,
+       nnspool.el,nnsoup.el,nnslashdot.el,nnml.el,nnmh.el,nnmbox.el,
+       nnmail.el,nnlistserv.el,nnkiboze.el,nnimap.el,nnheader.el,
+       nnfolder.el,nneething.el,nndraft.el,nndoc.el,nndb.el,nnbabyl.el,
+       nnagent.el,mml.el,mm-view.el,mm-uu.el,mm-util.el,mm-encode.el,
+       mm-decode.el,mm-bodies.el,messcompat.el,message.el,md5.el,
+       mail-source.el,mail-prsvr.el,lpath.el,imap.el,ietf-drums.el,
+       gnus-xmas.el,gnus-win.el,gnus-vm.el,gnus-uu.el,gnus-util.el,
+       gnus-undo.el,gnus-topic.el,gnus-sum.el,gnus-start.el,gnus-srvr.el,
+       gnus-spec.el,gnus-soup.el,gnus-setup.el,gnus-score.el,gnus-salt.el,
+       gnus-range.el,gnus-picon.el,gnus-nocem.el,gnus-msg.el,
+       gnus-mlspl.el,gnus-mh.el,gnus-mailcap.el,gnus-logic.el,
+       gnus-load.el,gnus-kill.el,gnus-group.el,gnus-gl.el,gnus-ems.el,
+       gnus-draft.el,gnus-demon.el,gnus-cus.el,gnus-cite.el,gnus-cache.el,
+       gnus-bcklg.el,gnus-audio.el,gnus-async.el,gnus-art.el,
+       gnus-agent.el,binhex.el,base64.el,ChangeLog}: Sync up with Gnus
+       v5.8.3.
+
+       * texi/{postamble.tex,message.texi,gnus.texi,gnus-ja.texi,
+       emacs-mime.texi,ChangeLog}: Sync up with Gnus v5.8.3.
+
+2000-01-05  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * README.semi, README.semi.ja, texi/gnus-faq-ja.texi: Update for
+       the new CVS server.
+
+       * lisp/gnus-sum.el (gnus-articles-to-read): Bind
+       `cursor-in-echo-area' to nil while `read-from-minibuffer'.
+
+1999-12-30  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-offline.el (TopLevel): Call
+       `define-process-argument-editiong' only under Meadow -- i.e. don't
+       call this function under NTEmacs.
+
+1999-12-28  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 15.
+
+       * lisp/gnus-offline.el (gnus-offline-auto-expire): Rename from
+       `gnus-offline-agent-automatic-expire'.
+       (gnus-agent-expire): Fix the advice.
+       (gnus-offline-after-jobs-done): Refer to
+       `gnus-offline-auto-expire'.
+
+       * lisp/gnus-ofsetup.el (gnus-offline-resource-en): Reorder the
+       messages.
+       (gnus-offline-resource-ja): Ditto.
+
+       * lisp/imap.el (imap-ssl-open-2): If `system-type' is windows-nt,
+       bind `coding-system-for-read' to raw-text-dos, else bind it to
+       binary.
+
+1999-12-28  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 14.
+
+       * lisp/dgnushack.el (mapcon): Bind the 1st arg `fn' as a temp var.
+
+1999-12-27  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/pop3.el (pop3-ssl-program-arguments): Add "s_client".
+       (pop3-open-ssl-stream-1): Bind `ssl-program-name' because its
+       value depends on the version of ssl.el.
+       (pop3-open-ssl-stream): If `system-type' is windows-nt, bind
+       `coding-system-for-read' to raw-text-dos, else bind it to binary.
+
+1999-12-23  Keiichi Suzuki  <keiichi@nanap.org>
+
+       * lisp/gnus-bbdb.el (gnus-bbdb/update-record): Fix timing of
+       `save-restriction'.
+
+1999-12-21   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/imap.el (imap-streams,imap-stream-alist,
+       imap-authenticators,imap-authenticator-alist,
+       imap-digest-md5-p): Sync with latest Gnus.
+       (imap-starttls-p): Rename from `imap-tls-p'.
+       (imap-starttls-open): Rename from `imap-tls-open'.
+
+1999-12-21  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 13.
+
+       * lisp/dgnuspath.el.in: Add the path of APEL to `load-path' as well
+       as its parent directory.
+
+       * lisp/imap.el (base64-encode-string, base64-decode-string):
+       Autoload "base64" instead of the tricky definitions.
+
+       * lisp/base64.el: Restore the original code and invalidate it; use
+       mel for the base64 codec.
+
+1999-12-20  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/imap.el (mel-find-function): Always require `mel' instead of
+       the use of autoloading.  Because the function `mel-find-function'
+       is defined by `defsubst'.
+
+1999-12-18  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-offline.el (gnus-offline-after-get-new-news): Refer to
+       `gnus-offline-connected', not `gnus-plugged'.
+
+       * lisp/gnus-ofsetup.el (gnus-setup-for-offline): No need to use
+       `unless'. Use `when'.
+
+       * lisp/imap.el (base64-encode-string): Fix. May work.
+
+1999-12-16  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-goto-mail-copies-to): If the field is
+       newly created, a string "never" is inserted in default.
+       (message-goto-mail-followup-to): If the field is newly created and
+       To field contains only one address, the address is inserted in
+       default.
+       (message-mode-map): New key stroke `C-c C-f c' for the command
+       `message-goto-mail-copies-to'.
+
+1999-12-15  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 12.
+
+       * lisp/nnimap.el (nnimap-request-newgroups): Use `member-if'.
+
+       * lisp/lpath.el (toolbar-gnus, get-charset-property,
+       font-lock-set-defaults, find-coding-system, coding-system-get):
+       Bind them for FSF Emacsen.
+       (read-color, x-defined-colors, compute-motion): Don't bind.
+
+       * lisp/imap.el (imap-digest-md5-auth, imap-cram-md5-auth): Use
+       `base64-encode-string' and `base64-decode-string' instead of
+       `imap-base64-encode-string' or `imap-base64-decode-string'.
+       (base64-encode-string): New function.  It won't be defined if it
+       is already bound and the optional second arg is allowed.
+       (base64-decode-string): New function defined by `defun-maybe'.
+       (imap-base64-encode-string, imap-base64-decode-string): Remove.
+       (mel-find-function): Autoload "mel".
+
+       * lisp/dgnushack.el (read-color, x-defined-colors, event-object,
+       get-popup-menu-response, toolbar-gnus, get-charset-property,
+       find-coding-system, coding-system-get, font-lock-set-defaults):
+       Don't bind.
+       (union, member-if, mapcon, mapc, last): Don't define as compiler
+       macros under XEmacs.  It is based on Hrvoje's advice.
+       (member-if): New compiler macro for emulating cl function.
+
+1999-12-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/imap.el (imap-base64-encode-string): Use `static-if' instead
+       of `static-condition-case'.
+
+1999-12-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 11.
+
+       * lisp/imap.el (imap-base64-encode-string): Allow the optional 2nd
+       arg `no-line-break'.
+
+1999-12-14   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/imap.el: Require `digest-md5' when compiling; add autoload
+       settings for `digest-md5-parse-digest-challenge' and
+       `digest-md5-digest-response'.
+       (imap-authenticators): Add `digest-md5'.
+       (imap-authenticator-alist): Setup for `digest-md5'.
+       (imap-digest-md5-p): New function.
+       (imap-digest-md5-auth): New function.
+
+1999-12-12  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/mail-source.el (mail-source-fetch-imap): Each temporary
+       buffer name must be specific to its mail source.
+
+1999-12-11  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 10.
+
+       * lisp/gnus-offline.el (gnus-offline-define-menu-and-key): Don't
+       call too many `static-if's.
+
+       * lisp/gnus-uu.el (gnus-uu-grab-move): Simply copy FILE if
+       `make-symbolic-link' is not availabe.
+
+       * lisp/lpath.el (TopLevel): Don't warn about `make-symbolic-link'.
+
+1999-12-11  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-offline.el (gnus-offline-set-unplugged-state): Call
+       the original `gnus-agent-toggle-plugged'.
+
+       * lisp/mail-source.el (mail-source-fetch-imap): Don't create
+       multiple temporary buffers, and don't kill one.
+
+1999-12-10  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 09.
+
+       * lisp/gnus-ofsetup.el (gnus-setup-for-offline): Accept an
+       optional argument `force'. Use `read-file-name' instead of
+       `read-directory-name'.
+
+1999-12-10  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-numbser): Increment to 08.
+
+       * lisp/gnus-agent.el (gnus): Give up to advise here.
+       (gnus-group-get-new-news): New advice instead.
+
+       * lisp/gnus-offline.el (gnus-offline-setup): Call
+       `gnus-offline-processed-by-timer' and `gnus-offline-error-check'
+       here.
+       (gnus-offline-define-menu-and-key): Simplify.
+       (gnus-offline-processed-by-timer): Call `gnus-group-get-new-news'
+       interactively.
+
+       * lisp/gnus-ofsetup.el (TopLevel): Require `read-passwd' here, not in
+       `gnus-offline-setting-file'.
+       (gnus-nntp-service): Set this variable here, not in
+       `gnus-offline-setting-file'
+       (gnus-nntp-server): Ditto.
+       (gnus-after-getting-new-news-hook): Ditto.
+       (message-send-hook): Ditto.
+       (mail-source-read-passwd): Ditto.
+       (gnus-setup-news-hook): Ditto.
+       (gnus-setup-for-offline): Now one can get mails from `imap',
+       `file', `directory' or `maildir'.
+
+       * lisp/read-passwd.el (read-pw-set-mail-source-passwd-cache):
+       Ignore non-POP mail sources.
+
+1999-12-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 07.
+
+       * lisp/gnus-util.el (gnus-union): Remove.
+       (gnus-ems-redefine): Don't call it; don't require `gnus-ems'.
+
+       * lisp/gnus-agent.el (gnus-agent-fetch-headers): Use `union'
+       instead of `gnus-union'.
+
+1999-12-10  A.Hitachi       <a_hitachi@msi.biglobe.ne.jp>
+            Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (union): New compiler macro for emulating cl
+       function.
+
+1999-12-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-util.el: Require `gnus-ems'.
+       (gnus-ems-redefine): Call it to redefine the functions
+       `gnus-truncate-string', etc.
+       (gnus-union): Fix doc string.
+
+       * lisp/dgnushack.el (mapcon, mapc): Eliminate the redundant code.
+
+1999-12-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 06.
+
+1999-12-09  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/dgnushack.el (dgnushack-install-package): Preserve any file
+       in $(PACKAGEDIR)/lisp/t-gnus if it is without .el or .elc suffix.
+
+1999-12-09  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (mapcon): New compiler macro for emulating cl
+       function.
+       (mapc): Bug fix - treat the last arg as a list.
+
+1999-12-08  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 05.
+
+       * lisp/gnus-agent.el (gnus): New advice. Always synchronize the
+       modeline "Plugged" status display with the value of
+       `gnus-plugged'.
+
+       * lisp/gnus-offline.el (TopLevel): Require `gnus-group' at the
+       compile time.
+       (gnus-offline-set-online-sendmail-function): defsubst.
+       (gnus-offline-set-offline-sendmail-function): Ditto.
+       (gnus-offline-set-offline-post-news-function): Ditto.
+       (gnus-offline-set-online-post-news-function): Ditto.
+       (gnus-offline-disable-fetch-mail): Ditto.
+       (gnus-offline-enable-fetch-mail): Ditto.
+       (gnus-offline-setup): Fix typo.
+       (gnus-offline-gnus-get-new-news): Abolish.
+       (gnus-offline-toggle-plugged): Ditto.
+       (gnus-offline-agent-expire): Ditto.
+       (gnus-group-get-new-news): New advice which does things
+       `gnus-offline-gnus-get-new-news' was doing.
+       (gnus-agent-toggle-plugged): New advice which does thing
+       `gnus-offline-toggle-plugged' was doing.
+       (gnus-agent-expire): New advice which does things
+       `gnus-offline-agent-expire' was doing.
+       (gnus-offline-define-menu-and-key): No longer substitute key
+       definitions on `gnus-group-mode-map'. No longer swap commands for
+       a toolbar button.
+       (gnus-offline-after-get-new-news): Do jobs only when
+       `gnus-plugged' is t.
+
+       * lisp/gnus-ofsetup.el (gnus-ofsetup-customize): Compile lambda
+       expressions.
+
+1999-12-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/message.el (message-yank-add-new-references): Fix doc string.
+
+       * texi/{message-ja.texi, message.texi}
+       (message-list-references-add-position,
+       message-yank-add-new-references): Add documentations.
+
+1999-12-07  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus-offline.el (gnus-offline-gettext): Rename from
+       `gnus-offline-get-message'.
+
+       * lisp/gnus-ofsetup.el (gnus-ofsetup-gettext): Rename from
+       `gnus-ofsetup-get-message'.
+
+1999-12-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 04.
+       (smiley-toggle-buffer): Autoload "smiley" or "gnus-bitmap".
+
+       * lisp/gnus-art.el (gnus-article-prepare-mime-display): Don't use
+       `get-text-property' in the outside of the boundary.
+       (gnus-article-smiley-display): New function.
+       (gnus-treatment-function-alist): Use it.
+
+       * lisp/dgnushack.el (byte-optimize-form-code-walker): Replace with
+       the bug fixed version rigidly instead of the use of `defadvice'.
+
+       * lisp/message.el (font-lock-after-change-function): Don't use
+       `compile' for the arg of `defadvice'.
+
+1999-12-06  Keiichi Suzuki  <keiichi@nanap.org>
+
+       * lisp/message.el (message-yank-add-new-references): New option
+       value `message-id-only'.
+       (message-yank-original): Likewise.
+       (message-list-references-add-position): New user option.
+       (message-list-references): When
+       `message-list-references-add-position' is integer value, the order
+       of designate number message-ids is kept.
+
+1999-12-06  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 03.
+
+       * lisp/gnus-offline.el (gnus): Don't advise here.
+       (TopLevel): Call `gnus-offline-define-menu-and-key'.
+       (gnus-offline-setup): Don't call
+       `gnus-offline-define-menu-and-key' here.
+
+       * lisp/gnus-ofsetup.el (gnus-offline-update-setting-file): Don't
+       rely on `gnus-load-hook'.
+       (gnus): New advice. Call `gnus-offline-setup' when everything is
+       done.
+
+       * lisp/gnus-start.el (save-buffers-kill-emacs): Compile the advice
+       at the compile time. Use `gnus-alive-p'.
+
+1999-12-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 02.
+
+       * lisp/dgnushack.el (char-after): Uncomment the byte-optimization;
+       don't use `byte-defop-compiler'.
+       (byte-optimize-form-code-walker): Advise it for fixing the bug in
+       and/or forms.  The original idea is devised by FUKUI-san, modified
+       by KOBAYASHI-san.
+       (max-specpdl-size): Set 3000.
+
+1999-12-05  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>
+
+       * lisp/gnus.el (gnus-revision-number): Increment to 01.
+
+       * lisp/gnus-offline.el (gnus): New advice. synchronize
+       `gnus-offline-connected' with `gnus-plugged'.
+
+1999-12-04   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.14.0.
+       (gnus-revision-number): Clear to 00.
+
+       * README.branch.ja: Update for t-gnus-6_14 branch.
+       * README.branch: Ditto.
+       * README.T-gnus: Ditto.
+       * README.semi.ja: Ditto.
+       * README.semi: Ditto.
+
+       * lisp/{rfc2047.el,nnweb.el,nnultimate.el,nntp.el,nnslashdot.el,
+       nnmh.el,nnfolder.el,nndoc.el,mml.el,mm-view.el,mm-util.el,
+       mm-bodies.el,message.el,mail-source.el,gnus.el,gnus-uu.el,
+       gnus-sum.el,gnus-start.el,gnus-msg.el,gnus-int.el,gnus-cache.el,
+       gnus-art.el,dgnushack.el,ChangeLog}: Sync up with Gnus v5.8.2.
+
+       * texi/{message.texi,message-ja.texi,gnus.texi,gnus-ja.texi,
+       gnus-faq-ja.texi,ChangeLog}: Modify for T-gnus 6.14; sync up with
+       Gnus v5.8.2.
+
+       * t-gnus-6_14: NEW PUBLIC BRANCH.
+
 1999-12-03  Hirokazu FUKUI  <hfukui@sannet.ne.jp>
             Katsumi Yamaoka <yamaoka@jpl.org>
 
index ae36555..057a7f6 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
@@ -7,6 +7,22 @@ internationalization and mail-fetching.
 *** The mail-fetching functions have changed.  See the manual for the
 many details.  In particular, all procmail fetching variables are gone.
 
+If you used procmail like in
+
+(setq nnmail-use-procmail t)
+(setq nnmail-spool-file 'procmail)
+(setq nnmail-procmail-directory "~/mail/incoming/")
+(setq nnmail-procmail-suffix "\\.in")
+
+this now has changed to 
+
+(setq mail-sources
+      '((directory :path "~/mail/incoming/"
+                  :suffix ".in")))
+
+More information is available in the info doc at Select Methods ->
+Getting Mail -> Mail Sources
+
 *** Gnus is now a MIME-capable reader.  This affects many parts of
 Gnus, and adds a slew of new commands.  See the manual for details.
 
@@ -31,3 +47,8 @@ ever-changing layouts.
 
 *** Gnus can now read IMAP mail via nnimap.
 
+\f
+Local variables:
+mode: outline
+paragraph-separate: "[         \f]*$"
+end:
index 0dbddc4..a1bd47d 100644 (file)
@@ -1,5 +1,6 @@
 prefix = @prefix@
 datadir = @datadir@
+infodir = @infodir@
 lispdir = @lispdir@
 srcdir = @srcdir@
 
@@ -7,6 +8,30 @@ srcdir = @srcdir@
 EMACS = @EMACS@
 XEMACS = @XEMACS@
 PACKAGEDIR = @PACKAGEDIR@
+GNUS_PRODUCT_NAME = @GNUS_PRODUCT_NAME@
+
+# It may be needed for Meadow/NTEmacs when sh.exe is used for SHELL.
+# Because Meadow/NTEmacs will get the value of the current-directory from
+# the environment variable PWD, but sh.exe will not take care of it even
+# if the current-directory has changed.  So we should invalidate it.
+PWD=
+
+# It will be used to look for the XEmacs package path if this file is
+# mis-configured (e.g. configured for FSFmacs).
+EXAMINE_PACKAGEDIR = $(XEMACS) -batch -q -no-site-file -eval \
+       "(let (package-dir) \
+          (if (boundp (quote early-packages)) \
+              (let ((dirs (delq nil (append (if early-package-load-path \
+                                                early-packages) \
+                                            (if late-package-load-path \
+                                                late-packages) \
+                                            (if last-package-load-path \
+                                                last-packages))))) \
+                (while (and dirs (not package-dir)) \
+                  (if (file-directory-p (car dirs)) \
+                      (setq package-dir (car dirs) \
+                            dirs (cdr dirs)))))) \
+          (princ (or package-dir \"\")))" 2>/dev/null
 
 all: lick info
 
@@ -15,24 +40,97 @@ all-ja: lick info info-ja
 lick:
        cd lisp && $(MAKE) EMACS="$(EMACS)" lispdir="$(lispdir)" all
 
-install:
-       cd lisp && $(MAKE) EMACS="$(EMACS)" lispdir="$(lispdir)" install
-       cd texi && $(MAKE) EMACS="$(EMACS)" install
-
-# Rule for XEmacs package.
-package: xlick xinfo
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" package
+install: install-lisp install-info
 
-install-package: xinfo
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" PACKAGEDIR="$(PACKAGEDIR)" \
-               install-package
+install-ja: install install-info-ja
 
-package-ja: xlick xinfo xinfo-ja
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" package
+install-lisp:
+       cd lisp && $(MAKE) EMACS="$(EMACS)" lispdir="$(lispdir)" install
 
-install-package-ja: xinfo xinfo-ja
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" PACKAGEDIR="$(PACKAGEDIR)" \
-               install-package
+install-info:
+       cd texi && $(MAKE) EMACS="$(EMACS)" infodir="$(infodir)" install
+
+install-info-ja:
+       cd texi && $(MAKE) EMACS="$(EMACS)" infodir="$(infodir)" install-ja
+
+## Rule for XEmacs package.
+install-package: xclever compose-package remove-extra-files-in-package \
+       install-package-lisp \
+       install-package-info install-package-manifest
+
+install-package-ja: xclever compose-package remove-extra-files-in-package \
+       install-package-lisp \
+       install-package-info install-package-info-ja \
+       install-package-manifest
+
+package: xlick xinfo compose-package
+
+package-ja: xlick xinfo xinfo-ja compose-package
+
+# Sub-rule for XEmacs package.
+install-package-lisp:
+       @if test x$(PACKAGEDIR) = x; then \
+         package_dir=`$(EXAMINE_PACKAGEDIR)`; \
+       else \
+         package_dir="$(PACKAGEDIR)"; \
+       fi; \
+       echo "cd lisp && $(MAKE) EMACS=$(XEMACS)" \
+               "lispdir=$$package_dir""/lisp/$(GNUS_PRODUCT_NAME)" \
+               "install-without-compiling"; \
+       cd lisp && $(MAKE) EMACS="$(XEMACS)" \
+               lispdir="$$package_dir""/lisp/$(GNUS_PRODUCT_NAME)" \
+               install-without-compiling
+
+install-package-info:
+       @if test x$(PACKAGEDIR) = x; then \
+         package_dir=`$(EXAMINE_PACKAGEDIR)`; \
+       else \
+         package_dir="$(PACKAGEDIR)"; \
+       fi; \
+       echo "cd texi && $(MAKE) EMACS=$(XEMACS)" \
+               "infodir=$$package_dir""/info install-info"; \
+       cd texi && $(MAKE) EMACS="$(XEMACS)" \
+               infodir="$$package_dir""/info" install-info
+
+install-package-info-ja:
+       @if test x$(PACKAGEDIR) = x; then \
+         package_dir=`$(EXAMINE_PACKAGEDIR)`; \
+       else \
+         package_dir="$(PACKAGEDIR)"; \
+       fi; \
+       echo "cd texi && $(MAKE) EMACS=$(XEMACS)" \
+               "infodir=$$package_dir""/info install-ja-info"; \
+       cd texi && $(MAKE) EMACS="$(XEMACS)" \
+               infodir="$$package_dir""/info" install-ja-info
+
+install-package-manifest:
+       @if test x$(PACKAGEDIR) = x; then \
+         package_dir=`$(EXAMINE_PACKAGEDIR)`; \
+       else \
+         package_dir="$(PACKAGEDIR)"; \
+       fi; \
+       echo "cd lisp && $(MAKE) EMACS=$(XEMACS) PACKAGEDIR=$$package_dir" \
+               "install-package-manifest"; \
+       cd lisp && $(MAKE) EMACS="$(XEMACS)" PACKAGEDIR=$$package_dir \
+               install-package-manifest
+
+remove-extra-files-in-package:
+       @if test x$(PACKAGEDIR) = x; then \
+         package_dir=`$(EXAMINE_PACKAGEDIR)`; \
+       else \
+         package_dir="$(PACKAGEDIR)"; \
+       fi; \
+       echo "cd lisp && $(MAKE) EMACS=$(XEMACS) PACKAGEDIR=$$package_dir" \
+               "remove-extra-files-in-package"; \
+       cd lisp && $(MAKE) EMACS="$(XEMACS)" PACKAGEDIR=$$package_dir \
+               remove-extra-files-in-package
+
+compose-package:
+       cd lisp && $(MAKE) EMACS="$(XEMACS)" compose-package
+##
+
+xclever:
+       cd lisp && $(MAKE) EMACS="$(XEMACS)" lispdir="$(lispdir)" clever
 
 xlick:
        cd lisp && $(MAKE) EMACS="$(XEMACS)" lispdir="$(lispdir)" all
@@ -41,7 +139,7 @@ xinfo:
        cd texi && $(MAKE) EMACS="$(XEMACS)" all-info
 
 xinfo-ja:
-       cd texi && $(MAKE) EMACS="$(XEMACS)" MAKEINFO=no ja-info
+       cd texi && $(MAKE) EMACS="$(XEMACS)" ja-info
 
 # Rule for Lars and nobody else.
 some:
@@ -53,30 +151,27 @@ info:
        cd texi && $(MAKE) EMACS="$(EMACS)" all
 
 info-ja:
-       cd texi && $(MAKE) EMACS=$(EMACS) MAKEINFO=no ja
+       cd texi && $(MAKE) EMACS=$(EMACS) ja
 
 clean:
        rm -f */*.orig */*.rej *.orig *.rej
        rm -f MANIFEST.*
        for i in lisp texi; do (cd $$i; $(MAKE) clean); done
 
-xsome:
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" some
-
 elclean:
        cd lisp && rm -f *.elc auto-autoloads.el custom-load.el
 
 x:
        $(MAKE) EMACS="$(XEMACS)"
 
+xsome:
+       $(MAKE) EMACS="$(XEMACS)" some
+
 distclean: clean
        rm -rf *~
        for i in lisp texi; do (cd $$i; $(MAKE) distclean); done
        rm -f config.log config.status config.cache Makefile
 
-osome:
-       $(MAKE) EMACS="$(XEMACS)" some
-
 config.status: $(srcdir)/configure
        $(SHELL) ./config.status --recheck
 $(srcdir)/configure: $(srcdir)/configure.in
index 3f764d3..7a45479 100644 (file)
@@ -1,30 +1,38 @@
 How to build T-gnus with Mule 2.3 based on Emacs 19.34.
 
-FIX loaddefs.el
-===============
+FIXING loaddefs.el
+==================
 
 Unfortunately, some variables for `message' are predefined in lisp/
 loaddefs.el which is dumped in Mule executable file.  It is uninvited,
 moreover, it has a bad influence.  So you should remove these
 definitions from lisp/loaddefs.el and rebuild Mule.  However, if you
-don't want to rebuild Mule, put the following lines in the beginning
-of .emacs file instead.
-
-(mapcar
- (lambda (symbol)
-   (makunbound (intern (format "message-%s" symbol))))
- '(citation-line-function
-   cite-function courtesy-message default-headers default-mail-headers
-   default-news-headers deletable-headers fcc-handler-function
-   followup-to-function from-style generate-headers-first generate-new-buffers
-   ignored-bounced-headers ignored-cited-headers ignored-mail-headers
-   ignored-news-headers ignored-resent-headers ignored-supersedes-headers
-   included-forward-headers indent-citation-function interactive
-   kill-buffer-on-exit post-method reply-to-function required-mail-headers
-   required-news-headers send-mail-function send-news-function
-   signature signature-before-forwarded-message signature-file
-   signature-separator syntax-checks use-followup-to user-organization-file
-   wide-reply-to-function yank-prefix))
+don't want to rebuild Mule, you may put the following lines in the
+beginning of .emacs file instead of rebuilding Mule.
+
+(let ((symbols '(citation-line-function
+                cite-function courtesy-message default-headers
+                default-mail-headers default-news-headers
+                deletable-headers fcc-handler-function
+                followup-to-function from-style
+                generate-headers-first generate-new-buffers
+                ignored-bounced-headers ignored-cited-headers
+                ignored-mail-headers ignored-news-headers
+                ignored-resent-headers ignored-supersedes-headers
+                included-forward-headers indent-citation-function
+                interactive kill-buffer-on-exit post-method
+                reply-to-function required-mail-headers
+                required-news-headers send-mail-function
+                send-news-function signature
+                signature-before-forwarded-message signature-file
+                signature-separator syntax-checks use-followup-to
+                user-organization-file wide-reply-to-function
+                yank-prefix))
+      symbol)
+  (while symbols
+    (setq symbol (car symbols)
+         symbols (cdr symbol))
+    (makunbound (intern (format "message-%s" symbol)))))
 
 
 INSTALL CUSTOM, APEL, FLIM, SEMI/WEMI
@@ -57,20 +65,83 @@ ftp://ftp.dina.kvl.dk/pub/Staff/Per.Abrahamsen/custom/custom-1.9962.tar.gz
 INSTALL T-gnus
 ==============
 
-There are two ways of making T-gnus with Mule 2.3 based on Emacs 19.34.
+There are three ways of making T-gnus with Mule 2.3 based on Emacs 19.34.
 
- 1. Use the configure option `--with-addpath=' to specify the colon
-    separated directory names where EMU, APEL or CUSTOM packages have
-    already installed.  For example:
+1. If you have installed EMU, APEL, FLIM and SEMI or WEMI packages
+   under the standard load-path, for instance:
 
-    % configure --with-emacs=mule\
-      --with-addpath=~/elisp/emu:~/elisp/apel:~elisp/custom
-    % make install
+   EMU:  /usr/local/share/mule/19.34/site-lisp/
+   APEL: /usr/local/share/mule/site-lisp/apel/
+   FLIM: /usr/local/share/mule/site-lisp/flim/
+   SEMI: /usr/local/share/mule/site-lisp/semi/
 
- 2. Copy `sample.lpath.el' to `~/.lpath.el' and modify it suitably for
-    your environment.  Then type as following:
+   What is more, if you have been replaced old CUSTOM with new CUSTOM
+   or if you have installed new CUSTOM directly under the standard
+   load-path as such as /usr/local/share/mule/19.34/site-lisp/, you
+   may have nothing to be done; type the following commands right now.
 
-    % configure
-    % make EMACS=mule
+   % ./configure --with-emacs=mule
+   % make install
 
-    In this case, you shuold install manually.
+   However, if you have installed new CUSTOM in the subdirectory under
+   the standard load-path, use the configure option `--with-addpath='
+   as follows:
+
+   % ./configure --with-emacs=mule\
+     --with-addpath=/usr/local/share/mule/site-lisp/custom/
+   % make install
+
+   or you can use the file subdirs.el under the parent directory of
+   the subdirectory of CUSTOM to add it into load-path which contain
+   the following contents:
+
+   (normal-top-level-add-to-load-path
+    '("custom/" "and the other subdirectories.../"))
+
+   and then just type:
+
+   % ./configure --with-emacs=mule
+   % make install
+
+2. If you have installed EMU, APEL, FLIM and SEMI or WEMI packages in
+   the non-standard load-path, use the configure option
+   `--with-addpath=' with the colon separated directory names where
+   EMU, APEL or CUSTOM packages are installed.  For example:
+
+   % ./configure --with-emacs=mule\
+     --with-addpath=~/elisp/emu/:~/elisp/apel/:~/elisp/custom/
+   % make install
+
+   In this case, you have no need to add paths of FLIM, SEMI or WEMI
+   if they are installed under the directory which is same as the
+   parent directory of APEL.
+
+3. This is another way to install T-gnus when you have installed EMU,
+   APEL, FLIM and SEMI or WEMI packages in the non-standard load-path.
+   Copy the file `sample.lpath.el' which is included in the
+   distribution to `~/.lpath.el' and modify it suitably for your
+   environment.  And then type the following command.
+
+   % ./configure --with-emacs=mule
+   % make install
+
+
+USING Emacs W3
+==============
+
+;; By the way, it is the point, does anyone know where do we find
+;; Emacs W3 package fitting with Mule 2.3 based on Emacs 19.34? :-p
+
+Some modules of T-gnus (e.g. nnshimbun) requires Emacs W3.  You can
+build T-gnus to be abel to use them, if you already have Emacs W3
+installed.  For that, you should specify the path where Emacs W3 is
+installed using the configure option `--with-w3=' or editing the file
+`~/.lpath.el'.  Here is an example for using the configure option:
+
+   % ./configure --with-emacs=mule\
+     --with-w3=/usr/local/share/mule/site-lisp/w3/
+   % make install
+
+Don't mind if configure says "W3... not found".  It is currently
+malfunction when the configure option `--with-w3=' is not used even if
+the path of Emacs W3 is specified in the file `~/.lpath.el'.
index d759e64..5f79393 100644 (file)
@@ -1,30 +1,39 @@
 Emacs 19.34 \e$B$r%Y!<%9$K$7$?\e(B Mule 2.3 \e$B$G\e(B T-gnus \e$B$r:n$kJ}K!!#\e(B
 
-FIX loaddefs.el
-===============
+FIXING loaddefs.el
+==================
 
 \e$B;DG0$J$3$H$K$$$/$D$+$N\e(B `message' \e$B$G;H$&JQ?t$,\e(B lisp/loaddefs.el \e$B$GDj5A\e(B
 \e$B$5$l$F$$$F\e(B Mule \e$B$N<B9T%U%!%$%k$KAH$_9~$^$l$F$7$^$C$F$$$^$9!#$3$l$OM>7W\e(B
 \e$B$J$*@$OC$@$7!"$7$+$b0-1F6A$,$"$j$^$9!#$=$3$G$"$J$?$O$=$l$i$NDj5A$r\e(B
 lisp/loaddefs.el \e$B$+$i:o=|$7$F!"\e(BMule \e$B$r:n$jD>$5$J$1$l$P$J$j$^$;$s!#\e(B
 \e$B$7$+$7!"$b$7$"$J$?$,\e(B Mule \e$B$r:n$jD>$9$3$H$rK>$^$J$$$J$i$P!"\e(B.emacs \e$B%U%!\e(B
-\e$B%$%k$N@hF,$K0J2<$N3F9T$r=q$-9~$`$3$H$GBeMQ$9$k$3$H$,$G$-$^$9!#\e(B
-
-(mapcar
- (lambda (symbol)
-   (makunbound (intern (format "message-%s" symbol))))
- '(citation-line-function
-   cite-function courtesy-message default-headers default-mail-headers
-   default-news-headers deletable-headers fcc-handler-function
-   followup-to-function from-style generate-headers-first generate-new-buffers
-   ignored-bounced-headers ignored-cited-headers ignored-mail-headers
-   ignored-news-headers ignored-resent-headers ignored-supersedes-headers
-   included-forward-headers indent-citation-function interactive
-   kill-buffer-on-exit post-method reply-to-function required-mail-headers
-   required-news-headers send-mail-function send-news-function
-   signature signature-before-forwarded-message signature-file
-   signature-separator syntax-checks use-followup-to user-organization-file
-   wide-reply-to-function yank-prefix))
+\e$B%$%k$N@hF,$K0J2<$N3F9T$r=q$-9~$`$3$H$G!"\e(BMule \e$B$r:n$jD>$9Be$o$j$K$9$k$3\e(B
+\e$B$H$,$G$-$^$9!#\e(B
+
+(let ((symbols '(citation-line-function
+                cite-function courtesy-message default-headers
+                default-mail-headers default-news-headers
+                deletable-headers fcc-handler-function
+                followup-to-function from-style
+                generate-headers-first generate-new-buffers
+                ignored-bounced-headers ignored-cited-headers
+                ignored-mail-headers ignored-news-headers
+                ignored-resent-headers ignored-supersedes-headers
+                included-forward-headers indent-citation-function
+                interactive kill-buffer-on-exit post-method
+                reply-to-function required-mail-headers
+                required-news-headers send-mail-function
+                send-news-function signature
+                signature-before-forwarded-message signature-file
+                signature-separator syntax-checks use-followup-to
+                user-organization-file wide-reply-to-function
+                yank-prefix))
+      symbol)
+  (while symbols
+    (setq symbol (car symbols)
+         symbols (cdr symbol))
+    (makunbound (intern (format "message-%s" symbol)))))
 
 
 INSTALL CUSTOM, APEL, FLIM, SEMI
@@ -57,20 +66,87 @@ ftp://ftp.dina.kvl.dk/pub/Staff/Per.Abrahamsen/custom/custom-1.9962.tar.gz
 INSTALL T-gnus
 ==============
 
-Mule 2.3 based on Emacs 19.34 \e$B$G\e(B gnus \e$B$r:n$k$K$OFs$D$NJ}K!$,$"$j$^$9!#\e(B
+Emacs 19.34 \e$B$r%Y!<%9$K$7$?\e(B Mule 2.3 \e$B$G\e(B gnus \e$B$r:n$k$K$O;0$D$NJ}K!$,$"$j\e(B
+\e$B$^$9!#\e(B
 
- 1. configure \e$B%*%W%7%g%s$N\e(B `--with-addpath=' \e$B$r;H$C$F\e(B EMU, APEL \e$B$*$h$S\e(B
-    CUSTOM \e$B$N3F%Q%C%1!<%8$,%$%s%9%H!<%k$5$l$F$$$k>l=j$r;XDj$7$F2<$5$$!#\e(B
-    \e$BNc$($P\e(B
+1. \e$B$b$7$"$J$?$,\e(B EMU, APEL, FLIM \e$B$*$h$S\e(B SEMI \e$B$^$?$O\e(B WEMI \e$B$N3F%Q%C%1!<\e(B
+   \e$B%8$rI8=`$N\e(B load-path \e$B$N2<$K%$%s%9%H!<%k$7$F$$$k$H$7$^$9!#Nc$($P$3$&!#\e(B
 
-    % configure --with-emacs=mule\
-      --with-addpath=~/elisp/emu:~/elisp/apel:~elisp/custom
-    % make
+   EMU:  /usr/local/share/mule/19.34/site-lisp/
+   APEL: /usr/local/share/mule/site-lisp/apel/
+   FLIM: /usr/local/share/mule/site-lisp/flim/
+   SEMI: /usr/local/share/mule/site-lisp/semi/
 
- 2. `sample.lpath.el' \e$B$r\e(B `~/.lpath.el' \e$B$K%3%T!<$7$F!"$"$J$?$N4D6-$K\e(B
-    \e$B9g$&$h$&$K=q$-49$($F2<$5$$!#$=$7$F<!$N$h$&$K%?%$%W$7$F2<$5$$!#\e(B
+   \e$B$7$+$b!"$b$7$"$J$?$,8E$$\e(B CUSTOM \e$B$r?7$7$$\e(B CUSTOM \e$B$GCV$-49$($F$$$k$+!"\e(B
+   \e$B?7$7$$\e(B CUSTOM \e$B$r\e(B /usr/local/share/mule/19.34/site-lisp/ \e$B$N$h$&$JI8\e(B
+   \e$B=`$N\e(B load-path \e$B$ND>2<$K%$%s%9%H!<%k$7$F$$$k$J$i$P!"$"$J$?$O2?$b$9\e(B
+   \e$B$kI,MW$,$"$j$^$;$s!#:#$9$0$K0J2<$N%3%^%s%I$r%?%$%W$7$F2<$5$$!#\e(B
 
-    % configure
-    % make EMACS=mule
+   % ./configure --with-emacs=mule
+   % make install
 
-    \e$B$3$N>l9g\e(B install \e$B$O<j:n6H$G9T$J$C$F2<$5$$!#\e(B
+   \e$B$7$+$7!"$b$7$"$J$?$,?7$7$$\e(B CUSTOM \e$B$rI8=`$N\e(B load-path \e$B$N2<$N%5%V%G%#\e(B
+   \e$B%l%/%H%j$K%$%s%9%H!<%k$7$F$"$k$J$i$P!"0J2<$N$h$&$K\e(B configure \e$B%*%W\e(B
+   \e$B%7%g%s$N\e(B `--with-addpath=' \e$B$r;H$&$+!"\e(B
+
+   % ./configure --with-emacs=mule\
+     --with-addpath=/usr/local/share/mule/site-lisp/custom/
+   % make install
+
+   \e$B$"$k$$$O$"$J$?$O0J2<$NFbMF$r4^$`!"\e(BCUSTOM \e$B%5%V%G%#%l%/%H%j$N?F%G%#\e(B
+   \e$B%l%/%H%j$N2<$N\e(B subdirs.el \e$B%U%!%$%k$r;H$&$3$H$,$G$-$^$9!#\e(B
+
+   (normal-top-level-add-to-load-path
+    '("custom/" "and the other subdirectories.../"))
+
+   \e$B$=$7$FC1$K\e(B
+
+   % ./configure --with-emacs=mule
+   % make install
+
+   \e$B$H%?%$%W$7$F2<$5$$!#\e(B
+
+2. \e$B$b$7$"$J$?$,\e(B EMU, APEL, FLIM \e$B$*$h$S\e(B SEMI \e$B$^$?$O\e(B WEMI \e$B$N3F%Q%C%1!<\e(B
+   \e$B%8$rI8=`$G$O$J$$\e(B load-path \e$B$K%$%s%9%H!<%k$7$F$$$k$J$i$P!"%3%m%s$G\e(B
+   \e$B6h@Z$i$l$?\e(B EMU, APEL \e$B$*$h$S\e(B CUSTOM \e$B$,%$%s%9%H!<%k$5$l$F$$$k%G%#%l\e(B
+   \e$B%/%H%jL>$H\e(B configure \e$B%*%W%7%g%s$N\e(B `--with-addpath=' \e$B$r;H$C$F2<$5$$!#\e(B
+   \e$BNc$($P\e(B
+
+   % ./configure --with-emacs=mule\
+     --with-addpath=~/elisp/emu/:~/elisp/apel/:~/elisp/custom/
+   % make
+
+   \e$B$3$N>l9g!"$b$7\e(B FLIM, SEMI \e$B$^$?$O\e(B WEMI \e$B$,\e(B APEL \e$B$N?F%G%#%l%/%H%j$HF1\e(B
+   \e$B$8%G%#%l%/%H%j$N2<$K%$%s%9%H!<%k$5$l$F$$$k$J$i$P!"$=$l$i$N\e(B path \e$B$r\e(B
+   \e$BDI2C$9$kI,MW$O$"$j$^$;$s!#\e(B
+
+3. \e$B$3$l$O!"\e(BEMU, APEL, FLIM \e$B$*$h$S\e(B SEMI \e$B$^$?$O\e(B WEMI \e$B$N3F%Q%C%1!<%8$rI8\e(B
+   \e$B=`$G$O$J$$\e(B load-path \e$B$K%$%s%9%H!<%k$7$F$$$k>l9g$N!"JL$NJ}K!$G$9!#\e(B
+   \e$BG[I[$K4^$^$l$F$$$k%U%!%$%k\e(B `sample.lpath.el' \e$B$r\e(B `~/.lpath.el' \e$B$K%3\e(B
+   \e$B%T!<$7$F!"$"$J$?$N4D6-$K9g$&$h$&$K=q$-49$($F2<$5$$!#$=$7$F<!$N%3%^\e(B
+   \e$B%s%I$r%?%$%W$7$F2<$5$$!#\e(B
+
+   % ./configure --with-emacs=mule
+   % make install
+
+USING Emacs W3
+==============
+
+;; \e$B$H$3$m$G!"4N?4$J$3$H$J$s$G$9$,!"C/$+\e(B Emacs 19.34 \e$B$r%Y!<%9$K$7$?\e(B
+;; Mule 2.3 \e$B$KE,9g$9$k\e(B Emacs W3 \e$B$,$I$3$K$"$k$+CN$j$^$;$s$+\e(B? :-p
+
+\e$B$$$/$D$+$N\e(B T-gnus \e$B$N%b%8%e!<%k\e(B (\e$BNc$($P\e(B nnshimbun) \e$B$O\e(B Emacs W3 \e$B$rI,MW$H\e(B
+\e$B$7$^$9!#$b$7$"$J$?$,$9$G$K\e(B Emacs W3 \e$B$r%$%s%9%H!<%k$7$F$"$k$N$J$i$P!"$"\e(B
+\e$B$J$?$O$=$l$i$r;H$($k$h$&$K\e(B T-gnus \e$B$r:n$k$3$H$,$G$-$^$9!#$=$N$?$a$K$O!"\e(B
+configure \e$B%*%W%7%g%s$N\e(B `--with-w3=' \e$B$r;H$&$+\e(B `~/.lpath.el' \e$B%U%!%$%k$r\e(B
+\e$BJT=8$7$F!"\e(BEmacs W3 \e$B$,%$%s%9%H!<%k$5$l$F$$$k\e(B path \e$B$r;XDj$7$J$1$l$P$J$j\e(B
+\e$B$^$;$s!#0J2<$O\e(B configure \e$B%*%W%7%g%s$r;H$&Nc$G$9!#\e(B
+
+   % ./configure --with-emacs=mule\
+     --with-w3=/usr/local/share/mule/site-lisp/w3/
+   % make install
+
+\e$B$b$7\e(B configure \e$B$,!V\e(BW3... not found\e$B!W$H8@$C$F$b5$$K$7$J$$$G2<$5$$!#$?$H\e(B
+\e$B$(\e(B `~/.lpath.el' \e$B%U%!%$%k$G\e(B Emacs W3 \e$B$N\e(B path \e$B$,;XDj$5$l$F$$$F$b!"\e(B
+configure \e$B%*%W%7%g%s$N\e(B `--with-w3=' \e$B$r;H$o$J$$$H!"8=:_$=$l$O@5>o$KF/$-\e(B
+\e$B$^$;$s$N$G!#\e(B
diff --git a/README b/README
index e487c43..81e1586 100644 (file)
--- a/README
+++ b/README
@@ -21,16 +21,32 @@ in your .emacs file, or wherever you keep such things.
 
 To enable reading the Gnus manual, you could say something like:
 
+  (require 'info)
   (setq Info-default-directory-list 
         (cons "~/gnus-5.6.53/texi" Info-default-directory-list))
 
+or
+
+  (require 'info)
+  (setq Info-directory-list 
+        (cons "~/gnus-5.6.53/texi" Info-directory-list))
+
+depending on which version of Emacs or XEmacs you're using.
+
 Note that Gnus and GNUS can't coexist in a single Emacs. They both use
 the same function and variable names.  If you have been running GNUS
 in your Emacs, you should probably exit that Emacs and start a new one
 to fire up Gnus.
 
 Gnus does absolutely not work with anything older than Emacs 20.3 or
-XEmacs 20.0.  So you definitely need a new Emacs.
+XEmacs 21.1.1.  So you definitely need a new Emacs.  However, T-gnus
+does support `Mule 2.3 based on Emacs 19.34' (it is commonly called
+"Mule 2.3@19.34").  See the file `Mule23@1934.{en,ja}' for details.
+Furthermore, you might be able to use the versions of XEmacs prior to
+21.1.1, e.g. 20.4, with a little work.  For that, copy the file
+`timer.el' in the `contrib' directory to the `site-lisp' directory and
+do a `M-x byte-compile-file'.  This file is imported from one of the
+XEmacs package `fsf-compat-1.07-pkg.tar.gz'.
 
 Then you do a `M-x gnus', and everything should... uhm... it should
 work, but it might not. Set `debug-on-error' to t, and mail me the
@@ -49,4 +65,4 @@ There are four main things I want your help and input on:
    bit, and features you would like to see.
 
 Send any comments and all your bug fixes/complaints to
-`bugs@gnus.org'. 
+`semi-gnus-ja@meadowy.org' (or `bugs@gnus.org'). 
index b99d805..109da56 100644 (file)
@@ -28,6 +28,7 @@ of this file should be applied. If not, it might not.
 (require 'gnus-bbdb)
 (bbdb-initialize 'sc)  ;; 'Gnus or 'gnus should be deleted.
 (add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+(add-hook 'message-setup-hook 'gnus-bbdb-insinuate-message)
 
  If you would like to decode the quoted encoded words forcibly, even
 though FLIM does not decode them, put the following lines in your
@@ -42,15 +43,35 @@ though FLIM does not decode them, put the following lines in your
  This is a patch for bbdb.el / bbdb-hooks.el.
 
 ------ cut here ------ cut here ------ cut here ------ cut here ------
---- bbdb-hooks.el~     Tue Oct 13 03:13:50 1998
-+++ bbdb-hooks.el      Fri Oct 30 17:05:53 1998
-@@ -352,12 +352,22 @@
-       (marker (bbdb-header-start))
-       field pairs fieldval  ; do all bindings here for speed
-       regexp string notes-field-name notes
--       replace-p replace-or-add-msg)
-+      replace-p replace-or-add-msg
-+      extract-field-value-funtion)
+--- bbdb-2.32/lisp/bbdb-com.el~        Sun Feb 18 08:00:39 2001
++++ bbdb-2.32/lisp/bbdb-com.el Sun Feb 18 08:00:39 2001
+@@ -1620,7 +1620,7 @@
+           ;; to be enclosed in quotes.  Double-quotes and backslashes have
+           ;; already been escaped.  This quotes a few extra characters as
+           ;; well (!,%, and $) just for common sense.
+-          ((string-match "[][\000-\037\177()<>@,;:.!$%]" name)
++        ((string-match "[][\000-\037\177<>@,;.!$%]" name)
+            (format "\"%s\" <%s>" name net))
+           (t
+            (format "%s <%s>" name net)))))
+--- bbdb-2.32/lisp/bbdb-hooks.el~      Tue Jan 30 08:00:56 2001
++++ bbdb-2.32/lisp/bbdb-hooks.el       Tue Jan 30 08:00:56 2001
+@@ -83,6 +83,8 @@
+ ;;
+ ;;
++(eval-when-compile (require 'cl))
++
+ (require 'bbdb)
+ (defmacro the-v18-byte-compiler-sucks-wet-farts-from-dead-pigeons ()
+@@ -415,12 +417,23 @@
+          (marker (bbdb-header-start))
+          field pairs fieldval  ; do all bindings here for speed
+          regexp string notes-field-name notes
+-         replace-p replace-or-add-msg)
++         replace-p replace-or-add-msg
++       extract-field-value-funtion)
      (set-buffer (marker-buffer marker))
      (save-restriction
 -      (widen)
@@ -60,38 +81,40 @@ though FLIM does not decode them, put the following lines in your
 +          function)
 +      (or (progn
 +            (while (and (not extract-field-value-funtion)
-+                        (setq function (pop function-list)))
-+              (setq extract-field-value-funtion (funcall function)))
++                        (setq function (car function-list)))
++              (setq extract-field-value-funtion (funcall function)
++                    function-list (cdr function-list)))
 +            extract-field-value-funtion)
 +          (progn
 +            (widen)
 +            (goto-char marker)
 +            (setq extract-field-value-funtion 'bbdb-extract-field-value))))
 +      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
-              (string-match (bbdb-user-mail-names) fieldval))
-         ;; Don't do anything if this message is from us.  Note that we have
-         ;; to look at the message instead of the record, because the record
-@@ -368,7 +378,7 @@
-         (goto-char marker)
-         (setq field (car (car ignore-all))
-               regexp (cdr (car ignore-all))
--              fieldval (bbdb-extract-field-value field))
-+              fieldval (funcall extract-field-value-funtion field))
-         (if (and fieldval
-                  (string-match regexp fieldval))
-             (setq ignore t)
-@@ -382,7 +392,7 @@
-               pairs (cdr (car rest))  ; (REGEXP . STRING) or
-                                       ; (REGEXP FIELD-NAME STRING) or
-                                       ; (REGEXP FIELD-NAME STRING REPLACE-P)
--              fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
-+              fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
-         (if fieldval
-             (while pairs
-               (setq regexp (car (car pairs))
---- bbdb.el~   Tue Oct 13 03:14:55 1998
-+++ bbdb.el    Fri Oct 30 17:05:53 1998
-@@ -620,6 +620,7 @@
+                (string-match (bbdb-user-mail-names) fieldval))
+           ;; Don't do anything if this message is from us.  Note that we have
+           ;; to look at the message instead of the record, because the record
+@@ -431,7 +444,7 @@
+           (goto-char marker)
+           (setq field (car (car ignore-all))
+                 regexp (cdr (car ignore-all))
+-                fieldval (bbdb-extract-field-value field))
++                fieldval (funcall extract-field-value-funtion field))
+           (if (and fieldval
+                    (string-match regexp fieldval))
+               (setq ignore t)
+@@ -444,7 +457,8 @@
+                 pairs (cdr (car rest))  ; (REGEXP . STRING) or
+                                         ; (REGEXP FIELD-NAME STRING) or
+                                         ; (REGEXP FIELD-NAME STRING REPLACE-P)
+-                fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++                fieldval (funcall extract-field-value-funtion field))
++                                        ; e.g., Subject line
+           (when fieldval
+             (while pairs
+               (setq regexp (car (car pairs))
+--- bbdb-2.32/lisp/bbdb.el~    Sun Mar  4 20:30:09 2001
++++ bbdb-2.32/lisp/bbdb.el     Sun Mar  4 20:30:09 2001
+@@ -710,6 +710,7 @@
  (defvar bbdb-showing-changed-ones nil)
  (defvar bbdb-modified-p nil)
  (defvar bbdb-elided-display nil)
index 18f3e9b..81299ab 100644 (file)
@@ -29,6 +29,7 @@ bbdb-auto-notes-hook \e$B$r;HMQ$7$F$$$J$$J}$K$OITMW$G$9$,!";HMQ$7$F$$$kJ}\e(B
 (require 'gnus-bbdb)
 (bbdb-initialize 'sc)  ;; 'gnus / 'Gnus \e$B$O$O$:$7$F$/$@$5$$!#\e(B
 (add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+(add-hook 'message-setup-hook 'gnus-bbdb-insinuate-message)
 
 FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$;$s$,!"$=$l\e(B
 \e$B$r6/@)E*$K\e(B decode \e$B$7$?$$>l9g$K$O!"<!$N@_Dj$r2C$($F$/$@$5$$!#\e(B
@@ -42,15 +43,35 @@ FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$
 \e$B0J2<$O\e(B bbdb.el / bbdb-hooks.el \e$B$K$"$F$k\e(B patch \e$B$G$9!#\e(B
 
 ------ cut here ------ cut here ------ cut here ------ cut here ------
---- bbdb-hooks.el~     Tue Oct 13 03:13:50 1998
-+++ bbdb-hooks.el      Fri Oct 30 17:05:53 1998
-@@ -352,12 +352,22 @@
-       (marker (bbdb-header-start))
-       field pairs fieldval  ; do all bindings here for speed
-       regexp string notes-field-name notes
--       replace-p replace-or-add-msg)
-+      replace-p replace-or-add-msg
-+      extract-field-value-funtion)
+--- bbdb-2.32/lisp/bbdb-com.el~        Sun Feb 18 08:00:39 2001
++++ bbdb-2.32/lisp/bbdb-com.el Sun Feb 18 08:00:39 2001
+@@ -1620,7 +1620,7 @@
+           ;; to be enclosed in quotes.  Double-quotes and backslashes have
+           ;; already been escaped.  This quotes a few extra characters as
+           ;; well (!,%, and $) just for common sense.
+-          ((string-match "[][\000-\037\177()<>@,;:.!$%]" name)
++        ((string-match "[][\000-\037\177<>@,;.!$%]" name)
+            (format "\"%s\" <%s>" name net))
+           (t
+            (format "%s <%s>" name net)))))
+--- bbdb-2.32/lisp/bbdb-hooks.el~      Tue Jan 30 08:00:56 2001
++++ bbdb-2.32/lisp/bbdb-hooks.el       Tue Jan 30 08:00:56 2001
+@@ -83,6 +83,8 @@
+ ;;
+ ;;
++(eval-when-compile (require 'cl))
++
+ (require 'bbdb)
+ (defmacro the-v18-byte-compiler-sucks-wet-farts-from-dead-pigeons ()
+@@ -415,12 +417,23 @@
+          (marker (bbdb-header-start))
+          field pairs fieldval  ; do all bindings here for speed
+          regexp string notes-field-name notes
+-         replace-p replace-or-add-msg)
++         replace-p replace-or-add-msg
++       extract-field-value-funtion)
      (set-buffer (marker-buffer marker))
      (save-restriction
 -      (widen)
@@ -60,38 +81,40 @@ FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$
 +          function)
 +      (or (progn
 +            (while (and (not extract-field-value-funtion)
-+                        (setq function (pop function-list)))
-+              (setq extract-field-value-funtion (funcall function)))
++                        (setq function (car function-list)))
++              (setq extract-field-value-funtion (funcall function)
++                    function-list (cdr function-list)))
 +            extract-field-value-funtion)
 +          (progn
 +            (widen)
 +            (goto-char marker)
 +            (setq extract-field-value-funtion 'bbdb-extract-field-value))))
 +      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
-              (string-match (bbdb-user-mail-names) fieldval))
-         ;; Don't do anything if this message is from us.  Note that we have
-         ;; to look at the message instead of the record, because the record
-@@ -368,7 +378,7 @@
-         (goto-char marker)
-         (setq field (car (car ignore-all))
-               regexp (cdr (car ignore-all))
--              fieldval (bbdb-extract-field-value field))
-+              fieldval (funcall extract-field-value-funtion field))
-         (if (and fieldval
-                  (string-match regexp fieldval))
-             (setq ignore t)
-@@ -382,7 +392,7 @@
-               pairs (cdr (car rest))  ; (REGEXP . STRING) or
-                                       ; (REGEXP FIELD-NAME STRING) or
-                                       ; (REGEXP FIELD-NAME STRING REPLACE-P)
--              fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
-+              fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
-         (if fieldval
-             (while pairs
-               (setq regexp (car (car pairs))
---- bbdb.el~   Tue Oct 13 03:14:55 1998
-+++ bbdb.el    Fri Oct 30 17:05:53 1998
-@@ -620,6 +620,7 @@
+                (string-match (bbdb-user-mail-names) fieldval))
+           ;; Don't do anything if this message is from us.  Note that we have
+           ;; to look at the message instead of the record, because the record
+@@ -431,7 +444,7 @@
+           (goto-char marker)
+           (setq field (car (car ignore-all))
+                 regexp (cdr (car ignore-all))
+-                fieldval (bbdb-extract-field-value field))
++                fieldval (funcall extract-field-value-funtion field))
+           (if (and fieldval
+                    (string-match regexp fieldval))
+               (setq ignore t)
+@@ -444,7 +457,8 @@
+                 pairs (cdr (car rest))  ; (REGEXP . STRING) or
+                                         ; (REGEXP FIELD-NAME STRING) or
+                                         ; (REGEXP FIELD-NAME STRING REPLACE-P)
+-                fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++                fieldval (funcall extract-field-value-funtion field))
++                                        ; e.g., Subject line
+           (when fieldval
+             (while pairs
+               (setq regexp (car (car pairs))
+--- bbdb-2.32/lisp/bbdb.el~    Sun Mar  4 20:30:09 2001
++++ bbdb-2.32/lisp/bbdb.el     Sun Mar  4 20:30:09 2001
+@@ -710,6 +710,7 @@
  (defvar bbdb-showing-changed-ones nil)
  (defvar bbdb-modified-p nil)
  (defvar bbdb-elided-display nil)
@@ -102,3 +125,37 @@ FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$
 ------ cut here ------ cut here ------ cut here ------ cut here ------
 
 ---
+gnus-bbdb/split-mail()
+
+nnmail-split-fancy \e$B$G;HMQ$9$k$?$a$N4X?t$G$9!#<!$N$h$&$K;HMQ$7$F$/$@$5$$!#\e(B
+
+(setq nnmail-split-methods 'nnmail-split-fancy
+      nnmail-split-fancy
+      '(|
+        .....
+*1      (: gnus-bbdb/split-mail "from\\|to\\|cc"
+           'company "foo" "foo-group") 
+        .....
+*2      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'company "^bar")
+        .....
+*3      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'group)
+        .....
+*4      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'note "my friend"
+          '(|
+             .....
+        .....
+        ))
+
+*1 : From, To, Cc \e$B$$$:$l$+$N%X%C%@!<!&%U%#!<%k%I$K4^$^$l$k%a%$%k!&%"%I\e(B
+     \e$B%l%9$N$&$A\e(B BBDB \e$B$N\e(B `company' \e$B%U%#!<%k%I$K\e(B `foo' \e$B$,4^$^$l$k>l9g!"\e(B
+     `foo-group' \e$B$K?6$jJ,$1$^$9!#\e(B
+
+*2 : `company' \e$B%U%#!<%k%I$,\e(B `bar' \e$B$G;O$^$C$F$$$k>l9g!"\e(B`company' \e$B%U%#!<\e(B
+     \e$B%k%I$NFbMF$r$=$N$^$^%0%k!<%WL>$H$7$F;HMQ$7!"?6$jJ,$1$^$9!#\e(B
+
+*3 : `group' \e$B%U%#!<%k%I$,$"$k>l9g!"\e(B`group' \e$B%U%#!<%k%I$NFbMF$r$=$N$^$^\e(B
+     \e$B%0%k!<%WL>$H$7$F;HMQ$7!"?6$jJ,$1$^$9!#\e(B
+
+*4 : `note' \e$B%U%#!<%k%I$K\e(B `my friend' \e$B$,4^$^$l$k>l9g!"$=$N8e$m$K;XDj$5\e(B
+     \e$B$l$?5,B'$G?6$jJ,$1$^$9!#$3$N5,B'$N5-=RJ}K!$O!"DL>o$N\e(B
+     `nnmail-split-fancy' \e$B$G$N5-=RJ}K!$HF1$8$b$N$G$9!#\e(B
index b549f6d..b32db68 100644 (file)
@@ -1,6 +1,6 @@
 ========================================================================
 Codename:      T-gnus
-Branch Tag:    t-gnus-6_13
+Branch Tag:    t-gnus-6_14
 Branch Status: Public, Stable
 Branch Goal:   Implement latest features of gnus and offline features
                Use Gnus in Offline status.
@@ -31,8 +31,8 @@ NEWS:
 
   See TODO.ja
 
-* T-gnus 6.13 - this is based on Pterodactyl Gnus.
+* T-gnus 6.14 - this is based on Pterodactyl Gnus.
 
-  The latest T-gnus is T-gnus 6.13.4 (Based on pgnus-0.99).  It requires
-  SEMI/WEMI (1.13.5 or later), FLIM (1.13.1 or later), and APEL (9.20 or
+  The latest T-gnus is T-gnus 6.14.6 (Based on Gnus 5.8.8).  It requires
+  SEMI/WEMI (1.13.5 or later), FLIM (1.13.1 or later), and APEL (10.0 or
   later).
index 1f72794..4b7700d 100644 (file)
@@ -1,7 +1,7 @@
 README.branch --- description of branches and tags. (DRAFT)
 ========================================================================
 
-Semi-gnus revision tree (1999-08-04)
+Semi-gnus revision tree (2000-12-21)
 
     vendor      personal    main trunk      public
     branch      branches                    branches
@@ -22,12 +22,31 @@ qGnus 0.??  ------> Semi-gnus 6.0.0
        :                        :               :
        :                        :               V
        :                        :            6.10.072 -----> t-gnus-6_12
-       :        akr      <--  6.2.3             :     \      (for FLIM 1.12,
-       :        shuhei-k <--  6.3.1                    \      stable)
-Gnus 5.6.11 ------>           6.3.3                     \
-       :                      6.4.0 (for SEMI 1.5)       --> t-gnus-6_13
-       :                     (6.4.?)------> for SEMI 1.5     (for FLIM 1.13,
-       :                        |    \                        develop)
+       :                        :               :     \      (for FLIM 1.12,
+       :                        :               :      \      stable)
+       :                        :               :       \
+       :                        :               :        --> t-gnus-6_13
+       :                        :               :            (for FLIM 1.13,
+       :                        :               :             develop)
+       :                        :               :               :
+       :                        :         t-gnus-6_10-last-  t-gnus-6_13-last-
+       :                        :               | feedback      |
+       :                        :               +<--------------+
+       :                        :               |               |
+       :            ------------<---------------+            t-gnus-6_14
+       : Oort Gnus /            :               |            (for FLIM 1.13,
+       :     |    |             :               :             develop)
+       :     V    V             :                               |
+       :  t-gnus-6_15-quimby<---<-----(t-gnus-6_14-quimby)<-----+
+       :          |             :                               |
+       :          :             :                               :
+       :                        :
+       :        akr      <--  6.2.3
+       :        shuhei-k <--  6.3.1
+Gnus 5.6.11 ------>           6.3.3
+       :                      6.4.0 (for SEMI 1.5)
+       :                      (6.4.?)------> for SEMI 1.5
+       :                        |    \
        :                        |     \
 (Synch with original Gnus       |      ---> for SEMI 1.6
  was done many times, but    (6.4.?)------> 6.5 (for SEMI 1.7)
@@ -113,6 +132,8 @@ Public Branches
        pgnus-ichikawa  (Main trunk of T-gnus)
        t-gnus-6_12     T-gnus for SEMI 1.12/1.13, FLIM 1.12 API (stable)
        t-gnus-6_13     T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
+       t-gnus-6_14     T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
+     t-gnus-6_15-quimby        T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
 
 Personal Branches
 
index 079e5af..3b69df8 100644 (file)
@@ -1,7 +1,7 @@
 README.branch.ja --- branch \e$B$H\e(B tag \e$B$N@bL@\e(B (\e$BAp9F\e(B)
 ========================================================================
 
-Semi-gnus revision tree (1999-08-04)
+Semi-gnus revision tree (2000-12-21)
 
     vendor      personal    main trunk      public
     branch      branches                    branches
@@ -21,12 +21,31 @@ qGnus 0.??  ------> Semi-gnus 6.0.0
        :               +-------->---------------+
        :                        :               :
        :                        :               V
-       :                        :            6.10.072 ----> t-gnus-6_12
-       :        akr      <--  6.2.3             :     \     (for FLIM 1.12)
-       :        shuhei-k <--  6.3.1                    \
-Gnus 5.6.11 ------>           6.3.3                     --> t-gnus-6_13
-       :                      6.4.0 (for SEMI 1.5)          (for FLIM 1.13)
-       :                     (6.4.?)------> for SEMI 1.5
+       :                        :            6.10.072 -----> t-gnus-6_12
+       :                        :               :     \      (for FLIM 1.12,
+       :                        :               :      \      stable)
+       :                        :               :       \
+       :                        :               :        --> t-gnus-6_13
+       :                        :               :            (for FLIM 1.13,
+       :                        :               :             develop)
+       :                        :               :               :
+       :                        :         t-gnus-6_10-last-  t-gnus-6_13-last-
+       :                        :               | feedback      |
+       :                        :               +<--------------+
+       :                        :               |               |
+       :            ------------<---------------+            t-gnus-6_14
+       : Oort Gnus /            :               |            (for FLIM 1.13,
+       :     |    |             :               :             develop)
+       :     V    V             :                               |
+       :  t-gnus-6_15-quimby<---<-----(t-gnus-6_14-quimby)<-----+
+       :          |             :                               |
+       :          :             :                               :
+       :                        :
+       :        akr      <--  6.2.3
+       :        shuhei-k <--  6.3.1
+Gnus 5.6.11 ------>           6.3.3
+       :                      6.4.0 (for SEMI 1.5)
+       :                      (6.4.?)------> for SEMI 1.5
        :                        |    \
        :                        |     \
 (\e$B85$N\e(B Gnus \e$B$H$N\e(B Sync \e$B$O2?EY\e(B     |      ---> for SEMI 1.6
@@ -113,6 +132,8 @@ Public Branches
        pgnus-ichikawa  (Main trunk of T-gnus)
        t-gnus-6_12     T-gnus for SEMI 1.12/1.13, FLIM 1.12 API (stable)
        t-gnus-6_13     T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
+       t-gnus-6_14     T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
+     t-gnus-6_15-quimby        T-gnus for SEMI 1.13, FLIM 1.13 API (develop)
 
 Personal Branches
 
index a9910ff..c4376f1 100644 (file)
@@ -1,4 +1,4 @@
-This package contains T-gnus 6.13.
+This package contains T-gnus 6.14.
 
 What is T-gnus?
 ===============
@@ -8,7 +8,7 @@ features of Gnus and gnus-mime, so there are no need to install Gnus
 to use it, and you must not use gnus-mime for SEMI.
 
   It requires APEL, FLIM and SEMI packages, so please get and install
-them before to install it.  T-gnus 6.13 requires APEL 9.20 or later,
+them before to install it.  T-gnus 6.14 requires APEL 10.0 or later,
 FLIM (1.13.1 or later) and SEMI/WEMI (1.13.5 or later).  You can get
 these packages from:
 
@@ -24,15 +24,14 @@ How to get? (via CVS)
 
 (0) cvs login (first time only)
 
-    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
-       login
+    % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
 
     CVS password: [CR] # NULL string
 
 (1) checkout
 
-    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
-       checkout -r t-gnus-6_13 gnus
+    % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root \
+       checkout -r t-gnus-6_14 gnus
 
 (2) compile
 
@@ -42,13 +41,14 @@ How to get? (via CVS)
 
 (3) update
 
-    % cvs update -r t-gnus-6_13 gnus
+    % cvs update -r t-gnus-6_14 gnus
 
 Major tags are following:
 
-    t-gnus-6_12                Assigned to the latest stable version of T-gnus.
+    t-gnus-6_15-quimby Assigned to the latest version of T-gnus for
+                       developing and synchronizing with Oort Gnus.
 
-    t-gnus-6_13                Assigned to the latest development version of
+    t-gnus-6_14                Assigned to the latest development version of
                        T-gnus.
 
     pgnus-ichikawa     The main trunk of T-gnus.
@@ -81,19 +81,9 @@ For more detailed information, please read README.branch.
 How to get? (via ftp)
 =====================
 
-  The stable version of T-gnus is available from
+  T-gnus 6.14 is available from
 
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.12/
-
-  and the experimental version of T-gnus is available from
-
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.13/
-
-  In addition, semi-daily snapshots are also available from
-
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.12/snapshots/
-  or
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.13/snapshots/
+    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.14/snapshots/
 
   NOTE: These snapshots are manually created when the urge takes the
   administrator of the a-ftp site, and will usually not be tested.
@@ -109,8 +99,8 @@ send a bug report to the Gnus maintainers.
 is a Gnus proper, please send a bug report to the Semi-gnus mailing
 list:
 
-    semi-gnus-en@meadow.scphys.kyoto-u.ac.jp   (English)
-    semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp   (Japanese)
+    semi-gnus-en@meadowy.org   (English)
+    semi-gnus-ja@meadowy.org   (Japanese)
 
 Suggestions for T-gnus improvements are also welcome.
 
@@ -118,14 +108,17 @@ Suggestions for T-gnus improvements are also welcome.
 latest release of T-gnus, and discuss future enhancements to T-gnus.
 To join the Semi-gnus ML, send an empty e-mail to
 
-    semi-gnus-en-help@meadow.scphys.kyoto-u.ac.jp      (English)
-    semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp      (Japanese)
+    semi-gnus-en-help@meadowy.org      (English)
+    semi-gnus-ja-help@meadowy.org      (Japanese)
 
   In addition, we need developers.  If you would like to develop it,
-please send mail to cvs@chamonix.jaist.ac.jp with your account name
-and UNIX /etc/passwd style crypted password.  You can get the notice
-of modifications in chamonix open CVS server via the mail which also
-contains informations on the other modules.  To subscribe it, send an
-empty e-mail to
-
-    cvs-info-help@chamonix.jaist.ac.jp
+please send mail to cvs@cvs.m17n.org with your account name and your
+public key for ssh.  cvsroot is :ext:cvs@cvs.m17n.org:/cvs/root.
+If you cannot use ssh, please send UNIX /etc/passwd style crypted
+password instead.  cvsroot is
+:pserver:<accountname>@cvs.m17n.org:/cvs/root in this case.  You can
+get the notice of modifications in m17n open CVS server via the mail
+which also contains informations on the other modules.  To subscribe
+it, send an empty e-mail to
+
+    cvs-info-help@cvs.m17n.org
index 222f17a..791bebe 100644 (file)
@@ -1,4 +1,4 @@
-\e$B$3$N%Q%C%1!<%8$K$O\e(B T-gnus 6.13 \e$B$,F~$C$F$$$^$9!#\e(B
+\e$B$3$N%Q%C%1!<%8$K$O\e(B T-gnus 6.14 \e$B$,F~$C$F$$$^$9!#\e(B
 
 T-gnus \e$B$H$O!)\e(B
 =============
@@ -9,7 +9,7 @@ T-gnus \e$B$H$O!)\e(B
 \e$B$7$F$O$$$1$^$;$s!#\e(B
 
   APEL, FLIM \e$B$*$h$S\e(B SEMI \e$B%Q%C%1!<%8$,I,MW$G$9$N$G!"%$%s%9%H!<%k$9$kA0\e(B
-\e$B$K$=$l$i$r%$%s%9%H!<%k$7$F$/$@$5$$!#\e(BT-gnus 6.13 \e$B$O\e(B APEL 9.20 \e$B0J>e!"\e(B
+\e$B$K$=$l$i$r%$%s%9%H!<%k$7$F$/$@$5$$!#\e(BT-gnus 6.14 \e$B$O\e(B APEL 10.0 \e$B0J>e!"\e(B
 FLIM (1.13.1 \e$B0J>e\e(B) \e$B$*$h$S\e(B SEMI/WEMI (1.13.5 \e$B0J>e\e(B) \e$B$rI,MW$H$7$^$9!#$=$l\e(B
 \e$B$i$N%Q%C%1!<%8$O\e(B
 
@@ -26,15 +26,14 @@ ftp://ftp.m17n.org/pub/mule/semi/semi-1.13-for-flim-1.13/
 
 (0) cvs login (\e$B=i2s$N$_\e(B)
 
-    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
-       login
+    % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
 
     CVS password: [CR] # \e$B6uJ8;zNs\e(B
 
 (1) checkout
 
-    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
-       checkout -r t-gnus-6_13 gnus
+    % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root \
+       checkout -r t-gnus-6_14 gnus
 
 (2) compile
 
@@ -44,13 +43,14 @@ ftp://ftp.m17n.org/pub/mule/semi/semi-1.13-for-flim-1.13/
 
 (3) update
 
-    % cvs update -r t-gnus-6_13 gnus
+    % cvs update -r t-gnus-6_14 gnus
 
 \e$B<g$J%?%0$O0J2<$N$h$&$K$J$C$F$$$^$9\e(B:
 
-    t-gnus-6_12                \e$B:G?7$N\e(B T-gnus \e$B$N0BDjHG$K3d$jEv$F$i$l$^$9!#\e(B
+    t-gnus-6_15-quimby \e$B:G?7$N\e(B T-gnus \e$B$K3d$jEv$F$i$l!"3+H/$H\e(B Oort Gnus
+                       \e$B$H$NF14|$r9T$J$$$^$9!#\e(B
 
-    t-gnus-6_13                \e$B:G?7$N\e(B T-gnus \e$B$N3+H/HG$K3d$jEv$F$i$l$^$9!#\e(B
+    t-gnus-6_14                \e$B:G?7$N\e(B T-gnus \e$B$N3+H/HG$K3d$jEv$F$i$l$^$9!#\e(B
 
     pgnus-ichikawa     T-gnus \e$B$N44$G$9!#\e(B
 
@@ -83,21 +83,9 @@ ftp://ftp.m17n.org/pub/mule/semi/semi-1.13-for-flim-1.13/
 \e$B<hF@J}K!\e(B (ftp)
 ==============
 
-  \e$B0BDjHG$O\e(B
+  T-gnus 6.14 \e$B$O0J2<$N>l=j$+$i<hF@2DG=$G$9!#\e(B
 
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.12/
-
-  \e$B$+$i!"$=$7$F3+H/HG$O\e(B
-
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.13/
-
-  \e$B$+$i!"$=$l$>$l<hF@2DG=$G$9!#$=$7$F$[$\KhF|$N\e(B snapshot \e$B$,\e(B
-
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.12/snapshots/
-  \e$B$^$?$O\e(B
-    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.13/snapshots/
-
-  \e$B$+$i<hF@2DG=$G$9!#\e(B
+    ftp://ftp.jpl.org/pub/elisp/t-gnus-6.14/snapshots/
 
   \e$BCm0U\e(B: \e$B$3$l$i$N\e(B snapshot \e$B$O\e(B a-ftp site \e$B$N4IM}<T$N5$$,8~$$$?$H$-$K<jF0\e(B
   \e$B$G:n@.$5$l!"IaDL$O%F%9%H$5$l$F$$$^$;$s!#\e(B
@@ -112,8 +100,8 @@ ftp://ftp.m17n.org/pub/mule/semi/semi-1.13-for-flim-1.13/
   T-gnus \e$B$N%P%0$r8+$D$1$?$+!"\e(BGnus \e$B$N%P%0$G$"$k$+$I$&$+$,J,$+$i$J$$$H$-\e(B
   \e$B$O!"%P%0Js9p$r\e(B Semi-gnus \e$B%a!<%j%s%0%j%9%H$KAw$C$F$/$@$5$$\e(B:
 
-    semi-gnus-en@meadow.scphys.kyoto-u.ac.jp   (\e$B1Q8l\e(B)
-    semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp   (\e$BF|K\8l\e(B)
+    semi-gnus-en@meadowy.org   (\e$B1Q8l\e(B)
+    semi-gnus-ja@meadowy.org   (\e$BF|K\8l\e(B)
 
   T-gnus \e$B$N2~A1$N$?$a$NDs0F$b4?7^$5$l$^$9!#\e(B
 
@@ -121,18 +109,20 @@ ftp://ftp.m17n.org/pub/mule/semi/semi-1.13-for-flim-1.13/
   \e$B%j!<%9$r<hF@$7$?$j!"\e(BT-gnus \e$B$N>-Mh$N3HD%$r5DO@$7$?$j$9$k$3$H$,$G$-$^\e(B
   \e$B$9!#\e(BSemi-gnus ML \e$B$K;22C$9$k$?$a$K$O\e(B
 
-    semi-gnus-en-help@meadow.scphys.kyoto-u.ac.jp      (\e$B1Q8l\e(B)
-    semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp      (\e$BF|K\8l\e(B)
+    semi-gnus-en-help@meadowy.org      (\e$B1Q8l\e(B)
+    semi-gnus-ja-help@meadowy.org      (\e$BF|K\8l\e(B)
 
   \e$B$K6u$N%a!<%k$rAw$C$F$/$@$5$$!#\e(B
 
   \e$B2C$($F!"3+H/<T$rI,MW$H$7$F$$$^$9!#3+H/$K;22C$7$?$$>l9g$O!"\e(B
-  cvs@chamonix.jaist.ac.jp \e$B$K%"%+%&%s%HL>$H\e(B UNIX \e$B$N\e(B /etc/passwd \e$B$NMM<0\e(B
-  \e$B$G0E9f2=$5$l$?%Q%9%o!<%I$r%a!<%k$rAw$C$F$/$@$5$$!#\e(B
-  chamonix open CVS server \e$B$G9T$J$o$l$?JQ99$r%a!<%k$GDLCN$7$F$b$i$&$3\e(B
-  \e$B$H$b2DG=$G$9!#$3$l$K$O\e(B gnus \e$B0J30$N\e(B module \e$B$K4X$9$k>pJs$b4^$^$l$^$9!#\e(B
-  \e$BI,MW$JJ}$O\e(B
-
-    cvs-info-help@chamonix.jaist.ac.jp
+  cvs@cvs.m17n.org \e$B$K%"%+%&%s%HL>$H\e(B ssh \e$B$N8x3+80$rAw$C$F$/$@$5$$!#\e(Bssh
+  \e$B7PM3$G$N\e(B cvsroot \e$B$O\e(B :ext:cvs@cvs.m17n.org:/cvs/root \e$B$H$J$j$^$9!#$I$&\e(B
+  \e$B$7$F$b\e(B ssh \e$B$,;H$($J$$>l9g!"\e(BUNIX \e$B$N\e(B /etc/passwd \e$B$NMM<0$G0E9f2=$5$l$?\e(B
+  \e$B%Q%9%o!<%I$r%a!<%k$rAw$C$F$/$@$5$$!#$3$N>l9g\e(B cvsroot \e$B$O\e(B
+  :pserver:<\e$B%"%+%&%s%HL>\e(B>@cvs.m17n.org:/cvs/root \e$B$H$J$j$^$9!#\e(Bm17n open
+  CVS server \e$B$G9T$J$o$l$?JQ99$r%a!<%k$GDLCN$7$F$b$i$&$3$H$b2DG=$G$9!#\e(B
+  \e$B$3$l$K$O\e(B gnus \e$B0J30$N\e(B module \e$B$K4X$9$k>pJs$b4^$^$l$^$9!#I,MW$JJ}$O\e(B
+
+    cvs-info-help@cvs.m17n.org
 
   \e$B$K6u$N%a!<%k$rAw$C$F0FFb$K=>$C$F2<$5$$!#\e(B
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644 (file)
index 79ff3ac..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-dnl Copyright (C) 1999 NISHIDA Keisuke <knishida@ring.aist.go.jp>
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2, or (at your option)
-dnl any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-dnl 02111-1307, USA.
-
-AC_DEFUN(AM_PATH_LISPDIR,
- [dnl #
-  dnl # Check Emacs
-  dnl #
-  AC_ARG_WITH(emacs,
-    [  --with-emacs=EMACS      compile with EMACS [EMACS=emacs, xemacs...]],
-    [case "${withval}" in
-       yes)    EMACS= ;;
-       no)     AC_MSG_ERROR([emacs is not available]) ;;
-       *)      EMACS=${withval} ;;
-     esac], EMACS=)
-  if test "x$EMACS" = "xt" -o "x$EMACS" = x; then
-    AC_PATH_PROGS(EMACS, emacs xemacs mule, no)
-    if test $EMACS = no; then
-      AC_MSG_ERROR(you should install Emacs first)
-    fi
-  fi
-  dnl # 
-  dnl # Check Emacs directories
-  dnl #
-  AC_MSG_CHECKING([where emacs files are in])
-  EMACS_BASENAME="`echo x$EMACS | sed -e 's/x//' -e 's/^.*\///'`"
-  if test "x$emacsdir" = x; then
-    if test "x$prefix" = "xNONE"; then
-      prefix=$ac_default_prefix
-    fi
-    emacsdir="\$(datadir)/emacs"
-    case "$EMACS_BASENAME" in
-    emacs|emacs-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      ;;
-    xemacs|xemacs-*)
-      if test -d $prefix/lib/xemacs; then
-       emacsdir="$prefix/lib/xemacs"
-      fi
-      if test -d $prefix/share/xemacs; then
-       emacsdir="$prefix/share/xemacs"
-      fi
-      ;;
-    mule|mule-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      if test -d $prefix/lib/mule; then
-       emacsdir="$prefix/lib/mule"
-      fi
-      if test -d $prefix/share/mule; then
-       emacsdir="$prefix/share/mule"
-      fi
-      ;;
-    esac
-  fi
-  AC_MSG_RESULT($emacsdir)
-  AC_SUBST(emacsdir)
-  dnl # 
-  dnl # Check Emacs site-lisp directories
-  dnl #
-  AC_ARG_WITH(lispdir,
-    [  --with-lispdir=DIR      emacs lisp files go to DIR [guessed]],
-    [case "${withval}" in
-       yes)    lispdir= ;;
-       no)     AC_MSG_ERROR(lispdir is not available) ;;
-       *)      lispdir=${withval} ;;
-     esac], lispdir=)
-  AC_MSG_CHECKING([where .elc files should go])
-  if test "x$lispdir" = x; then
-    lispdir="$emacsdir/site-lisp"
-    if test -d $emacsdir/lisp; then
-      lispdir="$emacsdir/lisp"
-    fi
-    case "$EMACS_BASENAME" in
-    xemacs|xemacs-*)
-      lispdir="$lispdir/lookup"
-      ;;
-    esac
-  fi
-  AC_MSG_RESULT($lispdir)
-  AC_SUBST(lispdir)])
index fa32a2a..aee05d3 100644 (file)
-dnl aclocal.m4 generated automatically by aclocal 1.3
+AC_DEFUN(AC_DEFINE_GNUS_PRODUCT_NAME,
+ [echo $ac_n "defining gnus product name... $ac_c"
+  AC_CACHE_VAL(EMACS_cv_GNUS_PRODUCT_NAME,[EMACS_cv_GNUS_PRODUCT_NAME=$1])
+  GNUS_PRODUCT_NAME=${EMACS_cv_GNUS_PRODUCT_NAME}
+  AC_MSG_RESULT(${GNUS_PRODUCT_NAME})
+  AC_SUBST(GNUS_PRODUCT_NAME)])
 
-dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
-dnl This Makefile.in is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN(AC_CHECK_EMACS,
+ [dnl Check for Emacsen.
 
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
+  dnl Apparently, if you run a shell window in Emacs, it sets the EMACS
+  dnl environment variable to 't'.  Lets undo the damage.
+  test x$EMACS = xt && EMACS=
+
+  dnl Ignore cache.
+  unset ac_cv_prog_EMACS; unset ac_cv_prog_XEMACS;
 
-dnl Copyright (C) 1999 NISHIDA Keisuke <knishida@ring.aist.go.jp>
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2, or (at your option)
-dnl any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-dnl 02111-1307, USA.
-
-AC_DEFUN(AM_PATH_LISPDIR,
- [dnl #
-  dnl # Check Emacs
-  dnl #
   AC_ARG_WITH(emacs,
-    [  --with-emacs=EMACS      compile with EMACS [EMACS=emacs, xemacs...]],
-    [case "${withval}" in
-       yes)    EMACS= ;;
-       no)     AC_MSG_ERROR([emacs is not available]) ;;
-       *)      EMACS=${withval} ;;
-     esac], EMACS=)
-  if test "x$EMACS" = "xt" -o "x$EMACS" = x; then
-    AC_PATH_PROGS(EMACS, emacs xemacs mule, no)
-    if test $EMACS = no; then
-      AC_MSG_ERROR(you should install Emacs first)
+   [  --with-emacs=EMACS      compile with EMACS [EMACS=emacs, mule...]],
+   [if test x$withval = xyes -o x$withval = x; then
+      AC_CHECK_PROGS(EMACS, emacs xemacs mule, emacs)
+    else
+      AC_CHECK_PROG(EMACS, $withval, $withval, emacs)
+    fi])
+  AC_ARG_WITH(xemacs,
+   [  --with-xemacs=XEMACS    compile with XEMACS [XEMACS=xemacs]],
+   [if test x$withval = xyes -o x$withval = x; then
+      AC_CHECK_PROG(XEMACS, xemacs, xemacs, xemacs)
+    else
+      AC_CHECK_PROG(XEMACS, $withval, $withval, xemacs)
     fi
+    EMACS=$XEMACS],
+   [XEMACS=xemacs
+    test x$EMACS = x &&\
+      AC_CHECK_PROGS(EMACS, emacs xemacs mule, emacs)])
+  AC_SUBST(EMACS)
+  AC_SUBST(XEMACS)])
+
+AC_DEFUN(AC_EMACS_LISP, [
+elisp="$2"
+if test -z "$3"; then
+       AC_MSG_CHECKING(for $1)
+fi
+AC_CACHE_VAL(EMACS_cv_SYS_$1,[
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& AC_FD_CC 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& AC_FD_CC 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& AC_FD_CC 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_$1=$retval
+])
+$1=${EMACS_cv_SYS_$1}
+if test -z "$3"; then
+       AC_MSG_RESULT($$1)
+fi
+])
+
+AC_DEFUN(AC_CHECK_EMACS_FLAVOR,
+ [AC_MSG_CHECKING([what a flavor does $EMACS have])
+
+  dnl Ignore cache.
+  unset EMACS_cv_SYS_flavor;
+
+  AC_EMACS_LISP(flavor,
+    (cond ((featurep (quote xemacs)) \"XEmacs\")\
+          ((boundp (quote MULE)) \"MULE\")\
+          (t \"FSF Emacs\")),
+    "noecho")
+  case $EMACS_cv_SYS_flavor in
+  XEmacs)
+    EMACS_FLAVOR=xemacs;;
+  MULE)
+    EMACS_FLAVOR=mule;;
+  *)
+    EMACS_FLAVOR=emacs;;
+  esac
+  AC_MSG_RESULT($EMACS_cv_SYS_flavor)])
+
+AC_DEFUN(AC_PATH_LISPDIR, [
+  AC_CHECK_EMACS_FLAVOR
+  if test "$prefix" = "NONE"; then
+       AC_MSG_CHECKING([prefix for your Emacs])
+       AC_EMACS_LISP(prefix,(expand-file-name \"..\" invocation-directory),"noecho")
+       prefix=${EMACS_cv_SYS_prefix}
+       AC_MSG_RESULT($prefix)
   fi
-  dnl # 
-  dnl # Check Emacs directories
-  dnl #
-  AC_MSG_CHECKING([where emacs files are in])
-  EMACS_BASENAME="`echo x$EMACS | sed -e 's/x//' -e 's/^.*\///'`"
-  if test "x$emacsdir" = x; then
-    if test "x$prefix" = "xNONE"; then
-      prefix=$ac_default_prefix
-    fi
-    emacsdir="\$(datadir)/emacs"
-    case "$EMACS_BASENAME" in
-    emacs|emacs-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      ;;
-    xemacs|xemacs-*)
-      if test -d $prefix/lib/xemacs; then
-       emacsdir="$prefix/lib/xemacs"
-      fi
-      if test -d $prefix/share/xemacs; then
-       emacsdir="$prefix/share/xemacs"
-      fi
-      ;;
-    mule|mule-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      if test -d $prefix/lib/mule; then
-       emacsdir="$prefix/lib/mule"
-      fi
-      if test -d $prefix/share/mule; then
-       emacsdir="$prefix/share/mule"
-      fi
-      ;;
-    esac
-  fi
-  AC_MSG_RESULT($emacsdir)
-  AC_SUBST(emacsdir)
-  dnl # 
-  dnl # Check Emacs site-lisp directories
-  dnl #
   AC_ARG_WITH(lispdir,
-    [  --with-lispdir=DIR      emacs lisp files go to DIR [guessed]],
-    [case "${withval}" in
-       yes)    lispdir= ;;
-       no)     AC_MSG_ERROR(lispdir is not available) ;;
-       *)      lispdir=${withval} ;;
-     esac], lispdir=)
-  AC_MSG_CHECKING([where .elc files should go])
-  if test "x$lispdir" = x; then
-    lispdir="$emacsdir/site-lisp"
-    if test -d $emacsdir/lisp; then
-      lispdir="$emacsdir/lisp"
+    [  --with-lispdir=DIR      Where to install lisp files
+                          (for XEmacs package, use --with-packagedir instead)],
+    lispdir=${withval})
+  AC_MSG_CHECKING([where lisp files should go])
+  if test -z "$lispdir"; then
+    dnl Set default value
+    theprefix=$prefix
+    if test "x$theprefix" = "xNONE"; then
+       theprefix=$ac_default_prefix
     fi
-    case "$EMACS_BASENAME" in
-    xemacs|xemacs-*)
-      lispdir="$lispdir/tgnus"
-      ;;
-    esac
+    lispdir="\$(datadir)/${EMACS_FLAVOR}/site-lisp/${GNUS_PRODUCT_NAME}"
+    for thedir in share lib; do
+       potential=
+       if test -d ${theprefix}/${thedir}/${EMACS_FLAVOR}/site-lisp; then
+          lispdir="\$(prefix)/${thedir}/${EMACS_FLAVOR}/site-lisp/${GNUS_PRODUCT_NAME}"
+          break
+       fi
+    done
   fi
-  AC_MSG_RESULT($lispdir)
-  AC_SUBST(lispdir)])
-
-# Do all the work for Automake.  This macro actually does too much --
-# some checks are only needed if your package does certain things.
-# But this isn't really a big deal.
-
-# serial 1
-
-dnl Usage:
-dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AM_PROG_INSTALL])
-PACKAGE=[$1]
-AC_SUBST(PACKAGE)
-VERSION=[$2]
-AC_SUBST(VERSION)
-dnl test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-ifelse([$3],,
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
-AC_REQUIRE([AM_SANITY_CHECK])
-AC_REQUIRE([AC_ARG_PROGRAM])
-dnl FIXME This is truly gross.
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_REQUIRE([AC_PROG_MAKE_SET])])
-
-
-# serial 1
-
-AC_DEFUN(AM_PROG_INSTALL,
-[AC_REQUIRE([AC_PROG_INSTALL])
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-AC_SUBST(INSTALL_SCRIPT)dnl
+  if test ${EMACS_FLAVOR} = xemacs; then
+    AC_MSG_RESULT([$lispdir
+         (it will be ignored when \"make install-package[[-ja]]\" is done)])
+  else
+    AC_MSG_RESULT([$lispdir])
+  fi
+  AC_SUBST(lispdir)
 ])
 
-#
-# Check to make sure that the build environment is sane.
-#
-
-AC_DEFUN(AM_SANITY_CHECK,
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
-   if test "[$]*" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftestfile`
-   fi
-   if test "[$]*" != "X $srcdir/configure conftestfile" \
-      && test "[$]*" != "X conftestfile $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
+dnl
+dnl Check whether a function exists in a library
+dnl All '_' characters in the first argument are converted to '-'
+dnl
+AC_DEFUN(AC_EMACS_CHECK_LIB, [
+if test -z "$3"; then
+       AC_MSG_CHECKING(for $2 in $1)
+fi
+library=`echo $1 | tr _ -`
+AC_EMACS_LISP($1,(progn (fmakunbound (quote $2)) (condition-case nil (progn (require (quote $library)) (fboundp (quote $2))) (error (prog1 nil (message \"$library not found\"))))),"noecho")
+if test "${EMACS_cv_SYS_$1}" = "nil"; then
+       EMACS_cv_SYS_$1=no
+fi
+if test "${EMACS_cv_SYS_$1}" = "t"; then
+       EMACS_cv_SYS_$1=yes
+fi
+HAVE_$1=${EMACS_cv_SYS_$1}
+AC_SUBST(HAVE_$1)
+if test -z "$3"; then
+       AC_MSG_RESULT($HAVE_$1)
+fi
+])
 
-   test "[$]2" = conftestfile
-   )
-then
-   # Ok.
-   :
+dnl
+dnl Perform sanity checking and try to locate the W3 package
+dnl
+AC_DEFUN(AC_CHECK_W3, [
+AC_MSG_CHECKING(for acceptable W3 version)
+
+dnl Ignore cache.
+unset EMACS_cv_ACCEPTABLE_W3;
+unset EMACS_cv_SYS_w3_dir;
+unset EMACS_cv_SYS_w3_forms;
+
+AC_CACHE_VAL(EMACS_cv_ACCEPTABLE_W3,[
+AC_EMACS_CHECK_LIB(w3_forms, w3-form-encode-xwfu,"noecho")
+if test "${HAVE_w3_forms}" = "yes"; then
+       EMACS_cv_ACCEPTABLE_W3=yes
 else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
+       EMACS_cv_ACCEPTABLE_W3=
 fi
-rm -f conftest*
-AC_MSG_RESULT(yes)])
-
-dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
-dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
-[AC_MSG_CHECKING(for working $2)
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if ($2 --version) < /dev/null > /dev/null 2>&1; then
-   $1=$2
-   AC_MSG_RESULT(found)
-else
-   $1="$3/missing $2"
-   AC_MSG_RESULT(missing)
+
+if test "x${EMACS_cv_ACCEPTABLE_W3}" = "xyes"; then
+       AC_EMACS_LISP(w3_dir,(file-name-directory (locate-library \"w3-forms\")),"noecho")
+       EMACS_cv_ACCEPTABLE_W3=$EMACS_cv_SYS_w3_dir
 fi
-AC_SUBST($1)])
+])
+   AC_ARG_WITH(w3,[  --with-w3=DIR           Specify where to find the w3 package], [ EMACS_cv_ACCEPTABLE_W3=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` ])
+   W3=${EMACS_cv_ACCEPTABLE_W3}
+   AC_SUBST(W3)
+   if test "x${EMACS_cv_ACCEPTABLE_W3}" = "x"; then
+       AC_MSG_RESULT(not found)
+   else
+       AC_MSG_RESULT(${W3})
+   fi
+])
 
+AC_DEFUN(AC_EXAMINE_PACKAGEDIR,
+ [dnl Examine PACKAGEDIR.
+  AC_EMACS_LISP(PACKAGEDIR,
+    (let (package-dir)\
+      (if (boundp (quote early-packages))\
+         (let ((dirs (delq nil (append (if early-package-load-path\
+                                           early-packages)\
+                                       (if late-package-load-path\
+                                           late-packages)\
+                                       (if last-package-load-path\
+                                           last-packages)))))\
+           (while (and dirs (not package-dir))\
+             (if (file-directory-p (car dirs))\
+                 (setq package-dir (car dirs)\
+                       dirs (cdr dirs))))))\
+      (or package-dir \"\")),
+    "noecho")])
+
+AC_DEFUN(AC_PATH_PACKAGEDIR,
+ [dnl Check for PACKAGEDIR.
+  if test ${EMACS_FLAVOR} = xemacs; then
+    AC_MSG_CHECKING([where the XEmacs package is])
+    AC_ARG_WITH(packagedir,
+      [  --with-packagedir=DIR   package DIR for XEmacs],
+      [if test x$withval != xyes -a x$withval != x; then
+       PACKAGEDIR=$withval
+      else
+       AC_EXAMINE_PACKAGEDIR
+      fi],
+      AC_EXAMINE_PACKAGEDIR)
+    if test x$PACKAGEDIR = x; then
+      AC_MSG_RESULT(not found)
+    else
+      AC_MSG_RESULT($PACKAGEDIR)
+    fi
+  else
+    PACKAGEDIR=
+  fi
+  AC_SUBST(PACKAGEDIR)])
+
+AC_DEFUN(AC_ADD_LOAD_PATH,
+ [dnl Check for additional load path.
+  AC_ARG_WITH(addpath,
+   [  --with-addpath=PATH     search Emacs-Lisp libraries with PATH
+                          use colons to separate directory names],
+   [if test x$withval != xyes -a x$withval != x; then
+      AC_MSG_CHECKING([where to find the additional elisp libraries])
+      ADDITIONAL_LOAD_PATH=$withval
+      AC_MSG_RESULT($ADDITIONAL_LOAD_PATH)
+    fi],
+    ADDITIONAL_LOAD_PATH=)
+  AC_SUBST(ADDITIONAL_LOAD_PATH)])
index f96ef07..6cc8412 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13 
+# Generated automatically using autoconf version 2.14.1 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -12,16 +12,19 @@ ac_help=
 ac_default_prefix=/usr/local
 # Any additions from configure.in:
 ac_help="$ac_help
-  --with-emacs=EMACS      compile with EMACS [EMACS=emacs, xemacs...]"
+  --with-emacs=EMACS      compile with EMACS [EMACS=emacs, mule...]"
 ac_help="$ac_help
-  --with-lispdir=DIR      emacs lisp files go to DIR [guessed]"
+  --with-xemacs=XEMACS    compile with XEMACS [XEMACS=xemacs]"
 ac_help="$ac_help
-  --with-addpath=PATH     search Emacs-Lisp libraries with PATH
-                          use colons to separate directory names"
+  --with-lispdir=DIR      Where to install lisp files
+                          (for XEmacs package, use --with-packagedir instead)"
 ac_help="$ac_help
-  --with-xemacs=XEMACS    compile with XEMACS [XEMACS=xemacs]"
+  --with-w3=DIR           Specify where to find the w3 package"
 ac_help="$ac_help
-  --with-packagedir=DIR   package DIR for XEmacs [guessed]"
+  --with-packagedir=DIR   package DIR for XEmacs"
+ac_help="$ac_help
+  --with-addpath=PATH     search Emacs-Lisp libraries with PATH
+                          use colons to separate directory names"
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -344,7 +347,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.13"
+    echo "configure generated by autoconf version 2.14.1"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -504,7 +507,7 @@ done
 
 if test -r "$cache_file"; then
   echo "loading cache $cache_file"
-  . $cache_file
+      test -f "$cache_file" && . $cache_file
 else
   echo "creating cache $cache_file"
   > $cache_file
@@ -532,10 +535,20 @@ else
 fi
 
 
+echo $ac_n "defining gnus product name... $ac_c"
+  if eval "test \"\${EMACS_cv_GNUS_PRODUCT_NAME+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  EMACS_cv_GNUS_PRODUCT_NAME=t-gnus
+fi
+
+  GNUS_PRODUCT_NAME=${EMACS_cv_GNUS_PRODUCT_NAME}
+  echo "$ac_t""${GNUS_PRODUCT_NAME}" 1>&6
+  
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:537: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:550: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftestmake <<\EOF
@@ -574,9 +587,9 @@ done
 if test -z "$ac_aux_dir"; then
   { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
 fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -590,9 +603,9 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:594: checking for a BSD compatible install" >&5
+echo "configure:607: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+if eval "test \"\${ac_cv_path_install+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
@@ -610,6 +623,10 @@ else
             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
            :
+         elif test $ac_prog = install &&
+           grep pwplus $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
          else
            ac_cv_path_install="$ac_dir/$ac_prog -c"
            break 2
@@ -638,54 +655,74 @@ echo "$ac_t""$INSTALL" 1>&6
 # It thinks the first close brace ends the variable substitution.
 test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-      # Check whether --with-emacs or --without-emacs was given.
-if test "${with_emacs+set}" = set; then
-  withval="$with_emacs"
-  case "${withval}" in
-       yes)    EMACS= ;;
-       no)     { echo "configure: error: emacs is not available" 1>&2; exit 1; } ;;
-       *)      EMACS=${withval} ;;
-     esac
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:666: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_MAKEINFO+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$MAKEINFO"; then
+  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
 else
-  EMACS=
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_MAKEINFO="makeinfo"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_MAKEINFO" && ac_cv_prog_MAKEINFO="no"
 fi
+fi
+MAKEINFO="$ac_cv_prog_MAKEINFO"
+if test -n "$MAKEINFO"; then
+  echo "$ac_t""$MAKEINFO" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+      test x$EMACS = xt && EMACS=
 
-  if test "x$EMACS" = "xt" -o "x$EMACS" = x; then
-    for ac_prog in emacs xemacs mule
+    unset ac_cv_prog_EMACS; unset ac_cv_prog_XEMACS;
+
+  # Check whether --with-emacs or --without-emacs was given.
+if test "${with_emacs+set}" = set; then
+  withval="$with_emacs"
+  if test x$withval = xyes -o x$withval = x; then
+      for ac_prog in emacs xemacs mule
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:664: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_EMACS'+set}'`\" = set"; then
+echo "configure:707: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_EMACS+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$EMACS" in
-  /*)
-  ac_cv_path_EMACS="$EMACS" # Let the user override the test with a path.
-  ;;
-  ?:/*)                         
-  ac_cv_path_EMACS="$EMACS" # Let the user override the test with a dos path.
-  ;;
-  *)
+  if test -n "$EMACS"; then
+  ac_cv_prog_EMACS="$EMACS" # Let the user override the test.
+else
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
   ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      ac_cv_path_EMACS="$ac_dir/$ac_word"
+      ac_cv_prog_EMACS="$ac_prog"
       break
     fi
   done
   IFS="$ac_save_ifs"
-  ;;
-esac
 fi
-EMACS="$ac_cv_path_EMACS"
+fi
+EMACS="$ac_cv_prog_EMACS"
 if test -n "$EMACS"; then
   echo "$ac_t""$EMACS" 1>&6
 else
@@ -694,146 +731,470 @@ fi
 
 test -n "$EMACS" && break
 done
-test -n "$EMACS" || EMACS="no"
+test -n "$EMACS" || EMACS="emacs"
 
-    if test $EMACS = no; then
-      { echo "configure: error: you should install Emacs first" 1>&2; exit 1; }
+    else
+      # Extract the first word of "$withval", so it can be a program name with args.
+set dummy $withval; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:741: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_EMACS+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$EMACS"; then
+  ac_cv_prog_EMACS="$EMACS" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_EMACS="$withval"
+      break
     fi
-  fi
-        echo $ac_n "checking where emacs files are in""... $ac_c" 1>&6
-echo "configure:705: checking where emacs files are in" >&5
-  EMACS_BASENAME="`echo x$EMACS | sed -e 's/x//' -e 's/^.*\///'`"
-  if test "x$emacsdir" = x; then
-    if test "x$prefix" = "xNONE"; then
-      prefix=$ac_default_prefix
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_EMACS" && ac_cv_prog_EMACS="emacs"
+fi
+fi
+EMACS="$ac_cv_prog_EMACS"
+if test -n "$EMACS"; then
+  echo "$ac_t""$EMACS" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
     fi
-    emacsdir="\$(datadir)/emacs"
-    case "$EMACS_BASENAME" in
-    emacs|emacs-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      ;;
-    xemacs|xemacs-*)
-      if test -d $prefix/lib/xemacs; then
-       emacsdir="$prefix/lib/xemacs"
-      fi
-      if test -d $prefix/share/xemacs; then
-       emacsdir="$prefix/share/xemacs"
-      fi
-      ;;
-    mule|mule-*)
-      if test -d $prefix/lib/emacs; then
-       emacsdir="$prefix/lib/emacs"
-      fi
-      if test -d $prefix/share/emacs; then
-       emacsdir="$prefix/share/emacs"
-      fi
-      if test -d $prefix/lib/mule; then
-       emacsdir="$prefix/lib/mule"
-      fi
-      if test -d $prefix/share/mule; then
-       emacsdir="$prefix/share/mule"
-      fi
-      ;;
-    esac
-  fi
-  echo "$ac_t""$emacsdir" 1>&6
-  
-        # Check whether --with-lispdir or --without-lispdir was given.
-if test "${with_lispdir+set}" = set; then
-  withval="$with_lispdir"
-  case "${withval}" in
-       yes)    lispdir= ;;
-       no)     { echo "configure: error: lispdir is not available" 1>&2; exit 1; } ;;
-       *)      lispdir=${withval} ;;
-     esac
+fi
+
+  # Check whether --with-xemacs or --without-xemacs was given.
+if test "${with_xemacs+set}" = set; then
+  withval="$with_xemacs"
+  if test x$withval = xyes -o x$withval = x; then
+      # Extract the first word of "xemacs", so it can be a program name with args.
+set dummy xemacs; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:778: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_XEMACS+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$XEMACS"; then
+  ac_cv_prog_XEMACS="$XEMACS" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_XEMACS="xemacs"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_XEMACS" && ac_cv_prog_XEMACS="xemacs"
+fi
+fi
+XEMACS="$ac_cv_prog_XEMACS"
+if test -n "$XEMACS"; then
+  echo "$ac_t""$XEMACS" 1>&6
 else
-  lispdir=
+  echo "$ac_t""no" 1>&6
 fi
 
-  echo $ac_n "checking where .elc files should go""... $ac_c" 1>&6
-echo "configure:760: checking where .elc files should go" >&5
-  if test "x$lispdir" = x; then
-    lispdir="$emacsdir/site-lisp"
-    if test -d $emacsdir/lisp; then
-      lispdir="$emacsdir/lisp"
+    else
+      # Extract the first word of "$withval", so it can be a program name with args.
+set dummy $withval; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:809: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_XEMACS+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$XEMACS"; then
+  ac_cv_prog_XEMACS="$XEMACS" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_XEMACS="$withval"
+      break
     fi
-    case "$EMACS_BASENAME" in
-    xemacs|xemacs-*)
-      lispdir="$lispdir/tgnus"
-      ;;
-    esac
-  fi
-  echo "$ac_t""$lispdir" 1>&6
-  
-# Extract the first word of "makeinfo", so it can be a program name with args.
-set dummy makeinfo; ac_word=$2
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_XEMACS" && ac_cv_prog_XEMACS="xemacs"
+fi
+fi
+XEMACS="$ac_cv_prog_XEMACS"
+if test -n "$XEMACS"; then
+  echo "$ac_t""$XEMACS" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+    EMACS=$XEMACS
+else
+  XEMACS=xemacs
+    test x$EMACS = x &&\
+      for ac_prog in emacs xemacs mule
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:777: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_MAKEINFO'+set}'`\" = set"; then
+echo "configure:846: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_EMACS+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$MAKEINFO" in
-  /*)
-  ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path.
-  ;;
-  ?:/*)                         
-  ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a dos path.
-  ;;
-  *)
+  if test -n "$EMACS"; then
+  ac_cv_prog_EMACS="$EMACS" # Let the user override the test.
+else
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
   ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      ac_cv_path_MAKEINFO="$ac_dir/$ac_word"
+      ac_cv_prog_EMACS="$ac_prog"
       break
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_MAKEINFO" && ac_cv_path_MAKEINFO="no"
-  ;;
-esac
 fi
-MAKEINFO="$ac_cv_path_MAKEINFO"
-if test -n "$MAKEINFO"; then
-  echo "$ac_t""$MAKEINFO" 1>&6
+fi
+EMACS="$ac_cv_prog_EMACS"
+if test -n "$EMACS"; then
+  echo "$ac_t""$EMACS" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
+test -n "$EMACS" && break
+done
+test -n "$EMACS" || EMACS="emacs"
 
-ADDITIONAL_LOAD_PATH=
-# Check whether --with-addpath or --without-addpath was given.
-if test "${with_addpath+set}" = set; then
-  withval="$with_addpath"
-  ADDITIONAL_LOAD_PATH=$with_addpath
 fi
 
+  
+  
 
+  echo $ac_n "checking what a flavor does $EMACS have""... $ac_c" 1>&6
+echo "configure:882: checking what a flavor does $EMACS have" >&5
 
-XEMACS="xemacs"
-# Check whether --with-xemacs or --without-xemacs was given.
-if test "${with_xemacs+set}" = set; then
-  withval="$with_xemacs"
-  XEMACS=$with_xemacs
+    unset EMACS_cv_SYS_flavor;
+
+  
+elisp="(cond ((featurep (quote xemacs)) \"XEmacs\")\
+          ((boundp (quote MULE)) \"MULE\")\
+          (t \"FSF Emacs\"))"
+if test -z ""noecho""; then
+       echo $ac_n "checking for flavor""... $ac_c" 1>&6
+echo "configure:892: checking for flavor" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_flavor+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_flavor=$retval
+
+fi
+
+flavor=${EMACS_cv_SYS_flavor}
+if test -z ""noecho""; then
+       echo "$ac_t""$flavor" 1>&6
+fi
+
+  case $EMACS_cv_SYS_flavor in
+  XEmacs)
+    EMACS_FLAVOR=xemacs;;
+  MULE)
+    EMACS_FLAVOR=mule;;
+  *)
+    EMACS_FLAVOR=emacs;;
+  esac
+  echo "$ac_t""$EMACS_cv_SYS_flavor" 1>&6
+  if test "$prefix" = "NONE"; then
+       echo $ac_n "checking prefix for your Emacs""... $ac_c" 1>&6
+echo "configure:924: checking prefix for your Emacs" >&5
+       
+elisp="(expand-file-name \"..\" invocation-directory)"
+if test -z ""noecho""; then
+       echo $ac_n "checking for prefix""... $ac_c" 1>&6
+echo "configure:929: checking for prefix" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_prefix+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_prefix=$retval
+
+fi
+
+prefix=${EMACS_cv_SYS_prefix}
+if test -z ""noecho""; then
+       echo "$ac_t""$prefix" 1>&6
+fi
+
+       prefix=${EMACS_cv_SYS_prefix}
+       echo "$ac_t""$prefix" 1>&6
+  fi
+  # Check whether --with-lispdir or --without-lispdir was given.
+if test "${with_lispdir+set}" = set; then
+  withval="$with_lispdir"
+  lispdir=${withval}
+fi
+
+  echo $ac_n "checking where lisp files should go""... $ac_c" 1>&6
+echo "configure:960: checking where lisp files should go" >&5
+  if test -z "$lispdir"; then
+        theprefix=$prefix
+    if test "x$theprefix" = "xNONE"; then
+       theprefix=$ac_default_prefix
+    fi
+    lispdir="\$(datadir)/${EMACS_FLAVOR}/site-lisp/${GNUS_PRODUCT_NAME}"
+    for thedir in share lib; do
+       potential=
+       if test -d ${theprefix}/${thedir}/${EMACS_FLAVOR}/site-lisp; then
+          lispdir="\$(prefix)/${thedir}/${EMACS_FLAVOR}/site-lisp/${GNUS_PRODUCT_NAME}"
+          break
+       fi
+    done
+  fi
+  if test ${EMACS_FLAVOR} = xemacs; then
+    echo "$ac_t""$lispdir
+         (it will be ignored when \"make install-package[-ja]\" is done)" 1>&6
+  else
+    echo "$ac_t""$lispdir" 1>&6
+  fi
+  
+
+
+echo $ac_n "checking for acceptable W3 version""... $ac_c" 1>&6
+echo "configure:985: checking for acceptable W3 version" >&5
+
+unset EMACS_cv_ACCEPTABLE_W3;
+unset EMACS_cv_SYS_w3_dir;
+unset EMACS_cv_SYS_w3_forms;
+
+if eval "test \"\${EMACS_cv_ACCEPTABLE_W3+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+
+if test -z ""noecho""; then
+       echo $ac_n "checking for w3-form-encode-xwfu in w3_forms""... $ac_c" 1>&6
+echo "configure:998: checking for w3-form-encode-xwfu in w3_forms" >&5
+fi
+library=`echo w3_forms | tr _ -`
+
+elisp="(progn (fmakunbound (quote w3-form-encode-xwfu)) (condition-case nil (progn (require (quote $library)) (fboundp (quote w3-form-encode-xwfu))) (error (prog1 nil (message \"$library not found\")))))"
+if test -z ""noecho""; then
+       echo $ac_n "checking for w3_forms""... $ac_c" 1>&6
+echo "configure:1005: checking for w3_forms" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_w3_forms+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_w3_forms=$retval
+
+fi
+
+w3_forms=${EMACS_cv_SYS_w3_forms}
+if test -z ""noecho""; then
+       echo "$ac_t""$w3_forms" 1>&6
+fi
+
+if test "${EMACS_cv_SYS_w3_forms}" = "nil"; then
+       EMACS_cv_SYS_w3_forms=no
+fi
+if test "${EMACS_cv_SYS_w3_forms}" = "t"; then
+       EMACS_cv_SYS_w3_forms=yes
 fi
+HAVE_w3_forms=${EMACS_cv_SYS_w3_forms}
 
+if test -z ""noecho""; then
+       echo "$ac_t""$HAVE_w3_forms" 1>&6
+fi
+
+if test "${HAVE_w3_forms}" = "yes"; then
+       EMACS_cv_ACCEPTABLE_W3=yes
+else
+       EMACS_cv_ACCEPTABLE_W3=
+fi
 
+if test "x${EMACS_cv_ACCEPTABLE_W3}" = "xyes"; then
+       
+elisp="(file-name-directory (locate-library \"w3-forms\"))"
+if test -z ""noecho""; then
+       echo $ac_n "checking for w3_dir""... $ac_c" 1>&6
+echo "configure:1049: checking for w3_dir" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_w3_dir+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_w3_dir=$retval
 
-PACKAGEDIR=
-# Check whether --with-packagedir or --without-packagedir was given.
+fi
+
+w3_dir=${EMACS_cv_SYS_w3_dir}
+if test -z ""noecho""; then
+       echo "$ac_t""$w3_dir" 1>&6
+fi
+
+       EMACS_cv_ACCEPTABLE_W3=$EMACS_cv_SYS_w3_dir
+fi
+
+fi
+
+   # Check whether --with-w3 or --without-w3 was given.
+if test "${with_w3+set}" = set; then
+  withval="$with_w3"
+   EMACS_cv_ACCEPTABLE_W3=`( cd $withval && pwd || echo "$withval" ) 2> /dev/null` 
+fi
+
+   W3=${EMACS_cv_ACCEPTABLE_W3}
+   
+   if test "x${EMACS_cv_ACCEPTABLE_W3}" = "x"; then
+       echo "$ac_t""not found" 1>&6
+   else
+       echo "$ac_t""${W3}" 1>&6
+   fi
+
+  if test ${EMACS_FLAVOR} = xemacs; then
+    echo $ac_n "checking where the XEmacs package is""... $ac_c" 1>&6
+echo "configure:1091: checking where the XEmacs package is" >&5
+    # Check whether --with-packagedir or --without-packagedir was given.
 if test "${with_packagedir+set}" = set; then
   withval="$with_packagedir"
-  PACKAGEDIR=$with_packagedir
+  if test x$withval != xyes -a x$withval != x; then
+       PACKAGEDIR=$withval
+      else
+         
+elisp="(let (package-dir)\
+      (if (boundp (quote early-packages))\
+         (let ((dirs (delq nil (append (if early-package-load-path\
+                                           early-packages)\
+                                       (if late-package-load-path\
+                                           late-packages)\
+                                       (if last-package-load-path\
+                                           last-packages)))))\
+           (while (and dirs (not package-dir))\
+             (if (file-directory-p (car dirs))\
+                 (setq package-dir (car dirs)\
+                       dirs (cdr dirs))))))\
+      (or package-dir \"\"))"
+if test -z ""noecho""; then
+       echo $ac_n "checking for PACKAGEDIR""... $ac_c" 1>&6
+echo "configure:1114: checking for PACKAGEDIR" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_PACKAGEDIR+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_PACKAGEDIR=$retval
+
 fi
 
+PACKAGEDIR=${EMACS_cv_SYS_PACKAGEDIR}
+if test -z ""noecho""; then
+       echo "$ac_t""$PACKAGEDIR" 1>&6
+fi
+
+      fi
+else
+    
+elisp="(let (package-dir)\
+      (if (boundp (quote early-packages))\
+         (let ((dirs (delq nil (append (if early-package-load-path\
+                                           early-packages)\
+                                       (if late-package-load-path\
+                                           late-packages)\
+                                       (if last-package-load-path\
+                                           last-packages)))))\
+           (while (and dirs (not package-dir))\
+             (if (file-directory-p (car dirs))\
+                 (setq package-dir (car dirs)\
+                       dirs (cdr dirs))))))\
+      (or package-dir \"\"))"
+if test -z ""noecho""; then
+       echo $ac_n "checking for PACKAGEDIR""... $ac_c" 1>&6
+echo "configure:1153: checking for PACKAGEDIR" >&5
+fi
+if eval "test \"\${EMACS_cv_SYS_PACKAGEDIR+set}\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       OUTPUT=./conftest-$$
+       echo ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       eval ${EMACS}' -batch -eval '\''(let ((x '${elisp}')) (write-region (if (stringp x) (princ x) (prin1-to-string x)) nil "'${OUTPUT}'" nil 5))'\' >& 5 2>&1
+       retval=`cat ${OUTPUT}`
+       echo "=> ${retval}" >& 5 2>&1
+       rm -f ${OUTPUT}
+       EMACS_cv_SYS_PACKAGEDIR=$retval
 
+fi
+
+PACKAGEDIR=${EMACS_cv_SYS_PACKAGEDIR}
+if test -z ""noecho""; then
+       echo "$ac_t""$PACKAGEDIR" 1>&6
+fi
+
+fi
 
+    if test x$PACKAGEDIR = x; then
+      echo "$ac_t""not found" 1>&6
+    else
+      echo "$ac_t""$PACKAGEDIR" 1>&6
+    fi
+  else
+    PACKAGEDIR=
+  fi
+  
+  # Check whether --with-addpath or --without-addpath was given.
+if test "${with_addpath+set}" = set; then
+  withval="$with_addpath"
+  if test x$withval != xyes -a x$withval != x; then
+      echo $ac_n "checking where to find the additional elisp libraries""... $ac_c" 1>&6
+echo "configure:1190: checking where to find the additional elisp libraries" >&5
+      ADDITIONAL_LOAD_PATH=$withval
+      echo "$ac_t""$ADDITIONAL_LOAD_PATH" 1>&6
+    fi
+else
+  ADDITIONAL_LOAD_PATH=
+fi
+
+  
 trap '' 1 2 15
 cat > confcache <<\EOF
 # This file is a shell script that caches the results of configure
@@ -901,7 +1262,7 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
 # Protect against shell expansion while executing Makefile rules.
 # Protect against Makefile macro expansion.
 cat > conftest.defs <<\EOF
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%#define \([^         ][^     ]*\) *\(.*\)%-D\1=\2%g
 s%[    `~#$^&*(){}\\|;'"<>?]%\\&%g
 s%\[%\\&%g
 s%\]%\\&%g
@@ -936,7 +1297,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    echo "$CONFIG_STATUS generated by autoconf version 2.14.1"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -979,17 +1340,19 @@ s%@includedir@%$includedir%g
 s%@oldincludedir@%$oldincludedir%g
 s%@infodir@%$infodir%g
 s%@mandir@%$mandir%g
+s%@GNUS_PRODUCT_NAME@%$GNUS_PRODUCT_NAME%g
 s%@SET_MAKE@%$SET_MAKE%g
 s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
 s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
 s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@EMACS@%$EMACS%g
-s%@emacsdir@%$emacsdir%g
-s%@lispdir@%$lispdir%g
 s%@MAKEINFO@%$MAKEINFO%g
-s%@ADDITIONAL_LOAD_PATH@%$ADDITIONAL_LOAD_PATH%g
+s%@EMACS@%$EMACS%g
 s%@XEMACS@%$XEMACS%g
+s%@lispdir@%$lispdir%g
+s%@HAVE_w3_forms@%$HAVE_w3_forms%g
+s%@W3@%$W3%g
 s%@PACKAGEDIR@%$PACKAGEDIR%g
+s%@ADDITIONAL_LOAD_PATH@%$ADDITIONAL_LOAD_PATH%g
 
 CEOF
 EOF
index dc7bafa..e648a4e 100644 (file)
@@ -1,32 +1,11 @@
 AC_INIT(lisp/gnus.el)
+AC_DEFINE_GNUS_PRODUCT_NAME(t-gnus)
 AC_SET_MAKE
 AC_PROG_INSTALL
-AM_PATH_LISPDIR
-AC_PATH_PROG(MAKEINFO, makeinfo, no)
-
-ADDITIONAL_LOAD_PATH=
-AC_ARG_WITH(
-       addpath,
-       [  --with-addpath=PATH     search Emacs-Lisp libraries with PATH
-                          use colons to separate directory names],
-       ADDITIONAL_LOAD_PATH=$with_addpath,
-)
-AC_SUBST(ADDITIONAL_LOAD_PATH)
-
-XEMACS="xemacs"
-AC_ARG_WITH(
-       xemacs,
-       [  --with-xemacs=XEMACS    compile with XEMACS [XEMACS=xemacs]],
-       XEMACS=$with_xemacs,
-)
-AC_SUBST(XEMACS)
-
-PACKAGEDIR=
-AC_ARG_WITH(
-       packagedir,
-       [  --with-packagedir=DIR   package DIR for XEmacs [guessed]],
-       PACKAGEDIR=$with_packagedir,
-)
-AC_SUBST(PACKAGEDIR)
-
+AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, no)
+AC_CHECK_EMACS
+AC_PATH_LISPDIR
+AC_CHECK_W3
+AC_PATH_PACKAGEDIR
+AC_ADD_LOAD_PATH
 AC_OUTPUT(Makefile lisp/Makefile lisp/dgnuspath.el texi/Makefile)
diff --git a/contrib/README b/contrib/README
new file mode 100644 (file)
index 0000000..76d0e5c
--- /dev/null
@@ -0,0 +1,3 @@
+The files in this directory are not (yet) part of the
+Gnus distribution proper.  They may later become part
+of the distribution, or they may disappear altogether.
diff --git a/contrib/mml-smime.el b/contrib/mml-smime.el
new file mode 100644 (file)
index 0000000..a216fe8
--- /dev/null
@@ -0,0 +1,80 @@
+;;; mml-smime.el --- S/MIME support for MML
+;; Copyright (c) 2000 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <simon@josefsson.org>
+;; Keywords: Gnus, MIME, SMIME, MML
+
+;; This file is a 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.
+
+;;; Commentary:
+
+;; This support creation of S/MIME parts in MML.
+
+;; Usage:
+;;    (mml-smime-setup)
+;; 
+;; Insert an attribute, postprocess=smime-sign (or smime-encrypt), into
+;; the mml tag to be signed (or encrypted).
+;;
+;; It is based on rfc2015.el by Shenghuo Zhu.
+
+;;; Code:
+
+(require 'smime)
+
+(defun mml-smime-sign (cont)
+  ;; FIXME: You have to input the sender.
+  (when (null smime-keys)
+    (error "Please use M-x customize RET smime RET to configure SMIME"))
+  (smime-sign-buffer)
+  (goto-char (point-min))
+  (when (looking-at "^MIME-Version: 1.0")
+    (forward-line 1)
+    (delete-region (point-min) (point)))
+  (goto-char (point-max)))
+  
+(defun mml-smime-encrypt (cont)
+  ;; FIXME: You have to input the receiptant.
+  ;; FIXME: Should encrypt to myself so I can read it??
+  (smime-encrypt-buffer)
+  (goto-char (point-min))
+  (when (looking-at "^MIME-Version: 1.0")
+    (forward-line 1)
+    (delete-region (point-min) (point)))
+  (goto-char (point-max)))
+
+;; The following code might be moved into mml.el or gnus-art.el.
+
+(defvar mml-postprocess-alist
+  '(("smime-sign" . mml-smime-sign)
+    ("smime-encrypt" . mml-smime-encrypt))
+  "Alist of postprocess functions.")
+
+(defun mml-postprocess (cont)
+  (let ((pp (cdr (or (assq 'postprocess cont)
+                    (assq 'pp cont))))
+       item)
+    (if (and pp (setq item (assoc pp mml-postprocess-alist)))
+       (funcall (cdr item) cont))))
+
+(defun mml-smime-setup ()
+  (setq mml-generate-mime-postprocess-function 'mml-postprocess))
+
+(provide 'mml-smime)
+
+;;; mml-smime.el ends here
diff --git a/contrib/one-line-cookie.diff b/contrib/one-line-cookie.diff
new file mode 100644 (file)
index 0000000..1cab64a
--- /dev/null
@@ -0,0 +1,28 @@
+Index: url-cookie.el
+===================================================================
+RCS file: /gd/gnu/anoncvsroot/url/lisp/url-cookie.el,v
+retrieving revision 1.1.1.1
+diff -u -r1.1.1.1 url-cookie.el
+--- url-cookie.el      1999/11/26 12:11:47     1.1.1.1
++++ url-cookie.el      1999/12/10 06:53:05
+@@ -255,6 +255,10 @@
+               (setq retval (cons cur retval))))))
+     retval))
++(defvar url-cookie-multiple-line t
++  "If nil, use one line cookie.
++Some web servers, such as hotmail, only accept one line cookie.")
++
+ ;;;###autolaod
+ (defun url-cookie-generate-header-lines (host path secure)
+   (let* ((cookies (url-cookie-retrieve host path secure))
+@@ -272,7 +276,8 @@
+       (setq cur (car cookies)
+           cookies (cdr cookies)
+           chunk (format "%s=%s" (url-cookie-name cur) (url-cookie-value cur))
+-          retval (if (< 80 (+ (length retval) (length chunk) 4))
++          retval (if (and url-cookie-multiple-line
++                      (< 80 (+ (length retval) (length chunk) 4)))
+                      (concat retval "\r\nCookie: " chunk)
+                    (if retval
+                        (concat retval "; " chunk)
diff --git a/contrib/rfc2015.el b/contrib/rfc2015.el
new file mode 100644 (file)
index 0000000..d182bbb
--- /dev/null
@@ -0,0 +1,188 @@
+;;; rfc2015.el --- MIME Security with Pretty Good Privacy (PGP)
+;; Copyright (c) 2000 Shenghuo Zhu
+
+;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Keywords: PGP MIME
+
+;; This file is not (yet) a part of GNU Emacs. Hope it 
+;; will be a part of oGnus distribution, then GNU Emacs.
+
+;; This file 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 file 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:
+
+;; Installation: put the following statements in ~/.gnus:
+;;    (require 'rfc2015)
+;;    (require 'gnus-art)
+;;    (rfc2015-setup)
+;; You may have to make sure that the directory where this file lives
+;; is mentioned in `load-path'.
+;; 
+;; Insert an attribute, postprocess=pgp-sign (or pgp-encrypt), into
+;; the mml tag to be signed (or encrypted).
+
+;;; Code:
+
+(defvar rfc2015-decrypt-function 'mailcrypt-decrypt)
+(defvar rfc2015-verify-function 'mailcrypt-verify)
+
+(defun rfc2015-decrypt (handle)
+  (let (child)
+    (cond 
+     ((setq child (mm-find-part-by-type (cdr handle) 
+                                       "application/octet-stream"))
+      (let (handles result)
+       (with-temp-buffer
+         (mm-insert-part child)
+         (setq result (funcall rfc2015-decrypt-function))
+         (unless (car result)
+           (error "Decrypting error."))
+         (setq handles (mm-dissect-buffer t)))
+       (setq gnus-article-mime-handles
+             (append (if (listp (car gnus-article-mime-handles))
+                         gnus-article-mime-handles
+                       (list gnus-article-mime-handles))
+                     (if (listp (car handles))
+                         handles
+                       (list handles))))
+       (gnus-mime-display-part handles)))
+     (t
+      (if (y-or-n-p "Corrupted pgp-encrypted part. Abort?" )
+         (error "Corrupted pgp-encrypted part.")
+       (gnus-mime-display-mixed (cdr handle)))))))
+
+;; FIXME: mm-dissect-buffer loses information of micalg and the
+;; original header of signed part.
+
+(defun rfc2015-verify (handle)
+  (if (y-or-n-p "Verify signed part?" )
+      (let (child result hash)
+       (with-temp-buffer
+         (unless (setq child (mm-find-part-by-type 
+                              (cdr handle) "application/pgp-signature" t))
+           (error "Corrupted pgp-signature part."))
+         (insert "-----BEGIN PGP SIGNED MESSAGE-----\n")
+         (insert (format "Hash: %s\n\n" (read-string "Hash: " "SHA1")))
+         (mm-insert-part child)
+         (goto-char (point-max))
+         (unless (bolp)
+           (insert "\n"))
+         (unless (setq child (mm-find-part-by-type 
+                              (cdr handle) "application/pgp-signature"))
+           (error "Corrupted pgp-signature part."))
+         (mm-insert-part child)
+         (setq result (funcall rfc2015-verify-function))
+         (unless result
+           (error "Verify error.")))))
+  (gnus-mime-display-part 
+   (mm-find-part-by-type 
+    (cdr handle) "application/pgp-signature" t)))
+
+(defvar rfc2015-mailcrypt-prefix 0)
+
+(defun rfc2015-mailcrypt-sign (cont)
+  (mailcrypt-sign rfc2015-mailcrypt-prefix)
+  (let ((boundary 
+        (funcall mml-boundary-function (incf mml-multipart-number)))
+       (scheme-alist (funcall (or mc-default-scheme 
+                                  (cdr (car mc-schemes)))))
+       hash)
+    (goto-char (point-min))
+    (unless (re-search-forward (cdr (assq 'signed-begin-line scheme-alist)))
+      (error "Cannot find signed begin line." ))
+    (goto-char (match-beginning 0))
+    (forward-line 1)
+    (unless (looking-at "Hash:[ \t]*\\([a-zA-Z0-9]+\\)")
+      (error "Cannot not find PGP hash." ))
+    (setq hash (match-string 1))
+    (unless (re-search-forward "^$" nil t)
+      (error "Cannot not find PGP message." ))
+    (forward-line 1)
+    (delete-region (point-min) (point))
+    (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
+                   boundary))
+    (insert (format "\tmicalg=pgp-%s; protocol=\"application/pgp-signature\"\n"
+                   hash))
+    (insert "\n")
+    (insert (format "--%s\n" boundary))
+    (unless (re-search-forward (cdr (assq 'signed-end-line scheme-alist)))
+      (error "Cannot find signature part." ))
+    (goto-char (match-beginning 0))
+    (unless (re-search-backward "^-+BEGIN" nil t)
+      (error "Cannot find signature part." ))
+    (goto-char (match-beginning 0))
+    (insert (format "--%s\n" boundary))
+    (insert "Content-Type: application/pgp-signature\n\n")
+    (goto-char (point-max))
+    (insert (format "--%s--\n" boundary))
+    (goto-char (point-max))))
+
+(defun rfc2015-mailcrypt-encrypt (cont)
+  ;; FIXME:
+  ;; You have to input the receiptant.
+  (mailcrypt-encrypt rfc2015-mailcrypt-prefix)
+  (let ((boundary 
+        (funcall mml-boundary-function (incf mml-multipart-number))))
+    (goto-char (point-min))
+    (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
+                   boundary))
+    (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
+    (insert (format "--%s\n" boundary))
+    (insert "Content-Type: application/pgp-encrypted\n\n")
+    (insert "Version: 1\n\n")
+    (insert (format "--%s\n" boundary))
+    (insert "Content-Type: application/octet-stream\n\n")
+    (goto-char (point-max))
+    (insert (format "--%s--\n" boundary))
+    (goto-char (point-max))))
+
+;; The following code might be moved into mml.el or gnus-art.el.
+
+(defvar mml-postprocess-alist
+  '(("pgp-sign" . rfc2015-mailcrypt-sign)
+    ("pgp-encrypt" . rfc2015-mailcrypt-encrypt))
+  "Alist of postprocess functions.")
+
+(defun mml-postprocess (cont)
+  (let ((pp (cdr (or (assq 'postprocess cont)
+                    (assq 'pp cont))))
+       item)
+    (if (and pp (setq item (assoc pp mml-postprocess-alist)))
+       (funcall (cdr item) cont))))
+
+(defun rfc2015-setup ()
+  (setq mml-generate-mime-postprocess-function 'mml-postprocess)
+;  (push '("multipart/signed" . rfc2015-verify)
+;      gnus-mime-multipart-functions)
+  (push '("multipart/encrypted" . rfc2015-decrypt)
+       gnus-mime-multipart-functions))
+
+;; The following code might be moved into mm-decode.el.
+
+(defun mm-find-part-by-type (handles type &optional notp) 
+  (let (handle)
+    (while handles
+      (if (if notp
+             (not (equal (mm-handle-media-type (car handles)) type))
+           (equal (mm-handle-media-type (car handles)) type))
+         (setq handle (car handles)
+               handles nil))
+      (setq handles (cdr handles)))
+    handle))
+
+(provide 'rfc2015)
+
+;;; rfc2015.el ends here
diff --git a/contrib/smime.el b/contrib/smime.el
new file mode 100644 (file)
index 0000000..fb76337
--- /dev/null
@@ -0,0 +1,279 @@
+;;; smime.el --- S/MIME support library
+;; Copyright (c) 2000 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <simon@josefsson.org>
+;; Keywords: SMIME X.509 PEM OpenSSL
+
+;; This file is not a 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:
+
+;; This library perform S/MIME operations from within Emacs.
+;;
+;; Functions for fetching certificates from public repositories are
+;; NOT provided (yet).
+;;
+;; It uses OpenSSL (tested with version 0.9.5a) for signing,
+;; encryption and decryption.
+;;
+;; Some general knowledge of S/MIME, X.509, PKCS#12, PEM etc is
+;; probably required to use this library in any useful way.
+;; Especially, don't expect this library to buy security for you.  If
+;; you don't understand what you are doing, you're as likely to lose
+;; security than gain any by using this library.
+
+;;; Quick introduction:
+
+;; Get your S/MIME certificate from VeriSign or someplace.  I used
+;; Netscape to generate the key and certificate request and stuff, and
+;; Netscape can export the key into PKCS#12 format.
+;;
+;; Enter OpenSSL.  To be able to use this library, it need to have the
+;; SMIME key readable in PEM format.  OpenSSL is used to convert the
+;; key:
+;;
+;; $ openssl pkcs12 -in mykey.p12 -clcerts -nodes > mykey.pem
+;; ...
+;;
+;; Now, use M-x customize-variable smime-keys and add mykey.pem as
+;; a key.
+;;
+;; Now you should be able to sign messages!  Create a buffer and write
+;; something and run M-x smime-sign-buffer RET RET and you should see
+;; your message MIME armoured and a signature.  Encryption, M-x
+;; smime-encrypt-buffer, should also work.
+;;
+;; To be able to verify messages you need to build up trust with
+;; someone.  Perhaps you trust the CA that issued your certificate, at
+;; least I did, so I export it's certificates from my PKCS#12
+;; certificate with:
+;;
+;; $ openssl pkcs12 -in mykey.p12 -cacerts -nodes > cacert.pem
+;; ...
+;;
+;; Now, use M-x customize-variable smime-CAs and add cacert.pem as a
+;; CA certificate.
+;;
+;; You should now be able to sign messages, and even verify messages
+;; sent by others that use the same CA as you.
+
+;; Bugs:
+;;
+;; Don't complain that this package doesn't do encrypted PEM files,
+;; submit a patch instead.  I store my keys in a safe place, so I
+;; didn't need the encryption.  Also, programming this was made a lot
+;; easier by that decision.  One might think that this even influenced
+;; were I store my keys, and one would probably be right. :-)
+;;
+;; Suggestions and comments are appreciated, mail me at simon@josefsson.org.
+
+;; <rant>
+;;
+;; I would include pointers to introductory text on concepts used in
+;; this library here, but the material I've read are so horrible I
+;; don't want to recomend them.
+;;
+;; Why can't someone write a simple introduction to all this stuff?
+;; Until then, much of this resemble security by obscurity.
+;;
+;; Also, I'm not going to mention anything about the wonders of
+;; cryptopolitics.  Oops, I just did.
+;;
+;; </rant>
+
+;;; Revision history:
+
+;; version 0 not released
+
+;;; Code:
+
+(defgroup smime nil
+  "S/MIME configuration.")
+
+(defcustom smime-keys nil
+  "Map your mail addresses to a file with your certified key.
+The file is assumed to be in PEM format and not encrypted."
+  :type '(repeat (list (string :tag "Mail address")
+                      (file :tag "File name")))
+  :group 'smime)
+
+(defcustom smime-CAs nil
+  "List of directories/files containing certificates for CAs you trust.
+Files should be in PEM format.
+Directories should contain files (in PEM format) named to the X.509
+hash of the certificate."
+  :type '(repeat (radio (directory :tag "Trusted CA directory")
+                       (file :tag "Trusted CA file")))
+  :group 'smime)
+
+(defcustom smime-certificate-directory "~/Mail/certs/"
+  "Directory containing other people's certificates.
+It should contain files named to the X.509 hash of the certificate,
+and the files themself should be in PEM format.
+The S/MIME library provide simple functionality for fetching
+certificates into this directory, so there is no need to populate it
+manually."
+  :type 'directory
+  :group 'smime)
+
+(defcustom smime-openssl-program "openssl"
+  "Name of OpenSSL binary."
+  :type 'string
+  :group 'smime)
+
+;; OpenSSL wrappers.
+
+(defun smime-call-openssl-region (b e buf &rest args)
+  (case (apply 'call-process-region b e smime-openssl-program nil buf nil args)
+    (0 t)
+    (1 (error "OpenSSL: An error occurred parsing the command options."))
+    (2 (error "OpenSSL: One of the input files could not be read."))
+    (3 (error "OpenSSL: an error occurred creating the PKCS#7 file or when reading the MIME message."))
+    (4 (error "OpenSSL: an error occurred decrypting or verifying the message."))
+    (t (error "Unknown OpenSSL exitcode %s" exitcode))))
+
+(defun smime-sign-region (b e keyfile)
+  "Sign region with certified key in KEYFILE.
+If signing fails, the buffer is not modified.  Region is assumed to
+have proper MIME tags.  KEYFILE is expected to contain a PEM encoded
+private key and certificate."
+  (let* ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
+    (when (smime-call-openssl-region b e buffer "smime" "-sign"
+                                    "-signer" (expand-file-name keyfile))
+      (delete-region b e)
+      (insert-buffer buffer)
+      (kill-buffer buffer)
+      t)))
+
+(defun smime-encrypt-region (b e certfiles)
+  "Encrypt region for recipients specified in CERTFILES.
+If encryption fails, the buffer is not modified.  Region is assumed to
+have proper MIME tags.  CERTFILES is a list of filenames, each file
+is expected to contain of a PEM encoded certificate."
+  (let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*"))))
+    (when (apply 'smime-call-openssl-region b e buffer "smime" "-encrypt"
+                (mapcar 'expand-file-name certfiles))
+      (delete-region b e)
+      (insert-buffer buffer)
+      (kill-buffer buffer)
+      t)))
+
+(defun smime-sign-buffer (&optional keyfile buffer)
+  "S/MIME sign BUFFER with key in KEYFILE.
+KEYFILE should contain a PEM encoded key and certificate."
+  (interactive)
+  (with-current-buffer (or buffer (current-buffer))
+    (smime-sign-region
+     (point-min) (point-max) 
+     (or keyfile
+        (smime-get-key-by-email
+         (completing-read "Sign using which signature? " smime-keys nil nil
+                          (and (listp (car-safe smime-keys)) (caar smime-keys))))))))
+
+(defun smime-encrypt-buffer (&optional certfiles buffer)
+  "S/MIME encrypt BUFFER for recipients specified in CERTFILES.
+CERTFILES is a list of filenames, each file is expected to consist of
+a PEM encoded key and certificate.  Uses current buffer if BUFFER is
+nil."
+  (interactive)
+  (with-current-buffer (or buffer (current-buffer))
+    (smime-encrypt-region 
+     (point-min) (point-max)
+     (or certfiles
+        (list (read-file-name "Recipient's S/MIME certificate: "
+                              smime-certificate-directory nil))))))
+
+;; User interface.
+
+(defvar smime-buffer "*SMIME*")
+
+(defvar smime-mode-map nil)
+(put 'smime-mode 'mode-class 'special)
+
+(unless smime-mode-map
+  (setq smime-mode-map (make-sparse-keymap))
+  (suppress-keymap smime-mode-map)
+
+  (define-key smime-mode-map "q" 'smime-exit)
+  (define-key smime-mode-map "f" 'smime-certificate-info))
+
+(defun smime-mode ()
+  "Major mode for browsing, viewing and fetching certificates.
+
+All normal editing commands are switched off.
+\\<smime-mode-map>
+
+The following commands are available:
+
+\\{smime-mode-map}"
+  (interactive)
+  (kill-all-local-variables)
+  (setq major-mode 'smime-mode)
+  (setq mode-name "SMIME")
+  (setq mode-line-process nil)
+  (use-local-map smime-mode-map)
+  (buffer-disable-undo)
+  (setq truncate-lines t)
+  (setq buffer-read-only t))
+
+(defun smime-certificate-info (certfile)
+  (interactive "fCertificate file: ")
+  (let ((buffer (get-buffer-create (format "*certificate %s*" certfile))))
+    (switch-to-buffer buffer)
+    (erase-buffer)
+    (call-process smime-openssl-program nil buffer 'display
+                 "x509" "-in" (expand-file-name certfile) "-text")
+    (fundamental-mode)
+    (set-buffer-modified-p nil)
+    (toggle-read-only t)
+    (goto-char (point-min))))
+
+(defun smime-draw-buffer ()
+  (with-current-buffer smime-buffer
+    (let (buffer-read-only)
+      (erase-buffer)
+      (insert "\nYour keys:\n")
+      (dolist (key smime-keys)
+       (insert 
+        (format "\t\t%s: %s\n" (car key) (cadr key))))
+      (insert "\nTrusted Certificate Authoritys:\n")
+      (insert "\nKnown Certificates:\n"))))
+
+(defun smime ()
+  "Go to the SMIME buffer."
+  (interactive)
+  (unless (get-buffer smime-buffer)
+    (save-excursion
+      (set-buffer (get-buffer-create smime-buffer))
+      (smime-mode)))
+  (smime-draw-buffer)
+  (switch-to-buffer smime-buffer))
+
+(defun smime-exit ()
+  "Quit the S/MIME buffer."
+  (interactive)
+  (kill-buffer (current-buffer)))
+
+;; Other functions
+
+(defun smime-get-key-by-email (email)
+  (cadr (assoc email smime-keys)))
+
+(provide 'smime)
+
+;;; smime.el ends here
diff --git a/contrib/timer.el b/contrib/timer.el
new file mode 100644 (file)
index 0000000..70d9940
--- /dev/null
@@ -0,0 +1,308 @@
+;;; timer.el --- run a function with args at some time in future.
+
+;; Copyright (C) 1996 Free Software Foundation, Inc.
+
+;; Maintainer: FSF
+
+;; 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.
+
+;;; Commentary:
+
+;; This package gives you the capability to run Emacs Lisp commands at
+;; specified times in the future, either as one-shots or periodically.
+
+;;; Code:
+
+(require 'itimer)
+
+(fset 'timer-create 'make-itimer)
+
+(fset 'timerp 'itimerp)
+
+;(defvar timer-idle-list nil
+;  "List of active idle-time timers in order of increasing time")
+(defvaralias 'timer-idle-list 'itimer-list)
+(defvaralias 'timer-list 'itimer-list)
+
+
+(defun timer-set-time (timer time &optional delta)
+  "Set the trigger time of TIMER to TIME.
+TIME must be in the internal format returned by, e.g., `current-time'.
+If optional third argument DELTA is a non-zero integer, make the timer
+fire repeatedly that many seconds apart."
+  (set-itimer-value timer (itimer-time-difference time (current-time)))
+  (and delta (check-nonnegative-number delta))
+  (and delta (set-itimer-restart timer delta))
+  timer)
+
+(defun timer-set-idle-time (timer secs &optional repeat)
+  "Set the trigger idle time of TIMER to SECS.
+If optional third argument REPEAT is non-nil, make the timer
+fire each time Emacs is idle for that many seconds."
+  (set-itimer-is-idle timer t)
+  (set-itimer-value timer secs)
+  (when repeat
+    (set-itimer-restart timer secs))
+  timer)
+
+(defun timer-relative-time (time secs &optional usecs)
+  "Advance TIME by SECS seconds and optionally USECS microseconds.
+SECS may be a fraction."
+  (let ((high (car time))
+       (low (if (consp (cdr time)) (nth 1 time) (cdr time)))
+       (micro (if (numberp (car-safe (cdr-safe (cdr time))))
+                  (nth 2 time)
+                0)))
+    ;; Add
+    (if usecs (setq micro (+ micro usecs)))
+    (if (floatp secs)
+       (setq micro (+ micro (floor (* 1000000 (- secs (floor secs)))))))
+    (setq low (+ low (floor secs)))
+
+    ;; Normalize
+    (setq low (+ low (/ micro 1000000)))
+    (setq micro (mod micro 1000000))
+    (setq high (+ high (/ low 65536)))
+    (setq low (logand low 65535))
+
+    (list high low (and (/= micro 0) micro))))
+
+(defun timer-inc-time (timer secs &optional usecs)
+  "Increment the time set in TIMER by SECS seconds and USECS microseconds.
+SECS may be a fraction."
+  (let ((time (itimer-value timer)))
+    (setq time (+ time secs (if (and usecs (fboundp 'lisp-float-type))
+                               (/ usecs (float 1000000))
+                             0)))
+    (set-itimer-value timer time)))
+
+(defun timer-set-time-with-usecs (timer time usecs &optional delta)
+  "Set the trigger time of TIMER to TIME.
+TIME must be in the internal format returned by, e.g., `current-time'.
+If optional third argument DELTA is a non-zero integer, make the timer
+fire repeatedly that many seconds apart."
+  (let ((list (list nil nil nil)))
+    (setcar list (car time))
+    (setcar (nthcdr 1 list) (if (consp (cdr time))
+                               (car (cdr time))
+                             (cdr time)))
+    (setcar (nthcdr 2 list) usecs)
+    (set-itimer-value timer (itimer-time-difference list (current-time)))
+    (set-itimer-restart timer delta)
+    timer))
+
+(defun timer-set-function (timer function &optional args)
+  "Make TIMER call FUNCTION with optional ARGS when triggering."
+  (set-itimer-function timer function)
+  (set-itimer-function-arguments timer args)
+  (set-itimer-uses-arguments timer t)
+  timer)
+\f
+(defun timer-activate (timer)
+  "Put TIMER on the list of active timers."
+  (activate-itimer timer))
+
+(defun timer-activate-when-idle (timer)
+  "Arrange to activate TIMER whenever Emacs is next idle."
+  (set-itimer-is-idle timer t)
+  ;(set-itimer-uses-arguments timer nil)
+  ;(unless (memq timer timer-idle-list)
+    ;(setq timer-idle-list (cons timer timer-idle-list)))
+  (activate-itimer timer))
+
+;; can't do this, different kind of timer
+;;(defalias 'disable-timeout 'cancel-timer)
+
+(defun cancel-timer (timer)
+  "Remove TIMER from the list of active timers."
+  ;(setq timer-idle-list (delq timer timer-idle-list))
+  (delete-itimer timer))
+
+(defun cancel-function-timers (function)
+  "Cancel all timers scheduled by `run-at-time' which would run FUNCTION."
+  (interactive "aCancel timers of function: ")
+  (let ((p itimer-list))
+    (while p
+      (if (eq function (itimer-function p))
+         (progn
+           (setq p (cdr p))
+           (delete-itimer (car p)))
+       (setq p (cdr p))))))
+\f
+;;;###autoload
+(defun run-at-time (time repeat function &rest args)
+  "Perform an action after a delay of SECS seconds.
+Repeat the action every REPEAT seconds, if REPEAT is non-nil.
+TIME should be a string like \"11:23pm\", nil meaning now, a number of seconds
+from now, or a value from `encode-time'.
+REPEAT may be an integer or floating point number.
+The action is to call FUNCTION with arguments ARGS.
+
+This function returns a timer object which you can use in `cancel-timer'."
+  (interactive "sRun at time: \nNRepeat interval: \naFunction: ")
+
+  ;; Special case: nil means "now" and is useful when repeating.
+  (if (null time)
+      (setq time (current-time)))
+
+  ;; Handle numbers as relative times in seconds.
+  (if (numberp time)
+      (setq time (timer-relative-time (current-time) time)))
+
+  ;; Handle relative times like "2 hours and 35 minutes"
+  (if (stringp time)
+      (let ((secs (timer-duration time)))
+       (if secs
+           (setq time (timer-relative-time (current-time) secs)))))
+
+  ;; Handle "11:23pm" and the like.  Interpret it as meaning today
+  ;; which admittedly is rather stupid if we have passed that time
+  ;; already.  (Though only Emacs hackers hack Emacs at that time.)
+  (if (stringp time)
+      (progn
+       (require 'diary-lib)
+       (let ((hhmm (diary-entry-time time))
+             (now (decode-time)))
+         (if (>= hhmm 0)
+             (setq time
+                   (encode-time 0 (% hhmm 100) (/ hhmm 100) (nth 3 now)
+                                (nth 4 now) (nth 5 now) (nth 8 now)))))))
+
+  (or (consp time)
+      (error "Invalid time format"))
+
+  (or (null repeat)
+      (numberp repeat)
+      (error "Invalid repetition interval"))
+
+  (let ((timer (timer-create)))
+    (timer-set-time timer time repeat)
+    (timer-set-function timer function args)
+    (timer-activate timer)
+    timer))
+
+;;;###autoload
+(defun run-with-timer (secs repeat function &rest args)
+  "Perform an action after a delay of SECS seconds.
+Repeat the action every REPEAT seconds, if REPEAT is non-nil.
+SECS and REPEAT may be integers or floating point numbers.
+The action is to call FUNCTION with arguments ARGS.
+
+This function returns a timer object which you can use in `cancel-timer'."
+  (interactive "sRun after delay (seconds): \nNRepeat interval: \naFunction: ")
+  (apply 'run-at-time secs repeat function args))
+
+;;;###autoload
+(defun run-with-idle-timer (secs repeat function &rest args)
+  "Perform an action the next time Emacs is idle for SECS seconds.
+If REPEAT is non-nil, do this each time Emacs is idle for SECS seconds.
+SECS may be an integer or a floating point number.
+The action is to call FUNCTION with arguments ARGS.
+
+This function returns a timer object which you can use in `cancel-timer'."
+  (interactive
+   (list (read-from-minibuffer "Run after idle (seconds): " nil nil t)
+        (y-or-n-p "Repeat each time Emacs is idle? ")
+        (intern (completing-read "Function: " obarray 'fboundp t))))
+  (let ((timer (timer-create)))
+    (timer-set-function timer function args)
+    (timer-set-idle-time timer secs repeat)
+    (timer-activate-when-idle timer)
+    timer))
+\f
+(defun with-timeout-handler (tag)
+  (throw tag 'timeout))
+
+;;;###autoload (put 'with-timeout 'lisp-indent-function 1)
+
+;;;###autoload
+(defmacro with-timeout (list &rest body)
+  "Run BODY, but if it doesn't finish in SECONDS seconds, give up.
+If we give up, we run the TIMEOUT-FORMS and return the value of the last one.
+The call should look like:
+ (with-timeout (SECONDS TIMEOUT-FORMS...) BODY...)
+The timeout is checked whenever Emacs waits for some kind of external
+event \(such as keyboard input, input from subprocesses, or a certain time);
+if the program loops without waiting in any way, the timeout will not
+be detected."
+  (let ((seconds (car list))
+       (timeout-forms (cdr list)))
+    `(let ((with-timeout-tag (cons nil nil))
+          with-timeout-value with-timeout-timer)
+       (if (catch with-timeout-tag
+            (progn
+              (setq with-timeout-timer
+                    (run-with-timer ,seconds nil
+                                     'with-timeout-handler
+                                     with-timeout-tag))
+              (setq with-timeout-value (progn . ,body))
+              nil))
+          (progn . ,timeout-forms)
+        (cancel-timer with-timeout-timer)
+        with-timeout-value))))
+
+(defun y-or-n-p-with-timeout (prompt seconds default-value)
+  "Like (y-or-n-p PROMPT), with a timeout.
+If the user does not answer after SECONDS seconds, return DEFAULT-VALUE."
+  (with-timeout (seconds default-value)
+    (y-or-n-p prompt)))
+\f
+(defvar timer-duration-words
+  (list (cons "microsec" 0.000001)
+       (cons "microsecond" 0.000001)
+        (cons "millisec" 0.001)
+       (cons "millisecond" 0.001)
+        (cons "sec" 1)
+       (cons "second" 1)
+       (cons "min" 60)
+       (cons "minute" 60)
+       (cons "hour" (* 60 60))
+       (cons "day" (* 24 60 60))
+       (cons "week" (* 7 24 60 60))
+       (cons "fortnight" (* 14 24 60 60))
+       (cons "month" (* 30 24 60 60))    ; Approximation
+       (cons "year" (* 365.25 24 60 60)) ; Approximation
+       )
+  "Alist mapping temporal words to durations in seconds")
+
+(defun timer-duration (string)
+  "Return number of seconds specified by STRING, or nil if parsing fails."
+  (let ((secs 0)
+       (start 0)
+       (case-fold-search t))
+    (while (string-match
+           "[ \t]*\\([0-9.]+\\)?[ \t]*\\([a-z]+[a-rt-z]\\)s?[ \t]*"
+           string start)
+      (let ((count (if (match-beginning 1)
+                      (string-to-number (match-string 1 string))
+                    1))
+           (itemsize (cdr (assoc (match-string 2 string)
+                                 timer-duration-words))))
+       (if itemsize
+           (setq start (match-end 0)
+                 secs (+ secs (* count itemsize)))
+         (setq secs nil
+               start (length string)))))
+    (if (= start (length string))
+       secs
+      (if (string-match "\\`[0-9.]+\\'" string)
+         (string-to-number string)))))
+\f
+(provide 'timer)
+
+;;; timer.el ends here
diff --git a/contrib/vcard.el b/contrib/vcard.el
new file mode 100644 (file)
index 0000000..000da5e
--- /dev/null
@@ -0,0 +1,308 @@
+;;; vcard.el --- vcard parsing and display routines
+
+;; Copyright (C) 1997 Noah S. Friedman
+
+;; Author: Noah Friedman <friedman@splode.com>
+;; Maintainer: friedman@splode.com
+;; Keywords: extensions
+;; Created: 1997-09-27
+
+;; 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; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; The display routines here are just an example.  The primitives in the
+;; first section can be used to construct other vcard formatters.
+
+;;; Code:
+
+(defvar vcard-standard-filters '(vcard-filter-html)
+  "*Standard list of filters to apply to parsed vcard data.
+These filters are applied sequentially to vcard data records when
+the function `vcard-standard-filter' is supplied as the second argument to
+`vcard-parse-string'.")
+
+(defun vcard-parse-string (raw &optional filter)
+  "Parse RAW vcard data as a string, and return an alist representing data.
+
+If the optional function FILTER is specified, apply that filter to the
+data record of each key before splitting fields.  Filters should accept
+two arguments: the key and the data.  They are expected to operate on
+\(and return\) a modified data value.
+
+Vcard data is normally in the form
+
+    begin:        vcard
+    key1:         field
+    key2;subkey1: field
+    key2;subkey2: field1;field2;field3
+    end:          vcard
+
+\(Whitespace after the colon separating the key and field is optional.\)
+If supplied to this function an alist of the form
+
+    ((\"key1\" \"field\")
+     (\"key2\"
+      (\"subkey2\" \"field1\" \"field2\" \"field3\")
+      (\"subkey1\" \"field\")))
+
+would be returned."
+  (save-match-data
+    (let ((raw-pos 0)
+          (vcard-data nil)
+          key data)
+      (string-match "^[ \t]*begin:[ \t]*vcard[ \t]*[\r\n]+" raw raw-pos)
+      (setq raw-pos (match-end 0))
+      (while (and (< raw-pos (length raw))
+                  (string-match
+                   "^[ \t]*\\([^:]+\\):[ \t]*\\(.*\\)[ \t]*[\n\r]+"
+                   raw raw-pos))
+        (setq key (vcard-matching-substring 1 raw))
+        (setq data (vcard-matching-substring 2 raw))
+        (setq raw-pos (match-end 0))
+        (cond
+         ((string= key "end")
+          (setq raw-pos (length raw)))
+         (t
+          (and filter
+               (setq data (funcall filter key data)))
+          (setq vcard-data
+                (vcard-set-alist-slot vcard-data
+                                      (vcard-split-string key ";")
+                                      (vcard-split-string data ";"))))))
+      (nreverse vcard-data))))
+
+(defun vcard-ref (key vcard-data)
+  "Return the vcard data associated with KEY in VCARD-DATA.
+Key may be a list of nested keys or a single string of colon-separated
+keys."
+  (cond ((listp key)
+         (vcard-alist-assoc key vcard-data))
+        ((and (stringp key)
+              (save-match-data
+                (string-match ";" key)))
+         (vcard-alist-assoc (vcard-split-string key ";") vcard-data))
+        ((stringp key)
+         (cdr (assoc key vcard-data)))))
+
+\f
+;;; Vcard data filters.
+
+;; These receive both the key and data, but are expected to operate on (and
+;; return) just the data.
+;;
+;; There is probably no overwhelming need for this, except that some lusers
+;; put HTML in their vcards under the misguided notion that it's a standard
+;; feature of vcards just because Netscape supports this feature.  (Or
+;; perhaps those lusers just don't care that their vcards look like shit in
+;; every other MUA).
+;;
+;; On the other hand, perhaps someone will devise some other use for these
+;; filters, such as noticing common phone number formats and re-formatting
+;; them to fit personal preferences.
+
+(defun vcard-filter-apply-filter-list (filter-list key data)
+  (while filter-list
+    (setq data (funcall (car filter-list) key data))
+    (setq filter-list (cdr filter-list)))
+  data)
+
+(defun vcard-standard-filter (key data)
+  (vcard-filter-apply-filter-list vcard-standard-filters key data))
+
+(defun vcard-filter-html (key data)
+  (save-match-data
+    (while (string-match "<[^<>\n]+>" data)
+      (setq data (concat (substring data 0 (match-beginning 0))
+                         (substring data (match-end 0)))))
+    data))
+
+\f
+;;; Utility routines.
+
+;; This does most of the dirty work of key lookup for vcard-ref.
+(defun vcard-alist-assoc (keys alist)
+  (while (and keys alist)
+    (setq alist (cdr (assoc (car keys) alist)))
+    (setq keys (cdr keys)))
+  alist)
+
+;; In ALIST, set KEY-LIST's value to VALUE, and return new value of ALIST.
+;; KEY-LIST should be a list of nested keys, if ALIST is an alist of alists.
+;; If any key is not present in an alist, the key and value pair will be
+;; inserted into the parent alist.
+(defun vcard-set-alist-slot (alist key-list value)
+  (let* ((key (car key-list))
+         (elt (assoc key alist)))
+    (setq key-list (cdr key-list))
+    (cond ((and (cdr elt) key-list)
+           (vcard-set-alist-slot (cdr elt) key-list value))
+          ((and elt key-list)
+           (setcdr elt (vcard-set-alist-slot nil key-list value)))
+          (elt (setcdr elt value))
+          (t
+           (let ((new))
+             (setq key-list (nreverse (cons key key-list)))
+             (while key-list
+               (if new
+                   (setq new (cons (car key-list) (cons new nil)))
+                 (setq new (cons (car key-list) value)))
+               (setq key-list (cdr key-list)))
+
+             (cond ((null alist)
+                    (setq alist (cons new nil)))
+                   (t
+                    (setcdr alist (cons (car alist) (cdr alist)))
+                    (setcar alist new))))))
+    alist))
+
+;; Return substring matched by last search.
+;; N specifies which match data pair to use
+;; Value is nil if there is no Nth match.
+;; If STRING is not specified, the current buffer is used.
+(defun vcard-matching-substring (n &optional string)
+  (if (match-beginning n)
+      (if string
+         (substring string (match-beginning n) (match-end n))
+       (buffer-substring (match-beginning n) (match-end n)))))
+
+;; Split STRING at occurences of SEPARATOR.  Return a list of substrings.
+;; SEPARATOR can be any regexp, but anything matching the separator will
+;; never appear in any of the returned substrings.
+(defun vcard-split-string (string separator)
+  (let* ((list nil)
+         (pos 0))
+    (save-match-data
+      (while (string-match separator string pos)
+        (setq list (cons (substring string pos (match-beginning 0)) list))
+        (setq pos (match-end 0)))
+      (nreverse (cons (substring string pos) list)))))
+
+(defun vcard-flatten (l)
+  (if (consp l)
+      (apply 'nconc (mapcar 'vcard-flatten l))
+    (list l)))
+
+\f
+;;; Sample formatting routines.
+
+(defun vcard-format-box (vcard-data)
+  "Like `vcard-format-string', but put an ascii box around text."
+  (let* ((lines (vcard-format-lines vcard-data))
+         (len (vcard-format-max-length lines))
+         (edge (concat "\n+" (make-string (+ len 2) ?-) "+\n"))
+         (line-fmt (format "| %%-%ds |" len))
+         (formatted-lines
+          (mapconcat (function (lambda (s) (format line-fmt s))) lines "\n")))
+    (if (string= formatted-lines "")
+        formatted-lines
+      (concat edge formatted-lines edge))))
+
+(defun vcard-format-string (vcard-data)
+  "Format VCARD-DATA into a string suitable for presentation.
+VCARD-DATA should be a parsed vcard alist.  The result is a string
+with formatted vcard information which can be inserted into a mime
+presentation buffer."
+  (mapconcat 'identity (vcard-format-lines vcard-data) "\n"))
+
+(defun vcard-format-lines (vcard-data)
+  (let* ((name  (vcard-format-get-name      vcard-data))
+         (title (vcard-format-ref "title"   vcard-data))
+         (org   (vcard-format-ref "org"     vcard-data))
+         (addr  (vcard-format-get-address   vcard-data))
+         (tel   (vcard-format-get-telephone vcard-data))
+         (lines (delete nil (vcard-flatten (list name title org addr))))
+         (col-template (format "%%-%ds%%s"
+                               (vcard-format-offset lines tel)))
+         (l lines))
+    (while tel
+      (setcar l (format col-template (car l) (car tel)))
+      ;; If we stripped away too many nil slots from l, add empty strings
+      ;; back in so setcar above will work on next iteration.
+      (and (cdr tel)
+           (null (cdr l))
+           (setcdr l (cons "" nil)))
+      (setq l (cdr l))
+      (setq tel (cdr tel)))
+    lines))
+
+
+(defun vcard-format-get-name (vcard-data)
+  (let ((name (vcard-format-ref "fn" vcard-data))
+        (email (or (vcard-format-ref '("email" "internet") vcard-data)
+                   (vcard-format-ref "email" vcard-data))))
+    (if email
+        (format "%s <%s>" name email)
+      name)))
+
+(defun vcard-format-get-address (vcard-data)
+  (let* ((addr-raw (or (vcard-format-ref '("adr" "dom") vcard-data)
+                       (vcard-format-ref "adr" vcard-data)))
+         (addr (if (consp addr-raw)
+                   addr-raw
+                 (list addr-raw)))
+         (street (delete "" (list (nth 0 addr) (nth 1 addr) (nth 2 addr))))
+         (city-list (delete "" (nthcdr 3 addr)))
+         (city (cond ((null (car city-list)) nil)
+                     ((cdr city-list)
+                      (format "%s, %s"
+                              (car city-list)
+                              (mapconcat 'identity (cdr city-list) " ")))
+                     (t (car city-list)))))
+    (delete nil
+            (if city
+                (append street (list city))
+              street))))
+
+(defun vcard-format-get-telephone (vcard-data)
+  (delete nil
+          (mapcar (function (lambda (x)
+                              (let ((result (vcard-format-ref (car x)
+                                                              vcard-data)))
+                                (and result
+                                     (concat (cdr x) result)))))
+                  '((("tel" "work") . "Work: ")
+                    (("tel" "home") . "Home: ")
+                    (("tel" "fax")  . "Fax:  ")))))
+
+(defun vcard-format-ref (key vcard-data)
+  (setq key (vcard-ref key vcard-data))
+  (or (cdr key)
+      (setq key (car key)))
+  (and (stringp key)
+       (string= key "")
+       (setq key nil))
+  key)
+
+(defun vcard-format-offset (row1 row2 &optional maxwidth)
+  (or maxwidth (setq maxwidth (frame-width)))
+  (let ((max1 (vcard-format-max-length row1))
+        (max2 (vcard-format-max-length row2)))
+    (+ max1 (min 5 (max 1 (- maxwidth (+ max1 max2)))))))
+
+(defun vcard-format-max-length (strings)
+  (let ((maxlen 0)
+        (len 0))
+    (while strings
+      (setq len (length (car strings)))
+      (setq strings (cdr strings))
+      (and (> len maxlen)
+           (setq maxlen len)))
+    maxlen))
+
+(provide 'vcard)
+
+;;; vcard.el ends here.
index 94e9500..50f90f8 100644 (file)
@@ -1,5 +1,5 @@
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: So you want to use the new Gnus
 Message-ID: <lars-doc1@eyesore.no>
@@ -47,7 +47,7 @@ heart's delight at <URL:http://www.ifi.uio.no/~larsi/larsi.html>.
 ;; Boston, MA 02111-1307, USA.
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: Starting up
 Message-ID: <lars-doc2@eyesore.no>
@@ -76,7 +76,7 @@ the "Foreign groups" article for that.
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: Where are all the groups, then?
 Message-ID: <lars-doc3@eyesore.no>
@@ -109,7 +109,7 @@ prompted for groups to subscribe to.)
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: I want to read my mail!
 Message-ID: <lars-doc4@eyesore.no>
@@ -147,7 +147,7 @@ these variables and re-start Gnus.
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: Foreign newsgroups
 Message-ID: <lars-doc5@eyesore.no>
@@ -170,7 +170,7 @@ the info pages to find out more.
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: Low level changes in GNUS, or, Wrong type argument: stringp, nil
 Message-ID: <lars-doc6@eyesore.no>
@@ -198,7 +198,7 @@ with Emacs 18.  It won't even work on Emacsen older than Emacs
 
        
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: How do I re-scan my mail groups?
 Message-ID: <lars-doc8@eyesore.no>
@@ -212,7 +212,7 @@ You can also re-scan all the mail groups by putting them on level 1
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: How do I set up virtual newsgroups?
 Message-ID: <lars-doc9@eyesore.no>
@@ -266,7 +266,7 @@ the lines of:
 
 
 From lars Thu Feb 23 23:20:38 1995
-From: larsi@ifi.uio.no (ding)
+From: larsi@gnus.org (ding)
 Date: Fri Feb 24 13:40:45 1995
 Subject: Bugs & stuff
 Message-ID: <lars-doc7@eyesore.no>
@@ -286,9 +286,9 @@ report.
 If I am not able to reproduce the bug, I won't be able to fix it.
 
 I would, of course, prefer that you locate the bug, fix it, and mail
-me the patches, but one can't have everything.
+me the patches, but one can't have everything. 
 
-If you have any questions on usage, the "ding@ifi.uio.no" mailing list
+If you have any questions on usage, the "ding@gnus.org" mailing list
 is where to post the questions.
 
 
diff --git a/etc/gnus/bar.xbm b/etc/gnus/bar.xbm
new file mode 100644 (file)
index 0000000..e61300a
--- /dev/null
@@ -0,0 +1,7 @@
+#define noname_width 6
+#define noname_height 48
+static char noname_bits[] = {
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
+ 0x0c,0x0c,0x0c};
diff --git a/etc/gnus/bar.xpm b/etc/gnus/bar.xpm
new file mode 100644 (file)
index 0000000..2985065
--- /dev/null
@@ -0,0 +1,54 @@
+/* XPM */
+static char * picon-bar_xpm[] = {
+"6 48 2 1",
+"      c white s background",
+".     c black",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  ",
+"  ..  "};
diff --git a/etc/gnus/gnus-group-catchup-current-up.xbm b/etc/gnus/gnus-group-catchup-current-up.xbm
new file mode 100644 (file)
index 0000000..f801fea
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x20,0x40,0x10,0x20,0x0a,0x15,0x85,0x0a,0x20,0x20,0x28,0x50,0x8a,0x8a,0x02,
+ 0x05,0x10,0x5e,0x54,0xa8,0xa5,0x35,0x01,0x7a,0x00,0x33,0x54,0x95,0xaa,0xaa,
+ 0x02,0xcc,0xfe,0x17,0xa8,0xd8,0x01,0xac,0xfa,0x4f,0x3d,0xf8,0x05,0x30,0x22,
+ 0x80,0xf6,0x60,0x2b,0xfc,0x8f,0x20,0x11,0x82,0xca,0x60,0x1a,0x2a,0x6e,0x28,
+ 0x08,0x85,0x42,0x68,0xfa,0x11,0x28,0xc8,0x04,0x8b,0xe2,0xb7,0x06,0x21,0x14,
+ 0xd4,0x1a,0x11,0x31,0x04,0x31,0x56,0x6d,0xdc,0x58,0xea,0xc7,0x28,0x64,0x66,
+ 0x60,0xa9,0x57,0x72,0x90,0x49,0xc8,0xec,0x5f,0x99,0xa6,0x7f,0x95,0x52,0xaa,
+ 0x64,0x22,0xbf,0x49,0x2a,0xa9,0x7e,0x92,0x52,0x55,0x55,0x54,0x49,0x4a,0xa4,
+ 0x49,0xaa,0xa4,0x4a,0x2a,0x49,0x2a,0x25};
diff --git a/etc/gnus/gnus-group-catchup-current-up.xpm b/etc/gnus/gnus-group-catchup-current-up.xpm
new file mode 100644 (file)
index 0000000..0504f9d
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-catchup_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #999999999999",
+"o     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"         ....                   ",
+"        .XXXX.             .... ",
+"        .XXXX.            .XXXX.",
+"         .XXX.            .XXXX.",
+" .........XX.              .XXX.",
+".ooooooooo..       .........XX. ",
+".o....ooooo...... .ooooooooo..  ",
+"X.   .ooooooooo.X..o....ooooo.  ",
+"X.   .oooo........X.   .ooooo.  ",
+".   .oooo.       .X.   .ooooo.  ",
+"    .oooo.       ..   .oooo.o.  ",
+"   .oooo.             .oooo.o.  ",
+"   ......            .ooooo.oo..",
+"  .ooooo.            ...... ..X.",
+"  .ooooo.           .ooooo.   ..",
+" .o..ooo.           ..oooo.     ",
+".ooo..ooo.XXXXXXXXX.o..ooo.XXXXX",
+"ooo.XX.oo.XXX......ooo..ooo.XXXX",
+"oo.XXX.oo.XXX..oooooo.XX.oo.XXXX",
+"..XXXX.oo.XXX..ooooo.XXX.oo.XXXX",
+"XXXXXXX.oo.XX.......XXX .oo.XXXX",
+"XXXXXXX.....X..XXXXXXXXXX.oo.XXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX.....XX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX......X",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
diff --git a/etc/gnus/gnus-group-catchup-current.xbm b/etc/gnus/gnus-group-catchup-current.xbm
new file mode 100644 (file)
index 0000000..2218640
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x84,0x20,0x00,0x04,0x21,0x88,0x54,0x51,0x84,0x22,0x02,0x04,0x51,0x88,0xa0,
+ 0x42,0x04,0x1f,0x0a,0x28,0x51,0x75,0xa1,0x7a,0x04,0x23,0x04,0xcc,0xa1,0x76,
+ 0xa9,0xa6,0xfe,0x1b,0x00,0xd8,0x01,0x0c,0xfd,0x5f,0x3d,0xf8,0x05,0x30,0x26,
+ 0x80,0xf7,0x60,0x33,0xfc,0xdb,0x20,0x11,0x22,0x8e,0x20,0x14,0x8a,0x66,0x68,
+ 0x09,0x45,0x48,0x28,0xfc,0x11,0x21,0xc8,0x04,0x45,0xf4,0xf7,0x06,0x89,0x10,
+ 0xc4,0x1a,0x23,0x35,0x2c,0x31,0xaa,0x6c,0x54,0x58,0xea,0xc7,0x48,0x64,0x66,
+ 0xa0,0x99,0x57,0x72,0x50,0x59,0xc8,0xec,0x2f,0x49,0xa6,0x7f,0xaa,0x52,0xaa,
+ 0x64,0x49,0xbf,0x49,0x2a,0xa5,0x7e,0x92,0xa4,0x14,0x55,0xa9,0x52,0xaa,0x92,
+ 0x4a,0xa5,0x24,0x25,0xa5,0x94,0xaa,0xa8};
diff --git a/etc/gnus/gnus-group-catchup-current.xpm b/etc/gnus/gnus-group-catchup-current.xpm
new file mode 100644 (file)
index 0000000..bea4643
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-catchup_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c #999999999999",
+"o     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"         ....                   ",
+"        .XXXX.             .... ",
+"        .XXXX.            .XXXX.",
+"         .XXX.            .XXXX.",
+" .........XX.              .XXX.",
+".ooooooooo..       .........XX. ",
+".o....ooooo...... .ooooooooo..  ",
+"X.   .ooooooooo.X..o....ooooo.  ",
+"X.   .oooo........X.   .ooooo.  ",
+".   .oooo.       .X.   .ooooo.  ",
+"    .oooo.       ..   .oooo.o.  ",
+"   .oooo.             .oooo.o.  ",
+"   ......            .ooooo.oo..",
+"  .ooooo.            ...... ..X.",
+"  .ooooo.           .ooooo.   ..",
+" .o..ooo.           ..oooo.     ",
+".ooo..ooo.XXXXXXXXX.o..ooo.XXXXX",
+"ooo.XX.oo.XXX......ooo..ooo.XXXX",
+"oo.XXX.oo.XXX..oooooo.XX.oo.XXXX",
+"..XXXX.oo.XXX..ooooo.XXX.oo.XXXX",
+"XXXXXXX.oo.XX.......XXX .oo.XXXX",
+"XXXXXXX.....X..XXXXXXXXXX.oo.XXX",
+"XXXXXXXXXXXXX.XXXXXXXXXXX.....XX",
+"XXXXXXXXXXXXXXXXXXXXXXXXX......X",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
diff --git a/etc/gnus/gnus-group-describe-group-up.xbm b/etc/gnus/gnus-group-describe-group-up.xbm
new file mode 100644 (file)
index 0000000..0054d63
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x55,0xb5,0x55,0xb5,0xaa,0x12,0xa9,0x12,0x12,0x55,0x12,0x65,0xa9,0xa4,0x4a,
+ 0x10,0x55,0x9b,0x15,0xc1,0x55,0x51,0x09,0x00,0x92,0x4a,0x02,0x00,0xa9,0x24,
+ 0x01,0x00,0x55,0x5b,0x11,0x11,0x92,0xa4,0x00,0x00,0x2a,0x49,0x00,0x00,0x49,
+ 0x55,0x00,0x00,0x35,0x55,0x11,0x11,0xaa,0xaa,0x00,0x00,0x92,0x44,0x00,0x00,
+ 0xa5,0x32,0x00,0x00,0x55,0x55,0x11,0x11,0x29,0x55,0x01,0x00,0xaa,0x24,0x01,
+ 0x00,0x92,0x97,0x00,0x00,0x75,0xba,0x13,0x11,0x2a,0x51,0x04,0x00,0xb2,0xaa,
+ 0x0a,0x40,0x59,0x75,0x25,0x40,0xb5,0x3d,0x59,0xb5,0xfa,0x77,0xa5,0x2a,0xae,
+ 0x9a,0x2a,0x49,0xd6,0x5f,0x49,0xa5,0xf7,0x57,0x35,0x55,0x7d,0x29,0x95,0x2a,
+ 0x7e,0x55,0xa9,0x54,0x5f,0x92,0x94,0x92};
diff --git a/etc/gnus/gnus-group-describe-group-up.xpm b/etc/gnus/gnus-group-describe-group-up.xpm
new file mode 100644 (file)
index 0000000..e0ffde7
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-describe-group_xpm[] = {
+"32 32 4 1",
+"      c #000000000000",
+".     c #999999999999 s backgroundToolBarColor",
+"X     c #FFFFFFFFFFFF",
+"o     c #BFBFBFBFBFBF",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+".......................XXXXX....",
+" ... ... ... ... ... XXX XXXXX..",
+"....................XXXXXXXXXXX.",
+"...................XXXXXXXXXXXXX",
+"..................XXXXXXXXXXXXXX",
+" ... ... ... ... XXX XXX XXX XXX",
+"................XXXXXXXXXXXXXXXX",
+"................XXXXXXXXXXXXXXXX",
+"................XXXXXXXXXXXXXXXX",
+" ... ... ... ... XXX XXX XXX XXX",
+"................XXXXXXXXXXXXXXXX",
+"................XXXXXXXXXXXXXXXX",
+"................XXXXXXXXXXXXXXXX",
+" ... ... ... ... XXX XXX XXX XXX",
+".................XXXXXXXXXXXXXXX",
+".................XXXXXXXXXXXXXXX",
+".......    .......XXXXXXXXXXXXXX",
+" ... . oooo  ... ..X XXX XXX XXX",
+"..... o...oo .......XXXXXXXXXXX.",
+".... .o....o. .......XXXXXXXXX..",
+".... o . ...  .........XXXXX....",
+" ...  o .. .  .. ... ... ... ...",
+"...  o   . .  ..................",
+"..  X . . .  ...................",
+".  o .   .  ....................",
+"   o       . ... ... ... ... ...",
+" o     .........................",
+"o .   ...o......................",
+"     ..........................."};
diff --git a/etc/gnus/gnus-group-exit-up.xbm b/etc/gnus/gnus-group-exit-up.xbm
new file mode 100644 (file)
index 0000000..c03e1fa
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x00,0x40,0x00,0x00,0x30,0x30,0x00,0x00,0x68,0x38,0x00,0x38,0x60,0x48,
+ 0x00,0xd4,0x91,0xde,0x07,0x68,0xcf,0xb7,0x1a,0x80,0xb4,0x6e,0x05,0x00,0xe2,
+ 0x07,0x00,0x00,0xde,0x1d,0x00,0xe0,0xfd,0x77,0x00,0xb0,0x6a,0xf3,0x00,0x20,
+ 0x9c,0xa5,0x03,0x00,0xaa,0x86,0x02,0x00,0x65,0x06,0x02,0xab,0x6f,0xaf,0x59,
+ 0x80,0x62,0x0c,0x00,0xaa,0xab,0xba,0x4a,0x40,0x21,0x10,0x10,0xea,0x45,0x4a,
+ 0x42,0x40,0x89,0x90,0x28,0xd2,0x21,0x02,0x82,0xa4,0x8a,0x44,0x20,0xf0,0x10,
+ 0x10,0x85,0xa4,0x04,0x4a,0x20,0xe2,0x22,0x80,0x80,0xbc,0x4b,0x09,0x2a,0xee,
+ 0x8e,0x32,0x80,0xeb,0x73,0x85,0x28,0x56,0xaa,0xb5,0x02,0xff,0xff,0x85,0x48,
+ 0x08,0x94,0x11,0x01,0x42,0x02,0x48,0x54};
diff --git a/etc/gnus/gnus-group-exit-up.xpm b/etc/gnus/gnus-group-exit-up.xpm
new file mode 100644 (file)
index 0000000..1b8982f
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-exit-gnus_xpm[] = {
+"32 32 4 1",
+"      c #FFFFFFFFFFFF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #999999999999",
+"o     c #BFBFBFBFBFBF",
+"                      .         ",
+"            ..      ..          ",
+"           . ..    ...          ",
+"   ...       ..    .  .         ",
+"  . . ...   .  . .... .....     ",
+"   . .. ....  ..... .. . . ..   ",
+"       .  . .. . ... .. . .     ",
+"         .   ......             ",
+"         .... ... ...           ",
+"     .... ......... ...         ",
+"    .. . . .X.. ..  ....        ",
+"     .    .X.  .. .  . ...      ",
+"         .X. . . ..    . .      ",
+"        .X.  ..  ..      .      ",
+".. . . ..X.. .. .... . ..  .. . ",
+"ooooooo.X.ooo..ooo..oo ooooooooo",
+"oooo oo.X.ooo.ooooo..oooooooo oo",
+"o oooo.X.ooooooo ooo.ooooooooooo",
+"oooooo.X.ooooooooooooooo ooooooo",
+"ooo oo.X.ooo ooooooooooooooooooo",
+"oooooo.X.oooooooooo  oooooo  ooo",
+"ooooo.X.ooooooooooooooo  ooooooo",
+"o ooo.X.oooooo ooooooooooooooooo",
+"ooooo.X.oooo  o  ooooooooo ooooo",
+"ooooo.X.ooooooooooo oooo  o  ooo",
+"oo....X...ooooooo  o  oooooooooo",
+"o..XX...XX..ooo.o.oo.oo oooooooo",
+".XX.XX..X.XX...ooo.oo  o  oooooo",
+"X.XX.XXXXXXXXXX..oooo.o.oooooo o",
+".................o.o oo.oooo  o ",
+"oooooo ooo.oo oo.o  .  ooooooooo",
+"oooo  o  oo  o  oooooooooooooooo"};
diff --git a/etc/gnus/gnus-group-get-new-news-this-group-up.xbm b/etc/gnus/gnus-group-get-new-news-this-group-up.xbm
new file mode 100644 (file)
index 0000000..2f354f4
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x20,0x00,0x40,0x88,0xff,0x57,0x15,0x22,0x02,0x0c,0xa0,0x88,0x02,0xa4,0x0a,
+ 0x22,0x02,0x04,0xf0,0x84,0x03,0x54,0xdd,0x21,0x02,0x1e,0x14,0x97,0x02,0x66,
+ 0xcd,0x02,0x02,0x7c,0x14,0x2b,0x03,0x9c,0xad,0x41,0x02,0x54,0xb1,0x0a,0x02,
+ 0x2c,0xff,0x47,0x02,0xe4,0x14,0x2d,0xff,0x4f,0xa5,0x0a,0x48,0xa0,0x4a,0xb4,
+ 0x12,0x0a,0x51,0x1b,0x40,0xa1,0x96,0x36,0x2a,0x10,0x4a,0x56,0x80,0x4a,0x57,
+ 0x1b,0x55,0x00,0x92,0x52,0x00,0x55,0x26,0x17,0xa9,0x00,0xab,0x5a,0x04,0x2a,
+ 0xfe,0x1f,0x41,0x41,0xcb,0x48,0x14,0x14,0x95,0x2f,0x82,0x42,0x53,0x09,0x28,
+ 0x08,0xa5,0xaf,0x84,0xa2,0x75,0x06,0x12,0x04,0xd3,0x54,0x40,0x51,0xdf,0x0f,
+ 0x0a,0x82,0xae,0x23,0xa0,0x28,0x8a,0x4a};
diff --git a/etc/gnus/gnus-group-get-new-news-this-group-up.xpm b/etc/gnus/gnus-group-get-new-news-this-group-up.xpm
new file mode 100644 (file)
index 0000000..918fd2e
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-get-new-news-this-group_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+" ..........                     ",
+" .XXXXXXXX.                     ",
+" .XXXXXXXX.                     ",
+" .XXXXXXXX.         ....        ",
+" .XXXXXXXX.        .oooo.       ",
+" .XXXXXXX....     .oooooo.      ",
+" .XXXXXXX..  .    .oooooo.      ",
+" .XXXXXXXX...o.   .oooooo.      ",
+" .XXXXXXXX..ooo.   .oooo.       ",
+" .XXXXXXXX. .ooo.   .oo.        ",
+" .XXXXXXXX.  .ooo.....o....     ",
+" .XXXXXXXX.   .oooooooooooo.    ",
+" ..........   .oooooooooooo.    ",
+"               .oooooooooooo.   ",
+"                .oooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 .ooooooo.oo.   ",
+"                 ............   ",
+"                .oooooo.   .    ",
+"                .ooooooo.. .    ",
+"                .ooooooo.  .    ",
+"                .oooo.oo...     ",
+"                .oooo.oooo.     ",
+"                .ooo. .ooo.     ",
+"                ..... .....     ",
+"                 .o.   .o.      ",
+"                 .o.   .o.      "};
diff --git a/etc/gnus/gnus-group-get-new-news-up.xbm b/etc/gnus/gnus-group-get-new-news-up.xbm
new file mode 100644 (file)
index 0000000..bea7a56
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x81,0x00,0x08,0xff,0x2b,0xa8,0x42,0x01,0x42,0x05,0x14,0x01,0x16,0x50,
+ 0x41,0x01,0xa2,0x7a,0x0a,0x01,0x0a,0xcc,0x40,0x01,0xaf,0x92,0x15,0x01,0x13,
+ 0x56,0x43,0x01,0xbe,0x2a,0x09,0x01,0x6e,0xcc,0x52,0x01,0xca,0x69,0x80,0x01,
+ 0x32,0xdf,0x2b,0x01,0x66,0x55,0x85,0xff,0x33,0xa9,0x2e,0x24,0xc9,0x92,0x88,
+ 0x09,0x82,0x4a,0x2e,0xa0,0x28,0xfd,0xf9,0x14,0x42,0x07,0x8d,0x42,0x08,0x85,
+ 0x8d,0x20,0x52,0x87,0x85,0x8a,0x80,0x45,0x86,0x20,0x2a,0xc7,0x82,0x8a,0x00,
+ 0xe7,0x82,0x41,0xd4,0x15,0x81,0x14,0x81,0xe6,0x81,0x81,0xa8,0x3d,0xff,0x14,
+ 0x82,0xfa,0x02,0x42,0xd1,0x52,0x57,0x08,0x8a,0xad,0x82,0xa2,0xa0,0xef,0x2b,
+ 0x04,0x05,0x55,0x81,0x51,0x50,0xc7,0x2b};
diff --git a/etc/gnus/gnus-group-get-new-news-up.xpm b/etc/gnus/gnus-group-get-new-news-up.xpm
new file mode 100644 (file)
index 0000000..d324784
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-get-new-news_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+"..........                      ",
+".XXXXXXXX.                      ",
+".XXXXXXXX.                      ",
+".XXXXXXXX.         ....         ",
+".XXXXXXXX.        .oooo.        ",
+".XXXXXXX....     .oooooo.       ",
+".XXXXXXX..  .    .oooooo.       ",
+".XXXXXXXX...o.   .oooooo.       ",
+".XXXXXXXX..ooo.   .oooo.        ",
+".XXXXXXXX. .ooo.   .oo.         ",
+".XXXXXXXX.  .ooo.....o....      ",
+".XXXXXXXX.   .oooooooooooo.     ",
+"..........   .oooooooooooo.     ",
+"              .oooooooooooo.    ",
+"               .ooooooooooo.    ",
+"                .o.......oo.....",
+"                .o.XXXXX.oo.XXX.",
+"                .o.XXXX.ooo.XXX.",
+"                .o.XXXX.oo.XXXX.",
+"                .o.XXX.ooo.XXXX.",
+"                .o.XXX.oo.XXXXX.",
+"                ...XX...o.XXXXX.",
+"               .oo.X.   .XXXXXX.",
+"               .oo.XX.. .XXXXXX.",
+"               .oo....  ........",
+"               .oooo.o..o.      ",
+"               .oooo.oooo.      ",
+"               .ooo. .ooo.      ",
+"               ..... .....      ",
+"                .o.   .o.       ",
+"                .o.   .o.       "};
diff --git a/etc/gnus/gnus-group-kill-group-up.xbm b/etc/gnus/gnus-group-kill-group-up.xbm
new file mode 100644 (file)
index 0000000..8c3526d
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x04,0x20,0x20,0x54,0xa1,0x0a,0x4a,0x02,0x0a,0x50,0x01,0xa0,0x40,0x05,
+ 0x54,0xca,0xff,0x7f,0x00,0x50,0x00,0x60,0x55,0x42,0x00,0xa0,0x80,0x68,0xc0,
+ 0x21,0x2b,0x42,0xe0,0xe3,0x83,0x50,0xb0,0x06,0x2a,0x4a,0xf0,0x07,0x42,0x60,
+ 0x70,0x07,0x16,0x42,0xe0,0x03,0x42,0x68,0x40,0x01,0x2a,0x42,0x40,0x01,0x82,
+ 0x50,0xc8,0x05,0x2a,0x4a,0x0c,0x0c,0x82,0x60,0x30,0x03,0x2a,0x4a,0xc0,0x00,
+ 0x82,0x40,0xc0,0x00,0x2a,0x6a,0x30,0x03,0x42,0x41,0x0c,0x0c,0x16,0x54,0x08,
+ 0x04,0x22,0x41,0x00,0x00,0x4a,0x54,0x00,0x00,0x02,0x41,0x00,0x00,0x56,0x54,
+ 0x00,0x00,0x02,0x42,0x00,0x00,0x52,0xe8,0xff,0xff,0x0b,0x04,0x84,0x00,0x42,
+ 0x52,0x11,0xaa,0x28,0x00,0xa4,0x04,0x04};
diff --git a/etc/gnus/gnus-group-kill-group-up.xpm b/etc/gnus/gnus-group-kill-group-up.xpm
new file mode 100644 (file)
index 0000000..e728bf5
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-killfile_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"      ................          ",
+"      .XXXXXXXXXXXXXX..         ",
+"      .XXXXXXXXXXXXXX.X.        ",
+"      .XXXXXXX...XXXX.XX.       ",
+"      .XXXXXX.....XXX.....      ",
+"      .XXXXX..X.X..XXXXXX.      ",
+"      .XXXXX.......XXXXXX.      ",
+"      .XXXXX...X...XXXXXX.      ",
+"      .XXXXXX.....XXXXXXX.      ",
+"      .XXXXXXX.X.XXXXXXXX.      ",
+"      .XXXXXXX.X.XXXXXXXX.      ",
+"      .XXXX.XX...X.XXXXXX.      ",
+"      .XXX..XXXXXX..XXXXX.      ",
+"      .XXXXX..XX..XXXXXXX.      ",
+"      .XXXXXXX..XXXXXXXXX.      ",
+"      .XXXXXXX..XXXXXXXXX.      ",
+"      .XXXXX..XX..XXXXXXX.      ",
+"      .XXX..XXXXXX..XXXXX.      ",
+"      .XXXX.XXXXXX.XXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      ....................      ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-group-subscribe-up.xbm b/etc/gnus/gnus-group-subscribe-up.xbm
new file mode 100644 (file)
index 0000000..98819e5
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x04,0x00,0x40,0x22,0x51,0x55,0x15,0x88,0x04,0x00,0x20,0x22,0xa0,0xaa,
+ 0x4a,0xc4,0xff,0x3f,0x00,0x61,0x80,0x60,0x55,0x54,0x8a,0xa0,0x80,0x42,0x84,
+ 0x20,0x2b,0x68,0x8a,0xe0,0x83,0x42,0x80,0x00,0x2a,0xd4,0xff,0x00,0x42,0x41,
+ 0x80,0x00,0x16,0x54,0x8a,0x00,0x42,0x41,0x84,0x00,0x2a,0x54,0x8a,0x00,0x82,
+ 0x41,0x80,0x00,0x2a,0xd4,0xff,0x00,0x82,0x42,0x80,0x00,0x2a,0x68,0x8a,0x00,
+ 0x82,0x44,0x84,0x00,0x2a,0x52,0x8a,0x00,0x42,0x40,0x80,0x00,0x16,0xea,0xff,
+ 0x00,0x22,0x40,0x80,0x00,0x4a,0x4a,0x80,0x00,0x02,0x61,0x80,0x00,0x56,0x44,
+ 0x80,0x00,0x02,0x51,0x80,0x00,0x52,0xc4,0xff,0xff,0x0b,0xa1,0x04,0x00,0x42,
+ 0x14,0xa8,0xaa,0x88,0x82,0x02,0x00,0x22};
diff --git a/etc/gnus/gnus-group-subscribe-up.xpm b/etc/gnus/gnus-group-subscribe-up.xpm
new file mode 100644 (file)
index 0000000..15f7d43
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-unsubscribe_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"      ................          ",
+"      .XXXXXXXX.XXXXX..         ",
+"      .XX.X.XXX.XXXXX.X.        ",
+"      .XXX.XXXX.XXXXX.XX.       ",
+"      .XX.X.XXX.XXXXX.....      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXX.XXXX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXX.XXXX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      ....................      ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-group-unsubscribe-up.xbm b/etc/gnus/gnus-group-unsubscribe-up.xbm
new file mode 100644 (file)
index 0000000..9edc6b8
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x04,0x00,0x40,0x22,0x51,0x55,0x15,0x88,0x04,0x00,0x20,0x22,0xa0,0xaa,
+ 0x4a,0xc4,0xff,0x3f,0x00,0x61,0x80,0x60,0x55,0x54,0xa0,0xa0,0x80,0x42,0x90,
+ 0x20,0x2b,0x68,0x8a,0xe0,0x83,0x42,0x84,0x00,0x2a,0xd4,0xff,0x00,0x42,0x41,
+ 0x80,0x00,0x16,0x54,0xa0,0x00,0x42,0x41,0x90,0x00,0x2a,0x54,0x8a,0x00,0x82,
+ 0x41,0x84,0x00,0x2a,0xd4,0xff,0x00,0x82,0x42,0x80,0x00,0x2a,0x68,0xa0,0x00,
+ 0x82,0x44,0x90,0x00,0x2a,0x52,0x8a,0x00,0x42,0x40,0x84,0x00,0x16,0xea,0xff,
+ 0x00,0x22,0x40,0x80,0x00,0x4a,0x4a,0x80,0x00,0x02,0x61,0x80,0x00,0x56,0x44,
+ 0x80,0x00,0x02,0x51,0x80,0x00,0x52,0xc4,0xff,0xff,0x0b,0xa1,0x04,0x00,0x42,
+ 0x14,0xa8,0xaa,0x88,0x82,0x02,0x00,0x22};
diff --git a/etc/gnus/gnus-group-unsubscribe-up.xpm b/etc/gnus/gnus-group-unsubscribe-up.xpm
new file mode 100644 (file)
index 0000000..7c7ce5b
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-subscribe_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"      ................          ",
+"      .XXXXXXXX.XXXXX..         ",
+"      .XXXXXX.X.XXXXX.X.        ",
+"      .XXXXX.XX.XXXXX.XX.       ",
+"      .XX.X.XXX.XXXXX.....      ",
+"      .XXX.XXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXX.X.XXXXXXXXX.      ",
+"      .XXXXX.XX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXX.XXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXX.X.XXXXXXXXX.      ",
+"      .XXXXX.XX.XXXXXXXXX.      ",
+"      .XX.X.XXX.XXXXXXXXX.      ",
+"      .XXX.XXXX.XXXXXXXXX.      ",
+"      ..........XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      .XXXXXXXX.XXXXXXXXX.      ",
+"      ....................      ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-pointer.xbm b/etc/gnus/gnus-pointer.xbm
new file mode 100644 (file)
index 0000000..94e9154
--- /dev/null
@@ -0,0 +1,6 @@
+#define noname_width 18
+#define noname_height 13
+static char noname_bits[] = {
+ 0x00,0x00,0x00,0xc0,0x0c,0x00,0xe0,0x1f,0x00,0x92,0x39,0x00,0x0e,0x71,0x02,
+ 0x46,0xe0,0x03,0x20,0xc0,0x01,0x00,0x08,0x00,0x10,0x0d,0x00,0xc4,0x08,0x00,
+ 0x78,0x08,0x00,0x18,0x89,0x00,0x00,0x08,0x00};
diff --git a/etc/gnus/gnus-pointer.xpm b/etc/gnus/gnus-pointer.xpm
new file mode 100644 (file)
index 0000000..c47443d
--- /dev/null
@@ -0,0 +1,22 @@
+/* XPM */
+static char *gnus-pointer[] = {
+/* width height num_colors chars_per_pixel */
+"    18    13        2            1",
+/* colors */
+". c #0000ff",
+"# c None s None",
+/* pixels */
+"##################",
+"######..##..######",
+"#####........#####",
+"#.##.##..##...####",
+"#...####.###...##.",
+"#..###.######.....",
+"#####.########...#",
+"###########.######",
+"####.###.#..######",
+"######..###.######",
+"###....####.######",
+"###..######.######",
+"###########.######"
+};
\ No newline at end of file
diff --git a/etc/gnus/gnus-summary-caesar-message-up.xbm b/etc/gnus/gnus-summary-caesar-message-up.xbm
new file mode 100644 (file)
index 0000000..0de8759
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x40,0x40,0x10,0x01,0x15,0x15,0x45,0x50,0x40,0x40,0x08,0x05,0x14,0x14,0xa2,
+ 0x50,0xe2,0xff,0x3f,0x82,0x48,0x00,0xe0,0x28,0x62,0xe6,0xb8,0x82,0x48,0x29,
+ 0x25,0x29,0x62,0xa9,0xe4,0x83,0x48,0x2f,0x05,0x2a,0x42,0xe9,0x38,0x42,0x60,
+ 0x00,0x00,0x16,0x4a,0x82,0x10,0x22,0x50,0x00,0x00,0x4a,0x42,0xcb,0x1c,0x02,
+ 0x68,0x2b,0x25,0x56,0x42,0x2d,0x1d,0x02,0x50,0x2d,0x05,0x52,0x4a,0xc9,0x04,
+ 0x0a,0x40,0x00,0x00,0x42,0x6a,0x18,0x00,0x16,0x41,0x3c,0x00,0x42,0x54,0xe6,
+ 0x3f,0x0a,0x41,0xe6,0x3f,0x52,0x54,0x3c,0x2a,0x06,0x42,0x18,0x2a,0x42,0x68,
+ 0x00,0x08,0x2a,0x44,0x00,0x00,0x06,0xd2,0xff,0xff,0x53,0x20,0x84,0x20,0x04,
+ 0x8a,0x10,0x8a,0xa8,0x20,0x4a,0x21,0x02};
diff --git a/etc/gnus/gnus-summary-caesar-message-up.xpm b/etc/gnus/gnus-summary-caesar-message-up.xpm
new file mode 100644 (file)
index 0000000..6f56aa9
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-rot13_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"      ................          ",
+"      .XXXXXXXXXXXXXX..         ",
+"      .XX..XX...XXX...X.        ",
+"      .X.XX.X.XX.X.XX.XX.       ",
+"      .X.XX.X.X.XX.XX.....      ",
+"      .X....X.XX.X.XXXXXX.      ",
+"      .X.XX.X...XXX...XXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XX.XXXXX.XXXX.XXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .X..X.XX..XX...XXXX.      ",
+"      .X..X.X.XX.X.XX.XXX.      ",
+"      .X.X..X.XX.X...XXXX.      ",
+"      .X.X..X.XX.X.XXXXXX.      ",
+"      .X.XX.XX..XX.XXXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      .XXXX..XXXXXXXXXXXX.      ",
+"      .XXX....XXXXXXXXXXX.      ",
+"      .XX..XX.........XXX.      ",
+"      .XX..XX.........XXX.      ",
+"      .XXX....XXX.X.X.XXX.      ",
+"      .XXXX..XXXX.X.X.XXX.      ",
+"      .XXXXXXXXXXXX.XXXXX.      ",
+"      .XXXXXXXXXXXXXXXXXX.      ",
+"      ....................      ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-cancel-article-up.xbm b/etc/gnus/gnus-summary-cancel-article-up.xbm
new file mode 100644 (file)
index 0000000..e8d8d68
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x11,0x11,0x01,0x11,0x54,0x4a,0xa9,0x52,0x82,0x10,0x04,0x08,0x28,0x24,0xa1,
+ 0x42,0x91,0x91,0x0f,0x19,0x25,0xaa,0xa9,0x44,0x88,0x60,0x18,0x11,0x42,0x1c,
+ 0x56,0x44,0x19,0x07,0x97,0x31,0x44,0x01,0x23,0x0a,0x12,0x81,0x60,0x50,0x80,
+ 0x02,0x42,0x05,0x3b,0x05,0x78,0x59,0x00,0x0a,0x56,0x12,0xaa,0xf4,0x05,0x41,
+ 0x00,0x54,0x51,0x10,0x5b,0x51,0x95,0x55,0x10,0x15,0x00,0x11,0x42,0x40,0x55,
+ 0x44,0x10,0x2a,0x00,0x21,0x5b,0x91,0x5b,0x95,0x80,0x24,0x00,0x21,0x12,0x92,
+ 0x2a,0x14,0x44,0x01,0x80,0x42,0x11,0xb5,0x35,0x19,0x54,0x11,0x08,0x42,0x02,
+ 0x44,0xa1,0x08,0xa8,0x22,0x14,0x52,0x11,0x99,0x51,0x11,0x4a,0x22,0x14,0x4a,
+ 0x20,0x89,0x42,0x10,0x15,0x40,0x20,0x45};
diff --git a/etc/gnus/gnus-summary-cancel-article-up.xpm b/etc/gnus/gnus-summary-cancel-article-up.xpm
new file mode 100644 (file)
index 0000000..fa7c639
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-cancel-post_xpm[] = {
+"32 32 4 1",
+"      c #000000000000",
+".     c #BFBFBFBFBFBF s backgroundToolBarColor",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+" ... ... ... ... ....... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ...    .... ... ...",
+"...............  XX ............",
+".............  XXXX  ...........",
+"...........  XXXX  X ...........",
+" ... ....  XXXXX   X ... ... ...",
+"........ XXXXXXX  XXX ..........",
+"........ XXXXXX oXXXX ..........",
+"........o XXXXXXXoXXXX .........",
+" ... ...oo XXXXXXXX    . ... ...",
+".........oo XXXXX  oooo.........",
+"..........oo     o..............",
+"..........ooooooo...............",
+" ... ... ... oo. ... ... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................"};
diff --git a/etc/gnus/gnus-summary-catchup-and-exit-up.xbm b/etc/gnus/gnus-summary-catchup-and-exit-up.xbm
new file mode 100644 (file)
index 0000000..4adec42
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x81,0x00,0x04,0x42,0x28,0x52,0x51,0x14,0x85,0x08,0x04,0x81,0x20,0x42,
+ 0x49,0x14,0x8a,0x08,0x20,0x41,0x21,0x52,0x15,0x14,0x44,0x00,0x40,0x41,0x91,
+ 0xbf,0x2a,0x14,0xda,0x10,0x80,0x81,0x94,0x90,0x2a,0x14,0x73,0xf0,0x80,0xe1,
+ 0x60,0x90,0x2b,0xc4,0x60,0x08,0x43,0xa2,0xf0,0x0f,0x15,0x88,0x11,0xfc,0x21,
+ 0xd2,0x11,0x8c,0x4a,0x80,0x12,0x84,0x00,0xd5,0x13,0x84,0x55,0x00,0x17,0x74,
+ 0x80,0x54,0xfb,0xcf,0x2a,0x02,0x9a,0x24,0x40,0x54,0x9f,0xbc,0x36,0xa9,0xf4,
+ 0x77,0x49,0x94,0x96,0x94,0xa4,0x25,0x95,0x35,0x15,0xa9,0xfe,0xbf,0xa4,0x92,
+ 0xdc,0x5c,0x29,0x4a,0x9e,0x3d,0x95,0xaa,0xfe,0x4f,0x52,0x24,0xf9,0xaf,0x4a,
+ 0xa9,0x52,0x91,0x94,0x25,0x29,0x55,0x52};
diff --git a/etc/gnus/gnus-summary-catchup-and-exit-up.xpm b/etc/gnus/gnus-summary-catchup-and-exit-up.xpm
new file mode 100644 (file)
index 0000000..a5d8ba6
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-catchup_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"               ......           ",
+"           ..  .XXXX.           ",
+"          .X.  .XXXX.           ",
+"        ..XX...XXXXX....        ",
+"      ..XXXXX..XXXXX.XX...      ",
+"      ..XXXXX..XXXX.XXXX..      ",
+"       .XXXX........XXXX.       ",
+"       ..XXX.XXXXX.......       ",
+"       ..XXX.XXXXX..XXX.        ",
+"       .X.XX.XXXXX.XXXX.        ",
+"       ...XX.XXXXX.XXXX.        ",
+"        ...X.XXXXX.X...         ",
+"         .X.........XX.         ",
+"         .  .XX.XX.XX.          ",
+"ooooooooo....XX.XX....oooooooooo",
+"oooooooooo. .......  .oooooooooo",
+"oooooooooo.X.XX.X .X.ooooooooooo",
+"oooooooooo. .X .  . .ooooooooooo",
+"oooooooooo...........ooooooooooo",
+"oooooooooo...X..XX...ooooooooooo",
+"oooooooooo...X ..X...ooooooooooo",
+"oooooooooo..........oooooooooooo",
+"oooooooooooo.......ooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-catchup-up.xbm b/etc/gnus/gnus-summary-catchup-up.xbm
new file mode 100644 (file)
index 0000000..ca093e1
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x11,0x91,0x11,0x95,0x54,0x25,0x54,0x21,0x02,0x90,0x00,0x84,0xa0,0x0a,0x54,
+ 0x29,0x1b,0xb1,0x11,0x91,0x40,0x0a,0x4a,0x25,0x8a,0xa0,0x20,0x88,0x20,0x14,
+ 0x0e,0x22,0x9b,0x51,0xb7,0x99,0x20,0x14,0x0b,0x02,0x42,0xc1,0x22,0x28,0x14,
+ 0x92,0x48,0x45,0x51,0x19,0x11,0x11,0x14,0x42,0xaa,0x54,0x42,0x88,0x00,0x02,
+ 0x90,0x72,0xaa,0x56,0x15,0x71,0x11,0x17,0x42,0x3a,0x49,0x4b,0x28,0x49,0xa4,
+ 0x22,0x04,0x30,0x02,0x09,0xb1,0xdb,0x59,0xb5,0x15,0xa0,0xd3,0xff,0x40,0x05,
+ 0xbf,0x02,0x2a,0xd3,0x08,0x54,0x91,0x53,0x77,0x7f,0xc8,0xa9,0xd4,0x8a,0x62,
+ 0x22,0x86,0x35,0xc8,0x5b,0x4b,0x67,0x93,0xfd,0x91,0x39,0x24,0x18,0xff,0x7a,
+ 0x90,0x46,0xc5,0xcf,0x25,0x94,0x21,0xf1};
diff --git a/etc/gnus/gnus-summary-catchup-up.xpm b/etc/gnus/gnus-summary-catchup-up.xpm
new file mode 100644 (file)
index 0000000..9de9baf
--- /dev/null
@@ -0,0 +1,37 @@
+/* XPM */
+static char * icon-catchup2_xpm[] = {
+"32 32 2 1",
+"      c #000000000000",
+".     c #BFBFBFBFBFBF s backgroundToolBarColor",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+".................  .............",
+" ... ... ... ...   . ... ... ...",
+"................  ..............",
+"............... ................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+".............  ..........  .....",
+" ... ... ...   . ... ...   . ...",
+"............  ..........  ......",
+"........... ........... ........",
+"............  .......... .......",
+" ... ... ... . . ... ... ... ...",
+"...............  .....          ",
+"................      ... ......",
+"........  ..... ... ...... .....",
+" ... ..   .. . . . .  .. .     .",
+".......  .... .... ... .. . ... ",
+"...... ...... ... .....  ... ...",
+"......    .. .... ......   .. ..",
+" ... ... .       ... ..  ..   ..",
+"........... ....      . ....   .",
+".......... ..... .....      .. .",
+".......... ..... ....... ...    "};
diff --git a/etc/gnus/gnus-summary-exit-up.xbm b/etc/gnus/gnus-summary-exit-up.xbm
new file mode 100644 (file)
index 0000000..4d55755
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x19,0x51,0x91,0x11,0x82,0x14,0x2a,0x48,0x28,0x42,0x40,0x25,0x82,0x10,0x15,
+ 0x00,0x59,0xfa,0xff,0x5b,0x12,0x4b,0xfe,0x21,0x40,0x21,0xf1,0x93,0x2a,0x0b,
+ 0xf8,0x05,0x91,0xb5,0xf2,0x31,0x24,0x01,0xf1,0x4b,0x12,0x54,0xfa,0x01,0x80,
+ 0x83,0xf0,0x55,0x5b,0x35,0xf2,0x11,0x00,0x8b,0xfe,0x4b,0x2a,0x21,0xf7,0x21,
+ 0x80,0x0b,0xf6,0x13,0x5b,0xb5,0xf4,0x59,0x10,0x03,0xf1,0x01,0x42,0x2b,0xf4,
+ 0x55,0x90,0x40,0xf3,0x03,0x13,0x1a,0xf8,0x59,0xa8,0x83,0xf2,0x11,0x02,0x2b,
+ 0x5c,0x43,0x50,0xe3,0xee,0x10,0x93,0xfc,0x55,0x5b,0x48,0x92,0x92,0x00,0x22,
+ 0x49,0x48,0xaa,0x08,0x00,0x84,0x00,0xb5,0xbb,0x31,0x5b,0x01,0x00,0x0a,0x00,
+ 0x54,0x25,0x51,0x55,0x01,0x48,0x04,0x00};
diff --git a/etc/gnus/gnus-summary-exit-up.xpm b/etc/gnus/gnus-summary-exit-up.xpm
new file mode 100644 (file)
index 0000000..d1ab26a
--- /dev/null
@@ -0,0 +1,37 @@
+/* XPM */
+static char * icon-exit-summary_xpm[] = {
+"32 32 2 1",
+"      c #000000000000",
+".     c #BFBFBFBFBFBF s backgroundToolBarColor",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................",
+" ... ......              ... ...",
+"........  .......        .......",
+"........ ...........     .......",
+"........  ..........     .......",
+" ... ... ... .......     ... ...",
+"................ ...     .......",
+"....................     .......",
+"........  ..........     .......",
+" ... ... ... .......     ... ...",
+"........  .......  .     .......",
+"........ .......   .     .......",
+"........  .......  .     .......",
+" ... ... ... .......     ... ...",
+"........  ..........     .......",
+"........ ...........     .......",
+"................ ...     .......",
+" ... ....... .......     ... ...",
+"........  ..........     .......",
+"........  ........   . . .......",
+"........ ....   . . . . ........",
+" ... .. ..       . . . . ... ...",
+"................................",
+"................................",
+"................................",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................................",
+"................................"};
diff --git a/etc/gnus/gnus-summary-followup-up.xbm b/etc/gnus/gnus-summary-followup-up.xbm
new file mode 100644 (file)
index 0000000..c6ba686
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x00,0x40,0x08,0xb6,0x76,0x37,0x63,0x20,0x02,0x00,0x04,0x8a,0x48,0x55,
+ 0x51,0x10,0x22,0x0e,0x82,0xa6,0xaa,0xa9,0x36,0x12,0x62,0x38,0x20,0xa0,0x18,
+ 0x96,0x4a,0x0a,0x07,0x17,0x00,0xa2,0x01,0xa3,0x76,0x6a,0x80,0x60,0x00,0x60,
+ 0x00,0x40,0x55,0x52,0x00,0x40,0x00,0xa6,0x00,0x80,0x6b,0x90,0xe1,0x80,0x04,
+ 0x24,0x9a,0x00,0x51,0x82,0x86,0x01,0x85,0xaa,0x61,0x01,0x32,0x60,0x70,0x01,
+ 0x42,0x1d,0x30,0x02,0x14,0x04,0x08,0x02,0x4c,0x06,0x00,0x02,0x28,0x06,0x00,
+ 0x04,0xac,0x08,0x00,0x08,0x0b,0x0a,0x00,0xc8,0x22,0x12,0x00,0x70,0x6a,0x1a,
+ 0x00,0x10,0x01,0x20,0x00,0x60,0x52,0x32,0x00,0x20,0x08,0x46,0x00,0x40,0x63,
+ 0x50,0x00,0x40,0x04,0x85,0x00,0x80,0x52};
diff --git a/etc/gnus/gnus-summary-followup-up.xpm b/etc/gnus/gnus-summary-followup-up.xpm
new file mode 100644 (file)
index 0000000..3cee12e
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-followup_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                ",
+"                 ...            ",
+" .   .   .   . ..XX. .   .   .  ",
+"             ..XXXX..           ",
+"           ..XXXX..X.           ",
+"         ..XXXXX...X.           ",
+" .   . ..XXXXXXX..XXX.   .   .  ",
+"     ..XXXXXXXX.XXXXX.          ",
+"      .XXXXXXXXXXXXXXX.         ",
+"      .XXXXXXXXXXXXXXX.         ",
+" .   . .XXXXXXXXXXXXXXX. .   .  ",
+"        .XXXX...XXXXXXX.        ",
+"         .X..XX.XXXXXXXX.       ",
+"         ..XXXX..XXXXXXX.       ",
+" .     ..XXXX..X.XXXXXXXX.   .  ",
+"     ..XXXXX...X.XXXXXXXX.      ",
+"   ..XXXXXXX..XXX.XXXXXXXX.     ",
+"  .XXXXXXXX.XXXXX.XXXXXXXX.     ",
+" ..XXXXXXXXXXXXXX.XXXXXXXXX. .  ",
+"  .XXXXXXXXXXXXXXX.XXXXXXX..    ",
+"   .XXXXXXXXXXXXXXX.XXXX..      ",
+"   .XXXXXXXXXXXXXXX.XX..        ",
+" .  .XXXXXXXXXXXXXXX..   .   .  ",
+"    .XXXXXXXXXXXXXXX.           ",
+"     .XXXXXXXXXXXXXXX.          ",
+"     .XXXXXXXXXXXXXXX.          ",
+" .    .XXXXXXXXXXXXXXX.  .   .  ",
+"      .XXXXXXXXXXXXXXX.         ",
+"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-followup-with-original-up.xbm b/etc/gnus/gnus-summary-followup-with-original-up.xbm
new file mode 100644 (file)
index 0000000..a0e6dfe
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x04,0x40,0x10,0x00,0xa3,0x36,0xa6,0x76,0x54,0x40,0x11,0x02,0x01,0x2a,0x88,
+ 0x48,0x54,0x81,0x22,0x22,0x22,0x6a,0xaa,0x2a,0x4a,0x02,0x21,0xa0,0x90,0x50,
+ 0x8e,0x0a,0x02,0x0a,0x27,0x50,0xb2,0xa2,0xab,0x26,0x42,0xaa,0x00,0x92,0x94,
+ 0x00,0xaa,0x20,0x00,0xaa,0x00,0x85,0xb6,0x22,0x76,0x32,0x20,0xea,0x80,0x44,
+ 0x8a,0x98,0x2a,0x11,0x10,0x87,0x00,0x44,0xa6,0x71,0x6b,0x33,0x60,0xcc,0x22,
+ 0x44,0x1d,0xe3,0x0a,0x11,0xc8,0xe0,0x24,0x44,0x3e,0x90,0x6c,0x2b,0x08,0x00,
+ 0x09,0xa0,0x06,0x00,0x49,0x0a,0x04,0x00,0x92,0x50,0x0b,0x00,0x32,0x26,0x0c,
+ 0x00,0xa4,0x90,0x11,0x00,0x24,0x24,0x14,0x00,0xc8,0x82,0x22,0x00,0x48,0x32,
+ 0x2a,0x00,0x90,0x42,0x50,0x00,0x90,0x28};
diff --git a/etc/gnus/gnus-summary-followup-with-original-up.xpm b/etc/gnus/gnus-summary-followup-with-original-up.xpm
new file mode 100644 (file)
index 0000000..baffb6b
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-followup-w-orig_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                ",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                 ..             ",
+"                ...             ",
+" .   .   .   .  ..   .   .   .  ",
+"               .                ",
+"                                ",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"             ..                 ",
+"           ..XX.                ",
+"         ..XXXX.                ",
+" .     ..XXX...X.    .   .   .  ",
+"     ..XXX..XX..X.              ",
+"   ..XXX..XXX...X.              ",
+"   .XX..XXXXX...XX.             ",
+" . ...XXXXXX.XX.XX.  .   .   .  ",
+"   .XXXXXXXXXXXX.XX.            ",
+"  .XXXXXXXXXXXXX.XX.            ",
+"  .XXXXXXXXXXXXXX.XX.           ",
+" . .XXXXXXXXXXXXX.XX.    .   .  ",
+"   .XXXXXXXXXXXXXX.XX.          ",
+"    .XXXXXXXXXXXXX.XX.          ",
+"    .XXXXXXXXXXXXXX.XX.         ",
+" .   .XXXXXXXXXXXXX.XX.  .   .  ",
+"     .XXXXXXXXXXXXXX.XX.        ",
+"      .XXXXXXXXXXXXX.XX.        "};
diff --git a/etc/gnus/gnus-summary-mail-copy-up.xbm b/etc/gnus/gnus-summary-mail-copy-up.xbm
new file mode 100644 (file)
index 0000000..a1eea6b
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x20,0x20,0x40,0xaa,0x8a,0x0a,0x15,0xfe,0xff,0xff,0x27,0x0e,0x00,0x80,
+ 0x4d,0x32,0x00,0x60,0x04,0xc2,0x00,0x18,0x54,0x02,0x03,0x06,0x04,0x03,0x8c,
+ 0x01,0x54,0x02,0x74,0x02,0x04,0x02,0x03,0x0c,0x54,0x82,0x00,0x10,0x84,0xf2,
+ 0xff,0xff,0x3f,0x52,0x00,0x00,0x6c,0x9b,0x01,0x00,0x23,0x16,0x06,0xc0,0x60,
+ 0x1e,0x18,0x30,0x20,0x14,0x60,0x0c,0xa0,0x11,0xa0,0x0b,0x20,0x14,0x10,0x30,
+ 0x60,0x11,0x0c,0x40,0x20,0x14,0x02,0x80,0xa0,0x12,0x01,0x00,0x23,0xd8,0x00,
+ 0x00,0x64,0x32,0x00,0x00,0x38,0xf8,0xff,0xff,0xbf,0x02,0x00,0x40,0x24,0x54,
+ 0x55,0x15,0x11,0x01,0x00,0x40,0x44,0x54,0x55,0x15,0x11,0x01,0x00,0x40,0x44,
+ 0x54,0x55,0x05,0x11,0x02,0x00,0x50,0x44};
diff --git a/etc/gnus/gnus-summary-mail-copy-up.xpm b/etc/gnus/gnus-summary-mail-copy-up.xpm
new file mode 100644 (file)
index 0000000..e73e6d5
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-mail-copy_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+" ..........................     ",
+" ...XXXXXXXXXXXXXXXXXXX..X.     ",
+" .XX..XXXXXXXXXXXXXXX..XXX.     ",
+" .XXXX..XXXXXXXXXXX..XXXXX.     ",
+" .XXXXXX..XXXXXXX..XXXXXXX.     ",
+" .XXXXXXXX..XXX..XXXXXXXXX.     ",
+" .XXXXXXXX.X...XX.XXXXXXXX.     ",
+" .XXXXXX..XXXXXXXX..XXXXXX.     ",
+" .XXXXX.XXXXXXXXXXXX.XXXXX.     ",
+" .XX..........................  ",
+" .XX.X.XXXXXXXXXXXXXXXXXXX..X.  ",
+" .X..XX..XXXXXXXXXXXXXXX..XXX.  ",
+" ..X.XXXX..XXXXXXXXXXX..XXXXX.  ",
+" ....XXXXXX..XXXXXXX..XXXXXXX.  ",
+"    .XXXXXXXX..XXX..XXXXXXXXX.  ",
+"    .XXXXXXXX.X...X.XXXXXXXXX.  ",
+"    .XXXXXXX.XXXXXXX..XXXXXXX.  ",
+"    .XXXXX..XXXXXXXXXX.XXXXXX.  ",
+"    .XXXX.XXXXXXXXXXXXX.XXXXX.  ",
+"    .XXX.XXXXXXXXXXXXXXX..XXX.  ",
+"    .X..XXXXXXXXXXXXXXXXXX.XX.  ",
+"    ..XXXXXXXXXXXXXXXXXXXXX...  ",
+"    ..........................  ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-delete-up.xbm b/etc/gnus/gnus-summary-mail-delete-up.xbm
new file mode 100644 (file)
index 0000000..9d1c637
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x00,0x80,0x00,0xa2,0xaa,0x2a,0x54,0x08,0x00,0x40,0x81,0xf2,0xab,0x2a,
+ 0x28,0x5c,0x03,0x80,0x82,0x2d,0x56,0xf5,0x28,0x84,0x06,0x98,0x8b,0x5d,0x5e,
+ 0xe7,0x2c,0x1c,0x1f,0x1f,0xba,0xf1,0xf3,0xa7,0xc9,0x44,0xa8,0x90,0x88,0xf1,
+ 0xf3,0x8b,0x08,0x1c,0x5f,0x7f,0x09,0xad,0x1e,0xff,0x08,0x04,0x46,0x08,0x04,
+ 0xae,0x26,0x06,0x04,0x18,0x8b,0x02,0x06,0xfa,0x23,0xc1,0x01,0x20,0x88,0x38,
+ 0x00,0x95,0x62,0x07,0x80,0x40,0xe4,0x00,0x40,0x14,0xd1,0x00,0x20,0x42,0x44,
+ 0x03,0x60,0x10,0x11,0x05,0x10,0x4a,0x44,0x1c,0xa8,0x00,0x11,0x61,0x0c,0x2a,
+ 0x42,0xa4,0x25,0x81,0x14,0x09,0x42,0x14,0x20,0x50,0x15,0xa1,0x4a,0x05,0x40,
+ 0x04,0x00,0xa8,0x0a,0x51,0x55,0x05,0x50};
diff --git a/etc/gnus/gnus-summary-mail-delete-up.xpm b/etc/gnus/gnus-summary-mail-delete-up.xpm
new file mode 100644 (file)
index 0000000..932d8f2
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-mail-delete_xpm[] = {
+"32 32 4 1",
+"      c #BEBEBEBEBEBE s backgroundToolBarColor",
+"X     c #000000000000",
+"o     c #E7E7E7E7E7E7",
+"O     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"    XXXXX                       ",
+"   XX   XX                      ",
+"  XX     XX          XXX        ",
+"  X       X        XXooXX  X    ",
+"  XX     XXX     XXooXX   XX    ",
+"   XX   XXXXX   XXXXX    XOXXX  ",
+"    XXXXX   XXXXXX      XOOXOOXX",
+"             XOX       XOOOXOOOX",
+"    XXXXX   XXXXXX     XOOOXOOOO",
+"   XX   XXXXX   XXXXXX  XOOXOOOO",
+"  XX     XXX     XXXXXXXOOOXOOOO",
+"  X       X        XOOOOOOXOOOOO",
+"  XX     XX       XOOOOOOOXOOOOO",
+"   XX   XX       XOOOOOOOXXOOOOO",
+"    XXXXX       XOOOOOXXXOOOOOOO",
+"               XOOOXXXOOOOOOOOOO",
+"              XOXXXOOOOOOOOOOOOX",
+"             XXXOOOOOOOOOOOOOOX ",
+"              XXOOOOOOOOOOOOOX  ",
+"                XXOOOOOOOOOOOX  ",
+"                  XOOOOOOOOOX   ",
+"                   XXOOOOOOX    ",
+"                     XXOOOX     ",
+"                       XXOX     ",
+"                         X      ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-forward-up.xbm b/etc/gnus/gnus-summary-mail-forward-up.xbm
new file mode 100644 (file)
index 0000000..1b66f5b
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x10,0x42,0x80,0x20,0x84,0x10,0x2a,0x14,0x3a,0xa5,0x40,0x41,0x64,0x08,0x14,
+ 0x28,0xd6,0xa0,0x62,0x85,0x80,0x15,0xe8,0x20,0xca,0x41,0x39,0x8b,0xb0,0x2a,
+ 0x24,0x22,0xd2,0x86,0x12,0x86,0x58,0x24,0x11,0x2c,0xd2,0x8c,0x08,0x98,0x34,
+ 0x75,0x08,0x10,0x30,0x14,0x08,0x60,0x8a,0x0e,0x04,0x20,0x10,0x05,0xfc,0x7f,
+ 0x45,0x02,0x02,0x60,0x10,0x01,0x03,0x18,0xca,0xe0,0x01,0x44,0x20,0x3e,0x00,
+ 0x0a,0xf4,0x21,0x00,0x53,0x32,0x20,0x80,0x80,0x10,0x10,0x40,0x2a,0x2a,0x10,
+ 0xb0,0x80,0x60,0x10,0x28,0x2a,0xea,0x10,0x84,0x40,0x81,0x10,0x2a,0x14,0x94,
+ 0x11,0x41,0x21,0x21,0xca,0x2a,0x48,0x84,0xac,0x80,0x02,0x21,0x3d,0x54,0x50,
+ 0x14,0x84,0x00,0x05,0x42,0x21,0xaa,0x50};
diff --git a/etc/gnus/gnus-summary-mail-forward-up.xpm b/etc/gnus/gnus-summary-mail-forward-up.xpm
new file mode 100644 (file)
index 0000000..19db803
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-mail-forward_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"   ...                          ",
+"  .   .                         ",
+"  .   .               .         ",
+"       .             ...        ",
+"      ...          ...XX.       ",
+"     . . .        .XX.XXX.      ",
+"    .  .  .      .XX.XXXX..     ",
+"    . .   .     .XXX.XXXXX..    ",
+"    . .   .    .XXX.XXXXXXX.    ",
+"    ..    .  ..XXXX.XXXXXXXX.   ",
+"    .     . .XXXXXX.XXXXXXXXX.  ",
+"         . .XXXXXX.XXXXXXXXXX.  ",
+"          .XXXXXXX............. ",
+"         .XXXXXXX.XXXXXXXXXXX.  ",
+"        .XXXXXXX..XXXXXXXXX..   ",
+"      ..XXXXX....XXXXXXXXX.     ",
+"     .XXX.....XXXXXXXXXXX.      ",
+"     ....XXXX.XXXXXXXXXX.       ",
+"    ..XXXXXXX.XXXXXXXXX.        ",
+"    .XXXXXXX.XXXXXXXXX.         ",
+"     .XXXXXX.XXXXXXX..          ",
+"     ..XXXXX.XXXXXX.            ",
+"      ..XXXX.XXXXX.             ",
+"       .XXXX.XXXX.              ",
+"        .XXX.XXX.               ",
+"         .X.XX..                ",
+"          ..X.                  ",
+"          ...                   ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-get-up.xbm b/etc/gnus/gnus-summary-mail-get-up.xbm
new file mode 100644 (file)
index 0000000..0d0e212
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x48,0x00,0x11,0x02,0x12,0x54,0x84,0x50,0x40,0x81,0x50,0x82,0x2a,0x28,0x0a,
+ 0x28,0x80,0x42,0xa0,0x82,0xaa,0x13,0x3d,0x28,0x40,0x46,0xd4,0x42,0xb5,0x28,
+ 0x86,0x10,0x50,0xda,0x51,0x47,0x99,0xb0,0x09,0x13,0x14,0x50,0x01,0x45,0x21,
+ 0x18,0x82,0x21,0x74,0x4c,0xc7,0x94,0x81,0x13,0x78,0x02,0x94,0x44,0x05,0x29,
+ 0xf1,0xff,0xff,0x7f,0x74,0x00,0x00,0x2c,0x91,0x01,0x00,0x23,0x14,0x06,0xc0,
+ 0xa0,0x11,0x18,0x30,0x20,0x14,0x60,0x0c,0x60,0x12,0x90,0x0b,0x20,0x18,0x0c,
+ 0x30,0xa0,0x12,0x02,0x40,0x20,0x18,0x01,0x80,0xa0,0xd2,0x00,0x00,0x23,0x38,
+ 0x00,0x00,0x64,0x12,0x00,0x00,0x38,0xf8,0xff,0xff,0xbf,0x02,0x00,0x00,0x20,
+ 0xa8,0xaa,0xaa,0x8a,0x05,0x00,0x40,0x20};
diff --git a/etc/gnus/gnus-summary-mail-get-up.xpm b/etc/gnus/gnus-summary-mail-get-up.xpm
new file mode 100644 (file)
index 0000000..ffdb84c
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-mail-get_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"       ...         ...          ",
+"      .   .       .   .         ",
+"     .     .     .     .        ",
+"    .       . . .       ..      ",
+"    .       .. ..       ..      ",
+"    .XXXXXXX.   .XXXXXXX.       ",
+"     .XXXXX.     .XXXXX.        ",
+"     ..XXX..     ..XXX..        ",
+"       ...         ...          ",
+"                                ",
+"    ..........................  ",
+"    ...XXXXXXXXXXXXXXXXXXX..X.  ",
+"    .XX..XXXXXXXXXXXXXXX..XXX.  ",
+"    .XXXX..XXXXXXXXXXX..XXXXX.  ",
+"    .XXXXXX..XXXXXXX..XXXXXXX.  ",
+"    .XXXXXXXX..XXX..XXXXXXXXX.  ",
+"    .XXXXXXX.XX...X.XXXXXXXXX.  ",
+"    .XXXXX..XXXXXXXX..XXXXXXX.  ",
+"    .XXXX.XXXXXXXXXXXX.XXXXXX.  ",
+"    .XXX.XXXXXXXXXXXXXX.XXXXX.  ",
+"    .X..XXXXXXXXXXXXXXXX..XXX.  ",
+"    ..XXXXXXXXXXXXXXXXXXXX.XX.  ",
+"    .XXXXXXXXXXXXXXXXXXXXXX...  ",
+"    ..........................  ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-originate-up.xbm b/etc/gnus/gnus-summary-mail-originate-up.xbm
new file mode 100644 (file)
index 0000000..6d25e12
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x04,0x42,0x08,0x10,0xa1,0x10,0x42,0x05,0x14,0xa2,0xff,0xaf,0x01,0x89,0x00,
+ 0x14,0x54,0xa4,0x00,0x64,0x02,0xc1,0x00,0x3c,0xf8,0xff,0x1f,0xa0,0x6d,0x10,
+ 0x68,0x20,0xf8,0xff,0x1f,0x60,0x12,0x84,0x00,0x20,0x48,0xd1,0x00,0xa0,0x02,
+ 0x88,0xfc,0x21,0xfc,0xff,0x00,0x60,0x1e,0x80,0x6c,0x21,0x64,0x80,0x00,0xa0,
+ 0x86,0x81,0x00,0x20,0x04,0x86,0x00,0x60,0x05,0x98,0x00,0x20,0x04,0xe4,0x00,
+ 0xa0,0x06,0x83,0x80,0x25,0x84,0x80,0x00,0x60,0x46,0x80,0x00,0x20,0x34,0x80,
+ 0x00,0xa0,0x0d,0x80,0xff,0x3f,0x04,0x00,0x00,0x2e,0xfe,0xff,0xff,0x4f,0x48,
+ 0x92,0x44,0x12,0x92,0x08,0x11,0x44,0x00,0x21,0x44,0x11,0x55,0x48,0x21,0x44,
+ 0x80,0x02,0x8a,0x10,0x2a,0xa8,0x40,0x44};
diff --git a/etc/gnus/gnus-summary-mail-originate-up.xpm b/etc/gnus/gnus-summary-mail-originate-up.xpm
new file mode 100644 (file)
index 0000000..8ba8bc2
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-mail-originate_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"               .............    ",
+"               .XXXXXXXXXX.X.   ",
+"               .XXXXXXXXXX.XX.  ",
+"               .XXXXXXXXXX....  ",
+"   ..................XXXXXXXX.  ",
+"   .X. X X X X X X .X..XXXXXX.  ",
+"   ..................XXXXXXXX.  ",
+"               .XXXXXXXXXXXXX.  ",
+"               .XXXXXXXXXXXXX.  ",
+"               .XX.......XXXX.  ",
+"  ..............XXXXXXXXXXXXX.  ",
+"  ...XXXXXXXXXX.XX..X..X.XXXX.  ",
+"  .XX..XXXXXXXX.XXXXXXXXXXXXX.  ",
+"  .XXXX..XXXXXX.XXXXXXXXXXXXX.  ",
+"  .XXXXXX..XXXX.XXXXXXXXXXXXX.  ",
+"  .XXXXXXXX..XX.XXXXXXXXXXXXX.  ",
+"  .XXXXXXX.XX...XXXXXXXXXXXXX.  ",
+"  .XXXXX..XXXXX.XXXXXXX..X.XX.  ",
+"  .XXXX.XXXXXXX.XXXXXXXXXXXXX.  ",
+"  .XXX.XXXXXXXX.XXXXXXXXXXXXX.  ",
+"  .X..XXXXXXXXX.XXXXXXXXXXXXX.  ",
+"  ..XXXXXXXXXXX...............  ",
+"  .XXXXXXXXXXXXXXXXXXXXXX...    ",
+"  ..........................    ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-reply-up.xbm b/etc/gnus/gnus-summary-mail-reply-up.xbm
new file mode 100644 (file)
index 0000000..e16ec66
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x40,0x40,0x20,0xaa,0x2a,0x7a,0x0a,0x00,0x80,0x88,0x51,0xaa,0x2a,0x06,
+ 0x06,0x00,0xc0,0x05,0x58,0xaa,0x3a,0x12,0x08,0x00,0x0c,0x11,0x2c,0xaa,0x03,
+ 0x09,0x42,0xc0,0x80,0x04,0x06,0x35,0x40,0x04,0x57,0x98,0x49,0x80,0x18,0x3a,
+ 0x20,0x41,0x56,0xc8,0x10,0xc1,0x11,0x0c,0x93,0x60,0x50,0x0a,0x1c,0x18,0x90,
+ 0x08,0x30,0x06,0x30,0x0a,0xc8,0x05,0x90,0x08,0x06,0x18,0x30,0x0a,0x01,0x20,
+ 0x10,0x88,0x00,0x40,0x50,0x6a,0x00,0x80,0x11,0x19,0x00,0x00,0x52,0x0c,0x00,
+ 0x00,0x1c,0xf9,0xff,0xff,0x5f,0x44,0x44,0x44,0x24,0x11,0x11,0x11,0x09,0x44,
+ 0x44,0x44,0xa0,0x11,0x11,0x11,0x15,0x44,0x44,0x44,0x40,0x11,0x11,0x91,0x14,
+ 0x44,0x44,0x04,0xa2,0x11,0x22,0xa2,0x08};
diff --git a/etc/gnus/gnus-summary-mail-reply-up.xpm b/etc/gnus/gnus-summary-mail-reply-up.xpm
new file mode 100644 (file)
index 0000000..20fe672
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-mail-reply_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+"                    ...         ",
+"                   .XXX..       ",
+"                  .XXXXXX..     ",
+"              ... .XXXXXXXX.    ",
+"            ..XXX.XX.XXXXXX.    ",
+"          ..XXXX.XXX.XXXXX.     ",
+"        ..XXXXXX.XX.XXXXX.      ",
+"      ..XXXXXXX.XX.XXXXXX.      ",
+"     .XXXXXXXX.XXX.XXXXX...     ",
+"   ..XX..XX.XX.XXXXXXXX.XXX..   ",
+"   ...XXXXXXX.XX.XXXXX.XX..X.   ",
+"   .XX..XXXX.XXX.XXXXX...XXX.   ",
+"   .XXXX..XX.XX.XXXXX..XXXXX.   ",
+"   .XXXXXX...XXXXXX..XXXXXXX.   ",
+"   .XXXXXXXX..XXX..XXXXXXXXX.   ",
+"   .XXXXXXX.XX...X.XXXXXXXXX.   ",
+"   .XXXXX..XXXXXXXX..XXXXXXX.   ",
+"   .XXXX.XXXXXXXXXXXX.XXXXXX.   ",
+"   .XXX.XXXXXXXXXXXXXX.XXXXX.   ",
+"   .X..XXXXXXXXXXXXXXXX..XXX.   ",
+"   ..XXXXXXXXXXXXXXXXXXXX.XX.   ",
+"   .XXXXXXXXXXXXXXXXXXXXXX...   ",
+"   ..........................   ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-mail-save-up.xbm b/etc/gnus/gnus-summary-mail-save-up.xbm
new file mode 100644 (file)
index 0000000..0601dfb
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x10,0x10,0x00,0x55,0x45,0x45,0x55,0x00,0x10,0x08,0x00,0xd4,0xff,0xff,
+ 0x7f,0x82,0x03,0x00,0xf0,0xd0,0x0c,0x00,0x4c,0x82,0x30,0x00,0x43,0xd4,0xc0,
+ 0xc0,0x40,0x80,0x80,0x33,0xc0,0xaa,0x60,0xcc,0x40,0xc0,0x10,0x00,0x41,0x95,
+ 0x08,0x00,0x46,0xc0,0x06,0x00,0xd8,0xfe,0xff,0x0f,0x60,0x2c,0x00,0x0b,0x40,
+ 0x35,0x10,0xfd,0x7f,0x2c,0x02,0x2b,0x49,0x35,0x40,0x4d,0x12,0xac,0x00,0x0b,
+ 0xa0,0x35,0x00,0xad,0x0a,0x2c,0x24,0x09,0x90,0x2d,0x00,0x5d,0x25,0xf4,0xff,
+ 0x0b,0x80,0xa6,0x55,0xad,0x2a,0x4c,0xaa,0x08,0x40,0xf5,0xff,0x5d,0x15,0x6c,
+ 0x35,0x0b,0x20,0x66,0x37,0xab,0x4a,0x6c,0x2d,0x0d,0x00,0xb9,0x35,0x4b,0x55,
+ 0xf4,0xff,0x1f,0x80,0x01,0x40,0x80,0x2a};
diff --git a/etc/gnus/gnus-summary-mail-save-up.xpm b/etc/gnus/gnus-summary-mail-save-up.xpm
new file mode 100644 (file)
index 0000000..fd4824b
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * icon-save-mail_xpm[] = {
+"32 32 6 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"O     c #E5E5E5E5E5E5",
+"+     c #666666666666",
+"                                ",
+"                                ",
+"                                ",
+"       ........................ ",
+"       ...XXXXXXXXXXXXXXXXXX... ",
+"       .XX..XXXXXXXXXXXXXX..XX. ",
+"       .XXXX..XXXXXXXXXX..XXXX. ",
+"       .XXXXXX..XXXXXX..XXXXXX. ",
+"       .XXXXXXX...XX..XXXXXXXX. ",
+"       .XXXXX..XXX..XX..XXXXXX. ",
+"       .XXXX.XXXXXXXXXXX.XXXXX. ",
+"       .XXX.XXXXXXXXXXXXX..XXX. ",
+"       .X..XXXXXXXXXXXXXXXX..X. ",
+"  ..................XXXXXXXXX.. ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXXXX. ",
+"  .oo.OOOOOOOOOO.oo............ ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo............oo.            ",
+"  .oooooooooooooooo.            ",
+"  .oooooooooooooooo.            ",
+"  .oo............oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"   .o.+++++++.OO.oo.            ",
+"    ................            ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-next-unread-up.xbm b/etc/gnus/gnus-summary-next-unread-up.xbm
new file mode 100644 (file)
index 0000000..a6c17a9
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x10,0x20,0x00,0xa3,0x66,0xab,0x76,0x14,0x11,0x04,0x02,0x41,0x04,0xa1,
+ 0x48,0x14,0x51,0x1e,0x22,0x62,0xa6,0xa9,0x2a,0x0a,0x71,0x18,0xa0,0x40,0x18,
+ 0xb6,0x0a,0x8a,0x06,0x17,0x50,0xb2,0x01,0x63,0x27,0x62,0x80,0x20,0x90,0x50,
+ 0x00,0x40,0x25,0x4a,0x00,0x40,0x80,0xe2,0x00,0x80,0x36,0x12,0xe1,0x80,0x41,
+ 0x84,0x9a,0x00,0x29,0x10,0x87,0x01,0x85,0xa6,0x61,0x01,0x32,0x62,0x70,0x01,
+ 0x42,0x18,0x30,0x02,0x14,0x06,0x08,0x02,0x4c,0x06,0x00,0x02,0x28,0x04,0x00,
+ 0x04,0xac,0xca,0x07,0x7c,0x0b,0x68,0x0d,0xea,0x20,0x1b,0x12,0x93,0x6b,0xb4,
+ 0x54,0x29,0x03,0x91,0xba,0x95,0x51,0x74,0x19,0x53,0x0b,0x6a,0x0a,0xd6,0x62,
+ 0xe0,0x07,0x7c,0x09,0x8a,0x00,0x80,0x42};
diff --git a/etc/gnus/gnus-summary-next-unread-up.xpm b/etc/gnus/gnus-summary-next-unread-up.xpm
new file mode 100644 (file)
index 0000000..e525816
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-next-unread_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                ",
+"                 ...            ",
+" .   .   .   . ..XX. .   .   .  ",
+"             ..XXXX..           ",
+"           ..XXXX..X.           ",
+"         ..XXXXX...X.           ",
+" .   . ..XXXXXXX..XXX.   .   .  ",
+"     ..XXXXXXXX.XXXXX.          ",
+"      .XXXXXXXXXXXXXXX.         ",
+"      .XXXXXXXXXXXXXXX.         ",
+" .   . .XXXXXXXXXXXXXXX. .   .  ",
+"        .XXXX...XXXXXXX.        ",
+"         .X..XX.XXXXXXXX.       ",
+"         ..XXXX..XXXXXXX.       ",
+" .     ..XXXX..X.XXXXXXXX.   .  ",
+"     ..XXXXX...X.XXXXXXXX.      ",
+"   ..XXXXXXX..XXX.XXXXXXXX.     ",
+"  .XXXXXXXX.XXXXX.XXXXXXXX.     ",
+" ..XXXXXXXXXXXXXX.XXXXXXXXX. .  ",
+"  .XXXXXXXXXXXXXXX.XXXXXXX..    ",
+"   .XX.....XXXXXXX.....X..      ",
+"   .X.ooooo.XXXXX.oooo..        ",
+" .  .oXooooo.XXX.oXooooo..   .  ",
+"    .ooooooo.X.X.ooooooo.       ",
+"    .ooooooo..X..ooooooo.       ",
+"    ..oooooo.XXX.ooooooo.       ",
+" .   ..oooo.XXXXX.oooo.. .   .  ",
+"      .....XXXXXXX.....         ",
+"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-post-news-up.xbm b/etc/gnus/gnus-summary-post-news-up.xbm
new file mode 100644 (file)
index 0000000..8eb4c33
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x10,0x10,0x01,0x6b,0xa7,0x66,0x72,0x04,0x10,0x02,0x05,0xa1,0x8a,0x50,
+ 0x48,0x04,0x20,0x8f,0x20,0x72,0xab,0x39,0x2b,0x02,0x64,0x58,0xa4,0x50,0x19,
+ 0x16,0x01,0x0a,0x06,0x57,0x54,0xe2,0x01,0x23,0x23,0x72,0x80,0x20,0x94,0x44,
+ 0x00,0x40,0x01,0x50,0x00,0xc0,0x54,0xa6,0x00,0x80,0x22,0x92,0x00,0x80,0x4a,
+ 0x40,0x01,0x00,0x11,0x8a,0x01,0x00,0x45,0x32,0x02,0x00,0x2a,0x42,0x02,0x00,
+ 0xa2,0x10,0x05,0x00,0x0c,0x4a,0x06,0x00,0x24,0x22,0x0a,0x00,0x68,0xaa,0x0c,
+ 0x00,0x0c,0x00,0x11,0x80,0x53,0x2a,0x14,0x40,0x05,0x22,0x23,0x70,0x62,0x92,
+ 0x34,0x0e,0x09,0x24,0xc0,0x4b,0x52,0x80,0x0a,0x21,0x80,0x6b,0x62,0xaa,0x36,
+ 0x04,0x15,0x01,0x42,0x51,0x80,0xa8,0x28};
diff --git a/etc/gnus/gnus-summary-post-news-up.xpm b/etc/gnus/gnus-summary-post-news-up.xpm
new file mode 100644 (file)
index 0000000..46be7c1
--- /dev/null
@@ -0,0 +1,38 @@
+/* XPM */
+static char * icon-post_xpm[] = {
+"32 32 3 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                ",
+"                 ...            ",
+" .   .   .   . ..XX. .   .   .  ",
+"             ..XXXX..           ",
+"           ..XXXX..X.           ",
+"         ..XXXXX...X.           ",
+" .   . ..XXXXXXX..XXX.   .   .  ",
+"     ..XXXXXXXX.XXXXX.          ",
+"      .XXXXXXXXXXXXXXX.         ",
+"      .XXXXXXXXXXXXXXX.         ",
+" .   . .XXXXXXXXXXXXXXX. .   .  ",
+"       .XXXXXXXXXXXXXXX.        ",
+"        .XXXXXXXXXXXXXXX.       ",
+"        .XXXXXXXXXXXXXXX.       ",
+" .   .   .XXXXXXXXXXXXXXX.   .  ",
+"         .XXXXXXXXXXXXXXX.      ",
+"          .XXXXXXXXXXXXXXX.     ",
+"          .XXXXXXXXXXXXXXX.     ",
+" .   .   . .XXXXXXXXXXXXXXX. .  ",
+"           .XXXXXXXXXXXXXX..    ",
+"            .XXXXXXXXXX...      ",
+"            .XXXXXXXXX.         ",
+" .   .   .   .XXXXXX..   .   .  ",
+"             .XXX...            ",
+"              ....              ",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-prev-unread-up.xbm b/etc/gnus/gnus-summary-prev-unread-up.xbm
new file mode 100644 (file)
index 0000000..6cf240e
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x08,0x08,0x40,0x20,0x23,0x63,0x2b,0x2b,0x54,0x14,0x24,0xa4,0x01,0x02,0x09,
+ 0x01,0x54,0xa9,0x2e,0x2a,0x22,0xa2,0xa9,0x62,0x4a,0x6a,0x18,0x12,0x90,0x18,
+ 0xb6,0x04,0x02,0x06,0x17,0x50,0xea,0x01,0x63,0x2b,0x64,0x80,0x20,0x44,0x51,
+ 0x00,0x40,0x21,0x44,0x00,0x40,0x8a,0xe2,0x00,0xc0,0x22,0x0a,0xe1,0xc0,0x2f,
+ 0xd0,0x9f,0x20,0x4d,0x42,0x87,0xb1,0x1a,0xea,0x61,0x15,0x72,0x60,0x70,0xbb,
+ 0x14,0x1d,0x30,0xb1,0x5a,0x04,0x08,0x22,0x0d,0x06,0x00,0xc2,0x6f,0x06,0x00,
+ 0x84,0x20,0x08,0x00,0x64,0x0a,0x0a,0x00,0x58,0x50,0x12,0x00,0x10,0x27,0x1a,
+ 0x00,0x50,0x90,0x20,0x00,0xa0,0x24,0x32,0x00,0x20,0x82,0x26,0x00,0xc0,0x32,
+ 0x40,0x00,0x40,0x44,0xaa,0x00,0x80,0x11};
diff --git a/etc/gnus/gnus-summary-prev-unread-up.xpm b/etc/gnus/gnus-summary-prev-unread-up.xpm
new file mode 100644 (file)
index 0000000..b2088fb
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-prev-unread_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+" .   .   .   .   .   .   .   .  ",
+"                                ",
+"                                ",
+"                 ...            ",
+" .   .   .   . ..XX. .   .   .  ",
+"             ..XXXX..           ",
+"           ..XXXX..X.           ",
+"         ..XXXXX...X.           ",
+" .   . ..XXXXXXX..XXX.   .   .  ",
+"     ..XXXXXXXX.XXXXX.          ",
+"      .XXXXXXXXXXXXXXX.         ",
+"      .XXXXXXXXXXXXXXX.         ",
+" .   . .XXXXXXXXXXXXXX.  .   .  ",
+"        .XXXX...XXXXXX.....     ",
+"       ...o..XX.XXXXX.oooo..    ",
+"      .oo..XXXX..XXX.oXooooo.   ",
+" .   .o..XXXX..X.X.X.ooooooo..  ",
+"     ..XXXXX...X..X..ooooooo.   ",
+"   ..XXXXXXX..XX.XXX.ooooooo.   ",
+"  .XXXXXXXX.XXXXX.XXX.oooo..    ",
+" ..XXXXXXXXXXXXXX.XXXX.....  .  ",
+"  .XXXXXXXXXXXXXXX.XXXX.        ",
+"   .XXXXXXXXXXXXXX.XX..         ",
+"   .XXXXXXXXXXXXXXX..           ",
+" .  .XXXXXXXXXXXXXXX.    .   .  ",
+"    .XXXXXXXXXXXXXXX.           ",
+"     .XXXXXXXXXXXXXXX.          ",
+"     .XXXXXXXXXXXXXXX.          ",
+" .   .XXXXXXXXXXXXXXXX.  .   .  ",
+"      .XXXXXXXXXXXXXXX.         ",
+"       .XXXXXXXXXXXXXXX.        "};
diff --git a/etc/gnus/gnus-summary-reply-up.xbm b/etc/gnus/gnus-summary-reply-up.xbm
new file mode 100644 (file)
index 0000000..61dad9a
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x10,0x00,0x11,0x88,0x45,0x55,0x84,0x22,0x08,0x80,0x10,0x88,0x42,0x55,0xa4,
+ 0x22,0x28,0x00,0x01,0x84,0x05,0x55,0x5a,0x21,0x50,0x00,0x35,0x8a,0x09,0xf5,
+ 0xc2,0x20,0x24,0x18,0x81,0x85,0x01,0x87,0x00,0x2a,0xd4,0x41,0x00,0x43,0x61,
+ 0x40,0x80,0x17,0x1c,0x20,0x80,0x58,0xb5,0x1a,0xc0,0x3f,0x0c,0x08,0x60,0xb0,
+ 0x75,0x08,0xb0,0x2e,0x84,0x04,0xb8,0xa1,0x06,0x03,0x4c,0x20,0x04,0x0c,0x36,
+ 0x60,0x06,0x10,0x0f,0x20,0x06,0x70,0x07,0x60,0x05,0xc8,0x09,0xa0,0x04,0x04,
+ 0x10,0xa0,0x06,0x02,0x20,0x60,0x85,0x01,0xc0,0xa0,0x44,0x00,0x00,0x61,0x25,
+ 0x00,0x00,0x22,0x1e,0x00,0x00,0xbc,0x0e,0x00,0x00,0x70,0xfd,0xff,0xff,0x3f,
+ 0x94,0x52,0x55,0x55,0x4a,0x29,0x22,0xa2};
diff --git a/etc/gnus/gnus-summary-reply-up.xpm b/etc/gnus/gnus-summary-reply-up.xpm
new file mode 100644 (file)
index 0000000..255f7a1
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-follow-up_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                   .            ",
+"                  .X..          ",
+"             ... .XXXX.         ",
+"           ..XXX.XXXXXX..       ",
+"         ..XXXX.XXXXXXXXX.      ",
+"       ..XXXXX.XXXXXXXXX..      ",
+"     ..XXXXXXX.XXXXXXXX....     ",
+"   ..XXXXXXXX.XXXXXXXXX.oXX..   ",
+"  .X..X.X.X..XXXXXXXXX..o...o.  ",
+"  ..XXXXXXX.XXXXXXXXX..ooXXX..  ",
+"  .X...XXXX.XXXXXXXX..ooX...X.  ",
+"  .XXXX.XX.XXXXXXXX..oX..XXXX.  ",
+"  .XXXXX..XXXXXXXX..oX.XXXXXX.  ",
+"  .XXXXXXX..XXXXX..X..XXXXXXX.  ",
+"oo.XXXXXXXXX.XXX....XXXXXXXXX.oo",
+"oo.XXXXXXXXX...X...XXXXXXXXXX.oo",
+"oo.XXXXXXXX.XX...XX.XXXXXXXXX.oo",
+"oo.XXXXXXX.XXXXXXXXX.XXXXXXXX.oo",
+"oo.XXXXXX.XXXXXXXXXXX.XXXXXXX.oo",
+"oo.XXXX..XXXXXXXXXXXXX..XXXXX.oo",
+"oo.XXX.XXXXXXXXXXXXXXXXX.XXXX.oo",
+"oo.XX.XXXXXXXXXXXXXXXXXXX.XXX.oo",
+"oo...XXXXXXXXXXXXXXXXXXXXX....oo",
+"oo..XXXXXXXXXXXXXXXXXXXXXXXX..oo",
+"oo............................oo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-reply-with-original-up.xbm b/etc/gnus/gnus-summary-reply-with-original-up.xbm
new file mode 100644 (file)
index 0000000..37b0d73
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x08,0x00,0x20,0xaa,0x82,0xaa,0x4a,0x00,0x54,0x00,0x00,0xaa,0x02,0x54,
+ 0x55,0x00,0xa8,0x07,0x00,0x54,0x85,0x5a,0x55,0x02,0x50,0x32,0x80,0x50,0x25,
+ 0xc2,0x2a,0x02,0x18,0x81,0x41,0x54,0x17,0x01,0x17,0x80,0x09,0xc1,0x23,0x75,
+ 0x04,0x3d,0x4f,0x18,0xc3,0x83,0x18,0x85,0x40,0xc0,0x61,0x4c,0x7c,0x60,0x30,
+ 0xf6,0x23,0xb0,0x6e,0x84,0x20,0x98,0x21,0x05,0x13,0x5c,0x20,0x04,0x1c,0x36,
+ 0x60,0x06,0x30,0x0f,0x60,0x06,0x70,0x07,0xa0,0x05,0xc8,0x09,0x20,0x06,0x04,
+ 0x10,0x60,0x04,0x02,0x20,0xa0,0x85,0x01,0xc0,0x20,0x46,0x00,0x00,0xa1,0x24,
+ 0x00,0x00,0x62,0x1e,0x00,0x00,0x7c,0x0d,0x00,0x00,0xb0,0xfc,0xff,0xff,0x3f,
+ 0x55,0x55,0x4a,0x55,0x24,0x89,0x52,0xa2};
diff --git a/etc/gnus/gnus-summary-reply-with-original-up.xpm b/etc/gnus/gnus-summary-reply-with-original-up.xpm
new file mode 100644 (file)
index 0000000..1135bfa
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-follow-up-incl_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                ...             ",
+"               .X.X.            ",
+"              .XX.XX..          ",
+"             .XXX.XXXX.         ",
+"           ..XXX.XXXXXX..       ",
+"         ..X.XXX.XXXXXXX..      ",
+"       ..XX.XXXX.XXXXX....      ",
+"     ..XXX.XXXXX.X....XX...     ",
+"   ..XXX..XXXX....XXXXX.oXX..   ",
+"  .XXXX.XXXXXX.XXXXXXX..oXXXo.  ",
+"  ..XX.XXX.....XXXXXX..ooXXX..  ",
+"  .X......XXX.XXXXXX..ooX...X.  ",
+"  .XXXX.XXXXX.XXXXX..oX..XXXX.  ",
+"  .XXXXX..XX.XXXXX..oX.XXXXXX.  ",
+"  .XXXXXXX...XXXX..X..XXXXXXX.  ",
+"oo.XXXXXXXXX..XX....XXXXXXXXX.oo",
+"oo.XXXXXXXXX...X...XXXXXXXXXX.oo",
+"oo.XXXXXXXX.XX...XX.XXXXXXXXX.oo",
+"oo.XXXXXXX.XXXXXXXXX.XXXXXXXX.oo",
+"oo.XXXXXX.XXXXXXXXXXX.XXXXXXX.oo",
+"oo.XXXX..XXXXXXXXXXXXX..XXXXX.oo",
+"oo.XXX.XXXXXXXXXXXXXXXXX.XXXX.oo",
+"oo.XX.XXXXXXXXXXXXXXXXXXX.XXX.oo",
+"oo...XXXXXXXXXXXXXXXXXXXXX....oo",
+"oo..XXXXXXXXXXXXXXXXXXXXXXXX..oo",
+"oo............................oo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo"};
diff --git a/etc/gnus/gnus-summary-save-article-file-up.xbm b/etc/gnus/gnus-summary-save-article-file-up.xbm
new file mode 100644 (file)
index 0000000..a14e003
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x20,0x08,0x08,0x82,0x8a,0x82,0xa2,0x20,0x20,0x14,0x04,0x15,0x14,0xfd,0xff,
+ 0x43,0x42,0x04,0x00,0x0d,0x10,0x05,0x00,0x49,0x22,0x06,0x00,0x31,0x88,0x04,
+ 0x00,0x1f,0x22,0x06,0x00,0x50,0x88,0x04,0x00,0x10,0x22,0x04,0x00,0xb0,0x88,
+ 0x06,0x00,0x10,0x22,0x04,0x00,0x50,0xfc,0xff,0x0f,0x10,0x36,0x00,0x0b,0xb0,
+ 0x2c,0x02,0x0d,0x10,0x34,0x10,0x0b,0x50,0x2d,0x00,0x0b,0x10,0x34,0x41,0x0d,
+ 0xb0,0x2d,0x08,0x09,0x10,0x34,0x00,0x0b,0x50,0x2d,0x01,0x0d,0x10,0xf4,0xff,
+ 0x0b,0xb0,0xad,0xda,0x0a,0x10,0x44,0x22,0x0d,0x50,0xf6,0xff,0xf9,0x1f,0x6c,
+ 0x3b,0x4b,0x52,0xb5,0x2d,0x1d,0x08,0x6c,0x35,0x4b,0xa1,0x6a,0x3b,0x29,0x14,
+ 0xf8,0xff,0x8f,0x40,0x02,0x40,0x2a,0x15};
diff --git a/etc/gnus/gnus-summary-save-article-file-up.xpm b/etc/gnus/gnus-summary-save-article-file-up.xpm
new file mode 100644 (file)
index 0000000..ea30122
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * icon-save-text_xpm[] = {
+"32 32 6 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"O     c #E5E5E5E5E5E5",
+"+     c #666666666666",
+"                                ",
+"                                ",
+"                                ",
+"          ................      ",
+"          .XXXXXXXXXXXXX.X.     ",
+"          .XXXXXXXXXXXXX.XX.    ",
+"          .XXXXXXXXXXXXX.XXX.   ",
+"          .XXXXXXXXXXXXX.....   ",
+"          .XXXXXXXXXXXXXXXXX.   ",
+"          .XXXXXXXXXXXXXXXXX.   ",
+"          .XXXXXXXXXXXXXXXXX.   ",
+"          .XXXXXXXXXXXXXXXXX.   ",
+"          .XXXXXXXXXXXXXXXXX.   ",
+"  ..................XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXX.   ",
+"  .oo............oo.XXXXXXXX.   ",
+"  .oooooooooooooooo.XXXXXXXX.   ",
+"  .oooooooooooooooo.XXXXXXXX.   ",
+"  .oo............oo..........   ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"   .o.+++++++.OO.oo.            ",
+"    ................            ",
+"                                "};
diff --git a/etc/gnus/gnus-summary-save-article-up.xbm b/etc/gnus/gnus-summary-save-article-up.xbm
new file mode 100644 (file)
index 0000000..94e51d1
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x10,0x81,0x04,0x01,0x45,0x28,0x40,0x50,0x88,0x42,0x15,0x05,0xa2,0xff,0xff,
+ 0x7f,0x88,0x03,0x00,0xf0,0xa2,0x0c,0x00,0x4c,0x88,0x30,0x00,0x43,0xc5,0xc0,
+ 0xc0,0x40,0x90,0x80,0x33,0xc0,0xa4,0x60,0xcc,0x40,0x82,0x10,0x00,0x41,0xd0,
+ 0x08,0x00,0x46,0x82,0x06,0x00,0xd8,0xfc,0xff,0x0f,0x60,0x2e,0x00,0x0d,0x40,
+ 0x34,0x02,0xfb,0x7f,0x36,0x10,0x0d,0x91,0xac,0x00,0x4b,0x24,0x34,0x00,0x2d,
+ 0x81,0x2d,0x48,0x4b,0x28,0x34,0x02,0x0d,0x85,0x2d,0x00,0xab,0x20,0xf4,0xff,
+ 0x0d,0x8a,0xa6,0xaa,0xaa,0x20,0x4c,0x55,0x0a,0x85,0xf5,0xff,0x5b,0x20,0x6c,
+ 0x35,0x8d,0x8a,0xad,0x36,0x2b,0x20,0xf4,0x2a,0x89,0x8a,0x6a,0x3b,0x5d,0x20,
+ 0xf8,0xff,0x0f,0x85,0x02,0x40,0xa2,0x20};
diff --git a/etc/gnus/gnus-summary-save-article-up.xpm b/etc/gnus/gnus-summary-save-article-up.xpm
new file mode 100644 (file)
index 0000000..fd4824b
--- /dev/null
@@ -0,0 +1,41 @@
+/* XPM */
+static char * icon-save-mail_xpm[] = {
+"32 32 6 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #999999999999",
+"O     c #E5E5E5E5E5E5",
+"+     c #666666666666",
+"                                ",
+"                                ",
+"                                ",
+"       ........................ ",
+"       ...XXXXXXXXXXXXXXXXXX... ",
+"       .XX..XXXXXXXXXXXXXX..XX. ",
+"       .XXXX..XXXXXXXXXX..XXXX. ",
+"       .XXXXXX..XXXXXX..XXXXXX. ",
+"       .XXXXXXX...XX..XXXXXXXX. ",
+"       .XXXXX..XXX..XX..XXXXXX. ",
+"       .XXXX.XXXXXXXXXXX.XXXXX. ",
+"       .XXX.XXXXXXXXXXXXX..XXX. ",
+"       .X..XXXXXXXXXXXXXXXX..X. ",
+"  ..................XXXXXXXXX.. ",
+"  .oo.OOOOOOOOOO.oo.XXXXXXXXXX. ",
+"  .oo.OOOOOOOOOO.oo............ ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo.OOOOOOOOOO.oo.            ",
+"  .oo............oo.            ",
+"  .oooooooooooooooo.            ",
+"  .oooooooooooooooo.            ",
+"  .oo............oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"  .oo.+++++++.OO.oo.            ",
+"   .o.+++++++.OO.oo.            ",
+"    ................            ",
+"                                "};
diff --git a/etc/gnus/gnus-uu-decode-uu-up.xbm b/etc/gnus/gnus-uu-decode-uu-up.xbm
new file mode 100644 (file)
index 0000000..705eb76
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x00,0x08,0x10,0x01,0xaa,0x42,0x45,0x54,0x00,0x14,0x10,0x01,0x55,0x41,0x45,
+ 0x50,0x00,0x0a,0x88,0x0a,0xaa,0xa0,0x22,0x40,0x80,0xff,0xff,0x17,0xaa,0x95,
+ 0x54,0x43,0x80,0x2a,0xa5,0x0a,0xaa,0xfd,0x7f,0x53,0xc0,0x06,0x40,0x06,0x94,
+ 0x04,0x40,0x43,0xc2,0x05,0xc0,0x2a,0x90,0x86,0xc0,0x06,0xa2,0x64,0x4b,0x53,
+ 0x88,0x96,0x44,0x06,0xd2,0x45,0xc0,0x52,0x84,0x25,0xc1,0x06,0x90,0xe6,0x41,
+ 0x53,0x8a,0x05,0x42,0x06,0xa0,0x06,0xc4,0x52,0x95,0x04,0xc0,0x06,0xc0,0x05,
+ 0x40,0x53,0x94,0x06,0x40,0x06,0xa2,0x05,0xc0,0x52,0x88,0xfc,0xff,0x06,0xa2,
+ 0x95,0x12,0x53,0x88,0x4a,0xa9,0x06,0xa2,0xff,0xff,0x53,0x90,0x10,0x00,0x04,
+ 0x42,0x42,0x55,0x50,0x14,0x28,0x80,0x0a};
diff --git a/etc/gnus/gnus-uu-decode-uu-up.xpm b/etc/gnus/gnus-uu-decode-uu-up.xpm
new file mode 100644 (file)
index 0000000..568315c
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-decode-view_xpm[] = {
+"32 32 4 1",
+"      c #BFBFBFBFBFBF s backgroundToolBarColor",
+".     c #000000000000",
+"X     c #999999999999",
+"o     c #FFFFFFFFFFFF",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"                                ",
+"       ...................      ",
+"       .XXXXXXXXXXXXXXXXX.      ",
+"       .XXXXXXXXXXXXXXXXX.      ",
+"       .XX.............XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.oooo.oooooo.XX.      ",
+"       .XX.oo..o..o.oo.XX.      ",
+"       .XX.o.oo.oo.ooo.XX.      ",
+"       .XX.ooo.ooooooo.XX.      ",
+"       .XX.oo.oo.ooooo.XX.      ",
+"       .XX.oo....ooooo.XX.      ",
+"       .XX.oooooo.oooo.XX.      ",
+"       .XX.ooooooo.ooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.ooooooooooo.XX.      ",
+"       .XX.............XX.      ",
+"       .XXXXXXXXXXXXXXXXX.      ",
+"       .XXXXXXXXXXXXXXXXX.      ",
+"       ...................      ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/etc/gnus/gnus-uu-post-news-up.xbm b/etc/gnus/gnus-uu-post-news-up.xbm
new file mode 100644 (file)
index 0000000..e0528e9
--- /dev/null
@@ -0,0 +1,12 @@
+#define noname_width 32
+#define noname_height 32
+static char noname_bits[] = {
+ 0x11,0x11,0x19,0x51,0x4a,0x95,0x82,0x14,0x20,0x40,0x29,0x42,0x0a,0xd5,0x86,
+ 0x10,0x31,0x31,0x3b,0x53,0x08,0x9d,0xe8,0x10,0xa2,0x43,0x82,0x4b,0x88,0xff,
+ 0xff,0x03,0xb3,0xaa,0x54,0xbb,0x88,0x55,0xaa,0x02,0xa2,0xfc,0x7f,0x4b,0x88,
+ 0x06,0xc0,0x12,0xb1,0x05,0x40,0x56,0x8a,0x05,0x40,0x03,0xd0,0x86,0xc0,0xaa,
+ 0x85,0x64,0x4b,0x06,0xb1,0x95,0xc4,0x32,0x8a,0x46,0x40,0x4b,0xd0,0x24,0x41,
+ 0x03,0x84,0xe6,0xc1,0x56,0xd9,0x05,0x42,0x12,0x82,0x04,0x44,0x4b,0x94,0x07,
+ 0xc0,0x22,0xc1,0x04,0x40,0x16,0x95,0x05,0xc0,0x52,0xa0,0x06,0x40,0x13,0x8a,
+ 0xfd,0xff,0x46,0xd0,0x94,0x52,0x12,0x93,0x29,0xa5,0x5a,0xa4,0xff,0xff,0x03,
+ 0x10,0x02,0x08,0x55,0x85,0xa8,0xa2,0x00};
diff --git a/etc/gnus/gnus-uu-post-news-up.xpm b/etc/gnus/gnus-uu-post-news-up.xpm
new file mode 100644 (file)
index 0000000..f4a7e3a
--- /dev/null
@@ -0,0 +1,39 @@
+/* XPM */
+static char * icon-post-pic_xpm[] = {
+"32 32 4 1",
+"      c #000000000000",
+".     c #BFBFBFBFBFBF s backgroundToolBarColor",
+"X     c #999999999999",
+"o     c #FFFFFFFFFFFF",
+" ... ... ... ... ... ... ... ...",
+"................................",
+"................ ...............",
+"..............  .  .............",
+" ... ... ...  .. ..  ... ... ...",
+"..........  .........  .........",
+"........  .............  .......",
+".......                   ......",
+" ... .. XXXXXXXXXXXXXXXXX .. ...",
+"....... XXXXXXXXXXXXXXXXX ......",
+"....... XX             XX ......",
+"....... XX ooooooooooo XX ......",
+" ... .. XX ooooooooooo XX .. ...",
+"....... XX ooooooooooo XX ......",
+"....... XX oooo oooooo XX ......",
+"....... XX oo  o  o oo XX ......",
+" ... .. XX o oo oo ooo XX .. ...",
+"....... XX ooo ooooooo XX ......",
+"....... XX oo oo ooooo XX ......",
+"....... XX oo    ooooo XX ......",
+" ... .. XX oooooo oooo XX .. ...",
+"....... XX ooooooo ooo XX ......",
+"....... XX ooooooooooo XX ......",
+"....... XX ooooooooooo XX ......",
+" ... .. XX ooooooooooo XX .. ...",
+"....... XX ooooooooooo XX ......",
+"....... XX             XX ......",
+"....... XXXXXXXXXXXXXXXXX ......",
+" ... .. XXXXXXXXXXXXXXXXX .. ...",
+".......                   ......",
+"................................",
+"................................"};
diff --git a/etc/gnus/gnus.xbm b/etc/gnus/gnus.xbm
new file mode 100644 (file)
index 0000000..58d1ac8
--- /dev/null
@@ -0,0 +1,622 @@
+#define noname_width 271
+#define noname_height 273
+static char noname_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05,
+ 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5,
+ 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,
+ 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4,
+ 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff,
+ 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42,
+ 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,
+ 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55,
+ 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49,
+ 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54,
+ 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52,
+ 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f,
+ 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9,
+ 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5,
+ 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff,
+ 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c,
+ 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94,
+ 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe,
+ 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a,
+ 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a,
+ 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe,
+ 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42,
+ 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a,
+ 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,
+ 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5,
+ 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54,
+ 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a,
+ 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55,
+ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a,
+ 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28,
+ 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff,
+ 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85,
+ 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff,
+ 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55,
+ 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff,
+ 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29,
+ 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f,
+ 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50,
+ 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2,
+ 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff,
+ 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff,
+ 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92,
+ 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff,
+ 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f,
+ 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48,
+ 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
+ 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1,
+ 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f,
+ 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff,
+ 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5,
+ 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5,
+ 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa,
+ 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40,
+ 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff,
+ 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff,
+ 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24,
+ 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff,
+ 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8,
+ 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa,
+ 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a,
+ 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92,
+ 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94,
+ 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff,
+ 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff,
+ 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97,
+ 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff,
+ 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85,
+ 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55,
+ 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff,
+ 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82,
+ 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf,
+ 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff,
+ 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0,
+ 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f,
+ 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4,
+ 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24,
+ 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5,
+ 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f,
+ 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff,
+ 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a,
+ 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff,
+ 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e,
+ 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05,
+ 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a,
+ 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4,
+ 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff,
+ 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff,
+ 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52,
+ 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff,
+ 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20,
+ 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff,
+ 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87,
+ 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a,
+ 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff,
+ 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff,
+ 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd,
+ 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55,
+ 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21,
+ 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff,
+ 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f,
+ 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f,
+ 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff,
+ 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6,
+ 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4,
+ 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08,
+ 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa,
+ 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff,
+ 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f,
+ 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5,
+ 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff,
+ 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f,
+ 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff,
+ 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,
+ 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1,
+ 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff,
+ 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14,
+ 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd,
+ 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b,
+ 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49,
+ 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a,
+ 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff,
+ 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54,
+ 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,
+ 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff,
+ 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa,
+ 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff,
+ 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4,
+ 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff,
+ 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,
+ 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff,
+ 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,
+ 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92,
+ 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff,
+ 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa,
+ 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2,
+ 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,
+ 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff,
+ 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14,
+ 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff,
+ 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf,
+ 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff,
+ 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff,
+ 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea,
+ 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff,
+ 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78,
+ 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff,
+ 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff,
+ 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,
+ 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5,
+ 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+ 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff,
+ 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,
+ 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa,
+ 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85,
+ 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff,
+ 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa,
+ 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2,
+ 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9,
+ 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03,
+ 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5,
+ 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f,
+ 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff,
+ 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc,
+ 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82,
+ 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5,
+ 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51,
+ 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f,
+ 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff,
+ 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff,
+ 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc,
+ 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3,
+ 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2,
+ 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff,
+ 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,
+ 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,
+ 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,
+ 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f};
diff --git a/etc/gnus/gnus.xpm b/etc/gnus/gnus.xpm
new file mode 100644 (file)
index 0000000..8783781
--- /dev/null
@@ -0,0 +1,284 @@
+/* XPM */
+static char *gnus[] = {
+/* width height num_colors chars_per_pixel */
+"   271   273        3            1",
+/* colors */
+". s thing c #bf9900",
+"# s shadow c #ffcc00",
+"a s background c None",
+/* pixels */
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........######aaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............#######aaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................######aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................######aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................#######aaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................#######aaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........................#######aaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................######aaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................######aaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............................#######aaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................#######aaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................aaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................#######aaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................#######aaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................aaaaaaaaaaaaaaaa....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................########aaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......................aaaaaaaaaaaaaa........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.................................#######aaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................aaaaaaaaaaa............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................########aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................aaaaaaaaa..............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................aaaaaaa................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............................aaaaa..................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......######.......................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................aaaa...................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#######aa....................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................aa.....................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaa.................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................a......................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaa................#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaa...............#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaa...............#######aaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaa..............#######aaaaa",
+"aaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaa..............#######aaaaa",
+"aaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa.............#######aaaaa",
+"aaaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............####....................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaa............########aaaaa",
+"aaaaaaa.........aaaaaaaaaaaaaaaaaaaaaaaaaaa.............########...................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaa...........########aaaaa",
+"aaaaaaa...........aaaaaaaaaaaaaaaaaaaaaaa.............############..................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaa...........########aaaaa",
+"aaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaa.............##############..................................................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaa...........########aaaaa",
+"aaaaaaaa...........aaaaaaaaaaaaaaaaaaaa............##################.......................##########................................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaa..........########aaaaa",
+"aaaaaaaa............aaaaaaaaaaaaaaaaaa............####################....................###############..............................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaa..........#######aaaaaa",
+"aaaaaaaa............aaaaaaaaaaaaaaaa..............#####################.................#####################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa..aaaaa###aaaaaaaaaaaaaaaaaa..........#######aaaaaa",
+"aaaaaaaa.............aaaaaaaaaaaaaa..............#######################...............#######################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa..aaaaa##aaaaaaaaaaaaaaaaaaa..........#######aaaaaa",
+"aaaaaaaaa.............aaaaaaaaaaa...............##########aa#############.............#########################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaa..........#######aaaaaa",
+"aaaaaaaaa.............aaaaaaaaa................#########aaaaaaa###########............##########################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
+"aaaaaaaaa................aaaa..................#######aaaaaaaaaa###########..........############################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
+"aaaaaaaaa.....................................######aaaaaaaaaaaaa###########.........#############################..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
+"aaaaaaaaa....................................######aaaaaaaaaaaaaaaa#########........###############################.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........########aaaaaa",
+"aaaaaaaaaa.................................#######aaaaaaaaaaaaaaaaaa#########.......#######aaaaaaaaaaa##############..........................aaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
+"aaaaaaaaaa................................#######aaaaaaaaaaaaaaaaaaaa########......#####aaaaaaaaaaaaaaaaa############..........................aaaaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
+"aaaaaaaaaa...............................########aaaaaaaaaaaaaaaaaaaaa########....#####aaaaaaaaaaaaaaaaaaaaa##########..........................aaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
+"aaaaaaaaa#..............................########aaaaaaaaaaaaaaaaaaaaaaaa#.####...#####aaaaaaaaaaaaaaaaaaaaaaa##########...........................aaaaaaaaaaaaaaaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#######aaaaaaa",
+"aaaaaaaaa#.............................########aaaaaaaaaaaaaaaaaaaaaaaaa...###..######aaaaaaaaaaaaaaaaaaaaaaaa##########...........................aaaaaaaaaaaaaaaaaaa......a#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
+"aaaaaaaa###...........................#########aaaaaaaaaaaaaaaaaaaaaaaa....##########aaaaaaaaaaaaaaaaaaaaaaaaaa##########............................aaaaaaaaaaaaaaa........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
+"aaaaaaaa###..........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....#########aaaaaaaaaaaaaaaaaaaaaaaaaaaa##########...............................aaaaaaaa...........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........########aaaaaaa",
+"aaaaaaaa###.........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....a#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaa##########................................................##aaaaaa...aaaaaaaaaaaaaaaaaaaaa......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
+"aaaaaaa####........................#########aaaaaaaaaaaaaaaaaaaaaaaaa....aaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...............................................##aaaaaa....aaaaaaaaaaaaaaaaaaa.......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
+"aaaaaaa####.......................########aaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########..............................................##aaaaa.....aaaaaaaaaaaaaaaaaa.......a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
+"aaaaaa######....................#########aaaaaaaaaaaaaaaaaaaaaaaaaa.....a#aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########............................................##aaaaaa......aaaaaaaaaaaaaaa.........a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
+"aaaaaa######...................#########aaaaaaaaaaaaaaaaaaaaaaaaaa......##aaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...........................................##aaaaa.......aaaaaaaaaaaaa..........aa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaa",
+"aaaaaa#######.................#########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a###aaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.........................................###aaaaa.........aaaaaaa..............a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........########aaaaaaaa",
+"aaaaaaa#######...............#########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########........................................##aaaaa...............................a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
+"aaaaaaa########............##########aaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.......................................##aaaaa...............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
+"aaaaaaaa##########.......###########aaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.....................................###aaaaa..............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#######aaaaaaaaa",
+"aaaaaaaaa##########################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########....................................##aaaaa...............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........########aaaaaaaaa",
+"aaaaaaaaa#########################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########..................................###aaaaa..............................#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
+"aaaaaaaaaa#######################aaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...............................####aaaaa..............................######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
+"aaaaaaaaaaa#####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.............................#####aaaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaa",
+"aaaaaaaaaaa###################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########...........................######aaaa..............................######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......########aaaaaaaaaa",
+"aaaaaaaaaaaa#################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########.........................######aaaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaaa",
+"aaaaaaaaaaaaa###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaa#########.......................#######aaaa.............................#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#######aaaaaaaaaaa",
+"aaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaa#########....................#########aaaa............................########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaaaaaaaaaaaaa#########..................#########aaaaa..........................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaaaaaaaaa###########.............###########aaaaa.........................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaa##############....###############aaaaaaa.......................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............aaaaaaaaaaaaaaa##############################aaaaaaaaa.....................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaaaaaaaaaaaa############################aaaaaaaaaaa...................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaa................aaaaaaaaaaaaaaaa##########################aaaaaaaaaaaa#................#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaa.................aaaaaaaaaaaaaaaa########################aaaaaaaaaaaaa##..............#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaa...................aaaaaaaaaaaaaaaa######################aaaaaaaaaaaaa#####.........###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaa....................aaaaaaaaaaaaaaaaa###################aaaaaaaaaaaaaaa########..##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaaaaa....................aaaaaaaaaaaaaaaaaaa################aaaaaaaaaaaaaaaa###########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaa......................aaaaaaaaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaa##########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa.......aaaaaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa........a###a.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaaaa........a####a.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#####aaaaaaaaaaaaaaaaaaaaaaaaaaa........a#####aaa.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....a####aaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaa#.....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaa##....................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaa..........######aaaaa#####..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a####aaaaaaaaaaaaaaaaaaaaaaaaa...........#####aaaaa#######..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaaa...........#####aaaaaa#######..................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaaa...........######aaaaa#########.................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaaa...........######aaaaa###########................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaa##########...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......####aaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaaaa#########...............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####aaaaaaaaaaaaaaaaaaaaaa............#######aaaaaaaaaaaa########..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......###aaaaaaaaaaaaaaaaaaaaa............#########aaaaaaaaaaaaa#######..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......###aaaaaaaaaaaaaaaaaaa.............#########aaaaaaaaaaaaaaa#######.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaaaa.............#########aaaaaaaaaaaaaaaaa######.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaa..............#########aaaaaaaaaaaaaaaaaaa#####.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaa...............#########aaaaaaaaaaaaaaaaaaaa#####.............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........aaaaaaaaaaaaa...............#########aaaaaaaaaaaaaaaaaaaaaa#####............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...............aaaaa..................########aaaaaaaaaaaaaaaaaaaaaaaaa####............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................................########aaaaaaaaaaaaaaaaaaaaaaaaaa####...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....................................########aaaaaaaaaaaaaaaaaaaaaaaaaaaa###...........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaa####..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa................................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa####aaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa............................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...........................#########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........................##########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......................###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...................############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#........#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##................#############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.......##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###............##############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####.........###############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######..###################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa########################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#.....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##################aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##############aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###########aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##..####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....a#aaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaa#######aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#aaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaa#######aa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#aaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaaa########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#aaaaaaaaaaaaaaaaaaaaa#####aaaaaaaaa########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#aaaaaaaaaaaaaaaaaaaa#######aaaaaaa#########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......##aaaaaaaaaaaaaaaaaaa########a..aa##########a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........##aaaaaaaaaaaaaaaaaa#########....##########a........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#aaaaaaaaaaaaaaaaaa#########......#########........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#aaaaaaaaaaaaaaaaaa#########......########a........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........##aaaaaaaaaaaaaaaaa#########.......#######.........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........##aaaaaaaaaaaaaaaaa########.........#####.........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........###aaaaaaaaaaaaaaaa########........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........###aaaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........###aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........####aaaaaaaaaaaaaaa#########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa#########......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......a######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa#######........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa########.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......a#######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaa#######.........a..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaa#######a........aaa............aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....aa######aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa#######........aaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaa#######a.......aaaaaaa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....aaa#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa######a........aaaaaaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaa#######........aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaa#######a......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaa#######.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaa#######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaa######aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaa######a.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaa#####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaa####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaa#####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaa####aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaa####aa.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaa###aaa......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaa####aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaa####aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaa###aaa.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaa###aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaa####aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaa###aaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaa###aaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaa....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa........#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa......#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...#####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.a####aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+};
+SIMPLE  =                    T                                                  BITPIX  =                    8                                                  NAXIS   =                    2                                                  NAXIS1  =                  271                                                  NAXIS2  =                  273                                                  HISTORY Written by XV 3.10a                                                     END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e½½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½ë\8e\8eëë½½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëë½½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëë½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëë½½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëë½½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëë½½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½\8e\8e½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½ëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½ëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½ëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½½ë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8eë½½½ë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½½\8e\8e½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëë½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëë½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½½½½\8e\8e\8e\8e½½½½½½½½½½½½½½½ëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëë½½½½½½½½½½½½½½½½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëë½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½ëëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½ëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e½½ëëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½ëëë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëë½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eë½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e½½½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e½½½\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëë½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëë½\8e½½½½\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëë½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëëëëëë½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eë½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëë½½½½½½½½\8e\8e\8e\8e\8e\8e½½½½½ëëëëëëëëëëëëëëëëë½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëë½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëë½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½ëëëëëëë½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½ëë½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëë½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë\8e\8eëëëëë½½ëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8eëëëëëë\8e\8eëëëëë½½½ëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8eëëë½½½½½ëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëë\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëë\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eë½½½½½½ëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½ëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëë½½½½½½ëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8eëë½½½½½½½ëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e½½½½½½\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e½½½½½½ëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\8e\8e\8eëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëë\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file
diff --git a/etc/smilies/frown.pbm b/etc/smilies/frown.pbm
new file mode 100644 (file)
index 0000000..f51ea4f
Binary files /dev/null and b/etc/smilies/frown.pbm differ
diff --git a/etc/smilies/smile.pbm b/etc/smilies/smile.pbm
new file mode 100644 (file)
index 0000000..f64e883
Binary files /dev/null and b/etc/smilies/smile.pbm differ
diff --git a/etc/smilies/wry.pbm b/etc/smilies/wry.pbm
new file mode 100644 (file)
index 0000000..5fa5e9f
Binary files /dev/null and b/etc/smilies/wry.pbm differ
index 46c0f9c..9033a5f 100644 (file)
+2000-12-31 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-decode-region): Don't backward-char.
+
+2000-12-25 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): elc is in the current directory.
+
+       * qp.el (quoted-printable-encode-region): Don't check multibyte in
+       XEmacs.
+
+2000-12-25  Simon Josefsson  <simon@josefsson.org>
+
+       * starttls.el: Sync with Emacs 21.
+
+2000-12-22 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-vm.el (gnus-summary-save-article-vm): Require gnus-art
+       before binding gnus-default-article-saver.
+
+       * gnus-sum.el (gnus-summary-save-article): 
+       (gnus-summary-pipe-output): 
+       (gnus-summary-save-article-mail): 
+       (gnus-summary-save-article-rmail): 
+       (gnus-summary-save-article-file): 
+       (gnus-summary-write-article-file): 
+       (gnus-summary-save-article-body-file): Ditto.
+
+       * gnus-mh.el (gnus-summary-save-article-folder): Ditto.
+
+2000-12-22 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * messagexmas.el (message-xmas-redefine): New function.
+
+       * message.el: Use it.
+
+       * gnus-art.el (gnus-article-check-hidden-text): Return t.
+
+       * gnus-util.el (gnus-remove-text-properties-when): Return t.
+
+2000-12-22 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in (install-el): New.
+
+2000-12-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-treat-dumbquotes): Quote \.
+
+2000-12-21 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treat-emphasize): Don't treat emphasis if
+       Emacs 20 runs on a terminal.
+
+2000-12-21 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (gnus-add-minor-mode): Autoload.
+
+       * message.el (message-forward): Save-restriction.
+
+2000-12-21  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (article-treat-dumbquotes): More doc, provided by
+       Paul Stevenson <p.stevenson@surrey.ac.uk>
+
+2000-12-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-mode-map): Use C-c C-n prefix.
+
+       * gnus.el (gnus-decode-rfc1522): Removed.
+       (gnus-set-text-properties): Define.
+
+2000-12-21 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-*): handle may be nil.
+
+       * gnus-sum.el (gnus-summary-mode): Turn on gnus-mailing-list-mode.
+
+       * gnus.el (gnus-group-remove-excess-properties): Not defined
+       in gnus-xmas.
+
+2000-12-20 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mail-user-agent): Add :version.
+
+2000-12-21  Miles Bader  <miles@gnu.org>
+
+       * message.el (message-mode): Set `comment-start' to the  yank prefix.
+
+2000-12-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mail-user-agent): New variable.
+       (message-setup): Renamed to message-setup-1. Support
+       mail-user-agent.
+       (message-mail-user-agent): New function.
+       (message-mail): Use it.
+       (message-reply): Use it.
+       (message-resend): Use it.
+       (message-mail-other-window): Use it.
+       (message-mail-other-frame): Use it.
+
+2000-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-tool-bar-map): Simplify.
+       (message-narrow-to-head-1): New function.
+       (message-narrow-to-head): Use it.
+       (message-reply): Ditto.
+       (message-cancel-news): Ditto.
+       (message-supersede): Ditto.
+       (message-make-forward-subject): Ditto.
+       (message-bounce): Ditto.
+
+2000-12-20 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * uudecode.el (uudecode-decode-region-external): make-temp-file
+       may not be defined.
+
+       * binhex.el (defalias): eval-and-compile.
+
+       * message.el (message-tool-bar-map): New function.
+       (message-mode): Use it.
+
+2000-12-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-find-connection): Remove the entry.
+       (nntp-retrieve-groups): (gnus-buffer-live-p buf).
+
+2000-12-20 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-make-forward-subject): Don't widen. Decode.
+       (message-forward): Don't decode subject.
+
+2000-12-20  Christoph Conrad <C.Conrad@cli.de>
+
+       * qp.el (quoted-printable-encode-region): Upcase QP.
+
+2000-12-20 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-insert-mime-button): Simplify.
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+
+2000-12-20 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-add-text-properties-when): In XEmacs,
+       text-property-not-all doesn't return nil when start=mark(end).
+       (gnus-remove-text-properties-when): Ditto.
+
+2000-12-19 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-insert-mime-button): Emacs20 needs local-map.
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+
+2000-12-19 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmbox.el (nnmbox-file-coding-system): Use binary.
+       (nnmbox-active-file-coding-system): Ditto.
+
+2000-12-19 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-version):
+       (gnus-version-number): Set to Oort Gnus 0.01.
+
+       * gnus-art.el (gnus-mime-security-button-map):
+       (gnus-insert-mime-security-button): Fix for Emacs21.
+
+2000-12-19  Raymond Scholz <ray-2000@zonix.de>
+
+       * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol.
+
+2000-12-15 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-movemail): Use binary.
+       (pop3-movemail-file-coding-system): Removed.
+
+2000-12-14 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Add cn-gb.
+
+2000-12-13 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-post-method): Use backend name when the
+       address is "".
+
+2000-12-04 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-frame): Save selected window.
+
+2000-12-04 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-mail): COMPOSEFUNC should return t if
+       succeed.
+
+2000-12-04 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-windows): Make sure
+       nntp-server-buffer is live.
+       (gnus-remove-some-windows): switch-to-buffer -> set-buffer.
+
+2000-11-21  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * gnus-win.el (gnus-configure-windows): switch-to-buffer -> set-buffer.
+
+2000-12-04  Andreas Jaeger  <aj@suse.de>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Fix typos in description.
+
+2000-12-01  Christopher Splinter <chris@splinter.inka.de>
+
+       * gnus-sum.el (gnus-summary-limit-to-age): Fix typo.
+
+2000-11-30 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-add-text-properties-when): New function.
+       (gnus-remove-text-properties-when): Ditto.
+
+       * gnus-cite.el (gnus-article-hide-citation): Use them.
+       (gnus-article-toggle-cited-text): Use them.
+       
+       * gnus-art.el (gnus-signature-toggle): Use them.
+       (gnus-article-show-hidden-text): Ditto.
+       (gnus-article-hide-text): Ditto.
+
+2000-11-30 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): Remove eight-bit-*.
+
+2000-11-29 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndraft.el (nndraft-request-restore-buffer): Remove Date field.
+
+2000-11-29 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-cache-accepted-message-ids): Add doc.
+
+2000-11-28 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-shoot-gnksa-feet): New variable.
+       (message-gnksa-enable-p): New function.
+       (message-send): Use it.
+       (message-check-news-body-syntax): Ditto.
+
+2000-11-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-make-message-id): Remove the redundancy.
+
+2000-11-22 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-insinuate): New function.
+
+2000-11-22 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-archive): Find the real url.
+
+2000-11-22 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail): Use buffer-substring-no-properties.
+       (message-send-news): Ditto.
+
+2000-11-22  David Edmondson <dme@dme.org>
+
+       * imap.el (imap-wait-for-tag): Message read info.
+
+2000-11-20 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-archive): Use browse-url.
+
+2000-11-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-make-menu-bar): Use easy-menu-add.
+
+2000-11-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-describe-key): Use prompt.
+       (gnus-article-describe-key-briefly): Ditto.
+
+2000-11-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-expire): Ignore corrupted history.
+
+2000-11-20 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-describe-key): New function.
+       (gnus-article-describe-key-briefly): New function.
+
+2000-11-19 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-read-summary-keys): lookup-key may
+       return a number.
+
+2000-11-17  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): No longer allow
+       raw 8-bit in headers in dk.* newsgroups.
+
+2000-11-16 23:31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Ignore ascii.
+
+2000-11-16 Justin Sheehy <justin@iago.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items.
+
+2000-11-14 10:32:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-possible-viewers): Match the entire string.
+
+2000-11-14 00:48:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-bcklg.el (gnus-backlog-enter-article): Don't enter
+       nnvirtual articles.
+       (gnus-backlog-request-article): Don't request nnvirtual articles.
+
+2000-11-13 09:50:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-repair-multipart): Fix Mime-Version
+       anyway.
+
+2000-11-12 21:35:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-encode-string): Insert semi-colon and
+       leading space.
+
+2000-11-12 19:48:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-select-newsgroup): Change the error message.
+
+2000-11-12 11:53:18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-button-menu): Use select-window.
+
+2000-11-12 09:47:54  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-part): Display multipart/related
+       as multipart/mixed.
+
+2000-11-11 15:55:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-type-alist): Stricter shar regexp.
+
+2000-11-10 09:01:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-alternative): Show button if no
+       preferred part.
+
+2000-11-07  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-move-split-methods): Say that
+       `gnus-split-methods' uses file names, whereas this uses group
+       names.  (Report from Nevin Kapur)
+
+2000-11-10 01:23:20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+  
+       * mm-partial.el (mm-inline-partial): Insert MIME-Version.
+
+2000-11-09 17:02:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-directory-files-is-safe): New variable.
+       (nnheader-directory-articles): Use it.
+       (nnheader-article-to-file-alist): Ditto.
+
+2000-11-09 16:20:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-pad-base64): New function.
+       (rfc2047-decode): Use it.
+
+2000-11-08 16:37:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cache.el (gnus-cache-generate-nov-databases): Reopen cache.
+
+2000-11-08 08:38:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-munge-message-separator): A message may have an
+       empty body.
+  
+2000-11-07 08:49:36  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-display-parts): New function.
+       * gnus-art.el (gnus-mime-view-all-parts): Use it. Remove parts first.
+
+2000-02-02 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+       * gnus-mlspl.el: Documentation tweaks.
+       
+2000-11-06 19:10:14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-encode-string): Use us-ascii if charset is nil.
+
+2000-11-05 15:06:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnvirtual.el (nnvirtual-request-expire-articles): Uncompress range.
+
+2000-11-04 20:38:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): Move point to the end of inserted text.
+
+2000-11-04 10:34:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-pathname-coding-system): Default iso-8859-1.
+       * nnmail.el (nnmail-pathname-coding-system): Ditto.
+
+2000-09-29  David Edmondson  <dme@thus.net>
+
+       * message.el (message-newline-and-reformat): Typo.
+
+2000-11-04 10:11:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-decode-encoded-string): Test mm-multibyte-p.
+
+2000-11-04 09:53:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-decode-text): Delete bogus status lines.
+
+2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * message.el (message-font-lock-keywords): Match a final newline
+       to help font-lock's multiline support.
+       
+2000-11-04  Simon Josefsson  <sj@extundo.com>
+
+       * nnimap.el (nnimap-split-inbox): Typo.
+
+2000-11-03 10:46:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-mail): Move it backwards.
+
+2000-11-03  Simon Josefsson  <sj@extundo.com>
+
+       * rfc2231.el (rfc2231-parse-qp-string): New function.
+       (require): rfc2047.
+
+       * mail-parse.el (mail-header-parse-content-type):
+       (mail-header-parse-content-disposition): Support invalid QP
+       encoded strings, by using `rfc2231-parse-qp-string'.
+
+2000-11-03 08:58:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-parse-string): Decode when there is no number.
+       (rfc2231-decode-encoded-string): Typo "> X 1".
+       (rfc2231-encode-string): Insert the name of charset.
+       * mail-parse.el (mail-header-encode-parameter): Use RFC2231.
+
+2000-11-02 13:27:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-post-news): Comment out the redundancy.  
+       * gnus-art.el (gnus-article-edit-done): 
+       * gnus-sum.el (gnus-summary-edit-article-done): Move line 
+       counting code here.
+       * gnus-msg.el (gnus-setup-message): Remove a hack.
+
+2000-11-02  Hrvoje Niksic  <hniksic@arsdigita.com>
+
+       * rfc2047.el (rfc2047-encoded-word-regexp): Allow empty encoded
+       word.
+
+2000-11-01 08:54:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-read-tag): Remove spaces and LF.
+
+2000-11-01 01:12:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-create-mapping): Use nreverse. 
+
+2000-10-31 23:45:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnwfm.el: New file.
+
+       * nnweb.el (nnweb-replace-in-string): New function.
+
+2000-10-31 11:44:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Fix the summary line.
+
+2000-10-31  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-insert-line): Work with quoted
+       double-quote charcters.
+       (gnus-summary-prepare-threads): Ditto.
+
+2000-10-31 08:36:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-single): Forward line -1.
+       * mml.el (mml-read-tag): Don't skip the leading space.
+
+2000-10-16 11:36:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-forum-table-p): Be a bit more
+       restrictive. 
+       (nnultimate-table-regexp): New variable.
+       (nnultimate-forum-table-p): Use it.
+
+2000-10-30  Ed L Cashin <ecashin@coe.uga.edu>
+
+       * gnus-sum.el (gnus-summary-expire-articles): Save point.
+
+2000-10-28 03:38:39  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Make sure no
+       unencoded stuff in the header.
+
+2000-10-27  Jason Rumney  <jasonr@gnu.org>
+
+       * gnus-art.el (gnus-signature-face): Use italic on any frame that
+       supports it.
+
+2000-10-27 14:19:53  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-mlspl.el: Require cl when compiling.
+       * messagexmas.el: Ditto.
+       * mm-util.el: Ditto.
+       * rfc2047.el: Ditto.
+       * rfc2231.el: Ditto.
+       * smiley-ems.el: Ditto.
+       * uudecode.el: Ditto.
+       
+       * smiley-ems.el (smiley-region): Use mapcar.
+
+2000-10-27 Stefan Monnier <monnier@cs.yale.edu>
+
+       * ietf-drums.el: Require cl when compiling.
+
+2000-10-27  Dave Love  <fx@gnu.org>
+
+       * mm-decode.el (mm-valid-and-fit-image-p): Don't test
+       window-system here.
+
+       * gnus-art.el (gnus-article-x-face-command): Check
+       gnus-article-compface-xbm.
+       (gnus-treat-display-xface): Check for uncompface.
+
+       * nnheader.el (nnheader-translate-file-chars): Only kludge things
+       under Doze with XEmacs.
+
+2000-10-26  Simon Josefsson  <sj@extundo.com>
+
+       * mail-source.el (mail-sources): IMAP predicate is a string.
+       (mail-sources): Add default values for IMAP mailbox, predicate and
+       fetchflag.
+
+2000-10-26  Dave Love  <fx@gnu.org>
+
+       * flow-fill.el: Require cl when compiling.
+
+       * mail-source.el: Require imap when compiling and defvar
+       display-time-mail-function.  Require mm-util.
+       (nnheader-cancel-timer): Autoload.
+       (mail-source-imap-authenticators, mail-source-imap-streams): New
+       variables.
+       (mail-sources): Use them.
+
+2000-10-25 20:13:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-viewer-completion-map): New.
+       (mm-interactively-view-part): Use it.
+
+2000-10-25 18:51:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-q-encode-region): Don't break if a QP-word
+       could be fitted in one line.
+
+2000-10-25  Dirk Meyer <dischi@tzi.de>
+
+       * gnus-demon.el (gnus-demon-time-to-step): theHour was set to
+       seconds instead of hour.
+
+2000-10-25  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * mail-source.el (mail-sources): Better `:type'.
+
+2000-10-24 18:31:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-request-article-this-buffer):
+       gnus-refer-article-method might be a single method.
+       * gnus-sum.el (gnus-refer-article-methods): The second could be 
+       a named method.
+
+2000-10-23  Simon Josefsson  <simon@josefsson.org>
+
+       * flow-fill.el (fill-flowed): Don't flow "-- " lines.
+       (fill-flowed): Make "quote-depth wins" rule work when first line
+       is at level 0.
+
+2000-10-21 11:23:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-multibyte-p): Test (featurep 'xemacs).
+
+2000-10-21 10:54:57  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-mime-total-parts): New function.
+       (gnus-mm-display-part): Use it.
+       (gnus-mime-display-single): Ditto.
+       (gnus-mime-display-alternative): Ditto.
+
+2000-10-21 09:38:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-parse-mailcaps): Don't use parse-colon-path,
+       because they are files, not directories.
+       (mailcap-parse-mimetypes): Ditto.
+
+2000-10-20 19:55:59  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-inline-part): Check validity of charset.
+
+2000-10-18  Dave Love  <fx@gnu.org>
+
+       * mail-source.el (mm-util): Require.
+       (defvar): Use rmail-spool-directory unconditionally.
+
+       * gnus-nocem.el (gnus-nocem-issuers): Update.
+       (gnus-nocem-check-from): New option.
+       (gnus-nocem-scan-groups): Use it.
+       (gnus-nocem-check-article): Bind gnus-newsgroup-name.
+
+2000-10-18  Miles Bader  <miles@lsi.nec.co.jp>
+
+       * gnus-nocem.el (gnus-nocem-check-article-limit): New variable.
+       (gnus-nocem-scan-groups): Obey `gnus-nocem-check-article-limit'.
+
+2000-10-18  Simon Josefsson  <simon@josefsson.org>
+
+       * nnheader.el (nnheader-parse-head): Try both "from:" and "from: ".
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Ditto.
+
+2000-10-17  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Search for "from:"
+       instead of "from: " for rfc822 compliance.
+
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Ditto. Insert SPC.
+
+       * nnheader.el (nnheader-parse-head): Ditto.
+
+2000-10-13  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * mail-source.el (mail-source-keyword-map): Use
+       `rmail-spool-directory' as a default directory for the `file'
+       source, if the variable is defined.  Fall back to hardcoded
+       "/usr/spool/mail/", as before.  Suggestion by Steven E. Harris
+       <seh@speakeasy.org>.
+
+2000-10-13 12:01:15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially): Replace the header
+        delimiter with a blank line.
+
+2000-10-13  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-get-split-value): Use first match only (Ed L
+       Cashin <ecashin@coe.uga.edu>).
+
+2000-10-13 10:52:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ems.el (gnus-article-compface-xbm): Ignore errors.
+
+2000-10-11  John Wiegley  <johnw@gnu.org>
+
+       * gnus-topic.el (gnus-topic-mode): Use `setq' to clear
+       `gnus-group-change-level-function', instead of `remove-hook',
+       because it's not a hook!
+
+       * gnus-mlspl.el (gnus-group-split-update): Check the value of
+       `nnmail-crosspost', and use it to set the `no-crosspost'
+       argument when calling `gnus-group-split-fancy'.  Otherwise, it
+       assumes that cross-posting is always OK, no matter what
+       `nmail-crosspost' is set to.
+       (gnus-group-split-fancy): The argument order in the
+       second-to-last `push' call was wrong, but since `no-crosspost'
+       was always nil, it was never being triggered.
+
+       * gnus-art.el (gnus-treat-hide-citation-maybe): Added this
+       variable to correspond with `gnus-article-hide-citation-maybe'.
+       (gnus-treatment-function-alist): Added entry for the above
+       correlation.
+
+2000-10-12 08:26:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-with-unibyte-current-buffer): Revert to old.
+       (mm-with-unibyte-current-buffer-mule4): New function.
+       * qp.el (quoted-printable-encode-region): Use it.
+       * rfc2047.el (rfc2047-decode): Ditto.
+       * webmail.el (webmail-init): Revert to use mm-disable-multibyte.
+
+2000-10-10 08:44:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-fold-region): "=?=" is not a break point.
+
+2000-10-10 00:00:28  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-init): Use mm-disable-multibyte-mule4.
+
+2000-10-09 22:50:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * base64.el (base64-decode-region): Just give a message if the end
+       is not sane.
+
+2000-10-09 20:09:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Move fold into
+       encode-region.
+       (rfc2047-dissect-region): Rewrite.
+       (rfc2047-encode-region): Rewrite.
+       (rfc2047-fold-region): Fold any line longer than 76.
+       (rfc2047-unfold-region): New function.
+       (rfc2047-decode-region): Use it.
+       (rfc2047-q-encode-region): Don't break at bob.
+
+2000-10-09 17:12:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-open-connection): Kill process buffer when quit.
+       (nntp-connection-timeout): Add a note. SIGALRM is ignored in both
+       FSF Emacs 20 and XEmacs 21.
+       * gnus-agent.el (gnus-agent-fetch-session): Catch quit.
+
+2000-10-09  Dave Love  <fx@gnu.org>
+
+       * gnus-audio.el: Don't require cl.
+       (gnus-audio): New custom group.
+       (gnus-audio-inline-sound): Change to work with Emacs.
+       (gnus-audio-directory, gnus-audio-directory) 
+       (gnus-audio-au-player):  Customize.
+       (gnus-audio-play): Try external player if play-sound-file fails.
+       Use file-name-extension, not string-match.
+
+       * gnus-art.el (article-de-quoted-unreadable)
+       (article-de-base64-unreadable): Fold search case rather than
+       downcasing string.  Apply mm-charset-to-coding-system to arg of
+       quoted-printable-decode-region.
+       (gnus-article-dumbquotes-map): Fix dashes.
+       (gnus-button-mailto, gnus-button-embedded-url): Doc fix.
+       (gnus-button-reply): Just alias it.
+
+2000-10-09  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * mm-encode.el: Require CL.  At least, for `incf'.
+
+       * nnfolder.el (nnfolder-ignore-active-file): Typos.
+
+       * gnus-mh.el (gnus-summary-save-in-folder): Obey mh-lib-progs.
+
+       * gnus-kill.el (gnus-kill): Typo.
+
+2000-10-09  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-update-cache):  Use `:ascent center'.
+
+2000-10-09  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-group-overview-filename): Create directory for
+       newfile (when use long filenames is nil).  Copy+delete file if
+       rename didn't work.
+       (nnimap-group-overview-filename): `rename-file' and `copy-file'
+       doesn't return anything useful, use ignore-errors instead.
+
+2000-10-08 13:05:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): Delete old elc files first.
+
+2000-10-08 10:59:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ems.el (gnus-kill-all-overlays): Move here.
+       * gnus-util.el (gnus-kill-all-overlays): Move out.
+       * gnus-sum.el (gnus-cache-write-active): Auto load.
+       * lpath.el: Shut up.
+       * nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is 
+       asynchronous in Exp version.
+
+2000-10-08 08:57:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el, gnus-ems.el, gnus-start.el: Remove gnus-xemacs.
+       * gnus-ems.el: Autoload smiley.
+       * gnus-art.el (gnus-treat-display-smileys): Default value in Emacs 21.
+
+2000-10-08 08:45:48  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-display-article): Enable multibyte.
+       (gnus-summary-select-article): Don't enable multibyte here.
+       (gnus-summary-goto-article): Ditto.
+
+2000-10-08 Christoph Conrad <christoph.conrad@gmx.de>
+
+       * gnus-draft.el (gnus-draft-send-message): Typo.
+
+2000-10-08  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-verify-uidvalidity): Delete overview file when
+       uid validity changes.
+       (nnimap-group-overview-filename): Store uidvalidity in filenames.
+       Rename old files into new format.
+
+2000-10-07 15:49:39  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-enable-multibyte-mule4): New.
+       (mm-disable-multibyte-mule4): New.
+       * gnus-sum.el (gnus-summary-mode): Use it.
+       (gnus-summary-select-article): Ditto.
+       (gnus-summary-goto-article): Use enable multibyte.
+       * rfc2047.el (rfc2047-decode): Use unibyte.
+
+2000-10-07 15:42:59  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-logic.el (gnus-advanced-string): Use "" if nil.
+
+2000-10-07 10:31:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-q-encode-region): Better calculation of
+       break point.
+       (rfc2047-fold-region): Don't break the first non-LWSP characters.
+
+2000-10-07 09:18:53  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-agent-fetching): New variable.
+       * gnus-agent.el (gnus-agent-with-fetch): Bind it.
+       * gnus-score.el (gnus-score-body): Don't score body when
+       agent-fetching.
+       (gnus-score-followup): Don't score followup either. 
+
+2000-10-07 08:19:17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el: Define dynamic variables in eval-when-compile.
+       * message.el (message-sending-message): New variable.
+       (message-send): Use it.
+       * gnus-draft.el (gnus-draft-send-message): Ditto.
+       (gnus-group-send-drafts): Ditto.
+
+2000-10-06  Dave Love  <fx@gnu.org>
+
+       * gnus-audio.el: Don't require cl.
+       (gnus-audio): New custom group.
+       (gnus-audio-inline-sound): Change to work with Emacs.
+       (gnus-audio-directory, gnus-audio-directory) 
+       (gnus-audio-au-player):  Customize.
+       (gnus-audio-play): Try external player if play-sound-file fails.
+       Use file-name-extension, not string-match.
+
+2000-10-06 17:38:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-prepare): Configure it again.
+
+2000-10-06 15:11:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-default-charset): Default value for non-Mule
+       Emacsen.
+
+2000-10-06 14:28:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-alternative-emails): New.
+       (message-use-alternative-email-as-from): New.
+       (message-setup): Use them.
+
+2000-10-06 13:46:47  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * base64.el, dgnushack.el, gnus-spec.el, messagexmas.el
+       * gnus-xmas.el, nnheaderxm.el, nndraft.el: Use defalias.
+
+       * gnus-xmas.el (gnus-xmas-define): Defalias gnus-overlay-buffer,
+       gnus-overlay-start.
+       * gnus.el: Ditto.
+       * gnus-art.el (gnus-insert-mime-button): Use them.
+
+2000-10-06 10:01:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-with-unibyte-current-buffer): Don't set unibyte
+       if eight-bit-control is a charset, e.g. Mule 5.0 in Emacs 21.
+
+2000-10-06 09:38:54  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-encode-region): Use
+       mm-with-unibyte-current-buffer within narrowed region.
+
+2000-10-06 08:56:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-type-definition): Fix my-deja open url.
+
+2000-10-06 Emerick Rogul <emerick@csa.bu.edu>
+
+       * message.el (message-setup-fill-variables): New variable.
+       (message-mode): Use it.
+
+2000-10-05  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-fold-region): Use gnus-point-at-bol.
+       (rfc2047-charset-encoding-alist): Add iso-8859-1[45].
+
+       * binhex.el: Use defalias, not fset.
+
+       * rfc1843.el: Require cl when compiling.
+
+2000-10-05 12:25:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Score-param could be nil.
+
+2000-10-05 11:43:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-region): Merge only if regions are
+       adjacent.
+
+2000-10-05 09:41:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-multibyte-p): In XEmacs, it is (feature 'mule).
+       (mm-find-charset-region): Merge conditions, delete ascii.
+       (mm-charset-after): Rewrite.
+       * mm-bodies.el (mm-encode-body): Use it.
+
+2000-10-05 09:04:32  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-hotmail-list): Fix.
+
+2000-10-05  Stefan Monnier <monnier+gnu/emacs@rum.cs.yale.edu>
+
+       * nnimap.el (require): cl.
+
+2000-10-04 15:24:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-prepare): Configure windows before
+       gnus-article-prepare-display is called.  Otherwise, BBDB's popup
+       window might be overrided.
+
+2000-10-04  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el (gnus-article-display-xface)
+       [gnus-article-compface-xbm]: Fix.
+       (gnus-x-splash): Bind width, height.
+
+2000-10-04 11:45:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-inline-part): Use prefix argument only
+       when it is called interactively.
+
+2000-10-03 21:20:31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-action-alist): New variable.
+       (gnus-mime-action-on-part): Use it.
+       (gnus-mime-button-commands): Add command ".".
+
+2000-10-03 20:37:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-inline-part): Support prefix argument.
+
+2000-10-03  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lpath.el: "." is in the load-path because dgnushack.el.
+
+2000-10-03  Bjorn Torkelsson  <torkel@hpc2n.umu.se>
+
+       * uudecode.el: xemacs cleanup (use featurep ' xemacs)
+
+       * nnheader.el: ditto
+
+       * mm-util.el: ditto
+
+       * message.el: ditto
+
+       * binhex.el: ditto
+
+       * gnus-audio.el: removed unnecessary xemacs test
+
+       * earcon.el: ditto
+       
+2000-10-03 19:55:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnweb.el (nnweb-decode-entities): Work for non-character
+       entities. 
+
+2000-09-26 09:20:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el: Message the quit parts.
+
+2000-10-03 08:08:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-maildir): Don't insert
+       newlines.
+
+2000-10-02 20:14:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): Don't compile dgnushack.el,
+       lpath.el. Don't compile base64.el if there is builtin base64.
+
+2000-10-02  Bj\e,Av\e(Brn Torkelsson  <torkel@hpc2n.umu.se>
+
+       * base64.el (Repository): Use featurep for XEmacs test.
+
+2000-10-02 17:38:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-retrieve-data): Don't ignore quit.
+
+2000-10-02 14:43:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-banner-alist): New variable.
+       (article-strip-banner): Use it.
+       * gnus-cus.el (gnus-group-parameters): Allow symbol.
+
+2000-10-02  Dave Love  <fx@gnu.org>
+
+       * smiley-ems.el: New file.
+
+       * gnus-ems.el (gnus-smiley-display): Autoload.
+       (mouse-set-point, set-face-foreground, set-face-background)
+       (x-popup-menu): Don't clobber these.
+       (gnus-article-compface-xbm): New variable.
+       (gnus-article-display-xface): Move graphic test.  Use unibyte.
+       Obey gnus-article-compface-xbm.  Use pbm, not xbm.
+
+       * mml.el (require): Fix typo.
+       (mml-parse-1): Modify unknown encoding prompt.
+
+       * mail-source.el (mail-sources): Revert to nil.
+
+       * nnmail.el (nnmail-spool-file): Revert previous change.
+
+       * gnus.el: Don't require custom, message.
+       (gnus-message-archive-method): Wrap initializer in progn and
+       require message here.
+
+2000-10-02  Gerd Moellmann  <gerd@gnu.org>
+
+       * gnus.el (gnus-mode-line-buffer-identification) [Emacs]: Change
+       image's :ascent to 80.  That gives a mode-line which is approx.
+       as tall as the normal one.
+
+2000-10-02 08:04:48  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-hotmail-list): Fix.
+
+2000-10-01 20:55:53  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       Don't postpone GCC if none of GCC methods is agent-covered.  This
+       fix presumes that the post-method must be agent-covered if any Gcc
+       method is agent-covered.
+
+       * gnus-msg.el (gnus-inews-group-method): New function.
+       (gnus-inews-do-gcc): Use it.
+       * gnus-agent.el (gnus-agent-any-covered-gcc): New function.
+       (gnus-agent-possibly-save-gcc): Use it.
+       (gnus-agent-possibly-do-gcc): Ditto.
+
+2000-10-01 17:08:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-mime-types): Use mailcap-mime-data.
+       * mml.el (mml-minibuffer-read-type): Use mailcap-mime-types.
+
+2000-10-01 13:07:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-netscape-open, webmail-hotmail-article,
+       webmail-hotmail-list): Update.
+
+2000-10-01 08:36:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-report-new-mail): Use
+       nnheader-cancel-timer.
+
+2000-10-01 08:35:38  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el (overlay-*): Shut up.
+       * dgnushack.el: Two implementations of smiley.
+
+2000-10-01 08:32:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el: Usage.
+       (gnus-mailing-list-archive, gnus-mailing-list-owner,
+       gnus-mailing-list-post, gnus-mailing-list-unsubscribe,
+       gnus-mailing-list-subscribe, gnus-mailing-list-help): Bind list-*.
+       (gnus-mailing-list-menu): Define it.
+       (turn-on-gnus-mailing-list-mode, gnus-mailing-list-mode): Autoload.
+       
+       * gnus-xmas.el (gnus-xmas-mailing-list-menu-add): Move here.
+
+2000-09-30 18:52:51  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-my-deja-*): Rewrite.
+
+2000-09-30  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-request-accept-article): Remove \n's from
+       From_ lines.
+
+2000-08-05  Simon Josefsson <simon@josefsson.org>
+
+       Make GCC to remote groups work when unplugged
+       (postpone GCC until message is actually sent).
+
+       * gnus-draft.el (gnus-draft-send): Call `gnus-agent-restore-gcc'.
+
+       * gnus-agent.el (gnus-agent-possibly-do-gcc): 
+       (gnus-agent-restore-gcc): 
+       (gnus-agent-possibly-save-gcc): New functions.
+
+       * gnus-msg.el (gnus-inews-add-send-actions): Use
+       `gnus-agent-possibly-do-gcc' if Agentized.
+       (gnus-inews-add-send-actions): Add `gnus-agent-possibly-save-gcc'
+       to `message-header-hook'.
+
+       * gnus.el (gnus-agent-gcc-header): New variable.
+
+2000-07-13  Simon Josefsson <simon@josefsson.org>
+
+       Asks the user to synch flags with server when you plug in.
+
+       * gnus-agent.el (gnus-agent-synchronize-flags): New variable.
+       (gnus-agent-possibly-synchronize-flags-server): New function, use it.
+       (gnus-agent-toggle-plugged): Call it.
+       (gnus-agent-synchronize-flags): Renamed from `gnus-agent-synchronize'.
+       (gnus-agent-group-mode-map): `g-a-s' -> `g-a-s-flags'.
+       (gnus-agent-possibly-synchronize-flags): New function.
+       (gnus-agent-possibly-synchronize-flags-server): New function.
+
+2000-09-30  Simon Josefsson  <simon@josefsson.org>
+
+       * starttls.el: New file, by Daiki Ueno.
+
+2000-08-02  Stanislav Shalunov <shalunov@internet2.edu>
+
+       * message.el (message-make-in-reply-to): In-Reply-To is message-id
+       (see DRUMS).
+       
+2000-09-29  Simon Josefsson  <simon@josefsson.org>
+
+       * nntp.el (nntp-async-trigger): Fix authinfo in asynchronous
+       prefetch.
+
+2000-08-09 10:21:20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-open-telnet): Wait for the telnet prompt before
+       sending a command; allow the rtelnet prompt as well.
+
+2000-09-29  Simon Josefsson  <simon@josefsson.org>
+
+       * message.el (message-send): Make sure error is signalled if no
+       send method is specified.
+
+2000-09-29  Florian Weimer  <fw@deneb.enyo.de>
+
+       * qp.el (quoted-printable-encode-region): Wrap with
+       `mm-with-unibyte-current-buffer'.
+
+2000-09-29 12:12:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Reimplement Mike
+         McEwan's proposal.
+       
+2000-09-29 12:06:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el: Revoke Mike McEwan's 1998-09-05 patch due to
+       the GNU assignment issue.
+
+2000-09-29 09:56:34  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-dissect-mime-parts-sub): Correctly mark body-begin.
+
+2000-09-29 09:14:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Decode to-address.
+
+2000-09-28  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (article-strip-banner): Use
+       gnus-group-find-parameter rather than gnus-group-get-parameter, to
+       allow inheritance on the banner.
+       From elkin@tverd.astro.spbu.ru.
+
+2000-09-26  Richard M. Alderson III <alderson@netcom2.netcom.com> 
+
+       * gnus-art.el (gnus-read-save-file-name): expand-file-name.
+
+2000-09-26  Dave Love  <fx@gnu.org>
+
+       * gnus-draft.el: Don't require gnus-agent.
+
+       * mm-view.el: Use featurep for XEmacs test.
+       (mm-inline-message): Test for `remove-specifier'; don't use
+       condition-case.
+
+2000-09-24  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-request-accept-article): Remove From[^:] lines.
+
+       * gnus-group.el (gnus-group-nnimap-edit-acl): Check if server
+       support ACL's.
+
+       * nnimap.el (nnimap-acl-get): Check capability.
+
+       * mail-source.el (mail-source-imap-file-coding-system): New variable.
+       (mail-source-fetch-imap): Use it.
+
+       * rfc2104.el (rfc2104-hexstring-to-bitstring): New function.
+       (rfc2104-hash): Use it.
+
+       * imap.el (imap-starttls-p): Check for starttls binary.
+       (imap-starttls-open): More verbose.
+       (imap-gssapi-auth): Ditto.
+       (imap-kerberos4-auth): Ditto.
+       (imap-cram-md5-auth): Ditto.
+       (imap-login-auth): Ditto.
+       (imap-anonymous-auth): Ditto.
+       (imap-digest-md5-auth): Ditto.
+       (imap-open): Ditto.
+       (imap-digest-md5-p): Check capability first.
+
+2000-09-24  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-parse-flag-list): Correctly parse empty lists.
+       (imap-login-p): Support LOGINDISABLED.
+
+2000-09-23  Simon Josefsson  <jas@nada.kth.se>
+
+       * rfc2104.el: Add SHA-1 example.
+
+2000-09-22  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-parse-body): Work around bug in Sun SIMS.
+
+2000-09-21 21:54:48  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el: Bind nnkiboze-score-file.
+
+2000-09-21 16:15:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-use-all-scores): New variable.
+       (gnus-all-score-files): Use it.
+       * nnkiboze.el (nnkiboze-generate-group): Use it. Inhibit list groups.
+       (nnkiboze-enter-nov): Fix it when there is no xref.
+       (nnkiboze-generate-groups): List groups.
+       * gnus-group.el (gnus-group-make-kiboze-group): Use 
+       nnkiboze-score-file.
+       
+       * nnkiboze.el (nnkiboze-request-article): Use
+       gnus-cache-request-article.
+       * gnus-group.el (gnus-group-make-kiboze-group): Fix prompt.
+
+2000-07-16 Dmitry Bely <dbely@mail.ru>
+
+       * nnheader.el (nnheader-translate-file-chars): Path splitting on NT.
+
+2000-09-20 18:33:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-find-bnews): Use directory-sep-char.
+
+2000-09-20 17:37:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-default-charset): Set default value in
+       non-MULE XEmacsen as iso-8859-1.
+
+2000-09-20 12:02:24  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-demon.el: Use (featurep 'xemacs).
+       * gnus-agent.el: timer vs. itimer.
+       * mail-source.el: Ditto.
+
+2000-09-19 10:24:57  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-make-kiboze-group): Makedir.
+       * nnheader.el (nnheader-parse-nov): Remove Xref in mail-header-xref.
+       * gnus-sum.el (gnus-nov-parse-line): Ditto.
+       * nnkiboze.el (nnkiboze-file-coding-system): New.
+       (nnkiboze-retrieve-headers): Use it.
+       (nnkiboze-request-group): Ditto.
+       (nnkiboze-close-group): Ditto.
+       (nnkiboze-generate-group): Ditto.
+       (nnkiboze-enter-nov): Insert first Xref properly.
+
+2000-09-19  Dave Love  <fx@gnu.org>
+
+       * nnmail.el (nnmail-cache-accepted-message-ids): Default to nil.
+       (nnmail-get-new-mail): Test `sources' in top-level conditional.
+
+       * mail-source.el (mail-sources): Change default to '((file)).
+       Add useful custom type.
+
+2000-09-18  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-util.el (gnus-time-iso8601): Correct doc string (four digit
+       year).
+       (gnus-date-iso8601): Ditto.
+
+2000-09-18 09:05:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-imap): Disable multibyte.
+
+2000-09-17 01:13:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-q-encoding-alist): Remove = and _ from the
+       pattern. Avoid using 8 bit chars.
+       * qp.el (quoted-printable-encode-region): Avoid using 8 bit chars.
+
+2000-09-16 15:57:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smiley.el (smiley-buffer-ems, smiley-create-glyph-ems,
+       smiley-toggle-extent-ems, smiley-toggle-extents-ems,
+       smiley-toggle-buffer-ems): New functions for Emacs 21. Toggle
+       functions are not implemented yet.
+       
+       * dgnushack.el (dgnushack-compile): Remove smiley.el and 
+       x-overlay.el from the FSF Emacs black list.
+
+2000-09-15 21:10:20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-inlined-types): Add application/emacs-lisp.
+       (mm-inline-media-tests): Ditto.
+       (mm-automatic-display): Ditto.
+       * mm-view.el (mm-display-inline-fontify): Generalize from 
+       mm-display-patch-inline. 
+       (mm-display-patch-inline): Use it.
+       (mm-display-elisp-inline): Ditto.
+       
+2000-09-15 14:03:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-find-groups): Add recursive parameter.
+       (gnus-topic-unmark-topic): Ditto.
+       (gnus-topic-mark-topic): Ditto.
+       (gnus-topic-get-new-news-this-topic): Use it.
+
+2000-09-15 09:01:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treat-display-xface): By default, Emacs 21
+       display xface.
+
+2000-08-23 02:54:46  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-group.el (gnus-group-rename-group): Inhibit renaming of
+       zombie or killed groups.
+       
+2000-09-15 00:09:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-preview): Reinsert unibyte content. 
+       (mml-parse-1): Remove with-unibyte-current-buffer.
+       (mml-generate-mime-1): Ditto.
+       * gnus-msg.el (gnus-summary-mail-forward): Ditto.
+       * message.el (message-forward): Ditto.
+
+2000-09-14 23:13:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-de-quoted-unreadable): Guess charset from
+       original article buffer.
+       (article-de-base64-unreadable): Ditto.
+       (article-wash-html): Ditto.
+
+2000-09-14 18:55:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Disable multibyte
+       unless forward-show-mml.
+
+2000-09-14 14:48:57  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-save-parts-type-history): New.
+       (gnus-summary-save-parts-last-directory): New.
+       (gnus-summary-save-parts): Save history.
+
+2000-09-14 Ben Gertzfield <che@debian.org>
+
+       * gnus-sum.el (gnus-summary-save-parts-default-mime): New
+       variable.
+       (gnus-summary-save-parts): Use it.
+
+2000-09-14 11:31:28  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-setup-buffer): Clean handle-alist.
+       * gnus-sum.el (gnus-summary-exit): Ditto.
+       (gnus-summary-exit-no-update): Ditto.
+       (gnus-summary-show-article): Ditto.
+
+2000-09-14 08:42:48  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-dissect-mime-parts-sub): Remove
+       Content-Disposition.
+
+2000-09-13 23:58:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Hotmail updated. Add X-Gnus-Webmail.
+
+2000-09-13 21:41:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-setup-buffer): Set
+       gnus-article-mime-handles to nil.
+       * gnus-sum.el (gnus-summary-exit): Ditto.
+       (gnus-summary-exit-no-update): Ditto.
+       (gnus-summary-show-article): Ditto.
+       (gnus-summary-save-parts): Use gnus-article-mime-handles if
+       dissected.
+       * mm-partial.el (mm-partial-find-parts): Remove redundancy.
+
+2000-09-13 16:59:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-sort): Sort loose threads too.
+       (gnus-sort-threads-1): New function. Sort threads recursively.
+       (gnus-sort-threads): Use it.
+       (gnus-sort-gathered-threads): Doc fix.
+
+2000-09-13  Dave Love  <fx@gnu.org>
+
+       * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode.
+
+       * gnus-ems.el (gnus-ems-redefine): Don't alias
+       gnus-summary-set-display-table.
+
+       * message.el (message-user-agent): Don't wrap ignore-errors around
+       it.
+
+       * mm-encode.el (mm-insert-multipart-headers): Avoid redundant
+       `format'.
+       (mm-content-transfer-encoding): Don't use cadar.
+
+       * uudecode.el (uudecode-decoder-program) 
+       (uudecode-decoder-switches): Customize.
+
+       * gnus-score.el (gnus-home-score-file): Improve custom type.
+
+       * gnus-cus.el (gnus-custom-mode): Conditionally set local
+       variables for Emacs 21.
+       (gnus-group-customize): Disable undo while laying out the buffer.
+
+2000-09-13 09:38:26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-write-active-file): Bind
+       coding-system-for-write.
+
+2000-09-13 09:14:57  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-get-new-mail): Don't test nnmail-spool-file.
+       
+       * gnus-cache.el (gnus-jog-cache): Temporarily disable mail-sources.
+       * gnus-kill.el (gnus-batch-score): Ditto.
+       * gnus-move.el (gnus-change-server): Ditto.
+       * nnkiboze.el (nnkiboze-generate-groups): Ditto.
+
+2000-09-12  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-sum.el (gnus-update-read-articles): Undo
+       `gnus-request-set-mark' operation.
+
+2000-09-11  Dave Love  <fx@gnu.org>
+
+       * Changelog: Use iso-2022 coding.
+
+       * gnus-msg.el (gnus-msg-mail): New function.
+       (gnus-user-agent): New mail agent.
+
+2000-09-10  Dave Love  <fx@gnu.org>
+
+       * message.el: Require mail-abbrevs for XEmacs for a problem with
+       keybinding despite the autoloads for it.
+
+2000-09-08  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-kerberos4-open): Erase more (fixes race condition?).
+
+       * nnimap.el (nnimap-request-update-info-internal): Remove tick
+       marks from dormant articles. (See nnimap-request-set-mark.)
+       (nnimap-retrieve-headers-progress): Demule.
+       (nnimap-open-server): Call nnoo-change-server twice, once for
+       getting the nnimap-server-buffer and once for letting n-c-s set
+       the variables in that buffer.
+
+2000-09-08  David Edmondson <dme@dme.org>
+
+       * gnus.el (gnus-short-group-name): Guess separator.
+
+2000-09-07  Tadashi Watanabe  <watanabe@sigmaitec.co.jp>
+
+       * smiley.el (smiley-buffer, smiley-create-glyph): Work with GTK
+       XEmacs as well.
+
+2000-09-06  Francis Litterio <franl-removethis@world.omitthis.std.com>
+
+       * gnus-group.el (gnus-group-insert-group-line): Fix.
+
+2000-09-04  Dave Love  <fx@gnu.org>
+
+       * mm-decode.el (mime-display) <defgroup>: Add `multimedia' group.
+       (mm-get-image): Avoid the losing `make-glyph' from W3.
+
+2000-09-03  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-sum.el (gnus-summary-delete-article): Check server.
+
+2000-09-01  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-parse-flag-list): Rewrite.
+
+       * nnimap.el (nnimap-retrieve-headers-from-file): Ignore errors.
+
+       * imap.el (imap-parse-flag-list): Hack.
+
+2000-08-29  Dave Love  <fx@gnu.org>
+
+       * gnus-mlspl.el (gnus-group-split-fancy): Eschew mapcon.
+
+       * dgnushack.el (mapcon, union): Remove compiler macros.
+
+       * gnus-agent.el (gnus-agent-union): new function.
+       (gnus-agent-fetch-headers): Use it.
+
+       * gnus.el (gnus-group-startup-message): Specify foreground and
+       background for xpm image.  Centre image vertically.
+       From Katsumi Yamaoka <yamaoka@jpl.org> with mods.
+
+2000-08-24 23:49:23  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail): Narrow-to-headers.
+
+2000-08-24  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-insert-mime-button): Fix help-echo for Emacs
+       21.
+
+2000-08-23  Dave Love  <fx@gnu.org>
+
+       * dgnushack.el: Remove `member-if' compiler macro.
+
+2000-08-21  Dave Love  <fx@gnu.org>
+
+       * nnimap.el (nnimap-request-newgroups): Eschew member-if.
+
+2000-08-21 10:09:47  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-hide-topic): Use find-topology if
+       permanent is used.
+       (gnus-topic-show-topic): Read topic when to show permanent hidden
+       topic.
+       (gnus-topic-remove-topic): Revert to the old behavior, not using
+       hide.
+
+2000-08-21  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el (gnus-add-minor-mode): Add &rest arg.
+       (gnus-xemacs): Use featurep.
+
+       * mm-util.el (mm-read-charset): Maybe use builtin.
+       (mm-replace-chars-in-string): Maybe use subst-char-in-string.
+       (mm-multibyte-p, mm-with-unibyte-current-buffer)
+       (mm-with-unibyte): Use featurep, not string-match.
+       (mm-with-unibyte-buffer): Simplify.
+       (mm-quote-arg): Maybe use shell-quote-argument.
+
+       * mml.el (mml-make-string): Deleted (unused).
+
+       * gnus.el (gnus-mode-line-buffer-identification): Supply
+       definition for Emacs 21.
+
+       * gnus-salt.el: Small doc fixes.
+       (gnus-pick-mode, gnus-binary-mode): Supply a toggle-func arg to
+       gnus-add-minor-mode.
+
+       * gnus-topic.el (gnus-topic-mode): Supply a toggle-func arg to
+       gnus-add-minor-mode.
+
+2000-08-20  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-before-find-minmax-bugworkaround): New
+       function, thanks to Lloyd Zusman for debugging.
+       (nnimap-request-group): 
+       (nnimap-request-list): 
+       (nnimap-retrieve-groups): 
+       (nnimap-request-newgroups): Use it.
+
+       * nnimap.el (nnimap-request-article-part): Less verbose.
+
+2000-08-19  Andreas Jaeger  <aj@suse.de>
+
+       * lpath.el ((string-match "XEmacs" emacs-version)): Remove
+       subst-char-in-string since we test elsewhere whether it's bound.
+       
+2000-08-18  Dave Love  <fx@gnu.org>
+
+       * gnus-score.el (gnus-score-find-score-files-function): Fix doc,
+       custom type.
+
+       * gnus-xmas.el (gnus-group-icon-create-glyph): Don't test
+       gnus-group-running-xemacs.
+
+       * nnheader.el (nnheader-replace-chars-in-string): Use
+       subst-char-in-string if available.
+
+       * gnus-art.el (gnus-read-save-file-name, gnus-plain-save-name) 
+       (gnus-request-article-this-buffer): Use expand-file-name.
+       (gnus-mime-view-part-as-type): Simplify interactive spec.
+       (gnus-mime-button-map): Define it all in defvar.
+
+2000-08-17  Dave Love  <fx@gnu.org>
+
+       * gnus-group.el (gnus-group-running-xemacs): Deleted.
+
+       * gnus-demon.el (gnus-demon): Bind use-dialog-box and
+       last-nonmenu-event.
+
+       * uudecode.el (char-int): Use defalias, not fset.
+
+       * score-mode.el: Don't require easymenu.  Require mm-util.
+       (score-mode-coding-system): Use mm-auto-save-coding-system.
+
+       * nneething.el (nneething-create-mapping): Don't use cadar & al.
+       (nneething-file-name): Use expand-file-name, not concat.
+
+2000-08-16 13:05:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers):
+       Failure proof for email addresses.
+       (nnslashdot-sane-retrieve-headers): Ditto.
+
+2000-08-14 20:08:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-send-mail): Only insert courtesy message
+       when text/plain.
+
+2000-08-14 19:55:04  Jesper Harder  <jesper_harder@hotmail.com>
+
+       * message.el (message-cancel-news): Copy the From header from the
+       original article.
+
+2000-08-14 19:52:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-async.el (gnus-asynchronous): Removed.
+
+2000-08-14 16:12:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-maildir): Use MMDF mail
+       format.
+
+2000-08-14 19:12:22  Rod Whitby  <list.ding@rwhitby.net>
+
+       * nnmail.el (nnmail-expiry-target-group): Fixed.
+
+2000-08-14  Rod Whitby <list.ding@rwhitby.net>
+
+       * nnmail.el (nnmail-expiry-target-group): Fix the call to
+       gnus-request-accept-article so that body encoding is *not* done.
+       Encoding is not done on incoming mail, so why should it be done on
+       expired mail?
+
+
+2000-08-14  Rod Whitby <list.ding@rwhitby.net>
+
+       * nnml.el (nnml-request-expire-articles): Fix the calls to
+       nnml-request-article (the filename was being passed instead of the
+       article number) and nnmail-expiry-target-group
+       (nnml-current-directory is changed by nnml-request-accept-article,
+       causing it to be incorrect for the next article to be expired).
+
+2000-08-14  Rod Whitby <list.ding@rwhitby.net>
+
+       * gnus-sum.el (gnus-summary-expire-articles): Fix the handling of
+       expiry-target group parameters. 
+
+2000-08-13 18:53:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-select-group): Touch the dribble
+       buffer.
+       (gnus-topic-hide-topic): Take a PERMANENT parameter.
+       (gnus-topic-show-topic): Ditto.
+
+       * gnus-dup.el (gnus-dup-suppress-articles): Do auto-expiry.
+
+2000-08-12 21:48:00  John H. Palmieri  <palmieri@math.washington.edu>
+
+       * mail-source.el (mail-source-incoming-file-prefix): New
+       variable. 
+
+2000-08-12 20:29:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-check-first-time-used): Clean up a bit.
+
+       * mailcap.el (mailcap-maybe-eval): Be even more warning.
+
+2000-08-11  Florian Weimer  <fw@deneb.enyo.de>
+
+       * message.el (message-syntax-checks): New check quotin-style: 
+       Text must be written below quoted text.
+       (message-check-news-body-syntax): Check it.
+
+2000-08-11  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-authenticator-alist): Fix typo.
+       (imap-gssapi-open): Copy krb4 fixes for modern imtest's, thanks to
+       Jonas Oberg for debugging.
+
+2000-08-11  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-async.el (gnus-asynchronous): Disable by default.
+
+2000-08-10 20:22:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-inline-text): Bind fill-column.
+
+       * nnvirtual.el (nnvirtual-request-expire-articles): Return the
+       list of unexpired articles.
+
+       * gnus-group.el (gnus-group-expire-articles-1): Return the list of
+       un-expired articles. 
+
+       * gnus-sum.el (gnus-summary-reparent-thread): Narrow to the
+       headers. 
+
+       * gnus-topic.el (gnus-topic-kill-group): Move up one line so that
+       we update the right topic.. 
+
+       * mm-decode.el (mm-display-external): Put point at start. 
+
+2000-08-10  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-expiry-target): More explicit documentation.
+
+       * gnus-cus.el (gnus-group-parameters): Add parameter `expiry-wait'.
+
+2000-08-09  Simon Josefsson <simon@josefsson.org>
+
+       * imap.el (imap-parse-body):
+       (imap-parse-string-list): Add bug workarounds for Stalker
+       Communigate Pro 3.0 server.
+       (imap-body-lines): Remove bogus comment.
+
+       * imap.el (imap-range-to-message-set): Move from nnimap.el.
+
+       * nnimap.el (nnimap-retrieve-which-headers):
+       (nnimap-retrieve-headers-from-server):
+       (nnimap-request-set-mark):
+       (nnimap-request-expire-articles): Use `i-r-t-m-set' instead.
+
+2000-08-08 00:53:41  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-dont-reply-to-names):
+       rmail-dont-reply-to-names may not be defined.
+
+2000-08-07 09:37:01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-iterate): Uncompiled function should 
+       not use pop.
+
+2000-07-19  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el: Defalias some dummy funcs to `ignore'.
+       (gnus-x-splash): Use expand-file-name.  Remove redundant facep
+       check.
+       (gnus-article-display-xface): Special-case for dark backgrounds.
+
+2000-07-19  Kim-Minh Kaplan <kmkaplan@galaxy.fr>
+
+       * imap.el (imap-calculate-literal-size-first): New variable.
+       (imap-local-variables): Add it.
+       (imap-kerberos4-open): Set it.
+       (imap-send-command): Use it.
+
+2000-07-17 14:18:16  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-mimetypes-parsed-p): New variable.
+       (mailcap-parse-mimetypes): Use it.
+       (mailcap-extension-to-mime): Parse mimetype.
+       (mailcap-mime-types): Ditto.
+       * mml.el (mml-minibuffer-read-type): Ditto.
+
+2000-07-16 18:25:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-type-alist): Add outlook.
+       (nndoc-outlook-type-p): New function.
+       (nndoc-outlook-article-begin): Ditto.
+
+2000-07-16  Daiki Ueno  <ueno@unixuser.org>
+
+       * gnus-sum.el (gnus-restore-hidden-threads-configuration): Save
+       excursion.
+
+2000-07-15  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-cus.el (gnus-group-parameters, banner): Type is regexp.
+
+       * imap.el (imap): 
+       (imap-kerberos4-program): 
+       (imap-gssapi-program): 
+       (imap-ssl-program): Customization.
+       (imap-shell-program): 
+       (imap-shell-host): New variables.
+       (imap-streams): 
+       (imap-stream-alist): Add shell.
+       (imap-shell-p): 
+       (imap-shell-open): New functions.
+       (imap-open): Don't call authenticator if preauth.
+       (imap-authenticate): Return t if already authenticated.
+
+2000-07-14  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.el (gnus-invalid-group-regexp): New variable.
+       (gnus-read-group): Use it.
+
+2000-07-14 12:40:51  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): mark-below, 
+       expunge-below and orphan-score are "group variables".
+
+2000-07-13  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-srvr.el (gnus-browse-read-group): Don't pass fully
+       qualified group names to `gnus-group-read-ephemeral-group'.
+
+2000-07-13 07:40:39  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (srcdir): Define it before use it.
+
+2000-07-12 19:37:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el: `W t' is toggle-header in info.
+
+2000-07-12 16:50:06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el: Fbind subst-char-in-string.
+
+2000-07-12 15:48:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: Use W3DIR and lispdir.
+       * dgnushack.el: Ditto.
+
+2000-07-12 10:12:31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-de-base64-unreadable): Typo.
+
+2000-07-12  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-agent.el (require): Require timer.
+
+2000-07-11 18:29:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-bounce): Call mime-to-mml.
+
+2000-07-11 18:00:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-close): New function.
+
+2000-07-04 23:23:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers): Get the
+       right line number for the article.
+
+2000-07-10 22:41:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers): Save point.
+       * webmail.el (webmail-fetch): Bind 
+       url-http-silence-on-insecure-redirection.
+
+2000-07-10 11:43:22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers): Use
+       unibyte.
+       (nnslashdot-sane-retrieve-headers): Ditto.
+       (nnslashdot-request-article): Ditto.
+
+2000-07-10 11:12:32  William M. Perry <wmperry@aventail.com>
+
+       * mailcap.el (mailcap-parse-mimetype-file): 
+
+2000-07-07 23:46:22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-insert): Stricter test.
+       * webmail.el (webmail-refresh-redirect): Ditto.
+
+2000-07-06 14:17:48  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-dissect-multipart): Match the EOL of boundary.
+
+2000-07-05 21:19:22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-insert-nov): Remove EOLs of all fields.
+
+2000-07-05  Dave Love  <fx@gnu.org>
+
+       * utf7.el: Doc and header fixes.
+
+       * gnus-sum.el: Doc fixes.
+
+       * gnus-util.el (gnus-point-at-eol, gnus-point-at-bol): Use
+       defalias, not fset.
+
+       * flow-fill.el (fill-flowed-point-at-eol)
+       (fill-flowed-point-at-bol): Use defalias, not fset.
+
+       * gnus-art.el: Don't alias article-mime-decode-quoted-printable.
+       (gnus-Plain-save-name): Delete -- apparently bogus.
+
+2000-07-03 00:12:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnsoup.el: Use expand-file-name throughout.
+
+2000-07-03 00:07:51  Kjetil Torgrim Homme  <kjetilho@ifi.uio.no>
+
+       * nnmail.el (nnmail-read-incoming-hook): New example.
+
+2000-07-02 23:17:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-inline-text): Check whether the text has already
+       been decoded.
+
+2000-07-04 15:17:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-sid-strip): To strip or not to strip?
+
+2000-07-03  Stainless Steel Rat <ratinox@peorth.gweep.net>
+
+       * gnus-sum.el (gnus-recenter): Fix horizontal recenter.
+
+2000-07-03  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-sum.el (gnus-update-marks): Don't propagate download and
+       unsend flags.
+
+2000-07-03  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-open-connection): Don't look up virtual server
+       name in authinfo (.authinfo now support ports, no need for the
+       hack).
+       (nnimap-split-find-rule): Fix.
+       (nnimap-open-connection): Look for nnimap-server-address in authinfo.
+
+2000-07-03  Paul Stodghill <stodghil@CS.Cornell.EDU>
+
+       * message.el (message-unquote-tokens): Remove all quotes.
+
+2000-07-03 00:29:08  Julien Gilles  <julien.gilles@bcv01y01.vz.cit.alcatel.fr>
+
+       * gnus-ml.el: New file. 
+
+2000-07-02 16:11:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-request-close): New function.
+
+       * gnus-start.el (gnus-clear-system): Clear nnmail-split-history. 
+
+2000-06-18  Norbert Koch  <norbert@s.netic.de>
+
+       * Makefile.in: Better support for xemacs builds
+
+Sun Jul  2 15:11:35 2000  Lars Magne Ingebrigtsen  <lmi@quimbies.gnus.org>
+
+       * gnus.el: Gnus v5.8.7 is released.
+
+2000-05-19 06:32:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-decode.el (mm-insert-part): Characters doubly decoded.
+
+2000-07-01 10:23:08  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-do-fcc): Encode MIME.
+
+2000-06-28 13:52:57  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el: Fbind image-size.
+
+2000-06-28  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-split-rule): Update doc with extended syntax.
+       (nnimap-assoc-match): New function.
+       (nnimap-split-find-rule): Support extended syntax.
+
+2000-06-28  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-open-connection): Use port stuff.
+
+       * gnus-util.el (gnus-netrc-machine): Add defaultport parameter,
+       document port and defaultport.
+
+2000-06-27  Paul Stodghill <stodghil@CS.Cornell.EDU>
+
+       * gnus-agent.el (gnus-agent-synchronize): Kill flags buffer.
+
+2000-06-26  Dave Love  <fx@gnu.org>
+
+       * mm-decode.el (mm-image-fit-p): Use `image-size' in Emacs. 
+
+       * message.el: Remove unnecessary `require'ments.  Defvar
+       gnus-list-identifiers when compiling.  Don't try to autoload
+       variable `gnus-list-identifiers'.  Autoload
+       gnus-group-name-charset.
+       (message-fetch-field): Don't assume `format' removes text
+       properties.
+       (message-strip-list-identifiers, message-reply, message-followup):
+       Require gnus-sum.
+       (message-mode): Tidy XEmacs conditionals.
+       (message-replace-chars-in-string): Use subst-char-in-string when
+       available.
+
+       * gnus-xmas.el (gnus-xmas-define) <match-string-no-properties>:
+       Define if necessary.
+
+       * gnus-art.el (gnus-article-edit-exit): Don't assume `format'
+       removes text properties.
+
+       * gnus-srvr.el (gnus-browse-group-name): Likewise.
+
+       * gnus-msg.el (gnus-copy-article-buffer):  Likewise.
+
+       * gnus-score.el (gnus-summary-score-entry): Likewise.
+
+2000-06-26 11:18:57  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnimap.el (nnimap-request-post): Fix parenthesis.
+
+2000-06-26  Paul Stodghill <stodghil@CS.Cornell.EDU>
+
+       * message.el (message-unquote-tokens): New function.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Unquote gcc tokens.
+
+       * nnimap.el (nnimap-request-post): Ditto.
+
+2000-06-21  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus.el (gnus-asynchronous): Removed (defined in gnus-async.el).
+
+       * nnimap.el (nnimap-callback): Update for IMAP4rev1 servers (see
+       patch commited 2000-04-02).
+
+2000-06-20  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el (imap-mailbox-examine-1): New function.
+       (imap-message-copyuid-1):
+       (imap-message-appenduid-1): Use it, instead of
+       `imap-mailbox-examine' which would utf-7 encode mailbox name
+       twice.
+
+2000-06-19  Dave Love  <fx@gnu.org>
+
+       * mm-uu.el Don't require message.  Require cl when compiling.
+
+2000-06-17 18:58:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-local-variables): gnus-orphan-score is
+       a local variable.
+       * gnus-sum.el (gnus-orphan-score): Move here.
+
+2000-06-10 09:33:36  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-forward): Remove show-mml condition.
+       (message-forward-ignored-headers): Remove X-Gnus headers.
+
+2000-06-08  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-cus.el (gnus-extra-group-parameters): Add uidvalidity.
+
+2000-06-08 12:34:26  Urban Engberg <ue@ccieurope.com>
+
+       * gnus-demon.el (gnus-demon-scan-mail): Bind nnmail-fetched-sources.
+
+2000-06-08 12:27:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-syntax-checks): Add type.
+
+2000-06-07  Dave Love  <fx@gnu.org>
+
+       * mm-view.el (mm-inline-image-emacs): Don't specify string for
+       put-image.
+       (mm-inline-image): Defalias, not fset.
+
+       * gnus.el (gnus-group-startup-message): Don't specify string for
+       insert-image.
+
+       * gnus-ems.el (gnus-add-minor-mode): Make it an alias if
+       add-minor-mode is available.
+       (gnus-article-display-xface): Don't specify string for
+       insert-image.
+
+2000-06-06 13:28:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-remove-topic): Set hidden.
+       (gnus-topic-insert-topic-line): Use shownp.
+       (gnus-topic-hide-topic): Don't use hidden.
+       (gnus-topic-show-topic): Don't use hidden.
+
+2000-06-05 22:25:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Bind coding
+       system.
+       * gnus-soup.el (gnus-soup-write-prefixes): Ditto.
+       * gnus-start.el (gnus-slave-save-newsrc): Ditto.
+       * gnus-util.el (gnus-output-to-rmail): Ditto.
+       (gnus-output-to-mail): Ditto.
+       (gnus-write-buffer): Ditto.
+       * gnus-uu.el (gnus-uu-save-article): Ditto.
+
+2000-06-04 15:05:16  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-read-from-minibuffer): Typo.
+
+2000-06-03 13:36:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-decode-charset): Override non-MIME forward
+       charset.
+
+2000-06-02 12:04:26  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-quote-region): Correct the regexp.
+       * gnus-msg.el (gnus-summary-reply): mml-quote it.
+
+2000-06-02 11:57:15  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-forward): Insert raw text.
+       * mml.el (mml-parse-1): Get raw text in unibyte mode.
+       (mml-generate-mime-1): Insert raw text in unibyte mode.
+
+2000-06-01  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * mm-bodies.el (mm-body-encoding): Always encoded if
+       `mm-use-ultra-safe-encoding' is set.
+
+2000-05-31 14:50:52  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (ange-ftp-name-format): Typo.
+
+2000-05-30  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-start.el (gnus-get-unread-articles): If
+       `gnus-activate-group' and/or `gnus-check-server' return nil, don't
+       try to do anything on that server.
+       
+2000-05-25  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-group.el (gnus-group-nnimap-edit-acl): Help text updated
+       from latest draft.
+
+2000-05-08  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-group.el (gnus-group-expire-articles-1): Make sure server
+       is open.
+
+2000-05-24  Dave Love  <fx@gnu.org>
+
+       * mml.el (mml-parse-file-name): Fix ange-ftp part.
+
+2000-05-22  Didier Verna  <didier@lrde.epita.fr>
+
+       * gnus.el (gnus-redefine-select-method-widget): new function, call
+       it once. Add an "other" entry for unknown but editable backend
+       name symbols.
+       * gnus-start.el (gnus-declare-backend): use it.
+
+2000-05-19  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-article-next-page): Revert last change.
+
+2000-05-19 09:56:07  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-open-history): Open history in binary mode.
+
+2000-05-19  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-mime-externalize-part): Bind mm-inlined-types,
+       not mm-inline-large-images.
+
+2000-05-19 01:45:40  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-parse-1): Don't test multiple-charsets within mml tag.
+
+2000-05-18  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el: Use defalias, not fset.
+       (gnus-article-x-face-command): Don't test for xbm.
+       (gnus-article-next-page): Redisplay before testing point in window.
+
+2000-05-17 21:16:54  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-mode-map): Add M-SPACE.
+       * mml.el (mml-mode-map): Comment out mml-narrow-to-part.
+
+2000-05-17 21:13:38 Jim Davidson <jdavidson@acm.org>
+
+       * gnus-sum.el (gnus-summary-save-article-rmail): Use
+       gnus-summary-save-in-rmail.
+       * message.el (message-output): Ditto.
+
+2000-05-17 22:37:25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-emphasize-whitespace-regexp): Doc fix.
+
+2000-05-17 14:03:49  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Encode if the method
+       is a charset.
+       * message.el (message-send-news): Check group name charset.
+       * gnus-msg.el (gnus-post-news): Decode group name.
+       (gnus-inews-do-gcc): Encode group name.
+
+2000-05-17 10:16:32  Karl Kleinpaste <karl@charcoal.com>
+
+       * gnus-art.el (gnus-emphasize-whitespace-regexp): New variable.
+       * gnus-util.el (gnus-put-text-property-excluding-newlines): Use it.
+
+2000-05-17 02:25:11  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-mark-line-p): New function.
+       (gnus-group-goto-group): New parameter.
+       (gnus-group-remove-mark): Use it.
+       * gnus-topic.el (gnus-topic-move-group): Ditto.
+       (gnus-topic-remove-group): Ditto.
+
+2000-05-17 00:49:09  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-list-dormant): New function.
+
+2000-05-16 23:20:42  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-synchronize): Use
+       nnheader-insert-file-contents.
+       (gnus-agent-save-active-1): Ditto.
+       (gnus-agent-write-active): Ditto.
+       (gnus-agent-expire): Ditto.
+       * gnus-cache.el (gnus-cache-read-active): Ditto.
+       * gnus-start.el (gnus-master-read-slave-newsrc): Ditto.
+       * gnus-sum.el (gnus-summary-import-article): Ditto.
+
+       * gnus-agent.el (gnus-agent-write-servers): Bind coding-system.
+       (gnus-agent-save-group-info): Ditto.
+       (gnus-agent-save-alist): Ditto.
+       * gnus-util.el (gnus-make-directory): Ditto.
+
+       * gnus-agent.el (gnus-agent-save-group-info): Disable multibyte.
+
+2000-05-16 21:13:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-preprocess-function): New variable.
+       (mml-generate-mime-postprocess-function): New variable.
+       (mml-generate-mime-1): Use them.
+
+2000-05-16 18:15:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-apropos): Group name charset.
+       * gnus-sum.el (gnus-set-mode-line): Ditto.
+       * gnus-group.el (gnus-group-decoded-name): New function.
+       (gnus-group-edit-group): Use it.
+       * gnus-cus.el (gnus-group-customize): Use it.
+
+2000-05-16 17:55:57  Karl Kleinpaste <karl@charcoal.com>
+
+       * gnus-util.el (gnus-put-text-property-excluding-newlines): Improve.
+
+2000-05-16 16:22:17  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-name-charset-method-alist): New variable.
+       (gnus-group-name-charset-group-alist): Ditto.
+       (gnus-group-name-charset): New function.
+       (gnus-group-name-decode): New function.
+       (gnus-group-insert-group-line): Use them.
+       (gnus-group-prepare-flat-list-dead): Ditto.
+       (gnus-group-list-active): Ditto.
+       (gnus-group-describe-all-groups): Ditto.
+       (gnus-group-prepare-flat-list-dead-predicate): Ditto.
+       * gnus-srvr.el: (gnus-browse-foreign-server): Decode group name and
+       add gnus-group property.
+       (gnus-browse-group-name): Read gnus-group property.
+
+2000-05-16 15:27:08  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-possibly-change-group): Use
+       file-name-coding-system instead of pathname-coding-system.
+       * nnmail.el (nnmail-find-file): Ditto.
+       (nnmail-write-region): Ditto.
+       * nnmh.el (nnmh-retrieve-headers): Ditto.
+       (nnmh-request-article): Ditto.
+       (nnmh-request-group): Ditto.
+       (nnmh-request-list): Ditto.
+       (nnmh-possibly-change-directory): Ditto.
+       (nnmh-active-number): Ditto.
+       * nnml.el (nnml-possibly-change-directory): Ditto.
+       (nnml-request-list): Ditto.
+       (nnml-request-article): Ditto.
+       (nnml-retrieve-headers): Ditto.
+
+2000-05-16  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-request-accept-article): Don't unselect
+       mailbox if no mailbox is selected.
+
+2000-05-15  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-art.el (gnus-button-url-regexp): Revert earlier change.
+       Recognize domain names starting with `www.' as starting an URL.
+
+2000-05-15 09:46:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-maildir): Insert "From ".
+       (mail-source-keyword-map): Add "subdirs" for maildir.
+
+2000-05-14 16:19:28  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-scan-directory-mail-source-once): New variable.
+       (nnmail-get-new-mail): Use it.
+       * gnus-start.el (gnus-get-unread-articles): Ditto.
+
+2000-05-14 14:02:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-edit-article): Better support for
+       nndraft:drafts.
+       * nndraft.el (nndraft-request-replace-article): New function,
+       bind nnmail-file-coding-system.
+
+2000-05-14  Dave Love  <fx@gnu.org>
+
+       * nnheader.el: Replace uses of `fset' with `defalias'.
+       (jka-compr-compression-info-list): Only defvar when compiling.
+
+2000-05-14 12:30:28  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-netaddress-article): Refresh redirect.
+
+2000-05-13 20:41:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): w3 might not recognize utf-8.
+
+2000-05-13 16:49:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Translate &nbsp; to SP.
+
+2000-05-13 13:00:17  Robin S. Socha <robin@socha.net>
+
+       * message.el (message-bounce): Doc typo.
+
+2000-05-13 12:25:21  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-soup.el (gnus-soup-encoding-type): u is USENET news format.
+       (gnus-soup-store): Ditto.
+       (gnus-soup-send-packet): Ditto.
+       * nnsoup.el (nnsoup-replies-format-type): Ditto.
+       (nnsoup-dissect-buffer): Ditto.
+       (nnsoup-narrow-to-article): Ditto.
+       (nnsoup-make-active): Ditto
+
+2000-05-13 12:03:29  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mode): Two parameters for local-variable-p.
+
+2000-05-13 00:54:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-strip-list-identifiers): New function.
+       (message-reply): Use it and use message-strip-subject-re.
+       (message-followup): Ditto.
+       * gnus-art.el (article-hide-list-identifiers): Remove more.
+       * gnus-sum.el (gnus-summary-remove-list-identifiers): Ditto.
+
+2000-05-12 22:28:54  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Bind
+       mail-parset-charset and use non-numeric argument.
+
+2000-05-12 20:54:11  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-buffer-list): New variable.
+       (mml-generate-new-buffer): New function.
+       (mml-destroy-buffers): Ditto.
+       (mml-insert-mime): Use them.
+       * gnus-msg.el (gnus-setup-message): mml-buffer leaks.
+       * gnus-sum.el (gnus-summary-edit-article): Ditto.
+       * message.el (message-mode): Ditto.
+       * gnus-uu.el (gnus-uu-digest-headers): Keep MIME headers.
+       (gnus-uu-save-article): Support show-as-mml.
+       * message.el (message-forward): Ditto.
+
+2000-05-12 15:15:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-type-alist): mime-digest head-begin.
+       (nndoc-mime-digest-type-p): Locate article head precisely.
+       * mml.el (mml-generate-default-type): New variable.
+       (mml-generate-mime-1): Use it.
+       (mml-insert-mime-headers): Use it.
+       * gnus-uu.el (gnus-uu-digest-buffer): New variable.
+       (gnus-uu-digest-mail-forward): Use it and call message-forward
+       with argument digest.
+       (gnus-uu-save-article): Support message-forward-as-mime.
+       * message.el (message-forward): Add parameter digest.
+       * mm-decode.el (mm-dissect-default-type): New variable.
+       (mm-dissect-buffer): Use it.
+
+2000-05-11 11:08:03  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-parse-singlepart-with-multiple-charsets): Set space,
+       newline and paragraph to nil when got a non-ascii character. Test
+       paragraph before newline.
+
+2000-05-10 12:17:58  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-encode-region): Bind tab-width to 1. Set
+       limit to 76.
+
+2000-05-10 09:11:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-sid-strip): New function.
+       (nnslashdot-threaded-retrieve-headers): New format.
+       (nnslashdot-sane-retrieve-headers): Ditto.
+       (nnslashdot-request-article): Ditto.
+       (nnslashdot-threaded-retrieve-headers): Thread properly.
+       (nnslashdot-request-article): Be more lenient.
+       (nnslashdot-threaded-retrieve-headers): Regexp search.
+
+2000-05-09 13:23:50  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-with-article): Define it before use it.
+
+2000-05-08 22:34:19  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-supersede): Use mime-to-mml.
+       * mm-decode.el (mm-insert-part): Test the buffer if no encoding.
+
+2000-05-08 22:34:24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-group.el (gnus-group-list-cached): Don't use
+       `subst-char-in-string'.
+
+2000-05-08  Dave Love  <fx@gnu.org>
+
+       * pop3.el (pop3-open-server): Fix creating name of trace buffer.
+
+2000-05-08 01:07:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-interactively-view-part): Append %s if the
+       method is a single word.
+       * nnwarchive.el (nnwarchive-type-definition): Typo.
+
+2000-05-07 17:24:01  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-prepare-flat-list-dead-predicate): New
+       function.
+       (gnus-group-prepare-flat-predicate): Use it.
+       (gnus-group-list-cached): List dead groups.
+
+2000-05-07 10:50:02  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-decode-charset): Don't decode message with
+       format.
+
+2000-05-07  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * mailcap.el (mailcap-maybe-eval): Honor user request not to
+       evaluate the Lisp code.
+
+2000-05-06 17:40:20  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-wash-html): New function.
+       (gnus-article-wash-html): Bind.
+       (gnus-article-make-menu-bar): Menu item.
+       * gnus-sum.el (gnus-summary-wash-map): Bind 'h'.
+       (gnus-summary-make-menu-bar): Menu item.
+       * gnus.el: Autoload.
+
+2000-05-06  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * gnus-uu.el (gnus-uu-unshar-warning): New variable.
+       (gnus-uu-unshar-article): Use it.
+
+       * mailcap.el (mailcap-maybe-eval-warning): New variable.
+       (mailcap-maybe-eval): Use it.
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): Speling mistake
+       in docstring.
+
+       * mml.el (mml-generate-mime-1): Small comment.
+
+2000-05-05 12:27:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-de-base64-unreadable): New function.
+       (gnus-article-de-base64-unreadable): Bind.
+       (gnus-article-make-menu-bar): Menu item.
+       * gnus-sum.el (gnus-summary-wash-map): Bind '6' and 'Z'.
+       (gnus-summary-make-menu-bar): Menu item.
+       * gnus.el: Autoload.
+
+2000-05-05 10:32:27  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Remove en/disable multibyte.
+       (gnus-summary-select-article): Add en/disable multibyte.
+
+2000-05-05 02:47:23  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-edit-article): Enable multibyte.
+       (gnus-summary-edit-article): New feature: editing raw articles.
+
+2000-05-05 00:30:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-region): Insert a space before encoding.
+       Emacs MULE can not encode adjacent iso-2022-jp and cn-gb-2312.
+       * gnus-msg.el (gnus-summary-mail-forward): Use unibyte buffer.
+       Emacs MULE can not copy some 8bit characters in multibyte buffers.
+       * mm-decode.el (mm-insert-part): Ditto.
+
+2000-05-04 17:49:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-type-alist): Extend forward regexp.
+       (nndoc-forward-type-p): Ditto.
+
+2000-05-04 17:13:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-with-unibyte-current-buffer): Set the default
+       value of enable-multibyte-characters.
+
+2000-05-04 10:31:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): En/disable multibyte.
+
+2000-05-03  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el (gnus-article-xface-ring-internal)
+       (gnus-article-xface-ring-size): New variable.
+       (gnus-article-display-xface): Use them to cache data.  Don't try
+       to use XPM.  Set up binary coding for PBM's sake.
+
+2000-05-03 14:23:38  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-do-gcc): Set mail-parse-charset.
+       * gnus-int.el (gnus-request-accept-article): Ditto.
+       (gnus-request-replace-article): Ditto.
+       * mm-util.el (mm-mime-mule-charset-alist): Add a fake mule-charset.
+
+2000-05-03 14:11:23  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode): Test the validity of coding-system.
+
+2000-05-03 11:35:15  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Encode field by
+       field.
+       * mml.el (mml-to-mime): Use message-default-charset.
+       (mml-preview): Narrow to headers.
+       * message.el (message-send-mail): Use message-default-charset.
+       (message-send-news): Narrow to headers;
+       use message-default-charset.
+
+2000-05-03 08:09:14  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): A better junk
+       detect.
+       * mml.el (mml-parse-singlepart-with-multiple-charsets): Save
+       restriction.
+       (mml-parse-1): Warning message.
+       (mml-preview): Disable multibyte.
+
+2000-05-03  Dave Love  <fx@gnu.org>
+
+       * gnus.el (gnus-group-startup-message): Add newline before image.
+
+2000-05-02 21:34:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Check the coding-system.
+       * message.el (message-send-mail): Use unibyte-buffer.
+       (message-send-mail): Ditto.
+
+Mon May  1 15:09:46 2000  Lars Magne Ingebrigtsen  <lmi@quimbies.gnus.org>
+
+       * gnus.el: Gnus v5.8.6 is released.
+
+2000-05-01 07:45:43  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-parse-1): Set no-markup-p and warn to nil.
+
+2000-04-28 21:14:21  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-q-encoding-alist): Encode HTAB.
+
+2000-04-28 16:37:09  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially): Use forward-line.
+
+2000-04-28 16:01:09  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-button-menu): Use call-interactively.
+
+2000-04-28 15:30:17  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Ignore 0x1b.
+       (mml-insert-mime): No markup only for text/plain.
+       (mime-to-mml): Remove MIME headers.
+
+2000-04-28 14:23:14  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-preview): Set gnus-newsgroup-charset.
+       * rfc2047.el (rfc2047-encode-message-header): Encode non-ascii
+       as 8-bit.
+       * lpath.el: Fbind image functions.
+
+2000-04-28  Dave Love  <fx@gnu.org>
+
+       * gnus.el (gnus-group-startup-message): Maybe use image in Emacs
+       21.
+
+       * mailcap.el (mailcap-parse-mailcaps): Revert last change to
+       search order.  Use parse-colon-path and remove some redundancy.
+       Doc fix.
+       (mailcap-parse-mimetypes): Code consistently with
+       mailcap-parse-mailcaps.  Doc fix.
+
+       * gnus-start.el (gnus-unload): Iterate over `features', not
+       `load-history'.
+
+2000-04-28 09:52:21  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-parse-1): Don't create blank parts.
+       (mml-read-part): Fix mml tag.
+       (mml-insert-mime): Convert message/rfc822.
+       (mml-insert-mml-markup): Add mmlp parameter.
+
+2000-04-28 01:16:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially): Remove CTE.
+
+2000-04-28 00:31:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el: Fbind put-image for XEmacs.
+       * mm-view.el (mm-inline-image): Fset it.
+
+2000-04-27 23:23:37  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-type-alist): Change forward regexp.
+
+2000-04-27 21:57:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially-limit): Change the
+       default value.
+
+2000-04-27 21:53:32  Erik Toubro Nielsen <erik@ifad.dk>
+
+       * gnus-util.el (gnus-extract-address-components): Name might be
+       "".
+
+2000-04-27 20:32:06  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Use ARG.
+       (gnus-summary-post-forward): Ditto.
+       * message.el (message-forward-show-mml): New variable.
+       (message-forward): Use it.
+       * mml.el (mml-parse-1): Add tag mml.
+       (mml-read-part): Ditto.
+       (mml-generate-mime): Support reentance.
+       (mml-generate-mime-1): Support mml tag.
+
+2000-04-27  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el: Don't bother to require custom, browse-url.
+       (gnus-article-x-face-command): Include gnus-article-display-xface.
+
+       * gnus-ems.el: Assume only (X)Emacs 20+.  Simplify XEmacs checks.
+       Use defalias, not fset.
+       (gnus-article-display-xface): New function.
+
+       * mm-view.el (mm-inline-image-emacs): Use put-image, remove-images.
+
+       * mm-decode.el: Small doc fixes.  Require cl when compiling.
+       (mm-xemacs-p): Deleted.
+       (mm-get-image-emacs, mm-get-image-xemacs): Deleted.
+       (mm-get-image): Amalgamate Emacs and XEmacs code here; for Emacs,
+       use create-image and don't special-case xbm.
+       (mm-valid-image-format-p): Use display-graphic-p.
+
+2000-04-27 15:27:54  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially-limit): New variable.
+       (message-send-mail-partially): New function.
+       (message-send-mail): Use it.
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Remove
+       all blank lines inside of base64.
+       * mm-partial.el (mm-inline-partial): Add an option. Remove tail
+       blank lines.
+
+2000-04-27 10:03:36  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-insert-tag): Match more special characters.
+
+2000-04-27 09:06:29  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-bug): Avoid attaching the external buffer.
+
+2000-04-27 00:58:43  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-inline-media-tests): Add message/partial.
+       (mm-inlined-types): Ditto.
+       * mm-partial.el: New file.
+
+2000-04-27  Dave Love  <fx@gnu.org>
+
+       * mailcap.el (mailcap-mime-data): Fix octet-stream syntax -- might
+       matter in Emacs 21.
+
+2000-04-26  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * mm-bodies.el (mm-encode-body): Remove reference to
+       mm-default-charset in comment.
+
+2000-04-24 00:56:00  Bj\e,Av\e(Brn Torkelsson  <torkel@hpc2n.umu.se>
+
+       * rfc2047.el (rfc2047-encode-message-header): Fixing typo.
+
+2000-04-26 12:27:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-send): Move gnus-draft-setup inside of
+       let.
+
+2000-04-26 12:26:10  Pavel Janik ml. <Pavel.Janik@inet.cz>
+
+       * gnus-draft.el (gnus-draft-setup): Fix comments.
+
+2000-04-26 10:06:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmbox.el (nnmbox-create-mbox): Use nnmbox-file-coding-system,
+       if nnmbox-file-coding-system-for-write is nil.
+
+2000-04-26 02:17:44  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Just remove the
+       header if nil.
+
+2000-04-26 00:23:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): Insert directly if decoded.
+       * mml.el (autoload): Typo.
+
+2000-04-25 22:46:36  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-preview): Set up posting-charset.
+       * gnus-msg.el (gnus-group-posting-charset-alist): Add koi8-r.
+
+2000-04-25 21:23:54  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Fix yahoo mail.
+
+2000-04-25 20:12:17  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-dissect-region): Don't include LWS ahead of
+       word if not necessary.
+       (rfc2047-encode-region): Put space between encoded words.
+
+2000-04-24 21:11:48  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-netrc-machine): Another default to nntp.
+
+2000-04-24 18:14:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-setup): Restore mml only when
+       required.
+       (gnus-draft-edit-message): Require restoration.
+
+2000-04-24 16:51:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-headers): Copy gnus-newsgrou-scored
+       back.
+
+2000-04-24 16:01:15  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treat-article): Make sure that the summary
+       buffer is live.
+
+2000-04-24 15:42:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-parse-mailcaps): Reorder.
+       (mailcap-parse-mailcap): Backwards parsing.
+       (mailcap-possible-viewers): Remove nreverse.
+       (mailcap-mime-info): Ditto.
+       (mailcap-add-mailcap-entry): Keep alternative viewer.
+
+Mon Apr 24 21:12:06 2000  Lars Magne Ingebrigtsen  <lmi@quimbies.gnus.org>
+
+       * gnus.el: Gnus v5.8.5 is released.
+
+2000-04-24 16:29:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * rfc2047.el (rfc2047-header-encoding-alist): Doc fix.
+
+       * gnus-util.el (gnus-netrc-machine): Default to nntp.
+
+       * mml.el (mml-generate-mime-1): Force 8bit on message/rfc822.
+
+2000-04-23 23:27:25  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-message): Disable prepare-hook.
+
+2000-04-23 00:32:32  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el: Fix copyright statements.
+
+       * gnus-sum.el (gnus-alter-articles-to-read-function): New
+       variable.
+       (gnus-articles-to-read): Use it.
+
+       * message.el (message-get-reply-headers): Bind free variable.
+
+2000-04-23 01:14:28  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-get-reply-headers): Fix to-address.
+
+2000-04-22 22:51:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Hotmail fix. Add a debug function.
+
+2000-04-23 00:32:32  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (t): M-down and M-up.
+
+2000-04-22 20:22:03  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el: Doc fix.
+
+2000-04-22 10:25:56  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-egroups-article): Remove < and >.
+
+2000-04-22 14:25:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnweb.el (nnweb-dejanews-create-mapping): Remove the context
+       string.
+       (nnweb-request-group): Don't scan twice.
+       (nnweb-request-scan): Don't nix out the hashtb.
+
+       * message.el (message-get-reply-headers): Return a value.
+
+2000-04-22 14:12:41  David Aspinwall  <aspinwall@TimesTen.com>
+
+       * gnus-art.el (gnus-button-url-regexp): New value to match naked
+       urls.
+
+2000-04-22 01:23:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-cache.el (gnus-summary-insert-cached-articles): Reverse the
+       order messages are inserted.
+
+       * mml.el (mml-generate-mime-1): rfc2047-encode the heads of
+       message/rfc822 parts.
+
+       * gnus-art.el (gnus-article-read-summary-keys): Check for
+       numerical values.
+
+       * message.el (message-get-headers): Made into own function.
+       (message-reply): Use it.
+       (message-get-reply-headers): Renamed.
+       (message-widen-reply): New command.
+
+2000-04-21 20:52:09  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-retrieve-data): Report the error and return nil.
+
+2000-04-21 19:38:43  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Don't remove
+       non-base64 text at the end if not found.
+
+2000-03-01  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-sum.el (gnus-read-move-group-name):
+       (gnus-summary-move-article): Use `gnus-group-method' to find out
+       what method the manually entered group belong to.
+       `gnus-group-name-to-method' doesn't return any method parameters
+       and `gnus-find-method-for-group' uses `gnus-group-name-to-method'
+       for new groups so they wouldn't work.
+
+2000-04-21 22:27:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Allow nil values to
+       override.
+
+2000-04-21 21:58:20  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-cache-insert): Does some stuff that is
+       probably good to do, or something.  I dunno.  I just write these
+       ChangeLog entries, and my name is Lars.
+
+1999-12-06  Hrvoje Niksic  <hniksic@iskon.hr>
+
+       * message.el (message-caesar-region): Use translate-region.
+
+2000-04-21 21:20:32  Mike Fabian  <mike.fabian@gmx.de>
+
+       * gnus-group.el (gnus-group-catchup-current): Doc fix.
+
+2000-04-21 20:36:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-setup-buffer): Don't kill local
+       variables, because that makes Emacs flash.
+
+       * gnus-group.el (gnus-group-insert-group-line): Don't call
+       gnus-group-add-icon unconditionally.
+
+       * gnus-xmas.el (gnus-group-add-icon): Moved here.
+
+       * gnus-group.el (gnus-group-glyph-directory): Don't depend on
+       xmas.
+       (gnus-group-glyph-directory): Removed.
+
+2000-04-21 20:26:23  Jaap-Henk Hoepman  <hoepman@cs.utwente.nl>
+
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't do stuff if
+       gnus-newsgroup-name is "".
+
+2000-04-21  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * mm-util.el (mm-mime-mule-charset-alist): Add support for UTF-8
+       in conjunction with MULE-UCS.
+
+1999-12-13  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * rfc2047.el (rfc2047-fold-region): Don't use the same break twice.
+
+1999-12-14 04:14:44  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (last, mapcon, member-if, union): New compiler
+       macros for emulating cl functions.
+
+1999-12-21  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * message.el (message-shorten-references): Only cater to broken
+       INN for news. This caters for broken smtpd.
+
+2000-04-21 18:20:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mailcap.el (mailcap-mime-info): Use the first match; not the
+       last.
+
+       * gnus-agent.el (gnus-category-kill): Save the category list.
+
+2000-04-21 16:41:50  Chris Brierley  <brierley@pobox.com>
+
+       * gnus-sum.el (gnus-summary-move-article): Do something or other.
+
+2000-04-21 16:07:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-add-icon): Fixed indentation.
+
+2000-04-21 16:07:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-add-icon): Fixed indentation.
+
+2000-04-21 10:43:16  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-prepare-flat-predicate): New function.
+       (gnus-group-list-cached): Use it.
+
+2000-04-21 16:07:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el: Update all the copyright notices.
+
+2000-04-21 15:38:06  Vladimir Volovich  <vvv@vvv.vsu.ru>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Remove
+       non-base64 text at the end.
+
+2000-04-21 15:21:30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-bodies.el (mm-body-charset-encoding-alist): defcustomized.
+
+2000-04-21 15:15:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el: Don't autoload cancel-function-timers.
+
+       * message.el (message-fetch-field): Fold case.
+
+2000-04-21 15:11:09  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-forward-before-signature): New variable.
+
+2000-04-21 15:10:31  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+       * gnus-mlspl.el: Fix stuff.
+
+2000-04-21 14:41:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-update-article-line): Don't hide
+       subjects when unthreaded.
+
+2000-04-21 14:11:39  David S. Goldberg  <dsg@mitre.org>
+
+       * gnus-art.el (gnus-boring-article-headers): Work on long CCs as
+       well.
+
+2000-04-21 14:06:43  Rui Zhu  <sprache@iname.com>
+
+       * gnus-art.el (gnus-article-mode): Fix variable name.
+
+2000-04-21 13:54:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el: Fix autoload.
+
+       * flow-fill.el (flow-fill): Fix provide.
+
+       * gnus-draft.el (gnus-draft-send): Bind message-setup-hook to
+       nil.
+
+2000-04-20 22:24:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-windows): Revert to switch-to-buffer.
+
+2000-04-21 05:22:18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+        * gnus-util.el (gnus-netrc-machine): Didn't work.
+
+2000-04-20 21:22:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-setup): Restore to mml.
+
+2000-04-21 01:24:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * flow-fill.el: Renamed from fill-flowed.
+
+       * message.el (message-forward-ignored-headers): Default to
+       removing CTE.
+
+2000-04-21 00:48:48    <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-mode): Don't fill headers.
+
+2000-04-20 23:12:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-pipe-buffer-body): Use shell
+
+2000-02-21  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * nnvirtual.el (nnvirtual-request-article):
+       Bind gnus-override-method to nil.
+       (nnvirtual-request-update-mark): Don't update mark when
+       article is not there.
+
+2000-04-20 16:35:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-dissect): Check forwarded message.
+
+2000-04-20 21:17:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-util.el (gnus-parse-netrc): Allow "port".
+       (gnus-netrc-machine): Take a port param.
+       (gnus-netrc-machine):
+
+       * gnus-art.el (gnus-request-article-this-buffer): Allow
+       re-selecting referenced articles.
+
+       * message.el (message-cancel-news): Allow editing.
+       (message-cancel-message): Add newline.
+
+2000-04-20 21:03:54  William M. Perry  <wmperry@aventail.com>
+
+       * mm-view.el (mm-inline-image-emacs): New function.
+
+2000-04-20 20:44:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-delete-incoming): Change default in
+       cvs.
+
+2000-04-20 20:43:34  Kim-Minh Kaplan  <kmkaplan@vocatex.fr>
+
+       * gnus-art.el (gnus-mime-view-part-as-type-internal): New
+       function.
+
+2000-04-20 14:45:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnml.el (nnml-request-expire-articles): Use it.
+
+       * nnmail.el (nnmail-expiry-target): New variable.
+       (nnmail-expiry-target-group): New function.
+
+2000-04-20 02:36:31  Emerick Rogul  <emerick@cs.bu.edu>
+
+       * message.el (message-forward): Add non-MIME separators.
+
+2000-04-20 02:25:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-generate-headers): Respect the syntax check
+       spec.
+
+       * gnus-sum.el (gnus-remove-thread-1): Show thread.
+       (gnus-remove-thread): Don't show all threads.
+
+Thu Apr 20 01:39:25 2000  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v5.8.4 is released.
+
+2000-04-19  Dave Love  <fx@gnu.org>
+
+       * mailcap.el (mailcap-parse-mimetypes): Add ...mime.types.
+
+2000-04-18 12:28:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-type-definition): New egroups html.
+       (nnwarchive-egroups-*): Ditto.
+       (nnwarchive-url): Unibyte buffer and single line cookie.
+
+2000-04-14 18:50:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-char-or-char-int-p): New alias.
+       * nnweb.el (nnweb-decode-entities): Check the validity of numeric
+       entities.
+
+2000-04-10   Daiki Ueno  <ueno@unixuser.org>
+
+        * lisp/imap.el (imap-body-lines): Check Content-Type: of the
+        article case insensitively.
+
+2000-04-10 20:35:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-webmail): Use the default
+       password provided in mail-sources; use webmail:subtype:user as
+       the key.
+
+2000-04-10 20:35:46  John Wiegley <johnw@gnu.org>
+
+       * mail-source.el (mail-source-fetch-webmail): Use
+       mail-source-password-cache.
+
+2000-04-09 18:13:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Add netscape mail and fix HotMail mail.
+
+2000-04-08  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el (imap-kerberos4-open): Work with recent `imtest's.
+
+2000-04-02  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-request-article): Use BODY.PEEK[] instead of
+       RFC822.PEEK if server support IMAP4rev1.
+       (nnimap-request-body): Use BODY.PEEK[TEXT] instead of
+       RFC822.TEXT.PEEK if server support IMAP4rev1.
+       (nnimap-request-head): Use BODY.PEEK[HEADER] instead of
+       RFC822.HEADER if server support IMAP4rev1.
+       (nnimap-request-article-part): Support bodydetail in response
+       data.
+
+2000-03-11  Simon Josefsson  <jas@pdc.kth.se>
+
+       * fill-flowed.el: New file.
+
+       * mm-decode.el (mm-dissect-singlepart): Create a MIME handle for
+       text/plain parts with `format' parameters.
+
+       * mm-view.el (autoload): Autoload fill-flowed.
+       (mm-inline-text): For "plain" parts with a format=flowed
+       parameter, call `fill-flowed'.
+
+2000-03-21 10:32:44  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-list): Fudge new-style
+       slashdot ids.
+
+2000-03-20 00:12:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-list): Use the new slashdot
+       format.
+
+2000-03-16  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el: GSSAPI support, support kerberos 4 with Cyrus v1.6.x
+       `imtest' too.
+       (imap-kerberos4-program): Renamed from `imap-imtest-program'.
+       (imap-gssapi-program): New variable.
+       (imap-streams): Add gssapi.
+       (imap-stream-alist): Ditto.
+       (imap-authenticators): Ditto.
+       (imap-authenticator-alist): Ditto.
+       (imap-kerberos4-stream-p): Rename from `imap-kerberos4s-p'.
+       (imap-kerberos4-open): Loop over imtest programs, support Cyrus
+       1.6.x `imtest' syntax.
+       (imap-gssapi-stream-p): New function.
+       (imap-gssapi-open): Ditto.
+       (imap-gssapi-auth-p): Ditto.
+       (imap-gssapi-auth): Ditto.
+       (imap-kerberos4-auth-p): Renamed from `imap-kerberos4a-p'.
+       (imap-send-command): Use buffer-local `imap-client-eol' value.
+
+       * nnimap.el (nnimap-retrieve-headers-progress): Fold continuation
+       lines and turn TAB into SPC before parsing.
+
+2000-03-15  Simon Josefsson <jas@pdc.kth.se>
+
+       * nnheader.el (nnheader-group-pathname): Make sure to return a
+       directory.
+       * nnmail.el (nnmail-group-pathname): Ditto.
+
+2000-02-08  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nnmail.el (nnmail-fix-eudora-headers): Fix `In-Reply-To' too, it
+       might split in the middle of a message-id.
+
+2000-03-13 13:51:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-server-kill-server): Offer to kill all the
+       groups from the server.
+
+       * gnus-sum.el (gnus-summary-save-parts): Fix interactive spec.
+       (gnus-summary-toggle-header): Update the wash status.
+
+       * gnus-uu.el ((gnus-uu-extract-map "X" gnus-summary-mode-map)):
+       Moved here.
+
+       * gnus-agent.el (gnus-agent-save-group-info): Respect old
+       setting.
+
+       * nnmail.el (nnmail-get-active): Use it.
+       (nnmail-parse-active): New function.
+
+       * mm-view.el (mm-inline-text): Support the new version of
+       vcard.el.
+
+       * gnus-sum.el (gnus-summary-move-article): Only delete article
+       when moving junk.
+       (gnus-deaden-summary): Bury the buffer.
+
+       * nnmail.el (nnmail-group-pathname): Ditto.
+
+       * nnheader.el (nnheader-group-pathname): Use expand-file-name.
+
+2000-03-13 20:23:06  Christoph Rohland  <hans-christoph.rohland@sap.com>
+
+       * rfc2047.el (rfc2047-encode-message-header): Encode no matter
+       whether Mule.
+
+2000-03-10 14:57:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-send-mail): Protect against unloaded Gnus.
+
+       * gnus-topic.el (gnus-topic-update-topic-line): Don't update the
+       parent.
+       (gnus-topic-update-topic-line): Yes, do.
+       (gnus-topic-goto-missing-group): Tally the correct number of
+       unread articles before inserting the topic line.
+
+2000-03-01 09:55:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Ignore errors.
+
+2000-02-13 13:53:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-decode.el (mm-dissect-buffer): Ditto.
+
+       * gnus-art.el (article-decode-charset): Strip CTE.
+
+       * ietf-drums.el (ietf-drums-strip): New function.
+
+       * gnus-sum.el (gnus-summary-move-article): Don't use the prefix
+       when prompting in read-only groups.
+
+2000-02-23  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el (imap-send-command): Change EOL-chars when
+       `imap-client-eol' differs from default, not only for kerberos4.
+       (imap-mailbox-status): Get encoded mailbox's status.
+
+2000-02-19  Simon Josefsson  <jas@pdc.kth.se>
+
+       * mail-source.el (mail-source-fetch-imap): Copy `imap-password'
+       into `mail-source-password-cache'.
+
+2000-02-17  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * mm-util.el (mm-mime-charset): Check for presence of
+       `coding-system-get' and `get-charset-property' (recent XEmacs has
+       the former, but not the latter).
+
+2000-01-28  Dave Love  <fx@gnu.org>
+
+       * message.el (message-check-news-header-syntax): Fix typo
+       `newsgroyps'.
+       (message-talkative-question): Put temp buffer in fundamental-mode.
+       (message-recover): Use fundamental-mode in the right buffer.
+
+       * nnmail.el (nnmail-split-history): Use fundamental-mode in the
+       right buffer.
+
+2000-01-26 12:01:18  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-decode-region): Add charset parameter.
+       (quoted-printable-decode-string): Ditto.
+
+       * gnus-art.el (article-de-quoted-unreadable): Use it.
+
+2000-01-21  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-split-predicate): New variable.
+       (nnimap-split-articles): Use it.
+
+2000-01-20  Simon Josefsson  <jas@pdc.kth.se>
+
+       * utf7.el: Change email address.
+
+2000-01-18 22:03:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-catchup): Purge split history.
+
+2000-01-14 02:43:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-generate-active): Support extended group name.
+       (nnmail-get-active): Ditto.
+
+2000-01-13 15:16:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-write-active): Since no prefix in
+       group names, don't remove anything.
+
+2000-01-13 15:10:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-my-deja-open): My-deja changes.
+
+2000-01-13  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-retrieve-headers-progress): Create xref field.
+
+2000-01-10 23:35:33  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Translate full path.
+
+2000-01-09 22:52:35  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-other-frame): Fix typo.
+
+1999-06-25  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+       * gnus-cus.el (gnus-group-customize): Fix typo.
+
+2000-01-08 08:36:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnweb.el (nnweb-insert): Simplified.
+
+2000-01-06 18:32:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-mode-map): "e" is
+       gnus-summary-edit-article.
+
+2000-01-06 18:25:37  Jari Aalto  <jari.aalto@poboxes.com>
+
+       * mailcap.el (mailcap-mime-extensions): Add .diff.
+
+2000-01-06 00:06:40 Kim-Minh Kaplan <kmkaplan@vocatex.fr>
+
+        * mm-decode.el (mm-mailcap-command): handle "%%" and the case where
+        there is no "%s" in the method.
+
+2000-01-08 21:01:04  Kim-Minh Kaplan <kmkaplan@vocatex.fr>
+
+       * gnus-sum.el (gnus-summary-select-article): Return 'old.
+
+2000-01-06 13:41:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnfolder.el (nnfolder-read-folder): Use nnfolder-save-buffer.
+
+       * gnus.el: Really always pop up a new frame.
+
+       * parse-time.el (parse-time-rules): Allow 100-110 to be
+       2000-2010.
+
+       * time-date.el (date-to-time): Don't use timezone.
+
+2000-01-06  Dave Love  <fx@gnu.org>
+
+       * time-date.el: Add keywords.
+       (date-to-time): Add autoload cookie.  Canonicalize with
+       timezone-make-date-arpa-standard.
+       (time-to-seconds): Avoid caddr.
+       (safe-date-to-time): Add autoload cookie.
+
+       * base64.el: Require cl when compiling.
+
+2000-01-05  BrYan P. Johnson  <beej@mindspring.net>
+
+       * gnus-group.el (gnus-group-line-format-alist): Added %E for
+       eyecandy.
+       (gnus-group-insert-group-line): Now groks %E and inserts icon in
+       group line using gnus-group-add-icon.
+       (gnus-group-icons): Added customize group.
+       (gnus-group-icon-list): Added variable.
+       (gnus-group-glyph-directory): Added variable.
+       (gnus-group-icon-cache): Added variable.
+       (gnus-group-running-xemacs): Added variable.
+       (gnus-group-add-icon): Added function. Add an icon to the current
+       line according to gnus-group-icon-list.
+       (gnus-group-icon-create-glyph): Added function.
+
+2000-01-05 17:31:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-select-article): Return whether we
+       selected something new.
+       (gnus-summary-search-article): Start searching at the window
+       point.
+
+       * gnus-group.el (gnus-fetch-group): Complete over
+       gnus-active-hashtb.
+
+Wed Jan  5 17:06:41 2000  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v5.8.3 is released.
+
+2000-01-05 15:56:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-preserve-marks): New variable.
+       (gnus-summary-move-article): Use it.
+       (gnus-group-charset-alist): Added more entries.
+
+2000-01-03 01:18:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-decode.el (mm-inline-override-types): Removed duplicate.
+
+       * gnus-uu.el (gnus-uu-mark-over): Use gnus-summary-default-score
+       as the default score.
+
+       * gnus-score.el (gnus-score-delta-default): Changed name.
+
+2000-01-04  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el (imap-parse-literal):
+       (imap-parse-flag-list): Don't care about props.
+       (imap-parse-string): Handle quoted characters.
+
+2000-01-02 08:37:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-goto-unread): Doc fix.
+       (gnus-summary-mark-article): Doc fix.
+       (gnus-summary-mark-forward): Doc fix.
+       (t): Changed keystroke for gnus-summary-customize-parameters.
+
+       * gnus-art.el (gnus-article-mode-map): Use gnus-article-edit for
+       "e".
+       (gnus-article-mode-map): No, don't.
+
+       * gnus-sum.el (gnus-summary-next-subject): Don't show the thread
+       of the final article.
+
+       * mm-decode.el (mm-interactively-view-part): Error on no method.
+
+2000-01-02 06:10:32  Stefan Monnier  <monnier+gnu/emacs@tequila.cs.yale.edu>
+
+       * gnus-score.el (gnus-score-insert-help): Something.
+
+       * gnus-art.el (gnus-button-alist): Exclude < from <URL:
+
+       * gnus-win.el (gnus-configure-frame): Ditto.
+
+       * gnus-mh.el (gnus-summary-save-in-folder): Use
+       with-current-buffer.
+
+2000-01-02 05:00:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnwarchive.el: Changed file perms.
+
+1999-12-19 21:42:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-delete-groups): New command.
+       (gnus-group-delete-group): Extra no-prompt parameters.
+
+1999-12-14 10:18:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-article): Translate <br> into
+       <p>.
+
+1999-12-28 12:20:18  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-hotmail-article): Don't insert message id.
+
+1999-12-28  Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro\e,A_\e(Bjohann)
+
+       * nnimap.el (nnimap-split-fancy): New variable.
+       (nnimap-split-fancy): New function.
+
+1999-12-28  Simon Josefsson  <jas@pdc.kth.se>
+
+       (nnimap-split-rule): Document symbol value.
+
+1999-12-28  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-retrieve-headers-progress): Let
+       `nnheader-parse-head' parse article.
+       (nnimap-retrieve-headers-from-server): Don't request ENVELOPE,
+       request headers needed by `nnheader-parse-head'.
+
+1999-12-23  Florian Weimer  <fw@s.netic.de>
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): Correct default
+       value (crosspostings are handled), improve documentation.
+
+       * smiley.el: Declare file coding system as iso-8859-1.
+
+       * nnultimate.el: Dito.
+
+       * message.el: Dito.
+
+       * gnus-cite.el: Dito.
+
+       * gnus-spec.el: Dito.
+
+1999-12-21  Florian Weimer  <fw@s.netic.de>
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): New layout.
+       (gnus-setup-message): No longer make `message-posting-charset'
+       buffer-local.
+       (gnus-setup-posting-charset): Reflect the new layout of
+       `gnus-group-posting-charset-alist' and `message-posting-charset'.
+
+       * message.el (message-send-mail): Bind `message-this-is-mail' and
+       `message-posting-charset'.
+       (message-send-news): Dito, and honour new layout of
+       `message-posting-charset'.
+       (message-encode-message-body): Ignore `message-posting-charset'.
+
+       * mm-bodies.el (mm-body-encoding): Consider
+       `message-posting-charset' when deciding whether to use 8bit.
+
+       * rfc2047.el (rfc2047-encode-message-header): Back out change.
+       (rfc2047-encodable-p): Now solely for headers; use
+       `message-posting-charset'.
+
+1999-12-20 14:10:39  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-type-definition): Set default value.
+
+1999-12-19 22:49:13  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnagent.el (nnagent-server-opened): Optional.
+       (nnagent-status-message): Optional.
+
+1999-12-19  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-cite.el (gnus-article-toggle-cited-text): Restore beg and
+       end (referenced by instructions in
+       `gnus-cited-opened-text-button-line-format-alist').
+
+1999-12-18  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el (imap-starttls-open): Typo.
+
+1999-12-18 16:43:37  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-after): Non-MULE case.
+       * mail-prsvr.el (mail-parse-mule-charset): New variable.
+       * rfc2047.el (rfc2047-dissect-region): Bind it.
+
+1999-12-18  Florian Weimer  <fw@s.netic.de>
+
+       * mml.el (mml-generate-multipart-alist): Correct default value.
+
+       * mm-encode.el (mm-use-ultra-safe-encoding): New variable.
+       (mm-safer-encoding): New function.
+       (mm-content-transfer-encoding): Use both.
+
+       * mm-bodies.el (mm-body-encoding): Use mm-use-ultra-safe-encoding.
+       * qp.el (quoted-printable-encode-region): Dito.
+
+1999-12-18 14:08:48  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-hotmail-article): Snarf the raw file.
+
+1999-12-18 14:08:12  Victor S. Miller  <victor@idaccr.org>
+
+       * webmail.el (webmail-hotmail-list): raw=0.
+
+1999-12-18 11:14:51  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-enter-history): Back-compatible in
+       group name.
+
+1999-12-18 11:02:00  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-expire): Convert to symbol if stringp.
+
+1999-12-18  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el: Don't autoload digest-md5.
+       (imap-starttls-open): Bind coding-system-for-{read,write}.
+       (imap-starttls-p): Check if we can find starttls.el.
+       (imap-digest-md5-p): Check if we can find digest-md5.el.
+
+1999-12-17   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * base64.el (base64-encode-string): Accept 2nd argument
+       `no-line-break'.
+
+       * imap.el: Require `digest-md5' when compiling; add autoload
+       settings for `digest-md5-parse-digest-challenge',
+       `digest-md5-digest-response', `starttls-open-stream' and
+       `starttls-negotiate'.
+       (imap-authenticators): Add `digest-md5'.
+       (imap-authenticator-alist): Setup for `digest-md5'.
+       (imap-digest-md5-p): New function.
+       (imap-digest-md5-auth): New function.
+       (imap-stream-alist): Add STARTTLS entry.
+       (imap-starttls-p): New function.
+       (imap-starttls-open): New function.
+
+1999-12-18 01:08:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-enter-history): Bad group name.
+
+1999-12-17 19:36:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-dissect-region): Use mapcar instead of
+       string-to-x function.
+
+1999-12-17 13:08:54  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-fold-region): Fold a line more than once.
+
+1999-12-17 11:54:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Enhance hotmail-snarf.
+
+1999-12-17 10:38:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-dissect-region): Rewrite.
+
+1999-12-16 22:59:22  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-hotmail-list): Search no-error.
+
+1999-12-15 22:07:15  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el: Support nov-is-evil.
+       * gnus-bcklg.el (gnus-backlog-request-article): Buffer is optional.
+       Set it if non-nil.
+       * gnus-agent.el (gnus-agent-fetch-articles): Use it.
+
+1999-12-15 08:55:19  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnagent.el (nnagent-server-opened): Redefine.
+       (nnagent-status-message): Ditto.
+
+1999-12-14 23:37:44  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc1843.el (rfc1843-decode-region): Use
+       buffer-substring-no-properties.
+       * gnus-art.el (article-decode-HZ): New function.
+
+1999-12-14 22:07:26  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-translate-file-chars): Only in full path.
+
+1999-12-14 16:21:45  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): mail-parse-charset is a
+       MIME charset not a MULE charset.
+
+1999-12-14 15:08:03  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ems.el: Translate more ugly characters.
+       * nnheader.el (nnheader-translate-file-chars): Don't translate
+       the second ':'.
+
+1999-12-14 10:40:33  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-request-article-this-buffer): Use all refer
+       method if cannot find the article.
+
+1999-12-14 01:13:50  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-request-article-this-buffer): Don't use refer
+       method if overrided.
+
+1999-12-13 23:38:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-webmail): Parameter
+       dontexpunge.
+
+1999-12-13 23:31:17  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Support my-deja. Better error report.
+
+1999-12-13 18:59:33  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-date-to-date): Error proof when input
+       is bad.
+       * gnus-sum.el (gnus-list-of-unread-articles): When (car read)
+       is not 1.
+
+1999-12-13 18:22:08  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-request-article): A space.
+
+1999-12-13 17:20:25  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnagent.el: Support different backend with same name.
+
+1999-12-13 13:14:42  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers): Support
+       archived group.
+       (nnslashdot-sane-retrieve-headers): Ditto.
+       (nnslashdot-request-article): Ditto.
+
+1999-12-13 11:41:32  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-insert): Narrow to point.
+
+1999-12-13 10:59:42  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-insert): Follow refresh url.
+       * nnslashdot.el: Use it.
+
+1999-12-13 10:39:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-decode-entities): Decode numerical entities.
+       (nnweb-decode-entities-string): New function.
+
+       * nnwarchive.el (nnwarchive-decode-entities-string): Rename to
+       nnweb-* and move to nnweb.el.
+       * nnwarchive.el: Use nnweb-decode-entities, etc.
+       * webmail.el: Ditto.
+
+       * nnslashdot.el: Use nnweb-decode-entities-string.
+       (nnslashdot-decode-entities): Remove.
+
+1999-12-13 10:40:56  Eric Marsden <emarsden@mail.dotcom.fr>
+
+       * nnslashdot.el: Decode entities.
+
+1999-12-12  Dave Love  <fx@gnu.org>
+
+       * gnus-agent.el (gnus-category-edit-groups)
+       (gnus-category-edit-score, gnus-category-edit-predicate): Replace
+       expansion of setf, fixed.
+
+1999-12-12 12:50:30  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el: Revoke last Dave Love's patch, because of
+       incompatibility of XEmacs.
+
+1999-12-12 12:27:03  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el: Change headers.
+       * rfc1843.el: Ditto.
+       * uudecode.el: Ditto.
+
+1999-12-07  Dave Love  <fx@gnu.org>
+
+       * gnus-agent.el (gnus-category-edit-predicate)
+       (gnus-category-edit-score, gnus-category-edit-score): Expand setf
+       inside backquote to avoid it at runtime.
+
+1999-12-07  Dave Love  <fx@gnu.org>
+
+       * binhex.el: Require cl when compiling.
+
+1999-12-04  Dave Love  <fx@gnu.org>
+
+       * gnus-cus.el (gnus-group-parameters): Allow nil for banner.
+
+1999-12-04  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-delete-duplicates): New function.
+       (mm-write-region): Use it.
+
+       * mml.el (mml-minibuffer-read-type): Use mm-delete-duplicates.
+
+       * mailcap.el (mailcap-mime-types): Require mm-util.  Use
+       mm-delete-duplicates.
+
+       * imap.el (imap-open, imap-debug): Avoid mapc.
+
+       * nnvirtual.el (nnvirtual-create-mapping): Likewise.
+
+       * gnus-sum.el (gnus-summary-exit-no-update): Avoid copy-list.
+       (gnus-multi-decode-encoded-word-string): Avoid mapc.
+
+       * gnus-start.el (gnus-site-init-file): Avoid ignore-errors at
+       runtime.
+
+       * gnus.el (gnus-select-method): Likewise.
+
+       * nnheader.el (nnheader-nov-read-integer): Likewise.
+
+       * mm-view.el (mm-inline-message): Require cl when compiling.
+       Avoid ignore-errors at runtime.
+       (mm-inline-text): Avoid mapc.
+
+1999-12-12 10:36:51  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-decode-charset): Widen is bad.
+
+1999-12-12 10:17:42  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-after): `charset-after' may not be defined.
+
+1999-12-12  Florian Weimer  <fw@s.netic.de>
+
+       * rfc2047.el (rfc2047-encodable-p): New parameter header used to
+       indicate that only US-ASCII is permitted.
+       (rfc2047-encode-message-header): Use it.  Now, Gnus should never
+       use unencoded 8-bit characters in message headers.
+
+1999-12-12 03:08:15  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * ietf-drums.el (ietf-drums-narrow-to-header): Make it work with
+       CRLF.
+
+1999-12-11 14:42:26  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el: Require url-cookie.
+
+1999-12-11 14:21:23  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-make-caesar-translation-table): A
+       new function to make modified caesar table.
+       (nnwarchive-from-r13): Use it.
+       (nnwarchive-mail-archive-article): Improved.
+
+1999-12-11 12:30:20  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-url): Use mm-with-unibyte-current-buffer.
+
+1999-12-10 16:22:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-request-article): Return cons.
+
+1999-12-10 16:06:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-setup-default-charset): Typo.
+
+1999-12-10 12:14:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-with-unibyte): New macro.
+       * nnweb.el (nnweb-init): Use it.
+
+1999-12-09 20:39:49  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-after): New function.
+       (mm-find-mime-charset-region): Set charsets after
+       delete-duplicates and use find-coding-systems-region.
+       (mm-find-charset-region): Remove composition.
+
+       * mm-bodies.el (mm-encode-body): Use mm-charset-after.
+
+       * mml.el (mml-parse-singlepart-with-multiple-charsets): Ditto.
+
+1999-12-09 17:47:56  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-mime-charset-region): Revoke last change.
+       * mml.el (mml-confirmation-set): New variable.
+       (mml-parse-1): Ask user to confirm.
+
+1999-12-09  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-start.el (gnus-get-unread-articles): Make sure all methods
+       are scanned when we have directory mail-sources (the mail source
+       is modified in that case, so we must scan it for all
+       groups/methods).
+
+1999-12-09 12:05:28  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnml.el (nnml-request-move-article): Save nnml-current-directory
+       and nnml-article-file-alist.
+
+1999-12-09 10:20:07  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-get-new-news-this-group): Binding
+       nnmail-fetched-sources.
+
+1999-12-09 10:19:01  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): Use the last charset.
+
+1999-12-08  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-select-method): Made the option list prettier.
+
+1999-12-08  Florian Weimer  <fw@s.netic.de>
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): Use iso-8859-1
+       for the `de' newsgroups hierarchy, as it is common practice there.
+
+
+1999-12-07 16:17:12  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-mail-archive-article): Fix
+       buffer-string arguments. Fix references.
+
+1999-12-07 15:04:18  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-confirmation-function): New variable.
+       (gnus-agent-batch-fetch): Use it.
+       (gnus-agent-fetch-session): Use it.
+
+1999-12-07 12:32:43  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-mime-charset-region): Delete nil.
+
+1999-12-07 11:45:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): Don't capitalize.  Delete
+       nil.
+
+1999-12-07  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nnslashdot.el (nnslashdot-request-list): There were two
+       top-level body-forms.  Put a `progn' around them.
+
+       * gnus.el (gnus-select-method): Use `condition-case'
+       instead of `ignore-errors', since cl may not be loaded when the
+       form is evaluated.
+
+1999-12-06 23:57:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el: Support www.mail-archive.com.
+
+1999-12-06 23:55:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-get-new-mail): Remove fetched sources before
+       do anything.
+
+1999-12-06  Simon Josefsson  <jas@pdc.kth.se>
+
+       * utf7.el: New file, written by Jon K Hellan.
+
+       * imap.el (imap-use-utf7): Renamed from `imap-utf7-p', change
+       default to t.
+
+1999-12-06 04:40:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-delete-group): New function.
+
+       * gnus-sum.el (gnus-summary-refer-article): Work for lists with
+       current.
+       (gnus-refer-article-methods): New function.
+       (gnus-summary-refer-article): Use it.
+
+1999-11-13  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nnimap.el (nnimap-retrieve-groups): Return active format.
+
+       * nnimap.el (nnimap-replace-in-string): Removed.
+       (nnimap-request-list):
+       (nnimap-retrieve-groups):
+       (nnimap-request-newgroups): Quote group instead of escaping SPC.
+
+1999-12-05  Simon Josefsson  <jas@pdc.kth.se>
+
+       * imap.el: Use format-spec for ssl program.
+       * imap.el (imap-ssl-arguments): Removed.
+       (imap-ssl-open-{1,2}): Removed.
+
+1999-12-04  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-start.el (gnus-site-init-file): Use `condition-case'
+       instead of `ignore-errors', since cl may not be loaded when the
+       form is evaluated.
+
+1999-12-04 11:34:22  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-bodies.el (mm-8bit-char-regexps): Removed.
+       (mm-7bit-chars): New variable.
+       (mm-body-7-or-8): Use it in both cases.
+
+1999-12-04  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+
+       * gnus-start.el (gnus-site-init-file): Don't use cl macros in
+         defcustom definitions.
+
+1999-12-04  Simon Josefsson  <jas@pdc.kth.se>
+
+       * mm-decode.el (mm-display-part): Let mm-display-external return
+       inline or external.
+       (mm-display-external): For copiousoutput methods, insert output in
+       buffer.
+
+1999-12-04 03:29:13  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-retrieve-headers-with-xover): Goto the end of
+       buffer.
+
+1999-12-04 08:31:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-audio.el: An M too far.
+
+       * gnus-msg.el (gnus-setup-message): One backtick too many.
+
+       * gnus-art.el (gnus-mime-view-part-as-type): mailcap-mime-types is
+       a function, not a variable.
+
+1999-12-04 08:14:08  Max Froumentin  <masmef@maths.bath.ac.uk>
+
+       * gnus-score.el (gnus-score-body): Widen before requesting.
+
+1999-12-04 08:06:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-prepare-flat): Comment fix.
+
+1999-12-04 03:01:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-webmail): Bind
+       mail-source-string.
+
+1999-12-04 07:18:23  Matt Swift  <swift@alum.mit.edu>
+
+       * gnus-uu.el (gnus-uu-mark-by-regexp): Doc fix.
+       (gnus-uu-unmark-by-regexp): Ditto.
+
+       * gnus-group.el (gnus-group-catchup-current): Would bug out on
+       dead groups.
+
+1999-12-04 01:34:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-setup-message): Allow the charset setting to
+       do their real thing.
+
+       * nnmh.el (nnmh-be-safe): Doc fix.
+
+       * gnus-sum.el (gnus-summary-exit): Write cache active file.
+
+       * nntp.el (nntp-retrieve-headers-with-xover): Make sure the entire
+       status line has arrived before we count it.
+
+       * mailcap.el (mailcap-mime-data): Removed save-file from audio/*.
+
+       * gnus-sum.el (gnus-thread-header): Fixed after indent.
+       Whitespace problems.
+
+       * gnus-win.el (gnus-configure-windows): Error fix.
+
+       * gnus-demon.el (gnus-demon-add-nntp-close-connection): Add the
+       right function.
+
+       * gnus.el: Fixed all the doc strings to match the FSF convetions.
+       Indent all functions.  Fix all comments to match the comment
+       conventions.  Double-space after full stop.
+
+1999-12-04 01:14:55  YAMAMOTO Kouji  <kouji@pobox.com>
+
+       * nnmail.el (nnmail-split-it): I redefined nnmail-split-fancy's
+       value to divide received mails into my favorite groups and I met
+       an error.  It takes place if the length of a element "VALUE" in
+       nnmail-split-fancy is less than two.
+
+1999-10-10  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * mml.el (mml-insert-part): New function.
+
+1999-09-29 04:48:14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Add `sc-cite-regexp'.
+
+1999-12-02  Dave Love  <fx@gnu.org>
+
+       * mm-decode.el: Customize.
+
+1999-12-03  Dave Love  <fx@gnu.org>
+
+       * nnslashdot.el, nnultimate.el: Don't lose at compile time when
+       the W3 stuff isn't available.
+
+1999-12-03  Dave Love  <fx@gnu.org>
+
+       * imap.el, mailcap.el, nnvirtual.el, rfc2104.el: Don't require cl
+       at runtime.
+
+1999-12-04 00:47:35  Dan Christensen  <jdc@jhu.edu>
+
+       * gnus-score.el (gnus-score-headers): Fix orphan scoring.
+
+1999-12-01  Andrew Innes  <andrewi@gnu.org>
+
+       * nnmbox.el (nnmbox-read-mbox): Count messages correctly, and
+       don't be fooled by "From nobody" lines added by respooling.
+
+       * pop3.el (pop3-movemail): Write crashbox in binary.
+       (pop3-get-message-count): New function.
+
+       * mail-source.el (mail-source-primary-source): New variable.
+       (mail-source-report-new-mail-interval): New variable.
+       (mail-source-idle-time-delay): New variable.
+       (mail-source-new-mail-available): New internal variable.
+       (mail-source-fetch-pop): Clear new mail flag, when mail from
+       primary source has been fetched.
+       (mail-source-check-pop): New function.
+       (mail-source-new-mail-p): New function.
+       (mail-source-start-idle-timer): New function.
+       (mail-source-report-new-mail): New function.
+       (mail-source-report-new-mail): New internal variable.
+       (mail-source-report-new-mail-timer): New internal variable.
+       (mail-source-report-new-mail-idle-timer): New internal variables.
+
+1999-12-04 00:39:34  Andreas Schwab  <schwab@suse.de>
+
+       * gnus-cus.el (gnus-group-customize): Customize fix.
+
+1999-12-04 00:38:24  Andrea Arcangeli  <andrea@suse.de>
+
+       * message.el (message-send-mail-with-sendmail): Use
+       message-make-address.
+
+Fri Dec  3 20:34:11 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v5.8.2 is released.
+
+Fri Dec  3 20:09:41 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v5.8.1 is released.
+
+1999-11-11  Hrvoje Niksic  <hniksic@iskon.hr>
+
+       * mml.el (mml-insert-tag): Don't close the tag.
+       (mml-insert-empty-tag): New function.
+       (mml-attach-file): Use mml-insert-empty-tag instead of
+       mml-insert-tag.
+       (mml-attach-buffer): Ditto.
+       (mml-attach-external): Ditto.
+       (mml-insert-multipart): Ditto.
+
+1999-12-03 08:49:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-article): Return -1 if not find
+       the article number.
+
+1999-12-03 01:12:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-find-method-for-group): The method of a new group
+       is not the native one.
+
+1999-12-03 01:26:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-button-embedded-url): Always call browse-url.
+
+1999-12-02 18:00:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Use
+       mm-with-unibyte-current-buffer.
+       (nnultimate-request-article): Ditto.
+
+1999-12-02 14:57:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-retrieve-groups): Set to process buffer.
+
+1999-12-02 11:14:50  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-with-unibyte-current-buffer): New macro.
+       * nnweb.el (nnweb-retrieve-headers): Use it.
+       (nnweb-request-article): Use it.
+
+       * nnweb.el (nnweb-dejanews-create-mapping): Set a default date in
+       case matching failed.
+
+1999-12-02  John Wiegley <jwiegley@inprise.com>
+
+       * mail-source.el (mail-source-keyword-map): Add backslash to
+       Delete-flag.
+
+1999-12-02 07:24:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-group-charset-alist): Default nnweb groups to
+       Latin-1.
+       (gnus-group-charset-alist): No, don't.
+
+       * nnweb.el (nnweb-init): Make the buffer unibyte.
+
+1999-12-01 23:02:48  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-set-common-1): Fix to get the
+       default value.
+
+1999-12-02 00:27:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-read-groups): Unibyte.
+
+       * nnultimate.el (nnultimate-request-list): Use unibyte.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Bind
+       gnus-display-mime-function to nil.
+
+       * message.el (message-send-mail-with-sendmail): Use the
+       user-mail-address variable.
+
+       * gnus-art.el (gnus-ignored-headers): More headers.
+
+       * message.el (message-shorten-1): Use list.
+
+1999-12-01 21:59:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Ignore nil
+       signatures.
+
+       * nnweb.el (nnweb-dejanews-create-mapping): Get the data.
+       (nnweb-dejanews-create-mapping): Do the properish date.
+
+1999-12-01 17:41:21  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-common-keyword-map): New variable.
+       (mail-source-bind-common): New macro.
+       (mail-source-fetch): Support plugged mail source.
+       * gnus-int.el (gnus-request-scan): Use them.
+
+1999-12-01 21:59:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-inline-message): Check whether charset is a
+       string.
+
+       * nnslashdot.el (nnslashdot-request-post): Insert <p>'s.
+
+       * message.el (message-mode-map): Changed keystroke for
+       message-yank-buffer.
+
+1999-11-26  Hrvoje Niksic  <hniksic@iskon.hr>
+
+       * message.el (message-shorten-references): Cut references to 31
+       elements, then either fold them or shorten them to 988 characters.
+       (message-shorten-1): New function.
+       (message-cater-to-broken-inn): New variable.
+
+1999-12-01 21:47:10  Eric Marsden  <emarsden@mail.dotcom.fr>
+
+       * nnslashdot.el (nnslashdot-lose): New function.
+
+1999-12-01 21:08:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-inline-message): Not the right type of charset is
+       being fetched here.  Let the group charset rule.
+       (mm-inline-message): Ignore us-ascii.
+
+1999-11-24  Carsten Leonhardt  <leo@arioch.oche.de>
+
+       * mail-source.el (mail-source-fetch-maildir): work around the
+       ommitted "file-regular-p" in efs/ange-ftp
+
+1999-12-01 19:59:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mml.el (mml-generate-mime-1): Don't insert extra empty line.
+       (mml-generate-mime-1): Use the encoding param.
+
+       * gnus-sum.el (gnus-summary-show-article): Don't bind gnus-visual.
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Require
+       gnus-art before binding its variables.
+
+       * gnus-art.el (gnus-article-prepare-display): Run the prepare
+       after the MIME.
+
+1999-12-01 19:48:14  Rupa Schomaker  <rupa-list@rupa.com>
+
+       * message.el (message-clone-locals): Use it.
+
+       * gnus-msg.el (gnus-configure-posting-styles): Make
+       user-mail-address local.
+
+1999-11-20  Simon Josefsson  <jas@pdc.kth.se>
+
+        * gnus-start.el (gnus-get-unread-articles): Scan each method only
+       once.
+
+1999-12-01 17:37:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-generate-new-buffer-clone-locals): Use varstr.
+       (message-clone-locals): Ditto.
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Have the digest
+       group inherit reply-to or from.
+
+1999-12-01 13:04:09  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Support numbered ARG
+       for charset.
+       (gnus-summary-show-article-charset-alist): New variable.
+
+       * mm-bodies.el (mm-decode-string): Support gnus-all and
+       gnus-unknown.
+       (mm-decode-body): Ditto.
+       * rfc2047.el (rfc2047-decode): Ditto.
+
+1999-12-01 17:37:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-delete-incoming): Change default to
+       t.
+
 Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.99 is released.
@@ -7,19 +4253,19 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * dgnushack.el (dgnushack-compile): No webmail under Emacs.
 
        * gnus-sum.el (gnus-summary-refer-article): Wrong interactive
-       spec. 
+       spec.
 
        * gnus-msg.el (gnus-configure-posting-styles): Eval `eval'.
        (gnus-configure-posting-styles): No, don't.
        (gnus-configure-posting-styles): Allow overriding files.
 
        * gnus-art.el (gnus-header-button-alist): Use browse-url
-       directly. 
+       directly.
 
        * mm-decode.el (mm-inline-media-tests): Check feature vcard.
 
        * gnus-msg.el (gnus-summary-yank-message): New command and
-       keystroke. 
+       keystroke.
 
        * message.el (message-yank-buffer): New command.
        (message-buffers): New function.
@@ -44,7 +4290,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-28 20:22:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-art.el (gnus-treatment-function-alist): Do
-       gnus-treat-capitalize-sentences. 
+       gnus-treat-capitalize-sentences.
 
 1999-11-30 09:07:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -63,7 +4309,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        read groups file.
 
        * nnslashdot.el (nnslashdot-request-article): Convert <br><br> to
-       <p>. 
+       <p>.
 
 1999-11-24 20:18:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -95,7 +4341,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-23 02:33:13  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * webmail.el: Support mail.yahoo.com.
-       
+
        * mail-source.el (mail-source-fetch-webmail): Add password check.
        (mail-source-keyword-map): Use `subtype'.
 
@@ -116,7 +4362,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-11-20 12:54:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnultimate.el (nnultimate-request-list): Add fetch-time slot. 
+       * nnultimate.el (nnultimate-request-list): Add fetch-time slot.
        (nnultimate-prune-days): New function.
        (nnultimate-create-mapping): Use it.
        (nnultimate-request-group): Only fetch the groups list if it has
@@ -151,16 +4397,16 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * mm-uu.el (mm-uu-dissect): Use fake charset `gnus-decoded'.
        (mm-uu-test): Now it is in restricted region.
-       
+
        * gnus-art.el (article-decode-charset): Don't mm-uu-test.
-       
+
        * mm-view.el (mm-view-message): Fix buffer leak.
        (mm-inline-message): Support 'gnus-decoded.
-       
+
        * mm-bodies.el (mm-decode-body): Ditto.
 
        * rfc2047.el (rfc2047-decode-region): Ditto.
-       
+
 1999-11-18  Matthias Andree  <ma@dt.e-technik.uni-dortmund.de>
 
        * imap.el (require): Added autoload for base64-encode-string.
@@ -168,7 +4414,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-17  Per Abrahamsen  <abraham@dina.kvl.dk>
 
        * gnus.el (gnus-refer-article-method): Made list value
-       customizable. 
+       customizable.
 
 1999-11-17 13:09:37  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -218,7 +4464,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus.el (gnus-refer-article-method): Doc fix.
 
        * gnus-sum.el: Do not accept a prefix.
-       (gnus-summary-refer-article): Accept a list of select methods. 
+       (gnus-summary-refer-article): Accept a list of select methods.
 
 1999-11-15 21:28:40  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -271,7 +4517,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-11-13  Florian Weimer  <fw@s.netic.de>
 
-       * mm-util.el (mm-find-mime-charset-region): Use UTF-8 if 
+       * mm-util.el (mm-find-mime-charset-region): Use UTF-8 if
        it's available and makes sense.
 
 1999-11-12 19:56:23  Fabrice POPINEAU <Fabrice.Popineau@supelec.fr>
@@ -291,10 +4537,10 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        `defconst'.
 
        * gnus-cus.el (gnus-group-parameters): Changed from `defcustom' to
-       `defconst'. 
-       Mention that it is both for group and topic parameters. 
+       `defconst'.
+       Mention that it is both for group and topic parameters.
        (gnus-extra-topic-parameters): New constant, including `subscribe'
-       parameter. 
+       parameter.
        (gnus-extra-group-parameters): New constant.
        (gnus-group-customize): Use them.
 
@@ -306,17 +4552,17 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-int.el (gnus-server-opened): Ignore denied servers.
 
        * gnus-ems.el (gnus-mule-max-width-function): New backquote
-       syntax. 
+       syntax.
 
        * nndoc.el (nndoc-mime-digest-type-p): Reinstated.
 
        * nnslashdot.el (nnslashdot-group-number): Changed default.
 
-       * nnweb.el (nnweb-dejanews-create-mapping): Work with new deja. 
+       * nnweb.el (nnweb-dejanews-create-mapping): Work with new deja.
        (nnweb-dejanews-wash-article): Removed.
        (nnweb-type-definition): Fetch by id.
 
-       * gnus-msg.el (gnus-configure-posting-styles): Don't insert unless 
+       * gnus-msg.el (gnus-configure-posting-styles): Don't insert unless
        we mean it.
 
        * nnslashdot.el (nnslashdot-group-number): Doc fix.
@@ -335,7 +4581,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-11 10:58:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * nnultimate.el (nnultimate-retrieve-headers): Work with american
-       dates. 
+       dates.
        (nnultimate-retrieve-headers): Wrong ordering.
 
 1999-11-11 07:31:51  Matt Pharr  <mmp@graphics.stanford.edu>
@@ -360,12 +4606,12 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-11-10 12:13:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnultimate.el (nnultimate-retrieve-headers): Work for multi-page 
+       * nnultimate.el (nnultimate-retrieve-headers): Work for multi-page
        subjects.
 
 1999-11-10 11:33:23  Rajappa Iyer  <rajappa@mindspring.com>
 
-       * gnus-salt.el (gnus-pick-article-or-thread): Don't move point. 
+       * gnus-salt.el (gnus-pick-article-or-thread): Don't move point.
 
 1999-11-10 05:22:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -437,7 +4683,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        (nnslashdot-generate-active): New function.
        (nnslashdot-request-newgroups): Use it.
 
-       * gnus-start.el (gnus-active-to-gnus-format): Intern strings group 
+       * gnus-start.el (gnus-active-to-gnus-format): Intern strings group
        names.
 
        * nnslashdot.el (nnslashdot-request-newgroups): New function.
@@ -453,11 +4699,11 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-11-07 01:17:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-start.el (gnus-subscribe-newsgroup-method): Doc fix. 
+       * gnus-start.el (gnus-subscribe-newsgroup-method): Doc fix.
 
        * gnus-topic.el (gnus-subscribe-topic): New function.
 
-       * nnslashdot.el (nnslashdot-request-list): Give out extended group 
+       * nnslashdot.el (nnslashdot-request-list): Give out extended group
        names.
 
        * gnus-start.el (gnus-ignored-newsgroups): Disregard bogus chars
@@ -475,10 +4721,10 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * nnheader.el (nnheader-insert-header): New function.
 
        * gnus-art.el (gnus-mime-internalize-part): Bind
-       mm-inlined-types. 
+       mm-inlined-types.
 
        * nndraft.el (nndraft-request-expire-articles): Do all the backup
-       files. 
+       files.
 
 1999-10-29  David S. Goldberg  <dsg@mitre.org>
 
@@ -507,7 +4753,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-06 23:16:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-art.el (gnus-article-mode-map): Use the summary article
-       edit. 
+       edit.
 
 1999-11-06 22:56:49  Jens-Ulrik Petersen  <Jens-Ulrik.Petersen@nokia.com>
 
@@ -549,7 +4795,7 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-11-06 03:51:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * message.el (message-newline-and-reformat): Don't insert too many 
+       * message.el (message-newline-and-reformat): Don't insert too many
        newlines.
        (message-newline-and-reformat): Work even if not sc.
 
@@ -568,12 +4814,12 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-06 02:17:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-sum.el (gnus-read-move-group-name): Subscribe to the
-       group. 
+       group.
 
        * message.el (message-forward): Narrow to the right header.
 
        * gnus-sum.el (gnus-summary-limit-to-age): Protect against bogus
-       dates. 
+       dates.
 
        * gnus-msg.el (gnus-configure-posting-styles): Use the
        user-full-name function.
@@ -588,13 +4834,13 @@ Wed Dec  1 16:31:31 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-11-05 20:28:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-sum.el (gnus-cut-thread): Also cut for numberp
-       gnus-fetch-old-headers. 
+       gnus-fetch-old-headers.
        (gnus-cut-threads): Ditto.
        (gnus-summary-initial-limit): Ditto.
        (gnus-summary-limit-children): Ditto.
 
        * gnus-msg.el (gnus-configure-posting-styles): Allow `header'
-       matches. 
+       matches.
 
 1999-11-06  Simon Josefsson  <jas@pdc.kth.se>
 
@@ -748,7 +4994,7 @@ Fri Nov  5 19:10:02 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-09-29  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-uu.el (mm-uu-forward-begin-line): Change the regexp.
-       (mm-uu-forward-end-line): Ditto. 
+       (mm-uu-forward-end-line): Ditto.
 
 1999-09-29  Didier Verna  <verna@inf.enst.fr>
 
@@ -776,11 +5022,11 @@ Fri Nov  5 19:10:02 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * rfc1843.el (rfc1843-decode-article-body): Don't decode twice.
 
 1999-09-10  Shenghuo ZHU  <zsh@cs.rochester.edu>
-       
+
        * gnus-art.el (article-make-date-line): Add time-zone in iso8601
        format.
        (article-date-ut): Find correct insert position.
-       
+
 1999-09-03  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-uu.el (mm-uu-dissect): Do not dissect quoted-printable
@@ -789,22 +5035,22 @@ Fri Nov  5 19:10:02 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-09-27 20:33:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-topic.el (gnus-topic-find-groups): Work for unactivated
-       groups. 
+       groups.
 
-       * message.el (message-resend): Use message mode when prompting. 
+       * message.el (message-resend): Use message mode when prompting.
 
        * gnus-art.el (article-hide-headers): Mark wash.
        (article-emphasize): Ditto.
 
 1999-09-27 19:52:14  Vladimir Volovich  <vvv@vvv.vsu.ru>
 
-       * message.el (message-newline-and-reformat): Work for SC. 
+       * message.el (message-newline-and-reformat): Work for SC.
 
 1999-09-27 19:38:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-msg.el (gnus-group-posting-charset-alist): 2047 in de.*.
 
-       * gnus-sum.el (gnus-newsgroup-ignored-charsets): Add x-unknown. 
+       * gnus-sum.el (gnus-newsgroup-ignored-charsets): Add x-unknown.
 
 1999-10-20  David S. Goldberg  <dsg@mitre.org>
 
@@ -838,21 +5084,21 @@ Mon Sep 27 15:18:05 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        buffer for params.
 
        * gnus-xmas.el (gnus-xmas-summary-recenter): Display one more
-       line. 
+       line.
 
        * message.el (message-forward-ignored-headers): New variable.
 
        * gnus-art.el (gnus-article-prepare-display): Nix out
-       gnus-article-wash-types. 
+       gnus-article-wash-types.
 
        * gnus-agent.el (gnus-agent-create-buffer): New function.
        (gnus-agent-fetch-group-1): Use it.
        (gnus-agent-start-fetch): Ditto.
 
        * gnus-sum.el (gnus-summary-exit): Don't use
-       `gnus-use-adaptive-scoring'. 
+       `gnus-use-adaptive-scoring'.
 
-       * mail-source.el (mail-source-fetch-pop): Only store password when 
+       * mail-source.el (mail-source-fetch-pop): Only store password when
        successful.
 
        * gnus-nocem.el (gnus-nocem-scan-groups): Message better.
@@ -869,7 +5115,7 @@ Mon Sep 27 15:18:05 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * message.el (message-bounce): Work for non-MIME.
 
        * gnus.el (gnus-short-group-name): Short the right parts of the
-       name. 
+       name.
 
 1999-09-24 18:17:48  Johan Kullstam  <kullstam@ne.mediaone.net>
 
@@ -899,7 +5145,7 @@ Mon Sep 27 15:18:05 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-09-24 18:10:56  Robert Bihlmeyer  <robbe@orcus.priv.at>
 
        * gnus-score.el (gnus-summary-increase-score): Allow editing of
-       Message-ID. 
+       Message-ID.
 
 1999-09-08  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -937,15 +5183,15 @@ Mon Sep 27 15:18:05 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-08-27 20:46:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-cache.el (gnus-cache-write-active): Write full names. 
+       * gnus-cache.el (gnus-cache-write-active): Write full names.
 
-       * gnus-util.el (gnus-write-active-file): Accept full name. 
+       * gnus-util.el (gnus-write-active-file): Accept full name.
 
-       * mm-decode.el (mm-inlinable-p): Use string-match on the types. 
+       * mm-decode.el (mm-inlinable-p): Use string-match on the types.
        (mm-assoc-string-match): New function.
        (mm-display-inline): Use it.
 
-       * gnus-group.el (gnus-group-set-info): Work for nil group params. 
+       * gnus-group.el (gnus-group-set-info): Work for nil group params.
 
        * gnus-msg.el (gnus-configure-posting-styles): Allow eval.
 
@@ -957,11 +5203,16 @@ Mon Sep 27 15:18:05 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-art.el (gnus-treat-predicate): Work for (not 5).
 
-1999-08-27  Peter von der Ah\e-A\ ei\ f  <pahe@daimi.au.dk>
+1999-08-27  Peter von der Ahe <pahe@daimi.au.dk>
 
        * message.el (message-send): More helpful error message if sending
        fails
 
+1999-09-06  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * gnus-score.el (gnus-summary-increase-score): "Lars" was broken
+       in newer emacsen, where ?r isn't equal 114.
+
 Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.96 is released.
@@ -998,7 +5249,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-08-27 15:02:58  Florian Weimer  <fw@s.netic.de>
 
        * gnus-score.el (gnus-home-score-file): Work with absolute path
-       names. 
+       names.
 
 1999-07-17  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1050,7 +5301,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * mml.el (mml-generate-mime-1): Insert non-text literally.
 
-       * gnus.el: Change most mm-insert-file-contents back to nnheader. 
+       * gnus.el: Change most mm-insert-file-contents back to nnheader.
 
 1999-07-13  Hrvoje Niksic  <hniksic@srce.hr>
 
@@ -1059,7 +5310,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-08-27 14:53:42  Oleg S. Tihonov  <ost@benetnash.ffke-campus.mipt.ru>
 
        * gnus-sum.el (gnus-group-charset-alist): Default fido7 to
-       koi8-r. 
+       koi8-r.
 
 1999-07-11  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1068,7 +5319,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-07-11  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
-       * mm-view.el (mm-inline-text): Check 
+       * mm-view.el (mm-inline-text): Check
        w3-meta-content-type-charset-regexp.
 
 1999-07-10  Simon Josefsson  <jas@pdc.kth.se>
@@ -1096,7 +5347,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-08-27 14:38:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-group.el (gnus-group-kill-all-zombies): Only prompt when
-       interactive. 
+       interactive.
 
 1999-07-12  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1106,13 +5357,14 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-agent.el (gnus-agent-fetch-group-1): Recreate agent
        overview buffer if it is killed.
+
 1999-08-27 14:26:03  Eric Marsden  <emarsden@mail.dotcom.fr>
 
        * gnus-art.el (article-babel): New version.
 
 1999-08-27 14:22:39  Jon Kv  <jonkv@ida.liu.se>
 
-       * nnfolder.el (nnfolder-request-list-newsgroups): Faster expiry. 
+       * nnfolder.el (nnfolder-request-list-newsgroups): Faster expiry.
 
 1999-07-10  Mike McEwan  <mike@lotusland.demon.co.uk>
 
@@ -1139,15 +5391,15 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-07-11 11:02:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-encode.el (mm-qp-or-base64): Also consider control chars. 
+       * mm-encode.el (mm-qp-or-base64): Also consider control chars.
        (mm-qp-or-base64): Reversed logic.
 
        * mm-decode.el (mm-save-part-to-file): Let coding system be
-       binary. 
+       binary.
 
 1999-07-15  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Allow 'agent-score' to 
+       * gnus-agent.el (gnus-agent-fetch-group-1): Allow 'agent-score' to
        be set in topic parameters.
 
 1999-07-10  Mike McEwan  <mike@lotusland.demon.co.uk>
@@ -1159,7 +5411,7 @@ Fri Aug 27 13:17:48 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-agent.el (gnus-agent-get-undownloaded-list): Don't
        mark cached articles as `undownloaded'.
 
-Tue Jul 20 02:39:56 1999  Peter von der Ah\e-A\ ei\ f  <peter@ahe.dk>
+Tue Jul 20 02:39:56 1999  Peter von der Ahe  <peter@ahe.dk>
 
        * gnus-sum.el (gnus-summary-exit): Allow gnus-use-adaptive-scoring
        to have buffer local values.
@@ -1227,7 +5479,7 @@ Fri Jul  9 19:28:29 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-07-09 18:52:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-art.el (gnus-mime-view-part-as-media): New command and
-       keystroke. 
+       keystroke.
 
        * mailcap.el (mailcap-mime-types): New function.
 
@@ -1243,7 +5495,7 @@ Fri Jul  9 19:28:29 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-07-09 18:36:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-group.el (gnus-group-make-menu-bar): Removed double bug
-       report. 
+       report.
 
 1999-07-08  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1273,7 +5525,7 @@ Wed Jul  7 18:40:30 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
 1999-07-08 08:41:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * mailcap.el (mailcap-mime-extensions): Changed patch to
-       text/x-patch. 
+       text/x-patch.
 
        * mm-decode.el (mm-display-external): Wrong placement of paren.
 
@@ -1314,19 +5566,19 @@ Wed Jul  7 13:09:51 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * pop3.el: New version.
 
-1999-07-05  Simon Josefsson  
+1999-07-05  Simon Josefsson
 
         * gnus-srvr.el (gnus-browse-foreign-server): Use read.
 
 1999-07-07 10:37:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-mime-display-alternative): Do treatment. 
+       * gnus-art.el (gnus-mime-display-alternative): Do treatment.
 
 1999-07-06  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * gnus-util.el (gnus-write-active-file): Use real name.
 
-       * gnus-agent.el (gnus-agent-expire): Update active file 
+       * gnus-agent.el (gnus-agent-expire): Update active file
        method by method.
 
 1999-07-06  Shenghuo ZHU  <zsh@cs.rochester.edu>
@@ -1379,12 +5631,12 @@ Tue Jul  6 10:59:24 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-07-06 12:30:59  Johannes Weinert  <Johannes.Weinert@Informatik.Uni-Oldenburg.DE>
 
-       * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix. 
+       * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix.
 
 1999-07-06 07:41:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * nntp.el (nntp-retrieve-groups): Don't do anything when not
-       connected. 
+       connected.
 
        * gnus-start.el (gnus-active-to-gnus-format): Only save active
        when plugged.
@@ -1394,17 +5646,17 @@ Tue Jul  6 10:59:24 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-agent.el (gnus-agent-write-active): Check whether orig sym
        is bound.
 
-       * gnus-msg.el (gnus-summary-mail-forward): Rename From_ lines. 
+       * gnus-msg.el (gnus-summary-mail-forward): Rename From_ lines.
 
-       * nndoc.el (nndoc-guess-type): Remove blank lines at the start. 
+       * nndoc.el (nndoc-guess-type): Remove blank lines at the start.
 
        * nnfolder.el (nnfolder-read-folder): Remove blank lines at the
-       start. 
+       start.
 
        * message.el (message-fill-yanked-message): Remove `t' arg.
 
        * gnus-group.el (gnus-group-kill-group): Message killing of
-       groups. 
+       groups.
 
        * mm-util.el (mm-preferred-coding-system): New function.
        (mm-mime-charset): Use it.
@@ -1418,14 +5670,14 @@ Tue Jul  6 10:59:24 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-07-06 05:47:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * mm-decode.el (mm-inline-Media-tests): Changed from forms to
-       functions. 
+       functions.
        (mm-attachment-override-p): Take a handle instead of a type.
        (mm-inlined-p): Ditto.
        (mm-automatic-display-p): Ditto,
        (mm-inlinable-p): Ditto.
 
        * nndraft.el (nndraft-request-expire-articles): Delete backup
-       files. 
+       files.
 
        * mailcap.el (mailcap-parse-mailcap): Regexp-quote stuff.
 
@@ -1439,7 +5691,7 @@ Tue Jul  6 10:59:24 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * mm-decode.el (mm-inline-large-images-p): Renamed.
 
-       * gnus-art.el (article-date-ut): Always look in the current buffer 
+       * gnus-art.el (article-date-ut): Always look in the current buffer
        for the Date header.
 
        * mml.el (mml-validate): New command.
@@ -1497,7 +5749,7 @@ Sun Jul  4 06:31:01 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * mml.el (mml-generate-mime-1): Ditto.
 
        * gnus.el: Use mm-insert-file-contents throughout instead of
-       nnheader. 
+       nnheader.
 
        * mm-util.el (mm-insert-file-contents): New function.
 
@@ -1596,7 +5848,7 @@ Sat Jul  3 07:35:35 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-07-03 09:15:35  Simon Josefsson  <jas@pdc.kth.se>
 
        * gnus-sum.el (gnus-summary-move-article): Fix something or
-       other. 
+       other.
 
 1999-06-29  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1698,7 +5950,7 @@ Tue Jun 15 04:13:01 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-06-15 04:13:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-sum.el (gnus-summary-save-parts): Destroy handles after
-       usage. 
+       usage.
 
        * nnmail.el (nnmail-get-new-mail): Save info.
 
@@ -1708,13 +5960,13 @@ Mon Jun 14 01:15:59 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-06-14 02:46:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetch-file): Use prescript-delay. 
+       * mail-source.el (mail-source-fetch-file): Use prescript-delay.
        (mail-source-run-script): New function.
        (mail-source-fetch-pop): Use it.
 
 1999-06-13 09:52:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-article-setup-highlight-words): Moved here. 
+       * gnus-art.el (gnus-article-setup-highlight-words): Moved here.
 
 Sun Jun 13 07:30:40 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
@@ -1735,7 +5987,7 @@ Sun Jun 13 07:30:40 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-art.el (article-babel): Narrow a bit.
 
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Was too slow. 
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Was too slow.
 
 1999-06-12  Simon Josefsson  <jas@pdc.kth.se>
 
@@ -1747,7 +5999,7 @@ Sun Jun 13 07:30:40 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-06-13 03:01:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-sum.el (gnus-summary-limit-to-extra): New command and
-       keystroke. 
+       keystroke.
 
        * gnus-art.el (gnus-article-x-face-command): Ditto.
 
@@ -1768,7 +6020,7 @@ Sun Jun 13 07:30:40 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-util.el (gnus-parse-netrc): Skip lines with #'s.
        (gnus-netrc-syntax-table): Removed.
-       (gnus-parse-netrc): Don't use syntax table; just use whitespace. 
+       (gnus-parse-netrc): Don't use syntax table; just use whitespace.
 
 Wed May  5 13:51:13 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -1781,7 +6033,7 @@ Wed May  5 01:15:08 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
 1999-06-12 07:29:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * nnmail.el (nnmail-split-incoming): Return the number of split
-       mails. 
+       mails.
        (nnmail-process-babyl-mail-format): Ditto.
        (nnmail-process-unix-mail-format): Ditto.
        (nnmail-process-mmdf-mail-format): Ditto.
@@ -1812,7 +6064,7 @@ Sun May  2 01:00:02 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
        * gnus-cache.el (gnus-cache-possibly-enter-article): Remove
        parameter `headers'.
        (gnus-cache-enter-article): Ditto.
-       (gnus-cache-update-article): Ditto.  
+       (gnus-cache-update-article): Ditto.
        * gnus-sum.el (gnus-summary-move-article): Ditto.
        (gnus-summary-mark-article-as-unread): Ditto.
        (gnus-summary-mark-article): Ditto.
@@ -1840,7 +6092,7 @@ Sat Jun 12 00:19:57 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-06-12 02:09:49  Lars Magne Ingebrigtsen  <pinard@iro.umontreal.ca>
 
        * nndoc.el (nndoc-mime-parts-type-p): Accept space before
-       semicolon. 
+       semicolon.
 
 1999-05-24  Simon Josefsson  <jas@pdc.kth.se>
 
@@ -1889,11 +6141,11 @@ Sat Jun 12 00:19:57 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-05-22 00:26:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-sum.el (gnus-summary-save-parts): New command and
-       keystroke. 
+       keystroke.
        (gnus-summary-save-parts-1): New function.
        (gnus-summary-iterate): Buggy.
 
-       * mm-decode.el (mm-save-part-to-file): Made into own function. 
+       * mm-decode.el (mm-save-part-to-file): Made into own function.
 
 1999-05-11 05:53:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -1951,24 +6203,24 @@ Sat May  1 20:27:43 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-art.el (gnus-article-date-lapsed-new-header): Default to nil.
 
-       * qp.el (quoted-printable-encode-region): Encode whitespace at the 
+       * qp.el (quoted-printable-encode-region): Encode whitespace at the
        end of lines.
 
        * message.el (message-mode): Doc fix.
 
-       * gnus-art.el (article-hide-headers): Delete the hidden headers. 
+       * gnus-art.el (article-hide-headers): Delete the hidden headers.
 
-       * gnus-msg.el (gnus-setup-posting-charset): Default group to "". 
+       * gnus-msg.el (gnus-setup-posting-charset): Default group to "".
 
        * gnus-art.el (article-date-ut): Rewrite.
 
        * mm-decode.el (mm-preferred-alternative-precedence): Reverse the
-       order. 
+       order.
 
        * gnus-msg.el (gnus-message-insert-stylings): Remove duplicate
-       headers. 
+       headers.
 
-       * gnus-art.el (gnus-article-date-lapsed-new-header): Doc fix. 
+       * gnus-art.el (gnus-article-date-lapsed-new-header): Doc fix.
 
 1999-04-18  Didier Verna  <verna@inf.enst.fr>
 
@@ -1978,7 +6230,7 @@ Sat May  1 20:27:43 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-04-18 20:06:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * mail-source.el (mail-source-fetch-pop): Call script
-       asynchronously. 
+       asynchronously.
 
 Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
@@ -1992,12 +6244,12 @@ Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus-uu.el (gnus-uu-mark-thread): Save hidden threads.
 
-       * gnus-art.el (gnus-mime-inline-part): Don't do a charset param. 
+       * gnus-art.el (gnus-mime-inline-part): Don't do a charset param.
 
        * gnus-msg.el (gnus-bug): Use application/x-emacs-lisp.
 
        * message.el (message-generate-headers): Accept continuation
-       headers. 
+       headers.
 
 1999-04-18 10:48:57  Renaud Rioboo  <Renaud.Rioboo@lip6.fr>
 
@@ -2011,12 +6263,12 @@ Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * message.el (message-inhibit-body-encoding): Typo.
        (message-resend): Inhibit encoding.
 
-       * gnus-sum.el (gnus-summary-toggle-header): Decode rfc2047. 
+       * gnus-sum.el (gnus-summary-toggle-header): Decode rfc2047.
 
        * gnus-art.el (article-remove-cr): Use re-search.
 
        * rfc2231.el (rfc2231-parse-string): Allow broken elm MIME
-       headers. 
+       headers.
 
        * mm-decode.el (mm-quote-arg): Quote '.
 
@@ -2029,10 +6281,10 @@ Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-04-17 18:51:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnvirtual.el (nnvirtual-request-expire-articles): New function. 
+       * nnvirtual.el (nnvirtual-request-expire-articles): New function.
 
        * gnus-group.el (gnus-group-expire-articles-1): Made into own
-       function. 
+       function.
 
 Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
@@ -2045,7 +6297,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-04-17 18:23:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-util.el (mm-charset-synonym-alist): Remove iso-2022-jp-2 from 
+       * mm-util.el (mm-charset-synonym-alist): Remove iso-2022-jp-2 from
        synonym alist.
 
 1999-04-17 18:03:38  Adam P. Jenkins  <ajenkins@netway.com>
@@ -2054,7 +6306,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-04-17 18:02:05  Ettore Perazzoli  <ettore@comm2000.it>
 
-       * mail-source.el (mail-source-fetch): Ask before bugging out. 
+       * mail-source.el (mail-source-fetch): Ask before bugging out.
 
 1999-03-19  Hrvoje Niksic  <hniksic@srce.hr>
 
@@ -2064,7 +6316,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-03-18  Simon Josefsson  <jas@pdc.kth.se>
 
        * gnus-sum.el (gnus-update-marks):
-       (gnus-update-read-articles): 
+       (gnus-update-read-articles):
        (gnus-summary-expire-articles): Check server.
 
 1999-03-16  Simon Josefsson  <jas@pdc.kth.se>
@@ -2074,7 +6326,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-04-17 17:10:21  William M. Perry  <wmperry@aventail.com>
 
        * mail-source.el (mail-source-fetch-file): Return the right
-       value. 
+       value.
 
 1999-04-17 07:52:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -2094,7 +6346,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * mail-source.el (mail-sources): New variable.
 
-       * gnus-art.el (article-remove-cr): Remove several trailing CRs. 
+       * gnus-art.el (article-remove-cr): Remove several trailing CRs.
 
        * mm-decode.el (mm-valid-image-format-p): New function.
        (mm-inline-media-tests): Use it.
@@ -2106,7 +6358,7 @@ Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-04-12  Didier Verna  <verna@inf.enst.fr>
 
        * nnmail.el (nnmail-article-group): in case of a group name
-       containing "\\n" constructs, be sure to pass the expanded value to 
+       containing "\\n" constructs, be sure to pass the expanded value to
        nn*-save-mail.
 
 Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
@@ -2150,7 +6402,7 @@ Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-03-28 13:19:50  Jae-you Chung  <jay@pllab.kaist.ac.kr>
 
        * gnus.el (gnus-short-group-name): Use
-       gnus-group-uncollapsed-levels. 
+       gnus-group-uncollapsed-levels.
 
 1999-03-28 13:11:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -2163,7 +6415,7 @@ Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-03-14 16:09:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetch-pop): Check for symbol first. 
+       * mail-source.el (mail-source-fetch-pop): Check for symbol first.
 
        * nnheader.el (nnheader-insert-file-contents): Bind
        enable-local-eval to nil.
@@ -2184,15 +6436,15 @@ Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * nnmail.el (nnmail-split-header-length-limit): Increased.
        (nnmail-article-group): Allow nil.
 
-       * gnus-cite.el (gnus-cite-parse-wrapper): Inhibit point-motion. 
+       * gnus-cite.el (gnus-cite-parse-wrapper): Inhibit point-motion.
 
        * nndoc.el (nndoc-generate-mime-parts-head): Insert real headers
-       first. 
+       first.
 
        * mml.el (mml-minibuffer-read-type): Include types from
-       mailcap-mime-data. 
+       mailcap-mime-data.
 
-       * nndraft.el (nndraft-request-article): Would clobber Japanese. 
+       * nndraft.el (nndraft-request-article): Would clobber Japanese.
 
 1999-03-05  Hrvoje Niksic  <hniksic@srce.hr>
 
@@ -2235,7 +6487,7 @@ Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-picon.el (gnus-picons-x-face-file-name): Removed.
        (gnus-picons-convert-x-face): Removed.
        (gnus-picons-article-display-x-face): Removed.
-       (gnus-picons-x-face-sentinel): Ditto. 
+       (gnus-picons-x-face-sentinel): Ditto.
        (gnus-picons-display-x-face): Ditto.
 
 Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
@@ -2244,7 +6496,7 @@ Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-03-02 16:04:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-mm-display-part): Narrow to the part itself. 
+       * gnus-art.el (gnus-mm-display-part): Narrow to the part itself.
 
        * gnus-sum.el (gnus-with-article): Moved here.
 
@@ -2278,7 +6530,7 @@ Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-02-27 23:44:52  paul stevenson  <spaul@mail.phy.ornl.gov>
 
-       * gnus-sum.el (gnus-summary-toggle-header): Narrow to head first. 
+       * gnus-sum.el (gnus-summary-toggle-header): Narrow to head first.
 
 1999-02-27 17:17:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -2289,7 +6541,7 @@ Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * message.el (message-mode): Doc fix.
 
        * mm-encode.el (mm-content-transfer-encoding-defaults): Use 8bit
-       encoding. 
+       encoding.
 
        * gnus.el (gnus-methods-equal-p): Moved here.
 
@@ -2300,7 +6552,7 @@ Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-02-27  lantz moore  <lmoore@contigo.com>
 
-       * nnmail.el (nnmail-get-new-mail): honor suffix for spool-files of 
+       * nnmail.el (nnmail-get-new-mail): honor suffix for spool-files of
        type directory.
 
 1999-03-04  Robert Bihlmeyer  <robbe@orcus.priv.at>
@@ -2314,7 +6566,7 @@ Fri Feb 26 18:54:16 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-02-26 18:11:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-cite.el (gnus-cite-toggle): Don't remove highlighting. 
+       * gnus-cite.el (gnus-cite-toggle): Don't remove highlighting.
 
        * mml.el (mml-mode): Don't use add-minor-mode.
 
@@ -2337,7 +6589,7 @@ Fri Feb 26 17:00:25 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-ems.el (gnus-mule-cite-add-face): Removed.
 
        * gnus-sum.el (gnus-summary-sort-by-chars): New command and
-       keystroke. 
+       keystroke.
 
        * gnus-art.el (gnus-narrow-to-page): Revert.
 
@@ -2345,7 +6597,7 @@ Fri Feb 26 17:00:25 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        (gnus-cite-parse-maybe): Always reparse.
 
        * message.el (message-encode-message-body): Don't insert
-       "multipart warning". 
+       "multipart warning".
 
        * gnus-art.el (gnus-article-treat-head-custom): New variable.
 
@@ -2358,7 +6610,7 @@ Fri Feb 26 17:00:25 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-02-26 07:39:33  Justin Sheehy  <justin@linus.mitre.org>
 
        * nnmail.el (nnmail-get-new-mail): Only get mail for the one
-       group. 
+       group.
 
 1999-02-26 07:38:08  SeokChan LEE  <chan@smoky-blue.com>
 
@@ -2397,7 +6649,7 @@ Fri Feb 26 17:00:25 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * mml.el (mml-insert-buffer): New function.
 
-       * message.el (message-forward): Insert the buffer in the buffer. 
+       * message.el (message-forward): Insert the buffer in the buffer.
 
 Sun Feb 21 01:20:50 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -2416,14 +6668,14 @@ Sat Feb 20 21:34:28 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
        * gnus-art.el (gnus-displaying-mime): New variable.
        (article-narrow-to-head): New function.
 
-       * mail-source.el (mail-source-fetch-pop): Include pre/postscript. 
+       * mail-source.el (mail-source-fetch-pop): Include pre/postscript.
        Default to pop instead of pop3.
 
 1999-02-19 16:16:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-art.el (article-hide-pgp): Goto body.
 
-       * gnus-uu.el (gnus-uu-digest-mail-forward): Don't kill buffer. 
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Don't kill buffer.
 
        * gnus-cite.el: Don't use goto-line.
 
@@ -2457,7 +6709,7 @@ Sat Feb 20 21:34:28 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 1999-02-19 14:40:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-group.el (gnus-group-get-new-news): Require nnmail. 
+       * gnus-group.el (gnus-group-get-new-news): Require nnmail.
 
 1999-02-18  Michael Cook  <cook@sightpath.com>
 
@@ -2494,7 +6746,7 @@ Sat Feb 20 21:34:28 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 1999-02-11  Matt Pharr  <mmp@graphics.stanford.edu>
 
       * gnus-msg.el (gnus-bug): Encode environment info as a MIME
-      attachment. 
+      attachment.
 
 Thu Feb 11 04:58:51 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
@@ -3711,7 +7963,7 @@ Mon Nov 30 23:38:02 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-uu.el (mm-uu-dissect): Use mm-make-handle.
 
-1998-12-01 01:53:49  Fran\e-A\ eg\ fois Pinard  <pinard@iro.umontreal.ca>
+1998-12-01 01:53:49  Francois Pinard  <pinard@iro.umontreal.ca>
 
        * nndoc.el (nndoc-mime-parts-type-p): Do related.
 
@@ -5457,7 +9709,7 @@ Mon Sep 14 18:55:38 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * rfc2047.el (rfc2047-q-encode-region): Would bug out.
 
-1998-09-13  Fran\e-A\ eg\ fois Pinard  <pinard@iro.umontreal.ca>
+1998-09-13  Francois Pinard  <pinard@iro.umontreal.ca>
 
        * nndoc.el: Make nndoc-dissection-alist simpler for MIME, adjust all
           related functions.  Handle message/rfc822 parts.  Display subject on
@@ -6342,3 +10594,7 @@ Sat Aug 29 20:34:17 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 Sat Aug 29 19:32:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Gnus v0.2 is released.
+
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; End:
index 2672f43..6ea8e34 100644 (file)
@@ -12,41 +12,71 @@ INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 VPATH = @srcdir@
 PACKAGEDIR = @PACKAGEDIR@
+W3DIR = @W3@
+GNUS_PRODUCT_NAME = @GNUS_PRODUCT_NAME@
+EXPORTING_FILES = $(EMACS) $(FLAGS) -f dgnushack-exporting-files 2>/dev/null
 
 all total:
        rm -f *.elc auto-autoloads.el custom-load.el
-       srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-compile
+       W3DIR=$(W3DIR) lispdir=$(lispdir) \
+               srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-compile
 
 warn:
        rm -f *.elc
-       srcdir=$(srcdir) $(EMACS) $(FLAGS) --eval '(dgnushack-compile t)' 2>&1 | egrep -v "variable G|inhibit-point-motion-hooks|coding-system|temp-results|variable gnus|variable nn|scroll-in-place|deactivate-mark|filladapt-mode|byte-code-function-p|print-quoted|ps-right-header|ps-left-header|article-inhibit|print-escape|ssl-program-arguments|message-log-max"
+       W3DIR=$(W3DIR) lispdir=$(lispdir) srcdir=$(srcdir) $(EMACS) $(FLAGS) --eval '(dgnushack-compile t)' 2>&1 | egrep -v "variable G|inhibit-point-motion-hooks|coding-system|temp-results|variable gnus|variable nn|scroll-in-place|deactivate-mark|filladapt-mode|byte-code-function-p|print-quoted|ps-right-header|ps-left-header|article-inhibit|print-escape|ssl-program-arguments|message-log-max"
 
 # The "clever" rule is unsafe, since redefined macros are loaded from
 # .elc files, and not the .el file.
 clever some:
-       srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-compile
+       @if test -f $(srcdir)/gnus.elc; then \
+         echo \
+           "checking for whether the all elc files should be recompiled..."; \
+         RM_ELC=nil; \
+         if test `$(EMACS) -batch -q -no-site-file \
+               -eval "(princ (format \"%s\" (featurep (quote xemacs))))" \
+               2>/dev/null` = t; then \
+           test ! -f $(srcdir)/gnus-xmas.elc && RM_ELC=t; \
+         else \
+           test -f $(srcdir)/gnus-xmas.elc && RM_ELC=t; \
+         fi; \
+         if test $$RM_ELC = t; then \
+           echo " => maybe yes;" \
+               "rm -f *.elc auto-autoloads.el custom-load.el"; \
+           rm -f *.elc auto-autoloads.el custom-load.el; \
+         else \
+           echo " => maybe unnecessary"; \
+         fi; \
+       fi
+       W3DIR=$(W3DIR) lispdir=$(lispdir) \
+               srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-compile
 
-install: clever
-       rm -f dgnushack.elc
+install: clever install-without-compiling
+
+install-without-compiling:
        $(SHELL) $(top_srcdir)/mkinstalldirs $(lispdir)
-       @for p in *.el; do \
-         if test "$$p" != "dgnuspath.el"; then \
-           echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \
-           $(INSTALL_DATA) $$p $(lispdir)/$$p; \
-           if test -f $$p"c"; then \
-             echo " $(INSTALL_DATA) $$p""c"" $(lispdir)/$$p""c"; \
-             $(INSTALL_DATA) $$p"c" $(lispdir)/$$p"c"; \
-           fi; \
+       @for p in `$(EXPORTING_FILES)`; do \
+         echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \
+         $(INSTALL_DATA) $$p $(lispdir)/$$p; \
+         if test -f $$p"c"; then \
+           echo " $(INSTALL_DATA) $$p""c"" $(lispdir)/$$p""c"; \
+           $(INSTALL_DATA) $$p"c" $(lispdir)/$$p"c"; \
          fi; \
        done
 
-package:
-       srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-make-package
+# Rule for XEmacs package.
+install-package-manifest:
+       srcdir=$(srcdir) $(EMACS) $(FLAGS) \
+               -f dgnushack-install-package-manifest \
+               $(PACKAGEDIR) $(GNUS_PRODUCT_NAME)
+
+compose-package:
+       srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-make-autoloads
 
-install-package: clever
-       rm -f dgnushack.elc
-       srcdir=$(srcdir) $(EMACS) $(FLAGS) -f dgnushack-make-package \
-               -f dgnushack-install-package $(PACKAGEDIR)
+remove-extra-files-in-package:
+       srcdir=$(srcdir) $(EMACS) $(FLAGS) \
+               -f dgnushack-remove-extra-files-in-package \
+               $(PACKAGEDIR) $(GNUS_PRODUCT_NAME)
+#
 
 tags:
        etags *.el
index a396808..26415a2 100644 (file)
-;;; base64.el,v --- Base64 encoding functions
-;; Author: Kyle E. Jones
-;; Created: 1997/03/12 14:37:09
-;; Version: 1.6
-;; Keywords: extensions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (C) 1997 Kyle E. Jones
-;;;
-;;; This file is not 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.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(require 'poe)
-
-;; For non-MULE
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
-
-(defvar base64-alphabet
-  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
+;;; base64.el --- Base64 encoding functions using MEL
+;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
 
-(defvar base64-decoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 decoder.
-The program should expect to read base64 data on its standard
-input and write the converted data to its standard output.")
-
-(defvar base64-decoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-decoder-program.")
-
-(defvar base64-encoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 encoder.
-The program should expect arbitrary data on its standard
-input and write base64 data to its standard output.")
-
-(defvar base64-encoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-encoder-program.")
+;; Author: T-gnus development team
+;; Keywords: extensions
 
-(defconst base64-alphabet-decoding-alist
-  '(
-    ( ?A . 00) ( ?B . 01) ( ?C . 02) ( ?D . 03) ( ?E . 04) ( ?F . 05)
-    ( ?G . 06) ( ?H . 07) ( ?I . 08) ( ?J . 09) ( ?K . 10) ( ?L . 11)
-    ( ?M . 12) ( ?N . 13) ( ?O . 14) ( ?P . 15) ( ?Q . 16) ( ?R . 17)
-    ( ?S . 18) ( ?T . 19) ( ?U . 20) ( ?V . 21) ( ?W . 22) ( ?X . 23)
-    ( ?Y . 24) ( ?Z . 25) ( ?a . 26) ( ?b . 27) ( ?c . 28) ( ?d . 29)
-    ( ?e . 30) ( ?f . 31) ( ?g . 32) ( ?h . 33) ( ?i . 34) ( ?j . 35)
-    ( ?k . 36) ( ?l . 37) ( ?m . 38) ( ?n . 39) ( ?o . 40) ( ?p . 41)
-    ( ?q . 42) ( ?r . 43) ( ?s . 44) ( ?t . 45) ( ?u . 46) ( ?v . 47)
-    ( ?w . 48) ( ?x . 49) ( ?y . 50) ( ?z . 51) ( ?0 . 52) ( ?1 . 53)
-    ( ?2 . 54) ( ?3 . 55) ( ?4 . 56) ( ?5 . 57) ( ?6 . 58) ( ?7 . 59)
-    ( ?8 . 60) ( ?9 . 61) ( ?+ . 62) ( ?/ . 63)
-   ))
+;; This file is part of T-gnus.
 
-(defvar base64-alphabet-decoding-vector
-  (let ((v (make-vector 123 nil))
-       (p base64-alphabet-decoding-alist))
-    (while p
-      (aset v (car (car p)) (cdr (car p)))
-      (setq p (cdr p)))
-    v))
+;; 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.
 
-(defvar base64-binary-coding-system 'binary)
+;; 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.
 
-(defun base64-run-command-on-region (start end output-buffer command
-                                          &rest arg-list)
-  (let ((tempfile nil) status errstring default-process-coding-system 
-       (coding-system-for-write base64-binary-coding-system)
-       (coding-system-for-read base64-binary-coding-system))
-    (unwind-protect
-       (progn
-         (setq tempfile (make-temp-name "base64"))
-         (setq status
-               (apply 'call-process-region
-                      start end command nil
-                      (list output-buffer tempfile)
-                      nil arg-list))
-         (cond ((equal status 0) t)
-               ((zerop (save-excursion
-                         (set-buffer (find-file-noselect tempfile))
-                         (buffer-size)))
-                t)
-               (t (save-excursion
-                    (set-buffer (find-file-noselect tempfile))
-                    (setq errstring (buffer-string))
-                    (kill-buffer nil)
-                    (cons status errstring)))))
-      (ignore-errors
-       (delete-file tempfile)))))
+;; 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.
 
-(if (string-match "XEmacs" emacs-version)
-    (defalias 'base64-insert-char 'insert-char)
-  (defun base64-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count))))
-  (setq base64-binary-coding-system 'raw-text))
+;;; Commentary:
 
-(defun-maybe base64-decode-region (start end)
-  (interactive "r")
-  ;;(message "Decoding base64...")
-  (let ((work-buffer nil)
-       (done nil)
-       (counter 0)
-       (bits 0)
-       (lim 0) inputpos
-       (non-data-chars (concat "^=" base64-alphabet)))
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-decoder-program
-             (let* ((binary-process-output t) ; any text already has CRLFs
-                    (status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-decoder-program
-                                  base64-decoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (goto-char start)
-           (skip-chars-forward non-data-chars end)
-           (while (not done)
-             (setq inputpos (point))
-             (cond
-              ((> (skip-chars-forward base64-alphabet end) 0)
-               (setq lim (point))
-               (while (< inputpos lim)
-                 (setq bits (+ bits
-                               (aref base64-alphabet-decoding-vector
-                                     (char-int (char-after inputpos)))))
-                 (setq counter (1+ counter)
-                       inputpos (1+ inputpos))
-                 (cond ((= counter 4)
-                        (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                        (base64-insert-char (logand (lsh bits -8) 255) 1 nil
-                                        work-buffer)
-                        (base64-insert-char (logand bits 255) 1 nil
-                                            work-buffer)
-                        (setq bits 0 counter 0))
-                       (t (setq bits (lsh bits 6)))))))
-             (cond
-              ((= (point) end)
-               (if (not (zerop counter))
-                   (error "at least %d bits missing at end of base64 encoding"
-                          (* (- 4 counter) 6)))
-               (setq done t))
-              ((eq (char-after (point)) ?=)
-               (setq done t)
-               (cond ((= counter 1)
-                      (error "at least 2 bits missing at end of base64 encoding"))
-                     ((= counter 2)
-                      (base64-insert-char (lsh bits -10) 1 nil work-buffer))
-                     ((= counter 3)
-                      (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                      (base64-insert-char (logand (lsh bits -8) 255)
-                                          1 nil work-buffer))
-                     ((= counter 0) t)))
-              (t (skip-chars-forward non-data-chars end)))))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  ;;(message "Decoding base64... done")
-  )
+;;; Code:
 
-(defun-maybe base64-encode-region (start end &optional no-line-break)
-  (interactive "r")
-  (message "Encoding base64...")
-  (let ((work-buffer nil)
-       (counter 0)
-       (cols 0)
-       (bits 0)
-       (alphabet base64-alphabet)
-       inputpos)
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-encoder-program
-             (let ((status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-encoder-program
-                                  base64-encoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (setq inputpos start)
-           (while (< inputpos end)
-             (setq bits (+ bits (char-int (char-after inputpos))))
-             (setq counter (1+ counter))
-             (cond ((= counter 3)
-                    (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                        work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -12) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -6) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand bits 63))
-                     1 nil work-buffer)
-                    (setq cols (+ cols 4))
-                    (cond ((and (= cols 72)
-                                (not no-line-break))
-                           (base64-insert-char ?\n 1 nil work-buffer)
-                           (setq cols 0)))
-                    (setq bits 0 counter 0))
-                   (t (setq bits (lsh bits 8))))
-             (setq inputpos (1+ inputpos)))
-           ;; write out any remaining bits with appropriate padding
-           (if (= counter 0)
-               nil
-             (setq bits (lsh bits (- 16 (* 8 counter))))
-             (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                 work-buffer)
-             (base64-insert-char (aref alphabet (logand (lsh bits -12) 63))
-                                 1 nil work-buffer)
-             (if (= counter 1)
-                 (base64-insert-char ?= 2 nil work-buffer)
-               (base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
-                                   1 nil work-buffer)
-               (base64-insert-char ?= 1 nil work-buffer)))
-           (if (and (> cols 0)
-                    (not no-line-break))
-               (base64-insert-char ?\n 1 nil work-buffer)))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  (message "Encoding base64... done"))
+(eval-and-compile
+  (defun base64-autoload-functionp (object)
+    (if (functionp object)
+       (let ((def object))
+         (while (and (symbolp def) (fboundp def))
+           (setq def (symbol-function def)))
+         (eq (car-safe def) 'autoload))))
 
-(defun base64-encode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-encode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-encode-region (point-min) (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
+  (if (base64-autoload-functionp 'base64-decode-string)
+      (fmakunbound 'base64-decode-string))
+  (if (base64-autoload-functionp 'base64-decode-region)
+      (fmakunbound 'base64-decode-region))
+  (if (base64-autoload-functionp 'base64-encode-string)
+      (fmakunbound 'base64-encode-string))
+  (if (base64-autoload-functionp 'base64-encode-region)
+      (fmakunbound 'base64-encode-region))
 
-(defun base64-decode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-decode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-decode-region (point-min) (point-max))
-    (goto-char (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
+  (require 'mel)
 
-(fset 'base64-decode-string 'base64-decode)
-(fset 'base64-encode-string 'base64-encode)
+  (mel-find-function 'mime-decode-string "base64")
+  (mel-find-function 'mime-decode-region "base64")
+  (mel-find-function 'mime-encode-string "base64")
+  (mel-find-function 'mime-encode-region "base64"))
 
 (provide 'base64)
+
+;;; base64.el ends here
index 45c7b60..0147921 100644 (file)
@@ -1,14 +1,10 @@
 ;;; binhex.el -- elisp native binhex decode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Create Date: Oct 1, 1998
-;; $Revision: 1.1.2.8 $
-;; Time-stamp: <Tue Oct  6 23:48:38 EDT 1998 zsh>
-;; Keywords: binhex
+;; Keywords: binhex news
 
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
+;; 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
 
 ;;; Code:
 
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
+(eval-when-compile (require 'cl))
+
+(eval-and-compile
+  (defalias 'binhex-char-int
+    (if (fboundp 'char-int)
+       'char-int
+      'identity)))
 
 (defvar binhex-decoder-program "hexbin"
   "*Non-nil value should be a string that names a uu decoder.
@@ -68,7 +69,7 @@ input and write the converted data to its standard output.")
        ((boundp 'temporary-file-directory) temporary-file-directory)
        ("/tmp/")))
 
-(if (string-match "XEmacs" emacs-version)
+(if (featurep 'xemacs)
     (defalias 'binhex-insert-char 'insert-char)
   (defun binhex-insert-char (char &optional count ignored buffer)
     (if (or (null buffer) (eq buffer (current-buffer)))
@@ -133,14 +134,14 @@ input and write the converted data to its standard output.")
 (defun binhex-string-big-endian (string)
   (let ((ret 0) (i 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ (lsh ret 8) (char-int (aref string i)))
+      (setq ret (+ (lsh ret 8) (binhex-char-int (aref string i)))
            i (1+ i)))
     ret))
 
 (defun binhex-string-little-endian (string)
   (let ((ret 0) (i 0) (shift 0) (len (length string)))
     (while (< i len)
-      (setq ret (+ ret (lsh (char-int (aref string i)) shift))
+      (setq ret (+ ret (lsh (binhex-char-int (aref string i)) shift))
            i (1+ i)
            shift (+ shift 8)))
     ret))
@@ -150,11 +151,11 @@ input and write the converted data to its standard output.")
     (let ((pos (point-min)) len)
       (vector
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos len)))
        (prog1
-          (setq len (char-int (char-after pos)))
+          (setq len (binhex-char-int (char-after pos)))
         (setq pos (1+ pos)))
        (buffer-substring pos (setq pos (+ pos 4)))
        (buffer-substring pos (setq pos (+ pos 4)))
@@ -199,15 +200,8 @@ If HEADER-ONLY is non-nil only decode header and return filename."
        (save-excursion
          (goto-char start)
          (when (re-search-forward binhex-begin-line end t)
-           (if (and (not (string-match "XEmacs\\|Lucid" emacs-version))
-                    (boundp 'enable-multibyte-characters))
-               (let ((multibyte
-                      (default-value 'enable-multibyte-characters)))
-                 (setq-default enable-multibyte-characters nil)
-                 (setq work-buffer (generate-new-buffer " *binhex-work*"))
-                 (setq-default enable-multibyte-characters multibyte))
+           (let (default-enable-multibyte-characters)
              (setq work-buffer (generate-new-buffer " *binhex-work*")))
-           (buffer-disable-undo work-buffer)
            (beginning-of-line)
            (setq bits 0 counter 0)
            (while tmp
@@ -251,26 +245,26 @@ If HEADER-ONLY is non-nil only decode header and return filename."
             ((= counter 2)
              (binhex-push-char (logand (lsh bits -10) 255) 1 nil
                                work-buffer))))
-      (if header-only nil
-       (binhex-verify-crc work-buffer
-                          data-fork-start
-                          (+ data-fork-start (aref header 6) 2))
-       (or (markerp end) (setq end (set-marker (make-marker) end)))
-       (goto-char start)
-       (insert-buffer-substring work-buffer
-                                data-fork-start (+ data-fork-start
-                                                   (aref header 6)))
-       (delete-region (point) end)))
+         (if header-only nil
+           (binhex-verify-crc work-buffer
+                              data-fork-start
+                              (+ data-fork-start (aref header 6) 2))
+           (or (markerp end) (setq end (set-marker (make-marker) end)))
+           (goto-char start)
+           (insert-buffer-substring work-buffer
+                                    data-fork-start (+ data-fork-start
+                                                       (aref header 6)))
+           (delete-region (point) end)))
       (and work-buffer (kill-buffer work-buffer)))
     (if header (aref header 1))))
 
 (defun binhex-decode-region-external (start end)
-  "Binhex decode region between START and END using external decoder"
+  "Binhex decode region between START and END using external decoder."
   (interactive "r")
   (let ((cbuf (current-buffer)) firstline work-buffer status
-       (file-name (concat binhex-temporary-file-directory
-                          (binhex-decode-region start end t)
-                          ".data")))
+       (file-name (expand-file-name
+                   (concat (binhex-decode-region start end t) ".data")
+                   binhex-temporary-file-directory)))
     (save-excursion
       (goto-char start)
       (when (re-search-forward binhex-begin-line nil t)
index cdedb1b..f96815e 100644 (file)
@@ -1,5 +1,6 @@
 ;;; dgnushack.el --- a hack to set the load path for byte-compiling
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Katsumi Yamaoka <yamaoka@jpl.org>
 ;;; Code:
 
 ;; Set coding priority of Shift-JIS to the bottom.
-(defvar *predefined-category*)
-(defvar coding-category-list)
 (if (featurep 'xemacs)
-    (fset 'set-coding-priority 'ignore)
-  (fset 'coding-priority-list 'ignore)
-  (fset 'set-coding-priority-list 'ignore))
+    (defalias 'set-coding-priority 'ignore)
+  (defalias 'coding-priority-list 'ignore)
+  (defalias 'set-coding-priority-list 'ignore))
 (cond ((and (featurep 'xemacs) (featurep 'mule))
        (if (memq 'shift-jis (coding-priority-list))
           (set-coding-priority-list
-           (nconc (delq 'shift-jis (coding-priority-list)) '(shift-jis)))))
+           (append (delq 'shift-jis (coding-priority-list)) '(shift-jis)))))
       ((boundp 'MULE)
        (put '*coding-category-sjis* 'priority (length *predefined-category*)))
       ((featurep 'mule)
        (if (memq 'coding-category-sjis coding-category-list)
           (set-coding-priority
-           (nconc (delq 'coding-category-sjis coding-category-list)
-                  '(coding-category-sjis))))))
+           (append (delq 'coding-category-sjis
+                         (copy-sequence coding-category-list))
+                   '(coding-category-sjis))))))
 
-(fset 'facep 'ignore)
+(defalias 'facep 'ignore)
 
 (require 'cl)
+(unless (dolist (var nil t))
+  ;; Override the macro `dolist' which may have been defined in egg.el.
+  (load "cl-macs" nil t))
 
-;; cl functions.
-(define-compiler-macro mapc (&whole form fn seq &rest rest)
-  (if (and (fboundp 'mapc)
-          (subrp (symbol-function 'mapc)))
-      form
-    (if rest
-       `(let* ((fn ,fn)
-               (seq ,seq)
-               (args (cons seq ,rest))
-               (m (apply (function min) (mapcar (function length) args)))
-               (n 0))
-          (while (< n m)
-            (apply fn (mapcar (function (lambda (arg) (nth n arg))) args))
-            (setq n (1+ n)))
-          seq)
-      `(let ((seq ,seq))
-        (mapcar ,fn seq)
-        seq))))
-
-(define-compiler-macro last (&whole form x &optional n)
-  (if (and (fboundp 'last)
-          (subrp (symbol-function 'last)))
-      form
-    (if n
-       `(let* ((x ,x)
-               (n ,n)
-               (m 0)
-               (p x))
-          (while (consp p)
-            (incf m)
-            (pop p))
-          (if (<= n 0)
-              p
-            (if (< n m)
-                (nthcdr (- m n) x)
-              x)))
-      `(let ((x ,x))
-        (while (consp (cdr x))
-          (pop x))
-        x))))
+(defvar srcdir (or (getenv "srcdir") "."))
+
+(defvar dgnushack-w3-dir (let ((w3dir (getenv "W3DIR")))
+                          (unless (zerop (length w3dir))
+                            (file-name-as-directory w3dir))))
+(when dgnushack-w3-dir
+  (push dgnushack-w3-dir load-path))
 
 ;; If we are building w3 in a different directory than the source
 ;; directory, we must read *.el from source directory and write *.elc
 
 (require 'bytecomp)
 
-(defvar srcdir (or (getenv "srcdir") "."))
-
-(push srcdir load-path)
-
-;; Attempt to pickup the additional load-path(s).
-(load (expand-file-name "dgnuspath.el" srcdir) nil nil t)
-(condition-case err
-    (load "~/.lpath.el" t nil t)
-  (error (message "Error in \"~/.lpath.el\" file: %s" err)))
+(unless (fboundp 'si:byte-optimize-form-code-walker)
+  (byte-optimize-form nil);; Load `byte-opt' or `byte-optimize'.
+  (setq max-specpdl-size 3000)
+  (defalias 'si:byte-optimize-form-code-walker
+    (symbol-function 'byte-optimize-form-code-walker))
+  (defun byte-optimize-form-code-walker (form for-effect)
+    (if (and for-effect (memq (car-safe form) '(and or)))
+       ;; Fix bug in and/or forms.
+       (let ((fn (car form))
+             (backwards (reverse (cdr form))))
+         (while (and backwards
+                     (null (setcar backwards
+                                   (byte-optimize-form (car backwards) t))))
+           (setq backwards (cdr backwards)))
+         (if (and (cdr form) (null backwards))
+             (byte-compile-log
+              "  all subforms of %s called for effect; deleted" form))
+         (if backwards
+             (let ((head backwards))
+               (while (setq backwards (cdr backwards))
+                 (setcar backwards (byte-optimize-form (car backwards)
+                                                       nil)))
+               (cons fn (nreverse head)))))
+      (si:byte-optimize-form-code-walker form for-effect)))
+  (byte-compile 'byte-optimize-form-code-walker))
+
+(load (expand-file-name "gnus-clfns.el" srcdir) nil t t)
 
 (condition-case nil
     (char-after)
   (wrong-number-of-arguments
    ;; Optimize byte code for `char-after'.
-;;;   (put 'char-after 'byte-optimizer 'byte-optimize-char-after)
-;;;   (defun byte-optimize-char-after (form)
-;;;     (if (null (cdr form))
-;;;     '(char-after (point))
-;;;       form))
-   (byte-defop-compiler char-after 0-1)))
+   (put 'char-after 'byte-optimizer 'byte-optimize-char-after)
+   (defun byte-optimize-char-after (form)
+     (if (null (cdr form))
+        '(char-after (point))
+       form))))
 
 (condition-case nil
     (char-before)
   (wrong-number-of-arguments
-   (define-compiler-macro char-before (&whole form &optional pos)
-     (if (null pos)
+   ;; Optimize byte code for `char-before'.
+   (put 'char-before 'byte-optimizer 'byte-optimize-char-before)
+   (defun byte-optimize-char-before (form)
+     (if (null (cdr form))
         '(char-before (point))
        form))))
 
-;; `char-after' and `char-before' must be well-behaved before lpath.el
-;; is loaded.  Because it requires `poe' via `path-util'.
-(load (expand-file-name "lpath.el" srcdir) nil t t)
+(load (expand-file-name "dgnuspath.el" srcdir) nil nil t)
 
-(unless (fboundp 'byte-compile-file-form-custom-declare-variable)
-  ;; Bind defcustom'ed variables.
-  (put 'custom-declare-variable 'byte-hunk-handler
-       'byte-compile-file-form-custom-declare-variable)
-  (defun byte-compile-file-form-custom-declare-variable (form)
-    (if (memq 'free-vars byte-compile-warnings)
-       (setq byte-compile-bound-variables
-             (cons (nth 1 (nth 1 form)) byte-compile-bound-variables)))
-    form))
+(condition-case err
+    (load "~/.lpath.el" t nil t)
+  (error (message "Error in \"~/.lpath.el\" file: %s" err)))
+
+;; Don't load path-util until `char-after' and `char-before' have been
+;; optimized because it requires `poe' and then modify the functions.
+(or (featurep 'path-util)
+    (load "apel/path-util"))
+(add-path "apel")
+(add-path "flim")
+(unless (module-installed-p 'mel)
+  ;; FLIM 1.14 may have installed in two "flim" subdirectories.
+  (push (expand-file-name "flim"
+                         (file-name-directory (get-latest-path "^apel$" t)))
+       load-path)
+  (unless (module-installed-p 'mel)
+    (error "
+FLIM package does not found in %s.
+Try to re-configure with --with-addpath=FLIM_PATH and run make again.
+"
+          (progn
+            (add-path "semi")
+            load-path))))
+(add-path "semi")
+
+(push srcdir load-path)
+(load (expand-file-name "lpath.el" srcdir) nil t t)
 
 ;; Bind functions defined by `defun-maybe'.
 (put 'defun-maybe 'byte-hunk-handler 'byte-compile-file-form-defun-maybe)
     :symbol-for-testing-whether-colon-keyword-is-available-or-not
   (void-variable
    ;; Bind keywords.
-   (mapcar (lambda (keyword) (set keyword keyword))
-          '(:button-keymap :data :file :mime-handle))))
+   (dolist (keyword '(:button-keymap :data :file :mime-handle
+                                    :key-type :value-type))
+     (set keyword keyword))))
+
+;; If you are using Mule 2.3 based on Emacs 19.34, you may also put the
+;; following lines in your .emacs file, before gnus related modules are
+;; loaded.  It is not always necessary.  However if it is done, you will
+;; be able to load or evaluate gnus related *.el (not compiled) files.
+;; ------ cut here ------ cut here ------ cut here ------ cut here ------
+(if (boundp 'MULE)
+    (progn
+      (setq :version ':version
+           :set-after ':set-after)
+      (require 'custom)
+      (defadvice custom-handle-keyword
+       (around dont-signal-an-error-even-if-unsupported-keyword-is-given
+               activate)
+       "Don't signal an error even if unsupported keyword is given."
+       (if (not (memq (ad-get-arg 1) '(:version :set-after)))
+           ad-do-it))))
+;; ------ cut here ------ cut here ------ cut here ------ cut here ------
+
+(when (boundp 'MULE)
+  (put 'custom-declare-face 'byte-optimizer
+       'byte-optimize-ignore-unsupported-custom-keywords)
+  (put 'custom-declare-group 'byte-optimizer
+       'byte-optimize-ignore-unsupported-custom-keywords)
+  (defun byte-optimize-ignore-unsupported-custom-keywords (form)
+    (if (or (memq ':version (nthcdr 4 form))
+           (memq ':set-after (nthcdr 4 form)))
+       (let ((newform (list (car form) (nth 1 form)
+                            (nth 2 form) (nth 3 form)))
+             (args (nthcdr 4 form)))
+         (while args
+           (or (memq (car args) '(:version :set-after))
+               (setq newform (nconc newform (list (car args)
+                                                  (car (cdr args))))))
+           (setq args (cdr (cdr args))))
+         newform)
+      form))
+
+  (put 'custom-declare-variable 'byte-hunk-handler
+       'byte-compile-file-form-custom-declare-variable)
+  (defun byte-compile-file-form-custom-declare-variable (form)
+    ;; Bind defcustom'ed variables.
+    (if (memq 'free-vars byte-compile-warnings)
+       (setq byte-compile-bound-variables
+             (cons (nth 1 (nth 1 form)) byte-compile-bound-variables)))
+    (if (memq ':version (nthcdr 4 form))
+       ;; Make the variable uncustomizable.
+       `(defvar ,(nth 1 (nth 1 form)) ,(nth 1 (nth 2 form))
+          ,(substring (nth 3 form) (if (string-match "^[\t *]+" (nth 3 form))
+                                       (match-end 0)
+                                     0)))
+      ;; Ignore unsupported keyword(s).
+      (if (memq ':set-after (nthcdr 4 form))
+         (let ((newform (list (car form) (nth 1 form)
+                              (nth 2 form) (nth 3 form)))
+               (args (nthcdr 4 form)))
+           (while args
+             (or (eq (car args) ':set-after)
+                 (setq newform (nconc newform (list (car args)
+                                                    (car (cdr args))))))
+             (setq args (cdr (cdr args))))
+           newform)
+       form))))
 
 ;; Unknown variables and functions.
 (unless (boundp 'buffer-file-coding-system)
   (defvar buffer-file-coding-system (symbol-value 'file-coding-system)))
-(autoload 'font-lock-set-defaults "font-lock")
-(unless (fboundp 'coding-system-get)
-  (defalias 'coding-system-get 'ignore))
-(when (boundp 'MULE)
-  (defalias 'find-coding-system 'ignore))
-(unless (fboundp 'get-charset-property)
-  (defalias 'get-charset-property 'ignore))
 (unless (featurep 'xemacs)
   (defalias 'Custom-make-dependencies 'ignore)
-  (defalias 'toolbar-gnus 'ignore)
   (defalias 'update-autoloads-from-directory 'ignore))
 (autoload 'texinfo-parse-line-arg "texinfmt")
 
-(unless (fboundp 'with-temp-buffer)
-  ;; Pickup some macros.
-  (require 'emu))
-
 (defalias 'device-sound-enabled-p 'ignore)
 (defalias 'play-sound-file 'ignore)
 (defalias 'nndb-request-article 'ignore)
 (defalias 'ange-ftp-re-read-dir 'ignore)
 (defalias 'define-mail-user-agent 'ignore)
 
-(eval-and-compile
-  (unless (string-match "XEmacs" emacs-version)
-    (fset 'get-popup-menu-response 'ignore)
-    (fset 'event-object 'ignore)
-    (fset 'x-defined-colors 'ignore)
-    (fset 'read-color 'ignore)))
+(defconst dgnushack-unexporting-files
+  (append '("dgnushack.el" "dgnuspath.el" "lpath.el" "ptexinfmt.el")
+         (unless (or (condition-case code
+                         (require 'w3-forms)
+                       (error
+                        (message "No w3: %s %s retrying..." code
+                                 (locate-library "w3-forms"))
+                        nil))
+                     ;; Maybe mis-configured Makefile is used (e.g.
+                     ;; configured for FSFmacs but XEmacs is running).
+                     (let ((lp (delete dgnushack-w3-dir
+                                       (copy-sequence load-path))))
+                       (if (let ((load-path lp))
+                             (condition-case nil
+                                 (require 'w3-forms)
+                               (error nil)))
+                           ;; If success, fix `load-path' for compiling.
+                           (progn
+                             (setq load-path lp)
+                             (message " => fixed; W3DIR=%s"
+                                      (file-name-directory
+                                       (locate-library "w3-forms")))
+                             t)
+                         (message " => ignored")
+                         nil)))
+           '("nnweb.el" "nnlistserv.el" "nnultimate.el"
+             "nnslashdot.el" "nnwarchive.el" "webmail.el"
+             "nnwfm.el"))
+         (condition-case nil
+             (progn (require 'bbdb) nil)
+           (error '("gnus-bbdb.el")))
+         (unless (featurep 'xemacs)
+           '("gnus-xmas.el" "gnus-picon.el" "messagexmas.el"
+             "nnheaderxm.el" "smiley.el"))
+         (when (or (featurep 'xemacs) (<= emacs-major-version 20))
+           '("smiley-ems.el"))
+         (when (and (fboundp 'base64-decode-string)
+                    (subrp (symbol-function 'base64-decode-string)))
+           '("base64.el"))
+         (when (and (fboundp 'md5) (subrp (symbol-function 'md5)))
+           '("md5.el")))
+  "Files which will not be installed.")
+
+(defconst dgnushack-exporting-files
+  (let ((files (directory-files srcdir nil "^[^=].*\\.el$" t)))
+    (dolist (file dgnushack-unexporting-files)
+      (setq files (delete file files)))
+    (sort files 'string-lessp))
+  "Files which will be compiled and installed.")
+
+(defun dgnushack-exporting-files ()
+  "Print name of files which will be installed."
+  (princ (mapconcat 'identity dgnushack-exporting-files " ")))
 
 (defun dgnushack-compile (&optional warn)
   ;;(setq byte-compile-dynamic t)
@@ -219,188 +323,45 @@ You also then need to add the following to the lisp/dgnushack.el file:
      (push \"~/lisp/custom\" load-path)
 
 Modify to suit your needs."))
-  (let ((files (delete "dgnuspath.el"
-                      (directory-files srcdir nil "^[^=].*\\.el$")))
-       (xemacs (string-match "XEmacs" emacs-version))
+
+  ;; Show `load-path'.
+  (message "load-path=(\"%s\")"
+          (mapconcat 'identity load-path "\"\n           \""))
+
+  (dolist (file dgnushack-exporting-files)
+    (setq file (expand-file-name file srcdir))
+    (when (and (file-exists-p
+               (setq elc (concat (file-name-nondirectory file) "c")))
+              (file-newer-than-file-p file elc))
+      (delete-file elc)))
+
+  (let ((files dgnushack-exporting-files)
        ;;(byte-compile-generate-call-tree t)
        file elc)
-    (condition-case ()
-       (require 'w3-forms)
-      (error
-       (dolist (file '("nnweb.el" "nnlistserv.el" "nnultimate.el"
-                      "nnslashdot.el" "nnwarchive.el" "webmail.el"))
-        (setq files (delete file files)))))
-    (condition-case ()
-       (require 'bbdb)
-      (error (setq files (delete "gnus-bbdb.el" files))))
     (while (setq file (pop files))
-      (unless (or (and (not xemacs)
-                      (member file
-                              '("gnus-xmas.el" "gnus-picon.el"
-                                "messagexmas.el" "nnheaderxm.el"
-                                "smiley.el" "x-overlay.el")))
-                 (and (string-equal file "md5.el")
-                      (not (and (fboundp 'md5)
-                                (subrp (symbol-function 'md5))))))
-       (setq file (expand-file-name file srcdir))
-       (when (or (not (file-exists-p (setq elc (concat file "c"))))
-                 (file-newer-than-file-p file elc))
-         (ignore-errors
-           (byte-compile-file file)))))))
+      (setq file (expand-file-name file srcdir))
+      (when (or (not (file-exists-p
+                     (setq elc (concat (file-name-nondirectory file) "c"))))
+               (file-newer-than-file-p file elc))
+       (ignore-errors
+         (byte-compile-file file))))))
 
 (defun dgnushack-recompile ()
   (require 'gnus)
   (byte-recompile-directory "." 0))
 
 \f
-;; Avoid byte-compile warnings.
-(defvar gnus-product-name)
-(defvar early-package-load-path)
-(defvar early-packages)
-(defvar last-package-load-path)
-(defvar last-packages)
-(defvar late-package-load-path)
-(defvar late-packages)
-
-(defconst dgnushack-info-file-regexp
-  (concat "^\\(gnus\\|message\\|emacs-mime\\|gnus-ja\\|message-ja\\)"
-         "\\.info\\(-[0-9]+\\)?$"))
-
-(defconst dgnushack-texi-file-regexp
-  "^\\(gnus\\|message\\|emacs-mime\\|gnus-ja\\|message-ja\\)\\.texi$")
-
-(defun dgnushack-make-package ()
-  (require 'gnus)
-  (let* ((product-name (downcase gnus-product-name))
-        (lisp-dir (concat "lisp/" product-name "/"))
-        make-backup-files)
-
-    (message "Updating autoloads for directory %s..." default-directory)
-    (let ((generated-autoload-file "auto-autoloads.el")
-         noninteractive
-         (omsg (symbol-function 'message)))
-      (defun message (fmt &rest args)
-       (cond ((and (string-equal "Generating autoloads for %s..." fmt)
-                   (file-exists-p (file-name-nondirectory (car args))))
-              (funcall omsg fmt (file-name-nondirectory (car args))))
-             ((string-equal "No autoloads found in %s" fmt))
-             ((string-equal "Generating autoloads for %s...done" fmt))
-             (t (apply omsg fmt args))))
-      (unwind-protect
-         (update-autoloads-from-directory default-directory)
-       (fset 'message omsg)))
-    (byte-compile-file "auto-autoloads.el")
-
-    (with-temp-buffer
-      (let ((standard-output (current-buffer)))
-       (Custom-make-dependencies "."))
-      (message (buffer-string)))
-    (require 'cus-load)
-    (byte-compile-file "custom-load.el")
-
-    (message "Generating MANIFEST.%s for the package..." product-name)
-    (with-temp-buffer
-      (insert "pkginfo/MANIFEST." product-name "\n"
-             lisp-dir
-             (mapconcat
-              'identity
-              (sort (delete "dgnuspath.el"
-                            (delete "patchs.elc"
-                                    (directory-files "." nil "\\.elc?$")))
-                    'string-lessp)
-              (concat "\n" lisp-dir))
-             "\ninfo/"
-             (mapconcat
-              'identity
-              (sort (directory-files "../texi/"
-                                     nil dgnushack-info-file-regexp)
-                    'string-lessp)
-              "\ninfo/")
-             "\n")
-      (write-file (concat "../MANIFEST." product-name)))))
-
-(defun dgnushack-install-package ()
-  (let ((package-dir (car command-line-args-left))
-       dirs info-dir pkginfo-dir product-name lisp-dir manifest files)
-    (unless package-dir
-      (when (boundp 'early-packages)
-       (setq dirs (delq nil (append (when early-package-load-path
-                                      early-packages)
-                                    (when late-package-load-path
-                                      late-packages)
-                                    (when last-package-load-path
-                                      last-packages))))
-       (while (and dirs (not package-dir))
-         (when (file-exists-p (car dirs))
-           (setq package-dir (car dirs)
-                 dirs (cdr dirs))))))
-    (unless package-dir
-      (error "%s" "
-You must specify the name of the package path as follows:
-
-% make install-package PACKAGEDIR=/usr/local/lib/xemacs/xemacs-packages
-"
-            ))
-    (setq info-dir (expand-file-name "info/" package-dir)
-         pkginfo-dir (expand-file-name "pkginfo/" package-dir))
-    (require 'gnus)
-    (setq product-name (downcase gnus-product-name)
-         lisp-dir (expand-file-name (concat "lisp/" product-name "/")
-                                    package-dir)
-         manifest (concat "MANIFEST." product-name))
-
-    (unless (file-directory-p lisp-dir)
-      (make-directory lisp-dir t))
-    (unless (file-directory-p info-dir)
-      (make-directory info-dir))
-    (unless (file-directory-p pkginfo-dir)
-      (make-directory pkginfo-dir))
-
-    (setq files
-         (sort (delete "dgnuspath.el"
-                       (delete "dgnuspath.elc"
-                               (directory-files "." nil "\\.elc?$")))
-               'string-lessp))
-    (mapcar
-     (lambda (file)
-       (unless (member file files)
-        (setq file (expand-file-name file lisp-dir))
-        (message "Removing %s..." file)
-        (condition-case nil
-            (delete-file file)
-          (error nil))))
-     (directory-files lisp-dir nil nil nil t))
-    (mapcar
-     (lambda (file)
-       (message "Copying %s to %s..." file lisp-dir)
-       (copy-file file (expand-file-name file lisp-dir) t t))
-     files)
-
-    (mapcar
-     (lambda (file)
-       (message "Copying ../texi/%s to %s..." file info-dir)
-       (copy-file (expand-file-name file "../texi/")
-                 (expand-file-name file info-dir)
-                 t t))
-     (sort (directory-files "../texi/" nil dgnushack-info-file-regexp)
-          'string-lessp))
-
-    (message "Copying ../%s to %s..." manifest pkginfo-dir)
-    (copy-file (expand-file-name manifest "../")
-              (expand-file-name manifest pkginfo-dir) t t)
-
-    (message "Done")))
-
 (defun dgnushack-texi-add-suffix-and-format ()
   (dgnushack-texi-format t))
 
 (defun dgnushack-texi-format (&optional addsuffix)
   (if (not noninteractive)
       (error "batch-texinfo-format may only be used -batch."))
-  (require 'texinfmt)
+  (require 'ptexinfmt)
   (let ((auto-save-default nil)
        (find-file-run-dired nil)
-       coding-system-for-write)
+       coding-system-for-write
+       output-coding-system)
     (let ((error 0)
          file
          (files ()))
@@ -412,25 +373,40 @@ You must specify the name of the package path as follows:
                     command-line-args-left (cdr command-line-args-left)))
              ((file-directory-p file)
               (setq command-line-args-left
-                    (nconc (directory-files file)
+                    (nconc (directory-files file nil nil t)
                            (cdr command-line-args-left))))
              (t
               (setq files (cons file files)
                     command-line-args-left (cdr command-line-args-left)))))
-      (while files
-       (setq file (car files)
-             files (cdr files))
+      (while (setq file (pop files))
        (condition-case err
            (progn
              (if buffer-file-name (kill-buffer (current-buffer)))
              (find-file file)
-             (setq coding-system-for-write buffer-file-coding-system)
+             (buffer-disable-undo (current-buffer))
+             (if (boundp 'MULE)
+                 (setq output-coding-system (symbol-value
+                                             'file-coding-system))
+               (setq coding-system-for-write buffer-file-coding-system))
+             ;; Remove ignored areas first.
+             (while (re-search-forward "^@ignore[\t\r ]*$" nil t)
+               (delete-region (match-beginning 0)
+                              (if (re-search-forward
+                                   "^@end[\t ]+ignore[\t\r ]*$" nil t)
+                                  (1+ (match-end 0))
+                                (point-max))))
+             (goto-char (point-min))
+             ;; formerly EMACSINFOHACK in texi/Makefile.
+             (while (re-search-forward "@\\(end \\)?ifnottex\n*" nil t)
+               (replace-match ""))
+             (goto-char (point-min))
+             ;; Add suffix if it is needed.
              (when (and addsuffix
                         (re-search-forward
                          "^@setfilename[\t ]+\\([^\t\n ]+\\)" nil t)
                         (not (string-match "\\.info$" (match-string 1))))
-               (insert ".info"))
-             (buffer-disable-undo (current-buffer))
+               (insert ".info")
+               (goto-char (point-min)))
              ;; process @include before updating node
              ;; This might produce some problem if we use @lowersection or
              ;; such.
@@ -488,4 +464,120 @@ You must specify the name of the package path as follows:
           (setq error 1))))
       (kill-emacs error))))
 
+\f
+(defconst dgnushack-info-file-regexp-en
+  (let ((names '("gnus" "message" "emacs-mime"))
+       regexp name)
+    (while (setq name (pop names))
+      (setq regexp (concat regexp "^" name "\\.info\\(-[0-9]+\\)?$"
+                          (when names "\\|"))))
+    regexp)
+  "Regexp matching English info files.")
+
+(defconst dgnushack-info-file-regexp-ja
+  (let ((names '("gnus-ja" "message-ja"))
+       regexp name)
+    (while (setq name (pop names))
+      (setq regexp (concat regexp "^" name "\\.info\\(-[0-9]+\\)?$"
+                          (when names "\\|"))))
+    regexp)
+  "Regexp matching Japanese info files.")
+
+(defun dgnushack-make-autoloads ()
+  "Make auto-autoloads.el, custom-load.el and then compile them."
+  (let ((auto-autoloads (expand-file-name "auto-autoloads.el" srcdir))
+       (custom-load (expand-file-name "custom-load.el" srcdir)))
+    (unless (and (file-exists-p auto-autoloads)
+                (file-exists-p (concat auto-autoloads "c"))
+                (file-newer-than-file-p (concat auto-autoloads "c")
+                                        auto-autoloads)
+                (file-exists-p custom-load)
+                (file-exists-p (concat custom-load "c"))
+                (file-newer-than-file-p (concat custom-load "c")
+                                        custom-load))
+      (let (make-backup-files)
+       (message "Updating autoloads for directory %s..." default-directory)
+       (let ((generated-autoload-file auto-autoloads)
+             (si:message (symbol-function 'message))
+             noninteractive)
+         (defun message (fmt &rest args)
+           (cond ((and (string-equal "Generating autoloads for %s..." fmt)
+                       (file-exists-p (file-name-nondirectory (car args))))
+                  (funcall si:message
+                           fmt (file-name-nondirectory (car args))))
+                 ((string-equal "No autoloads found in %s" fmt))
+                 ((string-equal "Generating autoloads for %s...done" fmt))
+                 (t (apply si:message fmt args))))
+         (unwind-protect
+             (update-autoloads-from-directory default-directory)
+           (fset 'message si:message)))
+       (byte-compile-file auto-autoloads)
+       (with-temp-buffer
+         (let ((standard-output (current-buffer)))
+           (Custom-make-dependencies "."))
+         (message "%s" (buffer-string)))
+       (require 'cus-load)
+       (byte-compile-file custom-load)))))
+
+(defun dgnushack-remove-extra-files-in-package ()
+  "Remove extra files in the lisp directory of the XEmacs package."
+  (let ((lisp-dir (expand-file-name (concat "lisp/"
+                                           ;; GNUS_PRODUCT_NAME
+                                           (cadr command-line-args-left)
+                                           "/")
+                                   ;; PACKAGEDIR
+                                   (car command-line-args-left))))
+    (when (file-directory-p lisp-dir)
+      (let (files)
+       (dolist (file dgnushack-exporting-files)
+         (setq files (nconc files (list file (concat file "c")))))
+       (dolist (file (directory-files lisp-dir nil nil t t))
+         (unless (member file files)
+           (setq file (expand-file-name file lisp-dir))
+           (message "Removing %s..." file)
+           (condition-case nil
+               (delete-file file)
+             (error nil))))))))
+
+(defun dgnushack-install-package-manifest ()
+  "Install MANIFEST file as an XEmacs package."
+  (let* ((package-dir (car command-line-args-left))
+        (product-name (cadr command-line-args-left))
+        (name (expand-file-name (concat "pkginfo/MANIFEST." product-name)
+                                package-dir))
+        make-backup-files)
+    (message "Generating %s..." name)
+    (with-temp-file name
+      (insert "pkginfo/MANIFEST." product-name "\n")
+      (let ((lisp-dir (concat "lisp/" product-name "/"))
+           (files (sort (directory-files "." nil "\\.elc?$" t) 'string-lessp))
+           file)
+       (while (setq file (pop files))
+         (unless (member file dgnushack-unexporting-files)
+           (insert lisp-dir file "\n")))
+       (setq files
+             (sort (directory-files "../texi/" nil
+                                    (concat dgnushack-info-file-regexp-en
+                                            "\\|"
+                                            dgnushack-info-file-regexp-ja)
+                                    t)
+                   'string-lessp))
+       (while (setq file (pop files))
+         (insert "info/" file "\n"))))))
+
+\f
+(define-compiler-macro describe-key-briefly (&whole form key &optional insert)
+  (if (condition-case nil
+         (progn
+           (describe-key-briefly '((())) nil)
+           t)
+       (wrong-number-of-arguments nil);; Old Emacsen.
+       (error t))
+      form
+    (if insert
+       `(if ,insert
+            (insert (funcall 'describe-key-briefly ,key))
+          (funcall 'describe-key-briefly ,key))
+      `(funcall 'describe-key-briefly ,key))))
+
 ;;; dgnushack.el ends here
index 36749e6..3ee338f 100644 (file)
@@ -7,8 +7,11 @@
     (setq path (file-name-as-directory
                (expand-file-name (match-string 0 addpath)))
          addpath (substring addpath (match-end 0)))
-    (if (string-match "apel/" path)
-       (setq path (substring path 0 (match-beginning 0))))
+    (if (string-match "apel/$" path)
+       (progn
+         (if (file-directory-p path)
+             (setq paths (nconc paths (list path))))
+         (setq path (substring path 0 (match-beginning 0)))))
     (if (file-directory-p path)
        (setq paths (nconc paths (list path)))))
   (or (null paths)
diff --git a/lisp/drums.el b/lisp/drums.el
deleted file mode 100644 (file)
index 6b4a0d8..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-;;; drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; 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.
-
-;;; Commentary:
-
-;; DRUMS is an IETF Working Group that works (or worked) on the
-;; successor to RFC822, "Standard For The Format Of Arpa Internet Text
-;; Messages".  This library is based on
-;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05.
-
-;;; Code:
-
-(require 'time-date)
-(require 'mm-util)
-
-(defvar drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
-  "US-ASCII control characters excluding CR, LF and white space.")
-(defvar drums-text-token "\001-\011\013\014\016-\177"
-  "US-ASCII characters exlcuding CR and LF.")
-(defvar drums-specials-token "()<>[]:;@\\,.\""
-  "Special characters.")
-(defvar drums-quote-token "\\"
-  "Quote character.")
-(defvar drums-wsp-token " \t"
-  "White space.")
-(defvar drums-fws-regexp
-  (concat "[" drums-wsp-token "]*\n[" drums-wsp-token "]+")
-  "Folding white space.")
-(defvar drums-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~"
-  "Textual token.")
-(defvar drums-dot-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~."
-  "Textual token including full stop.")
-(defvar drums-qtext-token
-  (concat drums-no-ws-ctl-token "\041\043-\133\135-\177")
-  "Non-white-space control characaters, plus the rest of ASCII excluding backslash and doublequote.")
-(defvar drums-tspecials "][()<>@,;:\\\"/?="
-  "Tspecials.")
-
-(defvar drums-syntax-table
-  (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
-    (modify-syntax-entry ?\\ "/" table)
-    (modify-syntax-entry ?< "(" table)
-    (modify-syntax-entry ?> ")" table)
-    (modify-syntax-entry ?@ "w" table)
-    (modify-syntax-entry ?/ "w" table)
-    (modify-syntax-entry ?= " " table)
-    (modify-syntax-entry ?* " " table)
-    (modify-syntax-entry ?\; " " table)
-    (modify-syntax-entry ?\' " " table)
-    table))
-
-(defun drums-token-to-list (token)
-  "Translate TOKEN into a list of characters."
-  (let ((i 0)
-       b e c out range)
-    (while (< i (length token))
-      (setq c (mm-char-int (aref token i)))
-      (incf i)
-      (cond
-       ((eq c (mm-char-int ?-))
-       (if b
-           (setq range t)
-         (push c out)))
-       (range
-       (while (<= b c)
-         (push (mm-make-char 'ascii b) out)
-         (incf b))
-       (setq range nil))
-       ((= i (length token))
-       (push (mm-make-char 'ascii c) out))
-       (t
-       (setq b c))))
-    (nreverse out)))
-
-(defsubst drums-init (string)
-  (set-syntax-table drums-syntax-table)
-  (insert string)
-  (drums-unfold-fws)
-  (goto-char (point-min)))
-
-(defun drums-remove-comments (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (let (c)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (delete-region (point) (progn (forward-sexp 1) (point))))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-remove-whitespace (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((memq c '(? ?\t ?\n))
-         (delete-char 1))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-get-comment (string)
-  "Return the first comment in STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (result c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (setq result
-               (buffer-substring
-                (1+ (point))
-                (progn (forward-sexp 1) (1- (point))))))
-        (t
-         (forward-char 1))))
-      result)))
-
-(defun drums-parse-address (string)
-  "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
-  (with-temp-buffer
-    (let (display-name mailbox c display-string)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((or (eq c ? )
-             (eq c ?\t))
-         (forward-char 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((eq c ?\")
-         (push (buffer-substring
-                (1+ (point)) (progn (forward-sexp 1) (1- (point))))
-               display-name))
-        ((looking-at (concat "[" drums-atext-token "@" "]"))
-         (push (buffer-substring (point) (progn (forward-sexp 1) (point)))
-               display-name))
-        ((eq c ?<)
-         (setq mailbox
-               (drums-remove-whitespace
-                (drums-remove-comments
-                 (buffer-substring
-                  (1+ (point))
-                  (progn (forward-sexp 1) (1- (point))))))))
-        (t (error "Unknown symbol: %c" c))))
-      ;; If we found no display-name, then we look for comments.
-      (if display-name
-         (setq display-string
-               (mapconcat 'identity (reverse display-name) " "))
-       (setq display-string (drums-get-comment string)))
-      (if (not mailbox)
-         (when (string-match "@" display-string)
-           (cons
-            (mapconcat 'identity (nreverse display-name) "")
-            (drums-get-comment string)))
-       (cons mailbox display-string)))))
-
-(defun drums-parse-addresses (string)
-  "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
-  (with-temp-buffer
-    (drums-init string)
-    (let ((beg (point))
-         pairs c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((memq c '(?\" ?< ?\())
-         (forward-sexp 1))
-        ((eq c ?,)
-         (push (drums-parse-address (buffer-substring beg (point)))
-               pairs)
-         (forward-char 1)
-         (setq beg (point)))
-        (t
-         (forward-char 1))))
-      (push (drums-parse-address (buffer-substring beg (point)))
-           pairs)
-      (nreverse pairs))))
-
-(defun drums-unfold-fws ()
-  "Unfold folding white space in the current buffer."
-  (goto-char (point-min))
-  (while (re-search-forward drums-fws-regexp nil t)
-    (replace-match " " t t))
-  (goto-char (point-min)))
-
-(defun drums-parse-date (string)
-  "Return an Emacs time spec from STRING."
-  (apply 'encode-time (parse-time-string string)))
-
-(defun drums-narrow-to-header ()
-  "Narrow to the header section in the current buffer."
-  (narrow-to-region
-   (goto-char (point-min))
-   (if (search-forward "\n\n" nil 1)
-       (1- (point))
-     (point-max)))
-  (goto-char (point-min)))
-
-(defun drums-quote-string (string)
-  "Quote string if it needs quoting to be displayed in a header."
-  (if (not (string-match (concat "[^" drums-atext-token "]") string))
-      (concat "\"" string "\"")
-    string))
-
-(provide 'drums)
-
-;;; drums.el ends here
index a698479..7c42e8b 100644 (file)
@@ -1,7 +1,11 @@
 ;;; earcon.el --- Sound effects for messages
-;; Copyright (C) 1996 Free Software Foundation
+
+;; Copyright (C) 1996, 2000 Free Software Foundation
 
 ;; Author: Steven L. Baur <steve@miranova.com>
+
+;; 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)
@@ -22,9 +26,6 @@
 
 ;;; Code:
 
-(if (null (boundp 'running-xemacs))
-    (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)))
-
 (eval-when-compile (require 'cl))
 (require 'gnus)
 (require 'gnus-audio)
diff --git a/lisp/flow-fill.el b/lisp/flow-fill.el
new file mode 100644 (file)
index 0000000..64946f9
--- /dev/null
@@ -0,0 +1,103 @@
+;;; flow-fill.el --- interprete RFC2646 "flowed" text
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <jas@pdc.kth.se>
+;; Keywords: mail
+
+;; 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.
+
+;;; Commentary:
+
+;; This implement decoding of RFC2646 formatted text, including the
+;; quoted-depth wins rules.
+
+;; Theory of operation: search for lines ending with SPC, save quote
+;; length of line, remove SPC and concatenate line with the following
+;; line if quote length of following line matches current line.
+
+;; When no further concatenations are possible, we've found a
+;; paragraph and we let `fill-region' fill the long line into several
+;; lines with the quote prefix as `fill-prefix'.
+
+;; Todo: encoding, implement basic `fill-region' (Emacs and XEmacs
+;;       implementations differ..)
+
+;; History:
+
+;; 2000-02-17  posted on ding mailing list
+;; 2000-02-19  use `point-at-{b,e}ol' in XEmacs
+;; 2000-03-11  no compile warnings for point-at-bol stuff
+;; 2000-03-26  commited to gnus cvs
+;; 2000-10-23  don't flow "-- " lines, make "quote-depth wins" rule
+;;             work when first line is at level 0.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(eval-and-compile
+  (defalias 'fill-flowed-point-at-bol
+       (if (fboundp 'point-at-bol)
+           'point-at-bol
+         'line-beginning-position))
+
+   (defalias 'fill-flowed-point-at-eol
+       (if (fboundp 'point-at-eol)
+           'point-at-eol
+         'line-end-position)))
+
+(defun fill-flowed (&optional buffer)
+  (save-excursion
+    (set-buffer (or (current-buffer) buffer))
+    (goto-char (point-min))
+    (while (re-search-forward " $" nil t)
+      (when (save-excursion
+             (beginning-of-line)
+             (looking-at "^\\(>*\\)\\( ?\\)"))
+       (let ((quote (match-string 1)) sig)
+         (if (string= quote "")
+             (setq quote nil))
+         (when (and quote (string= (match-string 2) ""))
+           (save-excursion
+             ;; insert SP after quote for pleasant reading of quoted lines
+             (beginning-of-line)
+             (when (> (skip-chars-forward ">") 0)
+               (insert " "))))
+         (while (and (save-excursion
+                       (ignore-errors (backward-char 3))
+                       (setq sig (looking-at "-- "))
+                       (looking-at "[^-][^-] "))
+                     (save-excursion
+                       (unless (eobp)
+                         (forward-char 1)
+                         (looking-at (format "^\\(%s\\)\\([^>]\\)" (or quote " ?"))))))
+           (save-excursion
+             (replace-match (if (string= (match-string 2) " ")
+                                "" "\\2")))
+           (backward-delete-char -1)
+           (end-of-line))
+         (unless sig
+           (let ((fill-prefix (when quote (concat quote " "))))
+             (fill-region (fill-flowed-point-at-bol)
+                          (fill-flowed-point-at-eol)
+                          'left 'nosqueeze))))))))
+
+(provide 'flow-fill)
+
+;;; flow-fill.el ends here
index 8986dc0..6cd39ed 100644 (file)
@@ -1,5 +1,5 @@
 ;;; format-spec.el --- functions for formatting arbitrary formatting strings
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: tools
index 889283f..852a525 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-agent.el --- unplugged support for Semi-gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'gnus)
 (require 'gnus-cache)
 (require 'nnvirtual)
 (require 'gnus-sum)
-(eval-when-compile (require 'gnus-score))
+(require 'gnus-score)
+(eval-when-compile
+  (if (featurep 'xemacs)
+      (require 'itimer)
+    (require 'timer))
+  (require 'gnus-group))
 
 (defcustom gnus-agent-directory (nnheader-concat gnus-directory "agent/")
   "Where the Gnus agent will store its files."
@@ -77,6 +84,11 @@ If nil, only read articles will be expired."
   :group 'gnus-agent
   :type 'hook)
 
+(defcustom gnus-agent-confirmation-function 'y-or-n-p
+  "Function to confirm when error happens."
+  :group 'gnus-agent
+  :type 'function)
+
 (defcustom gnus-agent-large-newsgroup nil
   "*The number of articles which indicates a large newsgroup.
 If the number of unread articles exceeds it, The number of articles to be
@@ -85,6 +97,14 @@ fetched will be limited to it. If not a positive integer, never consider it."
   :type '(choice (const nil)
                 (integer :tag "Number")))
 
+(defcustom gnus-agent-synchronize-flags 'ask
+  "Indicate if flags are synchronized when you plug in.
+If this is `ask' the hook will query the user."
+  :type '(choice (const :tag "Always" t)
+                (const :tag "Never" nil)
+                (const :tag "Ask" ask))
+  :group 'gnus-agent)
+
 ;;; Internal variables
 
 (defvar gnus-agent-history-buffers nil)
@@ -102,10 +122,6 @@ fetched will be limited to it. If not a positive integer, never consider it."
 (defvar gnus-agent-send-mail-function nil)
 (defvar gnus-agent-file-coding-system 'raw-text)
 
-(defconst gnus-agent-scoreable-headers
-  '("subject" "from" "date" "message-id" "references" "chars" "lines" "xref")
-  "Headers that are considered when scoring articles for download via the Agent.")
-
 ;; Dynamic variables
 (defvar gnus-headers)
 (defvar gnus-score)
@@ -188,7 +204,7 @@ fetched will be limited to it. If not a positive integer, never consider it."
 (defmacro gnus-agent-with-fetch (&rest forms)
   "Do FORMS safely."
   `(unwind-protect
-       (progn
+       (let ((gnus-agent-fetching t))
         (gnus-agent-start-fetch)
         ,@forms)
      (gnus-agent-stop-fetch)))
@@ -235,7 +251,7 @@ fetched will be limited to it. If not a positive integer, never consider it."
   "Jc" gnus-enter-category-buffer
   "Jj" gnus-agent-toggle-plugged
   "Js" gnus-agent-fetch-session
-  "JY" gnus-agent-synchronize
+  "JY" gnus-agent-synchronize-flags
   "JS" gnus-group-send-drafts
   "Ja" gnus-agent-add-group
   "Jr" gnus-agent-remove-group)
@@ -292,6 +308,7 @@ fetched will be limited to it. If not a positive integer, never consider it."
   (if plugged
       (progn
        (setq gnus-plugged plugged)
+       (gnus-agent-possibly-synchronize-flags)
        (gnus-run-hooks 'gnus-agent-plugged-hook)
        (setcar (cdr gnus-agent-mode-status) " Plugged"))
     (gnus-agent-close-connections)
@@ -373,6 +390,43 @@ be a select method."
     (while (search-backward "\n" nil t)
       (replace-match "\\n" t t))))
 
+(defun gnus-agent-restore-gcc ()
+  "Restore GCC field from saved header."
+  (save-excursion
+    (goto-char (point-min))
+    (while (re-search-forward (concat gnus-agent-gcc-header ":") nil t)
+      (replace-match "Gcc:" 'fixedcase))))
+
+(defun gnus-agent-any-covered-gcc ()
+  (save-restriction
+    (message-narrow-to-headers)
+    (let* ((gcc (mail-fetch-field "gcc" nil t))
+          (methods (and gcc
+                        (mapcar 'gnus-inews-group-method
+                                (message-unquote-tokens
+                                 (message-tokenize-header
+                                  gcc " ,")))))
+          covered)
+      (while (and (not covered) methods)
+       (setq covered
+             (member (car methods) gnus-agent-covered-methods)
+             methods (cdr methods)))
+      covered)))
+
+(defun gnus-agent-possibly-save-gcc ()
+  "Save GCC if Gnus is unplugged."
+  (when (and (not gnus-plugged) (gnus-agent-any-covered-gcc))
+    (save-excursion
+      (goto-char (point-min))
+      (let ((case-fold-search t))
+       (while (re-search-forward "^gcc:" nil t)
+         (replace-match (concat gnus-agent-gcc-header ":") 'fixedcase))))))
+
+(defun gnus-agent-possibly-do-gcc ()
+  "Do GCC if Gnus is plugged."
+  (when (or gnus-plugged (not (gnus-agent-any-covered-gcc)))
+    (gnus-inews-do-gcc)))
+
 ;;;
 ;;; Group mode commands
 ;;;
@@ -427,26 +481,49 @@ be a select method."
          (setf (cadddr c) (delete group (cadddr c))))))
     (gnus-category-write)))
 
-(defun gnus-agent-synchronize ()
-  "Synchronize local, unplugged, data with backend.
-Currently sends flag setting requests, if any."
+(defun gnus-agent-synchronize-flags ()
+  "Synchronize unplugged flags with servers."
+  (interactive)
+  (save-excursion
+    (dolist (gnus-command-method gnus-agent-covered-methods)
+      (when (file-exists-p (gnus-agent-lib-file "flags"))
+       (gnus-agent-synchronize-flags-server gnus-command-method)))))
+
+(defun gnus-agent-possibly-synchronize-flags ()
+  "Synchronize flags according to `gnus-agent-synchronize-flags'."
   (interactive)
   (save-excursion
     (dolist (gnus-command-method gnus-agent-covered-methods)
       (when (file-exists-p (gnus-agent-lib-file "flags"))
-       (set-buffer (get-buffer-create " *Gnus Agent flag synchronize*"))
-       (erase-buffer)
-       (insert-file-contents (gnus-agent-lib-file "flags"))
-       (if (null (gnus-check-server gnus-command-method))
-           (message "Couldn't open server %s" (nth 1 gnus-command-method))
-         (while (not (eobp))
-           (if (null (eval (read (current-buffer))))
-               (progn (forward-line)
-                      (kill-line -1))
-             (write-file (gnus-agent-lib-file "flags"))
-             (error "Couldn't set flags from file %s"
-                    (gnus-agent-lib-file "flags"))))
-         (write-file (gnus-agent-lib-file "flags")))))))
+       (gnus-agent-possibly-synchronize-flags-server gnus-command-method)))))
+
+(defun gnus-agent-synchronize-flags-server (method)
+  "Synchronize flags set when unplugged for server."
+  (let ((gnus-command-method method))
+    (when (file-exists-p (gnus-agent-lib-file "flags"))
+      (set-buffer (get-buffer-create " *Gnus Agent flag synchronize*"))
+      (erase-buffer)
+      (nnheader-insert-file-contents (gnus-agent-lib-file "flags"))
+      (if (null (gnus-check-server gnus-command-method))
+         (message "Couldn't open server %s" (nth 1 gnus-command-method))
+       (while (not (eobp))
+         (if (null (eval (read (current-buffer))))
+             (progn (forward-line)
+                    (kill-line -1))
+           (write-file (gnus-agent-lib-file "flags"))
+           (error "Couldn't set flags from file %s"
+                  (gnus-agent-lib-file "flags"))))
+       (delete-file (gnus-agent-lib-file "flags")))
+      (kill-buffer nil))))
+
+(defun gnus-agent-possibly-synchronize-flags-server (method)
+  "Synchronize flags for server according to `gnus-agent-synchronize-flags'."
+  (when (or (and gnus-agent-synchronize-flags
+                (not (eq gnus-agent-synchronize-flags 'ask)))
+           (and (eq gnus-agent-synchronize-flags 'ask)
+                (gnus-y-or-n-p (format "Synchronize flags on server `%s'? "
+                                       (cadr method)))))
+    (gnus-agent-synchronize-flags-server method)))
 
 ;;;
 ;;; Server mode commands
@@ -486,8 +563,12 @@ Currently sends flag setting requests, if any."
 (defun gnus-agent-write-servers ()
   "Write the alist of covered servers."
   (gnus-make-directory (nnheader-concat gnus-agent-directory "lib"))
-  (with-temp-file (nnheader-concat gnus-agent-directory "lib/servers")
-    (prin1 gnus-agent-covered-methods (current-buffer))))
+  (let ((coding-system-for-write nnheader-file-coding-system)
+       (output-coding-system nnheader-file-coding-system)
+       (file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
+    (with-temp-file (nnheader-concat gnus-agent-directory "lib/servers")
+      (prin1 gnus-agent-covered-methods (current-buffer)))))
 
 ;;;
 ;;; Summary commands
@@ -615,8 +696,9 @@ the actual number of articles toggled is returned."
             (set (intern (symbol-name sym) orig) (symbol-value sym)))))
        new))
     (gnus-make-directory (file-name-directory file))
-    (gnus-write-active-file-as-coding-system gnus-agent-file-coding-system
-                                            file orig)))
+    ;; The hashtable contains real names of groups,  no more prefix
+    ;; removing, so set `full' to `t'.
+    (gnus-write-active-file file orig t)))
 
 (defun gnus-agent-save-groups (method)
   (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format))
@@ -624,7 +706,12 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-save-group-info (method group active)
   (when (gnus-agent-method-p method)
     (let* ((gnus-command-method method)
-          (file (gnus-agent-lib-file "active")))
+          (coding-system-for-write nnheader-file-coding-system)
+          (output-coding-system nnheader-file-coding-system)
+          (file-name-coding-system nnmail-pathname-coding-system)
+          (pathname-coding-system nnmail-pathname-coding-system)
+          (file (gnus-agent-lib-file "active"))
+          oactive)
       (gnus-make-directory (file-name-directory file))
       (with-temp-file file
        (when (file-exists-p file)
@@ -632,9 +719,17 @@ the actual number of articles toggled is returned."
        (goto-char (point-min))
        (when (re-search-forward
               (concat "^" (regexp-quote group) " ") nil t)
+         (save-excursion
+           (save-restriction
+             (narrow-to-region (match-beginning 0)
+                               (progn
+                                 (forward-line 1)
+                                 (point)))
+             (setq oactive (car (nnmail-parse-active)))))
          (gnus-delete-line))
-       (insert (format "%S %d %d y\n" (intern group) (cdr active)
-                       (car active)))
+       (insert (format "%S %d %d y\n" (intern group)
+                       (cdr active)
+                       (or (car oactive) (car active))))
        (goto-char (point-max))
        (while (search-backward "\\." nil t)
          (delete-char 1))))))
@@ -646,7 +741,7 @@ the actual number of articles toggled is returned."
     (nnheader-translate-file-chars
      (nnheader-replace-chars-in-string
       (nnheader-replace-duplicate-chars-in-string
-       (nnheader-replace-chars-in-string 
+       (nnheader-replace-chars-in-string
        (gnus-group-real-name group)
        ?/ ?_)
        ?. ?_)
@@ -682,7 +777,7 @@ the actual number of articles toggled is returned."
     (insert "\n")
     (let ((file (gnus-agent-lib-file "history")))
       (when (file-exists-p file)
-       (insert-file file))
+       (nnheader-insert-file-contents file))
       (set (make-local-variable 'gnus-agent-file-name) file))))
 
 (defun gnus-agent-save-history ()
@@ -704,11 +799,15 @@ the actual number of articles toggled is returned."
   (save-excursion
     (set-buffer gnus-agent-current-history)
     (goto-char (point-max))
-    (insert id "\t" (number-to-string date) "\t")
-    (while group-arts
-      (insert (caar group-arts) " " (number-to-string (cdr (pop group-arts)))
-             " "))
-    (insert "\n")))
+    (let ((p (point)))
+      (insert id "\t" (number-to-string date) "\t")
+      (while group-arts
+       (insert (format "%S" (intern (caar group-arts)))
+               " " (number-to-string (cdr (pop group-arts)))
+               " "))
+      (insert "\n")
+      (while (search-backward "\\." p t)
+       (delete-char 1)))))
 
 (defun gnus-agent-article-in-history-p (id)
   (save-excursion
@@ -737,7 +836,7 @@ the actual number of articles toggled is returned."
     ;; Prune off articles that we have already fetched.
     (while (and articles
                (cdr (assq (car articles) gnus-agent-article-alist)))
-     (pop articles))
+      (pop articles))
     (let ((arts articles))
       (while (cdr arts)
        (if (cdr (assq (cadr arts) gnus-agent-article-alist))
@@ -758,7 +857,10 @@ the actual number of articles toggled is returned."
          (with-temp-buffer
            (let (article)
              (while (setq article (pop articles))
-               (when (gnus-request-article article group)
+               (when (or
+                      (gnus-backlog-request-article group article
+                                                    nntp-server-buffer)
+                      (gnus-request-article article group))
                  (goto-char (point-max))
                  (push (cons article (point)) pos)
                  (insert-buffer-substring nntp-server-buffer)))
@@ -816,7 +918,7 @@ the actual number of articles toggled is returned."
       (setcdr alist (cons (cons (cdar crosses) t) (cdr alist)))
       (save-excursion
        (set-buffer (gnus-get-buffer-create (format " *Gnus agent overview %s*"
-                                              group)))
+                                                   group)))
        (when (= (point-max) (point-min))
          (push (cons group (current-buffer)) gnus-agent-buffer-alist)
          (ignore-errors
@@ -855,12 +957,12 @@ the actual number of articles toggled is returned."
               (< 0 gnus-agent-large-newsgroup))
       (and (< 0 (setq i (- len gnus-agent-large-newsgroup)))
           (setq articles (nthcdr i articles))))
-    ;; add article with marks to list of article headers we want to fetch
+    ;; add article with marks to list of article headers we want to fetch.
     (dolist (arts (gnus-info-marks (gnus-get-info group)))
       (setq articles (gnus-union (gnus-uncompress-sequence (cdr arts))
                                 articles)))
     (setq articles (sort articles '<))
-    ;; remove known articles
+    ;; Remove known articles.
     (when (gnus-agent-load-alist group)
       (setq articles (gnus-sorted-intersection
                      articles
@@ -869,7 +971,7 @@ the actual number of articles toggled is returned."
                             (cdr (gnus-active group)))))))
     ;; Fetch them.
     (gnus-make-directory (nnheader-translate-file-chars
-                         (file-name-directory file)))
+                         (file-name-directory file) t))
     (when articles
       (gnus-message 7 "Fetching headers for %s..." group)
       (save-excursion
@@ -949,15 +1051,17 @@ the actual number of articles toggled is returned."
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
   "Save the article-state alist for GROUP."
-  (with-temp-file (if dir
-                     (concat dir ".agentview")
-                   (gnus-agent-article-name ".agentview" group))
-    (princ (setq gnus-agent-article-alist
-                (nconc gnus-agent-article-alist
-                       (mapcar (lambda (article) (cons article state))
-                               articles)))
-          (current-buffer))
-    (insert "\n")))
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
+    (with-temp-file (if dir
+                       (concat dir ".agentview")
+                     (gnus-agent-article-name ".agentview" group))
+      (princ (setq gnus-agent-article-alist
+                  (nconc gnus-agent-article-alist
+                         (mapcar (lambda (article) (cons article state))
+                                 articles)))
+            (current-buffer))
+      (insert "\n"))))
 
 (defun gnus-agent-article-name (article group)
   (concat (gnus-agent-directory) (gnus-agent-group-path group) "/"
@@ -968,7 +1072,8 @@ the actual number of articles toggled is returned."
   "Start Gnus and fetch session."
   (interactive)
   (gnus)
-  (gnus-agent-fetch-session)
+  (let ((gnus-agent-confirmation-function 'gnus-agent-batch-confirmation))
+    (gnus-agent-fetch-session))
   (gnus-group-exit))
 
 (defun gnus-agent-fetch-session ()
@@ -982,14 +1087,24 @@ the actual number of articles toggled is returned."
        groups group gnus-command-method)
     (save-excursion
       (while methods
-       (setq gnus-command-method (car methods))
-       (when (or (gnus-server-opened gnus-command-method)
-                 (gnus-open-server gnus-command-method))
-         (setq groups (gnus-groups-from-server (car methods)))
-         (gnus-agent-with-fetch
-           (while (setq group (pop groups))
-             (when (<= (gnus-group-level group) gnus-agent-handle-level)
-               (gnus-agent-fetch-group-1 group gnus-command-method)))))
+       (condition-case err
+           (progn
+             (setq gnus-command-method (car methods))
+             (when (or (gnus-server-opened gnus-command-method)
+                       (gnus-open-server gnus-command-method))
+               (setq groups (gnus-groups-from-server (car methods)))
+               (gnus-agent-with-fetch
+                 (while (setq group (pop groups))
+                   (when (<= (gnus-group-level group) gnus-agent-handle-level)
+                     (gnus-agent-fetch-group-1 group gnus-command-method))))))
+         (error
+          (unless (funcall gnus-agent-confirmation-function
+                           (format "Error (%s).  Continue? " err))
+            (error "Cannot fetch articles into the Gnus agent.")))
+         (quit 
+          (unless (funcall gnus-agent-confirmation-function
+                           (format "Quit (%s).  Continue? " err))
+            (signal 'quit "Cannot fetch articles into the Gnus agent."))))
        (pop methods))
       (gnus-message 6 "Finished fetching articles into the Gnus agent"))))
 
@@ -1000,70 +1115,51 @@ the actual number of articles toggled is returned."
        gnus-newsgroup-dependencies gnus-newsgroup-headers
        gnus-newsgroup-scored gnus-headers gnus-score
        gnus-use-cache articles arts
-       category predicate info marks score-param)
+       category predicate info marks score-param
+       (gnus-summary-expunge-below gnus-summary-expunge-below)
+       (gnus-summary-mark-below gnus-summary-mark-below)
+       (gnus-orphan-score gnus-orphan-score)
+       ;; Maybe some other gnus-summary local variables should also
+       ;; be put here.
+       )
     (unless (gnus-check-group group)
       (error "Can't open server for %s" group))
     ;; Fetch headers.
     (when (and (or (gnus-active group) (gnus-activate-group group))
               (setq articles (gnus-agent-fetch-headers group))
-              (progn
+              (let ((nntp-server-buffer gnus-agent-overview-buffer))
                 ;; Parse them and see which articles we want to fetch.
                 (setq gnus-newsgroup-dependencies
                       (make-vector (length articles) 0))
-                ;; No need to call `gnus-get-newsgroup-headers-xover' with
-                ;; the entire .overview for group as we still have the just
-                ;; downloaded headers in `gnus-agent-overview-buffer'.
-                (let ((nntp-server-buffer gnus-agent-overview-buffer))
-                  (setq gnus-newsgroup-headers
-                        (gnus-get-newsgroup-headers-xover articles nil nil
-                                                          group)))
+                (setq gnus-newsgroup-headers
+                      (gnus-get-newsgroup-headers-xover articles nil nil
+                                                        group))
                 ;; `gnus-agent-overview-buffer' may be killed for
-                ;; timeout reason. If so, recreate it.
+                ;; timeout reason.  If so, recreate it.
                 (gnus-agent-create-buffer)))
       (setq category (gnus-group-category group))
       (setq predicate
            (gnus-get-predicate
             (or (gnus-group-find-parameter group 'agent-predicate t)
                 (cadr category))))
-      ;; Do we want to download everything, or nothing?
-      (if (or (eq (caaddr predicate) 'gnus-agent-true)
-             (eq (caaddr predicate) 'gnus-agent-false))
-         ;; Yes.
-         (setq arts (symbol-value
-                     (cadr (assoc (caaddr predicate)
-                                  '((gnus-agent-true articles)
-                                    (gnus-agent-false nil))))))
-       ;; No, we need to decide what we want.
+      (if (memq (caaddr predicate) '(gnus-agent-true gnus-agent-false))
+         ;; Simple implementation
+         (setq arts
+               (and (eq (caaddr predicate) 'gnus-agent-true) articles))
+       (setq arts nil)
        (setq score-param
-             (let ((score-method
-                    (or
-                     (gnus-group-find-parameter group 'agent-score t)
-                     (caddr category))))
-               (when score-method
-                 (require 'gnus-score)
-                 (if (eq score-method 'file)
-                     (let ((entries
-                            (gnus-score-load-files
-                             (gnus-all-score-files group)))
-                           list score-file)
-                       (while (setq list (car entries))
-                         (push (car list) score-file)
-                         (setq list (cdr list))
-                         (while list
-                           (when (member (caar list)
-                                         gnus-agent-scoreable-headers)
-                             (push (car list) score-file))
-                           (setq list (cdr list)))
-                         (setq score-param
-                               (append score-param (list (nreverse score-file)))
-                               score-file nil entries (cdr entries)))
-                       (list score-param))
-                   (if (stringp (car score-method))
-                       score-method
-                     (list (list score-method)))))))
+             (or (gnus-group-get-parameter group 'agent-score t)
+                 (caddr category)))
+       ;; Translate score-param into real one
+       (cond
+        ((not score-param))
+        ((eq score-param 'file)
+         (setq score-param (gnus-all-score-files group)))
+        ((stringp (car score-param)))
+        (t
+         (setq score-param (list (list score-param)))))
        (when score-param
          (gnus-score-headers score-param))
-       (setq arts nil)
        (while (setq gnus-headers (pop gnus-newsgroup-headers))
          (setq gnus-score
                (or (cdr (assq (mail-header-number gnus-headers)
@@ -1289,8 +1385,8 @@ The following commands are available:
   (let ((info (assq category gnus-category-alist))
        (buffer-read-only nil))
     (gnus-delete-line)
-    (gnus-category-write)
-    (setq gnus-category-alist (delq info gnus-category-alist))))
+    (setq gnus-category-alist (delq info gnus-category-alist))
+    (gnus-category-write)))
 
 (defun gnus-category-copy (category to)
   "Copy the current category."
@@ -1445,13 +1541,24 @@ The following commands are available:
              (goto-char (point-min))
              (while (not (eobp))
                (skip-chars-forward "^\t")
-               (if (> (read (current-buffer)) day)
+               (if (let ((fetch-date (read (current-buffer))))
+                     (if (numberp fetch-date)
+                         (>  fetch-date day)
+                       ;; History file is corrupted.
+                       (gnus-message 
+                        5 
+                        (format "File %s is corrupted!"
+                                (gnus-agent-lib-file "history")))
+                       (sit-for 1)
+                       ;; Ignore it
+                       t))
                    ;; New article; we don't expire it.
                    (forward-line 1)
                  ;; Old article.  Schedule it for possible nuking.
                  (while (not (eolp))
-                   (setq sym (let ((obarray expiry-hashtb))
-                               (read (current-buffer))))
+                   (setq sym (let ((obarray expiry-hashtb) s)
+                               (setq s (read (current-buffer)))
+                               (if (stringp s) (intern s) s)))
                    (if (boundp sym)
                        (set sym (cons (cons (read (current-buffer)) (point))
                                       (symbol-value sym)))
@@ -1583,9 +1690,7 @@ The following commands are available:
                (gnus-delete-line))
              (gnus-agent-save-history)
              (gnus-agent-close-history)
-             (gnus-write-active-file-as-coding-system
-              gnus-agent-file-coding-system
-              (gnus-agent-lib-file "active") orig))
+             (gnus-write-active-file (gnus-agent-lib-file "active") orig))
            (gnus-message 4 "Expiry...done")))))))
 
 ;;;###autoload
index cf5e933..8e3b3d3 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-art.el --- article mode commands for Semi-gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 (eval-when-compile (require 'static))
 
 (require 'path-util)
-(require 'custom)
 (require 'gnus)
 (require 'gnus-sum)
 (require 'gnus-spec)
 (require 'gnus-int)
-(require 'browse-url)
 (require 'alist)
 (require 'mime-view)
+(require 'wid-edit)
 
 ;; Avoid byte-compile warnings.
-(defvar gnus-article-decoded-p)
-(defvar gnus-article-mime-handles)
 (eval-when-compile
   (require 'mm-bodies)
   (require 'mail-parse)
   (require 'mm-decode)
   (require 'mm-view)
-  (require 'wid-edit)
   (require 'mm-uu)
   )
 
     "^X-Sun-Charset:" "^X-Accept-Language:" "^X-Envelope-Sender:"
     "^List-[A-Za-z]+:" "^X-Listprocessor-Version:"
     "^X-Received:" "^X-Distribute:" "^X-Sequence:" "^X-Juno-Line-Breaks:"
-    "^X-Notes-Item:" "^X-MS-TNEF-Correlator:" "^x-uunet-gateway:")
+    "^X-Notes-Item:" "^X-MS-TNEF-Correlator:" "^x-uunet-gateway:"
+    "^X-Received:" "^Content-length:" "X-precedence:")
   "*All headers that start with this regexp will be hidden.
 This variable can also be a list of regexps of headers to be ignored.
 If `gnus-visible-headers' is non-nil, this variable will be ignored."
@@ -149,7 +146,7 @@ If `gnus-visible-headers' is non-nil, this variable will be ignored."
   :group 'gnus-article-hiding)
 
 (defcustom gnus-visible-headers
-  "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^[BGF]?Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|^X-Sent:"
+  "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^[BGF]?Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Mail-Followup-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|^X-Sent:"
   "*All headers that do not match this regexp will be hidden.
 This variable can also be a list of regexp of headers to remain visible.
 If this variable is non-nil, `gnus-ignored-headers' will be ignored."
@@ -180,8 +177,8 @@ Possible values in this list are `empty', `newsgroups', `followup-to',
              (const :tag "Followup-to identical to newsgroups." followup-to)
              (const :tag "Reply-to identical to from." reply-to)
              (const :tag "Date less than four days old." date)
-             (const :tag "Very long To header." long-to)
-             (const :tag "Multiple To headers." many-to))
+             (const :tag "Very long To and/or Cc header." long-to)
+             (const :tag "Multiple To and/or Cc headers." many-to))
   :group 'gnus-article-hiding)
 
 (defcustom gnus-signature-separator '("^-- $" "^-- *$")
@@ -193,7 +190,7 @@ the end of the buffer."
   :group 'gnus-article-signature)
 
 (defcustom gnus-signature-limit nil
-   "Provide a limit to what is considered a signature.
+  "Provide a limit to what is considered a signature.
 If it is a number, no signature may not be longer (in characters) than
 that number.  If it is a floating point number, no signature may be
 longer (in lines) than that number.  If it is a function, the function
@@ -211,17 +208,32 @@ regexp.  If it matches, the text in question is not a signature."
   :type 'sexp
   :group 'gnus-article-hiding)
 
+;; Fixme: This isn't the right thing for mixed graphical and and
+;; non-graphical frames in a session.
 (defcustom gnus-article-x-face-command
-  (if (and (not gnus-xemacs)
-          window-system
-          (module-installed-p 'x-face-mule))
-      'x-face-mule-gnus-article-display-x-face
-    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | display -"
-    )
+  (cond
+   ((and (fboundp 'image-type-available-p)
+        (module-installed-p 'x-face-e21))
+    'x-face-decode-message-header)
+   ((and (fboundp 'image-type-available-p)
+        (image-type-available-p 'xbm))
+    'gnus-article-display-xface)
+   ((and (not (featurep 'xemacs))
+        window-system
+        (module-installed-p 'x-face-mule))
+    'x-face-mule-gnus-article-display-x-face)
+   (t
+    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | display -"))
   "*String or function to be executed to display an X-Face header.
 If it is a string, the command will be executed in a sub-shell
 asynchronously.         The compressed face will be piped to this command."
-  :type 'string                                ;Leave function case to Lisp.
+  :type '(choice string
+                (function-item
+                 :tag "x-face-decode-message-header (x-face-e21)"
+                 x-face-decode-message-header)
+                (function-item gnus-article-display-xface)
+                (function-item x-face-mule-gnus-article-display-x-face)
+                function)
   :group 'gnus-article-washing)
 
 (defcustom gnus-article-x-face-too-ugly nil
@@ -229,6 +241,13 @@ asynchronously.     The compressed face will be piped to this command."
   :type '(choice regexp (const nil))
   :group 'gnus-article-washing)
 
+(defcustom gnus-article-banner-alist nil
+  "Banner alist for stripping.
+For example, 
+     ((egroups . \"^[ \\t\\n]*-------------------+\\\\( eGroups Sponsor -+\\\\)?....\\n\\\\(.+\\n\\\\)+\"))"
+  :type '(repeat (cons symbol regexp))
+  :group 'gnus-article-washing)
+
 (defcustom gnus-emphasis-alist
   (let ((format
         "\\(\\s-\\|^\\|[-\"]\\|\\s(\\)\\(%s\\(\\w+\\(\\s-+\\w+\\)*[.,]?\\)%s\\)\\(\\s-\\|[-,;:\"]\\s-\\|[?!.]+\\s-\\|\\s)\\)")
@@ -265,6 +284,14 @@ is the face used for highlighting."
                       face))
   :group 'gnus-article-emphasis)
 
+(defcustom gnus-emphasize-whitespace-regexp "^[ \t]+\\|[ \t]*\n"
+  "A regexp to describe whitespace which should not be emphasized.
+Typical values are \"^[ \\t]+\\\\|[ \\t]*\\n\" and \"[ \\t]+\\\\|[ \\t]*\\n\".
+The former avoids underlining of leading and trailing whitespace,
+and the latter avoids underlining any whitespace at all."
+  :group 'gnus-article-emphasis
+  :type 'regexp)
+
 (defface gnus-emphasis-bold '((t (:bold t)))
   "Face used for displaying strong emphasized text (*word*)."
   :group 'gnus-article-emphasis)
@@ -489,7 +516,8 @@ Obsolete; use the face `gnus-signature-face' for customizations instead."
   :group 'gnus-article-signature)
 
 (defface gnus-signature-face
-  '((t (:italic t)))
+  '((t
+     (:italic t)))
   "Face used for highlighting a signature in the article buffer."
   :group 'gnus-article-highlight
   :group 'gnus-article-signature)
@@ -598,7 +626,8 @@ displayed by the first non-nil matching CONTENT face."
   "Function used to decode headers.")
 
 (defvar gnus-article-dumbquotes-map
-  '(("\202" ",")
+  '(("\200" "EUR")
+    ("\202" ",")
     ("\203" "f")
     ("\204" ",,")
     ("\205" "...")
@@ -609,8 +638,8 @@ displayed by the first non-nil matching CONTENT face."
     ("\223" "``")
     ("\224" "\"")
     ("\225" "*")
-    ("\226" "---")
-    ("\227" "-")
+    ("\226" "-")
+    ("\227" "--")
     ("\231" "(TM)")
     ("\233" ">")
     ("\234" "oe")
@@ -635,7 +664,9 @@ on parts -- for instance, adding Vcard info to a database."
   :type 'function)
 
 (defcustom gnus-mime-multipart-functions nil
-  "An alist of MIME types to functions to display them.")
+  "An alist of MIME types to functions to display them."
+  :group 'gnus-article-mime
+  :type 'alist)
 
 (defcustom gnus-article-date-lapsed-new-header nil
   "Whether the X-Sent and Date headers can coexist.
@@ -649,9 +680,9 @@ be added below it (otherwise)."
   "Function called with a MIME handle as the argument.
 This is meant for people who want to view first matched part.
 For `undisplayed-alternative' (default), the first undisplayed 
-part or alternative part is used. For `undisplayed', the first 
-undisplayed part is used. For a function, the first part which 
-the function return `t' is used. For `nil', the first part is
+part or alternative part is used.  For `undisplayed', the first 
+undisplayed part is used.  For a function, the first part which 
+the function return `t' is used.  For `nil', the first part is
 used."
   :group 'gnus-article-mime
   :type '(choice 
@@ -661,6 +692,20 @@ used."
                :value undisplayed-alternative)
          (function)))
 
+(defcustom gnus-mime-action-alist
+  '(("save to file" . gnus-mime-save-part)
+    ("display as text" . gnus-mime-inline-part)
+    ("view the part" . gnus-mime-view-part)
+    ("pipe to command" . gnus-mime-pipe-part)
+    ("toggle display" . gnus-article-press-button)
+    ("view as type" . gnus-mime-view-part-as-type)
+    ("internalize type" . gnus-mime-internalize-part)
+    ("externalize type" . gnus-mime-externalize-part))
+  "An alist of actions that run on the MIME attachment."
+  :group 'gnus-article-mime
+  :type '(repeat (cons (string :tag "name")
+                      (function))))
+
 ;;;
 ;;; The treatment variables
 ;;;
@@ -712,7 +757,11 @@ See the manual for details."
   :type gnus-article-treat-head-custom)
 (put 'gnus-treat-buttonize-head 'highlight t)
 
-(defcustom gnus-treat-emphasize nil
+(defcustom gnus-treat-emphasize 
+  (and (or window-system
+          (featurep 'xemacs)
+          (>= (string-to-number emacs-version) 21))
+       50000)
   "Emphasize text.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
@@ -762,6 +811,13 @@ See the manual for details."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
+(defcustom gnus-treat-hide-citation-maybe nil
+  "Hide cited text.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See the manual for details."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
 (defcustom gnus-treat-strip-list-identifiers 'head
   "Strip list identifiers from `gnus-list-identifiers`.
 Valid values are nil, t, `head', `last', an integer or a predicate.
@@ -887,7 +943,10 @@ See the manual for details."
 (put 'gnus-treat-overstrike 'highlight t)
 
 (defcustom gnus-treat-display-xface
-  (if (or (and gnus-xemacs (featurep 'xface))
+  (if (or (and (fboundp 'image-type-available-p)
+              (image-type-available-p 'xbm)
+              (string-match "^0x" (shell-command-to-string "uncompface")))
+         (and (featurep 'xemacs) (featurep 'xface))
          (eq 'x-face-mule-gnus-article-display-x-face
              gnus-article-x-face-command))
       'head
@@ -900,8 +959,11 @@ See the manual for details."
 (put 'gnus-treat-display-xface 'highlight t)
 
 (defcustom gnus-treat-display-smileys
-  (if (or (and gnus-xemacs (featurep 'xpm))
-         (and (not gnus-xemacs)
+  (if (or (and (featurep 'xemacs)
+              (featurep 'xpm))
+         (and (fboundp 'image-type-available-p)
+              (image-type-available-p 'pbm))
+         (and (not (featurep 'xemacs))
               window-system
               (module-installed-p 'smiley-mule)))
       t
@@ -913,7 +975,7 @@ See the manual for details."
   :type gnus-article-treat-custom)
 (put 'gnus-treat-display-smileys 'highlight t)
 
-(defcustom gnus-treat-display-picons (if gnus-xemacs 'head nil)
+(defcustom gnus-treat-display-picons (if (featurep 'xemacs) 'head nil)
   "Display picons.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See the manual for details."
@@ -967,7 +1029,7 @@ See the manual for details."
 
 (defvar gnus-article-mime-handle-alist-1 nil)
 (defvar gnus-treatment-function-alist
-  '((gnus-treat-decode-article-as-default-mime-charset
+  `((gnus-treat-decode-article-as-default-mime-charset
      gnus-article-decode-article-as-default-mime-charset)
     (gnus-treat-strip-banner gnus-article-strip-banner)
     (gnus-treat-strip-headers-in-body gnus-article-strip-headers-in-body)
@@ -980,6 +1042,7 @@ See the manual for details."
     (gnus-treat-hide-boring-headers gnus-article-hide-boring-headers)
     (gnus-treat-hide-signature gnus-article-hide-signature)
     (gnus-treat-hide-citation gnus-article-hide-citation)
+    (gnus-treat-hide-citation-maybe gnus-article-hide-citation-maybe)
     (gnus-treat-strip-list-identifiers gnus-article-hide-list-identifiers)
     (gnus-treat-strip-pgp gnus-article-hide-pgp)
     (gnus-treat-strip-pem gnus-article-hide-pem)
@@ -1001,7 +1064,10 @@ See the manual for details."
      gnus-article-strip-multiple-blank-lines)
     (gnus-treat-overstrike gnus-article-treat-overstrike)
     (gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
-    (gnus-treat-display-smileys gnus-smiley-display)
+    (gnus-treat-display-smileys ,(if (or (featurep 'xemacs)
+                                        (>= emacs-major-version 21))
+                                    'gnus-smiley-display
+                                  'gnus-article-smiley-display))
     (gnus-treat-capitalize-sentences gnus-article-capitalize-sentences)
     (gnus-treat-display-picons gnus-article-display-picons)
     (gnus-treat-play-sounds gnus-earcon-display)))
@@ -1032,11 +1098,12 @@ Initialized from `text-mode-syntax-table.")
 
 (defsubst gnus-article-hide-text (b e props)
   "Set text PROPS on the B to E region, extending `intangible' 1 past B."
-  (add-text-properties b e props)
+  (gnus-add-text-properties-when 'article-type nil b e props)
   (when (memq 'intangible props)
     (put-text-property
      (max (1- b) (point-min))
      b 'intangible (cddr (memq 'intangible props)))))
+
 (defsubst gnus-article-unhide-text (b e)
   "Remove hidden text properties from region between B and E."
   (remove-text-properties b e gnus-hidden-properties)
@@ -1232,11 +1299,15 @@ always hide."
                              4))
                  (gnus-article-hide-header "date"))))
             ((eq elem 'long-to)
-             (let ((to (message-fetch-field "to")))
+             (let ((to (message-fetch-field "to"))
+                   (cc (message-fetch-field "cc")))
                (when (> (length to) 1024)
-                 (gnus-article-hide-header "to"))))
+                 (gnus-article-hide-header "to"))
+               (when (> (length cc) 1024)
+                 (gnus-article-hide-header "cc"))))
             ((eq elem 'many-to)
-             (let ((to-count 0))
+             (let ((to-count 0)
+                   (cc-count 0))
                (goto-char (point-min))
                (while (re-search-forward "^to:" nil t)
                  (setq to-count (1+ to-count)))
@@ -1248,7 +1319,19 @@ always hide."
                      (forward-line -1)
                      (narrow-to-region (point) (point-max))
                      (gnus-article-hide-header "to"))
-                   (setq to-count (1- to-count)))))))))))))
+                   (setq to-count (1- to-count))))
+               (goto-char (point-min))
+               (while (re-search-forward "^cc:" nil t)
+                 (setq cc-count (1+ cc-count)))
+               (when (> cc-count 1)
+                 (while (> cc-count 0)
+                   (goto-char (point-min))
+                   (save-restriction
+                     (re-search-forward "^cc:" nil nil cc-count)
+                     (forward-line -1)
+                     (narrow-to-region (point) (point-max))
+                     (gnus-article-hide-header "cc"))
+                   (setq cc-count (1- cc-count)))))))))))))
 
 (defun gnus-article-hide-header (header)
   (save-excursion
@@ -1328,7 +1411,7 @@ if given a positive prefix, always hide."
          (narrow-to-region header-start header-end)
          (article-hide-headers)
          ;; Re-display X-Face image under XEmacs.
-         (when (and gnus-xemacs
+         (when (and (featurep 'xemacs)
                     (gnus-functionp gnus-article-x-face-command))
            (let ((func (cadr (assq 'gnus-treat-display-xface
                                    gnus-treatment-function-alist)))
@@ -1376,9 +1459,14 @@ if given a positive prefix, always hide."
          (forward-line 1))))))
 
 (defun article-treat-dumbquotes ()
-  "Translate M******** sm*rtq**t*s into proper text.
+  "Translate M****s*** sm*rtq**t*s into proper text.
 Note that this function guesses whether a character is a sm*rtq**t* or
-not, so it should only be used interactively."
+not, so it should only be used interactively.
+
+Sm*rtq**t*s are M****s***'s unilateral extension to the character map
+in an attempt to provide more quoting characters.  If you see
+something like \\222 or \\264 where you're expecting some kind of
+apostrophe or quotation mark, then try this wash."
   (interactive)
   (article-translate-strings gnus-article-dumbquotes-map))
 
@@ -1525,7 +1613,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
                             (not (string-match gnus-article-x-face-too-ugly
                                                from))))
                    ;; Has to be present.
-                   (re-search-forward "^X-Face: " nil t))
+                   (re-search-forward "^X-Face:[ \t]*" nil t))
          ;; This used to try to do multiple faces (`while' instead of
          ;; `when' above), but (a) sending multiple EOFs to xv doesn't
          ;; work (b) it can crash some versions of Emacs (c) are
@@ -1569,39 +1657,47 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
   "Decode charset-encoded text in the article.
 If PROMPT (the prefix), prompt for a coding system to use."
   (interactive "P")
+  (let ((inhibit-point-motion-hooks t) (case-fold-search t)
+       buffer-read-only
+       (mail-parse-charset gnus-newsgroup-charset)
+       (mail-parse-ignored-charsets 
+        (save-excursion (condition-case nil
+                            (set-buffer gnus-summary-buffer)
+                          (error))
+                        gnus-newsgroup-ignored-charsets))
+       ct cte ctl charset format)
   (save-excursion
     (save-restriction
       (article-narrow-to-head)
-      (let* ((inhibit-point-motion-hooks t)
-            (case-fold-search t)
-            (ct (message-fetch-field "Content-Type" t))
-            (cte (message-fetch-field "Content-Transfer-Encoding" t))
-            (ctl (and ct (ignore-errors
-                           (mail-header-parse-content-type ct))))
-            (charset (cond
-                      (prompt
-                       (mm-read-coding-system "Charset to decode: "))
-                      (ctl
-                       (mail-content-type-get ctl 'charset))))
-            (mail-parse-charset gnus-newsgroup-charset)
-            (mail-parse-ignored-charsets 
-             (save-excursion (condition-case nil
-                                 (set-buffer gnus-summary-buffer)
-                               (error))
-                             gnus-newsgroup-ignored-charsets))
-            buffer-read-only)
-       (if (and ctl (not (string-match "/" (car ctl)))) 
-           (setq ctl nil))
-       (goto-char (point-max))
-       (widen)
-       (forward-line 1)
-       (narrow-to-region (point) (point-max))
-       (when (and (or (not ctl)
-                      (equal (car ctl) "text/plain")))
-         (mm-decode-body
-          charset (and cte (intern (downcase
-                                    (gnus-strip-whitespace cte))))
-          (car ctl)))))))
+      (setq ct (message-fetch-field "Content-Type" t)
+           cte (message-fetch-field "Content-Transfer-Encoding" t)
+           ctl (and ct (ignore-errors
+                         (mail-header-parse-content-type ct)))
+           charset (cond
+                    (prompt
+                     (mm-read-coding-system "Charset to decode: "))
+                    (ctl
+                     (mail-content-type-get ctl 'charset)))
+           format (and ctl (mail-content-type-get ctl 'format)))
+      (when cte
+       (setq cte (mail-header-strip cte)))
+      (if (and ctl (not (string-match "/" (car ctl)))) 
+         (setq ctl nil))
+      (goto-char (point-max)))
+    (forward-line 1)
+    (save-restriction
+      (narrow-to-region (point) (point-max))
+      (when (and (eq mail-parse-charset 'gnus-decoded)
+                (eq (mm-body-7-or-8) '8bit))
+       ;; The text code could have been decoded.
+       (setq charset mail-parse-charset))
+      (when (and (or (not ctl)
+                    (equal (car ctl) "text/plain"))
+                (not format)) ;; article with format will decode later.
+       (mm-decode-body
+        charset (and cte (intern (downcase
+                                  (gnus-strip-whitespace cte))))
+        (car ctl)))))))
 
 (defun article-decode-encoded-words ()
   "Remove encoded-word encoding from headers."
@@ -1618,21 +1714,101 @@ If FORCE, decode the article whether it is marked as quoted-printable
 or not."
   (interactive (list 'force))
   (save-excursion
-    (let ((buffer-read-only nil)
-         (type (gnus-fetch-field "content-transfer-encoding"))
-         (charset gnus-newsgroup-charset))
+    (let ((buffer-read-only nil) type charset)
+      (if (gnus-buffer-live-p gnus-original-article-buffer)
+         (with-current-buffer gnus-original-article-buffer
+           (setq type
+                 (gnus-fetch-field "content-transfer-encoding"))
+           (let* ((ct (gnus-fetch-field "content-type"))
+                  (ctl (and ct 
+                            (ignore-errors
+                              (mail-header-parse-content-type ct)))))
+             (setq charset (and ctl
+                                (mail-content-type-get ctl 'charset)))
+             (if (stringp charset)
+                 (setq charset (intern (downcase charset)))))))
+      (unless charset 
+       (setq charset gnus-newsgroup-charset))
+      (when (or force
+               (and type (let ((case-fold-search t))
+                           (string-match "quoted-printable" type))))
+       (article-goto-body)
+       (quoted-printable-decode-region
+        (point) (point-max) (mm-charset-to-coding-system charset))))))
+
+(defun article-de-base64-unreadable (&optional force)
+  "Translate a base64 article.
+If FORCE, decode the article whether it is marked as base64 not."
+  (interactive (list 'force))
+  (save-excursion
+    (let ((buffer-read-only nil) type charset)
+      (if (gnus-buffer-live-p gnus-original-article-buffer)
+         (with-current-buffer gnus-original-article-buffer
+           (setq type
+                 (gnus-fetch-field "content-transfer-encoding"))
+           (let* ((ct (gnus-fetch-field "content-type"))
+                  (ctl (and ct 
+                            (ignore-errors
+                              (mail-header-parse-content-type ct)))))
+             (setq charset (and ctl
+                                (mail-content-type-get ctl 'charset)))
+             (if (stringp charset)
+                 (setq charset (intern (downcase charset)))))))
+      (unless charset 
+       (setq charset gnus-newsgroup-charset))
       (when (or force
-               (and type (string-match "quoted-printable" (downcase type))))
+               (and type (let ((case-fold-search t))
+                           (string-match "base64" type))))
        (article-goto-body)
        (save-restriction
          (narrow-to-region (point) (point-max))
-         (quoted-printable-decode-region (point-min) (point-max))
-         (when charset
-           (mm-decode-body charset)))))))
+         (base64-decode-region (point-min) (point-max))
+         (mm-decode-coding-region
+          (point-min) (point-max) (mm-charset-to-coding-system charset)))))))
+
+(eval-when-compile
+  (require 'rfc1843))
+
+(defun article-decode-HZ ()
+  "Translate a HZ-encoded article."
+  (interactive)
+  (require 'rfc1843)
+  (save-excursion
+    (let ((buffer-read-only nil))
+      (rfc1843-decode-region (point-min) (point-max)))))
+
+(defun article-wash-html ()
+  "Format an html article."
+  (interactive)
+  (save-excursion
+    (let ((buffer-read-only nil)
+         charset)
+      (if (gnus-buffer-live-p gnus-original-article-buffer)
+         (with-current-buffer gnus-original-article-buffer
+           (let* ((ct (gnus-fetch-field "content-type"))
+                  (ctl (and ct 
+                            (ignore-errors
+                              (mail-header-parse-content-type ct)))))
+             (setq charset (and ctl
+                                (mail-content-type-get ctl 'charset)))
+             (if (stringp charset)
+                 (setq charset (intern (downcase charset)))))))
+      (unless charset 
+       (setq charset gnus-newsgroup-charset))
+      (article-goto-body)
+      (save-window-excursion
+       (save-restriction
+         (narrow-to-region (point) (point-max))
+         (mm-setup-w3)
+         (let ((w3-strict-width (window-width))
+               (url-standalone-mode t))
+           (condition-case var
+               (w3-region (point-min) (point-max))
+             (error))))))))
 
 (defun article-hide-list-identifiers ()
-  "Remove any list identifiers in `gnus-list-identifiers' from Subject
-header in the current article."
+  "Remove list identifies from the Subject header.
+The `gnus-list-identifiers' variable specifies what to do."
   (interactive)
   (save-excursion
     (save-restriction
@@ -1644,9 +1820,14 @@ header in the current article."
          (when regexp
            (goto-char (point-min))
            (when (re-search-forward
-                  (concat "^Subject: +\\(Re: +\\)?\\(" regexp " *\\)")
+                  (concat "^Subject: +\\(\\(\\(Re: +\\)?\\(" regexp 
+                          " *\\)\\)+\\(Re: +\\)?\\)")
                   nil t)
-             (delete-region (match-beginning 2) (match-end 0)))))))))
+             (let ((s (or (match-string 3) (match-string 5))))
+               (delete-region (match-beginning 1) (match-end 1))
+               (when s
+                 (goto-char (match-beginning 1))
+                 (insert s))))))))))
 
 (defun article-hide-pgp ()
   "Remove any PGP headers and signatures in the current article."
@@ -1717,7 +1898,7 @@ always hide."
   (save-excursion
     (save-restriction
       (let ((inhibit-point-motion-hooks t)
-           (banner (gnus-group-get-parameter gnus-newsgroup-name 'banner))
+           (banner (gnus-group-find-parameter gnus-newsgroup-name 'banner))
            (gnus-signature-limit nil)
            buffer-read-only beg end)
        (when banner
@@ -1728,6 +1909,10 @@ always hide."
              (widen)
              (forward-line -1)
              (delete-region (point) (point-max))))
+          ((symbolp banner)
+           (if (setq banner (cdr (assq banner gnus-article-banner-alist)))
+               (while (re-search-forward banner nil t)
+                 (delete-region (match-beginning 0) (match-end 0)))))
           ((stringp banner)
            (while (re-search-forward banner nil t)
              (delete-region (match-beginning 0) (match-end 0))))))))))
@@ -1937,10 +2122,13 @@ means show, 0 means toggle."
              (> arg 0))
          nil)
         ((< arg 0)
-         (gnus-article-show-hidden-text type))
+         (gnus-article-show-hidden-text type)
+         t)
         (t
          (if (eq hide 'hidden)
-             (gnus-article-show-hidden-text type)
+             (progn
+               (gnus-article-show-hidden-text type)
+               t)
            nil)))))))
 
 (defun gnus-article-hidden-text-p (type)
@@ -1955,24 +2143,16 @@ means show, 0 means toggle."
        'hidden
       nil)))
 
-(defun gnus-article-show-hidden-text (type &optional hide)
+(defun gnus-article-show-hidden-text (type &optional dummy)
   "Show all hidden text of type TYPE.
-If HIDE, hide the text instead."
-  (save-excursion
-    (let ((buffer-read-only nil)
-         (inhibit-point-motion-hooks t)
-         (end (point-min))
-         beg)
-      (while (setq beg (text-property-any end (point-max) 'article-type type))
-       (goto-char beg)
-       (setq end (or
-                  (text-property-not-all beg (point-max) 'article-type type)
-                  (point-max)))
-       (if hide
-           (gnus-article-hide-text beg end gnus-hidden-properties)
-         (gnus-article-unhide-text beg end))
-       (goto-char end))
-      t)))
+Originally it is hide instead of DUMMY."
+  (let ((buffer-read-only nil)
+       (inhibit-point-motion-hooks t))
+    (gnus-remove-text-properties-when 
+     'article-type type
+     (point-min) (point-max) 
+     (cons 'article-type (cons type
+                              gnus-hidden-properties)))))
 
 (defconst article-time-units
   `((year . ,(* 365.25 24 60 60))
@@ -1986,7 +2166,7 @@ If HIDE, hide the text instead."
 (defun article-date-ut (&optional type highlight header)
   "Convert DATE date to universal time in the current article.
 If TYPE is `local', convert to local time; if it is `lapsed', output
-how much time has lapsed since DATE. For `lapsed', the value of
+how much time has lapsed since DATE.  For `lapsed', the value of
 `gnus-article-date-lapsed-new-header' says whether the \"X-Sent:\" header
 should replace the \"Date:\" one, or should be added below it."
   (interactive (list 'ut t))
@@ -2081,9 +2261,9 @@ should replace the \"Date:\" one, or should be added below it."
       (concat "Date: "
              (current-time-string
               (let* ((e (parse-time-string date))
-                    (tm (apply 'encode-time e))
-                    (ms (car tm))
-                    (ls (- (cadr tm) (car (current-time-zone time)))))
+                     (tm (apply 'encode-time e))
+                     (ms (car tm))
+                     (ls (- (cadr tm) (car (current-time-zone time)))))
                 (cond ((< ls 0) (list (1- ms) (+ ls 65536)))
                       ((> ls 65535) (list (1+ ms) (- ls 65536)))
                       (t (list ms ls)))))
@@ -2328,76 +2508,78 @@ This format is defined by the `gnus-article-time-format' variable."
   (let ((default-name
          (funcall function group headers (symbol-value variable)))
        result)
-    (setq
-     result
-     (cond
-      ((eq filename 'default)
-       default-name)
-      ((eq filename t)
-       default-name)
-      (filename filename)
-      (t
-       (let* ((split-name (gnus-get-split-value gnus-split-methods))
-             (prompt
-              (format prompt
-                      (if (and gnus-number-of-articles-to-be-saved
-                               (> gnus-number-of-articles-to-be-saved 1))
-                          (format "these %d articles"
-                                  gnus-number-of-articles-to-be-saved)
-                        "this article")))
-             (file
-              ;; Let the split methods have their say.
-              (cond
-               ;; No split name was found.
-               ((null split-name)
-                (read-file-name
-                 (concat prompt " (default "
-                         (file-name-nondirectory default-name) ") ")
-                 (file-name-directory default-name)
-                 default-name))
-               ;; A single group name is returned.
-               ((stringp split-name)
-                (setq default-name
-                      (funcall function split-name headers
-                               (symbol-value variable)))
-                (read-file-name
-                 (concat prompt " (default "
-                         (file-name-nondirectory default-name) ") ")
-                 (file-name-directory default-name)
-                 default-name))
-               ;; A single split name was found
-               ((= 1 (length split-name))
-                (let* ((name (expand-file-name
-                              (car split-name) gnus-article-save-directory))
-                       (dir (cond ((file-directory-p name)
-                                   (file-name-as-directory name))
-                                  ((file-exists-p name) name)
-                                  (t gnus-article-save-directory))))
-                  (read-file-name
-                   (concat prompt " (default " name ") ")
-                   dir name)))
-               ;; A list of splits was found.
-               (t
-                (setq split-name (nreverse split-name))
-                (let (result)
-                  (let ((file-name-history
-                         (nconc split-name file-name-history)))
-                    (setq result
-                          (expand-file-name
-                           (read-file-name
-                            (concat prompt " (`M-p' for defaults) ")
-                            gnus-article-save-directory
-                            (car split-name))
-                           gnus-article-save-directory)))
-                  (car (push result file-name-history)))))))
-        ;; Create the directory.
-        (gnus-make-directory (file-name-directory file))
-        ;; If we have read a directory, we append the default file name.
-        (when (file-directory-p file)
-          (setq file (concat (file-name-as-directory file)
-                             (file-name-nondirectory default-name))))
-        ;; Possibly translate some characters.
-        (nnheader-translate-file-chars file)))))
+    (setq result
+         (expand-file-name
+          (cond
+           ((eq filename 'default)
+            default-name)
+           ((eq filename t)
+            default-name)
+           (filename filename)
+           (t
+            (let* ((split-name (gnus-get-split-value gnus-split-methods))
+                   (prompt
+                    (format prompt
+                            (if (and gnus-number-of-articles-to-be-saved
+                                     (> gnus-number-of-articles-to-be-saved 1))
+                                (format "these %d articles"
+                                        gnus-number-of-articles-to-be-saved)
+                              "this article")))
+                   (file
+                    ;; Let the split methods have their say.
+                    (cond
+                     ;; No split name was found.
+                     ((null split-name)
+                      (read-file-name
+                       (concat prompt " (default "
+                               (file-name-nondirectory default-name) ") ")
+                       (file-name-directory default-name)
+                       default-name))
+                     ;; A single group name is returned.
+                     ((stringp split-name)
+                      (setq default-name
+                            (funcall function split-name headers
+                                     (symbol-value variable)))
+                      (read-file-name
+                       (concat prompt " (default "
+                               (file-name-nondirectory default-name) ") ")
+                       (file-name-directory default-name)
+                       default-name))
+                     ;; A single split name was found
+                     ((= 1 (length split-name))
+                      (let* ((name (expand-file-name
+                                    (car split-name)
+                                    gnus-article-save-directory))
+                             (dir (cond ((file-directory-p name)
+                                         (file-name-as-directory name))
+                                        ((file-exists-p name) name)
+                                        (t gnus-article-save-directory))))
+                        (read-file-name
+                         (concat prompt " (default " name ") ")
+                         dir name)))
+                     ;; A list of splits was found.
+                     (t
+                      (setq split-name (nreverse split-name))
+                      (let (result)
+                        (let ((file-name-history
+                               (nconc split-name file-name-history)))
+                          (setq result
+                                (expand-file-name
+                                 (read-file-name
+                                  (concat prompt " (`M-p' for defaults) ")
+                                  gnus-article-save-directory
+                                  (car split-name))
+                                 gnus-article-save-directory)))
+                        (car (push result file-name-history)))))))
+              ;; Create the directory.
+              (gnus-make-directory (file-name-directory file))
+      ;; If we have read a directory, we append the default file name.
+              (when (file-directory-p file)
+                (setq file (expand-file-name (file-name-nondirectory
+                                              default-name)
+                                             (file-name-as-directory file))))
+              ;; Possibly translate some characters.
+              (nnheader-translate-file-chars file))))))
     (gnus-make-directory (file-name-directory result))
     (set variable result)))
 
@@ -2555,17 +2737,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        default
       (or last-file default))))
 
-(defun gnus-Plain-save-name (newsgroup headers &optional last-file)
-  "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
-If variable `gnus-use-long-file-name' is non-nil, it is
-~/News/News.group.  Otherwise, it is like ~/News/news/group/news."
-  (or last-file
-      (expand-file-name
-       (if (gnus-use-long-file-name 'not-save)
-          (gnus-capitalize-newsgroup newsgroup)
-        (concat (gnus-newsgroup-directory-form newsgroup) "/news"))
-       gnus-article-save-directory)))
-
 (defun gnus-plain-save-name (newsgroup headers &optional last-file)
   "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
 If variable `gnus-use-long-file-name' is non-nil, it is
@@ -2574,7 +2745,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
       (expand-file-name
        (if (gnus-use-long-file-name 'not-save)
           newsgroup
-        (concat (gnus-newsgroup-directory-form newsgroup) "/news"))
+        (expand-file-name "news" (gnus-newsgroup-directory-form newsgroup)))
        gnus-article-save-directory)))
 
 (eval-and-compile
@@ -2586,17 +2757,16 @@ If variable `gnus-use-long-file-name' is non-nil, it is
                 gfunc (cdr func))
         (setq afunc func
               gfunc (intern (format "gnus-%s" func))))
-       (fset gfunc
-            (if (not (fboundp afunc))
-                nil
-              `(lambda (&optional interactive &rest args)
-                 ,(documentation afunc t)
-                 (interactive (list t))
-                 (save-excursion
-                   (set-buffer gnus-article-buffer)
-                   (if interactive
-                       (call-interactively ',afunc)
-                     (apply ',afunc args))))))))
+       (defalias gfunc
+        (if (fboundp afunc)
+          `(lambda (&optional interactive &rest args)
+             ,(documentation afunc t)
+             (interactive (list t))
+             (save-excursion
+               (set-buffer gnus-article-buffer)
+               (if interactive
+                   (call-interactively ',afunc)
+                 (apply ',afunc args))))))))
    '(article-hide-headers
      article-hide-boring-headers
      article-toggle-headers
@@ -2606,6 +2776,9 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      article-remove-cr
      article-display-x-face
      article-de-quoted-unreadable
+     article-de-base64-unreadable
+     article-decode-HZ
+     article-wash-html
      article-hide-list-identifiers
      article-hide-pgp
      article-strip-banner
@@ -2651,11 +2824,13 @@ If variable `gnus-use-long-file-name' is non-nil, it is
   "s" gnus-article-show-summary
   "\C-c\C-m" gnus-article-mail
   "?" gnus-article-describe-briefly
-  "e" gnus-summary-article-edit
+  "e" gnus-summary-edit-article
   "<" beginning-of-buffer
   ">" end-of-buffer
   "\C-c\C-i" gnus-info-find-node
   "\C-c\C-b" gnus-bug
+  "\C-hk" gnus-article-describe-key
+  "\C-hc" gnus-article-describe-key-briefly
 
   "\C-d" gnus-article-read-summary-keys
   "\M-*" gnus-article-read-summary-keys
@@ -2664,27 +2839,23 @@ If variable `gnus-use-long-file-name' is non-nil, it is
   "\M-g" gnus-article-read-summary-keys)
 
 ;; Define almost undefined keys to `gnus-article-read-summary-keys'.
-(mapcar
- (lambda (key)
-   (unless (lookup-key gnus-article-mode-map key)
-     (define-key gnus-article-mode-map key
-       'gnus-article-read-summary-keys)))
- (delq nil
-       (append
-       (mapcar
-        (lambda (elt)
-          (let ((key (car elt)))
-            (and (> (length key) 0)
-                 (not (eq 'menu-bar (aref key 0)))
-                 (symbolp (lookup-key gnus-summary-mode-map key))
-                 key)))
-        (accessible-keymaps gnus-summary-mode-map))
-       (let ((c 127)
-             keys)
-         (while (>= c 32)
-           (push (char-to-string c) keys)
-           (decf c))
-         keys))))
+(let (keys)
+  (let ((key 32))
+    (while (<= key 127)
+      (push (char-to-string key) keys)
+      (incf key))
+    (dolist (elem (accessible-keymaps gnus-summary-mode-map))
+      (setq key (car elem))
+      (when (and (> (length key) 0)
+                (not (eq 'menu-bar (aref key 0)))
+                (symbolp (lookup-key gnus-summary-mode-map key)))
+       (push key keys))))
+  (dolist (key keys)
+    (unless (lookup-key gnus-article-mode-map key)
+      (define-key gnus-article-mode-map key 'gnus-article-read-summary-keys))))
+
+(eval-when-compile 
+  (defvar gnus-article-commands-menu))
 
 (defun gnus-article-make-menu-bar ()
   (gnus-turn-off-edit-menu 'article)
@@ -2706,7 +2877,8 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        ["Hide signature" gnus-article-hide-signature t]
        ["Hide citation" gnus-article-hide-citation t]
        ["Treat overstrike" gnus-article-treat-overstrike t]
-       ["Remove carriage return" gnus-article-remove-cr t]))
+       ["Remove carriage return" gnus-article-remove-cr t]
+       ["Decode HZ" gnus-article-decode-HZ t]))
 
     ;; Note "Commands" menu is defined in gnus-sum.el for consistency
 
@@ -2714,7 +2886,12 @@ If variable `gnus-use-long-file-name' is non-nil, it is
       (define-key gnus-article-mode-map [menu-bar post]
        (cons "Post" gnus-summary-post-menu)))
 
-    (gnus-run-hooks 'gnus-article-menu-hook)))
+    (gnus-run-hooks 'gnus-article-menu-hook))
+  ;; Add the menu.
+  (when (boundp 'gnus-article-commands-menu)
+    (easy-menu-add gnus-article-commands-menu gnus-article-mode-map))
+  (when (boundp 'gnus-summary-post-menu)
+    (easy-menu-add gnus-summary-post-menu gnus-article-mode-map)))
 
 (defun gnus-article-mode ()
   "Major mode for displaying an article.
@@ -2749,7 +2926,7 @@ commands:
   (make-local-variable 'gnus-article-mime-handles)
   (make-local-variable 'gnus-article-decoded-p)
   (make-local-variable 'gnus-article-mime-handle-alist)
-  (make-local-variable 'gnus-article-washed-types)
+  (make-local-variable 'gnus-article-wash-types)
   (gnus-set-default-directory)
   (buffer-disable-undo)
   (setq buffer-read-only t)
@@ -2778,12 +2955,12 @@ commands:
     ;; Init original article buffer.
     (save-excursion
       (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
+      (set-buffer-multibyte nil)
       (setq major-mode 'gnus-original-article-mode)
       (make-local-variable 'gnus-original-article))
     (if (get-buffer name)
        (save-excursion
          (set-buffer name)
-         (kill-all-local-variables)
          (buffer-disable-undo)
          (setq buffer-read-only t)
          (unless (eq major-mode 'gnus-article-mode)
@@ -2829,12 +3006,7 @@ commands:
     (mime-display-message mime-message-structure
                          gnus-article-buffer nil gnus-article-mode-map)
     (when all-headers
-      (gnus-article-hide-headers nil -1))
-    )
-  ;; `mime-display-message' changes current buffer to `gnus-article-buffer'.
-  (make-local-variable 'mime-button-mother-dispatcher)
-  (setq mime-button-mother-dispatcher
-       (function gnus-article-push-button))
+      (gnus-article-hide-headers nil -1)))
   (run-hooks 'gnus-mime-article-prepare-hook))
 
 (defun gnus-article-display-traditional-message ()
@@ -2915,8 +3087,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (message "Message marked for downloading"))
                  (gnus-summary-mark-article article gnus-canceled-mark)
                  (unless (memq article gnus-newsgroup-sparse)
-                   (gnus-error 1
-                    "No such article (may have expired or been canceled)")))))
+                   (gnus-error 1 "No such article (may have expired or been canceled)")))))
          (if (or (eq result 'pseudo)
                  (eq result 'nneething))
              (progn
@@ -2967,6 +3138,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                (gnus-set-global-variables)
                (setq gnus-have-all-headers
                      (or all-headers gnus-show-all-headers))))
+           (save-excursion
+             (gnus-configure-windows 'article))
            (when (or (numberp article)
                      (stringp article))
              (gnus-article-prepare-display)
@@ -3048,30 +3221,26 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                              (if (eq entity last-entity)
                                  1 2)
                              type)
-         (setq entity (get-text-property next 'mime-view-entity))
-         (goto-char (point-max)))))))
+         (goto-char (point-max)))
+       (setq entity (get-text-property next 'mime-view-entity))))))
 
 ;;;###autoload
 (defun gnus-article-prepare-display ()
   "Make the current buffer look like a nice article."
   (setq gnus-article-wash-types nil)
   (gnus-run-hooks 'gnus-tmp-internal-hook)
-  (gnus-run-hooks 'gnus-article-prepare-hook)
   ;; Display message.
-  (let (mime-display-header-hook mime-display-text/plain-hook)
-    (funcall (if gnus-show-mime
-                (progn
-                  (setq mime-message-structure gnus-current-headers)
-                  (mime-buffer-entity-set-buffer-internal
-                   mime-message-structure
-                   gnus-original-article-buffer)
-                  (mime-entity-set-representation-type-internal
-                   mime-message-structure 'mime-buffer-entity)
-                  (luna-send mime-message-structure
-                             'initialize-instance
-                             mime-message-structure)
-                  gnus-article-display-method-for-mime)
-              gnus-article-display-method-for-traditional)))
+  (setq mime-message-structure gnus-current-headers)
+  (mime-buffer-entity-set-buffer-internal mime-message-structure
+                                         gnus-original-article-buffer)
+  (mime-entity-set-representation-type-internal mime-message-structure
+                                               'mime-buffer-entity)
+  (luna-send mime-message-structure 'initialize-instance
+            mime-message-structure)
+  (if gnus-show-mime
+      (let (mime-display-header-hook mime-display-text/plain-hook)
+       (funcall gnus-article-display-method-for-mime))
+    (funcall gnus-article-display-method-for-traditional))
   ;; Associate this article with the current summary buffer.
   (setq gnus-article-current-summary gnus-summary-buffer)
   ;; Call the treatment functions.
@@ -3092,17 +3261,17 @@ If ALL-HEADERS is non-nil, no headers are hidden."
        (narrow-to-region (point) (point-max))
        (gnus-treat-article nil))
       (put-text-property (point-min) (point-max) 'read-only nil)))
-  ;; Perform the article display hooks.  Incidentally, this hook is
-  ;; an obsolete variable by now.
-  (gnus-run-hooks 'gnus-article-display-hook))
+  (gnus-run-hooks 'gnus-article-prepare-hook))
 
 (defun gnus-article-decode-article-as-default-mime-charset ()
   "Decode an article as `default-mime-charset'.  It won't work if the
 value of the variable `gnus-show-mime' is non-nil."
   (unless gnus-show-mime
+    (set (make-local-variable 'default-mime-charset)
+        (with-current-buffer gnus-summary-buffer
+          default-mime-charset))
     (decode-mime-charset-region (point-min) (point-max)
-                               (with-current-buffer gnus-summary-buffer
-                                 default-mime-charset))))
+                               default-mime-charset)))
 
 ;;;
 ;;; Gnus MIME viewing functions
@@ -3136,31 +3305,29 @@ value of the variable `gnus-show-mime' is non-nil."
     (gnus-mime-inline-part "i" "View As Text, In This Buffer")
     (gnus-mime-internalize-part "E" "View Internally")
     (gnus-mime-externalize-part "e" "View Externally")
-    (gnus-mime-pipe-part "|" "Pipe To Command...")))
+    (gnus-mime-pipe-part "|" "Pipe To Command...")
+    (gnus-mime-action-on-part "." "Take action on the part")))
 
 (defun gnus-article-mime-part-status ()
-  (with-current-buffer gnus-article-buffer
-    (let ((entity (get-text-property (point-min) 'mime-view-entity)))
-      (if (and entity (mime-entity-children entity))
-         (format " (%d parts)" (length (mime-entity-children entity)))
-       ""))))
-
-(defvar gnus-mime-button-map nil)
-(unless gnus-mime-button-map
-  (setq gnus-mime-button-map (make-sparse-keymap))
-  (set-keymap-parent gnus-mime-button-map gnus-article-mode-map)
-  (define-key gnus-mime-button-map gnus-mouse-2 'gnus-article-push-button)
-  (define-key gnus-mime-button-map gnus-down-mouse-3 'gnus-mime-button-menu)
-  (mapcar (lambda (c)
-           (define-key gnus-mime-button-map (cadr c) (car c)))
-         gnus-mime-button-commands))
+  (if gnus-article-mime-handle-alist-1
+      (format " (%d parts)" (length gnus-article-mime-handle-alist-1))
+    ""))
+
+(defvar gnus-mime-button-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map gnus-article-mode-map)
+    (define-key map gnus-mouse-2 'gnus-article-push-button)
+    (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
+    (dolist (c gnus-mime-button-commands)
+      (define-key map (cadr c) (car c)))
+    map))
 
 (defun gnus-mime-button-menu (event)
   "Construct a context-sensitive menu of MIME commands."
   (interactive "e")
-  (save-excursion
+  (save-window-excursion
     (let ((pos (event-start event)))
-      (set-buffer (window-buffer (posn-window pos)))
+      (select-window (posn-window pos))
       (goto-char (posn-point pos))
       (gnus-article-check-buffer)
       (let ((response (x-popup-menu
@@ -3169,7 +3336,7 @@ value of the variable `gnus-show-mime' is non-nil."
                                           (cons (caddr c) (car c)))
                                         gnus-mime-button-commands))))))
        (if response
-           (funcall response))))))
+           (call-interactively response))))))
 
 (defun gnus-mime-view-all-parts (&optional handles)
   "View all the MIME parts."
@@ -3190,67 +3357,130 @@ value of the variable `gnus-show-mime' is non-nil."
   (interactive)
   (gnus-article-check-buffer)
   (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-save-part data)))
+    (when data
+      (mm-save-part data))))
 
 (defun gnus-mime-pipe-part ()
   "Pipe the MIME part under point to a process."
   (interactive)
   (gnus-article-check-buffer)
   (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-pipe-part data)))
+    (when data
+      (mm-pipe-part data))))
 
 (defun gnus-mime-view-part ()
   "Interactively choose a viewing method for the MIME part under point."
   (interactive)
   (gnus-article-check-buffer)
   (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-interactively-view-part data)))
+    (when data
+      (mm-interactively-view-part data))))
+
+(defun gnus-mime-view-part-as-type-internal ()
+  (gnus-article-check-buffer)
+  (let* ((name (mail-content-type-get
+               (mm-handle-type (get-text-property (point) 'gnus-data))
+               'name))
+        (def-type (and name (mm-default-file-encoding name))))
+    (and def-type (cons def-type 0))))
 
-(defun gnus-mime-view-part-as-type ()
+(defun gnus-mime-view-part-as-type (mime-type)
   "Choose a MIME media type, and view the part as such."
   (interactive
-   (list (completing-read "View as MIME type: " mailcap-mime-types)))
+   (list (completing-read
+         "View as MIME type: "
+         (mapcar #'list (mailcap-mime-types))
+         nil nil
+         (gnus-mime-view-part-as-type-internal))))
   (gnus-article-check-buffer)
   (let ((handle (get-text-property (point) 'gnus-data)))
-    (gnus-mm-display-part handle)))
+    (when handle
+      (gnus-mm-display-part
+       (mm-make-handle (mm-handle-buffer handle)
+                      (cons mime-type (cdr (mm-handle-type handle)))
+                      (mm-handle-encoding handle)
+                      (mm-handle-undisplayer handle)
+                      (mm-handle-disposition handle)
+                      (mm-handle-description handle)
+                      (mm-handle-cache handle)
+                      (mm-handle-id handle))))))
 
 (defun gnus-mime-copy-part (&optional handle)
   "Put the the MIME part under point into a new buffer."
   (interactive)
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        (contents (mm-get-part handle))|
-        (base (file-name-nondirectory
-               (or
-                (mail-content-type-get (mm-handle-type handle) 'name)
-                (mail-content-type-get (mm-handle-type handle)
-                                       'filename)
-                "*decoded*")))
-        (buffer (generate-new-buffer base)))
-    (switch-to-buffer buffer)
-    (insert contents)
-    ;; We do it this way to make `normal-mode' set the appropriate mode.
-    (unwind-protect
-       (progn
-         (setq buffer-file-name (expand-file-name base))
-         (normal-mode))
-      (setq buffer-file-name nil))
-    (goto-char (point-min))))
+        (contents (and handle (mm-get-part handle)))
+        (base (and handle 
+                   (file-name-nondirectory
+                    (or
+                     (mail-content-type-get (mm-handle-type handle) 'name)
+                     (mail-content-type-get (mm-handle-type handle)
+                                            'filename)
+                     "*decoded*"))))
+        (buffer (and base (generate-new-buffer base))))
+    (when contents
+      (switch-to-buffer buffer)
+      (insert contents)
+      ;; We do it this way to make `normal-mode' set the appropriate mode.
+      (unwind-protect
+         (progn
+           (setq buffer-file-name (expand-file-name base))
+           (normal-mode))
+       (setq buffer-file-name nil))
+      (goto-char (point-min)))))
 
-(defun gnus-mime-inline-part (&optional handle)
+(defun gnus-mime-inline-part (&optional handle arg)
   "Insert the MIME part under point into the current buffer."
-  (interactive)
+  (interactive (list nil current-prefix-arg))
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        contents
+        contents charset
         (b (point))
         buffer-read-only)
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (setq contents (mm-get-part handle))
-      (forward-line 2)
-      (mm-insert-inline handle contents)
-      (goto-char b))))
+    (when handle
+      (if (and (not arg) (mm-handle-undisplayer handle))
+         (mm-remove-part handle)
+       (setq contents (mm-get-part handle))
+       (cond
+        ((not arg)
+         (setq charset (or (mail-content-type-get
+                            (mm-handle-type handle) 'charset)
+                           gnus-newsgroup-charset)))
+        ((numberp arg)
+         (if (mm-handle-undisplayer handle)
+             (mm-remove-part handle))
+         (setq charset
+               (or (cdr (assq arg 
+                              gnus-summary-show-article-charset-alist))
+                   (read-coding-system "Charset: ")))))
+       (forward-line 2)
+       (mm-insert-inline handle
+                         (if (and charset 
+                                  (setq charset (mm-charset-to-coding-system 
+                                                 charset))
+                                  (not (eq charset 'ascii)))
+                             (mm-decode-coding-string contents charset)
+                           contents))
+       (goto-char b)))))
+
+(defun gnus-mime-view-part-as-charset (&optional handle arg)
+  "Insert the MIME part under point into the current buffer."
+  (interactive (list nil current-prefix-arg))
+  (gnus-article-check-buffer)
+  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
+        contents charset
+        (b (point))
+        buffer-read-only)
+    (when handle
+      (if (mm-handle-undisplayer handle)
+         (mm-remove-part handle))
+      (let ((gnus-newsgroup-charset
+            (or (cdr (assq arg 
+                           gnus-summary-show-article-charset-alist))
+                (read-coding-system "Charset: ")))
+         (gnus-newsgroup-ignored-charsets 'gnus-all))
+       (gnus-article-press-button)))))
 
 (defun gnus-mime-externalize-part (&optional handle)
   "View the MIME part under point with an external viewer."
@@ -3258,14 +3488,15 @@ value of the variable `gnus-show-mime' is non-nil."
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
         (mm-user-display-methods nil)
-        (mm-inline-large-images nil)
+        (mm-inlined-types nil)
         (mail-parse-charset gnus-newsgroup-charset)
         (mail-parse-ignored-charsets 
          (save-excursion (set-buffer gnus-summary-buffer)
                          gnus-newsgroup-ignored-charsets)))
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (mm-display-part handle))))
+    (when handle
+      (if (mm-handle-undisplayer handle)
+         (mm-remove-part handle)
+       (mm-display-part handle)))))
 
 (defun gnus-mime-internalize-part (&optional handle)
   "View the MIME part under point with an internal viewer.
@@ -3279,9 +3510,19 @@ In no internal viewer is available, use an external viewer."
         (mail-parse-ignored-charsets 
          (save-excursion (set-buffer gnus-summary-buffer)
                          gnus-newsgroup-ignored-charsets)))
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (mm-display-part handle))))
+    (when handle
+      (if (mm-handle-undisplayer handle)
+         (mm-remove-part handle)
+       (mm-display-part handle)))))
+
+(defun gnus-mime-action-on-part (&optional action)
+  "Do something with the MIME attachment at \(point\)."
+  (interactive
+   (list (completing-read "Action: " gnus-mime-action-alist)))
+  (gnus-article-check-buffer)
+  (let ((action-pair (assoc action gnus-mime-action-alist)))
+    (if action-pair
+       (funcall (cdr action-pair)))))
 
 (defun gnus-article-part-wrapper (n function)
   (save-current-buffer
@@ -3332,7 +3573,7 @@ In no internal viewer is available, use an external viewer."
                    ((eq condition 'undisplayed) 
                     (not (or (mm-handle-undisplayer (cdr ihandle))
                              (equal (mm-handle-media-type (cdr ihandle))
-                                "multipart/alternative"))))
+                                    "multipart/alternative"))))
                    ((eq condition 'undisplayed-alternative)
                     (not (mm-handle-undisplayer (cdr ihandle))))
                    (t t))
@@ -3358,6 +3599,11 @@ In no internal viewer is available, use an external viewer."
          (when (eq (gnus-mm-display-part handle) 'internal)
            (gnus-set-window-start)))))))
 
+(defsubst gnus-article-mime-total-parts ()
+  (if (bufferp (car gnus-article-mime-handles))
+      1 ;; single part
+    (1- (length gnus-article-mime-handles))))
+
 (defun gnus-mm-display-part (handle)
   "Display HANDLE and fix MIME button."
   (let ((id (get-text-property (point) 'gnus-part))
@@ -3391,7 +3637,7 @@ In no internal viewer is available, use an external viewer."
                      (narrow-to-region (point) (point-max))
                      (gnus-treat-article
                       nil id
-                      (1- (length gnus-article-mime-handles))
+                      (gnus-article-mime-total-parts)
                       (mm-handle-media-type handle)))))
              (select-window window))))
       (goto-char point)
@@ -3443,21 +3689,30 @@ In no internal viewer is available, use an external viewer."
                 article-type annotation
                 gnus-data ,handle))
     (setq e (point))
-    (widget-convert-button 'link b e
-                          :mime-handle handle
-                          :action 'gnus-widget-press-button
-                          :button-keymap gnus-mime-button-map
-                          :help-echo
-                          (lambda (widget)
-                            ;; Needed to properly clear the message
-                            ;; due to a bug in wid-edit
-                            (setq help-echo-owns-message t)
-                            (format
-                             "Click to %s the MIME part; %s for more options"
-                             (if (mm-handle-displayed-p
-                                  (widget-get widget :mime-handle))
-                                 "hide" "show")
-                             (if gnus-xemacs "button3" "mouse-3"))))))
+    (widget-convert-button
+     'link b e
+     :mime-handle handle
+     :action 'gnus-widget-press-button
+     :button-keymap gnus-mime-button-map
+     :help-echo
+     (lambda (widget/window &optional overlay pos)
+       ;; Needed to properly clear the message due to a bug in
+       ;; wid-edit (XEmacs only).
+       (if (boundp 'help-echo-owns-message)
+          (setq help-echo-owns-message t))
+       (format
+       "%S: %s the MIME part; %S: more options"
+       (aref gnus-mouse-2 0)
+       ;; XEmacs will get a single widget arg; Emacs 21 will get
+       ;; window, overlay, position.
+       (if (mm-handle-displayed-p
+            (if overlay
+                (with-current-buffer (gnus-overlay-buffer overlay)
+                  (widget-get (widget-at (gnus-overlay-start overlay))
+                              :mime-handle))
+              (widget-get widget/window :mime-handle)))
+           "hide" "show")
+       (aref gnus-down-mouse-3 0))))))
 
 (defun gnus-widget-press-button (elems el)
   (goto-char (widget-get elems :from))
@@ -3483,7 +3738,7 @@ In no internal viewer is available, use an external viewer."
          ;; Top-level call; we clean up.
          (when gnus-article-mime-handles
            (mm-destroy-parts gnus-article-mime-handles)
-           (setq gnus-article-mime-handle-alist nil)) ;; A trick.
+           (setq gnus-article-mime-handle-alist nil));; A trick.
          (setq gnus-article-mime-handles handles)
          ;; We allow users to glean info from the handles.
          (when gnus-article-mime-part-function
@@ -3504,13 +3759,13 @@ In no internal viewer is available, use an external viewer."
            (narrow-to-region (point) (point-max))
            (gnus-treat-article nil 1 1)
            (widen)))
-       (if (not ihandles)
-           ;; Highlight the headers.
-           (save-excursion
-             (save-restriction
-               (article-goto-body)
-               (narrow-to-region (point-min) (point))
-               (gnus-treat-article 'head))))))))
+       (unless ihandles
+         ;; Highlight the headers.
+         (save-excursion
+           (save-restriction
+             (article-goto-body)
+             (narrow-to-region (point-min) (point))
+             (gnus-treat-article 'head))))))))
 
 (defvar gnus-mime-display-multipart-as-mixed nil)
 
@@ -3570,21 +3825,23 @@ In no internal viewer is available, use an external viewer."
            (setq display t)
          (when (equal (mm-handle-media-supertype handle) "text")
            (setq text t)))
-       (let ((id (1+ (length gnus-article-mime-handle-alist))))
+       (let ((id (1+ (length gnus-article-mime-handle-alist)))
+             beg)
          (push (cons id handle) gnus-article-mime-handle-alist)
          (when (or (not display)
                    (not (gnus-unbuttonized-mime-type-p type)))
-           (gnus-article-insert-newline)
+           ;(gnus-article-insert-newline)
            (gnus-insert-mime-button
             handle id (list (or display (and not-attachment text))))
-           (gnus-article-insert-newline)
-           (gnus-article-insert-newline)
-           (setq move t)))
-       (let ((beg (point)))
+           (gnus-article-insert-newline) 
+           ;(gnus-article-insert-newline) 
+           ;; Remember modify the number of forward lines.
+           (setq move t))
+         (setq beg (point))
          (cond
           (display
            (when move
-             (forward-line -2)
+             (forward-line -1)
              (setq beg (point)))
            (let ((mail-parse-charset gnus-newsgroup-charset)
                  (mail-parse-ignored-charsets 
@@ -3596,7 +3853,7 @@ In no internal viewer is available, use an external viewer."
            (goto-char (point-max)))
           ((and text not-attachment)
            (when move
-             (forward-line -2)
+             (forward-line -1)
              (setq beg (point)))
            (gnus-article-insert-newline)
            (mm-insert-inline handle (mm-get-part handle))
@@ -3606,8 +3863,8 @@ In no internal viewer is available, use an external viewer."
            (save-restriction
              (narrow-to-region beg (point))
              (gnus-treat-article
-              nil (length gnus-article-mime-handle-alist)
-              (1- (length gnus-article-mime-handles))
+              nil id 
+              (gnus-article-mime-total-parts)
               (mm-handle-media-type handle)))))))))
 
 (defun gnus-unbuttonized-mime-type-p (type)
@@ -3645,6 +3902,7 @@ In no internal viewer is available, use an external viewer."
        (unless (setq not-pref (cadr (member preferred ihandles)))
          (setq not-pref (car ihandles)))
        (when (or ibegend
+                 (not preferred)
                  (not (gnus-unbuttonized-mime-type-p
                        "multipart/alternative")))
          (gnus-add-text-properties
@@ -3709,7 +3967,7 @@ In no internal viewer is available, use an external viewer."
                  (narrow-to-region (car begend) (point-max))
                  (gnus-treat-article
                   nil (length gnus-article-mime-handle-alist)
-                  (1- (length gnus-article-mime-handles))
+                  (gnus-article-mime-total-parts)
                   (mm-handle-media-type handle))))))
          (goto-char (point-max))
          (setcdr begend (point-marker)))))
@@ -3737,7 +3995,7 @@ In no internal viewer is available, use an external viewer."
              (if gnus-show-mime ?m ? )
              (if emphasis ?e ? )))))
 
-(fset 'gnus-article-hide-headers-if-wanted 'gnus-article-maybe-hide-headers)
+(defalias 'gnus-article-hide-headers-if-wanted 'gnus-article-maybe-hide-headers)
 
 (defun gnus-article-maybe-hide-headers ()
   "Hide unwanted headers if `gnus-have-all-headers' is nil.
@@ -3829,7 +4087,8 @@ Argument LINES specifies lines to be scrolled up."
        (forward-line 1)
        (setq start nil))
       (unless (or (cond ((eq (1+ (buffer-size)) (point))
-                        (setq end-of-buffer t))
+                        (and (pos-visible-in-window-p)
+                             (setq end-of-buffer t)))
                        ((eobp)
                         (setq end-of-page t)))
                  (not lines))
@@ -3843,7 +4102,8 @@ Argument LINES specifies lines to be scrolled up."
          (t
           (if start
               (set-window-start (selected-window) start)
-            (scroll-up lines))
+            (let (window-pixel-scroll-increment)
+              (scroll-up lines)))
           nil))))
 
 (defun gnus-article-prev-page (&optional lines)
@@ -3862,7 +4122,8 @@ Argument LINES specifies lines to be scrolled down."
           (gnus-narrow-to-page -1))
          (t
           (condition-case nil
-              (scroll-down lines)
+              (let (window-pixel-scroll-increment)
+                (scroll-down lines))
             (beginning-of-buffer
              (goto-char (point-min))))))))
 
@@ -3953,7 +4214,8 @@ Argument LINES specifies lines to be scrolled down."
             ;; We disable the pick minor mode commands.
             (let (gnus-pick-mode)
               (setq func (lookup-key (current-local-map) keys))))
-          (if (not func)
+          (if (or (not func)
+                 (numberp func))
               (ding)
             (unless (member keys nosave-in-article)
               (set-buffer gnus-article-current-summary))
@@ -3972,26 +4234,58 @@ Argument LINES specifies lines to be scrolled down."
           (switch-to-buffer summary 'norecord))
         (setq in-buffer (current-buffer))
         ;; We disable the pick minor mode commands.
-        (if (setq func (let (gnus-pick-mode)
-                         (lookup-key (current-local-map) keys)))
+        (if (and (setq func (let (gnus-pick-mode)
+                             (lookup-key (current-local-map) keys)))
+                (functionp func))
             (progn
               (call-interactively func)
-              (setq new-sum-point (point)))
-          (ding))
-        (when (eq in-buffer (current-buffer))
-          (setq selected (gnus-summary-select-article))
-          (set-buffer obuf)
-          (unless not-restore-window
-            (set-window-configuration owin))
-          (when (eq selected 'old)
-           (article-goto-body)
-            (set-window-start (get-buffer-window (current-buffer))
-                              1)
-            (set-window-point (get-buffer-window (current-buffer))
-                              (point)))
-          (let ((win (get-buffer-window gnus-article-current-summary)))
-            (when win
-              (set-window-point win new-sum-point))))))))
+              (setq new-sum-point (point))
+             (when (eq in-buffer (current-buffer))
+               (setq selected (gnus-summary-select-article))
+               (set-buffer obuf)
+               (unless not-restore-window
+                 (set-window-configuration owin))
+               (when (eq selected 'old)
+                 (article-goto-body)
+                 (set-window-start (get-buffer-window (current-buffer))
+                                   1)
+                 (set-window-point (get-buffer-window (current-buffer))
+                                   (point)))
+               (let ((win (get-buffer-window gnus-article-current-summary)))
+                 (when win
+                   (set-window-point win new-sum-point))))    )
+         (switch-to-buffer gnus-article-buffer)
+          (ding))))))
+
+(defun gnus-article-describe-key (key)
+  "Display documentation of the function invoked by KEY.  KEY is a string."
+  (interactive "kDescribe key: ")
+  (gnus-article-check-buffer)
+  (if (eq (key-binding key) 'gnus-article-read-summary-keys)
+      (save-excursion
+       (set-buffer gnus-article-current-summary)
+       (let (gnus-pick-mode)
+         (push (elt key 0) unread-command-events)
+         (setq key (if (featurep 'xemacs)
+                       (events-to-keys (read-key-sequence "Describe key: "))
+                     (read-key-sequence "Describe key: "))))
+       (describe-key key))
+    (describe-key key)))
+
+(defun gnus-article-describe-key-briefly (key &optional insert)
+  "Display documentation of the function invoked by KEY.  KEY is a string."
+  (interactive "kDescribe key: \nP")
+  (gnus-article-check-buffer)
+  (if (eq (key-binding key) 'gnus-article-read-summary-keys)
+      (save-excursion
+       (set-buffer gnus-article-current-summary)
+       (let (gnus-pick-mode)
+         (push (elt key 0) unread-command-events)
+         (setq key (if (featurep 'xemacs)
+                       (events-to-keys (read-key-sequence "Describe key: "))
+                     (read-key-sequence "Describe key: "))))
+       (describe-key-briefly key insert))
+    (describe-key-briefly key insert)))
 
 (defun gnus-article-hide (&optional arg force)
   "Hide all the gruft in the current article.
@@ -4033,8 +4327,7 @@ If given a prefix, show the hidden text instead."
          ;; We only request an article by message-id when we do not have the
          ;; headers for it, so we'll have to get those.
          (when (stringp article)
-           (let ((gnus-override-method gnus-refer-article-method))
-             (gnus-read-header article)))
+           (gnus-read-header article))
 
          ;; If the article number is negative, that means that this article
          ;; doesn't belong in this newsgroup (possibly), so we find its
@@ -4052,8 +4345,7 @@ If given a prefix, show the hidden text instead."
                    ;; This is a sparse gap article.
                    (setq do-update-line article)
                    (setq article (mail-header-id header))
-                   (let ((gnus-override-method gnus-refer-article-method))
-                     (setq sparse-header (gnus-read-header article)))
+                   (setq sparse-header (gnus-read-header article))
                    (setq gnus-newsgroup-sparse
                          (delq article gnus-newsgroup-sparse)))
                   ((vectorp header)
@@ -4068,11 +4360,11 @@ If given a prefix, show the hidden text instead."
                               gnus-newsgroup-name)))
                  (when (and (eq (car method) 'nneething)
                             (vectorp header))
-                   (let ((dir (concat
+                   (let ((dir (expand-file-name
+                               (mail-header-subject header)
                                (file-name-as-directory
                                 (or (cadr (assq 'nneething-address method))
-                                    (nth 1 method)))
-                               (mail-header-subject header))))
+                                    (nth 1 method))))))
                      (when (file-directory-p dir)
                        (setq article 'nneething)
                        (gnus-group-enter-directory dir))))))))
@@ -4104,21 +4396,40 @@ If given a prefix, show the hidden text instead."
                 (gnus-cache-request-article article group))
            'article)
           ;; Get the article and put into the article buffer.
-          ((or (stringp article) (numberp article))
-           (let ((gnus-override-method
-                  (and (stringp article) gnus-refer-article-method))
+          ((or (stringp article)
+               (numberp article))
+           (let ((gnus-override-method gnus-override-method)
+                 (methods (and (stringp article) 
+                               gnus-refer-article-method))
+                 result
                  (buffer-read-only nil))
-             (erase-buffer)
-             (gnus-kill-all-overlays)
-             (let ((gnus-newsgroup-name group))
-               (gnus-check-group-server))
-             (when (gnus-request-article article group (current-buffer))
-               (when (numberp article)
-                 (gnus-async-prefetch-next group article gnus-summary-buffer)
-                 (when gnus-keep-backlog
-                   (gnus-backlog-enter-article
-                    group article (current-buffer))))
-               'article)))
+             (if (or (not (listp methods))
+                     (and (symbolp (car methods))
+                          (assq (car methods) nnoo-definition-alist)))
+                 (setq methods (list methods)))
+             (when (and (null gnus-override-method)
+                        methods)
+               (setq gnus-override-method (pop methods)))
+             (while (not result)
+               (when (eq gnus-override-method 'current)
+                 (setq gnus-override-method gnus-current-select-method))
+               (erase-buffer)
+               (gnus-kill-all-overlays)
+               (let ((gnus-newsgroup-name group))
+                 (gnus-check-group-server))
+               (when (gnus-request-article article group (current-buffer))
+                 (when (numberp article)
+                   (gnus-async-prefetch-next group article 
+                                             gnus-summary-buffer)
+                   (when gnus-keep-backlog
+                     (gnus-backlog-enter-article
+                      group article (current-buffer))))
+                 (setq result 'article))
+               (if (not result)
+                   (if methods
+                       (setq gnus-override-method (pop methods))
+                     (setq result 'done))))
+             (and (eq result 'article) 'article)))
           ;; It was a pseudo.
           (t article)))
 
@@ -4134,6 +4445,7 @@ If given a prefix, show the hidden text instead."
          (if (get-buffer gnus-original-article-buffer)
              (set-buffer gnus-original-article-buffer)
            (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
+           (set-buffer-multibyte nil)
            (buffer-disable-undo)
            (setq major-mode 'gnus-original-article-mode)
            (setq buffer-read-only t))
@@ -4236,32 +4548,11 @@ groups."
     (setq gnus-prev-winconf winconf)
     (when gnus-article-edit-article-setup-function
       (funcall gnus-article-edit-article-setup-function))
-    (gnus-message 6 "C-c C-c to end edits")))
+    (gnus-message 6 "C-c C-c to end edits; C-c C-k to exit")))
 
 (defun gnus-article-edit-done (&optional arg)
   "Update the article edits and exit."
   (interactive "P")
-  (save-excursion
-    (save-restriction
-      (widen)
-      (when (article-goto-body)
-       (let ((lines (count-lines (point) (point-max)))
-             (length (- (point-max) (point)))
-             (case-fold-search t)
-             (body (copy-marker (point))))
-         (goto-char (point-min))
-         (when (re-search-forward "^content-length:[ \t]\\([0-9]+\\)" body t)
-           (delete-region (match-beginning 1) (match-end 1))
-           (insert (number-to-string length)))
-         (goto-char (point-min))
-         (when (re-search-forward
-                "^x-content-length:[ \t]\\([0-9]+\\)" body t)
-           (delete-region (match-beginning 1) (match-end 1))
-           (insert (number-to-string length)))
-         (goto-char (point-min))
-         (when (re-search-forward "^lines:[ \t]\\([0-9]+\\)" body t)
-           (delete-region (match-beginning 1) (match-end 1))
-           (insert (number-to-string lines)))))))
   (let ((func gnus-article-edit-done-function)
        (buf (current-buffer))
        (start (window-start)))
@@ -4292,7 +4583,7 @@ groups."
   "Exit the article editing without updating."
   (interactive)
   ;; We remove all text props from the article buffer.
-  (let ((buf (format "%s" (buffer-string)))
+  (let ((buf (buffer-substring-no-properties (point-min) (point-max)))
        (curbuf (current-buffer))
        (p (point))
        (window-start (window-start)))
@@ -4328,12 +4619,12 @@ groups."
 (defun gnus-article-mime-edit-article-unwind ()
   "Unwind `gnus-article-buffer' if article editing was given up."
   (remove-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
-  (when mime-edit-mode-flag
-    (mime-edit-exit 'nomime 'no-error)
-    (message ""))
   (when (featurep 'font-lock)
     (setq font-lock-defaults nil)
-    (font-lock-mode 0)))
+    (font-lock-mode -1))
+  (when mime-edit-mode-flag
+    (mime-edit-exit 'nomime 'no-error)
+    (message "")))
 
 (defun gnus-article-mime-edit-article-setup ()
   "Convert current buffer to MIME-Edit buffer and turn on MIME-Edit mode
@@ -4342,7 +4633,8 @@ after replacing with the original article."
   (setq gnus-article-edit-done-function
        `(lambda (&rest args)
           (when mime-edit-mode-flag
-            (mime-edit-exit)
+            (let (mime-edit-insert-user-agent-field)
+              (mime-edit-exit))
             (message ""))
           (goto-char (point-min))
           (let (case-fold-search)
@@ -4350,53 +4642,75 @@ after replacing with the original article."
                    (format "^%s$" (regexp-quote mail-header-separator))
                    nil t)
               (replace-match "")))
-          (when (featurep 'font-lock)
-            (setq font-lock-defaults nil)
-            (font-lock-mode 0))
           (apply ,gnus-article-edit-done-function args)
-          (set-buffer gnus-original-article-buffer)
+          (set-buffer (get-buffer-create gnus-original-article-buffer))
           (erase-buffer)
           (insert-buffer gnus-article-buffer)
           (setq gnus-current-headers (gnus-article-make-full-mail-header))
           (gnus-article-prepare-display)))
-  (substitute-key-definition
-   'gnus-article-edit-exit 'gnus-article-mime-edit-exit
-   gnus-article-edit-mode-map)
+  (substitute-key-definition 'gnus-article-edit-done
+                            'gnus-article-mime-edit-done
+                            gnus-article-edit-mode-map)
+  (substitute-key-definition 'gnus-article-edit-exit
+                            'gnus-article-mime-edit-exit
+                            gnus-article-edit-mode-map)
   (erase-buffer)
   (insert-buffer gnus-original-article-buffer)
-  (mime-edit-again)
+  (let ((ofn (symbol-function 'mime-edit-decode-single-part-in-buffer)))
+    (fset 'mime-edit-decode-single-part-in-buffer
+         (lambda (&rest args)
+           (if (let ((content-type (car args)))
+                 (and (eq 'message (mime-content-type-primary-type
+                                    content-type))
+                      (eq 'rfc822 (mime-content-type-subtype content-type))))
+               (setcar (cdr args) 'not-decode-text))
+           (apply ofn args)))
+    (unwind-protect
+       (mime-edit-again)
+      (fset 'mime-edit-decode-single-part-in-buffer ofn)))
   (when (featurep 'font-lock)
     (set (make-local-variable 'font-lock-defaults)
         '(message-font-lock-keywords t))
     (font-lock-set-defaults)
     (turn-on-font-lock))
+  (set-buffer-modified-p nil)
+  (delete-other-windows)
   (add-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
   (gnus-run-hooks 'gnus-article-mime-edit-article-setup-hook))
 
+(defun gnus-article-mime-edit-done (&optional arg)
+  "Update the article MIME edits and exit."
+  (interactive "P")
+  (when (featurep 'font-lock)
+    (setq font-lock-defaults nil)
+    (font-lock-mode -1))
+  (gnus-article-edit-done arg))
+
 (defun gnus-article-mime-edit-exit ()
   "Exit the article MIME editing without updating."
   (interactive)
-  (let ((winconf gnus-prev-winconf)
-       buf)
+  (when (or (not (buffer-modified-p))
+           (yes-or-no-p "Article modified; kill anyway? "))
+    (when (featurep 'font-lock)
+      (setq font-lock-defaults nil)
+      (font-lock-mode -1))
     (when mime-edit-mode-flag
-      (mime-edit-exit)
+      (let (mime-edit-insert-user-agent-field)
+       (mime-edit-exit))
       (message ""))
     (goto-char (point-min))
     (let (case-fold-search)
       (when (re-search-forward
             (format "^%s$" (regexp-quote mail-header-separator)) nil t)
        (replace-match "")))
-    (when (featurep 'font-lock)
-      (setq font-lock-defaults nil)
-      (font-lock-mode 0))
-    ;; We remove all text props from the article buffer.
-    (setq buf (format "%s" (buffer-string)))
-    (set-buffer (get-buffer-create gnus-original-article-buffer))
-    (erase-buffer)
-    (insert buf)
-    (setq gnus-current-headers (gnus-article-make-full-mail-header))
-    (gnus-article-prepare-display)
-    (set-window-configuration winconf)))
+    (let ((winconf gnus-prev-winconf))
+      (insert (prog1
+                 (buffer-substring-no-properties (point-min) (point-max))
+               (set-buffer (get-buffer-create gnus-original-article-buffer))
+               (erase-buffer)))
+      (setq gnus-current-headers (gnus-article-make-full-mail-header))
+      (gnus-article-prepare-display)
+      (set-window-configuration winconf))))
 
 ;;;
 ;;; Article highlights
@@ -4406,7 +4720,7 @@ after replacing with the original article."
 
 ;;; Internal Variables:
 
-(defcustom gnus-button-url-regexp "\\b\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?\\([-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)"
+(defcustom gnus-button-url-regexp "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\)\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?\\([-a-zA-Z0-9_=!?#$@~`%&*+|\\/:;.,]\\|\\w\\)+\\([-a-zA-Z0-9_=#$@~`%&*+|\\/]\\|\\w\\)\\)"
   "Regular expression that matches URLs."
   :group 'gnus-article-buttons
   :type 'regexp)
@@ -4425,7 +4739,7 @@ after replacing with the original article."
     ("mailto:\\([-a-zA-Z.@_+0-9%]+\\)" 0 t gnus-url-mailto 1)
     ("\\bmailto:\\([^ \n\t]+\\)" 0 t gnus-url-mailto 1)
     ;; This is how URLs _should_ be embedded in text...
-    ("<URL: *\\([^>]*\\)>" 0 t gnus-button-embedded-url 1)
+    ("<URL: *\\([^<>]*\\)>" 0 t gnus-button-embedded-url 1)
     ;; Raw URLs.
     (,gnus-button-url-regexp 0 t browse-url 0))
   "*Alist of regexps matching buttons in article bodies.
@@ -4736,7 +5050,11 @@ specified by `gnus-button-alist'."
    (nconc (and gnus-article-mouse-face
               (list gnus-mouse-face-prop gnus-article-mouse-face))
          (list 'gnus-callback fun)
-         (and data (list 'gnus-data data)))))
+         (and data (list 'gnus-data data))))
+  (widget-convert-button 'link from to :action 'gnus-widget-press-button
+                        ;; Quote `:button-keymap' for Mule 2.3
+                        ;; but it won't work.
+                        ':button-keymap gnus-widget-button-keymap))
 
 ;;; Internal functions:
 
@@ -4752,9 +5070,15 @@ specified by `gnus-button-alist'."
          (inhibit-point-motion-hooks t)
          (limit (next-single-property-change end 'mime-view-entity
                                              nil (point-max))))
-      (if (get-text-property end 'invisible)
-         (gnus-article-unhide-text end limit)
-       (gnus-article-hide-text end limit gnus-hidden-properties)))))
+      (if (text-property-any end limit 'article-type 'signature)
+         (gnus-remove-text-properties-when
+          'article-type 'signature end limit
+          (cons 'article-type (cons 'signature
+                                    gnus-hidden-properties)))
+       (gnus-add-text-properties-when
+        'article-type nil end limit
+        (cons 'article-type (cons 'signature
+                                  gnus-hidden-properties)))))))
 
 (defun gnus-button-entry ()
   ;; Return the first entry in `gnus-button-alist' matching this place.
@@ -4888,22 +5212,22 @@ forbidden in URL encoding."
        (message-goto-subject)))))
 
 (defun gnus-button-mailto (address)
-  ;; Mail to ADDRESS.
+  "Mail to ADDRESS."
   (set-buffer (gnus-copy-article-buffer))
-  (gnus-setup-message 'reply
-    (message-reply address)))
+  (message-reply address))
 
-(defun gnus-button-reply (address)
-  ;; Reply to ADDRESS.
-  (gnus-setup-message 'reply
-    (message-reply address)))
+(defalias 'gnus-button-reply 'message-reply)
 
 (defun gnus-button-embedded-url (address)
-  "Browse ADDRESS."
-  ;; In Emacs 20, `browse-url-browser-function' may be an alist.
-  (if (listp browse-url-browser-function)
-      (browse-url (gnus-strip-whitespace address))
-    (funcall browse-url-browser-function (gnus-strip-whitespace address))))
+  "Activate ADDRESS with `browse-url'."
+  (browse-url (gnus-strip-whitespace address)))
+
+(eval-when-compile
+  ;; Silence the byte-compiler.
+  (autoload 'smiley-toggle-buffer "gnus-bitmap"))
+(defun gnus-article-smiley-display ()
+  "Display \"smileys\" as small graphical icons."
+  (smiley-toggle-buffer 1 (current-buffer) (point-min) (point-max)))
 
 ;;; Next/prev buttons in the article buffer.
 
@@ -4998,8 +5322,8 @@ forbidden in URL encoding."
   '(mail-decode-encoded-word-region)
   "List of methods used to decode headers.
 
-This variable is a list of FUNCTION or (REGEXP . FUNCTION). If item is
-FUNCTION, FUNCTION will be apply to all newsgroups. If item is a
+This variable is a list of FUNCTION or (REGEXP . FUNCTION).  If item
+is FUNCTION, FUNCTION will be apply to all newsgroups.  If item is a
 (REGEXP . FUNCTION), FUNCTION will be only apply to thes newsgroups
 whose names match REGEXP.
 
@@ -5017,13 +5341,13 @@ For example:
               (eq gnus-newsgroup-name
                   (car gnus-decode-header-methods-cache)))
     (setq gnus-decode-header-methods-cache (list gnus-newsgroup-name))
-    (mapc '(lambda (x)
-            (if (symbolp x)
-                (nconc gnus-decode-header-methods-cache (list x))
-              (if (and gnus-newsgroup-name
-                       (string-match (car x) gnus-newsgroup-name))
-                  (nconc gnus-decode-header-methods-cache
-                         (list (cdr x))))))
+    (mapcar (lambda (x)
+             (if (symbolp x)
+                 (nconc gnus-decode-header-methods-cache (list x))
+               (if (and gnus-newsgroup-name
+                        (string-match (car x) gnus-newsgroup-name))
+                   (nconc gnus-decode-header-methods-cache
+                          (list (cdr x))))))
          gnus-decode-header-methods))
   (let ((xlist gnus-decode-header-methods-cache))
     (pop xlist)
@@ -5055,7 +5379,11 @@ For example:
     (gnus-run-hooks 'gnus-part-display-hook)
     (unless gnus-inhibit-treatment
       (while (setq elem (pop alist))
-       (setq val (symbol-value (car elem)))
+       (setq val
+             (save-excursion
+               (if (gnus-buffer-live-p gnus-summary-buffer)
+                   (set-buffer gnus-summary-buffer))
+               (symbol-value (car elem))))
        (when (and (or (consp val)
                       treated-type)
                   (gnus-treat-predicate val)
@@ -5077,11 +5405,13 @@ For example:
                             'mime-view-entity entity))))))
 
 ;; Dynamic variables.
-(defvar part-number)
-(defvar total-parts)
-(defvar type)
-(defvar condition)
-(defvar length)
+(eval-when-compile
+  (defvar part-number)
+  (defvar total-parts)
+  (defvar type)
+  (defvar condition)
+  (defvar length))
+
 (defun gnus-treat-predicate (val)
   (cond
    ((null val)
@@ -5119,7 +5449,6 @@ For example:
    (t
     (error "%S is not a valid value" val))))
 
-
 ;;; @ for mime-view
 ;;;
 
index 0009e85..e661658 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-async.el --- asynchronous support for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +26,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-sum)
 (require 'nntp)
@@ -34,7 +35,7 @@
   "Support for asynchronous operations."
   :group 'gnus)
 
-(defcustom gnus-asynchronous t
+(defcustom gnus-asynchronous nil
   "*If nil, inhibit all Gnus asynchronicity.
 If non-nil, let the other asynch variables be heeded."
   :group 'gnus-asynchronous
@@ -158,42 +159,42 @@ It should return non-nil if the article is to be prefetched."
   "Possibly prefetch several articles starting with ARTICLE."
   (if (not (gnus-buffer-live-p summary))
       (gnus-async-with-semaphore
-       (setq gnus-async-fetch-list nil))
+       (setq gnus-async-fetch-list nil))
     (when (and gnus-asynchronous
               (gnus-alive-p))
       (when next
        (gnus-async-with-semaphore
-        (pop gnus-async-fetch-list)))
+         (pop gnus-async-fetch-list)))
       (let ((do-fetch next)
-           (do-message t)) ;(eq major-mode 'gnus-summary-mode)))
+           (do-message t))             ;(eq major-mode 'gnus-summary-mode)))
        (when (and (gnus-group-asynchronous-p group)
                   (gnus-buffer-live-p summary)
                   (or (not next)
                       gnus-async-fetch-list))
          (gnus-async-with-semaphore
-          (unless next
-            (setq do-fetch (not gnus-async-fetch-list))
-            ;; Nix out any outstanding requests.
-            (setq gnus-async-fetch-list nil)
-            ;; Fill in the new list.
-            (let ((n gnus-use-article-prefetch)
-                  (data (gnus-data-find-list article))
-                  d)
-              (while (and (setq d (pop data))
-                          (if (numberp n)
-                              (natnump (decf n))
-                            n))
-                (unless (or (gnus-async-prefetched-article-entry
-                             group (setq article (gnus-data-number d)))
-                            (not (natnump article))
-                            (not (funcall gnus-async-prefetch-article-p d)))
-                  ;; Not already fetched -- so we add it to the list.
-                  (push article gnus-async-fetch-list)))
-              (setq gnus-async-fetch-list
-                    (nreverse gnus-async-fetch-list))))
-
-          (when do-fetch
-            (setq article (car gnus-async-fetch-list))))
+           (unless next
+             (setq do-fetch (not gnus-async-fetch-list))
+             ;; Nix out any outstanding requests.
+             (setq gnus-async-fetch-list nil)
+             ;; Fill in the new list.
+             (let ((n gnus-use-article-prefetch)
+                   (data (gnus-data-find-list article))
+                   d)
+               (while (and (setq d (pop data))
+                           (if (numberp n)
+                               (natnump (decf n))
+                             n))
+                 (unless (or (gnus-async-prefetched-article-entry
+                              group (setq article (gnus-data-number d)))
+                             (not (natnump article))
+                             (not (funcall gnus-async-prefetch-article-p d)))
+                   ;; Not already fetched -- so we add it to the list.
+                   (push article gnus-async-fetch-list)))
+               (setq gnus-async-fetch-list
+                     (nreverse gnus-async-fetch-list))))
+
+           (when do-fetch
+             (setq article (car gnus-async-fetch-list))))
 
          (when (and do-fetch article)
            ;; We want to fetch some more articles.
@@ -227,16 +228,16 @@ It should return non-nil if the article is to be prefetched."
     (when arg
       (gnus-async-set-buffer)
       (gnus-async-with-semaphore
-       (setq
-       gnus-async-article-alist
-       (cons (list (intern (format "%s-%d" group article)
-                           gnus-async-hashtb)
-                   mark (set-marker (make-marker) (point-max))
-                   group article)
-             gnus-async-article-alist))))
+       (setq
+        gnus-async-article-alist
+        (cons (list (intern (format "%s-%d" group article)
+                            gnus-async-hashtb)
+                    mark (set-marker (make-marker) (point-max))
+                    group article)
+              gnus-async-article-alist))))
     (if (not (gnus-buffer-live-p summary))
        (gnus-async-with-semaphore
-        (setq gnus-async-fetch-list nil))
+         (setq gnus-async-fetch-list nil))
       (gnus-async-prefetch-article group next summary t))))
 
 (defun gnus-async-unread-p (data)
@@ -296,8 +297,8 @@ It should return non-nil if the article is to be prefetched."
     (set-marker (cadr entry) nil)
     (set-marker (caddr entry) nil))
   (gnus-async-with-semaphore
-   (setq gnus-async-article-alist
-        (delq entry gnus-async-article-alist))))
+    (setq gnus-async-article-alist
+         (delq entry gnus-async-article-alist))))
 
 (defun gnus-async-prefetch-remove-group (group)
   "Remove all articles belonging to GROUP from the prefetch buffer."
index f3bb686..ac959e7 100644 (file)
@@ -1,7 +1,8 @@
 ;;; gnus-audio.el --- Sound effects for Gnus
-;; Copyright (C) 1996 Free Software Foundation
+;; Copyright (C) 1996, 2000 Free Software Foundation
 
 ;; Author: Steven L. Baur <steve@miranova.com>
+;; Keywords: news, mail, multimedia
 
 ;; This file is part of GNU Emacs.
 
 ;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
+
 ;; This file provides access to sound effects in Gnus.
-;; Prerelease:  This file is partially stripped to support earcons.el
-;; You can safely ignore most of it until Red Gnus.  **Evil Laugh**
-;;; Code:
+;; This file is partially stripped to support earcons.el.
 
-(when (null (boundp 'running-xemacs))
-  (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)))
+;;; Code:
 
 (require 'nnheader)
-(eval-when-compile (require 'cl))
 
-(defvar gnus-audio-inline-sound
-  (and (fboundp 'device-sound-enabled-p)
-       (device-sound-enabled-p))
-  "When t, we will not spawn a subprocess to play sounds.")
+(defgroup gnus-audio nil
+  "Playing sound in Gnus."
+  :group 'gnus-visual
+  :group 'multimedia)
 
-(defvar gnus-audio-directory (nnheader-find-etc-directory "sounds")
-  "The directory containing the Sound Files.")
-
-(defvar gnus-audio-au-player "/usr/bin/showaudio"
-  "Executable program for playing sun AU format sound files.")
-
-(defvar gnus-audio-wav-player "/usr/local/bin/play"
-  "Executable program for playing WAV files.")
+(defvar gnus-audio-inline-sound
+  (or (if (fboundp 'device-sound-enabled-p)
+         (device-sound-enabled-p))     ; XEmacs
+      (fboundp 'play-sound))           ; Emacs 21
+  "Non-nil means try to play sounds without using an external program.")
+
+(defcustom gnus-audio-directory (nnheader-find-etc-directory "sounds")
+  "The directory containing the Sound Files."
+  :type '(choice directory (const nil))
+  :group 'gnus-audio)
+
+(defcustom gnus-audio-au-player "/usr/bin/showaudio"
+  "Executable program for playing sun AU format sound files."
+  :group 'gnus-audio
+  :type 'string)
+
+(defcustom gnus-audio-wav-player "/usr/local/bin/play"
+  "Executable program for playing WAV files."
+  :group 'gnus-audio
+  :type 'string)
 
 ;;; The following isn't implemented yet.  Wait for Millennium Gnus.
-;(defvar gnus-audio-effects-enabled t
-;  "When t, Gnus will use sound effects.")
-;(defvar gnus-audio-enable-hooks nil
-;  "Functions run when enabling sound effects.")
-;(defvar gnus-audio-disable-hooks nil
-;  "Functions run when disabling sound effects.")
-;(defvar gnus-audio-theme-song nil
-;  "Theme song for Gnus.")
-;(defvar gnus-audio-enter-group nil
-;  "Sound effect played when selecting a group.")
-;(defvar gnus-audio-exit-group nil
-;  "Sound effect played when exiting a group.")
-;(defvar gnus-audio-score-group nil
-;  "Sound effect played when scoring a group.")
-;(defvar gnus-audio-busy-sound nil
-;  "Sound effect played when going into a ... sequence.")
+;;(defvar gnus-audio-effects-enabled t
+;;  "When t, Gnus will use sound effects.")
+;;(defvar gnus-audio-enable-hooks nil
+;;  "Functions run when enabling sound effects.")
+;;(defvar gnus-audio-disable-hooks nil
+;;  "Functions run when disabling sound effects.")
+;;(defvar gnus-audio-theme-song nil
+;;  "Theme song for Gnus.")
+;;(defvar gnus-audio-enter-group nil
+;;  "Sound effect played when selecting a group.")
+;;(defvar gnus-audio-exit-group nil
+;;  "Sound effect played when exiting a group.")
+;;(defvar gnus-audio-score-group nil
+;;  "Sound effect played when scoring a group.")
+;;(defvar gnus-audio-busy-sound nil
+;;  "Sound effect played when going into a ... sequence.")
 
 
 ;;;###autoload
-                                       ;(defun gnus-audio-enable-sound ()
-;  "Enable Sound Effects for Gnus."
-;  (interactive)
-;  (setq gnus-audio-effects-enabled t)
-;  (gnus-run-hooks gnus-audio-enable-hooks))
+;;(defun gnus-audio-enable-sound ()
+;;  "Enable Sound Effects for Gnus."
+;;  (interactive)
+;;  (setq gnus-audio-effects-enabled t)
+;;  (gnus-run-hooks gnus-audio-enable-hooks))
 
 ;;;###autoload
                                        ;(defun gnus-audio-disable-sound ()
-;  "Disable Sound Effects for Gnus."
-;  (interactive)
-;  (setq gnus-audio-effects-enabled nil)
-;  (gnus-run-hooks gnus-audio-disable-hooks))
+;;  "Disable Sound Effects for Gnus."
+;;  (interactive)
+;;  (setq gnus-audio-effects-enabled nil)
+;;  (gnus-run-hooks gnus-audio-disable-hooks))
 
 ;;;###autoload
 (defun gnus-audio-play (file)
-  "Play a sound through the speaker."
+  "Play a sound FILE through the speaker."
   (interactive)
   (let ((sound-file (if (file-exists-p file)
                        file
-                     (concat gnus-audio-directory file))))
+                     (expand-file-name file gnus-audio-directory))))
     (when (file-exists-p sound-file)
-      (if gnus-audio-inline-sound
-         (play-sound-file sound-file)
-       (cond ((string-match "\\.wav$" sound-file)
-              (call-process gnus-audio-wav-player
-                            sound-file
-                            0
-                            nil
-                            sound-file))
-             ((string-match "\\.au$" sound-file)
-              (call-process gnus-audio-au-player
-                            sound-file
-                            0
-                            nil
-                            sound-file)))))))
+      (cond ((and gnus-audio-inline-sound
+                (condition-case nil
+                    ;; Even if we have audio, we may fail with the
+                    ;; wrong sort of sound file.
+                    (progn (play-sound-file sound-file)
+                           t)
+                  (error nil))))
+           ;; If we don't have built-in sound, or playing it failed,
+           ;; try with external program.
+           ((equal "wav" (file-name-extension sound-file))
+            (call-process gnus-audio-wav-player
+                          sound-file
+                          0
+                          nil
+                          sound-file))
+           ((equal "au" (file-name-extension sound-file))
+            (call-process gnus-audio-au-player
+                          sound-file
+                          0
+                          nil
+                          sound-file))))))
 
 
 ;;; The following isn't implemented yet, wait for Red Gnus
-                                       ;(defun gnus-audio-startrek-sounds ()
-;  "Enable sounds from Star Trek the original series."
-;  (interactive)
-;  (setq gnus-audio-busy-sound "working.au")
-;  (setq gnus-audio-enter-group "bulkhead_door.au")
-;  (setq gnus-audio-exit-group "bulkhead_door.au")
-;  (setq gnus-audio-score-group "ST_laser.au")
-;  (setq gnus-audio-theme-song "startrek.au")
-;  (add-hook 'gnus-select-group-hook 'gnus-audio-startrek-select-group)
-;  (add-hook 'gnus-exit-group-hook 'gnus-audio-startrek-exit-group))
+;;(defun gnus-audio-startrek-sounds ()
+;;  "Enable sounds from Star Trek the original series."
+;;  (interactive)
+;;  (setq gnus-audio-busy-sound "working.au")
+;;  (setq gnus-audio-enter-group "bulkhead_door.au")
+;;  (setq gnus-audio-exit-group "bulkhead_door.au")
+;;  (setq gnus-audio-score-group "ST_laser.au")
+;;  (setq gnus-audio-theme-song "startrek.au")
+;;  (add-hook 'gnus-select-group-hook 'gnus-audio-startrek-select-group)
+;;  (add-hook 'gnus-exit-group-hook 'gnus-audio-startrek-exit-group))
 ;;;***
 
 (defvar gnus-startup-jingle "Tuxedomoon.Jingle4.au"
index 6caef29..dd14068 100644 (file)
@@ -1,15 +1,15 @@
-;; gnus-bbdb.el --- Interface to Semi-gnus
+;; gnus-bbdb.el --- Interface to T-gnus
 
 ;; Copyright (c) 1991,1992,1993 Jamie Zawinski <jwz@netscape.com>.
 ;; Copyright (C) 1995,1996,1997 Shuhei KOBAYASHI
 ;; Copyright (C) 1997,1998 MORIOKA Tomohiko
-;; Copyright (C) 1998 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+;; Copyright (C) 1998,1999 Keiichi Suzuki <keiichi@nanap.org>
 
-;; Author: Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+;; Author: Keiichi Suzuki <keiichi@nanap.org>
 ;; Author: Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
 ;; Keywords: BBDB, MIME, multimedia, multilingual, mail, news
 
-;; This file is part of Semi-gnus.
+;; This file is part of T-gnus.
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License as
 ;;; Code:
 
 (require 'bbdb)
+(require 'bbdb-com)
 (require 'gnus)
 (require 'std11)
 (eval-when-compile
-  (require 'gnus-win))
+  (defvar bbdb-pop-up-elided-display)  ; default unbound.
+  (require 'gnus-win)
+  (require 'cl))
 
 (defvar gnus-bbdb/decode-field-body-function 'nnheader-decode-field-body
   "*Field body decoder.")
 
 ;;;###autoload
 (defun gnus-bbdb/update-record (&optional offer-to-create)
-  "returns the record corresponding to the current GNUS message, creating 
-or modifying it as necessary.  A record will be created if 
+  "returns the record corresponding to the current GNUS message, creating
+or modifying it as necessary.  A record will be created if
 bbdb/news-auto-create-p is non-nil, or if OFFER-TO-CREATE is true and
 the user confirms the creation."
   (if bbdb-use-pop-up
       (gnus-bbdb/pop-up-bbdb-buffer offer-to-create)
-    (save-excursion
-      (save-restriction
-       (let (from)
-         (set-buffer gnus-original-article-buffer)
-         (widen)
-         (narrow-to-region (point-min)
-                           (progn (goto-char (point-min))
-                                  (or (search-forward "\n\n" nil t)
-                                      (error "message unexists"))
-                                  (- (point) 2)))
-         (when (setq from (mail-fetch-field "from"))
-           (setq from (gnus-bbdb/extract-address-components
-                       (gnus-bbdb/decode-field-body from 'From))))
-         (when (and (car (cdr from))
-                    (string-match (bbdb-user-mail-names)
-                                  (car (cdr from))))
-           ;; if logged-in user sent this, use recipients.
-           (let ((to (mail-fetch-field "to")))
-             (when to
-               (setq from
-                     (gnus-bbdb/extract-address-components
-                      (gnus-bbdb/decode-field-body to 'To))))))
-       (when from
+    (let ((from (mime-entity-fetch-field gnus-current-headers "from")))
+      (when from
+       (setq from (gnus-bbdb/extract-address-components
+                   (gnus-bbdb/decode-field-body from 'From))))
+      (when (and (car (cdr from))
+                (string-match (bbdb-user-mail-names)
+                              (car (cdr from))))
+       ;; if logged-in user sent this, use recipients.
+       (let ((to (mime-entity-fetch-field gnus-current-headers "to")))
+         (when to
+           (setq from
+                 (gnus-bbdb/extract-address-components
+                  (gnus-bbdb/decode-field-body to 'To))))))
+      (when from
+       (save-excursion
          (bbdb-annotate-message-sender from t
                                        (or (bbdb-invoke-hook-for-value
                                             bbdb/news-auto-create-p)
                                            offer-to-create)
-                                       offer-to-create)))))))
+                                       offer-to-create))))))
 
 ;;;###autoload
 (defun gnus-bbdb/annotate-sender (string &optional replace)
@@ -87,7 +82,7 @@ corresponding to the sender of this message.  If REPLACE is non-nil,
 replace the existing notes entry (if any)."
   (interactive (list (if bbdb-readonly-p
                         (error "The Insidious Big Brother Database is read-only.")
-                        (read-string "Comments: "))))
+                      (read-string "Comments: "))))
   (bbdb-annotate-notes (gnus-bbdb/update-record t) string 'notes replace))
 
 (defun gnus-bbdb/edit-notes (&optional arg)
@@ -110,41 +105,119 @@ This buffer will be in bbdb-mode, with associated keybindings."
        (bbdb-display-records (list record))
        (error "unperson"))))
 
-;; Avoid byte-compile warning.
-(defvar bbdb-pop-up-elided-display)
 
 (defun gnus-bbdb/pop-up-bbdb-buffer (&optional offer-to-create)
   "Make the *BBDB* buffer be displayed along with the GNUS windows,
 displaying the record corresponding to the sender of the current message."
-  (let ((bbdb-gag-messages t)
-       (bbdb-use-pop-up nil)
-       (bbdb-electric-p nil))
-    (let ((record (gnus-bbdb/update-record offer-to-create))
-         (bbdb-elided-display (bbdb-pop-up-elided-display))
-         (b (current-buffer)))
+  (let* ((bbdb-gag-messages t)
+        (bbdb-electric-p nil)
+        (record
+         (let (bbdb-use-pop-up)
+           (gnus-bbdb/update-record offer-to-create)))
+        (bbdb-elided-display (bbdb-pop-up-elided-display)))
+    (save-current-buffer
       ;; display the bbdb buffer iff there is a record for this article.
-      (cond (record
-            (bbdb-pop-up-bbdb-buffer
-             (function (lambda (w)
-                         (let ((b (current-buffer)))
-                           (set-buffer (window-buffer w))
-                           (prog1 (or (eq major-mode 'mime-veiw-mode)
-                                      (eq major-mode 'gnus-article-mode))
-                                  (set-buffer b))))))
-            (bbdb-display-records (list record)))
-           (t
-            (or bbdb-inside-electric-display
-                (not (get-buffer-window bbdb-buffer-name))
-                (let (w)
-                  (delete-other-windows)
-                  (if (assq 'article gnus-buffer-configuration)
-                      (gnus-configure-windows 'article)
-                    (gnus-configure-windows 'SelectArticle))
-                  (if (setq w (get-buffer-window gnus-summary-buffer))
-                      (select-window w))
-                  ))))
-      (set-buffer b)
-      record)))
+      (cond
+       (record
+       (bbdb-pop-up-bbdb-buffer
+        (lambda (w)
+          (with-current-buffer (window-buffer w)
+            (memq major-mode
+                  '(mime-view-mode gnus-article-mode)))))
+       (bbdb-display-records (list record)))
+       ((and (not bbdb-inside-electric-display)
+            (get-buffer-window bbdb-buffer-name))
+       (delete-other-windows)
+       (if (assq 'article gnus-buffer-configuration)
+           (gnus-configure-windows 'article)
+         (gnus-configure-windows 'SelectArticle))
+       (let ((w (get-buffer-window gnus-summary-buffer)))
+         (if w (select-window w))))))
+    record))
+
+;;;###autoload
+(defun gnus-bbdb/split-mail (header-field bbdb-field
+                                         &optional regexp group)
+  "Mail split method for `nnmail-split-fancy'.
+HEADER-FIELD is a regexp or list of regexps as mail header field name
+for gathering mail addresses.  If HEADER-FIELD is a string, then it's
+used for just matching pattern.  If HEADER-FIELD is a list of strings,
+then these strings have priorities in the order.
+
+BBDB-FIELD is field name of BBDB.
+Optional argument REGEXP is regexp string for matching BBDB-FIELD value.
+If REGEXP is nil or not specified, then all BBDB-FIELD value is matched.
+
+If GROUP is nil or not specified, then BBDB-FIELD value is returned as
+group name.  If GROUP is a symbol `&', then list of all matching group's
+BBDB-FIELD values is returned.  Otherwise, GROUP is returned."
+  (if (listp header-field)
+      (if (eq group '&)
+         (gnus-bbdb/split-mail (mapconcat 'identity header-field "\\|")
+                               bbdb-field regexp group)
+       (let (rest)
+         (while (and header-field
+                     (null (setq rest (gnus-bbdb/split-mail
+                                       (car header-field) bbdb-field
+                                       regexp group))))
+           (setq header-field (cdr header-field)))
+         rest))
+    (let ((pat (concat "^\\(" header-field "\\):[ \t]"))
+         header-values)
+      (goto-char (point-min))
+      (while (re-search-forward pat nil t)
+       (setq header-values (cons (buffer-substring (point)
+                                                   (std11-field-end))
+                                 header-values)))
+      (let ((address-regexp
+            (with-temp-buffer
+              (let (lal)
+                (while header-values
+                  (setq lal (std11-parse-addresses-string
+                             (pop header-values)))
+                  (while lal
+                    (gnus-bbdb/insert-address-regexp (pop lal)))))
+              (buffer-string))))
+       (unless (zerop (length address-regexp))
+         (gnus-bbdb/split-mail-1 address-regexp bbdb-field regexp group))))))
+
+(defun gnus-bbdb/insert-address-regexp (address)
+  "Insert string of address part from parsed ADDRESS of RFC 822."
+  (cond ((eq (car address) 'group)
+        (setq address (cdr address))
+        (while address
+          (gnus-bbdb/insert-address-regexp (pop address))))
+       ((eq (car address) 'mailbox)
+        (unless (eq (point) (point-min))
+          (insert "\\|"))
+        (let ((addr (nth 1 address)))
+          (insert (std11-addr-to-string
+                   (if (eq (car addr) 'phrase-route-addr)
+                       (nth 2 addr)
+                     (cdr addr))))))))
+
+(defun gnus-bbdb/split-mail-1 (address-regexp bbdb-field regexp group)
+  (let ((records (bbdb-search (bbdb-records) nil nil address-regexp))
+       prop rest)
+    (or regexp (setq regexp ""))
+    (catch 'done
+      (cond
+       ((eq group '&)
+       (while records
+         (when (and (setq prop (bbdb-record-getprop (car records) bbdb-field))
+                    (string-match regexp prop)
+                    (not (member prop rest)))
+           (setq rest (cons prop rest)))
+         (setq records (cdr records)))
+       (throw 'done (when rest (cons '& rest))))
+       (t
+       (while records
+         (when (or (null bbdb-field) 
+                   (and (setq prop (bbdb-record-getprop (car records)
+                                                        bbdb-field))
+                        (string-match regexp prop)))
+           (throw 'done (or group prop)))
+         (setq records (cdr records))))))))
 
 ;;
 ;; Announcing BBDB entries in the summary buffer
@@ -167,8 +240,10 @@ This variable has no effect on the marking controlled by
   :group 'bbdb-mua-specific-gnus
   :type '(choice (const :tag "Mark known posters" t)
                 (const :tag "Do not mark known posters" nil)))
-(defvaralias 'gnus-bbdb/mark-known-posters
-  'gnus-bbdb/summary-mark-known-posters)
+(static-when (and (fboundp 'defvaralias)
+                 (subrp (symbol-function 'defvaralias)))
+  (defvaralias 'gnus-bbdb/mark-known-posters
+    'gnus-bbdb/summary-mark-known-posters))
 
 (defcustom gnus-bbdb/summary-known-poster-mark "+"
   "This is the default character to prefix author names with if
@@ -187,8 +262,10 @@ people who aren't in the database, of course.  (`gnus-optional-headers'
 must be `gnus-bbdb/lines-and-from' for GNUS users.)"
   :group 'bbdb-mua-specific-gnus
   :type 'boolean)
-(defvaralias 'gnus-bbdb/header-show-bbdb-names
-  'gnus-bbdb/summary-show-bbdb-names)
+(static-when (and (fboundp 'defvaralias)
+                 (subrp (symbol-function 'defvaralias)))
+  (defvaralias 'gnus-bbdb/header-show-bbdb-names
+    'gnus-bbdb/summary-show-bbdb-names))
 
 (defcustom gnus-bbdb/summary-prefer-bbdb-data t
   "If t, then for posters who are in our BBDB, replace the information
@@ -207,8 +284,10 @@ See `gnus-bbdb/lines-and-from' for GNUS users, or
   :group 'bbdb-mua-specific-gnus
   :type '(choice (const :tag "Prefer real names" t)
                 (const :tag "Prefer network addresses" nil)))
-(defvaralias 'gnus-bbdb/header-prefer-real-names
-  'gnus-bbdb/summary-prefer-real-names)
+(static-when (and (fboundp 'defvaralias)
+                 (subrp (symbol-function 'defvaralias)))
+  (defvaralias 'gnus-bbdb/header-prefer-real-names
+    'gnus-bbdb/summary-prefer-real-names))
 
 (defcustom gnus-bbdb/summary-user-format-letter "B"
   "This is the gnus-user-format-function- that will be used to insert
@@ -442,17 +521,7 @@ addresses better than the traditionally static global scorefile."
   gnus-bbdb/score-alist)
 
 (defun gnus-bbdb/extract-field-value-init ()
-  (when (or (and (eq (current-buffer) (get-buffer gnus-article-buffer))
-                (buffer-live-p gnus-original-article-buffer)
-                (set-buffer gnus-original-article-buffer))
-           (eq (current-buffer) (get-buffer gnus-original-article-buffer)))
-    (widen)
-    (narrow-to-region (point-min)
-                     (progn (goto-char (point-min))
-                            (or (search-forward "\n\n" nil t)
-                                (error "message unexists"))
-                            (- (point) 2)))
-    'gnus-bbdb/extract-field-value))
+  (function gnus-bbdb/extract-field-value))
 
 (defun gnus-bbdb/extract-field-value (field-name)
   "Given the name of a field (like \"Subject\") this returns the value of
@@ -465,7 +534,8 @@ beginning of the message headers."
   ;; divided real-names from addresses; the actual From: and Subject: fields
   ;; exist only in the message.
   (let (value)
-    (when (setq value (mail-fetch-field field-name))
+    (when (setq value (mime-entity-fetch-field
+                      gnus-current-headers field-name))
       (gnus-bbdb/decode-field-body value field-name))))
 
 ;;; @ mail-extr
@@ -486,8 +556,7 @@ beginning of the message headers."
     (if (string= address "") (setq address nil))
     (if (string= phrase "") (setq phrase nil))
     (when (or phrase address)
-      (list phrase address))
-    ))
+      (list phrase address))))
 
 ;;; @ full-name canonicalization methods
 ;;;
@@ -496,25 +565,21 @@ beginning of the message headers."
   (let (dest)
     (while (string-match "\\s +" str)
       (setq dest (cons (substring str 0 (match-beginning 0)) dest))
-      (setq str (substring str (match-end 0)))
-      )
+      (setq str (substring str (match-end 0))))
     (or (string= str "")
         (setq dest (cons str dest)))
     (setq dest (nreverse dest))
-    (mapconcat 'identity dest " ")
-    ))
+    (mapconcat 'identity dest " ")))
 
 (defun gnus-bbdb/canonicalize-dots (str)
   (let (dest)
     (while (string-match "\\." str)
       (setq dest (cons (substring str 0 (match-end 0)) dest))
-      (setq str (substring str (match-end 0)))
-      )
+      (setq str (substring str (match-end 0))))
     (or (string= str "")
         (setq dest (cons str dest)))
     (setq dest (nreverse dest))
-    (mapconcat 'identity dest " ")
-    ))
+    (mapconcat 'identity dest " ")))
 
 ;;
 ;; Insinuation
index a47a199..3fca805 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-bcklg.el --- backlog functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
        gnus-backlog-articles nil))
 
 (defun gnus-backlog-enter-article (group number buffer)
-  (gnus-backlog-setup)
-  (let ((ident (intern (concat group ":" (int-to-string number))
-                      gnus-backlog-hashtb))
-       b)
-    (if (memq ident gnus-backlog-articles)
-       ()                              ; It's already kept.
+  (when (and (numberp number)
+            (not (string-match "^nnvirtual" group)))
+    (gnus-backlog-setup)
+    (let ((ident (intern (concat group ":" (int-to-string number))
+                        gnus-backlog-hashtb))
+         b)
+      (if (memq ident gnus-backlog-articles)
+         ()                            ; It's already kept.
       ;; Remove the oldest article, if necessary.
-      (and (numberp gnus-keep-backlog)
-          (>= (length gnus-backlog-articles) gnus-keep-backlog)
+       (and (numberp gnus-keep-backlog)
+            (>= (length gnus-backlog-articles) gnus-keep-backlog)
           (gnus-backlog-remove-oldest-article))
-      (push ident gnus-backlog-articles)
-      ;; Insert the new article.
-      (save-excursion
-       (set-buffer (gnus-backlog-buffer))
-       (let (buffer-read-only)
-         (goto-char (point-max))
-         (unless (bolp)
-           (insert "\n"))
-         (setq b (point))
-         (insert-buffer-substring buffer)
-         ;; Tag the beginning of the article with the ident.
-         (if (> (point-max) b)
+       (push ident gnus-backlog-articles)
+       ;; Insert the new article.
+       (save-excursion
+         (set-buffer (gnus-backlog-buffer))
+         (let (buffer-read-only)
+           (goto-char (point-max))
+           (unless (bolp)
+             (insert "\n"))
+           (setq b (point))
+           (insert-buffer-substring buffer)
+           ;; Tag the beginning of the article with the ident.
+           (if (> (point-max) b)
              (gnus-put-text-property b (1+ b) 'gnus-backlog ident)
-           (gnus-error 3 "Article %d is blank" number)))))))
+             (gnus-error 3 "Article %d is blank" number))))))))
 
 (defun gnus-backlog-remove-oldest-article ()
   (save-excursion
              t))
          (setq gnus-backlog-articles (delq ident gnus-backlog-articles)))))))
 
-(defun gnus-backlog-request-article (group number buffer)
-  (when (numberp number)
+(defun gnus-backlog-request-article (group number &optional buffer)
+  (when (and (numberp number)
+            (not (string-match "^nnvirtual" group)))
     (gnus-backlog-setup)
     (let ((ident (intern (concat group ":" (int-to-string number))
                         gnus-backlog-hashtb))
            (setq end
                  (next-single-property-change
                   (1+ beg) 'gnus-backlog (current-buffer) (point-max)))))
-       (let ((buffer-read-only nil))
-         (erase-buffer)
-         (insert-buffer-substring gnus-backlog-buffer beg end)
-         t)))))
+       (save-excursion
+         (and buffer (set-buffer buffer))
+         (let ((buffer-read-only nil))
+           (erase-buffer)
+           (insert-buffer-substring gnus-backlog-buffer beg end)))
+       t))))
 
 (provide 'gnus-bcklg)
 
index 12b491a..734e8eb 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-cache.el --- cache interface for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
@@ -28,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 
 (require 'gnus)
 (require 'gnus-int)
@@ -62,7 +64,7 @@ If a group matches both gnus-cacheable-groups and gnus-uncacheable-groups
 it's not cached."
   :group 'gnus-cache
   :type '(choice (const :tag "off" nil)
-                regexp))
+                regexp))
 
 (defcustom gnus-uncacheable-groups nil
   "*Groups that match this regexp will not be cached.
@@ -178,6 +180,7 @@ it's not cached."
            t                           ; The article already is saved.
          (save-excursion
            (set-buffer nntp-server-buffer)
+           (require 'gnus-art)
            (let ((gnus-use-cache nil)
                  (gnus-article-decode-hook nil))
              (gnus-request-article-this-buffer number group))
@@ -428,7 +431,7 @@ Returns the list of articles removed."
 (defun gnus-summary-insert-cached-articles ()
   "Insert all the articles cached for this group into the current buffer."
   (interactive)
-  (let ((cached (sort (copy-sequence gnus-newsgroup-cached) '<))
+  (let ((cached (sort (copy-sequence gnus-newsgroup-cached) '>))
        (gnus-verbose (max 6 gnus-verbose)))
     (unless cached
       (gnus-message 3 "No cached articles for this group"))
@@ -647,6 +650,7 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
   (let ((gnus-mark-article-hook nil)
        (gnus-expert-user t)
        (nnmail-spool-file nil)
+       (mail-sources nil)
        (gnus-use-dribble-file nil)
        (gnus-novice-user nil)
        (gnus-large-newsgroup nil))
@@ -687,9 +691,7 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
   (when (or force
            (and gnus-cache-active-hashtb
                 gnus-cache-active-altered))
-    (gnus-write-active-file-as-coding-system
-     gnus-cache-write-file-coding-system
-     gnus-cache-active-file gnus-cache-active-hashtb t)
+    (gnus-write-active-file gnus-cache-active-file gnus-cache-active-hashtb t)
     ;; Mark the active hashtb as unaltered.
     (setq gnus-cache-active-altered nil)))
 
@@ -759,7 +761,8 @@ If LOW, update the lower bound instead."
   (interactive (list gnus-cache-directory))
   (gnus-cache-close)
   (let ((nnml-generate-active-function 'identity))
-    (nnml-generate-nov-databases-1 dir)))
+    (nnml-generate-nov-databases-1 dir))
+  (gnus-cache-open))
 
 (defun gnus-cache-move-cache (dir)
   "Move the cache tree to somewhere else."
index 33ff4fd..a92f635 100644 (file)
@@ -1,7 +1,13 @@
-;;; gnus-cite.el --- parse citations in articles for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;;; gnus-cite.el --- parse citations in articles for Gnus  -*- coding: iso-latin-1 -*-
 
-;; Author: Per Abhiddenware; you can redistribute it and/or modify
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
+
+;; Author: Per Abhiddenware
+
+;; 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.
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'static))
+
 (require 'gnus)
 (require 'gnus-art)
 (require 'gnus-range)
 
-(eval-when-compile (require 'static))
-
 ;;; Customization:
 
 (defgroup gnus-cite nil
@@ -43,10 +49,10 @@ article has citations."
   :type 'string)
 
 (defcustom gnus-cite-always-check nil
-  "Check article always for citations. Set it t to check all articles."
+  "Check article always for citations.  Set it t to check all articles."
   :group 'gnus-cite
   :type '(choice (const :tag "no" nil)
-                 (const :tag "yes" t)))
+                (const :tag "yes" t)))
 
 (defcustom gnus-cited-opened-text-button-line-format "%(%{[-]%}%)\n"
   "Format of opened cited text buttons."
@@ -239,8 +245,8 @@ It is merged with the face for the cited text belonging to the attribution."
 
 (defcustom gnus-cite-face-list
   '(gnus-cite-face-1 gnus-cite-face-2 gnus-cite-face-3 gnus-cite-face-4
-    gnus-cite-face-5 gnus-cite-face-6 gnus-cite-face-7 gnus-cite-face-8
-    gnus-cite-face-9 gnus-cite-face-10 gnus-cite-face-11)
+                    gnus-cite-face-5 gnus-cite-face-6 gnus-cite-face-7 gnus-cite-face-8
+                    gnus-cite-face-9 gnus-cite-face-10 gnus-cite-face-11)
   "*List of faces used for highlighting citations.
 
 When there are citations from multiple articles in the same message,
@@ -462,57 +468,63 @@ always hide."
   (gnus-set-format 'cited-closed-text-button t)
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (cond
-     ((gnus-article-check-hidden-text 'cite arg)
-      t)
-     ((gnus-article-text-type-exists-p 'cite)
-      (let ((buffer-read-only nil))
-       (gnus-article-hide-text-of-type 'cite)))
-     (t
       (let ((buffer-read-only nil)
-           (marks (gnus-dissect-cited-text))
+           marks
            (inhibit-point-motion-hooks t)
            (props (nconc (list 'article-type 'cite)
                          gnus-hidden-properties))
-           beg end start)
-       (while marks
-         (setq beg nil
-               end nil)
-         (while (and marks (string= (cdar marks) ""))
-           (setq marks (cdr marks)))
-         (when marks
-           (setq beg (caar marks)))
-         (while (and marks (not (string= (cdar marks) "")))
-           (setq marks (cdr marks)))
-         (when marks
+           (point (point-min))
+           found beg end start)
+       (while (setq point 
+                    (text-property-any point (point-max) 
+                                       'gnus-callback
+                                       'gnus-article-toggle-cited-text))
+         (setq found t)
+         (goto-char point)
+         (gnus-article-toggle-cited-text
+          (get-text-property point 'gnus-data) arg)
+         (forward-line 1)
+         (setq point (point)))
+       (unless found
+         (setq marks (gnus-dissect-cited-text))
+         (while marks
+           (setq beg nil
+                 end nil)
+           (while (and marks (string= (cdar marks) ""))
+             (setq marks (cdr marks)))
+           (when marks
+             (setq beg (caar marks)))
+           (while (and marks (not (string= (cdar marks) "")))
+             (setq marks (cdr marks)))
+           (when marks
            (setq end (caar marks)))
-         ;; Skip past lines we want to leave visible.
-         (when (and beg end gnus-cited-lines-visible)
-           (goto-char beg)
-           (forward-line (if (consp gnus-cited-lines-visible)
-                             (car gnus-cited-lines-visible)
-                           gnus-cited-lines-visible))
-           (if (>= (point) end)
-               (setq beg nil)
-             (setq beg (point-marker))
-             (when (consp gnus-cited-lines-visible)
-               (goto-char end)
-               (forward-line (- (cdr gnus-cited-lines-visible)))
-               (if (<= (point) beg)
-                   (setq beg nil)
+           ;; Skip past lines we want to leave visible.
+           (when (and beg end gnus-cited-lines-visible)
+             (goto-char beg)
+             (forward-line (if (consp gnus-cited-lines-visible)
+                               (car gnus-cited-lines-visible)
+                             gnus-cited-lines-visible))
+             (if (>= (point) end)
+                 (setq beg nil)
+               (setq beg (point-marker))
+               (when (consp gnus-cited-lines-visible)
+                 (goto-char end)
+                 (forward-line (- (cdr gnus-cited-lines-visible)))
+                 (if (<= (point) beg)
+                     (setq beg nil)
                  (setq end (point-marker))))))
-         (when (and beg end)
-           ;; We use markers for the end-points to facilitate later
-           ;; wrapping and mangling of text.
-           (setq beg (set-marker (make-marker) beg)
-                 end (set-marker (make-marker) end))
-           (gnus-add-text-properties beg end props)
-           (goto-char beg)
-           (unless (save-excursion (search-backward "\n\n" nil t))
-             (insert "\n"))
-           (put-text-property
-            (setq start (point-marker))
-            (progn
+           (when (and beg end)
+             ;; We use markers for the end-points to facilitate later
+             ;; wrapping and mangling of text.
+             (setq beg (set-marker (make-marker) beg)
+                   end (set-marker (make-marker) end))
+             (gnus-add-text-properties-when 'article-type nil beg end props)
+             (goto-char beg)
+             (unless (save-excursion (search-backward "\n\n" nil t))
+               (insert "\n"))
+             (put-text-property
+              (setq start (point-marker))
+              (progn
               (gnus-article-add-button
                (point)
                (progn (eval gnus-cited-closed-text-button-line-format-spec)
@@ -520,40 +532,51 @@ always hide."
                `gnus-article-toggle-cited-text
                (list (cons beg end) start))
               (point))
-            'article-type 'annotation)
-           (set-marker beg (point)))))))))
+              'article-type 'annotation)
+             (set-marker beg (point))))))))
 
-(defun gnus-article-toggle-cited-text (args)
-  "Toggle hiding the text in REGION."
+(defun gnus-article-toggle-cited-text (args &optional arg)
+  "Toggle hiding the text in REGION.
+ARG can be nil or a number.  Positive means hide, negative
+means show, nil means toggle."
   (let* ((region (car args))
+        (beg (car region))
+        (end (cdr region))
         (start (cadr args))
         (hidden
-         (text-property-any
-          (car region) (1- (cdr region))
-          (car gnus-hidden-properties) (cadr gnus-hidden-properties)))
+         (text-property-any beg (1- end) 'article-type 'cite))
         (inhibit-point-motion-hooks t)
         buffer-read-only)
-    (funcall
-     (if hidden
-        'remove-text-properties 'gnus-add-text-properties)
-     (car region) (cdr region) gnus-hidden-properties)
-    (save-excursion
-      (goto-char start)
-      (gnus-delete-line)
-      (put-text-property
-       (point)
-       (progn
-        (gnus-article-add-button
-         (point)
-         (progn (eval
-                 (if hidden
-                     gnus-cited-opened-text-button-line-format-spec
-                   gnus-cited-closed-text-button-line-format-spec))
-                (point))
-         `gnus-article-toggle-cited-text
-         args)
-        (point))
-       'article-type 'annotation))))
+    (when (or (null arg)
+             (zerop arg)
+             (and (> arg 0) (not hidden))
+             (and (< arg 0) hidden))
+      (if hidden
+         (gnus-remove-text-properties-when
+          'article-type 'cite beg end 
+          (cons 'article-type (cons 'cite
+                                    gnus-hidden-properties)))
+       (gnus-add-text-properties-when
+        'article-type nil beg end 
+        (cons 'article-type (cons 'cite
+                                  gnus-hidden-properties))))
+      (save-excursion
+       (goto-char start)
+       (gnus-delete-line)
+       (put-text-property
+        (point)
+        (progn
+          (gnus-article-add-button
+           (point)
+           (progn (eval
+                   (if hidden
+                       gnus-cited-opened-text-button-line-format-spec
+                     gnus-cited-closed-text-button-line-format-spec))
+                  (point))
+           `gnus-article-toggle-cited-text
+           args)
+          (point))
+        'article-type 'annotation)))))
 
 (defun gnus-article-hide-citation-maybe (&optional arg force)
   "Toggle hiding of cited text that has an attribution line.
@@ -661,23 +684,26 @@ See also the documentation for `gnus-article-highlight-citation'."
               (goto-char (point-max))
               (gnus-article-search-signature)
               (point)))
-       alist entry start begin end numbers prefix mc-flag)
+       (prefix-regexp (concat "^\\(" gnus-cite-prefix-regexp "\\)"))
+       alist entry start begin end numbers prefix guess-limit mc-flag)
     ;; Get all potential prefixes in `alist'.
     (while (< (point) max)
       ;; Each line.
       (setq begin (point)
+           guess-limit (progn (skip-chars-forward "^> \t\r\n") (point))
            end (progn (beginning-of-line 2) (point))
            start end)
       (goto-char begin)
       ;; Ignore standard Supercite attribution prefix.
-      (when (looking-at gnus-supercite-regexp)
+      (when (and (< guess-limit (+ begin gnus-cite-max-prefix))
+                (looking-at gnus-supercite-regexp))
        (if (match-end 1)
            (setq end (1+ (match-end 1)))
          (setq end (1+ begin))))
       ;; Ignore very long prefixes.
-      (when (> end (+ (point) gnus-cite-max-prefix))
-       (setq end (+ (point) gnus-cite-max-prefix)))
-      (while (re-search-forward gnus-cite-prefix-regexp (1- end) t)
+      (when (> end (+ begin gnus-cite-max-prefix))
+       (setq end (+ begin gnus-cite-max-prefix)))
+      (while (re-search-forward prefix-regexp (1- end) t)
        ;; Each prefix.
        (setq end (match-end 0)
              prefix (buffer-substring begin end))
@@ -909,7 +935,7 @@ See also the documentation for `gnus-article-highlight-citation'."
        (static-if (or (featurep 'xemacs)
                       (and (eq emacs-major-version 20)
                            (>= emacs-minor-version 3))
-                      (> emacs-major-version 20));-)
+                      (>= emacs-major-version 21))
            (forward-char (length prefix))
          (move-to-column (string-width prefix)))
        (skip-chars-forward " \t")
@@ -970,4 +996,8 @@ See also the documentation for `gnus-article-highlight-citation'."
 
 (provide 'gnus-cite)
 
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
 ;;; gnus-cite.el ends here
diff --git a/lisp/gnus-clfns.el b/lisp/gnus-clfns.el
new file mode 100644 (file)
index 0000000..9b28e89
--- /dev/null
@@ -0,0 +1,81 @@
+;;; gnus-clfns.el --- compiler macros for emulating cl functions
+;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+
+;; Author: Kastsumi Yamaoka <yamaoka@jpl.org>
+;; Keywords: cl, compile
+
+;; 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.
+
+;;; Commentary:
+
+;; Avoid cl runtime functions for FSF Emacsen.
+
+;;; Code:
+
+(if (featurep 'xemacs)
+    nil
+  (require 'cl)
+
+  (define-compiler-macro butlast (&whole form x &optional n)
+    (if (and (fboundp 'butlast)
+            (subrp (symbol-function 'butlast)))
+       form
+      (if n
+         `(let ((x ,x)
+                (n ,n))
+            (if (and n (<= n 0))
+                x
+              (let ((m (length x)))
+                (or n (setq n 1))
+                (and (< n m)
+                     (progn
+                       (if (> n 0) (setcdr (nthcdr (- (1- m) n) x) nil))
+                       x)))))
+       `(let* ((x ,x)
+               (m (length x)))
+          (and (< 1 m)
+               (progn
+                 (setcdr (nthcdr (- m 2) x) nil)
+                 x))))))
+
+  (define-compiler-macro last (&whole form x &optional n)
+    (if (and (fboundp 'last)
+            (subrp (symbol-function 'last)))
+       form
+      (if n
+         `(let* ((x ,x)
+                 (n ,n)
+                 (m 0)
+                 (p x))
+            (while (consp p)
+              (incf m)
+              (pop p))
+            (if (<= n 0)
+                p
+              (if (< n m)
+                  (nthcdr (- m n) x)
+                x)))
+       `(let ((x ,x))
+          (while (consp (cdr x))
+            (pop x))
+          x))))
+  )
+
+(provide 'gnus-clfns)
+
+;;; gnus-clfns.el ends here
index 995d6b4..6d25e44 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-cus.el --- customization commands for Gnus
 ;;
-;; Copyright (C) 1996,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1996,1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: news
@@ -52,6 +52,21 @@ if that value is non-nil."
   (setq major-mode 'gnus-custom-mode
        mode-name "Gnus Customize")
   (use-local-map widget-keymap)
+  ;; Emacs 21 stuff:
+  (when (and (facep 'custom-button-face)
+            (facep 'custom-button-pressed-face))
+    (set (make-local-variable 'widget-button-face)
+        'custom-button-face)
+    (set (make-local-variable 'widget-button-pressed-face)
+        'custom-button-pressed-face)
+    (set (make-local-variable 'widget-mouse-face)
+        'custom-button-pressed-face))
+  (when (and (boundp 'custom-raised-buttons)
+            (symbol-value 'custom-raised-buttons))
+    (set (make-local-variable 'widget-push-button-prefix) "")
+    (set (make-local-variable 'widget-push-button-suffix) "")
+    (set (make-local-variable 'widget-link-prefix) "")
+    (set (make-local-variable 'widget-link-suffix) ""))
   (gnus-run-hooks 'gnus-custom-mode-hook))
 
 ;;; Group Customization:
@@ -137,17 +152,17 @@ listserv has inserted `Reply-To' headers that point back to the
 listserv itself.  This is broken behavior.  So there!")
 
     (to-group (string :tag "To Group") "\
-All posts will be send to the specified group.")
+All posts will be sent to the specified group.")
 
     (gcc-self (choice :tag  "GCC"
                      :value t
-                     (const t)
+                     (const :tag "To current group" t)
                      (const none)
                      (string :format "%v" :hide-front-space t)) "\
 Specify default value for GCC header.
 
 If this symbol is present in the group parameter list and set to `t',
-new composed messages will be `Gcc''d to the current group. If it is
+new composed messages will be `Gcc''d to the current group.  If it is
 present and set to `none', no `Gcc:' header will be generated, if it
 is present and a string, this string will be inserted literally as a
 `gcc' header (this symbol takes precedence over any default `Gcc'
@@ -155,8 +170,10 @@ rules as described later).")
 
     (banner (choice :tag "Banner"
                    (const signature)
-                   string ) "\
-Banner to be removed from articles.")
+                   symbol
+                   regexp
+                   (const :tag "None" nil)) "\
+Regular expression matching banners to be removed from articles.")
 
     (auto-expire (const :tag "Automatic Expire" t) "\
 All articles that are read will be marked as expirable.")
@@ -176,10 +193,19 @@ Use with caution.")
 When to expire.
 
 Overrides any `nnmail-expiry-wait' and `nnmail-expiry-wait-function'
-when expiring expirable messages. The value can either be a number of
+when expiring expirable messages.  The value can either be a number of
 days (not necessarily an integer) or the symbols `never' or
 `immediate'.")
 
+    (expiry-target (choice :tag "Expiry Target"
+                           :value delete
+                           (const delete)
+                           (function :format "%v" nnmail-)
+                           string) "\
+Where expired messages end up.
+
+Overrides `nnmail-expiry-target', which see.")
+
     (score-file (file :tag "Score File") "\
 Make the specified file into the current score file.
 This means that all score commands you issue will end up in this file.")
@@ -236,7 +262,7 @@ default charset will be used instead.")
                           (number :tag "Group for displayed part" 0)
                           (symbol :tag "Face" 
                                   gnus-emphasis-highlight-words))))
-  "highlight regexps.
+     "highlight regexps.
 See gnus-emphasis-alist."))
   "Alist of valid group or topic parameters.
 
@@ -255,7 +281,9 @@ Each entry has the form (NAME TYPE DOC), where NAME is the parameter
 itself (a symbol), TYPE is the parameters type (a sexp widget), and
 DOC is a documentation string for the parameter.")
 
-(defconst gnus-extra-group-parameters nil
+(defconst gnus-extra-group-parameters
+  '((uidvalidity (string :tag "IMAP uidvalidity") "\
+Server-assigned value attached to IMAP groups, used to maintain consistency."))
   "Alist of group parameters that are not also topic parameters.
 
 Each entry has the form (NAME TYPE DOC), where NAME is the parameter
@@ -293,6 +321,7 @@ DOC is a documentation string for the parameter.")
     (setq gnus-custom-group group)
     (make-local-variable 'gnus-custom-topic)
     (setq gnus-custom-topic topic)
+    (buffer-disable-undo)
     (widget-insert "Customize the ")
     (if group
        (widget-create 'info-link
@@ -304,7 +333,7 @@ DOC is a documentation string for the parameter.")
                     :tag  "topic parameters"
                     "(gnus)Topic Parameters"))
     (widget-insert " for <")
-    (widget-insert (or group topic))
+    (widget-insert (gnus-group-decoded-name (or group topic)))
     (widget-insert "> and press ")
     (widget-create 'push-button
                   :tag "done"
@@ -322,7 +351,7 @@ DOC is a documentation string for the parameter.")
                               :tag "Parameters"
                               :format "%t:\n%h%v"
                               :doc "\
-These special paramerters are recognized by Gnus.
+These special parameters are recognized by Gnus.
 Check the [ ] for the parameters you want to apply to this group or
 to the groups in this topic, then edit the value to suit your taste."
                               ,@types)
@@ -342,10 +371,10 @@ like.  If you want to hear a beep when you enter a group, you could
 put something like `(dummy-variable (ding))' in the parameters of that
 group.  `dummy-variable' will be set to the result of the `(ding)'
 form, but who cares?"
-                                 (cons :format "%v" :value (nil .  nil)
-                                        (symbol :tag "Variable")
-                                        (sexp :tag
-                                              "Value")))
+                                 (list :format "%v" :value (nil nil)
+                                       (symbol :tag "Variable")
+                                       (sexp :tag
+                                             "Value")))
 
                         '(repeat :inline t
                                  :tag "Unknown entries"
@@ -363,6 +392,7 @@ form, but who cares?"
                           :value (gnus-info-method info))))
     (use-local-map widget-keymap)
     (widget-setup)
+    (buffer-enable-undo)
     (goto-char (point-min))))
 
 (defun gnus-group-customize-done (&rest ignore)
@@ -490,9 +520,9 @@ documentation string for the parameter.")
         (item `(const :format "" :value ,(downcase tag)))
         (match '(string :tag "Match"))
         (score '(choice :tag "Score"
-                       (const :tag "default" nil)
-                       (integer :format "%v"
-                                :hide-front-space t)))
+                        (const :tag "default" nil)
+                        (integer :format "%v"
+                                 :hide-front-space t)))
         (expire '(choice :tag "Expire"
                          (const :tag "off" nil)
                          (integer :format "%v"
@@ -563,9 +593,9 @@ each score entry has four elements:
         (item `(const :format "" :value ,(downcase tag)))
         (match '(integer :tag "Match"))
         (score '(choice :tag "Score"
-                       (const :tag "default" nil)
-                       (integer :format "%v"
-                                :hide-front-space t)))
+                        (const :tag "default" nil)
+                        (integer :format "%v"
+                                 :hide-front-space t)))
         (expire '(choice :tag "Expire"
                          (const :tag "off" nil)
                          (integer :format "%v"
@@ -600,9 +630,9 @@ each score entry has four elements:
         (item `(const :format "" :value ,(downcase tag)))
         (match '(string :tag "Match"))
         (score '(choice :tag "Score"
-                       (const :tag "default" nil)
-                       (integer :format "%v"
-                                :hide-front-space t)))
+                        (const :tag "default" nil)
+                        (integer :format "%v"
+                                 :hide-front-space t)))
         (expire '(choice :tag "Expire"
                          (const :tag "off" nil)
                          (integer :format "%v"
@@ -652,11 +682,11 @@ eh?")))
   (interactive (list gnus-current-score-file))
   (let ((scores (gnus-score-load file))
        (types (mapcar (lambda (entry)
-                `(group :format "%v%h\n"
-                        :doc ,(nth 2 entry)
-                        (const :format "" ,(nth 0 entry))
-                        ,(nth 1 entry)))
-              gnus-score-parameters)))
+                        `(group :format "%v%h\n"
+                                :doc ,(nth 2 entry)
+                                (const :format "" ,(nth 0 entry))
+                                ,(nth 1 entry)))
+                      gnus-score-parameters)))
     ;; Ready.
     (kill-buffer (gnus-get-buffer-create "*Gnus Customize*"))
     (switch-to-buffer (gnus-get-buffer-create "*Gnus Customize*"))
index 7c1fa49..d647928 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-demon.el --- daemonic Gnus behaviour
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;      Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -34,7 +36,7 @@
 (require 'nnmail)
 (require 'gnus-util)
 (eval-and-compile
-  (if (string-match "XEmacs" (emacs-version))
+  (if (featurep 'xemacs)
       (require 'itimer)
     (require 'timer)))
 
@@ -152,14 +154,14 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
            (nowParts (decode-time now))
            ;; obtain THEN as discrete components
            (thenParts (parse-time-string time))
-           (thenHour (elt thenParts 0))
+           (thenHour (elt thenParts 2))
            (thenMin (elt thenParts 1))
            ;; convert time as elements into number of seconds since EPOCH.
            (then (encode-time 0
                               thenMin
                               thenHour
                               ;; If THEN is earlier than NOW, make it
-                              ;; same time tomorrow. Doc for encode-time
+                              ;; same time tomorrow.  Doc for encode-time
                               ;; says that this is OK.
                               (+ (elt nowParts 3)
                                  (if (or (< thenHour (elt nowParts 2))
@@ -191,6 +193,10 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
     ;; sufficiently ripe.
     (let ((handlers gnus-demon-handler-state)
          (gnus-inhibit-demon t)
+         ;; Try to avoid dialog boxes, e.g. by Mailcrypt.
+         ;; Unfortunately, Emacs 20's `message-or-box...' doesn't
+         ;; obey `use-dialog-box'.
+         use-dialog-box (last-nonmenu-event 10)
          handler time idle)
       (while handlers
        (setq handler (pop handlers))
@@ -258,7 +264,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   "Add daemonic nntp server disconnection to Gnus.
 If no commands have gone out via nntp during the last five
 minutes, the connection is closed."
-  (gnus-demon-add-handler 'gnus-demon-close-connections 5 nil))
+  (gnus-demon-add-handler 'gnus-demon-nntp-close-connections 5 nil))
 
 (defun gnus-demon-nntp-close-connection ()
   (save-window-excursion
@@ -272,7 +278,8 @@ minutes, the connection is closed."
 (defun gnus-demon-scan-mail ()
   (save-window-excursion
     (let ((servers gnus-opened-servers)
-         server)
+         server
+         (nnmail-fetched-sources (list t)))
       (while (setq server (car (pop servers)))
        (and (gnus-check-backend-function 'request-scan (car server))
             (or (gnus-server-opened server)
index b0df871..849dc9b 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-draft.el --- draft message support for Semi-gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -69,8 +70,8 @@
   (interactive "P")
   (when (eq major-mode 'gnus-summary-mode)
     (when (set (make-local-variable 'gnus-draft-mode)
-                 (if (null arg) (not gnus-draft-mode)
-                   (> (prefix-numeric-value arg) 0)))
+              (if (null arg) (not gnus-draft-mode)
+                (> (prefix-numeric-value arg) 0)))
       ;; Set up the menu.
       (when (gnus-visual-p 'draft-menu 'menu)
        (gnus-draft-make-menu-bar))
 (defun gnus-draft-send-message (&optional n)
   "Send the current draft."
   (interactive "P")
-  (let ((articles (gnus-summary-work-articles n))
-       article)
+  (let* ((articles (gnus-summary-work-articles n))
+        (total (length articles))
+        article)
     (while (setq article (pop articles))
       (gnus-summary-remove-process-mark article)
       (unless (memq article gnus-newsgroup-unsendable)
-       (gnus-draft-send article gnus-newsgroup-name t)
+       (let ((message-sending-message 
+              (format "Sending message %d of %d..." 
+                      (- total (length articles)) total)))
+         (gnus-draft-send article gnus-newsgroup-name t))
        (gnus-summary-mark-article article gnus-canceled-mark)))))
 
 (defun gnus-draft-send (article &optional group interactive)
   "Send message ARTICLE."
-  (gnus-draft-setup-for-sending article (or group "nndraft:queue"))
   (let ((message-syntax-checks (if interactive nil
                                 'dont-check-for-anything-just-trust-me))
        (message-inhibit-body-encoding (or (not group) 
                                           message-inhibit-body-encoding))
        (message-send-hook (and group (not (equal group "nndraft:queue"))
                                message-send-hook))
+       (message-setup-hook (and group (not (equal group "nndraft:queue"))
+                                message-setup-hook))
        type method)
+    (gnus-draft-setup-for-sending article (or group "nndraft:queue"))
     ;; We read the meta-information that says how and where
     ;; this message is to be sent.
     (save-restriction
        (setq type (ignore-errors (read (current-buffer)))
              method (ignore-errors (read (current-buffer))))
        (message-remove-header gnus-agent-meta-information-header)))
+    ;; Let Agent restore any GCC lines and have message.el perform them.
+    (gnus-agent-restore-gcc)
     ;; Then we send it.  If we have no meta-information, we just send
     ;; it and let Message figure out how.
     (when (let ((mail-header-separator ""))
                        (cdr (assq 'unsend
                                   (gnus-info-marks
                                    (gnus-get-info "nndraft:queue"))))))
-          (n (length articles))
-          article i)
+          (total (length articles))
+          article)
       (while (setq article (pop articles))
-       (setq i (- n (length articles)))
-       (message "Sending message %d of %d." i n)
-       (if (memq article unsendable)
-           (message "Message %d of %d is unsendable." i n)
-         (gnus-draft-send article))))))
+       (unless (memq article unsendable)
+         (let ((message-sending-message
+                (format "Sending message %d of %d..."
+                        (- total (length articles)) total)))
+           (gnus-draft-send article)))))))
 
 ;;; Utility functions
 
       (erase-buffer)
       (if (not (gnus-request-restore-buffer article group))
          (error "Couldn't restore the article")
-       ;; Insert the separator.
        (funcall gnus-draft-decoding-function)
+       ;; Insert the separator.
        (goto-char (point-min))
        (search-forward "\n\n")
        (forward-char -1)
index 691381f..e148f45 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-dup.el --- suppression of duplicate articles in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -136,6 +137,8 @@ seen in the same session."
     (gnus-dup-open))
   (gnus-message 6 "Suppressing duplicates...")
   (let ((headers gnus-newsgroup-headers)
+       (auto (and gnus-newsgroup-auto-expire
+                  (memq gnus-duplicate-mark gnus-auto-expirable-marks)))
        number header)
     (while (setq header (pop headers))
       (when (and (intern-soft (mail-header-id header) gnus-dup-hashtb)
@@ -143,8 +146,10 @@ seen in the same session."
        (setq gnus-newsgroup-unreads
              (delq (setq number (mail-header-number header))
                    gnus-newsgroup-unreads))
-       (push (cons number gnus-duplicate-mark)
-             gnus-newsgroup-reads))))
+       (if (not auto)
+           (push (cons number gnus-duplicate-mark) gnus-newsgroup-reads)
+         (push number gnus-newsgroup-expirable)
+         (push (cons number gnus-expirable-mark) gnus-newsgroup-reads)))))
   (gnus-message 6 "Suppressing duplicates...done"))
 
 (defun gnus-dup-unsuppress-article (article)
index 09f2bb5..9fe7242 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-eform.el --- a mode for editing forms for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 84dff68..3a2fedc 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Tatsuya Ichikawa <t-ichi@niagara.shiojiri.ne.jp>
 
 ;;; Function aliases later to be redefined for XEmacs usage.
 
-(defvar gnus-xemacs (string-match "XEmacs\\|Lucid" emacs-version)
-  "Non-nil if running under XEmacs.")
-
 (defvar gnus-mouse-2 [mouse-2])
 (defvar gnus-down-mouse-3 [down-mouse-3])
 (defvar gnus-down-mouse-2 [down-mouse-2])
 (defvar gnus-widget-button-keymap nil)
 (defvar gnus-mode-line-modified
-  (if (or gnus-xemacs
+  (if (or (featurep 'xemacs)
          (< emacs-major-version 20))
       '("--**-" . "-----")
     '("**" "--")))
   (autoload 'gnus-xmas-redefine "gnus-xmas")
   (autoload 'appt-select-lowest-window "appt"))
 
-(or (fboundp 'mail-file-babyl-p)
-    (fset 'mail-file-babyl-p 'rmail-file-p))
+(if (featurep 'xemacs)
+    (autoload 'gnus-smiley-display "smiley")
+  (autoload 'gnus-smiley-display "smiley-ems")) ; override XEmacs version
+
+(defun gnus-kill-all-overlays ()
+  "Delete all overlays in the current buffer."
+  (let* ((overlayss (overlay-lists))
+        (buffer-read-only nil)
+        (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
+    (while overlays
+      (delete-overlay (pop overlays)))))
 
 ;;; Mule functions.
 
 (eval-and-compile
-  (if (string-match "XEmacs\\|Lucid" emacs-version)
-      nil
-
+  (if (featurep 'xemacs)
+      (gnus-xmas-define)
     (defvar gnus-mouse-face-prop 'mouse-face
-      "Property used for highlighting mouse regions."))
-
-  (cond
-   ((string-match "XEmacs\\|Lucid" emacs-version)
-    (gnus-xmas-define))
-
-   ((or (not (boundp 'emacs-minor-version))
-       (and (< emacs-major-version 20)
-            (< emacs-minor-version 30)))
-    ;; Remove the `intangible' prop.
-    (let ((props (and (boundp 'gnus-hidden-properties)
-                     gnus-hidden-properties)))
-      (while (and props (not (eq (car (cdr props)) 'intangible)))
-       (setq props (cdr props)))
-      (when props
-       (setcdr props (cdr (cdr (cdr props))))))
-    (unless (fboundp 'buffer-substring-no-properties)
-      (defun buffer-substring-no-properties (beg end)
-       (format "%s" (buffer-substring beg end)))))
-
-   ((boundp 'MULE)
-    (provide 'gnusutil))))
-
-(eval-and-compile
-  (cond
-   ((not window-system)
-    (defun gnus-dummy-func (&rest args))
-    (let ((funcs '(mouse-set-point set-face-foreground
-                                  set-face-background x-popup-menu)))
-      (while funcs
-       (unless (fboundp (car funcs))
-         (fset (car funcs) 'gnus-dummy-func))
-       (setq funcs (cdr funcs)))))))
+      "Property used for highlighting mouse regions.")))
 
 (eval-and-compile
   (let ((case-fold-search t))
@@ -99,8 +73,9 @@
                    (symbol-name system-type))
       (setq nnheader-file-name-translation-alist
            (append nnheader-file-name-translation-alist
-                   '((?: . ?_)
-                     (?+ . ?-))))))))
+                   (mapcar (lambda (c) (cons c ?_))
+                           '(?: ?* ?\" ?< ?> ??))
+                   '((?+ . ?-))))))))
 
 (defvar gnus-tmp-unread)
 (defvar gnus-tmp-replied)
 
 (defun gnus-ems-redefine ()
   (cond
-   ((string-match "XEmacs\\|Lucid" emacs-version)
+   ((featurep 'xemacs)
     (gnus-xmas-redefine))
 
    ((featurep 'mule)
     ;; Mule and new Emacs definitions
 
     ;; [Note] Now there are three kinds of mule implementations,
-    ;; original MULE, XEmacs/mule and beta version of Emacs including
-    ;; some mule features. Unfortunately these API are different. In
+    ;; original MULE, XEmacs/mule and Emacs 20+ including
+    ;; MULE features.  Unfortunately these API are different.  In
     ;; particular, Emacs (including original MULE) and XEmacs are
-    ;; quite different.
+    ;; quite different.  However, this version of Gnus doesn't support
+    ;; anything other than XEmacs 20+ and Emacs 20.3+.
+
     ;; Predicates to check are following:
     ;; (boundp 'MULE) is t only if MULE (original; anything older than
     ;;                     Mule 2.3) is running.
     ;; (featurep 'mule) is t when every mule variants are running.
 
-    ;; These implementations may be able to share between original
-    ;; MULE and beta version of new Emacs. In addition, it is able to
-    ;; detect XEmacs/mule by (featurep 'mule) and to check variable
-    ;; `emacs-version'. In this case, implementation for XEmacs/mule
-    ;; may be able to share between XEmacs and XEmacs/mule.
+    ;; It is possible to detect XEmacs/mule by (featurep 'mule) and
+    ;; checking `emacs-version'.  In this case, the implementation for
+    ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule.
 
     (defvar gnus-summary-display-table nil
       "Display table used in summary mode buffers.")
-    (fset 'gnus-summary-set-display-table (lambda ()))
+
+    (defalias 'gnus-summary-set-display-table (lambda ()))
 
     (if (fboundp 'truncate-string-to-width)
        (fset 'gnus-truncate-string 'truncate-string-to-width)
       (fset 'gnus-truncate-string 'truncate-string))
 
+    (when (boundp 'gnus-check-before-posting)
+      (setq gnus-check-before-posting
+           (delq 'long-lines
+                 (delq 'control-chars gnus-check-before-posting))))
+    ))
+  (when (featurep 'mule)
     (defun gnus-tilde-max-form (el max-width)
       "Return a form that limits EL to MAX-WIDTH."
       (let ((max (abs max-width)))
        (if (symbolp el)
-           `(if (> (string-width ,el) ,max)
-                ,(if (< max-width 0)
-                     `(gnus-truncate-string
-                       ,el (string-width ,el)
-                       (- (string-width ,el) ,max))
-                   `(gnus-truncate-string ,el ,max))
-              ,el)
-         `(let ((val (eval ,el)))
-            (if (> (string-width val) ,max)
-                ,(if (< max-width 0)
-                     `(gnus-truncate-string
-                       val (string-width val)
-                       (- (string-width val) ,max))
-                   `(gnus-truncate-string val ,max))
-              val)))))
+           (if (< max-width 0)
+               `(let ((width (string-width ,el)))
+                  (gnus-truncate-string ,el width (- width ,max)))
+             `(gnus-truncate-string ,el ,max))
+         (if (< max-width 0)
+             `(let* ((val (eval ,el))
+                     (width (string-width val)))
+                (gnus-truncate-string val width (- width ,max)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val ,max))))))
 
     (defun gnus-tilde-cut-form (el cut-width)
       "Return a form that cuts CUT-WIDTH off of EL."
       (let ((cut (abs cut-width)))
        (if (symbolp el)
-           `(if (> (string-width ,el) ,cut)
-                ,(if (< cut-width 0)
-                     `(gnus-truncate-string
-                       ,el (- (string-width ,el) ,cut))
-                   `(gnus-truncate-string
-                     ,el (- (string-width ,el) ,cut) ,cut))
-              ,el)
-         `(let ((val (eval ,el)))
-            (if (> (string-width val) ,cut)
-                ,(if (< cut-width 0)
-                     `(gnus-truncate-string
-                       val (- (string-width val) ,cut))
-                   `(gnus-truncate-string
-                     val (- (string-width val) ,cut) ,cut))
-              val)))))
-
-    (when (boundp 'gnus-check-before-posting)
-      (setq gnus-check-before-posting
-           (delq 'long-lines
-                 (delq 'control-chars gnus-check-before-posting))))
-
-    )))
+           (if (< cut-width 0)
+               `(gnus-truncate-string ,el (- (string-width ,el) ,cut))
+             `(gnus-truncate-string ,el (string-width ,el) ,cut))
+         (if (< cut-width 0)
+             `(let ((val (eval ,el)))
+                (gnus-truncate-string val (- (string-width val) ,cut)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val (string-width val) ,cut))))))
+    ))
 
 (defun gnus-region-active-p ()
   "Say whether the region is active."
        (boundp 'mark-active)
        mark-active))
 
-(defun gnus-add-minor-mode (mode name map)
-  (if (fboundp 'add-minor-mode)
-      (add-minor-mode mode name map)
+(if (fboundp 'add-minor-mode)
+    (defalias 'gnus-add-minor-mode 'add-minor-mode)
+  (defun gnus-add-minor-mode (mode name map &rest rest)
     (set (make-local-variable mode) t)
     (unless (assq mode minor-mode-alist)
       (push `(,mode ,name) minor-mode-alist))
        pixmap file height beg i)
     (save-excursion
       (switch-to-buffer (gnus-get-buffer-create gnus-group-buffer))
-      (let ((buffer-read-only nil))
+      (let ((buffer-read-only nil)
+           width height)
        (erase-buffer)
        (when (and dir
-                  (file-exists-p (setq file (concat dir "x-splash"))))
+                  (file-exists-p (setq file
+                                       (expand-file-name "x-splash" dir))))
          (with-temp-buffer
            (insert-file-contents-as-binary file)
            (goto-char (point-min))
            (ignore-errors
              (setq pixmap (read (current-buffer))))))
        (when pixmap
-         (unless (facep 'gnus-splash)
-           (make-face 'gnus-splash))
+         (make-face 'gnus-splash)
          (setq height (/ (car pixmap) (frame-char-height))
                width (/ (cadr pixmap) (frame-char-width)))
          (set-face-foreground 'gnus-splash "Brown")
          (insert-char ?\n (* (/ (window-height) 2 height) height))
          (setq i height)
          (while (> i 0)
-           (insert-char ?  (* (/ (window-width) 2 width) width))
+           (insert-char ?\  (* (/ (window-width) 2 width) width))
            (setq beg (point))
-           (insert-char ?  width)
+           (insert-char ?\  width)
            (set-text-properties beg (point) '(face gnus-splash))
-           (insert "\n")
+           (insert ?\n)
            (decf i))
          (goto-char (point-min))
          (sit-for 0))))))
 
+(defvar gnus-article-xface-ring-internal nil
+  "Cache for face data.")
+
+;; Worth customizing?
+(defvar gnus-article-xface-ring-size 6
+  "Length of the ring used for `gnus-article-xface-ring-internal'.")
+
+(defvar gnus-article-compface-xbm
+  (condition-case ()
+      (eq 0 (string-match "#define"
+                         (shell-command-to-string "uncompface -X")))
+    (error nil))
+  "Non-nil means the compface program supports the -X option.
+That produces XBM output.")
+
+(defun gnus-article-display-xface (beg end)
+  "Display an XFace header from between BEG and END in the current article.
+Requires support for images in your Emacs and the external programs
+`uncompface', and `icontopbm'.  On a GNU/Linux system these
+might be in packages with names like `compface' or `faces-xface' and
+`netpbm' or `libgr-progs', for instance.  See also
+`gnus-article-compface-xbm'.
+
+This function is for Emacs 21+.  See `gnus-xmas-article-display-xface'
+for XEmacs."
+  ;; It might be worth converting uncompface's output in Lisp.
+
+  (when (if (fboundp 'display-graphic-p)
+           (display-graphic-p))
+    (unless gnus-article-xface-ring-internal ; Only load ring when needed.
+      (setq gnus-article-xface-ring-internal
+           (make-ring gnus-article-xface-ring-size)))
+    (save-excursion
+      (let* ((cur (current-buffer))
+            (data (buffer-substring beg end))
+            (image (cdr-safe (assoc data (ring-elements
+                                          gnus-article-xface-ring-internal))))
+            default-enable-multibyte-characters)
+       (unless image
+         (with-temp-buffer
+           (insert data)
+           (and (eq 0 (apply #'call-process-region (point-min) (point-max)
+                             "uncompface"
+                             'delete '(t nil) nil
+                             (if gnus-article-compface-xbm
+                                 '("-X"))))
+                (if gnus-article-compface-xbm
+                    t
+                  (goto-char (point-min))
+                  (progn (insert "/* Width=48, Height=48 */\n") t)
+                  (eq 0 (call-process-region (point-min) (point-max)
+                                             "icontopbm"
+                                             'delete '(t nil))))
+                ;; Miles Bader says that faces don't look right as
+                ;; light on dark.
+                (if (eq 'dark (cdr-safe (assq 'background-mode
+                                              (frame-parameters))))
+                    (setq image (create-image (buffer-string)
+                                              (if gnus-article-compface-xbm
+                                                  'xbm
+                                                'pbm)
+                                              t
+                                              :ascent 'center
+                                              :foreground "black"
+                                              :background "white"))
+                  (setq image (create-image (buffer-string)
+                                            (if gnus-article-compface-xbm
+                                                'xbm
+                                              'pbm)
+                                            t
+                                            :ascent 'center)))))
+         (ring-insert gnus-article-xface-ring-internal (cons data image)))
+       (when image
+         (goto-char (point-min))
+         (re-search-forward "^From:" nil 'move)
+         (insert-image image))))))
+
 (defun-maybe assoc-ignore-case (key alist)
   "Like `assoc', but assumes KEY is a string and ignores case when comparing."
   (setq key (downcase key))
index 3263e60..f3d08b3 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-gl.el --- an interface to GroupLens for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Brad Miller <bmiller@cs.umn.edu>
 ;; Keywords: news, score
 This pseudonym is obtained during the registration process")
 
 (defvar grouplens-bbb-host "grouplens.cs.umn.edu"
-  "Host where the bbbd is running" )
+  "Host where the bbbd is running.")
 
 (defvar grouplens-bbb-port 9000
-  "Port where the bbbd is listening" )
+  "Port where the bbbd is listening.")
 
 (defvar grouplens-newsgroups
   '("comp.groupware" "comp.human-factors" "comp.lang.c++"
@@ -194,19 +196,19 @@ GroupLens scores can be combined with gnus scores in one of three ways.
 ;;;; Program global variables
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (defvar grouplens-bbb-token nil
-  "Current session token number")
+  "Current session token number.")
 
 (defvar grouplens-bbb-process nil
-  "Process Id of current bbbd network stream process")
+  "Process Id of current bbbd network stream process.")
 
 (defvar grouplens-bbb-buffer nil
-  "Buffer associated with the BBBD process")
+  "Buffer associated with the BBBD process.")
 
 (defvar grouplens-rating-alist nil
-  "Current set of  message-id rating pairs")
+  "Current set of  message-id rating pairs.")
 
 (defvar grouplens-current-hashtable nil
-  "A hashtable to hold predictions from the BBB")
+  "A hashtable to hold predictions from the BBB.")
 
 (defvar grouplens-current-group nil)
 
@@ -313,7 +315,7 @@ If this times out we give up and assume that something has died..." )
                                (concat "login " grouplens-pseudonym))
              (if (bbb-read-response bbb-process)
                  (setq grouplens-bbb-token (bbb-extract-token-number))
-             (gnus-message 3 "Error: GroupLens login failed")))))
+               (gnus-message 3 "Error: GroupLens login failed")))))
     (gnus-message 3 "Error: you must set a pseudonym"))
   grouplens-bbb-token)
 
@@ -407,7 +409,7 @@ recommend using both scores and grouplens predictions together."
                pred (bbb-get-pred))
          (push `(,mid ,pred nil s) resp)
          (gnus-sethash mid (list pred (bbb-get-confl) (bbb-get-confh))
-                     grouplens-current-hashtable)
+                       grouplens-current-hashtable)
          (forward-line 1)
          t)
         ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\)")
@@ -780,12 +782,12 @@ If prefix argument ALL is non-nil, all articles are marked as read."
 (unless gnus-grouplens-mode-map
   (setq gnus-grouplens-mode-map (make-keymap))
   (gnus-define-keys
-   gnus-grouplens-mode-map
-   "n" grouplens-next-unread-article
-   "r" bbb-summary-rate-article
-   "k" grouplens-score-thread
-   "c" grouplens-summary-catchup-and-exit
-   "," grouplens-best-unread-article))
+      gnus-grouplens-mode-map
+    "n" grouplens-next-unread-article
+    "r" bbb-summary-rate-article
+    "k" grouplens-score-thread
+    "c" grouplens-summary-catchup-and-exit
+    "," grouplens-best-unread-article))
 
 (defun gnus-grouplens-make-menu-bar ()
   (unless (boundp 'gnus-grouplens-menu)
index 17b58fe..bb81c1c 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-group.el --- group mode commands for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-start)
 (require 'nnmail)
@@ -35,6 +37,7 @@
 (require 'gnus-win)
 (require 'gnus-undo)
 (require 'time-date)
+(require 'gnus-ems)
 
 (defcustom gnus-group-archive-directory
   "*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
@@ -161,6 +164,7 @@ with some simple extensions.
 %n    Select from where (string)
 %z    A string that look like `<%s:%n>' if a foreign select method is used
 %d    The date the group was last entered.
+%E    Icon as defined by `gnus-group-icon-list'.
 %u    User defined specifier.  The next character in the format string should
       be a letter.  Gnus will call the function gnus-user-format-function-X,
       where X is the letter following %u.  The function will be passed the
@@ -331,7 +335,7 @@ variable."
     ((= unread 0) .
      gnus-group-mail-low-empty-face)
     (t .
-     gnus-group-mail-low-face))
+       gnus-group-mail-low-face))
   "*Controls the highlighting of group buffer lines.
 
 Below is a list of `Form'/`Face' pairs.  When deciding how a a
@@ -360,6 +364,65 @@ ticked: The number of ticked articles."
   :group 'gnus-group-visual
   :type 'character)
 
+(defgroup gnus-group-icons nil
+  "Add Icons to your group buffer.  "
+  :group 'gnus-group-visual)
+
+(defcustom gnus-group-icon-list
+  nil
+  "*Controls the insertion of icons into group buffer lines.
+
+Below is a list of `Form'/`File' pairs.  When deciding how a
+particular group line should be displayed, each form is evaluated.
+The icon from the file field after the first true form is used.  You
+can change how those group lines are displayed by editing the file
+field.  The File will either be found in the
+`gnus-group-glyph-directory' or by designating absolute path to the
+file.
+
+It is also possible to change and add form fields, but currently that
+requires an understanding of Lisp expressions.  Hopefully this will
+change in a future release.  For now, you can use the following
+variables in the Lisp expression:
+
+group: The name of the group.
+unread: The number of unread articles in the group.
+method: The select method used.
+mailp: Whether it's a mail group or not.
+newsp: Whether it's a news group or not
+level: The level of the group.
+score: The score of the group.
+ticked: The number of ticked articles."
+  :group 'gnus-group-icons
+  :type '(repeat (cons (sexp :tag "Form") file)))
+
+(defcustom gnus-group-name-charset-method-alist nil
+  "*Alist of method and the charset for group names.
+
+For example:
+    (((nntp \"news.com.cn\") . cn-gb-2312))
+"
+  :group 'gnus-charset
+  :type '(repeat (cons (sexp :tag "Method") (symbol :tag "Charset"))))
+
+(defcustom gnus-group-name-charset-group-alist nil
+  "*Alist of group regexp and the charset for group names.
+
+For example:
+    ((\"\\.com\\.cn:\" . cn-gb-2312))
+"
+  :group 'gnus-charset
+  :type '(repeat (cons (regexp :tag "Group") (symbol :tag "Charset"))))
+
+(defcustom gnus-group-jump-to-group-prompt nil
+  "Default prompt for `gnus-group-jump-to-group'.
+If non-nil, the value should be a string, e.g. \"nnml:\",
+in which case `gnus-group-jump-to-group' offers \"Group: nnml:\"
+in the minibuffer prompt."
+  :group 'gnus-group-various
+  :type '(choice (string :tag "Prompt string")
+                 (const :tag "Empty" nil)))
+
 ;;; Internal variables
 
 (defvar gnus-group-sort-alist-function 'gnus-group-sort-flat
@@ -404,6 +467,7 @@ ticked: The number of ticked articles."
     (?s gnus-tmp-news-server ?s)
     (?n gnus-tmp-news-method ?s)
     (?P gnus-group-indentation ?s)
+    (?E gnus-tmp-group-icon ?s)
     (?l gnus-tmp-grouplens ?s)
     (?z gnus-tmp-news-method-string ?s)
     (?m (gnus-group-new-mail gnus-tmp-group) ?c)
@@ -433,6 +497,9 @@ ticked: The number of ticked articles."
 
 (defvar gnus-group-list-mode nil)
 
+
+(defvar gnus-group-icon-cache nil)
+
 ;;;
 ;;; Gnus group mode
 ;;;
@@ -445,6 +512,7 @@ ticked: The number of ticked articles."
     "=" gnus-group-select-group
     "\r" gnus-group-select-group
     "\M-\r" gnus-group-quick-select-group
+    "\M- " gnus-group-visible-select-group
     [(meta control return)] gnus-group-select-group-ephemerally
     "j" gnus-group-jump-to-group
     "n" gnus-group-next-unread-group
@@ -572,7 +640,9 @@ ticked: The number of ticked articles."
     "d" gnus-group-description-apropos
     "m" gnus-group-list-matching
     "M" gnus-group-list-all-matching
-    "l" gnus-group-list-level)
+    "l" gnus-group-list-level
+    "c" gnus-group-list-cached
+    "?" gnus-group-list-dormant)
 
   (gnus-define-keys (gnus-group-score-map "W" gnus-group-mode-map)
     "f" gnus-score-flush-cache)
@@ -648,7 +718,9 @@ ticked: The number of ticked articles."
        ["Group and description apropos..." gnus-group-description-apropos t]
        ["List groups matching..." gnus-group-list-matching t]
        ["List all groups matching..." gnus-group-list-all-matching t]
-       ["List active file" gnus-group-list-active t])
+       ["List active file" gnus-group-list-active t]
+       ["List groups with cached" gnus-group-list-cached t]
+       ["List groups with dormant" gnus-group-list-dormant t])
        ("Sort"
        ["Default sort" gnus-group-sort-groups t]
        ["Sort by method" gnus-group-sort-groups-by-method t]
@@ -840,6 +912,29 @@ The following commands are available:
     (when gnus-carpal
       (gnus-carpal-setup-buffer 'group))))
 
+(defsubst gnus-group-name-charset (method group)
+  (if (null method)
+      (setq method (gnus-find-method-for-group group)))
+  (let ((item (assoc method gnus-group-name-charset-method-alist))
+       (alist gnus-group-name-charset-group-alist)
+       result)
+    (if item 
+       (cdr item)
+      (while (setq item (pop alist))
+       (if (string-match (car item) group)
+           (setq alist nil
+                 result (cdr item))))
+      result)))
+
+(defsubst gnus-group-name-decode (string charset)
+  (if (and string charset (featurep 'mule))
+      (decode-coding-string string charset)
+    string))
+
+(defun gnus-group-decoded-name (string)
+  (let ((charset (gnus-group-name-charset nil string)))
+    (gnus-group-name-decode string charset)))
+
 (defun gnus-group-list-groups (&optional level unread lowest)
   "List newsgroups with level LEVEL or lower that have unread articles.
 Default is all subscribed groups.
@@ -932,7 +1027,7 @@ If REGEXP, only list groups matching REGEXP."
              params (gnus-info-params info)
              newsrc (cdr newsrc)
              unread (car (gnus-gethash group gnus-newsrc-hashtb)))
-       (and unread                     ; This group might be bogus
+       (and unread                     ; This group might be unchecked
             (or (not regexp)
                 (string-match regexp group))
             (<= (setq clevel (gnus-info-level info)) level)
@@ -983,16 +1078,24 @@ If REGEXP, only list groups matching REGEXP."
          (when (string-match regexp group)
            (gnus-add-text-properties
             (point) (prog1 (1+ (point))
-                      (insert " " mark "     *: " group "\n"))
+                      (insert " " mark "     *: "
+                              (gnus-group-name-decode group 
+                                                      (gnus-group-name-charset
+                                                       nil group)) 
+                              "\n"))
             (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
                   'gnus-unread t
                   'gnus-level level))))
       ;; This loop is used when listing all groups.
       (while groups
+       (setq group (pop groups))
        (gnus-add-text-properties
         (point) (prog1 (1+ (point))
                   (insert " " mark "     *: "
-                          (setq group (pop groups)) "\n"))
+                          (gnus-group-name-decode group 
+                                                  (gnus-group-name-charset
+                                                   nil group)) 
+                          "\n"))
         (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
               'gnus-unread t
               'gnus-level level))))))
@@ -1044,7 +1147,11 @@ If REGEXP, only list groups matching REGEXP."
                                                    gnus-tmp-marked number
                                                    gnus-tmp-method)
   "Insert a group line in the group buffer."
-  (let* ((gnus-tmp-active (gnus-active gnus-tmp-group))
+  (let* ((gnus-tmp-method
+         (gnus-server-get-method gnus-tmp-group gnus-tmp-method)) 
+        (group-name-charset (gnus-group-name-charset gnus-tmp-method
+                                                     gnus-tmp-group))
+        (gnus-tmp-active (gnus-active gnus-tmp-group))
         (gnus-tmp-number-total
          (if gnus-tmp-active
              (1+ (- (cdr gnus-tmp-active) (car gnus-tmp-active)))
@@ -1061,10 +1168,14 @@ If REGEXP, only list groups matching REGEXP."
                ((<= gnus-tmp-level gnus-level-unsubscribed) ?U)
                ((= gnus-tmp-level gnus-level-zombie) ?Z)
                (t ?K)))
-        (gnus-tmp-qualified-group (gnus-group-real-name gnus-tmp-group))
+        (gnus-tmp-qualified-group 
+         (gnus-group-name-decode (gnus-group-real-name gnus-tmp-group)
+                                 group-name-charset))
         (gnus-tmp-newsgroup-description
          (if gnus-description-hashtb
-             (or (gnus-gethash gnus-tmp-group gnus-description-hashtb) "")
+             (or (gnus-group-name-decode
+                  (gnus-gethash gnus-tmp-group gnus-description-hashtb) 
+                  group-name-charset) "")
            ""))
         (gnus-tmp-moderated
          (if (and gnus-moderated-hashtb
@@ -1072,8 +1183,7 @@ If REGEXP, only list groups matching REGEXP."
              ?m ? ))
         (gnus-tmp-moderated-string
          (if (eq gnus-tmp-moderated ?m) "(m)" ""))
-        (gnus-tmp-method
-         (gnus-server-get-method gnus-tmp-group gnus-tmp-method)) ;
+        (gnus-tmp-group-icon "==&&==")
         (gnus-tmp-news-server (or (cadr gnus-tmp-method) ""))
         (gnus-tmp-news-method (or (car gnus-tmp-method) ""))
         (gnus-tmp-news-method-string
@@ -1107,10 +1217,10 @@ If REGEXP, only list groups matching REGEXP."
                  gnus-marked ,gnus-tmp-marked-mark
                  gnus-indentation ,gnus-group-indentation
                  gnus-level ,gnus-tmp-level))
+    (forward-line -1)
     (when (inline (gnus-visual-p 'group-highlight 'highlight))
-      (forward-line -1)
-      (gnus-run-hooks 'gnus-group-update-hook)
-      (forward-line))
+      (gnus-run-hooks 'gnus-group-update-hook))
+    (forward-line)
     ;; Allow XEmacs to remove front-sticky text properties.
     (gnus-group-remove-excess-properties)))
 
@@ -1329,6 +1439,12 @@ If FIRST-TOO, the current line is also eligible as a target."
 
 ;; Group marking.
 
+(defun gnus-group-mark-line-p ()
+  (save-excursion
+    (beginning-of-line)
+    (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2))
+    (eq (char-after) gnus-process-mark)))
+
 (defun gnus-group-mark-group (n &optional unmark no-advance)
   "Mark the current group."
   (interactive "p")
@@ -1395,10 +1511,10 @@ If UNMARK, remove the mark instead."
        (gnus-group-set-mark group))))
   (gnus-group-position-point))
 
-(defun gnus-group-remove-mark (group)
+(defun gnus-group-remove-mark (group &optional test-marked)
   "Remove the process mark from GROUP and move point there.
 Return nil if the group isn't displayed."
-  (if (gnus-group-goto-group group)
+  (if (gnus-group-goto-group group nil test-marked)
       (save-excursion
        (gnus-group-mark-group 1 'unmark t)
        t)
@@ -1477,7 +1593,7 @@ Take into consideration N (the prefix) and the list of marked groups."
     (eval
      `(defun gnus-group-iterate (arg ,function)
        "Iterate FUNCTION over all process/prefixed groups.
-FUNCTION will be called with the group name as the paremeter
+FUNCTION will be called with the group name as the parameter
 and with point over the group in question."
        (let ((,groups (gnus-group-process-prefix arg))
              (,window (selected-window))
@@ -1579,7 +1695,7 @@ be permanent."
 (defun gnus-fetch-group (group)
   "Start Gnus if necessary and enter GROUP.
 Returns whether the fetching was successful or not."
-  (interactive "sGroup name: ")
+  (interactive (list (completing-read "Group name: " gnus-active-hashtb)))
   (unless (get-buffer gnus-group-buffer)
     (gnus-no-server))
   (gnus-group-read-group nil nil group))
@@ -1645,7 +1761,9 @@ Return the name of the group if selection was successful."
          (when (gnus-group-read-group t t group select-articles)
            group)
        ;;(error nil)
-       (quit nil)))))
+       (quit
+        (message "Quit reading the ephemeral group")
+        nil)))))
 
 (defun gnus-group-jump-to-group (group)
   "Jump to newsgroup GROUP."
@@ -1653,7 +1771,7 @@ Return the name of the group if selection was successful."
    (list (completing-read
          "Group: " gnus-active-hashtb nil
          (gnus-read-active-file-p)
-         nil
+         gnus-group-jump-to-group-prompt
          'gnus-group-history)))
 
   (when (equal group "")
@@ -1668,41 +1786,56 @@ Return the name of the group if selection was successful."
   ;; Adjust cursor point.
   (gnus-group-position-point))
 
-(defun gnus-group-goto-group (group &optional far)
+(defun gnus-group-goto-group (group &optional far test-marked)
   "Goto to newsgroup GROUP.
-If FAR, it is likely that the group is not on the current line."
+If FAR, it is likely that the group is not on the current line.
+If TEST-MARKED, the line must be marked."
   (when group
-    (if far
-       (gnus-goto-char
-        (text-property-any
-         (point-min) (point-max)
-         'gnus-group (gnus-intern-safe group gnus-active-hashtb)))
-      (beginning-of-line)
-      (cond
-       ;; It's quite likely that we are on the right line, so
-       ;; we check the current line first.
-       ((eq (get-text-property (point) 'gnus-group)
-           (gnus-intern-safe group gnus-active-hashtb))
-       (point))
-       ;; Previous and next line are also likely, so we check them as well.
-       ((save-excursion
-         (forward-line -1)
-         (eq (get-text-property (point) 'gnus-group)
-             (gnus-intern-safe group gnus-active-hashtb)))
-       (forward-line -1)
-       (point))
-       ((save-excursion
-         (forward-line 1)
-         (eq (get-text-property (point) 'gnus-group)
-             (gnus-intern-safe group gnus-active-hashtb)))
-       (forward-line 1)
-       (point))
-       (t
-       ;; Search through the entire buffer.
-       (gnus-goto-char
-        (text-property-any
-         (point-min) (point-max)
-         'gnus-group (gnus-intern-safe group gnus-active-hashtb))))))))
+    (beginning-of-line)
+    (cond
+     ;; It's quite likely that we are on the right line, so
+     ;; we check the current line first.
+     ((and (not far)
+          (eq (get-text-property (point) 'gnus-group)
+              (gnus-intern-safe group gnus-active-hashtb))
+          (or (not test-marked) (gnus-group-mark-line-p)))
+      (point))
+     ;; Previous and next line are also likely, so we check them as well.
+     ((and (not far)
+          (save-excursion
+            (forward-line -1)
+            (and (eq (get-text-property (point) 'gnus-group)
+                     (gnus-intern-safe group gnus-active-hashtb))
+                 (or (not test-marked) (gnus-group-mark-line-p)))))
+      (forward-line -1)
+      (point))
+     ((and (not far)
+          (save-excursion
+            (forward-line 1)
+            (and (eq (get-text-property (point) 'gnus-group)
+                     (gnus-intern-safe group gnus-active-hashtb))
+                 (or (not test-marked) (gnus-group-mark-line-p)))))
+      (forward-line 1)
+      (point))
+     (test-marked
+      (goto-char (point-min))
+      (let (found)
+       (while (and (not found) 
+                   (gnus-goto-char
+                    (text-property-any
+                     (point) (point-max)
+                     'gnus-group 
+                     (gnus-intern-safe group gnus-active-hashtb))))
+         (if (gnus-group-mark-line-p)
+             (setq found t)
+           (forward-line 1)))
+       found))
+     (t
+      ;; Search through the entire buffer.
+      (gnus-goto-char
+       (text-property-any
+       (point-min) (point-max)
+       'gnus-group (gnus-intern-safe group gnus-active-hashtb)))))))
 
 (defun gnus-group-next-group (n &optional silent)
   "Go to next N'th newsgroup.
@@ -1858,8 +1991,20 @@ ADDRESS."
       (gnus-request-create-group nname nil args))
     t))
 
-(defun gnus-group-delete-group (group &optional force)
-  "Delete the current group.  Only meaningful with mail groups.
+(defun gnus-group-delete-groups (&optional arg)
+  "Delete the current group.  Only meaningful with editable groups."
+  (interactive "P")
+  (let ((n (length (gnus-group-process-prefix arg))))
+    (when (gnus-yes-or-no-p
+          (if (= n 1)
+              "Delete this 1 group? "
+            (format "Delete these %d groups? " n)))
+      (gnus-group-iterate arg
+       (lambda (group)
+         (gnus-group-delete-group group nil t))))))
+
+(defun gnus-group-delete-group (group &optional force no-prompt)
+  "Delete the current group.  Only meaningful with editable groups.
 If FORCE (the prefix) is non-nil, all the articles in the group will
 be deleted.  This is \"deleted\" as in \"removed forever from the face
 of the Earth\".         There is no undo.  The user will be prompted before
@@ -1872,10 +2017,11 @@ doing the deletion."
   (unless (gnus-check-backend-function 'request-delete-group group)
     (error "This backend does not support group deletion"))
   (prog1
-      (if (not (gnus-yes-or-no-p
-               (format
-                "Do you really want to delete %s%s? "
-                group (if force " and all its contents" ""))))
+      (if (and (not no-prompt)
+              (not (gnus-yes-or-no-p
+                    (format
+                     "Do you really want to delete %s%s? "
+                     group (if force " and all its contents" "")))))
          ()                            ; Whew!
        (gnus-message 6 "Deleting group %s..." group)
        (if (not (gnus-request-delete-group group force))
@@ -1920,10 +2066,12 @@ and NEW-NAME will be prompted for."
 
   (gnus-message 6 "Renaming group %s to %s..." group new-name)
   (prog1
-      (if (not (gnus-request-rename-group group new-name))
+      (if (progn
+           (gnus-group-goto-group group)
+           (not (when (< (gnus-group-group-level) gnus-level-zombie)
+                  (gnus-request-rename-group group new-name))))
          (gnus-error 3 "Couldn't rename group %s to %s" group new-name)
        ;; We rename the group internally by killing it...
-       (gnus-group-goto-group group)
        (gnus-group-kill-group)
        ;; ... changing its name ...
        (setcar (cdar gnus-list-of-killed-groups) new-name)
@@ -1962,7 +2110,7 @@ and NEW-NAME will be prompted for."
        ((eq part 'method) "select method")
        ((eq part 'params) "group parameters")
        (t "group info"))
-      group)
+      (gnus-group-decoded-name group))
      `(lambda (form)
        (gnus-group-edit-group-done ',part ,group form)))))
 
@@ -2145,6 +2293,30 @@ If SOLID (the prefix), create a solid group."
                       (nnwarchive-login ,login))))
     (gnus-group-make-group group method)))
 
+(defvar nnshimbun-type-definition)
+(defvar gnus-group-shimbun-server-history nil)
+
+(defun gnus-group-make-shimbun-group ()
+  "Create a nnshimbun group."
+  (interactive)
+  (require 'nnshimbun)
+  (let* ((minibuffer-setup-hook (append minibuffer-setup-hook
+                                       '(beginning-of-line)))
+        (server (completing-read "Shimbun address: "
+                                 nnshimbun-type-definition nil t
+                                 (or (car gnus-group-shimbun-server-history)
+                                     (caar nnshimbun-type-definition))
+                                 'gnus-group-shimbun-server-history))
+        (group (completing-read
+                "Group name: "
+                (mapcar
+                 'list
+                 (cdr (assq 'groups
+                            (cdr (assoc server nnshimbun-type-definition)))))
+                nil t nil))
+        (nnshimbun-pre-fetch-article nil))
+    (gnus-group-make-group group (list 'nnshimbun server))))
+
 (defun gnus-group-make-archive-group (&optional all)
   "Create the (ding) Gnus archive group of the most recent articles.
 Given a prefix, create a full group."
@@ -2178,14 +2350,14 @@ mail messages or news articles in files that have numeric names."
     (while (or (not group) (gnus-gethash group gnus-newsrc-hashtb))
       (setq group
            (gnus-group-prefixed-name
-            (concat (file-name-as-directory (directory-file-name dir))
-                    ext)
+            (expand-file-name ext dir)
             '(nndir "")))
       (setq ext (format "<%d>" (setq i (1+ i)))))
     (gnus-group-make-group
      (gnus-group-real-name group)
      (list 'nndir (gnus-group-real-name group) (list 'nndir-directory dir)))))
 
+(eval-when-compile (defvar nnkiboze-score-file))
 (defun gnus-group-make-kiboze-group (group address scores)
   "Create an nnkiboze group.
 The user will be prompted for a name, a regexp to match groups, and
@@ -2203,15 +2375,20 @@ score file entries for articles to include in the group."
                                          "Match on header: " headers nil t))))
        (setq regexps nil)
        (while (not (equal "" (setq regexp (read-string
-                                           (format "Match on %s (string): "
+                                           (format "Match on %s (regexp): "
                                                    header)))))
          (push (list regexp nil nil 'r) regexps))
        (push (cons header regexps) scores))
       scores)))
   (gnus-group-make-group group "nnkiboze" address)
-  (with-temp-file (gnus-score-file-name (concat "nnkiboze:" group))
-    (let (emacs-lisp-mode-hook)
-      (pp scores (current-buffer)))))
+  (let* ((nnkiboze-current-group group)
+        (score-file (car (nnkiboze-score-file "")))
+        (score-dir (file-name-directory score-file)))
+    (unless (file-exists-p score-dir)
+      (make-directory score-dir))
+    (with-temp-file score-file
+      (let (emacs-lisp-mode-hook)
+       (pp scores (current-buffer))))))
 
 (defun gnus-group-add-to-virtual (n vgroup)
   "Add the current group to a virtual group."
@@ -2290,30 +2467,31 @@ score file entries for articles to include in the group."
       (error "Killed group; can't be edited"))
     (unless (eq (car (setq method (gnus-find-method-for-group group))) 'nnimap)
       (error "%s is not an nnimap group" group))
-    (gnus-edit-form (setq acl (nnimap-acl-get mailbox (cadr method)))
-                   (format "Editing the access control list for `%s'.
+    (unless (setq acl (nnimap-acl-get mailbox (cadr method)))
+      (error "Server does not support ACL's"))
+    (gnus-edit-form acl (format "Editing the access control list for `%s'.
 
    An access control list is a list of (identifier . rights) elements.
 
-   The identifier string specifies the corresponding user. The
+   The identifier string specifies the corresponding user.  The
    identifier \"anyone\" is reserved to refer to the universal identity.
 
    Rights is a string listing a (possibly empty) set of alphanumeric
    characters, each character listing a set of operations which is being
-   controlled. Letters are reserved for ``standard'' rights, listed
+   controlled.  Letters are reserved for ``standard'' rights, listed
    below.  Digits are reserved for implementation or site defined rights.
 
    l - lookup (mailbox is visible to LIST/LSUB commands)
    r - read (SELECT the mailbox, perform CHECK, FETCH, PARTIAL,
        SEARCH, COPY from mailbox)
-   s - keep seen/unseen information across sessions (STORE SEEN flag)
-   w - write (STORE flags other than SEEN and DELETED)
+   s - keep seen/unseen information across sessions (STORE \\SEEN flag)
+   w - write (STORE flags other than \\SEEN and \\DELETED)
    i - insert (perform APPEND, COPY into mailbox)
    p - post (send mail to submission address for mailbox,
        not enforced by IMAP4 itself)
-   c - create (CREATE new sub-mailboxes in any implementation-defined
-       hierarchy)
-   d - delete (STORE DELETED flag, perform EXPUNGE)
+   c - create and delete mailbox (CREATE new sub-mailboxes in any
+       implementation-defined hierarchy, RENAME or DELETE mailbox)
+   d - delete messages (STORE \\DELETED flag, perform EXPUNGE)
    a - administer (perform SETACL)" group)
                    `(lambda (form)
                       (nnimap-acl-edit
@@ -2542,7 +2720,7 @@ sort in reverse order."
 ;; Group catching up.
 
 (defun gnus-group-catchup-current (&optional n all)
-  "Mark all articles not marked as unread in current newsgroup as read.
+  "Mark all unread articles in the current newsgroup as read.
 If prefix argument N is numeric, the next N newsgroups will be
 caught up.  If ALL is non-nil, marked articles will also be marked as
 read.  Cross references (Xref: header) of articles are ignored.
@@ -2572,8 +2750,7 @@ up is returned."
          (when (eq 'nnvirtual (car method))
            (nnvirtual-catchup-group
             (gnus-group-real-name group) (nth 1 method) all)))
-       (if (>= (gnus-info-level (gnus-get-info group))
-               gnus-level-zombie)
+       (if (>= (gnus-group-level group) gnus-level-zombie)
            (gnus-message 2 "Dead groups can't be caught up")
          (if (prog1
                  (gnus-group-goto-group group)
@@ -2596,6 +2773,8 @@ The return value is the number of articles that were marked as read,
 or nil if no action could be taken."
   (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
         (num (car entry)))
+    ;; Remove entries for this group.
+    (nnmail-purge-split-history (gnus-group-real-name group))
     ;; Do the updating only if the newsgroup isn't killed.
     (if (not (numberp (car entry)))
        (gnus-message 1 "Can't catch up %s; non-active group" group)
@@ -2639,8 +2818,12 @@ or nil if no action could be taken."
           (expirable (if (gnus-group-total-expirable-p group)
                          (cons nil (gnus-list-of-read-articles group))
                        (assq 'expire (gnus-info-marks info))))
-          (expiry-wait (gnus-group-find-parameter group 'expiry-wait)))
+          (expiry-wait (gnus-group-find-parameter group 'expiry-wait))
+          (nnmail-expiry-target
+           (or (gnus-group-find-parameter group 'expiry-target)
+               nnmail-expiry-target)))
       (when expirable
+       (gnus-check-group group)
        (setcdr
         expirable
         (gnus-compress-sequence
@@ -2655,7 +2838,9 @@ or nil if no action could be taken."
            (gnus-request-expire-articles
             (gnus-uncompress-sequence (cdr expirable)) group))))
        (gnus-close-group group))
-      (gnus-message 6 "Expiring articles in %s...done" group))))
+      (gnus-message 6 "Expiring articles in %s...done" group)
+      ;; Return the list of un-expired articles.
+      (cdr expirable))))
 
 (defun gnus-group-expire-all-groups ()
   "Expire all expirable articles in all newsgroups."
@@ -2972,7 +3157,7 @@ entail asking the server for the groups."
   ;; First we make sure that we have really read the active file.
   (unless (gnus-read-active-file-p)
     (let ((gnus-read-active-file t)
-         (gnus-agent nil)) ; Trick the agent into ignoring the active file.
+         (gnus-agent nil))             ; Trick the agent into ignoring the active file.
       (gnus-read-active-file)))
   ;; Find all groups and sort them.
   (let ((groups
@@ -2990,10 +3175,14 @@ entail asking the server for the groups."
        group)
     (erase-buffer)
     (while groups
+      (setq group (pop groups))
       (gnus-add-text-properties
        (point) (prog1 (1+ (point))
                 (insert "       *: "
-                        (setq group (pop groups)) "\n"))
+                        (gnus-group-name-decode group 
+                                                (gnus-group-name-charset
+                                                 nil group))
+                        "\n"))
        (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
             'gnus-unread t
             'gnus-level (inline (gnus-group-level group)))))
@@ -3046,7 +3235,10 @@ re-scanning.  If ARG is non-nil and not a number, this will force
        (gnus-get-unread-articles arg)))
     (gnus-run-hooks 'gnus-after-getting-new-news-hook)
     (gnus-group-list-groups (and (numberp arg)
-                                (max (car gnus-group-list-mode) arg)))))
+                                (max (car gnus-group-list-mode) arg))))
+  ;; Update modeline.
+  (when (and gnus-agent (not (interactive-p)))
+    (gnus-agent-toggle-plugged gnus-plugged)))
 
 (defun gnus-group-get-new-news-this-group (&optional n dont-scan)
   "Check for newly arrived news in the current group (and the N-1 next groups).
@@ -3057,7 +3249,12 @@ If N is negative, this group and the N-1 previous groups will be checked."
         (ret (if (numberp n) (- n (length groups)) 0))
         (beg (unless n
                (point)))
-        group method)
+        group method
+        (gnus-inhibit-demon t)
+        ;; Binding this variable will inhibit multiple fetchings
+        ;; of the same mail source.
+        (nnmail-fetched-sources (list t)))
+    (gnus-run-hooks 'gnus-get-new-news-hook)
     (while (setq group (pop groups))
       (gnus-group-remove-mark group)
       ;; Bypass any previous denials from the server.
@@ -3093,7 +3290,7 @@ to use."
     (when current-prefix-arg
       (completing-read
        "Faq dir: " (and (listp gnus-group-faq-directory)
-                       (mapcar (lambda (file) (list file))
+                       (mapcar #'list
                                gnus-group-faq-directory))))))
   (unless group
     (error "No group name given"))
@@ -3104,7 +3301,7 @@ to use."
     (while (and (not found)
                (setq dir (pop dirs)))
       (let ((name (gnus-group-real-name group)))
-       (setq file (concat (file-name-as-directory dir) name)))
+       (setq file (expand-file-name name dir)))
       (if (not (file-exists-p file))
          (gnus-message 1 "No such file: %s" file)
        (let ((enable-local-variables nil))
@@ -3147,8 +3344,12 @@ to use."
     (mapatoms
      (lambda (group)
        (setq b (point))
-       (insert (format "      *: %-20s %s\n" (symbol-name group)
-                      (symbol-value group)))
+       (let ((charset (gnus-group-name-charset nil (symbol-name group))))
+        (insert (format "      *: %-20s %s\n" 
+                        (gnus-group-name-decode
+                         (symbol-name group) charset)
+                        (gnus-group-name-decode
+                         (symbol-value group) charset))))
        (gnus-add-text-properties
        b (1+ b) (list 'gnus-group group
                       'gnus-unread t 'gnus-marked nil
@@ -3190,11 +3391,13 @@ to use."
        (while groups
          ;; Groups may be entered twice into the list of groups.
          (when (not (string= (car groups) prev))
-           (insert (setq prev (car groups)) "\n")
-           (when (and gnus-description-hashtb
-                      (setq des (gnus-gethash (car groups)
-                                              gnus-description-hashtb)))
-             (insert "  " des "\n")))
+           (setq prev (car groups))
+           (let ((charset (gnus-group-name-charset nil prev)))
+             (insert (gnus-group-name-decode prev charset) "\n")
+             (when (and gnus-description-hashtb
+                        (setq des (gnus-gethash (car groups)
+                                                gnus-description-hashtb)))
+               (insert "  " (gnus-group-name-decode des charset) "\n"))))
          (setq groups (cdr groups)))
        (goto-char (point-min))))
     (pop-to-buffer obuf)))
@@ -3457,26 +3660,26 @@ and the second element is the address."
 
 (defun gnus-add-marked-articles (group type articles &optional info force)
   ;; Add ARTICLES of TYPE to the info of GROUP.
-  ;; If INFO is non-nil, use that info.         If FORCE is non-nil, don't
+  ;; If INFO is non-nil, use that info.  If FORCE is non-nil, don't
   ;; add, but replace marked articles of TYPE with ARTICLES.
   (let ((info (or info (gnus-get-info group)))
        marked m)
     (or (not info)
        (and (not (setq marked (nthcdr 3 info)))
             (or (null articles)
-                (setcdr (nthcdr 2 info)
-                        (list (list (cons type (gnus-compress-sequence
-                                                articles t)))))))
+                (setcdr (nthcdr 2 info)
+                        (list (list (cons type (gnus-compress-sequence
+                                                articles t)))))))
        (and (not (setq m (assq type (car marked))))
             (or (null articles)
-                (setcar marked
-                        (cons (cons type (gnus-compress-sequence articles t) )
-                              (car marked)))))
+                (setcar marked
+                        (cons (cons type (gnus-compress-sequence articles t) )
+                              (car marked)))))
        (if force
            (if (null articles)
-               (setcar (nthcdr 3 info)
-                       (gnus-delete-alist type (car marked)))
-             (setcdr m (gnus-compress-sequence articles t)))
+               (setcar (nthcdr 3 info)
+                       (gnus-delete-alist type (car marked)))
+             (setcdr m (gnus-compress-sequence articles t)))
          (setcdr m (gnus-compress-sequence
                     (sort (nconc (gnus-uncompress-range (cdr m))
                                  (copy-sequence articles)) '<) t))))))
@@ -3501,7 +3704,7 @@ or `gnus-group-catchup-group-hook'."
 (defun gnus-group-timestamp-delta (group)
   "Return the offset in seconds from the timestamp for GROUP to the current time, as a floating point number."
   (let* ((time (or (gnus-group-timestamp group)
-                 (list 0 0)))
+                  (list 0 0)))
          (delta (subtract-time (current-time) time)))
     (+ (* (nth 0 delta) 65536.0)
        (nth 1 delta))))
@@ -3513,6 +3716,118 @@ or `gnus-group-catchup-group-hook'."
        ""
       (gnus-time-iso8601 time))))
 
+(defun gnus-group-prepare-flat-list-dead-predicate 
+  (groups level mark predicate)
+  (let (group)
+    (if predicate
+       ;; This loop is used when listing groups that match some
+       ;; regexp.
+       (while (setq group (pop groups))
+         (when (funcall predicate group)
+           (gnus-add-text-properties
+            (point) (prog1 (1+ (point))
+                      (insert " " mark "     *: " 
+                              (gnus-group-name-decode group 
+                                                      (gnus-group-name-charset
+                                                       nil group))
+                              "\n"))
+            (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
+                  'gnus-unread t
+                  'gnus-level level)))))))
+
+(defun gnus-group-prepare-flat-predicate (level predicate &optional lowest
+                                               dead-predicate)
+  "List all newsgroups with unread articles of level LEVEL or lower.
+If LOWEST is non-nil, list all newsgroups of level LOWEST or higher.
+If PREDICATE, only list groups which PREDICATE returns non-nil.
+If DEAD-PREDICATE, list dead groups which DEAD-PREDICATE returns non-nil."
+  (set-buffer gnus-group-buffer)
+  (let ((buffer-read-only nil)
+       (newsrc (cdr gnus-newsrc-alist))
+       (lowest (or lowest 1))
+       info clevel unread group params)
+    (erase-buffer)
+    ;; List living groups.
+    (while newsrc
+      (setq info (car newsrc)
+           group (gnus-info-group info)
+           params (gnus-info-params info)
+           newsrc (cdr newsrc)
+           unread (car (gnus-gethash group gnus-newsrc-hashtb)))
+      (and unread                      ; This group might be unchecked
+          (funcall predicate info)
+          (<= (setq clevel (gnus-info-level info)) level)
+          (>= clevel lowest)
+          (gnus-group-insert-group-line
+           group (gnus-info-level info)
+           (gnus-info-marks info) unread (gnus-info-method info))))
+
+    ;; List dead groups.
+    (and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie)
+        (gnus-group-prepare-flat-list-dead-predicate
+         (setq gnus-zombie-list (sort gnus-zombie-list 'string<))
+         gnus-level-zombie ?Z
+         dead-predicate))
+    (and (>= level gnus-level-killed) (<= lowest gnus-level-killed)
+        (gnus-group-prepare-flat-list-dead-predicate
+         (setq gnus-killed-list (sort gnus-killed-list 'string<))
+         gnus-level-killed ?K dead-predicate))
+
+    (gnus-group-set-mode-line)
+    (setq gnus-group-list-mode (cons level t))
+    (gnus-run-hooks 'gnus-group-prepare-hook)
+    t))
+
+(defun gnus-group-list-cached (level &optional lowest)
+  "List all groups with cached articles.
+If the prefix LEVEL is non-nil, it should be a number that says which
+level to cut off listing groups.
+If LOWEST, don't list groups with level lower than LOWEST.
+
+This command may read the active file."
+  (interactive "P")
+  (when level
+    (setq level (prefix-numeric-value level)))
+  (when (or (not level) (>= level gnus-level-zombie))
+    (gnus-cache-open))
+  (gnus-group-prepare-flat-predicate (or level gnus-level-subscribed)
+                               #'(lambda (info)
+                                   (let ((marks (gnus-info-marks info)))
+                                     (assq 'cache marks)))
+                               lowest
+                               #'(lambda (group)
+                                   (or (gnus-gethash group 
+                                                     gnus-cache-active-hashtb)
+                                       ;; Cache active file might use "." 
+                                       ;; instead of ":".
+                                       (gnus-gethash 
+                                        (mapconcat 'identity
+                                                   (split-string group ":")
+                                                   ".")
+                                        gnus-cache-active-hashtb))))
+  (goto-char (point-min))
+  (gnus-group-position-point))
+
+(defun gnus-group-list-dormant (level &optional lowest)
+  "List all groups with dormant articles.
+If the prefix LEVEL is non-nil, it should be a number that says which
+level to cut off listing groups.
+If LOWEST, don't list groups with level lower than LOWEST.
+
+This command may read the active file."
+  (interactive "P")
+  (when level
+    (setq level (prefix-numeric-value level)))
+  (when (or (not level) (>= level gnus-level-zombie))
+    (gnus-cache-open))
+  (gnus-group-prepare-flat-predicate (or level gnus-level-subscribed)
+                               #'(lambda (info)
+                                   (let ((marks (gnus-info-marks info)))
+                                     (assq 'dormant marks)))
+                               lowest)
+  (goto-char (point-min))
+  (gnus-group-position-point))
+
 (provide 'gnus-group)
 
 ;;; gnus-group.el ends here
index df5fdc8..abd5737 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-int.el --- backend interface functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -70,8 +71,7 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
                           (list 'nnmh-directory
                                 (file-name-as-directory
                                  (expand-file-name
-                                  (concat "~/" (substring
-                                                gnus-nntp-server 1)))))
+                                  (substring gnus-nntp-server 1) "~/")))
                           (list 'nnmh-get-new-mail nil)))
                    (t
                     (list 'nntp gnus-nntp-server)))))
@@ -451,13 +451,14 @@ If BUFFER, insert the article in that group."
 (defun gnus-request-scan (group gnus-command-method)
   "Request a SCAN being performed in GROUP from GNUS-COMMAND-METHOD.
 If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
-  (when gnus-plugged
-    (let ((gnus-command-method
-          (if group (gnus-find-method-for-group group) gnus-command-method))
-         (gnus-inhibit-demon t))
-      (funcall (gnus-get-function gnus-command-method 'request-scan)
-              (and group (gnus-group-real-name group))
-              (nth 1 gnus-command-method)))))
+  (let ((gnus-command-method
+        (if group (gnus-find-method-for-group group) gnus-command-method))
+       (gnus-inhibit-demon t)
+       (mail-source-plugged gnus-plugged))
+    (if (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
+       (funcall (gnus-get-function gnus-command-method 'request-scan)
+                (and group (gnus-group-real-name group))
+                (nth 1 gnus-command-method)))))
 
 (defsubst gnus-request-update-info (info gnus-command-method)
   "Request that GNUS-COMMAND-METHOD update INFO."
index 1d04718..4372825 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-kill.el --- kill commands for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -27,6 +28,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-art)
 (require 'gnus-range)
@@ -48,7 +50,8 @@
   :type 'boolean)
 
 (defcustom gnus-winconf-kill-file nil
-  "What does this do, Lars?"
+  "What does this do, Lars?
+I don't know, Per."
   :group 'gnus-score-kill
   :type 'sexp)
 
@@ -520,7 +523,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
          (if (listp kill-list)
              ;; It is a list.
              (if (not (consp (cdr kill-list)))
-                 ;; It's on the form (regexp . date).
+                 ;; It's of the form (regexp . date).
                  (if (zerop (gnus-execute field (car kill-list)
                                           command nil (not all)))
                      (when (> (days-between date (cdr kill-list))
@@ -638,18 +641,30 @@ If optional 2nd argument UNREAD is non-nil, articles which are
 marked as read or ticked are ignored."
   (save-excursion
     (let ((killed-no 0)
-         function article header)
+         function article header extras)
       (cond
        ;; Search body.
        ((or (null field)
            (string-equal field ""))
        (setq function nil))
        ;; Get access function of header field.
-       ((fboundp
-        (setq function
-              (intern-soft
-               (concat "mail-header-" (downcase field)))))
-       (setq function `(lambda (h) (,function h))))
+       ((cond ((fboundp
+               (setq function
+                     (intern-soft
+                      (concat "mail-header-" (downcase field)))))
+              (setq function `(lambda (h) (,function h))))
+             ((when (setq extras
+                          (member (downcase field)
+                                  (mapcar (lambda (header)
+                                            (downcase (symbol-name header)))
+                                          gnus-extra-headers)))
+                (setq function
+                      `(lambda (h)
+                         (gnus-extra-header
+                          (quote ,(nth (- (length gnus-extra-headers)
+                                          (length extras))
+                                       gnus-extra-headers))
+                          h)))))))
        ;; Signal error.
        (t
        (error "Unknown header field: \"%s\"" field)))
@@ -682,6 +697,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
                   (mapconcat 'identity command-line-args-left " "))))
         (gnus-expert-user t)
         (nnmail-spool-file nil)
+        (mail-sources nil)
         (gnus-use-dribble-file nil)
         (gnus-batch-mode t)
         info group newsrc entry
index f89f95e..53784fb 100644 (file)
@@ -37,7 +37,7 @@
 (put 'gnus-cite 'custom-loads '("gnus-cite"))
 (put 'gnus-demon 'custom-loads '("gnus-demon"))
 (put 'gnus-message 'custom-loads '("message"))
-(put 'gnus-score-default 'custom-loads '("gnus-sum" "gnus-score"))
+(put 'gnus-score-delta-default 'custom-loads '("gnus-sum" "gnus-score"))
 (put 'nnmail-duplicate 'custom-loads '("nnmail"))
 (put 'message-interface 'custom-loads '("message"))
 (put 'nnmail-files 'custom-loads '("nnmail"))
index c40f49e..03b1c1c 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-score)
 (require 'gnus-util)
   (let* ((type (or type 's))
         (case-fold-search (not (eq (downcase (symbol-name type))
                                    (symbol-name type))))
-        (header (aref gnus-advanced-headers index)))
+        (header (or (aref gnus-advanced-headers index) "")))
     (cond
      ((memq type '(r R regexp Regexp))
       (string-match match header))
index dd2b499..2bdfec8 100644 (file)
@@ -1,9 +1,9 @@
-;;; mailcap.el --- Functions for displaying MIME parts
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;;; mailcap.el --- MIME media types configuration
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: William M. Perry <wmperry@aventail.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news, mail
+;; Keywords: news, mail, multimedia
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 
+;; Provides configuration of MIME media types from directly from Lisp
+;; and via the usual mailcap mechanism (RFC 1524).  Deals with
+;; mime.types similarly.
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
 (require 'mail-parse)
+(require 'mm-util)
+
+(defgroup mailcap nil
+  "Definition of viewers for MIME types."
+  :group 'mime)
 
 (defvar mailcap-parse-args-syntax-table
   (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
     table)
   "A syntax table for parsing sgml attributes.")
 
+;; Postpone using defcustom for this as it's so big and we essentially
+;; have to have two copies of the data around then.  Perhaps just
+;; customize the Lisp viewers and rely on the normal configuration
+;; files for the rest?  -- fx
 (defvar mailcap-mime-data
   '(("application"
      ("x-x509-ca-cert"
      ("octet-stream"
       (viewer . mailcap-save-binary-file)
       (non-viewer . t)
-      (type ."application/octet-stream"))
-     ("dvi"
-      (viewer . "open %s")
-      (type   . "application/dvi")
-      (test   . (eq (mm-device-type) 'ns)))
+      (type . "application/octet-stream"))
+;;; XEmacs says `ns' device-type not implemented.
+;;      ("dvi"
+;;       (viewer . "open %s")
+;;       (type   . "application/dvi")
+;;       (test   . (eq (mm-device-type) 'ns)))
      ("dvi"
       (viewer . "xdvi %s")
       (test   . (eq (mm-device-type) 'x))
       (non-viewer . t)
       (type   . "application/zip")
       ("copiousoutput"))
+     ;; Prefer free viewers.
+     ("pdf"
+      (viewer . "gv %s")
+      (type . "application/pdf")
+      (test . window-system))
+     ("pdf"
+      (viewer . "xpdf %s")
+      (type . "application/pdf")
+      (test . (eq (mm-device-type) 'x)))
      ("pdf"
       (viewer . "acroread %s")
       (type   . "application/pdf"))
+;;; XEmacs says `ns' device-type not implemented.
+;;      ("postscript"
+;;       (viewer . "open %s")
+;;       (type   . "application/postscript")
+;;       (test   . (eq (mm-device-type) 'ns)))
      ("postscript"
-      (viewer . "open %s")
-      (type   . "application/postscript")
-      (test   . (eq (mm-device-type) 'ns)))
+      (viewer . "gv -safer %s")
+      (type . "application/postscript")
+      (test   . window-system)
+      ("needsx11"))
      ("postscript"
       (viewer . "ghostview -dSAFER %s")
       (type . "application/postscript")
       (viewer . "maplay %s")
       (type   . "audio/x-mpeg"))
      (".*"
-      (viewer . mailcap-save-binary-file)
-      (non-viewer . t)
-      (test   . (or (featurep 'nas-sound)
-                     (featurep 'native-sound)))
-      (type   . "audio/*"))
-     (".*"
       (viewer . "showaudio")
       (type   . "audio/*")))
     ("message"
       (type   . "message/rfc822"))
      ("rfc-*822"
       (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
       (type   . "message/rfc822")))
     ("image"
      ("x-xwd"
       ("compose" . "xwd -frame > %s")
       (test   . (eq (mm-device-type) 'x))
       ("needsx11"))
-     (".*"
-      (viewer . "aopen %s")
-      (type   . "image/*")
-      (test   . (eq (mm-device-type) 'ns)))
+;;; XEmacs says `ns' device-type not implemented.
+;;      (".*"
+;;       (viewer . "aopen %s")
+;;       (type   . "image/*")
+;;       (test   . (eq (mm-device-type) 'ns)))
      (".*"
       (viewer . "display %s")
       (type . "image/*")
       (viewer . tar-mode)
       (type . "archive/tar")
       (test . (fboundp 'tar-mode)))))
-     "The mailcap structure is an assoc list of assoc lists.
+  "The mailcap structure is an assoc list of assoc lists.
 1st assoc list is keyed on the major content-type
 2nd assoc list is keyed on the minor content-type (which can be a regexp)
 
@@ -230,57 +250,38 @@ Which looks like:
    (\"plain\" . <info>)))
 
 Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
+related to the mailcap RFC 1524.  This is keyed on the lowercase
 attribute name (viewer, test, etc).  This looks like:
- ((viewer . viewerinfo)
-  (test   . testinfo)
-  (xxxx   . \"string\"))
+ ((viewer . VIEWERINFO)
+  (test   . TESTINFO)
+  (xxxx   . \"STRING\")
+  FLAG)
 
-Where viewerinfo specifies how the content-type is viewed.  Can be
+Where VIEWERINFO specifies how the content-type is viewed.  Can be
 a string, in which case it is run through a shell, with
 appropriate parameters, or a symbol, in which case the symbol is
-funcall'd, with the buffer as an argument.
-
-testinfo is a list of strings, or nil.  If nil, it means the
-viewer specified is always valid.  If it is a list of strings,
-these are used to determine whether a viewer passes the 'test' or
-not.")
-
-(defvar mailcap-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mailcap-temporary-directory
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
-  "*Where temporary files go.")
+`funcall'ed, with the buffer as an argument.
+
+TESTINFO is a test for the viewer's applicability, or nil.  If nil, it
+means the viewer is always valid.  If it is a Lisp function, it is
+called with a list of items from any extra fields from the
+Content-Type header as argument to return a boolean value for the
+validity.  Otherwise, if it is a non-function Lisp symbol or list
+whose car is a symbol, it is `eval'led to yield the validity.  If it
+is a string or list of strings, it represents a shell command to run
+to return a true or false shell value for the validity.")
+
+(defcustom mailcap-download-directory nil
+  "*Directory to which `mailcap-save-binary-file' downloads files by default.
+Nil means your home directory."
+  :type '(choice (const :tag "Home directory" nil)
+                directory)
+  :group 'mailcap)
 
 ;;;
 ;;; Utility functions
 ;;;
 
-(defun mailcap-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mailcap-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mailcap-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mailcap-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mailcap-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mailcap-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mailcap-temporary-directory))))
-
 (defun mailcap-save-binary-file ()
   (goto-char (point-min))
   (unwind-protect
@@ -291,11 +292,42 @@ not.")
        (write-region (point-min) (point-max) file))
     (kill-buffer (current-buffer))))
 
+(defvar mailcap-maybe-eval-warning
+  "*** WARNING ***
+
+This MIME part contains untrusted and possibly harmful content.
+If you evaluate the Emacs Lisp code contained in it, a lot of nasty
+things can happen.  Please examine the code very carefully before you
+instruct Emacs to evaluate it.  You can browse the buffer containing
+the code using \\[scroll-other-window].
+
+If you are unsure what to do, please answer \"no\"."
+  "Text of warning message displayed by `mailcap-maybe-eval'.
+Make sure that this text consists only of few text lines.  Otherwise,
+Gnus might fail to display all of it.")
+  
 (defun mailcap-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code"
-  (if (yes-or-no-p "This is emacs-lisp code, evaluate it? ")
-      (eval-buffer (current-buffer))
-    (emacs-lisp-mode)))
+  "Maybe evaluate a buffer of Emacs Lisp code."
+  (let ((lisp-buffer (current-buffer)))
+    (goto-char (point-min))
+    (when
+       (save-window-excursion
+         (delete-other-windows)
+         (let ((buffer (get-buffer-create (generate-new-buffer-name
+                                           "*Warning*"))))
+           (unwind-protect
+               (with-current-buffer buffer
+                 (insert (substitute-command-keys
+                          mailcap-maybe-eval-warning))
+                 (goto-char (point-min))
+                 (display-buffer buffer)
+                 (yes-or-no-p "This is potentially dangerous emacs-lisp code, evaluate it? "))
+             (kill-buffer buffer))))
+      (eval-buffer (current-buffer)))
+    (when (buffer-live-p lisp-buffer)
+      (with-current-buffer lisp-buffer
+       (emacs-lisp-mode)))))
+
 
 ;;;
 ;;; The mailcap parser
@@ -310,8 +342,12 @@ not.")
 (defvar mailcap-parsed-p nil)
 
 (defun mailcap-parse-mailcaps (&optional path force)
-  "Parse out all the mailcaps specified in a unix-style path string PATH.
-If FORCE, re-parse even if already parsed."
+  "Parse out all the mailcaps specified in a path string PATH.
+Components of PATH are separated by the `path-separator' character
+appropriate for this system.  If FORCE, re-parse even if already
+parsed.  If PATH is omitted, use the value of environment variable
+MAILCAPS if set; otherwise (on Unix) use the path from RFC 1524, plus
+/usr/local/etc/mailcap."
   (interactive (list nil t))
   (when (or (not mailcap-parsed-p)
            force)
@@ -319,30 +355,27 @@ If FORCE, re-parse even if already parsed."
      (path nil)
      ((getenv "MAILCAPS") (setq path (getenv "MAILCAPS")))
      ((memq system-type '(ms-dos ms-windows windows-nt))
-      (setq path (mapconcat 'expand-file-name
-                           '("~/mail.cap" "~/etc/mail.cap" "~/.mailcap")
-                           ";")))
-     (t (setq path (mapconcat 'expand-file-name
-                             '("~/.mailcap"
-                               "/etc/mailcap:/usr/etc/mailcap"
-                               "/usr/local/etc/mailcap") ":"))))
+      (setq path '("~/.mailcap" "~/mail.cap" "~/etc/mail.cap")))
+     (t (setq path
+             ;; This is per RFC 1524, specifically
+             ;; with /usr before /usr/local.
+             '("~/.mailcap" "/etc/mailcap" "/usr/etc/mailcap"
+               "/usr/local/etc/mailcap"))))
     (let ((fnames (reverse
-                  (split-string
-                   path (if (memq system-type
-                                  '(ms-dos ms-windows windows-nt))
-                            ";"
-                          ":"))))
+                  (if (stringp path)
+                      (delete "" (split-string path path-separator))
+                    path)))
          fname)
       (while fnames
        (setq fname (car fnames))
-       (if (and (file-exists-p fname) (file-readable-p fname)
-                (file-regular-p fname))
-           (mailcap-parse-mailcap (car fnames)))
+       (if (and (file-readable-p fname)
+                (file-regular-p fname))
+           (mailcap-parse-mailcap fname))
        (setq fnames (cdr fnames))))
-    (setq mailcap-parsed-p t)))
+      (setq mailcap-parsed-p t)))
 
 (defun mailcap-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
+  "Parse out the mailcap file specified by FNAME."
   (let (major                          ; The major mime type (image/audio/etc)
        minor                           ; The minor mime type (gif, basic, etc)
        save-pos                        ; Misc saved positions used in parsing
@@ -353,25 +386,24 @@ If FORCE, re-parse even if already parsed."
       (insert-file-contents fname)
       (set-syntax-table mailcap-parse-args-syntax-table)
       (mailcap-replace-regexp "#.*" "")        ; Remove all comments
+      (mailcap-replace-regexp "\\\\[ \t]*\n" " ") ; And collapse spaces
       (mailcap-replace-regexp "\n+" "\n") ; And blank lines
-      (mailcap-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mailcap-replace-regexp (concat (regexp-quote "\\") "[ \t]*\n") "")
       (goto-char (point-max))
       (skip-chars-backward " \t\n")
       (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
+      (while (not (bobp))
+       (skip-chars-backward " \t\n")
+       (beginning-of-line)
        (setq save-pos (point)
              info nil)
        (skip-chars-forward "^/; \t\n")
        (downcase-region save-pos (point))
        (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward " \t\n")
+       (skip-chars-forward " \t")
        (setq minor "")
        (when (eq (char-after) ?/)
          (forward-char)
-         (skip-chars-forward " \t\n")
+         (skip-chars-forward " \t")
          (setq save-pos (point))
          (skip-chars-forward "^; \t\n")
          (downcase-region save-pos (point))
@@ -380,14 +412,14 @@ If FORCE, re-parse even if already parsed."
                 ((eq ?* (or (char-after save-pos) 0)) ".*")
                 ((= (point) save-pos) ".*")
                 (t (regexp-quote (buffer-substring save-pos (point)))))))
-       (skip-chars-forward " \t\n")
+       (skip-chars-forward " \t")
        ;;; Got the major/minor chunks, now for the viewers/etc
        ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
+       ;;; RFC for mailcap files (#1524)
        (setq viewer "")
-       (when (eq (char-after) ?\;) 
+       (when (eq (char-after) ?\;)
          (forward-char)
-         (skip-chars-forward " \t\n")
+         (skip-chars-forward " \t")
          (setq save-pos (point))
          (skip-chars-forward "^;\n")
          ;; skip \;
@@ -406,17 +438,18 @@ If FORCE, re-parse even if already parsed."
            (setq viewer (buffer-substring save-pos (point)))))
        (setq save-pos (point))
        (end-of-line)
-       (unless (equal viewer "") 
+       (unless (equal viewer "")
          (setq info (nconc (list (cons 'viewer viewer)
                                  (cons 'type (concat major "/"
                                                      (if (string= minor ".*")
                                                          "*" minor))))
                            (mailcap-parse-mailcap-extras save-pos (point))))
          (mailcap-mailcap-entry-passes-test info)
-         (mailcap-add-mailcap-entry major minor info))))))
+         (mailcap-add-mailcap-entry major minor info))
+       (beginning-of-line)))))
 
 (defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
+  "Grab all the extra stuff from a mailcap entry."
   (let (
        name                            ; From name=
        value                           ; its value
@@ -461,11 +494,10 @@ If FORCE, re-parse even if already parsed."
       results)))
 
 (defun mailcap-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assq 'test info))        ; The test clause
-       )
+  "Return non-nil iff mailcap entry INFO passes its test clause.
+Also return non-nil if no test clause is present."
+  (let ((test (assq 'test info))       ; The test clause
+       status)
     (setq status (and test (split-string (cdr test) " ")))
     (if (and (or (assoc "needsterm" info)
                 (assoc "needsterminal" info)
@@ -492,17 +524,17 @@ If FORCE, re-parse even if already parsed."
 ;;;
 
 (defun mailcap-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
+  "Return a list of possible viewers from MAJOR for minor type MINOR."
   (let ((exact '())
        (wildcard '()))
     (while major
       (cond
        ((equal (car (car major)) minor)
        (setq exact (cons (cdr (car major)) exact)))
-       ((and minor (string-match (car (car major)) minor))
+       ((and minor (string-match (concat "^" (car (car major)) "$") minor))
        (setq wildcard (cons (cdr (car major)) wildcard))))
       (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
+    (nconc exact wildcard)))
 
 (defun mailcap-unescape-mime-test (test type-info)
   (let (save-pos save-chr subst)
@@ -527,18 +559,18 @@ If FORCE, re-parse even if already parsed."
            (setq save-pos (point))
            (skip-chars-forward "%")
            (setq save-chr (char-after (point)))
+           ;; Escapes:
+           ;; %s: name of a file for the body data
+           ;; %t: content-type
+           ;; %{<parameter name}: value of parameter in mailcap entry
+           ;; %n: number of sub-parts for multipart content-type
+           ;; %F: a set of content-type/filename pairs for multiparts
            (cond
             ((null save-chr) nil)
             ((= save-chr ?t)
              (delete-region save-pos (progn (forward-char 1) (point)))
              (insert (or (cdr (assq 'type type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
+            ((memq save-chr '(?M ?n ?F))
              (delete-region save-pos (progn (forward-char 1) (point)))
              (insert "\"\""))
             ((= save-chr ?{)
@@ -550,13 +582,14 @@ If FORCE, re-parse even if already parsed."
              (insert (or (cdr (assoc subst type-info)) "\"\"")))
             (t nil))))
        (buffer-string)))
-     (t (error "Bad value to mailcap-unescape-mime-test. %s" test)))))
+     (t (error "Bad value to mailcap-unescape-mime-test: %s" test)))))
 
 (defvar mailcap-viewer-test-cache nil)
 
 (defun mailcap-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
+  "Return non-nil iff viewer specified by VIEWER-INFO passes its test clause.
+Also retun non-nil if it has no test clause.  TYPE-INFO is an argument
+to supply to the test."
   (let* ((test-info (assq 'test viewer-info))
         (test (cdr test-info))
         (otest test)
@@ -571,8 +604,7 @@ If FORCE, re-parse even if already parsed."
        ((not test-info) t)             ; No test clause
        ((not test) nil)                ; Already failed test
        ((eq test t) t)                 ; Already passed test
-       ((and (symbolp test)            ; Lisp function as test
-             (fboundp test))
+       ((functionp test)               ; Lisp function as test
         (funcall test type-info))
        ((and (symbolp test)            ; Lisp variable as test
              (boundp test))
@@ -595,16 +627,19 @@ If FORCE, re-parse even if already parsed."
        (setq mailcap-mime-data
              (cons (cons major (list (cons minor info)))
                    mailcap-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assq 'test info))        ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assq 'test info)) ; No test info, replace completely
-              (not (assq 'test cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
+       (let ((cur-minor (assoc minor old-major)))
+       (cond
+        ((or (null cur-minor)          ; New minor area, or
+             (assq 'test info))        ; Has a test, insert at beginning
+         (setcdr old-major (cons (cons minor info) (cdr old-major))))
+        ((and (not (assq 'test info))  ; No test info, replace completely
+              (not (assq 'test cur-minor))
+              (equal (assq 'viewer info)  ; Keep alternative viewer
+                     (assq 'viewer cur-minor)))
+         (setcdr cur-minor info))
+        (t
+         (setcdr old-major (cons (cons minor info) (cdr old-major))))))
+      )))
 
 (defun mailcap-add (type viewer &optional test)
   "Add VIEWER as a handler for TYPE.
@@ -624,7 +659,7 @@ If TEST is not given, it defaults to t."
 ;;;
 
 (defun mailcap-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
+  "Return t iff viewer X is more desirable than viewer Y."
   (let ((x-wild (string-match "[*?]" (or (cdr-safe (assq 'type x)) "")))
        (y-wild (string-match "[*?]" (or (cdr-safe (assq 'type y)) "")))
        (x-lisp (not (stringp (or (cdr-safe (assq 'viewer x)) ""))))
@@ -675,7 +710,7 @@ this type is returned."
            (if (mailcap-viewer-passes-test (car viewers) info)
                (setq passed (cons (car viewers) passed)))
            (setq viewers (cdr viewers)))
-         (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp))
+         (setq passed (sort passed 'mailcap-viewer-lessp))
          (setq viewer (car passed))))
       (when (and (stringp (cdr (assq 'viewer viewer)))
                 passed)
@@ -693,7 +728,7 @@ this type is returned."
        passed)
        (t
        ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-tree viewer))
+       (setq viewer (copy-sequence viewer))
        (let ((view (assq 'viewer viewer))
              (test (assq 'test viewer)))
          (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
@@ -705,125 +740,144 @@ this type is returned."
 ;;;
 
 (defvar mailcap-mime-extensions
-  '((""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".dvi"      . "application/x-dvi")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp3"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".patch"    . "text/x-patch")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/xpm")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "An assoc list of file extensions and corresponding MIME content-types.")
-
-(defun mailcap-parse-mimetypes (&optional path)
-  ;; Parse out all the mimetypes specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name
-                         '("~/mime.typ" "~/etc/mime.typ") ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mime-types"
-                             "/etc/mime-types:/usr/etc/mime-types"
-                             "/usr/local/etc/mime-types"
-                             "/usr/local/www/conf/mime-types") ":"))))
-  (let ((fnames (reverse
-                (split-string path
-                              (if (memq system-type
-                                        '(ms-dos ms-windows windows-nt))
-                                  ";" ":"))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mailcap-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
+  '((""        . "text/plain")
+    (".abs"   . "audio/x-mpeg")
+    (".aif"   . "audio/aiff")
+    (".aifc"  . "audio/aiff")
+    (".aiff"  . "audio/aiff")
+    (".ano"   . "application/x-annotator")
+    (".au"    . "audio/ulaw")
+    (".avi"   . "video/x-msvideo")
+    (".bcpio" . "application/x-bcpio")
+    (".bin"   . "application/octet-stream")
+    (".cdf"   . "application/x-netcdr")
+    (".cpio"  . "application/x-cpio")
+    (".csh"   . "application/x-csh")
+    (".css"   . "text/css")
+    (".dvi"   . "application/x-dvi")
+    (".diff"  . "text/x-patch")
+    (".el"    . "application/emacs-lisp")
+    (".eps"   . "application/postscript")
+    (".etx"   . "text/x-setext")
+    (".exe"   . "application/octet-stream")
+    (".fax"   . "image/x-fax")
+    (".gif"   . "image/gif")
+    (".hdf"   . "application/x-hdf")
+    (".hqx"   . "application/mac-binhex40")
+    (".htm"   . "text/html")
+    (".html"  . "text/html")
+    (".icon"  . "image/x-icon")
+    (".ief"   . "image/ief")
+    (".jpg"   . "image/jpeg")
+    (".macp"  . "image/x-macpaint")
+    (".man"   . "application/x-troff-man")
+    (".me"    . "application/x-troff-me")
+    (".mif"   . "application/mif")
+    (".mov"   . "video/quicktime")
+    (".movie" . "video/x-sgi-movie")
+    (".mp2"   . "audio/x-mpeg")
+    (".mp3"   . "audio/x-mpeg")
+    (".mp2a"  . "audio/x-mpeg2")
+    (".mpa"   . "audio/x-mpeg")
+    (".mpa2"  . "audio/x-mpeg2")
+    (".mpe"   . "video/mpeg")
+    (".mpeg"  . "video/mpeg")
+    (".mpega" . "audio/x-mpeg")
+    (".mpegv" . "video/mpeg")
+    (".mpg"   . "video/mpeg")
+    (".mpv"   . "video/mpeg")
+    (".ms"    . "application/x-troff-ms")
+    (".nc"    . "application/x-netcdf")
+    (".nc"    . "application/x-netcdf")
+    (".oda"   . "application/oda")
+    (".patch" . "text/x-patch")
+    (".pbm"   . "image/x-portable-bitmap")
+    (".pdf"   . "application/pdf")
+    (".pgm"   . "image/portable-graymap")
+    (".pict"  . "image/pict")
+    (".png"   . "image/png")
+    (".pnm"   . "image/x-portable-anymap")
+    (".ppm"   . "image/portable-pixmap")
+    (".ps"    . "application/postscript")
+    (".qt"    . "video/quicktime")
+    (".ras"   . "image/x-raster")
+    (".rgb"   . "image/x-rgb")
+    (".rtf"   . "application/rtf")
+    (".rtx"   . "text/richtext")
+    (".sh"    . "application/x-sh")
+    (".sit"   . "application/x-stuffit")
+    (".snd"   . "audio/basic")
+    (".src"   . "application/x-wais-source")
+    (".tar"   . "archive/tar")
+    (".tcl"   . "application/x-tcl")
+    (".tex"   . "application/x-tex")
+    (".texi"  . "application/texinfo")
+    (".tga"   . "image/x-targa")
+    (".tif"   . "image/tiff")
+    (".tiff"  . "image/tiff")
+    (".tr"    . "application/x-troff")
+    (".troff" . "application/x-troff")
+    (".tsv"   . "text/tab-separated-values")
+    (".txt"   . "text/plain")
+    (".vbs"   . "video/mpeg")
+    (".vox"   . "audio/basic")
+    (".vrml"  . "x-world/x-vrml")
+    (".wav"   . "audio/x-wav")
+    (".wrl"   . "x-world/x-vrml")
+    (".xbm"   . "image/xbm")
+    (".xpm"   . "image/xpm")
+    (".xwd"   . "image/windowdump")
+    (".zip"   . "application/zip")
+    (".ai"    . "application/postscript")
+    (".jpe"   . "image/jpeg")
+    (".jpeg"  . "image/jpeg"))
+  "An alist of file extensions and corresponding MIME content-types.
+This exists for you to customize the information in Lisp.  It is
+merged with values from mailcap files by `mailcap-parse-mimetypes'.")
+
+(defvar mailcap-mimetypes-parsed-p nil)
+
+(defun mailcap-parse-mimetypes (&optional path force)
+  "Parse out all the mimetypes specified in a Unix-style path string PATH.
+Components of PATH are separated by the `path-separator' character
+appropriate for this system.  If PATH is omitted, use the value of
+environment variable MIMETYPES if set; otherwise use a default path.
+If FORCE, re-parse even if already parsed."
+  (interactive (list nil t))
+  (when (or (not mailcap-mimetypes-parsed-p)
+           force)
+    (cond
+     (path nil)
+     ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
+     ((memq system-type '(ms-dos ms-windows windows-nt))
+      (setq path '("~/mime.typ" "~/etc/mime.typ")))
+     (t (setq path
+             ;; mime.types seems to be the normal name, definitely so
+             ;; on current GNUish systems.  The search order follows
+             ;; that for mailcap.
+             '("~/.mime.types"
+               "/etc/mime.types"
+               "/usr/etc/mime.types"
+               "/usr/local/etc/mime.types"
+               "/usr/local/www/conf/mime.types"
+               "~/.mime-types"
+               "/etc/mime-types"
+               "/usr/etc/mime-types"
+               "/usr/local/etc/mime-types"
+               "/usr/local/www/conf/mime-types"))))
+    (let ((fnames (reverse (if (stringp path)
+                              (delete "" (split-string path path-separator))
+                            path)))
+         fname)
+      (while fnames
+       (setq fname (car fnames))
+       (if (and (file-readable-p fname))
+           (mailcap-parse-mimetype-file fname))
+       (setq fnames (cdr fnames))))
+    (setq mailcap-mimetypes-parsed-p t)))
 
 (defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
+  "Parse out a mime-types file FNAME."
   (let (type                           ; The MIME type for this line
        extns                           ; The extensions for this line
        save-pos                        ; Misc. saved buffer positions
@@ -840,7 +894,7 @@ this type is returned."
       (while (not (eobp))
        (skip-chars-forward " \t\n")
        (setq save-pos (point))
-       (skip-chars-forward "^ \t")
+       (skip-chars-forward "^ \t\n")
        (downcase-region save-pos (point))
        (setq type (buffer-substring save-pos (point)))
        (while (not (eolp))
@@ -859,35 +913,35 @@ this type is returned."
 
 (defun mailcap-extension-to-mime (extn)
   "Return the MIME content type of the file extensions EXTN."
+  (mailcap-parse-mimetypes)
   (if (and (stringp extn)
           (not (eq (string-to-char extn) ?.)))
       (setq extn (concat "." extn)))
   (cdr (assoc (downcase extn) mailcap-mime-extensions)))
 
-(defvar mailcap-binary-suffixes
-  (if (memq system-type '(ms-dos windows-nt))
-      '(".exe" ".com" ".bat" ".cmd" ".btm" "")
-    '("")))
-
-(defun mailcap-command-p (command)
-  "Say whether COMMAND is in the exec path.
-The path of COMMAND will be returned iff COMMAND is a command."
-  (let ((path (if (file-name-absolute-p command) '(nil) exec-path))
-       file dir)
-    (catch 'found
-      (while (setq dir (pop path))
-       (let ((suffixes mailcap-binary-suffixes))
-         (while suffixes
-           (when (and (file-executable-p
-                       (setq file (expand-file-name
-                                   (concat command (pop suffixes))
-                                   dir)))
-                      (not (file-directory-p file)))
-             (throw 'found file))))))))
+;; Unused?
+(defalias 'mailcap-command-p 'executable-find)
 
 (defun mailcap-mime-types ()
   "Return a list of MIME media types."
-  (delete-duplicates (mapcar 'cdr mailcap-mime-extensions)))
+  (mailcap-parse-mimetypes)
+  (mm-delete-duplicates
+   (nconc
+    (mapcar 'cdr mailcap-mime-extensions)
+    (apply
+     'nconc
+     (mapcar
+      (lambda (l)
+       (delq nil
+             (mapcar
+              (lambda (m)
+                (let ((type (cdr (assq 'type (cdr m)))))
+                  (if (equal (cadr (split-string type "/"))
+                             "*")
+                      nil
+                    type)))
+              (cdr l))))
+      mailcap-mime-data)))))
 
 (provide 'gnus-mailcap)
 
index 6fabb5c..35ee140 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-mh.el --- mh-e interface for Gnus
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -39,6 +40,9 @@
 (require 'gnus-msg)
 (require 'gnus-sum)
 
+(eval-when-compile
+  (defvar mh-lib-progs))
+
 (defun gnus-summary-save-article-folder (&optional arg)
   "Append the current article to an mh folder.
 If N is a positive number, save the N next articles.
@@ -46,6 +50,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-folder))
     (gnus-summary-save-article arg)))
 
@@ -66,8 +71,12 @@ Optional argument FOLDER specifies folder name."
                   t))))
        (errbuf (gnus-get-buffer-create " *Gnus rcvstore*"))
        ;; Find the rcvstore program.
-       (exec-path (if mh-lib (cons mh-lib exec-path) exec-path)))
-    (gnus-eval-in-buffer-window gnus-original-article-buffer
+       (exec-path (cond
+                   ((and (boundp 'mh-lib-progs) mh-lib-progs)
+                    (cons mh-lib-progs exec-path))
+                   (mh-lib (cons mh-lib exec-path))
+                   (t exec-path))))
+    (with-current-buffer gnus-original-article-buffer
       (save-restriction
        (widen)
        (unwind-protect
diff --git a/lisp/gnus-ml.el b/lisp/gnus-ml.el
new file mode 100644 (file)
index 0000000..b2f57df
--- /dev/null
@@ -0,0 +1,201 @@
+;;; gnus-ml.el --- Mailing list minor mode for Gnus
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Julien Gilles  <jgilles@free.fr>
+;; Keywords: news
+
+;; 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.
+
+;;; Commentary:
+
+;; implement (small subset of) RFC 2369
+
+;;; Code:
+
+(require 'gnus)
+(require 'gnus-msg)
+(eval-when-compile (require 'cl))
+
+;;; Mailing list minor mode
+
+(defvar gnus-mailing-list-mode nil
+  "Minor mode for providing mailing-list commands.")
+
+(defvar gnus-mailing-list-mode-map nil)
+
+(defvar gnus-mailing-list-menu)
+
+(unless gnus-mailing-list-mode-map
+  (setq gnus-mailing-list-mode-map (make-sparse-keymap))
+
+  (gnus-define-keys gnus-mailing-list-mode-map
+    "\C-c\C-nh" gnus-mailing-list-help
+    "\C-c\C-ns" gnus-mailing-list-subscribe
+    "\C-c\C-nu" gnus-mailing-list-unsubscribe
+    "\C-c\C-np" gnus-mailing-list-post
+    "\C-c\C-no" gnus-mailing-list-owner
+    "\C-c\C-na" gnus-mailing-list-archive
+    ))
+
+(defun gnus-mailing-list-make-menu-bar ()
+  (unless (boundp 'gnus-mailing-list-menu)
+    (easy-menu-define
+     gnus-mailing-list-menu gnus-mailing-list-mode-map ""
+     '("Mailing-Lists"
+       ["Get help" gnus-mailing-list-help t]
+       ["Subscribe" gnus-mailing-list-subscribe t]
+       ["Unsubscribe" gnus-mailing-list-unsubscribe t]
+       ["Post a message" gnus-mailing-list-post t]
+       ["Mail to owner" gnus-mailing-list-owner t]
+       ["Browse archive" gnus-mailing-list-archive t]))))
+
+;;;###autoload
+(defun turn-on-gnus-mailing-list-mode ()
+  (when (gnus-group-get-parameter gnus-newsgroup-name 'to-list)
+    (gnus-mailing-list-mode 1)))
+
+;;;###autoload
+(defun gnus-mailing-list-insinuate (&optional force)
+  "Setup group parameters from List-Post header.
+If FORCE is non-nil, replace the old ones."
+  (interactive "P")
+  (let ((list-post 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-post"))))
+    (if list-post
+       (if (and (not force)
+                (gnus-group-get-parameter gnus-newsgroup-name 'to-list))
+           (gnus-message 1 "to-list is non-nil.")
+         (if (string-match "<mailto:\\([^>]*\\)>" list-post)
+             (setq list-post (match-string 1 list-post)))
+         (gnus-group-add-parameter gnus-newsgroup-name 
+                                   (cons 'to-list list-post))
+         (gnus-mailing-list-mode 1))
+      (gnus-message 1 "no list-post in this message."))))
+
+;;;###autoload
+(defun gnus-mailing-list-mode (&optional arg)
+  "Minor mode for providing mailing-list commands.
+
+\\{gnus-mailing-list-mode-map}"
+  (interactive "P")
+  (when (eq major-mode 'gnus-summary-mode)
+    (when (set (make-local-variable 'gnus-mailing-list-mode)
+              (if (null arg) (not gnus-mailing-list-mode)
+                (> (prefix-numeric-value arg) 0)))
+      ;; Set up the menu.
+      (when (gnus-visual-p 'mailing-list-menu 'menu)
+       (gnus-mailing-list-make-menu-bar))
+      (gnus-add-minor-mode 'gnus-mailing-list-mode " Mailing-List" gnus-mailing-list-mode-map)
+      (gnus-run-hooks 'gnus-mailing-list-mode-hook))))
+
+;;; Commands
+
+(defun gnus-mailing-list-help ()
+  "Get help from mailing list server."
+  (interactive)  
+  (let ((list-help 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-help"))))
+    (cond (list-help (gnus-mailing-list-message list-help))
+         (t (gnus-message 1 "no list-help in this group")))))
+
+(defun gnus-mailing-list-subscribe ()
+  "Subscribe"
+  (interactive)
+  (let ((list-subscribe 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-subscribe"))))
+    (cond (list-subscribe (gnus-mailing-list-message list-subscribe))
+         (t (gnus-message 1 "no list-subscribe in this group")))))
+
+(defun gnus-mailing-list-unsubscribe ()
+  "Unsubscribe"
+  (interactive)
+  (let ((list-unsubscribe 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-unsubscribe"))))
+    (cond (list-unsubscribe (gnus-mailing-list-message list-unsubscribe))
+         (t (gnus-message 1 "no list-unsubscribe in this group")))))
+
+(defun gnus-mailing-list-post ()
+  "Post message (really useful ?)"
+  (interactive)
+  (let ((list-post 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-post"))))
+    (cond (list-post (gnus-mailing-list-message list-post))
+         (t (gnus-message 1 "no list-post in this group")))))
+
+(defun gnus-mailing-list-owner ()
+  "Mail to the owner"
+  (interactive)
+  (let ((list-owner 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-owner"))))
+    (cond (list-owner (gnus-mailing-list-message list-owner))
+         (t (gnus-message 1 "no list-owner in this group")))))
+
+(defun gnus-mailing-list-archive ()
+  "Browse archive"
+  (interactive)
+  (require 'browse-url)
+  (let ((list-archive 
+        (with-current-buffer gnus-original-article-buffer
+          (gnus-fetch-field "list-archive"))))
+    (cond (list-archive 
+          (if (string-match "<\\(http:[^>]*\\)>" list-archive)
+              (browse-url (match-string 1 list-archive))
+            (browse-url list-archive)))
+         (t (gnus-message 1 "no list-archive in this group")))))
+
+;;; Utility functions
+
+(defun gnus-mailing-list-message (address)
+  ""
+  (let ((mailto  "")
+       (to ())
+       (subject "None")
+       (body "")
+       )
+    (cond 
+     ((string-match "<mailto:\\([^>]*\\)>" address)
+      (let ((args (match-string 1 address)))
+       (cond                                   ; with param
+        ((string-match "\\(.*\\)\\?\\(.*\\)" args)
+         (setq mailto (match-string 1 args))
+         (let ((param (match-string 2 args)))
+           (if (string-match "subject=\\([^&]*\\)" param)
+               (setq subject (match-string 1 param)))
+           (if (string-match "body=\\([^&]*\\)" param)
+               (setq body (match-string 1 param)))
+           (if (string-match "to=\\([^&]*\\)" param)
+               (push (match-string 1 param) to))
+           ))   
+        (t (setq mailto args)))))                      ; without param
+     
+     ; other case <http://... to be done.
+     (t nil))
+    (gnus-setup-message 'message (message-mail mailto subject))
+    (insert body)
+    ))
+
+(provide 'gnus-ml)
+
+;;; gnus-ml.el ends here
index e305b88..46ccc99 100644 (file)
@@ -1,7 +1,8 @@
 ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism
-;; Copyright (C) 1998,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
-;; Author: Alexandre Oliva <oliva@dcc.unicamp.br>
+;; Author: Alexandre Oliva <oliva@lsd.ic.unicamp.br>
 ;; Keywords: news, mail
 
 ;; This program is free software; you can redistribute it and/or modify
 
 (defvar gnus-group-split-updated-hook nil
   "Hook called just after nnmail-split-fancy is updated by
-gnus-group-split-update")
+gnus-group-split-update.")
 
 (defvar gnus-group-split-default-catch-all-group "mail.misc"
-  "Group used by gnus-group-split and gnus-group-split-update as
-default catch-all group")
+  "Group name (or arbitrary fancy split) with default splitting rules.
+Used by gnus-group-split and gnus-group-split-update as a fallback
+split, in case none of the group-based splits matches.")
 
 ;;;###autoload
 (defun gnus-group-split-setup (&optional auto-update catch-all)
-  "Sets things up so that nnmail-split-fancy is used for mail
+  "Set up the split for nnmail-split-fancy.
+Sets things up so that nnmail-split-fancy is used for mail
 splitting, and defines the variable nnmail-split-fancy according with
 group parameters.
 
 If AUTO-UPDATE is non-nil (prefix argument accepted, if called
 interactively), it makes sure nnmail-split-fancy is re-computed before
 getting new mail, by adding gnus-group-split-update to
-nnmail-pre-get-new-mail-hook."
+nnmail-pre-get-new-mail-hook.
+
+A non-nil CATCH-ALL replaces the current value of
+gnus-group-split-default-catch-all-group.  This variable is only used
+by gnus-group-split-update, and only when its CATCH-ALL argument is
+nil.  This argument may contain any fancy split, that will be added as
+the last split in a `|' split produced by gnus-group-split-fancy,
+unless overridden by any group marked as a catch-all group.  Typical
+uses are as simple as the name of a default mail group, but more
+elaborate fancy splits may also be useful to split mail that doesn't
+match any of the group-specified splitting rules.  See
+gnus-group-split-fancy for details."
   (interactive "P")
   (setq nnmail-split-methods 'nnmail-split-fancy)
   (when catch-all
@@ -53,27 +67,26 @@ nnmail-pre-get-new-mail-hook."
 
 ;;;###autoload
 (defun gnus-group-split-update (&optional catch-all)
-  "Computes nnmail-split-fancy from group params, by calling
-\(gnus-group-split-fancy nil nil DEFAULTGROUP)"
+  "Computes nnmail-split-fancy from group params and CATCH-ALL, by
+calling (gnus-group-split-fancy nil nil CATCH-ALL).
+
+If CATCH-ALL is nil, gnus-group-split-default-catch-all-group is used
+instead.  This variable is set by gnus-group-split-setup."
   (interactive)
   (setq nnmail-split-fancy
        (gnus-group-split-fancy
-        nil nil (or catch-all gnus-group-split-default-catch-all-group)))
-  (run-hooks 'gnus-group-split-updated-hook)
-  )
+        nil (null nnmail-crosspost)
+        (or catch-all gnus-group-split-default-catch-all-group)))
+  (run-hooks 'gnus-group-split-updated-hook))
 
 ;;;###autoload
 (defun gnus-group-split ()
-  "Uses information from group parameters in order to split mail.  See
-gnus-group-split-fancy for more information.
-
-If no group is defined as catch-all, the value of
-gnus-group-split-default-catch-all-group is used.
+  "Uses information from group parameters in order to split mail.
+See gnus-group-split-fancy for more information.
 
 gnus-group-split is a valid value for nnmail-split-methods."
   (let (nnmail-split-fancy)
-    (gnus-group-split-update
-     gnus-group-split-default-catch-all-group)
+    (gnus-group-split-update)
     (nnmail-split-fancy)))
 
 ;;;###autoload
@@ -92,11 +105,6 @@ if NO-CROSSPOST is ommitted or nil, a & split will be returned,
 otherwise, a | split, that does not allow crossposting, will be
 returned.
 
-if CATCH-ALL is not nil, and there is no selected group whose
-SPLIT-REGEXP matches the empty string, nor is there a selected group
-whose SPLIT-SPEC is 'catch-all, this group name will be appended to
-the returned SPLIT list, as the last element in a '| SPLIT.
-
 For each selected group, a SPLIT is composed like this: if SPLIT-SPEC
 is specified, this split is returned as-is (unless it is nil: in this
 case, the group is ignored).  Otherwise, if TO-ADDRESS, TO-LIST and/or
@@ -106,6 +114,13 @@ SPLIT-REGEXP is specified, the regexp will be extended so that it
 matches this regexp too, and if SPLIT-EXCLUDE is specified, RESTRICT
 clauses will be generated.
 
+If CATCH-ALL is nil, no catch-all handling is performed, regardless of
+catch-all marks in group parameters.  Otherwise, if there is no
+selected group whose SPLIT-REGEXP matches the empty string, nor is
+there a selected group whose SPLIT-SPEC is 'catch-all, this fancy
+split (say, a group name) will be appended to the returned SPLIT list,
+as the last element of a '| SPLIT.
+
 For example, given the following group parameters:
 
 nnml:mail.bar:
@@ -137,7 +152,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns:
                       (memq group groups))
                  (and (stringp groups)
                       (string-match groups group)))
-         (let ((split-spec (cdr (assoc 'split-spec params))) group-clean)
+         (let ((split-spec (assoc 'split-spec params)) group-clean)
            ;; Remove backend from group name
            (setq group-clean (string-match ":" group))
            (setq group-clean
@@ -145,12 +160,13 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns:
                      (substring group (1+ group-clean))
                    group))
            (if split-spec
-               (if (eq split-spec 'catch-all)
-                   ;; Emit catch-all only when requested
-                   (when catch-all
-                     (setq catch-all group-clean))
-                 ;; Append split-spec to the main split
-                 (push split-spec split))
+               (when (setq split-spec (cdr split-spec))
+                 (if (eq split-spec 'catch-all)
+                     ;; Emit catch-all only when requested
+                     (when catch-all
+                       (setq catch-all group-clean))
+                   ;; Append split-spec to the main split
+                   (push split-spec split)))
              ;; Let's deduce split-spec from other params
              (let ((to-address (cdr (assoc 'to-address params)))
                    (to-list (cdr (assoc 'to-list params)))
@@ -180,8 +196,12 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns:
                         (list 'any split-regexp)
                         ;; Generate RESTRICTs for SPLIT-EXCLUDEs.
                         (if (listp split-exclude)
-                            (mapcon (lambda (arg) (cons '- arg))
-                                    split-exclude)
+                            (let ((seq split-exclude)
+                                  res)
+                              (while seq
+                                (push (cons '- (pop seq))
+                                      res))
+                              (apply #'nconc (nreverse res)))
                           (list '- split-exclude))
                         (list group-clean))
                        split)
@@ -190,7 +210,7 @@ Calling (gnus-group-split-fancy nil nil \"mail.misc\") returns:
                    (setq catch-all nil)))))))))
     ;; Add catch-all if not crossposting
     (if (and catch-all no-crosspost)
-       (push split catch-all))
+       (push catch-all split))
     ;; Move it to the tail, while arranging that SPLITs appear in the
     ;; same order as groups.
     (setq split (reverse split))
index 38de4d5..36839c8 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-move.el --- commands for moving Gnus from one server to another
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -45,6 +46,7 @@ Update the .newsrc.eld file to reflect the change of nntp server."
 
   ;; First start Gnus.
   (let ((gnus-activate-level 0)
+       (mail-sources nil)
        (nnmail-spool-file nil))
     (gnus))
 
index b6a61c8..030d1ee 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-msg.el --- mail and post interface for Semi-gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -49,8 +50,8 @@ This method will not be used in mail groups and the like, only in
 \"real\" newsgroups.
 
 If not nil nor `native', the value must be a valid method as discussed
-in the documentation of `gnus-select-method'. It can also be a list of
-methods. If that is the case, the user will be queried for what select
+in the documentation of `gnus-select-method'.  It can also be a list of
+methods.  If that is the case, the user will be queried for what select
 method to use when posting."
   :group 'gnus-group-foreign
   :type `(choice (const nil)
@@ -105,15 +106,39 @@ the second with the current group name.")
 (defvar gnus-posting-styles nil
   "*Alist of styles to use when posting.")
 
+(defvar gnus-inews-mark-gcc-as-read nil
+  "If non-nil, automatically mark Gcc articles as read.")
+
 (defcustom gnus-group-posting-charset-alist
-  '(("^no\\." iso-8859-1)
-    (message-this-is-mail nil)
-    ("^de\\." nil)
-    (".*" iso-8859-1)
-    (message-this-is-news iso-8859-1))
-  "Alist of regexps (to match group names) and default charsets to be unencoded when posting."
-  :type '(repeat (list (regexp :tag "Group")
-                      (symbol :tag "Charset")))
+  '(("^\\(no\\|fr\\)\\.[^,]*\\(,[ \t\n]*\\(no\\|fr\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1))
+    ("^\\(fido7\\|relcom\\)\\.[^,]*\\(,[ \t\n]*\\(fido7\\|relcom\\)\\.[^,]*\\)*$" koi8-r (koi8-r))
+    (message-this-is-mail nil nil)
+    (message-this-is-news nil t))
+  "Alist of regexps and permitted unencoded charsets for posting.
+Each element of the alist has the form (TEST HEADER BODY-LIST), where
+TEST is either a regular expression matching the newsgroup header or a
+variable to query,
+HEADER is the charset which may be left unencoded in the header (nil
+means encode all charsets),
+BODY-LIST is a list of charsets which may be encoded using 8bit
+content-transfer encoding in the body, or one of the special values
+nil (always encode using quoted-printable) or t (always use 8bit).
+
+Note that any value other than nil for HEADER infringes some RFCs, so
+use this option with care."
+  :type '(repeat (list :tag "Permitted unencoded charsets"
+                 (choice :tag "Where"
+                  (regexp :tag "Group")
+                  (const :tag "Mail message" :value message-this-is-mail)
+                  (const :tag "News article" :value message-this-is-news))
+                 (choice :tag "Header"
+                  (const :tag "None" nil)
+                  (symbol :tag "Charset"))
+                 (choice :tag "Body"
+                         (const :tag "Any" :value t)
+                         (const :tag "None" :value nil)
+                         (repeat :tag "Charsets"
+                                 (symbol :tag "Charset")))))
   :group 'gnus-charset)
 
 ;;; Internal variables.
@@ -187,8 +212,8 @@ Thank you for your help in stamping out bugs.
   "\M-c" gnus-summary-mail-crosspost-complaint
   "om" gnus-summary-mail-forward
   "op" gnus-summary-post-forward
-  "Om" gnus-summary-mail-digest
-  "Op" gnus-summary-post-digest)
+  "Om" gnus-summary-digest-mail-forward
+  "Op" gnus-summary-digest-post-forward)
 
 (gnus-define-keys (gnus-send-bounce-map "D" gnus-summary-send-map)
   "b" gnus-summary-resend-bounced-mail
@@ -225,13 +250,27 @@ Thank you for your help in stamping out bugs.
         (set (make-local-variable 'gnus-message-group-art)
              (cons ,group ,article))
         (set (make-local-variable 'gnus-newsgroup-name) ,group)
-        (set (make-local-variable 'message-posting-charset)
-             (gnus-setup-posting-charset ,group))
         (gnus-run-hooks 'gnus-message-setup-hook))
        (gnus-add-buffer)
        (gnus-configure-windows ,config t)
        (set-buffer-modified-p nil))))
 
+;;;###autoload
+(defun gnus-msg-mail (&rest args)
+  "Start editing a mail message to be sent.
+Like `message-mail', but with Gnus paraphernalia, particularly the
+Gcc: header for archiving purposes."
+  (interactive)
+  (gnus-setup-message 'message
+    (apply 'message-mail args))
+  ;; COMPOSEFUNC should return t if succeed.  Undocumented ???
+  t)
+
+;;;###autoload
+(define-mail-user-agent 'gnus-user-agent
+      'gnus-msg-mail 'message-send-and-exit
+      'message-kill-buffer 'message-send-hook)
+
 (defun gnus-setup-posting-charset (group)
   (let ((alist gnus-group-posting-charset-alist)
        (group (or group ""))
@@ -245,11 +284,15 @@ Thank you for your help in stamping out bugs.
                         (funcall (car elem) group))
                    (and (symbolp (car elem))
                         (symbol-value (car elem))))
-           (throw 'found (cadr elem))))))))
+           (throw 'found (cons (cadr elem) (caddr elem)))))))))
 
 (defun gnus-inews-add-send-actions (winconf buffer article)
   (make-local-hook 'message-sent-hook)
-  (add-hook 'message-sent-hook 'gnus-inews-do-gcc nil t)
+  (add-hook 'message-sent-hook (if gnus-agent 'gnus-agent-possibly-do-gcc
+                                'gnus-inews-do-gcc) nil t)
+  (when gnus-agent
+    (make-local-hook 'message-header-hook)
+    (add-hook 'message-header-hook 'gnus-agent-possibly-save-gcc nil t))
   (setq message-post-method
        `(lambda (arg)
           (gnus-post-method arg ,gnus-newsgroup-name)))
@@ -462,15 +505,24 @@ header line with the old Message-ID."
          (let ((inhibit-read-only t))
            (copy-to-buffer gnus-article-copy (point-min) (point-max))
            (set-buffer gnus-article-copy)
+           ;; Encode bitmap smileys to ordinary text.
+           ;; Possibly, the original text might be restored.
+           (static-unless (featurep 'xemacs)
+             (when (featurep 'smiley-mule)
+               (smiley-encode-buffer)))
            (gnus-article-delete-text-of-type 'annotation)
            (gnus-remove-text-with-property 'gnus-prev)
            (gnus-remove-text-with-property 'gnus-next)
            (gnus-remove-text-with-property 'x-face-mule-bitmap-image)
            (insert
             (prog1
-                (format "%s" (buffer-string))
-              (erase-buffer)))
-           )
+                (static-if (featurep 'xemacs)
+                    ;; Revome smiley extents for (possibly) XEmacs 21.1.
+                    (format "%s"
+                            (buffer-substring-no-properties (point-min)
+                                                            (point-max)))
+                  (buffer-substring-no-properties (point-min) (point-max)))
+              (erase-buffer))))
          ;; Find the original headers.
          (set-buffer gnus-original-article-buffer)
          (goto-char (point-min))
@@ -482,10 +534,6 @@ header line with the old Message-ID."
          (set-buffer gnus-article-copy)
          (delete-region (goto-char (point-min))
                         (or (search-forward "\n\n" nil t) (point-max)))
-         ;; Encode bitmap smileys to ordinary text.
-         (static-unless (featurep 'xemacs)
-           (when (featurep 'smiley-mule)
-             (smiley-encode-buffer)))
          ;; Insert the original article headers.
          (insert-buffer-substring gnus-original-article-buffer beg end)
          (article-decode-encoded-words)))
@@ -501,6 +549,7 @@ header line with the old Message-ID."
                              (article-buffer 'reply)
                              (t 'message))
       (let* ((group (or group gnus-newsgroup-name))
+            (charset (gnus-group-name-charset nil group))
             (pgroup group)
             to-address to-group mailing-list to-list
             newsgroup-p)
@@ -511,7 +560,8 @@ header line with the old Message-ID."
                newsgroup-p (gnus-group-find-parameter group 'newsgroup)
                mailing-list (when gnus-mailing-list-groups
                               (string-match gnus-mailing-list-groups group))
-               group (gnus-group-real-name group)))
+               group (gnus-group-name-decode (gnus-group-real-name group)
+                                             charset)))
        (if (or (and to-group
                     (gnus-news-group-p to-group))
                newsgroup-p
@@ -563,7 +613,7 @@ If SILENT, don't prompt the user."
      ;; the default method.
      ((null group-method)
       (or (and (null (eq gnus-post-method 'active)) gnus-post-method)
-              gnus-select-method message-post-method))
+         gnus-select-method message-post-method))
      ;; We want the inverse of the default
      ((and arg (not (eq arg 0)))
       (if (eq gnus-post-method 'active)
@@ -599,7 +649,9 @@ If SILENT, don't prompt the user."
        (setq method-alist
              (mapcar
               (lambda (m)
-                (list (concat (cadr m) " (" (symbol-name (car m)) ")") m))
+                (if (equal (cadr m) "")
+                    (list (symbol-name (car m)) m)
+                  (list (concat (cadr m) " (" (symbol-name (car m)) ")") m)))
               post-methods))
        ;; Query the user.
        (cadr
@@ -627,16 +679,6 @@ If SILENT, don't prompt the user."
 
 \f
 
-(defun gnus-extended-version ()
-  "Stringified gnus version."
-  (concat gnus-product-name "/" gnus-version-number
-         " (based on "
-         gnus-original-product-name " v" gnus-original-version-number ")"
-         (if (zerop (string-to-number gnus-revision-number))
-             ""
-           (concat " (revision " gnus-revision-number ")"))
-         ))
-
 (defun gnus-message-make-user-agent (&optional include-mime-info max-column)
   "Return user-agent info.
 INCLUDE-MIME-INFO the optional first argument if it is non-nil and the variable
@@ -740,36 +782,63 @@ If FULL-HEADERS (the prefix), include full headers when forwarding."
           (if full-headers "" message-included-forward-headers)))
       (message-forward post))))
 
-;;; XXX: generate Subject and ``Topics''?
-(defun gnus-summary-mail-digest (&optional n post)
-  "Digests and forwards all articles in this series."
+(defun gnus-summary-digest-mail-forward (&optional n post)
+  "Digests and forwards all articles in this series.
+If N is a positive number, forward the N next articles.
+If N is a negative number, forward the N previous articles.
+If N is nil and any articles have been marked with the process mark,
+forward those articles instead.
+Optional POST will use news to forward instead of mail."
   (interactive "P")
-  (let ((subject "Digested Articles")
-       (articles (gnus-summary-work-articles n))
-       article frame)
-    (gnus-setup-message 'forward
-      (gnus-summary-select-article)
-      (if post (message-news nil subject) (message-mail nil subject))
-      (when (and message-use-multi-frames (cdr articles))
-       (setq frame (window-frame (get-buffer-window (current-buffer)))))
-      (message-goto-body)
-      (while (setq article (pop articles))
-       (save-window-excursion
-         (set-buffer gnus-summary-buffer)
-         (gnus-summary-select-article nil nil nil article)
-         (gnus-summary-remove-process-mark article))
-       (when frame
-         (select-frame frame))
-       (insert (mime-make-tag "message" "rfc822") "\n")
-       (insert-buffer-substring gnus-original-article-buffer))
-      (push-mark)
-      (message-goto-body)
-      (mime-edit-enclose-digest-region (point)(mark t)))))
-
-(defun gnus-summary-post-digest (&optional n)
-  "Digest and forwards all articles in this series to a newsgroup."
+  (let ((articles (gnus-summary-work-articles n))
+       (topics "Topics:\n")
+       subject article frame)
+    (when (car articles)
+      (gnus-setup-message 'forward
+       (gnus-summary-select-article)
+       (if (cdr articles)
+           (setq articles (sort articles '<)
+                 subject "Digested Articles")
+         (with-current-buffer gnus-original-article-buffer
+           (setq subject (message-make-forward-subject))))
+       (if post
+           (message-news nil subject)
+         (message-mail nil subject))
+       (when (and message-use-multi-frames (cdr articles))
+         (setq frame (window-frame (get-buffer-window (current-buffer)))))
+       (message-goto-body)
+       (while (setq article (pop articles))
+         (save-window-excursion
+           (set-buffer gnus-summary-buffer)
+           (gnus-summary-select-article nil nil nil article)
+           (setq topics (concat topics "    "
+                                (mail-header-subject gnus-current-headers)
+                                "\n"))
+           (gnus-summary-remove-process-mark article))
+         (when frame
+           (select-frame frame))
+         (insert (mime-make-tag "message" "rfc822") "\n")
+         (narrow-to-region (point) (point))
+         (insert-buffer-substring gnus-original-article-buffer)
+         (save-restriction
+           (article-narrow-to-head)
+           (message-remove-header message-included-forward-headers t nil t))
+         (goto-char (point-max))
+         (widen))
+       (push-mark)
+       (message-goto-body)
+       (insert topics)
+       (message-goto-body)
+       (mime-edit-enclose-digest-region (point)(mark t))))))
+
+(defun gnus-summary-digest-post-forward (&optional n)
+  "Digest and forwards all articles in this series to a newsgroup.
+If N is a positive number, forward the N next articles.
+If N is a negative number, forward the N previous articles.
+If N is nil and any articles have been marked with the process mark,
+forward those articles instead."
   (interactive "P")
-  (gnus-summary-mail-digest n t))
+  (gnus-summary-digest-mail-forward n t))
 
 (defun gnus-summary-resend-message (address n)
   "Resend the current article to ADDRESS."
@@ -967,6 +1036,8 @@ If YANK is non-nil, include the original article."
     (insert (with-temp-buffer
              (gnus-debug)
              (buffer-string)))
+    (let (mime-content-types)
+      (mime-edit-insert-tag "text" "plain"))
     (goto-char (point-min))
     (search-forward "Subject: " nil t)
     (message "")))
@@ -980,13 +1051,33 @@ If YANK is non-nil, include the original article."
   (interactive
    (list (completing-read "Buffer: " (mapcar 'list (message-buffers)) nil t)
         current-prefix-arg))
-  (gnus-summary-iterate n
-    (let ((gnus-display-mime-function nil)
-         (gnus-inhibit-treatment t))
-      (gnus-summary-select-article))
-    (save-excursion
-      (set-buffer buffer)
-      (message-yank-buffer gnus-article-buffer))))
+  (when (gnus-buffer-live-p buffer)
+    (let ((summary-frame (selected-frame))
+         (message-frame (when (static-if (featurep 'xemacs)
+                                  (device-on-window-system-p)
+                                window-system)
+                          (let ((window (get-buffer-window buffer t)))
+                            (when window
+                              (window-frame window)))))
+         (separator (concat "^" (regexp-quote mail-header-separator)
+                            "\n")))
+      (gnus-summary-iterate n
+       (gnus-summary-select-article)
+       (gnus-copy-article-buffer)
+       (when (frame-live-p message-frame)
+         (raise-frame message-frame)
+         (select-frame message-frame))
+       (with-current-buffer buffer
+         (when (save-excursion
+                 (beginning-of-line)
+                 (let (case-fold-search)
+                   (and (not (re-search-backward separator nil t))
+                        (re-search-forward separator nil t))))
+           (goto-char (match-end 0)))
+         (message-yank-buffer gnus-article-copy))
+       (select-frame summary-frame))
+      (when (frame-live-p message-frame)
+       (select-frame message-frame)))))
 
 (defun gnus-debug ()
   "Attempts to go through the Gnus source file and report what variables have been changed.
@@ -995,13 +1086,13 @@ The source file has to be in the Emacs load path."
   (let ((files '("gnus.el" "gnus-sum.el" "gnus-group.el"
                 "gnus-art.el" "gnus-start.el" "gnus-async.el"
                 "gnus-msg.el" "gnus-score.el" "gnus-win.el" "gnus-topic.el"
-                "nnmail.el" "message.el"))
+                "nnmail.el" "nntp.el" "message.el"))
        (point (point))
        file expr olist sym)
     (gnus-message 4 "Please wait while we snoop your variables...")
-    (sit-for 0)
     ;; Go through all the files looking for non-default values for variables.
     (save-excursion
+      (sit-for 0)
       (set-buffer (gnus-get-buffer-create " *gnus bug info*"))
       (while files
        (erase-buffer)
@@ -1015,8 +1106,7 @@ The source file has to be in the Emacs load path."
            (goto-char (point-min))
            (while (setq expr (ignore-errors (read (current-buffer))))
              (ignore-errors
-               (and (or (eq (car expr) 'defvar)
-                        (eq (car expr) 'defcustom))
+               (and (memq (car expr) '(defvar defcustom defvoo))
                     (stringp (nth 3 expr))
                     (or (not (boundp (nth 1 expr)))
                         (not (equal (eval (nth 2 expr))
@@ -1024,7 +1114,7 @@ The source file has to be in the Emacs load path."
                     (push (nth 1 expr) olist)))))))
       (kill-buffer (current-buffer)))
     (when (setq olist (nreverse olist))
-      (insert "------------------ Environment follows ------------------\n\n"))
+      (insert ";----------------- Environment follows ------------------\n\n"))
     (while olist
       (if (boundp (car olist))
          (condition-case ()
@@ -1040,13 +1130,17 @@ The source file has to be in the Emacs load path."
             (format "(setq %s 'whatever)\n" (car olist))))
        (insert ";; (makeunbound '" (symbol-name (car olist)) ")\n"))
       (setq olist (cdr olist)))
-    (insert "\n\n")
     ;; Remove any control chars - they seem to cause trouble for some
     ;; mailers.  (Byte-compiled output from the stuff above.)
     (goto-char point)
     (while (re-search-forward "[\000-\010\013-\037\200-\237]" nil t)
       (replace-match (format "\\%03o" (string-to-char (match-string 0)))
-                    t t))))
+                    t t))
+    ;; Break MIME tags purposely.
+    (goto-char point)
+    (while (re-search-forward mime-edit-tag-regexp nil t)
+      (goto-char (1+ (match-beginning 0)))
+      (insert "X"))))
 
 ;;; Treatment of rejected articles.
 ;;; Bounced mail.
@@ -1073,6 +1167,21 @@ this is a reply."
 
 ;;; Gcc handling.
 
+(defun gnus-inews-group-method (group)
+  (cond ((and (null (gnus-get-info group))
+             (eq (car gnus-message-archive-method)
+                 (car
+                  (gnus-server-to-method
+                   (gnus-group-method group)))))
+        ;; If the group doesn't exist, we assume
+        ;; it's an archive group...
+        gnus-message-archive-method)
+       ;; Use the method.
+       ((gnus-info-method (gnus-get-info group))
+        (gnus-info-method (gnus-get-info group)))
+       ;; Find the method.
+       (t (gnus-group-method group))))
+
 ;; Do Gcc handling, which copied the message over to some group.
 (defun gnus-inews-do-gcc (&optional gcc)
   (interactive)
@@ -1087,25 +1196,12 @@ this is a reply."
          (when gcc
            (message-remove-header "gcc")
            (widen)
-           (setq groups (message-tokenize-header gcc " ,"))
+           (setq groups (message-unquote-tokens
+                          (message-tokenize-header gcc " ,")))
            ;; Copy the article over to some group(s).
            (while (setq group (pop groups))
              (gnus-check-server
-              (setq method
-                    (cond ((and (null (gnus-get-info group))
-                                (eq (car gnus-message-archive-method)
-                                    (car
-                                     (gnus-server-to-method
-                                      (gnus-group-method group)))))
-                           ;; If the group doesn't exist, we assume
-                           ;; it's an archive group...
-                           gnus-message-archive-method)
-                          ;; Use the method.
-                          ((gnus-info-method (gnus-get-info group))
-                           (gnus-info-method (gnus-get-info group)))
-                          ;; Find the method.
-                          (t (gnus-group-method group)))))
-             (gnus-check-server method)
+              (setq method (gnus-inews-group-method group)))
              (unless (gnus-request-group group t method)
                (gnus-request-create-group group method))
              (save-excursion
@@ -1146,6 +1242,7 @@ this is a reply."
         (group (or group gnus-newsgroup-name ""))
         (gcc-self-val
          (and gnus-newsgroup-name
+              (not (equal gnus-newsgroup-name ""))
               (gnus-group-find-parameter
                gnus-newsgroup-name 'gcc-self)))
         result
@@ -1298,37 +1395,42 @@ this is a reply."
       (setq results (delq name (delq address results)))
       (make-local-variable 'message-setup-hook)
       (dolist (result results)
-       (when (cdr result)
-         (add-hook 'message-setup-hook
-                   (cond
-                    ((eq 'eval (car result))
-                     'ignore)
-                    ((eq 'body (car result))
-                     `(lambda ()
-                        (save-excursion
-                          (message-goto-body)
-                          (insert ,(cdr result)))))
-                    ((eq 'signature (car result))
-                     (set (make-local-variable 'message-signature) nil)
-                     (set (make-local-variable 'message-signature-file) nil)
+       (add-hook 'message-setup-hook
+                 (cond
+                  ((eq 'eval (car result))
+                   'ignore)
+                  ((eq 'body (car result))
+                   `(lambda ()
+                      (save-excursion
+                        (message-goto-body)
+                        (insert ,(cdr result)))))
+                  ((eq 'signature (car result))
+                   (set (make-local-variable 'message-signature) nil)
+                   (set (make-local-variable 'message-signature-file) nil)
+                   (if (not (cdr result))
+                       'ignore
                      `(lambda ()
                         (save-excursion
                           (let ((message-signature ,(cdr result)))
                             (when message-signature
-                              (message-insert-signature))))))
-                    (t
-                     (let ((header
-                            (if (symbolp (car result))
-                                (capitalize (symbol-name (car result)))
-                              (car result))))
-                       `(lambda ()
-                          (save-excursion
-                            (message-remove-header ,header)
-                            (message-goto-eoh)
-                            (insert ,header ": " ,(cdr result) "\n")))))))))
+                              (message-insert-signature)))))))
+                  (t
+                   (let ((header
+                          (if (symbolp (car result))
+                              (capitalize (symbol-name (car result)))
+                            (car result))))
+                     `(lambda ()
+                        (save-excursion
+                          (message-remove-header ,header)
+                          (let ((value ,(cdr result)))
+                            (when value
+                              (message-goto-eoh)
+                              (insert ,header ": " value "\n"))))))))))
       (when (or name address)
        (add-hook 'message-setup-hook
                  `(lambda ()
+                    (set (make-local-variable 'user-mail-address)
+                         ,(or (cdr address) user-mail-address))
                     (let ((user-full-name ,(or (cdr name) (user-full-name)))
                           (user-mail-address
                            ,(or (cdr address) user-mail-address)))
index 7e8a862..6d196b4 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 
 (require 'gnus)
 (require 'nnmail)
   :type '(repeat (string :tag "Group")))
 
 (defcustom gnus-nocem-issuers
-  '("AutoMoose-1" "Automoose-1"                ; CancelMoose[tm]
-    "rbraver@ohww.norman.ok.us"                ; Robert Braver
-    "clewis@ferret.ocunix.on.ca"       ; Chris Lewis
-    "jem@xpat.com"                     ; Despammer from Korea
-    "snowhare@xmission.com"            ; Benjamin "Snowhare" Franz
-    "red@redpoll.mrfs.oh.us (Richard E. Depew)" ; ARMM! ARMM!
-    )
+  '("AutoMoose-1"                      ; CancelMoose[tm]
+    "clewis@ferret.ocunix"             ; Chris Lewis
+    "cosmo.roadkill"
+    "SpamHippo"
+    "hweede@snafu.de")
   "*List of NoCeM issuers to pay attention to.
 
-This can also be a list of `(ISSUER CONDITIONS)' elements."
+This can also be a list of `(ISSUER CONDITION ...)' elements.
+
+See <URL:http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html> for an
+issuer registry."
   :group 'gnus-nocem
   :type '(repeat (choice string sexp)))
 
@@ -84,6 +87,19 @@ matches an previously scanned and verified nocem message."
   :group 'gnus-nocem
   :type 'boolean)
 
+(defcustom gnus-nocem-check-article-limit 500
+  "*If non-nil, the maximum number of articles to check in any NoCeM group."
+  :group 'gnus-nocem
+  :type '(choice (const :tag "unlimited" nil)
+                (integer 1000)))
+
+(defcustom gnus-nocem-check-from t
+  "Non-nil means check for valid issuers in message bodies.
+Otherwise don't bother fetching articles unless their author matches a
+valid issuer, which is much faster if you are selective about the issuers."
+  :group 'gnus-nocem
+  :type 'boolean)
+
 ;;; Internal variables
 
 (defvar gnus-nocem-active nil)
@@ -167,6 +183,18 @@ matches an previously scanned and verified nocem message."
                  ;; are not allowed to have references, so we can
                  ;; ignore scanning followups.
                  (and (string-match "@@NCM" (mail-header-subject header))
+                      (and gnus-nocem-check-from
+                           (let ((case-fold-search t))
+                             (catch 'ok
+                               (mapcar
+                                (lambda (author)
+                                  (if (consp author)
+                                      (setq author (car author)))
+                                  (if (string-match
+                                       author (mail-header-from header))
+                                      (throw 'ok t)))
+                                gnus-nocem-issuers)
+                               nil)))
                       (or gnus-nocem-liberal-fetch
                           (and (or (string= "" (mail-header-references
                                                 header))
@@ -174,8 +202,10 @@ matches an previously scanned and verified nocem message."
                                (not (member (mail-header-message-id header)
                                             gnus-nocem-seen-message-ids))))
                       (push header check-headers)))
-               (let ((i 0)
-                     (len (length check-headers)))
+               (let* ((i 0)
+                      (check-headers
+                       (last check-headers gnus-nocem-check-article-limit))
+                      (len (length check-headers)))
                  (dolist (h check-headers)
                    (gnus-message
                     7 "Checking article %d in %s for NoCeM (%d of %d)..."
@@ -193,6 +223,7 @@ matches an previously scanned and verified nocem message."
   "Check whether the current article is an NCM article and that we want it."
   ;; Get the article.
   (let ((date (mail-header-date header))
+       (gnus-newsgroup-name group)
        issuer b e type)
     (when (or (not date)
              (time-less-p
index 0510161..0e4d1a2 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-offline.el --- To process mail & news at offline environment.
 
-;;; Copyright (C) 1998 Tatsuya Ichikawa
-;;;                    Yukihiro Ito
+;;; Copyright (C) 1998, 2001 Tatsuya Ichikawa
+;;; Copyright (C) 1998, 2001 Yukihiro Ito
 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
 ;;;         Yukihiro Ito <ito@rs.civil.tohoku.ac.jp>
 ;;;         Hidekazu Nakamura <u90121@uis-inf.co.jp>
 
 (eval '(run-hooks 'gnus-offline-load-hook))
 
-(eval-when-compile (require 'cl) (require 'static))
+(eval-when-compile (require 'cl))
+
+(eval-when-compile
+  (require 'static)
+  (require 'gnus-agent)
+  (require 'gnus-group))
 (require 'custom)
 (require 'easymenu)
 (provide 'gnus-offline)
 
-(eval-after-load "eword-decode"
-  '(mime-set-field-decoder 'X-Gnus-Offline-Backend nil nil))
-
 (defgroup gnus-offline nil
   "Offline backend utility for Gnus."
   :prefix "gnus-offline-"
                                       gnus-offline-version-number))
 
 (eval-when-compile
-  (mapc
-   (lambda (symbol)
-     (unless (boundp symbol)
-       (make-local-variable symbol)
-       (eval (list 'setq symbol nil))))
-   '(nnagent-version
-     nnspool-version
-     msspool-news-server
-     msspool-news-service
-     miee-popup-menu
-     gnus-group-toolbar)))
-
-(static-if (eq system-type 'windows-nt)
+  (defvar nnagent-version)
+  (defvar nnspool-version)
+  (defvar msspool-news-server)
+  (defvar msspool-news-service)
+  (defvar miee-popup-menu))
+
+(if (featurep 'meadow)
     (define-process-argument-editing "/hang\\.exe\\'"
       (lambda (x)
        (general-process-argument-editing-function
@@ -189,7 +185,7 @@ If mail , gnus-offline only fetch mail articles.
   :group 'gnus-offline
   :type 'function)
 
-(defcustom gnus-offline-agent-automatic-expire t
+(defcustom gnus-offline-auto-expire t
   "*Non-nil means expire articles on every session."
   :group 'gnus-offline
   :type 'boolean)
@@ -340,29 +336,118 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
 
 ;;; Functions
 
-(defun gnus-offline-get-message (symbol &optional lang)
+;; Inline functions.
+(defsubst gnus-offline-gettext (symbol &optional lang)
   (setq lang (or lang gnus-offline-lang))
   (or
    (cdr (assq symbol (symbol-value
                      (intern (format "gnus-offline-resource-%s" lang)))))
    (cdr (assq symbol gnus-offline-resource-en))))
 
+(defsubst gnus-offline-set-online-sendmail-function ()
+  "*Initialize sendmail-function when plugged status."
+  (if (eq gnus-offline-MTA-type 'smtp)
+      (setq message-send-mail-function 'message-send-mail-with-smtp)
+    (setq message-send-mail-function 'message-send-mail-with-sendmail)))
+
+(defsubst gnus-offline-set-offline-sendmail-function ()
+  "*Initialize sendmail-function when unplugged status."
+  (cond ((eq gnus-offline-drafts-queue-type 'miee)
+        (if (eq gnus-offline-news-fetch-method 'nnagent)
+            (setq gnus-agent-send-mail-function
+                  'sendmail-to-spool-in-gnspool-format))
+        (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format))
+       (t
+        (setq gnus-agent-send-mail-function
+              (gnus-offline-set-online-sendmail-function)
+              message-send-mail-function 'gnus-agent-send-mail))))
+
+(defsubst gnus-offline-set-offline-post-news-function ()
+  "*Initialize sendnews-function when unplugged status."
+  (if (eq gnus-offline-drafts-queue-type 'miee)
+      (setq message-send-news-function 'gnspool-request-post)))
+
+(defsubst gnus-offline-set-online-post-news-function ()
+  "*Initialize sendnews-function when plugged status."
+  (setq message-send-news-function 'message-send-news-with-gnus))
+
+(defsubst gnus-offline-disable-fetch-mail ()
+  "*Set do not fetch mail."
+  (setq mail-sources nil
+       nnmail-spool-file nil))
+
+(defsubst gnus-offline-enable-fetch-mail ()
+  "*Set to fetch mail."
+  (setq gnus-offline-mail-fetch-method 'nnmail)
+  (setq mail-sources gnus-offline-mail-source))
+
+(defsubst gnus-offline-enable-fetch-news ()
+  "*Set to fetch news."
+  (if (eq gnus-offline-news-fetch-method 'nnagent)
+      (progn
+       (setq gnus-agent-handle-level gnus-level-subscribed)
+       (gnus-agent-toggle-plugged t))))
+
+(when (featurep 'gnus-ofsetup)
+  ;; Advice to Gnus functions.
+  (defadvice gnus-group-get-new-news (before gnus-offline-advice
+                                            activate preactivate)
+    "When called interactively, dial up and get online automatically."
+    (when (interactive-p)
+      (run-hooks 'gnus-offline-before-online-hook)
+      (if (and (memq 'connect gnus-offline-auto-ppp)
+              (functionp gnus-offline-dialup-function))
+         (funcall gnus-offline-dialup-function))
+      (gnus-offline-get-new-news-function)))
+
+  (defadvice gnus-agent-toggle-plugged (around gnus-offline-advice
+                                              activate preactivate)
+    "Also toggle gnus-offline `connected--disconnected' status."
+    (interactive (list (not gnus-offline-connected)))
+    (cond ((ad-get-arg 0)
+          (setq gnus-offline-connected (ad-get-arg 0))
+          ad-do-it
+          ;; Set send mail/news function to offline functions.
+          (gnus-offline-set-online-sendmail-function)
+          (gnus-offline-set-online-post-news-function))
+         (t
+          ;; Set to offline status
+          (gnus-offline-set-unplugged-state))))
+
+  (defadvice gnus-agent-expire (around gnus-offline-advice activate preactivate)
+    "Advice not to delete new articles."
+    (cond ((eq 0 gnus-agent-expire-days)
+          (let (gnus-agent-expire-all)
+            ad-do-it))
+         (t
+          ad-do-it)))
+
+  (defadvice gnus-agent-mode (around gnus-offline-advice activate preactivate)
+    "Advice not to close PPP connection."
+    (let (gnus-offline-hangup-function)
+      ad-do-it)))
+
 ;;
 ;; Setting up...
 ;;
 (defun gnus-offline-setup ()
   "*Initialize gnus-offline function"
 
-  ;; Menu and keymap
-  (gnus-offline-define-menu-and-key)
+  (when (eq gnus-offline-drafts-queue-type 'agent)
+    (setq gnus-offline-connected gnus-plugged))
+
+  (gnus-offline-processed-by-timer)
+  (gnus-offline-error-check)
 
   ;; To transfer Mail/News function.
-  (cond ((eq gnus-offline-mail-treat-environ 'offline)
+  (cond        ((or (and (eq 'gnus-offline-drafts-queue-type 'agent)
+                 gnus-offline-connected)
+            (eq gnus-offline-mail-treat-environ 'online))
         ;; send mail under offline environ.
-        (gnus-offline-set-offline-sendmail-function))
-       ((eq gnus-offline-mail-treat-environ 'online)
+        (gnus-offline-set-online-sendmail-function))
+       (t
         ;; send mail under offline environ.
-        (gnus-offline-set-online-sendmail-function))))
+        (gnus-offline-set-offline-sendmail-function))))
 
 ;;
 ;; Setting Error check.
@@ -375,57 +460,17 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
                        (featurep 'nnagent))
             (set-buffer (gnus-get-buffer-create buffer))
             (erase-buffer)
-            (insert (gnus-offline-get-message 'error-check-1))
+            (insert (gnus-offline-gettext 'error-check-1))
             (pop-to-buffer buffer)))
 
          ((eq gnus-offline-news-fetch-method 'nnspool)
           (unless (featurep 'nnspool)
             (set-buffer (gnus-get-buffer-create buffer))
             (erase-buffer)
-            (insert (gnus-offline-get-message 'error-check-2))
+            (insert (gnus-offline-gettext 'error-check-2))
             (pop-to-buffer buffer)))
          (t
           nil))))
-;;
-;;
-(defun gnus-offline-set-offline-sendmail-function ()
-  "*Initialize sendmail-function when unplugged status."
-  (cond ((eq gnus-offline-drafts-queue-type 'miee)
-        (if (eq gnus-offline-news-fetch-method 'nnagent)
-            (setq gnus-agent-send-mail-function
-                  'sendmail-to-spool-in-gnspool-format))
-        (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format))
-       (t
-        (setq gnus-agent-send-mail-function
-              (gnus-offline-set-online-sendmail-function)
-              message-send-mail-function 'gnus-agent-send-mail))))
-;;
-(defun gnus-offline-set-online-sendmail-function ()
-  "*Initialize sendmail-function when plugged status."
-  (if (eq gnus-offline-MTA-type 'smtp)
-      (setq message-send-mail-function 'message-send-mail-with-smtp)
-    (setq message-send-mail-function 'message-send-mail-with-sendmail)))
-;;
-(defun gnus-offline-set-offline-post-news-function ()
-  "*Initialize sendnews-function when unplugged status."
-  (if (eq gnus-offline-drafts-queue-type 'miee)
-      (setq message-send-news-function 'gnspool-request-post)))
-;;
-(defun gnus-offline-set-online-post-news-function ()
-  "*Initialize sendnews-function when plugged status."
-  (setq message-send-news-function 'message-send-news-with-gnus))
-;;
-;; Get new news jobs. (gnus-agent and nnspool)
-;;
-(defun gnus-offline-gnus-get-new-news (&optional arg)
-  "*Override function \"gnus-group-get-new-news\"."
-  (interactive "P")
-  (run-hooks 'gnus-offline-before-online-hook)
-  (if (and (memq 'connect gnus-offline-auto-ppp)
-          (functionp gnus-offline-dialup-function))
-      (funcall gnus-offline-dialup-function))
-  (gnus-offline-get-new-news-function)
-  (gnus-group-get-new-news arg))
 
 ;;
 ;; dialup...
@@ -435,11 +480,11 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
   ;; Dialup if gnus-offline-dialup-program is specified
   (if (stringp gnus-offline-dialup-program)
       (progn
-       (message (gnus-offline-get-message 'connect-server-1))
+       (message "%s" (gnus-offline-gettext 'connect-server-1))
        (apply 'call-process gnus-offline-dialup-program nil nil nil
               gnus-offline-dialup-program-arguments)
        (sleep-for 1)
-       (message (gnus-offline-get-message 'connect-server-2)))))
+       (message "%s" (gnus-offline-gettext 'connect-server-2)))))
 
 ;;
 ;; Jobs before get new news , send mail and post news.
@@ -456,7 +501,7 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
   ;; Set send mail/news functions to online functions.
   (gnus-offline-set-online-sendmail-function)
   (gnus-offline-set-online-post-news-function)
-  (message (gnus-offline-get-message 'get-new-news-function-1))
+  (message "%s" (gnus-offline-gettext 'get-new-news-function-1))
 
   ;; fetch only news
   (if (eq gnus-offline-articles-to-fetch 'news)
@@ -513,63 +558,35 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
 ;;
 (defun gnus-offline-after-get-new-news ()
   "*After getting news and mail jobs."
-  (if (memq gnus-offline-articles-to-fetch '(both mail))
-      (progn
-       ;; Mail/both
-       ;; send mail/news in spool
-       (gnus-offline-empting-spool)
-       (if (eq gnus-offline-articles-to-fetch 'mail)
-           (progn
-             ;; Send only mail and hang up...
-             (if gnus-offline-connected
-                 (gnus-offline-set-unplugged-state))
-             ;; Disable fetch mail.
-             (gnus-offline-disable-fetch-mail)
-             (gnus-offline-after-jobs-done)))))
-
-  ;; News/Both
-  (if (memq gnus-offline-articles-to-fetch '(both news))
-      (progn
-       (if gnus-offline-connected
-           (cond ((eq gnus-offline-news-fetch-method 'nnagent)
-                  ;; Get New News (gnus-agent)
-                  (gnus-agent-toggle-plugged t)
-
-                  ;; fetch articles
-                  (gnus-agent-fetch-session)
-
-                  ;; Hang Up line. then set to offline status.
-                  (gnus-offline-set-unplugged-state)
-
-                  ;; All online jobs has done.
-                  (gnus-offline-after-jobs-done))
-                 (t
-                  (if (eq gnus-offline-news-fetch-method 'nnspool)
-                      ;; Get New News (nnspool)
-                      (gnspool-get-news))))))))
-;;
-;; Disable fetch mail
-;;
-(defun gnus-offline-disable-fetch-mail ()
-  "*Set do not fetch mail."
-  (setq mail-sources nil
-       nnmail-spool-file nil))
-;;
-;; Enable fetch mail
-;;
-(defun gnus-offline-enable-fetch-mail ()
-  "*Set to fetch mail."
-  (setq gnus-offline-mail-fetch-method 'nnmail)
-  (setq mail-sources gnus-offline-mail-source))
-;;
-;; Enable fetch news
-;;
-(defun gnus-offline-enable-fetch-news ()
-  "*Set to fetch news."
-  (if (eq gnus-offline-news-fetch-method 'nnagent)
-      (progn
-       (setq gnus-agent-handle-level gnus-level-subscribed)
-       (gnus-agent-toggle-plugged t))))
+  (cond (gnus-offline-connected
+        (when (memq gnus-offline-articles-to-fetch '(both mail))
+          ;; Mail/both
+          ;; send mail/news in spool
+          (gnus-offline-empting-spool)
+          (when (eq gnus-offline-articles-to-fetch 'mail)
+            ;; Send only mail and hang up...
+            (if gnus-offline-connected
+                (gnus-offline-set-unplugged-state))
+            ;; Disable fetch mail.
+            (gnus-offline-disable-fetch-mail)
+            (gnus-offline-after-jobs-done)))
+        (when (memq gnus-offline-articles-to-fetch '(both news))
+          ;; News/Both
+          (cond ((eq gnus-offline-news-fetch-method 'nnagent)
+                 ;; Get New News (gnus-agent)
+                 (gnus-agent-toggle-plugged t)
+                 ;; fetch articles
+                 (gnus-agent-fetch-session)
+                 ;; Hang Up line. then set to offline status.
+                 (gnus-offline-set-unplugged-state)
+                 ;; All online jobs has done.
+                 (gnus-offline-after-jobs-done))
+                (t
+                 (if (eq gnus-offline-news-fetch-method 'nnspool)
+                     ;; Get New News (nnspool)
+                     (gnspool-get-news))))))
+       (t
+        nil)))
 \f
 ;;
 ;; Add your custom header.
@@ -606,21 +623,6 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
 
 \f
 ;;
-;; Toggle plugged/unplugged
-;;
-(defun gnus-offline-toggle-plugged (plugged)
-  "*Override function \"Jj\" - gnus-agent-toggle-plugged."
-  (interactive (list (not gnus-offline-connected)))
-  (if plugged
-      (progn
-       (setq gnus-offline-connected plugged)
-       (gnus-agent-toggle-plugged plugged)
-       ;; Set send mail/news function to offline functions.
-       (gnus-offline-set-online-sendmail-function)
-       (gnus-offline-set-online-post-news-function))
-    ;; Set to offline status
-    (gnus-offline-set-unplugged-state)))
-;;
 ;; Function of hang up line.
 ;;
 (defun gnus-offline-set-unplugged-state ()
@@ -632,7 +634,7 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
       (funcall gnus-offline-hangup-function))
   (setq gnus-offline-connected nil)
   (if (eq gnus-offline-news-fetch-method 'nnagent)
-      (gnus-agent-toggle-plugged nil))
+      (ad-Orig-gnus-agent-toggle-plugged nil))
 
   ;; Set send mail/news function to offline functions.
   (gnus-offline-set-offline-sendmail-function)
@@ -644,11 +646,11 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
 ;;
 (defun gnus-offline-hangup-line ()
   "*Hangup line function."
-  (message (gnus-offline-get-message 'hangup-line-1))
+  (message "%s" (gnus-offline-gettext 'hangup-line-1))
   (if (stringp gnus-offline-hangup-program)
       (apply 'start-process "hup" nil gnus-offline-hangup-program
             gnus-offline-hangup-program-arguments))
-  (message (gnus-offline-get-message 'hangup-line-2)))
+  (message "%s" (gnus-offline-gettext 'hangup-line-2)))
 ;;
 ;; Hang Up line routine whe using nnspool
 ;;
@@ -664,14 +666,16 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
   (run-hooks 'gnus-offline-after-online-hook)
   (if (eq gnus-offline-articles-to-fetch 'mail)
       (gnus-offline-restore-mail-group-level))
-  (if (eq gnus-offline-news-fetch-method 'nnagent)
-      (gnus-offline-agent-expire))
-  (if (and (featurep 'xemacs)
-          (fboundp 'play-sound-file))
-      (ding nil 'drum)
+  (if (and (eq gnus-offline-news-fetch-method 'nnagent)
+          gnus-offline-auto-expire)
+      (gnus-agent-expire))
+  (static-if (featurep 'xemacs)
+      (if (fboundp 'play-sound-file)
+         (ding nil 'drum)
+       (ding))
     (ding))
   (gnus-group-save-newsrc)
-  (message (gnus-offline-get-message 'after-jobs-done-1)))
+  (message "%s" (gnus-offline-gettext 'after-jobs-done-1)))
 
 \f
 ;;
@@ -683,43 +687,46 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
   (let ((keys (key-description (this-command-keys)))
        menu title str)
     (cond ((or (string= "misc-user" keys)
+              (string= "S-mouse-2" keys)
               (string-match "^menu-bar" keys)
               (string-match "^mouse" keys))
-          (setq title (gnus-offline-get-message 'menu-3))
+          (setq title (gnus-offline-gettext 'menu-3))
           (setq menu
-                (cons
-                 title
-                 (gnus-offline-get-menu-items
-                  '((set-auto-ppp-menu-1
-                     (progn
-                       (setq gnus-offline-auto-ppp '(connect disconnect))
-                       (message (gnus-offline-get-message 'set-auto-ppp-1)))
-                     t)
-                    (set-auto-ppp-menu-2
-                     (progn
-                       (setq gnus-offline-auto-ppp '(connect))
-                       (message (gnus-offline-get-message 'set-auto-ppp-2)))
-                     t)
-                    (set-auto-ppp-menu-3
-                     (progn
-                       (setq gnus-offline-auto-ppp nil)
-                       (message (gnus-offline-get-message 'set-auto-ppp-3)))
-                     t)))))
+                (cons title
+                      (gnus-offline-get-menu-items
+                       '((set-auto-ppp-menu-1
+                          (progn
+                            (setq gnus-offline-auto-ppp '(connect disconnect))
+                            (message "%s"
+                                     (gnus-offline-gettext 'set-auto-ppp-1)))
+                          t)
+                         (set-auto-ppp-menu-2
+                          (progn
+                            (setq gnus-offline-auto-ppp '(connect))
+                            (message "%s"
+                                     (gnus-offline-gettext 'set-auto-ppp-2)))
+                          t)
+                         (set-auto-ppp-menu-3
+                          (progn
+                            (setq gnus-offline-auto-ppp nil)
+                            (message "%s"
+                                     (gnus-offline-gettext 'set-auto-ppp-3)))
+                          t)))))
           (gnus-offline-popup menu title))
          (t
           (cond ((eq gnus-offline-auto-ppp nil)
                  (setq gnus-offline-auto-ppp '(connect disconnect))
-                 (setq str (gnus-offline-get-message 'set-auto-ppp-1)))
+                 (setq str (gnus-offline-gettext 'set-auto-ppp-1)))
                 ((memq 'connect gnus-offline-auto-ppp)
                  (cond ((memq 'disconnect gnus-offline-auto-ppp)
                         (setq gnus-offline-auto-ppp '(connect))
                         (setq str
-                              (gnus-offline-get-message 'set-auto-ppp-2)))
+                              (gnus-offline-gettext 'set-auto-ppp-2)))
                        (t
                         (setq gnus-offline-auto-ppp nil)
                         (setq str
-                              (gnus-offline-get-message 'set-auto-ppp-3))))))
-          (message str)))))
+                              (gnus-offline-gettext 'set-auto-ppp-3))))))
+          (message "%s" str)))))
 ;;
 ;; Toggle offline/online to send mail.
 ;;
@@ -731,29 +738,29 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
        ;; Sending mail under online environ.
        (gnus-offline-set-online-sendmail-function)
        (setq gnus-offline-mail-treat-environ 'online)
-       (message (gnus-offline-get-message 'toggle-on/off-send-mail-1)))
+       (message "%s" (gnus-offline-gettext 'toggle-on/off-send-mail-1)))
     ;; Sending mail under offline environ.
     (gnus-offline-set-offline-sendmail-function)
     (setq gnus-offline-mail-treat-environ 'offline)
-    (message (gnus-offline-get-message 'toggle-on/off-send-mail-2))))
+    (message "%s" (gnus-offline-gettext 'toggle-on/off-send-mail-2))))
 ;;
 ;; Toggle articles to fetch ... both -> mail -> news -> both
 ;;
 (defun gnus-offline-toggle-articles-to-fetch ()
   "*Set articles to fetch... both(Mail/News) -> mail only -> News only -> both"
   (interactive)
-  (let ((string (gnus-offline-get-message 'toggle-articles-to-fetch-1))
+  (let ((string (gnus-offline-gettext 'toggle-articles-to-fetch-1))
        str)
     (cond ((eq gnus-offline-articles-to-fetch 'both)
           (setq gnus-offline-articles-to-fetch 'mail
-                str (gnus-offline-get-message 'toggle-articles-to-fetch-2)))
+                str (gnus-offline-gettext 'toggle-articles-to-fetch-2)))
          ((eq gnus-offline-articles-to-fetch 'mail)
           (setq gnus-offline-articles-to-fetch 'news
-                str (gnus-offline-get-message 'toggle-articles-to-fetch-3)))
+                str (gnus-offline-gettext 'toggle-articles-to-fetch-3)))
          (t
           (setq gnus-offline-articles-to-fetch 'both
-                str (gnus-offline-get-message 'toggle-articles-to-fetch-4))))
-    (message (format "%s %s" string str))))
+                str (gnus-offline-gettext 'toggle-articles-to-fetch-4))))
+    (message "%s %s" string str)))
 ;;
 ;; Send mail and Post news using Miee or gnus-agent.
 ;;
@@ -765,11 +772,11 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
       (progn
        (if (eq gnus-offline-mail-treat-environ 'offline)
            (progn
-             (message (gnus-offline-get-message 'empting-spool-1))
+             (message "%s" (gnus-offline-gettext 'empting-spool-1))
              ;; Using miee to send mail.
              (mail-spool-send)
-             (message (gnus-offline-get-message 'empting-spool-2))))
-       (message (gnus-offline-get-message 'empting-spool-3))
+             (message "%s" (gnus-offline-gettext 'empting-spool-2))))
+       (message "%s" (gnus-offline-gettext 'empting-spool-3))
        ;; Using miee to post news.
        (if (and (not (stringp msspool-news-server))
                 (not msspool-news-service))
@@ -777,11 +784,11 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
              (setq msspool-news-server (nth 1 gnus-select-method))
              (setq msspool-news-service 119)))
        (news-spool-post)
-       (message (gnus-offline-get-message 'empting-spool-4)))
+       (message "%s" (gnus-offline-gettext 'empting-spool-4)))
     ;; Send queued message by gnus-agent
-    (message (gnus-offline-get-message 'empting-spool-5))
+    (message "%s" (gnus-offline-gettext 'empting-spool-5))
     (gnus-group-send-drafts)
-    (message (gnus-offline-get-message 'empting-spool-6)))
+    (message "%s" (gnus-offline-gettext 'empting-spool-6)))
   ;;
   (run-hooks 'gnus-offline-after-empting-spool-hook))
 ;;
@@ -792,78 +799,46 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
   (interactive)
   (setq gnus-offline-interval-time
        (string-to-int (read-from-minibuffer
-                       (format (gnus-offline-get-message 'interval-time-1)
+                       (format (gnus-offline-gettext 'interval-time-1)
                                gnus-offline-interval-time)
                        nil)))
   (if (< gnus-offline-interval-time 2)
       (progn
-       (message (gnus-offline-get-message 'interval-time-2))
+       (message "%s" (gnus-offline-gettext 'interval-time-2))
        (setq gnus-offline-interval-time 0))
     (message
-     (format (gnus-offline-get-message 'interval-time-3)
+     (format (gnus-offline-gettext 'interval-time-3)
             gnus-offline-interval-time)))
   (gnus-offline-processed-by-timer))
-;;
-;; Expire articles using gnus-agent.
-;;
-(defun gnus-offline-agent-expire ()
-  "*Expire expirable article on News group."
-  (interactive)
-  (and gnus-offline-agent-automatic-expire
-       (if (eq 0 gnus-agent-expire-days)
-          (let (gnus-agent-expire-all)
-            (gnus-agent-expire))
-        (gnus-agent-expire))))
+
 ;;
 ;; Menu.
 ;;
 (defun gnus-offline-define-menu-and-key ()
   "*Set key and menu."
-  (if (eq gnus-offline-drafts-queue-type 'miee)
-      (static-if (featurep 'xemacs)
-         (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-miee)
-       (gnus-offline-define-menu-on-miee))
-    (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-agent))
+  (cond ((eq gnus-offline-drafts-queue-type 'miee)
+        (static-cond
+         ((featurep 'xemacs)
+          (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-miee))
+         (t
+          (gnus-offline-define-menu-on-miee))))
+       (t
+        (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-agent)))
+  ;;
   (add-hook 'gnus-group-mode-hook
-           '(lambda ()
-              (local-set-key "\C-coh" 'gnus-offline-set-unplugged-state)
-              (local-set-key "\C-cof" 'gnus-offline-toggle-articles-to-fetch)
-              (local-set-key "\C-coo" 'gnus-offline-toggle-on/off-send-mail)
-              (local-set-key "\C-cox" 'gnus-offline-set-auto-ppp)
-              (local-set-key "\C-cos" 'gnus-offline-set-interval-time)
-              (substitute-key-definition
-               'gnus-group-get-new-news 'gnus-offline-gnus-get-new-news
-               gnus-group-mode-map)
-              (if (eq gnus-offline-news-fetch-method 'nnagent)
-                  (progn
-                    (substitute-key-definition
-                     'gnus-agent-toggle-plugged 'gnus-offline-toggle-plugged
-                     gnus-agent-group-mode-map)
-                    (local-set-key "\C-coe" 'gnus-offline-agent-expire)))))
-  (if (eq gnus-offline-news-fetch-method 'nnagent)
-      (add-hook 'gnus-summary-mode-hook
-               '(lambda ()
-                  (substitute-key-definition
-                   'gnus-agent-toggle-plugged 'gnus-offline-toggle-plugged
-                   gnus-agent-summary-mode-map))))
-  (static-cond
-   ((featurep 'xemacs)
-    ;; Overwrite the toolbar spec for gnus-group-mode.
-    (add-hook 'gnus-startup-hook
-             #'(lambda ()
-                 (catch 'tag
-                   (mapc (lambda (but)
-                           (when (eq 'gnus-group-get-new-news (aref but 1))
-                             (aset but 1 'gnus-offline-gnus-get-new-news)
-                             (throw 'tag nil)))
-                         gnus-group-toolbar)))))
-   (t
-    (add-hook
-     'gnus-group-mode-hook
-     `(lambda ()
-       (define-key gnus-group-mode-map
-         ,(static-if (eq system-type 'windows-nt) [S-mouse-2] [mouse-3])
-         'gnus-offline-popup-menu))))))
+           #'(lambda ()
+               (local-set-key "\C-coh" 'gnus-offline-set-unplugged-state)
+               (local-set-key "\C-cof" 'gnus-offline-toggle-articles-to-fetch)
+               (local-set-key "\C-coo" 'gnus-offline-toggle-on/off-send-mail)
+               (local-set-key "\C-cox" 'gnus-offline-set-auto-ppp)
+               (local-set-key "\C-cos" 'gnus-offline-set-interval-time)
+               (if (eq gnus-offline-news-fetch-method 'nnagent)
+                   (local-set-key "\C-coe" 'gnus-agent-expire))
+               (static-unless (featurep 'xemacs)
+                 (local-set-key
+                  (if (eq system-type 'windows-nt) [S-mouse-2] [mouse-3])
+                  'gnus-offline-popup-menu)))))
+
 ;;
 ;;
 (defun gnus-offline-popup (menu &optional title)
@@ -907,13 +882,16 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
          (funcall func))))))
 
 (defun gnus-offline-get-menu-items (list)
-  (mapcar
-   #'(lambda (el)
-       (if (listp el)
-          (apply 'vector
-                 (cons (gnus-offline-get-message (car el)) (cdr el)))
-        el))
-   list))
+  (let (result)
+    (dolist (elem list)
+      (setq result
+           (nconc result
+                  (list (if (listp elem)
+                            (progn
+                              (setcar elem (gnus-offline-gettext (car elem)))
+                              (vconcat elem))
+                          elem)))))
+    result))
 
 (defvar gnus-offline-menu
   (gnus-offline-get-menu-items
@@ -921,7 +899,7 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
      (menu-2 gnus-offline-toggle-on/off-send-mail t)
      (menu-3 gnus-offline-set-auto-ppp t)
      "----"
-     (menu-4 gnus-offline-agent-expire
+     (menu-4 gnus-agent-expire
             (eq gnus-offline-news-fetch-method 'nnagent))
      (menu-5 gnus-offline-set-interval-time t)
      "----"
@@ -977,14 +955,24 @@ Please check your .emacs or .gnus.el to work nnspool fine.")
 ;; Timer Function
 (defun gnus-offline-processed-by-timer ()
   "*Set timer interval."
-  (if (and (> gnus-offline-interval-time 0)
-          (not gnus-offline-connected))
-      ;; Timer call
-      (gnus-demon-add-handler 'gnus-offline-gnus-get-new-news
-                             gnus-offline-interval-time
-                             gnus-offline-interval-time))
-  (if (= gnus-offline-interval-time 0)
-      (gnus-demon-remove-handler 'gnus-offline-gnus-get-new-news t)))
+  (let ((func (lambda () (call-interactively 'gnus-group-get-new-news)))
+       (time gnus-offline-interval-time))
+    (cond ((and (> time 0) (not gnus-offline-connected))
+          ;; Timer call
+          (gnus-demon-add-handler func time time))
+         ((= gnus-offline-interval-time 0)
+          (gnus-demon-remove-handler func t)))))
+;;
+;; Code for making Gnus and Gnus Offline cooperate with each other.
+;;
+
+;; Display `X-Gnus-Offline-Backend' message header aesthetically.
+(eval-after-load "eword-decode"
+  '(mime-set-field-decoder 'X-Gnus-Offline-Backend nil nil))
+
+;; Enable key and menu definitions here.
+(eval '(funcall 'gnus-offline-define-menu-and-key))
+
 ;;
 ;;
 ;;; gnus-offline.el ends here
index e6d05a1..15a3eeb 100644 (file)
@@ -1,37 +1,42 @@
 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
-;;;
-;;; Copyright (C) 1998 Tatsuya Ichikawa
-;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
-;;;      Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
-;;;
-;;; This file is part of Semi-gnus.
-;;;
-;;; 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:
-;;; How to use.
-;;;
-;;;      M-x load[RET]gnus-ofsetup
-;;;      M-x gnus-setup-for-offline
-;;;
+
+;; Copyright (C) 1998, 2001 Tatsuya Ichikawa
+
+;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+;;     Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
+;;
+;; This file is part of Semi-gnus.
+
+;; 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:
+
+;; How to use.
+;;
+;;      M-x load[RET]gnus-ofsetup
+;;      M-x gnus-setup-for-offline
+;;
 
 ;;; Code:
 
 (eval-when-compile (require 'cl))
 
+(require 'read-passwd)
+
 (eval-and-compile
   (defvar gnus-offline-lang
     (cond ((and (featurep 'meadow)
@@ -45,6 +50,7 @@
     "This variable decides which language will be used for display."))
 
 (eval-when-compile
+  (require 'gnus)
   (require 'gnus-offline))
 
 (defvar gnus-offline-setting-file
@@ -74,7 +80,7 @@
            (if (not (file-exists-p news-spool))
                (make-directory news-spool t)))
        (error
-        (error (gnus-ofsetup-get-message 'prepare-miee-1))))))
+        (error (gnus-ofsetup-gettext 'prepare-miee-1))))))
 
   (defvar gnus-ofsetup-update-setting-file
     '((save-excursion
        (insert "(setq gnus-offline-MTA-type '"
                (prin1-to-string MTA-type) ")\n")
 
-       ;; Offline setting for gnus-nntp-*
-       (insert "(setq gnus-nntp-service nil)\n")
-       (insert "(setq gnus-nntp-server nil)\n")
-
        ;; Write setting about hooks.
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-group-mode-hook"
-                       "'gnus-offline-processed-by-timer t)"))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-group-mode-hook"
-                       "'gnus-offline-error-check t)"))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-after-getting-new-news-hook"
-                       "'gnus-offline-after-get-new-news)"))
        (when (eq news-method 'nnspool)
          (insert (format "%s %s %s\n"
                          "(add-hook"
                          "'gnus-before-startup-hook"
                          "(lambda () (setq nnmail-spool-file nil)
            (setq mail-sources nil)))")))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'message-send-hook"
-                       "'gnus-offline-message-add-header)"))
-       (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
-       (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
 
        ;; Write stting about mail-source.el
        (insert "(setq gnus-offline-mail-source '"
                (prin1-to-string mail-source) ")\n")
        (insert "(setq mail-sources gnus-offline-mail-source)\n")
-       (insert "(require 'read-passwd)\n")
-       (insert "(setq mail-source-read-passwd 'read-pw-read-passwd)\n")
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-setup-news-hook"
-                       "'read-pw-set-mail-source-passwd-cache)"))
        (if save-passwd
            (insert "(add-hook 'gnus-setup-news-hook
          (lambda ()
     (setup-8 . "Use MIEE post/send message ")
     (setup-9 . "News spool directory for sending: ")
     (setup-10 . "Mail spool directory for sending: ")
-    (setup-11 . "How many e-mail address do you have: ")
-    (setup-12 . "Mail Account name : ")
-    (setup-13 . "Mail server : ")
-    (setup-14 . "Authentification Method (TAB to completion): ")
-    (setup-15 . "Do you use pop3.el to fetch mail? ")
-    (setup-16 . "movemail program name: ")
-    (setup-17 . "movemail options: ")
-    (setup-18 . "Do you save password information to newsrc file? ")
+    (setup-11 . "How many mail sources will get mails from? : ")
+    (setup-12 . "What type of the mail source? ")
+    (setup-13 . "Mail Account name : ")
+    (setup-14 . "Mail server : ")
+    (setup-15 . "Authentification Method ")
+    (setup-16 . "Do you use pop3.el to fetch mail? ")
+    (setup-17 . "movemail program name: ")
+    (setup-18 . "movemail options: ")
+    (setup-19 . "What network stream? ")
+    (setup-20 . "File: ")
+    (setup-21 . "Directory: ")
+    (setup-22 . "Do you save password information to newsrc file? ")
+
     (param-news-method-1 . "News Method")
     (param-news-method-2 . "Gnus Agent")
     (param-news-method-3 . "nnspool")
@@ -302,14 +285,18 @@ restarted.")
     (setup-8 . "\e$B%a%C%;!<%8$NAw?.$K\e(B MIEE \e$B$r;H$$$^$9$+\e(B? ")
     (setup-9 . "\e$B%K%e!<%9$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
     (setup-10 . "\e$B%a!<%k$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
-    (setup-11 . "\e$B%a!<%k%"%+%&%s%H$N?t$rEz$($F$/$@$5$$\e(B: ")
-    (setup-12 . "\e$B%a!<%k$N%"%+%&%s%HL>\e(B: ")
-    (setup-13 . "\e$B$=$N%"%+%&%s%H$N$"$k%a!<%k%5!<%PL>\e(B: ")
-    (setup-14 . "\e$B$=$N%5!<%P$G$NG'>ZJ}<0$O\e(B? (TAB \e$B$GJd40$7$^$9\e(B): ")
-    (setup-15 . "\e$B%a!<%k$N<u?.$K$O\e(B pop3.el \e$B$r;H$$$^$9$+\e(B? ")
-    (setup-16 . "movemail \e$B%W%m%0%i%`$NL>A0\e(B: ")
-    (setup-17 . "movemail \e$B%W%m%0%i%`$KEO$90z?t\e(B: ")
-    (setup-18 . "newsrc \e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$7$^$9$+\e(B? ")
+    (setup-11 . "\e$B@_Dj$9$k%a!<%k<hF@@h$N?t$O\e(B? (\e$B8e$GDI2C$G$-$^$9\e(B): ")
+    (setup-12 . "\e$B%a!<%k<hF@@h$N%?%$%W$O\e(B? ")
+    (setup-13 . "\e$B%a!<%k$N%"%+%&%s%HL>\e(B: ")
+    (setup-14 . "\e$B$=$N%"%+%&%s%H$N$"$k%a!<%k%5!<%PL>\e(B: ")
+    (setup-15 . "\e$BG'>ZJ}<0$O\e(B? ")
+    (setup-16 . "\e$B%a!<%k$N<u?.$K$O\e(B pop3.el \e$B$r;H$$$^$9$+\e(B? ")
+    (setup-17 . "movemail \e$B%W%m%0%i%`$NL>A0\e(B: ")
+    (setup-18 . "movemail \e$B%W%m%0%i%`$KEO$90z?t\e(B: ")
+    (setup-19 . "\e$B@\B3J}<0$O\e(B? ")
+    (setup-20 . "\e$B%U%!%$%k\e(B: ")
+    (setup-21 . "\e$B%G%#%l%/%H%j\e(B: ")
+    (setup-22 . "newsrc \e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$7$^$9$+\e(B? ")
 
     (param-news-method-4 . "\
 \e$B%K%e!<%95-;v$r<hF@$9$kJ}K!$G$9!#\e(B")
@@ -400,7 +387,7 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
      (param-save-passwd-3 . "\e$B4m81$@$+$i$d$a$H$/\e(B")
      (param-mail-source-1 . "\e$B%a!<%k<hF@@h$N>pJs\e(B"))))
 
-(defun gnus-ofsetup-get-message (symbol &optional lang)
+(defsubst gnus-ofsetup-gettext (symbol &optional lang)
   (setq lang (or lang gnus-offline-lang))
   (or
    (cdr (assq symbol (symbol-value
@@ -411,119 +398,149 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   (intern
    (completing-read (concat
                     msg
-                    (gnus-ofsetup-get-message 'completing-read-symbol-1))
+                    (gnus-ofsetup-gettext 'completing-read-symbol-1))
                    (mapcar
-                    (lambda (sym)
-                      (list (symbol-name sym)))
+                    #'(lambda (sym)
+                        (list (symbol-name sym)))
                     syms)
                    nil t nil)))
 
-(defun gnus-setup-for-offline ()
+(defun gnus-setup-for-offline (&optional force)
   "*Set up Gnus for offline environment."
-  (interactive)
-  (unless (file-exists-p gnus-offline-setting-file)
+  (interactive "P")
+  (unless (and (file-exists-p gnus-offline-setting-file) (not force))
     (let (news-method
          mail-method agent-directory drafts-queue-type news-spool mail-spool
          use-miee MTA-type dialup-program dialup-program-arguments
          hangup-program hangup-program-arguments interval
-         num-of-address i mail-source save-passwd)
+         num-of-address i n mail-source save-passwd)
       (setq news-method
            (gnus-ofsetup-completing-read-symbol
-            (gnus-ofsetup-get-message 'setup-1)
+            (gnus-ofsetup-gettext 'setup-1)
             'nnagent 'nnspool))
       ;; Setting for gnus-agent.
       (if (eq news-method 'nnagent)
          (setq agent-directory
                (read-from-minibuffer
-                (gnus-ofsetup-get-message 'setup-2) "~/News/agent")))
+                (gnus-ofsetup-gettext 'setup-2) "~/News/agent")))
       (setq mail-method 'nnmail)
       (setq dialup-program
            (read-file-name
-            (gnus-ofsetup-get-message 'setup-3)
+            (gnus-ofsetup-gettext 'setup-3)
             nil nil t))
       (if (string-match "^[ \t]*$" dialup-program)
          (setq dialup-program nil)
        (setq dialup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-4))
+                          (gnus-ofsetup-gettext 'setup-4))
                          "[\t ]+"))))
       (setq hangup-program
            (read-file-name
-            (gnus-ofsetup-get-message 'setup-5)
+            (gnus-ofsetup-gettext 'setup-5)
             nil nil t))
       (if (string-match "^[ \t]*$" hangup-program)
          (setq hangup-program nil)
        (setq hangup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-6))
+                          (gnus-ofsetup-gettext 'setup-6))
                          "[\t ]+"))))
       (setq MTA-type (gnus-ofsetup-completing-read-symbol
-                     (gnus-ofsetup-get-message 'setup-7)
+                     (gnus-ofsetup-gettext 'setup-7)
                      'smtp 'sendmail))
       (if (eq news-method 'nnspool)
          (setq use-miee t)
-       (setq use-miee (y-or-n-p (gnus-ofsetup-get-message 'setup-8))))
+       (setq use-miee (y-or-n-p (gnus-ofsetup-gettext 'setup-8))))
       (if use-miee
          (progn
            ;; Setting for MIEE.
            (setq news-spool
                  (read-from-minibuffer
-                  (gnus-ofsetup-get-message 'setup-9)
+                  (gnus-ofsetup-gettext 'setup-9)
                   "/usr/spool/news.out"))
            (setq mail-spool
                  (read-from-minibuffer
-                  (gnus-ofsetup-get-message 'setup-10)
+                  (gnus-ofsetup-gettext 'setup-10)
                   "/usr/spool/mail.out"))
            (setq drafts-queue-type 'miee)
            (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
        ;; Set drafts type gnus-agent.
        (setq drafts-queue-type 'agent))
-      ;; Set E-Mail Address and pop3 movemail type.
+      ;; Create a list of mail source specifiers.
       (setq num-of-address
-           (read-from-minibuffer (gnus-ofsetup-get-message 'setup-11)))
-      (setq i (string-to-int num-of-address))
+           (read-from-minibuffer (gnus-ofsetup-gettext 'setup-11)))
+      (setq i (setq n (string-to-int num-of-address)))
+      ;;
       (while (> i 0)
-       (let ((user (read-from-minibuffer (gnus-ofsetup-get-message 'setup-12)))
-             (server (read-from-minibuffer
-                      (gnus-ofsetup-get-message 'setup-13)))
-             (auth (completing-read
-                    (gnus-ofsetup-get-message 'setup-14)
-                    '(("password") ("apop")) nil t nil))
-             (islisp (y-or-n-p (gnus-ofsetup-get-message 'setup-15)))
-             source)
-         (if (not islisp)
-             (let ((prog (read-file-name (gnus-ofsetup-get-message 'setup-16)
-                                         exec-directory "movemail"))
-                   (args (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-17)
-                          "-pf")))
-               (setq source `(pop
-                              :user ,user
-                              :server ,server
-                              :program ,(format "%s %s %s %s %s"
-                                                prog
-                                                args
-                                                "po:%u"
-                                                "%t"
-                                                "%p"))))
-           (setq source `(pop
-                          :user ,user
-                          :server ,server)))
-         (setq mail-source
-               (nconc mail-source
-                      (list
-                       (if (string-equal "apop" auth)
-                           (nconc source '(:authentication apop))
-                         source)))))
+       (let* ((j (- n (1- i)))
+              (type (gnus-ofsetup-completing-read-symbol
+                     (format "<%d of %d> %s" j n
+                             (gnus-ofsetup-gettext 'setup-12))
+                     'pop 'imap 'file 'directory 'maildir))
+              user server authentication stream islisp source
+              prog args program path)
+         ;; Prepare.
+         (when (or (string= type "pop") (string= type "imap"))
+           (setq user (read-from-minibuffer
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-13))))
+           (setq server (read-from-minibuffer
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-14)))))
+         (when (string= type "pop")
+           (setq authentication (gnus-ofsetup-completing-read-symbol
+                                 (format "<%d of %d> %s" j n
+                                         (gnus-ofsetup-gettext 'setup-15))
+                                 'password 'apop))
+           (setq islisp (y-or-n-p
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-16))))
+           (unless islisp
+             (setq prog (read-file-name
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-17))
+                         exec-directory "movemail"))
+             (setq args (read-from-minibuffer
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-18) "-pf")))
+             (setq program (format "%s %s %s %s %s"
+                                   prog args "po:%u" "%t" "%p"))))
+         (when (string= type "imap")
+           (setq stream (gnus-ofsetup-completing-read-symbol
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-19))
+                         'kerberos4 'starttls 'ssl 'network))
+           (setq authentication (gnus-ofsetup-completing-read-symbol
+                                 (format "<%d of %d> %s" j n
+                                         (gnus-ofsetup-gettext 'setup-14))
+                                 'kerberos4 'digest-md5 'cram-md5 'login
+                                 'anonymous)))
+         (when (string= type "file")
+           (setq path (read-file-name
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-20)))))
+         (when (or (string= type "directory") (string= type "maildir"))
+           (setq path (read-file-name
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-21)))))
+         ;; Now set a mail source specifier.
+         (setq source (list type))
+         (let (value)
+           (dolist (symbol '(path user server authentication stream program))
+             (when (setq value (symbol-value symbol))
+               (setq source (nconc source
+                                   (list (make-symbol (format ":%s" symbol))
+                                         value))))))
+         (setq mail-source (nconc mail-source (list source))))
        (setq i (1- i)))
       (setq save-passwd
-           (y-or-n-p (gnus-ofsetup-get-message 'setup-18)))
+           (y-or-n-p (gnus-ofsetup-gettext 'setup-22)))
       ;;
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)))
   (load gnus-offline-setting-file))
 
+
 ;; Suppport for customizing gnus-ofsetup parameters.
 
 (defvar sendmail-to-spool-directory)
@@ -532,60 +549,60 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
 (defun gnus-ofsetup-find-parameters ()
   "Return the each current value of gnus-offline parameters."
   `((news-method
-     (choice :tag ,(gnus-ofsetup-get-message 'param-news-method-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-news-method-1)
             :value ,gnus-offline-news-fetch-method
-            (const :tag ,(gnus-ofsetup-get-message 'param-news-method-2)
+            (const :tag ,(gnus-ofsetup-gettext 'param-news-method-2)
                    nnagent)
-            (const :tag ,(gnus-ofsetup-get-message 'param-news-method-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-news-method-3)
                    nnspool))
-     ,(gnus-ofsetup-get-message 'param-news-method-4))
+     ,(gnus-ofsetup-gettext 'param-news-method-4))
 
     (dialup-program
-     (choice :tag ,(gnus-ofsetup-get-message 'param-dialup-program-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-dialup-program-1)
             :value ,gnus-offline-dialup-program
-            (string :tag ,(gnus-ofsetup-get-message 'param-dialup-program-2))
-            (const :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext 'param-dialup-program-2))
+            (const :tag ,(gnus-ofsetup-gettext
                           'param-dialup-program-3) nil))
-     ,(gnus-ofsetup-get-message 'param-dialup-program-4))
+     ,(gnus-ofsetup-gettext 'param-dialup-program-4))
 
     (dialup-program-arguments
-     (repeat :tag ,(gnus-ofsetup-get-message 'param-dialup-program-arg-1)
+     (repeat :tag ,(gnus-ofsetup-gettext 'param-dialup-program-arg-1)
             :value ,gnus-offline-dialup-program-arguments
-            (string :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext
                            'param-dialup-program-arg-2)))
-     ,(gnus-ofsetup-get-message 'param-dialup-program-arg-3))
+     ,(gnus-ofsetup-gettext 'param-dialup-program-arg-3))
 
     (hangup-program
-     (choice :tag ,(gnus-ofsetup-get-message 'param-hangup-program-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-hangup-program-1)
             :value ,gnus-offline-hangup-program
-            (string :tag ,(gnus-ofsetup-get-message 'param-hangup-program-2))
-            (const :tag ,(gnus-ofsetup-get-message 'param-hangup-program-3)
+            (string :tag ,(gnus-ofsetup-gettext 'param-hangup-program-2))
+            (const :tag ,(gnus-ofsetup-gettext 'param-hangup-program-3)
                    nil))
-     ,(gnus-ofsetup-get-message 'param-hangup-program-4))
+     ,(gnus-ofsetup-gettext 'param-hangup-program-4))
 
     (hangup-program-arguments
-     (repeat :tag ,(gnus-ofsetup-get-message 'param-hangup-program-arg-1)
+     (repeat :tag ,(gnus-ofsetup-gettext 'param-hangup-program-arg-1)
             :value ,gnus-offline-hangup-program-arguments
-            (string :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext
                            'param-hangup-program-arg-2)))
-     ,(gnus-ofsetup-get-message 'param-hangup-program-arg-3))
+     ,(gnus-ofsetup-gettext 'param-hangup-program-arg-3))
 
     (interval
-     (integer :tag ,(gnus-ofsetup-get-message 'param-interval-1)
+     (integer :tag ,(gnus-ofsetup-gettext 'param-interval-1)
              :value ,gnus-offline-interval-time)
-     ,(gnus-ofsetup-get-message 'param-interval-2))
+     ,(gnus-ofsetup-gettext 'param-interval-2))
 
     (drafts-queue-type
-     (choice :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-1)
             :value ,gnus-offline-drafts-queue-type
-            (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-2)
+            (const :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-2)
                    agent)
-            (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-3)
                    miee))
-     ,(gnus-ofsetup-get-message 'param-drafts-queue-type-4))
+     ,(gnus-ofsetup-gettext 'param-drafts-queue-type-4))
 
     (mail-spool
-     (directory :tag ,(gnus-ofsetup-get-message 'param-mail-spool-1)
+     (directory :tag ,(gnus-ofsetup-gettext 'param-mail-spool-1)
                :value ,(cond ((and (boundp 'sendmail-to-spool-directory)
                                    sendmail-to-spool-directory)
                               sendmail-to-spool-directory)
@@ -593,7 +610,7 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
                               "/usr/spool/mail.out"))))
 
     (news-spool
-     (directory :tag ,(gnus-ofsetup-get-message 'param-news-spool-1)
+     (directory :tag ,(gnus-ofsetup-gettext 'param-news-spool-1)
                :value ,(cond ((and (boundp 'news-spool-request-post-directory)
                                    news-spool-request-post-directory)
                               news-spool-request-post-directory)
@@ -601,26 +618,26 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
                               "/usr/spool/news.out"))))
 
     (MTA-type
-     (choice :tag ,(gnus-ofsetup-get-message 'param-MTA-type-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-MTA-type-1)
             :value ,gnus-offline-MTA-type
-            (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-2) smtp)
-            (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-MTA-type-2) smtp)
+            (const :tag ,(gnus-ofsetup-gettext 'param-MTA-type-3)
                    sendmail))
-     ,(gnus-ofsetup-get-message 'param-MTA-type-4))
+     ,(gnus-ofsetup-gettext 'param-MTA-type-4))
 
     (save-passwd
-     (choice :tag ,(gnus-ofsetup-get-message 'param-save-passwd-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-save-passwd-1)
             :value ,(if (memq 'mail-source-password-cache gnus-variable-list)
                         t
                         nil)
-            (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-2) t)
-            (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-3) nil))
-     ,(gnus-ofsetup-get-message 'param-save-passwd-4))
+            (const :tag ,(gnus-ofsetup-gettext 'param-save-passwd-2) t)
+            (const :tag ,(gnus-ofsetup-gettext 'param-save-passwd-3) nil))
+     ,(gnus-ofsetup-gettext 'param-save-passwd-4))
 
     (mail-source
-     (sexp :tag ,(gnus-ofsetup-get-message 'param-mail-source-1)
+     (sexp :tag ,(gnus-ofsetup-gettext 'param-mail-source-1)
           :value ,gnus-offline-mail-source)
-     ,(gnus-ofsetup-get-message 'param-mail-source-2))))
+     ,(gnus-ofsetup-gettext 'param-mail-source-2))))
 
 (defvar gnus-ofsetup-params)
 
@@ -628,19 +645,19 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   "Edit the gnus-offline parameters."
   (interactive)
   (let* ((params (gnus-ofsetup-find-parameters))
-        (types (mapcar (lambda (entry)
-                        `(cons :format "%v%h\n"
-                               :doc ,(nth 2 entry)
-                               (const :format "" ,(nth 0 entry))
-                               ,(nth 1 entry)))
+        (types (mapcar #'(lambda (entry)
+                           `(cons :format "%v%h\n"
+                                  :doc ,(nth 2 entry)
+                                  (const :format "" ,(nth 0 entry))
+                                  ,(nth 1 entry)))
                        params)))
   (kill-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
   (switch-to-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
   (gnus-custom-mode)
-  (widget-insert (gnus-ofsetup-get-message 'customize-1))
+  (widget-insert (gnus-ofsetup-gettext 'customize-1))
   (widget-create 'push-button
-                  :tag (gnus-ofsetup-get-message 'customize-2)
-                  :help-echo (gnus-ofsetup-get-message 'customize-3)
+                  :tag (gnus-ofsetup-gettext 'customize-2)
+                  :help-echo (gnus-ofsetup-gettext 'customize-3)
                   :action 'gnus-ofsetup-customize-done)
   (widget-insert "\n\n")
   (make-local-variable 'gnus-ofsetup-params)
@@ -648,13 +665,13 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
        (widget-create 'group
                       `(set :inline t
                             :greedy t
-                            :tag ,(gnus-ofsetup-get-message 'customize-4)
+                            :tag ,(gnus-ofsetup-gettext 'customize-4)
                             :format "%t:\n%h%v"
-                            :doc ,(gnus-ofsetup-get-message 'customize-5)
+                            :doc ,(gnus-ofsetup-gettext 'customize-5)
                             ,@types)))
 
   (widget-create 'info-link
-                :help-echo (gnus-ofsetup-get-message 'customize-6)
+                :help-echo (gnus-ofsetup-gettext 'customize-6)
                 :tag "<Info> mail sources"
                 (if (string-match "^ja" gnus-offline-lang)
                     "(gnus-ja)Mail Sources"
@@ -692,28 +709,27 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
        (save-passwd (and (memq 'mail-source-password-cache gnus-variable-list)
                          t)))
     (if (null params)
-       (gnus-message 4 (gnus-ofsetup-get-message 'customize-done-1))
-      (mapc #'(lambda (el)
-               (let ((sym (car el))
-                     (val (cdr el)))
-                 (set sym val)
-                 (cond ((eq sym 'news-method)
-                        (if (eq val 'nnspool)
-                            (setq use-miee t)))
-                       ((eq sym 'drafts-queue-type)
-                        (setq use-miee
-                              (if (eq val 'miee) t nil)))
-                       ((eq sym 'save-passwd)
-                        (if val
-                            (add-to-list 'gnus-variable-list
-                                         'mail-source-password-cache)
-                          (setq gnus-variable-list
-                                (delq 'mail-source-password-cache
-                                      gnus-variable-list)))))))
-           params)
+       (gnus-message 4 (gnus-ofsetup-gettext 'customize-done-1))
+      (let (symbol value)
+       (dolist (elem params)
+         (setq symbol (car elem)
+               value (cdr elem))
+         (set symbol value)
+         (cond ((eq symbol 'news-method)
+                (if (eq value 'nnspool)
+                    (setq use-miee t)))
+               ((eq symbol 'drafts-queue-type)
+                (setq use-miee (eq value 'miee)))
+               ((eq symbol 'save-passwd)
+                (if value
+                    (add-to-list 'gnus-variable-list
+                                 'mail-source-password-cache)
+                  (setq gnus-variable-list
+                        (delq 'mail-source-password-cache
+                              gnus-variable-list)))))))
       (if (and (eq news-method 'nnspool)
               (not (eq drafts-queue-type 'miee)))
-         (error (gnus-ofsetup-get-message 'customize-done-2)))
+         (error (gnus-ofsetup-gettext 'customize-done-2)))
       (if use-miee
          (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)
@@ -721,4 +737,25 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   (bury-buffer)
   (switch-to-buffer gnus-group-buffer))
 
-;; gnus-ofsetup.el Ends here.
+
+;;; Code for making Gnus and Gnus Offline cooperate with each other.
+
+;; Advice.
+(defadvice gnus (around gnus-ofsetup-advice activate preactivate)
+  "Setup offline environment when Gnus is invoked."
+  (require 'gnus-offline) ad-do-it (gnus-offline-setup))
+
+;; Miscellaneous settings.
+
+(setq gnus-nntp-service nil)
+(setq gnus-nntp-server nil)
+(eval-after-load "gnus-start"
+  '(add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news))
+(eval-after-load "message"
+  '(add-hook 'message-send-hook 'gnus-offline-message-add-header))
+(setq mail-source-read-passwd 'read-pw-read-passwd)
+(add-hook 'gnus-setup-news-hook 'read-pw-set-mail-source-passwd-cache)
+
+(provide 'gnus-ofsetup)
+
+;;; gnus-ofsetup.el ends here
index 867d004..0a8d804 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;      Free Software Foundation, Inc.
 
 ;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
 ;; Keywords: news xpm annotation glyph faces
@@ -26,6 +28,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 ;; (require 'xpm)
 (require 'annotations)
@@ -97,9 +100,9 @@ Some people may want to add \"unknown\" to this list."
   (when (featurep 'x)
     (let ((types (list "xbm")))
       (when (featurep 'gif)
-       (setq types (cons "gif" types)))
+       (push "gif" types))
       (when (featurep 'xpm)
-       (setq types (cons "xpm" types)))
+       (push "xpm" types))
       types))
   "*List of suffixes on picon file names to try."
   :type '(repeat string)
@@ -255,9 +258,8 @@ arguments necessary for the job.")
     (when (and (featurep 'xpm)
               (or (not (fboundp 'device-type)) (equal (device-type) 'x))
               (setq from (mail-fetch-field "from"))
-              (setq from (downcase (or (cadr
-                                        (funcall gnus-extract-address-components
-                                                 from))
+              (setq from (downcase (or (cadr (mail-extract-address-components
+                                              from))
                                        "")))
               (or (setq at-idx (string-match "@" from))
                   (setq at-idx (length from))))
@@ -524,8 +526,8 @@ none, and whose CDR is the corresponding element of DOMAINS."
 (defun gnus-picons-parse-value (name)
   (goto-char (point-min))
   (if (re-search-forward (concat "<strong>"
-                            (regexp-quote name)
-                            "</strong> *= *<kbd> *\\([^ <][^<]*\\) *</kbd>")
+                                (regexp-quote name)
+                                "</strong> *= *<kbd> *\\([^ <][^<]*\\) *</kbd>")
                         nil t)
       (buffer-substring (match-beginning 1) (match-end 1))))
 
@@ -696,8 +698,8 @@ none, and whose CDR is the corresponding element of DOMAINS."
 (defun gnus-picons-network-search (user addrs dbs sym-ann right-p marker)
   (let* ((host (mapconcat 'identity addrs "."))
         (key (list (or user "unknown") host (if user
-                                                 gnus-picons-user-directories
-                                               dbs)))
+                                                gnus-picons-user-directories
+                                              dbs)))
         (cache (assoc key gnus-picons-url-alist)))
     (if (null cache)
        (gnus-picons-url-retrieve
index 1964880..223a32e 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -225,19 +226,19 @@ Note: LIST has to be sorted over `<'."
       out)))
 
 (defun gnus-remove-from-range (range1 range2)
-  "Return a range that has all articles from RANGE2 removed from
-RANGE1. The returned range is always a list. RANGE2 can also be a
-unsorted list of articles. RANGE1 is modified by side effects, RANGE2
-is not modified."
+  "Return a range that has all articles from RANGE2 removed from RANGE1.
+The returned range is always a list.  RANGE2 can also be a unsorted
+list of articles.  RANGE1 is modified by side effects, RANGE2 is not
+modified."
   (if (or (null range1) (null range2))
       range1
     (let (out r1 r2 r1_min r1_max r2_min r2_max
-             (range2 (gnus-copy-sequence range2)))
+             (range2 (gnus-copy-sequence range2)))
       (setq range1 (if (listp (cdr range1)) range1 (list range1))
-           range2 (sort (if (listp (cdr range2)) range2 (list range2))
-                        (lambda (e1 e2)
-                          (< (if (consp e1) (car e1) e1)
-                             (if (consp e2) (car e2) e2))))
+           range2 (sort (if (listp (cdr range2)) range2 (list range2))
+                        (lambda (e1 e2)
+                          (< (if (consp e1) (car e1) e1)
+                             (if (consp e2) (car e2) e2))))
            r1 (car range1)
            r2 (car range2)
            r1_min (if (consp r1) (car r1) r1)
@@ -245,7 +246,7 @@ is not modified."
            r2_min (if (consp r2) (car r2) r2)
            r2_max (if (consp r2) (cdr r2) r2))
       (while (and range1 range2)
-       (cond ((< r2_max r1_min)                           ; r2 < r1
+       (cond ((< r2_max r1_min)        ; r2 < r1
               (pop range2)
               (setq r2 (car range2)
                     r2_min (if (consp r2) (car r2) r2)
@@ -266,7 +267,7 @@ is not modified."
                   (push r1_min out)
                 (push (cons r1_min (1- r2_min)) out))
               (pop range2)
-              (if (< r2_max r1_max) ; finished with r1?
+              (if (< r2_max r1_max)    ; finished with r1?
                   (setq r1_min (1+ r2_max))
                 (pop range1)
                 (setq r1 (car range1)
@@ -283,7 +284,7 @@ is not modified."
               (setq r1 (car range1)
                     r1_min (if (consp r1) (car r1) r1)
                     r1_max (if (consp r1) (cdr r1) r1)))
-             ((< r1_max r2_min)                           ; r2 > r1
+             ((< r1_max r2_min)        ; r2 > r1
               (pop range1)
               (if (eq r1_min r1_max)
                   (push r1_min out)
index 3d5e80f..dd2aa1f 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-sum)
 
@@ -52,7 +54,7 @@
   :group 'gnus-summary-pick)
 
 (defcustom gnus-pick-elegant-flow t
-  "If non-nil, gnus-pick-start-reading will run gnus-summary-next-group when no articles have been picked."
+  "If non-nil, `gnus-pick-start-reading' runs `gnus-summary-next-group' when no articles have been picked."
   :type 'boolean
   :group 'gnus-summary-pick)
 
@@ -119,7 +121,8 @@ It accepts the same format specs that `gnus-summary-line-format' does."
       ;; Set up the menu.
       (when (gnus-visual-p 'pick-menu 'menu)
        (gnus-pick-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map)
+      (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map
+                          nil 'gnus-pick-mode)
       (gnus-run-hooks 'gnus-pick-mode-hook))))
 
 (defun gnus-pick-setup-message ()
@@ -161,8 +164,8 @@ If given a prefix, mark all unpicked articles as read."
       (error "No articles have been picked"))))
 
 (defun gnus-pick-goto-article (arg)
-  "Go to the article number indicated by ARG.  If ARG is an invalid
-article number, then stay on current line."
+  "Go to the article number indicated by ARG.
+If ARG is an invalid article number, then stay on current line."
   (let (pos)
     (save-excursion
       (goto-char (point-min))
@@ -173,7 +176,7 @@ article number, then stay on current line."
       (goto-char pos))))
 
 (defun gnus-pick-article (&optional arg)
-    "Pick the article on the current line.
+  "Pick the article on the current line.
 If ARG, pick the article on that line instead."
   (interactive "P")
   (when arg
@@ -181,7 +184,7 @@ If ARG, pick the article on that line instead."
   (gnus-summary-mark-as-processable 1))
 
 (defun gnus-pick-article-or-thread (&optional arg)
-  "If gnus-thread-hide-subtree is t, then pick the thread on the current line.
+  "If `gnus-thread-hide-subtree' is t, then pick the thread on the current line.
 Otherwise pick the article on the current line.
 If ARG, pick the article/thread on that line instead."
   (interactive "P")
@@ -195,7 +198,7 @@ If ARG, pick the article/thread on that line instead."
     (gnus-summary-mark-as-processable 1)))
 
 (defun gnus-pick-unmark-article-or-thread (&optional arg)
-  "If gnus-thread-hide-subtree is t, then unmark the thread on current line.
+  "If `gnus-thread-hide-subtree' is t, then unmark the thread on current line.
 Otherwise unmark the article on current line.
 If ARG, unmark thread/article on that line instead."
   (interactive "P")
@@ -243,46 +246,46 @@ This must be bound to a button-down mouse event."
     ;; (but not outside the window where the drag started).
     (let (event end end-point (end-of-range (point)))
       (track-mouse
-       (while (progn
-                (setq event (cdr (gnus-read-event-char)))
-                (or (mouse-movement-p event)
-                    (eq (car-safe event) 'switch-frame)))
-         (if (eq (car-safe event) 'switch-frame)
-             nil
-           (setq end (event-end event)
-                 end-point (posn-point end))
-
-           (cond
-            ;; Are we moving within the original window?
-            ((and (eq (posn-window end) start-window)
-                  (integer-or-marker-p end-point))
-             ;; Go to START-POINT first, so that when we move to END-POINT,
-             ;; if it's in the middle of intangible text,
-             ;; point jumps in the direction away from START-POINT.
-             (goto-char start-point)
-             (goto-char end-point)
-             (gnus-pick-article)
-             ;; In case the user moved his mouse really fast, pick
-             ;; articles on the line between this one and the last one.
-             (let* ((this-line (1+ (count-lines 1 end-point)))
-                    (min-line (min this-line start-line))
-                    (max-line (max this-line start-line)))
-               (while (< min-line max-line)
-                 (goto-line min-line)
-                 (gnus-pick-article)
-                 (setq min-line (1+ min-line)))
-               (setq start-line this-line))
-             (when (zerop (% click-count 3))
-               (setq end-of-range (point))))
-            (t
-             (let ((mouse-row (cdr (cdr (mouse-position)))))
-               (cond
-                ((null mouse-row))
-                ((< mouse-row top)
-                 (mouse-scroll-subr start-window (- mouse-row top)))
-                ((>= mouse-row bottom)
-                 (mouse-scroll-subr start-window
-                                    (1+ (- mouse-row bottom)))))))))))
+       (while (progn
+               (setq event (cdr (gnus-read-event-char)))
+               (or (mouse-movement-p event)
+                   (eq (car-safe event) 'switch-frame)))
+        (if (eq (car-safe event) 'switch-frame)
+            nil
+          (setq end (event-end event)
+                end-point (posn-point end))
+
+          (cond
+           ;; Are we moving within the original window?
+           ((and (eq (posn-window end) start-window)
+                 (integer-or-marker-p end-point))
+            ;; Go to START-POINT first, so that when we move to END-POINT,
+            ;; if it's in the middle of intangible text,
+            ;; point jumps in the direction away from START-POINT.
+            (goto-char start-point)
+            (goto-char end-point)
+            (gnus-pick-article)
+            ;; In case the user moved his mouse really fast, pick
+            ;; articles on the line between this one and the last one.
+            (let* ((this-line (1+ (count-lines 1 end-point)))
+                   (min-line (min this-line start-line))
+                   (max-line (max this-line start-line)))
+              (while (< min-line max-line)
+                (goto-line min-line)
+                (gnus-pick-article)
+                (setq min-line (1+ min-line)))
+              (setq start-line this-line))
+            (when (zerop (% click-count 3))
+              (setq end-of-range (point))))
+           (t
+            (let ((mouse-row (cdr (cdr (mouse-position)))))
+              (cond
+               ((null mouse-row))
+               ((< mouse-row top)
+                (mouse-scroll-subr start-window (- mouse-row top)))
+               ((>= mouse-row bottom)
+                (mouse-scroll-subr start-window
+                                   (1+ (- mouse-row bottom)))))))))))
       (when (consp event)
        (let ((fun (key-binding (vector (car event)))))
          ;; Run the binding of the terminating up-event, if possible.
@@ -324,8 +327,8 @@ This must be bound to a button-down mouse event."
   (setq gnus-binary-mode-map (make-sparse-keymap))
 
   (gnus-define-keys
-   gnus-binary-mode-map
-   "g" gnus-binary-show-article))
+      gnus-binary-mode-map
+    "g" gnus-binary-show-article))
 
 (defun gnus-binary-make-menu-bar ()
   (unless (boundp 'gnus-binary-menu)
@@ -351,7 +354,8 @@ This must be bound to a button-down mouse event."
       ;; Set up the menu.
       (when (gnus-visual-p 'binary-menu 'menu)
        (gnus-binary-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-binary-mode " Binary" gnus-binary-mode-map)
+      (gnus-add-minor-mode 'gnus-binary-mode " Binary"
+                          gnus-binary-mode-map nil 'gnus-binary-mode)
       (gnus-run-hooks 'gnus-binary-mode-hook))))
 
 (defun gnus-binary-display-article (article &optional all-header)
@@ -442,13 +446,13 @@ Two predefined functions are available:
   (setq gnus-tree-mode-map (make-keymap))
   (suppress-keymap gnus-tree-mode-map)
   (gnus-define-keys
-   gnus-tree-mode-map
-   "\r" gnus-tree-select-article
-   gnus-mouse-2 gnus-tree-pick-article
-   "\C-?" gnus-tree-read-summary-keys
-   "h" gnus-tree-show-summary
+      gnus-tree-mode-map
+    "\r" gnus-tree-select-article
+    gnus-mouse-2 gnus-tree-pick-article
+    "\C-?" gnus-tree-read-summary-keys
+    "h" gnus-tree-show-summary
 
-   "\C-c\C-i" gnus-info-find-node)
+    "\C-c\C-i" gnus-info-find-node)
 
   (substitute-key-definition
    'undefined 'gnus-tree-read-summary-keys gnus-tree-mode-map))
index 50583bf..43e688b 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-score.el --- scoring code for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -27,6 +28,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'gnus)
 (require 'gnus-sum)
 (require 'gnus-range)
@@ -106,8 +109,8 @@ gnus-score-find-bnews: Apply score files whose names matches.
 See the documentation to these functions for more information.
 
 This variable can also be a list of functions to be called.  Each
-function should either return a list of score files, or a list of
-score alists.
+function is given the group name as argument and should either return
+a list of score files, or a list of score alists.
 
 If functions other than these pre-defined functions are used,
 the `a' symbolic prefix to the score commands will always use
@@ -116,7 +119,12 @@ the `a' symbolic prefix to the score commands will always use
   :type '(radio (function-item gnus-score-find-single)
                (function-item gnus-score-find-hierarchical)
                (function-item gnus-score-find-bnews)
-               (function :tag "Other")))
+               (repeat :tag "List of functions"
+                       (choice (function :tag "Other" :value 'ignore)
+                               (function-item gnus-score-find-single)
+                               (function-item gnus-score-find-hierarchical)
+                               (function-item gnus-score-find-bnews)))
+               (function :tag "Other" :value 'ignore)))
 
 (defcustom gnus-score-interactive-default-score 1000
   "*Scoring commands will raise/lower the score with this number as the default."
@@ -137,12 +145,6 @@ will be expired along with non-matching score entries."
   :group 'gnus-score-expire
   :type 'boolean)
 
-(defcustom gnus-orphan-score nil
-  "*All orphans get this score added.  Set in the score file."
-  :group 'gnus-score-default
-  :type '(choice (const nil)
-                integer))
-
 (defcustom gnus-decay-scores nil
   "*If non-nil, decay non-permanent scores."
   :group 'gnus-score-decay
@@ -200,6 +202,8 @@ It can be:
                 (repeat (choice string
                                 (cons regexp (repeat file))
                                 (function :value fun)))
+                (function-item gnus-hierarchial-home-score-file)
+                (function-item gnus-current-home-score-file)
                 (function :value fun)))
 
 (defcustom gnus-home-adapt-file nil
@@ -220,14 +224,14 @@ This variable allows the same syntax as `gnus-home-score-file'."
     (gnus-catchup-mark (subject -10))
     (gnus-killed-mark (from -1) (subject -20))
     (gnus-del-mark (from -2) (subject -15)))
-"*Alist of marks and scores."
-:group 'gnus-score-adapt
-:type '(repeat (cons (symbol :tag "Mark")
-                    (repeat (list (choice :tag "Header"
-                                          (const from)
-                                          (const subject)
-                                          (symbol :tag "other"))
-                                  (integer :tag "Score"))))))
+  "*Alist of marks and scores."
+  :group 'gnus-score-adapt
+  :type '(repeat (cons (symbol :tag "Mark")
+                      (repeat (list (choice :tag "Header"
+                                            (const from)
+                                            (const subject)
+                                            (symbol :tag "other"))
+                                    (integer :tag "Score"))))))
 
 (defcustom gnus-ignored-adaptive-words nil
   "List of words to be ignored when doing adaptive word scoring."
@@ -258,10 +262,10 @@ This variable allows the same syntax as `gnus-home-score-file'."
     (,gnus-catchup-mark . -10)
     (,gnus-killed-mark . -20)
     (,gnus-del-mark . -15))
-"*Alist of marks and scores."
-:group 'gnus-score-adapt
-:type '(repeat (cons (character :tag "Mark")
-                    (integer :tag "Score"))))
+  "*Alist of marks and scores."
+  :group 'gnus-score-adapt
+  :type '(repeat (cons (character :tag "Mark")
+                      (integer :tag "Score"))))
 
 (defcustom gnus-adaptive-word-minimum nil
   "If a number, this is the minimum score value that can be assigned to a word."
@@ -392,6 +396,9 @@ If nil, the user will be asked for a duration."
 
 ;; Internal variables.
 
+(defvar gnus-score-use-all-scores t
+  "If nil, only `gnus-score-find-score-files-function' is used.")
+
 (defvar gnus-adaptive-word-syntax-table
   (let ((table (copy-syntax-table (standard-syntax-table)))
        (numbers '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)))
@@ -513,7 +520,7 @@ The user will be prompted for header to score on, match type,
 permanence, and the string to be used.  The numerical prefix will be
 used as score."
   (interactive (gnus-interactive "P\ny"))
-  (gnus-summary-increase-score (- (gnus-score-default score)) symp))
+  (gnus-summary-increase-score (- (gnus-score-delta-default score)) symp))
 
 (defun gnus-score-kill-help-buffer ()
   (when (get-buffer "*Score Help*")
@@ -527,7 +534,7 @@ The user will be prompted for header to score on, match type,
 permanence, and the string to be used.  The numerical prefix will be
 used as score."
   (interactive (gnus-interactive "P\ny"))
-  (let* ((nscore (gnus-score-default score))
+  (let* ((nscore (gnus-score-delta-default score))
         (prefix (if (< nscore 0) ?L ?I))
         (increase (> nscore 0))
         (char-to-header
@@ -650,7 +657,7 @@ used as score."
            ;; Deal with der(r)ided superannuated paradigms.
            (when (and (eq (1+ prefix) 77)
                       (eq (+ hchar 12) 109)
-                      (eq tchar 114)
+                      (eq (1- tchar) 113)
                       (eq (- pchar 4) 111))
              (error "You rang?"))
            (if mimic
@@ -763,7 +770,7 @@ used as score."
     (pop-to-buffer "*Score Help*")
     (let ((window-min-height 1))
       (shrink-window-if-larger-than-buffer))
-    (select-window (get-buffer-window gnus-summary-buffer))))
+    (select-window (get-buffer-window gnus-summary-buffer t))))
 
 (defun gnus-summary-header (header &optional no-err extra)
   ;; Return HEADER for current articles, or error.
@@ -818,9 +825,10 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
         (setq match (if match (gnus-simplify-subject-re match) "")))
        ((eq type 'f)
         (setq match (gnus-simplify-subject-fuzzy match))))
-  (let ((score (gnus-score-default score))
-       (header (format "%s" (downcase header)))
+  (let ((score (gnus-score-delta-default score))
+       (header (downcase header))
        new)
+    (set-text-properties 0 (length header) nil header)
     (when prompt
       (setq match (read-string
                   (format "Match %s on %s, %s: "
@@ -835,8 +843,7 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
                       (int-to-string match)
                     match))))
 
-    ;; Get rid of string props.
-    (setq match (format "%s" match))
+    (set-text-properties 0 (length match) nil match)
 
     ;; If this is an integer comparison, we transform from string to int.
     (when (eq (nth 2 (assoc header gnus-header-index)) 'gnus-score-integer)
@@ -1001,7 +1008,7 @@ EXTRA is the possible non-standard header."
 (defun gnus-score-followup-article (&optional score)
   "Add SCORE to all followups to the article in the current buffer."
   (interactive "P")
-  (setq score (gnus-score-default score))
+  (setq score (gnus-score-delta-default score))
   (when (gnus-buffer-live-p gnus-summary-buffer)
     (save-excursion
       (save-restriction
@@ -1016,7 +1023,7 @@ EXTRA is the possible non-standard header."
 (defun gnus-score-followup-thread (&optional score)
   "Add SCORE to all later articles in the thread the current buffer is part of."
   (interactive "P")
-  (setq score (gnus-score-default score))
+  (setq score (gnus-score-delta-default score))
   (when (gnus-buffer-live-p gnus-summary-buffer)
     (save-excursion
       (save-restriction
@@ -1061,7 +1068,7 @@ EXTRA is the possible non-standard header."
     (let ((buffer-read-only nil))
       ;; Set score.
       (gnus-summary-update-mark
-       (if (= n (or gnus-summary-default-score 0)) ? ;Whitespace
+       (if (= n (or gnus-summary-default-score 0)) ?  ;Whitespace
         (if (< n (or gnus-summary-default-score 0))
             gnus-score-below-mark gnus-score-over-mark))
        'score))
@@ -1130,8 +1137,7 @@ EXTRA is the possible non-standard header."
                                        gnus-kill-files-directory)))
                          (expand-file-name file))
                         file)
-                   (concat (file-name-as-directory gnus-kill-files-directory)
-                           file))))
+                   (expand-file-name file gnus-kill-files-directory))))
         (cached (assoc file gnus-score-cache))
         (global (member file gnus-internal-global-score-files))
         lists alist)
@@ -1494,6 +1500,10 @@ EXTRA is the possible non-standard header."
                (when (setq new (funcall (nth 2 entry) scores header
                                         now expire trace))
                  (push new news))))
+           (when (gnus-buffer-live-p gnus-summary-buffer)
+             (let ((scored gnus-newsgroup-scored))
+               (with-current-buffer gnus-summary-buffer
+                 (setq gnus-newsgroup-scored scored))))
            ;; Remove the buffer.
            (kill-buffer (current-buffer)))
 
@@ -1516,79 +1526,50 @@ EXTRA is the possible non-standard header."
 
          (gnus-message 5 "Scoring...done"))))))
 
+(defun gnus-score-lower-thread (thread score-adjust)
+  "Lower the socre on THREAD with SCORE-ADJUST.
+THREAD is expected to contain a list of the form `(PARENT [CHILD1
+CHILD2 ...])' where PARENT is a header array and each CHILD is a list
+of the same form as THREAD.  The empty list `nil' is valid.  For each
+article in the tree, the score of the corresponding entry in
+GNUS-NEWSGROUP-SCORED is adjusted by SCORE-ADJUST."
+  (while thread
+    (let ((head (car thread)))
+      (if (listp head)
+         ;; handle a child and its descendants
+         (gnus-score-lower-thread head score-adjust)
+       ;; handle the parent
+       (let* ((article (mail-header-number head))
+              (score (assq article gnus-newsgroup-scored)))
+         (if score (setcdr score (+ (cdr score) score-adjust))
+           (push (cons article score-adjust) gnus-newsgroup-scored)))))
+    (setq thread (cdr thread))))
 
-(defun gnus-get-new-thread-ids (articles)
-  (let ((index (nth 1 (assoc "message-id" gnus-header-index)))
-        (refind gnus-score-index)
-        id-list art this tref)
-    (while articles
-      (setq art (car articles)
-            this (aref (car art) index)
-            tref (aref (car art) refind)
-            articles (cdr articles))
-      (when (string-equal tref "")     ;no references line
-       (push this id-list)))
-    id-list))
-
-;; Orphan functions written by plm@atcmp.nl (Peter Mutsaers).
 (defun gnus-score-orphans (score)
-  (let ((new-thread-ids (gnus-get-new-thread-ids gnus-scores-articles))
-        alike articles art arts this last this-id)
-
-    (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<)
-         articles gnus-scores-articles)
-
-    ;;more or less the same as in gnus-score-string
-    (erase-buffer)
-    (while articles
-      (setq art (car articles)
-            this (aref (car art) gnus-score-index)
-            articles (cdr articles))
-      ;;completely skip if this is empty (not a child, so not an orphan)
-      (when (not (string= this ""))
-       (if (equal last this)
-           ;; O(N*H) cons-cells used here, where H is the number of
-           ;; headers.
-           (push art alike)
-         (when last
-           ;; Insert the line, with a text property on the
-           ;; terminating newline referring to the articles with
-           ;; this line.
-           (insert last ?\n)
-           (put-text-property (1- (point)) (point) 'articles alike))
-         (setq alike (list art)
-               last this))))
-    (when last                         ; Bwadr, duplicate code.
-      (insert last ?\n)
-      (put-text-property (1- (point)) (point) 'articles alike))
-
-    ;; PLM: now delete those lines that contain an entry from new-thread-ids
-    (while new-thread-ids
-      (setq this-id (car new-thread-ids)
-            new-thread-ids (cdr new-thread-ids))
-      (goto-char (point-min))
-      (while (search-forward this-id nil t)
-        ;; found a match.  remove this line
-       (beginning-of-line)
-       (kill-line 1)))
-
-    ;; now for each line: update its articles with score by moving to
-    ;; every end-of-line in the buffer and read the articles property
-    (goto-char (point-min))
-    (while (eq 0 (progn
-                   (end-of-line)
-                   (setq arts (get-text-property (point) 'articles))
-                   (while arts
-                     (setq art (car arts)
-                           arts (cdr arts))
-                     (setcdr art (+ score (cdr art))))
-                   (forward-line))))))
-
+  "Score orphans.
+A root is an article with no references.  An orphan is an article
+which has references, but is not connected via its references to a
+root article.  This function finds all the orphans, and adjusts their
+score in GNUS-NEWSGROUP-SCORED by SCORE."
+  (let ((threads (gnus-make-threads)))
+    ;; gnus-make-threads produces a list, where each entry is a "thread"
+    ;; as described in the gnus-score-lower-thread docs.  This function
+    ;; will be called again (after limiting has been done) if the display
+    ;; is threaded.  It would be nice to somehow save this info and use
+    ;; it later.
+    (while threads
+      (let* ((thread (car threads))
+            (id (aref (car thread) gnus-score-index)))
+       ;; If the parent of the thread is not a root, lower the score of
+       ;; it and its descendants.  Note that some roots seem to satisfy
+       ;; (eq id nil) and some (eq id "");  not sure why.
+       (if (and id (not (string= id "")))
+           (gnus-score-lower-thread thread score)))
+      (setq threads (cdr threads)))))
 
 (defun gnus-score-integer (scores header now expire &optional trace)
   (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
        entries alist)
-
     ;; Find matches.
     (while scores
       (setq alist (car scores)
@@ -1637,7 +1618,6 @@ EXTRA is the possible non-standard header."
 (defun gnus-score-date (scores header now expire &optional trace)
   (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
        entries alist match match-func article)
-
     ;; Find matches.
     (while scores
       (setq alist (car scores)
@@ -1693,204 +1673,211 @@ EXTRA is the possible non-standard header."
   nil)
 
 (defun gnus-score-body (scores header now expire &optional trace)
-  (save-excursion
-    (setq gnus-scores-articles
-         (sort gnus-scores-articles
-               (lambda (a1 a2)
-                 (< (mail-header-number (car a1))
-                    (mail-header-number (car a2))))))
-    (set-buffer nntp-server-buffer)
-    (save-restriction
-      (let* ((buffer-read-only nil)
-            (articles gnus-scores-articles)
-            (all-scores scores)
-            (request-func (cond ((string= "head" header)
-                                 'gnus-request-head)
-                                ((string= "body" header)
-                                 'gnus-request-body)
-                                (t 'gnus-request-article)))
-            entries alist ofunc article last)
-       (when articles
-         (setq last (mail-header-number (caar (last articles))))
+  (if gnus-agent-fetching
+      nil
+    (save-excursion
+      (setq gnus-scores-articles
+           (sort gnus-scores-articles
+                 (lambda (a1 a2)
+                   (< (mail-header-number (car a1))
+                      (mail-header-number (car a2))))))
+      (set-buffer nntp-server-buffer)
+      (save-restriction
+       (let* ((buffer-read-only nil)
+              (articles gnus-scores-articles)
+              (all-scores scores)
+              (request-func (cond ((string= "head" header)
+                                   'gnus-request-head)
+                                  ((string= "body" header)
+                                   'gnus-request-body)
+                                  (t 'gnus-request-article)))
+              entries alist ofunc article last)
+         (when articles
+           (setq last (mail-header-number (caar (last articles))))
          ;; Not all backends support partial fetching.  In that case,
-         ;; we just fetch the entire article.
-         (unless (gnus-check-backend-function
-                  (and (string-match "^gnus-" (symbol-name request-func))
-                       (intern (substring (symbol-name request-func)
-                                          (match-end 0))))
-                  gnus-newsgroup-name)
-           (setq ofunc request-func)
-           (setq request-func 'gnus-request-article))
-         (while articles
-           (setq article (mail-header-number (caar articles)))
-           (gnus-message 7 "Scoring article %s of %s..." article last)
-           (when (funcall request-func article gnus-newsgroup-name)
+           ;; we just fetch the entire article.
+           (unless (gnus-check-backend-function
+                    (and (string-match "^gnus-" (symbol-name request-func))
+                         (intern (substring (symbol-name request-func)
+                                            (match-end 0))))
+                    gnus-newsgroup-name)
+             (setq ofunc request-func)
+             (setq request-func 'gnus-request-article))
+           (while articles
+             (setq article (mail-header-number (caar articles)))
+             (gnus-message 7 "Scoring article %s of %s..." article last)
              (widen)
-             (goto-char (point-min))
-             ;; If just parts of the article is to be searched, but the
-             ;; backend didn't support partial fetching, we just narrow
-             ;; to the relevant parts.
-             (when ofunc
-               (if (eq ofunc 'gnus-request-head)
+             (when (funcall request-func article gnus-newsgroup-name)
+               (goto-char (point-min))
+           ;; If just parts of the article is to be searched, but the
+           ;; backend didn't support partial fetching, we just narrow
+               ;; to the relevant parts.
+               (when ofunc
+                 (if (eq ofunc 'gnus-request-head)
+                     (narrow-to-region
+                      (point)
+                      (or (search-forward "\n\n" nil t) (point-max)))
                    (narrow-to-region
-                    (point)
-                    (or (search-forward "\n\n" nil t) (point-max)))
-                 (narrow-to-region
-                  (or (search-forward "\n\n" nil t) (point))
-                  (point-max))))
-             (setq scores all-scores)
-             ;; Find matches.
-             (while scores
-               (setq alist (pop 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)
-                                   gnus-score-interactive-default-score))
-                        (date (nth 2 kill))
-                        (found nil)
-                        (case-fold-search
-                         (not (or (eq type 'R) (eq type 'S)
-                                  (eq type 'Regexp) (eq type 'String))))
-                        (search-func
-                         (cond ((or (eq type 'r) (eq type 'R)
-                                    (eq type 'regexp) (eq type 'Regexp))
-                                're-search-forward)
-                               ((or (eq type 's) (eq type 'S)
-                                    (eq type 'string) (eq type 'String))
-                                'search-forward)
-                               (t
-                                (error "Invalid match type: %s" type)))))
-                   (goto-char (point-min))
-                   (when (funcall search-func match nil t)
-                     ;; Found a match, update scores.
-                     (setcdr (car articles) (+ score (cdar articles)))
-                     (setq found t)
-                     (when trace
-                       (push
-                        (cons (car-safe (rassq alist gnus-score-cache)) kill)
-                        gnus-score-trace)))
-                   ;; Update expire date
-                   (unless trace
-                     (cond
-                      ((null date))    ;Permanent entry.
-                      ((and found gnus-update-score-entry-dates)
-                       ;; Match, update date.
-                       (gnus-score-set 'touched '(t) alist)
-                       (setcar (nthcdr 2 kill) now))
-                      ((and expire (< date expire)) ;Old entry, remove.
-                       (gnus-score-set 'touched '(t) alist)
-                       (setcdr entries (cdr rest))
-                       (setq rest entries))))
-                   (setq entries rest)))))
-           (setq articles (cdr articles)))))))
-  nil)
+                    (or (search-forward "\n\n" nil t) (point))
+                    (point-max))))
+               (setq scores all-scores)
+               ;; Find matches.
+               (while scores
+                 (setq alist (pop 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)
+                                     gnus-score-interactive-default-score))
+                          (date (nth 2 kill))
+                          (found nil)
+                          (case-fold-search
+                           (not (or (eq type 'R) (eq type 'S)
+                                    (eq type 'Regexp) (eq type 'String))))
+                          (search-func
+                           (cond ((or (eq type 'r) (eq type 'R)
+                                      (eq type 'regexp) (eq type 'Regexp))
+                                  're-search-forward)
+                                 ((or (eq type 's) (eq type 'S)
+                                      (eq type 'string) (eq type 'String))
+                                  'search-forward)
+                                 (t
+                                  (error "Invalid match type: %s" type)))))
+                     (goto-char (point-min))
+                     (when (funcall search-func match nil t)
+                       ;; Found a match, update scores.
+                       (setcdr (car articles) (+ score (cdar articles)))
+                       (setq found t)
+                       (when trace
+                         (push
+                          (cons (car-safe (rassq alist gnus-score-cache)) kill)
+                          gnus-score-trace)))
+                     ;; Update expire date
+                     (unless trace
+                       (cond
+                        ((null date))  ;Permanent entry.
+                        ((and found gnus-update-score-entry-dates)
+                         ;; Match, update date.
+                         (gnus-score-set 'touched '(t) alist)
+                         (setcar (nthcdr 2 kill) now))
+                        ((and expire (< date expire)) ;Old entry, remove.
+                         (gnus-score-set 'touched '(t) alist)
+                         (setcdr entries (cdr rest))
+                         (setq rest entries))))
+                     (setq entries rest)))))
+             (setq articles (cdr articles)))))))
+    nil))
 
 (defun gnus-score-thread (scores header now expire &optional trace)
   (gnus-score-followup scores header now expire trace t))
 
 (defun gnus-score-followup (scores header now expire &optional trace thread)
-  ;; Insert the unique article headers in the buffer.
-  (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
-       (current-score-file gnus-current-score-file)
-       (all-scores scores)
-       ;; gnus-score-index is used as a free variable.
-       alike last this art entries alist articles
-       new news)
-
-    ;; Change score file to the adaptive score file.  All entries that
-    ;; this function makes will be put into this file.
-    (save-excursion
-      (set-buffer gnus-summary-buffer)
-      (gnus-score-load-file
-       (or gnus-newsgroup-adaptive-score-file
-          (gnus-score-file-name
-           gnus-newsgroup-name gnus-adaptive-file-suffix))))
+  (if gnus-agent-fetching
+      ;; FIXME: It seems doable in fetching mode.
+      nil
+    ;; Insert the unique article headers in the buffer.
+    (let ((gnus-score-index (nth 1 (assoc header gnus-header-index)))
+         (current-score-file gnus-current-score-file)
+         (all-scores scores)
+         ;; gnus-score-index is used as a free variable.
+         alike last this art entries alist articles
+         new news)
+      
+      ;; Change score file to the adaptive score file.  All entries that
+      ;; this function makes will be put into this file.
+      (save-excursion
+       (set-buffer gnus-summary-buffer)
+       (gnus-score-load-file
+        (or gnus-newsgroup-adaptive-score-file
+            (gnus-score-file-name
+             gnus-newsgroup-name gnus-adaptive-file-suffix))))
 
-    (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<)
-         articles gnus-scores-articles)
+      (setq gnus-scores-articles (sort gnus-scores-articles 
+                                      'gnus-score-string<)
+           articles gnus-scores-articles)
 
-    (erase-buffer)
-    (while articles
-      (setq art (car articles)
-           this (aref (car art) gnus-score-index)
-           articles (cdr articles))
-      (if (equal last this)
-         (push art alike)
-       (when last
-         (insert last ?\n)
-         (put-text-property (1- (point)) (point) 'articles alike))
-       (setq alike (list art)
-             last this)))
-    (when last                         ; Bwadr, duplicate code.
-      (insert last ?\n)
-      (put-text-property (1- (point)) (point) 'articles alike))
-
-    ;; 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) gnus-score-interactive-default-score))
-              (date (nth 2 kill))
-              (found nil)
-              (mt (aref (symbol-name type) 0))
-              (case-fold-search
-               (not (or (= mt ?R) (= mt ?S) (= mt ?E) (= mt ?F))))
-              (dmt (downcase mt))
-              (search-func
-               (cond ((= dmt ?r) 're-search-forward)
-                     ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
-                     (t (error "Invalid match type: %s" type))))
-              arts art)
-         (goto-char (point-min))
-         (if (= dmt ?e)
+      (erase-buffer)
+      (while articles
+       (setq art (car articles)
+             this (aref (car art) gnus-score-index)
+             articles (cdr articles))
+       (if (equal last this)
+           (push art alike)
+         (when last
+           (insert last ?\n)
+           (put-text-property (1- (point)) (point) 'articles alike))
+         (setq alike (list art)
+               last this)))
+      (when last                       ; Bwadr, duplicate code.
+       (insert last ?\n)
+       (put-text-property (1- (point)) (point) 'articles alike))
+
+      ;; 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) gnus-score-interactive-default-score))
+                (date (nth 2 kill))
+                (found nil)
+                (mt (aref (symbol-name type) 0))
+                (case-fold-search
+                 (not (or (= mt ?R) (= mt ?S) (= mt ?E) (= mt ?F))))
+                (dmt (downcase mt))
+                (search-func
+                 (cond ((= dmt ?r) 're-search-forward)
+                       ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
+                       (t (error "Invalid match type: %s" type))))
+                arts art)
+           (goto-char (point-min))
+           (if (= dmt ?e)
+               (while (funcall search-func match nil t)
+                 (and (= (progn (beginning-of-line) (point))
+                         (match-beginning 0))
+                      (= (progn (end-of-line) (point))
+                         (match-end 0))
+                      (progn
+                        (setq found (setq arts (get-text-property
+                                                (point) 'articles)))
+                        ;; Found a match, update scores.
+                        (while arts
+                          (setq art (car arts)
+                                arts (cdr arts))
+                          (gnus-score-add-followups
+                           (car art) score all-scores thread))))
+                 (end-of-line))
              (while (funcall search-func match nil t)
-               (and (= (progn (beginning-of-line) (point))
-                       (match-beginning 0))
-                    (= (progn (end-of-line) (point))
-                       (match-end 0))
-                    (progn
-                      (setq found (setq arts (get-text-property
-                                              (point) 'articles)))
-                      ;; Found a match, update scores.
-                      (while arts
-                        (setq art (car arts)
-                              arts (cdr arts))
-                        (gnus-score-add-followups
-                         (car art) score all-scores thread))))
-               (end-of-line))
-           (while (funcall search-func match nil t)
-             (end-of-line)
-             (setq found (setq arts (get-text-property (point) 'articles)))
-             ;; Found a match, update scores.
-             (while (setq art (pop arts))
-               (when (setq new (gnus-score-add-followups
-                                (car art) score all-scores thread))
-                 (push new news)))))
-         ;; Update expire date
-         (cond ((null date))           ;Permanent entry.
-               ((and found gnus-update-score-entry-dates) ;Match, update date.
-                (gnus-score-set 'touched '(t) alist)
-                (setcar (nthcdr 2 kill) now))
-               ((and expire (< date expire)) ;Old entry, remove.
-                (gnus-score-set 'touched '(t) alist)
-                (setcdr entries (cdr rest))
-                (setq rest entries)))
-         (setq entries rest))))
-    ;; We change the score file back to the previous one.
-    (save-excursion
-      (set-buffer gnus-summary-buffer)
-      (gnus-score-load-file current-score-file))
-    (list (cons "references" news))))
+               (end-of-line)
+               (setq found (setq arts (get-text-property (point) 'articles)))
+               ;; Found a match, update scores.
+               (while (setq art (pop arts))
+                 (when (setq new (gnus-score-add-followups
+                                  (car art) score all-scores thread))
+                   (push new news)))))
+           ;; Update expire date
+           (cond ((null date))         ;Permanent entry.
+                 ((and found gnus-update-score-entry-dates) 
+                                       ;Match, update date.
+                  (gnus-score-set 'touched '(t) alist)
+                  (setcar (nthcdr 2 kill) now))
+                 ((and expire (< date expire)) ;Old entry, remove.
+                  (gnus-score-set 'touched '(t) alist)
+                  (setcdr entries (cdr rest))
+                  (setq rest entries)))
+           (setq entries rest))))
+      ;; We change the score file back to the previous one.
+      (save-excursion
+       (set-buffer gnus-summary-buffer)
+       (gnus-score-load-file current-score-file))
+      (list (cons "references" news)))))
 
 (defun gnus-score-add-followups (header score scores &optional thread)
   "Add a score entry to the adapt file."
@@ -1945,7 +1932,7 @@ EXTRA is the possible non-standard header."
       ;; with working on them as a group.  What a hassle.
       ;; Just wait 'til you see what horrors we commit against `match'...
       (if (= gnus-score-index 9)
-         (setq this (prin1-to-string this)))   ; ick.
+         (setq this (prin1-to-string this))) ; ick.
 
       (if simplify
          (setq this (gnus-map-function gnus-simplify-subject-functions this)))
@@ -1998,7 +1985,7 @@ EXTRA is the possible non-standard header."
          (when extra
            (setq match (concat "[ (](" extra " \\. \"[^)]*"
                                match "[^(]*\")[ )]")
-                 search-func 're-search-forward))      ; XXX danger?!?
+                 search-func 're-search-forward)) ; XXX danger?!?
 
          (cond
           ;; Fuzzy matches.  We save these for later.
@@ -2126,6 +2113,7 @@ EXTRA is the possible non-standard header."
              (cond
               ;; Permanent.
               ((null date)
+               ;; Do nothing.
                )
               ;; Match, update date.
               ((and found gnus-update-score-entry-dates)
@@ -2164,6 +2152,7 @@ EXTRA is the possible non-standard header."
                (cond
                 ;; Permanent.
                 ((null date)
+                 ;; Do nothing.
                  )
                 ;; Match, update date.
                 ((and found gnus-update-score-entry-dates)
@@ -2470,14 +2459,14 @@ EXTRA is the possible non-standard header."
       (gnus-summary-raise-score score))
     (gnus-summary-next-subject 1 t)))
 
-(defun gnus-score-default (level)
+(defun gnus-score-delta-default (level)
   (if level (prefix-numeric-value level)
     gnus-score-interactive-default-score))
 
 (defun gnus-summary-raise-thread (&optional score)
   "Raise the score of the articles in the current thread with SCORE."
   (interactive "P")
-  (setq score (gnus-score-default score))
+  (setq score (gnus-score-delta-default score))
   (let (e)
     (save-excursion
       (let ((articles (gnus-summary-articles-in-thread)))
@@ -2506,7 +2495,7 @@ EXTRA is the possible non-standard header."
 (defun gnus-summary-lower-thread (&optional score)
   "Lower score of articles in the current thread with SCORE."
   (interactive "P")
-  (gnus-summary-raise-thread (- (1- (gnus-score-default score)))))
+  (gnus-summary-raise-thread (- (1- (gnus-score-delta-default score)))))
 
 ;;; Finding score files.
 
@@ -2606,7 +2595,7 @@ GROUP using BNews sys file syntax."
              ;; too much.
              (delete-char (min (1- (point-max)) klen))
            (goto-char (point-max))
-           (search-backward "/")
+           (search-backward (char-to-string directory-sep-char))
            (delete-region (1+ (point)) (point-min)))
          ;; If short file names were used, we have to translate slashes.
          (goto-char (point-min))
@@ -2762,19 +2751,20 @@ The list is determined from the variable gnus-score-file-alist."
       (and funcs
           (not (listp funcs))
           (setq funcs (list funcs)))
-      ;; Get the initial score files for this group.
-      (when funcs
-       (setq score-files (nreverse (gnus-score-find-alist group))))
-      ;; Add any home adapt files.
-      (let ((home (gnus-home-score-file group t)))
-       (when home
-         (push home score-files)
-         (setq gnus-newsgroup-adaptive-score-file home)))
-      ;; Check whether there is a `adapt-file' group parameter.
-      (let ((param-file (gnus-group-find-parameter group 'adapt-file)))
-       (when param-file
-         (push param-file score-files)
-         (setq gnus-newsgroup-adaptive-score-file param-file)))
+      (when gnus-score-use-all-scores
+       ;; Get the initial score files for this group.
+       (when funcs
+         (setq score-files (nreverse (gnus-score-find-alist group))))
+       ;; Add any home adapt files.
+       (let ((home (gnus-home-score-file group t)))
+         (when home
+           (push home score-files)
+           (setq gnus-newsgroup-adaptive-score-file home)))
+       ;; Check whether there is a `adapt-file' group parameter.
+       (let ((param-file (gnus-group-find-parameter group 'adapt-file)))
+         (when param-file
+           (push param-file score-files)
+           (setq gnus-newsgroup-adaptive-score-file param-file))))
       ;; Go through all the functions for finding score files (or actual
       ;; scores) and add them to a list.
       (while funcs
@@ -2782,14 +2772,15 @@ The list is determined from the variable gnus-score-file-alist."
          (setq score-files
                (nconc score-files (nreverse (funcall (car funcs) group)))))
        (setq funcs (cdr funcs)))
-      ;; Add any home score files.
-      (let ((home (gnus-home-score-file group)))
-       (when home
-         (push home score-files)))
-      ;; Check whether there is a `score-file' group parameter.
-      (let ((param-file (gnus-group-find-parameter group 'score-file)))
-       (when param-file
-         (push param-file score-files)))
+      (when gnus-score-use-all-scores
+       ;; Add any home score files.
+       (let ((home (gnus-home-score-file group)))
+         (when home
+           (push home score-files)))
+       ;; Check whether there is a `score-file' group parameter.
+       (let ((param-file (gnus-group-find-parameter group 'score-file)))
+         (when param-file
+           (push param-file score-files))))
       ;; Expand all files names.
       (let ((files score-files))
        (while files
@@ -2881,10 +2872,10 @@ If ADAPT, return the home adaptive file instead."
             ;; Function.
             ((gnus-functionp elem)
              (funcall elem group))
-            ;; Regexp-file cons
+            ;; Regexp-file cons.
             ((consp elem)
              (when (string-match (gnus-globalify-regexp (car elem)) group)
-               (replace-match (cadr elem) t nil group ))))))
+               (replace-match (cadr elem) t nil group))))))
     (when found
       (if (file-name-absolute-p found)
           found
@@ -2999,8 +2990,7 @@ See `(Gnus)Scoring Tips' for examples of good regular expressions."
        (cond
        (bad (cons 'bad bad))
        (new (cons 'new new))
-       ;; or nil
-       )))))
+       (t nil))))))
 
 (provide 'gnus-score)
 
index 29c2a31..106e0a9 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-setup.el --- Initialization & Setup for Gnus 5
-;; Copyright (C) 1995, 96 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <steve@miranova.com>
 ;; Keywords: news
 
 (eval-when-compile (require 'cl))
 
-(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
-
 (defvar gnus-use-installed-gnus t
   "*If non-nil Use installed version of Gnus.")
 
-(defvar gnus-use-installed-tm running-xemacs
-  "*If non-nil use installed version of tm.")
-
-(defvar gnus-use-installed-mailcrypt running-xemacs
+(defvar gnus-use-installed-mailcrypt (featurep 'xemacs)
   "*If non-nil use installed version of mailcrypt.")
 
-(defvar gnus-emacs-lisp-directory (if running-xemacs
+(defvar gnus-emacs-lisp-directory (if (featurep 'xemacs)
                                      "/usr/local/lib/xemacs/"
                                    "/usr/local/share/emacs/")
   "Directory where Emacs site lisp is located.")
 
 (defvar gnus-gnus-lisp-directory (concat gnus-emacs-lisp-directory
-                                        "gnus-5.0.15/lisp/")
+                                        "gnus/lisp/")
   "Directory where Gnus Emacs lisp is found.")
 
-(defvar gnus-tm-lisp-directory (concat gnus-emacs-lisp-directory
-                                      "site-lisp/")
-  "Directory where TM Emacs lisp is found.")
-
 (defvar gnus-mailcrypt-lisp-directory (concat gnus-emacs-lisp-directory
-                                             "site-lisp/mailcrypt-3.4/")
+                                             "site-lisp/mailcrypt/")
   "Directory where Mailcrypt Emacs Lisp is found.")
 
 (defvar gnus-bbdb-lisp-directory (concat gnus-emacs-lisp-directory
-                                        "site-lisp/bbdb-1.51/")
+                                        "site-lisp/bbdb/")
   "Directory where Big Brother Database is found.")
 
 (defvar gnus-use-mhe nil
-  "Set this if you want to use MH-E for mail reading")
+  "Set this if you want to use MH-E for mail reading.")
 (defvar gnus-use-rmail nil
-  "Set this if you want to use RMAIL for mail reading")
+  "Set this if you want to use RMAIL for mail reading.")
 (defvar gnus-use-sendmail t
-  "Set this if you want to use SENDMAIL for mail reading")
+  "Set this if you want to use SENDMAIL for mail reading.")
 (defvar gnus-use-vm nil
-  "Set this if you want to use the VM package for mail reading")
+  "Set this if you want to use the VM package for mail reading.")
 (defvar gnus-use-sc nil
-  "Set this if you want to use Supercite")
+  "Set this if you want to use Supercite.")
 (defvar gnus-use-mailcrypt t
-  "Set this if you want to use Mailcrypt for dealing with PGP messages")
+  "Set this if you want to use Mailcrypt for dealing with PGP messages.")
 (defvar gnus-use-bbdb nil
-  "Set this if you want to use the Big Brother DataBase")
+  "Set this if you want to use the Big Brother DataBase.")
 
 (when (and (not gnus-use-installed-gnus)
           (null (member gnus-gnus-lisp-directory load-path)))
index 8a9a206..9b974a8 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-soup.el --- SOUP packet writing support for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -67,9 +69,9 @@ The SOUP packet file name will be inserted at the %s.")
 
 ;;; Internal Variables:
 
-(defvar gnus-soup-encoding-type ?n
+(defvar gnus-soup-encoding-type ?u
   "*Soup encoding type.
-`n' is news format, `m' is Unix mbox format, and `M' is MMDF mailbox
+`u' is USENET news format, `m' is Unix mbox format, and `M' is MMDF mailbox
 format.")
 
 (defvar gnus-soup-index-type ?c
@@ -140,7 +142,7 @@ move those articles instead."
     (buffer-disable-undo tmp-buf)
     (save-excursion
       (while articles
-         ;; Put the article in a buffer.
+       ;; Put the article in a buffer.
        (set-buffer tmp-buf)
        (when (gnus-request-article-this-buffer
               (car articles) gnus-newsgroup-name)
@@ -245,7 +247,8 @@ Note -- this function hasn't been implemented yet."
       ;; a soup header.
       (setq head-line
            (cond
-            ((= gnus-soup-encoding-type ?n)
+            ((or (= gnus-soup-encoding-type ?u)
+                 (= gnus-soup-encoding-type ?n)) ;;Gnus back compatibility.
              (format "#! rnews %d\n" (buffer-size)))
             ((= gnus-soup-encoding-type ?m)
              (while (search-forward "\nFrom " nil t)
@@ -335,7 +338,9 @@ If NOT-ALL, don't pack ticked articles."
       (while (setq prefix (pop prefixes))
        (erase-buffer)
        (insert (format "(setq gnus-soup-prev-prefix %d)\n" (cdr prefix)))
-       (gnus-write-buffer (concat (car prefix) gnus-soup-prefix-file))))))
+       (gnus-write-buffer-as-coding-system
+        nnheader-text-coding-system
+        (concat (car prefix) gnus-soup-prefix-file))))))
 
 (defun gnus-soup-pack (dir packer)
   (let* ((files (mapconcat 'identity
@@ -513,9 +518,12 @@ Return whether the unpacking was successful."
               (tmp-buf (gnus-get-buffer-create " *soup send*"))
               beg end)
          (cond
-          ((/= (gnus-soup-encoding-format
-                (gnus-soup-reply-encoding (car replies)))
-               ?n)
+          ((and (/= (gnus-soup-encoding-format
+                     (gnus-soup-reply-encoding (car replies)))
+                    ?u)
+                (/= (gnus-soup-encoding-format
+                     (gnus-soup-reply-encoding (car replies)))
+                    ?n)) ;; Gnus back compatibility.
            (error "Unsupported encoding"))
           ((null msg-buf)
            t)
index 23781b6..cf43cfa 100644 (file)
@@ -1,5 +1,6 @@
-;;; gnus-spec.el --- format spec functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;;; gnus-spec.el --- format spec functions for Gnus  -*- coding: iso-latin-1 -*-
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Katsumi Yamaoka <yamaoka@jpl.org>
@@ -27,6 +28,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
+(require 'alist)
 (require 'gnus)
 
 ;;; Internal variables.
   (gnus-byte-code 'gnus-group-line-format-spec))
 
 (defvar gnus-format-specs
-  `((version . ,emacs-version)
-    (group "%M\%S\%p\%P\%5y: %(%g%)%l\n" ,gnus-group-line-format-spec)
-    (summary-dummy "*  %(:                          :%) %S\n"
-                  ,gnus-summary-dummy-line-format-spec)
-    (summary "%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
-            ,gnus-summary-line-format-spec))
+  `((group ("%M\%S\%p\%P\%5y: %(%g%)%l\n" ,gnus-group-line-format-spec))
+    (summary-dummy ("*  %(:                          :%) %S\n"
+                   ,gnus-summary-dummy-line-format-spec))
+    (summary ("%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
+             ,gnus-summary-line-format-spec)))
   "Alist of format specs.")
 
+(defvar gnus-format-specs-compiled nil
+  "Alist of compiled format specs.  Each element should be the form:
+\(TYPE (FORMAT-STRING-1 . COMPILED-FUNCTION-1)
+                 :
+       (FORMAT-STRING-n . COMPILED-FUNCTION-n)).")
+
 (defvar gnus-article-mode-line-format-spec nil)
 (defvar gnus-summary-mode-line-format-spec nil)
 (defvar gnus-group-mode-line-format-spec nil)
        (match-string 1)))))
   (let* ((type (intern (progn (string-match "gnus-\\([-a-z]+\\)-line" var)
                              (match-string 1 var))))
-        (entry (assq type gnus-format-specs))
-        value spec)
-    (when entry
-      (setq gnus-format-specs (delq entry gnus-format-specs)))
-    (set
-     (intern (format "%s-spec" var))
-     (gnus-parse-format (setq value (symbol-value (intern var)))
-                       (symbol-value (intern (format "%s-alist" var)))
-                       (not (string-match "mode" var))))
-    (setq spec (symbol-value (intern (format "%s-spec" var))))
-    (push (list type value spec) gnus-format-specs)
+        (value (symbol-value (intern var)))
+        (spec (set
+               (intern (format "%s-spec" var))
+               (gnus-parse-format
+                value (symbol-value (intern (format "%s-alist" var)))
+                (not (string-match "mode" var)))))
+        (entry (assq type gnus-format-specs)))
+    (if entry
+       (let ((elem (assoc value entry)))
+         (if elem
+             (setcdr elem spec)
+           (setcdr entry (cons (cons value elem) (cdr entry)))))
+      (push (list type (cons value spec)) gnus-format-specs))
+    (gnus-product-variable-touch 'gnus-format-specs)
 
     (pop-to-buffer "*Gnus Format*")
     (erase-buffer)
     (lisp-interaction-mode)
     (insert (pp-to-string spec))))
 
+(put 'gnus-search-or-regist-spec 'lisp-indent-function 1)
+(defmacro gnus-search-or-regist-spec (mspec &rest body)
+  (let ((specs (nth 0 mspec)) (type (nth 1 mspec)) (format (nth 2 mspec))
+       (spec (nth 3 mspec)) (entry (nth 4 mspec)) (elem (nth 5 mspec)))
+    `(let* ((,entry (assq ,type ,specs))
+           (,elem (assoc ,format (cdr ,entry))))
+       (or (cdr ,elem)
+          (when (progn ,@body)
+            (if ,entry
+                (if ,elem
+                    (setcdr ,elem ,spec)
+                  (setcdr ,entry (cons (cons ,format ,spec) (cdr ,entry))))
+              (push (list ,type (cons ,format ,spec)) ,specs))
+            (gnus-product-variable-touch (quote ,specs)))
+          ,spec))))
+
+(defun gnus-update-format-specification-1 (type format val)
+  (set (intern (format "gnus-%s-line-format-spec" type))
+       (gnus-search-or-regist-spec (gnus-format-specs-compiled
+                                   type format val entry elem)
+        (when (and gnus-compile-user-specs val)
+          (setq val (prog1
+                        (progn
+                          (fset 'gnus-tmp-func `(lambda () ,val))
+                          (require 'bytecomp)
+                          (let (byte-compile-warnings)
+                            (byte-compile 'gnus-tmp-func))
+                          (gnus-byte-code 'gnus-tmp-func))
+                      (when (get-buffer "*Compile-Log*")
+                        (bury-buffer "*Compile-Log*"))
+                      (when (get-buffer "*Compile-Log-Show*")
+                        (bury-buffer "*Compile-Log-Show*"))))))))
+
 (defun gnus-update-format-specifications (&optional force &rest types)
   "Update all (necessary) format specifications."
   ;; Make the indentation array.
   ;; See whether all the stored info needs to be flushed.
-  (when (or force
-           (not (equal emacs-version
-                       (cdr (assq 'version gnus-format-specs))))
-           (not (equal gnus-version
-                       (cdr (assq 'gnus-version gnus-format-specs)))))
+  (when force
     (message "%s" "Force update format specs.")
-    (setq gnus-format-specs nil))
+    (setq gnus-format-specs nil
+         gnus-format-specs-compiled nil)
+    (gnus-product-variable-touch 'gnus-format-specs
+                                'gnus-format-specs-compiled))
 
   ;; Go through all the formats and see whether they need updating.
-  (let (new-format entry type val)
-    (while (setq type (pop types))
-      ;; Jump to the proper buffer to find out the value of
-      ;; the variable, if possible.  (It may be buffer-local.)
-      (save-excursion
-       (let ((buffer (intern (format "gnus-%s-buffer" type)))
-             val)
-         (when (and (boundp buffer)
-                    (setq val (symbol-value buffer))
-                    (gnus-buffer-exists-p val))
-           (set-buffer val))
-         (setq new-format (symbol-value
-                           (intern (format "gnus-%s-line-format" type)))))
-       (setq entry (cdr (assq type gnus-format-specs)))
-       (if (and (car entry)
-                (equal (car entry) new-format))
-           ;; Use the old format.
-           (set (intern (format "gnus-%s-line-format-spec" type))
-                (cadr entry))
-         ;; This is a new format.
-         (setq val
-               (if (not (stringp new-format))
-                   ;; This is a function call or something.
-                   new-format
-                 ;; This is a "real" format.
-                 (gnus-parse-format
-                  new-format
-                  (symbol-value
-                   (intern (format "gnus-%s-line-format-alist" type)))
-                  (not (string-match "mode$" (symbol-name type))))))
-         ;; Enter the new format spec into the list.
-         (if entry
-             (progn
-               (setcar (cdr entry) val)
-               (setcar entry new-format))
-           (push (list type new-format val) gnus-format-specs))
-         (set (intern (format "gnus-%s-line-format-spec" type)) val)))))
-
-  (unless (assq 'version gnus-format-specs)
-    (push (cons 'version emacs-version) gnus-format-specs))
-  (unless (assq 'gnus-version gnus-format-specs)
-    (push (cons 'gnus-version gnus-version) gnus-format-specs)))
+  (let (type val)
+    (save-excursion
+      (while (setq type (pop types))
+       ;; Jump to the proper buffer to find out the value of
+       ;; the variable, if possible.  (It may be buffer-local.)
+       (let* ((new-format
+               (let ((buffer (intern (format "gnus-%s-buffer" type))))
+                 (when (and (boundp buffer)
+                            (setq val (symbol-value buffer))
+                            (gnus-buffer-exists-p val))
+                   (set-buffer val))
+                 (symbol-value
+                  (intern (format "gnus-%s-line-format" type))))))
+         (or (gnus-update-format-specification-1 type new-format nil)
+             ;; This is a new format.
+             (gnus-update-format-specification-1
+              type new-format
+              (gnus-search-or-regist-spec (gnus-format-specs
+                                           type new-format val entry elem)
+                (setq val (if (stringp new-format)
+                              ;; This is a "real" format.
+                              (gnus-parse-format
+                               new-format
+                               (symbol-value
+                                (intern (format "gnus-%s-line-format-alist"
+                                                type)))
+                               (not (string-match "mode$"
+                                                  (symbol-name type))))
+                            ;; This is a function call or something.
+                            new-format))))))))))
 
 (defvar gnus-mouse-face-0 'highlight)
 (defvar gnus-mouse-face-1 'highlight)
@@ -355,7 +386,7 @@ by `gnus-xmas-redefine'."
   ;; This function parses the FORMAT string with the help of the
   ;; SPEC-ALIST and returns a list that can be eval'ed to return a
   ;; string.
-  (let ((xemacs-mule-p (and gnus-xemacs (featurep 'mule)))
+  (let ((xemacs-mule-p (and (featurep 'xemacs) (featurep 'mule)))
        max-width
        spec flist fstring elem result dontinsert user-defined
        type value pad-width spec-beg cut-width ignore-value
@@ -531,13 +562,14 @@ If PROPS, insert the result."
   (require 'bytecomp)
   (let ((entries gnus-format-specs)
        (byte-compile-warnings '(unresolved callargs redefine))
-       entry gnus-tmp-func)
+       entry type compiled-function)
     (save-excursion
       (gnus-message 7 "Compiling format specs...")
 
       (while entries
-       (setq entry (pop entries))
-       (if (eq (car entry) 'version)
+       (setq entry (pop entries)
+             type (car entry))
+       (if (memq type '(version gnus-version))
            (setq gnus-format-specs (delq entry gnus-format-specs))
          (let ((form (caddr entry)))
            (when (and (listp form)
@@ -546,13 +578,18 @@ If PROPS, insert the result."
                       ;; Under XEmacs, it's (funcall #<compiled-function ...>)
                       (not (and (eq 'funcall (car form))
                                 (byte-code-function-p (cadr form)))))
-             (fset 'gnus-tmp-func `(lambda () ,form))
+             (defalias 'gnus-tmp-func `(lambda () ,form))
              (byte-compile 'gnus-tmp-func)
-             (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func))))))
+             (setq compiled-function (gnus-byte-code 'gnus-tmp-func))
+             (set (intern (format "gnus-%s-line-format-spec" type))
+                  compiled-function)
+             (let ((elem (cdr (assq type gnus-format-specs-compiled))))
+               (if elem
+                   (set-alist 'elem (cadr entry) compiled-function)
+                 (setq elem (list (cadr entry) compiled-function)))
+               (set-alist 'gnus-format-specs-compiled type elem))))))
 
       (push (cons 'version emacs-version) gnus-format-specs)
-      ;; Mark the .newsrc.eld file as "dirty".
-      (gnus-dribble-touch)
       (gnus-message 7 "Compiling user specs...done"))))
 
 (defun gnus-set-format (type &optional insertable)
@@ -562,7 +599,12 @@ If PROPS, insert the result."
        (symbol-value (intern (format "gnus-%s-line-format-alist" type)))
        insertable)))
 
+(gnus-ems-redefine)
 
 (provide 'gnus-spec)
 
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
 ;;; gnus-spec.el ends here
index 66c67ed..f1224c9 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-spec)
 (require 'gnus-group)
@@ -173,12 +175,12 @@ The following commands are available:
         (gnus-tmp-where (nth 1 method))
         (elem (assoc method gnus-opened-servers))
         (gnus-tmp-status (cond ((eq (nth 1 elem) 'denied)
-                       "(denied)")
-                      ((or (gnus-server-opened method)
-                           (eq (nth 1 elem) 'ok))
-                       "(opened)")
-                      (t
-                       "(closed)"))))
+                                "(denied)")
+                               ((or (gnus-server-opened method)
+                                    (eq (nth 1 elem) 'ok))
+                                "(opened)")
+                               (t
+                                "(closed)"))))
     (beginning-of-line)
     (gnus-add-text-properties
      (point)
@@ -295,6 +297,18 @@ The following commands are available:
   (push (assoc server gnus-server-alist) gnus-server-killed-servers)
   (setq gnus-server-alist (delq (car gnus-server-killed-servers)
                                gnus-server-alist))
+  (let ((groups (gnus-groups-from-server server)))
+    (when (and groups
+              (gnus-yes-or-no-p
+               (format "Kill all %s groups from this server? "
+                       (length groups))))
+      (dolist (group groups)
+       (setq gnus-newsrc-alist
+             (delq (assoc group gnus-newsrc-alist)
+                   gnus-newsrc-alist))
+       (when gnus-group-change-level-function
+         (funcall gnus-group-change-level-function
+                  group gnus-level-killed 3)))))
   (gnus-server-position-point))
 
 (defun gnus-server-yank-server ()
@@ -508,28 +522,28 @@ The following commands are available:
   (suppress-keymap gnus-browse-mode-map)
 
   (gnus-define-keys
-   gnus-browse-mode-map
-   " " gnus-browse-read-group
-   "=" gnus-browse-select-group
-   "n" gnus-browse-next-group
-   "p" gnus-browse-prev-group
-   "\177" gnus-browse-prev-group
-   [delete] gnus-browse-prev-group
-   "N" gnus-browse-next-group
-   "P" gnus-browse-prev-group
-   "\M-n" gnus-browse-next-group
-   "\M-p" gnus-browse-prev-group
-   "\r" gnus-browse-select-group
-   "u" gnus-browse-unsubscribe-current-group
-   "l" gnus-browse-exit
-   "L" gnus-browse-exit
-   "q" gnus-browse-exit
-   "Q" gnus-browse-exit
-   "\C-c\C-c" gnus-browse-exit
-   "?" gnus-browse-describe-briefly
-
-   "\C-c\C-i" gnus-info-find-node
-   "\C-c\C-b" gnus-bug))
+      gnus-browse-mode-map
+    " " gnus-browse-read-group
+    "=" gnus-browse-select-group
+    "n" gnus-browse-next-group
+    "p" gnus-browse-prev-group
+    "\177" gnus-browse-prev-group
+    [delete] gnus-browse-prev-group
+    "N" gnus-browse-next-group
+    "P" gnus-browse-prev-group
+    "\M-n" gnus-browse-next-group
+    "\M-p" gnus-browse-prev-group
+    "\r" gnus-browse-select-group
+    "u" gnus-browse-unsubscribe-current-group
+    "l" gnus-browse-exit
+    "L" gnus-browse-exit
+    "q" gnus-browse-exit
+    "Q" gnus-browse-exit
+    "\C-c\C-c" gnus-browse-exit
+    "?" gnus-browse-describe-briefly
+
+    "\C-c\C-i" gnus-info-find-node
+    "\C-c\C-b" gnus-bug))
 
 (defun gnus-browse-make-menu-bar ()
   (gnus-turn-off-edit-menu 'browse)
@@ -612,17 +626,17 @@ The following commands are available:
       (setq groups (sort groups
                         (lambda (l1 l2)
                           (string< (car l1) (car l2)))))
-      (let ((buffer-read-only nil) 
-           (gnus-select-method nil) 
-           name)
+      (let ((buffer-read-only nil) charset)
        (while groups
-         (setq group (car groups)
-               name (format "%s" (car group)))
-         (insert (if (cadr (gnus-gethash 
-                            (gnus-group-prefixed-name name method)
-                            gnus-newsrc-hashtb))
-                     " " "K")
-                 (format "%7d: " (cdr group)) name "\n")
+         (setq group (car groups))
+         (setq charset (gnus-group-name-charset method group))
+         (gnus-add-text-properties
+          (point)
+          (prog1 (1+ (point))
+            (insert
+             (format "K%7d: %s\n" (cdr group)
+                     (gnus-group-name-decode (car group) charset))))
+          (list 'gnus-group (car group)))
          (setq groups (cdr groups))))
       (switch-to-buffer (current-buffer))
       (goto-char (point-min))
@@ -667,7 +681,7 @@ buffer.
     (if (or (not (gnus-get-info group))
            (gnus-ephemeral-group-p group))
        (unless (gnus-group-read-ephemeral-group
-                group gnus-browse-current-method nil
+                (gnus-group-real-name group) gnus-browse-current-method nil
                 (cons (current-buffer) 'browse))
          (error "Couldn't enter %s" group))
       (unless (gnus-group-read-group nil no-article group)
@@ -710,11 +724,12 @@ buffer.
 (defun gnus-browse-group-name ()
   (save-excursion
     (beginning-of-line)
-    (when (re-search-forward ": \\(.*\\)$" (gnus-point-at-eol) t)
-      (gnus-group-prefixed-name
-       ;; Remove text props.
-       (format "%s" (match-string 1))
-       gnus-browse-current-method))))
+    (let ((name (get-text-property (point) 'gnus-group)))
+      (when (re-search-forward ": \\(.*\\)$" (gnus-point-at-eol) t)
+       (gnus-group-prefixed-name
+        (or name
+            (match-string-no-properties 1))
+        gnus-browse-current-method)))))
 
 (defun gnus-browse-unsubscribe-group ()
   "Toggle subscription of the current group in the browse buffer."
index bf285a5..a536302 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-start.el --- startup functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -27,6 +28,7 @@
 
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
+
 (require 'gnus)
 (require 'gnus-win)
 (require 'gnus-int)
   :group 'gnus-start
   :type 'file)
 
+(defcustom gnus-product-directory
+  (nnheader-concat gnus-directory (concat "." gnus-product-name))
+  "Product depend data files directory."
+  :group 'gnus-start
+  :type '(choice directory (const nil)))
+
 (defcustom gnus-init-file (nnheader-concat gnus-home-directory ".gnus")
   "Your Gnus Emacs-Lisp startup file name.
 If a file with the `.el' or `.elc' suffixes exists, it will be read instead."
@@ -53,7 +61,7 @@ If a file with the `.el' or `.elc' suffixes exists, it will be read instead."
               (directory-file-name installation-directory))
              "site-lisp/gnus-init")
     (error nil))
-  "*The site-wide Gnus Emacs-Lisp startup file name, or nil if none.
+  "The site-wide Gnus Emacs-Lisp startup file name, or nil if none.
 If a file with the `.el' or `.elc' suffixes exists, it will be read instead."
   :group 'gnus-start
   :type '(choice file (const nil)))
@@ -226,12 +234,12 @@ not match this regexp will be removed before saving the list."
   :type 'boolean)
 
 (defcustom gnus-ignored-newsgroups
- (mapconcat 'identity
-           '("^to\\."                  ; not "real" groups
-             "^[0-9. \t]+ "            ; all digits in name
-             "^[\"][]\"[#'()]"         ; bogus characters
-             )
-           "\\|")
+  (mapconcat 'identity
+            '("^to\\."                 ; not "real" groups
+              "^[0-9. \t]+ "           ; all digits in name
+              "^[\"][]\"[#'()]"        ; bogus characters
+              )
+            "\\|")
   "*A regexp to match uninteresting newsgroups in the active file.
 Any lines in the active file matching this regular expression are
 removed from the newsgroup list before anything else is done to it,
@@ -591,13 +599,25 @@ the first newsgroup."
 (defvar nnoo-state-alist)
 (defvar gnus-current-select-method)
 
-(defun gnus-clear-system ()
-  "Clear all variables and buffers."
-  ;; Clear Gnus variables.
+(defun gnus-clear-quick-file-variables ()
+  "Clear all variables in quick startup files."
   (let ((variables gnus-variable-list))
+    ;; Clear Gnus variables.
     (while variables
       (set (car variables) nil)
       (setq variables (cdr variables))))
+  (let ((files gnus-product-variable-file-list))
+    (while files
+      (let ((variables (nthcdr 3 (car files))))
+       (while variables
+         (set (car variables) nil)
+         (setq variables (cdr variables))))
+      (setq files (cdr files)))))
+
+(defun gnus-clear-system ()
+  "Clear all variables and buffers."
+  ;; Clear gnus variables.
+  (gnus-clear-quick-file-variables)
   ;; Clear other internal variables.
   (setq gnus-list-of-killed-groups nil
        gnus-have-read-active-file nil
@@ -621,6 +641,7 @@ the first newsgroup."
        gnus-newsgroup-unreads nil
        nnoo-state-alist nil
        gnus-current-select-method nil
+       nnmail-split-history nil
        gnus-ephemeral-servers nil)
   (gnus-shutdown 'gnus)
   ;; Kill the startup file.
@@ -678,7 +699,7 @@ prompt the user for the name of an NNTP server to use."
     (when gnus-simple-splash
       (setq gnus-simple-splash nil)
       (cond
-       (gnus-xemacs
+       ((featurep 'xemacs)
        (gnus-xmas-splash))
        ((and (eq window-system 'x)
             (= (frame-height) (1+ (window-height))))
@@ -734,17 +755,14 @@ prompt the user for the name of an NNTP server to use."
 
 ;;;###autoload
 (defun gnus-unload ()
-  "Unload all Gnus features."
+  "Unload all Gnus features.
+\(For some value of `all' or `Gnus'.)  Currently, features whose names
+have prefixes `gnus-', `nn', `mm-' or `rfc' are unloaded.  Use
+cautiously -- unloading may cause trouble."
   (interactive)
-  (unless (boundp 'load-history)
-    (error "Sorry, `gnus-unload' is not implemented in this Emacs version"))
-  (let ((history load-history)
-       feature)
-    (while history
-      (and (string-match "^\\(gnus\\|nn\\)" (caar history))
-          (setq feature (cdr (assq 'provide (car history))))
-          (unload-feature feature 'force))
-      (setq history (cdr history)))))
+  (dolist (feature features)
+    (if (string-match "^\\(gnus-\\|nn\\|mm-\\|rfc\\)" (symbol-name feature))
+       (unload-feature feature 'force))))
 
 \f
 ;;;
@@ -962,16 +980,16 @@ for new groups, and subscribe the new groups as zombies."
   (let* ((gnus-subscribe-newsgroup-method
          gnus-subscribe-newsgroup-method)
         (check (cond
-               ((or (and (= (or arg 1) 4)
-                         (not (listp gnus-check-new-newsgroups)))
-                    (null gnus-read-active-file)
-                    (eq gnus-read-active-file 'some))
-                'ask-server)
-               ((= (or arg 1) 16)
-                (setq gnus-subscribe-newsgroup-method
-                      'gnus-subscribe-zombies)
-                t)
-               (t gnus-check-new-newsgroups))))
+                ((or (and (= (or arg 1) 4)
+                          (not (listp gnus-check-new-newsgroups)))
+                     (null gnus-read-active-file)
+                     (eq gnus-read-active-file 'some))
+                 'ask-server)
+                ((= (or arg 1) 16)
+                 (setq gnus-subscribe-newsgroup-method
+                       'gnus-subscribe-zombies)
+                 t)
+                (t gnus-check-new-newsgroups))))
     (unless (gnus-check-first-time-used)
       (if (or (consp check)
              (eq check 'ask-server))
@@ -1106,39 +1124,40 @@ for new groups, and subscribe the new groups as zombies."
         hashtb))
       (when new-newsgroups
        (gnus-subscribe-hierarchical-interactive new-newsgroups)))
-     (if (> groups 0)
-        (gnus-message 5 "%d new newsgroup%s arrived"
-                      groups (if (> groups 1) "s have" " has"))
-       (gnus-message 5 "No new newsgroups"))
+    (if (> groups 0)
+       (gnus-message 5 "%d new newsgroup%s arrived"
+                     groups (if (> groups 1) "s have" " has"))
+      (gnus-message 5 "No new newsgroups"))
     (when got-new
       (setq gnus-newsrc-last-checked-date new-date))
     got-new))
 
 (defun gnus-check-first-time-used ()
   (catch 'ended
-    (let ((files (list gnus-current-startup-file
-                      (concat gnus-current-startup-file ".el")
-                      (concat gnus-current-startup-file ".eld")
-                      gnus-startup-file
-                      (concat gnus-startup-file ".el")
-                      (concat gnus-startup-file ".eld"))))
-      (while files
-       (when (file-exists-p (pop files))
-         (throw 'ended nil))))
+    ;; First check if any of the following files exist.  If they do,
+    ;; it's not the first time the user has used Gnus.
+    (dolist (file (list gnus-current-startup-file
+                       (concat gnus-current-startup-file ".el")
+                       (concat gnus-current-startup-file ".eld")
+                       gnus-startup-file
+                       (concat gnus-startup-file ".el")
+                       (concat gnus-startup-file ".eld")))
+      (when (file-exists-p file)
+       (throw 'ended nil)))
     (gnus-message 6 "First time user; subscribing you to default groups")
     (unless (gnus-read-active-file-p)
       (let ((gnus-read-active-file t))
        (gnus-read-active-file)))
     (setq gnus-newsrc-last-checked-date (current-time-string))
-    (let ((groups gnus-default-subscribed-newsgroups)
+    ;; Subscribe to the default newsgroups.
+    (let ((groups (or gnus-default-subscribed-newsgroups
+                     gnus-backup-default-subscribed-newsgroups))
          group)
-      (if (eq groups t)
-         nil
-       (setq groups (or groups gnus-backup-default-subscribed-newsgroups))
+      (when (eq groups t)
+       ;; If t, we subscribe (or not) all groups as if they were new.
        (mapatoms
         (lambda (sym)
-          (if (null (setq group (symbol-name sym)))
-              ()
+          (when (setq group (symbol-name sym))
             (let ((do-sub (gnus-matches-options-n group)))
               (cond
                ((eq do-sub 'subscribe)
@@ -1149,18 +1168,17 @@ for new groups, and subscribe the new groups as zombies."
                (t
                 (push group gnus-killed-list))))))
         gnus-active-hashtb)
-       (while groups
-         (when (gnus-active (car groups))
+       (dolist (group groups)
+         ;; Only subscribe the default groups that are activated.
+         (when (gnus-active group)
            (gnus-group-change-level
-            (car groups) gnus-level-default-subscribed gnus-level-killed))
-         (setq groups (cdr groups)))
+            group gnus-level-default-subscribed gnus-level-killed)))
        (save-excursion
          (set-buffer gnus-group-buffer)
          (gnus-group-make-help-group))
        (when gnus-novice-user
          (gnus-message 7 "`A k' to list killed groups"))))))
 
-
 (defun gnus-subscribe-group (group &optional previous method)
   "Subcribe GROUP and put it after PREVIOUS."
   (gnus-group-change-level
@@ -1263,14 +1281,14 @@ for new groups, and subscribe the new groups as zombies."
            (setq active (gnus-active group))
            (setq num
                  (if active (- (1+ (cdr active)) (car active)) t))
-           ;; Shorten the select method if possible, if we need to
-           ;; store it at all (native groups).
-           (let ((method (gnus-method-simplify
-                          (or gnus-override-subscribe-method
-                              (gnus-group-method group)))))
-             (if method
-                 (setq info (list group level nil nil method))
-               (setq info (list group level nil)))))
+           ;; Shorten the select method if possible, if we need to
+           ;; store it at all (native groups).
+           (let ((method (gnus-method-simplify
+                          (or gnus-override-subscribe-method
+                              (gnus-group-method group)))))
+             (if method
+                 (setq info (list group level nil nil method))
+               (setq info (list group level nil)))))
          (unless previous
            (setq previous
                  (let ((p gnus-newsrc-alist))
@@ -1388,8 +1406,10 @@ newsgroup."
           t)
         (condition-case ()
             (inline (gnus-request-group group dont-check method))
-          ;(error nil)
-          (quit nil))
+          ;;(error nil)
+          (quit
+           (message "Quit activating %s" group)
+           nil))
         (setq active (gnus-parse-active))
         ;; If there are no articles in the group, the GROUP
         ;; command may have responded with the `(0 . 0)'.  We
@@ -1502,7 +1522,7 @@ newsgroup."
                  gnus-activate-foreign-newsgroups)
                 (t 0))
           level))
-        info group active method retrievegroups)
+        scanned-methods info group active method retrievegroups)
     (gnus-message 5 "Checking new news...")
 
     (while newsrc
@@ -1514,6 +1534,13 @@ newsgroup."
       ;; be reached) we just set the number of unread articles in this
       ;; newsgroup to t.  This means that Gnus thinks that there are
       ;; unread articles, but it has no idea how many.
+
+      ;; To be more explicit:
+      ;; >0 for an active group with messages
+      ;; 0 for an active group with no unread messages
+      ;; nil for non-foreign groups that the user has requested not be checked
+      ;; t for unchecked foreign groups or bogus groups, or groups that can't
+      ;;   be checked, for one reason or other.
       (if (and (setq method (gnus-info-method info))
               (not (inline
                      (gnus-server-equal
@@ -1521,8 +1548,8 @@ newsgroup."
                       (setq method (gnus-server-get-method nil method)))))
               (not (gnus-secondary-method-p method)))
          ;; These groups are foreign.  Check the level.
-         (when (<= (gnus-info-level info) foreign-level)
-           (setq active (gnus-activate-group group 'scan))
+         (when (and (<= (gnus-info-level info) foreign-level)
+                     (setq active (gnus-activate-group group 'scan)))
            ;; Let the Gnus agent save the active file.
            (when (and gnus-agent gnus-plugged active)
              (gnus-agent-save-group-info
@@ -1546,8 +1573,25 @@ newsgroup."
                  (setcdr (assoc method retrievegroups)
                          (cons group (cdr (assoc method retrievegroups))))
                (push (list method group) retrievegroups))
-         (setq active (gnus-activate-group group 'scan))
-           (inline (gnus-close-group group))))))
+           ;; hack: `nnmail-get-new-mail' changes the mail-source depending
+           ;; on the group, so we must perform a scan for every group
+           ;; if the users has any directory mail sources.
+           ;; hack: if `nnmail-scan-directory-mail-source-once' is non-nil,
+           ;; for it scan all spool files even when the groups are
+           ;; not required.
+           (if (and
+                (or nnmail-scan-directory-mail-source-once
+                    (null (assq 'directory
+                                (or mail-sources
+                                    (if (listp nnmail-spool-file)
+                                        nnmail-spool-file
+                                      (list nnmail-spool-file))))))
+                (member method scanned-methods))
+               (setq active (gnus-activate-group group))
+             (setq active (gnus-activate-group group 'scan))
+             (push method scanned-methods))
+            (when active
+              (gnus-close-group group))))))
 
       ;; Get the number of unread articles in the group.
       (cond
@@ -1569,23 +1613,23 @@ newsgroup."
       (let* ((mg (pop retrievegroups))
             (method (or (car mg) gnus-select-method))
             (groups (cdr mg)))
-       (gnus-check-server method)
-       ;; Request that the backend scan its incoming messages.
-       (when (gnus-check-backend-function 'request-scan (car method))
-         (gnus-request-scan nil method))
-       (gnus-read-active-file-2 (mapcar (lambda (group)
-                                          (gnus-group-real-name group))
-                                        groups) method)
-       (dolist (group groups)
-         (cond
-          ((setq active (gnus-active (gnus-info-group
-                                      (setq info (gnus-get-info group)))))
-           (inline (gnus-get-unread-articles-in-group info active t)))
-          (t
-           ;; The group couldn't be reached, so we nix out the number of
-           ;; unread articles and stuff.
-           (gnus-set-active group nil)
-           (setcar (gnus-gethash group gnus-newsrc-hashtb) t))))))
+       (when (gnus-check-server method)
+          ;; Request that the backend scan its incoming messages.
+          (when (gnus-check-backend-function 'request-scan (car method))
+            (gnus-request-scan nil method))
+          (gnus-read-active-file-2 (mapcar (lambda (group)
+                                             (gnus-group-real-name group))
+                                           groups) method)
+          (dolist (group groups)
+            (cond
+             ((setq active (gnus-active (gnus-info-group
+                                         (setq info (gnus-get-info group)))))
+              (inline (gnus-get-unread-articles-in-group info active t)))
+             (t
+              ;; The group couldn't be reached, so we nix out the number of
+              ;; unread articles and stuff.
+              (gnus-set-active group nil)
+              (setcar (gnus-gethash group gnus-newsrc-hashtb) t)))))))
 
     (gnus-message 5 "Checking new news...done")))
 
@@ -1718,7 +1762,9 @@ newsgroup."
              (gnus-read-active-file-1 method force)
            ;; We catch C-g so that we can continue past servers
            ;; that do not respond.
-           (quit nil)))))))
+           (quit
+            (message "Quit reading the active file")
+            nil)))))))
 
 (defun gnus-read-active-file-1 (method force)
   (let (where mesg)
@@ -1770,14 +1816,14 @@ newsgroup."
       (gnus-check-server method)
       (let ((list-type (gnus-retrieve-groups groups method)))
        (cond ((not list-type)
-              (gnus-error 
+              (gnus-error
                1.2 "Cannot read partial active file from %s server."
                (car method)))
              ((eq list-type 'active)
               (gnus-active-to-gnus-format method gnus-active-hashtb nil t))
              (t
               (gnus-groups-to-gnus-format method gnus-active-hashtb t)))))))
-  
+
 ;; Read an active file and place the results in `gnus-active-hashtb'.
 (defun gnus-active-to-gnus-format (&optional method hashtb ignore-errors
                                             real-active)
@@ -1884,7 +1930,10 @@ newsgroup."
                     (gnus-group-prefixed-name "" method))))
 
     ;; Let the Gnus agent save the active file.
-    (if (and gnus-agent real-active gnus-plugged (gnus-agent-method-p method))
+    (if (and gnus-agent
+            real-active
+            gnus-plugged
+            (gnus-agent-method-p method))
        (progn
          (gnus-agent-save-groups method)
          (gnus-active-to-gnus-format method hashtb nil real-active))
@@ -1924,10 +1973,7 @@ newsgroup."
   "Read startup file.
 If FORCE is non-nil, the .newsrc file is read."
   ;; Reset variables that might be defined in the .newsrc.eld file.
-  (let ((variables gnus-variable-list))
-    (while variables
-      (set (car variables) nil)
-      (setq variables (cdr variables))))
+  (gnus-clear-quick-file-variables)
   (let* ((newsrc-file gnus-current-startup-file)
         (quick-file (concat newsrc-file ".el")))
     (save-excursion
@@ -1956,36 +2002,7 @@ If FORCE is non-nil, the .newsrc file is read."
          (buffer-disable-undo)
          (gnus-newsrc-to-gnus-format)
          (kill-buffer (current-buffer))
-         (gnus-message 5 "Reading %s...done" newsrc-file)))
-
-      ;; Convert old to new.
-      (gnus-convert-old-newsrc))))
-
-(defun gnus-convert-old-newsrc ()
-  "Convert old newsrc into the new format, if needed."
-  (let ((fcv (and gnus-newsrc-file-version
-                 (gnus-continuum-version gnus-newsrc-file-version))))
-    (cond
-     ;; No .newsrc.eld file was loaded.
-     ((null fcv) nil)
-     ;; Gnus 5 .newsrc.eld was loaded.
-     ((< fcv (gnus-continuum-version "September Gnus v0.1"))
-      (gnus-convert-old-ticks)))))
-
-(defun gnus-convert-old-ticks ()
-  (let ((newsrc (cdr gnus-newsrc-alist))
-       marks info dormant ticked)
-    (while (setq info (pop newsrc))
-      (when (setq marks (gnus-info-marks info))
-       (setq dormant (cdr (assq 'dormant marks))
-             ticked (cdr (assq 'tick marks)))
-       (when (or dormant ticked)
-         (gnus-info-set-read
-          info
-          (gnus-add-to-range
-           (gnus-info-read info)
-           (nconc (gnus-uncompress-range dormant)
-                  (gnus-uncompress-range ticked)))))))))
+         (gnus-message 5 "Reading %s...done" newsrc-file))))))
 
 (defun gnus-read-newsrc-el-file (file)
   (let ((ding-file (concat file "d")))
@@ -1993,16 +2010,20 @@ If FORCE is non-nil, the .newsrc file is read."
     (gnus-message 5 "Reading %s..." ding-file)
     (let (gnus-newsrc-assoc)
       (when (file-exists-p ding-file)
-       (condition-case nil
-           (with-temp-buffer
-             (insert-file-contents-as-coding-system
-              gnus-startup-file-coding-system ding-file)
-             (eval-region (point-min) (point-max)))
-         (error
-          (ding)
-          (unless (gnus-yes-or-no-p
-                   (format "Error in %s; continue? " ding-file))
-            (error "Error in %s" ding-file))))
+       (with-temp-buffer
+         (condition-case nil
+             (progn
+               (insert-file-contents-as-coding-system
+                gnus-startup-file-coding-system ding-file)
+               (eval-region (point-min) (point-max)))
+           (error
+            (ding)
+            (or (not (or (zerop (buffer-size))
+                         (eq 'binary gnus-startup-file-coding-system)
+                         (gnus-re-read-newsrc-el-file ding-file)))
+                (gnus-yes-or-no-p
+                 (format "Error in %s; continue? " ding-file))
+                (error "Error in %s" ding-file)))))
        (when gnus-newsrc-assoc
          (setq gnus-newsrc-alist gnus-newsrc-assoc))))
     (gnus-make-hashtable-from-newsrc-alist)
@@ -2011,7 +2032,71 @@ If FORCE is non-nil, the .newsrc file is read."
       (gnus-message 5 "Reading %s..." file)
       ;; The .el file is newer than the .eld file, so we read that one
       ;; as well.
-      (gnus-read-old-newsrc-el-file file))))
+      (gnus-read-old-newsrc-el-file file)))
+  (when (and gnus-product-directory
+            (file-directory-p gnus-product-directory))
+    (let ((list gnus-product-variable-file-list))
+      (while list
+       (apply 'gnus-product-read-variable-file-1 (car list))
+       (setq list (cdr list))))))
+
+(defun gnus-re-read-newsrc-el-file (file)
+  "Attempt to re-read .newsrc.eld file.  Returns `nil' if successful.
+The backup file \".newsrc.eld_\" will be created before re-reading."
+  (message "Error in %s; retrying..." file)
+  (if (and
+       (condition-case nil
+          (let ((backup (concat file "_")))
+            (copy-file file backup 'ok-if-already-exists 'keep-time)
+            (message " (The backup file %s has been created)" backup)
+            t)
+        (error nil))
+       (progn
+        (insert-file-contents-as-binary file nil nil nil 'replace)
+        (when (re-search-forward
+               "^[\t ]*([\t\n\r ]*setq[\t\n\r ]+gnus-format-specs" nil t)
+          (delete-region (goto-char (match-beginning 0)) (forward-list 1))
+          (decode-coding-region (point-min) (point-max)
+                                gnus-startup-file-coding-system)
+          (condition-case nil
+              (progn
+                (eval-region (point-min) (point-max))
+                t)
+            (error nil)))))
+      (prog1
+         nil
+       (message "Error in %s; retrying...done" file))
+    (message "Error in %s; retrying...failed" file)
+    t))
+
+(defun gnus-product-read-variable-file-1 (file checking-methods coding
+                                              &rest variables)
+  (let (error gnus-product-file-version method file-ver)
+    (when (or
+          (condition-case err
+              (let ((coding-system-for-read coding)
+                    (input-coding-system coding))
+                (load (expand-file-name file gnus-product-directory) t nil t)
+                nil)
+            (error
+             (message "%s" err)
+             (setq error t)))
+          (and (assq 'emacs-version checking-methods)
+               (not (string= emacs-version
+                             (cdr (assq 'emacs-version
+                                        gnus-product-file-version)))))
+          (and (setq method (assq 'product-version checking-methods))
+               (or (not (setq file-ver
+                              (cdr (assq 'product-version
+                                         gnus-product-file-version))))
+                   (< (product-version-compare file-ver (cadr method)) 0))))
+      (unless error
+       (message "\"%s\" seems to have mismatched contents, updating..."
+                file))
+      (while variables
+       (set (car variables) nil)
+       (gnus-product-variable-touch (car variables))
+       (setq variables (cdr variables))))))
 
 ;; Parse the old-style quick startup file
 (defun gnus-read-old-newsrc-el-file (file)
@@ -2363,12 +2448,15 @@ If FORCE is non-nil, the .newsrc file is read."
          (gnus-message
           5 "Saving %s.eld...done" gnus-current-startup-file))
        (gnus-dribble-delete-file)
-       (gnus-group-set-mode-line)))))
+       (gnus-group-set-mode-line))))
+  (when gnus-product-directory
+    (gnus-product-save-variable-file)))
 
 ;; Call the function above at C-x C-c.
-(defadvice save-buffers-kill-emacs (before save-gnus-newsrc-file-maybe activate)
+(defadvice save-buffers-kill-emacs (before save-gnus-newsrc-file-maybe
+                                          activate preactivate)
   "Save .newsrc and .newsrc.eld when Emacs is killed."
-  (when (get-buffer gnus-group-buffer)
+  (when (gnus-alive-p)
     (gnus-run-hooks 'gnus-exit-gnus-hook)
     (gnus-offer-save-summaries)
     (gnus-save-newsrc-file)))
@@ -2377,6 +2465,7 @@ If FORCE is non-nil, the .newsrc file is read."
   "Insert Gnus variables such as gnus-newsrc-alist in lisp format."
   (let ((print-quoted t)
        (print-escape-newlines t))
+
     (insert ";; -*- emacs-lisp -*-\n")
     (insert ";; Gnus startup file.\n")
     (insert "\
@@ -2405,6 +2494,76 @@ If FORCE is non-nil, the .newsrc file is read."
          (gnus-prin1 (symbol-value variable))
          (insert ")\n"))))))
 
+(defun gnus-product-variable-touch (&rest variables)
+  (while variables
+    (put (pop variables) 'gnus-product-variable 'dirty)))
+
+(defun gnus-product-variables-dirty-p (variables)
+  (catch 'done
+    (while variables
+      (when (eq (get (car variables) 'gnus-product-variable) 'dirty)
+       (throw 'done t))
+      (setq variables (cdr variables)))))
+
+(defun gnus-product-save-variable-file (&optional force)
+  "Save all product variables to files, when need to be saved."
+  (let ((list gnus-product-variable-file-list))
+    (gnus-make-directory gnus-product-directory)
+    (while list
+      (apply 'gnus-product-save-variable-file-1 force (car list))
+      (setq list (cdr list)))))
+
+(defun gnus-product-save-variable-file-1 (force file checking-methods coding
+                                               &rest variables)
+  "Save a product variable file, when need to be saved."
+  (when (or force
+           (gnus-product-variables-dirty-p variables))
+    (let ((product (product-find 'gnus-vers)))
+      (set-buffer (gnus-get-buffer-create " *gnus-product*"))
+      (make-local-variable 'version-control)
+      (setq version-control 'never)
+      (setq file (expand-file-name file gnus-product-directory)
+           buffer-file-name file
+           default-directory (file-name-directory file))
+      (buffer-disable-undo)
+      (erase-buffer)
+      (gnus-message 5 "Saving %s..." file)
+      (apply 'gnus-product-quick-file-format product checking-methods coding
+            variables)
+      (save-buffer-as-coding-system coding)
+      (kill-buffer (current-buffer))
+      (while variables
+       (put (car variables) 'gnus-product-variable nil)
+       (setq variables (cdr variables)))
+      (gnus-message
+       5 "Saving %s...done" file))))
+
+(defun gnus-product-quick-file-format (product checking-methods
+                                              coding &rest variables)
+  "Insert gnus product depend variables in lisp format."
+  (let ((print-quoted t)
+       (print-escape-newlines t)
+       variable param)
+    (insert (format ";; -*- Mode: emacs-lisp; coding: %s -*-\n" coding))
+    (insert (format ";; %s startup file.\n" (product-name product)))
+    (when (setq param (cdr (assq 'product-version checking-methods)))
+      (insert "(or (>= (product-version-compare "
+             "(product-version (product-find 'gnus-vers))\n"
+             "\t\t\t\t '" (apply 'prin1-to-string param) ")\n"
+             "\t0)\n"
+             "    (error \"This file was created by later version of "
+             "gnus.\"))\n"))
+    (insert "(setq gnus-product-file-version \n"
+           "      '((product-version . "
+           (prin1-to-string (product-version product)) ")\n"
+           "\t(emacs-version . " (prin1-to-string emacs-version) ")))\n")
+    (while variables
+      (when (and (boundp (setq variable (pop variables)))
+                (symbol-value variable))
+         (insert "(setq " (symbol-name variable) " '")
+         (gnus-prin1 (symbol-value variable))
+         (insert ")\n")))))
+
 (defun gnus-strip-killed-list ()
   "Return the killed list minus the groups that match `gnus-save-killed-list'."
   (let ((list gnus-killed-list)
@@ -2490,7 +2649,8 @@ If FORCE is non-nil, the .newsrc file is read."
           (make-temp-name (concat gnus-current-startup-file "-slave-")))
          (modes (ignore-errors
                   (file-modes (concat gnus-current-startup-file ".eld")))))
-      (gnus-write-buffer slave-name)
+      (gnus-write-buffer-as-coding-system
+       gnus-startup-file-coding-system slave-name)
       (when modes
        (set-file-modes slave-name modes)))))
 
@@ -2520,7 +2680,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (while slave-files
          (erase-buffer)
          (setq file (nth 1 (car slave-files)))
-         (insert-file-contents file)
+         (nnheader-insert-file-contents file)
          (when (condition-case ()
                    (progn
                      (eval-buffer (current-buffer))
@@ -2613,7 +2773,7 @@ If FORCE is non-nil, the .newsrc file is read."
              (let ((str (buffer-substring
                          (point) (progn (end-of-line) (point))))
                    (coding
-                    (and (or gnus-xemacs
+                    (and (or (featurep 'xemacs)
                              (and (boundp 'enable-multibyte-characters)
                                   enable-multibyte-characters))
                          (fboundp 'gnus-mule-get-coding-system)
@@ -2639,7 +2799,8 @@ If FORCE is non-nil, the .newsrc file is read."
   "Declare backend NAME with ABILITIES as a Gnus backend."
   (setq gnus-valid-select-methods
        (nconc gnus-valid-select-methods
-              (list (apply 'list name abilities)))))
+              (list (apply 'list name abilities))))
+  (gnus-redefine-select-method-widget))
 
 (defun gnus-set-default-directory ()
   "Set the default directory in the current buffer to `gnus-default-directory'.
index 7587108..158221d 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-sum.el --- summary mode commands for Semi-gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -28,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 (require 'gnus-group)
 (require 'gnus-spec)
   (require 'static))
 
 (eval-and-compile
-  (autoload 'gnus-cache-articles-in-group "gnus-cache"))
+  (autoload 'gnus-cache-articles-in-group "gnus-cache")
+  (autoload 'pgg-decrypt-region "pgg" nil t)
+  (autoload 'pgg-verify-region "pgg" nil t))
 
 (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
+(autoload 'gnus-cache-write-active "gnus-cache")
 (autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
+(autoload 'gnus-mailing-list-insinuate "gnus-ml" nil t)
+(autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" nil t)
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -178,10 +185,15 @@ This variable will only be used if the value of
   :type 'string)
 
 (defcustom gnus-summary-goto-unread t
-  "*If t, marking commands will go to the next unread article.
-If `never', commands that usually go to the next unread article, will
-go to the next article, whether it is read or not.
-If nil, only the marking commands will go to the next (un)read article."
+  "*If t, many commands will go to the next unread article.
+This applies to marking commands as well as other commands that
+\"naturally\" select the next article, like, for instance, `SPC' at
+the end of an article.
+
+If nil, the marking commands do NOT go to the next unread article
+(they go to the next article instead).  If `never', commands that
+usually go to the next unread article, will go to the next article,
+whether it is read or not."
   :group 'gnus-summary-marks
   :link '(custom-manual "(gnus)Setting Marks")
   :type '(choice (const :tag "off" nil)
@@ -364,13 +376,15 @@ The articles will simply be fed to the function given by
 
 (defcustom gnus-move-split-methods nil
   "*Variable used to suggest where articles are to be moved to.
-It uses the same syntax as the `gnus-split-methods' variable."
+It uses the same syntax as the `gnus-split-methods' variable.
+However, whereas `gnus-split-methods' specifies file names as targets,
+this variable specifies group names."
   :group 'gnus-summary-mail
   :type '(repeat (choice (list :value (fun) function)
                         (cons :value ("" "") regexp (repeat string))
                         (sexp :value nil))))
 
-(defcustom gnus-unread-mark ? ;Whitespace
+(defcustom gnus-unread-mark ?  ;Whitespace
   "*Mark used for unread articles."
   :group 'gnus-summary-marks
   :type 'character)
@@ -485,7 +499,7 @@ It uses the same syntax as the `gnus-split-methods' variable."
   :group 'gnus-summary-marks
   :type 'character)
 
-(defcustom gnus-empty-thread-mark ? ;Whitespace
+(defcustom gnus-empty-thread-mark ?  ;Whitespace
   "*There is no thread under the article."
   :group 'gnus-summary-marks
   :type 'character)
@@ -718,7 +732,8 @@ is not run if `gnus-visual' is nil."
   :type 'hook)
 
 (defcustom gnus-exit-group-hook nil
-  "*A hook called when exiting (not quitting) summary mode."
+  "*A hook called when exiting summary mode.
+This hook is not called from the non-updating exit commands like `Q'."
   :group 'gnus-various
   :type 'hook)
 
@@ -779,7 +794,7 @@ automatically when it is selected."
      . gnus-summary-high-unread-face)
     ((and (< score default) (= mark gnus-unread-mark))
      . gnus-summary-low-unread-face)
-    ((and (memq article gnus-newsgroup-incorporated) 
+    ((and (memq article gnus-newsgroup-incorporated)
          (= mark gnus-unread-mark))
      . gnus-summary-incorporated-face)
     ((= mark gnus-unread-mark)
@@ -839,11 +854,14 @@ which it may alter in any way.")
   '(("^hk\\>\\|^tw\\>\\|\\<big5\\>" cn-big5)
     ("^cn\\>\\|\\<chinese\\>" cn-gb-2312)
     ("^fj\\>\\|^japan\\>" iso-2022-jp-2)
+    ("^tnn\\>\\|^pin\\>\\|^sci.lang.japan" iso-2022-7bit)
     ("^relcom\\>" koi8-r)
     ("^fido7\\>" koi8-r)
     ("^\\(cz\\|hun\\|pl\\|sk\\|hr\\)\\>" iso-8859-2)
     ("^israel\\>" iso-8859-1)
     ("^han\\>" euc-kr)
+    ("^alt.chinese.text.big5\\>" chinese-big5)
+    ("^soc.culture.vietnamese\\>" vietnamese-viqr)
     ("^\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1)
     (".*" iso-8859-1))
   "Alist of regexps (to match group names) and default charsets to be used when reading."
@@ -858,7 +876,7 @@ default charset will be used instead."
   :type '(repeat symbol)
   :group 'gnus-charset)
 
-(defcustom gnus-group-ignored-charsets-alist 
+(defcustom gnus-group-ignored-charsets-alist
   '(("alt\\.chinese\\.text" iso-8859-1))
   "Alist of regexps (to match group names) and charsets that should be ignored.
 When these charsets are used in the \"charset\" parameter, the
@@ -874,7 +892,7 @@ This variable uses the same syntax as `gnus-emphasis-alist'."
                       (repeat (list (regexp :tag "Highlight regexp")
                                     (number :tag "Group for entire word" 0)
                                     (number :tag "Group for displayed part" 0)
-                                    (symbol :tag "Face" 
+                                    (symbol :tag "Face"
                                             gnus-emphasis-highlight-words)))))
   :group 'gnus-summary-visual)
 
@@ -897,8 +915,44 @@ by moving the mouse over the edge of the article window."
   :type 'integer
   :group 'gnus-summary-maneuvering)
 
+(defcustom gnus-summary-show-article-charset-alist
+  nil
+  "Alist of number and charset.
+The article will be shown with the charset corresponding to the
+numbered argument.
+For example: ((1 . cn-gb-2312) (2 . big5))."
+  :type '(repeat (cons (number :tag "Argument" 1)
+                      (symbol :tag "Charset")))
+  :group 'gnus-charset)
+
+(defcustom gnus-preserve-marks t
+  "Whether marks are preserved when moving, copying and respooling messages."
+  :type 'boolean
+  :group 'gnus-summary-marks)
+
+(defcustom gnus-alter-articles-to-read-function nil
+  "Function to be called to alter the list of articles to be selected."
+  :type 'function
+  :group 'gnus-summary)
+
+(defcustom gnus-orphan-score nil
+  "*All orphans get this score added.  Set in the score file."
+  :group 'gnus-score-default
+  :type '(choice (const nil)
+                integer))
+
+(defcustom gnus-summary-save-parts-default-mime "image/.*"
+  "*A regexp to match MIME parts when saving multiple parts of a message
+with gnus-summary-save-parts (X m). This regexp will be used by default
+when prompting the user for which type of files to save."
+  :group 'gnus-summary
+  :type 'regexp)
+
+
 ;;; Internal variables
 
+(defvar gnus-article-mime-handles nil)
+(defvar gnus-article-decoded-p nil)
 (defvar gnus-scores-exclude-files nil)
 (defvar gnus-page-broken nil)
 (defvar gnus-inhibit-mime-unbuttonizing nil)
@@ -910,8 +964,10 @@ by moving the mouse over the edge of the article window."
 (defvar gnus-thread-indent-array nil)
 (defvar gnus-thread-indent-array-level gnus-thread-indent-level)
 (defvar gnus-sort-gathered-threads-function 'gnus-thread-sort-by-number
-  "Function called to sort the articles within a thread after it has 
-been gathered together.")
+  "Function called to sort the articles within a thread after it has been gathered together.")
+
+(defvar gnus-summary-save-parts-type-history nil)
+(defvar gnus-summary-save-parts-last-directory nil)
 
 ;; Avoid highlighting in kill files.
 (defvar gnus-summary-inhibit-highlight nil)
@@ -935,9 +991,9 @@ been gathered together.")
     (?s gnus-tmp-subject-or-nil ?s)
     (?n gnus-tmp-name ?s)
     (?A (std11-address-string
-        (car (mime-read-field 'From gnus-tmp-header))) ?s)
+        (car (mime-entity-read-field gnus-tmp-header 'From))) ?s)
     (?a (or (std11-full-name-string
-            (car (mime-read-field 'From gnus-tmp-header)))
+            (car (mime-entity-read-field gnus-tmp-header 'From)))
            gnus-tmp-from) ?s)
     (?F gnus-tmp-from ?s)
     (?x ,(macroexpand '(mail-header-xref gnus-tmp-header)) ?s)
@@ -969,9 +1025,9 @@ been gathered together.")
        ?c)
     (?u gnus-tmp-user-defined ?s)
     (?P (gnus-pick-line-number) ?d))
-  "An alist of format specifications that can appear in summary lines,
-and what variables they correspond with, along with the type of the
-variable (string, integer, character, etc).")
+  "An alist of format specifications that can appear in summary lines.
+These are paired with what variables they correspond with, along with
+the type of the variable (string, integer, character, etc).")
 
 (defvar gnus-summary-dummy-line-format-alist
   `((?S gnus-tmp-subject ?s)
@@ -1122,6 +1178,7 @@ end position and text.")
     gnus-score-alist gnus-current-score-file
     (gnus-summary-expunge-below . global)
     (gnus-summary-mark-below . global)
+    (gnus-orphan-score . global)
     gnus-newsgroup-active gnus-scores-exclude-files
     gnus-newsgroup-history gnus-newsgroup-ancient
     gnus-newsgroup-sparse gnus-newsgroup-process-stack
@@ -1141,7 +1198,7 @@ end position and text.")
 ;; Subject simplification.
 
 (defun gnus-simplify-whitespace (str)
-  "Remove excessive whitespace."
+  "Remove excessive whitespace from STR."
   (let ((mystr str))
     ;; Multiple spaces.
     (while (string-match "[ \t][ \t]+" mystr)
@@ -1186,7 +1243,7 @@ If RE-ONLY is non-nil, strip leading `Re:'s only."
 (defsubst gnus-simplify-buffer-fuzzy-step (regexp &optional newtext)
   (goto-char (point-min))
   (while (re-search-forward regexp nil t)
-      (replace-match (or newtext ""))))
+    (replace-match (or newtext ""))))
 
 (defun gnus-simplify-buffer-fuzzy ()
   "Simplify string in the buffer fuzzily.
@@ -1194,7 +1251,7 @@ 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
-gnus-simplify-subject-fuzzy-regexp."
+`gnus-simplify-subject-fuzzy-regexp'."
   (let ((case-fold-search t)
        (modified-tick))
     (gnus-simplify-buffer-fuzzy-step "\t" " ")
@@ -1318,6 +1375,8 @@ increase the score of each group you read."
     "\M-\C-h" gnus-summary-hide-thread
     "\M-\C-f" gnus-summary-next-thread
     "\M-\C-b" gnus-summary-prev-thread
+    [(meta down)] gnus-summary-next-thread
+    [(meta up)] gnus-summary-prev-thread
     "\M-\C-u" gnus-summary-up-thread
     "\M-\C-d" gnus-summary-down-thread
     "&" gnus-summary-execute-command
@@ -1368,7 +1427,7 @@ increase the score of each group you read."
     "\C-d" gnus-summary-enter-digest-group
     "\M-\C-d" gnus-summary-read-document
     "\M-\C-e" gnus-summary-edit-parameters
-    "\M-\C-g" gnus-summary-customize-parameters
+    "\M-\C-a" gnus-summary-customize-parameters
     "\C-c\C-b" gnus-bug
     "*" gnus-cache-enter-article
     "\M-*" gnus-cache-remove-article
@@ -1427,7 +1486,7 @@ increase the score of each group you read."
     "T" gnus-summary-limit-include-thread
     "d" gnus-summary-limit-exclude-dormant
     "t" gnus-summary-limit-to-age
-    "x" gnus-summary-limit-to-extra 
+    "x" gnus-summary-limit-to-extra
     "E" gnus-summary-limit-include-expunged
     "c" gnus-summary-limit-exclude-childless-dormant
     "C" gnus-summary-limit-mark-excluded-as-read)
@@ -1505,6 +1564,7 @@ increase the score of each group you read."
     "g" gnus-summary-show-article
     "s" gnus-summary-isearch-article
     "P" gnus-summary-print-article
+    "M" gnus-mailing-list-insinuate
     "t" gnus-article-babel)
 
   (gnus-define-keys (gnus-summary-wash-map "W" gnus-summary-mode-map)
@@ -1516,6 +1576,7 @@ increase the score of each group you read."
     "Q" gnus-article-fill-long-lines
     "C" gnus-article-capitalize-sentences
     "c" gnus-article-remove-cr
+    "Z" gnus-article-decode-HZ
     "f" gnus-article-display-x-face
     "l" gnus-summary-stop-page-breaking
     "r" gnus-summary-caesar-message
@@ -1606,8 +1667,7 @@ increase the score of each group you read."
     "c" gnus-article-copy-part
     "e" gnus-article-externalize-part
     "i" gnus-article-inline-part
-    "|" gnus-article-pipe-part)
-  )
+    "|" gnus-article-pipe-part))
 
 (defun gnus-summary-make-menu-bar ()
   (gnus-turn-off-edit-menu 'summary)
@@ -1691,7 +1751,8 @@ increase the score of each group you read."
               ["Toggle MIME" gnus-summary-toggle-mime t]
               ["Verbose header" gnus-summary-verbose-headers t]
               ["Toggle header" gnus-summary-toggle-header t]
-             ["Toggle smileys" gnus-smiley-display t])
+             ["Toggle smileys" gnus-smiley-display t]
+             ["HZ" gnus-article-decode-HZ t])
              ("Output"
               ["Save in default format" gnus-summary-save-article t]
               ["Save in file" gnus-summary-save-article-file t]
@@ -1745,6 +1806,7 @@ increase the score of each group you read."
              ["Fetch referenced articles" gnus-summary-refer-references t]
              ["Fetch current thread" gnus-summary-refer-thread t]
              ["Fetch article with id..." gnus-summary-refer-article t]
+             ["Setup Mailing List Params" gnus-mailing-list-insinuate t]
              ["Redisplay" gnus-summary-show-article t])))
       (easy-menu-define
        gnus-summary-article-menu gnus-summary-mode-map ""
@@ -1770,8 +1832,7 @@ increase the score of each group you read."
        ["Mark thread as read" gnus-summary-kill-thread t]
        ["Lower thread score" gnus-summary-lower-thread t]
        ["Raise thread score" gnus-summary-raise-thread t]
-       ["Rethread current" gnus-summary-rethread-current t]
-       ))
+       ["Rethread current" gnus-summary-rethread-current t]))
 
     (easy-menu-define
      gnus-summary-post-menu gnus-summary-mode-map ""
@@ -1787,8 +1848,8 @@ increase the score of each group you read."
        ["Wide reply and yank" gnus-summary-wide-reply-with-original t]
        ["Mail forward" gnus-summary-mail-forward t]
        ["Post forward" gnus-summary-post-forward t]
-       ["Digest and mail" gnus-summary-mail-digest t]
-       ["Digest and post" gnus-summary-post-digest t]
+       ["Digest and mail" gnus-summary-digest-mail-forward t]
+       ["Digest and post" gnus-summary-digest-post-forward t]
        ["Resend message" gnus-summary-resend-message t]
        ["Send bounced mail" gnus-summary-resend-bounced-mail t]
        ["Send a mail" gnus-summary-mail-other-window t]
@@ -1994,7 +2055,8 @@ increase the score of each group you read."
                                               (list 'gnus-summary-header
                                                     (nth 1 header)))
                                             (list 'quote (nth 1 (car ts)))
-                                            (list 'gnus-score-default nil)
+                                            (list 'gnus-score-delta-default
+                                                  nil)
                                             (nth 1 (car ps))
                                             t)
                                            t)
@@ -2060,6 +2122,7 @@ The following commands are available:
   (make-local-hook 'pre-command-hook)
   (add-hook 'pre-command-hook 'gnus-set-global-variables nil t)
   (gnus-run-hooks 'gnus-summary-mode-hook)
+  (turn-on-gnus-mailing-list-mode)
   (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy)
   (gnus-update-summary-mark-positions))
 
@@ -2396,12 +2459,13 @@ marks of articles."
 
 (defun gnus-restore-hidden-threads-configuration (config)
   "Restore hidden threads configuration from CONFIG."
-  (let (point buffer-read-only)
-    (while (setq point (pop config))
-      (when (and (< point (point-max))
-                (goto-char point)
-                (eq (char-after) ?\n))
-       (subst-char-in-region point (1+ point) ?\n ?\r)))))
+  (save-excursion
+    (let (point buffer-read-only)
+      (while (setq point (pop config))
+       (when (and (< point (point-max))
+                  (goto-char point)
+                  (eq (char-after) ?\n))
+         (subst-char-in-region point (1+ point) ?\n ?\r))))))
 
 ;; Various summary mode internalish functions.
 
@@ -2411,9 +2475,10 @@ marks of articles."
   (gnus-summary-next-page nil t))
 
 (defun gnus-summary-set-display-table ()
-  ;; Change the display table.  Odd characters have a tendency to mess
-  ;; up nicely formatted displays - we make all possible glyphs
-  ;; display only a single character.
+  "Change the display table.
+Odd characters have a tendency to mess
+up nicely formatted displays - we make all possible glyphs
+display only a single character."
 
   ;; We start from the standard display table, if any.
   (let ((table (or (copy-sequence standard-display-table)
@@ -2457,9 +2522,9 @@ marks of articles."
       t)))
 
 (defun gnus-set-global-variables ()
-  ;; Set the global equivalents of the summary buffer-local variables
-  ;; to the latest values they had.  These reflect the summary buffer
-  ;; that was in action when the last article was fetched.
+  "Set the global equivalents of the buffer-local variables.
+They are set to the latest values they had.  These reflect the summary
+buffer that was in action when the last article was fetched."
   (when (eq major-mode 'gnus-summary-mode)
     (setq gnus-summary-buffer (current-buffer))
     (let ((name gnus-newsgroup-name)
@@ -2600,7 +2665,7 @@ marks of articles."
          (if (or (null gnus-summary-default-score)
                  (<= (abs (- gnus-tmp-score gnus-summary-default-score))
                      gnus-summary-zcore-fuzz))
-             ? ;Whitespace
+             ?  ;Whitespace
            (if (< gnus-tmp-score gnus-summary-default-score)
                gnus-score-below-mark gnus-score-over-mark)))
         (gnus-tmp-replied
@@ -2616,9 +2681,8 @@ marks of articles."
          (cond
           ((string-match "<[^>]+> *$" gnus-tmp-from)
            (let ((beg (match-beginning 0)))
-             (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
-                      (substring gnus-tmp-from (1+ (match-beginning 0))
-                                 (1- (match-end 0))))
+             (or (and (string-match "^\".+\"" gnus-tmp-from)
+                      (substring gnus-tmp-from 1 (1- (match-end 0))))
                  (substring gnus-tmp-from 0 beg))))
           ((string-match "(.+)" gnus-tmp-from)
            (substring gnus-tmp-from
@@ -2643,7 +2707,7 @@ marks of articles."
       (forward-line 1))))
 
 (defun gnus-summary-update-line (&optional dont-update)
-  ;; Update summary line after change.
+  "Update summary line after change."
   (when (and gnus-summary-default-score
             (not gnus-summary-inhibit-highlight))
     (let* ((gnus-summary-inhibit-highlight t) ; Prevent recursion.
@@ -2665,7 +2729,7 @@ marks of articles."
         (if (or (null gnus-summary-default-score)
                 (<= (abs (- score gnus-summary-default-score))
                     gnus-summary-zcore-fuzz))
-            ? ;Whitespace
+            ?  ;Whitespace
           (if (< score gnus-summary-default-score)
               gnus-score-below-mark gnus-score-over-mark))
         'score))
@@ -2974,7 +3038,8 @@ If SHOW-ALL is non-nil, already read articles are also listed."
   "Query where the respool algorithm would put this article."
   (interactive)
   (gnus-summary-select-article)
-  (message (gnus-general-simplify-subject (gnus-summary-article-subject))))
+  (message "%s"
+          (gnus-general-simplify-subject (gnus-summary-article-subject))))
 
 (defun gnus-gather-threads-by-subject (threads)
   "Gather threads by looking at Subject headers."
@@ -3048,7 +3113,7 @@ If SHOW-ALL is non-nil, already read articles are also listed."
     result))
 
 (defun gnus-sort-gathered-threads (threads)
-  "Sort subtreads inside each gathered thread by article number."
+  "Sort subtreads inside each gathered thread by `gnus-sort-gathered-threads-function'."
   (let ((result threads))
     (while threads
       (when (stringp (caar threads))
@@ -3222,7 +3287,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
     (mapcar
      (lambda (relation)
        (when (gnus-dependencies-add-header
-             (make-full-mail-header
+             (make-full-mail-header-from-decoded-header
               gnus-reffed-article-number
               (nth 3 relation) "" (or (nth 4 relation) "")
               (nth 1 relation)
@@ -3265,31 +3330,38 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
        header)
 
     ;; overview: [num subject from date id refs chars lines misc]
-    (unless (eobp)
-      (forward-char))
-
-    (setq header
-         (make-full-mail-header
-          number                               ; number
-          (nnheader-nov-field)                 ; subject
-          (nnheader-nov-field)                 ; from
-          (nnheader-nov-field)                 ; date
-          (nnheader-nov-read-message-id)       ; id
-          (nnheader-nov-field)                 ; refs
-          (nnheader-nov-read-integer)          ; chars
-          (nnheader-nov-read-integer)          ; lines
-          (unless (eobp)
-            (nnheader-nov-field))              ; misc
-          (nnheader-nov-parse-extra)))         ; extra
+    (unwind-protect
+       (progn
+         (narrow-to-region (point) eol)
+         (unless (eobp)
+           (forward-char))
+
+         (setq header
+               (make-full-mail-header
+                number                         ; number
+                (nnheader-nov-field)           ; subject
+                (nnheader-nov-field)           ; from
+                (nnheader-nov-field)           ; date
+                (nnheader-nov-read-message-id) ; id
+                (nnheader-nov-field)           ; refs
+                (nnheader-nov-read-integer)    ; chars
+                (nnheader-nov-read-integer)    ; lines
+                (unless (eobp)
+                  (if (looking-at "Xref: ")
+                      (goto-char (match-end 0)))
+                  (nnheader-nov-field))        ; Xref
+                (nnheader-nov-parse-extra))))  ; extra
+
+      (widen))
 
     (when gnus-alter-header-function
       (funcall gnus-alter-header-function header))
     (gnus-dependencies-add-header header dependencies force-new)))
 
 (defun gnus-build-get-header (id)
-  ;; Look through the buffer of NOV lines and find the header to
-  ;; ID.  Enter this line into the dependencies hash table, and return
-  ;; the id of the parent article (if any).
+  "Look through the buffer of NOV lines and find the header to ID.
+Enter this line into the dependencies hash table, and return
+the id of the parent article (if any)."
   (let ((deps gnus-newsgroup-dependencies)
        found header)
     (prog1
@@ -3371,17 +3443,19 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
        (memq article gnus-newsgroup-expirable)
        ;; Only insert the Subject string when it's different
        ;; from the previous Subject string.
-       (if (gnus-subject-equal
-           (condition-case ()
-               (mail-header-subject
-                (gnus-data-header
-                 (cadr
-                  (gnus-data-find-list
-                   article
-                   (gnus-data-list t)))))
-             ;; Error on the side of excessive subjects.
-             (error ""))
-           (mail-header-subject header))
+       (if (and
+           gnus-show-threads
+           (gnus-subject-equal
+            (condition-case ()
+                (mail-header-subject
+                 (gnus-data-header
+                  (cadr
+                   (gnus-data-find-list
+                    article
+                    (gnus-data-list t)))))
+              ;; Error on the side of excessive subjects.
+              (error ""))
+            (mail-header-subject header)))
           ""
         (mail-header-subject header))
        nil (cdr (assq article gnus-newsgroup-scored))
@@ -3595,7 +3669,6 @@ If LINE, insert the rebuilt thread starting on line LINE."
                  (while thread
                    (gnus-remove-thread-1 (car thread))
                    (setq thread (cdr thread))))
-             (gnus-summary-show-all-threads)
              (gnus-remove-thread-1 thread))))))))
 
 (defun gnus-remove-thread-1 (thread)
@@ -3607,6 +3680,7 @@ If LINE, insert the rebuilt thread starting on line LINE."
       (gnus-remove-thread-1 (pop thread)))
     (when (setq d (gnus-data-find number))
       (goto-char (gnus-data-pos d))
+      (gnus-summary-show-thread)
       (gnus-data-remove
        number
        (- (gnus-point-at-bol)
@@ -3614,13 +3688,22 @@ If LINE, insert the rebuilt thread starting on line LINE."
              (1+ (gnus-point-at-eol))
            (gnus-delete-line)))))))
 
+(defun gnus-sort-threads-1 (threads func)
+  (sort (mapcar (lambda (thread)
+                 (cons (car thread)
+                       (and (cdr thread)
+                            (gnus-sort-threads-1 (cdr thread) func))))
+               threads) func))
+
 (defun gnus-sort-threads (threads)
   "Sort THREADS."
   (if (not gnus-thread-sort-functions)
       threads
     (gnus-message 8 "Sorting threads...")
     (prog1
-       (sort threads (gnus-make-sort-function gnus-thread-sort-functions))
+       (gnus-sort-threads-1 
+        threads 
+        (gnus-make-sort-function gnus-thread-sort-functions))
       (gnus-message 8 "Sorting threads...done"))))
 
 (defun gnus-sort-articles (articles)
@@ -3635,12 +3718,12 @@ If LINE, insert the rebuilt thread starting on line LINE."
 
 ;; Written by Hallvard B Furuseth <h.b.furuseth@usit.uio.no>.
 (defmacro gnus-thread-header (thread)
-  ;; Return header of first article in THREAD.
-  ;; Note that THREAD must never, ever be anything else than a variable -
-  ;; using some other form will lead to serious barfage.
+  "Return header of first article in THREAD.
+Note that THREAD must never, ever be anything else than a variable -
+using some other form will lead to serious barfage."
   (or (symbolp thread) (signal 'wrong-type-argument '(symbolp thread)))
   ;; (8% speedup to gnus-summary-prepare, just for fun :-)
-  (list 'byte-code "\10\211:\203\17\0\211@;\203\16\0A@@\207" ;
+  (list 'byte-code "\10\211:\203\17\0\211@;\203\16\0A@@\207"
        (vector thread) 2))
 
 (defsubst gnus-article-sort-by-number (h1 h2)
@@ -3676,11 +3759,11 @@ If LINE, insert the rebuilt thread starting on line LINE."
 (defsubst gnus-article-sort-by-author (h1 h2)
   "Sort articles by root author."
   (string-lessp
-   (let ((addr (car (mime-read-field 'From h1))))
+   (let ((addr (car (mime-entity-read-field h1 'From))))
      (or (std11-full-name-string addr)
         (std11-address-string addr)
         ""))
-   (let ((addr (car (mime-read-field 'From h2))))
+   (let ((addr (car (mime-entity-read-field h2 'From))))
      (or (std11-full-name-string addr)
         (std11-address-string addr)
         ""))
@@ -3968,7 +4051,7 @@ or a straight list of headers."
             (if (or (null gnus-summary-default-score)
                     (<= (abs (- gnus-tmp-score gnus-summary-default-score))
                         gnus-summary-zcore-fuzz))
-                ? ;Whitespace
+                ?  ;Whitespace
               (if (< gnus-tmp-score gnus-summary-default-score)
                   gnus-score-below-mark gnus-score-over-mark))
             gnus-tmp-replied
@@ -3986,9 +4069,8 @@ or a straight list of headers."
             (cond
              ((string-match "<[^>]+> *$" gnus-tmp-from)
               (setq beg-match (match-beginning 0))
-              (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
-                       (substring gnus-tmp-from (1+ (match-beginning 0))
-                                  (1- (match-end 0))))
+              (or (and (string-match "^\".+\"" gnus-tmp-from)
+                       (substring gnus-tmp-from 1 (1- (match-end 0))))
                   (substring gnus-tmp-from 0 beg-match)))
              ((string-match "(.+)" gnus-tmp-from)
               (substring gnus-tmp-from
@@ -4058,13 +4140,17 @@ or a straight list of headers."
                    gnus-list-identifiers
                  (mapconcat 'identity gnus-list-identifiers " *\\|"))))
     (dolist (header gnus-newsgroup-headers)
-      (when (string-match (concat "\\(Re: +\\)?\\(" regexp " *\\)")
+      (when (string-match (concat "\\(\\(\\(Re: +\\)?\\(" regexp
+                                 " *\\)\\)+\\(Re: +\\)?\\)")
                          (mail-header-subject header))
        (mail-header-set-subject
         header (concat (substring (mail-header-subject header)
-                                  0 (match-beginning 2))
+                                  0 (match-beginning 1))
+                       (or
+                        (match-string 3 (mail-header-subject header))
+                        (match-string 5 (mail-header-subject header)))
                        (substring (mail-header-subject header)
-                                  (match-end 2))))))))
+                                  (match-end 1))))))))
 
 (defun gnus-select-newsgroup (group &optional read-all select-articles)
   "Select newsgroup GROUP.
@@ -4089,7 +4175,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
        (progn                          ; Or we bug out.
          (when (equal major-mode 'gnus-summary-mode)
            (kill-buffer (current-buffer)))
-         (error "Couldn't request group %s: %s"
+         (error "Couldn't activate group %s: %s"
                 group (gnus-status-message group))))
 
     (unless (gnus-request-group group t)
@@ -4142,14 +4228,31 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; Retrieve the headers and read them in.
       (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
       (setq gnus-newsgroup-headers
-           (gnus-retrieve-parsed-headers
-            articles gnus-newsgroup-name
-            ;; We might want to fetch old headers, but
-            ;; not if there is only 1 article.
-            (and (or (and (not (eq gnus-fetch-old-headers 'some))
-                          (not (numberp gnus-fetch-old-headers)))
-                     (> (length articles) 1))
-                 gnus-fetch-old-headers)))
+           ;;;!!! FIXME: temporary fix for an infloop on nnimap.
+           (if (eq 'nnimap (car (gnus-find-method-for-group group)))
+               (if (eq 'nov
+                       (setq
+                        gnus-headers-retrieved-by
+                        (gnus-retrieve-headers
+                         articles gnus-newsgroup-name
+                         ;; We might want to fetch old headers, but
+                         ;; not if there is only 1 article.
+                         (and (or (and
+                                   (not (eq gnus-fetch-old-headers 'some))
+                                   (not (numberp gnus-fetch-old-headers)))
+                                  (> (length articles) 1))
+                              gnus-fetch-old-headers))))
+                   (gnus-get-newsgroup-headers-xover
+                    articles nil nil gnus-newsgroup-name t)
+                 (gnus-get-newsgroup-headers))
+             (gnus-retrieve-parsed-headers
+              articles gnus-newsgroup-name
+              ;; We might want to fetch old headers, but
+              ;; not if there is only 1 article.
+              (and (or (and (not (eq gnus-fetch-old-headers 'some))
+                            (not (numberp gnus-fetch-old-headers)))
+                       (> (length articles) 1))
+                   gnus-fetch-old-headers))))
       (gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name)
 
       ;; Suppress duplicates?
@@ -4202,7 +4305,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       (or gnus-newsgroup-headers t)))))
 
 (defun gnus-articles-to-read (group &optional read-all)
-  ;; Find out what articles the user wants to read.
+  "Find out what articles the user wants to read."
   (let* ((articles
          ;; Select all articles if `read-all' is non-nil, or if there
          ;; are no unread articles.
@@ -4232,16 +4335,14 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                 ((and (or (<= scored marked) (= scored number))
                       (natnump gnus-large-newsgroup)
                       (> number gnus-large-newsgroup))
-                 (let ((input (read-from-minibuffer
-                               (format
-                                "How many articles from %s (max %d): "
-                                (gnus-limit-string gnus-newsgroup-name 35)
-                                number)
-                               (static-if (< emacs-major-version 20)
-                                   (number-to-string gnus-large-newsgroup)
-                                 (cons
-                                  (number-to-string gnus-large-newsgroup)
-                                  0)))))
+                 (let* ((cursor-in-echo-area nil)
+                        (input (read-from-minibuffer
+                                (format
+                                 "How many articles from %s (max %d): "
+                                 (gnus-limit-string gnus-newsgroup-name 35)
+                                 number)
+                                (cons (number-to-string gnus-large-newsgroup)
+                                      0))))
                    (if (string-match "^[ \t]*$" input)
                        number
                      input)))
@@ -4255,7 +4356,9 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                    (if (string-match "^[ \t]*$" input)
                        number input)))
                 (t number))
-             (quit nil))))))
+             (quit
+              (message "Quit getting the articles to read")
+              nil))))))
     (setq select (if (stringp select) (string-to-number select) select))
     (if (or (null select) (zerop select))
        select
@@ -4275,6 +4378,12 @@ If SELECT-ARTICLES, only select those articles from GROUP."
            (gnus-sorted-intersection
             gnus-newsgroup-unreads
             (gnus-sorted-complement gnus-newsgroup-unreads articles)))
+      (when gnus-alter-articles-to-read-function
+       (setq gnus-newsgroup-unreads
+             (sort
+              (funcall gnus-alter-articles-to-read-function
+                       gnus-newsgroup-name gnus-newsgroup-unreads)
+              '<)))
       articles)))
 
 (defun gnus-killed-articles (killed articles)
@@ -4360,9 +4469,9 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; Add all marks lists to the list of marks lists.
       (while (setq type (pop types))
        (setq list (symbol-value
-                         (setq symbol
-                               (intern (format "gnus-newsgroup-%s"
-                                               (car type))))))
+                   (setq symbol
+                         (intern (format "gnus-newsgroup-%s"
+                                         (car type))))))
 
        (when list
          ;; Get rid of the entries of the articles that have the
@@ -4381,30 +4490,36 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                (setq arts (cdr arts)))
              (setq list (cdr all)))))
 
-       (or (memq (cdr type) uncompressed)
-           (setq list (gnus-compress-sequence (set symbol (sort list '<)) t)))
-       
-       (when (gnus-check-backend-function 'request-set-mark
-                                          gnus-newsgroup-name)
-         ;; uncompressed:s are not proper flags (they are cons cells)
-         ;; cache is a internal gnus flag
-         (unless (memq (cdr type) (cons 'cache uncompressed))
-           (let* ((old (cdr (assq (cdr type) (gnus-info-marks info))))
-                  (del (gnus-remove-from-range (gnus-copy-sequence old) list))
-                  (add (gnus-remove-from-range (gnus-copy-sequence list) old)))
-             (if add
-                 (push (list add 'add (list (cdr type))) delta-marks))
-             (if del
-                 (push (list del 'del (list (cdr type))) delta-marks)))))
-         
+       (unless (memq (cdr type) uncompressed)
+         (setq list (gnus-compress-sequence (set symbol (sort list '<)) t)))
+
+       (when (gnus-check-backend-function
+              'request-set-mark gnus-newsgroup-name)
+         ;; propagate flags to server, with the following exceptions:
+         ;; uncompressed:s are not proper flags (they are cons cells)
+         ;; cache is a internal gnus flag
+         ;; download are local to one gnus installation (well)
+         ;; unsend are for nndraft groups only
+         ;; xxx: generality of this?  this suits nnimap anyway
+         (unless (memq (cdr type) (append '(cache download unsend)
+                                          uncompressed))
+           (let* ((old (cdr (assq (cdr type) (gnus-info-marks info))))
+                  (del (gnus-remove-from-range (gnus-copy-sequence old) list))
+                  (add (gnus-remove-from-range
+                        (gnus-copy-sequence list) old)))
+             (when add
+               (push (list add 'add (list (cdr type))) delta-marks))
+             (when del
+               (push (list del 'del (list (cdr type))) delta-marks)))))
+
        (when list
-         (push (cons (cdr type) list) newmarked)))
+         (push (cons (cdr type) list) newmarked)))
 
       (when delta-marks
        (unless (gnus-check-group gnus-newsgroup-name)
          (error "Can't open server for %s" gnus-newsgroup-name))
        (gnus-request-set-mark gnus-newsgroup-name delta-marks))
-         
+
       ;; Enter these new marks into the info of the group.
       (if (nthcdr 3 info)
          (setcar (nthcdr 3 info) newmarked)
@@ -4420,7 +4535,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
            (setcdr (nthcdr i info) nil)))))))
 
 (defun gnus-set-mode-line (where)
-  "This function sets the mode line of the article or summary buffers.
+  "Set the mode line of the article or summary buffers.
 If WHERE is `summary', the summary mode line format will be used."
   ;; Is this mode line one we keep updated?
   (when (and (memq where gnus-updated-mode-lines)
@@ -4436,7 +4551,11 @@ If WHERE is `summary', the summary mode line format will be used."
        (let* ((mformat (symbol-value
                         (intern
                          (format "gnus-%s-mode-line-format-spec" where))))
-              (gnus-tmp-group-name gnus-newsgroup-name)
+              (gnus-tmp-group-name (gnus-group-name-decode
+                                    gnus-newsgroup-name
+                                    (gnus-group-name-charset
+                                     nil
+                                     gnus-newsgroup-name)))
               (gnus-tmp-article-number (or gnus-current-article 0))
               (gnus-tmp-unread gnus-newsgroup-unreads)
               (gnus-tmp-unread-and-unticked (length gnus-newsgroup-unreads))
@@ -4673,19 +4792,20 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (if (search-forward "\nsubject: " nil t)
-                 (buffer-substring (match-end 0) (std11-field-end))
+                 (nnheader-header-value)
                "(none)"))
            ;; From.
            (progn
              (goto-char p)
-             (if (search-forward "\nfrom: " nil t)
-                 (buffer-substring (match-end 0) (std11-field-end))
+             (if (or (search-forward "\nfrom: " nil t)
+                     (search-forward "\nfrom:" nil t))
+                 (nnheader-header-value)
                "(nobody)"))
            ;; Date.
            (progn
              (goto-char p)
              (if (search-forward "\ndate: " nil t)
-                 (buffer-substring (match-end 0) (std11-field-end))
+                 (nnheader-header-value)
                ""))
            ;; Message-ID.
            (progn
@@ -4706,7 +4826,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
                  (progn
                    (setq end (point))
                    (prog1
-                       (buffer-substring (match-end 0) (std11-field-end))
+                       (nnheader-header-value)
                      (setq ref
                            (buffer-substring
                             (progn
@@ -4720,9 +4840,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
                ;; were no references and the in-reply-to header looks
                ;; promising.
                (if (and (search-forward "\nin-reply-to: " nil t)
-                        (setq in-reply-to
-                              (buffer-substring (match-end 0)
-                                                (std11-field-end)))
+                        (setq in-reply-to (nnheader-header-value))
                         (string-match "<[^>]+>" in-reply-to))
                    (let (ref2)
                      (setq ref (substring in-reply-to (match-beginning 0)
@@ -4752,7 +4870,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (and (search-forward "\nxref: " nil t)
-                  (buffer-substring (match-end 0) (std11-field-end))))
+                  (nnheader-header-value)))
            ;; Extra.
            (when gnus-extra-headers
              (let ((extra gnus-extra-headers)
@@ -4761,16 +4879,12 @@ The resulting hash table is returned, or nil if no Xrefs were found."
                  (goto-char p)
                  (when (search-forward
                         (concat "\n" (symbol-name (car extra)) ": ") nil t)
-                   (push (cons (car extra)
-                               (buffer-substring (match-end 0)
-                                                 (std11-field-end)))
-                         out))
+                   (push (cons (car extra) (nnheader-header-value)) out))
                  (pop extra))
                out))))
          (goto-char p)
          (if (and (search-forward "\ncontent-type: " nil t)
-                  (setq ctype
-                        (buffer-substring (match-end 0) (std11-field-end))))
+                  (setq ctype (nnheader-header-value)))
              (mime-entity-set-content-type-internal
               header (mime-parse-Content-Type ctype)))
          (when (equal id ref)
@@ -4793,8 +4907,9 @@ The resulting hash table is returned, or nil if no Xrefs were found."
 (defun gnus-get-newsgroup-headers-xover (sequence &optional
                                                  force-new dependencies
                                                  group also-fetch-heads)
-  "Parse the news overview data in the server buffer, and return a
-list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
+  "Parse the news overview data in the server buffer.
+Return a list of headers that match SEQUENCE (see
+`nntp-retrieve-headers')."
   ;; Get the Xref when the users reads the articles since most/some
   ;; NNTP servers do not include Xrefs when using XOVER.
   (setq gnus-article-internal-prepare-hook '(gnus-article-get-xrefs))
@@ -4842,8 +4957,11 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
        (let ((gnus-nov-is-evil t))
          (nconc
           (nreverse headers)
-          (gnus-retrieve-parsed-headers sequence group)
-          ))))))
+          ;;;!!! FIXME: temporary fix for an infloop on nnimap.
+          (if (eq 'nnimap (car (gnus-find-method-for-group group)))
+              (when (gnus-retrieve-headers sequence group)
+                (gnus-get-newsgroup-headers))
+            (gnus-retrieve-parsed-headers sequence group))))))))
 
 (defun gnus-article-get-xrefs ()
   "Fill in the Xref value in `gnus-current-headers', if necessary.
@@ -5123,6 +5241,7 @@ If `gnus-auto-center-summary' is nil, or the article buffer isn't
 displayed, no centering will be performed."
   ;; Suggested by earle@mahendo.JPL.NASA.GOV (Greg Earle).
   ;; Recenter only when requested.  Suggested by popovich@park.cs.columbia.edu.
+  (interactive)
   (let* ((top (cond ((< (window-height) 4) 0)
                    ((< (window-height) 7) 1)
                    (t (if (numberp gnus-auto-center-summary)
@@ -5183,7 +5302,10 @@ displayed, no centering will be performed."
       ;; If the range of read articles is a single range, then the
       ;; first unread article is the article after the last read
       ;; article.  Sounds logical, doesn't it?
-      (if (not (listp (cdr read)))
+      (if (and (not (listp (cdr read)))
+              (or (< (car read) (car active))
+                  (progn (setq read (list read))
+                         nil)))
          (setq first (max (car active) (1+ (cdr read))))
        ;; `read' is a list of ranges.
        (when (/= (setq nlast (or (and (numberp (car read)) (car read))
@@ -5240,8 +5362,7 @@ displayed, no centering will be performed."
          (key-binding
           (read-key-sequence
            (substitute-command-keys
-            "\\<gnus-summary-mode-map>\\[gnus-summary-universal-argument]"
-            ))))
+            "\\<gnus-summary-mode-map>\\[gnus-summary-universal-argument]"))))
         'undefined)
        (gnus-error 1 "Undefined key")
       (save-excursion
@@ -5262,24 +5383,25 @@ With arg, turn line truncation on iff arg is positive."
   (redraw-display))
 
 (defun gnus-summary-reselect-current-group (&optional all rescan)
-  "Rescan the current newsgroup, exit and then reselect it.
+  "Exit and then reselect the current newsgroup.
 The prefix argument ALL means to select all articles."
   (interactive "P")
   (when (gnus-ephemeral-group-p gnus-newsgroup-name)
     (error "Ephemeral groups can't be reselected"))
   (let ((current-subject (gnus-summary-article-number))
        (group gnus-newsgroup-name))
-    (save-excursion
-      (set-buffer gnus-group-buffer)
-      ;; We have to adjust the point of group mode buffer because
-      ;; point was moved to the next unread newsgroup by exiting.
-      (gnus-summary-jump-to-group group)
-      (when rescan
-       (save-excursion
-         (gnus-group-get-new-news-this-group 1))))
     (setq gnus-newsgroup-begin nil)
     (gnus-summary-exit)
-    (gnus-group-read-group all t group)
+    ;; We have to adjust the point of group mode buffer because
+    ;; point was moved to the next unread newsgroup by exiting.
+    (gnus-summary-jump-to-group group)
+    (when rescan
+      (save-excursion
+       (save-window-excursion
+         ;; Don't show group contents.
+         (set-window-start (selected-window) (point-max))
+         (gnus-group-get-new-news-this-group 1))))
+    (gnus-group-read-group all t)
     (gnus-summary-goto-subject current-subject nil t)))
 
 (defun gnus-summary-rescan-group (&optional all)
@@ -5339,7 +5461,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
 
 (defun gnus-summary-exit (&optional temporary)
   "Exit reading current newsgroup, and then return to group selection mode.
-gnus-exit-group-hook is called with no arguments if that value is non-nil."
+`gnus-exit-group-hook' is called with no arguments if that value is non-nil."
   (interactive)
   (gnus-set-global-variables)
   (gnus-kill-save-kill-buffer)
@@ -5368,6 +5490,8 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
       (gnus-dup-enter-articles))
     (when gnus-use-trees
       (gnus-tree-close group))
+    (when gnus-use-cache
+      (gnus-cache-write-active))
     ;; Remove entries for this group.
     (nnmail-purge-split-history (gnus-group-real-name group))
     ;; Make all changes in this group permanent.
@@ -5415,7 +5539,14 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
       (if (not quit-config)
          (progn
            (goto-char group-point)
-           (gnus-configure-windows 'group 'force))
+           (gnus-configure-windows 'group 'force)
+           (unless (pos-visible-in-window-p)
+             (forward-line (/ (static-if (featurep 'xemacs)
+                                  (window-displayed-height)
+                                (1- (window-height)))
+                              -2))
+             (set-window-start (selected-window) (point))
+             (goto-char group-point)))
        (gnus-handle-ephemeral-exit quit-config))
       ;; Clear the current group name.
       (unless quit-config
@@ -5549,7 +5680,8 @@ The state which existed when entering the ephemeral is reset."
       (rename-buffer
        (concat (substring name 0 (match-beginning 0)) "Dead "
               (substring name (match-beginning 0)))
-       t))))
+       t)
+      (bury-buffer))))
 
 (defun gnus-kill-or-deaden-summary (buffer)
   "Kill or deaden the summary BUFFER."
@@ -5716,8 +5848,8 @@ returned."
                (if backward
                    (gnus-summary-find-prev unread)
                  (gnus-summary-find-next unread)))
-      (gnus-summary-show-thread)
-      (setq n (1- n)))
+      (unless (zerop (setq n (1- n)))
+       (gnus-summary-show-thread)))
     (when (/= 0 n)
       (gnus-message 7 "No more%s articles"
                    (if unread " unread" "")))
@@ -5811,39 +5943,34 @@ be displayed."
     (set-buffer gnus-summary-buffer))
   (let ((article (or article (gnus-summary-article-number)))
        (all-headers (not (not all-headers))) ;Must be T or NIL.
-       gnus-summary-display-article-function
-       did)
+       gnus-summary-display-article-function)
     (and (not pseudo)
         (gnus-summary-article-pseudo-p article)
         (error "This is a pseudo-article"))
-    (prog1
-       (save-excursion
-         (set-buffer gnus-summary-buffer)
-         (if (or (and gnus-single-article-buffer
-                      (or (null gnus-current-article)
-                          (null gnus-article-current)
-                          (null (get-buffer gnus-article-buffer))
-                          (not (eq article (cdr gnus-article-current)))
-                          (not (equal (car gnus-article-current)
-                                      gnus-newsgroup-name))))
-                 (and (not gnus-single-article-buffer)
-                      (or (null gnus-current-article)
-                          (not (eq gnus-current-article article))))
-                 force)
-             ;; The requested article is different from the current article.
-             (prog1
-                 (gnus-summary-display-article article all-headers)
-               (setq did article)
-               (when (or all-headers gnus-show-all-headers)
-                 (if (eq 'gnus-summary-toggle-mime this-command)
-                     (gnus-article-show-all)
-                   (gnus-article-show-all-headers))))
+    (save-excursion
+      (set-buffer gnus-summary-buffer)
+      (if (or (and gnus-single-article-buffer
+                  (or (null gnus-current-article)
+                      (null gnus-article-current)
+                      (null (get-buffer gnus-article-buffer))
+                      (not (eq article (cdr gnus-article-current)))
+                      (not (equal (car gnus-article-current)
+                                  gnus-newsgroup-name))))
+             (and (not gnus-single-article-buffer)
+                  (or (null gnus-current-article)
+                      (not (eq gnus-current-article article))))
+             force)
+         ;; The requested article is different from the current article.
+         (progn
+           (gnus-summary-display-article article all-headers)
            (when (or all-headers gnus-show-all-headers)
              (gnus-article-show-all-headers))
-           'old))
-      (when did
-       (gnus-article-set-window-start
-        (cdr (assq article gnus-newsgroup-bookmarks)))))))
+           (gnus-article-set-window-start
+            (cdr (assq article gnus-newsgroup-bookmarks)))
+           article)
+       (when (or all-headers gnus-show-all-headers)
+         (gnus-article-show-all-headers))
+       'old))))
 
 (defun gnus-summary-set-current-mark (&optional current-mark)
   "Obsolete function."
@@ -6262,7 +6389,7 @@ articles that are younger than AGE days."
      (while (not days-got)
        (setq days (if younger
                      (read-string "Limit to articles within (in days): ")
-                   (read-string "Limit to articles old than (in days): ")))
+                   (read-string "Limit to articles older than (in days): ")))
        (when (> (length days) 0)
         (setq days (read days)))
        (if (numberp days)
@@ -6295,12 +6422,12 @@ articles that are younger than AGE days."
    (let ((header
          (intern
           (gnus-completing-read
-           (symbol-name (car gnus-extra-headers))      
-           "Limit extra header:"       
-           (mapcar (lambda (x) 
+           (symbol-name (car gnus-extra-headers))
+           "Limit extra header:"
+           (mapcar (lambda (x)
                      (cons (symbol-name x) x))
                    gnus-extra-headers)
-           nil                 
+           nil
            t))))
      (list header
           (read-string (format "Limit to header %s (regexp): " header)))))
@@ -6796,15 +6923,7 @@ of what's specified by the `gnus-refer-thread-limit' variable."
        (t
        ;; We fetch the article.
        (catch 'found
-         (dolist (gnus-override-method
-                  (cond ((null gnus-refer-article-method)
-                         (list 'current gnus-select-method))
-                        ((consp (car gnus-refer-article-method))
-                         gnus-refer-article-method)
-                        (t
-                         (list gnus-refer-article-method))))
-           (when (eq 'current gnus-override-method)
-             (setq gnus-override-method gnus-current-select-method))
+         (dolist (gnus-override-method (gnus-refer-article-methods))
            (gnus-check-server gnus-override-method)
            ;; Fetch the header, and display the article.
            (when (setq number (gnus-summary-insert-subject message-id))
@@ -6812,6 +6931,29 @@ of what's specified by the `gnus-refer-thread-limit' variable."
              (throw 'found t)))
          (gnus-message 3 "Couldn't fetch article %s" message-id)))))))
 
+(defun gnus-refer-article-methods ()
+  "Return a list of referrable methods."
+  (cond
+   ;; No method, so we default to current and native.
+   ((null gnus-refer-article-method)
+    (list gnus-current-select-method gnus-select-method))
+   ;; Current.
+   ((eq 'current gnus-refer-article-method)
+    (list gnus-current-select-method))
+   ;; List of select methods.
+   ((not (and (symbolp (car gnus-refer-article-method))
+             (assq (car gnus-refer-article-method) nnoo-definition-alist)))
+    (let (out)
+      (dolist (method gnus-refer-article-method)
+       (push (if (eq 'current method)
+                 gnus-current-select-method
+               method)
+             out))
+      (nreverse out)))
+   ;; One single select method.
+   (t
+    (list gnus-refer-article-method))))
+
 (defun gnus-summary-edit-parameters ()
   "Edit the group parameters of the current group."
   (interactive)
@@ -6843,8 +6985,17 @@ to guess what the document format is."
                           (list (cons 'save-article-group ogroup))))
           (case-fold-search t)
           (buf (current-buffer))
-          dig)
+          dig to-address)
       (save-excursion
+       (set-buffer gnus-original-article-buffer)
+       ;; Have the digest group inherit the main mail address of
+       ;; the parent article.
+       (when (setq to-address (or (message-fetch-field "reply-to")
+                                  (message-fetch-field "from")))
+         (setq params (append 
+                       (list (cons 'to-address 
+                                   (funcall gnus-decode-encoded-word-function
+                                            to-address))))))
        (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
        (insert-buffer-substring gnus-original-article-buffer)
        ;; Remove lines that may lead nndoc to misinterpret the
@@ -6995,11 +7146,11 @@ If BACKWARD, search backward instead."
               (goto-char (, opoint)))))
       (` (let ((end (if (search-forward "\n\n" nil t)
                        (goto-char (1- (point)))
-                     (point-min))))
+                     (point-min)))
+              (start (or (search-backward "\n\n" nil t) (point-min))))
           (goto-char
-           (or (text-property-any (or (search-backward "\n\n" nil t)
-                                      (point-min))
-                                  end 'x-face-mule-bitmap-image t)
+           (or (text-property-any start end 'x-face-image t);; x-face-e21
+               (text-property-any start end 'x-face-mule-bitmap-image t)
                (, opoint)))))))
 
   (defmacro gnus-summary-search-article-highlight-matched-text
@@ -7053,7 +7204,6 @@ Optional argument BACKWARD means do search for backward.
   (require 'gnus-async)
   (require 'gnus-art)
   (let ((gnus-select-article-hook nil) ;Disable hook.
-       (gnus-article-display-hook nil)
        (gnus-article-prepare-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
        (gnus-use-article-prefetch nil)
@@ -7179,9 +7329,11 @@ article.  If BACKWARD (the prefix) is non-nil, search backward instead."
    (list (let ((completion-ignore-case t))
           (completing-read
            "Header name: "
-           (mapcar (lambda (string) (list string))
-                   '("Number" "Subject" "From" "Lines" "Date"
-                     "Message-ID" "Xref" "References" "Body"))
+           (mapcar (lambda (header) (list (format "%s" header)))
+                   (append
+                    '("Number" "Subject" "From" "Lines" "Date"
+                      "Message-ID" "Xref" "References" "Body")
+                    gnus-extra-headers))
            nil 'require-match))
         (read-string "Regexp: ")
         (read-key-sequence "Command: ")
@@ -7262,25 +7414,54 @@ to save in."
 
 (defun gnus-summary-show-article (&optional arg)
   "Force re-fetching of the current article.
-If ARG (the prefix) is non-nil, show the raw article without any
-article massaging functions being run."
+If ARG (the prefix) is a number, show the article with the charset
+defined in `gnus-summary-show-article-charset-alist', or the charset
+inputed.
+If ARG (the prefix) is non-nil and not a number, show the raw article
+without any article massaging functions being run."
   (interactive "P")
-  (if (not arg)
-      ;; Select the article the normal way.
+  (cond
+   ((numberp arg)
+    (let ((gnus-newsgroup-charset
+          (or (cdr (assq arg gnus-summary-show-article-charset-alist))
+              (read-coding-system "Charset: ")))
+         (gnus-newsgroup-ignored-charsets 'gnus-all))
       (gnus-summary-select-article nil 'force)
+      (let ((deps gnus-newsgroup-dependencies)
+           head header)
+       (save-excursion
+         (set-buffer gnus-original-article-buffer)
+         (save-restriction
+           (message-narrow-to-head)
+           (setq head (buffer-string)))
+         (with-temp-buffer
+           (insert (format "211 %d Article retrieved.\n"
+                           (cdr gnus-article-current)))
+           (insert head)
+           (insert ".\n")
+           (let ((nntp-server-buffer (current-buffer)))
+             (setq header (car (gnus-get-newsgroup-headers deps t))))))
+       (gnus-data-set-header
+        (gnus-data-find (cdr gnus-article-current))
+        header)
+       (gnus-summary-update-article-line
+        (cdr gnus-article-current) header))))
+   ((not arg)
+    ;; Select the article the normal way.
+    (gnus-summary-select-article nil 'force))
+   (t
     ;; We have to require this here to make sure that the following
     ;; dynamic binding isn't shadowed by autoloading.
     (require 'gnus-async)
     (require 'gnus-art)
     ;; Bind the article treatment functions to nil.
     (let ((gnus-have-all-headers t)
-         gnus-article-display-hook
          gnus-article-prepare-hook
          gnus-article-decode-hook
          gnus-break-pages
          gnus-show-mime
-         gnus-visual)
-      (gnus-summary-select-article nil 'force)))
+         (gnus-inhibit-treatment t))
+      (gnus-summary-select-article nil 'force))))
   (gnus-summary-goto-subject gnus-current-article)
   (gnus-summary-position-point))
 
@@ -7311,7 +7492,7 @@ If ARG is a negative number, hide the unwanted header lines."
        (setq hidden
              (if (numberp arg)
                  (>= arg 0)
-               (save-restriction 
+               (save-restriction
                  (article-narrow-to-head)
                  (gnus-article-hidden-text-p 'headers))))
        (goto-char (point-min))
@@ -7329,8 +7510,11 @@ If ARG is a negative number, hide the unwanted header lines."
          (if  hidden
              (let ((gnus-treat-hide-headers nil)
                    (gnus-treat-hide-boring-headers nil))
+               (setq gnus-article-wash-types
+                     (delq 'headers gnus-article-wash-types))
                (gnus-treat-article 'head))
-           (gnus-treat-article 'head)))))))
+           (gnus-treat-article 'head)))
+       (gnus-set-mode-line 'article)))))
 
 (defun gnus-summary-show-all-headers ()
   "Make all header lines visible."
@@ -7387,7 +7571,9 @@ re-spool using this method.
 
 For this function to work, both the current newsgroup and the
 newsgroup that you want to move to have to support the `request-move'
-and `request-accept' functions."
+and `request-accept' functions.
+
+ACTION can be either `move' (the default), `crosspost' or `copy'."
   (interactive "P")
   (unless action
     (setq action 'move))
@@ -7405,7 +7591,10 @@ and `request-accept' functions."
                    'request-replace-article gnus-newsgroup-name)))
         (error "The current group does not support article editing")))
   (let ((articles (gnus-summary-work-articles n))
-       (prefix (gnus-group-real-prefix gnus-newsgroup-name))
+       (prefix (if (gnus-check-backend-function
+                   'request-move-article gnus-newsgroup-name)
+                   (gnus-group-real-prefix gnus-newsgroup-name)
+                 ""))
        (names '((move "Move" "Moving")
                 (copy "Copy" "Copying")
                 (crosspost "Crosspost" "Crossposting")))
@@ -7427,7 +7616,8 @@ and `request-accept' functions."
             articles prefix))
       (set (intern (format "gnus-current-%s-group" action)) to-newsgroup))
     (setq to-method (or select-method
-                       (gnus-group-name-to-method to-newsgroup)))
+                       (gnus-server-to-method
+                        (gnus-group-method to-newsgroup))))
     ;; Check the method we are to move this article to...
     (unless (gnus-check-backend-function
             'request-accept-article (car to-method))
@@ -7453,7 +7643,7 @@ and `request-accept' functions."
                  gnus-newsgroup-name)) ; Server
          (list 'gnus-request-accept-article
                to-newsgroup (list 'quote select-method)
-               (not articles) t)               ; Accept form
+               (not articles) t)       ; Accept form
          (not articles)))              ; Only save nov last time
        ;; Copy the article.
        ((eq action 'copy)
@@ -7494,13 +7684,13 @@ and `request-accept' functions."
               art-group))))))
       (cond
        ((not art-group)
-       (gnus-message 1 "Couldn't %s article %s: %s"
-                     (cadr (assq action names)) article
-                     (nnheader-get-report (car to-method))))
-       ((and (eq art-group 'junk)
-            (eq action 'move))
-       (gnus-summary-mark-article article gnus-canceled-mark)
-       (gnus-message 4 "Deleted article %s" article))
+       (gnus-message 1 "Couldn't %s article %s: %s"
+                     (cadr (assq action names)) article
+                     (nnheader-get-report (car to-method))))
+       ((eq art-group 'junk)
+       (when (eq action 'move)
+         (gnus-summary-mark-article article gnus-canceled-mark)
+         (gnus-message 4 "Deleted article %s" article)))
        (t
        (let* ((pto-group (gnus-group-prefixed-name
                           (car art-group) to-method))
@@ -7521,13 +7711,14 @@ and `request-accept' functions."
               info (gnus-add-to-range (gnus-info-read info)
                                       (list (cdr art-group)))))
 
-           ;; Copy any marks over to the new group.
+           ;; See whether the article is to be put in the cache.
            (let ((marks (if (gnus-group-auto-expirable-p to-group)
                             default-marks
                           no-expire-marks))
                  (to-article (cdr art-group)))
 
-             ;; See whether the article is to be put in the cache.
+             ;; Enter the article into the cache in the new group,
+             ;; if that is required.
              (when gnus-use-cache
                (gnus-cache-possibly-enter-article
                 to-group to-article
@@ -7539,34 +7730,36 @@ and `request-accept' functions."
                 (memq article gnus-newsgroup-dormant)
                 (memq article gnus-newsgroup-unreads)))
 
-             (when (and (equal to-group gnus-newsgroup-name)
-                        (not (memq article gnus-newsgroup-unreads)))
-               ;; Mark this article as read in this group.
-               (push (cons to-article gnus-read-mark) gnus-newsgroup-reads)
-               (setcdr (gnus-active to-group) to-article)
-               (setcdr gnus-newsgroup-active to-article))
-
-             (while marks
-               (when (memq article (symbol-value
-                                    (intern (format "gnus-newsgroup-%s"
-                                                    (caar marks)))))
-                  (push (cdar marks) to-marks)
-                 ;; If the other group is the same as this group,
-                 ;; then we have to add the mark to the list.
-                 (when (equal to-group gnus-newsgroup-name)
-                   (set (intern (format "gnus-newsgroup-%s" (caar marks)))
-                        (cons to-article
-                              (symbol-value
-                               (intern (format "gnus-newsgroup-%s"
-                                               (caar marks)))))))
-                 ;; Copy the marks to other group.
-                 (gnus-add-marked-articles
-                  to-group (cdar marks) (list to-article) info))
-               (setq marks (cdr marks)))
-
-              (gnus-request-set-mark to-group (list (list (list to-article)
-                                                          'set
-                                                          to-marks)))
+             (when gnus-preserve-marks
+               ;; Copy any marks over to the new group.
+               (when (and (equal to-group gnus-newsgroup-name)
+                          (not (memq article gnus-newsgroup-unreads)))
+                 ;; Mark this article as read in this group.
+                 (push (cons to-article gnus-read-mark) gnus-newsgroup-reads)
+                 (setcdr (gnus-active to-group) to-article)
+                 (setcdr gnus-newsgroup-active to-article))
+
+               (while marks
+                 (when (memq article (symbol-value
+                                      (intern (format "gnus-newsgroup-%s"
+                                                      (caar marks)))))
+                   (push (cdar marks) to-marks)
+                   ;; If the other group is the same as this group,
+                   ;; then we have to add the mark to the list.
+                   (when (equal to-group gnus-newsgroup-name)
+                     (set (intern (format "gnus-newsgroup-%s" (caar marks)))
+                          (cons to-article
+                                (symbol-value
+                                 (intern (format "gnus-newsgroup-%s"
+                                                 (caar marks)))))))
+                   ;; Copy the marks to other group.
+                   (gnus-add-marked-articles
+                    to-group (cdar marks) (list to-article) info))
+                 (setq marks (cdr marks)))
+
+               (gnus-request-set-mark to-group (list (list (list to-article)
+                                                           'set
+                                                           to-marks))))
 
              (gnus-dribble-enter
               (concat "(gnus-group-set-info '"
@@ -7697,12 +7890,11 @@ latter case, they will be copied into the relevant groups."
       (kill-buffer (current-buffer)))))
 
 (defun gnus-summary-article-posted-p ()
-  "Say whether the current (mail) article is available from `gnus-select-method' as well.
+  "Say whether the current (mail) article is available from news as well.
 This will be the case if the article has both been mailed and posted."
   (interactive)
   (let ((id (mail-header-references (gnus-summary-article-header)))
-       (gnus-override-method
-        (or gnus-refer-article-method gnus-select-method)))
+       (gnus-override-method (car (gnus-refer-article-methods))))
     (if (gnus-request-head id "")
        (gnus-message 2 "The current message was found on %s"
                      gnus-override-method)
@@ -7730,6 +7922,9 @@ This will be the case if the article has both been mailed and posted."
           (expiry-wait (if now 'immediate
                          (gnus-group-find-parameter
                           gnus-newsgroup-name 'expiry-wait)))
+          (nnmail-expiry-target
+           (or (gnus-group-find-parameter gnus-newsgroup-name 'expiry-target)
+               nnmail-expiry-target))
           es)
       (when expirable
        ;; There are expirable articles in this group, so we run them
@@ -7745,19 +7940,19 @@ This will be the case if the article has both been mailed and posted."
                (setq es (gnus-request-expire-articles
                          expirable gnus-newsgroup-name)))
            (setq es (gnus-request-expire-articles
-                     expirable gnus-newsgroup-name))))
-       (unless total
-         (setq gnus-newsgroup-expirable es))
-       ;; We go through the old list of expirable, and mark all
-       ;; really expired articles as nonexistent.
-       (unless (eq es expirable)       ;If nothing was expired, we don't mark.
-         (let ((gnus-use-cache nil))
-           (while expirable
-             (unless (memq (car expirable) es)
-               (when (gnus-data-find (car expirable))
-                 (gnus-summary-mark-article
-                  (car expirable) gnus-canceled-mark)))
-             (setq expirable (cdr expirable)))))
+                     expirable gnus-newsgroup-name)))
+         (unless total
+           (setq gnus-newsgroup-expirable es))
+         ;; We go through the old list of expirable, and mark all
+         ;; really expired articles as nonexistent.
+         (unless (eq es expirable)     ;If nothing was expired, we don't mark.
+           (let ((gnus-use-cache nil))
+             (while expirable
+               (unless (memq (car expirable) es)
+                 (when (gnus-data-find (car expirable))
+                   (gnus-summary-mark-article
+                    (car expirable) gnus-canceled-mark)))
+               (setq expirable (cdr expirable))))))
        (gnus-message 6 "Expiring articles...done")))))
 
 (defun gnus-summary-expire-articles-now ()
@@ -7784,6 +7979,8 @@ delete these instead."
   (unless (gnus-check-backend-function 'request-expire-articles
                                       gnus-newsgroup-name)
     (error "The current newsgroup does not support article deletion"))
+  (unless (gnus-check-server (gnus-find-method-for-group gnus-newsgroup-name))
+    (error "Couldn't open server"))
   ;; Compute the list of articles to delete.
   (let ((articles (sort (copy-sequence (gnus-summary-work-articles n)) '<))
        not-deleted)
@@ -7829,6 +8026,8 @@ groups."
        'ignore
        `(lambda (no-highlight)
          (let ((mail-parse-charset ',gnus-newsgroup-charset)
+               (message-options message-options)
+               (message-options-set-recipient)
                (mail-parse-ignored-charsets
                 ',gnus-newsgroup-ignored-charsets))
            (gnus-summary-edit-article-done
@@ -7841,10 +8040,31 @@ groups."
                                                 no-highlight)
   "Make edits to the current article permanent."
   (interactive)
+  (save-excursion
+    ;; The buffer restriction contains the entire article if it exists.
+    (when (article-goto-body)
+      (let ((lines (count-lines (point) (point-max)))
+           (length (- (point-max) (point)))
+           (case-fold-search t)
+           (body (copy-marker (point))))
+       (goto-char (point-min))
+       (when (re-search-forward "^content-length:[ \t]\\([0-9]+\\)" body t)
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert (number-to-string length)))
+       (goto-char (point-min))
+       (when (re-search-forward
+              "^x-content-length:[ \t]\\([0-9]+\\)" body t)
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert (number-to-string length)))
+       (goto-char (point-min))
+       (when (re-search-forward "^lines:[ \t]\\([0-9]+\\)" body t)
+         (delete-region (match-beginning 1) (match-end 1))
+         (insert (number-to-string lines))))))
   ;; Replace the article.
   (let ((buf (current-buffer)))
     (with-temp-buffer
       (insert-buffer-substring buf)
+      
       (if (and (not read-only)
               (not (gnus-request-replace-article
                     (cdr gnus-article-current) (car gnus-article-current)
@@ -8130,7 +8350,8 @@ the actual number of articles marked is returned."
   "Mark N articles as read forwards.
 If N is negative, mark backwards instead.  Mark with MARK, ?r by default.
 The difference between N and the actual number of articles marked is
-returned."
+returned.
+Iff NO-EXPIRE, auto-expiry will be inhibited."
   (interactive "p")
   (gnus-summary-show-thread)
   (let ((backward (< n 0))
@@ -8223,7 +8444,8 @@ Four MARK strings are reserved: `? ' (unread), `?!' (ticked),
 `??' (dormant) and `?E' (expirable).
 If MARK is nil, then the default character `?r' is used.
 If ARTICLE is nil, then the article on the current line will be
-marked."
+marked.
+Iff NO-EXPIRE, auto-expiry will be inhibited."
   ;; The mark might be a string.
   (when (stringp mark)
     (setq mark (aref mark 0)))
@@ -8593,6 +8815,37 @@ read."
     (gnus-summary-catchup all))
   (gnus-summary-next-group))
 
+;;;
+;;; with article
+;;;
+
+(defmacro gnus-with-article (article &rest forms)
+  "Select ARTICLE and perform FORMS in the original article buffer.
+Then replace the article with the result."
+  `(progn
+     ;; We don't want the article to be marked as read.
+     (let (gnus-mark-article-hook)
+       (gnus-summary-select-article t t nil ,article))
+     (set-buffer gnus-original-article-buffer)
+     ,@forms
+     (if (not (gnus-check-backend-function
+              'request-replace-article (car gnus-article-current)))
+        (gnus-message 5 "Read-only group; not replacing")
+       (unless (gnus-request-replace-article
+               ,article (car gnus-article-current)
+               (current-buffer) t)
+        (error "Couldn't replace article")))
+     ;; The cache and backlog have to be flushed somewhat.
+     (when gnus-keep-backlog
+       (gnus-backlog-remove-article
+       (car gnus-article-current) (cdr gnus-article-current)))
+     (when gnus-use-cache
+       (gnus-cache-update-article
+       (car gnus-article-current) (cdr gnus-article-current)))))
+
+(put 'gnus-with-article 'lisp-indent-function 1)
+(put 'gnus-with-article 'edebug-form-spec '(form body))
+
 ;; Thread-based commands.
 
 (defun gnus-summary-articles-in-thread (&optional article)
@@ -8671,14 +8924,16 @@ is non-nil or the Subject: of both articles are the same."
        (unless (and message-id (not (equal message-id "")))
          (error "No message-id in desired parent"))
        (gnus-with-article current-article
-         (goto-char (point-min))
-         (if (re-search-forward "^References: " nil t)
-             (progn
-               (re-search-forward "^[^ \t]" nil t)
-               (forward-line -1)
-               (end-of-line)
-               (insert " " message-id))
-           (insert "References: " message-id "\n")))
+         (save-restriction
+           (goto-char (point-min))
+           (message-narrow-to-head)
+           (if (re-search-forward "^References: " nil t)
+               (progn
+                 (re-search-forward "^[^ \t]" nil t)
+                 (forward-line -1)
+                 (end-of-line)
+                 (insert " " message-id))
+             (insert "References: " message-id "\n"))))
        (set-buffer gnus-summary-buffer)
        (gnus-summary-unmark-all-processable)
        (gnus-summary-update-article current-article)
@@ -8753,9 +9008,7 @@ Returns nil if no threads were there to be hidden."
                (subst-char-in-region start (point) ?\n ?\^M)
                (gnus-summary-goto-subject article))
            (goto-char start)
-           nil)
-       ;;(gnus-summary-position-point)
-       ))))
+           nil)))))
 
 (defun gnus-summary-go-to-next-thread (&optional previous)
   "Go to the same level (or less) next thread.
@@ -8887,14 +9140,14 @@ Argument REVERSE means reverse order."
 
 (defun gnus-summary-sort-by-author (&optional reverse)
   "Sort the summary buffer by author name alphabetically.
-If case-fold-search is non-nil, case of letters is ignored.
+If `case-fold-search' is non-nil, case of letters is ignored.
 Argument REVERSE means reverse order."
   (interactive "P")
   (gnus-summary-sort 'author reverse))
 
 (defun gnus-summary-sort-by-subject (&optional reverse)
   "Sort the summary buffer by subject alphabetically.  `Re:'s are ignored.
-If case-fold-search is non-nil, case of letters is ignored.
+If `case-fold-search' is non-nil, case of letters is ignored.
 Argument REVERSE means reverse order."
   (interactive "P")
   (gnus-summary-sort 'subject reverse))
@@ -8921,7 +9174,7 @@ Argument REVERSE means reverse order."
   "Sort the summary buffer by article length.
 Argument REVERSE means reverse order."
   (interactive "P")
-  (gnus-summary-sort 'chars reverse))  
+  (gnus-summary-sort 'chars reverse))
 
 (defun gnus-summary-sort (predicate reverse)
   "Sort summary buffer by PREDICATE.  REVERSE means reverse order."
@@ -8932,6 +9185,8 @@ Argument REVERSE means reverse order."
              thread
            `(lambda (t1 t2)
               (,thread t2 t1))))
+        (gnus-sort-gathered-threads-function
+         gnus-thread-sort-functions)
         (gnus-article-sort-functions
          (if (not reverse)
              article
@@ -8990,6 +9245,7 @@ If N is a negative number, pipe the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 pipe those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-pipe))
     (gnus-summary-save-article arg t))
   (gnus-configure-windows 'pipe))
@@ -9001,6 +9257,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-mail))
     (gnus-summary-save-article arg)))
 
@@ -9011,6 +9268,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-rmail))
     (gnus-summary-save-article arg)))
 
@@ -9021,6 +9279,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-in-file))
     (gnus-summary-save-article arg)))
 
@@ -9031,6 +9290,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-write-to-file))
     (gnus-summary-save-article arg)))
 
@@ -9041,6 +9301,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
+  (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-body-in-file))
     (gnus-summary-save-article arg)))
 
@@ -9065,7 +9326,7 @@ save those articles instead."
        (set-buffer gnus-original-article-buffer)
        (save-restriction
          (nnheader-narrow-to-headers)
-         (while methods
+         (while (and methods (not split-name))
            (goto-char (point-min))
            (setq method (pop methods))
            (setq match (car method))
@@ -9084,7 +9345,7 @@ save those articles instead."
                    (save-restriction
                      (widen)
                      (setq result (eval match)))))
-             (setq split-name (append (cdr method) split-name))
+             (setq split-name (cdr method))
              (cond ((stringp result)
                     (push (expand-file-name
                            result gnus-article-save-directory)
@@ -9129,7 +9390,8 @@ save those articles instead."
                                  (mapcar (lambda (el) (list el))
                                          (nreverse split-name))
                                  nil nil nil
-                                 'gnus-group-history)))))
+                                 'gnus-group-history))))
+         (to-method (gnus-server-to-method (gnus-group-method to-newsgroup))))
     (when to-newsgroup
       (if (or (string= to-newsgroup "")
              (string= to-newsgroup prefix))
@@ -9137,25 +9399,29 @@ save those articles instead."
       (unless to-newsgroup
        (error "No group name entered"))
       (or (gnus-active to-newsgroup)
-         (gnus-activate-group to-newsgroup)
+         (gnus-activate-group to-newsgroup nil nil to-method)
          (if (gnus-y-or-n-p (format "No such group: %s.  Create it? "
                                     to-newsgroup))
-             (or (and (gnus-request-create-group
-                       to-newsgroup (gnus-group-name-to-method to-newsgroup))
+             (or (and (gnus-request-create-group to-newsgroup to-method)
                       (gnus-activate-group
-                       to-newsgroup nil nil
-                       (gnus-group-name-to-method to-newsgroup))
+                       to-newsgroup nil nil to-method)
                       (gnus-subscribe-group to-newsgroup))
                  (error "Couldn't create group %s" to-newsgroup)))
          (error "No such group: %s" to-newsgroup)))
     to-newsgroup))
 
-(defun gnus-summary-save-parts (type dir n reverse)
+(defun gnus-summary-save-parts (type dir n &optional reverse)
   "Save parts matching TYPE to DIR.
 If REVERSE, save parts that do not match TYPE."
   (interactive
-   (list (read-string "Save parts of type: " "image/.*")
-        (read-file-name "Save to directory: " t nil t)
+   (list (read-string "Save parts of type: " 
+                     (or (car gnus-summary-save-parts-type-history)
+                         gnus-summary-save-parts-default-mime)
+                     'gnus-summary-save-parts-type-history)
+        (setq gnus-summary-save-parts-last-directory
+              (read-file-name "Save to directory: " 
+                              gnus-summary-save-parts-last-directory
+                              nil t))
         current-prefix-arg))
   (gnus-summary-iterate n
     (let ((gnus-display-mime-function nil)
@@ -9163,10 +9429,12 @@ If REVERSE, save parts that do not match TYPE."
       (gnus-summary-select-article))
     (save-excursion
       (set-buffer gnus-article-buffer)
-      (let ((handles (or (mm-dissect-buffer) (mm-uu-dissect))))
+      (let ((handles (or gnus-article-mime-handles
+                        (mm-dissect-buffer) (mm-uu-dissect))))
        (when handles
          (gnus-summary-save-parts-1 type dir handles reverse)
-         (mm-destroy-parts handles))))))
+         (unless gnus-article-mime-handles ;; Don't destroy this case.
+           (mm-destroy-parts handles)))))))
 
 (defun gnus-summary-save-parts-1 (type dir handle reverse)
   (if (stringp (car handle))
@@ -9180,7 +9448,9 @@ If REVERSE, save parts that do not match TYPE."
                    (or
                     (mail-content-type-get
                      (mm-handle-disposition handle) 'filename)
-                    (concat gnus-newsgroup-name "." gnus-current-article)))
+                    (concat gnus-newsgroup-name
+                            "." (number-to-string
+                                 (cdr gnus-article-current)))))
                   dir)))
        (unless (file-exists-p file)
          (mm-save-part-to-file handle file))))))
@@ -9297,8 +9567,10 @@ If REVERSE, save parts that do not match TYPE."
   "Read the headers of article ID and enter them into the Gnus system."
   (let ((group gnus-newsgroup-name)
        (gnus-override-method
-        (and (gnus-news-group-p gnus-newsgroup-name)
-             gnus-refer-article-method))
+        (or
+         gnus-override-method
+         (and (gnus-news-group-p gnus-newsgroup-name)
+              (car (gnus-refer-article-methods)))))
        where)
     ;; First we check to see whether the header in question is already
     ;; fetched.
@@ -9372,8 +9644,8 @@ If REVERSE, save parts that do not match TYPE."
 ;;;
 
 (defun gnus-highlight-selected-summary ()
+  "Highlight selected article in summary buffer."
   ;; Added by Per Abrahamsen <amanda@iesd.auc.dk>.
-  ;; Highlight selected article in summary buffer
   (when gnus-summary-selected-face
     (save-excursion
       (let* ((beg (progn (beginning-of-line) (point)))
@@ -9468,23 +9740,32 @@ If REVERSE, save parts that do not match TYPE."
       (if compute
          read
        (save-excursion
-         (set-buffer gnus-group-buffer)
-         (gnus-undo-register
-           `(progn
-              (gnus-info-set-marks ',info ',(gnus-info-marks info) t)
-              (gnus-info-set-read ',info ',(gnus-info-read info))
-              (gnus-get-unread-articles-in-group ',info (gnus-active ,group))
-              (gnus-group-update-group ,group t))))
-       ;; Propagate the read marks to the backend.
-       (if (gnus-check-backend-function 'request-set-mark group)
-           (let ((del (gnus-remove-from-range (gnus-info-read info) read))
-                 (add (gnus-remove-from-range read (gnus-info-read info))))
-             (when (or add del)
-              (unless (gnus-check-group group)
-                (error "Can't open server for %s" group))
-               (gnus-request-set-mark
-                group (delq nil (list (if add (list add 'add '(read)))
-                                      (if del (list del 'del '(read)))))))))
+         (let (setmarkundo)
+           ;; Propagate the read marks to the backend.
+           (when (gnus-check-backend-function 'request-set-mark group)
+             (let ((del (gnus-remove-from-range (gnus-info-read info) read))
+                   (add (gnus-remove-from-range read (gnus-info-read info))))
+               (when (or add del)
+                 (unless (gnus-check-group group)
+                   (error "Can't open server for %s" group))
+                 (gnus-request-set-mark
+                  group (delq nil (list (if add (list add 'add '(read)))
+                                        (if del (list del 'del '(read))))))
+                 (setq setmarkundo
+                       `(gnus-request-set-mark
+                         ,group
+                         ',(delq nil (list
+                                      (if del (list del 'add '(read)))
+                                      (if add (list add 'del '(read))))))))))
+           (set-buffer gnus-group-buffer)
+           (gnus-undo-register
+             `(progn
+                (gnus-info-set-marks ',info ',(gnus-info-marks info) t)
+                (gnus-info-set-read ',info ',(gnus-info-read info))
+                (gnus-get-unread-articles-in-group ',info 
+                                                   (gnus-active ,group))
+                (gnus-group-update-group ,group t)
+                ,setmarkundo))))
        ;; Enter this list into the group info.
        (gnus-info-set-read info read)
        ;; Set the number of unread articles in gnus-newsrc-hashtb.
@@ -9553,40 +9834,31 @@ If REVERSE, save parts that do not match TYPE."
 
 (defun gnus-mime-extract-message/rfc822 (entity situation)
   (let (group article num cwin swin cur)
-    (with-current-buffer (mime-entity-buffer entity)
-      (save-restriction
-       (narrow-to-region (mime-entity-body-start entity)
-                         (mime-entity-body-end entity))
-       (setq group (or (cdr (assq 'group situation))
-                       (completing-read "Group: "
-                                        gnus-active-hashtb
-                                        nil
-                                        (gnus-read-active-file-p)
-                                        gnus-newsgroup-name))
-             article (gnus-request-accept-article group)
-             )
-       ))
+    (with-temp-buffer
+      (mime-insert-entity-content entity)
+      (setq group (or (cdr (assq 'group situation))
+                     (completing-read "Group: "
+                                      gnus-active-hashtb
+                                      nil
+                                      (gnus-read-active-file-p)
+                                      gnus-newsgroup-name))
+           article (gnus-request-accept-article group)))
     (when (and (consp article)
               (numberp (setq article (cdr article))))
       (setq num (1+ (or (cdr (assq 'number situation)) 0))
-           cwin (get-buffer-window (current-buffer) t)
-           )
+           cwin (get-buffer-window (current-buffer) t))
       (save-window-excursion
        (if (setq swin (get-buffer-window gnus-summary-buffer t))
            (select-window swin)
-         (set-buffer gnus-summary-buffer)
-         )
+         (set-buffer gnus-summary-buffer))
        (setq cur gnus-current-article)
        (forward-line num)
        (let (gnus-show-threads)
-         (gnus-summary-goto-subject article t)
-         )
+         (gnus-summary-goto-subject article t))
        (gnus-summary-clear-mark-forward 1)
-       (gnus-summary-goto-subject cur)
-       )
+       (gnus-summary-goto-subject cur))
       (when (and cwin (window-frame cwin))
-       (select-frame (window-frame cwin))
-       )
+       (select-frame (window-frame cwin)))
       (when (boundp 'mime-acting-situation-to-override)
        (set-alist 'mime-acting-situation-to-override
                   'group
@@ -9596,15 +9868,11 @@ If REVERSE, save parts that do not match TYPE."
                   `(progn
                      (save-current-buffer
                        (set-buffer gnus-group-buffer)
-                       (gnus-activate-group ,group)
-                       )
+                       (gnus-activate-group ,group))
                      (gnus-summary-goto-article ,cur
-                                                gnus-show-all-headers)
-                     ))
+                                                gnus-show-all-headers)))
        (set-alist 'mime-acting-situation-to-override
-                  'number num)
-       )
-      )))
+                  'number num)))))
 
 (mime-add-condition
  'action '((type . message)(subtype . rfc822)
@@ -9632,7 +9900,7 @@ If REVERSE, save parts that do not match TYPE."
     (if (setq f (cdr (assq 'after-method
                           mime-acting-situation-to-override)))
        (eval f)
-      )))  
+      )))
 
 (mime-add-condition
  'action '((type . multipart)
@@ -9649,39 +9917,38 @@ If REVERSE, save parts that do not match TYPE."
   "Setup newsgroup default charset."
   (if (equal gnus-newsgroup-name "nndraft:drafts")
       (setq gnus-newsgroup-charset nil)
-  (let* ((name (and gnus-newsgroup-name
-                  (gnus-group-real-name gnus-newsgroup-name)))
-        (ignored-charsets 
-         (or gnus-newsgroup-ephemeral-ignored-charsets
-             (append
-              (and gnus-newsgroup-name
-                   (or (gnus-group-find-parameter gnus-newsgroup-name
-                                                  'ignored-charsets t)
-                       (let ((alist gnus-group-ignored-charsets-alist)
-                          elem (charsets nil))
-                         (while (setq elem (pop alist))
-                           (when (and name
-                                      (string-match (car elem) name))
-                             (setq alist nil
-                                   charsets (cdr elem))))
-                         charsets))))
-             gnus-newsgroup-ignored-charsets)))
-    (setq gnus-newsgroup-charset
-         (or gnus-newsgroup-ephemeral-charset
-             (and gnus-newsgroup-name
-                  (or (gnus-group-find-parameter gnus-newsgroup-name
-                                                 'charset)
-                      (let ((alist gnus-group-charset-alist)
-                            elem (charset nil))
-                        (while (setq elem (pop alist))
-                          (when (and name
-                                     (string-match (car elem) name))
-                            (setq alist nil
-                                  charset (cadr elem))))
-                        charset)))
-             gnus-default-charset))
-    (set (make-local-variable 'gnus-newsgroup-ignored-charsets) 
-        ignored-charsets))))
+    (let* ((name (and gnus-newsgroup-name
+                     (gnus-group-real-name gnus-newsgroup-name)))
+          (ignored-charsets
+           (or gnus-newsgroup-ephemeral-ignored-charsets
+               (append
+                (and gnus-newsgroup-name
+                     (or (gnus-group-find-parameter gnus-newsgroup-name
+                                                    'ignored-charsets t)
+                         (let ((alist gnus-group-ignored-charsets-alist)
+                               elem (charsets nil))
+                           (while (setq elem (pop alist))
+                             (when (and name
+                                        (string-match (car elem) name))
+                               (setq alist nil
+                                     charsets (cdr elem))))
+                           charsets)))
+                gnus-newsgroup-ignored-charsets))))
+      (setq gnus-newsgroup-charset
+           (or gnus-newsgroup-ephemeral-charset
+               (and gnus-newsgroup-name
+                    (or (gnus-group-find-parameter gnus-newsgroup-name 'charset)
+                        (let ((alist gnus-group-charset-alist)
+                              elem charset)
+                          (while (setq elem (pop alist))
+                            (when (and name
+                                       (string-match (car elem) name))
+                              (setq alist nil
+                                    charset (cadr elem))))
+                          charset)))
+               gnus-default-charset))
+      (set (make-local-variable 'gnus-newsgroup-ignored-charsets)
+          ignored-charsets))))
 
 ;;;
 ;;; Mime Commands
@@ -9702,17 +9969,17 @@ treated as multipart/mixed."
   (interactive (list (gnus-summary-article-number)))
   (gnus-with-article article
     (message-narrow-to-head)
+    (message-remove-header "Mime-Version")
     (goto-char (point-max))
+    (insert "Mime-Version: 1.0\n")
     (widen)
     (when (search-forward "\n--" nil t)
       (let ((separator (buffer-substring (point) (gnus-point-at-eol))))
        (message-narrow-to-head)
-       (message-remove-header "Mime-Version")
        (message-remove-header "Content-Type")
        (goto-char (point-max))
        (insert (format "Content-Type: multipart/mixed; boundary=\"%s\"\n"
                        separator))
-       (insert "Mime-Version: 1.0\n")
        (widen))))
   (let (gnus-mark-article-hook)
     (gnus-summary-select-article t t nil article)))
@@ -9769,15 +10036,13 @@ treated as multipart/mixed."
                                            'gnus-wheel-edge
                                            (* (1+ edge) direction))
                         nil))
-                  (eq last-command 'gnus-wheel-summary-scroll))
-             ))
-      (gnus-summary-next-article nil nil (minusp direction)))
-    ))
+                  (eq last-command 'gnus-wheel-summary-scroll))))
+      (gnus-summary-next-article nil nil (minusp direction)))))
 
 (defun gnus-wheel-install ()
   "Enable mouse wheel support on summary window."
   (when gnus-use-wheel
-    (let ((keys 
+    (let ((keys
           '([(mouse-4)] [(shift mouse-4)] [(mouse-5)] [(shift mouse-5)])))
       (dolist (key keys)
        (define-key gnus-summary-mode-map key
@@ -9786,35 +10051,46 @@ treated as multipart/mixed."
 (add-hook 'gnus-summary-mode-hook 'gnus-wheel-install)
 
 ;;;
-;;; with article
+;;; Traditional PGP commmands
 ;;;
 
-(defmacro gnus-with-article (article &rest forms)
-  "Select ARTICLE and perform FORMS in the original article buffer.
-Then replace the article with the result."
-  `(progn
-     ;; We don't want the article to be marked as read.
-     (let (gnus-mark-article-hook)
-       (gnus-summary-select-article t t nil ,article))
-     (set-buffer gnus-original-article-buffer)
-     ,@forms
-     (if (not (gnus-check-backend-function
-              'request-replace-article (car gnus-article-current)))
-        (gnus-message 5 "Read-only group; not replacing")
-       (unless (gnus-request-replace-article
-               ,article (car gnus-article-current)
-               (current-buffer) t)
-        (error "Couldn't replace article")))
-     ;; The cache and backlog have to be flushed somewhat.
-     (when gnus-keep-backlog
-       (gnus-backlog-remove-article
-       (car gnus-article-current) (cdr gnus-article-current)))
-     (when gnus-use-cache
-       (gnus-cache-update-article
-       (car gnus-article-current) (cdr gnus-article-current)))))
+(defun gnus-summary-decrypt-article (&optional force)
+  "Decrypt the current article in traditional PGP way.
+This will have permanent effect only in mail groups.
+If FORCE is non-nil, allow editing of articles even in read-only
+groups."
+  (interactive "P")
+  (gnus-summary-select-article t)
+  (gnus-eval-in-buffer-window gnus-article-buffer
+    (save-excursion
+      (save-restriction
+       (widen)
+       (goto-char (point-min))
+       (unless (re-search-forward (car pgg-armor-header-lines) nil t)
+         (error "Not a traditional PGP message!"))
+       (let ((armor-start (match-beginning 0)))
+         (if (and (pgg-decrypt-region armor-start (point-max))
+                  (or force (not (gnus-group-read-only-p))))
+             (let ((inhibit-read-only t)
+                   buffer-read-only)
+               (delete-region armor-start
+                              (progn
+                                (re-search-forward "^-+END PGP" nil t)
+                                (beginning-of-line 2)
+                                (point)))
+               (insert-buffer-substring pgg-output-buffer))))))))
 
-(put 'gnus-with-article 'lisp-indent-function 1)
-(put 'gnus-with-article 'edebug-form-spec '(form body))
+(defun gnus-summary-verify-article ()
+  "Verify the current article in traditional PGP way."
+  (interactive)
+  (save-excursion
+    (set-buffer gnus-original-article-buffer)
+    (goto-char (point-min))
+    (unless (re-search-forward "^-+BEGIN PGP SIGNED MESSAGE" nil t)
+      (error "Not a traditional PGP message!"))
+    (re-search-forward "^-+END PGP" nil t)
+    (beginning-of-line 2)
+    (call-interactively (function pgg-verify-region))))
 
 ;;;
 ;;; Generic summary marking commands
@@ -9848,8 +10124,8 @@ Then replace the article with the result."
                   mark (car lway) lway name)))
        (setq func (eval func))
        (define-key map (nth 4 lway) func)))))
-      
-(defun gnus-summary-make-marking-command-1 (mark way lway name)      
+
+(defun gnus-summary-make-marking-command-1 (mark way lway name)
   `(defun ,(intern
            (format "gnus-summary-put-mark-as-%s%s"
                    name (if (eq way 'nomove)
@@ -9865,7 +10141,7 @@ returned."
        name (car (cdr lway)))
      (interactive "p")
      (gnus-summary-generic-mark n ,mark ',(nth 2 lway) ,(nth 3 lway))))
-    
+
 (defun gnus-summary-generic-mark (n mark move unread)
   "Mark N articles with MARK."
   (unless (eq major-mode 'gnus-summary-mode)
index d86f573..22fc71b 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Ilja Weis <kult@uni-paderborn.de>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -27,6 +28,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'gnus)
 (require 'gnus-group)
 (require 'gnus-start)
@@ -190,8 +193,9 @@ If TOPIC, start with that topic."
     (beginning-of-line)
     (get-text-property (point) 'gnus-active)))
 
-(defun gnus-topic-find-groups (topic &optional level all lowest)
-  "Return entries for all visible groups in TOPIC."
+(defun gnus-topic-find-groups (topic &optional level all lowest recursive)
+  "Return entries for all visible groups in TOPIC.
+If RECURSIVE is t, return groups in its subtopics too."
   (let ((groups (cdr (assoc topic gnus-topic-alist)))
         info clevel unread group params visible-groups entry active)
     (setq lowest (or lowest 1))
@@ -221,7 +225,7 @@ If TOPIC, start with that topic."
             (> unread 0))
           (and gnus-list-groups-with-ticked-articles
                (cdr (assq 'tick (gnus-info-marks info))))
-                                       ; Has right readedness.
+          ;; Has right readedness.
           ;; Check for permanent visibility.
           (and gnus-permanently-visible-groups
                (string-match gnus-permanently-visible-groups group))
@@ -229,7 +233,18 @@ If TOPIC, start with that topic."
           (cdr (assq 'visible params)))
        ;; Add this group to the list of visible groups.
        (push (or entry group) visible-groups)))
-    (nreverse visible-groups)))
+    (setq visible-groups (nreverse visible-groups))
+    (when recursive 
+      (if (eq recursive t)
+         (setq recursive (cdr (gnus-topic-find-topology topic))))
+      (mapcar (lambda (topic-topology)
+               (setq visible-groups 
+                     (nconc visible-groups 
+                            (gnus-topic-find-groups
+                             (caar topic-topology) 
+                             level all lowest topic-topology))))
+             (cdr recursive)))
+    visible-groups))
 
 (defun gnus-topic-previous-topic (topic)
   "Return the previous topic on the same level as TOPIC."
@@ -503,7 +518,7 @@ articles in the topic and its subtopics."
       (let ((data (cadr (gnus-topic-find-topology topic))))
        (setcdr data
                (list (if insert 'visible 'invisible)
-                     (if hide 'hide nil)
+                     (caddr data)
                      (cadddr data))))
       (if total-remove
          (setq gnus-topic-alist
@@ -542,15 +557,16 @@ articles in the topic and its subtopics."
     (gnus-topic-update-unreads name unread)
     (beginning-of-line)
     ;; Insert the text.
-    (gnus-add-text-properties
-     (point)
-     (prog1 (1+ (point))
-       (eval gnus-topic-line-format-spec))
-     (list 'gnus-topic (intern name)
-          'gnus-topic-level level
-          'gnus-topic-unread unread
-          'gnus-active active-topic
-          'gnus-topic-visible visiblep))))
+    (if shownp
+       (gnus-add-text-properties
+        (point)
+        (prog1 (1+ (point))
+          (eval gnus-topic-line-format-spec))
+        (list 'gnus-topic (intern name)
+              'gnus-topic-level level
+              'gnus-topic-unread unread
+              'gnus-active active-topic
+              'gnus-topic-visible visiblep)))))
 
 (defun gnus-topic-update-unreads (topic unreads)
   (setq gnus-topic-unreads (delq (assoc topic gnus-topic-unreads)
@@ -593,7 +609,8 @@ articles in the topic and its subtopics."
   (let* ((topic (gnus-group-topic group))
         (groups (cdr (assoc topic gnus-topic-alist)))
         (g (cdr (member group groups)))
-        (unfound t))
+        (unfound t)
+        entry)
     ;; Try to jump to a visible group.
     (while (and g (not (gnus-group-goto-group (car g) t)))
       (pop g))
@@ -607,8 +624,20 @@ articles in the topic and its subtopics."
       (when (and unfound
                 topic
                 (not (gnus-topic-goto-missing-topic topic)))
-       (gnus-topic-insert-topic-line
-        topic t t (car (gnus-topic-find-topology topic)) nil 0)))))
+       (let* ((top (gnus-topic-find-topology topic))
+              (children (cddr top))
+              (type (cadr top))
+              (unread 0)
+              (entries (gnus-topic-find-groups
+                        (car type) (car gnus-group-list-mode)
+                        (cdr gnus-group-list-mode))))
+         (while children
+           (incf unread (gnus-topic-unread (caar (pop children)))))
+         (while (setq entry (pop entries))
+           (when (numberp (car entry))
+             (incf unread (car entry))))
+         (gnus-topic-insert-topic-line
+          topic t t (car (gnus-topic-find-topology topic)) nil unread))))))
 
 (defun gnus-topic-goto-missing-topic (topic)
   (if (gnus-topic-goto-topic topic)
@@ -935,7 +964,7 @@ articles in the topic and its subtopics."
     gnus-mouse-2 gnus-mouse-pick-topic)
 
   ;; Define a new submap.
-  (gnus-define-keys (gnus-group-topic-map "T" gnus-group-mode-map)
+  (gnus-define-keys (gnus-group-topic-map "T" gnus-topic-mode-map)
     "#" gnus-topic-mark-topic
     "\M-#" gnus-topic-unmark-topic
     "n" gnus-topic-create-topic
@@ -998,12 +1027,15 @@ articles in the topic and its subtopics."
          (if (null arg) (not gnus-topic-mode)
            (> (prefix-numeric-value arg) 0)))
     ;; Infest Gnus with topics.
-     (if (not gnus-topic-mode)
+    (if (not gnus-topic-mode)
        (setq gnus-goto-missing-group-function nil)
       (when (gnus-visual-p 'topic-menu 'menu)
        (gnus-topic-make-menu-bar))
       (gnus-set-format 'topic t)
-      (gnus-add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map)
+      (gnus-add-minor-mode 'gnus-topic-mode " Topic"
+                          gnus-topic-mode-map nil (lambda (&rest junk)
+                                                    (interactive)
+                                                    (gnus-topic-mode nil t)))
       (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
       (set (make-local-variable 'gnus-group-prepare-function)
           'gnus-group-prepare-topics)
@@ -1029,8 +1061,7 @@ articles in the topic and its subtopics."
     ;; Remove topic infestation.
     (unless gnus-topic-mode
       (remove-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
-      (remove-hook 'gnus-group-change-level-function
-                  'gnus-topic-change-level)
+      (setq gnus-group-change-level-function nil)
       (remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist)
       (setq gnus-group-prepare-function 'gnus-group-prepare-flat)
       (setq gnus-group-sort-alist-function 'gnus-group-sort-flat))
@@ -1048,7 +1079,8 @@ If performed over a topic line, toggle folding the topic."
   (if (gnus-group-topic-p)
       (let ((gnus-group-list-mode
             (if all (cons (if (numberp all) all 7) t) gnus-group-list-mode)))
-       (gnus-topic-fold all))
+       (gnus-topic-fold all)
+       (gnus-dribble-touch))
     (gnus-group-select-group all)))
 
 (defun gnus-mouse-pick-topic (e)
@@ -1065,9 +1097,9 @@ If performed over a topic line, toggle folding the topic."
     (save-excursion
       (gnus-message 5 "Expiring groups in %s..." topic)
       (let ((gnus-group-marked
-            (mapcar (lambda (entry) (car (nth 2 entry)))
-                    (gnus-topic-find-groups topic gnus-level-killed t))))
-       (gnus-group-expire-articles nil))
+            (mapcar (lambda (entry) (car (nth 2 entry)))
+                    (gnus-topic-find-groups topic gnus-level-killed t))))
+       (gnus-group-expire-articles nil))
       (gnus-message 5 "Expiring groups in %s...done" topic))))
 
 (defun gnus-topic-read-group (&optional all no-article group)
@@ -1099,7 +1131,7 @@ When used interactively, PARENT will be the topic under point."
   (unless parent
     (setq parent (caar gnus-topic-topology)))
   (let ((top (cdr (gnus-topic-find-topology parent)))
-       (full-topic (or full-topic `((,topic visible)))))
+       (full-topic (or full-topic (list (list topic 'visible nil nil)))))
     (unless top
       (error "No such parent topic: %s" parent))
     (if previous
@@ -1115,13 +1147,21 @@ When used interactively, PARENT will be the topic under point."
   (gnus-group-list-groups)
   (gnus-topic-goto-topic topic))
 
+;; FIXME: 
+;;  1. When the marked groups are overlapped with the process 
+;;     region, the behavior of move or remove is not right.
+;;  2. Can't process on several marked groups with a same name, 
+;;     because gnus-group-marked only keeps one copy.
+
 (defun gnus-topic-move-group (n topic &optional copyp)
   "Move the next N groups to TOPIC.
 If COPYP, copy the groups instead."
   (interactive
    (list current-prefix-arg
         (completing-read "Move to topic: " gnus-topic-alist nil t)))
-  (let ((groups (gnus-group-process-prefix n))
+  (let ((use-marked (and (not n) (not (gnus-region-active-p)) 
+                        gnus-group-marked t))
+       (groups (gnus-group-process-prefix n))
        (topicl (assoc topic gnus-topic-alist))
        (start-topic (gnus-group-topic-name))
        (start-group (progn (forward-line 1) (gnus-group-group-name)))
@@ -1130,7 +1170,7 @@ If COPYP, copy the groups instead."
        (gnus-topic-move start-topic topic)
       (mapcar
        (lambda (g)
-        (gnus-group-remove-mark g)
+        (gnus-group-remove-mark g use-marked)
         (when (and
                (setq entry (assoc (gnus-current-topic) gnus-topic-alist))
                (not copyp))
@@ -1143,18 +1183,24 @@ If COPYP, copy the groups instead."
        (gnus-topic-goto-topic start-topic))
       (gnus-group-list-groups))))
 
-(defun gnus-topic-remove-group (&optional arg)
+(defun gnus-topic-remove-group (&optional n)
   "Remove the current group from the topic."
   (interactive "P")
-  (gnus-group-iterate arg
-    (lambda (group)
-      (let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
-           (buffer-read-only nil))
-       (when (and topicl group)
-         (gnus-delete-line)
-         (gnus-delete-first group topicl))
-       (gnus-topic-update-topic)
-       (gnus-group-position-point)))))
+  (let ((use-marked (and (not n) (not (gnus-region-active-p)) 
+                        gnus-group-marked t))
+       (groups (gnus-group-process-prefix n)))
+    (mapcar
+     (lambda (group)
+       (gnus-group-remove-mark group use-marked)
+       (let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
+            (buffer-read-only nil))
+        (when (and topicl group)
+          (gnus-delete-line)
+          (gnus-delete-first group topicl))
+        (gnus-topic-update-topic)))
+     groups)
+    (gnus-topic-enter-dribble)
+    (gnus-group-position-point)))
 
 (defun gnus-topic-copy-group (n topic)
   "Copy the current group to a topic."
@@ -1176,7 +1222,12 @@ If COPYP, copy the groups instead."
        (gnus-topic-find-topology topic nil nil gnus-topic-topology)
        (gnus-topic-enter-dribble))
     (gnus-group-kill-group n discard)
-    (gnus-topic-update-topic)))
+    (if (not (gnus-group-topic-p))
+       (gnus-topic-update-topic)
+      ;; Move up one line so that we update the right topic.
+      (forward-line -1)
+      (gnus-topic-update-topic)
+      (forward-line 1))))
 
 (defun gnus-topic-yank-group (&optional arg)
   "Yank the last topic."
@@ -1226,43 +1277,64 @@ If COPYP, copy the groups instead."
            (setq alist (cdr alist))))))
     (gnus-topic-update-topic)))
 
-(defun gnus-topic-hide-topic ()
-  "Hide the current topic."
-  (interactive)
+(defun gnus-topic-hide-topic (&optional permanent)
+  "Hide the current topic.
+If PERMANENT, make it stay hidden in subsequent sessions as well."
+  (interactive "P")
   (when (gnus-current-topic)
     (gnus-topic-goto-topic (gnus-current-topic))
-    (gnus-topic-remove-topic nil nil 'hidden)))
-
-(defun gnus-topic-show-topic ()
-  "Show the hidden topic."
-  (interactive)
+    (if permanent
+       (setcar (cddr 
+                (cadr
+                 (gnus-topic-find-topology (gnus-current-topic))))
+               'hidden))
+    (gnus-topic-remove-topic nil nil)))
+
+(defun gnus-topic-show-topic (&optional permanent)
+  "Show the hidden topic.
+If PERMANENT, make it stay shown in subsequent sessions as well."
+  (interactive "P")
   (when (gnus-group-topic-p)
-    (gnus-topic-remove-topic t nil 'shown)))
-
-(defun gnus-topic-mark-topic (topic &optional unmark)
-  "Mark all groups in the topic with the process mark."
-  (interactive (list (gnus-group-topic-name)))
+    (if (not permanent)
+       (gnus-topic-remove-topic t nil)
+      (let ((topic 
+            (gnus-topic-find-topology 
+             (completing-read "Show topic: " gnus-topic-alist nil t))))
+       (setcar (cddr (cadr topic)) nil)
+       (setcar (cdr (cadr topic)) 'visible)
+       (gnus-group-list-groups)))))
+
+(defun gnus-topic-mark-topic (topic &optional unmark recursive)
+  "Mark all groups in the TOPIC with the process mark.
+If RECURSIVE is t, mark its subtopics too."
+  (interactive (list (gnus-group-topic-name)
+                    nil
+                    (and current-prefix-arg t)))
   (if (not topic)
       (call-interactively 'gnus-group-mark-group)
     (save-excursion
-      (let ((groups (gnus-topic-find-groups topic gnus-level-killed t)))
+      (let ((groups (gnus-topic-find-groups topic gnus-level-killed t nil 
+                                           recursive)))
        (while groups
          (funcall (if unmark 'gnus-group-remove-mark 'gnus-group-set-mark)
                   (gnus-info-group (nth 2 (pop groups)))))))))
 
-(defun gnus-topic-unmark-topic (topic &optional unmark)
-  "Remove the process mark from all groups in the topic."
-  (interactive (list (gnus-group-topic-name)))
+(defun gnus-topic-unmark-topic (topic &optional dummy recursive)
+  "Remove the process mark from all groups in the TOPIC.
+If RECURSIVE is t, unmark its subtopics too."
+  (interactive (list (gnus-group-topic-name)
+                    nil
+                    (and current-prefix-arg t)))
   (if (not topic)
       (call-interactively 'gnus-group-unmark-group)
-    (gnus-topic-mark-topic topic t)))
+    (gnus-topic-mark-topic topic t recursive)))
 
 (defun gnus-topic-get-new-news-this-topic (&optional n)
   "Check for new news in the current topic."
   (interactive "P")
   (if (not (gnus-group-topic-p))
       (gnus-group-get-new-news-this-group n)
-    (gnus-topic-mark-topic (gnus-group-topic-name))
+    (gnus-topic-mark-topic (gnus-group-topic-name) nil (and n t))
     (gnus-group-get-new-news-this-group)))
 
 (defun gnus-topic-move-matching (regexp topic &optional copyp)
@@ -1309,7 +1381,7 @@ If COPYP, copy the groups instead."
   (interactive
    (let ((topic (gnus-current-topic)))
      (list topic
-          (read-string (format "Rename %s to: " topic)))))
+          (read-string "Rename topic to: " topic))))
   ;; Check whether the new name exists.
   (when (gnus-topic-find-topology new-name)
     (error "Topic '%s' already exists" new-name))
@@ -1520,7 +1592,7 @@ If REVERSE, reverse the sorting order."
       (error "Can't find topic `%s'" current))
     (unless to-top
       (error "Can't find topic `%s'" to))
-    (if (gnus-topic-find-topology to current-top 0) ;; Don't care the level
+    (if (gnus-topic-find-topology to current-top 0);; Don't care the level
        (error "Can't move `%s' to its sub-level" current))
     (gnus-topic-find-topology current nil nil 'delete)
     (while (cdr to-top)
index 6d7e4ab..7dd333f 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
   (setq gnus-undo-mode-map (make-sparse-keymap))
 
   (gnus-define-keys gnus-undo-mode-map
-   "\M-\C-_"     gnus-undo
-   "\C-_"        gnus-undo
-   "\C-xu"       gnus-undo
-   ;; many people are used to type `C-/' on X terminals and get `C-_'.
-   [(control /)] gnus-undo))
+    "\M-\C-_"     gnus-undo
+    "\C-_"        gnus-undo
+    "\C-xu"       gnus-undo
+    ;; many people are used to type `C-/' on X terminals and get `C-_'.
+    [(control /)] gnus-undo))
 
 (defun gnus-undo-make-menu-bar ()
   ;; This is disabled for the time being.
index 54f73e0..4aec9e3 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-util.el --- utility functions for Semi-gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
@@ -33,9 +34,9 @@
 
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
+
 (require 'custom)
 (require 'nnheader)
-(require 'message)
 (require 'time-date)
 
 (eval-and-compile
 
 (static-cond
  ((fboundp 'point-at-bol)
-  (fset 'gnus-point-at-bol 'point-at-bol))
+  (defalias 'gnus-point-at-bol 'point-at-bol))
  ((fboundp 'line-beginning-position)
-  (fset 'gnus-point-at-bol 'line-beginning-position))
+  (defalias 'gnus-point-at-bol 'line-beginning-position))
  (t
   (defun gnus-point-at-bol ()
     "Return point at the beginning of the line."
   ))
 (static-cond
  ((fboundp 'point-at-eol)
-  (fset 'gnus-point-at-eol 'point-at-eol))
+  (defalias 'gnus-point-at-eol 'point-at-eol))
  ((fboundp 'line-end-position)
-  (fset 'gnus-point-at-eol 'line-end-position))
+  (defalias 'gnus-point-at-eol 'line-end-position))
  (t
   (defun gnus-point-at-eol ()
     "Return point at the end of the line."
        (and (string-match "(.*" from)
             (setq name (substring from (1+ (match-beginning 0))
                                   (match-end 0)))))
-    ;; Fix by Hallvard B Furuseth <h.b.furuseth@usit.uio.no>.
-    (list (or name from) (or address from))))
+    (list (if (string= name "") nil name) (or address from))))
+
 
 (defun gnus-fetch-field (field)
   "Return the value of the header FIELD of current article."
@@ -341,11 +342,11 @@ Cache the result as a text property stored in DATE."
             time)))))
 
 (defsubst gnus-time-iso8601 (time)
-  "Return a string of TIME in YYMMDDTHHMMSS format."
+  "Return a string of TIME in YYYYMMDDTHHMMSS format."
   (format-time-string "%Y%m%dT%H%M%S" time))
 
 (defun gnus-date-iso8601 (date)
-  "Convert the DATE to YYMMDDTHHMMSS."
+  "Convert the DATE to YYYYMMDDTHHMMSS."
   (condition-case ()
       (gnus-time-iso8601 (gnus-date-get-time date))
     (error "")))
@@ -481,14 +482,6 @@ If N, return the Nth ancestor instead."
                     (file-name-nondirectory file))))
   (copy-file file to))
 
-(defun gnus-kill-all-overlays ()
-  "Delete all overlays in the current buffer."
-  (let* ((overlayss (overlay-lists))
-        (buffer-read-only nil)
-        (overlays (delq nil (nconc (car overlayss) (cdr overlayss)))))
-    (while overlays
-      (delete-overlay (pop overlays)))))
-
 (defvar gnus-work-buffer " *gnus work*")
 
 (defun gnus-set-work-buffer ()
@@ -536,6 +529,7 @@ If N, return the Nth ancestor instead."
              first 't2
              last 't1))
        ((gnus-functionp function)
+       ;; Do nothing.
        )
        (t
        (error "Invalid sort spec: %s" function))))
@@ -567,17 +561,21 @@ Bind `print-quoted' and `print-readably' to t while printing."
 
 (defun gnus-make-directory (directory)
   "Make DIRECTORY (and all its parents) if it doesn't exist."
-  (when (and directory
-            (not (file-exists-p directory)))
-    (make-directory directory t))
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
+    (when (and directory
+              (not (file-exists-p directory)))
+      (make-directory directory t)))
   t)
 
 (defun gnus-write-buffer (file)
   "Write the current buffer's contents to FILE."
   ;; Make sure the directory exists.
   (gnus-make-directory (file-name-directory file))
-  ;; Write the buffer.
-  (write-region (point-min) (point-max) file nil 'quietly))
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
+    ;; Write the buffer.
+    (write-region (point-min) (point-max) file nil 'quietly)))
 
 (defun gnus-write-buffer-as-binary (file)
   "Write the current buffer's contents to FILE without code conversion."
@@ -611,7 +609,7 @@ Bind `print-quoted' and `print-readably' to t while printing."
     (save-excursion
       (save-restriction
        (goto-char beg)
-       (while (re-search-forward "[ \t]*\n" end 'move)
+       (while (re-search-forward gnus-emphasize-whitespace-regexp end 'move)
          (gnus-put-text-property beg (match-beginning 0) prop val)
          (setq beg (point)))
        (gnus-put-text-property beg (point) prop val)))))
@@ -725,7 +723,8 @@ with potentially long computations."
                  (set-buffer file-buffer)
                  (rmail-insert-rmail-file-header)
                  (let ((require-final-newline nil))
-                   (gnus-write-buffer filename)))
+                   (gnus-write-buffer-as-coding-system
+                    nnheader-text-coding-system filename)))
                (kill-buffer file-buffer))
            (error "Output file does not exist")))
       (set-buffer tmpbuf)
@@ -776,7 +775,8 @@ with potentially long computations."
              (save-excursion
                (set-buffer file-buffer)
                (let ((require-final-newline nil))
-                 (gnus-write-buffer-as-binary filename)))
+                 (gnus-write-buffer-as-coding-system
+                  nnheader-text-coding-system filename)))
              (kill-buffer file-buffer))
          (error "Output file does not exist")))
       (set-buffer tmpbuf)
@@ -850,7 +850,8 @@ ARG is passed to the first function."
   (when (file-exists-p file)
     (with-temp-buffer
       (let ((tokens '("machine" "default" "login"
-                     "password" "account" "macdef" "force"))
+                     "password" "account" "macdef" "force"
+                     "port"))
            alist elem result pair)
        (insert-file-contents file)
        (goto-char (point-min))
@@ -898,16 +899,30 @@ ARG is passed to the first function."
          (forward-line 1))
        (nreverse result)))))
 
-(defun gnus-netrc-machine (list machine)
-  "Return the netrc values from LIST for MACHINE or for the default entry."
-  (let ((rest list))
-    (while (and list
-               (not (equal (cdr (assoc "machine" (car list))) machine)))
+(defun gnus-netrc-machine (list machine &optional port defaultport)
+  "Return the netrc values from LIST for MACHINE or for the default entry.
+If PORT specified, only return entries with matching port tokens.
+Entries without port tokens default to DEFAULTPORT."
+  (let ((rest list)
+       result)
+    (while list
+      (when (equal (cdr (assoc "machine" (car list))) machine)
+       (push (car list) result))
       (pop list))
-    (car (or list
-            (progn (while (and rest (not (assoc "default" (car rest))))
-                     (pop rest))
-                   rest)))))
+    (unless result
+      ;; No machine name matches, so we look for default entries.
+      (while rest
+       (when (assoc "default" (car rest))
+         (push (car rest) result))
+       (pop rest)))
+    (when result
+      (setq result (nreverse result))
+      (while (and result
+                 (not (equal (or port defaultport "nntp")
+                             (or (gnus-netrc-get (car result) "port")
+                                 defaultport "nntp"))))
+       (pop result))
+      (car result))))
 
 (defun gnus-netrc-get (alist type)
   "Return the value of token TYPE from ALIST."
@@ -987,11 +1002,9 @@ ARG is passed to the first function."
        (throw 'found nil)))
     t))
 
-(defun gnus-write-active-file-as-coding-system (coding-system file hashtb
-                                                             &optional
-                                                             full-names)
-  (let ((output-coding-system coding-system)
-       (coding-system-for-write coding-system))
+(defun gnus-write-active-file (file hashtb &optional full-names)
+  (let ((output-coding-system nnmail-active-file-coding-system)
+       (coding-system-for-write nnmail-active-file-coding-system))
     (with-temp-file file
       (mapatoms
        (lambda (sym)
@@ -1010,14 +1023,46 @@ ARG is passed to the first function."
       (while (search-backward "\\." nil t)
        (delete-char 1)))))
 
-(defun gnus-union (a b)
-  "Add members of list A to list B
-if they are not equal to items already in B."
-  (if (null a)
-      b
-    (if (member (car a) b)
-       (gnus-union (cdr a) b)
-      (gnus-union (cdr a) (cons (car a) b)))))
+(if (fboundp 'union)
+    (defalias 'gnus-union 'union)
+  (defun gnus-union (l1 l2)
+    "Set union of lists L1 and L2."
+    (cond ((null l1) l2)
+         ((null l2) l1)
+         ((equal l1 l2) l1)
+         (t
+          (or (>= (length l1) (length l2))
+              (setq l1 (prog1 l2 (setq l2 l1))))
+          (while l2
+            (or (member (car l2) l1)
+                (push (car l2) l1))
+            (pop l2))
+          l1))))
+
+(defun gnus-add-text-properties-when
+  (property value start end properties &optional object)
+  "Like `gnus-add-text-properties', only applied on where PROPERTY is VALUE."
+  (let (point)
+    (while (and start
+               (< start end) ;; XEmacs will loop for every when start=end.
+               (setq point (text-property-not-all start end property value)))
+      (gnus-add-text-properties start point properties object)
+      (setq start (text-property-any point end property value)))
+    (if start
+       (gnus-add-text-properties start end properties object))))
+
+(defun gnus-remove-text-properties-when
+  (property value start end properties &optional object)
+  "Like `remove-text-properties', only applied on where PROPERTY is VALUE."
+  (let (point)
+    (while (and start
+               (< start end)
+               (setq point (text-property-not-all start end property value)))
+      (remove-text-properties start point properties object)
+      (setq start (text-property-any point end property value)))
+    (if start
+       (remove-text-properties start end properties object))
+    t))
 
 (provide 'gnus-util)
 
index b3f6a37..4c0cc90 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
-;; Copyright (C) 198,995,86,87,93,94,95,96,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Created: 2 Oct 1993
@@ -293,7 +294,9 @@ so I simply dropped them."
 
 (defcustom gnus-uu-digest-headers
   '("^Date:" "^From:" "^To:" "^Cc:" "^Subject:" "^Message-ID:" "^Keywords:"
-    "^Summary:" "^References:" "^Content-Type:" "^Content-Transfer-Encoding:")
+    "^Summary:" "^References:" "^Content-Type:" "^Content-Transfer-Encoding:"
+    "^MIME-Version:" "^Content-Disposition:" "^Content-Description:"
+    "^Content-ID:" "^User-Agent:" "^X-Face:")
   "*List of regexps to match headers included in digested messages.
 The headers will be included in the sequence they are matched."
   :group 'gnus-extract
@@ -347,6 +350,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 
 (defvar gnus-uu-default-dir gnus-article-save-directory)
 (defvar gnus-uu-digest-from-subject nil)
+(defvar gnus-uu-digest-buffer nil)
 
 ;; Keymaps
 
@@ -368,12 +372,11 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "k" gnus-summary-kill-process-mark
   "y" gnus-summary-yank-process-mark
   "w" gnus-summary-save-process-mark
-  "i" gnus-uu-invert-processable
-  "m" gnus-summary-save-parts)
+  "i" gnus-uu-invert-processable)
 
 (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map)
   ;;"x" gnus-uu-extract-any
-  ;;"m" gnus-uu-extract-mime
+  "m" gnus-summary-save-parts
   "u" gnus-uu-decode-uu
   "U" gnus-uu-decode-uu-and-save
   "s" gnus-uu-decode-unshar
@@ -386,17 +389,17 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "P" gnus-uu-decode-postscript-and-save)
 
 (gnus-define-keys
- (gnus-uu-extract-view-map "v" gnus-uu-extract-map)
- "u" gnus-uu-decode-uu-view
- "U" gnus-uu-decode-uu-and-save-view
- "s" gnus-uu-decode-unshar-view
- "S" gnus-uu-decode-unshar-and-save-view
- "o" gnus-uu-decode-save-view
- "O" gnus-uu-decode-save-view
- "b" gnus-uu-decode-binhex-view
- "B" gnus-uu-decode-binhex-view
- "p" gnus-uu-decode-postscript-view
- "P" gnus-uu-decode-postscript-and-save-view)
+    (gnus-uu-extract-view-map "v" gnus-uu-extract-map)
+  "u" gnus-uu-decode-uu-view
+  "U" gnus-uu-decode-uu-and-save-view
+  "s" gnus-uu-decode-unshar-view
+  "S" gnus-uu-decode-unshar-and-save-view
+  "o" gnus-uu-decode-save-view
+  "O" gnus-uu-decode-save-view
+  "b" gnus-uu-decode-binhex-view
+  "B" gnus-uu-decode-binhex-view
+  "p" gnus-uu-decode-postscript-view
+  "P" gnus-uu-decode-postscript-and-save-view)
 
 
 ;; Commands.
@@ -518,15 +521,13 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive "P")
   (let ((gnus-uu-save-in-digest t)
        (file (make-temp-name (nnheader-concat gnus-uu-tmp-dir "forward")))
-       buf subject from)
+       gnus-uu-digest-buffer subject from)
     (gnus-setup-message 'forward
       (setq gnus-uu-digest-from-subject nil)
+      (setq gnus-uu-digest-buffer
+           (gnus-get-buffer-create " *gnus-uu-forward*"))
       (gnus-uu-decode-save n file)
-      (setq buf (switch-to-buffer
-                (gnus-get-buffer-create " *gnus-uu-forward*")))
-      (erase-buffer)
-      (insert-file file)
-      (delete-file file)
+      (set-buffer gnus-uu-digest-buffer)
       (let ((fs gnus-uu-digest-from-subject))
        (when fs
          (setq from (caar fs)
@@ -548,15 +549,19 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                (if (gnus-news-group-p gnus-newsgroup-name)
                    gnus-newsgroup-name
                  "Various"))))
-      (goto-char (point-min))
-      (when (re-search-forward "^Subject: ")
-       (delete-region (point) (gnus-point-at-eol))
-       (insert subject))
-      (goto-char (point-min))
-      (when (re-search-forward "^From: ")
-       (delete-region (point) (gnus-point-at-eol))
-       (insert from))
-      (message-forward post))
+      (mime-edit-enclose-digest-region (point-min) (point-max))
+      (if post
+         (message-news nil (concat "[" from "] " subject))
+       (message-mail nil (concat "[" from "] " subject)))
+      (message-goto-body)
+      ;; Make sure we're at the start of the line.
+      (unless (bolp)
+       (insert "\n"))
+      ;; Insert the forwarded buffer.
+      (insert-buffer gnus-uu-digest-buffer)
+      (kill-buffer gnus-uu-digest-buffer)
+      (set-text-properties (point-min) (point-max) nil)
+      (message-position-point))
     (setq gnus-uu-digest-from-subject nil)))
 
 (defun gnus-uu-digest-post-forward (&optional n)
@@ -567,8 +572,10 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 ;; Process marking.
 
 (defun gnus-uu-mark-by-regexp (regexp &optional unmark)
-  "Ask for a regular expression and set the process mark on all articles that match."
-  (interactive (list (read-from-minibuffer "Mark (regexp): ")))
+  "Set the process mark on articles whose subjects match REGEXP.
+When called interactively, prompt for REGEXP.
+Optional UNMARK non-nil means unmark instead of mark."
+  (interactive "sMark (regexp): \nP")
   (let ((articles (gnus-uu-find-articles-matching regexp)))
     (while articles
       (if unmark
@@ -577,9 +584,10 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
     (message ""))
   (gnus-summary-position-point))
 
-(defun gnus-uu-unmark-by-regexp (regexp &optional unmark)
-  "Ask for a regular expression and remove the process mark on all articles that match."
-  (interactive (list (read-from-minibuffer "Mark (regexp): ")))
+(defun gnus-uu-unmark-by-regexp (regexp)
+  "Remove the process mark from articles whose subjects match REGEXP.
+When called interactively, prompt for REGEXP."
+  (interactive "sUnmark (regexp): ")
   (gnus-uu-mark-by-regexp regexp t))
 
 (defun gnus-uu-mark-series ()
@@ -656,7 +664,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defun gnus-uu-mark-over (&optional score)
   "Mark all articles with a score over SCORE (the prefix)."
   (interactive "P")
-  (let ((score (gnus-score-default score))
+  (let ((score (or score gnus-summary-default-score 0))
        (data gnus-newsgroup-data))
     (save-excursion
       (while data
@@ -812,7 +820,8 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
    (gnus-uu-save-separate-articles
     (save-excursion
       (set-buffer buffer)
-      (gnus-write-buffer
+      (gnus-write-buffer-as-coding-system
+       nnheader-text-coding-system
        (concat gnus-uu-saved-article-name gnus-current-article))
       (cond ((eq in-state 'first) (list gnus-uu-saved-article-name 'begin))
            ((eq in-state 'first-and-last) (list gnus-uu-saved-article-name
@@ -845,9 +854,9 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
            (save-excursion
              (set-buffer (gnus-get-buffer-create "*gnus-uu-pre*"))
              (erase-buffer)
-             (insert (format
-                      "Date: %s\nFrom: %s\nSubject: %s Digest\n\nTopics:\n"
-                      (current-time-string) name name))))
+             (unless gnus-uu-digest-buffer
+               (insert (format "From: %s\nSubject: %s Digest\n\n" name name)))
+             (insert "Topics:\n")))
        (when (not (eq in-state 'end))
          (setq state (list 'middle))))
       (save-excursion
@@ -863,12 +872,13 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
              (put-text-property (point-min) (point-max) 'intangible nil))
            (goto-char (point-min))
            (re-search-forward "\n\n")
-           ;; Quote all 30-dash lines.
-           (save-excursion
-             (while (re-search-forward "^-" nil t)
-               (beginning-of-line)
-               (delete-char 1)
-               (insert "- ")))
+           (unless gnus-uu-digest-buffer
+             ;; Quote all 30-dash lines.
+             (save-excursion
+               (while (re-search-forward "^-" nil t)
+                 (beginning-of-line)
+                 (delete-char 1)
+                 (insert "- "))))
            (setq body (buffer-substring (1- (point)) (point-max)))
            (narrow-to-region (point-min) (point))
            (if (not (setq headers gnus-uu-digest-headers))
@@ -886,30 +896,49 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                                          (1- (point)))
                                     (progn (forward-line 1) (point)))))))))
            (widen)))
+       (insert message-forward-start-separator)
        (insert sorthead) (goto-char (point-max))
        (insert body) (goto-char (point-max))
-       (insert (concat "\n" (make-string 30 ?-) "\n\n"))
        (goto-char beg)
-       (when (re-search-forward "^Subject: \\(.*\\)$" nil t)
-         (setq subj (buffer-substring (match-beginning 1) (match-end 1)))
+       (when (re-search-forward "^Subject:" nil t)
+         (setq subj (nnheader-decode-subject
+                     (buffer-substring (match-end 0) (std11-field-end))))
          (save-excursion
            (set-buffer "*gnus-uu-pre*")
            (insert (format "   %s\n" subj)))))
       (when (or (eq in-state 'last)
                (eq in-state 'first-and-last))
-       (save-excursion
-         (set-buffer "*gnus-uu-pre*")
-         (insert (format "\n\n%s\n\n" (make-string 70 ?-)))
-         (gnus-write-buffer gnus-uu-saved-article-name))
-       (save-excursion
-         (set-buffer "*gnus-uu-body*")
-         (goto-char (point-max))
-         (insert
-          (concat (setq end-string (format "End of %s Digest" name))
-                  "\n"))
-         (insert (concat (make-string (length end-string) ?*) "\n"))
-         (write-region
-          (point-min) (point-max) gnus-uu-saved-article-name t))
+       (if gnus-uu-digest-buffer
+           (with-current-buffer gnus-uu-digest-buffer
+             (erase-buffer)
+             (insert-buffer "*gnus-uu-pre*")
+             (goto-char (point-max))
+             (insert-buffer "*gnus-uu-body*"))
+         (save-excursion
+           (set-buffer "*gnus-uu-pre*")
+           (insert (format "\n\n%s\n\n" (make-string 70 ?-)))
+           (if gnus-uu-digest-buffer
+               (with-current-buffer gnus-uu-digest-buffer
+                 (erase-buffer)
+                 (insert-buffer "*gnus-uu-pre*"))
+             (gnus-write-buffer-as-coding-system
+              nnheader-text-coding-system gnus-uu-saved-article-name)))
+         (save-excursion
+           (set-buffer "*gnus-uu-body*")
+           (goto-char (point-max))
+           (insert
+            (concat (setq end-string (format "End of %s Digest" name))
+                    "\n"))
+           (insert (concat (make-string (length end-string) ?*) "\n"))
+           (if gnus-uu-digest-buffer
+               (with-current-buffer gnus-uu-digest-buffer
+                 (goto-char (point-max))
+                 (insert-buffer "*gnus-uu-body*"))
+             (let ((file-name-coding-system nnmail-pathname-coding-system)
+                   (pathname-coding-system nnmail-pathname-coding-system))
+               (write-region-as-coding-system
+                nnheader-text-coding-system
+                (point-min) (point-max) gnus-uu-saved-article-name t)))))
        (gnus-kill-buffer "*gnus-uu-pre*")
        (gnus-kill-buffer "*gnus-uu-body*")
        (push 'end state))
@@ -1210,7 +1239,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
        (gnus-inhibit-treatment t)
        has-been-begin article result-file result-files process-state
        gnus-summary-display-article-function
-       gnus-article-display-hook gnus-article-prepare-hook
+       gnus-article-prepare-hook gnus-display-mime-function
        article-series files)
 
     (while (and articles
@@ -1351,9 +1380,12 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (when gnus-uu-default-dir
     (let ((to-file (concat (file-name-as-directory gnus-uu-default-dir)
                           (file-name-nondirectory file))))
-      (rename-file file to-file)
-      (unless (file-exists-p file)
-       (make-symbolic-link to-file file)))))
+      (cond ((fboundp 'make-symbolic-link)
+            (rename-file file to-file)
+            (unless (file-exists-p file)
+              (make-symbolic-link to-file file)))
+           (t
+            (copy-file file to-file))))))
 
 (defun gnus-uu-part-number (article)
   (let* ((header (gnus-summary-article-header article))
@@ -1478,6 +1510,21 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
          (cons (if (= (length files) 1) (car files) files) state)
        state))))
 
+(defvar gnus-uu-unshar-warning
+  "*** WARNING ***
+
+Shell archives are an archaic method of bundling files for distribution
+across computer networks.  During the unpacking process, arbitrary commands
+are executed on your system, and all kinds of nasty things can happen.
+Please examine the archive very carefully before you instruct Emacs to
+unpack it.  You can browse the archive buffer using \\[scroll-other-window].
+
+If you are unsure what to do, please answer \"no\"."
+  "Text of warning message displayed by `gnus-uu-unshar-article'.
+Make sure that this text consists only of few text lines.  Otherwise,
+Gnus might fail to display all of it.")
+
+
 ;; This function is used by `gnus-uu-grab-articles' to treat
 ;; a shared article.
 (defun gnus-uu-unshar-article (process-buffer in-state)
@@ -1488,14 +1535,31 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
       (goto-char (point-min))
       (if (not (re-search-forward gnus-uu-shar-begin-string nil t))
          (setq state (list 'wrong-type))
-       (beginning-of-line)
-       (setq start-char (point))
-       (call-process-region
-        start-char (point-max) shell-file-name nil
-        (gnus-get-buffer-create gnus-uu-output-buffer-name) nil
-        shell-command-switch
-        (concat "cd " gnus-uu-work-dir " "
-                gnus-shell-command-separator  " sh"))))
+       (save-window-excursion
+         (save-excursion
+           (switch-to-buffer (current-buffer))
+           (delete-other-windows)
+           (let ((buffer (get-buffer-create (generate-new-buffer-name
+                                             "*Warning*"))))
+             (unless
+                 (unwind-protect
+                     (with-current-buffer buffer
+                       (insert (substitute-command-keys 
+                                gnus-uu-unshar-warning))
+                       (goto-char (point-min))
+                       (display-buffer buffer)
+                       (yes-or-no-p "This is a shell archive, unshar it? "))
+                   (kill-buffer buffer))
+               (setq state (list 'error))))))
+       (unless (memq 'error state)
+         (beginning-of-line)
+         (setq start-char (point))
+         (call-process-region
+          start-char (point-max) shell-file-name nil
+          (gnus-get-buffer-create gnus-uu-output-buffer-name) nil
+          shell-command-switch
+          (concat "cd " gnus-uu-work-dir " "
+                  gnus-shell-command-separator  " sh")))))
     state))
 
 ;; Returns the name of what the shar file is going to unpack.
@@ -1818,7 +1882,7 @@ is t."
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map (current-local-map))
     (use-local-map map))
-  (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
+  ;;(local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
   (local-set-key "\C-c\C-c" 'gnus-uu-post-news-inews)
   (local-set-key "\C-c\C-s" 'gnus-uu-post-news-inews)
   (local-set-key "\C-c\C-i" 'gnus-uu-post-insert-binary-in-article)
diff --git a/lisp/gnus-vers.el b/lisp/gnus-vers.el
new file mode 100644 (file)
index 0000000..c77bae4
--- /dev/null
@@ -0,0 +1,88 @@
+;;; gnus-vers.el --- Declare gnus version.
+
+;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+
+;; Author: Keiichi Suzuki <keiichi@nanap.org>
+;;         Katsumi Yamaoka <yamaoka@jpl.org>
+;; Keywords: news, mail, compatibility
+
+;; This file is part of T-gnus.
+
+;; 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 (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
+(require 'poe)
+(require 'product)
+(provide 'gnus-vers)
+
+(defconst gnus-revision-number "04"
+  "Revision number for this version of gnus.")
+
+;; Product information of this gnus.
+(product-provide 'gnus-vers
+  (product-define "T-gnus" nil
+                 (list 6 14 6
+                       (string-to-number gnus-revision-number))))
+
+(defconst gnus-original-version-number "5.8.8"
+  "Version number for this version of Gnus.")
+
+(provide 'running-pterodactyl-gnus-0_73-or-later)
+
+(defconst gnus-original-product-name "Gnus"
+  "Product name of the original version of Gnus.")
+
+(defconst gnus-product-name (product-name (product-find 'gnus-vers))
+  "Product name of this version of gnus.")
+
+(defconst gnus-version-number
+  (mapconcat
+   'number-to-string
+   (butlast (product-version (product-find 'gnus-vers)))
+   ".")
+  "Version number for this version of gnus.")
+
+(defconst gnus-version
+  (format "%s %s r%s (based on %s v%s ; for SEMI 1.13, FLIM 1.13)"
+         gnus-product-name gnus-version-number gnus-revision-number
+         gnus-original-product-name gnus-original-version-number)
+  "Version string for this version of gnus.")
+
+(defun gnus-version (&optional arg)
+  "Version number of this version of Gnus.
+If ARG, insert string at point."
+  (interactive "P")
+  (if arg
+      (insert (message "%s" gnus-version))
+    (message "%s" gnus-version)))
+
+(defun gnus-extended-version ()
+  "Stringified gnus version."
+  (concat gnus-product-name "/" gnus-version-number
+         " (based on "
+         gnus-original-product-name " v" gnus-original-version-number ")"
+         (if (zerop (string-to-number gnus-revision-number))
+             ""
+           (concat " (revision " gnus-revision-number ")"))
+         ))
+
+;; gnus-vers.el ends here
index 74fae9f..a7f6934 100644 (file)
@@ -32,6 +32,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus-art)
 
 (eval-when-compile
index bbaa4f9..51934fd 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'gnus)
 
 (defgroup gnus-windows nil
@@ -84,9 +86,9 @@
                  (article 1.0)))
       (t
        '(vertical 1.0
-                (summary 0.25 point)
-                (if gnus-carpal '(summary-carpal 4))
-                (article 1.0)))))
+                 (summary 0.25 point)
+                 (if gnus-carpal '(summary-carpal 4))
+                 (article 1.0)))))
     (server
      (vertical 1.0
               (server 1.0 point)
@@ -284,125 +286,128 @@ See the Gnus manual for an explanation of the syntax used.")
 
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
-  (unless window
-    (setq window (get-buffer-window (current-buffer))))
-  (select-window window)
-  ;; This might be an old-stylee buffer config.
-  (when (vectorp split)
-    (setq split (append split nil)))
-  (when (or (consp (car split))
-           (vectorp (car split)))
-    (push 1.0 split)
-    (push 'vertical split))
-  ;; The SPLIT might be something that is to be evaled to
-  ;; return a new SPLIT.
-  (while (and (not (assq (car split) gnus-window-to-buffer))
-             (gnus-functionp (car split)))
-    (setq split (eval split)))
-  (let* ((type (car split))
-        (subs (cddr split))
-        (len (if (eq type 'horizontal) (window-width) (window-height)))
-        (total 0)
-        (window-min-width (or gnus-window-min-width window-min-width))
-        (window-min-height (or gnus-window-min-height window-min-height))
-        s result new-win rest comp-subs size sub)
-    (cond
-     ;; Nothing to do here.
-     ((null split))
-     ;; Don't switch buffers.
-     ((null type)
-      (and (memq 'point split) window))
-     ;; This is a buffer to be selected.
-     ((not (memq type '(frame horizontal vertical)))
-      (let ((buffer (cond ((stringp type) type)
-                         (t (cdr (assq type gnus-window-to-buffer))))))
-       (unless buffer
-         (error "Invalid buffer type: %s" type))
-       (switch-to-buffer (gnus-get-buffer-create
-                          (gnus-window-to-buffer-helper buffer)))
-       (when (memq 'frame-focus split)
-         (setq gnus-window-frame-focus window))
-       ;; We return the window if it has the `point' spec.
-       (and (memq 'point split) window)))
-     ;; This is a frame split.
-     ((eq type 'frame)
-      (unless gnus-frame-list
-       (setq gnus-frame-list (list (window-frame
-                                    (get-buffer-window (current-buffer))))))
-      (let ((i 0)
-           params frame fresult)
-       (while (< i (length subs))
-         ;; Frame parameter is gotten from the sub-split.
-         (setq params (cadr (elt subs i)))
-         ;; It should be a list.
-         (unless (listp params)
-           (setq params nil))
-         ;; Create a new frame?
-         (unless (setq frame (elt gnus-frame-list i))
-           (nconc gnus-frame-list (list (setq frame (make-frame params))))
-           (push frame gnus-created-frames))
-         ;; Is the old frame still alive?
-         (unless (frame-live-p frame)
-           (setcar (nthcdr i gnus-frame-list)
-                   (setq frame (make-frame params))))
-         ;; Select the frame in question and do more splits there.
-         (select-frame frame)
-         (setq fresult (or (gnus-configure-frame (elt subs i)) fresult))
-         (incf i))
-       ;; Select the frame that has the selected buffer.
-       (when fresult
-         (select-frame (window-frame fresult)))))
-     ;; This is a normal split.
-     (t
-      (when (> (length subs) 0)
-       ;; First we have to compute the sizes of all new windows.
-       (while subs
-         (setq sub (append (pop subs) nil))
-         (while (and (not (assq (car sub) gnus-window-to-buffer))
-                     (gnus-functionp (car sub)))
-           (setq sub (eval sub)))
-         (when sub
-           (push sub comp-subs)
-           (setq size (cadar comp-subs))
-           (cond ((equal size 1.0)
-                  (setq rest (car comp-subs))
-                  (setq s 0))
-                 ((floatp size)
-                  (setq s (floor (* size len))))
-                 ((integerp size)
-                  (setq s size))
-                 (t
-                  (error "Invalid size: %s" size)))
-           ;; Try to make sure that we are inside the safe limits.
-           (cond ((zerop s))
-                 ((eq type 'horizontal)
-                  (setq s (max s window-min-width)))
-                 ((eq type 'vertical)
-                  (setq s (max s window-min-height))))
-           (setcar (cdar comp-subs) s)
-           (incf total s)))
-       ;; Take care of the "1.0" spec.
-       (if rest
-           (setcar (cdr rest) (- len total))
-         (error "No 1.0 specs in %s" split))
-       ;; The we do the actual splitting in a nice recursive
-       ;; fashion.
-       (setq comp-subs (nreverse comp-subs))
-       (while comp-subs
-         (if (null (cdr comp-subs))
-             (setq new-win window)
-           (setq new-win
-                 (split-window window (cadar comp-subs)
-                               (eq type 'horizontal))))
-         (setq result (or (gnus-configure-frame
-                           (car comp-subs) window)
-                          result))
-         (select-window new-win)
-         (setq window new-win)
-         (setq comp-subs (cdr comp-subs))))
-      ;; Return the proper window, if any.
-      (when result
-       (select-window result))))))
+  (let ((current-window
+        (or (get-buffer-window (current-buffer)) (selected-window))))
+    (unless window
+      (setq window current-window))
+    (select-window window)
+    ;; This might be an old-stylee buffer config.
+    (when (vectorp split)
+      (setq split (append split nil)))
+    (when (or (consp (car split))
+             (vectorp (car split)))
+      (push 1.0 split)
+      (push 'vertical split))
+    ;; The SPLIT might be something that is to be evaled to
+    ;; return a new SPLIT.
+    (while (and (not (assq (car split) gnus-window-to-buffer))
+               (gnus-functionp (car split)))
+      (setq split (eval split)))
+    (let* ((type (car split))
+          (subs (cddr split))
+          (len (if (eq type 'horizontal) (window-width) (window-height)))
+          (total 0)
+          (window-min-width (or gnus-window-min-width window-min-width))
+          (window-min-height (or gnus-window-min-height window-min-height))
+          s result new-win rest comp-subs size sub)
+      (cond
+       ;; Nothing to do here.
+       ((null split))
+       ;; Don't switch buffers.
+       ((null type)
+       (and (memq 'point split) window))
+       ;; This is a buffer to be selected.
+       ((not (memq type '(frame horizontal vertical)))
+       (let ((buffer (cond ((stringp type) type)
+                           (t (cdr (assq type gnus-window-to-buffer))))))
+         (unless buffer
+           (error "Invalid buffer type: %s" type))
+         (let ((buf (gnus-get-buffer-create
+                     (gnus-window-to-buffer-helper buffer))))
+           (if (eq buf (window-buffer (selected-window))) (set-buffer buf)
+             (switch-to-buffer buf)))
+         (when (memq 'frame-focus split)
+           (setq gnus-window-frame-focus window))
+         ;; We return the window if it has the `point' spec.
+         (and (memq 'point split) window)))
+       ;; This is a frame split.
+       ((eq type 'frame)
+       (unless gnus-frame-list
+         (setq gnus-frame-list (list (window-frame current-window))))
+       (let ((i 0)
+             params frame fresult)
+         (while (< i (length subs))
+           ;; Frame parameter is gotten from the sub-split.
+           (setq params (cadr (elt subs i)))
+           ;; It should be a list.
+           (unless (listp params)
+             (setq params nil))
+           ;; Create a new frame?
+           (unless (setq frame (elt gnus-frame-list i))
+             (nconc gnus-frame-list (list (setq frame (make-frame params))))
+             (push frame gnus-created-frames))
+           ;; Is the old frame still alive?
+           (unless (frame-live-p frame)
+             (setcar (nthcdr i gnus-frame-list)
+                     (setq frame (make-frame params))))
+           ;; Select the frame in question and do more splits there.
+           (select-frame frame)
+           (setq fresult (or (gnus-configure-frame (elt subs i)) fresult))
+           (incf i))
+         ;; Select the frame that has the selected buffer.
+         (when fresult
+           (select-frame (window-frame fresult)))))
+       ;; This is a normal split.
+       (t
+       (when (> (length subs) 0)
+         ;; First we have to compute the sizes of all new windows.
+         (while subs
+           (setq sub (append (pop subs) nil))
+           (while (and (not (assq (car sub) gnus-window-to-buffer))
+                       (gnus-functionp (car sub)))
+             (setq sub (eval sub)))
+           (when sub
+             (push sub comp-subs)
+             (setq size (cadar comp-subs))
+             (cond ((equal size 1.0)
+                    (setq rest (car comp-subs))
+                    (setq s 0))
+                   ((floatp size)
+                    (setq s (floor (* size len))))
+                   ((integerp size)
+                    (setq s size))
+                   (t
+                    (error "Invalid size: %s" size)))
+             ;; Try to make sure that we are inside the safe limits.
+             (cond ((zerop s))
+                   ((eq type 'horizontal)
+                    (setq s (max s window-min-width)))
+                   ((eq type 'vertical)
+                    (setq s (max s window-min-height))))
+             (setcar (cdar comp-subs) s)
+             (incf total s)))
+         ;; Take care of the "1.0" spec.
+         (if rest
+             (setcar (cdr rest) (- len total))
+           (error "No 1.0 specs in %s" split))
+         ;; The we do the actual splitting in a nice recursive
+         ;; fashion.
+         (setq comp-subs (nreverse comp-subs))
+         (while comp-subs
+           (if (null (cdr comp-subs))
+               (setq new-win window)
+             (setq new-win
+                   (split-window window (cadar comp-subs)
+                                 (eq type 'horizontal))))
+           (setq result (or (gnus-configure-frame
+                             (car comp-subs) window)
+                            result))
+           (select-window new-win)
+           (setq window new-win)
+           (setq comp-subs (cdr comp-subs))))
+       ;; Return the proper window, if any.
+       (when result
+         (select-window result)))))))
 
 (defvar gnus-frame-split-p nil)
 
@@ -420,7 +425,7 @@ See the Gnus manual for an explanation of the syntax used.")
       (setq gnus-frame-split-p nil)
 
       (unless split
-       (error "No such setting: %s" setting))
+       (error "No such setting in `gnus-buffer-configuration': %s" setting))
 
       (if (and (setq all-visible (gnus-all-windows-visible-p split))
               (not force))
@@ -428,6 +433,10 @@ See the Gnus manual for an explanation of the syntax used.")
          ;; put point in the assigned buffer, and do not touch the
          ;; winconf.
          (select-window all-visible)
+       
+       ;; Make sure "the other" buffer, nntp-server-buffer, is live.
+       (unless (gnus-buffer-live-p nntp-server-buffer)
+         (nnheader-init-server-buffer))
 
        ;; Either remove all windows or just remove all Gnus windows.
        (let ((frame (selected-frame)))
@@ -443,12 +452,12 @@ See the Gnus manual for an explanation of the syntax used.")
                    (gnus-delete-windows-in-gnusey-frames))
                ;; Just remove some windows.
                (gnus-remove-some-windows)
-               (switch-to-buffer nntp-server-buffer))
+               (set-buffer nntp-server-buffer))
            (select-frame frame)))
 
-       (switch-to-buffer nntp-server-buffer)
        (let (gnus-window-frame-focus)
-         (gnus-configure-frame split (get-buffer-window (current-buffer)))
+         (set-buffer nntp-server-buffer)
+         (gnus-configure-frame split)
          (when gnus-window-frame-focus
            (select-frame (window-frame gnus-window-frame-focus))))))))
 
@@ -505,7 +514,7 @@ should have point."
        (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
                 (setq win (get-buffer-window buf t)))
            (if (memq 'point split)
-             (setq all-visible win))
+               (setq all-visible win))
          (setq all-visible nil)))
        (t
        (when (eq type 'frame)
@@ -532,7 +541,7 @@ should have point."
                  lowest-buf buf))))
       (when lowest-buf
        (pop-to-buffer lowest-buf)
-       (switch-to-buffer nntp-server-buffer))
+       (set-buffer nntp-server-buffer))
       (mapcar (lambda (b) (delete-windows-on b t)) bufs))))
 
 (provide 'gnus-win)
index 4b74674..84dc234 100644 (file)
@@ -1,5 +1,7 @@
 ;;; gnus-xmas.el --- Gnus functions for XEmacs
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;      Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Katsumi Yamaoka <yamaoka@jpl.org>
@@ -407,26 +409,28 @@ call it with the value of the `gnus-data' text property."
   (cond
    ((fboundp 'char-or-char-int-p)
     ;; Handle both types of marks for XEmacs-20.x.
-    (fset 'gnus-characterp 'char-or-char-int-p))
+    (defalias 'gnus-characterp 'char-or-char-int-p))
    ;; V19 of XEmacs, probably.
    (t
-    (fset 'gnus-characterp 'characterp)))
-
-  (fset 'gnus-make-overlay 'make-extent)
-  (fset 'gnus-delete-overlay 'delete-extent)
-  (fset 'gnus-overlay-put 'set-extent-property)
-  (fset 'gnus-move-overlay 'gnus-xmas-move-overlay)
-  (fset 'gnus-overlay-end 'extent-end-position)
-  (fset 'gnus-kill-all-overlays 'gnus-xmas-kill-all-overlays)
-  (fset 'gnus-extent-detached-p 'extent-detached-p)
-  (fset 'gnus-add-text-properties 'gnus-xmas-add-text-properties)
-  (fset 'gnus-put-text-property 'gnus-xmas-put-text-property)
-  (fset 'gnus-deactivate-mark 'ignore)
-  (fset 'gnus-window-edges 'window-pixel-edges)
+    (defalias 'gnus-characterp 'characterp)))
+
+  (defalias 'gnus-make-overlay 'make-extent)
+  (defalias 'gnus-delete-overlay 'delete-extent)
+  (defalias 'gnus-overlay-put 'set-extent-property)
+  (defalias 'gnus-move-overlay 'gnus-xmas-move-overlay)
+  (defalias 'gnus-overlay-buffer 'extent-object)
+  (defalias 'gnus-overlay-start 'extent-start-position)
+  (defalias 'gnus-overlay-end 'extent-end-position)
+  (defalias 'gnus-kill-all-overlays 'gnus-xmas-kill-all-overlays)
+  (defalias 'gnus-extent-detached-p 'extent-detached-p)
+  (defalias 'gnus-add-text-properties 'gnus-xmas-add-text-properties)
+  (defalias 'gnus-put-text-property 'gnus-xmas-put-text-property)
+  (defalias 'gnus-deactivate-mark 'ignore)
+  (defalias 'gnus-window-edges 'window-pixel-edges)
 
   (if (and (<= emacs-major-version 19)
           (< emacs-minor-version 14))
-      (fset 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
+      (defalias 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
 
   (when (fboundp 'turn-off-scroll-in-place)
     (add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place))
@@ -443,34 +447,34 @@ call it with the value of the `gnus-data' text property."
          (list 'funcall fval)
        (cons 'progn (cdr (cdr fval))))))
 
-  (fset 'gnus-x-color-values
-       (if (fboundp 'x-color-values)
-           'x-color-values
-         (lambda (color)
-           (color-instance-rgb-components
-            (make-color-instance color))))))
+  (defalias 'gnus-x-color-values
+    (if (fboundp 'x-color-values)
+       'x-color-values
+      (lambda (color)
+       (color-instance-rgb-components
+        (make-color-instance color))))))
 
 (defun gnus-xmas-redefine ()
   "Redefine lots of Gnus functions for XEmacs."
-  (fset 'gnus-summary-set-display-table 'gnus-xmas-summary-set-display-table)
-  (fset 'gnus-visual-turn-off-edit-menu 'identity)
-  (fset 'gnus-summary-recenter 'gnus-xmas-summary-recenter)
-  (fset 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
-  (fset 'gnus-article-push-button 'gnus-xmas-article-push-button)
-  (fset 'gnus-window-top-edge 'gnus-xmas-window-top-edge)
-  (fset 'gnus-read-event-char 'gnus-xmas-read-event-char)
-  (fset 'gnus-group-startup-message 'gnus-xmas-group-startup-message)
-  (fset 'gnus-tree-minimize 'gnus-xmas-tree-minimize)
-  (fset 'gnus-appt-select-lowest-window
+  (defalias 'gnus-summary-set-display-table 'gnus-xmas-summary-set-display-table)
+  (defalias 'gnus-visual-turn-off-edit-menu 'identity)
+  (defalias 'gnus-summary-recenter 'gnus-xmas-summary-recenter)
+  (defalias 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
+  (defalias 'gnus-article-push-button 'gnus-xmas-article-push-button)
+  (defalias 'gnus-window-top-edge 'gnus-xmas-window-top-edge)
+  (defalias 'gnus-read-event-char 'gnus-xmas-read-event-char)
+  (defalias 'gnus-group-startup-message 'gnus-xmas-group-startup-message)
+  (defalias 'gnus-tree-minimize 'gnus-xmas-tree-minimize)
+  (defalias 'gnus-appt-select-lowest-window
        'gnus-xmas-appt-select-lowest-window)
-  (fset 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names)
-  (fset 'gnus-character-to-event 'character-to-event)
-  (fset 'gnus-mode-line-buffer-identification
+  (defalias 'gnus-mail-strip-quoted-names 'gnus-xmas-mail-strip-quoted-names)
+  (defalias 'gnus-character-to-event 'character-to-event)
+  (defalias 'gnus-mode-line-buffer-identification
        'gnus-xmas-mode-line-buffer-identification)
-  (fset 'gnus-key-press-event-p 'key-press-event-p)
-  (fset 'gnus-region-active-p 'region-active-p)
-  (fset 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
-  (fset 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
+  (defalias 'gnus-key-press-event-p 'key-press-event-p)
+  (defalias 'gnus-region-active-p 'region-active-p)
+  (defalias 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
+  (defalias 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
 
   (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
   (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
@@ -572,34 +576,6 @@ the resulting string may be narrower than END-COLUMN.
               (concat (make-string
                        (max 0 (- ,pad (string-width val))) ?\ )
                       val))))))
-
-    (defun gnus-tilde-max-form (el max-width)
-      "Return a form that limits EL to MAX-WIDTH."
-      (let ((max (abs max-width)))
-       (if (symbolp el)
-           (if (< max-width 0)
-               `(let ((width (string-width ,el)))
-                  (gnus-truncate-string ,el width (- width ,max)))
-             `(gnus-truncate-string ,el ,max))
-         (if (< max-width 0)
-             `(let* ((val (eval ,el))
-                     (width (string-width val)))
-                (gnus-truncate-string val width (- width ,max)))
-           `(let ((val (eval ,el)))
-              (gnus-truncate-string val ,max))))))
-
-    (defun gnus-tilde-cut-form (el cut-width)
-      "Return a form that cuts CUT-WIDTH off of EL."
-      (let ((cut (abs cut-width)))
-       (if (symbolp el)
-           (if (< cut-width 0)
-               `(gnus-truncate-string ,el (- (string-width ,el) ,cut))
-             `(gnus-truncate-string ,el (string-width ,el) ,cut))
-         (if (< cut-width 0)
-             `(let ((val (eval ,el)))
-                (gnus-truncate-string val (- (string-width val) ,cut)))
-           `(let ((val (eval ,el)))
-              (gnus-truncate-string val (string-width val) ,cut))))))
     ))
 
 ;;; XEmacs logo and toolbar.
@@ -645,10 +621,11 @@ the resulting string may be narrower than END-COLUMN.
                (concat " (r" gnus-revision-number ")"))
              " based on " gnus-original-product-name " v"
              gnus-original-version-number "\n")
-      (goto-char (point-min))
-      (put-text-property (point) (gnus-point-at-eol) 'face 'gnus-splash-face)
-      (insert-char ?\ ; space
-                  (max 0 (/ (- (window-width) (gnus-point-at-eol)) 2)))
+      (end-of-line 0)
+      (put-text-property (point-min) (point) 'face 'gnus-splash-face)
+      (insert-char ?\  (prog1
+                          (max 0 (/ (- (window-width) (point)) 2))
+                        (goto-char (point-min))))
       (forward-line 1)
       (insert-char ?\n rest)
       (set-window-start (selected-window) (point-min))))
@@ -681,9 +658,9 @@ the resulting string may be narrower than END-COLUMN.
              (concat " (r" gnus-revision-number ")"))
            " based on " gnus-original-product-name " v"
            gnus-original-version-number)
-    (goto-char (point-min))
-    (insert-char ?\ ; space
-                (max 0 (/ (- (window-width) (gnus-point-at-eol)) 2)))
+    (insert-char ?\  (prog1
+                        (max 0 (/ (- (window-width) (point)) 2))
+                      (goto-char (point-min))))
     (forward-line 1)
     ;; And then hack it.
     (gnus-indent-rigidly (point) (point-max)
@@ -762,8 +739,7 @@ If it is non-nil, it must be a toolbar.  The five valid values are
      gnus-summary-catchup t "Catchup"]
     [gnus-summary-catchup-and-exit
      gnus-summary-catchup-and-exit t "Catchup and exit"]
-    [gnus-summary-exit gnus-summary-exit t "Exit this summary"]
-    )
+    [gnus-summary-exit gnus-summary-exit t "Exit this summary"])
   "The summary buffer toolbar.")
 
 (defvar gnus-summary-mail-toolbar
@@ -773,14 +749,10 @@ If it is non-nil, it must be a toolbar.  The five valid values are
     [gnus-summary-next-unread
      gnus-summary-next-unread-article t "Next unread article"]
     [gnus-summary-mail-reply gnus-summary-reply t "Reply"]
-;    [gnus-summary-mail-get gnus-mail-get t "Message get"]
     [gnus-summary-mail-originate gnus-summary-post-news t "Originate"]
     [gnus-summary-mail-save gnus-summary-save-article t "Save"]
     [gnus-summary-mail-copy gnus-summary-copy-article t "Copy message"]
-;    [gnus-summary-mail-delete gnus-summary-delete-article t "Delete message"]
     [gnus-summary-mail-forward gnus-summary-mail-forward t "Forward message"]
-;    [gnus-summary-mail-spell gnus-mail-spell t "Spell"]
-;    [gnus-summary-mail-help gnus-mail-help  t "Message help"]
     [gnus-summary-caesar-message
      gnus-summary-caesar-message t "Rot 13"]
     [gnus-uu-decode-uu
@@ -793,8 +765,7 @@ If it is non-nil, it must be a toolbar.  The five valid values are
      gnus-summary-catchup t "Catchup"]
     [gnus-summary-catchup-and-exit
      gnus-summary-catchup-and-exit t "Catchup and exit"]
-    [gnus-summary-exit gnus-summary-exit t "Exit this summary"]
-    )
+    [gnus-summary-exit gnus-summary-exit t "Exit this summary"])
   "The summary buffer mail toolbar.")
 
 (defun gnus-xmas-setup-group-toolbar ()
@@ -840,7 +811,7 @@ XEmacs compatibility workaround."
             (let ((cur (current-buffer)))
               (save-excursion
                 (gnus-set-work-buffer)
-                (insert (format "%s" (buffer-substring beg end cur)))
+                (insert-buffer-substring cur beg end)
                 (gnus-xmas-call-region "uncompface")
                 (goto-char (point-min))
                 (insert "/* Width=48, Height=48 */\n")
@@ -927,6 +898,80 @@ XEmacs compatibility workaround."
     (goto-char (event-point event))
     (funcall (event-function response) (event-object response))))
 
+(defun gnus-group-add-icon ()
+  "Add an icon to the current line according to `gnus-group-icon-list'."
+  (let* ((p (point))
+        (end (progn (end-of-line) (point)))
+        ;; now find out where the line starts and leave point there.
+        (beg (progn (beginning-of-line) (point))))
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char beg)
+      (when (search-forward "==&&==" nil t)
+       (let* ((group (gnus-group-group-name))
+              (entry (gnus-group-entry group))
+              (unread (if (numberp (car entry)) (car entry) 0))
+              (active (gnus-active group))
+              (total (if active (1+ (- (cdr active) (car active))) 0))
+              (info (nth 2 entry))
+              (method (gnus-server-get-method group (gnus-info-method info)))
+              (marked (gnus-info-marks info))
+              (mailp (memq 'mail (assoc (symbol-name
+                                         (car (or method gnus-select-method)))
+                                        gnus-valid-select-methods)))
+              (level (or (gnus-info-level info) gnus-level-killed))
+              (score (or (gnus-info-score info) 0))
+              (ticked (gnus-range-length (cdr (assq 'tick marked))))
+              (group-age (gnus-group-timestamp-delta group))
+              (inhibit-read-only t)
+              (list gnus-group-icon-list)
+              (mystart (match-beginning 0))
+              (myend (match-end 0)))
+         (goto-char (point-min))
+         (while (and list
+                     (not (eval (caar list))))
+           (setq list (cdr list)))
+         (if list
+             (let* ((file (cdar list))
+                    (glyph (gnus-group-icon-create-glyph
+                            (buffer-substring mystart myend)
+                            file)))
+               (if glyph
+                   (progn
+                     (mapcar 'delete-annotation (annotations-at myend))
+                     (let ((ext (make-extent mystart myend))
+                           (ant (make-annotation glyph myend 'text)))
+                       ;; set text extent params
+                       (set-extent-property ext 'end-open t)
+                       (set-extent-property ext 'start-open t)
+                       (set-extent-property ext 'invisible t)))
+                 (delete-region mystart myend)))
+           (delete-region mystart myend))))
+      (widen))
+    (goto-char p)))
+
+(defun gnus-group-icon-create-glyph (substring pixmap)
+  "Create a glyph for insertion into a group line."
+  (or
+   (cdr-safe (assoc pixmap gnus-group-icon-cache))
+   (let* ((glyph (make-glyph
+                 (list
+                  (cons 'x
+                        (expand-file-name pixmap gnus-xmas-glyph-directory))
+                  (cons 'mswindows
+                        (expand-file-name pixmap gnus-xmas-glyph-directory))
+                  (cons 'tty substring)))))
+     (setq gnus-group-icon-cache
+          (cons (cons pixmap glyph) gnus-group-icon-cache))
+     (set-glyph-face glyph 'default)
+     glyph)))
+
+(defun gnus-xmas-mailing-list-menu-add ()
+  (gnus-xmas-menu-add mailing-list
+                     gnus-mailing-list-menu))
+
+(add-hook 'gnus-mailing-list-mode-hook 'gnus-xmas-mailing-list-menu-add)
+
 (provide 'gnus-xmas)
 
 ;;; gnus-xmas.el ends here
index 5a648ba..4f320a9 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
+;;        1997, 1998, 2000 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
 
-(require 'custom)
-(eval-and-compile
-  (if (< emacs-major-version 20)
-      (require 'gnus-load)))
-(require 'message)
+(require 'gnus-vers)
 
 (defgroup gnus nil
   "The coffee-brewing, all singing, all dancing, kitchen sink newsreader."
@@ -262,29 +259,6 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-product-name "T-gnus"
-  "Product name of this version of gnus.")
-
-(defconst gnus-version-number "6.13.4"
-  "Version number for this version of gnus.")
-
-(defconst gnus-revision-number "01"
-  "Revision number for this version of gnus.")
-
-(defconst gnus-original-version-number "0.99"
-  "Version number for this version of Gnus.")
-
-(provide 'running-pterodactyl-gnus-0_73-or-later)
-
-(defconst gnus-original-product-name "Pterodactyl Gnus"
-  "Product name of the original version of Gnus.")
-
-(defconst gnus-version
-  (format "%s %s r%s (based on %s v%s ; for SEMI 1.13, FLIM 1.13)"
-         gnus-product-name gnus-version-number gnus-revision-number
-         gnus-original-product-name gnus-original-version-number)
-  "Version string for this version of gnus.")
-
 (defcustom gnus-inhibit-startup-message nil
   "If non-nil, the startup message will not be displayed.
 This variable is used before `.gnus.el' is loaded, so it should
@@ -297,27 +271,55 @@ be set in `.emacs' instead."
   :group 'gnus-start
   :type 'boolean)
 
+(unless (fboundp 'gnus-group-remove-excess-properties)
+  (defalias 'gnus-group-remove-excess-properties 'ignore))
+
+(unless (fboundp 'gnus-set-text-properties)
+  (defalias 'gnus-set-text-properties 'set-text-properties))
+
 (unless (featurep 'gnus-xmas)
   (defalias 'gnus-make-overlay 'make-overlay)
   (defalias 'gnus-delete-overlay 'delete-overlay)
   (defalias 'gnus-overlay-put 'overlay-put)
   (defalias 'gnus-move-overlay 'move-overlay)
+  (defalias 'gnus-overlay-buffer 'overlay-buffer)
+  (defalias 'gnus-overlay-start 'overlay-start)
   (defalias 'gnus-overlay-end 'overlay-end)
   (defalias 'gnus-extent-detached-p 'ignore)
   (defalias 'gnus-extent-start-open 'ignore)
-  (defalias 'gnus-set-text-properties 'set-text-properties)
-  (defalias 'gnus-group-remove-excess-properties 'ignore)
   (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
   (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
   (defalias 'gnus-character-to-event 'identity)
   (defalias 'gnus-add-text-properties 'add-text-properties)
   (defalias 'gnus-put-text-property 'put-text-property)
-  (defalias 'gnus-mode-line-buffer-identification 'identity)
+  (defvar gnus-mode-line-image-cache t)
+  (if (fboundp 'find-image)
+      (defun gnus-mode-line-buffer-identification (line)
+       (let ((str (car-safe line)))
+         (if (and (stringp str)
+                  (string-match "^Gnus:" str))
+             (progn (add-text-properties
+                     0 5
+                     (list 'display
+                           (if (eq t gnus-mode-line-image-cache)
+                               (setq gnus-mode-line-image-cache
+                                     (find-image
+                                      '((:type xpm :file "gnus-pointer.xpm"
+                                               :ascent 80)
+                                        (:type xbm :file "gnus-pointer.xbm"
+                                               :ascent 80))))
+                             gnus-mode-line-image-cache)
+                           'help-echo "This is Gnus")
+                     str)
+                    (list str))
+           line)))
+    (defalias 'gnus-mode-line-buffer-identification 'identity))
   (defalias 'gnus-characterp 'numberp)
   (defalias 'gnus-deactivate-mark 'deactivate-mark)
   (defalias 'gnus-window-edges 'window-edges)
   (defalias 'gnus-key-press-event-p 'numberp)
-  (defalias 'gnus-decode-rfc1522 'ignore))
+  ;;(defalias 'gnus-decode-rfc1522 'ignore)
+  )
 
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
@@ -774,7 +776,43 @@ be set in `.emacs' instead."
   "Insert startup message in current buffer."
   ;; Insert the message.
   (erase-buffer)
-  (insert "
+  (cond
+   ((and (fboundp 'find-image)
+        (display-graphic-p)
+        (let* ((bg (face-background 'default))
+               (fg (face-foreground 'gnus-splash-face))
+               (image (find-image
+                       `((:type xpm :file "gnus.xpm"
+                                :color-symbols (("thing" . "#724214")
+                                                ("shadow" . "#1e3f03")
+                                                ("background" . ,bg)))
+                         (:type xbm :file "gnus.xbm"
+                                :background ,bg :foreground ,fg)))))
+          (when image
+            (insert
+             (propertize
+              (concat gnus-product-name " " gnus-version-number
+                      (if (zerop (string-to-number gnus-revision-number))
+                          ""
+                        (concat " (r" gnus-revision-number ")"))
+                      " based on " gnus-original-product-name " v"
+                      gnus-original-version-number)
+              'face `(variable-pitch :background ,bg :foreground ,fg)))
+            (let ((fill-column (window-width)))
+              (center-region (point-min) (point)))
+            (let ((size (image-size image)))
+              (insert-char ?\n (max 1 (round (- (window-height)
+                                                (or y (cdr size))) 2)))
+              (insert
+               (propertize " " 'display
+                           `(space :align-to
+                                   ,(max 0 (round (- (window-width)
+                                                     (or x (car size))) 2)))))
+              (insert-image image))
+            (setq gnus-simple-splash nil)
+            t))))
+   (t
+    (insert "
           _    ___ _             _
           _ ___ __ ___  __    _ ___
           __   _     ___    __  ___
@@ -794,32 +832,32 @@ be set in `.emacs' instead."
           __
 
 "
-         )
-  (goto-char (point-min))
-  (insert gnus-product-name " " gnus-version-number
-         (if (zerop (string-to-number gnus-revision-number))
-             ""
-           (concat " (r" gnus-revision-number ")"))
-         " based on " gnus-original-product-name " v"
-         gnus-original-version-number)
-  (goto-char (point-min))
-  (insert-char ?\ ; space
-              (max 0 (/ (- (window-width) (gnus-point-at-eol)) 2)))
-  (forward-line 1)
-  ;; And then hack it.
-  (gnus-indent-rigidly (point) (point-max)
-                      (/ (max (- (window-width) (or x 46)) 0) 2))
-  (goto-char (point-min))
-  (forward-line 1)
-  (let* ((pheight (count-lines (point-min) (point-max)))
-        (wheight (window-height))
-        (rest (- wheight pheight)))
-    (insert (make-string (max 0 (* 2 (/ rest 3))) ?\n)))
-  ;; Fontify some.
-  (put-text-property (point-min) (point-max) 'face 'gnus-splash-face)
+           )
+    (goto-char (point-min))
+    (insert gnus-product-name " " gnus-version-number
+           (if (zerop (string-to-number gnus-revision-number))
+               ""
+             (concat " (r" gnus-revision-number ")"))
+           " based on " gnus-original-product-name " v"
+           gnus-original-version-number)
+    (insert-char ?\  (prog1
+                        (max 0 (/ (- (window-width) (point)) 2))
+                      (goto-char (point-min))))
+    (forward-line 1)
+    ;; And then hack it.
+    (gnus-indent-rigidly (point) (point-max)
+                        (/ (max (- (window-width) (or x 46)) 0) 2))
+    (goto-char (point-min))
+    (forward-line 1)
+    (let* ((pheight (count-lines (point-min) (point-max)))
+          (wheight (window-height))
+          (rest (- wheight pheight)))
+      (insert (make-string (max 0 (* 2 (/ rest 3))) ?\n)))
+    ;; Fontify some.
+    (put-text-property (point-min) (point-max) 'face 'gnus-splash-face)
+    (setq gnus-simple-splash t)))
   (goto-char (point-min))
   (setq mode-line-buffer-identification (concat " " gnus-version))
-  (setq gnus-simple-splash t)
   (set-buffer-modified-p t))
 
 (eval-when (load)
@@ -831,7 +869,6 @@ be set in `.emacs' instead."
 
 ;;; Do the rest.
 
-(require 'custom)
 (require 'gnus-util)
 (require 'nnheader)
 
@@ -914,7 +951,7 @@ used to 899, you would say something along these lines:
           nil
         (list gnus-nntp-service)))
     (error nil))
-  "*Default method for selecting a newsgroup.
+  "Default method for selecting a newsgroup.
 This variable should be a list, where the first element is how the
 news is to be fetched, the second is the address.
 
@@ -935,17 +972,20 @@ see the manual for details."
   :type 'gnus-select-method)
 
 (defcustom gnus-message-archive-method
-  `(nnfolder
-    "archive"
-    (nnfolder-directory ,(nnheader-concat message-directory "archive"))
-    (nnfolder-active-file
-     ,(nnheader-concat message-directory "archive/active"))
-    (nnfolder-get-new-mail nil)
-    (nnfolder-inhibit-expiry t))
+  (progn
+    ;; Don't require it at top level to avoid circularity.
+    (require 'message)
+    `(nnfolder
+      "archive"
+      (nnfolder-directory ,(nnheader-concat message-directory "archive"))
+      (nnfolder-active-file
+       ,(nnheader-concat message-directory "archive/active"))
+      (nnfolder-get-new-mail nil)
+      (nnfolder-inhibit-expiry t)))
   "*Method used for archiving messages you've sent.
 This should be a mail method.
 
-It's probably not a very effective to change this variable once you've
+It's probably not very effective to change this variable once you've
 run Gnus once.  After doing that, you must edit this server from the
 server buffer."
   :group 'gnus-server
@@ -1002,8 +1042,8 @@ If, for instance, you want to read your mail with the nnml backend,
 you could set this variable:
 
 \(setq gnus-secondary-select-methods '((nnml \"\")))"
-:group 'gnus-server
-:type '(repeat gnus-select-method))
+  :group 'gnus-server
+  :type '(repeat gnus-select-method))
 
 (defvar gnus-backup-default-subscribed-newsgroups
   '("news.announce.newusers" "news.groups.questions" "gnu.emacs.gnus")
@@ -1041,12 +1081,12 @@ list, Gnus will try all the methods in the list until it finds a match."
   :type '(choice (const :tag "default" nil)
                 (const :tag "DejaNews" (nnweb "refer" (nnweb-type dejanews)))
                 gnus-select-method
-                (repeat :menu-tag "Try multiple" 
+                (repeat :menu-tag "Try multiple"
                         :tag "Multiple"
                         :value (current (nnweb "refer" (nnweb-type dejanews)))
                         (choice :tag "Method"
                                 (const current)
-                                (const :tag "DejaNews" 
+                                (const :tag "DejaNews"
                                        (nnweb "refer" (nnweb-type dejanews)))
                                 gnus-select-method))))
 
@@ -1107,11 +1147,6 @@ newsgroups."
   :group 'gnus-summary-marks
   :type 'character)
 
-(defcustom gnus-asynchronous nil
-  "*If non-nil, Gnus will supply backends with data needed for async article fetching."
-  :group 'gnus-asynchronous
-  :type 'boolean)
-
 (defcustom gnus-large-newsgroup 200
   "*The number of articles which indicates a large newsgroup.
 If the number of articles in a newsgroup is greater than this value,
@@ -1285,6 +1320,7 @@ slower."
     ("nnweb" none)
     ("nnslashdot" post)
     ("nnultimate" none)
+    ("nnwfm" none)
     ("nnwarchive" none)
     ("nnlistserv" none)
     ("nnagent" post-mail)
@@ -1309,20 +1345,27 @@ this variable.  I think."
                                   (const :format "%v " virtual)
                                   (const respool)))))
 
-(define-widget 'gnus-select-method 'list
-  "Widget for entering a select method."
-  :value '(nntp "")
-  :tag "Select Method"
-  :args `((choice :tag "Method"
-                 ,@(mapcar (lambda (entry)
-                             (list 'const :format "%v\n"
-                                   (intern (car entry))))
-                           gnus-valid-select-methods))
-         (string :tag "Address")
-         (editable-list  :inline t
-                         (list :format "%v"
-                               variable
-                               (sexp :tag "Value")))))
+(defun gnus-redefine-select-method-widget ()
+  "Recomputes the select-method widget based on the value of
+`gnus-valid-select-methods'."
+  (define-widget 'gnus-select-method 'list
+    "Widget for entering a select method."
+    :value '(nntp "")
+    :tag "Select Method"
+    :args `((choice :tag "Method"
+                   ,@(mapcar (lambda (entry)
+                               (list 'const :format "%v\n"
+                                     (intern (car entry))))
+                             gnus-valid-select-methods)
+                   (symbol :tag "other"))
+           (string :tag "Address")
+           (repeat :tag "Options"
+                   :inline t
+                   (list :format "%v"
+                         variable
+                         (sexp :tag "Value"))))))
+
+(gnus-redefine-select-method-widget)
 
 (defcustom gnus-updated-mode-lines '(group article summary tree)
   "List of buffers that should update their mode lines.
@@ -1495,6 +1538,7 @@ If nil, no default charset is assumed when posting."
 \f
 ;;; Internal variables
 
+(defvar gnus-agent-gcc-header "X-Gnus-Agent-Gcc")
 (defvar gnus-agent-meta-information-header "X-Gnus-Agent-Meta-Information")
 (defvar gnus-group-get-parameter-function 'gnus-group-get-parameter)
 (defvar gnus-original-article-buffer " *Original Article*")
@@ -1504,6 +1548,9 @@ If nil, no default charset is assumed when posting."
 (defvar gnus-agent nil
   "Whether we want to use the Gnus agent or not.")
 
+(defvar gnus-agent-fetching nil
+  "Whether Gnus agent is in fetching mode.")
+
 (defvar gnus-command-method nil
   "Dynamically bound variable that says what the current backend is.")
 
@@ -1564,7 +1611,7 @@ If nil, no default charset is assumed when posting."
 (defvar gnus-have-read-active-file nil)
 
 (defconst gnus-maintainer
-  "semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp (T-gnus Bugfixing Girls + Boys)"
+  "semi-gnus-ja@meadowy.org (T-gnus Bugfixing Girls + Boys)"
   "The mail address of the T-gnus maintainers.")
 
 (defcustom gnus-info-filename nil
@@ -1599,13 +1646,30 @@ This variable can be nil, gnus or gnus-ja."
 
 (defvar gnus-variable-list
   '(gnus-newsrc-options gnus-newsrc-options-n
-    gnus-newsrc-last-checked-date
-    gnus-newsrc-alist gnus-server-alist
-    gnus-killed-list gnus-zombie-list
-    gnus-topic-topology gnus-topic-alist
-    gnus-format-specs)
+                       gnus-newsrc-last-checked-date
+                       gnus-newsrc-alist gnus-server-alist
+                       gnus-killed-list gnus-zombie-list
+                       gnus-topic-topology gnus-topic-alist)
   "Gnus variables saved in the quick startup file.")
 
+(defvar gnus-product-variable-file-list
+  (let ((version (product-version (product-find 'gnus-vers)))
+       (codesys (static-if (boundp 'MULE) '*ctext* 'ctext)))
+    `(("strict-cache" ((product-version ,version) (emacs-version))
+       binary
+       gnus-format-specs-compiled)
+      ("cache" ((product-version ,version) (emacs-version))
+       ,codesys
+       gnus-format-specs)))
+  "Gnus variables are saved in the produce depend quick startup files.")
+
+(defcustom gnus-compile-user-specs t
+  "If non-nil, the user-defined format specs will be byte-compiled
+automatically.
+It has an effect on the values of `gnus-*-line-format-spec'."
+  :group 'gnus
+  :type 'boolean)
+
 (defvar gnus-newsrc-alist nil
   "Assoc list of read articles.
 gnus-newsrc-hashtb should be kept so that both hold the same information.")
@@ -1644,10 +1708,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
 
 (defvar gnus-dead-summary nil)
 
-(defvar gnus-article-display-hook nil
-  "Controls how the article buffer will look.  This is an obsolete variable;
-use the article treating faculties instead.  Is is described in Info node
-`Customizing Articles'.")
+(defvar gnus-invalid-group-regexp "[: `'\"/]\\|^$"
+  "Regexp matching invalid groups.")
 
 ;;; End of variables.
 
@@ -1665,15 +1727,15 @@ use the article treating faculties instead.  Is is described in Info node
            (when (consp function)
              (setq keymap (car (memq 'keymap function)))
              (setq function (car function)))
-           (autoload function (car package) nil interactive keymap)))
+           (unless (fboundp function)
+             (autoload function (car package) nil interactive keymap))))
        (if (eq (nth 1 package) ':interactive)
-           (cdddr package)
+           (nthcdr 3 package)
          (cdr package)))))
-   '(("info" Info-goto-node)
+   '(("info" :interactive t Info-goto-node)
      ("pp" pp pp-to-string pp-eval-expression)
      ("ps-print" ps-print-preprint)
-     ("mail-extr" mail-extract-address-components)
-     ("browse-url" browse-url)
+     ("browse-url" :interactive t browse-url)
      ("message" :interactive t
       message-send-and-exit message-yank-original)
      ("babel" babel-as-string)
@@ -1717,21 +1779,22 @@ use the article treating faculties instead.  Is is described in Info node
       gnus-cache-possibly-remove-articles gnus-cache-request-article
       gnus-cache-retrieve-headers gnus-cache-possibly-alter-active
       gnus-cache-enter-remove-article gnus-cached-article-p
-      gnus-cache-open gnus-cache-close gnus-cache-update-article)
-      ("gnus-cache" :interactive t gnus-jog-cache gnus-cache-enter-article
-       gnus-cache-remove-article gnus-summary-insert-cached-articles)
-      ("gnus-score" :interactive t
-       gnus-summary-increase-score gnus-summary-set-score
-       gnus-summary-raise-thread gnus-summary-raise-same-subject
-       gnus-summary-raise-score gnus-summary-raise-same-subject-and-select
-       gnus-summary-lower-thread gnus-summary-lower-same-subject
-       gnus-summary-lower-score gnus-summary-lower-same-subject-and-select
-       gnus-summary-current-score gnus-score-default
-       gnus-score-flush-cache gnus-score-close
-       gnus-possibly-score-headers gnus-score-followup-article
-       gnus-score-followup-thread)
-      ("gnus-score"
-       (gnus-summary-score-map keymap) gnus-score-save gnus-score-headers
+      gnus-cache-open gnus-cache-close gnus-cache-update-article
+      gnus-cache-articles-in-group)
+     ("gnus-cache" :interactive t gnus-jog-cache gnus-cache-enter-article
+      gnus-cache-remove-article gnus-summary-insert-cached-articles)
+     ("gnus-score" :interactive t
+      gnus-summary-increase-score gnus-summary-set-score
+      gnus-summary-raise-thread gnus-summary-raise-same-subject
+      gnus-summary-raise-score gnus-summary-raise-same-subject-and-select
+      gnus-summary-lower-thread gnus-summary-lower-same-subject
+      gnus-summary-lower-score gnus-summary-lower-same-subject-and-select
+      gnus-summary-current-score gnus-score-delta-default
+      gnus-score-flush-cache gnus-score-close
+      gnus-possibly-score-headers gnus-score-followup-article
+      gnus-score-followup-thread)
+     ("gnus-score"
+      (gnus-summary-score-map keymap) gnus-score-save gnus-score-headers
       gnus-current-score-file-nondirectory gnus-score-adaptive
       gnus-score-find-trace gnus-score-file-name)
      ("gnus-cus" :interactive t gnus-custom-mode gnus-group-customize
@@ -1756,8 +1819,7 @@ use the article treating faculties instead.  Is is described in Info node
      ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh
       gnus-uu-unmark-thread)
      ("gnus-msg" (gnus-summary-send-map keymap)
-      gnus-article-mail gnus-copy-article-buffer gnus-extended-version
-      gnus-following-method)
+      gnus-article-mail gnus-copy-article-buffer gnus-following-method)
      ("gnus-msg" :interactive t
       gnus-group-post-news gnus-group-mail gnus-summary-post-news
       gnus-summary-followup gnus-summary-followup-with-original
@@ -1767,9 +1829,8 @@ use the article treating faculties instead.  Is is described in Info node
       gnus-summary-resend-message gnus-summary-resend-bounced-mail
       gnus-summary-wide-reply gnus-summary-followup-to-mail
       gnus-summary-followup-to-mail-with-original gnus-bug
-      gnus-summary-wide-reply-with-original
-      gnus-summary-post-forward gnus-summary-wide-reply-with-original
-      gnus-summary-post-forward)
+      gnus-summary-wide-reply-with-original gnus-summary-post-forward
+      gnus-summary-digest-mail-forward gnus-summary-digest-post-forward)
      ("gnus-picon" :interactive t gnus-article-display-picons
       gnus-group-display-picons)
      ("gnus-picon" gnus-picons-buffer-name)
@@ -1799,9 +1860,11 @@ use the article treating faculties instead.  Is is described in Info node
       gnus-article-delete-invisible-text gnus-treat-article)
      ("gnus-art" :interactive t
       gnus-article-hide-headers gnus-article-hide-boring-headers
-      gnus-article-treat-overstrike 
+      gnus-article-treat-overstrike
       gnus-article-remove-cr gnus-article-remove-trailing-blank-lines
       gnus-article-display-x-face
+      gnus-article-decode-HZ
+      gnus-article-wash-html
       gnus-article-hide-pgp
       gnus-article-hide-pem gnus-article-hide-signature
       gnus-article-strip-leading-blank-lines gnus-article-date-local
@@ -1854,8 +1917,11 @@ use the article treating faculties instead.  Is is described in Info node
 
 (eval-and-compile
   (unless (featurep 'xemacs)
-    (autoload 'gnus-smiley-display "gnus-bitmap")
-    (autoload 'x-face-mule-gnus-article-display-x-face "x-face-mule")))
+    (if (>= emacs-major-version 21)
+       (autoload 'x-face-decode-message-header "x-face-e21")
+      (autoload 'gnus-smiley-display "gnus-bitmap" nil t)
+      (autoload 'smiley-toggle-buffer "gnus-bitmap")
+      (autoload 'x-face-mule-gnus-article-display-x-face "x-face-mule"))))
 
 ;;; gnus-sum.el thingies
 
@@ -2103,42 +2169,6 @@ STRINGS will be evaluated in normal `or' order."
        (setq strings nil)))
     string))
 
-(defun gnus-version (&optional arg)
-  "Version number of this version of Gnus.
-If ARG, insert string at point."
-  (interactive "P")
-  (if arg
-      (insert (message gnus-version))
-    (message gnus-version)))
-
-(defun gnus-continuum-version (version)
-  "Return VERSION as a floating point number."
-  (when (or (string-match "^\\([^ ]+\\)? ?Gnus v?\\([0-9.]+\\)$" version)
-           (string-match "^\\(.?\\)gnus-\\([0-9.]+\\)$" version))
-    (let ((alpha (and (match-beginning 1) (match-string 1 version)))
-         (number (match-string 2 version))
-         major minor least)
-      (unless (string-match
-              "\\([0-9]\\)\\.\\([0-9]+\\)\\.?\\([0-9]+\\)?" number)
-       (error "Invalid version string: %s" version))
-      (setq major (string-to-number (match-string 1 number))
-           minor (string-to-number (match-string 2 number))
-           least (if (match-beginning 3)
-                     (string-to-number (match-string 3 number))
-                   0))
-      (string-to-number
-       (if (zerop major)
-          (format "%s00%02d%02d"
-                  (if (member alpha '("(ding)" "d"))
-                      "4.99"
-                    (+ 5 (* 0.02
-                            (abs
-                             (- (char-int (aref (downcase alpha) 0))
-                                (char-int ?t))))
-                       -0.01))
-                  minor least)
-        (format "%d.%02d%02d" major minor least))))))
-
 (defun gnus-info-find-node ()
   "Find Info documentation of Gnus."
   (interactive)
@@ -2149,7 +2179,9 @@ If ARG, insert string at point."
             (or gnus-info-filename
                 (get-language-info current-language-environment 'gnus-info)
                 "gnus")
-            (cadr (assq major-mode gnus-info-nodes))))
+            (or (cadr (assq major-mode gnus-info-nodes))
+                (and (eq (current-buffer) (get-buffer gnus-article-buffer))
+                     (cadr (assq 'gnus-article-mode gnus-info-nodes))))))
     (setq gnus-info-buffer (current-buffer))
     (gnus-configure-windows 'info)))
 
@@ -2250,8 +2282,8 @@ g -- Group name."
        out)
       (cond
        ((= c ?r)
-       (push (if (< (point) (mark) (point) (mark))) out)
-       (push (if (> (point) (mark) (point) (mark))) out))))
+       (push (if (< (point) (mark)) (point) (mark)) out)
+       (push (if (> (point) (mark)) (point) (mark)) out))))
     (setq out (delq 'gnus-prefix-nil out))
     (nreverse out)))
 
@@ -2324,7 +2356,14 @@ that that variable is buffer-local to the summary buffers."
   "Return non-nil if GROUP (and ARTICLE) come from a news server."
   (or (gnus-member-of-valid 'post group) ; Ordinary news group.
       (and (gnus-member-of-valid 'post-mail group) ; Combined group.
-          (eq (gnus-request-type group article) 'news))))
+          (if (or (null article)
+                  (not (< article 0)))
+              (eq (gnus-request-type group article) 'news)
+            (if (not (vectorp article))
+                nil
+              ;; It's a real article.
+              (eq (gnus-request-type group (mail-header-id article))
+                  'news))))))
 
 ;; Returns a list of writable groups.
 (defun gnus-writable-groups ()
@@ -2540,9 +2579,9 @@ You should probably use `gnus-find-method-for-group' instead."
   (let ((methods gnus-secondary-select-methods)
        (gmethod (gnus-server-get-method nil method)))
     (while (and methods
-               (not (gnus-method-equal
-                     (gnus-server-get-method nil (car methods))
-                     gmethod)))
+               (not (gnus-method-equal
+                     (gnus-server-get-method nil (car methods))
+                     gmethod)))
       (setq methods (cdr methods)))
     methods))
 
@@ -2686,9 +2725,21 @@ just the host name."
                group (substring group (+ 1 colon))))
        (setq foreign (concat foreign ":")))
       ;; Collapse group name leaving LEVELS uncollapsed elements
-      (let* ((glist (split-string group "\\."))
-            (glen (length glist))
+      (let* ((slist (split-string group "/"))
+            (slen (length slist))
+            (dlist (split-string group "\\."))
+            (dlen (length dlist))
+            glist
+            glen
+            gsep
             res)
+       (if (> slen dlen)
+           (setq glist slist
+                 glen slen
+                 gsep "/")
+         (setq glist dlist
+               glen dlen
+               gsep "."))
        (setq levels (- glen levels))
        (dolist (g glist)
          (push (if (>= (decf levels) 0)
@@ -2697,7 +2748,7 @@ just the host name."
                      (substring g 0 1))
                  g)
                res))
-       (concat foreign (mapconcat 'identity (nreverse res) "."))))))
+       (concat foreign (mapconcat 'identity (nreverse res) gsep))))))
 
 (defun gnus-narrow-to-body ()
   "Narrow to the body of an article."
@@ -2775,7 +2826,7 @@ If NEWSGROUP is nil, return the global kill file name instead."
   (let ((opened gnus-opened-servers))
     (while (and method opened)
       (when (and (equal (cadr method) (cadaar opened))
-                (equal (car method) (caaar opened))
+                (equal (car method) (caaar opened))
                 (not (equal method (caar opened))))
        (setq method nil))
       (pop opened))
@@ -2812,6 +2863,8 @@ If NEWSGROUP is nil, return the global kill file name instead."
   (or gnus-override-method
       (and (not group)
           gnus-select-method)
+      (and (not (gnus-group-entry group));; a new group
+          (gnus-group-name-to-method group))
       (let ((info (or info (gnus-get-info group)))
            method)
        (if (or (not info)
@@ -2848,8 +2901,8 @@ Disallow invalid group names."
   (let ((prefix "")
        group)
     (while (not group)
-      (when (string-match
-            "[: `'\"/]\\|^$"
+      (when (string-match 
+            gnus-invalid-group-regexp
             (setq group (read-string (concat prefix prompt)
                                      (cons (or default "") 0)
                                      'gnus-group-history)))
@@ -2882,7 +2935,7 @@ Allow completion over sensible values."
        (or (let ((opened gnus-opened-servers))
              (while (and opened
                          (not (equal (format "%s:%s" method address)
-                                     (format "%s:%s" (caaar opened) 
+                                     (format "%s:%s" (caaar opened)
                                              (cadaar opened)))))
                (pop opened))
              (caar opened))
@@ -2967,6 +3020,6 @@ prompt the user for the name of an NNTP server to use."
 
 (gnus-ems-redefine)
 
-(provide 'gnus)
+(product-provide (provide 'gnus) 'gnus-vers)
 
 ;;; gnus.el ends here
index c28c942..b39decb 100644 (file)
@@ -1,5 +1,6 @@
 ;;; ietf-drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -28,6 +29,7 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'time-date)
 (require 'mm-util)
 
       (buffer-string))))
 
 (defun ietf-drums-remove-whitespace (string)
-  "Remove comments from STRING."
+  "Remove whitespace from STRING."
   (with-temp-buffer
     (ietf-drums-init string)
     (let (c)
          (forward-char 1))))
       result)))
 
+(defun ietf-drums-strip (string)
+  "Remove comments and whitespace from STRING."
+  (ietf-drums-remove-whitespace (ietf-drums-remove-comments string)))
+
 (defun ietf-drums-parse-address (string)
   "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
   (with-temp-buffer
   "Narrow to the header section in the current buffer."
   (narrow-to-region
    (goto-char (point-min))
-   (if (re-search-forward "^\n" nil 1)
-       (1- (point))
+   (if (re-search-forward "^\r?$" nil 1)
+       (match-beginning 0)
      (point-max)))
   (goto-char (point-min)))
 
index d91e160..489fecf 100644 (file)
@@ -1,5 +1,6 @@
 ;;; imap.el --- imap library
-;; Copyright (C) 1998,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
@@ -29,7 +30,7 @@
 ;; imap.el is roughly divided in two parts, one that parses IMAP
 ;; responses from the server and storing data into buffer-local
 ;; variables, and one for utility functions which send commands to
-;; server, waits for an answer, and return information. The latter
+;; server, waits for an answer, and return information.  The latter
 ;; part is layered on top of the previous.
 ;;
 ;; The imap.el API consist of the following functions, other functions
 ;; imap-body-lines
 ;;
 ;; It is my hope that theese commands should be pretty self
-;; explanatory for someone that know IMAP. All functions have
+;; explanatory for someone that know IMAP.  All functions have
 ;; additional documentation on how to invoke them.
 ;;
 ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
 ;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
-;; (NAMESPACE), RFC2359 (UIDPLUS), and the kerberos V4 part of RFC1731
+;; (NAMESPACE), RFC2359 (UIDPLUS), the IMAP-part of RFC2595 (STARTTLS,
+;; LOGINDISABLED) (with use of external library starttls.el and
+;; program starttls) and the GSSAPI / kerberos V4 sections of RFC1731
 ;; (with use of external program `imtest').  It also take advantage
 ;; the UNSELECT extension in Cyrus IMAPD.
 ;;
 ;; Without the work of John McClary Prevost and Jim Radford this library
-;; would not have seen the light of day. Many thanks.
+;; would not have seen the light of day.  Many thanks.
 ;;
 ;; This is a transcript of short interactive session for demonstration
 ;; purposes.
@@ -88,7 +91,7 @@
 ;; => " *imap* my.mail.server:0"
 ;;
 ;; The rest are invoked with current buffer as the buffer returned by
-;; `imap-open'. It is possible to do all without this, but it would
+;; `imap-open'.  It is possible to do all without this, but it would
 ;; look ugly here since `buffer' is always the last argument for all
 ;; imap.el API functions.
 ;;
 ;; o Don't use `read' at all (important places already fixed)
 ;; o Accept list of articles instead of message set string in most
 ;;   imap-message-* functions.
-;; o Cyrus IMAPd 1.6.x `imtest' support in the imtest wrapper
-;; o Format-spec'ify the ssl horror
 ;;
 ;; Revision history:
 ;;
-;;  - this is unreleased software
+;;  - 19991218 added starttls/digest-md5 patch,
+;;             by Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+;;             NB! you need SLIM for starttls.el and digest-md5.el
+;;  - 19991023 commited to pgnus
 ;;
 
 ;;; Code:
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
 
+(require 'base64)
+
 (eval-and-compile
   (autoload 'open-ssl-stream "ssl")
   (autoload 'starttls-open-stream "starttls")
   (autoload 'starttls-negotiate "starttls")
   (autoload 'rfc2104-hash "rfc2104")
+  (autoload 'md5 "md5")
   (autoload 'utf7-encode "utf7")
   (autoload 'utf7-decode "utf7")
   (autoload 'format-spec "format-spec")
-  (autoload 'format-spec-make "format-spec"))
-
-(static-if (and (fboundp 'base64-decode-string)
-               (subrp (symbol-function 'base64-decode-string)))
-    (eval-and-compile (fset 'imap-base64-decode-string 'base64-decode-string))
-  (require 'mel)
-  (defun imap-base64-decode-string (string)
-    (fset 'imap-base64-decode-string
-         (symbol-function (mel-find-function 'mime-decode-string "base64")))
-    (imap-base64-decode-string string))
-  )
-
-(static-if (and (fboundp 'base64-encode-string)
-               (subrp (symbol-function 'base64-encode-string)))
-    (eval-and-compile (fset 'imap-base64-encode-string 'base64-encode-string))
-  (defun imap-base64-encode-string (string)
-    (fset 'imap-base64-encode-string
-         (symbol-function (mel-find-function 'mime-encode-string "base64")))
-    (imap-base64-encode-string string))
-  )
-
-(autoload 'md5 "md5")
+  (autoload 'format-spec-make "format-spec")
+  ;; Avoid use gnus-point-at-eol so we're independent of Gnus.  These
+  ;; days we have point-at-eol anyhow.
+  (if (fboundp 'point-at-eol)
+      (defalias 'imap-point-at-eol 'point-at-eol)
+    (defun imap-point-at-eol ()
+      (save-excursion
+       (end-of-line)
+       (point))))
+  (autoload 'sasl-digest-md5-digest-response "sasl"))
 
 ;; User variables.
 
-(defvar imap-imtest-program "imtest -kp %s %p"
-  "How to call program for Kerberos 4 authentication.
-%s is replaced with server and %p with port to connect to.  The
-program should accept IMAP commands on stdin and return responses to
-stdout.")
-
-(defvar imap-ssl-program 'auto
-  "Program to use for SSL connections. It is called like this
-
-`imap-ssl-program' `imap-ssl-arguments' -ssl2 -connect host:port
-
-where -ssl2 can also be -ssl3 to indicate which ssl version to use. It
-should accept IMAP commands on stdin and return responses to stdout.
-
-For SSLeay set this to \"s_client\" and `imap-ssl-arguments' to nil,
-for OpenSSL set this to \"openssl\" and `imap-ssl-arguments' to
-\"s_client\".
-
-If 'auto it tries s_client first and then openssl.")
-
-(defvar imap-ssl-arguments nil
-  "Arguments to pass to `imap-ssl-program'.
-
-For SSLeay set this to nil, for OpenSSL to \"s_client\".
-
-If `imap-ssl-program' is 'auto this variable has no effect.")
+(defgroup imap nil
+  "Low-level IMAP issues."
+  :group 'mail)
+
+(defcustom imap-kerberos4-program '("imtest -m kerberos_v4 -u %l -p %p %s"
+                                   "imtest -kp %s %p")
+  "List of strings containing commands for Kerberos 4 authentication.
+%s is replaced with server hostname, %p with port to connect to, and
+%l with the value of `imap-default-user'.  The program should accept
+IMAP commands on stdin and return responses to stdout.  Each entry in
+the list is tried until a successful connection is made."
+  :group 'imap
+  :type '(repeat string))
+
+(defcustom imap-gssapi-program '("imtest -m gssapi -u %l -p %p %s")
+  "List of strings containing commands for GSSAPI (krb5) authentication.
+%s is replaced with server hostname, %p with port to connect to, and
+%l with the value of `imap-default-user'.  The program should accept
+IMAP commands on stdin and return responses to stdout.  Each entry in
+the list is tried until a successful connection is made."
+  :group 'imap
+  :type '(repeat string))
+
+(defcustom imap-ssl-program '("openssl s_client -ssl3 -connect %s:%p"
+                             "openssl s_client -ssl2 -connect %s:%p"
+                             "s_client -ssl3 -connect %s:%p"
+                             "s_client -ssl2 -connect %s:%p")
+  "A string, or list of strings, containing commands for SSL connections.
+Within a string, %s is replaced with the server address and %p with
+port number on server.  The program should accept IMAP commands on
+stdin and return responses to stdout.  Each entry in the list is tried
+until a successful connection is made."
+  :group 'imap
+  :type '(choice string
+                (repeat string)))
+
+(defcustom imap-shell-program '("ssh %s imapd"
+                               "rsh %s imapd"
+                               "ssh %g ssh %s imapd"
+                               "rsh %g rsh %s imapd")
+  "A list of strings, containing commands for IMAP connection.
+Within a string, %s is replaced with the server address, %p with port
+number on server, %g with `imap-shell-host', and %l with
+`imap-default-user'.  The program should read IMAP commands from stdin
+and write IMAP response to stdout. Each entry in the list is tried
+until a successful connection is made."
+  :group 'imap
+  :type '(repeat string))
+
+(defvar imap-shell-host "gateway"
+  "Hostname of rlogin proxy.")
 
 (defvar imap-default-user (user-login-name)
   "Default username to use.")
@@ -206,47 +226,54 @@ If `imap-ssl-program' is 'auto this variable has no effect.")
 (defvar imap-fetch-data-hook nil
   "Hooks called after receiving each FETCH response.")
 
-(defvar imap-streams '(kerberos4 ssl network)
-  "Priority of streams to consider when opening connection to
-server.")
+(defvar imap-streams '(gssapi kerberos4 starttls ssl network shell)
+  "Priority of streams to consider when opening connection to server.")
 
 (defvar imap-stream-alist
-  '((kerberos4 imap-kerberos4s-p imap-kerberos4-open)
-    (ssl       imap-ssl-p        imap-ssl-open)
-    (network   imap-network-p    imap-network-open)
-    (tls       imap-tls-p        imap-tls-open))
+  '((gssapi    imap-gssapi-stream-p    imap-gssapi-open)
+    (kerberos4 imap-kerberos4-stream-p imap-kerberos4-open)
+    (ssl       imap-ssl-p              imap-ssl-open)
+    (network   imap-network-p          imap-network-open)
+    (shell     imap-shell-p            imap-shell-open)
+    (starttls  imap-starttls-p         imap-starttls-open))
   "Definition of network streams.
 
-(NAME CHECK OPEN)
+\(NAME CHECK OPEN)
 
 NAME names the stream, CHECK is a function returning non-nil if the
 server support the stream and OPEN is a function for opening the
 stream.")
 
-(defvar imap-authenticators '(kerberos4 cram-md5 login anonymous)
-  "Priority of authenticators to consider when authenticating to
-server.")
+(defvar imap-authenticators '(gssapi 
+                             kerberos4
+                             digest-md5
+                             cram-md5
+                             login
+                             anonymous)
+  "Priority of authenticators to consider when authenticating to server.")
 
 (defvar imap-authenticator-alist 
-  '((kerberos4 imap-kerberos4a-p imap-kerberos4-auth)
-    (cram-md5  imap-cram-md5-p   imap-cram-md5-auth)
-    (login     imap-login-p      imap-login-auth)
-    (anonymous imap-anonymous-p  imap-anonymous-auth))
+  '((gssapi     imap-gssapi-auth-p    imap-gssapi-auth)
+    (kerberos4  imap-kerberos4-auth-p imap-kerberos4-auth)
+    (cram-md5   imap-cram-md5-p       imap-cram-md5-auth)
+    (login      imap-login-p          imap-login-auth)
+    (anonymous  imap-anonymous-p      imap-anonymous-auth)
+    (digest-md5 imap-digest-md5-p     imap-digest-md5-auth))
   "Definition of authenticators.
 
-(NAME CHECK AUTHENTICATE)
+\(NAME CHECK AUTHENTICATE)
 
-NAME names the authenticator. CHECK is a function returning non-nil if
+NAME names the authenticator.  CHECK is a function returning non-nil if
 the server support the authenticator and AUTHENTICATE is a function
 for doing the actuall authentification.")
 
-(defvar imap-utf7-p nil
+(defvar imap-use-utf7 t
   "If non-nil, do utf7 encoding/decoding of mailbox names.
 Since the UTF7 decoding currently only decodes into ISO-8859-1
 characters, you may disable this decoding if you need to access UTF7
 encoded mailboxes which doesn't translate into ISO-8859-1.")
 
-;; Internal constants. Change theese and die.
+;; Internal constants.  Change theese and die.
 
 (defconst imap-default-port 143)
 (defconst imap-default-ssl-port 993)
@@ -269,6 +296,7 @@ encoded mailboxes which doesn't translate into ISO-8859-1.")
                                 imap-failed-tags
                                 imap-tag
                                 imap-process
+                                imap-calculate-literal-size-first
                                 imap-mailbox-data))
 
 ;; Internal variables.
@@ -279,9 +307,11 @@ encoded mailboxes which doesn't translate into ISO-8859-1.")
 (defvar imap-port nil)
 (defvar imap-username nil)
 (defvar imap-password nil)
+(defvar imap-calculate-literal-size-first nil)
 (defvar imap-state 'closed 
-  "IMAP state. Valid states are `closed', `initial', `nonauth',
-`auth', `selected' and `examine'.")
+  "IMAP state.
+Valid states are `closed', `initial', `nonauth', `auth', `selected'
+and `examine'.")
 
 (defvar imap-server-eol "\r\n"
   "The EOL string sent from the server.")
@@ -320,10 +350,10 @@ encoded mailboxes which doesn't translate into ISO-8859-1.")
   "Lower limit on command tags that have been parsed.")
 
 (defvar imap-failed-tags nil 
-  "Alist of tags that failed. Each element is a list with four
-elements; tag (a integer), response state (a symbol, `OK', `NO' or
-`BAD'), response code (a string), and human readable response text (a
-string).")
+  "Alist of tags that failed.
+Each element is a list with four elements; tag (a integer), response
+state (a symbol, `OK', `NO' or `BAD'), response code (a string), and
+human readable response text (a string).")
 
 (defvar imap-tag 0
   "Command tag number.")
@@ -332,21 +362,23 @@ string).")
   "Process.")
 
 (defvar imap-continuation nil
-  "Non-nil indicates that the server emitted a continuation request. The
-actually value is really the text on the continuation line.")
+  "Non-nil indicates that the server emitted a continuation request.
+The actually value is really the text on the continuation line.")
 
 (defvar imap-log nil
-  "Imap session trace.")
+  "Name of buffer for imap session trace.
+For example: (setq imap-log \"*imap-log*\")")
 
-(defvar imap-debug nil;"*imap-debug*"
-  "Random debug spew.")
+(defvar imap-debug nil                 ;"*imap-debug*"
+  "Name of buffer for random debug spew.
+For example: (setq imap-debug \"*imap-debug*\")")
 
 \f
 ;; Utility functions:
 
 (defun imap-read-passwd (prompt &rest args)
-  "Read a password using PROMPT. If ARGS, PROMPT is used as an
-argument to `format'."
+  "Read a password using PROMPT.
+If ARGS, PROMPT is used as an argument to `format'."
   (let ((prompt (if args
                    (apply 'format prompt args)
                  prompt)))
@@ -361,7 +393,7 @@ argument to `format'."
             prompt)))
 
 (defsubst imap-utf7-encode (string)
-  (if imap-utf7-p
+  (if imap-use-utf7
       (and string
           (condition-case ()
               (utf7-encode string t)
@@ -372,7 +404,7 @@ argument to `format'."
     string))
 
 (defsubst imap-utf7-decode (string)
-  (if imap-utf7-p
+  (if imap-use-utf7
       (and string
           (condition-case ()
               (utf7-decode string t)
@@ -395,96 +427,174 @@ argument to `format'."
 \f
 ;; Server functions; stream stuff:
 
-(defun imap-kerberos4s-p (buffer)
+(defun imap-kerberos4-stream-p (buffer)
   (imap-capability 'AUTH=KERBEROS_V4 buffer))
 
 (defun imap-kerberos4-open (name buffer server port)
-  (message "Opening Kerberized IMAP connection...")
-  (let* ((port (or port imap-default-port))
-        (process (as-binary-process
-                  (start-process
-                   name buffer shell-file-name shell-command-switch
-                   (format-spec
-                    imap-imtest-program
-                    (format-spec-make ?s server ?p (number-to-string port))
-                    )))))
-    (when process
-      (with-current-buffer buffer
-       (setq imap-client-eol "\n")
-       ;; Result of authentication is a string: __Full privacy protection__
-       (while (and (memq (process-status process) '(open run))
-                   (goto-char (point-min))
-                   (not (and (imap-parse-greeting)
-                             (re-search-forward "__\\(.*\\)__\n" nil t))))
-         (accept-process-output process 1)
-         (sit-for 1))
-       (and imap-log
-            (with-current-buffer (get-buffer-create imap-log)
-              (buffer-disable-undo)
-              (goto-char (point-max))
-              (insert-buffer-substring buffer)))
-      (let ((response (match-string 1)))
-       (erase-buffer)
-       (message "Kerberized IMAP connection: %s" response)
-       (if (and response (let ((case-fold-search nil))
-                           (not (string-match "failed" response))))
-           process
-         (if (memq (process-status process) '(open run))
-             (imap-send-command-wait "LOGOUT"))
-         (delete-process process)
-         nil))))))
+  (let ((cmds imap-kerberos4-program)
+       cmd done)
+    (while (and (not done) (setq cmd (pop cmds)))
+      (message "Opening Kerberos 4 IMAP connection with `%s'..." cmd)
+      (erase-buffer)
+      (let* ((port (or port imap-default-port))
+            (process (as-binary-process
+                      (start-process
+                       name buffer shell-file-name shell-command-switch
+                       (format-spec
+                        cmd
+                        (format-spec-make
+                         ?s server
+                         ?p (number-to-string port)
+                         ?l imap-default-user)))))
+            response)
+       (when process
+         (with-current-buffer buffer
+           (setq imap-client-eol "\n"
+                 imap-calculate-literal-size-first t)
+           (while (and (memq (process-status process) '(open run))
+                       (goto-char (point-min))
+                        ;; cyrus 1.6.x (13? < x <= 22) queries capabilities
+                       (or (while (looking-at "^C:")
+                             (forward-line))
+                           t)
+                       ;; cyrus 1.6 imtest print "S: " before server greeting
+                       (or (not (looking-at "S: "))
+                           (forward-char 3)
+                           t)
+                       (not (and (imap-parse-greeting)
+                                 ;; success in imtest < 1.6:
+                                 (or (re-search-forward
+                                      "^__\\(.*\\)__\n" nil t)
+                                     ;; success in imtest 1.6:
+                                     (re-search-forward
+                                      "^\\(Authenticat.*\\)" nil t))
+                                 (setq response (match-string 1)))))
+             (accept-process-output process 1)
+             (sit-for 1))
+           (and imap-log
+                (with-current-buffer (get-buffer-create imap-log)
+                  (buffer-disable-undo)
+                  (goto-char (point-max))
+                  (insert-buffer-substring buffer)))
+           (erase-buffer)
+           (message "Opening Kerberos 4 IMAP connection with `%s'...%s" cmd
+                    (if response (concat "done, " response) "failed"))
+           (if (and response (let ((case-fold-search nil))
+                               (not (string-match "failed" response))))
+               (setq done process)
+             (if (memq (process-status process) '(open run))
+                 (imap-send-command-wait "LOGOUT"))
+             (delete-process process)
+             nil)))))
+    done))
   
+(defun imap-gssapi-stream-p (buffer)
+  (imap-capability 'AUTH=GSSAPI buffer))
+
+(defun imap-gssapi-open (name buffer server port)
+  (let ((cmds imap-gssapi-program)
+       cmd done)
+    (while (and (not done) (setq cmd (pop cmds)))
+      (message "Opening GSSAPI IMAP connection with `%s'..." cmd)
+      (let* ((port (or port imap-default-port))
+            (process (as-binary-process
+                      (start-process
+                       name buffer shell-file-name shell-command-switch
+                       (format-spec
+                        cmd
+                        (format-spec-make
+                         ?s server
+                         ?p (number-to-string port)
+                         ?l imap-default-user)))))
+            response)
+       (when process
+         (with-current-buffer buffer
+           (setq imap-client-eol "\n")
+           (while (and (memq (process-status process) '(open run))
+                       (goto-char (point-min))
+                        ;; cyrus 1.6.x (13? < x <= 22) queries capabilities
+                       (or (while (looking-at "^C:")
+                             (forward-line))
+                           t)
+                       ;; cyrus 1.6 imtest print "S: " before server greeting
+                       (or (not (looking-at "S: "))
+                           (forward-char 3)
+                           t)
+                       (not (and (imap-parse-greeting)
+                                 ;; success in imtest 1.6:
+                                 (re-search-forward
+                                  "^\\(Authenticat.*\\)" nil t)
+                                 (setq response (match-string 1)))))
+             (accept-process-output process 1)
+             (sit-for 1))
+           (and imap-log
+                (with-current-buffer (get-buffer-create imap-log)
+                  (buffer-disable-undo)
+                  (goto-char (point-max))
+                  (insert-buffer-substring buffer)))
+           (erase-buffer)
+           (message "GSSAPI IMAP connection: %s" (or response "failed"))
+           (if (and response (let ((case-fold-search nil))
+                               (not (string-match "failed" response))))
+               (setq done process)
+             (if (memq (process-status process) '(open run))
+                 (imap-send-command-wait "LOGOUT"))
+             (delete-process process)
+             nil)))))
+    done))
+
 (defun imap-ssl-p (buffer)
   nil)
 
-(defun imap-ssl-open-2 (name buffer server port &optional extra-ssl-args)
-  (let* ((port (or port imap-default-ssl-port))
-        (ssl-program-name imap-ssl-program)
-        (ssl-program-arguments (append imap-ssl-arguments extra-ssl-args
-                                       (list "-connect" 
-                                             (format "%s:%d" server port))))
-        (process (ignore-errors 
-                   (as-binary-process 
-                    (open-ssl-stream name buffer server port)))))
-    (when process
-      (with-current-buffer buffer
-       (goto-char (point-min))
-       (while (and (memq (process-status process) '(open run))
-                   (goto-char (point-max))
-                   (forward-line -1)
-                   (not (imap-parse-greeting)))
-         (accept-process-output process 1)
-         (sit-for 1))
-       (and imap-log
-            (with-current-buffer (get-buffer-create imap-log)
-              (buffer-disable-undo)
-              (goto-char (point-max))
-              (insert-buffer-substring buffer)))
-       (erase-buffer))
-      (when (memq (process-status process) '(open run))
-       process))))
-
-(defun imap-ssl-open-1 (name buffer server port &optional extra-ssl-args)
-  (or (and (eq imap-ssl-program 'auto)
-          (let ((imap-ssl-program "s_client")
-                (imap-ssl-arguments nil))
-            (message "imap: Opening IMAP connection with %s %s..."
-                     imap-ssl-program (car-safe extra-ssl-args))
-            (imap-ssl-open-2 name buffer server port extra-ssl-args)))
-      (and (eq imap-ssl-program 'auto)
-          (let ((imap-ssl-program "openssl")
-                (imap-ssl-arguments '("s_client")))
-            (message "imap: Opening IMAP connection with %s %s..."
-                     imap-ssl-program (car-safe extra-ssl-args))
-            (imap-ssl-open-2 name buffer server port extra-ssl-args)))
-      (and (not (eq imap-ssl-program 'auto))
-          (progn (message "imap: Opening IMAP connection with %s %s..."
-                          imap-ssl-program (car-safe extra-ssl-args))
-                 (imap-ssl-open-2 name buffer server port extra-ssl-args)))))
-          
 (defun imap-ssl-open (name buffer server port)
-  (or (imap-ssl-open-1 name buffer server port '("-ssl3"))
-      (imap-ssl-open-1 name buffer server port '("-ssl2"))))
+  "Open a SSL connection to server."
+  (let ((cmds (if (listp imap-ssl-program) imap-ssl-program
+               (list imap-ssl-program)))
+       cmd done)
+    (while (and (not done) (setq cmd (pop cmds)))
+      (message "imap: Opening SSL connection with `%s'..." cmd)
+      (let* ((port (or port imap-default-ssl-port))
+            (ssl-program-name shell-file-name)
+            (ssl-program-arguments
+             (list shell-command-switch
+                   (format-spec cmd (format-spec-make
+                                     ?s server
+                                     ?p (number-to-string port)))))
+            process)
+       (when (setq process
+                   (ignore-errors
+                     (cond ((eq system-type 'windows-nt)
+                            (let (selective-display
+                                  (coding-system-for-write 'binary)
+                                  (coding-system-for-read 'raw-text-dos)
+                                  (output-coding-system 'binary)
+                                  (input-coding-system 'raw-text-dos))
+                              (open-ssl-stream name buffer server port)))
+                           (t
+                            (as-binary-process
+                             (open-ssl-stream name buffer server port))))))
+         (with-current-buffer buffer
+           (goto-char (point-min))
+           (while (and (memq (process-status process) '(open run))
+                       (goto-char (point-max))
+                       (forward-line -1)
+                       (not (imap-parse-greeting)))
+             (accept-process-output process 1)
+             (sit-for 1))
+           (and imap-log
+                (with-current-buffer (get-buffer-create imap-log)
+                  (buffer-disable-undo)
+                  (goto-char (point-max))
+                  (insert-buffer-substring buffer)))
+           (erase-buffer)
+           (when (memq (process-status process) '(open run))
+             (setq done process))))))
+    (if done
+       (progn
+         (message "imap: Opening SSL connection with `%s'...done" cmd)
+         done)
+         (message "imap: Opening SSL connection with `%s'...failed" cmd)
+      nil)))
 
 (defun imap-network-p (buffer)
   t)
@@ -506,13 +616,61 @@ argument to `format'."
       (when (memq (process-status process) '(open run))
        process))))
 
-(defun imap-tls-p (buffer)
-  (imap-capability 'STARTTLS buffer))
+(defun imap-shell-p (buffer)
+  nil)
 
-(defun imap-tls-open (name buffer server port)
+(defun imap-shell-open (name buffer server port)
+  (let ((cmds imap-shell-program)
+       cmd done)
+    (while (and (not done) (setq cmd (pop cmds)))
+      (message "imap: Opening IMAP connection with `%s'..." cmd)
+      (setq imap-client-eol "\n")
+      (let* ((port (or port imap-default-port))
+            (process (as-binary-process
+                      (start-process
+                       name buffer shell-file-name shell-command-switch
+                       (format-spec
+                        cmd
+                        (format-spec-make
+                         ?s server
+                         ?g imap-shell-host
+                         ?p (number-to-string port)
+                         ?l imap-default-user))))))
+       (when process
+         (while (and (memq (process-status process) '(open run))
+                     (goto-char (point-min))
+                     (not (imap-parse-greeting)))
+           (accept-process-output process 1)
+           (sit-for 1))
+         (erase-buffer)
+         (and imap-log
+              (with-current-buffer (get-buffer-create imap-log)
+                (buffer-disable-undo)
+                (goto-char (point-max))
+                (insert-buffer-substring buffer)))
+         (when (memq (process-status process) '(open run))
+           (setq done process)))))
+    (if done
+       (progn
+         (message "imap: Opening IMAP connection with `%s'...done" cmd)
+         done)
+      (message "imap: Opening IMAP connection with `%s'...failed" cmd)
+      nil)))
+
+(defun imap-starttls-p (buffer)
+  (and (imap-capability 'STARTTLS buffer)
+       (condition-case ()
+          (progn
+            (require 'starttls)
+            (call-process "starttls"))
+        (error nil))))
+
+(defun imap-starttls-open (name buffer server port)
   (let* ((port (or port imap-default-port))
         (process (as-binary-process
-                  (starttls-open-stream name buffer server port))))
+                  (starttls-open-stream name buffer server port)))
+        done)
+    (message "imap: Connecting with STARTTLS...")
     (when process
       (while (and (memq (process-status process) '(open run))
                  (goto-char (point-min))
@@ -528,57 +686,73 @@ argument to `format'."
        (unwind-protect
            (progn
              (set-process-filter imap-process 'imap-arrival-filter)
-             (when (and (eq imap-stream 'tls)
+             (when (and (eq imap-stream 'starttls)
                         (imap-ok-p (imap-send-command-wait "STARTTLS")))
                (starttls-negotiate imap-process)))
          (set-process-filter imap-process nil)))
       (when (memq (process-status process) '(open run))
-       process))))
+       (setq done process)))
+    (if done
+       (progn
+         (message "imap: Connecting with STARTTLS...done")
+         done)
+      (message "imap: Connecting with STARTTLS...failed")
+      nil)))
   
 ;; Server functions; authenticator stuff:
 
 (defun imap-interactive-login (buffer loginfunc)
-  "Login to server in BUFFER. LOGINFUNC is passed a username and a
-password, it should return t if it where sucessful authenticating
-itself to the server, nil otherwise. Returns t if login was
-successful, nil otherwise."
+  "Login to server in BUFFER.
+LOGINFUNC is passed a username and a password, it should return t if
+it where sucessful authenticating itself to the server, nil otherwise.
+Returns t if login was successful, nil otherwise."
   (with-current-buffer buffer
     (make-variable-buffer-local 'imap-username)
     (make-variable-buffer-local 'imap-password)
     (let (user passwd ret)
-;;      (condition-case ()
-         (while (or (not user) (not passwd))
-           (setq user (or imap-username
-                          (read-from-minibuffer 
-                           (concat "IMAP username for " imap-server ": ")
-                           (or user imap-default-user))))
-           (setq passwd (or imap-password
-                            (imap-read-passwd
-                             (concat "IMAP password for " user "@" 
-                                     imap-server ": "))))
-           (when (and user passwd)
-             (if (funcall loginfunc user passwd)
-                 (progn
-                   (setq ret t
-                         imap-username user)
-                   (if (and (not imap-password)
-                            (y-or-n-p "Store password for this session? "))
-                       (setq imap-password passwd)))
-               (message "Login failed...")
-               (setq passwd nil)
-               (sit-for 1))))
-;;     (quit (with-current-buffer buffer
-;;             (setq user nil
-;;                   passwd nil)))
-;;     (error (with-current-buffer buffer
-;;              (setq user nil
-;;                    passwd nil))))
+      ;;      (condition-case ()
+      (while (or (not user) (not passwd))
+       (setq user (or imap-username
+                      (read-from-minibuffer 
+                       (concat "IMAP username for " imap-server ": ")
+                       (or user imap-default-user))))
+       (setq passwd (or imap-password
+                        (imap-read-passwd
+                         (concat "IMAP password for " user "@" 
+                                 imap-server ": "))))
+       (when (and user passwd)
+         (if (funcall loginfunc user passwd)
+             (progn
+               (setq ret t
+                     imap-username user)
+               (if (and (not imap-password)
+                        (y-or-n-p "Store password for this session? "))
+                   (setq imap-password passwd)))
+           (message "Login failed...")
+           (setq passwd nil)
+           (sit-for 1))))
+      ;;       (quit (with-current-buffer buffer
+      ;;               (setq user nil
+      ;;                     passwd nil)))
+      ;;       (error (with-current-buffer buffer
+      ;;                (setq user nil
+      ;;                      passwd nil))))
       ret)))
 
-(defun imap-kerberos4a-p (buffer)
+(defun imap-gssapi-auth-p (buffer)
+  (imap-capability 'AUTH=GSSAPI buffer))
+
+(defun imap-gssapi-auth (buffer)
+  (message "imap: Authenticating using GSSAPI...%s"
+          (if (eq imap-stream 'gssapi) "done" "failed"))
+  (eq imap-stream 'gssapi))
+
+(defun imap-kerberos4-auth-p (buffer)
   (imap-capability 'AUTH=KERBEROS_V4 buffer))
 
 (defun imap-kerberos4-auth (buffer)
+  (message "imap: Authenticating using Kerberos 4...%s"
+          (if (eq imap-stream 'kerberos4) "done" "failed"))
   (eq imap-stream 'kerberos4))
 
 (defun imap-cram-md5-p (buffer)
@@ -586,30 +760,38 @@ successful, nil otherwise."
 
 (defun imap-cram-md5-auth (buffer)
   "Login to server using the AUTH CRAM-MD5 method."
-  (imap-interactive-login
-   buffer
-   (lambda (user passwd)
-     (imap-ok-p
-      (imap-send-command-wait
-       (list
-       "AUTHENTICATE CRAM-MD5"
-       (lambda (challenge)
-         (let* ((decoded (imap-base64-decode-string challenge))
-                (hash-function (if (and (featurep 'xemacs)
-                                        (>= (function-max-args 'md5) 4))
-                                   (lambda (object &optional start end)
-                                     (md5 object start end 'binary))
-                                 'md5))
-                (hash (rfc2104-hash hash-function 64 16 passwd decoded))
-                (response (concat user " " hash))
-                (encoded (imap-base64-encode-string response)))
-           encoded))))))))
+  (message "imap: Authenticating using CRAM-MD5...")
+  (let ((done (imap-interactive-login
+              buffer
+              (lambda (user passwd)
+                (imap-ok-p
+                 (imap-send-command-wait
+                  (list
+                   "AUTHENTICATE CRAM-MD5"
+                   (lambda (challenge)
+                     (let* ((decoded (base64-decode-string challenge))
+                            (hash-function
+                             (if (and (featurep 'xemacs)
+                                      (>= (function-max-args 'md5) 4))
+                                 (lambda (object &optional start end)
+                                   (md5 object start end 'binary))
+                               'md5))
+                            (hash (rfc2104-hash hash-function 64 16
+                                                passwd decoded))
+                            (response (concat user " " hash))
+                            (encoded (base64-encode-string response)))
+                       encoded)))))))))
+    (if done
+       (message "imap: Authenticating using CRAM-MD5...done")
+      (message "imap: Authenticating using CRAM-MD5...failed"))))
 
 (defun imap-login-p (buffer)
-  (not (imap-capability 'X-LOGIN-CMD-DISABLED buffer)))
+  (and (not (imap-capability 'LOGINDISABLED buffer))
+       (not (imap-capability 'X-LOGIN-CMD-DISABLED buffer))))
 
 (defun imap-login-auth (buffer)
   "Login to server using the LOGIN command."
+  (message "imap: Plaintext authentication...")
   (imap-interactive-login buffer 
                          (lambda (user passwd)
                            (imap-ok-p (imap-send-command-wait 
@@ -620,11 +802,40 @@ successful, nil otherwise."
   t)
 
 (defun imap-anonymous-auth (buffer)
+  (message "imap: Loging in anonymously...")
   (with-current-buffer buffer
     (imap-ok-p (imap-send-command-wait
                (concat "LOGIN anonymous \"" (concat (user-login-name) "@" 
                                                     (system-name)) "\"")))))
 
+(defun imap-digest-md5-p (buffer)
+  (and (imap-capability 'AUTH=DIGEST-MD5 buffer)
+       (condition-case ()
+          (require 'digest-md5)
+        (error nil))))
+
+(defun imap-digest-md5-auth (buffer)
+  "Login to server using the AUTH DIGEST-MD5 method."
+  (message "imap: Authenticating using DIGEST-MD5...")
+  (imap-interactive-login
+   buffer
+   (lambda (user passwd)
+     (let ((tag 
+           (imap-send-command
+            (list
+             "AUTHENTICATE DIGEST-MD5"
+             (lambda (challenge)
+               (base64-encode-string
+                (sasl-digest-md5-digest-response
+                 (base64-decode-string challenge)
+                 user passwd "imap" imap-server)
+                'no-line-break))))))
+       (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
+          nil
+        (setq imap-continuation nil)
+        (imap-send-command-1 "")
+        (imap-ok-p (imap-wait-for-tag tag)))))))
+
 ;; Server functions:
 
 (defun imap-open-1 (buffer)
@@ -650,64 +861,72 @@ successful, nil otherwise."
           imap-process))))
 
 (defun imap-open (server &optional port stream auth buffer)
-  "Open a IMAP connection to host SERVER at PORT returning a
-buffer. If PORT is unspecified, a default value is used (143 except
+  "Open a IMAP connection to host SERVER at PORT returning a buffer.
+If PORT is unspecified, a default value is used (143 except
 for SSL which use 993).
 STREAM indicates the stream to use, see `imap-streams' for available
-streams. If nil, it choices the best stream the server is capable of.
+streams.  If nil, it choices the best stream the server is capable of.
 AUTH indicates authenticator to use, see `imap-authenticators' for
-available authenticators. If nil, it choices the best stream the
+available authenticators.  If nil, it choices the best stream the
 server is capable of.
 BUFFER can be a buffer or a name of a buffer, which is created if
-necessery. If nil, the buffer name is generated."
+necessery.  If nil, the buffer name is generated."
   (setq buffer (or buffer (format " *imap* %s:%d" server (or port 0))))
   (with-current-buffer (get-buffer-create buffer)
     (if (imap-opened buffer)
        (imap-close buffer))
-    (mapc 'make-variable-buffer-local imap-local-variables)
+    (mapcar 'make-variable-buffer-local imap-local-variables)
+    (set-buffer-multibyte nil)
     (buffer-disable-undo)
     (setq imap-server (or server imap-server))
     (setq imap-port (or port imap-port))
     (setq imap-auth (or auth imap-auth))
     (setq imap-stream (or stream imap-stream))
-    (when (let ((imap-stream (or imap-stream imap-default-stream)))
-           (imap-open-1 buffer))
-      ;; Choose stream.
-      (let (stream-changed)
-       (when (null imap-stream)
-         (let ((streams imap-streams))
-           (while (setq stream (pop streams))
-             (if (funcall (nth 1 (assq stream imap-stream-alist)) buffer)
-                 (setq stream-changed (not (eq (or imap-stream 
-                                                   imap-default-stream)
-                                               stream))
-                       imap-stream stream
-                       streams nil)))
-           (unless imap-stream
-             (error "Couldn't figure out a stream for server"))))
-       (when stream-changed
-         (message "Reconnecting with %s..." imap-stream)
-         (imap-close buffer)
-         (imap-open-1 buffer)
-         (setq imap-capability nil)))
-      (if (imap-opened buffer)
-         ;; Choose authenticator
-         (when (null imap-auth)
-           (let ((auths imap-authenticators))
-             (while (setq auth (pop auths))
-               (if (funcall (nth 1 (assq auth imap-authenticator-alist)) 
-                            buffer)
-                   (setq imap-auth auth
-                         auths nil)))
-             (unless imap-auth
-               (error "Couldn't figure out authenticator for server"))))))
+    (message "imap: Connecting to %s..." imap-server)
+    (if (let ((imap-stream (or imap-stream imap-default-stream)))
+         (imap-open-1 buffer))
+       ;; Choose stream.
+       (let (stream-changed)
+         (message "imap: Connecting to %s...done" imap-server)
+         (when (null imap-stream)
+           (let ((streams imap-streams))
+             (while (setq stream (pop streams))
+               (if (funcall (nth 1 (assq stream imap-stream-alist)) buffer)
+                   (setq stream-changed (not (eq (or imap-stream 
+                                                     imap-default-stream)
+                                                 stream))
+                         imap-stream stream
+                         streams nil)))
+             (unless imap-stream
+               (error "Couldn't figure out a stream for server"))))
+         (when stream-changed
+           (message "imap: Reconnecting with stream `%s'..." imap-stream)
+           (imap-close buffer)
+           (if (imap-open-1 buffer)
+               (message "imap: Reconnecting with stream `%s'...done"
+                        imap-stream)
+             (message "imap: Reconnecting with stream `%s'...failed" 
+                      imap-stream))
+           (setq imap-capability nil))
+         (if (imap-opened buffer)
+             ;; Choose authenticator
+             (when (and (null imap-auth) (not (eq imap-state 'auth)))
+               (let ((auths imap-authenticators))
+                 (while (setq auth (pop auths))
+                   (if (funcall (nth 1 (assq auth imap-authenticator-alist)) 
+                                buffer)
+                       (setq imap-auth auth
+                             auths nil)))
+                 (unless imap-auth
+                   (error "Couldn't figure out authenticator for server"))))))
+      (message "imap: Connecting to %s...failed" imap-server))
     (when (imap-opened buffer)
       (setq imap-mailbox-data (make-vector imap-mailbox-prime 0))
       buffer)))
 
 (defun imap-opened (&optional buffer)
-  "Return non-nil if connection to imap server in BUFFER is open. If
-BUFFER is nil then the current buffer is used."
+  "Return non-nil if connection to imap server in BUFFER is open.
+If BUFFER is nil then the current buffer is used."
   (and (setq buffer (get-buffer (or buffer (current-buffer))))
        (buffer-live-p buffer)
        (with-current-buffer buffer
@@ -715,14 +934,17 @@ BUFFER is nil then the current buffer is used."
              (memq (process-status imap-process) '(open run))))))
 
 (defun imap-authenticate (&optional user passwd buffer)
-  "Authenticate to server in BUFFER, using current buffer if nil. It
-uses the authenticator specified when opening the server. If the
+  "Authenticate to server in BUFFER, using current buffer if nil.
+It uses the authenticator specified when opening the server.  If the
 authenticator requires username/passwords, they are queried from the
 user and optionally stored in the buffer.  If USER and/or PASSWD is
 specified, the user will not be questioned and the username and/or
 password is remembered in the buffer."
   (with-current-buffer (or buffer (current-buffer))
-    (when (eq imap-state 'nonauth)
+    (if (not (eq imap-state 'nonauth))
+       (or (eq imap-state 'auth)
+           (eq imap-state 'select)
+           (eq imap-state 'examine))
       (make-variable-buffer-local 'imap-username)
       (make-variable-buffer-local 'imap-password)
       (if user (setq imap-username user))
@@ -731,8 +953,8 @@ password is remembered in the buffer."
          (setq imap-state 'auth)))))
 
 (defun imap-close (&optional buffer)
-  "Close connection to server in BUFFER. If BUFFER is nil, the current
-buffer is used."
+  "Close connection to server in BUFFER.
+If BUFFER is nil, the current buffer is used."
   (with-current-buffer (or buffer (current-buffer))
     (and (imap-opened)
         (not (imap-ok-p (imap-send-command-wait "LOGOUT")))
@@ -747,9 +969,9 @@ buffer is used."
     t))
 
 (defun imap-capability (&optional identifier buffer)
-  "Return a list of identifiers which server in BUFFER support. If
-IDENTIFIER, return non-nil if it's among the servers capabilities. If
-BUFFER is nil, the current buffer is assumed."
+  "Return a list of identifiers which server in BUFFER support.
+If IDENTIFIER, return non-nil if it's among the servers capabilities.
+If BUFFER is nil, the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (unless imap-capability
       (unless (imap-ok-p (imap-send-command-wait "CAPABILITY"))
@@ -759,8 +981,8 @@ BUFFER is nil, the current buffer is assumed."
       imap-capability)))
 
 (defun imap-namespace (&optional buffer)
-  "Return a namespace hierarchy at server in BUFFER. If BUFFER is nil,
-the current buffer is assumed."
+  "Return a namespace hierarchy at server in BUFFER.
+If BUFFER is nil, the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (unless imap-namespace
       (when (imap-capability 'NAMESPACE)
@@ -803,8 +1025,8 @@ the current buffer is assumed."
       result)))
 
 (defun imap-mailbox-map (func &optional buffer)
-  "Map a function across each mailbox in `imap-mailbox-data',
-returning a list. Function should take a mailbox name (a string) as
+  "Map a function across each mailbox in `imap-mailbox-data', returning a list.
+Function should take a mailbox name (a string) as
 the only argument."
   (imap-mailbox-map-1 func 'imap-utf7-decode buffer))
 
@@ -824,8 +1046,8 @@ the only argument."
     (imap-current-mailbox-p-1 (imap-utf7-encode mailbox) examine)))
 
 (defun imap-mailbox-select-1 (mailbox &optional examine)
-  "Select MAILBOX on server in BUFFER. If EXAMINE is non-nil, do a
-read-only select."
+  "Select MAILBOX on server in BUFFER.
+If EXAMINE is non-nil, do a read-only select."
   (if (imap-current-mailbox-p-1 mailbox examine)
       imap-current-mailbox
     (setq imap-current-mailbox mailbox)
@@ -844,8 +1066,12 @@ read-only select."
     (imap-utf7-decode 
      (imap-mailbox-select-1 (imap-utf7-encode mailbox) examine))))
 
+(defun imap-mailbox-examine-1 (mailbox &optional buffer)
+  (with-current-buffer (or buffer (current-buffer))
+    (imap-mailbox-select-1 mailbox 'exmine)))
+
 (defun imap-mailbox-examine (mailbox &optional buffer)
-  "Examine MAILBOX on server in BUFFER"
+  "Examine MAILBOX on server in BUFFER."
   (imap-mailbox-select mailbox 'exmine buffer))
 
 (defun imap-mailbox-unselect (&optional buffer)
@@ -865,43 +1091,43 @@ read-only select."
       t)))
 
 (defun imap-mailbox-expunge (&optional buffer)
-  "Expunge articles in current folder in BUFFER. If BUFFER is
-nil the current buffer is assumed."
+  "Expunge articles in current folder in BUFFER.
+If BUFFER is nil the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (when (and imap-current-mailbox (not (eq imap-state 'examine)))
       (imap-ok-p (imap-send-command-wait "EXPUNGE")))))
 
 (defun imap-mailbox-close (&optional buffer)
-  "Expunge articles and close current folder in BUFFER. If BUFFER is
-nil the current buffer is assumed."
+  "Expunge articles and close current folder in BUFFER.
+If BUFFER is nil the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (when (and imap-current-mailbox
               (imap-ok-p (imap-send-command-wait "CLOSE")))
-       (setq imap-current-mailbox nil
-             imap-message-data nil
-             imap-state 'auth)
-       t)))
+      (setq imap-current-mailbox nil
+           imap-message-data nil
+           imap-state 'auth)
+      t)))
 
 (defun imap-mailbox-create-1 (mailbox)
   (imap-ok-p (imap-send-command-wait (list "CREATE \"" mailbox "\""))))
 
 (defun imap-mailbox-create (mailbox &optional buffer)
-  "Create MAILBOX on server in BUFFER. If BUFFER is nil the current
-buffer is assumed."
+  "Create MAILBOX on server in BUFFER.
+If BUFFER is nil the current buffer is assumed."
   (with-current-buffer (or buffer (current-buffer))
     (imap-mailbox-create-1 (imap-utf7-encode mailbox))))
 
 (defun imap-mailbox-delete (mailbox &optional buffer)
-  "Delete MAILBOX on server in BUFFER. If BUFFER is nil the current
-buffer is assumed."
+  "Delete MAILBOX on server in BUFFER.
+If BUFFER is nil the current buffer is assumed."
   (let ((mailbox (imap-utf7-encode mailbox)))
     (with-current-buffer (or buffer (current-buffer))
       (imap-ok-p
        (imap-send-command-wait (list "DELETE \"" mailbox "\""))))))
 
 (defun imap-mailbox-rename (oldname newname &optional buffer)
-  "Rename mailbox OLDNAME to NEWNAME on server in BUFFER. If BUFFER is
-nil the current buffer is assumed."
+  "Rename mailbox OLDNAME to NEWNAME on server in BUFFER.
+If BUFFER is nil the current buffer is assumed."
   (let ((oldname (imap-utf7-encode oldname))
        (newname (imap-utf7-encode newname)))
     (with-current-buffer (or buffer (current-buffer))
@@ -912,7 +1138,7 @@ nil the current buffer is assumed."
 (defun imap-mailbox-lsub (&optional root reference add-delimiter buffer) 
   "Return a list of subscribed mailboxes on server in BUFFER.
 If ROOT is non-nil, only list matching mailboxes.  If ADD-DELIMITER is
-non-nil, a hierarchy delimiter is added to root. REFERENCE is a
+non-nil, a hierarchy delimiter is added to root.  REFERENCE is a
 implementation-specific string that has to be passed to lsub command."
   (with-current-buffer (or buffer (current-buffer))
     ;; Make sure we know the hierarchy separator for root's hierarchy
@@ -936,7 +1162,7 @@ implementation-specific string that has to be passed to lsub command."
 (defun imap-mailbox-list (root &optional reference add-delimiter buffer)
   "Return a list of mailboxes matching ROOT on server in BUFFER.
 If ADD-DELIMITER is non-nil, a hierarchy delimiter is added to
-root. REFERENCE is a implementation-specific string that has to be
+root.  REFERENCE is a implementation-specific string that has to be
 passed to list command."
   (with-current-buffer (or buffer (current-buffer))
     ;; Make sure we know the hierarchy separator for root's hierarchy
@@ -958,27 +1184,27 @@ passed to list command."
        (nreverse out)))))
 
 (defun imap-mailbox-subscribe (mailbox &optional buffer)
-  "Send the SUBSCRIBE command on the mailbox to server in
-BUFFER. Returns non-nil if successful."
+  "Send the SUBSCRIBE command on the mailbox to server in BUFFER.
+Returns non-nil if successful."
   (with-current-buffer (or buffer (current-buffer))
     (imap-ok-p (imap-send-command-wait (concat "SUBSCRIBE \"" 
                                               (imap-utf7-encode mailbox)
                                               "\"")))))
 
 (defun imap-mailbox-unsubscribe (mailbox &optional buffer)
-  "Send the SUBSCRIBE command on the mailbox to server in
-BUFFER. Returns non-nil if successful."
+  "Send the SUBSCRIBE command on the mailbox to server in BUFFER.
+Returns non-nil if successful."
   (with-current-buffer (or buffer (current-buffer))
     (imap-ok-p (imap-send-command-wait (concat "UNSUBSCRIBE " 
                                               (imap-utf7-encode mailbox)
                                               "\"")))))
 
 (defun imap-mailbox-status (mailbox items &optional buffer)
-  "Get status items ITEM in MAILBOX from server in BUFFER. ITEMS can
-be a symbol or a list of symbols, valid symbols are one of the STATUS
-data items -- ie 'messages, 'recent, 'uidnext, 'uidvalidity or
-'unseen. If ITEMS is a list of symbols, a list of values is returned,
-if ITEMS is a symbol only it's value is returned."
+  "Get status items ITEM in MAILBOX from server in BUFFER.
+ITEMS can be a symbol or a list of symbols, valid symbols are one of
+the STATUS data items -- ie 'messages, 'recent, 'uidnext, 'uidvalidity
+or 'unseen.  If ITEMS is a list of symbols, a list of values is
+returned, if ITEMS is a symbol only it's value is returned."
   (with-current-buffer (or buffer (current-buffer))
     (when (imap-ok-p 
           (imap-send-command-wait (list "STATUS \""
@@ -990,9 +1216,9 @@ if ITEMS is a symbol only it's value is returned."
                                                   (list items))))))
       (if (listp items)
          (mapcar (lambda (item)
-                   (imap-mailbox-get-1 item mailbox))
+                   (imap-mailbox-get item mailbox))
                  items)
-       (imap-mailbox-get-1 items mailbox)))))
+       (imap-mailbox-get items mailbox)))))
 
 (defun imap-mailbox-acl-get (&optional mailbox buffer)
   "Get ACL on mailbox from server in BUFFER."
@@ -1002,11 +1228,10 @@ if ITEMS is a symbol only it's value is returned."
             (imap-send-command-wait (list "GETACL \""
                                           (or mailbox imap-current-mailbox)
                                           "\"")))
-      (imap-mailbox-get-1 'acl (or mailbox imap-current-mailbox))))))
+       (imap-mailbox-get-1 'acl (or mailbox imap-current-mailbox))))))
 
 (defun imap-mailbox-acl-set (identifier rights &optional mailbox buffer)
-  "Change/set ACL for IDENTIFIER to RIGHTS in MAILBOX from server in
-BUFFER."
+  "Change/set ACL for IDENTIFIER to RIGHTS in MAILBOX from server in BUFFER."
   (let ((mailbox (imap-utf7-encode mailbox)))
     (with-current-buffer (or buffer (current-buffer))
       (imap-ok-p
@@ -1018,8 +1243,7 @@ BUFFER."
                                     rights))))))
 
 (defun imap-mailbox-acl-delete (identifier &optional mailbox buffer)
-  "Removes any <identifier,rights> pair for IDENTIFIER in MAILBOX from
-server in BUFFER."
+  "Removes any <identifier,rights> pair for IDENTIFIER in MAILBOX from server in BUFFER."
   (let ((mailbox (imap-utf7-encode mailbox)))
     (with-current-buffer (or buffer (current-buffer))
       (imap-ok-p
@@ -1043,6 +1267,18 @@ server in BUFFER."
               (list list))
             ","))
 
+(defun imap-range-to-message-set (range)
+  (mapconcat
+   (lambda (item)
+     (if (consp item)
+         (format "%d:%d"
+                 (car item) (cdr item))
+       (format "%d" item)))
+   (if (and (listp range) (not (listp (cdr range))))
+       (list range) ;; make (1 . 2) into ((1 . 2))
+     range)
+   ","))
+
 (defun imap-fetch-asynch (uids props &optional nouidfetch buffer)
   (with-current-buffer (or buffer (current-buffer))
     (imap-send-command (format "%sFETCH %s %s" (if nouidfetch "" "UID ")
@@ -1052,8 +1288,8 @@ server in BUFFER."
                               props))))
 
 (defun imap-fetch (uids props &optional receive nouidfetch buffer)
-  "Fetch properties PROPS from message set UIDS from server in
-BUFFER. UIDS can be a string, number or a list of numbers. If RECEIVE
+  "Fetch properties PROPS from message set UIDS from server in BUFFER.
+UIDS can be a string, number or a list of numbers.  If RECEIVE
 is non-nil return theese properties."
   (with-current-buffer (or buffer (current-buffer))
     (when (imap-ok-p (imap-send-command-wait 
@@ -1089,8 +1325,7 @@ is non-nil return theese properties."
         propname)))
 
 (defun imap-message-map (func propname &optional buffer)
-  "Map a function across each mailbox in `imap-message-data',
-returning a list."
+  "Map a function across each mailbox in `imap-message-data', returning a list."
   (with-current-buffer (or buffer (current-buffer))
     (let (result)
       (mapatoms
@@ -1152,8 +1387,7 @@ returning a list."
        (imap-mailbox-get-1 'search imap-current-mailbox)))))
 
 (defun imap-message-flag-permanent-p (flag &optional mailbox buffer)
-  "Return t iff FLAG can be permanently (between IMAP sessions) saved
-on articles, in MAILBOX on server in BUFFER."
+  "Return t iff FLAG can be permanently (between IMAP sessions) saved on articles, in MAILBOX on server in BUFFER."
   (with-current-buffer (or buffer (current-buffer))
     (or (member "\\*" (imap-mailbox-get 'permanentflags mailbox))
        (member flag (imap-mailbox-get 'permanentflags mailbox)))))
@@ -1186,7 +1420,7 @@ on articles, in MAILBOX on server in BUFFER."
     (let ((old-mailbox imap-current-mailbox)
          (state imap-state)
          (imap-message-data (make-vector 2 0)))
-      (when (imap-mailbox-examine mailbox)
+      (when (imap-mailbox-examine-1 mailbox)
        (prog1
            (and (imap-fetch "*" "UID")
                 (list (imap-mailbox-get-1 'uidvalidity mailbox)
@@ -1203,8 +1437,8 @@ on articles, in MAILBOX on server in BUFFER."
 (defun imap-message-copy (articles mailbox
                                   &optional dont-create no-copyuid buffer)
   "Copy ARTICLES (a string message set) to MAILBOX on server in
-BUFFER, creating mailbox if it doesn't exist. If dont-create is
-non-nil, it will not create a mailbox. On success, return a list with
+BUFFER, creating mailbox if it doesn't exist.  If dont-create is
+non-nil, it will not create a mailbox.  On success, return a list with
 the UIDVALIDITY of the mailbox the article(s) was copied to as the
 first element, rest of list contain the saved articles' UIDs."
   (when articles
@@ -1227,7 +1461,7 @@ first element, rest of list contain the saved articles' UIDs."
     (let ((old-mailbox imap-current-mailbox)
          (state imap-state)
          (imap-message-data (make-vector 2 0)))
-      (when (imap-mailbox-examine mailbox)
+      (when (imap-mailbox-examine-1 mailbox)
        (prog1
            (and (imap-fetch "*" "UID")
                 (list (imap-mailbox-get-1 'uidvalidity mailbox)
@@ -1242,9 +1476,10 @@ first element, rest of list contain the saved articles' UIDs."
     (imap-message-appenduid-1 (imap-utf7-encode mailbox))))
 
 (defun imap-message-append (mailbox article &optional flags date-time buffer)
-  "Append ARTICLE (a buffer) to MAILBOX on server in BUFFER. FLAGS and
-DATE-TIME is currently not used. Return a cons holding uidvalidity of
-MAILBOX and UID the newly created article got, or nil on failure."
+  "Append ARTICLE (a buffer) to MAILBOX on server in BUFFER.
+FLAGS and DATE-TIME is currently not used.  Return a cons holding
+uidvalidity of MAILBOX and UID the newly created article got, or nil
+on failure."
   (let ((mailbox (imap-utf7-encode mailbox)))
     (with-current-buffer (or buffer (current-buffer))
       (and (let ((imap-current-target-mailbox mailbox))
@@ -1254,14 +1489,13 @@ MAILBOX and UID the newly created article got, or nil on failure."
           (imap-message-appenduid-1 mailbox)))))
   
 (defun imap-body-lines (body)
-  "Return number of lines in article by looking at the mime bodystructure
-BODY."
+  "Return number of lines in article by looking at the mime bodystructure BODY."
   (if (listp body)
       (if (stringp (car body))
-         (cond ((and (string= (car body) "TEXT")
+         (cond ((and (string= (upcase (car body)) "TEXT")
                      (numberp (nth 7 body)))
                 (nth 7 body))
-               ((and (string= (car body) "MESSAGE")
+               ((and (string= (upcase (car body)) "MESSAGE")
                      (numberp (nth 9 body)))
                 (nth 9 body))
                (t 0))
@@ -1300,23 +1534,31 @@ BODY."
        (cond ((stringp cmd)
               (setq cmdstr (concat cmdstr cmd)))
              ((bufferp cmd)
-              (setq cmdstr 
-                    (concat cmdstr (format "{%d}" (with-current-buffer cmd
-                                                    (buffer-size)))))
+              (let ((eol imap-client-eol)
+                    (calcfirst imap-calculate-literal-size-first)
+                    size)
+                (with-current-buffer cmd
+                  (if calcfirst
+                      (setq size (buffer-size)))
+                  (when (not (equal eol "\r\n"))
+                    ;; XXX modifies buffer!
+                    (goto-char (point-min))
+                    (while (search-forward "\r\n" nil t)
+                      (replace-match eol)))
+                  (if (not calcfirst)
+                      (setq size (buffer-size))))
+                (setq cmdstr 
+                      (concat cmdstr (format "{%d}" size))))
               (unwind-protect
                   (progn
                     (imap-send-command-1 cmdstr)
                     (setq cmdstr nil)
                     (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
-                        (setq command nil) ;; abort command if no cont-req
+                        (setq command nil);; abort command if no cont-req
                       (let ((process imap-process)
-                            (stream imap-stream))
+                            (stream imap-stream)
+                            (eol imap-client-eol))
                         (with-current-buffer cmd
-                          (when (eq stream 'kerberos4)
-                            ;; XXX modifies buffer!
-                            (goto-char (point-min))
-                            (while (search-forward "\r\n" nil t)
-                              (replace-match "\n")))
                           (and imap-log
                                (with-current-buffer (get-buffer-create
                                                      imap-log)
@@ -1332,7 +1574,7 @@ BODY."
               (setq cmdstr nil)
               (unwind-protect
                   (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
-                      (setq command nil) ;; abort command if no cont-req
+                      (setq command nil);; abort command if no cont-req
                     (setq command (cons (funcall cmd imap-continuation)
                                         command)))
                 (setq imap-continuation nil)))
@@ -1348,7 +1590,12 @@ BODY."
                (< imap-reached-tag tag))
       (or (and (not (memq (process-status imap-process) '(open run)))
               (sit-for 1))
-         (accept-process-output imap-process 1)))
+         (let ((len (/ (point-max) 1024))
+               message-log-max)
+           (unless (< len 10)
+             (message "imap read: %dk" len))
+           (accept-process-output imap-process 1))))
+    (message "")
     (or (assq tag imap-failed-tags)
        (if imap-continuation
            'INCOMPLETE
@@ -1358,8 +1605,8 @@ BODY."
   (delete-process process))
 
 (defun imap-find-next-line ()
-  "Return point at end of current line, taking into account
-literals. Return nil if no complete line has arrived."
+  "Return point at end of current line, taking into account literals.
+Return nil if no complete line has arrived."
   (when (re-search-forward (concat imap-server-eol "\\|{\\([0-9]+\\)}"
                                   imap-server-eol)
                           nil t)
@@ -1426,7 +1673,7 @@ literals. Return nil if no complete line has arrived."
       (if (< (point-max) (+ pos len))
          nil
        (goto-char (+ pos len))
-       (buffer-substring-no-properties pos (+ pos len))))))
+       (buffer-substring pos (+ pos len))))))
 
 ;;   string          = quoted / literal
 ;;
@@ -1440,13 +1687,20 @@ literals. Return nil if no complete line has arrived."
 ;;   TEXT-CHAR       = <any CHAR except CR and LF>
 
 (defsubst imap-parse-string ()
-  (let (strstart strend)
-    (cond ((and (eq (char-after (point)) ?\")
-               (setq strstart (point))
-               (setq strend (search-forward "\"" nil t 2)))
-          (buffer-substring-no-properties (1+ strstart) (1- strend)))
-         ((eq (char-after) ?{)
-          (imap-parse-literal)))))
+  (cond ((eq (char-after) ?\")
+        (forward-char 1)
+        (let ((p (point)) (name ""))
+          (skip-chars-forward "^\"\\\\")
+          (setq name (buffer-substring p (point)))
+          (while (eq (char-after) ?\\)
+            (setq p (1+ (point)))
+            (forward-char 2)
+            (skip-chars-forward "^\"\\\\")
+            (setq name (concat name (buffer-substring p (point)))))
+          (forward-char 1)
+          name))
+       ((eq (char-after) ?{)
+        (imap-parse-literal))))
 
 ;;   nil             = "NIL"
 
@@ -1737,6 +1991,9 @@ literals. Return nil if no complete line has arrived."
 ;;   resp-text-atom  = 1*<any ATOM-CHAR except "]">
 
 (defun imap-parse-resp-text-code ()
+  ;; xxx next line for stalker communigate pro 3.3.1 bug
+  (when (looking-at " \\[")
+    (imap-forward))
   (when (eq (char-after) ?\[)
     (imap-forward)
     (cond ((search-forward "PERMANENTFLAGS " nil t)
@@ -1957,12 +2214,15 @@ literals. Return nil if no complete line has arrived."
 ;;                       ; revisions of this specification.
 
 (defun imap-parse-flag-list ()
-  (let ((str (buffer-substring-no-properties
-             (point) (search-forward ")" nil t)))
-       pos)
-    (while (setq pos (string-match "\\\\" str (and pos (+ 2 pos))))
-      (setq str (replace-match "\\\\" nil t str)))
-    (mapcar 'symbol-name (read str))))
+  (let (flag-list start)
+    (assert (eq (char-after) ?\())
+    (while (and (not (eq (char-after) ?\)))
+               (setq start (progn (imap-forward) (point)))
+               (> (skip-chars-forward "^ )" (imap-point-at-eol)) 0))
+      (push (buffer-substring start (point)) flag-list))
+    (assert (eq (char-after) ?\)))
+    (imap-forward)
+    (nreverse flag-list)))
 
 ;;   envelope        = "(" env-date SP env-subject SP env-from SP env-sender SP
 ;;                     env-reply-to SP env-to SP env-cc SP env-bcc SP
@@ -1991,36 +2251,39 @@ literals. Return nil if no complete line has arrived."
 (defun imap-parse-envelope ()
   (when (eq (char-after) ?\()
     (imap-forward)
-    (vector (prog1 (imap-parse-nstring)      ;; date
+    (vector (prog1 (imap-parse-nstring);; date
              (imap-forward))
-           (prog1 (imap-parse-nstring)      ;; subject
+           (prog1 (imap-parse-nstring);; subject
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; from
+           (prog1 (imap-parse-address-list);; from
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; sender
+           (prog1 (imap-parse-address-list);; sender
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; reply-to
+           (prog1 (imap-parse-address-list);; reply-to
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; to
+           (prog1 (imap-parse-address-list);; to
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; cc
+           (prog1 (imap-parse-address-list);; cc
              (imap-forward))
-           (prog1 (imap-parse-address-list) ;; bcc
+           (prog1 (imap-parse-address-list);; bcc
              (imap-forward))
-           (prog1 (imap-parse-nstring)      ;; in-reply-to
+           (prog1 (imap-parse-nstring);; in-reply-to
              (imap-forward))
-           (prog1 (imap-parse-nstring)      ;; message-id
+           (prog1 (imap-parse-nstring);; message-id
              (imap-forward)))))
 
 ;;   body-fld-param  = "(" string SP string *(SP string SP string) ")" / nil
 
 (defsubst imap-parse-string-list ()
-  (cond ((eq (char-after) ?\()                      ;; body-fld-param
+  (cond ((eq (char-after) ?\();; body-fld-param
         (let (strlist str)
           (imap-forward)
           (while (setq str (imap-parse-string))
             (push str strlist)
-            (imap-forward))
+            ;; buggy stalker communigate pro 3.0 doesn't print SPC
+            ;; between body-fld-param's sometimes
+            (or (eq (char-after) ?\")
+                (imap-forward)))
           (nreverse strlist)))
        ((imap-parse-nil)
         nil)))
@@ -2060,7 +2323,7 @@ literals. Return nil if no complete line has arrived."
 
 (defsubst imap-parse-body-ext ()
   (let (ext)
-    (when (eq (char-after) ?\ )                   ;; body-fld-dsp
+    (when (eq (char-after) ?\ );; body-fld-dsp
       (imap-forward)
       (let (dsp)
        (if (eq (char-after) ?\()
@@ -2072,12 +2335,12 @@ literals. Return nil if no complete line has arrived."
              (imap-forward))
          (assert (imap-parse-nil)))
        (push (nreverse dsp) ext))
-      (when (eq (char-after) ?\ )                ;; body-fld-lang
+      (when (eq (char-after) ?\ );; body-fld-lang
        (imap-forward)
        (if (eq (char-after) ?\()
            (push (imap-parse-string-list) ext)
          (push (imap-parse-nstring) ext))
-       (while (eq (char-after) ?\ )             ;; body-extension
+       (while (eq (char-after) ?\ );; body-extension
          (imap-forward)
          (setq ext (append (imap-parse-body-extension) ext)))))
     ext))
@@ -2151,37 +2414,45 @@ literals. Return nil if no complete line has arrived."
          (let (subbody)
            (while (and (eq (char-after) ?\()
                        (setq subbody (imap-parse-body)))
+             ;; buggy stalker communigate pro 3.0 insert a SPC between
+             ;; parts in multiparts
+             (when (and (eq (char-after) ?\ )
+                        (eq (char-after (1+ (point))) ?\())
+               (imap-forward))
              (push subbody body))
            (imap-forward)
-           (push (imap-parse-string) body)               ;; media-subtype
-           (when (eq (char-after) ?\ )                   ;; body-ext-mpart:
+           (push (imap-parse-string) body);; media-subtype
+           (when (eq (char-after) ?\ );; body-ext-mpart:
              (imap-forward)
-             (if (eq (char-after) ?\()                   ;; body-fld-param
+             (if (eq (char-after) ?\();; body-fld-param
                  (push (imap-parse-string-list) body)
                (push (and (imap-parse-nil) nil) body))
              (setq body
-                   (append (imap-parse-body-ext) body))) ;; body-ext-...
+                   (append (imap-parse-body-ext) body)));; body-ext-...
            (assert (eq (char-after) ?\)))
            (imap-forward)
            (nreverse body))
 
-       (push (imap-parse-string) body)                   ;; media-type
+       (push (imap-parse-string) body);; media-type
        (imap-forward)
-       (push (imap-parse-string) body)                   ;; media-subtype
+       (push (imap-parse-string) body);; media-subtype
        (imap-forward)
        ;; next line for Sun SIMS bug
        (and (eq (char-after) ? ) (imap-forward))
-       (if (eq (char-after) ?\()                         ;; body-fld-param
+       (if (eq (char-after) ?\();; body-fld-param
            (push (imap-parse-string-list) body)
          (push (and (imap-parse-nil) nil) body))
        (imap-forward)
-       (push (imap-parse-nstring) body)                  ;; body-fld-id
+       (push (imap-parse-nstring) body);; body-fld-id
        (imap-forward)
-       (push (imap-parse-nstring) body)                  ;; body-fld-desc
+       (push (imap-parse-nstring) body);; body-fld-desc
        (imap-forward)
-       (push (imap-parse-string) body)                   ;; body-fld-enc
+       ;; next `or' for Sun SIMS bug, it regard body-fld-enc as a
+       ;; nstring and return NIL instead of defaulting back to 7BIT
+       ;; as the standard says.
+       (push (or (imap-parse-nstring) "7BIT") body);; body-fld-enc
        (imap-forward)
-       (push (imap-parse-number) body)                   ;; body-fld-octets
+       (push (imap-parse-number) body);; body-fld-octets
 
        ;; ok, we're done parsing the required parts, what comes now is one
        ;; of three things:
@@ -2191,131 +2462,134 @@ literals. Return nil if no complete line has arrived."
        ;; body-ext-1part (then we're parsing body-type-basic)
        ;;
        ;; the problem is that the two first are in turn optionally followed
-       ;; by the third. So we parse the first two here (if there are any)...
+       ;; by the third.  So we parse the first two here (if there are any)...
 
        (when (eq (char-after) ?\ )
          (imap-forward)
          (let (lines)
-           (cond ((eq (char-after) ?\()                  ;; body-type-msg:
-                  (push (imap-parse-envelope) body)      ;; envelope
-                  (imap-forward)
-                  (push (imap-parse-body) body)          ;; body
+           (cond ((eq (char-after) ?\();; body-type-msg:
+                  (push (imap-parse-envelope) body);; envelope
                   (imap-forward)
-                  (push (imap-parse-number) body))       ;; body-fld-lines
-                 ((setq lines (imap-parse-number))       ;; body-type-text:
-                  (push lines body))                     ;; body-fld-lines
+                  (push (imap-parse-body) body);; body
+                  ;; buggy stalker communigate pro 3.0 doesn't print
+                  ;; number of lines in message/rfc822 attachment
+                  (if (eq (char-after) ?\))
+                      (push 0 body)
+                    (imap-forward)
+                    (push (imap-parse-number) body))) ;; body-fld-lines
+                 ((setq lines (imap-parse-number))    ;; body-type-text:
+                  (push lines body))                  ;; body-fld-lines
                  (t
-                  (backward-char)))))                    ;; no match...
+                  (backward-char)))))                 ;; no match...
 
        ;; ...and then parse the third one here...
 
-       (when (eq (char-after) ?\ )                       ;; body-ext-1part:
+       (when (eq (char-after) ?\ );; body-ext-1part:
          (imap-forward)
-         (push (imap-parse-nstring) body)                ;; body-fld-md5
+         (push (imap-parse-nstring) body);; body-fld-md5
          (setq body (append (imap-parse-body-ext) body)));; body-ext-1part..
     
        (assert (eq (char-after) ?\)))
        (imap-forward)
        (nreverse body)))))
 
-(when imap-debug ; (untrace-all)
+(when imap-debug                       ; (untrace-all)
   (require 'trace)
   (buffer-disable-undo (get-buffer-create imap-debug))
-  (mapc (lambda (f) (trace-function-background f imap-debug)) 
-        '(
-imap-read-passwd
-imap-utf7-encode
-imap-utf7-decode
-imap-error-text
-imap-kerberos4s-p
-imap-kerberos4-open
-imap-ssl-p
-imap-ssl-open-2
-imap-ssl-open-1
-imap-ssl-open
-imap-network-p
-imap-network-open
-imap-interactive-login
-imap-kerberos4a-p
-imap-kerberos4-auth
-imap-cram-md5-p
-imap-cram-md5-auth
-imap-login-p
-imap-login-auth
-imap-anonymous-p
-imap-anonymous-auth
-imap-open-1
-imap-open
-imap-opened
-imap-authenticate
-imap-close
-imap-capability
-imap-namespace
-imap-send-command-wait
-imap-mailbox-put
-imap-mailbox-get
-imap-mailbox-map-1
-imap-mailbox-map
-imap-current-mailbox
-imap-current-mailbox-p-1
-imap-current-mailbox-p
-imap-mailbox-select-1
-imap-mailbox-select
-imap-mailbox-examine
-imap-mailbox-unselect
-imap-mailbox-expunge
-imap-mailbox-close
-imap-mailbox-create-1
-imap-mailbox-create
-imap-mailbox-delete
-imap-mailbox-rename
-imap-mailbox-lsub
-imap-mailbox-list
-imap-mailbox-subscribe
-imap-mailbox-unsubscribe
-imap-mailbox-status
-imap-mailbox-acl-get
-imap-mailbox-acl-set
-imap-mailbox-acl-delete
-imap-current-message
-imap-list-to-message-set
-imap-fetch-asynch
-imap-fetch
-imap-message-put
-imap-message-get
-imap-message-map
-imap-search
-imap-message-flag-permanent-p
-imap-message-flags-set
-imap-message-flags-del
-imap-message-flags-add
-imap-message-copyuid-1
-imap-message-copyuid
-imap-message-copy
-imap-message-appenduid-1
-imap-message-appenduid
-imap-message-append
-imap-body-lines
-imap-envelope-from
-imap-send-command-1
-imap-send-command
-imap-wait-for-tag
-imap-sentinel
-imap-find-next-line
-imap-arrival-filter
-imap-parse-greeting
-imap-parse-response
-imap-parse-resp-text
-imap-parse-resp-text-code
-imap-parse-data-list
-imap-parse-fetch
-imap-parse-status
-imap-parse-acl
-imap-parse-flag-list
-imap-parse-envelope
-imap-parse-body-extension
-imap-parse-body
-         )))
+  (mapcar (lambda (f) (trace-function-background f imap-debug)) 
+         '(
+           imap-read-passwd
+           imap-utf7-encode
+           imap-utf7-decode
+           imap-error-text
+           imap-kerberos4s-p
+           imap-kerberos4-open
+           imap-ssl-p
+           imap-ssl-open
+           imap-network-p
+           imap-network-open
+           imap-interactive-login
+           imap-kerberos4a-p
+           imap-kerberos4-auth
+           imap-cram-md5-p
+           imap-cram-md5-auth
+           imap-login-p
+           imap-login-auth
+           imap-anonymous-p
+           imap-anonymous-auth
+           imap-open-1
+           imap-open
+           imap-opened
+           imap-authenticate
+           imap-close
+           imap-capability
+           imap-namespace
+           imap-send-command-wait
+           imap-mailbox-put
+           imap-mailbox-get
+           imap-mailbox-map-1
+           imap-mailbox-map
+           imap-current-mailbox
+           imap-current-mailbox-p-1
+           imap-current-mailbox-p
+           imap-mailbox-select-1
+           imap-mailbox-select
+           imap-mailbox-examine-1
+           imap-mailbox-examine
+           imap-mailbox-unselect
+           imap-mailbox-expunge
+           imap-mailbox-close
+           imap-mailbox-create-1
+           imap-mailbox-create
+           imap-mailbox-delete
+           imap-mailbox-rename
+           imap-mailbox-lsub
+           imap-mailbox-list
+           imap-mailbox-subscribe
+           imap-mailbox-unsubscribe
+           imap-mailbox-status
+           imap-mailbox-acl-get
+           imap-mailbox-acl-set
+           imap-mailbox-acl-delete
+           imap-current-message
+           imap-list-to-message-set
+           imap-fetch-asynch
+           imap-fetch
+           imap-message-put
+           imap-message-get
+           imap-message-map
+           imap-search
+           imap-message-flag-permanent-p
+           imap-message-flags-set
+           imap-message-flags-del
+           imap-message-flags-add
+           imap-message-copyuid-1
+           imap-message-copyuid
+           imap-message-copy
+           imap-message-appenduid-1
+           imap-message-appenduid
+           imap-message-append
+           imap-body-lines
+           imap-envelope-from
+           imap-send-command-1
+           imap-send-command
+           imap-wait-for-tag
+           imap-sentinel
+           imap-find-next-line
+           imap-arrival-filter
+           imap-parse-greeting
+           imap-parse-response
+           imap-parse-resp-text
+           imap-parse-resp-text-code
+           imap-parse-data-list
+           imap-parse-fetch
+           imap-parse-status
+           imap-parse-acl
+           imap-parse-flag-list
+           imap-parse-envelope
+           imap-parse-body-extension
+           imap-parse-body
+           )))
        
 (provide 'imap)
 
index ebc9cec..324563a 100644 (file)
 
 (defvar byte-compile-default-warnings)
 
-(or (featurep 'path-util)
-    (load "apel/path-util"))
-(add-path "apel")
-(add-path "flim")
-(add-path "semi")
-
 (defun maybe-fbind (args)
   (while args
     (or (fboundp (car args))
-       (fset (car args) 'ignore))
+       (defalias (car args) 'ignore))
     (setq args (cdr args))))
 
 (defun maybe-bind (args)
   (mapcar (lambda (var) (unless (boundp var) (set var nil))) args))
 
-(if (string-match "XEmacs" emacs-version)
+(maybe-fbind '(babel-fetch
+              babel-wash create-image decode-coding-string display-graphic-p
+              find-image font-create-object gnus-mule-get-coding-system
+              font-lock-set-defaults
+              image-size image-type-available-p insert-image
+              make-temp-file message-xmas-redefine
+              mail-aliases-setup mm-copy-tree
+              mule-write-region-no-coding-system put-image
+              rmail-select-summary rmail-summary-exists rmail-update-summary
+              sc-cite-regexp set-font-family set-font-size temp-directory
+              url-view-url vcard-pretty-print
+              url-insert-file-contents
+              w3-coding-system-for-mime-charset w3-prepare-buffer w3-region
+              widget-make-intangible x-defined-colors))
+
+(maybe-bind '(adaptive-fill-first-line-regexp
+             adaptive-fill-regexp babel-history babel-translations
+             default-enable-multibyte-characters
+             display-time-mail-function imap-password mail-mode-hook
+             mc-pgp-always-sign
+             nnoo-definition-alist
+             url-current-callback-func url-be-asynchronous
+             url-current-callback-data url-working-buffer
+             url-current-mime-headers w3-meta-charset-content-type-regexp
+             w3-meta-content-type-charset-regexp))
+
+(if (featurep 'xemacs)
     (progn
       (defvar track-mouse nil)
-      (maybe-fbind '(posn-point
-                    event-start x-popup-menu
-                    facemenu-get-face window-at coordinates-in-window-p
-                    compute-motion x-defined-colors easy-menu-create-keymaps
-                    read-event internal-find-face internal-next-face-id
-                    make-face-internal set-frame-face-alist frame-face-alist
-                    facemenu-add-new-face make-face-x-resource-internal
-                    set-font-size set-font-family posn-window
-                    run-with-idle-timer mouse-minibuffer-check window-edges
-                    event-click-count track-mouse read-event mouse-movement-p
-                    event-end mouse-scroll-subr overlay-lists delete-overlay
-                    set-face-stipple mail-abbrevs-setup
-                    make-char-table set-char-table-range font-create-object
-                    x-color-values widget-make-intangible error-message-string
-                    w3-form-encode-xwfu gnus-mule-get-coding-system
-                    decode-coding-string mail-aliases-setup
-                    url-view-url w3-prepare-buffer
-                    set-buffer-multibyte
-                    find-non-ascii-charset-region char-charset
-                    find-charset-region
-                    find-coding-systems-region get-charset-property
-                    coding-system-get w3-region
-                    w3-coding-system-for-mime-charset
-                    rmail-summary-exists rmail-select-summary
-                    rmail-update-summary url-retrieve
-                    temp-directory babel-fetch babel-wash
-                    find-coding-systems-for-charsets sc-cite-regexp))
-      (maybe-bind '(global-face-data
-                   mark-active transient-mark-mode mouse-selection-click-count
-                   mouse-selection-click-count-buffer buffer-display-table
-                   font-lock-defaults user-full-name user-login-name
-                   gnus-newsgroup-name gnus-article-x-face-too-ugly
+      (maybe-fbind '(char-charset
+                    coding-system-get compute-motion coordinates-in-window-p
+                    delete-overlay easy-menu-create-keymaps
+                    error-message-string event-click-count event-end
+                    event-start facemenu-add-new-face facemenu-get-face
+                    find-charset-region find-coding-systems-for-charsets
+                    find-coding-systems-region find-non-ascii-charset-region
+                    frame-face-alist get-charset-property internal-find-face
+                    internal-next-face-id mail-abbrevs-setup make-char-table
+                    make-face-internal make-face-x-resource-internal
+                    make-overlay mouse-minibuffer-check mouse-movement-p
+                    mouse-scroll-subr overlay-buffer overlay-end
+                    overlay-get overlay-lists overlay-put
+                    overlay-start posn-point posn-window
+                    read-event read-event run-with-idle-timer
+                    set-buffer-multibyte set-char-table-range
+                    set-face-stipple set-frame-face-alist track-mouse
+                    url-retrieve w3-form-encode-xwfu window-at
+                    window-edges x-color-values x-popup-menu))
+      (maybe-bind '(buffer-display-table
+                   buffer-file-coding-system font-lock-defaults
+                   global-face-data gnus-article-x-face-too-ugly
                    gnus-newsgroup-charset gnus-newsgroup-emphasis-alist
-                   mail-mode-hook
-                   adaptive-fill-first-line-regexp adaptive-fill-regexp
-                   url-current-mime-headers buffer-file-coding-system
-                   w3-image-mappings url-current-mime-type
-                   w3-meta-content-type-charset-regexp
-                   w3-meta-charset-content-type-regexp
-                   url-current-callback-func url-current-callback-data
-                   url-be-asynchronous temporary-file-directory
-                   babel-translations babel-history)))
-  (maybe-bind '(mail-mode-hook
-               enable-multibyte-characters browse-url-browser-function
-               adaptive-fill-first-line-regexp adaptive-fill-regexp
-               url-current-mime-headers help-echo-owns-message
-               w3-meta-content-type-charset-regexp
-               w3-meta-charset-content-type-regexp
-               babel-translations babel-history))
-  (maybe-fbind '(color-instance-rgb-components
-                temp-directory
-                glyph-width annotation-glyph window-pixel-width glyph-height
-                window-pixel-height map-extents
-                make-color-instance color-instance-name specifier-instance
-                device-type device-class get-popup-menu-response event-object
-                x-defined-colors read-color add-submenu set-font-family
-                font-create-object set-font-size frame-device find-face
-                set-extent-property make-extent characterp display-error
-                set-face-doc-string frame-property face-doc-string
-                button-press-event-p next-command-event
-                widget-make-intangible glyphp make-glyph set-glyph-image
-                set-glyph-property event-glyph glyph-property event-point
-                device-on-window-system-p make-gui-button Info-goto-node
-                pp-to-string color-name
-                gnus-mule-get-coding-system decode-coding-string
-                mail-aliases-setup
-                url-view-url w3-prepare-buffer
-                char-int
-                annotationp delete-annotation make-image-specifier
-                make-annotation events-to-keys
-                w3-do-setup w3-region
-                w3-coding-system-for-mime-charset
-                rmail-summary-exists rmail-select-summary rmail-update-summary
-                url-generic-parse-url valid-image-instantiator-format-p
-                babel-fetch babel-wash find-coding-systems-for-charsets
-                sc-cite-regexp smiley-encode-buffer function-max-args
-                map-extents)))
+                   gnus-newsgroup-name mark-active
+                   mouse-selection-click-count
+                   mouse-selection-click-count-buffer
+                   temporary-file-directory transient-mark-mode
+                   url-current-mime-type
+                   user-full-name user-login-name
+                   w3-image-mappings)))
+  (maybe-bind '(browse-url-browser-function
+               enable-multibyte-characters help-echo-owns-message))
+  (maybe-fbind '(Info-goto-node
+                add-submenu annotation-glyph annotationp babel-as-string
+                button-press-event-p char-int characterp color-instance-name
+                color-instance-rgb-components color-name delete-annotation
+                device-class device-on-window-system-p device-type
+                display-error event-glyph event-object event-point
+                events-to-keys face-doc-string find-face frame-device
+                frame-property get-popup-menu-response glyph-height
+                glyph-property glyph-width glyphp make-annotation
+                make-event
+                make-color-instance make-extent make-glyph make-gui-button
+                make-image-specifier map-extents next-command-event
+                pp-to-string read-color set-extent-property
+                set-face-doc-string set-glyph-image set-glyph-property
+                specifier-instance url-generic-parse-url
+                valid-image-instantiator-format-p w3-do-setup
+                window-pixel-height window-pixel-width)))
+
+;; T-gnus.
+(if (featurep 'xemacs)
+    (progn
+      (maybe-fbind '(propertize))
+      (maybe-bind '(mh-lib-progs)))
+  ;; FSFmacs
+  (maybe-fbind '(charsetp
+                function-max-args propertize smiley-encode-buffer))
+  (if (boundp 'MULE)
+      (progn
+       (maybe-fbind '(coding-system-get
+                      file-name-extension find-coding-systems-region
+                      get-charset-property))
+       (maybe-bind '(mh-lib-progs)))))
 
-(setq load-path (cons "." load-path))
 (require 'custom)
 
-(defun md5 (object &optional start end coding noerror)
+(defun nnkiboze-score-file (a)
   )
 
 (provide 'lpath)
index d9caac1..95a3359 100644 (file)
@@ -1,5 +1,6 @@
 ;;; mail-parse.el --- Interface functions for parsing mail
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
 (require 'rfc2047)
 (require 'rfc2045)
 
-(defalias 'mail-header-parse-content-type 'rfc2231-parse-string)
-(defalias 'mail-header-parse-content-disposition 'rfc2231-parse-string)
+(defalias 'mail-header-parse-content-type 'rfc2231-parse-qp-string)
+(defalias 'mail-header-parse-content-disposition 'rfc2231-parse-qp-string)
 (defalias 'mail-content-type-get 'rfc2231-get-value)
-(defalias 'mail-header-encode-parameter 'rfc2045-encode-string)
+;(defalias 'mail-header-encode-parameter 'rfc2045-encode-string)
+(defalias 'mail-header-encode-parameter 'rfc2231-encode-string)
 
 (defalias 'mail-header-remove-comments 'ietf-drums-remove-comments)
 (defalias 'mail-header-remove-whitespace 'ietf-drums-remove-whitespace)
+(defalias 'mail-header-strip 'ietf-drums-strip)
 (defalias 'mail-header-get-comment 'ietf-drums-get-comment)
 (defalias 'mail-header-parse-address 'ietf-drums-parse-address)
 (defalias 'mail-header-parse-addresses 'ietf-drums-parse-addresses)
index 82187fc..2566abc 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mail-prsvr.el --- Interface variables for parsing mail
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -29,6 +29,10 @@ This variable should never be set.  Instead, it should be bound by
 functions that wish to call mail-parse functions and let them know
 what the desired charset is to be.")
 
+(defvar mail-parse-mule-charset nil
+  "Default MULE charset used by low-level libraries.
+This variable should never be set.")
+
 (defvar mail-parse-ignored-charsets nil
   "Ignored charsets used by low-level libraries.
 This variable should never be set.  Instead, it should be bound by
index f288242..7b5f50e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mail-source.el --- functions for fetching mail
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile
+  (require 'cl)
+  (require 'imap)
+  (eval-when-compile (defvar display-time-mail-function)))
 (eval-and-compile
-  (autoload 'pop3-movemail "pop3"))
+  (defvar pop3-leave-mail-on-server)
+  (autoload 'pop3-movemail "pop3")
+  (autoload 'pop3-get-message-count "pop3")
+  (autoload 'nnheader-cancel-timer "nnheader")
+  (autoload 'nnheader-run-at-time "nnheader"))
 (require 'format-spec)
 
 (defgroup mail-source nil
   "The mail-fetching library."
   :group 'gnus)
 
+;; Define these at compile time to avoid dragging in imap always.
+(defconst mail-source-imap-authenticators
+  (eval-when-compile
+    (mapcar (lambda (a)
+             (list 'const (car a)))
+     imap-authenticator-alist)))
+(defconst mail-source-imap-streams
+  (eval-when-compile
+    (mapcar (lambda (a)
+             (list 'const (car a)))
+     imap-stream-alist)))
+
 (defcustom mail-sources nil
   "*Where the mail backends will look for incoming mail.
-This variable is a list of mail source specifiers."
+This variable is a list of mail source specifiers.
+See Info node `(gnus)Mail Source Specifiers'."
+  :group 'mail-source
+  :type `(repeat
+         (choice :format "%[Value Menu%] %v"
+                 :value (file)
+                 (cons :tag "Spool file"
+                       (const :format "" file)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t
+                                         (const :format "" :value :path)
+                                         file)))
+                 (cons :tag "Several files in a directory"
+                       (const :format "" directory)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t
+                                         (const :format "" :value :path)
+                                         (directory :tag "Path"))
+                                  (group :inline t
+                                         (const :format "" :value :suffix)
+                                         (string :tag "Suffix"))
+                                  (group :inline t
+                                         (const :format "" :value :predicate)
+                                         (function :tag "Predicate"))
+                                  (group :inline t
+                                         (const :format "" :value :prescript)
+                                         (string :tag "Prescript"))
+                                  (group :inline t
+                                         (const :format "" :value :postscript)
+                                         (string :tag "Postscript"))
+                                  (group :inline t
+                                         (const :format "" :value :plugged)
+                                         (boolean :tag "Plugged"))))
+                 (cons :tag "POP3 server"
+                       (const :format "" pop)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t
+                                         (const :format "" :value :server) 
+                                         (string :tag "Server"))
+                                  (group :inline t
+                                         (const :format "" :value :port) 
+                                         (choice :tag "Port"
+                                                 :value "pop3" 
+                                                 (number :format "%v")
+                                                 (string :format "%v")))
+                                  (group :inline t
+                                         (const :format "" :value :user)
+                                         (string :tag "User"))
+                                  (group :inline t
+                                         (const :format "" :value :password)
+                                         (string :tag "Password"))
+                                  (group :inline t
+                                         (const :format "" :value :program)
+                                         (string :tag "Program"))
+                                  (group :inline t
+                                         (const :format "" :value :prescript)
+                                         (string :tag "Prescript"))
+                                  (group :inline t
+                                         (const :format "" :value :postscript)
+                                         (string :tag "Postscript"))
+                                  (group :inline t
+                                         (const :format "" :value :function)
+                                         (function :tag "Function"))
+                                  (group :inline t
+                                         (const :format "" 
+                                                :value :authentication)
+                                         (choice :tag "Authentication"
+                                                 :value apop
+                                                 (const password)
+                                                 (const apop)))
+                                  (group :inline t
+                                         (const :format "" :value :plugged)
+                                         (boolean :tag "Plugged"))))
+                 (cons :tag "Maildir (qmail, postfix...)"
+                       (const :format "" maildir)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t
+                                         (const :format "" :value :path)
+                                         (directory :tag "Path"))
+                                  (group :inline t
+                                         (const :format "" :value :plugged)
+                                         (boolean :tag "Plugged"))))
+                 (cons :tag "IMAP server"
+                       (const :format "" imap)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t
+                                         (const :format "" :value :server)
+                                         (string :tag "Server"))
+                                  (group :inline t
+                                         (const :format "" :value :port)
+                                         (choice :tag "Port" 
+                                                 :value 143 
+                                                 number string))
+                                  (group :inline t
+                                         (const :format "" :value :user)
+                                         (string :tag "User"))
+                                  (group :inline t
+                                         (const :format "" :value :password)
+                                         (string :tag "Password"))
+                                  (group :inline t
+                                         (const :format "" :value :stream)
+                                         (choice :tag "Stream"
+                                                 :value network
+                                                 ,@mail-source-imap-streams))
+                                  (group :inline t
+                                         (const :format ""
+                                                :value :authenticator)
+                                         (choice :tag "Authenticator"
+                                                 :value login
+                                                 ,@mail-source-imap-authenticators))
+                                  (group :inline t
+                                         (const :format "" :value :mailbox)
+                                         (string :tag "Mailbox"
+                                                 :value "INBOX"))
+                                  (group :inline t
+                                         (const :format "" :value :predicate)
+                                         (string :tag "Predicate" 
+                                                 :value "UNSEEN UNDELETED"))
+                                  (group :inline t
+                                         (const :format "" :value :fetchflag)
+                                         (string :tag "Fetchflag"
+                                                 :value  "\\Deleted"))
+                                  (group :inline t
+                                         (const :format ""
+                                                :value :dontexpunge)
+                                         (boolean :tag "Dontexpunge"))
+                                  (group :inline t
+                                         (const :format "" :value :plugged)
+                                         (boolean :tag "Plugged"))))
+                 (cons :tag "Webmail server"
+                       (const :format "" webmail)
+                       (checklist :tag "Options" :greedy t
+                                  (group :inline t 
+                                        (const :format "" :value :subtype)
+                                        ;; Should be generated from
+                                        ;; `webmail-type-definition', but we
+                                        ;; can't require webmail without W3.
+                                        (choice :tag "Subtype"
+                                                :value hotmail
+                                                (const hotmail)
+                                                (const yahoo)
+                                                (const netaddress)
+                                                (const netscape)
+                                                (const my-deja)))
+                                  (group :inline t
+                                         (const :format "" :value :user)
+                                         (string :tag "User"))
+                                  (group :inline t
+                                         (const :format "" :value :password)
+                                         (string :tag "Password"))
+                                  (group :inline t
+                                         (const :format ""
+                                                :value :dontexpunge)
+                                         (boolean :tag "Dontexpunge"))
+                                  (group :inline t
+                                         (const :format "" :value :plugged)
+                                         (boolean :tag "Plugged")))))))
+
+(defcustom mail-source-primary-source nil
+  "*Primary source for incoming mail.
+If non-nil, this maildrop will be checked periodically for new mail."
   :group 'mail-source
   :type 'sexp)
 
@@ -55,24 +234,47 @@ This variable is a list of mail source specifiers."
   :group 'mail-source
   :type 'integer)
 
-(defcustom mail-source-delete-incoming nil
+(defcustom mail-source-delete-incoming t
   "*If non-nil, delete incoming files after handling."
   :group 'mail-source
   :type 'boolean)
 
+(defcustom mail-source-incoming-file-prefix "Incoming"
+  "Prefix for file name for storing incoming mail"
+  :group 'mail-source
+  :type 'string)
+
+(defcustom mail-source-report-new-mail-interval 5
+  "Interval in minutes between checks for new mail."
+  :group 'mail-source
+  :type 'number)
+
+(defcustom mail-source-idle-time-delay 5
+  "Number of idle seconds to wait before checking for new mail."
+  :group 'mail-source
+  :type 'number)
+
 ;;; Internal variables.
 
 (defvar mail-source-string ""
   "A dynamically bound string that says what the current mail source is.")
 
+(defvar mail-source-new-mail-available nil
+  "Flag indicating when new mail is available.")
+
 (eval-and-compile
+  (defvar mail-source-common-keyword-map
+    '((:plugged))
+    "Mapping from keywords to default values.
+Common keywords should be listed here.")
+
   (defvar mail-source-keyword-map
     '((file
        (:prescript)
        (:prescript-delay)
        (:postscript)
        (:path (or (getenv "MAIL")
-                 (concat "/usr/spool/mail/" (user-login-name)))))
+                 (expand-file-name (user-login-name) rmail-spool-directory))))
       (directory
        (:path)
        (:suffix ".spool")
@@ -88,9 +290,11 @@ This variable is a list of mail source specifiers."
        (:function)
        (:password)
        (:connection)
-       (:authentication password))
+       (:authentication password)
+       (:leave))
       (maildir
-       (:path "~/Maildir/new/")
+       (:path (or (getenv "MAILDIR") "~/Maildir/"))
+       (:subdirs ("new" "cur"))
        (:function))
       (imap
        (:server (getenv "MAILHOST"))
@@ -101,12 +305,13 @@ This variable is a list of mail source specifiers."
        (:password)
        (:mailbox "INBOX")
        (:predicate "UNSEEN UNDELETED")
-       (:fetchflag "\Deleted")
+       (:fetchflag "\\Deleted")
        (:dontexpunge))
       (webmail
        (:subtype hotmail)
        (:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER")))
        (:password)
+       (:dontexpunge)
        (:authentication password)))
     "Mapping from keywords to default values.
 All keywords that can be used must be listed here."))
@@ -122,12 +327,14 @@ All keywords that can be used must be listed here."))
 
 (defvar mail-source-password-cache nil)
 
+(defvar mail-source-plugged t)
+
 ;;; Functions
 
 (eval-and-compile
   (defun mail-source-strip-keyword (keyword)
-  "Strip the leading colon off the KEYWORD."
-  (intern (substring (symbol-name keyword) 1))))
+    "Strip the leading colon off the KEYWORD."
+    (intern (substring (symbol-name keyword) 1))))
 
 (eval-and-compile
   (defun mail-source-bind-1 (type)
@@ -169,6 +376,39 @@ the `mail-source-keyword-map' variable."
               (mail-source-value value)
             (mail-source-value (cadr default)))))))
 
+(eval-and-compile
+  (defun mail-source-bind-common-1 ()
+    (let* ((defaults mail-source-common-keyword-map)
+          default bind)
+      (while (setq default (pop defaults))
+       (push (list (mail-source-strip-keyword (car default))
+                   nil)
+             bind))
+      bind)))
+
+(defun mail-source-set-common-1 (source)
+  (let* ((type (pop source))
+        (defaults mail-source-common-keyword-map)
+        (defaults-1 (cdr (assq type mail-source-keyword-map)))
+        default value keyword)
+    (while (setq default (pop defaults))
+      (set (mail-source-strip-keyword (setq keyword (car default)))
+          (if (setq value (plist-get source keyword))
+              (mail-source-value value)
+            (if (setq value (assq  keyword defaults-1))
+                (mail-source-value (cadr value))
+              (mail-source-value (cadr default))))))))
+
+(defmacro mail-source-bind-common (source &rest body)
+  "Return a `let' form that binds all common variables.
+See `mail-source-bind'."
+  `(let ,(mail-source-bind-common-1)
+     (mail-source-set-common-1 source)
+     ,@body))
+
+(put 'mail-source-bind-common 'lisp-indent-function 1)
+(put 'mail-source-bind-common 'edebug-form-spec '(form body))
+
 (defun mail-source-value (value)
   "Return the value of VALUE."
   (cond
@@ -188,24 +428,26 @@ the `mail-source-keyword-map' variable."
 CALLBACK will be called with the name of the file where (some of)
 the mail from SOURCE is put.
 Return the number of files that were found."
-  (save-excursion
-    (let ((function (cadr (assq (car source) mail-source-fetcher-alist)))
-         (found 0))
-      (unless function
-       (error "%S is an invalid mail source specification" source))
-      ;; If there's anything in the crash box, we do it first.
-      (when (file-exists-p mail-source-crash-box)
-       (message "Processing mail from %s..." mail-source-crash-box)
-       (setq found (mail-source-callback
-                     callback mail-source-crash-box)))
-      (+ found
-         (condition-case err
-             (funcall function source callback)
-           (error
-            (unless (yes-or-no-p
-                    (format "Mail source error (%s).  Continue? " err))
-              (error "Cannot get new mail."))
-            0))))))
+  (mail-source-bind-common source
+    (if (or mail-source-plugged plugged)
+       (save-excursion
+         (let ((function (cadr (assq (car source) mail-source-fetcher-alist)))
+               (found 0))
+           (unless function
+             (error "%S is an invalid mail source specification" source))
+           ;; If there's anything in the crash box, we do it first.
+           (when (file-exists-p mail-source-crash-box)
+             (message "Processing mail from %s..." mail-source-crash-box)
+             (setq found (mail-source-callback
+                          callback mail-source-crash-box)))
+           (+ found
+              (condition-case err
+                  (funcall function source callback)
+                (error
+                 (unless (yes-or-no-p
+                          (format "Mail source error (%s).  Continue? " err))
+                   (error "Cannot get new mail."))
+                 0))))))))
 
 (defun mail-source-make-complex-temp-name (prefix)
   (let ((newname (make-temp-name prefix))
@@ -233,7 +475,8 @@ Pass INFO on to CALLBACK."
          (let ((incoming
                 (mail-source-make-complex-temp-name
                  (expand-file-name
-                  "Incoming" mail-source-directory))))
+                  mail-source-incoming-file-prefix
+                  mail-source-directory))))
            (unless (file-exists-p (file-name-directory incoming))
              (make-directory (file-name-directory incoming) t))
            (rename-file mail-source-crash-box incoming t)))))))
@@ -384,7 +627,7 @@ If ARGS, PROMPT is used as an argument to `format'."
     (mail-source-run-script
      prescript
      (format-spec-make ?p password ?t mail-source-crash-box
-                                     ?s server ?P port ?u user)
+                      ?s server ?P port ?u user)
      prescript-delay)
     (let ((from (format "%s:%s:%s" server user port))
          (mail-source-string (format "pop:%s@%s" user server))
@@ -415,8 +658,20 @@ If ARGS, PROMPT is used as an argument to `format'."
                    (pop3-port port)
                    (pop3-authentication-scheme
                     (if (eq authentication 'apop) 'apop 'pass))
-                   (pop3-connection-type connection))
-               (save-excursion (pop3-movemail mail-source-crash-box))))))
+                   (pop3-connection-type connection)
+                   (pop3-leave-mail-on-server
+                    (or leave
+                        (and (boundp 'pop3-leave-mail-on-server)
+                             pop3-leave-mail-on-server))))
+               (condition-case err
+                   (save-excursion (pop3-movemail mail-source-crash-box))
+                 (error
+                  ;; We nix out the password in case the error
+                  ;; was because of a wrong password being given.
+                  (setq mail-source-password-cache
+                        (delq (assoc from mail-source-password-cache)
+                              mail-source-password-cache))
+                  (signal (car err) (cdr err))))))))
       (if result
          (progn
            (when (eq authentication 'password)
@@ -424,6 +679,9 @@ If ARGS, PROMPT is used as an argument to `format'."
                (push (cons from password) mail-source-password-cache)))
            (prog1
                (mail-source-callback callback server)
+             ;; Update display-time's mail flag, if relevant.
+             (if (equal source mail-source-primary-source)
+                 (setq mail-source-new-mail-available nil))
              (mail-source-run-script
               postscript
               (format-spec-make ?p password ?t mail-source-crash-box
@@ -435,17 +693,160 @@ If ARGS, PROMPT is used as an argument to `format'."
                    mail-source-password-cache))
        0))))
 
+(defun mail-source-check-pop (source)
+  "Check whether there is new mail."
+  (mail-source-bind (pop source)
+    (let ((from (format "%s:%s:%s" server user port))
+         (mail-source-string (format "pop:%s@%s" user server))
+         result)
+      (when (eq authentication 'password)
+       (setq password
+             (or password
+                 (cdr (assoc from mail-source-password-cache))
+                 (mail-source-read-passwd
+                  (format "Password for %s at %s: " user server))))
+       (unless (assoc from mail-source-password-cache)
+         (push (cons from password) mail-source-password-cache)))
+      (when server
+       (setenv "MAILHOST" server))
+      (setq result
+           (cond
+            ;; No easy way to check whether mail is waiting for these.
+            (program)
+            (function)
+            ;; The default is to use pop3.el.
+            (t
+             (let ((pop3-password password)
+                   (pop3-maildrop user)
+                   (pop3-mailhost server)
+                   (pop3-port port)
+                   (pop3-authentication-scheme
+                    (if (eq authentication 'apop) 'apop 'pass)))
+               (condition-case err
+                   (save-excursion (pop3-get-message-count))
+                 (error
+                  ;; We nix out the password in case the error
+                  ;; was because of a wrong password being given.
+                  (setq mail-source-password-cache
+                        (delq (assoc from mail-source-password-cache)
+                              mail-source-password-cache))
+                  (signal (car err) (cdr err))))))))
+      (if result
+         ;; Inform display-time that we have new mail.
+         (setq mail-source-new-mail-available (> result 0))
+       ;; We nix out the password in case the error
+       ;; was because of a wrong password being given.
+       (setq mail-source-password-cache
+             (delq (assoc from mail-source-password-cache)
+                   mail-source-password-cache)))
+      result)))
+
+(defun mail-source-new-mail-p ()
+  "Handler for `display-time' to indicate when new mail is available."
+  ;; Only report flag setting; flag is updated on a different schedule.
+  mail-source-new-mail-available)
+
+
+(defvar mail-source-report-new-mail nil)
+(defvar mail-source-report-new-mail-timer nil)
+(defvar mail-source-report-new-mail-idle-timer nil)
+
+(eval-when-compile 
+  (if (featurep 'xemacs)
+      (require 'itimer)
+    (require 'timer)))
+
+(defun mail-source-start-idle-timer ()
+  ;; Start our idle timer if necessary, so we delay the check until the
+  ;; user isn't typing.
+  (unless mail-source-report-new-mail-idle-timer
+    (setq mail-source-report-new-mail-idle-timer
+         (run-with-idle-timer
+          mail-source-idle-time-delay
+          nil
+          (lambda ()
+            (mail-source-check-pop mail-source-primary-source)
+            (setq mail-source-report-new-mail-idle-timer nil))))
+    ;; Since idle timers created when Emacs is already in the idle
+    ;; state don't get activated until Emacs _next_ becomes idle, we
+    ;; need to force our timer to be considered active now.  We do
+    ;; this by being naughty and poking the timer internals directly
+    ;; (element 0 of the vector is nil if the timer is active).
+    (aset mail-source-report-new-mail-idle-timer 0 nil)))
+
+(defun mail-source-report-new-mail (arg)
+  "Toggle whether to report when new mail is available.
+This only works when `display-time' is enabled."
+  (interactive "P")
+  (if (not mail-source-primary-source)
+      (error "Need to set `mail-source-primary-source' to check for new mail."))
+  (let ((on (if (null arg)
+               (not mail-source-report-new-mail)
+             (> (prefix-numeric-value arg) 0))))
+    (setq mail-source-report-new-mail on)
+    (and mail-source-report-new-mail-timer
+        (nnheader-cancel-timer mail-source-report-new-mail-timer))
+    (and mail-source-report-new-mail-idle-timer
+        (nnheader-cancel-timer mail-source-report-new-mail-idle-timer))
+    (setq mail-source-report-new-mail-timer nil)
+    (setq mail-source-report-new-mail-idle-timer nil)
+    (if on
+       (progn
+         (require 'time)
+         ;; display-time-mail-function is an Emacs 21 feature.
+         (setq display-time-mail-function #'mail-source-new-mail-p)
+         ;; Set up the main timer.
+         (setq mail-source-report-new-mail-timer
+               (nnheader-run-at-time
+                (* 60 mail-source-report-new-mail-interval)
+                (* 60 mail-source-report-new-mail-interval)
+                #'mail-source-start-idle-timer))
+         ;; When you get new mail, clear "Mail" from the mode line.
+         (add-hook 'nnmail-post-get-new-mail-hook
+                   'display-time-event-handler)
+         (message "Mail check enabled"))
+      (setq display-time-mail-function nil)
+      (remove-hook 'nnmail-post-get-new-mail-hook
+                  'display-time-event-handler)
+      (message "Mail check disabled"))))
+
 (defun mail-source-fetch-maildir (source callback)
   "Fetcher for maildir sources."
   (mail-source-bind (maildir source)
     (let ((found 0)
-         (mail-source-string (format "maildir:%s" path)))
-      (dolist (file (directory-files path t))
-       (when (and (file-regular-p file)
-                  (not (if function
-                           (funcall function file mail-source-crash-box)
-                         (rename-file file mail-source-crash-box))))
-         (incf found (mail-source-callback callback file))))
+         mail-source-string)
+      (unless (string-match "/$" path)
+       (setq path (concat path "/")))
+      (dolist (subdir subdirs)
+       (when (file-directory-p (concat path subdir))
+         (setq mail-source-string (format "maildir:%s%s" path subdir))
+         (dolist (file (directory-files (concat path subdir) t))
+           (when (and (not (file-directory-p file))
+                      (not (if function
+                               (funcall function file mail-source-crash-box)
+                             (let ((coding-system-for-write
+                                    nnheader-text-coding-system)
+                                   (coding-system-for-read
+                                    nnheader-text-coding-system)
+                                   (output-coding-system
+                                    nnheader-text-coding-system)
+                                   (input-coding-system
+                                    nnheader-text-coding-system))
+                               (with-temp-file mail-source-crash-box
+                                 (insert-file-contents file)
+                                 (goto-char (point-min))
+;;;                               ;; Unix mail format
+;;;                              (unless (looking-at "\n*From ")
+;;;                                (insert "From maildir " 
+;;;                                        (current-time-string) "\n"))
+;;;                              (while (re-search-forward "^From " nil t)
+;;;                                (replace-match ">From "))
+;;;                               (goto-char (point-max))
+;;;                              (insert "\n\n")
+                                 ;; MMDF mail format
+                                 (insert "\001\001\001\001\n"))
+                               (delete-file file)))))
+             (incf found (mail-source-callback callback file))))))
       found)))
 
 (eval-and-compile
@@ -460,20 +861,38 @@ If ARGS, PROMPT is used as an argument to `format'."
   (autoload 'imap-error-text "imap")
   (autoload 'imap-message-flags-add "imap")
   (autoload 'imap-list-to-message-set "imap")
+  (autoload 'imap-range-to-message-set "imap")
   (autoload 'nnheader-ms-strip-cr "nnheader"))
 
+(defvar mail-source-imap-file-coding-system 'binary
+  "Coding system for the crashbox made by `mail-source-fetch-imap'.")
+
 (defun mail-source-fetch-imap (source callback)
   "Fetcher for imap sources."
   (mail-source-bind (imap source)
-    (let ((found 0)
-         (buf (get-buffer-create (generate-new-buffer-name " *imap source*")))
+    (let ((from (format "%s:%s:%s" server user port))
+         (found 0)
+         (buf (get-buffer-create
+               (format " *imap source %s:%s:%s *" server user mailbox)))
          (mail-source-string (format "imap:%s:%s" server mailbox))
          remove)
       (if (and (imap-open server port stream authentication buf)
-              (imap-authenticate user password buf)
+              (imap-authenticate
+               user (or (cdr (assoc from mail-source-password-cache))
+                        password) buf)
               (imap-mailbox-select mailbox nil buf))
-         (let (str (coding-system-for-write 'binary))
+         (let ((coding-system-for-write mail-source-imap-file-coding-system)
+               (output-coding-system mail-source-imap-file-coding-system)
+               str)
            (with-temp-file mail-source-crash-box
+             ;; Avoid converting 8-bit chars from inserted strings to
+             ;; multibyte.
+             (set-buffer-multibyte nil)
+             ;; remember password
+             (with-current-buffer buf
+               (when (or imap-password
+                         (assoc from mail-source-password-cache))
+                 (push (cons from imap-password) mail-source-password-cache)))
              ;; if predicate is nil, use all uids
              (dolist (uid (imap-search (or predicate "1:*") buf))
                (when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf))
@@ -488,12 +907,18 @@ If ARGS, PROMPT is used as an argument to `format'."
            (incf found (mail-source-callback callback server))
            (when (and remove fetchflag)
              (imap-message-flags-add
-              (imap-list-to-message-set remove) fetchflag nil buf))
+              (imap-range-to-message-set (gnus-compress-sequence remove))
+              fetchflag nil buf))
            (if dontexpunge
                (imap-mailbox-unselect buf)
              (imap-mailbox-close buf))
            (imap-close buf))
        (imap-close buf)
+       ;; We nix out the password in case the error
+       ;; was because of a wrong password being given.
+       (setq mail-source-password-cache
+             (delq (assoc from mail-source-password-cache)
+                   mail-source-password-cache))
        (error (imap-error-text buf)))
       (kill-buffer buf)
       found)))
@@ -504,13 +929,23 @@ If ARGS, PROMPT is used as an argument to `format'."
 (defun mail-source-fetch-webmail (source callback)
   "Fetch for webmail source."
   (mail-source-bind (webmail source)
-    (when (eq authentication 'password)
-      (setq password
-           (or password
-               (mail-source-read-passwd
-                (format "Password for %s at %s: " user subtype)))))
-    (webmail-fetch mail-source-crash-box subtype user password)
-    (mail-source-callback callback (symbol-name subtype))))
+    (let ((mail-source-string (format "webmail:%s:%s" subtype user))
+         (webmail-newmail-only dontexpunge)
+         (webmail-move-to-trash-can (not dontexpunge)))
+      (when (eq authentication 'password)
+       (setq password
+             (or password
+                 (cdr (assoc (format "webmail:%s:%s" subtype user) 
+                             mail-source-password-cache))
+                 (mail-source-read-passwd
+                  (format "Password for %s at %s: " user subtype))))
+       (when (and password
+                  (not (assoc (format "webmail:%s:%s" subtype user) 
+                              mail-source-password-cache)))
+         (push (cons (format "webmail:%s:%s" subtype user) password) 
+               mail-source-password-cache)))
+      (webmail-fetch mail-source-crash-box subtype user password)
+      (mail-source-callback callback (symbol-name subtype)))))
 
 (provide 'mail-source)
 
diff --git a/lisp/mailheader.el b/lisp/mailheader.el
deleted file mode 100644 (file)
index 796ae75..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-;;; mail-header.el --- Mail header parsing, merging, formatting
-
-;; Copyright (C) 1996 by Free Software Foundation, Inc.
-
-;; Author: Erik Naggum <erik@arcana.naggum.no>
-;; Keywords: tools, mail, news
-
-;; 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.
-
-;;; Commentary:
-
-;; This package provides an abstraction to RFC822-style messages, used in
-;; mail news, and some other systems.  The simple syntactic rules for such
-;; headers, such as quoting and line folding, are routinely reimplemented
-;; in many individual packages.  This package removes the need for this
-;; redundancy by representing message headers as association lists,
-;; offering functions to extract the set of headers from a message, to
-;; parse individual headers, to merge sets of headers, and to format a set
-;; of headers.
-
-;; The car of each element in the message-header alist is a symbol whose
-;; print name is the name of the header, in all lower-case.  The cdr of an
-;; element depends on the operation.  After extracting headers from a
-;; message, it is a string, the value of the header.  An extracted set of
-;; headers may be parsed further, which may turn it into a list, whose car
-;; is the original value and whose subsequent elements depend on the
-;; header.  For formatting, it is evaluated to obtain the strings to be
-;; inserted.  For merging, one set of headers consists of strings, while
-;; the other set will be evaluated with the symbols in the first set of
-;; headers bound to their respective values.
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-;; Make the byte-compiler shut up.
-(defvar headers)
-
-(defun mail-header-extract ()
-  "Extract headers from current buffer after point.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (let ((message-headers ()) (top (point))
-       start end)
-    (while (and (setq start (point))
-               (> (skip-chars-forward "^\0- :") 0)
-               (eq (char-after) ?:)
-               (setq end (point))
-               (progn (forward-char)
-                      (> (skip-chars-forward " \t") 0)))
-      (let ((header (intern (downcase (buffer-substring start end))))
-           (value (list (buffer-substring
-                         (point) (progn (end-of-line) (point))))))
-       (while (progn (forward-char) (> (skip-chars-forward " \t") 0))
-         (push (buffer-substring (point) (progn (end-of-line) (point)))
-               value))
-       (push (if (cdr value)
-                 (cons header (mapconcat #'identity (nreverse value) " "))
-               (cons header (car value)))
-             message-headers)))
-    (goto-char top)
-    (nreverse message-headers)))
-
-(defun mail-header-extract-no-properties ()
-  "Extract headers from current buffer after point, without properties.
-Returns a header alist, where each element is a cons cell (name . value),
-where NAME is a symbol, and VALUE is the string value of the header having
-that name."
-  (mapcar
-   (lambda (elt)
-     (set-text-properties 0 (length (cdr elt)) nil (cdr elt))
-     elt)
-   (mail-header-extract)))
-
-(defun mail-header-parse (parsing-rules headers)
-  "Apply PARSING-RULES to HEADERS.
-PARSING-RULES is an alist whose keys are header names (symbols) and whose
-value is a parsing function.  The function takes one argument, a string,
-and return a list of values, which will destructively replace the value
-associated with the key in HEADERS, after being prepended with the original
-value."
-  (dolist (rule parsing-rules)
-    (let ((header (assq (car rule) headers)))
-      (when header
-       (if (consp (cdr header))
-           (setf (cddr header) (funcall (cdr rule) (cadr header)))
-         (setf (cdr header)
-               (cons (cdr header) (funcall (cdr rule) (cdr header))))))))
-  headers)
-
-(defsubst mail-header (header &optional header-alist)
-  "Return the value associated with header HEADER in HEADER-ALIST.
-If the value is a string, it is the original value of the header.  If the
-value is a list, its first element is the original value of the header,
-with any subsequent elements being the result of parsing the value.
-If HEADER-ALIST is nil, the dynamically bound variable `headers' is used."
-  (cdr (assq header (or header-alist headers))))
-
-(defun mail-header-set (header value &optional header-alist)
-  "Set the value associated with header HEADER to VALUE in HEADER-ALIST.
-HEADER-ALIST defaults to the dynamically bound variable `headers' if nil.
-See `mail-header' for the semantics of VALUE."
-  (let* ((alist (or header-alist headers))
-        (entry (assq header alist)))
-    (if entry
-       (setf (cdr entry) value)
-      (nconc alist (list (cons header value)))))
-  value)
-
-(defsetf mail-header (header &optional header-alist) (value)
-  `(mail-header-set ,header ,value ,header-alist))
-
-(defun mail-header-merge (merge-rules headers)
-  "Return a new header alist with MERGE-RULES applied to HEADERS.
-MERGE-RULES is an alist whose keys are header names (symbols) and whose
-values are forms to evaluate, the results of which are the new headers.  It
-should be a string or a list of string.  The first element may be nil to
-denote that the formatting functions must use the remaining elements, or
-skip the header altogether if there are no other elements.
-  The macro `mail-header' can be used to access headers in HEADERS."
-  (mapcar
-   (lambda (rule)
-     (cons (car rule) (eval (cdr rule))))
-   merge-rules))
-
-(defvar mail-header-format-function
-  (lambda (header value)
-    "Function to format headers without a specified formatting function."
-    (insert (capitalize (symbol-name header))
-           ": "
-           (if (consp value) (car value) value)
-           "\n")))
-
-(defun mail-header-format (format-rules headers)
-  "Use FORMAT-RULES to format HEADERS and insert into current buffer.
-FORMAT-RULES is an alist whose keys are header names (symbols), and whose
-values are functions that format the header, the results of which are
-inserted, unless it is nil.  The function takes two arguments, the header
-symbol, and the value of that header.  If the function itself is nil, the
-default action is to insert the value of the header, unless it is nil.
-The headers are inserted in the order of the FORMAT-RULES.
-A key of t represents any otherwise unmentioned headers.
-A key of nil has as its value a list of defaulted headers to ignore."
-  (let ((ignore (append (cdr (assq nil format-rules))
-                       (mapcar #'car format-rules))))
-    (dolist (rule format-rules)
-      (let* ((header (car rule))
-            (value (mail-header header)))
-       (cond ((null header) 'ignore)
-             ((eq header t)
-              (dolist (defaulted headers)
-                (unless (memq (car defaulted) ignore)
-                  (let* ((header (car defaulted))
-                         (value (cdr defaulted)))
-                    (if (cdr rule)
-                        (funcall (cdr rule) header value)
-                      (funcall mail-header-format-function header value))))))
-             (value
-              (if (cdr rule)
-                  (funcall (cdr rule) header value)
-                (funcall mail-header-format-function header value))))))
-    (insert "\n")))
-
-(provide 'mailheader)
-
-;;; mail-header.el ends here
index a6c19aa..a246b1a 100644 (file)
@@ -360,10 +360,10 @@ Returns a vector of 16 bytes containing the message digest."
      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))))
+    (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
@@ -378,7 +378,7 @@ hash of a portion of OBJECT.
 The optional CODING and NOERROR arguments are ignored.  They are only
 placeholders to ensure the compatibility with XEmacsen with file-coding or
 Mule support."
- (let ((buffer nil))
+  (let ((buffer nil))
     (unwind-protect
        (save-excursion
          (setq buffer (generate-new-buffer " *md5-work*"))
index c1cb1ff..7448fc8 100644 (file)
@@ -1,5 +1,6 @@
-;;; message.el --- composing mail and news messages
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;;; message.el --- composing mail and news messages  -*- coding: iso-latin-1 -*-
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -8,7 +9,7 @@
 ;;     Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
 ;;     Katsumi Yamaoka  <yamaoka@jpl.org>
 ;;     Kiyokazu SUTO    <suto@merry.xmath.ous.ac.jp>
-;; Keywords: mail, news, MIME
+;; Keywords: mail, news
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
-(eval-when-compile (require 'smtp))
+(eval-when-compile
+  (require 'cl)
+  (require 'smtp)
+  (defvar gnus-list-identifiers))      ; gnus-sum is required where necessary
+
 (require 'mailheader)
 (require 'nnheader)
-(require 'easymenu)
-(require 'custom)
-(if (string-match "XEmacs\\|Lucid" emacs-version)
-    (require 'mail-abbrevs)
-  (require 'mailabbrev))
+;; This is apparently necessary even though things are autoloaded:
+(if (featurep 'xemacs)
+    (require 'mail-abbrevs))
 (require 'mime-edit)
 (eval-when-compile (require 'static))
 
 ;; Avoid byte-compile warnings.
 (eval-when-compile
   (require 'mail-parse)
-  (require 'mm-bodies)
-  (require 'mm-encode)
-  (require 'mml)
-  )
+  (require 'mml))
 
 (defgroup message '((user-mail-address custom-variable)
                    (user-full-name custom-variable))
@@ -190,7 +189,7 @@ Otherwise, most addresses look like `angles', but they look like
   :group 'message-headers)
 
 (defcustom message-syntax-checks nil
-  ; Guess this one shouldn't be easy to customize...
+  ;; Guess this one shouldn't be easy to customize...
   "*Controls what syntax checks should not be performed on outgoing posts.
 To disable checking of long signatures, for instance, add
  `(signature . disabled)' to this list.
@@ -198,11 +197,12 @@ To disable checking of long signatures, for instance, add
 Don't touch this variable unless you really know what you're doing.
 
 Checks include subject-cmsg multiple-headers sendsys message-id from
-long-lines control-chars size new-text redirected-followup signature
-approved sender empty empty-headers message-id from subject
-shorten-followup-to existing-newsgroups buffer-file-name unchanged
-newsgroups."
-  :group 'message-news)
+long-lines control-chars size new-text quoting-style
+redirected-followup signature approved sender empty empty-headers
+message-id from subject shorten-followup-to existing-newsgroups
+buffer-file-name unchanged newsgroups."
+  :group 'message-news
+  :type '(repeat sexp))
 
 (defcustom message-required-news-headers
   '(From Newsgroups Subject Date Message-ID
@@ -245,7 +245,7 @@ included.  Organization, Lines and User-Agent are optional."
   :group 'message-headers
   :type 'regexp)
 
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:"
   "*Header lines matching this regexp will be deleted before posting.
 It's best to delete old Path and Date headers before posting to avoid
 any confusion."
@@ -378,11 +378,6 @@ If t, use `message-user-organization-file'."
   :group 'message-forwarding
   :type 'string)
 
-(defcustom message-signature-before-forwarded-message t
-  "*If non-nil, put the signature before any included forwarded message."
-  :group 'message-forwarding
-  :type 'boolean)
-
 (defcustom message-included-forward-headers
   "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-\\|^Message-ID:\\|^References:\\|^Content-\\|^MIME-Version:"
   "*Regexp matching headers to be included in forwarded messages."
@@ -391,7 +386,7 @@ If t, use `message-user-organization-file'."
 
 (defcustom message-make-forward-subject-function
   'message-forward-subject-author-subject
- "*A list of functions that are called to generate a subject header for forwarded messages.
+  "*A list of functions that are called to generate a subject header for forwarded messages.
 The subject generated by the previous function is passed into each
 successive function.
 
@@ -401,15 +396,25 @@ The provided functions are:
       newsgroup)), in brackets followed by the subject
 * message-forward-subject-fwd (Subject of article with 'Fwd:' prepended
       to it."
- :group 'message-forwarding
- :type '(radio (function-item message-forward-subject-author-subject)
-              (function-item message-forward-subject-fwd)))
+  :group 'message-forwarding
+  :type '(radio (function-item message-forward-subject-author-subject)
+               (function-item message-forward-subject-fwd)))
 
 (defcustom message-forward-as-mime t
   "*If non-nil, forward messages as an inline/rfc822 MIME section.  Otherwise, directly inline the old message in the forwarded message."
   :group 'message-forwarding
   :type 'boolean)
 
+(defcustom message-forward-show-mml t
+  "*If non-nil, forward messages are shown as mml.  Otherwise, forward messages are unchanged."
+  :group 'message-forwarding
+  :type 'boolean)
+
+(defcustom message-forward-before-signature t
+  "*If non-nil, put forwarded message before signature, else after."
+  :group 'message-forwarding
+  :type 'boolean)
+
 (defcustom message-wash-forwarded-subjects nil
   "*If non-nil, try to remove as much old cruft as possible from the subject of messages before generating the new subject of a forward."
   :group 'message-forwarding
@@ -420,7 +425,7 @@ The provided functions are:
   :group 'message-interface
   :type 'regexp)
 
-(defcustom message-forward-ignored-headers nil
+(defcustom message-forward-ignored-headers "^Content-Transfer-Encoding:\\|^X-Gnus"
   "*All headers that match this regexp will be deleted when forwarding a message."
   :group 'message-forwarding
   :type '(choice (const :tag "None" nil)
@@ -431,7 +436,7 @@ The provided functions are:
   :group 'message-insertion
   :type 'regexp)
 
-(defcustom message-cancel-message "I am canceling my own article."
+(defcustom message-cancel-message "I am canceling my own article.\n"
   "Message to be inserted in the cancel message."
   :group 'message-interface
   :type 'string)
@@ -532,10 +537,9 @@ is never used."
                 (const :tag "always" use)
                 (const :tag "ask" ask)))
 
-;; stuff relating to broken sendmail in MMDF
 (defcustom message-sendmail-f-is-evil nil
-  "*Non-nil means that \"-f username\" should not be added to the sendmail
-command line, because it is even more evil than leaving it out."
+  "*Non-nil means that \"-f username\" should not be added to the sendmail command line.
+Doing so would be even more evil than leaving it out."
   :group 'message-sending
   :type 'boolean)
 
@@ -555,6 +559,11 @@ might set this variable to '(\"-f\" \"you@some.where\")."
   :group 'message-sending
   :type '(repeat string))
 
+(defvar message-cater-to-broken-inn t
+  "Non-nil means Gnus should not fold the `References' header.
+Folding `References' makes ancient versions of INN create incorrect
+NOV lines.")
+
 (defvar gnus-post-method)
 (defvar gnus-select-method)
 (defcustom message-post-method
@@ -637,9 +646,21 @@ The function `message-supersede' runs this hook."
   :group 'message-insertion)
 
 (defcustom message-yank-add-new-references t
-  "*Non-nil means new IDs will be added to \"References\" field when an
-article is yanked by the command `message-yank-original' interactively."
-  :type 'boolean
+  "Non-nil means new IDs will be added to \"References\" field when an
+article is yanked by the command `message-yank-original' interactively.
+If it is a symbol `message-id-only', only an ID from \"Message-ID\" field
+is used, otherwise IDs extracted from \"References\", \"In-Reply-To\" and
+\"Message-ID\" fields are used."
+  :type '(radio (const :tag "Do not add anything" nil)
+               (const :tag "From Message-Id, References and In-Reply-To fields" t)
+               (const :tag "From only Message-Id field." message-id-only))
+  :group 'message-insertion)
+
+(defcustom message-list-references-add-position nil
+  "Integer value means position for adding to \"References\" field when
+an article is yanked by the command `message-yank-original' interactively."
+  :type '(radio (const :tag "Add to last" nil)
+               (integer :tag "Position from last ID"))
   :group 'message-insertion)
 
 (defcustom message-indentation-spaces 3
@@ -746,8 +767,7 @@ these lines."
   :type 'message-header-lines)
 
 (defcustom message-default-news-headers ""
-  "*A string of header lines to be inserted in outgoing news
-articles."
+  "*A string of header lines to be inserted in outgoing news articles."
   :group 'message-headers
   :group 'message-news
   :type 'message-header-lines)
@@ -783,13 +803,13 @@ actually occur."
 (defvar message-user-agent nil
   "String of the form of PRODUCT/VERSION.  Used for User-Agent header field.")
 
-;; Ignore errors in case this is used in Emacs 19.
-;; Don't use ignore-errors because this is copied into loaddefs.el.
+(static-when (boundp 'MULE)
+  (require 'reporter));; `define-mail-user-agent' is here.
+
 ;;;###autoload
-(ignore-errors
-  (define-mail-user-agent 'message-user-agent
-    'message-mail 'message-send-and-exit
-    'message-kill-buffer 'message-send-hook))
+(define-mail-user-agent 'message-user-agent
+  'message-mail 'message-send-and-exit
+  'message-kill-buffer 'message-send-hook)
 
 (defvar message-mh-deletable-headers '(Message-ID Date Lines Sender)
   "If non-nil, delete the deletable headers before feeding to mh.")
@@ -827,18 +847,34 @@ Valid valued are `unique' and `unsent'."
   :type '(choice (const :tag "unique" unique)
                 (const :tag "unsent" unsent)))
 
-(defcustom message-default-charset nil
+(defcustom message-default-charset
+  (and (featurep 'xemacs) (not (featurep 'mule)) 'iso-8859-1)
   "Default charset used in non-MULE XEmacsen."
   :group 'message
   :type 'symbol)
 
-(defcustom message-dont-reply-to-names rmail-dont-reply-to-names
+(defcustom message-dont-reply-to-names
+  (and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names)
   "*A regexp specifying names to prune when doing wide replies.
 A value of nil means exclude your own name only."
   :group 'message
   :type '(choice (const :tag "Yourself" nil)
                 regexp))
 
+(defvar message-shoot-gnksa-feet nil
+  "*A list of GNKSA feet you are allowed to shoot.  
+Gnus gives you all the opportunity you could possibly want for
+shooting yourself in the foot.  Also, Gnus allows you to shoot the
+feet of Good Net-Keeping Seal of Approval. The following are foot
+candidates:
+`empty-article'     Allow you to post an empty article;
+`quoted-text-only'  Allow you to post quoted text only;
+`multiple-copies'   Allow you to post multiple copies.")
+
+(defsubst message-gnksa-enable-p (feature)
+  (or (not (listp message-shoot-gnksa-feet))
+      (memq feature message-shoot-gnksa-feet)))
+
 ;;; Internal variables.
 ;;; Well, not really internal.
 
@@ -1028,7 +1064,7 @@ before fontifying.")
 
 (eval-after-load "font-lock"
   '(defadvice font-lock-after-change-function
-     (before message-font-lock-save-last-position activate compile)
+     (before message-font-lock-save-last-position activate)
      "Save last cursor position before fontifying."
      (if (eq 'message-mode major-mode)
         (setq message-font-lock-last-position (point)))))
@@ -1123,7 +1159,7 @@ See also the documentations for the following variables:
     (setq message-font-lock-last-position nil)))
 
 (defvar message-font-lock-keywords-1
-  (let ((content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)"))
+  (let ((content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)\n?"))
     `((,(concat "^\\([Tt]o:\\)" content)
        (1 'message-header-name-face)
        (2 'message-header-to-face nil t))
@@ -1225,8 +1261,24 @@ The cdr of ech entry is a function for applying the face to a region.")
    (t nil))
   "Coding system to compose mail.")
 
+(defcustom message-send-mail-partially-limit 1000000
+  "The limitation of messages sent as message/partial.
+The lower bound of message size in characters, beyond which the message
+should be sent in several parts. If it is nil, the size is unlimited."
+  :group 'message-buffers
+  :type '(choice (const :tag "unlimited" nil)
+                (integer 1000000)))
+
+(defcustom message-alternative-emails nil
+  "A regexp to match the alternative email addresses.
+The first matched address (not primary one) is used in the From field."
+  :group 'message-headers
+  :type '(choice (const :tag "Always use primary" nil)
+                regexp))
+
 ;;; Internal variables.
 
+(defvar message-sending-message "Sending...")
 (defvar message-buffer-list nil)
 (defvar message-this-is-news nil)
 (defvar message-this-is-mail nil)
@@ -1272,10 +1324,10 @@ The cdr of ech entry is a function for applying the face to a region.")
      "\\([^\0-\b\n-\r\^?].*\\)? "
 
      ;; The time the message was sent.
-     "\\([^\0-\r \^?]+\\) +"                           ; day of the week
-     "\\([^\0-\r \^?]+\\) +"                           ; month
-     "\\([0-3]?[0-9]\\) +"                             ; day of month
-     "\\([0-2][0-9]:[0-5][0-9]\\(:[0-6][0-9]\\)?\\) *" ; time of day
+     "\\([^\0-\r \^?]+\\) +"           ; day of the week
+     "\\([^\0-\r \^?]+\\) +"           ; month
+     "\\([0-3]?[0-9]\\) +"             ; day of month
+     "\\([0-2][0-9]:[0-5][0-9]\\(:[0-6][0-9]\\)?\\) *" ; time of day
 
      ;; Perhaps a time zone, specified by an abbreviation, or by a
      ;; numeric offset.
@@ -1322,12 +1374,16 @@ The cdr of ech entry is a function for applying the face to a region.")
     (User-Agent))
   "Alist used for formatting headers.")
 
+(defvar        message-options nil
+  "Some saved answers when sending message.")
+
 (eval-and-compile
   (autoload 'message-setup-toolbar "messagexmas")
   (autoload 'mh-new-draft-name "mh-comp")
   (autoload 'mh-send-letter "mh-comp")
   (autoload 'gnus-point-at-eol "gnus-util")
   (autoload 'gnus-point-at-bol "gnus-util")
+  (autoload 'gnus-output-to-rmail "gnus-util")
   (autoload 'gnus-output-to-mail "gnus-util")
   (autoload 'mail-abbrev-in-expansion-header-p "mailabbrev")
   (autoload 'nndraft-request-associate-buffer "nndraft")
@@ -1336,6 +1392,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   (autoload 'gnus-request-post "gnus-int")
   (autoload 'gnus-copy-article-buffer "gnus-msg")
   (autoload 'gnus-alive-p "gnus-util")
+  (autoload 'gnus-group-name-charset "gnus-group")
   (autoload 'rmail-output "rmail")
   (autoload 'mu-cite-original "mu-cite"))
 
@@ -1370,9 +1427,19 @@ The cdr of ech entry is a function for applying the face to a region.")
   `(delete-region (progn (beginning-of-line) (point))
                  (progn (forward-line ,(or n 1)) (point))))
 
+(defun message-unquote-tokens (elems)
+  "Remove double quotes (\") from strings in list."
+  (mapcar (lambda (item)
+            (while (string-match "^\\(.*\\)\"\\(.*\\)$" item)
+              (setq item (concat (match-string 1 item)
+                                 (match-string 2 item))))
+            item)
+          elems))
+
 (defun message-tokenize-header (header &optional separator)
   "Split HEADER into a list of header elements.
-\",\" is used as the separator."
+SEPARATOR is a string of characters to be used as separators.  \",\"
+is used by default."
   (if (not header)
       nil
     (let ((regexp (format "[%s]+" (or separator ",")))
@@ -1402,7 +1469,7 @@ The cdr of ech entry is a function for applying the face to a region.")
                ((and (eq (char-after) ?\))
                      (not quoted))
                 (setq paren nil))))
-       (nreverse elems)))))
+        (nreverse elems)))))
 
 (defun message-mail-file-mbox-p (file)
   "Say whether FILE looks like a Unix mbox file."
@@ -1417,12 +1484,13 @@ The cdr of ech entry is a function for applying the face to a region.")
 (defun message-fetch-field (header &optional not-all)
   "The same as `mail-fetch-field', only remove all newlines."
   (let* ((inhibit-point-motion-hooks t)
+        (case-fold-search t)
         (value (mail-fetch-field header nil (not not-all))))
     (when value
       (while (string-match "\n[\t ]+" value)
        (setq value (replace-match " " t t value)))
-      ;; We remove all text props.
-      (format "%s" value))))
+      (set-text-properties 0 (length value) nil value)
+      value)))
 
 (defun message-narrow-to-field ()
   "Narrow the buffer to the header on the current line."
@@ -1445,10 +1513,10 @@ The cdr of ech entry is a function for applying the face to a region.")
       (unless (string-match "^\\([^:]+\\):[ \t]*[^ \t]" (car headers))
        (error "Invalid header `%s'" (car headers)))
       (setq hclean (match-string 1 (car headers)))
-    (save-restriction
-      (message-narrow-to-headers)
-      (unless (re-search-forward (concat "^" (regexp-quote hclean) ":") nil t)
-       (insert (car headers) ?\n))))
+      (save-restriction
+       (message-narrow-to-headers)
+       (unless (re-search-forward (concat "^" (regexp-quote hclean) ":") nil t)
+         (insert (car headers) ?\n))))
     (setq headers (cdr headers))))
 
 
@@ -1475,6 +1543,21 @@ The cdr of ech entry is a function for applying the face to a region.")
       (and (listp form) (eq (car form) 'lambda))
       (byte-code-function-p form)))
 
+(defun message-strip-list-identifiers (subject)
+  "Remove list identifiers in `gnus-list-identifiers'."
+  (require 'gnus-sum)                  ; for gnus-list-identifiers
+  (let ((regexp (if (stringp gnus-list-identifiers)
+                   gnus-list-identifiers
+                 (mapconcat 'identity gnus-list-identifiers " *\\|"))))
+    (if (string-match (concat "\\(\\(\\(Re: +\\)?\\(" regexp
+                               " *\\)\\)+\\(Re: +\\)?\\)") subject)
+       (concat (substring subject 0 (match-beginning 1))
+               (or (match-string 3 subject)
+                   (match-string 5 subject))
+               (substring subject
+                          (match-end 1)))
+      subject)))
+
 (defun message-strip-subject-re (subject)
   "Remove \"Re:\" from subject lines."
   (if (string-match message-subject-re-regexp subject)
@@ -1658,12 +1741,13 @@ Point is left at the beginning of the narrowed-to region."
   (define-key message-mode-map "\C-c\C-f\C-u" 'message-goto-summary)
   (define-key message-mode-map "\C-c\C-b" 'message-goto-body)
   (define-key message-mode-map "\C-c\C-i" 'message-goto-signature)
+  (define-key message-mode-map "\C-c\C-fc" 'message-goto-mail-copies-to)
 
   (define-key message-mode-map "\C-c\C-t" 'message-insert-to)
   (define-key message-mode-map "\C-c\C-n" 'message-insert-newsgroups)
 
   (define-key message-mode-map "\C-c\C-y" 'message-yank-original)
-  (define-key message-mode-map "\C-c\C-Y" 'message-yank-buffer)
+  (define-key message-mode-map "\C-c\M-\C-y" 'message-yank-buffer)
   (define-key message-mode-map "\C-c\C-q" 'message-fill-yanked-message)
   (define-key message-mode-map "\C-c\C-w" 'message-insert-signature)
   (define-key message-mode-map "\C-c\M-h" 'message-insert-headers)
@@ -1782,20 +1866,6 @@ M-RET    message-newline-and-reformat (break the line and reformat)."
              (error "Face %s not configured for %s mode" face mode-name)))
          "")
        facemenu-remove-face-function t)
-  (make-local-variable 'paragraph-separate)
-  (make-local-variable 'paragraph-start)
-  ;; `-- ' precedes the signature.  `-----' appears at the start of the
-  ;; lines that delimit forwarded messages.
-  ;; Lines containing just >= 3 dashes, perhaps after whitespace,
-  ;; are also sometimes used and should be separators.
-  (setq paragraph-start
-       (concat (regexp-quote mail-header-separator)
-               "$\\|[ \t]*[a-z0-9A-Z]*>+[ \t]*$\\|[ \t]*$\\|"
-               "-- $\\|---+$\\|"
-               page-delimiter
-               ;;!!! Uhm... shurely this can't be right?
-               "[> " (regexp-quote message-yank-prefix) "]+$"))
-  (setq paragraph-separate paragraph-start)
   (make-local-variable 'message-reply-headers)
   (setq message-reply-headers nil)
   (make-local-variable 'message-user-agent)
@@ -1805,10 +1875,18 @@ M-RET    message-newline-and-reformat (break the line and reformat)."
   (make-local-variable 'message-parameter-alist)
   (setq message-parameter-alist
        (copy-sequence message-startup-parameter-alist))
+  (message-setup-fill-variables)
   ;;(when (fboundp 'mail-hist-define-keys)
   ;;  (mail-hist-define-keys))
-  (when (string-match "XEmacs\\|Lucid" emacs-version)
-    (message-setup-toolbar))
+  (if (featurep 'xemacs)
+      (message-setup-toolbar)
+    (set (make-local-variable 'font-lock-defaults)
+        '((message-font-lock-keywords
+           message-font-lock-keywords-1
+           message-font-lock-keywords-2)
+          nil nil nil nil
+          (font-lock-mark-block-function . mark-paragraph))))
+  (set (make-local-variable 'message-font-lock-last-position) nil)
   (easy-menu-add message-mode-menu message-mode-map)
   (easy-menu-add message-mode-field-menu message-mode-map)
   ;; Allow mail alias things.
@@ -1817,27 +1895,42 @@ M-RET    message-newline-and-reformat (break the line and reformat)."
        (mail-abbrevs-setup)
       (mail-aliases-setup)))
   (message-set-auto-save-file-name)
-  (unless (string-match "XEmacs" emacs-version)
-    (set (make-local-variable 'font-lock-defaults)
-        '((message-font-lock-keywords
-           message-font-lock-keywords-1
-           message-font-lock-keywords-2)
-          nil nil nil nil
-          (font-lock-mark-block-function . mark-paragraph))))
-  (set (make-local-variable 'message-font-lock-last-position) nil)
+  (make-local-variable 'indent-tabs-mode) ;Turn off tabs for indentation.
+  (setq indent-tabs-mode nil)
+  (run-hooks 'text-mode-hook 'message-mode-hook))
+
+(defun message-setup-fill-variables ()
+  "Setup message fill variables."
+  (make-local-variable 'paragraph-separate)
+  (make-local-variable 'paragraph-start)
   (make-local-variable 'adaptive-fill-regexp)
-  (setq adaptive-fill-regexp
-       (concat "[ \t]*[-a-z0-9A-Z]*\\(>[ \t]*\\)+[ \t]*\\|"
-               adaptive-fill-regexp))
   (unless (boundp 'adaptive-fill-first-line-regexp)
     (setq adaptive-fill-first-line-regexp nil))
   (make-local-variable 'adaptive-fill-first-line-regexp)
-  (setq adaptive-fill-first-line-regexp
-       (concat "[ \t]*[-a-z0-9A-Z]*\\(>[ \t]*\\)+[ \t]*\\|"
-               adaptive-fill-first-line-regexp))
-  (make-local-variable 'indent-tabs-mode) ;Turn off tabs for indentation.
-  (setq indent-tabs-mode nil)
-  (run-hooks 'text-mode-hook 'message-mode-hook))
+  (make-local-variable 'auto-fill-inhibit-regexp)
+  (let ((quote-prefix-regexp
+         (concat
+          "[ \t]*"                      ; possible initial space
+          "\\(\\(" (regexp-quote message-yank-prefix) "\\|" ; user's prefix
+          "\\w+>\\|"                    ; supercite-style prefix
+          "[|:>]"                       ; standard prefix
+          "\\)[ \t]*\\)+")))            ; possible space after each prefix
+    (setq paragraph-start
+         (concat
+          (regexp-quote mail-header-separator) "$\\|"
+          "[ \t]*$\\|"                 ; blank lines
+          "-- $\\|"                    ; signature delimiter
+          "---+$\\|"                   ; delimiters for forwarded messages
+          page-delimiter "$\\|"        ; spoiler warnings
+          ".*wrote:$\\|"               ; attribution lines
+          quote-prefix-regexp "$"))    ; empty lines in quoted text
+    (setq paragraph-separate paragraph-start)
+    (setq adaptive-fill-regexp
+         (concat quote-prefix-regexp "\\|" adaptive-fill-regexp))
+    (setq adaptive-fill-first-line-regexp
+         (concat quote-prefix-regexp "\\|"
+                 adaptive-fill-first-line-regexp))
+    (setq auto-fill-inhibit-regexp "^[A-Z][^: \n\t]+:")))
 
 \f
 
@@ -1883,14 +1976,29 @@ M-RET    message-newline-and-reformat (break the line and reformat)."
   (message-position-on-field "Mail-Reply-To" "Subject"))
 
 (defun message-goto-mail-followup-to ()
-  "Move point to the Mail-Followup-To header."
+  "Move point to the Mail-Followup-To header.  If the header is newly created
+and To field contains only one address, the address is inserted in default."
   (interactive)
-  (message-position-on-field "Mail-Followup-To" "Subject"))
+  (unless (message-position-on-field "Mail-Followup-To" "Subject")
+    (let ((start (point))
+         addresses)
+      (save-restriction
+       (message-narrow-to-headers)
+       (setq addresses (split-string (mail-strip-quoted-names
+                                      (or (std11-fetch-field "to") ""))
+                                     "[ \f\t\n\r\v,]+"))
+       (when (eq 1 (length addresses))
+         (goto-char start)
+         (insert (car addresses))
+         (goto-char start))))))
 
 (defun message-goto-mail-copies-to ()
-  "Move point to the Mail-Copies-To header."
+  "Move point to the Mail-Copies-To header.  If the header is newly created,
+a string \"never\" is inserted in default."
   (interactive)
-  (message-position-on-field "Mail-Copies-To" "Subject"))
+  (unless (message-position-on-field "Mail-Copies-To" "Subject")
+    (insert "never")
+    (backward-char 5)))
 
 (defun message-goto-newsgroups ()
   "Move point to the Newsgroups header."
@@ -1960,9 +2068,28 @@ With the prefix argument FORCE, insert the header anyway."
             (mail-fetch-field "to")
             (not (string-match "\\` *\\'" (mail-fetch-field "to"))))
     (insert ", "))
-  (insert (or (message-fetch-reply-field "reply-to")
+  (insert (or (message-fetch-reply-field "mail-reply-to")
+             (message-fetch-reply-field "reply-to")
              (message-fetch-reply-field "from") "")))
 
+(defun message-widen-reply ()
+  "Widen the reply to include maximum recipients."
+  (interactive)
+  (let ((follow-to
+        (and message-reply-buffer
+             (buffer-name message-reply-buffer)
+             (save-excursion
+               (set-buffer message-reply-buffer)
+               (message-get-reply-headers t)))))
+    (save-excursion
+      (save-restriction
+       (message-narrow-to-headers)
+       (dolist (elem follow-to)
+         (message-remove-header (symbol-name (car elem)))
+         (goto-char (point-min))
+         (insert (symbol-name (car elem)) ": "
+                 (cdr elem) "\n"))))))
+
 (defun message-insert-newsgroups ()
   "Insert the Newsgroups header from the article being replied to."
   (interactive)
@@ -2088,16 +2215,9 @@ text was killed."
     ;; We build the table, if necessary.
     (when (or (not message-caesar-translation-table)
              (/= (aref message-caesar-translation-table ?a) (+ ?a n)))
-       (setq message-caesar-translation-table
-             (message-make-caesar-translation-table n)))
-    ;; Then we translate the region.  Do it this way to retain
-    ;; text properties.
-    (while (< b e)
-      (when (< (char-after b) 255)
-       (subst-char-in-region
-        b (1+ b) (char-after b)
-        (aref message-caesar-translation-table (char-after b))))
-      (incf b))))
+      (setq message-caesar-translation-table
+           (message-make-caesar-translation-table n)))
+    (translate-region b e message-caesar-translation-table)))
 
 (defun message-make-caesar-translation-table (n)
   "Create a rot table with offset N."
@@ -2134,11 +2254,8 @@ Mail and USENET news headers are not rotated."
     (save-restriction
       (when (message-goto-body)
         (narrow-to-region (point) (point-max)))
-      (let ((body (buffer-substring (point-min) (point-max))))
-        (unless (equal 0 (call-process-region
-                           (point-min) (point-max) program t t))
-            (insert body)
-            (message "%s failed" program))))))
+      (shell-command-on-region
+       (point-min) (point-max) program nil t))))
 
 (defun message-rename-buffer (&optional enter-string)
   "Rename the *message* buffer to \"*message* RECIPIENT\".
@@ -2205,7 +2322,7 @@ However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
       (message-delete-line))
     ;; Delete blank lines at the end of the buffer.
     (goto-char (point-max))
-    (unless (eolp)
+    (unless (bolp)
       (insert "\n"))
     (while (and (zerop (forward-line -1))
                (looking-at "$"))
@@ -2223,23 +2340,25 @@ However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
 (defun message-list-references (refs-list &rest refs-strs)
   "Add `Message-ID's which appear in REFS-STRS but not in REFS-LIST,
 to REFS-LIST."
-  (let (refs ref id)
+  (let (refs ref id saved-id)
+    (when (and refs-list
+              (integerp message-list-references-add-position))
+      (let ((pos message-list-references-add-position))
+       (while (and refs-list
+                   (> pos 0))
+         (push (pop refs-list) saved-id)
+         (setq pos (1- pos)))))
     (while refs-strs
-      (setq refs (car refs-strs)
-           refs-strs (cdr refs-strs))
-      (when refs
+      (when (setq refs (pop refs-strs))
        (setq refs (std11-parse-msg-ids (std11-lexical-analyze refs)))
        (while refs
-         (setq ref (car refs)
-               refs (cdr refs))
-         (when (eq (car ref) 'msg-id)
-           (setq id (concat "<"
-                            (mapconcat
-                             (function (lambda (p) (cdr p)))
-                             (cdr ref) "")
-                            ">"))
+         (when (eq (car (setq ref (pop refs))) 'msg-id)
+           (setq id (concat "<" (mapconcat 'cdr (cdr ref) "") ">"))
            (or (member id refs-list)
+               (member id saved-id)
                (push id refs-list))))))
+    (while saved-id
+      (push (pop saved-id) refs-list))
     refs-list))
 
 (defvar gnus-article-copy)
@@ -2256,7 +2375,8 @@ prefix, and don't delete any headers.
 
 In addition, if `message-yank-add-new-references' is non-nil and this
 command is called interactively, new IDs from the yanked article will
-be added to \"References\" field."
+be added to \"References\" field.
+\(See also `message-yank-add-new-references'.)"
   (interactive "P")
   (let ((modified (buffer-modified-p))
        (buffer (message-eval-parameter message-reply-buffer))
@@ -2281,8 +2401,10 @@ be added to \"References\" field."
            (std11-narrow-to-header)
            (when (setq refs (message-list-references
                              refs
-                             (or (message-fetch-field "References")
-                                 (message-fetch-field "In-Reply-To"))
+                             (unless (eq message-yank-add-new-references
+                                         'message-id-only)
+                               (or (message-fetch-field "References")
+                                   (message-fetch-field "In-Reply-To")))
                              (message-fetch-field "Message-ID")))
              (widen)
              (message-narrow-to-headers)
@@ -2331,7 +2453,20 @@ be added to \"References\" field."
         (when message-indent-citation-function
           (if (listp message-indent-citation-function)
               message-indent-citation-function
-            (list message-indent-citation-function)))))
+            (list message-indent-citation-function))))
+       (message-reply-headers (or message-reply-headers
+                                  (make-mail-header))))
+    (mail-header-set-from message-reply-headers
+                         (save-restriction
+                           (narrow-to-region
+                            (point)
+                            (if (search-forward "\n\n" nil t)
+                                (1- (point))
+                              (point-max)))
+                           (or (message-fetch-field "from")
+                               "unknown sender")))
+    ;; Allow undoing.
+    (undo-boundary)
     (goto-char end)
     (when (re-search-backward message-signature-separator start t)
       ;; Also peel off any blank lines before the signature.
@@ -2360,7 +2495,18 @@ be added to \"References\" field."
           (when message-indent-citation-function
             (if (listp message-indent-citation-function)
                 message-indent-citation-function
-              (list message-indent-citation-function)))))
+              (list message-indent-citation-function))))
+         (message-reply-headers (or message-reply-headers
+                                    (make-mail-header))))
+      (mail-header-set-from message-reply-headers
+                           (save-restriction
+                             (narrow-to-region
+                              (point)
+                              (if (search-forward "\n\n" nil t)
+                                  (1- (point))
+                                (point-max)))
+                             (or (message-fetch-field "from")
+                                 "unknown sender")))
       (goto-char start)
       (while functions
        (funcall (pop functions)))
@@ -2525,10 +2671,12 @@ The text will also be indented the normal way."
 
 (defun message-send (&optional arg)
   "Send the message in the current buffer.
-If `message-interactive' is non-nil, wait for success indication
-or error messages, and inform user.
-Otherwise any failure is reported in a message back to
-the user from the mailer."
+If `message-interactive' is non-nil, wait for success indication or
+error messages, and inform user.
+Otherwise any failure is reported in a message back to the user from
+the mailer.
+The usage of ARG is defined by the instance that called Message.
+It should typically alter the sending method in some way or other."
   (interactive "P")
   ;; Disabled test.
   (when (or (buffer-modified-p)
@@ -2539,31 +2687,45 @@ the user from the mailer."
     (let ((inhibit-read-only t))
       (put-text-property (point-min) (point-max) 'read-only nil))
     (run-hooks 'message-send-hook)
-    (message "Sending...")
+    (message-fix-before-sending)
+    (message message-sending-message)
     (let ((message-encoding-buffer
           (message-generate-new-buffer-clone-locals " message encoding"))
          (message-edit-buffer (current-buffer))
          (message-mime-mode mime-edit-mode-flag)
          (alist message-send-method-alist)
          (success t)
-         elem sent)
+         elem sent
+         (message-options message-options))
+      (message-options-set-recipient)
       (save-excursion
        (set-buffer message-encoding-buffer)
        (erase-buffer)
-       (insert-buffer message-edit-buffer)
+       ;; Avoid copying text props.
+       (let (message-invisibles)
+         (insert
+          (with-current-buffer message-edit-buffer
+            (setq message-invisibles (message-find-invisible-regions))
+            (buffer-substring-no-properties (point-min) (point-max))))
+         ;; Inherit the invisible property of texts to make MIME-Edit
+         ;; find the MIME part boundaries.
+         (dolist (region message-invisibles)
+           (put-text-property (car region) (cdr region) 'invisible t)))
        (funcall message-encode-function)
-       (message-fix-before-sending)
        (while (and success
                    (setq elem (pop alist)))
-         (when (or (not (funcall (cadr elem)))
-                   (and (or (not (memq (car elem)
-                                       message-sent-message-via))
-                            (y-or-n-p
-                             (format
-                              "Already sent message via %s; resend? "
-                              (car elem))))
-                        (setq success (funcall (caddr elem) arg))))
-           (setq sent t))))
+         (when (funcall (cadr elem))
+           (when (and (or (not (memq (car elem)
+                                     message-sent-message-via))
+                          (if (or (message-gnksa-enable-p 'multiple-copies)
+                                  (not (eq (car elem) 'news)))
+                              (y-or-n-p
+                               (format
+                                "Already sent message via %s; resend? "
+                                (car elem)))
+                            (error "Denied posting -- multiple copies.")))
+                      (setq success (funcall (caddr elem) arg)))
+             (setq sent t)))))
       (unless (or sent (not success))
        (error "No methods specified to send by"))
       (prog1
@@ -2572,7 +2734,7 @@ the user from the mailer."
            (save-excursion
              (run-hooks 'message-sent-hook))
            (message "Sending...done")
-           ;; Mark the buffer as unmodified and delete autosave.
+           ;; Mark the buffer as unmodified and delete auto-save.
            (set-buffer-modified-p nil)
            (delete-auto-save-file-if-necessary t)
            (message-disassociate-draft)
@@ -2600,19 +2762,61 @@ the user from the mailer."
 (put 'message-check 'lisp-indent-function 1)
 (put 'message-check 'edebug-form-spec '(form body))
 
+;; This function will be used by MIME-Edit when inserting invisible parts.
+(defun message-invisible-region (start end)
+  (if (featurep 'xemacs)
+      (if (save-excursion
+           (goto-char start)
+           (eq (following-char) ?\n))
+         (setq start (1+ start)))
+    (if (save-excursion
+         (goto-char (1- end))
+         (eq (following-char) ?\n))
+       (setq end (1- end))))
+  (put-text-property start end 'invisible t)
+  (if (eq 'message-mode major-mode)
+      (put-text-property start end 'message-invisible t)))
+
+(eval-after-load "invisible"
+  '(defalias 'invisible-region 'message-invisible-region))
+
+(defun message-find-invisible-regions ()
+  "Find invisible texts with the property `message-invisible' and
+return a list of points."
+  (let (from
+       (to (point-min))
+       regions)
+    (while (setq from (text-property-any to (point-max)
+                                        'message-invisible t))
+      (setq to (or (text-property-not-all from (point-max)
+                                         'message-invisible t)
+                  (point-max)))
+      (push (cons from to) regions))
+    regions))
+
 (defun message-fix-before-sending ()
   "Do various things to make the message nice before sending it."
   ;; Make sure there's a newline at the end of the message.
+  (widen)
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
-  ;; Delete all invisible text.
-  (message-check 'invisible-text
-    (when (text-property-any (point-min) (point-max) 'invisible t)
-      (put-text-property (point-min) (point-max) 'invisible nil)
-      (unless (yes-or-no-p
-              "Invisible text found and made visible; continue posting? ")
-       (error "Invisible text found and made visible")))))
+  ;; Expose all invisible text with the property `message-invisible'.
+  ;; We should believe that the things might be created by MIME-Edit.
+  (let ((message-invisibles (message-find-invisible-regions)))
+    (dolist (region message-invisibles)
+      (put-text-property (car region) (cdr region) 'invisible nil))
+    ;; Expose all invisible text.
+    (message-check 'invisible-text
+      (when (text-property-any (point-min) (point-max) 'invisible t)
+       (put-text-property (point-min) (point-max) 'invisible nil)
+       (unless (yes-or-no-p
+                "Invisible text found and made visible; continue posting? ")
+         (error "Invisible text found and made visible"))))
+    ;; Hide again all text with the property `message-invisible'.
+    ;; It is needed to make MIME-Edit find the MIME part boundaries.
+    (dolist (region message-invisibles)
+      (put-text-property (car region) (cdr region) 'invisible t))))
 
 (defun message-add-action (action &rest types)
   "Add ACTION to be performed when doing an exit of type TYPES."
@@ -2679,12 +2883,85 @@ This sub function is for exclusive use of `message-send-mail'."
          (cadr failure)
        (prin1-to-string failure)))))
 
+(defun message-send-mail-partially ()
+  "Sendmail as message/partial."
+  ;; replace the header delimiter with a blank line
+  (goto-char (point-min))
+  (re-search-forward
+   (concat "^" (regexp-quote mail-header-separator) "\n"))
+  (replace-match "\n")
+  (run-hooks 'message-send-mail-hook)
+  (let ((p (goto-char (point-min)))
+       (tembuf (message-generate-new-buffer-clone-locals " message temp"))
+       (curbuf (current-buffer))
+       (id (message-make-message-id)) (n 1)
+       plist total  header required-mail-headers)
+    (while (not (eobp))
+      (if (< (point-max) (+ p message-send-mail-partially-limit))
+         (goto-char (point-max))
+       (goto-char (+ p message-send-mail-partially-limit))
+       (beginning-of-line)
+       (if (<= (point) p) (forward-line 1))) ;; In case of bad message.
+      (push p plist)
+      (setq p (point)))
+    (setq total (length plist))
+    (push (point-max) plist)
+    (setq plist (nreverse plist))
+    (unwind-protect
+       (save-excursion
+         (setq p (pop plist))
+         (while plist
+           (set-buffer curbuf)
+           (copy-to-buffer tembuf p (car plist))
+           (set-buffer tembuf)
+           (goto-char (point-min))
+           (if header
+               (progn
+                 (goto-char (point-min))
+                 (narrow-to-region (point) (point))
+                 (insert header))
+             (message-goto-eoh)
+             (setq header (buffer-substring (point-min) (point)))
+             (goto-char (point-min))
+             (narrow-to-region (point) (point))
+             (insert header)
+             (message-remove-header "Mime-Version")
+             (message-remove-header "Content-Type")
+             (message-remove-header "Content-Transfer-Encoding")
+             (message-remove-header "Message-ID")
+             (message-remove-header "Lines")
+             (goto-char (point-max))
+             (insert "Mime-Version: 1.0\n")
+             (setq header (buffer-substring (point-min) (point-max))))
+           (goto-char (point-max))
+           (insert (format "Content-Type: message/partial; id=\"%s\"; number=%d; total=%d\n"
+                           id n total))
+           (let ((mail-header-separator ""))
+             (when (memq 'Message-ID message-required-mail-headers)
+               (insert "Message-ID: " (message-make-message-id) "\n"))
+             (when (memq 'Lines message-required-mail-headers)
+               (let ((mail-header-separator ""))
+                 (insert "Lines: " (message-make-lines) "\n")))
+             (message-goto-subject)
+             (end-of-line)
+             (insert (format " (%d/%d)" n total))
+             (goto-char (point-max))
+             (insert "\n")
+             (widen)
+             (mm-with-unibyte-current-buffer
+               (funcall message-send-mail-function)))
+           (setq n (+ n 1))
+           (setq p (pop plist))
+           (erase-buffer)))
+      (kill-buffer tembuf))))
+
 (defun message-send-mail (&optional arg)
   (require 'mail-utils)
-  (let ((tembuf (message-generate-new-buffer-clone-locals " message temp"))
-       (case-fold-search nil)
-       (news (message-news-p))
-       failure)
+  (let* ((tembuf (message-generate-new-buffer-clone-locals " message temp"))
+        (case-fold-search nil)
+        (news (message-news-p))
+        (message-this-is-mail t)
+        failure)
     (save-restriction
       (message-narrow-to-headers)
       ;; Insert some headers.
@@ -2715,9 +2992,15 @@ This sub function is for exclusive use of `message-send-mail'."
            ;; require one newline at the end.
            (or (= (preceding-char) ?\n)
                (insert ?\n))
-           (when (and news
+           (when
+               (save-restriction
+                 (message-narrow-to-headers)
+                 (and news
                       (or (message-fetch-field "cc")
-                          (message-fetch-field "to")))
+                          (message-fetch-field "to"))
+                      (let ((ct (mime-read-Content-Type)))
+                        (and (eq 'text (cdr (assq 'type ct)))
+                             (eq 'plain (cdr (assq 'subtype ct)))))))
              (message-insert-courtesy-copy))
            (setq failure (message-maybe-split-and-send-mail)))
        (kill-buffer tembuf))
@@ -2731,7 +3014,8 @@ This sub function is for exclusive use of `message-send-mail'."
 (defun message-send-mail-with-sendmail ()
   "Send off the prepared buffer with sendmail."
   (let ((errbuf (if message-interactive
-                   (generate-new-buffer " sendmail errors")
+                   (message-generate-new-buffer-clone-locals
+                    " sendmail errors")
                  0))
        resend-to-addresses delimline)
     (let ((case-fold-search t))
@@ -2768,7 +3052,7 @@ This sub function is for exclusive use of `message-send-mail'."
                      ;; But some systems are more broken with -f, so
                      ;; we'll let users override this.
                      (if (null message-sendmail-f-is-evil)
-                         (list "-f" (user-login-name)))
+                         (list "-f" (message-make-address)))
                      ;; These mean "report errors by mail"
                      ;; and "deliver in background".
                      (if (null message-interactive) '("-oem" "-odb"))
@@ -2874,11 +3158,13 @@ to find out how to use this."
     (backward-char 1)
     (run-hooks 'message-send-mail-hook)
     (if recipients
-       (let ((result (smtp-via-smtp user-mail-address
-                                    recipients
-                                    (current-buffer))))
-         (unless (eq result t)
-           (error "Sending failed; " result)))
+       (static-if (fboundp 'smtp-send-buffer)
+           (smtp-send-buffer user-mail-address recipients
+                             (current-buffer))
+         (let ((result (smtp-via-smtp user-mail-address recipients
+                                      (current-buffer))))
+           (unless (eq result t)
+             (error "Sending failed; %s" result))))
       (error "Sending failed; no recipients"))))
 
 (defsubst message-maybe-split-and-send-news (method)
@@ -2914,23 +3200,29 @@ This sub function is for exclusive use of `message-send-news'."
      (not (funcall message-send-news-function method)))))
 
 (defun message-send-news (&optional arg)
-  (let ((tembuf (message-generate-new-buffer-clone-locals " *message temp*"))
-       (case-fold-search nil)
-       (method (if (message-functionp message-post-method)
-                   (funcall message-post-method arg)
-                 message-post-method))
-       (message-syntax-checks
-        (if arg
-            (cons '(existing-newsgroups . disabled)
-                  message-syntax-checks)
-          message-syntax-checks))
-       result)
+  (let* ((tembuf (message-generate-new-buffer-clone-locals " *message temp*"))
+        (case-fold-search nil)
+        (method (if (message-functionp message-post-method)
+                    (funcall message-post-method arg)
+                  message-post-method))
+        (group-name-charset (gnus-group-name-charset method ""))
+        (message-syntax-checks
+         (if arg
+             (cons '(existing-newsgroups . disabled)
+                   message-syntax-checks)
+           message-syntax-checks))
+        (message-this-is-news t)
+        result)
     (save-restriction
       (message-narrow-to-headers)
       ;; Insert some headers.
       (message-generate-headers message-required-news-headers)
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
+    (if group-name-charset
+       (setq message-syntax-checks
+             (cons '(valid-newsgroups . disabled)
+                   message-syntax-checks)))
     (message-cleanup-headers)
     (if (not (message-check-news-syntax))
        nil
@@ -3008,7 +3300,7 @@ This sub function is for exclusive use of `message-send-news'."
 (defun message-check-news-header-syntax ()
   (and
    ;; Check Newsgroups header.
-   (message-check 'newsgroyps
+   (message-check 'newsgroups
      (let ((group (message-fetch-field "newsgroups")))
        (or
        (and group
@@ -3224,7 +3516,10 @@ This sub function is for exclusive use of `message-send-news'."
        (re-search-backward message-signature-separator nil t)
        (beginning-of-line)
        (or (re-search-backward "[^ \n\t]" b t)
-          (y-or-n-p "Empty article.  Really post? "))))
+          (if (message-gnksa-enable-p 'empty-article)
+              (y-or-n-p "Empty article.  Really post? ")
+            (message "Denied posting -- Empty article.")
+            nil))))
    ;; Check for control characters.
    (message-check 'control-chars
      (if (re-search-forward "[\000-\007\013\015-\032\034-\037\200-\237]" nil t)
@@ -3246,17 +3541,38 @@ This sub function is for exclusive use of `message-send-news'."
      (or
       (not message-checksum)
       (not (eq (message-checksum) message-checksum))
-      (y-or-n-p
-       "It looks like no new text has been added.  Really post? ")))
+      (if (message-gnksa-enable-p 'quoted-text-only)
+         (y-or-n-p
+          "It looks like no new text has been added.  Really post? ")
+       (message "Denied posting -- no new text has been added.")
+       nil)))
    ;; Check the length of the signature.
    (message-check 'signature
      (goto-char (point-max))
      (if (> (count-lines (point) (point-max)) 5)
-        (y-or-n-p
-         (format
-          "Your .sig is %d lines; it should be max 4.  Really post? "
-          (1- (count-lines (point) (point-max)))))
-       t))))
+        (y-or-n-p
+         (format
+          "Your .sig is %d lines; it should be max 4.  Really post? "
+          (1- (count-lines (point) (point-max)))))
+       t))
+   ;; Ensure that text follows last quoted portion.
+   (message-check 'quoting-style
+     (goto-char (point-max))
+     (let ((no-problem t))
+       (when (search-backward-regexp "^>[^\n]*\n" nil t)
+        (setq no-problem (search-forward-regexp "^[ \t]*[^>\n]" nil t)))
+       (if no-problem
+          t
+        (if (message-gnksa-enable-p 'quoted-text-only)
+            (y-or-n-p "Your text should follow quoted text.  Really post? ")
+          ;; Ensure that
+          (goto-char (point-min))
+          (re-search-forward
+           (concat "^" (regexp-quote mail-header-separator) "$"))
+          (if (search-forward-regexp "^[ \t]*[^>\n]" nil t)
+              (y-or-n-p "Your text should follow quoted text.  Really post? ")
+            (message "Denied posting -- only quoted text.")
+            nil)))))))
 
 (defun message-check-mail-syntax ()
   "Check the syntax of the message."
@@ -3363,7 +3679,7 @@ This sub function is for exclusive use of `message-send-news'."
   "Append this article to Unix/babyl mail file.."
   (if (and (file-readable-p filename)
           (mail-file-babyl-p filename))
-      (rmail-output-to-rmail-file filename t)
+      (gnus-output-to-rmail filename t)
     (gnus-output-to-mail filename t)))
 
 (defun message-cleanup-headers ()
@@ -3438,7 +3754,6 @@ If NOW, use that time instead."
                      (mail-header-references message-reply-headers)
                      (mail-header-subject message-reply-headers)
                      psubject
-                     (mail-header-subject message-reply-headers)
                      (not (string=
                            (message-strip-subject-re
                             (mail-header-subject message-reply-headers))
@@ -3492,9 +3807,9 @@ If NOW, use that time instead."
   "Make an Organization header."
   (let* ((organization
          (when message-user-organization
-               (if (message-functionp message-user-organization)
-                   (funcall message-user-organization)
-                 message-user-organization))))
+           (if (message-functionp message-user-organization)
+               (funcall message-user-organization)
+             message-user-organization))))
     (save-excursion
       (message-set-work-buffer)
       (cond ((stringp organization)
@@ -3777,7 +4092,7 @@ Headers already prepared in the buffer are not modified."
                  ;; The element is a symbol.  We insert the value
                  ;; of this symbol, if any.
                  (symbol-value header))
-                (t
+                ((not (message-check-element header))
                  ;; We couldn't generate a value for this header,
                  ;; so we just ask the user.
                  (read-from-minibuffer
@@ -3911,23 +4226,63 @@ Headers already prepared in the buffer are not modified."
        (replace-match " " t t))
       (goto-char (point-max)))))
 
+(defun message-shorten-1 (list cut surplus)
+  ;; Cut SURPLUS elements out of LIST, beginning with CUTth one.
+  (setcdr (nthcdr (- cut 2) list)
+         (nthcdr (+ (- cut 2) surplus 1) list)))
+
 (defun message-shorten-references (header references)
-  "Limit REFERENCES to be shorter than 988 characters."
-  (let ((max 988)
-       (cut 4)
+  "Trim REFERENCES to be less than 31 Message-ID long, and fold them.
+If folding is disallowed, also check that the REFERENCES are less
+than 988 characters long, and if they are not, trim them until they are."
+  (let ((maxcount 31)
+       (count 0)
+       (cut 6)
        refs)
     (with-temp-buffer
       (insert references)
       (goto-char (point-min))
+      ;; Cons a list of valid references.
       (while (re-search-forward "<[^>]+>" nil t)
        (push (match-string 0) refs))
-      (setq refs (nreverse refs))
-      (while (> (length (mapconcat 'identity refs " ")) max)
-       (when (< (length refs) (1+ cut))
-         (decf cut))
-       (setcdr (nthcdr cut refs) (cddr (nthcdr cut refs)))))
-    (insert (capitalize (symbol-name header)) ": "
-           (mapconcat 'identity refs " ") "\n")))
+      (setq refs (nreverse refs)
+           count (length refs)))
+
+    ;; If the list has more than MAXCOUNT elements, trim it by
+    ;; removing the CUTth element and the required number of
+    ;; elements that follow.
+    (when (> count maxcount)
+      (let ((surplus (- count maxcount)))
+       (message-shorten-1 refs cut surplus)
+       (decf count surplus)))
+
+    ;; If folding is disallowed, make sure the total length (including
+    ;; the spaces between) will be less than MAXSIZE characters.
+    ;;
+    ;; Only disallow folding for News messages. At this point the headers
+    ;; have not been generated, thus we use message-this-is-news directly.
+    (when (and message-this-is-news message-cater-to-broken-inn)
+      (let ((maxsize 988)
+           (totalsize (+ (apply #'+ (mapcar #'length refs))
+                         (1- count)))
+           (surplus 0)
+           (ptr (nthcdr (1- cut) refs)))
+       ;; Decide how many elements to cut off...
+       (while (> totalsize maxsize)
+         (decf totalsize (1+ (length (car ptr))))
+         (incf surplus)
+         (setq ptr (cdr ptr)))
+       ;; ...and do it.
+       (when (> surplus 0)
+         (message-shorten-1 refs cut surplus))))
+
+    ;; Finally, collect the references back into a string and insert
+    ;; it into the buffer.
+    (let ((refstring (mapconcat #'identity refs " ")))
+      (if (and message-this-is-news message-cater-to-broken-inn)
+         (insert (capitalize (symbol-name header)) ": "
+                 refstring "\n")
+       (message-fill-header header refstring)))))
 
 (defun message-position-point ()
   "Move point to where the user probably wants to find it."
@@ -4035,13 +4390,13 @@ Headers already prepared in the buffer are not modified."
     (setq message-buffer-list
          (nconc message-buffer-list (list (current-buffer))))))
 
-(defvar mc-modes-alist)
+;;;(defvar mc-modes-alist)
 (defun message-setup (headers &optional replybuffer actions)
-  (when (and (boundp 'mc-modes-alist)
-            (not (assq 'message-mode mc-modes-alist)))
-    (push '(message-mode (encrypt . mc-encrypt-message)
-                        (sign . mc-sign-message))
-         mc-modes-alist))
+;;;   (when (and (boundp 'mc-modes-alist)
+;;;         (not (assq 'message-mode mc-modes-alist)))
+;;;     (push '(message-mode (encrypt . mc-encrypt-message)
+;;;                     (sign . mc-sign-message))
+;;;      mc-modes-alist))
   (when actions
     (setq message-send-actions actions))
   (setq message-reply-buffer
@@ -4091,6 +4446,8 @@ Headers already prepared in the buffer are not modified."
   (message-insert-signature)
   (save-restriction
     (message-narrow-to-headers)
+    (if message-alternative-emails
+       (message-use-alternative-email-as-from))
     (run-hooks 'message-header-setup-hook))
   (set-buffer-modified-p nil)
   (setq buffer-undo-list nil)
@@ -4164,103 +4521,62 @@ OTHER-HEADERS is an alist of header/value pairs."
     (message-setup `((Newsgroups . ,(or newsgroups ""))
                     (Subject . ,(or subject ""))))))
 
-;;;###autoload
-(defun message-reply (&optional to-address wide)
-  "Start editing a reply to the article in the current buffer."
-  (interactive)
-  (let ((cur (current-buffer))
-       from subject date to cc
-       references message-id follow-to
-       (inhibit-point-motion-hooks t)
-       (message-this-is-mail t)
-       mct never-mct mft mrt gnus-warning in-reply-to)
-    (save-restriction
-      (message-narrow-to-head)
-      ;; Allow customizations to have their say.
-      (if (not wide)
-         ;; This is a regular reply.
-         (if (message-functionp message-reply-to-function)
-             (setq follow-to (funcall message-reply-to-function)))
-       ;; This is a followup.
-       (if (message-functionp message-wide-reply-to-function)
-           (save-excursion
-             (setq follow-to
-                   (funcall message-wide-reply-to-function)))))
-      ;; Find all relevant headers we need.
-      (setq from (message-fetch-field "from")
-           date (message-fetch-field "date" t)
-           subject (or (message-fetch-field "subject") "none")
-           references (message-fetch-field "references")
-           message-id (message-fetch-field "message-id" t)
-           to (message-fetch-field "to")
-           cc (message-fetch-field "cc")
-           mct (when (and wide message-use-mail-copies-to)
-                 (message-fetch-field "mail-copies-to"))
-           mft (when (and wide message-use-mail-followup-to)
-                 (message-fetch-field "mail-followup-to"))
-           mrt (when message-use-mail-reply-to
-                 (or (message-fetch-field "mail-reply-to")
-                     (message-fetch-field "reply-to")))
-           gnus-warning (message-fetch-field "gnus-warning"))
-      (when (and gnus-warning (string-match "<[^>]+>" gnus-warning))
-       (setq message-id (match-string 0 gnus-warning)))
-      ;; Get the references from "In-Reply-To" field if there were
-      ;; no references and "In-Reply-To" field looks promising.
-      (unless references
-       (when (and (setq in-reply-to (message-fetch-field "in-reply-to"))
-                  (string-match "<[^>]+>" in-reply-to))
-         (setq references (match-string 0 in-reply-to))))
-      ;; Remove any (buggy) Re:'s that are present and make a
-      ;; proper one.
-      (setq subject (message-make-followup-subject subject))
-      (widen))
+(defun message-get-reply-headers (wide &optional to-address)
+  (let (follow-to mct never-mct from to cc reply-to mrt mft)
+    ;; Find all relevant headers we need.
+    (setq from (message-fetch-field "from")
+         to (message-fetch-field "to")
+         cc (message-fetch-field "cc")
+         mct (when message-use-mail-copies-to
+               (message-fetch-field "mail-copies-to"))
+         reply-to (message-fetch-field "reply-to")
+         mrt (when message-use-mail-reply-to
+               (message-fetch-field "mail-reply-to"))
+         mft (when (and (not (or to-address mrt reply-to))
+                        message-use-mail-followup-to)
+               (message-fetch-field "mail-followup-to")))
 
     ;; Handle special values of Mail-Copies-To.
     (when mct
       (cond
        ((and (or (equal (downcase mct) "never")
-                (equal (downcase mct) "nobody"))
-            (or (not (eq message-use-mail-copies-to 'ask))
-                (message-y-or-n-p
-                 (concat "Obey Mail-Copies-To: never? ") t "\
+                (equal (downcase mct) "nobody")))
+       (when (or (not (eq message-use-mail-copies-to 'ask))
+                 (message-y-or-n-p
+                  (concat "Obey Mail-Copies-To: never? ") t "\
 You should normally obey the Mail-Copies-To: header.
 
-       `Mail-Copies-To: never'
-directs you not to send your response to the author.")))
-       (setq never-mct t)
+       `Mail-Copies-To: " mct "'
+directs you not to send your response to the author."))
+         (setq never-mct t))
        (setq mct nil))
        ((and (or (equal (downcase mct) "always")
-                (equal (downcase mct) "poster"))
-            (or (not (eq message-use-mail-copies-to 'ask))
-                (message-y-or-n-p
-                 (concat "Obey Mail-Copies-To: always? ") t "\
+                (equal (downcase mct) "poster")))
+       (if (or (not (eq message-use-mail-copies-to 'ask))
+               (message-y-or-n-p
+                (concat "Obey Mail-Copies-To: always? ") t "\
 You should normally obey the Mail-Copies-To: header.
 
-       `Mail-Copies-To: always'
-sends a copy of your response to the author.")))
-       (setq mct (or mrt from)))
+       `Mail-Copies-To: " mct "'
+sends a copy of your response to the author."))
+           (setq mct (or mrt reply-to from))
+         (setq mct nil)))
        ((and (eq message-use-mail-copies-to 'ask)
-            (not
-             (message-y-or-n-p
-              (concat "Obey Mail-Copies-To: " mct " ? ") t "\
+            (not (message-y-or-n-p
+                  (concat "Obey Mail-Copies-To: " mct " ? ") t "\
 You should normally obey the Mail-Copies-To: header.
 
        `Mail-Copies-To: " mct "'
 sends a copy of your response to " (if (string-match "," mct)
                                       "the specified addresses"
                                     "that address") ".")))
-       (setq mct nil))
-       ))
+       (setq mct nil))))
 
-    (unless follow-to
-      (cond
-       (to-address (setq follow-to (list (cons 'To to-address))))
-       ((not wide) (setq follow-to (list (cons 'To (or mrt from)))))
-       ;; Handle Mail-Followup-To.
-       ((and mft
-            (or (not (eq message-use-mail-followup-to 'ask))
-                (message-y-or-n-p
-                 (concat "Obey Mail-Followup-To: " mft "? ") t "\
+    ;; Handle Mail-Followup-To.
+    (when (and mft
+              (eq message-use-mail-followup-to 'ask)
+              (not (message-y-or-n-p
+                    (concat "Obey Mail-Followup-To: " mft "? ") t "\
 You should normally obey the Mail-Followup-To: header.
 
        `Mail-Followup-To: " mft "'
@@ -4273,48 +4589,122 @@ that further discussion should take place only in "
                             (if (string-match "," mft)
                                 "the specified mailing lists"
                               "that mailing list") ".")))
-       (setq follow-to (list (cons 'To mft)))
-       (when mct
-         (push (cons 'Cc mct) follow-to)))
-       (t
-       (let (ccalist)
-         (save-excursion
-           (message-set-work-buffer)
+      (setq mft nil))
+
+    (if (or (not wide)
+           to-address)
+       (progn
+         (setq follow-to (list (cons 'To
+                                     (or to-address mrt reply-to mft from))))
+         (when (and wide mct)
+           (push (cons 'Cc mct) follow-to)))
+      (let (ccalist)
+       (save-excursion
+         (message-set-work-buffer)
+         (if (and mft
+                  message-use-followup-to
+                  (or (not (eq message-use-followup-to 'ask))
+                      (message-y-or-n-p "Obey Mail-Followup-To? " t "\
+You should normally obey the Mail-Followup-To: header.  In this
+article, it has the value of
+
+" mft "
+
+which directs your response to " (if (string-match "," mft)
+                                    "the specified addresses"
+                                  "that address only") ".
+
+If a message is posted to several mailing lists, Mail-Followup-To is
+often used to direct the following discussion to one list only,
+because discussions that are spread over several lists tend to be
+fragmented and very difficult to follow.
+
+Also, some source/announcement lists are not indented for discussion;
+responses here are directed to other addresses.")))
+             (insert mft)
            (unless never-mct
-             (insert (or mrt from "")))
-           (insert (if to (concat (if (bolp) "" ", ") to "") ""))
+             (insert (or mrt reply-to from "")))
+           (insert (if to (concat (if (bolp) "" ", ") to) ""))
            (insert (if mct (concat (if (bolp) "" ", ") mct) ""))
-           (insert (if cc (concat (if (bolp) "" ", ") cc) ""))
-           (goto-char (point-min))
-           (while (re-search-forward "[ \t]+" nil t)
-             (replace-match " " t t))
-           ;; Remove addresses that match `rmail-dont-reply-to-names'.
-           (let ((rmail-dont-reply-to-names message-dont-reply-to-names))
-             (insert (prog1 (rmail-dont-reply-to (buffer-string))
-                       (erase-buffer))))
-           (goto-char (point-min))
-           ;; Perhaps Mail-Copies-To: never removed the only address?
-           (when (eobp)
-             (insert (or mrt from "")))
-           (setq ccalist
-                 (mapcar
-                  (lambda (addr)
-                    (cons (mail-strip-quoted-names addr) addr))
-                  (message-tokenize-header (buffer-string))))
-           (let ((s ccalist))
-             (while s
-               (setq ccalist (delq (assoc (car (pop s)) s) ccalist)))))
-         (setq follow-to (list (cons 'To (cdr (pop ccalist)))))
-         (when ccalist
-           (let ((ccs (cons 'Cc (mapconcat
-                                 (lambda (addr) (cdr addr)) ccalist ", "))))
-             (when (string-match "^ +" (cdr ccs))
-               (setcdr ccs (substring (cdr ccs) (match-end 0))))
-             (push ccs follow-to)))))))
-
-    (message-pop-to-buffer (message-buffer-name
-                           (if wide "wide reply" "reply") from
-                           (if wide to-address nil)))
+           (insert (if cc (concat (if (bolp) "" ", ") cc) "")))
+         (goto-char (point-min))
+         (while (re-search-forward "[ \t]+" nil t)
+           (replace-match " " t t))
+         ;; Remove addresses that match `rmail-dont-reply-to-names'.
+         (let ((rmail-dont-reply-to-names message-dont-reply-to-names))
+           (insert (prog1 (rmail-dont-reply-to (buffer-string))
+                     (erase-buffer))))
+         (goto-char (point-min))
+         ;; Perhaps "Mail-Copies-To: never" removed the only address?
+         (when (eobp)
+           (insert (or mrt reply-to from "")))
+         (setq ccalist
+               (mapcar
+                (lambda (addr)
+                  (cons (mail-strip-quoted-names addr) addr))
+                (message-tokenize-header (buffer-string))))
+         (let ((s ccalist))
+           (while s
+             (setq ccalist (delq (assoc (car (pop s)) s) ccalist)))))
+       (setq follow-to (list (cons 'To (cdr (pop ccalist)))))
+       (when ccalist
+         (let ((ccs (cons 'Cc (mapconcat
+                               (lambda (addr) (cdr addr)) ccalist ", "))))
+           (when (string-match "^ +" (cdr ccs))
+             (setcdr ccs (substring (cdr ccs) (match-end 0))))
+           (push ccs follow-to)))))
+    follow-to))
+
+;;;###autoload
+(defun message-reply (&optional to-address wide)
+  "Start editing a reply to the article in the current buffer."
+  (interactive)
+  (require 'gnus-sum)                  ; for gnus-list-identifiers
+  (let ((cur (current-buffer))
+       from subject date
+       references message-id follow-to
+       (inhibit-point-motion-hooks t)
+       (message-this-is-mail t)
+       gnus-warning in-reply-to)
+    (save-restriction
+      (message-narrow-to-head)
+      ;; Allow customizations to have their say.
+      (if (not wide)
+         ;; This is a regular reply.
+         (if (message-functionp message-reply-to-function)
+             (setq follow-to (funcall message-reply-to-function)))
+       ;; This is a followup.
+       (if (message-functionp message-wide-reply-to-function)
+           (save-excursion
+             (setq follow-to
+                   (funcall message-wide-reply-to-function)))))
+      (setq message-id (message-fetch-field "message-id" t)
+           references (message-fetch-field "references")
+           date (message-fetch-field "date")
+           from (message-fetch-field "from")
+           subject (or (message-fetch-field "subject") "none"))
+      (if gnus-list-identifiers
+         (setq subject (message-strip-list-identifiers subject)))
+      (setq subject (message-make-followup-subject subject))
+
+      (when (and (setq gnus-warning (message-fetch-field "gnus-warning"))
+                (string-match "<[^>]+>" gnus-warning))
+       (setq message-id (match-string 0 gnus-warning)))
+
+      (unless follow-to
+       (setq follow-to (message-get-reply-headers wide to-address)))
+
+      ;; Get the references from "In-Reply-To" field if there were
+      ;; no references and "In-Reply-To" field looks promising.
+      (unless references
+       (when (and (setq in-reply-to (message-fetch-field "in-reply-to"))
+                  (string-match "<[^>]+>" in-reply-to))
+         (setq references (match-string 0 in-reply-to)))))
+
+    (message-pop-to-buffer
+     (message-buffer-name
+      (if wide "wide reply" "reply") from
+      (if wide to-address nil)))
 
     (setq message-reply-headers
          (make-full-mail-header-from-decoded-header
@@ -4325,7 +4715,8 @@ that further discussion should take place only in "
        ,@follow-to
        ,@(if (or references message-id)
             `((References . ,(concat (or references "") (and references " ")
-                                     (or message-id ""))))))
+                                     (or message-id ""))))
+          nil))
      cur)))
 
 ;;;###autoload
@@ -4339,44 +4730,44 @@ that further discussion should take place only in "
   "Follow up to the message in the current buffer.
 If TO-NEWSGROUPS, use that as the new Newsgroups line."
   (interactive)
+  (require 'gnus-sum)                  ; for gnus-list-identifiers
   (let ((cur (current-buffer))
-       from subject date mct
+       from subject date reply-to mrt mct mft
        references message-id follow-to
        (inhibit-point-motion-hooks t)
        (message-this-is-news t)
-       followup-to distribution newsgroups gnus-warning posted-to mft mrt)
+       followup-to distribution newsgroups gnus-warning posted-to)
     (save-restriction
       (message-narrow-to-head)
       (when (message-functionp message-followup-to-function)
        (setq follow-to
              (funcall message-followup-to-function)))
       (setq from (message-fetch-field "from")
-           date (message-fetch-field "date" t)
+           date (message-fetch-field "date")
            subject (or (message-fetch-field "subject") "none")
            references (message-fetch-field "references")
            message-id (message-fetch-field "message-id" t)
-           followup-to (when message-use-followup-to
-                         (message-fetch-field "followup-to"))
-           distribution (message-fetch-field "distribution")
+           followup-to (message-fetch-field "followup-to")
            newsgroups (message-fetch-field "newsgroups")
            posted-to (message-fetch-field "posted-to")
+           reply-to (message-fetch-field "reply-to")
+           mrt (when message-use-mail-reply-to
+                 (message-fetch-field "mail-reply-to"))
+           distribution (message-fetch-field "distribution")
            mct (when message-use-mail-copies-to
                  (message-fetch-field "mail-copies-to"))
            mft (when message-use-mail-followup-to
-                 (message-fetch-field "mail-followup-to"))
-           mrt (when message-use-mail-reply-to
-                 (or (message-fetch-field "mail-reply-to")
-                     (message-fetch-field "reply-to")))
-           gnus-warning (message-fetch-field "gnus-warning"))
-      (when (and gnus-warning (string-match "<[^>]+>" gnus-warning))
+                 (message-fetch-field "mail-followup-to")))
+      (when (and (setq gnus-warning (message-fetch-field "gnus-warning"))
+                (string-match "<[^>]+>" gnus-warning))
        (setq message-id (match-string 0 gnus-warning)))
       ;; Remove bogus distribution.
       (when (and (stringp distribution)
                 (let ((case-fold-search t))
                   (string-match "world" distribution)))
        (setq distribution nil))
-      ;; Remove any (buggy) Re:'s that are present and make a
-      ;; proper one.
+      (if gnus-list-identifiers
+         (setq subject (message-strip-list-identifiers subject)))
       (setq subject (message-make-followup-subject subject))
       (widen))
 
@@ -4384,25 +4775,19 @@ If TO-NEWSGROUPS, use that as the new Newsgroups line."
     (when mct
       (cond
        ((and (or (equal (downcase mct) "never")
-                (equal (downcase mct) "nobody"))
-            (or (not (eq message-use-mail-copies-to 'ask))
-                (message-y-or-n-p
-                 (concat "Obey Mail-Copies-To: never? ") t "\
-You should normally obey the Mail-Copies-To: header.
-
-       `Mail-Copies-To: never'
-directs you not to send your response to the author.")))
+                (equal (downcase mct) "nobody")))
        (setq mct nil))
        ((and (or (equal (downcase mct) "always")
-                (equal (downcase mct) "poster"))
-            (or (not (eq message-use-mail-copies-to 'ask))
-                (message-y-or-n-p
-                 (concat "Obey Mail-Copies-To: always? ") t "\
+                (equal (downcase mct) "poster")))
+       (if (or (not (eq message-use-mail-copies-to 'ask))
+               (message-y-or-n-p
+                (concat "Obey Mail-Copies-To: always? ") t "\
 You should normally obey the Mail-Copies-To: header.
 
-       `Mail-Copies-To: always'
-sends a copy of your response to the author.")))
-       (setq mct (or mrt from)))
+       `Mail-Copies-To: " mct "'
+sends a copy of your response to the author."))
+           (setq mct (or mrt reply-to from))
+         (setq mct nil)))
        ((and (eq message-use-mail-copies-to 'ask)
             (not
              (message-y-or-n-p
@@ -4413,8 +4798,7 @@ You should normally obey the Mail-Copies-To: header.
 sends a copy of your response to " (if (string-match "," mct)
                                       "the specified addresses"
                                     "that address") ".")))
-       (setq mct nil))
-       ))
+       (setq mct nil))))
 
     (unless follow-to
       (cond
@@ -4423,7 +4807,7 @@ sends a copy of your response to " (if (string-match "," mct)
        (followup-to
        (cond
         ((equal (downcase followup-to) "poster")
-         (if (or (eq message-use-followup-to 'use)
+         (if (or (and followup-to (eq message-use-followup-to 'use))
                  (message-y-or-n-p "Obey Followup-To: poster? " t "\
 You should normally obey the Followup-To: header.
 
@@ -4434,11 +4818,11 @@ A typical situation where `Followup-To: poster' is used is when the author
 does not read the newsgroup, so he wouldn't see any replies sent to it."))
              (setq message-this-is-news nil
                    distribution nil
-                   follow-to (list (cons 'To (or mrt from ""))))
+                   follow-to (list (cons 'To (or mrt reply-to from ""))))
            (setq follow-to (list (cons 'Newsgroups newsgroups)))))
         (t
          (if (or (equal followup-to newsgroups)
-                 (not (eq message-use-followup-to 'ask))
+                 (not (and followup-to (eq message-use-followup-to 'ask)))
                  (message-y-or-n-p
                   (concat "Obey Followup-To: " followup-to "? ") t "\
 You should normally obey the Followup-To: header.
@@ -4483,10 +4867,6 @@ that further discussion should take place only in "
 
     (message-pop-to-buffer (message-buffer-name "followup" from newsgroups))
 
-    (setq message-reply-headers
-         (make-full-mail-header-from-decoded-header
-          0 subject from date message-id references 0 0 ""))
-
     (message-setup
      `((Subject . ,subject)
        ,@follow-to
@@ -4495,18 +4875,23 @@ that further discussion should take place only in "
        ,@(if (or references message-id)
             `((References . ,(concat (or references "") (and references " ")
                                      (or message-id ""))))))
-     cur)))
+     cur)
+
+    (setq message-reply-headers
+         (make-full-mail-header-from-decoded-header
+          0 subject from date message-id references 0 0 ""))))
 
 ;;;###autoload
-(defun message-cancel-news ()
-  "Cancel an article you posted."
-  (interactive)
+(defun message-cancel-news (&optional arg)
+  "Cancel an article you posted.
+If ARG, allow editing of the cancellation message."
+  (interactive "P")
   (unless (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 sender)
       (save-excursion
-       ;; Get header info. from original article.
+       ;; Get header info from original article.
        (save-restriction
          (message-narrow-to-head)
          (setq from (message-fetch-field "from")
@@ -4526,10 +4911,12 @@ that further discussion should take place only in "
                                      (message-make-from))))))
          (error "This article is not yours"))
        ;; Make control message.
-       (setq buf (set-buffer (get-buffer-create " *message cancel*")))
+       (if arg
+           (message-news)
+         (setq buf (set-buffer (get-buffer-create " *message cancel*"))))
        (erase-buffer)
        (insert "Newsgroups: " newsgroups "\n"
-               "From: " (message-make-from) "\n"
+               "From: " from "\n"
                "Subject: cmsg cancel " message-id "\n"
                "Control: cancel " message-id "\n"
                (if distribution
@@ -4539,13 +4926,14 @@ that further discussion should take place only in "
                message-cancel-message)
        (run-hooks 'message-cancel-hook)
        (message "Canceling your article...")
-       (if (let ((message-syntax-checks
-                  'dont-check-for-anything-just-trust-me)
-                 (message-encoding-buffer (current-buffer))
-                 (message-edit-buffer (current-buffer)))
-             (message-send-news))
-           (message "Canceling your article...done"))
-       (kill-buffer buf)))))
+       (unless arg
+         (if (let ((message-syntax-checks
+                    'dont-check-for-anything-just-trust-me)
+                   (message-encoding-buffer (current-buffer))
+                   (message-edit-buffer (current-buffer)))
+               (message-send-news))
+             (message "Canceling your article...done"))
+         (kill-buffer buf))))))
 
 (defun message-supersede-setup-for-mime-edit ()
   (set (make-local-variable 'message-setup-hook) nil)
@@ -4598,6 +4986,8 @@ header line with the old Message-ID."
     (cond ((save-window-excursion
             (if (not (eq system-type 'vax-vms))
                 (with-output-to-temp-buffer "*Directory*"
+                  (with-current-buffer standard-output
+                    (fundamental-mode)) ; for Emacs 20.4+
                   (buffer-disable-undo standard-output)
                   (let ((default-directory "/"))
                     (call-process
@@ -4648,9 +5038,13 @@ The form is: [Source] Subject, where if the original message was mail,
 Source is the sender, and if the original message was news, Source is
 the list of newsgroups is was posted to."
   (concat "["
-         (or (message-fetch-field
-              (if (message-news-p) "newsgroups" "from"))
-             "(nowhere)")
+         (if (message-news-p)
+             (or (message-fetch-field "newsgroups")
+                 "(nowhere)")
+           (let ((from (message-fetch-field "from")))
+             (if from
+                 (nnheader-decode-from from)
+               "(nobody)")))
          "] " subject))
 
 (defun message-forward-subject-fwd (subject)
@@ -4663,7 +5057,6 @@ the message."
   "Return a Subject header suitable for the message in the current buffer."
   (save-excursion
     (save-restriction
-      (current-buffer)
       (message-narrow-to-head)
       (let ((funcs message-make-forward-subject-function)
            (subject (message-fetch-field "Subject")))
@@ -4699,11 +5092,11 @@ Optional NEWS will use news to forward instead of mail."
       (message-mail nil subject))
     ;; Put point where we want it before inserting the forwarded
     ;; message.
-    (if message-signature-before-forwarded-message
-       (goto-char (point-max))
-      (message-goto-body))
+    (if message-forward-before-signature
+       (message-goto-body)
+      (goto-char (point-max)))
     ;; Make sure we're at the start of the line.
-    (unless (eolp)
+    (unless (bolp)
       (insert "\n"))
     ;; Narrow to the area we are to insert.
     (narrow-to-region (point) (point))
@@ -4784,7 +5177,7 @@ Optional NEWS will use news to forward instead of mail."
 ;;;###autoload
 (defun message-bounce ()
   "Re-mail the current message.
-This only makes sense if the current message is a bounce message than
+This only makes sense if the current message is a bounce message that
 contains some mail you have written which has been bounced back to
 you."
   (interactive)
@@ -4920,7 +5313,7 @@ which specify the range to operate on."
 (defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
 
 ;; Support for toolbar
-(when (string-match "XEmacs\\|Lucid" emacs-version)
+(when (featurep 'xemacs)
   (require 'messagexmas))
 
 ;;; Group name completion.
@@ -4993,6 +5386,7 @@ The following arguments may contain lists of values."
        (save-excursion
          (with-output-to-temp-buffer " *MESSAGE information message*"
            (set-buffer " *MESSAGE information message*")
+           (fundamental-mode)          ; for Emacs 20.4+
            (mapcar 'princ text)
            (goto-char (point-min))))
        (funcall ask question))
@@ -5016,10 +5410,10 @@ regexp varstr."
   (let ((oldbuf (current-buffer)))
     (save-excursion
       (set-buffer (generate-new-buffer name))
-      (message-clone-locals oldbuf)
+      (message-clone-locals oldbuf varstr)
       (current-buffer))))
 
-(defun message-clone-locals (buffer)
+(defun message-clone-locals (buffer &optional varstr)
   "Clone the local variables from BUFFER to the current buffer."
   (let ((locals (save-excursion
                  (set-buffer buffer)
@@ -5030,7 +5424,9 @@ regexp varstr."
      (lambda (local)
        (when (and (consp local)
                  (car local)
-                 (string-match regexp (symbol-name (car local))))
+                 (string-match regexp (symbol-name (car local)))
+                 (or (null varstr)
+                     (string-match varstr (symbol-name (car local)))))
         (ignore-errors
           (set (make-local-variable (car local))
                (cdr local)))))
@@ -5082,17 +5478,20 @@ regexp varstr."
 ;;; Miscellaneous functions
 
 ;; stolen (and renamed) from nnheader.el
-(defun message-replace-chars-in-string (string from to)
-  "Replace characters in STRING from FROM to TO."
-  (let ((string (substring string 0))  ;Copy string.
-       (len (length string))
-       (idx 0))
-    ;; Replace all occurrences of FROM with TO.
-    (while (< idx len)
-      (when (= (aref string idx) from)
-       (aset string idx to))
-      (setq idx (1+ idx)))
-    string))
+(static-if (fboundp 'subst-char-in-string)
+    (defsubst message-replace-chars-in-string (string from to)
+      (subst-char-in-string from to string))
+  (defun message-replace-chars-in-string (string from to)
+    "Replace characters in STRING from FROM to TO."
+    (let ((string (substring string 0))        ;Copy string.
+         (len (length string))
+         (idx 0))
+      ;; Replace all occurrences of FROM with TO.
+      (while (< idx len)
+       (when (= (aref string idx) from)
+         (aset string idx to))
+       (setq idx (1+ idx)))
+      string)))
 
 ;;;
 ;;; MIME functions
@@ -5103,8 +5502,7 @@ regexp varstr."
 (defun message-encode-message-body ()
   (unless message-inhibit-body-encoding
     (let ((mail-parse-charset (or mail-parse-charset
-                                 message-default-charset
-                                 message-posting-charset))
+                                 message-default-charset))
          (case-fold-search t)
          lines content-type-p)
       (message-goto-body)
@@ -5119,7 +5517,7 @@ regexp varstr."
                (delete-char 1)
              (search-forward "\n\n")
              (setq lines (buffer-substring (point-min) (1- (point))))
-             (delete-region (point-min)  (point))))))
+             (delete-region (point-min) (point))))))
       (save-restriction
        (message-narrow-to-headers-or-head)
        (message-remove-header "Mime-Version")
@@ -5149,30 +5547,80 @@ regexp varstr."
   (if (fboundp 'mail-abbrevs-setup)
       (let ((mail-abbrev-mode-regexp "")
            (minibuffer-setup-hook 'mail-abbrevs-setup))
-       (read-from-minibuffer prompt)))
-  (let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook))
-    (read-string prompt)))
+       (read-from-minibuffer prompt))
+    (let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook))
+      (read-string prompt))))
+
+(defun message-use-alternative-email-as-from ()
+  (require 'mail-utils)
+  (let* ((fields '("To" "Cc")) 
+        (emails
+         (split-string
+          (mail-strip-quoted-names
+           (mapconcat 'message-fetch-reply-field fields ","))
+          "[ \f\t\n\r\v,]+"))
+        email)
+    (while emails
+      (if (string-match message-alternative-emails (car emails))
+         (setq email (car emails)
+               emails nil))
+      (pop emails))
+    (unless (or (not email) (equal email user-mail-address))
+      (goto-char (point-max))
+      (insert "From: " email "\n"))))
+
+(defun message-options-get (symbol)
+  (cdr (assq symbol message-options)))
+
+(defun message-options-set (symbol value)
+  (let ((the-cons (assq symbol message-options)))
+    (if the-cons
+       (if value 
+           (setcdr the-cons value)
+         (setq message-options (delq the-cons message-options)))
+      (and value
+          (push (cons symbol value) message-options))))
+  value)
+
+(defun message-options-set-recipient ()
+  (save-restriction
+    (message-narrow-to-headers-or-head)
+    (message-options-set 'message-sender
+                        (mail-strip-quoted-names 
+                         (message-fetch-field "from")))
+    (message-options-set 'message-recipients
+                         (mail-strip-quoted-names 
+                          (message-fetch-field "to")))))
 
-(defvar message-save-buffer " *encoding")
 (defun message-save-drafts ()
+  "Postponing the message."
   (interactive)
-  (if (not (get-buffer message-save-buffer))
-      (get-buffer-create message-save-buffer))
-  (let ((filename buffer-file-name)
-       (buffer (current-buffer))
-       (reply-headers message-reply-headers))
-    (set-buffer message-save-buffer)
-    (erase-buffer)
-    (insert-buffer buffer)
-    (setq message-reply-headers reply-headers)
-    (message-generate-headers  '((optional . In-Reply-To)))
-    (mime-edit-translate-buffer)
-    (write-region (point-min) (point-max) filename)
-    (set-buffer buffer)
-    (set-buffer-modified-p nil)))
+  (message "Saving %s..." buffer-file-name)
+  (let ((reply-headers message-reply-headers)
+       (msg (buffer-substring-no-properties (point-min) (point-max)))
+       (message-invisibles (message-find-invisible-regions)))
+    (with-temp-file buffer-file-name
+      (insert msg)
+      ;; Inherit the invisible property of texts to make MIME-Edit
+      ;; find the MIME part boundaries.
+      (dolist (region message-invisibles)
+       (put-text-property (car region) (cdr region) 'invisible t))
+      (setq message-reply-headers reply-headers)
+      (message-generate-headers '((optional . In-Reply-To)))
+      (mime-edit-translate-buffer))
+    (set-buffer-modified-p nil))
+  (message "Saving %s...done" buffer-file-name))
+
+(when (featurep 'xemacs)
+  (require 'messagexmas)
+  (message-xmas-redefine))
 
 (provide 'message)
 
 (run-hooks 'message-load-hook)
 
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
 ;;; message.el ends here
index b817f86..b3be4ee 100644 (file)
@@ -1,5 +1,7 @@
 ;;; messagexmas.el --- XEmacs extensions to message
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;      Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
@@ -25,6 +27,7 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'nnheader)
 
 (defvar message-xmas-dont-activate-region t
@@ -90,8 +93,6 @@ If it is non-nil, it must be a toolbar.  The five valid values are
   "Exchange point and mark, but allow for XEmacs' optional argument."
   (exchange-point-and-mark message-xmas-dont-activate-region))
 
-(fset 'message-exchange-point-and-mark 'message-xmas-exchange-point-and-mark)
-
 (defun message-xmas-maybe-fontify ()
   (when (featurep 'font-lock)
     (font-lock-set-defaults)))
@@ -113,12 +114,19 @@ If it is non-nil, it must be a toolbar.  The five valid values are
      (substring table a (+ a n))
      (substring table (+ a 26) 255))))
 
-(when (>= emacs-major-version 20)
-  (fset 'message-make-caesar-translation-table
-       'message-xmas-make-caesar-translation-table))
-
 (add-hook 'message-mode-hook 'message-xmas-maybe-fontify)
 
+(defun message-xmas-redefine ()
+  "Redefine message functions for XEmacs."
+  (defalias 'message-exchange-point-and-mark 
+    'message-xmas-exchange-point-and-mark)
+
+  (when (>= emacs-major-version 20)
+    (defalias 'message-make-caesar-translation-table
+      'message-xmas-make-caesar-translation-table)))
+
+(message-xmas-redefine)
+
 (provide 'messagexmas)
 
 ;;; messagexmas.el ends here
index c9f0f7d..e3021ce 100644 (file)
@@ -1,5 +1,7 @@
 ;;; messcompat.el --- making message mode compatible with mail mode
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
@@ -72,7 +74,7 @@ If a form, the result from the form will be used instead.")
 
 ;; Deleted the autoload cookie because this crashes in loaddefs.el.
 (defvar message-signature-file mail-signature-file
-  "*File containing the text inserted at end of message. buffer.")
+  "*File containing the text inserted at end of the message buffer.")
 
 (defvar message-default-headers mail-default-headers
   "*A string containing header lines to be inserted in outgoing messages.
index ad7bbeb..5b8874c 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-bodies.el --- Functions for decoding MIME things
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 
 ;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
 ;; BS, vertical TAB, form feed, and ^_
-(defvar mm-8bit-char-regexp "[^\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f]")
+(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f")
 
-(defvar mm-body-charset-encoding-alist nil
+(defcustom mm-body-charset-encoding-alist
+  '((iso-2022-jp . 7bit)
+    (iso-2022-jp-2 . 7bit))
   "Alist of MIME charsets to encodings.
-Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'.")
+Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'."
+  :type '(repeat (cons (symbol :tag "charset")
+                      (choice :tag "encoding"
+                              (const 7bit)
+                              (const 8bit)
+                              (const quoted-printable)
+                              (const base64))))
+  :group 'mime)
 
 (defun mm-encode-body ()
   "Encode a body.
@@ -49,9 +58,9 @@ If there is more than one non-ASCII MULE charset, then list of found
 MULE charsets are returned.
 If successful, the MIME charset is returned.
 If no encoding was done, nil is returned."
-  (if (not (featurep 'mule))
+  (if (not (mm-multibyte-p))
       ;; In the non-Mule case, we search for non-ASCII chars and
-      ;; return the value of `mm-default-charset' if any are found.
+      ;; return the value of `mail-parse-charset' if any are found.
       (save-excursion
        (goto-char (point-min))
        (if (re-search-forward "[^\x0-\x7f]" nil t)
@@ -80,7 +89,7 @@ If no encoding was done, nil is returned."
                      (not (mm-coding-system-equal
                            charset buffer-file-coding-system)))
              (while (not (eobp))
-               (if (eq (char-charset (char-after)) 'ascii)
+               (if (eq (mm-charset-after) 'ascii)
                    (when start
                      (save-restriction
                        (narrow-to-region start (point))
@@ -95,17 +104,23 @@ If no encoding was done, nil is returned."
                (setq start nil)))
            charset)))))))
 
-(defun mm-body-encoding (charset)
+(defun mm-body-encoding (charset &optional encoding)
   "Do Content-Transfer-Encoding and return the encoding of the current buffer."
   (let ((bits (mm-body-7-or-8)))
     (cond
-     ((eq bits '7bit)
+     ((and (not mm-use-ultra-safe-encoding) (eq bits '7bit))
       bits)
-     ((eq charset mail-parse-charset)
+     ((and (not mm-use-ultra-safe-encoding)
+          (or (eq t (cdr message-posting-charset))
+              (memq charset (cdr message-posting-charset))
+              (eq charset mail-parse-charset)))
       bits)
      (t
-      (let ((encoding (or (cdr (assq charset mm-body-charset-encoding-alist))
+      (let ((encoding (or encoding
+                         (cdr (assq charset mm-body-charset-encoding-alist))
                          (mm-qp-or-base64))))
+       (when mm-use-ultra-safe-encoding
+         (setq encoding (mm-safer-encoding encoding)))
        (mm-encode-content-transfer-encoding encoding "text/plain")
        encoding)))))
 
@@ -115,9 +130,10 @@ If no encoding was done, nil is returned."
    ((not (featurep 'mule))
     (if (save-excursion
          (goto-char (point-min))
-         (re-search-forward mm-8bit-char-regexp nil t))
-       '8bit
-      '7bit))
+         (skip-chars-forward mm-7bit-chars)
+         (eobp))
+       '7bit
+      '8bit))
    (t
     ;; Mule version
     (if (and (null (delq 'ascii
@@ -127,7 +143,7 @@ If no encoding was done, nil is returned."
             ;;!!!Emacs 20.3.  Sometimes.
             (save-excursion
               (goto-char (point-min))
-              (skip-chars-forward "\0-\177")
+              (skip-chars-forward mm-7bit-chars)
               (eobp)))
        '7bit
       '8bit))))
@@ -143,18 +159,27 @@ If no encoding was done, nil is returned."
           ((eq encoding 'quoted-printable)
            (quoted-printable-decode-region (point-min) (point-max)))
           ((eq encoding 'base64)
-           (base64-decode-region (point-min)
-                                 ;; Some mailers insert whitespace
-                                 ;; junk at the end which
-                                 ;; base64-decode-region dislikes.
-                                 (save-excursion
-                                   (goto-char (point-max))
-                                   (skip-chars-backward "\n\t ")
-                                   (delete-region (point) (point-max))
-                                   (point))))
+           (base64-decode-region
+            (point-min)
+            ;; Some mailers insert whitespace
+            ;; junk at the end which
+            ;; base64-decode-region dislikes.
+            ;; Also remove possible junk which could
+            ;; have been added by mailing list software.
+            (save-excursion
+              (goto-char (point-min))
+              (while (re-search-forward "^[\t ]*\r?\n" nil t)
+                (delete-region (match-beginning 0) (match-end 0)))
+              (goto-char (point-max))
+              (when (re-search-backward "^[A-Za-z0-9+/]+=*[\t ]*$" nil t)
+                (forward-line)
+                (delete-region (point) (point-max)))
+              (point-max))))
           ((memq encoding '(7bit 8bit binary))
+           ;; Do nothing.
            )
           ((null encoding)
+           ;; Do nothing.
            )
           ((memq encoding '(x-uuencode x-uue))
            (funcall mm-uu-decode-function (point-min) (point-max)))
@@ -178,16 +203,23 @@ If no encoding was done, nil is returned."
   "Decode the current article that has been encoded with ENCODING.
 The characters in CHARSET should then be decoded."
   (if (stringp charset)
-    (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
+      (setq charset (intern (downcase charset))))
+  (if (or (not charset) 
+         (eq 'gnus-all mail-parse-ignored-charsets)
+         (memq 'gnus-all mail-parse-ignored-charsets)
+         (memq charset mail-parse-ignored-charsets))
       (setq charset mail-parse-charset))
   (save-excursion
     (when encoding
       (mm-decode-content-transfer-encoding encoding type))
     (when (featurep 'mule)
-      (let (mule-charset)
-       (when (and charset
-                  (setq mule-charset (mm-charset-to-coding-system charset))
+      (let ((mule-charset (mm-charset-to-coding-system charset)))
+       (if (and (not mule-charset)
+                (listp mail-parse-ignored-charsets)
+                (memq 'gnus-unknown mail-parse-ignored-charsets))
+           (setq mule-charset 
+                 (mm-charset-to-coding-system mail-parse-charset)))
+       (when (and charset mule-charset
                   ;; buffer-file-coding-system
                   ;;Article buffer is nil coding system
                   ;;in XEmacs
@@ -199,15 +231,22 @@ The characters in CHARSET should then be decoded."
 
 (defun mm-decode-string (string charset)
   "Decode STRING with CHARSET."
-  (if (stringp charset)
+  (when (stringp charset)
     (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
-      (setq charset mail-parse-charset))
+  (when (or (not charset) 
+           (eq 'gnus-all mail-parse-ignored-charsets)
+           (memq 'gnus-all mail-parse-ignored-charsets)
+           (memq charset mail-parse-ignored-charsets))
+    (setq charset mail-parse-charset))
   (or
    (when (featurep 'mule)
-     (let (mule-charset)
-       (when (and charset
-                 (setq mule-charset (mm-charset-to-coding-system charset))
+     (let ((mule-charset (mm-charset-to-coding-system charset)))
+       (if (and (not mule-charset)
+               (listp mail-parse-ignored-charsets)
+               (memq 'gnus-unknown mail-parse-ignored-charsets))
+          (setq mule-charset 
+                (mm-charset-to-coding-system mail-parse-charset)))
+       (when (and charset mule-charset
                  (mm-multibyte-p)
                  (or (not (eq mule-charset 'ascii))
                      (setq mule-charset mail-parse-charset)))
index 8fbef31..e371976 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-decode.el --- Functions for decoding MIME things
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 (require 'mail-parse)
 (require 'gnus-mailcap)
 (require 'mm-bodies)
+(eval-when-compile (require 'cl))
+
+(eval-and-compile
+  (autoload 'mm-inline-partial "mm-partial"))
+
+(defgroup mime-display ()
+  "Display of MIME in mail and news articles."
+  :link '(custom-manual "(emacs-mime)Customization")
+  :group 'mail
+  :group 'news
+  :group 'multimedia)
 
 ;;; Convenience macros.
 
@@ -64,7 +75,7 @@
   `(list ,buffer ,type ,encoding ,undisplayer
         ,disposition ,description ,cache ,id))
 
-(defvar mm-inline-media-tests
+(defcustom mm-inline-media-tests
   '(("image/jpeg"
      mm-inline-image
      (lambda (handle)
     ("text/x-patch" mm-display-patch-inline
      (lambda (handle)
        (locate-library "diff-mode")))
+    ("application/emacs-lisp" mm-display-elisp-inline identity)
     ("text/html"
      mm-inline-text
      (lambda (handle)
           (locate-library "vcard"))))
     ("message/delivery-status" mm-inline-text identity)
     ("message/rfc822" mm-inline-message identity)
+    ("message/partial" mm-inline-partial identity)
     ("text/.*" mm-inline-text identity)
     ("audio/wav" mm-inline-audio
      (lambda (handle)
     ("multipart/alternative" ignore identity)
     ("multipart/mixed" ignore identity)
     ("multipart/related" ignore identity))
-  "Alist of media types/test that say whether the media types can be displayed inline.")
+  "Alist of media types/tests saying whether types can be displayed inline."
+  :type '(repeat (list (string :tag "MIME type")
+                      (function :tag "Display function")
+                      (function :tag "Display test")))
+  :group 'mime-display)
 
-(defvar mm-inlined-types
+(defcustom mm-inlined-types
   '("image/.*" "text/.*" "message/delivery-status" "message/rfc822"
+    "message/partial" "application/emacs-lisp"
     "application/pgp-signature")
-  "List of media types that are to be displayed inline.")
+  "List of media types that are to be displayed inline."
+  :type '(repeat string)
+  :group 'mime-display)
   
-(defvar mm-automatic-display
+(defcustom mm-automatic-display
   '("text/plain" "text/enriched" "text/richtext" "text/html"
     "text/x-vcard" "image/.*" "message/delivery-status" "multipart/.*"
-    "message/rfc822" "text/x-patch" "application/pgp-signature")
-  "A list of MIME types to be displayed automatically.")
-
-(defvar mm-attachment-override-types '("text/x-vcard")
-  "Types that should have \"attachment\" ignored if they can be displayed inline.")
-
-(defvar mm-inline-override-types nil
-  "Types that should be treated as attachments even if they can be displayed inline.")
-
-(defvar mm-inline-override-types nil
-  "Types that should be treated as attachments even if they can be displayed inline.")
-
-(defvar mm-automatic-external-display nil
-  "List of MIME type regexps that will be displayed externally automatically.")
-
-(defvar mm-discouraged-alternatives nil
+    "message/rfc822" "text/x-patch" "application/pgp-signature" 
+    "application/emacs-lisp")
+  "A list of MIME types to be displayed automatically."
+  :type '(repeat string)
+  :group 'mime-display)
+
+(defcustom mm-attachment-override-types '("text/x-vcard")
+  "Types to have \"attachment\" ignored if they can be displayed inline."
+  :type '(repeat string)
+  :group 'mime-display)
+
+(defcustom mm-inline-override-types nil
+  "Types to be treated as attachments even if they can be displayed inline."
+  :type '(repeat string)
+  :group 'mime-display)
+
+(defcustom mm-automatic-external-display nil
+  "List of MIME type regexps that will be displayed externally automatically."
+  :type '(repeat string)
+  :group 'mime-display)
+
+(defcustom mm-discouraged-alternatives nil
   "List of MIME types that are discouraged when viewing multipart/alternative.
 Viewing agents are supposed to view the last possible part of a message,
 as that is supposed to be the richest.  However, users may prefer other
 types instead, and this list says what types are most unwanted.  If,
-for instance, text/html parts are very unwanted, and text/richtech are
+for instance, text/html parts are very unwanted, and text/richtext are
 somewhat unwanted, then the value of this variable should be set
 to:
 
- (\"text/html\" \"text/richtext\")")
+ (\"text/html\" \"text/richtext\")"
+  :type '(repeat string)
+  :group 'mime-display)
 
 (defvar mm-tmp-directory
   (cond ((fboundp 'temp-directory) (temp-directory))
@@ -174,8 +202,10 @@ to:
        ("/tmp/"))
   "Where mm will store its temporary files.")
 
-(defvar mm-inline-large-images nil
-  "If non-nil, then all images fit in the buffer.")
+(defcustom mm-inline-large-images nil
+  "If non-nil, then all images fit in the buffer."
+  :type 'boolean
+  :group 'mime-display)
 
 ;;; Internal variables.
 
@@ -183,6 +213,20 @@ to:
 (defvar mm-last-shell-command "")
 (defvar mm-content-id-alist nil)
 
+;; According to RFC2046, in particular, in a digest, the default
+;; Content-Type value for a body part is changed from "text/plain" to
+;; "message/rfc822".
+(defvar mm-dissect-default-type "text/plain")
+
+(defvar mm-viewer-completion-map
+  (let ((map (make-sparse-keymap 'mm-viewer-completion-map)))
+    (set-keymap-parent map minibuffer-local-completion-map)
+    map)
+  "Keymap for input viewer with completion.")
+
+;; Should we bind other key to minibuffer-complete-word?
+(define-key mm-viewer-completion-map " " 'self-insert-command) 
+
 ;;; The functions.
 
 (defun mm-dissect-buffer (&optional no-strict-mime)
@@ -199,10 +243,12 @@ to:
                cd (mail-fetch-field "content-disposition")
                description (mail-fetch-field "content-description")
                id (mail-fetch-field "content-id"))))
+      (when cte
+       (setq cte (mail-header-strip cte)))
       (if (or (not ctl)
              (not (string-match "/" (car ctl))))
          (mm-dissect-singlepart
-          '("text/plain") 
+          (list mm-dissect-default-type)
           (and cte (intern (downcase (mail-header-remove-whitespace
                                       (mail-header-remove-comments
                                        cte)))))
@@ -216,7 +262,10 @@ to:
         result
         (cond
          ((equal type "multipart")
-          (cons (car ctl) (mm-dissect-multipart ctl)))
+          (let ((mm-dissect-default-type (if (equal subtype "digest")
+                                             "message/rfc822"
+                                           "text/plain")))
+            (cons (car ctl) (mm-dissect-multipart ctl))))
          (t
           (mm-dissect-singlepart
            ctl
@@ -234,7 +283,9 @@ to:
 
 (defun mm-dissect-singlepart (ctl cte &optional force cdl description id)
   (when (or force
-           (not (equal "text/plain" (car ctl))))
+           (if (equal "text/plain" (car ctl))
+               (assoc 'format ctl)
+             t))
     (let ((res (mm-make-handle
                (mm-copy-to-buffer) ctl cte nil cdl description nil id)))
       (push (car res) mm-dissection-list)
@@ -249,14 +300,15 @@ to:
 (defun mm-dissect-multipart (ctl)
   (goto-char (point-min))
   (let* ((boundary (concat "\n--" (mail-content-type-get ctl 'boundary)))
-       (close-delimiter (concat (regexp-quote boundary) "--[ \t]*$"))
-       start parts
-       (end (save-excursion
-              (goto-char (point-max))
-              (if (re-search-backward close-delimiter nil t)
-                  (match-beginning 0)
-                (point-max)))))
-    (while (search-forward boundary end t)
+        (close-delimiter (concat (regexp-quote boundary) "--[ \t]*$"))
+        start parts
+        (end (save-excursion
+               (goto-char (point-max))
+               (if (re-search-backward close-delimiter nil t)
+                   (match-beginning 0)
+                 (point-max)))))
+    (setq boundary (concat (regexp-quote boundary) "[ \t]*$"))
+    (while (re-search-forward boundary end t)
       (goto-char (match-beginning 0))
       (when start
        (save-excursion
@@ -284,6 +336,16 @@ to:
       (insert-buffer-substring obuf beg)
       (current-buffer))))
 
+(defun mm-display-parts (handle &optional no-default)
+  (if (stringp (car handle))
+      (mapcar 'mm-display-parts (cdr handle))
+    (if (bufferp (car handle))
+       (save-restriction
+         (narrow-to-region (point) (point))
+         (mm-display-part handle)
+         (goto-char (point-max)))
+      (mapcar 'mm-display-parts handle))))
+
 (defun mm-display-part (handle &optional no-default)
   "Display the MIME part represented by HANDLE.
 Returns nil if the part is removed; inline if displayed inline;
@@ -308,109 +370,137 @@ external if displayed external."
                  (mm-insert-inline handle (mm-get-part handle))
                  'inline)
              (mm-display-external
-              handle (or method 'mailcap-save-binary-file))
-             'external)))))))
+              handle (or method 'mailcap-save-binary-file)))))))))
 
 (defun mm-display-external (handle method)
   "Display HANDLE using METHOD."
-  (mm-with-unibyte-buffer
-    (if (functionp method)
-       (let ((cur (current-buffer)))
-         (if (eq method 'mailcap-save-binary-file)
-             (progn
-               (set-buffer (generate-new-buffer "*mm*"))
-               (setq method nil))
-           (mm-insert-part handle)
-           (let ((win (get-buffer-window cur t)))
-             (when win
-               (select-window win)))
-           (switch-to-buffer (generate-new-buffer "*mm*")))
-         (buffer-disable-undo)
-         (mm-set-buffer-file-coding-system mm-binary-coding-system)
-         (insert-buffer-substring cur)
+  (let ((outbuf (current-buffer)))
+    (mm-with-unibyte-buffer
+      (if (functionp method)
+         (let ((cur (current-buffer)))
+           (if (eq method 'mailcap-save-binary-file)
+               (progn
+                 (set-buffer (generate-new-buffer "*mm*"))
+                 (setq method nil))
+             (mm-insert-part handle)
+             (let ((win (get-buffer-window cur t)))
+               (when win
+                 (select-window win)))
+             (switch-to-buffer (generate-new-buffer "*mm*")))
+           (buffer-disable-undo)
+           (mm-set-buffer-file-coding-system mm-binary-coding-system)
+           (insert-buffer-substring cur)
+           (goto-char (point-min))
+           (message "Viewing with %s" method)
+           (let ((mm (current-buffer))
+                 (non-viewer (assq 'non-viewer
+                                   (mailcap-mime-info
+                                    (mm-handle-media-type handle) t))))
+             (unwind-protect
+                 (if method
+                     (funcall method)
+                   (mm-save-part handle))
+               (when (and (not non-viewer)
+                          method)
+                 (mm-handle-set-undisplayer handle mm)))))
+       ;; The function is a string to be executed.
+       (mm-insert-part handle)
+       (let* ((dir (make-temp-name (expand-file-name "emm." mm-tmp-directory)))
+              (filename (mail-content-type-get
+                         (mm-handle-disposition handle) 'filename))
+              (mime-info (mailcap-mime-info
+                          (mm-handle-media-type handle) t))
+              (needsterm (or (assoc "needsterm" mime-info)
+                             (assoc "needsterminal" mime-info)))
+              (copiousoutput (assoc "copiousoutput" mime-info))
+              file buffer)
+         ;; We create a private sub-directory where we store our files.
+         (make-directory dir)
+         (set-file-modes dir 448)
+         (if filename
+             (setq file (expand-file-name (file-name-nondirectory filename)
+                                          dir))
+           (setq file (make-temp-name (expand-file-name "mm." dir))))
+         (let ((coding-system-for-write mm-binary-coding-system))
+           (write-region (point-min) (point-max) file nil 'nomesg))
          (message "Viewing with %s" method)
-         (let ((mm (current-buffer))
-               (non-viewer (assq 'non-viewer
-                                 (mailcap-mime-info
-                                  (mm-handle-media-type handle) t))))
-           (unwind-protect
-               (if method
-                   (funcall method)
-                 (mm-save-part handle))
-             (when (and (not non-viewer)
-                        method)
-               (mm-handle-set-undisplayer handle mm)))))
-      ;; The function is a string to be executed.
-      (mm-insert-part handle)
-      (let* ((dir (make-temp-name (expand-file-name "emm." mm-tmp-directory)))
-            (filename (mail-content-type-get
-                       (mm-handle-disposition handle) 'filename))
-            (mime-info (mailcap-mime-info
-                        (mm-handle-media-type handle) t))
-            (needsterm (or (assoc "needsterm" mime-info)
-                           (assoc "needsterminal" mime-info)))
-            (copiousoutput (assoc "copiousoutput" mime-info))
-            process file buffer)
-       ;; We create a private sub-directory where we store our files.
-       (make-directory dir)
-       (set-file-modes dir 448)
-       (if filename
-           (setq file (expand-file-name (file-name-nondirectory filename)
-                                        dir))
-         (setq file (make-temp-name (expand-file-name "mm." dir))))
-       (let ((coding-system-for-write mm-binary-coding-system))
-         (write-region (point-min) (point-max) file nil 'nomesg))
-       (message "Viewing with %s" method)
-       (unwind-protect
-           (setq process
-                 (cond (needsterm
-                        (start-process "*display*" nil
-                                       "xterm"
-                                       "-e" shell-file-name 
-                                       shell-command-switch
-                                       (mm-mailcap-command
-                                        method file (mm-handle-type handle))))
-                       (copiousoutput
-                        (start-process "*display*"
-                                       (setq buffer 
-                                             (generate-new-buffer "*mm*"))
-                                       shell-file-name
-                                       shell-command-switch
-                                       (mm-mailcap-command
-                                        method file (mm-handle-type handle)))
-                        (switch-to-buffer buffer))
-                       (t
-                        (start-process "*display*"
+         (cond (needsterm
+                (unwind-protect
+                    (start-process "*display*" nil
+                                   "xterm"
+                                   "-e" shell-file-name
+                                   shell-command-switch
+                                   (mm-mailcap-command
+                                    method file (mm-handle-type handle)))
+                  (mm-handle-set-undisplayer handle (cons file buffer)))
+                (message "Displaying %s..." (format method file))
+                'external)
+               (copiousoutput
+                (with-current-buffer outbuf
+                  (forward-line 1)
+                  (mm-insert-inline
+                   handle
+                   (unwind-protect
+                       (progn
+                         (call-process shell-file-name nil
                                        (setq buffer
                                              (generate-new-buffer "*mm*"))
-                                       shell-file-name
+                                       nil
                                        shell-command-switch
                                        (mm-mailcap-command
-                                        method file (mm-handle-type handle))))))
-         (mm-handle-set-undisplayer handle (cons file buffer)))
-       (message "Displaying %s..." (format method file))))))
-
+                                        method file (mm-handle-type handle)))
+                         (if (buffer-live-p buffer)
+                             (save-excursion
+                               (set-buffer buffer)
+                               (buffer-string))))
+                     (progn
+                       (ignore-errors (delete-file file))
+                       (ignore-errors (delete-directory
+                                       (file-name-directory file)))
+                       (ignore-errors (kill-buffer buffer))))))
+                'inline)
+               (t
+                (unwind-protect
+                    (start-process "*display*"
+                                   (setq buffer
+                                         (generate-new-buffer "*mm*"))
+                                   shell-file-name
+                                   shell-command-switch
+                                   (mm-mailcap-command
+                                    method file (mm-handle-type handle)))
+                  (mm-handle-set-undisplayer handle (cons file buffer)))
+                (message "Displaying %s..." (format method file))
+                'external)))))))
+  
 (defun mm-mailcap-command (method file type-list)
   (let ((ctl (cdr type-list))
        (beg 0)
+       (uses-stdin t)
        out sub total)
-    (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t" method beg)
+    (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t\\|%%" method beg)
       (push (substring method beg (match-beginning 0)) out)
       (setq beg (match-end 0)
            total (match-string 0 method)
            sub (match-string 1 method))
       (cond
+       ((string= total "%%")
+       (push "%" out))
        ((string= total "%s")
+       (setq uses-stdin nil)
        (push (mm-quote-arg file) out))
        ((string= total "%t")
        (push (mm-quote-arg (car type-list)) out))
        (t
        (push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out))))
     (push (substring method beg (length method)) out)
+    (if uses-stdin
+       (progn
+         (push "<" out)
+         (push (mm-quote-arg file) out)))
     (mapconcat 'identity (nreverse out) "")))
     
 (defun mm-remove-parts (handles)
-  "Remove the displayed MIME parts represented by HANDLE."
+  "Remove the displayed MIME parts represented by HANDLES."
   (if (and (listp handles)
           (bufferp (car handles)))
       (mm-remove-part handles)
@@ -418,6 +508,7 @@ external if displayed external."
       (while (setq handle (pop handles))
        (cond
         ((stringp handle)
+         ;; Do nothing.
          )
         ((and (listp handle)
               (stringp (car handle)))
@@ -426,7 +517,7 @@ external if displayed external."
          (mm-remove-part handle)))))))
 
 (defun mm-destroy-parts (handles)
-  "Remove the displayed MIME parts represented by HANDLE."
+  "Remove the displayed MIME parts represented by HANDLES."
   (if (and (listp handles)
           (bufferp (car handles)))
       (mm-destroy-part handles)
@@ -434,6 +525,7 @@ external if displayed external."
       (while (setq handle (pop handles))
        (cond
         ((stringp handle)
+         ;; Do nothing.
          )
         ((and (listp handle)
               (stringp (car handle)))
@@ -572,7 +664,7 @@ external if displayed external."
     (save-excursion
       (if (member (mm-handle-media-supertype handle) '("text" "message"))
          (with-temp-buffer
-           (insert-buffer-substring (mm-handle-buffer handle))
+           (insert-buffer-substring (mm-handle-buffer handle))
            (mm-decode-content-transfer-encoding
             (mm-handle-encoding handle)
             (mm-handle-media-type handle))
@@ -636,7 +728,13 @@ external if displayed external."
         (methods
          (mapcar (lambda (i) (list (cdr (assoc 'viewer i))))
                  (mailcap-mime-info type 'all)))
-        (method (completing-read "Viewer: " methods)))
+        (method (let ((minibuffer-local-completion-map
+                       mm-viewer-completion-map))
+                  (completing-read "Viewer: " methods))))
+    (when (string= method "")
+      (error "No method given"))
+    (if (string-match "^[^% \t]+$" method) 
+       (setq method (concat method " %s")))
     (mm-display-external (copy-sequence handle) method)))
 
 (defun mm-preferred-alternative (handles &optional preferred)
@@ -662,9 +760,8 @@ external if displayed external."
     result))
 
 (defun mm-preferred-alternative-precedence (handles)
-  "Return the precedence based on HANDLES and mm-discouraged-alternatives."
-  (let ((seq (nreverse (mapcar (lambda (h)
-                                (mm-handle-media-type h))
+  "Return the precedence based on HANDLES and `mm-discouraged-alternatives'."
+  (let ((seq (nreverse (mapcar #'mm-handle-media-type
                               handles))))
     (dolist (disc (reverse mm-discouraged-alternatives))
       (dolist (elem (copy-sequence seq))
@@ -694,45 +791,66 @@ external if displayed external."
          (prog1
              (setq spec
                    (ignore-errors
-                     (cond
-                      ((equal type "xbm")
-                       ;; xbm images require special handling, since
-                       ;; the only way to create glyphs from these
-                       ;; (without a ton of work) is to write them
-                       ;; out to a file, and then create a file
-                       ;; specifier.
-                       (let ((file (make-temp-name
-                                    (expand-file-name "emm.xbm"
-                                                      mm-tmp-directory))))
-                         (unwind-protect
-                             (progn
-                               (write-region (point-min) (point-max) file)
-                               (make-glyph (list (cons 'x file))))
-                           (ignore-errors
-                             (delete-file file)))))
-                      (t
-                       (make-glyph
-                        (vector (intern type) :data (buffer-string)))))))
+                    ;; Avoid testing `make-glyph' since W3 may define
+                    ;; a bogus version of it.
+                     (if (fboundp 'create-image)
+                         (create-image (buffer-string) (intern type) 'data-p)
+                       (cond
+                        ((equal type "xbm")
+                         ;; xbm images require special handling, since
+                         ;; the only way to create glyphs from these
+                         ;; (without a ton of work) is to write them
+                         ;; out to a file, and then create a file
+                         ;; specifier.
+                         (let ((file (make-temp-name
+                                      (expand-file-name "emm.xbm"
+                                                        mm-tmp-directory))))
+                           (unwind-protect
+                               (progn
+                                 (write-region (point-min) (point-max) file)
+                                 (make-glyph (list (cons 'x file))))
+                             (ignore-errors
+                              (delete-file file)))))
+                        (t
+                         (make-glyph
+                          (vector (intern type) :data (buffer-string))))))))
            (mm-handle-set-cache handle spec))))))
 
 (defun mm-image-fit-p (handle)
   "Say whether the image in HANDLE will fit the current window."
   (let ((image (mm-get-image handle)))
-    (or mm-inline-large-images
-       (and (< (glyph-width image) (window-pixel-width))
-            (< (glyph-height image) (window-pixel-height))))))
+    (if (fboundp 'glyph-width)
+       ;; XEmacs' glyphs can actually tell us about their width, so
+       ;; lets be nice and smart about them.
+       (or mm-inline-large-images
+           (and (< (glyph-width image) (window-pixel-width))
+                (< (glyph-height image) (window-pixel-height))))
+      (let* ((size (image-size image))
+            (w (car size))
+            (h (cdr size)))
+       (or mm-inline-large-images
+           (and (< h (1- (window-height))) ; Don't include mode line.
+                (< w (window-width))))))))
 
 (defun mm-valid-image-format-p (format)
   "Say whether FORMAT can be displayed natively by Emacs."
-  (and (fboundp 'valid-image-instantiator-format-p)
-       (valid-image-instantiator-format-p format)))
+  (cond
+   ;; Handle XEmacs
+   ((fboundp 'valid-image-instantiator-format-p)
+    (valid-image-instantiator-format-p format))
+   ;; Handle Emacs 21
+   ((fboundp 'image-type-available-p)
+    (and (display-graphic-p)
+        (image-type-available-p format)))
+   ;; Nobody else can do images yet.
+   (t
+    nil)))
 
 (defun mm-valid-and-fit-image-p (format handle)
   "Say whether FORMAT can be displayed natively and HANDLE fits the window."
-  (and window-system
-       (mm-valid-image-format-p format)
+  (and (mm-valid-image-format-p format)
        (mm-image-fit-p handle)))
 
 (provide 'mm-decode)
 
-;; mm-decode.el ends here
+;;; mm-decode.el ends here
index 766f1ea..3baec82 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-encode.el --- Functions for encoding MIME things 
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'mail-parse)
 (require 'gnus-mailcap)
+(eval-and-compile
+  (autoload 'mm-body-7-or-8 "mm-bodies"))
 
 (defvar mm-content-transfer-encoding-defaults
   '(("text/x-patch" 8bit)
 If the encoding is `qp-or-base64', then either quoted-printable
 or base64 will be used, depending on what is more efficient.")
 
+(defvar mm-use-ultra-safe-encoding nil
+  "If non-nil, use encodings aimed at Procrustean bed survival.
+
+This means that textual parts are encoded as quoted-printable if they
+contain lines longer than 76 characters or starting with \"From \" in
+the body.  Non-7bit encodings (8bit, binary) are generally disallowed.
+This is to reduce the probability that a broken MTA or MDA changes the
+message.
+
+This variable should never be set directly, but bound before a call to
+`mml-generate-mime' or similar functions.")
+
 (defun mm-insert-rfc822-headers (charset encoding)
   "Insert text/plain headers with CHARSET and ENCODING."
   (insert "MIME-Version: 1.0\n")
@@ -50,8 +65,7 @@ or base64 will be used, depending on what is more efficient.")
   "Insert multipart/mixed headers."
   (let ((boundary "=-=-="))
     (insert "MIME-Version: 1.0\n")
-    (insert (format "Content-Type: multipart/mixed; boundary=\"%s\"\n"
-                   boundary))
+    (insert "Content-Type: multipart/mixed; boundary=\"" boundary "\"\n")
     boundary))
 
 (defun mm-default-file-encoding (file)
@@ -60,6 +74,14 @@ or base64 will be used, depending on what is more efficient.")
       "application/octet-stream"
     (mailcap-extension-to-mime (match-string 0 file))))
 
+(defun mm-safer-encoding (encoding)
+  "Return a safer but similar encoding."
+  (cond
+   ((memq encoding '(7bit 8bit quoted-printable)) 'quoted-printable)
+   ;; The remaing encodings are binary and base64 (and perhaps some
+   ;; non-standard ones), which are both turned into base64.
+   (t 'base64)))
+
 (defun mm-encode-content-transfer-encoding (encoding &optional type)
   (cond
    ((eq encoding 'quoted-printable)
@@ -75,8 +97,10 @@ or base64 will be used, depending on what is more efficient.")
        (message "Error while decoding: %s" error)
        nil)))
    ((memq encoding '(7bit 8bit binary))
+    ;; Do nothing.
     )
    ((null encoding)
+    ;; Do nothing.
     )
    ((functionp encoding)
     (ignore-errors (funcall encoding (point-min) (point-max))))
@@ -119,9 +143,13 @@ The encoding used is returned."
       (while rules
        (when (string-match (caar rules) type)
          (throw 'found
-                (if (eq (cadar rules) 'qp-or-base64)
-                    (mm-qp-or-base64)
-                  (cadar rules))))
+                (let ((encoding 
+                       (if (eq (cadr (car rules)) 'qp-or-base64)
+                           (mm-qp-or-base64)
+                         (cadr (car rules)))))
+                  (if mm-use-ultra-safe-encoding
+                      (mm-safer-encoding encoding)
+                    encoding))))
        (pop rules)))))
 
 (defun mm-qp-or-base64 ()
diff --git a/lisp/mm-partial.el b/lisp/mm-partial.el
new file mode 100644 (file)
index 0000000..38986c4
--- /dev/null
@@ -0,0 +1,159 @@
+;;; mm-partial.el --- showing message/partial
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Keywords: message partial
+
+;; 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.
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-when-compile 
+  (require 'cl))
+
+(require 'gnus-sum)
+(require 'mm-util)
+(require 'mm-decode)
+
+(defun mm-partial-find-parts (id &optional art)
+  (let ((headers (save-excursion
+                  (set-buffer gnus-summary-buffer)
+                  gnus-newsgroup-headers))
+       phandles header)
+    (while (setq header (pop headers))
+      (unless (eq (aref header 0) art)
+       (mm-with-unibyte-buffer
+         (gnus-request-article-this-buffer (aref header 0) 
+                                           gnus-newsgroup-name)
+         (when (search-forward id nil t)
+           (let ((nhandles (mm-dissect-buffer)) nid)
+             (if (consp (car nhandles))
+                 (mm-destroy-parts nhandles)
+               (setq nid (cdr (assq 'id 
+                                    (cdr (mm-handle-type nhandles)))))
+               (if (not (equal id nid))
+                   (mm-destroy-parts nhandles)
+                 (push nhandles phandles))))))))
+    phandles))
+
+;;;###autoload
+(defun mm-inline-partial (handle &optional no-display)
+  "Show the partial part of HANDLE.
+This function replaces the buffer of HANDLE with a buffer contains 
+the entire message.
+If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
+  (let ((id (cdr (assq 'id (cdr (mm-handle-type handle))))) 
+       phandles
+       (b (point)) (n 1) total
+       phandle nn ntotal
+       gnus-displaying-mime handles buffer)
+    (unless (mm-handle-cache handle)
+      (unless id
+       (error "Can not find message/partial id."))
+      (setq phandles
+           (sort (cons handle 
+                       (mm-partial-find-parts
+                        id 
+                        (save-excursion
+                          (set-buffer gnus-summary-buffer)
+                          (gnus-summary-article-number))))
+                 #'(lambda (a b)
+                     (let ((anumber (string-to-number 
+                                     (cdr (assq 'number 
+                                                (cdr (mm-handle-type a))))))
+                           (bnumber (string-to-number 
+                                     (cdr (assq 'number 
+                                                (cdr (mm-handle-type b)))))))
+                       (< anumber bnumber)))))
+      (setq gnus-article-mime-handles
+           (append (if (listp (car gnus-article-mime-handles))
+                       gnus-article-mime-handles
+                     (list gnus-article-mime-handles))
+                   phandles))
+      (save-excursion
+       (set-buffer (generate-new-buffer " *mm*"))
+       (while (setq phandle (pop phandles))
+         (setq nn (string-to-number 
+                   (cdr (assq 'number 
+                              (cdr (mm-handle-type phandle))))))
+         (setq ntotal (string-to-number 
+                       (cdr (assq 'total 
+                                  (cdr (mm-handle-type phandle))))))
+         (if ntotal
+             (if total
+                 (unless (eq total ntotal) 
+                 (error "The numbers of total are different."))
+               (setq total ntotal)))
+         (unless (< nn n)
+           (unless (eq nn n)
+             (error "Missing part %d" n))
+           (mm-insert-part phandle)
+           (goto-char (point-max))
+           (when (not (eq 0 (skip-chars-backward "\r\n")))
+             ;; remove tail blank spaces except one
+             (if (looking-at "\r?\n")
+                 (goto-char (match-end 0)))
+             (delete-region (point) (point-max)))
+           (setq n (+ n 1))))
+       (unless total
+         (error "Don't known the total number of"))
+       (if (<= n total)
+           (error "Missing part %d" n))
+       (kill-buffer (mm-handle-buffer handle))
+       (goto-char (point-min))
+       (let ((point (if (search-forward "\n\n" nil t) 
+                        (1- (point))
+                      (point-max))))
+         (goto-char (point-min))
+         (unless (re-search-forward "^mime-version:" point t)
+           (insert "MIME-Version: 1.0\n")))
+       (setcar handle (current-buffer))
+       (mm-handle-set-cache handle t)))
+    (unless no-display
+      (save-excursion
+       (save-restriction
+         (narrow-to-region b b)
+         (mm-insert-part handle)
+         (let (gnus-article-mime-handles)
+           (run-hooks 'gnus-article-decode-hook)
+           (gnus-article-prepare-display)
+           (setq handles gnus-article-mime-handles))
+         (when handles
+           ;; It is in article buffer.
+           (setq gnus-article-mime-handles
+                 (nconc (if (listp (car gnus-article-mime-handles))
+                          gnus-article-mime-handles
+                          (list gnus-article-mime-handles))
+                        (if (listp (car handles)) 
+                            handles (list handles)))))
+         (mm-handle-set-undisplayer
+          handle
+          `(lambda ()
+             (let (buffer-read-only)
+               (condition-case nil
+                   ;; This is only valid on XEmacs.
+                   (mapcar (lambda (prop)
+                           (remove-specifier
+                            (face-property 'default prop) (current-buffer)))
+                           '(background background-pixmap foreground))
+                 (error nil))
+               (delete-region ,(point-min-marker) ,(point-max-marker))))))))))
+
+;; mm-partial.el ends here
index a23a7f6..8a0264b 100644 (file)
@@ -1,5 +1,5 @@
-;;; mm-util.el --- Utility functions for MIME things
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;;; mm-util.el --- Utility functions for Mule and low level things
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+(eval-when-compile (require 'static))
+
+(require 'mail-prsvr)
+
 (defvar mm-mime-mule-charset-alist
   '((us-ascii ascii)
     (iso-8859-1 latin-iso8859-1)
     (iso-8859-3 latin-iso8859-3)
     (iso-8859-4 latin-iso8859-4)
     (iso-8859-5 cyrillic-iso8859-5)
-    (koi8-r cyrillic-iso8859-5)
+    ;; Non-mule (X)Emacs uses the last mule-charset for 8bit characters.
+    ;; The fake mule-charset, gnus-koi8-r, tells Gnus that the default 
+    ;; charset is koi8-r, not iso-8859-5.
+    (koi8-r cyrillic-iso8859-5 gnus-koi8-r)
     (iso-8859-6 arabic-iso8859-6)
     (iso-8859-7 greek-iso8859-7)
     (iso-8859-8 hebrew-iso8859-8)
                    chinese-cns11643-1 chinese-cns11643-2
                    chinese-cns11643-3 chinese-cns11643-4
                    chinese-cns11643-5 chinese-cns11643-6
-                   chinese-cns11643-7))
+                   chinese-cns11643-7)
+    (utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e))
   "Alist of MIME-charset/MULE-charsets.")
 
-
 (eval-and-compile
   (mapcar
    (lambda (elem)
          "Prompt the user for a coding system."
          (completing-read
           prompt (mapcar (lambda (s) (list (symbol-name (car s))))
-                         mm-mime-mule-charset-alist)))))))
+                         mm-mime-mule-charset-alist))))
+     (read-charset
+      . (lambda (prompt)
+         "Return a charset."
+         (intern
+          (completing-read
+           prompt
+           (mapcar (lambda (e) (list (symbol-name (car e))))
+                   mm-mime-mule-charset-alist)
+           nil t))))
+     (subst-char-in-string
+      . (lambda (from to string) ;; stolen (and renamed) from nnheader.el
+         "Replace characters in STRING from FROM to TO."
+         (let ((string (substring string 0))   ;Copy string.
+               (len (length string))
+               (idx 0))
+           ;; Replace all occurrences of FROM with TO.
+           (while (< idx len)
+             (when (= (aref string idx) from)
+               (aset string idx to))
+             (setq idx (1+ idx)))
+           string)))
+      )))
+
+(eval-and-compile
+  (defalias 'mm-char-or-char-int-p
+    (cond 
+     ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
+     ((fboundp 'char-valid-p) 'char-valid-p) 
+     (t 'identity))))
 
 (defvar mm-coding-system-list nil)
 (defun mm-get-coding-system-list ()
   (or mm-coding-system-list
       (setq mm-coding-system-list (mm-coding-system-list))))
 
-(defvar mm-charset-synonym-alist
-  '((big5 . cn-big5)
-    (gb2312 . cn-gb-2312)
-    (x-ctext . ctext))
-  "A mapping from invalid charset names to the real charset names.")
-
 (defun mm-coding-system-p (sym)
   "Return non-nil if SYM is a coding system."
   (or (and (fboundp 'coding-system-p) (coding-system-p sym))
       (memq sym (mm-get-coding-system-list))))
 
+(defvar mm-charset-synonym-alist
+  `((big5 . cn-big5)
+    (gb2312 . cn-gb-2312)
+    (cn-gb . cn-gb-2312)
+    ;; Windows-1252 is actually a superset of Latin-1.  See also
+    ;; `gnus-article-dumbquotes-map'.
+    ,(unless (mm-coding-system-p 'windows-1252) ; should be defined eventually
+       '(windows-1252 . iso-8859-1))
+    (x-ctext . ctext))
+  "A mapping from invalid charset names to the real charset names.")
+
 (defvar mm-binary-coding-system
   (cond 
    ((mm-coding-system-p 'binary) 'binary)
 ;;; Functions:
 
 (defun mm-mule-charset-to-mime-charset (charset)
-  "Return the MIME charset corresponding to MULE CHARSET."
+  "Return the MIME charset corresponding to the given Mule CHARSET."
   (let ((alist mm-mime-mule-charset-alist)
        out)
     (while alist
@@ -172,35 +215,53 @@ used as the line break code type of the coding system."
    ;; ascii
    ((eq charset 'us-ascii)
     'ascii)
-   ;; Check to see whether we can handle this charset.
+   ;; Check to see whether we can handle this charset.  (This depends
+   ;; on there being some coding system matching each `mime-charset'
+   ;; coding sysytem property defined, as there should be.)
    ((memq charset (mm-get-coding-system-list))
     charset)
    ;; Nope.
    (t
     nil)))
 
-(defun mm-replace-chars-in-string (string from to)
-  "Replace characters in STRING from FROM to TO."
-  (let ((string (substring string 0))  ;Copy string.
-       (len (length string))
-       (idx 0))
-    ;; Replace all occurrences of FROM with TO.
-    (while (< idx len)
-      (when (= (aref string idx) from)
-       (aset string idx to))
-      (setq idx (1+ idx)))
-    string))
+(defsubst mm-replace-chars-in-string (string from to)
+  (mm-subst-char-in-string from to string))
 
 (defsubst mm-enable-multibyte ()
-  "Enable multibyte in the current buffer."
-  (when (and (fboundp 'set-buffer-multibyte)
-             (boundp 'enable-multibyte-characters)
-            (default-value 'enable-multibyte-characters))
+  "Set the multibyte flag of the current buffer.
+Only do this if the default value of `enable-multibyte-characters' is
+non-nil.  This is a no-op in XEmacs."
+  (when (and (not (featurep 'xemacs))
+             (boundp 'default-enable-multibyte-characters)
+            default-enable-multibyte-characters
+            (fboundp 'set-buffer-multibyte))
     (set-buffer-multibyte t)))
 
 (defsubst mm-disable-multibyte ()
-  "Disable multibyte in the current buffer."
-  (when (fboundp 'set-buffer-multibyte)
+  "Unset the multibyte flag of in the current buffer.
+This is a no-op in XEmacs."
+  (when (and (not (featurep 'xemacs))
+            (fboundp 'set-buffer-multibyte))
+    (set-buffer-multibyte nil)))
+
+(defsubst mm-enable-multibyte-mule4 ()
+  "Enable multibyte in the current buffer.
+Only used in Emacs Mule 4."
+  (when (and (not (featurep 'xemacs))
+             (boundp 'default-enable-multibyte-characters)
+            default-enable-multibyte-characters
+            (fboundp 'set-buffer-multibyte)
+            (fboundp 'charsetp)
+            (not (charsetp 'eight-bit-control)))
+    (set-buffer-multibyte t)))
+
+(defsubst mm-disable-multibyte-mule4 ()
+  "Disable multibyte in the current buffer.
+Only used in Emacs Mule 4."
+  (when (and (not (featurep 'xemacs))
+            (fboundp 'set-buffer-multibyte)
+            (fboundp 'charsetp)
+            (not (charsetp 'eight-bit-control)))
     (set-buffer-multibyte nil)))
 
 (defun mm-preferred-coding-system (charset)
@@ -208,9 +269,44 @@ used as the line break code type of the coding system."
   (or (get-charset-property charset 'prefered-coding-system)
       (get-charset-property charset 'preferred-coding-system)))
 
+(defun mm-charset-after (&optional pos)
+  "Return charset of a character in current buffer at position POS.
+If POS is nil, it defauls to the current point.
+If POS is out of range, the value is nil.
+If the charset is `composition', return the actual one."
+  (let ((char (char-after pos)) charset)
+    (if (< (mm-char-int char) 128)
+       (setq charset 'ascii)
+      ;; charset-after is fake in some Emacsen.
+      (setq charset (and (fboundp 'char-charset) (char-charset char)))
+      (if (eq charset 'composition)
+         (let ((p (or pos (point))))
+           (cadr (find-charset-region p (1+ p))))
+       (if (and charset (not (memq charset '(ascii eight-bit-control
+                                                   eight-bit-graphic))))
+           charset
+         (or
+          mail-parse-mule-charset ;; cached mule-charset
+          (progn
+            (setq mail-parse-mule-charset
+                  (and (boundp 'current-language-environment)
+                     (car (last 
+                           (assq 'charset 
+                                 (assoc current-language-environment 
+                                        language-info-alist))))))
+            (if (or (not mail-parse-mule-charset)
+                    (eq mail-parse-mule-charset 'ascii))
+                (setq mail-parse-mule-charset
+                      (or (car (last (assq mail-parse-charset
+                                           mm-mime-mule-charset-alist)))
+                          'latin-iso8859-1)))
+            mail-parse-mule-charset)))))))
+
 (defun mm-mime-charset (charset)
   "Return the MIME charset corresponding to the MULE CHARSET."
-  (if (fboundp 'coding-system-get)
+  (if (eq charset 'unknown)
+      (error "8-bit characters are found in the message, please specify charset."))
+  (if (and (fboundp 'coding-system-get) (fboundp 'get-charset-property))
       ;; This exists in Emacs 20.
       (or
        (and (mm-preferred-coding-system charset)
@@ -223,61 +319,107 @@ used as the line break code type of the coding system."
     ;; This is for XEmacs.
     (mm-mule-charset-to-mime-charset charset)))
 
+(defun mm-delete-duplicates (list)
+  "Simple  substitute for CL `delete-duplicates', testing with `equal'."
+  (let (result head)
+    (while list
+      (setq head (car list))
+      (setq list (delete head list))
+      (setq result (cons head result)))
+    (nreverse result)))
+
 (defun mm-find-mime-charset-region (b e)
   "Return the MIME charsets needed to encode the region between B and E."
-  (let ((charsets
-        (mapcar 'mm-mime-charset
-                (delq 'ascii
-                      (mm-find-charset-region b e)))))
+  (let ((charsets (mapcar 'mm-mime-charset
+                         (delq 'ascii
+                               (mm-find-charset-region b e)))))
     (when (memq 'iso-2022-jp-2 charsets)
       (setq charsets (delq 'iso-2022-jp charsets)))
-    (delete-duplicates charsets)
+    (setq charsets (mm-delete-duplicates charsets))
     (if (and (> (length charsets) 1)
-            (fboundp 'find-coding-systems-for-charsets)
-            (memq 'utf-8 (find-coding-systems-for-charsets charsets)))
+            (fboundp 'find-coding-systems-region)
+            (memq 'utf-8 (find-coding-systems-region b e)))
        '(utf-8)
       charsets)))
 
 (defsubst mm-multibyte-p ()
   "Say whether multibyte is enabled."
-  (or (string-match "XEmacs\\|Lucid" emacs-version)
-      (and (boundp 'enable-multibyte-characters)
-          enable-multibyte-characters)))
+  (if (and (not (featurep 'xemacs))
+          (boundp 'enable-multibyte-characters))
+      enable-multibyte-characters
+    (featurep 'mule)))
 
 (defmacro mm-with-unibyte-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'.
-See also `with-temp-file' and `with-output-to-string'."
-  (let ((temp-buffer (make-symbol "temp-buffer"))
-       (multibyte (make-symbol "multibyte")))
-    `(if (or (string-match "XEmacs\\|Lucid" emacs-version)
-            (not (boundp 'enable-multibyte-characters)))
-        (with-temp-buffer ,@forms)
-       (let ((,multibyte (default-value 'enable-multibyte-characters))
-            ,temp-buffer)
-        (unwind-protect
-            (progn
-              (setq-default enable-multibyte-characters nil)
-              (setq ,temp-buffer
-                    (get-buffer-create (generate-new-buffer-name " *temp*")))
-              (unwind-protect
-                  (with-current-buffer ,temp-buffer
-                    (let ((buffer-file-coding-system mm-binary-coding-system)
-                          (coding-system-for-read mm-binary-coding-system)
-                          (coding-system-for-write mm-binary-coding-system))
-                      ,@forms))
-                (and (buffer-name ,temp-buffer)
-                     (kill-buffer ,temp-buffer))))
-          (setq-default enable-multibyte-characters ,multibyte))))))
+Use unibyte mode for this."
+  `(let (default-enable-multibyte-characters)
+     (with-temp-buffer ,@forms)))
 (put 'mm-with-unibyte-buffer 'lisp-indent-function 0)
 (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body))
 
+(defmacro mm-with-unibyte-current-buffer (&rest forms)
+  "Evaluate FORMS with current current buffer temporarily made unibyte.
+Also bind `default-enable-multibyte-characters' to nil.
+Equivalent to `progn' in XEmacs"
+  (let ((buffer (make-symbol "buffer")))
+    `(if (and (not (featurep 'xemacs))
+             (boundp 'enable-multibyte-characters)
+             enable-multibyte-characters
+             (fboundp 'set-buffer-multibyte))
+        (let ((,buffer (current-buffer)))
+          (unwind-protect
+              (let (default-enable-multibyte-characters)
+                (set-buffer-multibyte nil)
+                ,@forms)
+            (set-buffer ,buffer)
+            (set-buffer-multibyte t)))
+       (let (default-enable-multibyte-characters)
+        ,@forms))))
+(put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0)
+(put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
+
+(defmacro mm-with-unibyte-current-buffer-mule4 (&rest forms)
+  "Evaluate FORMS there like `progn' in current buffer.
+Mule4 only."
+  (let ((buffer (make-symbol "buffer")))
+    `(if (and (not (featurep 'xemacs))
+             (boundp 'enable-multibyte-characters)
+             enable-multibyte-characters
+             (fboundp 'set-buffer-multibyte)
+             (fboundp 'charsetp)
+             (not (charsetp 'eight-bit-control))) ;; For Emacs Mule 4 only.
+       (let ((,buffer (current-buffer)))
+        (unwind-protect
+            (let (default-enable-multibyte-characters)
+              (set-buffer-multibyte nil)
+              ,@forms)
+          (set-buffer ,buffer)
+          (set-buffer-multibyte t)))
+       (let (default-enable-multibyte-characters)
+        ,@forms))))
+(put 'mm-with-unibyte-current-buffer-mule4 'lisp-indent-function 0)
+(put 'mm-with-unibyte-current-buffer-mule4 'edebug-form-spec '(body))
+
+(defmacro mm-with-unibyte (&rest forms)
+  "Eval the FORMS with the default value of `enable-multibyte-characters' nil, ."
+  `(let (default-enable-multibyte-characters)
+     ,@forms))
+(put 'mm-with-unibyte 'lisp-indent-function 0)
+(put 'mm-with-unibyte 'edebug-form-spec '(body))
+
 (defun mm-find-charset-region (b e)
-  "Return a list of charsets in the region."
+  "Return a list of Emacs charsets in the region B to E."
   (cond
    ((and (mm-multibyte-p)
         (fboundp 'find-charset-region))
-    (find-charset-region b e))
-   ((not (boundp 'current-language-environment))
+    ;; Remove composition since the base charsets have been included.
+    ;; Remove eight-bit-*, treat them as ascii.
+    (let ((css (find-charset-region b e)))
+      (mapcar (lambda (cs) (setq css (delq cs css)))
+             '(composition eight-bit-control eight-bit-graphic))
+      css))
+   (t
+    ;; We are in a unibyte buffer or XEmacs non-mule, so we futz around a bit.
     (save-excursion
       (save-restriction
        (narrow-to-region b e)
@@ -285,41 +427,33 @@ See also `with-temp-file' and `with-output-to-string'."
        (skip-chars-forward "\0-\177")
        (if (eobp)
            '(ascii)
-         (delq nil (list 'ascii mail-parse-charset))))))
-   (t
-    ;; We are in a unibyte buffer, so we futz around a bit.
-    (save-excursion
-      (save-restriction
-       (narrow-to-region b e)
-       (goto-char (point-min))
-       (let ((entry (assoc (capitalize current-language-environment)
-                           language-info-alist)))
-         (skip-chars-forward "\0-\177")
-         (if (eobp)
-             '(ascii)
-           (list 'ascii (car (last (assq 'charset entry)))))))))))
-
-(defun mm-read-charset (prompt)
-  "Return a charset."
-  (intern
-   (completing-read
-    prompt
-    (mapcar (lambda (e) (list (symbol-name (car e))))
-           mm-mime-mule-charset-alist)
-    nil t)))
-
-(defun mm-quote-arg (arg)
-  "Return a version of ARG that is safe to evaluate in a shell."
-  (let ((pos 0) new-pos accum)
-    ;; *** bug: we don't handle newline characters properly
-    (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
-      (push (substring arg pos new-pos) accum)
-      (push "\\" accum)
-      (push (list (aref arg new-pos)) accum)
-      (setq pos (1+ new-pos)))
-    (if (= pos 0)
-        arg
-      (apply 'concat (nconc (nreverse accum) (list (substring arg pos)))))))
+         (let (charset)
+           (setq charset
+                 (and (boundp 'current-language-environment)
+                      (car (last (assq 'charset 
+                                       (assoc current-language-environment 
+                                              language-info-alist))))))
+           (if (eq charset 'ascii) (setq charset nil))
+           (or charset
+               (setq charset
+                     (car (last (assq mail-parse-charset
+                                      mm-mime-mule-charset-alist)))))
+           (list 'ascii (or charset 'latin-iso8859-1)))))))))
+
+(static-if (fboundp 'shell-quote-argument)
+    (defalias 'mm-quote-arg 'shell-quote-argument)
+  (defun mm-quote-arg (arg)
+    "Return a version of ARG that is safe to evaluate in a shell."
+    (let ((pos 0) new-pos accum)
+      ;; *** bug: we don't handle newline characters properly
+      (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
+       (push (substring arg pos new-pos) accum)
+       (push "\\" accum)
+       (push (list (aref arg new-pos)) accum)
+       (setq pos (1+ new-pos)))
+      (if (= pos 0)
+         arg
+       (apply 'concat (nconc (nreverse accum) (list (substring arg pos))))))))
 
 (defun mm-auto-mode-alist ()
   "Return an `auto-mode-alist' with only the .gz (etc) thingies."
@@ -399,6 +533,16 @@ If INHIBIT is non-nil, inhibit mm-inhibit-file-name-handlers."
           inhibit-file-name-handlers)))
     (write-region start end filename append visit lockname)))
 
+(defun mm-image-load-path (&optional package)
+  (let (dir result)
+    (dolist (path load-path (nreverse result))
+      (if (file-directory-p
+          (setq dir (concat (file-name-directory
+                             (directory-file-name path))
+                            "etc/" (or package "gnus/"))))
+         (push dir result))
+      (push path result))))
+
 (provide 'mm-util)
 
 ;;; mm-util.el ends here
index 4f66013..0029a4a 100644 (file)
@@ -1,10 +1,10 @@
-;;; mm-uu.el -- Return uu stuffs as mm handles
-;; Copyright (c) 1998,99 by Shenghuo Zhu
+;;; mm-uu.el -- Return uu stuff as mm handles
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: postscript uudecode binhex shar forward
+;; Keywords: postscript uudecode binhex shar forward news
 
-;; This file is part of pgnus.
+;; 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
@@ -26,8 +26,8 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'mail-parse)
-(require 'message)
 (require 'nnheader)
 (require 'mm-decode)
 (require 'gnus-mailcap)
@@ -77,7 +77,7 @@ decoder, such as hexbin."
   :group 'gnus-article-mime) 
 
 (defconst mm-uu-shar-begin-line "^#! */bin/sh")
-(defconst mm-uu-shar-end-line "^exit 0\\|^$")
+(defconst mm-uu-shar-end-line "^exit 0")
 
 ;;; Thanks to Edward J. Sabol <sabol@alderaan.gsfc.nasa.gov> and 
 ;;; Peter von der Ah\'e <pahe@daimi.au.dk>
@@ -155,7 +155,7 @@ To disable dissecting shar codes, for instance, add
                       (let ((nnheader-file-name-translation-alist
                              '((?/ . ?,) (? . ?_) (?* . ?_) (?$ . ?_))))
                         (nnheader-translate-file-chars (match-string 1))))))
-       (forward-line) ;; in case of failure
+       (forward-line);; in case of failure
        (setq start-char-1 (point))
        (setq end-line (symbol-value
                        (intern (concat "mm-uu-" (symbol-name type)
@@ -165,55 +165,62 @@ To disable dissecting shar codes, for instance, add
          (setq end-char-1 (match-beginning 0))
          (forward-line)
          (setq end-char (point))
-         (when (or (not (eq type 'binhex))
-                   (setq file-name
-                         (ignore-errors
-                           (binhex-decode-region start-char end-char t))))
+         (when (cond 
+                ((eq type 'binhex)
+                 (setq file-name
+                       (ignore-errors
+                         (binhex-decode-region start-char end-char t))))
+                ((eq type 'forward)
+                 (save-excursion
+                   (goto-char start-char-1)
+                   (looking-at "[\r\n]*[a-zA-Z][a-zA-Z0-9-]*:")))
+                (t t))
            (if (> start-char text-start)
                (push
                 (mm-make-handle (mm-uu-copy-to-buffer text-start start-char)
-                      text-plain-type)
+                                text-plain-type)
                 result))
            (push
             (cond
              ((eq type 'postscript)
               (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    '("application/postscript")))
+                              '("application/postscript")))
              ((eq type 'forward)
               (mm-make-handle (mm-uu-copy-to-buffer start-char-1 end-char-1)
                               '("message/rfc822" (charset . gnus-decoded))))
              ((eq type 'uu)
               (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    (list (or (and file-name
-                                   (string-match "\\.[^\\.]+$" file-name)
-                                   (mailcap-extension-to-mime
-                                    (match-string 0 file-name)))
-                              "application/octet-stream"))
-                    'x-uuencode nil
-                    (if (and file-name (not (equal file-name "")))
-                        (list mm-dissect-disposition
-                              (cons 'filename file-name)))))
+                              (list (or (and file-name
+                                             (string-match "\\.[^\\.]+$"
+                                                           file-name)
+                                             (mailcap-extension-to-mime
+                                              (match-string 0 file-name)))
+                                        "application/octet-stream"))
+                              'x-uuencode nil
+                              (if (and file-name (not (equal file-name "")))
+                                  (list mm-dissect-disposition
+                                        (cons 'filename file-name)))))
              ((eq type 'binhex)
               (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    (list (or (and file-name
-                                   (string-match "\\.[^\\.]+$" file-name)
-                                   (mailcap-extension-to-mime
-                                    (match-string 0 file-name)))
-                              "application/octet-stream"))
-                    'x-binhex nil
-                    (if (and file-name (not (equal file-name "")))
-                        (list mm-dissect-disposition
-                              (cons 'filename file-name)))))
+                              (list (or (and file-name
+                                             (string-match "\\.[^\\.]+$" file-name)
+                                             (mailcap-extension-to-mime
+                                              (match-string 0 file-name)))
+                                        "application/octet-stream"))
+                              'x-binhex nil
+                              (if (and file-name (not (equal file-name "")))
+                                  (list mm-dissect-disposition
+                                        (cons 'filename file-name)))))
              ((eq type 'shar)
               (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    '("application/x-shar"))))
+                              '("application/x-shar"))))
             result)
            (setq text-start end-char))))
       (when result
        (if (> (point-max) (1+ text-start))
            (push
             (mm-make-handle (mm-uu-copy-to-buffer text-start (point-max))
-                  text-plain-type)
+                            text-plain-type)
             result))
        (setq result (cons "multipart/mixed" (nreverse result))))
       result)))
index 7a4851a..d2a67a0 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-view.el --- Functions for viewing MIME objects
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -23,6 +23,7 @@
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'mail-parse)
 (require 'mailcap)
 (require 'mm-bodies)
   (autoload 'gnus-article-prepare-display "gnus-art")
   (autoload 'vcard-parse-string "vcard")
   (autoload 'vcard-format-string "vcard")
+  (autoload 'fill-flowed "flow-fill")
   (autoload 'diff-mode "diff-mode"))
 
-;; Avoid byte compile warning.
-(defvar gnus-article-mime-handles)
-
 ;;;
 ;;; Functions for displaying various formats inline
 ;;;
+(defun mm-inline-image-emacs (handle)
+  (let ((b (point-marker))
+       buffer-read-only)
+    (insert "\n")
+    (put-image (mm-get-image handle) b)
+    (mm-handle-set-undisplayer
+     handle
+     `(lambda () (remove-images ,b (1+ ,b))))))
 
-(defun mm-inline-image (handle)
+(defun mm-inline-image-xemacs (handle)
   (let ((b (point))
        (annot (make-annotation (mm-get-image handle) nil 'text))
        buffer-read-only)
     (set-extent-property annot 'mm t)
     (set-extent-property annot 'duplicable t)))
 
+(eval-and-compile
+  (if (featurep 'xemacs)
+      (defalias 'mm-inline-image 'mm-inline-image-xemacs)
+    (defalias 'mm-inline-image 'mm-inline-image-emacs)))
+
 (defvar mm-w3-setup nil)
 (defun mm-setup-w3 ()
   (unless mm-w3-setup
                    (and (boundp 'w3-meta-charset-content-type-regexp)
                         (re-search-forward
                          w3-meta-charset-content-type-regexp nil t)))
-               (setq charset (w3-coding-system-for-mime-charset 
-                              (buffer-substring-no-properties 
-                               (match-beginning 2) 
-                               (match-end 2)))))
+               (setq charset (or (w3-coding-system-for-mime-charset 
+                                  (buffer-substring-no-properties 
+                                   (match-beginning 2) 
+                                   (match-end 2)))
+                                 charset)))
            (delete-region (point-min) (point-max))
            (insert (mm-decode-string text charset))
            (save-window-excursion
              (save-restriction
                (let ((w3-strict-width width)
+                     ;; Don't let w3 set the global version of
+                     ;; this variable.
+                     (fill-column fill-column)
                      (url-standalone-mode t))
                  (condition-case var
                      (w3-region (point-min) (point-max))
-                   (error)))))
+                   (error
+                    (message
+                     "Error while rendering html; showing as text/plain"))))))
            (mm-handle-set-undisplayer
             handle
             `(lambda ()
                (let (buffer-read-only)
                  (if (functionp 'remove-specifier)
-                     (mapc (lambda (prop)
-                             (remove-specifier
-                              (face-property 'default prop) (current-buffer)))
-                           '(background background-pixmap foreground)))
+                     (mapcar (lambda (prop)
+                               (remove-specifier
+                                (face-property 'default prop)
+                                (current-buffer)))
+                             '(background background-pixmap foreground)))
                  (delete-region ,(point-min-marker)
                                 ,(point-max-marker)))))))))
      ((or (equal type "enriched")
       (mm-insert-inline
        handle
        (concat "\n-- \n"
-              (vcard-format-string
-               (vcard-parse-string (mm-get-part handle)
-                                   'vcard-standard-filter)))))
+              (if (fboundp 'vcard-pretty-print)
+                  (vcard-pretty-print (mm-get-part handle))
+                (vcard-format-string
+                 (vcard-parse-string (mm-get-part handle)
+                                     'vcard-standard-filter))))))
      (t
-      (setq text (mm-get-part handle))
       (let ((b (point))
            (charset (mail-content-type-get
                      (mm-handle-type handle) 'charset)))
-       (insert (mm-decode-string text charset))
+       (if (or (eq charset 'gnus-decoded)
+               ;; This is probably not entirely correct, but
+               ;; makes rfc822 parts with embedded multiparts work. 
+               (eq mail-parse-charset 'gnus-decoded))
+           (save-restriction
+             (narrow-to-region (point) (point))
+             (mm-insert-part handle)
+             (goto-char (point-max)))
+         (insert (mm-decode-string (mm-get-part handle) charset)))
+       (when (and (equal type "plain")
+                  (equal (cdr (assoc 'format (mm-handle-type handle)))
+                         "flowed"))
+         (save-restriction
+           (narrow-to-region b (point))
+           (goto-char b)
+           (fill-flowed)
+           (goto-char (point-max))))
        (save-restriction
          (narrow-to-region b (point))
          (set-text-properties (point-min) (point-max) nil)
   (mm-enable-multibyte)
   (let (handles)
     (let (gnus-article-mime-handles)
-      ;; Double decode problem may happen. See mm-inline-message.
+      ;; Double decode problem may happen.  See mm-inline-message.
       (run-hooks 'gnus-article-decode-hook)
       (gnus-article-prepare-display)
       (setq handles gnus-article-mime-handles))
        (charset (mail-content-type-get
                  (mm-handle-type handle) 'charset))
        gnus-displaying-mime handles)
+    (when (and charset
+              (stringp charset))
+      (setq charset (intern (downcase charset)))
+      (when (eq charset 'us-ascii)
+       (setq charset nil)))
     (save-excursion
       (save-restriction
        (narrow-to-region b b)
        (mm-insert-part handle)
        (let (gnus-article-mime-handles
-             (gnus-newsgroup-charset (or charset gnus-newsgroup-charset)))
+             ;; disable prepare hook 
+             gnus-article-prepare-hook  
+             (gnus-newsgroup-charset
+              (or charset gnus-newsgroup-charset)))
          (run-hooks 'gnus-article-decode-hook)
          (gnus-article-prepare-display)
          (setq handles gnus-article-mime-handles))
         handle
         `(lambda ()
            (let (buffer-read-only)
-             (ignore-errors
-               ;; This is only valid on XEmacs.
-               (mapc (lambda (prop)
-                       (remove-specifier
-                        (face-property 'default prop) (current-buffer)))
-                     '(background background-pixmap foreground)))
+             (if (fboundp 'remove-specifier)
+                 ;; This is only valid on XEmacs.
+                 (mapcar (lambda (prop)
+                           (remove-specifier
+                            (face-property 'default prop) (current-buffer)))
+                         '(background background-pixmap foreground)))
              (delete-region ,(point-min-marker) ,(point-max-marker)))))))))
 
-(defun mm-display-patch-inline (handle)
+(defun mm-display-inline-fontify (handle mode)
   (let (text)
     (with-temp-buffer
       (mm-insert-part handle)
-      (diff-mode)
+      (funcall mode)
       (font-lock-fontify-buffer)
       (when (fboundp 'extent-list)
        (map-extents (lambda (ext ignored)
       (setq text (buffer-string)))
     (mm-insert-inline handle text)))
 
+(defun mm-display-patch-inline (handle)
+  (mm-display-inline-fontify handle 'diff-mode))
+
+(defun mm-display-elisp-inline (handle)
+  (mm-display-inline-fontify handle 'emacs-lisp-mode))
+
 (provide 'mm-view)
 
 ;; mm-view.el ends here
index e84e955..07c2bc7 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mml.el --- A package for parsing and validating MML documents
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
 (require 'mm-bodies)
 (require 'mm-encode)
 (require 'mm-decode)
+(eval-when-compile (require 'cl))
 
 (eval-and-compile
-  (autoload 'message-make-message-id "message"))
+  (autoload 'message-make-message-id "message")
+  (autoload 'gnus-setup-posting-charset "gnus-msg")
+  (autoload 'gnus-add-minor-mode "gnus-ems")
+  (autoload 'message-fetch-field "message")
+  (autoload 'message-posting-charset "message"))
 
-(defvar mml-generate-multipart-alist
-  '(("signed" . rfc2015-generate-signed-multipart)
-    ("encrypted" . rfc2015-generate-encrypted-multipart))
+(defvar mml-generate-multipart-alist nil
   "*Alist of multipart generation functions.
-
 Each entry has the form (NAME . FUNCTION), where
-NAME: is a string containing the name of the part (without the 
+NAME is a string containing the name of the part (without the 
 leading \"/multipart/\"),
-FUNCTION: is a Lisp function which is called to generate the part.
+FUNCTION is a Lisp function which is called to generate the part.
 
 The Lisp function has to supply the appropriate MIME headers and the
 contents of this part.")
@@ -64,6 +66,36 @@ suggestion each time.  The function is called with one parameter,
 which is a number that says how many times the function has been
 called for this message.")
 
+(defvar mml-confirmation-set nil
+  "A list of symbols, each of which disables some warning.
+`unknown-encoding': always send messages contain characters with
+unknown encoding; `use-ascii': always use ASCII for those characters
+with unknown encoding; `multipart': always send messages with more than
+one charsets.")
+
+(defvar mml-generate-mime-preprocess-function nil
+  "A function called before generating a mime part.
+The function is called with one parameter, which is the part to be 
+generated.")
+
+(defvar mml-generate-mime-postprocess-function nil
+  "A function called after generating a mime part.
+The function is called with one parameter, which is the generated part.")
+
+(defvar mml-generate-default-type "text/plain")
+
+(defvar mml-buffer-list nil)
+
+(defun mml-generate-new-buffer (name) 
+  (let ((buf (generate-new-buffer name)))
+    (push buf mml-buffer-list)
+    buf))
+
+(defun mml-destroy-buffers ()
+  (let (kill-buffer-hook)
+    (mapcar 'kill-buffer mml-buffer-list)
+    (setq mml-buffer-list nil)))
+
 (defun mml-parse ()
   "Parse the current buffer as an MML document."
   (goto-char (point-min))
@@ -76,7 +108,7 @@ called for this message.")
 
 (defun mml-parse-1 ()
   "Parse the current buffer as an MML document."
-  (let (struct tag point contents charsets warn)
+  (let (struct tag point contents charsets warn use-ascii no-markup-p raw)
     (while (and (not (eobp))
                (not (looking-at "<#/multipart")))
       (cond
@@ -86,23 +118,44 @@ called for this message.")
        (push (nconc (mml-read-tag) (list (cons 'contents (mml-read-part))))
              struct))
        (t
-       (if (looking-at "<#part")
-           (setq tag (mml-read-tag))
+       (if (or (looking-at "<#part") (looking-at "<#mml"))
+           (setq tag (mml-read-tag)
+                 no-markup-p nil
+                 warn nil)
          (setq tag (list 'part '(type . "text/plain"))
+               no-markup-p t
                warn t))
-       (setq point (point)
-             contents (mml-read-part)
-             charsets (mm-find-mime-charset-region point (point)))
-       (if (< (length charsets) 2)
-           (push (nconc tag (list (cons 'contents contents)))
-                 struct)
+       (setq raw (cdr (assq 'raw tag))
+             point (point)
+             contents (mml-read-part (eq 'mml (car tag)))
+             charsets (if raw nil 
+                        (mm-find-mime-charset-region point (point))))
+       (when (and (not raw) (memq nil charsets))
+         (if (or (memq 'unknown-encoding mml-confirmation-set)
+                 (y-or-n-p
+                  "Message contains characters with unknown encoding.  Really send?"))
+             (if (setq use-ascii 
+                       (or (memq 'use-ascii mml-confirmation-set)
+                           (y-or-n-p "Use ASCII as charset?")))
+                 (setq charsets (delq nil charsets))
+               (setq warn nil))
+           (error "Edit your message to remove those characters")))
+       (if (or raw
+               (eq 'mml (car tag))
+               (< (length charsets) 2))
+           (if (or (not no-markup-p)
+                   (string-match "[^ \t\r\n]" contents))
+               ;; Don't create blank parts.
+               (push (nconc tag (list (cons 'contents contents)))
+                     struct))
          (let ((nstruct (mml-parse-singlepart-with-multiple-charsets
-                         tag point (point))))
+                         tag point (point) use-ascii)))
            (when (and warn
+                      (not (memq 'multipart mml-confirmation-set))
                       (not
                        (y-or-n-p
                         (format
-                         "Warning: Your message contains %d parts.  Really send? "
+                         "Warning: Your message contains more than %d parts.  Really send? "
                          (length nstruct)))))
              (error "Edit your message to use only one charset"))
            (setq struct (nconc nstruct struct)))))))
@@ -110,56 +163,63 @@ called for this message.")
       (forward-line 1))
     (nreverse struct)))
 
-(defun mml-parse-singlepart-with-multiple-charsets (orig-tag beg end)
+(defun mml-parse-singlepart-with-multiple-charsets 
+  (orig-tag beg end &optional use-ascii)
   (save-excursion
-    (narrow-to-region beg end)
-    (goto-char (point-min))
-    (let ((current (mm-mime-charset (char-charset (following-char))))
-         charset struct space newline paragraph)
-      (while (not (eobp))
-       (cond
-        ;; The charset remains the same.
-        ((or (eq (setq charset (mm-mime-charset
-                                (char-charset (following-char)))) 'us-ascii)
-             (eq charset current)))
-        ;; The initial charset was ascii.
-        ((eq current 'us-ascii)
-         (setq current charset
-               space nil
-               newline nil
-               paragraph nil))
-        ;; We have a change in charsets.
-        (t
-         (push (append
-                orig-tag
-                (list (cons 'contents
-                            (buffer-substring-no-properties
-                             beg (or paragraph newline space (point))))))
-               struct)
-         (setq beg (or paragraph newline space (point))
-               current charset
-               space nil
-               newline nil
-               paragraph nil)))
-       ;; Compute places where it might be nice to break the part.
-       (cond
-        ((memq (following-char) '(?  ?\t))
-         (setq space (1+ (point))))
-        ((eq (following-char) ?\n)
-         (setq newline (1+ (point))))
-        ((and (eq (following-char) ?\n)
-              (not (bobp))
-              (eq (char-after (1- (point))) ?\n))
-         (setq paragraph (point))))
-       (forward-char 1))
-      ;; Do the final part.
-      (unless (= beg (point))
-       (push (append orig-tag
-                     (list (cons 'contents
-                                 (buffer-substring-no-properties
-                                  beg (point)))))
-             struct))
-      struct)))
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (let ((current (or (mm-mime-charset (mm-charset-after))
+                        (and use-ascii 'us-ascii)))
+           charset struct space newline paragraph)
+       (while (not (eobp))
+         (setq charset (mm-mime-charset (mm-charset-after)))
+         (cond
+          ;; The charset remains the same.
+          ((eq charset 'us-ascii))
+          ((or (and use-ascii (not charset))
+               (eq charset current))
+           (setq space nil
+                 newline nil
+                 paragraph nil))
+          ;; The initial charset was ascii.
+          ((eq current 'us-ascii)
+           (setq current charset
+                 space nil
+                 newline nil
+                 paragraph nil))
+          ;; We have a change in charsets.
+          (t
+           (push (append
+                  orig-tag
+                  (list (cons 'contents
+                              (buffer-substring-no-properties
+                               beg (or paragraph newline space (point))))))
+                 struct)
+           (setq beg (or paragraph newline space (point))
+                 current charset
+                 space nil
+                 newline nil
+                 paragraph nil)))
+         ;; Compute places where it might be nice to break the part.
+         (cond
+          ((memq (following-char) '(?  ?\t))
+           (setq space (1+ (point))))
+          ((and (eq (following-char) ?\n)
+                (not (bobp))
+                (eq (char-after (1- (point))) ?\n))
+           (setq paragraph (point)))
+          ((eq (following-char) ?\n)
+           (setq newline (1+ (point)))))
+         (forward-char 1))
+       ;; Do the final part.
+       (unless (= beg (point))
+         (push (append orig-tag
+                       (list (cons 'contents
+                                   (buffer-substring-no-properties
+                                    beg (point)))))
+               struct))
+       struct))))
 
 (defun mml-read-tag ()
   "Read a tag and return the contents."
@@ -168,7 +228,7 @@ called for this message.")
     (setq name (buffer-substring-no-properties
                (point) (progn (forward-sexp 1) (point))))
     (skip-chars-forward " \t\n")
-    (while (not (looking-at ">"))
+    (while (not (looking-at ">[ \t]*\n?"))
       (setq elem (buffer-substring-no-properties
                  (point) (progn (forward-sexp 1) (point))))
       (skip-chars-forward "= \t\n")
@@ -178,26 +238,37 @@ called for this message.")
        (setq val (match-string 1 val)))
       (push (cons (intern elem) val) contents)
       (skip-chars-forward " \t\n"))
-    (forward-char 1)
-    (skip-chars-forward " \t\n")
+    (goto-char (match-end 0))
+    ;; Don't skip the leading space.
+    ;;(skip-chars-forward " \t\n")
     (cons (intern name) (nreverse contents))))
 
-(defun mml-read-part ()
-  "Return the buffer up till the next part, multipart or closing part or multipart."
-  (let ((beg (point)))
+(defun mml-read-part (&optional mml)
+  "Return the buffer up till the next part, multipart or closing part or multipart.
+If MML is non-nil, return the buffer up till the correspondent mml tag."
+  (let ((beg (point)) (count 1))
     ;; If the tag ended at the end of the line, we go to the next line.
     (when (looking-at "[ \t]*\n")
       (forward-line 1))
-    (if (re-search-forward
-        "<#\\(/\\)?\\(multipart\\|part\\|external\\)." nil t)
-       (prog1
-           (buffer-substring-no-properties beg (match-beginning 0))
-         (if (or (not (match-beginning 1))
-                 (equal (match-string 2) "multipart"))
-             (goto-char (match-beginning 0))
-           (when (looking-at "[ \t]*\n")
-             (forward-line 1))))
-      (buffer-substring-no-properties beg (goto-char (point-max))))))
+    (if mml
+       (progn
+         (while (and (> count 0) (not (eobp)))
+           (if (re-search-forward "<#\\(/\\)?mml." nil t)
+               (setq count (+ count (if (match-beginning 1) -1 1)))
+             (goto-char (point-max))))
+         (buffer-substring-no-properties beg (if (> count 0) 
+                                                 (point)
+                                               (match-beginning 0))))
+      (if (re-search-forward
+          "<#\\(/\\)?\\(multipart\\|part\\|external\\|mml\\)." nil t)
+         (prog1
+             (buffer-substring-no-properties beg (match-beginning 0))
+           (if (or (not (match-beginning 1))
+                   (equal (match-string 2) "multipart"))
+               (goto-char (match-beginning 0))
+             (when (looking-at "[ \t]*\n")
+               (forward-line 1))))
+       (buffer-substring-no-properties beg (goto-char (point-max)))))))
 
 (defvar mml-boundary nil)
 (defvar mml-base-boundary "-=-=")
@@ -206,7 +277,7 @@ called for this message.")
 (defun mml-generate-mime ()
   "Generate a MIME message based on the current MML document."
   (let ((cont (mml-parse))
-       (mml-multipart-number 0))
+       (mml-multipart-number mml-multipart-number))
     (if (not cont)
        nil
       (with-temp-buffer
@@ -218,96 +289,124 @@ called for this message.")
        (buffer-string)))))
 
 (defun mml-generate-mime-1 (cont)
-  (cond
-   ((eq (car cont) 'part)
-    (let (coded encoding charset filename type)
-      (setq type (or (cdr (assq 'type cont)) "text/plain"))
-      (if (member (car (split-string type "/")) '("text" "message"))
-         (with-temp-buffer
+  (save-restriction
+    (narrow-to-region (point) (point))
+    (if mml-generate-mime-preprocess-function
+       (funcall mml-generate-mime-preprocess-function cont))
+    (cond
+     ((or (eq (car cont) 'part) (eq (car cont) 'mml))
+      (let ((raw (cdr (assq 'raw cont)))
+           coded encoding charset filename type)
+       (setq type (or (cdr (assq 'type cont)) "text/plain"))
+       (if (and (not raw)
+                (member (car (split-string type "/")) '("text" "message")))
+           (with-temp-buffer
+             (cond
+              ((cdr (assq 'buffer cont))
+               (insert-buffer-substring (cdr (assq 'buffer cont))))
+              ((and (setq filename (cdr (assq 'filename cont)))
+                    (not (equal (cdr (assq 'nofile cont)) "yes")))
+               (mm-insert-file-contents filename))
+              ((eq 'mml (car cont))
+               (insert (cdr (assq 'contents cont))))
+              (t
+               (save-restriction
+                 (narrow-to-region (point) (point))
+                 (insert (cdr (assq 'contents cont)))
+                 ;; Remove quotes from quoted tags.
+                 (goto-char (point-min))
+                 (while (re-search-forward
+                         "<#!+/?\\(part\\|multipart\\|external\\|mml\\)" nil t)
+                   (delete-region (+ (match-beginning 0) 2)
+                                  (+ (match-beginning 0) 3))))))
+             (cond 
+              ((eq (car cont) 'mml)
+               (let ((mml-boundary (funcall mml-boundary-function
+                                            (incf mml-multipart-number)))
+                     (mml-generate-default-type "text/plain"))
+                 (mml-to-mime))
+               (let ((mm-7bit-chars (concat mm-7bit-chars "\x1b")))
+                 ;; ignore 0x1b, it is part of iso-2022-jp
+                 (setq encoding (mm-body-7-or-8))))
+              ((string= (car (split-string type "/")) "message")
+               (let ((mm-7bit-chars (concat mm-7bit-chars "\x1b")))
+                 ;; ignore 0x1b, it is part of iso-2022-jp
+                 (setq encoding (mm-body-7-or-8))))
+              (t 
+               (setq charset (mm-encode-body))
+               (setq encoding (mm-body-encoding
+                               charset (cdr (assq 'encoding cont))))))
+             (setq coded (buffer-string)))
+         (mm-with-unibyte-buffer
            (cond
             ((cdr (assq 'buffer cont))
              (insert-buffer-substring (cdr (assq 'buffer cont))))
             ((and (setq filename (cdr (assq 'filename cont)))
                   (not (equal (cdr (assq 'nofile cont)) "yes")))
-             (mm-insert-file-contents filename))
+             (let ((coding-system-for-read mm-binary-coding-system))
+               (mm-insert-file-contents filename nil nil nil nil t)))
             (t
-             (save-restriction
-               (narrow-to-region (point) (point))
-               (insert (cdr (assq 'contents cont)))
-               ;; Remove quotes from quoted tags.
-               (goto-char (point-min))
-               (while (re-search-forward
-                       "<#!+/?\\(part\\|multipart\\|external\\)" nil t)
-                 (delete-region (+ (match-beginning 0) 2)
-                                (+ (match-beginning 0) 3))))))
-           (setq charset (mm-encode-body))
-           (setq encoding (mm-body-encoding charset))
-           (setq coded (buffer-string)))
-       (mm-with-unibyte-buffer
-         (cond
-          ((cdr (assq 'buffer cont))
-           (insert-buffer-substring (cdr (assq 'buffer cont))))
-          ((and (setq filename (cdr (assq 'filename cont)))
-                (not (equal (cdr (assq 'nofile cont)) "yes")))
-           (let ((coding-system-for-read mm-binary-coding-system))
-             (mm-insert-file-contents filename nil nil nil nil t)))
-          (t
-           (insert (cdr (assq 'contents cont)))))
-         (setq encoding (mm-encode-buffer type)
-               coded (buffer-string))))
-      (mml-insert-mime-headers cont type charset encoding)
-      (insert "\n")
-      (insert coded)))
-   ((eq (car cont) 'external)
-    (insert "Content-Type: message/external-body")
-    (let ((parameters (mml-parameter-string
-                      cont '(expiration size permission)))
-         (name (cdr (assq 'name cont))))
-      (when name
-       (setq name (mml-parse-file-name name))
-       (if (stringp name)
+             (insert (cdr (assq 'contents cont)))))
+           (setq encoding (mm-encode-buffer type)
+                 coded (buffer-string))))
+       (mml-insert-mime-headers cont type charset encoding)
+       (insert "\n")
+       (insert coded)))
+     ((eq (car cont) 'external)
+      (insert "Content-Type: message/external-body")
+      (let ((parameters (mml-parameter-string
+                        cont '(expiration size permission)))
+           (name (cdr (assq 'name cont))))
+       (when name
+         (setq name (mml-parse-file-name name))
+         (if (stringp name)
+             (mml-insert-parameter
+              (mail-header-encode-parameter "name" name)
+              "access-type=local-file")
            (mml-insert-parameter
-            (mail-header-encode-parameter "name" name)
-            "access-type=local-file")
-         (mml-insert-parameter
-          (mail-header-encode-parameter
-           "name" (file-name-nondirectory (nth 2 name)))
-          (mail-header-encode-parameter "site" (nth 1 name))
-          (mail-header-encode-parameter
-           "directory" (file-name-directory (nth 2 name))))
-         (mml-insert-parameter
-          (concat "access-type="
-                  (if (member (nth 0 name) '("ftp@" "anonymous@"))
-                      "anon-ftp"
-                    "ftp")))))      
-      (when parameters
-       (mml-insert-parameter-string
-        cont '(expiration size permission))))
-    (insert "\n\n")
-    (insert "Content-Type: " (cdr (assq 'type cont)) "\n")
-    (insert "Content-ID: " (message-make-message-id) "\n")
-    (insert "Content-Transfer-Encoding: "
-           (or (cdr (assq 'encoding cont)) "binary"))
-    (insert "\n\n")
-    (insert (or (cdr (assq 'contents cont))))
-    (insert "\n"))
-   ((eq (car cont) 'multipart)
-    (let* ((type (or (cdr (assq 'type cont)) "mixed"))
-           (handler (assoc type mml-generate-multipart-alist)))
-      (if handler
-          (funcall (cdr handler) cont)
-        ;; No specific handler.  Use default one.
-        (let ((mml-boundary (mml-compute-boundary cont)))
-          (insert (format "Content-Type: multipart/%s; boundary=\"%s\"\n"
-                          type mml-boundary))
-          (insert "\n")
-          (setq cont (cddr cont))
-          (while cont
-            (insert "\n--" mml-boundary "\n")
-            (mml-generate-mime-1 (pop cont)))
-          (insert "\n--" mml-boundary "--\n")))))
-   (t
-    (error "Invalid element: %S" cont))))
+            (mail-header-encode-parameter
+             "name" (file-name-nondirectory (nth 2 name)))
+            (mail-header-encode-parameter "site" (nth 1 name))
+            (mail-header-encode-parameter
+             "directory" (file-name-directory (nth 2 name))))
+           (mml-insert-parameter
+            (concat "access-type="
+                    (if (member (nth 0 name) '("ftp@" "anonymous@"))
+                        "anon-ftp"
+                      "ftp")))))      
+       (when parameters
+         (mml-insert-parameter-string
+          cont '(expiration size permission))))
+      (insert "\n\n")
+      (insert "Content-Type: " (cdr (assq 'type cont)) "\n")
+      (insert "Content-ID: " (message-make-message-id) "\n")
+      (insert "Content-Transfer-Encoding: "
+             (or (cdr (assq 'encoding cont)) "binary"))
+      (insert "\n\n")
+      (insert (or (cdr (assq 'contents cont))))
+      (insert "\n"))
+     ((eq (car cont) 'multipart)
+      (let* ((type (or (cdr (assq 'type cont)) "mixed"))
+            (mml-generate-default-type (if (equal type "digest")
+                                           "message/rfc822"
+                                         "text/plain"))
+            (handler (assoc type mml-generate-multipart-alist)))
+       (if handler
+           (funcall (cdr handler) cont)
+         ;; No specific handler.  Use default one.
+         (let ((mml-boundary (mml-compute-boundary cont)))
+           (insert (format "Content-Type: multipart/%s; boundary=\"%s\"\n"
+                           type mml-boundary))
+           ;; Skip `multipart' and `type' elements.
+           (setq cont (cddr cont))
+           (while cont
+             (insert "\n--" mml-boundary "\n")
+             (mml-generate-mime-1 (pop cont)))
+           (insert "\n--" mml-boundary "--\n")))))
+     (t
+      (error "Invalid element: %S" cont)))
+    (if mml-generate-mime-postprocess-function
+       (funcall mml-generate-mime-postprocess-function cont))))
 
 (defun mml-compute-boundary (cont)
   "Return a unique boundary that does not exist in CONT."
@@ -349,12 +448,6 @@ called for this message.")
            "")
          mml-base-boundary))
 
-(defun mml-make-string (num string)
-  (let ((out ""))
-    (while (not (zerop (decf num)))
-      (setq out (concat out string)))
-    out))
-
 (defun mml-insert-mime-headers (cont type charset encoding)
   (let (parameters disposition description)
     (setq parameters
@@ -362,7 +455,7 @@ called for this message.")
           cont '(name access-type expiration size permission)))
     (when (or charset
              parameters
-             (not (equal type "text/plain")))
+             (not (equal type mml-generate-default-type)))
       (when (consp charset)
        (error
         "Can't encode a part with several charsets."))
@@ -415,13 +508,13 @@ called for this message.")
         (mail-header-encode-parameter
          (symbol-name type) value))))))
 
-(defvar ange-ftp-path-format)
+(defvar ange-ftp-name-format)
 (defvar efs-path-regexp)
 (defun mml-parse-file-name (path)
   (if (if (boundp 'efs-path-regexp)
          (string-match efs-path-regexp path)
-       (if (boundp 'ange-ftp-path-format)
-           (string-match (car ange-ftp-path-format))))
+       (if (boundp 'ange-ftp-name-format)
+           (string-match (car ange-ftp-name-format) path)))
       (list (match-string 1 path) (match-string 2 path)
            (substring path (1+ (match-end 2))))
     path))
@@ -451,27 +544,43 @@ called for this message.")
     (if (stringp (car handles))
        (mml-insert-mime handles)
       (mml-insert-mime handles t))
-    (mm-destroy-parts handles)))
+    (mm-destroy-parts handles))
+  (save-restriction
+    (message-narrow-to-head)
+    ;; Remove them, they are confusing.
+    (message-remove-header "Content-Type")
+    (message-remove-header "MIME-Version")
+    (message-remove-header "Content-Transfer-Encoding")))
 
 (defun mml-to-mime ()
   "Translate the current buffer from MML to MIME."
   (message-encode-message-body)
   (save-restriction
     (message-narrow-to-headers-or-head)
-    (mail-encode-encoded-word-buffer)))
+    (let ((mail-parse-charset message-default-charset))
+      (mail-encode-encoded-word-buffer))))
 
 (defun mml-insert-mime (handle &optional no-markup)
-  (let (textp buffer)
+  (let (textp buffer mmlp)
     ;; Determine type and stuff.
     (unless (stringp (car handle))
-      (unless (setq textp (equal (mm-handle-media-supertype handle)
-                                "text"))
+      (unless (setq textp (equal (mm-handle-media-supertype handle) "text"))
        (save-excursion
-         (set-buffer (setq buffer (generate-new-buffer " *mml*")))
-         (mm-insert-part handle))))
-    (unless no-markup
-      (mml-insert-mml-markup handle buffer textp))
+         (set-buffer (setq buffer (mml-generate-new-buffer " *mml*")))
+         (mm-insert-part handle)
+         (if (setq mmlp (equal (mm-handle-media-type handle) 
+                               "message/rfc822"))
+             (mime-to-mml)))))
+    (if mmlp
+       (mml-insert-mml-markup handle nil t t)
+      (unless (and no-markup
+                  (equal (mm-handle-media-type handle) "text/plain"))
+       (mml-insert-mml-markup handle buffer textp)))
     (cond
+     (mmlp 
+      (insert-buffer buffer)
+      (goto-char (point-max))
+      (insert "<#/mml>\n"))
      ((stringp (car handle))
       (mapcar 'mml-insert-mime (cdr handle))
       (insert "<#/multipart>\n"))
@@ -484,12 +593,14 @@ called for this message.")
      (t
       (insert "<#/part>\n")))))
 
-(defun mml-insert-mml-markup (handle &optional buffer nofile)
+(defun mml-insert-mml-markup (handle &optional buffer nofile mmlp)
   "Take a MIME handle and insert an MML tag."
   (if (stringp (car handle))
       (insert "<#multipart type=" (mm-handle-media-subtype handle)
              ">\n")
-    (insert "<#part type=" (mm-handle-media-type handle))
+    (if mmlp
+       (insert "<#mml type=" (mm-handle-media-type handle))
+      (insert "<#part type=" (mm-handle-media-type handle)))
     (dolist (elem (append (cdr (mm-handle-type handle))
                          (cdr (mm-handle-disposition handle))))
       (insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\""))
@@ -529,7 +640,7 @@ called for this message.")
     (define-key map "p" 'mml-insert-part)
     (define-key map "v" 'mml-validate)
     (define-key map "P" 'mml-preview)
-    (define-key map "n" 'mml-narrow-to-part)
+    ;;(define-key map "n" 'mml-narrow-to-part)
     (define-key main "\M-m" map)
     main))
 
@@ -543,7 +654,7 @@ called for this message.")
    ("Insert"
     ["Multipart" mml-insert-multipart t]
     ["Part" mml-insert-part t])
-   ["Narrow" mml-narrow-to-part t]
+   ;;["Narrow" mml-narrow-to-part t]
    ["Quote" mml-quote-region t]
    ["Validate" mml-validate t]
    ["Preview" mml-preview t]))
@@ -556,17 +667,12 @@ called for this message.")
 
 \\{mml-mode-map}"
   (interactive "P")
-  (if (not (set (make-local-variable 'mml-mode)
-               (if (null arg) (not mml-mode)
-                 (> (prefix-numeric-value arg) 0))))
-      nil
-    (set (make-local-variable 'mml-mode) t)
-    (unless (assq 'mml-mode minor-mode-alist)
-      (push `(mml-mode " MML") minor-mode-alist))
-    (unless (assq 'mml-mode minor-mode-map-alist)
-      (push (cons 'mml-mode mml-mode-map)
-           minor-mode-map-alist)))
-  (run-hooks 'mml-mode-hook))
+  (when (set (make-local-variable 'mml-mode)
+            (if (null arg) (not mml-mode)
+              (> (prefix-numeric-value arg) 0)))
+    (gnus-add-minor-mode 'mml-mode " MML" mml-mode-map)
+    (easy-menu-add mml-menu mml-mode-map)
+    (run-hooks 'mml-mode-hook)))
 
 ;;;
 ;;; Helper functions for reading MIME stuff from the minibuffer and
@@ -586,6 +692,7 @@ called for this message.")
     file))
 
 (defun mml-minibuffer-read-type (name &optional default)
+  (mailcap-parse-mimetypes)
   (let* ((default (or default
                      (mm-default-file-encoding name)
                      ;; Perhaps here we should check what the file
@@ -594,27 +701,7 @@ called for this message.")
                      "application/octet-stream"))
         (string (completing-read
                  (format "Content type (default %s): " default)
-                 (mapcar
-                  'list
-                  (delete-duplicates
-                   (nconc
-                    (mapcar (lambda (m) (cdr m))
-                            mailcap-mime-extensions)
-                    (apply
-                     'nconc
-                     (mapcar
-                      (lambda (l)
-                        (delq nil
-                              (mapcar
-                               (lambda (m)
-                                 (let ((type (cdr (assq 'type (cdr m)))))
-                                   (if (equal (cadr (split-string type "/"))
-                                              "*")
-                                       nil
-                                     type)))
-                               (cdr l))))
-                      mailcap-mime-data)))
-                   :test 'equal)))))
+                 (mapcar 'list (mailcap-mime-types)))))
     (if (not (equal string ""))
        string
       default)))
@@ -636,7 +723,7 @@ called for this message.")
       (goto-char (point-min))
       ;; Quote parts.
       (while (re-search-forward
-             "<#/?!*\\(multipart\\|part\\|external\\)" nil t)
+             "<#!*/?\\(multipart\\|part\\|external\\|mml\\)" nil t)
        ;; Insert ! after the #.
        (goto-char (+ (match-beginning 0) 2))
        (insert "!")))))
@@ -651,10 +738,17 @@ called for this message.")
          (value (pop plist)))
       (when value
        ;; Quote VALUE if it contains suspicious characters.
-       (when (string-match "[\"\\~/* \t\n]" value)
+       (when (string-match "[\"'\\~/*;() \t\n]" value)
          (setq value (prin1-to-string value)))
        (insert (format " %s=%s" key value)))))
-  (insert ">\n<#/" name ">\n"))
+  (insert ">\n"))
+
+(defun mml-insert-empty-tag (name &rest plist)
+  "Insert an empty MML tag described by NAME and PLIST."
+  (when (symbolp name)
+    (setq name (symbol-name name)))
+  (apply #'mml-insert-tag name plist)
+  (insert "<#/" name ">\n"))
 
 ;;; Attachment functions.
 
@@ -671,8 +765,8 @@ description of the attachment."
          (type (mml-minibuffer-read-type file))
          (description (mml-minibuffer-read-description)))
      (list file type description)))
-  (mml-insert-tag 'part 'type type 'filename file 'disposition "attachment"
-                 'description description))
+  (mml-insert-empty-tag 'part 'type type 'filename file
+                       'disposition "attachment" 'description description))
 
 (defun mml-attach-buffer (buffer &optional type description)
   "Attach a buffer to the outgoing MIME message.
@@ -682,8 +776,8 @@ See `mml-attach-file' for details of operation."
          (type (mml-minibuffer-read-type buffer "text/plain"))
          (description (mml-minibuffer-read-description)))
      (list buffer type description)))
-  (mml-insert-tag 'part 'type type 'buffer buffer 'disposition "attachment"
-                 'description description))
+  (mml-insert-empty-tag 'part 'type type 'buffer buffer
+                       'disposition "attachment" 'description description))
 
 (defun mml-attach-external (file &optional type description)
   "Attach an external file into the buffer.
@@ -694,40 +788,58 @@ TYPE is the MIME type to use."
          (type (mml-minibuffer-read-type file))
          (description (mml-minibuffer-read-description)))
      (list file type description)))
-  (mml-insert-tag 'external 'type type 'name file 'disposition "attachment"
-                 'description description))
+  (mml-insert-empty-tag 'external 'type type 'name file
+                       'disposition "attachment" 'description description))
 
 (defun mml-insert-multipart (&optional type)
   (interactive (list (completing-read "Multipart type (default mixed): "
-                    '(("mixed") ("alternative") ("digest") ("parallel")
-                      ("signed") ("encrypted"))
-                    nil nil "mixed")))
+                                     '(("mixed") ("alternative") ("digest") ("parallel")
+                                       ("signed") ("encrypted"))
+                                     nil nil "mixed")))
   (or type
       (setq type "mixed"))
-  (mml-insert-tag "multipart" 'type type)
+  (mml-insert-empty-tag "multipart" 'type type)
+  (forward-line -1))
+
+(defun mml-insert-part (&optional type)
+  (interactive
+   (list (mml-minibuffer-read-type "")))
+  (mml-insert-tag 'part 'type type 'disposition "inline")
   (forward-line -1))
 
 (defun mml-preview (&optional raw)
- "Display current buffer with Gnus, in a new buffer.
+  "Display current buffer with Gnus, in a new buffer.
 If RAW, don't highlight the article."
- (interactive "P")
- (let ((buf (current-buffer)))
-   (switch-to-buffer (get-buffer-create 
-                     (concat (if raw "*Raw MIME preview of "
-                               "*MIME preview of ") (buffer-name))))
-   (erase-buffer)
-   (insert-buffer buf)
-   (if (re-search-forward
-       (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
-       (replace-match "\n"))
-   (mml-to-mime)
-   (unless raw
-     (run-hooks 'gnus-article-decode-hook)
-     (let ((gnus-newsgroup-name "dummy"))
-      (gnus-article-prepare-display)))
-   (fundamental-mode)
-   (setq buffer-read-only t)
-   (goto-char (point-min))))
+  (interactive "P")
+  (let ((buf (current-buffer))
+       (message-posting-charset (or (gnus-setup-posting-charset 
+                                     (save-restriction
+                                       (message-narrow-to-headers-or-head)
+                                       (message-fetch-field "Newsgroups")))
+                                    message-posting-charset)))
+    (switch-to-buffer (get-buffer-create 
+                      (concat (if raw "*Raw MIME preview of "
+                                "*MIME preview of ") (buffer-name))))
+    (erase-buffer)
+    (insert-buffer buf)
+    (if (re-search-forward
+        (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
+       (replace-match "\n"))
+    (mml-to-mime)
+    (if raw
+       (when (fboundp 'set-buffer-multibyte)
+         (let ((s (buffer-string)))
+           ;; Insert the content into unibyte buffer.
+           (erase-buffer)
+           (mm-disable-multibyte)
+           (insert s)))
+      (let ((gnus-newsgroup-charset (car message-posting-charset)))
+       (run-hooks 'gnus-article-decode-hook)
+       (let ((gnus-newsgroup-name "dummy"))
+         (gnus-article-prepare-display))))
+    (fundamental-mode)
+    (setq buffer-read-only t)
+    (goto-char (point-min))))
 
 (defun mml-validate ()
   "Validate the current MML document."
index ed62850..b445395 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnagent.el --- offline backend for Gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 
 (nnoo-define-basics nnagent)
 
+(defun nnagent-server (server)
+  (and server (format "%s+%s" (car gnus-command-method) server)))
+
 (deffoo nnagent-open-server (server &optional defs)
   (setq defs
        `((nnagent-directory ,(gnus-agent-directory))
          (nnagent-active-file ,(gnus-agent-lib-file "active"))
          (nnagent-newsgroups-file ,(gnus-agent-lib-file "newsgroups"))
          (nnagent-get-new-mail nil)))
-  (nnoo-change-server 'nnagent server defs)
+  (nnoo-change-server 'nnagent 
+                     (nnagent-server server)
+                     defs)
   (let ((dir (gnus-agent-directory))
        err)
     (cond
     (append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags")))
   nil)
 
+(deffoo nnagent-request-group (group &optional server dont-check)
+  (nnoo-parent-function 'nnagent 'nnml-request-group
+                   (list group (nnagent-server server) dont-check)))
+
+(deffoo nnagent-close-group (group &optional server)
+  (nnoo-parent-function 'nnagent 'nnml-close-group
+                   (list group (nnagent-server server))))
+
+(deffoo nnagent-request-accept-article (group &optional server last)
+  (nnoo-parent-function 'nnagent 'nnml-request-accept-article
+                   (list group (nnagent-server server) last)))
+
+(deffoo nnagent-request-article (id &optional group server buffer)
+  (nnoo-parent-function 'nnagent 'nnml-request-article
+                   (list id group (nnagent-server server) buffer)))
+
+(deffoo nnagent-request-create-group (group &optional server args)
+  (nnoo-parent-function 'nnagent 'nnml-request-create-group
+                   (list group (nnagent-server server) args)))
+
+(deffoo nnagent-request-delete-group (group &optional force server)
+  (nnoo-parent-function 'nnagent 'nnml-request-delete-group
+                   (list group force (nnagent-server server))))
+
+(deffoo nnagent-request-expire-articles (articles group &optional server force)
+  (nnoo-parent-function 'nnagent 'nnml-request-expire-articles
+                   (list articles group (nnagent-server server) force)))
+
+(deffoo nnagent-request-list (&optional server)
+  (nnoo-parent-function 'nnagent 'nnml-request-list 
+                   (list (nnagent-server server))))
+
+(deffoo nnagent-request-list-newsgroups (&optional server)
+  (nnoo-parent-function 'nnagent 'nnml-request-list-newsgroups 
+                   (list (nnagent-server server))))
+
+(deffoo nnagent-request-move-article 
+    (article group server accept-form &optional last)
+  (nnoo-parent-function 'nnagent 'nnml-request-move-article 
+                   (list article group (nnagent-server server) 
+                         accept-form last)))
+
+(deffoo nnagent-request-rename-group (group new-name &optional server)
+  (nnoo-parent-function 'nnagent 'nnml-request-rename-group 
+                   (list group new-name (nnagent-server server))))
+
+(deffoo nnagent-request-scan (&optional group server)
+  (nnoo-parent-function 'nnagent 'nnml-request-scan 
+                   (list group (nnagent-server server))))
+
+(deffoo nnagent-retrieve-headers (sequence &optional group server fetch-old)
+  (nnoo-parent-function 'nnagent 'nnml-retrieve-headers 
+                   (list sequence group (nnagent-server server) fetch-old)))
+
+(deffoo nnagent-set-status (article name value &optional group server)
+  (nnoo-parent-function 'nnagent 'nnml-set-status 
+                   (list article name value group (nnagent-server server))))
+
+(deffoo nnagent-server-opened (&optional server)
+  (nnoo-parent-function 'nnagent 'nnml-server-opened
+                       (list (nnagent-server server))))
+
+(deffoo nnagent-status-message (&optional server)
+  (nnoo-parent-function 'nnagent 'nnml-status-message
+                       (list (nnagent-server server))))
+
 ;; Use nnml functions for just about everything.
 (nnoo-import nnagent
   (nnml))
index 3d5c5b9..787123b 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -30,6 +32,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (condition-case nil
     (require 'rmail)
   (nnheader-report 'nnbabyl "nnbabyl: LIST NEWSGROUPS is not implemented."))
 
 (deffoo nnbabyl-request-expire-articles
-  (articles newsgroup &optional server force)
+    (articles newsgroup &optional server force)
   (nnbabyl-possibly-change-newsgroup newsgroup server)
   (let* ((is-old t)
         rest)
       (nconc rest articles))))
 
 (deffoo nnbabyl-request-move-article
-  (article group server accept-form &optional last)
+    (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnbabyl move*"))
        result)
     (and
       (widen)
       (narrow-to-region
        (save-excursion
-       (unless (re-search-backward (concat "^" nnbabyl-mail-delimiter) nil t)
-         (goto-char (point-min))
-         (end-of-line))
+        (unless (re-search-backward (concat "^" nnbabyl-mail-delimiter) nil t)
+          (goto-char (point-min))
+          (end-of-line))
         (if leave-delim (progn (forward-line 1) (point))
           (match-beginning 0)))
        (progn
   (nnbabyl-create-mbox)
 
   (unless (and nnbabyl-mbox-buffer
-          (buffer-name nnbabyl-mbox-buffer)
-          (save-excursion
-            (set-buffer nnbabyl-mbox-buffer)
-            (= (buffer-size) (nnheader-file-size nnbabyl-mbox-file))))
+              (buffer-name nnbabyl-mbox-buffer)
+              (save-excursion
+                (set-buffer nnbabyl-mbox-buffer)
+                (= (buffer-size) (nnheader-file-size nnbabyl-mbox-file))))
     ;; This buffer has changed since we read it last.  Possibly.
     (save-excursion
       (let ((delim (concat "^" nnbabyl-mail-delimiter))
index 8b71f5d..30eb2e2 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nndb.el --- nndb access for Gnus
-;; Copyright (C) 1997,98 Free Software Foundation, Inc.
+
+;; Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;         Kai Grossjohann <grossjohann@ls6.informatik.uni-dortmund.de>
@@ -77,7 +78,7 @@
   "*The program used to put a message in an NNDB group.")
 
 (defvoo nndb-server-side-expiry nil
-  "If t, expiry calculation will occur on the server side")
+  "If t, expiry calculation will occur on the server side.")
 
 (defvoo nndb-set-expire-date-on-mark nil
   "If t, the expiry date for a given article will be set to the time
@@ -146,7 +147,7 @@ article was posted to nndb")
   (nntp-send-command nil "X-TOUCH" article))
 
 (deffoo nndb-request-update-mark
-  (group article mark)
+    (group article mark)
   "Sets the expiry date for ARTICLE in GROUP to now, if the mark is 'E'"
   (if (and nndb-set-expire-date-on-mark (string-equal mark "E"))
       (nndb-touch-article group article))
@@ -293,8 +294,7 @@ Optional LAST is ignored."
     (list art)))
 
 (deffoo nndb-request-replace-article (article group buffer)
-  "ARTICLE is the number of the article in GROUP to be replaced
-with the contents of the BUFFER."
+  "ARTICLE is the number of the article in GROUP to be replaced with the contents of the BUFFER."
   (set-buffer buffer)
   (when (nntp-send-command "^[23].*\r?\n" "X-REPLACE" (int-to-string article))
     (nnheader-insert "")
index a46ad74..f1a6635 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 180d03c..3833395 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nndoc.el --- single file access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -27,6 +28,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'message)
 (require 'nnmail)
@@ -69,8 +71,8 @@ from the document.")
      (body-begin-function . nndoc-babyl-body-begin)
      (head-begin-function . nndoc-babyl-head-begin))
     (forward
-     (article-begin . "^-+ Start of forwarded message -+\n+")
-     (body-end . "^-+ End of forwarded message -+$")
+     (article-begin . "^-+ \\(Start of \\)?forwarded message.*\n+")
+     (body-end . "^-+ End \\(of \\)?forwarded message.*$")
      (prepare-body-function . nndoc-unquote-dashes))
     (rfc934
      (article-begin . "^--.*\n+")
@@ -85,6 +87,7 @@ from the document.")
      (article-transform-function . nndoc-transform-clari-briefs))
     (mime-digest
      (article-begin . "")
+     (head-begin . "^ ?\n")
      (head-end . "^ ?$")
      (body-end . "")
      (file-end . "")
@@ -122,6 +125,9 @@ from the document.")
     (rfc822-forward
      (article-begin . "^\n")
      (body-end-function . nndoc-rfc822-forward-body-end-function))
+    (outlook
+     (article-begin-function . nndoc-outlook-article-begin)
+     (body-end .  "\0"))
     (guess
      (guess . t)
      (subtype nil))
@@ -430,7 +436,8 @@ from the document.")
     t))
 
 (defun nndoc-forward-type-p ()
-  (when (and (re-search-forward "^-+ Start of forwarded message -+\n+" nil t)
+  (when (and (re-search-forward "^-+ \\(Start of \\)?forwarded message.*\n+" 
+                               nil t)
             (not (re-search-forward "^Subject:.*digest" nil t))
             (not (re-search-backward "^From:" nil t 2))
             (not (re-search-forward "^From:" nil t 2)))
@@ -524,10 +531,11 @@ from the document.")
            nil t)
           (match-beginning 1))
       (setq boundary-id (match-string 1)
-           b-delimiter (concat "\n--" boundary-id "[\n \t]+"))
+           b-delimiter (concat "\n--" boundary-id "[ \t]*$"))
       (setq entry (assq 'mime-digest nndoc-type-alist))
       (setcdr entry
              (list
+              (cons 'head-begin "^ ?\n")
               (cons 'head-end "^ ?$")
               (cons 'body-begin "^ ?\n")
               (cons 'article-begin b-delimiter)
@@ -556,10 +564,7 @@ from the document.")
 (defun nndoc-transform-lanl-gov-announce (article)
   (goto-char (point-max))
   (when (re-search-backward "^\\\\\\\\ +(\\([^ ]*\\) , *\\([^ ]*\\))" nil t)
-    (replace-match "\n\nGet it at \\1 (\\2)" t nil))
-  ;;  (when (re-search-backward "^\\\\\\\\$" nil t)
-  ;;    (replace-match "" t t))
-  )
+    (replace-match "\n\nGet it at \\1 (\\2)" t nil)))
 
 (defun nndoc-generate-lanl-gov-head (article)
   (let ((entry (cdr (assq article nndoc-dissection-alist)))
@@ -577,8 +582,7 @@ from the document.")
          (when (re-search-forward "^Title: \\([^\f]*\\)\nAuthors?: \\(.*\\)"
                                   nil t)
            (setq subject (concat (match-string 1) subject))
-           (setq from (concat (match-string 2) " <" e-mail ">"))))
-       ))
+           (setq from (concat (match-string 2) " <" e-mail ">"))))))
     (while (and from (string-match "(\[^)\]*)" from))
       (setq from (replace-match "" t t from)))
     (insert "From: "  (or from "unknown")
@@ -588,6 +592,14 @@ from the document.")
   (when (looking-at "From - ")
     t))
 
+(defun nndoc-outlook-article-begin ()
+  (prog1 (re-search-forward "From:\\|Received:" nil t)
+    (goto-char (match-beginning 0))))
+
+(defun nndoc-outlook-type-p ()
+  ;; FIXME: Is JMF the magic of outlook mailbox? -- ShengHuo.
+  (looking-at "JMF"))
+
 (deffoo nndoc-request-accept-article (group &optional server last)
   nil)
 
@@ -689,7 +701,8 @@ PARENT is the message-ID of the parent summary line, or nil for none."
        subject content-type type subtype boundary-regexp)
     ;; Gracefully handle a missing body.
     (goto-char head-begin)
-    (if (search-forward "\n\n" body-end t)
+    (if (or (and (eq (char-after) ?\n) (or (forward-char 1) t))
+           (search-forward "\n\n" body-end t))
        (setq head-end (1- (point))
              body-begin (point))
       (setq head-end body-end
@@ -771,7 +784,7 @@ PARENT is the message-ID of the parent summary line, or nil for none."
       (let ((part-counter 0)
            part-begin part-end eof-flag)
        (while (string-match "\
-^\\(Lines\\|Content-\\(Type\\|Transfer-Encoding\\)\\):.*\n\\([ \t].*\n\\)*"
+^\\(Lines\\|Content-\\(Type\\|Transfer-Encoding\\|Disposition\\)\\):.*\n\\([ \t].*\n\\)*"
                             article-insert)
          (setq article-insert (replace-match "" t t article-insert)))
        (let ((case-fold-search nil))
index 0e765fc..71531ee 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nndraft.el --- draft article access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'gnus-start)
@@ -33,7 +35,7 @@
 (require 'nnoo)
 (eval-when-compile
   ;; This is just to shut up the byte-compiler.
-  (fset 'nndraft-request-group 'ignore))
+  (defalias 'nndraft-request-group 'ignore))
 
 (nnoo-declare nndraft
   nnmh)
           (newest (if (file-newer-than-file-p file auto) file auto))
           (nntp-server-buffer (or buffer nntp-server-buffer)))
       (when (and (file-exists-p newest)
-                (nnmail-find-file newest))
+                (let ((nnmail-file-coding-system nnheader-text-coding-system))
+                  (nnmail-find-file newest)))
        (save-excursion
          (set-buffer nntp-server-buffer)
          (goto-char (point-min))
   (when (nndraft-request-article article group server (current-buffer))
     (message-remove-header "xref")
     (message-remove-header "lines")
+    (message-remove-header "date")
     t))
 
 (deffoo nndraft-request-update-info (group info &optional server)
    info
    (gnus-update-read-articles (gnus-group-prefixed-name group '(nndraft ""))
                              (nndraft-articles) t))
-  (let (marks)
-    (when (setq marks (nth 3 info))
+  (let ((marks (nth 3 info)))
+    (when marks
+      ;; Nix out all marks except the `unsend'-able article marks.
       (setcar (nthcdr 3 info)
              (if (assq 'unsend marks)
                  (list (assq 'unsend marks))
   (nndraft-possibly-change-group group)
   (let ((gnus-verbose-backends nil)
        (buf (current-buffer))
-        article file)
+       article file)
     (with-temp-buffer
       (insert-buffer-substring buf)
       (setq article (nndraft-request-accept-article
     (nnoo-parent-function 'nndraft 'nnmh-request-accept-article
                          (list group server last noinsert))))
 
+(deffoo nndraft-request-replace-article (article group buffer)
+  (nndraft-possibly-change-group group)
+  (let ((nnmail-file-coding-system nnheader-text-coding-system))
+    (nnoo-parent-function 'nndraft 'nnmh-request-replace-article
+                         (list article group buffer))))
+
 (deffoo nndraft-request-create-group (group &optional server args)
   (nndraft-possibly-change-group group)
   (if (file-exists-p nndraft-current-directory)
    nnmh-close-group
    nnmh-request-list
    nnmh-request-newsgroups
-   nnmh-request-move-article
-   nnmh-request-replace-article))
+   nnmh-request-move-article))
 
 (provide 'nndraft)
 
index 3caee7b..a9c3bb6 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nneething.el --- arbitrary file access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -27,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'nnoo)
@@ -106,7 +109,7 @@ included.")
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nneething: Receiving headers... %d%%"
-                       (/ (* count 100) number))))
+                                (/ (* count 100) number))))
 
        (when large
          (nnheader-message 5 "nneething: Receiving headers...done"))
@@ -230,13 +233,13 @@ included.")
       (let ((map nneething-map)
            prev)
        (while map
-         (if (and (member (cadar map) files)
+         (if (and (member (cadr (car map)) files)
                   ;; We also remove files that have changed mod times.
                   (equal (nth 5 (file-attributes
-                                 (nneething-file-name (cadar map))))
-                         (caddar map)))
+                                 (nneething-file-name (cadr (car map)))))
+                         (cadr (cdar map))))
              (progn
-               (push (cadar map) map-files)
+               (push (cadr (car map)) map-files)
                (setq prev map))
            (setq touched t)
            (if prev
@@ -294,8 +297,7 @@ included.")
           (concat "Lines: " (int-to-string
                              (count-lines (point-min) (point-max)))
                   "\n"))
-       "")
-     )))
+       ""))))
 
 (defun nneething-from-line (uid &optional file)
   "Return a From header based of UID."
@@ -362,9 +364,9 @@ included.")
         fname)
     (if (numberp article)
        (if (setq fname (cadr (assq article nneething-map)))
-           (concat dir fname)
-         (make-temp-name (concat dir "nneething")))
-      (concat dir article))))
+           (expand-file-name fname dir)
+         (make-temp-name (expand-file-name "nneething" dir)))
+      (expand-file-name article dir))))
 
 (provide 'nneething)
 
index 3146e54..5917d11 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Scott Byer <byer@mv.us.adobe.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
   "The name of the nnfolder directory.")
 
 (defvoo nnfolder-active-file
-  (nnheader-concat nnfolder-directory "active")
+    (nnheader-concat nnfolder-directory "active")
   "The name of the active file.")
 
 ;; I renamed this variable to something more in keeping with the general GNU
 ;; style. -SLB
 
 (defvoo nnfolder-ignore-active-file nil
-  "If non-nil, causes nnfolder to do some extra work in order to determine
-the true active ranges of an mbox file.  Note that the active file is still
-saved, but it's values are not used.  This costs some extra time when
-scanning an mbox when opening it.")
+  "If non-nil, the active file is ignored.
+This causes nnfolder to do some extra work in order to determine the
+true active ranges of an mbox file.  Note that the active file is
+still saved, but its values are not used.  This costs some extra time
+when scanning an mbox when opening it.")
 
 (defvoo nnfolder-distrust-mbox nil
-  "If non-nil, causes nnfolder to not trust the user with respect to
-inserting unaccounted for mail in the middle of an mbox file.  This can greatly
-slow down scans, which now must scan the entire file for unmarked messages.
-When nil, scans occur forward from the last marked message, a huge
-time saver for large mailboxes.")
+  "If non-nil, the folder will be distrusted.
+This means that nnfolder will not trust the user with respect to
+inserting unaccounted for mail in the middle of an mbox file.  This
+can greatly slow down scans, which now must scan the entire file for
+unmarked messages.  When nil, scans occur forward from the last marked
+message, a huge time saver for large mailboxes.")
 
 (defvoo nnfolder-newsgroups-file
-  (concat (file-name-as-directory nnfolder-directory) "newsgroups")
+    (concat (file-name-as-directory nnfolder-directory) "newsgroups")
   "Mail newsgroups description file.")
 
 (defvoo nnfolder-get-new-mail t
@@ -90,12 +93,10 @@ time saver for large mailboxes.")
 (defvoo nnfolder-buffer-alist nil)
 (defvoo nnfolder-scantime-alist nil)
 (defvoo nnfolder-active-timestamp nil)
-(defvoo nnfolder-active-file-coding-system
-    (if (memq system-type '(windows-nt ms-dos ms-windows))
-       'raw-text-dos 'raw-text))
+(defvoo nnfolder-active-file-coding-system nnheader-text-coding-system)
 (defvoo nnfolder-active-file-coding-system-for-write 
     nnmail-active-file-coding-system)
-(defvoo nnfolder-file-coding-system nnfolder-active-file-coding-system)
+(defvoo nnfolder-file-coding-system nnheader-text-coding-system)
 (defvoo nnfolder-file-coding-system-for-write nnheader-file-coding-system
   "Coding system for save nnfolder file.
 If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
@@ -186,11 +187,13 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
          (if (numberp article)
              (cons nnfolder-current-group article)
            (goto-char (point-min))
-           (search-forward (concat "\n" nnfolder-article-marker))
            (cons nnfolder-current-group
-                 (string-to-int
-                  (buffer-substring
-                   (point) (progn (end-of-line) (point)))))))))))
+                 (if (search-forward (concat "\n" nnfolder-article-marker) 
+                                     nil t)
+                     (string-to-int
+                      (buffer-substring
+                       (point) (progn (end-of-line) (point))))
+                   -1))))))))
 
 (deffoo nnfolder-request-group (group &optional server dont-check)
   (nnfolder-possibly-change-group group server t)
@@ -318,7 +321,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
        numbers))))
 
 (deffoo nnfolder-request-expire-articles
-  (articles newsgroup &optional server force)
+    (articles newsgroup &optional server force)
   (nnfolder-possibly-change-group newsgroup server)
   (let* ((is-old t)
         ;; The articles we have deleted so far.
@@ -341,12 +344,12 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
                                   nil t))
          (forward-sexp)
          (when (setq is-old
-                   (nnmail-expired-article-p
-                    newsgroup
-                    (buffer-substring
-                     (point) (progn (end-of-line) (point)))
-                    force nnfolder-inhibit-expiry))
-               (nnheader-message 5 "Deleting article %d..."
+                     (nnmail-expired-article-p
+                      newsgroup
+                      (buffer-substring
+                       (point) (progn (end-of-line) (point)))
+                      force nnfolder-inhibit-expiry))
+           (nnheader-message 5 "Deleting article %d..."
                              (car maybe-expirable) newsgroup)
            (nnfolder-delete-mail)
            ;; Must remember which articles were actually deleted
@@ -581,33 +584,52 @@ deleted.  Point is left where the deleted region was."
   ;; Change group.
   (when (and group
             (not (equal group nnfolder-current-group)))
-    (nnmail-activate 'nnfolder)
-    (if dont-check
-       (setq nnfolder-current-group group
-             nnfolder-current-buffer nil)
-      ;; If we have to change groups, see if we don't already have the
-      ;; folder in memory.  If we do, verify the modtime and destroy
-      ;; the folder if needed so we can rescan it.
-      (setq nnfolder-current-buffer
-           (nth 1 (assoc group nnfolder-buffer-alist)))
-
-      ;; If the buffer is not live, make sure it isn't in the alist.  If it
-      ;; is live, verify that nobody else has touched the file since last
-      ;; time.
-      (when (and nnfolder-current-buffer
-                (not (gnus-buffer-live-p nnfolder-current-buffer)))
-       (setq nnfolder-current-buffer nil))
-
-      (setq nnfolder-current-group group)
-
-      (when (or (not nnfolder-current-buffer)
-               (not (verify-visited-file-modtime
-                     nnfolder-current-buffer)))
-       (save-excursion
-         (when (setq nnfolder-current-buffer (nnfolder-read-folder group))
-           (set-buffer nnfolder-current-buffer)
-           (push (list group nnfolder-current-buffer)
-                 nnfolder-buffer-alist)))))))
+    (let ((file-name-coding-system nnmail-pathname-coding-system)
+         (pathname-coding-system nnmail-pathname-coding-system))
+      (nnmail-activate 'nnfolder)
+      (when (and (not (assoc group nnfolder-group-alist))
+                (not (file-exists-p
+                      (nnfolder-group-pathname group))))
+       ;; The group doesn't exist, so we create a new entry for it.
+       (push (list group (cons 1 0)) nnfolder-group-alist)
+       (nnfolder-save-active nnfolder-group-alist nnfolder-active-file))
+
+      (if dont-check
+         (setq nnfolder-current-group group
+               nnfolder-current-buffer nil)
+       (let (inf file)
+         ;; If we have to change groups, see if we don't already have the
+         ;; folder in memory.  If we do, verify the modtime and destroy
+         ;; the folder if needed so we can rescan it.
+         (setq nnfolder-current-buffer
+               (nth 1 (assoc group nnfolder-buffer-alist)))
+
+         ;; If the buffer is not live, make sure it isn't in the alist.  If it
+         ;; is live, verify that nobody else has touched the file since last
+         ;; time.
+         (when (and nnfolder-current-buffer
+                    (not (gnus-buffer-live-p nnfolder-current-buffer)))
+           (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)
+                 nnfolder-current-buffer nil))
+
+         (setq nnfolder-current-group group)
+
+         (when (or (not nnfolder-current-buffer)
+                   (not (verify-visited-file-modtime
+                         nnfolder-current-buffer)))
+           (save-excursion
+             (setq file (nnfolder-group-pathname group))
+             ;; See whether we need to create the new file.
+             (unless (file-exists-p file)
+               (gnus-make-directory (file-name-directory file))
+               (let ((nnmail-file-coding-system 
+                      (or nnfolder-file-coding-system-for-write
+                          nnfolder-file-coding-system-for-write)))
+                 (nnmail-write-region 1 1 file t 'nomesg)))
+             (when (setq nnfolder-current-buffer (nnfolder-read-folder group))
+               (set-buffer nnfolder-current-buffer)
+               (push (list group nnfolder-current-buffer)
+                     nnfolder-buffer-alist)))))))))
 
 (defun nnfolder-save-mail (group-art-list)
   "Called narrowed to an article."
@@ -726,7 +748,7 @@ deleted.  Point is left where the deleted region was."
            buffer
          (push (list group buffer) nnfolder-buffer-alist)
          (set-buffer-modified-p t)
-         (save-buffer))
+         (nnfolder-save-buffer))
       ;; Parse the damn thing.
       (save-excursion
        (goto-char (point-min))
index 74c556c..65bd2cc 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nngateway.el --- posting news via mail gateways
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
index 24a31ae..603b1ed 100644 (file)
@@ -1,5 +1,8 @@
 ;;; nnheader.el --- header access macros for Semi-gnus and its backends
-;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
+
+;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
+;;        1997, 1998, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'static))
+
 (require 'mail-utils)
+
+;; Reduce the required value of `recursive-load-depth-limit' for Emacs 21.
+(require 'pces)
+(require 'poem)
+(require 'std11)
+
 (require 'mime)
 
 (defvar nnheader-max-head-length 4096
@@ -45,14 +56,24 @@ on your system, you could say something like:
 
 \(setq nnheader-file-name-translation-alist '((?: . ?_)))")
 
+(defvar nnheader-text-coding-system
+  (if (memq system-type '(windows-nt ms-dos ms-windows))
+      'raw-text-dos
+    'raw-text)
+  "Text-safe coding system (For removing ^M).
+This variable is a substitute for `mm-text-coding-system'.")
+
+(defvar nnheader-text-coding-system-for-write nil
+  "Text coding system for write.
+This variable is a substitute for `mm-text-coding-system-for-write'.")
+
 (eval-and-compile
- (autoload 'nnmail-message-id "nnmail")
- (autoload 'mail-position-on-field "sendmail")
- (autoload 'message-remove-header "message")
- (autoload 'cancel-function-timers "timers")
- (autoload 'gnus-point-at-eol "gnus-util")
- (autoload 'gnus-delete-line "gnus-util")
- (autoload 'gnus-buffer-live-p "gnus-util"))
+  (autoload 'nnmail-message-id "nnmail")
+  (autoload 'mail-position-on-field "sendmail")
+  (autoload 'message-remove-header "message")
+  (autoload 'gnus-point-at-eol "gnus-util")
+  (autoload 'gnus-delete-line "gnus-util")
+  (autoload 'gnus-buffer-live-p "gnus-util"))
 
 ;;; Header access macros.
 
@@ -174,7 +195,10 @@ on your system, you could say something like:
 ;; Parsing headers and NOV lines.
 
 (defsubst nnheader-header-value ()
-  (buffer-substring (match-end 0) (gnus-point-at-eol)))
+  (let ((pt (point)))
+    (prog1
+       (buffer-substring (match-end 0) (std11-field-end))
+      (goto-char pt))))
 
 (defun nnheader-parse-head (&optional naked)
   (let ((case-fold-search t)
@@ -216,7 +240,8 @@ on your system, you could say something like:
           ;; From.
           (progn
             (goto-char p)
-            (if (search-forward "\nfrom: " nil t)
+            (if (or (search-forward "\nfrom: " nil t)
+                    (search-forward "\nfrom:" nil t))
                 (nnheader-header-value) "(nobody)"))
           ;; Date.
           (progn
@@ -297,7 +322,9 @@ on your system, you could say something like:
   '(prog1
        (if (eq (char-after) ?\t)
           0
-        (let ((num (ignore-errors (read (current-buffer)))))
+        (let ((num (condition-case nil
+                       (read (current-buffer))
+                     (error nil))))
           (if (numberp num) num 0)))
      (unless (eobp)
        (search-forward "\t" eol 'move))))
@@ -331,36 +358,43 @@ on your system, you could say something like:
      (nnheader-nov-read-integer)       ; lines
      (if (eq (char-after) ?\n)
         nil
-       (nnheader-nov-field))           ; misc
+       (if (looking-at "Xref: ")
+          (goto-char (match-end 0)))
+       (nnheader-nov-field))           ; Xref
      (nnheader-nov-parse-extra))))     ; extra
 
 (defun nnheader-insert-nov (header)
   (princ (mail-header-number header) (current-buffer))
-  (insert
-   "\t"
-   (or (mime-fetch-field 'Subject header) "(none)") "\t"
-   (or (mime-fetch-field 'From header) "(nobody)") "\t"
-   (or (mail-header-date header) "") "\t"
-   (or (mail-header-id header)
-       (nnmail-message-id))
-   "\t"
-   (or (mail-header-references header) "") "\t")
-  (princ (or (mail-header-chars header) 0) (current-buffer))
-  (insert "\t")
-  (princ (or (mail-header-lines header) 0) (current-buffer))
-  (insert "\t")
-  (when (mail-header-xref header)
-    (insert "Xref: " (mail-header-xref header)))
-  (when (or (mail-header-xref header)
-           (mail-header-extra header))
-    (insert "\t"))
-  (when (mail-header-extra header)
-    (let ((extra (mail-header-extra header)))
-      (while extra
-       (insert (symbol-name (caar extra))
-               ": " (cdar extra) "\t")
-        (pop extra))))
-  (insert "\n"))
+  (let ((p (point)))
+    (insert
+     "\t"
+     (or (mime-entity-fetch-field header 'Subject) "(none)") "\t"
+     (or (mime-entity-fetch-field header 'From) "(nobody)") "\t"
+     (or (mail-header-date header) "") "\t"
+     (or (mail-header-id header)
+        (nnmail-message-id))
+     "\t"
+     (or (mail-header-references header) "") "\t")
+    (princ (or (mail-header-chars header) 0) (current-buffer))
+    (insert "\t")
+    (princ (or (mail-header-lines header) 0) (current-buffer))
+    (insert "\t")
+    (when (mail-header-xref header)
+      (insert "Xref: " (mail-header-xref header)))
+    (when (or (mail-header-xref header)
+             (mail-header-extra header))
+      (insert "\t"))
+    (when (mail-header-extra header)
+      (let ((extra (mail-header-extra header)))
+       (while extra
+         (insert (symbol-name (caar extra))
+                 ": " (cdar extra) "\t")
+         (pop extra))))
+    (insert "\n")
+    (backward-char 1)
+    (while (search-backward "\n" p t)
+      (delete-char 1))
+    (forward-line 1)))
 
 (defun nnheader-insert-header (header)
   (insert
@@ -450,6 +484,7 @@ the line could be found."
     (let* ((file nil)
           (number (length articles))
           (count 0)
+          (file-name-coding-system 'binary)
           (pathname-coding-system 'binary)
           (case-fold-search t)
           (cur (current-buffer))
@@ -745,7 +780,7 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
     (erase-buffer))
   (current-buffer))
 
-(defvar jka-compr-compression-info-list)
+(eval-when-compile (defvar jka-compr-compression-info-list))
 (defvar nnheader-numerical-files
   (if (boundp 'jka-compr-compression-info-list)
       (concat "\\([0-9]+\\)\\("
@@ -762,17 +797,20 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
   "Regexp that matches numerical full file paths.")
 
 (defsubst nnheader-file-to-number (file)
-  "Take a file name and return the article number."
+  "Take a FILE name and return the article number."
   (if (string= nnheader-numerical-short-files "^[0-9]+$")
       (string-to-int file)
     (string-match nnheader-numerical-short-files file)
     (string-to-int (match-string 0 file))))
 
+(defvar nnheader-directory-files-is-safe nil
+  "If non-nil, Gnus believes `directory-files' is safe.
+It has been reported numerous times that `directory-files' fails with
+an alarming frequency on NFS mounted file systems. If it is nil,
+`nnheader-directory-files-safe' is used.")
+
 (defun nnheader-directory-files-safe (&rest args)
-  ;; It has been reported numerous times that `directory-files'
-  ;; fails with an alarming frequency on NFS mounted file systems.
-  ;; This function executes that function twice and returns
-  ;; the longest result.
+  "Execute `directory-files' twice and returns the longer result."
   (let ((first (apply 'directory-files args))
        (second (apply 'directory-files args)))
     (if (> (length first) (length second))
@@ -780,16 +818,22 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
       second)))
 
 (defun nnheader-directory-articles (dir)
-  "Return a list of all article files in a directory."
+  "Return a list of all article files in directory DIR."
   (mapcar 'nnheader-file-to-number
-         (nnheader-directory-files-safe
-          dir nil nnheader-numerical-short-files t)))
+         (if nnheader-directory-files-is-safe 
+             (directory-files
+              dir nil nnheader-numerical-short-files t)
+           (nnheader-directory-files-safe
+            dir nil nnheader-numerical-short-files t))))
 
 (defun nnheader-article-to-file-alist (dir)
   "Return an alist of article/file pairs in DIR."
   (mapcar (lambda (file) (cons (nnheader-file-to-number file) file))
-         (nnheader-directory-files-safe
-          dir nil nnheader-numerical-short-files t)))
+         (if nnheader-directory-files-is-safe 
+             (directory-files
+              dir nil nnheader-numerical-short-files t)
+           (nnheader-directory-files-safe
+            dir nil nnheader-numerical-short-files t))))
 
 (defun nnheader-fold-continuation-lines ()
   "Fold continuation lines in the current buffer."
@@ -806,14 +850,31 @@ If FULL, translate everything."
       (if full
          ;; Do complete translation.
          (setq leaf (copy-sequence file)
-               path "")
+               path ""
+               i (if (and (< 1 (length leaf)) (eq ?: (aref leaf 1)))
+                     2 0))
        ;; We translate -- but only the file name.  We leave the directory
        ;; alone.
-       (if (string-match "/[^/]+\\'" file)
-           ;; This is needed on NT's and stuff.
-           (setq leaf (substring file (1+ (match-beginning 0)))
-                 path (substring file 0 (1+ (match-beginning 0))))
-         ;; Fall back on this.
+       (if (and (featurep 'xemacs)
+                (memq system-type '(win32 w32 mswindows windows-nt)))
+           ;; This is needed on NT and stuff, because
+           ;; file-name-nondirectory is not enough to split
+           ;; file names, containing ':', e.g.
+           ;; "d:\\Work\\News\\nntp+news.fido7.ru:fido7.ru.gnu.SCORE"
+           ;; 
+           ;; we are trying to correctly split such names:
+           ;; "d:file.name" -> "a:" "file.name"
+           ;; "aaa:bbb.ccc" -> "" "aaa:bbb.ccc"
+           ;; "d:aaa\\bbb:ccc"   -> "d:aaa\\" "bbb:ccc"
+           ;; etc.
+           ;; to translate then only the file name part.
+           (progn
+             (setq leaf file
+                   path "")
+             (if (string-match "\\(^\\w:\\|[/\\]\\)\\([^/\\]+\\)$" file)
+                 (setq leaf (substring file (match-beginning 2))
+                       path (substring file 0 (match-beginning 2)))))
+         ;; Emacs DTRT, says andrewi.
          (setq leaf (file-name-nondirectory file)
                path (file-name-directory file))))
       (setq len (length leaf))
@@ -837,7 +898,7 @@ The first string in ARGS can be a format string."
   "Get the most recent report from BACKEND."
   (condition-case ()
       (nnheader-message 5 "%s" (symbol-value (intern (format "%s-status-string"
-                                                 backend))))
+                                                            backend))))
     (error (nnheader-message 5 ""))))
 
 (defun nnheader-insert (format &rest args)
@@ -852,17 +913,20 @@ without formatting."
       (apply 'insert format args))
     t))
 
-(defun nnheader-replace-chars-in-string (string from to)
-  "Replace characters in STRING from FROM to TO."
-  (let ((string (substring string 0))  ;Copy string.
-       (len (length string))
-       (idx 0))
-    ;; Replace all occurrences of FROM with TO.
-    (while (< idx len)
-      (when (= (aref string idx) from)
-       (aset string idx to))
-      (setq idx (1+ idx)))
-    string))
+(static-if (fboundp 'subst-char-in-string)
+    (defsubst nnheader-replace-chars-in-string (string from to)
+      (subst-char-in-string from to string))
+  (defun nnheader-replace-chars-in-string (string from to)
+    "Replace characters in STRING from FROM to TO."
+    (let ((string (substring string 0))        ;Copy string.
+         (len (length string))
+         (idx 0))
+      ;; Replace all occurrences of FROM with TO.
+      (while (< idx len)
+       (when (= (aref string idx) from)
+         (aset string idx to))
+       (setq idx (1+ idx)))
+      string)))
 
 (defun nnheader-replace-duplicate-chars-in-string (string from to)
   "Replace characters in STRING from FROM to TO."
@@ -912,14 +976,14 @@ without formatting."
   (concat
    (let ((dir (file-name-as-directory (expand-file-name dir))))
      ;; If this directory exists, we use it directly.
-     (if (file-directory-p (concat dir group))
-        (concat dir group "/")
-       ;; If not, we translate dots into slashes.
-       (concat dir
-              (encode-coding-string
-               (nnheader-replace-chars-in-string group ?. ?/)
-               nnheader-pathname-coding-system)
-              "/")))
+     (file-name-as-directory
+      (if (file-directory-p (concat dir group))
+         (expand-file-name group dir)
+       ;; If not, we translate dots into slashes.
+       (expand-file-name (encode-coding-string
+                          (nnheader-replace-chars-in-string group ?. ?/)
+                          nnheader-pathname-coding-system)
+                         dir))))
    (cond ((null file) "")
         ((numberp file) (int-to-string file))
         (t file))))
@@ -930,7 +994,7 @@ without formatting."
       (and (listp form) (eq (car form) 'lambda))))
 
 (defun nnheader-concat (dir &rest files)
-  "Concat DIR as directory to FILE."
+  "Concat DIR as directory to FILES."
   (apply 'concat (file-name-as-directory dir) files))
 
 (defun nnheader-ms-strip-cr ()
@@ -965,8 +1029,9 @@ If FILE, find the \".../etc/PACKAGE\" file instead."
        (setq path (cdr path))))
     result))
 
-(defvar ange-ftp-path-format)
-(defvar efs-path-regexp)
+(eval-when-compile
+  (defvar ange-ftp-path-format)
+  (defvar efs-path-regexp))
 (defun nnheader-re-read-dir (path)
   "Re-read directory PATH if PATH is on a remote system."
   (if (and (fboundp 'efs-re-read-dir) (boundp 'efs-path-regexp))
@@ -1057,20 +1122,20 @@ find-file-hooks, etc.
      (set-buffer cur)))
 
 (defun nnheader-replace-string (from to)
-  "Do a fast replacement of FROM to TO from point to point-max."
+  "Do a fast replacement of FROM to TO from point to `point-max'."
   (nnheader-skeleton-replace from to))
 
 (defun nnheader-replace-regexp (from to)
-  "Do a fast regexp replacement of FROM to TO from point to point-max."
+  "Do a fast regexp replacement of FROM to TO from point to `point-max'."
   (nnheader-skeleton-replace from to t))
 
 (defun nnheader-strip-cr ()
   "Strip all \r's from the current buffer."
   (nnheader-skeleton-replace "\r"))
 
-(fset 'nnheader-run-at-time 'run-at-time)
-(fset 'nnheader-cancel-timer 'cancel-timer)
-(fset 'nnheader-cancel-function-timers 'cancel-function-timers)
+(defalias 'nnheader-run-at-time 'run-at-time)
+(defalias 'nnheader-cancel-timer 'cancel-timer)
+(defalias 'nnheader-cancel-function-timers 'cancel-function-timers)
 
 (defun nnheader-Y-or-n-p (prompt)
   "Ask user a \"Y/n\" question. Return t if answer is neither \"n\", \"N\" nor \"C-g\"."
@@ -1089,7 +1154,7 @@ find-file-hooks, etc.
       (message "%s(Y/n) Yes" prompt)
       t)))
 
-(when (string-match "XEmacs\\|Lucid" emacs-version)
+(when (featurep 'xemacs)
   (require 'nnheaderxm))
 
 (run-hooks 'nnheader-load-hook)
index c77c11d..7d38bbd 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnheaderxm.el --- making Gnus backends work under XEmacs
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;      Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Katsumi Yamaoka  <yamaoka@jpl.org>
        (message "%s(Y/n) Yes" prompt)
        t))))
 
-(fset 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
-(fset 'nnheader-cancel-timer 'delete-itimer)
-(fset 'nnheader-cancel-function-timers 'ignore)
-(fset 'nnheader-Y-or-n-p 'nnheader-xmas-Y-or-n-p)
+(defalias 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
+(defalias 'nnheader-cancel-timer 'delete-itimer)
+(defalias 'nnheader-cancel-function-timers 'ignore)
+(defalias 'nnheader-Y-or-n-p 'nnheader-xmas-Y-or-n-p)
 
 (provide 'nnheaderxm)
 
index 9f027fb..b402c3a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnimap.el --- imap backend for Gnus
-;; Copyright (C) 1998,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;;         Jim Radford <radford@robby.caltech.edu>
@@ -36,9 +36,7 @@
 ;;
 ;; Todo, minor things:
 ;;
-;;   o Support escape characters in `message-tokenize-header'
-;;   o Split-fancy.
-;;   o Support NOV nnmail-extra-headers.
+;;   o Don't require half of Gnus -- backends should be standalone
 ;;   o Verify that we don't use IMAP4rev1 specific things (RFC2060 App B)
 ;;   o Dont uid fetch 1,* in nnimap-retrive-groups (slow)
 ;;   o Split up big fetches (1,* header especially) in smaller chunks
 ;;   o IMAP2BIS compatibility? (RFC2061)
 ;;   o ACAP stuff (perhaps a different project, would be nice to ACAPify
 ;;     .newsrc.eld)
-;;   o What about Gnus's article editing, can we support it?
+;;   o What about Gnus's article editing, can we support it?  NO!
 ;;   o Use \Draft to support the draft group??
+;;   o Duplicate suppression
 
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 (eval-and-compile (require 'imap))
 
 (require 'nnoo)
 (require 'nnmail)
 (require 'nnheader)
 (require 'gnus)
-(require 'gnus-async)
 (require 'gnus-range)
 (require 'gnus-start)
 (require 'gnus-int)
@@ -92,7 +91,7 @@ If nil, the first match found will be used.")
   "*Name of mailbox to split mail from.
 
 Mail is read from this mailbox and split according to rules in
-`nnimap-split-rules'.
+`nnimap-split-rule'.
 
 This can be a string or a list of strings.")
 
@@ -114,14 +113,42 @@ element in each \"rule\" is the name of the IMAP mailbox, and the
 second is a regexp that nnimap will try to match on the header to find
 a fit.
 
-The first element can also be a list. In that case, the first element
-is the server the second element is the group on that server in which
-the matching article will be stored.
-
 The second element can also be a function.  In that case, it will be
 called narrowed to the headers with the first element of the rule as
 the argument.  It should return a non-nil value if it thinks that the
-mail belongs in that group.")
+mail belongs in that group.
+
+This variable can also have a function as its value, the function will
+be called with the headers narrowed and should return a group where it
+thinks the article should be splitted to.  See `nnimap-split-fancy'.
+
+To allow for different split rules on different virtual servers, and
+even different split rules in different inboxes on the same server,
+the syntax of this variable have been extended along the lines of:
+
+(setq nnimap-split-rule
+      '((\"my1server\"    (\".*\"    ((\"ding\"    \"ding@gnus.org\")
+                                  (\"junk\"    \"From:.*Simon\")))
+        (\"my2server\"    (\"INBOX\" nnimap-split-fancy))
+        (\"my[34]server\" (\".*\"    ((\"private\" \"To:.*Simon\")
+                                  (\"junk\"    my-junk-func)))))
+
+The virtual server name is in fact a regexp, so that the same rules
+may apply to several servers.  In the example, the servers
+\"my3server\" and \"my4server\" both use the same rules.  Similarly,
+the inbox string is also a regexp.  The actual splitting rules are as
+before, either a function, or a list with group/regexp or
+group/function elements.")
+
+(defvar nnimap-split-predicate "UNSEEN UNDELETED"
+  "The predicate used to find articles to split.
+If you use another IMAP client to peek on articles but always would
+like nnimap to split them once it's started, you could change this to
+\"UNDELETED\". Other available predicates are available in
+RFC2060 section 6.4.4.")
+
+(defvar nnimap-split-fancy nil
+  "Like `nnmail-split-fancy', which see.")
 
 ;; Authorization / Privacy variables
 
@@ -136,7 +163,7 @@ handle.
 
 Change this if
 
-1) you want to connect with SSL. The SSL integration with IMAP is
+1) you want to connect with SSL.  The SSL integration with IMAP is
    brain-dead so you'll have to tell it specifically.
 
 2) your server is more capable than your environment -- i.e. your
@@ -160,13 +187,14 @@ Kerberos.
 Possible choices: kerberos4, cram-md5, login, anonymous.")
 
 (defvoo nnimap-directory (nnheader-concat gnus-directory "overview/")
-  "Directory to keep NOV cache files for nnimap groups. See also
-`nnimap-nov-file-name'.")
+  "Directory to keep NOV cache files for nnimap groups.
+See also `nnimap-nov-file-name'.")
 
 (defvoo nnimap-nov-file-name "nnimap."
-  "NOV cache base filename. The group name and
-`nnimap-nov-file-name-suffix' will be appended. A typical complete
-file name would be ~/News/overview/nnimap.pdc.INBOX.ding.nov, or
+  "NOV cache base filename.
+The group name and `nnimap-nov-file-name-suffix' will be appended.  A
+typical complete file name would be
+~/News/overview/nnimap.pdc.INBOX.ding.nov, or
 ~/News/overview/nnimap/pdc/INBOX/ding/nov if
 `nnmail-use-long-file-names' is nil")
 
@@ -174,13 +202,14 @@ file name would be ~/News/overview/nnimap.pdc.INBOX.ding.nov, or
   "Suffix for NOV cache base filename.")
 
 (defvoo nnimap-nov-is-evil nil
-  "If non-nil, nnimap will never generate or use a local nov database
-for this backend.  Using nov databases will speed up header fetching
-considerably. Unlike other backends, you do not need to take special
-care if you flip this variable.")
+  "If non-nil, nnimap will never generate or use a local nov database for this backend.
+Using nov databases will speed up header fetching considerably.
+Unlike other backends, you do not need to take special care if you
+flip this variable.")
 
 (defvoo nnimap-expunge-on-close 'always ; 'ask, 'never
-  "When a IMAP group with articles marked for deletion is closed, this
+  "Whether to expunge a group when it is closed.
+When a IMAP group with articles marked for deletion is closed, this
 variable determine if nnimap should actually remove the articles or
 not.
 
@@ -192,11 +221,11 @@ When setting this variable to `never', you can only expunge articles
 by using `G x' (gnus-group-nnimap-expunge) from the Group buffer.")
 
 (defvoo nnimap-list-pattern "*"
-  "A string LIMIT or list of strings with mailbox wildcards used to
-limit available groups. Se below for available wildcards.
+  "A string LIMIT or list of strings with mailbox wildcards used to limit available groups.
+See below for available wildcards.
 
 The LIMIT string can be a cons cell (REFERENCE . LIMIT), where
-REFERENCE will be passed as the first parameter to LIST/LSUB. The
+REFERENCE will be passed as the first parameter to LIST/LSUB.  The
 semantics of this are server specific, on the University of Washington
 server you can specify a directory.
 
@@ -207,8 +236,7 @@ There are two wildcards * and %. * matches everything, % matches
 everything in the current hierarchy.")
 
 (defvoo nnimap-news-groups nil
-  "IMAP support a news-like mode, also known as bulletin board mode,
-where replies is sent via IMAP instead of SMTP.
+  "IMAP support a news-like mode, also known as bulletin board mode, where replies is sent via IMAP instead of SMTP.
 
 This variable should contain a regexp matching groups where you wish
 replies to be stored to the mailbox directly.
@@ -219,12 +247,12 @@ Example:
 This will match all groups not beginning with \"INBOX\".
 
 Note that there is nothing technically different between mail-like and
-news-like mailboxes. If you wish to have a group with todo items or
+news-like mailboxes.  If you wish to have a group with todo items or
 similar which you wouldn't want to set up a mailing list for, you can
 use this to make replies go directly to the group.")
 
 (defvoo nnimap-server-address nil
-  "Obsolete. Use `nnimap-address'.")
+  "Obsolete.  Use `nnimap-address'.")
 
 (defcustom nnimap-authinfo-file "~/.authinfo"
   "Authorization information for IMAP servers.  In .netrc format."
@@ -244,8 +272,7 @@ use this to make replies go directly to the group.")
                                          (string :format "Password: %v")))))))
 
 (defcustom nnimap-prune-cache t
-  "If non-nil, nnimap check wheter articles still exist on server
-before using data stored in NOV cache."
+  "If non-nil, nnimap check whether articles still exist on server before using data stored in NOV cache."
   :type 'boolean)
 
 (defvar nnimap-request-list-method 'imap-mailbox-list
@@ -255,7 +282,9 @@ restrict visible folders.")
 
 ;; Internal variables:
 
-(defvar nnimap-debug nil) ;; "*nnimap-debug*")
+(defvar nnimap-debug nil
+  "Name of buffer to record debugging info.
+For example: (setq nnimap-debug \"*nnimap-debug*\")")
 (defvar nnimap-current-move-server nil)
 (defvar nnimap-current-move-group nil)
 (defvar nnimap-current-move-article nil)
@@ -267,28 +296,16 @@ restrict visible folders.")
   "Gnus callback the nnimap asynchronous callback should call.")
 (defvar nnimap-callback-buffer nil
   "Which buffer the asynchronous article prefetch callback should work in.")
-
-;; Various server variables.
+(defvar nnimap-server-buffer-alist nil)        ;; Map server name to buffers.
+(defvar nnimap-current-server nil)     ;; Current server
+(defvar nnimap-server-buffer nil)      ;; Current servers' buffer
 
 \f
-;; Internal variables.
-(defvar nnimap-server-buffer-alist nil) ;; Map server name to buffers.
-(defvar nnimap-current-server nil)      ;; Current server
-(defvar nnimap-server-buffer nil)       ;; Current servers' buffer
 
 (nnoo-define-basics nnimap)
 
 ;; Utility functions:
 
-(defun nnimap-replace-in-string (string regexp to)
-  "Replace substrings in STRING matching REGEXP with TO."
-  (if (string-match regexp string)
-      (concat (substring string 0 (match-beginning 0))
-             to
-             (nnimap-replace-in-string (substring string (match-end 0))
-                                regexp to))
-    string))
-
 (defsubst nnimap-get-server-buffer (server)
   "Return buffer for SERVER, if nil use current server."
   (cadr (assoc (or server nnimap-current-server) nnimap-server-buffer-alist)))
@@ -305,15 +322,39 @@ If SERVER is nil, uses the current server."
                     group (gnus-server-to-method
                            (format "nnimap:%s" server))))
         (new-uidvalidity (imap-mailbox-get 'uidvalidity))
-        (old-uidvalidity (gnus-group-get-parameter gnusgroup 'uidvalidity)))
+        (old-uidvalidity (gnus-group-get-parameter gnusgroup 'uidvalidity))
+        (dir (file-name-as-directory (expand-file-name nnimap-directory)))
+         (nameuid (nnheader-translate-file-chars
+                   (concat nnimap-nov-file-name
+                           (if (equal server "")
+                               "unnamed"
+                             server) "." group "." old-uidvalidity
+                             nnimap-nov-file-name-suffix) t))
+         (file (if (or nnmail-use-long-file-names
+                      (file-exists-p (expand-file-name nameuid dir)))
+                  (expand-file-name nameuid dir)
+                (expand-file-name
+                 (encode-coding-string
+                  (nnheader-replace-chars-in-string nameuid ?. ?/)
+                  nnmail-pathname-coding-system)
+                 dir))))
     (if old-uidvalidity
        (if (not (equal old-uidvalidity new-uidvalidity))
-           nil ;; uidvalidity clash
+           ;; uidvalidity clash
+           (gnus-delete-file file)
          (gnus-group-set-parameter gnusgroup 'uidvalidity new-uidvalidity)
          t)
       (gnus-group-add-parameter gnusgroup (cons 'uidvalidity new-uidvalidity))
       t)))
 
+(defun nnimap-before-find-minmax-bugworkaround ()
+  "Function called before iterating through mailboxes with
+`nnimap-find-minmax-uid'."
+  ;; XXX this is for UoW imapd problem, it doesn't notice new mail in
+  ;; currently selected mailbox without a re-select/examine.
+  (or (null (imap-current-mailbox nnimap-server-buffer))
+      (imap-mailbox-unselect nnimap-server-buffer)))
+
 (defun nnimap-find-minmax-uid (group &optional examine)
   "Find lowest and highest active article nummber in GROUP.
 If EXAMINE is non-nil the group is selected read-only."
@@ -340,7 +381,7 @@ If EXAMINE is non-nil the group is selected read-only."
                    (zerop (imap-mailbox-get 'exists group))
                    (yes-or-no-p
                     (format
-                     "nnimap: Group %s is not uidvalid. Continue? " group)))
+                     "nnimap: Group %s is not uidvalid.  Continue? " group)))
                imap-current-mailbox
              (imap-mailbox-unselect)
              (error "nnimap: Group %s is not uid-valid." group))
@@ -367,39 +408,34 @@ If EXAMINE is non-nil the group is selected read-only."
                                 nnimap-progress-how-often)
                              nnimap-progress-chars)))
   (with-current-buffer nntp-server-buffer
-    (nnheader-insert-nov
-     (with-current-buffer nnimap-server-buffer
-       (make-full-mail-header
-       imap-current-message
-       (or (nnimap-replace-whitespace
-            (imap-message-envelope-subject imap-current-message))
-           "(none)")
-       (nnimap-replace-whitespace
-        (imap-envelope-from
-         (car-safe (imap-message-envelope-from
-                    imap-current-message))))
-       (nnimap-replace-whitespace
-        (imap-message-envelope-date imap-current-message))
-       (nnimap-replace-whitespace
-        (imap-message-envelope-message-id imap-current-message))
-       (nnimap-replace-whitespace
-        (let ((str (if (imap-capability 'IMAP4rev1)
-                       (nth 2 (assoc
-                               "HEADER.FIELDS REFERENCES"
-                               (imap-message-get
-                                imap-current-message 'BODYDETAIL)))
-                     (imap-message-get imap-current-message
-                                       'RFC822.HEADER))))
-          (if (> (length str) (length "References: "))
-              (substring str (length "References: "))
-            (if (and (setq str (imap-message-envelope-in-reply-to
-                                imap-current-message))
-                     (string-match "<[^>]+>" str))
-                (substring str (match-beginning 0) (match-end 0))))))
-       (imap-message-get imap-current-message 'RFC822.SIZE)
-       (imap-body-lines (imap-message-body imap-current-message))
-       nil ;; xref
-       nil))))) ;; extra-headers
+    (let (headers lines chars uid mbx)
+      (with-current-buffer nnimap-server-buffer
+       (setq uid imap-current-message
+             mbx imap-current-mailbox
+             headers (nnimap-demule
+                      (if (imap-capability 'IMAP4rev1)
+                          ;; xxx don't just use car? alist doesn't contain
+                          ;; anything else now, but it might...
+                          (nth 2 (car (imap-message-get uid 'BODYDETAIL)))
+                        (imap-message-get uid 'RFC822.HEADER)))
+             lines (imap-body-lines (imap-message-body imap-current-message))
+             chars (imap-message-get imap-current-message 'RFC822.SIZE)))
+      (nnheader-insert-nov
+       (with-temp-buffer
+        (buffer-disable-undo)
+        (insert headers)
+        (nnheader-fold-continuation-lines)
+        (subst-char-in-region (point-min) (point-max) ?\t ? )
+        (nnheader-ms-strip-cr)
+        (nnheader-fold-continuation-lines)
+        (subst-char-in-region (point-min) (point-max) ?\t ? )
+        (let ((head (nnheader-parse-head 'naked)))
+          (mail-header-set-number head uid)
+          (mail-header-set-chars head chars)
+          (mail-header-set-lines head lines)
+          (mail-header-set-xref
+           head (format "%s %s:%d" (system-name) mbx uid))
+          head))))))
 
 (defun nnimap-retrieve-which-headers (articles fetch-old)
   "Get a range of articles to fetch based on ARTICLES and FETCH-OLD."
@@ -407,7 +443,7 @@ If EXAMINE is non-nil the group is selected read-only."
     (if (numberp (car-safe articles))
        (imap-search
         (concat "UID "
-                (nnimap-range-to-string
+                (imap-range-to-message-set
                  (gnus-compress-sequence
                   (append (gnus-uncompress-sequence
                            (and fetch-old
@@ -418,23 +454,53 @@ If EXAMINE is non-nil the group is selected read-only."
                           articles)))))
       (mapcar (lambda (msgid)
                (imap-search
-                (format "HEADER Message-Id %s" msgid)))
+                (format "HEADER Message-Id \"%s\"" msgid)))
              articles))))
 
 (defun nnimap-group-overview-filename (group server)
   "Make pathname for GROUP on SERVER."
-  (let ((dir (file-name-as-directory (expand-file-name nnimap-directory)))
-       (file (nnheader-translate-file-chars
-              (concat nnimap-nov-file-name
-                      (if (equal server "")
-                          "unnamed"
-                        server) "." group nnimap-nov-file-name-suffix) t)))
-    (if (or nnmail-use-long-file-names
-           (file-exists-p (concat dir file)))
-       (concat dir file)
-      (concat dir (encode-coding-string
-                  (nnheader-replace-chars-in-string file ?. ?/)
-                  nnmail-pathname-coding-system)))))
+  (let* ((dir (file-name-as-directory (expand-file-name nnimap-directory)))
+        (uidvalidity (gnus-group-get-parameter
+                      (gnus-group-prefixed-name
+                       group (gnus-server-to-method
+                              (format "nnimap:%s" server)))
+                      'uidvalidity))
+        (name (nnheader-translate-file-chars
+               (concat nnimap-nov-file-name
+                       (if (equal server "")
+                           "unnamed"
+                         server) "." group nnimap-nov-file-name-suffix) t))
+        (nameuid (nnheader-translate-file-chars
+                  (concat nnimap-nov-file-name
+                          (if (equal server "")
+                              "unnamed"
+                            server) "." group "." uidvalidity
+                            nnimap-nov-file-name-suffix) t))
+        (oldfile (if (or nnmail-use-long-file-names
+                         (file-exists-p (expand-file-name name dir)))
+                     (expand-file-name name dir)
+                   (expand-file-name
+                    (encode-coding-string
+                     (nnheader-replace-chars-in-string name ?. ?/)
+                     nnmail-pathname-coding-system)
+                    dir)))
+        (newfile (if (or nnmail-use-long-file-names
+                         (file-exists-p (expand-file-name nameuid dir)))
+                     (expand-file-name nameuid dir)
+                   (expand-file-name
+                    (encode-coding-string
+                     (nnheader-replace-chars-in-string nameuid ?. ?/)
+                     nnmail-pathname-coding-system)
+                    dir))))
+    (when (and (file-exists-p oldfile) (not (file-exists-p newfile)))
+      (message "nnimap: Upgrading novcache filename...")
+      (sit-for 1)
+      (gnus-make-directory (file-name-directory newfile))
+      (unless (ignore-errors (rename-file oldfile newfile) t)
+       (if (ignore-errors (copy-file oldfile newfile) t)
+           (delete-file oldfile)
+         (error "Can't rename `%s' to `%s'" oldfile newfile))))
+    newfile))
 
 (defun nnimap-retrieve-headers-from-file (group server)
   (with-current-buffer nntp-server-buffer
@@ -442,13 +508,11 @@ If EXAMINE is non-nil the group is selected read-only."
       (when (file-exists-p nov)
        (nnheader-insert-file-contents nov)
        (set-buffer-modified-p nil)
-       (let ((min (progn (goto-char (point-min))
-                         (when (not (eobp))
-                           (read (current-buffer)))))
-             (max (progn (goto-char (point-max))
-                         (forward-line -1)
-                         (when (not (bobp))
-                           (read (current-buffer))))))
+       (let ((min (ignore-errors (goto-char (point-min))
+                                 (read (current-buffer))))
+             (max (ignore-errors (goto-char (point-max))
+                                 (forward-line -1)
+                                 (read (current-buffer)))))
          (if (and (numberp min) (numberp max))
              (cons min max)
            ;; junk, remove it, it's saved later
@@ -460,11 +524,16 @@ If EXAMINE is non-nil the group is selected read-only."
     (let ((imap-fetch-data-hook '(nnimap-retrieve-headers-progress))
          (nnimap-length (gnus-range-length articles))
          (nnimap-counter 0))
-      (imap-fetch (nnimap-range-to-string articles)
-                 (concat "(UID RFC822.SIZE ENVELOPE BODY "
-                         (if (imap-capability 'IMAP4rev1)
-                             "BODY.PEEK[HEADER.FIELDS (References)])"
-                           "RFC822.HEADER.LINES (References))")))
+      (imap-fetch (imap-range-to-message-set articles)
+                 (concat "(UID RFC822.SIZE BODY "
+                         (let ((headers
+                                (append '(Subject From Date Message-Id
+                                                  References In-Reply-To Xref)
+                                        (copy-sequence
+                                         nnmail-extra-headers))))
+                           (if (imap-capability 'IMAP4rev1)
+                               (format "BODY.PEEK[HEADER.FIELDS %s])" headers)
+                             (format "RFC822.HEADER.LINES %s)" headers)))))
       (and (numberp nnmail-large-newsgroup)
           (> nnimap-length nnmail-large-newsgroup)
           (nnheader-message 6 "nnimap: Retrieving headers...done")))))
@@ -506,8 +575,8 @@ If EXAMINE is non-nil the group is selected read-only."
                    ;; remove nov's for articles which has expired on server
                    (goto-char (point-min))
                    (dolist (uid (gnus-set-difference articles uids))
-                     (when (re-search-forward (format "^%d\t" uid) nil t)
-                       (gnus-delete-line)))))
+                      (when (re-search-forward (format "^%d\t" uid) nil t)
+                        (gnus-delete-line)))))
              ;; nothing cached, fetch whole range from server
              (nnimap-retrieve-headers-from-server
               (cons low high) group server))
@@ -526,15 +595,15 @@ If EXAMINE is non-nil the group is selected read-only."
                (imap-capability 'IMAP4rev1 nnimap-server-buffer))
       (imap-close nnimap-server-buffer)
       (nnheader-report 'nnimap "Server %s is not IMAP4 compliant" server))
-    (let (list alist user passwd)
-      (and (fboundp 'gnus-parse-netrc)
-          (setq list (gnus-parse-netrc nnimap-authinfo-file)
-                alist (or (and (gnus-netrc-get
-                                (gnus-netrc-machine list server) "machine")
-                               (gnus-netrc-machine list server))
-                          (gnus-netrc-machine list nnimap-address))
-                user (gnus-netrc-get alist "login")
-                passwd (gnus-netrc-get alist "password")))
+    (let* ((list (gnus-parse-netrc nnimap-authinfo-file))
+          (port (if nnimap-server-port
+                    (int-to-string nnimap-server-port)
+                  "imap"))
+          (alist (gnus-netrc-machine list (or nnimap-server-address 
+                                               nnimap-address server)
+                                      port "imap"))
+          (user (gnus-netrc-get alist "login"))
+          (passwd (gnus-netrc-get alist "password")))
       (if (imap-authenticate user passwd nnimap-server-buffer)
          (prog1
              (push (list server nnimap-server-buffer)
@@ -558,13 +627,16 @@ If EXAMINE is non-nil the group is selected read-only."
                      (cadr (assq 'nnimap-server-address defs))) defs)
        (push (list 'nnimap-address server) defs)))
     (nnoo-change-server 'nnimap server defs)
+    (with-current-buffer (get-buffer-create nnimap-server-buffer)
+      (nnoo-change-server 'nnimap server defs))
     (or (and nnimap-server-buffer
             (imap-opened nnimap-server-buffer))
        (nnimap-open-connection server))))
 
 (deffoo nnimap-server-opened (&optional server)
-  "If SERVER is the current virtual server, and the connection to the
-physical server is alive, this function return a non-nil value. If
+  "Whether SERVER is opened.
+If SERVER is the current virtual server, and the connection to the
+physical server is alive, this function return a non-nil value.  If
 SERVER is nil, it is treated as the current server."
   ;; clean up autologouts??
   (and (or server nnimap-current-server)
@@ -572,8 +644,8 @@ SERVER is nil, it is treated as the current server."
        (imap-opened (nnimap-get-server-buffer server))))
 
 (deffoo nnimap-close-server (&optional server)
-  "Close connection to server and free all resources connected to
-it. Return nil if the server couldn't be closed for some reason."
+  "Close connection to server and free all resources connected to it.
+Return nil if the server couldn't be closed for some reason."
   (let ((server (or server nnimap-current-server)))
     (when (or (nnimap-server-opened server)
              (imap-opened (nnimap-get-server-buffer server)))
@@ -586,9 +658,9 @@ it. Return nil if the server couldn't be closed for some reason."
     (nnoo-close-server 'nnimap server)))
 
 (deffoo nnimap-request-close ()
-  "Close connection to all servers and free all resources that the
-backend have reserved. All buffers that have been created by that
-backend should be killed. (Not the nntp-server-buffer, though.) This
+  "Close connection to all servers and free all resources that the backend have reserved.
+All buffers that have been created by that
+backend should be killed.  (Not the nntp-server-buffer, though.) This
 function is generally only called when Gnus is shutting down."
   (mapcar (lambda (server) (nnimap-close-server (car server)))
          nnimap-server-buffer-alist)
@@ -611,32 +683,39 @@ function is generally only called when Gnus is shutting down."
   (with-current-buffer nnimap-callback-buffer
     (insert
      (with-current-buffer nnimap-server-buffer
-       (nnimap-demule (imap-message-get (imap-current-message) 'RFC822)))) ;xxx
+       (if (imap-capability 'IMAP4rev1) 
+          ;; xxx don't just use car? alist doesn't contain
+          ;; anything else now, but it might...
+          (nth 2 (car (imap-message-get (imap-current-message) 'BODYDETAIL)))
+        (imap-message-get (imap-current-message) 'RFC822))))
     (nnheader-ms-strip-cr)
     (funcall nnimap-callback-callback-function t)))
 
-(defun nnimap-request-article-part (article part prop
-                                           &optional group server to-buffer)
+(defun nnimap-request-article-part (article part prop &optional
+                                           group server to-buffer detail)
   (when (nnimap-possibly-change-group group server)
     (let ((article (if (stringp article)
                       (car-safe (imap-search
-                                 (format "HEADER Message-Id %s" article)
+                                 (format "HEADER Message-Id \"%s\"" article)
                                  nnimap-server-buffer))
                     article)))
       (when article
-       (gnus-message 9 "nnimap: Fetching (part of) article %d..." article)
+       (gnus-message 10 "nnimap: Fetching (part of) article %d..." article)
        (if (not nnheader-callback-function)
            (with-current-buffer (or to-buffer nntp-server-buffer)
              (erase-buffer)
-             (insert (nnimap-demule (imap-fetch article part prop nil
-                                                nnimap-server-buffer)))
-             (nnheader-ms-strip-cr)
-             (gnus-message 9 "nnimap: Fetching (part of) article %d...done"
-                           article)
-             (if (bobp)
-                 (nnheader-report 'nnimap "No such article: %s"
-                                  (imap-error-text nnimap-server-buffer))
-               (cons group article)))
+             (let ((data (imap-fetch article part prop nil
+                                     nnimap-server-buffer)))
+               (when data
+                 (insert (if detail (nth 2 (car data)) data))
+                 (nnheader-ms-strip-cr)
+                 (gnus-message 10
+                               "nnimap: Fetching (part of) article %d...done"
+                               article)
+                 (if (bobp)
+                     (nnheader-report 'nnimap "No such article: %s"
+                                      (imap-error-text nnimap-server-buffer))
+                   (cons group article)))))
          (add-hook 'imap-fetch-data-hook 'nnimap-callback)
          (setq nnimap-callback-callback-function nnheader-callback-function
                nnimap-callback-buffer nntp-server-buffer)
@@ -647,16 +726,25 @@ function is generally only called when Gnus is shutting down."
   t)
 
 (deffoo nnimap-request-article (article &optional group server to-buffer)
-  (nnimap-request-article-part
-   article "RFC822.PEEK" 'RFC822 group server to-buffer))
+  (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
+      (nnimap-request-article-part
+       article "BODY.PEEK[]" 'BODYDETAIL group server to-buffer 'detail)
+    (nnimap-request-article-part
+     article "RFC822.PEEK" 'RFC822 group server to-buffer)))
 
 (deffoo nnimap-request-head (article &optional group server to-buffer)
-  (nnimap-request-article-part
-   article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer))
+  (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
+      (nnimap-request-article-part
+       article "BODY.PEEK[HEADER]" 'BODYDETAIL group server to-buffer 'detail)
+    (nnimap-request-article-part
+     article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer)))
 
 (deffoo nnimap-request-body (article &optional group server to-buffer)
-  (nnimap-request-article-part
-   article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer))
+  (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
+      (nnimap-request-article-part
+       article "BODY.PEEK[TEXT]" 'BODYDETAIL group server to-buffer 'detail)
+    (nnimap-request-article-part
+     article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer)))
 
 (deffoo nnimap-request-group (group &optional server fast)
   (nnimap-request-update-info-internal
@@ -665,6 +753,7 @@ function is generally only called when Gnus is shutting down."
                   group (gnus-server-to-method (format "nnimap:%s" server))))
    server)
   (when (nnimap-possibly-change-group group server)
+    (nnimap-before-find-minmax-bugworkaround)
     (let (info)
       (cond (fast group)
            ((null (setq info (nnimap-find-minmax-uid group t)))
@@ -708,6 +797,7 @@ function is generally only called when Gnus is shutting down."
       (erase-buffer))
     (gnus-message 5 "nnimap: Generating active list%s..."
                  (if (> (length server) 0) (concat " for " server) ""))
+    (nnimap-before-find-minmax-bugworkaround)
     (with-current-buffer nnimap-server-buffer
       (dolist (pattern (nnimap-pattern-to-list-arguments nnimap-list-pattern))
        (dolist (mbx (funcall nnimap-request-list-method
@@ -715,20 +805,19 @@ function is generally only called when Gnus is shutting down."
          (or (member "\\NoSelect" (imap-mailbox-get 'list-flags mbx))
              (let ((info (nnimap-find-minmax-uid mbx 'examine)))
                (when info
-                 ;; Escape SPC in mailboxes xxx relies on gnus internals
                  (with-current-buffer nntp-server-buffer
-                   (insert (format "%s %d %d y\n"
-                                   (nnimap-replace-in-string mbx " " "\\ ")
-                                   (or (nth 2 info) 0)
-                                   (max 1 (or (nth 1 info) 1)))))))))))
+                   (insert (format "\"%s\" %d %d y\n"
+                                   mbx (or (nth 2 info) 0)
+                                   (max 1 (or (nth 1 info) 1)))))))))))
     (gnus-message 5 "nnimap: Generating active list%s...done"
                  (if (> (length server) 0) (concat " for " server) ""))
     t))
 
 (deffoo nnimap-request-post (&optional server)
   (let ((success t))
-    (dolist  (mbx (message-tokenize-header
-                  (message-fetch-field "Newsgroups")) success)
+    (dolist (mbx (message-unquote-tokens
+                 (message-tokenize-header
+                  (message-fetch-field "Newsgroups") ", ")) success)
       (let ((to-newsgroup (gnus-group-prefixed-name mbx gnus-command-method)))
        (or (gnus-active to-newsgroup)
            (gnus-activate-group to-newsgroup)
@@ -750,22 +839,21 @@ function is generally only called when Gnus is shutting down."
     (gnus-message 5 "nnimap: Checking mailboxes...")
     (with-current-buffer nntp-server-buffer
       (erase-buffer)
+      (nnimap-before-find-minmax-bugworkaround)
       (dolist (group groups)
        (gnus-message 7 "nnimap: Checking mailbox %s" group)
        (or (member "\\NoSelect"
                    (imap-mailbox-get 'list-flags group nnimap-server-buffer))
            (let ((info (nnimap-find-minmax-uid group 'examine)))
-             ;; Escape SPC in mailboxes xxx relies on gnus internals
-             (insert (format "211 %d %d %d %s\n" (or (nth 0 info) 0)
-                             (max 1 (or (nth 1 info) 1))
+             (insert (format "\"%s\" %d %d y\n" group
                              (or (nth 2 info) 0)
-                             (nnimap-replace-in-string group " " "\\ ")))))))
+                             (max 1 (or (nth 1 info) 1))))))))
     (gnus-message 5 "nnimap: Checking mailboxes...done")
-    'groups))
+    'active))
 
 (deffoo nnimap-request-update-info-internal (group info &optional server)
   (when (nnimap-possibly-change-group group server)
-    (when info ;; xxx what does this mean? should we create a info?
+    (when info;; xxx what does this mean? should we create a info?
       (with-current-buffer nnimap-server-buffer
        (gnus-message 5 "nnimap: Updating info for %s..."
                      (gnus-info-group info))
@@ -792,19 +880,31 @@ function is generally only called when Gnus is shutting down."
                         seen))
            (gnus-info-set-read info seen)))
 
-       (mapc (lambda (pred)
-               (when (and (nnimap-mark-permanent-p (cdr pred))
-                          (member (nnimap-mark-to-flag (cdr pred))
-                                  (imap-mailbox-get 'flags)))
-                 (gnus-info-set-marks
-                  info
-                  (nnimap-update-alist-soft
-                   (cdr pred)
-                   (gnus-compress-sequence
-                    (imap-search (nnimap-mark-to-predicate (cdr pred))))
-                   (gnus-info-marks info))
-                  t)))
-             gnus-article-mark-lists)
+       (mapcar (lambda (pred)
+                 (when (and (nnimap-mark-permanent-p (cdr pred))
+                            (member (nnimap-mark-to-flag (cdr pred))
+                                    (imap-mailbox-get 'flags)))
+                   (gnus-info-set-marks
+                    info
+                    (nnimap-update-alist-soft
+                     (cdr pred)
+                     (gnus-compress-sequence
+                      (imap-search (nnimap-mark-to-predicate (cdr pred))))
+                     (gnus-info-marks info))
+                    t)))
+               gnus-article-mark-lists)
+
+       ;; nnimap mark dormant article as ticked too (for other clients)
+       ;; so we remove that mark for gnus since we support dormant
+       (gnus-info-set-marks
+        info 
+        (nnimap-update-alist-soft
+         'tick
+         (gnus-remove-from-range
+          (cdr-safe (assoc 'tick (gnus-info-marks info)))
+          (cdr-safe (assoc 'dormant (gnus-info-marks info))))
+         (gnus-info-marks info))
+        t)
        
        (gnus-message 5 "nnimap: Updating info for %s...done"
                      (gnus-info-group info))
@@ -840,19 +940,24 @@ function is generally only called when Gnus is shutting down."
            (when (and range marks)
              (cond ((eq what 'del)
                     (imap-message-flags-del
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))
                    ((eq what 'add)
                     (imap-message-flags-add
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))
                    ((eq what 'set)
                     (imap-message-flags-set
-                     (nnimap-range-to-string range)
+                     (imap-range-to-message-set range)
                      (nnimap-mark-to-flag marks nil t)))))))
        (gnus-message 7 "nnimap: Setting marks in %s...done" group))))
   nil)
 
+(defun nnimap-split-fancy ()
+  "Like nnmail-split-fancy, but uses nnimap-split-fancy."
+  (let ((nnmail-split-fancy nnimap-split-fancy))
+    (nnmail-split-fancy)))
+
 (defun nnimap-split-to-groups (rules)
   ;; tries to match all rules in nnimap-split-rule against content of
   ;; nntp-server-buffer, returns a list of groups that matched.
@@ -883,8 +988,21 @@ function is generally only called when Gnus is shutting down."
                (or nnimap-split-crosspost
                    (throw 'split-done to-groups))))))))))
   
+(defun nnimap-assoc-match (key alist)
+  (let (element)
+    (while (and alist (not element))
+      (if (string-match (car (car alist)) key)
+         (setq element (car alist)))
+      (setq alist (cdr alist)))
+    element))
+
 (defun nnimap-split-find-rule (server inbox)
-  nnimap-split-rule)
+  (if (and (listp nnimap-split-rule) (listp (car nnimap-split-rule))
+           (list (cdar nnimap-split-rule)) (listp (cadar nnimap-split-rule)))
+      ;; extended format
+      (cadr (nnimap-assoc-match inbox (cdr (nnimap-assoc-match 
+                                           server nnimap-split-rule))))
+    nnimap-split-rule))
 
 (defun nnimap-split-find-inbox (server)
   (if (listp nnimap-split-inbox)
@@ -897,11 +1015,11 @@ function is generally only called when Gnus is shutting down."
       (let (rule inbox removeorig (inboxes (nnimap-split-find-inbox server)))
        ;; iterate over inboxes
        (while (and (setq inbox (pop inboxes))
-                   (nnimap-possibly-change-group inbox)) ;; SELECT
+                   (nnimap-possibly-change-group inbox));; SELECT
          ;; find split rule for this server / inbox
          (when (setq rule (nnimap-split-find-rule server inbox))
            ;; iterate over articles
-           (dolist (article (imap-search "UNSEEN UNDELETED"))
+           (dolist (article (imap-search nnimap-split-predicate))
              (when (nnimap-request-head article)
                ;; copy article to right group(s)
                (setq removeorig nil)
@@ -920,7 +1038,7 @@ function is generally only called when Gnus is shutting down."
                (and removeorig
                     (imap-message-flags-add (format "%d" article)
                                             "\\Seen \\Deleted")))))
-         (when (imap-mailbox-select inbox) ;; just in case
+         (when (imap-mailbox-select inbox);; just in case
            ;; todo: UID EXPUNGE (if available) to remove splitted articles
            (imap-mailbox-expunge)
            (imap-mailbox-close)))
@@ -935,23 +1053,21 @@ function is generally only called when Gnus is shutting down."
       (gnus-message 5 "nnimap: Listing subscribed mailboxes%s%s..."
                    (if (> (length server) 0) " on " "") server)
       (erase-buffer)
+      (nnimap-before-find-minmax-bugworkaround)
       (dolist (pattern (nnimap-pattern-to-list-arguments
                        nnimap-list-pattern))
-       (dolist (mbx (imap-mailbox-lsub "*" (car pattern) nil
+       (dolist (mbx (imap-mailbox-lsub "*" (car pattern) nil 
                                        nnimap-server-buffer))
-         (or (let ((mailboxes (imap-mailbox-get 'list-flags mbx
-                                                nnimap-server-buffer)))
-               (while (and mailboxes
-                           (not (string-equal (downcase (car mailboxes))
-                                              "\\noselect")))
-                 (pop mailboxes))
-               mailboxes)
-             ;; Escape SPC in mailboxes xxx relies on gnus internals
+         (or (catch 'found
+               (dolist (mailbox (imap-mailbox-get 'list-flags mbx
+                                                  nnimap-server-buffer))
+                 (if (string= (downcase mailbox) "\\noselect")
+                     (throw 'found t)))
+               nil)
              (let ((info (nnimap-find-minmax-uid mbx 'examine)))
                (when info
-                 (insert (format "%s %d %d y\n"
-                                 (nnimap-replace-in-string mbx " " "\\ ")
-                                 (or (nth 2 info) 0)
+                 (insert (format "\"%s\" %d %d y\n"
+                                 mbx (or (nth 2 info) 0)
                                  (max 1 (or (nth 1 info) 1)))))))))
       (gnus-message 5 "nnimap: Listing subscribed mailboxes%s%s...done"
                    (if (> (length server) 0) " on " "") server))
@@ -991,25 +1107,25 @@ function is generally only called when Gnus is shutting down."
       (with-current-buffer nnimap-server-buffer
        (if force
            (and (imap-message-flags-add
-                 (nnimap-range-to-string artseq) "\\Deleted")
+                 (imap-range-to-message-set artseq) "\\Deleted")
                 (setq articles nil))
          (let ((days (or (and nnmail-expiry-wait-function
                               (funcall nnmail-expiry-wait-function group))
                          nnmail-expiry-wait)))
            (cond ((eq days 'immediate)
                   (and (imap-message-flags-add
-                        (nnimap-range-to-string artseq) "\\Deleted")
+                        (imap-range-to-message-set artseq) "\\Deleted")
                        (setq articles nil)))
                  ((numberp days)
                   (let ((oldarts (imap-search
                                   (format "UID %s NOT SINCE %s"
-                                          (nnimap-range-to-string artseq)
+                                          (imap-range-to-message-set artseq)
                                           (nnimap-date-days-ago days))))
                         (imap-fetch-data-hook
                          '(nnimap-request-expire-articles-progress)))
                     (and oldarts
                          (imap-message-flags-add
-                          (nnimap-range-to-string
+                          (imap-range-to-message-set
                            (gnus-compress-sequence oldarts))
                           "\\Deleted")
                          (setq articles (gnus-set-difference
@@ -1049,13 +1165,18 @@ function is generally only called when Gnus is shutting down."
                                             nnimap-current-move-article)
                                            group 'dontcreate nil
                                            nnimap-server-buffer))
-                 ;; turn into rfc822 format (\r\n eol's)
                  (with-current-buffer (current-buffer)
                    (goto-char (point-min))
+                   ;; remove any 'From blabla' lines, some IMAP servers
+                   ;; reject the entire message otherwise.
+                   (when (looking-at "^From[^:]")
+                     (kill-region (point) (progn (forward-line) (point))))
+                   ;; turn into rfc822 format (\r\n eol's)
                    (while (search-forward "\n" nil t)
                      (replace-match "\r\n")))
-                 ;; next line for Cyrus server bug
-                 (imap-mailbox-unselect nnimap-server-buffer)
+                  ;; this 'or' is for Cyrus server bug
+                  (or (null (imap-current-mailbox nnimap-server-buffer))
+                      (imap-mailbox-unselect nnimap-server-buffer))
                  (imap-message-append group (current-buffer) nil nil
                                       nnimap-server-buffer)))
          (cons group (nth 1 uid))
@@ -1080,7 +1201,8 @@ function is generally only called when Gnus is shutting down."
 
 (defun nnimap-acl-get (mailbox server)
   (when (nnimap-possibly-change-server server)
-    (imap-mailbox-acl-get mailbox nnimap-server-buffer)))
+    (and (imap-capability 'ACL nnimap-server-buffer)
+        (imap-mailbox-acl-get mailbox nnimap-server-buffer))))
 
 (defun nnimap-acl-edit (mailbox method old-acls new-acls)
   (when (nnimap-possibly-change-server (cadr method))
@@ -1090,18 +1212,18 @@ function is generally only called when Gnus is shutting down."
       ;; delete all removed identifiers
       (mapcar (lambda (old-acl)
                (unless (assoc (car old-acl) new-acls)
-                   (or (imap-mailbox-acl-delete (car old-acl) mailbox)
-                       (error "Can't delete ACL for %s" (car old-acl)))))
+                 (or (imap-mailbox-acl-delete (car old-acl) mailbox)
+                     (error "Can't delete ACL for %s" (car old-acl)))))
              old-acls)
       ;; set all changed acl's
       (mapcar (lambda (new-acl)
                (let ((new-rights (cdr new-acl))
                      (old-rights (cdr (assoc (car new-acl) old-acls))))
-               (unless (and old-rights new-rights
-                            (string= old-rights new-rights))
-                 (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
-                     (error "Can't set ACL for %s to %s" (car new-acl)
-                            new-rights)))))
+                 (unless (and old-rights new-rights
+                              (string= old-rights new-rights))
+                   (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
+                       (error "Can't set ACL for %s to %s" (car new-acl)
+                              new-rights)))))
              new-acls)
       t)))
 
@@ -1116,12 +1238,12 @@ function is generally only called when Gnus is shutting down."
 ;; predicate => "SEEN", "FLAGGED", "DRAFT", "KEYWORD gnus-expire" etc
 ;;
 ;; Mark should not really contain 'read since it's not a "mark" in the Gnus
-;; world, but we cheat. Mark == gnus-article-mark-lists + '(read . read).
+;; world, but we cheat.  Mark == gnus-article-mark-lists + '(read . read).
 ;;
 
 (defconst nnimap-mark-to-predicate-alist
   (mapcar
-   (lambda (pair) ; cdr is the mark
+   (lambda (pair)                      ; cdr is the mark
      (or (assoc (cdr pair)
                 '((read . "SEEN")
                   (tick . "FLAGGED")
@@ -1132,9 +1254,9 @@ function is generally only called when Gnus is shutting down."
    (cons '(read . read) gnus-article-mark-lists)))
 
 (defun nnimap-mark-to-predicate (pred)
-  "Convert a Gnus mark (a symbol such as read, tick, expire) to a IMAP
-predicate (a string such as \"SEEN\", \"FLAGGED\", \"KEYWORD
-gnus-expire\") to be used within a IMAP SEARCH query."
+  "Convert a Gnus mark (a symbol such as read, tick, expire) to a IMAP predicate.
+This is a string such as \"SEEN\", \"FLAGGED\", \"KEYWORD gnus-expire\",
+to be used within a IMAP SEARCH query."
   (cdr (assq pred nnimap-mark-to-predicate-alist)))
 
 (defconst nnimap-mark-to-flag-alist
@@ -1156,8 +1278,8 @@ gnus-expire\") to be used within a IMAP SEARCH query."
     (cdr (assoc preds nnimap-mark-to-flag-alist))))
 
 (defun nnimap-mark-to-flag (preds &optional always-list make-string)
-  "Convert a Gnus mark (a symbol such as read, tick, expire) to a IMAP
-flag (a string such as \"\\Seen\", \"\\Flagged\", \"gnus-expire\") to
+  "Convert a Gnus mark (a symbol such as read, tick, expire) to a IMAP flag.
+This is a string such as \"\\Seen\", \"\\Flagged\", \"gnus-expire\", to
 be used in a STORE FLAGS command."
   (let ((result (nnimap-mark-to-flag-1 preds)))
     (setq result (if (and (or make-string always-list)
@@ -1173,13 +1295,12 @@ be used in a STORE FLAGS command."
       result)))
 
 (defun nnimap-mark-permanent-p (mark &optional group)
-  "Return t iff MARK can be permanently (between IMAP sessions) saved
-on articles, in GROUP."
+  "Return t iff MARK can be permanently (between IMAP sessions) saved on articles, in GROUP."
   (imap-message-flag-permanent-p (nnimap-mark-to-flag mark)))
 
 (defun nnimap-remassoc (key alist)
-  "Delete by side effect any elements of LIST whose car is
-`equal' to KEY.  The modified LIST is returned.  If the first member
+  "Delete by side effect any elements of LIST whose car is `equal' to KEY.
+The modified LIST is returned.  If the first member
 of LIST has a car that is `equal' to KEY, there is no way to remove it
 by side effect; therefore, write `(setq foo (remassoc key foo))' to be
 sure of changing the value of `foo'."
@@ -1194,81 +1315,68 @@ sure of changing the value of `foo'."
       (cons (cons key value) (nnimap-remassoc key alist))
     (nnimap-remassoc key alist)))
 
-(defun nnimap-range-to-string (range)
-  (mapconcat
-   (lambda (item)
-     (if (consp item)
-         (format "%d:%d"
-                 (car item) (cdr item))
-       (format "%d" item)))
-   (if (and (listp range) (not (listp (cdr range))))
-       (list range) ;; make (1 . 2) into ((1 . 2))
-     range)
-   ","))
-
 (when nnimap-debug
   (require 'trace)
   (buffer-disable-undo (get-buffer-create nnimap-debug))
-  (mapc (lambda (f) (trace-function-background f nnimap-debug))
+  (mapcar (lambda (f) (trace-function-background f nnimap-debug))
         '(
-nnimap-replace-in-string
-nnimap-possibly-change-server
-nnimap-verify-uidvalidity
-nnimap-find-minmax-uid
-nnimap-possibly-change-group
-;nnimap-replace-whitespace
-nnimap-retrieve-headers-progress
-nnimap-retrieve-which-headers
-nnimap-group-overview-filename
-nnimap-retrieve-headers-from-file
-nnimap-retrieve-headers-from-server
-nnimap-retrieve-headers
-nnimap-open-connection
-nnimap-open-server
-nnimap-server-opened
-nnimap-close-server
-nnimap-request-close
-nnimap-status-message
-;nnimap-demule
-nnimap-request-article-part
-nnimap-request-article
-nnimap-request-head
-nnimap-request-body
-nnimap-request-group
-nnimap-close-group
-nnimap-pattern-to-list-arguments
-nnimap-request-list
-nnimap-request-post
-nnimap-retrieve-groups
-nnimap-request-update-info-internal
-nnimap-request-type
-nnimap-request-set-mark
-nnimap-split-to-groups
-nnimap-split-find-rule
-nnimap-split-find-inbox
-nnimap-split-articles
-nnimap-request-scan
-nnimap-request-newgroups
-nnimap-request-create-group
-nnimap-time-substract
-nnimap-date-days-ago
-nnimap-request-expire-articles-progress
-nnimap-request-expire-articles
-nnimap-request-move-article
-nnimap-request-accept-article
-nnimap-request-delete-group
-nnimap-request-rename-group
-gnus-group-nnimap-expunge
-gnus-group-nnimap-edit-acl
-gnus-group-nnimap-edit-acl-done
-nnimap-group-mode-hook
-nnimap-mark-to-predicate
-nnimap-mark-to-flag-1
-nnimap-mark-to-flag
-nnimap-mark-permanent-p
-nnimap-remassoc
-nnimap-update-alist-soft
-nnimap-range-to-string
+         nnimap-possibly-change-server
+         nnimap-verify-uidvalidity
+         nnimap-find-minmax-uid
+         nnimap-before-find-minmax-bugworkaround
+         nnimap-possibly-change-group
+         ;;nnimap-replace-whitespace
+         nnimap-retrieve-headers-progress
+         nnimap-retrieve-which-headers
+         nnimap-group-overview-filename
+         nnimap-retrieve-headers-from-file
+         nnimap-retrieve-headers-from-server
+         nnimap-retrieve-headers
+         nnimap-open-connection
+         nnimap-open-server
+         nnimap-server-opened
+         nnimap-close-server
+         nnimap-request-close
+         nnimap-status-message
+         ;;nnimap-demule
+         nnimap-request-article-part
+         nnimap-request-article
+         nnimap-request-head
+         nnimap-request-body
+         nnimap-request-group
+         nnimap-close-group
+         nnimap-pattern-to-list-arguments
+         nnimap-request-list
+         nnimap-request-post
+         nnimap-retrieve-groups
+         nnimap-request-update-info-internal
+         nnimap-request-type
+         nnimap-request-set-mark
+         nnimap-split-to-groups
+         nnimap-split-find-rule
+         nnimap-split-find-inbox
+         nnimap-split-articles
+         nnimap-request-scan
+         nnimap-request-newgroups
+         nnimap-request-create-group
+         nnimap-time-substract
+         nnimap-date-days-ago
+         nnimap-request-expire-articles-progress
+         nnimap-request-expire-articles
+         nnimap-request-move-article
+         nnimap-request-accept-article
+         nnimap-request-delete-group
+         nnimap-request-rename-group
+         gnus-group-nnimap-expunge
+         gnus-group-nnimap-edit-acl
+         gnus-group-nnimap-edit-acl-done
+         nnimap-group-mode-hook
+         nnimap-mark-to-predicate
+         nnimap-mark-to-flag-1
+         nnimap-mark-to-flag
+         nnimap-mark-permanent-p
+         nnimap-remassoc
+         nnimap-update-alist-soft
           )))
 
 (provide 'nnimap)
index e6d7ff0..8fb0b6c 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnkiboze.el --- select virtual news access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nntp)
 (require 'nnheader)
 (require 'gnus)
 (require 'gnus-score)
 (require 'nnoo)
-(eval-when-compile (require 'cl))
 
 (nnoo-declare nnkiboze)
 (defvoo nnkiboze-directory (nnheader-concat gnus-directory "kiboze/")
@@ -55,6 +59,9 @@
 (defvoo nnkiboze-regexp nil
   "Regexp for matching component groups.")
 
+(defvoo nnkiboze-file-coding-system nnheader-text-coding-system
+  "Coding system for nnkiboze files.")
+
 \f
 
 (defconst nnkiboze-version "nnkiboze 1.0")
@@ -80,7 +87,8 @@
          (save-excursion
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (nnheader-insert-file-contents nov)
+           (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+             (nnheader-insert-file-contents nov))
            (nnheader-nov-delete-outside-range
             (car articles) (car (last articles)))
            'nov))))))
       ;; article fetching by message-id at all.
       (nntp-request-article article newsgroup gnus-nntp-server buffer)
     (let* ((header (gnus-summary-article-header article))
-          (xref (mail-header-xref header)))
+          (xref (mail-header-xref header))
+          num group)
       (unless xref
        (error "nnkiboze: No xref"))
       (unless (string-match " \\([^ ]+\\):\\([0-9]+\\)" xref)
        (error "nnkiboze: Malformed xref"))
-      (gnus-request-article (string-to-int (match-string 2 xref))
-                           (match-string 1 xref)
-                           buffer))))
+      (setq num (string-to-int (match-string 2 xref))
+           group (match-string 1 xref))
+      (or (with-current-buffer buffer
+           (gnus-cache-request-article num group))
+         (gnus-request-article num group buffer)))))
 
 (deffoo nnkiboze-request-scan (&optional group server)
   (nnkiboze-generate-group (concat "nnkiboze:" group)))
          (nnkiboze-request-scan group))
        (if (not (file-exists-p nov-file))
            (nnheader-report 'nnkiboze "Can't select group %s" group)
-         (nnheader-insert-file-contents nov-file)
+         (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+           (nnheader-insert-file-contents nov-file))
          (if (zerop (buffer-size))
              (nnheader-insert "211 0 0 0 %s\n" group)
            (goto-char (point-min))
   ;; Remove NOV lines of articles that are marked as read.
   (when (and (file-exists-p (nnkiboze-nov-file-name))
             nnkiboze-remove-read-articles)
-    (with-temp-file (nnkiboze-nov-file-name)
-      (let ((cur (current-buffer)))
-       (nnheader-insert-file-contents (nnkiboze-nov-file-name))
-       (goto-char (point-min))
-       (while (not (eobp))
-         (if (not (gnus-article-read-p (read cur)))
-             (forward-line 1)
-           (gnus-delete-line))))))
-  (setq nnkiboze-current-group nil))
+    (let ((coding-system-for-write nnkiboze-file-coding-system)
+         (output-coding-system nnkiboze-file-coding-system))
+      (with-temp-file (nnkiboze-nov-file-name)
+       (let ((cur (current-buffer)) 
+             (nnheader-file-coding-system nnkiboze-file-coding-system))
+         (nnheader-insert-file-contents (nnkiboze-nov-file-name))
+         (goto-char (point-min))
+         (while (not (eobp))
+           (if (not (gnus-article-read-p (read cur)))
+               (forward-line 1)
+             (gnus-delete-line))))))
+    (setq nnkiboze-current-group nil)))
 
 (deffoo nnkiboze-open-server (server &optional defs)
   (unless (assq 'nnkiboze-regexp defs)
 (deffoo nnkiboze-request-delete-group (group &optional force server)
   (nnkiboze-possibly-change-group group)
   (when force
-     (let ((files (nconc
-                  (nnkiboze-score-file group)
-                  (list (nnkiboze-nov-file-name)
-                        (nnkiboze-nov-file-name ".newsrc")))))
-       (while files
-        (and (file-exists-p (car files))
-             (file-writable-p (car files))
-             (delete-file (car files)))
-        (setq files (cdr files)))))
+    (let ((files (nconc
+                 (nnkiboze-score-file group)
+                 (list (nnkiboze-nov-file-name)
+                       (nnkiboze-nov-file-name ".newsrc")))))
+      (while files
+       (and (file-exists-p (car files))
+            (file-writable-p (car files))
+            (delete-file (car files)))
+       (setq files (cdr files)))))
   (setq nnkiboze-current-group nil)
   t)
 
 Finds out what articles are to be part of the nnkiboze groups."
   (interactive)
   (let ((nnmail-spool-file nil)
+       (mail-sources nil)
        (gnus-use-dribble-file nil)
        (gnus-read-active-file t)
        (gnus-expert-user t))
@@ -198,7 +214,10 @@ Finds out what articles are to be part of the nnkiboze groups."
       (when (string-match "nnkiboze" (gnus-info-group info))
        ;; For each kiboze group, we call this function to generate
        ;; it.
-       (nnkiboze-generate-group (gnus-info-group info))))))
+       (nnkiboze-generate-group (gnus-info-group info) t))))
+  (save-excursion
+    (set-buffer gnus-group-buffer)
+    (gnus-group-list-groups)))
 
 (defun nnkiboze-score-file (group)
   (list (expand-file-name
@@ -207,7 +226,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                  (concat (nnkiboze-prefixed-name nnkiboze-current-group)
                          "." gnus-score-file-suffix))))))
 
-(defun nnkiboze-generate-group (group)
+(defun nnkiboze-generate-group (group &optional inhibit-list-groups)
   (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
         (newsrc-file (concat nnkiboze-directory
                               (nnheader-translate-file-chars
@@ -221,6 +240,9 @@ Finds out what articles are to be part of the nnkiboze groups."
         (gnus-expert-user t)
         (gnus-large-newsgroup nil)
         (gnus-score-find-score-files-function 'nnkiboze-score-file)
+        ;; Use only nnkiboze-score-file!
+        (gnus-score-use-all-scores nil)
+        (gnus-use-scoring t)
         (gnus-verbose (min gnus-verbose 3))
         gnus-select-group-hook gnus-summary-prepare-hook
         gnus-thread-sort-functions gnus-show-threads
@@ -230,101 +252,104 @@ Finds out what articles are to be part of the nnkiboze groups."
     ;; Load the kiboze newsrc file for this group.
     (when (file-exists-p newsrc-file)
       (load newsrc-file))
-    (with-temp-file nov-file
-      (when (file-exists-p nov-file)
-       (nnheader-insert-file-contents nov-file))
-      (setq nov-buffer (current-buffer))
-      ;; Go through the active hashtb and add new all groups that match the
-      ;; kiboze regexp.
-      (mapatoms
-       (lambda (group)
-        (and (string-match nnkiboze-regexp
-                           (setq gname (symbol-name group))) ; Match
-             (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
-             (numberp (car (symbol-value group))) ; It is active
-             (or (> nnkiboze-level 7)
-                 (and (setq glevel (nth 1 (nth 2 (gnus-gethash
-                                                  gname gnus-newsrc-hashtb))))
-                      (>= nnkiboze-level glevel)))
-             (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
-             (push (cons gname (1- (car (symbol-value group))))
-                   nnkiboze-newsrc)))
-       gnus-active-hashtb)
-      ;; `newsrc' is set to the list of groups that possibly are
-      ;; component groups to this kiboze group.  This list has elements
-      ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
-      ;; number that has been kibozed in GROUP in this kiboze group.
-      (setq newsrc nnkiboze-newsrc)
-      (while newsrc
-       (if (not (setq active (gnus-gethash
-                              (caar newsrc) gnus-active-hashtb)))
-           ;; This group isn't active after all, so we remove it from
-           ;; the list of component groups.
-           (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
-         (setq lowest (cdar newsrc))
-         ;; Ok, we have a valid component group, so we jump to it.
-         (switch-to-buffer gnus-group-buffer)
-         (gnus-group-jump-to-group (caar newsrc))
-         (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
-         (setq ginfo (gnus-get-info (gnus-group-group-name))
-               orig-info (gnus-copy-sequence ginfo)
-               num-unread (car (gnus-gethash (caar newsrc)
-                                             gnus-newsrc-hashtb)))
-         (unwind-protect
-             (progn
-               ;; We set all list of article marks to nil.  Since we operate
-               ;; on copies of the real lists, we can destroy anything we
-               ;; want here.
-               (when (nth 3 ginfo)
-                 (setcar (nthcdr 3 ginfo) nil))
-               ;; We set the list of read articles to be what we expect for
-               ;; this kiboze group -- either nil or `(1 . LOWEST)'.
-               (when ginfo
-                 (setcar (nthcdr 2 ginfo)
-                         (and (not (= lowest 1)) (cons 1 lowest))))
-               (when (and (or (not ginfo)
-                              (> (length (gnus-list-of-unread-articles
-                                          (car ginfo)))
-                                 0))
-                          (progn
-                            (ignore-errors
-                              (gnus-group-select-group nil))
-                            (eq major-mode 'gnus-summary-mode)))
-                 ;; We are now in the group where we want to be.
-                 (setq method (gnus-find-method-for-group
-                               gnus-newsgroup-name))
-                 (when (eq method gnus-select-method)
-                   (setq method nil))
-                 ;; We go through the list of scored articles.
-                 (while gnus-newsgroup-scored
-                   (when (> (caar gnus-newsgroup-scored) lowest)
-                     ;; If it has a good score, then we enter this article
-                     ;; into the kiboze group.
-                     (nnkiboze-enter-nov
-                      nov-buffer
-                      (gnus-summary-article-header
-                       (caar gnus-newsgroup-scored))
-                      gnus-newsgroup-name))
-                   (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
-                 ;; That's it.  We exit this group.
-                 (when (eq major-mode 'gnus-summary-mode)
-                   (kill-buffer (current-buffer)))))
-           ;; Restore the proper info.
-           (when ginfo
-             (setcdr ginfo (cdr orig-info)))
-           (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
-                   num-unread)))
-       (setcdr (car newsrc) (car active))
-       (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
-       (setq newsrc (cdr newsrc))))
+    (let ((coding-system-for-write nnkiboze-file-coding-system)
+         (output-coding-system nnkiboze-file-coding-system))
+      (with-temp-file nov-file
+       (when (file-exists-p nov-file)
+         (nnheader-insert-file-contents nov-file))
+       (setq nov-buffer (current-buffer))
+       ;; Go through the active hashtb and add new all groups that match the
+       ;; kiboze regexp.
+       (mapatoms
+        (lambda (group)
+          (and (string-match nnkiboze-regexp
+                             (setq gname (symbol-name group))) ; Match
+               (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
+               (numberp (car (symbol-value group))) ; It is active
+               (or (> nnkiboze-level 7)
+                   (and (setq glevel (nth 1 (nth 2 (gnus-gethash
+                                                    gname gnus-newsrc-hashtb))))
+                        (>= nnkiboze-level glevel)))
+               (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
+               (push (cons gname (1- (car (symbol-value group))))
+                     nnkiboze-newsrc)))
+        gnus-active-hashtb)
+       ;; `newsrc' is set to the list of groups that possibly are
+       ;; component groups to this kiboze group.  This list has elements
+       ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
+       ;; number that has been kibozed in GROUP in this kiboze group.
+       (setq newsrc nnkiboze-newsrc)
+       (while newsrc
+         (if (not (setq active (gnus-gethash
+                                (caar newsrc) gnus-active-hashtb)))
+             ;; This group isn't active after all, so we remove it from
+             ;; the list of component groups.
+             (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
+           (setq lowest (cdar newsrc))
+           ;; Ok, we have a valid component group, so we jump to it.
+           (switch-to-buffer gnus-group-buffer)
+           (gnus-group-jump-to-group (caar newsrc))
+           (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
+           (setq ginfo (gnus-get-info (gnus-group-group-name))
+                 orig-info (gnus-copy-sequence ginfo)
+                 num-unread (car (gnus-gethash (caar newsrc)
+                                               gnus-newsrc-hashtb)))
+           (unwind-protect
+               (progn
+                 ;; We set all list of article marks to nil.  Since we operate
+                 ;; on copies of the real lists, we can destroy anything we
+                 ;; want here.
+                 (when (nth 3 ginfo)
+                   (setcar (nthcdr 3 ginfo) nil))
+                 ;; We set the list of read articles to be what we expect for
+                 ;; this kiboze group -- either nil or `(1 . LOWEST)'.
+                 (when ginfo
+                   (setcar (nthcdr 2 ginfo)
+                           (and (not (= lowest 1)) (cons 1 lowest))))
+                 (when (and (or (not ginfo)
+                                (> (length (gnus-list-of-unread-articles
+                                            (car ginfo)))
+                                   0))
+                            (progn
+                              (ignore-errors
+                                (gnus-group-select-group nil))
+                              (eq major-mode 'gnus-summary-mode)))
+                   ;; We are now in the group where we want to be.
+                   (setq method (gnus-find-method-for-group
+                                 gnus-newsgroup-name))
+                   (when (eq method gnus-select-method)
+                     (setq method nil))
+                   ;; We go through the list of scored articles.
+                   (while gnus-newsgroup-scored
+                     (when (> (caar gnus-newsgroup-scored) lowest)
+                       ;; If it has a good score, then we enter this article
+                       ;; into the kiboze group.
+                       (nnkiboze-enter-nov
+                        nov-buffer
+                        (gnus-summary-article-header
+                         (caar gnus-newsgroup-scored))
+                        gnus-newsgroup-name))
+                     (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
+                   ;; That's it.  We exit this group.
+                   (when (eq major-mode 'gnus-summary-mode)
+                     (kill-buffer (current-buffer)))))
+             ;; Restore the proper info.
+             (when ginfo
+               (setcdr ginfo (cdr orig-info)))
+             (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
+                     num-unread)))
+         (setcdr (car newsrc) (car active))
+         (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
+         (setq newsrc (cdr newsrc)))))
     ;; We save the kiboze newsrc for this group.
     (with-temp-file newsrc-file
       (insert "(setq nnkiboze-newsrc '")
       (gnus-prin1 nnkiboze-newsrc)
       (insert ")\n")))
-  (save-excursion
-    (set-buffer gnus-group-buffer)
-    (gnus-group-list-groups))
+  (unless inhibit-list-groups
+    (save-excursion
+      (set-buffer gnus-group-buffer)
+      (gnus-group-list-groups)))
   t)
 
 (defun nnkiboze-enter-nov (buffer header group)
@@ -340,19 +365,22 @@ Finds out what articles are to be part of the nnkiboze groups."
            (forward-line 1))
        (setq article 1))
       (mail-header-set-number oheader article)
-      (nnheader-insert-nov oheader)
-      (search-backward "\t" nil t 2)
-      (if (re-search-forward " [^ ]+:[0-9]+" nil t)
-         (goto-char (match-beginning 0))
-       (forward-char 1))
-      ;; The first Xref has to be the group this article
-      ;; really came for - this is the article nnkiboze
-      ;; will request when it is asked for the article.
-      (insert " " group ":"
-             (int-to-string (mail-header-number header)) " ")
-      (while (re-search-forward " [^ ]+:[0-9]+" nil t)
-       (goto-char (1+ (match-beginning 0)))
-       (insert prefix)))))
+      (with-temp-buffer
+       (insert (or (mail-header-xref oheader) ""))
+       (goto-char (point-min))
+       (if (re-search-forward " [^ ]+:[0-9]+" nil t)
+           (goto-char (match-beginning 0))
+         (or (eobp) (forward-char 1)))
+       ;; The first Xref has to be the group this article
+       ;; really came for - this is the article nnkiboze
+       ;; will request when it is asked for the article.
+       (insert " " group ":"
+               (int-to-string (mail-header-number header)) " ")
+       (while (re-search-forward " [^ ]+:[0-9]+" nil t)
+         (goto-char (1+ (match-beginning 0)))
+         (insert prefix))
+       (mail-header-set-xref oheader (buffer-string)))
+      (nnheader-insert-nov oheader))))
 
 (defun nnkiboze-nov-file-name (&optional suffix)
   (concat (file-name-as-directory nnkiboze-directory)
index a226328..666cd70 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnlistserv.el --- retrieving articles via web mailing list archives
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnoo)
-(require 'nnweb)
+(eval-when-compile
+  (ignore-errors
+   (require 'nnweb))                   ; requires W3
+  (autoload 'url-insert-file-contents "nnweb"))
 
 (nnoo-declare nnlistserv
   nnweb)
   nnweb-type)
 
 (defvoo nnlistserv-type-definition
-  '((kk
-     (article . nnlistserv-kk-wash-article)
-     (map . nnlistserv-kk-create-mapping)
-     (search . nnlistserv-kk-search)
-     (address . "http://www.itk.ntnu.no/ansatte/Andresen_Trond/kk-f/%s/")
-     (pages "fra160396" "fra160796" "fra061196" "fra160197"
-           "fra090997" "fra040797" "fra130397" "nye")
-     (index . "date.html")
-     (identifier . nnlistserv-kk-identity)))
+    '((kk
+       (article . nnlistserv-kk-wash-article)
+       (map . nnlistserv-kk-create-mapping)
+       (search . nnlistserv-kk-search)
+       (address . "http://www.itk.ntnu.no/ansatte/Andresen_Trond/kk-f/%s/")
+       (pages "fra160396" "fra160796" "fra061196" "fra160197"
+             "fra090997" "fra040797" "fra130397" "nye")
+       (index . "date.html")
+       (identifier . nnlistserv-kk-identity)))
   "Type-definition alist."
   nnweb-type-definition)
 
                 nil 0 0 url))
               map)
              (nnweb-set-hashtb (cadar map) (car map))
-             (nnheader-message 5 "%s %s %s" (cdr active) (point) pages)
-             ))))
+             (nnheader-message 5 "%s %s %s" (cdr active) (point) pages)))))
       ;; Return the articles in the right order.
       (setq nnweb-articles
            (sort (nconc nnweb-articles map) 'car-less-than-car)))))
index baa18b1..910c667 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnmail.el --- mail support functions for the Gnus mail backends
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
@@ -26,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'message)
 (require 'custom)
@@ -173,8 +175,22 @@ Eg.:
   :type '(choice (const :tag "nnmail-expiry-wait" nil)
                 (function :format "%v" nnmail-)))
 
+(defcustom nnmail-expiry-target 'delete
+  "*Variable that says where expired messages should end up.
+The default value is `delete' (which says to delete the messages),
+but it can also be a string or a function.  If it is a string, expired
+messages end up in that group.  If it is a function, the function is
+called in a buffer narrowed to the message in question.  The function
+receives one argument, the name of the group the message comes from.
+The return value should be `delete' or a group name (a string)."
+    :group 'nnmail-expire
+    :type '(choice (const delete)
+                  (function :format "%v" nnmail-)
+                  string))
+
 (defcustom nnmail-cache-accepted-message-ids nil
-  "If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache."
+  "If non-nil, put Message-IDs of Gcc'd articles into the duplicate cache.
+If non-nil, also update the cache when copy or move articles."
   :group 'nnmail
   :type 'boolean)
 
@@ -190,6 +206,12 @@ This variable is obsolete; `mail-sources' should be used instead."
   :group 'nnmail-procmail
   :type 'boolean)
 
+(defcustom nnmail-scan-directory-mail-source-once nil
+  "*If non-nil, scan all incoming procmail sorted mails once.
+It scans low-level sorted spools even when not required."
+  :group 'nnmail-procmail
+  :type 'boolean)
+
 (defcustom nnmail-delete-file-function 'delete-file
   "Function called to delete files in some mail backends."
   :group 'nnmail-files
@@ -213,7 +235,7 @@ links, you could set this variable to `copy-file' instead."
       '(nnheader-ms-strip-cr)
     nil)
   "*Hook that will be run after the incoming mail has been transferred.
-The incoming mail is moved from `nnmail-spool-file' (which normally is
+The incoming mail is moved from the specified spool file (which normally is
 something like \"/usr/spool/mail/$user\") to the user's home
 directory.  This hook is called after the incoming mail box has been
 emptied, and can be used to call any mail box programs you have
@@ -222,9 +244,9 @@ running (\"xwatch\", etc.)
 Eg.
 
 \(add-hook 'nnmail-read-incoming-hook
-          (lambda ()
-            (start-process \"mailsend\" nil
-                           \"/local/bin/mailsend\" \"read\" \"mbox\")))
+          (lambda ()
+            (call-process \"/local/bin/mailsend\" nil nil nil
+                          \"read\" nnmail-spool-file)))
 
 If you have xwatch running, this will alert it that mail has been
 read.
@@ -445,7 +467,8 @@ parameter.  It should return nil, `warn' or `delete'."
 (defvar nnmail-file-coding-system 'raw-text
   "Coding system used in nnmail.")
 
-(defvar nnmail-incoming-coding-system 'raw-text
+(defvar nnmail-incoming-coding-system
+  nnheader-text-coding-system
   "Coding system used in reading inbox")
 
 (defvar nnmail-pathname-coding-system 'binary
@@ -456,9 +479,10 @@ parameter.  It should return nil, `warn' or `delete'."
   (set-buffer nntp-server-buffer)
   (delete-region (point-min) (point-max))
   (let ((format-alist nil)
-        (after-insert-file-functions nil))
+       (after-insert-file-functions nil))
     (condition-case ()
        (let ((auto-mode-alist (nnheader-auto-mode-alist))
+             (file-name-coding-system nnmail-pathname-coding-system)
              (pathname-coding-system nnmail-pathname-coding-system))
          (insert-file-contents-as-coding-system
           nnmail-file-coding-system file)
@@ -474,32 +498,50 @@ parameter.  It should return nil, `warn' or `delete'."
                  ?. ?_))
      (setq group (nnheader-translate-file-chars group))
      ;; If this directory exists, we use it directly.
-     (if (or nnmail-use-long-file-names
-            (file-directory-p (concat dir group)))
-        (concat dir group "/")
-       ;; If not, we translate dots into slashes.
-       (concat dir
-              (encode-coding-string
-               (nnheader-replace-chars-in-string group ?. ?/)
-               nnmail-pathname-coding-system)
-              "/")))
+     (file-name-as-directory
+      (if (or nnmail-use-long-file-names
+             (file-directory-p (concat dir group)))
+         (expand-file-name group dir)
+       ;; If not, we translate dots into slashes.
+       (expand-file-name
+        (encode-coding-string
+         (nnheader-replace-chars-in-string group ?. ?/)
+         nnmail-pathname-coding-system)
+        dir))))
    (or file "")))
 
 (defun nnmail-get-active ()
   "Returns an assoc of group names and active ranges.
 nn*-request-list should have been called before calling this function."
-  (let (group-assoc)
-    ;; Go through all groups from the active list.
-    (save-excursion
-      (set-buffer nntp-server-buffer)
-      (goto-char (point-min))
-      (while (re-search-forward
-             "^\\([^ \t]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)" nil t)
-       ;; We create an alist with `(GROUP (LOW . HIGH))' elements.
-       (push (list (match-string 1)
-                   (cons (string-to-int (match-string 3))
-                         (string-to-int (match-string 2))))
-             group-assoc)))
+  ;; Go through all groups from the active list.
+  (save-excursion
+    (set-buffer nntp-server-buffer)
+    (nnmail-parse-active)))
+
+(defun nnmail-parse-active ()
+  "Parse the active file in the current buffer and return an alist."
+  (goto-char (point-min))
+  (unless (re-search-forward "[\\\"]" nil t)
+    (goto-char (point-max))
+    (while (re-search-backward "[][';?()#]" nil t)
+      (insert ?\\)))
+  (goto-char (point-min))
+  (let ((buffer (current-buffer))
+       group-assoc group max min)
+    (while (not (eobp))
+      (condition-case err
+         (progn
+           (narrow-to-region (point) (gnus-point-at-eol))
+           (setq group (read buffer))
+           (unless (stringp group)
+             (setq group (symbol-name group)))
+           (if (and (numberp (setq max (read nntp-server-buffer)))
+                    (numberp (setq min (read nntp-server-buffer))))
+               (push (list group (cons min max))
+                     group-assoc)))
+       (error nil))
+      (widen)
+      (forward-line 1))
     group-assoc))
 
 (defvar nnmail-active-file-coding-system 'raw-text
@@ -518,8 +560,11 @@ nn*-request-list should have been called before calling this function."
   (erase-buffer)
   (let (group)
     (while (setq group (pop alist))
-      (insert (format "%s %d %d y\n" (car group) (cdadr group)
-                     (caadr group))))))
+      (insert (format "%S %d %d y\n" (intern (car group)) (cdadr group)
+                     (caadr group))))
+    (goto-char (point-max))
+    (while (search-backward "\\." nil t)
+      (delete-char 1))))
 
 (defun nnmail-get-split-group (file source)
   "Find out whether this FILE is to be split into GROUP only.
@@ -934,7 +979,7 @@ FUNC will be called with the group name to determine the article number."
                           '("bogus"))
                     (error
                      (nnheader-message 5
-                      "Error in `nnmail-split-methods'; using `bogus' mail group")
+                                       "Error in `nnmail-split-methods'; using `bogus' mail group")
                      (sit-for 1)
                      '("bogus")))))
              (setq split (gnus-remove-duplicates split))
@@ -1073,7 +1118,10 @@ Return the number of characters in the body."
     (goto-char (point-min))
     (when (re-search-forward "^References:" nil t)
       (beginning-of-line)
-      (insert "X-Gnus-Broken-Eudora-"))))
+      (insert "X-Gnus-Broken-Eudora-"))
+    (goto-char (point-min))
+    (when (re-search-forward "^In-Reply-To:[^\n]+\\(\n[ \t]+\\)" nil t)
+      (replace-match "" t t nil 1))))
 
 (custom-add-option 'nnmail-prepare-incoming-header-hook
                   'nnmail-fix-eudora-headers)
@@ -1316,14 +1364,84 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (setq nnmail-cache-buffer nil)
       (kill-buffer (current-buffer)))))
 
+;; Compiler directives.
+(defvar group)
+(defvar group-art-list)
+(defvar group-art)
 (defun nnmail-cache-insert (id)
   (when nnmail-treat-duplicates
-    (unless (gnus-buffer-live-p nnmail-cache-buffer)
-      (nnmail-cache-open))
+    ;; Store some information about the group this message is written
+    ;; to.  This function might have been called from various places.
+    ;; Sometimes, a function up in the calling sequence has an
+    ;; argument GROUP which is bound to a string, the group name.  At
+    ;; other times, there is a function up in the calling sequence
+    ;; which has an argument GROUP-ART which is a list of pairs, and
+    ;; the car of a pair is a group name.  Should we check that the
+    ;; length of the list is equal to 1? -- kai
+    (let ((g nil))
+      (cond ((and (boundp 'group) group)
+             (setq g group))
+            ((and (boundp 'group-art-list) group-art-list
+                  (listp group-art-list))
+             (setq g (caar group-art-list)))
+            ((and (boundp 'group-art) group-art (listp group-art))
+             (setq g (caar group-art)))
+            (t (setq g "")))
+      (unless (gnus-buffer-live-p nnmail-cache-buffer)
+        (nnmail-cache-open))
+      (save-excursion
+        (set-buffer nnmail-cache-buffer)
+        (goto-char (point-max))
+        (if (and g (not (string= "" g))
+                 (gnus-methods-equal-p gnus-command-method
+                                       (nnmail-cache-primary-mail-backend)))
+            (insert id "\t" g "\n")
+          (insert id "\n"))))))
+
+(defun nnmail-cache-primary-mail-backend ()
+  (let ((be-list (cons gnus-select-method gnus-secondary-select-methods))
+        (be nil)
+        (res nil))
+    (while (and (null res) be-list)
+      (setq be (car be-list))
+      (setq be-list (cdr be-list))
+      (when (and (gnus-method-option-p be 'respool)
+                 (eval (intern (format "%s-get-new-mail" (car be)))))
+        (setq res be)))
+    res))
+
+;; Fetch the group name corresponding to the message id stored in the
+;; cache.
+(defun nnmail-cache-fetch-group (id)
+  (when (and nnmail-treat-duplicates nnmail-cache-buffer)
     (save-excursion
       (set-buffer nnmail-cache-buffer)
       (goto-char (point-max))
-      (insert id "\n"))))
+      (when (search-backward id nil t)
+        (beginning-of-line)
+        (skip-chars-forward "^\n\r\t")
+        (unless (eolp)
+          (forward-char 1)
+          (buffer-substring (point)
+                            (progn (end-of-line) (point))))))))
+
+;; Function for nnmail-split-fancy: look up all references in the
+;; cache and if a match is found, return that group.
+(defun nnmail-split-fancy-with-parent ()
+  (let* ((refstr (or (message-fetch-field "references")
+                     (message-fetch-field "in-reply-to")))
+         (references nil)
+         (res nil))
+    (when refstr
+      (setq references (nreverse (gnus-split-references refstr)))
+      (unless (gnus-buffer-live-p nnmail-cache-buffer)
+        (nnmail-cache-open))
+      (mapcar (lambda (x)
+                (setq res (or (nnmail-cache-fetch-group x) res))
+                (when (string= "drafts" res)
+                  (setq res nil)))
+              references)
+      res)))
 
 (defun nnmail-cache-id-exists-p (id)
   (when nnmail-treat-duplicates
@@ -1400,21 +1518,14 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
   (let* ((sources (or mail-sources
                      (if (listp nnmail-spool-file) nnmail-spool-file
                        (list nnmail-spool-file))))
+        fetching-sources
         (group-in group)
         (i 0)
         (new 0)
         (total 0)
         incoming incomings source)
     (when (and (nnmail-get-value "%s-get-new-mail" method)
-              nnmail-spool-file)
-      ;; We first activate all the groups.
-      (nnmail-activate method)
-      ;; Allow the user to hook.
-      (run-hooks 'nnmail-pre-get-new-mail-hook)
-      ;; Open the message-id cache.
-      (nnmail-cache-open)
-      ;; The we go through all the existing mail source specification
-      ;; and fetch the mail from each.
+              sources)
       (while (setq source (pop sources))
        ;; Be compatible with old values.
        (cond
@@ -1432,6 +1543,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
          nil))
        ;; Hack to only fetch the contents of a single group's spool file.
        (when (and (eq (car source) 'directory)
+                  (null nnmail-scan-directory-mail-source-once)
                   group)
          (mail-source-bind (directory source)
            (setq source (append source
@@ -1446,21 +1558,31 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
        (when nnmail-fetched-sources
          (if (member source nnmail-fetched-sources)
              (setq source nil)
-           (push source nnmail-fetched-sources)))
-       (when source
-         (nnheader-message 4 "%s: Reading incoming mail from %s..."
-                           method (car source))
-         (when (setq new
-                     (mail-source-fetch
-                      source
-                      `(lambda (file orig-file)
-                         (nnmail-split-incoming
-                          file ',(intern (format "%s-save-mail" method))
-                          ',spool-func
-                          (nnmail-get-split-group orig-file source)
-                          ',(intern (format "%s-active-number" method))))))
-           (incf total new)
-           (incf i))))
+           (push source nnmail-fetched-sources)
+           (push source fetching-sources)))))
+    (when fetching-sources
+      ;; We first activate all the groups.
+      (nnmail-activate method)
+      ;; Allow the user to hook.
+      (run-hooks 'nnmail-pre-get-new-mail-hook)
+      ;; Open the message-id cache.
+      (nnmail-cache-open)
+      ;; The we go through all the existing mail source specification
+      ;; and fetch the mail from each.
+      (while (setq source (pop fetching-sources))
+       (nnheader-message 4 "%s: Reading incoming mail from %s..."
+                         method (car source))
+       (when (setq new
+                   (mail-source-fetch
+                    source
+                    `(lambda (file orig-file)
+                       (nnmail-split-incoming
+                        file ',(intern (format "%s-save-mail" method))
+                        ',spool-func
+                        (nnmail-get-split-group orig-file source)
+                        ',(intern (format "%s-active-number" method))))))
+         (incf total new)
+         (incf i)))
       ;; If we did indeed read any incoming spools, we save all info.
       (if (zerop total)
          (nnheader-message 4 "%s: Reading incoming mail (no new mail)...done"
@@ -1501,6 +1623,12 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
             ;; Compare the time with the current time.
             (ignore-errors (time-less-p days (time-since time))))))))
 
+(defun nnmail-expiry-target-group (target group)
+  (when (nnheader-functionp target)
+    (setq target (funcall target group)))
+  (unless (eq target 'delete)
+    (gnus-request-accept-article target nil nil t)))
+
 (defun nnmail-check-syntax ()
   "Check (and modify) the syntax of the message in the current buffer."
   (save-restriction
@@ -1511,8 +1639,8 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 
 (defun nnmail-write-region (start end filename &optional append visit lockname)
   "Do a `write-region', and then set the file modes."
-  (let ((pathname-coding-system nnmail-pathname-coding-system))
-    
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
     (write-region-as-coding-system
      nnmail-file-coding-system start end filename append visit lockname)
     (set-file-modes filename nnmail-default-file-modes)))
@@ -1582,6 +1710,8 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
   (unless nnmail-split-history
     (error "No current split history"))
   (with-output-to-temp-buffer "*nnmail split history*"
+    (with-current-buffer standard-output
+      (fundamental-mode))              ; for Emacs 20.4+
     (let ((history nnmail-split-history)
          elem)
       (while (setq elem (pop history))
index 2dd8311..3e502b8 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnmbox.el --- mail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -26,6 +28,7 @@
 
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
+
 (require 'nnheader)
 (require 'message)
 (require 'nnmail)
 (defvoo nnmbox-group-alist nil)
 (defvoo nnmbox-active-timestamp nil)
 
-(defvoo nnmbox-file-coding-system
-    (if (memq system-type '(windows-nt ms-dos ms-windows))
-       'raw-text-dos 'raw-text))
+(defvoo nnmbox-file-coding-system 'binary)
 (defvoo nnmbox-file-coding-system-for-write nil)
-(defvoo nnmbox-active-file-coding-system nnmbox-file-coding-system)
+(defvoo nnmbox-active-file-coding-system 'binary)
 (defvoo nnmbox-active-file-coding-system-for-write nil)
 
 \f
   (nnheader-report 'nnmbox "LIST NEWSGROUPS is not implemented."))
 
 (deffoo nnmbox-request-expire-articles
-  (articles newsgroup &optional server force)
+    (articles newsgroup &optional server force)
   (nnmbox-possibly-change-newsgroup newsgroup server)
   (let* ((is-old t)
         rest)
       (nconc rest articles))))
 
 (deffoo nnmbox-request-move-article
-  (article group server accept-form &optional last)
+    (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnmbox move*"))
        result)
     (and
 (defun nnmbox-create-mbox ()
   (when (not (file-exists-p nnmbox-mbox-file))
     (let ((nnmail-file-coding-system
-          nnmbox-file-coding-system-for-write))
+          (or nnmbox-file-coding-system-for-write
+              nnmbox-file-coding-system)))
       (nnmail-write-region 1 1 nnmbox-mbox-file t 'nomesg))))
 
 (defun nnmbox-read-mbox ()
          (when (and (re-search-backward
                      (format "^X-Gnus-Newsgroup: %s:\\([0-9]+\\) "
                              (caar alist)) nil t)
-                    (>= (setq number
-                              (string-to-number
-                               (buffer-substring
-                                (match-beginning 1) (match-end 1))))
-                        (cdadar alist)))
-           (setcdr (cadar alist) (1+ number)))
+                    (> (setq number
+                             (string-to-number
+                              (buffer-substring
+                               (match-beginning 1) (match-end 1))))
+                       (cdadar alist)))
+           (setcdr (cadar alist) number))
          (setq alist (cdr alist)))
 
        (goto-char (point-min))
        (while (re-search-forward delim nil t)
          (setq start (match-beginning 0))
-         (when (not (search-forward "\nX-Gnus-Newsgroup: "
-                                    (save-excursion
-                                      (setq end
-                                            (or
-                                             (and
-                                              (re-search-forward delim nil t)
-                                              (match-beginning 0))
-                                             (point-max))))
-                                    t))
+         (unless (search-forward
+                  "\nX-Gnus-Newsgroup: "
+                  (save-excursion
+                    (setq end
+                          (or
+                           (and
+                            ;; skip to end of headers first, since mail
+                            ;; which has been respooled has additional
+                            ;; "From nobody" lines.
+                            (search-forward "\n\n" nil t)
+                            (re-search-forward delim nil t)
+                            (match-beginning 0))
+                           (point-max))))
+                  t)
            (save-excursion
              (save-restriction
                (narrow-to-region start end)
index 37415e5..7c6760d 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnmh.el --- mhspool access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -32,6 +34,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'gnus-start)
   "*Hook run narrowed to an article before saving.")
 
 (defvoo nnmh-be-safe nil
-  "*If non-nil, nnmh will check all articles to make sure whether they are new or not.")
+  "*If non-nil, nnmh will check all articles to make sure whether they are new or not.
+Go through the .nnmh-articles file and compare with the actual
+articles in this folder.  The articles that are \"new\" will be marked
+as unread by Gnus.")
 
 \f
 
 
 (defvoo nnmh-status-string "")
 (defvoo nnmh-group-alist nil)
-(defvoo nnmh-allow-delete-final nil)
+;; Don't even think about setting this variable.  It does not exist.
+;; Forget about it.  Uh-huh.  Nope.  Nobody here.  It's only bound
+;; dynamically by certain functions in nndraft.
+(defvar nnmh-allow-delete-final nil)
 
 \f
 
@@ -78,7 +88,8 @@
           (large (and (numberp nnmail-large-newsgroup)
                       (> number nnmail-large-newsgroup)))
           (count 0)
-          (pathname-coding-system 'binary)
+          (file-name-coding-system nnmail-pathname-coding-system)
+          (pathname-coding-system nnmail-pathname-coding-system)
           beg article)
       (nnmh-possibly-change-directory newsgroup server)
       ;; We don't support fetching by Message-ID.
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nnmh: Receiving headers... %d%%"
-                       (/ (* count 100) number))))
+                                (/ (* count 100) number))))
 
        (when large
          (nnheader-message 5 "nnmh: Receiving headers...done"))
           (large (and (numberp nnmail-large-newsgroup)
                       (> number nnmail-large-newsgroup)))
           (count 0)
+          (file-name-coding-system 'binary)
           (pathname-coding-system 'binary)
           (case-fold-search t)
           ;;beg
   (let ((file (if (stringp id)
                  nil
                (concat nnmh-current-directory (int-to-string id))))
-       (pathname-coding-system 'binary)
+       (file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system)
        (nntp-server-buffer (or buffer nntp-server-buffer)))
     (and (stringp file)
         (file-exists-p file)
   (nnheader-init-server-buffer)
   (nnmh-possibly-change-directory group server)
   (let ((pathname (nnmail-group-pathname group nnmh-directory))
-       (pathname-coding-system 'binary)
+       (file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system)
        dir)
     (cond
      ((not (file-directory-p pathname))
               (mapcar (lambda (name) (string-to-int name))
                       (directory-files pathname nil "^[0-9]+$" t))
               '<))
-         (cond
-          (dir
-           (setq nnmh-group-alist
-                 (delq (assoc group nnmh-group-alist) nnmh-group-alist))
-           (push (list group (cons (car dir) (car (last dir))))
-                 nnmh-group-alist)
-           (nnheader-report 'nnmh "Selected group %s" group)
-           (nnheader-insert
-            "211 %d %d %d %s\n" (length dir) (car dir)
-            (car (last dir)) group))
-          (t
-           (nnheader-report 'nnmh "Empty group %s" group)
-           (nnheader-insert (format "211 0 1 0 %s\n" group))))))))))
+       (cond
+        (dir
+         (setq nnmh-group-alist
+               (delq (assoc group nnmh-group-alist) nnmh-group-alist))
+         (push (list group (cons (car dir) (car (last dir))))
+               nnmh-group-alist)
+         (nnheader-report 'nnmh "Selected group %s" group)
+         (nnheader-insert
+          "211 %d %d %d %s\n" (length dir) (car dir)
+          (car (last dir)) group))
+        (t
+         (nnheader-report 'nnmh "Empty group %s" group)
+         (nnheader-insert (format "211 0 1 0 %s\n" group))))))))))
 
 (deffoo nnmh-request-scan (&optional group server)
   (nnmail-get-new-mail 'nnmh nil nnmh-directory group))
 (deffoo nnmh-request-list (&optional server dir)
   (nnheader-insert "")
   (nnmh-possibly-change-directory nil server)
-  (let ((pathname-coding-system 'binary)
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system)
        (nnmh-toplev
         (file-truename (or dir (file-name-as-directory nnmh-directory)))))
     (nnmh-request-list-1 nnmh-toplev))
   t)
 
 (deffoo nnmh-request-move-article
-  (article group server accept-form &optional last)
+    (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnmh move*"))
        result)
     (and
     (nnmh-open-server server))
   (when newsgroup
     (let ((pathname (nnmail-group-pathname newsgroup nnmh-directory))
-         (pathname-coding-system 'binary))
+         (file-name-coding-system nnmail-pathname-coding-system)
+         (pathname-coding-system nnmail-pathname-coding-system))
       (if (file-directory-p pathname)
          (setq nnmh-current-directory pathname)
        (error "No such newsgroup: %s" newsgroup)))))
   "Compute the next article number in GROUP."
   (let ((active (cadr (assoc group nnmh-group-alist)))
        (dir (nnmail-group-pathname group nnmh-directory))
-       (pathname-coding-system 'binary)
+       (file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system)
        file)
     (unless active
       ;; The group wasn't known to nnmh, so we just create an active
index 23b1401..6f1bd6b 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnml.el --- mail spool access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -31,6 +32,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'nnoo)
   "Spool directory for the nnml mail backend.")
 
 (defvoo nnml-active-file
-  (concat (file-name-as-directory nnml-directory) "active")
+    (expand-file-name "active" nnml-directory)
   "Mail active file.")
 
 (defvoo nnml-newsgroups-file
-  (concat (file-name-as-directory nnml-directory) "newsgroups")
+    (expand-file-name "newsgroups" nnml-directory)
   "Mail newsgroups description file.")
 
 (defvoo nnml-get-new-mail t
@@ -102,7 +105,8 @@ all.  This may very well take some time.")
       (let ((file nil)
            (number (length sequence))
            (count 0)
-           (pathname-coding-system 'binary)
+           (file-name-coding-system nnmail-pathname-coding-system)
+           (pathname-coding-system nnmail-pathname-coding-system)
            beg article)
        (if (stringp (car sequence))
            'headers
@@ -163,7 +167,8 @@ all.  This may very well take some time.")
 (deffoo nnml-request-article (id &optional group server buffer)
   (nnml-possibly-change-directory group server)
   (let* ((nntp-server-buffer (or buffer nntp-server-buffer))
-        (pathname-coding-system 'binary)
+        (file-name-coding-system nnmail-pathname-coding-system)
+        (pathname-coding-system nnmail-pathname-coding-system)
         path gpath group-num)
     (if (stringp id)
        (when (and (setq group-num (nnml-find-group-number id))
@@ -194,7 +199,8 @@ all.  This may very well take some time.")
            (string-to-int (file-name-nondirectory path)))))))
 
 (deffoo nnml-request-group (group &optional server dont-check)
-  (let ((pathname-coding-system 'binary))
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (pathname-coding-system nnmail-pathname-coding-system))
     (cond
      ((not (nnml-possibly-change-directory group server))
       (nnheader-report 'nnml "Invalid group (no such directory)"))
@@ -252,7 +258,8 @@ all.  This may very well take some time.")
 (deffoo nnml-request-list (&optional server)
   (save-excursion
     (let ((nnmail-file-coding-system nnmail-active-file-coding-system)
-         (pathname-coding-system 'binary))
+         (file-name-coding-system nnmail-pathname-coding-system)
+         (pathname-coding-system nnmail-pathname-coding-system))
       (nnmail-find-file nnml-active-file))
     (setq nnml-group-alist (nnmail-get-active))
     t))
@@ -285,8 +292,16 @@ all.  This may very well take some time.")
                         (nnmail-expired-article-p group mod-time force
                                                   nnml-inhibit-expiry)))
              (progn
+               ;; Allow a special target group.
+               (unless (eq nnmail-expiry-target 'delete)
+                 (with-temp-buffer
+                   (nnml-request-article number group server
+                                         (current-buffer))
+                   (let ((nnml-current-directory nil))
+                     (nnmail-expiry-target-group
+                      nnmail-expiry-target group))))
                (nnheader-message 5 "Deleting article %s in %s"
-                                 article group)
+                                 number group)
                (condition-case ()
                    (funcall nnmail-delete-file-function article)
                  (file-error
@@ -304,7 +319,7 @@ all.  This may very well take some time.")
     (nconc rest articles)))
 
 (deffoo nnml-request-move-article
-  (article group server accept-form &optional last)
+    (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnml move*"))
        result)
     (nnml-possibly-change-directory group server)
@@ -312,12 +327,15 @@ all.  This may very well take some time.")
     (and
      (nnml-deletable-article-p group article)
      (nnml-request-article article group server)
-     (save-excursion
-       (set-buffer buf)
-       (insert-buffer-substring nntp-server-buffer)
-       (setq result (eval accept-form))
-       (kill-buffer (current-buffer))
-       result)
+     (let (nnml-current-directory 
+          nnml-current-group 
+          nnml-article-file-alist)
+       (save-excursion
+        (set-buffer buf)
+        (insert-buffer-substring nntp-server-buffer)
+        (setq result (eval accept-form))
+        (kill-buffer (current-buffer))
+        result))
      (progn
        (nnml-possibly-change-directory group server)
        (condition-case ()
@@ -369,8 +387,8 @@ all.  This may very well take some time.")
              (nnmail-write-region
               (point-min) (point-max)
               (or (nnml-article-to-file article)
-                  (concat nnml-current-directory
-                          (int-to-string article)))
+                  (expand-file-name (int-to-string article)
+                                    nnml-current-directory))
               nil (if (nnheader-be-verbose 5) nil 'nomesg))
              t)
        (setq headers (nnml-parse-head chars article))
@@ -474,7 +492,7 @@ all.  This may very well take some time.")
   (nnml-update-file-alist)
   (let (file)
     (if (setq file (cdr (assq article nnml-article-file-alist)))
-       (concat nnml-current-directory file)
+       (expand-file-name file nnml-current-directory)
       ;; Just to make sure nothing went wrong when reading over NFS --
       ;; check once more.
       (when (file-exists-p
@@ -515,8 +533,8 @@ all.  This may very well take some time.")
 
 (defun nnml-find-id (group id)
   (erase-buffer)
-  (let ((nov (concat (nnmail-group-pathname group nnml-directory)
-                    nnml-nov-file-name))
+  (let ((nov (expand-file-name nnml-nov-file-name
+                              (nnmail-group-pathname group nnml-directory)))
        number found)
     (when (file-exists-p nov)
       (nnheader-insert-file-contents nov)
@@ -536,7 +554,7 @@ all.  This may very well take some time.")
 (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old)
   (if (or gnus-nov-is-evil nnml-nov-is-evil)
       nil
-    (let ((nov (concat nnml-current-directory nnml-nov-file-name)))
+    (let ((nov (expand-file-name nnml-nov-file-name nnml-current-directory)))
       (when (file-exists-p nov)
        (save-excursion
          (set-buffer nntp-server-buffer)
@@ -558,7 +576,8 @@ all.  This may very well take some time.")
   (if (not group)
       t
     (let ((pathname (nnmail-group-pathname group nnml-directory))
-         (pathname-coding-system 'binary))
+         (file-name-coding-system nnmail-pathname-coding-system)
+         (pathname-coding-system nnmail-pathname-coding-system))
       (when (not (equal pathname nnml-current-directory))
        (setq nnml-current-directory pathname
              nnml-current-group group
@@ -632,8 +651,8 @@ all.  This may very well take some time.")
       (push (list group active) nnml-group-alist))
     (setcdr active (1+ (cdr active)))
     (while (file-exists-p
-           (concat (nnmail-group-pathname group nnml-directory)
-                   (int-to-string (cdr active))))
+           (expand-file-name (int-to-string (cdr active))
+                             (nnmail-group-pathname group nnml-directory)))
       (setcdr active (1+ (cdr active))))
     (cdr active)))
 
@@ -673,8 +692,9 @@ all.  This may very well take some time.")
        (save-excursion
          (set-buffer buffer)
          (set (make-local-variable 'nnml-nov-buffer-file-name)
-              (concat (nnmail-group-pathname group nnml-directory)
-                      nnml-nov-file-name))
+              (expand-file-name
+               nnml-nov-file-name
+               (nnmail-group-pathname group nnml-directory)))
          (erase-buffer)
          (when (file-exists-p nnml-nov-buffer-file-name)
            (nnheader-insert-file-contents nnml-nov-buffer-file-name)))
@@ -736,7 +756,7 @@ all.  This may very well take some time.")
        (unless no-active
          (nnmail-save-active nnml-group-alist nnml-active-file))))))
 
-(defvar files)
+(eval-when-compile (defvar files))
 (defun nnml-generate-active-info (dir)
   ;; Update the active info for this group.
   (let ((group (nnheader-file-to-group
index 44a0f83..dc2fa31 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -302,6 +304,20 @@ All functions will return nil and report an error."
                   (&rest args)
                 (nnheader-report ',backend ,(format "%s-%s not implemented"
                                                     backend function))))))))
+
+(defun nnoo-set (server &rest args)
+  (let ((parents (nnoo-parents (car server)))
+       (nnoo-parent-backend (car server)))
+    (while parents
+      (nnoo-change-server (caar parents)
+                         (cadr server)
+                         (cdar parents))
+      (pop parents)))
+  (nnoo-change-server (car server)
+                     (cadr server) (cddr server))
+  (while args
+    (set (pop args) (pop args))))
+
 (provide 'nnoo)
 
 ;;; nnoo.el ends here.
diff --git a/lisp/nnshimbun.el b/lisp/nnshimbun.el
new file mode 100644 (file)
index 0000000..f661ccc
--- /dev/null
@@ -0,0 +1,1494 @@
+;;; nnshimbun.el --- interfacing with web newspapers -*- coding: junet; -*-
+
+;; Authors: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+;;          Akihiro Arisawa    <ari@atesoft.advantest.co.jp>
+;; Keywords: news
+
+;;; Copyright:
+
+;; This file is a part of Semi-Gnus.
+
+;; 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; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Gnus backend to read newspapers on WEB.
+
+
+;;; Defintinos:
+
+(gnus-declare-backend "nnshimbun" 'address)
+
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+(eval-when-compile (require 'static))
+
+(require 'nnheader)
+(require 'nnmail)
+(require 'nnoo)
+(require 'gnus-bcklg)
+(eval-when-compile (ignore-errors (require 'nnweb)))
+;; Report failure to find w3 at load time if appropriate.
+(eval '(require 'nnweb))
+(require 'mcharset)
+
+
+(nnoo-declare nnshimbun)
+
+(defvar nnshimbun-check-interval 300)
+
+(defconst nnshimbun-mew-groups
+  '(("meadow-develop" "meadow-develop" nil t)
+    ("meadow-users-jp" "meadow-users-jp")
+    ("mule-win32" "mule-win32")
+    ("mew-win32" "mew-win32")
+    ("mew-dist" "mew-dist/3300" t)
+    ("mgp-users-jp" "mgp-users-jp/A" t t)))
+
+(defvar nnshimbun-type-definition
+  `(("asahi"
+     (url . "http://spin.asahi.com/")
+     (groups "national" "business" "politics" "international" "sports")
+     (coding-system  . ,(static-if (boundp 'MULE) '*sjis* 'shift_jis))
+     (generate-nov   . nnshimbun-generate-nov-for-each-group)
+     (get-headers    . nnshimbun-asahi-get-headers)
+     (index-url      . (format "%s%s/update/list.html" nnshimbun-url nnshimbun-current-group))
+     (from-address   . "webmaster@www.asahi.com")
+     (make-contents  . nnshimbun-make-text-or-html-contents)
+     (contents-start . "\n<!-- Start of kiji -->\n")
+     (contents-end   . "\n<!-- End of kiji -->\n"))
+    ("sponichi"
+     (url . "http://www.sponichi.co.jp/")
+     (groups "baseball" "soccer" "usa" "others" "society" "entertainment" "horseracing")
+     (coding-system  . ,(static-if (boundp 'MULE) '*sjis* 'shift_jis))
+     (generate-nov   . nnshimbun-generate-nov-for-each-group)
+     (get-headers    . nnshimbun-sponichi-get-headers)
+     (index-url      . (format "%s%s/index.html" nnshimbun-url nnshimbun-current-group))
+     (from-address   . "webmaster@www.sponichi.co.jp")
+     (make-contents  . nnshimbun-make-text-or-html-contents)
+     (contents-start . "\n<span class=\"text\">\e$B!!\e(B")
+     (contents-end   . "\n"))
+    ("cnet"
+     (url . "http://cnet.sphere.ne.jp/")
+     (groups "comp")
+     (coding-system  . ,(static-if (boundp 'MULE) '*sjis* 'shift_jis))
+     (generate-nov   . nnshimbun-generate-nov-for-each-group)
+     (get-headers    . nnshimbun-cnet-get-headers)
+     (index-url      . (format "%s/News/Oneweek/" nnshimbun-url))
+     (from-address   . "cnet@sphere.ad.jp")
+     (make-contents  . nnshimbun-make-html-contents)
+     (contents-start . "\n<!--KIJI-->\n")
+     (contents-end   . "\n<!--/KIJI-->\n"))
+    ("wired"
+     (url . "http://www.hotwired.co.jp/")
+     (groups "business" "culture" "technology")
+     (coding-system  . ,(static-if (boundp 'MULE) '*euc-japan* 'euc-jp))
+     (generate-nov   . nnshimbun-generate-nov-for-all-groups)
+     (get-headers    . nnshimbun-wired-get-all-headers)
+     (index-url)
+     (from-address   . "webmaster@www.hotwired.co.jp")
+     (make-contents  . nnshimbun-make-html-contents)
+     (contents-start . "\n<!-- START_OF_BODY -->\n")
+     (contents-end   . "\n<!-- END_OF_BODY -->\n"))
+    ("yomiuri"
+     (url . "http://www.yomiuri.co.jp/")
+     (groups "shakai" "sports" "seiji" "keizai" "kokusai" "fuho")
+     (coding-system  . ,(static-if (boundp 'MULE) '*sjis* 'shift_jis))
+     (generate-nov   . nnshimbun-generate-nov-for-all-groups)
+     (get-headers    . nnshimbun-yomiuri-get-all-headers)
+     (index-url      . (concat nnshimbun-url "main.htm"))
+     (from-address   . "webmaster@www.yomiuri.co.jp")
+     (make-contents  . nnshimbun-make-text-or-html-contents)
+     (contents-start . "\n<!--  honbun start  -->\n")
+     (contents-end   . "\n<!--  honbun end  -->\n"))
+    ("zdnet"
+     (url . "http://www.zdnet.co.jp/news/")
+     (groups "comp")
+     (coding-system  . ,(static-if (boundp 'MULE) '*sjis* 'shift_jis))
+     (generate-nov   . nnshimbun-generate-nov-for-each-group)
+     (get-headers    . nnshimbun-zdnet-get-headers)
+     (index-url      . nnshimbun-url)
+     (from-address   . "zdnn@softbank.co.jp")
+     (make-contents  . nnshimbun-make-html-contents)
+     (contents-start . "\\(<!--BODY-->\\|<!--DATE-->\\)")
+     (contents-end   . "\\(<!--BODYEND-->\\|<!--BYLINEEND-->\\)"))
+    ("mew"
+     (url . "http://www.mew.org/archive/")
+     (groups ,@(mapcar #'car nnshimbun-mew-groups))
+     (coding-system . ,(static-if (boundp 'MULE) '*iso-2022-jp* 'iso-2022-jp))
+     (generate-nov  . nnshimbun-generate-nov-for-each-group)
+     (get-headers   . nnshimbun-mew-get-headers)
+     (index-url     . (nnshimbun-mew-concat-url "index.html"))
+     (make-contents . nnshimbun-make-mhonarc-contents))
+    ("xemacs"
+     (url . "http://list-archives.xemacs.org/")
+     (groups "xemacs-announce" "xemacs-beta-ja" "xemacs-beta"
+            "xemacs-build-reports" "xemacs-cvs" "xemacs-mule"
+            "xemacs-nt" "xemacs-patches" "xemacs-users-ja" "xemacs")
+     (coding-system . ,(static-if (boundp 'MULE) '*euc-japan* 'euc-jp))
+     (generate-nov  . nnshimbun-generate-nov-for-each-group)
+     (get-headers   . nnshimbun-xemacs-get-headers)
+     (index-url     . (nnshimbun-xemacs-concat-url nil))
+     (make-contents . nnshimbun-make-mhonarc-contents))
+    ("netbsd"
+     (url . "http://www.jp.netbsd.org/ja/JP/ml/")
+     (groups "announce-ja" "junk-ja" "tech-misc-ja" "tech-pkg-ja"
+            "port-arm32-ja" "port-hpcmips-ja" "port-mac68k-ja"
+            "port-mips-ja" "port-powerpc-ja" "hpcmips-changes-ja"
+            "members-ja" "admin-ja" "www-changes-ja")
+     (coding-system  . ,(static-if (boundp 'MULE) '*iso-2022-jp* 'iso-2022-jp))
+     (generate-nov   . nnshimbun-generate-nov-for-each-group)
+     (get-headers    . nnshimbun-netbsd-get-headers)
+     (index-url      . (format "%s%s/index.html" nnshimbun-url nnshimbun-current-group))
+     (make-contents  . nnshimbun-make-mhonarc-contents))
+    ("bbdb-ml"
+     (url . "http://www.rc.tutrp.tut.ac.jp/bbdb-ml/")
+     (groups "bbdb-ml")
+     (coding-system . ,(static-if (boundp 'MULE) '*iso-2022-jp* 'iso-2022-jp))
+     (generate-nov . nnshimbun-generate-nov-for-each-group)
+     (get-headers . nnshimbun-fml-get-headers)
+     (index-url . nnshimbun-url)
+     (make-contents . nnshimbun-make-fml-contents))
+    ))
+
+(defvar nnshimbun-x-face-alist
+  '(("default" .
+     (("default" .
+       "X-Face: Ygq$6P.,%Xt$U)DS)cRY@k$VkW!7(X'X'?U{{osjjFG\"E]hND;SPJ-J?O?R|a?L
+       g2$0rVng=O3Lt}?~IId8Jj&vP^3*o=LKUyk(`t%0c!;t6REk=JbpsEn9MrN7gZ%"))))
+  "Alist of server vs. alist of group vs. X-Face field.  It looks like:
+
+\((\"asahi\" . ((\"national\" . \"X-face: ***\")
+            (\"business\" . \"X-Face: ***\")
+               ;;
+               ;;
+            (\"default\" . \"X-face: ***\")))
+ (\"sponichi\" . ((\"baseball\" . \"X-face: ***\")
+               (\"soccer\" . \"X-Face: ***\")
+               ;;
+               ;;
+               (\"default\" . \"X-face: ***\")))
+               ;;
+ (\"default\" . ((\"default\" . \"X-face: ***\")))")
+
+(defvoo nnshimbun-directory (nnheader-concat gnus-directory "shimbun/")
+  "Where nnshimbun will save its files.")
+
+(defvoo nnshimbun-nov-is-evil nil
+  "*Non-nil means that nnshimbun will never retrieve NOV headers.")
+
+(defvoo nnshimbun-nov-file-name ".overview")
+
+(defvoo nnshimbun-pre-fetch-article nil
+  "*Non nil means that nnshimbun fetch unread articles when scanning groups.")
+
+;; set by nnshimbun-possibly-change-group
+(defvoo nnshimbun-buffer nil)
+(defvoo nnshimbun-current-directory nil)
+(defvoo nnshimbun-current-group nil)
+
+;; set by nnshimbun-open-server
+(defvoo nnshimbun-url nil)
+(defvoo nnshimbun-coding-system nil)
+(defvoo nnshimbun-groups nil)
+(defvoo nnshimbun-generate-nov nil)
+(defvoo nnshimbun-get-headers nil)
+(defvoo nnshimbun-index-url nil)
+(defvoo nnshimbun-from-address nil)
+(defvoo nnshimbun-make-contents nil)
+(defvoo nnshimbun-contents-start nil)
+(defvoo nnshimbun-contents-end nil)
+(defvoo nnshimbun-server-directory nil)
+
+(defvoo nnshimbun-status-string "")
+(defvoo nnshimbun-nov-last-check nil)
+(defvoo nnshimbun-nov-buffer-alist nil)
+(defvoo nnshimbun-nov-buffer-file-name nil)
+
+(defvoo nnshimbun-keep-backlog 300)
+(defvoo nnshimbun-backlog-articles nil)
+(defvoo nnshimbun-backlog-hashtb nil)
+
+(defconst nnshimbun-meta-content-type-charset-regexp
+  (eval-when-compile
+    (concat "<meta[ \t]+http-equiv=\"?Content-type\"?[ \t]+content=\"\\([^;]+\\)"
+           ";[ \t]*charset=\"?\\([^\"]+\\)\"?"
+           ">"))
+  "Regexp used in parsing `<META HTTP-EQUIV=\"Content-Type\" content=\"...;charset=...\">
+for a charset indication")
+
+(defconst nnshimbun-meta-charset-content-type-regexp
+  (eval-when-compile
+    (concat "<meta[ \t]+content=\"\\([^;]+\\)"
+           ";[ \t]*charset=\"?\\([^\"]+\\)\"?"
+           "[ \t]+http-equiv=\"?Content-type\"?>"))
+  "Regexp used in parsing `<META content=\"...;charset=...\" HTTP-EQUIV=\"Content-Type\">
+for a charset indication")
+
+
+
+;;; backlog
+(defmacro nnshimbun-backlog (&rest form)
+  `(let ((gnus-keep-backlog nnshimbun-keep-backlog)
+        (gnus-backlog-buffer (format " *nnshimbun backlog %s*" (nnoo-current-server 'nnshimbun)))
+        (gnus-backlog-articles nnshimbun-backlog-articles)
+        (gnus-backlog-hashtb nnshimbun-backlog-hashtb))
+     (unwind-protect
+        (progn ,@form)
+       (setq nnshimbun-backlog-articles gnus-backlog-articles
+            nnshimbun-backlog-hashtb gnus-backlog-hashtb))))
+(put 'nnshimbun-backlog 'lisp-indent-function 0)
+(put 'nnshimbun-backlog 'edebug-form-spec '(form body))
+
+
+
+;;; Interface Functions
+(nnoo-define-basics nnshimbun)
+
+(deffoo nnshimbun-open-server (server &optional defs)
+  ;; Set default values.
+  (dolist (default (cdr (assoc server nnshimbun-type-definition)))
+    (let ((symbol (intern (concat "nnshimbun-" (symbol-name (car default))))))
+      (unless (assq symbol defs)
+       (push (list symbol (cdr default)) defs))))
+  ;; Set directory for server working files.
+  (push (list 'nnshimbun-server-directory
+             (file-name-as-directory
+              (expand-file-name server nnshimbun-directory)))
+       defs)
+  (nnoo-change-server 'nnshimbun server defs)
+  (nnshimbun-possibly-change-group nil server)
+  ;; Make directories.
+  (unless (file-exists-p nnshimbun-directory)
+    (ignore-errors (make-directory nnshimbun-directory t)))
+  (cond
+   ((not (file-exists-p nnshimbun-directory))
+    (nnshimbun-close-server)
+    (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-directory))
+   ((not (file-directory-p (file-truename nnshimbun-directory)))
+    (nnshimbun-close-server)
+    (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-directory))
+   (t
+    (unless (file-exists-p nnshimbun-server-directory)
+      (ignore-errors (make-directory nnshimbun-server-directory t)))
+    (cond
+     ((not (file-exists-p nnshimbun-server-directory))
+      (nnshimbun-close-server)
+      (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-server-directory))
+     ((not (file-directory-p (file-truename nnshimbun-server-directory)))
+      (nnshimbun-close-server)
+      (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-server-directory))
+     (t
+      (nnheader-report 'nnshimbun "Opened server %s using directory %s"
+                      server nnshimbun-server-directory)
+      t)))))
+
+(deffoo nnshimbun-close-server (&optional server)
+  (and (nnshimbun-server-opened server)
+       (gnus-buffer-live-p nnshimbun-buffer)
+       (kill-buffer nnshimbun-buffer))
+  (nnshimbun-backlog (gnus-backlog-shutdown))
+  (nnshimbun-save-nov)
+  (nnoo-close-server 'nnshimbun server)
+  t)
+
+(static-when (boundp 'MULE)
+  (unless (coding-system-p 'euc-japan)
+    (copy-coding-system '*euc-japan* 'euc-japan))
+  (unless (coding-system-p 'shift_jis)
+    (copy-coding-system '*sjis* 'shift_jis))
+  (eval-and-compile
+    (defalias-maybe 'coding-system-category 'get-code-mnemonic)))
+
+(eval-when-compile
+  (defvar w3m-work-buffer-name)
+  (autoload 'w3m-retrieve "w3m"))
+(eval-and-compile
+  (if (and (ignore-errors (require 'w3m))
+          (fboundp 'w3m-retrieve))
+;; When w3m.el is available.
+(defun nnshimbun-retrieve-url (url &optional no-cache)
+  "Rertrieve URL contents and insert to current buffer."
+  (when (w3m-retrieve url nil no-cache)
+    (insert-buffer w3m-work-buffer-name)))
+;; Otherwise.
+(defun nnshimbun-retrieve-url (url &optional no-cache)
+  "Rertrieve URL contents and insert to current buffer."
+  (let ((buf (current-buffer))
+       (url-working-buffer url-working-buffer))
+    (let ((old-asynch (default-value 'url-be-asynchronous))
+         (old-caching (default-value 'url-automatic-caching))
+         (old-mode (default-value 'url-standalone-mode)))
+      (setq-default url-be-asynchronous nil)
+      (when no-cache
+       (setq-default url-automatic-caching nil)
+       (setq-default url-standalone-mode nil))
+      (unwind-protect
+         (let ((coding-system-for-read 'binary)
+               (coding-system-for-write 'binary)
+               (input-coding-system 'binary)
+               (output-coding-system 'binary)
+               (default-enable-multibyte-characters nil))
+           (set-buffer
+            (setq url-working-buffer
+                  (cdr (url-retrieve url no-cache))))
+           (url-uncompress))
+       (setq-default url-be-asynchronous old-asynch)
+       (setq-default url-automatic-caching old-caching)
+       (setq-default url-standalone-mode old-mode)))
+    (let ((charset
+          (or (and (boundp 'url-current-mime-charset)
+                   (symbol-value 'url-current-mime-charset))
+              (let ((case-fold-search t))
+                (goto-char (point-min))
+                (if (or (re-search-forward
+                         nnshimbun-meta-content-type-charset-regexp nil t)
+                        (re-search-forward
+                         nnshimbun-meta-charset-content-type-regexp nil t))
+                    (buffer-substring-no-properties (match-beginning 2)
+                                                    (match-end 2)))))))
+      (decode-coding-region
+       (point-min) (point-max)
+       (if charset
+          (let ((mime-charset-coding-system-alist
+                 (append '((euc-jp . euc-japan)
+                           (shift-jis . shift_jis)
+                           (shift_jis . shift_jis)
+                           (sjis . shift_jis)
+                           (x-euc-jp . euc-japan)
+                           (x-shift-jis . shift_jis)
+                           (x-shift_jis . shift_jis)
+                           (x-sjis . shift_jis))
+                         mime-charset-coding-system-alist)))
+            (mime-charset-to-coding-system charset))
+        (let ((default (condition-case nil
+                           (coding-system-category nnshimbun-coding-system)
+                         (error nil)))
+              (candidate (detect-coding-region (point-min) (point-max))))
+          (unless (listp candidate)
+            (setq candidate (list candidate)))
+          (catch 'coding
+            (dolist (coding candidate)
+              (if (eq default (coding-system-category coding))
+                  (throw 'coding coding)))
+            (if (eq (coding-system-category 'binary)
+                    (coding-system-category (car candidate)))
+                nnshimbun-coding-system
+              (car candidate)))))))
+    (set-buffer-multibyte t)
+    (set-buffer buf)
+    (insert-buffer url-working-buffer)
+    (kill-buffer url-working-buffer)))
+))
+
+(deffoo nnshimbun-request-article (article &optional group server to-buffer)
+  (when (nnshimbun-possibly-change-group group server)
+    (if (stringp article)
+       (setq article (nnshimbun-search-id group article)))
+    (if (integerp article)
+       (nnshimbun-request-article-1 article group server to-buffer)
+      (nnheader-report 'nnml "Couldn't retrieve article: %s" (prin1-to-string article))
+      nil)))
+
+(defsubst nnshimbun-header-xref (x)
+  (if (and (setq x (mail-header-xref x))
+          (string-match "^Xref: " x))
+      (substring x 6)
+    x))
+
+(defun nnshimbun-request-article-1 (article &optional group server to-buffer)
+  (if (nnshimbun-backlog
+       (gnus-backlog-request-article
+        group article (or to-buffer nntp-server-buffer)))
+      (cons group article)
+    (let (header contents)
+      (when (setq header (save-excursion
+                          (set-buffer (nnshimbun-open-nov group))
+                          (and (nnheader-find-nov-line article)
+                               (nnheader-parse-nov))))
+       (let* ((xref (nnshimbun-header-xref header))
+              (x-faces (cdr (or (assoc (or server
+                                           (nnoo-current-server 'nnshimbun))
+                                       nnshimbun-x-face-alist)
+                                (assoc "default" nnshimbun-x-face-alist))))
+              (x-face (cdr (or (assoc group x-faces)
+                               (assoc "default" x-faces)))))
+         (save-excursion
+           (set-buffer nnshimbun-buffer)
+           (erase-buffer)
+           (nnshimbun-retrieve-url xref)
+           (nnheader-message 6 "nnshimbun: Make contents...")
+           (goto-char (point-min))
+           (setq contents (funcall nnshimbun-make-contents header x-face))
+           (nnheader-message 6 "nnshimbun: Make contents...done"))))
+      (when contents
+       (save-excursion
+         (set-buffer (or to-buffer nntp-server-buffer))
+         (erase-buffer)
+         (insert contents)
+         (nnshimbun-backlog
+           (gnus-backlog-enter-article group article (current-buffer)))
+         (nnheader-report 'nnshimbun "Article %s retrieved" (mail-header-id header))
+         (cons group (mail-header-number header)))))))
+
+(deffoo nnshimbun-request-group (group &optional server dont-check)
+  (let ((pathname-coding-system 'binary))
+    (cond
+     ((not (nnshimbun-possibly-change-group group server))
+      (nnheader-report 'nnshimbun "Invalid group (no such directory)"))
+     ((not (file-exists-p nnshimbun-current-directory))
+      (nnheader-report 'nnshimbun "Directory %s does not exist"
+                      nnshimbun-current-directory))
+     ((not (file-directory-p nnshimbun-current-directory))
+      (nnheader-report 'nnshimbun "%s is not a directory" nnshimbun-current-directory))
+     (dont-check
+      (nnheader-report 'nnshimbun "Group %s selected" group)
+      t)
+     (t
+      (let (beg end lines)
+       (save-excursion
+         (set-buffer (nnshimbun-open-nov group))
+         (goto-char (point-min))
+         (setq beg (ignore-errors (read (current-buffer))))
+         (goto-char (point-max))
+         (forward-line -1)
+         (setq end (ignore-errors (read (current-buffer)))
+               lines (count-lines (point-min) (point-max))))
+       (nnheader-report 'nnshimbunw "Selected group %s" group)
+       (nnheader-insert "211 %d %d %d %s\n"
+                        lines (or beg 0) (or end 0) group))))))
+
+(deffoo nnshimbun-request-scan (&optional group server)
+  (nnshimbun-possibly-change-group group server)
+  (nnshimbun-generate-nov-database group))
+
+(deffoo nnshimbun-close-group (group &optional server)
+  (nnshimbun-write-nov group)
+  t)
+
+(deffoo nnshimbun-request-list (&optional server)
+  (save-excursion
+    (set-buffer nntp-server-buffer)
+    (erase-buffer)
+    (dolist (group nnshimbun-groups)
+      (when (nnshimbun-possibly-change-group group server)
+       (let (beg end)
+         (save-excursion
+           (set-buffer (nnshimbun-open-nov group))
+           (goto-char (point-min))
+           (setq beg (ignore-errors (read (current-buffer))))
+           (goto-char (point-max))
+           (forward-line -1)
+           (setq end (ignore-errors (read (current-buffer)))))
+         (insert (format "%s %d %d n\n" group (or end 0) (or beg 0)))))))
+  t) ; return value
+
+(eval-and-compile
+  (if (fboundp 'mime-entity-fetch-field)
+      ;; For Semi-Gnus.
+      (defun nnshimbun-insert-header (header)
+       (insert "Subject: " (or (mime-entity-fetch-field header 'Subject) "(none)") "\n"
+               "From: " (or (mime-entity-fetch-field header 'From) "(nobody)") "\n"
+               "Date: " (or (mail-header-date header) "") "\n"
+               "Message-ID: " (or (mail-header-id header) (nnmail-message-id)) "\n")
+       (let ((refs (mail-header-references header)))
+         (and refs
+              (string< "" refs)
+              (insert "References: " refs "\n")))
+       (insert "Lines: " (number-to-string (or (mail-header-lines header) 0)) "\n"
+               "Xref: " (nnshimbun-header-xref header) "\n"))
+    ;; For pure Gnus.
+    (defun nnshimbun-insert-header (header)
+      (nnheader-insert-header header)
+      (delete-char -1)
+      (insert "Xref: " (nnshimbun-header-xref header) "\n"))))
+
+(deffoo nnshimbun-retrieve-headers (articles &optional group server fetch-old)
+  (when (nnshimbun-possibly-change-group group server)
+    (if (nnshimbun-retrieve-headers-with-nov articles fetch-old)
+       'nov
+      (save-excursion
+       (set-buffer nntp-server-buffer)
+       (erase-buffer)
+       (let (header)
+         (dolist (art articles)
+           (if (stringp art)
+               (setq art (nnshimbun-search-id group art)))
+           (if (integerp art)
+               (when (setq header
+                           (save-excursion
+                             (set-buffer (nnshimbun-open-nov group))
+                             (and (nnheader-find-nov-line art)
+                                  (nnheader-parse-nov))))
+                 (insert (format "220 %d Article retrieved.\n" art))
+                 (nnshimbun-insert-header header)
+                 (insert ".\n")
+                 (delete-region (point) (point-max))))))
+       'header))))
+
+(defun nnshimbun-retrieve-headers-with-nov (articles &optional fetch-old)
+  (if (or gnus-nov-is-evil nnshimbun-nov-is-evil)
+      nil
+    (let ((nov (expand-file-name nnshimbun-nov-file-name nnshimbun-current-directory)))
+      (when (file-exists-p nov)
+       (save-excursion
+         (set-buffer nntp-server-buffer)
+         (erase-buffer)
+         (nnheader-insert-file-contents nov)
+         (if (and fetch-old (not (numberp fetch-old)))
+             t                         ; Don't remove anything.
+           (nnheader-nov-delete-outside-range
+            (if fetch-old (max 1 (- (car articles) fetch-old))
+              (car articles))
+            (car (last articles)))
+           t))))))
+
+
+
+;;; Nov Database Operations
+
+(defun nnshimbun-generate-nov-database (group)
+  (prog1 (funcall nnshimbun-generate-nov group)
+    (nnshimbun-write-nov group)))
+
+(defun nnshimbun-generate-nov-for-each-group (group)
+  (nnshimbun-possibly-change-group group)
+  (save-excursion
+    (set-buffer (nnshimbun-open-nov group))
+    (let (i)
+      (goto-char (point-max))
+      (forward-line -1)
+      (setq i (or (ignore-errors (read (current-buffer))) 0))
+      (dolist (header (save-excursion
+                       (set-buffer nnshimbun-buffer)
+                       (erase-buffer)
+                       (nnshimbun-retrieve-url (eval nnshimbun-index-url) t)
+                       (goto-char (point-min))
+                       (funcall nnshimbun-get-headers)))
+       (unless (nnshimbun-search-id group (mail-header-id header))
+         (mail-header-set-number header (setq i (1+ i)))
+         (goto-char (point-max))
+         (nnheader-insert-nov header)
+         (if nnshimbun-pre-fetch-article
+             (nnshimbun-request-article-1 i group nil nnshimbun-buffer)))))))
+
+(defun nnshimbun-generate-nov-for-all-groups (&rest args)
+  (unless (and nnshimbun-nov-last-check
+              (< (nnshimbun-lapse-seconds nnshimbun-nov-last-check)
+                 nnshimbun-check-interval))
+    (save-excursion
+      (dolist (list (funcall nnshimbun-get-headers))
+       (let ((group (car list)))
+         (nnshimbun-possibly-change-group group)
+         (when (cdr list)
+           (set-buffer (nnshimbun-open-nov group))
+           (let (i)
+             (goto-char (point-max))
+             (forward-line -1)
+             (setq i (or (ignore-errors (read (current-buffer))) 0))
+             (dolist (header (cdr list))
+               (unless (nnshimbun-search-id group (mail-header-id header))
+                 (mail-header-set-number header (setq i (1+ i)))
+                 (goto-char (point-max))
+                 (nnheader-insert-nov header)
+                 (if nnshimbun-pre-fetch-article
+                     (nnshimbun-request-article-1 i group nil nnshimbun-buffer))))))))
+      (nnshimbun-save-nov)
+      (setq nnshimbun-nov-last-check (current-time)))))
+
+(defun nnshimbun-search-id (group id &optional nov)
+  (save-excursion
+    (set-buffer (nnshimbun-open-nov group))
+    (goto-char (point-min))
+    (let (found)
+      (while (and (not found)
+                 (search-forward id nil t)) ; We find the ID.
+       ;; And the id is in the fourth field.
+       (if (not (and (search-backward "\t" nil t 4)
+                     (not (search-backward "\t" (gnus-point-at-bol) t))))
+           (forward-line 1)
+         (forward-line 0)
+         (setq found t)))
+      (unless found
+       (goto-char (point-min))
+       (when (search-forward (concat "X-Nnshimbun-Id: " id) nil t)
+         (forward-line 0)
+         (setq found t)))
+      (if found
+         (if nov
+             (nnheader-parse-nov)
+           ;; We return the article number.
+           (ignore-errors (read (current-buffer))))))))
+
+(defun nnshimbun-nov-fix-header (group header args)
+  (save-excursion
+    (set-buffer (nnshimbun-open-nov group))
+    (when (nnheader-find-nov-line (mail-header-number header))
+      (dolist (arg args)
+       (if (eq (car arg) 'id)
+           (let ((extra (mail-header-extra header)))
+             (unless (assq 'X-Nnshimbun-Id extra)
+               (mail-header-set-extra
+                header
+                (cons (cons 'X-Nnshimbun-Id (mail-header-id header))
+                      extra)))
+             (mail-header-set-id header (cdr arg)))
+         (let ((func (intern (concat "mail-header-set-" (symbol-name (car arg))))))
+           (if (cdr arg) (eval (list func header (cdr arg)))))))
+      (mail-header-set-xref header (nnshimbun-header-xref header))
+      (delete-region (point) (progn (forward-line 1) (point)))
+      (nnheader-insert-nov header))))
+
+(defun nnshimbun-open-nov (group)
+  (let ((buffer (cdr (assoc group nnshimbun-nov-buffer-alist))))
+    (if (buffer-live-p buffer)
+       buffer
+      (setq buffer (gnus-get-buffer-create
+                   (format " *nnshimbun overview %s %s*"
+                           (nnoo-current-server 'nnshimbun) group)))
+      (save-excursion
+       (set-buffer buffer)
+       (set (make-local-variable 'nnshimbun-nov-buffer-file-name)
+            (expand-file-name
+             nnshimbun-nov-file-name
+             (nnmail-group-pathname group nnshimbun-server-directory)))
+       (erase-buffer)
+       (when (file-exists-p nnshimbun-nov-buffer-file-name)
+         (nnheader-insert-file-contents nnshimbun-nov-buffer-file-name))
+       (set-buffer-modified-p nil))
+      (push (cons group buffer) nnshimbun-nov-buffer-alist)
+      buffer)))
+
+(defun nnshimbun-write-nov (group)
+  (let ((buffer (cdr (assoc group nnshimbun-nov-buffer-alist))))
+    (when (buffer-live-p buffer)
+      (save-excursion
+       (set-buffer buffer)
+       (buffer-modified-p)
+       (nnmail-write-region 1 (point-max) nnshimbun-nov-buffer-file-name
+                            nil 'nomesg)))))
+
+(defun nnshimbun-save-nov ()
+  (save-excursion
+    (while nnshimbun-nov-buffer-alist
+      (when (buffer-name (cdar nnshimbun-nov-buffer-alist))
+       (set-buffer (cdar nnshimbun-nov-buffer-alist))
+       (when (buffer-modified-p)
+         (nnmail-write-region 1 (point-max) nnshimbun-nov-buffer-file-name
+                              nil 'nomesg))
+       (set-buffer-modified-p nil)
+       (kill-buffer (current-buffer)))
+      (setq nnshimbun-nov-buffer-alist (cdr nnshimbun-nov-buffer-alist)))))
+
+
+
+;;; Server Initialize
+(defun nnshimbun-possibly-change-group (group &optional server)
+  (when server
+    (unless (nnshimbun-server-opened server)
+      (nnshimbun-open-server server)))
+  (unless (gnus-buffer-live-p nnshimbun-buffer)
+    (setq nnshimbun-buffer
+         (save-excursion
+           (nnheader-set-temp-buffer
+            (format " *nnshimbun %s*" (nnoo-current-server 'nnshimbun))))))
+  (if (not group)
+      t
+    (let ((pathname (nnmail-group-pathname group nnshimbun-server-directory))
+         (pathname-coding-system 'binary))
+      (unless (equal pathname nnshimbun-current-directory)
+       (setq nnshimbun-current-directory pathname
+             nnshimbun-current-group group))
+      (unless (file-exists-p nnshimbun-current-directory)
+       (ignore-errors (make-directory nnshimbun-current-directory t)))
+      (cond
+       ((not (file-exists-p nnshimbun-current-directory))
+       (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-current-directory))
+       ((not (file-directory-p (file-truename nnshimbun-current-directory)))
+       (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-current-directory))
+       (t t)))))
+
+
+
+;;; Misc Functions
+
+(eval-and-compile
+  (if (fboundp 'eword-encode-string)
+      ;; For Semi-Gnus.
+      (defun nnshimbun-mime-encode-string (string)
+       (mapconcat
+        #'identity
+        (split-string (eword-encode-string (nnweb-decode-entities-string string)) "\n")
+        ""))
+    ;; For pure Gnus.
+    (defun nnshimbun-mime-encode-string (string)
+      (mapconcat
+       #'identity
+       (split-string
+       (with-temp-buffer
+         (insert (nnweb-decode-entities-string string))
+         (rfc2047-encode-region (point-min) (point-max))
+         (buffer-substring (point-min) (point-max)))
+       "\n")
+       ""))))
+
+(defun nnshimbun-lapse-seconds (time)
+  (let ((now (current-time)))
+    (+ (* (- (car now) (car time)) 65536)
+       (- (nth 1 now) (nth 1 time)))))
+
+(defun nnshimbun-make-date-string (year month day &optional time)
+  (format "%02d %s %04d %s +0900"
+         day
+         (aref [nil "Jan" "Feb" "Mar" "Apr" "May" "Jun"
+                    "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"]
+               month)
+         (cond ((< year 69)
+                (+ year 2000))
+               ((< year 100)
+                (+ year 1900))
+               ((< year 1000)  ; possible 3-digit years.
+                (+ year 1900))
+               (t year))
+         (or time "00:00")))
+
+(if (fboundp 'regexp-opt)
+    (defalias 'nnshimbun-regexp-opt 'regexp-opt)
+  (defun nnshimbun-regexp-opt (strings &optional paren)
+    "Return a regexp to match a string in STRINGS.
+Each string should be unique in STRINGS and should not contain any regexps,
+quoted or not.  If optional PAREN is non-nil, ensure that the returned regexp
+is enclosed by at least one regexp grouping construct."
+    (let ((open-paren (if paren "\\(" "")) (close-paren (if paren "\\)" "")))
+      (concat open-paren (mapconcat 'regexp-quote strings "\\|") close-paren))))
+
+
+;; Fast fill-region function
+
+(defvar nnshimbun-fill-column (min 80 (- (frame-width) 4)))
+
+(defconst nnshimbun-kinsoku-bol-list
+  (append "!)-_~}]:;',.?\e$B!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2!3!4!5!6!7\e(B\
+\e$B!8!9!:!;!<!=!>!?!@!A!B!C!D!E!G!I!K!M!O!Q!S!U!W!Y![!k!l!m!n$!$#$%$'$)\e(B\
+\e$B$C$c$e$g$n%!%#%%%'%)%C%c%e%g%n%u%v\e(B" nil))
+
+(defconst nnshimbun-kinsoku-eol-list
+  (append "({[`\e$B!F!H!J!L!N!P!R!T!V!X!Z!k!l!m!x\e(B" nil))
+
+(defun nnshimbun-fill-line ()
+  (forward-line 0)
+  (let ((top (point)) chr)
+    (while (if (>= (move-to-column nnshimbun-fill-column)
+                  nnshimbun-fill-column)
+              (not (progn
+                     (if (memq (preceding-char) nnshimbun-kinsoku-eol-list)
+                         (progn
+                           (backward-char)
+                           (while (memq (preceding-char) nnshimbun-kinsoku-eol-list)
+                             (backward-char))
+                           (insert "\n"))
+                       (while (memq (setq chr (following-char)) nnshimbun-kinsoku-bol-list)
+                         (forward-char))
+                       (if (looking-at "\\s-+")
+                           (or (eolp) (delete-region (point) (match-end 0)))
+                         (or (> (char-width chr) 1)
+                             (re-search-backward "\\<" top t)
+                             (end-of-line)))
+                       (or (eolp) (insert "\n"))))))
+      (setq top (point))))
+  (forward-line 1)
+  (not (eobp)))
+
+(defsubst nnshimbun-shallow-rendering ()
+  (goto-char (point-min))
+  (while (search-forward "<p>" nil t)
+    (insert "\n\n"))
+  (goto-char (point-min))
+  (while (search-forward "<br>" nil t)
+    (insert "\n"))
+  (nnweb-remove-markup)
+  (nnweb-decode-entities)
+  (goto-char (point-min))
+  (while (nnshimbun-fill-line))
+  (goto-char (point-min))
+  (when (skip-chars-forward "\n")
+    (delete-region (point-min) (point)))
+  (while (search-forward "\n\n" nil t)
+    (let ((p (point)))
+      (when (skip-chars-forward "\n")
+       (delete-region p (point)))))
+  (goto-char (point-max))
+  (when (skip-chars-backward "\n")
+    (delete-region (point) (point-max)))
+  (insert "\n"))
+
+(defun nnshimbun-make-text-or-html-contents (header &optional x-face)
+  (let ((case-fold-search t) (html t) (start))
+    (when (and (re-search-forward nnshimbun-contents-start nil t)
+              (setq start (point))
+              (re-search-forward nnshimbun-contents-end nil t))
+      (delete-region (match-beginning 0) (point-max))
+      (delete-region (point-min) start)
+      (nnshimbun-shallow-rendering)
+      (setq html nil))
+    (goto-char (point-min))
+    (nnshimbun-insert-header header)
+    (insert "Content-Type: " (if html "text/html" "text/plain")
+           "; charset=ISO-2022-JP\nMIME-Version: 1.0\n")
+    (when x-face
+      (insert x-face)
+      (unless (bolp)
+       (insert "\n")))
+    (insert "\n")
+    (encode-coding-string (buffer-string)
+                         (mime-charset-to-coding-system "ISO-2022-JP"))))
+
+(defun nnshimbun-make-html-contents (header &optional x-face)
+  (let (start)
+    (when (and (re-search-forward nnshimbun-contents-start nil t)
+              (setq start (point))
+              (re-search-forward nnshimbun-contents-end nil t))
+      (delete-region (match-beginning 0) (point-max))
+      (delete-region (point-min) start))
+    (goto-char (point-min))
+    (nnshimbun-insert-header header)
+    (insert "Content-Type: text/html; charset=ISO-2022-JP\n"
+           "MIME-Version: 1.0\n")
+    (when x-face
+      (insert x-face)
+      (unless (bolp)
+       (insert "\n")))
+    (insert "\n")
+    (encode-coding-string (buffer-string)
+                         (mime-charset-to-coding-system "ISO-2022-JP"))))
+
+(defun nnshimbun-make-mhonarc-contents (header &rest args)
+  (require 'mml)
+  (if (search-forward "<!--X-Head-End-->" nil t)
+      (progn
+       (forward-line 0)
+       ;; Processing headers.
+       (save-restriction
+         (narrow-to-region (point-min) (point))
+         (nnweb-decode-entities)
+         (goto-char (point-min))
+         (while (search-forward "\n<!--X-" nil t)
+           (replace-match "\n"))
+         (goto-char (point-min))
+         (while (search-forward " -->\n" nil t)
+           (replace-match "\n"))
+         (goto-char (point-min))
+         (while (search-forward "\t" nil t)
+           (replace-match " "))
+         (goto-char (point-min))
+         (let (buf refs)
+           (while (not (eobp))
+             (cond
+              ((looking-at "<!--")
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "Subject: +")
+               (push (cons 'subject (nnheader-header-value)) buf)
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "From: +")
+               (push (cons 'from (nnheader-header-value)) buf)
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "Date: +")
+               (push (cons 'date (nnheader-header-value)) buf)
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "Message-Id: +")
+               (push (cons 'id (concat "<" (nnheader-header-value) ">")) buf)
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "Reference: +")
+               (push (concat "<" (nnheader-header-value) ">") refs)
+               (delete-region (point) (progn (forward-line 1) (point))))
+              ((looking-at "Content-Type: ")
+               (unless (search-forward "charset" (gnus-point-at-eol) t)
+                 (end-of-line)
+                 (insert "; charset=ISO-2022-JP"))
+               (forward-line 1))
+              (t (forward-line 1))))
+           (insert "MIME-Version: 1.0\n")
+           (if refs (push (cons 'references (mapconcat 'identity refs " ")) buf))
+           (nnshimbun-nov-fix-header nnshimbun-current-group header buf)
+           (goto-char (point-min))
+           (nnshimbun-insert-header header))
+         (goto-char (point-max)))
+       ;; Processing body.
+       (save-restriction
+         (narrow-to-region (point) (point-max))
+         (delete-region
+          (point)
+          (progn
+            (search-forward "\n<!--X-Body-of-Message-->\n" nil t)
+            (point)))
+         (when (search-forward "\n<!--X-Body-of-Message-End-->\n" nil t)
+           (forward-line -1)
+           (delete-region (point) (point-max)))
+         (nnweb-remove-markup)
+         (nnweb-decode-entities)))
+    (goto-char (point-min))
+    (nnshimbun-insert-header header)
+    (insert "Content-Type: text/html; charset=ISO-2022-JP\nMIME-Version: 1.0\n\n"))
+  (encode-coding-string (buffer-string)
+                       (mime-charset-to-coding-system "ISO-2022-JP")))
+
+(defun nnshimbun-make-fml-contents (header &rest args)
+  (require 'mml)
+  (catch 'stop
+    (if (search-forward "<SPAN CLASS=mailheaders>" nil t)
+       (delete-region (point-min) (point))
+      (throw 'stop nil))
+    (if (search-forward "</PRE>")
+       (progn
+         (beginning-of-line)
+         (delete-region (point) (point-max)))
+      (throw 'stop nil))
+    (if (search-backward "</SPAN>")
+       (progn
+         (beginning-of-line)
+         (kill-line))
+      (throw 'stop nil))
+    (save-restriction
+      (narrow-to-region (point-min) (point))
+      (subst-char-in-region (point-min) (point-max) ?\t ?  t)
+      (nnweb-decode-entities)
+      (goto-char (point-min))
+      (let (buf field value start value-beg end)
+       (while (and (setq start (point))
+                   (re-search-forward "<SPAN CLASS=\\(.*\\)>\\(.*\\)</SPAN>:"
+                                      nil t)
+                   (setq field (match-string 2))
+                   (re-search-forward 
+                    (concat "<SPAN CLASS=" (match-string 1) "-value>") nil t)
+                   (setq value-beg (point))
+                   (search-forward "</SPAN>" nil t)
+                   (setq end (point)))
+         (setq value (buffer-substring value-beg
+                                       (progn (search-backward "</SPAN>")
+                                              (point))))
+         (delete-region start end)
+         (cond ((string= field "Date")
+                (push (cons 'date value) buf))
+               ((string= field "From")
+                (push (cons 'from value) buf))
+               ((string= field "Subject")
+                (push (cons 'subject value) buf))
+               ((string= field "Message-Id")
+                (push (cons 'id value) buf))
+               ((string= field "References")
+                (push (cons 'references value) buf))
+               (t
+                (insert (concat field ": " value "\n")))))
+       (nnshimbun-nov-fix-header nnshimbun-current-group header buf)
+       (goto-char (point-min))
+       (nnshimbun-insert-header header))
+      (goto-char (point-max)))
+    ;; Processing body.
+    (save-restriction
+      (narrow-to-region (point) (point-max))
+      (nnweb-remove-markup)
+      (nnweb-decode-entities)))
+  (encode-coding-string (buffer-string)
+                       (mime-charset-to-coding-system "ISO-2022-JP")))
+
+;;; www.asahi.com
+
+(defun nnshimbun-asahi-get-headers ()
+  (when (search-forward "\n<!-- Start of past -->\n" nil t)
+    (delete-region (point-min) (point))
+    (when (search-forward "\n<!-- End of past -->\n" nil t)
+      (forward-line -1)
+      (delete-region (point) (point-max))
+      (goto-char (point-min))
+      (let (headers)
+       (while (re-search-forward
+               "^<a href=\"\\(\\([0-9][0-9][0-9][0-9]\\)/\\([A-z]*[0-9]*\\)\\.html\\)\">[ \t\r\f\n]*"
+               nil t)
+         (let ((id (format "<%s%s%%%s>"
+                           (match-string 2)
+                           (match-string 3)
+                           nnshimbun-current-group))
+               (url (match-string 1)))
+           (push (make-full-mail-header
+                  0
+                  (nnshimbun-mime-encode-string
+                   (mapconcat 'identity
+                              (split-string
+                               (buffer-substring
+                                (match-end 0)
+                                (progn (search-forward "<br>" nil t) (point)))
+                               "\\(<[^>]+>\\|\r\\)")
+                              ""))
+                  nnshimbun-from-address
+                  "" id "" 0 0
+                  (format "%s%s/update/%s" nnshimbun-url nnshimbun-current-group url))
+                 headers)))
+       (setq headers (nreverse headers))
+       (let ((i 0))
+         (while (and (nth i headers)
+                     (re-search-forward
+                      "^(\\([0-9][0-9]\\)/\\([0-9][0-9]\\) \\([0-9][0-9]:[0-9][0-9]\\))"
+                      nil t))
+           (let ((month (string-to-number (match-string 1)))
+                 (date (decode-time (current-time))))
+             (mail-header-set-date
+              (nth i headers)
+              (nnshimbun-make-date-string
+               (if (and (eq 12 month) (eq 1 (nth 4 date)))
+                   (1- (nth 5 date))
+                 (nth 5 date))
+               month
+               (string-to-number (match-string 2))
+               (match-string 3))))
+           (setq i (1+ i))))
+       (nreverse headers)))))
+
+
+
+;;; www.sponichi.co.jp
+
+(defun nnshimbun-sponichi-get-headers ()
+  (when (search-forward "\e$B%K%e!<%9%$%s%G%C%/%9\e(B" nil t)
+    (delete-region (point-min) (point))
+    (when (search-forward "\e$B%"%I%?%0\e(B" nil t)
+      (forward-line 2)
+      (delete-region (point) (point-max))
+      (goto-char (point-min))
+      (let ((case-fold-search t) headers)
+       (while (re-search-forward
+               "^<a href=\"/\\(\\([A-z]*\\)/kiji/\\([0-9][0-9][0-9][0-9]\\)/\\([0-9][0-9]\\)/\\([0-9][0-9]\\)/\\([0-9][0-9]\\)\\.html\\)\">"
+               nil t)
+         (let ((url (match-string 1))
+               (id (format "<%s%s%s%s%%%s>"
+                           (match-string 3)
+                           (match-string 4)
+                           (match-string 5)
+                           (match-string 6)
+                           nnshimbun-current-group))
+               (date (nnshimbun-make-date-string
+                      (string-to-number (match-string 3))
+                      (string-to-number (match-string 4))
+                      (string-to-number (match-string 5)))))
+           (push (make-full-mail-header
+                  0
+                  (nnshimbun-mime-encode-string
+                   (mapconcat 'identity
+                              (split-string
+                               (buffer-substring
+                                (match-end 0)
+                                (progn (search-forward "<br>" nil t) (point)))
+                               "<[^>]+>")
+                              ""))
+                  nnshimbun-from-address
+                  date id "" 0 0 (concat nnshimbun-url url))
+                 headers)))
+       headers))))
+
+
+
+;;; CNET Japan
+
+(defun nnshimbun-cnet-get-headers ()
+  (let ((case-fold-search t) headers)
+    (while (search-forward "\n<!--*****\e$B8+=P$7\e(B*****-->\n" nil t)
+      (let ((subject (buffer-substring (point) (gnus-point-at-eol)))
+           (point (point)))
+       (forward-line -2)
+       (when (looking-at "<a href=\"/\\(News/\\([0-9][0-9][0-9][0-9]\\)/Item/\\([0-9][0-9]\\([0-9][0-9]\\)\\([0-9][0-9]\\)-[0-9]+\\).html\\)\">")
+         (let ((url (match-string 1))
+               (id  (format "<%s%s%%%s>"
+                            (match-string 2)
+                            (match-string 3)
+                            nnshimbun-current-group))
+               (date (nnshimbun-make-date-string
+                      (string-to-number (match-string 2))
+                      (string-to-number (match-string 4))
+                      (string-to-number (match-string 5)))))
+           (push (make-full-mail-header
+                  0
+                  (nnshimbun-mime-encode-string subject)
+                  nnshimbun-from-address
+                  date id "" 0 0 (concat nnshimbun-url url))
+                 headers)))
+       (goto-char point)))
+    headers))
+
+
+
+;;; Wired
+
+(defun nnshimbun-wired-get-all-headers ()
+  (save-excursion
+    (set-buffer nnshimbun-buffer)
+    (let ((group-header-alist (mapcar (lambda (g) (cons g nil)) nnshimbun-groups))
+         (case-fold-search t)
+         (regexp (format
+                  "<a href=\"\\(%s\\|/\\)\\(news/news/\\(%s\\)/story/\\(\\([0-9][0-9][0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)[0-9]+\\)\\.html\\)\"><b>"
+                  (regexp-quote nnshimbun-url)
+                  (nnshimbun-regexp-opt nnshimbun-groups))))
+      (dolist (xover (list (concat nnshimbun-url "news/news/index.html")
+                          (concat nnshimbun-url "news/news/last_seven.html")))
+       (erase-buffer)
+       (nnshimbun-retrieve-url xover t)
+       (goto-char (point-min))
+       (while (re-search-forward regexp nil t)
+         (let* ((url   (concat nnshimbun-url (match-string 2)))
+                (group (downcase (match-string 3)))
+                (id    (format "<%s%%%s>" (match-string 4) group))
+                (date  (nnshimbun-make-date-string
+                        (string-to-number (match-string 5))
+                        (string-to-number (match-string 6))
+                        (string-to-number (match-string 7))))
+                (header (make-full-mail-header
+                         0
+                         (nnshimbun-mime-encode-string
+                          (mapconcat 'identity
+                                     (split-string
+                                      (buffer-substring
+                                       (match-end 0)
+                                       (progn (search-forward "</b>" nil t) (point)))
+                                      "<[^>]+>")
+                                     ""))
+                         nnshimbun-from-address
+                         date id "" 0 0 url))
+                (x (assoc group group-header-alist)))
+           (setcdr x (cons header (cdr x))))))
+      group-header-alist)))
+
+
+
+;;; www.yomiuri.co.jp
+
+(defun nnshimbun-yomiuri-get-all-headers ()
+  (save-excursion
+    (set-buffer nnshimbun-buffer)
+    (erase-buffer)
+    (nnshimbun-retrieve-url (eval nnshimbun-index-url) t)
+    (let ((case-fold-search t)
+         (group-header-alist (mapcar (lambda (g) (cons g nil)) nnshimbun-groups)))
+      (dolist (group nnshimbun-groups)
+       (let (start)
+         (goto-char (point-min))
+         (when (and (search-forward (format "\n<!-- /news/%s=start -->\n" group) nil t)
+                    (setq start (point))
+                    (search-forward (format "\n<!-- /news/%s=end -->\n" group) nil t))
+           (forward-line -1)
+           (save-restriction
+             (narrow-to-region start (point))
+             (goto-char start)
+             (while (re-search-forward
+                     "<a href=\"/\\([0-9]+\\)/\\(\\(\\([0-9][0-9][0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)[A-z0-9]+\\)\\.htm\\)\"[^>]*>"
+                     nil t)
+               (let ((url   (concat (match-string 1) "a/" (match-string 2)))
+                     (id    (format "<%s%s%%%s>"
+                                    (match-string 1)
+                                    (match-string 3)
+                                    group))
+                     (year  (string-to-number (match-string 4)))
+                     (month (string-to-number (match-string 5)))
+                     (day   (string-to-number (match-string 6)))
+                     (subject (mapconcat
+                               'identity
+                               (split-string
+                                (buffer-substring
+                                 (match-end 0)
+                                 (progn (search-forward "<br>" nil t) (point)))
+                                "<[^>]+>")
+                               ""))
+                     date x)
+                 (when (string-match "^\e$B"!\e(B" subject)
+                   (setq subject (substring subject (match-end 0))))
+                 (if (string-match "(\\([0-9][0-9]:[0-9][0-9]\\))$" subject)
+                     (setq date (nnshimbun-make-date-string
+                                 year month day (match-string 1 subject))
+                           subject (substring subject 0 (match-beginning 0)))
+                   (setq date (nnshimbun-make-date-string year month day)))
+                 (setcdr (setq x (assoc group group-header-alist))
+                         (cons (make-full-mail-header
+                                0
+                                (nnshimbun-mime-encode-string subject)
+                                nnshimbun-from-address
+                                date id "" 0 0 (concat nnshimbun-url url))
+                               (cdr x)))))))))
+      group-header-alist)))
+
+
+
+;;; Zdnet Japan
+
+(defun nnshimbun-zdnet-get-headers ()
+  (let ((case-fold-search t) headers)
+    (goto-char (point-min))
+    (let (start)
+      (while (and (search-forward "<!--" nil t)
+                 (setq start (- (point) 4))
+                 (search-forward "-->" nil t))
+       (delete-region start (point))))
+    (goto-char (point-min))
+    (while (re-search-forward
+           "<a href=\"\\(/news/\\)?\\(\\([0-9][0-9]\\)\\([0-9][0-9]\\)/\\([0-9][0-9]\\)/\\([^\\.]+\\).html\\)\"><font size=\"4\"><strong>"
+           nil t)
+      (let ((year  (+ 2000 (string-to-number (match-string 3))))
+           (month (string-to-number (match-string 4)))
+           (day   (string-to-number (match-string 5)))
+           (id    (format "<%s%s%s%s%%%s>"
+                          (match-string 3)
+                          (match-string 4)
+                          (match-string 5)
+                          (match-string 6)
+                          nnshimbun-current-group))
+           (url (match-string 2)))
+       (push (make-full-mail-header
+              0
+              (nnshimbun-mime-encode-string
+               (mapconcat 'identity
+                          (split-string
+                           (buffer-substring
+                            (match-end 0)
+                            (progn (search-forward "</a>" nil t) (point)))
+                           "<[^>]+>")
+                          ""))
+              nnshimbun-from-address
+              (nnshimbun-make-date-string year month day)
+              id  "" 0 0 (concat nnshimbun-url url))
+             headers)))
+    (nreverse headers)))
+
+
+
+;;; MLs on www.mew.org
+
+(defmacro nnshimbun-mew-concat-url (url)
+  `(concat nnshimbun-url
+          (nth 1 (assoc nnshimbun-current-group nnshimbun-mew-groups))
+          "/"
+          ,url))
+
+(defmacro nnshimbun-mew-reverse-order-p ()
+  `(nth 2 (assoc nnshimbun-current-group nnshimbun-mew-groups)))
+
+(defmacro nnshimbun-mew-spew-p ()
+  `(nth 3 (assoc nnshimbun-current-group nnshimbun-mew-groups)))
+
+(defsubst nnshimbun-mew-retrieve-xover (aux)
+  (erase-buffer)
+  (nnshimbun-retrieve-url
+   (nnshimbun-mew-concat-url (if (= aux 1) "index.html" (format "mail%d.html" aux)))
+   t))
+
+(defconst nnshimbun-mew-regexp "<A[^>]*HREF=\"\\(msg\\([0-9]+\\).html\\)\">\\([^<]+\\)<")
+
+(defmacro nnshimbun-mew-extract-header-values ()
+  `(progn
+     (setq url (nnshimbun-mew-concat-url (match-string 1))
+          id (format "<%05d%%%s>"
+                     (1- (string-to-number (match-string 2)))
+                     nnshimbun-current-group)
+          subject (match-string 3))
+     (forward-line 1)
+     (if (nnshimbun-search-id nnshimbun-current-group id)
+        (throw 'stop headers)
+       (push (make-full-mail-header
+             0
+             (nnshimbun-mime-encode-string subject)
+             (if (looking-at "<EM>\\([^<]+\\)<")
+                 (nnshimbun-mime-encode-string (match-string 1))
+               "")
+             "" id "" 0 0 url)
+            headers))))
+
+(eval-and-compile
+  (if (fboundp 'mime-entity-fetch-field)
+      ;; For Semi-Gnus.
+      (defmacro nnshimbun-mew-mail-header-subject (header)
+       `(mime-entity-fetch-field ,header 'Subject))
+    ;; For pure Gnus.
+    (defalias 'nnshimbun-mew-mail-header-subject 'mail-header-subject)))
+
+(defun nnshimbun-mew-get-headers ()
+  (if (nnshimbun-mew-spew-p)
+      (let ((headers (nnshimbun-mew-get-headers-1)))
+       (erase-buffer)
+       (insert-buffer-substring (nnshimbun-open-nov nnshimbun-current-group))
+       (delq nil
+             (mapcar
+              (lambda (header)
+                (goto-char (point-min))
+                (let ((subject (nnshimbun-mew-mail-header-subject header))
+                      (found))
+                  (while (and (not found)
+                              (search-forward subject nil t))
+                    (if (not (and (search-backward "\t" nil t)
+                                  (not (search-backward "\t" (gnus-point-at-bol) t))))
+                        (forward-line 1)
+                      (setq found t)))
+                  (if found
+                      nil
+                    (goto-char (point-max))
+                    (nnheader-insert-nov header)
+                    header)))
+              headers)))
+    (nnshimbun-mew-get-headers-1)))
+
+(defun nnshimbun-mew-get-headers-1 ()
+  (let (headers)
+    (when (re-search-forward
+          "<A[^>]*HREF=\"mail\\([0-9]+\\)\\.html\">\\[?Last Page\\]?</A>" nil t)
+      (let ((limit (string-to-number (match-string 1))))
+       (catch 'stop
+         (if (nnshimbun-mew-reverse-order-p)
+             (let ((aux 1))
+               (while (let (id url subject)
+                        (while (re-search-forward nnshimbun-mew-regexp nil t)
+                          (nnshimbun-mew-extract-header-values))
+                        (< aux limit))
+                 (nnshimbun-mew-retrieve-xover (setq aux (1+ aux)))))
+           (while (> limit 0)
+             (nnshimbun-mew-retrieve-xover limit)
+             (setq limit (1- limit))
+             (let (id url subject)
+               (goto-char (point-max))
+               (while (re-search-backward nnshimbun-mew-regexp nil t)
+                 (nnshimbun-mew-extract-header-values)
+                 (forward-line -2)))))
+         headers)))))
+
+
+
+;;; MLs on www.xemacs.org
+
+(defmacro nnshimbun-xemacs-concat-url (url)
+  `(concat nnshimbun-url nnshimbun-current-group "/" ,url))
+
+(defun nnshimbun-xemacs-get-headers ()
+  (let (headers auxs aux)
+    (catch 'stop
+      (while (re-search-forward
+             (concat "<A HREF=\"/" nnshimbun-current-group
+                     "/\\([12][0-9][0-9][0-9][0-1][0-9]\\)/\">\\[Index\\]")
+             nil t)
+       (setq auxs (append auxs (list (match-string 1)))))
+      (while auxs
+       (erase-buffer)
+       (nnshimbun-retrieve-url
+        (nnshimbun-xemacs-concat-url (concat (setq aux (car auxs)) "/")))
+       (let (id url subject)
+         (goto-char (point-max))
+         (while (re-search-backward
+                 "<A[^>]*HREF=\"\\(msg\\([0-9]+\\).html\\)\">\\([^<]+\\)<"
+                 nil t)
+           (setq url (nnshimbun-xemacs-concat-url
+                      (concat aux "/" (match-string 1)))
+                 id (format "<%s%05d%%%s>"
+                            aux
+                            (string-to-number (match-string 2))
+                            nnshimbun-current-group)
+                 subject (match-string 3))
+           (forward-line 1)
+           (if (nnshimbun-search-id nnshimbun-current-group id)
+               (throw 'stop headers)
+             (push (make-full-mail-header
+                    0
+                    (nnshimbun-mime-encode-string subject)
+                    (if (looking-at "<td><em>\\([^<]+\\)<")
+                        (match-string 1)
+                      "")
+                    "" id "" 0 0 url)
+                   headers))
+           (message "%s" id)
+           (forward-line -2)))
+       (setq auxs (cdr auxs))))
+    headers))
+
+;;; MLs on www.jp.netbsd.org
+
+(defun nnshimbun-netbsd-get-headers ()
+  (let ((case-fold-search t) headers months)
+    (goto-char (point-min))
+    (while (re-search-forward "<A HREF=\"\\([0-9]+\\)/\\(threads.html\\)?\">" nil t)
+      (push (match-string 1) months))
+    (setq months (nreverse months))
+    (catch 'exit
+      (dolist (month months)
+       (erase-buffer)
+       (nnshimbun-retrieve-url
+        (format "%s%s/%s/maillist.html" nnshimbun-url nnshimbun-current-group month)
+        t)
+       (let (id url subject)
+         (while (re-search-forward
+                 "<A[^>]*HREF=\"\\(msg\\([0-9]+\\)\\.html\\)\">\\([^<]+\\)</A>"
+                 nil t)
+           (setq url (format "%s%s/%s/%s"
+                             nnshimbun-url
+                             nnshimbun-current-group
+                             month
+                             (match-string 1))
+                 id (format "<%s%05d%%%s>"
+                            month
+                            (string-to-number (match-string 2))
+                            nnshimbun-current-group)
+                 subject (match-string 3))
+           (if (nnshimbun-search-id nnshimbun-current-group id)
+               (throw 'exit headers)
+             (push (make-full-mail-header
+                    0
+                    (nnshimbun-mime-encode-string subject)
+                    (if (looking-at "</STRONG> *<EM>\\([^<]+\\)<")
+                        (nnshimbun-mime-encode-string (match-string 1))
+                      "")
+                    "" id "" 0 0 url)
+                   headers)))))
+      headers)))
+
+;;; MLs using fml
+(defun nnshimbun-fml-get-headers ()
+  (let (headers auxs aux)
+    (catch 'stop
+      (while (re-search-forward "<a href=\"\\([0-9]+\\(\\.week\\|\\.month\\)?\\)/index.html\">" nil t)
+       (setq auxs (append auxs (list (match-string 1)))))
+      (while auxs
+       (erase-buffer)
+       (nnshimbun-retrieve-url
+        (concat nnshimbun-url (setq aux (car auxs)) "/"))
+       (subst-char-in-region (point-min) (point-max) ?\t ?  t)
+       (let (id url date subject from)
+         (goto-char (point-min))
+         (while (re-search-forward
+                 "<LI><A HREF=\"\\([0-9]+\\.html\\)\">Article .*</A> <DIV><SPAN CLASS=article>Article <SPAN CLASS=article-value>\\([0-9]+\\)</SPAN></SPAN> at <SPAN CLASS=Date-value>\\([^<]*\\)</SPAN> <SPAN CLASS=Subject>Subject: <SPAN CLASS=Subject-value>\\([^<]*\\)</SPAN></SPAN></DIV><DIV><SPAN CLASS=From>From: <SPAN CLASS=From-value>\\([^<]*\\)</SPAN></SPAN></DIV>"
+                 nil t)
+           (setq url (concat nnshimbun-url aux "/" (match-string 1))
+                 id (format "<%s%05d%%%s>"
+                            aux
+                            (string-to-number (match-string 2))
+                            nnshimbun-current-group)
+                 date (match-string 3)
+                 subject (match-string 4)
+                 from (match-string 5))
+           (forward-line 1)
+           (if (nnshimbun-search-id nnshimbun-current-group id)
+               (throw 'stop headers)
+             (push (make-full-mail-header
+                    0
+                    (nnshimbun-mime-encode-string subject)
+                    from date id "" 0 0 url)
+                   headers))
+           ;;(message "%s" id)
+           ))
+       (setq auxs (cdr auxs))))
+    headers))
+
+(provide 'nnshimbun)
+;;; nnshimbun.el ends here.
index c28e35c..1a9ac54 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnslashdot.el --- interfacing with Slashdot
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -29,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 
 (require 'nnoo)
 (require 'message)
 (require 'gnus)
 (require 'nnmail)
 (require 'mm-util)
-(require 'nnweb)
 (eval-when-compile
   (ignore-errors
-    (require 'w3)
-    (require 'url)
-    (require 'w3-forms)))
+    (require 'nnweb)))
 ;; Report failure to find w3 at load time if appropriate.
-(eval '(progn
-        (require 'w3)
-        (require 'url)
-        (require 'w3-forms)))
+(eval '(require 'nnweb))
 
 (nnoo-declare nnslashdot)
 
 
 (deffoo nnslashdot-retrieve-headers (articles &optional group server fetch-old)
   (nnslashdot-possibly-change-server group server)
-  (unless gnus-nov-is-evil
-    (if nnslashdot-threaded
-       (nnslashdot-threaded-retrieve-headers articles group)
-      (nnslashdot-sane-retrieve-headers articles group))))
-  
+  (condition-case why
+      (unless gnus-nov-is-evil
+        (if nnslashdot-threaded
+            (nnslashdot-threaded-retrieve-headers articles group)
+          (nnslashdot-sane-retrieve-headers articles group)))
+    (search-failed (nnslashdot-lose why))))
+
 (deffoo nnslashdot-threaded-retrieve-headers (articles group)
   (let ((last (car (last articles)))
        (did nil)
       (let ((case-fold-search t))
        (erase-buffer)
        (when (= start 1)
-         (nnweb-insert (format nnslashdot-article-url sid))
+         (nnweb-insert (format nnslashdot-article-url
+                               (nnslashdot-sid-strip sid)) t)
          (goto-char (point-min))
          (search-forward "Posted by ")
          (when (looking-at "<a[^>]+>\\([^<]+\\)")
-           (setq from (match-string 1)))
+           (setq from (nnweb-decode-entities-string (match-string 1))))
          (search-forward " on ")
          (setq date (nnslashdot-date-to-date
                      (buffer-substring (point) (1- (search-forward "<")))))
-         (forward-line 2)
-         (setq lines (count-lines
-                      (point)
-                      (search-forward
-                       "A href=http://slashdot.org/article.pl")))
+         (setq lines (/ (- (point)
+                           (progn (forward-line 1) (point)))
+                        60))
          (push
           (cons
            1
            (make-full-mail-header
-            1 group from date (concat "<" sid "%1@slashdot>")
+            1 group from date
+            (concat "<" (nnslashdot-sid-strip sid) "%1@slashdot>")
             "" 0 lines nil nil))
           headers))
        (while (and (setq start (pop startats))
                    (< start last))
          (setq point (goto-char (point-max)))
          (nnweb-insert
-          (format nnslashdot-comments-url sid nnslashdot-threshold 0 start))
+          (format nnslashdot-comments-url
+                  (nnslashdot-sid-strip sid)
+                  nnslashdot-threshold 0 start)
+          t)
          (when first-comments
            (setq first-comments nil)
            (goto-char (point-max))
            (setq startats (sort startats '<)))
          (goto-char point)
          (while (re-search-forward
-                 "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score:\\([^)]+\\))"
+                 "<a name=\"\\([0-9]+\\)\"><\\(b\\|H4\\)>\\([^<]+\\)</\\(b\\|H4\\)>.*score:\\([^)]+\\))"
                  nil t)
            (setq article (string-to-number (match-string 1))
-                 subject (match-string 2)
-                 score (match-string 3))
+                 subject (match-string 3)
+                 score (match-string 5))
            (when (string-match "^Re: *" subject)
              (setq subject (concat "Re: " (substring subject (match-end 0)))))
+            (setq subject (nnweb-decode-entities-string subject))
            (forward-line 1)
            (if (looking-at
                 "by <a[^>]+>\\([^<]+\\)</a>[ \t\n]*.*(\\([^)]+\\))")
-               (setq from (concat (match-string 1)
-                                  " <" (match-string 2) ">"))
-             (looking-at "by \\(.+\\) on ")
-             (setq from (match-string 1)))
-           (goto-char (- (match-end 0) 5))
+               (progn
+                 (goto-char (- (match-end 0) 5))
+                 (setq from (concat 
+                             (nnweb-decode-entities-string (match-string 1))
+                             " <" (match-string 2) ">")))
+             (setq from "")
+             (when (looking-at "by \\(.+\\) on ")
+               (goto-char (- (match-end 0) 5))
+               (setq from (nnweb-decode-entities-string (match-string 1)))))
            (search-forward " on ")
            (setq date
                  (nnslashdot-date-to-date
            (setq lines (/ (abs (- (search-forward "<td ")
                                   (search-forward "</td>")))
                           70))
-           (forward-line 2)
+           (forward-line 4)
            (setq parent
                  (if (looking-at ".*cid=\\([0-9]+\\)")
                      (match-string 1)
               (1+ article)
               (concat subject " (" score ")")
               from date
-              (concat "<" sid "%"
+              (concat "<" (nnslashdot-sid-strip sid) "%"
                       (number-to-string (1+ article)) 
                       "@slashdot>")
               (if parent
-                  (concat "<" sid "%"
+                  (concat "<" (nnslashdot-sid-strip sid) "%"
                           (number-to-string (1+ (string-to-number parent)))
                           "@slashdot>")
                 "")
     (save-excursion
       (set-buffer nntp-server-buffer)
       (erase-buffer)
-      (dolist (header nnslashdot-headers)
-       (nnheader-insert-nov (cdr header))))
+      (mm-with-unibyte-current-buffer
+       (dolist (header nnslashdot-headers)
+        (nnheader-insert-nov (cdr header)))))
     'nov))
 
 (deffoo nnslashdot-sane-retrieve-headers (articles group)
       (set-buffer nnslashdot-buffer)
       (erase-buffer)
       (when (= start 1)
-       (nnweb-insert (format nnslashdot-article-url sid))
+       (nnweb-insert (format nnslashdot-article-url
+                             (nnslashdot-sid-strip sid)) t)
        (goto-char (point-min))
        (search-forward "Posted by ")
        (when (looking-at "<a[^>]+>\\([^<]+\\)")
-         (setq from (match-string 1)))
+         (setq from (nnweb-decode-entities-string (match-string 1))))
        (search-forward " on ")
        (setq date (nnslashdot-date-to-date
                    (buffer-substring (point) (1- (search-forward "<")))))
        (forward-line 2)
        (setq lines (count-lines (point)
-                                (search-forward
-                                 "A href=http://slashdot.org/article.pl")))
+                                (re-search-forward
+                                 "A href=\"\\(http://slashdot.org\\)?/article")))
        (push
         (cons
          1
          (make-full-mail-header
-          1 group from date (concat "<" sid "%1@slashdot>")
+          1 group from date (concat "<" (nnslashdot-sid-strip sid)
+                                    "%1@slashdot>")
           "" 0 lines nil nil))
         headers))
       (while (or (not article)
          (setq start (1+ article)))
        (setq point (goto-char (point-max)))
        (nnweb-insert
-        (format nnslashdot-comments-url sid nnslashdot-threshold 4 start))
+        (format nnslashdot-comments-url (nnslashdot-sid-strip sid)
+                nnslashdot-threshold 4 start)
+        t)
        (goto-char point)
        (while (re-search-forward
-               "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score:\\([^)]+\\))"
+                 "<a name=\"\\([0-9]+\\)\"><\\(b\\|H4\\)>\\([^<]+\\)</\\(b\\|H4\\)>.*score:\\([^)]+\\))"
                nil t)
          (setq article (string-to-number (match-string 1))
-               subject (match-string 2)
-               score (match-string 3))
+               subject (match-string 3)
+               score (match-string 5))
          (when (string-match "^Re: *" subject)
            (setq subject (concat "Re: " (substring subject (match-end 0)))))
+          (setq subject (nnweb-decode-entities-string subject))
          (forward-line 1)
          (if (looking-at
               "by <a[^>]+>\\([^<]+\\)</a>[ \t\n]*.*(\\([^)]+\\))")
-             (setq from (concat (match-string 1) " <" (match-string 2) ">"))
-           (looking-at "by \\(.+\\) on ")
-           (setq from (match-string 1)))
-         (goto-char (- (match-end 0) 5))
+             (progn
+               (goto-char (- (match-end 0) 5))
+               (setq from (concat 
+                           (nnweb-decode-entities-string (match-string 1))
+                           " <" (match-string 2) ">")))
+           (setq from "")
+           (when (looking-at "by \\(.+\\) on ")
+             (goto-char (- (match-end 0) 5))
+             (setq from (nnweb-decode-entities-string (match-string 1)))))
          (search-forward " on ")
          (setq date
                (nnslashdot-date-to-date
            (make-full-mail-header
             (1+ article) (concat subject " (" score ")")
             from date
-            (concat "<" sid "%"
+            (concat "<" (nnslashdot-sid-strip sid) "%"
                     (number-to-string (1+ article)) 
                     "@slashdot>")
             (if parent
-                (concat "<" sid "%"
+                (concat "<" (nnslashdot-sid-strip sid) "%"
                         (number-to-string (1+ (string-to-number parent)))
                         "@slashdot>")
               "")
     (save-excursion
       (set-buffer nntp-server-buffer)
       (erase-buffer)
-      (dolist (header nnslashdot-headers)
-       (nnheader-insert-nov (cdr header))))
+      (mm-with-unibyte-current-buffer
+       (dolist (header nnslashdot-headers)
+         (nnheader-insert-nov (cdr header)))))
     'nov))
 
 (deffoo nnslashdot-request-group (group &optional server dont-check)
 (deffoo nnslashdot-request-article (article &optional group server buffer)
   (nnslashdot-possibly-change-server group server)
   (let (contents)
-    (save-excursion
-      (set-buffer nnslashdot-buffer)
-      (let ((case-fold-search t))
-       (goto-char (point-min))
-       (when (and (stringp article)
-                  (string-match "%\\([0-9]+\\)@" article))
-         (setq article (string-to-number (match-string 1 article))))
-       (when (numberp article)
-         (if (= article 1)
-             (progn
-               (re-search-forward "Posted by .* on ")
-               (forward-line 1)
+    (condition-case why
+       (save-excursion
+         (set-buffer nnslashdot-buffer)
+         (let ((case-fold-search t))
+           (goto-char (point-min))
+           (when (and (stringp article)
+                      (string-match "%\\([0-9]+\\)@" article))
+             (setq article (string-to-number (match-string 1 article))))
+           (when (numberp article)
+             (if (= article 1)
+                 (progn
+                   (re-search-forward "Posted by *<[^>]+>[^>]*<[^>]+> *on ")
+                   (search-forward "<BR>")
+                   (setq contents
+                         (buffer-substring
+                          (point)
+                          (progn
+                            (re-search-forward
+                             "<p>.*A href=\"\\(http://slashdot.org\\)?/article")
+                            (match-beginning 0)))))
+               (search-forward (format "<a name=\"%d\">" (1- article)))
                (setq contents
                      (buffer-substring
-                      (point)
-                      (progn
-                        (re-search-forward
-                         "<p>.*A href=http://slashdot.org/article.pl")
-                        (match-beginning 0)))))
-           (search-forward (format "<a name=\"%d\">" (1- article)))
-           (setq contents
-                 (buffer-substring
-                  (re-search-forward "<td[^>]+>")
-                  (search-forward "</td>")))))))
+                      (re-search-forward "<td[^>]+>")
+                      (search-forward "</td>")))))))
+      (search-failed (nnslashdot-lose why)))
+
     (when contents
       (save-excursion
        (set-buffer (or buffer nntp-server-buffer))
        (erase-buffer)
-       (insert contents)
-       (goto-char (point-min))
-       (while (search-forward "<br><br>" nil t)
-         (replace-match "<p>" t t))
-       (goto-char (point-min))
-       (insert "Content-Type: text/html\nMIME-Version: 1.0\n")
-       (insert "Newsgroups: " (caddr (assoc group nnslashdot-groups))
-               "\n")
-       (let ((header (cdr (assq article nnslashdot-headers))))
-         (nnheader-insert-header header))
-       (nnheader-report 'nnslashdot "Fetched article %s" article)
+       (mm-with-unibyte-current-buffer
+         (insert contents)
+         (goto-char (point-min))
+         (while (re-search-forward "\\(<br>\r?\\)+" nil t)
+           (replace-match "<p>" t t))
+         (goto-char (point-min))
+         (insert "Content-Type: text/html\nMIME-Version: 1.0\n")
+         (insert "Newsgroups: " (caddr (assoc group nnslashdot-groups))
+                 "\n")
+         (let ((header (cdr (assq article nnslashdot-headers))))
+           (nnheader-insert-header header))
+         (nnheader-report 'nnslashdot "Fetched article %s" article))
        (cons group article)))))
 
 (deffoo nnslashdot-close-server (&optional server)
   (nnslashdot-possibly-change-server nil server)
   (let ((number 0)
        sid elem description articles gname)
-    ;; First we do the Ultramode to get info on all the latest groups.
-    (with-temp-buffer
-      (nnweb-insert "http://slashdot.org/slashdot.xml")
-      (goto-char (point-min))
-      (while (search-forward "<story>" nil t)
-       (narrow-to-region (point) (search-forward "</story>"))
-       (goto-char (point-min))
-       (re-search-forward "<title>\\([^<]+\\)</title>")
-       (setq description (match-string 1))
-       (re-search-forward "<url>\\([^<]+\\)</url>")
-       (setq sid (match-string 1))
-       (string-match "/\\([0-9/]+\\).shtml" sid)
-       (setq sid (match-string 1 sid))
-       (re-search-forward "<comments>\\([^<]+\\)</comments>")
-       (setq articles (string-to-number (match-string 1)))
-       (setq gname (concat description " (" sid ")"))
-       (if (setq elem (assoc gname nnslashdot-groups))
-           (setcar (cdr elem) articles)
-         (push (list gname articles sid) nnslashdot-groups))
-       (goto-char (point-max))
-       (widen)))
-    ;; Then do the older groups.
-    (while (> (- nnslashdot-group-number number) 0)
-      (with-temp-buffer
-       (let ((case-fold-search t))
-         (nnweb-insert (format nnslashdot-active-url number))
-         (goto-char (point-min))
-         (while (re-search-forward
-                 "article.pl\\?sid=\\([^&]+\\).*<b>\\([^<]+\\)</b>" nil t)
-           (setq sid (match-string 1)
-                 description (match-string 2))
-           (forward-line 1)
-           (when (re-search-forward "<b>\\([0-9]+\\)</b>" nil t)
-             (setq articles (string-to-number (match-string 1))))
-           (setq gname (concat description " (" sid ")"))
-           (if (setq elem (assoc gname nnslashdot-groups))
-               (setcar (cdr elem) articles)
-             (push (list gname articles sid) nnslashdot-groups)))))
-      (incf number 30))
+    (condition-case why
+        ;; First we do the Ultramode to get info on all the latest groups.
+       (progn 
+         (mm-with-unibyte-buffer
+           (nnweb-insert "http://slashdot.org/slashdot.xml" t)
+           (goto-char (point-min))
+           (while (search-forward "<story>" nil t)
+             (narrow-to-region (point) (search-forward "</story>"))
+             (goto-char (point-min))
+             (re-search-forward "<title>\\([^<]+\\)</title>")
+             (setq description
+                   (nnweb-decode-entities-string (match-string 1)))
+             (re-search-forward "<url>\\([^<]+\\)</url>")
+             (setq sid (match-string 1))
+             (string-match "/\\([0-9/]+\\)\\(.shtml\\|$\\)" sid)
+             (setq sid (concat "00/" (match-string 1 sid)))
+             (re-search-forward "<comments>\\([^<]+\\)</comments>")
+             (setq articles (string-to-number (match-string 1)))
+             (setq gname (concat description " (" sid ")"))
+             (if (setq elem (assoc gname nnslashdot-groups))
+                 (setcar (cdr elem) articles)
+               (push (list gname articles sid) nnslashdot-groups))
+             (goto-char (point-max))
+             (widen)))
+         ;; Then do the older groups.
+         (while (> (- nnslashdot-group-number number) 0)
+           (mm-with-unibyte-buffer
+             (let ((case-fold-search t))
+               (nnweb-insert (format nnslashdot-active-url number) t)
+               (goto-char (point-min))
+               (while (re-search-forward
+                       "article.pl\\?sid=\\([^&]+\\).*<b>\\([^<]+\\)</b>"
+                       nil t)
+                 (setq sid (match-string 1)
+                       description
+                       (nnweb-decode-entities-string (match-string 2)))
+                 (forward-line 1)
+                 (when (re-search-forward "<b>\\([0-9]+\\)</b>" nil t)
+                   (setq articles (string-to-number (match-string 1))))
+                 (setq gname (concat description " (" sid ")"))
+                 (if (setq elem (assoc gname nnslashdot-groups))
+                     (setcar (cdr elem) articles)
+                   (push (list gname articles sid) nnslashdot-groups)))))
+           (incf number 30)))
+      (search-failed (nnslashdot-lose why)))
     (nnslashdot-write-groups)
     (nnslashdot-generate-active)
     t))
-
+  
 (deffoo nnslashdot-request-newgroups (date &optional server)
   (nnslashdot-possibly-change-server nil server)
   (nnslashdot-generate-active)
 
 (deffoo nnslashdot-request-post (&optional server)
   (nnslashdot-possibly-change-server nil server)
-  (let ((sid (message-fetch-field "newsgroups"))
+  (let ((sid (nnslashdot-sid-strip (message-fetch-field "newsgroups")))
        (subject (message-fetch-field "subject"))
        (references (car (last (split-string
                                (message-fetch-field "references")))))
          (insert "</blockquote>\n")
          (setq quoted nil)))
       (forward-line 1))
+    (goto-char (point-min))
+    (while (re-search-forward "^ *\n" nil t)
+      (replace-match "<p>\n"))
     (widen)
     (when (message-goto-signature)
       (forward-line -1)
        ("postercomment" . ,body)
        ("posttype" . "html")))))
 
+(deffoo nnslashdot-request-delete-group (group &optional force server)
+  (nnslashdot-possibly-change-server group server)
+  (setq nnslashdot-groups (delq (assoc group nnslashdot-groups)
+                               nnslashdot-groups))
+  (nnslashdot-write-groups))
+
+(deffoo nnslashdot-request-close ()
+  (setq nnslashdot-headers nil
+       nnslashdot-groups nil))
+
 (nnoo-define-skeleton nnslashdot)
 
 ;;; Internal functions
 (defun nnslashdot-read-groups ()
   (let ((file (expand-file-name "groups" nnslashdot-directory)))
     (when (file-exists-p file)
-      (with-temp-buffer
+      (mm-with-unibyte-buffer
        (insert-file-contents file)
        (goto-char (point-min))
        (setq nnslashdot-groups (read (current-buffer)))))))
             (format " *nnslashdot %s*" server))))))
 
 (defun nnslashdot-date-to-date (sdate)
-  (let ((elem (delete "" (split-string sdate))))
-    (concat (substring (nth 0 elem) 0 3) " "
-           (substring (nth 1 elem) 0 3) " "
-           (substring (nth 2 elem) 0 2) " "
-           (substring (nth 3 elem) 1 6) " "
-           (format-time-string "%Y") " "
-           (nth 4 elem))))
+  (condition-case err
+      (let ((elem (delete "" (split-string sdate))))
+       (concat (substring (nth 0 elem) 0 3) " "
+               (substring (nth 1 elem) 0 3) " "
+               (substring (nth 2 elem) 0 2) " "
+               (substring (nth 3 elem) 1 6) " "
+               (format-time-string "%Y") " "
+               (nth 4 elem)))
+    (error "")))
 
 (defun nnslashdot-generate-active ()
   (save-excursion
       (insert (prin1-to-string (car elem))
              " " (number-to-string (cadr elem)) " 1 y\n"))))
 
+(defun nnslashdot-lose (why)
+  (error "Slashdot HTML has changed; please get a new version of nnslashdot"))
+
+;(defun nnslashdot-sid-strip (sid)
+;  (if (string-match "^00/" sid)
+;      (substring sid (match-end 0))
+;    sid))
+
+(defalias 'nnslashdot-sid-strip 'identity)
+
 (provide 'nnslashdot)
 
 ;;; nnslashdot.el ends here
index ace0c9a..140fe5e 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnsoup.el --- SOUP access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;     Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -27,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'gnus-soup)
          ("/tmp/"))
   "*Where nnsoup will store temporary files.")
 
-(defvoo nnsoup-replies-directory (concat nnsoup-directory "replies/")
+(defvoo nnsoup-replies-directory (expand-file-name "replies/" nnsoup-directory)
   "*Directory where outgoing packets will be composed.")
 
-(defvoo nnsoup-replies-format-type ?n
+(defvoo nnsoup-replies-format-type ?u  ;; u is USENET news format.
   "*Format of the replies packages.")
 
 (defvoo nnsoup-replies-index-type ?n
   "*Index type of the replies packages.")
 
-(defvoo nnsoup-active-file (concat nnsoup-directory "active")
+(defvoo nnsoup-active-file (expand-file-name "active" nnsoup-directory)
   "Active file.")
 
 (defvoo nnsoup-packer "tar cf - %s | gzip > $HOME/Soupin%d.tgz"
@@ -255,7 +258,7 @@ backend for the messages.")
                  (nth 1 (nnsoup-article-to-area
                          article nnsoup-current-group))))))
       (cond ((= kind ?m) 'mail)
-           ((= kind ?n) 'news)
+           ((= kind ?n) 'news) 
            (t 'unknown)))))
 
 (deffoo nnsoup-close-group (group &optional server)
@@ -313,7 +316,7 @@ backend for the messages.")
       (setq info (pop infolist)
            range-list (gnus-uncompress-range (car info))
            prefix (gnus-soup-area-prefix (nth 1 info)))
-      (when ;; All the articles in this file are marked for expiry.
+      (when;; All the articles in this file are marked for expiry.
          (and (or (setq mod-time (nth 5 (file-attributes
                                          (nnsoup-file prefix))))
                   (setq mod-time (nth 5 (file-attributes
@@ -422,12 +425,15 @@ backend for the messages.")
            (setq cur-prefix (nnsoup-next-prefix))
            (nnheader-message 5 "Incorporating file %s..." cur-prefix)
            (when (file-exists-p
-                  (setq file (concat nnsoup-tmp-directory
-                                     (gnus-soup-area-prefix area) ".IDX")))
+                  (setq file
+                        (expand-file-name
+                         (concat (gnus-soup-area-prefix area) ".IDX")
+                         nnsoup-tmp-directory)))
              (rename-file file (nnsoup-file cur-prefix)))
            (when (file-exists-p
-                  (setq file (concat nnsoup-tmp-directory
-                                     (gnus-soup-area-prefix area) ".MSG")))
+                  (setq file (expand-file-name
+                              (concat (gnus-soup-area-prefix area) ".MSG")
+                              nnsoup-tmp-directory)))
              (rename-file file (nnsoup-file cur-prefix t))
              (gnus-soup-set-area-prefix area cur-prefix)
              ;; Find the number of new articles in this area.
@@ -476,7 +482,8 @@ backend for the messages.")
     (goto-char (point-min))
     (cond
      ;; rnews batch format
-     ((= format ?n)
+     ((or (= format ?u)
+         (= format ?n)) ;; Gnus back compatibility.
       (while (looking-at "^#! *rnews \\(+[0-9]+\\) *$")
        (forward-line 1)
        (push (list
@@ -530,17 +537,19 @@ backend for the messages.")
   (let* ((file (concat prefix (if message ".MSG" ".IDX")))
         (buffer-name (concat " *nnsoup " file "*")))
     (or (get-buffer buffer-name)       ; File already loaded.
-       (when (file-exists-p (concat nnsoup-directory file))
+       (when (file-exists-p (expand-file-name file nnsoup-directory))
          (save-excursion               ; Load the file.
            (set-buffer (get-buffer-create buffer-name))
            (buffer-disable-undo)
            (push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers)
-           (nnheader-insert-file-contents (concat nnsoup-directory file))
+           (nnheader-insert-file-contents
+            (expand-file-name file nnsoup-directory))
            (current-buffer))))))
 
 (defun nnsoup-file (prefix &optional message)
   (expand-file-name
-   (concat nnsoup-directory prefix (if message ".MSG" ".IDX"))))
+   (concat prefix (if message ".MSG" ".IDX"))
+   nnsoup-directory))
 
 (defun nnsoup-message-buffer (prefix)
   (nnsoup-index-buffer prefix 'msg))
@@ -590,7 +599,7 @@ backend for the messages.")
                (let ((format (gnus-soup-encoding-format
                               (gnus-soup-area-encoding (nth 1 area)))))
                  (goto-char end)
-                 (when (or (= format ?n) (= format ?m))
+                 (when (or (= format ?u) (= format ?n) (= format ?m))
                    (setq end (progn (forward-line -1) (point))))))
            (set-buffer msg-buf))
          (widen)
@@ -721,7 +730,7 @@ backend for the messages.")
   (unless nnsoup-replies-list
     (setq nnsoup-replies-list
          (gnus-soup-parse-replies
-          (concat nnsoup-replies-directory "REPLIES"))))
+          (expand-file-name "REPLIES" nnsoup-replies-directory))))
   (let ((replies nnsoup-replies-list))
     (while (and replies
                (not (string= kind (gnus-soup-reply-kind (car replies)))))
@@ -766,13 +775,13 @@ backend for the messages.")
       (if (not (setq elem (assoc group active)))
          (push (list group (cons 1 lines)
                      (list (cons 1 lines)
-                           (vector ident group "ncm" "" lines)))
+                           (vector ident group "ucm" "" lines)))
                active)
        (nconc elem
               (list
                (list (cons (1+ (setq min (cdadr elem)))
                            (+ min lines))
-                     (vector ident group "ncm" "" lines))))
+                     (vector ident group "ucm" "" lines))))
        (setcdr (cadr elem) (+ min lines)))
       (setq files (cdr files)))
     (nnheader-message 5 "")
@@ -800,7 +809,8 @@ backend for the messages.")
     ;; Sort and delete the files.
     (setq non-files (sort non-files 'string<))
     (map-y-or-n-p "Delete file %s? "
-                 (lambda (file) (delete-file (concat nnsoup-directory file)))
+                 (lambda (file) (delete-file
+                                 (expand-file-name file nnsoup-directory)))
                  non-files)))
 
 (provide 'nnsoup)
index 07b0b80..9463d63 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nnspool.el --- spool access for GNU Emacs
-;; Copyright (C) 198,998,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
+
+;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
+;;     2000 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -27,6 +29,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nnheader)
 (require 'nntp)
 (require 'nnoo)
@@ -137,8 +141,9 @@ there.")
              (inline (nnheader-insert-head file))
              (goto-char beg)
              (if (search-forward "\n\n" nil t)
-                 (progn (forward-char -1)
-                        (insert ".\n"))
+                 (progn
+                   (forward-char -1)
+                   (insert ".\n"))
                (goto-char (point-max))
                (if (bolp)
                    (insert ".\n")
@@ -148,7 +153,7 @@ there.")
            (and do-message
                 (zerop (% (incf count) 20))
                 (nnheader-message 5 "nnspool: Receiving headers... %d%%"
-                         (/ (* count 100) number))))
+                                  (/ (* count 100) number))))
 
          (when do-message
            (nnheader-message 5 "nnspool: Receiving headers...done"))
@@ -298,8 +303,8 @@ there.")
                             (read (current-buffer)))
                           seconds))
                      (push (buffer-substring
-                                         (match-beginning 1) (match-end 1))
-                                        groups)
+                            (match-beginning 1) (match-end 1))
+                           groups)
                      (zerop (forward-line -1))))
          (erase-buffer)
          (while groups
index 1f3e23d..05147ed 100644 (file)
@@ -1,5 +1,7 @@
 ;;; nntp.el --- nntp access for Gnus
-;;; Copyright (C) 1987-90,92-99 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996,
+;;        1997, 1998, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Katsumi Yamaoka <yamaoka@jpl.org>
@@ -26,6 +28,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nnheader)
 (require 'nnoo)
 (require 'gnus-util)
 (defvoo nntp-port-number "nntp"
   "Port number on the physical nntp server.")
 
+(defvoo nntp-list-options nil
+  "List of newsgroup name used for a option of the LIST command to
+restrict the listing output to only the specified newsgroups.
+Each newsgroup name can be a shell-style wildcard, for instance,
+\"fj.*\", \"japan.*\", etc.  Fortunately, if the server can accept
+such a option, it will probably make gnus run faster.  You may
+use it as a server variable as follows:
+
+\(setq gnus-select-method
+      '(nntp \"news.somewhere.edu\"
+            (nntp-list-options (\"fj.*\" \"japan.*\"))))")
+
+(defvoo nntp-options-subscribe nil
+  "Regexp matching the newsgroup names which will be subscribed
+unconditionally.  It may be effective as well as `nntp-list-options'
+even though the server could not accept a shell-style wildcard as a
+option of the LIST command.  You may use it as a server variable as
+follows:
+
+\(setq gnus-select-method
+      '(nntp \"news.somewhere.edu\"
+            (nntp-options-subscribe \"^fj\\\\.\\\\|^japan\\\\.\")))")
+
+(defvoo nntp-options-not-subscribe nil
+  "Regexp matching the newsgroup names which will not be subscribed
+unconditionally.  It may be effective as well as `nntp-list-options'
+even though the server could not accept a shell-style wildcard as a
+option of the LIST command.  You may use it as a server variable as
+follows:
+
+\(setq gnus-select-method
+      '(nntp \"news.somewhere.edu\"
+            (nntp-options-not-subscribe \"\\\\.binaries\\\\.\")))")
+
 (defvoo nntp-server-opened-hook '(nntp-send-mode-reader)
   "*Hook used for sending commands to the server at startup.
 The default value is `nntp-send-mode-reader', which makes an innd
@@ -48,10 +86,10 @@ server spawn an nnrpd server.")
 It is called with no parameters.")
 
 (defvoo nntp-server-action-alist
-  '(("nntpd 1\\.5\\.11t"
-     (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader))
-    ("NNRP server Netscape"
-     (setq nntp-server-list-active-group nil)))
+    '(("nntpd 1\\.5\\.11t"
+       (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader))
+      ("NNRP server Netscape"
+       (setq nntp-server-list-active-group nil)))
   "Alist of regexps to match on server types and actions to be taken.
 For instance, if you want Gnus to beep every time you connect
 to innd, you could say something like:
@@ -172,7 +210,8 @@ server there that you can connect to.  See also
 
 (defvoo nntp-connection-timeout nil
   "*Number of seconds to wait before an nntp connection times out.
-If this variable is nil, which is the default, no timers are set.")
+If this variable is nil, which is the default, no timers are set.
+NOTE: This variable is never seen to work in Emacs 20 and XEmacs 21.")
 
 (defvoo nntp-prepare-post-hook nil
   "*Hook run just before posting an article. It is supposed to be used for
@@ -305,7 +344,7 @@ noticing asynchronous data.")
   (let ((alist nntp-connection-alist)
        (buffer (if (stringp buffer) (get-buffer buffer) buffer))
        process entry)
-    (while (setq entry (pop alist))
+    (while (and alist (setq entry (pop alist)))
       (when (eq buffer (cadr entry))
        (setq process (car entry)
              alist nil)))
@@ -337,17 +376,26 @@ noticing asynchronous data.")
        (save-excursion
          (set-buffer (process-buffer process))
          (erase-buffer)))
-      (when command
-       (nntp-send-string process command))
-      (cond
-       ((eq callback 'ignore)
-       t)
-       ((and callback wait-for)
-       (nntp-async-wait process wait-for buffer decode callback)
-       t)
-       (wait-for
-       (nntp-wait-for process wait-for buffer decode))
-       (t t)))))
+      (condition-case err
+         (progn
+           (when command
+             (nntp-send-string process command))
+           (cond
+            ((eq callback 'ignore)
+             t)
+            ((and callback wait-for)
+             (nntp-async-wait process wait-for buffer decode callback)
+             t)
+            (wait-for
+             (nntp-wait-for process wait-for buffer decode))
+            (t t)))
+       (error 
+        (nnheader-report 'nntp "Couldn't open connection to %s: %s" 
+                         address err))
+       (quit
+        (message "Quit retrieving data from nntp")
+        (signal 'quit nil)
+        nil)))))
 
 (defsubst nntp-send-command (wait-for &rest strings)
   "Send STRINGS to server and wait until WAIT-FOR returns."
@@ -439,36 +487,36 @@ noticing asynchronous data.")
            (nntp-inhibit-erase t)
            article)
        ;; Send HEAD commands.
-      (while (setq article (pop articles))
-       (nntp-send-command
-        nil
-        "HEAD" (if (numberp article)
-                   (int-to-string article)
-                 ;; `articles' is either a list of article numbers
-                 ;; or a list of article IDs.
-                 article))
-       (incf count)
-       ;; Every 400 requests we have to read the stream in
-       ;; order to avoid deadlocks.
-       (when (or (null articles)       ;All requests have been sent.
-                 (zerop (% count nntp-maximum-request)))
-         (nntp-accept-response)
-         (while (progn
-                  (set-buffer buf)
-                  (goto-char last-point)
-                  ;; Count replies.
-                  (while (nntp-next-result-arrived-p)
-                    (setq last-point (point))
-                    (incf received))
-                  (< received count))
-           ;; If number of headers is greater than 100, give
-           ;;  informative messages.
-           (and (numberp nntp-large-newsgroup)
-                (> number nntp-large-newsgroup)
-                (zerop (% received 20))
-                (nnheader-message 6 "NNTP: Receiving headers... %d%%"
-                                  (/ (* received 100) number)))
-           (nntp-accept-response))))
+       (while (setq article (pop articles))
+         (nntp-send-command
+          nil
+          "HEAD" (if (numberp article)
+                     (int-to-string article)
+                   ;; `articles' is either a list of article numbers
+                   ;; or a list of article IDs.
+                   article))
+         (incf count)
+         ;; Every 400 requests we have to read the stream in
+         ;; order to avoid deadlocks.
+         (when (or (null articles)     ;All requests have been sent.
+                   (zerop (% count nntp-maximum-request)))
+           (nntp-accept-response)
+           (while (progn
+                    (set-buffer buf)
+                    (goto-char last-point)
+                    ;; Count replies.
+                    (while (nntp-next-result-arrived-p)
+                      (setq last-point (point))
+                      (incf received))
+                    (< received count))
+             ;; If number of headers is greater than 100, give
+             ;;  informative messages.
+             (and (numberp nntp-large-newsgroup)
+                  (> number nntp-large-newsgroup)
+                  (zerop (% received 20))
+                  (nnheader-message 6 "NNTP: Receiving headers... %d%%"
+                                    (/ (* received 100) number)))
+             (nntp-accept-response))))
        (and (numberp nntp-large-newsgroup)
             (> number nntp-large-newsgroup)
             (nnheader-message 6 "NNTP: Receiving headers...done"))
@@ -485,7 +533,7 @@ noticing asynchronous data.")
   (nntp-possibly-change-group nil server)
   (when (nntp-find-connection-buffer nntp-server-buffer)
     (save-excursion
-      ;; Erase nntp-sever-buffer before nntp-inhibit-erase.
+      ;; Erase nntp-server-buffer before nntp-inhibit-erase.
       (set-buffer nntp-server-buffer)
       (erase-buffer)
       (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
@@ -498,6 +546,7 @@ noticing asynchronous data.")
            (received 0)
            (last-point (point-min))
            (nntp-inhibit-erase t)
+           (buf (nntp-find-connection-buffer nntp-server-buffer))
            (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
        (while groups
          ;; Send the command to the server.
@@ -508,27 +557,42 @@ noticing asynchronous data.")
          (when (or (null groups)       ;All requests have been sent.
                    (zerop (% count nntp-maximum-request)))
            (nntp-accept-response)
-           (while (progn
-                    (goto-char last-point)
-                    ;; Count replies.
-                    (while (re-search-forward "^[0-9]" nil t)
-                      (incf received))
-                    (setq last-point (point))
-                    (< received count))
+           (while (and (gnus-buffer-live-p buf)
+                       (progn
+                         ;; Search `blue moon' in this file for the
+                         ;; reason why set-buffer here.
+                         (set-buffer buf)
+                         (goto-char last-point)
+                         ;; Count replies.
+                         (while (re-search-forward "^[0-9]" nil t)
+                           (incf received))
+                         (setq last-point (point))
+                         (< received count)))
              (nntp-accept-response))))
 
        ;; Wait for the reply from the final command.
+       (unless (gnus-buffer-live-p buf)
+         (error 
+          (nnheader-report 'nntp "Connection to %s is closed." server)))
+       (set-buffer buf)
        (goto-char (point-max))
        (re-search-backward "^[0-9]" nil t)
        (when (looking-at "^[23]")
-         (while (progn
-                  (goto-char (point-max))
-                  (if (not nntp-server-list-active-group)
-                      (not (re-search-backward "\r?\n" (- (point) 3) t))
-                    (not (re-search-backward "^\\.\r?\n" (- (point) 4) t))))
-           (nntp-accept-response)))
+         (while (and (gnus-buffer-live-p buf)
+                     (progn
+                       (set-buffer buf)
+                       (goto-char (point-max))
+                       (if (not nntp-server-list-active-group)
+                           (not (re-search-backward "\r?\n" (- (point) 3) t))
+                         (not (re-search-backward "^\\.\r?\n" 
+                                                  (- (point) 4) t)))))
+                     (nntp-accept-response)))
 
        ;; Now all replies are received.  We remove CRs.
+       (unless (gnus-buffer-live-p buf)
+         (error 
+          (nnheader-report 'nntp "Connection to %s is closed." server)))
+       (set-buffer buf)
        (goto-char (point-min))
        (while (search-forward "\r" nil t)
          (replace-match "" t t))
@@ -725,8 +789,40 @@ noticing asynchronous data.")
       (nntp-kill-buffer (process-buffer process)))))
 
 (deffoo nntp-request-list (&optional server)
+  "List active groups.  If `nntp-list-options' is non-nil, the listing
+output from the server will be restricted to the specified newsgroups.
+If `nntp-options-subscribe' is non-nil, remove newsgroups that do not
+match the regexp.  If `nntp-options-not-subscribe' is non-nil, remove
+newsgroups that match the regexp."
   (nntp-possibly-change-group nil server)
-  (nntp-send-command-and-decode "\r?\n\\.\r?\n" "LIST"))
+  (with-current-buffer nntp-server-buffer
+    (prog1
+       (if (not nntp-list-options)
+           (nntp-send-command-and-decode "\r?\n\\.\r?\n" "LIST")
+         (let ((options (if (consp nntp-list-options)
+                            nntp-list-options
+                          (list nntp-list-options)))
+               (ret t))
+           (erase-buffer)
+           (while options
+             (goto-char (point-max))
+             (narrow-to-region (point) (point))
+             (setq ret (and ret
+                            (nntp-send-command-nodelete
+                             "\r?\n\\.\r?\n"
+                             (format "LIST ACTIVE %s" (car options))))
+                   options (cdr options))
+             (nntp-decode-text))
+           (widen)
+           ret))
+      (when (and (stringp nntp-options-subscribe)
+                (not (string-equal "" nntp-options-subscribe)))
+       (goto-char (point-min))
+       (keep-lines nntp-options-subscribe))
+      (when (and (stringp nntp-options-not-subscribe)
+                (not (string-equal "" nntp-options-not-subscribe)))
+       (goto-char (point-min))
+       (flush-lines nntp-options-subscribe)))))
 
 (deffoo nntp-request-list-newsgroups (&optional server)
   (nntp-possibly-change-group nil server)
@@ -788,7 +884,7 @@ and a password.
 If SEND-IF-FORCE, only send authinfo to the server if the
 .authinfo file has the FORCE token."
   (let* ((list (gnus-parse-netrc nntp-authinfo-file))
-        (alist (gnus-netrc-machine list nntp-address))
+        (alist (gnus-netrc-machine list nntp-address "nntp"))
         (force (gnus-netrc-get alist "force"))
         (user (or (gnus-netrc-get alist "login") nntp-authinfo-user))
         (passwd (gnus-netrc-get alist "password")))
@@ -800,13 +896,14 @@ If SEND-IF-FORCE, only send authinfo to the server if the
       (unless (member user '(nil ""))
        (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
        (when t                         ;???Should check if AUTHINFO succeeded
-      (nntp-send-command
-       "^2.*\r?\n" "AUTHINFO PASS"
-       (or passwd
-          nntp-authinfo-password
-          (setq nntp-authinfo-password
-                    (mail-source-read-passwd (format "NNTP (%s@%s) password: "
-                                                user nntp-address))))))))))
+         (nntp-send-command
+          "^2.*\r?\n" "AUTHINFO PASS"
+          (or passwd
+              nntp-authinfo-password
+              (setq nntp-authinfo-password
+                    (mail-source-read-passwd
+                     (format "NNTP (%s@%s) password: "
+                             user nntp-address))))))))))
 
 (defun nntp-send-nosy-authinfo ()
   "Send the AUTHINFO to the nntp server."
@@ -816,7 +913,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
       (when t                          ;???Should check if AUTHINFO succeeded
        (nntp-send-command "^2.*\r?\n" "AUTHINFO PASS"
                           (mail-source-read-passwd "NNTP (%s@%s) password: "
-                                              user nntp-address))))))
+                                                   user nntp-address))))))
 
 (defun nntp-send-authinfo-from-file ()
   "Send the AUTHINFO to the nntp server.
@@ -875,9 +972,15 @@ password contained in '~/.nntp-authinfo'."
          (condition-case ()
              (funcall nntp-open-connection-function pbuffer)
            (error nil)
-           (quit nil))))
+           (quit
+            (message "Quit opening connection")
+            (nntp-kill-buffer pbuffer)
+            (signal 'quit nil)
+            nil))))
     (when timer
       (nnheader-cancel-timer timer))
+    (unless process
+      (nntp-kill-buffer pbuffer))
     (when (and (buffer-name pbuffer)
               process)
       (process-kill-without-query process)
@@ -985,7 +1088,7 @@ password contained in '~/.nntp-authinfo'."
       (if (memq (following-char) '(?4 ?5))
          ;; wants credentials?
          (if (looking-at "480")
-             (nntp-handle-authinfo nntp-process-to-buffer)
+             (nntp-handle-authinfo process)
            ;; report error message.
            (nntp-snarf-error-message)
            (nntp-do-callback nil))
@@ -1080,7 +1183,9 @@ password contained in '~/.nntp-authinfo'."
       (delete-char 2))
     ;; Delete status line.
     (goto-char (point-min))
-    (delete-region (point) (progn (forward-line 1) (point)))
+    (while (looking-at "[1-5][0-9][0-9] .*\n")
+      ;; For some unknown reason, there is more than one status line.
+      (delete-region (point) (progn (forward-line 1) (point))))
     ;; Remove "." -> ".." encoding.
     (while (search-forward "\n.." nil t)
       (delete-char -1))))
@@ -1126,7 +1231,7 @@ password contained in '~/.nntp-authinfo'."
      (car (last articles)) 'wait)
 
     (goto-char (point-min))
-    (when (looking-at "[1-5][0-9][0-9] ")
+    (when (looking-at "[1-5][0-9][0-9] .*\n")
       (delete-region (point) (progn (forward-line 1) (point))))
     (while (search-forward "\r" nil t)
       (replace-match "" t t))
@@ -1173,16 +1278,16 @@ password contained in '~/.nntp-authinfo'."
                    (zerop (% count nntp-maximum-request)))
 
            (nntp-accept-response)
-           ;; On some Emacs versions the preceding function has
-           ;; a tendency to change the buffer.  Perhaps.  It's
-           ;; quite difficult to reproduce, because it only
-           ;; seems to happen once in a blue moon.
+           ;; On some Emacs versions the preceding function has a
+           ;; tendency to change the buffer.  Perhaps.  It's quite
+           ;; difficult to reproduce, because it only seems to happen
+           ;; once in a blue moon.
            (set-buffer process-buffer)
            (while (progn
                     (goto-char (or last-point (point-min)))
                     ;; Count replies.
-                    (while (re-search-forward "^[0-9][0-9][0-9] " nil t)
-                      (setq received (1+ received)))
+                    (while (re-search-forward "^[0-9][0-9][0-9] .*\n" nil t)
+                      (incf received))
                     (setq last-point (point))
                     (< received count))
              (nntp-accept-response)
@@ -1194,7 +1299,10 @@ password contained in '~/.nntp-authinfo'."
          (set-buffer process-buffer)
          ;; Wait for the reply from the final command.
          (goto-char (point-max))
-         (re-search-backward "^[0-9][0-9][0-9] " nil t)
+         (while (not (re-search-backward "^[0-9][0-9][0-9] " nil t))
+           (nntp-accept-response)
+           (set-buffer process-buffer)
+           (goto-char (point-max)))
          (when (looking-at "^[23]")
            (while (progn
                     (goto-char (point-max))
@@ -1277,6 +1385,7 @@ password contained in '~/.nntp-authinfo'."
                  "nntpd" buffer nntp-telnet-command nntp-telnet-switches)))
          (case-fold-search t))
       (when (memq (process-status proc) '(open run))
+       (nntp-wait-for-string "^r?telnet")
        (process-send-string proc "set escape \^X\n")
        (cond
         ((and nntp-open-telnet-envuser nntp-telnet-user-name)
@@ -1306,7 +1415,7 @@ password contained in '~/.nntp-authinfo'."
        (beginning-of-line)
        (delete-region (point-min) (point))
        (process-send-string proc "\^]")
-       (nntp-wait-for-string "^telnet")
+       (nntp-wait-for-string "^r?telnet")
        (process-send-string proc "mode character\n")
        (accept-process-output proc 1)
        (sit-for 1)
index b2ff2bf..f4dd670 100644 (file)
@@ -1,5 +1,5 @@
-;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system -*- coding: iso-latin-1 -*-
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -29,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 
 (require 'nnoo)
 (require 'message)
 (require 'gnus)
 (require 'nnmail)
 (require 'mm-util)
-(require 'nnweb)
 (eval-when-compile
   (ignore-errors
-    (require 'w3)
-    (require 'url)
-    (require 'w3-forms)))
+    (require 'nnweb)))
 ;; Report failure to find w3 at load time if appropriate.
-(eval '(progn
-        (require 'w3)
-        (require 'url)
-        (require 'w3-forms)))
+(eval '(require 'nnweb))
 
 (nnoo-declare nnultimate)
 
@@ -62,6 +57,8 @@
 (defvoo nnultimate-groups nil)
 (defvoo nnultimate-headers nil)
 (defvoo nnultimate-articles nil)
+(defvar nnultimate-table-regexp 
+  "postings.*editpost\\|forumdisplay\\|Forum[0-9]+/HTML\\|getbio")
 
 ;;; Interface functions
 
@@ -80,6 +77,8 @@
           (old-total (or (nth 6 entry) 1))
           (furl "forumdisplay.cgi?action=topics&number=%d&DaysPrune=1000")
           (furls (list (concat nnultimate-address (format furl sid))))
+          (nnultimate-table-regexp
+           "postings.*editpost\\|forumdisplay\\|getbio")
           headers article subject score from date lines parent point
           contents tinfo fetchers map elem a href garticles topic old-max
           inc datel table string current-page total-contents pages
@@ -88,7 +87,8 @@
       (while (and (setq article (car articles))
                  map)
        (while (and map
-                   (> article (caar map)))
+                   (or (> article (caar map))
+                       (< (cadar map) (caar map))))
          (pop map))
        (when (setq mmap (car map))
          (setq farticle -1)
            (set-buffer nntp-server-buffer)
            (erase-buffer))
        (setq nnultimate-articles nil)
-       (with-temp-buffer
+       (mm-with-unibyte-buffer
          (dolist (elem fetchers)
            (setq pages 1
                  current-page 1
                                      "-" (number-to-string current-page)
                                      (match-string 0 href))))
              (goto-char (point-min))
-             (setq contents (w3-parse-buffer (current-buffer)))
+             (setq contents
+                   (ignore-errors (w3-parse-buffer (current-buffer))))
              (setq table (nnultimate-find-forum-table contents))
              (setq string (mapconcat 'identity (nnweb-text table) ""))
              (when (string-match "topic is \\([0-9]\\) pages" string)
            ;;(setq total-contents (nreverse total-contents))
            (dolist (art (cdr elem))
              (if (not (nth (1- (cdr art)) total-contents))
-                 ();(debug)
+                 ()                    ;(debug)
                (push (list (car art)
                            (nth (1- (cdr art)) total-contents)
                            subject)
              (setq date (substring (car datel) (match-end 0))
                    datel nil))
            (pop datel))
-         (setq date (delete "" (split-string date "[- \n\t\r    ]")))
+         (setq date (delete "" (split-string date "[- \n\t\r \81 \81 \81 ]")))
          (if (or (member "AM" date)
                  (member "PM" date))
              (setq date (format "%s %s %s %s"
        (setq nnultimate-headers (sort headers 'car-less-than-car))
        (save-excursion
          (set-buffer nntp-server-buffer)
-         (erase-buffer)
-         (dolist (header nnultimate-headers)
-           (nnheader-insert-nov (cdr header)))))
+         (mm-with-unibyte-current-buffer
+           (erase-buffer)
+           (dolist (header nnultimate-headers)
+             (nnheader-insert-nov (cdr header))))))
       'nov)))
 
 (deffoo nnultimate-request-group (group &optional server dont-check)
        "211 %d %d %d %s\n" (cadr elem) 1 (cadr elem)
        (prin1-to-string group))))))
 
+(deffoo nnultimate-request-close ()
+  (setq nnultimate-groups-alist nil
+       nnultimate-groups nil))
+
 (deffoo nnultimate-request-article (article &optional group server buffer)
   (nnultimate-possibly-change-server group server)
   (let ((contents (cdr (assq article nnultimate-articles))))
        (goto-char (point-min))
        (insert "Content-Type: text/html\nMIME-Version: 1.0\n")
        (let ((header (cdr (assq article nnultimate-headers))))
-         (nnheader-insert-header header))
+         (mm-with-unibyte-current-buffer
+           (nnheader-insert-header header)))
        (nnheader-report 'nnultimate "Fetched article %s" article)
        (cons group article)))))
 
 (deffoo nnultimate-request-list (&optional server)
   (nnultimate-possibly-change-server nil server)
-  (with-temp-buffer
+  (mm-with-unibyte-buffer
     (nnweb-insert
      (if (string-match "/$" nnultimate-address)
         (concat nnultimate-address "Ultimate.cgi")
         (furls (list (concat nnultimate-address (format furl sid))))
         contents forum-contents furl-fetched a subject href
         garticles topic tinfo old-max inc parse)
-    (with-temp-buffer
+    (mm-with-unibyte-buffer
       (while furls
        (erase-buffer)
        (nnweb-insert (pop furls))
       ;; the group is entered, there's 2 new articles in topic one
       ;; and 1 in topic three.  Then Gnus article number 8-9 be 5-6
       ;; in topic one and 10 will be the 2 in topic three.
-      (dolist (row (reverse forum-contents))
+      (dolist (row (nreverse forum-contents))
        (setq row (nth 2 row))
        (when (setq a (nnweb-parse-find 'a row))
          (setq subject (car (last (nnweb-text a)))
                (setq art (1+ (string-to-number (car artlist)))))
              (pop artlist))
            (setq garticles art))
-         (string-match "/\\([0-9]+\\).html" href)
-         (setq topic (string-to-number (match-string 1 href)))
-         (if (setq tinfo (assq topic topics))
-             (progn
-               (setq old-max (cadr tinfo))
-               (setcar (cdr tinfo) garticles))
-           (setq old-max 0)
-           (push (list topic garticles subject href) topics)
-           (setcar (nthcdr 4 entry) topics))
-         (when (not (= old-max garticles))
-           (setq inc (- garticles old-max))
-           (setq mapping (nconc mapping
-                                (list
-                                 (list
-                                  old-total (1- (incf old-total inc))
-                                  topic (1+ old-max)))))
-           (incf old-max inc)
-           (setcar (nthcdr 5 entry) mapping)
-           (setcar (nthcdr 6 entry) old-total)))))
+         (when garticles
+           (string-match "/\\([0-9]+\\).html" href)
+           (setq topic (string-to-number (match-string 1 href)))
+           (if (setq tinfo (assq topic topics))
+               (progn
+                 (setq old-max (cadr tinfo))
+                 (setcar (cdr tinfo) garticles))
+             (setq old-max 0)
+             (push (list topic garticles subject href) topics)
+             (setcar (nthcdr 4 entry) topics))
+           (when (not (= old-max garticles))
+             (setq inc (- garticles old-max))
+             (setq mapping (nconc mapping
+                                  (list
+                                   (list
+                                    old-total (1- (incf old-total inc))
+                                    topic (1+ old-max)))))
+             (incf old-max inc)
+             (setcar (nthcdr 5 entry) mapping)
+             (setcar (nthcdr 6 entry) old-total))))))
     (setcar (nthcdr 7 entry) current-time)
     (setcar (nthcdr 1 entry) (1- old-total))
     (nnultimate-write-groups)
     (nnultimate-open-server server))
   (unless nnultimate-groups-alist
     (nnultimate-read-groups)
-  (setq nnultimate-groups (cdr (assoc nnultimate-address
-                                     nnultimate-groups-alist)))))
+    (setq nnultimate-groups (cdr (assoc nnultimate-address
+                                       nnultimate-groups-alist)))))
 
 (deffoo nnultimate-open-server (server &optional defs connectionless)
   (nnheader-init-server-buffer)
   (setq nnultimate-groups-alist nil)
   (let ((file (expand-file-name "groups" nnultimate-directory)))
     (when (file-exists-p file)
-      (with-temp-buffer
+      (mm-with-unibyte-buffer
        (insert-file-contents file)
        (goto-char (point-min))
        (setq nnultimate-groups-alist (read (current-buffer)))))))
                     (nth 2 parse))))
     (let ((href (cdr (assq 'href (nth 1 (nnweb-parse-find 'a parse 20)))))
          case-fold-search)
-      (when (and href (string-match
-                      "postings\\|forumdisplay\\|Forum[0-9]+/HTML\\|getbio"
-                                   href))
+      (when (and href (string-match nnultimate-table-regexp href))
        t))))
 
 (provide 'nnultimate)
 
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
 ;;; nnultimate.el ends here
index 8d46ed5..e1f43a0 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnvirtual.el --- virtual newsgroups access for Gnus
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: David Moore <dmoore@ucsd.edu>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -32,6 +33,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+
 (require 'nntp)
 (require 'nnheader)
 (require 'gnus)
@@ -62,8 +64,7 @@ component group will show up when you enter the virtual group.")
 (defvoo nnvirtual-current-group nil)
 
 (defvoo nnvirtual-mapping-table nil
-  "Table of rules on how to map between component group and article number
-to virtual article number.")
+  "Table of rules on how to map between component group and article number to virtual article number.")
 
 (defvoo nnvirtual-mapping-offsets nil
   "Table indexed by component group to an offset to be applied to article numbers in that group.")
@@ -121,47 +122,47 @@ to virtual article number.")
                       (let ((gnus-use-cache t))
                         (setq result (gnus-retrieve-headers
                                       articles cgroup nil))))
-           (set-buffer nntp-server-buffer)
-           ;; If we got HEAD headers, we convert them into NOV
-           ;; headers.  This is slow, inefficient and, come to think
-           ;; of it, downright evil.  So sue me.  I couldn't be
-           ;; bothered to write a header parse routine that could
-           ;; parse a mixed HEAD/NOV buffer.
-           (when (eq result 'headers)
-             (nnvirtual-convert-headers))
-           (goto-char (point-min))
-           (while (not (eobp))
-             (delete-region (point)
-                            (progn
-                              (setq carticle (read nntp-server-buffer))
-                              (point)))
-
-             ;; We remove this article from the articles list, if
-             ;; anything is left in the articles list after going through
-             ;; the entire buffer, then those articles have been
-             ;; expired or canceled, so we appropriately update the
-             ;; component group below.  They should be coming up
-             ;; generally in order, so this shouldn't be slow.
-             (setq articles (delq carticle articles))
-
-             (setq article (nnvirtual-reverse-map-article cgroup carticle))
-             (if (null article)
-                 ;; This line has no reverse mapping, that means it
-                 ;; was an extra article reference returned by nntp.
-                 (progn
-                   (beginning-of-line)
-                   (delete-region (point) (progn (forward-line 1) (point))))
-               ;; Otherwise insert the virtual article number,
-               ;; and clean up the xrefs.
-               (princ article nntp-server-buffer)
-               (nnvirtual-update-xref-header cgroup carticle
-                                             prefix system-name)
-               (forward-line 1))
-             )
-
-           (set-buffer vbuf)
-           (goto-char (point-max))
-           (insert-buffer-substring nntp-server-buffer))
+             (set-buffer nntp-server-buffer)
+             ;; If we got HEAD headers, we convert them into NOV
+             ;; headers.  This is slow, inefficient and, come to think
+             ;; of it, downright evil.  So sue me.  I couldn't be
+             ;; bothered to write a header parse routine that could
+             ;; parse a mixed HEAD/NOV buffer.
+             (when (eq result 'headers)
+               (nnvirtual-convert-headers))
+             (goto-char (point-min))
+             (while (not (eobp))
+               (delete-region (point)
+                              (progn
+                                (setq carticle (read nntp-server-buffer))
+                                (point)))
+
+               ;; We remove this article from the articles list, if
+               ;; anything is left in the articles list after going through
+               ;; the entire buffer, then those articles have been
+               ;; expired or canceled, so we appropriately update the
+               ;; component group below.  They should be coming up
+               ;; generally in order, so this shouldn't be slow.
+               (setq articles (delq carticle articles))
+
+               (setq article (nnvirtual-reverse-map-article cgroup carticle))
+               (if (null article)
+                   ;; This line has no reverse mapping, that means it
+                   ;; was an extra article reference returned by nntp.
+                   (progn
+                     (beginning-of-line)
+                     (delete-region (point) (progn (forward-line 1) (point))))
+                 ;; Otherwise insert the virtual article number,
+                 ;; and clean up the xrefs.
+                 (princ article nntp-server-buffer)
+                 (nnvirtual-update-xref-header cgroup carticle
+                                               prefix system-name)
+                 (forward-line 1))
+               )
+
+             (set-buffer vbuf)
+             (goto-char (point-max))
+             (insert-buffer-substring nntp-server-buffer))
            ;; Anything left in articles is expired or canceled.
            ;; Could be smart and not tell it about articles already known?
            (when articles
@@ -198,8 +199,9 @@ to virtual article number.")
          (save-excursion
            (when buffer
              (set-buffer buffer))
-           (let ((method (gnus-find-method-for-group
-                          nnvirtual-last-accessed-component-group)))
+           (let* ((gnus-override-method nil)
+                  (method (gnus-find-method-for-group
+                           nnvirtual-last-accessed-component-group)))
              (funcall (gnus-get-function method 'request-article)
                       article nil (nth 1 method) buffer)))))
       ;; This is a fetch by number.
@@ -284,12 +286,11 @@ to virtual article number.")
 
 (deffoo nnvirtual-request-update-mark (group article mark)
   (let* ((nart (nnvirtual-map-article article))
-        (cgroup (car nart))
-        ;; The component group might be a virtual group.
-        (nmark (gnus-request-update-mark cgroup (cdr nart) mark)))
+        (cgroup (car nart)))
     (when (and nart
               (memq mark gnus-auto-expirable-marks)
-              (= mark nmark)
+              ;; The component group might be a virtual group.
+              (= mark (gnus-request-update-mark cgroup (cdr nart) mark))
               (gnus-group-auto-expirable-p cgroup))
       (setq mark gnus-expirable-mark)))
   mark)
@@ -367,8 +368,16 @@ to virtual article number.")
   (nnvirtual-possibly-change-server server)
   (setq nnvirtual-component-groups
        (delete (nnvirtual-current-group) nnvirtual-component-groups))
-  (dolist (group nnvirtual-component-groups)
-    (gnus-group-expire-articles-1 group)))
+  (let (unexpired)
+    (dolist (group nnvirtual-component-groups)
+      (setq unexpired (nconc unexpired
+                            (mapcar
+                             #'(lambda (article)
+                                 (nnvirtual-reverse-map-article
+                                  group article))
+                             (gnus-uncompress-range
+                              (gnus-group-expire-articles-1 group))))))
+    (sort unexpired '<)))
 
 \f
 ;;; Internal functions.
@@ -591,7 +600,7 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
               (aref entry 1)
               (cdr (aref nnvirtual-mapping-offsets group-pos)))
            ))
-      ))
+    ))
 
 
 
@@ -649,7 +658,7 @@ then it is left out of the result."
   "Return an association list of component article numbers.
 These are indexed by elements of nnvirtual-component-groups, based on
 the sequence ARTICLES of virtual article numbers.  ARTICLES should be
-sorted, and can be a compressed sequence. If any of the article
+sorted, and can be a compressed sequence.  If any of the article
 numbers has no corresponding component article, then it is left out of
 the result."
   (when (numberp (cdr-safe articles))
@@ -691,28 +700,28 @@ based on the marks on the component groups."
     ;; Into all-unreads we put (g unreads).
     ;; Into all-marks we put (g marks).
     ;; We also increment cnt and tot here, and compute M (max of sizes).
-    (mapc (lambda (g)
-           (setq active (gnus-activate-group g)
-                 min (car active)
-                 max (cdr active))
-           (when (and active (>= max min) (not (zerop max)))
-             ;; store active information
-             (push (list g (- max min -1) max) actives)
-             ;; collect unread/mark info for later
-             (setq unreads (gnus-list-of-unread-articles g))
-             (setq marks (gnus-info-marks (gnus-get-info g)))
-             (when gnus-use-cache
-               (push (cons 'cache
-                           (gnus-cache-articles-in-group g))
-                     marks))
-             (push (cons g unreads) all-unreads)
-             (push (cons g marks) all-marks)
-             ;; count groups, total #articles, and max size
-             (setq size (- max min -1))
-             (setq cnt (1+ cnt)
-                   tot (+ tot size)
-                   M (max M size))))
-         nnvirtual-component-groups)
+    (mapcar (lambda (g)
+             (setq active (gnus-activate-group g)
+                   min (car active)
+                   max (cdr active))
+             (when (and active (>= max min) (not (zerop max)))
+               ;; store active information
+               (push (list g (- max min -1) max) actives)
+               ;; collect unread/mark info for later
+               (setq unreads (gnus-list-of-unread-articles g))
+               (setq marks (gnus-info-marks (gnus-get-info g)))
+               (when gnus-use-cache
+                 (push (cons 'cache
+                             (gnus-cache-articles-in-group g))
+                       marks))
+               (push (cons g unreads) all-unreads)
+               (push (cons g marks) all-marks)
+               ;; count groups, total #articles, and max size
+               (setq size (- max min -1))
+               (setq cnt (1+ cnt)
+                     tot (+ tot size)
+                     M (max M size))))
+           nnvirtual-component-groups)
 
     ;; Number of articles in the virtual group.
     (setq nnvirtual-mapping-len tot)
index 33bd5ea..5103b55 100644 (file)
@@ -1,8 +1,8 @@
 ;;; nnwarchive.el --- interfacing with web archives
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: news
+;; Keywords: news egroups mail-archive
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 
-;; Note: You need to have `url' and `w3' installed for this backend to
-;; work.
+;; Note: You need to have `url' (w3 0.46) or greater version
+;; installed for this backend to work.
 
-;; A lot of codes stolen from mail-source, nnslashdot, nnweb.
-
-;; Todo: To support more web archives.
-
-;; Known bugs: in w3 0.44, there are two copies of url-maybe-relative.
-;; If it is loaded from w3.el, (load-library "url").  w3 0.45 should
-;; work.
+;; Todo: 
+;; 1. To support more web archives.
+;; 2. Generalize webmail to other MHonArc archive.
 
 ;;; Code:
 
@@ -42,6 +38,7 @@
 (require 'message)
 (require 'gnus-util)
 (require 'gnus)
+(require 'gnus-bcklg)
 (require 'nnmail)
 (require 'mm-util)
 (require 'mail-source)
 
 (nnoo-declare nnwarchive)
 
-(eval-and-compile
-  (defvar nnwarchive-type-definition
-    '((egroups
-       (open-url 
-       "http://www.egroups.com/register?method=loginAction&email=%s&password=%s" 
-       login passwd)
-       (list-url 
-       "http://www.egroups.com/UserGroupsPage?")
-       (list-dissect . nnwarchive-egroups-list)
-       (list-groups . nnwarchive-egroups-list-groups)
-       (xover-url 
-       "http://www.egroups.com/group/%s/?fetchForward=1&start=%d" group start)
-       (xover-last-url 
-       "http://www.egroups.com/group/%s/?fetchForward=1" group)
-       (xover-page-size . 13)
-       (xover-dissect . nnwarchive-egroups-xover)
-       (article-url 
-       "http://www.egroups.com/group/%s/%d.html?raw=1" group article)
-       (article-dissect . nnwarchive-egroups-article)))))
-  
-(eval-and-compile
-  (defvar nnwarchive-short-names
-    '(login passwd)))
+(defvar nnwarchive-type-definition
+  '((egroups
+     (address . "www.egroups.com")
+     (open-url 
+      "http://www.egroups.com/login.cgi?&login_email=%s&login_password=%s" 
+      nnwarchive-login nnwarchive-passwd)
+     (list-url 
+      "http://www.egroups.com/mygroups")
+     (list-dissect . nnwarchive-egroups-list)
+     (list-groups . nnwarchive-egroups-list-groups)
+     (xover-url 
+      "http://www.egroups.com/messages/%s/%d" group aux)
+     (xover-last-url 
+      "http://www.egroups.com/messages/%s/" group)
+     (xover-page-size . 13)
+     (xover-dissect . nnwarchive-egroups-xover)
+     (article-url 
+      "http://www.egroups.com/message/%s/%d?source=1" group article)
+     (article-dissect . nnwarchive-egroups-article)
+     (authentication . t)
+     (article-offset . 0)
+     (xover-files . nnwarchive-egroups-xover-files))
+    (mail-archive
+     (address . "www.mail-archive.com")
+     (open-url)
+     (list-url 
+      "http://www.mail-archive.com/lists.html")
+     (list-dissect . nnwarchive-mail-archive-list)
+     (list-groups . nnwarchive-mail-archive-list-groups)
+     (xover-url 
+      "http://www.mail-archive.com/%s/mail%d.html" group aux)
+     (xover-last-url 
+      "http://www.mail-archive.com/%s/maillist.html" group)
+     (xover-page-size)
+     (xover-dissect . nnwarchive-mail-archive-xover)
+     (article-url 
+      "http://www.mail-archive.com/%s/msg%05d.html" group article1)
+     (article-dissect . nnwarchive-mail-archive-article)
+     (xover-files . nnwarchive-mail-archive-xover-files)
+     (authentication)
+     (article-offset . 1))))
+
+(defvar nnwarchive-default-type 'egroups)
 
 (defvoo nnwarchive-directory (nnheader-concat gnus-directory "warchive/")
   "Where nnwarchive will save its files.")
 
-(eval-and-compile
-  (defvoo nnwarchive-type 'egroups
-    "The type of nnwarchive."))
+(defvoo nnwarchive-type nil
+    "The type of nnwarchive.")
 
-(defvoo nnwarchive-address "egroups.com"
+(defvoo nnwarchive-address ""
   "The address of nnwarchive.")
 
 (defvoo nnwarchive-login nil
 
 (defvoo nnwarchive-headers-cache nil)
 
-(defvoo nnwarchive-opened nil)
+(defvoo nnwarchive-authentication nil)
+
+(defvoo nnwarchive-nov-is-evil nil)
 
 (defconst nnwarchive-version "nnwarchive 1.0")
 
 ;;; Internal variables
 
-(defvar nnwarchive-open-url nil)
-(defvar nnwarchive-open-dissect nil)
+(defvoo nnwarchive-open-url nil)
+(defvoo nnwarchive-open-dissect nil)
+
+(defvoo nnwarchive-list-url nil)
+(defvoo nnwarchive-list-dissect nil)
+(defvoo nnwarchive-list-groups nil)
 
-(defvar nnwarchive-list-url nil)
-(defvar nnwarchive-list-dissect nil)
-(defvar nnwarchive-list-groups nil)
+(defvoo nnwarchive-xover-files nil)
+(defvoo nnwarchive-xover-url nil)
+(defvoo nnwarchive-xover-last-url nil)
+(defvoo nnwarchive-xover-dissect nil)
+(defvoo nnwarchive-xover-page-size nil)
 
-(defvar nnwarchive-xover-url nil)
-(defvar nnwarchive-xover-last-url nil)
-(defvar nnwarchive-xover-dissect nil)
-(defvar nnwarchive-xover-page-size nil)
+(defvoo nnwarchive-article-url nil)
+(defvoo nnwarchive-article-dissect nil)
+(defvoo nnwarchive-xover-files nil)
+(defvoo nnwarchive-article-offset 0)
 
-(defvar nnwarchive-article-url nil)
-(defvar nnwarchive-article-dissect nil)
+(defvoo nnwarchive-buffer nil)
 
-(defvar nnwarchive-buffer nil)
+(defvoo nnwarchive-keep-backlog 300)
+(defvar nnwarchive-backlog-articles nil)
+(defvar nnwarchive-backlog-hashtb nil)
+
+(defvoo nnwarchive-headers nil)
 
-(defvar nnwarchive-headers nil)
 
 ;;; Interface functions
 
 (nnoo-define-basics nnwarchive)
 
-(eval-and-compile
-  (defun nnwarchive-bind-1 ()
-    (let ((defaults (cdr (assq nnwarchive-type nnwarchive-type-definition)))
-         (short-names nnwarchive-short-names)
-         default bind)
-      (while (setq default (pop defaults))
-       (push (list (intern (concat "nnwarchive-" (symbol-name (car default))))
-                   (list 'quote (cdr default))) bind))
-      (while (setq default (pop short-names))
-       (push (list default
-                   (intern (concat "nnwarchive-" 
-                                   (symbol-name default)))) 
-             bind))
-      bind)))
-
-(defmacro nnwarchive-bind (&rest body)
-  "Return a `let' form that binds all variables in TYPE.
-Read `mail-source-bind' for details."
-  `(let ,(nnwarchive-bind-1)
-     ,@body))
-
-(put 'nnwarchive-bind 'lisp-indent-function 0)
-(put 'nnwarchive-bind 'edebug-form-spec '(form body))
+(defun nnwarchive-set-default (type)
+  (let ((defs (cdr (assq type nnwarchive-type-definition)))
+       def)
+    (dolist (def defs)
+      (set (intern (concat "nnwarchive-" (symbol-name (car def)))) 
+          (cdr def)))))
+
+(defmacro nnwarchive-backlog (&rest form)
+  `(let ((gnus-keep-backlog nnwarchive-keep-backlog)
+        (gnus-backlog-buffer 
+         (format " *nnwarchive backlog %s*" nnwarchive-address))
+        (gnus-backlog-articles nnwarchive-backlog-articles)
+        (gnus-backlog-hashtb nnwarchive-backlog-hashtb))
+     (unwind-protect
+        (progn ,@form)
+       (setq nnwarchive-backlog-articles gnus-backlog-articles
+            nnwarchive-backlog-hashtb gnus-backlog-hashtb))))
+(put 'nnwarchive-backlog 'lisp-indent-function 0)
+(put 'nnwarchive-backlog 'edebug-form-spec '(form body))
+
+(defun nnwarchive-backlog-enter-article (group number buffer)
+  (nnwarchive-backlog
+    (gnus-backlog-enter-article group number buffer)))
+
+(defun nnwarchive-get-article (article &optional group server buffer) 
+  (if (numberp article)
+      (if (nnwarchive-backlog
+           (gnus-backlog-request-article group article 
+                                         (or buffer nntp-server-buffer)))
+         (cons group article)
+       (let (contents)
+         (save-excursion
+           (set-buffer nnwarchive-buffer)
+           (goto-char (point-min))
+           (let ((article1 (- article nnwarchive-article-offset)))
+             (nnwarchive-url nnwarchive-article-url))
+           (setq contents (funcall nnwarchive-article-dissect group article)))
+         (when contents
+           (save-excursion
+             (set-buffer (or buffer nntp-server-buffer))
+             (erase-buffer)
+             (insert contents)
+             (nnwarchive-backlog-enter-article group article (current-buffer))
+             (nnheader-report 'nnwarchive "Fetched article %s" article)
+             (cons group article)))))
+    nil))
 
 (deffoo nnwarchive-retrieve-headers (articles &optional group server fetch-old)
   (nnwarchive-possibly-change-server group server)
-  (nnwarchive-bind 
+  (if (or gnus-nov-is-evil nnwarchive-nov-is-evil)
+      (with-temp-buffer
+       (with-current-buffer nntp-server-buffer
+         (erase-buffer))
+       (let ((buf (current-buffer)) b e)
+         (dolist (art articles)
+           (nnwarchive-get-article art group server buf)
+           (setq b (goto-char (point-min)))
+           (if (search-forward "\n\n" nil t)
+               (forward-char -1)
+             (goto-char (point-max)))
+           (setq e (point))
+           (with-current-buffer nntp-server-buffer
+             (insert (format "221 %d Article retrieved.\n" art))
+             (insert-buffer-substring buf b e)
+             (insert ".\n"))))
+       'headers)
     (setq nnwarchive-headers (cdr (assoc group nnwarchive-headers-cache)))
     (save-excursion
       (set-buffer nnwarchive-buffer)
       (erase-buffer)
-      (let (point start starts)
-       (setq starts (nnwarchive-paged (sort articles '<)))
-       (while (setq start (pop starts))
-         (goto-char (point-max))
-         (nnwarchive-url nnwarchive-xover-url))
-       (if nnwarchive-xover-dissect
-           (funcall nnwarchive-xover-dissect))))
+      (funcall nnwarchive-xover-files group articles))
     (save-excursion
       (set-buffer nntp-server-buffer)
       (erase-buffer)
       (let (header)
-       (dolist (art articles)
-         (if (setq header (assq art nnwarchive-headers))
-             (nnheader-insert-nov (cdr header))))))
+      (dolist (art articles)
+       (if (setq header (assq art nnwarchive-headers))
+           (nnheader-insert-nov (cdr header))))))
     (let ((elem (assoc group nnwarchive-headers-cache)))
       (if elem
          (setcdr elem nnwarchive-headers)
        (push (cons group nnwarchive-headers) nnwarchive-headers-cache)))
     'nov))
 
-(deffoo nnwarchive-retrieve-groups (groups &optional server)
-  "Retrieve group info on GROUPS."
-  (nnwarchive-possibly-change-server nil server)
-  (nnwarchive-bind 
-    (if nnwarchive-list-groups
-       (funcall nnwarchive-list-groups groups))
-    (nnwarchive-write-groups)
-    (nnwarchive-generate-active)
-    'active))
-
 (deffoo nnwarchive-request-group (group &optional server dont-check)
   (nnwarchive-possibly-change-server nil server)
-  (nnwarchive-bind 
-    (if nnwarchive-list-groups
-       (funcall nnwarchive-list-groups (list group)))
-    (nnwarchive-write-groups)
-    (let ((elem (assoc group nnwarchive-groups)))
-      (cond
-       ((not elem)
-       (nnheader-report 'nnwarchive "Group does not exist"))
-       (t
-       (nnheader-report 'nnwarchive "Opened group %s" group)
-       (nnheader-insert
-        "211 %d %d %d %s\n" (or (cadr elem) 0) 1 (or (cadr elem) 0)
-        (prin1-to-string group))
-       t)))))
-
-(deffoo nnwarchive-close-group (group &optional server)
-  (nnwarchive-possibly-change-server group server)
-  (nnwarchive-bind
-    (when (gnus-buffer-live-p nnwarchive-buffer)
-      (save-excursion
-       (set-buffer nnwarchive-buffer)
-      (kill-buffer nnwarchive-buffer)))
-    t))
+  (when (and (not dont-check) nnwarchive-list-groups)
+    (funcall nnwarchive-list-groups (list group))
+    (nnwarchive-write-groups))
+  (let ((elem (assoc group nnwarchive-groups)))
+    (cond
+     ((not elem)
+      (nnheader-report 'nnwarchive "Group does not exist"))
+     (t
+      (nnheader-report 'nnwarchive "Opened group %s" group)
+      (nnheader-insert
+       "211 %d %d %d %s\n" (or (cadr elem) 0) 1 (or (cadr elem) 0)
+       (prin1-to-string group))
+      t))))
 
 (deffoo nnwarchive-request-article (article &optional group server buffer)
   (nnwarchive-possibly-change-server group server)
-  (nnwarchive-bind 
-    (let (contents)
-      (save-excursion
-       (set-buffer nnwarchive-buffer)
-       (goto-char (point-min))
-       (nnwarchive-url nnwarchive-article-url)
-       (setq contents (funcall nnwarchive-article-dissect)))
-      (when contents
-       (save-excursion
-         (set-buffer (or buffer nntp-server-buffer))
-         (erase-buffer)
-         (insert contents)
-         (nnheader-report 'nnwarchive "Fetched article %s" article)
-         (cons group article))))))
+  (nnwarchive-get-article article group server buffer))
 
 (deffoo nnwarchive-close-server (&optional server)
   (when (and (nnwarchive-server-opened server)
@@ -243,60 +269,47 @@ Read `mail-source-bind' for details."
     (save-excursion
       (set-buffer nnwarchive-buffer)
       (kill-buffer nnwarchive-buffer)))
+  (nnwarchive-backlog
+    (gnus-backlog-shutdown))
   (nnoo-close-server 'nnwarchive server))
 
 (deffoo nnwarchive-request-list (&optional server)
   (nnwarchive-possibly-change-server nil server)
-  (nnwarchive-bind
-    (save-excursion
-      (set-buffer nnwarchive-buffer)
-      (erase-buffer)
-      (if nnwarchive-list-url
-         (nnwarchive-url nnwarchive-list-url))
-      (if nnwarchive-list-dissect
-         (funcall nnwarchive-list-dissect))
-      (nnwarchive-write-groups)
-      (nnwarchive-generate-active)))
-  'active)
-
-(deffoo nnwarchive-request-newgroups (date &optional server)
-  (nnwarchive-possibly-change-server nil server)
-  (nnwarchive-bind
+  (save-excursion
+    (set-buffer nnwarchive-buffer)
+    (erase-buffer)
+    (if nnwarchive-list-url
+       (nnwarchive-url nnwarchive-list-url))
+    (if nnwarchive-list-dissect
+       (funcall nnwarchive-list-dissect))
     (nnwarchive-write-groups)
     (nnwarchive-generate-active))
-  'active)
-
-(deffoo nnwarchive-asynchronous-p ()
-  nil)
-
-(deffoo nnwarchive-server-opened (&optional server)
-  nnwarchive-opened)
+  t)
 
 (deffoo nnwarchive-open-server (server &optional defs connectionless)
+  (nnoo-change-server 'nnwarchive server defs)
   (nnwarchive-init server)
-  (if (nnwarchive-server-opened server)
-      t
+  (when nnwarchive-authentication
     (setq nnwarchive-login
          (or nnwarchive-login
              (read-string
-              (format "Login at %s: " server)
-              user-mail-address)))
+                (format "Login at %s: " server)
+                user-mail-address)))
     (setq nnwarchive-passwd
          (or nnwarchive-passwd
              (mail-source-read-passwd
-            (format "Password for %s at %s: " nnwarchive-login server))))
-    (nnwarchive-bind 
-      (unless nnwarchive-groups
-       (nnwarchive-read-groups))
-      (save-excursion
-       (set-buffer nnwarchive-buffer)
-       (erase-buffer)
-       (if nnwarchive-open-url
-         (nnwarchive-url nnwarchive-open-url))
-       (if nnwarchive-open-dissect
-           (funcall nnwarchive-open-dissect))
-       (setq nnwarchive-opened t)))
-    t))
+              (format "Password for %s at %s: " 
+                      nnwarchive-login server)))))
+  (unless nnwarchive-groups
+    (nnwarchive-read-groups))
+  (save-excursion
+    (set-buffer nnwarchive-buffer)
+    (erase-buffer)
+    (if nnwarchive-open-url
+       (nnwarchive-url nnwarchive-open-url))
+    (if nnwarchive-open-dissect
+       (funcall nnwarchive-open-dissect)))
+  t)
 
 (nnoo-define-skeleton nnwarchive)
 
@@ -324,13 +337,28 @@ Read `mail-source-bind' for details."
 
 (defun nnwarchive-init (server)
   "Initialize buffers and such."
+  (let ((type (intern server)) (defs nnwarchive-type-definition) def)
+    (cond 
+     ((equal server "")
+      (setq type nnwarchive-default-type))
+     ((assq type nnwarchive-type-definition) t)
+     (t
+      (setq type nil)
+      (while (setq def (pop defs))
+       (when (equal (cdr (assq 'address (cdr def))) server)
+         (setq defs nil)
+         (setq type (car def))))
+      (unless type
+       (error "Undefined server %s" server))))
+    (setq nnwarchive-type type))
   (unless (file-exists-p nnwarchive-directory)
     (gnus-make-directory nnwarchive-directory))
   (unless (gnus-buffer-live-p nnwarchive-buffer)
     (setq nnwarchive-buffer
          (save-excursion
            (nnheader-set-temp-buffer
-            (format " *nnwarchive %s %s*" nnwarchive-type server))))))
+            (format " *nnwarchive %s %s*" nnwarchive-type server)))))
+  (nnwarchive-set-default nnwarchive-type))
 
 (defun nnwarchive-encode-www-form-urlencoded (pairs)
   "Return PAIRS encoded for forms."
@@ -359,50 +387,16 @@ Read `mail-source-bind' for details."
     expr)))
 
 (defun nnwarchive-url (xurl)
-  (let ((url-confirmation-func 'identity))
-    (cond 
-     ((eq (car xurl) 'post)
-      (pop xurl)
-      (nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl))))
-     (t
-      (nnweb-insert (apply 'format (nnwarchive-eval xurl)))))))
-
-(defun nnwarchive-decode-entities ()
-  (goto-char (point-min))
-  (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
-    (replace-match (char-to-string 
-                   (if (eq (aref (match-string 1) 0) ?\#)
-                       (string-to-number (substring (match-string 1) 1))
-                     (or (cdr (assq (intern (match-string 1))
-                                    w3-html-entities))
-                         ?#)))
-                  t t)))
-
-(defun nnwarchive-decode-entities-string (str)
-  (with-temp-buffer
-    (insert str)
-    (nnwarchive-decode-entities)
-    (buffer-substring (point-min) (point-max))))
-
-(defun nnwarchive-remove-markup ()
-  (goto-char (point-min))
-  (while (search-forward "<!--" nil t)
-    (delete-region (match-beginning 0)
-                  (or (search-forward "-->" nil t)
-                      (point-max))))
-  (goto-char (point-min))
-  (while (re-search-forward "<[^>]+>" nil t)
-    (replace-match "" t t)))
-
-(defun nnwarchive-date-to-date (sdate)
-  (let ((elem (split-string sdate)))
-    (concat (substring (nth 0 elem) 0 3) " "
-           (substring (nth 1 elem) 0 3) " "
-           (substring (nth 2 elem) 0 2) " "
-           (substring (nth 3 elem) 1 6) " "
-           (format-time-string "%Y") " "
-           (nth 4 elem))))
-
+  (mm-with-unibyte-current-buffer
+    (let ((url-confirmation-func 'identity)
+         (url-cookie-multiple-line nil))
+      (cond 
+       ((eq (car xurl) 'post)
+       (pop xurl)
+       (nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl))))
+       (t
+       (nnweb-insert (apply 'format (nnwarchive-eval xurl))))))))
+  
 (defun nnwarchive-generate-active ()
   (save-excursion
     (set-buffer nntp-server-buffer)
@@ -430,69 +424,63 @@ Read `mail-source-bind' for details."
        (erase-buffer)
        (nnwarchive-url nnwarchive-xover-last-url)
        (goto-char (point-min))
-       (when (re-search-forward "of \\([0-9]+\\)</title>" nil t)
-       (setq articles (string-to-number (match-string 1)))) 
+       (when (re-search-forward "of \\([0-9]+\\)[ \t\n\r]*</title>" nil t)
+         (setq articles (string-to-number (match-string 1)))) 
        (let ((elem (assoc group nnwarchive-groups)))
-       (if elem
-           (setcar (cdr elem) articles)
-         (push (list group articles "") nnwarchive-groups)))
+         (if elem
+             (setcar (cdr elem) articles)
+           (push (list group articles "") nnwarchive-groups)))
        (setq nnwarchive-headers (cdr (assoc group nnwarchive-headers-cache)))
-      (nnwarchive-egroups-xover)
-      (let ((elem (assoc group nnwarchive-headers-cache)))
-       (if elem
-           (setcdr elem nnwarchive-headers)
-         (push (cons group nnwarchive-headers) nnwarchive-headers-cache)))))))
+       (nnwarchive-egroups-xover group)
+       (let ((elem (assoc group nnwarchive-headers-cache)))
+         (if elem
+             (setcdr elem nnwarchive-headers)
+           (push (cons group nnwarchive-headers) nnwarchive-headers-cache)))))))
 
 (defun nnwarchive-egroups-list ()
   (let ((case-fold-search t)
        group description elem articles)
     (goto-char (point-min))
     (while 
-       (re-search-forward
-        "/group/\\([^/]+\\)/info\\.html[^>]+>[^>]+>[\040\t]*-[\040\t]*\\([^<]+\\)<"
-        nil t)
+       (re-search-forward "href=\"/group/\\([^/\"\> ]+\\)" nil t)
       (setq group (match-string 1)
            description (match-string 2))
-      (forward-line 1)
-      (when (re-search-forward ">\\([0-9]+\\)<" nil t)
-       (setq articles (string-to-number (match-string 1)))) 
       (if (setq elem (assoc group nnwarchive-groups))
-         (setcar (cdr elem) articles)
-       (push (list group articles description) nnwarchive-groups)))
-    (nnwarchive-egroups-list-groups (mapcar 'identity nnwarchive-groups)))
+         (setcar (cdr elem) 0)
+       (push (list group articles description) nnwarchive-groups))))
   t)
 
-(defun nnwarchive-egroups-xover()
-  (let (article subject from date group)
+(defun nnwarchive-egroups-xover (group)
+  (let (article subject from date)
     (goto-char (point-min))
     (while (re-search-forward
-           "<a href=\"/group/\\([^/]+\\)/\\([0-9]+\\)\\.html[^>]+>\\([^<]+\\)<"
+           "<a href=\"/group/\\([^/]+\\)/\\([0-9]+\\)[^>]+>\\([^<]+\\)<"
            nil t)
-         (setq group  (match-string 1)
-               article (string-to-number (match-string 2))
-               subject (match-string 3))
-         (forward-line 1)
-         (unless (assq article nnwarchive-headers)
-           (if (looking-at "<td[^>]+><font[^>]+>\\([^<]+\\)</font>")
-               (setq from (match-string 1)))
-           (forward-line 1)
-           (if (looking-at "<td[^>]+><font[^>]+>\\([^<]+\\)</font>")
-               (setq date (identity (match-string 1))))
-           (push (cons
-                  article
-                  (make-full-mail-header
-                   article 
-                   (nnwarchive-decode-entities-string subject)
-                   (nnwarchive-decode-entities-string from)
-                   date
-                   (concat "<" group "%"
-                           (number-to-string article) 
-                           "@egroup.com>")
-                   ""
-                   0 0 "")) nnwarchive-headers))))
+      (setq group  (match-string 1)
+           article (string-to-number (match-string 2))
+           subject (match-string 3))
+      (forward-line 1)
+      (unless (assq article nnwarchive-headers)
+       (if (looking-at "<td[^>]+><font[^>]+>\\([^<]+\\)</font>")
+           (setq from (match-string 1)))
+       (forward-line 1)
+       (if (looking-at "<td[^>]+><font[^>]+>\\([^<]+\\)</font>")
+           (setq date (identity (match-string 1))))
+       (push (cons
+              article
+              (make-full-mail-header
+               article 
+               (nnweb-decode-entities-string subject)
+               (nnweb-decode-entities-string from)
+               date
+               (concat "<" group "%"
+                       (number-to-string article) 
+                       "@egroup.com>")
+               ""
+               0 0 "")) nnwarchive-headers))))
   nnwarchive-headers)
 
-(defun nnwarchive-egroups-article ()
+(defun nnwarchive-egroups-article (group articles)
   (goto-char (point-min))
   (if (search-forward "<pre>" nil t)
       (delete-region (point-min) (point)))
@@ -501,9 +489,263 @@ Read `mail-source-bind' for details."
       (delete-region (point) (point-max)))
   (goto-char (point-min))
   (while (re-search-forward "<a[^>]+>\\([^<]+\\)</a>" nil t)
-    (replace-match "<\\1>"))
-  (nnwarchive-decode-entities)
-  (buffer-substring (point-min) (point-max)))
+    (replace-match "\\1"))
+  (nnweb-decode-entities)
+  (buffer-string))
+
+(defun nnwarchive-egroups-xover-files (group articles)
+  (let (aux auxs)
+    (setq auxs (nnwarchive-paged (sort articles '<)))
+    (while (setq aux (pop auxs))
+      (goto-char (point-max))
+      (nnwarchive-url nnwarchive-xover-url))
+    (if nnwarchive-xover-dissect
+       (nnwarchive-egroups-xover group))))
+
+;; mail-archive
+
+(defun nnwarchive-mail-archive-list-groups (groups)
+  (save-excursion
+    (let (articles)
+      (set-buffer nnwarchive-buffer)
+      (dolist (group groups)
+       (erase-buffer)
+       (nnwarchive-url nnwarchive-xover-last-url)
+       (goto-char (point-min))
+       (when (re-search-forward "msg\\([0-9]+\\)\\.html" nil t)
+         (setq articles (1+ (string-to-number (match-string 1)))))
+       (let ((elem (assoc group nnwarchive-groups)))
+         (if elem
+             (setcar (cdr elem) articles)
+           (push (list group articles "") nnwarchive-groups)))
+       (setq nnwarchive-headers (cdr (assoc group nnwarchive-headers-cache)))
+       (nnwarchive-mail-archive-xover group)
+       (let ((elem (assoc group nnwarchive-headers-cache)))
+         (if elem
+             (setcdr elem nnwarchive-headers)
+           (push (cons group nnwarchive-headers) 
+                 nnwarchive-headers-cache)))))))
+
+(defun nnwarchive-mail-archive-list ()
+  (let ((case-fold-search t)
+       group description elem articles)
+    (goto-char (point-min))
+    (while (re-search-forward "<a href=\"\\([^/]+\\)/\">\\([^>]+\\)<" nil t)
+      (setq group (match-string 1)
+           description (match-string 2))
+      (forward-line 1)
+      (setq articles 0)
+      (if (setq elem (assoc group nnwarchive-groups))
+         (setcar (cdr elem) articles)
+       (push (list group articles description) nnwarchive-groups))))
+  t)
+
+(defun nnwarchive-mail-archive-xover (group)
+  (let (article subject from date)
+    (goto-char (point-min))
+    (while (re-search-forward
+           "<A[^>]*HREF=\"msg\\([0-9]+\\)\\.html[^>]+>\\([^<]+\\)<"
+           nil t)
+      (setq article (1+ (string-to-number (match-string 1)))
+           subject (match-string 2))
+      (forward-line 1)
+      (unless (assq article nnwarchive-headers)
+       (if (looking-at "<UL><LI><EM>From</EM>:\\([^&]+\\)<\\([^&]+\\)>")
+           (progn
+             (setq from (match-string 1)
+                   date (identity (match-string 2))))
+         (setq from "" date ""))
+       (push (cons
+              article
+              (make-full-mail-header
+               article 
+               (nnweb-decode-entities-string subject)
+               (nnweb-decode-entities-string from)
+               date
+               (format "<%05d%%%s>\n" (1- article) group)
+               ""
+               0 0 "")) nnwarchive-headers))))
+  nnwarchive-headers)
+
+(defun nnwarchive-mail-archive-xover-files (group articles)
+  (unless nnwarchive-headers
+    (erase-buffer)
+    (nnwarchive-url nnwarchive-xover-last-url)
+    (goto-char (point-min))
+    (nnwarchive-mail-archive-xover group))
+  (let ((minart (apply 'min articles))
+       (min (apply 'min (mapcar 'car nnwarchive-headers)))
+       (aux 2))
+    (while (> min minart)
+      (erase-buffer)
+      (nnwarchive-url nnwarchive-xover-url)
+      (nnwarchive-mail-archive-xover group)
+      (setq min (apply 'min (mapcar 'car nnwarchive-headers))))))
+
+(defvar nnwarchive-caesar-translation-table nil
+  "Modified rot13 table. tr/@A-Z[a-z/N-Z[@A-Mn-za-m/.")
+
+(defun nnwarchive-make-caesar-translation-table ()
+  "Create modified rot13 table. tr/@A-Z[a-z/N-Z[@A-Mn-za-m/."
+  (let ((i -1)
+       (table (make-string 256 0))
+       (a (mm-char-int ?a))
+       (A (mm-char-int ?A)))
+    (while (< (incf i) 256)
+      (aset table i i))
+    (concat
+     (substring table 0 (1- A))
+     (substring table (+ A 13) (+ A 27))
+     (substring table (1- A) (+ A 13))
+     (substring table (+ A 27) a)
+     (substring table (+ a 13) (+ a 26))
+     (substring table a (+ a 13))
+     (substring table (+ a 26) 255))))
+
+(defun nnwarchive-from-r13 (from-r13)
+  (when from-r13
+    (with-temp-buffer
+      (insert from-r13)
+      (let ((message-caesar-translation-table
+            (or nnwarchive-caesar-translation-table
+                (setq nnwarchive-caesar-translation-table 
+                      (nnwarchive-make-caesar-translation-table)))))
+       (message-caesar-region (point-min) (point-max))
+       (buffer-string)))))
+
+(defun nnwarchive-mail-archive-article (group article)
+  (let (p refs url mime e 
+         from subject date id 
+         done
+         (case-fold-serch t))
+    (save-restriction
+      (goto-char (point-min))
+      (when (search-forward "X-Head-End" nil t)
+       (beginning-of-line)
+       (narrow-to-region (point-min) (point))
+       (nnweb-decode-entities)
+       (goto-char (point-min))
+       (while (search-forward "<!--X-" nil t)
+         (replace-match ""))
+       (goto-char (point-min))
+       (while (search-forward " -->" nil t)
+         (replace-match ""))
+       (setq from 
+             (or (mail-fetch-field "from")
+                 (nnwarchive-from-r13 
+                  (mail-fetch-field "from-r13"))))
+       (setq date (mail-fetch-field "date"))
+       (setq id (mail-fetch-field "message-id"))
+       (setq subject (mail-fetch-field "subject"))
+       (goto-char (point-max))
+       (widen))
+      (when (search-forward "<ul>" nil t)
+       (forward-line)
+       (delete-region (point-min) (point))
+       (search-forward "</ul>" nil t)
+       (end-of-line)
+       (narrow-to-region (point-min) (point))
+       (nnweb-remove-markup)
+       (nnweb-decode-entities)
+       (goto-char (point-min))
+       (delete-blank-lines)
+       (when from
+         (message-remove-header "from")
+         (goto-char (point-max))
+         (insert "From: " from "\n"))
+       (when subject
+         (message-remove-header "subject")
+         (goto-char (point-max))
+         (insert "Subject: " subject "\n"))
+       (when id
+         (goto-char (point-max))
+         (insert "X-Message-ID: <" id ">\n"))
+       (when date
+         (message-remove-header "date")
+         (goto-char (point-max))
+         (insert "Date: " date "\n"))
+       (goto-char (point-max))
+       (widen)
+       (insert "\n"))
+      (setq p (point)) 
+      (when (search-forward "X-Body-of-Message" nil t)
+       (forward-line)
+       (delete-region p (point))
+       (search-forward "X-Body-of-Message-End" nil t)
+       (beginning-of-line)
+       (save-restriction
+         (narrow-to-region p (point))
+         (goto-char (point-min))
+         (if (> (skip-chars-forward "\040\n\r\t") 0)
+             (delete-region (point-min) (point)))
+         (while (not (eobp))
+           (cond 
+            ((looking-at "<PRE>\r?\n?") 
+             (delete-region (match-beginning 0) (match-end 0))
+             (setq p (point))
+             (when (search-forward "</PRE>" nil t)
+               (delete-region (match-beginning 0) (match-end 0))
+               (save-restriction
+                 (narrow-to-region p (point))
+                 (nnweb-remove-markup)
+                 (nnweb-decode-entities)
+                 (goto-char (point-max)))))
+            ((looking-at "<P><A HREF=\"\\([^\"]+\\)")
+             (setq url (match-string 1))
+             (delete-region (match-beginning 0) 
+                            (progn (forward-line) (point)))
+             ;; I hate to download the url encode it, then immediately 
+             ;; decode it.
+             ;; FixMe: Find a better solution to attach the URL.
+             ;; Maybe do some hack in external part of mml-generate-mim-1.
+             (insert "<#part>"
+                     "\n--\nExternal: \n"
+                     (format "<URL:http://www.mail-archive.com/%s/%s>" 
+                             group url)
+                     "\n--\n"
+                     "<#/part>")
+             (setq mime t))
+            (t
+             (setq p (point))
+             (insert "<#part type=\"text/html\" disposition=inline>")
+             (goto-char
+              (if (re-search-forward 
+                   "[\040\n\r\t]*<PRE>\\|[\040\n\r\t]*<P><A HREF=\"" 
+                   nil t)
+                  (match-beginning 0)
+                (point-max)))
+             (insert "<#/part>")
+             (setq mime t)))
+           (setq p (point))
+           (if (> (skip-chars-forward "\040\n\r\t") 0)
+               (delete-region p (point))))
+         (goto-char (point-max))))
+      (setq p (point))
+      (when (search-forward "X-References-End" nil t)
+       (setq e (point))
+       (beginning-of-line)
+       (search-backward "X-References" p t)
+       (while (re-search-forward "msg\\([0-9]+\\)\\.html" e t)
+         (push (concat "<" (match-string 1) "%" group ">") refs)))
+      (delete-region p (point-max))
+      (goto-char (point-min))
+      (insert (format "Message-ID: <%05d%%%s>\n" (1- article) group))
+      (when refs
+       (insert "References:")
+       (while refs
+         (insert " " (pop refs)))
+       (insert "\n"))
+      (when mime
+       (unless (looking-at "$") 
+         (search-forward "\n\n" nil t)
+         (forward-line -1))
+       (narrow-to-region (point) (point-max))
+       (insert "MIME-Version: 1.0\n"
+               (prog1
+                   (mml-generate-mime)
+                 (delete-region (point-min) (point-max))))
+       (widen)))
+    (buffer-string)))
 
 (provide 'nnwarchive)
 
index b3327da..dcdf4d4 100644 (file)
@@ -1,5 +1,6 @@
 ;;; nnweb.el --- retrieving articles via web search engines
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -29,6 +30,8 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'nnoo)
 (require 'message)
 (require 'gnus-util)
     (require 'w3)
     (require 'url)
     (require 'w3-forms)))
+
 ;; Report failure to find w3 at load time if appropriate.
-(eval '(progn
-        (require 'w3)
-        (require 'url)
-        (require 'w3-forms)))
+(unless noninteractive
+  (eval '(progn
+          (require 'w3)
+          (require 'url)
+          (require 'w3-forms))))
 
 (nnoo-declare nnweb)
 
@@ -111,14 +116,14 @@ and `altavista'.")
     (set-buffer nntp-server-buffer)
     (erase-buffer)
     (let (article header)
-      (while (setq article (pop articles))
-       (when (setq header (cadr (assq article nnweb-articles)))
-         (nnheader-insert-nov header)))
+      (mm-with-unibyte-current-buffer
+       (while (setq article (pop articles))
+         (when (setq header (cadr (assq article nnweb-articles)))
+           (nnheader-insert-nov header))))
       'nov)))
 
 (deffoo nnweb-request-scan (&optional group server)
   (nnweb-possibly-change-server group server)
-  (setq nnweb-hashtb (gnus-make-hashtable 4095))
   (funcall (nnweb-definition 'map))
   (unless nnweb-ephemeral-p
     (nnweb-write-active)
@@ -136,8 +141,6 @@ and `altavista'.")
        (setq nnweb-search (nth 3 info))
        (unless dont-check
          (nnweb-read-overview group)))))
-  (unless dont-check
-    (nnweb-request-scan group))
   (cond
    ((not nnweb-articles)
     (nnheader-report 'nnweb "No matching articles"))
@@ -167,7 +170,8 @@ and `altavista'.")
     (let* ((header (cadr (assq article nnweb-articles)))
           (url (and header (mail-header-xref header))))
       (when (or (and url
-                    (nnweb-fetch-url url))
+                    (mm-with-unibyte-current-buffer
+                      (nnweb-fetch-url url)))
                (and (stringp article)
                     (nnweb-definition 'id t)
                     (let ((fetch (nnweb-definition 'id))
@@ -176,13 +180,14 @@ and `altavista'.")
                         (setq art (match-string 1 article)))
                       (and fetch
                            art
-                           (nnweb-fetch-url
-                            (format fetch article))))))
+                           (mm-with-unibyte-current-buffer
+                             (nnweb-fetch-url
+                              (format fetch article)))))))
        (unless nnheader-callback-function
          (funcall (nnweb-definition 'article))
          (nnweb-decode-entities))
        (nnheader-report 'nnweb "Fetched article %s" article)
-       t))))
+       (cons group (and (numberp article) article))))))
 
 (deffoo nnweb-close-server (&optional server)
   (when (and (nnweb-server-opened server)
@@ -201,9 +206,7 @@ and `altavista'.")
     t))
 
 (deffoo nnweb-request-update-info (group info &optional server)
-  (nnweb-possibly-change-server group server)
-  ;;(setcar (cddr info) nil)
-  )
+  (nnweb-possibly-change-server group server))
 
 (deffoo nnweb-asynchronous-p ()
   t)
@@ -229,7 +232,7 @@ and `altavista'.")
 (defun nnweb-read-overview (group)
   "Read the overview of GROUP and build the map."
   (when (file-exists-p (nnweb-overview-file group))
-    (with-temp-buffer
+    (mm-with-unibyte-buffer
       (nnheader-insert-file-contents (nnweb-overview-file group))
       (goto-char (point-min))
       (let (header)
@@ -290,6 +293,7 @@ and `altavista'.")
   (when group
     (when (and (not nnweb-ephemeral-p)
               (not (equal group nnweb-group)))
+      (setq nnweb-hashtb (gnus-make-hashtable 4095))
       (nnweb-request-group group nil t))))
 
 (defun nnweb-init (server)
@@ -297,22 +301,32 @@ and `altavista'.")
   (unless (gnus-buffer-live-p nnweb-buffer)
     (setq nnweb-buffer
          (save-excursion
-           (nnheader-set-temp-buffer
-            (format " *nnweb %s %s %s*" nnweb-type nnweb-search server))))))
+           (mm-with-unibyte
+             (nnheader-set-temp-buffer
+              (format " *nnweb %s %s %s*"
+                      nnweb-type nnweb-search server))
+             (current-buffer))))))
 
 (defun nnweb-fetch-url (url)
-  (save-excursion
-    (if (not nnheader-callback-function)
-       (let ((buf (current-buffer)))
-         (save-excursion
-           (set-buffer nnweb-buffer)
+  (let (buf)
+    (save-excursion
+      (if (not nnheader-callback-function)
+         (progn
+           (with-temp-buffer
+             (mm-enable-multibyte)
+             (let ((coding-system-for-read 'binary)
+                   (coding-system-for-write 'binary)
+                   (input-coding-system 'binary)
+                   (output-coding-system 'binary)
+                   (default-process-coding-system 'binary))
+               (nnweb-insert url))
+             (setq buf (buffer-string)))
            (erase-buffer)
-           (url-insert-file-contents url)
-           (copy-to-buffer buf (point-min) (point-max))
-           t))
-      (nnweb-url-retrieve-asynch
-       url 'nnweb-callback (current-buffer) nnheader-callback-function)
-      t)))
+           (insert buf)
+           t)
+       (nnweb-url-retrieve-asynch
+        url 'nnweb-callback (current-buffer) nnheader-callback-function)
+       t))))
 
 (defun nnweb-callback (buffer callback)
   (when (gnus-buffer-live-p url-working-buffer)
@@ -338,9 +352,13 @@ and `altavista'.")
       (setq url-current-callback-data data
            url-be-asynchronous t
            url-current-callback-func callback)
-      (url-retrieve url))
+      (url-retrieve url nil))
     (setq-default url-be-asynchronous old-asynch)))
 
+(if (fboundp 'url-retrieve-synchronously)
+    (defun nnweb-url-retrieve-asynch (url callback &rest data)
+      (url-retrieve url callback data)))
+
 ;;;
 ;;; DejaNews functions.
 ;;;
@@ -366,20 +384,24 @@ and `altavista'.")
          (dolist (row (nth 2 (car (nth 2 table))))
            (setq a (nnweb-parse-find 'a row)
                  url (cdr (assq 'href (nth 1 a)))
-                 text (nnweb-text row))
+                 text (nreverse (nnweb-text row)))
            (when a
-             (setq subject (nth 2 text)
-                   group (nth 4 text)
-                   date (nth 5 text)
-                   from (nth 6 text))
-             (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\)" date)
-             (setq date (format "%s %s %s"
-                                (car (rassq (string-to-number
-                                             (match-string 2 date))
-                                            parse-time-months))
-                                (match-string 3 date) (match-string 1 date)))
+             (setq subject (nth 4 text)
+                   group (nth 2 text)
+                   date (nth 1 text)
+                   from (nth 0 text))
+             (if (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\)" date)
+                 (setq date (format "%s %s 00:00:00 %s"
+                                    (car (rassq (string-to-number
+                                                 (match-string 2 date))
+                                                parse-time-months))
+                                    (match-string 3 date) 
+                                    (match-string 1 date)))
+               (setq date "Jan 1 00:00:00 0000"))
              (incf i)
              (setq url (concat url "&fmt=text"))
+             (when (string-match "&context=[^&]+" url)
+               (setq url (replace-match "" t t url)))
              (unless (nnweb-get-hashtb url)
                (push
                 (list
@@ -467,7 +489,6 @@ and `altavista'.")
          (goto-char (point-min))
          (search-forward "</pre><hr>" nil t)
          (delete-region (point-min) (point))
-                                       ;(nnweb-decode-entities)
          (goto-char (point-min))
          (while (re-search-forward "^ +[0-9]+\\." nil t)
            (narrow-to-region
@@ -707,11 +728,24 @@ and `altavista'.")
 (defun nnweb-decode-entities ()
   "Decode all HTML entities."
   (goto-char (point-min))
-  (while (re-search-forward "&\\([a-z]+\\);" nil t)
-    (replace-match (char-to-string (or (cdr (assq (intern (match-string 1))
-                                                 w3-html-entities))
-                                      ?#))
-                  t t)))
+  (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
+    (let ((elem (if (eq (aref (match-string 1) 0) ?\#)
+                       (let ((c
+                              (string-to-number (substring 
+                                                 (match-string 1) 1))))
+                         (if (mm-char-or-char-int-p c) c 32))
+                     (or (cdr (assq (intern (match-string 1))
+                                    w3-html-entities))
+                         ?#))))
+      (unless (stringp elem)
+       (setq elem (char-to-string elem)))
+      (replace-match elem t t))))
+
+(defun nnweb-decode-entities-string (string)
+  (with-temp-buffer
+    (insert string)
+    (nnweb-decode-entities)
+    (buffer-substring (point-min) (point-max))))
 
 (defun nnweb-remove-markup ()
   "Remove all HTML markup, leaving just plain text."
@@ -724,10 +758,21 @@ and `altavista'.")
   (while (re-search-forward "<[^>]+>" nil t)
     (replace-match "" t t)))
 
-(defun nnweb-insert (url)
-  "Insert the contents from an URL in the current buffer."
+(defun nnweb-insert (url &optional follow-refresh)
+  "Insert the contents from an URL in the current buffer.
+If FOLLOW-REFRESH is non-nil, redirect refresh url in META."
   (let ((name buffer-file-name))
-    (url-insert-file-contents url)
+    (if follow-refresh
+       (save-restriction
+         (narrow-to-region (point) (point))
+         (url-insert-file-contents url)
+         (goto-char (point-min))
+         (when (re-search-forward 
+                "<meta[ \t\r\n]*http-equiv=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" nil t)
+           (let ((url (match-string 1)))
+             (delete-region (point-min) (point-max))
+             (nnweb-insert url t))))
+      (url-insert-file-contents url))
     (setq buffer-file-name name)))
 
 (defun nnweb-parse-find (type parse &optional maxdepth)
@@ -779,6 +824,11 @@ and `altavista'.")
                 (listp (cdr element)))
        (nnweb-text-1 element)))))
 
+(defun nnweb-replace-in-string (string match newtext)
+  (while (string-match match string)
+    (setq string (replace-match newtext t t string)))
+  string)
+
 (provide 'nnweb)
 
 ;;; nnweb.el ends here
diff --git a/lisp/nnwfm.el b/lisp/nnwfm.el
new file mode 100644 (file)
index 0000000..99eb421
--- /dev/null
@@ -0,0 +1,433 @@
+;;; nnwfm.el --- interfacing with a web forum
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: news
+
+;; 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.
+
+;;; Commentary:
+
+;; Note: You need to have `url' and `w3' installed for this
+;; backend to work.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
+(require 'nnoo)
+(require 'message)
+(require 'gnus-util)
+(require 'gnus)
+(require 'nnmail)
+(require 'mm-util)
+(eval-when-compile
+  (ignore-errors
+    (require 'nnweb)))
+;; Report failure to find w3 at load time if appropriate.
+(eval '(require 'nnweb))
+
+(nnoo-declare nnwfm)
+
+(defvoo nnwfm-directory (nnheader-concat gnus-directory "wfm/")
+  "Where nnwfm will save its files.")
+
+(defvoo nnwfm-address ""
+  "The address of the Ultimate bulletin board.")
+
+;;; Internal variables
+
+(defvar nnwfm-groups-alist nil)
+(defvoo nnwfm-groups nil)
+(defvoo nnwfm-headers nil)
+(defvoo nnwfm-articles nil)
+(defvar nnwfm-table-regexp 
+  "postings.*editpost\\|forumdisplay\\|Forum[0-9]+/HTML\\|getbio")
+
+;;; Interface functions
+
+(nnoo-define-basics nnwfm)
+
+(deffoo nnwfm-retrieve-headers (articles &optional group server fetch-old)
+  (nnwfm-possibly-change-server group server)
+  (unless gnus-nov-is-evil
+    (let* ((last (car (last articles)))
+          (did nil)
+          (start 1)
+          (entry (assoc group nnwfm-groups))
+          (sid (nth 2 entry))
+          (topics (nth 4 entry))
+          (mapping (nth 5 entry))
+          (old-total (or (nth 6 entry) 1))
+          (nnwfm-table-regexp "Thread.asp")
+          headers article subject score from date lines parent point
+          contents tinfo fetchers map elem a href garticles topic old-max
+          inc datel table string current-page total-contents pages
+          farticles forum-contents parse furl-fetched mmap farticle
+          thread-id tables hstuff bstuff time)
+      (setq map mapping)
+      (while (and (setq article (car articles))
+                 map)
+       (while (and map
+                   (or (> article (caar map))
+                       (< (cadar map) (caar map))))
+         (pop map))
+       (when (setq mmap (car map))
+         (setq farticle -1)
+         (while (and article
+                     (<= article (nth 1 mmap)))
+           ;; Do we already have a fetcher for this topic?
+           (if (setq elem (assq (nth 2 mmap) fetchers))
+               ;; Yes, so we just add the spec to the end.
+               (nconc elem (list (cons article
+                                       (+ (nth 3 mmap) (incf farticle)))))
+             ;; No, so we add a new one.
+             (push (list (nth 2 mmap)
+                         (cons article
+                               (+ (nth 3 mmap) (incf farticle))))
+                   fetchers))
+           (pop articles)
+           (setq article (car articles)))))
+      ;; Now we have the mapping from/to Gnus/nnwfm article numbers,
+      ;; so we start fetching the topics that we need to satisfy the
+      ;; request.
+      (if (not fetchers)
+         (save-excursion
+           (set-buffer nntp-server-buffer)
+           (erase-buffer))
+       (setq nnwfm-articles nil)
+       (mm-with-unibyte-buffer
+         (dolist (elem fetchers)
+           (erase-buffer)
+           (setq subject (nth 2 (assq (car elem) topics))
+                 thread-id (nth 0 (assq (car elem) topics)))
+           (nnweb-insert
+            (concat nnwfm-address
+                    (format "Item.asp?GroupID=%d&ThreadID=%d" sid
+                            thread-id)))
+           (goto-char (point-min))
+           (setq tables (caddar
+                         (caddar
+                          (cdr (caddar
+                                (caddar
+                                 (ignore-errors
+                                   (w3-parse-buffer (current-buffer)))))))))
+           (setq tables (cdr (caddar (memq (assq 'div tables) tables))))
+           (setq contents nil)
+           (dolist (table tables)
+             (when (eq (car table) 'table)
+               (setq table (caddar (caddar (caddr table)))
+                     hstuff (delete ":link" (nnweb-text (car table)))
+                     bstuff (car (caddar (cdr table)))
+                     from (car hstuff))
+               (when (nth 2 hstuff)
+                 (setq time (nnwfm-date-to-time (nth 2 hstuff)))
+                 (push (list from time bstuff) contents))))
+           (setq contents (nreverse contents))
+           (dolist (art (cdr elem))
+               (push (list (car art)
+                           (nth (1- (cdr art)) contents)
+                           subject)
+                     nnwfm-articles))))
+       (setq nnwfm-articles
+             (sort nnwfm-articles 'car-less-than-car))
+       ;; Now we have all the articles, conveniently in an alist
+       ;; where the key is the Gnus article number.
+       (dolist (articlef nnwfm-articles)
+         (setq article (nth 0 articlef)
+               contents (nth 1 articlef)
+               subject (nth 2 articlef))
+         (setq from (nth 0 contents)
+               date (message-make-date (nth 1 contents)))
+         (push
+          (cons
+           article
+           (make-full-mail-header
+            article subject
+            from (or date "")
+            (concat "<" (number-to-string sid) "%"
+                    (number-to-string article)
+                    "@wfm>")
+            "" 0
+            (/ (length (mapconcat 'identity (nnweb-text (nth 2 contents)) ""))
+               70)
+            nil nil))
+          headers))
+       (setq nnwfm-headers (sort headers 'car-less-than-car))
+       (save-excursion
+         (set-buffer nntp-server-buffer)
+         (mm-with-unibyte-current-buffer
+           (erase-buffer)
+           (dolist (header nnwfm-headers)
+             (nnheader-insert-nov (cdr header))))))
+      'nov)))
+
+(deffoo nnwfm-request-group (group &optional server dont-check)
+  (nnwfm-possibly-change-server nil server)
+  (when (not nnwfm-groups)
+    (nnwfm-request-list))
+  (unless dont-check
+    (nnwfm-create-mapping group))
+  (let ((elem (assoc group nnwfm-groups)))
+    (cond
+     ((not elem)
+      (nnheader-report 'nnwfm "Group does not exist"))
+     (t
+      (nnheader-report 'nnwfm "Opened group %s" group)
+      (nnheader-insert
+       "211 %d %d %d %s\n" (cadr elem) 1 (cadr elem)
+       (prin1-to-string group))))))
+
+(deffoo nnwfm-request-close ()
+  (setq nnwfm-groups-alist nil
+       nnwfm-groups nil))
+
+(deffoo nnwfm-request-article (article &optional group server buffer)
+  (nnwfm-possibly-change-server group server)
+  (let ((contents (cdr (assq article nnwfm-articles))))
+    (when (setq contents (nth 2 (car contents)))
+      (save-excursion
+       (set-buffer (or buffer nntp-server-buffer))
+       (erase-buffer)
+       (nnweb-insert-html contents)
+       (goto-char (point-min))
+       (insert "Content-Type: text/html\nMIME-Version: 1.0\n")
+       (let ((header (cdr (assq article nnwfm-headers))))
+         (mm-with-unibyte-current-buffer
+           (nnheader-insert-header header)))
+       (nnheader-report 'nnwfm "Fetched article %s" article)
+       (cons group article)))))
+
+(deffoo nnwfm-request-list (&optional server)
+  (nnwfm-possibly-change-server nil server)
+  (mm-with-unibyte-buffer
+    (nnweb-insert
+     (if (string-match "/$" nnwfm-address)
+        (concat nnwfm-address "Group.asp")
+       nnwfm-address))
+    (let* ((nnwfm-table-regexp "Thread.asp")
+          (contents (w3-parse-buffer (current-buffer)))
+          sid elem description articles a href group forum
+          a1 a2)
+      (dolist (row (cdr (nth 2 (car (nth 2 (nnwfm-find-forum-table
+                                           contents))))))
+       (setq row (nth 2 row))
+       (when (setq a (nnweb-parse-find 'a row))
+         (setq group (car (last (nnweb-text a)))
+               href (cdr (assq 'href (nth 1 a))))
+         (setq description (car (last (nnweb-text (nth 1 row)))))
+         (setq articles
+               (string-to-number
+                (nnweb-replace-in-string
+                 (car (last (nnweb-text (nth 3 row)))) "," "")))
+         (when (and href
+                    (string-match "GroupId=\\([0-9]+\\)" href))
+           (setq forum (string-to-number (match-string 1 href)))
+           (if (setq elem (assoc group nnwfm-groups))
+               (setcar (cdr elem) articles)
+             (push (list group articles forum description nil nil nil nil)
+                   nnwfm-groups))))))
+    (nnwfm-write-groups)
+    (nnwfm-generate-active)
+    t))
+
+(deffoo nnwfm-request-newgroups (date &optional server)
+  (nnwfm-possibly-change-server nil server)
+  (nnwfm-generate-active)
+  t)
+
+(nnoo-define-skeleton nnwfm)
+
+;;; Internal functions
+
+(defun nnwfm-new-threads-p (group time)
+  "See whether we want to fetch the threads for GROUP written before TIME."
+  (let ((old-time (nth 7 (assoc group nnwfm-groups))))
+    (or (null old-time)
+       (time-less-p old-time time))))
+
+(defun nnwfm-create-mapping (group)
+  (let* ((entry (assoc group nnwfm-groups))
+        (sid (nth 2 entry))
+        (topics (nth 4 entry))
+        (mapping (nth 5 entry))
+        (old-total (or (nth 6 entry) 1))
+        (current-time (current-time))
+        (nnwfm-table-regexp "Thread.asp")
+        (furls (list (concat nnwfm-address
+                             (format "Thread.asp?GroupId=%d" sid))))
+        fetched-urls
+        contents forum-contents a subject href
+        garticles topic tinfo old-max inc parse elem date
+        url time)
+    (mm-with-unibyte-buffer
+      (while furls
+       (erase-buffer)
+       (push (car furls) fetched-urls)
+       (nnweb-insert (pop furls))
+       (goto-char (point-min))
+       (while (re-search-forward "  wr(" nil t)
+         (forward-char -1)
+         (setq elem (message-tokenize-header
+                     (nnweb-replace-in-string
+                      (buffer-substring
+                       (1+ (point))
+                       (progn
+                         (forward-sexp 1)
+                         (1- (point))))
+                      "\\\\[\"\\\\]" "")))
+         (push (list
+                (string-to-number (nth 1 elem))
+                (nnweb-replace-in-string (nth 2 elem) "\"" "")
+                (string-to-number (nth 5 elem)))
+               forum-contents))
+       (when (re-search-forward "href=\"\\(Thread.*DateLast=\\([^\"]+\\)\\)"
+                                nil t)
+         (setq url (match-string 1)
+               time (nnwfm-date-to-time (url-unhex-string (match-string 2))))
+         (when (and (nnwfm-new-threads-p group time)
+                    (not (member
+                          (setq url (concat
+                                     nnwfm-address
+                                     (nnweb-decode-entities-string url)))
+                          fetched-urls)))
+           (push url furls))))
+      ;; The main idea here is to map Gnus article numbers to
+      ;; nnwfm article numbers.  Say there are three topics in
+      ;; this forum, the first with 4 articles, the seconds with 2,
+      ;; and the third with 1.  Then this will translate into 7 Gnus
+      ;; article numbers, where 1-4 comes from the first topic, 5-6
+      ;; from the second and 7 from the third.  Now, then next time
+      ;; the group is entered, there's 2 new articles in topic one
+      ;; and 1 in topic three.  Then Gnus article number 8-9 be 5-6
+      ;; in topic one and 10 will be the 2 in topic three.
+      (dolist (elem (nreverse forum-contents))
+       (setq subject (nth 1 elem)
+             topic (nth 0 elem)
+             garticles (nth 2 elem))
+       (if (setq tinfo (assq topic topics))
+           (progn
+             (setq old-max (cadr tinfo))
+             (setcar (cdr tinfo) garticles))
+         (setq old-max 0)
+         (push (list topic garticles subject) topics)
+         (setcar (nthcdr 4 entry) topics))
+       (when (not (= old-max garticles))
+         (setq inc (- garticles old-max))
+         (setq mapping (nconc mapping
+                              (list
+                               (list
+                                old-total (1- (incf old-total inc))
+                                topic (1+ old-max)))))
+         (incf old-max inc)
+         (setcar (nthcdr 5 entry) mapping)
+         (setcar (nthcdr 6 entry) old-total))))
+    (setcar (nthcdr 7 entry) current-time)
+    (setcar (nthcdr 1 entry) (1- old-total))
+    (nnwfm-write-groups)
+    mapping))
+
+(defun nnwfm-possibly-change-server (&optional group server)
+  (nnwfm-init server)
+  (when (and server
+            (not (nnwfm-server-opened server)))
+    (nnwfm-open-server server))
+  (unless nnwfm-groups-alist
+    (nnwfm-read-groups)
+    (setq nnwfm-groups (cdr (assoc nnwfm-address
+                                       nnwfm-groups-alist)))))
+
+(deffoo nnwfm-open-server (server &optional defs connectionless)
+  (nnheader-init-server-buffer)
+  (if (nnwfm-server-opened server)
+      t
+    (unless (assq 'nnwfm-address defs)
+      (setq defs (append defs (list (list 'nnwfm-address server)))))
+    (nnoo-change-server 'nnwfm server defs)))
+
+(defun nnwfm-read-groups ()
+  (setq nnwfm-groups-alist nil)
+  (let ((file (expand-file-name "groups" nnwfm-directory)))
+    (when (file-exists-p file)
+      (mm-with-unibyte-buffer
+       (insert-file-contents file)
+       (goto-char (point-min))
+       (setq nnwfm-groups-alist (read (current-buffer)))))))
+
+(defun nnwfm-write-groups ()
+  (setq nnwfm-groups-alist
+       (delq (assoc nnwfm-address nnwfm-groups-alist)
+             nnwfm-groups-alist))
+  (push (cons nnwfm-address nnwfm-groups)
+       nnwfm-groups-alist)
+  (with-temp-file (expand-file-name "groups" nnwfm-directory)
+    (prin1 nnwfm-groups-alist (current-buffer))))
+    
+(defun nnwfm-init (server)
+  "Initialize buffers and such."
+  (unless (file-exists-p nnwfm-directory)
+    (gnus-make-directory nnwfm-directory)))
+
+(defun nnwfm-generate-active ()
+  (save-excursion
+    (set-buffer nntp-server-buffer)
+    (erase-buffer)
+    (dolist (elem nnwfm-groups)
+      (insert (prin1-to-string (car elem))
+             " " (number-to-string (cadr elem)) " 1 y\n"))))
+
+(defun nnwfm-find-forum-table (contents)
+  (catch 'found
+    (nnwfm-find-forum-table-1 contents)))
+
+(defun nnwfm-find-forum-table-1 (contents)
+  (dolist (element contents)
+    (unless (stringp element)
+      (when (and (eq (car element) 'table)
+                (nnwfm-forum-table-p element))
+       (throw 'found element))
+      (when (nth 2 element)
+       (nnwfm-find-forum-table-1 (nth 2 element))))))
+
+(defun nnwfm-forum-table-p (parse)
+  (when (not (apply 'gnus-or
+                   (mapcar
+                    (lambda (p)
+                      (nnweb-parse-find 'table p))
+                    (nth 2 parse))))
+    (let ((href (cdr (assq 'href (nth 1 (nnweb-parse-find 'a parse 20)))))
+         case-fold-search)
+      (when (and href (string-match nnwfm-table-regexp href))
+       t))))
+
+(defun nnwfm-date-to-time (date)
+  (let ((time (mapcar #'string-to-number (split-string date "[\\.\\+ :]"))))
+    (encode-time 0 (nth 4 time) (nth 3 time)
+                (nth 0 time) (nth 1 time)
+                (if (< (nth 2 time) 70)
+                    (+ 2000 (nth 2 time))
+                  (+ 1900 (nth 2 time))))))
+
+(provide 'nnwfm)
+
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
+;;; nnwfm.el ends here
index ec0d071..d003251 100644 (file)
@@ -1,8 +1,8 @@
 ;;; parse-time.el --- Parsing time strings
 
-;; Copyright (C) 1996 by Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000 by Free Software Foundation, Inc.
 
-;; Author: Erik Naggum <erik@arcana.naggum.no>
+;; Author: Erik Naggum <erik@naggum.no>
 ;; Keywords: util
 
 ;; This file is part of GNU Emacs.
 
 (unless (aref parse-time-digits ?0)
   (loop for i from ?0 to ?9
-       do (aset parse-time-digits i (- i ?0))))
+    do (aset parse-time-digits i (- i ?0))))
 
 (unless (aref parse-time-syntax ?0)
   (loop for i from ?0 to ?9
-       do (aset parse-time-syntax i ?0))
+    do (aset parse-time-syntax i ?0))
   (loop for i from ?A to ?Z
-       do (aset parse-time-syntax i ?A))
+    do (aset parse-time-syntax i ?A))
   (loop for i from ?a to ?z
-       do (aset parse-time-syntax i ?a))
+    do (aset parse-time-syntax i ?a))
   (aset parse-time-syntax ?+ 1)
   (aset parse-time-syntax ?- -1)
   (aset parse-time-syntax ?: ?d)
                        (= (length elt) 7)
                        (= (aref elt 1) ?:)))
      [0 1] [2 4] [5 7])
-    ((5) (50 99) ,#'(lambda () (+ 1900 elt)))
+    ((5) (50 110) ,#'(lambda () (+ 1900 elt)))
     ((5) (0 49) ,#'(lambda () (+ 2000 elt))))
   "(slots predicate extractor...)")
 
index 4885f61..00cdcea 100644 (file)
@@ -1,11 +1,12 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
 
-;; Copyright (C) 1996-1999 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
 ;;      Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
-;; Keywords: mail, pop3
-;; Version: 1.3s
+;; Maintainer: FSF
+;; Keywords: mail
 
 ;; This file is part of GNU Emacs.
 
@@ -36,9 +37,9 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
-(require 'mail-utils)
+(eval-when-compile (require 'static))
 
-(defconst pop3-version "1.3s")
+(require 'mail-utils)
 
 (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
   "*POP3 maildrop.")
@@ -90,8 +91,14 @@ Nil means no, t means yes, not-nil-or-t means yet to be determined.")
   (autoload 'starttls-open-stream "starttls")
   (autoload 'starttls-negotiate "starttls"))
 
+(defvar pop3-ssl-program-name
+  (if (exec-installed-p "openssl")
+      "openssl"
+    "ssleay")
+  "The program to run in a subprocess to open an SSL connection.")
+
 (defvar pop3-ssl-program-arguments
-  '("-quiet")
+  '("s_client" "-quiet")
   "Arguments to be passed to the program `pop3-ssl-program-name'.")
 
 (defun pop3-progress-message (format percent &rest args)
@@ -103,12 +110,12 @@ Nil means no, t means yes, not-nil-or-t means yet to be determined.")
   (let* ((process (pop3-open-server pop3-mailhost pop3-port))
         (crashbuf (get-buffer-create " *pop3-retr*"))
         (n 1)
+        message-count
         (pop3-password pop3-password)
-        (pop3-uidl-file-name
-         (convert-standard-filename
-          (concat pop3-uidl-file-name "-" pop3-mailhost)))
-        (retrieved-messages nil)
-        messages message-count)
+        (pop3-uidl-file-name (convert-standard-filename
+                              (concat pop3-uidl-file-name "-"
+                                      pop3-mailhost)))
+        retrieved-messages messages)
     ;; for debugging only
     (if pop3-debug (switch-to-buffer (process-buffer process)))
     ;; query for password
@@ -125,8 +132,8 @@ Nil means no, t means yes, not-nil-or-t means yet to be determined.")
     (message "Retrieving message list...")
     (setq messages (pop3-get-message-numbers process)
          message-count (length (cdr messages)))
-    (message (format "Retrieving message list...%d of %d unread"
-                    message-count (pop messages)))
+    (message "Retrieving message list...%d of %d unread"
+            message-count (pop messages))
     (unwind-protect
        (unless (not (stringp crashbox))
          (while messages
@@ -147,8 +154,8 @@ Nil means no, t means yes, not-nil-or-t means yet to be determined.")
          ;; now delete the messages we have retrieved
          (unless pop3-leave-mail-on-server
            (dolist (n retrieved-messages)
-             (message (format "Deleting message %d of %d from %s..."
-                              n message-count pop3-mailhost))
+             (message "Deleting message %d of %d from %s..."
+                      n message-count pop3-mailhost)
              (pop3-dele process n)))
          )
       (pop3-quit process))
@@ -156,33 +163,36 @@ Nil means no, t means yes, not-nil-or-t means yet to be determined.")
     message-count))
 
 (defun pop3-open-server (mailhost port)
-  "Open TCP connection to MAILHOST.
+  "Open TCP connection to MAILHOST on PORT.
 Returns the process associated with the connection.
 Argument PORT specifies connecting port."
-  (let ((process-buffer
-        (get-buffer-create (format "trace of POP session to %s" mailhost)))
-       (process))
+  (let (process)
     (save-excursion
-      (set-buffer process-buffer)
-      (erase-buffer))
-    (setq
-     process
-     (cond
-      ((eq pop3-connection-type 'ssl)
-       (pop3-open-ssl-stream "POP" process-buffer mailhost port))
-      ((eq pop3-connection-type 'tls)
-       (pop3-open-tls-stream "POP" process-buffer mailhost port))
-      (t
-       (open-network-stream-as-binary "POP" process-buffer mailhost port))))
-    (setq pop3-read-point (point-min))
-    (let ((response (pop3-read-response process t)))
-      (setq pop3-timestamp
-           (substring response (or (string-match "<" response) 0)
-                      (+ 1 (or (string-match ">" response) -1)))))
-    process))
+      (set-buffer (get-buffer-create (concat " trace of POP session to "
+                                            mailhost)))
+      (erase-buffer)
+      (setq pop3-read-point (point-min))
+      (setq
+       process
+       (cond
+       ((eq pop3-connection-type 'ssl)
+        (pop3-open-ssl-stream "POP" (current-buffer) mailhost port))
+       ((eq pop3-connection-type 'tls)
+        (pop3-open-tls-stream "POP" (current-buffer) mailhost port))
+       (t
+        (open-network-stream-as-binary "POP" (current-buffer)
+                                       mailhost port))))
+      (let ((response (pop3-read-response process t)))
+       (setq pop3-timestamp
+             (substring response (or (string-match "<" response) 0)
+                        (+ 1 (or (string-match ">" response) -1)))))
+      process)))
 
 (defun pop3-open-ssl-stream-1 (name buffer host service extra-arg)
-  (let* ((ssl-program-arguments
+  (require 'path-util)
+  (let* ((ssl-program-name
+         pop3-ssl-program-name)
+        (ssl-program-arguments
          `(,@pop3-ssl-program-arguments ,extra-arg
            "-connect" ,(format "%s:%d" host service)))
          (process (open-ssl-stream name buffer host service)))
@@ -203,9 +213,16 @@ Argument PORT specifies connecting port."
   "Open a SSL connection for a service to a host.
 Returns a subprocess-object to represent the connection.
 Args are NAME BUFFER HOST SERVICE."
-  (as-binary-process
-   (or (pop3-open-ssl-stream-1 name buffer host service "-ssl3")
-       (pop3-open-ssl-stream-1 name buffer host service "-ssl2"))))
+  (cond ((eq system-type 'windows-nt)
+        (let (selective-display
+              (coding-system-for-write 'binary)
+              (coding-system-for-read 'raw-text-dos))
+          (or (pop3-open-ssl-stream-1 name buffer host service "-ssl3")
+              (pop3-open-ssl-stream-1 name buffer host service "-ssl2"))))
+       (t
+        (as-binary-process
+          (or (pop3-open-ssl-stream-1 name buffer host service "-ssl3")
+              (pop3-open-ssl-stream-1 name buffer host service "-ssl2"))))))
 
 (defun pop3-open-tls-stream (name buffer host service)
   "Open a TLSv1 connection for a service to a host.
@@ -238,8 +255,8 @@ Args are NAME BUFFER HOST SERVICE."
     )
 
 (defun pop3-read-response (process &optional return)
-  "Read the response from the server PROCESS.
-Return the response string if optional second argument RETURN is non-nil."
+  "Read the response from the server.
+Return the response string if optional second argument is non-nil."
   (let ((case-fold-search nil)
        match-end)
     (save-excursion
@@ -251,7 +268,7 @@ Return the response string if optional second argument RETURN is non-nil."
       (setq match-end (point))
       (goto-char pop3-read-point)
       (if (looking-at "-ERR")
-         (signal 'error (list (buffer-substring (point) (- match-end 2))))
+         (error (buffer-substring (point) (- match-end 2)))
        (if (not (looking-at "+OK"))
            (progn (setq pop3-read-point match-end) nil)
          (setq pop3-read-point match-end)
@@ -263,7 +280,7 @@ Return the response string if optional second argument RETURN is non-nil."
 (defvar pop3-read-passwd nil)
 (defun pop3-read-passwd (prompt)
   (if (not pop3-read-passwd)
-      (if (functionp 'read-passwd)
+      (if (fboundp 'read-passwd)
          (setq pop3-read-passwd 'read-passwd)
        (if (load "passwd" t)
            (setq pop3-read-passwd 'read-passwd)
@@ -401,8 +418,9 @@ Return the response string if optional second argument RETURN is non-nil."
         (lambda (atom)
           (when (car (symbol-value atom))
             (insert (format "%s\n" atom))))
-        pop3-uidl-obarray)))))
-    
+        pop3-uidl-obarray)))
+    (fillarray pop3-uidl-obarray 0)))
+
 
 ;; The Command Set
 
@@ -422,15 +440,45 @@ Return the response string if optional second argument RETURN is non-nil."
     (if (not (and response (string-match "+OK" response)))
        (pop3-quit process))))
 
-(autoload 'md5 "md5")
+(static-unless (and (fboundp 'md5) (subrp (symbol-function 'md5)))
+  (eval-and-compile
+    (require 'path-util)
+    (if (module-installed-p 'md5)
+       (progn
+         (autoload 'md5 "md5")
+         (fset 'pop3-md5 'md5))
+
+      (defvar pop3-md5-program "md5"
+       "*Program to encode its input in MD5.")
+
+      (defun pop3-md5 (string)
+       (with-temp-buffer
+         (insert string)
+         (call-process-region (point-min) (point-max)
+                              (or shell-file-name "/bin/sh")
+                              t (current-buffer) nil
+                              "-c" pop3-md5-program)
+         ;; The meaningful output is the first 32 characters.
+         ;; Don't return the newline that follows them!
+         (buffer-substring (point-min) (+ (point-min) 32))))
+      )))
 
 (defun pop3-apop (process user)
   "Send alternate authentication information to the server."
-  (let ((hash (md5 (concat pop3-timestamp pop3-password))))
-    (pop3-send-command process (format "APOP %s %s" user hash))
-    (let ((response (pop3-read-response process t)))
-      (if (not (and response (string-match "+OK" response)))
-         (pop3-quit process)))))
+  (let ((pass pop3-password))
+    (if (and pop3-password-required (not pass))
+       (setq pass
+             (pop3-read-passwd (format "Password for %s: " pop3-maildrop))))
+    (if pass
+       (let ((hash (static-if (and (fboundp 'md5)
+                                   (subrp (symbol-function 'md5)))
+                       (md5 (concat pop3-timestamp pass))
+                     (pop3-md5 (concat pop3-timestamp pass)))))
+         (pop3-send-command process (format "APOP %s %s" user hash))
+         (let ((response (pop3-read-response process t)))
+           (if (not (and response (string-match "+OK" response)))
+               (pop3-quit process)))))
+    ))
 
 (defun pop3-stls (process)
   "Query whether TLS extension is supported"
@@ -445,8 +493,8 @@ Return the response string if optional second argument RETURN is non-nil."
   "Return the number of messages in the maildrop and the maildrop's size."
   (pop3-send-command process "STAT")
   (let ((response (pop3-read-response process t)))
-    (list (string-to-int (nth 1 (split-string response)))
-         (string-to-int (nth 2 (split-string response))))
+    (list (string-to-int (nth 1 (split-string response " ")))
+         (string-to-int (nth 2 (split-string response " "))))
     ))
 
 (defun pop3-retr (process msg crashbuf)
@@ -474,7 +522,7 @@ Return the response string if optional second argument RETURN is non-nil."
   "Return highest accessed message-id number for the session."
   (pop3-send-command process "LAST")
   (let ((response (pop3-read-response process t)))
-    (string-to-int (nth 1 (split-string response)))
+    (string-to-int (nth 1 (split-string response " ")))
     ))
 
 (defun pop3-rset (process)
@@ -494,14 +542,7 @@ and close the connection."
     (save-excursion
       (set-buffer (process-buffer process))
       (goto-char (point-max))
-      (delete-process process)
-      ))
-  (when pop3-leave-mail-on-server
-    (mapatoms
-     (lambda (atom)
-       (when (car (symbol-value atom))
-        (unintern atom pop3-uidl-obarray)))
-     pop3-uidl-obarray)))
+      (delete-process process))))
 
 (defun pop3-uidl (process &optional msgno)
   "Return the results of a UIDL command in PROCESS for optional MSGNO.
diff --git a/lisp/ptexinfmt.el b/lisp/ptexinfmt.el
new file mode 100644 (file)
index 0000000..e98956e
--- /dev/null
@@ -0,0 +1,762 @@
+;;; ptexinfmt.el -- portable Texinfo formatter.
+
+;; Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993,
+;;               1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1999 Yoshiki Hayashi <yoshiki@xemacs.org>
+;; Copyright (C) 2000, 2001 TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+;; Author: TAKAHASHI Kaoru <kaoru@kaisei.org>
+;;     Yoshiki Hayashi <yoshiki@xemacs.org>
+;; Maintainer: TAKAHASHI Kaoru <kaoru@kaisei.org>
+;; Created: 7 Jul 2000
+;; Keywords: maint, tex, docs, emulation, compatibility
+
+;; 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 code: Yoshiki Hayashi <yoshiki@xemacs.org>
+;;     makeinfo.el (gnujdoc project)
+
+;; Support texinfmt.el 2.32 or later.
+
+;;; Code:
+(require 'texinfmt)
+(require 'poe)
+(require 'broken)
+
+;;; Broken
+(defvar ptexinfmt-disable-broken-notice-flag t
+  "If non-nil disable notice, when call `broken-facility'.
+This is NO-NOTICE argument in `broken-facility'.")
+
+;; sort -fd
+(broken-facility texinfo-format-printindex
+  "Can't sort on Mule for Windows."
+  (if (and (memq system-type '(windows-nt ms-dos))
+;;; I don't know version threshold. 
+;;;       (string< texinfmt-version "2.37 of 24 May 1997")
+          (boundp 'MULE) (not (featurep 'meadow))) ; Mule for Windows
+      nil
+    t)
+  ptexinfmt-disable-broken-notice-flag)
+
+;; @var
+(broken-facility texinfo-format-var
+  "Don't perse @var argument."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@var{@asis{foo}}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil))
+  ptexinfmt-disable-broken-notice-flag)
+
+;; @xref
+(broken-facility texinfo-format-xref
+  "Can't format @xref, 1st argument is empty."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@xref{, xref, , file}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil))
+  ptexinfmt-disable-broken-notice-flag)
+
+;; @uref
+(broken-facility texinfo-format-uref
+  "Parse twice @uref argument."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@uref{mailto:foo@@bar.com}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil))
+  ptexinfmt-disable-broken-notice-flag)
+
+;; @multitable
+(broken-facility texinfo-multitable-widths
+  "`texinfo-multitable-widths' unsupport wide-char."
+  (if (fboundp 'texinfo-multitable-widths)
+      (with-temp-buffer
+       (let ((str "\e$BI}9-J8;z\e(B"))
+         (texinfo-mode)
+         (insert (format " {%s}\n" str))
+         (goto-char (point-min))
+         (if (= (car (texinfo-multitable-widths)) (length str))
+             nil
+           t)))
+    ;; function definition is void
+    t)
+  ptexinfmt-disable-broken-notice-flag)
+
+(broken-facility texinfo-multitable-item
+  "`texinfo-multitable-item' unsupport wide-char."
+  (if-broken texinfo-multitable-widths nil t)
+  ptexinfmt-disable-broken-notice-flag)
+
+
+;;; Obsolete
+;; Removed Texinfo 3.8
+(put 'overfullrule 'texinfo-format 'texinfo-discard-line)
+(put 'smallbreak 'texinfo-format 'texinfo-discard-line)
+(put 'medbreak 'texinfo-format 'texinfo-discard-line)
+(put 'bigbreak 'texinfo-format 'texinfo-discard-line)
+;; Removed Texinfo 3.9
+(put 'setchapterstyle 'texinfo-format 'texinfo-discard-line-with-args)
+
+;;; Hardcopy and HTML (discard)
+;; I18N
+(put 'documentlanguage 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'documentencoding 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; size
+(put 'smallbook 'texinfo-format 'texinfo-discard-line)
+(put 'letterpaper 'texinfo-format 'texinfo-discard-line)
+(put 'afourpaper 'texinfo-format 'texinfo-discard-line)
+(put 'afourlatex 'texinfo-format 'texinfo-discard-line)
+(put 'afourwide 'texinfo-format 'texinfo-discard-line)
+(put 'afivepaper 'texinfo-format 'texinfo-discard-line)
+(put 'pagesizes 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; style
+(put 'setchapternewpage 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'kbdinputstyle 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; flags
+(put 'setcontentsaftertitlepage 'texinfo-format 'texinfo-discard-line)
+(put 'setshortcontentsaftertitlepage 'texinfo-format 'texinfo-discard-line)
+(put 'novalidate 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; head & foot
+(put 'headings 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'evenfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'evenheading 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'oddfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'oddheading 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'everyfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'everyheading 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; misc
+(put 'page 'texinfo-format 'texinfo-discard-line)
+(put 'hyphenation 'texinfo-format 'texinfo-discard-command-and-arg)
+
+
+\f
+;;; Directory File
+;; @direcategory
+(put 'dircategory 'texinfo-format 'texinfo-format-dircategory)
+(defun-maybe texinfo-format-dircategory ()
+  (let ((str (texinfo-parse-arg-discard)))
+    (delete-region (point)
+                  (progn
+                    (skip-chars-forward " ")
+                    (point)))
+    (insert "INFO-DIR-SECTION " str "\n")))
+
+;; @direntry
+(put 'direntry 'texinfo-format 'texinfo-format-direntry)
+(defun-maybe texinfo-format-direntry ()
+  (texinfo-push-stack 'direntry nil)
+  (texinfo-discard-line)
+  (insert "START-INFO-DIR-ENTRY\n"))
+
+(put 'direntry 'texinfo-end 'texinfo-end-direntry)
+(defun-maybe texinfo-end-direntry ()
+  (texinfo-discard-command)
+  (insert "END-INFO-DIR-ENTRY\n\n")
+  (texinfo-pop-stack 'direntry))
+
+
+;;; Block Enclosing and Conditional
+;; @detailmenu ... @end detailmenu
+(put 'detailmenu 'texinfo-format 'texinfo-discard-line)
+(put 'detailmenu 'texinfo-end 'texinfo-discard-command)
+
+;; @smalldisplay ... @end smalldisplay
+(put 'smalldisplay 'texinfo-format 'texinfo-format-example)
+(put 'smalldisplay 'texinfo-end 'texinfo-end-example)
+
+;; @smallformat ... @end smallformat
+(put 'smallformat 'texinfo-format 'texinfo-format-flushleft)
+(put 'smallformat 'texinfo-end 'texinfo-end-flushleft)
+
+;; @ifnottex ... @end ifnottex
+(put 'ifnottex 'texinfo-format 'texinfo-discard-line)
+(put 'ifnottex 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnothtml ... @end ifnothtml
+(put 'ifnothtml 'texinfo-format 'texinfo-discard-line)
+(put 'ifnothtml 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnotinfo ... @end ifnotinfo
+(put 'ifnotinfo 'texinfo-format 'texinfo-format-ifnotinfo)
+(put 'endifnotinfo 'texinfo-format 'texinfo-discard-line)
+(defun-maybe texinfo-format-ifnotinfo ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end ifnotinfo[ \t]*\n")
+                       (point))))
+
+;; @html ... @end html
+(put 'html 'texinfo-format 'texinfo-format-html)
+(put 'endhtml 'texinfo-format 'texinfo-discard-line)
+(defun-maybe texinfo-format-html ()
+  (delete-region texinfo-command-start
+                 (progn (re-search-forward "@end html[ \t]*\n")
+                        (point))))
+
+
+\f
+;;; Marking
+;; @url, @env, @command
+(put 'url 'texinfo-format 'texinfo-format-code)
+(put 'env 'texinfo-format 'texinfo-format-code)
+(put 'command 'texinfo-format 'texinfo-format-code)
+
+;; @acronym
+(put 'acronym 'texinfo-format 'texinfo-format-var)
+
+(when-broken texinfo-format-var
+  (fmakunbound 'texinfo-format-var))
+(defun-maybe texinfo-format-var ()
+  (let ((arg (texinfo-parse-expanded-arg)))
+    (texinfo-discard-command)
+    (insert (upcase arg))))
+
+;; @key
+(put 'key 'texinfo-format 'texinfo-format-key)
+(defun-maybe texinfo-format-key ()
+  (insert (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @email{EMAIL-ADDRESS[, DISPLAYED-TEXT]}
+(put 'email 'texinfo-format 'texinfo-format-email)
+(defun-maybe texinfo-format-email ()
+  "Format EMAIL-ADDRESS and optional DISPLAYED-TXT.
+Insert < ... > around EMAIL-ADDRESS."
+  (let ((args (texinfo-format-parse-args)))
+  (texinfo-discard-command)
+    ;; if displayed-text
+    (if (nth 1 args)
+       (insert (nth 1 args) " <" (nth 0 args) ">")
+      (insert "<" (nth 0 args) ">"))))
+
+;; @option
+(put 'option 'texinfo-format 'texinfo-format-option)
+(defun texinfo-format-option ()
+  "Insert ` ... ' around arg unless inside a table; in that case, no quotes."
+  ;; `looking-at-backward' not available in v. 18.57, 20.2
+  ;; searched-for character is a control-H
+  (if (not (search-backward "\010"
+                           (save-excursion (beginning-of-line) (point))
+                           t))
+      (insert "`" (texinfo-parse-arg-discard) "'")
+    (insert (texinfo-parse-arg-discard)))
+  (goto-char texinfo-command-start))
+
+
+\f
+;;; Accents and Special characters
+;; @pounds{}   ==>     #       Pounds Sterling
+(put 'pounds 'texinfo-format 'texinfo-format-pounds)
+(defun-maybe texinfo-format-pounds ()
+  (texinfo-parse-arg-discard)
+  (insert "#"))
+
+;; @OE{}       ==>     OE      French-OE-ligature
+(put 'OE 'texinfo-format 'texinfo-format-French-OE-ligature)
+(defun-maybe texinfo-format-French-OE-ligature ()
+  (insert "OE" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @oe{}       ==>     oe
+(put 'oe 'texinfo-format 'texinfo-format-French-oe-ligature)
+(defun-maybe texinfo-format-French-oe-ligature () ; lower case
+  (insert "oe" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @AA{}       ==>     AA      Scandinavian-A-with-circle
+(put 'AA 'texinfo-format 'texinfo-format-Scandinavian-A-with-circle)
+(defun-maybe texinfo-format-Scandinavian-A-with-circle ()
+  (insert "AA" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @aa{}       ==>     aa
+(put 'aa 'texinfo-format 'texinfo-format-Scandinavian-a-with-circle)
+(defun-maybe texinfo-format-Scandinavian-a-with-circle () ; lower case
+  (insert "aa" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @AE{}       ==>     AE      Latin-Scandinavian-AE
+(put 'AE 'texinfo-format 'texinfo-format-Latin-Scandinavian-AE)
+(defun-maybe texinfo-format-Latin-Scandinavian-AE ()
+  (insert "AE" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ae{}       ==>     ae
+(put 'ae 'texinfo-format 'texinfo-format-Latin-Scandinavian-ae)
+(defun-maybe texinfo-format-Latin-Scandinavian-ae () ; lower case
+  (insert "ae" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ss{}       ==>     ss      German-sharp-S
+(put 'ss 'texinfo-format 'texinfo-format-German-sharp-S)
+(defun-maybe texinfo-format-German-sharp-S ()
+  (insert "ss" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @questiondown{}     ==>     ?       upside-down-question-mark
+(put 'questiondown 'texinfo-format 'texinfo-format-upside-down-question-mark)
+(defun-maybe texinfo-format-upside-down-question-mark ()
+  (insert "?" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @exclamdown{}       ==>     !       upside-down-exclamation-mark
+(put 'exclamdown 'texinfo-format 'texinfo-format-upside-down-exclamation-mark)
+(defun-maybe texinfo-format-upside-down-exclamation-mark ()
+  (insert "!" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @L{}                ==>     L/      Polish suppressed-L (Lslash)
+(put 'L 'texinfo-format 'texinfo-format-Polish-suppressed-L)
+(defun-maybe texinfo-format-Polish-suppressed-L ()
+  (insert (texinfo-parse-arg-discard) "/L")
+  (goto-char texinfo-command-start))
+
+;; @l{}                ==>     l/      Polish suppressed-L (Lslash) (lower case)
+(put 'l 'texinfo-format 'texinfo-format-Polish-suppressed-l-lower-case)
+(defun-maybe texinfo-format-Polish-suppressed-l-lower-case ()
+  (insert (texinfo-parse-arg-discard) "/l")
+  (goto-char texinfo-command-start))
+
+;; @O{}                ==>     O/      Scandinavian O-with-slash
+(put 'O 'texinfo-format 'texinfo-format-Scandinavian-O-with-slash)
+(defun-maybe texinfo-format-Scandinavian-O-with-slash ()
+  (insert (texinfo-parse-arg-discard) "O/")
+  (goto-char texinfo-command-start))
+
+;; @o{}                ==>     o/      Scandinavian O-with-slash (lower case)
+(put 'o 'texinfo-format 'texinfo-format-Scandinavian-o-with-slash-lower-case)
+(defun-maybe texinfo-format-Scandinavian-o-with-slash-lower-case ()
+  (insert (texinfo-parse-arg-discard) "o/")
+  (goto-char texinfo-command-start))
+
+;; @,{c}       ==>     c,      cedilla accent
+(put ', 'texinfo-format 'texinfo-format-cedilla-accent)
+(defun-maybe texinfo-format-cedilla-accent ()
+  (insert (texinfo-parse-arg-discard) ",")
+  (goto-char texinfo-command-start))
+
+
+;; @dotaccent{o}       ==>     .o      overdot-accent
+(put 'dotaccent 'texinfo-format 'texinfo-format-overdot-accent)
+(defun-maybe texinfo-format-overdot-accent ()
+  (insert "." (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ubaraccent{o}      ==>     _o      underbar-accent
+(put 'ubaraccent 'texinfo-format 'texinfo-format-underbar-accent)
+(defun-maybe texinfo-format-underbar-accent ()
+  (insert "_" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @udotaccent{o}      ==>     o-.     underdot-accent
+(put 'udotaccent 'texinfo-format 'texinfo-format-underdot-accent)
+(defun-maybe texinfo-format-underdot-accent ()
+  (insert (texinfo-parse-arg-discard) "-.")
+  (goto-char texinfo-command-start))
+
+;; @H{o}       ==>     ""o     long Hungarian umlaut
+(put 'H 'texinfo-format 'texinfo-format-long-Hungarian-umlaut)
+(defun-maybe texinfo-format-long-Hungarian-umlaut ()
+  (insert "\"\"" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ringaccent{o}      ==>     *o      ring accent
+(put 'ringaccent 'texinfo-format 'texinfo-format-ring-accent)
+(defun-maybe texinfo-format-ring-accent ()
+  (insert "*" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @tieaccent{oo}      ==>     [oo     tie after accent
+(put 'tieaccent 'texinfo-format 'texinfo-format-tie-after-accent)
+(defun-maybe texinfo-format-tie-after-accent ()
+  (insert "[" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @u{o}       ==>     (o      breve accent
+(put 'u 'texinfo-format 'texinfo-format-breve-accent)
+(defun-maybe texinfo-format-breve-accent ()
+  (insert "(" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @v{o}       ==>     <o      hacek accent
+(put 'v 'texinfo-format 'texinfo-format-hacek-accent)
+(defun-maybe texinfo-format-hacek-accent ()
+  (insert "<" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @dotless{i} ==>     i       dotless i and dotless j
+(put 'dotless 'texinfo-format 'texinfo-format-dotless)
+(defun-maybe texinfo-format-dotless ()
+  (insert (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+
+\f
+;;; Cross References
+;; @ref, @xref
+(put 'ref 'texinfo-format 'texinfo-format-xref)
+
+(when-broken texinfo-format-xref
+  (fmakunbound 'texinfo-format-xref))
+(defun-maybe texinfo-format-xref ()
+  (let ((args (texinfo-format-parse-args)))
+    (texinfo-discard-command)
+    (insert "*Note ")
+    (let ((fname (or (nth 1 args) (nth 2 args))))
+      (if (null (or fname (nth 3 args)))
+         (insert (nth 0 args) "::")
+       (insert (or fname (nth 0 args)) ": ")
+       (if (nth 3 args)
+           (insert "(" (nth 3 args) ")"))
+       (unless (null (nth 0 args))
+         (insert (nth 0 args)))))))
+
+;; @uref
+(put 'uref 'texinfo-format 'texinfo-format-uref)
+(when-broken texinfo-format-uref
+  (fmakunbound 'texinfo-format-uref))
+(defun-maybe texinfo-format-uref ()
+  "Format URL and optional URL-TITLE.
+Insert ` ... ' around URL if no URL-TITLE argument;
+otherwise, insert URL-TITLE followed by URL in parentheses."
+  (let ((args (texinfo-format-parse-args)))
+    (texinfo-discard-command)
+    ;; if url-title
+    (if (nth 1 args)
+        (insert  (nth 1 args) " (" (nth 0 args) ")")
+      (insert "`" (nth 0 args) "'"))))
+
+
+\f
+;;; New command definition
+;; @alias NEW=EXISTING
+(put 'alias 'texinfo-format 'texinfo-alias)
+(defun-maybe texinfo-alias ()
+  (let ((start (1- (point)))
+       args)
+    (skip-chars-forward " ")
+    (save-excursion (end-of-line) (setq texinfo-command-end (point)))
+    (if (not (looking-at "\\([^=]+\\)=\\(.*\\)"))
+       (error "Invalid alias command")
+      (setq texinfo-alias-list
+           (cons
+            (cons
+             (buffer-substring (match-beginning 1) (match-end 1))
+             (buffer-substring (match-beginning 2) (match-end 2)))
+            texinfo-alias-list))
+      (texinfo-discard-command))))
+
+;; @definfoenclose NEWCMD, BEFORE, AFTER
+
+
+\f
+;;; Special
+;; @image{FILENAME, [WIDTH], [HEIGHT]}
+(put 'image 'texinfo-format 'texinfo-format-image)
+(defun-maybe texinfo-format-image ()
+  ;; I don't know makeinfo parse FILENAME.
+  (let ((args (texinfo-format-parse-args))
+       filename)
+    (when (null (nth 0 args))
+      (error "Invalid image command"))
+    (texinfo-discard-command)
+    ;; makeinfo uses FILENAME.txt
+    (setq filename (format "%s.txt" (nth 0 args)))
+    (message "Reading included file: %s" filename)
+    ;; verbatim for Info output
+    (goto-char (+ (point) (cadr (insert-file-contents filename))))
+    (message "Reading included file: %s...done" filename)))
+
+
+;; @exampleindent
+
+
+\f
+;;; @multitable ... @end multitable
+(defvar-maybe texinfo-extra-inter-column-width 0
+  "*Number of extra spaces between entries (columns) in @multitable.")
+
+(defvar-maybe texinfo-multitable-buffer-name "*multitable-temporary-buffer*")
+(defvar-maybe texinfo-multitable-rectangle-name "texinfo-multitable-temp-")
+
+;; These commands are defined in texinfo.tex for printed output.
+(put 'multitableparskip 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitableparindent 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitablecolmargin 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitablelinespace 'texinfo-format 'texinfo-discard-line-with-args)
+
+(put 'multitable 'texinfo-format 'texinfo-multitable)
+
+(defun-maybe texinfo-multitable ()
+  "Produce multi-column tables."
+
+;; This function pushes information onto the `texinfo-stack'.
+;; A stack element consists of:
+;;   - type-of-command, i.e., multitable
+;;   - the information about column widths, and
+;;   - the position of texinfo-command-start.
+;; e.g., ('multitable (1 2 3 4) 123)
+;; The command line is then deleted.
+  (texinfo-push-stack
+   'multitable
+   ;; push width information on stack
+   (texinfo-multitable-widths))
+  (texinfo-discard-line-with-args))
+
+(put 'multitable 'texinfo-end 'texinfo-end-multitable)
+(defun-maybe texinfo-end-multitable ()
+  "Discard the @end multitable line and pop the stack of multitable."
+  (texinfo-discard-command)
+  (texinfo-pop-stack 'multitable))
+
+(when-broken texinfo-multitable-widths
+  (fmakunbound 'texinfo-multitable-widths))
+
+(defun-maybe texinfo-multitable-widths ()
+  "Return list of widths of each column in a multi-column table."
+  (let (texinfo-multitable-width-list)
+    ;; Fractions format:
+    ;;  @multitable @columnfractions .25 .3 .45
+    ;;
+    ;; Template format:
+    ;;  @multitable {Column 1 template} {Column 2} {Column 3 example}
+    ;; Place point before first argument
+    (skip-chars-forward " \t")
+    (cond
+     ;; Check for common misspelling
+     ((looking-at "@columnfraction ")
+      (error "In @multitable, @columnfractions misspelled"))
+     ;; Case 1: @columnfractions .25 .3 .45
+     ((looking-at "@columnfractions")
+      (forward-word 1)
+      (while (not (eolp))
+        (setq texinfo-multitable-width-list
+              (cons
+               (truncate
+                (1-
+                 (* fill-column (read (get-buffer (current-buffer))))))
+               texinfo-multitable-width-list))))
+     ;;
+     ;; Case 2: {Column 1 template} {Column 2} {Column 3 example}
+     ((looking-at "{")
+      (let ((start-of-templates (point)))
+        (while (not (eolp))
+          (skip-chars-forward " \t")
+          (let* ((start-of-template (1+ (point)))
+                 (end-of-template
+                 ;; forward-sexp works with braces in Texinfo mode
+                  (progn (forward-sexp 1) (1- (point)))))
+            (setq texinfo-multitable-width-list
+                 (cons (- (progn (goto-char end-of-template) (current-column))
+                          (progn (goto-char start-of-template) (current-column)))
+                        texinfo-multitable-width-list))
+            ;; Remove carriage return from within a template, if any.
+            ;; This helps those those who want to use more than
+            ;; one line's worth of words in @multitable line.
+            (narrow-to-region start-of-template end-of-template)
+            (goto-char (point-min))
+            (while (search-forward "
+" nil t)
+              (delete-char -1))
+            (goto-char (point-max))
+            (widen)
+            (forward-char 1)))))
+     ;;
+     ;; Case 3: Trouble
+     (t
+      (error
+       "You probably need to specify column widths for @multitable correctly")))
+    ;; Check whether columns fit on page.
+    (let ((desired-columns
+           (+
+            ;; between column spaces
+            (length texinfo-multitable-width-list)
+            ;; additional between column spaces, if any
+            texinfo-extra-inter-column-width
+            ;; sum of spaces for each entry
+            (apply '+ texinfo-multitable-width-list))))
+      (if (> desired-columns fill-column)
+          (error
+           (format
+            "Multi-column table width, %d chars, is greater than page width, %d chars."
+            desired-columns fill-column))))
+    texinfo-multitable-width-list))
+
+;; @item  A1  @tab  A2  @tab  A3
+(defun-maybe texinfo-multitable-extract-row ()
+  "Return multitable row, as a string.
+End of row is beginning of next @item or beginning of @end.
+Cells within rows are separated by @tab."
+  (skip-chars-forward " \t")
+  (let* ((start (point))
+         (end (progn
+                (re-search-forward "@item\\|@end")
+                (match-beginning 0)))
+         (row (progn (goto-char end)
+                     (skip-chars-backward " ")
+                     ;; remove whitespace at end of argument
+                     (delete-region (point) end)
+                     (buffer-substring start (point)))))
+    (delete-region texinfo-command-start end)
+    row))
+
+(when-broken texinfo-multitable-item
+  (fmakunbound 'texinfo-multitable-item))
+
+(put 'multitable 'texinfo-item 'texinfo-multitable-item)
+(defun-maybe texinfo-multitable-item ()
+  "Format a row within a multicolumn table.
+Cells in row are separated by @tab.
+Widths of cells are specified by the arguments in the @multitable line.
+All cells are made to be the same height.
+This command is executed when texinfmt sees @item inside @multitable."
+  (let ((original-buffer (current-buffer))
+        (table-widths (reverse (car (cdr (car texinfo-stack)))))
+        (existing-fill-column fill-column)
+        start
+        end
+        (table-column       0)
+        (table-entry-height 0)
+        ;; unformatted row looks like:  A1  @tab  A2  @tab  A3
+        ;; extract-row command deletes the source line in the table.
+        (unformated-row (texinfo-multitable-extract-row)))
+    ;; Use a temporary buffer
+    (set-buffer (get-buffer-create texinfo-multitable-buffer-name))
+    (delete-region (point-min) (point-max))
+    (insert unformated-row)
+    (goto-char (point-min))
+;; 1. Check for correct number of @tab in line.
+    (let ((tab-number 1))                       ; one @tab between two columns
+      (while (search-forward "@tab" nil t)
+        (setq tab-number (1+ tab-number)))
+      (if (/= tab-number (length table-widths))
+          (error "Wrong number of @tab's in a @multitable row")))
+    (goto-char (point-min))
+;; 2. Format each cell, and copy to a rectangle
+    ;; buffer looks like this:    A1  @tab  A2  @tab  A3
+    ;; Cell #1: format up to @tab
+    ;; Cell #2: format up to @tab
+    ;; Cell #3: format up to eob
+    (while (not (eobp))
+      (setq start (point))
+      (setq end (save-excursion
+                  (if (search-forward "@tab" nil 'move)
+                      ;; Delete the @tab command, including the @-sign
+                      (delete-region
+                       (point)
+                       (progn (forward-word -1) (1- (point)))))
+                  (point)))
+      ;; Set fill-column *wider* than needed to produce inter-column space
+      (setq fill-column (+ 1
+                           texinfo-extra-inter-column-width
+                           (nth table-column table-widths)))
+      (narrow-to-region start end)
+      ;; Remove whitespace before and after entry.
+      (skip-chars-forward " ")
+      (delete-region (point) (save-excursion (beginning-of-line) (point)))
+      (goto-char (point-max))
+      (skip-chars-backward " ")
+      (delete-region (point) (save-excursion (end-of-line) (point)))
+      ;; Temorarily set texinfo-stack to nil so texinfo-format-scan
+      ;; does not see an unterminated @multitable.
+      (let (texinfo-stack)                      ; nil
+        (texinfo-format-scan))
+      (let (fill-prefix)                        ; no fill prefix
+        (fill-region (point-min) (point-max)))
+      (setq table-entry-height
+            (max table-entry-height (count-lines (point-min) (point-max))))
+;; 3. Move point to end of bottom line, and pad that line to fill column.
+      (goto-char (point-min))
+      (forward-line (1- table-entry-height))
+      (let* ((beg (point))                      ; beginning of line
+             ;; add one more space for inter-column spacing
+             (needed-whitespace
+              (1+
+              (- fill-column
+                 (progn (end-of-line) (current-column)))))) ; end of existing line
+        (insert (make-string
+                 (if (> needed-whitespace 0) needed-whitespace 1)
+                 ? )))
+      ;; now, put formatted cell into a rectangle
+      (set (intern (concat texinfo-multitable-rectangle-name
+                           (int-to-string table-column)))
+           (extract-rectangle (point-min) (point)))
+      (delete-region (point-min) (point))
+      (goto-char (point-max))
+      (setq table-column (1+ table-column))
+      (widen))
+;; 4. Add extra lines to rectangles so all are of same height
+    (let ((total-number-of-columns table-column)
+          (column-number 0)
+          here)
+      (while (> table-column 0)
+        (let ((this-rectangle (int-to-string table-column)))
+          (while (< (length this-rectangle) table-entry-height)
+            (setq this-rectangle (append this-rectangle '("")))))
+        (setq table-column (1- table-column)))
+;; 5. Insert formatted rectangles in original buffer
+      (switch-to-buffer original-buffer)
+      (open-line table-entry-height)
+      (while (< column-number total-number-of-columns)
+        (setq here (point))
+        (insert-rectangle
+         (eval (intern
+                (concat texinfo-multitable-rectangle-name
+                        (int-to-string column-number)))))
+        (goto-char here)
+        (end-of-line)
+        (setq column-number (1+ column-number))))
+    (kill-buffer texinfo-multitable-buffer-name)
+    (setq fill-column existing-fill-column)))
+
+\f
+(when-broken texinfo-format-printindex
+  (fmakunbound 'texinfo-format-printindex))
+
+(defun-maybe texinfo-format-printindex ()
+  (let ((indexelts (symbol-value
+                    (cdr (assoc (texinfo-parse-arg-discard)
+                                texinfo-indexvar-alist))))
+        opoint)
+    (insert "\n* Menu:\n\n")
+    (setq opoint (point))
+    (texinfo-print-index nil indexelts)
+
+    (if (memq system-type '(vax-vms windows-nt ms-dos))
+        (texinfo-sort-region opoint (point))
+      (shell-command-on-region opoint (point) "sort -fd" 1))))
+
+(provide 'ptexinfmt)
+
+;;; ptexinfmt.el ends here
index 56203e9..2f63abf 100644 (file)
@@ -1,7 +1,10 @@
 ;;; qp.el --- Quoted-Printable functions
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail, extensions
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 
 ;;; Commentary:
 
+;; Functions for encoding and decoding quoted-printable text as
+;; defined in RFC 2045.
+
 ;;; Code:
 
-(defvar quoted-printable-encoding-characters
-  (mapcar 'identity "0123456789ABCDEFabcdef"))
+(require 'mm-util)
+(eval-when-compile (defvar mm-use-ultra-safe-encoding))
 
-(defun quoted-printable-decode-region (from to)
-  "Decode quoted-printable in the region between FROM and TO."
+(defun quoted-printable-decode-region (from to &optional coding-system)
+  "Decode quoted-printable in the region between FROM and TO, per RFC 2045.
+If CODING-SYSTEM is non-nil, decode bytes into characters with that
+coding-system."
   (interactive "r")
+  (unless (mm-coding-system-p coding-system) ; e.g. `ascii' from Gnus
+    (setq coding-system nil))
   (save-excursion
-    (goto-char from)
-    (while (search-forward "=" to t)
-      (cond
-       ;; End of the line.
-       ((eq (char-after) ?\n)
-       (delete-char -1)
-       (delete-char 1))
-       ;; Encoded character.
-       ((and
-        (memq (char-after) quoted-printable-encoding-characters)
-        (memq (char-after (1+ (point)))
-              quoted-printable-encoding-characters))
-       (subst-char-in-region
-        (1- (point)) (point) ?=
-        (string-to-number
-         (buffer-substring (point) (+ 2 (point)))
-         16))
-       (delete-char 2))
-       ;; Quoted equal sign.
-       ((eq (char-after) ?=)
-       (delete-char 1))
-       ;; End of buffer.
-       ((eobp)
-       (delete-char -1))
-       ;; Invalid.
-       (t
-       (message "Malformed MIME quoted-printable message"))))))
-
-(defun quoted-printable-decode-string (string)
- "Decode the quoted-printable-encoded STRING and return the results."
- (with-temp-buffer
-   (insert string)
-   (quoted-printable-decode-region (point-min) (point-max))
-   (buffer-string)))
+    (save-restriction
+      ;; RFC 2045:  ``An "=" followed by two hexadecimal digits, one
+      ;; or both of which are lowercase letters in "abcdef", is
+      ;; formally illegal. A robust implementation might choose to
+      ;; recognize them as the corresponding uppercase letters.''
+      (let ((case-fold-search t))
+       (narrow-to-region from to)
+       ;; Do this in case we're called from Gnus, say, in a buffer
+       ;; which already contains non-ASCII characters which would
+       ;; then get doubly-decoded below.
+       (if coding-system
+           (mm-encode-coding-region (point-min) (point-max) coding-system))
+       (goto-char (point-min))
+       (while (and (skip-chars-forward "^=")
+                   (not (eobp)))
+         (cond ((eq (char-after (1+ (point))) ?\n)
+                (delete-char 2))
+               ((looking-at "=[0-9A-F][0-9A-F]")
+                (let ((byte (string-to-int (buffer-substring (1+ (point))
+                                                             (+ 3 (point)))
+                                           16)))
+                  (insert byte)
+                  (delete-char 3)
+                  ;; Why backward-char??? 
+                  ;;(unless (eq byte 61) ;; 61 is not ?= in XEmacs
+                  ;;  (backward-char))
+                  ))
+               (t
+                (error "Malformed quoted-printable text")
+                (forward-char)))))
+      (if coding-system
+         (mm-decode-coding-region (point-min) (point-max) coding-system)))))
+
+(defun quoted-printable-decode-string (string &optional coding-system)
+  "Decode the quoted-printable encoded STRING and return the result.
+If CODING-SYSTEM is non-nil, decode the region with coding-system."
+  (with-temp-buffer
+    (insert string)
+    (quoted-printable-decode-region (point-min) (point-max) coding-system)
+    (buffer-string)))
 
 (defun quoted-printable-encode-region (from to &optional fold class)
-  "QP-encode the region between FROM and TO.
-If FOLD, fold long lines.  If CLASS, translate the characters
-matched by that regexp."
+  "Quoted-printable encode the region between FROM and TO per RFC 2045.
+
+If FOLD, fold long lines at 76 characters (as required by the RFC).
+If CLASS is non-nil, translate the characters matched by that class in
+the form expected by `skip-chars-forward'.
+
+If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and
+encode lines starting with \"From\"."
   (interactive "r")
+  (unless class
+    ;; Avoid using 8bit characters. = is \075.
+    ;; Equivalent to "^\000-\007\013\015-\037\200-\377="
+    (setq class "\010-\012\014\040-\074\076-\177"))
+  (if (fboundp 'string-as-multibyte)
+      (setq class (string-as-multibyte class)))
   (save-excursion
     (save-restriction
       (narrow-to-region from to)
-;;      (mm-encode-body)
-      ;; Encode all the non-ascii and control characters.
-      (goto-char (point-min))
-      (while (and (skip-chars-forward
-                  (or class "^\000-\007\013\015-\037\200-\377="))
-                 (not (eobp)))
-       (insert
-        (prog1
-            (upcase (format "=%02x" (char-after)))
-          (delete-char 1))))
-      ;; Encode white space at the end of lines.
-      (goto-char (point-min))
-      (while (re-search-forward "[ \t]+$" nil t)
-       (goto-char (match-beginning 0))
-       (while (not (eolp))
+      (mm-with-unibyte-current-buffer-mule4
+       (if (and (not (featurep 'xemacs)) ;; Don't check XEmacs Mule.
+                (fboundp 'find-charset-region))
+           (if (delq 'unknown          ; Emacs 20 unibyte
+                     (delq 'eight-bit-graphic ; Emacs 21
+                           (delq 'eight-bit-control
+                                 (delq 'ascii 
+                                       (find-charset-region from to)))))
+               (error "Multibyte character in QP encoding region")))
+       ;; Encode all the non-ascii and control characters.
+       (goto-char (point-min))
+       (while (and (skip-chars-forward class)
+                   (not (eobp)))
          (insert
           (prog1
-              (upcase (format "=%02x" (char-after)))
-            (delete-char 1)))))
-      (when fold
-       ;; Fold long lines.
+              (format "=%02X" (char-after))
+            (delete-char 1))))
+       ;; Encode white space at the end of lines.
        (goto-char (point-min))
-       (while (not (eobp))
-         (end-of-line)
-         (while (> (current-column) 72)
-           (beginning-of-line)
-           (forward-char 71) ;; 71 char plus an "="
-           (search-backward "=" (- (point) 2) t)
-           (insert "=\n")
-           (end-of-line))
-         (unless (eobp)
-           (forward-line)))))))
+       (while (re-search-forward "[ \t]+$" nil t)
+         (goto-char (match-beginning 0))
+         (while (not (eolp))
+           (insert
+            (prog1
+                (format "=%02X" (char-after))
+              (delete-char 1)))))
+       (let ((mm-use-ultra-safe-encoding
+              (and (boundp 'mm-use-ultra-safe-encoding)
+                   mm-use-ultra-safe-encoding)))
+         (when (or fold mm-use-ultra-safe-encoding)
+           ;; Fold long lines.
+           (let ((tab-width 1))                ; HTAB is one character.
+             (goto-char (point-min))
+             (while (not (eobp))
+               ;; In ultra-safe mode, encode "From " at the beginning
+               ;; of a line.
+               (when mm-use-ultra-safe-encoding
+                 (beginning-of-line)
+                 (if (looking-at "From ")
+                     (replace-match "From=20" nil t)
+                   (if (looking-at "-")
+                       (replace-match "=2D" nil t))))
+               (end-of-line)
+             (while (> (current-column) 76) ; tab-width must be 1.
+               (beginning-of-line)
+               (forward-char 75)       ; 75 chars plus an "="
+               (search-backward "=" (- (point) 2) t)
+               (insert "=\n")
+               (end-of-line))
+             (unless (eobp)
+               (forward-line))))))))))
 
 (defun quoted-printable-encode-string (string)
- "QP-encode STRING and return the results."
- (mm-with-unibyte-buffer
-   (insert string)
-   (quoted-printable-encode-region (point-min) (point-max))
-   (buffer-string)))
+  "Encode the STRING as quoted-printable and return the result."
+  (with-temp-buffer
+    (insert string)
+    (quoted-printable-encode-region (point-min) (point-max))
+    (buffer-string)))
 
 (provide 'qp)
 
-;; qp.el ends here
+;;; qp.el ends here
index d99e37d..4542604 100644 (file)
@@ -64,7 +64,7 @@ Argument PROMPT ."
              (1+ (- (length msg) (window-width (minibuffer-window)))))
        (and (> truncate 0)
             (setq msg (concat "$" (substring msg (1+ truncate))))))
-      (message msg)
+      (message "%s" msg)
       (setq c (read-pw-read-char-exclusive))
       (cond ((eq ?\C-g c)
             (setq quit-flag t
@@ -90,16 +90,17 @@ Argument PROMPT ."
   (if (not mail-source-password-cache)
       (car (mapcar
            (lambda (x)
-             (mail-source-bind (pop x)
-               (let ((from (format "%s:%s:%s" server user port))
-                     (mail-source-string
-                      (format "pop:%s@%s" user server)))
-                 (setq pw (read-pw-return-passwd-string user server))
-                 (unless (assoc user mail-source-password-cache)
-                   (set-alist 'mail-source-password-cache
-                              (format "%s:%s:%s" server user port)
-                              pw))
-                 (cdr (assoc from mail-source-password-cache)))))
+             (when (eq 'pop (car x))
+               (mail-source-bind (pop x)
+                 (let ((from (format "%s:%s:%s" server user port))
+                       (mail-source-string
+                        (format "pop:%s@%s" user server)))
+                   (setq pw (read-pw-return-passwd-string user server))
+                   (unless (assoc user mail-source-password-cache)
+                     (set-alist 'mail-source-password-cache
+                                (format "%s:%s:%s" server user port)
+                                pw))
+                   (cdr (assoc from mail-source-password-cache))))))
            mail-sources))))
 ;;
 ;;
index adf475d..c3bb790 100644 (file)
@@ -1,10 +1,10 @@
 ;;; rfc1843.el --- HZ (rfc1843) decoding
-;; Copyright (c) 1998,1999 by Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: news HZ
+;; Keywords: news HZ HZ+ mail i18n
 
-;; This file is a part of GNU Emacs, but the same permissions apply.
+;; This file is a 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
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'mm-util)
 
 (defvar rfc1843-word-regexp
-  "~\\({\\([\041-\167][\041-\176]\\| \\)+\\(~}\\|$\\)")
+  "~\\({\\([\041-\167][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
 
 (defvar rfc1843-word-regexp-strictly
-      "~\\({\\([\041-\167][\041-\176]\\)+\\(~}\\|$\\)")
+  "~\\({\\([\041-\167][\041-\176]\\)+\\)\\(~}\\|$\\)")
 
 (defvar rfc1843-hzp-word-regexp
   "~\\({\\([\041-\167][\041-\176]\\| \\)+\\|\
 [<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
 
 (defvar rfc1843-hzp-word-regexp-strictly
-      "~\\({\\([\041-\167][\041-\176]\\)+\\|\
+  "~\\({\\([\041-\167][\041-\176]\\)+\\|\
 [<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)")
 
 (defcustom rfc1843-decode-loosely nil
@@ -86,7 +87,10 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
            (while (re-search-forward (if rfc1843-decode-hzp
                                          rfc1843-hzp-word-regexp
                                        rfc1843-word-regexp) (point-max) t)
-             (setq str (match-string 1))
+             ;;; Text with extents may cause XEmacs crash
+             (setq str (buffer-substring-no-properties 
+                        (match-beginning 1)
+                        (match-end 1)))
              (setq firstc (aref str 0))
              (insert (mm-decode-coding-string
                       (rfc1843-decode
@@ -100,8 +104,8 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
              (cond ((eq (char-after) ?\n)
                     (delete-char -1)
                     (delete-char 1))
-                 ((eq (char-after) ?~)
-                  (delete-char 1)))))))))
+                   ((eq (char-after) ?~)
+                    (delete-char 1)))))))))
 
 (defun rfc1843-decode-string (string)
   "Decode HZ STRING and return the results."
@@ -115,7 +119,7 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
       (buffer-string))))
 
 (defun rfc1843-decode (word &optional firstc)
-  "Decode HZ WORD and return it"
+  "Decode HZ WORD and return it."
   (let ((i -1) (s (substring word 0)) v)
     (if (or (not firstc) (eq firstc ?{))
        (while (< (incf i) (length s))
@@ -130,31 +134,30 @@ ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
     s))
 
 (defun rfc1843-decode-article-body ()
-   "Decode HZ encoded text in the article body."
-   (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                    (or gnus-newsgroup-name ""))
-       (save-excursion
-        (save-restriction
-          (message-narrow-to-head)
-          (let* ((inhibit-point-motion-hooks t)
-                 (case-fold-search t)
-                 (ct (message-fetch-field "Content-Type" t))
-                 (ctl (and ct (ignore-errors
-                                (mail-header-parse-content-type ct)))))
-            (if (and ctl (not (string-match "/" (car ctl)))) 
-                (setq ctl nil))
-            (goto-char (point-max))
-            (widen)
-            (forward-line 1)
-            (narrow-to-region (point) (point-max))
-            (when (or (not ctl)
-                      (equal (car ctl) "text/plain"))
-              (rfc1843-decode-region (point) (point-max))))))))
+  "Decode HZ encoded text in the article body."
+  (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
+                   (or gnus-newsgroup-name ""))
+      (save-excursion
+       (save-restriction
+         (message-narrow-to-head)
+         (let* ((inhibit-point-motion-hooks t)
+                (case-fold-search t)
+                (ct (message-fetch-field "Content-Type" t))
+                (ctl (and ct (ignore-errors
+                               (mail-header-parse-content-type ct)))))
+           (if (and ctl (not (string-match "/" (car ctl)))) 
+               (setq ctl nil))
+           (goto-char (point-max))
+           (widen)
+           (forward-line 1)
+           (narrow-to-region (point) (point-max))
+           (when (or (not ctl)
+                     (equal (car ctl) "text/plain"))
+             (rfc1843-decode-region (point) (point-max))))))))
 
 (defvar rfc1843-old-gnus-decode-header-function  nil)
 (defvar gnus-decode-header-methods)
 (defvar gnus-decode-encoded-word-methods)
-(defvar gnus-decode-encoded-word-function)
 
 (defun rfc1843-gnus-setup ()
   "Setup HZ decoding for Gnus."
index 1a5950d..70c8c39 100644 (file)
@@ -1,5 +1,6 @@
 ;;; rfc2045.el --- Functions for decoding rfc2045 headers
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -18,6 +19,9 @@
 ;; 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.
+  
+;; RFC 2045 is: "Multipurpose Internet Mail Extensions (MIME) Part
+;; One:  Format of Internet Message Bodies".
 
 ;;; Commentary:
 
index 1a08b3c..eb385d6 100644 (file)
@@ -1,5 +1,5 @@
 ;;; rfc2047.el --- Functions for encoding and decoding rfc2047 messages
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 
 ;;; Commentary:
 
+;; RFC 2047 is "MIME (Multipurpose Internet Mail Extensions) Part
+;; Three:  Message Header Extensions for Non-ASCII Text".
+
 ;;; Code:
 
-(eval-and-compile
-  (eval
-   '(unless (fboundp 'base64-decode-string)
-      (require 'base64))))
+(eval-when-compile (require 'cl))
 
 (require 'qp)
 (require 'mm-util)
 (require 'ietf-drums)
 (require 'mail-prsvr)
+(require 'base64)
+;; Fixme: Avoid this (for gnus-point-at-...) mm dependence on gnus.
+(require 'gnus-util)
+(autoload 'mm-body-7-or-8 "mm-bodies")
 
 (defvar rfc2047-header-encoding-alist
   '(("Newsgroups" . nil)
     ("Message-ID" . nil)
+    ("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\)" .
+     "-A-Za-z0-9!*+/=_")
     (t . mime))
   "*Header/encoding method alist.
 The list is traversed sequentially.  The keys can either be
-header regexps or `t'.
+header regexps or t.
 
 The values can be:
 
 1) nil, in which case no encoding is done;
 2) `mime', in which case the header will be encoded according to RFC2047;
-3) a charset, in which case it will be encoded as that charse;
+3) a charset, in which case it will be encoded as that charset;
 4) `default', in which case the field will be encoded as the rest
-   of the article.")
+   of the article.
+5) a string, like `mime', expect for using it as word-chars.")
 
 (defvar rfc2047-charset-encoding-alist
   '((us-ascii . nil)
@@ -61,6 +68,8 @@ The values can be:
     (iso-8859-7 . Q)
     (iso-8859-8 . Q)
     (iso-8859-9 . Q)
+    (iso-8859-14 . Q)
+    (iso-8859-15 . Q)
     (iso-2022-jp . B)
     (iso-2022-kr . B)
     (gb2312 . B)
@@ -79,8 +88,12 @@ Valid encodings are nil, `Q' and `B'.")
   "Alist of RFC2047 encodings to encoding functions.")
 
 (defvar rfc2047-q-encoding-alist
-  '(("\\(From\\|Cc\\|To\\|Bcc\||Reply-To\\):" . "-A-Za-z0-9!*+/=_")
-    ("." . "^\000-\007\013\015-\037\200-\377=_?"))
+  '(("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\):" 
+     . "-A-Za-z0-9!*+/" )
+    ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
+    ;; Avoid using 8bit characters. Some versions of Emacs has bug!
+    ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
+    ("." . "\010\012\014\040-\074\076\100-\136\140-\177"))
   "Alist of header regexps and valid Q characters.")
 
 ;;;
@@ -105,86 +118,160 @@ Valid encodings are nil, `Q' and `B'.")
   "Encode the message header according to `rfc2047-header-encoding-alist'.
 Should be called narrowed to the head of the message."
   (interactive "*")
-  (when (featurep 'mule)
-    (save-excursion
-      (goto-char (point-min))
-      (let ((alist rfc2047-header-encoding-alist)
-           elem method)
-       (while (not (eobp))
-         (save-restriction
-           (rfc2047-narrow-to-field)
-           (when (rfc2047-encodable-p)
-             ;; We found something that may perhaps be encoded.
-             (while (setq elem (pop alist))
-               (when (or (and (stringp (car elem))
-                              (looking-at (car elem)))
-                         (eq (car elem) t))
-                 (setq alist nil
-                       method (cdr elem))))
-             (when method
-               (cond
-                ((eq method 'mime)
-                 (rfc2047-encode-region (point-min) (point-max))
-                 (rfc2047-fold-region (point-min) (point-max)))
-                ;; Hm.
-                (t))))
-           (goto-char (point-max)))))
-      (when mail-parse-charset
-       (encode-coding-region (point-min) (point-max)
-                             mail-parse-charset)))))
+  (save-excursion
+    (goto-char (point-min))
+    (let (alist elem method)
+      (while (not (eobp))
+       (save-restriction
+         (rfc2047-narrow-to-field)
+         (if (not (rfc2047-encodable-p))
+             (if (and (eq (mm-body-7-or-8) '8bit)
+                      (mm-multibyte-p)
+                      (mm-coding-system-p
+                       (car message-posting-charset)))
+                      ;; 8 bit must be decoded.
+                      ;; Is message-posting-charset a coding system?
+                      (mm-encode-coding-region
+                       (point-min) (point-max)
+                       (car message-posting-charset)))
+           ;; We found something that may perhaps be encoded.
+           (setq method nil
+                 alist rfc2047-header-encoding-alist)
+           (while (setq elem (pop alist))
+             (when (or (and (stringp (car elem))
+                            (looking-at (car elem)))
+                       (eq (car elem) t))
+               (setq alist nil
+                     method (cdr elem))))
+           (cond
+            ((stringp method)
+             (rfc2047-encode-region (point-min) (point-max) method))
+            ((eq method 'mime)
+             (rfc2047-encode-region (point-min) (point-max)))
+            ((eq method 'default)
+             (if (and (featurep 'mule)
+                      (if (boundp 'default-enable-multibyte-characters)
+                          default-enable-multibyte-characters)
+                      mail-parse-charset)
+                 (mm-encode-coding-region (point-min) (point-max)
+                                          mail-parse-charset)))
+            ((null method)
+             (and (delq 'ascii 
+                        (mm-find-charset-region (point-min) 
+                                                (point-max)))
+                  (if (y-or-n-p 
+                       "Some texts are not encoded. Encode them anyway?")
+                      (rfc2047-encode-region (point-min) (point-max))
+                    (error "Cannot send unencoded text."))))
+            ((mm-coding-system-p method)
+             (if (and (featurep 'mule)
+                      (if (boundp 'default-enable-multibyte-characters)
+                          default-enable-multibyte-characters))
+                 (mm-encode-coding-region (point-min) (point-max) method)))
+            ;; Hm.
+            (t)))
+         (goto-char (point-max)))))))
 
 (defun rfc2047-encodable-p ()
-  "Say whether the current (narrowed) buffer contains characters that need encoding."
+  "Return non-nil if any characters in current buffer need encoding in headers.
+The buffer may be narrowed."
   (let ((charsets
         (mapcar
          'mm-mime-charset
          (mm-find-charset-region (point-min) (point-max))))
-       (cs (list 'us-ascii mail-parse-charset))
+       (cs (list 'us-ascii (car message-posting-charset)))
        found)
     (while charsets
       (unless (memq (pop charsets) cs)
        (setq found t)))
     found))
 
-(defun rfc2047-dissect-region (b e)
+(defun rfc2047-dissect-region (b e &optional word-chars)
   "Dissect the region between B and E into words."
-  (let (words)
+  (unless word-chars
+    ;; Anything except most CTLs, WSP
+    (setq word-chars "\010\012\014\041-\177"))
+  (let (mail-parse-mule-charset
+       words point current 
+       result word)
     (save-restriction
       (narrow-to-region b e)
       (goto-char (point-min))
-      (while (re-search-forward
-             (concat "[^" ietf-drums-tspecials " \t\n]+") nil t)
-       (push
-        (list (match-beginning 0) (match-end 0)
-              (car (delq 'ascii (mm-find-charset-region
-                                 (match-beginning 0) (match-end 0)))))
-        words))
-      words)))
-
-(defun rfc2047-encode-region (b e)
-  "Encode all encodable words in REGION."
-  (let ((words (rfc2047-dissect-region b e))
-       beg end current word)
-    (while (setq word (pop words))
-      (if (equal (nth 2 word) current)
-         (setq beg (nth 0 word))
-       (when current
-         (rfc2047-encode beg end current))
-       (setq current (nth 2 word)
-             beg (nth 0 word)
-             end (nth 1 word))))
-    (when current
-      (rfc2047-encode beg end current))))
-
-(defun rfc2047-encode-string (string)
+      (skip-chars-forward "\000-\177")
+      (while (not (eobp))
+       (setq point (point))
+       (skip-chars-backward word-chars b)
+       (unless (eq b (point))
+         (push (cons (buffer-substring b (point)) nil) words))
+       (setq b (point))
+       (goto-char point)
+       (setq current (mm-charset-after))
+       (forward-char 1)
+       (skip-chars-forward word-chars)
+       (while (and (not (eobp))
+                   (eq (mm-charset-after) current))
+         (forward-char 1)
+         (skip-chars-forward word-chars))
+       (unless (eq b (point))
+         (push (cons (buffer-substring b (point)) current) words))
+       (setq b (point))
+       (skip-chars-forward "\000-\177"))
+      (unless (eq b (point))
+       (push (cons (buffer-substring b (point)) nil) words)))
+    ;; merge adjacent words
+    (setq word (pop words))
+    (while word
+      (if (and (cdr word)
+              (caar words)
+              (not (cdar words))
+              (not (string-match "[^ \t]" (caar words))))
+         (if (eq (cdr (nth 1 words)) (cdr word))
+             (progn
+               (setq word (cons (concat
+                                 (car (nth 1 words)) (caar words)
+                                 (car word))
+                                (cdr word)))
+               (pop words)
+               (pop words))
+           (push (cons (concat (caar words) (car word)) (cdr word))
+                 result)
+           (pop words)
+           (setq word (pop words)))
+       (push word result)
+       (setq word (pop words))))
+    result))
+
+(defun rfc2047-encode-region (b e &optional word-chars)
+  "Encode all encodable words in region."
+  (let ((words (rfc2047-dissect-region b e word-chars)) word)
+    (save-restriction
+      (narrow-to-region b e)
+      (delete-region (point-min) (point-max))
+      (while (setq word (pop words))
+       (if (not (cdr word))
+           (insert (car word))
+         (rfc2047-fold-region (gnus-point-at-bol) (point))
+         (goto-char (point-max))
+         (if (> (- (point) (save-restriction
+                             (widen)
+                             (gnus-point-at-bol))) 76)
+             (insert "\n "))
+         ;; Insert blank between encoded words
+         (if (eq (char-before) ?=) (insert " "))
+         (rfc2047-encode (point)
+                         (progn (insert (car word)) (point))
+                         (cdr word))))
+      (rfc2047-fold-region (point-min) (point-max)))))
+
+(defun rfc2047-encode-string (string &optional word-chars)
   "Encode words in STRING."
   (with-temp-buffer
     (insert string)
-    (rfc2047-encode-region (point-min) (point-max))
+    (rfc2047-encode-region (point-min) (point-max) word-chars)
     (buffer-string)))
 
 (defun rfc2047-encode (b e charset)
-  "Encode the word in the region with CHARSET."
+  "Encode the word in the region B to E with CHARSET."
   (let* ((mime-charset (mm-mime-charset charset))
         (encoding (or (cdr (assq mime-charset
                                  rfc2047-charset-encoding-alist))
@@ -202,7 +289,9 @@ Should be called narrowed to the head of the message."
          (goto-char (min (point-max) (+ 15 (point))))
          (unless (eobp)
            (insert "\n"))))
-      (mm-encode-coding-region (point-min) (point-max) mime-charset)
+      (if (and (mm-multibyte-p)
+              (mm-coding-system-p mime-charset))
+         (mm-encode-coding-region (point-min) (point-max) mime-charset))
       (funcall (cdr (assq encoding rfc2047-encoding-function-alist))
               (point-min) (point-max))
       (goto-char (point-min))
@@ -216,28 +305,84 @@ Should be called narrowed to the head of the message."
        (forward-line 1)))))
 
 (defun rfc2047-fold-region (b e)
-  "Fold the long lines in the region."
+  "Fold long lines in the region."
   (save-restriction
     (narrow-to-region b e)
     (goto-char (point-min))
-    (let ((break nil))
+    (let ((break nil)
+         (qword-break nil)
+         (bol (save-restriction
+                (widen)
+                (gnus-point-at-bol))))
       (while (not (eobp))
+       (when (and (or break qword-break) (> (- (point) bol) 76))
+         (goto-char (or break qword-break))
+         (setq break nil
+               qword-break nil)
+         (insert "\n ")
+         (setq bol (1- (point)))
+         ;; Don't break before the first non-LWSP characters.
+         (skip-chars-forward " \t")
+         (forward-char 1))
        (cond
+        ((eq (char-after) ?\n)
+         (forward-char 1)
+         (setq bol (point)
+               break nil
+               qword-break nil)
+         (skip-chars-forward " \t")
+         (unless (or (eobp) (eq (char-after) ?\n))
+           (forward-char 1)))
+        ((eq (char-after) ?\r)
+         (forward-char 1))
         ((memq (char-after) '(?  ?\t))
-         (setq break (point)))
-        ((and (not break)
-              (looking-at "=\\?"))
-         (setq break (point)))
-        ((and (looking-at "\\?=")
-              (> (- (point) (save-excursion (beginning-of-line) (point))) 76))
-         (goto-char break)
-         (insert "\n ")
-         (forward-line 1)))
-       (unless (eobp)
-         (forward-char 1))))))
+         (skip-chars-forward " \t")
+         (setq break (1- (point))))
+        ((not break)
+         (if (not (looking-at "=\\?[^=]"))
+             (if (eq (char-after) ?=)
+                 (forward-char 1)
+               (skip-chars-forward "^ \t\n\r="))
+           (setq qword-break (point))
+           (skip-chars-forward "^ \t\n\r")))
+        (t
+         (skip-chars-forward "^ \t\n\r"))))
+      (when (and (or break qword-break) (> (- (point) bol) 76))
+       (goto-char (or break qword-break))
+       (setq break nil
+             qword-break nil)
+       (insert "\n ")
+       (setq bol (1- (point)))
+       ;; Don't break before the first non-LWSP characters.
+       (skip-chars-forward " \t")
+       (forward-char 1)))))
+
+(defun rfc2047-unfold-region (b e)
+  "Unfold lines in the region."
+  (save-restriction
+    (narrow-to-region b e)
+    (goto-char (point-min))
+    (let ((bol (save-restriction
+                (widen)
+                (gnus-point-at-bol)))
+         (eol (gnus-point-at-eol))
+         leading)
+      (forward-line 1)
+      (while (not (eobp))
+       (looking-at "[ \t]*")
+       (setq leading (- (match-end 0) (match-beginning 0)))
+       (if (< (- (gnus-point-at-eol) bol leading) 76)
+           (progn
+             (goto-char eol)
+             (delete-region eol (progn
+                                  (skip-chars-forward "[ \t\n\r]+")
+                                  (1- (point)))))
+         (setq bol (gnus-point-at-bol)))
+       (setq eol (gnus-point-at-eol))
+       (forward-line 1)))))
 
 (defun rfc2047-b-encode-region (b e)
-  "Encode the header contained in REGION with the B encoding."
+  "Base64-encode the header contained in region B to E."
   (save-restriction
     (narrow-to-region (goto-char b) e)
     (while (not (eobp))
@@ -247,30 +392,39 @@ Should be called narrowed to the head of the message."
       (forward-line))))
 
 (defun rfc2047-q-encode-region (b e)
-  "Encode the header contained in REGION with the Q encoding."
+  "Quoted-printable-encode the header in region B to E."
   (save-excursion
     (save-restriction
       (narrow-to-region (goto-char b) e)
-      (let ((alist rfc2047-q-encoding-alist))
+      (let ((alist rfc2047-q-encoding-alist)
+           (bol (save-restriction
+                  (widen)
+                  (gnus-point-at-bol))))
        (while alist
          (when (looking-at (caar alist))
            (quoted-printable-encode-region b e nil (cdar alist))
            (subst-char-in-region (point-min) (point-max) ?  ?_)
            (setq alist nil))
          (pop alist))
-       (goto-char (point-min))
-       (while (not (eobp))
-         (goto-char (min (point-max) (+ 64 (point))))
-         (search-backward "=" (- (point) 2) t)
-         (unless (eobp)
-           (insert "\n")))))))
+       ;; The size of QP encapsulation is about 20, so set limit to
+       ;; 56=76-20.
+       (unless (< (- (point-max) (point-min)) 56)
+         ;; Don't break if it could fit in one line.
+         ;; Let rfc2047-encode-region break it later.
+         (goto-char (1+ (point-min)))
+         (while (and (not (bobp)) (not (eobp)))
+           (goto-char (min (point-max) (+ 56 bol)))
+           (search-backward "=" (- (point) 2) t)
+           (unless (or (bobp) (eobp))
+             (insert "\n")
+             (setq bol (point)))))))))
 
 ;;;
 ;;; Functions for decoding RFC2047 messages
 ;;;
 
 (defvar rfc2047-encoded-word-regexp
-  "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~ +]+\\)\\?=")
+  "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~ +]*\\)\\?=")
 
 (defun rfc2047-decode-region (start end)
   "Decode MIME-encoded words in region between START and END."
@@ -305,7 +459,8 @@ Should be called narrowed to the head of the message."
                   mail-parse-charset
                   (not (eq mail-parse-charset 'us-ascii))
                   (not (eq mail-parse-charset 'gnus-decoded)))
-         (mm-decode-coding-region b (point-max) mail-parse-charset))))))
+         (mm-decode-coding-region b (point-max) mail-parse-charset))
+       (rfc2047-unfold-region (point-min) (point-max))))))
 
 (defun rfc2047-decode-string (string)
   "Decode the quoted-printable-encoded STRING and return the results."
@@ -332,28 +487,49 @@ Return WORD if not."
        (error word))
      word)))
 
+(defun rfc2047-pad-base64 (string)
+  "Pad STRING to quartets."
+  ;; Be more liberal to accept buggy base64 strings. If
+  ;; base64-decode-string accepts buggy strings, this function could
+  ;; be aliased to identity.
+  (case (mod (length string) 4)
+    (0 string)
+    (1 string) ;; Error, don't pad it.
+    (2 (concat string "=="))
+    (3 (concat string "="))))
+
 (defun rfc2047-decode (charset encoding string)
-  "Decode STRING that uses CHARSET with ENCODING.
+  "Decode STRING from the given MIME CHARSET in the given ENCODING.
 Valid ENCODINGs are \"B\" and \"Q\".
-If your Emacs implementation can't decode CHARSET, it returns nil."
+If your Emacs implementation can't decode CHARSET, return nil."
   (if (stringp charset)
-    (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
+      (setq charset (intern (downcase charset))))
+  (if (or (not charset)
+         (eq 'gnus-all mail-parse-ignored-charsets)
+         (memq 'gnus-all mail-parse-ignored-charsets)
+         (memq charset mail-parse-ignored-charsets))
       (setq charset mail-parse-charset))
   (let ((cs (mm-charset-to-coding-system charset)))
+    (if (and (not cs) charset
+            (listp mail-parse-ignored-charsets)
+            (memq 'gnus-unknown mail-parse-ignored-charsets))
+       (setq cs (mm-charset-to-coding-system mail-parse-charset)))
     (when cs
       (when (and (eq cs 'ascii)
                 mail-parse-charset)
        (setq cs mail-parse-charset))
-      (mm-decode-coding-string
-       (cond
-       ((equal "B" encoding)
-        (base64-decode-string string))
-       ((equal "Q" encoding)
-        (quoted-printable-decode-string
-         (mm-replace-chars-in-string string ?_ ? )))
-       (t (error "Invalid encoding: %s" encoding)))
-       cs))))
+      (mm-with-unibyte-current-buffer-mule4
+       ;; In Emacs Mule 4, decoding UTF-8 should be in unibyte mode.
+       (mm-decode-coding-string
+        (cond
+         ((equal "B" encoding)
+          (base64-decode-string 
+           (rfc2047-pad-base64 string)))
+         ((equal "Q" encoding)
+          (quoted-printable-decode-string
+           (mm-replace-chars-in-string string ?_ ? )))
+         (t (error "Invalid encoding: %s" encoding)))
+        cs)))))
 
 (provide 'rfc2047)
 
index c7ce5ab..3d45982 100644 (file)
@@ -1,5 +1,5 @@
 ;;; rfc2104.el --- RFC2104 Hashed Message Authentication Codes
-;; Copyright (C) 1998,1999 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
 ;;; (rfc2104-hash 'md5 64 16 "Jefe" "what do ya want for nothing?")
 ;;; "750c783e6ab0b503eaa86e310a5db738"
 ;;;
+;;; (require 'sha-1)
+;;; (rfc2104-hash 'sha1-encode 64 20 "Jefe" "what do ya want for nothing?")
+;;; "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"
+;;;
 ;;; 64 is block length of hash function (64 for MD5 and SHA), 16 is
 ;;; resulting hash length (16 for MD5, 20 for SHA).
 ;;;
 ;;; Tested with Emacs 20.2 and XEmacs 20.3.
+;;;
+;;; Test case reference: RFC 2202.
 
 ;;; Release history:
 ;;;
@@ -43,6 +49,8 @@
 ;;; 1998-08-26  don't require hexl
 ;;; 1998-09-25  renamed from hmac.el to rfc2104.el, also renamed functions
 ;;; 1999-10-23  included in pgnus
+;;; 2000-08-15  `rfc2104-hexstring-to-bitstring'
+;;; 2000-05-12  added sha-1 example, added test case reference
  
 (eval-when-compile (require 'cl))
 
        (rfc2104-hex-to-int (reverse (append str nil))))
     0))
 
+(defun rfc2104-hexstring-to-bitstring (str)
+  (let (out)
+    (while (< 0 (length str))
+      (push (rfc2104-hex-to-int (substring str -2)) out)
+      (setq str (substring str 0 -2)))
+    (concat out)))
+
 (defun rfc2104-hash (hash block-length hash-length key text)
   (let* (;; if key is longer than B, reset it to HASH(key)
         (key (if (> (length key) block-length) 
     ;; XOR key with ipad/opad into k_ipad/k_opad
     (setq k_ipad (mapcar (lambda (c) (logxor c rfc2104-ipad)) k_ipad))
     (setq k_opad (mapcar (lambda (c) (logxor c rfc2104-opad)) k_opad))
-    ;; perform inner hash
-    (let ((first-round (funcall hash (concat k_ipad text)))
-         de-hexed)
-      (while (< 0 (length first-round))
-       (push (rfc2104-hex-to-int (substring first-round -2)) de-hexed)
-       (setq first-round (substring first-round 0 -2)))
-      ;; perform outer hash
-      (funcall hash (concat k_opad de-hexed)))))
+    ;; perform outer hash
+    (funcall hash (concat k_opad (rfc2104-hexstring-to-bitstring
+                                 ;; perform inner hash
+                                 (funcall hash (concat k_ipad text)))))))
 
 (provide 'rfc2104)
 
index 8ee24b9..2fd2184 100644 (file)
@@ -1,5 +1,6 @@
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
 (require 'ietf-drums)
+(require 'rfc2047)
 
 (defun rfc2231-get-value (ct attribute)
   "Return the value of ATTRIBUTE from CT."
   (cdr (assq attribute (cdr ct))))
 
+(defun rfc2231-parse-qp-string (string)
+  "Parse QP-encoded string using `rfc2231-parse-string'.
+N.B.  This is in violation with RFC2047, but it seem to be in common use."
+  (rfc2231-parse-string (rfc2047-decode-string string)))
+
 (defun rfc2231-parse-string (string)
   "Parse STRING and return a list.
 The list will be on the form
@@ -77,7 +87,9 @@ The list will be on the form
            (when (eq c ?*)
              (forward-char 1)
              (setq c (char-after))
-             (when (memq c ntoken)
+             (if (not (memq c ntoken))
+                 (setq encoded t
+                       number nil)
                (setq number
                      (string-to-number
                       (buffer-substring
@@ -138,7 +150,8 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
             (string-to-number (buffer-substring (point) (+ (point) 2)) 16)
           (delete-region (1- (point)) (+ (point) 2)))))
       ;; Encode using the charset, if any.
-      (when (and (< (length elems) 1)
+      (when (and (mm-multibyte-p)
+                (> (length elems) 1)
                 (not (equal (intern (car elems)) 'us-ascii)))
        (mm-decode-coding-region (point-min) (point-max)
                                 (intern (car elems))))
@@ -173,7 +186,7 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
        (goto-char (point-min))
        (while (not (eobp))
          (when (> (current-column) 60)
-           (insert "\n")
+           (insert ";\n")
            (setq broken t))
          (if (or (not (memq (following-char) ascii))
                  (memq (following-char) control)
@@ -185,12 +198,13 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
                (delete-char 1))
            (forward-char 1)))
        (goto-char (point-min))
-       (insert (or charset "ascii") "''")
+       (insert (symbol-name (or charset 'us-ascii)) "''")
        (goto-char (point-min))
        (if (not broken)
            (insert param "*=")
          (while (not (eobp))
-           (insert param "*" (format "%d" (incf num)) "*=")
+           (insert (if (>= num 0) " " "\n ")
+                   param "*" (format "%d" (incf num)) "*=")
            (forward-line 1))))
        (spacep
        (goto-char (point-min))
index dd8eba3..1555df9 100644 (file)
@@ -27,7 +27,6 @@
 
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'static))
-(require 'easymenu)
 
 (defvar gnus-score-mode-hook nil
   "*Hook run in score mode buffers.")
diff --git a/lisp/smiley-ems.el b/lisp/smiley-ems.el
new file mode 100644 (file)
index 0000000..6083a65
--- /dev/null
@@ -0,0 +1,158 @@
+;;; smiley-ems.el --- displaying smiley faces
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Dave Love <fx@gnu.org>
+;; Keywords: news mail multimedia
+
+;; 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.
+
+;;; Commentary:
+
+;; A re-written, simplified version of Wes Hardaker's XEmacs smiley.el
+;; which might be merged back to smiley.el if we get an assignment for
+;; that.  We don't have assignments for the images smiley.el uses, but
+;; I'm not sure we need that degree of rococoness and defaults like a
+;; yellow background.  Also, using PBM means we can display the images
+;; more generally.  -- fx
+
+;;; Test smileys:  :-) :-\ :-( :-/
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+(require 'nnheader)
+
+(defgroup smiley nil
+  "Turn :-)'s into real images."
+  :group 'gnus-visual)
+
+;; Maybe this should go.
+(defcustom smiley-data-directory (nnheader-find-etc-directory "smilies")
+  "*Location of the smiley faces files."
+  :type 'directory
+  :group 'smiley)
+
+;; The XEmacs version has a baroque, if not rococo, set of these.
+(defcustom smiley-regexp-alist
+  ;; Perhaps :-) should be distinct -- it does appear in the Jargon File.
+  '(("\\([:;]-?)\\)\\W" 1 "smile.pbm")
+    ("\\(:-[/\\]\\)\\W" 1 "wry.pbm")
+    ("\\(:-[({]\\)\\W" 1 "frown.pbm"))
+  "*A list of regexps to map smilies to images.
+The elements are (REGEXP MATCH FILE), where MATCH is the submatch in
+rgexp to replace with IMAGE.  IMAGE is the name of a PBM file in
+`smiley-data-directory'."
+  :type '(repeat (list regexp
+                      (integer :tag "Regexp match number")
+                      (string :tag "Image name")))
+  :set (lambda (symbol value)
+        (set-default symbol value)
+        (smiley-update-cache))
+  :initialize 'custom-initialize-default
+  :group 'smiley)
+
+(defvar smiley-cached-regexp-alist nil)
+
+(defun smiley-update-cache ()
+  (dolist (elt smiley-regexp-alist)
+    (let* ((data-directory smiley-data-directory)
+          (image (find-image (list (list :type 'pbm
+                                         :file (nth 2 elt)
+                                         :ascent 'center)))))
+      (if image
+         (push (list (car elt) (cadr elt) image)
+               smiley-cached-regexp-alist)))))
+
+(defvar smiley-active nil
+  "Non-nil means smilies in the buffer will be displayed.")
+(make-variable-buffer-local 'smiley-active)
+
+(defvar smiley-mouse-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [down-mouse-2] 'ignore) ; override widget
+    (define-key map [mouse-2]
+      'smiley-mouse-toggle-buffer)
+    map))
+
+(defun smiley-region (start end)
+  "Replace in the region `smiley-regexp-alist' matches with corresponding images."
+  (interactive "r")
+  (when (and (fboundp 'display-graphic-p)
+            (display-graphic-p))
+    (mapcar (lambda (o)
+             (if (eq 'smiley (overlay-get o 'smiley))
+                 (delete-overlay o)))
+           (overlays-in start end))
+    (unless smiley-cached-regexp-alist
+      (smiley-update-cache))
+    (save-excursion
+      (let ((beg (or start (point-min)))
+           group overlay image)
+       (dolist (entry smiley-cached-regexp-alist)
+         (setq group (nth 1 entry)
+               image (nth 2 entry))
+         (goto-char beg)
+         (while (re-search-forward (car entry) end t)
+           (when image
+             (setq overlay (make-overlay (match-beginning group)
+                                         (match-end group)))
+             (overlay-put overlay
+                          'display `(when smiley-active ,@image))
+             (overlay-put overlay 'mouse-face 'highlight)
+             (overlay-put overlay 'smiley t)
+             (overlay-put overlay
+                          'help-echo "mouse-2: toggle smilies in buffer")
+             (overlay-put overlay 'keymap smiley-mouse-map))))))
+        (setq smiley-active t)))
+
+(defun smiley-toggle-buffer (&optional arg)
+  "Toggle displaying smiley faces.
+With arg, turn displaying on if and only if arg is positive."
+  (interactive "P")
+  (if (numberp arg)
+      (setq smiley-active (> arg 0))
+    (setq smiley-active (not smiley-active))))
+
+(defun smiley-mouse-toggle-buffer (event)
+  "Toggle displaying smiley faces.
+With arg, turn displaying on if and only if arg is positive."
+  (interactive "e")
+  (save-excursion
+    (save-window-excursion
+      (mouse-set-point event)
+      (smiley-toggle-buffer))))
+
+(eval-when-compile (defvar gnus-article-buffer))
+
+(defun gnus-smiley-display (&optional arg)
+  "Display textual emoticaons (\"smilies\") as small graphical icons.
+With arg, turn displaying on if and only if arg is positive."
+  (interactive "P")
+  (save-excursion
+    (set-buffer gnus-article-buffer)
+    (save-restriction
+      (widen)
+      (article-goto-body)
+      (smiley-region (point-min) (point-max))
+      (if (and (numberp arg) (<= arg 0))
+         (smiley-toggle-buffer arg)))))
+
+(provide 'smiley)
+
+;;; smiley-ems.el ends here
index 76b2884..380cea9 100644 (file)
@@ -1,5 +1,6 @@
 ;;; smiley.el --- displaying smiley faces
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
 ;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
 ;; Keywords: fun
 ;; The smilies were drawn by Joe Reiss <jreiss@vt.edu>.
 
 (eval-when-compile (require 'cl))
-(require 'annotations)
-(require 'messagexmas)
 (require 'custom)
 
+(eval-and-compile
+  (when (featurep 'xemacs)
+    (require 'annotations)
+    (require 'messagexmas)))
+
 (defgroup smiley nil
-  "Turn :-)'s into real images (XEmacs)."
+  "Turn :-)'s into real images."
   :group 'gnus-visual)
 
-(defcustom smiley-data-directory (message-xmas-find-glyph-directory "smilies")
+;; FIXME: Where is the directory when using Emacs?
+(defcustom smiley-data-directory
+  (if (featurep 'xemacs)
+      (message-xmas-find-glyph-directory "smilies")
+    "/usr/local/lib/xemacs/xemacs-packages/etc/smilies")
   "*Location of the smiley faces files."
   :type 'directory
   :group 'smiley)
@@ -73,7 +81,7 @@
     ("\\(:-*|\\)\\W" 1 "FaceStraight.xpm")
     ("\\(:-*p\\)\\W" 1 "FaceTalking.xpm")
     ("\\(:-*d\\)\\W" 1 "FaceTasty.xpm")
-    ("\\(;-*[>)}\e(I;\e(B]+\\)\\W" 1 "FaceWinking.xpm")
+    ("[^^;_]\\(;-*[>)}\e(I;\e(B]+\\)\\W" 1 "FaceWinking.xpm")
     ("\\(:-*[Vv\e(I5\e(B]\\)\\W" 1 "FaceWry.xpm")
     ("\\([:|]-*P\\)\\W" 1 "FaceYukky.xpm"))
   "*Normal and deformed faces for smilies."
@@ -151,10 +159,9 @@ above them."
   :group 'smiley)
 
 (defvar smiley-glyph-cache nil)
-(defvar smiley-running-xemacs (string-match "XEmacs" emacs-version))
 
 (defvar smiley-map (make-sparse-keymap "smiley-keys")
- "Keymap to toggle smiley states.")
+  "Keymap to toggle smiley states.")
 
 (define-key smiley-map [(button2)] 'smiley-toggle-extent)
 (define-key smiley-map [(button3)] 'smiley-popup-menu)
@@ -167,25 +174,30 @@ above them."
      ["Toggle All Smilies" (smiley-toggle-extents ,e) t])))
 
 (defun smiley-create-glyph (smiley pixmap)
-  (and
-   smiley-running-xemacs
-   (or
-    (cdr-safe (assoc pixmap smiley-glyph-cache))
-    (let* ((xpm-color-symbols
-           (and (featurep 'xpm)
-                (append `(("flesh" ,smiley-flesh-color)
-                          ("features" ,smiley-features-color)
-                          ("tongue" ,smiley-tongue-color))
-                        xpm-color-symbols)))
-          (glyph (make-glyph
-                  (list
-                   (cons 'x (expand-file-name pixmap smiley-data-directory))
-                   (cons 'mswindows
-                         (expand-file-name pixmap smiley-data-directory))
-                   (cons 'tty smiley)))))
-      (setq smiley-glyph-cache (cons (cons pixmap glyph) smiley-glyph-cache))
-      (set-glyph-face glyph 'default)
-      glyph))))
+  (or
+   (cdr-safe (assoc pixmap smiley-glyph-cache))
+   (let* ((xpm-color-symbols
+          (and (featurep 'xpm)
+               (append `(("flesh" ,smiley-flesh-color)
+                         ("features" ,smiley-features-color)
+                         ("tongue" ,smiley-tongue-color))
+                       xpm-color-symbols)))
+         (glyph (make-glyph
+                 (list
+                  (cons (if (featurep 'gtk) 'gtk 'x)
+                        (expand-file-name pixmap smiley-data-directory))
+                  (cons 'mswindows
+                        (expand-file-name pixmap smiley-data-directory))
+                  (cons 'tty smiley)))))
+     (setq smiley-glyph-cache (cons (cons pixmap glyph) smiley-glyph-cache))
+     (set-glyph-face glyph 'default)
+     glyph)))
+
+(defun smiley-create-glyph-ems (smiley pixmap)
+  (condition-case e
+      (create-image (expand-file-name pixmap smiley-data-directory))
+    (error nil)))
+
 
 ;;;###autoload
 (defun smiley-region (beg end)
@@ -210,6 +222,14 @@ above them."
            (reveal-annotation ant)
            (set-extent-property ext 'invisible t)))))))
 
+;; FIXME::
+(defun smiley-toggle-extent-ems (event)
+  "Toggle smiley at given point.
+Note -- this function hasn't been implemented yet."
+  (interactive "e")
+  (error "This function hasn't been implemented yet.")
+)
+
 (defun smiley-toggle-extents (e)
   (interactive "e")
   (map-extents
@@ -226,10 +246,16 @@ above them."
        nil))
    (event-buffer e)))
 
+;; FIXME::
+(defun smiley-toggle-extents-ems (e)
+  (interactive "e")
+  (error "This function hasn't been implemented yet.")
+)
+
 ;;;###autoload
 (defun smiley-buffer (&optional buffer st nd)
   (interactive)
-  (when (featurep '(or x mswindows))
+  (when (featurep '(or x gtk mswindows))
     (save-excursion
       (when buffer
        (set-buffer buffer))
@@ -256,13 +282,8 @@ above them."
          (while (re-search-forward regexp nd t)
            (let* ((start (match-beginning group))
                   (end (match-end group))
-                  (glyph
-                   (and (or (eq start 1)
-                            (not (string-match "\\(\\^\\|;\\|_\\);)"
-                                               (buffer-substring
-                                                (1- start) (+ start 2)))))
-                        (smiley-create-glyph (buffer-substring start end)
-                                             file))))
+                  (glyph (smiley-create-glyph (buffer-substring start end)
+                                              file)))
              (when glyph
                (mapcar 'delete-annotation (annotations-at end))
                (let ((ext (make-extent start end))
@@ -297,6 +318,44 @@ Mouse button3 - menu"))
                  (make-annotation ")" end 'text))
                (goto-char end)))))))))
 
+;; FIXME: No popup menu, no customized color
+(defun smiley-buffer-ems (&optional buffer st nd)
+  (interactive)
+  (when window-system
+    (save-excursion
+      (when buffer
+       (set-buffer buffer))
+      (let ((buffer-read-only nil)
+           (alist (if (symbolp smiley-regexp-alist)
+                      (symbol-value smiley-regexp-alist)
+                    smiley-regexp-alist))
+           (case-fold-search nil)
+           entry regexp beg group file)
+       (dolist (overlay (overlays-in (or st (point-min))
+                                     (or nd (point-max))))
+         (when (overlay-get overlay 'smiley)
+           (remove-text-properties (overlay-start overlay)  
+                                   (overlay-end overlay) '(display))
+           (delete-overlay overlay)))
+       (goto-char (or st (point-min)))
+       (setq beg (point))
+       ;; loop through alist
+       (while (setq entry (pop alist))
+         (setq regexp (car entry)
+               group (cadr entry)
+               file (caddr entry))
+         (goto-char beg)
+         (while (re-search-forward regexp nd t)
+           (let* ((start (match-beginning group))
+                  (end (match-end group))
+                  (glyph (smiley-create-glyph nil file))
+                  (overlay (make-overlay start end)))
+             (when glyph
+               (add-text-properties start end
+                                    `(display ,glyph))
+               (overlay-put overlay 'smiley glyph)
+               (goto-char end)))))))))
+
 (defun smiley-end-paren-p (start end)
   "Try to guess whether the current smiley is an end-paren smiley."
   (save-excursion
@@ -336,6 +395,32 @@ With arg, turn displaying on if and only if arg is positive."
        (set-extent-property (cdar on) 'invisible nil)
        (setq on (cdr on))))))
 
+;; Simply removing all smiley if existing.
+;; FIXME: make it work as the one in XEmacs.
+(defun smiley-toggle-buffer-ems (&optional arg buffer st nd)
+  "Toggle displaying smiley faces.
+With arg, turn displaying on if and only if arg is positive." 
+  (interactive "P")
+  (save-excursion
+    (when buffer
+      (set-buffer buffer))
+    (let (found)
+      (dolist (overlay (overlays-in (or st (point-min))
+                                   (or nd (point-max))))
+       (when (overlay-get overlay 'smiley)
+         (remove-text-properties (overlay-start overlay)  
+                                 (overlay-end overlay) '(display))
+         (setq found t)))
+      (unless found
+       (smiley-buffer buffer st nd)))))
+
+(unless (featurep 'xemacs)
+  (defalias 'smiley-create-glyph 'smiley-create-glyph-ems)
+  (defalias 'smiley-toggle-extent 'smiley-toggle-extent-ems)
+  (defalias 'smiley-toggle-extents 'smiley-toggle-extents-ems)
+  (defalias 'smiley-buffer 'smiley-buffer-ems)
+  (defalias 'smiley-toggle-buffer 'smiley-toggle-buffer-ems))
+
 (defvar gnus-article-buffer)
 ;;;###autoload
 (defun gnus-smiley-display (&optional arg)
@@ -347,8 +432,13 @@ With arg, turn displaying on if and only if arg is positive."
     (save-restriction
       (widen)
       (article-goto-body)
-      (smiley-toggle-buffer arg (current-buffer) (point) (point-max)))))
+      (let (buffer-read-only)
+       (smiley-toggle-buffer arg (current-buffer) (point) (point-max))))))
 
 (provide 'smiley)
 
+;; Local Variables:
+;; coding: iso-8859-1
+;; End:
+
 ;;; smiley.el ends here
diff --git a/lisp/starttls.el b/lisp/starttls.el
new file mode 100644 (file)
index 0000000..d0fb682
--- /dev/null
@@ -0,0 +1,77 @@
+;;; starttls.el --- STARTTLS functions
+
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Created: 1999/11/20
+;; Keywords: TLS, SSL, OpenSSL, mail, news
+
+;; 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.
+
+;;; Commentary:
+
+;; This module defines some utility functions for STARTTLS profiles.
+
+;; [RFC 2595] "Using TLS with IMAP, POP3 and ACAP"
+;;     by Chris Newman <chris.newman@innosoft.com> (1999/06)
+
+;;; Code:
+
+(defgroup starttls nil
+  "Support for `Transport Layer Security' protocol."
+  :version "21.1"
+  :group 'mail)
+
+(defcustom starttls-program "starttls"
+  "The program to run in a subprocess to open an TLSv1 connection."
+  :type 'string
+  :group 'starttls)
+
+(defcustom starttls-extra-args nil
+  "Extra arguments to `starttls-program'."
+  :type '(repeat string)
+  :group 'starttls)
+
+(defun starttls-negotiate (process)
+  (signal-process (process-id process) 'SIGALRM))
+
+(defun starttls-open-stream (name buffer host service)
+  "Open a TLS 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."
+  (let* ((process-connection-type nil)
+        (process (apply #'start-process
+                        name buffer starttls-program
+                        host (format "%s" service)
+                        starttls-extra-args)))
+    (process-kill-without-query process)
+    process))
+
+(provide 'starttls)
+
+;;; starttls.el ends here
index 448bc54..3bfb9a4 100644 (file)
@@ -1,8 +1,10 @@
 ;;; time-date.el --- Date and time handling functions
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu Umeda <umerin@mse.kyutech.ac.jp>
+;; Keywords: mail news util
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
 (require 'parse-time)
 
+(autoload 'timezone-make-date-arpa-standard "timezone")
+
+;;;###autoload
 (defun date-to-time (date)
   "Convert DATE into time."
   (condition-case ()
-      (apply 'encode-time (parse-time-string date))
+      (apply 'encode-time
+            (parse-time-string
+             ;; `parse-time-string' isn't sufficiently general or
+             ;; robust.  It fails to grok some of the formats that
+             ;; timzeone does (e.g. dodgy post-2000 stuff from some
+             ;; Elms) and either fails or returns bogus values.  Lars
+             ;; reverted this change, but that loses non-trivially
+             ;; often for me.  -- fx
+             (timezone-make-date-arpa-standard date)))
     (error (error "Invalid date: %s" date))))
 
 (defun time-to-seconds (time)
   "Convert TIME to a floating point number."
   (+ (* (car time) 65536.0)
      (cadr time)
-     (/ (or (caddr time) 0) 1000000.0)))
+     (/ (or (nth 2 time) 0) 1000000.0)))
 
 (defun seconds-to-time (seconds)
   "Convert SECONDS (a floating point number) to an Emacs time structure."
@@ -117,6 +129,7 @@ The Gregorian date Sunday, December 31, 1bce is imaginary."
        (- (/ (1- year) 100))           ;       - century years
        (/ (1- year) 400))))            ;       + Gregorian leap years
 
+;;;###autoload
 (defun safe-date-to-time (date)
   "Parse DATE and return a time structure.
 If DATE is malformed, a zero time will be returned."
index 27be1c9..23965a1 100644 (file)
@@ -1,10 +1,10 @@
 ;;; utf7.el --- UTF-7 encoding/decoding for Emacs
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
-;; Author: Jon K Hellan <hellan@item.ntnu.no>
+;; Author: Jon K Hellan <hellan@acm.org>
 ;; Keywords: mail
 
-;; This file is part of GNU Emacs, but the same permissions apply
+;; 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
 ;;; 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 
+;;; 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 
+;;; 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. 
+;;; 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.
+;;; an error is thrown.  It is up to the application to recover.
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
 (require 'base64)
 
-(defvar utf7-direct-encoding-chars " -%'-*,-[]-}" 
-  "Characters ranges which do not need escaping in UTF-7")
+(defvar utf7-direct-encoding-chars " -%'-*,-[]-}"
+  "Character ranges which do not need escaping in UTF-7.")
 
-(defvar utf7-imap-direct-encoding-chars 
+(defvar utf7-imap-direct-encoding-chars
   (concat utf7-direct-encoding-chars "+\\~")
-  "Characters ranges which do not need escaping in the IMAP variant of UTF-7")
+  "Character ranges which do not need escaping in the IMAP variant of UTF-7.")
 
-(defsubst utf7-imap-get-pad-length (len modulus)         
+(defsubst utf7-imap-get-pad-length (len modulus)
   "Return required length of padding for IMAP modified base64 fragment."
   (mod (- len) modulus))
 
@@ -64,7 +65,7 @@ Use IMAP modification if FOR-IMAP is non-nil."
     (narrow-to-region start end)
     (goto-char start)
     (let ((esc-char (if for-imap ?& ?+))
-         (direct-encoding-chars 
+         (direct-encoding-chars
           (if for-imap utf7-imap-direct-encoding-chars
             utf7-direct-encoding-chars)))
       (while (not (eobp))
@@ -73,7 +74,7 @@ Use IMAP modification if FOR-IMAP is non-nil."
          (insert esc-char)
          (let ((p (point))
                (fc (following-char))
-               (run-length 
+               (run-length
                 (skip-chars-forward (concat "^" direct-encoding-chars))))
            (if (and (= fc esc-char)
                     (= run-length 1))  ; Lone esc-char?
@@ -90,7 +91,7 @@ Use IMAP modification if FOR-IMAP is non-nil."
     (base64-encode-region start (point-max))
     (goto-char start)
     (let ((pm (point-max)))
-      (when for-imap 
+      (when for-imap
        (while (search-forward "/" nil t)
          (replace-match ",")))
       (skip-chars-forward "^= \t\n" pm)
@@ -103,7 +104,7 @@ Use IMAP modification if FOR-IMAP is non-nil."
        (end (point-max)))
     (goto-char start)
     (let* ((esc-pattern (concat "^" (char-to-string (if for-imap ?& ?+))))
-          (base64-chars (concat "A-Za-z0-9+" 
+          (base64-chars (concat "A-Za-z0-9+"
                                 (char-to-string (if for-imap ?, ?/)))))
       (while (not (eobp))
        (skip-chars-forward esc-pattern)
@@ -159,7 +160,7 @@ Characters are in raw byte pairs in narrowed buffer."
     (forward-char)))
 
 (defun utf7-encode (string &optional for-imap)
-  "Encode UTF-7 string. Use IMAP modification if FOR-IMAP is non-nil."
+  "Encode UTF-7 STRING.  Use IMAP modification if FOR-IMAP is non-nil."
   (let ((default-enable-multibyte-characters nil))
     (with-temp-buffer
       (insert string)
@@ -167,7 +168,7 @@ Characters are in raw byte pairs in narrowed buffer."
       (buffer-string))))
 
 (defun utf7-decode (string &optional for-imap)
-  "Decode UTF-7 string. Use IMAP modification if FOR-IMAP is non-nil."
+  "Decode UTF-7 STRING.  Use IMAP modification if FOR-IMAP is non-nil."
   (let ((default-enable-multibyte-characters nil))
     (with-temp-buffer
       (insert string)
index 299f83b..b7168c6 100644 (file)
@@ -1,12 +1,11 @@
 ;;; uudecode.el -- elisp native uudecode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
+
+;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 5.7 $
-;; Keywords: uudecode
+;; Keywords: uudecode news
 
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
+;; This file is a 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
 ;;     Lots of codes are stolen from mm-decode.el, gnus-uu.el and
 ;;     base64.el
 
+;; This looks as though it could be made rather more efficient for
+;; internal working.  Encoding could use a lookup table and decoding
+;; should presumably use a vector or list buffer for partial results
+;; rather than with-current-buffer.  -- fx
+
+;; Only `uudecode-decode-region' should be advertised, and whether or
+;; not that uses a program should be customizable, but I guess it's
+;; too late now.  -- fx
+
 ;;; Code:
 
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
+(eval-when-compile (require 'cl))
+
+(eval-and-compile
+  (defalias 'uudecode-char-int
+    (if (fboundp 'char-int)
+       'char-int
+      'identity))
+
+  (if (featurep 'xemacs)
+      (defalias 'uudecode-insert-char 'insert-char)
+    (defun uudecode-insert-char (char &optional count ignored buffer)
+      (if (or (null buffer) (eq buffer (current-buffer)))
+         (insert-char char count)
+       (with-current-buffer buffer
+         (insert-char char count))))))
 
-(defvar uudecode-decoder-program "uudecode"
+(defcustom uudecode-decoder-program "uudecode"
   "*Non-nil value should be a string that names a uu decoder.
 The program should expect to read uu data on its standard
-input and write the converted data to its standard output.")
+input and write the converted data to its standard output."
+  :type 'string
+  :group 'gnus-extract)
 
-(defvar uudecode-decoder-switches nil
-  "*List of command line flags passed to the command named by uudecode-decoder-program.")
+(defcustom uudecode-decoder-switches nil
+  "*List of command line flags passed to `uudecode-decoder-program'."
+  :group 'gnus-extract
+  :type '(repeat string))
 
 (defconst uudecode-alphabet "\040-\140")
 
@@ -59,11 +84,11 @@ input and write the converted data to its standard output.")
 
 ;;;###autoload
 (defun uudecode-decode-region-external (start end &optional file-name)
-  "uudecode region between START and END with external decoder.
-
-If FILE-NAME is non-nil, save the result to FILE-NAME."
+  "Uudecode region between START and END using external program.
+If FILE-NAME is non-nil, save the result to FILE-NAME.  The program
+used is specified by `uudecode-decoder-program'."
   (interactive "r\nP")
-  (let ((cbuf (current-buffer)) tempfile firstline work-buffer status)
+  (let ((cbuf (current-buffer)) tempfile firstline status)
     (save-excursion
       (goto-char start)
       (when (re-search-forward uudecode-begin-line nil t)
@@ -77,16 +102,17 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
                                               (match-string 1)))))
        (setq tempfile (if file-name
                           (expand-file-name file-name)
-                        (make-temp-name
-                         ;; /tmp/uu...
-                         (expand-file-name
-                          "uu" uudecode-temporary-file-directory))))
-       (let ((cdir default-directory) default-process-coding-system)
+                          (if (fboundp 'make-temp-file)
+                              (let ((temporary-file-directory
+                                     uudecode-temporary-file-directory))
+                                (make-temp-file "uu"))
+                            (expand-file-name
+                             (make-temp-name "uu")
+                             uudecode-temporary-file-directory))))
+       (let ((cdir default-directory)
+             default-process-coding-system)
          (unwind-protect
-             (progn
-               (set-buffer (setq work-buffer
-                                 (generate-new-buffer " *uudecode-work*")))
-               (buffer-disable-undo work-buffer)
+             (with-temp-buffer
                (insert "begin 600 " (file-name-nondirectory tempfile) "\n")
                (insert-buffer-substring cbuf firstline end)
                (cd (file-name-directory tempfile))
@@ -106,21 +132,11 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
              (let (format-alist)
                (insert-file-contents-literally tempfile)))
          (message "Can not uudecode")))
-      (and work-buffer (kill-buffer work-buffer))
       (ignore-errors (or file-name (delete-file tempfile))))))
 
-(if (string-match "XEmacs" emacs-version)
-    (defalias 'uudecode-insert-char 'insert-char)
-  (defun uudecode-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count)))))
-
 ;;;###autoload
-
 (defun uudecode-decode-region (start end &optional file-name)
-  "uudecode region between START and END.
+  "Uudecode region between START and END without using an external program.
 If FILE-NAME is non-nil, save the result to FILE-NAME."
   (interactive "r\nP")
   (let ((work-buffer nil)
@@ -142,7 +158,6 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
                                                    nil nil nil
                                                    (match-string 1))))))
            (setq work-buffer (generate-new-buffer " *uudecode-work*"))
-           (buffer-disable-undo work-buffer)
            (forward-line 1)
            (skip-chars-forward non-data-chars end)
            (while (not done)
@@ -152,14 +167,16 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
               ((> (skip-chars-forward uudecode-alphabet end) 0)
                (setq lim (point))
                (setq remain
-                     (logand (- (char-int (char-after inputpos)) 32) 63))
+                     (logand (- (uudecode-char-int (char-after inputpos)) 32)
+                             63))
                (setq inputpos (1+ inputpos))
                (if (= remain 0) (setq done t))
                (while (and (< inputpos lim) (> remain 0))
                  (setq bits (+ bits
                                (logand
                                 (-
-                                 (char-int (char-after inputpos)) 32) 63)))
+                                 (uudecode-char-int (char-after inputpos)) 32)
+                                63)))
                  (if (/= counter 0) (setq remain (1- remain)))
                  (setq counter (1+ counter)
                        inputpos (1+ inputpos))
@@ -169,25 +186,25 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
                         (uudecode-insert-char
                          (logand (lsh bits -8) 255) 1 nil work-buffer)
                         (uudecode-insert-char (logand bits 255) 1 nil
-                                        work-buffer)
+                                              work-buffer)
                         (setq bits 0 counter 0))
                        (t (setq bits (lsh bits 6)))))))
              (cond
-                (done)
-                ((> 0 remain)
-                 (error "uucode line ends unexpectly")
-                 (setq done t))
-                ((and (= (point) end) (not done))
-                 ;(error "uucode ends unexpectly")
-                 (setq done t))
-                ((= counter 3)
-                 (uudecode-insert-char (logand (lsh bits -16) 255) 1 nil
-                                 work-buffer)
-                 (uudecode-insert-char (logand (lsh bits -8) 255) 1 nil
-                                 work-buffer))
-                ((= counter 2)
-                 (uudecode-insert-char (logand (lsh bits -10) 255) 1 nil
-                                 work-buffer)))
+              (done)
+              ((> 0 remain)
+               (error "uucode line ends unexpectly")
+               (setq done t))
+              ((and (= (point) end) (not done))
+               ;;(error "uucode ends unexpectly")
+               (setq done t))
+              ((= counter 3)
+               (uudecode-insert-char (logand (lsh bits -16) 255) 1 nil
+                                     work-buffer)
+               (uudecode-insert-char (logand (lsh bits -8) 255) 1 nil
+                                     work-buffer))
+              ((= counter 2)
+               (uudecode-insert-char (logand (lsh bits -10) 255) 1 nil
+                                     work-buffer)))
              (skip-chars-forward non-data-chars end))
            (if file-name
                (save-excursion
index 8fe0fdc..d947ca0 100644 (file)
@@ -1,8 +1,8 @@
 ;;; webmail.el --- interfacing with web mail
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: hotmail
+;; Keywords: hotmail netaddress my-deja netscape
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 
+;; Note: Now mail.yahoo.com provides POP3 service, the webmail
+;; fetching is not going to be supported.
+
 ;; Note: You need to have `url' and `w3' installed for this backend to
-;; work.
+;; work. `w3' must be 4.0pre46+one-line-cookie patch or standalone
+;; `url'.
 
 ;; Todo: To support more web mail servers.
 
 ;; Known bugs: 
-;; 1. In w3, there are two copies of url-maybe-relative.
-;;    If it is loaded from w3.el, (load-library "url"). 
-;;    Fixed in w3 4.0pre46.
-;; 2. Hotmail only accept one line cookie, while w3 breaks cookies 
-;;    into lines.
-;;    Maybe fixed in w3 4.0pre47+?.
-;; 3. Net@ddress may corrupt `X-Face'.
+;; 1. Net@ddress may corrupt `X-Face'.
 
 ;; Warning:
 ;; Webmail is an experimental function, which means NO WARRANTY.
   (ignore-errors
     (require 'w3)
     (require 'url)
+    (require 'url-cookie)
     (require 'w3-forms)
     (require 'nnweb)))
 ;; Report failure to find w3 at load time if appropriate.
 (eval '(progn
         (require 'w3)
         (require 'url)
+        (require 'url-cookie)
         (require 'w3-forms)
         (require 'nnweb)))
 
      ;; Hotmail hate other HTTP user agents and use one line cookie
      (paranoid agent cookie post)
      (address . "www.hotmail.com")
-     (open-url "http://www.hotmail.com")
+     (open-url "http://www.hotmail.com/")
      (open-snarf . webmail-hotmail-open)
      ;; W3 hate redirect POST
      (login-url
       "http://%s/cgi-bin/dologin?login=%s&passwd=%s&enter=Sign+in&sec=no&curmbox=ACTIVE&_lang=&js=yes&id=2&tw=-10000&beta="
-       webmail-aux user password)
+      webmail-aux user password)
+     ;;(login-snarf . webmail-hotmail-login)
+     ;;(list-url "%s" webmail-aux)
      (list-snarf . webmail-hotmail-list)
      (article-snarf . webmail-hotmail-article)
      (trash-url 
-      "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&js=&foo=inbox&page=&%s=on&Move+To.x=Move+To&tobox=trAsH" 
+      "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&foo=inbox&js=&page=&%s=on&_HMaction=MoveTo&tobox=trAsH&nullbox=" 
       webmail-aux user id))
     (yahoo
-     (paranoid cookie post)
+     (paranoid agent cookie post)
      (address . "mail.yahoo.com")
-     (open-url "http://mail.yahoo.com")
+     (open-url "http://mail.yahoo.com/")
      (open-snarf . webmail-yahoo-open)
-     (login-url ;; yahoo will not accept GET
+     (login-url;; yahoo will not accept GET
       content 
       ("%s" webmail-aux)
-      ".tries=1&.src=ym&.last=&promo=&lg=us&.intl=us&.bypass=&.chkP=Y&.done=http%%253a%%2F%%2Fedit.yahoo.com%%2Fconfig%%2Fmail%%253f.intl%%3D&login=%s&passwd=%s" 
+      ".tries=&.src=ym&.last=&promo=&.intl=&.bypass=&.partner=&.chkP=Y&.done=&login=%s&passwd=%s"
       user password)
      (login-snarf . webmail-yahoo-login)
      (list-url "%s&rb=Inbox&YN=1" webmail-aux)
      (list-snarf . webmail-yahoo-list)
      (article-snarf . webmail-yahoo-article)
      (trash-url 
-      "%s/ym/us/ShowFolder?YY=52107&inc=50&order=down&sort=date&pos=0&box=Inbox&DEL=Delete&destBox=&Mid=%s&destBox2="
+      "%s/ym/ShowFolder?YY=52107&inc=50&order=down&sort=date&pos=0&box=Inbox&DEL=Delete&destBox=&Mid=%s&destBox2="
       webmail-aux id))
     (netaddress
      (paranoid cookie post)
      (address . "www.netaddress.com")
-     (open-url "http://www.netaddress.com")
+     (open-url "http://www.netaddress.com/")
      (open-snarf . webmail-netaddress-open)
-     (login-url ;; yahoo will not accept GET
+     (login-url
       content 
       ("%s" webmail-aux)
       "LoginState=2&SuccessfulLogin=%%2Ftpl&NewServerName=www.netaddress.com&JavaScript=JavaScript1.2&DomainID=4&NA31site=classic.netaddress.com&NA31port=80&UserID=%s&passwd=%s" 
       "http://www.netaddress.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True"
       webmail-session)
      (list-snarf . webmail-netaddress-list)
+     (article-url "http://www.netaddress.com/")
      (article-snarf . webmail-netaddress-article)
      (trash-url 
       "http://www.netaddress.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1"
-      webmail-session id))))
+      webmail-session id))
+    (netscape
+     (paranoid cookie post agent)
+     (address . "webmail.netscape.com")
+     (open-url "http://ureg.netscape.com/iiop/UReg2/login/login?U2_LA=en&U2_BACK_FROM_CJ=true&U2_CS=iso-8859-1&U2_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_NEW_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_EXITURL=http://home.netscape.com/&U2_SOURCE=Webmail")
+     (open-snarf . webmail-netscape-open)
+     (login-url
+      content 
+      ("http://ureg.netscape.com/iiop/UReg2/login/loginform")
+      "U2_USERNAME=%s&U2_PASSWORD=%s%s"
+      user password webmail-aux)
+     (login-snarf . webmail-netaddress-login)
+     (list-url 
+      "http://webmail.netscape.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True"
+      webmail-session)
+     (list-snarf . webmail-netaddress-list)
+     (article-url "http://webmail.netscape.com/")
+     (article-snarf . webmail-netscape-article)
+     (trash-url 
+      "http://webmail.netscape.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1"
+      webmail-session id))
+    (my-deja
+     (paranoid cookie post)
+     (address . "www.my-deja.com")
+     (open-url "http://www.deja.com/my/pr.xp")
+     (open-snarf . webmail-my-deja-open)
+     (login-url
+      content 
+      ("%s" webmail-aux)
+      "member_name=%s&pw=%s&go=&priv_opt_MyDeja99="
+      user password)
+     (list-url "http://www.deja.com/rg_gotomail.xp")
+     (list-snarf . webmail-my-deja-list)
+     (article-snarf . webmail-my-deja-article)
+     (trash-url webmail-aux id))))
 
 (defvar webmail-variables
   '(address article-snarf article-url list-snarf list-url 
 
 (defvar webmail-buffer nil)
 (defvar webmail-buffer-list nil)
+
+(defvar webmail-type nil)
+
+(defvar webmail-error-function nil)
+
+(defvar webmail-debug-file "~/.emacs-webmail-debug")
+
 ;;; Interface functions
 
+(defun webmail-debug (str)
+  (with-temp-buffer
+    (insert "\n---------------- A bug at " str " ------------------\n")
+    (mapcar #'(lambda (sym) 
+               (if (boundp sym)
+                   (pp `(setq ,sym ',(eval sym)) (current-buffer))))
+           '(webmail-type user))
+    (insert "---------------- webmail buffer ------------------\n\n")
+    (insert-buffer-substring webmail-buffer)
+    (insert "\n---------------- end of buffer ------------------\n\n")
+    (append-to-file (point-min) (point-max) webmail-debug-file)))
+
+(defun webmail-error (str)
+  (if webmail-error-function
+      (funcall webmail-error-function str))
+  (message "%s HTML has changed or your w3 package is too old.(%s)"
+          webmail-type str)
+  (error "%s HTML has changed or your w3 package is too old.(%s)"
+        webmail-type str))
+
 (defun webmail-setdefault (type)
   (let ((type-def (cdr (assq type webmail-type-definition)))
        (vars webmail-variables)
        pair)
+    (setq webmail-type type)
     (dolist (var vars)
       (if (setq pair (assq var type-def))
          (set (intern (concat "webmail-" (symbol-name var))) (cdr pair))
     expr)))
 
 (defun webmail-url (xurl)
-  (cond 
-   ((eq (car xurl) 'content)
-    (pop xurl)
-    (webmail-fetch-simple (if (stringp (car xurl))
-                             (car xurl)
-                           (apply 'format (webmail-eval (car xurl))))
-                         (apply 'format (webmail-eval (cdr xurl)))))
-   ((eq (car xurl) 'post)
-    (pop xurl)
-    (webmail-fetch-form (car xurl) (webmail-eval (cdr xurl))))
-   (t
-    (nnweb-insert (apply 'format (webmail-eval xurl))))))
-
-(defun webmail-decode-entities ()
-  (goto-char (point-min))
-  (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
-    (replace-match (char-to-string 
-                   (if (eq (aref (match-string 1) 0) ?\#)
-                       (string-to-number (substring (match-string 1) 1))
-                     (or (cdr (assq (intern (match-string 1))
-                                    w3-html-entities))
-                         ?#)))
-                  t t)))
-
-(defun webmail-decode-entities-string (str)
-  (with-temp-buffer
-    (insert str)
-    (webmail-decode-entities)
-    (buffer-substring (point-min) (point-max))))
-
-(defun webmail-remove-markup ()
-  (goto-char (point-min))
-  (while (search-forward "<!--" nil t)
-    (delete-region (match-beginning 0)
-                  (or (search-forward "-->" nil t)
-                      (point-max))))
-  (goto-char (point-min))
-  (while (re-search-forward "<[^>]+>" nil t)
-    (replace-match "" t t)))
+  (mm-with-unibyte-current-buffer
+    (cond 
+     ((eq (car xurl) 'content)
+      (pop xurl)
+      (webmail-fetch-simple (if (stringp (car xurl))
+                               (car xurl)
+                             (apply 'format (webmail-eval (car xurl))))
+                           (apply 'format (webmail-eval (cdr xurl)))))
+     ((eq (car xurl) 'post)
+      (pop xurl)
+      (webmail-fetch-form (car xurl) (webmail-eval (cdr xurl))))
+     (t
+      (nnweb-insert (apply 'format (webmail-eval xurl)))))))
 
 (defun webmail-init ()
   "Initialize buffers and such."
   (if (gnus-buffer-live-p webmail-buffer)
       (set-buffer webmail-buffer)
     (setq webmail-buffer
-         (nnheader-set-temp-buffer " *webmail*"))))
+         (nnheader-set-temp-buffer " *webmail*"))
+    (mm-disable-multibyte)))
 
 (defvar url-package-name)
 (defvar url-package-version)
 (defvar url-cookie-multiple-line)
 (defvar url-confirmation-func)
 
-;; Hack W3 POST redirect. See `url-parse-mime-headers'.
+;; Hack W3 POST redirect.  See `url-parse-mime-headers'.
 ;;
 ;; Netscape uses "GET" as redirect method when orignal method is POST
 ;; and status is 302, .i.e no security risks by default without
 (defun webmail-url-confirmation-func (prompt)
   (cond 
    ((equal prompt (concat "Honor redirection with non-GET method "
-                      "(possible security risks)? "))
+                         "(possible security risks)? "))
     nil)
    ((equal prompt "Continue (with method of GET)? ")
     t)
 (defun webmail-refresh-redirect ()
   "Redirect refresh url in META."
   (goto-char (point-min))
-  (while (re-search-forward "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\""
-                          nil t)
+  (while (re-search-forward 
+         "<meta[ \t\r\n]*http-equiv=\"Refresh\"[^>]*URL=\\([^\"]+\\)\""
+         nil t)
     (let ((url (match-string 1)))
       (erase-buffer)
-      (nnweb-insert url))
+      (mm-with-unibyte-current-buffer
+       (nnweb-insert url)))
     (goto-char (point-min))))
 
 (defun webmail-fetch (file subtype user password)
          (url-confirmation-func (if (memq 'post webmail-paranoid)
                                     'webmail-url-confirmation-func
                                   url-confirmation-func))
+         (url-http-silence-on-insecure-redirection t)
          url-cookie-storage url-cookie-secure-storage
          url-cookie-confirmation
          item id (n 0))
       (if webmail-list-snarf 
          (funcall webmail-list-snarf))
       (while (setq item (pop webmail-articles))
-         (message "Fetching mail #%d..." (setq n (1+ n)))
-         (erase-buffer)
-         (nnweb-insert (cdr item))
-         (setq id (car item))
-         (if webmail-article-snarf 
-             (funcall webmail-article-snarf file id))
-         (when (and webmail-trash-url webmail-move-to-trash-can)
-           (message "Move mail #%d to trash can..." n)
-           (condition-case err
-               (progn
-                 (webmail-url webmail-trash-url)
-                 (let (buf)
-                   (while (setq buf (pop webmail-buffer-list))
-                     (kill-buffer buf))))
-             (error 
-              (let (buf)
-                (while (setq buf (pop webmail-buffer-list))
-                  (kill-buffer buf)))
-              (error err))))))
+       (message "Fetching mail #%d..." (setq n (1+ n)))
+       (erase-buffer)
+       (mm-with-unibyte-current-buffer
+         (nnweb-insert (cdr item)))
+       (setq id (car item))
+       (if webmail-article-snarf 
+           (funcall webmail-article-snarf file id))
+       (when (and webmail-trash-url webmail-move-to-trash-can)
+         (message "Move mail #%d to trash can..." n)
+         (condition-case err
+             (progn
+               (webmail-url webmail-trash-url)
+               (let (buf)
+                 (while (setq buf (pop webmail-buffer-list))
+                   (kill-buffer buf))))
+           (error 
+            (let (buf)
+              (while (setq buf (pop webmail-buffer-list))
+                (kill-buffer buf)))
+            (error err))))))
     (if webmail-post-process
        (funcall webmail-post-process))))
 
+(defun webmail-encode-8bit ()
+  (goto-char (point-min))
+  (skip-chars-forward "^\200-\377")
+  (while (not (eobp))
+    (insert (format "&%d;" (mm-char-int (char-after))))
+    (delete-char 1)
+    (skip-chars-forward "^\200-\377")))
+
 ;;; hotmail
 
 (defun webmail-hotmail-open ()
   (if (re-search-forward 
        "action=\"https?://\\([^/]+\\)/cgi-bin/dologin" nil t)
       (setq webmail-aux (match-string 1))
-    (error "Can't find login url (open@1)")))
+    (webmail-error "open@1")))
 
-(defun webmail-hotmail-list ()
-  (let (site url newp)
-    (goto-char (point-min))
-    (if (re-search-forward "[0-9]+ messages, [0-9]+ new") 
-       (message "Found %s" (match-string 0)))
+(defun webmail-hotmail-login ()
+  (let (site)
     (goto-char (point-min))
     (if (re-search-forward 
-        "action=\"https?://\\([^/]+\\)/cgi-bin/HoTMaiL" nil t)
+        "https?://\\([^/]+hotmail\\.msn\\.com\\)/cgi-bin/" nil t)
        (setq site (match-string 1))
-      (error "Can't find server url (list@1)"))
+      (webmail-error "login@1"))
     (goto-char (point-min))
-    (if (re-search-forward "disk=\\([^&]+\\)&" nil t)
-       (setq webmail-aux 
-             (concat "http://" site "/cgi-bin/HoTMaiL?disk=" 
-                     (match-string 1)))
-      (error "Can't find disk (list@2)"))
-    (goto-char (point-max))
-    (while (re-search-backward 
-           "newmail\\.gif\\|href=\"\\(/cgi-bin/getmsg\\?[^\"]+\\)\"" 
-           nil t)
-      (if (setq url (match-string 1))
-         (progn
-           (if (or newp (not webmail-newmail-only))
-               (let (id)
-                 (if (string-match "msg=\\([^&]+\\)" url)
-                     (setq id (match-string 1 url)))
-                 (push (cons id (concat "http://" site url)) 
-                       webmail-articles)))
-           (setq newp nil))
-       (setq newp t)))))
+    (if (re-search-forward 
+        "\\(/cgi-bin/HoTMaiL\\?[^\"]*a=b[^\"]*\\)" nil t)
+       (setq webmail-aux (concat "http://" site (match-string 1)))
+      (webmail-error "login@2"))))
+
+(defun webmail-hotmail-list ()
+  (goto-char (point-min))
+  (skip-chars-forward " \t\n\r")
+  (let (site url newp (total "0"))
+    (if (eobp)
+       (setq total "0")
+      (if (re-search-forward "\\([0-9]+\\) *<b>(\\([0-9]+\\) new)" nil t) 
+         (message "Found %s (%s new)" (setq total (match-string 1)) 
+                  (match-string 2))
+       (if (re-search-forward "\\([0-9]+\\) new" nil t) 
+           (message "Found %s new" (setq total (match-string 1)))
+         (webmail-error "list@0"))))
+    (unless (equal total "0")
+      (goto-char (point-min))
+      (if (re-search-forward 
+        "https?://\\([^/]+hotmail\\.msn\\.com\\)/cgi-bin/" nil t)
+         (setq site (match-string 1))
+       (webmail-error "list@1"))
+      (goto-char (point-min))
+      (if (re-search-forward "disk=\\([^&]*\\)&" nil t)
+         (setq webmail-aux 
+               (concat "http://" site "/cgi-bin/HoTMaiL?disk=" 
+                       (match-string 1)))
+       (webmail-error "list@2"))
+      (goto-char (point-max))
+      (while (re-search-backward 
+             "newmail\\.gif\\|href=\"\\(/cgi-bin/getmsg\\?[^\"]+\\)\"" 
+             nil t)
+       (if (setq url (match-string 1))
+           (progn
+             (if (or newp (not webmail-newmail-only))
+                 (let (id)
+                   (if (string-match "msg=\\([^&]+\\)" url)
+                       (setq id (match-string 1 url)))
+                   (push (cons id (concat "http://" site url "&raw=0")) 
+                         webmail-articles)))
+             (setq newp nil))
+         (setq newp t))))))
+
+;; Thank victor@idaccr.org (Victor S. Miller) for raw=0
 
 (defun webmail-hotmail-article (file id)
-  (let (p attachment count mime)
+  (goto-char (point-min))
+  (skip-chars-forward " \t\n\r")
+  (unless (eobp) 
+    (if (not (search-forward "<pre>" nil t))
+       (webmail-error "article@3"))
+    (skip-chars-forward "\n\r\t ")
+    (delete-region (point-min) (point))
+    (if (not (search-forward "</pre>" nil t))
+       (webmail-error "article@3.1"))
+    (delete-region (match-beginning 0) (point-max))
+    (nnweb-remove-markup)
+    (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+      (nnweb-decode-entities))
+    (goto-char (point-min))
+    (while (re-search-forward "\r\n?" nil t)
+      (replace-match "\n"))
+    (goto-char (point-min))
+    (insert "\n\n")
+    (if (not (looking-at "\n*From "))
+       (insert "From nobody " (current-time-string) "\n")
+      (forward-line))
+    (insert "X-Gnus-Webmail: " (symbol-value 'user)
+           "@" (symbol-name webmail-type) "\n")
+    (mm-append-to-file (point-min) (point-max) file)))
+
+(defun webmail-hotmail-article-old (file id)
+  (let (p attachment count mime hotmail-direct)
     (save-restriction
+      (webmail-encode-8bit)
       (goto-char (point-min))
       (if (not (search-forward "<DIV>" nil t))
-         (error "Can't find start label (article@1)"))
-      (narrow-to-region (point-min) (match-beginning 0))
+         (if (not (search-forward "Reply&nbsp;All" nil t))
+             (webmail-error "article@1")
+           (setq hotmail-direct t))
+       (goto-char (match-beginning 0)))
+      (narrow-to-region (point-min) (point))
       (if (not (search-backward "<table" nil t 2))
-         (error "Can't find start label (article@1.1)"))
+         (webmail-error "article@1.1"))
       (delete-region (point-min) (match-beginning 0)) 
       (while (search-forward "<a href=" nil t)
        (setq p (match-beginning 0))
        (search-forward "</a>" nil t)
        (delete-region p (match-end 0)))
-      (webmail-remove-markup)
-      (webmail-decode-entities)
+      (nnweb-remove-markup)
+      (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+       (nnweb-decode-entities))
       (goto-char (point-min))
       (delete-blank-lines)
       (goto-char (point-min))
       (widen)
       (insert "\n")
       (setq p (point))
-      (while (re-search-forward "<div>\\|\\(http://[^/]+/cgi-bin/getmsg/\\([^\?]+\\)\?[^\"]*\\)\"" nil t)
+      (while (re-search-forward 
+             "<tt>\\|<div>\\|\\(http://[^/]+/cgi-bin/getmsg/\\([^\?]+\\)\?[^\"]*\\)\"" 
+             nil t)
        (if (setq attachment (match-string 1))
            (let ((filename (match-string 2))
-                 bufname) ;; Attachment
+                 bufname);; Attachment
              (delete-region p (match-end 0))
              (save-excursion
                (set-buffer (generate-new-buffer " *webmail-att*"))
              (insert "><#/part>\n")
              (setq p (point)))
          (delete-region p (match-end 0))
-         (setq count 1)
-         (while (and (> count 0) 
-                     (re-search-forward "</div>\\|\\(<div>\\)" nil t))
-           (if (match-string 1)
-               (setq count (1+ count))
-             (if (= (setq count (1- count)) 0)
-                 (delete-region (match-beginning 0)
-                                (match-end 0)))))
+         (if hotmail-direct
+             (if (not (search-forward "</tt>" nil t))
+                 (webmail-error "article@1.2")
+               (delete-region (match-beginning 0) (match-end 0)))
+           (setq count 1)
+           (while (and (> count 0) 
+                       (re-search-forward "</div>\\|\\(<div>\\)" nil t))
+             (if (match-string 1)
+                 (setq count (1+ count))
+               (if (= (setq count (1- count)) 0)
+                   (delete-region (match-beginning 0)
+                                  (match-end 0))))))
          (narrow-to-region p (point))
          (goto-char (point-min))
          (cond 
            (goto-char (match-end 0))
            (if (looking-at "$") (forward-char))
            (delete-region (point-min) (point))
-           (webmail-remove-markup)
-           (webmail-decode-entities)
+           (nnweb-remove-markup)
+           (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+             (nnweb-decode-entities))
            nil)
           (t
            (setq mime t)
       (goto-char (point-min))
       ;; Some blank line to seperate mails.
       (insert "\n\nFrom nobody " (current-time-string) "\n")
+      (insert "X-Gnus-Webmail: " (symbol-value 'user)
+             "@" (symbol-name webmail-type) "\n")
       (if id
-         (insert "Message-ID: <" id "@hotmail.com>\n"))
+         (insert (format "X-Message-ID: <%s@hotmail.com>\n" id)))
       (unless (looking-at "$") 
-       (search-forward "\n\n" nil t)
-       (forward-line -1))
+       (if (search-forward "\n\n" nil t)
+           (forward-line -1)
+         (webmail-error "article@2")))
       (narrow-to-region (point) (point-max))
       (if mime
          (insert "MIME-Version: 1.0\n"
   (goto-char (point-min))
   (if (re-search-forward "action=\"\\([^\"]+\\)\"" nil t)
       (setq webmail-aux (match-string 1))
-    (error "Can't find login url (open@1)")))
+    (webmail-error "open@1")))
 
 (defun webmail-yahoo-login ()
   (goto-char (point-min))
-  (if (re-search-forward "http://[a-zA-Z][0-9]\\.mail\\.yahoo\\.com/" nil t)
+  (if (re-search-forward "http://[^/]+[0-9]\\.mail\\.yahoo\\.com/" nil t)
       (setq webmail-aux (match-string 0))
-    (error "Can't find login url (login@1)"))
+    (webmail-error "login@1"))
   (if (re-search-forward "YY=[0-9]+" nil t)
-      (setq webmail-aux (concat webmail-aux "ym/us/ShowFolder?"
+      (setq webmail-aux (concat webmail-aux "ym/ShowFolder?"
                                (match-string 0)))
-    (error "Can't find login url (login@2)")))
+    (webmail-error "login@2")))
 
 (defun webmail-yahoo-list ()
   (let (url (newp t) (tofetch 0))
     (goto-char (point-min))
     (when (re-search-forward 
           "showing [0-9]+-\\([0-9]+\\) of \\([0-9]+\\)" nil t) 
-      ;(setq listed (match-string 1))
+      ;;(setq listed (match-string 1))
       (message "Found %s mail(s)" (match-string 2)))
     (if (string-match "http://[^/]+" webmail-aux)
        (setq webmail-aux (match-string 0 webmail-aux))
-      (error "Can't find server url (list@1)"))
+      (webmail-error "list@1"))
     (goto-char (point-min))
     (while (re-search-forward 
-           "bgcolor=\"#eeeeee\"\\|href=\"\\(/ym/us/ShowLetter\\?MsgId=\\([^&]+\\)&[^\"]*\\)\""
+           "bgcolor=\"#eeeeee\"\\|href=\"\\(/ym/ShowLetter\\?MsgId=\\([^&]+\\)&[^\"]*\\)\""
            nil t)
       (if (setq url (match-string 1))
          (progn
              (setq tofetch (1+ tofetch)))
            (setq newp t))
        (setq newp nil)))
+    (setq webmail-articles (nreverse webmail-articles))
     (message "Fetching %d mail(s)" tofetch)))
 
 (defun webmail-yahoo-article (file id)
     (save-restriction
       (goto-char (point-min))
       (if (not (search-forward "value=\"Done\"" nil t))
-         (error "Can't find start label (article@1)"))
+         (webmail-error "article@1"))
       (if (not (search-forward "<table" nil t))
-         (error "Can't find start label (article@2)"))
+         (webmail-error "article@2"))
       (delete-region (point-min) (match-beginning 0)) 
       (if (not (search-forward "</table>" nil t))
-         (error "Can't find start label (article@3)"))
+         (webmail-error "article@3"))
       (narrow-to-region (point-min) (match-end 0))
       (while (search-forward "<a href=" nil t)
        (setq p (match-beginning 0))
        (search-forward "</a>" nil t)
        (delete-region p (match-end 0)))
-      (webmail-remove-markup)
-      (webmail-decode-entities)
+      (nnweb-remove-markup)
+      (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+       (nnweb-decode-entities))
       (goto-char (point-min))
       (delete-blank-lines)
       (goto-char (point-max))
        (setq attachment (match-string 0))
        (let (bufname ct ctl cd description)
          (if (not (search-forward "<table" nil t))
-             (error "Can't find start label (article@4)"))
+             (webmail-error "article@4"))
          (delete-region p (match-beginning 0))
          (if (not (search-forward "</table>" nil t))
-             (error "Can't find start label (article@5)"))
+             (webmail-error "article@5"))
          (narrow-to-region p (match-end 0))
-         (webmail-remove-markup)
-         (webmail-decode-entities)
+         (nnweb-remove-markup)
+         (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+           (nnweb-decode-entities))
          (goto-char (point-min))
          (delete-blank-lines)
          (setq ct (mail-fetch-field "content-type")
       (goto-char (point-min))
       ;; Some blank line to seperate mails.
       (insert "\n\nFrom nobody " (current-time-string) "\n")
+      (insert "X-Gnus-Webmail: " (symbol-value 'user)
+             "@" (symbol-name webmail-type) "\n")
       (if id
-         (insert "Message-ID: <" id "@yahoo.com>\n"))
+         (insert (format "X-Message-ID: <%s@yahoo.com>\n" id)))
       (unless (looking-at "$") 
-       (search-forward "\n\n" nil t)
-       (forward-line -1))
+       (if (search-forward "\n\n" nil t)
+           (forward-line -1)
+         (webmail-error "article@2")))
       (narrow-to-region (point) (point-max))
       (insert "MIME-Version: 1.0\n"
              (prog1
 
 ;;; netaddress
 
+(defun webmail-netscape-open ()
+  (goto-char (point-min))
+  (setq webmail-aux "")
+  (while (re-search-forward 
+         "TYPE=hidden *NAME=\\([^ ]+\\) *VALUE=\"\\([^\"]+\\)" 
+         nil t)
+    (setq webmail-aux (concat webmail-aux "&" (match-string 1) "="
+                             (match-string 2)))))
+
 (defun webmail-netaddress-open ()
   (goto-char (point-min))
   (if (re-search-forward "action=\"\\([^\"]+\\)\"" nil t)
       (setq webmail-aux (concat (car webmail-open-url) (match-string 1)))
-    (error "Can't find login url (open@1)")))
+    (webmail-error "open@1")))
 
 (defun webmail-netaddress-login ()
   (webmail-refresh-redirect)
   (goto-char (point-min))
   (if (re-search-forward  "tpl/[^/]+/\\([^/]+\\)" nil t)
       (setq webmail-session (match-string 1))
-    (error "Can't find login url (login@1)")))
+    (webmail-error "login@1")))
 
 (defun webmail-netaddress-list ()
+  (webmail-refresh-redirect)
   (let (item id)
     (goto-char (point-min))
     (when (re-search-forward 
          (setq item 
                (cons id 
                      (format "%s/tpl/Message/%s/Read?Q=%s&FolderID=-4&SortUseCase=True&Sort=Date&Headers=True"
-                             (car webmail-open-url)
-                              webmail-session id)))
+                             (car webmail-article-url)
+                             webmail-session id)))
        (if (or (not webmail-newmail-only)
                (equal (match-string 1) "True"))
-           (push item webmail-articles))))))
+           (push item webmail-articles))))
+    (setq webmail-articles (nreverse webmail-articles))))
 
 (defun webmail-netaddress-single-part ()
   (goto-char (point-min))
       (replace-match " "))
     (goto-char (point-min))
     (while (re-search-forward "<br>" nil t)
-       (replace-match "\n"))
-    (webmail-remove-markup)
-    (webmail-decode-entities) 
+      (replace-match "\n"))
+    (nnweb-remove-markup)
+    (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+      (nnweb-decode-entities))
     nil)
    (t
     (insert "<#part type=\"text/html\" disposition=inline>")
     t)))
 
 (defun webmail-netaddress-article (file id)
+  (webmail-refresh-redirect)
   (let (p p1 attachment count mime type)
     (save-restriction
+      (webmail-encode-8bit)
       (goto-char (point-min))
       (if (not (search-forward "Trash" nil t))
-         (error "Can't find start label (article@1)"))
+         (webmail-error "article@1"))
       (if (not (search-forward "<form>" nil t))
-         (error "Can't find start label (article@2)"))
+         (webmail-error "article@2"))
       (delete-region (point-min) (match-beginning 0)) 
       (if (not (search-forward "</form>" nil t))
-         (error "Can't find start label (article@3)"))
+         (webmail-error "article@3"))
       (narrow-to-region (point-min) (match-end 0))
       (goto-char (point-min))
       (while (re-search-forward "[\040\t\r\n]+" nil t)
       (goto-char (point-min))
       (while (search-forward "<b>" nil t)
        (replace-match "\n"))
-      (webmail-remove-markup)
-      (webmail-decode-entities)
+      (nnweb-remove-markup)
+      (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+       (nnweb-decode-entities))
       (goto-char (point-min))
       (delete-blank-lines)
       (goto-char (point-min))
       (insert "\n\n")
       (setq p (point))
       (unless (search-forward "<!-- Data -->" nil t)
-       (error "Can't find start label (article@4)"))
+       (webmail-error "article@4"))
       (forward-line 14)
       (delete-region p (point))
       (goto-char (point-max))
       (unless (re-search-backward 
               "[\040\t]*<br>[\040\t\r\n]*<br>[\040\t\r\n]*<form" p t)
-       (error "Can't find end label (article@5)"))
+       (webmail-error "article@5"))
+      (delete-region (point) (point-max))
+      (goto-char p)
+      (while (search-forward
+             "<TABLE border=\"0\" WIDTH=\"98%\" cellpadding=0 cellspacing=0>"
+             nil t 2)
+       (setq mime t)
+       (unless (search-forward "</TABLE>" nil t)
+         (webmail-error "article@6"))
+       (setq p1 (point))
+       (if (search-backward "<IMG " p t)
+           (progn
+             (unless (re-search-forward "HREF=\"\\(/tpl/Attachment/[^/]+/\\([^/]+/[^\?]+\\)[^\"]+\\)\"" p1 t)
+               (webmail-error "article@7"))
+             (setq attachment (match-string 1))
+             (setq type (match-string 2))
+             (unless (search-forward "</TABLE>" nil t)
+               (webmail-error "article@8"))
+             (delete-region p (point))
+             (let (bufname);; Attachment
+               (save-excursion
+                 (set-buffer (generate-new-buffer " *webmail-att*"))
+                 (nnweb-insert (concat (car webmail-open-url) attachment))
+                 (push (current-buffer) webmail-buffer-list)
+                 (setq bufname (buffer-name)))
+               (insert "<#part type=" type)
+               (insert " buffer=\"" bufname "\"")
+               (insert " disposition=\"inline\"")
+               (insert "><#/part>\n")
+               (setq p (point))))
+         (delete-region p p1)
+         (narrow-to-region 
+          p
+          (if (search-forward 
+               "<TABLE border=\"0\" WIDTH=\"98%\" cellpadding=0 cellspacing=0>"
+               nil t)
+              (match-beginning 0)
+            (point-max)))
+         (webmail-netaddress-single-part)
+         (goto-char (point-max))
+         (setq p (point))
+         (widen)))
+      (unless mime
+       (narrow-to-region p (point-max))
+       (setq mime (webmail-netaddress-single-part))
+       (widen))
+      (goto-char (point-min))
+      ;; Some blank line to seperate mails.
+      (insert "\n\nFrom nobody " (current-time-string) "\n")
+      (insert "X-Gnus-Webmail: " (symbol-value 'user)
+             "@" (symbol-name webmail-type) "\n")
+      (if id
+         (insert (format "X-Message-ID: <%s@%s>\n" id webmail-address)))
+      (unless (looking-at "$") 
+       (if (search-forward "\n\n" nil t)
+           (forward-line -1)
+         (webmail-error "article@2")))
+      (when mime
+       (narrow-to-region (point-min) (point))
+       (goto-char (point-min))
+       (while (not (eobp))
+         (if (looking-at "MIME-Version\\|Content-Type")
+             (delete-region (point) 
+                            (progn
+                              (forward-line 1)
+                              (if (re-search-forward "^[^ \t]" nil t)
+                                  (goto-char (match-beginning 0))
+                                (point-max))))
+           (forward-line 1)))
+       (goto-char (point-max))
+       (widen)
+       (narrow-to-region (point) (point-max))
+       (insert "MIME-Version: 1.0\n"
+               (prog1
+                   (mml-generate-mime)
+                 (delete-region (point-min) (point-max))))
+       (goto-char (point-min))
+       (widen))
+      (let (case-fold-search)
+       (while (re-search-forward "^From " nil t)
+         (beginning-of-line)
+         (insert ">"))))
+    (mm-append-to-file (point-min) (point-max) file)))
+
+(defun webmail-netscape-article (file id)
+  (let (p p1 attachment count mime type)
+    (save-restriction
+      (webmail-encode-8bit)
+      (goto-char (point-min))
+      (if (not (search-forward "Trash" nil t))
+         (webmail-error "article@1"))
+      (if (not (search-forward "<form>" nil t))
+         (webmail-error "article@2"))
+      (delete-region (point-min) (match-beginning 0)) 
+      (if (not (search-forward "</form>" nil t))
+         (webmail-error "article@3"))
+      (narrow-to-region (point-min) (match-end 0))
+      (goto-char (point-min))
+      (while (re-search-forward "[\040\t\r\n]+" nil t)
+       (replace-match " "))
+      (goto-char (point-min))
+      (while (re-search-forward "<a href=[^>]*>[^<]*</a>" nil t)
+       (replace-match ""))
+      (goto-char (point-min))
+      (while (search-forward "<b>" nil t)
+       (replace-match "\n"))
+      (nnweb-remove-markup)
+      (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+       (nnweb-decode-entities))
+      (goto-char (point-min))
+      (delete-blank-lines)
+      (goto-char (point-min))
+      (while (re-search-forward "^\040+\\|\040+$" nil t)
+       (replace-match ""))
+      (goto-char (point-min))
+      (while (re-search-forward "\040+" nil t)
+       (replace-match " "))
+      (goto-char (point-max))
+      (widen)
+      (insert "\n\n")
+      (setq p (point))
+      (unless (search-forward "<!-- Data -->" nil t)
+       (webmail-error "article@4"))
+      (forward-line 14)
+      (delete-region p (point))
+      (goto-char (point-max))
+      (unless (re-search-backward 
+              "<form name=\"Transfer2\"" p t)
+       (webmail-error "article@5"))
       (delete-region (point) (point-max))
       (goto-char p)
       (while (search-forward
              nil t 2)
        (setq mime t)
        (unless (search-forward "</TABLE>" nil t)
-         (error "Can't find end label (article@6)"))
+         (webmail-error "article@6"))
        (setq p1 (point))
        (if (search-backward "<IMG " p t)
            (progn
              (unless (re-search-forward "HREF=\"\\(/tpl/Attachment/[^/]+/\\([^/]+/[^\?]+\\)[^\"]+\\)\"" p1 t)
-               (error "Can't find tag (article@7)"))
+               (webmail-error "article@7"))
              (setq attachment (match-string 1))
              (setq type (match-string 2))
              (unless (search-forward "</TABLE>" nil t)
-               (error "Can't find end label (article@8)"))
+               (webmail-error "article@8"))
              (delete-region p (point))
-             (let (bufname) ;; Attachment
+             (let (bufname);; Attachment
                (save-excursion
                  (set-buffer (generate-new-buffer " *webmail-att*"))
                  (nnweb-insert (concat (car webmail-open-url) attachment))
          (setq p (point))
          (widen)))
       (unless mime
-         (narrow-to-region p (point-max))
-         (setq mime (webmail-netaddress-single-part))
-         (widen))
+       (narrow-to-region p (point-max))
+       (setq mime (webmail-netaddress-single-part))
+       (widen))
       (goto-char (point-min))
       ;; Some blank line to seperate mails.
       (insert "\n\nFrom nobody " (current-time-string) "\n")
+      (insert "X-Gnus-Webmail: " (symbol-value 'user)
+             "@" (symbol-name webmail-type) "\n")
       (if id
-         (insert "Message-ID: <" id "@usa.net>\n"))
+         (insert (format "X-Message-ID: <%s@%s>\n" id webmail-address)))
       (unless (looking-at "$") 
-       (search-forward "\n\n" nil t)
-       (forward-line -1))
+       (if (search-forward "\n\n" nil t)
+           (forward-line -1)
+         (webmail-error "article@2")))
       (when mime
        (narrow-to-region (point-min) (point))
        (goto-char (point-min))
          (insert ">"))))
     (mm-append-to-file (point-min) (point-max) file)))
 
+;;; my-deja
+
+(defun webmail-my-deja-open ()
+  (webmail-refresh-redirect)
+  (goto-char (point-min))
+  (if (re-search-forward "action=\"\\([^\"]+login_confirm\\.xp[^\"]*\\)\"" 
+                        nil t)
+      (setq webmail-aux (match-string 1))
+    (webmail-error "open@1")))
+
+(defun webmail-my-deja-list ()
+  (let (item id newp base)
+    (goto-char (point-min))
+    (when (re-search-forward "href=\"\\(\\([^\"]*\\)/mailnf\\.[^\"]*\\)\"" 
+                            nil t)
+      (let ((url (match-string 1)))
+       (setq base (match-string 2))
+       (erase-buffer)
+       (nnweb-insert url)))
+    (goto-char (point-min))
+    (when (re-search-forward 
+          "(\\([0-9]+\\) Message.?-[^>]*\\([0-9]+\\) New"
+          nil t) 
+      (message "Found %s mail(s), %s unread" 
+              (match-string 1) (match-string 2)))
+    (goto-char (point-min))
+    (while (re-search-forward 
+           "newmail\\.gif\\|href=\"[^\"]*\\(mailnf\\.[^\"]+act=view[^\"]+mid=\\([^\"&]+\\)[^\"]+\\)\""
+           nil t)
+      (if (setq id (match-string 2))
+         (when (and (or newp (not webmail-newmail-only))
+                    (not (assoc id webmail-articles)))
+           (push (cons id (setq webmail-aux 
+                                (concat base "/" (match-string 1))))
+                 webmail-articles)
+           (setq newp nil))
+       (setq newp t)))
+    (setq webmail-articles (nreverse webmail-articles))))
+
+(defun webmail-my-deja-article-part (base)
+  (let (p)
+    (cond 
+     ((looking-at "[\t\040\r\n]*<!--[^>]*>")
+      (replace-match ""))
+     ((looking-at "[\t\040\r\n]*</PRE>")
+      (replace-match ""))
+     ((looking-at "[\t\040\r\n]*<PRE>")
+      ;; text/plain
+      (replace-match "")
+      (save-restriction
+       (narrow-to-region (point)
+                         (if (re-search-forward "</?PRE>" nil t)
+                             (match-beginning 0)
+                           (point-max)))
+       (goto-char (point-min))
+       (nnweb-remove-markup)
+       (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+         (nnweb-decode-entities))
+       (goto-char (point-max))))
+     ((looking-at "[\t\040\r\n]*<TABLE")
+      (save-restriction
+       (narrow-to-region (point)
+                         (if (search-forward "</TABLE>" nil t 2)
+                             (point)
+                           (point-max)))
+       (goto-char (point-min))
+       (let (name type url bufname)
+         (if (and (search-forward "File Name:" nil t)
+                  (re-search-forward "<FONT[^>]+>\\([^<]+\\)" nil t))
+             (setq name (match-string 1)))
+         (if (and (search-forward "File Type:" nil t)
+                  (re-search-forward "<FONT[^>]+>\\([^<]+\\)" nil t))
+             (setq type (match-string 1)))
+         (unless (re-search-forward "action=\"getattach\\.cgi/\\([^\"]+\\)" 
+                                    nil t)
+           (webmail-error "article@5"))
+         (setq url (concat base "/getattach.cgi/" (match-string 1)
+                           "?sm=Download"))
+         (while (re-search-forward 
+                 "type=hidden name=\"\\([^\"]+\\)\" value=\"\\([^\"]+\\)" 
+                 nil t)
+           (setq url (concat url "&" (match-string 1) "="
+                                 (match-string 2))))
+         (delete-region (point-min) (point-max))
+         (save-excursion
+           (set-buffer (generate-new-buffer " *webmail-att*"))
+           (nnweb-insert url)
+           (push (current-buffer) webmail-buffer-list)
+           (setq bufname (buffer-name)))
+         (insert "<#part type=\"" type "\"")
+         (if name (insert " filename=\"" name "\""))
+         (insert " buffer=\"" bufname "\"")
+         (insert " disposition=inline><#/part>"))))
+     (t
+      (insert "<#part type=\"text/html\" disposition=inline>")
+      (goto-char (point-max))
+      (insert "<#/part>")))))
+
+(defun webmail-my-deja-article (file id)
+  (let (base)
+    (goto-char (point-min))
+    (unless (string-match "\\([^\"]+\\)/mail" webmail-aux)
+      (webmail-error "article@0"))
+    (setq base (match-string 1 webmail-aux))
+    (when (re-search-forward 
+          "href=\"[^\"]*\\(mailnf\\.[^\"]+act=move[^\"]+mid=\\([^\"&]+\\)[^\"]+\\)\""
+          nil t)
+      (setq webmail-aux (concat base "/" (match-string 1)))
+      (string-match "mid=[^\"&]+" webmail-aux)
+      (setq webmail-aux (replace-match "mid=%s" nil nil webmail-aux)))
+    (unless (search-forward "<HR noshade>" nil t)
+      (webmail-error "article@1"))
+    (delete-region (point-min) (point))
+    (unless (search-forward "<HR noshade>" nil t)
+      (webmail-error "article@2"))
+    (save-restriction
+      (narrow-to-region (point-min) (point))
+      (while (search-forward "\r\n" nil t)
+       (replace-match "\n"))
+      (nnweb-remove-markup)
+      (let ((w3-html-entities (cons '(nbsp . 32) w3-html-entities)))
+       (nnweb-decode-entities))
+      (goto-char (point-min))
+      (while (re-search-forward "\n\n+" nil t)
+       (replace-match "\n"))
+      (goto-char (point-max)))
+    (save-restriction
+      (narrow-to-region (point) (point-max))
+      (goto-char (point-max))
+      (unless (search-backward "<HR noshade>" nil t)
+       (webmail-error "article@3"))
+      (unless (search-backward "</TT>" nil t)
+       (webmail-error "article@4"))
+      (delete-region (point) (point-max))
+      (goto-char (point-min))
+      (while (not (eobp)) 
+       (webmail-my-deja-article-part base))
+      (insert "MIME-Version: 1.0\n"
+             (prog1
+                 (mml-generate-mime)
+               (delete-region (point-min) (point-max)))))
+    (goto-char (point-min))
+    (insert "\n\nFrom nobody " (current-time-string) "\n")
+    (insert "X-Gnus-Webmail: " (symbol-value 'user)
+           "@" (symbol-name webmail-type) "\n")
+    (if (eq (char-after) ?\n)
+       (delete-char 1))
+    (mm-append-to-file (point-min) (point-max) file)))
+
 (provide 'webmail)
 
 ;;; webmail.el ends here
index b203277..978cdd6 100755 (executable)
--- a/make.bat
+++ b/make.bat
@@ -1,14 +1,14 @@
 @echo off\r
 \r
-rem Written by David Charlap <shamino@writeme.com>\r
-\r
-rem There are two catches, however.  The emacs.bat batch file may not exist\r
-rem in all distributions.  It is part of the Voelker build of Emacs 19.34\r
-rem (http://www.cs.washington.edu/homes/voelker/ntemacs.html).  If the user\r
-rem installs Gnus with some other build, he may have to replace calls to\r
+rem Written by David Charlap (shamino@writeme.com)\r
+rem\r
+rem There are two possible problems with this batch file.  The emacs.bat batch\r
+rem file may not exist in all distributions.  It is part of the GNU build of\r
+rem Emacs 20.4 (http://www.gnu.org/softare/emacs/windows.ntemacs.html)  If you\r
+rem install Gnus with some other build, you may have to replace calls to\r
 rem %1\emacs.bat with something else.\r
 rem \r
-rem Also, the emacs.bat file that Voelker ships does not accept more than 9\r
+rem Also, the emacs.bat file that comes with Emacs does not accept more than 9\r
 rem parameters, so the attempts to compile the .texi files will fail.  To\r
 rem fix that (at least on NT.  I don't know about Win95), the following\r
 rem change should be made to emacs.bat:\r
@@ -28,19 +28,28 @@ set PWD=
 \r
 if "%1" == "" goto usage\r
 \r
+rem Emacs 20.7 no longer includes emacs.bat. Use emacs.exe if the batch file is\r
+rem not present -- this also fixes the problem about too many parameters on Win9x.\r
+set emacs=emacs.exe\r
+if exist %1\bin\emacs.bat set emacs=emacs.bat\r
+\r
 cd lisp\r
-call %1\bin\emacs.bat -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile\r
+call %1\bin\%emacs% -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile\r
 if not "%2" == "copy" goto info\r
-copy *.el* %1\lisp\r
+attrib -r %1\lisp\gnus\*\r
+copy *.el* %1\lisp\gnus\r
 \r
 :info\r
+set EMACSINFOHACK="(while (re-search-forward \"@\\(end \\)?ifnottex\" nil t) (replace-match \"\"))"\r
 cd ..\texi\r
-call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
-call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
+call %1\bin\%emacs% -batch -q -no-site-file message.texi -eval %EMACSINFOHACK% -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
+call %1\bin\%emacs% -batch -q -no-site-file emacs-mime.texi -eval %EMACSINFOHACK% -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
+call %1\bin\%emacs% -batch -q -no-site-file gnus.texi -eval %EMACSINFOHACK% -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
 if not "%2" == "copy" goto done\r
 copy gnus %1\info\r
 copy gnus-?? %1\info\r
 copy message %1\info\r
+copy emacs-mime %1\info\r
 \r
 :etc\r
 cd ..\etc\r
@@ -54,7 +63,7 @@ goto end
 echo Usage: make ^<emacs-dir^> [copy]\r
 echo.\r
 echo where: ^<emacs-dir^> is the directory you installed emacs in\r
-echo                    eg. d:\emacs\19.34\r
+echo                    eg. d:\emacs\20.4\r
 echo        copy indicates that the compiled files should be copied to your\r
 echo             emacs lisp, info, and etc directories\r
 \r
index 31f90a0..f945dbf 100644 (file)
@@ -4,8 +4,6 @@
 # Created: 1993-05-16
 # Public domain
 
-# $Id: mkinstalldirs,v 1.8 1997/06/25 17:03:22 meyering Exp $
-
 errstatus=0
 
 for file
index 4a17420..f0d4d3c 100644 (file)
@@ -4,25 +4,39 @@
 ;; is supposed to be used for telling old Emacsen where EMU, APEL or
 ;; CUSTOM packages have already installed.
 ;;
-;; For instance, if you would like to make gnus with Mule 2.3 based on
-;; Emacs 19.34, copy this file to `~/.lpath.el' and modify it suitably
+;; For instance, if you would like to build T-gnus with Mule 2.3 based
+;; on Emacs 19.34, copy this file to `~/.lpath.el' and edit it suitably
 ;; for your environment.
 
-(when (boundp 'MULE)
-  (let ((EMU
-        ;; Where is EMU packege?
-        "/usr/local/share/mule/19.34/site-lisp"
-        )
-       (APEL
-        ;; Where is APEL package?
-        "/usr/local/share/mule/site-lisp/apel"
-        )
-       (CUSTOM
-        ;; Where is CUSTOM package?
-        "/usr/local/share/mule/site-lisp/custom"
-        ))
-    ;; No user servicable parts beyond this point.
+(if (boundp 'MULE)
+    (let ((additional-load-path
+          (list
+           ;; Where is EMU packege?
+           "/usr/local/share/mule/19.34/site-lisp/"
+           ;; Where is APEL package?
+           "/usr/local/share/mule/site-lisp/apel/"
+           ;; Where is CUSTOM package?
+           "/usr/local/share/mule/site-lisp/custom/"
+
+           ;; Note that you have no need to specify paths of FLIM, SEMI
+           ;; or WEMI if they are installed under the directory which is
+           ;; same as the parent directory of APEL.
+
+           ;; If you have installed Emacs W3 package,
+           ;; uncomment and edit the following line appropriately.
+           ;; "/usr/local/share/mule/site-lisp/w3/"
+           )))
+      ;; No user servicable parts beyond this point.
 \f
-    (when (string-match "/apel/?$" APEL)
-      (setq APEL (substring APEL 0 (match-beginning 0))))
-    (setq load-path (nconc (list EMU APEL CUSTOM) load-path))))
+      (let ((i (length additional-load-path))
+           p)
+       (while (> i 0)
+         (setq i (1- i)
+               p (nth i additional-load-path))
+         (if (file-directory-p p)
+             (progn
+               (if (string-match "/apel/?$" p)
+                   (setq load-path
+                         (cons (substring p 0 (1+ (match-beginning 0)))
+                               load-path)))
+               (setq load-path (cons p load-path))))))))
index 54e7f9b..b42f7a4 100644 (file)
@@ -1,8 +1,362 @@
+2000-10-26  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Gnus Development): nnmail-delete-incoming -->
+       mail-source-delete-incoming.  (Kudos to Karl Kleinpaste
+       <karl@charcoal.com> for pointing this out.)
+
+2000-10-18  Dave Love  <fx@gnu.org>
+
+       * gnus.texi (NoCeM): Update.
+
+2000-10-17  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (IMAP): Add.
+
+2000-10-05  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Windows Configuration): add examples; first example
+       suggested by Stein A. Str\e,Ax\e(Bmme <stromme@mi.uib.no>.  (The actual
+       Lisp code is also from him.)
+
+2000-10-07  Dave Love  <fx@gnu.org>
+
+       * doclicense.texi: New file.
+
+2000-10-07 16:50:14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: Use install-info.
+
+2000-10-06 14:38:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.texi (Message Headers): Add.
+
+2000-10-04 09:23:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Article Hiding): Add.
+       (Using MIME): Add.
+
+2000-09-30  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (Agent and IMAP): Add.
+       (Splitting in IMAP): Fix.
+
+2000-09-29  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (Converting Kill Files): Fix URL.
+       (Posting Styles): Fix regexp.
+       (Mail Source Specifiers): Fix.
+
+2000-09-29 12:53:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: A workaround for @ifnottex.
+
+2000-09-29 12:36:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi: Remove @c lines in the directory due to a bug in
+       makeinfo 1.68 (GNU texinfo 3.12).
+
+2000-09-22  Dave Love  <fx@gnu.org>
+
+       * message.texi, gnus.texi, emacs-mime.texi: Convert to GFDL.
+
+2000-09-20 John H. Palmieri  <palmieri@math.washington.edu>
+
+       * gnus.texi (Mail Source Customization): Document of
+       mail-source-incoming-file-prefix.
+
+2000-09-20  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (IMAP): Add examples.
+
+2000-09-19  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (IMAP): Add pointer to description of ~/.authinfo file
+       format.
+
+2000-09-17 Felix Natter  <f.natter@ndh.net>
+
+       * gnusref.tex: New version.
+
+       * refcard.tex: New version.
+
+2000-09-17 18:03:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Article Hiding): Doc fix as suggested by Felix Natter
+       <fnatter@gmx.net>.
+
+2000-06-22 Michael Totschnig <michaelt@supernet.ca>
+
+       * gnus.texi (Agent Basics): Doc fix.
+
+2000-09-14 Jason R. Mastaler <jason@mastaler.com>
+
+       * gnus.texi (Mail Source Specifiers): Use $HOME.
+
+2000-08-14  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Mail Source Specifiers): Replace `@paragraph' with
+       `@subsubheading'.
+
+2000-08-14  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Mail Source Specifiers): Try to document the
+       interface to the functions called via (among others) the
+       `:function' keyword.
+
+2000-08-13 20:00:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Topic Commands): Fix typo.
+
+2000-08-13 20:20:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Topic Commands): Addition.
+
+2000-08-11  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (Expiring Mail): Extend documentation of variable
+       `nnmail-expiry-target' and of group parameter `expiry-target'.
+       Explain interaction between these.  Add Lisp example for setting
+       `nnmail-expiry-target'.
+
+2000-08-04  Andreas Oeldenberger <andreas.oeldenberger@gmx.net>
+
+       * message.texi (Forwarding): Fix.
+
+2000-07-15  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (nnimap-authinfo-file):
+       (gnus-invalid-group-regexp): Add.
+       (Mail Source Specifiers): Fix.
+       (IMAP): Fix.
+       (Agent Basics): Fix.
+
+2000-07-12 19:37:19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Article Washing): Add keystroke `t'.
+
+2000-07-12 15:49:34  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: Add EMACS. Test -x "$(MAKEINFO)" does not work.
+       Use sed instead of perl (suggested by Nick V. Pakoulin).
+
+2000-07-03 00:24:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Splitting Mail): Mention gnus-summary-respool-trace. 
+       (Searching for Articles): Fix.
+       (Newest Features): Fix.
+
+2000-06-28  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus.texi (Splitting in IMAP): Update.
+
+2000-05-19 15:18:32  Dmitry Yaitskov <dimas@home.com>
+
+       * message.texi (Reply): Doc fix.
+
+2000-05-17 00:50:29  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Listing Groups): Addition.
+
+2000-05-16 21:46:40  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Misc Group Stuff): Addition.
+       (Article Washing): Ditto.
+
+2000-05-15 10:16:29  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Mail Source Specifiers): Update maildir.
+
+2000-05-07  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi: direntry added.
+
+       * message.texi: direntry added.
+
+       * emacs-mime.texi: direntry added.
+
+2000-05-02  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi (MIME comands): Spelling fix.
+
+2000-05-03 21:12:05  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Summary Mail Commands): Addition.
+       (Summary Post Commands): Ditto.
+
+2000-04-27  Dave Love  <fx@gnu.org>
+
+       * gnus.texi (Article Washing): Update x-face bit.
+
+2000-04-26  Florian Weimer  <fw@deneb.cygnus.argh.org>
+
+       * message.texi (Various Message Variables): Document
+       message-default-charset.
+
+       * emacs-mime.texi (Charset Translation): New section.
+
+2000-04-26 02:30:06  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Posting Styles): Addition. 
+
+2000-04-24 17:09:17  Felix Natter  <f.natter@ndh.net>
+
+       * gnusref.tex: New version.
+
+       * refcard.tex: New version.
+
+2000-04-23 00:32:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Thread Commands): Add keystrokes.
+       (Various Summary Stuff): Addition.
+
+2000-04-22 21:12:25  Alan Shutko  <ats@acm.org>
+
+       * Makefile.in: Add pdf support.
+
+2000-04-21 12:07:20  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Listing Groups): Addition.
+
+2000-04-21 13:45:52  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi (Mail Source Specifiers): Example for :plugged.
+
+2000-04-20 20:37:48  Pavel Janik  <Pavel.Janik@inet.cz>
+
+       * gnus.texi (Limiting): Fix.
+
+2000-04-20 20:32:40  Dmitry Yaitskov  <dimas@home.com>
+
+       * gnus.texi (Charsets): Typo fix.
+
+2000-03-19  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus.texi (IMAP): Addition.
+
+2000-03-13 17:44:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Process/Prefix): Addition.
+
+2000-02-04  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus.texi (IMAP): Fix.
+
+2000-01-27 18:06:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Remember): Addition.
+
+2000-01-21  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus.texi (Splitting in IMAP): Addition.
+       (Mail Source Specifiers): Add fetchflag setting in example.
+
+2000-01-08 08:10:04  Martin Bialasinski  <agr30+news@uni-koeln.de>
+
+       * gnus.texi (Mail and Post): Example.
+
+2000-01-08 07:46:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Customizing w3): New.
+
+2000-01-08 07:46:06  Hamish Macdonald  <hamishm@lucent.com>
+
+       * gnus.texi (Customizing w3): Example.
+
+2000-01-06 17:55:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Charsets): Addition.
+
+2000-01-05 15:58:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Mail Group Commands): Addition.
+       (Top): Added detailmenu.
+
+2000-01-03 01:31:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (MIME Commands): Fix.
+
+2000-01-03  Karl Kleinpaste <karl@justresearch.com>
+
+       * gnus.texi (Splitting in IMAP): Add '.' after @xref.
+
+2000-01-02 08:39:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi: Closing paren.
+       Doc fix.
+
+1999-12-28  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus.texi (Article Hiding): Addition.
+       (Splitting in IMAP): Addition.
+
+1999-12-17 12:12:41  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Mail Source Specifiers): Addition.
+
+1999-12-13 23:47:50  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Mail Source Specifiers): Addition.
+
+1999-12-07 00:19:31  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.texi (Web Archive): Addition.
+
+1999-12-06 05:17:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Slashdot): Addition.
+
+1999-12-05 00:54:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Mail Source Specifiers): Removed backslashes.
+
+1999-12-04 07:35:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Setting Process Marks): Addition.
+
+1999-12-04 05:09:46  Manoj Srivastava  <srivasta@golden-gryphon.com>
+
+       * gnus.texi: Use defface instead of face-spec-set.
+
+1999-12-04 02:31:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (extension): Posting server fix.
+       Url update.
+
+1999-12-04 01:16:52  Yoshiki Hayashi  <t90553@m.ecc.u-tokyo.ac.jp>
+
+       * gnus.texi (group-buffer): Fix "theese".
+
+1999-12-04 01:13:51  Thomas Gellekum  <tg@ihf.rwth-aachen.de>
+
+       * gnus.texi (Height): Typo fix.
+
+1999-11-13  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * xemacs.mak: New NMAKE file to support build and install of info
+       documentation on Windows NT, requiring the `texinfo' XEmacs
+       package.
+
+1999-12-03 00:02:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Other Gnus Versions): New.
+       (Gnus Versions): Made into own node.
+
+1999-12-02 00:00:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Paging the Article): Addition.
+       (History): Addition.
+
+1999-11-24  Carsten Leonhardt  <leo@arioch.oche.de>
+
+       * gnus.texi (Mail Source Specifiers): Mention maildir in the
+         overview and the possibility to use remote maildirs.
+
 1999-12-01 14:21:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Topic Parameters): Addition.
        (Summary Message Commands): New.
        (Canceling and Superseding): Made into subsection.
+       (Charsets): Addition.
 
 1999-11-30 10:54:31  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
@@ -462,3 +816,7 @@ Thu Feb 25 00:28:49 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
 1998-08-27 07:29:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Mail Folders): Addition.
+       
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; End:
index eb03f40..770a86d 100644 (file)
@@ -7,84 +7,112 @@ top_srcdir = @top_srcdir@
 @SET_MAKE@
 VPATH=$(srcdir)
 TEXI2DVI=texi2dvi
-EMACS=@EMACS@
+TEXI2PDF=texi2pdf
 MAKEINFO=@MAKEINFO@
-FLAGS=-batch -q -no-site-file
+EMACS=@EMACS@
+EMACSINFO=$(EMACS) -batch -q -no-site-file
 INFOSWI=-l ./dgnushack.el -f dgnushack-texi-format
 XINFOSWI=-l ./dgnushack.el -f dgnushack-texi-add-suffix-and-format
+PDFLATEX=pdflatex
 LATEX=latex
 DVIPS=dvips
-PERL=perl
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 PAPERTYPE=a4
+INFO_DEPS=gnus message emacs-mime
+INFO_DEPS_JA=gnus-ja message-ja
+INFO_DEPS_INFO=gnus.info message.info emacs-mime.info
+INFO_DEPS_JA_INFO=gnus-ja.info message-ja.info
 
-all: gnus message emacs-mime
-all-info: gnus.info message.info emacs-mime.info
+all: $(INFO_DEPS)
+all-info: $(INFO_DEPS_INFO)
 
 gnus.info: gnus.texi gnus-faq.texi
 message.info: message.texi
 emacs-mime.info: emacs-mime.texi
 
-ja: gnus-ja message-ja
-ja-info: gnus-ja.info message-ja.info
+ja: $(INFO_DEPS_JA)
+ja-info: $(INFO_DEPS_JA_INFO)
 
 gnus-ja.info: gnus-ja.texi gnus-faq-ja.texi
 message-ja.info: message-ja.texi
 
 most: texi2latex.elc latex latexps
 
+%-ja: %-ja.texi
+       cd ../lisp && $(EMACSINFO) $(INFOSWI) ../texi/$<
+
+%-ja.info: %-ja.texi
+       cd ../lisp && $(EMACSINFO) $(XINFOSWI) ../texi/$<
+
 %.info: %.texi
-       if test $(MAKEINFO) = no; then \
-         cd ../lisp && $(EMACS) $(FLAGS) $(XINFOSWI) ../texi/$<; \
+       if test "x$(MAKEINFO)" = "xno" \
+         -o "$<" = "gnus-ja.texi" \
+         -o "$<" = "message-ja.texi"; then \
+         cd ../lisp && $(EMACSINFO) $(XINFOSWI) ../texi/$<; \
        else \
-         makeinfo -o $@ $<; \
+         $(MAKEINFO) -o $@ $<; \
        fi
 
-.SUFFIXES: .texi .dvi .ps
+.SUFFIXES: .texi .dvi .ps .pdf
 
 .texi:
-       if test $(MAKEINFO) = no; then \
-         cd ../lisp && $(EMACS) $(FLAGS) $(INFOSWI) ../texi/$<; \
+       if test "x$(MAKEINFO)" = "xno" \
+         -o "$<" = "gnus-ja.texi" \
+         -o "$<" = "message-ja.texi"; then \
+         cd ../lisp && $(EMACSINFO) $(INFOSWI) ../texi/$<; \
        else \
-         makeinfo $<; \
+         $(MAKEINFO) -I $(srcdir) -o $* $<; \
        fi
 
 dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi
 
+pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf
+
 .texi.dvi :
-       $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
+       sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmp.texi
        $(TEXI2DVI) gnustmp.texi
        cp gnustmp.dvi $*.dvi
        rm gnustmp.*
 
+.texi.pdf :
+       sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmp.texi
+       $(TEXI2PDF) gnustmp.texi
+       cp gnustmp.pdf $*.pdf
+       rm gnustmp.*
+
 refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
        $(LATEX) refcard.tex
 
+
+refcard.pdf: refcard.tex gnuslogo.refcard gnusref.tex
+       epstopdf gnuslogo.refcard --outfile=gnuslogo.refcard.pdf
+       $(PDFLATEX) refcard.tex
+
 clean:
-       rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
-       *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
-       gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
-       gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
-       gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi \
-       gnus.info* gnus-ja.info* message.info* message-ja.info* \
-       emacs-mime.info
-       rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
-       rm -f message message-[0-9]
-       rm -f emacs-mime
-       rm -f gnus-ja gnus-ja-[0-9] gnus-ja-[0-9][0-9]
-       rm -f message-ja message-ja-[0-9]
+       rm -f *.orig *.rej *.elc *~ gnus-[0-9] gnus-[0-9][0-9]
+       rm -f message-[0-9]
+       rm -f $(INFO_DEPS)
+       rm -f gnus-ja-[0-9] gnus-ja-[0-9][0-9]
+       rm -f message-ja-[0-9]
+       rm -f $(INFO_DEPS_JA)
+       rm -f gnus.info-[0-9] gnus.info-[0-9][0-9]
+       rm -f message.info-[0-9]
+       rm -f $(INFO_DEPS_INFO)
+       rm -f gnus-ja.info-[0-9] gnus-ja.info-[0-9][0-9]
+       rm -f message-ja.info-[0-9]
+       rm -f $(INFO_DEPS_JA_INFO)
 
 makeinfo:
        makeinfo -o gnus gnus.texi
        makeinfo -o message message.texi
 
 texi2latex.elc: texi2latex.el
-       $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
+       $(EMACSINFO) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
 
 latex: gnus.texi texi2latex.elc
-       $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
+       $(EMACSINFO) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
 
 latexps:
        $(MAKE) texi2latex.elc
@@ -137,16 +165,37 @@ veryclean: clean
 distclean: clean
        rm -f Makefile
 
-install:
+install: $(INFO_DEPS)
        $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir)
-       @for file in gnus message emacs-mime gnus-ja message-ja; do \
-         for ifile in `echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
-           if test -f $$ifile; then \
-             echo " $(INSTALL_DATA) $$ifile $(infodir)/$$ifile"; \
-             $(INSTALL_DATA) $$ifile $(infodir)/$$ifile; \
+       @list='$(INFO_DEPS)'; \
+       for file in $$list; do \
+         d=$(srcdir); \
+         for ifile in `CDPATH=: && cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
+           if test -f $$d/$$ifile; then \
+             echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
+             $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \
            else : ; fi; \
          done; \
        done
+       @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
+         list='$(INFO_DEPS)'; \
+         for file in $$list; do \
+           echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\
+           install-info --info-dir=$(infodir) $(infodir)/$$file || :;\
+         done; \
+       else : ; fi
+
+install-ja: $(INFO_DEPS_JA)
+       $(MAKE) INFO_DEPS='$(INFO_DEPS_JA)' EMACS="$(EMACS)" \
+               infodir="$(infodir)" install
+
+install-info: $(INFO_DEPS_INFO)
+       $(MAKE) INFO_DEPS='$(INFO_DEPS_INFO)' EMACS="$(EMACS)" \
+               infodir="$(infodir)" install
+
+install-ja-info: $(INFO_DEPS_JA_INFO)
+       $(MAKE) INFO_DEPS='$(INFO_DEPS_JA_INFO)' EMACS="$(EMACS)" \
+               infodir="$(infodir)" install
 
 tmps:
        if [ ! -e tmp ]; then mkdir tmp; fi
index 1538b5f..5e0f759 100644 (file)
@@ -1,27 +1,27 @@
-This file documents about translation policy.\r
-There is an ongoing project to make gnus-ja.texi.\r
-Any volunteers are welcomed.\r
-\r
-\e$BF|K\8lLu$K4X$9$kN.57$r@bL@$9$k%U%!%$%k$G$9!#\e(B\r
-gnus-ja.texi \e$B$r:n@.$9$k%W%m%8%'%/%H$,?J9TCf$G$9!#\e(B\r
-\e$B%W%m%8%'%/%H;22C<T$rJg=8$7$F$$$^$9!#\e(B\r
-\e$B;22C4uK><T$O\e(B Semi-gnus \e$B%^%K%e%"%k%W%m%8%'%/%H$N%Z!<%8\e(B\r
-http://www.komaba.ecc.u-tokyo.ac.jp/%7Eg740685/Semi-gnus/index.html\r
-\e$B$rFI$s$G$/$@$5$$!#\e(B\r
-\r
-\e$B0J2<$N\e(B2\e$B$D$OLu<T$N0l?M$+$D%W%m%8%'%/%H$N<g:K<T\e(B (\e$B$G$"$k$i$7$$\e(B) \r
-Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp> \e$B$NK]Lu$K4X$9$k5,B'\e(B\r
-\e$B$G$9!#$3$N5,B'$O$h$jNI$$$H;W$o$l$k$b$N$,8+$D$+$C$?>l9g$K$OJQ99$5$l$k2D\e(B\r
-\e$BG=@-$,$"$j$^$9!#$^$?!"$h$jNI$$0F$d!"B>$N5,B'$rIU$12C$($?$$>l9g$O!"\e(B\r
-semi-gnus-ja \e$B%a!<%j%s%0%j%9%H$K$=$N0F$r=q$/$+!"\e(Bjaist \e$B$N\e(B Open CVS \e$B$K=q\e(B\r
-\e$B$-9~$_8"8B$r;}$C$F$$$kJ}$OD>@\=q$-9~$_$r$7$F$/$@$5$$!#\e(B(CVS \e$B$N>l9g$G$b!"\e(B\r
-semi-gnus-ja \e$B$GJQ99$N9pCN$r$9$k;v$,K>$^$7$$$G$9!#\e(B) semi-gnus-ja \e$B%a!<%j\e(B\r
-\e$B%s%0%j%9%H$N2CF~$N;EJ}$KIU$$$F$b!">e5-$N\e(B URI \e$B$r;2>H$7$F$/$@$5$$!#\e(B\r
-\r
-1. \e$B$J$k$Y$/%+%?%+%J$O;H$o$J$$$h$&$K$9$k!#\e(B\r
-   (\e$BF|K\8l$K$G$-$k$H$3$m$O$J$k$Y$/F|K\8l$K$9$k!#\e(B\r
-    \e$B>l9g$K$h$C$F$O?7$7$$8l$rDj5A$9$k;v$b$"$k!#\e(B)\r
-\r
-2. \e$B1Q8l$rIU2C$7$?J}$,J,$+$j$d$9$$$H;W$o$l$k8l6g$O!"\e(B\r
-   \e$BF|K\8l$ND>8e$K3g8L$NCf$KF~$l$k!#\e(B\r
-\r
+This file documents about translation policy.
+There is an ongoing project to make gnus-ja.texi.
+Any volunteers are welcomed.
+
+\e$BF|K\8lLu$K4X$9$kN.57$r@bL@$9$k%U%!%$%k$G$9!#\e(B
+gnus-ja.texi \e$B$r:n@.$9$k%W%m%8%'%/%H$,?J9TCf$G$9!#\e(B
+\e$B%W%m%8%'%/%H;22C<T$rJg=8$7$F$$$^$9!#\e(B
+\e$B;22C4uK><T$O\e(B Semi-gnus \e$B%^%K%e%"%k%W%m%8%'%/%H$N%Z!<%8\e(B
+http://www.komaba.ecc.u-tokyo.ac.jp/%7Eg740685/Semi-gnus/index.html
+\e$B$rFI$s$G$/$@$5$$!#\e(B
+
+\e$B0J2<$N\e(B2\e$B$D$OLu<T$N0l?M$+$D%W%m%8%'%/%H$N<g:K<T\e(B (\e$B$G$"$k$i$7$$\e(B) 
+Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp> \e$B$NK]Lu$K4X$9$k5,B'\e(B
+\e$B$G$9!#$3$N5,B'$O$h$jNI$$$H;W$o$l$k$b$N$,8+$D$+$C$?>l9g$K$OJQ99$5$l$k2D\e(B
+\e$BG=@-$,$"$j$^$9!#$^$?!"$h$jNI$$0F$d!"B>$N5,B'$rIU$12C$($?$$>l9g$O!"\e(B
+semi-gnus-ja \e$B%a!<%j%s%0%j%9%H$K$=$N0F$r=q$/$+!"\e(Bjaist \e$B$N\e(B Open CVS \e$B$K=q\e(B
+\e$B$-9~$_8"8B$r;}$C$F$$$kJ}$OD>@\=q$-9~$_$r$7$F$/$@$5$$!#\e(B(CVS \e$B$N>l9g$G$b!"\e(B
+semi-gnus-ja \e$B$GJQ99$N9pCN$r$9$k;v$,K>$^$7$$$G$9!#\e(B) semi-gnus-ja \e$B%a!<%j\e(B
+\e$B%s%0%j%9%H$N2CF~$N;EJ}$KIU$$$F$b!">e5-$N\e(B URI \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+1. \e$B$J$k$Y$/%+%?%+%J$O;H$o$J$$$h$&$K$9$k!#\e(B
+   (\e$BF|K\8l$K$G$-$k$H$3$m$O$J$k$Y$/F|K\8l$K$9$k!#\e(B
+    \e$B>l9g$K$h$C$F$O?7$7$$8l$rDj5A$9$k;v$b$"$k!#\e(B)
+
+2. \e$B1Q8l$rIU2C$7$?J}$,J,$+$j$d$9$$$H;W$o$l$k8l6g$O!"\e(B
+   \e$BF|K\8l$ND>8e$K3g8L$NCf$KF~$l$k!#\e(B
+
diff --git a/texi/doclicense.texi b/texi/doclicense.texi
new file mode 100644 (file)
index 0000000..d580caf
--- /dev/null
@@ -0,0 +1,368 @@
+@c -*-texinfo-*-
+@node GNU Free Documentation License, Intro, Copying, Top
+
+@appendix GNU Free Documentation License
+@center Version 1.1, March 2000
+
+@display
+Copyright (C) 2000  Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+@sp 1
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document ``free'' in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially.  Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@sp 1
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License.  The ``Document'', below, refers to any
+such manual or work.  Any member of the public is a licensee, and is
+addressed as ``you''.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject.  (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent.  A copy that is
+not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification.  Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+@sp 1
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+@sp 1
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols.  If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+@sp 1
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.@*
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has less than five).@*
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.@*
+D. Preserve all the copyright notices of the Document.@*
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.@*
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.@*
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.@*
+H. Include an unaltered copy of this License.@*
+I. Preserve the section entitled ``History'', and its title, and add to
+   it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section entitled ``History'' in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.@*
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the ``History'' section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.@*
+K. In any section entitled ``Acknowledgements'' or ``Dedications'',
+   preserve the section's title, and preserve in the section all the
+   substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.@*
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.@*
+M. Delete any section entitled ``Endorsements''.  Such a section
+   may not be included in the Modified Version.@*
+N. Do not retitle any existing section as ``Endorsements''
+   or to conflict in title with any Invariant Section.@*
+@sp 1
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+@sp 1
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled ``History''
+in the various original documents, forming one section entitled
+``History''; likewise combine any sections entitled ``Acknowledgements'',
+and any sections entitled ``Dedications''.  You must delete all sections
+entitled ``Endorsements.''
+@sp 1
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+@sp 1
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation.  Such a compilation is called an ``aggregate'', and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+@sp 1
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License provided that you also include the
+original English version of this License.  In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+@sp 1
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+@sp 1
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+@end enumerate
+
+@unnumberedsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.1
+  or any later version published by the Free Software Foundation;
+  with the Invariant Sections being @var{list their titles}, with the
+  Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
+  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+@end group
+@end smallexample
+If you have no Invariant Sections, write ``with no Invariant Sections''
+instead of saying which ones are invariant.  If you have no
+Front-Cover Texts, write ``no Front-Cover Texts'' instead of
+``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
index 225a5f5..c8a2f46 100644 (file)
@@ -5,39 +5,38 @@
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Emacs MIME: (emacs-mime).   The MIME de/composition library.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Emacs MIME: (emacs-mime).   The MIME de/composition library.
+@end direntry
 @iftex
 @finalout
 @end iftex
 @setchapternewpage odd
 
-@ifinfo
+@ifnottex
 
 This file documents the Emacs MIME interface functionality.
 
-Copyright (C) 1998,99 Free Software Foundation, Inc.
+Copyright (C) 1998,99,2000 Free Software Foundation, Inc.
 
-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, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-@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).
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also 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
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end ifnottex
 
 @tex
 
@@ -48,20 +47,24 @@ into another language, under the above conditions for modified versions.
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1998,99 Free Software Foundation, Inc.
-
-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.
-
+Copyright @copyright{} 1998,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 @end titlepage
 @page
 
@@ -703,8 +706,8 @@ image/*; gimp -8 %s
 audio/wav; wavplayer %s
 @end example
 
-This says that all image files should be displayed with @samp{xv}, and
-that realaudio files should be played by @samp{rvplayer}.
+This says that all image files should be displayed with @code{gimp}, and
+that realaudio files should be played by @code{rvplayer}.
 
 The @code{mailcap} library parses this file, and provides functions for
 matching types.
@@ -960,6 +963,7 @@ string containing the @sc{mime} message.
 * Simple MML Example::             An example MML document.
 * MML Definition::                 All valid MML elements.
 * Advanced MML Example::           Another example MML document.
+* Charset Translation::            How charsets are mapped from @sc{mule} to MIME.
 * Conversion::                     Going from @sc{mime} to MML and vice versa.
 @end menu
 
@@ -1181,6 +1185,43 @@ This plain text part is an attachment.
 --=-=-=--
 @end example
 
+@node Charset Translation
+@section Charset Translation
+@cindex charsets
+
+During translation from MML to @sc{mime}, for each @sc{mime} part which
+has been composed inside Emacs, an appropriate charset has to be chosen.
+
+@vindex mail-parse-charset
+If you are running a non-@sc{mule} Emacs, this process is simple: If the
+part contains any non-ASCII (8-bit) characters, the @sc{mime} charset
+given by @code{mail-parse-charset} (a symbol) is used.  (Never set this
+variable directly, though.  If you want to change the default charset,
+please consult the documentation of the package which you use to process
+@sc{mime} messages.
+@xref{Various Message Variables, , Various Message Variables, message, 
+      Message Manual}, for example.)
+If there are only ASCII characters, the @sc{mime} charset US-ASCII is
+used, of course.
+
+@cindex MULE
+@cindex UTF-8
+@cindex Unicode
+@vindex mm-mime-mule-charset-alist
+Things are slightly more complicated when running Emacs with @sc{mule}
+support.  In this case, a list of the @sc{mule} charsets used in the
+part is obtained, and the @sc{mule} charsets are translated to @sc{mime}
+charsets by consulting the variable @code{mm-mime-mule-charset-alist}.
+If this results in a single @sc{mime} charset, this is used to encode
+the part.  But if the resulting list of @sc{mime} charsets contains more
+than one element, two things can happen: If it is possible to encode the
+part via UTF-8, this charset is used.  (For this, Emacs must support
+the @code{utf-8} coding system, and the part must consist entirely of
+characters which have Unicode counterparts.)  If UTF-8 is not available
+for some reason, the part is split into several ones, so that each one
+can be encoded with a single @sc{mime} charset.  The part can only be
+split at line boundaries, though---if more than one @sc{mime} charset is
+required to encode a single line, it is not possible to encode the part.
 
 @node Conversion
 @section Conversion
@@ -1216,7 +1257,7 @@ if not identical.
 The Emacs @sc{mime} library implements handling of various elements
 according to a (somewhat) large number of RFCs, drafts and standards
 documents.  This chapter lists the relevant ones.  They can all be
-fetched from @samp{http://www.stud.ifi.uio.no/~larsi/notes/}.
+fetched from @samp{http://quimby.gnus.org/notes/}.
 
 @table @dfn
 @item RFC822
index 8cf1711..9857457 100644 (file)
@@ -71,10 +71,10 @@ Baur \e$B;a!"\e(B Per Abrahamsen \e$B;a$K46<U$7$^$9!#\e(B
 @item
 Q1.1: \e$B:G?7$N%P!<%8%g%s$O\e(B?
 
-\e$B8=:_$N3+H/HG$N:G?7%P!<%8%g%s$O\e(B T-gnus 6.13 (tag: t-gnus-6_13) \e$B$G!"I8=`%Q%C\e(B
+\e$B8=:_$N3+H/HG$N:G?7%P!<%8%g%s$O\e(B T-gnus 6.14 (tag: t-gnus-6_14) \e$B$G!"I8=`%Q%C\e(B
 \e$B%1!<%8$N:G?7%P!<%8%g%s$O\e(B T-gnus 6.12 (tag: t-gnus-6_12) \e$B$G$9!#\e(B
 
-T-gnus 6.13 \e$B$r;HMQ$9$k$?$a$K$OJL%Q%C%1!<%8$N\e(B FLIM 1.13.1 \e$B0J>e\e(B, SEMI (\e$B$^\e(B
+T-gnus 6.14 \e$B$r;HMQ$9$k$?$a$K$OJL%Q%C%1!<%8$N\e(B FLIM 1.13.1 \e$B0J>e\e(B, SEMI (\e$B$^\e(B
 \e$B$?$O\e(B WEMI) 1.13.5 \e$B0J>e$,I,MW$G$9!#\e(B \e$B$=$NB>!"\e(B APEL \e$B$,I,MW$K$J$j$^$9$,!"I,\e(B
 \e$BMW$J%P!<%8%g%s$O\e(B FLIM / SEMI (WEMI) \e$B%Q%C%1!<%8Fb$N\e(B README \e$B$r;2>H$7$F$/$@\e(B
 \e$B$5$$!#\e(B
@@ -97,24 +97,22 @@ CVS \e$B$G$N<hF@\e(B
 @item login
 \e$B<!$NJ}K!$G%m%0%$%s$7$^$9!#\e(B% \e$B$O%W%m%s%W%H$G$9!#\e(B
 
-% cvs -d \
-   :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root login
+% cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root login
 
   CVS password: [CR] # NULL string
 
 @item checkout
-T-gnus \e$B$r%A%'%C%/%"%&%H$7$^$9!#<B:]$K$O!"\e(B-r t-gnus-6_13 \e$B$N$h$&$K%?%0$rIU\e(B
+T-gnus \e$B$r%A%'%C%/%"%&%H$7$^$9!#<B:]$K$O!"\e(B-r t-gnus-6_14 \e$B$N$h$&$K%?%0$rIU\e(B
 \e$B$1$F<B9T$7$^$9!#\e(B
 
-% cvs -d \
-   :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
+% cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root \
    checkout [-r TAG] gnus
 
 @end itemize
 
 2\e$B2sL\$+$i$O!"\e(B
 
-% cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
+% cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root \
    update [-r TAG] gnus
 
 \e$B$K$h$j<hF@$7$^$9!#\e(B
@@ -123,7 +121,7 @@ anonymous ftp \e$B$G$N<hF@\e(B
 
 anonymous ftp \e$B$G$O0J2<$N>l=j$+$i<hF@$G$-$^$9!#\e(B
 
-@file{ftp://ftp.jpl.org/pub/elisp/t-gnus-6.13/}
+@file{ftp://ftp.jpl.org/pub/elisp/t-gnus-6.14/}
 
 SEMI, FLIM, APEL \e$B$N<hF@\e(B
 
@@ -148,21 +146,20 @@ T-gnus \e$B$,8x<0$KBP1~$7$F$$$k\e(B Emacs \e$B$N%P!<%8%g%s$O<!$NDL$j$G$9!#\e(B
 
 @itemize @bullet
 @item
-GNU Emacs
-
-\e$B%P!<%8%g%s\e(B 19.34 \e$B0J>e$N\e(B Mule \e$B5!G=IU$-\e(B
+Emacs 19.34 \e$B$H$=$l0J>e$N\e(B Mule \e$B5!G=IU$-!#\e(B
 
 @item
-XEmacs
-
-\e$B%P!<%8%g%s\e(B 20.2 \e$B0J>e$N\e(B Mule \e$B5!G=IU$-\e(B
+XEmacs 21.1.1 \e$B0J>e$N\e(B Mule \e$B5!G=IU$-\e(B
 
 @item
-Meadow
+Meadow 1.00 \e$B0J>e!#\e(B(Mule for Windows \e$B$G$OF0$-$^$;$s!#\e(B)
 
-\e$B%P!<%8%g%s\e(B 1.00 \e$B0J>e!#\e(B(Mule for Windows \e$B$G$OF0$-$^$;$s!#\e(B)
 @end itemize
 
+\e$B$H$O8@$&$b$N$N!"\e(BT-gnus \e$B$O%P!<%8%g%s\e(B 21.1.1 \e$BL$K~$N\e(B XEmacs, \e$BNc$($P\e(B 20.4 \e$B$G\e(B
+\e$B$b;H$($k$+$b$7$l$^$;$s!#>\$7$$$3$H$O\e(B T-gnus \e$B$NG[I[$K4^$^$l$F$$$k\e(B README
\e$B%U%!%$%k$rFI$s$G2<$5$$!#\e(B
+
 @item
 Q1.4: T-gnus \e$B$r\e(B GNU Emacs \e$B$H\e(B XEmacs \e$B$NN>J}$GF0$+$9$3$H$O$G$-$^$9$+\e(B?
 
@@ -234,7 +231,7 @@ T-gnus \e$B$G;HMQ$9$k>l9g$K$O!"I,$:\e(B Q2.1 \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 gnus-offline \e$B$O!";T@nC#:H\e(B <t-ichi@@po.shiojiri.ne.jp> \e$B$N:n$G!"\e(B T-gnus \e$B$r\e(B
 \e$B$$$o$f$k!V%*%U%i%$%s;HMQ!W\e(B(\e$B%K%e!<%95-;v!"%a%$%k$NAw<u?.$r0l3g$7$F9T$$!"\e(B
 \e$B$=$l$i$N%a%C%;!<%8$NFI$_=q$-$O%5!<%P!<$KL$@\B3$N>uBV$G9T$&\e(B)\e$B$9$k$3$H$rMF\e(B
-\e$B0W$K$9$k$?$a$N%Q%C%1!<%8$G$9!#\e(BT-gnus (tag: t-gnus-6_13) \e$B$K$OI8=`$G4^$^$l\e(B
+\e$B0W$K$9$k$?$a$N%Q%C%1!<%8$G$9!#\e(BT-gnus (tag: t-gnus-6_14) \e$B$K$OI8=`$G4^$^$l\e(B
 \e$B$F$$$^$9!#\e(B
 
 @end table
@@ -272,22 +269,14 @@ Q2.1: T-gnus \e$B$N%P!<%8%g%s$r$"$2$?$i\e(B BBDB \e$B$,F0$+$J$/$J$C$F$7$^$$$^$7$?!#
 Semi-gnus 6.8 \e$B0J9_$N%P!<%8%g%s$G$O!"%*%j%8%J%k$N\e(B bbdb-gnus.el \e$B$OF0:n$7$^\e(B
 \e$B$;$s!#\e(B \e$B<!$N$h$&$KBP1~$7$F$/$@$5$$!#\e(B
 
-@enumerate a
-@item
 bbdb-gnus.el \e$B$G!"\e(B gnus-article-buffer \e$B$NBe$j$K\e(B
 gnus-original-article-buffer \e$B$r;2>H$9$k$h$&$K$9$k!#\e(B
 
 \e$B$b$7!"%*%j%8%J%k$N\e(B Gnus (September \e$B0J9_\e(B) \e$B$r;H$C$F$$$k$N$G$"$l$P!"$3$NJ}\e(B
 \e$BK!$,NI$$$G$7$g$&!#\e(B
 
-@item
-bbdb/gnus-update-record \e$B$r\e(B gnus-article-prepare-hook \e$B$NBe$j$K\e(B
-gnus-article-display-hook \e$B$KDI2C$9$k!#\e(B
-
-@end enumerate
-
-a \e$B$NJ}K!!"$*$h$S\e(B bbdb-user-mail-names \e$B$KBP1~$7$?\e(B BBDB 2.00.01 \e$B$KBP$9$k\e(B
-patch \e$B!"4pK\E*$J@_DjNc$,!"\e(B
+\e$B$3$NJ}K!!"$*$h$S\e(B bbdb-user-mail-names \e$B$KBP1~$7$?\e(B BBDB 2.00.01 \e$B$KBP$9\e(B
+\e$B$k\e(B patch \e$B!"4pK\E*$J@_DjNc$,!"\e(B
 @file{http://www.mdcnet.co.jp/~keiichi/bbdb.shtml} \e$B$K$"$j$^$9!#\e(B
 
 @item
@@ -373,18 +362,18 @@ gnus-posting-style \e$B$r;HMQ$9$k;v$b$G$-$^$9!#\e(B
 @node Mailing list FAQ
 @subsection \e$B%a!<%j%s%0%j%9%H\e(B
 
-@itemize bullet
+@itemize @bullet
 @item
 Q5.1: \e$B%a%$%j%s%0!&%j%9%H$+$iC&B`$9$k$K$O\e(B?
 
 @table @var
 @item \e$BF|K\8lMQ\e(B
-@file{semi-gnus-ja-unsubscribe@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a%$\e(B
-\e$B%k$rAw$C$F2<$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+@file{semi-gnus-ja-unsubscribe@@meadowy.org} \e$B$K6u$N%a%$%k$rAw$C$F2<$5$$!#\e(B
+(Subject \e$B$bITMW$G$9!#\e(B)
 
 @item \e$B1Q8lMQ\e(B
-@file{semi-gnus-en-unsubscribe@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a%$\e(B
-\e$B%k$rAw$C$F2<$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+@file{semi-gnus-en-unsubscribe@@meadowy.org} \e$B$K6u$N%a%$%k$rAw$C$F2<$5$$!#\e(B
+(Subject \e$B$bITMW$G$9!#\e(B)
 
 @end table
 
@@ -397,12 +386,12 @@ T-gnus \e$B$G$O!"MxMQ<T$H0];}<T$H$$$&=>Mh$NB?$/$N%Q%C%1!<%8$G:NMQ$5$l$F$$$k\e(B
 
 @table @var
 @item \e$BF|K\8lMQ\e(B
-@file{semi-gnus-ja-help@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a!<%k$rAw$C\e(B
-\e$B$F!"Aw$i$l$F$/$k%a!<%k$N;X<($K=>$C$F$/$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+@file{semi-gnus-ja-help@@meadowy.org} \e$B$K6u$N%a!<%k$rAw$C$F!"Aw$i$l$F$/$k\e(B
+\e$B%a!<%k$N;X<($K=>$C$F$/$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
 
 @item \e$B1Q8lMQ\e(B
-@file{semi-gnus-en-help@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a!<%k$rAw$C\e(B
-\e$B$F!"Aw$i$l$F$/$k%a!<%k$N;X<($K=>$C$F$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+@file{semi-gnus-en-help@@meadowy.org} \e$B$K6u$N%a!<%k$rAw$C$F!"Aw$i$l$F$/$k\e(B
+\e$B%a!<%k$N;X<($K=>$C$F$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
 
 @end table
 
@@ -420,8 +409,8 @@ T-gnus \e$B$N3+H/Ey$K4X$9$kJ}?K$N7hDj$OA4$F\e(B Semi-gnus-ja/en \e$B%a!<%j%s%0%j%9%
 \e$B$7$F$OE,MQ$5$l$J$$!#\e(B
 
 @item
-\e$B8xE*$J0F7o$NDs0F$*$h$S5DO@$O\e(B semi-gnus-ja@@meadow.scphys.kyoto-u.ac.jp \e$B$b\e(B
-\e$B$7$/$O\e(Bsemi-gnus-en@@meadow.scphys.kyoto-u.ac.jp \e$B$G9T$&!#\e(B
+\e$B8xE*$J0F7o$NDs0F$*$h$S5DO@$O\e(B semi-gnus-ja@@meadowy.org \e$B$b$7$/\e(B
+\e$B$O\e(B semi-gnus-en@@meadowy.org \e$B$G9T$&!#\e(B
 
 @item
 \e$B:G=*E*$JJ}?K$O%"%s%1!<%H7k2L$NB??t0U8+$r:NMQ$9$k!#\e(B
index cfe873b..d0d4af0 100644 (file)
@@ -1,13 +1,14 @@
-@c \input texinfo                  @c -*-texinfo-*-
+@c \input texinfo @c -*- mode: texinfo; coding: iso-2022-7bit-ss2; -*-
 
 @setfilename gnus-ja
-@settitle T-gnus 6.13 Manual
+@settitle T-gnus 6.14 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Gnus-ja: (gnus-ja).   The news reader gnus (\e$BF|K\8lHG\e(B).
-@c @end direntry
+@dircategory Editors
+@direntry
+* Gnus-ja: (gnus-ja).         The newsreader gnus (Japanese).
+@end direntry
 @iftex
 @finalout
 @end iftex
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
 
-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!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-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$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$7$^$9!#JQ99IT2DItJ,$O;XDj$7$^$;$s!#!V\e(BA GNU Manual\e$B!W$OI=I=;f\e(B
+\e$B%F%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$9!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$^\e(B
+\e$B$9!#\e(B
 
-\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
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$j$^$9!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K\e(B
+\e$B$h$C$F=PHG$5$l$^$7$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW\e(B
+\e$B$J;q6b$r=8$a$F$$$^$9!#!W\e(B
 
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
 \newpage
 \end{titlepage}
 @end iflatex
 @end iftex
 
-@ifinfo
+@ifnottex
 
 This file documents gnus, the GNU Emacs newsreader.
 
 \e$B$3$N%U%!%$%k$O\e(B GNU Emacs \e$B$N%K%e!<%9%j!<%@$G$"$k\e(B gnus \e$B$K4X$9$k@bL@=q$G$9!#\e(B
 
-Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
-
-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!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$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 also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$7$^$9!#JQ99IT2DItJ,$O;XDj$7$^$;$s!#!V\e(BA GNU Manual\e$B!W$OI=I=;f\e(B
+\e$B%F%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$9!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$^\e(B
+\e$B$9!#\e(B
 
-\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
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$j$^$9!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K\e(B
+\e$B$h$C$F=PHG$5$l$^$7$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW\e(B
+\e$B$J;q6b$r=8$a$F$$$^$9!#!W\e(B
 
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
-@end ifinfo
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
+@end ifnottex
 
 @tex
 
 @titlepage
-@title T-gnus 6.13 Manual
+@title T-gnus 6.14 Manual
 
 @author by Lars Magne Ingebrigtsen
 @author by members of Semi-gnus mailing-list
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
-
-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!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+Copyright @copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$7$^$9!#JQ99IT2DItJ,$O;XDj$7$^$;$s!#!V\e(BA GNU Manual\e$B!W$OI=I=;f\e(B
+\e$B%F%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$9!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$^\e(B
+\e$B$9!#\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.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-\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
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$j$^$9!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K\e(B
+\e$B$h$C$F=PHG$5$l$^$7$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW\e(B
+\e$B$J;q6b$r=8$a$F$$$^$9!#!W\e(B
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
 
 @end titlepage
 @page
 
 @end tex
 
-
 @node Top
 @top The gnus Newsreader
 
 @ifinfo
 
-Gnus \e$B$r;H$&$3$H$K$h$C$F\e(B Emacs \e$B$G%K%e!<%9\e(B (news) \e$B$r!J$=$l$K%a!<%k\e(B (mail)
-\e$B$b!KFI$`$3$H$,$G$-$^$9!#%K%e!<%9$O\e(B @sc{nntp}\e$B!"%m!<%+%k%9%W!<%k!"\e(Bmbox \e$B%U%!\e(B
-\e$B%$%k$J$I$N$"$i$f$k6K0-$J<jCJ$r6n;H$7$F<j$KF~$l$k$3$H$,$G$-$^$9!#1?;n$7$r\e(B
-\e$B$7$F$_$h$&$H;W$&$J$i$P!"A4$F$rF1;~$KMQ$$$k$3$H$b$G$-$^$9!#\e(B
+Gnus \e$B$r;H$&$3$H$K$h$C$F\e(B Emacs \e$B$G%K%e!<%9\e(B (news) \e$B$r\e(B (\e$B$=$l$K%a!<\e(B
+\e$B%k\e(B (mail) \e$B$b\e(B) \e$BFI$`$3$H$,$G$-$^$9!#%K%e!<%9$O\e(B @sc{nntp}\e$B!"%m!<%+%k%9%W!<%k!"\e(B
+mbox \e$B%U%!%$%k$J$I$N$"$i$f$k6K0-$J<jCJ$r6n;H$7$F<j$KF~$l$k$3$H$,$G$-$^$9!#\e(B
+\e$B1?;n$7$r$7$F$_$h$&$H;W$&$J$i$P!"A4$F$rF1;~$KMQ$$$k$3$H$b$G$-$^$9!#\e(B
 
-T-gnus \e$B$O\e(B SEMI API \e$B$K4p$E$/\e(B MIME \e$B5!G=$rDs6!$7$^$9!#$=$&$$$&Lu$G!"\e(BT-gnus
-\e$B$O!"Bg$-$J3($,F~$C$F$$$?$j$5$^$6$^$J7A<0$rMQ$$$?$j$7$F$$$k$A$g$C$HJQ$o$C\e(B
-\e$B$?5-;v$rFI$`8"Mx$rMJ8n$7$^$9!#\e(BT-gnus \e$B$O\e(B MULE API \e$B$K4p$E$/9q:]2=!&CO0h2=!"\e(B
-\e$B$*$h$S!"B?;z2=5!G=$rDs6!$7$^$9!#$h$C$F!"\e(BT-gnus \e$B$O$5$^$6$^$J8@8l7w$r:9JL\e(B
-\e$B$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation \e$B$r$*BT$A$/$@$5\e(B
-\e$B$$!#\e(B
+T-gnus \e$B$O\e(B SEMI API \e$B$K4p$E$/\e(B MIME \e$B5!G=$rDs6!$7$^$9!#$=$&$$$&Lu$G!"\e(B
+T-gnus \e$B$O!"Bg$-$J3($,F~$C$F$$$?$j$5$^$6$^$J7A<0$rMQ$$$?$j$7$F$$$k$A$g$C\e(B
+\e$B$HJQ$o$C$?5-;v$rFI$`8"Mx$rMJ8n$7$^$9!#\e(BT-gnus \e$B$O\e(B MULE API \e$B$K4p$E$/9q:]2=!&\e(B
+\e$BCO0h2=!"$*$h$S!"B?;z2=5!G=$rDs6!$7$^$9!#$h$C$F!"\e(BT-gnus \e$B$O$5$^$6$^$J8@8l\e(B
+\e$B7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation \e$B$r$*BT\e(B
+\e$B$A$/$@$5$$!#\e(B
 
-\e$B$3$N@bL@=q$O\e(B T-gnus 6.13 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B T-gnus 6.14 \e$B$KBP1~$7$^$9!#\e(B
 
 @end ifinfo
 
@@ -415,36 +439,512 @@ Gnus \e$B$O\e(B GNU Emacs \e$B$N@h?JE*$G!"@bL@$N$"$k!"%+%9%?%^%$%:2DG=$G!"3HD%2DG=$
 \e$B%j%"%k%?%$%`$G$J$$%K%e!<%9%j!<%@!<$G$9!#\e(B
 
 \e$B$*$*$C$H!#IT;W5D$J$3$H$K0JA0$K$b;w$?$h$&$J$3$H$rJ9$$$?$3$H$,$"$k$h$&$J5$\e(B
-\e$B$,$7$^$9!#??;w$r$7$?$HHsFq$5$l$J$$$&$A$K@bL@$r;O$a$^$7$g$&!'\e(B
+\e$B$,$7$^$9!#??;w$r$7$?$HHsFq$5$l$J$$$&$A$K@bL@$r;O$a$^$7$g$&\e(B:
 
 Gnus \e$B$O%a%C%;!<%8$rFI$`$3$H$K4X$9$k<B83>l$G$9!#\e(BGnus \e$B$O$9$Y$F$r%K%e!<%9%0\e(B
 \e$B%k!<%W$N$h$&$KI=<($7$^$9!#\e(BGnus \e$B$G%a!<%k$rFI$_!"%G%#%l%/%H%j!<$r%V%i%&%:\e(B
 \e$B$7!"\e(B@code{ftp} \e$B$r$9$k$3$H$,$G$-$^$9!#$"$"!"$=$l$K!"%K%e!<%9$rFI$`$3$H$5\e(B
-\e$B$($G$-$^$9!*\e(B
+\e$B$($G$-$^$9\e(B!
 
 Emacs \e$B$,J8>O$rJT=8$9$k?M$KNO$rM?$($k$h$&$K!"\e(Bgnus \e$B$O%K%e!<%9$rFI$`?M$KNO\e(B
 \e$B$rM?$($h$&$H$7$F$$$^$9!#\e(BGnus \e$B$OMxMQ<T$,<B9T2DG=$J$3$H$K@)8B$r@_$1$^$;$s!#\e(B
 \e$BMxMQ<T$,<+J,$GK>$`F0:n$r$9$k$h$&$K\e(B gnus \e$B$r3HD%$9$k$3$H$r>)Ne$7$F$$$^$9!#\e(B
-\e$B%W%m%0%i%`$,?M$rA`:n$9$k$Y$-$G$O$"$j$^$;$s!#?M$,%W%m%0%i%`$r;H$&!J$b$7$/\e(B
-\e$B$OMtMQ$9$k!K$3$H$K$h$C$F!"$d$j$?$$$3$H$r$G$-$k$h$&$K$J$C$F$$$k$Y$-$J$N$G\e(B
+\e$B%W%m%0%i%`$,?M$rA`:n$9$k$Y$-$G$O$"$j$^$;$s!#?M$,%W%m%0%i%`$r;H$&\e(B (\e$B$b$7$/\e(B
+\e$B$OMtMQ$9$k\e(B) \e$B$3$H$K$h$C$F!"$d$j$?$$$3$H$r$G$-$k$h$&$K$J$C$F$$$k$Y$-$J$N$G\e(B
 \e$B$9!#\e(B
 
 @end iftex
 
-
 @menu
-* Starting Up::           \e$B%K%e!<%9$r8+$D$1$k$N$K$O6lO+$,H<$&$+$bCN$l$J$$\e(B
-* The Group Buffer::      \e$B%0%k!<%W$rA*Br$7!"9XFI$7!":o=|$9$k\e(B
-* The Summary Buffer::    \e$B5-;v$rFI$_!"J]B8$7!"Ej9F$9$k\e(B
-* The Article Buffer::    \e$B5-;v$rI=<($7!"07$&\e(B
-* Composing Messages::    \e$B%a!<%k$H%K%e!<%9$rAw$k$?$a$N>pJs\e(B
-* Select Methods::        Gnus \e$B$OA4$F$N%a%C%;!<%8$r$$$m$$$m$JA*BrJ}K!$GFI$`\e(B
-* Scoring::               \e$B5-;v$KCM$r$D$1$k\e(B
-* Various::               \e$B0lHLE*$J@_Dj\e(B
-* The End::               \e$B$5$i$P!"$=$7$F$5$h$&$J$i\e(B
-* Appendices::            \e$BMQ8l!"\e(BEmacs \e$BF~Lg!"\e(BFAQ\e$B!"Nr;K!"FbIt9=B$\e(B
-* Index::                 \e$BJQ?t!"4X?t!"35G0$N:w0z\e(B
-* Key Index::             \e$B%-!<:w0z\e(B
+* Starting Up::        \e$B%K%e!<%9$r8+$D$1$k$N$K$O6lO+$,H<$&$+$bCN$l$J$$\e(B
+* The Group Buffer::   \e$B%0%k!<%W$rA*Br$7!"9XFI$7!":o=|$9$k\e(B
+* The Summary Buffer:: \e$B5-;v$rFI$_!"J]B8$7!"Ej9F$9$k\e(B
+* The Article Buffer:: \e$B5-;v$rI=<($7!"07$&\e(B
+* Composing Messages:: \e$B%a!<%k$H%K%e!<%9$rAw$k$?$a$N>pJs\e(B
+* Select Methods::     Gnus \e$B$OA4$F$N%a%C%;!<%8$r$$$m$$$m$JA*BrJ}K!$GFI$`\e(B
+* Scoring::            \e$B5-;v$KCM$r$D$1$k\e(B
+* Various::            \e$B0lHLE*$J@_Dj\e(B
+* The End::            \e$B$5$i$P!"$=$7$F$5$h$&$J$i\e(B
+* Appendices::         \e$BMQ8l!"\e(BEmacs \e$BF~Lg!"\e(BFAQ\e$B!"Nr;K!"FbIt9=B$\e(B
+* Index::              \e$BJQ?t!"4X?t!"35G0$N:w0z\e(B
+* Key Index::          \e$B%-!<:w0z\e(B
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Starting Gnus
+
+* Finding the News::   \e$B%K%e!<%9$r<hF@$9$kJ}K!$rA*$V\e(B
+* The First Time::     \e$B:G=i$K5/F0$7$?$H$-$K\e(B gnus \e$B$O2?$r$9$k$+\e(B
+* The Server is Down:: \e$B$I$&$9$l$P$=$N$h$&$J$H$-$K%a!<%k$r<j$KF~$l$k$3$H\e(B
+                       \e$B$,$G$-$k$+\e(B
+* Slave Gnusae::       \e$BF1;~$K0l$D0J>e$N\e(B gnus \e$B$r:nF0$5$;$k$3$H$,$G$-$k\e(B
+* Fetching a Group::   \e$B%0%k!<%W$rFI$`$?$a$@$1$K\e(B gnus \e$B$r5/F0$9$k\e(B
+* New Groups::         Gnus \e$B$,?7$7$$%0%k!<%W$KBP$7$F2?$r$9$k$+\e(B
+* Startup Files::      \e$B$d$C$+$$$J%9%?!<%H%"%C%W%U%!%$%k\e(B--@file{.newsrc}
+* Auto Save::          \e$B%/%i%C%7%e$+$i$N2sI|\e(B
+* The Active File::    \e$BCY$$2s@~$+$i$N%U%!%$%k$N<hF@$K$O;~4V$,$+$+$k\e(B
+* Changing Servers::   \e$B$"$k%5!<%P$+$iJL$N%5!<%P$X0\$j$?$$$+$b$7$l$J$$\e(B
+* Startup Variables::  \e$BJQ99$7$?$$$H;W$&$+$b$7$l$J$$JQ?t\e(B
+
+New Groups
+
+* Checking New Groups::  \e$B$I$N%0%k!<%W$,?7$7$$$+$r7hDj$9$k\e(B
+* Subscription Methods:: \e$B?7$7$$%0%k!<%W$KBP$7$F\e(B gnus \e$B$O2?$r$9$Y$-$+\e(B
+* Filtering New Groups:: Gnus \e$B$KFCDj$N?7$7$$%0%k!<%W$rL5;k$5$;$k\e(B
+
+The Group Buffer
+
+* Group Buffer Format::   \e$BI=<($5$l$F$$$k>pJs$HJQ99$NJ}K!\e(B
+* Group Maneuvering::     \e$B%0%k!<%W%P%C%U%!$r0\F0$9$k%3%^%s%I\e(B
+* Selecting a Group::     \e$B<B:]$K%K%e!<%9$rFI$`\e(B
+* Group Data::            \e$B%0%k!<%W$N>pJs$rJQ99$9$k\e(B
+* Subscription Commands:: \e$B9XFI!"9XFICf;_!">C5n\e(B
+* Group Levels::          \e$B%l%Y%k\e(B? \e$B$=$l$C$F2?\e(B?
+* Group Score::           \e$B$"$J$?$N9%$-$J%0%k!<%W$r8+$D$1=P$9J}K!\e(B
+* Marking Groups::        \e$B%0%k!<%W$K0u$r$D$1$F$*$$$F!"8e$G=hM}$G$-$^$9\e(B
+* Foreign Groups::        \e$B%0%k!<%W$N:n@.$H=$@5\e(B
+* Group Parameters::      \e$B%0%k!<%WKh$K0c$C$?%Q%i%a!<%?$r;}$?$;$i$l$^$9\e(B
+* Listing Groups::        Gnus \e$B$O%0%k!<%W$r$$$m$$$m$JJ,$1J}$GI=<($G$-$^$9\e(B
+* Sorting Groups::        \e$B%0%k!<%W$N=gHV$NG[CVBX$(\e(B
+* Group Maintenance::     \e$B$-$l$$$J\e(B @file{.newsrc} \e$B$NJ]$AJ}\e(B
+* Browse Foreign Server:: \e$B%5!<%P$r354Q$G$-$k!#2?$,FI$a$k$N$+8+$F$_$h$&\e(B
+* Exiting Gnus::          \e$B%K%e!<%9FI$`$N$r$d$a$F!";E;v$r$7$h$&\e(B
+* Group Topics::          \e$B%0%k!<%W$r@Z$j:.$<$F!"%H%T%C%/$4$H$KJ,3d$9$k\e(B
+* Misc Group Stuff::      \e$BB>$K$G$-$k$3$H\e(B
+
+Group Buffer Format
+
+* Group Line Specification::     \e$B%0%k!<%W%P%C%U%!$N8+$(J}$r7h$a$k\e(B
+* Group Modeline Specification:: \e$B%0%k!<%W%P%C%U%!$N%b!<%I9T\e(B
+* Group Highlighting::           \e$B%0%k!<%W%P%C%U%!$K$-$l$$$K?'$r$D$1$k\e(B
+
+Group Topics
+
+* Topic Variables::  Lisp \e$B$G%H%T%C%/$r%+%9%?%^%$%:$9$kJ}K!\e(B
+* Topic Commands::   \e$BD64JC1BPOC7?L?Na\e(B
+* Topic Sorting::    \e$B%H%T%C%/KhJL!9$KJB$YBX$($k\e(B
+* Topic Topology::   \e$BA4@$3&$NCO?^\e(B
+* Topic Parameters:: \e$B$"$k%H%T%C%/$NA4$F$N%0%k!<%W$KE,MQ$5$l$k%Q%i%a!<%?\e(B
+
+Misc Group Stuff
+
+* Scanning New Messages:: Gnus \e$B$K?7$7$$%a%C%;!<%8$,E~Ce$7$?$+$I$&$+$rJ9$/\e(B
+* Group Information::     \e$B%0%k!<%W$H\e(B gnus \e$B$K4X$9$k>pJs$H%X%k%W\e(B
+* Group Timestamp::       Gnus \e$B$K:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k\e(B
+* File Commands::         Gnus \e$B$N%U%!%$%k$NFI$_=q$-\e(B
+
+The Summary Buffer
+
+* Summary Buffer Format::      \e$B35N,%P%C%U%!$N304Q$r7hDj$9$k\e(B
+* Summary Maneuvering::        \e$B35N,%P%C%U%!$rF0$-2s$k\e(B
+* Choosing Articles::          \e$B5-;v$rFI$`\e(B
+* Paging the Article::         \e$BFI$s$G$$$k5-;v$r%9%/%m!<%k$9$k\e(B
+* Reply Followup and Post::    \e$B5-;v$rEj9F$9$k\e(B
+* Marking Articles::           \e$B5-;v$K4{FI$d4|8B@Z$l:o=|2DG=Ey$N0u$rIU$1$k\e(B
+* Limiting::                   \e$B35N,%P%C%U%!$K@)8B$r2C$($k$3$H$,$G$-$k\e(B
+* Threading::                  \e$B%9%l%C%I$,$I$N$h$&$K:n$i$l$k$+\e(B
+* Sorting::                    \e$B%9%l%C%I$H5-;v$,$I$N$h$&$KJB$S$+$($i$l$k$+\e(B
+* Asynchronous Fetching::      Gnus \e$B$O5-;v$r@h$K<hF@$9$k$3$H$,$G$-$k\e(B
+* Article Caching::            \e$B%-%c%C%7%e$K5-;v$rCy$a$F$*$1$k\e(B
+* Persistent Articles::        \e$B5-;v$r4|8B@Z$l>C5n$7$J$/$5$;$k\e(B
+* Article Backlog::            \e$B4{$KFI$s$@5-;v$r;D$7$F$*$/\e(B
+* Saving Articles::            \e$B5-;v$NJ]B8$r%+%9%?%^%$%:$9$kJ}K!\e(B
+* Decoding Articles::          Gnus \e$B$O0lO"$N\e(B (uu)encode \e$B$5$l$?5-;v$r07$($k\e(B
+* Article Treatment::          \e$B5-;v%P%C%U%!$O$*K>$_$I$*$j$KL\Cc6lCc$K$G$-$k\e(B
+@c * MIME Commands::              Doing MIMEy things with the articles.
+@c * Charsets::                   Character set issues.
+* Article Commands::           \e$B5-;v%P%C%U%!$G$$$m$$$m$J$3$H$r$9$k\e(B
+* Summary Sorting::            \e$B$$$m$$$m$JJ}K!$G35N,%P%C%U%!$rJB$YBX$($k\e(B
+* Finding the Parent::         \e$B;R5-;v$K1g=u$,L5$$$C$F\e(B? \e$B?F5-;v$r<hF@$7$J$5$$\e(B
+* Alternative Approaches::     \e$B=i4|@_Dj$G$J$$35N,$r;H$C$FFI$`\e(B
+* Tree Display::               \e$B$b$C$H;k3PE*$J%9%l%C%I$NI=<(\e(B
+* Mail Group Commands::        \e$B$$$/$D$+$NL?Na$O%a!<%k%0%k!<%W$@$1$G;H$&\e(B
+                               \e$B$3$H$,$G$-$k\e(B
+* Various Summary Stuff::      \e$BB>$N$I$N>l=j$K$b9g$o$J$+$C$?$b$N\e(B
+* Exiting the Summary Buffer:: \e$B%0%k!<%W%P%C%U%!$KLa$k\e(B
+* Crosspost Handling::         \e$B%/%m%9%]%9%H$5$l$?5-;v$,$I$N$h$&$K07$o$l$k$+\e(B
+* Duplicate Suppression::      \e$B%/%m%9%]%9%H$N07$$$K<:GT$7$?$H$-$NBeBX<jCJ\e(B
+
+Summary Buffer Format
+
+* Summary Buffer Lines::     \e$B35N,%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$G$-$k\e(B
+* To From Newsgroups::       \e$B<+J,<+?H$NL>A0$rI=<($7$J$$J}K!\e(B
+* Summary Buffer Mode Line:: \e$B%b!<%I9T$N8+$(J}$r7h$a$i$l$k\e(B
+* Summary Highlighting::     \e$B35N,%P%C%U%!$r$-$l$$$GAGE($K$9$k\e(B
+
+Choosing Articles
+
+* Choosing Commands::  \e$B5-;v$rA*Br$9$k$?$a$NL?Na\e(B
+* Choosing Variables:: \e$B$3$l$i$NL?Na$K1F6A$r5Z$\$9JQ?t\e(B
+
+Reply, Followup and Post
+
+* Summary Mail Commands::     \e$B%a!<%k$rAw$k\e(B
+* Summary Post Commands::     \e$B%K%e!<%9$rAw$k\e(B
+* Summary Message Commands::  \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
+* Canceling and Superseding:: \e$B!X$"$!!"$"$s$J$U$&$K8@$&$s$8$c$J$+$C$?!Y\e(B
+
+Marking Articles
+
+* Unread Articles:: \e$BL$FI5-;v$X$N0u\e(B
+* Read Articles::   \e$B4{FI5-;v$X$N0u\e(B
+* Other Marks::     \e$B9XFIEY$K1F6A$7$J$$0u\e(B
+* Setting Marks::         \e$B0u$NIU$1J}$H>C$7J}\e(B
+* Generic Mark Commands:: \e$B0u$r$I$N$h$&$K%+%9%?%^%$%:$9$k$+\e(B
+* Setting Process Marks:: \e$B8e$N<B9T$N$?$a$N5-;v$N0u$NIU$1J}\e(B
+
+Threading
+
+* Customizing Threading:: \e$BJQ992DG=$J%9%l%C%I$K1F6A$9$kJQ?t\e(B
+* Thread Commands::       \e$B35N,%P%C%U%!$G$N%9%l%C%I$K4p$E$$$?L?Na\e(B
+
+Customizing Threading
+
+* Loose Threads::       Gnus \e$B$,L5B+G{%9%l%C%I$r=8$a$FBg$-$J%9%l%C%I$K$9$kJ}K!\e(B
+* Filling In Threads::  \e$B%9%l%C%I$rKd$a$k\e(B
+* More Threading::      \e$B%9%l%C%I$r$$$8$/$k$5$i$KB?$/$NJQ?t\e(B
+* Low-Level Threading:: \e$B$3$l$G=*$o$C$?$H;W$C$?$G$7$g$&\e(B... \e$B$G$b$"$J$?$O4V\e(B
+                        \e$B0c$C$F$$$?\e(B!
+
+Decoding Articles
+
+* Uuencoded Articles:: \e$B5-;v$r\e(B uuencode \e$B$9$k\e(B
+* Shell Archives::     shar \e$B5-;v$r2rE`$9$k\e(B
+* PostScript Files::   \e$B%]%9%H%9%/%j%W%H$rJ,3d$9$k\e(B
+* Other Files::        \e$BIaDL$NJ]B8$H\e(B binhex.
+* Decoding Variables:: \e$B9,$;$JI|9f2=$N$?$a$NJQ?t\e(B
+* Viewing Files::      \e$BI|9f2=$N7k2L$r8+$?$$\e(B?
+
+Decoding Variables
+
+* Rule Variables::         \e$B%U%!%$%k$,$I$N$h$&$KI=<($5$l$k$+$r7h$a$kJQ?t\e(B
+* Other Decode Variables:: \e$BB>$NI|9f2=$NJQ?t\e(B
+* Uuencoding and Posting:: uuencode \e$B$9$k$N$r%+%9%?%^%$%:$9$kJQ?t\e(B
+
+Article Treatment
+
+* Article Highlighting:: \e$B5-;v$r2LJ*%5%i%@$N$h$&$K8+$($k$h$&$K$7$?$$\e(B
+* Article Fontisizing::  \e$B6/D4$5$l$?J8$rAGE($K$9$k\e(B
+* Article Hiding::       \e$BFCDj$N>pJs$O>C$75n$j$?$$$H$b;W$&\e(B
+* Article Washing::      \e$B?M@8$r$b$C$H$h$/$9$k$?$/$5$s$N5$$NMx$$$?4X?t\e(B
+* Article Buttons::      URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C%/$9$k\e(B
+* Article Date::         \e$B$0$:$0$:8@$&$J!"@$3&;~$@\e(B!
+* Article Signature::    \e$B=pL>$C$F2?\e(B?
+* Article Miscellanina:: \e$BB>$N$$$m$$$m$J$b$N\e(B
+
+Alternative Approaches
+
+* Pick and Read:: \e$B$^$:!"5-;v$K0u$rIU$1$F!"$=$l$+$iFI$`\e(B
+* Binary Groups:: \e$B$9$Y$F$N5-;v$r<+F0\e(B-\e$BI|9f2=$9$k\e(B
+
+Various Summary Stuff
+
+* Summary Group Information::       \e$B>pJs;X8~$NL?Na\e(B
+* Searching for Articles::          \e$BJ#?t5-;vL?Na\e(B
+* Summary Generation Commands::     \e$B35N,%P%C%U%!$N\e(B (\e$B:F\e(B) \e$B:n@.\e(B
+* Really Various Summary Commands:: \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
+
+The Article Buffer
+
+* Hiding Headers::       \e$B$I$N%X%C%@!<$rI=<($9$k$+$r7h$a$k\e(B
+* Using MIME::           @sc{mime} \e$B5-;v$H$7$F8+$;$k\e(B
+* Customizing Articles:: \e$B5-;v$N8+1I$($r;EN)$F$k\e(B
+* Article Keymap::       \e$B5-;v%P%C%U%!$G;H$($k%-!<A`:n\e(B
+* Misc Article::         \e$B$=$NB>\e(B
+
+Composing Messages
+
+* Mail::              \e$B%a!<%k$HJVEz\e(B
+* Post::              \e$BEj9F$H%U%)%m!<%"%C%W\e(B
+* Posting Server::    \e$B$I$N%5!<%P!<$rDL$7$FEj9F$9$k$Y$-$+\e(B?
+* Mail and Post::     \e$BF1;~$K%a!<%k$r=P$7JVEz$9$k\e(B
+* Archived Messages:: \e$BAw$C$?%a%C%;!<%8$r\e(B gnus \e$B$,Cy$a$F$*$/$H$3$m\e(B
+* Posting Styles::    \e$B$"$J$?$,C/$G$"$k$+$r;XDj$9$k$h$j4JC1$JJ}K!\e(B
+* Drafts::            \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8\e(B
+* Rejected Articles:: \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K2?$,5/$3$k\e(B?
+@c * Using GPG::         How to use GPG and MML to sign and encrypt messages
+
+Select Methods
+
+* The Server Buffer:: \e$B;v<B>e$N%5!<%P!<$r:n$C$FJT=8$9$k\e(B
+* Getting News::      USENET \e$B%K%e!<%9$r\e(B gnus \e$B$GFI$`\e(B
+* Getting Mail::      \e$B8D?ME*$J%a!<%k$r\e(B gnus \e$B$GFI$`\e(B
+* Browsing the Web::  \e$B2a>j$J%&%'%V$N;q8;$+$i%a%C%;!<%8$r<hF@$9$k\e(B
+* Other Sources::     \e$B%G%#%l%/%H%j!<!"%U%!%$%k!"\e(BSOUP \e$B%Q%1%C%H$rFI$`\e(B
+* Combined Groups::   \e$BJ#?t$N%0%k!<%W$r0l$D$N%0%k!<%W$K7k9g$9$k\e(B
+* Gnus Unplugged::    \e$B%K%e!<%9$H%a!<%k$r%*%U%i%$%s$GFI$`\e(B
+
+The Server Buffer
+
+* Server Buffer Format::      \e$B$3$N%P%C%U%!$N308+$r%+%9%?%^%$%:$G$-$k\e(B
+* Server Commands::           \e$B%5!<%P!<$rA`$kL?Na\e(B
+* Example Methods::           \e$B%5!<%P!<;XDj$NNc\e(B
+* Creating a Virtual Server:: \e$B%;%C%7%g%s$NNc\e(B
+* Server Variables::          \e$B$I$NJQ?t$r@_Dj$9$k$+\e(B
+* Servers and Methods::       \e$B%5!<%P!<L>$rA*BrJ}K!$H$7$F;H$&;v$,$G$-$k\e(B
+* Unavailable Servers::       \e$B@\B3$7$h$&$H;n$_$?%5!<%P!<$N$$$/$D$+$,Mn$A\e(B
+                              \e$B$F$$$k$+$b$7$l$J$$\e(B
+
+Getting News
+
+* NNTP::       @sc{nntp} \e$B%5!<%P!<$+$i%K%e!<%9$rFI$`\e(B
+* News Spool:: \e$B%m!<%+%k%9%W!<%k$+$i%K%e!<%9$rFI$`\e(B
+
+Getting Mail
+
+* Mail in a Newsreader::         \e$B%K%e!<%9%j!<%@$G%a!<%k\e(B (\e$BBg;v$JA0CV$-\e(B)
+* Getting Started Reading Mail:: \e$B4JC1$JNAM}K\$N$h$&$JNc\e(B
+* Splitting Mail::               \e$B$I$N$h$&$K%a!<%k%0%k!<%W$r:n@.$9$k$+\e(B
+* Mail Sources::                 Gnus \e$B$K$I$3$+$i%a!<%k$r<h$C$F$/$k$+$rCN\e(B
+                                 \e$B$i$;$k\e(B
+* Mail Backend Variables::       \e$B%a!<%k$N07$$$r%+%9%?%^%$%:$9$k$?$a$NJQ?t\e(B
+* Fancy Mail Splitting::         Gnus \e$B$OF~$C$FMh$?%a!<%k$NLS$N$h$&$JJ,N%\e(B
+                                 \e$B$r$9$k$3$H$,$G$-$k\e(B
+* Group Mail Splitting::         \e$B%a!<%kJ,3d$r6nF0$9$k$?$a$K%0%k!<%W\e(B
+                                   \e$B%+%9%?%^%$%:$r;H$&!#\e(B
+* Incorporating Old Mail::       \e$B$"$J$?$,;}$C$F$$$k8E$$%a!<%k$r$I$&$9$k$+\e(B?
+* Expiring Mail::                \e$BM_$7$/$J$$%a!<%k$r<h$j=|$/\e(B
+* Washing Mail::                 \e$B<hF@$7$?%a!<%k$+$i7y$J$b$N$r<h$j=|$/\e(B
+* Duplicates::                   \e$B=EJ#$7$?%a!<%k$r07$&\e(B
+* Not Reading Mail::             \e$BB>$N%U%!%$%k$rFI$`$?$a$K%a!<%k%P%C%/%(\e(B
+                                 \e$B%s%I$r;H$&\e(B
+* Choosing a Mail Backend::      Gnus \e$B$O?'!9$J%a!<%kMM<0$rFI$`;v$,$G$-$k\e(B
+
+Mail Sources
+
+* Mail Source Specifiers::    \e$B%a!<%k$N85$,$I$3$+$r;XDj$9$k\e(B
+* Mail Source Customization:: \e$B@$$NCf$K1F6A$9$k$$$/$D$+$NJQ?t\e(B
+* Fetching Mail::             \e$B%a!<%k%=!<%9;X<(;R$r;HMQ$9$k\e(B
+
+Choosing a Mail Backend
+
+* Unix Mail Box::           (\e$B$H$F$b\e(B) \e$BI8=`E*$J\e(B Un*x mbox \e$B$r;H$&\e(B
+* Rmail Babyl::             Emacs \e$B$N%W%m%0%i%`$O\e(B rmail \e$B$N\e(B babyl format \e$B$r;H$&\e(B
+* Mail Spool::              \e$B$"$J$?$N%a!<%k$r;dE*$J%9%W!<%k$KN/$a$k\e(B?
+* MH Spool::                mhspool \e$B$N$h$&$J%P%C%/%(%s%I\e(B
+* Mail Folders::            \e$B$=$l$>$l$N%0%k!<%W$KBP$7$F0l$D$N%U%!%$%k$r;}$D\e(B
+* Comparing Mail Backends:: \e$BF@<:$N?<$$F6;!\e(B
+
+Browsing the Web
+
+* Web Searches::   \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
+* Slashdot::       Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
+* Ultimate::       Ultimate Bulletin Board \e$B%7%9%F%`\e(B
+* Web Archive::    \e$B%&%'%V$KJ]4I$5$l$?%a!<%j%s%0%j%9%H$rFI$`\e(B
+* Web Newspaper::  \e$B%&%'%V$KJ]4I$5$l$??7J9$rFI$`\e(B
+* Customizing w3:: Gnus \e$B$+$i\e(B Emacs/w3 \e$B$rA`:n$9$k\e(B
+
+Other Sources
+
+* Directory Groups::      \e$B%G%#%l%/%H%j!<$r%K%e!<%9%0%k!<%W$N$h$&$KFI$`\e(B
+* Anything Groups::       Dired?  \e$BC/$,\e(B dired \e$B$J$s$F;H$&$N\e(B?
+* Document Groups::       \e$B8DJL$N%U%!%$%k72$O%0%k!<%W$NAG\e(B
+* SOUP::                  @sc{soup} \e$B%Q%1%C%H$r\e(B ``\e$B%*%U%i%$%s\e(B''\e$B$GFI$`\e(B
+* Mail-To-News Gateways:: \e$B%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$$rDL$7$F5-;v\e(B
+                          \e$B$rEj9F$9$k\e(B
+* IMAP::                  Gnus \e$B$r\e(B IMAP \e$B$N%/%i%$%"%s%H$H$7$F;H$&\e(B
+
+Document Groups
+
+* Document Server Internals:: \e$B$"$J$?FH<+$NJ8=q<oJL$rDI2C$9$kJ}K!\e(B
+
+SOUP
+
+* SOUP Commands:: @sc{soup} \e$B%Q%1%C%H$r:n@.!"Aw=P$9$kL?Na\e(B
+* SOUP Groups::   @sc{soup} \e$B%Q%1%C%H$rFI$`%P%C%/%(%s%I\e(B
+* SOUP Replies::  @code{nnsoup} \e$B$K%a!<%k$H%K%e!<%9$r0z$-7Q$,$;$kJ}K!\e(B
+
+IMAP
+
+* Splitting in IMAP::   nnimap \e$B$G%a!<%k$rJ,3d$9$k\e(B
+* Editing IMAP ACLs::   \e$B%a!<%k%\%C%/%9$X$NB>$NMxMQ<T$N;HMQ$r@)8B\e(B/\e$B5v2D$9$k\e(B
+* Expunging mailboxes:: "\e$B%a!<%k%\%C%/%905=L\e(B" \e$B%\%?%s$HEy2A$J$b$N\e(B
+
+Combined Groups
+
+* Virtual Groups:: \e$B$?$/$5$s$N%0%k!<%W$N5-;v$r7k9g$9$k\e(B
+* Kibozed Groups:: \e$B%K%e!<%9%9%W!<%k$NCf$+$i$N5-;v$r8!:w$9$k\e(B
+
+Gnus Unplugged
+
+* Agent Basics::      \e$B$3$l$i$O$I$&F0$/$N$+\e(B
+* Agent Categories::  \e$B2?$r%@%&%s%m!<%I$9$k$+$r\e(B gnus \e$B%(!<%8%'%s%H$K65$($kJ}K!\e(B
+* Agent Commands::    \e$B3F%P%C%U%!!<$G$N?7$7$$L?Na\e(B
+* Agent Expiry::      \e$B8E$$5-;v$r>C$9J}K!\e(B
+* Agent and IMAP::    \e$B%(!<%8%'%s%H$r\e(B IMAP \e$B$G;H$&J}K!\e(B
+* Outgoing Messages:: \e$BEj9F!"%a!<%k$r=P$9$H$-$K$J$K$,5/$3$k$N$+\e(B?
+* Agent Variables::   \e$B%+%9%?%^%$%:$O3Z$7\e(B
+* Example Setup::     \e$B%*%U%i%$%s?M4V$N$?$a$N\e(B @file{.gnus.el} \e$B$NNc\e(B
+* Batching Agents::   @code{cron} \e$B%8%g%V$K$h$k%K%e!<%9<hF@J}K!\e(B
+* Agent Caveats::     \e$B$"$J$?$,M=A[$9$k$3$H$H!"$=$l$,<B:]$K$9$k$3$H\e(B
+* Control Agents::    Offline \e$B$r%3%s%H%m!<%k$9$k\e(B gnus-offline
+
+Agent Categories
+
+* Category Syntax::     \e$BJ,N`$H$O$I$s$J$b$N$+\e(B
+* The Category Buffer:: \e$BJ,N`$r4IM}$9$k%P%C%U%!!<\e(B
+* Category Variables::  \e$B%+%9%?%^%$%6\e(B"\e$B$i\e(B"\e$B%9\e(B
+
+Agent Commands
+
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
+
+Scoring
+
+* Summary Score Commands:: \e$B8=:_$N%0%k!<%W$N$?$a$N%9%3%"EPO?$rDI2C$9$k\e(B
+* Group Score Commands::   \e$B0lHLE*$J%9%3%"L?Na\e(B
+* Score Variables::        \e$B$"$J$?$N%9%3%"$r%+%9%?%^%$%:$9$k\e(B
+                           (\e$B$^$!!"$J$s$FMQ8l$G$7$g$&\e(B)
+* Score File Format::      \e$B%9%3%"%U%!%$%k$K2?$rF~$l$k$+\e(B
+* Score File Editing::     \e$B<j$G%9%3%"%U%!%$%k$rJT=8$9$k;v$b$G$-$k\e(B
+* Adaptive Scoring::       \e$BBg;P\e(B gnus \e$B$O$"$J$?$,2?$rFI$s$@$+CN$C$F$$$k\e(B
+* Home Score File::        \e$B?7$7$$%9%3%"EPO?$,$I$3$X9T$/$+$r$I$N$h$&$K;X\e(B
+                           \e$BDj$9$k$+\e(B
+* Followups To Yourself::  \e$B?M$,$"$J$?$KJVEz$7$?$H$-$K\e(B gnus \e$B$K5$IU$+$;$k\e(B
+* Scoring Tips::           \e$B$I$&$d$C$F8z2LE*$K%9%3%"$rIU$1$k$+\e(B
+* Reverse Scoring::        \e$B8E$$$b$N$N;R$G$"$k$H$$$&LdBj$OLdBj$G$O$J$$\e(B
+* Global Score Files::     \e$BCO$r$D$+$_!"<*$r@Z$jNv$/%9%3%"%U%!%$%k\e(B
+* Kill Files::             \e$B$=$l$i$O$^$@$3$3$K$"$j$^$9$,!"L5;k$9$k;v$,$G$-$k\e(B
+* Converting Kill Files::  \e$B>C5n%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k\e(B
+* GroupLens::              \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k\e(B
+* Advanced Scoring::       \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&\e(B
+* Score Decays::           \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k\e(B
+
+GroupLens
+
+* Using GroupLens::        \e$B$I$N$h$&$K\e(B gnus \e$B$K\e(B GroupLens \e$B$r;H$o$;$k$h$&$K\e(B
+                           \e$B$9$k$+\e(B
+* Rating Articles::        GropLens \e$B$K$"$J$?$,$I$N$h$&$KCM$rIU$1$k$+$rCN\e(B
+                           \e$B$i$;$k\e(B
+* Displaying Predictions:: GropuLens \e$B$K$h$C$FM?$($i$l$?M=8@$rI=<($9$k\e(B
+* GroupLens Variables::    GoupLens \e$B$r%+%9%?%^%$%:$9$k\e(B
+
+Advanced Scoring
+
+* Advanced Scoring Syntax::   \e$BDj5A\e(B
+* Advanced Scoring Examples:: \e$B$I$N$h$&$K8+$($k$+\e(B
+* Advanced Scoring Tips::     \e$B$=$l$r:GBg8BMxMQ$9$k\e(B
+
+Various
+
+* Process/Prefix::         \e$BB?$/$N07$$L?Na$G;H$o$l$k=,47\e(B
+* Interactive::            Gnus \e$B$KB?$/$N<ALd$r?R$M$5$;$k\e(B
+* Symbolic Prefixes::      \e$B$$$/$D$+$N\e(B gnus \e$B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!\e(B
+* Formatting Variables::   \e$B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v\e(B
+                           \e$B$,$G$-$k\e(B
+* Windows Configuration::  Gnus \e$B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k\e(B
+* Faces and Fonts::        \e$B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k\e(B
+* Compilation::            \e$B$I$N$h$&$K$7$F\e(B gnus \e$B$NB.EY$r>e$2$k$+\e(B
+* Mode Lines::             \e$B%b!<%I9T$K>pJs$rI=<($9$k\e(B
+* Highlighting and Menus:: \e$B%P%C%U%!$rAGE($G?4CO$h$/8+$;$k\e(B
+* Buttons::                \e$B4JC1$J==Jb$G%"%-%l%9g'$rF@$k\e(B
+* Daemons::                Gnus \e$B$O$"$J$?$NN"$GJ*;v$r<B9T$9$k;v$,$G$-$k\e(B
+* NoCeM::                  Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
+* Undo::                   \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
+* Moderation::             \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
+* XEmacs Enhancements::    XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_$9$k\e(B
+* Fuzzy Matching::         \e$BBg$-$JLJLS$C$F2?\e(B?
+* Thwarting Email Spam::   \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!\e(B
+* Various Various::        \e$BK\Ev$K$$$m$$$m$J$b$N\e(B
+
+Formatting Variables
+
+* Formatting Basics::    \e$B=qK!;EMMJQ?t$O4pK\E*$K=qK!;XDjJ8;zNs$G$"$k\e(B
+* Mode Line Formatting:: \e$B%b!<%I9T$N=qK!;EMMJQ?t$K4X$9$k$$$/$D$+$N5,B'\e(B
+* Advanced Formatting::  \e$B?'!9$JJ}K!$G=PNO$r=$@5$9$k\e(B
+* User-Defined Specs::   Gnus \e$B$K$"$J$?<+?H$N4X?t$r8F$P$;$k\e(B
+* Formatting Fonts::     \e$B;EMM$rB?:L$GAGE($K8+$;$k\e(B
+
+XEmacs Enhancements
+
+* Picons::   \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
+* Smileys::  \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!\e(B
+* Toolbar::  \e$B%/%j%C%/1n\e(B
+* XVarious:: \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
+
+Picons
+
+* Picon Basics::                picon \e$B$H$O2?$G!"$I$&$d$C$F<j$KF~$l$k$N$+\e(B
+* Picon Requirements::          XEmacs \e$B$r;H$C$F$J$1$l$P$3$3$+$i$OFI$^$J$$$G\e(B
+* Easy Picons::                 picon \e$B$NI=<(\e(B --- \e$B3Z$JJ}K!\e(B
+* Hard Picons::                 \e$BK\Mh$9$Y$-$3$H!#2?$+$r3X$V$3$H$,$G$-$k$@$m$&\e(B
+* Picon Useless Configuration:: \e$B$=$NB>$N$V$C2u$7$?$j$R$M$C$?$j$$$8$C$?$j\e(B
+                                \e$BM7$s$@$j$9$kJQ?t\e(B
+
+Appendices
+
+* History::                    \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+\e(B
+* On Writing Manuals::         \e$B$J$<$3$l$,=i?4<TMQ$N0FFb$G$J$$$+\e(B
+* Terminology::                \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&\e(B
+* Customization::              \e$B$"$J$?$NMW5a$K1h$C$F\e(B gnus \e$B$r;EN)$F$k\e(B
+* Troubleshooting::            \e$B>e<j$/9T$+$J$+$C$?$H$-$K;n$9$+$b$7$l$J$$;v\e(B
+* Gnus Reference Guide::       \e$B?'!9$J5;=QE*$J$b$N\e(B
+* Emacs for Heathens::         Emacs \e$B$NMQ8l$N<jC;$JF3F~\e(B
+* Frequently Asked Questions:: \e$B<ALd$HEz\e(B
+
+History
+
+* Gnus Versions::       What Gnus versions have been released.
+* Other Gnus Versions:: Other Gnus versions that also have been released.
+* Why?::                Gnus \e$B$NL\E*$O2?\e(B?
+* Compatibility::       Gnus \e$B$O\e(B @sc{gnus} \e$B$H$I$l$/$i$$8_49@-$,$"$k$N\e(B?
+* Conformity::          Gnus \e$B$OA4$F$NI8=`$rK~$?$=$&$H$9$k\e(B
+* Emacsen::             Gnus \e$B$O$$$/$D$+$N8=BeE*$J\e(B Emacs \e$B4D6-$G<B9T$G$-$k\e(B
+* Gnus Development::    Gnus \e$B$,3+H/$5$l$F$$$kJ}K!\e(B
+* Contributors::        \e$BBgNL$N?M!9\e(B
+* New Features::        Gnus \e$B$N?7$7$$;v$K4X$9$k<j$,$+$j\e(B
+* Newest Features::     \e$B$"$^$j$K$b?7$7$$$?$a$K$^$@=q$+$l$F$$$J$$$b$N\e(B
+
+New Features
+
+* ding Gnus::      \e$B:G=i$N?7$7$$\e(B Gnus \e$B$G$"$k\e(B Gnus 5.0/5.1 \e$B$N?7$7$$;v\e(B
+* September Gnus:: \e$B8x<0$K\e(B GNus 5.2/5.3 \e$B$H$7$FCN$i$l$F$$$k$b$N\e(B
+* Red Gnus::       \e$B;0HVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
+* Quassia Gnus::   2 \e$B$+$1$k\e(B 2 \e$B$O\e(B 4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7
+
+Customization
+
+* Slow/Expensive Connection:: \e$B%m!<%+%k$N\e(B Emacs \e$B$rN)$A>e$2$F!"\e(B
+                              \e$BB>$N$H$3$m$+$i%K%e!<%9$rF@$k;v$,$G$-$k!#\e(B
+* Slow Terminal Connection::  \e$B1s3V\e(B Emacs \e$B$r<B9T$9$k\e(B
+* Little Disk Space::         \e$BBg$-$J5/F0%U%!%$%k$r;}$D;v$O$^$:$$\e(B
+* Slow Machine::              \e$BB.$$5!3#$rGc$*$&$H46$8$k$G$"$m$&\e(B
+
+Gnus Reference Guide
+
+* Gnus Utility Functions:: \e$B;HMQ$G$-$k6&DL$N4X?t$HJQ?t\e(B
+* Backend Interface::      Gnus \e$B$O$I$&$d$C$F%5!<%P!<$HDL?.$9$k$N$+\e(B
+* Score File Syntax::      \e$B%9%3%"%U%!%$%k5,3J$N\e(B BNF \e$BDj5A\e(B
+* Headers::                Gnus \e$B$O%X%C%@!<$rFbItE*$K$I$N$h$&$K3JG<$9$k$+\e(B
+* Ranges::                 \e$B$?$/$5$s$N?t$r3JG<$9$kJXMx$J7A<0\e(B
+* Group Info::             \e$B%0%k!<%W>pJs7A<0\e(B
+* Extended Interactive::   \e$B5-9f@\F,<-$J$I\e(B
+* Emacs/XEmacs Code::      Gnus \e$B$OA4$F$N6aBe\e(B Emacsen \e$B$GF0:n$9$k\e(B
+* Various File Formats::   Gnus \e$B$N;HMQ$9$k%U%!%$%k$N7A<0\e(B
+
+Backend Interface
+
+* Required Backend Functions::     \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
+* Optional Backend Functions::     \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
+* Error Messaging::                \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!\e(B
+* Writing New Backends::           \e$B8E$$%P%C%/%(%s%I$N3HD%\e(B
+* Hooking New Backends Into Gnus:: Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H\e(B
+* Mail-like Backends::             \e$B%a!<%kIw%P%C%/%(%s%I$N$?$a$N=u8@\e(B
+
+Various File Formats
+
+* Active File Format::     \e$B;HMQ2DG=$J5-;v%0%k!<%W$N>pJs\e(B
+* Newsgroups File Format:: \e$B%0%k!<%W$N5-=R\e(B
+
+Emacs for Heathens
+
+* Keystrokes:: \e$BJ8>O$rF~NO$7$FL?Na$r<B9T$9$k\e(B
+* Emacs Lisp:: \e$BHw$(IU$1$N\e(B Emacs \e$B%W%m%0%i%_%s%08@8l\e(B
+
+@end detailmenu
 @end menu
 
 @node Starting Up
@@ -458,32 +958,32 @@ Emacs \e$B$,J8>O$rJT=8$9$k?M$KNO$rM?$($k$h$&$K!"\e(Bgnus \e$B$O%K%e!<%9$rFI$`?M$KNO
 
 @findex gnus-other-frame
 @kindex M-x gnus-other-frame
-\e$BJL$N%U%l!<%`\e(B (frame) \e$B$G\e(B gnus \e$B$r5/F0$7$?$$$H$-$O!"L?Na\e(B @kbd{M-x
-gnus-other-frame} \e$B$r;H$&$3$H$,$G$-$^$9!#\e(B
+\e$BJL$N%U%l!<%`\e(B (frame) \e$B$G\e(B gnus \e$B$r5/F0$7$?$$$H$-$O!"L?\e(B
+\e$BNa\e(B @kbd{M-x gnus-other-frame} \e$B$r;H$&$3$H$,$G$-$^$9!#\e(B
 
 \e$B3+;O;~$K2?$+$,$&$^$/$$$+$J$$$H$-$O\e(B @file{~/.gnus} \e$B%U%!%$%k$NCf$GJQ?t$r$$\e(B
-\e$B$/$D$+$$$8$/$j$^$o$5$J$1$l$P$J$i$J$$$G$7$g$&!#$3$N%U%!%$%k$O\e(B
-@file{~/.emacs} \e$B$H;w$F$$$^$9$,!"$3$A$i$O\e(B gnus \e$B$,5/F0$9$k$H$-$KFI$_9~$^$l\e(B
-\e$B$^$9!#\e(B
+\e$B$/$D$+$$$8$/$j$^$o$5$J$1$l$P$J$i$J$$$G$7$g$&!#$3$N%U%!%$%k\e(B
+\e$B$O\e(B @file{~/.emacs} \e$B$H;w$F$$$^$9$,!"$3$A$i$O\e(B gnus \e$B$,5/F0$9$k$H$-$KFI$_9~\e(B
+\e$B$^$l$^$9!#\e(B
 
-\e$B$3$N@bL@=q$G$h$/$o$+$i$J$$MQ8l$,$G$F$-$?$H$-$O!"MQ8l$N9`\e(B
-(@pxref{Terminology}) \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+\e$B$3$N@bL@=q$G$h$/$o$+$i$J$$MQ8l$,$G$F$-$?$H$-$O!"MQ8l$N\e(B
+\e$B9`\e(B (@pxref{Terminology}) \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 
 @menu
-* Finding the News::    \e$B%K%e!<%9$r<hF@$9$kJ}K!$rA*$V\e(B
-* The First Time::      \e$B:G=i$K5/F0$7$?$H$-$K\e(B gnus \e$B$O2?$r$9$k$+\e(B
-* The Server is Down::  \e$B$I$&$9$l$P$=$N$h$&$J$H$-$K%a!<%k$r<j$KF~$l$k$3$H$,$G$-$k$+\e(B
-* Slave Gnusae::        \e$BF1;~$K0l$D0J>e$N\e(B gnus \e$B$r:nF0$5$;$k$3$H$,$G$-$k\e(B
-* Fetching a Group::    \e$B%0%k!<%W$rFI$`$?$a$@$1$K\e(B gnus \e$B$r5/F0$9$k\e(B
-* New Groups::          Gnus \e$B$,?7$7$$%0%k!<%W$KBP$7$F2?$r$9$k$+\e(B
-* Startup Files::       \e$B$d$C$+$$$J%9%?!<%H%"%C%W%U%!%$%k\e(B--@file{.newsrc}
-* Auto Save::           \e$B%/%i%C%7%e$+$i$N2sI|\e(B
-* The Active File::     \e$BCY$$2s@~$+$i$N%U%!%$%k$N<hF@$K$O;~4V$,$+$+$k\e(B
-* Changing Servers::    \e$B$"$k%5!<%P$+$iJL$N%5!<%P$X0\$j$?$$$+$b$7$l$J$$\e(B
-* Startup Variables::   \e$BJQ99$7$?$$$H;W$&$+$b$7$l$J$$JQ?t\e(B
+* Finding the News::   \e$B%K%e!<%9$r<hF@$9$kJ}K!$rA*$V\e(B
+* The First Time::     \e$B:G=i$K5/F0$7$?$H$-$K\e(B gnus \e$B$O2?$r$9$k$+\e(B
+* The Server is Down:: \e$B$I$&$9$l$P$=$N$h$&$J$H$-$K%a!<%k$r<j$KF~$l$k$3$H\e(B
+                       \e$B$,$G$-$k$+\e(B
+* Slave Gnusae::       \e$BF1;~$K0l$D0J>e$N\e(B gnus \e$B$r:nF0$5$;$k$3$H$,$G$-$k\e(B
+* Fetching a Group::   \e$B%0%k!<%W$rFI$`$?$a$@$1$K\e(B gnus \e$B$r5/F0$9$k\e(B
+* New Groups::         Gnus \e$B$,?7$7$$%0%k!<%W$KBP$7$F2?$r$9$k$+\e(B
+* Startup Files::      \e$B$d$C$+$$$J%9%?!<%H%"%C%W%U%!%$%k\e(B--@file{.newsrc}
+* Auto Save::          \e$B%/%i%C%7%e$+$i$N2sI|\e(B
+* The Active File::    \e$BCY$$2s@~$+$i$N%U%!%$%k$N<hF@$K$O;~4V$,$+$+$k\e(B
+* Changing Servers::   \e$B$"$k%5!<%P$+$iJL$N%5!<%P$X0\$j$?$$$+$b$7$l$J$$\e(B
+* Startup Variables::  \e$BJQ99$7$?$$$H;W$&$+$b$7$l$J$$JQ?t\e(B
 @end menu
 
-
 @node Finding the News
 @section \e$B%K%e!<%9$r8+$D$1$k\e(B
 @cindex finding news
@@ -491,13 +991,13 @@ gnus-other-frame} \e$B$r;H$&$3$H$,$G$-$^$9!#\e(B
 @vindex gnus-select-method
 @c @head
 \e$BJQ?t\e(B @code{gnus-select-method} \e$B$O\e(B gnus \e$B$,$I$3$G%K%e!<%9$rC5$9$Y$-$+$r<(\e(B
-\e$B$7$^$9!#$3$NJQ?t$O$O$8$a$NMWAG$,\e(B @dfn{\e$BJ}K!\e(B}\e$B!"\e(B2 \e$BHVL\$NMWAG$,\e(B @dfn{\e$B>l=j\e(B}
-\e$B$rI=$9%j%9%H$G$"$kI,MW$,$"$j$^$9!#$3$NJ}K!$O$"$J$?$N4pK\J}K!\e(B (native
-method) \e$B$K$J$j$^$9!#$3$NJ}K!$G<h$C$F$3$J$$%0%k!<%W$OA4$F30It\e(B (foreign)
-\e$B%0%k!<%W$G$9!#\e(B
+\e$B$7$^$9!#$3$NJQ?t$O$O$8$a$NMWAG$,\e(B @dfn{\e$BJ}K!\e(B}\e$B!"FsHVL\$NMWAG\e(B
+\e$B$,\e(B @dfn{\e$B>l=j\e(B} \e$B$rI=$9%j%9%H$G$"$kI,MW$,$"$j$^$9!#$3$NJ}K!$O$"$J$?$N4pK\J}\e(B
+\e$BK!\e(B (native method) \e$B$K$J$j$^$9!#$3$NJ}K!$G<h$C$F$3$J$$%0%k!<%W$OA4$F30\e(B
+\e$BIt\e(B (foreign) \e$B%0%k!<%W$G$9!#\e(B
 
-\e$B$?$H$($P!"\e(B@sc{nntp} \e$B%5!<%P!<\e(B @samp{news.somewhere.edu} \e$B$+$iKhF|!JLt$N$h\e(B
-\e$B$&$K!K0lDj$NNL$N%K%e!<%9$r@]<h$7$?$$$N$G$"$l$P!"\e(B
+\e$B$?$H$($P!"\e(B@sc{nntp} \e$B%5!<%P!<\e(B @samp{news.somewhere.edu} \e$B$+$iKhF|\e(B (\e$BLt$N$h\e(B
+\e$B$&$K\e(B) \e$B0lDj$NNL$N%K%e!<%9$r@]<h$7$?$$$N$G$"$l$P!"\e(B
 
 @lisp
 (setq gnus-select-method '(nntp "news.somewhere.edu"))
@@ -522,44 +1022,44 @@ method) \e$B$K$J$j$^$9!#$3$NJ}K!$G<h$C$F$3$J$$%0%k!<%W$OA4$F30It\e(B (foreign)
 @cindex NNTPSERVER
 @cindex @sc{nntp} server
 \e$B$b$7$3$NJQ?t$,@_Dj$5$l$F$$$J$1$l$P!"\e(Bgnus \e$B$O\e(B @code{NNTPSERVER} \e$B4D6-JQ?t$r\e(B
-\e$BFI$_$K$$$-$^$9!#$b$7$=$NJQ?t$,@_Dj$5$l$F$$$J$1$l$P!"\e(Bgnus \e$B$O\e(B
-@code{gnus-nntpserver-file}\e$B!J@_Dj$5$l$F$$$J$$>l9g$O\e(B
-@file{/etc/nntpserver}\e$B!K$,$3$N7o$K4X$7$F2?$+$r8@$C$F$$$J$$$+$rD4$Y$^$9!#\e(B
-\e$B$b$7$=$l$b<:GT$7$?$J$i!"\e(Bgnus\e$B$O\e(B Emacs \e$B$,F0:n$7$F$$$k%5!<%P!<$r\e(B @sc{nntp}
-\e$B%5!<%P!<$H$7$F;H$*$&$H$7$^$9!#?oJ,$JEv$F?dNL$G$9$1$I$M!#\e(B
+\e$BFI$_$K$$$-$^$9!#$b$7$=$NJQ?t$,@_Dj$5$l$F$$$J$1$l$P!"\e(B
+gnus \e$B$O\e(B @code{gnus-nntpserver-file} (\e$B@_Dj$5$l$F$$$J$$>l9g\e(B
+\e$B$O\e(B @file{/etc/nntpserver}) \e$B$,$3$N7o$K4X$7$F2?$+$r8@$C$F$$$J$$$+$rD4$Y$^\e(B
+\e$B$9!#$b$7$=$l$b<:GT$7$?$J$i!"\e(Bgnus \e$B$O\e(B Emacs \e$B$,F0:n$7$F$$$k%5!<%P!<\e(B
+\e$B$r\e(B @sc{nntp} \e$B%5!<%P!<$H$7$F;H$*$&$H$7$^$9!#?oJ,$JEv$F?dNL$G$9$1$I$M!#\e(B
 
 @vindex gnus-nntp-server
-@code{gnus-nntp-server} \e$B$,@_Dj$5$l$F$$$k$H!"$3$NJQ?t$O\e(B
-@code{gnus-select-method} \e$B$r>e=q$-$7$^$9!#$G$9$+$i!"\e(B
+@code{gnus-nntp-server} \e$B$,@_Dj$5$l$F$$$k$H!"$3$NJQ?t\e(B
+\e$B$O\e(B @code{gnus-select-method} \e$B$r>e=q$-$7$^$9!#$G$9$+$i!"\e(B
 @code{gnus-nntp-server} \e$B$O\e(B @code{nil} \e$B$K@_Dj$9$k$Y$-$G!"=i4|@_Dj$G$b$=$N\e(B
 \e$B$h$&$K$J$C$F$$$^$9!#\e(B
 
 @vindex gnus-secondary-servers
 @vindex gnus-nntp-server
 Gnus \e$B$K\e(B @sc{nntp} \e$B%5!<%P!<$NL>A0$NF~NO$rBPOCE*$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
-@code{gnus} \e$B$K?tCM$G$J$$@\F,0z?t$rEO$9$H!JNc!'\e(B@kbd{C-u M-x gnus}\e$B!K!"\e(Bgnus
-\e$B$O\e(B @code{gnus-secondary-servers} \e$B%j%9%H!J$b$7B8:_$9$k$J$i$P!K$+$i%5!<%P!<\e(B
-\e$B$rA*$V$3$H$,$G$-$k$h$&$K$7$^$9!#$?$@C1$K@\B3$7$?$$$H;W$C$?%5!<%P!<$NL>A0\e(B
-\e$B$rBG$D$3$H$b$G$-$^$9!#\e(B(\e$B$3$l$O\e(B @code{gnus-nntp-server} \e$B$r@_Dj$7!"$3$l$O8e\e(B
-\e$B$N\e(B Emacs \e$B$N%;%C%7%g%s$G\e(B @kbd{M-x gnus} \e$B$H$9$k$H!"\e(Bgnus \e$B$OF1$8%5!<%P!<$K@\\e(B
-\e$BB3$7$h$&$H$9$k$H$$$&$3$H$G$9!#\e(B)
+@code{gnus} \e$B$K?tCM$G$J$$@\F,0z?t$rEO$9$H\e(B (\e$BNc\e(B: @kbd{C-u M-x gnus})\e$B!"\e(B
+gnus \e$B$O\e(B @code{gnus-secondary-servers} \e$B%j%9%H\e(B (\e$B$b$7B8:_$9$k$J$i$P\e(B) \e$B$+$i%5!<\e(B
+\e$B%P!<$rA*$V$3$H$,$G$-$k$h$&$K$7$^$9!#$?$@C1$K@\B3$7$?$$$H;W$C$?%5!<%P!<$N\e(B
+\e$BL>A0$rBG$D$3$H$b$G$-$^$9!#\e(B(\e$B$3$l$O\e(B @code{gnus-nntp-server} \e$B$r@_Dj$7!"$3$l\e(B
+\e$B$O8e$N\e(B Emacs \e$B$N%;%C%7%g%s$G\e(B @kbd{M-x gnus} \e$B$H$9$k$H!"\e(Bgnus \e$B$OF1$8%5!<%P!<\e(B
+\e$B$K@\B3$7$h$&$H$9$k$H$$$&$3$H$G$9!#\e(B)
 
 @findex gnus-group-browse-foreign-server
 @kindex B (Group)
-\e$B$7$+$7!"IaCJF|>oE*$K$O0l$D$N\e(B @sc{nntp} \e$B%5!<%P$r;H$$!"0c$C$?%5!<%P!<$K$O6=\e(B
-\e$BL#$N$"$k%0%k!<%W$,>/$7$7$+$J$$>l9g!"%0%k!<%W%P%C%U%!$G\e(B @kbd{B} \e$BL?Na$r;H$&\e(B
-\e$B$3$H$NJ}$,NI$$$G$7$g$&!#$=$l$O!"A*Br2DG=$J%0%k!<%W$rI=<($7!"$=$NCf$+$i$I$l\e(B
-\e$B$G$b9%$-$J$b$N$r9XFI$9$k$3$H$,$G$-$^$9!#$3$l$O!"\e(B@file{.newsrc} \e$B$NJ];}$r$:$C\e(B
-\e$B$H$d$j$d$9$/$7$^$9!#\e(B@xref{Foreign Groups, \e$B30It%0%k!<%W\e(B}.
+\e$B$7$+$7!"IaCJF|>oE*$K$O0l$D$N\e(B @sc{nntp} \e$B%5!<%P$r;H$$!"0c$C$?%5!<%P!<$K$O\e(B
+\e$B6=L#$N$"$k%0%k!<%W$,>/$7$7$+$J$$>l9g!"%0%k!<%W%P%C%U%!$G\e(B @kbd{B} \e$BL?Na$r\e(B
+\e$B;H$&$3$H$NJ}$,NI$$$G$7$g$&!#$=$l$O!"A*Br2DG=$J%0%k!<%W$rI=<($7!"$=$NCf$+\e(B
+\e$B$i$I$l$G$b9%$-$J$b$N$r9XFI$9$k$3$H$,$G$-$^$9!#$3$l$O!"\e(B@file{.newsrc} \e$B$N\e(B
+\e$BJ];}$r$:$C$H$d$j$d$9$/$7$^$9!#\e(B@xref{Foreign Groups, \e$B30It%0%k!<%W\e(B}.
 
 @vindex gnus-secondary-select-methods
 @c @head
-\e$B30It%0%k!<%W$KBP$9$k>/$70c$C$?$d$jJ}$O!"JQ?t\e(B
-@code{gnus-secondary-select-methods} \e$B$r@_Dj$9$kJ}K!$G$9!#$3$NJQ?t$KI=$5\e(B
-\e$B$l$F$$$kA*BrJ}K!$O!"B?$/$NE@$G\e(B @code{gnus-select-method} \e$B%5!<%P!<$NBrJ}\e(B
-\e$BK!$HF1$8$h$&$K07$o$l$^$9!#5/F0Cf$K%"%/%F%#%V%U%!%$%k$rC5$7$K$$$-\e(B \e$B!J$b$7\e(B
-\e$BMW5a$5$l$F$$$l$P!K!"$3$l$i$N%5!<%P!<>e$K$G$-$??7$7$$%K%e!<%9%0%k!<%W$O85!9\e(B
-\e$B$N%0%k!<%W$HF1$8$h$&$K9XFI!J$b$7$/$OHs9XFI!K$5$l$^$9!#\e(B
+\e$B30It%0%k!<%W$KBP$9$k>/$70c$C$?$d$jJ}$O!"JQ\e(B
+\e$B?t\e(B @code{gnus-secondary-select-methods} \e$B$r@_Dj$9$kJ}K!$G$9!#$3$NJQ?t$KI=\e(B
+\e$B$5$l$F$$$kA*BrJ}K!$O!"B?$/$NE@$G\e(B @code{gnus-select-method} \e$B%5!<%P!<$NBr\e(B
+\e$BJ}K!$HF1$8$h$&$K07$o$l$^$9!#5/F0Cf$K%"%/%F%#%V%U%!%$%k$rC5$7$K$$$-\e(B (\e$B$b$7\e(B
+\e$BMW5a$5$l$F$$$l$P\e(B)\e$B!"$3$l$i$N%5!<%P!<>e$K$G$-$??7$7$$%K%e!<%9%0%k!<%W$O85!9\e(B
+\e$B$N%0%k!<%W$HF1$8$h$&$K9XFI\e(B (\e$B$b$7$/$OHs9XFI\e(B) \e$B$5$l$^$9!#\e(B
 
 \e$B$?$H$($P!"%a!<%k$rFI$`$?$a$K\e(B @code{nnmbox} \e$B%P%C%/%(%s%I\e(B (backend) \e$B$r;H$$\e(B
 \e$B$?$$$H$-$O!"IaDL!"$3$NJQ?t$r!"\e(B
@@ -579,20 +1079,19 @@ Gnus \e$B$K\e(B @sc{nntp} \e$B%5!<%P!<$NL>A0$NF~NO$rBPOCE*$K;XDj$9$k$3$H$b$G$-$^$9!
 \e$BFI$5$l$F$$$k$Y$-$+$r7hDj$7$h$&$H$7$^$9!#\e(B
 
 @vindex gnus-default-subscribed-newsgroups
-\e$BJQ?t\e(B @code{gnus-default-subscribed-newsgroups} \e$B$,@_Dj$5$l$F$$$k$H!"\e(Bgnus
-\e$B$O$=$N%j%9%H$NCf$N%0%k!<%W$r9XFI$7!";D$j$r:o=|$7$^$9!#%7%9%F%`4IM}<T$O$3\e(B
-\e$B$NJQ?t$r2?$+Lr$KN)$D$b$N$K@_Dj$7$F$*$/$3$H$,K>$^$l$^$9!#\e(B
+\e$BJQ?t\e(B @code{gnus-default-subscribed-newsgroups} \e$B$,@_Dj$5$l$F$$$k$H!"\e(B
+gnus \e$B$O$=$N%j%9%H$NCf$N%0%k!<%W$r9XFI$7!";D$j$r:o=|$7$^$9!#%7%9%F%`4IM}\e(B
+\e$B<T$O$3$NJQ?t$r2?$+Lr$KN)$D$b$N$K@_Dj$7$F$*$/$3$H$,K>$^$l$^$9!#\e(B
 
-\e$B$=$&$G$J$$$H$-$O!"\e(Bgnus \e$B$O>/$7$NG$0U$N%0%k!<%W$r9XFI$7$^$9!JNc!'\e(B
-@samp{*.newusers}\e$B!K!#!J\e(B@dfn{\e$BG$0U\e(B}\e$B$O$3$3$G$O!"\e(B@dfn{Lars \e$B$5$s$,FI$`$Y$-$G\e(B
-\e$B$"$k$H9M$($k$b$N\e(B}\e$B$H$$$&$h$&$KDj5A$5$l$F$$$^$9!K\e(B
+\e$B$=$&$G$J$$$H$-$O!"\e(Bgnus \e$B$O>/$7$NG$0U$N%0%k!<%W$r9XFI$7$^$9\e(B (\e$BNc\e(B:
+@samp{*.newusers})\e$B!#\e(B(@dfn{\e$BG$0U\e(B}\e$B$O$3$3$G$O!"\e(B@dfn{Lars \e$B$5$s$,FI$`$Y$-$G$"\e(B
+\e$B$k$H9M$($k$b$N\e(B}\e$B$H$$$&$h$&$KDj5A$5$l$F$$$^$9\e(B)
 
 \e$B$^$?!"$?$$$F$$$N6&DL$NLdBj$N2r7h$N<j=u$1$K$J$k$h$&!"\e(Bgnus \e$B$K4X$9$kJ8=q$N\e(B
 \e$B%0%k!<%W$b9XFI$9$k$3$H$K$J$k$G$7$g$&!#\e(B
 
-@code{gnus-default-subscribed-newsgroups} \e$B$,\e(B @code{t} \e$B$N$H$-$O!"\e(Bgnus \e$B$O?7\e(B
-\e$B$7$$%0%k!<%W$r07$&$N$KIaDL$N4X?t$r;H$$!"FCJL$J$3$H$O2?$b$7$^$;$s!#\e(B
-
+@code{gnus-default-subscribed-newsgroups} \e$B$,\e(B @code{t} \e$B$N$H$-$O!"\e(Bgnus \e$B$O\e(B
+\e$B?7$7$$%0%k!<%W$r07$&$N$KIaDL$N4X?t$r;H$$!"FCJL$J$3$H$O2?$b$7$^$;$s!#\e(B
 
 @node The Server is Down
 @section \e$B%5!<%P!<$,Mn$A$F$$$k\e(B
@@ -604,7 +1103,7 @@ Gnus \e$B$K\e(B @sc{nntp} \e$B%5!<%P!<$NL>A0$NF~NO$rBPOCE*$K;XDj$9$k$3$H$b$G$-$^$9!
 
 Gnus \e$B$O!"?.Mj$G$-$k%W%m%0%i%`$N0l$D$H$7$F!"%5!<%P!<$H@\B3$G$-$J$$$H$-$O\e(B
 \e$B4pK\A*BrJ}K!$J$7$GB3$1$k$+$I$&$+$r?R$M$^$9!#$3$l$O<B:]$K$O%5!<%P!<$,B8:_\e(B
-\e$B$7$J$$$H$-!JNc$($P!"%"%I%l%9$r4V0c$($?>l9g!K$d%5!<%P!<$,2?$i$+$NM}M3$G0l\e(B
+\e$B$7$J$$$H$-\e(B (\e$BNc$($P!"%"%I%l%9$r4V0c$($?>l9g\e(B) \e$B$d%5!<%P!<$,2?$i$+$NM}M3$G0l\e(B
 \e$B;~E*$KD4;R$,$*$+$7$/$J$C$F$$$k$H$-$K5/$3$j$^$9!#$b$7$=$N$^$^B39T$9$k$3$H\e(B
 \e$B$K$7$F!"30It%0%k!<%W$,0l$D$bL5$$>l9g!"<B$O%0%k!<%W%P%C%U%!$G$O$[$H$s$I2?\e(B
 \e$B$b$G$-$J$$$H$$$&$3$H$K5$$,$D$/$G$7$g$&!#$G$b!"$M$'!"$=$l$O$"$J$?$NLdBj$G\e(B
@@ -617,42 +1116,40 @@ Gnus \e$B$O!"?.Mj$G$-$k%W%m%0%i%`$N0l$D$H$7$F!"%5!<%P!<$H@\B3$G$-$J$$$H$-$O\e(B
 \e$B%k$@$1$rFI$_$?$$$H$-$O!"\e(Bgnus \e$B$r5/F0$9$k$N$K!"\e(B@code{gnus-no-server} \e$BL?Na\e(B
 \e$B$r;H$&$3$H$,$G$-$^$9!#5^$$$G$$$k$H$-$K$b$T$C$?$j$G$7$g$&!#$3$NL?Na$OK\Mh\e(B
 \e$B$N%5!<%P!<$K$O@\B3$7$^$;$s!=!=$=$NBe$o$j$K!"%l%Y%k\e(B 1 \e$B$H\e(B 2 \e$B$K$"$k$9$Y$F$N\e(B
-\e$B%0%k!<%W$r3hF0>uBV$K$7$^$9!J4pK\%0%k!<%W$G$J$$%0%k!<%W$O$=$N\e(B 2 \e$B$D$N%l%Y\e(B
-\e$B%k$K$7$F$*$/$N$,K>$^$7$$$G$7$g$&!K!#\e(B
-
+\e$B%0%k!<%W$r3hF0>uBV$K$7$^$9\e(B (\e$B4pK\%0%k!<%W$G$J$$%0%k!<%W$O$=$NFs$D$N%l%Y%k\e(B
+\e$B$K$7$F$*$/$N$,K>$^$7$$$G$7$g$&\e(B)\e$B!#\e(B
 
 @node Slave Gnusae
 @section gnus \e$B$r%9%l!<%V$K$9$k\e(B
 @cindex slave
 
-\e$B$"$J$?$O\e(B 2 \e$B$D0J>e$N\e(B Emacs \e$B$H!"\e(B2 \e$B$D0J>e$N\e(B gnus \e$B$rF1;~$KF0$+$7$?$$$H;W$&$+\e(B
-\e$B$b$7$l$^$;$s!#0c$C$?\e(B @file{.newsrc} \e$B%U%!%$%k$r;H$C$F$$$k$J$i!JNc$($P!"\e(B2
-\e$B$D$N0c$C$?%5!<%P!<$+$iFI$_9~$`$?$a$K!"\e(B2 \e$B$D$N0c$C$?\e(B gnus \e$B$rF0:n$5$;$F$$$k\e(B
-\e$B>l9g!K!"$^$C$?$/LdBj$O$"$j$^$;$s!#$=$l$r9T$($PNI$$$@$1$G$9!#\e(B
+\e$B$"$J$?$OFs$D0J>e$N\e(B Emacs \e$B$H!"Fs$D0J>e$N\e(B gnus \e$B$rF1;~$KF0$+$7$?$$$H;W$&$+\e(B
+\e$B$b$7$l$^$;$s!#0c$C$?\e(B @file{.newsrc} \e$B%U%!%$%k$r;H$C$F$$$k$J$i\e(B (\e$BNc$($P!"\e(B
+\e$BFs$D$N0c$C$?%5!<%P!<$+$iFI$_9~$`$?$a$K!"Fs$D$N0c$C$?\e(B gnus \e$B$rF0:n$5$;$F$$\e(B
+\e$B$k>l9g\e(B)\e$B!"$^$C$?$/LdBj$O$"$j$^$;$s!#$=$l$r9T$($PNI$$$@$1$G$9!#\e(B
 
-\e$BLdBj$O!"F1$8\e(B @code{.newsrc} \e$B%U%!%$%k$r;H$&\e(B2\e$B$D$N\e(B gnus \e$B$rF0$+$=$&$H$7$?$H\e(B
+\e$BLdBj$O!"F1$8\e(B @code{.newsrc} \e$B%U%!%$%k$r;H$&Fs$D$N\e(B gnus \e$B$rF0$+$=$&$H$7$?$H\e(B
 \e$B$-$K5/$3$j$^$9!#\e(B
 
 \e$B$3$NLdBj$KBP=h$9$k$?$a$K!"\e(Bgnus \e$B%?%o!<$N%7%s%/%?%s%/$K$$$k2f!9$O?7$7$$35\e(B
-\e$BG0$K$?$I$j$D$-$^$7$?!#\e(B@dfn{\e$B%^%9%?!<\e(B} \e$B$H\e(B @dfn{\e$B%9%l!<%V\e(B} \e$B$G$9!#!J2f!9$O$3\e(B
-\e$B$N35G0$KFC5v$r?=@A$7$^$7$?!#$=$7$F!"$=$N8@MU$NCx:n8"$rF@$^$7$?!#$*8_$$$K\e(B
-\e$B4XO"$7$F$3$l$i$N8@MU$r;H$$$?$$$J$i!"#12s;H$&Kh$K!";d$K\e(B $1 \e$B$rAw$i$J$1$l$P\e(B
-\e$B$J$j$^$;$s!#$b$C$A$m$s!"\e(B@dfn{\e$B%3%s%T%e!<%?!<%"%W%j%1!<%7%g%s$N%^%9%?!<!?\e(B
-\e$B%9%l!<%V4X78\e(B} \e$B$N;HMQNA$O$b$C$H9b$/$J$j$^$9!#!K\e(B
+\e$BG0$K$?$I$j$D$-$^$7$?!#\e(B@dfn{\e$B%^%9%?!<\e(B} \e$B$H\e(B @dfn{\e$B%9%l!<%V\e(B} \e$B$G$9!#\e(B(\e$B2f!9$O$3$N\e(B
+\e$B35G0$KFC5v$r?=@A$7$^$7$?!#$=$7$F!"$=$N8@MU$NCx:n8"$rF@$^$7$?!#$*8_$$$K4X\e(B
+\e$BO"$7$F$3$l$i$N8@MU$r;H$$$?$$$J$i!"0l2s;H$&Kh$K!";d$K\e(B $1 \e$B$rAw$i$J$1$l$P$J\e(B
+\e$B$j$^$;$s!#$b$C$A$m$s!"\e(B@dfn{\e$B%3%s%T%e!<%?!<%"%W%j%1!<%7%g%s$N%^%9%?!<!?%9\e(B
+\e$B%l!<%V4X78\e(B} \e$B$N;HMQNA$O$b$C$H9b$/$J$j$^$9!#\e(B)
 
-\e$B$H$K$+$/!"\e(B@kbd{M-x gnus}\e$B!J$b$7$/$O!"IaCJ$d$C$F$$$kJ}K!!K$G\e(B gnus \e$B$rIaDL$K\e(B
+\e$B$H$K$+$/!"\e(B@kbd{M-x gnus} (\e$B$b$7$/$O!"IaCJ$d$C$F$$$kJ}K!\e(B) \e$B$G\e(B gnus \e$B$rIaDL$K\e(B
 \e$B5/F0$7$^$9!#$=$N8e$N%9%l!<%V\e(B gnus \e$B$O$=$l$>$l\e(B @kbd{M-x gnus-slave} \e$B$G5/F0\e(B
-\e$B$7$^$9!#%9%l!<%V$OIaDL$N\e(B @file{.newsrc} \e$B$OJ]B8$7$^$;$s$,!"Be$o$j$K\e(B
-@dfn{\e$B%9%l!<%V%U%!%$%k\e(B} \e$B$K%9%l!<%V$N5/F0Cf$K$I$N$h$&$J%0%k!<%W$,FI$^$l$?\e(B
-\e$B$+$H$$$&>pJs$@$1$rJ]B8$7$^$9!#%^%9%?!<\e(B gnus \e$B$,5/F0$9$k$H$-!"$=$l$O$=$l$i\e(B
-\e$B$N%9%l!<%V%U%!%$%k$rFI$_9~$_!J$=$7$F>C$7!K!"$=$l$i$+$i$9$Y$F$N>pJs$r<h$j\e(B
-\e$B9~$_$^$9!#!J%9%l!<%V%U%!%$%k$O!":G=*E*$JJQ99$,M%@h$5$l$k$h$&$K$=$l$i$,:n\e(B
-\e$B$i$l$?=gHV$GFI$^$l$^$9!#!K\e(B
-
-\e$B$b$A$m$s!"%9%l!<%V%U%!%$%k$+$i$N>pJs$OIaDL$N!J$9$J$o$A!"%^%9%?!<$N!K%U%!\e(B
+\e$B$7$^$9!#%9%l!<%V$OIaDL$N\e(B @file{.newsrc} \e$B$OJ]B8$7$^$;$s$,!"Be$o$j\e(B
+\e$B$K\e(B @dfn{\e$B%9%l!<%V%U%!%$%k\e(B} \e$B$K%9%l!<%V$N5/F0Cf$K$I$N$h$&$J%0%k!<%W$,FI$^$l\e(B
+\e$B$?$+$H$$$&>pJs$@$1$rJ]B8$7$^$9!#%^%9%?!<\e(B gnus \e$B$,5/F0$9$k$H$-!"$=$l$O$=$l\e(B
+\e$B$i$N%9%l!<%V%U%!%$%k$rFI$_9~$_\e(B (\e$B$=$7$F>C$7\e(B)\e$B!"$=$l$i$+$i$9$Y$F$N>pJs$r<h\e(B
+\e$B$j9~$_$^$9!#\e(B(\e$B%9%l!<%V%U%!%$%k$O!":G=*E*$JJQ99$,M%@h$5$l$k$h$&$K$=$l$i$,\e(B
+\e$B:n$i$l$?=gHV$GFI$^$l$^$9!#\e(B)
+
+\e$B$b$A$m$s!"%9%l!<%V%U%!%$%k$+$i$N>pJs$OIaDL$N\e(B (\e$B$9$J$o$A!"%^%9%?!<$N\e(B) \e$B%U%!\e(B
 \e$B%$%k$h$j$bM%@h$5$l$^$9!#\e(B
 
-
 @node Fetching a Group
 @section \e$B%0%k!<%W$r<hF@$9$k\e(B
 @cindex fetching a group
@@ -664,7 +1161,6 @@ Gnus \e$B$O!"?.Mj$G$-$k%W%m%0%i%`$N0l$D$H$7$F!"%5!<%P!<$H@\B3$G$-$J$$$H$-$O\e(B
 \e$B%s%I\e(B @code{gnus-fetch-group} \e$B$O$3$N5!G=$rDs6!$7$^$9!#$=$N%3%^%s%I$O!"%0\e(B
 \e$B%k!<%W$NL>A0$r0z?t$H$7$F$H$j$^$9!#\e(B
 
-
 @node New Groups
 @section \e$B?7$7$$%0%k!<%W\e(B
 @cindex new groups
@@ -673,20 +1169,20 @@ Gnus \e$B$O!"?.Mj$G$-$k%W%m%0%i%`$N0l$D$H$7$F!"%5!<%P!<$H@\B3$G$-$J$$$H$-$O\e(B
 @vindex gnus-check-new-newsgroups
 \e$B?7$7$$%K%e!<%9%0%k!<%W$rA4$/8+$J$$$GK~B-$G$"$k$J$i$P!"\e(B
 @code{gnus-check-new-newsgroups} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
-\e$B$3$l$r@_Dj$7$?>l9g!"5/F0$K$+$+$k;~4V$,C;$/$J$j$^$9!#$3$NJQ?t$,\e(B nil \e$B$K@_\e(B
-\e$BDj$5$l$F$$$F$b!"%0%k!<%W%P%C%U%!$G\e(B @kbd{U} \e$B$r2!$;$P$$$D$G$b?7$7$$%0%k!<\e(B
-\e$B%W$r9XFI$9$k$3$H$,$G$-$^$9\e(B (@pxref{Group Maintenance})\e$B!#=i4|@_Dj$G$O$3$N\e(B
-\e$BJQ?t$O\e(B @code{ask-server} \e$B$G$9!#$3$NJQ?t$,\e(B @code{always} \e$B$K@_Dj$5$l$F$$$k\e(B
-\e$B$H!"L?Na\e(B @kbd{g} \e$B$r<B9T$7$?$H$-$G$b\e(B gnus \e$B$O%P%C%/%(%s%I$K?7$7$$%0%k!<%W\e(B
-\e$B$rC5$9$3$H$r5a$a$^$9\e(B (@pxref{Scanning New Messages})\e$B!#\e(B
+\e$B$3$l$r@_Dj$7$?>l9g!"5/F0$K$+$+$k;~4V$,C;$/$J$j$^$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$K@_Dj$5$l$F$$$F$b!"%0%k!<%W%P%C%U%!$G\e(B @kbd{U} \e$B$r2!$;$P$$\e(B
+\e$B$D$G$b?7$7$$%0%k!<%W$r9XFI$9$k$3$H$,$G$-$^$9\e(B (@pxref{Group Maintenance})\e$B!#\e(B
+\e$B=i4|@_Dj$G$O$3$NJQ?t$O\e(B @code{ask-server} \e$B$G$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{always} \e$B$K@_Dj$5$l$F$$$k$H!"L?Na\e(B @kbd{g} \e$B$r<B9T$7$?$H$-$G\e(B
+\e$B$b\e(B gnus \e$B$O%P%C%/%(%s%I$K?7$7$$%0%k!<%W$rC5$9$3$H$r5a$a$^\e(B
+\e$B$9\e(B (@pxref{Scanning New Messages})\e$B!#\e(B
 
 @menu
-* Checking New Groups::      \e$B$I$N%0%k!<%W$,?7$7$$$+$r7hDj$9$k!#\e(B
-* Subscription Methods::     \e$B?7$7$$%0%k!<%W$KBP$7$F\e(B gnus \e$B$O2?$r$9$Y$-$+\e(B
-* Filtering New Groups::     Gnus \e$B$KFCDj$N?7$7$$%0%k!<%W$rL5;k$5$;$k\e(B
+* Checking New Groups::  \e$B$I$N%0%k!<%W$,?7$7$$$+$r7hDj$9$k\e(B
+* Subscription Methods:: \e$B?7$7$$%0%k!<%W$KBP$7$F\e(B gnus \e$B$O2?$r$9$Y$-$+\e(B
+* Filtering New Groups:: Gnus \e$B$KFCDj$N?7$7$$%0%k!<%W$rL5;k$5$;$k\e(B
 @end menu
 
-
 @node Checking New Groups
 @subsection \e$B?7$7$$%0%k!<%W$rD4$Y$k\e(B
 
@@ -700,36 +1196,35 @@ Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5\e(B
 @code{gnus-save-killed-list} \e$B$r\e(B @code{nil} \e$B$K$9$k$3$H$,$G$-$k$G$7$g$&!#\e(B
 \e$B$=$&$9$l$P!"5/F0!"=*N;$NN>J}!"$=$7$FA4BN$K$o$?$C$F;~4V$r@aLs$G$-$^$9!#%G%#\e(B
 \e$B%9%/>CHqNL$b>/$J$/$J$j$^$9!#$=$l$J$i!"$I$&$7$F$3$l$,=i4|@_Dj$G$O$J$$$N$G\e(B
-\e$B$7$g$&!);DG0$J$,$i!"$9$Y$F$N%5!<%P!<$,$3$NL?Na$rM}2r$9$k$o$1$G$O$J$$$N$G\e(B
+\e$B$7$g$&\e(B? \e$B;DG0$J$,$i!"$9$Y$F$N%5!<%P!<$,$3$NL?Na$rM}2r$9$k$o$1$G$O$J$$$N$G\e(B
 \e$B$9!#\e(B
 
-\e$B;d$O:#$"$J$?$,2?$r9M$($F$$$k$+$rEv$F$i$l$^$9!#$I$&$9$l$P%5!<%P!<$,\e(B
-@code{ask-server} \e$B$rM}2r$9$k$+$,$o$+$k$N$G$7$g$&!)$(!"0c$&$N$G$9$+!)$"$!!"\e(B
-\e$BNI$+$C$?!#$H$$$&$N$O!"3N<B$JEz$OB8:_$7$J$$$N$G$9!#;d$K8@$($k$3$H$O!"$3$N\e(B
-\e$BJQ?t$r\e(B @code{ask-server} \e$B$K@_Dj$7$F!"?tF|4V?7$7$$%0%k!<%W$,8=$l$k$+$I$&\e(B
-\e$B$+$rD4$Y$F$/$@$5$$!"$H$$$&$3$H$@$1$G$9!#$b$7$$$/$D$+$N%0%k!<%W$,8=$l$?$J\e(B
-\e$B$i!"$=$l$GF0:n$7$F$$$^$9!#0l$D$b8=$l$J$1$l$P!"$=$l$OF0:n$7$F$$$^$;$s!#;d\e(B
-\e$B$O!"\e(Bgnus \e$B$K%5!<%P!<$,\e(B @code{ask-server} \e$B$rM}2r$9$k$+$I$&$+$r?dNL$5$;$k4X\e(B
-\e$B?t$r=q$/$3$H$b$G$-$^$9$,!"$=$l$OC1$K?dNL$7$F$$$k$K$9$.$^$;$s!#$G$9$+$i!"\e(B
-\e$B$=$N4X?t$r=q$/$3$H$O$J$$$G$7$g$&!#B>$NJ}K!$H$7$F$O!"%5!<%P!<$K\e(B
-@code{telnet} \e$B$r$7$F!"\e(B@code{HELP} \e$B$HBG$A!"%5!<%P!<$,M}2r$9$k%3%^%s%I$NCf\e(B
-\e$B$K\e(B @samp{NEWGROUPS} \e$B$,$"$k$+$I$&$+$rD4$Y$k$3$H$b$G$-$^$9!#$b$7$"$l$P!"$*\e(B
-\e$B$=$i$/F0:n$9$k$G$7$g$&!J$7$+$7!"E,@Z$K5!G=$rDs6!$9$k$3$H$J$/\e(B
-@samp{NEWGROUPS} \e$B$r%j%9%H$K4^$a$k%5!<%P!<$b$"$j$^$9!K!#\e(B
+\e$B;d$O:#$"$J$?$,2?$r9M$($F$$$k$+$rEv$F$i$l$^$9!#$I$&$9$l$P%5!<%P!<\e(B
+\e$B$,\e(B @code{ask-server} \e$B$rM}2r$9$k$+$,$o$+$k$N$G$7$g$&\e(B? \e$B$(!"0c$&$N$G$9\e(B
+\e$B$+\e(B? \e$B$"$!!"NI$+$C$?!#$H$$$&$N$O!"3N<B$JEz$OB8:_$7$J$$$N$G$9!#;d$K8@$($k$3\e(B
+\e$B$H$O!"$3$NJQ?t$r\e(B @code{ask-server} \e$B$K@_Dj$7$F!"?tF|4V?7$7$$%0%k!<%W$,8=\e(B
+\e$B$l$k$+$I$&$+$rD4$Y$F$/$@$5$$!"$H$$$&$3$H$@$1$G$9!#$b$7$$$/$D$+$N%0%k!<%W\e(B
+\e$B$,8=$l$?$J$i!"$=$l$GF0:n$7$F$$$^$9!#0l$D$b8=$l$J$1$l$P!"$=$l$OF0:n$7$F$$\e(B
+\e$B$^$;$s!#;d$O!"\e(Bgnus \e$B$K%5!<%P!<$,\e(B @code{ask-server} \e$B$rM}2r$9$k$+$I$&$+$r?d\e(B
+\e$BNL$5$;$k4X?t$r=q$/$3$H$b$G$-$^$9$,!"$=$l$OC1$K?dNL$7$F$$$k$K$9$.$^$;$s!#\e(B
+\e$B$G$9$+$i!"$=$N4X?t$r=q$/$3$H$O$J$$$G$7$g$&!#B>$NJ}K!$H$7$F$O!"%5!<%P!<\e(B
+\e$B$K\e(B @code{telnet} \e$B$r$7$F!"\e(B@code{HELP} \e$B$HBG$A!"%5!<%P!<$,M}2r$9$k%3%^%s%I\e(B
+\e$B$NCf$K\e(B @samp{NEWGROUPS} \e$B$,$"$k$+$I$&$+$rD4$Y$k$3$H$b$G$-$^$9!#$b$7$"$l$P!"\e(B
+\e$B$*$=$i$/F0:n$9$k$G$7$g$&\e(B (\e$B$7$+$7!"E,@Z$K5!G=$rDs6!$9$k$3$H$J\e(B
+\e$B$/\e(B @samp{NEWGROUPS} \e$B$r%j%9%H$K4^$a$k%5!<%P!<$b$"$j$^$9\e(B)\e$B!#\e(B
 
 \e$B$3$NJQ?t$O!"A*BrJ}K!$N%j%9%H$G$"$k$3$H$b$G$-$^$9!#$=$N$H$-$O!"\e(Bgnus \e$B$OL?\e(B
 \e$BNa\e(B @code{ask-server} \e$B$r$=$l$>$l$NA*BrJ}K!$KBP$7$F<B9T$7!"IaDL$NJ}K!$G9X\e(B
-\e$BFI!J$b$7$/$O!"Hs9XFI!K$7$^$9!#$3$l$NI{:nMQ$O!"5/F0$K$+$J$j;~4V$,$+$+$k$N\e(B
+\e$BFI\e(B (\e$B$b$7$/$O!"Hs9XFI\e(B) \e$B$7$^$9!#$3$l$NI{:nMQ$O!"5/F0$K$+$J$j;~4V$,$+$+$k$N\e(B
 \e$B$G!"BT$C$F$$$k4V$KbTA[$G$-$k$3$H$G$9!#1J5W$N9,J!$rC#@.$9$k$?$a$K!"%^%s%H\e(B
 \e$B%i\e(B ``dingnusdingnusdingnus'' \e$B$r;H$C$F$/$@$5$$!#\e(B
 
-
 @node Subscription Methods
 @subsection \e$B9XFIJ}K!\e(B
 
 @vindex gnus-subscribe-newsgroup-method
-\e$B?7$7$$%0%k!<%W$KAx6x$7$?$H$-$K\e(B gnus \e$B$,2?$r$9$k$+$O!"JQ?t\e(B
-@code{gnus-subscribe-newsgroup-method} \e$B$K$h$C$F7hDj$5$l$^$9!#\e(B
+\e$B?7$7$$%0%k!<%W$KAx6x$7$?$H$-$K\e(B gnus \e$B$,2?$r$9$k$+$O!"JQ\e(B
+\e$B?t\e(B @code{gnus-subscribe-newsgroup-method} \e$B$K$h$C$F7hDj$5$l$^$9!#\e(B
 
 \e$B$3$NJQ?t$O4X?t$r4^$s$G$$$kI,MW$,$"$j$^$9!#$3$N4X?t$O?7$7$$%0%k!<%W$NL>A0\e(B
 \e$B$rM#0l$N0z?t$H$7$F8F$P$l$^$9!#\e(B
@@ -741,8 +1236,8 @@ Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5\e(B
 @item gnus-subscribe-zombies
 @vindex gnus-subscribe-zombies
 \e$B$9$Y$F$N?7$7$$%0%k!<%W$r%>%s%S\e(B (zombie) \e$B$K$7$^$9!#$3$l$,=i4|@_Dj\e(B \e$B$K$J$C\e(B
-\e$B$F$$$^$9!#8e$G%>%s%S$r\e(B (@kbd{A z} \e$B$K$h$C$F\e(B) \e$B354Q$7$?$j!"!J\e(B@kbd{S z} \e$B$K$h$C\e(B
-\e$B$F!KE,@Z$KA4$F$r:o=|$7$?$j!"!J\e(B@kbd{u} \e$B$K$h$C$F!K9XFI$7$?$j$G$-$^$9!#\e(B
+\e$B$F$$$^$9!#8e$G%>%s%S$r\e(B (@kbd{A z} \e$B$K$h$C$F\e(B) \e$B354Q$7$?$j!"\e(B(@kbd{S z} \e$B$K$h$C\e(B
+\e$B$F\e(B) \e$BE,@Z$KA4$F$r:o=|$7$?$j!"\e(B(@kbd{u} \e$B$K$h$C$F\e(B) \e$B9XFI$7$?$j$G$-$^$9!#\e(B
 
 @item gnus-subscribe-randomly
 @vindex gnus-subscribe-randomly
@@ -755,8 +1250,8 @@ Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5\e(B
 
 @item gnus-subscribe-hierarchically
 @vindex gnus-subscribe-hierarchically
-\e$B$9$Y$F$N?7$7$$%0%k!<%W$r3,AXE*$K9XFI$7$^$9!#$3$N4X?t$H\e(B
-@code{gnus-subscribe-alphabetically} \e$B$N0c$$$O>/$7$7$+$"$j$^$;$s!#\e(B
+\e$B$9$Y$F$N?7$7$$%0%k!<%W$r3,AXE*$K9XFI$7$^$9!#$3$N4X?t\e(B
+\e$B$H\e(B @code{gnus-subscribe-alphabetically} \e$B$N0c$$$O>/$7$7$+$"$j$^$;$s!#\e(B
 @code{gnus-subscribe-alphabetically} \e$B$O?7$7$$%0%k!<%W$r87L)$K%"%k%U%!%Y%C\e(B
 \e$B%H=g$K$J$i$Y$^$9$,!"$3$N4X?t$O%0%k!<%W$r$=$N3,AX$NCf$KF~$l$^$9!#$G$9$+$i!"\e(B
 @samp{rec} \e$B$N3,AX$r\e(B @samp{comp} \e$B$N3,AX$NA0$K;}$C$F$-$?$$>l9g!"$3$N4X?t$O\e(B
@@ -774,39 +1269,38 @@ Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5\e(B
 
 @item gnus-subscribe-topics
 @vindex gnus-subscribe-topics
-Put the groups into the topic that has a matching @code{subscribe} topic 
-parameter (@pxref{Topic Parameters}).  For instance, a @code{subscribe}
-topic parameter that looks like
+\e$B%0%k!<%W$r9gCW$9$k\e(B @code{subscribe} \e$B%H%T%C%/%Q%i%a!<%?$N$"$k%0%k!<%W$KF~\e(B
+\e$B$l$^$9\e(B (@pxref{Topc Parameters})\e$B!#Nc$($P!"0J2<$N$h$&\e(B
+\e$B$J\e(B @code{subscribe} \e$B%Q%i%a!<%?\e(B
 
 @example
 "nnslashdot"
 @end example
 
-will mean that all groups that match that regex will be subscribed under 
-that topic.
+\e$B$O$=$N@55,I=8=$K9gCW$9$kA4$F$N%0%k!<%W$O$=$N%H%T%C%/$N2<$G9XFI$5$l$k$H$$\e(B
+\e$B$&$3$H$G$9!#\e(B
 
-If no topics match the groups, the groups will be subscribed in the
-top-level topic.
+\e$B%0%k!<%W$K9gCW$9$k%H%T%C%/$,L5$$>l9g!"%0%k!<%W$O:G>e0L$N%H%T%C%/$G9XFI$5\e(B
+\e$B$l$^$9!#\e(B
 
 @end table
 
 @vindex gnus-subscribe-hierarchical-interactive
 \e$B>e$NJQ?t$HNI$/4X78$7$?JQ?t$O!"\e(B
-@code{gnus-subscribe-hierarchical-interactive} \e$B$G$9!#$3$NJQ?t$,\e(B
-@code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O3,AXE*$JJ}K!$G?7$7$$%0%k!<%W$r9XFI$9$k$+$I$&$+\e(B
-\e$B$r?R$M$^$9!#\e(Bgnus \e$B$O$=$l$>$l$N3,AX$G!"$=$l$r2<$K9_$j$k$+$I$&$+$r?R$M$^$9!#\e(B
-
-\e$B$h$/$"$k4V0c$$$O!"?tCJMnA0$NJQ?t\e(B
-(@code{gnus-subscribe-newsgroup-method}) \e$B$r\e(B
-@code{gnus-subscribe-herarchical-interactive} \e$B$K@_Dj$9$k$3$H$G$9!#$3$l$O\e(B
-\e$B8m$j$G$9!#$3$l$OF0:n$7$^$;$s!#$3$l$O$*$a$G$?$$?M$N$9$k$3$H$G$9!#$G$9$+$i!"\e(B
-\e$B@dBP$K$7$J$$$G$/$@$5$$!#\e(B
+@code{gnus-subscribe-hierarchical-interactive} \e$B$G$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O3,AXE*$JJ}K!$G?7$7$$%0%k!<%W$r9XFI$9$k$+\e(B
+\e$B$I$&$+$r?R$M$^$9!#\e(Bgnus \e$B$O$=$l$>$l$N3,AX$G!"$=$l$r2<$K9_$j$k$+$I$&$+$r?R\e(B
+\e$B$M$^$9!#\e(B
 
+\e$B$h$/$"$k4V0c$$$O!"?tCJMnA0$NJQ\e(B
+\e$B?t\e(B (@code{gnus-subscribe-newsgroup-method}) \e$B$r\e(B @code{gnus-subscribe-herarchical-interactive} \e$B$K\e(B
+\e$B@_Dj$9$k$3$H$G$9!#$3$l$O8m$j$G$9!#$3$l$OF0:n$7$^$;$s!#$3$l$O$*$a$G$?$$?M\e(B
+\e$B$N$9$k$3$H$G$9!#$G$9$+$i!"@dBP$K$7$J$$$G$/$@$5$$!#\e(B
 
 @node Filtering New Groups
 @subsection \e$B?7$7$$%0%k!<%W$rA*JL$9$k\e(B
 
-\e$B$I$N?7$7$$%0%k!<%W$,9XFI!J$b$7$/$O!"L5;k!K$5$l$k$Y$-$+$r4IM}$9$k2wE,$G<j\e(B
+\e$B$I$N?7$7$$%0%k!<%W$,9XFI\e(B (\e$B$b$7$/$O!"L5;k\e(B) \e$B$5$l$k$Y$-$+$r4IM}$9$k2wE,$G<j\e(B
 \e$B7Z$JJ}K!$O!"%U%!%$%k\e(B @file{.newsrc} \e$B$N@hF,$K\e(B @dfn{options} \e$B9T$rA^F~$9$k\e(B
 \e$B$3$H$G$9!#<!$O!"Nc$G$9!#\e(B
 
@@ -815,8 +1309,8 @@ options -n !alt.all !rec.all sci.all
 @end example
 
 @vindex gnus-subscribe-options-newsgroup-method
-\e$B$3$N9T$O!"L@$i$+$K$^$8$a$GM}CNE*$G2J3XE*$J?M4V!J$b$7$/$OC1$J$k8E$/B`6~$J\e(B
-\e$B?M4V!K$,=q$$$?$b$N$G$9!#$J$<$J$i!"$3$l$O\e(B @samp{alt} \e$B$H\e(B @samp{rec} \e$B$G;O$^\e(B
+\e$B$3$N9T$O!"L@$i$+$K$^$8$a$GM}CNE*$G2J3XE*$J?M4V\e(B (\e$B$b$7$/$OC1$J$k8E$/B`6~$J\e(B
+\e$B?M4V\e(B) \e$B$,=q$$$?$b$N$G$9!#$J$<$J$i!"$3$l$O\e(B @samp{alt} \e$B$H\e(B @samp{rec} \e$B$G;O$^\e(B
 \e$B$kL>A0$r;}$D%0%k!<%W$OA4$FL5;k$5$l!"\e(B@samp{sci} \e$B$G;O$^$kL>A0$r;}$D%0%k!<\e(B
 \e$B%W$OA4$F9XFI$9$k!"$H$$$&$3$H$rI=$7$F$$$k$+$i$G$9!#\e(BGnus \e$B$O$3$l$i$N%0%k!<\e(B
 \e$B%W$r9XFI$9$k$N$K!"IaDL$N9XFIJ}K!$rMQ$$$^$;$s!#Be$o$j$K!"\e(B
@@ -826,26 +1320,25 @@ options -n !alt.all !rec.all sci.all
 @vindex gnus-options-not-subscribe
 @vindex gnus-options-subscribe
 \e$B%U%!%$%k\e(B @file{.newsrc} \e$B$r$$$8$j$?$/$J$$>l9g$O!"\e(B
-@code{gnus-options-subscribe} \e$B$H\e(B @code{gnus-options-not-subscribe} \e$B$N\e(B2
-\e$B$D$NJQ?t$@$1$r@_Dj$9$k$3$H$b$G$-$^$9!#$3$N\e(B2\e$B$D$NJQ?t$O%U%!%$%k\e(B
-@file{.newsrc} \e$B$N\e(B @samp{optinos -n} \e$B9T$HA4$/F1$8$3$H$r$7$^$9!#$I$A$i$NJQ\e(B
-\e$B?t$b@55,I=8=$G!"?7$7$$%0%k!<%W$OA0<T$K9gCW$9$l$PL5>r7o$K9XFI$5$l!"8e<T$K\e(B
-\e$B9gCW$9$k$HL5;k$5$l$^$9!#\e(B
+@code{gnus-options-subscribe} \e$B$H\e(B @code{gnus-options-not-subscribe} \e$B$NFs\e(B
+\e$B$D$NJQ?t$@$1$r@_Dj$9$k$3$H$b$G$-$^$9!#$3$NFs$D$NJQ?t$O%U%!%$\e(B
+\e$B%k\e(B @file{.newsrc} \e$B$N\e(B @samp{optinos -n} \e$B9T$HA4$/F1$8$3$H$r$7$^$9!#$I$A$i\e(B
+\e$B$NJQ?t$b@55,I=8=$G!"?7$7$$%0%k!<%W$OA0<T$K9gCW$9$l$PL5>r7o$K9XFI$5$l!"8e\e(B
+\e$B<T$K9gCW$9$k$HL5;k$5$l$^$9!#\e(B
 
 @vindex gnus-auto-subscribed-groups
-\e$B$5$i$K$3$3$G$*$;$C$+$$$r$9$kJQ?t$O!"\e(B@code{gnus-auto-subscribed-groups}
-\e$B$G$9!#$=$l$O\e(B @code{gnus-options-subscribe} \e$B$HA4$/F1$8$h$&$KF0:n$7$^$9$N\e(B
-\e$B$G!"K\Ev$OM>J,$J$b$N$G$9!#$7$+$7!";d$O$3$NFs$D$,$"$C$?J}$,NI$$$H;W$$$^$7\e(B
-\e$B$?!#$b$&0lJ}$NJQ?t$O%f!<%6$,$$$8$/$k$N$K;H$o$l$k$N$KBP$7$F!"$3$NJQ?t$O$$\e(B
-\e$B$/$D$+$N4pK\E*$J5,B'$r@_Dj$9$k$?$a$N$b$N$G$9!#=i4|@_Dj$G$O$3$NJQ?t$O%a!<\e(B
-\e$B%k%P%C%/%(%s%I\e(B (@code{nnml} \e$B!"\e(B@code{nnbabyl} \e$B!"\e(B@code{nnfolder} \e$B!"\e(B
-@code{nnmbox} \e$B$H\e(B@code{nnmh}) \e$B$+$i$G$-$kA4$F$N?7$7$$%0%k!<%W$r9XFI$9$k$h\e(B
-\e$B$&$K$J$C$F$$$^$9!#$=$l$,7y$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@\e(B
-\e$B$5$$!#\e(B
-
-\e$B$3$N@55,I=8=$K9gCW$9$k?7$7$$%0%k!<%W$O\e(B
-@code{gnus-subscribe-options-newsgroup-method} \e$B$r;H$C$F9XFI$5$l$^$9!#\e(B
-
+\e$B$5$i$K$3$3$G$*$;$C$+$$$r$9$kJQ?t$O!"\e(B
+@code{gnus-auto-subscribed-groups} \e$B$G$9!#$=$l\e(B
+\e$B$O\e(B @code{gnus-options-subscribe} \e$B$HA4$/F1$8$h$&$KF0:n$7$^$9$N$G!"K\Ev$O\e(B
+\e$BM>J,$J$b$N$G$9!#$7$+$7!";d$O$3$NFs$D$,$"$C$?J}$,NI$$$H;W$$$^$7$?!#$b$&0l\e(B
+\e$BJ}$NJQ?t$O%f!<%6$,$$$8$/$k$N$K;H$o$l$k$N$KBP$7$F!"$3$NJQ?t$O$$$/$D$+$N4p\e(B
+\e$BK\E*$J5,B'$r@_Dj$9$k$?$a$N$b$N$G$9!#=i4|@_Dj$G$O$3$NJQ?t$O%a!<%k%P%C%/%(\e(B
+\e$B%s%I\e(B (@code{nnml}, @code{nnbabyl}, @code{nnfolder}, @code{nnmbox}@ \e$B$H\e(B
+@code{nnmh}) \e$B$+$i$G$-$kA4$F$N?7$7$$%0%k!<%W$r9XFI$9$k$h$&$K$J$C$F$$$^$9!#\e(B
+\e$B$=$l$,7y$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$B$3$N@55,I=8=$K9gCW$9$k?7$7$$%0%k!<%W\e(B
+\e$B$O\e(B @code{gnus-subscribe-options-newsgroup-method} \e$B$r;H$C$F9XFI$5$l$^$9!#\e(B
 
 @node Changing Servers
 @section \e$B%5!<%P!<$r49$($k\e(B
@@ -856,36 +1349,35 @@ options -n !alt.all !rec.all sci.all
 \e$B;E;v$rJQ$($?$j!";H$C$F$$$k%5!<%P!<$,$H$F$bIT0BDj$G!"JL$N$b$N$K>h$j49$($?\e(B
 \e$B$$$H$$$&$H$-$KI,MW$K$J$k$G$7$g$&!#\e(B
 
-\e$B%5!<%P!<$rJQ99$9$k$N$O$H$F$b4JC1$G$9$h$M!)\e(B
-@code{gnus-select-method} \e$B$r?7$7$$%5!<%P!<$r;X$7<($9$h$&$KJQ99$9$l$P$$$$\e(B
-\e$B$@$1$G$9$M!)\e(B
+\e$B%5!<%P!<$rJQ99$9$k$N$O$H$F$b4JC1$G$9$h$M\e(B? @code{gnus-select-method} \e$B$r?7\e(B
+\e$B$7$$%5!<%P!<$r;X$7<($9$h$&$KJQ99$9$l$P$$$$$@$1$G$9$M\e(B?
 
-@emph{\e$B0c$$$^$9!*\e(B}
+@emph{\e$B0c$$$^$9\e(B!}
 
 \e$B5-;v$NHV9f$O0c$C$?\e(B @sc{nntp} \e$B%5!<%P!<$G$b\e(B (\e$B$I$&$K$+$7$F\e(B) \e$BF1$8$K$7$F$"$k!"\e(B
-\e$B$H$$$&$3$H$O$"$j$^$;$s!#$=$7$F!"\e(B guns \e$B$,$I$N5-;v$rFI$s$@$+$r5-O?$9$kM#0l\e(B
+\e$B$H$$$&$3$H$O$"$j$^$;$s!#$=$7$F!"\e(Bgnus \e$B$,$I$N5-;v$rFI$s$@$+$r5-O?$9$kM#0l\e(B
 \e$B$NJ}K!$O!"5-;vHV9f$r5-O?$9$k$3$H$G$9!#$G$9$+$i!"\e(B
 @code{gnus-select-method} \e$B$rJQ99$7$?$H$-$O!"%U%!%$%k\e(B @file{.newsrc} \e$B$O0U\e(B
 \e$BL#$,$J$/$J$j$^$9!#\e(B
 
-Gnus\e$B$O%U%!%$%k\e(B @file{.newsrc} \e$B$r$"$k%5!<%P!<MQ$+$iJL$N%5!<%P!<MQ$KJQ49$9\e(B
-\e$B$k4X?t$r\e(B2\e$B!"\e(B3\e$BMQ0U$7$F$$$^$9!#$=$l$i$K$O0l$D6&DLE@$,$"$j$^$9\e(B---\e$B<B9T$K$J$,!<!<\e(B
-\e$B$$;~4V$,$+$+$k$3$H$G$9!#$*$=$i$/!"$I$&$7$F$bI,MW$K$J$C$?$H$-0J30$K$3$N4X\e(B
-\e$B?t$r;H$*$&$H$O;W$o$J$$$G$7$g$&!#\e(B
+Gnus \e$B$O%U%!%$%k\e(B @file{.newsrc} \e$B$r$"$k%5!<%P!<MQ$+$iJL$N%5!<%P!<MQ$KJQ49\e(B
+\e$B$9$k4X?t$rFs!";0MQ0U$7$F$$$^$9!#$=$l$i$K$O0l$D6&DLE@$,$"$j$^$9\e(B---\e$B<B9T$K\e(B
+\e$B$J$,!<!<$$;~4V$,$+$+$k$3$H$G$9!#$*$=$i$/!"$I$&$7$F$bI,MW$K$J$C$?$H$-0J30\e(B
+\e$B$K$3$N4X?t$r;H$*$&$H$O;W$o$J$$$G$7$g$&!#\e(B
 
 @kindex M-x gnus-change-server
 @findex gnus-change-server
-\e$B$b$7N>J}$N%5!<%P!<$K@\B3$G$-$k$J$i!"\e(Bgnus\e$B$O$"$J$?$,FI$s$@5-;vA4$F$KBP$7$F\e(B
-\e$B%X%C%@!<\e(B (headers) \e$B$rMW5a$7$F!"\e(B@code{Message-ID} \e$B$rHf3S$7!"FI$s$@5-;v$H\e(B
-\e$B5-;v$N0u$r?7$7$/5-O?$7$^$9!#%3%^%s%I\e(B @kbd{M-x gnus-change-server} \e$B$O$3$l\e(B
-\e$B$r$9$Y$F$N4pK\%0%k!<%W$KBP$7$F9T$$$^$9!#$=$N%3%^%s%I$O0\F0@h$NJ}K!$NF~NO\e(B
-\e$B$rB%$7$^$9!#\e(B
+\e$B$b$7N>J}$N%5!<%P!<$K@\B3$G$-$k$J$i!"\e(Bgnus \e$B$O$"$J$?$,FI$s$@5-;vA4$F$KBP$7\e(B
+\e$B$F%X%C%@!<\e(B (headers) \e$B$rMW5a$7$F!"\e(B@code{Message-ID} \e$B$rHf3S$7!"FI$s$@5-;v\e(B
+\e$B$H5-;v$N0u$r?7$7$/5-O?$7$^$9!#%3%^%s%I\e(B @kbd{M-x gnus-change-server} \e$B$O$3\e(B
+\e$B$l$r$9$Y$F$N4pK\%0%k!<%W$KBP$7$F9T$$$^$9!#$=$N%3%^%s%I$O0\F0@h$NJ}K!$NF~\e(B
+\e$BNO$rB%$7$^$9!#\e(B
 
 @kindex M-x gnus-group-move-group-to-server
 @findex gnus-group-move-group-to-server
 \e$B8D!9$N%0%k!<%W$rL?Na\e(B @kbd{M-x gnus-group-move-group-to-server} \e$B$G0\\e(B
-\e$BF0$9$k$3$H$b$G$-$^$9!#$3$l$O$"$k%5!<%P!<$+$iJL$N%5!<%P!<$X0l$D$N\e(B (\e$B30It\e(B)
-\e$B%0%k!<%W$r0\F0$7$?$$$H$-$KLr$KN)$A$^$9!#\e(B
+\e$BF0$9$k$3$H$b$G$-$^$9!#$3$l$O$"$k%5!<%P!<$+$iJL$N%5!<%P!<$X0l$D\e(B
+\e$B$N\e(B (\e$B30It\e(B) \e$B%0%k!<%W$r0\F0$7$?$$$H$-$KLr$KN)$A$^$9!#\e(B
 
 @kindex M-x gnus-group-clear-data-on-native-groups
 @findex gnus-group-clear-data-on-native-groups
@@ -895,9 +1387,8 @@ gnus-group-clear-data-on-native-groups} \e$B$r;H$C$F!"4pK\%0%k!<%W$K4X$9$k%G!<\e(B
 \e$B%?$r$9$Y$F>C5n$9$k$3$H$,$G$-$^$9!#$3$N%3%^%s%I$OCm0U$7$F;H$C$F$/$@$5$$!#\e(B
 
 \e$B%5!<%P!<$rJQ99$7$?8e$G!"%-%c%C%7%e3,AX$r0\F0$5$;$J$1$l$P\e(B@strong{\e$B$J$j$^$;\e(B
-\e$B$s\e(B}\e$B!#$H$$$&$N$O!"%-%c%C%7%e5-;v$O4V0c$C$?5-;vHV9f$K$J$C$F$*$j!"$=$l$O\e(B
-gnus \e$B$,$I$N5-;v$rFI$s$@$H$_$J$9$+$K1F6A$7$^$9!#\e(B
-
+\e$B$s\e(B}\e$B!#$H$$$&$N$O!"%-%c%C%7%e5-;v$O4V0c$C$?5-;vHV9f$K$J$C$F$*$j!"$=$l\e(B
+\e$B$O\e(B gnus \e$B$,$I$N5-;v$rFI$s$@$H$_$J$9$+$K1F6A$7$^$9!#\e(B
 
 @node Startup Files
 @section \e$B5/F0%U%!%$%k\e(B
@@ -909,57 +1400,59 @@ gnus \e$B$,$I$N5-;v$rFI$s$@$H$_$J$9$+$K1F6A$7$^$9!#\e(B
 \e$B:#$d!"$"$J$?$O%U%!%$%k\e(B @file{.newsrc} \e$B$K$D$$$F$9$Y$FCN$C$F$$$^$9!#$9$Y$F\e(B
 \e$B$N9XFI>pJs$OEAE}E*$K$3$N%U%!%$%k$KC_@Q$5$l$^$9!#\e(B
 
-@sc{GNUS} \e$B$G$OJ*;v$,>/!9J#;($K$J$C$F$$$^$9!#%U%!%$%k\e(B @file{.newsrc} \e$B$r:G\e(B
+@sc{gnus} \e$B$G$OJ*;v$,>/!9J#;($K$J$C$F$$$^$9!#%U%!%$%k\e(B @file{.newsrc} \e$B$r:G\e(B
 \e$B?7$N$b$N$K$9$k$@$1$G$O$J$/!"%U%!%$%k\e(B @file{.newsrc} \e$B$K$O9g$o$J$$>pJs$rJ]\e(B
-\e$BB8$7$F$*$/$?$a$K\e(B @file{.newsrc.el} \e$B$H8F$P$l$k%U%!%$%k$r;H$$$^$9!#\e(B (\e$B<B:]\e(B
-\e$B$O!"%U%!%$%k\e(B @file{.newsrc} \e$B$NA4$F$N>pJs$rJ#@=$7$FJ];}$7$F$$$^$9!#\e(B)
-@sc{gnus}\e$B$O$3$l$i$NCf$G0lHV:G8e$KJ]B8$5$l$?$b$N$r;H$$$^$9!#$3$l$r$9$k$3\e(B
-\e$B$H$K$h$j!"\e(B@sc{GNUS} \e$B$HB>$N%K%e!<%9%j!<%@!<$r@Z$jBX$($F;H$&$3$H$,$G$-$^$9!#\e(B
+\e$BB8$7$F$*$/$?$a$K\e(B @file{.newsrc.el} \e$B$H8F$P$l$k%U%!%$%k$r;H$$$^$9!#\e(B(\e$B<B:]\e(B
+\e$B$O!"%U%!%$%k\e(B @file{.newsrc} \e$B$NA4$F$N>pJs$rJ#@=$7$FJ];}$7$F$$$^\e(B
+\e$B$9!#\e(B) @sc{gnus}\e$B$O$3$l$i$NCf$G0lHV:G8e$KJ]B8$5$l$?$b$N$r;H$$$^$9!#$3$l$r\e(B
+\e$B$9$k$3$H$K$h$j!"\e(B@sc{gnus} \e$B$HB>$N%K%e!<%9%j!<%@!<$r@Z$jBX$($F;H$&$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
 
 \e$B$3$l$O$A$g$C$H$P$+$JJ}K!$J$N$G!"\e(Bgnus \e$B$O$b$C$HNI$$J}K!$rJT$_=P$7$^$7$?!#\e(B
-@file{.newsrc} \e$B$H\e(B @file{.newsrc.el} \e$B%U%!%$%k$K2C$($F!"\e(Bgnus \e$B$O\e(B
-@file{.newsrc.eld} \e$B$H8F$P$l$k%U%!%$%k$b;}$C$F$$$^$9!#\e(BGnus \e$B$O$3$l$i$NCf$G\e(B
-\e$B0lHV?7$7$$%U%!%$%k$rFI$_$^$9$,!"%U%!%$%k\e(B @file{.newsrc.el} \e$B$K=q$-9~$`$3\e(B
-\e$B$H$O$"$j$^$;$s!#%U%!%$%k\e(B @file{.newsrc.eld} \e$B$O@dBP$K>C$9$Y$-$G$O$"$j$^$;\e(B
-\e$B$s!#\e(B---\e$B$=$l$O%U%!%$%k\e(B @file{.newsrc} \e$B$K$O$J$$$?$/$5$s$N>pJs$rJ];}$7$F$$\e(B
-\e$B$^$9!#\e(B
-
+@file{.newsrc} \e$B$H\e(B @file{.newsrc.el} \e$B%U%!%$%k$K2C$($F!"\e(B
+gnus \e$B$O\e(B @file{.newsrc.eld} \e$B$H8F$P$l$k%U%!%$%k$b;}$C$F$$$^$9!#\e(BGnus \e$B$O$3$l\e(B
+\e$B$i$NCf$G0lHV?7$7$$%U%!%$%k$rFI$_$^$9$,!"%U%!%$%k\e(B @file{.newsrc.el} \e$B$K=q\e(B
+\e$B$-9~$`$3$H$O$"$j$^$;$s!#%U%!%$%k\e(B @file{.newsrc.eld} \e$B$O@dBP$K>C$9$Y$-$G$O\e(B
+\e$B$"$j$^$;$s!#\e(B---\e$B$=$l$O%U%!%$%k\e(B @file{.newsrc} \e$B$K$O$J$$$?$/$5$s$N>pJs$rJ]\e(B
+\e$B;}$7$F$$$^$9!#\e(B
 
 @vindex gnus-save-newsrc-file
 @vindex gnus-read-newsrc-file
-@code{gnus-save-newsrc-file} \e$B$r\e(B @code{nil} \e$B$K$9$k$3$H$K$h$C$F%U%!%$%k\e(B
-@file{.newsrc} \e$B$K=q$-9~$`$N$r;_$a$k$3$H$,$G$-$^$9!#$=$&$9$l$P!"$=$N%U%!\e(B
+@code{gnus-save-newsrc-file} \e$B$r\e(B @code{nil} \e$B$K$9$k$3$H$K$h$C$F%U%!%$\e(B
+\e$B%k\e(B @file{.newsrc} \e$B$K=q$-9~$`$N$r;_$a$k$3$H$,$G$-$^$9!#$=$&$9$l$P!"$=$N%U%!\e(B
 \e$B%$%k$r:o=|$9$k$3$H$,$G$-!"%G%#%9%/MFNL$r@aLs$9$k$3$H$,$G$-!"\e(Bgnus \e$B$N=*N;\e(B
 \e$B$,B.$/$J$j$^$9!#$7$+$7!"$=$&$9$k$HB>$N%K%e!<%9%j!<%@!<$r;H$($J$/$J$j$^$9!#\e(B
-\e$B$G$b!"$A$g$C$H!"C/$+$=$&$7$?$$?M$,$$$k$G$7$g$&$+!#\e(B
-\e$BF1$8$h$&$K\e(B @code{gnus-read-newsrc-file} \e$B$r\e(B @code{nil} \e$B$K$9$k$3$H$K$h$C$F\e(B
-@file{.newsrc} \e$B$H$9$Y$F$N\e(B @file{.newsrc-SERVER} \e$B$r:n$i$J$$$h$&$K$J$j$^$9!#\e(B
-\e$B$b$7$"$J$?$,;~!9\e(B Netscape \e$B$r;H$&$N$J$i$P!"$3$&$9$k$N$,ET9g$,NI$$$G$7$g$&!#\e(B
+\e$B$G$b!"$A$g$C$H!"C/$+$=$&$7$?$$?M$,$$$k$G$7$g$&$+!#F1$8$h$&\e(B
+\e$B$K\e(B @code{gnus-read-newsrc-file} \e$B$r\e(B @code{nil} \e$B$K$9$k$3$H$K$h$C\e(B
+\e$B$F\e(B @file{.newsrc} \e$B$H$9$Y$F$N\e(B @file{.newsrc-SERVER} \e$B$r:n$i$J$$$h$&$K$J$j\e(B
+\e$B$^$9!#$b$7$"$J$?$,;~!9\e(B Netscape \e$B$r;H$&$N$J$i$P!"$3$&$9$k$N$,ET9g$,NI$$$G\e(B
+\e$B$7$g$&!#\e(B
 
 @vindex gnus-save-killed-list
 @code{gnus-save-killed-list} (\e$B=i4|@_Dj$G$O\e(B @code{t}) \e$B$,\e(B @code{nil} \e$B$G$"\e(B
 \e$B$k$H!"\e(Bgnus \e$B$O:o=|$5$l$?%0%k!<%W$r5/F0%U%!%$%k$KJ]B8$7$^$;$s!#$3$l$O!"\e(B(\e$B5/\e(B
-\e$BF0;~$H=*N;;~$N\e(B) \e$B;~4V$H!"\e(B(\e$B%G%#%9%/$N\e(B) \e$BMFNL$r@aLs$7$^$9!#$3$&$9$k$H!"\e(Bgnus
-\e$B$,$I$N%0%k!<%W$,?7$7$$$+$N5-O?$r;}$C$F$$$J$$$3$H$K$J$j$^$9$N$G!"?7$7$$%0\e(B
-\e$B%k!<%W$N<+F09XFIJ}K!$O0UL#$,L5$/$J$j$^$9!#$3$NJQ?t$r\e(B @code{nil} \e$B$K$7$?$H\e(B
-\e$B$-$O!"\e(B@code{gnus-check-new-newsgroups} \e$B$r>o$K\e(B @code{nil} \e$B$+\e(B
-@code{ask-server} \e$B$K$7$F$*$/$Y$-$G$7$g$&\e(B (@pxref{New Groups})\e$B!#$3$NJQ?t\e(B
-\e$B$O@55,I=8=$G$"$k$3$H$b$G$-$^$9!#$=$N$h$&$J>l9g$O!"%U%!%$%k$rJ]B8$9$kD>A0\e(B
-\e$B$K$=$N@55,I=8=$K9gCW$7$J$$$9$Y$F$N%0%k!<%W$r>C5n$7$^$9!#$3$l$O!"$9$Y$F$N\e(B
-\e$B%5!<%P!<$,\e(B @code{ask-server} \e$B$rM}2r$9$k$o$1$G$O$J$$!"$H$$$C$?$h$&$J!"FC\e(B
-\e$BDj$N$"$$$^$$$J>u67$N$H$-$KLr$KN)$D$G$7$g$&!#\e(B
+\e$BF0;~$H=*N;;~$N\e(B) \e$B;~4V$H!"\e(B(\e$B%G%#%9%/$N\e(B) \e$BMFNL$r@aLs$7$^$9!#$3$&$9$k$H!"\e(B
+gnus \e$B$,$I$N%0%k!<%W$,?7$7$$$+$N5-O?$r;}$C$F$$$J$$$3$H$K$J$j$^$9$N$G!"?7\e(B
+\e$B$7$$%0%k!<%W$N<+F09XFIJ}K!$O0UL#$,L5$/$J$j$^$9!#$3$NJQ?t$r\e(B @code{nil} \e$B$K\e(B
+\e$B$7$?$H$-$O!"\e(B@code{gnus-check-new-newsgroups} \e$B$r>o\e(B
+\e$B$K\e(B @code{nil} \e$B$+\e(B @code{ask-server} \e$B$K$7$F$*$/$Y$-$G$7$g\e(B
+\e$B$&\e(B (@pxref{New Groups})\e$B!#$3$NJQ?t$O@55,I=8=$G$"$k$3$H$b$G$-$^$9!#$=$N$h\e(B
+\e$B$&$J>l9g$O!"%U%!%$%k$rJ]B8$9$kD>A0$K$=$N@55,I=8=$K9gCW$7$J$$$9$Y$F$N%0%k!<\e(B
+\e$B%W$r>C5n$7$^$9!#$3$l$O!"$9$Y$F$N%5!<%P!<$,\e(B @code{ask-server} \e$B$rM}2r$9$k\e(B
+\e$B$o$1$G$O$J$$!"$H$$$C$?$h$&$J!"FCDj$N$"$$$^$$$J>u67$N$H$-$KLr$KN)$D$G$7$g\e(B
+\e$B$&!#\e(B
 
 @vindex gnus-startup-file
 \e$BJQ?t\e(B @code{gnus-startup-file} \e$B$O5/F0%U%!%$%k$,$I$3$K$"$k$+$r;XDj$7$^$9!#\e(B
-\e$B=i4|CM$O\e(B @file{~/.newsrc} \e$B$G!"$=$l$,$I$N$h$&$J$b$N$G$"$l!"KvHx$K\e(B
-@samp{.eld} \e$B$r$D$1$?$b$N$,\e(B gnus (El Dingo) \e$B$N5/F0%U%!%$%k$K$J$j$^$9!#\e(B
+\e$B=i4|CM$O\e(B @file{~/.newsrc} \e$B$G!"$=$l$,$I$N$h$&$J$b$N$G$"$l!"KvHx\e(B
+\e$B$K\e(B @samp{.eld} \e$B$r$D$1$?$b$N$,\e(B gnus (El Dingo) \e$B$N5/F0%U%!%$%k$K$J$j$^$9!#\e(B
 
 @vindex gnus-save-newsrc-hook
 @vindex gnus-save-quick-newsrc-hook
 @vindex gnus-save-standard-newsrc-hook
 @code{gnus-save-newsrc-hook} \e$B$O\e(B newsrc \e$B%U%!%$%k$NCf$N$I$l$+$rJ]B8$9$kA0\e(B
-\e$B$K<B9T$5$l$k$N$KBP$7!"\e(B@code{gnus-save-quick-newsrc-hook} \e$B$O%U%!%$%k\e(B
-@file{.newsrc.eld} \e$B$rJ]B8$9$kA0$K<B9T$5$l!"\e(B
+\e$B$K<B9T$5$l$k$N$KBP$7!"\e(B@code{gnus-save-quick-newsrc-hook} \e$B$O%U%!%$\e(B
+\e$B%k\e(B @file{.newsrc.eld} \e$B$rJ]B8$9$kA0$K<B9T$5$l!"\e(B
 @code{gnus-save-standard-newsrc-hook} \e$B$O%U%!%$%k\e(B @file{.newsrc} \e$B$rJ]B8$9\e(B
 \e$B$kA0$K<B9T$5$l$^$9!#8e$NFs$D$OIaDL$OHG4IM}$rF~$l$?$j@Z$C$?$j$9$k$N$K;H$o\e(B
 \e$B$l$^$9!#=i4|@_Dj$G$O!"5/F0%U%!%$%k$rJ]B8$9$k$H$-$KHG4IM}$KF~$j$^$9!#%P%C\e(B
@@ -974,17 +1467,16 @@ gnus \e$B$,$I$N5-;v$rFI$s$@$H$_$J$9$+$K1F6A$7$^$9!#\e(B
 @end lisp
 
 @vindex gnus-init-file
-Gnus \e$B$,5/F0$9$k$H!"\e(B@code{gnus-site-init-file} (\e$B=i4|@_Dj$G$O\e(B
-@file{.../site-lisp/gnus}) \e$B$H\e(B @code{gnus-init-file} (\e$B=i4|@_Dj$G$O\e(B
-@file{~/.gnus}) \e$B$N%U%!%$%k$rFI$_9~$_$^$9!#$3$l$i$OIaDL$N\e(B Emacs Lisp \e$B%U%!\e(B
-\e$B%$%k$G!"\e(B@file{~/.emacs} \e$B$d\e(B @file{site-init} \e$B%U%!%$%k$r\e(B gnus \e$B4X78$N$b$N$G\e(B
-\e$BMp;($K$7$J$$$h$&$K$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#\e(BGnus \e$B$O$3$l$i$HF1$8L>A0\e(B
-\e$B$N%U%!%$%k$rD4$Y$^$9$,!"@\Hx8l\e(B @file{.elc} \e$B$H\e(B @file{.el} \e$B$,$D$$$F$$$k$b\e(B
-\e$B$N$bD4$Y$^$9!#8@$$49$($l$P!"\e(B@code{gnus-init-file} \e$B$r\e(B @file{~/.gnus} \e$B$K@_\e(B
-\e$BDj$9$k$H!"\e(Bgnus \e$B$O\e(B (\e$B$3$N=gHV$K\e(B) @file{~/.gnus.elc} \e$B!"\e(B@file{~/.gnus.el} \e$B$r\e(B
-\e$BC5$7!":G8e$K\e(B @file{~/.gnus} \e$B$rC5$7$^$9!#\e(B
-
-
+Gnus \e$B$,5/F0$9$k$H!"\e(B@code{gnus-site-init-file} (\e$B=i4|@_Dj$G\e(B
+\e$B$O\e(B @file{.../site-lisp/gnus}) \e$B$H\e(B @code{gnus-init-file} (\e$B=i4|@_Dj$G\e(B
+\e$B$O\e(B @file{~/.gnus}) \e$B$N%U%!%$%k$rFI$_9~$_$^$9!#$3$l$i$OIaDL\e(B
+\e$B$N\e(B Emacs Lisp \e$B%U%!%$%k$G!"\e(B@file{~/.emacs} \e$B$d\e(B @file{site-init} \e$B%U%!%$%k\e(B
+\e$B$r\e(B gnus \e$B4X78$N$b$N$GMp;($K$7$J$$$h$&$K$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#\e(B
+Gnus \e$B$O$3$l$i$HF1$8L>A0$N%U%!%$%k$rD4$Y$^$9$,!"@\Hx\e(B
+\e$B8l\e(B @file{.elc} \e$B$H\e(B @file{.el} \e$B$,$D$$$F$$$k$b$N$bD4$Y$^$9!#8@$$49$($l$P!"\e(B
+@code{gnus-init-file} \e$B$r\e(B @file{~/.gnus} \e$B$K@_Dj$9$k$H!"\e(Bgnus \e$B$O\e(B (\e$B$3$N=gHV\e(B
+\e$B$K\e(B) @file{~/.gnus.elc}, @file{~/.gnus.el} \e$B$rC5$7!":G8e\e(B
+\e$B$K\e(B @file{~/.gnus} \e$B$rC5$7$^$9!#\e(B
 
 @node Auto Save
 @section \e$B<+F0J]B8\e(B
@@ -1013,10 +1505,8 @@ gnus \e$B$O%U%!%$%k\e(B@file{.newsrc} \e$B$NCV$+$l$F$$$k%G%#%l%/%H%j\e(B (\e$B$3$l$OI
 \e$B%I%j%V%k%U%!%$%k$O\e(B @code{.newsrc} \e$B$HF1$85v2DB0@-$rM?$($i$l$^$9!#\e(B
 
 @vindex gnus-always-read-dribble-file
-\e$B$b$7\e(B @code{gnus-always-read-dribble-file} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"\e(Bgnus
-\e$B$OMxMQ<T$K?R$M$k;vL5$/!"%I%j%V%k%U%!%$%k$r5/F0;~$KFI$_9~$_$^$9!#\e(B
-
-
+\e$B$b$7\e(B @code{gnus-always-read-dribble-file} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"\e(B
+gnus \e$B$OMxMQ<T$K?R$M$k;vL5$/!"%I%j%V%k%U%!%$%k$r5/F0;~$KFI$_9~$_$^$9!#\e(B
 
 @node The Active File
 @section \e$B%"%/%F%#%V%U%!%$%k\e(B
@@ -1028,12 +1518,13 @@ Gnus \e$B$O5/F0$7$?$H$-$d!"<B:]$K?7$7$$5-;v$,E~Ce$7$F$$$k$+$r7hDj$7$h$&$H$9\e(B
 \e$B$=$N%5!<%P!<$N3hF0Cf$N%0%k!<%W$H5-;v$N$9$Y$F$N%j%9%H$,F~$C$F$$$^$9!#\e(B
 
 @vindex gnus-ignored-newsgroups
-\e$B%"%/%F%#%V%U%!%$%k$r8!::$9$kA0$K!"\e(Bgnus \e$B$O@55,I=8=\e(B
-@code{gnus-ignored-newsgroups} \e$B$K9g$&$9$Y$F$N9T$r:o=|$7$^$9!#$3$l$O<g$K\e(B
-\e$B56$NL>A0$r;}$D%0%k!<%W$rGS=|$9$k$?$a$K;H$o$l$F$-$^$7$?$,!"6=L#$NL5$$%0%k!<\e(B
-\e$B%W$N3,AX$rL5;k$9$k$?$a$K;H$&$3$H$b$G$-$^$9!#$7$+$7!"$3$l$O$*4+$a$G$-$^$;\e(B
-\e$B$s!#K\Ev$N$3$H$r8@$&$H!"A4$/;?@.$G$-$^$;$s!#Be$o$j$K!"$=$N$h$&$JMQES$KMQ\e(B
-\e$B$$$i$l$kJQ?t$N35N,$rCN$k$?$a$K!"\e(B@pxref{New Groups} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+\e$B%"%/%F%#%V%U%!%$%k$r8!::$9$kA0$K!"\e(Bgnus \e$B$O@55,I=\e(B
+\e$B8=\e(B @code{gnus-ignored-newsgroups} \e$B$K9g$&$9$Y$F$N9T$r:o=|$7$^$9!#$3$l$O<g\e(B
+\e$B$K56$NL>A0$r;}$D%0%k!<%W$rGS=|$9$k$?$a$K;H$o$l$F$-$^$7$?$,!"6=L#$NL5$$%0\e(B
+\e$B%k!<%W$N3,AX$rL5;k$9$k$?$a$K;H$&$3$H$b$G$-$^$9!#$7$+$7!"$3$l$O$*4+$a$G$-\e(B
+\e$B$^$;$s!#K\Ev$N$3$H$r8@$&$H!"A4$/;?@.$G$-$^$;$s!#Be$o$j$K!"$=$N$h$&$JMQES\e(B
+\e$B$KMQ$$$i$l$kJQ?t$N35N,$rCN$k$?$a$K!"\e(B@pxref{New Groups} \e$B$r;2>H$7$F$/$@$5\e(B
+\e$B$$!#\e(B
 
 @c This variable is
 @c @code{nil} by default, and will slow down active file handling somewhat
@@ -1042,9 +1533,9 @@ Gnus \e$B$O5/F0$7$?$H$-$d!"<B:]$K?7$7$$5-;v$,E~Ce$7$F$$$k$+$r7hDj$7$h$&$H$9\e(B
 @vindex gnus-read-active-file
 @c @head
 \e$B%"%/%F%#%V%U%!%$%k$OHf3SE*Bg$-$/$J$k798~$,$"$k$N$G!"CY$$2s@~$r;H$C$F$$$k\e(B
-\e$B$H$-$O!"%"%/%F%#%V%U%!%$%k$rFI$_9~$^$J$$$h$&$K\e(B
-@code{gnus-read-active-file} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#$3\e(B
-\e$B$NJQ?t$O=i4|@_Dj$G$O\e(B @code{some} \e$B$G$9!#\e(B
+\e$B$H$-$O!"%"%/%F%#%V%U%!%$%k$rFI$_9~$^$J$$$h$&\e(B
+\e$B$K\e(B @code{gnus-read-active-file} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$NJQ?t$O=i4|@_Dj$G$O\e(B @code{some} \e$B$G$9!#\e(B
 
 \e$B$=$N$h$&$J;~$O!"\e(Bgnus \e$B$O<B:]$K9XFI$5$l$F$$$k%0%k!<%W$K4X$9$k>pJs$@$1$rF@\e(B
 \e$B$F$d$C$F$$$3$&$H$7$^$9!#\e(B
@@ -1056,14 +1547,14 @@ Gnus \e$B$O5/F0$7$?$H$-$d!"<B:]$K?7$7$$5-;v$,E~Ce$7$F$$$k$+$r7hDj$7$h$&$H$9\e(B
 
 \e$B$3$NJQ?t$O\e(B @code{some} \e$B$H$$$&CM$b<h$k$3$H$,$G$-$^$9!#$=$N;~$O!"\e(Bgnus \e$B$O8=\e(B
 \e$B>u$N>pJs$r9XFI$5$l$F$$$k%0%k!<%W$N$b$N$@$1$rF@$h$&$H$7$^$9!#$$$/$D$+$N%5!<\e(B
-\e$B%P!<\e(B (\e$BL?Na\e(B@code{LIST ACTIVE group} \e$B$r;H$&$3$H$N$G$-$k!":G?71T$N\e(B INN \e$B%5!<\e(B
+\e$B%P!<\e(B (\e$BL?Na\e(B @code{LIST ACTIVE group} \e$B$r;H$&$3$H$N$G$-$k!":G?71T$N\e(B INN \e$B%5!<\e(B
 \e$B%P!<\e(B) \e$B$G$O!"Hs>o$KAa$/$J$k$G$7$g$&$,!"B>$N%5!<%P!<$G$OB.$/$O$"$j$^$;$s!#\e(B
 \e$B$I$N$h$&$K$;$h!"CY$$2s@~$G$O\e(B @code{some} \e$B$O\e(B @code{nil} \e$B$h$j$bB.$/!"$=$l\e(B
 \e$B$O$b$A$m$s\e(B@code{t} \e$B$h$j$bB.$/$J$j$^$9!#\e(B
 
-\e$B$$$/$D$+$N%K%e!<%9%5!<%P!<\e(B (\e$BNc$($P\e(B Leafnode \e$B$d8E$$\e(B INN) \e$B$K$OL?Na\e(B
-@code{LIST ACTIVE group} \e$B$,$"$j$^$;$s!#$=$&$$$&%5!<%P!<$K$O\e(B @code{nil} \e$B$r\e(B
-\e$B$3$NJQ?t$NCM$K@_Dj$9$k$N$,!"$*$=$i$/$b$C$H$bM-8z$G$7$g$&!#\e(B
+\e$B$$$/$D$+$N%K%e!<%9%5!<%P!<\e(B (\e$BNc$($P\e(B Leafnode \e$B$d8E$$\e(B INN) \e$B$K$OL?\e(B
+\e$BNa\e(B @code{LIST ACTIVE group} \e$B$,$"$j$^$;$s!#$=$&$$$&%5!<%P!<$K\e(B
+\e$B$O\e(B @code{nil} \e$B$r$3$NJQ?t$NCM$K@_Dj$9$k$N$,!"$*$=$i$/$b$C$H$bM-8z$G$7$g$&!#\e(B
 
 \e$B$b$7$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O40A4$K$,$s$8$,$i$a$NJ}K!$G%0\e(B
 \e$B%k!<%W$N>pJs$rF@$h$&$H$7$^$9!#$=$7$F!"$3$l$O$"$^$jB.$/$"$j$^$;$s!#$b$7$=\e(B
@@ -1072,15 +1563,14 @@ Gnus \e$B$O5/F0$7$?$H$-$d!"<B:]$K?7$7$$5-;v$,E~Ce$7$F$$$k$+$r7hDj$7$h$&$H$9\e(B
 \e$BNI$$7k2L$r$b$?$i$7$^$9$,!"%5!<%P!<$,L?Na\e(B @code{LIST ACTIVE group} \e$B$rM}2r\e(B
 \e$B$7$J$$$J$i!"%5!<%P!<$K$H$C$F$O$"$^$jNI$$$H$O8@$($^$;$s!#\e(B
 
-Gnus \e$B$N5/F0$K$"$^$j$K;~4V$,$+$+$k$H;W$C$?$J$i!"$3$NJQ?t$K$3$l$i$N\e(B3\e$B$D$N0c$C\e(B
-\e$B$?CM$r;n$7$F$_$F!"$I$l$,0lHVNI$$$+$rC5$7$F$/$@$5$$!#\e(B
+Gnus \e$B$N5/F0$K$"$^$j$K;~4V$,$+$+$k$H;W$C$?$J$i!"$3$NJQ?t$K$3$l$i$N;0$D$N\e(B
+\e$B0c$C$?CM$r;n$7$F$_$F!"$I$l$,0lHVNI$$$+$rC5$7$F$/$@$5$$!#\e(B
 
 @code{some} \e$B$+\e(B @code{nil} \e$B$r;H$&$N$G$"$l$P!"$I$A$i$K$7$mB.EY$r>e$2$k$?$a\e(B
 \e$B$K$9$Y$F$N6=L#$NL5$$%0%k!<%W$rI,$::o=|$9$k$Y$-$G$7$g$&!#\e(B
 
-\e$B$3$NJQ?t$O\e(B2\e$B<!\e(B (secondary) \e$BA*BrJ}K!$N%"%/%F%#%V%U%!%$%k<hF@$K$b1F6A$9$k$3\e(B
-\e$B$H$K5$$rIU$1$F$/$@$5$$!#\e(B
-
+\e$B$3$NJQ?t$OFs<!\e(B (secondary) \e$BA*BrJ}K!$N%"%/%F%#%V%U%!%$%k<hF@$K$b1F6A$9$k\e(B
+\e$B$3$H$K5$$rIU$1$F$/$@$5$$!#\e(B
 
 @node Startup Variables
 @section \e$B5/F0JQ?t\e(B
@@ -1089,9 +1579,9 @@ Gnus \e$B$N5/F0$K$"$^$j$K;~4V$,$+$+$k$H;W$C$?$J$i!"$3$NJQ?t$K$3$l$i$N\e(B3\e$B$D$N0
 
 @item gnus-load-hook
 @vindex gnus-load-hook
-Gnus \e$B$,FI$_9~$^$l$F$$$k$H$-$K<B9T$5$l$k%U%C%/$G$9!#2?EY\e(B gnus \e$B$r5/F0$7$F$b!"\e(B
-Emacs \e$B$,5/F0$7$F$+$i=*N;$9$k$^$G$KIaDL$O$3$N%U%C%/$O0l2s$7$+<B9T$5$l$J$$$3\e(B
-\e$B$H$KCm0U$7$F$/$@$5$$!#\e(B
+Gnus \e$B$,FI$_9~$^$l$F$$$k$H$-$K<B9T$5$l$k%U%C%/$G$9!#2?EY\e(B gnus \e$B$r5/F0$7$F\e(B
+\e$B$b!"\e(BEmacs \e$B$,5/F0$7$F$+$i=*N;$9$k$^$G$KIaDL$O$3$N%U%C%/$O0l2s$7$+<B9T$5$l\e(B
+\e$B$J$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B
 
 @item gnus-before-startup-hook
 @vindex gnus-before-startup-hook
@@ -1118,8 +1608,8 @@ Gnus \e$B$N5/F0$K@.8y$7$?8e$K!"0lHV:G8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
 \e$B%k$K$OB8:_$9$k$1$l$I!"%K%e!<%9%5!<%P!<$K$O<B:]$K$OB8:_$7$J$$!"$H$$$&%0%k!<\e(B
 \e$B%W$N$3$H$G$9!#56%0%k!<%W$rD4$Y$k$N$K$O$+$J$j;~4V$,$+$+$j$^$9$N$G!";~4V$H\e(B
 \e$B;q8;$r@aLs$9$k$?$a$K!"$3$N5!G=$O;H$o$J$$$[$&$,$$$$$G$7$g$&!#$=$7$F!"Be$o\e(B
-\e$B$j$K%0%k!<%W%P%C%U%!$G;~!956%0%k!<%W$rD4$Y$k$N$,NI$$$G$7$g$&\e(B
-(@pxref{Group Maintenance})\e$B!#\e(B
+\e$B$j$K%0%k!<%W%P%C%U%!$G;~!956%0%k!<%W$rD4$Y$k$N$,NI$$$G$7$g\e(B
+\e$B$&\e(B (@pxref{Group Maintenance})\e$B!#\e(B
 
 @item gnus-inhibit-startup-message
 @vindex gnus-inhibit-startup-message
@@ -1138,21 +1628,19 @@ Gnus \e$B$N5/F0$K@.8y$7$?8e$K!"0lHV:G8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
 
 @item gnus-startup-jingle
 @vindex gnus-startup-jingle
-\e$B>e$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H$-$K1iAU$5$l$kC;$$6J$G$9!#=i4|CM$O\e(B
-@samp{Tuxdemoon.Jingle4.au} \e$B$G$9!#\e(B
+\e$B>e$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H$-$K1iAU$5$l$kC;$$6J$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{Tuxdemoon.Jingle4.au} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node The Group Buffer
 @chapter \e$B%0%k!<%W%P%C%U%!\e(B
 @cindex group buffer
 
-\e$B%0%k!<%W%P%C%U%!\e(B (@dfn{group buffer}) \e$B$OM-8z$J%0%k!<%W$rA4It!J$"$k$$$O0l\e(B
-\e$BIt$r!K0lMwI=<($7$^$9!#$3$l$O\e(B gnus \e$B$r5/F0$7$?$H$-$K:G=i$KI=<($5$l$k%P%C%U%!\e(B
+\e$B%0%k!<%W%P%C%U%!\e(B (@dfn{group buffer}) \e$B$OM-8z$J%0%k!<%W$rA4It\e(B (\e$B$"$k$$$O0l\e(B
+\e$BIt$r\e(B) \e$B0lMwI=<($7$^$9!#$3$l$O\e(B gnus \e$B$r5/F0$7$?$H$-$K:G=i$KI=<($5$l$k%P%C%U%!\e(B
 \e$B$G!"\e(Bgnus \e$B$,@8$-$F$$$k8B$j7h$7$F>C$5$l$k$3$H$O$"$j$^$;$s!#\e(B
 
-
 @iftex
 @iflatex
 \gnusfigure{The Group Buffer}{320}{
@@ -1168,42 +1656,40 @@ Gnus \e$B$N5/F0$K@.8y$7$?8e$K!"0lHV:G8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
 @end iftex
 
 @menu
-* Group Buffer Format::    \e$BI=<($5$l$F$$$k>pJs$HJQ99$NJ}K!!#\e(B
-* Group Maneuvering::      \e$B%0%k!<%W%P%C%U%!$r0\F0$9$k%3%^%s%I!#\e(B
-* Selecting a Group::      \e$B<B:]$K%K%e!<%9$rFI$`!#\e(B
-* Group Data::             \e$B%0%k!<%W$N>pJs$rJQ99$9$k!#\e(B
-* Subscription Commands::  \e$B9XFI!"9XFICf;_!">C5n!#\e(B
-* Group Levels::           \e$B%l%Y%k!)$=$l$C$F2?!)\e(B
-* Group Score::            \e$B$"$J$?$N9%$-$J%0%k!<%W$r8+$D$1=P$9J}K!!#\e(B
-* Marking Groups::         \e$B%0%k!<%W$K0u$r$D$1$F$*$$$F!"8e$G=hM}$G$-$^$9!#\e(B
-* Foreign Groups::         \e$B%0%k!<%W$N:n@.$H=$@5!#\e(B
-* Group Parameters::       \e$B%0%k!<%WKh$K0c$C$?%Q%i%a!<%?$r;}$?$;$i$l$^$9!#\e(B
-* Listing Groups::         Gnus \e$B$O%0%k!<%W$r$$$m$$$m$JJ,$1J}$GI=<($G$-$^$9!#\e(B
-* Sorting Groups::         \e$B%0%k!<%W$N=gHV$NG[CVBX$(!#\e(B
-* Group Maintenance::      \e$B$-$l$$$J\e(B @file{.newsrc} \e$B$NJ]$AJ}!#\e(B
-* Browse Foreign Server::  \e$B%5!<%P$r354Q$G$-$k!#2?$,FI$a$k$N$+8+$F$_$h$&!#\e(B
-* Exiting Gnus::           \e$B%K%e!<%9FI$`$N$r$d$a$F!";E;v$r$7$h$&!#\e(B
-* Group Topics::           \e$B%0%k!<%W$r@Z$j:.$<$F!"%H%T%C%/$4$H$KJ,3d$9$k!#\e(B
-* Misc Group Stuff::       \e$BB>$K$G$-$k$3$H!#\e(B
+* Group Buffer Format::   \e$BI=<($5$l$F$$$k>pJs$HJQ99$NJ}K!\e(B
+* Group Maneuvering::     \e$B%0%k!<%W%P%C%U%!$r0\F0$9$k%3%^%s%I\e(B
+* Selecting a Group::     \e$B<B:]$K%K%e!<%9$rFI$`\e(B
+* Group Data::            \e$B%0%k!<%W$N>pJs$rJQ99$9$k\e(B
+* Subscription Commands:: \e$B9XFI!"9XFICf;_!">C5n\e(B
+* Group Levels::          \e$B%l%Y%k\e(B? \e$B$=$l$C$F2?\e(B?
+* Group Score::           \e$B$"$J$?$N9%$-$J%0%k!<%W$r8+$D$1=P$9J}K!\e(B
+* Marking Groups::        \e$B%0%k!<%W$K0u$r$D$1$F$*$$$F!"8e$G=hM}$G$-$^$9\e(B
+* Foreign Groups::        \e$B%0%k!<%W$N:n@.$H=$@5\e(B
+* Group Parameters::      \e$B%0%k!<%WKh$K0c$C$?%Q%i%a!<%?$r;}$?$;$i$l$^$9\e(B
+* Listing Groups::        Gnus \e$B$O%0%k!<%W$r$$$m$$$m$JJ,$1J}$GI=<($G$-$^$9\e(B
+* Sorting Groups::        \e$B%0%k!<%W$N=gHV$NG[CVBX$(\e(B
+* Group Maintenance::     \e$B$-$l$$$J\e(B @file{.newsrc} \e$B$NJ]$AJ}\e(B
+* Browse Foreign Server:: \e$B%5!<%P$r354Q$G$-$k!#2?$,FI$a$k$N$+8+$F$_$h$&\e(B
+* Exiting Gnus::          \e$B%K%e!<%9FI$`$N$r$d$a$F!";E;v$r$7$h$&\e(B
+* Group Topics::          \e$B%0%k!<%W$r@Z$j:.$<$F!"%H%T%C%/$4$H$KJ,3d$9$k\e(B
+* Misc Group Stuff::      \e$BB>$K$G$-$k$3$H\e(B
 @end menu
 
-
 @node Group Buffer Format
 @section \e$B%0%k!<%W%P%C%U%!$N7A<0\e(B
 
 @menu
-* Group Line Specification::       \e$B%0%k!<%W%P%C%U%!$N8+$(J}$r7h$a$k!#\e(B
-* Group Modeline Specification::   \e$B%0%k!<%W%P%C%U%!$N%b!<%I9T!#\e(B
-* Group Highlighting::             \e$B%0%k!<%W%P%C%U%!$K$-$l$$$K?'$r$D$1$k!#\e(B
+* Group Line Specification::     \e$B%0%k!<%W%P%C%U%!$N8+$(J}$r7h$a$k\e(B
+* Group Modeline Specification:: \e$B%0%k!<%W%P%C%U%!$N%b!<%I9T\e(B
+* Group Highlighting::           \e$B%0%k!<%W%P%C%U%!$K$-$l$$$K?'$r$D$1$k\e(B
 @end menu
 
-
 @node Group Line Specification
 @subsection \e$B%0%k!<%W9T$N;EMM\e(B
 @cindex group buffer format
 
-\e$B%0%k!<%W%P%C%U%!$N=i4|@_Dj7A<0$O$-$l$$$G$D$^$s$J$$$1$I!"$3\e(B
-\e$B$l$O7/$N9%$-$J$h$&$K!"%5%$%3!<$K%@%5$/$9$k$3$H$b$G$-$^$9!#\e(B
+\e$B%0%k!<%W%P%C%U%!$N=i4|@_Dj7A<0$O$-$l$$$G$D$^$s$J$$$1$I!"$3$l$O7/$N9%$-$J\e(B
+\e$B$h$&$K!"%5%$%3!<$K%@%5$/$9$k$3$H$b$G$-$^$9!#\e(B
 
 \e$B$3$l$,%0%k!<%W9T$NNc$G$9!#\e(B
 
@@ -1212,30 +1698,29 @@ Gnus \e$B$N5/F0$K@.8y$7$?8e$K!"0lHV:G8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
  *    0: alt.fan.andrea-dworkin
 @end example
 
-\e$B$H$C$F$b4JC1$G$7$g!)\e(B
+\e$B$H$C$F$b4JC1$G$7$g\e(B?
 
 @samp{news.announce.newusers} \e$B$K$O\e(B 25 \e$B$NL$FI5-;v$,$"$k$N$,$o$+$j$^$9!#\e(B
-@samp{alt.fan.andrea-dworkin} \e$B$K$OL$FI5-;v$O$J$$$1$l$I$b!"0u$r$D$1$?5-;v$,\e(B
-\e$B$$$/$D$+$"$j$^$9!J9TF,$N$A$C$A$c$J%"%9%?%j%9%/$,8+$($k!)!K!#\e(B
+@samp{alt.fan.andrea-dworkin} \e$B$K$OL$FI5-;v$O$J$$$1$l$I$b!"0u$r$D$1$?5-;v\e(B
+\e$B$,$$$/$D$+$"$j$^$9\e(B (\e$B9TF,$N$A$C$A$c$J%"%9%?%j%9%/$,8+$($k\e(B?)\e$B!#\e(B
 
 @vindex gnus-group-line-format
-\e$B$3$N7A<0$O\e(B @code{gnus-group-line-format} \e$BJQ?t$r$$$8$k$3$H$G!"$I$s$JIw$K$G\e(B
-\e$B$bJQ$($i$l$^$9!#$3$NJQ?t$O\e(B @code{format} \e$B$N;EMMIw$KF0:n$7$^$9!#$D$^$j!J$"\e(B
-\e$B$N%/%=!K\e(BC \e$B8@8l$r;H$&?M$?$A$N$?$a!"\e(Bprintf \e$B$N;EMM$H$[$\F1$8$G$9!#\e(B
+\e$B$3$N7A<0$O\e(B @code{gnus-group-line-format} \e$BJQ?t$r$$$8$k$3$H$G!"$I$s$JIw$K\e(B
+\e$B$G$bJQ$($i$l$^$9!#$3$NJQ?t$O\e(B @code{format} \e$B$N;EMMIw$KF0:n$7$^$9!#$D$^\e(B
+\e$B$j\e(B (\e$B$"$N%/%=\e(B) C \e$B8@8l$r;H$&?M$?$A$N$?$a!"\e(Bprintf \e$B$N;EMM$H$[$\F1$8$G$9!#\e(B
 @xref{Formatting Variables}
 
 @samp{%M%S%5y: %(%g%)\n} \e$B$H$$$&CM$G>e5-$N9T$r@8@.$7$^$9!#\e(B
 
-\e$B%3%m%s$O!"$3$N9T$NCf$KI,$:L5$/$F$O$$$1$^$;$s!#%+!<%=%k$O!"2?$+$NA`:n$r$7$?\e(B
-\e$B8e$O>o$K%3%m%s$N$H$3$m$K0\F0$9$k$+$i$G$9!#B>$K$O2?$bI,MW$G$O$"$j$^$;$s!=!=\e(B
-\e$B%0%k!<%WL>$5$($b$G$9!#I=<($5$l$F$$$kJ8;z$OA4$F$?$@$N2hLL$N>~$j$G$"$j!"\e(B
-gnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$OI,MW$H$9$kA4$F$N<B>pJs$r!"%F%-\e(B
-\e$B%9%HB0@-$r;H$C$F21$($F$$$^$9!#\e(B
-
+\e$B%3%m%s$O!"$3$N9T$NCf$KI,$:L5$/$F$O$$$1$^$;$s!#%+!<%=%k$O!"2?$+$NA`:n$r$7\e(B
+\e$B$?8e$O>o$K%3%m%s$N$H$3$m$K0\F0$9$k$+$i$G$9!#B>$K$O2?$bI,MW$G$O$"$j$^$;\e(B
+\e$B$s!=!=%0%k!<%WL>$5$($b$G$9!#I=<($5$l$F$$$kJ8;z$OA4$F$?$@$N2hLL$N>~$j$G$"\e(B
+\e$B$j!"\e(Bgnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$OI,MW$H$9$kA4$F$N<B>pJs$r!"\e(B
+\e$B%F%-%9%HB0@-$r;H$C$F21$($F$$$^$9!#\e(B
 
-\e$B!J$b$77/$,!"$9$4$/%X%s$J!"AG@2$i$7$$!"I=7W;;Iw$N%l%$%"%&%H$r:n$C$?$H$7$?$i!"\e(B
-\e$B$_$s$J!"7/$O2q7W$N;E;v$,K;$7$/$C$F!"%K%e!<%9$rFI$s$G;~4V$rL5BL;H$$$7$?$j$J\e(B
-\e$B$s$+$7$F$J$$!"$C$F?.$8$F$/$l$k$h!#!K\e(B
+(\e$B$b$77/$,!"$9$4$/%X%s$J!"AG@2$i$7$$!"I=7W;;Iw$N%l%$%"%&%H$r:n$C$?$H$7$?\e(B
+\e$B$i!"$_$s$J!"7/$O2q7W$N;E;v$,K;$7$/$C$F!"%K%e!<%9$rFI$s$G;~4V$rL5BL;H$$$7\e(B
+\e$B$?$j$J$s$+$7$F$J$$!"$C$F?.$8$F$/$l$k$h!#\e(B)
 
 \e$B0J2<$,;HMQ$G$-$k%U%)!<%^%C%HJ8;z$N%j%9%H$G$9!#\e(B
 
@@ -1263,7 +1748,7 @@ gnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$OI,MW$H$9$kA4$F$N<B>pJs$r!"%
 \e$B4{FI5-;v$N?t!#\e(B
 
 @item t
-\e$B?dDjA45-;v?t!J$3$l$O<B:]$O\e(B @var{max-number} - @var{min-number} + 1\e$B!K!#\e(B
+\e$B?dDjA45-;v?t\e(B (\e$B$3$l$O<B:]$O\e(B @var{max-number} - @var{min-number} + 1)\e$B!#\e(B
 
 @item y
 \e$BL$FI$G$b!"0uIU$-$G$b!"J]N1$G$b$J$$5-;v$N?t!#\e(B
@@ -1300,42 +1785,43 @@ gnus \e$B$,$=$l$rD4$Y$k$3$H$O$"$j$^$;$s!#\e(BGnus \e$B$OI,MW$H$9$kA4$F$N<B>pJs$r!"%
 
 @item c
 @vindex gnus-group-uncollapsed-levels
-\e$BC;$$!J>JN,$7$?!K%0%k!<%WL>!#\e(B@code{gnus-group-uncollapsed-levels} \e$BJQ?t$O!"\e(B
+\e$BC;$$\e(B (\e$B>JN,$7$?\e(B) \e$B%0%k!<%WL>!#\e(B@code{gnus-group-uncollapsed-levels} \e$BJQ?t$O!"\e(B
 \e$B$I$N%l%Y%k$^$G%0%k!<%WL>$rA4It;D$9$+$r<($7$^$9!#=i4|CM$O\e(B 1 \e$B$G$9!=!=$3\e(B
-\e$B$N0UL#$O!"\e(B@samp{gnu.emacs.gnus} \e$B$N$h$&$J%0%k!<%WL>$r\e(B @samp{g.e.gnus}
-\e$B$KC;=L$9$k$H$$$&$3$H$G$9!#\e(B
+\e$B$N0UL#$O!"\e(B@samp{gnu.emacs.gnus} \e$B$N$h$&$J%0%k!<%WL>\e(B
+\e$B$r\e(B @samp{g.e.gnus} \e$B$KC;=L$9$k$H$$$&$3$H$G$9!#\e(B
 
 @item m
 @vindex gnus-new-mail-mark
 @cindex %
-\e$B$=$N%0%k!<%W$K:G6a?7Ce%a!<%k$,FO$$$F$$$k>l9g$O\e(B @samp{%}
-(@code{gnus-new-mail-mark})\e$B!#\e(B
+\e$B$=$N%0%k!<%W$K:G6a?7Ce%a!<%k$,FO$$$F$$$k>l9g\e(B
+\e$B$O\e(B @samp{%} (@code{gnus-new-mail-mark})\e$B!#\e(B
 
 @item d
 \e$B:G8e$K$$$D$3$N%0%k!<%W$rFI$s$@$+$r<($9J8;zNs\e(B (@pxref{Group Timestamp})\e$B!#\e(B
 
 @item u
-\e$BMxMQ<TDj5A;XDj!#%U%)!<%^%C%HJ8;zNsCf$G!"$3$N<!$NJ8;z$O%"%k%U%!%Y%C%HJ8;z$G\e(B
-\e$B$J$1$l$P$$$1$^$;$s!#\e(BGnus \e$B$O\e(B @code{gnus-user-format-function-}@samp{X} \e$B4X?t\e(B
-\e$B$r8F$S=P$7$^$9!#$3$3$G\e(B @samp{X} \e$B$O\e(B @samp{%u} \e$B$KB3$$$F$$$kJ8;z$G$9!#$3$N4X\e(B
-\e$B?t$O0z?t$K!"0l$D$N%@%_!<%Q%i%a!<%?$rEO$5$l$^$9!#$3$N4X?t$O!"B>$N3F;XDjJ8;z\e(B
-\e$B$N>pJs$HF1MM$K!"%P%C%U%!$KA^F~$5$l$kJ8;zNs$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B
+\e$BMxMQ<TDj5A;XDj!#%U%)!<%^%C%HJ8;zNsCf$G!"$3$N<!$NJ8;z$O%"%k%U%!%Y%C%HJ8;z\e(B
+\e$B$G$J$1$l$P$$$1$^$;$s!#\e(B
+Gnus \e$B$O\e(B @code{gnus-user-format-function-}@samp{X} \e$B4X?t$r8F$S=P$7$^$9!#$3\e(B
+\e$B$3$G\e(B @samp{X} \e$B$O\e(B @samp{%u} \e$B$KB3$$$F$$$kJ8;z$G$9!#$3$N4X?t$O0z?t$K!"0l$D\e(B
+\e$B$N%@%_!<%Q%i%a!<%?$rEO$5$l$^$9!#$3$N4X?t$O!"B>$N3F;XDjJ8;z$N>pJs$HF1MM$K!"\e(B
+\e$B%P%C%U%!$KA^F~$5$l$kJ8;zNs$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B
 @end table
 
 @cindex *
-\e$BA4$F$N!V!A$N?t!W$N;XDj$G!"$b$7$=$N>pJs$,MxMQ$G$-$J$$>l9g$K$O%"%9%?%j%9%/\e(B
-(@samp{*}) \e$B$,Kd$a$i$l$^$9!=!=Nc$($P!"5/F0$5$l$F$$$J$$30It%0%k!<%W$d!"IT@5\e(B
-\e$B$J4pK\%0%k!<%W$N>l9g$G$9!#\e(B
-
+\e$BA4$F$N!V!A$N?t!W$N;XDj$G!"$b$7$=$N>pJs$,MxMQ$G$-$J$$>l9g$K$O%"%9%?%j%9\e(B
+\e$B%/\e(B (@samp{*}) \e$B$,Kd$a$i$l$^$9!=!=Nc$($P!"5/F0$5$l$F$$$J$$30It%0%k!<%W$d!"\e(B
+\e$BIT@5$J4pK\%0%k!<%W$N>l9g$G$9!#\e(B
 
 @node Group Modeline Specification
 @subsection \e$B%0%k!<%W%b!<%I9T$N;EMM\e(B
 @cindex group modeline
 
 @vindex gnus-group-mode-line-format
-\e$B%b!<%I9T$O\e(B @code{gnus-group-mode-line-format} (@pxref{Mode Line
-Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
-\e$B$/$5$sCN$C$F$^$;$s!#\e(B
+\e$B%b!<%I9T\e(B
+\e$B$O\e(B @code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}) \e$B$r\e(B
+\e$B@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?$/$5$sCN$C$F$^$;\e(B
+\e$B$s!#\e(B
 
 @table @samp
 @item S
@@ -1344,32 +1830,33 @@ Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
 \e$B4pK\A*BrJ}K!!#\e(B
 @end table
 
-
 @node Group Highlighting
 @subsection \e$B%0%k!<%W$N%O%$%i%$%H\e(B
 @cindex highlighting
 @cindex group highlighting
 
 @vindex gnus-group-highlight
-\e$B%0%k!<%W%P%C%U%!$N%O%$%i%$%H$O\e(B @code{gnus-group-highlight} \e$BJQ?t\e(B
-\e$B$K$h$C$F@)8f$5$l$F$$$^$9!#$3$l$O\e(B @code{(@var{form} . @var{face})} \e$B$N$h\e(B
-\e$B$&$J$b$N$rMWAG$K;}$DO"A[%j%9%H$G$9!#\e(B@var{form} \e$B$,2?$+\e(B @code{nil} \e$B0J30\e(B
-\e$B$KI>2A$5$l$k$b$N$J$i!"$=$N9T$KBP$7$F\e(B @var{face} \e$B$,;HMQ$5$l$^$9!#\e(B
+\e$B%0%k!<%W%P%C%U%!$N%O%$%i%$%H$O\e(B @code{gnus-group-highlight} \e$BJQ?t$K$h$C$F\e(B
+\e$B@)8f$5$l$F$$$^$9!#$3$l$O\e(B @code{(@var{form} . @var{face})} \e$B$N$h$&$J$b$N$r\e(B
+\e$BMWAG$K;}$DO"A[%j%9%H$G$9!#\e(B@var{form} \e$B$,2?$+\e(B @code{nil} \e$B0J30$KI>2A$5$l$k\e(B
+\e$B$b$N$J$i!"$=$N9T$KBP$7$F\e(B @var{face} \e$B$,;HMQ$5$l$^$9!#\e(B
 
-\e$B0J2<$,$3$NJQ?t$NCM$NNc$G$9!#$3$l$OGX7J$,0E$$@_Dj$G$O$-$l$$$K8+$(\e(B
-\e$B$k$+$bCN$l$^$;$s!#\e(B
+\e$B0J2<$,$3$NJQ?t$NCM$NNc$G$9!#$3$l$OGX7J$,0E$$@_Dj$G$O$-$l$$$K8+$($k$+$bCN\e(B
+\e$B$l$^$;$s!#\e(B
 
 @lisp
-(face-spec-set 'my-group-face-1
-               '((t (:foreground "Red" :bold t))))
-(face-spec-set 'my-group-face-2
-               '((t (:foreground "SeaGreen" :bold t))))
-(face-spec-set 'my-group-face-3
-               '((t (:foreground "SpringGreen" :bold t))))
-(face-spec-set 'my-group-face-4
-               '((t (:foreground "SteelBlue" :bold t))))
-(face-spec-set 'my-group-face-5
-               '((t (:foreground "SkyBlue" :bold t))))
+(cond (window-system
+       (setq custom-background-mode 'light)
+       (defface my-group-face-1
+        '((t (:foreground "Red" :bold t))) "First group face")
+       (defface my-group-face-2
+        '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
+       (defface my-group-face-3
+        '((t (:foreground "Green4" :bold t))) "Third group face")
+       (defface my-group-face-4
+        '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+       (defface my-group-face-5
+        '((t (:foreground "Blue" :bold t))) "Fifth group face")))
 
 (setq gnus-group-highlight
       '(((> unread 200) . my-group-face-1)
@@ -1381,9 +1868,8 @@ Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
 
 @pxref{Faces and Fonts} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 
-\e$B$3$N\e(B form \e$B$,I>2A$5$l$k$H$-$KF0E*$KB+G{$5$l$F$$$kJQ?t$K$O0J2<$N$b\e(B
-\e$B$N$,$"$j$^$9!#\e(B
-
+\e$B$3$N\e(B form \e$B$,I>2A$5$l$k$H$-$KF0E*$KB+G{$5$l$F$$$kJQ?t$K$O0J2<$N$b$N$,$"$j\e(B
+\e$B$^$9!#\e(B
 
 @table @code
 @item group
@@ -1404,43 +1890,42 @@ Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
 \e$B$=$N%0%k!<%WCf$NA45-;v?t!#$b$C$H@53N$K8@$&$H!"\e(BMAX-NUMBER - MIN_NUMBER +
 1.
 @item topic
-\e$B%H%T%C%/%^%$%J!<%b!<%I$r;HMQ$7$F$$$k;~!"$3$NJQ?t$OA^F~$5$l$F$$\e(B
-\e$B$k8=:_$N%H%T%C%/$KB+G{$5$l$^$9!#\e(B
+\e$B%H%T%C%/%^%$%J!<%b!<%I$r;HMQ$7$F$$$k;~!"$3$NJQ?t$OA^F~$5$l$F$$$k8=:_$N%H\e(B
+\e$B%T%C%/$KB+G{$5$l$^$9!#\e(B
 @end table
 
-\e$B$3$N\e(B form \e$B$,I>2A\e(B (@code{eval}) \e$B$5$l$k$H$-$O!"%]%$%s%H$OLdBj$N%0%k!<%W$N9T\e(B
-\e$BF,$K$"$j$^$9!#=>$C$F!"DL>o$N\e(B gnus \e$B$N4X?t$N$[$H$s$I$r;H$C$F$=$N%0%k!<%W$N>p\e(B
-\e$BJs$r<h$C$F$/$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$N\e(B form \e$B$,I>2A\e(B (@code{eval}) \e$B$5$l$k$H$-$O!"%]%$%s%H$OLdBj$N%0%k!<%W$N\e(B
+\e$B9TF,$K$"$j$^$9!#=>$C$F!"DL>o$N\e(B gnus \e$B$N4X?t$N$[$H$s$I$r;H$C$F$=$N%0%k!<%W\e(B
+\e$B$N>pJs$r<h$C$F$/$k$3$H$,$G$-$^$9!#\e(B
 
 @vindex gnus-group-update-hook
 @findex gnus-group-highlight-line
-@code{gnus-group-update-hook} \e$B$O%0%k!<%W9T$,JQ99$5$l$?$H$-$K8F$S\e(B
-\e$B=P$5$l$^$9!#$3$l$O\e(B @code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$N$H$-$O8F$S\e(B
-\e$B=P$5$l$^$;$s!#$3$N%U%C%/$O=i4|@_Dj$G$O\e(B
-@code{gnus-group-highlight-line} \e$B$r8F$S=P$7$^$9!#\e(B
+@code{gnus-group-update-hook} \e$B$O%0%k!<%W9T$,JQ99$5$l$?$H$-$K8F$S=P$5$l$^\e(B
+\e$B$9!#$3$l$O\e(B @code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$N$H$-$O8F$S=P$5$l$^$;$s!#$3\e(B
+\e$B$N%U%C%/$O=i4|@_Dj$G$O\e(B @code{gnus-group-highlight-line} \e$B$r8F$S=P$7$^$9!#\e(B
 
 @node Group Maneuvering
 @section \e$B%0%k!<%WA`:n\e(B
 @cindex group movement
 
-\e$BA4$F$N0\F0%3%^%s%I$O?t;z@\F,0z?t$rM}2r$9$k$N$G!"4|BT$9$kDL\e(B
-\e$B$j$NF0:n$r$7$^$9!#$?$V$s$M!#\e(B
+\e$BA4$F$N0\F0%3%^%s%I$O?t;z@\F,0z?t$rM}2r$9$k$N$G!"4|BT$9$kDL$j$NF0:n$r$7$^\e(B
+\e$B$9!#$?$V$s$M!#\e(B
 
 @table @kbd
 
 @item n
 @kindex n (Group)
 @findex gnus-group-next-unread-group
-\e$B<!$NL$FI5-;v$N$"$k%0%k!<%W$K0\F0$7$^$9\e(B
-(@code{gnus-group-next-unread-group})\e$B!#\e(B
+\e$B<!$NL$FI5-;v$N$"$k%0%k!<%W$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-next-unread-group})\e$B!#\e(B
 
 @item p
 @itemx DEL
 @kindex DEL (Group)
 @kindex p (Group)
 @findex gnus-group-prev-unread-group
-\e$B0l$DA0$NL$FI5-;v$N$"$k%0%k!<%W$K0\F0$7$^$9\e(B
-(@code{gnus-group-prev-unread-group})\e$B!#\e(B
+\e$B0l$DA0$NL$FI5-;v$N$"$k%0%k!<%W$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-prev-unread-group})\e$B!#\e(B
 
 @item N
 @kindex N (Group)
@@ -1455,46 +1940,45 @@ Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
 @item M-n
 @kindex M-n (Group)
 @findex gnus-group-prev-unread-group-same-level
-\e$B0l$DA0$NF1$8%l%Y%k!J$b$7$/$O$=$l$h$j>.$5$$%l%Y%k!K$NL$FI%0%k!<%W$K0\F0$7$^\e(B
-\e$B$9\e(B(@code{gnus-group-prev-unread-group-same-level})\e$B!#\e(B
+\e$B0l$DA0$NF1$8%l%Y%k\e(B (\e$B$b$7$/$O$=$l$h$j>.$5$$%l%Y%k\e(B) \e$B$NL$FI%0%k!<%W$K0\F0$7\e(B
+\e$B$^$9\e(B (@code{gnus-group-prev-unread-group-same-level})\e$B!#\e(B
 
 @item M-p
 @kindex M-p (Group)
 @findex gnus-group-next-unread-group-same-level
-\e$B<!$NF1$8%l%Y%k\e(B(\e$B$b$7$/$O$=$l$h$j>.$5$$%l%Y%k\e(B)\e$B$NL$FI%0%k!<%W$K0\F0$7$^$9\e(B
-(@code{gnus-group-next-unread-group-same-level})\e$B!#\e(B
+\e$B<!$NF1$8%l%Y%k\e(B(\e$B$b$7$/$O$=$l$h$j>.$5$$%l%Y%k\e(B)\e$B$NL$FI%0%k!<%W$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-next-unread-group-same-level})\e$B!#\e(B
 @end table
 
-\e$B<!$N#3$D$NL?Na$O%0%k!<%W$K%8%c%s%W$9$k$?$a$N$b$N$G$9!'\e(B
+\e$B<!$N;0$D$NL?Na$O%0%k!<%W$K%8%c%s%W$9$k$?$a$N$b$N$G$9\e(B:
 
 @table @kbd
 
 @item j
 @kindex j (Group)
 @findex gnus-group-jump-to-group
-\e$B%0%k!<%W$K%8%c%s%W$7$^$9!J$=$l$,8+$($k$h$&$K$J$C$F$$$J$+$C$?$i8+$($k$h$&$K\e(B
-\e$B$7$^$9!K\e(B(@code{gnus-group-jump-to-group})\e$B!#\e(Bkill \e$B$5$l$F$$$k%0%k!<%W$b!"@8$-\e(B
-\e$B$F$$$k%0%k!<%W$HF1MM$K%8%c%s%W$G$-$^$9!#\e(B
+\e$B%0%k!<%W$K%8%c%s%W$7$^$9\e(B (\e$B$=$l$,8+$($k$h$&$K$J$C$F$$$J$+$C$?$i8+$($k$h$&\e(B
+\e$B$K$7$^$9\e(B) (@code{gnus-group-jump-to-group})\e$B!#\e(Bkill \e$B$5$l$F$$$k%0%k!<%W$b!"\e(B
+\e$B@8$-$F$$$k%0%k!<%W$HF1MM$K%8%c%s%W$G$-$^$9!#\e(B
 
 @item ,
 @kindex , (Group)
 @findex gnus-group-best-unread-group
-\e$B:G$b>.$5$$%l%Y%k$NL$FI%0%k!<%W$K%8%c%s%W$7$^$9\e(B
-(@code{gnus-group-best-unread-group})\e$B!#\e(B
+\e$B:G$b>.$5$$%l%Y%k$NL$FI%0%k!<%W$K%8%c%s%W$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-best-unread-group})\e$B!#\e(B
 
 @item .
 @kindex . (Group)
 @findex gnus-group-first-unread-group
-\e$B:G=i$NL$FI5-;v$N$"$k%0%k!<%W$K%8%c%s%W$7$^$9\e(B
-(@code{gnus-group-first-unread-group})\e$B!#\e(B
+\e$B:G=i$NL$FI5-;v$N$"$k%0%k!<%W$K%8%c%s%W$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-first-unread-group})\e$B!#\e(B
 @end table
 
 @vindex gnus-group-goto-unread
-@code{gnus-group-goto-unread} \e$B$r\e(B @code{nil} \e$B$K$9$k$H!"A4$F$N0\F0\e(B
-\e$B%3%^%s%I$O!"<!$NL$FI%0%k!<%W$G$O$J$/<!$N%0%k!<%W$K0\F0$9$k$h$&$K\e(B
-\e$B$J$j$^$9!#$=$N%3%^%s%I$,<!$NL$FI%0%k!<%W$K0\F0$9$k!"$H8@$$D%$C$F\e(B
-\e$B$$$F$b!"$G$9!#=i4|CM$O\e(B @code{t} \e$B$G$9!#\e(B
-
+@code{gnus-group-goto-unread} \e$B$r\e(B @code{nil} \e$B$K$9$k$H!"A4$F$N0\F0%3%^%s%I\e(B
+\e$B$O!"<!$NL$FI%0%k!<%W$G$O$J$/<!$N%0%k!<%W$K0\F0$9$k$h$&$K$J$j$^$9!#$=$N%3\e(B
+\e$B%^%s%I$,<!$NL$FI%0%k!<%W$K0\F0$9$k!"$H8@$$D%$C$F$$$F$b!"$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @node Selecting a Group
 @section \e$B%0%k!<%W$NA*Br\e(B
@@ -1506,75 +1990,82 @@ Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
 @kindex SPACE (Group)
 @findex gnus-group-read-group
 \e$B8=:_$N%0%k!<%W$rA*Br$7!"35N,%P%C%U%!$K@Z$jBX$($F:G=i$NL$FI5-;v$rI=<($7$^\e(B
-\e$B$9\e(B (@code{gnus-group-read-group})\e$B!#$b$7$=$N%0%k!<%W$KL$FI5-;v$,L5$$!"$b$7\e(B
-\e$B$/$O$3$NL?Na$K?t;z0J30$N%W%l%U%#%C%/%9$rM?$($k$H!"\e(Bgnus \e$B$O%5!<%P$+$i$3\e(B
+\e$B$9\e(B (@code{gnus-group-read-group})\e$B!#$b$7$=$N%0%k!<%W$KL$FI5-;v$,L5$$!"$b\e(B
+\e$B$7$/$O$3$NL?Na$K?t;z0J30$N%W%l%U%#%C%/%9$rM?$($k$H!"\e(Bgnus \e$B$O%5!<%P$+$i$3\e(B
 \e$B$N%0%k!<%W$NA4$F$N8E$$5-;v$r<hF@$7$h$&$H$7$^$9!#\e(B@var{N} \e$B$N?t;z@\F,0z?t$r\e(B
-\e$BM?$($k$H!"\e(Bgnus \e$B$N<hF@$9$k5-;v?t$O\e(B @var{N} \e$B$K$J$j$^$9!#\e(B@var{N} \e$B$,@5$N?t\e(B
-\e$B$G$"$l$P\e(B gnus\e$B$O?7$7$$J}$+$i\e(B @var{N} \e$B8D$N5-;v$r<hF@$7!"\e(B @var{N} \e$B$,Ii$N?t$G\e(B
+\e$BM?$($k$H!"\e(Bgnus \e$B$N<hF@$9$k5-;v?t$O\e(B @var{N} \e$B$K$J$j$^$9!#\e(B@var{N} \e$B$,@5$N?t$G\e(B
+\e$B$"$l$P\e(B gnus \e$B$O?7$7$$J}$+$i\e(B @var{N} \e$B8D$N5-;v$r<hF@$7!"\e(B@var{N} \e$B$,Ii$N?t$G\e(B
 \e$B$"$l$P\e(B gnus \e$B$O8E$$J}$+$i\e(B @code{abs(@var{N})} \e$B8D$N5-;v$r<hF@$7$^$9!#\e(B
 
+\e$B$7$?$,$C$F!"\e(B@kbd{SPC} \e$B$G$OIaDL$K%0%k!<%W$KF~$j!"\e(B@kbd{C-u SPC} \e$B$G$O8E$$5-\e(B
+\e$B;v$,8=$l$^$9!#\e(B@kbd{C-u 4 2 SPC} \e$B$G$O\e(B 42 \e$B8D$N:G?7$N5-;v$r<hF@$7!"\e(B@kbd{C-u
+- 4 2 SPC} \e$B$G$O\e(B 42 \e$B8D$N:G$b8E$$5-;v$r<hF@$7$^$9!#\e(B
+
+\e$B%0%k!<%W$K$$$k\e(B (\e$B35N,%P%C%U%!$K$$$k\e(B) \e$B$H$-$O!"\e(B@kbd{M-g} \e$B$G?7$7$$5-;v$r<hF@\e(B
+\e$B$G$-$k$7!"\e(B@kbd{C-u M-g} \e$B$G$O8E$$5-;v$rI=<($9$k$3$H$,$G$-$^$9!#\e(B
+
 @item RET
 @kindex RET (Group)
 @findex gnus-group-select-group
-\e$B8=:_$N%0%k!<%W$rA*Br$7!"35N,%P%C%U%!$K@Z$jBX$($^$9\e(B
-(@code{gnus-group-select-group})\e$B!#\e(B@code{gnus-group-read-group} \e$B$HF1$80z?t\e(B
-\e$B$r<h$j$^$9!=!=M#0l$N0c$$$O!"%0%k!<%W$KF~$C$?$H$-$K:G=i$NL$FI5-;v$rI=<($7$J\e(B
-\e$B$$!"$H$$$&$3$H$G$9!#\e(B
+\e$B8=:_$N%0%k!<%W$rA*Br$7!"35N,%P%C%U%!$K@Z$jBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-select-group})\e$B!#\e(B@code{gnus-group-read-group} \e$B$HF1$8\e(B
+\e$B0z?t$r<h$j$^$9!=!=M#0l$N0c$$$O!"%0%k!<%W$KF~$C$?$H$-$K:G=i$NL$FI5-;v$rI=\e(B
+\e$B<($7$J$$!"$H$$$&$3$H$G$9!#\e(B
 
 @item M-RET
 @kindex M-RET (Group)
 @findex gnus-group-quick-select-group
-\e$B$3$l$O>e5-$N%3%^%s%I$HF1$8F0:n$r$7$^$9$,!"!V%4%?%4%?!W$O:GDc8B$K$7$h$&$H$7\e(B
-\e$B$^$9\e(B (@code{gnus-group-quick-select-group})\e$B!#%9%3%"!&\e(Bkill \e$B$N=hM}$O9T$o$l$:!"\e(B
-\e$B%O%$%i%$%H$b5-;v>C5n$b$7$^$;$s!#$3$l$O!"$"$J$?$,K\Ev$K5^$$$G$$$F!"$I$C$+$N\e(B
-\e$B$d$?$i$G$C$+$$%0%k!<%W$KF~$i$J$1$l$P$$$1$J$$$H$-$KLr$KN)$D$+$b$7$l$^$;$s!#\e(B
-\e$B$^$?!"@\F,<-$K\e(B 0 \e$B$rM?$($l$P!J$9$J$o$A\e(B @kbd{0 M-RET}\e$B!K!"\e(Bgnus \e$B$O35N,%P%C%U%!\e(B
-\e$B$r:n$m$&$H$5$($7$^$;$s!#$3$l$O35N,%P%C%U%!$r:n$kA0$K%9%l%C%II=\e(B
-\e$B<($r@Z$jBX$($?$$$H$-Lr$KN)$A$^$9\e(B (@pxref{Summary Generation Commands})\e$B!#\e(B
+\e$B$3$l$O>e5-$N%3%^%s%I$HF1$8F0:n$r$7$^$9$,!"!V%4%?%4%?!W$O:GDc8B$K$7$h$&$H\e(B
+\e$B$7$^$9\e(B (@code{gnus-group-quick-select-group})\e$B!#%9%3%"!&\e(Bkill \e$B$N=hM}$O9T$o\e(B
+\e$B$l$:!"%O%$%i%$%H$b5-;v>C5n$b$7$^$;$s!#$3$l$O!"$"$J$?$,K\Ev$K5^$$$G$$$F!"\e(B
+\e$B$I$C$+$N$d$?$i$G$C$+$$%0%k!<%W$KF~$i$J$1$l$P$$$1$J$$$H$-$KLr$KN)$D$+$b$7\e(B
+\e$B$l$^$;$s!#$^$?!"@\F,<-$K\e(B 0 \e$B$rM?$($l$P\e(B (\e$B$9$J$o$A\e(B @kbd{0 M-RET})\e$B!"\e(Bgnus \e$B$O\e(B
+\e$B35N,%P%C%U%!$r:n$m$&$H$5$($7$^$;$s!#$3$l$O35N,%P%C%U%!$r:n$kA0$K%9%l%C%I\e(B
+\e$BI=<($r@Z$jBX$($?$$$H$-Lr$KN)$A$^$9\e(B (@pxref{Summary Generation Commands})\e$B!#\e(B
 
 @item M-SPACE
 @kindex M-SPACE (Group)
 @findex gnus-group-visible-select-group
-\e$B$3$l$O\e(B @kbd{RET} \e$B%3%^%s%I$HF1$8F0:n$r$9$k$5$i$K$b$&0l$D$N%3%^%s\e(B
-\e$B%I$G$9$,!"$3$N%3%^%s%I$O5-;v>C5n$HJ]N15-;v$r1#$9=hM}$r9T$$$^$;$s\e(B
-(@code{gnus-group-visible-select-group})\e$B!#\e(B
+\e$B$3$l$O\e(B @kbd{RET} \e$B%3%^%s%I$HF1$8F0:n$r$9$k$5$i$K$b$&0l$D$N%3%^%s%I$G$9$,!"\e(B
+\e$B$3$N%3%^%s%I$O5-;v>C5n$HJ]N15-;v$r1#$9=hM}$r9T$$$^$;\e(B
+\e$B$s\e(B (@code{gnus-group-visible-select-group})\e$B!#\e(B
 
 @item M-C-RET
 @kindex M-C-RET (Group)
 @findex gnus-group-select-group-ephemerally
-\e$B:G8e$K$3$N%3%^%s%I$O!"8=:_$N%0%k!<%W$r0lEY8B$j!"$=$NFbMF$K0l@Z$N\e(B
-\e$B=hM}$r$9$k$3$H$N$J$$$h$&$KA*Br$7$^$9\e(B
-(@code{gnus-group-select-group-ephemerally})\e$B!#\e(B \e$B%9%l%C%II=<($5\e(B
-\e$B$($b9T$o$l$^$;$s!#$3$NJ}K!$GA*Br$7$?8e$K$3$N%0%k!<%W$KBP$7$F9T$C\e(B
-\e$B$?$3$H$OA4$F!"$=$N8e$K1F6A$rM?$($k$3$H$O$"$j$^$;$s!#\e(B
+\e$B:G8e$K$3$N%3%^%s%I$O!"8=:_$N%0%k!<%W$r0lEY8B$j!"$=$NFbMF$K0l@Z$N=hM}$r$9\e(B
+\e$B$k$3$H$N$J$$$h$&$KA*Br$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-select-group-ephemerally})\e$B!#%9%l%C%II=<($5$($b9T$o\e(B
+\e$B$l$^$;$s!#$3$NJ}K!$GA*Br$7$?8e$K$3$N%0%k!<%W$KBP$7$F9T$C$?$3$H$OA4$F!"$=\e(B
+\e$B$N8e$K1F6A$rM?$($k$3$H$O$"$j$^$;$s!#\e(B
 
 @end table
 
 @vindex gnus-large-newsgroup
-@code{gnus-large-newsgroup} \e$BJQ?t$O!"2?$rBg$-$J%0%k!<%W$H9M$($k$Y$-$+!"$r\e(B
-gnus \e$B$KM?$($^$9!#$3$l$O=i4|@_Dj$G$O\e(B 200 \e$B$G$9!#%0%k!<%W$K!JL$FI$H0uIU$-\e(B
-\e$B$N!K5-;v$,$3$N?t0J>e$"$l$P!"\e(Bgnus \e$B$O$=$N%0%k!<%W$KF~$kA0$KMxMQ<T$K3NG'$r5a\e(B
-\e$B$a$^$9!#MxMQ<T$O%5!<%P$+$i$$$/$D$N5-;v$r<hF@$9$k$+$r;XDj$G$-$^$9!#$b$7MxMQ\e(B
-\e$B<T$,Ii$N?t\e(B (@code{-n}) \e$B$r;XDj$9$l$P!"8E$$J}$+$i\e(B @code{n} \e$B8D$N5-;v$r<hF@$7\e(B
-\e$B$^$9!#@5$N?t$G$"$l$P!"?7$7$/E~Ce$7$?J}$+$i\e(B @code{n} \e$B8D$N5-;v$r<hF@$7$^$9!#\e(B
+@code{gnus-large-newsgroup} \e$BJQ?t$O!"2?$rBg$-$J%0%k!<%W$H9M$($k$Y$-$+!"\e(B
+\e$B$r\e(B gnus \e$B$KM?$($^$9!#$3$l$O=i4|@_Dj$G$O\e(B 200 \e$B$G$9!#%0%k!<%W$K\e(B (\e$BL$FI$H0uIU\e(B
+\e$B$-$N\e(B) \e$B5-;v$,$3$N?t0J>e$"$l$P!"\e(Bgnus \e$B$O$=$N%0%k!<%W$KF~$kA0$KMxMQ<T$K3NG'\e(B
+\e$B$r5a$a$^$9!#MxMQ<T$O%5!<%P$+$i$$$/$D$N5-;v$r<hF@$9$k$+$r;XDj$G$-$^$9!#$b\e(B
+\e$B$7MxMQ<T$,Ii$N?t\e(B (@code{-n}) \e$B$r;XDj$9$l$P!"8E$$J}$+$i\e(B @code{n} \e$B8D$N5-;v\e(B
+\e$B$r<hF@$7$^$9!#@5$N?t$G$"$l$P!"?7$7$/E~Ce$7$?J}$+$i\e(B @code{n} \e$B8D$N5-;v$r<h\e(B
+\e$BF@$7$^$9!#\e(B
 
 @vindex gnus-select-group-hook
 @vindex gnus-auto-select-first
-@code{gnus-auto-select-first} \e$B$O!"\e(B@kbd{SPACE} \e$B%3%^%s%I$G%0%k!<%W\e(B
-\e$B$KF~$C$?$H$-$K!"<+F0E*$K5-;v$rA*Br$9$k$+$I$&$+$r@)8f$7$^$9!#\e(B
+@code{gnus-auto-select-first} \e$B$O!"\e(B@kbd{SPACE} \e$B%3%^%s%I$G%0%k!<%W$KF~$C$?\e(B
+\e$B$H$-$K!"<+F0E*$K5-;v$rA*Br$9$k$+$I$&$+$r@)8f$7$^$9!#\e(B
 
 @table @code
 
 @item nil
-\e$B%0%k!<%W$KF~$C$?$H$-$K$I$N5-;v$bA*Br$7$J$$!#$?$@35N,%P%C%U%!$r\e(B
-\e$BI=<($9$k$@$1!#\e(B
+\e$B%0%k!<%W$KF~$C$?$H$-$K$I$N5-;v$bA*Br$7$J$$!#$?$@35N,%P%C%U%!$rI=<($9$k$@\e(B
+\e$B$1!#\e(B
 
 @item t
 \e$B%0%k!<%W$KF~$C$?$H$-$K!":G=i$NL$FI5-;v$rA*Br$9$k!#\e(B
 
 @item best
-\e$B%0%k!<%W$KF~$C$?$H$-$K!"$=$N%0%k!<%W$G:G$b9b$$%9%3%"$N5-;v$rA*Br\e(B
-\e$B$9$k!#\e(B
+\e$B%0%k!<%W$KF~$C$?$H$-$K!"$=$N%0%k!<%W$G:G$b9b$$%9%3%"$N5-;v$rA*Br$9$k!#\e(B
 @end table
 
 \e$B$3$NJQ?t$O4X?t$G$"$k$3$H$b$G$-$^$9!#$=$N>l9g$O!"$=$N4X?t$OI=Bj$N9T$K%]%$\e(B
@@ -1592,12 +2083,10 @@ gnus \e$B$KM?$($^$9!#$3$l$O=i4|@_Dj$G$O\e(B 200 \e$B$G$9!#%0%k!<%W$K!JL$FI$H0uIU$-\e
 \e$B:G9b%9%3%"$NL$FI5-;v$rA*Br$7$^$9!#\e(B
 @end table
 
-
-\e$B$b$7$"$k%0%k!<%W$G<+F05-;vA*Br$r$d$a$?$$$N$G$"$l$P!JNc$($P$G$C$+$$5-;v$N$"\e(B
-\e$B$k%P%$%J%j%0%k!<%W$G$O!"$H$+!K!"%0%k!<%W$,A*Br$5$l$?$H$-$K8F$S=P$5$l$k\e(B
-@code{gnus-select-group-hook} \e$B$NCf$G$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,\e(B
-\e$B$G$-$^$9!#\e(B
-
+\e$B$b$7$"$k%0%k!<%W$G<+F05-;vA*Br$r$d$a$?$$$N$G$"$l$P\e(B (\e$BNc$($P$G$C$+$$5-;v$N\e(B
+\e$B$"$k%P%$%J%j%0%k!<%W$G$O!"$H$+\e(B)\e$B!"%0%k!<%W$,A*Br$5$l$?$H$-$K8F$S=P$5$l$k\e(B
+@code{gnus-select-group-hook} \e$B$NCf$G$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H\e(B
+\e$B$,$G$-$^$9!#\e(B
 
 @node Subscription Commands
 @section \e$B9XFI@)8f%3%^%s%I\e(B
@@ -1611,17 +2100,16 @@ gnus \e$B$KM?$($^$9!#$3$l$O=i4|@_Dj$G$O\e(B 200 \e$B$G$9!#%0%k!<%W$K!JL$FI$H0uIU$-\e
 @kindex u (Group)
 @findex gnus-group-unsubscribe-current-group
 @c @icon{gnus-group-unsubscribe}
-\e$B8=:_$N%0%k!<%W$N9XFI$r@Z$jBX$($^$9\e(B
-(@code{gnus-group-unsubscribe-current-group})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$N9XFI$r@Z$jBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-unsubscribe-current-group})\e$B!#\e(B
 
 @item S s
 @itemx U
 @kindex S s (Group)
 @kindex U (Group)
 @findex gnus-group-unsubscribe-group
-\e$B%0%k!<%W$r9XFI$9$k$+$I$&$+$r3NG'$7!"9XFI$7$^$9!#$9$G$K9XFI$9$k$h\e(B
-\e$B$&$K$J$C$F$$$k>l9g$K$O!"9XFI$r;_$a$^$9\e(B
-(@code{gnus-group-unsubscribe-group})\e$B!#\e(B
+\e$B%0%k!<%W$r9XFI$9$k$+$I$&$+$r3NG'$7!"9XFI$7$^$9!#$9$G$K9XFI$9$k$h$&$K$J$C\e(B
+\e$B$F$$$k>l9g$K$O!"9XFI$r;_$a$^$9\e(B (@code{gnus-group-unsubscribe-group})\e$B!#\e(B
 
 @item S k
 @itemx C-k
@@ -1636,47 +2124,42 @@ gnus \e$B$KM?$($^$9!#$3$l$O=i4|@_Dj$G$O\e(B 200 \e$B$G$9!#%0%k!<%W$K!JL$FI$H0uIU$-\e
 @kindex S y (Group)
 @kindex C-y (Group)
 @findex gnus-group-yank-group
-\e$B:G8e$K\e(B kill \e$B$7$?%0%k!<%W$r\e(B yank \e$B$7$^$9\e(B
-(@code{gnus-group-yank-group})\e$B!#\e(B
+\e$B:G8e$K\e(B kill \e$B$7$?%0%k!<%W$r\e(B yank \e$B$7$^$9\e(B (@code{gnus-group-yank-group})\e$B!#\e(B
 
 @item C-x C-t
 @kindex C-x C-t (Group)
 @findex gnus-group-transpose-groups
-\e$BFs$D$N%0%k!<%W$N=g=x$rCV$-49$($^$9\e(B
-(@code{gnus-group-transpose-groups})\e$B!#\e(B \e$B$3$l$O%[%s%H$O9XFI%3%^%s\e(B
-\e$B%I$G$O$"$j$^$;$s$,!"\e(Bkill \e$B$H\e(B yank \e$B$r2?EY$+B3$1$kBe$o$j$K$3$N%3%^\e(B
-\e$B%s%I$,;H$($^$9!#\e(B
+\e$BFs$D$N%0%k!<%W$N=g=x$rCV$-49$($^$9\e(B (@code{gnus-group-transpose-groups})\e$B!#\e(B
+\e$B$3$l$O%[%s%H$O9XFI%3%^%s%I$G$O$"$j$^$;$s$,!"\e(Bkill \e$B$H\e(B yank \e$B$r2?EY$+B3$1$k\e(B
+\e$BBe$o$j$K$3$N%3%^%s%I$,;H$($^$9!#\e(B
 
 @item S w
 @itemx C-w
 @kindex S w (Group)
 @kindex C-w (Group)
 @findex gnus-group-kill-region
-\e$B%j!<%8%g%sFb$NA4$F$N%0%k!<%W$r\e(B kill \e$B$7$^$9\e(B
-(@code{gnus-group-kill-region})\e$B!#\e(B
+\e$B%j!<%8%g%sFb$NA4$F$N%0%k!<%W$r\e(B kill \e$B$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-kill-region})\e$B!#\e(B
 
 @item S z
 @kindex S z (Group)
 @findex gnus-group-kill-all-zombies
-\e$BA4$F$N%>%s%S%0%k!<%W$r\e(B kill \e$B$7$^$9\e(B
-(@code{gnus-group-kill-all-zombies})\e$B!#\e(B
+\e$BA4$F$N%>%s%S%0%k!<%W$r\e(B kill \e$B$7$^$9\e(B (@code{gnus-group-kill-all-zombies})\e$B!#\e(B
 
 @item S C-k
 @kindex S C-k (Group)
 @findex gnus-group-kill-level
-\e$B$"$k%l%Y%k$N%0%k!<%W$rA4$F\e(B kill \e$B$7$^$9\e(B
-(@code{gnus-group-kill-level})\e$B!#\e(B kill \e$B$7$?8e!"$3$l$i$N%0%k!<%W$r\e(B
-yank \e$B$GLa$9$3$H$O$G$-$J$$$N$G!"$3$N%3%^%s%I$O$$$/$i$+Cm0U$7$F;H$C\e(B
-\e$B$F$/$@$5$$!#$3$N%3%^%s%I$,K\Ev$KJXMx$K$J$k$N$O!"\e(B@file{.newsrc}
-\e$B$K<N$F$A$c$$$?$$L$9XFI$N%0%k!<%W$,$?$/$5$s$"$k$H$-$@$1$G$9!#%l%Y\e(B
-\e$B%k\e(B 7\e$B$G\e(B @kbd{S C-k} \e$B$r9T$&$H!"\e(B@file{.newsrc} \e$B%U%!%$%kCf$K%a%C%;!<\e(B
+\e$B$"$k%l%Y%k$N%0%k!<%W$rA4$F\e(B kill \e$B$7$^$9\e(B (@code{gnus-group-kill-level})\e$B!#\e(B
+kill \e$B$7$?8e!"$3$l$i$N%0%k!<%W$r\e(B yank \e$B$GLa$9$3$H$O$G$-$J$$$N$G!"$3$N%3%^\e(B
+\e$B%s%I$O$$$/$i$+Cm0U$7$F;H$C$F$/$@$5$$!#$3$N%3%^%s%I$,K\Ev$KJXMx$K$J$k$N$O!"\e(B
+@file{.newsrc} \e$B$K<N$F$A$c$$$?$$L$9XFI$N%0%k!<%W$,$?$/$5$s$"$k$H$-$@$1$G\e(B
+\e$B$9!#%l%Y%k\e(B 7 \e$B$G\e(B @kbd{S C-k} \e$B$r9T$&$H!"\e(B@file{.newsrc} \e$B%U%!%$%kCf$K%a%C%;!<\e(B
 \e$B%8HV9f$,$J$$L$9XFI%0%k!<%W$rA4$F\e(B kill \e$B$7$^$9!#\e(B
 
 @end table
 
 @ref{Group Levels} \e$B$b;2>H$7$F$/$/$@$5$$!#\e(B
 
-
 @node Group Data
 @section \e$B%0%k!<%W%G!<%?\e(B
 
@@ -1687,44 +2170,42 @@ yank \e$B$GLa$9$3$H$O$G$-$J$$$N$G!"$3$N%3%^%s%I$O$$$/$i$+Cm0U$7$F;H$C\e(B
 @findex gnus-group-catchup-current
 @vindex gnus-group-catchup-group-hook
 @c @icon{gnus-group-catchup-current}
-\e$B$=$N%0%k!<%WFb$NA4$F$NL50u$N5-;v$r4{FI$K$9$k\e(B
-(@code{gnus-group-catchup-current})\e$B!#%0%k!<%W%P%C%U%!$+$i4{FI$K$7$?>l9g$O\e(B
-@code{gnus-group-catchup-group-hook} \e$B$,8F$S=P$5$l$^$9!#\e(B
+\e$B$=$N%0%k!<%WFb$NA4$F$NL50u$N5-;v$r4{FI$K$9\e(B
+\e$B$k\e(B (@code{gnus-group-catchup-current})\e$B!#%0%k!<%W%P%C%U%!$+$i4{FI$K$7$?>l\e(B
+\e$B9g$O\e(B @code{gnus-group-catchup-group-hook} \e$B$,8F$S=P$5$l$^$9!#\e(B
 
 @item C
 @kindex C (Group)
 @findex gnus-group-catchup-current-all
-\e$B$=$N%0%k!<%W$NA45-;v$r!"0uIU$-$N5-;v$b4^$a$F4{FI$K$7$^$9\e(B
-(@code{gnus-group-catchup-current-all})\e$B!#\e(B
+\e$B$=$N%0%k!<%W$NA45-;v$r!"0uIU$-$N5-;v$b4^$a$F4{FI$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-catchup-current-all})\e$B!#\e(B
 
 @item M-c
 @kindex M-c (Group)
 @findex gnus-group-clear-data
-\e$B8=:_$N%0%k!<%W$NA4$F$N%G!<%?$r%/%j%"$7$^$9!=!=%^!<%/$H4{FI5-;v$N%j%9%H$r>C\e(B
-\e$B$75n$j$^$9\e(B (@code{gnus-group-clear-data})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$NA4$F$N%G!<%?$r%/%j%"$7$^$9!=!=%^!<%/$H4{FI5-;v$N%j%9%H$r\e(B
+\e$B>C$75n$j$^$9\e(B (@code{gnus-group-clear-data})\e$B!#\e(B
 
 @item M-x gnus-group-clear-data-on-native-groups
 @kindex M-x gnus-group-clear-data-on-native-groups
 @findex gnus-group-clear-data-on-native-groups
-\e$B$b$7\e(B @sc{nntp} \e$B%5!<%P$rJL$N$b$N$K@Z$jBX$($?$H$9$k$H!"A4$F$N%^!<%/$H4{FI>p\e(B
-\e$BJs$O$b$&Lr$K$ON)$A$^$;$s!#$3$N%3%^%s%I$r;H$C$F4pK\%0%k!<%W$NA4$F$N%G!<\e(B
+\e$B$b$7\e(B @sc{nntp} \e$B%5!<%P$rJL$N$b$N$K@Z$jBX$($?$H$9$k$H!"A4$F$N%^!<%/$H4{FI\e(B
+\e$B>pJs$O$b$&Lr$K$ON)$A$^$;$s!#$3$N%3%^%s%I$r;H$C$F4pK\%0%k!<%W$NA4$F$N%G!<\e(B
 \e$B%?$r%/%j%"$9$k$3$H$,$G$-$^$9!#Cm0U$7$F;H$C$F$M!#\e(B
 
 @end table
 
-
 @node Group Levels
 @section \e$B%0%k!<%W%l%Y%k\e(B
 @cindex group level
 @cindex level
 
 \e$BA4$F$N%0%k!<%W$O\e(B @dfn{\e$B9XFIEY\e(B} (@dfn{subscribedness}) \e$B$N%l%Y%k$r;}$A$^$9!#\e(B
-\e$BNc$($P!"$"$k%0%k!<%W$,%l%Y%k\e(B 2 \e$B$@$H$9$l$P!"$=$l$O%l%Y%k\e(B 5 \e$B$N%0%k!<\e(B
-\e$B%W$h$j$b!V$h$j9XFI$7$F$$$k!W$H$$$&$3$H$G$9!#\e(BGnus \e$B$KBP$7$F!"$"$k\e(B
-\e$B%l%Y%k$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W$N$_0lMwI=<($9$k$h$&$KMj$`\e(B
-\e$B$3$H$b$G$-$k$7\e(B (@pxref{Listing Groups})\e$B!"$"$k%l%Y%k$+$=$l$h$j>.\e(B
-\e$B$5$$%l%Y%k$N%0%k!<%W$N?7Ce5-;v$N$_$r3NG'$9$k$3$H$b$G$-$^$9\e(B
-(@pxref{Scanning New Messages})\e$B!#\e(B
+\e$BNc$($P!"$"$k%0%k!<%W$,%l%Y%k\e(B 2 \e$B$@$H$9$l$P!"$=$l$O%l%Y%k\e(B 5 \e$B$N%0%k!<%W$h$j\e(B
+\e$B$b!V$h$j9XFI$7$F$$$k!W$H$$$&$3$H$G$9!#\e(BGnus \e$B$KBP$7$F!"$"$k%l%Y%k$+$=$l$h\e(B
+\e$B$j>.$5$$%l%Y%k$N%0%k!<%W$N$_0lMwI=<($9$k$h$&$KMj$`$3$H$b$G$-$k\e(B
+\e$B$7\e(B (@pxref{Listing Groups})\e$B!"$"$k%l%Y%k$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W\e(B
+\e$B$N?7Ce5-;v$N$_$r3NG'$9$k$3$H$b$G$-$^$9\e(B(@pxref{Scanning New Messages})\e$B!#\e(B
 
 \e$BK:$l$J$$$G\e(B: \e$B%0%k!<%W$N%l%Y%k$,Bg$-$$$[$I!"=EMWEY$ODc$/$J$k$H$$$&$3$H!#\e(B
 
@@ -1733,9 +2214,9 @@ yank \e$B$GLa$9$3$H$O$G$-$J$$$N$G!"$3$N%3%^%s%I$O$$$/$i$+Cm0U$7$F;H$C\e(B
 @item S l
 @kindex S l (Group)
 @findex gnus-group-set-current-level
-\e$B8=:_$N%0%k!<%W$N%l%Y%k$r@_Dj$9$k!#?t;z%W%l%U%#%C%/%9$,M?$($i$l$k\e(B
-\e$B$H!"$=$3$+$i\e(B @var{n} \e$B8D$N%0%k!<%W$N%l%Y%k$,@_Dj$5$l$^$9!#%l%Y%k\e(B
-\e$B$rF~NO$9$k$?$a$N%W%m%s%W%H$,=P$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$N%l%Y%k$r@_Dj$9$k!#?t;z%W%l%U%#%C%/%9$,M?$($i$l$k$H!"$=$3\e(B
+\e$B$+$i\e(B @var{n} \e$B8D$N%0%k!<%W$N%l%Y%k$,@_Dj$5$l$^$9!#%l%Y%k$rF~NO$9$k$?$a$N\e(B
+\e$B%W%m%s%W%H$,=P$^$9!#\e(B
 
 @end table
 
@@ -1743,61 +2224,82 @@ yank \e$B$GLa$9$3$H$O$G$-$J$$$N$G!"$3$N%3%^%s%I$O$$$/$i$+Cm0U$7$F;H$C\e(B
 @vindex gnus-level-zombie
 @vindex gnus-level-unsubscribed
 @vindex gnus-level-subscribed
-Gnus \e$B$O%l%Y%k\e(B 1 \e$B$+$i\e(B @code{gnus-level-subscribed}\e$B!J$3$NCM$r4^$`!K!J=i4|\e(B
-\e$BCM$O\e(B 5\e$B!K$^$G$N%0%k!<%W$r9XFI!"\e(B@code{gnus-level-subscribed}\e$B!J$3$NCM$r4^$^\e(B
-\e$B$J$$!K$+$i\e(B@code{gnus-level-unsubscribed}\e$B!J$3$NCM$r4^$`!K!J=i4|CM$O\e(B 7\e$B!K\e(B
-\e$B$^$G$N%0%k!<%W$rHs9XFI!"\e(B@code{gnus-level-zombie} \e$B$r%>%s%S!JJb$/;S!K!J=i\e(B
-\e$B4|CM$O\e(B 8\e$B!K!"\e(B@code{gnus-level-killed} \e$B$r\e(B kill \e$B$5$l$F$$$k!J40A4$K;`$s$G$k!K\e(B
-\e$B!J=i4|CM$O\e(B 9\e$B!K$HH=CG$7$^$9!#\e(BGnus \e$B$O9XFI$HHs9XFI$N%0%k!<%W$OA4$/F1MM$K\e(B
-\e$B07$$$^$9$,!"%>%s%S$H\e(B kill \e$B%0%k!<%W$O!"$I$N5-;v$rFI$s$@$+!"B8:_$9$k$+$J$I$N\e(B
-\e$B>pJs$r0l@Z;}$A$^$;$s!#$3$N;`$s$G$k%0%k!<%W$H@8$-$F$k%0%k!<%W$N6hJL$O!"JL$K\e(B
-\e$B$=$l$,$-$l$$$@$+$i$H$+8-$$$+$i$H$$$&$o$1$G$O$J$/!"=c?h$K8zN(E*$JM}M3$N$?$a\e(B
-\e$B$G$9!#\e(B
-
-\e$B%a!<%kMQ$N%0%k!<%W$O!J$b$7$"$l$P!KHs>o$K>.$5$$%l%Y%k!JNc$($P\e(B 1 \e$B$+\e(B 2\e$B!K$K$7\e(B
-\e$B$F$*$/$3$H$r$*4+$a$7$^$9!#\e(B
-
-\e$B$b$7%l%Y%kJQ?t$GM7$S$?$$$N$G$"$l$P!"B?>/Cm0U$r$7$F$^$o$kI,MW$,$"\e(B
-\e$B$j$^$9!#0lC6$=$l$r@_Dj$7$?$i!"FsEY$H$=$l$K?($i$J$$$G$/$@$5$$!#$5\e(B
-\e$B$i$K8@$($P!"<+J,$G2?$r$d$C$F$$$k$+$r@53N$KM}2r$7$F$$$J$$8B$j!"0l\e(B
-\e$B@Z?($i$J$$$G$/$@$5$$!#\e(B
+Gnus \e$B$O%l%Y%k\e(B 1 \e$B$+$i\e(B @code{gnus-level-subscribed} (\e$B$3$NCM$r4^$`\e(B) (\e$B=i4|CM\e(B
+\e$B$O\e(B 5) \e$B$^$G$N%0%k!<%W$r9XFI!"\e(B@code{gnus-level-subscribed} (\e$B$3$NCM$r4^$^$J\e(B
+\e$B$$\e(B) \e$B$+$i\e(B@code{gnus-level-unsubscribed} (\e$B$3$NCM$r4^$`\e(B) (\e$B=i4|CM$O\e(B 7) \e$B$^$G\e(B
+\e$B$N%0%k!<%W$rHs9XFI!"\e(B@code{gnus-level-zombie} \e$B$r%>%s%S\e(B (\e$BJb$/;S\e(B) (\e$B=i4|CM\e(B
+\e$B$O\e(B 8)\e$B!"\e(B@code{gnus-level-killed} \e$B$r\e(B kill \e$B$5$l$F$$$k\e(B (\e$B40A4$K;`$s$G\e(B
+\e$B$k\e(B) (\e$B=i4|CM$O\e(B 9) \e$B$HH=CG$7$^$9!#\e(BGnus \e$B$O9XFI$HHs9XFI$N%0%k!<%W$OA4$/F1MM$K\e(B
+\e$B07$$$^$9$,!"%>%s%S$H\e(B kill \e$B%0%k!<%W$O!"$I$N5-;v$rFI$s$@$+!"B8:_$9$k$+$J$I\e(B
+\e$B$N>pJs$r0l@Z;}$A$^$;$s!#$3$N;`$s$G$k%0%k!<%W$H@8$-$F$k%0%k!<%W$N6hJL$O!"\e(B
+\e$BJL$K$=$l$,$-$l$$$@$+$i$H$+8-$$$+$i$H$$$&$o$1$G$O$J$/!"=c?h$K8zN(E*$JM}M3\e(B
+\e$B$N$?$a$G$9!#\e(B
+
+\e$B%a!<%kMQ$N%0%k!<%W$O\e(B (\e$B$b$7$"$l$P\e(B) \e$BHs>o$K>.$5$$%l%Y%k\e(B (\e$BNc$($P\e(B 1 \e$B$+\e(B 2) \e$B$K\e(B
+\e$B$7$F$*$/$3$H$r$*4+$a$7$^$9!#\e(B
+
+\e$B<!$N\e(B gnus \e$B$N%G%#%U%)%k%H$NF0:n$N@bL@$O!"$3$H$K$h$k$H!"$3$l$i$N%l%Y%k$NA4\e(B
+\e$B$F$rM}2r$9$k=u$1$K$J$k$+$b$7$l$^$;$s!#%G%#%U%)%k%H$G$O!"\e(Bgnus \e$B$O9VFI$7$F\e(B
+\e$B$$$k6u$G$J$$%0%k!<%W$rI=<($7$^$9$,!"\e(B@kbd{L} \e$B$rC!$/$3$H$K$h$C$F6u$N%0%k!<\e(B
+\e$B%W$dHs9VFI$N%0%k!<%W$bI=<($5$;$k$3$H$,$G$-$^$9!#$D$^$j!"Hs9VFI$N%0%k!<%W\e(B
+\e$B$O1#$5$l$F$$$k!"$H8@$C$F$bNI$$$G$7$g$&!#\e(B
+
+\e$B%>%s%S$H\e(B kill \e$B%0%k!<%W$O!"%G%#%U%)%k%H$G$O1#$5$l$F$$$kE@$GHs9VFI$N%0%k!<\e(B
+\e$B%W$K;w$F$$$^$9!#$7$+$7!"\e(Bgnus \e$B$,%K%e!<%9%5!<%P!<$KBP$7$F%>%s%S$H\e(B kill \e$B%0\e(B
+\e$B%k!<%W$K4X$9$k>pJs\e(B (\e$B5-;v?t!"L$FI5-;v?t\e(B) \e$B$NLd$$9g$o$;$r$7$J$$E@$G!"9XFI$*\e(B
+\e$B$h$SHs9XFI$N%0%k!<%W$H$O0c$C$F$$$^$9!#$U$D$&!"$"$J$?$O6=L#$NL5$$%0%k!<%W\e(B
+\e$B$r\e(B @kbd{C-k} \e$B$G\e(B kill \e$B$7$^$9$h$M!#$b$7!"$[$H$s$I$N%0%k!<%W$,\e(B kill \e$B$5$l$F\e(B
+\e$B$$$k$H!"\e(Bgnus \e$B$OB.$/$J$j$^$9!#\e(B
+
+\e$B$J$<\e(B gnus \e$B$O%>%s%S$H\e(B kill \e$B%0%k!<%W$r6hJL$9$k$N$G$7$g$&\e(B?  \e$B$($($H!"%5!<%P!<\e(B
+\e$B$K?7$7$$%0%k!<%W$,$G$-$k$H!"\e(Bgnus \e$B$O%G%#%U%)%k%H$G$=$l$r%>%s%S$K$7$^$9!#\e(B
+\e$B$3$l$O!"$"$J$?$,$U$D$&$O?7$7$$%0%k!<%W$KHQ$o$5$l$J$$$3$H$r0UL#$7$^$9$,!"\e(B
+\e$B$"$J$?$O\e(B @kbd{A z} \e$B$G?7$7$$%0%k!<%W$N%j%9%H$rF@$k$3$H$,$G$-$^$9!#$"$J$?\e(B
+\e$B$O9%$_$N$b$N$r9VFI$7!"MW$i$J$$$b$N$O\e(B kill \e$B$9$l$PNI$$$N$G$9!#\e(B
+(@kbd{A k} \e$B$G\e(B kill \e$B$5$l$?%0%k!<%W$N%j%9%H$rI=<($7$^$9!#\e(B)
+
+\e$B$b$7%l%Y%kJQ?t$GM7$S$?$$$N$G$"$l$P!"B?>/Cm0U$r$7$F$^$o$kI,MW$,$"$j$^$9!#\e(B
+\e$B0lC6$=$l$r@_Dj$7$?$i!"FsEY$H$=$l$K?($i$J$$$G$/$@$5$$!#$5$i$K8@$($P!"<+J,\e(B
+\e$B$G2?$r$d$C$F$$$k$+$r@53N$KM}2r$7$F$$$J$$8B$j!"0l@Z?($i$J$$$G$/$@$5$$!#\e(B
 
 @vindex gnus-level-default-unsubscribed
 @vindex gnus-level-default-subscribed
-\e$B?H6a$K4X78$9$k\e(B2\e$B$D$NJQ?t$O\e(B @code{gnus-level-default-subscribed}\e$B!J=i4|CM\e(B
-\e$B$O\e(B 3\e$B!K$H\e(B @code{gnus-level-default-unsubscribed}\e$B!J=i4|CM$O\e(B 6\e$B!K$G$9!#$3\e(B
-\e$B$l$i$O?7$7$$%0%k!<%W$,!JHs!K9XFI$5$l$?$H$-$N%l%Y%k$G$9!#$b$A$m\e(B
-\e$B$s!"$3$l$i\e(B2\e$B$D$NJQ?t$NCM$O!"0UL#$N$"$k@5$7$$HO0O$G$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B?H6a$K4X78$9$kFs$D$NJQ?t$O\e(B @code{gnus-level-default-subscribed} (\e$B=i4|CM\e(B
+\e$B$O\e(B 3) \e$B$H\e(B @code{gnus-level-default-unsubscribed} (\e$B=i4|CM$O\e(B 6) \e$B$G$9!#$3$l\e(B
+\e$B$i$O?7$7$$%0%k!<%W$,\e(B (\e$BHs\e(B) \e$B9XFI$5$l$?$H$-$N%l%Y%k$G$9!#$b$A$m$s!"$3$l\e(B
+\e$B$iFs$D$NJQ?t$NCM$O!"0UL#$N$"$k@5$7$$HO0O$G$J$/$F$O$J$j$^$;$s!#\e(B
 
 @vindex gnus-keep-same-level
-@code{gnus-keep-same-level} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"0\F0%3%^%s%I$N$$$/\e(B
-\e$B$D$+$OF10l!J$"$k$$$O$=$l$h$j>.$5$$!K%l%Y%k$N%0%k!<%W$N$_$N0\F0$K$J$j$^$9!#\e(B
-\e$BFC$K!"$"$k%0%k!<%W$N:G8e$N5-;v$+$i<!$N%0%k!<%W$K0\$k$H$-!"<!$NF10l!J$"$k$$\e(B
-\e$B$O$=$l$h$j>.$5$$!K%l%Y%k$N%0%k!<%W$K0\F0$7$^$9!#$3$l$O;D$j$N%0%k!<%W$rFI$`\e(B
-\e$B$h$j@h$K!"$h$j=EMW$J%0%k!<%W$rFI$s$G$*$-$?$$$H$-$K$OJXMx$+$b$7$l$^$;$s!#\e(B
+@code{gnus-keep-same-level} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"0\F0%3%^%s%I$N$$\e(B
+\e$B$/$D$+$OF10l\e(B (\e$B$"$k$$$O$=$l$h$j>.$5$$\e(B) \e$B%l%Y%k$N%0%k!<%W$N$_$N0\F0$K$J$j$^\e(B
+\e$B$9!#FC$K!"$"$k%0%k!<%W$N:G8e$N5-;v$+$i<!$N%0%k!<%W$K0\$k$H$-!"<!$NF1\e(B
+\e$B0l\e(B (\e$B$"$k$$$O$=$l$h$j>.$5$$\e(B) \e$B%l%Y%k$N%0%k!<%W$K0\F0$7$^$9!#$3$l$O;D$j$N%0\e(B
+\e$B%k!<%W$rFI$`$h$j@h$K!"$h$j=EMW$J%0%k!<%W$rFI$s$G$*$-$?$$$H$-$K$OJXMx$+$b\e(B
+\e$B$7$l$^$;$s!#\e(B
+
+\e$B$b$7$3$NCM$,\e(B @code{best} \e$B$@$C$?$i!":G$b=EMW$J\e(B (\e$B:G$b%l%Y%k$NCM$,>.$5\e(B
+\e$B$$\e(B) \e$B%0%k!<%W$K0\F0$7$^$9!#\e(B
 
 @vindex gnus-group-default-list-level
-\e$B=i4|@_Dj$G$O\e(B @code{gnus-group-default-list-level} \e$B$HF1$8$+$=$l\e(B
-\e$B$h$j>.$5$$%l%Y%k$N%0%k!<%W$,!"%0%k!<%W%P%C%U%!$K0lMwI=<($5$l$^$9!#\e(B
+\e$B=i4|@_Dj$G$O\e(B @code{gnus-group-default-list-level} \e$B$HF1$8$+$=$l$h$j>.$5$$\e(B
+\e$B%l%Y%k$N%0%k!<%W$,!"%0%k!<%W%P%C%U%!$K0lMwI=<($5$l$^$9!#\e(B
 
 @vindex gnus-group-list-inactive-groups
-@code{gnus-group-list-inactive-groups} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l\e(B
-\e$B$P!"L$FI$N%0%k!<%W$K0l=o$K%"%/%F%#%V$G$J$$%0%k!<%W$bI=<($7$^$9!#\e(B
-\e$B$3$NJQ?t$O=i4|@_Dj$G$O\e(B @code{t} \e$B$G$9!#$b$7$3$l$,\e(B @code{nil} \e$B$G$"\e(B
-\e$B$l$P!"%"%/%F%#%V$G$J$$%0%k!<%W$OI=<($5$l$^$;$s!#\e(B
+@code{gnus-group-list-inactive-groups} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"L$FI\e(B
+\e$B$N%0%k!<%W$K0l=o$K%"%/%F%#%V$G$J$$%0%k!<%W$bI=<($7$^$9!#$3$NJQ?t$O=i4|@_\e(B
+\e$BDj$G$O\e(B @code{t} \e$B$G$9!#$b$7$3$l$,\e(B @code{nil} \e$B$G$"$l$P!"%"%/%F%#%V$G$J$$%0\e(B
+\e$B%k!<%W$OI=<($5$l$^$;$s!#\e(B
 
 @vindex gnus-group-use-permanent-levels
-@code{gnus-group-use-permanent-levels} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l\e(B
-\e$B$P!"0lC6%l%Y%k$r\e(B @kbd{g} \e$B$d\e(B @kbd{l} \e$B$N%W%l%U%#%C%/%9$KM?$($k$H!"\e(B
-\e$B$=$N8e$NA4$F$N%3%^%s%I$K$*$$$F$=$N%l%Y%k$,!V:nMQ$9$k!W%l%Y%k$K$J\e(B
-\e$B$j$^$9!#\e(B
-
+@code{gnus-group-use-permanent-levels} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"0lC6\e(B
+\e$B%l%Y%k$r\e(B @kbd{g} \e$B$d\e(B @kbd{l} \e$B$N%W%l%U%#%C%/%9$KM?$($k$H!"$=$N8e$NA4$F$N%3\e(B
+\e$B%^%s%I$K$*$$$F$=$N%l%Y%k$,!V:nMQ$9$k!W%l%Y%k$K$J$j$^$9!#\e(B
 
 @vindex gnus-activate-level
-Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W$N\e(B
-\e$B$_$r5/F0$7$^$9!J$D$^$j%5!<%P$KLd$$9g$o$;$r$9$k!K!#9XFI$7$F$$$J$$%0%k!<%W$r\e(B
-\e$B5/F0$7$?$/$J$1$l$P!"$3$NJQ?t$rNc$($P\e(B 5 \e$B$K@_Dj$9$k$H$h$$$+$b$7$l$^$;$s!#%G\e(B
-\e$B%U%)%k%H$O\e(B 6 \e$B$G$9!#\e(B
+Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W\e(B
+\e$B$N$_$r5/F0$7$^$9\e(B (\e$B$D$^$j%5!<%P$KLd$$9g$o$;$r$9$k\e(B)\e$B!#9XFI$7$F$$$J$$%0%k!<\e(B
+\e$B%W$r5/F0$7$?$/$J$1$l$P!"$3$NJQ?t$rNc$($P\e(B 5 \e$B$K@_Dj$9$k$H$h$$$+$b$7$l$^$;\e(B
+\e$B$s!#%G%U%)%k%H$O\e(B 6 \e$B$G$9!#\e(B
 
 @node Group Score
 @section \e$B%0%k!<%W$N%9%3%"\e(B
@@ -1805,30 +2307,28 @@ Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%
 @cindex group rank
 @cindex rank
 
-\e$BIaDL$O=EMW$J%0%k!<%W$O9b%l%Y%k$K$7$F$*$/$G$7$g$&$1$l$I$b!"$3$NJ}\e(B
-\e$BK!$G$O>/!9@)8B$,$-$D$$$G$9$h$M!#$R$g$C$H$7$?$i!"%0%k!<%W$r$I$l$/\e(B
-\e$B$i$$IQHK$KFI$`$+$K$h$C$F%0%k!<%W%P%C%U%!$r%=!<%H$7$?$$$J$"!"$J$s\e(B
-\e$B$F;W$o$J$$!)M}$K$+$J$C$F$k$G$7$g!)\e(B
+\e$BIaDL$O=EMW$J%0%k!<%W$O9b%l%Y%k$K$7$F$*$/$G$7$g$&$1$l$I$b!"$3$NJ}K!$G$O>/!9\e(B
+\e$B@)8B$,$-$D$$$G$9$h$M!#$R$g$C$H$7$?$i!"%0%k!<%W$r$I$l$/$i$$IQHK$KFI$`$+$K\e(B
+\e$B$h$C$F%0%k!<%W%P%C%U%!$r%=!<%H$7$?$$$J$"!"$J$s$F;W$o$J$$\e(B? \e$BM}$K$+$J$C$F$k\e(B
+\e$B$G$7$g\e(B?
 
 @dfn{\e$B%0%k!<%W%9%3%"\e(B} (@dfn{group score}) \e$B$O$=$N$?$a$N$b$N$G$9!#\e(BGnus \e$B$K0J\e(B
 \e$B2<$G@bL@$5$l$F$$$k5!9=$G!"$=$l$>$l$N%0%k!<%W$KBP$7$F%9%3%"$r;XDj$5$;$k$3\e(B
 \e$B$H$,$G$-$^$9!#$=$7$F%0%k!<%W%P%C%U%!$r$3$N%9%3%"$r4p$K%=!<%H$9$k$3$H$,$G\e(B
 \e$B$-$^$9!#$"$k$$$O!"%9%3%"=g$G%=!<%H$7$F$=$N8e%l%Y%k$G%=!<%H$9$k$3$H$b$G$-\e(B
-\e$B$^$9!#!J%l%Y%k$H%9%3%"$r$R$H$^$H$a$K$7$F!"%0%k!<%W$N\e(B@dfn{\e$B%i%s%/\e(B}
-(@dfn{rank}) \e$B$H8F$S$^$9!#%l%Y%k$,\e(B 4 \e$B$G%9%3%"$,\e(B 1 \e$B$N%0%k!<%W$O!"%l%Y%k$,\e(B
-5 \e$B$G%9%3%"$,\e(B 300 \e$B$N%0%k!<%W$h$j$b9b$$%i%s%/$H$J$j$^$9!#!J%l%Y%k$NJ}$,=E\e(B
-\e$BMWEY$,9b$/!"%9%3%"$NJ}$O=EMWEY$,Dc$/$J$j$^$9!#!K!K\e(B
+\e$B$^$9!#\e(B(\e$B%l%Y%k$H%9%3%"$r$R$H$^$H$a$K$7$F!"%0%k!<%W\e(B
+\e$B$N\e(B @dfn{\e$B%i%s%/\e(B} (@dfn{rank}) \e$B$H8F$S$^$9!#%l%Y%k$,\e(B 4 \e$B$G%9%3%"$,\e(B 1 \e$B$N%0%k!<\e(B
+\e$B%W$O!"%l%Y%k$,\e(B 5 \e$B$G%9%3%"$,\e(B 300 \e$B$N%0%k!<%W$h$j$b9b$$%i%s%/$H$J$j$^$9!#\e(B
+(\e$B%l%Y%k$NJ}$,=EMWEY$,9b$/!"%9%3%"$NJ}$O=EMWEY$,Dc$/$J$j$^$9!#\e(B))
 
 @findex gnus-summary-bubble-group
-\e$BIQHK$KFI$`%0%k!<%W$K!"$a$C$?$KFI$^$J$$%0%k!<%W$h$j$b9b$$%9%3%"$rM?$($?$$$H\e(B
-\e$B$-$O!"\e(B@code{gnus-summary-exit-hook} \e$B%U%C%/$K\e(B
-@code{gnus-summary-bubble-group} \e$B4X?t$rDI2C$9$k$3$H$,$G$-$^$9!#$3$l$G%P%V\e(B
-\e$B%k%=!<%H$N<B9T7k2L$,!J%=!<%H$N8e$G!KF@$i$l$k$G$7$g$&!#35N,%b!<%I$r=*N;$9\e(B
-\e$B$k$?$S$K$3$N3hF0$r$5$;$?$$$N$G$"$l$P!"F1$8%U%C%/$K\e(B
-@code{gnus-group-sort-groups-by-rank} \e$B$+\e(B
-@code{gnus-group-sort-groups-by-score} \e$B$rDI2C$G$-$^$9$,!"$$$/$i$+CY$/$J$k\e(B
-\e$B$G$7$g$&!#\e(B
-
+\e$BIQHK$KFI$`%0%k!<%W$K!"$a$C$?$KFI$^$J$$%0%k!<%W$h$j$b9b$$%9%3%"$rM?$($?$$\e(B
+\e$B$H$-$O!"\e(B@code{gnus-summary-exit-hook} \e$B%U%C%/\e(B
+\e$B$K\e(B @code{gnus-summary-bubble-group} \e$B4X?t$rDI2C$9$k$3$H$,$G$-$^$9!#$3$l$G\e(B
+\e$B%P%V%k%=!<%H$N<B9T7k2L$,\e(B (\e$B%=!<%H$N8e$G\e(B) \e$BF@$i$l$k$G$7$g$&!#35N,%b!<%I$r=*\e(B
+\e$BN;$9$k$?$S$K$3$N3hF0$r$5$;$?$$$N$G$"$l$P!"F1$8%U%C%/\e(B
+\e$B$K\e(B @code{gnus-group-sort-groups-by-rank} \e$B$+\e(B @code{gnus-group-sort-groups-by-score} \e$B$r\e(B
+\e$BDI2C$G$-$^$9$,!"$$$/$i$+CY$/$J$k$G$7$g$&!#\e(B
 
 @node Marking Groups
 @section \e$B%0%k!<%W$X$N0u\e(B
@@ -1867,38 +2367,36 @@ Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%
 @item M w
 @kindex M w (Group)
 @findex gnus-group-mark-region
-\e$B%]%$%s%H$H%^!<%/$N4V$NA4$F$N%0%k!<%W$K0u$r$D$1$k\e(B
-(@code{gnus-group-mark-region})\e$B!#\e(B
+\e$B%]%$%s%H$H%^!<%/$N4V$NA4$F$N%0%k!<%W$K0u$r$D$1\e(B
+\e$B$k\e(B (@code{gnus-group-mark-region})\e$B!#\e(B
 
 @item M b
 @kindex M b (Group)
 @findex gnus-group-mark-buffer
-\e$B%P%C%U%!Fb$NA4$F$N%0%k!<%W$K0u$r$D$1$k\e(B
-(@code{gnus-group-mark-buffer})\e$B!#\e(B
+\e$B%P%C%U%!Fb$NA4$F$N%0%k!<%W$K0u$r$D$1$k\e(B (@code{gnus-group-mark-buffer})\e$B!#\e(B
 
 @item M r
 @kindex M r (Group)
 @findex gnus-group-mark-regexp
-\e$B$"$k@55,I=8=$K9gCW$9$kA4$F$N%0%k!<%W$K0u$r$D$1$k\e(B
-(@code{gnus-group-mark-regexp})\e$B!#\e(B
+\e$B$"$k@55,I=8=$K9gCW$9$kA4$F$N%0%k!<%W$K0u$r$D$1\e(B
+\e$B$k\e(B (@code{gnus-group-mark-regexp})\e$B!#\e(B
 @end table
 
 @ref{Process/Prefix} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 
 @findex gnus-group-universal-argument
-\e$B%W%m%;%90u$,IU$1$i$l$F$$$kA4$F$N%0%k!<%W$KBP$7$F2?$+$NL?Na$r<B9T$7$?$$\e(B
-\e$B$H$-$O!"\e(B@kbd{M-&} (@code{gnus-group-universal-argument}) \e$BL?Na$r;H$&$3$H$,\e(B
+\e$B%W%m%;%90u$,IU$1$i$l$F$$$kA4$F$N%0%k!<%W$KBP$7$F2?$+$NL?Na$r<B9T$7$?$$$H\e(B
+\e$B$-$O!"\e(B@kbd{M-&} (@code{gnus-group-universal-argument}) \e$BL?Na$r;H$&$3$H$,\e(B
 \e$B$G$-$^$9!#%W%m%s%W%H$+$i<B9T$7$?$$L?Na$rF~NO$7$^$9!#\e(B
 
-
 @node Foreign Groups
 @section \e$B30It%0%k!<%W\e(B
 @cindex foreign groups
 
 \e$B0J2<$G$O!"0lHLE*$J30It%0%k!<%W$N:n@.!"JQ99$r9T$&%0%k!<%W%b!<%I$NL?Na$r$$\e(B
 \e$B$/$D$+!"$*$h$SFCJL$JL\E*$N%0%k!<%W$r4JC1$K:n@.$9$kL?Na$r>R2p$7$^$9!#$3$l\e(B
-\e$B$i$NL?Na$OA4$F!"?75,$K:n@.$7$?%0%k!<%W$r%]%$%s%H0LCV$KA^F~$7$^$9!=!=\e(B
-@code{gnus-subscribe-newsgroup-method} \e$B$O;2>H$5$l$^$;$s!#\e(B
+\e$B$i$NL?Na$OA4$F!"?75,$K:n@.$7$?%0%k!<%W$r%]%$%s%H0LCV$KA^F~$7$^\e(B
+\e$B$9!=!=\e(B@code{gnus-subscribe-newsgroup-method} \e$B$O;2>H$5$l$^$;$s!#\e(B
 
 @table @kbd
 
@@ -1907,18 +2405,18 @@ Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%
 @findex gnus-group-make-group
 @cindex making groups
 \e$B?7$7$$%0%k!<%W$r:n@.$7$^$9\e(B (@code{gnus-group-make-group})\e$B!#\e(BGnus \e$B$O%W%m%s\e(B
-\e$B%W%H$rI=<($7$F!"L>A0$HJ}K!$H!">l9g$K$h$C$F$O\e(B @dfn{address} \e$B$NF~NO$r\e(B
-\e$B5a$a$F$-$^$9!#$h$j4JC1$K\e(B @sc{nntp} \e$B%0%k!<%W$r9XFI$9$kJ}K!$O!"\e(B
+\e$B%W%H$rI=<($7$F!"L>A0$HJ}K!$H!">l9g$K$h$C$F$O\e(B @dfn{address} \e$B$NF~NO$r5a$a\e(B
+\e$B$F$-$^$9!#$h$j4JC1$K\e(B @sc{nntp} \e$B%0%k!<%W$r9XFI$9$kJ}K!$O!"\e(B
 @pxref{Browse Foreign Server}\e$B!#\e(B
 
 @item G r
 @kindex G r (Group)
 @findex gnus-group-rename-group
 @cindex renaming groups
-\e$B8=:_$N%0%k!<%W$NL>A0$r!"2?$+JL$N$b$N$KJQ99$7$^$9\e(B
-(@code{gnus-group-rename-group})\e$B!#$3$l$O$"$k<o$N%0%k!<%W!=!=<g$K%a!<%k%0%k!<\e(B
-\e$B%W$KBP$7$F$N$_M-8z$G$9!#$3$N%3%^%s%I$O%P%C%/%(%s%I$K$h$C$F$OHs>o$KCY$$$3$H\e(B
-\e$B$bM-$jF@$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$NL>A0$r!"2?$+JL$N$b$N$KJQ99$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-rename-group})\e$B!#$3$l$O$"$k<o$N%0%k!<%W!=!=<g$K%a!<\e(B
+\e$B%k%0%k!<%W$KBP$7$F$N$_M-8z$G$9!#$3$N%3%^%s%I$O%P%C%/%(%s%I$K$h$C$F$OHs>o\e(B
+\e$B$KCY$$$3$H$bM-$jF@$^$9!#\e(B
 
 @item G c
 @kindex G c (Group)
@@ -1930,27 +2428,27 @@ Gnus \e$B$ODL>o!"\e(B@code{gnus-activate-level} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%
 @kindex G e (Group)
 @findex gnus-group-edit-group-method
 @cindex renaming groups
-\e$B8=:_$N%0%k!<%W$NA*BrJ}K!$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^$9\e(B
-(@code{gnus-group-edit-group-method})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$NA*BrJ}K!$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-edit-group-method})\e$B!#\e(B
 
 @item G p
 @kindex G p (Group)
 @findex gnus-group-edit-group-parameters
-\e$B%0%k!<%W%Q%i%a!<%?$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^$9\e(B
-(@code{gnus-group-edit-group-parameters})\e$B!#\e(B
+\e$B%0%k!<%W%Q%i%a!<%?$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-edit-group-parameters})\e$B!#\e(B
 
 @item G E
 @kindex G E (Group)
 @findex gnus-group-edit-group
-\e$B%0%k!<%W>pJs$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^$9\e(B
-(@code{gnus-group-edit-group})\e$B!#\e(B
+\e$B%0%k!<%W>pJs$r=$@5$9$k$?$a$N%P%C%U%!$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-edit-group})\e$B!#\e(B
 
 @item G d
 @kindex G d (Group)
 @findex gnus-group-make-directory-group
 @cindex nndir
-\e$B%G%#%l%/%H%j%0%k!<%W$r:n@.$7$^$9\e(B (@pxref{Directory Groups})\e$B!#%G%#%l%/%H%j\e(B
-\e$BL>$r%W%m%s%W%H$GF~NO$7$^$9\e(B (@code{gnus-group-make-directory-group})\e$B!#\e(B
+\e$B%G%#%l%/%H%j%0%k!<%W$r:n@.$7$^$9\e(B (@pxref{Directory Groups})\e$B!#%G%#%l%/%H\e(B
+\e$B%jL>$r%W%m%s%W%H$GF~NO$7$^$9\e(B (@code{gnus-group-make-directory-group})\e$B!#\e(B
 
 @item G h
 @kindex G h (Group)
@@ -1966,20 +2464,20 @@ Gnus \e$B%X%k%W%0%k!<%W$r:n@.$7$^$9\e(B (@code{gnus-group-make-help-group})\e$B!#\e(
 @findex gnus-group-make-archive-group
 @vindex gnus-group-archive-directory
 @vindex gnus-group-recent-archive-directory
-Gnus \e$B%"!<%+%$%V%0%k!<%W$r:n@.$7$^$9\e(B
-(@code{gnus-group-make-archive-group})\e$B!#=i4|@_Dj$G$O:G$b:G6a$N5-;v$r;X\e(B
-\e$B$7$F$$$k%0%k!<%W$,:n@.$5$l$^$9$,\e(B
-(@code{gnus-group-recent-archive-directory})\e$B!"@\F,0z?t$rM?$($k$HA4\e(B
-\e$B$F$N5-;v$r4^$`%0%k!<%W$,\e(B @code{gnus-group-archive-directory} \e$B$r4p$K:n@.\e(B
-\e$B$5$l$^$9!#\e(B
+Gnus \e$B%"!<%+%$%V%0%k!<%W$r:n@.$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-archive-group})\e$B!#=i4|@_Dj$G$O:G$b:G6a$N5-;v$r\e(B
+\e$B;X$7$F$$$k%0%k!<%W$,:n@.$5$l$^$9\e(B
+\e$B$,\e(B (@code{gnus-group-recent-archive-directory})\e$B!"@\F,0z?t$rM?$($k$HA4$F\e(B
+\e$B$N5-;v$r4^$`%0%k!<%W$,\e(B @code{gnus-group-archive-directory} \e$B$r4p$K:n@.$5\e(B
+\e$B$l$^$9!#\e(B
 
 @item G k
 @kindex G k (Group)
 @findex gnus-group-make-kiboze-group
 @cindex nnkiboze
 kiboze \e$B%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$GL>A0$H!"\e(Bkiboze \e$B%0%k!<%W$K!V4^$a\e(B
-\e$B$?$$!W%0%k!<%W$K9g$&@55,I=8=$H!"%X%C%@!<$K9g$&J8;zNs$NAH$rF~NO$7$^$9\e(B
-(@code{gnus-group-make-kiboze-group})\e$B!#\e(B@xref{Kibozed Groups}.
+\e$B$?$$!W%0%k!<%W$K9g$&@55,I=8=$H!"%X%C%@!<$K9g$&J8;zNs$NAH$rF~NO$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-kiboze-group})\e$B!#\e(B@xref{Kibozed Groups}.
 
 @item G D
 @kindex G D (Group)
@@ -1994,21 +2492,21 @@ kiboze \e$B%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$GL>A0$H!"\e(Bkiboze \e$B%0%k!<%W$K!V4^$
 @findex gnus-group-make-doc-group
 @cindex ClariNet Briefs
 @cindex nndoc
-\e$B%U%!%$%k$J$I$r$b$H$K%0%k!<%W$r:n@.$7$^$9\e(B
-(@code{gnus-group-make-doc-group})\e$B!#$3$N%3%^%s%I$K@\F,<-$rM?$($?>l9g!"%U%!\e(B
-\e$B%$%kL>$H%U%!%$%k%?%$%W$r%W%m%s%W%H$GF~NO$7$^$9!#8=:_%5%]!<%H$5$l$F$$$k%U%!\e(B
-\e$B%$%k%?%$%W$O!"\e(B@code{babyl}, @code{mbox}, @code{digest}, @code{mmdf},
-@code{news}, @code{rnews}, @code{clari-briefs}, @code{rfc934},
-@code{rfc822-forward}, @code{nsmail}, @code{forward} \e$B$G$9!#@\F,<-$J$7$G\e(B
-\e$B$3$N%3%^%s%I$r<B9T$9$k$H!"\e(Bgnus \e$B$O%U%!%$%k%?%$%W$r?dB,$7$^$9!#\e(B
+\e$B%U%!%$%k$J$I$r$b$H$K%0%k!<%W$r:n@.$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-doc-group})\e$B!#$3$N%3%^%s%I$K@\F,<-$rM?$($?>l9g!"\e(B
+\e$B%U%!%$%kL>$H%U%!%$%k%?%$%W$r%W%m%s%W%H$GF~NO$7$^$9!#8=:_%5%]!<%H$5$l$F$$\e(B
+\e$B$k%U%!%$%k%?%$%W$O!"\e(B
+@code{babyl}, @code{mbox}, @code{digest}, @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, @code{rfc934}, @code{rfc822-forward}, @code{nsmail}, @code{forward} \e$B$G\e(B
+\e$B$9!#@\F,<-$J$7$G$3$N%3%^%s%I$r<B9T$9$k$H!"\e(Bgnus \e$B$O%U%!%$%k%?%$%W$r?dB,$7\e(B
+\e$B$^$9!#\e(B
 @xref{Document Groups}\e$B!#\e(B
 
 @item G u
 @kindex G u (Group)
 @vindex gnus-useful-groups
 @findex gnus-group-make-useful-group
-@code{gnus-useful-groups} \e$B$K$"$k%0%k!<%W$N0l$D$r$D$/$j$^$9\e(B
-(@code{gnus-group-make-useful-group})\e$B!#\e(B
+@code{gnus-useful-groups} \e$B$K$"$k%0%k!<%W$N0l$D$r$D$/$j$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-useful-group})\e$B!#\e(B
 
 @item G w
 @kindex G w (Group)
@@ -2017,44 +2515,44 @@ kiboze \e$B%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$GL>A0$H!"\e(Bkiboze \e$B%0%k!<%W$K!V4^$
 @cindex Alta Vista
 @cindex InReference
 @cindex nnweb
-\e$B%&%'%V8!:w7k2L$r$b$H$K0l;~E*$J%0%k!<%W$r:n@.$7$^$9\e(B
-(@code{gnus-group-make-web-group})\e$B!#$3$N%3%^%s%I$K@\F,<-$rM?$($k$H!"\e(B
-\e$B0l;~E*$G$O$J$/8GDj$7$?%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$G8!:w5!4X$N<oN`\e(B
-(search engine type) \e$B$H8!:wJ8;zNs$rF~NO$7$^$9!#M-8z$J8!:w5!4X$N<oN`$K$O\e(B
-@code{dejanews}, @code{altavista}, @code{reference} \e$B$,$"$j$^$9!#\e(B
+\e$B%&%'%V8!:w7k2L$r$b$H$K0l;~E*$J%0%k!<%W$r:n@.$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-web-group})\e$B!#$3$N%3%^%s%I$K@\F,<-$rM?$($k$H!"\e(B
+\e$B0l;~E*$G$O$J$/8GDj$7$?%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$G8!:w5!4X$N<o\e(B
+\e$BN`\e(B (search engine type) \e$B$H8!:wJ8;zNs$rF~NO$7$^$9!#M-8z$J8!:w5!4X$N<oN`$K\e(B
+\e$B$O\e(B @code{dejanews}, @code{altavista}, @code{reference} \e$B$,$"$j$^$9!#\e(B
 @xref{Web Searches}.
 
-\e$B$b$7!"\e(B@code{dejanews} \e$B8!:w5!4X$rMQ$$$k>l9g$K$O!"\e(B@samp{~g
-alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
-\e$B$F!"8!:wBP>]$rFCDj$N%0%k!<%W$K8BDj$9$k$3$H$,2DG=$G$9!#\e(B
+\e$B$b$7!"\e(B@code{dejanews} \e$B8!:w5!4X$rMQ$$$k>l9g$K$O!"\e(B
+@samp{~g alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3\e(B
+\e$B$H$K$h$C$F!"8!:wBP>]$rFCDj$N%0%k!<%W$K8BDj$9$k$3$H$,2DG=$G$9!#\e(B
 
 @item G DEL
 @kindex G DEL (Group)
 @findex gnus-group-delete-group
 \e$B$3$N4X?t$O8=:_$N%0%k!<%W$r:o=|$7$^$9\e(B (@code{gnus-group-delete-group})\e$B!#\e(B
-\e$B@\F,<-$,M?$($i$l$k$H!"$3$N4X?t$O$=$N%0%k!<%WFb$NA45-;v$rK\Ev$K:o=|$7!"\e(B
-\e$B%0%k!<%W<+?H$r$3$N@$$+$i6/@)E*$KKu;&$7$F$7$^$$$^$9!#@\F,<-$O!"$"$J\e(B
-\e$B$?$,2?$r$d$m$&$H$7$F$$$k$+!"K\Ev$K<+?.$,$"$k$H$-$K$N$_;H$C$F$/$@$5$$!#$^$"!"\e(B
-\e$B$3$N%3%^%s%I$O!J\e(B@code{nntp} \e$B%0%k!<%W$N$h$&$J!KFI$_=P$7@lMQ%0%k!<%W$K$O;H$(\e(B
-\e$B$^$;$s$1$I!#\e(B
+\e$B@\F,<-$,M?$($i$l$k$H!"$3$N4X?t$O$=$N%0%k!<%WFb$NA45-;v$rK\Ev$K:o=|$7!"%0\e(B
+\e$B%k!<%W<+?H$r$3$N@$$+$i6/@)E*$KKu;&$7$F$7$^$$$^$9!#@\F,<-$O!"$"$J$?$,2?$r\e(B
+\e$B$d$m$&$H$7$F$$$k$+!"K\Ev$K<+?.$,$"$k$H$-$K$N$_;H$C$F$/$@$5$$!#$^$"!"$3$N\e(B
+\e$B%3%^%s%I$O\e(B (@code{nntp} \e$B%0%k!<%W$N$h$&$J\e(B) \e$BFI$_=P$7@lMQ%0%k!<%W$K$O;H$($^\e(B
+\e$B$;$s$1$I!#\e(B
 
 @item G V
 @kindex G V (Group)
 @findex gnus-group-make-empty-virtual
-\e$B?7$7$$!"?7A/$J!"6u$N\e(B @code{nnvirtual} \e$B%0%k!<%W$r:n@.$7$^$9\e(B
-(@code{gnus-group-make-empty-virtual})\e$B!#\e(B@xref{Virtual Groups}.
+\e$B?7$7$$!"?7A/$J!"6u$N\e(B @code{nnvirtual} \e$B%0%k!<%W$r:n@.$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-make-empty-virtual})\e$B!#\e(B@xref{Virtual Groups}.
 
 @item G v
 @kindex G v (Group)
 @findex gnus-group-add-to-virtual
-\e$B8=:_$N%0%k!<%W$r\e(B @code{nnvirtual} \e$B%0%k!<%W$KDI2C$7$^$9\e(B
-(@code{gnus-group-add-to-virtual})\e$B!#$3$l$O%W%m%;%90u\e(B/\e$B@\F,0z?t$N=,47$K=>\e(B
-\e$B$$$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$r\e(B @code{nnvirtual} \e$B%0%k!<%W$KDI2C$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-add-to-virtual})\e$B!#$3$l$O%W%m%;%90u\e(B/\e$B@\F,0z?t$N=,47$K\e(B
+\e$B=>$$$^$9!#\e(B
 
 @end table
 
-\e$B$5$^$6$^$JA*BrJ}K!$K4X$9$k$5$i$J$k>pJs$O\e(B @xref{Select Methods} \e$B$r;2\e(B
-\e$B>H$7$F$/$@$5$$!#\e(B
+\e$B$5$^$6$^$JA*BrJ}K!$K4X$9$k$5$i$J$k>pJs$O\e(B @xref{Select Methods} \e$B$r;2>H$7\e(B
+\e$B$F$/$@$5$$!#\e(B
 
 @vindex gnus-activate-foreign-newsgroups
 \e$B$b$7\e(B @code{gnus-activate-foreign-newsgroups} \e$B$,@5$N?t$G$"$l$P!"\e(Bgnus \e$B$O5/\e(B
@@ -2064,24 +2562,23 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 \e$B$7$F2<$5$$!#\e(B@code{gnus-activate-level} \e$B$b30It%K%e!<%9%0%k!<%W$N3hF02=$K\e(B
 \e$B1F6A$r5Z$\$7$^$9!#\e(B
 
-
 @node Group Parameters
 @section \e$B%0%k!<%W%Q%i%a!<%?\e(B
 @cindex group parameters
 
 \e$B%0%k!<%W%Q%i%a!<%?$O!"$"$kFCDj$N%0%k!<%W$K8GM-$J>pJs$r3JG<$7$^$9!#0J2<$O\e(B
-\e$B%0%k!<%W%Q%i%a!<%?%j%9%H$NNc$G$9!'\e(B
+\e$B%0%k!<%W%Q%i%a!<%?%j%9%H$NNc$G$9\e(B:
 
 @example
 ((to-address . "ding@@gnus.org")
  (auto-expire . t))
 @end example
 
-\e$B$=$l$>$l$NMWAG$O!XE@BP!Y\e(B(dotted pair)\e$B!=!=$D$^$jE@\e(B (dot) \e$B$NA0$K80!"E@$N8e$m\e(B
-\e$B$KCM$,$"$k$b$N!"$G9=@.$5$l$^$9!#A4$F$N%Q%i%a!<%?$O$3$N7A<0$r<h$j$^$9$,!"\e(B
+\e$B$=$l$>$l$NMWAG$O!XE@BP!Y\e(B(dotted pair)\e$B!=!=$D$^$jE@\e(B (dot) \e$B$NA0$K80!"E@$N8e\e(B
+\e$B$m$KCM$,$"$k$b$N!"$G9=@.$5$l$^$9!#A4$F$N%Q%i%a!<%?$O$3$N7A<0$r<h$j$^$9$,!"\e(B
 @emph{\e$BNc30\e(B}\e$B$H$7$F6I=jJQ?t$N;XDj$OE@BP$G$O$J$/DL>o$N%j%9%H$K$J$j$^$9!#\e(B
 
-\e$B0J2<$OMxMQ2DG=$J%0%k!<%W%Q%i%a!<%?$G$9!'\e(B
+\e$B0J2<$OMxMQ2DG=$J%0%k!<%W%Q%i%a!<%?$G$9\e(B:
 
 @table @code
 @item to-address
@@ -2089,14 +2586,14 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 \e$B%U%)%m!<%"%C%W$H%K%e!<%9$X$NEj9F$r$9$k$H$-$K;HMQ$5$l$k%"%I%l%9!#\e(B
 
 @example
-(to-address .  "some@@where.com")
+(to-address . "some@@where.com")
 @end example
 
 \e$B$3$l$O<g$K!"JD$8$?%a!<%j%s%0%j%9%H$rI=$o$9%a!<%k%0%k!<%W$K$*$$$FJXMx$J$b\e(B
 \e$B$N$G$9!=!=$9$J$o$A%a!<%j%s%0%j%9%H$KEj9F$9$k?M$OA4$F$=$l$r9XFI$7$F$$$k$O\e(B
 \e$B$:!"$H$$$&%a!<%j%s%0%j%9%H$N$3$H$G$9!#$3$N%Q%i%a!<%?$r;HMQ$9$k$H!"%a!<%k\e(B
 \e$B$O$=$N%a!<%j%s%0%j%9%H$K$7$+Ej9F$5$l$J$$$3$H$,J]>Z$5$l$k$N$G!";22C<T$O$"\e(B
-\e$B$J$?$N%U%)%m!<%"%C%W5-;v$r\e(B2\e$BDL<u$1<h$k$3$H$O$"$j$^$;$s!#\e(B
+\e$B$J$?$N%U%)%m!<%"%C%W5-;v$rFsDL<u$1<h$k$3$H$O$"$j$^$;$s!#\e(B
 
 @code{to-address} \e$B$r;XDj$9$k$H!"$=$N%0%k!<%W$,30It%0%k!<%W$G$"$k$+$I$&$+\e(B
 \e$B$K4X$o$i$:M-8z$K$J$j$^$9!#Nc$($P\e(B @samp{fa.4ad-l} \e$B$H$$$&%0%k!<%W$,%5!<%P\e(B
@@ -2113,20 +2610,20 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 (to-list . "some@@where.com")
 @end example
 
-\e$B$3$l$O%U%)%m!<%"%C%W$r$7$?$H$-$O40A4$KL5;k$5$l$^$9!=!=Nc30$O$=$l$,%K%e!<%9\e(B
-\e$B%0%k!<%W$rI=$o$7$F$$$k$H$-$O!"\e(B@kbd{f} \e$B$r2!$7$?$H$-$K%a!<%k%0%k!<%W$N%k!<%k\e(B
-\e$B$,E,MQ$5$l$k$H$$$&$3$H$G$9!#\e(B
+\e$B$3$l$O%U%)%m!<%"%C%W$r$7$?$H$-$O40A4$KL5;k$5$l$^$9!=!=Nc30$O$=$l$,%K%e!<\e(B
+\e$B%9%0%k!<%W$rI=$o$7$F$$$k$H$-$O!"\e(B@kbd{f} \e$B$r2!$7$?$H$-$K%a!<%k%0%k!<%W$N%k!<\e(B
+\e$B%k$,E,MQ$5$l$k$H$$$&$3$H$G$9!#\e(B
 
 \e$B$b$7\e(B @kbd{a} \e$B%3%^%s%I$r%a!<%k%0%k!<%W$G<B9T$7$?$H$-$K!"\e(B@code{to-list} \e$B%0\e(B
 \e$B%k!<%W%Q%i%a!<%?$b\e(B @code{to-address} \e$B$b%0%k!<%W%Q%i%a!<%?$bL5$1$l$P!"\e(B
-@code{to-list} \e$B%0%k!<%W%Q%i%a!<%?$O!"\e(B@code{gnus-add-to-list} \e$B$,\e(B @code{t}
-\e$B$K@_Dj$5$l$F$$$l$P%a%C%;!<%8Aw?.;~$K<+F0E*$KIU2C$5$l$^$9!#\e(B
+@code{to-list} \e$B%0%k!<%W%Q%i%a!<%?$O!"\e(B
+@code{gnus-add-to-list} \e$B$,\e(B @code{t} \e$B$K@_Dj$5$l$F$$$l$P%a%C%;!<%8Aw?.;~$K\e(B
+\e$B<+F0E*$KIU2C$5$l$^$9!#\e(B
 @vindex gnus-add-to-list
 
 \e$B$b$7\e(B @kbd{a} \e$B%3%^%s%I$r%a!<%k%0%k!<%W$G<B9T$7$?$H$-!"\e(B@code{to-list} \e$B%0%k!<\e(B
 \e$B%W%Q%i%a!<%?$,$J$1$l$P!"Aw?.;~$K<+F0E*$KIU2C$5$l$^$9!#\e(B
 
-
 @item visible
 @cindex visible
 \e$B%0%k!<%W%Q%i%a!<%?$N%j%9%HCf$K\e(B @code{(visible . t)} \e$B$H$$$&MWAG$,$"$l$P!"\e(B
@@ -2135,11 +2632,11 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 
 @item broken-reply-to
 @cindex broken-reply-to
-@code{(broken-reply-to . t)} \e$B$H$$$&MWAG$,$"$l$P!"$=$N%0%k!<%W$G$O\e(B
-@code{Reply-To} \e$B$OL5;k$5$l$k!"$H$$$&0UL#$G$9!#$3$l$O$"$k\e(B listserv \e$B$K$h$k%a!<\e(B
-\e$B%j%s%0%j%9%H$r9XFI$7$F$$$F!"$=$l$,\e(B @code{Reply-To} \e$BMs$r\e(B listserv \e$B<+?H$KJV\e(B
-\e$B$9$h$&$K$D$1$i$l$F$$$k>l9g$KM-8z$G$7$g$&!#$3$l$O$*$+$7$J?6$kIq$$$G$9!#$@$+\e(B
-\e$B$i$3$l$,MW$k$s$G$9!*\e(B
+@code{(broken-reply-to . t)} \e$B$H$$$&MWAG$,$"$l$P!"$=$N%0%k!<%W$G\e(B
+\e$B$O\e(B @code{Reply-To} \e$B$OL5;k$5$l$k!"$H$$$&0UL#$G$9!#$3$l$O$"$k\e(B listserv \e$B$K\e(B
+\e$B$h$k%a!<%j%s%0%j%9%H$r9XFI$7$F$$$F!"$=$l$,\e(B @code{Reply-To} \e$BMs\e(B
+\e$B$r\e(B listserv \e$B<+?H$KJV$9$h$&$K$D$1$i$l$F$$$k>l9g$KM-8z$G$7$g$&!#$3$l$O$*$+\e(B
+\e$B$7$J?6$kIq$$$G$9!#$@$+$i$3$l$,MW$k$s$G$9\e(B!
 
 @item to-group
 @cindex to-group
@@ -2154,12 +2651,12 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 
 @item gcc-self
 @cindex gcc-self
-\e$B%0%k!<%W%Q%i%a!<%?%j%9%H$K\e(B @code{(gcc-self . t)} \e$B$,$"$l$P!"?7$7$/:n@.$9$k\e(B
-\e$B%a%C%;!<%8$O8=:_$N%0%k!<%W$K\e(B @code{Gcc} \e$B$5$l$^$9!#$b$7\e(B @code{(gcc-self
-. none)} \e$B$,$"$l$P!"\e(B@code{Gcc:} \e$BMs$O@8@.$5$l$:!"\e(B@code{(gcc-self
-. "string")} \e$B$,$"$l$P$3$NJ8;zNs$O$=$N$^$^\e(B @code{gcc} \e$BMs$KA^F~$5$l$^$9!#$3\e(B
-\e$B$N%Q%i%a!<%?$O0J2<$G@bL@$9$kA4$F$N\e(B @code{Gcc} \e$B$N=i4|5,B'$h$j$bM%@h\e(B
-\e$B$5$l$^$9\e(B (@pxref{Archived Messages})\e$B!#\e(B
+\e$B%0%k!<%W%Q%i%a!<%?%j%9%H$K\e(B @code{(gcc-self . t)} \e$B$,$"$l$P!"?7$7$/:n@.$9\e(B
+\e$B$k%a%C%;!<%8$O8=:_$N%0%k!<%W$K\e(B @code{Gcc} \e$B$5$l$^$9!#$b\e(B
+\e$B$7\e(B @code{(gcc-self . none)} \e$B$,$"$l$P!"\e(B@code{Gcc:} \e$BMs$O@8@.$5$l$:!"\e(B
+@code{(gcc-self . "string")} \e$B$,$"$l$P$3$NJ8;zNs$O$=$N$^$^\e(B @code{gcc} \e$BMs\e(B
+\e$B$KA^F~$5$l$^$9!#$3$N%Q%i%a!<%?$O0J2<$G@bL@$9$kA4$F$N\e(B @code{Gcc} \e$B$N=i4|5,\e(B
+\e$BB'$h$j$bM%@h$5$l$^$9\e(B (@pxref{Archived Messages})\e$B!#\e(B
 
 @item auto-expire
 @cindex auto-expire
@@ -2178,10 +2675,10 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 @cindex expiry-wait
 @vindex nnmail-expiry-wait-function
 \e$B%0%k!<%W%Q%i%a!<%?$K\e(B @code{(expiry-wait . 10)} \e$B$N$h$&$JMWAG$,$"$l$P!"$3\e(B
-\e$B$NCM$O5-;v$r;~8B>C5n$9$k$H$-$K\e(B @code{nnmail-expiry-wait} \e$B$H\e(B
-@code{nnmail-expiry-wait-function} \e$B$N@_Dj$h$j$bM%@h$5$l$^$9!#$3$NCM$O;~\e(B
-\e$B8B>C5n$NF|?t!J@0?t$G$"$kI,MW$O$J$$!K$+$b$7$/$O\e(B @code{never} \e$B$+\e(B
-@code{immediate} \e$B$N%7%s%\%k$r;XDj$G$-$^$9!#\e(B
+\e$B$NCM$O5-;v$r;~8B>C5n$9$k$H$-\e(B
+\e$B$K\e(B @code{nnmail-expiry-wait} \e$B$H\e(B @code{nnmail-expiry-wait-function} \e$B$N@_\e(B
+\e$BDj$h$j$bM%@h$5$l$^$9!#$3$NCM$O;~8B>C5n$NF|?t\e(B (\e$B@0?t$G$"$kI,MW$O$J$$\e(B) \e$B$+$b\e(B
+\e$B$7$/$O\e(B @code{never} \e$B$+\e(B @code{immediate} \e$B$N%7%s%\%k$r;XDj$G$-$^$9!#\e(B
 
 @item score-file
 @cindex score file group parameter
@@ -2191,17 +2688,18 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 
 @item adapt-file
 @cindex adapt file group parameter
-@code{(adapt-file . "file")} \e$B$N$h$&$JMWAG$O!"\e(B@file{file} \e$B$r8=:_$N%0%k!<%W\e(B
-\e$B$NE,1~%U%!%$%k$K$7$^$9!#A4$F$NE,1~%9%3%"EPO?$O$3$N%U%!%$%k$KF~$j$^$9!#\e(B
+@code{(adapt-file . "file")} \e$B$N$h$&$JMWAG$O!"\e(B@file{file} \e$B$r8=:_$N%0%k!<\e(B
+\e$B%W$NE,1~%U%!%$%k$K$7$^$9!#A4$F$NE,1~%9%3%"EPO?$O$3$N%U%!%$%k$KF~$j$^$9!#\e(B
 
 @item admin-address
 \e$B%a!<%j%s%0%j%9%H$+$iC&2q$9$k$H$-$O!"C&2qDLCN%a!<%k$r$=$N%a!<%j%s%0%j%9%H\e(B
 \e$B<+?H$KAw?.$7$F$O$$$1$^$;$s!#Be$o$j$K4IM}MQ%"%I%l%9$K%a%C%;!<%8$rAw?.$7$^\e(B
-\e$B$9!#$3$N%Q%i%a!<%?$K$O$I$3$+JXMx$J4IM}MQ%"%I%l%9$r=q$$$F$*$/$3$H$,$G$-$^$9!#\e(B
+\e$B$9!#$3$N%Q%i%a!<%?$K$O$I$3$+JXMx$J4IM}MQ%"%I%l%9$r=q$$$F$*$/$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
 
 @item display
- @code{(display . MODE)} \e$B$N$h$&$JMWAG$O!"%0%k!<%W$KF~$k$H$-$K$I$N5-;v$r\e(B
-\e$BI=<($9$k$+$r;XDj$7$^$9!#M-8z$JCM$O!"\e(B
+@code{(display . MODE)} \e$B$N$h$&$JMWAG$O!"%0%k!<%W$KF~$k$H$-$K$I$N5-;v$rI=\e(B
+\e$B<($9$k$+$r;XDj$7$^$9!#M-8z$JCM$O!"\e(B
 
 @table @code
 @item all
@@ -2212,9 +2710,9 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 @end table
 
 @item comment
-@code{(comment . "This is a comment")} \e$B$N$h$&$JMWAG$O!"$=$N%0%k!<%W$KBP$9\e(B
-\e$B$kG$0U$N%3%a%s%H$G$9!#$3$l$O8=:_$N\e(B gnus \e$B$G$OL5;k$5$l$^$9$,!"FCDj$N%0%k!<%W\e(B
-\e$B$KBP$9$k>pJs$r3JG<$9$k>l=j$rDs6!$7$^$9!#\e(B
+@code{(comment . "This is a comment")} \e$B$N$h$&$JMWAG$O!"$=$N%0%k!<%W$KBP\e(B
+\e$B$9$kG$0U$N%3%a%s%H$G$9!#$3$l$O8=:_$N\e(B gnus \e$B$G$OL5;k$5$l$^$9$,!"FCDj$N%0%k!<\e(B
+\e$B%W$KBP$9$k>pJs$r3JG<$9$k>l=j$rDs6!$7$^$9!#\e(B
 
 @c FIXTGNUS Is this true?
 @c  @item charset
@@ -2225,23 +2723,23 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 @item (@var{variable} @var{form})
 \e$B%0%k!<%W$KF~$k$H$-$K!"$=$N%0%k!<%W%m!<%+%k$NJQ?t$r@_Dj$9$k%0%k!<%W%Q%i%a!<\e(B
 \e$B%?$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B@samp{news.answers} \e$B$K$*$$$F%9%l%C%II=<($r9T\e(B
-\e$B$$$?$/$J$$$H$-$O!"$=$N%0%k!<%W$K%0%k!<%W%Q%i%a!<%?$K\e(B
-@code{(gnus-show-threads nil)} \e$B$H=q$1$^$9!#\e(B @code{gnus-show-threads} \e$B$O!"\e(B
-\e$B$=$N35N,%P%C%U%!$NCf$N%m!<%+%kJQ?t$K$J$j!"\e(Bform \e$B$N\e(B @code{nil} \e$B$O$=$3$G\e(B
-\e$BI>2A$5$l$^$9!#\e(B
+\e$B$$$?$/$J$$$H$-$O!"$=$N%0%k!<%W$K%0%k!<%W%Q%i%a!<%?\e(B
+\e$B$K\e(B @code{(gnus-show-threads nil)} \e$B$H=q$1$^$9!#\e(B
+@code{gnus-show-threads} \e$B$O!"$=$N35N,%P%C%U%!$NCf$N%m!<%+%kJQ?t$K$J$j!"\e(B
+form \e$B$N\e(B @code{nil} \e$B$O$=$3$GI>2A$5$l$^$9!#\e(B
 
-\e$B$3$l$O$b$7I,MW$G$"$l$P!"%0%k!<%WKh$N%U%C%/4X?t$H$7$F$b;HMQ$G$-$^$9!#$b$7$"\e(B
-\e$B$k%0%k!<%W$KF~$C$?$H$-$K%S!<%W2;$rLD$i$7$?$1$l$P!"$=$N%0%k!<%W$N%Q%i%a!<%?\e(B
-\e$B$K\e(B @code{(dummy-variable (ding))} \e$B$_$?$$$J$b$N$r=q$$$F$*$/$3$H$b$G$-$^$9!#\e(B
-@code{dummy-variable} \e$B$H$$$&JQ?t$K\e(B @code{(ding)} \e$B$NI>2A7k2L$,@_Dj$5$l$^$9\e(B
-\e$B$,!"$^$"!"C/$b5$$K$7$J$$$G$7$g!)\e(B
+\e$B$3$l$O$b$7I,MW$G$"$l$P!"%0%k!<%WKh$N%U%C%/4X?t$H$7$F$b;HMQ$G$-$^$9!#$b$7\e(B
+\e$B$"$k%0%k!<%W$KF~$C$?$H$-$K%S!<%W2;$rLD$i$7$?$1$l$P!"$=$N%0%k!<%W$N%Q%i%a!<\e(B
+\e$B%?$K\e(B @code{(dummy-variable (ding))} \e$B$_$?$$$J$b$N$r=q$$$F$*$/$3$H$b$G$-$^\e(B
+\e$B$9!#\e(B@code{dummy-variable} \e$B$H$$$&JQ?t$K\e(B @code{(ding)} \e$B$NI>2A7k2L$,@_Dj$5\e(B
+\e$B$l$^$9$,!"$^$"!"C/$b5$$K$7$J$$$G$7$g\e(B?
 
 @item posting-style
-\e$B$3$N%0%k!<%W$NDI2C$NEj9FMM<0$r$3$3$N$_$KJ]B8$9$k$3$H$,$G$-$^$9\e(B
-(@pxref{Posting Styles})\e$B!#\e(B \e$B=q<0$O\e(B @code{gnus-posting-style} \e$BO"A[%j%9%H$H\e(B
-\e$BF1$8$G$9$,!"$3$3$K$O%0%k!<%WL>$K9gCW$9$k@55,I=8=$O$"$j$^$;$s\e(B (\e$BEvA3$G$9\e(B)\e$B!#\e(B
-\e$B$3$N%0%k!<%W$NMM<0$NMWAG$O\e(B @code{gnus-posting-styles} \e$B$G8+$D$+$C$?$b$N$h\e(B
-\e$B$j$bM%@h$5$l$^$9!#\e(B
+\e$B$3$N%0%k!<%W$NDI2C$NEj9FMM<0$r$3$3$N$_$KJ]B8$9$k$3$H$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Posting Styles})\e$B!#=q<0$O\e(B @code{gnus-posting-style} \e$BO"A[%j%9%H\e(B
+\e$B$HF1$8$G$9$,!"$3$3$K$O%0%k!<%WL>$K9gCW$9$k@55,I=8=$O$"$j$^$;$s\e(B (\e$BEvA3$G\e(B
+\e$B$9\e(B)\e$B!#$3$N%0%k!<%W$NMM<0$NMWAG$O\e(B @code{gnus-posting-styles} \e$B$G8+$D$+$C$?\e(B
+\e$B$b$N$h$j$bM%@h$5$l$^$9!#\e(B
 
 \e$BNc$($P!"$3$N%0%k!<%W$N$_!"$+$C$3$$$$L>A0$H=pL>$K$7$?$$$J$i!"\e(B
 @code{gnus-posting-styles} \e$B$r$$$8$i$:$K!"$3$N$h$&$J$b$N$r%0%k!<%W%Q%i%a!<\e(B
@@ -2255,9 +2753,9 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 
 @end table
 
-\e$B%0%k!<%W%Q%i%a!<%?$N=$@5$K$O\e(B @kbd{G p} \e$BL?Na$r;H$C$F$/$@$5$$!#%H%T%C%/%Q%i\e(B
-\e$B%a!<%?$K$D$$$FFI$s$G$_$k$3$H$bLLGr$$$G$7$g$&\e(B (@pxref{Topic Parameters})\e$B!#\e(B
-
+\e$B%0%k!<%W%Q%i%a!<%?$N=$@5$K$O\e(B @kbd{G p} \e$BL?Na$r;H$C$F$/$@$5$$!#%H%T%C%/%Q\e(B
+\e$B%i%a!<%?$K$D$$$FFI$s$G$_$k$3$H$bLLGr$$$G$7$g\e(B
+\e$B$&\e(B (@pxref{Topic Parameters})\e$B!#\e(B
 
 @node Listing Groups
 @section \e$B%0%k!<%W$N0lMwI=<(\e(B
@@ -2273,36 +2771,35 @@ alt.sysadmin.recovery shaving} \e$B$N$h$&$J9gCW$9$kJ8;zNs$rMQ$$$k$3$H$K$h$C\e(B
 @kindex l (Group)
 @findex gnus-group-list-groups
 \e$BL$FI5-;v$r;}$DA4$F$N%0%k!<%W$rI=<($7$^$9\e(B (@code{gnus-group-list-groups})\e$B!#\e(B
-\e$B?t;z@\F,0z?t$r;H$&$H!"$3$N%3%^%s%I$O0z?t$N?t$+$=$l$h$j$b>.$5$$%l%Y%k\e(B
-\e$B$N%0%k!<%W$N$_$rI=<($7$^$9!#=i4|@_Dj$G$O!"$3$l$O%l%Y%k\e(B 5\e$B!J$D$^$j\e(B
-@code{gnus-group-default-list-level}\e$B!K$+$=$l$h$j>.$5$$%l%Y%k!J$9$J$o$A9XFI\e(B
-\e$B$7$F$$$k%0%k!<%W$N$_!K$rI=<($7$^$9!#\e(B
+\e$B?t;z@\F,0z?t$r;H$&$H!"$3$N%3%^%s%I$O0z?t$N?t$+$=$l$h$j$b>.$5$$%l%Y%k$N%0\e(B
+\e$B%k!<%W$N$_$rI=<($7$^$9!#=i4|@_Dj$G$O!"$3$l$O%l%Y%k\e(B 5 (\e$B$D$^\e(B
+\e$B$j\e(B @code{gnus-group-default-list-level}) \e$B$+$=$l$h$j>.$5$$%l%Y%k\e(B (\e$B$9$J$o\e(B
+\e$B$A9XFI$7$F$$$k%0%k!<%W$N$_\e(B) \e$B$rI=<($7$^$9!#\e(B
 
 @item L
 @itemx A u
 @kindex A u (Group)
 @kindex L (Group)
 @findex gnus-group-list-all-groups
-\e$BL$FI5-;v$N$"$k$J$7$K4X$o$i$:!"A4$F$N%0%k!<%W$rI=<($7$^$9\e(B
-(@code{gnus-group-list-all-groups})\e$B!#?t;z@\F,0z?t$r;HMQ$9$k$H!"$3\e(B
-\e$B$N%3%^%s%I$O0z?t$N?t$+$=$l$h$j$b>.$5$$%l%Y%k$N%0%k!<%W$N$_$rI=<($7$^$9!#\e(B
-\e$B=i4|@_Dj$G$O\e(B 7 \e$B$+$=$l$h$j$b>.$5$$%l%Y%k$N%0%k!<%W!J$9$J$o$A9XFI!"Hs9XFI\e(B
-\e$B$N%0%k!<%W$N$_!K$,I=<($5$l$^$9!#\e(B
+\e$BL$FI5-;v$N$"$k$J$7$K4X$o$i$:!"A4$F$N%0%k!<%W$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-group-list-all-groups})\e$B!#?t;z@\F,0z?t$r;HMQ$9$k$H!"$3$N%3\e(B
+\e$B%^%s%I$O0z?t$N?t$+$=$l$h$j$b>.$5$$%l%Y%k$N%0%k!<%W$N$_$rI=<($7$^$9!#=i4|\e(B
+\e$B@_Dj$G$O\e(B 7 \e$B$+$=$l$h$j$b>.$5$$%l%Y%k$N%0%k!<%W\e(B (\e$B$9$J$o$A9XFI!"Hs9XFI$N%0\e(B
+\e$B%k!<%W$N$_\e(B) \e$B$,I=<($5$l$^$9!#\e(B
 
 @item A l
 @kindex A l (Group)
 @findex gnus-group-list-level
-\e$B$"$kFCDj$N%l%Y%k$NL$FI5-;v$N$"$k%0%k!<%W$rI=<($7$^$9\e(B
-(@code{gnus-group-list-level})\e$B!#@\F,<-$rM?$($k$H!"L$FI5-;v$N$J$$\e(B
-\e$B%0%k!<%W$b4^$a$FI=<($7$^$9!#\e(B
+\e$B$"$kFCDj$N%l%Y%k$NL$FI5-;v$N$"$k%0%k!<%W$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-group-list-level})\e$B!#@\F,<-$rM?$($k$H!"L$FI5-;v$N$J$$%0%k!<\e(B
+\e$B%W$b4^$a$FI=<($7$^$9!#\e(B
 
 @item A k
 @kindex A k (Group)
 @findex gnus-group-list-killed
 kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\\e(B
-\e$BF,0z?t$rM?$($k$H!"8=:_9XFI!"Hs9XFI$H$J$C$F$$$J$$A4$F$NMxMQ2DG=\e(B
-\e$B$J%0%k!<%W$rI=<($7$^$9!#$3$l$O%5!<%P$+$i%"%/%F%#%V%U%!%$%k$rFI$`$3$H$K$J\e(B
-\e$B$k$G$7$g$&!#\e(B
+\e$BF,0z?t$rM?$($k$H!"8=:_9XFI!"Hs9XFI$H$J$C$F$$$J$$A4$F$NMxMQ2DG=$J%0%k!<%W\e(B
+\e$B$rI=<($7$^$9!#$3$l$O%5!<%P$+$i%"%/%F%#%V%U%!%$%k$rFI$`$3$H$K$J$k$G$7$g$&!#\e(B
 
 @item A z
 @kindex A z (Group)
@@ -2312,52 +2809,62 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item A m
 @kindex A m (Group)
 @findex gnus-group-list-matching
-\e$B@55,I=8=$K9gCW$9$kL>A0$r;}$D%0%k!<%W$G!"L$FI5-;v$N$"$k9XFI%0%k!<%W$rA4\e(B
-\e$B$FI=<($7$^$9\e(B (@code{gnus-group-list-matching})\e$B!#\e(B
+\e$B@55,I=8=$K9gCW$9$kL>A0$r;}$D%0%k!<%W$G!"L$FI5-;v$N$"$k9XFI%0%k!<%W$rA4$F\e(B
+\e$BI=<($7$^$9\e(B (@code{gnus-group-list-matching})\e$B!#\e(B
 
 @item A M
 @kindex A M (Group)
 @findex gnus-group-list-all-matching
-\e$B@55,I=8=$K9gCW$9$k%0%k!<%W$rI=<($9$k\e(B
-(@code{gnus-group-list-all-matching})\e$B!#\e(B
+\e$B@55,I=8=$K9gCW$9$k%0%k!<%W$rI=<($9\e(B
+\e$B$k\e(B (@code{gnus-group-list-all-matching})\e$B!#\e(B
 
 @item A A
 @kindex A A (Group)
 @findex gnus-group-list-active
-\e$B:#@\B3$7$F$$$k%5!<%P$N%"%/%F%#%V%U%!%$%k$K$"$k%0%k!<%W$r!"K\Ev$KA4ItI=<($7\e(B
-\e$B$^$9\e(B (@code{gnus-group-list-active})\e$B!#$3$l$O$7$P$i$/;~4V$,$+$+$k$3$H$bM-$j\e(B
-\e$BF@$^$9!#$?$V$s\e(B @kbd{A M} \e$B$r<B9T$7$F!"9gCW$5$;$?$$ItJ,$r\e(B @samp{.} \e$B$H$7$F\e(B
-\e$BA4$F$N9gCW$9$k%j%9%H$rI=<($5$;$?J}$,NI$$$G$7$g$&!#$^$?!"$3$N%3%^%s%I$O\e(B
-\e$B!J$^$@!KB8:_$7$J$$%0%k!<%W$bI=<($9$k$+$bCN$l$^$;$s!=!=$3$l$O\e(B kill \e$B$5$l$?%0\e(B
-\e$B%k!<%W$G$"$k$+$N$h$&$KI=<($5$l$^$9!#=PNO$OB?>/3d$j0z$$$F<u$1<h$C$F$M!#\e(B
+\e$B:#@\B3$7$F$$$k%5!<%P$N%"%/%F%#%V%U%!%$%k$K$"$k%0%k!<%W$r!"K\Ev$KA4ItI=<(\e(B
+\e$B$7$^$9\e(B (@code{gnus-group-list-active})\e$B!#$3$l$O$7$P$i$/;~4V$,$+$+$k$3$H$b\e(B
+\e$BM-$jF@$^$9!#$?$V$s\e(B @kbd{A M} \e$B$r<B9T$7$F!"9gCW$5$;$?$$ItJ,$r\e(B @samp{.} \e$B$H\e(B
+\e$B$7$FA4$F$N9gCW$9$k%j%9%H$rI=<($5$;$?J}$,NI$$$G$7$g$&!#$^$?!"$3$N%3%^%s%I\e(B
+\e$B$O\e(B (\e$B$^$@\e(B) \e$BB8:_$7$J$$%0%k!<%W$bI=<($9$k$+$bCN$l$^$;$s!=!=$3$l$O\e(B kill \e$B$5$l\e(B
+\e$B$?%0%k!<%W$G$"$k$+$N$h$&$KI=<($5$l$^$9!#=PNO$OB?>/3d$j0z$$$F<u$1<h$C$F$M!#\e(B
 
 @item A a
 @kindex A a (Group)
 @findex gnus-group-apropos
-\e$B@55,I=8=$K9gCW$9$kL>A0$r;}$D%0%k!<%W$rA4$FI=<($9$k\e(B
-(@code{gnus-group-apropos})\e$B!#\e(B
+\e$B@55,I=8=$K9gCW$9$kL>A0$r;}$D%0%k!<%W$rA4$FI=<($9\e(B
+\e$B$k\e(B (@code{gnus-group-apropos})\e$B!#\e(B
 
 @item A d
 @kindex A d (Group)
 @findex gnus-group-description-apropos
-\e$B@55,I=8=$K9gCW$9$kL>A0$+@bL@J8$r;}$D%0%k!<%W$rA4$FI=<($9$k\e(B
-(@code{gnus-group-description-apropos})\e$B!#\e(B
+\e$B@55,I=8=$K9gCW$9$kL>A0$+@bL@J8$r;}$D%0%k!<%W$rA4$FI=<($9\e(B
+\e$B$k\e(B (@code{gnus-group-description-apropos})\e$B!#\e(B
+
+@item A c
+@kindex A c (Group)
+@findex gnus-group-list-cached
+\e$B%-%c%C%7%e5-;v$r;}$D%0%k!<%W$rA4$FI=<($9\e(B
+\e$B$k\e(B (@code{gnus-group-list-cached})\e$B!#\e(B
+
+@item A ?
+@kindex A ? (Group)
+@findex gnus-group-list-dormant
+\e$BJ]N15-;v$r;}$D%0%k!<%W$rA4$FI=<($9$k\e(B (@code{gnus-group-list-dormant})\e$B!#\e(B
 
 @end table
 
 @vindex gnus-permanently-visible-groups
 @cindex visible group parameter
-@code{gnus-permanently-visible-groups} \e$B@55,I=8=$K9gCW$9$k%0%k!<%W$O!"\e(B
-\e$BL$FI5-;v$,$"$k$+$J$$$+$K4X$o$i$:>o$KI=<($5$l$^$9!#$"$k$$$O%0%k!<%W%Q%i%a!<\e(B
+@code{gnus-permanently-visible-groups} \e$B@55,I=8=$K9gCW$9$k%0%k!<%W$O!"L$\e(B
+\e$BFI5-;v$,$"$k$+$J$$$+$K4X$o$i$:>o$KI=<($5$l$^$9!#$"$k$$$O%0%k!<%W%Q%i%a!<\e(B
 \e$B%?$K$*$$$F\e(B @code{visible} \e$BMWAG$rDI2C$9$k$3$H$G$bF1MM$N8z2L$rF@$k$3$H$,$G\e(B
 \e$B$-$^$9!#\e(B
 
 @vindex gnus-list-groups-with-ticked-articles
-\e$B0uIU$-$N5-;v$N$_$r;}$D%0%k!<%W$ODL>o%0%k!<%W%P%C%U%!$KI=<($5$l$^$9!#$b$7\e(B
-@code{gnus-list-groups-with-ticked-articles} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$=\e(B
-\e$B$N%0%k!<%W$O40A4$K6u$N%0%k!<%W$G$"$k$+$N$h$&$K07$o$l$^$9!#=i4|CM$O\e(B
-@code{t} \e$B$G$9!#\e(B
-
+\e$B0uIU$-$N5-;v$N$_$r;}$D%0%k!<%W$ODL>o%0%k!<%W%P%C%U%!$KI=<($5$l$^$9!#$b\e(B
+\e$B$7\e(B @code{gnus-list-groups-with-ticked-articles} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"\e(B
+\e$B$=$N%0%k!<%W$O40A4$K6u$N%0%k!<%W$G$"$k$+$N$h$&$K07$o$l$^$9!#=i4|CM\e(B
+\e$B$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @node Sorting Groups
 @section \e$B%0%k!<%W$N%=!<%H\e(B
@@ -2366,9 +2873,10 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @kindex C-c C-s (Group)
 @findex gnus-group-sort-groups
 @vindex gnus-group-sort-function
-@kbd{C-c C-s} (@code{gnus-group-sort-groups}) \e$BL?Na$O!"%0%k!<%W%P%C%U%!$r\e(B
-@code{gnus-group-sort-function} \e$BJQ?t$GM?$($i$l$k4X?t$K=>$C$FJB$YBX$($^$9!#\e(B
-\e$BMxMQ2DG=$JJB$YBX$(4X?t\e(B (sorting function) \e$B$K$O0J2<$N$b$N$,$"$j$^$9!'\e(B
+@kbd{C-c C-s} (@code{gnus-group-sort-groups}) \e$BL?Na$O!"%0%k!<%W%P%C%U%!\e(B
+\e$B$r\e(B @code{gnus-group-sort-function} \e$BJQ?t$GM?$($i$l$k4X?t$K=>$C$FJB$YBX$(\e(B
+\e$B$^$9!#MxMQ2DG=$JJB$YBX$(4X?t\e(B (sorting function) \e$B$K$O0J2<$N$b$N$,$"$j$^\e(B
+\e$B$9\e(B:
 
 @table @code
 
@@ -2378,8 +2886,8 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 
 @item gnus-group-sort-by-real-name
 @findex gnus-group-sort-by-real-name
-\e$B%0%k!<%W$rK\Ev$N!JA0$K2?$b$D$$$F$$$J$$!K%0%k!<%WL>$G%"%k%U%!%Y%C%H=g$KJB$Y\e(B
-\e$BJQ$($^$9!#\e(B
+\e$B%0%k!<%W$rK\Ev$N\e(B (\e$BA0$K2?$b$D$$$F$$$J$$\e(B) \e$B%0%k!<%WL>$G%"%k%U%!%Y%C%H=g$KJB\e(B
+\e$B$YJQ$($^$9!#\e(B
 
 @item gnus-group-sort-by-level
 @findex gnus-group-sort-by-level
@@ -2391,8 +2899,8 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 
 @item gnus-group-sort-by-rank
 @findex gnus-group-sort-by-rank
-\e$B%0%k!<%W$N%9%3%"$GJB$YBX$(!"<!$K%0%k!<%W%l%Y%k$GJB$YBX$($^$9!#%l%Y%k$H%9%3\e(B
-\e$B%"$O!"$R$H$^$H$a$K$7$F\e(B@dfn{\e$B%i%s%/\e(B}\e$B$H8F$P$l$^$9!#\e(B@xref{Group Score}.
+\e$B%0%k!<%W$N%9%3%"$GJB$YBX$(!"<!$K%0%k!<%W%l%Y%k$GJB$YBX$($^$9!#%l%Y%k$H%9\e(B
+\e$B%3%"$O!"$R$H$^$H$a$K$7$F\e(B @dfn{\e$B%i%s%/\e(B} \e$B$H8F$P$l$^$9!#\e(B@xref{Group Score}.
 
 @item gnus-group-sort-by-unread
 @findex gnus-group-sort-by-unread
@@ -2402,12 +2910,11 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @findex gnus-group-sort-by-method
 \e$BA*BrJ}K!$N%"%k%U%!%Y%C%H=g$GJB$YBX$($^$9!#\e(B
 
-
 @end table
 
-@code{gnus-group-sort-function} \e$B$OJB$YBX$(4X?t$N%j%9%H$G$"$C$F$b9=$$$^$;$s!#\e(B
-\e$B$3$N>l9g!"$b$C$H$b=EMW$JJB$YBX$($N80$r;}$D4X?t$O:G8e$G$J$/$F$O$J$j$^$;$s!#\e(B
-
+@code{gnus-group-sort-function} \e$B$OJB$YBX$(4X?t$N%j%9%H$G$"$C$F$b9=$$$^$;\e(B
+\e$B$s!#$3$N>l9g!"$b$C$H$b=EMW$JJB$YBX$($N80$r;}$D4X?t$O:G8e$G$J$/$F$O$J$j$^\e(B
+\e$B$;$s!#\e(B
 
 \e$B$"$k<o$NJB$YBX$(MQ$K$O!"D>@\JB$YBX$($kL?Na$b$$$/$D$+$"$j$^$9!#\e(B
 
@@ -2415,43 +2922,43 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item G S a
 @kindex G S a (Group)
 @findex gnus-group-sort-groups-by-alphabet
-\e$B%0%k!<%W%P%C%U%!$r%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-alphabet})\e$B!#\e(B
+\e$B%0%k!<%W%P%C%U%!$r%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-alphabet})\e$B!#\e(B
 
 @item G S u
 @kindex G S u (Group)
 @findex gnus-group-sort-groups-by-unread
-\e$B%0%k!<%W%P%C%U%!$rL$FI5-;v$N?t$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-unread})\e$B!#\e(B
+\e$B%0%k!<%W%P%C%U%!$rL$FI5-;v$N?t$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-unread})\e$B!#\e(B
 
 @item G S l
 @kindex G S l (Group)
 @findex gnus-group-sort-groups-by-level
-\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W%l%Y%k$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-level})\e$B!#\e(B
+\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W%l%Y%k$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-level})\e$B!#\e(B
 
 @item G S v
 @kindex G S v (Group)
 @findex gnus-group-sort-groups-by-score
-\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W$N%9%3%"$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-score})\e$B!#\e(B@xref{Group Score}.
+\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W$N%9%3%"$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-score})\e$B!#\e(B@xref{Group Score}.
 
 @item G S r
 @kindex G S r (Group)
 @findex gnus-group-sort-groups-by-rank
-\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W$N%i%s%/$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
+\e$B%0%k!<%W%P%C%U%!$r%0%k!<%W$N%i%s%/$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
 
 @item G S m
 @kindex G S m (Group)
 @findex gnus-group-sort-groups-by-method
-\e$B%0%k!<%W%P%C%U%!$r%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-groups-by-method})\e$B!#\e(B
+\e$B%0%k!<%W%P%C%U%!$r%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-groups-by-method})\e$B!#\e(B
 
 @end table
 
-\e$B0J2<$NA4$F$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$K=>$$$^$9\e(B
-(@pxref{Process/Prefix})\e$B!#\e(B
+\e$B0J2<$NA4$F$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$K=>$$$^\e(B
+\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 \e$B%7%s%\%k@\F,<-\e(B (@pxref{Symbolic Prefixes}) \e$B$,M?$($i$l$?$H$-$O!"$3$l$iA4\e(B
 \e$B$F$NL?Na$O5U=g$GJB$S49$($^$9!#\e(B
@@ -2462,43 +2969,42 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item G P a
 @kindex G P a (Group)
 @findex gnus-group-sort-selected-groups-by-alphabet
-\e$B%0%k!<%W$r!"%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-alphabet})\e$B!#\e(B
+\e$B%0%k!<%W$r!"%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-alphabet})\e$B!#\e(B
 
 @item G P u
 @kindex G P u (Group)
 @findex gnus-group-sort-selected-groups-by-unread
-\e$B%0%k!<%W$r!"L$FI5-;v$N?t$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-unread})\e$B!#\e(B
+\e$B%0%k!<%W$r!"L$FI5-;v$N?t$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-unread})\e$B!#\e(B
 
 @item G P l
 @kindex G P l (Group)
 @findex gnus-group-sort-selected-groups-by-level
-\e$B%0%k!<%W$r!"%0%k!<%W%l%Y%k$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-level})\e$B!#\e(B
+\e$B%0%k!<%W$r!"%0%k!<%W%l%Y%k$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-level})\e$B!#\e(B
 
 @item G P v
 @kindex G P v (Group)
 @findex gnus-group-sort-selected-groups-by-score
-\e$B%0%k!<%W$r!"%0%k!<%W$N%9%3%"$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-score})\e$B!#\e(B@xref{Group Score}.
+\e$B%0%k!<%W$r!"%0%k!<%W$N%9%3%"$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-score})\e$B!#\e(B
+@xref{Group Score}.
 
 @item G P r
 @kindex G P r (Group)
 @findex gnus-group-sort-selected-groups-by-rank
-\e$B%0%k!<%W$r!"%0%k!<%W$N%i%s%/$GJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
+\e$B%0%k!<%W$r!"%0%k!<%W$N%i%s%/$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
 
 @item G P m
 @kindex G P m (Group)
 @findex gnus-group-sort-selected-groups-by-method
-\e$B%0%k!<%W$r!"%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^$9\e(B
-(@code{gnus-group-sort-selected-groups-by-method})\e$B!#\e(B
+\e$B%0%k!<%W$r!"%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-group-sort-selected-groups-by-method})\e$B!#\e(B
 
 @end table
 
-
-
 @node Group Maintenance
 @section \e$B%0%k!<%W$N4IM}\e(B
 @cindex bogus groups
@@ -2507,34 +3013,33 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item b
 @kindex b (Group)
 @findex gnus-group-check-bogus-groups
-\e$BIT@5$J%0%k!<%W$r8+$D$1$F!":o=|$7$^$9\e(B
-(@code{gnus-group-check-bogus-groups})\e$B!#\e(B
+\e$BIT@5$J%0%k!<%W$r8+$D$1$F!":o=|$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-check-bogus-groups})\e$B!#\e(B
 
 @item F
 @kindex F (Group)
 @findex gnus-group-find-new-groups
-\e$B?7$7$$%0%k!<%W$r8+$D$1$F!"$=$l$i$r=hM}$7$^$9\e(B
-(@code{gnus-group-find-new-groups})\e$B!#\e(B1\e$B2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k$H!"\e(B
-\e$B%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M$k$?$a$KJ}K!\e(B @code{ask-server} \e$B$r;H$$$^$9!#\e(B
-2\e$B2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k$H!"%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M$k$?$a$K\e(B
-\e$B:G$b40A4$G$"$k$H;W$o$l$kJ}K!$rMQ$$!"?7$7$$%0%k!<%W$r%>%s%S$H$7$F9XFI$7$^\e(B
-\e$B$9!#\e(B
+\e$B?7$7$$%0%k!<%W$r8+$D$1$F!"$=$l$i$r=hM}$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-find-new-groups})\e$B!#0l2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k\e(B
+\e$B$H!"%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M$k$?$a$KJ}K!\e(B @code{ask-server} \e$B$r;H$$\e(B
+\e$B$^$9!#Fs2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k$H!"%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M\e(B
+\e$B$k$?$a$K:G$b40A4$G$"$k$H;W$o$l$kJ}K!$rMQ$$!"?7$7$$%0%k!<%W$r%>%s%S$H$7$F\e(B
+\e$B9XFI$7$^$9!#\e(B
 
 @item C-c C-x
 @kindex C-c C-x (Group)
 @findex gnus-group-expire-articles
-\e$B8=:_$N%0%k!<%W$N%(%/%9%Q%$%"5-;v$KBP$7$F!J$b$7$"$l$P!KA4$F%(%/%9%Q%$%"=hM}\e(B
-\e$B$r9T$$$^$9\e(B (@code{gnus-group-expire-articles})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$N%(%/%9%Q%$%"5-;v$KBP$7$F\e(B (\e$B$b$7$"$l$P\e(B) \e$BA4$F%(%/%9%Q%$%"=h\e(B
+\e$BM}$r9T$$$^$9\e(B (@code{gnus-group-expire-articles})\e$B!#\e(B
 
 @item C-c M-C-x
 @kindex C-c M-C-x (Group)
 @findex gnus-group-expire-all-groups
-\e$BA4$F$N%0%k!<%W$NA4$F$N5-;v$KBP$7$F!"%(%/%9%Q%$%"=hM}$r9T$$$^$9\e(B
-(@code{gnus-group-expire-all-groups})\e$B!#\e(B
+\e$BA4$F$N%0%k!<%W$NA4$F$N5-;v$KBP$7$F!"%(%/%9%Q%$%"=hM}$r9T$$$^\e(B
+\e$B$9\e(B (@code{gnus-group-expire-all-groups})\e$B!#\e(B
 
 @end table
 
-
 @node Browse Foreign Server
 @section \e$B30It%5!<%P$N1\Mw\e(B
 @cindex foreign servers
@@ -2551,9 +3056,9 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @findex gnus-browse-mode
 \e$BMxMQ2DG=$J%0%k!<%W$N%j%9%H$r;}$C$??7$7$$%P%C%U%!$,8=$l$^$9!#$3$N%P%C%U%!\e(B
 \e$B$O\e(B @code{gnus-browse-mode} \e$B$r;HMQ$7$^$9!#$3$N%P%C%U%!$ODL>o$N%0%k!<%W%P%C\e(B
-\e$B%U%!$K$A$g$C$H!J$H$$$&$+!"$H$C$F$b!K;w$F$$$^$9!#\e(B
+\e$B%U%!$K$A$g$C$H\e(B (\e$B$H$$$&$+!"$H$C$F$b\e(B) \e$B;w$F$$$^$9!#\e(B
 
-\e$B0J2<$,1\Mw%b!<%I\e(B (browse mode) \e$B$G;HMQ$G$-$k%-!<A`:n$N%j%9%H$G$9!'\e(B
+\e$B0J2<$,1\Mw%b!<%I\e(B (browse mode) \e$B$G;HMQ$G$-$k%-!<A`:n$N%j%9%H$G$9\e(B:
 
 @table @kbd
 @item n
@@ -2569,8 +3074,8 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item SPACE
 @kindex SPACE (Browse)
 @findex gnus-browse-read-group
-\e$B8=:_$N%0%k!<%W$KF~$j!":G=i$K5-;v$rI=<($7$^$9\e(B
-(@code{gnus-browse-read-group})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$KF~$j!":G=i$K5-;v$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-browse-read-group})\e$B!#\e(B
 
 @item RET
 @kindex RET (Browse)
@@ -2593,25 +3098,24 @@ kill \e$B$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B (@code{gnus-group-list-killed})\e$B!#@\
 @item ?
 @kindex ? (Browse)
 @findex gnus-browse-describe-briefly
-\e$B1\Mw%b!<%I\e(B (browse mode) \e$B$r4JC1$K@bL@$7$^$9!J$^$"!"Bg$7$F@bL@$9$k$3$H$b$J\e(B
-\e$B$$$s$@$1$I$5!K\e(B(@code{gnus-browse-describe-briefly})\e$B!#\e(B
+\e$B1\Mw%b!<%I\e(B (browse mode) \e$B$r4JC1$K@bL@$7$^$9\e(B (\e$B$^$"!"Bg$7$F@bL@$9$k$3$H$b\e(B
+\e$B$J$$$s$@$1$I$5\e(B) (@code{gnus-browse-describe-briefly})\e$B!#\e(B
 @end table
 
-
 @node Exiting gnus
 @section Gnus \e$B$N=*N;\e(B
 @cindex exiting gnus
 
-\e$B$=$&!"\e(Bgnus \e$B$O:G8e!J%5%$%3!<!K$G$9!JLuCm\e(B: \e$B$/!"6l$7$$!#86J8$O\e(B ``Yes, gnus
-is ex(c)iting.''\e$B!K!#\e(B
+\e$B$=$&!"\e(Bgnus \e$B$O:G8e\e(B (\e$B%5%$%3!<\e(B) \e$B$G$9\e(B (\e$BLuCm\e(B: \e$B$/!"6l$7$$!#\e(B
+\e$B86J8$O\e(B ``Yes, gnus is ex(c)iting.'')\e$B!#\e(B
 
 @table @kbd
 @item z
 @kindex z (Group)
 @findex gnus-group-suspend
-Gnus \e$B$rCfCG$7$^$9\e(B (@code{gnus-group-suspend})\e$B!#$3$l$O\e(B gnus \e$B$r<B:]$K$O=*N;\e(B
-\e$B$5$;$:!"%0%k!<%W%P%C%U%!0J30$NA4$F$N%P%C%U%!$r>C$9$@$1$G$9!#KM$O$3$l$N$&$l\e(B
-\e$B$7$5$,$h$/$o$+$s$J$$$s$@$1$I!"C/$+J,$+$k?M$$$k!)\e(B
+Gnus \e$B$rCfCG$7$^$9\e(B (@code{gnus-group-suspend})\e$B!#$3$l$O\e(B gnus \e$B$r<B:]$K$O=*\e(B
+\e$BN;$5$;$:!"%0%k!<%W%P%C%U%!0J30$NA4$F$N%P%C%U%!$r>C$9$@$1$G$9!#KM$O$3$l$N\e(B
+\e$B$&$l$7$5$,$h$/$o$+$s$J$$$s$@$1$I!"C/$+J,$+$k?M$$$k\e(B?
 
 @item q
 @kindex q (Group)
@@ -2622,43 +3126,42 @@ Gnus \e$B$r=*N;$7$^$9\e(B(@code{gnus-group-exit})\e$B!#\e(B
 @item Q
 @kindex Q (Group)
 @findex gnus-group-quit
-@file{.newsrc} \e$B%U%!%$%k$r%;!<%V$;$:$K\e(B gnus \e$B$r=*N;$7$^$9\e(B
-(@code{gnus-group-quit})\e$B!#%I%j%V%k%U%!%$%k$O%;!<%V$5$l$^$9$1$I\e(B
-(@pxref{Auto Save})\e$B!#\e(B
+@file{.newsrc} \e$B%U%!%$%k$r%;!<%V$;$:$K\e(B gnus \e$B$r=*N;$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-quit})\e$B!#%I%j%V%k%U%!%$%k$O%;!<%V$5$l$^$9$1\e(B
+\e$B$I\e(B (@pxref{Auto Save})\e$B!#\e(B
 @end table
 
 @vindex gnus-exit-gnus-hook
 @vindex gnus-suspend-gnus-hook
 Gnus \e$B$rCfCG$9$k$H$-$O\e(B @code{gnus-suspend-gnus-hook} \e$B$,8F$S=P$5$l$^$9!#\e(B
-Gnus\e$B$r=*N;$9$k$H$-$O\e(B @code{gnus-exit-gnus-hook} \e$B$,8F$S=P$5$l!"$5$i$K\e(B
-gnus \e$B$r=*N;$9$k$H$-$N:G8e$H$7$F\e(B @code{gnus-after-exiting-gnus-hook} \e$B$,8F$S\e(B
-\e$B=P$5$l$^$9!#\e(B
+Gnus\e$B$r=*N;$9$k$H$-$O\e(B @code{gnus-exit-gnus-hook} \e$B$,8F$S=P$5$l!"$5$i\e(B
+\e$B$K\e(B gnus \e$B$r=*N;$9$k$H$-$N:G8e$H$7\e(B
+\e$B$F\e(B @code{gnus-after-exiting-gnus-hook} \e$B$,8F$S=P$5$l$^$9!#\e(B
 
 @findex gnus-unload
 @cindex unloading
 \e$B$b$7\e(B gnus \e$B$H$=$l$K4XO"$9$k$b$N$r40A4$K=hJ,$7$?$$$N$G$"$l$P!"\e(B
-@code{gnus-unload} \e$B%3%^%s%I$,;H$($^$9!#$3$N%3%^%s%I$O!"%a%?JQ?t$r%+%9%?%^\e(B
-\e$B%$%:$7$h$&$H$7$F$$$k$H$-$K$bJXMx$G$9!#\e(B
+@code{gnus-unload} \e$B%3%^%s%I$,;H$($^$9!#$3$N%3%^%s%I$O!"%a%?JQ?t$r%+%9%?\e(B
+\e$B%^%$%:$7$h$&$H$7$F$$$k$H$-$K$bJXMx$G$9!#\e(B
 
 Note:
 
 @quotation
-\e$B%_%9\e(B Lisa Cannifax \e$B$O1Q8l$N<x6HCf!"8e$m$K:B$C$F$$$k>/G/$,H`=w$N\e(B
-\e$B%W%i%9%F%#%C%/$N0X;R$NGX1[$7$K!"1tI.$G7+$jJV$7@~$rIA$/$N$K$D$i$l\e(B
-\e$B$F!"B-$,$7$S$l$F=E$/$J$j!"0U<1$,[/[0$H$7$F$-$^$7$?!#\e(B
+\e$B%_%9\e(B Lisa Cannifax \e$B$O1Q8l$N<x6HCf!"8e$m$K:B$C$F$$$k>/G/$,H`=w$N%W%i%9%F%#%C\e(B
+\e$B%/$N0X;R$NGX1[$7$K!"1tI.$G7+$jJV$7@~$rIA$/$N$K$D$i$l$F!"B-$,$7$S$l$F=E$/\e(B
+\e$B$J$j!"0U<1$,[/[0$H$7$F$-$^$7$?!#\e(B
 @end quotation
 
-
 @node Group Topics
 @section Group Topics
 @cindex topics
 
-\e$B$b$7$"$J$?$,$?!<$/$5$s$N%0%k!<%W$rFI$s$G$$$k$N$G$"$l$P!"%0%k!<%W$r%H%T%C%/\e(B
-\e$BKh$K3,AXJ,$1$G$-$k$HJXMx$G$7$g$&!#\e(BEmacs \e$B$N%0%k!<%W$r$3$C$A$X!"%;%C%/%9$N%0\e(B
-\e$B%k!<%W$r$"$C$A$X!"$G!";D$j$r!J$(!)%0%k!<%W$,\e(B2\e$B$D$/$i$$$7$+$J$$$N!)!K<YKb$K\e(B
-\e$B$J$i$J$$$h$&$K$=$NB>$N%;%/%7%g%s$KF~$l$^$7$g$&!#$"$k$$$O\e(B Emacs \e$B%;%C%/%9$N\e(B
-\e$B%0%k!<%W$r\e(B Emacs \e$B%0%k!<%W!"%;%C%/%9%0%k!<%W$N$I$A$i$+$NI{%H%T%C%/$H$9$k$3\e(B
-\e$B$H$5$($b$G$-$^$9!=!=$"$k$$$ON>J}$K!*$9$s$4$$$G$7$g$&!*\e(B
+\e$B$b$7$"$J$?$,$?!<$/$5$s$N%0%k!<%W$rFI$s$G$$$k$N$G$"$l$P!"%0%k!<%W$r%H%T%C\e(B
+\e$B%/Kh$K3,AXJ,$1$G$-$k$HJXMx$G$7$g$&!#\e(BEmacs \e$B$N%0%k!<%W$r$3$C$A$X!"%;%C%/%9\e(B
+\e$B$N%0%k!<%W$r$"$C$A$X!"$G!";D$j$r\e(B (\e$B$(\e(B? \e$B%0%k!<%W$,Fs\e(B \e$B$D$/$i$$$7$+$J$$\e(B
+\e$B$N\e(B?) \e$B<YKb$K$J$i$J$$$h$&$K$=$NB>$N%;%/%7%g%s$KF~$l$^$7$g$&!#$"$k$$\e(B
+\e$B$O\e(B Emacs \e$B%;%C%/%9$N%0%k!<%W$r\e(B Emacs \e$B%0%k!<%W!"%;%C%/%9%0%k!<%W$N$I$A$i$+\e(B
+\e$B$NI{%H%T%C%/$H$9$k$3$H$5$($b$G$-$^$9!=!=$"$k$$$ON>J}$K\e(B! \e$B$9$s$4$$$G$7$g$&\e(B!
 
 @iftex
 @iflatex
@@ -2668,7 +3171,7 @@ Note:
 @end iflatex
 @end iftex
 
-\e$B$3$l$,Nc$G$9!'\e(B
+\e$B$3$l$,Nc$G$9\e(B:
 
 @example
 Gnus
@@ -2685,15 +3188,15 @@ Gnus
 
 @findex gnus-topic-mode
 @kindex t (Group)
-\e$B$3$N\e(B@emph{\e$BAG@2$i$7$$\e(B}\e$B5!G=$r;H$&$K$O!"\e(B@code{gnus-topic} \e$B%^%$%J!<%b!<%I$r\e(B
-\e$B!J2?$H!*!KC1$K%9%$%C%A%*%s$9$k$@$1!=!=%0%k!<%W%P%C%U%!$G!"\e(B@kbd{t} \e$B$r2!$7$F\e(B
-\e$B$/$@$5$$!J$3$l$O%H%0%k%3%^%s%I$G$9!K!#\e(B
+\e$B$3$N\e(B@emph{\e$BAG@2$i$7$$\e(B}\e$B5!G=$r;H$&$K$O!"\e(B@code{gnus-topic} \e$B%^%$%J!<%b!<%I\e(B
+\e$B$r\e(B (\e$B2?$H\e(B!) \e$BC1$K%9%$%C%A%*%s$9$k$@$1!=!=%0%k!<%W%P%C%U%!$G!"\e(B@kbd{t} \e$B$r2!\e(B
+\e$B$7$F$/$@$5$$\e(B (\e$B$3$l$O%H%0%k%3%^%s%I$G$9\e(B)\e$B!#\e(B
 
-\e$B$5$"$d$C$F$_$h$&!#$H$K$+$/;n$7$F$_$F!#7/$,La$C$F$/$k$^$G!"KM$O$3$3$GBT$C$F\e(B
-\e$B$k$+$i$5!#%i%i!"%?%i%i%s!D$s!"$$$$6J$@$M!"$3$l!D%i!"%i!"%i!D$(\e(B? \e$BLa$C$F$-$?!)\e(B
-\e$B$h$7!"$8$c<!$O\e(B @kbd{l} \e$B$r2!$7$F$_$F!#$[$i!#$3$l$GA4$F$N%0%k!<%W$,\e(B
-@samp{misc} \e$B$N2<$KI=<($5$l$^$7$?!#6=J3$7$F%/%i%/%i$7$F$3$J$$!)%"%D$/$C$F!"\e(B
-\e$B$$$^$$$^$7$$$/$i$$$G$7$g!)\e(B
+\e$B$5$"$d$C$F$_$h$&!#$H$K$+$/;n$7$F$_$F!#7/$,La$C$F$/$k$^$G!"KM$O$3$3$GBT$C\e(B
+\e$B$F$k$+$i$5!#%i%i!"%?%i%i%s!D$s!"$$$$6J$@$M!"$3$l!D%i!"%i!"%i!D$(\e(B? \e$BLa$C$F\e(B
+\e$B$-$?\e(B? \e$B$h$7!"$8$c<!$O\e(B @kbd{l} \e$B$r2!$7$F$_$F!#$[$i!#$3$l$GA4$F$N%0%k!<%W\e(B
+\e$B$,\e(B @samp{misc} \e$B$N2<$KI=<($5$l$^$7$?!#6=J3$7$F%/%i%/%i$7$F$3$J$$\e(B? \e$B%"%D$/$C\e(B
+\e$B$F!"$$$^$$$^$7$$$/$i$$$G$7$g\e(B?
 
 \e$B$3$l$r$:$C$HM-8z$K$7$?$1$l$P!"%0%k!<%W%b!<%I$N%U%C%/$K$3$N%^%$%J!<%b!<%I\e(B
 \e$B$rDI2C$7$F$/$@$5$$!#\e(B
@@ -2703,24 +3206,23 @@ Gnus
 @end lisp
 
 @menu
-* Topic Variables::    Lisp \e$B$G%H%T%C%/$r%+%9%?%^%$%:$9$kJ}K!!#\e(B
-* Topic Commands::     \e$BD64JC1BPOC7?L?Na!#\e(B
-* Topic Sorting::      \e$B%H%T%C%/KhJL!9$KJB$YBX$($k!#\e(B
-* Topic Topology::     \e$BA4@$3&$NCO?^!#\e(B
-* Topic Parameters::   \e$B$"$k%H%T%C%/$NA4$F$N%0%k!<%W$KE,MQ$5$l$k%Q%i%a!<%?!#\e(B
+* Topic Variables::  Lisp \e$B$G%H%T%C%/$r%+%9%?%^%$%:$9$kJ}K!\e(B
+* Topic Commands::   \e$BD64JC1BPOC7?L?Na\e(B
+* Topic Sorting::    \e$B%H%T%C%/KhJL!9$KJB$YBX$($k\e(B
+* Topic Topology::   \e$BA4@$3&$NCO?^\e(B
+* Topic Parameters:: \e$B$"$k%H%T%C%/$NA4$F$N%0%k!<%W$KE,MQ$5$l$k%Q%i%a!<%?\e(B
 @end menu
 
-
 @node Topic Variables
 @subsection \e$B%H%T%C%/JQ?t\e(B
 @cindex topic variables
 
-\e$B$5$F!"%H%T%C%/$rA*$V$H!"%H%T%C%/$O@^$j>v$^$l$^$9!#$3$l!"$H$C$F$b\e(B
-\e$B%9%F%-$@$H;W$&$s$@$1$I!#\e(B
+\e$B$5$F!"%H%T%C%/$rA*$V$H!"%H%T%C%/$O@^$j>v$^$l$^$9!#$3$l!"$H$C$F$b%9%F%-$@\e(B
+\e$B$H;W$&$s$@$1$I!#\e(B
 
 @vindex gnus-topic-line-format
-\e$B%H%T%C%/9T$O!"\e(B@code{gnus-topic-line-format} \e$BJQ?t$NCM$K=>$C$F:n@.$5$l$^$9\e(B
-(@pxref{Formatting Variables})\e$B!#M-8z$JMWAG$O!"\e(B
+\e$B%H%T%C%/9T$O!"\e(B@code{gnus-topic-line-format} \e$BJQ?t$NCM$K=>$C$F:n@.$5$l$^\e(B
+\e$B$9\e(B (@pxref{Formatting Variables})\e$B!#M-8z$JMWAG$O!"\e(B
 
 @table @samp
 @item i
@@ -2740,8 +3242,8 @@ Gnus
 @end table
 
 @vindex gnus-topic-indent-level
-\e$B3FI{%H%T%C%/!J$HI{%H%T%C%/Fb$N%0%k!<%W!K$O!"%H%T%C%/%l%Y%k?t$N\e(B
-@code{gnus-topic-indent-level} \e$BG\$N6uGrJ,$N;z2<$2$,9T$o$l$^$9!#=i4|CM\e(B
+\e$B3FI{%H%T%C%/\e(B (\e$B$HI{%H%T%C%/Fb$N%0%k!<%W\e(B) \e$B$O!"%H%T%C%/%l%Y%k?t\e(B
+\e$B$N\e(B @code{gnus-topic-indent-level} \e$BG\$N6uGrJ,$N;z2<$2$,9T$o$l$^$9!#=i4|CM\e(B
 \e$B$O\e(B 2 \e$B$G$9!#\e(B
 
 @vindex gnus-topic-mode-hook
@@ -2749,32 +3251,31 @@ Gnus
 \e$B$^$9!#\e(B
 
 @vindex gnus-topic-display-empty-topics
-@code{gnus-topic-display-empty-topics} \e$B$O%H%T%C%/$NCf$KL$FI5-;v\e(B
-\e$B$,L5$$>l9g$G$b$=$N%H%T%C%/$rI=<($9$k$h$&$K$7$^$9!#=i4|CM$O\e(B
-@code{t} \e$B$G$9!#\e(B
+@code{gnus-topic-display-empty-topics} \e$B$O%H%T%C%/$NCf$KL$FI5-;v$,L5$$>l\e(B
+\e$B9g$G$b$=$N%H%T%C%/$rI=<($9$k$h$&$K$7$^$9!#=i4|CM$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @node Topic Commands
 @subsection \e$B%H%T%C%/L?Na\e(B
 @cindex topic commands
 
-\e$B%H%T%C%/%^%$%J!<%b!<%I$,M-8z$G$"$k$H$-$O!"\e(B@kbd{T} \e$B%5%V%^%C%W$,?7\e(B
-\e$B$7$/MxMQ$G$-$k$h$&$K$J$j$^$9!#$5$i$KI8=`%-!<$NCf$G$b!"Dj5A$,$A$g$C\e(B
-\e$B$HJQ$o$k$b$N$,>/$7$"$j$^$9!#\e(B
+\e$B%H%T%C%/%^%$%J!<%b!<%I$,M-8z$G$"$k$H$-$O!"\e(B@kbd{T} \e$B%5%V%^%C%W$,?7$7$/MxMQ\e(B
+\e$B$G$-$k$h$&$K$J$j$^$9!#$5$i$KI8=`%-!<$NCf$G$b!"Dj5A$,$A$g$C$HJQ$o$k$b$N$,\e(B
+\e$B>/$7$"$j$^$9!#\e(B
 
 @table @kbd
 
 @item T n
 @kindex T n (Topic)
 @findex gnus-topic-create-topic
-\e$B?7$7$$%H%T%C%/$NL>A0$r%W%m%s%W%HF~NO$7!"$=$l$r:n@.$7$^$9\e(B
-(@code{gnus-topic-create-topic})\e$B!#\e(B
+\e$B?7$7$$%H%T%C%/$NL>A0$r%W%m%s%W%HF~NO$7!"$=$l$r:n@.$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-create-topic})\e$B!#\e(B
 
 @item T m
 @kindex T m (Topic)
 @findex gnus-topic-move-group
-\e$B8=:_$N%0%k!<%W$r!"$I$3$+B>$N%H%T%C%/$K0\F0$5$;$^$9\e(B
-(@code{gnus-topic-move-group})\e$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W\e(B
-\e$B%l%U%#%C%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$r!"$I$3$+B>$N%H%T%C%/$K0\F0$5$;$^\e(B
+\e$B$9\e(B (@code{gnus-topic-move-group})\e$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W%l%U%#%C\e(B
+\e$B%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item T j
 @kindex T j (Topic)
@@ -2784,18 +3285,30 @@ Gnus
 @item T c
 @kindex T c (Topic)
 @findex gnus-topic-copy-group
-\e$B8=:_$N%0%k!<%W$r!"$I$3$+B>$N%H%T%C%/$K%3%T!<$7$^$9\e(B
-(@code{gnus-topic-copy-group})\e$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W\e(B
-\e$B%l%U%#%C%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$r!"$I$3$+B>$N%H%T%C%/$K%3%T!<$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-copy-group})\e$B!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&%W%l%U%#%C\e(B
+\e$B%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-hide-topic
+\e$B8=:_$N%H%T%C%/$r1#$7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C\e(B
+\e$B%/$r1J5W$K1#$7$^$9!#\e(B
+
+@item T s
+@kindex T s (Topic)
+@findex gnus-topic-show-topic
+\e$B8=:_$N%H%T%C%/$rI=<($7$^$9!#$b$7%W%l%U%#%C%/%9$,M?$($i$l$?$J$i!"$=$N%H%T%C\e(B
+\e$B%/$r1J5W$KI=<($7$^$9!#\e(B
 
 @item T D
 @kindex T D (Topic)
 @findex gnus-topic-remove-group
-\e$B%0%k!<%W$r8=:_$N%H%T%C%/$+$i:o=|$7$^$9\e(B(@code{gnus-topic-remove-group})\e$B!#\e(B
+\e$B%0%k!<%W$r8=:_$N%H%T%C%/$+$i:o=|$7$^$9\e(B (@code{gnus-topic-remove-group})\e$B!#\e(B
 \e$B$3$NL?Na$O<g$K$$$/$D$+$N%H%T%C%/$KF1$8%0%k!<%W$,$"$C$F!"$=$l$r%H%T%C%/$N\e(B
 \e$B0l$D$+$i<h$j=|$-$?$$$H$-$KLrN)$A$^$9!#$"$J$?$O%0%k!<%W$rA4$F$N%H%T%C%/$+\e(B
-\e$B$i<h$j=|$-$?$$$H;W$&$+$bCN$l$^$;$s$,!"$=$N>l9g$O!"\e(Bgnus \e$B$O$"$J$?$,<!2s$K\e(B
-gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
+\e$B$i<h$j=|$-$?$$$H;W$&$+$bCN$l$^$;$s$,!"$=$N>l9g$O!"\e(Bgnus \e$B$O$"$J$?$,<!2s\e(B
+\e$B$K\e(B gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
 \e$BA4$F$N?7$7$$%0%k!<%W\e(B (\e$B$b$A$m$s!"$=$l$O$I$N%H%T%C%/$K$bB0$7$F$$$^$;$s\e(B) \e$B$O\e(B
 \e$B%k!<%H%H%T%C%/$K8=$o$l$^$9!#\e(B
 
@@ -2804,41 +3317,41 @@ gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
 @item T M
 @kindex T M (Topic)
 @findex gnus-topic-move-matching
-\e$B@55,I=8=$K%^%C%A$9$kA4$F$N%0%k!<%W$r!"$"$k%H%T%C%/$K0\F0$5$;$^$9\e(B
-(@code{gnus-topic-move-matching})\e$B!#\e(B
+\e$B@55,I=8=$K%^%C%A$9$kA4$F$N%0%k!<%W$r!"$"$k%H%T%C%/$K0\F0$5$;$^\e(B
+\e$B$9\e(B (@code{gnus-topic-move-matching})\e$B!#\e(B
 
 @item T C
 @kindex T C (Topic)
 @findex gnus-topic-copy-matching
-\e$B@55,I=8=$K%^%C%A$9$kA4$F$N%0%k!<%W$r!"$"$k%H%T%C%/$K%3%T!<$7$^$9\e(B
-(@code{gnus-topic-copy-matching})\e$B!#\e(B
+\e$B@55,I=8=$K%^%C%A$9$kA4$F$N%0%k!<%W$r!"$"$k%H%T%C%/$K%3%T!<$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-copy-matching})\e$B!#\e(B
 
 @item T h
 @kindex T h (Topic)
 @findex gnus-topic-toggle-display-empty-topics
-\e$B6u$N%H%T%C%/$NI=<(!&HsI=<($r@Z$jBX$($^$9\e(B
-(@code{gnus-topic-toggle-display-empty-topics})\e$B!#\e(B
+\e$B6u$N%H%T%C%/$NI=<(!&HsI=<($r@Z$jBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-toggle-display-empty-topics})\e$B!#\e(B
 
 @item T #
 @kindex T # (Topic)
 @findex gnus-topic-mark-topic
-\e$B8=:_$N%H%T%C%/$K$"$k%0%k!<%WA4$F$K%W%m%;%9%^!<%/$r$D$1$^$9\e(B
-(@code{gnus-topic-mark-topic})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$K$"$k%0%k!<%WA4$F$K%W%m%;%9%^!<%/$r$D$1$^\e(B
+\e$B$9\e(B (@code{gnus-topic-mark-topic})\e$B!#\e(B
 
 @item T M-#
 @kindex T M-# (Topic)
 @findex gnus-topic-unmark-topic
-\e$B8=:_$N%H%T%C%/$K$"$kA4$F$N%0%k!<%W$+$i%W%m%;%9%^!<%/$r>C$7$^$9\e(B
-(@code{gnus-topic-unmark-topic})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$K$"$kA4$F$N%0%k!<%W$+$i%W%m%;%9%^!<%/$r>C$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-unmark-topic})\e$B!#\e(B
 
 @item T TAB
 @itemx TAB
 @kindex T TAB (Topic)
 @kindex TAB (Topic)
 @findex gnus-topic-indent
-\e$B8=:_$N%H%T%C%/$N\e(B ``\e$B;z2<$2\e(B'' \e$B$r9T$$!"$=$NA0$N%H%T%C%/$NI{%H%T%C%/$K$7$^$9\e(B
-(@code{gnus-topic-indent})\e$B!#@\F,0z?t$rM?$($k$H!"H?BP$K$=$N%H%T%C%/\e(B
-\e$B$N;z2<$2$rLa$7$^$9!#\e(B
+\e$B8=:_$N%H%T%C%/$N\e(B ``\e$B;z2<$2\e(B'' \e$B$r9T$$!"$=$NA0$N%H%T%C%/$NI{%H%T%C%/$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-indent})\e$B!#@\F,0z?t$rM?$($k$H!"H?BP$K$=$N%H%T%C%/$N\e(B
+\e$B;z2<$2$rLa$7$^$9!#\e(B
 
 @item M-TAB
 @kindex M-TAB (Topic)
@@ -2850,44 +3363,32 @@ gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
 @kindex RET (Topic)
 @findex gnus-topic-select-group
 @itemx SPACE
-\e$B%0%k!<%W$rA*Br$9$k$+!"$"$k$$$O%H%T%C%/$r@^$j$?$?$_$^$9\e(B
-(@code{gnus-topic-select-group})\e$B!#%0%k!<%W$N>e$G$3$N%3%^%s%I$r<B9T$9$k$H!"\e(B
-\e$BDL>oDL$j$=$N%0%k!<%W$KF~$j$^$9!#%H%T%C%/9T$N>e$G9T$&$H!"$=$N%H%T%C%/$O!J4{\e(B
-\e$B$KI=<($5$l$F$$$k$H$-$O!K@^$j$?$?$^$l$k$+!"!J4{$K@^$j$?$?$^$l$F$$$k$H$-$O!K\e(B
-\e$BE83+$5$l$^$9!#$D$^$j%H%T%C%/$KBP$7$F$O$3$l$O%H%0%k%3%^%s%I$G$9!#$5$i$K!"?t\e(B
-\e$B;z%W%l%U%#%C%/%9$rM?$($k$H!"$=$N%l%Y%k!J$H$=$l$h$j$b>.$5$$%l%Y%k!K$N%0%k!<\e(B
-\e$B%W$,I=<($5$l$^$9!#\e(B
-
-@item RET
-@kindex RET (Topic)
-@findex gnus-topic-select-group
-@itemx SPACE
-\e$B%0%k!<%W$rA*Br$9$k$+!"$"$k$$$O%H%T%C%/$r@^$j$?$?$_$^$9\e(B
-(@code{gnus-topic-select-group})\e$B!#%0%k!<%W$N>e$G$3$N%3%^%s%I$r<B9T$9$k$H!"\e(B
-\e$BDL>oDL$j$=$N%0%k!<%W$KF~$j$^$9!#%H%T%C%/9T$N>e$G9T$&$H!"$=$N%H%T%C%/$O!J4{\e(B
-\e$B$KI=<($5$l$F$$$k$H$-$O!K@^$j$?$?$^$l$k$+!"!J4{$K@^$j$?$?$^$l$F$$$k$H$-$O!K\e(B
-\e$BE83+$5$l$^$9!#$D$^$j%H%T%C%/$KBP$7$F$O$3$l$O%H%0%k%3%^%s%I$G$9!#$5$i$K!"?t\e(B
-\e$B;z%W%l%U%#%C%/%9$rM?$($k$H!"$=$N%l%Y%k!J$H$=$l$h$j$b>.$5$$%l%Y%k!K$N%0%k!<\e(B
-\e$B%W$,I=<($5$l$^$9!#\e(B
+\e$B%0%k!<%W$rA*Br$9$k$+!"$"$k$$$O%H%T%C%/$r@^$j$?$?$_$^\e(B
+\e$B$9\e(B (@code{gnus-topic-select-group})\e$B!#%0%k!<%W$N>e$G$3$N%3%^%s%I$r<B9T$9\e(B
+\e$B$k$H!"DL>oDL$j$=$N%0%k!<%W$KF~$j$^$9!#%H%T%C%/9T$N>e$G9T$&$H!"$=$N%H%T%C\e(B
+\e$B%/$O\e(B (\e$B4{$KI=<($5$l$F$$$k$H$-$O\e(B) \e$B@^$j$?$?$^$l$k$+!"\e(B(\e$B4{$K@^$j$?$?$^$l$F$$\e(B
+\e$B$k$H$-$O\e(B) \e$BE83+$5$l$^$9!#$D$^$j%H%T%C%/$KBP$7$F$O$3$l$O%H%0%k%3%^%s%I$G$9!#\e(B
+\e$B$5$i$K!"?t;z%W%l%U%#%C%/%9$rM?$($k$H!"$=$N%l%Y%k\e(B (\e$B$H$=$l$h$j$b>.$5$$%l%Y\e(B
+\e$B%k\e(B) \e$B$N%0%k!<%W$,I=<($5$l$^$9!#\e(B
 
 @item C-c C-x
 @kindex C-c C-x (Topic)
 @findex gnus-topic-expire-articles
 (\e$B$b$7$"$l$P\e(B) \e$B8=:_$N%0%k!<%W$+%H%T%C%/$+$NA4$F$N;~8B>C5n2DG=5-;v$r;~8B>C\e(B
-\e$B5n$7$^$9\e(B  (@code{gnus-topic-expire-articles})\e$B!#\e(B
+\e$B5n$7$^$9\e(B (@code{gnus-topic-expire-articles})\e$B!#\e(B
 
 @item C-k
 @kindex C-k (Topic)
 @findex gnus-topic-kill-group
-\e$B%0%k!<%W$"$k$$$O%H%T%C%/$r\e(B kill \e$B$7$^$9\e(B(@code{gnus-topic-kill-group})\e$B!#%H\e(B
-\e$B%T%C%/Fb$K$"$C$?%0%k!<%W$bA4$F!"%H%T%C%/$H0l=o$K:o=|$5$l$^$9!#\e(B
+\e$B%0%k!<%W$"$k$$$O%H%T%C%/$r\e(B kill \e$B$7$^$9\e(B (@code{gnus-topic-kill-group})\e$B!#\e(B
+\e$B%H%T%C%/Fb$K$"$C$?%0%k!<%W$bA4$F!"%H%T%C%/$H0l=o$K:o=|$5$l$^$9!#\e(B
 
 @item C-y
 @kindex C-y (Topic)
 @findex gnus-topic-yank-group
-\e$BD>A0$N\e(B kill \e$B$5$l$?%0%k!<%W$"$k$$$O%H%T%C%/$r\e(B yank \e$B$7$^$9\e(B
-(@code{gnus-topic-yank-group})\e$B!#A4$F$N%H%T%C%/$O!"A4$F$N%0%k!<%W\e(B
-\e$B$NA0$K\e(B yank \e$B$5$l$k$3$H$K5$$r$D$1$F$/$@$5$$!#\e(B
+\e$BD>A0$N\e(B kill \e$B$5$l$?%0%k!<%W$"$k$$$O%H%T%C%/$r\e(B yank \e$B$7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-yank-group})\e$B!#A4$F$N%H%T%C%/$O!"A4$F$N%0%k!<%W$NA0\e(B
+\e$B$K\e(B yank \e$B$5$l$k$3$H$K5$$r$D$1$F$/$@$5$$!#\e(B
 
 @item T r
 @kindex T r (Topic)
@@ -2902,8 +3403,8 @@ gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
 @item A T
 @kindex A T (Topic)
 @findex gnus-topic-list-active
-Gnus \e$B$,CN$C$F$$$k%H%T%C%/2=$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B
-(@code{gnus-topic-list-active})\e$B!#\e(B
+Gnus \e$B$,CN$C$F$$$k%H%T%C%/2=$5$l$?%0%k!<%W$rA4$FI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-topic-list-active})\e$B!#\e(B
 
 @item G p
 @kindex G p (Topic)
@@ -2916,56 +3417,53 @@ Gnus \e$B$,CN$C$F$$$k%H%T%C%/2=$5$l$?%0%k!<%W$rA4$FI=<($7$^$9\e(B
 
 @end table
 
-
 @node Topic Sorting
 @subsection \e$B%H%T%C%/$NJB$YBX$(\e(B
 @cindex topic sorting
 
-\e$B0J2<$K<($9L?Na$G!"3F%H%T%C%/Kh$KJL!9$K%0%k!<%W$rJB$YBX$($k$3$H$,$G$-$^$9!'\e(B
-
+\e$B0J2<$K<($9L?Na$G!"3F%H%T%C%/Kh$KJL!9$K%0%k!<%W$rJB$YBX$($k$3$H$,$G$-$^$9\e(B:
 
 @table @kbd
 @item T S a
 @kindex T S a (Topic)
 @findex gnus-topic-sort-groups-by-alphabet
-\e$B8=:_$N%H%T%C%/$r%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$KJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-alphabet})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$r%0%k!<%WL>$N%"%k%U%!%Y%C%H=g$KJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-alphabet})\e$B!#\e(B
 
 @item T S u
 @kindex T S u (Topic)
 @findex gnus-topic-sort-groups-by-unread
-\e$B8=:_$N%H%T%C%/$rL$FI5-;v$N?t$GJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-unread})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$rL$FI5-;v$N?t$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-unread})\e$B!#\e(B
 
 @item T S l
 @kindex T S l (Topic)
 @findex gnus-topic-sort-groups-by-level
-\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%l%Y%k$GJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-level})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%l%Y%k$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-level})\e$B!#\e(B
 
 @item T S v
 @kindex T S v (Topic)
 @findex gnus-topic-sort-groups-by-score
-\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%9%3%"$GJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-score})\e$B!#\e(B@xref{Group Score}.
+\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%9%3%"$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-score})\e$B!#\e(B@xref{Group Score}.
 
 @item T S r
 @kindex T S r (Topic)
 @findex gnus-topic-sort-groups-by-rank
-\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%i%s%/$GJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
+\e$B8=:_$N%H%T%C%/$r%0%k!<%W$N%i%s%/$GJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-rank})\e$B!#\e(B@xref{Group Score}.
 
 @item T S m
 @kindex T S m (Topic)
 @findex gnus-topic-sort-groups-by-method
-\e$B8=:_$N%H%T%C%/$r%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^$9\e(B
-(@code{gnus-topic-sort-groups-by-method})\e$B!#\e(B
+\e$B8=:_$N%H%T%C%/$r%P%C%/%(%s%I$NL>A0$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^\e(B
+\e$B$9\e(B (@code{gnus-topic-sort-groups-by-method})\e$B!#\e(B
 
 @end table
 
-\e$B%0%k!<%W$N%=!<%H$K$D$$$F$N$5$i$J$k>pJs$O\e(B @xref{Sorting Groups} \e$B$r;2>H$7$F\e(B
-\e$B$/$@$5$$!#\e(B
-
+\e$B%0%k!<%W$N%=!<%H$K$D$$$F$N$5$i$J$k>pJs$O\e(B @xref{Sorting Groups} \e$B$r;2>H$7\e(B
+\e$B$F$/$@$5$$!#\e(B
 
 @node Topic Topology
 @subsection \e$B%H%T%C%/$N0LAj9=B$\e(B
@@ -2987,10 +3485,10 @@ Gnus
     13: comp.sources.unix
 @end example
 
-\e$B$D$^$j!"$3$3$G$O0l$D$N%H%C%W%l%Y%k$N%H%T%C%/\e(B (@samp{Gnus}) \e$B$,$"$j!"$=$N2<\e(B
-\e$B$K\e(B2\e$B$D$N%H%T%C%/$,$"$j!"$=$N$&$A$N0lJ}$NI{%H%T%C%/Cf$K0l$DI{%H%T%C%/$,$"$j\e(B
-\e$B$^$9!J%H%C%W%l%Y%k%H%T%C%/$O>o$K0l$D$7$+$"$j$^$;$s!K!#$3$N9=B$$O!"0J2<$N$h\e(B
-\e$B$&$KI=8=$G$-$^$9!'\e(B
+\e$B$D$^$j!"$3$3$G$O0l$D$N%H%C%W%l%Y%k$N%H%T%C%/\e(B (@samp{Gnus}) \e$B$,$"$j!"$=$N\e(B
+\e$B2<$KFs$D$N%H%T%C%/$,$"$j!"$=$N$&$A$N0lJ}$NI{%H%T%C%/Cf$K0l$DI{%H%T%C%/$,\e(B
+\e$B$"$j$^$9\e(B (\e$B%H%C%W%l%Y%k%H%T%C%/$O>o$K0l$D$7$+$"$j$^$;$s\e(B)\e$B!#$3$N9=B$$O!"0J\e(B
+\e$B2<$N$h$&$KI=8=$G$-$^$9\e(B:
 
 @lisp
 (("Gnus" visible)
@@ -3000,42 +3498,40 @@ Gnus
 @end lisp
 
 @vindex gnus-topic-topology
-\e$B$3$l$O<B$K!">e5-$NI=<($r9T$&$?$a$N!"JQ?t\e(B @code{gnus-topic-topology} \e$B$NCM$=\e(B
-\e$B$N$b$N$J$N$G$9!#$3$NJQ?t$O\e(B@file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$5$l!"<j$G$$$8\e(B
-\e$B$/$j2s$7$F$O$$$1$^$;$s!=!=K\Ev$K$d$j$?$$$H$-$OJL$G$9$,!#$3$NJQ?t$O\e(B
-@file{.newsrc.eld} \e$B%U%!%$%k$+$iFI$_9~$^$l$k$N$G!"$=$NB>$N%9%?!<%H%"%C%W%U%!\e(B
-\e$B%$%k$N@_Dj$K$OA4$/1F6A$rM?$($^$;$s!#\e(B
-
-\e$B$3$N9=B$$O!"$I$N%H%T%C%/$,$I$N%H%T%C%/$NI{%H%T%C%/$G$"$k$+$H!"$I$N%H%T%C%/\e(B
-\e$B$,I=<($5$l$F$$$k$+$r<($7$F$$$^$9!#8=:_$OFs$D$N@_DjCM!=!=\e(B@code{visible} \e$B$H\e(B
-@code{invisible} \e$B$,5v$5$l$F$$$^$9!#\e(B
+\e$B$3$l$O<B$K!">e5-$NI=<($r9T$&$?$a$N!"JQ?t\e(B @code{gnus-topic-topology} \e$B$NCM\e(B
+\e$B$=$N$b$N$J$N$G$9!#$3$NJQ?t$O\e(B @file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$5$l!"<j$G\e(B
+\e$B$$$8$/$j2s$7$F$O$$$1$^$;$s!=!=K\Ev$K$d$j$?$$$H$-$OJL$G$9$,!#$3$NJQ?t\e(B
+\e$B$O\e(B @file{.newsrc.eld} \e$B%U%!%$%k$+$iFI$_9~$^$l$k$N$G!"$=$NB>$N%9%?!<%H%"%C\e(B
+\e$B%W%U%!%$%k$N@_Dj$K$OA4$/1F6A$rM?$($^$;$s!#\e(B
 
+\e$B$3$N9=B$$O!"$I$N%H%T%C%/$,$I$N%H%T%C%/$NI{%H%T%C%/$G$"$k$+$H!"$I$N%H%T%C\e(B
+\e$B%/$,I=<($5$l$F$$$k$+$r<($7$F$$$^$9!#8=:_$OFs$D$N@_Dj\e(B
+\e$BCM!=!=\e(B@code{visible} \e$B$H\e(B @code{invisible} \e$B$,5v$5$l$F$$$^$9!#\e(B
 
 @node Topic Parameters
 @subsection \e$B%H%T%C%/%Q%i%a!<%?\e(B
 @cindex topic parameters
 
-\e$B%H%T%C%/Fb$NA4$F$N%0%k!<%W$O%0%k!<%W%Q%i%a!<%?$r!"$=$N?F!J$H@hAD!K$N%H%T%C\e(B
-\e$B%/%Q%i%a!<%?$+$i7Q>5$7$^$9!#%0%k!<%W%Q%i%a!<%?$H$7$F@5$7$$$b$N$OA4$F!"%H%T%C\e(B
-\e$B%/%Q%i%a!<%?$H$7$F$b@5$7$$$b$N$G$9\e(B(@pxref{Group Parameters})\e$B!#\e(B
+\e$B%H%T%C%/Fb$NA4$F$N%0%k!<%W$O%0%k!<%W%Q%i%a!<%?$r!"$=$N?F\e(B (\e$B$H@hAD\e(B) \e$B$N%H%T%C\e(B
+\e$B%/%Q%i%a!<%?$+$i7Q>5$7$^$9!#%0%k!<%W%Q%i%a!<%?$H$7$F@5$7$$$b$N$OA4$F!"%H\e(B
+\e$B%T%C%/%Q%i%a!<%?$H$7$F$b@5$7$$$b$N$G$9\e(B(@pxref{Group Parameters})\e$B!#\e(B
 
-In addition, the following parameters are only valid as topic
-parameters:
+\e$B$5$i$K!"0J2<$N%Q%i%a!<%?$O%H%T%C%/%Q%i%a!<%?$H$7$F$N$_M-8z$G$9\e(B:
 
 @table @code
 @item subscribe
-When subscribing new groups by topic (@pxref{Subscription Methods}), the 
-@code{subscribe} topic parameter says what groups go in what topic.  Its 
-value should be a regexp to match the groups that should go in that
-topic. 
+\e$B%H%T%C%/$G?7$7$$%0%k!<%W$r9XFI$7$F$$$k>l\e(B
+\e$B9g\e(B (@pxref{Subscription Methods}), @code{subscribe} \e$B%H%T%C%/%Q%i%a!<%?$O\e(B
+\e$B$I$N%0%k!<%W$,$I$N%H%T%C%/$K9T$/$+$r;XDj$7$^$9!#CM$O$=$N%H%T%C%/$K9T$/%0\e(B
+\e$B%k!<%W$K9gCW$9$k@55,I=8=$G$"$kI,MW$,$"$j$^$9!#\e(B
 
 @end table
 
-\e$B%0%k!<%W%Q%i%a!<%?$O!J$b$A$m$s!K%H%T%C%/%Q%i%a!<%?$h$j$bM%@h$5$l!"I{%H%T%C\e(B
+\e$B%0%k!<%W%Q%i%a!<%?$O\e(B (\e$B$b$A$m$s\e(B) \e$B%H%T%C%/%Q%i%a!<%?$h$j$bM%@h$5$l!"I{%H%T%C\e(B
 \e$B%/$N%H%T%C%/%Q%i%a!<%?$O?F%H%T%C%/$N%H%T%C%/%Q%i%a!<%?$h$j$bM%@h$5$l$^$9!#\e(B
-\e$BJ,$+$k$h$M!#$4$/IaDL$N7Q>5%k!<%k$G$9!J%k!<%k\e(B (@dfn{Rules}) \e$B$O$3$3$G$OL>;l\e(B
-\e$B$G$"$C$F!"F0;l$N!V@~$r0z$/!W$G$O$"$j$^$;$s!#$3$N%k!<%k$K$OH?BP$7$?$/$J$k$+\e(B
-\e$B$bCN$l$J$$$1$I!"$=$l$O$4<+M3$K!K!#\e(B
+\e$BJ,$+$k$h$M!#$4$/IaDL$N7Q>5%k!<%k$G$9\e(B (\e$B%k!<%k\e(B (@dfn{Rules}) \e$B$O$3$3$G$OL>\e(B
+\e$B;l$G$"$C$F!"F0;l$N!V@~$r0z$/!W$G$O$"$j$^$;$s!#$3$N%k!<%k$K$OH?BP$7$?$/$J\e(B
+\e$B$k$+$bCN$l$J$$$1$I!"$=$l$O$4<+M3$K\e(B)\e$B!#\e(B
 
 @example
 Gnus
@@ -3052,40 +3548,40 @@ Gnus
    452: alt.sex.emacs
 @end example
 
-@samp{Emacs} \e$B%H%T%C%/$O%H%T%C%/%Q%i%a!<%?\e(B @code{(score-file
-. "emacs.SCORE")} \e$B$r;}$C$F$$$^$9!#\e(B@samp{\e$BB)H4$-\e(B} \e$B%H%T%C%/$O%H%T%C\e(B
-\e$B%/%Q%i%a!<%?\e(B @code{(score-file . "relief.SCORE")} \e$B$r;}$A!"\e(B
-@samp{\e$B$=$NB>\e(B} \e$B%H%T%C%/$O%H%T%C%/%Q%i%a!<%?\e(B @code{(score-file
-. "emacs.SCORE")} \e$B$r;}$C$F$$$^$9!#$5$i$K!"\e(B
-@samp{alt.religion.emacs} \e$B$O%0%k!<%W%Q%i%a!<%?\e(B @code{(score-file
-. "religion.SCORE")} \e$B$r;}$C$F$$$^$9!#\e(B
-
-\e$B$5$F!"$3$3$G\e(B @samp{\e$BB)H4$-\e(B} \e$B%H%T%C%/$N\e(B @samp{alt.sex.emacs} \e$B%0%k!<\e(B
-\e$B%W$KF~$C$?$H$-!"\e(B@file{relief.SCORE} \e$B$,4pK\%9%3%"%U%!%$%k$H$J$j$^\e(B
-\e$B$9!#$b$7\e(B @samp{Emacs} \e$B%H%T%C%/$NF1$8%0%k!<%W$KF~$k$H!"\e(B
-@file{emacs.SCORE} \e$B$,4pK\%9%3%"%U%!%$%k$K$J$k$G$7$g$&!#\e(B
-@* @samp{alt.religion.emacs} \e$B%0%k!<%W$KF~$l$P!"\e(B
-@file{religion.SCORE} \e$B$,4pK\%9%3%"%U%!%$%k$K$J$k$G$7$g$&!#\e(B
-
-\e$B$3$l$C$F$H$C$F$b4JC1$G<+L@$N$3$H$N$h$&$K8+$($k$G$7$g!)$^$"!"$=$NDL$j$G$9!#\e(B
-\e$B$G$9$,LdBj$,$"$k>l9g$b$"$j$^$9!#FC$K\e(B@code{total-expiry} \e$B%Q%i%a!<%?$K4X$7$F\e(B
-\e$B$G$9!#Nc$($P$"$k%a!<%k%0%k!<%W$rFs$D$N%H%T%C%/$NCf$K!"0lJ}$O\e(B
-@code{total-expiry} \e$B$"$j$G!"$b$&0lJ}$O$=$l$J$7$G;}$C$F$$$k$H$7$^$7$g$&!#$3\e(B
-\e$B$3$G\e(B @kbd{M-x gnus-expire-all-expirable-groups} \e$B$r<B9T$9$k$H!"2?$,5/$3$k$G\e(B
-\e$B$7$g$&$+!)\e(BGnus \e$B$O!"$"$J$?$,$I$A$i$N%H%T%C%/$+$i5-;v$r%(%/%9%Q%$%"$7$?$$$N\e(B
-\e$B$+$rCN$kJ}K!$,$J$$$?$a!":G0-$N;vBV$,H/@8$9$k$+$b$7$l$^$;$s!#<B:]!";d$O$3$N\e(B
-\e$B$H$-2?$,5/$3$k$N$+$O!VL$Dj5A\e(B @dfn{undefined}\e$B!W$G$"$k!"$H$3$3$K@k8@$7$^$9!#\e(B
-\e$B$3$N<j$N$3$H$r$d$j$?$$>l9g$K$O==J,Cm0U$7$J$1$l$P$J$j$^$;$s!#\e(B
-
+@samp{Emacs} \e$B%H%T%C%/$O%H%T%C%/%Q%i%a!<\e(B
+\e$B%?\e(B @code{(score-file . "emacs.SCORE")} \e$B$r;}$C$F$$$^$9!#\e(B
+@samp{\e$BB)H4$-\e(B} \e$B%H%T%C%/$O%H%T%C%/%Q%i%a!<\e(B
+\e$B%?\e(B @code{(score-file . "relief.SCORE")} \e$B$r;}$A!"\e(B
+@samp{\e$B$=$NB>\e(B} \e$B%H%T%C%/$O%H%T%C%/%Q%i%a!<\e(B
+\e$B%?\e(B @code{(score-file . "emacs.SCORE")} \e$B$r;}$C$F$$$^$9!#\e(B
+\e$B$5$i$K!"\e(B@samp{alt.religion.emacs} \e$B$O%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B @code{(score-file . "religion.SCORE")} \e$B$r;}$C$F$$$^$9!#\e(B
+
+\e$B$5$F!"$3$3$G\e(B @samp{\e$BB)H4$-\e(B} \e$B%H%T%C%/$N\e(B @samp{alt.sex.emacs} \e$B%0%k!<%W$KF~$C\e(B
+\e$B$?$H$-!"\e(B@file{relief.SCORE} \e$B$,4pK\%9%3%"%U%!%$%k$H$J$j$^$9!#$b\e(B
+\e$B$7\e(B @samp{Emacs} \e$B%H%T%C%/$NF1$8%0%k!<%W$KF~$k$H!"\e(B@file{emacs.SCORE} \e$B$,4p\e(B
+\e$BK\%9%3%"%U%!%$%k$K$J$k$G$7$g$&!#\e(B
+@samp{alt.religion.emacs} \e$B%0%k!<%W$KF~$l$P!"\e(B@file{religion.SCORE} \e$B$,4pK\\e(B
+\e$B%9%3%"%U%!%$%k$K$J$k$G$7$g$&!#\e(B
+
+\e$B$3$l$C$F$H$C$F$b4JC1$G<+L@$N$3$H$N$h$&$K8+$($k$G$7$g\e(B? \e$B$^$"!"$=$NDL$j$G$9!#\e(B
+\e$B$G$9$,LdBj$,$"$k>l9g$b$"$j$^$9!#FC$K\e(B@code{total-expiry} \e$B%Q%i%a!<%?$K4X$7\e(B
+\e$B$F$G$9!#Nc$($P$"$k%a!<%k%0%k!<%W$rFs$D$N%H%T%C%/$NCf$K!"0lJ}\e(B
+\e$B$O\e(B @code{total-expiry} \e$B$"$j$G!"$b$&0lJ}$O$=$l$J$7$G;}$C$F$$$k$H$7$^$7$g\e(B
+\e$B$&!#$3$3$G\e(B @kbd{M-x gnus-expire-all-expirable-groups} \e$B$r<B9T$9$k$H!"2?$,\e(B
+\e$B5/$3$k$G$7$g$&$+\e(B? Gnus \e$B$O!"$"$J$?$,$I$A$i$N%H%T%C%/$+$i5-;v$r%(%/%9%Q%$\e(B
+\e$B%"$7$?$$$N$+$rCN$kJ}K!$,$J$$$?$a!":G0-$N;vBV$,H/@8$9$k$+$b$7$l$^$;$s!#<B\e(B
+\e$B:]!";d$O$3$N$H$-2?$,5/$3$k$N$+$O!VL$Dj5A\e(B @dfn{undefined}\e$B!W$G$"$k!"$H$3$3\e(B
+\e$B$K@k8@$7$^$9!#$3$N<j$N$3$H$r$d$j$?$$>l9g$K$O==J,Cm0U$7$J$1$l$P$J$j$^$;$s!#\e(B
 
 @node Misc Group Stuff
 @section \e$B$=$NB>$N%0%k!<%W4XO"\e(B
 
 @menu
-* Scanning New Messages:: Gnus \e$B$K?7$7$$%a%C%;!<%8$,E~Ce$7$?$+$I$&$+$rJ9$/!#\e(B
-* Group Information::     \e$B%0%k!<%W$H\e(B gnus \e$B$K4X$9$k>pJs$H%X%k%W!#\e(B
-* Group Timestamp::       Gnus \e$B$K:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k!#\e(B
-* File Commands::         Gnus \e$B$N%U%!%$%k$NFI$_=q$-!#\e(B
+* Scanning New Messages:: Gnus \e$B$K?7$7$$%a%C%;!<%8$,E~Ce$7$?$+$I$&$+$rJ9$/\e(B
+* Group Information::     \e$B%0%k!<%W$H\e(B gnus \e$B$K4X$9$k>pJs$H%X%k%W\e(B
+* Group Timestamp::       Gnus \e$B$K:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k\e(B
+* File Commands::         Gnus \e$B$N%U%!%$%k$NFI$_=q$-\e(B
 @end menu
 
 @table @kbd
@@ -3099,8 +3595,8 @@ Gnus
 @item a
 @kindex a (Group)
 @findex gnus-group-post-news
-\e$B$"$k%0%k!<%W$K5-;v$rEj9F$9$k\e(B (@code{gnus-group-post-news})\e$B!#%W%l\e(B
-\e$B%U%#%C%/%9$rM?$($k$H!"8=:_$N%0%k!<%WL>$,=i4|CM$H$7$F;HMQ$5$l$^$9!#\e(B
+\e$B$"$k%0%k!<%W$K5-;v$rEj9F$9$k\e(B (@code{gnus-group-post-news})\e$B!#%W%l%U%#%C%/\e(B
+\e$B%9$rM?$($k$H!"8=:_$N%0%k!<%WL>$,=i4|CM$H$7$F;HMQ$5$l$^$9!#\e(B
 
 @item m
 @kindex m (Group)
@@ -3109,7 +3605,7 @@ Gnus
 
 @end table
 
-\e$B0J2<$O%0%k!<%W%P%C%U%!$N$?$a$NJQ?t$G$9!'\e(B
+\e$B0J2<$O%0%k!<%W%P%C%U%!$N$?$a$NJQ?t$G$9\e(B:
 
 @table @code
 
@@ -3119,21 +3615,42 @@ Gnus
 
 @item gnus-group-prepare-hook
 @vindex gnus-group-prepare-hook
-\e$B%0%k!<%W%P%C%U%!$,@8@.$5$l$?$"$H$K8F$S=P$5$l$^$9!#$3$l$O%P%C%U%!$r2?$+JQ$J!"\e(B
-\e$B<+A3$8$c$J$$J}K!$G=$@5$7$?$$$H$-$K;H$o$l$k$+$b$7$l$^$;$s!#\e(B
+\e$B%0%k!<%W%P%C%U%!$,@8@.$5$l$?$"$H$K8F$S=P$5$l$^$9!#$3$l$O%P%C%U%!$r2?$+JQ\e(B
+\e$B$J!"<+A3$8$c$J$$J}K!$G=$@5$7$?$$$H$-$K;H$o$l$k$+$b$7$l$^$;$s!#\e(B
 
 @item gnus-group-prepared-hook
 @vindex gnus-group-prepare-hook
-\e$B%0%k!<%W%P%C%U%!$,@8@.$5$l$?8e$N0lHV:G8e$K8F$S=P$5$l$^$9!#Nc$($P\e(B
-\e$B%]%$%s%H$r$I$3$+$K0\F0$5$;$?$$$H$-$J$I$K;H$($^$9!#\e(B
+\e$B%0%k!<%W%P%C%U%!$,@8@.$5$l$?8e$N0lHV:G8e$K8F$S=P$5$l$^$9!#Nc$($P%]%$%s%H\e(B
+\e$B$r$I$3$+$K0\F0$5$;$?$$$H$-$J$I$K;H$($^$9!#\e(B
 
 @item gnus-permanently-visible-groups
 @vindex gnus-permanently-visible-groups
-\e$B$3$N@55,I=8=$K%^%C%A$9$k%0%k!<%W$O!"$=$l$,6u$G$"$k$+$I$&$+$K4X$o\e(B
-\e$B$i$:!">o$K%0%k!<%W%P%C%U%!$KI=<($5$l$^$9!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$9$k%0%k!<%W$O!"$=$l$,6u$G$"$k$+$I$&$+$K4X$o$i$:!">o\e(B
+\e$B$K%0%k!<%W%P%C%U%!$KI=<($5$l$^$9!#\e(B
 
-@end table
+@item gnus-group-name-charset-method-alist
+@vindex gnus-group-name-charset-method-alist
+\e$B%0%k!<%WL>MQ$NA*BrJ}K!$HJ8;z=89g$NO"A[%j%9%H$G$9!#$3$l$O1Q;z$G$O$J$$%0%k!<\e(B
+\e$B%WL>$rI=<($9$k$?$a$K;H$$$^$9!#\e(B
+
+\e$BNc\e(B:
+@lisp
+(setq gnus-group-name-charset-method-alist
+    '(((nntp "news.com.cn") . cn-gb-2312)))
+@end lisp
+
+@item gnus-group-name-charset-group-alist
+@vindex gnus-group-name-charset-group-alist
+\e$B%0%k!<%WL>MQ$N%0%k!<%WL>$N@55,I=8=$HJ8;z=89g$NO"A[%j%9%H$G$9!#$3$l$O1Q;z\e(B
+\e$B$G$O$J$$%0%k!<%WL>$rI=<($9$k$?$a$K;H$$$^$9!#\e(B
 
+\e$BNc\e(B:
+@lisp
+(setq gnus-group-name-charset-group-alist
+    '(("\\.com\\.cn:" . cn-gb-2312)))
+@end lisp
+
+@end table
 
 @node Scanning New Messages
 @subsection \e$B?7Ce%a%C%;!<%8$rC5$9\e(B
@@ -3146,20 +3663,21 @@ Gnus
 @kindex g (Group)
 @findex gnus-group-get-new-news
 @c @icon{gnus-group-get-new-news}
-\e$B%5!<%P$N?7Ce5-;v$r%A%'%C%/$7$^$9!#?t;z%W%l%U%#%C%/%9$r;HMQ$9$k$H!"$3$NL?Na\e(B
-\e$B$O0z?t\e(B @var{arg} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W$N$_$r%A%'%C%/$7$^$9\e(B
-(@code{gnus-group-get-new-news})\e$B!#?t;z0J30$N%W%l%U%#%C%/%9$rM?$($k$H!"$3$N\e(B
-\e$BL?Na$O$=$N%P%C%/%(%s%I$+$i%"%/%F%#%V%U%!%$%k$r6/@)E*$KA4ItFI$_D>$7$^$9!#\e(B
+\e$B%5!<%P$N?7Ce5-;v$r%A%'%C%/$7$^$9!#?t;z%W%l%U%#%C%/%9$r;HMQ$9$k$H!"$3$NL?\e(B
+\e$BNa$O0z?t\e(B @var{arg} \e$B$+$=$l$h$j>.$5$$%l%Y%k$N%0%k!<%W$N$_$r%A%'%C%/$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-get-new-news})\e$B!#?t;z0J30$N%W%l%U%#%C%/%9$rM?$($k$H!"\e(B
+\e$B$3$NL?Na$O$=$N%P%C%/%(%s%I$+$i%"%/%F%#%V%U%!%$%k$r6/@)E*$KA4ItFI$_D>$7$^\e(B
+\e$B$9!#\e(B
 
 @item M-g
 @kindex M-g (Group)
 @findex gnus-group-get-new-news-this-group
 @vindex gnus-goto-next-group-when-activating
 @c @icon{gnus-group-get-new-news-this-group}
-\e$B8=:_$N%0%k!<%W$K?7Ce5-;v$,$"$k$+$I$&$+$r%A%'%C%/$7$^$9\e(B
-(@code{gnus-group-get-new-news-this-group})\e$B!#\e(B
-@code{gnus-goto-next-group-when-activating} \e$B$O$3$NL?Na$,<!$N%0%k!<%W0LCV$X\e(B
-\e$B0\F0$9$k$+$I$&$+$r7h$a$^$9!#=i4|CM$O\e(B @code{t} \e$B$G$9!#\e(B
+\e$B8=:_$N%0%k!<%W$K?7Ce5-;v$,$"$k$+$I$&$+$r%A%'%C%/$7$^\e(B
+\e$B$9\e(B (@code{gnus-group-get-new-news-this-group})\e$B!#\e(B
+@code{gnus-goto-next-group-when-activating} \e$B$O$3$NL?Na$,<!$N%0%k!<%W0LCV\e(B
+\e$B$X0\F0$9$k$+$I$&$+$r7h$a$^$9!#=i4|CM$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @findex gnus-activate-all-groups
 @cindex activating groups
@@ -3171,20 +3689,19 @@ Gnus
 @kindex R (Group)
 @cindex restarting
 @findex gnus-group-restart
-Gnus \e$B$r%j%9%?!<%H$7$^$9\e(B (@code{gnus-group-restart})\e$B!#$3$l$O\e(B
-@file{.newsrc} \e$B%U%!%$%k$r%;!<%V$7!"A4$F$N%5!<%P$N@\B3$rJD$8!"A4$F$N\e(B gnus
-\e$B%i%s%?%$%`JQ?t$r%/%j%"$7$?8e!"\e(Bgnus \e$B$r$b$&0lEY:G=i$+$i3+;O$7$^$9!#\e(B
+Gnus \e$B$r%j%9%?!<%H$7$^$9\e(B (@code{gnus-group-restart})\e$B!#$3$l\e(B
+\e$B$O\e(B @file{.newsrc} \e$B%U%!%$%k$r%;!<%V$7!"A4$F$N%5!<%P$N@\B3$rJD$8!"A4$F\e(B
+\e$B$N\e(B gnus \e$B%i%s%?%$%`JQ?t$r%/%j%"$7$?8e!"\e(Bgnus \e$B$r$b$&0lEY:G=i$+$i3+;O$7$^$9!#\e(B
 
 @end table
 
 @vindex gnus-get-new-news-hook
-@code{gnus-get-new-news-hook} \e$B$O?7Ce%K%e!<%9$r%A%'%C%/$9$kD>A0$K\e(B
-\e$B<B9T$5$l$^$9!#\e(B
+@code{gnus-get-new-news-hook} \e$B$O?7Ce%K%e!<%9$r%A%'%C%/$9$kD>A0$K<B9T$5$l\e(B
+\e$B$^$9!#\e(B
 
 @vindex gnus-after-getting-new-news-hook
-@code{gnus-after-getting-new-news-hook} \e$B?7Ce%K%e!<%9$r%A%'%C%/$7\e(B
-\e$B$?8e$K<B9T$5$l$^$9!#\e(B
-
+@code{gnus-after-getting-new-news-hook} \e$B?7Ce%K%e!<%9$r%A%'%C%/$7$?8e$K<B\e(B
+\e$B9T$5$l$^$9!#\e(B
 
 @node Group Information
 @subsection \e$B%0%k!<%W>pJs\e(B
@@ -3193,7 +3710,6 @@ Gnus \e$B$r%j%9%?!<%H$7$^$9\e(B (@code{gnus-group-restart})\e$B!#$3$l$O\e(B
 
 @table @kbd
 
-
 @item H f
 @kindex H f (Group)
 @findex gnus-group-fetch-faq
@@ -3201,15 +3717,15 @@ Gnus \e$B$r%j%9%?!<%H$7$^$9\e(B (@code{gnus-group-restart})\e$B!#$3$l$O\e(B
 @cindex FAQ
 @cindex ange-ftp
 \e$B8=:_$N%0%k!<%W$N\e(B FAQ \e$B$r<hF@$7$h$&$H$7$^$9\e(B(@code{gnus-group-fetch-faq})\e$B!#\e(B
-Gnus \e$B$O\e(B FAQ \e$B$r\e(B@code{gnus-group-faq-directory} \e$B$+$i<hF@$7$h$&$H$7$^$9!#$3$l\e(B
-\e$B$ODL>o%j%b!<%H%^%7%s>e$N%G%#%l%/%H%j$G$9!#$3$NJQ?t$O%G%#%l%/%H%j$N%j%9%H$G\e(B
-\e$B$"$C$F$b9=$$$^$;$s!#$3$N>l9g!"$3$N%3%^%s%I$K%W%l%U%#%C%/%9$rM?$($k$3$H$G$$\e(B
-\e$B$/$D$+$N%5%$%H$NCf$+$iA*$V$3$H$,$G$-$^$9!#%U%!%$%k$N<hF@$K$O\e(B
-@code{ange-ftp}\e$B!J$^$?$O\e(B @code{efs}\e$B!K$,;HMQ$5$l$^$9!#\e(B
-
-\e$B$b$7:G=i$N%5%$%H$+$i$N<hF@$,<:GT$7$?>l9g!"\e(Bgnus \e$B$O\e(B
-@code{gnus-group-faq-directory} \e$B$NCM$rA4$F!"0l$D0l$D%*!<%W%s$7$F$_$h$&$H$7\e(B
-\e$B$^$9!#\e(B
+Gnus \e$B$O\e(B FAQ \e$B$r\e(B@code{gnus-group-faq-directory} \e$B$+$i<hF@$7$h$&$H$7$^$9!#$3\e(B
+\e$B$l$ODL>o%j%b!<%H%^%7%s>e$N%G%#%l%/%H%j$G$9!#$3$NJQ?t$O%G%#%l%/%H%j$N%j%9\e(B
+\e$B%H$G$"$C$F$b9=$$$^$;$s!#$3$N>l9g!"$3$N%3%^%s%I$K%W%l%U%#%C%/%9$rM?$($k$3\e(B
+\e$B$H$G$$$/$D$+$N%5%$%H$NCf$+$iA*$V$3$H$,$G$-$^$9!#%U%!%$%k$N<hF@$K\e(B
+\e$B$O\e(B @code{ange-ftp} (\e$B$^$?$O\e(B @code{efs}) \e$B$,;HMQ$5$l$^$9!#\e(B
+
+\e$B$b$7:G=i$N%5%$%H$+$i$N<hF@$,<:GT$7$?>l9g!"\e(B
+gnus \e$B$O\e(B @code{gnus-group-faq-directory} \e$B$NCM$rA4$F!"0l$D0l$D%*!<%W%s$7$F\e(B
+\e$B$_$h$&$H$7$^$9!#\e(B
 
 @item H d
 @itemx C-c C-d
@@ -3219,16 +3735,15 @@ Gnus \e$B$O\e(B FAQ \e$B$r\e(B@code{gnus-group-faq-directory} \e$B$+$i<hF@$7$h$&$H$7$
 @cindex describing groups
 @cindex group description
 @findex gnus-group-describe-group
-\e$B8=:_$N%0%k!<%W$N@bL@$rI=<($9$k\e(B
-(@code{gnus-group-describe-group})\e$B!#%W%l%U%#%C%/%9$rM?$($k$H!"@b\e(B
-\e$BL@J8$r%5!<%P$+$i6/@)E*$K:FFI$_9~$_$7$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$N@bL@$rI=<($9$k\e(B (@code{gnus-group-describe-group})\e$B!#%W%l\e(B
+\e$B%U%#%C%/%9$rM?$($k$H!"@bL@J8$r%5!<%P$+$i6/@)E*$K:FFI$_9~$_$7$^$9!#\e(B
 
 @item M-d
 @kindex M-d (Group)
 @findex gnus-group-describe-all-groups
-\e$BA4$F$N%0%k!<%W$N@bL@$rI=<($7$^$9\e(B
-(@code{gnus-group-describe-all-groups})\e$B!#%W%l%U%#%C%/%9$rM?$($k\e(B
-\e$B$H!"@bL@J8%U%!%$%k$r%5!<%P$+$i6/@)E*$K:FFI$_9~$_$7$^$9!#\e(B
+\e$BA4$F$N%0%k!<%W$N@bL@$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-group-describe-all-groups})\e$B!#%W%l%U%#%C%/%9$rM?$($k$H!"@b\e(B
+\e$BL@J8%U%!%$%k$r%5!<%P$+$i6/@)E*$K:FFI$_9~$_$7$^$9!#\e(B
 
 @item H v
 @itemx V
@@ -3241,27 +3756,27 @@ Gnus \e$B$O\e(B FAQ \e$B$r\e(B@code{gnus-group-faq-directory} \e$B$+$i<hF@$7$h$&$H$7$
 @item ?
 @kindex ? (Group)
 @findex gnus-group-describe-briefly
-\e$B$H$F$bC;$$%X%k%W%a%C%;!<%8$rM?$($^$9\e(B (@code{gnus-group-describe-briefly})\e$B!#\e(B
+\e$B$H$F$bC;$$%X%k%W%a%C%;!<%8$rM?$($^\e(B
+\e$B$9\e(B (@code{gnus-group-describe-briefly})\e$B!#\e(B
 
 @item C-c C-i
 @kindex C-c C-i (Group)
 @cindex info
 @cindex manual
 @findex gnus-info-find-node
-Gnus \e$B$N\e(B info \e$B%N!<%I$K0\F0$7$^$9\e(B (@code{gnus-info-find-node}).\e$B!#\e(B
+Gnus \e$B$N\e(B info \e$B%N!<%I$K0\F0$7$^$9\e(B (@code{gnus-info-find-node})\e$B!#\e(B
 
 @end table
 
-
 @node Group Timestamp
 @subsection \e$B%0%k!<%W$NF|IU\e(B
 @cindex timestamps
 @cindex group timestamps
 
-Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
-\e$B$+$b$7$l$^$;$s!#$3$N3hF0$r;O$a$5$;$k$K$O!"\e(B
-@code{gnus-group-set-timestamp}\e$B$r\e(B @code{gnus-select-group-hook}
-\e$B$KDI2C$7$F$/$@$5$$!#\e(B
+Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx$+$b$7$l\e(B
+\e$B$^$;$s!#$3$N3hF0$r;O$a$5$;$k$K$O!"\e(B
+@code{gnus-group-set-timestamp} \e$B$r\e(B @code{gnus-select-group-hook} \e$B$KDI2C\e(B
+\e$B$7$F$/$@$5$$!#\e(B
 
 @lisp
 (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
@@ -3269,15 +3784,15 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 
 \e$B$3$l$r9T$C$?8e!"$"$J$?$,%0%k!<%W$KF~$k$?$S$K$=$l$,5-O?$5$l$^$9!#\e(B
 
-\e$B$3$N>pJs$O$5$^$6$^$JJ}K!$GI=<($G$-$^$9!=!=$b$C$H$b4JC1$J$N$O!"%0%k!<%W9T%U%)!<\e(B
-\e$B%^%C%H$G\e(B @samp{%d} \e$B;XDj$r;H$&J}K!$G$9!'\e(B
+\e$B$3$N>pJs$O$5$^$6$^$JJ}K!$GI=<($G$-$^$9!=!=$b$C$H$b4JC1$J$N$O!"%0%k!<%W9T\e(B
+\e$B%U%)!<%^%C%H$G\e(B @samp{%d} \e$B;XDj$r;H$&J}K!$G$9\e(B:
 
 @lisp
 (setq gnus-group-line-format
       "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
 @end lisp
 
-\e$B$3$N7k2L$H$7$F!"3F9T$O0J2<$N$h$&$KI=<($5$l$^$9!'\e(B
+\e$B$3$N7k2L$H$7$F!"3F9T$O0J2<$N$h$&$KI=<($5$l$^$9\e(B:
 
 @example
 *        0: mail.ding                                19961002T012943
@@ -3293,7 +3808,6 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
       "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
 @end lisp
 
-
 @node File Commands
 @subsection \e$B%U%!%$%kL?Na\e(B
 @cindex file commands
@@ -3312,8 +3826,8 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 @kindex s (Group)
 @findex gnus-group-save-newsrc
 @cindex saving .newsrc
-@file{.newsrc.eld}\e$B%U%!%$%k!J$H!"$b$7$=$&$7$?$1$l$P\e(B@file{.newsrc} \e$B%U%!%$%k!K\e(B
-\e$B$r%;!<%V$9$k\e(B(@code{gnus-group-save-newsrc})\e$B!#\e(B
+@file{.newsrc.eld} \e$B%U%!%$%k\e(B (\e$B$H!"$b$7$=$&$7$?$1$l$P\e(B @file{.newsrc} \e$B%U%!\e(B
+\e$B%$%k\e(B) \e$B$r%;!<%V$9$k\e(B (@code{gnus-group-save-newsrc})\e$B!#\e(B
 
 @c @item Z
 @c @kindex Z (Group)
@@ -3323,7 +3837,6 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 
 @end table
 
-
 @node The Summary Buffer
 @chapter \e$B35N,%P%C%U%!\e(B
 @cindex summary buffer
@@ -3337,39 +3850,37 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 \e$B35N,%P%C%U%!$OK>$`$@$1$?$/$5$s3+$$$?>uBV$K$7$F$*$/$3$H$,$G$-$^$9!#\e(B
 
 @menu
-* Summary Buffer Format::       \e$B35N,%P%C%U%!$N304Q$r7hDj$9$k!#\e(B
-* Summary Maneuvering::         \e$B35N,%P%C%U%!$rF0$-2s$k!#\e(B
-* Choosing Articles::           \e$B5-;v$rFI$`!#\e(B
-* Paging the Article::          \e$BFI$s$G$$$k5-;v$r%9%/%m!<%k$9$k!#\e(B
-* Reply Followup and Post::     \e$B5-;v$rEj9F$9$k!#\e(B
-* Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
-* Canceling and Superseding::   \e$B!X$"$!!"$"$s$J$U$&$K8@$&$s$8$c$J$+$C$?!#!Y\e(B
-* Marking Articles::            \e$B5-;v$K4{FI$d4|8B@Z$l:o=|2DG=Ey$N0u$rIU$1$k!#\e(B
-* Limiting::                    \e$B35N,%P%C%U%!$K@)8B$r2C$($k$3$H$,$G$-$k!#\e(B
-* Threading::                   \e$B%9%l%C%I$,$I$N$h$&$K:n$i$l$k$+!#\e(B
-* Sorting::                     \e$B%9%l%C%I$H5-;v$,$I$N$h$&$KJB$S$+$($i$l$k$+!#\e(B
-* Asynchronous Fetching::       Gnus \e$B$O5-;v$r@h$K<hF@$9$k$3$H$,$G$-$k!#\e(B
-* Article Caching::             \e$B%-%c%C%7%e$K5-;v$rCy$a$F$*$1$k!#\e(B
-* Persistent Articles::         \e$B5-;v$r4|8B@Z$l>C5n$7$J$/$5$;$k!#\e(B
-* Article Backlog::             \e$B4{$KFI$s$@5-;v$r;D$7$F$*$/!#\e(B
-* Saving Articles::             \e$B5-;v$NJ]B8$r%+%9%?%^%$%:$9$kJ}K!!#\e(B
-* Decoding Articles::           Gnus \e$B$O0lO"$N\e(B (uu)encode \e$B$5$l$?5-;v$r07$($k!#\e(B
-* Article Treatment::           \e$B5-;v%P%C%U%!$O$*K>$_$I$*$j$KL\Cc6lCc$K$G$-$k!#\e(B
-@c * MIME Commands::               Doing MIMEy things with the articles.
-@c * Charsets::                    Character set issues.
-* Article Commands::            \e$B5-;v%P%C%U%!$G$$$m$$$m$J$3$H$r$9$k!#\e(B
-* Summary Sorting::             \e$B$$$m$$$m$JJ}K!$G35N,%P%C%U%!$rJB$YBX$($k!#\e(B
-* Finding the Parent::          \e$B;R5-;v$K1g=u$,L5$$$C$F\e(B? \e$B?F5-;v$r<hF@$7$J$5$$!#\e(B
-* Alternative Approaches::      \e$B=i4|@_Dj$G$J$$35N,$r;H$C$FFI$`!#\e(B
-* Tree Display::                \e$B$b$C$H;k3PE*$J%9%l%C%I$NI=<(!#\e(B
-* Mail Group Commands::         \e$B$$$/$D$+$NL?Na$O%a!<%k%0%k!<%W$@$1$G;H$&$3$H$,$G$-$k!#\e(B
-* Various Summary Stuff::       \e$BB>$N$I$N>l=j$K$b9g$o$J$+$C$?$b$N!#\e(B
-* Exiting the Summary Buffer::  \e$B%0%k!<%W%P%C%U%!$KLa$k!#\e(B
-* Crosspost Handling::          \e$B%/%m%9%]%9%H$5$l$?5-;v$,$I$N$h$&$K07$o$l$k$+!#\e(B
-* Duplicate Suppression::       \e$B%/%m%9%]%9%H$N07$$$K<:GT$7$?$H$-$NBeBX<jCJ!#\e(B
+* Summary Buffer Format::      \e$B35N,%P%C%U%!$N304Q$r7hDj$9$k\e(B
+* Summary Maneuvering::        \e$B35N,%P%C%U%!$rF0$-2s$k\e(B
+* Choosing Articles::          \e$B5-;v$rFI$`\e(B
+* Paging the Article::         \e$BFI$s$G$$$k5-;v$r%9%/%m!<%k$9$k\e(B
+* Reply Followup and Post::    \e$B5-;v$rEj9F$9$k\e(B
+* Marking Articles::           \e$B5-;v$K4{FI$d4|8B@Z$l:o=|2DG=Ey$N0u$rIU$1$k\e(B
+* Limiting::                   \e$B35N,%P%C%U%!$K@)8B$r2C$($k$3$H$,$G$-$k\e(B
+* Threading::                  \e$B%9%l%C%I$,$I$N$h$&$K:n$i$l$k$+\e(B
+* Sorting::                    \e$B%9%l%C%I$H5-;v$,$I$N$h$&$KJB$S$+$($i$l$k$+\e(B
+* Asynchronous Fetching::      Gnus \e$B$O5-;v$r@h$K<hF@$9$k$3$H$,$G$-$k\e(B
+* Article Caching::            \e$B%-%c%C%7%e$K5-;v$rCy$a$F$*$1$k\e(B
+* Persistent Articles::        \e$B5-;v$r4|8B@Z$l>C5n$7$J$/$5$;$k\e(B
+* Article Backlog::            \e$B4{$KFI$s$@5-;v$r;D$7$F$*$/\e(B
+* Saving Articles::            \e$B5-;v$NJ]B8$r%+%9%?%^%$%:$9$kJ}K!\e(B
+* Decoding Articles::          Gnus \e$B$O0lO"$N\e(B (uu)encode \e$B$5$l$?5-;v$r07$($k\e(B
+* Article Treatment::          \e$B5-;v%P%C%U%!$O$*K>$_$I$*$j$KL\Cc6lCc$K$G$-$k\e(B
+@c * MIME Commands::              Doing MIMEy things with the articles.
+@c * Charsets::                   Character set issues.
+* Article Commands::           \e$B5-;v%P%C%U%!$G$$$m$$$m$J$3$H$r$9$k\e(B
+* Summary Sorting::            \e$B$$$m$$$m$JJ}K!$G35N,%P%C%U%!$rJB$YBX$($k\e(B
+* Finding the Parent::         \e$B;R5-;v$K1g=u$,L5$$$C$F\e(B? \e$B?F5-;v$r<hF@$7$J$5$$\e(B
+* Alternative Approaches::     \e$B=i4|@_Dj$G$J$$35N,$r;H$C$FFI$`\e(B
+* Tree Display::               \e$B$b$C$H;k3PE*$J%9%l%C%I$NI=<(\e(B
+* Mail Group Commands::        \e$B$$$/$D$+$NL?Na$O%a!<%k%0%k!<%W$@$1$G;H$&\e(B
+                               \e$B$3$H$,$G$-$k\e(B
+* Various Summary Stuff::      \e$BB>$N$I$N>l=j$K$b9g$o$J$+$C$?$b$N\e(B
+* Exiting the Summary Buffer:: \e$B%0%k!<%W%P%C%U%!$KLa$k\e(B
+* Crosspost Handling::         \e$B%/%m%9%]%9%H$5$l$?5-;v$,$I$N$h$&$K07$o$l$k$+\e(B
+* Duplicate Suppression::      \e$B%/%m%9%]%9%H$N07$$$K<:GT$7$?$H$-$NBeBX<jCJ\e(B
 @end menu
 
-
 @node Summary Buffer Format
 @section \e$B35N,%P%C%U%!$NMM<0\e(B
 @cindex summary buffer format
@@ -3384,10 +3895,10 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 @end iftex
 
 @menu
-* Summary Buffer Lines::     \e$B35N,%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$G$-$k!#\e(B
-* To From Newsgroups::       \e$B<+J,<+?H$NL>A0$rI=<($7$J$$J}K!!#\e(B
-* Summary Buffer Mode Line:: \e$B%b!<%I9T$N8+$(J}$r7h$a$i$l$k!#\e(B
-* Summary Highlighting::     \e$B35N,%P%C%U%!$r$-$l$$$GAGE($K$9$k!#\e(B
+* Summary Buffer Lines::     \e$B35N,%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$G$-$k\e(B
+* To From Newsgroups::       \e$B<+J,<+?H$NL>A0$rI=<($7$J$$J}K!\e(B
+* Summary Buffer Mode Line:: \e$B%b!<%I9T$N8+$(J}$r7h$a$i$l$k\e(B
+* Summary Highlighting::     \e$B35N,%P%C%U%!$r$-$l$$$GAGE($K$9$k\e(B
 @end menu
 
 @findex std11-extract-address-components
@@ -3396,8 +3907,9 @@ Gnus \e$B$K!"$"$J$?$,:G8e$K$$$D%0%k!<%W$rFI$s$@$+$r5-O?$5$;$k$HJXMx\e(B
 @vindex gnus-extract-address-components
 Gnus \e$B$OJQ?t\e(B @code{gnus-extract-address-components} \e$B$NCM$r\e(B @code{From} \e$B%X%C\e(B
 \e$B%@!<$NL>A0$H%"%I%l%9$NItJ,$r<j$KF~$l$k$?$a$N4X?t$H$7$F;H$$$^$9!#$9$G$KDj\e(B
-\e$B5A$5$l$F$$$k4X?t$,#3$DB8:_$7$^$9!'\e(B@code{gnus-extract-address-components}
-\e$B$O=i4|CM$G$9$,!"$H$F$b4JC1$K3d$j@Z$C$?2r7hK!$G!"Hs>o$KB.$/F0:n$7$^$9!#\e(B
+\e$B5A$5$l$F$$$k4X?t$,;0$DB8:_$7$^$9\e(B:
+@code{gnus-extract-address-components} \e$B$O=i4|CM$G$9$,!"$H$F$b4JC1$K3d$j\e(B
+\e$B@Z$C$?2r7hK!$G!"Hs>o$KB.$/F0:n$7$^$9!#\e(B
 @code{mail-extract-address-components} \e$B$ONI$/F0:n$7$^$9$,!"$d$dCY$/$J$j\e(B
 \e$B$^$9!#$=$7$F!"\e(B@code{std11-extract-address-components} \e$B$O$H$F$bNI$/F0:n$7\e(B
 \e$B$^$9$,!"CY$/$J$j$^$9!#%G%#%U%)%k%H$N4X?t$O\e(B 5% \e$B$N3d9g$G4V0c$C$FEz$($^$9!#\e(B
@@ -3413,15 +3925,14 @@ Gnus \e$B$OJQ?t\e(B @code{gnus-extract-address-components} \e$B$NCM$r\e(B @code{From
 \e$B$8I=Bj\e(B (subject) \e$B$G$"$k$3$H$r<($9J8;zNs$G$9!#$3$NJ8;zNs$O;EMM$,$3$l$rMW\e(B
 \e$B5a$9$k$H$-$K;H$o$l$^$9!#=i4|@_Dj$G$O\e(B @code{""} \e$B$G$9!#\e(B
 
-
 @node Summary Buffer Lines
 @subsection \e$B35N,%P%C%U%!$N9T\e(B
 
 @vindex gnus-summary-line-format
 \e$BJQ?t\e(B @code{gnus-summary-line-format} \e$B$NCM$rJQ$($k$3$H$K$h$C$F!"35N,%P%C\e(B
-\e$B%U%!$G$N9T$NMM<0\e(B (format) \e$B$rJQ99$9$k$3$H$,$G$-$^$9!#$$$/$D$+$N3HD%\e(B
-(@pxref{Formatting Variables}) \e$B$r=|$$$F!"IaDL$N\e(B @code{format} \e$BJ8;zNs$HF1\e(B
-\e$B$8$h$&$KF0:n$7$^$9!#\e(B
+\e$B%U%!$G$N9T$NMM<0\e(B (format) \e$B$rJQ99$9$k$3$H$,$G$-$^$9!#$$$/$D$+$N3H\e(B
+\e$BD%\e(B (@pxref{Formatting Variables}) \e$B$r=|$$$F!"IaDL$N\e(B @code{format} \e$BJ8;zNs\e(B
+\e$B$HF1$8$h$&$KF0:n$7$^$9!#\e(B
 
 \e$B=i4|CM$NJ8;zNs$O\e(B @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n} \e$B$G$9!#\e(B
 
@@ -3431,8 +3942,8 @@ Gnus \e$B$OJQ?t\e(B @code{gnus-extract-address-components} \e$B$NCM$r\e(B @code{From
 @item N
 \e$B5-;v?t!#\e(B
 @item S
-\e$BI=Bj$NJ8;zNs!#\e(B@code{gnus-list-identifiers} \e$B$N@_Dj$K$h$C$F%a!<%j%s%0%j%9%H\e(B
-\e$B$NI8<1$,:o=|$5$l$^$9!#\e(B@xref{Article Hiding}\e$B!#\e(B
+\e$BI=Bj$NJ8;zNs!#\e(B@code{gnus-list-identifiers} \e$B$N@_Dj$K$h$C$F%a!<%j%s%0%j%9\e(B
+\e$B%H$NI8<1$,:o=|$5$l$^$9!#\e(B@xref{Article Hiding}\e$B!#\e(B
 @item s
 \e$B%9%l%C%I\e(B (thread) \e$B$N4p5-;v$G$"$k$H$-$+D>A0$N5-;v$,0c$&I=Bj$N$H$-$O$=$NBj\e(B
 \e$BL>$G!"$=$l0J30$O\e(B @code{gnus-summary-same-subject}\e$B!#\e(B
@@ -3440,25 +3951,26 @@ Gnus \e$B$OJQ?t\e(B @code{gnus-extract-address-components} \e$B$NCM$r\e(B @code{From
 @item F
 \e$B40A4$J\e(B @code{From} \e$BMs!#\e(B
 @item n
-\e$BL>A0!J\e(B@code{From} \e$BMs$h$j!K!#\e(B
+\e$BL>A0\e(B (@code{From} \e$BMs$h$j\e(B)\e$B!#\e(B
 @item f
-\e$BL>A0!"\e(B@code{To} \e$B%X%C%@!<$+\e(B @code{Newsgroups} \e$B%X%C%@!<$G$9\e(B (@pxref{To
-From Newsgroups})\e$B!#\e(B
+\e$BL>A0!"\e(B@code{To} \e$B%X%C%@!<$+\e(B @code{Newsgroups} \e$B%X%C%@!<$G\e(B
+\e$B$9\e(B (@pxref{To From Newsgroups})\e$B!#\e(B
 @item a
-\e$BL>A0!J\e(B@code{From} \e$BMs$h$j!K!#$3$l$H\e(B @code{n} \e$B$H$N0c$$$O!"$3$l$OJQ?t\e(B
-@code{gnus-extract-address-components} \e$B$G;XDj$5$l$F$$$k4X?t$r;H$C$FL>A0$r\e(B
-\e$B<hF@$9$k$3$H$G$9!#$3$NJ}$,CY$$$G$9$,!"$*$=$i$/$h$j40A4$K6a$$$G$7$g$&!#\e(B
+\e$BL>A0\e(B (@code{From} \e$BMs$h$j\e(B)\e$B!#$3$l$H\e(B @code{n} \e$B$H$N0c$$$O!"$3$l$OJQ\e(B
+\e$B?t\e(B @code{gnus-extract-address-components} \e$B$G;XDj$5$l$F$$$k4X?t$r;H$C$FL>\e(B
+\e$BA0$r<hF@$9$k$3$H$G$9!#$3$NJ}$,CY$$$G$9$,!"$*$=$i$/$h$j40A4$K6a$$$G$7$g$&!#\e(B
 @item A
-\e$BL>A0!J\e(B@code{From} \e$BMs$h$j!K!#$3$l$O\e(B @code{a} \e$B$HF1$8$h$&$KF0:n$7$^$9!#\e(B
+\e$BL>A0\e(B (@code{From} \e$BMs$h$j\e(B)\e$B!#$3$l$O\e(B @code{a} \e$B$HF1$8$h$&$KF0:n$7$^$9!#\e(B
 @item L
 \e$B5-;v$N9T?t!#\e(B
 @item c
-\e$B5-;v$NJ8;z?t!#\e(B
+\e$B5-;v$NJ8;z?t!#$3$NL>A0;XDj;R$O\e(B (nnfolder \e$B$N$h$&$J\e(B) \e$B$$$/$D$+$NA*BrJ}K!$r\e(B
+\e$B%5%]!<%H$7$^$;$s!#\e(B
 @item I
 \e$B%9%l%C%I$N%l%Y%k$K$h$k;z2<$2\e(B (@pxref{Customizing Threading})\e$B!#\e(B
 @item T
-\e$B5-;v$,K\5-;v$G$"$l$P2?$bI=<($;$:!"$=$&$G$J$$>l9g$O$?$/$5$s$N6uGr$G$9!J8e$N\e(B
-\e$B$b$N$r$9$Y$F2hLL$N30$KDI$$=P$7$F$7$^$$$^$9!K!#\e(B
+\e$B5-;v$,K\5-;v$G$"$l$P2?$bI=<($;$:!"$=$&$G$J$$>l9g$O$?$/$5$s$N6uGr$G$9\e(B (\e$B8e\e(B
+\e$B$N$b$N$r$9$Y$F2hLL$N30$KDI$$=P$7$F$7$^$$$^$9\e(B)\e$B!#\e(B
 @item [
 \e$B3+$-3g8L!#IaDL$O\e(B @samp{[} \e$B$G$9$,!"M\;R5-;v$K$O\e(B @samp{<} \e$B$K$9$k$3$H$,$G$-\e(B
 \e$B$^$9\e(B (@pxref{Customizing Threading})\e$B!#\e(B
@@ -3473,18 +3985,18 @@ From Newsgroups})\e$B!#\e(B
 \e$BL$FI!#\e(B
 
 @item R
-\e$B$3$NJ6$i$o$7$$L>A0;XDj;R$O\e(B @dfn{secondary mark} \e$B$K$h$C$FDj5A$5$l$^$9!#$3$N\e(B
-\e$B%^!<%/$O5-;v$,4{$KJVEz:Q$_$N$b$N$+!"%-%c%C%7%e$5$l$?$b$N$+!"$"$k$$$OJ]B8$5\e(B
-\e$B$l$?$b$N$+$rI=$7$^$9!#\e(B
+\e$B$3$NJ6$i$o$7$$L>A0;XDj;R$O\e(B @dfn{secondary mark} \e$B$K$h$C$FDj5A$5$l$^$9!#$3\e(B
+\e$B$N%^!<%/$O5-;v$,4{$KJVEz:Q$_$N$b$N$+!"%-%c%C%7%e$5$l$?$b$N$+!"$"$k$$$OJ]\e(B
+\e$BB8$5$l$?$b$N$+$rI=$7$^$9!#\e(B
 
 @item i
 \e$B?t;z$H$7$F$N%9%3%"\e(B (@pxref{Scoring})\e$B!#\e(B
 @item z
 @vindex gnus-summary-zcore-fuzz
 \e$B$3$l$O!"\e(Bzcore \e$B$G=i4|@_Dj$N%l%Y%k$h$j$b>e$G$"$l$P\e(B @samp{+} \e$B$G!"=i4|@_Dj$N\e(B
-\e$B%l%Y%k$h$j$b2<$G$"$l$P\e(B @samp{-} \e$B$G$9!#\e(B@code{gnus-summary-default-score}
-\e$B$H$N:9$,\e(B @code{gnus-summary-zcore-fuzz}\e$B$h$j$b>.$5$$$H!"$3$N;EMM$O;H$o$l\e(B
-\e$B$^$;$s!#\e(B
+\e$B%l%Y%k$h$j$b2<$G$"$l$P\e(B @samp{-} \e$B$G$9!#\e(B
+@code{gnus-summary-default-score} \e$B$H$N:9\e(B
+\e$B$,\e(B @code{gnus-summary-zcore-fuzz} \e$B$h$j$b>.$5$$$H!"$3$N;EMM$O;H$o$l$^$;$s!#\e(B
 @item V
 \e$B%9%l%C%IA4BN$N%9%3%"!#\e(B
 @item x
@@ -3510,34 +4022,34 @@ From Newsgroups})\e$B!#\e(B
 @item O
 \e$B%@%&%s%m!<%I$N0u!#\e(B
 @item u
-\e$BMxMQ<TDj5A;XDj;R!#%U%)!<%^%C%HJ8;zNs$NCf$N<!$NJ8;z$,1Q;z$G$"$kI,MW$,$"$j$^\e(B
-\e$B$9!#$3$l$K$h$j\e(B gnus \e$B$O4X?t\e(B @code{gnus-user-format-function-}@samp{X} \e$B$r8F\e(B
-\e$B$S=P$7$^$9$,!"$3$3$G\e(B @samp{X} \e$B$O\e(B @samp{%U} \e$B$N<!$NJ8;z$G$9!#4X?t$K$O8=:_$N\e(B
-\e$B5-;v$N%X%C%@!<$,0z?t$H$7$FEO$5$l$^$9!#4X?t$OJ8;zNs$rJV$7!"B>$N35N,;XDj$HF1\e(B
-\e$BMM$K35N,$KA^F~$5$l$^$9!#\e(B
+\e$BMxMQ<TDj5A;XDj;R!#%U%)!<%^%C%HJ8;zNs$NCf$N<!$NJ8;z$,1Q;z$G$"$kI,MW$,$"$j\e(B
+\e$B$^$9!#$3$l$K$h$j\e(B gnus \e$B$O4X\e(B
+\e$B?t\e(B @code{gnus-user-format-function-}@samp{X} \e$B$r8F$S=P$7$^$9$,!"$3$3\e(B
+\e$B$G\e(B @samp{X} \e$B$O\e(B @samp{%U} \e$B$N<!$NJ8;z$G$9!#4X?t$K$O8=:_$N5-;v$N%X%C%@!<$,\e(B
+\e$B0z?t$H$7$FEO$5$l$^$9!#4X?t$OJ8;zNs$rJV$7!"B>$N35N,;XDj$HF1MM$K35N,$KA^F~\e(B
+\e$B$5$l$^$9!#\e(B
 @end table
 
-@samp{%U}\e$B!J>uBV!K!"\e(B@samp{%R}\e$B!JJVEz:Q$_!K!"\e(B@samp{%z} (zcore) \e$B$N07$$$K$O5$$r\e(B
-\e$BIU$1$kI,MW$,$"$j$^$9!#8zN($N$?$a$K!"\e(Bgnus \e$B$O$3$l$i$NJ8;z$,$I$N7e$K8=$l$k$+\e(B
-\e$B$r7W;;$7!"!X%O!<%I!&%3!<%I!Y$7$^$9!#$3$l$O!"2DJQD9$N;EMM$N8e$G$O!"$3$l$i$O\e(B
-\e$B0UL#$r;}$?$J$$$H$$$&$3$H$G$9!#$^$!!"$5$9$,$KBaJa$O$5$l$J$$$G$7$g$&$,!"35N,\e(B
-\e$B%P%C%U%!$OJQ$K$J$j$^$9!#$=$l$G$b==J,Ha$7$$$G$7$g$&$1$I!#\e(B
+@samp{%U} (\e$B>uBV\e(B), @samp{%R} (\e$BJVEz:Q$_\e(B), @samp{%z} (zcore) \e$B$N07$$$K$O5$$r\e(B
+\e$BIU$1$kI,MW$,$"$j$^$9!#8zN($N$?$a$K!"\e(Bgnus \e$B$O$3$l$i$NJ8;z$,$I$N7e$K8=$l$k\e(B
+\e$B$+$r7W;;$7!"!X%O!<%I!&%3!<%I!Y$7$^$9!#$3$l$O!"2DJQD9$N;EMM$N8e$G$O!"$3$l\e(B
+\e$B$i$O0UL#$r;}$?$J$$$H$$$&$3$H$G$9!#$^$!!"$5$9$,$KBaJa$O$5$l$J$$$G$7$g$&$,!"\e(B
+\e$B35N,%P%C%U%!$OJQ$K$J$j$^$9!#$=$l$G$b==J,Ha$7$$$G$7$g$&$1$I!#\e(B
 
-\e$B8-$$A*Br$O$3$l$i$N;XDj$r$G$-$k$@$1:8$K;}$C$F$/$k$3$H$G$9!#!J$G$b!"$=$&$$\e(B
-\e$B$&$3$H$O$9$Y$F$KEv$F$O$^$k$N$G$O$J$$$G$7$g$&$+!#4WOC5YBj!#!K\e(B
+\e$B8-$$A*Br$O$3$l$i$N;XDj$r$G$-$k$@$1:8$K;}$C$F$/$k$3$H$G$9!#\e(B(\e$B$G$b!"$=$&$$\e(B
+\e$B$&$3$H$O$9$Y$F$KEv$F$O$^$k$N$G$O$J$$$G$7$g$&$+!#4WOC5YBj!#\e(B)
 
 \e$B$3$N@)8B$O>-Mh$NHG$G$OL5$/$J$k$+$bCN$l$^$;$s!#\e(B
 
-
 @node To From Newsgroups
 @subsection To From Newsgroups
 @cindex To
 @cindex Newsgroups
 
-\e$B$$$/$D$+$N%0%k!<%W$G$O\e(B (\e$BFC$K%"!<%+%$%V%0%k!<%W\e(B)\e$B!"\e(B@code{From} \e$B%X%C%@!<$O\e(B
+\e$B$$$/$D$+$N%0%k!<%W$G$O\e(B (\e$BFC$K%"!<%+%$%V%0%k!<%W\e(B), @code{From} \e$B%X%C%@!<$O\e(B
 \e$B$"$^$j6=L#$r0z$-$^$;$s!#$=$3$NA4$F$N5-;v$O$"$J$?$K$h$C$F=q$+$l$?$b$N$G$9\e(B
 \e$B$+$i!#Be$o$j$K!"\e(B@code{To} \e$B$d\e(B @code{Newsgroups} \e$B%X%C%@!<$N>pJs$rI=<($9$k\e(B
-\e$B$?$a$K$O!"\e(B3\e$B$D$N$3$H$r7h$a$kI,MW$,$"$j$^$9\e(B: \e$B$I$N>pJs$r=8$a$k$+\e(B, \e$B$I$3$KI=\e(B
+\e$B$?$a$K$O!";0$D$N$3$H$r7h$a$kI,MW$,$"$j$^$9\e(B: \e$B$I$N>pJs$r=8$a$k$+\e(B, \e$B$I$3$KI=\e(B
 \e$B<($9$k$+\e(B, \e$B$$$DI=<($9$k$+!#\e(B
 
 @enumerate
@@ -3551,8 +4063,8 @@ From Newsgroups})\e$B!#\e(B
       '(To Newsgroups X-Newsreader))
 @end lisp
 
-\e$B$3$l$O!"\e(Bgnus \e$B$,$3$l$i$N\e(B3\e$B$D$N%X%C%@!<$r<hF@$7$h$&$H$7!"8e$NMF0W$J<hF@$N$?\e(B
-\e$B$a$K%X%C%@!<9=B$$KJ]B8$9$k$H$$$&7k2L$K$J$j$^$9!#\e(B
+\e$B$3$l$O!"\e(Bgnus \e$B$,$3$l$i$N;0$D$N%X%C%@!<$r<hF@$7$h$&$H$7!"8e$NMF0W$J<hF@$N\e(B
+\e$B$?$a$K%X%C%@!<9=B$$KJ]B8$9$k$H$$$&7k2L$K$J$j$^$9!#\e(B
 
 @item
 @findex gnus-extra-header
@@ -3566,10 +4078,10 @@ From Newsgroups})\e$B!#\e(B
 
 @item
 @vindex gnus-ignored-from-addresses
-@code{gnus-ignored-from-addresses} \e$BJQ?t$O$$$D\e(B @samp{%f} \e$B35N,9T;EMM$,\e(B
-@code{To}, @code{Newsreader} \e$B$d\e(B @code{From} \e$B%X%C%@!<$rJV$;$PNI$$$+$r7h$a\e(B
-\e$B$^$9!#$3$N@55,I=8=$,\e(B @code{From} \e$B%X%C%@!<$NFbMF$H9gCW$9$k$H!"\e(B@code{To}
-\e$B$d\e(B @code{Newsreader} \e$B%X%C%@!<$,Be$o$j$K;EMM$5$l$^$9!#\e(B
+@code{gnus-ignored-from-addresses} \e$BJQ?t$O$$$D\e(B @samp{%f} \e$B35N,9T;EMM\e(B
+\e$B$,\e(B @code{To}, @code{Newsreader} \e$B$d\e(B @code{From} \e$B%X%C%@!<$rJV$;$PNI$$$+$r\e(B
+\e$B7h$a$^$9!#$3$N@55,I=8=$,\e(B @code{From} \e$B%X%C%@!<$NFbMF$H9gCW$9$k$H!"\e(B
+@code{To} \e$B$d\e(B @code{Newsreader} \e$B%X%C%@!<$,Be$o$j$K;EMM$5$l$^$9!#\e(B
 
 @end enumerate
 
@@ -3579,9 +4091,9 @@ From Newsgroups})\e$B!#\e(B
 \e$B$"$l$P!"$3$NJQ?t$rJQ99$7$?8e$K$O:F@8@.$9$kI,MW$,$"$j$^$9!#\e(B
 
 @vindex gnus-summary-line-format
-gnus \e$B$K!"\e(B@code{gnus-summary-line-format} \e$BJQ?t$N\e(B @code{%n} \e$B;EMM$r\e(B
-@code{%f} \e$B;EMM$KJQ99$9$k$3$H$G!"%G!<%?$rI=<($9$k$h$&$K;X<($9$kI,MW$,$"$j\e(B
-\e$B$^$9!#\e(B
+gnus \e$B$K!"\e(B@code{gnus-summary-line-format} \e$BJQ?t$N\e(B @code{%n} \e$B;EMM\e(B
+\e$B$r\e(B @code{%f} \e$B;EMM$KJQ99$9$k$3$H$G!"%G!<%?$rI=<($9$k$h$&$K;X<($9$kI,MW$,\e(B
+\e$B$"$j$^$9!#\e(B
 
 \e$BMWLs$9$k$H!"IaDL$O0J2<$N$h$&$J$3$H$r$9$k$3$H$K$J$j$^$9\e(B:
 
@@ -3605,7 +4117,6 @@ Newsgroups:full
 
 \e$B%a!<%k%0%k!<%W$G$NDI2C%X%C%@!<$N$h$&$K$=$l$r;H$&$3$H$,$G$-$^$9!#\e(B
 
-
 @node Summary Buffer Mode Line
 @subsection \e$B35N,%P%C%U%!$N%b!<%I9T\e(B
 
@@ -3614,7 +4125,7 @@ Newsgroups:full
 Formatting})\e$B!#\e(B@code{gnus-summary-mode-line-format} \e$B$r2?$G$b9%$-$J$b$N$K\e(B
 \e$BJQ99$7$F$/$@$5$$!#=i4|CM$O\e(B @samp{Gnus: %%b [%A] %Z} \e$B$G$9!#\e(B
 
-\e$B0J2<$,$"$J$?$,M7$V$3$H$N$G$-$k$=$l$>$l$NMWAG$G$9!'\e(B
+\e$B0J2<$,$"$J$?$,M7$V$3$H$N$G$-$k$=$l$>$l$NMWAG$G$9\e(B:
 
 @table @samp
 @item G
@@ -3633,8 +4144,8 @@ Gnus \e$B%P!<%8%g%s!#\e(B
 \e$B35N,%P%C%U%!$KI=<($5$l$F$$$J$$L$FI5-;v$N?t!#\e(B
 @item Z
 \e$BL$FI$HL$A*Br$N5-;v$N?t$H$H$b$KI=$5$l$kJ8;zNs$G!"L$FI$+$DL$A*Br$N5-;v$,$"\e(B
-\e$B$k>l9g$O\e(B @samp{<%U(+%e) more>} \e$B$G!"L$FI5-;v$N$_$N>l9g$O\e(B @samp{<%U more>}
-\e$B$G$9!#\e(B
+\e$B$k>l9g$O\e(B @samp{<%U(+%e) more>} \e$B$G!"L$FI5-;v$N$_$N>l9g\e(B
+\e$B$O\e(B @samp{<%U more>} \e$B$G$9!#\e(B
 @item g
 \e$BC;=L%0%k!<%WL>!#Nc$($P!"\e(B@samp{rec.arts.anime} \e$B$O\e(B @samp{r.a.anime} \e$B$KC;=L\e(B
 \e$B$5$l$^$9!#\e(B
@@ -3654,7 +4165,6 @@ Gnus \e$B%P!<%8%g%s!#\e(B
 \e$B%9%3%"%U%!%$%k$K$h$C$FKu>C$5$l$?5-;v$N?t!#\e(B
 @end table
 
-
 @node Summary Highlighting
 @subsection \e$B35N,$N%O%$%i%$%H\e(B
 
@@ -3663,35 +4173,36 @@ Gnus \e$B%P!<%8%g%s!#\e(B
 @item gnus-visual-mark-article-hook
 @vindex gnus-visual-mark-article-hook
 \e$B$3$N%U%C%/$O5-;v$rA*Br$7$?8e$K<B9T$5$l$^$9!#$3$l$O2?$i$+$NJ}K!$G5-;v$r%O\e(B
-\e$B%$%i%$%H$9$k$h$&$K0U?^$5$l$F$$$^$9!#$b$7\e(B @code{gnus-visual} \e$B$,\e(B
-@code{nil} \e$B$G$"$k>l9g$O<B9T$5$l$^$;$s!#\e(B
+\e$B%$%i%$%H$9$k$h$&$K0U?^$5$l$F$$$^$9!#$b\e(B
+\e$B$7\e(B @code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$G$"$k>l9g$O<B9T$5$l$^$;$s!#\e(B
 
 @item gnus-summary-update-hook
 @vindex gnus-summary-update-hook
-\e$B$3$N%U%C%/$O35N,9T$,JQ99$5$l$?$H$-$K8F$P$l$^$9!#$b$7\e(B @code{gnus-visual} \e$B$,\e(B
-@code{nil} \e$B$G$"$k>l9g$O<B9T$5$l$^$;$s!#\e(B
+\e$B$3$N%U%C%/$O35N,9T$,JQ99$5$l$?$H$-$K8F$P$l$^$9!#$b\e(B
+\e$B$7\e(B @code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$G$"$k>l9g$O<B9T$5$l$^$;$s!#\e(B
 
 @item gnus-summary-selected-face
 @vindex gnus-summary-selected-face
-\e$B$3$l$O35N,%P%C%U%!$G$N8=:_$N5-;v$r%O%$%i%$%H$9$k$?$a$K;H$o$l$k%U%'%$%9\e(B
-(face)\e$B!J$b$7$/$O!"$$$/$i$+$N?M!9$,\e(B @dfn{\e$B%U%)%s%H\e(B} (font) \e$B$H8F$V$h\e(B
-\e$B$&$J$b$N!K$G$9!#\e(B
+\e$B$3$l$O35N,%P%C%U%!$G$N8=:_$N5-;v$r%O%$%i%$%H$9$k$?$a$K;H$o$l$k%U%'%$\e(B
+\e$B%9\e(B (face) (\e$B$b$7$/$O!"$$$/$i$+$N?M!9$,\e(B @dfn{\e$B%U%)%s%H\e(B} (font) \e$B$H8F$V$h$&$J\e(B
+\e$B$b$N\e(B) \e$B$G$9!#\e(B
 
 @item gnus-summary-highlight
 @vindex gnus-summary-highlight
-\e$B35N,9T$O$3$NJQ?t$K$7$?$,$C$F%O%$%i%$%H$5$l$^$9!#$3$NJQ?t$OMWAG$,\e(B
-@code{(@var{form} . @var{face})} \e$B$N7A<0$N%j%9%H$G$9!#Nc$($P!"$b$70uIU$-\e(B
-\e$B$N5-;v$r%$%?%j%C%/!"9b$$%9%3%"$N5-;v$r%\!<%k%I$K$7$?$1$l$P!"$3$NJQ?t$r\e(B
+\e$B35N,9T$O$3$NJQ?t$K$7$?$,$C$F%O%$%i%$%H$5$l$^$9!#$3$NJQ?t$OMWAG\e(B
+\e$B$,\e(B @code{(@var{form} . @var{face})} \e$B$N7A<0$N%j%9%H$G$9!#Nc$($P!"$b$70uIU\e(B
+\e$B$-$N5-;v$r%$%?%j%C%/!"9b$$%9%3%"$N5-;v$r%\!<%k%I$K$7$?$1$l$P!"$3$NJQ?t$r\e(B
 \e$B<!$N$h$&$K$G$-$^$9!#\e(B
+
 @lisp
 (((eq mark gnus-ticked-mark) . italic)
  ((> score default) . bold))
 @end lisp
+
 \e$B$4A[A|$N$H$*$j!"$b$7\e(B @var{form} \e$B$,\e(B @code{nil} \e$B$G$J$$CM$rJV$9$H!"\e(B
 @var{face} \e$B$,$=$N9T$KE,MQ$5$l$^$9!#\e(B
 @end table
 
-
 @node Summary Maneuvering
 @section \e$B35N,4V$N0\F0\e(B
 @cindex summary movement
@@ -3704,37 +4215,36 @@ Gnus \e$B%P!<%8%g%s!#\e(B
 @table @kbd
 @item G M-n
 @item M-n
-@kindex M-n \e$B!J35N,!K\e(B
-@kindex G M-n \e$B!J35N,!K\e(B
+@kindex M-n (\e$B35N,\e(B)
+@kindex G M-n (\e$B35N,\e(B)
 @findex gnus-summary-next-unread-subject
 \e$B35N,9T$N<!$NL$FI5-;v$K0\$k\e(B (@code{gnus-summary-next-unread-subject})\e$B!#\e(B
 
 @item G M-p
 @itemx M-p
-@kindex M-p \e$B!J35N,!K\e(B
-@kindex G M-p \e$B!J35N,!K\e(B
+@kindex M-p (\e$B35N,\e(B)
+@kindex G M-p (\e$B35N,\e(B)
 @findex gnus-summary-prev-unread-subject
-\e$B35N,9T$NA0$NL$FI5-;v$K0\$k\e(B
-(@code{gnus-summary-prev-unread-subject})\e$B!#\e(B
+\e$B35N,9T$NA0$NL$FI5-;v$K0\$k\e(B (@code{gnus-summary-prev-unread-subject})\e$B!#\e(B
 
 @item G j
 @item j
-@kindex j \e$B!J35N,!K\e(B
-@kindex G j \e$B!J35N,!K\e(B
+@kindex j (\e$B35N,\e(B)
+@kindex G j (\e$B35N,\e(B)
 @findex gnus-summary-goto-article
 \e$B5-;vHV9f$+\e(B @code{Message-ID} \e$B$r?R$M!"$=$l$+$i$=$N5-;v$K9T$/!#\e(B
 (@code{gnus-summary-goto-article})\e$B!#\e(B
 
 @item G g
-@kindex G g \e$B!J35N,!K\e(B
+@kindex G g (\e$B35N,\e(B)
 @findex gnus-summary-goto-subject
 \e$B5-;vHV9f$+\e(B @code{Message-ID} \e$B$r?R$M!"$=$l$+$i$=$N5-;v$rI=<($9$k$3$HL5$/!"\e(B
 \e$B35N,9T$K9T$/\e(B (@code{gnus-summary-goto-subject})\e$B!#\e(B
 @end table
 
-Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
-\e$B$9$k$H$-$,$"$j$^$9!#$=$N;~$O!"\e(B@kbd{C-n} \e$B$H\e(B @kbd{C-p} \e$B$r;H$C$F!"%0%k!<%W%P%C\e(B
-\e$B%U%!$KLa$k$3$HL5$/<!$KFI$`%0%k!<%W$rC5$9$3$H$,$G$-$^$9!#\e(B
+Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW\e(B
+\e$B5a$9$k$H$-$,$"$j$^$9!#$=$N;~$O!"\e(B@kbd{C-n} \e$B$H\e(B @kbd{C-p} \e$B$r;H$C$F!"%0%k!<\e(B
+\e$B%W%P%C%U%!$KLa$k$3$HL5$/<!$KFI$`%0%k!<%W$rC5$9$3$H$,$G$-$^$9!#\e(B
 
 \e$B35N,$N0\F0$K4XO"$7$?JQ?t\e(B:
 
@@ -3742,31 +4252,31 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @vindex gnus-auto-select-next
 @item gnus-auto-select-next
-\e$B$b$70\F0L?Na$N0l$D!J\e(B@kbd{n} \e$B$N$h$&$J!K$r=P$7!"8=:_$N5-;v$N8e$KL$FI$,L5$1$l\e(B
-\e$B$P!"\e(Bgnus \e$B$O<!$N%0%k!<%W$K0\F0$9$k$3$H$r>)$a$^$9!#$3$NJQ?t$,\e(B @code{t}\e$B$G<!$N\e(B
-\e$B%0%k!<%W$,6u$G$"$k$H!"\e(Bgnus \e$B$O35N,%b!<%I$r=*N;$7$F!"%0%k!<%W%P%C%U%!$KLa$j\e(B
-\e$B$^$9!#$3$NJQ?t$,\e(B @code{t} \e$B$d\e(B @code{nil} \e$B$G$J$$$H!"<!$N%0%k!<%W$K5-;v$,$"$m\e(B
-\e$B$&$,L5$+$m$&$,!"\e(Bgnus \e$B$O$=$l$rA*Br$7$^$9!#FCJL$J>l9g$H$7$F!"$3$NJQ?t$,\e(B
-@code{quietly} \e$B$G$"$k$H!"\e(Bgnus \e$B$O3NG'$r$;$:$K!"<!$N%0%k!<%W$rA*Br$7$^$9!#$3\e(B
-\e$B$NJQ?t$,\e(B @code{almost-quietly} \e$B$G$"$k$H!"%0%k!<%W$N0lHV:G8e$N5-;v$rFI$s$G\e(B
-\e$B$$$?$H$-$K8B$jF1$8$3$H$,5/$3$j$^$9!#:G8e$K!"$b$7$3$NJQ?t$,\e(B
-@code{slightly-quietly} \e$B$G$"$k$H!"L?Na\e(B @kbd{Z n} \e$B$O3NG'$r$;$:$K<!$N%0%k!<\e(B
-\e$B%W$K0\$j$^$9!#\e(B@pxref{Group Levels} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
+\e$B$b$70\F0L?Na$N0l$D\e(B (@kbd{n} \e$B$N$h$&$J\e(B) \e$B$r=P$7!"8=:_$N5-;v$N8e$KL$FI$,L5$1\e(B
+\e$B$l$P!"\e(Bgnus \e$B$O<!$N%0%k!<%W$K0\F0$9$k$3$H$r>)$a$^$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{t} \e$B$G<!$N%0%k!<%W$,6u$G$"$k$H!"\e(Bgnus \e$B$O35N,%b!<%I$r=*N;$7$F!"%0\e(B
+\e$B%k!<%W%P%C%U%!$KLa$j$^$9!#$3$NJQ?t$,\e(B @code{t} \e$B$d\e(B @code{nil} \e$B$G$J$$$H!"<!\e(B
+\e$B$N%0%k!<%W$K5-;v$,$"$m$&$,L5$+$m$&$,!"\e(Bgnus \e$B$O$=$l$rA*Br$7$^$9!#FCJL$J>l\e(B
+\e$B9g$H$7$F!"$3$NJQ?t$,\e(B @code{quietly} \e$B$G$"$k$H!"\e(Bgnus \e$B$O3NG'$r$;$:$K!"<!$N\e(B
+\e$B%0%k!<%W$rA*Br$7$^$9!#$3$NJQ?t$,\e(B @code{almost-quietly} \e$B$G$"$k$H!"%0%k!<\e(B
+\e$B%W$N0lHV:G8e$N5-;v$rFI$s$G$$$?$H$-$K8B$jF1$8$3$H$,5/$3$j$^$9!#:G8e$K!"$b\e(B
+\e$B$7$3$NJQ?t$,\e(B @code{slightly-quietly} \e$B$G$"$k$H!"L?Na\e(B @kbd{Z n} \e$B$O3NG'$r$;\e(B
+\e$B$:$K<!$N%0%k!<%W$K0\$j$^$9!#\e(B@pxref{Group Levels} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 
 @item gnus-auto-select-same
 @vindex gnus-auto-select-same
 @code{nil} \e$B$G$J$$$H!"$9$Y$F$N0\F0L?Na$O8=:_$N5-;v$HF1$8I=Bj$N5-;v$K0\F0\e(B
 \e$B$7$h$&$H$7$^$9!#\e(B(@dfn{\e$BF1$8\e(B} \e$B$O$3$3$G$O\e(B @dfn{\e$BBgBNF1$8\e(B} \e$B$H$$$&0UL#$+$bCN$l\e(B
-\e$B$^$;$s!#>\:Y$O\e(B @code{gnus-summary-gather-subject-limit} \e$B$r8+$F$/$@$5$$\e(B
-(@pxref{Customizing Threading} \e$B$b;2>H$7$F$/$@$5$$\e(B)\e$B!#\e(B) \e$BF1$8I=Bj$N5-;v$,L5\e(B
-\e$B$$$H$-$O:G=i$NL$FI5-;v$K0\F0$7$^$9!#\e(B
+\e$B$^$;$s!#>\:Y$O\e(B @code{gnus-summary-gather-subject-limit} \e$B$r8+$F$/$@$5\e(B
+\e$B$$\e(B (@pxref{Customizing Threading} \e$B$b;2>H$7$F$/$@$5$$\e(B)\e$B!#\e(B) \e$BF1$8I=Bj$N5-;v\e(B
+\e$B$,L5$$$H$-$O:G=i$NL$FI5-;v$K0\F0$7$^$9!#\e(B
 
 \e$B$3$NJQ?t$O!"%9%l%C%II=<($r9T$C$F$$$k$H$-$O$"$^$jLr$KN)$?$J$$$G$7$g$&!#\e(B
 
 @item gnus-summary-check-current
 @vindex gnus-summary-check-current
-@code{nil} \e$B$G$J$$$H!"$9$Y$F$N!XL$FI!Y0\F0L?Na$O!"<!!J$b$7$/$OA0!K$N5-;v$K\e(B
-\e$B0\F0$7$^$;$s!#$=$NBe$o$j$K!"$=$l$i$O8=:_$N5-;v$rA*$S$^$9!#\e(B
+@code{nil} \e$B$G$J$$$H!"$9$Y$F$N!XL$FI!Y0\F0L?Na$O!"<!\e(B (\e$B$b$7$/$OA0\e(B) \e$B$N5-;v\e(B
+\e$B$K0\F0$7$^$;$s!#$=$NBe$o$j$K!"$=$l$i$O8=:_$N5-;v$rA*$S$^$9!#\e(B
 
 @item gnus-auto-center-summary
 @vindex gnus-auto-center-summary
@@ -3779,101 +4289,99 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @end table
 
-
 @node Choosing Articles
 @section \e$B5-;v$NA*Br\e(B
 @cindex selecting articles
 
 @menu
-* Choosing Commands::        \e$B5-;v$rA*Br$9$k$?$a$NL?Na!#\e(B
-* Choosing Variables::       \e$B$3$l$i$NL?Na$K1F6A$r5Z$\$9JQ?t!#\e(B
+* Choosing Commands::  \e$B5-;v$rA*Br$9$k$?$a$NL?Na\e(B
+* Choosing Variables:: \e$B$3$l$i$NL?Na$K1F6A$r5Z$\$9JQ?t\e(B
 @end menu
 
-
 @node Choosing Commands
 @subsection \e$BL?Na$NA*Br\e(B
 
-\e$B0J2<$N0\F0%3%^%s%I$O$I$l$b?tCM@\F,0z?t$r<u$1IU$1$:!"5-;v$rA*Br$7!"I=<($7$^\e(B
-\e$B$9!#\e(B
+\e$B0J2<$N0\F0%3%^%s%I$O$I$l$b?tCM@\F,0z?t$r<u$1IU$1$:!"5-;v$rA*Br$7!"I=<($7\e(B
+\e$B$^$9!#\e(B
 
 @table @kbd
 @item SPACE
-@kindex SPACE \e$B!J35N,!K\e(B
+@kindex SPACE (\e$B35N,\e(B)
 @findex gnus-summary-next-page
-\e$B8=:_$N5-;v$+!"$=$l$,4{$KFI$^$l$F$$$k>l9g$O<!$NL$FI5-;v$rA*Br$7$^$9\e(B
-(@code{gnus-summary-next-page})\e$B!#\e(B
+\e$B8=:_$N5-;v$+!"$=$l$,4{$KFI$^$l$F$$$k>l9g$O<!$NL$FI5-;v$rA*Br$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-next-page})\e$B!#\e(B
 
 @item G n
 @itemx n
-@kindex n\e$B!J35N,!K\e(B
-@kindex G n\e$B!J35N,!K\e(B
+@kindex n (\e$B35N,\e(B)
+@kindex G n (\e$B35N,\e(B)
 @findex gnus-summary-next-unread-article
 @c @icon{gnus-summary-next-unread}
 \e$B<!$NL$FI5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-next-unread-article})\e$B!#\e(B
 
 @item G p
 @itemx p
-@kindex p\e$B!J35N,!K\e(B
+@kindex p (\e$B35N,\e(B)
 @findex gnus-summary-prev-unread-article
 @c @icon{gnus-summary-prev-unread}
 \e$BA0$NL$FI5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-prev-unread-article})\e$B!#\e(B
 
 @item G N
 @itemx N
-@kindex N \e$B!J35N,!K\e(B
-@kindex G N \e$B!J35N,!K\e(B
+@kindex N (\e$B35N,\e(B)
+@kindex G N (\e$B35N,\e(B)
 @findex gnus-summary-next-article
 \e$B<!$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-next-article})\e$B!#\e(B
 
 @item G P
 @itemx P
-@kindex P \e$B!J35N,!K\e(B
-@kindex G P \e$B!J35N,!K\e(B
+@kindex P (\e$B35N,\e(B)
+@kindex G P (\e$B35N,\e(B)
 @findex gnus-summary-prev-article
 \e$BA0$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-prev-article})\e$B!#\e(B
 
 @item G C-n
-@kindex G C-n\e$B!J35N,!K\e(B
+@kindex G C-n (\e$B35N,\e(B)
 @findex gnus-summary-next-same-subject
 \e$BF1$8I=Bj$N<!$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-next-same-subject})\e$B!#\e(B
 
 @item G C-p
-@kindex G C-p\e$B!J35N,!K\e(B
+@kindex G C-p (\e$B35N,\e(B)
 @findex gnus-summary-prev-same-subject
 \e$BF1$8I=Bj$NA0$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-prev-same-subject})\e$B!#\e(B
 
 @item G f
 @itemx .
-@kindex G f \e$B!J35N,!K\e(B
-@kindex . \e$B!J35N,!K\e(B
+@kindex G f (\e$B35N,\e(B)
+@kindex . (\e$B35N,\e(B)
 @findex gnus-summary-first-unread-article
 \e$B:G=i$NL$FI5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-first-unread-article})\e$B!#\e(B
 
 @item G b
 @item ,
-@kindex G b \e$B!J35N,!K\e(B
-@kindex , \e$B!J35N,!K\e(B
+@kindex G b (\e$B35N,\e(B)
+@kindex , (\e$B35N,\e(B)
 @findex gnus-summary-best-unread-article
 \e$B:G9b%9%3%"$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-best-unread-article})\e$B!#\e(B
 
 @item G l
 @itemx l
-@kindex l \e$B!J35N,!K\e(B
-@kindex G l \e$B!J35N,!K\e(B
+@kindex l (\e$B35N,\e(B)
+@kindex G l (\e$B35N,\e(B)
 @findex gnus-summary-goto-last-article
 \e$BD>A0$N5-;v$K0\F0$7$^$9\e(B (@code{gnus-summary-goto-last-article})\e$B!#\e(B
 
 @item G o
-@kindex G o\e$B!J35N,!K\e(B
+@kindex G o (\e$B35N,\e(B)
 @findex gnus-summary-pop-article
 \e$B35N,$NMzNr\e(B (history) \e$B$+$i:G8e$N5-;v$r0l$D<h$j=P$7$FA*Br$7$^$9!#\e(B
-(@code{gnus-summary-pop-article})\e$B!#$3$NL?Na$,>e$NL?Na$H0c$&$N$O!"\e(B@kbd{l}
-\e$B$,:G=*\e(B2\e$B$D$N5-;v$N4V$r0\F0$9$k$N$KBP$7$F!"$3$l$O9%$-$J$@$1A0$N5-;v$rMzNr$+\e(B
-\e$B$iA*$S=P$9$3$H$,$G$-$kE@$G$9!#2?$i$+$N$3$l$K4X78$7$?$3$H$O!J$b$7$3$l$i$NL?\e(B
-\e$BNa$r$?$/$5$s;H$&$N$G$"$l$P!K!"\e(B@pxref{Article Backlog} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+(@code{gnus-summary-pop-article})\e$B!#$3$NL?Na$,>e$NL?Na$H0c$&$N$O!"\e(B
+@kbd{l} \e$B$,:G=*Fs$D$N5-;v$N4V$r0\F0$9$k$N$KBP$7$F!"$3$l$O9%$-$J$@$1A0$N5-\e(B
+\e$B;v$rMzNr$+$iA*$S=P$9$3$H$,$G$-$kE@$G$9!#2?$i$+$N$3$l$K4X78$7$?$3$H\e(B
+\e$B$O\e(B (\e$B$b$7$3$l$i$NL?Na$r$?$/$5$s;H$&$N$G$"$l$P\e(B)\e$B!"\e(B
+@pxref{Article Backlog} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 @end table
 
-
 @node Choosing Variables
 @subsection \e$BA*$V$?$a$NJQ?t\e(B
 
@@ -3883,9 +4391,9 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 @item gnus-auto-extended-newsgroup
 @vindex gnus-auto-extend-newsgroup
 \e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"$9$Y$F$N0\F0L?Na$O!"$b$7$=$N5-;v$,35N,%P%C\e(B
-\e$B%U%!$KI=<($5$l$F$$$J$$>l9g$G$b!"A0!J$b$7$/$O<!!K$N5-;v$K0\F0$7$h$&$H$7$^$9!#\e(B
-\e$B$=$NL?Na$N8e$G!"\e(Bgnus \e$B$O%5!<%P!<$+$i5-;v$r<hF@$7$F!"5-;v%P%C%U%!$KI=<($7$^\e(B
-\e$B$9!#\e(B
+\e$B%U%!$KI=<($5$l$F$$$J$$>l9g$G$b!"A0\e(B (\e$B$b$7$/$O<!\e(B) \e$B$N5-;v$K0\F0$7$h$&$H$7$^\e(B
+\e$B$9!#$=$NL?Na$N8e$G!"\e(Bgnus \e$B$O%5!<%P!<$+$i5-;v$r<hF@$7$F!"5-;v%P%C%U%!$KI=\e(B
+\e$B<($7$^$9!#\e(B
 
 @item gnus-select-article-hook
 @vindex gnus-select-article-hook
@@ -3898,17 +4406,17 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 @findex gnus-summary-mark-read-and-unread-as-read
 @findex gnus-unread-mark
 \e$B$3$N%U%C%/$O5-;v$,A*Br$5$l$?$H$-$K>o$K8F$P$l$^$9!#$=$l$O5-;v$K4{FI$N0u$r\e(B
-\e$BIU$1$k$?$a$K$"$j$^$9!#=i4|CM$O\e(B
-@code{gnus-summary-mark-read-and-unread-as-read} \e$B$G!"$[$H$s$I$9$Y$F$NFI\e(B
-\e$B$s$@5-;v$N0u$r\e(B @code{gnus-read-mark} \e$B$KJQ99$7$^$9!#$3$N4X?t$K1F6A$5$l$J\e(B
-\e$B$$5-;v$O!"2D;k!"J]N1!"4|8B@Z$l:o=|2DG=5-;v$@$1$G$9!#$b$7!"L$FI$K4{FI$N0u\e(B
-\e$B$rIU$1$?$$$@$1$G$"$l$P!"Be$o$j$K\e(B @code{gnus-summary-mark-unread-as-read}
-\e$B$r;H$&$3$H$,$G$-$^$9!#$=$l$O!"\e(B@code{gnus-low-score-mark} \e$B$d\e(B
-@code{gnus-del-mark}\e$B!J$J$I$J$I!K$N0u$r$=$N$^$^;D$7$^$9!#\e(B
+\e$BIU$1$k$?$a$K$"$j$^$9!#=i4|CM\e(B
+\e$B$O\e(B @code{gnus-summary-mark-read-and-unread-as-read} \e$B$G!"$[$H$s$I$9$Y$F$N\e(B
+\e$BFI$s$@5-;v$N0u$r\e(B @code{gnus-read-mark} \e$B$KJQ99$7$^$9!#$3$N4X?t$K1F6A$5$l\e(B
+\e$B$J$$5-;v$O!"2D;k!"J]N1!"4|8B@Z$l:o=|2DG=5-;v$@$1$G$9!#$b$7!"L$FI$K4{FI$N\e(B
+\e$B0u$rIU$1$?$$$@$1$G$"$l$P!"Be$o$j\e(B
+\e$B$K\e(B @code{gnus-summary-mark-unread-as-read} \e$B$r;H$&$3$H$,$G$-$^$9!#$=$l$O!"\e(B
+@code{gnus-low-score-mark} \e$B$d\e(B @code{gnus-del-mark} (\e$B$J$I$J$I\e(B) \e$B$N0u$r$=$N\e(B
+\e$B$^$^;D$7$^$9!#\e(B
 
 @end table
 
-
 @node Paging the Article
 @section \e$B5-;v$N%9%/%m!<%k\e(B
 @cindex article scrolling
@@ -3916,18 +4424,18 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 @table @kbd
 
 @item SPACE
-@kindex SPACE \e$B!J35N,!K\e(B
+@kindex SPACE (\e$B35N,\e(B)
 @findex gnus-summary-next-page
 @kbd{SPACE} \e$B$O5-;v$r0l%Z!<%8@h$K%9%/%m!<%k$7$^$9!#5-;v$N:G8e$K$$$k>l9g$O\e(B
 \e$B<!$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-next-page})\e$B!#\e(B
 
 @item DEL
-@kindex DEL \e$B!J35N,!K\e(B
+@kindex DEL (\e$B35N,\e(B)
 @findex gnus-summary-prev-page
 \e$B8=:_$N5-;v$r0l%Z!<%8A0$K%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-prev-page})\e$B!#\e(B
 
 @item RET
-@kindex RET \e$B!J35N,!K\e(B
+@kindex RET (\e$B35N,\e(B)
 @findex gnus-summary-scroll-up
 \e$B8=:_$N5-;v$r0l9T@h$K%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-scroll-up})\e$B!#\e(B
 
@@ -3938,55 +4446,65 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @item A g
 @itemx g
-@kindex A g \e$B!J35N,!K\e(B
-@kindex g \e$B!J35N,!K\e(B
+@kindex A g (\e$B35N,\e(B)
+@kindex g (\e$B35N,\e(B)
 @findex gnus-summary-show-article
-\e$B8=:_$N5-;v$r!J:F!K<hF@$7$^$9!#$b$7@\F,0z?t$,M?$($i$l$k$H!"8=:_$N5-;v$r<hF@\e(B
-\e$B$7$^$9$,!"5-;v$r07$&4X?t$O<B9T$7$^$;$s!#$3$l$O!"%5!<%P!<$+$i$-$?$^$^$N!"\e(B
+@vindex gnus-summary-show-article-charset-alist
+\e$B8=:_$N5-;v$r\e(B (\e$B:F\e(B) \e$B<hF@$7$^$9!#$b$7@\F,0z?t$,M?$($i$l$k$H!"8=:_$N5-;v$r<h\e(B
+\e$BF@$7$^$9$,!"5-;v$r07$&4X?t$O<B9T$7$^$;$s!#$3$l$O!"%5!<%P!<$+$i$-$?$^$^$N!"\e(B
 \e$B!X@8$N!Y5-;v$rM?$($^$9!#\e(B
 
+\e$B@\F,0z?t$rM?$($k$H!"<jF0$GJ8;z=89g$NA`:n$r9T$&$3$H$,$G$-$^$9!#\e(B
+@kbd{C-u 0 g cn-gb-2312 RET} \e$B$K$h$j!"%a%C%;!<%8$O$"$?$+\e(B
+\e$B$b\e(B @code{cn-gb-2312} \e$BJ8;z=89g$GId9f2=$5$l$?$+$N$h$&$KI|9f2=$5$l$^$9!#$3\e(B
+\e$B$l$O!"0J2<$N$h$&$J5-=R$H$H$b$K\e(B @kbd{C-u 1 g} \e$B$r9T$&$N$HF1$8$G$9!#\e(B
+
+@lisp
+(setq gnus-summary-show-article-charset-alist
+      '((1 . cn-gb-2312)
+        (2 . big5)))
+@end lisp
+
 @item A <
 @itemx <
-@kindex < \e$B!J35N,!K\e(B
-@kindex A < \e$B!J35N,!K\e(B
+@kindex < (\e$B35N,\e(B)
+@kindex A < (\e$B35N,\e(B)
 @findex gnus-summary-beginning-of-article
 \e$B5-;v$N:G=i$^$G%9%/%m!<%k$7$^$9!#\e(B
 (@code{gnus-summary-beginning-of-article})\e$B!#\e(B
 
 @item A >
 @itemx >
-@kindex > \e$B!J35N,!K\e(B
-@kindex A > \e$B!J35N,!K\e(B
+@kindex > (\e$B35N,\e(B)
+@kindex A > (\e$B35N,\e(B)
 @findex gnus-summary-end-of-article
 \e$B5-;v$N:G8e$^$G%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-end-of-article})\e$B!#\e(B
 
 @item A s
 @itemx s
-@kindex A s \e$B!J35N,!K\e(B
-@kindex s \e$B!J35N,!K\e(B
+@kindex A s (\e$B35N,\e(B)
+@kindex s (\e$B35N,\e(B)
 @findex gnus-summary-isearch-article
-\e$B5-;v%P%C%U%!$G%$%s%/%j%a%s%?%k%5!<%A\e(B (isearch) \e$B$r9T$$$^$9\e(B
-(@code{gnus-summary-isearch-article})\e$B!#\e(B
+\e$B5-;v%P%C%U%!$G%$%s%/%j%a%s%?%k%5!<%A\e(B (isearch) \e$B$r9T$$$^\e(B
+\e$B$9\e(B (@code{gnus-summary-isearch-article})\e$B!#\e(B
 
 @item h
-@kindex h \e$B!J35N,!K\e(B
+@kindex h (\e$B35N,\e(B)
 @findex gnus-summary-select-article-buffer
 \e$B5-;v%P%C%U%!$rA*Br$7$^$9\e(B (@code{gnus-summary-select-article-buffer})\e$B!#\e(B
 
 @end table
 
-
 @node Reply Followup and Post
 @section \e$BJVEz!"%U%)%m!<%"%C%W!"Ej9F\e(B
 
 @menu
-* Summary Mail Commands::            \e$B%a!<%k$rAw$k!#\e(B
-* Summary Post Commands::            \e$B%K%e!<%9$rAw$k!#\e(B
-* Summary Message Commands::    Other Message-related commands.
-* Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
+* Summary Mail Commands::     \e$B%a!<%k$rAw$k\e(B
+* Summary Post Commands::     \e$B%K%e!<%9$rAw$k\e(B
+* Summary Message Commands::  \e$BB>$N%a%C%;!<%84XO"$NL?Na\e(B
+* Canceling and Superseding:: \e$B!X$"$!!"$"$s$J$U$&$K8@$&$s$8$c$J$+$C$?!Y\e(B
 @end menu
 
-
 @node Summary Mail Commands
 @subsection \e$B35N,$G$N%a!<%k$NL?Na\e(B
 @cindex mail
@@ -3998,8 +4516,8 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @item S r
 @item r
-@kindex S r \e$B!J35N,!K\e(B
-@kindex r \e$B!J35N,!K\e(B
+@kindex S r (\e$B35N,\e(B)
+@kindex r (\e$B35N,\e(B)
 @findex gnus-summary-reply
 @c @icon{gnus-summary-mail-reply}
 @c @icon{gnus-summary-reply}
@@ -4007,31 +4525,33 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @item S R
 @itemx R
-@kindex R \e$B!J35N,!K\e(B
-@kindex S R \e$B!J35N,!K\e(B
+@kindex R (\e$B35N,\e(B)
+@kindex S R (\e$B35N,\e(B)
 @findex gnus-summary-reply-with-original
 @c @icon{gnus-summary-reply-with-original}
-\e$B8=:_$N5-;v$r=q$$$??M$K!"K\5-;v$r4^$s$@JVEz$N%a!<%k$r=P$7$^$9\e(B
-(@code{gnus-summary-reply-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,\e(B
-\e$B47$r;H$$$^$9!#\e(B
+\e$B8=:_$N5-;v$r=q$$$??M$K!"K\5-;v$r4^$s$@JVEz$N%a!<%k$r=P$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-reply-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z\e(B
+\e$B?t$N=,47$r;H$$$^$9!#\e(B
 
 @item S w
-@kindex S w \e$B!J35N,!K\e(B
+@kindex S w (\e$B35N,\e(B)
 @findex gnus-summary-wide-reply
-\e$B8=:_$N5-;v$r=q$$$??M$KBP$7$F!"9-$$JVEz\e(B (wide reply) \e$B$r$7$^$9\e(B
-(@code{gnus-summary-wide-reply})\e$B!#\e(B@dfn{\e$B9-$$JVEz\e(B} \e$B$H$O%X%C%@!<$N\e(B
-@code{To}, @code{From},\e$B!J$b$7$/$O\e(B @code{Reply-to}) \e$B$H\e(B @code{Cc}\e$B!K$N$9$Y$F\e(B
-\e$B$N?M$KJVEz$r$9$k$3$H$G$9!#\e(B
+\e$B8=:_$N5-;v$r=q$$$??M$KBP$7$F!"9-$$JVEz\e(B (wide reply) \e$B$r$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-wide-reply})\e$B!#\e(B@dfn{\e$B9-$$JVEz\e(B} \e$B$H$O%X%C%@!<\e(B
+\e$B$N\e(B @code{To}, @code{From}, (\e$B$b$7$/$O\e(B @code{Reply-to}) \e$B$H\e(B @code{Cc}) \e$B$N$9\e(B
+\e$B$Y$F$N?M$KJVEz$r$9$k$3$H$G$9!#\e(B
 
 @item S W
-@kindex S W \e$B!J35N,!K\e(B
+@kindex S W (\e$B35N,\e(B)
 @findex gnus-summary-wide-reply-with-original
-\e$B8=:_$N5-;v$KK\5-;v$r4^$s$@9-$$JVEz$N%a!<%k$rAw$j$^$9\e(B
-(@code{gnus-summary-wide-reply-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N\e(B
-\e$B=,47$r;H$$$^$9!#\e(B
+\e$B8=:_$N5-;v$KK\5-;v$r4^$s$@9-$$JVEz$N%a!<%k$rAw$j$^\e(B
+\e$B$9\e(B (@code{gnus-summary-wide-reply-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\\e(B
+\e$BF,0z?t$N=,47$r;H$$$^$9!#\e(B
 
 @item S o m
-@kindex S o m \e$B!J35N,!K\e(B
+@itemx C-c C-f
+@kindex S o m (\e$B35N,\e(B)
+@kindex C-c C-f (\e$B35N,\e(B)
 @findex gnus-summary-mail-forward
 @c @icon{gnus-summary-mail-forward}
 \e$BC/$+B>$N?M$K8=:_$N5-;v$rE>Aw$7$^$9\e(B (@code{gnus-summary-mail-forward})\e$B!#\e(B
@@ -4039,163 +4559,162 @@ Gnus \e$B$,<!$N%0%k!<%W$K0\F0$9$k$3$H$r3NG'$r$9$k$?$a$K!"%-!<$r2!$9$3$H$rMW5a\e(B
 
 @item S m
 @itemx m
-@kindex m \e$B!J35N,!K\e(B
-@kindex S m \e$B!J35N,!K\e(B
+@kindex m (\e$B35N,\e(B)
+@kindex S m (\e$B35N,\e(B)
 @findex gnus-summary-mail-other-window
 @c @icon{gnus-summary-mail-originate}
 \e$BC/$+B>$N?M$K%a!<%k$rAw$j$^$9\e(B (@code{gnus-summary-mail-other-window})\e$B!#\e(B
 
 @item S D b
-@kindex S D b \e$B!J35N,!K\e(B
+@kindex S D b (\e$B35N,\e(B)
 @findex gnus-summary-resend-bounced-mail
 @cindex bouncing mail
-\e$B%a!<%k$rAw$C$?$N$K!"2?$i$+$NM}M3!J%"%I%l%9$N4V0c$$!"E>Aw$NITD4!K$GLa$C$F$-\e(B
-\e$B$?$H$-$K!"$3$NL?Na$r;H$C$FLa$C$F$-$?%a!<%k$r$b$&0l2sAw$k$3$H$,$G$-$^$9\e(B
-(@code{gnus-summary-resend-bonced-mail})\e$B!#$b$&0lEY%a!<%k$rAw$kA0$K%X%C%@!<\e(B
-\e$B$rJT=8$G$-$k$h$&$K!"%a!<%k%P%C%U%!$K$=$N%a!<%k$,8=$l$k$G$7$g$&!#$3$NL?Na$K\e(B
-\e$B@\F,0z?t$rM?$($F!"La$C$F$-$?%a!<%k$,C/$+$X$NJVEz$G$"$C$?>l9g!"\e(Bgnus \e$B$O$=$N\e(B
-\e$B%a!<%k$r<hF@$7$F!"$=$l$N%X%C%@!<$N@:L)D4::$,$G$-$k$h$&$K2hLL$KI=<($7$^$9!#\e(B
-\e$B$^!"$3$l$O$H$F$b$h$/<:GT$7$^$9$1$I!#\e(B
+\e$B%a!<%k$rAw$C$?$N$K!"2?$i$+$NM}M3\e(B (\e$B%"%I%l%9$N4V0c$$!"E>Aw$NITD4\e(B) \e$B$GLa$C$F\e(B
+\e$B$-$?$H$-$K!"$3$NL?Na$r;H$C$FLa$C$F$-$?%a!<%k$r$b$&0l2sAw$k$3$H$,$G$-$^\e(B
+\e$B$9\e(B (@code{gnus-summary-resend-bonced-mail})\e$B!#$b$&0lEY%a!<%k$rAw$kA0$K%X%C\e(B
+\e$B%@!<$rJT=8$G$-$k$h$&$K!"%a!<%k%P%C%U%!$K$=$N%a!<%k$,8=$l$k$G$7$g$&!#$3$N\e(B
+\e$BL?Na$K@\F,0z?t$rM?$($F!"La$C$F$-$?%a!<%k$,C/$+$X$NJVEz$G$"$C$?>l9g!"\e(B
+gnus \e$B$O$=$N%a!<%k$r<hF@$7$F!"$=$l$N%X%C%@!<$N@:L)D4::$,$G$-$k$h$&$K2hLL\e(B
+\e$B$KI=<($7$^$9!#$^!"$3$l$O$H$F$b$h$/<:GT$7$^$9$1$I!#\e(B
 
 @item S D r
-@kindex S D r \e$B!J35N,!K\e(B
+@kindex S D r (\e$B35N,\e(B)
 @findex gnus-summary-resend-message
-\e$B>e$NL?Na$H:.F1$7$J$$$h$&$K!"\e(B@code{gnus-summary-resend-message} \e$B$O8=:_$N%a%C\e(B
-\e$B%;!<%8$rAw$k@h$N%"%I%l%9$NF~NO$rB%$7!"$=$l$+$i$=$N>l=j$K%a!<%k$rAw$j$^$9!#\e(B
-\e$B%a%C%;!<%8$N%X%C%@!<$OJQ99$5$l$^$;$s!=!=$7$+$7!"\e(B@code{Resent-To},
-@code{Resent-From} \e$BEy$N%X%C%@!<$,IU$12C$($i$l$^$9!#$3$l$O!"!J$*$=$i$/!K$"\e(B
-\e$B$J$?<+?H$r\e(B @code{To} \e$BMs$K=q$$$?K\?M$K$b%a!<%k$rAw$C$F$7$^$&$H$$$&$3$H$G$9!#\e(B
-\e$B$3$l$O:.Mp$r>7$/$G$7$g$&!#$G$9$+$i!"$b$A$m$s!"K\Ev$K\e(B \e$B<Y0-\e(B \e$B$J5$J,$N$H$-$K$@\e(B
-\e$B$1$3$l$r;H$&$G$7$g$&!#\e(B
+\e$B>e$NL?Na$H:.F1$7$J$$$h$&$K!"\e(B@code{gnus-summary-resend-message} \e$B$O8=:_$N\e(B
+\e$B%a%C%;!<%8$rAw$k@h$N%"%I%l%9$NF~NO$rB%$7!"$=$l$+$i$=$N>l=j$K%a!<%k$rAw$j\e(B
+\e$B$^$9!#%a%C%;!<%8$N%X%C%@!<$OJQ99$5$l$^$;$s!=!=$7$+$7!"\e(B
+@code{Resent-To}, @code{Resent-From} \e$BEy$N%X%C%@!<$,IU$12C$($i$l$^$9!#$3\e(B
+\e$B$l$O!"\e(B(\e$B$*$=$i$/\e(B) \e$B$"$J$?<+?H$r\e(B @code{To} \e$BMs$K=q$$$?K\?M$K$b%a!<%k$rAw$C$F\e(B
+\e$B$7$^$&$H$$$&$3$H$G$9!#$3$l$O:.Mp$r>7$/$G$7$g$&!#$G$9$+$i!"$b$A$m$s!"K\Ev\e(B
+\e$B$K\e(B \e$B<Y0-\e(B \e$B$J5$J,$N$H$-$K$@$1$3$l$r;H$&$G$7$g$&!#\e(B
 
 \e$B$3$NL?Na$O<g$K!"$"$J$?$,$$$/$D$+$N%a!<%k%"%+%&%s%H\e(B (account) \e$B$r;}$C$F$$\e(B
 \e$B$F!"<+J,<+?H$N0c$C$?%"%+%&%s%H$K%a!<%k$rE>Aw$7$?$$$H$-$KMQ$$$i$l$^$9!#\e(B
-(\e$B$b$7$"$J$?$,!"\e(B@code{\e$B%k!<%H\e(B} (root) \e$B$G$"$j!"\e(B@code{\e$B%]%9%H%^%9%?!<\e(B}
-(postmaster) \e$B$G$b$"$j!"\e(B@code{\e$B%k!<%H\e(B} \e$B$K\e(B @code{\e$B%]%9%H%^%9%?!<\e(B} \e$B$X$N%a!<%k\e(B
-\e$B$r<u$1<h$C$?>l9g$O!"$=$l$r\e(B @code{\e$B%]%9%H%^%9%?!<\e(B} \e$B$K$b:FAw$7$?$$$H;W$&$G\e(B
-\e$B$7$g$&!#\e(BOrdnung muß sein!)
+(\e$B$b$7$"$J$?$,!"\e(B@code{\e$B%k!<%H\e(B} (root) \e$B$G$"$j!"\e(B
+@code{\e$B%]%9%H%^%9%?!<\e(B} (postmaster) \e$B$G$b$"$j!"\e(B@code{\e$B%k!<%H\e(B} \e$B$K\e(B @code{\e$B%]%9\e(B
+\e$B%H%^%9%?!<\e(B} \e$B$X$N%a!<%k$r<u$1<h$C$?>l9g$O!"$=$l\e(B
+\e$B$r\e(B @code{\e$B%]%9%H%^%9%?!<\e(B} \e$B$K$b:FAw$7$?$$$H;W$&$G$7$g\e(B
+\e$B$&!#\e(BOrdnung mu\e.A\eN_ sein!)
 
 \e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item S O m
-@kindex S O m \e$B!J35N,!K\e(B
-@findex gnus-uu-digest-mail-forward
-\e$B8=:_$N0lO"$N5-;v\e(B (@pxref{Decoding Articles}) \e$B$NMWLs$r:n$j!"%a!<%k$G$=$N7k\e(B
-\e$B2L$rAw$j$^$9\e(B (@code{gnus-uu-digest-mail-forward})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,\e(B
-\e$B0z?t$N=,47$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+@kindex S O m (\e$B35N,\e(B)
+@findex gnus-summary-digest-mail-forward
+\e$B8=:_$N0lO"$N5-;v\e(B (@pxref{Decoding Articles}) \e$B$NMWLs$r:n$j!"%a!<%k$G$=$N\e(B
+\e$B7k2L$rAw$j$^$9\e(B (@code{gnus-summary-digest-mail-forward})\e$B!#$3$NL?Na$O%W%m\e(B
+\e$B%;%9\e(B/\e$B@\F,0z?t$N=,47$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item S M-c
-@kindex S M-c \e$B!J35N,!K\e(B
+@kindex S M-c (\e$B35N,\e(B)
 @findex gnus-summary-mail-crosspost-complaint
 @cindex crossposting
 @cindex excessive crossposting
-\e$B8=:_$N5-;v$N=q$-<j$K!"2a>j%/%m%9%]%9%H$X$N6l>p$N%a!<%k$rAw$j$^$9\e(B
-(@code{gnus-summary-mail-crosspost-complaint})\e$B!#\e(B
+\e$B8=:_$N5-;v$N=q$-<j$K!"2a>j%/%m%9%]%9%H$X$N6l>p$N%a!<%k$rAw$j$^\e(B
+\e$B$9\e(B (@code{gnus-summary-mail-crosspost-complaint})\e$B!#\e(B
 
 @findex gnus-crosspost-complaint
 \e$B$3$NL?Na$O!"8=:_\e(B Usenet \e$B$K2#9T$7$F$$$k!"%/%m%9%]%9%H$N@$3&E*N.9T$KBP$7$F\e(B
-\e$BH?7b$r9T$&<jCJ$H$7$FDs6!$5$l$F$$$^$9!#$3$l$OJQ?t\e(B
-@code{gnus-crosspost-complaint} \e$B$r=xJ8$K$7$F!"JVEz$r:n@.$7$^$9!#$3$NL?Na\e(B
-\e$B$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B (@pxref{Process/Prefix}) \e$B$K=>$$!"$=$l$>$l$N%a!<\e(B
-\e$B%k$rAw$kA0$KAw?.$9$k$+$I$&$+$N3NG'$r$7$^$9!#\e(B
+\e$BH?7b$r9T$&<jCJ$H$7$FDs6!$5$l$F$$$^$9!#$3$l$OJQ\e(B
+\e$B?t\e(B @code{gnus-crosspost-complaint} \e$B$r=xJ8$K$7$F!"JVEz$r:n@.$7$^$9!#$3$N\e(B
+\e$BL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B (@pxref{Process/Prefix}) \e$B$K=>$$!"$=$l$>$l\e(B
+\e$B$N%a!<%k$rAw$kA0$KAw?.$9$k$+$I$&$+$N3NG'$r$7$^$9!#\e(B
 
 @end table
 
 \e$B$^$?\e(B @pxref{(message)Header Commands} \e$B$K$5$i$J$k>pJs$,$"$j$^$9!#\e(B
 
-
 @node Summary Post Commands
 @subsection \e$B35N,$NEj9FL?Na\e(B
 @cindex post
 @cindex composing news
 
-\e$B%K%e!<%9$N5-;v$rEj9F$9$k$?$a$NL?Na!'\e(B
+\e$B%K%e!<%9$N5-;v$rEj9F$9$k$?$a$NL?Na\e(B:
 
 @table @kbd
 @item S p
 @itemx a
-@kindex a \e$B!J35N,!K\e(B
-@kindex S p \e$B!J35N,!K\e(B
+@kindex a (\e$B35N,\e(B)
+@kindex S p (\e$B35N,\e(B)
 @findex gnus-summary-post-news
 @c @icon{gnus-summary-post-news}
 \e$B8=:_$N%0%k!<%W$K5-;v$rEj9F$7$^$9\e(B (@code{gnus-summary-post-news})\e$B!#\e(B
 
 @item S f
 @itemx f
-@kindex f \e$B!J35N,!K\e(B
-@kindex S f \e$B!J35N,!K\e(B
+@kindex f (\e$B35N,\e(B)
+@kindex S f (\e$B35N,\e(B)
 @findex gnus-summary-followup
 @c @icon{gnus-summary-followup}
 \e$B8=:_$N5-;v$N%U%)%m!<%"%C%W$rEj9F$7$^$9\e(B (@code{gnus-summary-followup})\e$B!#\e(B
 
 @item S F
 @itemx F
-@kindex S F \e$B!J35N,!K\e(B
-@kindex F \e$B!J35N,!K\e(B
+@kindex S F (\e$B35N,\e(B)
+@kindex F (\e$B35N,\e(B)
 @c @icon{gnus-summary-followup-with-original}
 @findex gnus-summary-followup-with-original
-\e$BK\5-;v$r<h$j9~$s$G!"8=:_$N5-;v$K%U%)%m!<%"%C%W$r$7$^$9\e(B
-(@code{ggnus-summary-followup-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t\e(B
-\e$B$N=,47$rMQ$$$^$9!#\e(B
+\e$BK\5-;v$r<h$j9~$s$G!"8=:_$N5-;v$K%U%)%m!<%"%C%W$r$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-followup-with-original})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,\e(B
+\e$B0z?t$N=,47$rMQ$$$^$9!#\e(B
 
 @item S n
-@kindex S n \e$B!J35N,!K\e(B
+@kindex S n (\e$B35N,\e(B)
 @findex gnus-summary-followup-to-mail
-\e$B%a!<%k$N%a%C%;!<%8$r<u$1<h$C$F$$$?$H$7$F$b!"8=:_$N5-;v\e(B
-\e$B$N%U%)%m!<%"%C%W$r%K%e!<%9$KEj9F$7$^$9\e(B
-(@code{gnus-summary-followup-to-mail})\e$B!#\e(B
-\e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$rMQ$$$^$9!#\e(B
+\e$B%a!<%k$N%a%C%;!<%8$r<u$1<h$C$F$$$?$H$7$F$b!"8=:_$N5-;v$N%U%)%m!<%"%C%W$r\e(B
+\e$B%K%e!<%9$KEj9F$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-followup-to-mail})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N\e(B
+\e$B=,47$rMQ$$$^$9!#\e(B
 
 @item S N
 @kindex S N (\e$B35N,\e(B)
 @findex gnus-summary-followup-to-mail-with-original
 \e$B%a!<%k$N%a%C%;!<%8$r<u$1<h$C$F$$$?$H$7$F$b!"K\5-;v$r0zMQ$7$F!"8=:_$N5-;v\e(B
-\e$B$N%U%)%m!<%"%C%W$r%K%e!<%9$KEj9F$7$^$9\e(B
-(@code{gnus-summary-followup-to-mail-with-original}).
-\e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$rMQ$$$^$9!#\e(B
+\e$B$N%U%)%m!<%"%C%W$r%K%e!<%9$KEj9F$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-followup-to-mail-with-original}). \e$B$3$NL?Na$O%W%m\e(B
+\e$B%;%9\e(B/\e$B@\F,0z?t$N=,47$rMQ$$$^$9!#\e(B
 
 @item S o p
-@kindex S o p \e$B!J35N,!K\e(B
+@kindex S o p (\e$B35N,\e(B)
 @findex gnus-summary-post-forward
-\e$B8=:_$N5-;v$r%K%e!<%9%0%k!<%W$KE>Aw$7$^$9\e(B
-(@code{gnus-summary-post-forward})\e$B!#@\F,0z?t$,M?$($i$l$?$H$-$O!"E>Aw5-;v\e(B
-\e$B$N%X%C%@!<$r40A4$K<h$j9~$_$^$9!#\e(B
+\e$B8=:_$N5-;v$r%K%e!<%9%0%k!<%W$KE>Aw$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-post-forward})\e$B!#@\F,0z?t$,M?$($i$l$?$H$-$O!"E>Aw\e(B
+\e$B5-;v$N%X%C%@!<$r40A4$K<h$j9~$_$^$9!#\e(B
 
 @item S O p
-@kindex S O p \e$B!J35N,!K\e(B
-@findex gnus-uu-digest-summary-post-forward
+@kindex S O p (\e$B35N,\e(B)
+@findex gnus-summary-digest-post-forward
 @cindex digests
 @cindex making digests
-\e$B8=:_$N0lO"$N5-;v$rMWLs$7$F!"$=$N7k2L$r%K%e!<%9%0%k!<%W$KAw$j$^$9\e(B
-(@code{gnus-uu-digest-mail-forward})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B
-\e$B$rMQ$$$^$9!#\e(B
+\e$B8=:_$N0lO"$N5-;v$rMWLs$7$F!"$=$N7k2L$r%K%e!<%9%0%k!<%W$KAw$j$^\e(B
+\e$B$9\e(B (@code{gnus-summary-digest-post-forward})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z\e(B
+\e$B?t$N=,47$rMQ$$$^$9!#\e(B
 
 @item S u
-@kindex S u \e$B!J35N,!K\e(B
+@kindex S u (\e$B35N,\e(B)
 @findex gnus-uu-post-news
 @c @icon{gnus-uu-post-news}
-\e$B%U%!%$%k$r\e(B Uuencode \e$B$7!"J,3d$7$F!"AH$K$7$FEj9F$7$^$9\e(B
-(@code{gnus-uu-post-news})\e$B!#\e(B(@pxref{Uuencoding and Posting})\e$B!#\e(B
+\e$B%U%!%$%k$r\e(B Uuencode \e$B$7!"J,3d$7$F!"AH$K$7$FEj9F$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-post-news})\e$B!#\e(B(@pxref{Uuencoding and Posting})\e$B!#\e(B
 @end table
 
 \e$B$^$?\e(B @pxref{(message)Header Commands} \e$B$K$5$i$J$k>pJs$,$"$j$^$9!#\e(B
 
-
+@c FIXME this is not implemented
 @node Summary Message Commands
-@subsection Summary Message Commands
+@subsection \e$B35N,%a%C%;!<%8L?Na\e(B
 
 @table @kbd
 @item S y
-@kindex S y (Summary)
+@kindex S y (\e$B35N,\e(B)
 @findex gnus-summary-yank-message
-Yank the current article into an already existing Message composition
-buffer (@code{gnus-summary-yank-message}).  This command prompts for
-what message buffer you want to yank into, and understands the
-process/prefix convention (@pxref{Process/Prefix}).
+\e$B8=:_$N5-;v$r4{$KB8:_$9$k\e(B Message \e$B:n@.%P%C%U%!$KE=$jIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summaryyank-message})\e$B!#$3$NL?Na$OE=$jIU$1$?$$%a%C%;!<%8%P%C\e(B
+\e$B%U%!$NF~NO$rB%$7!"%W%m%;%9\e(B/\e$B@\F,<-$N=,47$rM}2r$7$^\e(B
+\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @end table
 
-
 @node Canceling and Superseding
 @subsection \e$B5-;v$r<h$j>C$9\e(B
 @cindex canceling articles
@@ -4208,45 +4727,46 @@ process/prefix convention (@pxref{Process/Prefix}).
 \e$B$3$H$,$G$-$^$9!#\e(B
 
 @findex gnus-summary-cancel-article
-@kindex C \e$B!J35N,!K\e(B
+@kindex C (\e$B35N,\e(B)
 @c @icon{gnus-summary-cancel-article}
-\e$B<h$j>C$7$?$$5-;v$r8+$D$1$F$/$@$5$$!J<h$j>C$9$3$H$,$G$-$k$N$O<+J,$N5-;v$@$1\e(B
-\e$B$G$9!#JQ$J$3$H$O;n$5$J$$$G$/$@$5$$!K!#$=$l$+$i!"\e(B @kbd{C} \e$B$+\e(B @kbd{S c}\e$B$r2!\e(B
-\e$B$7$F$/$@$5$$\e(B (@code{gnus-summary-cancel-article})\e$B!#$"$J$?$N5-;v$,<h$j>C$5\e(B
-\e$B$l$^$9!=!=@$3&Cf$N5!3#$,$"$J$?$N5-;v$r<h$j>C$7$^$9!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\\e(B
-\e$BF,0z?t$N=,47$rMQ$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B<h$j>C$7$?$$5-;v$r8+$D$1$F$/$@$5$$\e(B (\e$B<h$j>C$9$3$H$,$G$-$k$N$O<+J,$N5-;v$@\e(B
+\e$B$1$G$9!#JQ$J$3$H$O;n$5$J$$$G$/$@$5$$\e(B)\e$B!#$=$l$+$i!"\e(B
+@kbd{C} \e$B$+\e(B @kbd{S c} \e$B$r2!$7$F$/$@$5\e(B
+\e$B$$\e(B (@code{gnus-summary-cancel-article})\e$B!#$"$J$?$N5-;v$,<h$j>C$5$l$^\e(B
+\e$B$9!=!=@$3&Cf$N5!3#$,$"$J$?$N5-;v$r<h$j>C$7$^$9!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,\e(B
+\e$B0z?t$N=,47$rMQ$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 \e$B$7$+$7!"Cm0U$7$F$[$7$$$N$O$9$Y$F$N%5%$%H\e(B (site) \e$B$,<h$j>C$7$r07$C$F$$$k$o\e(B
 \e$B$1$G$O$J$$$3$H$G$9!#$G$9$+$i!"$?$$$F$$$N%5%$%H$,LdBj$N5-;v$r<h$j>C$7$F$b!"\e(B
 \e$B$"$A$3$A$G$"$J$?$N5-;v$O@8$-;D$k$+$b$7$l$^$;$s!#\e(B
 
-Gnus \e$B$O!"<h$j>C$9$H$-$K!X8=:_!Y$NA*BrJ}K!$r;H$$$^$9!#I8=`$NEj9FJ}K!$r;H$$\e(B
-\e$B$?$$$N$G$"$l$P!"J8;z@\F,0z?t\e(B @samp{a} \e$B$r;H$C$F$/$@$5$$\e(B(@pxref{Symbolic
-Prefixes})\e$B!#\e(B
+Gnus \e$B$O!"<h$j>C$9$H$-$K!X8=:_!Y$NA*BrJ}K!$r;H$$$^$9!#I8=`$NEj9FJ}K!$r;H\e(B
+\e$B$$$?$$$N$G$"$l$P!"J8;z@\F,0z?t\e(B @samp{a} \e$B$r;H$C$F$/$@$5\e(B
+\e$B$$\e(B (@pxref{Symbolic Prefixes})\e$B!#\e(B
 
-\e$B$b$72?$+4V0c$$$r$7$?$N$K5$IU$$$F!"D{@5$r$7$?$$$N$G$"$l$P!"\e(B@dfn{\e$BBeBX\e(B}
-(@dfn{superseding}) \e$B5-;v$rEj9F$7$FK\5-;v$rCV$-49$($k$3$H$,$G$-$^$9!#\e(B
+\e$B$b$72?$+4V0c$$$r$7$?$N$K5$IU$$$F!"D{@5$r$7$?$$$N$G$"$l$P!"\e(B
+@dfn{\e$BBeBX\e(B} (@dfn{superseding}) \e$B5-;v$rEj9F$7$FK\5-;v$rCV$-49$($k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
 
 @findex gnus-summary-supersede-article
-@kindex S \e$B!J35N,!K\e(B
-\e$BK\5-;v$N$H$3$m$X0\F0$7$F!"\e(B@kbd{S s} \e$B$r2!$7$F$/$@$5$$\e(B
-(@code{gnus-summary-supersede-article})\e$B!#IaDL$NJ}K!$G$=$l$rAw$kA0$K!"5-;v\e(B
-\e$B$r9%$-$J$h$&$KJT=8$9$k$3$H$,$G$-$^$9!#BeBX$K4X$7$F$b!"<h$j>C$7$HF1$8$3$H$,\e(B
-\e$BEv$F$O$^$j$^$9!#$3$A$i$NJ}$,$b$C$H$h$/Ev$F$O$^$k$+$b$7$l$^$;$s!'$$$/$D$+$N\e(B
-\e$B%5%$%H$OBeBX$r<u$1IU$1$^$;$s!#$3$l$i$N%5%$%H$G$O!"$"$J$?$,$[$H$s$IF1$85-;v\e(B
-\e$B$r\e(B2\e$B2sEj9F$7$?$h$&$K$J$j$^$9!#\e(B
+@kindex S (\e$B35N,\e(B)
+\e$BK\5-;v$N$H$3$m$X0\F0$7$F!"\e(B@kbd{S s} \e$B$r2!$7$F$/$@$5\e(B
+\e$B$$\e(B (@code{gnus-summary-supersede-article})\e$B!#IaDL$NJ}K!$G$=$l$rAw$kA0$K!"\e(B
+\e$B5-;v$r9%$-$J$h$&$KJT=8$9$k$3$H$,$G$-$^$9!#BeBX$K4X$7$F$b!"<h$j>C$7$HF1$8\e(B
+\e$B$3$H$,Ev$F$O$^$j$^$9!#$3$A$i$NJ}$,$b$C$H$h$/Ev$F$O$^$k$+$b$7$l$^$;\e(B
+\e$B$s\e(B: \e$B$$$/$D$+$N%5%$%H$OBeBX$r<u$1IU$1$^$;$s!#$3$l$i$N%5%$%H$G$O!"$"$J$?$,\e(B
+\e$B$[$H$s$IF1$85-;v$rFs2sEj9F$7$?$h$&$K$J$j$^$9!#\e(B
 
 \e$B$b$7$5$C$-5-;v$rEj9F$7$?$P$+$j$G$9$0$KJQ99$7$?$/$J$?>l9g!"5-;v$,:G=i$K$"\e(B
 \e$B$J$?$N%5%$%H$K8=$l$kA0$K<h$j>C$7\e(B/\e$BBeBX$r$9$k$?$a$N9*L/$J<jCJ$,$"$j$^$9!#\e(B
-\e$B$^$:!"Ej9F%P%C%U%!!J\e(B@code{*sent ... *} \e$B$N$h$&$K$J$C$F$$$^$9!K$KLa$j$^$9!#\e(B
+\e$B$^$:!"Ej9F%P%C%U%!\e(B (@code{*sent ... *} \e$B$N$h$&$K$J$C$F$$$^$9\e(B) \e$B$KLa$j$^$9!#\e(B
 \e$B$=$3$K$O$"$J$?$,$A$g$&$IEj9F$7$?5-;v$,$"$j!"$9$Y$F$N%X%C%@!<$,$=$N$^$^$"\e(B
 \e$B$j$^$9!#$=$l$i$NCf$N\e(B @code{Message-ID} \e$B$H$$$&8l$N$H$3$m$rJQ99$9$k$3$H$K\e(B
-\e$B$h$C$F\e(B @code{Message-ID} \e$B%X%C%@!<$r\e(B @code{Cancel} \e$B$b$7$/$O\e(B
-@code{Supersedes} \e$B$KJQ99$7$F$/$@$5$$!#\e(B
-
-\e$B$A$g$C$H3P$($F$*$$$F$/$@$5$$!'\e(B'supersede'\e$B!JBeBX!K$H$$$&8l$NCf$K\e(B 'c' \e$B$OL5$$\e(B
-\e$B$H$$$&$3$H$r!#\e(B
+\e$B$h$C$F\e(B @code{Message-ID} \e$B%X%C%@!<$r\e(B @code{Cancel} \e$B$b$7$/\e(B
+\e$B$O\e(B @code{Supersedes} \e$B$KJQ99$7$F$/$@$5$$!#\e(B
 
+\e$B$A$g$C$H3P$($F$*$$$F$/$@$5$$\e(B: 'supersede' (\e$BBeBX\e(B) \e$B$H$$$&8l$NCf$K\e(B 'c' \e$B$OL5\e(B
+\e$B$$$H$$$&$3$H$r!#\e(B
 
 @node Marking Articles
 @section \e$B5-;v$K0u$rIU$1$k\e(B
@@ -4256,52 +4776,51 @@ Prefixes})\e$B!#\e(B
 
 \e$B5-;v$KIU$1$i$l$k0u$O$$$/$D$+$"$j$^$9!#\e(B
 
-\e$B5-;v$N\e(B @dfn{\e$B9XFIEY\e(B}\e$B!J$*$)!"$9$s$4$$?78l6g$@!*!K$r7hDj$9$k0u$,$"$j$^\e(B
-\e$B$9!#1Q;z$N0u$O0lHLE*$K$O\e(B @dfn{\e$B4{FI\e(B}\e$B$r0UL#$7!"1Q;z$G$J$$J8;z$O0lHLE*$K\e(B
-@dfn{\e$BL$FI\e(B}\e$B$r0UL#$7$^$9!#\e(B
+\e$B5-;v$N\e(B @dfn{\e$B9XFIEY\e(B} (\e$B$*$)!"$9$s$4$$?78l6g$@\e(B!) \e$B$r7hDj$9$k0u$,$"$j$^$9!#1Q\e(B
+\e$B;z$N0u$O0lHLE*$K$O\e(B @dfn{\e$B4{FI\e(B}\e$B$r0UL#$7!"1Q;z$G$J$$J8;z$O0lHLE*\e(B
+\e$B$K\e(B @dfn{\e$BL$FI\e(B}\e$B$r0UL#$7$^$9!#\e(B
 
 \e$B2C$($F!"9XFIEY$K1F6A$7$J$$0u$b$"$j$^$9!#\e(B
 
 @menu
-* Unread Articles::      \e$BL$FI5-;v$X$N0u\e(B
-* Read Articles::        \e$B4{FI5-;v$X$N0u\e(B
-* Other Marks::          \e$B9XFIEY$K1F6A$7$J$$0u\e(B
+* Unread Articles:: \e$BL$FI5-;v$X$N0u\e(B
+* Read Articles::   \e$B4{FI5-;v$X$N0u\e(B
+* Other Marks::     \e$B9XFIEY$K1F6A$7$J$$0u\e(B
 @end menu
 
 @ifinfo
-\e$B$3$l$i$N0u$rA`:n$9$k2a>j$J$/$i$$$NL?Na$,$"$j$^$9!'\e(B
+\e$B$3$l$i$N0u$rA`:n$9$k2a>j$J$/$i$$$NL?Na$,$"$j$^$9\e(B:
 @end ifinfo
 
 @menu
-* Setting Marks::           \e$B0u$NIU$1J}$H>C$7J}\e(B
-* Generic Mark Commands::   \e$B0u$r$I$N$h$&$K%+%9%?%^%$%:$9$k$+!#\e(B
-* Setting Process Marks::   \e$B8e$N<B9T$N$?$a$N5-;v$N0u$NIU$1J}\e(B
+* Setting Marks::         \e$B0u$NIU$1J}$H>C$7J}\e(B
+* Generic Mark Commands:: \e$B0u$r$I$N$h$&$K%+%9%?%^%$%:$9$k$+\e(B
+* Setting Process Marks:: \e$B8e$N<B9T$N$?$a$N5-;v$N0u$NIU$1J}\e(B
 @end menu
 
-
 @node Unread Articles
 @subsection \e$BL$FI5-;v\e(B
 
-\e$B0J2<$N0u$O$$$m$$$m$JJ}K!$G5-;v$KL$FI$N!J$h$&$J!K0u$rIU$1$^$9!#\e(B
+\e$B0J2<$N0u$O$$$m$$$m$JJ}K!$G5-;v$KL$FI$N\e(B (\e$B$h$&$J\e(B) \e$B0u$rIU$1$^$9!#\e(B
 
 @table @samp
 @item !
 @vindex gnus-ticked-mark
 \e$B2D;k5-;v\e(B (Ticked) \e$B$H$7$F0u$r$D$1$^$9\e(B (@code{gnus-ticked-mark})\e$B!#\e(B
 
-@dfn{\e$B2D;k5-;v\e(B}\e$B$H$O!">o$K2D;k>uBV$G$"$k5-;v$N$3$H$G$9!#$*$b$7$m$$$H;W$&5-;v\e(B
-\e$B$,$"$C$?>l9g$d!"C1$KFI$`$N$r@h$K1d$P$7$?$$$H$-$d!"8e$GJVEz$r$7$?$$$H$-$K!"\e(B
-\e$BIaDL$O2D;k0u$rIU$1$^$9!#$7$+$7!"5-;v$O4|8B@Z$l>C5n$5$l$k$3$H$b$"$j$^$9$N$G!"\e(B
-\e$B1J1s$K5-;v$rJ]B8$7$F$*$-$?$$>l9g$O!"$=$N5-;v$r1JB3$K$9$kI,MW$,$"$j$^$9\e(B
-(@pxref{Persistent Articles})\e$B!#\e(B
+@dfn{\e$B2D;k5-;v\e(B}\e$B$H$O!">o$K2D;k>uBV$G$"$k5-;v$N$3$H$G$9!#$*$b$7$m$$$H;W$&5-\e(B
+\e$B;v$,$"$C$?>l9g$d!"C1$KFI$`$N$r@h$K1d$P$7$?$$$H$-$d!"8e$GJVEz$r$7$?$$$H$-\e(B
+\e$B$K!"IaDL$O2D;k0u$rIU$1$^$9!#$7$+$7!"5-;v$O4|8B@Z$l>C5n$5$l$k$3$H$b$"$j$^\e(B
+\e$B$9$N$G!"1J1s$K5-;v$rJ]B8$7$F$*$-$?$$>l9g$O!"$=$N5-;v$r1JB3$K$9$kI,MW$,$"\e(B
+\e$B$j$^$9\e(B (@pxref{Persistent Articles})\e$B!#\e(B
 
 @item ?
 @vindex gnus-dormant-mark
 \e$BJ]N1$H$7$F0u$rIU$1$^$9\e(B (@code{gnus-dormant-mark})\e$B!#\e(B
 
-@dfn{\e$BJ]N15-;v\e(B}\e$B$O%U%)%m!<%"%C%W$,$"$C$?$H$-$K$@$135N,%P%C%U%!$K8=$l$^$9!#%U%)\e(B
-\e$B%m!<%"%C%W$,L5$$$H$-$bI=<($5$;$?$$$H$-$O!"L?Na\e(B @kbd{/ D} \e$B$r;H$&$3$H$,$G$-\e(B
-\e$B$^$9!#\e(B
+@dfn{\e$BJ]N15-;v\e(B}\e$B$O%U%)%m!<%"%C%W$,$"$C$?$H$-$K$@$135N,%P%C%U%!$K8=$l$^$9!#\e(B
+\e$B%U%)%m!<%"%C%W$,L5$$$H$-$bI=<($5$;$?$$$H$-$O!"L?Na\e(B @kbd{/ D} \e$B$r;H$&$3$H\e(B
+\e$B$,$G$-$^$9!#\e(B
 
 @item SPACE
 @vindex gnus-unread-mark
@@ -4310,7 +4829,6 @@ Prefixes})\e$B!#\e(B
 @dfn{\e$BL$FI5-;v\e(B}\e$B$O:#$^$GA4$/FI$^$l$F$$$J$$5-;v$N$3$H$G$9!#\e(B
 @end table
 
-
 @node Read Articles
 @subsection \e$B4{FI5-;v\e(B
 @cindex expirable mark
@@ -4338,18 +4856,18 @@ Prefixes})\e$B!#\e(B
 
 @item X
 @vindex gnus-kill-file-mark
-\e$B:o=|%U%!%$%k$K$h$C$F:o=|$N0u$,$D$$$?5-;v\e(B
-(@code{gnus-kill-file-mark})\e$B!#\e(B
+\e$B:o=|%U%!%$%k$K$h$C$F:o=|$N0u$,$D$$$?5-\e(B
+\e$B;v\e(B (@code{gnus-kill-file-mark})\e$B!#\e(B
 
 @item Y
 @vindex gnus-low-score-mark
-\e$BDc$9$.$k%9%3%"$N$?$a$K4{FI$N0u$,$D$$$?5-;v\e(B
-(@code{gnus-low-score-mark})\e$B!#\e(B
+\e$BDc$9$.$k%9%3%"$N$?$a$K4{FI$N0u$,$D$$$?5-\e(B
+\e$B;v\e(B (@code{gnus-low-score-mark})\e$B!#\e(B
 
 @item C
 @vindex gnus-catchup-mark
-\e$B%-%c%C%A%"%C%W$K$h$C$F4{FI$N0u$,$D$$$?5-;v\e(B
-(@code{gnus-catchup-mark})\e$B!#\e(B
+\e$B%-%c%C%A%"%C%W$K$h$C$F4{FI$N0u$,$D$$$?5-\e(B
+\e$B;v\e(B (@code{gnus-catchup-mark})\e$B!#\e(B
 
 @item G
 @vindex gnus-canceled-mark
@@ -4357,7 +4875,7 @@ Prefixes})\e$B!#\e(B
 
 @item F
 @vindex gnus-souped-mark
-@sc{soup} \e$B$5$l$F$$$k5-;v\e(B (@code{gnus-souped-mark})\e$B!#\e(B @xref{SOUP}.
+@sc{soup} \e$B$5$l$F$$$k5-;v\e(B (@code{gnus-souped-mark})\e$B!#\e(B@xref{SOUP}.
 
 @item Q
 @vindex gnus-sparse-mark
@@ -4375,21 +4893,20 @@ Prefixes})\e$B!#\e(B
 \e$B$9$k$@$1$G$9!#E,1~%9%3%"%j%s%0$r$7$?$H$-$K$O0c$C$?$h$&$K2r<a$5$l$^$9$1$l\e(B
 \e$B$I!#\e(B
 
-\e$B$b$&0l$D!"FCJL$J0u$,$"$j$^$9!'\e(B
+\e$B$b$&0l$D!"FCJL$J0u$,$"$j$^$9\e(B:
 
 @table @samp
 @item E
 @vindex gnus-expirable-mark
 \e$B4|8B@Z$l:o=|2DG=$H$7$F0u$N$D$$$?5-;v\e(B (@code{gnus-expirable-mark})\e$B!#\e(B
 
-\e$B5-;v$r\e(B@dfn{\e$B4|8B@Z$l:o=|2DG=\e(B}\e$B$H$7$F0u$rIU$1$k!J$b$7$/$O!"<+F0E*$K$=$N$h$&$K\e(B
-\e$B0u$rIU$1$k!K$3$H$O!"IaDL$N%0%k!<%W$G$O$"$^$j0UL#$,$"$j$^$;$s!=!=MxMQ<T$O%K%e!<\e(B
-\e$B%:5-;v$N4|8B$K$h$k:o=|$r@)8f$7$F$$$^$;$s!#$7$+$7!"Nc$($P%a!<%k%0%k!<%W$G$O!"\e(B
-@dfn{\e$B4|8B@Z$l:o=|2DG=\e(B}\e$B$H$7$F0u$N$D$$$?5-;v$O!"$$$D$G$b\e(B gnus \e$B$K$h$C$F:o=|$5\e(B
-\e$B$l$k$3$H$,$"$j$^$9!#\e(B
+\e$B5-;v$r\e(B @dfn{\e$B4|8B@Z$l:o=|2DG=\e(B} \e$B$H$7$F0u$rIU$1$k\e(B (\e$B$b$7$/$O!"<+F0E*$K$=$N$h\e(B
+\e$B$&$K0u$rIU$1$k\e(B) \e$B$3$H$O!"IaDL$N%0%k!<%W$G$O$"$^$j0UL#$,$"$j$^$;$s!=!=MxMQ\e(B
+\e$B<T$O%K%e!<%:5-;v$N4|8B$K$h$k:o=|$r@)8f$7$F$$$^$;$s!#$7$+$7!"Nc$($P%a!<%k\e(B
+\e$B%0%k!<%W$G$O!"\e(B@dfn{\e$B4|8B@Z$l:o=|2DG=\e(B} \e$B$H$7$F0u$N$D$$$?5-;v$O!"$$$D$G\e(B
+\e$B$b\e(B gnus \e$B$K$h$C$F:o=|$5$l$k$3$H$,$"$j$^$9!#\e(B
 @end table
 
-
 @node Other Marks
 @subsection \e$BB>$N0u\e(B
 @cindex process mark
@@ -4408,43 +4925,44 @@ Prefixes})\e$B!#\e(B
 
 @item
 @vindex gnus-replied-mark
-\e$BJVEz$r$7$?$+!"%U%)%m!<%"%C%W$r$7$?!JNc$($P!"Ez$($?!K5-;v$O$9$Y$F\e(B2\e$B7eL\$K\e(B
-@samp{A} \e$B$N0u$,$D$-$^$9\e(B (@code{gnus-replied-mark})\e$B!#\e(B
+\e$BJVEz$r$7$?$+!"%U%)%m!<%"%C%W$r$7$?\e(B (\e$BNc$($P!"Ez$($?\e(B) \e$B5-;v$O$9$Y$FFs7eL\\e(B
+\e$B$K\e(B @samp{A} \e$B$N0u$,$D$-$^$9\e(B (@code{gnus-replied-mark})\e$B!#\e(B
 
 @item
 @vindex gnus-cached-mark
-\e$B5-;v%-%c%C%7%e$KCy$a$i$l$F$$$k5-;v$O\e(B2\e$B7eL\$K\e(B @samp{*} \e$B$N0u$,$D$-$^$9\e(B
-(@code{gnus-replied-mark})\e$B!#\e(B @xref{Article Caching}.
+\e$B5-;v%-%c%C%7%e$KCy$a$i$l$F$$$k5-;v$OFs7eL\$K\e(B @samp{*} \e$B$N0u$,$D$-$^\e(B
+\e$B$9\e(B (@code{gnus-replied-mark})\e$B!#\e(B@xref{Article Caching}.
 
 @item
 @vindex gnus-saved-mark
-\e$B!J2?$i$+$NJ}K!$K$h$C$F!(I,$:$7$b=!65E*$H$$$&$o$1$G$O$J$/!K!XJ]B8$5$l$?!Y5-\e(B
-\e$B;v$O\e(B2\e$B7eL\$K\e(B @samp{S} \e$B$N0u$,$D$-$^$9\e(B (@code{gnus-saved-mark})\e$B!#\e(B
+(\e$B2?$i$+$NJ}K!$K$h$C$F!(I,$:$7$b=!65E*$H$$$&$o$1$G$O$J$/\e(B) \e$B!XJ]B8$5$l$?!Y\e(B
+\e$B5-;v$OFs7eL\$K\e(B @samp{S} \e$B$N0u$,$D$-$^$9\e(B (@code{gnus-saved-mark})\e$B!#\e(B
 
 @item
 @vindex gnus-not-empty-thread-mark
 @vindex gnus-empty-thread-mark
-\e$B$b$7\e(B @samp{%e} \e$B$N;EMM$,;H$o$l$k$H!"%9%l%C%I$,$"$k$+$I$&$+$O!"#37eL\$K\e(B
-@code{gnus-not-empty-thread-mark} \e$B$H\e(B @code{gnus-empty-thread-mark} \e$B$N$=$l\e(B
-\e$B$>$l$K$h$C$F0u$,$D$-$^$9!#\e(B
+\e$B$b$7\e(B @samp{%e} \e$B$N;EMM$,;H$o$l$k$H!"%9%l%C%I$,$"$k$+$I$&$+$O!";07eL\\e(B
+\e$B$K\e(B @code{gnus-not-empty-thread-mark} \e$B$H\e(B @code{gnus-empty-thread-mark} \e$B$N\e(B
+\e$B$=$l$>$l$K$h$C$F0u$,$D$-$^$9!#\e(B
 
 @item
 @vindex gnus-process-mark
-\e$B:G8e$K\e(B @dfn{\e$B%W%m%;%90u\e(B} \e$B$,$"$j$^$9\e(B(@code{gnus-process-mark})\e$B!#$$$m$$$m$J<o\e(B
-\e$BN`$NL?Na$,%W%m%;%90u$,$"$k$H$=$l$KBP$7$F<B9T$5$l$^$9!#Nc$($P!"\e(B@kbd{X u}
-(@code{gnus-uu-decode-uu}) \e$B$O%W%m%;%90u$NIU$$$?$9$Y$F$N5-;v$r\e(B uudecode \e$B$7\e(B
-\e$B$F!"I=<($7$^$9!#%W%m%;%90u$NIU$$$?5-;v$O\e(B2\e$B7eL\$K\e(B @samp{#} \e$B$,$"$j$^$9!#\e(B
+\e$B:G8e$K\e(B @dfn{\e$B%W%m%;%90u\e(B} \e$B$,$"$j$^$9\e(B(@code{gnus-process-mark})\e$B!#$$$m$$$m$J\e(B
+\e$B<oN`$NL?Na$,%W%m%;%90u$,$"$k$H$=$l$KBP$7$F<B9T$5$l$^$9!#Nc$($P!"\e(B
+@kbd{X u} (@code{gnus-uu-decode-uu}) \e$B$O%W%m%;%90u$NIU$$$?$9$Y$F$N5-;v\e(B
+\e$B$r\e(B uudecode \e$B$7$F!"I=<($7$^$9!#%W%m%;%90u$NIU$$$?5-;v$OFs7eL\\e(B
+\e$B$K\e(B @samp{#} \e$B$,$"$j$^$9!#\e(B
 
 @end itemize
 
-\e$B$3$l$i$N!XHs9XFIEY!Y$N0u$O=i4|@_Dj$G$O$?$$$F$$\e(B2\e$B7eL\$K8=$l$k$H$$$&$3$H$K\e(B
+\e$B$3$l$i$N!XHs9XFIEY!Y$N0u$O=i4|@_Dj$G$O$?$$$F$$Fs7eL\$K8=$l$k$H$$$&$3$H$K\e(B
 \e$B5$IU$$$?$+$b$7$l$^$;$s!#$G$9$+$i!"%-%c%C%7%e$5$l$F$$$F!"J]B8$5$l$F$$$F!"\e(B
-\e$BJVEz$r$7$?5-;v$K%W%m%;%90u$,IU$$$F$$$k>l9g!"$I$N$h$&$K$J$k$N$G$7$g$&!)\e(B
-
-\e$B$?$$$7$?$3$H$O$"$j$^$;$s!#M%@h=g0L$O<!$N$h$&$K$J$C$F$$$^$9!'\e(B \e$B%W%m%;%9\e(B \e$B"*\e(B
-\e$B%-%c%C%7%e\e(B \e$B"*\e(B \e$BJVEz:Q$_\e(B \e$B"*\e(B \e$BJ]B8!#$G$9$+$i!"$"$k5-;v$,%-%c%C%7%e$KF~$C$F$$$F!"\e(B
-\e$BJVEz$5$l$F$$$?>l9g!"%-%c%C%7%e0u$,$"$k$@$1$G!"JVEz:Q$_0u$O$"$j$^$;$s!#\e(B
+\e$BJVEz$r$7$?5-;v$K%W%m%;%90u$,IU$$$F$$$k>l9g!"$I$N$h$&$K$J$k$N$G$7$g$&\e(B?
 
+\e$B$?$$$7$?$3$H$O$"$j$^$;$s!#M%@h=g0L$O<!$N$h$&$K$J$C$F$$$^$9\e(B: \e$B%W%m%;\e(B
+\e$B%9\e(B \e$B"*\e(B \e$B%-%c%C%7%e\e(B \e$B"*\e(B \e$BJVEz:Q$_\e(B \e$B"*\e(B \e$BJ]B8!#$G$9$+$i!"$"$k5-;v$,%-%c%C%7%e$KF~$C\e(B
+\e$B$F$$$F!"JVEz$5$l$F$$$?>l9g!"%-%c%C%7%e0u$,$"$k$@$1$G!"JVEz:Q$_0u$O$"$j$^\e(B
+\e$B$;$s!#\e(B
 
 @node Setting Marks
 @subsection \e$B0u$rIU$1$k\e(B
@@ -4455,139 +4973,138 @@ Prefixes})\e$B!#\e(B
 @table @kbd
 @item M c
 @itemx M-u
-@kindex M c \e$B!J35N,!K\e(B
-@kindex M-u \e$B!J35N,!K\e(B
+@kindex M c (\e$B35N,\e(B)
+@kindex M-u (\e$B35N,\e(B)
 @findex gnus-summary-clear-mark-forward
 @cindex mark as read
-\e$B8=:_$N5-;v$+$i!"$9$Y$F$N9XFIEY0u$r>C5n$7$^$9\e(B
-(@code{gnus-summary-clear-mark-forward})\e$B!#MW$9$k$K!"5-;v$KL$FI$N0u$rIU$1\e(B
-\e$B$^$9!#\e(B
+\e$B8=:_$N5-;v$+$i!"$9$Y$F$N9XFIEY0u$r>C5n$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-clear-mark-forward})\e$B!#MW$9$k$K!"5-;v$KL$FI$N0u$r\e(B
+\e$BIU$1$^$9!#\e(B
 
 @item M t
 @itemx !
-@kindex ! \e$B!J35N,!K\e(B
-@kindex M t \e$B!J35N,!K\e(B
+@kindex ! (\e$B35N,\e(B)
+@kindex M t (\e$B35N,\e(B)
 @findex gnus-summary-tick-article-forward
-\e$B8=:_$N5-;v$K2D;k5-;v0u$rIU$1$^$9\e(B
-(@code{gnus-summary-tick-article-forward})\e$B!#\e(B @xref{Article Caching}.
+\e$B8=:_$N5-;v$K2D;k5-;v0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-tick-article-forward})\e$B!#\e(B@xref{Article Caching}.
 
 @item M ?
 @itemx ?
-@kindex ? \e$B!J35N,!K\e(B
-@kindex M ? \e$B!J35N,!K\e(B
+@kindex ? (\e$B35N,\e(B)
+@kindex M ? (\e$B35N,\e(B)
 @findex gnus-summary-mark-as-dormant
-\e$B8=:_$N5-;v$KJ]N15-;v0u$rIU$1$^$9\e(B
-(@code{gnus-summary-mark-as-read-forward})\e$B!#\e(B@xref{Article Caching}.
+\e$B8=:_$N5-;v$KJ]N15-;v0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-mark-as-read-forward})\e$B!#\e(B@xref{Article Caching}.
 
 @item D
-@kindex D \e$B!J35N,!K\e(B
+@kindex D (\e$B35N,\e(B)
 @findex gnus-summary-mark-as-read-backward
-\e$B8=:_$N5-;v$K4{FI$N0u$rIU$1!"A0$N9T$K%]%$%s%H$r0\F0$7$^$9\e(B
-(@code{gnus-summary-mark-as-read-backward})\e$B!#\e(B
+\e$B8=:_$N5-;v$K4{FI$N0u$rIU$1!"A0$N9T$K%]%$%s%H$r0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-mark-as-read-backward})\e$B!#\e(B
 
 @item M k
 @itemx k
-@kindex k \e$B!J35N,!K\e(B
-@kindex M k \e$B!J35N,!K\e(B
+@kindex k (\e$B35N,\e(B)
+@kindex M k (\e$B35N,\e(B)
 @findex gnus-summary-kill-same-subject-and-select
 \e$B8=:_$N5-;v$HF1$8I=Bj$r;}$D$9$Y$F$N5-;v$r4{FI$H$7$F0u$rIU$1!"<!$NL$FI5-;v\e(B
 \e$B$rA*Br$7$^$9\e(B (@code{gnus-summary-kill-same-subject-and-select})\e$B!#\e(B
 
 @item M K
 @itemx C-k
-@kindex M K \e$B!J35N,!K\e(B
-@kindex C-k \e$B!J35N,!K\e(B
+@kindex M K (\e$B35N,\e(B)
+@kindex C-k (\e$B35N,\e(B)
 @findex gnus-summary-kill-same-subject
-\e$B8=:_$N5-;v$HF1$8I=Bj$r;}$D$9$Y$F$N5-;v$r4{FI$H$7$F0u$rIU$1$^$9\e(B
-(@code{gnus-summary-kill-same-subject})\e$B!#\e(B
+\e$B8=:_$N5-;v$HF1$8I=Bj$r;}$D$9$Y$F$N5-;v$r4{FI$H$7$F0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-kill-same-subject})\e$B!#\e(B
 
 @item M C
-@kindex M C \e$B!J35N,!K\e(B
+@kindex M C (\e$B35N,\e(B)
 @findex gnus-summary-catchup
 @c @icon{gnus-summary-catchup}
 \e$B$9$Y$F$NL$FI5-;v$K4{FI$N0u$rIU$1$^$9\e(B (@code{gnus-summary-catchup})\e$B!#\e(B
 
 @item M C-c
-@kindex M C-c \e$B!J35N,!K\e(B
+@kindex M C-c (\e$B35N,\e(B)
 @findex gnus-summary-catchup-all
-\e$B%0%k!<%W$N$9$Y$F$N5-;v$K!=!=2D;k5-;v$dJ]N15-;v$G$5$($b!"4{FI$N0u$rIU$1$^$9\e(B
-(@code{gnus-summary-catchup-all})\e$B!#\e(B
+\e$B%0%k!<%W$N$9$Y$F$N5-;v$K!=!=2D;k5-;v$dJ]N15-;v$G$5$($b!"4{FI$N0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-catchup-all})\e$B!#\e(B
 
 @item M H
-@kindex M H \e$B!J35N,!K\e(B
+@kindex M H (\e$B35N,\e(B)
 @findex gnus-summary-catchup-to-here
-\e$B8=:_$N%0%k!<%W$N%]%$%s%H$^$G$r4{FI$H$7$F0u$rIU$1$^$9\e(B
-(@code{gnus-summary-catchup-to-here})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$N%]%$%s%H$^$G$r4{FI$H$7$F0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-catchup-to-here})\e$B!#\e(B
 
 @item C-w
-@kindex C-w \e$B!J35N,!K\e(B
+@kindex C-w (\e$B35N,\e(B)
 @findex gnus-summary-mark-region-as-read
-\e$B%]%$%s%H$H%^!<%/$N4V$N5-;v$K4{FI$N0u$rIU$1$^$9\e(B
-(@code{gnus-summary-mark-region-as-read})\e$B!#\e(B
+\e$B%]%$%s%H$H%^!<%/$N4V$N5-;v$K4{FI$N0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-mark-region-as-read})\e$B!#\e(B
 
 @item M V k
-@kindex M V k \e$B!J35N,!K\e(B
+@kindex M V k (\e$B35N,\e(B)
 @findex gnus-summary-kill-below
-\e$B=i4|@_Dj$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bDc$$%9%3%"$N5-;v$r:o=|$7$^\e(B
+\e$B=i4|@_Dj$N%9%3%"\e(B (\e$B$b$7$/$O?tCM@\F,0z?t\e(B) \e$B$h$j$bDc$$%9%3%"$N5-;v$r:o=|$7$^\e(B
 \e$B$9!#\e(B
 
 @item M e
 @itemx E
-@kindex M e \e$B!J35N,!K\e(B
-@kindex E \e$B!J35N,!K\e(B
+@kindex M e (\e$B35N,\e(B)
+@kindex E (\e$B35N,\e(B)
 @findex gnus-summary-mark-as-expirable
-\e$B8=:_$N5-;v$r4|8B@Z$l:o=|2DG=$H$7$F0u$rIU$1$^$9\e(B
-(@code{gnus-summary-mark-as-expirable})\e$B!#\e(B
+\e$B8=:_$N5-;v$r4|8B@Z$l:o=|2DG=$H$7$F0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-mark-as-expirable})\e$B!#\e(B
 
 @item M b
-@kindex M b \e$B!J35N,!K\e(B
+@kindex M b (\e$B35N,\e(B)
 @findex gnus-summary-set-bookmark
 \e$B8=:_$N5-;v$K$7$*$j$r@_Dj$7$^$9\e(B (@code{gnus-summary-set-bookmark})\e$B!#\e(B
 
 @item M B
-@kindex M B \e$B!J35N,!K\e(B
+@kindex M B (\e$B35N,\e(B)
 @findex gnus-summary-remove-bookmark
 \e$B8=:_$N5-;v$N$7$*$j$r:o=|$7$^$9\e(B (@code{gnus-summary-remobe-bookmark})\e$B!#\e(B
 
 @item M V c
-@kindex M V c \e$B!J35N,!K\e(B
+@kindex M V c (\e$B35N,\e(B)
 @findex gnus-summary-clear-above
-\e$B=i4|@_Dj$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$$%9%3%"$r;}$D5-;v$N$9\e(B
+\e$B=i4|@_Dj$N%9%3%"\e(B (\e$B$b$7$/$O?tCM@\F,0z?t\e(B) \e$B$h$j$bBg$-$$%9%3%"$r;}$D5-;v$N$9\e(B
 \e$B$Y$F$N0u$r>C5n$7$^$9\e(B (@code{gnus-summary-clar-above})\e$B!#\e(B
 
 @item M V u
-@kindex M V u \e$B!J35N,!K\e(B
+@kindex M V u (\e$B35N,\e(B)
 @findex gnus-summary-tick-above
-\e$B=i4|@_Dj$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$$%9%3%"$r;}$D$9$Y$F$N\e(B
+\e$B=i4|@_Dj$N%9%3%"\e(B (\e$B$b$7$/$O?tCM@\F,0z?t\e(B) \e$B$h$j$bBg$-$$%9%3%"$r;}$D$9$Y$F$N\e(B
 \e$B5-;v$K2D;k0u$rIU$1$^$9\e(B (@code{gnus-summary-tick-above})\e$B!#\e(B
 
 @item M V m
-@kindex M V m \e$B!J35N,!K\e(B
+@kindex M V m (\e$B35N,\e(B)
 @findex gnus-summary-mark-above
-\e$B0u$NF~NO$rB%$7!"=i4|@_Dj$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$J%9%3\e(B
+\e$B0u$NF~NO$rB%$7!"=i4|@_Dj$N%9%3%"\e(B (\e$B$b$7$/$O?tCM@\F,0z?t\e(B) \e$B$h$j$bBg$-$J%9%3\e(B
 \e$B%"$r;}$D$9$Y$F$N5-;v$K$=$N0u$rIU$1$^$9\e(B (@code{gnus-summary-mark-above})\e$B!#\e(B
 @end table
 
 @vindex gnus-summary-goto-unread
-\e$BJQ?t\e(B @code{gnus-summary-goto-unread} \e$B$O0u$,IU$1$i$l$?8e$K$I$N$h$&$JF0:n$,\e(B
-\e$B$J$5$l$k$+$r7hDj$7$^$9!#$b$7\e(B @code{nil} \e$B$G$J$$$H!"%]%$%s%H$O<!\e(B/\e$BA0$NL$FI5-\e(B
-\e$B;v$K0\F0$7$^$9!#$b$7\e(B @code{nil} \e$B$G$"$k$H!"%]%$%s%H$O0l9T>e$+2<$K9T$/$@$1$G\e(B
-\e$B$9!#FCJL$J>l9g$H$7$F!"$3$NJQ?t$,\e(B @code{never} \e$B$G$"$k$H!"$9$Y$F$N0u$rIU$1$k\e(B
-\e$BL?Na$H!J\e(B@kbd{SPACE} \e$B$N$h$&$J!KB>$NL?Na$O<!$N5-;v$,L$FI$G$"$m$&$,L5$+$m$&$,\e(B
-\e$B$=$N5-;v$K0\F0$7$^$9!#=i4|CM\e(B @code{t} \e$B$G$9!#\e(B
-
+\e$BJQ?t\e(B @code{gnus-summary-goto-unread} \e$B$O0u$,IU$1$i$l$?8e$K$I$N$h$&$JF0:n\e(B
+\e$B$,$J$5$l$k$+$r7hDj$7$^$9!#$b$7\e(B @code{nil} \e$B$G$J$$$H!"%]%$%s%H$O<!\e(B/\e$BA0$NL$\e(B
+\e$BFI5-;v$K0\F0$7$^$9!#$b$7\e(B @code{nil} \e$B$G$"$k$H!"%]%$%s%H$O0l9T>e$+2<$K9T$/\e(B
+\e$B$@$1$G$9!#FCJL$J>l9g$H$7$F!"$3$NJQ?t$,\e(B @code{never} \e$B$G$"$k$H!"$9$Y$F$N0u\e(B
+\e$B$rIU$1$kL?Na$H\e(B (@kbd{SPACE} \e$B$N$h$&$J\e(B) \e$BB>$NL?Na$O<!$N5-;v$,L$FI$G$"$m$&$,\e(B
+\e$BL5$+$m$&$,$=$N5-;v$K0\F0$7$^$9!#=i4|CM\e(B @code{t} \e$B$G$9!#\e(B
 
 @node Generic Marking Commands
 @subsection Generic Marking Commands
 
 \e$B5-;v$K2D;k0u$rIU$1$kL?Na\e(B (@kbd{!}) \e$B$K<!$N5-;v$K0\F0$7$F$b$i$$$?$$$H$$$&\e(B
 \e$B?M$,$$$^$9!#<!$NL$FI5-;v$K0\F0$7$F$b$i$$$?$$$H;W$&?M$b$$$^$9!#$^$?!"B>$N\e(B
-\e$B8=:_$N5-;v$KN1$^$C$F$b$i$$$?$$?M$b$$$k$G$7$g$&!#$=$7$F!"$^$@A0$N\e(B (\e$BL$FI\e(B)
-\e$B5-;v$K9T$C$F$[$7$$?M$,$$$k$H$OJ9$$$?$3$H$O$"$j$^$;$s$,!"$=$&$7$?$$$H;W$&\e(B
-\e$B?M$b4V0c$$$J$/$$$k$H;W$$$^$9!#\e(B
+\e$B8=:_$N5-;v$KN1$^$C$F$b$i$$$?$$?M$b$$$k$G$7$g$&!#$=$7$F!"$^$@A0$N\e(B (\e$BL$\e(B
+\e$BFI\e(B) \e$B5-;v$K9T$C$F$[$7$$?M$,$$$k$H$OJ9$$$?$3$H$O$"$j$^$;$s$,!"$=$&$7$?$$$H\e(B
+\e$B;W$&?M$b4V0c$$$J$/$$$k$H;W$$$^$9!#\e(B
 
-\e$B$3$N\e(B5\e$B$D$NF0:n$r\e(B5\e$B$D$N0c$C$?0uIU$1L?Na$H3]$1;;$9$k$H!"$I$NL?Na$,2?$r$9$Y$-\e(B
-\e$B$+$NHs>o$KJ#;($JJQ?t$NAH$r$b$D$3$H$K$J$j$^$9!#\e(B
+\e$B$3$N8^$D$NF0:n$r8^$D$N0c$C$?0uIU$1L?Na$H3]$1;;$9$k$H!"$I$NL?Na$,2?$r$9$Y\e(B
+\e$B$-$+$NHs>o$KJ#;($JJQ?t$NAH$r$b$D$3$H$K$J$j$^$9!#\e(B
 
 \e$B$3$NHa7`$+$iF($l$k$?$a$K!"\e(Bgnus \e$B$O$3$l$i$9$Y$F$N0c$C$?$3$H$r$9$kL?Na$rDs\e(B
 \e$B6!$7$^$9!#$3$l$i$O35N,%P%C%U%!$N\e(B @kbd{M M} \e$B%^%C%W$K$"$j$^$9!#A4$F$r$_$k\e(B
@@ -4611,7 +5128,6 @@ Prefixes})\e$B!#\e(B
   (local-set-key "!" "MM!n"))
 @end lisp
 
-
 @node Setting Process Marks
 @subsection \e$B%W%m%;%90u$rIU$1$k\e(B
 @cindex setting process marks
@@ -4620,114 +5136,122 @@ Prefixes})\e$B!#\e(B
 
 @item M P p
 @itemx #
-@kindex # \e$B!J35N,!K\e(B
-@kindex M P p \e$B!J35N,!K\e(B
+@kindex # (\e$B35N,\e(B)
+@kindex M P p (\e$B35N,\e(B)
 @findex gnus-pick-unmark-article-or-thread
-\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^$9\e(B
-@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ?t\e(B
-@code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G\e(B
-\e$B=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O!"$=$N\e(B
-\e$B5-;v$@$1$rL$A*Br$K$7$^$9!#$=$N9T$N%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K$3$N\e(B
-\e$B%-!<$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
+\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ\e(B
+\e$B?t\e(B @code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I\e(B
+\e$B$N:G=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O!"\e(B
+\e$B$=$N5-;v$@$1$rL$A*Br$K$7$^$9!#$=$N9T$N%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K\e(B
+\e$B$3$N%-!<$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
 
 @item M P u
 @itemx M-#
-@kindex M P u \e$B!J35N,!K\e(B
-@kindex M-# \e$B!J35N,!K\e(B
-\e$B$b$78=:_$N5-;v$K%W%m%;%90u$,$"$l$P<h$j=|$-$^$9\e(B
-(@code{gnus-summary-unmark-as-processable})\e$B!#\e(B
+@kindex M P u (\e$B35N,\e(B)
+@kindex M-# (\e$B35N,\e(B)
+\e$B$b$78=:_$N5-;v$K%W%m%;%90u$,$"$l$P<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-summary-unmark-as-processable})\e$B!#\e(B
 
 @item M P U
-@kindex M P U \e$B!J35N,!K\e(B
+@kindex M P U (\e$B35N,\e(B)
 @findex gnus-summary-unmark-all-processable
-\e$B$9$Y$F$N5-;v$+$i%W%m%;%90u$r<h$j=|$-$^$9\e(B
-(@code{gnus-summary-unmark-all-processable})\e$B!#\e(B
+\e$B$9$Y$F$N5-;v$+$i%W%m%;%90u$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-summary-unmark-all-processable})\e$B!#\e(B
 
 @item M P i
-@kindex M P i \e$B!J35N,!K\e(B
+@kindex M P i (\e$B35N,\e(B)
 @findex gnus-uu-invert-processable
-\e$B%W%m%;%90u$NIU$$$F$$$k5-;v$H$=$&$G$J$$5-;v$r5U$K$7$^$9\e(B
-(@code{gnus-uu-mark-by-regexp})\e$B!#\e(B
+\e$B%W%m%;%90u$NIU$$$F$$$k5-;v$H$=$&$G$J$$5-;v$r5U$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-by-regexp})\e$B!#\e(B
 
 @item M P R
-@kindex M P R \e$B!J35N,!K\e(B
+@kindex M P R (\e$B35N,\e(B)
 @findex gnus-uu-mark-by-regexp
 \e$B@55,I=8=$K$h$C$F5-;v$K0u$rIU$1$^$9\e(B (@code{gnus-uu-mark-by-regexp})\e$B!#\e(B
 
+@item M P G
+@kindex M P G (\e$B35N,\e(B)
+@findex gnus-uu-unmark-by-regexp
+@code{Subject} \e$B$,@55,I=8=$K%^%C%A$9$k5-;v$+$i0u$r:o=|$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-unmark-by-regexp})\e$B!#\e(B
+
 @item M P r
-@kindex M P r \e$B!J35N,!K\e(B
+@kindex M P r (\e$B35N,\e(B)
 @findex gnus-uu-mark-region
 \e$B%j!<%8%g%s$N5-;v$K0u$rIU$1$^$9\e(B (@code{gnus-uu-mark-region})\e$B!#\e(B
 
 @item M P t
-@kindex M P t \e$B!J35N,!K\e(B
+@kindex M P t (\e$B35N,\e(B)
 @findex gnus-uu-mark-thread
-\e$B8=:_$N!JI{!K%9%l%C%I$N$9$Y$F$N5-;v$K0u$rIU$1$^$9\e(B
-(@code{gnus-uu-mark-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BI{\e(B) \e$B%9%l%C%I$N$9$Y$F$N5-;v$K0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-thread})\e$B!#\e(B
 
 @item M P T
-@kindex M P T \e$B!J35N,!K\e(B
+@kindex M P T (\e$B35N,\e(B)
 @findex gnus-uu-unmark-thread
-\e$B8=:_$N!JI{!K%9%l%C%I$N$9$Y$F$N5-;v$+$i0u$r<h$j=|$-$^$9\e(B
-(@code{gnus-uu-unamrk-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BI{\e(B) \e$B%9%l%C%I$N$9$Y$F$N5-;v$+$i0u$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-uu-unamrk-thread})\e$B!#\e(B
 
 @item M P v
-@kindex M P v \e$B!J35N,!K\e(B
+@kindex M P v (\e$B35N,\e(B)
 @findex gnus-uu-mark-over
-\e$B@\F,0z?t$h$j$bBg$-$J%9%3%"$r;}$D$9$Y$F$N5-;v$K0u$rIU$1$^$9\e(B
-(@code{gnus-uu-mark-over})\e$B!#\e(B
+\e$B@\F,0z?t$h$j$bBg$-$J%9%3%"$r;}$D$9$Y$F$N5-;v$K0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-over})\e$B!#\e(B
 
 @item M P s
-@kindex M P s \e$B!J35N,!K\e(B
+@kindex M P s (\e$B35N,\e(B)
 @findex gnus-uu-mark-series
 \e$B8=:_$N0lO"$N5-;v$K0u$rIU$1$^$9\e(B (@code{gnus-uu-mark-series})\e$B!#\e(B
 
 @item M P S
-@kindex M P S \e$B!J35N,!K\e(B
+@kindex M P S (\e$B35N,\e(B)
 @findex gnus-uu-mark-sparse
-\e$B4{$K$$$/$D$+0u$NIU$$$?5-;v$r;}$D0lO"$N5-;v72A4$F$K0u$rIU$1$^$9\e(B
-(@code{gnus-uu-mark-sparse})\e$B!#\e(B
+\e$B4{$K$$$/$D$+0u$NIU$$$?5-;v$r;}$D0lO"$N5-;v72A4$F$K0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-sparse})\e$B!#\e(B
 
 @item M P a
-@kindex M P a \e$B!J35N,!K\e(B
+@kindex M P a (\e$B35N,\e(B)
 @findex gnus-uu-mark-all
-\e$B0lO"$N5-;v$,=P$F$/$k=gHV$K$=$l$KB0$9$k$9$Y$F$N5-;v$K0u$rIU$1$^$9\e(B
-(@code{gnus-uu-mark-all})\e$B!#\e(B
+\e$B0lO"$N5-;v$,=P$F$/$k=gHV$K$=$l$KB0$9$k$9$Y$F$N5-;v$K0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-all})\e$B!#\e(B
 
 @item M P b
-@kindex M P b \e$B!J35N,!K\e(B
+@kindex M P b (\e$B35N,\e(B)
 @findex gnus-uu-mark-buffer
-\e$B%P%C%U%!$N$9$Y$F$N5-;v$r8=$l$F$$$k=gHV$K0u$rIU$1$^$9\e(B
-(@code{gnus-uu-mark-buffer})\e$B!#\e(B
+\e$B%P%C%U%!$N$9$Y$F$N5-;v$r8=$l$F$$$k=gHV$K0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-buffer})\e$B!#\e(B
 
 @item M P k
-@kindex M P k \e$B!J35N,!K\e(B
+@kindex M P k (\e$B35N,\e(B)
 @findex gnus-summary-kill-process-mark
-\e$B8=:_$N%W%m%;%90u$r%9%?%C%/$K@Q$s$G!"$9$Y$F$N5-;v$rL50u$K$7$^$9\e(B
-(@code{gnus-summary-kill-process-mark})\e$B!#\e(B
+\e$B8=:_$N%W%m%;%90u$r%9%?%C%/$K@Q$s$G!"$9$Y$F$N5-;v$rL50u$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-kill-process-mark})\e$B!#\e(B
 
 @item M P y
-@kindex M P y \e$B!J35N,!K\e(B
+@kindex M P y (\e$B35N,\e(B)
 @findex gnus-summary-yank-process-mark
-\e$B%9%?%C%/$+$iA02s$N%W%m%;%90u$r<h$j=P$7$F!"$=$l$rI|85$7$^$9\e(B
-(@code{gnus-summary-yank-process-mark})\e$B!#\e(B
+\e$B%9%?%C%/$+$iA02s$N%W%m%;%90u$r<h$j=P$7$F!"$=$l$rI|85$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-yank-process-mark})\e$B!#\e(B
 
 @item M P w
-@kindex M P w \e$B!J35N,!K\e(B
+@kindex M P w (\e$B35N,\e(B)
 @findex gnus-summary-save-process-mark
-\e$B8=:_$N%W%m%;%90u$r%9%?%C%/$K@Q$_$^$9\e(B
-(@code{gnus-summary-save-process-mark})\e$B!#\e(B
+\e$B8=:_$N%W%m%;%90u$r%9%?%C%/$K@Q$_$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-process-mark})\e$B!#\e(B
 
 @end table
 
+\e$B$=$7$F!"$I$&$d$C$F5-;v$NK\J8\e(B (body) \e$B$NFbMF$r4p$K%W%m%;%90u$rIU$1$k$+$O!"\e(B
+@pxref{Searching for Articles} \e$B$N\e(B @kbd{&} \e$BL?Na$r;2>H$7$F2<$5$$!#\e(B
 
 @node Limiting
 @section \e$B@)8B$r$9$k\e(B
 @cindex  limiting
 
-\e$B35N,%P%C%U%!$,8=:_%0%k!<%W$K$"$k5-;v$N0lIt$@$1$rI=<($9$k$h$&$K@)8B$G$-$l$P\e(B
-\e$BJXMx$J$3$H$,$"$j$^$9!#B?$/$N@)8BL?Na$,;}$D8z2L$O35N,%P%C%U%!$+$i>/$7!J$b$7\e(B
-\e$B$/$OB?$/!K$N5-;v$r35N,%P%C%U%!$+$i:o=|$9$k$3$H$G$9!#\e(B
+\e$B35N,%P%C%U%!$,8=:_%0%k!<%W$K$"$k5-;v$N0lIt$@$1$rI=<($9$k$h$&$K@)8B$G$-$l\e(B
+\e$B$PJXMx$J$3$H$,$"$j$^$9!#B?$/$N@)8BL?Na$,;}$D8z2L$O35N,%P%C%U%!$+$i>/\e(B
+\e$B$7\e(B (\e$B$b$7$/$OB?$/\e(B) \e$B$N5-;v$r35N,%P%C%U%!$+$i:o=|$9$k$3$H$G$9!#\e(B
 
 \e$B$9$Y$F$N@)8BL?Na$O%5!<%P!<$+$i4{$K<hF@$5$l$?5-;v$N0lItJ,$K:nMQ$7$^$9!#$3\e(B
 \e$B$l$i$NL?Na$O$I$l$b%5!<%P!<$KDI2C$N5-;v$rMW5a$7$^$;$s!#\e(B
@@ -4736,87 +5260,87 @@ Prefixes})\e$B!#\e(B
 
 @item / /
 @itemx / s
-@kindex / / \e$B!J35N,!K\e(B
+@kindex / / (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-subject
-\e$B35N,%P%C%U%!$r$$$/$D$+$NI=Bj$H9gCW$9$k$b$N$@$1$K@)8B$7$^$9\e(B
-(@code{gnus-summary-limit-to-subject})\e$B!#\e(B
+\e$B35N,%P%C%U%!$r$$$/$D$+$NI=Bj$H9gCW$9$k$b$N$@$1$K@)8B$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-to-subject})\e$B!#\e(B
 
 @item / a
-@kindex / a \e$B!J35N,!K\e(B
+@kindex / a (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-author
-\e$B35N,%P%C%U%!$r2??M$+$NCx<T$K9gCW$9$k$b$N$@$1$K@)8B$7$^$9\e(B
-(@code{gnus-summary-limit-to-author})\e$B!#\e(B
+\e$B35N,%P%C%U%!$r2??M$+$NCx<T$K9gCW$9$k$b$N$@$1$K@)8B$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-to-author})\e$B!#\e(B
 
 @item / x
 @kindex / x (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-extra
-``\e$BDI2C\e(B'' \e$B$N%X%C%@!<$N0l$D$K9gCW$9$k5-;v$K35N,%P%C%U%!$r@)8B$7$^$9\e(B
-(@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-author}).
+``\e$BDI2C\e(B'' \e$B$N%X%C%@!<$N0l$D$K9gCW$9$k5-;v$K35N,%P%C%U%!$r@)8B$7$^\e(B
+\e$B$9\e(B (@pxref{To From Newsgroups}) (@code{gnus-summary-limit-to-extra}).
 
 @item / u
 @itemx x
-@kindex / u \e$B!J35N,!K\e(B
-@kindex x \e$B!J35N,!K\e(B
+@kindex / u (\e$B35N,\e(B)
+@kindex x (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-unread
-\e$B35N,%P%C%U%!$r4{FI$N0u$,IU$$$F$$$J$$5-;v$K@)8B$7$^$9\e(B
-(@code{gnus-summary-limit-to-unread})\e$B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"%P%C\e(B
+\e$B35N,%P%C%U%!$r4{FI$N0u$,IU$$$F$$$J$$5-;v$K@)8B$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-to-unread})\e$B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"%P%C\e(B
 \e$B%U%!$r87L)$KL$FI5-;v$N$_$K@)8B$7$^$9!#$3$l$O!"2D;k$HJ]N1$N5-;v$O4^$^$l$J\e(B
 \e$B$$$H$$$&$3$H$G$9!#\e(B
 
 @item / m
-@kindex / m \e$B!J35N,!K\e(B
+@kindex / m (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-marks
-\e$B0u$r?R$M$F!"$=$N0u$,IU$$$F$$$k5-;v$K@)8B$7$^$9\e(B
-(@code{gnus-summary-limit-to-marks})\e$B!#\e(B
+\e$B0u$r?R$M$F!"$=$N0u$,IU$$$F$$$k5-;v$K@)8B$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-to-marks})\e$B!#\e(B
 
 @item / t
-@kindex / t \e$B!J35N,!K\e(B
+@kindex / t (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-age
-\e$B?t;z$r?R$M$F!"35N,%P%C%U%!$r$=$N?t;z$NF|$h$j8E$$!J$b$7$/$OF1$8!K5-;v$K@)8B\e(B
-\e$B$7$^$9\e(B (@code{gnus-summary-limit-to-marks})\e$B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"\e(B
+\e$B?t;z$r?R$M$F!"35N,%P%C%U%!$r$=$N?t;z$NF|$h$j8E$$\e(B (\e$B$b$7$/$OF1$8\e(B) \e$B5-;v$K@)\e(B
+\e$B8B$7$^$9\e(B (@code{gnus-summary-limit-to-age})\e$B!#$b$7@\F,0z?t$,M?$($i$l$l$P!"\e(B
 \e$B$=$N?t;z$NF|$h$j$b?7$7$$5-;v$K@)8B$7$^$9!#\e(B
 
 @item / n
-@kindex / n \e$B!J35N,!K\e(B
+@kindex / n (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-articles
-\e$B35N,%P%C%U%!$r8=:_$N5-;v$K@)8B$7$^$9\e(B
-(@code{gnus-summary-limit-to-articles})\e$B!#%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H$$$^\e(B
-\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B35N,%P%C%U%!$r8=:_$N5-;v$K@)8B$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-to-articles})\e$B!#%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H\e(B
+\e$B$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item / w
-@kindex / w \e$B!J35N,!K\e(B
+@kindex / w (\e$B35N,\e(B)
 @findex gnus-summary-pop-limit
-\e$BA0$N@)8B$r%9%?%C%/$+$i<h$j=P$7$F!"I|85$7$^$9\e(B
-(@code{gnus-summary-pop-limit})\e$B!#$b$7@\F,0z?t$rM?$($i$l$l$P!"$9$Y$F$N@)\e(B
-\e$B8B$r%9%?%C%/$+$i<h$j=P$7$^$9!#\e(B
+\e$BA0$N@)8B$r%9%?%C%/$+$i<h$j=P$7$F!"I|85$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-pop-limit})\e$B!#$b$7@\F,0z?t$rM?$($i$l$l$P!"$9$Y$F$N\e(B
+\e$B@)8B$r%9%?%C%/$+$i<h$j=P$7$^$9!#\e(B
 
 @item / v
-@kindex / v \e$B!J35N,!K\e(B
+@kindex / v (\e$B35N,\e(B)
 @findex gnus-summary-limit-to-score
 \e$B35N,%P%C%U%!$r$"$k%9%3%"$HF1$8$+!"$=$l$h$jBg$-$J%9%3%"$r;}$D5-;v$K@)8B$7\e(B
 \e$B$^$9\e(B (@code{gnus-summary-limit-to-score})\e$B!#\e(B
 
 @item / E
 @itemx M S
-@kindex M S \e$B!J35N,!K\e(B
-@kindex / E \e$B!J35N,!K\e(B
+@kindex M S (\e$B35N,\e(B)
+@kindex / E (\e$B35N,\e(B)
 @findex gnus-summary-limit-include-expunged
-\e$B$9$Y$F$N>C5n$5$l$?5-;v$rI=<($7$^$9\e(B
-(@code{gnus-summary-limit-include-expunged})\e$B!#\e(B
+\e$B$9$Y$F$N>C5n$5$l$?5-;v$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-include-expunged})\e$B!#\e(B
 
 @item / D
-@kindex / D \e$B!J35N,!K\e(B
+@kindex / D (\e$B35N,\e(B)
 @findex gnus-summary-limit-include-dormant
 \e$B$9$Y$F$NJ]N15-;v$rI=<($7$^$9\e(B (@code{gnus-summary-limit-include-dormant})\e$B!#\e(B
 
 @item / *
-@kindex / * \e$B!J35N,!K\e(B
+@kindex / * (\e$B35N,\e(B)
 @findex gnus-summary-limit-include-cached
-\e$B$9$Y$F$N%-%c%C%7%e$KF~$C$F$$$k5-;v$rI=<($7$^$9\e(B
-(@code{gnus-summary-limit-include-cached})\e$B!#\e(B
+\e$B$9$Y$F$N%-%c%C%7%e$KF~$C$F$$$k5-;v$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-include-cached})\e$B!#\e(B
 
 @item / d
-@kindex / d \e$B!J35N,!K\e(B
+@kindex / d (\e$B35N,\e(B)
 @findex gnus-summary-limit-exclude-dormant
 \e$B$9$Y$F$NJ]N15-;v$r1#$7$^$9\e(B (@code{gnus-summary-limit-exclude-dormant})\e$B!#\e(B
 
@@ -4826,28 +5350,26 @@ Prefixes})\e$B!#\e(B
 \e$BA4$F$N0uIU$-5-;v$r=|30$7$^$9\e(B (@code{gnus-summary-limit-exclude-marks})\e$B!#\e(B
 
 @item / T
-@kindex / T \e$B!J35N,!K\e(B
+@kindex / T (\e$B35N,\e(B)
 @findex gnus-summary-limit-include-thread
-\e$B8=:_$N%9%l%C%I$N$9$Y$F$N5-;v$rI=<($7$^$9\e(B
-(@code{gnus-summary-limit-include-thread})\e$B!#\e(B
+\e$B8=:_$N%9%l%C%I$N$9$Y$F$N5-;v$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-include-thread})\e$B!#\e(B
 
 @item / c
-@kindex / c \e$B!J35N,!K\e(B
+@kindex / c (\e$B35N,\e(B)
 @findex gnus-summary-limit-exclude-childless-dormant
-\e$B;R5-;v$NL5$$$9$Y$F$NJ]N15-;v$r1#$7$^$9\e(B
-(@code{gnus-summary-limit-exclude-childless-dormant})\e$B!#\e(B
-
+\e$B;R5-;v$NL5$$$9$Y$F$NJ]N15-;v$r1#$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-exclude-childless-dormant})\e$B!#\e(B
 
 @item / C
-@kindex / C \e$B!J35N,!K\e(B
+@kindex / C (\e$B35N,\e(B)
 @findex gnus-summary-limit-mark-excluded-as-read
-\e$B$9$Y$F$NL$FI$N$_$N0u$N5-;v$r4{FI$H$7$F0u$rIU$1$^$9\e(B
-(@code{gnus-summary-limit-mark-excluded-as-read})\e$B!#$b$7@\F,0z?t$,M?$($i\e(B
-\e$B$l$l$P!"2D;k$HJ]N1$N$_$N0u$N5-;v$b4{FI$H$7$F0u$rIU$1$^$9!#\e(B
+\e$B$9$Y$F$NL$FI$N$_$N0u$N5-;v$r4{FI$H$7$F0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-limit-mark-excluded-as-read})\e$B!#$b$7@\F,0z?t$,M?$(\e(B
+\e$B$i$l$l$P!"2D;k$HJ]N1$N$_$N0u$N5-;v$b4{FI$H$7$F0u$rIU$1$^$9!#\e(B
 
 @end table
 
-
 @node Threading
 @section \e$B%9%l%C%I\e(B
 @cindex threading
@@ -4856,14 +5378,15 @@ Prefixes})\e$B!#\e(B
 Gnus \e$B$O=i4|@_Dj$G5-;v$r%9%l%C%I$K$7$^$9!#\e(B@dfn{\e$B%9%l%C%I$K$9$k\e(B} \e$B$H$O!"$"$k\e(B
 \e$B5-;v$X$N1~Ez$r1~Ez$7$?5-;v$ND>8e$KCV$/!=!=3,AXE*N.57$G\e(B \e$B$H$$$&$3$H$G$9!#\e(B
 
-\e$B%9%l%C%I$O5-;v$N\e(B @code{References} \e$BMs$rD4$Y$k$3$H$K$h$C$F9T$o$l$^$9!#40A4\e(B
-\e$B$J@$3&$G$O!"$3$l$@$1$GNI$$LZ$r:n$j>e$2$k$N$K==J,$J$N$G$9$,!"IT1?$J$3$H$K!"\e(B
-@code{References} \e$BMs$O$7$P$7$P2u$l$F$$$k$+!";~$K$OC1$K$J$$$H$$$&$3$H$,$"$j\e(B
-\e$B$^$9!#IT;W5D$J%K%e!<%9$NA}?#$,LdBj$rA}$d$7$^$9$N$G!"4n$P$7$$7k2L$rF@$k$?$a\e(B
-\e$B$K$OB>$NH/8+K!$r:NMQ$7$J$1$l$P$J$j$^$;$s!#2a>j$JBP:vK!$OB8:_$7$F$$$F!"$=$N\e(B
-\e$B62$k$Y$->\:Y$O\e(B @pxref{Customizing Threading} \e$B$K>\$7$/=q$$$F$"$j$^$9!#\e(B
+\e$B%9%l%C%I$O5-;v$N\e(B @code{References} \e$BMs$rD4$Y$k$3$H$K$h$C$F9T$o$l$^$9!#40\e(B
+\e$BA4$J@$3&$G$O!"$3$l$@$1$GNI$$LZ$r:n$j>e$2$k$N$K==J,$J$N$G$9$,!"IT1?$J$3$H\e(B
+\e$B$K!"\e(B@code{References} \e$BMs$O$7$P$7$P2u$l$F$$$k$+!";~$K$OC1$K$J$$$H$$$&$3$H\e(B
+\e$B$,$"$j$^$9!#IT;W5D$J%K%e!<%9$NA}?#$,LdBj$rA}$d$7$^$9$N$G!"4n$P$7$$7k2L$r\e(B
+\e$BF@$k$?$a$K$OB>$NH/8+K!$r:NMQ$7$J$1$l$P$J$j$^$;$s!#2a>j$JBP:vK!$OB8:_$7$F\e(B
+\e$B$$$F!"$=$N62$k$Y$->\:Y$O\e(B @pxref{Customizing Threading} \e$B$K>\$7$/=q$$$F$"\e(B
+\e$B$j$^$9!#\e(B
 
-\e$B$^$:!"35G0$N354Q$G$9!'\e(B
+\e$B$^$:!"35G0$N354Q$G$9\e(B:
 
 @table @dfn
 @item \e$B:,K\\e(B (root)
@@ -4873,14 +5396,14 @@ Gnus \e$B$O=i4|@_Dj$G5-;v$r%9%l%C%I$K$7$^$9!#\e(B@dfn{\e$B%9%l%C%I$K$9$k\e(B} \e$B$H$
 \e$BLZ$N$h$&$J5-;v$N9=@.$G$9!#\e(B
 
 @item \e$BItJ,%9%l%C%I\e(B (sub-thread)
-\e$BLZ$N$h$&$J9=B$$N!J$h$j!K>.$5$JItJ,$G$9!#\e(B
+\e$BLZ$N$h$&$J9=B$$N\e(B (\e$B$h$j\e(B) \e$B>.$5$JItJ,$G$9!#\e(B
 
 @item \e$BL5B+G{%9%l%C%I\e(B (loose threads)
-\e$B5-;v$N4|8B@Z$l:o=|$d!":,K\$,4{$KA02s$N%;%C%7%g%s$GFI$^$l$?$3$H$K$h$j35N,%P%C\e(B
-\e$B%U%!$KI=<($5$l$J$$!"Ey$NM}M3$K$h$j!"%9%l%C%I$O$7$P$7$P:,K\$r<:$$$^$9!#$=$N\e(B
-\e$B$h$&$J$H$-$K$O!"IaDL$OB?$/$NItJ,%9%l%C%I$,$"$C$F!"K\Ev$O#1$D$N%9%l%C%I$KB0\e(B
-\e$B$7$F$$$k$N$G$9$,!":,K\$K$O$D$J$,$C$F$$$J$$!"$H$$$&$3$H$K$J$j$^$9!#$3$&$$$&\e(B
-\e$B%9%l%C%I$,L5B+G{%9%l%C%I$H8F$P$l$F$$$^$9!#\e(B
+\e$B5-;v$N4|8B@Z$l:o=|$d!":,K\$,4{$KA02s$N%;%C%7%g%s$GFI$^$l$?$3$H$K$h$j35N,\e(B
+\e$B%P%C%U%!$KI=<($5$l$J$$!"Ey$NM}M3$K$h$j!"%9%l%C%I$O$7$P$7$P:,K\$r<:$$$^$9!#\e(B
+\e$B$=$N$h$&$J$H$-$K$O!"IaDL$OB?$/$NItJ,%9%l%C%I$,$"$C$F!"K\Ev$O0l$D$N%9%l%C\e(B
+\e$B%I$KB0$7$F$$$k$N$G$9$,!":,K\$K$O$D$J$,$C$F$$$J$$!"$H$$$&$3$H$K$J$j$^$9!#\e(B
+\e$B$3$&$$$&%9%l%C%I$,L5B+G{%9%l%C%I$H8F$P$l$F$$$^$9!#\e(B
 
 @item \e$B%9%l%C%I=8$a\e(B (thread gathering)
 \e$B$^$P$i%9%l%C%I$rBg$-$J%9%l%C%I$K=8$a$h$&$H$9$k;n$_$G$9!#\e(B
@@ -4890,25 +5413,23 @@ Gnus \e$B$O=i4|@_Dj$G5-;v$r%9%l%C%I$K$7$^$9!#\e(B@dfn{\e$B%9%l%C%I$K$9$k\e(B} \e$B$H$
 
 @end table
 
-
 @menu
-* Customizing Threading::     \e$BJQ992DG=$J%9%l%C%I$K1F6A$9$kJQ?t\e(B
-* Thread Commands::           \e$B35N,%P%C%U%!$G$N%9%l%C%I$K4p$E$$$?L?Na\e(B
+* Customizing Threading:: \e$BJQ992DG=$J%9%l%C%I$K1F6A$9$kJQ?t\e(B
+* Thread Commands::       \e$B35N,%P%C%U%!$G$N%9%l%C%I$K4p$E$$$?L?Na\e(B
 @end menu
 
-
 @node Customizing Threading
 @subsection \e$B%9%l%C%I$r%+%9%?%^%$%:$9$k\e(B
 @cindex customizing threading
 
 @menu
-* Loose Threads::        Gnus \e$B$,L5B+G{%9%l%C%I$r=8$a$FBg$-$J%9%l%C%I$K$9$kJ}K!\e(B
-* Filling In Threads::   \e$B%9%l%C%I$rKd$a$k\e(B
-* More Threading::       \e$B%9%l%C%I$r$$$8$/$k$5$i$KB?$/$NJQ?t\e(B
-* Low-Level Threading::  \e$B$3$l$G=*$o$C$?$H;W$C$?$G$7$g$&\e(B... \e$B$G$b$"$J$?$O4V0c$C$F$$$?!*\e(B
+* Loose Threads::       Gnus \e$B$,L5B+G{%9%l%C%I$r=8$a$FBg$-$J%9%l%C%I$K$9$kJ}K!\e(B
+* Filling In Threads::  \e$B%9%l%C%I$rKd$a$k\e(B
+* More Threading::      \e$B%9%l%C%I$r$$$8$/$k$5$i$KB?$/$NJQ?t\e(B
+* Low-Level Threading:: \e$B$3$l$G=*$o$C$?$H;W$C$?$G$7$g$&\e(B... \e$B$G$b$"$J$?$O4V\e(B
+                        \e$B0c$C$F$$$?\e(B!
 @end menu
 
-
 @node Loose Threads
 @subsubsection \e$BL5B+G{%9%l%C%I\e(B
 @cindex <
@@ -4918,15 +5439,15 @@ Gnus \e$B$O=i4|@_Dj$G5-;v$r%9%l%C%I$K$7$^$9!#\e(B@dfn{\e$B%9%l%C%I$K$9$k\e(B} \e$B$H$
 @table @code
 @item gnus-summary-make-false-root
 @vindex gnus-summary-make-false-root
-\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$OA4$F$N$D$J$,$C$F$$$J$$ItJ,LZ$r#1$D$NBg$-\e(B
-\e$B$JLZ$K$7$F!"D:>e$K$_$;$+$1$N:,K\$r:n$j$^$9!#!J$A$g$C$HBT$C$F$/$@$5$$!#D:\e(B
-\e$B>e$K:,85\e(B (root) \e$B$G$9$C$F!)$($(!"$=$&$J$N$G$9!#!K$D$J$,$C$F$$$J$$ItJ,LZ$OK\\e(B
-\e$BEv$N:,K\$,4|8B@Z$l:o=|$5$l$?$+!"A02s$N%;%C%7%g%s$G:,K\$rFI$s$@$j:o=|$7\e(B
-\e$B$?$H$-$K$G$-$^$9!#\e(B
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$OA4$F$N$D$J$,$C$F$$$J$$ItJ,LZ$r0l$D$NBg\e(B
+\e$B$-$JLZ$K$7$F!"D:>e$K$_$;$+$1$N:,K\$r:n$j$^$9!#\e(B(\e$B$A$g$C$HBT$C$F$/$@$5$$!#\e(B
+\e$BD:>e$K:,85\e(B (root) \e$B$G$9$C$F\e(B? \e$B$($(!"$=$&$J$N$G$9!#\e(B) \e$B$D$J$,$C$F$$$J$$ItJ,LZ\e(B
+\e$B$OK\Ev$N:,K\$,4|8B@Z$l:o=|$5$l$?$+!"A02s$N%;%C%7%g%s$G:,K\$rFI$s$@$j:o=|\e(B
+\e$B$7$?$H$-$K$G$-$^$9!#\e(B
 
-\e$BK\Ev$N%9%l%C%I$,L5$$$H$-$O!"\e(Bgnus \e$B$O2?$+$G$C$A>e$2$r$9$kI,MW$,$"$j$^$9!#$3\e(B
-\e$B$NJQ?t$O\e(B gnus \e$B$,;H$&$Y$-$4$^$+$7$NJ}K!$r<($7$F$$$^$9!#CM$H$7$F$H$k$3$H$,$G\e(B
-\e$B$-$k#4$D$N8uJd$,$"$j$^$9!#\e(B
+\e$BK\Ev$N%9%l%C%I$,L5$$$H$-$O!"\e(Bgnus \e$B$O2?$+$G$C$A>e$2$r$9$kI,MW$,$"$j$^$9!#\e(B
+\e$B$3$NJQ?t$O\e(B gnus \e$B$,;H$&$Y$-$4$^$+$7$NJ}K!$r<($7$F$$$^$9!#CM$H$7$F$H$k$3$H\e(B
+\e$B$,$G$-$k;M$D$N8uJd$,$"$j$^$9!#\e(B
 
 @iftex
 @iflatex
@@ -4945,22 +5466,23 @@ Gnus \e$B$O=i4|@_Dj$G5-;v$r%9%l%C%I$K$7$^$9!#\e(B@dfn{\e$B%9%l%C%I$K$9$k\e(B} \e$B$H$
 
 @item \e$BM\;R\e(B (adopt)
 Gnus \e$B$O:G=i$N8I;y$r?F$K$7$^$9!#$3$N?F$O$9$Y$F$NB>$N5-;v$rM\;R$K$7$^$9!#\e(B
-\e$B$3$NM\;R5-;v$O!"I8=`$N3Q3g8L\e(B (@samp{[]}) \e$B$NBe$o$j$K!"@h$N@m$C$?3g8L\e(B
-(@samp{<>}) \e$B$G0uIU$1$i$l$^$9!#$3$l$,=i4|@_Dj$NJ}K!$G$9!#\e(B
+\e$B$3$NM\;R5-;v$O!"I8=`$N3Q3g8L\e(B (@samp{[]}) \e$B$NBe$o$j$K!"@h$N@m$C$?3g\e(B
+\e$B8L\e(B (@samp{<>}) \e$B$G0uIU$1$i$l$^$9!#$3$l$,=i4|@_Dj$NJ}K!$G$9!#\e(B
 
 @item \e$B$_$;$+$1\e(B (dummy)
 @vindex gnus-summary-dummy-line-format
 Gnus \e$B$O?F$N$U$j$r$9$k$_$;$+$1$N35N,9T$r$D$/$j$^$9!#$_$;$+$1$N9T$O$I$NK\\e(B
 \e$BEv$N5-;v$K$bBP1~$7$^$;$s$N$G!"$=$l$rA*Br$9$k$3$H$O!"$_$;$+$1$N5-;v$N8e$N\e(B
 \e$B:G=i$NK\Ev$N5-;v$rA*Br$r$9$k$@$1$K$J$j$^$9!#$_$;$+$1$N:,K\$NMM<0$r;XDj\e(B
-\e$B$9$k$?$a$K!"\e(B @code{gnus-summary-dummy-line-format} \e$B$,;H$o$l$^$9!#$3$l$O\e(B
-\e$B$?$C$?0l$D$@$1$N%U%)!<%^%C%H$N;EMM$r<u$1IU$1$^$9\e(B: @samp{S} \e$B$G!"$3$l$O5-\e(B
-\e$B;v$NI=Bj$G$9!#\e(B @xref{Formatting Variables}.
+\e$B$9$k$?$a$K!"\e(B@code{gnus-summary-dummy-line-format} \e$B$,;H$o$l$^$9!#$3$l$O$?$C\e(B
+\e$B$?0l$D$@$1$N%U%)!<%^%C%H$N;EMM$r<u$1IU$1$^$9\e(B: @samp{S} \e$B$G!"$3$l$O5-;v$N\e(B
+\e$BI=Bj$G$9!#\e(B@xref{Formatting Variables}.
 
 @item \e$B6u\e(B (empty)
-Gnus \e$B$O<B:]$K$O$I$N5-;v$b?F$K$O$;$:!"C1$K:G=i$N8I;y$r=|$$$F$9$Y$F$N8I;y$N\e(B
-\e$BI=BjMs$r6u$N$^$^$K$7$^$9!#!J<B:]$O!"\e(B@code{gnus-summary-same-subject} \e$B$rI=\e(B
-\e$BBj$H$7$F;H$$$^$9!#\e(B (@pxref{Summary Buffer Format}).\e$B!K\e(B
+Gnus \e$B$O<B:]$K$O$I$N5-;v$b?F$K$O$;$:!"C1$K:G=i$N8I;y$r=|$$$F$9$Y$F$N8I;y\e(B
+\e$B$NI=BjMs$r6u$N$^$^$K$7$^$9!#\e(B
+(\e$B<B:]$O!"\e(B@code{gnus-summary-same-subject} \e$B$rI=Bj$H$7$F;H$$$^\e(B
+\e$B$9\e(B (@pxref{Summary Buffer Format})\e$B!#\e(B)
 
 @item none
 \e$BA4$/$I$N5-;v$b?F$K$7$^$;$s!#%9%l%C%I$r=8$a$F!"0l$D$N5-;v$N8e$KB>$N5-;v$r\e(B
@@ -4972,29 +5494,29 @@ Gnus \e$B$O<B:]$K$O$I$N5-;v$b?F$K$O$;$:!"C1$K:G=i$N8I;y$r=|$$$F$9$Y$F$N8I;y$N\e(B
 
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
-\e$BL5B+G{%9%l%C%I$O5-;v$NI=Bj$rHf3S$9$k$3$H$K$h$C$F=8$a$i$l$^$9!#$b$7$3$NJQ?t\e(B
-\e$B$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$OL5B+G{%9%l%C%I$r0l$D$NBg$-$JD6%9%l%C%I$K=8\e(B
-\e$B$a$kA0$K!"L5B+G{%9%l%C%I$NI=Bj$,40A4$K0lCW$9$k$3$H$rMW5a$7$^$9!#$3$l$O!"D9\e(B
-\e$B$$I=Bj$N9T$r@Z$jMn$H$7$F$7$^$&4VH4$1$J%K%e!<%9%j!<%@!<$,B8:_$9$k8=:_$G$O!"\e(B
-\e$B$"$^$j$K87$7$$MW5a$+$bCN$l$^$;$s!#$b$7$=$&;W$&$N$J$i!"$3$NJQ?t$rNc$($P\e(B
-20 \e$B$K@_Dj$7$F!"I=Bj$N:G=i$N\e(B 20 \e$BJ8;z$@$1$,0lCW$9$k$3$H$rMW5a$9$k$h$&$K$9$k\e(B
-\e$B$3$H$,$G$-$^$9!#$3$NJQ?t$rK\Ev$KDc$$?t;z$K@_Dj$9$k$H!"\e(Bgnus \e$B$,L\$KF~$kA4$F\e(B
-\e$B$r0l$D$N%9%l%C%I$K=8$a$k$N$r8+$k$3$H$,$G$-$k$G$7$g$&!#$=$7$F!"$=$l$O$"$^$j\e(B
-\e$BM-MQ$G$O$"$j$^$;$s!#\e(B
+\e$BL5B+G{%9%l%C%I$O5-;v$NI=Bj$rHf3S$9$k$3$H$K$h$C$F=8$a$i$l$^$9!#$b$7$3$NJQ\e(B
+\e$B?t$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$OL5B+G{%9%l%C%I$r0l$D$NBg$-$JD6%9%l%C%I\e(B
+\e$B$K=8$a$kA0$K!"L5B+G{%9%l%C%I$NI=Bj$,40A4$K0lCW$9$k$3$H$rMW5a$7$^$9!#$3$l\e(B
+\e$B$O!"D9$$I=Bj$N9T$r@Z$jMn$H$7$F$7$^$&4VH4$1$J%K%e!<%9%j!<%@!<$,B8:_$9$k8=\e(B
+\e$B:_$G$O!"$"$^$j$K87$7$$MW5a$+$bCN$l$^$;$s!#$b$7$=$&;W$&$N$J$i!"$3$NJQ?t$r\e(B
+\e$BNc$($P\e(B 20 \e$B$K@_Dj$7$F!"I=Bj$N:G=i$N\e(B 20 \e$BJ8;z$@$1$,0lCW$9$k$3$H$rMW5a$9$k$h\e(B
+\e$B$&$K$9$k$3$H$,$G$-$^$9!#$3$NJQ?t$rK\Ev$KDc$$?t;z$K@_Dj$9$k$H!"\e(Bgnus \e$B$,L\\e(B
+\e$B$KF~$kA4$F$r0l$D$N%9%l%C%I$K=8$a$k$N$r8+$k$3$H$,$G$-$k$G$7$g$&!#$=$7$F!"\e(B
+\e$B$=$l$O$"$^$jM-MQ$G$O$"$j$^$;$s!#\e(B
 
 @cindex fuzzy article gathering
 \e$B$3$NJQ?t$rFCJL$JCM\e(B @code{fuzzy} \e$B$K@_Dj$9$l$P!"\e(Bgnus \e$B$OI=Bj$K$"$$$^$$$JJ8\e(B
 \e$B;zNsHf3S%"%k%4%j%:%`$r;H$$$^$9\e(B (@pxref{Fuzzy Matching})\e$B!#\e(B
 
-@item gnus-sumplify-subject-fuzzy-regexp
+@item gnus-simplify-subject-fuzzy-regexp
 @vindex gnus-simplify-subject-fuzzy-regexp
 \e$B$3$l$O@55,I=8=$+!"$"$$$^$$I=Bj;XDj$,;H$o$l$F$$$k$H$-$KI=Bj$+$i9gCW$7$?$b\e(B
 \e$B$N$,<h$j=|$+$l$k!"@55,I=8=$N%j%9%H$G$"$k$3$H$,$G$-$^$9!#\e(B
 
 @item gnus-simplify-ignored-prefixes
 @vindex gnus-simplify-igonored-prefixes
-\e$B$b$7\e(B @code{gnus-summary-gather-subject-limit} \e$B$r\e(B 10 \e$B$/$i$$$KDc$/@_Dj$7$?$J\e(B
-\e$B$i$P!"$3$NJQ?t$r2?$+0UL#$N$"$k$b$N$K@_Dj$9$k$3$H$r9M$($k$G$7$g$&!'\e(B
+\e$B$b$7\e(B @code{gnus-summary-gather-subject-limit} \e$B$r\e(B 10 \e$B$/$i$$$KDc$/@_Dj$7$?\e(B
+\e$B$J$i$P!"$3$NJQ?t$r2?$+0UL#$N$"$k$b$N$K@_Dj$9$k$3$H$r9M$($k$G$7$g$&\e(B:
 
 @c Written by Michael Ernst <mernst@cs.rice.edu>
 @lisp
@@ -5018,15 +5540,17 @@ Gnus \e$B$O<B:]$K$O$I$N5-;v$b?F$K$O$;$:!"C1$K:G=i$N8I;y$r=|$$$F$9$Y$F$N8I;y$N\e(B
        "\\)?\\]?:?[ \t]*"))
 @end lisp
 
-\e$B$3$N@55,I=8=$K9gCW$9$k$9$Y$F$N8l$O!"\e(B2\e$B$D$NI=Bj$rHf3S$9$kA0$K<h$j=|$+$l$^$9!#\e(B
+\e$B$3$N@55,I=8=$K9gCW$9$k$9$Y$F$N8l$O!"Fs$D$NI=Bj$rHf3S$9$kA0$K<h$j=|$+$l$^\e(B
+\e$B$9!#\e(B
 
 @item gnus-simplify-subject-functions
 @vindex gnus-simplify-subject-functions
-@code{nil} \e$B$G$J$$$H!"$3$NJQ?t$O\e(B @code{gnus-summary-gather-subject-limit}
-\e$B$r>e=q$-$7$^$9!#$3$NJQ?t$OJ8;zNs\e(B @code{Subject} \e$B$rH?I|$7$F4JC1$J7A$K$?$I\e(B
-\e$B$jCe$/$?$a$KE,MQ$9$k4X?t$N%j%9%H$G$"$kI,MW$,$"$j$^$9!#\e(B
+@code{nil} \e$B$G$J$$$H!"$3$NJQ?t\e(B
+\e$B$O\e(B @code{gnus-summary-gather-subject-limit} \e$B$r>e=q$-$7$^$9!#$3$NJQ?t$OJ8\e(B
+\e$B;zNs\e(B @code{Subject} \e$B$rH?I|$7$F4JC1$J7A$K$?$I$jCe$/$?$a$KE,MQ$9$k4X?t$N%j\e(B
+\e$B%9%H$G$"$kI,MW$,$"$j$^$9!#\e(B
 
-\e$B$3$N%j%9%H$KF~$l$FLr$KN)$D$h$&$J4X?t$O<!$N$h$&$J$b$N$G$9!'\e(B
+\e$B$3$N%j%9%H$KF~$l$FLr$KN)$D$h$&$J4X?t$O<!$N$h$&$J$b$N$G$9\e(B:
 
 @table @code
 @item gnus-simplify-subject-re
@@ -5044,24 +5568,24 @@ Gnus \e$B$O<B:]$K$O$I$N5-;v$b?F$K$O$;$:!"C1$K:G=i$N8I;y$r=|$$$F$9$Y$F$N8I;y$N\e(B
 
 \e$B$b$A$m$s!"$"$J$?<+?H$N4X?t$r=q$/$3$H$b$G$-$^$9!#\e(B
 
-
 @item gnus-summary-gather-exclude-subject
 @vindex gnus-summary-gather-exclude-subject
-\e$BL5B+G{%9%l%C%I=8$a$OI=Bj$N$_$K9T$o$l$^$9$N$G!"FC$K\e(B @samp{} \e$B$d\e(B
-@samp{(none)}\e$B$N$h$&$JNI$/$"$kI=Bj$N$H$-$O!"B?$/$N4V0c$$$r5/$3$92DG=@-$,\e(B
-\e$B$"$j$^$9!#$3$N>u67$r>/$7$h$/$9$k$?$a$K!"$I$NI=Bj$,=8$a$k2aDx$+$i=|$+$l$k\e(B
-\e$B$+$r7h$a$k@55,I=8=\e(B @code{gnus-summary-gather-exclude-subject} \e$B$r;H$&$3$H\e(B
-\e$B$,$G$-$^$9!#%G%#%U%)%k%H$O\e(B @samp{^ *$\\|^(none)$} \e$B$G$9!#\e(B
+\e$BL5B+G{%9%l%C%I=8$a$OI=Bj$N$_$K9T$o$l$^$9$N$G!"FC\e(B
+\e$B$K\e(B @samp{} \e$B$d\e(B @samp{(none)}\e$B$N$h$&$JNI$/$"$kI=Bj$N$H$-$O!"B?$/$N4V0c$$$r\e(B
+\e$B5/$3$92DG=@-$,$"$j$^$9!#$3$N>u67$r>/$7$h$/$9$k$?$a$K!"$I$NI=Bj$,=8$a$k2a\e(B
+\e$BDx$+$i=|$+$l$k$+$r7h$a$k@55,I=\e(B
+\e$B8=\e(B @code{gnus-summary-gather-exclude-subject} \e$B$r;H$&$3$H$,$G$-$^$9!#%G%#\e(B
+\e$B%U%)%k%H$O\e(B @samp{^ *$\\|^(none)$} \e$B$G$9!#\e(B
 
 @item gnus-summary-thread-gathering-function
 @vindex gnus-summmary-thread-gathering-function
-Gnus \e$B$O\e(B @code{Subject} \e$BMs$r8+$k$3$H$K$h$C$F%9%l%C%I$r=8$a$^$9!#$3$l$O!"7k\e(B
-\e$B2LE*$KA4$/4X78$NL5$$5-;v$,F1$8!X%9%l%C%I!Y$K4^$^$l$k$3$H$,$"$k$H$$$&$3$H$G!"\e(B
-\e$B$3$l$O:.Mp$N85$G$9!#BeBX<jCJ$O!"9gCW$9$k$b$N$r8+$D$1$k$?$a$K\e(B
-@code{References} \e$BMs$K$"$k\e(B @code{Message-ID} \e$B$r$9$Y$FC5$9$3$H$G$9!#$3$l$O\e(B
-\e$B4X78$NL5$$5-;v$,=8$a$i$l$?%9%l%C%I$K4^$^$l$k$3$H$OA4$/L5$$$3$H$rJ]>Z$7$^$9\e(B
-\e$B$,!"$3$o$l$?%K%e!<%9%j!<%@!<$GEj9F$7$?5-;v$OE,@Z$K=8$a$i$l$J$$$H$$$&$3$H$G\e(B
-\e$B$b$"$j$^$9!#A*Br8"$O$"$J$?$K$"$j$^$9!=!=1VIB$+%3%l%i$+!#\e(B
+Gnus \e$B$O\e(B @code{Subject} \e$BMs$r8+$k$3$H$K$h$C$F%9%l%C%I$r=8$a$^$9!#$3$l$O!"\e(B
+\e$B7k2LE*$KA4$/4X78$NL5$$5-;v$,F1$8!X%9%l%C%I!Y$K4^$^$l$k$3$H$,$"$k$H$$$&$3\e(B
+\e$B$H$G!"$3$l$O:.Mp$N85$G$9!#BeBX<jCJ$O!"9gCW$9$k$b$N$r8+$D$1$k$?$a\e(B
+\e$B$K\e(B @code{References} \e$BMs$K$"$k\e(B @code{Message-ID} \e$B$r$9$Y$FC5$9$3$H$G$9!#$3\e(B
+\e$B$l$O4X78$NL5$$5-;v$,=8$a$i$l$?%9%l%C%I$K4^$^$l$k$3$H$OA4$/L5$$$3$H$rJ]>Z\e(B
+\e$B$7$^$9$,!"$3$o$l$?%K%e!<%9%j!<%@!<$GEj9F$7$?5-;v$OE,@Z$K=8$a$i$l$J$$$H$$\e(B
+\e$B$&$3$H$G$b$"$j$^$9!#A*Br8"$O$"$J$?$K$"$j$^$9!=!=1VIB$+%3%l%i$+!#\e(B
 
 @table @code
 @item gnus-gather-threads-by-subject
@@ -5073,7 +5597,7 @@ Gnus \e$B$O\e(B @code{Subject} \e$BMs$r8+$k$3$H$K$h$C$F%9%l%C%I$r=8$a$^$9!#$3$l$O!"
 @end table
 
 @code{References} \e$B$K$h$C$F=8$a$k$3$H$r;n$7$F$_$?$$$N$G$"$l$P!"<!$N$h$&$K\e(B
-\e$B$9$k$3$H$,$G$-$^$9!'\e(B
+\e$B$9$k$3$H$,$G$-$^$9\e(B:
 
 @lisp
 (setq gnus-summary-thread-gathering-function
@@ -5082,44 +5606,41 @@ Gnus \e$B$O\e(B @code{Subject} \e$BMs$r8+$k$3$H$K$h$C$F%9%l%C%I$r=8$a$^$9!#$3$l$O!"
 
 @end table
 
-
 @node Filling In Threads
 @subsubsection \e$B%9%l%C%I$rKd$a$k\e(B
 
 @table @code
 @item gnus-fetch-old-headers
 @vindex gnus-fetch-old-headers
-\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O8E$$%9%l%C%I$r$b$C$H8E$$%X%C%@!<!=!=4{FI\e(B
-\e$B0u$NIU$$$F$$$k5-;v$N%X%C%@!<\e(B \e$B$r<hF@$9$k$3$H$GBg$-$/$7$h$&$H$7$^$9!#$b$7$G\e(B
-\e$B$-$k$@$1>/$J$$35N,9T$rI=<($7$?$$$1$l$I!"$G$-$k$@$1$?$/$5$s$NHsL)%9%l%C%I$K\e(B
-\e$B@\B3$7$F$*$-$?$$$H$-$O!"$3$NJQ?t$r\e(B @code{some} \e$B$+?t;z$K@_Dj$9$k$3$H$,$G$-\e(B
-\e$B$^$9!#$b$7?t;z$K@_Dj$7$?$H$-$O!"$=$l$h$jB?$$DI2C$N%X%C%@!<$O<hF@$5$l$^$;$s!#\e(B
-\e$B$I$A$i$N>l9g$G$b!"8E$$%X%C%@!<$N<hF@$,F0:n$9$k$N$O!";H$C$F$$$k%P%C%/%(%s%I\e(B
-(backend) \e$B$,\e(B overview \e$B%U%!%$%k$r;H$C$F$$$k$+$I$&$+$G$9!=!=$3$l$OIaDL$O\e(B
-@code{nntp}, @code{nnspool} \e$B$H\e(B @code{nnml} \e$B$G$9!#%9%l%C%I$N%k!<%H$,%5!<%P!<\e(B
-\e$B$K$h$C$F4|8B@Z$l:o=|$5$l$?$H$-$O!"\e(Bgnus \e$B$O$I$&$7$h$&$b$J$$$3$H$r3P$($F$*$$\e(B
-\e$B$F$/$@$5$$!#\e(B
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O8E$$%9%l%C%I$r$b$C$H8E$$%X%C%@!<!=!=4{\e(B
+\e$BFI0u$NIU$$$F$$$k5-;v$N%X%C%@!<$r<hF@$9$k$3$H$GBg$-$/$7$h$&$H$7$^$9!#$b$7\e(B
+\e$B$G$-$k$@$1>/$J$$35N,9T$rI=<($7$?$$$1$l$I!"$G$-$k$@$1$?$/$5$s$NHsL)%9%l%C\e(B
+\e$B%I$K@\B3$7$F$*$-$?$$$H$-$O!"$3$NJQ?t$r\e(B @code{some} \e$B$+?t;z$K@_Dj$9$k$3$H\e(B
+\e$B$,$G$-$^$9!#$b$7?t;z$K@_Dj$7$?$H$-$O!"$=$l$h$jB?$$DI2C$N%X%C%@!<$O<hF@$5\e(B
+\e$B$l$^$;$s!#$I$A$i$N>l9g$G$b!"8E$$%X%C%@!<$N<hF@$,F0:n$9$k$N$O!";H$C$F$$$k\e(B
+\e$B%P%C%/%(%s%I\e(B(backend) \e$B$,\e(B overview \e$B%U%!%$%k$r;H$C$F$$$k$+$I$&$+$G$9!=!=$3\e(B
+\e$B$l$OIaDL$O\e(B @code{nntp}, @code{nnspool} \e$B$H\e(B @code{nnml} \e$B$G$9!#%9%l%C%I$N%k!<\e(B
+\e$B%H$,%5!<%P!<$K$h$C$F4|8B@Z$l:o=|$5$l$?$H$-$O!"\e(Bgnus \e$B$O$I$&$7$h$&$b$J$$$3\e(B
+\e$B$H$r3P$($F$*$$$F$/$@$5$$!#\e(B
 
 \e$B$3$NJQ?t$O\e(B @code{invisible} \e$B$K@_Dj$9$k$3$H$b$G$-$^$9!#$3$l$O;k3PE*$J8z2L\e(B
-\e$B$O2?$b$"$j$^$;$s$,!"L?Na\e(B @kbd{A T} \e$B$r$h$/;H$&$N$G$"$l$PLr$KN)$D$G$7$g$&\e(B
-(@pxref{Finding the Parent})\e$B!#\e(B
+\e$B$O2?$b$"$j$^$;$s$,!"L?Na\e(B @kbd{A T} \e$B$r$h$/;H$&$N$G$"$l$PLr$KN)$D$G$7$g\e(B
+\e$B$&\e(B (@pxref{Finding the Parent})\e$B!#\e(B
 
 @item gnus-build-sparse-threads
 @vindex gnus-build-sparse-threads
-\e$B8E$$%X%C%@!<$r<hF@$9$k$HCY$/$J$k$3$H$,$"$j$^$9!#F1$8$h$&$JDcDB6b$N8z2L$rF@\e(B
-\e$B$k$?$a$K!"$3$NJQ?t$r\e(B @code{some} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#$=$&$9$k$H!"\e(B
-gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$9$k\e(B
-\e$B5-;v$r$D$J$4$&$H$7$^$9!#$3$l$O\e(B gnus \e$B$,5-;v$,%9%l%C%I$+$i<:$o$l$F$$$k$H?dB,\e(B
-\e$B$7$?$H$3$m$N%9%l%C%II=<($K\e(B@dfn{\e$B$:$l\e(B}\e$B$r;D$9$G$7$g$&!#!J$3$l$i$N$:$l$OIaDL$N\e(B
-\e$B35N,9T$N$h$&$K8=$l$^$9!#$b$7$:$l$rA*Br$7$?$H$-$O!"\e(Bgnus \e$B$O$=$NEv$N5-;v$r<h\e(B
-\e$BF@$7$h$&$H$7$^$9!#!K$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"\e(Bgnus\e$B$OA4$F$N!X$:$l!Y$r%9\e(B
-\e$B%l%C%I$rJd40$9$k$N$KLr$KN)$D$+$r9MN8$;$:$KI=<($7$^$9!#:G8e$K!"$3$NJQ?t$,\e(B
-@code{more} \e$B$G$"$k$H!"\e(B gnus \e$B$O$I$3$K$b$D$J$,$C$F$$$J$$;^MU$N$^$P$i$J@a$r@Z\e(B
-\e$B$jMn$H$7$^$;$s!#$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{nil} \e$B$G$9!#\e(B
-
+\e$B8E$$%X%C%@!<$r<hF@$9$k$HCY$/$J$k$3$H$,$"$j$^$9!#F1$8$h$&$JDcDB6b$N8z2L$r\e(B
+\e$BF@$k$?$a$K!"$3$NJQ?t$r\e(B @code{some} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#$=$&$9$k$H!"\e(B
+gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$9\e(B
+\e$B$k5-;v$r$D$J$4$&$H$7$^$9!#$3$l$O\e(B gnus \e$B$,5-;v$,%9%l%C%I$+$i<:$o$l$F$$$k$H\e(B
+\e$B?dB,$7$?$H$3$m$N%9%l%C%II=<($K\e(B@dfn{\e$B$:$l\e(B}\e$B$r;D$9$G$7$g$&!#\e(B(\e$B$3$l$i$N$:$l$O\e(B
+\e$BIaDL$N35N,9T$N$h$&$K8=$l$^$9!#$b$7$:$l$rA*Br$7$?$H$-$O!"\e(Bgnus \e$B$O$=$NEv$N\e(B
+\e$B5-;v$r<hF@$7$h$&$H$7$^$9!#\e(B) \e$B$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"\e(Bgnus \e$B$OA4$F$N\e(B
+\e$B!X$:$l!Y$r%9%l%C%I$rJd40$9$k$N$KLr$KN)$D$+$r9MN8$;$:$KI=<($7$^$9!#:G8e$K!"\e(B
+\e$B$3$NJQ?t$,\e(B @code{more} \e$B$G$"$k$H!"\e(Bgnus \e$B$O$I$3$K$b$D$J$,$C$F$$$J$$;^MU$N$^\e(B
+\e$B$P$i$J@a$r@Z$jMn$H$7$^$;$s!#$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{nil} \e$B$G$9!#\e(B
 @end table
 
-
 @node More Threading
 @subsubsection \e$B$b$C$H%9%l%C%I$r\e(B
 
@@ -5138,18 +5659,19 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @item gnus-thread-expunge-below
 @vindex gnus-thread-expunge-below
 \e$B$3$N?t;z$h$j>/$J$$Am9gE*%9%3%"\e(B (@code{gnus-thread-score-function}) \e$B$r;}\e(B
-\e$B$D$9$Y$F$N%9%l%C%I$O>C5n$5$l$^$9!#$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{nil}
-\e$B$G!"$3$l$O$I$N%9%l%C%I$b>C5n$5$l$J$$$H$$$&$3$H$G$9!#\e(B
+\e$B$D$9$Y$F$N%9%l%C%I$O>C5n$5$l$^$9!#$3$NJQ?t$O%G%#%U%)%k%H$G\e(B
+\e$B$O\e(B @code{nil} \e$B$G!"$3$l$O$I$N%9%l%C%I$b>C5n$5$l$J$$$H$$$&$3$H$G$9!#\e(B
 
 @item gnus-thread-hide-killed
 @vindex gnus-thread-hide-killed
-\e$B$b$7%9%l%C%I$r:o=|$7$F!"$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"ItJ,LZ$O1#$5$l$^$9!#\e(B
+\e$B$b$7%9%l%C%I$r:o=|$7$F!"$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"ItJ,LZ$O1#$5$l$^\e(B
+\e$B$9!#\e(B
 
 @item gnus-thread-ignore-subject
 @vindex gnus-thread-ignore-subject
-\e$B;~!9!"C/$+$,%9%l%C%I$N??Cf$GI=Bj$rJQ99$9$k$3$H$,$"$j$^$9!#$b$7$3$NJQ?t$,\e(B
-@code{nil} \e$B$G$J$$$H!"I=Bj$NJQ99$OL5;k$5$l$^$9!#$b$7\e(B @code{nil} \e$B$@$H!"$3\e(B
-\e$B$l$,%G%#%U%)%k%H$G$9$,!"I=Bj$NJQ99$r$9$k$HJL$N%9%l%C%I$K$J$j$^$9!#\e(B
+\e$B;~!9!"C/$+$,%9%l%C%I$N??Cf$GI=Bj$rJQ99$9$k$3$H$,$"$j$^$9!#$b$7$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$J$$$H!"I=Bj$NJQ99$OL5;k$5$l$^$9!#$b$7\e(B @code{nil} \e$B$@$H!"\e(B
+\e$B$3$l$,%G%#%U%)%k%H$G$9$,!"I=Bj$NJQ99$r$9$k$HJL$N%9%l%C%I$K$J$j$^$9!#\e(B
 
 @item gnus-thread-indent-level
 @vindex gnus-thread-indent-level
@@ -5168,7 +5690,6 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @end table
 
-
 @node Low-Level Threading
 @subsubsection \e$BDc%l%Y%k$K$*$1$k%9%l%C%I:n@.\e(B
 
@@ -5176,19 +5697,17 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
-\e$B$9$Y$F$N%X%C%@!<$r2r@O$9$kA0$K<B9T$5$l$k%U%C%/$G$9!#%G%#%U%)%k%H$NCM$O\e(B
-@code{(gnus-set-summary-default-charset)} \e$B$G$9!#$3$l$OJQ?t\e(B
-@code{gnus-newsgroup-default-charset-alist} \e$B$G;XDj$5$l$F$$$kCM$+$i35N,%P%C\e(B
-\e$B%U%!$N\e(B @code{default-mime-charset} \e$B$r@_Dj$7$^$9!#\e(B
+\e$B$9$Y$F$N%X%C%@!<$r2r@O$9$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
 
 @item gnus-alter-header-function
 @vindex gnus-alter-header-function
-\e$B$3$l$,\e(B @code{nil} \e$B$G$J$$$H!"%X%C%@!<9=B$$N8r49$r2DG=$K$9$k$h$&$K$3$N4X?t$,\e(B
-\e$B8F$P$l$^$9!#4X?t$O0l$D$N0z?t!"5-;v%X%C%@!<$N%Y%/%H%k!"$H$H$b$K8F$P$l!"$=$l\e(B
-\e$B$,2?$i$+$NJ}K!$G8r49$5$l$^$9!#Nc$($P!"!J@\F,8l$d$=$NB>$N$b$N$rIU$12C$($k$3\e(B
-\e$B$H$K$h$k!KBN7OE*$JJ}K!$G\e(B @code{Message-ID} \e$B$r8r49$9$k%a!<%k$+$i%K%e!<%9$X\e(B
-\e$B$N%2!<%H%&%'%$$,$"$k>l9g!"\e(B@code{Message-ID} \e$B$,$b$C$H0UL#$N$"$k$b$N$K$9$k$?\e(B
-\e$B$a$K!"$3$NJQ?t$r@_Dj$7$F85$KLa$9$3$H$,$G$-$^$9!#$3$l$O0l$D$NNc$G$9!'\e(B
+\e$B$3$l$,\e(B @code{nil} \e$B$G$J$$$H!"%X%C%@!<9=B$$N8r49$r2DG=$K$9$k$h$&$K$3$N4X?t\e(B
+\e$B$,8F$P$l$^$9!#4X?t$O0l$D$N0z?t!"5-;v%X%C%@!<$N%Y%/%H%k!"$H$H$b$K8F$P$l!"\e(B
+\e$B$=$l$,2?$i$+$NJ}K!$G8r49$5$l$^$9!#Nc$($P!"\e(B(\e$B@\F,8l$d$=$NB>$N$b$N$rIU$12C\e(B
+\e$B$($k$3$H$K$h$k\e(B) \e$BBN7OE*$JJ}K!$G\e(B @code{Message-ID} \e$B$r8r49$9$k%a!<%k$+$i\e(B
+\e$B%K%e!<%9$X$N%2!<%H%&%'%$$,$"$k>l9g!"\e(B@code{Message-ID} \e$B$,$b$C$H0UL#$N$"$k\e(B
+\e$B$b$N$K$9$k$?$a$K!"$3$NJQ?t$r@_Dj$7$F85$KLa$9$3$H$,$G$-$^$9!#$3$l$O0l$D$N\e(B
+\e$BNc$G$9\e(B:
 
 @lisp
 (setq gnus-alter-header-function 'my-alter-message-id)
@@ -5204,7 +5723,6 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @end table
 
-
 @node Thread Commands
 @subsection \e$B%9%l%C%I$NL?Na\e(B
 @cindex thread commands
@@ -5213,78 +5731,79 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 @item T k
 @itemx M-C-k
-@kindex T k \e$B!J35N,!K\e(B
-@kindex M-C-k \e$B!J35N,!K\e(B
+@kindex T k (\e$B35N,\e(B)
+@kindex M-C-k (\e$B35N,\e(B)
 @findex gnus-summary-kill-thread
-\e$B8=:_$N!JItJ,!K%9%l%C%I$K4{FI$N0u$rIU$1$^$9\e(B
-(@code{gnus-summary-kill-thread})\e$B!#$b$7@\F,0z?t$,@5$G$"$k$H!"Be$o$j$K$9$Y\e(B
-\e$B$F$N0u$r<h$j=|$-$^$9!#@\F,0z?t$,Ii$G$"$k$H!"Be$o$j$K5-;v$r2D;k$K$7$^$9!#\e(B
+\e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$K4{FI$N0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-kill-thread})\e$B!#$b$7@\F,0z?t$,@5$G$"$k$H!"Be$o$j$K\e(B
+\e$B$9$Y$F$N0u$r<h$j=|$-$^$9!#@\F,0z?t$,Ii$G$"$k$H!"Be$o$j$K5-;v$r2D;k$K$7$^\e(B
+\e$B$9!#\e(B
 
 @item T l
 @itemx M-C-l
-@kindex T l \e$B!J35N,!K\e(B
-@kindex M-C-l \e$B!J35N,!K\e(B
+@kindex T l (\e$B35N,\e(B)
+@kindex M-C-l (\e$B35N,\e(B)
 @findex gnus-summary-lower-thread
-\e$B8=:_$N!JItJ,!K%9%l%C%I$N%9%3%"$r2<$2$^$9\e(B
-(@code{gnus-summary-lower-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$N%9%3%"$r2<$2$^\e(B
+\e$B$9\e(B (@code{gnus-summary-lower-thread})\e$B!#\e(B
 
 @item T i
-@kindex T i \e$B!J35N,!K\e(B
+@kindex T i (\e$B35N,\e(B)
 @kindex gnus-summary-raise-thread
-\e$B8=:_$N!JItJ,!K%9%l%C%I$N%9%3%"$r>e$2$^$9\e(B
-(@code{gnus-summary-raise-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$N%9%3%"$r>e$2$^\e(B
+\e$B$9\e(B (@code{gnus-summary-raise-thread})\e$B!#\e(B
 
 @item T #
-@kindex T # \e$B!J35N,!K\e(B
+@kindex T # (\e$B35N,\e(B)
 @findex gnus-uu-mark-thread
-\e$B%W%m%;%90u$r8=:_$N!JItJ,!K%9%l%C%I$KIU$1$^$9\e(B
-(@code{gnus-uu-mark-thread})\e$B!#\e(B
+\e$B%W%m%;%90u$r8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$KIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-uu-mark-thread})\e$B!#\e(B
 
 @item T M-#
-@kindex T M-# \e$B!J35N,!K\e(B
+@kindex T M-# (\e$B35N,\e(B)
 @findex gnus-uu-unmark-thread
-\e$B8=:_$N!JItJ,!K%9%l%C%I$+$i%W%m%;%90u$r<h$j=|$-$^$9\e(B
-(@code{gnus-uu-unmark-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$+$i%W%m%;%90u$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-uu-unmark-thread})\e$B!#\e(B
 
 @item T T
-@kindex T T \e$B!J35N,!K\e(B
+@kindex T T (\e$B35N,\e(B)
 @findex gnus-summary-toggle-threads
 \e$B%9%l%C%II=<($r@Z$jBX$($^$9\e(B (@code{gnus-summary-toggle-threads})\e$B!#\e(B
 
 @item T s
-@kindex T s \e$B!J35N,!K\e(B
+@kindex T s (\e$B35N,\e(B)
 @findex gnus-summary-show-thread
-\e$B$b$7$"$l$P!"8=:_$N5-;v$N2<$K1#$l$F$$$k%9%l%C%I$rI=<($7$^$9\e(B
-(@code{gnus-summary-show-thread})\e$B!#\e(B
+\e$B$b$7$"$l$P!"8=:_$N5-;v$N2<$K1#$l$F$$$k%9%l%C%I$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-show-thread})\e$B!#\e(B
 
 @item T h
-@kindex T h \e$B!J35N,!K\e(B
+@kindex T h (\e$B35N,\e(B)
 @findex gnus-summary-hide-thread
-\e$B8=:_$N!JItJ,!K%9%l%C%I$r1#$7$^$9\e(B (@code{gnus-summary-hide-thread})\e$B!#\e(B
+\e$B8=:_$N\e(B (\e$BItJ,\e(B) \e$B%9%l%C%I$r1#$7$^$9\e(B (@code{gnus-summary-hide-thread})\e$B!#\e(B
 
 @item T S
-@kindex T S \e$B!J35N,!K\e(B
+@kindex T S (\e$B35N,\e(B)
 @findex gnus-summary-show-all-threads
-\e$B$9$Y$F$N1#$5$l$F$$$k%9%l%C%I$rI=<($7$^$9\e(B
-(@code{gnus-summary-show-all-threads})\e$B!#\e(B
+\e$B$9$Y$F$N1#$5$l$F$$$k%9%l%C%I$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-show-all-threads})\e$B!#\e(B
 
-@item T h
-@kindex T h \e$B!J35N,!K\e(B
+@item T H
+@kindex T H (\e$B35N,\e(B)
 @findex gnus-summary-hide-all-threads
 \e$B$9$Y$F$N%9%l%C%I$r1#$7$^$9\e(B (@code{gnus-summary-hide-all-threads})\e$B!#\e(B
 
 @item T t
-@kindex T t \e$B!J35N,!K\e(B
+@kindex T t (\e$B35N,\e(B)
 @findex gnus-summary-rethread-current
-\e$B8=:_$N5-;v$N%9%l%C%I$r$b$&0lEY:n$jD>$7$^$9\e(B
-(@code{gnus-summary-rethread-current})\e$B!#$3$l$O35N,%P%C%U%!$,%9%l%C%II=<($5\e(B
-\e$B$l$F$$$J$$$H$-$G$bF0:n$7$^$9!#\e(B
+\e$B8=:_$N5-;v$N%9%l%C%I$r$b$&0lEY:n$jD>$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-rethread-current})\e$B!#$3$l$O35N,%P%C%U%!$,%9%l%C%I\e(B
+\e$BI=<($5$l$F$$$J$$$H$-$G$bF0:n$7$^$9!#\e(B
 
 @item T ^
-@kindex T ^ \e$B!J35N,!K\e(B
+@kindex T ^ (\e$B35N,\e(B)
 @findex gnus-summary-reparent-thread
-\e$B8=:_$N5-;v$r0uIU$-!J$b$7$/$OA0$N!K5-;v$N;R5-;v$K$7$^$9\e(B
-(@code{gnus-summary-reparent-thread})\e$B!#\e(B
+\e$B8=:_$N5-;v$r0uIU$-\e(B (\e$B$b$7$/$OA0$N\e(B) \e$B5-;v$N;R5-;v$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-reparent-thread})\e$B!#\e(B
 
 @end table
 
@@ -5294,42 +5813,49 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @table @kbd
 
 @item T n
-@kindex T n \e$B!J35N,!K\e(B
+@kindex T n (\e$B35N,\e(B)
+@itemx M-C-n
+@kindex M-C-n (Summary)
+@itemx M-down
+@kindex M-down (Summary)
 @findex gnus-summary-next-thread
 \e$B<!$N%9%l%C%I$K0\F0$7$^$9\e(B (@code{gnus-summary-next-thread})\e$B!#\e(B
 
 @item T p
-@kindex T p \e$B!J35N,!K\e(B
+@kindex T p (\e$B35N,\e(B)
+@itemx M-C-p
+@kindex M-C-p (Summary)
+@itemx M-up
+@kindex M-up (Summary)
 @findex gnus-summary-prev-thread
 \e$BA0$N%9%l%C%I$K0\F0$7$^$9\e(B (@code{gnus-summary-prev-thread})\e$B!#\e(B
 
 @item T d
-@kindex T d \e$B!J35N,!K\e(B
+@kindex T d (\e$B35N,\e(B)
 @findex gnus-summary-down-thread
 \e$B%9%l%C%I$r9_2<$7$^$9\e(B (@code{gnus-summary-down-thread})\e$B!#\e(B
 
 @item T u
-@kindex T u \e$B!J35N,!K\e(B
+@kindex T u (\e$B35N,\e(B)
 @findex gnus-summary-up-thread
 \e$B%9%l%C%I$r>e>:$7$^$9\e(B (@code{gnus-summary-up-thread})\e$B!#\e(B
 
 @item T o
-@kindex T o \e$B!J35N,!K\e(B
+@kindex T o (\e$B35N,\e(B)
 @findex gnus-summary-top-thread
 \e$B%9%l%C%I$ND:>e$K0\F0$7$^$9\e(B (@code{gnus-summary-top-thread})\e$B!#\e(B
 @end table
 
 @vindex gnus-thread-operation-ignore-subject
 \e$B%9%l%C%I$r:n@.$9$k$H$-$KI=Bj$rL5;k$9$k$H!"<+A3$K%9%l%C%I$K$O$$$/$D$+$N0c$C\e(B
-\e$B$?I=Bj$,$"$k$3$H$K$J$j$^$9!#$=$l$+$i\e(B `T k'
-(@code{gnus-summary-kill-thread}) \e$B$N$h$&$JL?Na$rH/$9$k$H$-$K!"A4BN$N%9%l%C\e(B
-\e$B%I$r:o=|$9$k$N$G$O$J$/!"8=:_$N5-;v$HF1$8I=Bj$r;}$DItJ,$@$1$r:o=|$7$?$$$H$-\e(B
-\e$B$,$"$k$+$b$7$l$^$;$s!#$b$7$3$NH/A[$,NI$$$H;W$&$N$G$"$l$P!"\e(B
-@code{gnus-thread-operation-ignore-subject} \e$B$r$$$8$/$k$3$H$,$G$-$^$9!#$3$l\e(B
-\e$B$,\e(B @code{nil} \e$B$G$J$$$H!J$3$l$,%G%#%U%)%k%H$G$9$,!K!"%9%l%C%I$NL?Na$r<B9T$7\e(B
-\e$B$F$$$k$H$-$KI=Bj$OL5;k$5$l$^$9!#$3$NJQ?t$,\e(B @code{fuzzy} \e$B$G$"$k$H!"$"$$$^$$\e(B
-\e$B$KEy$7$$I=Bj$r;}$D5-;v$@$1$,4^$^$l$^$9\e(B (@pxref{Fuzzy Matching})\e$B!#\e(B
-
+\e$B$?I=Bj$,$"$k$3$H$K$J$j$^$9!#$=$l$+\e(B
+\e$B$i\e(B `T k' (@code{gnus-summary-kill-thread}) \e$B$N$h$&$JL?Na$rH/$9$k$H$-$K!"\e(B
+\e$BA4BN$N%9%l%C%I$r:o=|$9$k$N$G$O$J$/!"8=:_$N5-;v$HF1$8I=Bj$r;}$DItJ,$@$1$r\e(B
+\e$B:o=|$7$?$$$H$-$,$"$k$+$b$7$l$^$;$s!#$b$7$3$NH/A[$,NI$$$H;W$&$N$G$"$l$P!"\e(B
+@code{gnus-thread-operation-ignore-subject} \e$B$r$$$8$/$k$3$H$,$G$-$^$9!#$3\e(B
+\e$B$l$,\e(B @code{nil} \e$B$G$J$$$H\e(B (\e$B$3$l$,%G%#%U%)%k%H$G$9$,\e(B)\e$B!"%9%l%C%I$NL?Na$r<B\e(B
+\e$B9T$7$F$$$k$H$-$KI=Bj$OL5;k$5$l$^$9!#$3$NJQ?t$,\e(B @code{fuzzy} \e$B$G$"$k$H!"$"\e(B
+\e$B$$$^$$$KEy$7$$I=Bj$r;}$D5-;v$@$1$,4^$^$l$^$9\e(B (@pxref{Fuzzy Matching})\e$B!#\e(B
 
 @node Sorting
 @section \e$BJB$SBX$(\e(B
@@ -5345,23 +5871,21 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @code{gnus-thread-sort-functions} \e$B$r@_Dj$9$k$3$H$G%9%l%C%I$rJB$SBX$($k$3\e(B
 \e$B$H$,$G$-$^$9!#$=$l$O!"C1FH$N4X?t!"4X?t$N%j%9%H!"4X?t$H\e(B @code{(\e$B4X?t$G$J$$\e(B
 \e$B$b$N\e(B)} \e$B$NMWAG$G$"$k$3$H$,$G$-$^$9!#%G%#%U%)%k%H$G$O!"JB$SBX$($O5-;vHV9f\e(B
-\e$B$K$h$C$F$J$5$l$^$9!#4{$K:n$i$l$F$$$kJB$SBX$(=R8l4X?t$O\e(B
-@code{gnus-thread-sort-by-number}, @code{gnus-thread-sort-by-author},
-@code{gnus-thread-sort-by-subject}, @code{gnus-thread-sort-by-date},
-@code{gnus-thread-sort-by-score} \e$B$H\e(B
-@code{gnus-thread-sort-by-total-score} \e$B$G$9!#\e(B
-
+\e$B$K$h$C$F$J$5$l$^$9!#4{$K:n$i$l$F$$$kJB$SBX$(=R8l4X?t\e(B
+\e$B$O\e(B @code{gnus-thread-sort-by-number}, @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject}, @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score} \e$B$H\e(B @code{gnus-thread-sort-by-total-score} \e$B$G\e(B
+\e$B$9!#\e(B
 
-\e$B3F4X?t$O\e(B2\e$B$D$N%9%l%C%I$r$H$j!":G=i$N%9%l%C%I$,B>$N%9%l%C%I$h$j@h$KJB$SBX$(\e(B
-\e$B$i$l$k$Y$-$G$"$l$P!"\e(B@code{nil} \e$B$G$J$$CM$r$+$($7$^$9!#IaDL!"JB$SBX$($OK\Ev\e(B
-\e$B$O$=$l$>$l$N%9%l%C%I$N:,K\$r8+$k$@$1$K$h$j$J$5$l$k$3$H$K5$$rIU$1$F$/$@$5$$!#\e(B
-\e$B$b$7\e(B2\e$B$D0J>e$N4X?t$r;H$&>l9g!"M%@hE*JB$SBX$(%-!<$O%j%9%H$N:G8e$N4X?t$G$9!#\e(B
-\e$B$*$=$i$/$$$D$b\e(B @code{gnus-thread-sort-by-number} \e$B$rJB$SBX$(4X?t$N%j%9%H!=!=\e(B
-\e$B:G=i$,9%$^$7$$\e(B \e$B$KF~$l$F$*$/$Y$-$G$7$g$&!#$3$l$OB>$NJB$SBX$(4p=`$K4X$7$FEy\e(B
-\e$B$7$$%9%l%C%I$O5-;v$,>e$,$C$F$$$/=gHV$KI=<($5$l$k$3$H$rJ]>Z$7$^$9!#\e(B
+\e$B3F4X?t$OFs$D$N%9%l%C%I$r$H$j!":G=i$N%9%l%C%I$,B>$N%9%l%C%I$h$j@h$KJB$SBX\e(B
+\e$B$($i$l$k$Y$-$G$"$l$P!"\e(B@code{nil} \e$B$G$J$$CM$r$+$($7$^$9!#IaDL!"JB$SBX$($O\e(B
+\e$BK\Ev$O$=$l$>$l$N%9%l%C%I$N:,K\$r8+$k$@$1$K$h$j$J$5$l$k$3$H$K5$$rIU$1$F$/\e(B
+\e$B$@$5$$!#$b$7Fs$D0J>e$N4X?t$r;H$&>l9g!"M%@hE*JB$SBX$(%-!<$O%j%9%H$N:G8e$N\e(B
+\e$B4X?t$G$9!#$*$=$i$/$$$D$b\e(B @code{gnus-thread-sort-by-number} \e$B$rJB$SBX$(4X\e(B
+\e$B?t$N%j%9%H!=!=:G=i$,9%$^$7$$\e(B \e$B$KF~$l$F$*$/$Y$-$G$7$g$&!#$3$l$OB>$NJB$SBX\e(B
+\e$B$(4p=`$K4X$7$FEy$7$$%9%l%C%I$O5-;v$,>e$,$C$F$$$/=gHV$KI=<($5$l$k$3$H$rJ]\e(B
+\e$B>Z$7$^$9!#\e(B
 
 \e$B%9%3%"$N5U=g!"I=Bj!"$=$7$F:G8e$KHV9f!"$N=g$KJB$SBX$($?$$$N$G$"$l$P!"<!$N\e(B
-\e$B$h$&$K$G$-$^$9!'\e(B
+\e$B$h$&$K$G$-$^$9\e(B:
 
 @lisp
 (setq gnus-thread-sort-functions
@@ -5372,9 +5896,9 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 
 \e$B:G9b%9%3%"$N%9%l%C%I$,35N,%P%C%U%!$N:G=i$KI=<($5$l$^$9!#%9%l%C%I$,F1$8%9\e(B
 \e$B%3%"$N>l9g$O!"1Q;z=g$KJB$S$+$($i$l$^$9!#%9%3%"$HI=Bj$,F1$8%9%l%C%I$OHV9f\e(B
-\e$B$GJB$SBX$($i$l!"!JIaDL$O!K5-;v$,E~Ce$7$?=gHV$K$J$j$^$9!#\e(B
+\e$B$GJB$SBX$($i$l!"\e(B(\e$BIaDL$O\e(B) \e$B5-;v$,E~Ce$7$?=gHV$K$J$j$^$9!#\e(B
 
-\e$B%9%3%"!"E~Ce$N5U=g$KJB$SBX$($?$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^$9!'\e(B
+\e$B%9%3%"!"E~Ce$N5U=g$KJB$SBX$($?$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^$9\e(B:
 
 @lisp
 (setq gnus-thread-sort-functions
@@ -5384,10 +5908,10 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @end lisp
 
 @vindex gnus-thread-score-function
-\e$BJQ?t\e(B @code{gnus-thread-score-function}\e$B!J%G%#%U%)%k%H$O\e(B @code{+}\e$B!K$KF~$C$F\e(B
-\e$B$$$k4X?t$O%9%l%C%I$NAm9g$N%9%3%"$r7W;;$9$k$?$a$KMQ$$$i$l$^$9!#Lr$KN)$D4X?t\e(B
-\e$B$O!"\e(B@code{max}, @code{min}, \e$B$b$7$/$O\e(B2\e$B>h!"$b$7$/$O$"$J$?$N9%4q?4$r$/$9$0$k\e(B
-\e$B$h$&$J2?$+$G$7$g$&!#\e(B
+\e$BJQ?t\e(B @code{gnus-thread-score-function} (\e$B%G%#%U%)%k%H$O\e(B @code{+}) \e$B$KF~$C\e(B
+\e$B$F$$$k4X?t$O%9%l%C%I$NAm9g$N%9%3%"$r7W;;$9$k$?$a$KMQ$$$i$l$^$9!#Lr$KN)$D\e(B
+\e$B4X?t$O!"\e(B@code{max}, @code{min}, \e$B$b$7$/$OFs>h!"$b$7$/$O$"$J$?$N9%4q?4$r$/\e(B
+\e$B$9$0$k$h$&$J2?$+$G$7$g$&!#\e(B
 
 @findex gnus-article-sort-functions
 @findex gnus-article-sort-by-date
@@ -5395,16 +5919,15 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
 @findex gnus-article-sort-by-subject
 @findex gnus-article-sort-by-author
 @findex gnus-article-sort-by-number
-\e$B2?$+4qL/$JM}M3$J$I$G%9%l%C%II=<($r;H$C$F$$$J$$$N$J$i!"JQ?t\e(B
-@code{gnus-article-sort-functions} \e$B$r$$$8$/$kI,MW$,$"$j$^$9!#$3$l$O\e(B
-@code{gnus-thread-sort-functions} \e$B$HHs>o$K;w$F$$$^$9$,!"5-;v$NHf3S$K$O>/!9\e(B
-\e$B0c$C$?4X?t$r;H$$$^$9!#;HMQ2DG=$JJB$SBX$(=R8l4X?t$O\e(B
-@code{gnus-article-sort-by-number}, @code{gnus-article-sort-by-author},
-@code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date} \e$B$*$h\e(B
-\e$B$S\e(B @code{gnus-article-sort-by-score} \e$B$G$9!#\e(B
+\e$B2?$+4qL/$JM}M3$J$I$G%9%l%C%II=<($r;H$C$F$$$J$$$N$J$i!"JQ\e(B
+\e$B?t\e(B @code{gnus-article-sort-functions} \e$B$r$$$8$/$kI,MW$,$"$j$^$9!#$3$l\e(B
+\e$B$O\e(B @code{gnus-thread-sort-functions} \e$B$HHs>o$K;w$F$$$^$9$,!"5-;v$NHf3S$K\e(B
+\e$B$O>/!90c$C$?4X?t$r;H$$$^$9!#;HMQ2DG=$JJB$SBX$(=R8l4X?t\e(B
+\e$B$O\e(B @code{gnus-article-sort-by-number}, @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date} \e$B$*\e(B
+\e$B$h$S\e(B @code{gnus-article-sort-by-score} \e$B$G$9!#\e(B
 
 \e$B%9%l%C%I$r;H$C$F$$$J$$I=Bj$N35N,I=<($rJB$SBX$($?$$$N$G$"$l$P!"<!$N$h$&$J\e(B
-\e$B$3$H$r$9$k$3$H$,$G$-$^$9!'\e(B
+\e$B$3$H$r$9$k$3$H$,$G$-$^$9\e(B:
 
 @lisp
 (setq gnus-article-sort-functions
@@ -5412,32 +5935,30 @@ gnus \e$B$OA4$F$N5-;v$N40A4$J\e(B @code{References} \e$BMs$r8+$F!"F1$8%9%l%C%I$KB0$
         gnus-article-sort-by-subject))
 @end lisp
 
-
-
 @node Asynchronous Fetching
 @section \e$BHsF14|5-;v<hF@\e(B
 @cindex asynchronous article fetching
 @cindex article pre-fetch
 @cindex pre-fetch
 
-\e$B$b$7%K%e!<%9$r1s$/$N\e(B @sc{nntp} \e$B%5!<%P!<$+$i<hF@$7$F$$$k$N$G$"$l$P!"%M%C%H\e(B
-\e$B%o!<%/$NBT$A;~4V$,5-;v$rFI$`$3$H$O9|$N@^$l$k$3$H$K$7$F$7$^$&$+$b$7$l$^$;$s!#\e(B
-@kbd{n} \e$B$r2!$7$F<!$N5-;v$,8=$l$k$^$G!"$7$P$i$/BT$?$J$1$l$P$J$j$^$;$s!#$I$&\e(B
-\e$B$7$FA0$N5-;v$rFI$s$G$$$k4V$K\e(B gnus \e$B$,@h$K9T$C$F5-;v$r<hF@$7$J$$$N$G$7$g$&!)\e(B
-\e$BK\Ev$K!"$=$&$7$?J}$,NI$$$N$G$O$J$$$N$G$7$g$&$+!#\e(B
+\e$B$b$7%K%e!<%9$r1s$/$N\e(B @sc{nntp} \e$B%5!<%P!<$+$i<hF@$7$F$$$k$N$G$"$l$P!"%M%C\e(B
+\e$B%H%o!<%/$NBT$A;~4V$,5-;v$rFI$`$3$H$O9|$N@^$l$k$3$H$K$7$F$7$^$&$+$b$7$l$^\e(B
+\e$B$;$s!#\e(B@kbd{n} \e$B$r2!$7$F<!$N5-;v$,8=$l$k$^$G!"$7$P$i$/BT$?$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#$I$&$7$FA0$N5-;v$rFI$s$G$$$k4V$K\e(B gnus \e$B$,@h$K9T$C$F5-;v$r<hF@$7$J$$$N\e(B
+\e$B$G$7$g$&\e(B? \e$BK\Ev$K!"$=$&$7$?J}$,NI$$$N$G$O$J$$$N$G$7$g$&$+!#\e(B
 
 \e$B$^$:!"$$$/$D$+$N7Y9p$G$9!#HsF14|5-;v<hF@!"FC$K\e(B gnus \e$B$,$=$l$r9T$C$F$$$kJ}\e(B
 \e$BK!$K$O$$$/$D$+$NMn$H$77j$,$"$j$^$9!#\e(B
 
-\e$BNc$($P!"$"$J$?$OC;$$5-;v\e(B 1 \e$B$rFI$s$G$$$F!"5-;v\e(B 2 \e$B$O$H$F$bD9$/$"$J$?$O$=$l$r\e(B
-\e$BFI$`$3$H$K$O6=L#$,L5$$$H$7$^$7$g$&!#\e(BGnus \e$B$O$3$N$3$H$O$o$+$i$J$$$N$G!"@h$K\e(B
-\e$B9T$C$F5-;v\e(B 2 \e$B$r<hF@$7$^$9!#$"$J$?$O5-;v\e(B 3 \e$B$rFI$`$3$H$K$7$^$9$,!"\e(Bgnus \e$B$O5-\e(B
-\e$B;v\e(B 2 \e$B$r<hF@$7$F$$$k:GCf$J$N$G!"@\B3$OIu:?$5$l$F$$$^$9!#\e(B
+\e$BNc$($P!"$"$J$?$OC;$$5-;v\e(B 1 \e$B$rFI$s$G$$$F!"5-;v\e(B 2 \e$B$O$H$F$bD9$/$"$J$?$O$=$l\e(B
+\e$B$rFI$`$3$H$K$O6=L#$,L5$$$H$7$^$7$g$&!#\e(BGnus \e$B$O$3$N$3$H$O$o$+$i$J$$$N$G!"\e(B
+\e$B@h$K9T$C$F5-;v\e(B 2 \e$B$r<hF@$7$^$9!#$"$J$?$O5-;v\e(B 3 \e$B$rFI$`$3$H$K$7$^$9$,!"\e(B
+gnus \e$B$O5-;v\e(B 2 \e$B$r<hF@$7$F$$$k:GCf$J$N$G!"@\B3$OIu:?$5$l$F$$$^$9!#\e(B
 
-\e$B$3$N>u67$rHr$1$k$?$a$K!"\e(Bgnus \e$B$O%5!<%P!<$K\e(B2\e$B$D$N!J$=$l$O\e(B2\e$B$H?t$($F$/$@$5$$!K\e(B
-\e$B@\B3$rD%$k$3$H$,$G$-$^$9!#$3$l$O$"$^$j$7$FNI$$$3$H$G$O$J$$$H9M$($k?M$b$$$k\e(B
-\e$B$G$7$g$&$,!";d$K$O<B:]$NBeBX<jCJ$,8+$D$+$i$J$$$N$G$9!#M>J,$J@\B3$r$9$k$?$a\e(B
-\e$B$K$O2?$i$+$N;~4V$,$+$+$j$^$9$N$G!"\e(Bgnus \e$B$N5/F0$OCY$/$J$j$^$9!#\e(B
+\e$B$3$N>u67$rHr$1$k$?$a$K!"\e(Bgnus \e$B$O%5!<%P!<$KFs$D$N\e(B (\e$B$=$l$O\e(B 2 \e$B$H?t$($F$/$@$5\e(B
+\e$B$$\e(B) \e$B@\B3$rD%$k$3$H$,$G$-$^$9!#$3$l$O$"$^$j$7$FNI$$$3$H$G$O$J$$$H9M$($k?M\e(B
+\e$B$b$$$k$G$7$g$&$,!";d$K$O<B:]$NBeBX<jCJ$,8+$D$+$i$J$$$N$G$9!#M>J,$J@\B3$r\e(B
+\e$B$9$k$?$a$K$O2?$i$+$N;~4V$,$+$+$j$^$9$N$G!"\e(Bgnus \e$B$N5/F0$OCY$/$J$j$^$9!#\e(B
 
 Gnus \e$B$O$"$J$?$,FI$`$G$"$m$&5-;v$h$j$b$?$/$5$s$N5-;v$r<hF@$7$^$9!#$3$l$O\e(B
 \e$B5-;v$N@h\e(B-\e$B<hF@$r;H$o$J$$$H$-$h$j$b!"$"$J$?$N%^%7%s$H\e(B @sc{nntp} \e$B%5!<%P!<4V\e(B
@@ -5448,28 +5969,28 @@ Gnus \e$B$O$"$J$?$,FI$`$G$"$m$&5-;v$h$j$b$?$/$5$s$N5-;v$r<hF@$7$^$9!#$3$l$O\e(B
 \e$BEv$K$=$&$7$?$$$H;W$o$J$$8B$j$O!#\e(B
 
 @vindex gnus-asynchronous
-\e$B$3$l$,J}K!$G$9!'\e(B @code{gnus-asynchronous} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+\e$B$3$l$,J}K!$G$9\e(B: @code{gnus-asynchronous} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
 \e$B;D$j$N$3$H$O<+F0E*$K5/$3$j$^$9!#\e(B
 
 @vindex gnus-use-article-prefetch
-@code{gnus-use-article-prefetch} \e$B$r@_Dj$9$k$3$H$K$h$j!"$I$l$/$i$$$N5-;v$,\e(B
-\e$B@h$K<hF@$5$l$k$Y$-$+$rA`:n$9$k$3$H$,$G$-$^$9!#$3$l$O%G%#%U%)%k%H$G$O\e(B 30\e$B$G!"\e(B
-\e$B%0%k!<%W$N5-;v$rFI$s$G$$$k$H$-$K!"%P%C%/%(%s%I$,<!$N\e(B 30 \e$B5-;v$r@h\e(B-\e$B<hF@$9$k\e(B
-\e$B$H$$$&$3$H$G$9!#$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"%P%C%/%(%s%I$O@)8BL5$/<hF@$G\e(B
-\e$B$-$k$9$Y$F$N5-;v$r@h\e(B-\e$B<hF@$7$h$&$H$7$^$9!#$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"@h\e(B-\e$B<h\e(B
-\e$BF@$O9T$o$l$^$;$s!#\e(B
+@code{gnus-use-article-prefetch} \e$B$r@_Dj$9$k$3$H$K$h$j!"$I$l$/$i$$$N5-;v\e(B
+\e$B$,@h$K<hF@$5$l$k$Y$-$+$rA`:n$9$k$3$H$,$G$-$^$9!#$3$l$O%G%#%U%)%k%H$G\e(B
+\e$B$O\e(B 30 \e$B$G!"%0%k!<%W$N5-;v$rFI$s$G$$$k$H$-$K!"%P%C%/%(%s%I$,<!$N\e(B 30 \e$B5-;v$r\e(B
+\e$B@h\e(B-\e$B<hF@$9$k$H$$$&$3$H$G$9!#$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"%P%C%/%(%s%I$O\e(B
+\e$B@)8BL5$/<hF@$G$-$k$9$Y$F$N5-;v$r@h\e(B-\e$B<hF@$7$h$&$H$7$^$9!#$3$l\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$k$H!"@h\e(B-\e$B<hF@$O9T$o$l$^$;$s!#\e(B
 
 @vindex gnus-async-prefetch-article-p
 @findex gnus-async-read-p
-\e$B$*$=$i$/!"@h\e(B-\e$B<hF@$r$7$?$/$J$$5-;v$,$$$/$D$+$"$k$G$7$g$&!=!=Nc$($P!"4{FI5-\e(B
-\e$B;v!#JQ?t\e(B @code{gnus-async-prefetch-article-p} \e$B$O5-;v$,@h$K<hF@$5$l$k$Y$-$+\e(B
-\e$B$I$&$+$r@)8f$7$^$9!#$3$N4X?t$OLdBj$N5-;v$,@h\e(B-\e$B<hF@$5$l$k$Y$-$G$"$l$P\e(B
-@code{nil} \e$B$G$J$$CM$r$+$($9$Y$-$G$9!#%G%#%U%)%k%H$O\e(B
-@code{gnus-async-read-p} \e$B$G!"$=$l$O4{FI5-;v$K$O\e(B @code{nil} \e$B$r$+$($7$^$9!#\e(B
-\e$B$3$N4X?t$O5-;v$N%G!<%?9=B$$rM#0l$N0z?t$H$7$F8F$P$l$^$9!#\e(B
+\e$B$*$=$i$/!"@h\e(B-\e$B<hF@$r$7$?$/$J$$5-;v$,$$$/$D$+$"$k$G$7$g$&!=!=Nc$($P!"4{FI\e(B
+\e$B5-;v!#JQ?t\e(B @code{gnus-async-prefetch-article-p} \e$B$O5-;v$,@h$K<hF@$5$l$k$Y\e(B
+\e$B$-$+$I$&$+$r@)8f$7$^$9!#$3$N4X?t$OLdBj$N5-;v$,@h\e(B-\e$B<hF@$5$l$k$Y$-$G$"$l\e(B
+\e$B$P\e(B @code{nil} \e$B$G$J$$CM$r$+$($9$Y$-$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{gnus-async-read-p} \e$B$G!"$=$l$O4{FI5-;v$K$O\e(B @code{nil} \e$B$r$+$($7$^\e(B
+\e$B$9!#$3$N4X?t$O5-;v$N%G!<%?9=B$$rM#0l$N0z?t$H$7$F8F$P$l$^$9!#\e(B
 
-\e$BNc$($P!"$b$7\e(B 100 \e$B9T$h$j$bC;$$L$FI5-;v$N$_$r@h$K<hF@$7$?$$$N$G$"$l$P!"<!$N\e(B
-\e$B$h$&$K$G$-$^$9!'\e(B
+\e$BNc$($P!"$b$7\e(B 100 \e$B9T$h$j$bC;$$L$FI5-;v$N$_$r@h$K<hF@$7$?$$$N$G$"$l$P!"<!\e(B
+\e$B$N$h$&$K$G$-$^$9\e(B:
 
 @lisp
 (defun my-async-short-unread-p (data)
@@ -5488,7 +6009,7 @@ Gnus \e$B$O$"$J$?$,FI$`$G$"$m$&5-;v$h$j$b$?$/$5$s$N5-;v$r<hF@$7$^$9!#$3$l$O\e(B
 @vindex gnus-prefetched-article-deletion-strategy
 \e$B5-;v$OHsF14|%P%C%U%!$+$iCY$+$lAa$+$l:o=|$5$l$J$1$l$P$J$j$^$;$s!#\e(B
 @code{gnus-prefetched-article-deletion-strategy} \e$B$O$$$D5-;v$r:o=|$9$k$+\e(B
-\e$B$r;XDj$7$F$$$^$9!#$3$l$O0J2<$NMWAG$r4^$`$h$&$J%j%9%H$G$9!'\e(B
+\e$B$r;XDj$7$F$$$^$9!#$3$l$O0J2<$NMWAG$r4^$`$h$&$J%j%9%H$G$9\e(B:
 
 @table @code
 @item read
@@ -5504,17 +6025,17 @@ Gnus \e$B$O$"$J$?$,FI$`$G$"$m$&5-;v$h$j$b$?$/$5$s$N5-;v$r<hF@$7$^$9!#$3$l$O\e(B
 @c @code{gnus-use-header-prefetch} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"<!$N%0%k!<%W$+$i\e(B
 @c \e$B5-;v$r@h$K<hF@$7$^$9!#\e(B
 
-
 @node Article Caching
 @section \e$B5-;v$N%-%c%C%7%e\e(B
 @cindex article caching
 @cindex caching
 
-\e$B$b$7\e(B@emph{\e$BHs>o$K\e(B}\e$BCY$$\e(B @sc{nntp} \e$B@\B3$G$"$k$J$i$P!"5-;v%-%c%C%7%e$r$9$k$3$H\e(B
-\e$B$r9M$($k$+$b$7$l$^$;$s!#$=$&$9$k$H!"$=$l$>$l$N5-;v$O$"$J$?$N%[!<%`%G%#%l%/\e(B
-\e$B%H%j$N2<$K%m!<%+%k$KN/$a$i$^$9!#4{$K?dB,$5$l$F$$$k$+$bCN$l$^$;$s$,!"$3$l$O\e(B
-@emph{\e$B5pBg$J\e(B}\e$B%G%#%9%/%9%Z!<%9$r?)$$!"\e(Bi\e$B%N!<%I$bHs>o$KB.$/?)$$$D$V$92DG=@-$,\e(B
-\e$B$"$k$?$a!"$=$l$O$"$J$?$NF,$r1K$,$;$k;v$K$J$k$+$b$7$l$^$;$s!#%&%)%C%+$NCf$G!#\e(B
+\e$B$b$7\e(B@emph{\e$BHs>o$K\e(B}\e$BCY$$\e(B @sc{nntp} \e$B@\B3$G$"$k$J$i$P!"5-;v%-%c%C%7%e$r$9$k$3\e(B
+\e$B$H$r9M$($k$+$b$7$l$^$;$s!#$=$&$9$k$H!"$=$l$>$l$N5-;v$O$"$J$?$N%[!<%`%G%#\e(B
+\e$B%l%/%H%j$N2<$K%m!<%+%k$KN/$a$i$^$9!#4{$K?dB,$5$l$F$$$k$+$bCN$l$^$;$s$,!"\e(B
+\e$B$3$l$O\e(B @emph{\e$B5pBg$J\e(B}\e$B%G%#%9%/%9%Z!<%9$r?)$$!"\e(Bi\e$B%N!<%I$bHs>o$KB.$/?)$$$D$V\e(B
+\e$B$92DG=@-$,$"$k$?$a!"$=$l$O$"$J$?$NF,$r1K$,$;$k;v$K$J$k$+$b$7$l$^$;$s!#\e(B
+\e$B%&%)%C%+$NCf$G!#\e(B
 
 \e$B$G$bCm0U?<$/;H$o$l$l$P!"$=$l$O5-;v$rJ]B8$9$k4JC1$JJ}K!$K$J$jF@$^$9!#\e(B
 
@@ -5536,74 +6057,73 @@ Gnus \e$B$O$"$J$?$,FI$`$G$"$m$&5-;v$h$j$b$?$/$5$s$N5-;v$r<hF@$7$^$9!#$3$l$O\e(B
 
 @vindex gnus-cache-remove-articles
 @vindex gnus-cache-enter-articles
-\e$B%-%c%C%7%e\e(B \e$B$XF~$k\e(B/\e$B$+$i:o=|$5$l$k\e(B \e$B$OJQ?t\e(B @code{gnus-cache-enter-articles}\e$B$H\e(B
-@code{gnus-cache-remove-articles} \e$B$K$h$C$F@)8f$5$l$^$9!#$3$l$i$ON>J}$H$b%7\e(B
-\e$B%s%\%k$N%j%9%H$G$9!#A0<T$O%G%#%U%)%k%H$G$O\e(B @code{(ticked dormant)} \e$B$G!"2D\e(B
-\e$B;k$HJ]N15-;v$O%-%c%C%7%e$KF~$l$i$l$k$H$$$&;v$G$9!#8e<T$O%G%#%U%)%k%H$G$O\e(B
-@code{(read)} \e$B$G!"4{FI$N0u$,IU$$$?5-;v$O%-%c%C%7%e$+$i:o=|$5$l$k$H$$$&;v$G\e(B
-\e$B$9!#$*$=$i$/$3$l$i$N\e(B2\e$B$D$N%j%9%H$O\e(B @code{ticked}, @code{dormant},
-@code{unread} \e$B$*$h$S\e(B @code{read} \e$B$+$i$J$k$G$7$g$&!#\e(B
+\e$B%-%c%C%7%e\e(B \e$B$XF~$k\e(B/\e$B$+$i:o=|$5$l$k\e(B \e$B$OJQ?t\e(B @code{gnus-cache-enter-articles} \e$B$H\e(B @code{gnus-cache-remove-articles} \e$B$K\e(B
+\e$B$h$C$F@)8f$5$l$^$9!#$3$l$i$ON>J}$H$b%7%s%\%k$N%j%9%H$G$9!#A0<T$O%G%#%U%)\e(B
+\e$B%k%H$G$O\e(B @code{(ticked dormant)} \e$B$G!"2D;k$HJ]N15-;v$O%-%c%C%7%e$KF~$l$i\e(B
+\e$B$l$k$H$$$&;v$G$9!#8e<T$O%G%#%U%)%k%H$G$O\e(B @code{(read)} \e$B$G!"4{FI$N0u$,IU\e(B
+\e$B$$$?5-;v$O%-%c%C%7%e$+$i:o=|$5$l$k$H$$$&;v$G$9!#$*$=$i$/$3$l$i$NFs$D$N%j\e(B
+\e$B%9%H$O\e(B @code{ticked}, @code{dormant}, @code{unread} \e$B$*$h\e(B
+\e$B$S\e(B @code{read} \e$B$+$i$J$k$G$7$g$&!#\e(B
 
 @findex gnus-jog-cache
-\e$B$=$l$G!"$I$&$d$C$FBgNL$N5-;v<hF@$HCyC_<B8=$5$l$k$N$G$7$g$&$+!#L?Na\e(B
-@code{gnus-jog-cache} \e$B$OA4$F$N9XFI%0%k!<%W$KBP$7$F!"$9$Y$F$NL$FI5-;v$rMW5a\e(B
-\e$B$7!"%9%3%"$rIU$1!"%-%c%C%7%e$KJ]B8$7$^$9!#$3$NL?Na$r<B:]$K!"<B:]$K<B:]$K<B\e(B
-\e$B:]$K!";H$&$N$O!"\e(B 1) @sc{nntp} \e$B%5!<%P!<$H$N@\B3$,K\Ev$K!"K\Ev$K!"K\Ev$KCY$/\e(B
-2) \e$BK\Ev$K!"K\Ev$K!"K\Ev$K5pBg$J%G%#%9%/$r;}$C$F$$$k$H$-$@$1$K$9$k$Y$-$G$9!#\e(B
-\e$B$3$l$O??LLL\$K$$$C$F$$$^$9!#%@%&%s%m!<%I$5$l$k5-;v$N?t$r>/$J$/$9$k0l$D$NJ}\e(B
-\e$BK!$O!"M_$7$/$J$$5-;v$N%9%3%"$rDc$/$7!"4{FI$N0u$rIU$1$k;v$G$9!#$=$&$7$?>l9g!"\e(B
-\e$B$=$l$i$O$3$NL?Na$G$O%@%&%s%m!<%I$5$l$^$;$s!#\e(B
+\e$B$=$l$G!"$I$&$d$C$FBgNL$N5-;v<hF@$HCyC_<B8=$5$l$k$N$G$7$g$&$+!#L?\e(B
+\e$BNa\e(B @code{gnus-jog-cache} \e$B$OA4$F$N9XFI%0%k!<%W$KBP$7$F!"$9$Y$F$NL$FI5-;v\e(B
+\e$B$rMW5a$7!"%9%3%"$rIU$1!"%-%c%C%7%e$KJ]B8$7$^$9!#$3$NL?Na$r<B:]$K!"<B:]$K\e(B
+\e$B<B:]$K<B:]$K!";H$&$N$O!"\e(B1) @sc{nntp} \e$B%5!<%P!<$H$N@\B3$,K\Ev$K!"K\Ev$K!"\e(B
+\e$BK\Ev$KCY$/\e(B 2) \e$BK\Ev$K!"K\Ev$K!"K\Ev$K5pBg$J%G%#%9%/$r;}$C$F$$$k$H$-$@$1$K\e(B
+\e$B$9$k$Y$-$G$9!#$3$l$O??LLL\$K$$$C$F$$$^$9!#%@%&%s%m!<%I$5$l$k5-;v$N?t$r>/\e(B
+\e$B$J$/$9$k0l$D$NJ}K!$O!"M_$7$/$J$$5-;v$N%9%3%"$rDc$/$7!"4{FI$N0u$rIU$1$k;v\e(B
+\e$B$G$9!#$=$&$7$?>l9g!"$=$l$i$O$3$NL?Na$G$O%@%&%s%m!<%I$5$l$^$;$s!#\e(B
 
 @vindex gnus-uncacheable-groups
 @vindex gnus-cacheable-groups
-\e$B$$$/$D$+$N%0%k!<%W$G$O%-%c%C%7%e$r$7$?$/$J$$$H$$$&$N$ONI$/$"$k;v$G$9!#Nc$(\e(B
-\e$B$P!"\e(B@code{nnml} \e$B%a!<%k%G%#%l%/%H%j!<$,%[!<%`%G%#%l%/%H%j!<$N2<$K$"$l$P!"$=\e(B
-\e$B$l$r$"$J$?$N%[!<%`%G%#%l%/%H%j!<$N2<$NJL$N>l=j$K%-%c%C%7%e$9$k$N$O0UL#$NL5\e(B
-\e$B$$;v$G$9!#$"$J$?$,\e(B2\e$BG\$NMFNL$r;H$&;v$,NI$$$H46$8$J$$8B$j$O!#\e(B
+\e$B$$$/$D$+$N%0%k!<%W$G$O%-%c%C%7%e$r$7$?$/$J$$$H$$$&$N$ONI$/$"$k;v$G$9!#Nc\e(B
+\e$B$($P!"\e(B@code{nnml} \e$B%a!<%k%G%#%l%/%H%j!<$,%[!<%`%G%#%l%/%H%j!<$N2<$K$"$l$P!"\e(B
+\e$B$=$l$r$"$J$?$N%[!<%`%G%#%l%/%H%j!<$N2<$NJL$N>l=j$K%-%c%C%7%e$9$k$N$O0UL#\e(B
+\e$B$NL5$$;v$G$9!#$"$J$?$,FsG\$NMFNL$r;H$&;v$,NI$$$H46$8$J$$8B$j$O!#\e(B
 
 \e$B%-%c%C%7%e$r@)8B$9$k$?$a$K!"\e(B@code{gnus-cacheable-groups} \e$B$r\e(B \e$B$r%-%c%C%7%e\e(B
-\e$B$9$k%0%k!<%W$NO"A[%j%9%H!"Nc$($P\e(B @samp{^nntp}\e$B!"$H$9$k$+!"@55,I=8=\e(B
-@code{gnus-uncacheable-groups} \e$B$rNc$($P!"\e(B@samp{^nnml} \e$B$K@_Dj$7$F2<$5$$!#\e(B
-\e$BN>J}$NJQ?t$N=i4|CM$O\e(B @code{nil} \e$B$G$9!#$b$7%0%k!<%W$,N>J}$N@55,I=8=$K9gCW\e(B
-\e$B$9$k$H!"$=$N%0%k!<%W$O%-%c%C%7%e$5$l$^$;$s!#\e(B
+\e$B$9$k%0%k!<%W$NO"A[%j%9%H!"Nc$($P\e(B @samp{^nntp}\e$B!"$H$9$k$+!"@55,I=\e(B
+\e$B8=\e(B @code{gnus-uncacheable-groups} \e$B$rNc$($P!"\e(B@samp{^nnml} \e$B$K@_Dj$7$F2<$5\e(B
+\e$B$$!#N>J}$NJQ?t$N=i4|CM$O\e(B @code{nil} \e$B$G$9!#$b$7%0%k!<%W$,N>J}$N@55,I=8=$K\e(B
+\e$B9gCW$9$k$H!"$=$N%0%k!<%W$O%-%c%C%7%e$5$l$^$;$s!#\e(B
 
 @findex gnus-cache-generate-nov-databases
 @findex gnus-cache-generate-active
 @vindex gnus-cache-active-file
-\e$B%-%c%C%7%e$O$I$N5-;v$,4^$^$l$F$$$k$+$N>pJs$r%"%/%F%#%V%U%!%$%k\e(B
-(@code{gnus-cache-active-file}) \e$B$KN/$a$^$9!#$3$N%U%!%$%k!J$b$7$/$O%-%c%C\e(B
-\e$B%7%e$NB>$NItJ,!K$,2?$i$+$NM}M3$G$0$A$c$0$A$c$K$J$C$F$7$^$C$?>l9g!"\e(Bgnus
-\e$B$OJ*;v$r@5$7$/$9$k$?$a$K\e(B2\e$B$D$N4X?t$r$*4+$a$7$^$9!#\e(B@kbd{M-x
-gnus-cache-generate-nov-databases} \e$B$O$9$Y$F$N\e(B @sc{nov} \e$B%U%!%$%k$r!J:F!K\e(B
-\e$B:n@.$7!"\e(B@kbd{gnus-cache-generate-active} \e$B$O%"%/%F%#%V%U%!%$%k$r!J:F!K:n\e(B
-\e$B@.$7$^$9!#\e(B
-
+\e$B%-%c%C%7%e$O$I$N5-;v$,4^$^$l$F$$$k$+$N>pJs$r%"%/%F%#%V%U%!%$\e(B
+\e$B%k\e(B (@code{gnus-cache-active-file}) \e$B$KN/$a$^$9!#$3$N%U%!%$%k\e(B (\e$B$b$7$/$O%-%c%C\e(B
+\e$B%7%e$NB>$NItJ,\e(B) \e$B$,2?$i$+$NM}M3$G$0$A$c$0$A$c$K$J$C$F$7$^$C$?>l9g!"\e(B
+gnus \e$B$OJ*;v$r@5$7$/$9$k$?$a$KFs$D$N4X?t$r$*4+$a$7$^$9!#\e(B
+@kbd{M-x gnus-cache-generate-nov-databases} \e$B$O$9$Y$F$N\e(B @sc{nov} \e$B%U%!%$%k\e(B
+\e$B$r\e(B (\e$B:F\e(B) \e$B:n@.$7!"\e(B@kbd{gnus-cache-generate-active} \e$B$O%"%/%F%#%V%U%!%$%k\e(B
+\e$B$r\e(B (\e$B:F\e(B) \e$B:n@.$7$^$9!#\e(B
 
 @node Persistent Articles
 @section \e$B1JB35-;v\e(B
 @cindex persistent articles
-\e$B5-;v$N%-%c%C%7%e$H6a$$4X78$K$"$k$b$K!"\e(B@dfn{\e$B1JB35-;v\e(B}\e$B$,$"$j$^$9!#<B:]!"$=$l\e(B
-\e$B$O%-%c%C%7%e$NJL$N8+J}$G!";d$N0U8+$G$O$=$NJ}$,$b$C$HLr$KN)$A$^$9!#\e(B
+\e$B5-;v$N%-%c%C%7%e$H6a$$4X78$K$"$k$b$K!"\e(B@dfn{\e$B1JB35-;v\e(B}\e$B$,$"$j$^$9!#<B:]!"$=\e(B
+\e$B$l$O%-%c%C%7%e$NJL$N8+J}$G!";d$N0U8+$G$O$=$NJ}$,$b$C$HLr$KN)$A$^$9!#\e(B
 
-\e$BNc$($P!"%K%e!<%9%0%k!<%W$rFI$s$G$$$F!"$=$N$^$^1J1s$KJ]B8$7$FHkB"$7$?$$!"$$\e(B
-\e$B$/$D$+$N2ACM$"$kJu@P$K=P2q$C$?$H$7$^$7$g$&!#IaDL$O$=$l$r%U%!%$%k$KJ]B8$7$^\e(B
-\e$B$9!JB?$/$NJ]B8L?Na$N0l$D$r;H$C$F!K!#$=$l$NLdBj$O!"C1$K$"$N!"7y$J$@$1$G$9!#\e(B
-\e$BM}A[E*$K$O!"5-;v$O%0%k!<%W$G$"$J$?$,8+$D$1$?>l=j$K1J1s$K;D$C$F$$$k$Y$-$G$7$g\e(B
-\e$B$&!#%K%e!<%9%5!<%P!<$K$*$1$k4|8B:o=|$K$O1F6A$5$l$J$$$G!#\e(B
+\e$BNc$($P!"%K%e!<%9%0%k!<%W$rFI$s$G$$$F!"$=$N$^$^1J1s$KJ]B8$7$FHkB"$7$?$$!"\e(B
+\e$B$$$/$D$+$N2ACM$"$kJu@P$K=P2q$C$?$H$7$^$7$g$&!#IaDL$O$=$l$r%U%!%$%k$KJ]B8\e(B
+\e$B$7$^$9\e(B (\e$BB?$/$NJ]B8L?Na$N0l$D$r;H$C$F\e(B)\e$B!#$=$l$NLdBj$O!"C1$K$"$N!"7y$J$@$1\e(B
+\e$B$G$9!#M}A[E*$K$O!"5-;v$O%0%k!<%W$G$"$J$?$,8+$D$1$?>l=j$K1J1s$K;D$C$F$$$k\e(B
+\e$B$Y$-$G$7$g$&!#%K%e!<%9%5!<%P!<$K$*$1$k4|8B:o=|$K$O1F6A$5$l$J$$$G!#\e(B
 
-\e$B$3$l$,\e(B@dfn{\e$B1JB35-;v\e(B}\e$B$G$9!=!=5-;v$O:o=|$5$l$^$;$s!#$=$l$OIaDL$N%-%c%C%7%eL?\e(B
-\e$BNa$r;H$C$F<BAu$5$l$F$$$^$9$,!"1JB35-;v$N4IM}$r$9$k$?$a$K\e(B2\e$B$D$NL@<(E*$JL?Na\e(B
-\e$B$r;H$$$^$9!'\e(B
+\e$B$3$l$,\e(B@dfn{\e$B1JB35-;v\e(B}\e$B$G$9!=!=5-;v$O:o=|$5$l$^$;$s!#$=$l$OIaDL$N%-%c%C%7%e\e(B
+\e$BL?Na$r;H$C$F<BAu$5$l$F$$$^$9$,!"1JB35-;v$N4IM}$r$9$k$?$a$KFs$D$NL@<(E*$J\e(B
+\e$BL?Na$r;H$$$^$9\e(B:
 
 @table @kbd
 
 @item *
-@kindex * \e$B!J35N,!K\e(B
+@kindex * (\e$B35N,\e(B)
 @findex gnus-cache-enter-article
 \e$B8=:_$N5-;v$r1JB3$K$7$^$9\e(B (@code{gnus-cache-enter-article})\e$B!#\e(B
 
 @item M-*
-@kindex M-* \e$B!J35N,!K\e(B
+@kindex M-* (\e$B35N,\e(B)
 @findex gnus-cache-remove-article
 \e$B8=:_$N5-;v$r1JB35-;v$+$i<h$j=|$-$^$9\e(B (@code{gnus-cache-remove-articles})\e$B!#\e(B
 \e$B$3$l$OIaDL$O5-;v$r:o=|$7$^$9!#\e(B
@@ -5611,135 +6131,134 @@ gnus-cache-generate-nov-databases} \e$B$O$9$Y$F$N\e(B @sc{nov} \e$B%U%!%$%k$r!J:F!K
 
 \e$B$3$NL?Na$ON>J}$H$b%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$rM}2r$7$^$9!#\e(B
 
-\e$B$b$71JB35-;v$K$@$16=L#$,$"$k$N$G$7$?$i!"2D;k5-;v!J$d$=$NB>$N$b$N!K$,%-%c%C\e(B
-\e$B%7%e$KF~$k$N$rHr$1$k$?$a$K!"\e(B@code{gnus-use-cache} \e$B$r\e(B @code{passive} \e$B$K@_Dj\e(B
-\e$B$9$k$N$,NI$$$G$7$g$&!'\e(B
+\e$B$b$71JB35-;v$K$@$16=L#$,$"$k$N$G$7$?$i!"2D;k5-;v\e(B (\e$B$d$=$NB>$N$b$N\e(B) \e$B$,%-%c%C\e(B
+\e$B%7%e$KF~$k$N$rHr$1$k$?$a$K!"\e(B@code{gnus-use-cache} \e$B$r\e(B @code{passive} \e$B$K@_\e(B
+\e$BDj$9$k$N$,NI$$$G$7$g$&\e(B:
 
 @lisp
 (setq gnus-use-cache 'passive)
 @end lisp
 
-
 @node Article Backlog
 @section \e$B5-;v$N%P%C%/%m%0\e(B
 @cindex backlog
 @cindex article backlog
-\e$B$b$7CY$$@\B3$7$+$J$$>l9g$G!"%-%c%C%7%e$r;H$&$H$$$&H/A[$O$"$^$jL%NOE*$G$O$J\e(B
-\e$B$$$H$-!J<B:]$=$&$J$N$G$9$,!K!"\e(B@dfn{\e$B%P%C%/%m%0\e(B}\e$B$K@Z$jBX$($k;v$K$h$C$F>u67$r\e(B
-\e$B2?$H$+$9$k$3$H$,$G$-$^$9!#$3$l$O4{$KFI$s$@5-;v$r:F<hF@$7$J$/$FNI$$$h$&$K!"\e(B
-gnus \e$B$,4{$KFI$s$@5-;v$r0l;~J]B8$7$F$*$/$H$3$m$G$9!#$3$l$O$b$A$m$s!"$"$J$?\e(B
-\e$B$K:G6aFI$s$@5-;v$r:F$SA*Br$9$kJJ$,$"$k$H$-$@$1$KLrN)$A$^$9!#$b$7@dBP$K$=$l\e(B
-\e$B$r$7$J$$$N$G$"$l$P!"%P%C%/%m%0$r$9$k$3$H$O\e(B gnus \e$B$r>/$7CY$/$7!"%a%b%j!<$N;H\e(B
-\e$BMQNL$r$$$/$i$+A}$d$7$^$9!#\e(B
+\e$B$b$7CY$$@\B3$7$+$J$$>l9g$G!"%-%c%C%7%e$r;H$&$H$$$&H/A[$O$"$^$jL%NOE*$G$O\e(B
+\e$B$J$$$H$-\e(B (\e$B<B:]$=$&$J$N$G$9$,\e(B)\e$B!"\e(B@dfn{\e$B%P%C%/%m%0\e(B} \e$B$K@Z$jBX$($k;v$K$h$C$F\e(B
+\e$B>u67$r2?$H$+$9$k$3$H$,$G$-$^$9!#$3$l$O4{$KFI$s$@5-;v$r:F<hF@$7$J$/$FNI$$\e(B
+\e$B$h$&$K!"\e(Bgnus \e$B$,4{$KFI$s$@5-;v$r0l;~J]B8$7$F$*$/$H$3$m$G$9!#$3$l$O$b$A$m\e(B
+\e$B$s!"$"$J$?$K:G6aFI$s$@5-;v$r:F$SA*Br$9$kJJ$,$"$k$H$-$@$1$KLrN)$A$^$9!#$b\e(B
+\e$B$7@dBP$K$=$l$r$7$J$$$N$G$"$l$P!"%P%C%/%m%0$r$9$k$3$H$O\e(B gnus \e$B$r>/$7CY$/$7!"\e(B
+\e$B%a%b%j!<$N;HMQNL$r$$$/$i$+A}$d$7$^$9!#\e(B
 
 @vindex gnus-keep-backlog
-\e$B$b$7\e(B @code{gnus-keep-backlog} \e$B$r?t;z\e(B @var{n} \e$B$K@_Dj$9$k$H!"\e(Bgnus \e$B$O:GBg$G\e(B
-@var{n} \e$B$N8E$$5-;v$r8e$N:F<hF@$N$?$a$K%P%C%U%!$KN/$a$F$*$-$^$9!#$3$NJQ?t$,\e(B
-@code{nil} \e$B$G$O$J$/!"?t;z$G$b$J$$>l9g!"\e(Bgnus \e$B$O\e(B@emph{\e$BA4$F\e(B}\e$B$N4{FI5-;v$r$?$/\e(B
-\e$B$o$($^$9!#$3$l$O$"$J$?$N\e(B Emacs \e$B$,!"K=H/$7$F$"$J$?$N%^%7%s$,Mn$A$k$^$G@)8B\e(B
-\e$B$J$/KD$l>e$,$k$H$$$&$3$H$G$9!#;d$O$"$J$?J}A4$F$,855$$G$$$i$l$k$h$&$K$3$3$K\e(B
-\e$B=q$-2C$($^$7$?!#\e(B
+\e$B$b$7\e(B @code{gnus-keep-backlog} \e$B$r?t;z\e(B @var{n} \e$B$K@_Dj$9$k$H!"\e(Bgnus \e$B$O:GBg\e(B
+\e$B$G\e(B @var{n} \e$B$N8E$$5-;v$r8e$N:F<hF@$N$?$a$K%P%C%U%!$KN/$a$F$*$-$^$9!#$3$N\e(B
+\e$BJQ?t$,\e(B @code{nil} \e$B$G$O$J$/!"?t;z$G$b$J$$>l9g!"\e(Bgnus \e$B$O\e(B@emph{\e$BA4$F\e(B}\e$B$N4{FI5-\e(B
+\e$B;v$r$?$/$o$($^$9!#$3$l$O$"$J$?$N\e(B Emacs \e$B$,!"K=H/$7$F$"$J$?$N%^%7%s$,Mn$A\e(B
+\e$B$k$^$G@)8B$J$/KD$l>e$,$k$H$$$&$3$H$G$9!#;d$O$"$J$?J}A4$F$,855$$G$$$i$l$k\e(B
+\e$B$h$&$K$3$3$K=q$-2C$($^$7$?!#\e(B
 
 \e$B$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{nil} \e$B$G$9!#\e(B
 
-
 @node Saving Articles
 @section \e$B5-;v$NJ]B8\e(B
 @cindex saving articles
 
-Gnus \e$B$O$?$/$5$s$NJ}K!$G5-;v$rJ]B8$9$k;v$,$G$-$^$9!#0J2<$N$b$N$OHs>o$KN(D>\e(B
-\e$B$JJ}K!!JNc$($P!"5-;v$,J]B8$9$kA0$K$[$H$s$I2?$b$J$5$l$J$$!K$G5-;v$rJ]B8$9$k\e(B
-\e$B$?$a$N@bL@$G$9!#0c$C$?<jCJ!J\e(Buudecode\e$B$9$k!"\e(Bshar \e$B%U%!%$%k$rE83+$9$k!K$K$D$$\e(B
-\e$B$F$O\e(B@code{gnus-uu} \e$B$r;H$&$N$,NI$$$G$7$g$&\e(B (@pxref{Decoding Articles})\e$B!#\e(B
+Gnus \e$B$O$?$/$5$s$NJ}K!$G5-;v$rJ]B8$9$k;v$,$G$-$^$9!#0J2<$N$b$N$OHs>o$KN(\e(B
+\e$BD>$JJ}K!\e(B (\e$BNc$($P!"5-;v$,J]B8$9$kA0$K$[$H$s$I2?$b$J$5$l$J$$\e(B) \e$B$G5-;v$rJ]B8\e(B
+\e$B$9$k$?$a$N@bL@$G$9!#0c$C$?<jCJ\e(B (uudecode\e$B$9$k!"\e(Bshar \e$B%U%!%$%k$rE83+$9\e(B
+\e$B$k\e(B) \e$B$K$D$$$F$O\e(B@code{gnus-uu} \e$B$r;H$&$N$,NI$$$G$7$g\e(B
+\e$B$&\e(B (@pxref{Decoding Articles})\e$B!#\e(B
 
 @vindex gnus-save-all-headers
 @code{gnus-save-all-headers} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O5-;v$rJ]B8$9\e(B
 \e$B$kA0$KK>$^$7$/$J$$%X%C%@!<$r>C5n$7$^$;$s!#\e(B
 
 @vindex gnus-saved-headers
-\e$B$b$7>e$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"@55,I=8=\e(B @code{gnus-saved-headers}
-\e$B$K9gCW$9$k$9$Y$F$N%X%C%@!<$O;D$5$l!";D$j$N$b$N$OJ]B8$9$kA0$K:o=|$5$l$^$9!#\e(B
+\e$B$b$7>e$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"@55,I=\e(B
+\e$B8=\e(B @code{gnus-saved-headers} \e$B$K9gCW$9$k$9$Y$F$N%X%C%@!<$O;D$5$l!";D$j$N\e(B
+\e$B$b$N$OJ]B8$9$kA0$K:o=|$5$l$^$9!#\e(B
 
 @table @kbd
 
 @item O o
 @itemx o
-@kindex O o \e$B!J35N,!K\e(B
-@kindex o \e$B!J35N,!K\e(B
+@kindex O o (\e$B35N,\e(B)
+@kindex o (\e$B35N,\e(B)
 @findex gnus-summary-save-article
 @c @icon{gnus-summary-save-article}
-\e$B%G%#%U%)%k%H$N5-;vJ]B8$rMQ$$$F8=:_$N5-;v$rJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article})\e$B!#\e(B
+\e$B%G%#%U%)%k%H$N5-;vJ]B8$rMQ$$$F8=:_$N5-;v$rJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article})\e$B!#\e(B
 
 @item O m
-@kindex O m \e$B!J35N,!K\e(B
+@kindex O m (\e$B35N,\e(B)
 @findex gnus-summary-save-article-mail
-\e$B8=:_$N5-;v$r%a!<%k$NMM<0$GJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-mail})\e$B!#\e(B
+\e$B8=:_$N5-;v$r%a!<%k$NMM<0$GJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-mail})\e$B!#\e(B
 
 @item O r
-@kindex O r \e$B!J35N,!K\e(B
+@kindex O r (\e$B35N,\e(B)
 @findex gnus-summary-save-article-rmail
-\e$B8=:_$N5-;v$r\e(B rmail \e$B$NMM<0$GJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-rmail})\e$B!#\e(B
+\e$B8=:_$N5-;v$r\e(B rmail \e$B$NMM<0$GJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-rmail})\e$B!#\e(B
 
 @item O f
-@kindex O f \e$B!J35N,!K\e(B
+@kindex O f (\e$B35N,\e(B)
 @findex gnus-summary-save-article-file
 @c @icon{gnus-summary-save-article-file}
-\e$B8=:_$N5-;v$rIaDL$N%U%!%$%k\e(B (plain file) \e$BMM<0$GJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-file})\e$B!#\e(B
+\e$B8=:_$N5-;v$rIaDL$N%U%!%$%k\e(B (plain file) \e$BMM<0$GJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-file})\e$B!#\e(B
 
 @item O F
-@kindex O F \e$B!J35N,!K\e(B
+@kindex O F (\e$B35N,\e(B)
 @findex gnus-summary-write-article-file
 \e$B8=:_$N5-;v$rIaDL$N%U%!%$%kMM<0$GJ]B8$7!"0JA0$N%U%!%$%k$NFbMF$r>e=q$-$7$^\e(B
 \e$B$9\e(B (@code{gnus-summary-write-article-file})\e$B!#\e(B
 
 @item O b
-@kindex O b \e$B!J35N,!K\e(B
+@kindex O b (\e$B35N,\e(B)
 @findex gnus-summary-save-article-body-file
-\e$B8=:_$N5-;v$NK\J8\e(B (body) \e$B$rIaDL$N%U%!%$%kMM<0$GJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-body-file})\e$B!#\e(B
+\e$B8=:_$N5-;v$NK\J8\e(B (body) \e$B$rIaDL$N%U%!%$%kMM<0$GJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-body-file})\e$B!#\e(B
 
 @item O h
-@kindex O h \e$B!J35N,!K\e(B
+@kindex O h (\e$B35N,\e(B)
 @findex gnus-summary-save-article-folder
-\e$B8=:_$N5-;v$r\e(B mh \e$B$N%U%)%k%@!<$NMM<0$GJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-folder})\e$B!#\e(B
+\e$B8=:_$N5-;v$r\e(B mh \e$B$N%U%)%k%@!<$NMM<0$GJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-folder})\e$B!#\e(B
 
 @item O v
-@kindex O v \e$B!J35N,!K\e(B
+@kindex O v (\e$B35N,\e(B)
 @findex gnus-summary-save-article-vm
-\e$B8=:_$N5-;v$r\e(B VM \e$B%U%)%k%@!<$KJ]B8$7$^$9\e(B
-(@code{gnus-summary-save-article-vm})\e$B!#\e(B
+\e$B8=:_$N5-;v$r\e(B VM \e$B%U%)%k%@!<$KJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-save-article-vm})\e$B!#\e(B
 
 @item O p
-@kindex O p \e$B!J35N,!K\e(B
+@kindex O p (\e$B35N,\e(B)
 @findex gnus-summary-pipe-output
-\e$B8=:_$N5-;v$r%Q%$%W$KJ]B8$7$^$9!#$&!<$s$H!"$"$N$)!";d$,8@$*$&$H$7$F$$$k;v$O!=!=\e(B
-\e$B8=:_$N5-;v$r%W%m%;%9$K%Q%$%W$9$k$H$$$&$3$H$G$9\e(B
-(@code{gnus-summary-pipe-output})\e$B!#\e(B
+\e$B8=:_$N5-;v$r%Q%$%W$KJ]B8$7$^$9!#$&!<$s$H!"$"$N$)!";d$,8@$*$&$H$7$F$$$k;v\e(B
+\e$B$O!=!=8=:_$N5-;v$r%W%m%;%9$K%Q%$%W$9$k$H$$$&$3$H$G\e(B
+\e$B$9\e(B (@code{gnus-summary-pipe-output})\e$B!#\e(B
 @end table
 
 @vindex gnus-prompt-before-saving
-\e$B$9$Y$F$N$3$l$i$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H$$$^$9\e(B
-(@pxref{Process/Prefix})\e$B!#$b$7$3$l$i$N4X?t$r;H$C$F$?$/$5$s$N5-;v$rJ]B8$7\e(B
-\e$B$?>l9g!"$=$l$>$l$N$9$Y$F$N5-;v$KBP$7$F%U%!%$%kL>$NF~NO$rMW5a$5$l$k;v$KK0\e(B
-\e$B$-K0$-$9$k$G$7$g$&!#F~NOB%?JF0:n$OJQ?t\e(B @code{gnus-prompt-before-saving}
-\e$B$K$h$C$F@)8f$5$l$^$9!#$3$l$O%G%#%U%)%k%H$G$O\e(B @code{always} \e$B$G!"$"$J$?$,\e(B
-\e$BCN$C$F$$$F7y$,$C$F$$$k!"2a>j$JB%?JF0:n$r$7$^$9!#Be$o$j$K$3$NJQ?t$r\e(B
-@code{t} \e$B$K@_Dj$9$k$H!"$"$J$?$,J]B8$9$k$=$l$>$l$N0lO"$N5-;v$KBP$7$F0l2s\e(B
-\e$B$@$1B%$5$l$^$9!#K\Ev$K\e(B gnus \e$B$K$9$Y$F$N;W9M$r$5$;$?$$$N$G$"$l$P!"$3$NJQ?t\e(B
-\e$B$r\e(B@code{nil} \e$B$K$9$k$3$H$5$($G$-$^$9!#$=$7$F!"5-;v$rJ]B8$9$k$?$a$N%U%!%$\e(B
-\e$B%k$rB%$5$l$k;v$O$"$j$^$;$s!#\e(BGnus \e$B$OC1=c$K$9$Y$F$N5-;v$r%G%#%U%)%k%H$N%U%!\e(B
-\e$B%$%k$KJ]B8$7$^$9!#\e(B
-
+\e$B$9$Y$F$N$3$l$i$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H$$$^\e(B
+\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#$b$7$3$l$i$N4X?t$r;H$C$F$?$/$5$s$N5-;v$rJ]\e(B
+\e$BB8$7$?>l9g!"$=$l$>$l$N$9$Y$F$N5-;v$KBP$7$F%U%!%$%kL>$NF~NO$rMW5a$5$l$k;v\e(B
+\e$B$KK0$-K0$-$9$k$G$7$g$&!#F~NOB%?JF0:n$OJQ\e(B
+\e$B?t\e(B @code{gnus-prompt-before-saving} \e$B$K$h$C$F@)8f$5$l$^$9!#$3$l$O%G%#%U%)\e(B
+\e$B%k%H$G$O\e(B @code{always} \e$B$G!"$"$J$?$,CN$C$F$$$F7y$,$C$F$$$k!"2a>j$JB%?JF0\e(B
+\e$B:n$r$7$^$9!#Be$o$j$K$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$H!"$"$J$?$,J]B8$9$k$=\e(B
+\e$B$l$>$l$N0lO"$N5-;v$KBP$7$F0l2s$@$1B%$5$l$^$9!#K\Ev$K\e(B gnus \e$B$K$9$Y$F$N;W9M\e(B
+\e$B$r$5$;$?$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K$9$k$3$H$5$($G$-$^$9!#$=$7\e(B
+\e$B$F!"5-;v$rJ]B8$9$k$?$a$N%U%!%$%k$rB%$5$l$k;v$O$"$j$^$;$s!#\e(BGnus \e$B$OC1=c$K\e(B
+\e$B$9$Y$F$N5-;v$r%G%#%U%)%k%H$N%U%!%$%k$KJ]B8$7$^$9!#\e(B
 
 @vindex gnus-default-article-saver
-Gnus \e$B$,$"$J$?$NK>$`$H$*$j$K$J$k$h$&$K!"JQ?t\e(B
-@code{gnus-default-article-saver} \e$B$r%+%9%?%^%$%:$9$k;v$,$G$-$^$9!#2<$N#4$D\e(B
-\e$B$N4{@=4X?t$r;H$&;v$,$G$-$^$9$7!"<+J,<+?H$N4X?t$r:n$k;v$b$G$-$^$9!#\e(B
+Gnus \e$B$,$"$J$?$NK>$`$H$*$j$K$J$k$h$&$K!"JQ\e(B
+\e$B?t\e(B @code{gnus-default-article-saver} \e$B$r%+%9%?%^%$%:$9$k;v$,$G$-$^$9!#2<\e(B
+\e$B$NO;$D$N4{@=4X?t$r;H$&;v$,$G$-$^$9$7!"<+J,<+?H$N4X?t$r:n$k;v$b$G$-$^$9!#\e(B
 
 @table @code
 
@@ -5747,18 +6266,18 @@ Gnus \e$B$,$"$J$?$NK>$`$H$*$j$K$J$k$h$&$K!"JQ?t\e(B
 @findex gnus-summary-save-in-rmail
 @vindex gnus-rmail-save-name
 @findex gnus-plain-save-name
-\e$B$3$l$O%G%#%U%)%k%H$NMM<0!"\e(B@dfn{babyl} \e$B$G$9!#JQ?t\e(B
-@code{gnus-ramil-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N%U%!\e(B
-\e$B%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H$O\e(B
-@code{gnus-plain-save-name} \e$B$G$9!#\e(B
-
+\e$B$3$l$O%G%#%U%)%k%H$NMM<0!"\e(B@dfn{babyl} \e$B$G$9!#JQ\e(B
+\e$B?t\e(B @code{gnus-ramil-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N\e(B
+\e$B%U%!%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{gnus-plain-save-name} \e$B$G$9!#\e(B
 
 @item gnus-summary-save-in-mail
 @findex gnus-summary-save-in-mail
 @vindex gnus-mail-save-name
-Unix \e$B%a!<%k\e(B (mbox) \e$B%U%!%$%k$KJ]B8$7$^$9!#JQ?t\e(B @code{gnus-mail-save-name}
-\e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N%U%!%$%kL>$r<hF@$9$k$?$a$K;HMQ$7\e(B
-\e$B$^$9!#%G%#%U%)%k%H$O\e(B @code{gnus-plain-save-name} \e$B$G$9!#\e(B
+Unix \e$B%a!<%k\e(B (mbox) \e$B%U%!%$%k$KJ]B8$7$^$9!#JQ\e(B
+\e$B?t\e(B @code{gnus-mail-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N%U%!\e(B
+\e$B%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{gnus-plain-save-name} \e$B$G$9!#\e(B
 
 @item gnus-summary-save-in-file
 @findex gnus-summary-save-in-file
@@ -5770,11 +6289,10 @@ Unix \e$B%a!<%k\e(B (mbox) \e$B%U%!%$%k$KJ]B8$7$^$9!#JQ?t\e(B @code{gnus-mail-save-n
 
 @item gnus-summary-save-body-in-file
 @findex gnus-summary-save-body-in-file
-\e$B5-;v$NK\BN$rDL>o$N%U%!%$%k$N8e$KDI2C$7$^$9!#JQ?t\e(B
-@code{gnus-file-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N%U%!\e(B
-\e$B%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H$O\e(B
-@code{gnus-numeric-save-name} \e$B$G$9!#\e(B
-
+\e$B5-;v$NK\BN$rDL>o$N%U%!%$%k$N8e$KDI2C$7$^$9!#JQ\e(B
+\e$B?t\e(B @code{gnus-file-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v$rJ]B8$9$k$?$a$N%U%!\e(B
+\e$B%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{gnus-numeric-save-name} \e$B$G$9!#\e(B
 
 @item gnus-summary-save-in-folder
 @findex gnus-summary-save-in-folder
@@ -5785,9 +6303,10 @@ Unix \e$B%a!<%k\e(B (mbox) \e$B%U%!%$%k$KJ]B8$7$^$9!#JQ?t\e(B @code{gnus-mail-save-n
 @cindex MH folders
 MH \e$B%i%$%V%i%j!<$N\e(B @code{rcvstore} \e$B$rMQ$$$k;v$K$h$C$F5-;v$r\e(B MH \e$B%U%)%k%@!<\e(B
 \e$B$KJ]B8$7$^$9!#JQ?t\e(B @code{gnus-folder-save-name} \e$B$KF~$C$F$$$k4X?t$r!"5-;v\e(B
-\e$B$rJ]B8$9$k%U%!%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H$O\e(B
-@code{gnus-folder-save-name} \e$B$G$9$,!"\e(B@code{gnus-Folder-save-name} \e$B$b;H$&\e(B
-\e$B;v$,$G$-$F!"$3$A$i$O@hF,$,BgJ8;z!";D$j$,>.J8;z$K$J$C$?L>A0$r$D$/$j$^$9!#\e(B
+\e$B$rJ]B8$9$k%U%!%$%kL>$r<hF@$9$k$?$a$K;HMQ$7$^$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{gnus-folder-save-name} \e$B$G$9$,!"\e(B@code{gnus-Folder-save-name} \e$B$b\e(B
+\e$B;H$&;v$,$G$-$F!"$3$A$i$O@hF,$,BgJ8;z!";D$j$,>.J8;z$K$J$C$?L>A0$r$D$/$j$^\e(B
+\e$B$9!#\e(B
 
 @item gnus-summary-save-in-vm
 @findex gnus-summary-save-in-vm
@@ -5801,8 +6320,8 @@ MH \e$B%i%$%V%i%j!<$N\e(B @code{rcvstore} \e$B$rMQ$$$k;v$K$h$C$F5-;v$r\e(B MH \e$B%U%
 \e$B$O%G%#%U%)%k%H$G$O\e(B @file{~/News/} \e$B$G$9!#\e(B
 
 \e$B>e$K$"$k$h$&$K!"5-;v$rJ]B8$9$k$?$a$N%U%!%$%k$NE,@Z$JL>A0$r8+$D$1$k$?$a$K!"\e(B
-\e$B4X?t$O0c$C$?4X?t$rMQ$$$^$9!#0J2<$OL>A0$r@8@.$9$k$?$a$K;HMQ2DG=$J4X?t$N%j%9\e(B
-\e$B%H$G$9!'\e(B
+\e$B4X?t$O0c$C$?4X?t$rMQ$$$^$9!#0J2<$OL>A0$r@8@.$9$k$?$a$K;HMQ2DG=$J4X?t$N%j\e(B
+\e$B%9%H$G$9\e(B:
 
 @table @code
 
@@ -5825,9 +6344,10 @@ MH \e$B%i%$%V%i%j!<$N\e(B @code{rcvstore} \e$B$rMQ$$$k;v$K$h$C$F5-;v$r\e(B MH \e$B%U%
 
 @vindex gnus-split-methods
 \e$BO"A[%j%9%H\e(B @code{gnus-split-methods} \e$B$K@55,I=8=$rJ|$j9~$`;v$K$h$C$F!"\e(B
-gnus \e$B$K5-;v$rJ]B8$9$k>l=j$rDs0F$9$k;v$,$G$-$^$9!#Nc$($P!"\e(Bgnus \e$B$K4XO"$7$?5-\e(B
-\e$B;v$r%U%!%$%k\e(B @file{gnus-stuff} \e$B$K!"\e(BVM \e$B$K4XO"$7$?5-;v$r\e(B @code{vm-stuff} \e$BJ]\e(B
-\e$BB8$7$?$1$l$P!"$3$NJQ?t$r0J2<$N$h$&$K$9$k;v$,$G$-$^$9!'\e(B
+gnus \e$B$K5-;v$rJ]B8$9$k>l=j$rDs0F$9$k;v$,$G$-$^$9!#Nc$($P!"\e(Bgnus \e$B$K4XO"$7$?\e(B
+\e$B5-;v$r%U%!%$%k\e(B @file{gnus-stuff} \e$B$K!"\e(BVM \e$B$K4XO"$7$?5-;v\e(B
+\e$B$r\e(B @code{vm-stuff} \e$BJ]B8$7$?$1$l$P!"$3$NJQ?t$r0J2<$N$h$&$K$9$k;v$,$G$-$^\e(B
+\e$B$9\e(B:
 
 @lisp
 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
@@ -5836,28 +6356,28 @@ gnus \e$B$K5-;v$rJ]B8$9$k>l=j$rDs0F$9$k;v$,$G$-$^$9!#Nc$($P!"\e(Bgnus \e$B$K4XO"$7$
  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
 @end lisp
 
-\e$B$3$l$O$=$l$>$l$NMWAG$,!"\e(B2\e$B$D$NMWAG!=!=\e(B@dfn{\e$B9gCW\e(B} \e$B$H\e(B @dfn{\e$B%U%!%$%k\e(B} \e$B$r;}$D\e(B
-\e$B%j%9%H$G$"$k%j%9%H$G$"$k$H$$$&;v$,$o$+$j$^$9!#9gCW$OJ8;zNs!J$3$N>l9g$O5-;v\e(B
-\e$B$N%X%C%@!<$K9gCW$9$k@55,I=8=$H$7$F;H$o$l$^$9!K$*$h$S!"%7%s%\%k!J%0%k!<%WL>\e(B
-\e$B$r0z?t$H$7$F!"4X?t$H$7$F8F$P$l$^$9!K$*$h$S!"%j%9%H!J$3$l$OI>2A\e(B
-(@code{eval}) \e$B$5$l$^$9!K$G$"$k$3$H$,$G$-$^$9!#$b$7$3$l$i$NF0:n$N0l$D$G$b\e(B
-@code{nil} \e$B$G$J$$7k2L$rJV$9$H!"\e(B@dfn{\e$B%U%!%$%k\e(B}\e$B$,%G%#%U%)%k%H$NB%?J$H$7$F;H\e(B
-\e$B$o$l$^$9!#2C$($F!"8F$P$l$?4X?t$+<0$,J8;zNs$+J8;zNs$N%j%9%H$rJV$7$?$H$-$O!"\e(B
-\e$B1i;;$N7k2L<+BN$,;H$o$l$^$9!#\e(B
+\e$B$3$l$O$=$l$>$l$NMWAG$,!"Fs$D$NMWAG!=!=\e(B@dfn{\e$B9gCW\e(B} \e$B$H\e(B @dfn{\e$B%U%!%$%k\e(B} \e$B$r;}\e(B
+\e$B$D%j%9%H$G$"$k%j%9%H$G$"$k$H$$$&;v$,$o$+$j$^$9!#9gCW$OJ8;zNs\e(B (\e$B$3$N>l9g$O\e(B
+\e$B5-;v$N%X%C%@!<$K9gCW$9$k@55,I=8=$H$7$F;H$o$l$^$9\e(B) \e$B$*$h$S!"%7%s%\%k\e(B (\e$B%0%k!<\e(B
+\e$B%WL>$r0z?t$H$7$F!"4X?t$H$7$F8F$P$l$^$9\e(B) \e$B$*$h$S!"%j%9%H\e(B (\e$B$3$l$OI>\e(B
+\e$B2A\e(B (@code{eval}) \e$B$5$l$^$9\e(B) \e$B$G$"$k$3$H$,$G$-$^$9!#$b$7$3$l$i$NF0:n$N0l$D\e(B
+\e$B$G$b\e(B @code{nil} \e$B$G$J$$7k2L$rJV$9$H!"\e(B@dfn{\e$B%U%!%$%k\e(B}\e$B$,%G%#%U%)%k%H$NB%?J$H\e(B
+\e$B$7$F;H$o$l$^$9!#2C$($F!"8F$P$l$?4X?t$+<0$,J8;zNs$+J8;zNs$N%j%9%H$rJV$7$?\e(B
+\e$B$H$-$O!"1i;;$N7k2L<+BN$,;H$o$l$^$9!#\e(B
 
-\e$B4pK\E*$K$O!"8=:_$N5-;v$rJ]B8$9$k$N$K;H$o$l$k2DG=@-$N$"$k%U%!%$%kL>$N%j%9%H\e(B
-\e$B$r<j$KF~$l$k;v$K$J$j$^$9!#!J$9$Y$F$N!X9gCW!Y$,;H$o$l$^$9!#!K$=$l$+$iK\Ev$K\e(B
-\e$BL>A0$H$7$F;H$$$?$$$b$N$rB%$5$l!"$3$NJQ?t$rE,MQ$9$k;v$K$h$jF@$i$l$?7k2L$+$i\e(B
-\e$B%U%!%$%kL>Jd40$r$7$FF~NO$7$^$9!#\e(B
+\e$B4pK\E*$K$O!"8=:_$N5-;v$rJ]B8$9$k$N$K;H$o$l$k2DG=@-$N$"$k%U%!%$%kL>$N%j%9\e(B
+\e$B%H$r<j$KF~$l$k;v$K$J$j$^$9!#\e(B(\e$B$9$Y$F$N!X9gCW!Y$,;H$o$l$^$9!#\e(B) \e$B$=$l$+$iK\\e(B
+\e$BEv$KL>A0$H$7$F;H$$$?$$$b$N$rB%$5$l!"$3$NJQ?t$rE,MQ$9$k;v$K$h$jF@$i$l$?7k\e(B
+\e$B2L$+$i%U%!%$%kL>Jd40$r$7$FF~NO$7$^$9!#\e(B
 
-\e$B$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{((gnus-article-archive-name))} \e$B$G!"\e(Bgnus
-\e$BJ]B8$9$k5-;v$N\e(B @code{Archive-name} \e$B9T$rD4$Y$F!"$=$l$r%U%!%$%kL>$NDs0F$H\e(B
-\e$B$7$F;H$&$H$$$&;v$G$9!#\e(B
+\e$B$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{((gnus-article-archive-name))} \e$B$G!"\e(B
+gnus \e$B$,J]B8$9$k5-;v$N\e(B @code{Archive-name} \e$B9T$rD4$Y$F!"$=$l$r%U%!%$%kL>$N\e(B
+\e$BDs0F$H$7$F;H$&$H$$$&;v$G$9!#\e(B
 
 \e$B$3$l$O%U%!%$%kL>$r>/$7$-$l$$$K$9$k4X?t$NNc$G$9!#\e(B
 @samp{nnml:mail.whatever} \e$B$N$h$&$J%a!<%k%0%k!<%W$,$?$/$5$s$"$k$N$G$"$l$P!"\e(B
 \e$BJ]B8$9$k$?$a$N%U%!%$%kL>$r:n$kA0$K$3$l$i$N%0%k!<%WL>$N:G=i$r@Z$jMn$H$7$?\e(B
-\e$B$$$+$b$7$l$^$;$s!#<!$NJ*$O$A$g$&$I$=$l$r$7$^$9!'\e(B
+\e$B$$$+$b$7$l$^$;$s!#<!$NJ*$O$A$g$&$I$=$l$r$7$^$9\e(B:
 
 @lisp
 (defun my-save-name (group)
@@ -5869,16 +6389,15 @@ gnus \e$B$K5-;v$rJ]B8$9$k>l=j$rDs0F$9$k;v$,$G$-$^$9!#Nc$($P!"\e(Bgnus \e$B$K4XO"$7$
         (my-save-name)))
 @end lisp
 
-
 @vindex gnus-use-long-file-name
-\e$B:G8e$K\e(B @code{gnus-use-long-file-name} \e$B$H$$$&JQ?t$,$"$j$^$9!#$3$l$,\e(B
-@code{nil} \e$B$G$"$k$H!"$9$Y$F$N>e5-$N4X?t$O%0%k!<%WL>$N$9$Y$F$N%T%j%*%I\e(B
-(@samp{.}) \e$B$r%9%i%C%7%e\e(B (@samp{/}) \e$B$GCV$-49$($^$9!=!=$3$l$O4X?t$O$9$Y$F$N\e(B
-\e$B%U%!%$%k$r0lHV>e$N%G%#%l%/%H%j!<$KCV$/$N$G$O$J$/!"3,AXE*$J%G%#%l%/%H%j!<$r\e(B
-\e$B:n$k$H$$$&;v$G$9!J\e(B@file{~/News/alt.andrea-dworkin} \e$B$NBe$o$j$K\e(B
-@file{~/News/alt/andrea-dworkin}\e$B!#!K$3$NJQ?t$O$?$$$F$$$N%7%9%F%`$K$*$$$F%G%#\e(B
-\e$B%U%)%k%H$G\e(B @code{t} \e$B$G$9!#$7$+$7!"Nr;KE*$JM}M3$+$i\e(B Xenix \e$B$H\e(B usg-unix-v \e$B%^\e(B
-\e$B%7%s$G$O%G%#%U%)%k%H$G\e(B @code{nil} \e$B$G$9!#\e(B
+\e$B:G8e$K\e(B @code{gnus-use-long-file-name} \e$B$H$$$&JQ?t$,$"$j$^$9!#$3$l\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$k$H!"$9$Y$F$N>e5-$N4X?t$O%0%k!<%WL>$N$9$Y$F$N%T%j%*\e(B
+\e$B%I\e(B (@samp{.}) \e$B$r%9%i%C%7%e\e(B (@samp{/}) \e$B$GCV$-49$($^$9!=!=$3$l$O4X?t$O$9$Y\e(B
+\e$B$F$N%U%!%$%k$r0lHV>e$N%G%#%l%/%H%j!<$KCV$/$N$G$O$J$/!"3,AXE*$J%G%#%l%/%H\e(B
+\e$B%j!<$r:n$k$H$$$&;v$G$9\e(B (@file{~/News/alt.andrea-dworkin} \e$B$NBe$o$j\e(B
+\e$B$K\e(B @file{~/News/alt/andrea-dworkin}\e$B!#\e(B) \e$B$3$NJQ?t$O$?$$$F$$$N%7%9%F%`$K$*\e(B
+\e$B$$$F%G%#%U%)%k%H$G\e(B @code{t} \e$B$G$9!#$7$+$7!"Nr;KE*$JM}M3$+\e(B
+\e$B$i\e(B Xenix \e$B$H\e(B usg-unix-v \e$B%^%7%s$G$O%G%#%U%)%k%H$G\e(B @code{nil} \e$B$G$9!#\e(B
 
 \e$B$3$N4X?t$O:o=|$H%9%3%"$N%U%!%$%kL>$K1F6A$7$^$9!#$3$NJQ?t$,%j%9%H$G!"%j%9\e(B
 \e$B%H$KMWAG\e(B @code{not-score} \e$B$,$"$k$H!"D9$$%U%!%$%kL>$O%9%3%"%U%!%$%k$K$O;H\e(B
@@ -5886,56 +6405,54 @@ gnus \e$B$K5-;v$rJ]B8$9$k>l=j$rDs0F$9$k;v$,$G$-$^$9!#Nc$($P!"\e(Bgnus \e$B$K4XO"$7$
 \e$B;H$o$l$:!"MWAG\e(B @code{not-kill} \e$B$,$"$k$H!"D9$$%U%!%$%kL>$O:o=|%U%!%$%k$K\e(B
 \e$B$O;H$o$l$^$;$s!#\e(B
 
-\e$B$b$75-;v$r%9%W!<%k$N$h$&$J3,AX$KJ]B8$7$?$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^$9\e(B
+\e$B$b$75-;v$r%9%W!<%k$N$h$&$J3,AX$KJ]B8$7$?$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^$9!#\e(B
 
 @lisp
 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
 (setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding
 @end lisp
 
-\e$B$=$l$+$i\e(B @kbd{o} \e$B$K$h$C$F5-;v$rJ]B8$9$k$@$1$G$9!#$=$l$+$i$3$N3,AX$rC;L?$J\e(B
-@code{nneething} \e$B%0%k!<%W$K$h$C$FFI$`;v$,$G$-$^$9!=!=%0%k!<%W%P%C%U%!$G\e(B
-@kbd{G D} \e$B$H$7!"0lHV>e$N%G%#%l%/%H%j!<$r0z?t\e(B (@file{~/News/}) \e$B$H$7$FEO$7$^\e(B
-\e$B$9!#\e(B
-
+\e$B$=$l$+$i\e(B @kbd{o} \e$B$K$h$C$F5-;v$rJ]B8$9$k$@$1$G$9!#$=$l$+$i$3$N3,AX$rC;L?\e(B
+\e$B$J\e(B @code{nneething} \e$B%0%k!<%W$K$h$C$FFI$`;v$,$G$-$^$9!=!=%0%k!<%W%P%C%U%!\e(B
+\e$B$G\e(B @kbd{G D} \e$B$H$7!"0lHV>e$N%G%#%l%/%H%j!<$r0z?t\e(B (@file{~/News/}) \e$B$H$7$F\e(B
+\e$BEO$7$^$9!#\e(B
 
 @node Decoding Articles
 @section \e$B5-;v$NI|9f2=\e(B
 @cindex decoding articles
 
-\e$B$H$-$I$-MxMQ<T$O2?$i$+$NJ}K!$GId9f2=$5$l$?5-;v!J$b$7$/$O5-;v72!K$rEj9F$7\e(B
+\e$B$H$-$I$-MxMQ<T$O2?$i$+$NJ}K!$GId9f2=$5$l$?5-;v\e(B (\e$B$b$7$/$O5-;v72\e(B) \e$B$rEj9F$7\e(B
 \e$B$^$9!#\e(BGnus \e$B$O$"$J$?$N$?$a$K$=$l$i$rI|9f2=$9$k;v$,$G$-$^$9!#\e(B
 
 @menu
-* Uuencoded Articles::    \e$B5-;v$r\e(B uuencode \e$B$9$k!#\e(B
-* Shell Archives::        shar \e$B5-;v$r2rE`$9$k!#\e(B
-* PostScript Files::      \e$B%]%9%H%9%/%j%W%H$rJ,3d$9$k!#\e(B
-* Other Files::           \e$BIaDL$NJ]B8$H\e(B binhex.
-* Decoding Variables::    \e$B9,$;$JI|9f2=$N$?$a$NJQ?t!#\e(B
-* Viewing Files::         \e$BI|9f2=$N7k2L$r8+$?$$!)\e(B
+* Uuencoded Articles:: \e$B5-;v$r\e(B uuencode \e$B$9$k\e(B
+* Shell Archives::     shar \e$B5-;v$r2rE`$9$k\e(B
+* PostScript Files::   \e$B%]%9%H%9%/%j%W%H$rJ,3d$9$k\e(B
+* Other Files::        \e$BIaDL$NJ]B8$H\e(B binhex.
+* Decoding Variables:: \e$B9,$;$JI|9f2=$N$?$a$NJQ?t\e(B
+* Viewing Files::      \e$BI|9f2=$N7k2L$r8+$?$$\e(B?
 @end menu
 
 @cindex series
 @cindex article series
 \e$B$3$l$i$9$Y$F$N4X?t$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B (@pxref{Process/Prefix}) \e$B$r!"\e(B
-\e$B!X0l$D$N5-;v!Y$r!X0l$D$N72!Y$H2r<a$9$k3HD%$r$7$F!"$I$N5-;v$KA`:n$r$9$k$+$r\e(B
-\e$B8+$D$1$k$?$a$K;H$$$^$9!#\e(BGnus \e$B$O<+J,<+?H$G$I$N5-;v$,$=$N72$KB0$7$F$$$k$+$r\e(B
-\e$BH=CG$7!"$9$Y$F$N5-;v$rI|9f2=$7$F!"$=$N7k2L$N%U%!%$%k$r\e(B \e$BE83+\e(B/\e$B1\Mw\e(B/\e$BJ]B8\e(B \e$B$9$k\e(B
-\e$B$3$H$,$G$-$^$9!#\e(B
+\e$B!X0l$D$N5-;v!Y$r!X0l$D$N72!Y$H2r<a$9$k3HD%$r$7$F!"$I$N5-;v$KA`:n$r$9$k$+\e(B
+\e$B$r8+$D$1$k$?$a$K;H$$$^$9!#\e(BGnus \e$B$O<+J,<+?H$G$I$N5-;v$,$=$N72$KB0$7$F$$$k\e(B
+\e$B$+$rH=CG$7!"$9$Y$F$N5-;v$rI|9f2=$7$F!"$=$N7k2L$N%U%!%$%k$r\e(B \e$BE83+\e(B/\e$B1\Mw\e(B/\e$BJ]\e(B
+\e$BB8\e(B \e$B$9$k$3$H$,$G$-$^$9!#\e(B
 
-Gnus \e$B$O0J2<$N4JC1$J5,B'$KB'$C$F$I$N5-;v$,72$KB0$9$k$N$+$r?dB,$7$^$9!'\e(B \e$BI=Bj\e(B
-\e$B$O9T$N:G8e$N\e(B2\e$B$D$N?t;z$r=|$$$F!J$[$H$s$I!KF1$8$G$"$kI,MW$,$"$j$^$9!#!J6uGr\e(B
-\e$B$OBgBNL5;k$5$l$^$9$,!#!K\e(B
+Gnus \e$B$O0J2<$N4JC1$J5,B'$KB'$C$F$I$N5-;v$,72$KB0$9$k$N$+$r?dB,$7$^$9\e(B: \e$BI=\e(B
+\e$BBj$O9T$N:G8e$NFs$D$N?t;z$r=|$$$F\e(B (\e$B$[$H$s$I\e(B) \e$BF1$8$G$"$kI,MW$,$"$j$^$9!#\e(B
+(\e$B6uGr$OBgBNL5;k$5$l$^$9$,!#\e(B)
 
-\e$BNc$($P!'\e(B @samp{cat.gif (2/3)} \e$B$H$$$&$h$&$JI=Bj$rA*$V$H!"\e(Bgnus \e$B$O@55,I=8=\e(B
-@samp{^cat.gif ([0-9]+/[0-9]+).*$} \e$B$K9gCW$9$k$9$Y$F$N5-;v$r8+$D$1$h$&$H$7\e(B
-\e$B$^$9!#\e(B
+\e$BNc$($P\e(B: @samp{cat.gif (2/3)} \e$B$H$$$&$h$&$JI=Bj$rA*$V$H!"\e(Bgnus \e$B$O@55,I=\e(B
+\e$B8=\e(B @samp{^cat.gif ([0-9]+/[0-9]+).*$} \e$B$K9gCW$9$k$9$Y$F$N5-;v$r8+$D$1$h$&\e(B
+\e$B$H$7$^$9!#\e(B
 
 @samp{cat.gif (2/3) Part 6 of a series} \e$B$N$h$&$JI8=`$G$J$$I=Bj$O$I$N<+F0\e(B
 \e$B1\MwL?Na$K$h$C$F$bE,@Z$KG'<1$5$l$J$$$?$a!"<j$G5-;v$K\e(B @kbd{#} \e$B$N0u$rIU$1\e(B
 \e$B$J$1$l$P$J$j$^$;$s!#\e(B
 
-
 @node Uuencoded Articles
 @subsection uuencode \e$B$5$l$?5-;v\e(B
 @cindex uudecode
@@ -5944,46 +6461,46 @@ Gnus \e$B$O0J2<$N4JC1$J5,B'$KB'$C$F$I$N5-;v$,72$KB0$9$k$N$+$r?dB,$7$^$9!'\e(B \e$BI
 @table @kbd
 
 @item X u
-@kindex X u \e$B!J35N,!K\e(B
+@kindex X u (\e$B35N,\e(B)
 @findex gnus-uu-decode-uu
 @c @icon{gnus-uu-decode-uu}
 \e$B8=:_$N72$r\e(B uudecode \e$B$7$^$9\e(B (@code{gnus-uu-decode-uu})\e$B!#\e(B
 
 @item X U
-@kindex X U \e$B!J35N,!K\e(B
+@kindex X U (\e$B35N,\e(B)
 @findex gnus-uu-decode-uu-and-save
 \e$B8=:_$N72$r\e(B uudecode \e$B$7$FJ]B8$7$^$9\e(B (@code{gnus-uu-decode-uu-and-save})\e$B!#\e(B
 
 @item X v u
-@kindex X v u \e$B!J35N,!K\e(B
+@kindex X v u (\e$B35N,\e(B)
 @findex gnus-uu-decode-uu-view
 \e$B8=:_$N72$r\e(B uudecode \e$B$7$F!"I=<($7$^$9\e(B (@code{gnus-uu-decode-uu-view})\e$B!#\e(B
 
 @item X v U
-@kindex X v U \e$B!J35N,!K\e(B
+@kindex X v U (\e$B35N,\e(B)
 @findex gnus-uu-decode-uu-and-save-view
-\e$B8=:_$N5-;v$r\e(B uudecode \e$B$7$F!"I=<($7$FJ]B8$7$^$9\e(B
-(@code{gnus-uu-decode-uu-and-save-view})\e$B!#\e(B
+\e$B8=:_$N5-;v$r\e(B uudecode \e$B$7$F!"I=<($7$FJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-decode-uu-and-save-view})\e$B!#\e(B
 
 @end table
 
 \e$B$3$l$i$9$Y$F$O%W%m%;%90u$K$h$C$F0uIU$1$i$l$?5-;v$NB8:_$KBP$7$FH?1~$9$k$H\e(B
 \e$B$$$&$3$H$r3P$($F$*$$$F$/$@$5$$!#Nc$($P!"$b$7%K%e!<%9%0%k!<%WA4BN$rI|9f2=\e(B
-\e$B$7$FJ]B8$7$?$$$N$G$"$l$P!"IaDL$O\e(B @kbd{M P a} (@code{gnus-uu-mark-all})
-\e$B$H$7!"$=$l$+$i\e(B @kbd{X U} (@code{gnus-uu-decode-uu-and-save}) \e$B$H$7$^$9!#\e(B
+\e$B$7$FJ]B8$7$?$$$N$G$"$l$P!"IaDL\e(B
+\e$B$O\e(B @kbd{M P a} (@code{gnus-uu-mark-all}) \e$B$H$7!"$=$l$+\e(B
+\e$B$i\e(B @kbd{X U} (@code{gnus-uu-decode-uu-and-save}) \e$B$H$7$^$9!#\e(B
 
-\e$B$3$NA4$F$O!"GrF|$N2<$KL@Gr$K%-!<$rBG$C$F$$$?\e(B @sc{GNUS 4.1} \e$B$N$H$-$H$O\e(B
-@code{gnus-uu} \e$B$NF0:n$,A4$/0c$C$F$$$^$9!#$3$NHG$N\e(B @code{gnus-uu} \e$B$OIaDL\e(B
-\e$B$O2?$+$NJ}K!\e(B (@pxref{Setting Process Marks}) \e$B$G5-;v$K0u$rIU$1$F!"$=$l$+\e(B
-\e$B$i\e(B @kbd{X u} \e$B$r2!$9;v$rA0Ds$H$7$F$$$^$9!#\e(B
+\e$B$3$NA4$F$O!"GrF|$N2<$KL@Gr$K%-!<$rBG$C$F$$$?\e(B @sc{gnus 4.1} \e$B$N$H$-$H\e(B
+\e$B$O\e(B @code{gnus-uu} \e$B$NF0:n$,A4$/0c$C$F$$$^$9!#$3$NHG$N\e(B @code{gnus-uu} \e$B$OIa\e(B
+\e$BDL$O2?$+$NJ}K!\e(B (@pxref{Setting Process Marks}) \e$B$G5-;v$K0u$rIU$1$F!"$=$l\e(B
+\e$B$+$i\e(B @kbd{X u} \e$B$r2!$9;v$rA0Ds$H$7$F$$$^$9!#\e(B
 
 @vindex gnus-uu-notify-files
-\e$BCm0U!'\e(B @code{gnus-uu-notify-files} \e$B$K9gCW$9$kL>A0!"\e(B
-@samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)} \e$B$K%O!<%I%3!<%I$5$l$k!"$r\e(B
-\e$B;}$D5-;v$rI|9f2=$7$h$&$H$7$?$H$-$O!"\e(B@code{gnus-uu} \e$B$OLdBj$N5-;v$r$A$g$&$I\e(B
-\e$B1\Mw$7$?;v$rCN$i$;$k$?$a$K!"<+F0E*$K\e(B @samp{comp.unix.wizards} \e$B$K5-;v$rEj9F\e(B
-\e$B$7$^$9!#$3$N5!G=$r;H$o$J$$$h$&$K$9$k;v$O$G$-$^$;$s!#\e(B
-
+\e$BCm0U\e(B: @code{gnus-uu-notify-files} \e$B$K9gCW$9$kL>A0!"\e(B
+@samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)} \e$B$K%O!<%I%3!<%I$5$l$k!"\e(B
+\e$B$r;}$D5-;v$rI|9f2=$7$h$&$H$7$?$H$-$O!"\e(B@code{gnus-uu} \e$B$OLdBj$N5-;v$r$A$g\e(B
+\e$B$&$I1\Mw$7$?;v$rCN$i$;$k$?$a$K!"<+F0E*$K\e(B @samp{comp.unix.wizards} \e$B$K5-;v\e(B
+\e$B$rEj9F$7$^$9!#$3$N5!G=$r;H$o$J$$$h$&$K$9$k;v$O$G$-$^$;$s!#\e(B
 
 @node Shell Archives
 @subsection \e$B%7%'%k%"!<%+%$%V\e(B
@@ -5991,35 +6508,34 @@ Gnus \e$B$O0J2<$N4JC1$J5,B'$KB'$C$F$I$N5-;v$,72$KB0$9$k$N$+$r?dB,$7$^$9!'\e(B \e$BI
 @cindex shell archives
 @cindex shared articles
 
-\e$B%7%'%k%"!<%+%$%V!J!X\e(Bshar \e$B%U%!%$%k!Y!K$O%=!<%9$rG[I[$9$k$?$a$N?M5$$N$"$kJ}\e(B
-\e$BK!$G$7$?$,!":#F|$G$O$=$s$J$K;H$o$l$F$$$^$;$s!#$H$K$+$/$3$l$i$r07$&$?$a$NL?\e(B
-\e$BNa$,$"$j$^$9!'\e(B
+\e$B%7%'%k%"!<%+%$%V\e(B (\e$B!X\e(Bshar \e$B%U%!%$%k!Y\e(B) \e$B$O%=!<%9$rG[I[$9$k$?$a$N?M5$$N$"$k\e(B
+\e$BJ}K!$G$7$?$,!":#F|$G$O$=$s$J$K;H$o$l$F$$$^$;$s!#$H$K$+$/$3$l$i$r07$&$?$a\e(B
+\e$B$NL?Na$,$"$j$^$9\e(B:
 
 @table @kbd
 
 @item X s
-@kindex X s \e$B!J35N,!K\e(B
+@kindex X s (\e$B35N,\e(B)
 @findex gnus-uu-decode-unshar
 \e$B8=:_$N72$r2rE`$7$^$9\e(B (@code{gnus-uu-decode-unshar})\e$B!#\e(B
 
 @item X S
-@kindex X S \e$B!J35N,!K\e(B
+@kindex X S (\e$B35N,\e(B)
 @findex gnus-uu-decode-unshar-and-save
 \e$B8=:_$N72$r2rE`$7J]B8$7$^$9\e(B (@code{gnus-uu-decode-unshar-and-save})\e$B!#\e(B
 
 @item X v s
-@kindex X v s \e$B!J35N,!K\e(B
+@kindex X v s (\e$B35N,\e(B)
 @findex gnus-uu-decode-unshar-view
 \e$B8=:_$N72$r2rE`$7I=<($7$^$9\e(B (@code{gnus-uu-decode-unshar-view})\e$B!#\e(B
 
 @item X v S
-@kindex X v S \e$B!J35N,!K\e(B
+@kindex X v S (\e$B35N,\e(B)
 @findex gnus-uu-decode-unshar-and-save-view
-\e$B8=:_$N72$r2rE`$7!"I=<($7$FJ]B8$7$^$9\e(B
-(@code{gnus-uu-decode-unshar-and-save-view})\e$B!#\e(B
+\e$B8=:_$N72$r2rE`$7!"I=<($7$FJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-decode-unshar-and-save-view})\e$B!#\e(B
 @end table
 
-
 @node PostScript Files
 @subsection \e$B%]%9%H%9%/%j%W%H%U%!%$%k\e(B
 @cindex PostScript
@@ -6027,65 +6543,62 @@ Gnus \e$B$O0J2<$N4JC1$J5,B'$KB'$C$F$I$N5-;v$,72$KB0$9$k$N$+$r?dB,$7$^$9!'\e(B \e$BI
 @table @kbd
 
 @item X p
-@kindex X p \e$B!J35N,!K\e(B
+@kindex X p (\e$B35N,\e(B)
 @findex gnus-uu-decode-postscript
 \e$B8=:_$N%]%9%H%9%/%j%W%H72$rE83+$7$^$9\e(B (@code{gnus-uu-decode-postscript})\e$B!#\e(B
 
 @item X P
-@kindex X P \e$B!J35N,!K\e(B
+@kindex X P (\e$B35N,\e(B)
 @findex gnus-uu-decode-postscript-and-save
-\e$B8=:_$N%]%9%H%9%/%j%W%H72$rE83+$7$FJ]B8$7$^$9\e(B
-(@code{gnus-uu-decode-postscript-and-save})\e$B!#\e(B
+\e$B8=:_$N%]%9%H%9%/%j%W%H72$rE83+$7$FJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-decode-postscript-and-save})\e$B!#\e(B
 
 @item X v p
-@kindex X v p \e$B!J35N,!K\e(B
+@kindex X v p (\e$B35N,\e(B)
 @findex gnus-uu-decode-postscript-view
-\e$B8=:_$N%]%9%H%9%/%j%W%H72$rI=<($7$^$9\e(B
-(@code{gnus-uu-decode-postscript-view})\e$B!#\e(B
+\e$B8=:_$N%]%9%H%9%/%j%W%H72$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-decode-postscript-view})\e$B!#\e(B
 
 @item X v P
-@kindex X v P \e$B!J35N,!K\e(B
+@kindex X v P (\e$B35N,\e(B)
 @findex gnus-uu-decode-ostscript-and-save-view
-\e$B8=:_$N%]%9%H%9%/%j%W%H72$rI=<($7J]B8$7$^$9\e(B
-(@code{gnus-uu-decode-postscript-and-save-view})\e$B!#\e(B
+\e$B8=:_$N%]%9%H%9%/%j%W%H72$rI=<($7J]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-uu-decode-postscript-and-save-view})\e$B!#\e(B
 @end table
 
-
 @node Other Files
 @subsection \e$BB>$N%U%!%$%k\e(B
 
 @table @kbd
 @item X o
-@kindex X o \e$B!J35N,!K\e(B
+@kindex X o (\e$B35N,\e(B)
 @findex gnus-uu-decode-save
 \e$B8=:_$N72$rJ]B8$7$^$9\e(B (@code{gnus-uu-decode-save})\e$B!#\e(B
 
 @item X b
-@kindex X b \e$B!J35N,!K\e(B
+@kindex X b (\e$B35N,\e(B)
 @findex gnus-uu-decode-binhex
 \e$B8=:_$N5-;v$r\e(B binhex \e$B2rE`$7$^$9\e(B (@code{gnus-uu-decode-binhex})\e$B!#$3$l$OK\\e(B
 \e$BEv$OF0:n$7$^$;$s!#\e(B
 @end table
 
-
 @node Decoding Variables
 @subsection \e$BI|9f2=$N$?$a$NJQ?t\e(B
 
 \e$B7AMF;l$G$9!#F0;l$G$O$"$j$^$;$s!#\e(B
 
 @menu
-* Rule Variables::          \e$B%U%!%$%k$,$I$N$h$&$KI=<($5$l$k$+$r7h$a$kJQ?t!#\e(B
-* Other Decode Variables::  \e$BB>$NI|9f2=$NJQ?t!#\e(B
-* Uuencoding and Posting::  uuencode \e$B$9$k$N$r%+%9%?%^%$%:$9$kJQ?t!#\e(B
+* Rule Variables::         \e$B%U%!%$%k$,$I$N$h$&$KI=<($5$l$k$+$r7h$a$kJQ?t\e(B
+* Other Decode Variables:: \e$BB>$NI|9f2=$NJQ?t\e(B
+* Uuencoding and Posting:: uuencode \e$B$9$k$N$r%+%9%?%^%$%:$9$kJQ?t\e(B
 @end menu
 
-
 @node Rule Variables
 @subsubsection \e$B5,B'JQ?t\e(B
 @cindex rule variables
 
-Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9!#$3$l$i\e(B
-\e$B$NJQ?t$O$9$Y$F0J2<$N$h$&$JMM<0$G$9\e(B
+Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9!#$3$l\e(B
+\e$B$i$NJQ?t$O$9$Y$F0J2<$N$h$&$JMM<0$G$9!#\e(B
 
 @lisp
       (list '(regexp1 command2)
@@ -6098,9 +6611,10 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 @item gnus-uu-user-view-rules
 @vindex gnus-uu-user-view-rules
 @cindex sox
-\e$B$3$NJQ?t$O%U%!%$%k$r1\Mw$9$k$H$-$K:G=i$KD4$Y$i$l$^$9!#Nc$($P!"$b$7\e(B
-@samp{.au} \e$B2;%U%!%$%k$rJQ49$9$k$?$a$K\e(B @code{sox} \e$B$r;H$$$?$$$H$-$O!"<!$N\e(B
-\e$B$h$&$K$G$-$^$9!'\e(B
+\e$B$3$NJQ?t$O%U%!%$%k$r1\Mw$9$k$H$-$K:G=i$KD4$Y$i$l$^$9!#Nc$($P!"$b\e(B
+\e$B$7\e(B @samp{.au} \e$B2;%U%!%$%k$rJQ49$9$k$?$a$K\e(B @code{sox} \e$B$r;H$$$?$$$H$-$O!"<!\e(B
+\e$B$N$h$&$K$G$-$^$9\e(B:
+
 @lisp
 (setq gnus-uu-user-view-rules
       (list '("\\\\.au$\" "sox %s -t .aiff > /dev/audio")))
@@ -6117,7 +6631,6 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 \e$B$K;H$&;v$,$G$-$^$9!#\e(B
 @end table
 
-
 @node Other Decode Variables
 @subsubsection \e$BB>$NI|9f2=$NJQ?t\e(B
 
@@ -6125,10 +6638,10 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 @vindex gnus-uu-grabbed-file-functions
 
 @item gnus-uu-grabbed-file-functions
-\e$B$3$N%j%9%H$N$9$Y$F$N4X?t$O$=$l$>$l$N%U%!%$%k$,>e<j$/I|9f2=$5$l$?D>8e$K8F$P\e(B
-\e$B$l$^$9!=!=$G$9$+$i!"$9$0$K%U%!%$%k$r0\F0$d1\Mw$7$?$j$9$k$3$H$,$G$-!"2?$+$r\e(B
-\e$B$9$kA0$K$9$Y$F$N%U%!%$%k$,I|9f2=$5$l$k$N$rBT$DI,MW$O$"$j$^$;$s!#$3$N%j%9%H\e(B
-\e$B$KF~$l$k;v$N$G$-$k4{@=4X?t$O!'\e(B
+\e$B$3$N%j%9%H$N$9$Y$F$N4X?t$O$=$l$>$l$N%U%!%$%k$,>e<j$/I|9f2=$5$l$?D>8e$K8F\e(B
+\e$B$P$l$^$9!=!=$G$9$+$i!"$9$0$K%U%!%$%k$r0\F0$d1\Mw$7$?$j$9$k$3$H$,$G$-!"2?\e(B
+\e$B$+$r$9$kA0$K$9$Y$F$N%U%!%$%k$,I|9f2=$5$l$k$N$rBT$DI,MW$O$"$j$^$;$s!#$3$N\e(B
+\e$B%j%9%H$KF~$l$k;v$N$G$-$k4{@=4X?t$O\e(B:
 
 @table @code
 
@@ -6138,15 +6651,15 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 
 @item gnus-uu-grab-move
 @findex gnus-uu-grab-move
-\e$B%U%!%$%k$r0\F0$7$^$9!J$b$7J]B84X?t$r;H$C$F$$$k$N$G$"$l$P!K!#\e(B
+\e$B%U%!%$%k$r0\F0$7$^$9\e(B (\e$B$b$7J]B84X?t$r;H$C$F$$$k$N$G$"$l$P\e(B)\e$B!#\e(B
 @end table
 
 @item gnus-uu-be-dangerous
 @vindex gnus-uu-be-dangerous
-\e$BI|9f2=$N:GCf$KJQ$J>u67$,5/$3$C$?$H$-$K2?$r$9$k$+$r;XDj$7$^$9!#$b$7\e(B
-@code{nil} \e$B$G$"$k$H!"$G$-$k$@$1J]<iE*$K$J$j$^$9!#$b$7\e(B @code{t} \e$B$G$"$k$H!"\e(B
-\e$BF0:n$7$J$$$b$N$OL5;k$7$F!"8=B8$9$k%U%!%$%k$r>e=q$-$7$^$9!#$=$NB>$N>l9g$O!"\e(B
-\e$B$=$l$>$l$N$H$-$K?R$M$^$9!#\e(B
+\e$BI|9f2=$N:GCf$KJQ$J>u67$,5/$3$C$?$H$-$K2?$r$9$k$+$r;XDj$7$^$9!#$b\e(B
+\e$B$7\e(B @code{nil} \e$B$G$"$k$H!"$G$-$k$@$1J]<iE*$K$J$j$^$9!#$b$7\e(B @code{t} \e$B$G$"$k\e(B
+\e$B$H!"F0:n$7$J$$$b$N$OL5;k$7$F!"8=B8$9$k%U%!%$%k$r>e=q$-$7$^$9!#$=$NB>$N>l\e(B
+\e$B9g$O!"$=$l$>$l$N$H$-$K?R$M$^$9!#\e(B
 
 @item gnus-uu-ignore-files-by-name
 @vindex gnus-uu-ignore-files-by-name
@@ -6154,9 +6667,10 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 
 @item gnus-uu-ignore-files-by-type
 @vindex gnus-uu-ignore-files-by-type
-\e$B$3$NJQ?t$K9gCW$9$k\e(B @sc{mime} \e$B$N7?$r;}$D%U%!%$%k$O1\Mw$5$l$^$;$s!#\e(BGnus \e$B$O%U%!\e(B
-\e$B%$%kL>$K4p$E$$$F7?$r?dB,$7$F$$$k;v$KCm0U$7$F$/$@$5$$!#\e(B@code{gnus-uu} \e$B$O\e(B
-\e$B!J$^$@!K\e(B@sc{mime} \e$B%Q%C%1!<%8$G$O$"$j$^$;$s$N$G!"$3$l$O>/$7JQ$G$9!#\e(B
+\e$B$3$NJQ?t$K9gCW$9$k\e(B @sc{mime} \e$B$N7?$r;}$D%U%!%$%k$O1\Mw$5$l$^$;$s!#\e(BGnus \e$B$O\e(B
+\e$B%U%!%$%kL>$K4p$E$$$F7?$r?dB,$7$F$$$k;v$KCm0U$7$F$/$@$5$$!#\e(B
+@code{gnus-uu} \e$B$O\e(B (\e$B$^$@\e(B) @sc{mime} \e$B%Q%C%1!<%8$G$O$"$j$^$;$s$N$G!"$3$l$O\e(B
+\e$B>/$7JQ$G$9!#\e(B
 
 @item gnus-uu-tmp-dir
 @vindex gnus-uu-tmp-dir
@@ -6194,8 +6708,8 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 
 @item gnus-uu-correct-stripped-uucode
 @vindex gnus-uu-correct-stripped-uucode
-@code{nil} \e$B$G$J$$$H$$$&$N$O!"\e(B@code{gnus-uu} \e$B$OB3$/6uGr$,:o=|$5$l$F$7$^$C$F\e(B
-\e$B$$$k\e(B uuencode \e$B$5$l$?%U%!%$%k$r=$I|$7$h$&$H\e(B@emph{\e$B;n$9\e(B}\e$B$H$$$&;v$G$9!#\e(B
+@code{nil} \e$B$G$J$$$H$$$&$N$O!"\e(B@code{gnus-uu} \e$B$OB3$/6uGr$,:o=|$5$l$F$7$^$C\e(B
+\e$B$F$$$k\e(B uuencode \e$B$5$l$?%U%!%$%k$r=$I|$7$h$&$H\e(B @emph{\e$B;n$9\e(B} \e$B$H$$$&;v$G$9!#\e(B
 
 @item gnus-uu-pre-uudecode-hook
 @vindex gnus-uu-pre-uudecode-hook
@@ -6213,12 +6727,11 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 @code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$,I|9f2=$r$7$J$$$GJ]B8$r$9$k$h$&$K\e(B
 \e$B8@$o$l$?$H$-$K!"MWLs$rJ]B8$9$k$H$$$&;v$G$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k\e(B
 \e$B$H!"\e(B@code{gnus-uu} \e$B$O\e(B \e$B2?$b>~$j$r$7$J$$$GA4$F$r%U%!%$%k$KJ]B8$7$^$9!#MWLs\e(B
-\e$B$O\e(B RFC1153 \e$B=`$8$F$$$^$9!=!=0UL#$N$"$kNL$r;XDj$7$F!"HV9f$rH/9T$9$k4JC1$JJ}\e(B
-\e$BK!$,8+$D$+$i$J$+$C$?$N$G!"C1=c$K$=$l$i$O@Z$jMn$H$7$F$$$^$9!#\e(B
+\e$B$O\e(B RFC1153 \e$B=`$8$F$$$^$9!=!=0UL#$N$"$kNL$r;XDj$7$F!"HV9f$rH/9T$9$k4JC1$J\e(B
+\e$BJ}K!$,8+$D$+$i$J$+$C$?$N$G!"C1=c$K$=$l$i$O@Z$jMn$H$7$F$$$^$9!#\e(B
 
 @end table
 
-
 @node Uuencoding and Posting
 @subsubsection uuencode \e$B$HEj9F\e(B
 
@@ -6238,39 +6751,40 @@ Gnus \e$B$O%U%!%$%k$r1\Mw$9$k$N$r7hDj$9$k$N$K\e(B@dfn{\e$B5,B'JQ?t\e(B}\e$B$rMQ$$$^$9
 
 @item gnus-uu-post-threaded
 @vindex gnus-uu-post-threaded
-@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$,Id9f2=$5$l$?%U%!%$%k$r%9%l%C%I$GEj\e(B
-\e$B9F$9$k$H$$$&;v$G$9!#$3$l$O$"$^$j8-$$J}K!$G$O$J$$$+$bCN$l$^$;$s!#$H$$$&$N$O!"\e(B
-\e$B:#$^$G;d$,8+$?Cf$G\e(B uuencode \e$B$5$l$?5-;v$r=8$a$k$N$K!"%9%l%C%I$rDI$C$F$$$/;v\e(B
-\e$B$N$G$-$kB>$NI|9fAuCV$,B8:_$7$J$$$+$i$G$9!#!J$(!<$H!";d$O$=$l$r$9$k0l$D$N%Q%C\e(B
-\e$B%1!<%8$r8+$?;v$,$"$j$^$9!=!=\e(B@code{gnus-uu} \e$B$G$9!#$7$+$7$J$<$+!"$=$l$,?t$N\e(B
-\e$B$&$A$KF~$k$H$O;W$($J$$$N$G$9\e(B...\e$B!K%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$,Id9f2=$5$l$?%U%!%$%k$r%9%l%C%I$G\e(B
+\e$BEj9F$9$k$H$$$&;v$G$9!#$3$l$O$"$^$j8-$$J}K!$G$O$J$$$+$bCN$l$^$;$s!#$H$$$&\e(B
+\e$B$N$O!":#$^$G;d$,8+$?Cf$G\e(B uuencode \e$B$5$l$?5-;v$r=8$a$k$N$K!"%9%l%C%I$rDI$C\e(B
+\e$B$F$$$/;v$N$G$-$kB>$NI|9fAuCV$,B8:_$7$J$$$+$i$G$9!#\e(B(\e$B$(!<$H!";d$O$=$l$r$9\e(B
+\e$B$k0l$D$N%Q%C%1!<%8$r8+$?;v$,$"$j$^$9!=!=\e(B@code{gnus-uu} \e$B$G$9!#$7$+$7$J$<\e(B
+\e$B$+!"$=$l$,?t$N$&$A$KF~$k$H$O;W$($J$$$N$G$9\e(B...) \e$B%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{nil} \e$B$G$9!#\e(B
 
 @item gnus-uu-post-separate-description
 @vindex gnus-uu-post-separate-description
 @code{nil} \e$B$G$J$$$N$O!"5-=R$OJL$N5-;v$GEj9F$5$l$k$H$$$&;v$G$9!#:G=i$N5-\e(B
-\e$B;v$OIaDL$O\e(B (0/x) \e$B$N$h$&$KHV9f$,IU$1$i$l$^$9!#$b$7$3$NJQ?t$,\e(B @code{nil}
-\e$B$G$"$k$H!"MxMQ<T$N=q$$$?5-=R$O:G=i$N%U%!%$%k$N;O$a$K<h$j9~$^$l!"\e(B(1/x) \e$B$N\e(B
-\e$BHV9f$,IU$1$i$l$^$9!#%G%#%U%)%k%H$O\e(B @code{t} \e$B$G$9!#\e(B
+\e$B;v$OIaDL$O\e(B (0/x) \e$B$N$h$&$KHV9f$,IU$1$i$l$^$9!#$b$7$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$k$H!"MxMQ<T$N=q$$$?5-=R$O:G=i$N%U%!%$%k$N;O$a$K<h$j9~\e(B
+\e$B$^$l!"\e(B(1/x) \e$B$NHV9f$,IU$1$i$l$^$9!#%G%#%U%)%k%H$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Viewing Files
 @subsection \e$B%U%!%$%k$N1\Mw\e(B
 @cindex viewing files
 @cindex pseudo-articles
 
-\e$BI|9f2=$7$?8e$G%U%!%$%k$,2?$i$+$N%"!<%+%$%V$G$"$k>l9g!"\e(Bgnus \e$B$O%"!<%+%$%V$r\e(B
-\e$BE83+$7$h$&$H;n$_!"%"!<%+%$%V$NCf$K1\Mw$G$-$k%U%!%$%k$,$"$k$+$rD4$Y$^$9!#Nc\e(B
-\e$B$($P!"\e(Bgzip \e$B$5$l$?\e(B tar \e$B%U%!%$%k\e(B @file{pics.tar.gz} \e$B$,$"$C$F!"%U%!%$%k\e(B
-@file{pic1.jpg} \e$B$H\e(B @file{pic2.gif} \e$B$r4^$s$G$$$k>l9g!"\e(Bgnus \e$B$O<g%U%!%$%k$r2r\e(B
-\e$BE`$7$F\e(B tar \e$B$rE83+$7!"$=$l$+$i\e(B2\e$B$D$N3($r1\Mw$7$^$9!#$3$NE83+$N2aDx$O:F5"E*\e(B
-\e$B$J$N$G!"%"!<%+%$%V$K%"!<%+%$%V$N%"!<%+%$%V$,$"$k$H!"$=$l$O$9$Y$FE83+$5$l$^\e(B
-\e$B$9!#\e(B
-
-\e$B:G8e$K!"\e(Bgnus \e$B$OIaDL$O$=$l$>$l$NCj=P$5$l$?5-;v$4$H$K\e(B@dfn{\e$B5?;w5-;v\e(B}\e$B$r35N,%P%C\e(B
-\e$B%U%!$KA^F~$7$^$9!#$3$l$i$N!X5-;v!Y$K0\F0$7$?>l9g$O!"<B9T$9$kL?Na!JIaDL$O\e(B
-gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
+\e$BI|9f2=$7$?8e$G%U%!%$%k$,2?$i$+$N%"!<%+%$%V$G$"$k>l9g!"\e(Bgnus \e$B$O%"!<%+%$%V\e(B
+\e$B$rE83+$7$h$&$H;n$_!"%"!<%+%$%V$NCf$K1\Mw$G$-$k%U%!%$%k$,$"$k$+$rD4$Y$^$9!#\e(B
+\e$BNc$($P!"\e(Bgzip \e$B$5$l$?\e(B tar \e$B%U%!%$%k\e(B @file{pics.tar.gz} \e$B$,$"$C$F!"%U%!%$\e(B
+\e$B%k\e(B @file{pic1.jpg} \e$B$H\e(B @file{pic2.gif} \e$B$r4^$s$G$$$k>l9g!"\e(Bgnus \e$B$O<g%U%!%$\e(B
+\e$B%k$r2rE`$7$F\e(B tar \e$B$rE83+$7!"$=$l$+$iFs$D$N3($r1\Mw$7$^$9!#$3$NE83+$N2aDx\e(B
+\e$B$O:F5"E*$J$N$G!"%"!<%+%$%V$K%"!<%+%$%V$N%"!<%+%$%V$,$"$k$H!"$=$l$O$9$Y$F\e(B
+\e$BE83+$5$l$^$9!#\e(B
+
+\e$B:G8e$K!"\e(Bgnus \e$B$OIaDL$O$=$l$>$l$NCj=P$5$l$?5-;v$4$H$K\e(B@dfn{\e$B5?;w5-;v\e(B}\e$B$r35N,\e(B
+\e$B%P%C%U%!$KA^F~$7$^$9!#$3$l$i$N!X5-;v!Y$K0\F0$7$?>l9g$O!"<B9T$9$kL?Na\e(B (\e$BIa\e(B
+\e$BDL$O\e(Bgnus \e$B$,Ds0F$r$7$^$9\e(B) \e$B$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l\e(B
+\e$B$^$9!#\e(B
 
 @vindex gnus-view-pseudo-asynchronously
 @code{gnus-view-pseudo-asynchronously} \e$B$,\e(B @code{nil} \e$B$G$"$k$H!"\e(BEmacs \e$B$O\e(B
@@ -6278,9 +6792,9 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 
 @vindex gnus-view-pseudos
 @code{gnus-view-pseudos} \e$B$,\e(B @code{automatic} \e$B$G$"$k$H!"\e(Bgnus \e$B$O35N,%P%C%U%!\e(B
-\e$B$K5?;w5-;v$rA^F~$7$^$;$s$,!"$=$l$i$r$9$0$K1\Mw$7$^$9!#$3$NJQ?t$,\e(B
-@code{not-confirm} \e$B$G$"$k$H!"MxMQ<T$O1\Mw$,:Q$`A0$K3NG'$5$($b5a$a$i$l$^\e(B
-\e$B$;$s!#\e(B
+\e$B$K5?;w5-;v$rA^F~$7$^$;$s$,!"$=$l$i$r$9$0$K1\Mw$7$^$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{not-confirm} \e$B$G$"$k$H!"MxMQ<T$O1\Mw$,:Q$`A0$K3NG'$5$($b5a$a$i$l\e(B
+\e$B$^$;$s!#\e(B
 
 @vindex gnus-view-pseudos-separately
 @code{gnus-view-pseudos-separately} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"0l$D$N5?;w5-\e(B
@@ -6292,10 +6806,10 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 @code{gnus-insert-pseudo-articles} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"I|9f2=$N$H$-\e(B
 \e$B$K5?;w5-;v$rA^F~$7$^$9!#%G%#%U%)%k%H$G$O\e(B @code{t}\e$B$G$9!#\e(B
 
-\e$B$=$l$G!"$=$N$h$&$J46$8$G$9!#\e(B@emph{\e$B<B<A%5!<%P!<\e(B}\e$B$+$i$N\e(B@emph{\e$B<B<A%0%k!<%W\e(B}\e$B$N\e(B
-@emph{\e$B5?;w5-;v\e(B} \e$BFI$s$G$$$^$9!#$=$7$F9M$($^$9!'\e(B \e$B$I$&$7$FA4$F$,8=<B$G$O$J$/\e(B
-\e$B$J$C$F$7$^$C$?$N$@$m$&$+!)$I$&$7$F$3$3$KMh$F$7$^$C$?$N$@$m$&$+!)\e(B
-
+\e$B$=$l$G!"$=$N$h$&$J46$8$G$9!#\e(B@emph{\e$B<B<A%5!<%P!<\e(B} \e$B$+$i\e(B
+\e$B$N\e(B @emph{\e$B<B<A%0%k!<%W\e(B} \e$B$N\e(B @emph{\e$B5?;w5-;v\e(B} \e$BFI$s$G$$$^$9!#$=$7$F9M$($^\e(B
+\e$B$9\e(B: \e$B$I$&$7$FA4$F$,8=<B$G$O$J$/$J$C$F$7$^$C$?$N$@$m$&$+\e(B? \e$B$I$&$7$F$3$3$KMh\e(B
+\e$B$F$7$^$C$?$N$@$m$&$+\e(B?
 
 @node Article Treatment
 @section \e$B5-;v$N07$$\e(B
@@ -6306,17 +6820,16 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 \e$B$9$/$9$k$?$a$N4X?t$HJQ?t$,;3$N$h$&$K$"$j$^$9!#\e(B
 
 @menu
-* Article Highlighting::    \e$B5-;v$r2LJ*%5%i%@$N$h$&$K8+$($k$h$&$K$7$?$$!#\e(B
-* Article Fontisizing::     \e$B6/D4$5$l$?J8$rAGE($K$9$k!#\e(B
-* Article Hiding::          \e$BFCDj$N>pJs$O>C$75n$j$?$$$H$b;W$&!#\e(B
-* Article Washing::         \e$B?M@8$r$b$C$H$h$/$9$k$?$/$5$s$N5$$NMx$$$?4X?t!#\e(B
-* Article Buttons::         URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C%/$9$k!#\e(B
-* Article Date::            \e$B$0$:$0$:8@$&$J!"@$3&;~$@!*\e(B
-* Article Signature::       \e$B=pL>$C$F2?!)\e(B
-* Article Miscellanina::    \e$BB>$N$$$m$$$m$J$b$N!#\e(B
+* Article Highlighting:: \e$B5-;v$r2LJ*%5%i%@$N$h$&$K8+$($k$h$&$K$7$?$$\e(B
+* Article Fontisizing::  \e$B6/D4$5$l$?J8$rAGE($K$9$k\e(B
+* Article Hiding::       \e$BFCDj$N>pJs$O>C$75n$j$?$$$H$b;W$&\e(B
+* Article Washing::      \e$B?M@8$r$b$C$H$h$/$9$k$?$/$5$s$N5$$NMx$$$?4X?t\e(B
+* Article Buttons::      URL \e$B$d\e(B Message-ID \e$B$d\e(B \e$B%"%I%l%9$J$I$r%/%j%C%/$9$k\e(B
+* Article Date::         \e$B$0$:$0$:8@$&$J!"@$3&;~$@\e(B!
+* Article Signature::    \e$B=pL>$C$F2?\e(B?
+* Article Miscellanina:: \e$BB>$N$$$m$$$m$J$b$N\e(B
 @end menu
 
-
 @node Article Highlighting
 @subsection \e$B5-;v$N%O%$%i%$%H\e(B
 @cindex highlighting
@@ -6327,14 +6840,14 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 @table @kbd
 
 @item W H a
-@kindex W H a \e$B!J35N,!K\e(B
+@kindex W H a (\e$B35N,\e(B)
 @findex gnus-article-highlight
 @findex gnus-article-maybe-highlight
 \e$B8=:_$N5-;v$r$b$C$H%O%$%i%$%H\e(B (highlight) \e$B$7$^$9!#$3$N4X?t$O!"%X%C%@!<!"\e(B
 \e$B0zMQJ8!"=pL>$r%O%$%i%$%H$7!"K\BN\e(B (body) \e$B$HF,\e(B (head) \e$B$K%\%?%s$r2C$($^$9!#\e(B
 
 @item W H h
-@kindex W H h \e$B!J35N,!K\e(B
+@kindex W H h (\e$B35N,\e(B)
 @findex gnus-article-highlight-headers
 @vindex gnus-header-face-alist
 \e$B%X%C%@!<$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-headers})\e$B!#%O%$\e(B
@@ -6348,26 +6861,26 @@ gnus \e$B$,Ds0F$r$7$^$9!K$rF~NO$9$k$h$&$KB%$5$l!"$=$l$+$iL?Na$,<B9T$5$l$^$9!#\e(B
 \e$B$7$F$/$@$5$$!=!=\e(Bgnus \e$B$,$=$l$rIU$12C$($^$9!#\e(B
 
 @item W H c
-@kindex W H c \e$B!J35N,!K\e(B
+@kindex W H c (\e$B35N,\e(B)
 @findex gnus-article-highlight-citation
 \e$B0zMQ$5$l$?J8$r%O%$%i%$%H$7$^$9\e(B (@code{gnus-article-highlight-citation})\e$B!#\e(B
 
-\e$B0zMQ%O%$%i%$%H$r%+%9%?%^%$%:$9$k$$$/$D$+$NJQ?t$O!'\e(B
+\e$B0zMQ%O%$%i%$%H$r%+%9%?%^%$%:$9$k$$$/$D$+$NJQ?t$O\e(B:
 
 @table @code
 @vindex gnus-cite-parse-max-size
 
 @item gnus-cite-parse-max-size
-\e$B5-;v$NBg$-$5$,$3$NJQ?t!J%G%#%U%)%k%H$G$O\e(B 25000\e$B!K$h$jBg$-$$5-;v$O!"0zMQ%O%$\e(B
-\e$B%i%$%H$O9T$o$l$^$;$s!#\e(B
+\e$B5-;v$NBg$-$5$,$3$NJQ?t\e(B (\e$B%G%#%U%)%k%H$G$O\e(B 25000) \e$B$h$jBg$-$$5-;v$O!"0zMQ%O\e(B
+\e$B%$%i%$%H$O9T$o$l$^$;$s!#\e(B
 
 @item gnus-cite-prefix-regexp
 @vindex gnus-cite-prefix-regexp
-\e$B$"$k9T$,<h$jF@$k:GBg$N0zMQ@\F,8l$K9gCW$9$k@55,I=8=$G$9!#\e(B
+\e$B$"$k9T$G!"$"$j$&$k:GD9$N0zMQ@\F,8l$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
 
 @item gnus-cite-max-prefix
 @vindex gnus-cite-max-prefix
-\e$B0zMQ@\F,8l$N:GBg$ND9$5$G$9!J%G%#%U%)%k%H$G$O\e(B 20 \e$B$G$9!K!#\e(B
+\e$B0zMQ@\F,8l$N:GBg$ND9$5$G$9\e(B (\e$B%G%#%U%)%k%H$G$O\e(B 20 \e$B$G$9\e(B)\e$B!#\e(B
 
 @item gnus-cite-face-list
 @vindex gnus-cite-face-list
@@ -6403,40 +6916,39 @@ Fonts})\e$B!#F1$8%a%C%;!<%8$NCf$KJ#?t$N5-;v$+$i$N0zMQ$,$"$k$H!"\e(Bgnus \e$B$O$=$l$
 
 @end table
 
-
 @item W H s
-@kindex W H s \e$B!J35N,!K\e(B
+@kindex W H s (\e$B35N,\e(B)
 @vindex gnus-signature-separator
 @vindex gnus-signature-face
 @findex gnus-article-highlight-signature
-\e$B=pL>\e(B (signature) \e$B$r%O%$%i%$%H$7$^$9\e(B
-(@code{gnus-article-highlight-signature})\e$B!#\e(B
+\e$B=pL>\e(B (signature) \e$B$r%O%$%i%$%H$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-highlight-signature})\e$B!#\e(B
 @code{gnus-signature-separator} (@pxref{Article Signature}) \e$B$N8e$NA4$F$N\e(B
 \e$B$b$N$O=pL>$H9M$($i$l!"\e(B@code{gnus-signature-face} \e$B$G%O%$%i%$%H$5$l$^$9!#\e(B
 \e$B$=$l$O%G%#%U%)%k%H$G$O\e(B @code{italic} \e$B$G$9!#5-;v$r<+F0E*$K%O%$%i%$%H$9$k\e(B
 \e$BJ}K!$K$D$$$F$O\e(B @xref{Customizing Articles} \e$B$r;2>H$7$F2<$5$$!#\e(B
 @end table
 
-
 @node Article Fontisizing
 @subsection \e$B5-;v$N%U%)%s%HJQ99\e(B
 @cindex emphasis
 @cindex article emphasis
 
 @cindex gnus-article-emphasize
-@kindex W e \e$B!J35N,!K\e(B
-\e$B?M!9$O$h$/%K%e!<%9$N5-;v$G\e(B @samp{_\e$B$3$l\e(B_} \e$B$d\e(B @samp{*\e$B$3$l\e(B*} \e$B$^$?$O\e(B
-@samp{/\e$B$3$l\e(B/} \e$B$N$h$&$J$b$N$r;H$C$FC18l$r6/D4$7$^$9!#\e(BGnus \e$B$O\e(B \e$B5-;v$rL?Na\e(B
-@kbd{W e} (@code{gnus-article-emphasize}) \e$B$K$+$1$k;v$K$h$C$FAGE($K8+$($k\e(B
-\e$B$h$&$K$G$-$^$9!#\e(B
+@kindex W e (\e$B35N,\e(B)
+\e$B?M!9$O$h$/%K%e!<%9$N5-;v$G\e(B @samp{_\e$B$3$l\e(B_} \e$B$d\e(B @samp{*\e$B$3$l\e(B*} \e$B$^$?\e(B
+\e$B$O\e(B @samp{/\e$B$3$l\e(B/} \e$B$N$h$&$J$b$N$r;H$C$FC18l$r6/D4$7$^$9!#\e(BGnus \e$B$O\e(B \e$B5-;v$rL?\e(B
+\e$BNa\e(B @kbd{W e} (@code{gnus-article-emphasize}) \e$B$K$+$1$k;v$K$h$C$FAGE($K8+\e(B
+\e$B$($k$h$&$K$G$-$^$9!#\e(B
 
 @vindex gnus-emphasis-alist
 \e$B6/D4$,$I$N$h$&$K1i;;$5$l$k$+$OJQ?t\e(B @code{gnus-emphasis-alist} \e$B$K$h$C$F@)\e(B
 \e$B8f$5$l$^$9!#$3$l$O:G=i$NMWAG$,9gCW$9$k$Y$-@55,I=8=$G$"$kO"A[%j%9%H$G$9!#\e(B
-2\e$BHVL\$NMWAG$O$I$N@55,I=8=$N%0%k!<%W$,6/D48lA4BN$r8+$D$1$k$?$a$K;H$o$l$k\e(B
-\e$B$+$r<($9?t;z$G$9!##3HVL\$O$I$N@55,I=8=$N%0%k!<%W$,I=<($5$l%O%$%i%$%H$5$l\e(B
-\e$B$k$+$r7h$a$k?t;z$G$9!#!J$3$N\e(B2\e$B$D$N%0%k!<%W$N4V$N5-;v$O1#$5$l$^$9!#!K#4HV\e(B
-\e$BL\$O%O%$%i%$%H$N%U%'%$%9$G$9!#\e(B
+\e$BFsHVL\$NMWAG$O$I$N@55,I=8=$N%0%k!<%W$,6/D48lA4BN$r8+$D$1$k$?$a$K;H$o$l$k\e(B
+\e$B$+$r<($9?t;z$G$9!#;0HVL\$O$I$N@55,I=8=$N%0%k!<%W$,I=<($5$l%O%$%i%$%H$5$l\e(B
+\e$B$k$+$r7h$a$k?t;z$G$9!#\e(B
+(\e$B$3$NFs$D$N%0%k!<%W$N4V$N5-;v$O1#$5$l$^$9!#\e(B) \e$B;MHVL\$O%O%$%i%$%H$N%U%'%$\e(B
+\e$B%9$G$9!#\e(B
 
 @lisp
 (setq gnus-emphasis-alist
@@ -6457,16 +6969,13 @@ Fonts})\e$B!#F1$8%a%C%;!<%8$NCf$KJ#?t$N5-;v$+$i$N0zMQ$,$"$k$H!"\e(Bgnus \e$B$O$=$l$
 @vindex gnus-emphasis-underline-italic
 @vindex gnus-emphasis-bold-italic
 @vindex gnus-emphasis-underline-bold-italic
-\e$B=i4|@_Dj$G$O#7$D$N5,B'$,$"$j!"$=$l$i$O0J2<$N%U%'%$%9$rMQ$$$^$9!'\e(B
-@code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
-@code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
-@code{gnus-emphasis-underline-italic},
-@code{gnus-emphasis-underline-bold},
-@code{gnus-emphasis-underline-bold-italic}.
+\e$B=i4|@_Dj$G$O<7$D$N5,B'$,$"$j!"$=$l$i$O0J2<$N%U%'%$%9$rMQ$$$^\e(B
+\e$B$9\e(B: @code{gnus-emphasis-bold}, @code{gnus-emphasis-italic}, @code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic}, @code{gnus-emphasis-underline-italic}, @code{gnus-emphasis-underline-bold}, @code{gnus-emphasis-underline-bold-italic}.
 
-\e$B$3$l$i$N%U%'%$%9$rJQ99$7$?$$$N$G$"$l$P!"\e(B@kbd{M-x customize} \e$B$+\e(B
-@code{copy-face} \e$B$r;H$&;v$,$G$-$^$9!#Nc$($P!"\e(B@code{gnus-emphasis-italic}
-\e$B$KBe$o$j$K@V$N%U%'%$%9$r;H$&$h$&$K$7$?$$$H$-$O!"<!$N$h$&$K$G$-$^$9!'\e(B
+\e$B$3$l$i$N%U%'%$%9$rJQ99$7$?$$$N$G$"$l$P!"\e(B
+@kbd{M-x customize} \e$B$+\e(B @code{copy-face} \e$B$r;H$&;v$,$G$-$^$9!#Nc$($P!"\e(B
+@code{gnus-emphasis-italic} \e$B$KBe$o$j$K@V$N%U%'%$%9$r;H$&$h$&$K$7$?$$$H$-\e(B
+\e$B$O!"<!$N$h$&$K$G$-$^$9\e(B:
 
 @lisp
 (copy-face 'red 'gnus-emphasis-italic)
@@ -6474,14 +6983,13 @@ Fonts})\e$B!#F1$8%a%C%;!<%8$NCf$KJ#?t$N5-;v$+$i$N0zMQ$,$"$k$H!"\e(Bgnus \e$B$O$=$l$
 
 @vindex gnus-group-highlight-words-alist
 \e$BG$0U$N8l$r6/D4I=<($5$;$?$$$H$-$O!"\e(B
-@code{gnus-group-highlight-words-alist} \e$BJQ?t$r;H$&$3$H$,$G$-$^$9!#$3$l$O\e(B
-@code{gnus-emphasis-alist} \e$B$HF1$89=J8$r;H$$$^$9!#\e(B@code{highlight-words}
-\e$B%0%k!<%W%Q%i%a!<%?$r;H$&$3$H$b$G$-$^$9\e(B
+@code{gnus-group-highlight-words-alist} \e$BJQ?t$r;H$&$3$H$,$G$-$^$9!#$3$l\e(B
+\e$B$O\e(B @code{gnus-emphasis-alist} \e$B$HF1$89=J8$r;H$$$^$9!#\e(B
+@code{highlight-words} \e$B%0%k!<%W%Q%i%a!<%?$r;H$&$3$H$b$G$-$^$9!#\e(B
 
 \e$B5-;v$r<+F0E*$K%U%)%s$HJQ99$5$;$k$?$a$K$O\e(B @xref{Customizing Articles} \e$B$r\e(B
 \e$B;2>H$7$F2<$5$$!#\e(B
 
-
 @node Article Hiding
 @subsection \e$B5-;v$r1#$9\e(B
 @cindex article hiding
@@ -6492,36 +7000,39 @@ Fonts})\e$B!#F1$8%a%C%;!<%8$NCf$KJ#?t$N5-;v$+$i$N0zMQ$,$"$k$H!"\e(Bgnus \e$B$O$=$l$
 @table @kbd
 
 @item W W a
-@kindex W W a \e$B!J35N,!K\e(B
+@kindex W W a (\e$B35N,\e(B)
 @findex gnus-article-hide
 \e$B5-;v%P%C%U%!$G$?$/$5$s$N1#F?$r$7$^$9\e(B (@kbd{gnus-article-hide})\e$B!#FC$K!"$3\e(B
 \e$B$N4X?t$O%X%C%@!<!"\e(BPGP\e$B!"0zMQJ8$H=pL>$r1#$7$^$9!#\e(B
 
 @item W W h
-@kindex W W h \e$B!J35N,!K\e(B
+@kindex W W h (\e$B35N,\e(B)
 @findex gnus-article-toggle-headers
-\e$B%X%C%@!<$r1#$7$^$9\e(B (@code{gnus-article-toggle-headers})\e$B!#\e(B @xref{Hiding
-Headers}.
+\e$B%X%C%@!<$r1#$7$^$9\e(B (@code{gnus-article-toggle-headers})\e$B!#\e(B
+@xref{Hiding Headers}.
 
 @item W W b
-@kindex W W b \e$B!J35N,!K\e(B
+@kindex W W b (\e$B35N,\e(B)
 @findex gnus-article-hide-boring-headers
-\e$B$"$^$j6=L#$N$b$F$J$$%X%C%@!<$r1#$7$^$9\e(B
-(@code{gnus-article-hide-boring-headers})\e$B!#\e(B @xref{Hiding Headers}.
+\e$B$"$^$j6=L#$N$b$F$J$$%X%C%@!<$r1#$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-hide-boring-headers})\e$B!#\e(B@xref{Hiding Headers}.
 
 @item W W s
-@kindex W W s \e$B!J35N,!K\e(B
+@kindex W W s (\e$B35N,\e(B)
 @findex gnus-article-hide-signature
-\e$B=pL>$r1#$7$^$9\e(B (@code{gnus-article-hide-signature})\e$B!#\e(B @xref{Article
-Signature}.
+\e$B=pL>$r1#$7$^$9\e(B (@code{gnus-article-hide-signature})\e$B!#\e(B
+@xref{Article Signature}.
 
 @item W W l
 @kindex W W l (Summary)
 @findex gnus-article-hide-list-identifiers
 @vindex gnus-list-identifiers
-@code{gnus-list-identifiers} \e$B$G;XDj$5$l$F$$$k%a!<%j%s%0%j%9%H$NI8<1$r1#\e(B
-\e$B$7$^$9!#$3$l$i$O$$$/$D$+$N%j%9%H$N%5!<%P!<$,A4$F$N\e(B @code{Subject} \e$B%X%C%@!<\e(B
-\e$B$N:G=i$K$D$1$kJ8;zNs$G$9\e(B---\e$BNc$($P!"\e(B@samp{[zebra 4711]}\e$B!#\e(B
+@code{gnus-list-identifiers} \e$B$G;XDj$5$l$F$$$k%a!<%j%s%0%j%9%H$NI8<1$r:o\e(B
+\e$B=|$7$^$9!#$3$l$i$O$$$/$D$+$N%a!<%j%s%0%j%9%H$N%5!<%P!<$,A4$F\e(B
+\e$B$N\e(B @code{Subject} \e$B%X%C%@!<$N:G=i$K$D$1$kJ8;zNs$G$9\e(B---\e$BNc$($P!"\e(B
+@samp{[zebra 4711]}\e$B!#J8;zNs$N=i$a$K$"$k\e(B @samp{Re: } \e$B$O!":o=|$r9T$J$&A0$K\e(B
+\e$BD7$S1[$5$l$^$9!#\e(B@code{gnus-list-identifiers} \e$B$K\e(B @code{\\(..\\)} \e$B$r4^$a$F\e(B
+\e$B$O$$$1$^$;$s!#\e(B
 
 @table @code
 
@@ -6533,12 +7044,13 @@ Signature}.
 @end table
 
 @item W W p
-@kindex W W p \e$B!J35N,!K\e(B
+@kindex W W p (\e$B35N,\e(B)
 @findex gnus-article-hide-pgp
 @vindex gnus-article-hide-pgp-hook
-@sc{pgp} \e$B=pL>$r1#$7$^$9\e(B (@code{gnus-article-hide-pgp})\e$B!#\e(B @sc{pgp} \e$B=pL>$,\e(B
+@sc{pgp} \e$B=pL>$r1#$7$^$9\e(B (@code{gnus-article-hide-pgp})\e$B!#\e(B@sc{pgp} \e$B=pL>$,\e(B
 \e$B1#$5$l$?8e$K%U%C%/\e(B @code{gnus-article-hide-pgp-hook} \e$B$,<B9T$5$l$^$9!#\e(B
 \e$BNc$($P!"=pL>$r;}$D5-;v$r<+F0E*$KG'>Z$9$k$K$O\e(B:
+
 @lisp
 ;;; Hide pgp cruft if any.
 
@@ -6555,9 +7067,9 @@ Signature}.
 @end lisp
 
 @item W W P
-@kindex W W P \e$B!J35N,!K\e(B
+@kindex W W P (\e$B35N,\e(B)
 @findex gnus-article-hide-pem
-@sc{pem} (privacy enhanced messages\e$B!J%W%i%$%P%7!<3HD%%a%C%;!<%8!K\e(B) \e$BItJ,$r\e(B
+@sc{pem} (privacy enhanced messages (\e$B%W%i%$%P%7!<3HD%%a%C%;!<%8\e(B)) \e$BItJ,$r\e(B
 \e$B1#$7$^$9\e(B (@code{gnus-article-hide-pem})\e$B!#\e(B
 
 @item W W B
@@ -6567,20 +7079,22 @@ Signature}.
 @cindex OneList
 @cindex stripping advertisments
 @cindex advertisments
-@code{banner} \e$B%0%k!<%W%Q%i%a!<%?$G;XDj$5$l$?%P%J!<$r<h$j=|$-$^$9\e(B
-(@code{gnus-article-strip-banner})\e$B!#$3$l$O<g$K!"$$$/$D$+$N%a!<%j%s%0%j%9\e(B
+@code{banner} \e$B%0%k!<%W%Q%i%a!<%?$G;XDj$5$l$?%P%J!<$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-article-strip-banner})\e$B!#$3$l$O<g$K!"$$$/$D$+$N%a!<%j%s%0%j%9\e(B
 \e$B%H$d;J2q<TIU$-$N%0%k!<%W$,A4$F$N%0%k!<%W$KDI2C$9$k!"15F+$7$$%P%J!<$H\e(B/\e$B$b\e(B
-\e$B$7$/$O=pL>$r1#$9$?$a$K;EMM$5$l$^$9!#$3$N4X?t$r;H$&J}K!$O\e(B @code{banner}
-\e$B%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$r%P%J!<$r<h$j=|$-$?$$%0%k!<\e(B
-\e$B%W$KDI2C$7$^$9!#%Q%i%a!<%?>C5n$5$l$k%F%-%9%H$K9gCW$9$k@55,I=8=$H$7$F2r<a\e(B
-\e$B$5$l$kJ8;zNs$+!"\e(B(\e$B:G8e$N\e(B) \e$B=pL>$,>C5n$5$l$k$H$$$&0UL#$G$"$k%7%s%\%k\e(B
-@code{signature} \e$B$G$"$k$3$H$,$G$-$^$9!#\e(B
+\e$B$7$/$O=pL>$r1#$9$?$a$K;EMM$5$l$^$9!#$3$N4X?t$r;H$&J}K!\e(B
+\e$B$O\e(B @code{banner} \e$B%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$r%P%J!<\e(B
+\e$B$r<h$j=|$-$?$$%0%k!<%W$KDI2C$7$^$9!#%Q%i%a!<%?>C5n$5$l$k%F%-%9%H$K9gCW$9\e(B
+\e$B$k@55,I=8=$H$7$F2r<a$5$l$kJ8;zNs$+!"\e(B(\e$B:G8e$N\e(B) \e$B=pL>$,>C5n$5$l$k$H$$$&0UL#\e(B
+\e$B$G$"$k%7%s%\%k\e(B @code{signature}\e$B!"$^$?\e(B
+\e$B$O\e(B @code{gnus-article-banner-alist} \e$B$N@55,I=8=$KBP1~$7$?%7%s%\%k$G$"$k$3\e(B
+\e$B$H$,$G$-$^$9!#\e(B
 
 @item W W c
-@kindex W W c \e$B!J35N,!K\e(B
+@kindex W W c (\e$B35N,\e(B)
 @findex gnus-article-hide-citation
-\e$B0zMQ$r1#$7$^$9\e(B (@code{gnus-article-hide-citation})\e$B!#1#JC$r%+%9%?%^%$%:$9$k\e(B
-\e$B$$$/$D$+$NJQ?t$O!'\e(B
+\e$B0zMQ$r1#$7$^$9\e(B (@code{gnus-article-hide-citation})\e$B!#1#JC$r%+%9%?%^%$%:$9\e(B
+\e$B$k$$$/$D$+$NJQ?t$O\e(B:
 
 @table @code
 @item gnus-cited-opend-text-button-line-format
@@ -6591,7 +7105,7 @@ Signature}.
 Gnus \e$B$O$I$3$N0zMQJ8$,1#$5$l$F$$$k$+$r<($9$?$a$K%\%?%s$rIU$12C$(!"J8>O$N\e(B
 \e$B1#JC$r@Z$jBX$($i$l$k$h$&$K$7$^$9!#$3$NJQ?t$NMM<0$O$3$l$i$N%U%)!<%^%C%H$N\e(B
 \e$B$h$&$JJQ?t$K$h$C$F;XDj$5$l$^$9\e(B (@pxref{Formatting Variables})\e$B!#<!$N;XDj\e(B
-\e$B$OM-8z$G$9!'\e(B
+\e$B$OM-8z$G$9\e(B:
 
 @table @samp
 @item b
@@ -6611,19 +7125,19 @@ Gnus \e$B$O$I$3$N0zMQJ8$,1#$5$l$F$$$k$+$r<($9$?$a$K%\%?%s$rIU$12C$(!"J8>O$N\e(B
 @end table
 
 @item W W C
-@kindex W W C \e$B!J35N,!K\e(B
+@kindex W W C (\e$B35N,\e(B)
 @findex gnus-article-hide-citation-in-followups
-\e$B:,K\$G$J$$5-;v$N0zMQJ8$r1#$7$^$9\e(B
-(@code{gnus-article-hide-citation-in-followups})\e$B!#$3$l$OBPOCE*L?Na$H$7$F\e(B
-\e$B$O$"$^$jLr$KN)$?$J$$$+$b$7$l$^$;$s$,!"<+F0E*$K5/$3$k<j7Z$J4X?t$G$"$k$G$7$g\e(B
-\e$B$&\e(B (@pxref{Customizing Articles})\e$B!#\e(B
+\e$B:,K\$G$J$$5-;v$N0zMQJ8$r1#$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-hide-citation-in-followups})\e$B!#$3$l$OBPOCE*L?Na$H\e(B
+\e$B$7$F$O$"$^$jLr$KN)$?$J$$$+$b$7$l$^$;$s$,!"<+F0E*$K5/$3$k<j7Z$J4X?t$G$"$k\e(B
+\e$B$G$7$g$&\e(B (@pxref{Customizing Articles})\e$B!#\e(B
 
 @item W W C-c
 @kindex W W C-c (\e$B35N,\e(B)
 @findex gnus-article-hide-citation-maybe
 
-\e$B0J2<$N\e(B2\e$B$D$NJQ?t$K4p$E$$$F0zMQ$r1#$7$^$9\e(B
-(@code{gnus-article-hide-citation-maybe}):
+\e$B0J2<$NFs$D$NJQ?t$K4p$E$$$F0zMQ$r1#$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-hide-citation-maybe}):
 
 @table @code
 @item gnus-cite-hide-percentage
@@ -6638,88 +7152,95 @@ Gnus \e$B$O$I$3$N0zMQJ8$,1#$5$l$F$$$k$+$r<($9$?$a$K%\%?%s$rIU$12C$(!"J8>O$N\e(B
 
 @end table
 
-\e$B$3$l$i$NA4$F$N!X1#JC!YL?Na$O@Z$jBX$(L?Na$G$9$,!"$3$l$i$NL?Na$KIi$N@\F,0z?t\e(B
-\e$B$rM?$($k$H!"$=$l$i$OA0$K1#$5$l$F$$$?$b$N$rI=<($7$^$9!#@5$N@\F,0z?t$rM?$($l\e(B
-\e$B$P!"$=$l$i$O>o$K1#$7$^$9!#\e(B
+\e$B$3$l$i$NA4$F$N!X1#JC!YL?Na$O@Z$jBX$(L?Na$G$9$,!"$3$l$i$NL?Na$KIi$N@\F,0z\e(B
+\e$B?t$rM?$($k$H!"$=$l$i$OA0$K1#$5$l$F$$$?$b$N$rI=<($7$^$9!#@5$N@\F,0z?t$rM?\e(B
+\e$B$($l$P!"$=$l$i$O>o$K1#$7$^$9!#\e(B
 
-\e$B0zMQ%+%9%?%^%$%:$N$?$a$NB>$NJQ?t$N>pJs$N$?$a$K\e(B @pxref{Article
-Highlighting} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
+\e$B0zMQ%+%9%?%^%$%:$N$?$a$NB>$NJQ?t$N>pJs$N$?$a\e(B
+\e$B$K\e(B @pxref{Article Highlighting} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 
 \e$B<+F0E*$K5-;v$NMWAG$r1#$9$?$a$NJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H\e(B
 \e$B$7$F2<$5$$!#\e(B
 
-
 @node Article Washing
 @subsection \e$B5-;v@vBu\e(B
 @cindex washing
 @cindex article washing
 
-\e$B;d$?$A$O$3$l$r$b$C$H$b$JM}M3$N2<$G!X5-;v@vBu!Y\e(B(article washing) \e$B$H8F$s$G$$\e(B
-\e$B$^$9!#$9$J$o$A!"%-!<\e(B @kbd{A} \e$B$O;H$o$l$F$$$k$N$G!"Be$o$j$K%-!<\e(B @kbd{W} \e$B$r;H\e(B
-\e$B$&I,MW$,$"$k$N$G$9!#\e(B
+\e$B;d$?$A$O$3$l$r$b$C$H$b$JM}M3$N2<$G!X5-;v@vBu!Y\e(B(article washing) \e$B$H8F$s$G\e(B
+\e$B$$$^$9!#$9$J$o$A!"%-!<\e(B @kbd{A} \e$B$O;H$o$l$F$$$k$N$G!"Be$o$j$K\e(B
+\e$B%-!<\e(B @kbd{W} \e$B$r;H$&I,MW$,$"$k$N$G$9!#\e(B
 
-\e$B;d$?$A$O\e(B@dfn{\e$B@vBu\e(B}\e$B$r!X2?$+$N2?$+$r2?$+JL$N$b$N$KJQ49$9$k!Y$HDj5A$7$F$$$^$9\e(B
-\e$B$,!"IaDL$O$b$C$HNI$/8+$($k2?$+$KMn$ACe$-$^$9!#$=$l$K$b$C$H$-$l$$$G$9!"$?$V\e(B
-\e$B$s!#\e(B
+\e$B;d$?$A$O\e(B @dfn{\e$B@vBu\e(B} \e$B$r!X2?$+$N2?$+$r2?$+JL$N$b$N$KJQ49$9$k!Y$HDj5A$7$F$$\e(B
+\e$B$^$9$,!"IaDL$O$b$C$HNI$/8+$($k2?$+$KMn$ACe$-$^$9!#$=$l$K$b$C$H$-$l$$$G$9!"\e(B
+\e$B$?$V$s!#\e(B
 
 @table @kbd
 
 @item W l
-@kindex W l \e$B!J35N,!K\e(B
+@kindex W l (\e$B35N,\e(B)
 @findex gnus-summary-stop-page-breaking
-\e$B%Z!<%8$N6h@Z$j$r8=:_$N5-;v$+$i<h$j=|$-$^$9\e(B
-(@code{gnus-summary-stop-page-breaking})\e$B!#%Z!<%8$N6h@Z$j$KIU$$$F$O\e(B
-@xref{Misc Article} \e$B$r;2>H$7$F2<$5$$!#\e(B
+\e$B%Z!<%8$N6h@Z$j$r8=:_$N5-;v$+$i<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-summary-stop-page-breaking})\e$B!#%Z!<%8$N6h@Z$j$KIU$$$F\e(B
+\e$B$O\e(B @xref{Misc Article} \e$B$r;2>H$7$F2<$5$$!#\e(B
 
 @item W r
-@kindex W r \e$B!J35N,!K\e(B
+@kindex W r (\e$B35N,\e(B)
 @findex gnus-summary-caesar-message
 @c @icon{gnus-summary-caesar-message}
-\e$B5-;v%P%C%U%!$G%+%(%5%kJQ49\e(B (Caesar rotate) (rot13) \e$B$r$7$^$9\e(B
-(@code{gnus-summary-caesar-message})\e$B!#%+%(%5%kJQ49$+\e(B rot13 \e$B$rMQ$$$FFI$`;v\e(B
-\e$B$N$G$-$k!"H=FIIT2DG=$J5-;v$G$9!JE57?E*$K$O!"967bE*$J>iCL$J$I$G$9!#!K\e(B
-
-\e$BIaDL$O\e(B ``rot13'' \e$B$H8F$P$l$F$$$^$9!#$=$l$O%"%k%U%!%Y%C%H$N0LCV$,\e(B 13 \e$B8D2sE>\e(B
-\e$B$9$k$+$i$G$9!#Nc$($P!"\e(B@samp{B}\e$B!J\e(B2\e$BHVL\$NJ8;z!K\e(B \e$B"*\e(B @samp{O}\e$B!J\e(B15\e$BHVL\$NJ8;z!K!#\e(B
-\e$B$3$l$O;~!9!X%+%(%5%kJQ49!Y$H8F$P$l$k;v$b$"$j$^$9!#$H$$$&$N$O!"%+%(%5%k$,$3\e(B
-\e$B$N7A<0$N!"$(!<$H!"$A$g$C$H4JC1$J0E9f2=$r:NMQ$7$?$H$$$&1=$,$"$k$+$i$G$9!#\e(B
+\e$B5-;v%P%C%U%!$G%+%(%5%kJQ49\e(B (Caesar rotate) (rot13) \e$B$r$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-caesar-message})\e$B!#%+%(%5%kJQ49$+\e(B rot13 \e$B$rMQ$$$FFI\e(B
+\e$B$`;v$N$G$-$k!"H=FIIT2DG=$J5-;v$G$9\e(B (\e$BE57?E*$K$O!"967bE*$J>iCL$J$I$G$9!#\e(B)
+
+\e$BIaDL$O\e(B ``rot13'' \e$B$H8F$P$l$F$$$^$9!#$=$l$O%"%k%U%!%Y%C%H$N0LCV$,\e(B 13 \e$B8D2s\e(B
+\e$BE>$9$k$+$i$G$9!#Nc$($P!"\e(B@samp{B} (2 \e$BHVL\$NJ8;z\e(B) \e$B"*\e(B @samp{O} (15 \e$BHVL\$NJ8\e(B
+\e$B;z\e(B)\e$B!#$3$l$O;~!9!X%+%(%5%kJQ49!Y$H8F$P$l$k;v$b$"$j$^$9!#$H$$$&$N$O!"%+%(\e(B
+\e$B%5%k$,$3$N7A<0$N!"$(!<$H!"$A$g$C$H4JC1$J0E9f2=$r:NMQ$7$?$H$$$&1=$,$"$k$+\e(B
+\e$B$i$G$9!#\e(B
 
 @item W t
-@kindex W t \e$B!J35N,!K\e(B
-@findex gnus-summary-toggle-header
-\e$B5-;v%P%C%U%!$K$9$Y$F$N%X%C%@!<$rI=<($9$k$+$I$&$+$r@Z$jBX$($^$9\e(B
-(@code{gnus-summary-toggle-header})\e$B!#\e(B
+@item t
+@kindex W t (\e$B35N,\e(B)
+@kindex t (\e$B35N,\e(B)
+@findex gnus-article-toggle-headers
+\e$B5-;v%P%C%U%!$K$9$Y$F$N%X%C%@!<$rI=<($9$k$+$I$&$+$r@Z$jBX$($^\e(B
+\e$B$9\e(B (@code{gnus-article-toggle-headers})\e$B!#\e(B
 
 @item W v
-@kindex W v \e$B!J35N,!K\e(B
+@kindex W v (\e$B35N,\e(B)
 @findex gnus-summary-verbose-header
-\e$B5-;v%P%C%U%!$K$9$Y$F$N%X%C%@!<$r1J1s$KI=<($9$k$+$I$&$+$r@Z$jBX$($^$9\e(B
-(@code{gnus-summary-verbose-header})\e$B!#\e(B
+\e$B5-;v%P%C%U%!$K$9$Y$F$N%X%C%@!<$r1J1s$KI=<($9$k$+$I$&$+$r@Z$jBX$($^\e(B
+\e$B$9\e(B (@code{gnus-summary-verbose-header})\e$B!#\e(B
 
 @item W m
-@kindex W m \e$B!J35N,!K\e(B
+@kindex W m (\e$B35N,\e(B)
 @findex gnus-summary-toggle-mime
-\e$BI=<($9$kA0$K5-;v$K\e(B @sc{mime} \e$B=hM}$r<B9T$9$k$+$I$&$+$r@Z$j49$($^$9\e(B
-(@code{gnus-summary-toggle-mime})\e$B!#\e(B
+\e$BI=<($9$kA0$K5-;v$K\e(B @sc{mime} \e$B=hM}$r<B9T$9$k$+$I$&$+$r@Z$j49$($^\e(B
+\e$B$9\e(B (@code{gnus-summary-toggle-mime})\e$B!#\e(B
 
 @item W o
-@kindex W o \e$B!J35N,!K\e(B
+@kindex W o (\e$B35N,\e(B)
 @findex gnus-article-treat-overstrike
 \e$B%*!<%P!<%9%H%i%$%/$r=hM}$7$^$9\e(B (@code{gnus-article-treat-overstrike})\e$B!#\e(B
 
 @item W d
-@kindex W d \e$B!J35N,!K\e(B
+@kindex W d (\e$B35N,\e(B)
 @findex gnus-article-treat-dumbquotes
 @vindex gnus-article-dumbquotes-map
 @cindex Smartquotes
-@cindex M******** sm*rtq**t*s
+@cindex M****s*** sm*rtq**t*s
 @cindex Latin 1
-@code{gnus-article-dumbquotes-map} \e$B$K1~$8$F!"\e(BM******** sm*rtq**t*s \e$B$r=h\e(B
-\e$BM}$7$^$9\e(B \e$B$3$N4X?t$OJ8;z$,\e(B sm*rtq**t* \e$B$+$I$&$+$r?dB,$7$^$9$N$G!"BPOCE*$K\e(B
-\e$B$N$_;HMQ$5$l$k$Y$-$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#\e(B
+@code{gnus-article-dumbquotes-map} \e$B$K1~$8$F!"%^"#"#"#%="#\e(B
+\e$B"#\e(B sm*rtq**t*s \e$B$r=hM}$7$^$9\e(B \e$B$3$N4X?t$OJ8;z$,\e(B sm*rtq**t* \e$B$+$I$&$+$r?dB,$7\e(B
+\e$B$^$9$N$G!"BPOCE*$K$N$_;HMQ$5$l$k$Y$-$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#\e(B
+
+Sm*rtq**t*s \e$B$O$b$C$HB?$/$N0zMQJ8;z$rDs6!$9$k$?$a$K!"%^"#"#"#%="#"#$,>!<j\e(B
+\e$B$KJ8;z%^%C%W$r3HD%$7$?$b$N$G$9!#$b$7!"%"%]%9%H%m%U%#\e(B (') \e$B$d0zMQ5-9f$J$I\e(B
+\e$B$,$"$k$Y$-$H$3$m$K\e(B @code{\222} \e$B$d\e(B @code{\264} \e$B$N$h$&$J$b$N$,8+$($F$7$^$C\e(B
+\e$B$?$i!"@vBu$7$F$_$F2<$5$$!#\e(B
 
 @item W w
-@kindex W w \e$B!J35N,!K\e(B
+@kindex W w (\e$B35N,\e(B)
 @findex gnus-article-fill-cited-article
 \e$B8l$N@^$jJV$7$r$7$^$9\e(B (@code{gnus-article-fill-cited-articles})\e$B!#\e(B
 
@@ -6734,18 +7255,43 @@ Highlighting} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 @item W C
 @kindex W C (\e$B35N,\e(B)
 @findex gnus-article-capitalize-sentences
-\e$B$=$l$>$l$NJ,$N:G=i$N8l$rBgJ8;z$K$7$^$9\e(B
-(@code{gnus-article-capitalize-sentences})\e$B!#\e(B
+\e$B$=$l$>$l$NJ,$N:G=i$N8l$rBgJ8;z$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-capitalize-sentences})\e$B!#\e(B
 
 @item W c
-@kindex W c \e$B!J35N,!K\e(B
+@kindex W c (\e$B35N,\e(B)
 @findex gnus-article-remove-cr
-CRLF \e$B$NAH\e(B (\e$B$9$J$o$A!"9T$N:G8e$N\e(B @samp{^M}) \e$B$r\e(B LF \e$B$KJQ49$7$^$9\e(B (\e$B$3$l$O\e(B
-DOS \e$B$N9TKv$N@$OC$r$7$^$9\e(B)\e$B!"$=$7$F$=$l$+$i;D$j$N\e(B CR \e$B$r\e(B LF \e$B$KJQ49$7$^$9\e(B
-(\e$B$3$l$O\e(B MAC \e$B$N9TKv$N@$OC$r$7$^$9\e(B) (@code{gnus-article-remove-cr})\e$B!#\e(B
+CRLF \e$B$NAH\e(B (\e$B$9$J$o$A!"9T$N:G8e$N\e(B @samp{^M}) \e$B$r\e(B LF \e$B$KJQ49$7$^$9\e(B (\e$B$3$l\e(B
+\e$B$O\e(B DOS \e$B$N9TKv$N@$OC$r$7$^$9\e(B)\e$B!"$=$7$F$=$l$+$i;D$j$N\e(B CR \e$B$r\e(B LF \e$B$KJQ49$7$^\e(B
+\e$B$9\e(B (\e$B$3$l$O\e(B MAC \e$B$N9TKv$N@$OC$r$7$^$9\e(B) (@code{gnus-article-remove-cr})\e$B!#\e(B
+
+@c @item W 6
+@c @kindex W 6 (Summary)
+@c @findex gnus-article-de-base64-unreadable
+@c Treat base64 (@code{gnus-article-de-base64-unreadable}).
+@c Base64 is one common @sc{mime} encoding employed when sending non-ASCII
+@c (i. e., 8-bit) articles.  Note that the this is usually done
+@c automatically by Gnus if the message in question has a
+@c @code{Content-Transfer-Encoding} header that says that this encoding has
+@c been done.
+
+@item W Z
+@kindex W Z (Summary)
+@findex gnus-article-decode-HZ
+HZ \e$B$^$?$O\e(B HZP \e$B$r=hM}$7$^$9!#\e(BHZ (\e$B$^$?$O\e(B HZP) \e$B$OCf9q8l$N5-;v$rEAAw$9$k$H$-\e(B
+\e$B$K;H$o$l$k0lHLE*$JId9f$G$9!#$3$l$O\e(B @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}} \e$B$N\e(B
+\e$B$h$&$JE57?E*$JJ8;zNs$r:n$j$^$9!#\e(B
+
+@c @item W h
+@c @kindex W h (Summary)
+@c @findex gnus-article-wash-html
+@c Treat HTML (@code{gnus-article-wash-html}).
+@c Note that the this is usually done automatically by Gnus if the message
+@c in question has a @code{Content-Type} header that says that this type
+@c has been done.
 
 @item W f
-@kindex W f \e$B!J35N,!K\e(B
+@kindex W f (\e$B35N,\e(B)
 @cindex x-face
 @findex gnus-article-display-x-face
 @findex gnus-article-x-face-command
@@ -6757,29 +7303,34 @@ DOS \e$B$N9TKv$N@$OC$r$7$^$9\e(B)\e$B!"$=$7$F$=$l$+$i;D$j$N\e(B CR \e$B$r\e(B LF \e$B$K
 @end iflatex
 @end iftex
 \e$B$9$Y$F$N\e(B X-Face \e$BMs$rC5$7$FI=<($7$^$9\e(B(@code{gnus-article-display-x-face})\e$B!#\e(B
-\e$B$3$NL?Na$OJQ?t\e(B @code{gnus-article-x-face-command} \e$B$K$h$C$FM?$($i$l$?4X?t$K\e(B
-\e$B$h$C$F<B9T$5$l$^$9!#$3$NJQ?t$,J8;zNs$J$i$P!"$3$NJ8;zNs$,%5%V%7%'%k$G<B9T$5\e(B
-\e$B$l$^$9!#4X?t$J$i$P!"$3$N4X?t$,4i$r0z?t$H$7$F8F$P$l$^$9!#$b$7\e(B
-@code{gnus-article-x-face-too-ugly}\e$B!J$3$l$O@55,I=8=$G$9!K$,\e(B @code{From} \e$BMs\e(B
-\e$B$K9gCW$9$l$P!"4i$OI=<($5$l$^$;$s!#\e(BEmacs \e$B$G$N%G%#%U%)%k%H$NF0:n$O\e(B
-@code{xv} \e$B$r%U%)!<%/$7$F8+$h$&$H$7$^$9!#\e(BXEmacs \e$B$G$N%G%#%U%)%k%H$NF0:n$O\e(B
-@code{From} \e$BMs$NA0$K4i$rI=<($7$^$9!#!J\e(BXEmacs \e$B$,\e(B X-Face \e$B5!G=IU$-$G%3%s%Q%$\e(B
-\e$B%k$5$l$F$$$k$HNI$$$G$7$g$&!=!=$=$l$OI=<($r>/$7Aa$/$7$^$9!#$b$7:,K\E*\e(B
-X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V$N30It%W%m%0\e(B
-\e$B%i%`$r;H$C$F\e(B @code{X-Face} \e$BMs$rJQ49$7$h$&$H;n$_$^$9!#!K$3$N4X?t$rI=<(%U%C\e(B
-\e$B%/$KF~$l$?$$$N$G$"$l$P!"$*$=$i$/$=$l$":G8e$K$J$k$Y$-$G$7$g$&!#\e(B
+\e$B$3$NL?Na$OJQ?t\e(B @code{gnus-article-x-face-command} \e$B$K$h$C$FM?$($i$l$?4X?t\e(B
+\e$B$K$h$C$F<B9T$5$l$^$9!#$3$NJQ?t$,J8;zNs$J$i$P!"$3$NJ8;zNs$,%5%V%7%'%k$G<B\e(B
+\e$B9T$5$l$^$9!#4X?t$J$i$P!"$3$N4X?t$,4i$r0z?t$H$7$F8F$P$l$^$9!#$b\e(B
+\e$B$7\e(B @code{gnus-article-x-face-too-ugly} (\e$B$3$l$O@55,I=8=$G\e(B
+\e$B$9\e(B) \e$B$,\e(B @code{From} \e$BMs$K9gCW$9$l$P!"4i$OI=<($5$l$^$;$s!#\e(BEmacs \e$B$G$N%G%#%U%)\e(B
+\e$B%k%H$NF0:n$O\e(B @code{display} \e$B%W%m%0%i\e(B
+\e$B%`\e(B @footnote{@code{display} \e$B$O\e(B ImageMagick \e$B%Q%C%1!<%8$K4^$^$l$F$$$^$9!#\e(B
+@code{uncompface} \e$B$H\e(B @code{icontopbm} \e$B$NN>%W%m%0%i%`$K$D$$$F$O!"\e(B
+`compface' \e$B$d\e(B GNU/Linux \e$B%7%9%F%`$K$*$1$k\e(B `faces-xface' \e$B$N$h$&$J%Q%C%1!<\e(B
+\e$B%8$rC5$7$F2<$5$$!#\e(B} \e$B$r%U%)!<%/$7$F8+$h$&$H$7$^$9!#\e(BXEmacs \e$B$G$N%G%#%U%)%k\e(B
+\e$B%H$NF0:n$O\e(B @code{From} \e$BMs$NA0$K4i$rI=<($7$^$9!#\e(B(XEmacs \e$B$,\e(B X-Face \e$B5!G=IU\e(B
+\e$B$-$G%3%s%Q%$%k$5$l$F$$$k$HNI$$$G$7$g$&!=!=$=$l$OI=<($r>/$7Aa$/$7$^$9!#$b\e(B
+\e$B$7:,K\E*\e(B X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V\e(B
+\e$B$N30It%W%m%0%i%`$r;H$C$F\e(B @code{X-Face} \e$BMs$rJQ49$7$h$&$H;n$_$^$9!#\e(B) \e$B$3$N\e(B
+\e$B4X?t$rI=<(%U%C%/$KF~$l$?$$$N$G$"$l$P!"$*$=$i$/$=$l$O:G8e$K$J$k$Y$-$G$7$g\e(B
+\e$B$&!#\e(B
 
 @item W b
-@kindex W b \e$B!J35N,!K\e(B
+@kindex W b (\e$B35N,\e(B)
 @findex gnus-article-add-buttons
 \e$B%/%j%C%/$G$-$k%\%?%s$r5-;v$K2C$($^$9\e(B (@code{gnus-article-add-buttons})\e$B!#\e(B
 @xref{Article Buttons}.
 
 @item W B
-@kindex W B \e$B!J35N,!K\e(B
+@kindex W B (\e$B35N,\e(B)
 @findex gnus-article-add-buttons-to-head
-\e$B%/%j%C%/$G$-$k%\%?%s$r5-;v$N%X%C%@!<$K2C$($^$9\e(B
-(@code{gnus-article-add-buttons-to-head})\e$B!#\e(B
+\e$B%/%j%C%/$G$-$k%\%?%s$r5-;v$N%X%C%@!<$K2C$($^\e(B
+\e$B$9\e(B (@code{gnus-article-add-buttons-to-head})\e$B!#\e(B
 
 @item W W H
 @kindex W W H (\e$B35N,\e(B)
@@ -6788,51 +7339,50 @@ X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V$N3
 \e$B=|$-$^$9\e(B (@code{gnus-article-strip-headers-from-body})\e$B!#\e(B
 
 @item W E l
-@kindex W E l \e$B!J35N,!K\e(B
+@kindex W E l (\e$B35N,\e(B)
 @findex gnus-article-strip-leading-blank-lines
-\e$B5-;v$N;O$a$+$i$N$9$Y$F$N6uGr9T$r<h$j=|$-$^$9\e(B
-(@code{gnus-article-strip-leading-blank-lines})\e$B!#\e(B
+\e$B5-;v$N;O$a$+$i$N$9$Y$F$N6uGr9T$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-article-strip-leading-blank-lines})\e$B!#\e(B
 
 @item W E m
-@kindex W E m \e$B!J35N,!K\e(B
+@kindex W E m (\e$B35N,\e(B)
 @findex gnus-article-strip-multiple-blank-lines
 \e$B$9$Y$F$N6uGr9T$r6u9T$GCV$-49$(!"$9$Y$F$NJ#?t$N6u9T$r0l$D$N6u9T$GCV$-49$(\e(B
 \e$B$^$9\e(B (@code{gnus-article-strip-multiple-blank-lines})\e$B!#\e(B
 
 @item W E t
-@kindex W E t \e$B!J35N,!K\e(B
+@kindex W E t (\e$B35N,\e(B)
 @findex gnus-article-remove-trailing-blank-lines
-\e$B5-;v$N:G8e$N$9$Y$F$N6uGr9T$r<h$j=|$-$^$9\e(B
-(@code{gnus-article-remove-trailing-blank-lines})\e$B!#\e(B
+\e$B5-;v$N:G8e$N$9$Y$F$N6uGr9T$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-article-remove-trailing-blank-lines})\e$B!#\e(B
 
 @item W E a
-@kindex W E a \e$B!J35N,!K\e(B
+@kindex W E a (\e$B35N,\e(B)
 @findex gnus-article-strip-blank-lines
-\e$B>e$N#3$D$NL?Na$r$9$Y$F9T$$$^$9\e(B (@code{gnus-article-strip-blank-lines})\e$B!#\e(B
+\e$B>e$N;0$D$NL?Na$r$9$Y$F9T$$$^$9\e(B (@code{gnus-article-strip-blank-lines})\e$B!#\e(B
 
 @item W E A
-@kindex W E A \e$B!J35N,!K\e(B
+@kindex W E A (\e$B35N,\e(B)
 @findex gnus-article-strip-all-blank-lines
 \e$B$9$Y$F$N6uGr9T$r<h$j=|$-$^$9\e(B (@code{gnus-article-strip-all-blank-lines})\e$B!#\e(B
 
 @item W E s
-@kindex W E s \e$B!J35N,!K\e(B
+@kindex W E s (\e$B35N,\e(B)
 @findex gnus-article-strip-leading-space
-\e$B5-;v$NK\BN$N$9$Y$F$N9T$N;O$a$+$i$N$9$Y$F$N6uGr$r<h$j=|$-$^$9\e(B
-(@code{gnus-article-strip-leading-space})\e$B!#\e(B
+\e$B5-;v$NK\BN$N$9$Y$F$N9T$N;O$a$+$i$N$9$Y$F$N6uGr$r<h$j=|$-$^\e(B
+\e$B$9\e(B (@code{gnus-article-strip-leading-space})\e$B!#\e(B
 
 @item W E e
 @kindex W E e (\e$B35N,\e(B)
 @findex gnus-article-strip-trailing-space
-\e$B5-;v$NK\J8$NA4$F$N9T$N:G8e$+$i6uGr$r>C5n$7$^$9\e(B
-(@code{gnus-article-strip-trailing-space})\e$B!#\e(B
+\e$B5-;v$NK\J8$NA4$F$N9T$N:G8e$+$i6uGr$r>C5n$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-strip-trailing-space})\e$B!#\e(B
 
 @end table
 
 \e$B5-;v$N@vBu$r<+F0E*$K$9$k$?$a$NJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H\e(B
 \e$B$7$F2<$5$$!#\e(B
 
-
 @node Article Buttons
 @subsection \e$B5-;v$N%\%?%s\e(B
 @cindex buttons
@@ -6841,15 +7391,15 @@ X-Face \e$B5!G=$,$J$$$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{pbmplus} \e$B$d$=$NCg4V$N3
 \e$B$=$l$K4X$9$k;v$r!"$=$l$i$N;2>H$N>e$G\e(B @kbd{RET} \e$B$rBG$D$+!"%^%&%9$N??Cf$N\e(B
 \e$B%\%?%s$r;H$&;v$K$h$C$F!":G>.8B$NEXNO$G<hF@$9$k;v$,$G$-$l$PAGE($G$7$g$&!#\e(B
 
-Gnus \e$B$O%G%#%U%)%k%H$GFCDj$NI8=`$N;2>H$K\e(B@dfn{\e$B%\%?%s\e(B}\e$B$rIU$1$^$9!'\e(B \e$B$A$c$s$H$7\e(B
-\e$B$?\e(B URL\e$B!"%a!<%k%"%I%l%9!"\e(BMessage-ID \e$B$G$9!#$3$l$O\e(B2\e$B$D$NJQ?t$K$h$C$F@)8f$5$l\e(B
-\e$B$F$$$F!"$=$N0l$D$O5-;v$NK\BN$r07$$!"$b$&0l$D$O5-;v$N%X%C%@!<$r07$$$^$9!#\e(B
-
+Gnus \e$B$O%G%#%U%)%k%H$GFCDj$NI8=`$N;2>H$K\e(B@dfn{\e$B%\%?%s\e(B}\e$B$rIU$1$^$9\e(B: \e$B$A$c$s$H\e(B
+\e$B$7$?\e(B URL\e$B!"%a!<%k%"%I%l%9!"\e(BMessage-ID \e$B$G$9!#$3$l$OFs$D$NJQ?t$K$h$C$F@)8f\e(B
+\e$B$5$l$F$$$F!"$=$N0l$D$O5-;v$NK\BN$r07$$!"$b$&0l$D$O5-;v$N%X%C%@!<$r07$$$^\e(B
+\e$B$9!#\e(B
 @table @code
 
 @item gnus-button-alist
 @vindex gnus-button-alist
-\e$B$=$l$>$l$NF~NOMWAG$,<!$N$h$&$JMM<0$NO"A[%j%9%H$G$9!'\e(B
+\e$B$=$l$>$l$NF~NOMWAG$,<!$N$h$&$JMM<0$NO"A[%j%9%H$G$9\e(B:
 
 @lisp
 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
@@ -6859,8 +7409,8 @@ Gnus \e$B$O%G%#%U%)%k%H$GFCDj$NI8=`$N;2>H$K\e(B@dfn{\e$B%\%?%s\e(B}\e$B$rIU$1$^$9!'\e(
 
 @item regexp
 \e$B$3$N@55,I=8=\e(B (regexp) \e$B$K9gCW$9$k$9$Y$F$NJ8$O30It;2>H$G$"$k$H$_$J$5$l$^$9!#\e(B
-\e$B$3$l$OKd$a9~$^$l$?\e(B URL \e$B$K9gCW$9$kE57?E*$J@55,I=8=$G$9\e(B
-@samp{<URL:\\([^\n\r>]*\\)>}\e$B!#\e(B
+\e$B$3$l$OKd$a9~$^$l$?\e(B URL \e$B$K9gCW$9$kE57?E*$J@55,I=8=$G\e(B
+\e$B$9\e(B @samp{<URL:\\([^\n\r>]*\\)>}\e$B!#\e(B
 
 @item button-par
 Gnus \e$B$O9gCW$7$?$b$N$N$I$NItJ,$,%O%$%i%$%H$5$l$k$N$+$rCN$i$J$1$l$P$J$j$^\e(B
@@ -6876,8 +7426,8 @@ Gnus \e$B$O9gCW$7$?$b$N$N$I$NItJ,$,%O%$%i%$%H$5$l$k$N$+$rCN$i$J$1$l$P$J$j$^\e(B
 \e$B$3$N4X?t\e(B (function) \e$B$O$3$N%\%?%s$r%/%j%C%/$7$?$H$-$K8F$P$l$^$9!#\e(B
 
 @item data-par
-@var{button-par} \e$B$N$h$&$K!"$3$l$OItJ,I=8=$NHV9f$G$9$,!"$3$l$O9gCW$N$I$NIt\e(B
-\e$BJ,$,\e(B @var{function} \e$B$K%G!<%?$H$7$FAw$i$l$k$+$r;XDj$7$^$9!#\e(B
+@var{button-par} \e$B$N$h$&$K!"$3$l$OItJ,I=8=$NHV9f$G$9$,!"$3$l$O9gCW$N$I$N\e(B
+\e$BItJ,$,\e(B @var{function} \e$B$K%G!<%?$H$7$FAw$i$l$k$+$r;XDj$7$^$9!#\e(B
 
 @end table
 
@@ -6891,7 +7441,7 @@ Gnus \e$B$O9gCW$7$?$b$N$N$I$NItJ,$,%O%$%i%$%H$5$l$k$N$+$rCN$i$J$1$l$P$J$j$^\e(B
 @vindex gnus-header-button-alist
 \e$B$=$l$,5-;v$N%X%C%@!<$@$1$KE,MQ$5$l!"$=$l$>$l$NF~NOMWAG$,$I$N%X%C%@!<$K%\\e(B
 \e$B%?%s2=$rE,MQ$9$k$+$r<($9DI2C$NMWAG$,$"$k;v$r=|$-!"$3$l$OB>$NO"A[%j%9%H$H\e(B
-\e$BF1$8$h$&$J$b$N$G$9!'\e(B
+\e$BF1$8$h$&$J$b$N$G$9\e(B:
 
 @lisp
 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
@@ -6917,35 +7467,34 @@ Gnus \e$B$O9gCW$7$?$b$N$N$I$NItJ,$,%O%$%i%$%H$5$l$k$N$+$rCN$i$J$1$l$P$J$j$^\e(B
 \e$B5-;v$r<+F0E*$K%\%?%s2=$9$kJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H$7$F\e(B
 \e$B2<$5$$!#\e(B
 
-
 @node Article Date
 @subsection \e$B5-;v$NF|IU\e(B
 
-\e$BF|IU$OJ9$$$?;v$NL5$$2?$+JUnA$J;~4VBS\e(B (timezone) \e$B$G:n@.$5$l$F$$$k;v$,NI$/$"\e(B
-\e$B$k$N$G!"5-;v$,Aw$i$l$?$H$-$K2?;~$G$"$C$?$+$rCN$k;v$,$G$-$k$N$OHs>o$KNI$$;v\e(B
-\e$B$G$7$g$&!#\e(B
+\e$BF|IU$OJ9$$$?;v$NL5$$2?$+JUnA$J;~4VBS\e(B (timezone) \e$B$G:n@.$5$l$F$$$k;v$,NI$/\e(B
+\e$B$"$k$N$G!"5-;v$,Aw$i$l$?$H$-$K2?;~$G$"$C$?$+$rCN$k;v$,$G$-$k$N$OHs>o$KNI\e(B
+\e$B$$;v$G$7$g$&!#\e(B
 
 @table @kbd
 
 @item W T u
-@kindex W T u \e$B!J35N,!K\e(B
+@kindex W T u (\e$B35N,\e(B)
 @findex gnus-article-date-ut
 UT (\e$BJLL>\e(B GMT, ZULU) \e$B$GF|IU$rI=<($7$^$9\e(B (@code{gnus-article-date-ut})\e$B!#\e(B
 
 @item W T i
-@kindex W T i \e$B!J35N,!K\e(B
+@kindex W T i (\e$B35N,\e(B)
 @findex gnus-article-date-iso-8601
 @cindex ISO 8601
-\e$BF|IU$r9q:]E*$J7A<0!"\e(BISO 8601 \e$B$GI=<($7$^$9\e(B
-(@code{gnus-article-date-iso8601})\e$B!#\e(B
+\e$BF|IU$r9q:]E*$J7A<0!"\e(BISO 8601 \e$B$GI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-article-date-iso8601})\e$B!#\e(B
 
 @item W T l
-@kindex W T l \e$B!J35N,!K\e(B
+@kindex W T l (\e$B35N,\e(B)
 @findex gnus-article-date-local
 \e$BF|IU$r$=$NCO0h$N;~4VBS$GI=<($7$^$9\e(B (@code{gnus-article-date-local})\e$B!#\e(B
 
 @item W T s
-@kindex W T s \e$B!J35N,!K\e(B
+@kindex W T s (\e$B35N,\e(B)
 @vindex gnus-article-time-format
 @findex gnus-article-date-user
 @findex format-time-string
@@ -6955,19 +7504,19 @@ UT (\e$BJLL>\e(B GMT, ZULU) \e$B$GF|IU$rI=<($7$^$9\e(B (@code{gnus-article-date-ut})
 \e$B0lMw$OJQ?t$N@bL@J8$r8+$F$/$@$5$$!#\e(B
 
 @item W T e
-@kindex W T e \e$B!J35N,!K\e(B
+@kindex W T e (\e$B35N,\e(B)
 @findex gnus-article-date-lapsed
 @findex gnus-start-date-timer
 @findex gnus-stop-date-timer
-\e$B5-;v$,Ej9F$5$l$F$+$i:#$^$G$I$l$/$i$$$N;~4V$,7P2a$7$?$+$rI=<($7$^$9\e(B
-(@code{gnus-article-date-lapsed})\e$B!#$3$s$J$U$&$K!#\e(B
+\e$B5-;v$,Ej9F$5$l$F$+$i:#$^$G$I$l$/$i$$$N;~4V$,7P2a$7$?$+$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-article-date-lapsed})\e$B!#$3$s$J$U$&$K!#\e(B
 
 @example
 X-Sent: 9 years, 6 weeks, 4 days, 9 hours, 3 minutes, 28 seconds ago
 @end example
 
-@code{gnus-article-date-lapsed-new-header} \e$B$NCM$G$3$N%X%C%@!<$r4{B8$N\e(B
-Date \e$B$N2<$KDI2C$9$k$+!"CV$-BX$($k$+$r;XDj$7$^$9!#\e(B
+@code{gnus-article-date-lapsed-new-header} \e$B$NCM$G$3$N%X%C%@!<$r4{B8\e(B
+\e$B$N\e(B Date \e$B$N2<$KDI2C$9$k$+!"CV$-BX$($k$+$r;XDj$7$^$9!#\e(B
 
 gnus \e$B$G%a!<%k$rFI$`$3$H$NM-Mx$JE@$O!"C1=c$J%P%0$rAG@2$i$7$$IT>rM}$KCV$-\e(B
 \e$B49$($k$3$H$G$9!#\e(B
@@ -6979,47 +7528,46 @@ gnus \e$B$G%a!<%k$rFI$`$3$H$NM-Mx$JE@$O!"C1=c$J%P%0$rAG@2$i$7$$IT>rM}$KCV$-\e(B
 @end lisp
 
 \e$B$r$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$KF~$l$k$+!"2?$+$N%U%C%/$G<B9T$9$k$h\e(B
-\e$B$&$K$9$k;v$,$G$-$^$9!#%?%$%^!<$r;_$a$?$$$N$G$"$l$P!"L?Na\e(B
-@code{gnus-stop-date-timer} \e$B$r;H$&;v$,$G$-$^$9!#\e(B
+\e$B$&$K$9$k;v$,$G$-$^$9!#%?%$%^!<$r;_$a$?$$$N$G$"$l$P!"L?\e(B
+\e$BNa\e(B @code{gnus-stop-date-timer} \e$B$r;H$&;v$,$G$-$^$9!#\e(B
 
 @item W T o
-@kindex W T o \e$B!J35N,!K\e(B
+@kindex W T o (\e$B35N,\e(B)
 @findex gnus-article-date-original
-\e$BK\Mh$NF|IU$rI=<($7$^$9\e(B (@code{gnus-article-date-original})\e$B!#$3$l$O$"$J$?$,\e(B
-\e$BIaDL$OB>$NJQ494X?t$r;H$C$F$$$F!"$=$l$,40A4$K4V0c$C$?;v$r$7$F$$$k$N$G$O$J$$\e(B
-\e$B$+$H?4G[$7$F$$$k$H$-$KLr$KN)$A$^$9!#Nc$($P!"5-;v$,\e(B 1854 \e$BG/$KEj9F$5$l$?$H$J$C\e(B
-\e$B$F$$$k$H$7$^$7$g$&!#$7$+$7!"$=$N$h$&$J;v$O\e(B@emph{\e$B40A4$K\e(B}\e$BIT2DG=$G$9!#;d$,\e(B
-\e$B?.MQ$G$-$^$;$s$+!)\e(B *\e$B$/$9$/$9\e(B(\e$B>P\e(B)*
+\e$BK\Mh$NF|IU$rI=<($7$^$9\e(B (@code{gnus-article-date-original})\e$B!#$3$l$O$"$J$?\e(B
+\e$B$,IaDL$OB>$NJQ494X?t$r;H$C$F$$$F!"$=$l$,40A4$K4V0c$C$?;v$r$7$F$$$k$N$G$O\e(B
+\e$B$J$$$+$H?4G[$7$F$$$k$H$-$KLr$KN)$A$^$9!#Nc$($P!"5-;v$,\e(B 1854\e$BG/$KEj9F$5$l\e(B
+\e$B$?$H$J$C$F$$$k$H$7$^$7$g$&!#$7$+$7!"$=$N$h$&$J;v$O\e(B @emph{\e$B40A4$K\e(B }\e$BIT2DG=\e(B
+\e$B$G$9!#;d$,?.MQ$G$-$^$;$s$+\e(B? *\e$B$/$9$/$9\e(B(\e$B>P\e(B)*
 
 @end table
 
 \e$B<+F0E*$K9%$`=q<0$GF|IU$rI=<($9$kJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2\e(B
 \e$B>H$7$F2<$5$$!#\e(B
 
-
 @node Article Signature
 @subsection \e$B5-;v$N=pL>\e(B
 @cindex signatures
 @cindex article signature
 
 @vindex gnus-signature-separator
-\e$B$=$l$>$l$N5-;v$O\e(B2\e$B$D$NItJ,$KJ,$1$i$l$^$9!=!=8+=P$7\e(B (header) \e$B$HK\BN\e(B
-(body) \e$B$G$9!#K\BN$O=pL>ItJ,$HJ8>OItJ,$KJ,$1$i$l$^$9!#$I$l$,=pL>$H$_$J$5$l\e(B
-\e$B$k$+$r7h$a$kJQ?t$O\e(B @code{gnus-signature-separator} \e$B$G$9!#$3$l$OIaDL$O\e(B
-son-of-RFC 1036 \e$B$G;X<($5$l$F$$$kI8=`$N\e(B @samp{^-- $} \e$B$G$9!#$7$+$7!"B?$/$N?M\e(B
-\e$B$,I8=`$G$J$$=pL>J,N%$rMQ$$$^$9$N$G!"$3$NJQ?t$O0l$D0l$D;n$5$l$k!"@55,I=8=$N\e(B
-\e$B%j%9%H$G$"$k$3$H$b$G$-$^$9!#!JC5:w$OK\BN$N:G8e$+$i;O$a$X$H$J$5$l$^$9!#!K$h\e(B
-\e$B$/$"$j$=$&$JCM$O!'\e(B
+\e$B$=$l$>$l$N5-;v$OFs$D$NItJ,$KJ,$1$i$l$^$9!=!=8+=P$7\e(B (header) \e$B$HK\\e(B
+\e$BBN\e(B (body) \e$B$G$9!#K\BN$O=pL>ItJ,$HJ8>OItJ,$KJ,$1$i$l$^$9!#$I$l$,=pL>$H$_$J\e(B
+\e$B$5$l$k$+$r7h$a$kJQ?t$O\e(B @code{gnus-signature-separator} \e$B$G$9!#$3$l$OIaDL\e(B
+\e$B$O\e(B son-of-RFC 1036 \e$B$G;X<($5$l$F$$$kI8=`$N\e(B @samp{^-- $} \e$B$G$9!#$7$+$7!"B?\e(B
+\e$B$/$N?M$,I8=`$G$J$$=pL>J,N%$rMQ$$$^$9$N$G!"$3$NJQ?t$O0l$D0l$D;n$5$l$k!"@5\e(B
+\e$B5,I=8=$N%j%9%H$G$"$k$3$H$b$G$-$^$9!#\e(B(\e$BC5:w$OK\BN$N:G8e$+$i;O$a$X$H$J$5$l\e(B
+\e$B$^$9!#\e(B) \e$B$h$/$"$j$=$&$JCM$O\e(B:
 
 @lisp
 (setq gnus-signature-separator
       '("^-- $"         ; \e$BI8=`\e(B
         "^-- *$"        ; \e$BIaDL$N2u$7J}\e(B
         "^-------*$"    ; \e$BB?$/$N?M$OD9!<!<$$2#K@$N\e(B
-                        ; \e$B9T$r;H$$$^$9!#$"$!!*\e(B
-        "^ *--------*$" ; 2\e$BG\$N$"$!$!!*\e(B
+                        ; \e$B9T$r;H$$$^$9!#$"$!\e(B!
+        "^ *--------*$" ; \e$BFsG\$N$"$!$!\e(B!
         "^________*$"   ; \e$B2<@~$b?M5$$,$"$j$^$9\e(B
-        "^========*$")) ; \e$B<YF;!*\e(B
+        "^========*$")) ; \e$B<YF;\e(B!
 @end lisp
 
 \e$B$"$J$?$,42MF$G$"$l$P$"$k$[$I!"4V0c$C$?7k2L$rF@$k;v$K$J$k$G$7$g$&!#\e(B
@@ -7030,10 +7578,11 @@ son-of-RFC 1036 \e$B$G;X<($5$l$F$$$kI8=`$N\e(B @samp{^-- $} \e$B$G$9!#$7$+$7!"B?$/$
 
 @enumerate
 @item
-\e$B$3$l$,@0?t$G$"$l$P!"=pL>$O$3$N@0?t$h$j!JJ8;z$G!KD9$/$J$C$F$$$F$O$$$1$^$;$s!#\e(B
+\e$B$3$l$,@0?t$G$"$l$P!"=pL>$O$3$N@0?t$h$j\e(B (\e$BJ8;z$G\e(B) \e$BD9$/$J$C$F$$$F$O$$$1$^$;\e(B
+\e$B$s!#\e(B
 @item
-\e$B$3$l$,IbF0>.?tE@?t$G$"$l$P!"=pL>$O$=$N?t;z$h$j!J9T$G!KD9$/$J$C$F$$$F$O$$$1\e(B
-\e$B$^$;$s!#\e(B
+\e$B$3$l$,IbF0>.?tE@?t$G$"$l$P!"=pL>$O$=$N?t;z$h$j\e(B (\e$B9T$G\e(B) \e$BD9$/$J$C$F$$$F$O$$\e(B
+\e$B$1$^$;$s!#\e(B
 @item
 \e$B$3$l$,4X?t$G$"$l$P!"$=$N4X?t$O0z?t$J$7$G8F$P$l!"$=$l$,\e(B @code{nil} \e$B$rJV$;\e(B
 \e$B$P!"%P%C%U%!$K$O=pL>$,$"$j$^$;$s!#\e(B
@@ -7042,17 +7591,16 @@ son-of-RFC 1036 \e$B$G;X<($5$l$F$$$kI8=`$N\e(B @samp{^-- $} \e$B$G$9!#$7$+$7!"B?$/$
 \e$B$P!"$=$NEv$NJ8;zNs$O=pL>$G$O$"$j$^$;$s!#\e(B
 @end enumerate
 
-\e$B$3$NJQ?t$OMWAG$,>e$K5s$2$i$l$?7?$N%j%9%H$G$"$k;v$b$G$-$^$9!#$3$l$ONc$G$9!'\e(B
+\e$B$3$NJQ?t$OMWAG$,>e$K5s$2$i$l$?7?$N%j%9%H$G$"$k;v$b$G$-$^$9!#$3$l$ONc$G$9\e(B:
 
 @lisp
 (setq gnus-signature-limit
       '(200.0 "^---*Forwarded article"))
 @end lisp
 
-\e$B$3$l$O=pL>J,N%J*$N8e$K\e(B 200 \e$B$rD6$($k9T$+!"=pL>J,N%J*$N8e$NJ8>O$,@55,I=8=\e(B
-@samp{^---*Forwarded article} \e$B$K9gCW$9$l$P!"7k6I$=$l$O=pL>$G$O$J$$$H$$$&;v\e(B
-\e$B$G$9!#\e(B
-
+\e$B$3$l$O=pL>J,N%J*$N8e$K\e(B 200 \e$B$rD6$($k9T$+!"=pL>J,N%J*$N8e$NJ8>O$,@55,I=\e(B
+\e$B8=\e(B @samp{^---*Forwarded article} \e$B$K9gCW$9$l$P!"7k6I$=$l$O=pL>$G$O$J$$$H\e(B
+\e$B$$$&;v$G$9!#\e(B
 
 @node Article Miscellania
 @subsection \e$B5-;v$$$m$$$m\e(B
@@ -7061,13 +7609,11 @@ son-of-RFC 1036 \e$B$G;X<($5$l$F$$$kI8=`$N\e(B @samp{^-- $} \e$B$G$9!#$7$+$7!"B?$/$
 @item A t
 @kindex A t (Summary)
 @findex gnus-article-babel
-\e$B5-;v$r$"$k8@8l$+$iJL$N$b$N$XJQ49$7$^$9!#\e(B
-Translate the article from one language to another
-(@code{gnus-article-babel}).
+\e$B5-;v$r$"$k8@8l$+$iJL$N$b$N$XJQ49$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-babel})\e$B!#\e(B
 
 @end table
 
-
 @c node `MIME Commands' and node `Charsets' is stripped, which is
 @c pGnus specific.
 
@@ -7079,16 +7625,15 @@ Translate the article from one language to another
 @item A P
 @cindex PostScript
 @cindex printing
-@kindex A P \e$B!J35N,!K\e(B
+@kindex A P (\e$B35N,\e(B)
 @vindex gnus-ps-print-article
 @findex gnus-summary-print-article
-\e$B5-;v%P%C%U%!$N%]%9%H%9%/%j%W%H\e(B (PostScript) \e$B%$%a!<%8$r:n@.$7$F0u:~$7$^$9\e(B
-(@code{gnus-summary-print-article})\e$B!#\e(B@code{gnus-ps-print-hook} \e$B$,%P%C%U%!\e(B
-\e$B$r0u:~$9$kD>A0$K<B9T$5$l$k$G$7$g$&!#\e(B
+\e$B5-;v%P%C%U%!$N%]%9%H%9%/%j%W%H\e(B (PostScript) \e$B%$%a!<%8$r:n@.$7$F0u:~$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-print-article})\e$B!#\e(B@code{gnus-ps-print-hook} \e$B$,%P%C\e(B
+\e$B%U%!$r0u:~$9$kD>A0$K<B9T$5$l$k$G$7$g$&!#\e(B
 
 @end table
 
-
 @node Summary Sorting
 @section \e$B35N,$NJB$SBX$(\e(B
 @cindex summary sorting
@@ -7099,27 +7644,27 @@ Translate the article from one language to another
 @table @kbd
 
 @item C-c C-s C-n
-@kindex C-c C-s C-n \e$B!J35N,!K\e(B
+@kindex C-c C-s C-n (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-number
 \e$B5-;vHV9f$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-number})\e$B!#\e(B
 
 @item C-c C-s C-a
-@kindex C-c C-s C-a \e$B!J35N,!K\e(B
+@kindex C-c C-s C-a (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-author
 \e$BCx<T$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-author})\e$B!#\e(B
 
 @item C-c C-s C-s
-@kindex C-c C-s C-s \e$B!J35N,!K\e(B
+@kindex C-c C-s C-s (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-subject
 \e$BI=Bj$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-subject})\e$B!#\e(B
 
 @item C-c C-s C-d
-@kindex C-c C-s C-d \e$B!J35N,!K\e(B
+@kindex C-c C-s C-d (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-date
 \e$BF|IU$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-date})\e$B!#\e(B
 
 @item C-c C-s C-l
-@kindex C-c C-s C-l \e$B!J35N,!K\e(B
+@kindex C-c C-s C-l (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-lines
 \e$B9T$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-lines})\e$B!#\e(B
 
@@ -7129,7 +7674,7 @@ Translate the article from one language to another
 \e$B5-;v$ND9$5$GJB$S49$($^$9\e(B (@code{gnus-summary-sort-by-chars})\e$B!#\e(B
 
 @item C-c C-s C-i
-@kindex C-c C-s C-i \e$B!J35N,!K\e(B
+@kindex C-c C-s C-i (\e$B35N,\e(B)
 @findex gnus-summary-sort-by-score
 \e$B%9%3%"$K$h$C$FJB$SBX$($^$9\e(B (@code{gnus-summary-sort-by-score})\e$B!#\e(B
 @end table
@@ -7140,7 +7685,6 @@ Translate the article from one language to another
 \e$B$J$C$F$$$k$+$b$7$l$^$;$s!#%9%l%C%I$r;H$&;v$r@Z$jBX$($k$K$O\e(B @kbd{T T} \e$B$r\e(B
 \e$BBG$C$F$/$@$5$$\e(B (@pxref{Thread Commands})\e$B!#\e(B
 
-
 @node Finding the Parent
 @section \e$B?F5-;v$rC5$9\e(B
 @cindex parent articles
@@ -7148,78 +7692,78 @@ Translate the article from one language to another
 
 @table @kbd
 @item ^
-@kindex ^ \e$B!J35N,!K\e(B
+@kindex ^ (\e$B35N,\e(B)
 @findex gnus-summary-refer-parent-article
 \e$B8=:_$N5-;v$N?F5-;v$rFI$_$?$/$F!"$=$l$,35N,%P%C%U%!$KI=<($5$l$F$$$J$$$/$F\e(B
-\e$B$b!"$*$=$i$/$=$l$O2DG=$G$7$g$&!#$H$$$&$N$O!"8=:_$N%0%k!<%W$,\e(B @sc{nntp}
-\e$B$G<hF@$5$l$F$$$F!"?F$,$^$@4|8B>C5n$5$l$F$$$J$$>e!"8=:_$N5-;v$N\e(B
-@code{References} \e$B$,$V$A2u$5$l$F$$$J$1$l$P!"$?$@!"\e(B@kbd{^} \e$B$+\e(B @kbd{A r}
-\e$B$r2!$;$PNI$$$@$1$G$9\e(B (@code{gnus-summary-refer-parent-article})\e$B!#$b$7A4\e(B
-\e$B$F$,>e<j$/9T$1$P!"?F5-;v$r<hF@$G$-$k$G$7$g$&!#$b$7?F5-;v$,4{$K35N,%P%C%U%!\e(B
-\e$B$KI=<($5$l$F$$$k$N$G$"$l$P!"%]%$%s%H$,$=$N5-;v$K0\F0$9$k$G$7$g$&!#\e(B
+\e$B$b!"$*$=$i$/$=$l$O2DG=$G$7$g$&!#$H$$$&$N$O!"8=:_$N%0%k!<%W\e(B
+\e$B$,\e(B @sc{nntp} \e$B$G<hF@$5$l$F$$$F!"?F$,$^$@4|8B>C5n$5$l$F$$$J$$>e!"8=:_$N5-\e(B
+\e$B;v$N\e(B @code{References} \e$B$,$V$A2u$5$l$F$$$J$1$l$P!"$?$@!"\e(B
+@kbd{^} \e$B$+\e(B @kbd{A r} \e$B$r2!$;$PNI$$$@$1$G\e(B
+\e$B$9\e(B (@code{gnus-summary-refer-parent-article})\e$B!#$b$7A4$F$,>e<j$/9T$1$P!"\e(B
+\e$B?F5-;v$r<hF@$G$-$k$G$7$g$&!#$b$7?F5-;v$,4{$K35N,%P%C%U%!$KI=<($5$l$F$$$k\e(B
+\e$B$N$G$"$l$P!"%]%$%s%H$,$=$N5-;v$K0\F0$9$k$G$7$g$&!#\e(B
 
 \e$B@5$N?tCM@\F,0z?t$rM?$($i$l$l$P!"AD@h$^$GB?$/$N5-;v$rLa$C$F<hF@$7$^$9!#Ii\e(B
 \e$B$N?t;z@\F,0z?t$,M?$($i$l$l$P!"$=$NAD@h$N5-;v$@$1$r<hF@$7$^$9!#$G$9$+$i!"\e(B
 @kbd{3 ^} \e$B$H$9$l$P!"\e(Bgnus \e$B$O8=:_$N5-;v$N?F$H!"ADIcJl$H!"A=ADIcJl$r<hF@$7\e(B
-\e$B$^$9!#\e(B @kbd{-3 ^} \e$B$H$9$l$P!"\e(Bgnus \e$B$O8=:_$N5-;v$NA=ADIcJl$@$1$r<hF@$7$^$9!#\e(B
+\e$B$^$9!#\e(B@kbd{-3 ^} \e$B$H$9$l$P!"\e(Bgnus \e$B$O8=:_$N5-;v$NA=ADIcJl$@$1$r<hF@$7$^$9!#\e(B
 
-@item A R \e$B!J35N,!K\e(B
+@item A R (\e$B35N,\e(B)
 @findex gnus-summary-refer-references
-@kindex A R \e$B!J35N,!K\e(B
-\e$B5-;v$N\e(B @code{References} \e$BMs$K$"$kA4$F$N5-;v$r<hF@$7$^$9\e(B
-(@code{gnus-summary-refer-references})\e$B!#\e(B
+@kindex A R (\e$B35N,\e(B)
+\e$B5-;v$N\e(B @code{References} \e$BMs$K$"$kA4$F$N5-;v$r<hF@$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-refer-references})\e$B!#\e(B
 
-@item A T \e$B!J35N,!K\e(B
+@item A T (\e$B35N,\e(B)
 @findex gnus-summary-refer-thread
-@kindex A T \e$B!J35N,!K\e(B
-\e$B8=:_$N5-;v$,=P$F$-$F$$$k%9%l%C%I$N!"40A4$J%9%l%C%I$rI=<($7$^$9\e(B
-(@code{gnus-summary-refer-thread})\e$B!#$3$NL?Na$OF0:n$9$k$?$a$K8=:_$N%0%k!<\e(B
-\e$B%W$N$9$Y$F$N%X%C%@!<$r<hF@$7$J$1$l$P$J$j$^$;$s$N$G!"IaDL$O>/$7;~4V$,$+$+\e(B
-\e$B$j$^$9!#$b$7!"$3$l$r$7$P$7$P9T$&$N$G$"$l$P!"\e(B
+@kindex A T (\e$B35N,\e(B)
+\e$B8=:_$N5-;v$,=P$F$-$F$$$k%9%l%C%I$N!"40A4$J%9%l%C%I$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-refer-thread})\e$B!#$3$NL?Na$OF0:n$9$k$?$a$K8=:_$N%0\e(B
+\e$B%k!<%W$N$9$Y$F$N%X%C%@!<$r<hF@$7$J$1$l$P$J$j$^$;$s$N$G!"IaDL$O>/$7;~4V$,\e(B
+\e$B$+$+$j$^$9!#$b$7!"$3$l$r$7$P$7$P9T$&$N$G$"$l$P!"\e(B
 @code{gnus-fetch-old-headers} \e$B$r\e(B @code{invisible} \e$B$K@_Dj$9$k$3$H$r9M$($?\e(B
 \e$B$[$&$,NI$$$G$7$g$&\e(B (@pxref{Filling In Threads})\e$B!#$3$l$OIaDL$O;k3PE*$J8z\e(B
 \e$B2L$O$"$j$^$;$s$,!"$3$NL?Na$NF0:n$r$+$J$jB.$/$9$k$G$7$g$&!#$b$A$m$s!"%0%k!<\e(B
 \e$B%W$KF~$k$N$O>/$7CY$/$J$j$^$9!#\e(B
 
 @vindex gnus-refer-thread-limit
-\e$BJQ?t\e(B @code{gnus-refer-thread-limit} \e$B$O$3$NL?Na$r<B9T$9$k$H$-$K$I$N$/$i$$8E\e(B
-\e$B$$!J$9$J$o$A!"8=:_$N5-;v$G:G=i$KI=<($5$l$?$h$j$bA0$N5-;v!K%X%C%@!<$r<hF@$9\e(B
-\e$B$k$+$r;XDj$7$^$9!#%G%#%U%)%k%H$O\e(B 200 \e$B$G$9!#$b$7\e(B @code{t} \e$B$G$"$l$P!"<hF@2D\e(B
-\e$BG=$J$9$Y$F$N%X%C%@!<$r<hF@$7$^$9!#$3$NJQ?t$OL?Na\e(B @code{A T} \e$B$K?tCM@\F,0z?t\e(B
-\e$B$rM?$($k;v$K$h$j>e=q$-$9$k;v$,$G$-$^$9!#\e(B
+\e$BJQ?t\e(B @code{gnus-refer-thread-limit} \e$B$O$3$NL?Na$r<B9T$9$k$H$-$K$I$N$/$i$$\e(B
+\e$B8E$$\e(B (\e$B$9$J$o$A!"8=:_$N5-;v$G:G=i$KI=<($5$l$?$h$j$bA0$N5-;v\e(B) \e$B%X%C%@!<$r<h\e(B
+\e$BF@$9$k$+$r;XDj$7$^$9!#%G%#%U%)%k%H$O\e(B 200 \e$B$G$9!#$b$7\e(B @code{t} \e$B$G$"$l$P!"\e(B
+\e$B<hF@2DG=$J$9$Y$F$N%X%C%@!<$r<hF@$7$^$9!#$3$NJQ?t$OL?Na\e(B @code{A T} \e$B$K?tCM\e(B
+\e$B@\F,0z?t$rM?$($k;v$K$h$j>e=q$-$9$k;v$,$G$-$^$9!#\e(B
 
-@item M-^ \e$B!J35N,!K\e(B
+@item M-^ (\e$B35N,\e(B)
 @findex gnus-summary-refer-article
-@kindex M-^ \e$B!J35N,!K\e(B
+@kindex M-^ (\e$B35N,\e(B)
 @cindex Message-ID
 @cindex fetching by Message-ID
 \e$B$I$N%0%k!<%W$KB0$7$F$$$k$+$K4X$o$i$:!"G$0U$N5-;v$r\e(B @sc{nntp} \e$B%5!<%P!<$K\e(B
-\e$B?R$M$k;v$,$G$-$^$9!#\e(B@kbd{M-^} (@code{gnus-summary-refer-article}) \e$B$O\e(B
-@code{Message-ID}\e$B!"$=$l$O$"$ND9$/!"$J$+$J$+FI$`;v$N$G$-$J$$\e(B
-@samp{<38o6up$6f2@@hymir.ifi.uio.no>} \e$B$N$h$&$J;2>H$r$"$J$?$K?R$M$^$9!#\e(B
+\e$B?R$M$k;v$,$G$-$^$9!#\e(B
+@kbd{M-^} (@code{gnus-summary-refer-article}) \e$B$O\e(B @code{Message-ID}\e$B!"$=$l\e(B
+\e$B$O$"$ND9$/!"$J$+$J$+FI$`;v$N$G$-$J\e(B
+\e$B$$\e(B @samp{<38o6up$6f2@@hymir.ifi.uio.no>} \e$B$N$h$&$J;2>H$r$"$J$?$K?R$M$^$9!#\e(B
 \e$B$"$J$?$O$9$Y$F$r@53N$KBG$A9~$^$J$1$l$P$J$j$^$;$s!#;DG0$J$,$i!"$"$$$^$$$J\e(B
 \e$B8!:w$O$G$-$J$$$N$G$9!#\e(B
 @end table
 
-\e$B%K%e!<%9$G$J$$A*BrJ}K!$+$i\e(B @code{Message-ID} \e$B$G<hF@$9$k$H$-$K$O8=:_$NA*Br\e(B
-\e$BJ}K!$,;H$o$l$^$9$,!"$3$NL?Na$K@\F,0z?t$rM?$($k;v$G$3$l$r>e=q$-$9$k;v$,$G$-\e(B
-\e$B$^$9!#\e(B
+\e$B%K%e!<%9$G$J$$A*BrJ}K!$+$i\e(B @code{Message-ID} \e$B$G<hF@$9$k$H$-$K$O8=:_$NA*\e(B
+\e$BBrJ}K!$,;H$o$l$^$9$,!"$3$NL?Na$K@\F,0z?t$rM?$($k;v$G$3$l$r>e=q$-$9$k;v$,\e(B
+\e$B$G$-$^$9!#\e(B
 
 @vindex gnus-refer-article-method
-\e$B$b$7$"$J$?$NFI$s$G$$$k%0%k!<%W$,\e(B @code{Message-ID} \e$B$G$N<hF@$,$"$^$jNI$/$G\e(B
-\e$B$-$J$$$h$&$J%0%k!<%W!J\e(B@code{nnspool} \e$B$J$I!K$G$"$k>l9g!"\e(B
-@code{gnus-refer-article-method} \e$B$r\e(B @sc{nntp} \e$B$K@_Dj$9$k;v$,$G$-$^$9!#$*$=\e(B
-\e$B$i$/!"$"$J$?$,2qOC$7$F$$$k\e(B @sc{nntp} \e$B%5!<%P!<$,$"$J$?$NFI$s$G$$$k%9%W!<%k\e(B
-\e$B$r99?7$7$F$$$k$HHs>o$KNI$$$G$7$g$&!#$7$+$7!"$=$l$O$I$&$7$F$bI,MW$J$o$1$G$O\e(B
-\e$B$"$j$^$;$s!#\e(B
+\e$B$b$7$"$J$?$NFI$s$G$$$k%0%k!<%W$,\e(B @code{Message-ID} \e$B$G$N<hF@$,$"$^$jNI$/\e(B
+\e$B$G$-$J$$$h$&$J%0%k!<%W\e(B (@code{nnspool} \e$B$J$I\e(B) \e$B$G$"$k>l9g!"\e(B
+@code{gnus-refer-article-method} \e$B$r\e(B @sc{nntp} \e$B$K@_Dj$9$k;v$,$G$-$^$9!#$*\e(B
+\e$B$=$i$/!"$"$J$?$,2qOC$7$F$$$k\e(B @sc{nntp} \e$B%5!<%P!<$,$"$J$?$NFI$s$G$$$k%9%W!<\e(B
+\e$B%k$r99?7$7$F$$$k$HHs>o$KNI$$$G$7$g$&!#$7$+$7!"$=$l$O$I$&$7$F$bI,MW$J$o$1\e(B
+\e$B$G$O$"$j$^$;$s!#\e(B
 
-It can also be a list of select methods, as well as the special symbol
-@code{current}, which means to use the current select method.  If it
-is a list, Gnus will try all the methods in the list until it finds a
-match.
+\e$B$=$l$OA*BrJ}K!$N%j%9%H$G$"$k$3$H$b$G$-!"FCJL$J%7%s%\%k\e(B @code{current} \e$B$G\e(B
+\e$B$"$k$3$H$b$G$-$^$9!#8e<T$O!"8=:_$NA*BrJ}K!$r;H$&$H$$$&0UL#$G$9!#%j%9%H$N\e(B
+\e$B>l9g$O!"\e(Bgnus \e$B$O9g$&$b$N$rH/8+$9$k$^$G%j%9%H$NA4$F$NJ}K!$r;n$7$^$9!#\e(B
 
-Here's an example setting that will first try the current method, and
-then ask Deja if that fails:
+\e$B$3$l$O8=:_$NJ}K!$r;n$7$F!"$=$l$,<:GT$7$?>l9g$K$O\e(B Deja \e$B$K?V$/@_Dj$NNc$G$9\e(B:
 
 @lisp
 (setq gnus-refer-article-method
@@ -7228,11 +7772,11 @@ then ask Deja if that fails:
 @end lisp
 
 \e$B$[$H$s$I$N%a!<%k%P%C%/%(%s%I$O\e(B @code{Message-ID} \e$B$G$N<hF@$,2DG=$G$9$,!"\e(B
-\e$B$"$^$jM%2m$JJ}K!$G$d$C$F$$$k$o$1$G$O$"$j$^$;$s!#\e(B@code{nnmbox} \e$B$H\e(B
-@code{nnbabyl} \e$B$O$I$N%0%k!<%W$+$i$N5-;v$b0LCV$rF@$k$3$H$,$G$-$^$9$,!"\e(B
-@code{nnml} \e$B$H\e(B @code{nnfolder} \e$B$O8=:_$N%0%k!<%W$KEj9F$7$?5-;v$N0LCV$7$+\e(B
-\e$BF@$k;v$,$G$-$^$;$s!#!J$=$NB>$N$b$N$O;~4V$,$+$+$j$9$.$^$9!#!K\e(B@code{nnmh}
-\e$B$G$OA4$/IT2DG=$G$9!#\e(B
+\e$B$"$^$jM%2m$JJ}K!$G$d$C$F$$$k$o$1$G$O$"$j$^$;$s!#\e(B
+@code{nnmbox} \e$B$H\e(B @code{nnbabyl} \e$B$O$I$N%0%k!<%W$+$i$N5-;v$b0LCV$rF@$k$3$H\e(B
+\e$B$,$G$-$^$9$,!"\e(B@code{nnml} \e$B$H\e(B @code{nnfolder} \e$B$O8=:_$N%0%k!<%W$KEj9F$7$?\e(B
+\e$B5-;v$N0LCV$7$+F@$k;v$,$G$-$^$;$s!#$=$NB>$N$b$N$O;~4V$,$+$+$j$9$.$^$9!#\e(B)
+@code{nnmh} \e$B$G$OA4$/IT2DG=$G$9!#\e(B
 
 @node Alternative Approaches
 @section \e$BBeBX<jCJ\e(B
@@ -7242,54 +7786,58 @@ then ask Deja if that fails:
 \e$B>/$7$NA*Br;h$rM?$($F$"$j$^$9!#\e(B
 
 @menu
-* Pick and Read::               \e$B$^$:!"5-;v$K0u$rIU$1$F!"$=$l$+$iFI$`\e(B
-* Binary Groups::               \e$B$9$Y$F$N5-;v$r<+F0\e(B-\e$BI|9f2=$9$k\e(B
+* Pick and Read:: \e$B$^$:!"5-;v$K0u$rIU$1$F!"$=$l$+$iFI$`\e(B
+* Binary Groups:: \e$B$9$Y$F$N5-;v$r<+F0\e(B-\e$BI|9f2=$9$k\e(B
 @end menu
 
-
 @node Pick and Read
 @subsection \e$BA*$s$GFI$`\e(B
 @cindex pick and read
 
-\e$B$$$/$D$+$N%K%e!<%9%j!<%@!<!J\e(B@code{nn} \e$B$d!"$"$N$)!"\e(BVM/CMS \e$B$G$N\e(B
-@code{Netnews} \e$B$J$I!K$O\e(B2\e$BAj$NFI$`$?$a$N3&LL$r;H$$$^$9!#MxMQ<T$O$^$:35N,%P%C\e(B
-\e$B%U%!$GFI$_$?$$5-;v$K0u$rIU$1$^$9!#$=$l$+$i!"5-;v%P%C%U%!$@$1$rI=<($7$F5-;v\e(B
-\e$B$rFI$_$^$9!#\e(B
+\e$B$$$/$D$+$N%K%e!<%9%j!<%@!<\e(B (@code{nn} \e$B$d!"$"$N$)!"\e(BVM/CMS \e$B$G\e(B
+\e$B$N\e(B @code{Netnews} \e$B$J$I\e(B) \e$B$OFsAj$NFI$`$?$a$N3&LL$r;H$$$^$9!#MxMQ<T$O$^$:35\e(B
+\e$BN,%P%C%U%!$GFI$_$?$$5-;v$K0u$rIU$1$^$9!#$=$l$+$i!"5-;v%P%C%U%!$@$1$rI=<(\e(B
+\e$B$7$F5-;v$rFI$_$^$9!#\e(B
 
 @vindex gnus-pick-mode
 @kindex M-x gnus-pick-mode
 Gnus \e$B$O$3$l$r$9$k$?$a$N35N,%P%C%U%!%^%$%J!<%b!<%I$rDs6!$7$^$9!=!=\e(B
-@code{gnus-pick-mode} \e$B$G$9!#$3$l$O4pK\E*$K$O4JC1$K0u$rIU$1$i$l$k$h$&$K>/$7\e(B
-\e$B$N%W%m%;%90uL?Na$,#1BG80L?Na$K$J$j!"35N,%P%C%U%!$X@Z$jBX$($k$?$a$NDI2CL?Na\e(B
-\e$B$r\e(B1\e$B$DDs6!$7$^$9!#\e(B
+@code{gnus-pick-mode} \e$B$G$9!#$3$l$O4pK\E*$K$O4JC1$K0u$rIU$1$i$l$k$h$&$K>/\e(B
+\e$B$7$N%W%m%;%90uL?Na$,0lBG80L?Na$K$J$j!"35N,%P%C%U%!$X@Z$jBX$($k$?$a$NDI2C\e(B
+\e$BL?Na$r0l$DDs6!$7$^$9!#\e(B
 
-\e$B$3$l$,\e(B pick mode \e$B$r;H$C$?$H$-$K;HMQ2DG=$J%-!<$G$9!'\e(B
+\e$B$3$l$,\e(B pick mode \e$B$r;H$C$?$H$-$K;HMQ2DG=$J%-!<$G$9\e(B:
 
 @table @kbd
 @item .
-@kindex . \e$B!JA*Br!K\e(B
+@kindex . (\e$BA*Br\e(B)
 @findex gnus-pick-article-or-thread
-\e$B8=:_$N9T$N5-;v$+%9%l%C%I$rA*Br$7$^$9\e(B
-(@code{gnus-pickd-article-or-thread})\e$B!#$b$7JQ?t\e(B
-@code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G\e(B
-\e$B=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%IA4BN$rA*Br$7$^$9!#$=$&$G$J$1$l$P!"$=$l$O\e(B
-\e$B$=$N5-;v$@$1$rA*Br$7$^$9!#$b$7?tCM@\F,0z?t$rM?$($i$l$l$P$=$N%9%l%C%I$+5-\e(B
-\e$B;v$X$H@8$s$G$$$-!"$=$l$rA*Br$7$^$9!#\e(B (\e$B9T?t$OIaDL$O35N,A*Br9T$N:G=i$KI=<(\e(B
-\e$B$5$l$F$$$^$9!#\e(B)
+\e$B8=:_$N9T$N5-;v$+%9%l%C%I$rA*Br$7$^\e(B
+\e$B$9\e(B (@code{gnus-pickd-article-or-thread})\e$B!#$b$7JQ\e(B
+\e$B?t\e(B @code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I\e(B
+\e$B$N:G=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%IA4BN$rA*Br$7$^$9!#$=$&$G$J$1$l$P!"$=\e(B
+\e$B$l$O$=$N5-;v$@$1$rA*Br$7$^$9!#$b$7?tCM@\F,0z?t$rM?$($i$l$l$P$=$N%9%l%C%I\e(B
+\e$B$+5-;v$X$H@8$s$G$$$-!"$=$l$rA*Br$7$^$9!#\e(B(\e$B9T?t$OIaDL$O35N,A*Br9T$N:G=i$K\e(B
+\e$BI=<($5$l$F$$$^$9!#\e(B)
 
 @item SPACE
-@kindex SPACE\e$B!JA*Br!K\e(B
+@kindex SPACE (\e$BA*Br\e(B)
 @findex gnus-pick-next-page
 \e$B35N,%P%C%U%!$r0l%Z!<%8<!$K%9%/%m!<%k$7$^$9\e(B (@code{gnus-pick-next-page})\e$B!#\e(B
 \e$B$b$7%P%C%U%!$N:G8e$G$"$l$P!"A*Br5-;v$rFI$_;O$a$^$9!#\e(B
 
 @item u
-@kindex u \e$B!JA*Br!K\e(B
+@kindex u (\e$BA*Br\e(B)
 @findex gnus-pick-unmark-article-or-thread
-\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^$9\e(B (@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ?t\e(B @code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G=i$G;H$o$l$l$P%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O$=$l$O5-;v$@$1$rL$A*Br$K$7$^$9!#$=$N9T$K$"$k%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K$3$N%-!<$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
+\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ\e(B
+\e$B?t\e(B @code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I\e(B
+\e$B$N:G=i$G;H$o$l$l$P%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O$=$l$O5-;v$@\e(B
+\e$B$1$rL$A*Br$K$7$^$9!#$=$N9T$K$"$k%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K$3$N%-!<\e(B
+\e$B$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
 
 @item RET
-@kindex RET \e$B!JA*Br!K\e(B
+@kindex RET (\e$BA*Br\e(B)
 @findex gnus-pick-start-reading
 @vindex gnus-pick-display-summary
 \e$BA*Br$5$l$?5-;v$rFI$_;O$a$^$9\e(B (@code{gnus-pick-start-reading})\e$B!#@\F,0z?t\e(B
@@ -7300,11 +7848,11 @@ Gnus \e$B$O$3$l$r$9$k$?$a$N35N,%P%C%U%!%^%$%J!<%b!<%I$rDs6!$7$^$9!=!=\e(B
 @end table
 
 \e$BA4$F$NIaDL$N35N,%b!<%IL?Na$OA*Br%b!<%I\e(B (pick-mode)\e$B$G$b;HMQ2DG=$G$9$,!"\e(B
-@kbd{u} \e$B$ONc30$G$9!#$7$+$7!"F1$84X?t\e(B
-@code{gnus-summary-tick-article-forward} \e$B$K3d$jEv$F$i$l$F$$$k\e(B @kbd{!} \e$B$r\e(B
-\e$B;H$&;v$,$G$-$^$9!#\e(B
+@kbd{u} \e$B$ONc30$G$9!#$7$+$7!"F1$84X\e(B
+\e$B?t\e(B @code{gnus-summary-tick-article-forward} \e$B$K3d$jEv$F$i$l$F$$\e(B
+\e$B$k\e(B @kbd{!} \e$B$r;H$&;v$,$G$-$^$9!#\e(B
 
-\e$B$3$l$,NI$$9M$($@$H;W$&$N$G$"$l$P!"<!$N$h$&$K$9$k;v$,$G$-$^$9!'\e(B
+\e$B$3$l$,NI$$9M$($@$H;W$&$N$G$"$l$P!"<!$N$h$&$K$9$k;v$,$G$-$^$9\e(B:
 
 @lisp
 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
@@ -7316,11 +7864,11 @@ Gnus \e$B$O$3$l$r$9$k$?$a$N35N,%P%C%U%!%^%$%J!<%b!<%I$rDs6!$7$^$9!=!=\e(B
 
 @vindex gnus-summary-pick-line-format
 pick \e$B%b!<%I$G$N35N,9T$NMM<0$OI8=`$NMM<0$H$O>/$70c$$$^$9!#$=$l$>$l$N9T$N\e(B
-\e$B:G=i$K9T?t$,I=<($5$l$^$9!#\e(B Pick \e$B%b!<%I$N9T$NMM<0$OJQ?t\e(B
-@code{gnus-summary-pick-line-format} \e$B$G@)8f$5$l$^$9\e(B (@pxref{Formatting
-Variables})\e$B!#$3$l$O\e(B @code{gnus-summary-line-format} \e$B$HF1$8MM<0;XDj$r<u$1\e(B
-\e$BIU$1$^$9\e(B (@pxref{Summary Buffer Lines})\e$B!#\e(B
-
+\e$B:G=i$K9T?t$,I=<($5$l$^$9!#\e(BPick \e$B%b!<%I$N9T$NMM<0$OJQ\e(B
+\e$B?t\e(B @code{gnus-summary-pick-line-format} \e$B$G@)8f$5$l$^\e(B
+\e$B$9\e(B (@pxref{Formatting Variables})\e$B!#$3$l\e(B
+\e$B$O\e(B @code{gnus-summary-line-format} \e$B$HF1$8MM<0;XDj$r<u$1IU$1$^\e(B
+\e$B$9\e(B (@pxref{Summary Buffer Lines})\e$B!#\e(B
 
 @node Binary Groups
 @subsection \e$B%P%$%J%j!<%0%k!<%W\e(B
@@ -7328,33 +7876,32 @@ Variables})\e$B!#$3$l$O\e(B @code{gnus-summary-line-format} \e$B$HF1$8MM<0;XDj$r<u$
 
 @findex gnus-binary-mode
 @kindex M-x gnus-binary-mode
-\e$B$b$7B?$/$N;~4V$r%P%$%J%j!<%0%k!<%W\e(B (binary group) \e$B$G2a$4$7$F$$$k$N$J$i!"$$\e(B
-\e$B$D$b\e(B @kbd{X u}, @kbd{n}, @kbd{RET} \e$B$rC!$/$N$,7y$K$J$C$F$$$k$G$7$g$&!#\e(B
-@kbd{M-x gnus-binary-mode} \e$B$O5-;v$rIaDL$NJ}K!$GI=<($9$kBe$o$j$K!"IaDL$N\e(B
-gnus \e$B$N5-;vA*Br4X?t$r5-;v72$r\e(B uudecode \e$B$7$=$N7k2L$rI=<($9$k$h$&$KJQ99$9$k!"\e(B
-\e$B35N,%P%C%U%!$N$?$a$N%^%$%J!<%b!<%I$G$9!#\e(B
+\e$B$b$7B?$/$N;~4V$r%P%$%J%j!<%0%k!<%W\e(B (binary group) \e$B$G2a$4$7$F$$$k$N$J$i!"\e(B
+\e$B$$$D$b\e(B @kbd{X u}, @kbd{n}, @kbd{RET} \e$B$rC!$/$N$,7y$K$J$C$F$$$k$G$7$g$&!#\e(B
+@kbd{M-x gnus-binary-mode} \e$B$O5-;v$rIaDL$NJ}K!$GI=<($9$kBe$o$j$K!"IaDL\e(B
+\e$B$N\e(B gnus \e$B$N5-;vA*Br4X?t$r5-;v72$r\e(B uudecode \e$B$7$=$N7k2L$rI=<($9$k$h$&$KJQ99\e(B
+\e$B$9$k!"35N,%P%C%U%!$N$?$a$N%^%$%J!<%b!<%I$G$9!#\e(B
 
 @kindex g (\e$B%P%$%J%j!<\e(B)
 @findex gnus-binary-show-article
-\e$B<B:]$O!"$3$N%b!<%I$K$7$?$H$-$K!"8=<B$N5-;v$r8+$k$?$a$NM#0l$NL?Na$,\e(B
-@kbd{g} \e$B$G$9\e(B (@code{gnus-binary-show-article})\e$B!#\e(B
+\e$B<B:]$O!"$3$N%b!<%I$K$7$?$H$-$K!"8=<B$N5-;v$r8+$k$?$a$NM#0l$NL?Na\e(B
+\e$B$,\e(B @kbd{g} \e$B$G$9\e(B (@code{gnus-binary-show-article})\e$B!#\e(B
 
 @vindex gnus-binary-mode-hook
 @code{gnus-binary-mode-hook} \e$B$,%P%$%J%j!<%^%$%J!<%b!<%I%P%C%U%!$G8F$P$l\e(B
 \e$B$^$9!#\e(B
 
-
 @node Tree Display
 @section \e$BLZI=<(\e(B
 @cindex trees
 
 @vindex gnus-use-trees
-\e$B$b$7IaDL$N\e(B gnus \e$B$N35N,I=<($r9%$-$G$J$$$J$i$P!"\e(B@code{gnus-use-trees} \e$B$r\e(B
-@code{t} \e$B$K@_Dj$7$F$_$k$HNI$$$+$b$7$l$^$;$s!#$3$l$O!J%G%#%U%)%k%H$G!KDI2C\e(B
-\e$B$N\e(B @dfn{\e$BLZ%P%C%U%!\e(B} (tree buffer) \e$B$r:n@.$7$^$9!#LZ%P%C%U%!$G$O$9$Y$F$N35N,\e(B
-\e$B%b!<%IL?Na$r<B9T$9$k;v$,$G$-$^$9!#\e(B
+\e$B$b$7IaDL$N\e(B gnus \e$B$N35N,I=<($r9%$-$G$J$$$J$i$P!"\e(B
+@code{gnus-use-trees} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$F$_$k$HNI$$$+$b$7$l$^$;$s!#$3\e(B
+\e$B$l$O\e(B (\e$B%G%#%U%)%k%H$G\e(B) \e$BDI2C$N\e(B @dfn{\e$BLZ%P%C%U%!\e(B} (tree buffer) \e$B$r:n@.$7$^$9!#\e(B
+\e$BLZ%P%C%U%!$G$O$9$Y$F$N35N,%b!<%IL?Na$r<B9T$9$k;v$,$G$-$^$9!#\e(B
 
-\e$B$b$A$m$s!"LZI=<($r%+%9%?%^%$%:$9$kJQ?t$,>/$7$"$j$^$9!'\e(B
+\e$B$b$A$m$s!"LZI=<($r%+%9%?%^%$%:$9$kJQ?t$,>/$7$"$j$^$9\e(B:
 
 @table @code
 @item gnus-tree-mode-hook
@@ -7374,13 +7921,13 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 
 @item gnus-tree-line-format
 @vindex gnus-tree-line-format
-\e$BLZ$N@a$N$?$a$N%U%)!<%^%C%HJ8;zNs$G$9!#$G$b$3$NL>A0$O>/$78m$C$?L>>N$G$9!=!=\e(B
-\e$B$=$l$O9T$G$O$J$/!"$?$@@a$rDj5A$9$k$@$1$G$9!#%G%#%U%)%k%H$NCM$O\e(B
-@samp{%(%[%3,3n%]%)} \e$B$G!"$=$l$OEj9F<T$NL>A0$N:G=i$N#3J8;z$rI=<($7$^$9!#$9\e(B
-\e$B$Y$F$N@a$,F1$8D9$5$G$"$k$N$O=EMW$G$9$N$G!"\e(B@samp{%4,4n} \e$B$N$h$&$J;XDj$r\e(B
-@emph{\e$B;H$o$J$1$l$P$J$i$J$$\e(B} \e$B$N$G$9!#\e(B
+\e$BLZ$N@a$N$?$a$N%U%)!<%^%C%HJ8;zNs$G$9!#$G$b$3$NL>A0$O>/$78m$C$?L>>N$G\e(B
+\e$B$9!=!=$=$l$O9T$G$O$J$/!"$?$@@a$rDj5A$9$k$@$1$G$9!#%G%#%U%)%k%H$NCM\e(B
+\e$B$O\e(B @samp{%(%[%3,3n%]%)} \e$B$G!"$=$l$OEj9F<T$NL>A0$N:G=i$N;0J8;z$rI=<($7$^$9!#\e(B
+\e$B$9$Y$F$N@a$,F1$8D9$5$G$"$k$N$O=EMW$G$9$N$G!"\e(B@samp{%4,4n} \e$B$N$h$&$J;XDj\e(B
+\e$B$r\e(B @emph{\e$B;H$o$J$1$l$P$J$i$J$$\e(B} \e$B$N$G$9!#\e(B
 
-\e$BM-8z$J;XDj$O!'\e(B
+\e$BM-8z$J;XDj$O\e(B:
 
 @table @samp
 @item n
@@ -7399,15 +7946,15 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 
 @xref{Formatting Variables}\e$B!#\e(B
 
-\e$BI=<($K4XO"$7$?JQ?t$O!'\e(B
+\e$BI=<($K4XO"$7$?JQ?t$O\e(B:
 
 @table @code
 @item gnus-tree-brackets
 @vindex gnus-tree-brackets
-\e$B$3$l$O!XK\Ev$N!Y5-;v$H!X$^$P$i5-;v!Y$K0c$$$rIU$1$k$?$a$K;H$o$l$^$9!#\e(B
-\e$BMM<0$O\e(B @code{((@var{\e$BK\Ev$N3+\e(B} . @var{\e$BK\Ev$NJD\e(B}) (@var{\e$B$^$P$i3+\e(B} . 
-@var{\e$B$^$P$iJD\e(B}) (@var{\e$B56$N3+\e(B} . @var{\e$B56$NJD\e(B}))} \e$B$H$J$C$F$$$F!"%G%#%U%)\e(B
-\e$B%k%H$O\e(B @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))} \e$B$G$9!#\e(B
+\e$B$3$l$O!XK\Ev$N!Y5-;v$H!X$^$P$i5-;v!Y$K0c$$$rIU$1$k$?$a$K;H$o$l$^$9!#MM<0\e(B
+\e$B$O\e(B @code{((@var{\e$BK\Ev$N3+\e(B} . @var{\e$BK\Ev$NJD\e(B}) (@var{\e$B$^$P$i3+\e(B} . @var{\e$B$^$P$iJD\e(B}) (@var{\e$B56$N3+\e(B} . @var{\e$B56$NJD\e(B}))} \e$B$H\e(B
+\e$B$J$C$F$$$F!"%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))} \e$B$G$9!#\e(B
 
 @item gnus-tree-parent-child-edges
 @vindex gnus-tree-parent-child-edges
@@ -7430,13 +7977,13 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 @vindex gnus-generate-tree-function
 @findex gnus-generate-horizontal-tree
 @findex gnus-generate-vertical-tree
-\e$B<B:]$K%9%l%C%I$NLZ$r:n@.$9$k4X?t$G$9!#\e(B2\e$B$D$N4{Dj5A$N;HMQ2DG=$J4X?t$O!'\e(B
-@code{gnus-generate-horizontal-tree} \e$B$H\e(B
-@code{gnus-generate-vertical-tree}\e$B!J$3$l$,%G%#%U%)%k%H$G$9!K$G$9!#\e(B
+\e$B<B:]$K%9%l%C%I$NLZ$r:n@.$9$k4X?t$G$9!#Fs$D$N4{Dj5A$N;HMQ2DG=$J4X?t\e(B
+\e$B$O\e(B: @code{gnus-generate-horizontal-tree} \e$B$H\e(B @code{gnus-generate-vertical-tree} (\e$B$3\e(B
+\e$B$l$,%G%#%U%)%k%H$G$9\e(B) \e$B$G$9!#\e(B
 
 @end table
 
-\e$B?eJ?LZ%P%C%U%!\e(B (horizontal tree buffer) \e$B$NNc$G$9!'\e(B
+\e$B?eJ?LZ%P%C%U%!\e(B (horizontal tree buffer) \e$B$NNc$G$9\e(B:
 
 @example
 @{***@}-(***)-[odd]-[Gun]
@@ -7449,7 +7996,7 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
      \[Gun]-[Jor]
 @end example
 
-\e$BF1$8%9%l%C%I$,?bD>LZ%P%C%U%!\e(B (vertical tree buffer) \e$B$GI=<($5$l$?$b$N$G$9!'\e(B
+\e$BF1$8%9%l%C%I$,?bD>LZ%P%C%U%!\e(B (vertical tree buffer) \e$B$GI=<($5$l$?$b$N$G$9\e(B:
 
 @example
 @{***@}
@@ -7465,7 +8012,7 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 
 \e$B$b$7?eJ?LZ$r;H$C$F$$$k$N$J$i!"35N,%P%C%U%!$GLZ$rNY$j9g$o$;$GI=<($G$-$l$P\e(B
 \e$B4r$7$$$G$7$g$&!#<!$N$h$&$J$b$N$r%U%!%$%k\e(B @file{.gnus.el} \e$B$K2C$($k;v$,$G\e(B
-\e$B$-$^$9!'\e(B
+\e$B$-$^$9\e(B:
 
 @lisp
 (setq gnus-use-trees t
@@ -7482,7 +8029,6 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 
 @xref{Windows Configuration}\e$B!#\e(B
 
-
 @node Mail Group Commands
 @section \e$B%a!<%k%0%k!<%WL?Na\e(B
 @cindex mail group commands
@@ -7490,88 +8036,93 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 \e$B$$$/$D$+$NL?Na$O%a!<%k%0%k!<%W$N$_$G0UL#$r;}$A$^$9!#$3$l$i$NL?Na$,8=:_$N\e(B
 \e$B%0%k!<%W$GM-8z$G$J$$$J$i!"$=$l$i$OBgA{$.$r$7$F$"$J$?$KCN$i$;$k$G$7$g$&!#\e(B
 
-\e$B$9$Y$F$N$3$l$i$NL?Na$O!J4|8B:o=|$HJT=8L?Na$O=|$/!K%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B
-\e$B$r;H$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B$9$Y$F$N$3$l$i$NL?Na$O\e(B (\e$B4|8B:o=|$HJT=8L?Na$O=|$/\e(B) \e$B%W%m%;%9\e(B/\e$B@\F,0z?t$N=,\e(B
+\e$B47$r;H$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @table @kbd
 
 @item B e
-@kindex B e \e$B!J35N,!K\e(B
+@kindex B e (\e$B35N,\e(B)
 @findex gnus-summary-expire-articles
-\e$B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v$r4|8B@Z$l:o=|$7$^$9\e(B
-(@code{gnus-summary-expire-articles})\e$B!#\e(B
+\e$B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v$r4|8B@Z$l:o=|$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-expire-articles})\e$B!#\e(B
 
 @item B M-C-e
-@kindex B M-C-e \e$B!J35N,!K\e(B
+@kindex B M-C-e (\e$B35N,\e(B)
 @findex gnus-summary-expire-articles-now
-\e$B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v:o=|$7$^$9\e(B
-(@code{gnus-summay-expire-articles-now})\e$B!#$3$l$O8=:_$N%0%k!<%W$N3:Ev$9$k\e(B
-@strong{\e$BA4$F\e(B}\e$B$N4|8B:o=|5-;v$O1J1s$K6u$NBg$-$J\e(B @file{/dev/null} \e$B$X>C$(5n$k\e(B
-\e$B$H$$$&;v$G$9!#\e(B
+\e$B%0%k!<%W$N$9$Y$F$N4|8B:o=|2DG=$J5-;v:o=|$7$^\e(B
+\e$B$9\e(B (@code{gnus-summay-expire-articles-now})\e$B!#$3$l$O8=:_$N%0%k!<%W$N3:Ev\e(B
+\e$B$9$k\e(B @strong{\e$BA4$F\e(B}\e$B$N4|8B:o=|5-;v$O1J1s$K6u$NBg$-$J\e(B @file{/dev/null} \e$B$X>C\e(B
+\e$B$(5n$k$H$$$&;v$G$9!#\e(B
 
 @item B DEL
-@kindex B DEL \e$B!J35N,!K\e(B
+@kindex B DEL (\e$B35N,\e(B)
 @findex gnus-summary-delete-article
 @c @icon{gnus-summary-mail-delete}
 \e$B%a!<%k5-;v$r:o=|$7$^$9!#$3$l$O!X$"$J$?$N%G%#%9%/$+$i:#$+$i1J1s$K:o=|$7$F!"\e(B
-\e$BFsEY$HLa$i$J$$!Y$N!X:o=|!Y$G$9!#Cm0U$7$F;H$C$F$/$@$5$$\e(B
-(@code{gnus-summary-delete-article})\e$B!#\e(B
+\e$BFsEY$HLa$i$J$$!Y$N!X:o=|!Y$G$9!#Cm0U$7$F;H$C$F$/$@$5\e(B
+\e$B$$\e(B (@code{gnus-summary-delete-article})\e$B!#\e(B
 
 @item B m
-@kindex B m \e$B!J35N,!K\e(B
+@kindex B m (\e$B35N,\e(B)
 @cindex move mail
 @findex gnus-summary-move-article
-\e$B$"$k%a!<%k%0%k!<%W$+$iJL$N$H$3$m$X5-;v$r0\F0$7$^$9\e(B
-(@code{gnus-summary-move-article})\e$B!#\e(B
+@vindex gnus-preserve-marks
+\e$B$"$k%a!<%k%0%k!<%W$+$iJL$N$H$3$m$X5-;v$r0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-move-article})\e$B!#\e(B@var{gnus-preserve-marks} \e$B$NCM\e(B
+\e$B$,\e(B nil \e$B$G$O$J$$$J$i$P\e(B (\e$B$3$l$,=i4|CM$G$9$,\e(B)\e$B!"%^!<%/$OJ]B8$5$l$^$9!#\e(B
 
 @item B c
-@kindex B c \e$B!J35N,!K\e(B
+@kindex B c (\e$B35N,\e(B)
 @cindex copy mail
 @findex gnus-summary-copy-article
 @c @icon{gnus-summary-mail-copy}
-\e$B$"$k%0%k!<%W!J%a!<%k%0%k!<%W$dB>$N$b$N!K$+$i%a!<%k%0%k!<%W$K5-;v$rJ#@=$7$^\e(B
-\e$B$9\e(B (@code{gnus-summary-copy-article})\e$B!#\e(B
+\e$B$"$k%0%k!<%W\e(B (\e$B%a!<%k%0%k!<%W$dB>$N$b$N\e(B) \e$B$+$i%a!<%k%0%k!<%W$K5-;v$rJ#@=$7\e(B
+\e$B$^$9\e(B (@code{gnus-summary-copy-article})\e$B!#\e(B@var{gnus-preserve-marks} \e$B$NCM\e(B
+\e$B$,\e(B nil \e$B$G$O$J$$$J$i$P\e(B (\e$B$3$l$,=i4|CM$G$9$,\e(B)\e$B!"%^!<%/$OJ]B8$5$l$^$9!#\e(B
 
 @item B B
-@kindex B B \e$B!J35N,!K\e(B
+@kindex B B (\e$B35N,\e(B)
 @cindex crosspost mail
 @findex gnus-summary-crosspost-article
-\e$B8=:_$N5-;v$rB>$N%0%k!<%W$K%/%m%9%]%9%H$7$^$9\e(B
-(@code{gnus-summary-crosspost-article})\e$B!#$3$l$OB>$N%0%k!<%W5-;v$N?7$7$$J#\e(B
-\e$B@=$r:n@.$7!"5-;v$N\e(B Xref \e$BMs$bE,@Z$K99?7$5$l$^$9!#\e(B
+\e$B8=:_$N5-;v$rB>$N%0%k!<%W$K%/%m%9%]%9%H$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-crosspost-article})\e$B!#$3$l$OB>$N%0%k!<%W5-;v$N?7$7\e(B
+\e$B$$J#@=$r:n@.$7!"5-;v$N\e(B Xref \e$BMs$bE,@Z$K99?7$5$l$^$9!#\e(B
 
 @item B i
-@kindex B i \e$B!J35N,!K\e(B
+@kindex B i (\e$B35N,\e(B)
 @findex gnus-summary-import-article
-\e$BG$0U$N%U%!%$%k$r8=:_$N%a!<%k%0%k!<%W$K<h$j9~$_$^$9\e(B
-(@code{gnus-summary-import-article})\e$B!#$"$J$?$O%U%!%$%kL>$H!"\e(B@code{From} \e$BMs\e(B
-\e$B$H\e(B @code{Subject} \e$BMs$NF~NO$rB%$5$l$^$9!#\e(B
+\e$BG$0U$N%U%!%$%k$r8=:_$N%a!<%k%0%k!<%W$K<h$j9~$_$^\e(B
+\e$B$9\e(B (@code{gnus-summary-import-article})\e$B!#$"$J$?$O%U%!%$%kL>$H!"\e(B
+@code{From} \e$BMs$H\e(B @code{Subject} \e$BMs$NF~NO$rB%$5$l$^$9!#\e(B
 
 @item B r
-@kindex B r \e$B!J35N,!K\e(B
+@kindex B r (\e$B35N,\e(B)
 @findex gnus-summary-respool-article
 \e$B%a!<%k5-;v$r%9%W!<%k$7D>$7$^$9\e(B (@code{gnus-summary-move-article})\e$B!#\e(B
 @code{gnus-summary-respool-default-method} \e$B$,:F%9%W!<%k$9$k$H$-$N%G%#%U%)\e(B
 \e$B%k%H$NA*BrJ}K!$H$7$F;HMQ$5$l$^$9!#$3$NJQ?t$O%G%#%U%)%k%H$G\e(B @code{nil} \e$B$G!"\e(B
 \e$B$3$l$O8=:_$N%0%k!<%W$NA*BrJ}K!$,Be$o$j$K;H$o$l$k$H$$$&;v$G$9!#\e(B
+@var{gnus-preserve-marks} \e$B$NCM$,\e(B nil \e$B$G$O$J$$$J$i$P\e(B (\e$B$3$l$,=i4|CM$G$9$,\e(B)\e$B!"\e(B
+\e$B%^!<%/$OJ]B8$5$l$^$9!#\e(B
 
 @item B w
 @itemx e
-@kindex B w \e$B!J35N,!K\e(B
-@kindex e \e$B!J35N,!K\e(B
+@kindex B w (\e$B35N,\e(B)
+@kindex e (\e$B35N,\e(B)
 @findex gnus-summary-edit-article
-@kindex C-c C-c \e$B!J5-;v!K\e(B
+@kindex C-c C-c (\e$B5-;v\e(B)
 \e$B8=:_$N5-;v$rJT=8$7$^$9\e(B (@code{gnus-summary-edit-article})\e$B!#JT=8$r=*N;$7\e(B
-\e$B$FJQ99$r1J1s$K$9$k$?$a$K!"\e(B@kbd{C-c C-c} \e$B$rBG$A$^$9!#$b$7L?Na\e(B
-@kbd{C-c C-c} \e$B$K?tCM@\F,0z?t$rM?$($k$H!"\e(Bgnus \e$B$O5-;v$r:F%O%$%i%$%H$7$^$;\e(B
-\e$B$s!#\e(B
+\e$B$FJQ99$r1J1s$K$9$k$?$a$K!"\e(B@kbd{C-c C-c} \e$B$rBG$A$^$9!#$b$7L?\e(B
+\e$BNa\e(B @kbd{C-c C-c} \e$B$K?tCM@\F,0z?t$rM?$($k$H!"\e(Bgnus \e$B$O5-;v$r:F%O%$%i%$%H$7$^\e(B
+\e$B$;$s!#\e(B
 
 @item B q
-@kindex B q \e$B!J35N,!K\e(B
+@kindex B q (\e$B35N,\e(B)
 @findex gnus-summary-respool-query
 \e$B$b$75-;v$r:F%9%W!<%k$7$?$$$H$-$O!":F%9%W!<%k$r$9$kA0$K$I$N%0%k!<%W$K5-;v\e(B
-\e$B$,0\$k$+$K6=L#$,$"$k$G$7$g$&!#$3$NL?Na$G$=$l$,$o$+$j$^$9\e(B
-(@code{gnus-summary-respool-query})\e$B!#\e(B
+\e$B$,0\$k$+$K6=L#$,$"$k$G$7$g$&!#$3$NL?Na$G$=$l$,$o$+$j$^\e(B
+\e$B$9\e(B (@code{gnus-summary-respool-query})\e$B!#\e(B
 
 @item B t
 @kindex B t (\e$B35N,\e(B)
@@ -7580,27 +8131,30 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 \e$B$7$=$l$,$"$l$PI=<($7$^$9\e(B (@code{gnus-summary-respool-trace})\e$B!#\e(B
 
 @item B p
-@kindex B p \e$B!J35N,!K\e(B
+@kindex B p (\e$B35N,\e(B)
 @findex gnus-summary-article-posted-p
-\e$B0lIt$N?M$O$"$J$?$NEj9F$X$N%U%)%m!<%"%C%W$r$9$k$H$-$K!"!X?F@Z$J!YJ#@=$rAw$k\e(B
-\e$B798~$,$"$j$^$9!#$3$l$i$OIaDL$O$=$3$K\e(B @code{Newsgroups} \e$BMs$,IU$$$F$$$k$N$G\e(B
-\e$B$9$,!"$$$D$b$=$&$G$"$k$H$O8B$j$^$;$s!#$3$NL?Na\e(B
-(@code{gnus-summary-article-posted-p}) \e$B$O8=:_$N5-;v$r$"$J$?$N%K%e!<%9%5!<\e(B
-\e$B%P!<$+$i!J$H$$$&$h$j$O!"$`$7$m\e(B @code{gnus-refer-article-method} \e$B$d\e(B
-@code{gnus-select-method} \e$B$+$i!K<hF@$7$h$&$H$7!"5-;v$rH/8+$G$-$?$+$I$&$+$r\e(B
-\e$BJs9p$7$^$9!#$=$l$,5-;v$rH/8+$7$J$+$C$?$H$7$F$b!"$=$l$O$H$K$+$/Ej9F$5$l$F$$\e(B
-\e$B$k$+$b$7$l$^$;$s!=!=%a!<%k$NEAC#$O%K%e!<%9$NEAC#$h$j$b$:$C$HB.$/!"%K%e!<%9\e(B
-\e$B$NJ#@=$,$^$@E~Ce$7$F$$$J$$$@$1$+$b$7$l$J$$$N$G$9!#\e(B
-
+\e$B0lIt$N?M$O$"$J$?$NEj9F$X$N%U%)%m!<%"%C%W$r$9$k$H$-$K!"!X?F@Z$J!YJ#@=$rAw\e(B
+\e$B$k798~$,$"$j$^$9!#$3$l$i$OIaDL$O$=$3$K\e(B @code{Newsgroups} \e$BMs$,IU$$$F$$$k\e(B
+\e$B$N$G$9$,!"$$$D$b$=$&$G$"$k$H$O8B$j$^$;$s!#$3$NL?\e(B
+\e$BNa\e(B (@code{gnus-summary-article-posted-p}) \e$B$O8=:_$N5-;v$r$"$J$?$N%K%e!<%9\e(B
+\e$B%5!<%P!<$+$i\e(B (\e$B$H$$$&$h$j$O!"$`$7\e(B
+\e$B$m\e(B @code{gnus-refer-article-method} \e$B$d\e(B @code{gnus-select-method} \e$B$+\e(B
+\e$B$i\e(B) \e$B<hF@$7$h$&$H$7!"5-;v$rH/8+$G$-$?$+$I$&$+$rJs9p$7$^$9!#$=$l$,5-;v$rH/\e(B
+\e$B8+$7$J$+$C$?$H$7$F$b!"$=$l$O$H$K$+$/Ej9F$5$l$F$$$k$+$b$7$l$^$;$s!=!=%a!<\e(B
+\e$B%k$NEAC#$O%K%e!<%9$NEAC#$h$j$b$:$C$HB.$/!"%K%e!<%9$NJ#@=$,$^$@E~Ce$7$F$$\e(B
+\e$B$J$$$@$1$+$b$7$l$J$$$N$G$9!#\e(B
 @end table
 
 @vindex gnus-move-split-methods
 @cindex moving articles
-\e$B$b$7!"5,B'E*$K5-;v$r0\F0!J$b$7$/$OJ#@=!K$9$k$N$G$"$l$P!"\e(Bgnus \e$B$K5-;v$r$I$3\e(B
-\e$B$KF~$l$l$PNI$$$+Ds0F$5$;$?$$$H;W$&$G$7$g$&!#\e(B
-@code{gnus-move-split-methods} \e$B$O\e(B @code{gnus-split-methods} \e$B$HF1$89=J8$r;H\e(B
-\e$B$&JQ?t$G$9\e(B (@pxref{Saving Articles})\e$B!#$"$J$?$,BEEv$@$H;W$&$h$&$JDs0F$r$9$k\e(B
-\e$B$h$&$K$=$NJQ?t$r%+%9%?%^%$%:$9$k;v$,$G$-$^$9!#\e(B
+\e$B$b$7!"5,B'E*$K5-;v$r0\F0\e(B (\e$B$b$7$/$OJ#@=\e(B) \e$B$9$k$N$G$"$l$P!"\e(Bgnus \e$B$K5-;v$r$I\e(B
+\e$B$3$KF~$l$l$PNI$$$+Ds0F$5$;$?$$$H;W$&$G$7$g$&!#\e(B
+@code{gnus-move-split-methods} \e$B$O\e(B @code{gnus-split-methods} \e$B$HF1$89=J8$r\e(B
+\e$B;H$&JQ?t$G$9\e(B (@pxref{Saving Articles})\e$B!#$"$J$?$,BEEv$@$H;W$&$h$&$JDs0F$r\e(B
+\e$B$9$k$h$&$K$=$NJQ?t$r%+%9%?%^%$%:$9$k;v$,$G$-$^$9!#\e(B
+(@code{gnus-split-methods} \e$B$,%U%!%$%kL>$r;H$&$N$KBP$7\e(B
+\e$B$F\e(B @code{gnus-move-split-methods} \e$B$O%0%k!<%WL>$r;H$&$3$H$KCm0U$7$F2<$5\e(B
+\e$B$$!#\e(B)
 
 @lisp
 (setq gnus-move-split-methods
@@ -7609,15 +8163,14 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
         (".*" "nnml:misc")))
 @end lisp
 
-
 @node Various Summary Stuff
 @section \e$B$$$m$$$m$J35N,$NJ*7o\e(B
 
 @menu
-* Summary Group Information::         \e$B>pJs;X8~$NL?Na!#\e(B
-* Searching for Articles::            \e$BJ#?t5-;vL?Na!#\e(B
-* Summary Generation Commands::       \e$B35N,%P%C%U%!$N!J:F!K:n@.!#\e(B
-* Really Various Summary Commands::   \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na!#\e(B
+* Summary Group Information::       \e$B>pJs;X8~$NL?Na\e(B
+* Searching for Articles::          \e$BJ#?t5-;vL?Na\e(B
+* Summary Generation Commands::     \e$B35N,%P%C%U%!$N\e(B (\e$B:F\e(B) \e$B:n@.\e(B
+* Really Various Summary Commands:: \e$B$"$N$d$C$+$$$JB>$KE,9g$7$J$$L?Na\e(B
 @end menu
 
 @table @code
@@ -7644,17 +8197,31 @@ Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=
 
 @vindex gnus-summary-ignore-duplicates
 @item gnus-summary-ignore-duplicates
-Gnus \e$B$,F1$8\e(B @code{Message-ID} \e$B$r;}$D\e(B2\e$B$D$N5-;v$rH/8+$7$?$H$-$O!"2?$+;W$$@Z$C\e(B
-\e$B$?;v$r$7$J$1$l$P$J$j$^$;$s!#JL$N5-;v$,F1$8\e(B @code{Message-ID} \e$B$r;}$D;v$O5v\e(B
-\e$B$5$l$F$$$^$;$s$,!"$=$l$O2?$i$+$N=P=j$+$i%a!<%k$rFI$s$G$$$k$H$-$K5/$3$k$+$b\e(B
-\e$B$7$l$^$;$s!#\e(BGnus \e$B$O$3$NJQ?t$K$h$C$F2?$,5/$3$k$+$r%+%9%?%^%$%:$G$-$k$h$&$K\e(B
-\e$B$J$C$F$$$^$9!#$b$7$=$l$,\e(B @code{nil}\e$B!J$3$l$,%G%#%U%)%k%H$G$9!K$G$"$l$P!"\e(B
-gnus \e$B$O\e(B @code{Message-ID} \e$B$rIU$1BX$($F!JI=<($N$?$a$@$1$K!K5-;v$rB>$N5-;v$H\e(B
-\e$BF1$8$h$&$KI=<($7$^$9!#$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"$=$l$O5-;v$rI=<($7$^$;\e(B
-\e$B$s\e(B---\e$B:G=i$+$iB8:_$7$J$+$C$?$+$N$h$&$K!#\e(B
+Gnus \e$B$,F1$8\e(B @code{Message-ID} \e$B$r;}$DFs$D$N5-;v$rH/8+$7$?$H$-$O!"2?$+;W$$\e(B
+\e$B@Z$C$?;v$r$7$J$1$l$P$J$j$^$;$s!#JL$N5-;v$,F1$8\e(B @code{Message-ID} \e$B$r;}$D\e(B
+\e$B;v$O5v$5$l$F$$$^$;$s$,!"$=$l$O2?$i$+$N=P=j$+$i%a!<%k$rFI$s$G$$$k$H$-$K5/\e(B
+\e$B$3$k$+$b$7$l$^$;$s!#\e(BGnus \e$B$O$3$NJQ?t$K$h$C$F2?$,5/$3$k$+$r%+%9%?%^%$%:$G\e(B
+\e$B$-$k$h$&$K$J$C$F$$$^$9!#$b$7$=$l$,\e(B @code{nil} (\e$B$3$l$,%G%#%U%)%k%H$G\e(B
+\e$B$9\e(B) \e$B$G$"$l$P!"\e(Bgnus \e$B$O\e(B @code{Message-ID} \e$B$rIU$1BX$($F\e(B (\e$BI=<($N$?$a$@$1\e(B
+\e$B$K\e(B) \e$B5-;v$rB>$N5-;v$HF1$8$h$&$KI=<($7$^$9!#$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"\e(B
+\e$B$=$l$O5-;v$rI=<($7$^$;$s\e(B---\e$B:G=i$+$iB8:_$7$J$+$C$?$+$N$h$&$K!#\e(B
+
+@vindex gnus-alter-articles-to-read-function
+@item gnus-alter-articles-to-read-function
+\e$B$3$NJQ?t$K@_Dj$7$?4X?t$G!"A*Br$9$k5-;v$N%j%9%H$rJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B4X?t$OFs$D$N0z?t\e(B (\e$B%0%k!<%WL>$HA*Br$9$k5-;v$N%j%9%H\e(B) \e$B$r<u$1IU$1$^$9!#\e(B
+
+\e$BNc$($P0J2<$N4X?t$O!"%-%c%C%7%e5-;v$N%j%9%H$r$"$k%0%k!<%W$N%j%9%H$@$1$KDI\e(B
+\e$B2C$7$^$9!#\e(B
 
-@end table
+@lisp
+(defun my-add-cached-articles (group articles)
+  (if (string= group "some.group")
+      (append gnus-newsgroup-cached articles)
+    articles))
+@end lisp
 
+@end table
 
 @node Summary Group Information
 @subsection \e$B35N,%0%k!<%W>pJs\e(B
@@ -7662,66 +8229,69 @@ gnus \e$B$O\e(B @code{Message-ID} \e$B$rIU$1BX$($F!JI=<($N$?$a$@$1$K!K5-;v$rB>$N5-;
 @table @kbd
 
 @item H f
-@kindex H f \e$B!J35N,!K\e(B
+@kindex H f (\e$B35N,\e(B)
 @findex gnus-summary-fetch-faq
 @vindex gnus-grou-faq-directory
-\e$B8=:_$N%0%k!<%W$N\e(B FAQ\e$B!J\e(Bfrequently asked questions\e$B!JIQHK$K$5$l$k<ALd!K$N%j%9\e(B
-\e$B%H!K$r<hF@$7$h$&$H$7$^$9\e(B (@code{gnus-summary-fetch-faq})\e$B!#\e(BGnus \e$B$OIaDL$O1s\e(B
-\e$B3V%^%7%s$N%G%#%l%/%H%j$G$"$k\e(B @code{gnus-group-faq-directory} \e$B$+$i\e(B FAQ \e$B$r<h\e(B
-\e$BF@$7$h$&$H$7$^$9!#$3$NJQ?t$O%G%#%l%/%H%j!<$N%j%9%H$G$"$k;v$b$G$-$^$9!#$=$N\e(B
-\e$B>l9g$O!"$3$NL?Na$K@\F,0z?t$rM?$($k;v$G$$$m$$$m$J%5%$%H\e(B (site) \e$B$+$iA*$V;v$,\e(B
-\e$B$G$-$^$9!#$*$=$i$/\e(B @code{ange-ftp} \e$B$b$7$/$O\e(B @code{efs} \e$B$,%U%!%$%k$N<hF@$K\e(B
-\e$B;H$o$l$k$G$7$g$&!#\e(B
+\e$B8=:_$N%0%k!<%W$N\e(B FAQ (frequently asked questions (\e$BIQHK$K$5$l$k<ALd\e(B) \e$B$N%j\e(B
+\e$B%9%H\e(B) \e$B$r<hF@$7$h$&$H$7$^$9\e(B (@code{gnus-summary-fetch-faq})\e$B!#\e(BGnus \e$B$OIaDL\e(B
+\e$B$O1s3V%^%7%s$N%G%#%l%/%H%j$G$"$k\e(B @code{gnus-group-faq-directory} \e$B$+\e(B
+\e$B$i\e(B FAQ \e$B$r<hF@$7$h$&$H$7$^$9!#$3$NJQ?t$O%G%#%l%/%H%j!<$N%j%9%H$G$"$k;v$b\e(B
+\e$B$G$-$^$9!#$=$N>l9g$O!"$3$NL?Na$K@\F,0z?t$rM?$($k;v$G$$$m$$$m$J%5%$\e(B
+\e$B%H\e(B (site) \e$B$+$iA*$V;v$,$G$-$^$9!#$*$=$i$/\e(B @code{ange-ftp} \e$B$b$7$/\e(B
+\e$B$O\e(B @code{efs} \e$B$,%U%!%$%k$N<hF@$K;H$o$l$k$G$7$g$&!#\e(B
 
 @item H d
-@kindex H d \e$B!J35N,!K\e(B
+@kindex H d (\e$B35N,\e(B)
 @findex gnus-summary-describe-group
-\e$B8=:_$N%0%k!<%W$K4X$9$kC;$$5-=R$rM?$($^$9\e(B
-(@code{gnus-summary-describe-group})\e$B!#@\F,0z?t$,M?$($i$l$k$H!"%5!<%P!<$+$i\e(B
-\e$B6/@)E*$K5-=R$N:FFI$_9~$_$r$7$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$K4X$9$kC;$$5-=R$rM?$($^\e(B
+\e$B$9\e(B (@code{gnus-summary-describe-group})\e$B!#@\F,0z?t$,M?$($i$l$k$H!"%5!<%P!<\e(B
+\e$B$+$i6/@)E*$K5-=R$N:FFI$_9~$_$r$7$^$9!#\e(B
 
 @item H h
-@kindex H h \e$B!J35N,!K\e(B
+@kindex H h (\e$B35N,\e(B)
 @findex gnus-summary-describe-briefly
-\e$B:G=EMW35N,BG80$NHs>o$KC;$$5-=R$rM?$($^$9\e(B
-(@code{gnus-summary-describe-briefly})\e$B!#\e(B
+\e$B:G=EMW35N,BG80$NHs>o$KC;$$5-=R$rM?$($^\e(B
+\e$B$9\e(B (@code{gnus-summary-describe-briefly})\e$B!#\e(B
 
 @item H i
-@kindex H i \e$B!J35N,!K\e(B
+@kindex H i (\e$B35N,\e(B)
 @findex gnus-info-find-node
 Gnus \e$B$N\e(B info \e$B$N@a\e(B (node) \e$B$K0\F0$7$^$9\e(B (@code{gnus-info-find-node})\e$B!#\e(B
 @end table
 
-
 @node Searching for Articles
 @subsection \e$B5-;v$rC5$9\e(B
 
 @table @kbd
 
 @item M-s
-@kindex M-s \e$B!J35N,!K\e(B
+@kindex M-s (\e$B35N,\e(B)
 @findex gnus-summary-search-article-forward
-\e$BD>8e$K$"$kA4$F$N5-;v$r@55,I=8=$G8!:w$7$^$9\e(B
-(@code{gnus-summary-search-article-forward})\e$B!#\e(B
+\e$BD>8e$K$"$kA4$F$N5-;v$r@55,I=8=$G8!:w$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-search-article-forward})\e$B!#\e(B
 
 @item M-r
-@kindex M-r \e$B!J35N,!K\e(B
+@kindex M-r (\e$B35N,\e(B)
 @findex gnus-summary-search-article-backward
-\e$BA0$K$"$kA4$F$N5-;v$r@55,I=8=$G8!:w$7$^$9\e(B
-(@code{gnus-summary-search-article-backward})\e$B!#\e(B
+\e$BA0$K$"$kA4$F$N5-;v$r@55,I=8=$G8!:w$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-search-article-backward})\e$B!#\e(B
 
 @item &
-@kindex & \e$B!J35N,!K\e(B
+@kindex & (\e$B35N,\e(B)
 @findex gnus-summary-execute-command
 \e$B$3$NL?Na$O$"$J$?$K%X%C%@!<ItJ,$H$=$NItJ,$K9gCW$9$k@55,I=8=!"9gCW$7$?>l9g\e(B
 \e$B$K<B9T$5$l$kL?Na$NF~NO$rB%?J$7$^$9\e(B (@code{gnus-summary-execute-command})\e$B!#\e(B
-\e$B$b$7@\F,0z?t$rM?$($i$l$l$P!"Be$o$j$K8e$m8~$-$KC5$7$^$9!#\e(B
+\e$B$b$7%X%C%@!<$,6uJ8;zNs$J$i$P!"5-;vA4BN$rC5$7$^$9!#$b$7@\F,0z?t$rM?$($i$l\e(B
+\e$B$l$P!"Be$o$j$K8e$m8~$-$KC5$7$^$9!#\e(B
+
+\e$BNc$($P\e(B @kbd{& RET \e$BJ8;zNs\e(B #} \e$B$O!"%X%C%@!<$+K\J8$K\e(B @samp{\e$BJ8;zNs\e(B} \e$B$r;}$D$9\e(B
+\e$B$Y$F$N5-;v$K%W%m%;%90u$rIU$1$^$9!#\e(B
 
 @item M-&
-@kindex M-& \e$B!J35N,!K\e(B
+@kindex M-& (\e$B35N,\e(B)
 @findex gnus-summary-universal-argument
-\e$B%W%m%;%90u$K$h$C$F0uIU$1$i$l$?A4$F$N5-;v$NA`:n$r<B9T$7$^$9\e(B
-(@code{gnus-summary-universal-argument})\e$B!#\e(B
+\e$B%W%m%;%90u$K$h$C$F0uIU$1$i$l$?A4$F$N5-;v$NA`:n$r<B9T$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-universal-argument})\e$B!#\e(B
 @end table
 
 @node Summary Generation Commands
@@ -7730,19 +8300,18 @@ Gnus \e$B$N\e(B info \e$B$N@a\e(B (node) \e$B$K0\F0$7$^$9\e(B (@code{gnus-info-find-no
 @table @kbd
 
 @item Y g
-@kindex Y g \e$B!J35N,!K\e(B
+@kindex Y g (\e$B35N,\e(B)
 @findex gnus-summary-prepare
 \e$B8=:_$N35N,%P%C%U%!$r:F:n@.$7$^$9\e(B (@code{gnus-summary-prepare})\e$B!#\e(B
 
 @item Y c
-@kindex Y c \e$B!J35N,!K\e(B
+@kindex Y c (\e$B35N,\e(B)
 @findex gnus-summary-insert-cached-articles
-\e$BA4$F$N!J8=:_$N%0%k!<%W$K!K%-%c%C%7%e$5$l$?5-;v\e(B \e$B$r35N,%P%C%U%!$KA^F~$7$^$9\e(B
-(@code{gnus-summary-insert-cached-articles})\e$B!#\e(B
+\e$BA4$F$N\e(B (\e$B8=:_$N%0%k!<%W$K\e(B) \e$B%-%c%C%7%e$5$l$?5-;v\e(B \e$B$r35N,%P%C%U%!$KA^F~$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-insert-cached-articles})\e$B!#\e(B
 
 @end table
 
-
 @node Really Various Summary Commands
 @subsection \e$BK\Ev$K$$$m$$$m$J35N,L?Na\e(B
 
@@ -7750,49 +8319,49 @@ Gnus \e$B$N\e(B info \e$B$N@a\e(B (node) \e$B$K0\F0$7$^$9\e(B (@code{gnus-info-find-no
 
 @item A D
 @itemx C-d
-@kindex C-d \e$B!J35N,!K\e(B
-@kindex A D \e$B!J35N,!K\e(B
+@kindex C-d (\e$B35N,\e(B)
+@kindex A D (\e$B35N,\e(B)
 @findex gnus-summary-enter-digest-group
-\e$B$b$78=:_$N%0%k!<%W$,B>$N5-;v$N=8$^$j$G$"$k$J$i$P!JNc$($P!"E&MW\e(B (digest)\e$B!K!"\e(B
-\e$B$=$N$h$&$J5-;v$G$G$-$F$$$k%0%k!<%W$KF~$k$?$a$K$3$NL?Na$r;H$&$+$b$7$l$^$;$s\e(B
-(@code{gnus-summary-enter-digest-group})\e$B!#\e(BGnus \e$B$O$3$NL?Na$K@\F,0z?t$rM?$(\e(B
-\e$B$J$$8B$j!"$I$N$h$&$J7?$N5-;v$,8=:_I=<($5$l$F$$$k$+$r?dB,$7$h$&$H$7!"$=$l$O\e(B
-\e$B6/@)E*$K!XE&MW!Y$H$$$&2r<a$K$J$j$^$9!#4pK\E*$K!"B>$NMM<0$+$i$J$kB>$N%a%C%;!<\e(B
-\e$B%8$N=89g$G$"$C$?$H$-$O!"\e(B@kbd{C-d} \e$B$H$9$k$3$H$K$h$j$b$C$HJXMx$JJ}K!$G$=$l$i\e(B
-\e$B$N%a%C%;!<%8$rFI$`;v$,$G$-$k$h$&$K$J$j$^$9!#\e(B
+\e$B$b$78=:_$N%0%k!<%W$,B>$N5-;v$N=8$^$j$G$"$k$J$i$P\e(B (\e$BNc$($P!"E&MW\e(B (digest))\e$B!"\e(B
+\e$B$=$N$h$&$J5-;v$G$G$-$F$$$k%0%k!<%W$KF~$k$?$a$K$3$NL?Na$r;H$&$+$b$7$l$^$;\e(B
+\e$B$s\e(B(@code{gnus-summary-enter-digest-group})\e$B!#\e(BGnus \e$B$O$3$NL?Na$K@\F,0z?t$r\e(B
+\e$BM?$($J$$8B$j!"$I$N$h$&$J7?$N5-;v$,8=:_I=<($5$l$F$$$k$+$r?dB,$7$h$&$H$7!"\e(B
+\e$B$=$l$O6/@)E*$K!XE&MW!Y$H$$$&2r<a$K$J$j$^$9!#4pK\E*$K!"B>$NMM<0$+$i$J$kB>\e(B
+\e$B$N%a%C%;!<%8$N=89g$G$"$C$?$H$-$O!"\e(B@kbd{C-d} \e$B$H$9$k$3$H$K$h$j$b$C$HJXMx$J\e(B
+\e$BJ}K!$G$=$l$i$N%a%C%;!<%8$rFI$`;v$,$G$-$k$h$&$K$J$j$^$9!#\e(B
 
 @item M-C-d
-@kindex M-C-d \e$B!J35N,!K\e(B
+@kindex M-C-d (\e$B35N,\e(B)
 @findex gnus-summary-read-document
 \e$B$3$NL?Na$O>e$N$b$N$KHs>o$K;w$F$$$^$9$,!"$$$/$D$+$NJ8=q$r0l$D$NBg!<$-$$%0\e(B
 \e$B%k!<%W$K=8$a$^$9\e(B (@code{gnus-summary-read-read-document})\e$B!#$=$l$O$$$/$D\e(B
 \e$B$+$N\e(B @code{nndoc} \e$B%0%k!<%W$r$=$l$>$l$NJ8=q$N$?$a$K\e(B \e$B3+$-!"$=$l$+$i$3$l$i\e(B
 \e$B$N\e(B @code{nndoc} \e$B%0%k!<%W$N>e$K\e(B @code{nnvirtual} \e$B%0%k!<%W$r3+$/;v$K$h$C$F\e(B
-\e$B$3$N;v$r2DG=$K$7$F$$$^$9!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$rM}2r$7$^$9\e(B
-(@pxref{Process/Prefix})\e$B!#\e(B
+\e$B$3$N;v$r2DG=$K$7$F$$$^$9!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$rM}2r$7$^\e(B
+\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item C-t
-@kindex C-t \e$B!J35N,!K\e(B
+@kindex C-t (\e$B35N,\e(B)
 @findex gnus-summary-togle-truncation
 \e$B35N,9T$N@ZCG$r@Z$jBX$($^$9\e(B (@code{gnus-summary-toggle-truncation})\e$B!#$3$l\e(B
 \e$B$O$*$=$i$/35N,%P%C%U%!$N9TCf1{I=<(4X?t$r:.Mp$5$;$^$9$N$G!"5-;v$rFI$s$G$$\e(B
 \e$B$k4V$K@ZCG$r@Z$C$F$$$k$N$ONI$$9M$($G$O$J$$$G$7$g$&!#\e(B
 
 @item =
-@kindex = \e$B!J35N,!K\e(B
+@kindex = (\e$B35N,\e(B)
 @findex gnus-summary-expand-window
-\e$B35N,%P%C%U%!$N%&%#%s%I%&$r3HBg$7$^$9\e(B
-(@code{gnus-summary-expand-window})\e$B!#@\F,0z?t$rM?$($i$l$l$P!"\e(B@code{\e$B5-;v\e(B}
-\e$B%&%#%s%I%&$r3HBg$7$^$9!#\e(B
+\e$B35N,%P%C%U%!$N%&%#%s%I%&$r3HBg$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-expand-window})\e$B!#@\F,0z?t$rM?$($i$l$l$P!"\e(B
+@code{\e$B5-;v\e(B} \e$B%&%#%s%I%&$r3HBg$7$^$9!#\e(B
 
 @item M-C-e
-@kindex M-C-e \e$B!J35N,!K\e(B
+@kindex M-C-e (\e$B35N,\e(B)
 @findex gnus-summary-edit-parameters
 \e$B8=:_$N%0%k!<%W$N%0%k!<%W$NG^2pJQ?t\e(B (parameter) (@pxref{Group
 Parameters}) \e$B$rJT=8$7$^$9\e(B (@code{gnus-summary-edit-parameters})\e$B!#\e(B
 
-@item M-C-g
-@kindex M-C-g (\e$B35N,\e(B)
+@item M-C-a
+@kindex M-C-a (\e$B35N,\e(B)
 @findex gnus-summary-customize-parameters
 \e$B8=:_$N%0%k!<%W$N%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$r%+%9%?%^\e(B
 \e$B%$%:$7$^$9\e(B (@code{gnus-summary-customize-parameters})\e$B!#\e(B
@@ -7812,79 +8381,79 @@ Parameters}) \e$B$rJT=8$7$^$9\e(B (@code{gnus-summary-edit-parameters})\e$B!#\e(B
 @item Z Z
 @itemx q
 @kindex Z Z (Summary)
-@findex q \e$B!J35N,!K\e(B
+@findex q (\e$B35N,\e(B)
 @findex gnus-summary-exit
 @vindex gnus-summary-exit-hook
 @vindex gnus-summary-prepare-exit-hook
 @c @icon{gnus-summary-exit}
-\e$B8=:_$N%0%k!<%W$r=P$F!"%0%k!<%W$NA4$F$N>pJs$r99?7$7$^$9\e(B
-(@code{gnus-summary-exit})\e$B!#H4$1=P$k$?$a$N$?$$$F$$$N;v$r$9$kA0$K\e(B
-@code{gnus-summary-prepare-exit-hook} \e$B$,8F$P$l!"$=$l$O%G%#%U%)%k%H$G\e(B
-@code{gnus-summary-expire-articles} \e$B$r8F$S$^$9!#H4$1=P$k2aDx$rDI$($?8e$K\e(B
-@code{gnus-summary-exit-hook} \e$B$,8F$P$l$^$9!#\e(B(\e$BL$FI$N\e(B) \e$B%0%k!<%W$,;D$C$F$$\e(B
-\e$B$J$$$H$-$K%0%k!<%W%b!<%I$KLa$k$H$-$K\e(B
-@code{gnus-group-no-more-groups-hook} \e$B$,<B9T$5$l$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$r=P$F!"%0%k!<%W$NA4$F$N>pJs$r99?7$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-exit})\e$B!#H4$1=P$k$?$a$N$?$$$F$$$N;v$r$9$kA0\e(B
+\e$B$K\e(B @code{gnus-summary-prepare-exit-hook} \e$B$,8F$P$l!"$=$l$O%G%#%U%)%k%H\e(B
+\e$B$G\e(B @code{gnus-summary-expire-articles} \e$B$r8F$S$^$9!#H4$1=P$k2aDx$rDI$($?\e(B
+\e$B8e$K\e(B @code{gnus-summary-exit-hook} \e$B$,8F$P$l$^$9!#\e(B(\e$BL$FI$N\e(B) \e$B%0%k!<%W$,;D$C\e(B
+\e$B$F$$$J$$$H$-$K%0%k!<%W%b!<%I$KLa$k$H$-\e(B
+\e$B$K\e(B @code{gnus-group-no-more-groups-hook} \e$B$,<B9T$5$l$^$9!#\e(B
 
 @item Z E
 @itemx Q
-@kindex Z E \e$B!J35N,!K\e(B
-@findex Q \e$B!J35N,!K\e(B
+@kindex Z E (\e$B35N,\e(B)
+@findex Q (\e$B35N,\e(B)
 @findex gnus-summary-exit-no-update
-\e$B%0%k!<%W$N$I$N>pJs$b99?7$;$:$K8=:_$N%0%k!<%W$rH4$1=P$^$9\e(B
-(@code{gnus-summary-exit-no-update})\e$B!#\e(B
+\e$B%0%k!<%W$N$I$N>pJs$b99?7$;$:$K8=:_$N%0%k!<%W$rH4$1=P$^\e(B
+\e$B$9\e(B (@code{gnus-summary-exit-no-update})\e$B!#\e(B
 
 @item Z c
 @itemx c
-@kindex Z c \e$B!J35N,!K\e(B
-@kindex c \e$B!J35N,!K\e(B
+@kindex Z c (\e$B35N,\e(B)
+@kindex c (\e$B35N,\e(B)
 @findex gnus-summary-catchup-and-exit
 @c @icon{gnus-summary-catchup-and-exit}
 \e$B%0%k!<%W$NA4$F$NJ]N1$G$J$$5-;v\e(B (unticked article) \e$B$K4{FI$N0u$rIU$1$F!"$=\e(B
 \e$B$l$+$iH4$1$^$9\e(B (@code{gnus-summary-catchup-and-exit})\e$B!#\e(B
 
 @item Z C
-@kindex Z C \e$B!J35N,!K\e(B
+@kindex Z C (\e$B35N,\e(B)
 @findex gnus-summary-catchup-all-and-exit
-\e$BJ]N15-;v$b4^$a$F!"A4$F$N5-;v$K4{FI$N0u$rIU$1$F!"$=$l$+$iH4$1$^$9\e(B
-(@code{gnus-summary-catchup-all-and-exit})\e$B!#\e(B
+\e$BJ]N15-;v$b4^$a$F!"A4$F$N5-;v$K4{FI$N0u$rIU$1$F!"$=$l$+$iH4$1$^\e(B
+\e$B$9\e(B (@code{gnus-summary-catchup-all-and-exit})\e$B!#\e(B
 
 @item Z n
-@kindex Z n \e$B!J35N,!K\e(B
+@kindex Z n (\e$B35N,\e(B)
 @findex gnus-summary-catchup-and-goto-next-group
-\e$BA4$F$N5-;v$K4{FI$N0u$rIU$1$F<!$N%0%k!<%W$X0\F0$7$^$9\e(B
-(@code{gnus-summary-catchup-and-goto-next-group})\e$B!#\e(B
+\e$BA4$F$N5-;v$K4{FI$N0u$rIU$1$F<!$N%0%k!<%W$X0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-catchup-and-goto-next-group})\e$B!#\e(B
 
 @item Z R
-@kindex Z R \e$B!J35N,!K\e(B
+@kindex Z R (\e$B35N,\e(B)
 @findex gnus-summary-reselect-current-group
-\e$B8=:_$N%0%k!<%W$r=P$F!"$=$l$+$iF~$jD>$7$^$9\e(B
-(@code{gnus-summary-reselect-current-group})\e$B!#$b$7@\F,0z?t$rM?$($i$l$l$P!"\e(B
-\e$B4{FI$HL$FI$NN>J}$NA4$F$N5-;v$rA*Br$7$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$r=P$F!"$=$l$+$iF~$jD>$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-reselect-current-group})\e$B!#$b$7@\F,0z?t$rM?$($i$l\e(B
+\e$B$l$P!"4{FI$HL$FI$NN>J}$NA4$F$N5-;v$rA*Br$7$^$9!#\e(B
 
 @item Z G
 @itemx M-g
-@kindex Z G \e$B!J35N,!K\e(B
-@kindex M-g \e$B!J35N,!K\e(B
+@kindex Z G (\e$B35N,\e(B)
+@kindex M-g (\e$B35N,\e(B)
 @findex gnus-summary-rescan-group
 @c @icon{gnus-summary-mail-get}
-\e$B%0%k!<%W$rH4$1!"%0%k!<%W$N?7$7$$5-;v$rD4$Y!"%0%k!<%W$rA*Br$7$^$9\e(B
-(@code{gnus-summary-rescan-group})\e$B!#$b$7@\F,0z?t$rM?$($i$l$l$P!"4{FI$HL$\e(B
-\e$BFI$NN>J}$NA4$F$N5-;v$rA*Br$7$^$9!#\e(B
+\e$B%0%k!<%W$rH4$1!"%0%k!<%W$N?7$7$$5-;v$rD4$Y!"%0%k!<%W$rA*Br$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-rescan-group})\e$B!#$b$7@\F,0z?t$rM?$($i$l$l$P!"4{FI\e(B
+\e$B$HL$FI$NN>J}$NA4$F$N5-;v$rA*Br$7$^$9!#\e(B
 
 @item Z N
-@kindex Z N \e$B!J35N,!K\e(B
+@kindex Z N (\e$B35N,\e(B)
 @findex gnus-summary-next-group
-\e$B%0%k!<%W$rH4$1$F!"<!$N%0%k!<%W$X0\F0$7$^$9\e(B
-(@code{gnus-summary-next-group})\e$B!#\e(B
+\e$B%0%k!<%W$rH4$1$F!"<!$N%0%k!<%W$X0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-next-group})\e$B!#\e(B
 
 @item Z P
-@kindex Z P \e$B!J35N,!K\e(B
+@kindex Z P (\e$B35N,\e(B)
 @findex gnus-summary-prev-group
-\e$B%0%k!<%W$rH4$1$F!"A0$N%0%k!<%W$X0\F0$7$^$9\e(B
-(@code{gnus-summary-prev-group})\e$B!#\e(B
+\e$B%0%k!<%W$rH4$1$F!"A0$N%0%k!<%W$X0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-summary-prev-group})\e$B!#\e(B
 
 @item Z s
-@kindex Z s \e$B!J35N,!K\e(B
+@kindex Z s (\e$B35N,\e(B)
 @findex gnus-summary-save-newsrc
 \e$B8=:_$N4{FI\e(B/\e$B0uIU$-5-;v$N?t$r%I%j%V%k%P%C%U%!\e(B (dribble buffer) \e$B$KJ]B8$7!"\e(B
 \e$B$=$l$+$i%I%j%V%k%P%C%U%!$rJ]B8$7$^$9\e(B (@code{gnus-summary-save-newsrc})\e$B!#\e(B
@@ -7893,73 +8462,77 @@ Parameters}) \e$B$rJT=8$7$^$9\e(B (@code{gnus-summary-edit-parameters})\e$B!#\e(B
 @end table
 
 @vindex gnus-exit-group-hook
-\e$B8=:_$N%0%k!<%W$rH4$1$k$H$-$K\e(B @code{gnus-exit-group-hook} \e$B$,8F$P$l$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$r!"%0%k!<%W$NA4$F$N>pJs$r99?7$7$FH4$1$k$H$-\e(B
+\e$B$K\e(B @code{gnus-exit-group-hook} \e$B$,8F$P$l$^$9!#\e(B
+@kbd{Q} \e$BL?Na\e(B (@code{gnus-summary-exit-no-update}) \e$B$G$O!"$3$N%U%C%/$r8F$S\e(B
+\e$B$^$;$s!#\e(B
 
 @findex gnus-summary-wake-up-the-dead
 @findex gnus-dead-summary-mode
 @vindex gnus-kill-summary-on-exit
 \e$B$"$J$?$K%0%k!<%W$rH4$1$F!"$=$l$+$i9M$($rJQ$($kJJ$,$"$k$N$G$"$l$P!"\e(B
-@code{gnus-kill-summary-on-exit} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$N$,NI$$$+$b$7$l\e(B
-\e$B$^$;$s!#$b$7$=$&$9$l$P!"\e(Bgnus \e$B$O$=$l$+$iH4$1=P$k$H$-$K35N,%P%C%U%!$r:o=|$7\e(B
-\e$B$^$;$s!#!J2?$H$$$&6C$-!*!K$=$NBe$o$j$K!"$=$l$O%P%C%U%!$NL>A0$r\e(B
-@samp{*Dead Summary ... *} \e$B$N$h$&$J$b$N$KJQ99$7!"\e(B
+@code{gnus-kill-summary-on-exit} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$N$,NI$$$+$b$7\e(B
+\e$B$l$^$;$s!#$b$7$=$&$9$l$P!"\e(Bgnus \e$B$O$=$l$+$iH4$1=P$k$H$-$K35N,%P%C%U%!$r:o\e(B
+\e$B=|$7$^$;$s!#\e(B(\e$B2?$H$$$&6C$-\e(B!) \e$B$=$NBe$o$j$K!"$=$l$O%P%C%U%!$NL>A0\e(B
+\e$B$r\e(B @samp{*Dead Summary ... *} \e$B$N$h$&$J$b$N$KJQ99$7!"\e(B
 @code{gnus-dead-summary-mode} \e$B$H8F$P$l$k%^%$%J!<%b!<%I$rF3F~$7$^$9!#:#$d!"\e(B
-\e$B$=$N%P%C%U%!$K@Z$jBX$($l$P!"A4$F$N%-!<$,4X?t\e(B
-@code{gnus-summary-wake-up-the-dead} \e$B$K3d$jEv$F$i$l$F$$$k$3$H$K5$IU$/$G$7$g\e(B
-\e$B$&!#;`$s$@35N,%P%C%U%!\e(B (dead summary buffer) \e$B$G$I$l$+$N%-!<$rC!$/;v$H!"@8\e(B
-\e$B$-$?IaDL$N35N,%P%C%U%!$K$J$k$G$7$g$&!#\e(B
+\e$B$=$N%P%C%U%!$K@Z$jBX$($l$P!"A4$F$N%-!<$,4X\e(B
+\e$B?t\e(B @code{gnus-summary-wake-up-the-dead} \e$B$K3d$jEv$F$i$l$F$$$k$3$H$K5$IU$/\e(B
+\e$B$G$7$g$&!#;`$s$@35N,%P%C%U%!\e(B (dead summary buffer) \e$B$G$I$l$+$N%-!<$rC!$/\e(B
+\e$B;v$H!"@8$-$?IaDL$N35N,%P%C%U%!$K$J$k$G$7$g$&!#\e(B
 
 \e$B;`$s$@35N,%P%C%U%!$OF1;~$K0l$D$7$+B8:_$9$k;v$O$G$-$^$;$s!#\e(B
 
 @vindex gnus-use-cross-reference
-\e$B35N,%P%C%U%!$rH4$1=P$k$H!"8=:_$N%0%k!<%W$N%G!<%?$O99?7$5$l$^$9!J$I$N5-;v$r\e(B
-\e$BFI$s$G!"$I$N5-;v$KJVEz$7$?$+!"$J$I$J$I!#!K$b$7JQ?t\e(B
-@code{gnus-use-cross-reference} \e$B$,\e(B @code{t} \e$B$G$"$k$H!J$=$l$,%G%#%U%)%k%H$G\e(B
-\e$B$9!K!"$=$N%0%k!<%W$KAj8_;2>H$5$l$?\e(B (cross referenced) \e$B5-;v$O4{FI$N0u$,IU$-!"\e(B
-\e$B$=$l$,Aj8_Ej9F\e(B (cross post) \e$B$5$l$?B>$N9XFI$7$F$$$k%0%k!<%W$G$b4{FI$N0u$,IU\e(B
-\e$B$-$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$b\e(B @code{t} \e$B$G$J$1$l$P!"5-;v$O9XFI$HL$9XFI\e(B
-\e$B$NN>J}$N%0%k!<%W$G4{FI$N0u$,IU$-$^$9\e(B (@pxref{Crosspost Handling})\e$B!#\e(B
-
+\e$B35N,%P%C%U%!$rH4$1=P$k$H!"8=:_$N%0%k!<%W$N%G!<%?$O99?7$5$l$^$9\e(B (\e$B$I$N5-;v\e(B
+\e$B$rFI$s$G!"$I$N5-;v$KJVEz$7$?$+!"$J$I$J$I!#\e(B) \e$B$b$7JQ\e(B
+\e$B?t\e(B @code{gnus-use-cross-reference} \e$B$,\e(B @code{t} \e$B$G$"$k$H\e(B (\e$B$=$l$,%G%#%U%)\e(B
+\e$B%k%H$G$9\e(B)\e$B!"$=$N%0%k!<%W$KAj8_;2>H$5$l$?\e(B (cross referenced) \e$B5-;v$O4{FI$N\e(B
+\e$B0u$,IU$-!"$=$l$,Aj8_Ej9F\e(B (cross post) \e$B$5$l$?B>$N9XFI$7$F$$$k%0%k!<%W$G$b\e(B
+\e$B4{FI$N0u$,IU$-$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$b\e(B @code{t} \e$B$G$J$1$l$P!"5-;v\e(B
+\e$B$O9XFI$HL$9XFI$NN>J}$N%0%k!<%W$G4{FI$N0u$,IU$-$^\e(B
+\e$B$9\e(B (@pxref{Crosspost Handling})\e$B!#\e(B
 
 @node Crosspost Handling
 @section \e$BAj8_Ej9F$N07$$\e(B
 
 @cindex velveeta
 @cindex spamming
-\e$BAj8_Ej9F\e(B (cross post) \e$B$5$l$?5-;v$K4{FI$N0u$rIU$1$k;v$O!"F1$85-;v$r\e(B2\e$B2s0J>e\e(B
-\e$BFI$^$J$$$G$9$`$H$$$&;v$rJ]>Z$7$^$9!#$b$A$m$s!"$@$l$+$,$=$l$r$$$/$D$+$N%0%k!<\e(B
-\e$B%W$KJL!9$KEj9F$7$J$$8B$j$O!#F1$85-;v$r$$$/$D$+$N%0%k!<%W$KEj9F$9$k;v!JAj8_\e(B
-\e$BEj9F$G$J$/$F!K$O\e(B @dfn{spamming} \e$B$H8F$P$l!"$"$J$?$O$=$N$h$&$JA~$`$Y$-HH:a$r\e(B
-\e$B9T$&$b$N$K$KBP$7$F!"K!N'$K$h$C$FIT2w$J5-;v$rAw$k$3$H$,5AL3$E$1$i$l$F$$$^$9!#\e(B
-spam \e$B$rA*JL$9$k$?$a$K!"\e(BNoCeM \e$B<h07$r;n$7$?$$$H;W$&$+$b$7$l$^$;$s\e(B
-(@pxref{NoCeM})\e$B!#\e(B
-
-\e$B3P$($F$/$@$5$$!'\e(B \e$BAj8_Ej9F$O9=$$$^$;$s$,!"F1$85-;v$rJL!9$K$$$/$D$+$N%0%k!<\e(B
-\e$B%W$KEj9F$9$k$N$O5v$5$l$^$;$s!#BgNL$NAj8_Ej9F\e(B (@dfn{velveeta}) \e$B$O$I$&$7$F$b\e(B
-\e$BHr$1$i$l$k$Y$-$G!"2a>jAj8_Ej9F$KBP$7$FITK~$r8@$&$?$a$KL?Na\e(B
-@code{gnus-summary-mail-crosspost-complaint} \e$B$r;H$&$3$H$5$($G$-$^$9!#\e(B
+\e$BAj8_Ej9F\e(B (cross post) \e$B$5$l$?5-;v$K4{FI$N0u$rIU$1$k;v$O!"F1$85-;v$rFs2s0J\e(B
+\e$B>eFI$^$J$$$G$9$`$H$$$&;v$rJ]>Z$7$^$9!#$b$A$m$s!"$@$l$+$,$=$l$r$$$/$D$+$N\e(B
+\e$B%0%k!<%W$KJL!9$KEj9F$7$J$$8B$j$O!#F1$85-;v$r$$$/$D$+$N%0%k!<%W$KEj9F$9$k\e(B
+\e$B;v\e(B (\e$BAj8_Ej9F$G$J$/$F\e(B) \e$B$O\e(B @dfn{spamming} \e$B$H8F$P$l!"$"$J$?$O$=$N$h$&$JA~$`\e(B
+\e$B$Y$-HH:a$r9T$&$b$N$K$KBP$7$F!"K!N'$K$h$C$FIT2w$J5-;v$rAw$k$3$H$,5AL3$E$1\e(B
+\e$B$i$l$F$$$^$9!#\e(Bspam \e$B$rA*JL$9$k$?$a$K!"\e(BNoCeM \e$B<h07$r;n$7$?$$$H;W$&$+$b$7$l\e(B
+\e$B$^$;$s\e(B (@pxref{NoCeM})\e$B!#\e(B
+
+\e$B3P$($F$/$@$5$$\e(B: \e$BAj8_Ej9F$O9=$$$^$;$s$,!"F1$85-;v$rJL!9$K$$$/$D$+$N%0%k!<\e(B
+\e$B%W$KEj9F$9$k$N$O5v$5$l$^$;$s!#BgNL$NAj8_Ej9F\e(B (@dfn{velveeta}) \e$B$O$I$&$7$F\e(B
+\e$B$bHr$1$i$l$k$Y$-$G!"2a>jAj8_Ej9F$KBP$7$FITK~$r8@$&$?$a$KL?\e(B
+\e$BNa\e(B @code{gnus-summary-mail-crosspost-complaint} \e$B$r;H$&$3$H$5$($G$-$^$9!#\e(B
 
 @cindex cross-posting
 @cindex Xref
 @cindex @sc{nov}
-\e$BAj8_Ej9F$r\e(B gnus \e$B$,@5$7$/07$($J$$$h$&$K$J$k860x$N0l$D$O!"\e(B@sc{nov} \e$B9T$K\e(B
-@code{Xref} \e$BMs$r4^$^$J$$!"\e(B@sc{xover}\e$B!J$3$l$OHs>o$KNI$$$G$9!"$H$$$&$N$O$=$l\e(B
-\e$B$OB.EY$r$H$F$bB.$/$9$k$+$i$G$9!K$N;HMQ2DG=$J\e(B @sc{nntp} \e$B%5!<%P!<$r;H$C$F$$\e(B
-\e$B$k$3$H$G$9!#$3$l$O320-$J$N$G$9$,!"$"$!!"Ha$7$$$+$J!"Hs>o$KNI$/$"$k;v$G$9!#\e(B
-Gnus \e$B$O$"$J$?$,FI$s$@A4$F$N5-;v$K\e(B @code{Xref} \e$B9T$rEPO?$9$k;v$G!"@5$7$$;v$r\e(B
-\e$B$7$h$&\e(B \e$B$H$7$^$9$,!"5-;v$r:o=|$9$k$+!"FI$^$J$$$G4{FI$N0u$rIU$1$k$H!"\e(Bgnus \e$B$O\e(B
-\e$B$3$l$i$N5-;v$K\e(B @code{Xref} \e$B$N9T$r$N$>$-$^$o$k5!2q$rF@$k;v$,L5$/!"Aj8_;2>H\e(B
-\e$B5!9=$rMQ$$$k;v$,$G$-$^$;$s!#\e(B
+\e$BAj8_Ej9F$r\e(B gnus \e$B$,@5$7$/07$($J$$$h$&$K$J$k860x$N0l$D$O!"\e(B@sc{nov} \e$B9T\e(B
+\e$B$K\e(B @code{Xref} \e$BMs$r4^$^$J$$!"\e(B@sc{xover} (\e$B$3$l$OHs>o$KNI$$$G$9!"$H$$$&$N\e(B
+\e$B$O$=$l$OB.EY$r$H$F$bB.$/$9$k$+$i$G$9\e(B) \e$B$N;HMQ2DG=$J\e(B @sc{nntp} \e$B%5!<%P!<$r\e(B
+\e$B;H$C$F$$$k$3$H$G$9!#$3$l$O320-$J$N$G$9$,!"$"$!!"Ha$7$$$+$J!"Hs>o$KNI$/$"\e(B
+\e$B$k;v$G$9!#\e(BGnus \e$B$O$"$J$?$,FI$s$@A4$F$N5-;v$K\e(B @code{Xref} \e$B9T$rEPO?$9$k;v$G!"\e(B
+\e$B@5$7$$;v$r$7$h$&\e(B \e$B$H$7$^$9$,!"5-;v$r:o=|$9$k$+!"FI$^$J$$$G4{FI$N0u$rIU$1\e(B
+\e$B$k$H!"\e(Bgnus \e$B$O$3$l$i$N5-;v$K\e(B @code{Xref} \e$B$N9T$r$N$>$-$^$o$k5!2q$rF@$k;v$,\e(B
+\e$BL5$/!"Aj8_;2>H5!9=$rMQ$$$k;v$,$G$-$^$;$s!#\e(B
 
 @cindex LIST overview.fmt
 @cindex overview.fmt
-\e$B$"$J$?$N\e(B @sc{nntp} \e$B%5!<%P!<$,$=$N354Q%U%!%$%k\e(B (overview file) \e$B$K\e(B
-@code{Xref} \e$BMs$r4^$s$G$$$k$+$rD4$Y$k$K$O!"\e(B@samp{telnet your.nntp.server
-nntp} \e$B$H$7$F!"\e(B@code{inn} \e$B%5!<%P!<$G\e(B @samp{More READER} \e$B$H$7!"$=$l$+$i\e(B
-@samp{LIST overview.fmt} \e$B$H$9$k;v$r;n$7$F$/$@$5$$!#$3$l$OF0:n$7$J$$$G$7$g\e(B
-\e$B$&$,!"$b$7F0:n$7$F!"<hF@$7$?:G8e$N9T$,\e(B @samp{Xref:full} \e$B$G$J$$$J$i$P!"%K%e!<\e(B
-\e$B%9$N4IM}<T$,354Q%U%!%$%k$K\e(B @code{Xref} \e$BMs$r4^$`$h$&$K$9$k$^$G!"%K%e!<%94I\e(B
-\e$BM}<T$K6+$S!"5c$-IU$/;v$rB3$1$k$Y$-$G$7$g$&!#\e(B
+\e$B$"$J$?$N\e(B @sc{nntp} \e$B%5!<%P!<$,$=$N354Q%U%!%$\e(B
+\e$B%k\e(B (overview file) \e$B$K\e(B @code{Xref} \e$BMs$r4^$s$G$$$k$+$rD4$Y$k$K$O!"\e(B
+@samp{telnet your.nntp.server nntp} \e$B$H$7$F!"\e(B@code{inn} \e$B%5!<%P!<\e(B
+\e$B$G\e(B @samp{More READER} \e$B$H$7!"$=$l$+$i\e(B @samp{LIST overview.fmt} \e$B$H$9$k;v$r\e(B
+\e$B;n$7$F$/$@$5$$!#$3$l$OF0:n$7$J$$$G$7$g$&$,!"$b$7F0:n$7$F!"<hF@$7$?:G8e$N\e(B
+\e$B9T$,\e(B @samp{Xref:full} \e$B$G$J$$$J$i$P!"%K%e!<%9$N4IM}<T$,354Q%U%!%$%k$K\e(B
+@code{Xref} \e$BMs$r4^$`$h$&$K$9$k$^$G!"%K%e!<%94IM}<T$K6+$S!"5c$-IU$/;v$rB3\e(B
+\e$B$1$k$Y$-$G$7$g$&!#\e(B
 
 @vindex gnus-nov-is-evil
 Gnus \e$B$K$$$D$G$b@5$7$$\e(B @code{Xref} \e$B$r<hF@$9$k$h$&$K$5$;$?$$$N$G$"$l$P!"\e(B
@@ -7970,49 +8543,48 @@ Gnus \e$B$K$$$D$G$b@5$7$$\e(B @code{Xref} \e$B$r<hF@$9$k$h$&$K$5$;$?$$$N$G$"$l$P!"\e
 
 \e$BBeBX<jCJ$KIU$$$F$O\e(B @pxref{Duplicate Suppression} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 
-
 @node Duplicate Suppression
 @section \e$B=EJ#$NM^@)\e(B
 
-\e$B%G%#%U%)%k%H$G$O\e(B gnus \e$B$OAj8_Ej9F5!9=$rMxMQ$9$k;v$K$h$C$F!"F1$85-;v$r\e(B2\e$B2s0J\e(B
-\e$B>eFI$^$J$$$h$&$K$7$h$&$H$7$^$9\e(B (@pxref{Crosspost Handling})\e$B!#$7$+$7!"$=$N\e(B
-\e$BC1=c$G8z2LE*$JJ}K!$O!"$$$m$$$m$JM}M3$K$h$j!"K~B-$9$k7k2L$r$b$?$i$5$J$$$+$b\e(B
-\e$BCN$l$^$;$s!#\e(B
+\e$B%G%#%U%)%k%H$G$O\e(B gnus \e$B$OAj8_Ej9F5!9=$rMxMQ$9$k;v$K$h$C$F!"F1$85-;v\e(B
+\e$B$rFs2s0J>eFI$^$J$$$h$&$K$7$h$&$H$7$^$9\e(B (@pxref{Crosspost Handling})\e$B!#$7\e(B
+\e$B$+$7!"$=$NC1=c$G8z2LE*$JJ}K!$O!"$$$m$$$m$JM}M3$K$h$j!"K~B-$9$k7k2L$r$b$?\e(B
+\e$B$i$5$J$$$+$bCN$l$^$;$s!#\e(B
 
 @enumerate
 @item
-@sc{nntp} \e$B%5!<%P!<$O\e(B @code{Xref} \e$BMs$N@8@.$K<:GT$9$k$+$bCN$l$^$;$s!#$3$l$O\e(B
-\e$B0-$$;v$G!"$"$^$j5/$3$j$^$;$s!#\e(B
+@sc{nntp} \e$B%5!<%P!<$O\e(B @code{Xref} \e$BMs$N@8@.$K<:GT$9$k$+$bCN$l$^$;$s!#$3$l\e(B
+\e$B$O0-$$;v$G!"$"$^$j5/$3$j$^$;$s!#\e(B
 
 @item
-@sc{nntp} \e$B%5!<%P!<$O\e(B @file{.overview} \e$B%G!<%?%Y!<%9$K\e(B @code{Xref} \e$BMs$r4^$a\e(B
-\e$B$k$N$K<:GT$9$k$+$bCN$l$^$;$s!#$3$l$O0-$$;v$G!"Hs>o$KNI$/$"$k;v$G$9!"$"$!Ha\e(B
-\e$B$7$$!#\e(B
+@sc{nntp} \e$B%5!<%P!<$O\e(B @file{.overview} \e$B%G!<%?%Y!<%9$K\e(B @code{Xref} \e$BMs$r4^\e(B
+\e$B$a$k$N$K<:GT$9$k$+$bCN$l$^$;$s!#$3$l$O0-$$;v$G!"Hs>o$KNI$/$"$k;v$G$9!"$"$!\e(B
+\e$BHa$7$$!#\e(B
 
 @item
-\e$BF1$8%0%k!<%W!J$b$7$/$O$$$/$D$+$N4XO"$7$?%0%k!<%W!K$r0c$C$?\e(B @sc{nntp} \e$B%5!<\e(B
+\e$BF1$8%0%k!<%W\e(B (\e$B$b$7$/$O$$$/$D$+$N4XO"$7$?%0%k!<%W\e(B) \e$B$r0c$C$?\e(B @sc{nntp} \e$B%5!<\e(B
 \e$B%P!<$+$iFI$s$G$$$k$+$b$7$l$^$;$s!#\e(B
 
 @item
 \e$B%0%k!<%W$KEj9F$5$l$?5-;v$H=EJ#$9$k%a!<%k$r<u$1<h$C$?$+$b$7$l$^$;$s!#\e(B
 @end enumerate
 
-@code{Xref} \e$B$N07$$$K<:GT$9$k>u67$OB>$K$b$"$j$^$9$,!"$3$l$i#4$D$,$H$F$bNI$/\e(B
-\e$B$"$k>u67$G$9!#\e(B
+@code{Xref} \e$B$N07$$$K<:GT$9$k>u67$OB>$K$b$"$j$^$9$,!"$3$l$i;M$D$,$H$F$bNI\e(B
+\e$B$/$"$k>u67$G$9!#\e(B
 
-\e$B$b$7!"K\Ev$K$b$7$b\e(B @code{Xref} \e$B$N07$$$K<:GT$7$?$i!"\e(B@dfn{\e$B=EJ#M^@)\e(B}\e$B$K@Z$jBX\e(B
-\e$B$($k;v$r9M$($k$+$b$7$l$^$;$s!#$=$&$9$l$P!"\e(Bgnus \e$B$O$"$J$?$,FI$s$@A4$F$N5-;v\e(B
-\e$B$+$=$&$G$J$1$l$P!"4{FI$N0u$,IU$$$?A4$F$N5-;v$N\e(B @code{Message-ID} \e$B$r5-21$7!"\e(B
-\e$B$=$l$+$i!"KbK!$N$h$&$K!"$=$N8e$N$=$l$i$H=P2q$C$?A4$F$N>l9g$K!"4{FI$N0u$rIU\e(B
-\e$B$1$^$9!=!=\e(B@emph{\e$BA4$F\e(B}\e$B$N%0%k!<%W$G!#$3$N5!9=$r;H$&$N$OHs>o$KHs8zN(E*$G$9$,!"\e(B
-\e$B2aEY$KHs8zN($J$o$1$G$O$"$j$^$;$s!#$b$A$m$sF1$85-;v$r0l2s0J>eFI$`$[$&$,9%$^\e(B
-\e$B$7$$$G$9!#\e(B
+\e$B$b$7!"K\Ev$K$b$7$b\e(B @code{Xref} \e$B$N07$$$K<:GT$7$?$i!"\e(B@dfn{\e$B=EJ#M^@)\e(B}\e$B$K@Z$j\e(B
+\e$BBX$($k;v$r9M$($k$+$b$7$l$^$;$s!#$=$&$9$l$P!"\e(Bgnus \e$B$O$"$J$?$,FI$s$@A4$F$N\e(B
+\e$B5-;v$+$=$&$G$J$1$l$P!"4{FI$N0u$,IU$$$?A4$F$N5-;v$N\e(B @code{Message-ID} \e$B$r\e(B
+\e$B5-21$7!"$=$l$+$i!"KbK!$N$h$&$K!"$=$N8e$N$=$l$i$H=P2q$C$?A4$F$N>l9g$K!"4{\e(B
+\e$BFI$N0u$rIU$1$^$9!=!=\e(B@emph{\e$BA4$F\e(B}\e$B$N%0%k!<%W$G!#$3$N5!9=$r;H$&$N$OHs>o$KHs\e(B
+\e$B8zN(E*$G$9$,!"2aEY$KHs8zN($J$o$1$G$O$"$j$^$;$s!#$b$A$m$sF1$85-;v$r0l2s0J\e(B
+\e$B>eFI$`$[$&$,9%$^$7$$$G$9!#\e(B
 
-\e$B=EJ#M^@)$O$"$^$jA!:Y$J$b$N$G$O$"$j$^$;$s!#$I$A$i$+$H$$$&$H!"BgDH$N$h$&$J$b\e(B
-\e$B$N$G$9!#$=$l$OHs>o$KC1=c$JJ}K!$GF0:n$7$F$$$^$9!=!=$b$75-;v$K4{FI$N0u$rIU$1\e(B
-\e$B$l$P!"$=$l$O$3$N\e(B Message-ID \e$B$r\e(B \e$B%-%c%C%7%e$K2C$($^$9!#<!$K$3$N\e(BMessage-ID \e$B$K\e(B
-\e$B$G$"$C$?$H$-$O!"\e(B@samp{M} \e$B0u$K$h$C$F5-;v$K4{FI$N0u$rIU$1$^$9!#$=$l$O$=$N5-\e(B
-\e$B;v$,$I$N%0%k!<%W$K$"$k$+$O5$$K$7$^$;$s!#\e(B
+\e$B=EJ#M^@)$O$"$^$jA!:Y$J$b$N$G$O$"$j$^$;$s!#$I$A$i$+$H$$$&$H!"BgDH$N$h$&$J\e(B
+\e$B$b$N$G$9!#$=$l$OHs>o$KC1=c$JJ}K!$GF0:n$7$F$$$^$9!=!=$b$75-;v$K4{FI$N0u$r\e(B
+\e$BIU$1$l$P!"$=$l$O$3$N\e(B Message-ID \e$B$r\e(B \e$B%-%c%C%7%e$K2C$($^$9!#<!$K$3\e(B
+\e$B$N\e(B Message-ID \e$B$K$G$"$C$?$H$-$O!"\e(B@samp{M} \e$B0u$K$h$C$F5-;v$K4{FI$N0u$rIU$1\e(B
+\e$B$^$9!#$=$l$O$=$N5-;v$,$I$N%0%k!<%W$K$"$k$+$O5$$K$7$^$;$s!#\e(B
 
 @table @code
 @item gnus-suppress-duplicates
@@ -8021,9 +8593,9 @@ Gnus \e$B$K$$$D$G$b@5$7$$\e(B @code{Xref} \e$B$r<hF@$9$k$h$&$K$5$;$?$$$N$G$"$l$P!"\e
 
 @item gnus-save-duplicate-list
 @vindex gnus-save-duplicate-list
-@code{nil} \e$B$G$J$1$l$P!"=EJ#$N%j%9%H$r%U%!%$%k$KJ]B8$7$^$9!#$3$l$O5/F0$H=*\e(B
-\e$BN;$N;~4V$rD9$/$7$^$9$N$G!"=i4|>uBV$G$O\e(B @code{nil} \e$B$G$9!#$7$+$7!"$3$l$OC10l\e(B
-\e$B$N\e(B gnus \e$B$N<B9T4|$GFI$^$l$?=EJ#5-;v$@$1$,M^@)$5$l$k$H$$$&;v$G$9!#\e(B
+@code{nil} \e$B$G$J$1$l$P!"=EJ#$N%j%9%H$r%U%!%$%k$KJ]B8$7$^$9!#$3$l$O5/F0$H\e(B
+\e$B=*N;$N;~4V$rD9$/$7$^$9$N$G!"=i4|>uBV$G$O\e(B @code{nil} \e$B$G$9!#$7$+$7!"$3$l$O\e(B
+\e$BC10l$N\e(B gnus \e$B$N<B9T4|$GFI$^$l$?=EJ#5-;v$@$1$,M^@)$5$l$k$H$$$&;v$G$9!#\e(B
 
 @item gnus-duplicate-list-length
 @vindex gnus-duplicate-list-length
@@ -8032,62 +8604,60 @@ Gnus \e$B$K$$$D$G$b@5$7$$\e(B @code{Xref} \e$B$r<hF@$9$k$h$&$K$5$;$?$$$N$G$"$l$P!"\e
 
 @item gnus-duplicate-file
 @vindex gnus-duplicate-file
-\e$B=EJ#M^@)$N%j%9%H$rC_@Q$7$F$*$/%U%!%$%k$NL>A0$G$9!#%G%#%U%)%k%H$O\e(B
-@file{~/News/suppression} \e$B$G$9!#\e(B
+\e$B=EJ#M^@)$N%j%9%H$rC_@Q$7$F$*$/%U%!%$%k$NL>A0$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @file{~/News/suppression} \e$B$G$9!#\e(B
 @end table
 
-\e$B2?EY$b\e(B gnus \e$B$r=*N;$7$F5/F0$9$k798~$,$"$k$N$G$"$l$P!"$*$=$i$/\e(B
-@code{gnus-save-duplicate-list} \e$B$r\e(B @code{t} \e$B$K$9$k$N$ONI$$9M$($G$7$g$&!#\e(B
-\e$B$b$7\e(B gnus \e$B$rB3$1$F2?=54V$bAv$i$;$F$*$/$N$G$"$l$P!"$=$l$r\e(B @code{nil} \e$B$K$9\e(B
-\e$B$k$+$b$7$l$^$;$s!#0lJ}$G!"%j%9%H$rJ]B8$9$k;v$O5/F0$H=*N;$r$:$C$HCY$/$7$^\e(B
-\e$B$9$N$G!"$h$/\e(B gnus \e$B$r=*N;$7$F5/F0$9$k$N$G$"$l$P!"\e(B
+\e$B2?EY$b\e(B gnus \e$B$r=*N;$7$F5/F0$9$k798~$,$"$k$N$G$"$l$P!"$*$=$i\e(B
+\e$B$/\e(B @code{gnus-save-duplicate-list} \e$B$r\e(B @code{t} \e$B$K$9$k$N$ONI$$9M$($G$7$g\e(B
+\e$B$&!#$b$7\e(B gnus \e$B$rB3$1$F2?=54V$bAv$i$;$F$*$/$N$G$"$l$P!"$=$l\e(B
+\e$B$r\e(B @code{nil} \e$B$K$9$k$+$b$7$l$^$;$s!#0lJ}$G!"%j%9%H$rJ]B8$9$k;v$O5/F0$H=*\e(B
+\e$BN;$r$:$C$HCY$/$7$^$9$N$G!"$h$/\e(B gnus \e$B$r=*N;$7$F5/F0$9$k$N$G$"$l$P!"\e(B
 @code{gnus-save-duplicate-list} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$Y$-$G$"$k$H$$$&\e(B
 \e$B;v$K$J$j$^$9!#$&!<$`!#;d$O$"$J$?$,$I$&$9$k$+$KG$$;$?$$!"$H;W$$$^$9!#\e(B
 
-
 @node The Article Buffer
 @chapter \e$B5-;v%P%C%U%!\e(B
 @cindex article buffer
 
-\e$B5-;v$O0l$D$7$+$J$$5-;v%P%C%U%!$KI=<($5$l$^$9!#A4$F$N35N,%P%C%U%!$O!J\e(Bgnus
-\e$B$K6&M-$7$J$$$h$&$K;X<($7$J$$8B$j!KF1$85-;v%P%C%U%!$r6&M-$7$^$9!#\e(B
+\e$B5-;v$O0l$D$7$+$J$$5-;v%P%C%U%!$KI=<($5$l$^$9!#A4$F$N35N,%P%C%U%!\e(B
+\e$B$O\e(B (gnus \e$B$K6&M-$7$J$$$h$&$K;X<($7$J$$8B$j\e(B) \e$BF1$85-;v%P%C%U%!$r6&M-$7$^$9!#\e(B
 
 @menu
-* Hiding Headers::        \e$B$I$N%X%C%@!<$rI=<($9$k$+$r7h$a$k!#\e(B
-* Using MIME::            @sc{mime} \e$B5-;v$H$7$F8+$;$k!#\e(B
-* Customizing Articles::  \e$B5-;v$N8+1I$($r;EN)$F$k!#\e(B
-* Article Keymap::        \e$B5-;v%P%C%U%!$G;H$($k%-!<A`:n!#\e(B
-* Misc Article::          \e$B$=$NB>!#\e(B
+* Hiding Headers::       \e$B$I$N%X%C%@!<$rI=<($9$k$+$r7h$a$k\e(B
+* Using MIME::           @sc{mime} \e$B5-;v$H$7$F8+$;$k\e(B
+* Customizing Articles:: \e$B5-;v$N8+1I$($r;EN)$F$k\e(B
+* Article Keymap::       \e$B5-;v%P%C%U%!$G;H$($k%-!<A`:n\e(B
+* Misc Article::         \e$B$=$NB>\e(B
 @end menu
 
-
 @node Hiding Headers
 @section \e$BM>J,$J%X%C%@!<$r1#$9\e(B
 @cindex hiding headers
 @cindex deleting headers
 
-\e$B3F5-;v$NF,$NItJ,$O%X%C%@!<\e(B(@dfn{head})\e$B$H8F$P$l$^$9!J;D$j$NItJ,$O%\%G%#\e(B
-(@dfn{body})\e$B$G$9!#$9$G$K$*5$$E$-$G$7$g$&$,!K!#\e(B
+\e$B3F5-;v$NF,$NItJ,$O%X%C%@!<\e(B(@dfn{head})\e$B$H8F$P$l$^$9\e(B (\e$B;D$j$NItJ,$O%\\e(B
+\e$B%G%#\e(B (@dfn{body})\e$B$G$9!#$9$G$K$*5$$E$-$G$7$g$&$,\e(B)\e$B!#\e(B
 
 @vindex gnus-show-all-headers
-\e$B%X%C%@!<$K$O$?$/$5$s$NJXMx$J>pJs$,4^$^$l$F$$$^$9!#5-;v$r=q$$$??M$NL>A0!"$=\e(B
-\e$B$l$,=q$+$l$?F|IU!"5-;v$NI=Bj$J$I$G$9!#$3$l$O$H$F$bNI$$$s$G$9$,!"%X%C%@!<$K\e(B
-\e$B$OBgItJ,$N?M$K$O8+$?$/$b$J$$>pJs!=!=5-;v$,$"$J$?$N$H$3$m$KCe$/$^$G$I$s$J%7\e(B
-\e$B%9%F%`$r7PM3$7$F$-$?$+!"\e(B@code{Message-ID}, @code{References} \e$B$J$I$J$I!D$b\e(B
-\e$B$&$d$s$J$C$A$c$&$/$i$$!=!=$b$?$/$5$s4^$^$l$F$$$^$9!#$?$V$s$"$J$?$O$3$l$i$N\e(B
-\e$B9T$O$$$/$D$+<h$j=|$$$F$7$^$$$?$$$H;W$&$G$7$g$&!#$b$7$3$l$i$N9T$rA4$F5-;v%P%C\e(B
-\e$B%U%!Fb$K;D$7$F$*$-$?$1$l$P!"\e(B@code{gnus-show-all-headers} \e$B$r\e(B @code{t} \e$B$K@_\e(B
-\e$BDj$7$F$/$@$5$$!#\e(B
+\e$B%X%C%@!<$K$O$?$/$5$s$NJXMx$J>pJs$,4^$^$l$F$$$^$9!#5-;v$r=q$$$??M$NL>A0!"\e(B
+\e$B$=$l$,=q$+$l$?F|IU!"5-;v$NI=Bj$J$I$G$9!#$3$l$O$H$F$bNI$$$s$G$9$,!"%X%C%@!<\e(B
+\e$B$K$OBgItJ,$N?M$K$O8+$?$/$b$J$$>pJs!=!=5-;v$,$"$J$?$N$H$3$m$KCe$/$^$G$I$s\e(B
+\e$B$J%7%9%F%`$r7PM3$7$F$-$?$+!"\e(B@code{Message-ID}, @code{References} \e$B$J$I$J\e(B
+\e$B$I!D$b$&$d$s$J$C$A$c$&$/$i$$!=!=$b$?$/$5$s4^$^$l$F$$$^$9!#$?$V$s$"$J$?$O\e(B
+\e$B$3$l$i$N9T$O$$$/$D$+<h$j=|$$$F$7$^$$$?$$$H;W$&$G$7$g$&!#$b$7$3$l$i$N9T$r\e(B
+\e$BA4$F5-;v%P%C%U%!Fb$K;D$7$F$*$-$?$1$l$P!"\e(B@code{gnus-show-all-headers} \e$B$r\e(B
+@code{t} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
 
-Gnus \e$B$O%X%C%@!<$rA*$jJ,$1$k$?$a$K\e(B2\e$B$D$NJQ?t$rMQ0U$7$F$$$^$9!#\e(B
+Gnus \e$B$O%X%C%@!<$rA*$jJ,$1$k$?$a$KFs$D$NJQ?t$rMQ0U$7$F$$$^$9!#\e(B
 
 @table @code
 
 @item gnus-visible-headers
 @vindex gnus-visible-headers
-\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$I$N%X%C%@!<$r5-;v%P%C%U%!$K\e(B
-\e$B;D$7$?$$$+$r;XDj$9$k@55,I=8=$G$"$k$H$_$J$5$l$^$9!#$3$NJQ?t$K%^%C\e(B
-\e$B%A$7$J$$%X%C%@!<$OA4$F1#$5$l$^$9!#\e(B
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$I$N%X%C%@!<$r5-;v%P%C%U%!$K;D$7$?$$\e(B
+\e$B$+$r;XDj$9$k@55,I=8=$G$"$k$H$_$J$5$l$^$9!#$3$NJQ?t$K%^%C%A$7$J$$%X%C%@!<\e(B
+\e$B$OA4$F1#$5$l$^$9!#\e(B
 
 \e$BNc$($P!"5-;v$r=q$$$??M$NL>A0$HI=Bj$N$_$r8+$?$1$l$P!"$3$&;XDj$7$^$9!#\e(B
 
@@ -8100,13 +8670,13 @@ Gnus \e$B$O%X%C%@!<$rA*$jJ,$1$k$?$a$K\e(B2\e$B$D$NJQ?t$rMQ0U$7$F$$$^$9!#\e(B
 
 @item gnus-ignored-headers
 @vindex gnus-ignored-headers
-\e$B$3$NJQ?t$O\e(B @code{gnus-visible-headers} \e$B$NH?BP$G$9!#$3$NJQ?t$,@_Dj$5$l$F$$\e(B
-\e$B$l$P!J$+$D\e(B @code{gnus-visible-headers} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!K!"$3$l$O1#\e(B
-\e$B$7$?$$%X%C%@!<9TA4$F$K%^%C%A$9$k@55,I=8=$G$"$k$H$_$J$5$l$^$9!#$3$NJQ?t$K%^%C\e(B
-\e$B%A$7$J$$A4$F$N%X%C%@!<9T$OI=<($5$l$^$9!#\e(B
+\e$B$3$NJQ?t$O\e(B @code{gnus-visible-headers} \e$B$NH?BP$G$9!#$3$NJQ?t$,@_Dj$5$l$F\e(B
+\e$B$$$l$P\e(B (\e$B$+$D\e(B @code{gnus-visible-headers} \e$B$,\e(B @code{nil} \e$B$G$"$l$P\e(B)\e$B!"$3$l$O\e(B
+\e$B1#$7$?$$%X%C%@!<9TA4$F$K%^%C%A$9$k@55,I=8=$G$"$k$H$_$J$5$l$^$9!#$3$NJQ?t\e(B
+\e$B$K%^%C%A$7$J$$A4$F$N%X%C%@!<9T$OI=<($5$l$^$9!#\e(B
 
 \e$BNc$($P!"C1$K\e(B @code{References} \e$BMs$H\e(B @code{Xref} \e$BMs$N$_$r>C$75n$j$?$1$l$P!"\e(B
-\e$B0J2<$N$h$&$K$7$^$9!'\e(B
+\e$B0J2<$N$h$&$K$7$^$9\e(B:
 
 @lisp
 (setq gnus-ignored-headers "^References:\\|^Xref:")
@@ -8121,10 +8691,10 @@ Gnus \e$B$O%X%C%@!<$rA*$jJ,$1$k$?$a$K\e(B2\e$B$D$NJQ?t$rMQ0U$7$F$$$^$9!#\e(B
 @end table
 
 @vindex gnus-sorted-header-list
-Gnus \e$B$O%X%C%@!<$NJB$YBX$(\e(B(sort)\e$B$b9T$$$^$9!J$3$l$O%G%#%U%)%k%H$G9T$o$l$^$9!K!#\e(B
-\e$B$3$NJB$YBX$($O\e(B @code{gnus-sorted-header-list} \e$BJQ?t$r@_Dj$9$k$3$H$G@)8f$9$k\e(B
-\e$B$3$H$,$G$-$^$9!#$3$l$O%X%C%@!<$r$I$&$$$&=g=x$GI=<($9$k$+$r;XDj$9$k@55,I=8=\e(B
-\e$B$N%j%9%H$G$9!#\e(B
+Gnus \e$B$O%X%C%@!<$NJB$YBX$(\e(B(sort)\e$B$b9T$$$^$9\e(B (\e$B$3$l$O%G%#%U%)%k%H$G9T$o$l$^\e(B
+\e$B$9\e(B)\e$B!#$3$NJB$YBX$($O\e(B @code{gnus-sorted-header-list} \e$BJQ?t$r@_Dj$9$k$3$H$G\e(B
+\e$B@)8f$9$k$3$H$,$G$-$^$9!#$3$l$O%X%C%@!<$r$I$&$$$&=g=x$GI=<($9$k$+$r;XDj$9\e(B
+\e$B$k@55,I=8=$N%j%9%H$G$9!#\e(B
 
 \e$BNc$($P!"5-;v$NCx<TL>$r:G=i$K!"<!$KI=Bj$rI=<($7$?$1$l$P!"$3$s$JIw\e(B
 \e$B$K$J$k$G$7$g$&!#\e(B
@@ -8139,11 +8709,11 @@ Gnus \e$B$O%X%C%@!<$NJB$YBX$(\e(B(sort)\e$B$b9T$$$^$9!J$3$l$O%G%#%U%)%k%H$G9T$o$l$^
 
 @findex gnus-article-hide-boring-headers
 @vindex gnus-boring-article-headers
-@code{gnus-article-hide-boring-headers} \e$B$r\e(B@code{head} \e$B$K@_Dj$9$k$3$H$K$h$C\e(B
-\e$B$F!"$b$C$H$D$^$i$J$$%X%C%@!<$r1#$9$3$H$,$G$-$^$9!#$3$N4X?t$,2?$r$9$k$+$O\e(B
-@code{gnus-boring-article-headers} \e$BJQ?t$K0MB8$7$^$9!#$3$NJQ?t$O%j%9%H$G\e(B
-\e$B$9$,!"$3$N%j%9%H$K$O<B:]$N%X%C%@!<$NL>A0$,F~$k$N$G$O$"$j$^$;$s!#Be$o$j$K\e(B
-gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6$^$J!V$D$^$i$J$$>r7o!W\e(B
+@code{gnus-article-hide-boring-headers} \e$B$r\e(B @code{head} \e$B$K@_Dj$9$k$3$H$K\e(B
+\e$B$h$C$F!"$b$C$H$D$^$i$J$$%X%C%@!<$r1#$9$3$H$,$G$-$^$9!#$3$N4X?t$,2?$r$9$k\e(B
+\e$B$+$O\e(B @code{gnus-boring-article-headers} \e$BJQ?t$K0MB8$7$^$9!#$3$NJQ?t$O%j%9\e(B
+\e$B%H$G$9$,!"$3$N%j%9%H$K$O<B:]$N%X%C%@!<$NL>A0$,F~$k$N$G$O$"$j$^$;$s!#Be$o\e(B
+\e$B$j$K\e(B gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6$^$J!V$D$^$i$J$$>r7o!W\e(B
 @dfn{boring conditions} \e$B$N%j%9%H$r;XDj$7$^$9!#\e(B
 
 \e$B$3$N>r7o$K$O0J2<$N$h$&$J$b$N$,$"$j$^$9!#\e(B
@@ -8153,19 +8723,20 @@ gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6$^$J!V$D$^$i$J$$>r7o!W\e(B
 @item newsgroups
 @code{Newsgroups} \e$BMs$,8=:_$N%0%k!<%WL>$7$+4^$s$G$$$J$$>l9g$K$O>C5n$7$^$9!#\e(B
 @item followup-to
-@code{Followup-To} \e$BMs$,\e(B @code{Newsgroups} \e$BMs$HF10l$G$"$k>l9g$K$O>C5n$7$^$9!#\e(B
+@code{Followup-To} \e$BMs$,\e(B @code{Newsgroups} \e$BMs$HF10l$G$"$k>l9g$K$O>C5n$7$^\e(B
+\e$B$9!#\e(B
 @item reply-to
-@code{Reply-To} \e$BMs$,\e(B @code{From} \e$BMs$HF1$8%"%I%l%9$r<($7$F$$$k>l9g$K$O>C5n\e(B
-\e$B$7$^$9!#\e(B
+@code{Reply-To} \e$BMs$,\e(B @code{From} \e$BMs$HF1$8%"%I%l%9$r<($7$F$$$k>l9g$K$O>C\e(B
+\e$B5n$7$^$9!#\e(B
 @item date
-\e$B$=$N5-;v$,2a5n#3F|0JFb$N$b$N$G$"$l$P!"\e(B@code{Date} \e$BMs$r>C5n$7$^$9!#\e(B
+\e$B$=$N5-;v$,2a5n;0F|0JFb$N$b$N$G$"$l$P!"\e(B@code{Date} \e$BMs$r>C5n$7$^$9!#\e(B
 @item long-to
 @code{To} \e$BMs$,$"$^$j$K$bD9$$>l9g$K$O>C5n$7$^$9!#\e(B
 @item many-to
 @code{To} \e$BMs$,0l$D$h$j$bB?$1$l$P!"$=$l$i$rA4$F>C5n$7$^$9!#\e(B
 @end table
 
-\e$B>e5-$N:G=i$N#4$D$NMWAG$rF~$l$?$1$l$P!"$3$s$JIw$K$J$j$^$9!#\e(B
+\e$B>e5-$N:G=i$N;M$D$NMWAG$rF~$l$?$1$l$P!"$3$s$JIw$K$J$j$^$9!#\e(B
 
 @lisp
 (setq gnus-boring-article-headers
@@ -8174,7 +8745,6 @@ gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6$^$J!V$D$^$i$J$$>r7o!W\e(B
 
 \e$B$3$l$O$3$NJQ?t$N%G%#%U%)%k%HCM$G$b$"$j$^$9!#\e(B
 
-
 @node Using MIME
 @section @sc{mime} \e$B$r;H$&\e(B
 @cindex @sc{mime}
@@ -8185,49 +8755,49 @@ gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6$^$J!V$D$^$i$J$$>r7o!W\e(B
 \e$B0lJ}!"\e(B@sc{mime} \e$B$H$O!"0UL#$bL5$/5-;v$rId9f2=$9$kI8=`$G$"$j!"$=$N\e(B
 \e$B$?$a$KA4$F$N%K%e!<%9%j!<%@$,62I]$G;`$s$G$7$^$&$b$N$G$9!#\e(B
 
-@sc{mime} \e$B$O$=$N5-;v$,$I$s$JJ8;z=89g$r;HMQ$7$F$$$k$+!"$=$NJ8;z$r$I$&Id9f2=\e(B
-\e$B$7$F$$$k$+$r;XDj$9$k$3$H$,$G$-!"$5$i$K$O3($d$=$NB>$N$_$@$i$J$b$N$rL5<Y5$$J\e(B
-\e$B3J9%$N5-;v$GKd$a9~$`$3$H$5$(2DG=$K$7$^$9!#\e(B
+@sc{mime} \e$B$O$=$N5-;v$,$I$s$JJ8;z=89g$r;HMQ$7$F$$$k$+!"$=$NJ8;z$r$I$&Id9f\e(B
+\e$B2=$7$F$$$k$+$r;XDj$9$k$3$H$,$G$-!"$5$i$K$O3($d$=$NB>$N$_$@$i$J$b$N$rL5<Y\e(B
+\e$B5$$J3J9%$N5-;v$GKd$a9~$`$3$H$5$(2DG=$K$7$^$9!#\e(B
 
 @vindex gnus-show-mime
 @vindex gnus-article-display-method-for-mime
 @vindex gnus-strict-mime
 @findex gnus-article-display-mime-message
 Gnus \e$B$O\e(B @code{gnus-article-display-method-for-mime} \e$B$K5-;v$r2!$7IU$1$k$3\e(B
-\e$B$H$G\e(B @sc{mime} \e$B$r07$$$^$9!#$3$N=i4|CM$O\e(B
-@code{gnus-article-display-mime-message} \e$B$G$9!#$3$N4X?t$O\e(B SEMI MIME-View
-\e$B%W%m%0%i%`$r8F$S=P$7$F<B:]$N=hM}$r9T$$$^$9!#\e(BSEMI MIME-View \e$B$K4X$9$k>\$7\e(B
-\e$B$$>pJs$O!"%^%K%e%"%k$r;2>H$7$F$/$@$5$$!J$^$@$J$$$1$I\e(B(;_;)\e$B!K!#\e(B
-
-@sc{mime} \e$B$r>o$K;HMQ$7$?$1$l$P!"\e(B@code{gnus-show-mime} \e$B$r\e(B
-@code{t} \e$B$K@_Dj$7$F$/$@$5$$!#$7$+$7!"\e(B@code{gnus-strict-mime} \e$B$,\e(B
-@code{nil} \e$B0J30$G$"$l$P!"\e(B@sc{mime} \e$B=hM}$O5-;vCf$K\e(B @sc{mime} \e$B%X%C\e(B
-\e$B%@!<$,$"$k$H$-$N$_;HMQ$5$l$^$9!#\e(B@code{gnus-show-mime} \e$B$r@_Dj$7$F\e(B
-\e$B$$$k$H!"1?$,0-$$$H5-;v%P%C%U%!$K$O8N>c$7$?$h$&$J2hLL$,8+$($k$3$H\e(B
-\e$B$b$"$k$G$7$g$&!#$3$l$OHr$1$h$&$,$"$j$^$;$s!#\e(B
-
-GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,%P%C\e(B
-\e$B%U%!$K$*$$$F@Z$jBX$(5!G=$r;H$&$H$$$&$N$,:GA1$+$bCN$l$^$;$s!JNc$($P!"\e(B
-@samp{alt.sing-a-long} \e$B%0%k!<%W$KF~$k$H!"$"$J$?$N5$$E$+$J$$$&$A$K\e(B
-@sc{mime} \e$B$O5-;vCf$N%5%&%s%I%U%!%$%k$rI|9f$7$F!"2?$d$i2x$7$2$JD9$$D9$$2N$,\e(B
-\e$B$"$J$?$N%9%T!<%+!<$+$iBg2;6A$GN.$l=P$7!"$"$J$?$O%\%j%e!<%`%\%?%s$r8+$D$1$i\e(B
-\e$B$l$:!"$H$$$&$N$O$=$s$J$b$N$O$b$H$b$H$D$$$F$J$$$+$i$G!"$_$s$J$O$"$J$?$NJ}$r\e(B
-\e$BbK$_$O$8$a!"$"$J$?$O%W%m%0%i%`$r;_$a$h$&$H$9$k$1$I$G$-$J$/$F!"%\%j%e!<%`$r\e(B
-\e$B@)8f$9$k%W%m%0%i%`$b8+$D$1$i$l$J$/$F!"$=$7$FIt20Cf$NA40w$OFMA3$"$J$?$N$3$H\e(B
-\e$B$r7ZJN$N4c:9$7$G8+$k$h$&$K$J$C$F$7$^$$!"$"$J$?$O$A$g$C$HLLGr$/$J$$;W$$$r$9\e(B
-\e$B$k!"$H$+!K!#\e(B
-
-\e$B8=<B$N=PMh;v$H<B:_$N?MJ*$KN`;w$7$F$$$k$+$b$7$l$^$;$s$,!"$3$l$OA4\e(B
-\e$B$F%[%s%H$N$3$H$G$9!#$2$[$2$[!#\e(B
-
-\e$B$^$"!"$=$&$$$&Lu$G!"\e(Bgnus \e$B$G$O\e(B @code{metamail-buffer} \e$B$r;H$&$N$r;_$a$?Lu$G\e(B
-\e$B$9!#$=$&$$$&Lu$G!":#$G$O>o$K\e(B @code{gnus-show-mime} \e$B$r\e(B @code{nil} \e$B0J30$K$7\e(B
-\e$B$F$*$-!"<~$j$K?M$,$$$J$$;~$r8+7W$i$C$F5-;v%P%C%U%!$K8=$o$l$k%\%?%s$r2!$7$^\e(B
-\e$B$7$g$&!#\e(B
+\e$B$H$G\e(B @sc{mime} \e$B$r07$$$^$9!#$3$N=i4|CM\e(B
+\e$B$O\e(B @code{gnus-article-display-mime-message} \e$B$G$9!#$3$N4X?t\e(B
+\e$B$O\e(B SEMI MIME-View \e$B%W%m%0%i%`$r8F$S=P$7$F<B:]$N=hM}$r9T$$$^$9!#\e(B
+SEMI MIME-View \e$B$K4X$9$k>\$7$$>pJs$O!"%^%K%e%"%k$r;2>H$7$F$/$@$5$$\e(B (\e$B$^$@\e(B
+\e$B$J$$$1$I\e(B (;_;))\e$B!#\e(B
+
+@sc{mime} \e$B$r>o$K;HMQ$7$?$1$l$P!"\e(B
+@code{gnus-show-mime} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$F$/$@$5$$!#$7$+$7!"\e(B
+@code{gnus-strict-mime} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"\e(B@sc{mime} \e$B=hM}$O5-;v\e(B
+\e$BCf$K\e(B @sc{mime} \e$B%X%C%@!<$,$"$k$H$-$N$_;HMQ$5$l$^$9!#\e(B
+@code{gnus-show-mime} \e$B$r@_Dj$7$F$$$k$H!"1?$,0-$$$H5-;v%P%C%U%!$K$O8N>c$7\e(B
+\e$B$?$h$&$J2hLL$,8+$($k$3$H$b$"$k$G$7$g$&!#$3$l$OHr$1$h$&$,$"$j$^$;$s!#\e(B
+
+GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,\e(B
+\e$B%P%C%U%!$K$*$$$F@Z$jBX$(5!G=$r;H$&$H$$$&$N$,:GA1$+$bCN$l$^$;$s\e(B (\e$BNc$($P!"\e(B
+@samp{alt.sing-a-long} \e$B%0%k!<%W$KF~$k$H!"$"$J$?$N5$$E$+$J$$$&$A\e(B
+\e$B$K\e(B @sc{mime} \e$B$O5-;vCf$N%5%&%s%I%U%!%$%k$rI|9f$7$F!"2?$d$i2x$7$2$JD9$$D9\e(B
+\e$B$$2N$,$"$J$?$N%9%T!<%+!<$+$iBg2;6A$GN.$l=P$7!"$"$J$?$O%\%j%e!<%`%\%?%s$r\e(B
+\e$B8+$D$1$i$l$:!"$H$$$&$N$O$=$s$J$b$N$O$b$H$b$H$D$$$F$J$$$+$i$G!"$_$s$J$O$"\e(B
+\e$B$J$?$NJ}$rbK$_$O$8$a!"$"$J$?$O%W%m%0%i%`$r;_$a$h$&$H$9$k$1$I$G$-$J$/$F!"\e(B
+\e$B%\%j%e!<%`$r@)8f$9$k%W%m%0%i%`$b8+$D$1$i$l$J$/$F!"$=$7$FIt20Cf$NA40w$OFM\e(B
+\e$BA3$"$J$?$N$3$H$r7ZJN$N4c:9$7$G8+$k$h$&$K$J$C$F$7$^$$!"$"$J$?$O$A$g$C$HLL\e(B
+\e$BGr$/$J$$;W$$$r$9$k!"$H$+\e(B)\e$B!#\e(B
+
+\e$B8=<B$N=PMh;v$H<B:_$N?MJ*$KN`;w$7$F$$$k$+$b$7$l$^$;$s$,!"$3$l$OA4$F%[%s%H\e(B
+\e$B$N$3$H$G$9!#$2$[$2$[!#\e(B
+
+\e$B$^$"!"$=$&$$$&Lu$G!"\e(Bgnus \e$B$G$O\e(B @code{metamail-buffer} \e$B$r;H$&$N$r;_$a$?Lu\e(B
+\e$B$G$9!#$=$&$$$&Lu$G!":#$G$O>o$K\e(B @code{gnus-show-mime} \e$B$r\e(B @code{nil} \e$B0J30\e(B
+\e$B$K$7$F$*$-!"<~$j$K?M$,$$$J$$;~$r8+7W$i$C$F5-;v%P%C%U%!$K8=$o$l$k%\%?%s$r\e(B
+\e$B2!$7$^$7$g$&!#\e(B
 
 @c Also see @pxref{MIME Commands}.
 
-
 @node Customizing Articles
 @section \e$B5-;v$N%+%9%?%^%$%:\e(B
 @cindex article customization
@@ -8338,7 +8908,6 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 \e$B$"$j$^$;$s\e(B---\e$B2?$G$bJQ$($k$3$H$,$G$-$^$9!#$7$+$7!"%X%C%@!<$r>C$7$F$O$$$1\e(B
 \e$B$^$;$s!#\e(B
 
-
 @node Article Keymap
 @section \e$B5-;v$N%-!<A`:n\e(B
 
@@ -8366,44 +8935,42 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 @kindex C-c ^ (Article)
 @findex gnus-article-refer-article
 \e$B%+!<%=%k0LCV$,\e(B @code{Message-ID} \e$B$N6aJU$K$"$k$H$-$K\e(B @kbd{C-c ^} \e$B$r2!\e(B
-\e$B$9$H!"\e(Bgnus \e$B$O%5!<%P!<$+$i$=$N5-;v$r<h$C$F$3$h$&$H$7$^$9\e(B
-(@code{gnus-article-refer-article})\e$B!#\e(B
+\e$B$9$H!"\e(Bgnus \e$B$O%5!<%P!<$+$i$=$N5-;v$r<h$C$F$3$h$&$H$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-refer-article})\e$B!#\e(B
 
 @item C-c C-m
 @kindex C-c C-m (Article)
 @findex gnus-article-mail
-\e$B%+!<%=%k0LCV$N6a$/$K$"$k%"%I%l%9$KJV?.$rAw$j$^$9\e(B
-(@code{gnus-article-mail})\e$B!#@\F,0z?t$rM?$($k$H!"$=$N%a!<%k$K0zMQ\e(B
-\e$B$7$^$9!#\e(B
+\e$B%+!<%=%k0LCV$N6a$/$K$"$k%"%I%l%9$KJV?.$rAw$j$^\e(B
+\e$B$9\e(B (@code{gnus-article-mail})\e$B!#@\F,0z?t$rM?$($k$H!"$=$N%a!<%k$K0zMQ$7$^\e(B
+\e$B$9!#\e(B
 
 @item s
 @kindex s (Article)
 @findex gnus-article-show-summary
-\e$B%P%C%U%!$r:F9=@.$7$F!"35N,%P%C%U%!$r8+$($k$h$&$K$7$^$9\e(B
-(@code{gnus-article-show-summary})\e$B!#\e(B
+\e$B%P%C%U%!$r:F9=@.$7$F!"35N,%P%C%U%!$r8+$($k$h$&$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-show-summary})\e$B!#\e(B
 
 @item ?
 @kindex ? (Article)
 @findex gnus-article-describe-briefly
-\e$BMxMQ$G$-$k%-!<A`:n$N$4$/4JC1$J@bL@$r=P$7$^$9\e(B
-(@code{gnus-article-describe-briefly})\e$B!#\e(B
+\e$BMxMQ$G$-$k%-!<A`:n$N$4$/4JC1$J@bL@$r=P$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-describe-briefly})\e$B!#\e(B
 
 @item TAB
 @kindex TAB (Article)
 @findex gnus-article-next-button
-\e$B<!$N%\%?%s$,$"$l$P$=$3$K0\F0$7$^$9\e(B
-(@code{gnus-article-next-button})\e$B!#$3$l$O%\%?%s5!G=$r%*%s$K$7$F\e(B
-\e$B$$$k$H$-$N$_0UL#$r;}$A$^$9!#\e(B
+\e$B<!$N%\%?%s$,$"$l$P$=$3$K0\F0$7$^\e(B
+\e$B$9\e(B (@code{gnus-article-next-button})\e$B!#$3$l$O%\%?%s5!G=$r%*%s$K$7$F$$$k$H\e(B
+\e$B$-$N$_0UL#$r;}$A$^$9!#\e(B
 
 @item M-TAB
 @kindex M-TAB (Article)
 @findex gnus-article-prev-button
-\e$B0l$DA0$N%\%?%s$,$"$l$P$=$3$K0\F0$7$^$9\e(B
-(@code{gnus-article-prev-button})\e$B!#\e(B
+\e$B0l$DA0$N%\%?%s$,$"$l$P$=$3$K0\F0$7$^$9\e(B (@code{gnus-article-prev-button})\e$B!#\e(B
 
 @end table
 
-
 @node Misc Article
 @section \e$B5-;v$N$=$NB>\e(B
 
@@ -8411,9 +8978,9 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 
 @item gnus-single-article-buffer
 @vindex gnus-single-article-buffer
-@code{nil} \e$B0J30$G$"$l$P!"A4$F$N%0%k!<%W$KBP$7$FF1$85-;v%P%C%U%!$r;HMQ$7$^\e(B
-\e$B$9!J$3$l$O%G%#%U%)%k%H$G$9!K!#\e(B@code{nil} \e$B$G$"$l$P!"3F%0%k!<%WKh$N8GM-$N5-\e(B
-\e$B;v%P%C%U%!$r;}$D$h$&$K$J$j$^$9!#\e(B
+@code{nil} \e$B0J30$G$"$l$P!"A4$F$N%0%k!<%W$KBP$7$FF1$85-;v%P%C%U%!$r;HMQ$7\e(B
+\e$B$^$9\e(B (\e$B$3$l$O%G%#%U%)%k%H$G$9\e(B)\e$B!#\e(B@code{nil} \e$B$G$"$l$P!"3F%0%k!<%WKh$N8GM-$N\e(B
+\e$B5-;v%P%C%U%!$r;}$D$h$&$K$J$j$^$9!#\e(B
 
 @c FIXMETGNUS Default value is nil for T-gnus.
 @vindex gnus-article-decode-hook
@@ -8423,10 +8990,9 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 
 @vindex gnus-article-prepare-hook
 @item gnus-article-prepare-hook
-\e$B$3$N%U%C%/$O5-;v$,5-;v%P%C%U%!$K=q$-9~$^$l$?D>8e$K8F$S=P$5$l$^$9!#\e(B
-\e$B$3$l$O<g$K!"2?$+5-;v$NFbMF$K0MB8$9$k=hM}$r$9$k4X?t$N$?$a$KMQ0U$5\e(B
-\e$B$l$F$$$^$9!#$D$^$j5-;v%P%C%U%!$NFbMF$rJQ99$9$k$h$&$JL\E*$G;H$&$Y\e(B
-\e$B$-$G$O$J$$$G$7$g$&!#\e(B
+\e$B$3$N%U%C%/$O5-;v$,5-;v%P%C%U%!$K=q$-9~$^$l$?D>8e$K8F$S=P$5$l$^$9!#$3$l$O\e(B
+\e$B<g$K!"2?$+5-;v$NFbMF$K0MB8$9$k=hM}$r$9$k4X?t$N$?$a$KMQ0U$5$l$F$$$^$9!#$D\e(B
+\e$B$^$j5-;v%P%C%U%!$NFbMF$rJQ99$9$k$h$&$JL\E*$G;H$&$Y$-$G$O$J$$$G$7$g$&!#\e(B
 
 @item gnus-article-mode-hook
 @vindex gnus-article-mode-hook
@@ -8434,13 +9000,13 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 
 @item gnus-article-mode-syntax-table
 @vindex gnus-article-mode-syntax-table
-\e$B5-;v%P%C%U%!$GMQ$$$i$l$k%7%s%?%C%/%9%F!<%V%k$G$9!#$3$l$O\e(B
-@code{text-mode-syntax-table} \e$B$r$b$H$K=i4|2=$5$l$^$9!#\e(B
+\e$B5-;v%P%C%U%!$GMQ$$$i$l$k%7%s%?%C%/%9%F!<%V%k$G$9!#$3$l\e(B
+\e$B$O\e(B @code{text-mode-syntax-table} \e$B$r$b$H$K=i4|2=$5$l$^$9!#\e(B
 
 @vindex gnus-article-mode-line-format
 @item gnus-article-mode-line-format
 \e$B$3$NJQ?t$O\e(B @code{gnus-summary-mode-line-format} \e$B$HF1$89T$K=>$C$?MM<0J8;z\e(B
-\e$BNs$G$9\e(B (@pxref{Mode Line Formatting})\e$B!#$3$l$O0J2<$N0l$D$N3HD%$r=|$$$F!"\e(B
+\e$BNs$G$9\e(B (@pxref{Mode Line Formatting})\e$B!#$3$l$O0J2<$NFs$D$N3HD%$r=|$$$F!"\e(B
 \e$B$=$NJQ?t$HF1$8MM<0;XDj$r<uIU$1$^$9!#\e(B
 
 @table @samp
@@ -8455,17 +9021,16 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 @vindex gnus-break-pages
 
 @item gnus-break-pages
-\e$B2~JG\e(B @dfn{page breaking} \e$B$r9T$&$+$I$&$+$r@)8f$7$^$9!#$3$NJQ?t$,\e(B
-@code{nil} \e$B0J30$G$"$l$P!"5-;vCf$KJG6h@Z$jJ8;z$,8=$l$?>l=j$4$H$K\e(B
-\e$BJGJ,3d$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$PJGJ,$1$O9T$o$l$^$;$s!#\e(B
+\e$B2~JG\e(B @dfn{page breaking} \e$B$r9T$&$+$I$&$+$r@)8f$7$^$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"5-;vCf$KJG6h@Z$jJ8;z$,8=$l$?>l=j$4$H$KJGJ,3d\e(B
+\e$B$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$PJGJ,$1$O9T$o$l$^$;$s!#\e(B
 
 @item gnus-page-delimiter
 @vindex gnus-page-delimiter
-\e$B$3$l$,>e$G?($l$?6h@Z$jJ8;z$G$9!#%G%#%U%)%k%H$G$O\e(B @samp{^L} (\e$B%U%)!<\e(B
-\e$B%`%U%#!<%I!"2~JG\e(B) \e$B$G$9!#\e(B
+\e$B$3$l$,>e$G?($l$?6h@Z$jJ8;z$G$9!#%G%#%U%)%k%H$G$O\e(B @samp{^L} (\e$B%U%)!<%`\e(B
+\e$B%U%#!<%I!"2~JG\e(B) \e$B$G$9!#\e(B
 @end table
 
-
 @node Composing Messages
 @chapter \e$B%a%C%;!<%8$N:n@.\e(B
 @cindex composing messages
@@ -8477,31 +9042,29 @@ GNUS \e$B$d\e(B Gnus \e$B$G$O!"$3$N$?$A$N0-$$LdBj$G6C$+$5$l$J$$$h$&$K$9$k$K$O!"35N,
 @cindex post
 
 @kindex C-c C-c (\e$BEj9F\e(B)
-\e$BA4$F$NEj9F$H%a!<%k$NL?Na$O!"\e(B@kbd{C-c C-c} \e$B$r2!$9;v$K$h$C$F!"5-;v$rAw?.$9$k\e(B
-\e$BA0$K5-;v$r9%$-$J$h$&$KJT=8$9$k;v$N$G$-$k!"%a%C%;!<%8%P%C%U%!$K0\F0$7$^$9!#\e(B
-@xref{Top, , Top, message, The Message Manual}\e$B!#$b$730It%K%e!<%9%0%k!<%W$K\e(B
-\e$B$$$F!"5-;v$r30It%5!<%P!<$r;H$C$FEj9F$7$?$$$N$G$"$l$P!"\e(B@kbd{C-c C-c} \e$B$K@\F,\e(B
-\e$B0z?t$rM?$($F!"\e(Bgnus \e$B$K30It%5!<%P!<$r;H$C$FEj9F$7$h$&$H;n$5$;$k;v$,$G$-$^$9!#\e(B
+\e$BA4$F$NEj9F$H%a!<%k$NL?Na$O!"\e(B@kbd{C-c C-c} \e$B$r2!$9;v$K$h$C$F!"5-;v$rAw?.$9\e(B
+\e$B$kA0$K5-;v$r9%$-$J$h$&$KJT=8$9$k;v$N$G$-$k!"%a%C%;!<%8%P%C%U%!$K0\F0$7$^\e(B
+\e$B$9!#\e(B@xref{Top, , Top, message, The Message Manual}\e$B!#5-;v$O$"$J$?$N@_Dj$K\e(B
+\e$B4p$E$$$FAw?.$5$l$^$9\e(B (@pxref{Posting Server})\e$B!#\e(B
 
 @menu
-* Mail::                 \e$B%a!<%k$HJVEz!#\e(B
-* Post::                 \e$BEj9F$H%U%)%m!<%"%C%W!#\e(B
-* Posting Server::       \e$B$I$N%5!<%P!<$rDL$7$FEj9F$9$k$Y$-$+!)\e(B
-* Mail and Post::        \e$BF1;~$K%a!<%k$r=P$7JVEz$9$k!#\e(B
-* Archived Messages::    \e$BAw$C$?%a%C%;!<%8$r\e(B gnus \e$B$,Cy$a$F$*$/$H$3$m!#\e(B
-* Posting Styles::       \e$B$"$J$?$,C/$G$"$k$+$r;XDj$9$k$h$j4JC1$JJ}K!!#\e(B
-* Drafts::               \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8!#\e(B
-* Rejected Articles::    \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K2?$,5/$3$k!)\e(B
+* Mail::              \e$B%a!<%k$HJVEz\e(B
+* Post::              \e$BEj9F$H%U%)%m!<%"%C%W\e(B
+* Posting Server::    \e$B$I$N%5!<%P!<$rDL$7$FEj9F$9$k$Y$-$+\e(B?
+* Mail and Post::     \e$BF1;~$K%a!<%k$r=P$7JVEz$9$k\e(B
+* Archived Messages:: \e$BAw$C$?%a%C%;!<%8$r\e(B gnus \e$B$,Cy$a$F$*$/$H$3$m\e(B
+* Posting Styles::    \e$B$"$J$?$,C/$G$"$k$+$r;XDj$9$k$h$j4JC1$JJ}K!\e(B
+* Drafts::            \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8\e(B
+* Rejected Articles:: \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K2?$,5/$3$k\e(B?
 @end menu
 
 \e$BEj9F$9$k$Y$-$G$J$+$C$?5-;v$r:o=|$9$k$?$a$N>pJs$O\e(B @pxref{Canceling and
 Superseding} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 
-
 @node Mail
 @section \e$B%a!<%k\e(B
 
-\e$B=P$F9T$/%a!<%k$r%+%9%?%^%$%:$9$kJQ?t$G$9!'\e(B
+\e$B=P$F9T$/%a!<%k$r%+%9%?%^%$%:$9$kJQ?t$G$9\e(B:
 
 @table @code
 @item gnus-uu-digest-headers
@@ -8514,24 +9077,30 @@ Superseding} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 @code{nil} \e$B$G$J$1$l$P!"\e(B@kbd{a} \e$B$r$7$?$H$-$K!"\e(B@code{to-list} \e$B%0%k!<%W%Q%i\e(B
 \e$B%a!<%?$r$=$l$N$J$$%a!<%k%0%k!<%W$KIU$12C$($^$9!#\e(B
 
-@end table
+@c @item message-send-mail-partially-limit
+@c @vindex message-send-mail-partially-limit
+@c The limitation of messages sent as message/partial.
+@c The lower bound of message size in characters, beyond which the message
+@c should be sent in several parts. If it is nil, the size is unlimited.
 
+@end table
 
 @node Post
 @section \e$BEj9F\e(B
 
-\e$B%K%e!<%95-;v:n@.$N$?$a$NJQ?t!'\e(B
+\e$B%K%e!<%95-;v:n@.$N$?$a$NJQ?t\e(B:
 
 @table @code
 @item gnus-sent-message-ids-file
 @vindex gnus-sent-message-ids-file
-Gnus \e$B$OAw?.$7$?A4$F$N%a!<%k$N\e(B @code{Message-ID} \e$BMzNr%U%!%$%k\e(B (history
-file) \e$B$rJ]B8$7$^$9!#$b$7%a!<%k$r4{$KAw$C$?;v$,H/8+$5$l$?$J$i!"MxMQ<T$K%a!<\e(B
-\e$B%k$r:FAw$9$k$+$I$&$+$r?R$M$^$9!#!J$3$l$O<g$KF1$8%Q%1%C%H$rJ#?t2sAw$k798~$N\e(B
-\e$B$"$k\e(B @sc{soup} \e$B%Q%1%C%H$d!"$=$l$K;w$?$h$&$J$b$N$r07$C$F$$$k$H$-$KLr$KN)$A\e(B
-\e$B$^$9!#!K$3$NJQ?t$O$3$NMzNr%U%!%$%k$,$I$3$K$"$k$+$r;XDj$7$^$9!#%G%#%U%)%k%H\e(B
-\e$B$G$O\e(B @file{~/News/Sent-Message-IDs} \e$B$G$9!#\e(BGnus \e$B$,MzNr%U%!%$%k$rJ];}$9$k;v\e(B
-\e$B$rK>$^$J$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+Gnus \e$B$OAw?.$7$?A4$F$N%a!<%k$N\e(B @code{Message-ID} \e$BMzNr%U%!%$\e(B
+\e$B%k\e(B (history file) \e$B$rJ]B8$7$^$9!#$b$7%a!<%k$r4{$KAw$C$?;v$,H/8+$5$l$?$J$i!"\e(B
+\e$BMxMQ<T$K%a!<%k$r:FAw$9$k$+$I$&$+$r?R$M$^$9!#\e(B(\e$B$3$l$O<g$KF1$8%Q%1%C%H$rJ#\e(B
+\e$B?t2sAw$k798~$N$"$k\e(B @sc{soup} \e$B%Q%1%C%H$d!"$=$l$K;w$?$h$&$J$b$N$r07$C$F$$\e(B
+\e$B$k$H$-$KLr$KN)$A$^$9!#\e(B) \e$B$3$NJQ?t$O$3$NMzNr%U%!%$%k$,$I$3$K$"$k$+$r;XDj$7\e(B
+\e$B$^$9!#%G%#%U%)%k%H$G$O\e(B @file{~/News/Sent-Message-IDs} \e$B$G$9!#\e(BGnus \e$B$,MzNr\e(B
+\e$B%U%!%$%k$rJ];}$9$k;v$rK>$^$J$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9\e(B
+\e$B$k;v$,$G$-$^$9!#\e(B
 
 @item gnus-sent-message-ids-length
 @vindex gnus-sent-messages-ids-length
@@ -8540,43 +9109,41 @@ file) \e$B$rJ]B8$7$^$9!#$b$7%a!<%k$r4{$KAw$C$?;v$,H/8+$5$l$?$J$i!"MxMQ<T$K%a!<\e(B
 
 @end table
 
-
 @node Posting Server
 @section \e$BEj9F$9$k%5!<%P!<\e(B
 
-\e$B:G?7$N!J$b$A$m$s!"Hs>o$KCNE*$J!K5-;v$rAw$j=P$9$?$a$K!"$"$NKbK!$N$h$&$J\e(B
-@kbd{C-c C-c} \e$B%-!<$r2!$7$?;~!"$=$l$O$I$3$K$$$/$N$G$7$g$&!)\e(B
+\e$B:G?7$N\e(B (\e$B$b$A$m$s!"Hs>o$KCNE*$J\e(B) \e$B5-;v$rAw$j=P$9$?$a$K!"$"$NKbK!$N$h$&\e(B
+\e$B$J\e(B @kbd{C-c C-c} \e$B%-!<$r2!$7$?;~!"$=$l$O$I$3$K$$$/$N$G$7$g$&\e(B?
 
 \e$B?R$M$F$/$l$F$"$j$,$H$&!#$"$J$?$r:($_$^$9!#\e(B
 
 @vindex gnus-post-method
 
-\e$B$=$l$OHs>o$KJ#;($K$J$jF@$^$9!#IaDL$O!"\e(Bgnus \e$B$OF1$84pK\%5!<%P!<$r;HMQ$7$^$9!#\e(B
-\e$B$7$+$7!#$"$J$?$N4pK\%5!<%P!<$,Ej9F$r5v2D$;$:!"FI$`$3$H$N$_$r5v2D$7$F$$$k$N\e(B
-\e$B$J$i$P!"$*$=$i$/$"$J$?$N!JHs>o$KCNE*$G$H$s$G$b$J$/6=L#?<$$!K5-;v$rEj9F$9$k\e(B
-\e$B$?$a$K!"B>$N%5!<%P!<$r;H$$$?$$$H;W$&$G$7$g$&!#\e(B@code{gnus-post-method} \e$B$rB>\e(B
-\e$B$NJ}K!$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+\e$B$=$l$OHs>o$KJ#;($K$J$jF@$^$9!#IaDL$O!"\e(Bgnus \e$B$OF1$84pK\%5!<%P!<$r;HMQ$7$^\e(B
+\e$B$9!#$7$+$7!#$"$J$?$N4pK\%5!<%P!<$,Ej9F$r5v2D$;$:!"FI$`$3$H$N$_$r5v2D$7$F\e(B
+\e$B$$$k$N$J$i$P!"$*$=$i$/$"$J$?$N\e(B (\e$BHs>o$KCNE*$G$H$s$G$b$J$/6=L#?<$$\e(B) \e$B5-;v$r\e(B
+\e$BEj9F$9$k$?$a$K!"B>$N%5!<%P!<$r;H$$$?$$$H;W$&$G$7$g$&!#\e(B
+@code{gnus-post-method} \e$B$rB>$NJ}K!$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
 
 @lisp
 (setq gnus-post-method '(nnspool ""))
 @end lisp
 
-\e$B$5$F!"$3$N@_Dj$r$7$?8e$G%5!<%P!<$,$"$J$?$N5-;v$r5qH]$7$?$j!"%5!<%P!<$,Mn$A\e(B
-\e$B$F$$$?$j$7$?$i!"$I$&$7$?$i$h$$$N$G$7$g$&!)$3$NJQ?t$r>e=q$-$9$k$?$a$K!"L?Na\e(B
-@kbd{C-c C-c} \e$B$KNm$G$J$$@\F,0z?t$rM?$($k;v$G!"Ej9F$K!X8=:_$N!Y%5!<%P!<$r;H\e(B
-\e$B$o$;$k;v$,$G$-$^$9!#\e(B
+\e$B$5$F!"$3$N@_Dj$r$7$?8e$G%5!<%P!<$,$"$J$?$N5-;v$r5qH]$7$?$j!"%5!<%P!<$,Mn\e(B
+\e$B$A$F$$$?$j$7$?$i!"$I$&$7$?$i$h$$$N$G$7$g$&\e(B? \e$B$3$NJQ?t$r>e=q$-$9$k$?$a$K!"\e(B
+\e$BL?Na\e(B @kbd{C-c C-c} \e$B$KNm$G$J$$@\F,0z?t$rM?$($k;v$G!"Ej9F$K!X8=:_$N!Y%5!<\e(B
+\e$B%P!<$r;H$o$;$k;v$,$G$-$^$9!#\e(B
 
-\e$B$b$7!"Nm@\F,0z?t$r$=$NL?Na$KM?$($?$J$i!J$9$J$o$A!"\e(B@kbd{C-u 0 C-c C-c}\e$B!K!"\e(B
+\e$B$b$7!"Nm@\F,0z?t$r$=$NL?Na$KM?$($?$J$i\e(B (\e$B$9$J$o$A!"\e(B@kbd{C-u 0 C-c C-c})\e$B!"\e(B
 gnus \e$B$OEj9F$K$I$NJ}K!$r;H$&$+$r$"$J$?$K?R$M$^$9!#\e(B
 
 @code{gnus-post-method} \e$B$rA*BrJ}K!$N%j%9%H$K$9$k;v$b$G$-$^$9!#$=$N>l9g$O!"\e(B
 gnus \e$B$O>o$KEj9F$K$I$NJ}K!$r;H$&$+$r$"$J$?$K?R$M$^$9!#\e(B
 
-
 @node Mail and Post
 @section \e$B%a!<%k$HEj9F\e(B
 
-\e$B$3$l$O%a!<%k$r=P$9;v$HEj9F$9$k;v$NN>J}$K4XO"$9$kJQ?t$N%j%9%H$G$9!'\e(B
+\e$B$3$l$O%a!<%k$r=P$9;v$HEj9F$9$k;v$NN>J}$K4XO"$9$kJQ?t$N%j%9%H$G$9\e(B:
 
 @table @code
 @item gnus-mailing-list-groups
@@ -8586,18 +9153,19 @@ gnus \e$B$O>o$KEj9F$K$I$NJ}K!$r;H$&$+$r$"$J$?$K?R$M$^$9!#\e(B
 \e$B$b$7$"$J$?$N%K%e!<%9%5!<%P!<$,K\Ev$K%a!<%j%s%0%j%9%H$+$i\e(B @sc{nntp} \e$B%5!<\e(B
 \e$B%P!<$X$N%2!<%H%&%'%$$rDs6!$7$F$$$k$N$G$"$l$P!"$=$l$i$N%0%k!<%W$OLdBj$J$/\e(B
 \e$BFI$a$k$G$7$g$&!#$7$+$74JC1$K$O$=$l$i$KEj9F\e(B/\e$B%U%)%m!<%"%C%W$9$k$3$H$O$G$-\e(B
-\e$B$^$;$s!#0l$D$N2r7hK!$O\e(B \e$B%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$K\e(B
-@code{to-address} \e$B$r2C$($k;v$G$9!#4JC1$K$G$-$k$N$O!"\e(B
-@code{gnus-mailing-list-groups} \e$B$r!"K\Ev$K%a!<%j%s%0%j%9%H$G$"$k$h$&$J%0\e(B
-\e$B%k!<%W$K9gCW$9$k@55,I=8=$K@_Dj$9$k$3$H$G$9!#$=$N8e$O!"$9$/$J$/$H$b!"%a!<\e(B
-\e$B%j%s%0%j%9%H$X$N%U%)%m!<%"%C%W$O$?$$$F$$$N$H$-$KF0:n$7$^$9!#$3$l$i$N%0%k!<\e(B
-\e$B%W$KEj9F$9$k;v$O\e(B (@kbd{a}) \e$B$=$l$G$b6lDK$r0z$-5/$3$9$G$7$g$&$1$I!#\e(B
+\e$B$^$;$s!#0l$D$N2r7hK!$O\e(B \e$B%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B (@pxref{Group Parameters}) \e$B$K\e(B @code{to-address} \e$B$r2C$($k;v$G$9!#4JC1\e(B
+\e$B$K$G$-$k$N$O!"\e(B@code{gnus-mailing-list-groups} \e$B$r!"K\Ev$K%a!<%j%s%0%j%9%H\e(B
+\e$B$G$"$k$h$&$J%0%k!<%W$K9gCW$9$k@55,I=8=$K@_Dj$9$k$3$H$G$9!#$=$N8e$O!"$9$/\e(B
+\e$B$J$/$H$b!"%a!<%j%s%0%j%9%H$X$N%U%)%m!<%"%C%W$O$?$$$F$$$N$H$-$KF0:n$7$^$9!#\e(B
+\e$B$3$l$i$N%0%k!<%W$KEj9F$9$k;v$O\e(B (@kbd{a}) \e$B$=$l$G$b6lDK$r0z$-5/$3$9$G$7$g\e(B
+\e$B$&$1$I!#\e(B
 
 @end table
 
 \e$B$"$J$?$O<+J,$,Aw$k%a%C%;!<%8$NDV$j$rD4$Y$?$$$H;W$&$+$bCN$l$^$;$s!#$b$7$/\e(B
-\e$B$O!"$b$7<j$GDV$jD4$Y$r$7$?$/$J$$$N$G$"$l$P!"<+F0DV$jD4$Y$r\e(B @code{ispell}
-\e$B%Q%C%1!<%8$r;H$&;v$K$h$C$FIU$12C$($k;v$,$G$-$^$9!'\e(B
+\e$B$O!"$b$7<j$GDV$jD4$Y$r$7$?$/$J$$$N$G$"$l$P!"<+F0DV$jD4$Y\e(B
+\e$B$r\e(B @code{ispell} \e$B%Q%C%1!<%8$r;H$&;v$K$h$C$FIU$12C$($k;v$,$G$-$^$9\e(B:
 
 @cindex ispell
 @findex ispell-message
@@ -8605,21 +9173,36 @@ gnus \e$B$O>o$KEj9F$K$I$NJ}K!$r;H$&$+$r$"$J$?$K?R$M$^$9!#\e(B
 (add-hook 'message-send-hook 'ispell-message)
 @end lisp
 
+\e$B$b$7$"$J$?$,\e(B @code{ispell} \e$B$N<-=q$r%0%k!<%W$K1~$8$F@Z$jBX$($?$$$J$i$P!"\e(B
+\e$B0J2<$N$h$&$K$9$l$PNI$$$G$7$g$&!#\e(B
+
+@lisp
+(add-hook 'gnus-select-group-hook
+          (lambda ()
+            (cond
+             ((string-match "^de\\." gnus-newsgroup-name)
+              (ispell-change-dictionary "deutsch"))
+             (t
+              (ispell-change-dictionary "english")))))
+@end lisp
+
+\e$B$"$J$?$NI,MW$K1~$8$FJQ99$7$F2<$5$$!#\e(B
 
 @node Archived Messages
 @section \e$B%a%C%;!<%8$NJ]4I\e(B
 @cindex archived messages
 @cindex sent messages
 
-Gnus \e$B$O$"$J$?$,Aw$C$?%a!<%k$H%K%e!<%9$rCy$a$F$*$/$?$a$N$$$/$D$+$N0c$C$?J}\e(B
-\e$BK!$rDs6!$7$^$9!#%G%#%U%)%k%H$NJ}K!$O%a%C%;!<%8$rJ]B8$9$k$?$a$K\e(B@dfn{\e$B;v<B>e\e(B
-\e$B$N=q8K%5!<%P!<\e(B}(archive virtual server)\e$B$r;H$$$^$9!#$3$l$r40A4$K6X;_$7$?$$\e(B
-\e$B$N$G$"$l$P!"JQ?t\e(B @code{gnus-message-archive-group} \e$B$O\e(B @code{nil} \e$B$K$J$k$Y\e(B
-\e$B$-$G!"$3$l$,%G%#%U%)%k%H$G$9!#\e(B
+Gnus \e$B$O$"$J$?$,Aw$C$?%a!<%k$H%K%e!<%9$rCy$a$F$*$/$?$a$N$$$/$D$+$N0c$C$?\e(B
+\e$BJ}K!$rDs6!$7$^$9!#%G%#%U%)%k%H$NJ}K!$O%a%C%;!<%8$rJ]B8$9$k$?$a\e(B
+\e$B$K\e(B @dfn{\e$B;v<B>e$N=q8K%5!<%P!<\e(B}(archive virtual server) \e$B$r;H$$$^$9!#$3$l$r\e(B
+\e$B40A4$K6X;_$7$?$$$N$G$"$l$P!"\e(B
+\e$BJQ?t\e(B @code{gnus-message-archive-group} \e$B$O\e(B @code{nil} \e$B$K$J$k$Y$-$G!"$3$l\e(B
+\e$B$,%G%#%U%)%k%H$G$9!#\e(B
 
 @vindex gnus-message-archive-method
-@code{gnus-message-archive-method} \e$B$OAw$C$?%a%C%;!<%8$rC_@Q$9$k$?$a$K$I$N\e(B
-\e$B;v<B>e$N%5!<%P!<$r\e(B gnus \e$B$,;H$&$Y$-$+$r;XDj$7$^$9!#%G%#%U%)%k%H$O!'\e(B
+@code{gnus-message-archive-method} \e$B$OAw$C$?%a%C%;!<%8$rC_@Q$9$k$?$a$K$I\e(B
+\e$B$N;v<B>e$N%5!<%P!<$r\e(B gnus \e$B$,;H$&$Y$-$+$r;XDj$7$^$9!#%G%#%U%)%k%H$O\e(B:
 
 @lisp
 (nnfolder "archive"
@@ -8629,10 +9212,10 @@ Gnus \e$B$O$"$J$?$,Aw$C$?%a!<%k$H%K%e!<%9$rCy$a$F$*$/$?$a$N$$$/$D$+$N0c$C$?J}\e(B
           (nnfolder-inhibit-expiry t))
 @end lisp
 
-\e$B$7$+$7!"$I$N%a!<%kA*BrJ}K!$G$b;H$&;v$,$G$-$^$9!J\e(B@code{nnml},
-@code{nnmbox} \e$B$J$I$J$I!K!#$7$+$7\e(B @code{nnfolder} \e$B$O$3$N$h$&$J;v$r$9$k$N$K\e(B
-\e$B$H$F$b9%$^$7$$A*BrJ}K!$G$9!#%G%#%U%)%k%H$N%G%#%l%/%H%j!<A*Br$r9%$-$G$J$$$J\e(B
-\e$B$i$P!"<!$N$h$&$K$G$-$^$9!'\e(B
+\e$B$7$+$7!"$I$N%a!<%kA*BrJ}K!$G$b;H$&;v$,$G$-$^\e(B
+\e$B$9\e(B (@code{nnml}, @code{nnmbox} \e$B$J$I$J$I\e(B)\e$B!#$7$+$7\e(B @code{nnfolder} \e$B$O$3$N\e(B
+\e$B$h$&$J;v$r$9$k$N$K$H$F$b9%$^$7$$A*BrJ}K!$G$9!#%G%#%U%)%k%H$N%G%#%l%/%H%j!<\e(B
+\e$BA*Br$r9%$-$G$J$$$J$i$P!"<!$N$h$&$K$G$-$^$9\e(B:
 
 @lisp
 (setq gnus-message-archive-method
@@ -8644,15 +9227,26 @@ Gnus \e$B$O$"$J$?$,Aw$C$?%a!<%k$H%K%e!<%9$rCy$a$F$*$/$?$a$N$$$/$D$+$N0c$C$?J}\e(B
 
 @vindex gnus-message-archive-group
 @cindex Gcc
-Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(B
-\e$B%W$X8~$+$&\e(B @code{Gcc} \e$BMs$rA^F~$7$^$9!#$I$N%0%k!<%W$r;H$&$+$OJQ?t\e(B
-@code{gnus-message-archive-group} \e$B$K$h$C$F7h$^$j$^$9!#\e(B
+Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0\e(B
+\e$B%k!<%W$X8~$+$&\e(B @code{Gcc} \e$BMs$rA^F~$7$^$9!#$I$N%0%k!<%W$r;H$&$+$OJQ\e(B
+\e$B?t\e(B @code{gnus-message-archive-group} \e$B$K$h$C$F7h$^$j$^$9!#\e(B
 
-\e$B$3$NJQ?t$O<!$N$h$&$J;v$r$9$k$?$a$K;H$o$l$^$9!'\e(B
+\e$B$3$NJQ?t$O<!$N$h$&$J;v$r$9$k$?$a$K;H$o$l$^$9\e(B:
 
 @itemize @bullet
 @item \e$BJ8;zNs\e(B
 \e$B%a%C%;!<%8$O$=$N%0%k!<%W$KJ]B8$5$l$^$9!#\e(B
+
+\e$B$"$J$?$O%0%k!<%WL>$KA*BrJ}K!$r4^$a$k$3$H$,$G$-$^$9$,!"$=$&$9$k$H$=$N%a%C\e(B
+\e$B%;!<%8$O\e(B @code{gnus-message-archive-method} \e$B$G;XDj$7$?A*BrJ}K!$G$O$J$/$F!"\e(B
+\e$BBe$o$j$K%0%k!<%WL>$NA*BrJ}K!$GJ]B8$5$l$k$3$H$KCm0U$7$^$7$g$&!#>e$K<($7$?\e(B
+\e$B$h$&$K\e(B @code{gnus-message-archive-method} \e$B$O!"%G%#%U%)%k%HCM$r;}$D$b$N$G\e(B
+\e$B$"$k$H9M$($F2<$5$$!#$G$9$+\e(B
+\e$B$i\e(B @code{gnus-message-archive-group} \e$B$r\e(B @code{"foo"} \e$B$K$7$F$*$1$P!"30$X\e(B
+\e$B=P$F9T$/%a%C%;!<%8$O\e(B @samp{nnfolder+archive:foo} \e$B$KJ]B8$5$l$^$9$,!"$b$7\e(B
+\e$B$"$J$?$,\e(B @code{"nnml:foo"} \e$B$H$$$&CM$r;H$&$H!"\e(B@samp{nnml:foo} \e$B$KJ]B8$5$l\e(B
+\e$B$^$9!#\e(B
+@samp{nnml:foo}.
 @item \e$BJ8;zNs$N%j%9%H\e(B
 \e$B%a%C%;!<%8$O$=$l$i$NA4$F$N%0%k!<%W$KJ]B8$5$l$^$9!#\e(B
 @item \e$B@55,I=8=!"4X?t!"MM<0$NO"A[%j%9%H\e(B
@@ -8661,19 +9255,19 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
 \e$B%a%C%;!<%8$NJ]B8$O9T$o$l$^$;$s!#$3$l$,%G%#%U%)%k%H$G$9!#\e(B
 @end itemize
 
-\e$B;n$7$F$_$^$7$g$&!'\e(B
+\e$B;n$7$F$_$^$7$g$&\e(B:
 
-@samp{MisK} \e$B$H8F$P$l$k0l$D$N%0%k!<%W$KJ]B8$9$k$J$i$P!'\e(B
+@samp{MisK} \e$B$H8F$P$l$k0l$D$N%0%k!<%W$KJ]B8$9$k$J$i$P\e(B:
 @lisp
 (setq gnus-message-archive-group "MisK")
 @end lisp
 
-2\e$B$D$N%0%k!<%W!"\e(B@samp{MisK} \e$B$H\e(B @samp{safe} \e$B$KJ]B8$9$k$J$i$P!'\e(B
+\e$BFs$D$N%0%k!<%W!"\e(B@samp{MisK} \e$B$H\e(B @samp{safe} \e$B$KJ]B8$9$k$J$i$P\e(B:
 @lisp
 (setq gnus-message-archive-group '("MisK" "safe"))
 @end lisp
 
-\e$B$I$N%0%k!<%W$K$$$k$+$K$h$C$F0c$C$?%0%k!<%W$KJ]B8$9$k$J$i!'\e(B
+\e$B$I$N%0%k!<%W$K$$$k$+$K$h$C$F0c$C$?%0%k!<%W$KJ]B8$9$k$J$i\e(B:
 @lisp
 (setq gnus-message-archive-group
       '(("^alt" "sent-to-alt")
@@ -8681,7 +9275,7 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
         (".*" "sent-to-misc")))
 @end lisp
 
-\e$B$b$C$HJ#;($J$b$N!'\e(B
+\e$B$b$C$HJ#;($J$b$N\e(B:
 @lisp
 (setq gnus-message-archive-group
       '((if (message-news-p)
@@ -8689,8 +9283,8 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
           "misc-mail")))
 @end lisp
 
-\e$BA4$F$N%K%e!<%9%a%C%;!<%8$r0l$D$N%U%!%$%k$KJ]B8$7$F!"%a!<%k%a%C%;!<%8$r0l7n\e(B
-\e$B$K$D$-0l$D$N%U%!%$%k$KJ]B8$9$k$K$O!'\e(B
+\e$BA4$F$N%K%e!<%9%a%C%;!<%8$r0l$D$N%U%!%$%k$KJ]B8$7$F!"%a!<%k%a%C%;!<%8$r0l\e(B
+\e$B7n$K$D$-0l$D$N%U%!%$%k$KJ]B8$9$k$K$O\e(B:
 
 @lisp
 (setq gnus-message-archive-group
@@ -8700,18 +9294,19 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
                           "%Y-%m" (current-time))))))
 @end lisp
 
-\e$B!J\e(BXEmacs 19.13 \e$B$K$O\e(B @code{format-time-string} \e$B$O$"$j$^$;$s$N$G!"$=$N\e(B
-@code{gnus-message-archive-group} \e$B$N$?$a$K0c$C$?CM$r;H$o$J$1$l$P$J$j$^$;$s!#!K\e(B
+(XEmacs 19.13 \e$B$K$O\e(B @code{format-time-string} \e$B$O$"$j$^$;$s$N$G!"$=\e(B
+\e$B$N\e(B @code{gnus-message-archive-group} \e$B$N$?$a$K0c$C$?CM$r;H$o$J$1$l$P$J$j\e(B
+\e$B$^$;$s!#\e(B)
 
-\e$B:#$d!"%a%C%;!<%8$rAw$k$H!"$=$l$OE,@Z$J%0%k!<%W$KJ]B8$5$l$^$9!#!J$b$7FCDj$N\e(B
-\e$B%a%C%;!<%8$KBP$7$FJ]B8$r$7$?$/$J$$$N$G$"$l$P!"A^F~$5$l$?\e(B @code{Gcc} \e$BMs$r<h\e(B
-\e$B$j=|$$$F$/$@$5$$!#!KJ]4I%0%k!<%W$O<!$K\e(B gnus \e$B$r5/F0$7$?$H$-$+!"<!$K%0%k!<%W\e(B
-\e$B%P%C%U%!$G\e(B @kbd{F} \e$B$r2!$7$?$H$-$K%0%k!<%W%P%C%U%!$K8=$l$^$9!#B>$N%0%k!<%W\e(B
-\e$B$HF1$8$h$&$K$=$N%0%k!<%W$KF~$C$F!"5-;v$rFI$`;v$,$G$-$^$9!#$=$N%0%k!<%W$,K\\e(B
-\e$BEv$KBg$-$/$J$C$F7y$K$J$C$?$i!"$J$K$+NI$$$b$N$K$=$NL>A0$rJQ99$9$k;v$,$G$-$^\e(B
-\e$B$9!J%0%k!<%W%P%C%U%!$G\e(B @kbd{G r} \e$B$r;H$&;v$K$h$C$F!K!=!=\e(B
-@samp{misc-mail-september-1995} \e$B$dB>$N$b$K!#?7$7$$%a%C%;!<%8$O8E$$!J:#$O6u\e(B
-\e$B$K$J$C$?!K%0%k!<%W$KN/$a$i$l$^$9!#\e(B
+\e$B:#$d!"%a%C%;!<%8$rAw$k$H!"$=$l$OE,@Z$J%0%k!<%W$KJ]B8$5$l$^$9!#\e(B(\e$B$b$7FCDj\e(B
+\e$B$N%a%C%;!<%8$KBP$7$FJ]B8$r$7$?$/$J$$$N$G$"$l$P!"A^F~$5$l$?\e(B @code{Gcc} \e$BMs\e(B
+\e$B$r<h$j=|$$$F$/$@$5$$!#\e(B) \e$BJ]4I%0%k!<%W$O<!$K\e(B gnus \e$B$r5/F0$7$?$H$-$+!"<!$K%0\e(B
+\e$B%k!<%W%P%C%U%!$G\e(B @kbd{F} \e$B$r2!$7$?$H$-$K%0%k!<%W%P%C%U%!$K8=$l$^$9!#B>$N\e(B
+\e$B%0%k!<%W$HF1$8$h$&$K$=$N%0%k!<%W$KF~$C$F!"5-;v$rFI$`;v$,$G$-$^$9!#$=$N%0\e(B
+\e$B%k!<%W$,K\Ev$KBg$-$/$J$C$F7y$K$J$C$?$i!"$J$K$+NI$$$b$N$K$=$NL>A0$rJQ99$9\e(B
+\e$B$k;v$,$G$-$^$9\e(B (\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{G r} \e$B$r;H$&;v$K$h$C$F\e(B) \e$B!=!=\e(B
+@samp{misc-mail-september-1995} \e$B$dB>$N$b$K!#?7$7$$%a%C%;!<%8$O8E$$\e(B (\e$B:#$O\e(B
+\e$B6u$K$J$C$?\e(B) \e$B%0%k!<%W$KN/$a$i$l$^$9!#\e(B
 
 \e$B0J>e$,Aw$C$?%a%C%;!<%8$rJ]4I$9$k%G%#%U%)%k%H$NJ}K!$G$9!#\e(BGnus \e$B$O%G%#%U%)\e(B
 \e$B%k%H$NJ}K!$r9%$-$G$O$J$$?M$K$O0c$C$?$d$jJ}$r4+$a$F$$$^$9!#$=$N$h$&$J>l9g\e(B
@@ -8726,15 +9321,14 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
 \e$BJQ?t$r$=$NCM$K@_Dj$9$k;v$,$G$-$^$9!#$3$NJQ?t$O%0%k!<%WL>$N%j%9%H$G$"$k;v\e(B
 \e$B$b$G$-$^$9!#\e(B
 
-\e$B$b$7$=$l$>$l$N%a%C%;!<%8$r$I$N%0%k!<%W$KF~$l$k$+$r$b$C$H@)8f$7$?$$$N$G$"$l\e(B
-\e$B$P!"$3$NJQ?t$r8=:_$N%K%e!<%9%0%k!<%WL>$rD4$Y$F!"E,@Z$J%0%k!<%WL>!J$b$7$/$O\e(B
-\e$BL>A0$N%j%9%H!K$rJV$94X?t$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+\e$B$b$7$=$l$>$l$N%a%C%;!<%8$r$I$N%0%k!<%W$KF~$l$k$+$r$b$C$H@)8f$7$?$$$N$G$"\e(B
+\e$B$l$P!"$3$NJQ?t$r8=:_$N%K%e!<%9%0%k!<%WL>$rD4$Y$F!"E,@Z$J%0%k!<%WL>\e(B (\e$B$b$7\e(B
+\e$B$/$OL>A0$N%j%9%H\e(B) \e$B$rJV$94X?t$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
 
 \e$B$3$NJQ?t$O\e(B @code{gnus-message-archive-group} \e$B$NBe$o$j$K;H$&;v$,$G$-$^$9\e(B
 \e$B$,!"8e<T$NJ}$,9%$^$7$$J}K!$G$9!#\e(B
 @end table
 
-
 @node Posting Styles
 @section \e$BEj9FMM<0\e(B
 @cindex posting styles
@@ -8742,15 +9336,16 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
 
 \e$B$=$l$i$O$9$Y$FJQ?t$G!"$=$l$O;d$NF,$r1K$,$;$^$9!#\e(B
 
-\e$B$=$l$G!"$J$<$I$N%0%k!<%W$KEj9F$9$k$+$K$h$C$F0c$C$?\e(B @code{Organization}
-\e$B$H=pL>$rK>$`$N$G$7$g$&$+!)$=$7$F!"$"$J$?$O2HDm$N%^%7%s$H?&>l$N%^%7%s$NN>\e(B
-\e$BJ}$+$iEj9F$7$F!"0c$C$?\e(B @code{From} \e$B9T$d$=$NB>$N$b$N$rK>$`$N$G$9$+!)\e(B
+\e$B$=$l$G!"$J$<$I$N%0%k!<%W$KEj9F$9$k$+$K$h$C$F0c$C\e(B
+\e$B$?\e(B @code{Organization} \e$B$H=pL>$rK>$`$N$G$7$g$&$+\e(B? \e$B$=$7$F!"$"$J$?$O2HDm$N\e(B
+\e$B%^%7%s$H?&>l$N%^%7%s$NN>J}$+$iEj9F$7$F!"0c$C$?\e(B @code{From} \e$B9T$d$=$NB>$N\e(B
+\e$B$b$N$rK>$`$N$G$9$+\e(B?
 
 @vindex gnus-posting-styles
 \e$B$=$N$h$&$J;v$r$9$kJ}K!$N0l$D$OJQ99$5$l$kI,MW$N$"$kJQ?t$rJQ99$9$k8-$$%U%C\e(B
 \e$B%/$r=q$/;v$G$9!#$=$l$O>/$7B`6~$J$N$G!"MxMQ<T$K$3$l$i$N;v$r<j7Z$JO"A[%j%9\e(B
-\e$B%H$G;XDj$9$k$H$$$&$9$P$i$7$$CeA[$K$?$I$jCe$$$??M$,$$$^$7$?!#$3$l$OJQ?t\e(B
-@code{gnus-posting-styles} \e$B$NNc$G$9\e(B:
+\e$B%H$G;XDj$9$k$H$$$&$9$P$i$7$$CeA[$K$?$I$jCe$$$??M$,$$$^$7$?!#$3$l$OJQ\e(B
+\e$B?t\e(B @code{gnus-posting-styles} \e$B$NNc$G$9\e(B:
 
 @lisp
 ((".*"
@@ -8762,42 +9357,42 @@ Gnus \e$B$O30$X=P$F9T$/A4$F$N%a%C%;!<%8$K!"0l$D$+$=$l0J>e$N$=$N%5!<%P!<$N%0%k!<\e(
   (organization "Emacs is it")))
 @end lisp
 
-\e$B$3$NNc$+$i?dB,$5$l$k$h$&$K!"$3$NO"A[%j%9%H$O$$$/$D$+$N\e(B @dfn{\e$BMM<0\e(B}
-(style) \e$B$+$i$J$C$F$$$^$9!#$=$l$>$l$NMM<0$O:G=i$NMWAG$,2?$i$+$N7A$G\e(B ``\e$B9g\e(B
-\e$BCW\e(B'' \e$B$7$?$H$-$KE,MQ$5$l$^$9!#O"A[%j%9%HA4BN$O:G=i$+$i:G8e$^$GH?I|$7$F<B\e(B
-\e$B9T$5$l!"$=$l$>$l$N9gCW$,E,MQ$5$l$^$9!#$3$l$O!"8e$NMM<0$NB0@-$,A0$K9gCW$7\e(B
-\e$B$?MM<0$NB0@-$r>e=q$-$9$k$H8@$&;v$G$9!#$G$9$+$i!"\e(B
-@samp{comp.programming.literate} \e$B$O!"=pL>\e(B @samp{Death to everybody} \e$B$H\e(B
-@code{Organization} \e$B%X%C%@!<\e(B @samp{What me?} \e$B$r;}$A$^$9!#\e(B
+\e$B$3$NNc$+$i?dB,$5$l$k$h$&$K!"$3$NO"A[%j%9%H$O$$$/$D$+\e(B
+\e$B$N\e(B @dfn{\e$BMM<0\e(B} (style) \e$B$+$i$J$C$F$$$^$9!#$=$l$>$l$NMM<0$O:G=i$NMWAG$,2?$i\e(B
+\e$B$+$N7A$G\e(B ``\e$B9gCW\e(B'' \e$B$7$?$H$-$KE,MQ$5$l$^$9!#O"A[%j%9%HA4BN$O:G=i$+$i:G8e$^\e(B
+\e$B$GH?I|$7$F<B9T$5$l!"$=$l$>$l$N9gCW$,E,MQ$5$l$^$9!#$3$l$O!"8e$NMM<0$NB0@-\e(B
+\e$B$,A0$K9gCW$7$?MM<0$NB0@-$r>e=q$-$9$k$H8@$&;v$G$9!#$G$9$+$i!"\e(B
+@samp{comp.programming.literate} \e$B$O!"=p\e(B
+\e$BL>\e(B @samp{Death to everybody} \e$B$H\e(B @code{Organization} \e$B%X%C\e(B
+\e$B%@!<\e(B @samp{What me?} \e$B$r;}$A$^$9!#\e(B
 
 \e$B$=$l$>$l$NMM<0$N:G=i$NMWAG$O\e(B @code{\e$B9gCW\e(B} (match) \e$B$H8F$P$l$^$9!#$b$7$=$l\e(B
 \e$B$,J8;zNs$G$"$l$P!"\e(Bgnus \e$B$O$=$l$r%0%k!<%WL>$K@55,I=8=$H$7$F9gCWA`:n$r9T$$\e(B
-\e$B$^$9!#\e(B
-If it is the symbol @code{header}, then Gnus will look for header that
-match the next element in the match, and compare that to the last header
-in the match.
-\e$B$b$7$=$l$,4X?t$N%7%s%\%k$G$"$l$P!"$=$N4X?t$,0z?tL5$7$G8F$P$l$^$9!#$=$l$,\e(B
-\e$BJQ?t$N%7%s%\%k$G$"$l$P!"$=$NJQ?t$,;2>H$5$l$^$9!#$=$l$,%j%9%H$G$"$l$P!"$=\e(B
-\e$B$N%j%9%H$,\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#$I$N>l9g$G$b!"$3$l$,\e(B @code{nil} \e$B$G$J$$\e(B
-\e$BCM$r5"$;$P!"MM<0$O\e(B @code{\e$B9gCW$7$?\e(B} \e$B$H8@$$$^$9!#\e(B
+\e$B$^$9!#%7%s%\%k\e(B @code{header} \e$B$G$"$l$P!"\e(Bgnus \e$B$O$=$N9gCW$NCf$N<!$NMWAG$K9g\e(B
+\e$BCW$9$k%X%C%@!<$rC5$7!"$=$l$r$=$N9gCW$N:G8e$N%X%C%@!<$HHf3S$7$^$9!#$b$7$=\e(B
+\e$B$l$,4X?t$N%7%s%\%k$G$"$l$P!"$=$N4X?t$,0z?tL5$7$G8F$P$l$^$9!#$=$l$,JQ?t$N\e(B
+\e$B%7%s%\%k$G$"$l$P!"$=$NJQ?t$,;2>H$5$l$^$9!#$=$l$,%j%9%H$G$"$l$P!"$=$N%j%9\e(B
+\e$B%H$,\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#$I$N>l9g$G$b!"$3$l$,\e(B @code{nil}\e$B$G$J$$CM$r5"$;\e(B
+\e$B$P!"MM<0$O\e(B @code{\e$B9gCW$7$?\e(B} \e$B$H8@$$$^$9!#\e(B
 
 \e$B$=$l$>$l$NMM<0$OG$0U$NNL$N\e(B @dfn{\e$BB0@-\e(B} \e$B$r;}$D;v$,$G$-$^$9!#$=$l$>$l$NB0@-\e(B
 \e$B$O\e(B @code{(@var{name} . @var{value})} \e$B$NBP$K$h$j@.$jN)$C$F$$$^$9!#B0@-L>\e(B
-\e$B$O!"\e(B@code{signature}, @code{signature-file}, @code{organization},
-@code{address}, @code{name}, @code{body} \e$B$N$I$l$+$G$"$k;v$,$G$-$^$9!#B0\e(B
-\e$B@-L>$OJ8;zNs$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$3$l$O%X%C%@!<L>$H$7$F;H$o$l!"\e(B
-\e$B$=$NCM$,5-;v$N%X%C%@!<$KA^F~$5$l$^$9!#$b$7B0@-L>$,\e(B @code{eval} \e$B$@$C$?$i\e(B
-\e$B$=$NMM<0$,I>2A$5$l!"7k2L$O<N$F$i$l$^$9!#\e(B
+\e$B$O!"\e(B@code{signature}, @code{signature-file}, @code{organization}, @code{address}, @code{name}, @code{body} \e$B$N\e(B
+\e$B$I$l$+$G$"$k;v$,$G$-$^$9!#B0@-L>$OJ8;zNs$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"\e(B
+\e$B$3$l$O%X%C%@!<L>$H$7$F;H$o$l!"$=$NCM$,5-;v$N%X%C%@!<$KA^F~$5$l$^$9!#$b$7\e(B
+\e$BB0@-L>$,\e(B @code{nil} \e$B$@$C$?$i$=$N%X%C%@!<L>$O:o=|$5$l$^$9!#$b$7B0@-L>\e(B
+\e$B$,\e(B @code{eval} \e$B$@$C$?$i$=$NMM<0$,I>2A$5$l!"7k2L$O<N$F$i$l$^$9!#\e(B
 
 \e$BB0@-CM$OJ8;zNs\e(B (\e$B$=$N$^$^;H$o$l$^$9\e(B)\e$B!"0z?t$NL5$$4X?t\e(B (\e$BJV$jCM$,;H$o$l$^$9\e(B)\e$B!"\e(B
 \e$BJQ?t\e(B (\e$B$=$NCM$,;H$o$l$^$9\e(B) \e$B$^$?$O%j%9%H\e(B (\e$B$=$l$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l$F!"JV$j\e(B
-\e$BCM$,;H$o$l$^$9\e(B) \e$B$G$"$k;v$,$G$-$^$9!#4X?t$O%;%C%H%"%C%W$5$l$?%a%C%;!<%8\e(B
-\e$B%P%C%U%!$G8F$P$l\e(B (@code{eval} \e$B$5$l\e(B) \e$B$^$9!#8=:_$N5-;v$N%X%C%@!<$OJQ?t\e(B
-@code{message-reply-headers} \e$B$+$iF@$i$l$^$9!#\e(B
+\e$BCM$,;H$o$l$^$9\e(B) \e$B$G$"$k;v$,$G$-$^$9!#4X?t$O%;%C%H%"%C%W$5$l$?%a%C%;!<%8%P%C\e(B
+\e$B%U%!$G8F$P$l\e(B (@code{eval} \e$B$5$l\e(B) \e$B$^$9!#8=:_$N5-;v$N%X%C%@!<$OJQ\e(B
+\e$B?t\e(B @code{message-reply-headers} \e$B$+$iF@$i$l$^$9!#\e(B
 
 \e$B$b$7!":n@.$7$h$&$H$7$F$$$k%a%C%;!<%8$,%K%e!<%95-;v$+%a!<%k%a%C%;!<%8$G$"\e(B
-\e$B$k$+$rD4$Y$?$$$H$-$O!"\e(B2\e$B$D$N4X?t\e(B @code{message-news-p} \e$B$H\e(B
-@code{message-mail-p} \e$B$r;H$&$3$H$K$h$C$FCN$k;v$,$G$-$^$9!#\e(B
+\e$B$k$+$rD4$Y$?$$$H$-$O!"Fs$D$N4X\e(B
+\e$B?t\e(B @code{message-news-p} \e$B$H\e(B @code{message-mail-p} \e$B$r;H$&$3$H$K$h$C$FCN$k\e(B
+\e$B;v$,$G$-$^$9!#\e(B
 
 @findex message-mail-p
 @findex message-news-p
@@ -8817,42 +9412,49 @@ in the match.
          (signature my-quote-randomizer))
         ((message-news-p)
          (signature my-news-signature))
-        ((header "From.*To" "larsi.*org")
+        (header "From\\|To" "larsi.*org"
          (Organization "Somewhere, Inc."))
         ((posting-from-work-p)
          (signature-file "~/.work-signature")
          (address "user@@bar.foo")
          (body "You are fired.\n\nSincerely, your boss.")
          (organization "Important Work, Inc"))
+        ("nnml:.*"
+         (From (save-excursion
+                 (set-buffer gnus-article-buffer)
+                 (message-fetch-field "to"))))
         ("^nn.+:"
          (signature-file "~/.mail-signature"))))
 @end lisp
 
+@samp{nnml:.*} \e$B$N5,B'$O!"$"$J$?$,=P$9$9$Y$F$NJV;v$N\e(B @code{To} \e$B%"%I%l%9\e(B
+\e$B$r\e(B @code{From} \e$B%"%I%l%9$H$7$F;H$&$3$H$r0UL#$7$^$9!#$3$l$O!"$"$J$?$,$?$/\e(B
+\e$B$5$s$N%a!<%j%s%0%j%9%H$K;22C$7$F$$$k>l9g$KJXMx$G$7$g$&!#\e(B
 
 @node Drafts
 @section \e$B2<=q$-\e(B
 @cindex drafts
 
-\e$B$b$7%a%C%;!<%8!J%a!<%k$b$7$/$O%K%e!<%9!K$r=q$$$F$$$k$H$-$K!"FMA3%*!<%V%s\e(B
-\e$B$K%9%F!<%-$,F~$C$F$$$k;v$r;W$$=P$7$?$J$i!J$b$7$/$O!"$"$J$?$,$H!<$C$F$b$9\e(B
-\e$B$4$$:Z?)<g5A<T$G!"7T$r%U!<%I%W%m%;%C%5!<$r$$$l$F$$$k$J$i!K!"=q$$$F$$$k%a%C\e(B
+\e$B$b$7%a%C%;!<%8\e(B (\e$B%a!<%k$b$7$/$O%K%e!<%9\e(B) \e$B$r=q$$$F$$$k$H$-$K!"FMA3%*!<%V%s\e(B
+\e$B$K%9%F!<%-$,F~$C$F$$$k;v$r;W$$=P$7$?$J$i\e(B (\e$B$b$7$/$O!"$"$J$?$,$H!<$C$F$b$9\e(B
+\e$B$4$$:Z?)<g5A<T$G!"7T$r%U!<%I%W%m%;%C%5!<$K$$$l$F$$$k$J$i\e(B)\e$B!"=q$$$F$$$k%a%C\e(B
 \e$B%;!<%8$rJ]B8$9$kJ}K!$,$"$l$PNI$$$H;W$&$G$7$g$&!#$=$&$9$l$P!"$$$D$+JL$NF|\e(B
 \e$B$KJT=8$rB3$1$k;v$,$G$-!"$=$l$,40@.$7$?$H;W$C$?$H$-$KAw$k;v$,$G$-$^$9!#\e(B
 
 \e$B$($'!"?4G[$7$J$$$G$/$@$5$$!#\e(BGnus \e$B$N%a!<%k$HEj9FL?Na$r;H$&2?$i$+$N%a%C%;!<\e(B
-\e$B%8$r=q$-;O$a$?$H$-$K!"<j$KF~$l$k%P%C%U%!$O<+F0E*$KFCJL$J\e(B @dfn{draft} \e$B%0%k!<\e(B
-\e$B%W$K4XO"IU$1$i$l$^$9!#IaDL$NJ}K!$G%P%C%U%!$rJ]B8$9$l$P!J$?$H$($P!"\e(B
-@kbd{C-x C-s}\e$B!K!"$=$N5-;v$O$=$3$KJ]B8$5$l$^$9!#!J<+F0J]B8%U%!%$%k$b2<=q$-\e(B
-\e$B%0%k!<%W\e(B (draft group) \e$B$K9T$-$^$9!#!K\e(B
+\e$B%8$r=q$-;O$a$?$H$-$K!"<j$KF~$l$k%P%C%U%!$O<+F0E*$KFCJL$J\e(B @dfn{draft} \e$B%0\e(B
+\e$B%k!<%W$K4XO"IU$1$i$l$^$9!#IaDL$NJ}K!$G%P%C%U%!$rJ]B8$9$l$P\e(B (\e$B$?$H$($P!"\e(B
+@kbd{C-x C-s})\e$B!"$=$N5-;v$O$=$3$KJ]B8$5$l$^$9!#\e(B(\e$B<+F0J]B8%U%!%$%k$b2<=q$-\e(B
+\e$B%0%k!<%W\e(B (draft group) \e$B$K9T$-$^$9!#\e(B)
 
 @cindex nndraft
 @vindex nndraft-directory
-\e$B2<=q$-%0%k!<%W$O\e(B @samp{nndraft:draftx} \e$B$H8F$P$l$kFCJL$J%0%k!<%W\e(B \e$B$G$9!J$b$7\e(B
-\e$B$"$J$?$,A4$F$rCN$i$J$1$l$P$J$i$J$$$N$G$"$l$P!"$=$l$O\e(B @code{nndraft} \e$B%0%k!<\e(B
-\e$B%W$H$7$F<BAu$5$l$F$$$^$9!K!#JQ?t\e(B @code{nndraft-directory} \e$B$O$=$N%U%!%$%k$r\e(B
-@code{nndraft} \e$B$,$I$3$KJ]4I$9$k$Y$-$+$r;XDj$7$^$9!#$3$N%0%k!<%W$,FCJL$G$"\e(B
-\e$B$k$H$$$&$N$O!"$=$NCf$N5-;v$r1J2D;k$K$7$?$j4{FI$N0u$rIU$1$?$j$G$-$J$$$+$i$G\e(B
-\e$B$9!=!=%0%k!<%W$NA4$F$N5-;v$O1J5W$KL$FI$G$9!#\e(B
+\e$B2<=q$-%0%k!<%W$O\e(B @samp{nndraft:draftx} \e$B$H8F$P$l$kFCJL$J%0%k!<%W\e(B \e$B$G$9\e(B (\e$B$b\e(B
+\e$B$7$"$J$?$,A4$F$rCN$i$J$1$l$P$J$i$J$$$N$G$"$l$P!"$=$l$O\e(B @code{nndraft} \e$B%0\e(B
+\e$B%k!<%W$H$7$F<BAu$5$l$F$$$^$9\e(B)\e$B!#JQ?t\e(B @code{nndraft-directory} \e$B$O$=$N%U%!\e(B
+\e$B%$%k$r\e(B @code{nndraft} \e$B$,$I$3$KJ]4I$9$k$Y$-$+$r;XDj$7$^$9!#$3$N%0%k!<%W$,\e(B
+\e$BFCJL$G$"$k$H$$$&$N$O!"$=$NCf$N5-;v$r1J2D;k$K$7$?$j4{FI$N0u$rIU$1$?$j$G$-\e(B
+\e$B$J$$$+$i$G$9!=!=%0%k!<%W$NA4$F$N5-;v$O1J5W$KL$FI$G$9!#\e(B
 
 \e$B$b$7%0%k!<%W$,B8:_$7$J$$$J$i!"$=$l$O:n@.$5$l!"9XFI$5$l$^$9!#%0%k!<%W%P%C\e(B
 \e$B%U%!$+$i$=$l$r>C$75n$kM#0l$NJ}K!$O!"$=$l$rL$9XFI$K$9$k$3$H$G$9!#\e(B
@@ -8877,48 +9479,46 @@ in the match.
 @c @code{gnus-use-draft} to @code{nil}.  It is @code{t} by default.
 
 @findex gnus-draft-edit-message
-@kindex D e\e$B!J2<=q$-!K\e(B
-\e$B5-;v$NJT=8$rB3$1$?$$$H$-$O!"2<=q$-%0%k!<%W$KF~$C$F\e(B @kbd{D e}
-(@code{gnus-draft-edit-message}) \e$B$r2!$9$@$1$G$9!#$"$J$?$,;D$7$?>uBV$N%P%C\e(B
-\e$B%U%!$K0\F0$7$^$9!#\e(B
+@kindex D e (\e$B2<=q$-\e(B)
+\e$B5-;v$NJT=8$rB3$1$?$$$H$-$O!"2<=q$-%0%k!<%W$KF~$C\e(B
+\e$B$F\e(B @kbd{D e} (@code{gnus-draft-edit-message}) \e$B$r2!$9$@$1$G$9!#$"$J$?$,;D\e(B
+\e$B$7$?>uBV$N%P%C%U%!$K0\F0$7$^$9!#\e(B
 
-\e$B5qH]$5$l$?5-;v$b$3$N2<=q$-%0%k!<%W$KF~$l$i$l$^$9\e(B (@pxref{Rejected
-Articles})\e$B!#\e(B
+\e$B5qH]$5$l$?5-;v$b$3$N2<=q$-%0%k!<%W$KF~$l$i$l$^\e(B
+\e$B$9\e(B (@pxref{Rejected Articles})\e$B!#\e(B
 
 @findex gnus-draft-send-all-messages
 @findex gnus-draft-send-message
-\e$B$=$l0J>eJT=8$7$J$$$GEj9F!J$b$7$/$O%a!<%k!K$7$?$$5qH]$5$l$?%a%C%;!<%8$,$?$/\e(B
-\e$B$5$s$"$k$N$G$"$l$P!"L?Na\e(B @kbd{D s} \e$B$r;H$&;v$,$G$-$^$9!#$3$NL?Na$O%W%m%;%9\e(B
-/\e$B@\F,0z?t$N=,47$rM}2r$7$^$9\e(B (@pxref{Process/Prefix})\e$B!#L?Na\e(B @kbd{D S}
-(@code{gnus-draft-send-all-messages}) \e$B$O%P%C%U%!$NA4$F$N%a%C%;!<%8$rAw$j=P\e(B
-\e$B$7$^$9!#\e(B
-
-\e$BAw$j$?$/$J$$%a%C%;!<%8$,$$$/$D$+$"$k$N$G$"$l$P!"L?Na\e(B @kbd{D t}
-(@code{gnus-draft-toggle-sending}) \e$B$r;H$C$F%a%C%;!<%8$rG[AwIT2D$N0u$rIU\e(B
-\e$B$1$k;v$,$G$-$^$9!#$3$l$O@Z$jBX$(L?Na$G$9!#\e(B
+\e$B$=$l0J>eJT=8$7$J$$$GEj9F\e(B (\e$B$b$7$/$O%a!<%k\e(B) \e$B$7$?$$5qH]$5$l$?%a%C%;!<%8$,$?\e(B
+\e$B$/$5$s$"$k$N$G$"$l$P!"L?Na\e(B @kbd{D s} \e$B$r;H$&;v$,$G$-$^$9!#$3$NL?Na$O%W%m\e(B
+\e$B%;%9\e(B/\e$B@\F,0z?t$N=,47$rM}2r$7$^$9\e(B (@pxref{Process/Prefix})\e$B!#L?\e(B
+\e$BNa\e(B @kbd{D S} (@code{gnus-draft-send-all-messages}) \e$B$O%P%C%U%!$NA4$F$N%a%C\e(B
+\e$B%;!<%8$rAw$j=P$7$^$9!#\e(B
 
+\e$BAw$j$?$/$J$$%a%C%;!<%8$,$$$/$D$+$"$k$N$G$"$l$P!"L?\e(B
+\e$BNa\e(B @kbd{D t} (@code{gnus-draft-toggle-sending}) \e$B$r;H$C$F%a%C%;!<%8$rG[Aw\e(B
+\e$BIT2D$N0u$rIU$1$k;v$,$G$-$^$9!#$3$l$O@Z$jBX$(L?Na$G$9!#\e(B
 
 @node Rejected Articles
 @section \e$B5qH]$5$l$?5-;v\e(B
 @cindex rejected articles
 
-\e$B;~!9%K%e!<%9%5!<%P!<$O5-;v$r5qH]$7$^$9!#$*$=$i$/%5!<%P!<$O$"$J$?$N4i$r9%$-\e(B
-\e$B$G$O$J$$$N$G$7$g$&!#$*$=$i$/$=$l$O;4$a$K46$8$?$+$i$G$7$g$&!#$*$=$i$/\e(B
-@emph{\e$B0-Kb\e(B (demon) \e$B$,$$$k$N$G$7$g$&\e(B}\e$B!#\e(B \e$B$*$=$i$/0zMQJ8$rF~$l$9$.$?$N$G$7$g\e(B
-\e$B$&!#$*$=$i$/%G%#%9%/$,0lGU$@$C$?$N$G$7$g$&!#$*$=$i$/%5!<%P!<$,Mn$A$F$$$?$N\e(B
-\e$B$G$7$g$&!#\e(B
+\e$B;~!9%K%e!<%9%5!<%P!<$O5-;v$r5qH]$7$^$9!#$*$=$i$/%5!<%P!<$O$"$J$?$N4i$r9%\e(B
+\e$B$-$G$O$J$$$N$G$7$g$&!#$*$=$i$/$=$l$O;4$a$K46$8$?$+$i$G$7$g$&!#$*$=$i\e(B
+\e$B$/\e(B @emph{\e$B0-Kb\e(B (demon) \e$B$,$$$k$N$G$7$g$&\e(B}\e$B!#$*$=$i$/0zMQJ8$rF~$l$9$.$?$N$G\e(B
+\e$B$7$g$&!#$*$=$i$/%G%#%9%/$,0lGU$@$C$?$N$G$7$g$&!#$*$=$i$/%5!<%P!<$,Mn$A$F\e(B
+\e$B$$$?$N$G$7$g$&!#\e(B
 
-\e$B$3$l$i$N>u67$O!"$b$A$m$s!"40A4$K\e(B gnus \e$B$N07$($kHO0O30$G$9!#!J\e(BGnus \e$B$O!"$b$A\e(B
+\e$B$3$l$i$N>u67$O!"$b$A$m$s!"40A4$K\e(B gnus \e$B$N07$($kHO0O30$G$9!#\e(B(Gnus \e$B$O!"$b$A\e(B
 \e$B$m$s!"$"$J$?$N308+$r0&$7$F$*$j!"$$$D$b5!7y$,NI$/!"Cf$rHt$S2s$kE7;H$,$$$F!"\e(B
 \e$B$I$l$/$i$$0zMQJ8$,4^$^$l$F$$$h$&$H5$$K$;$:!"0lGU$K$J$C$?$j!"Mn$C$3$A$?$j\e(B
-\e$B$7$^$;$s!#!K$G$9$+$i!"\e(Bgnus \e$B$O$3$l$i$N5-;v$r8e$G%5!<%P!<$N5$J,$,$h$/$J$k\e(B
+\e$B$7$^$;$s!#\e(B) \e$B$G$9$+$i!"\e(Bgnus \e$B$O$3$l$i$N5-;v$r8e$G%5!<%P!<$N5$J,$,$h$/$J$k\e(B
 \e$B$^$GJ]B8$7$^$9!#\e(B
 
 \e$B5qH]$5$l$?5-;v$O<+F0E*$KFCJL$J2<=q$-%0%k!<%W\e(B (@pxref{Drafts}) \e$B$KF~$l$i$l\e(B
 \e$B$^$9!#%5!<%P!<$,La$C$F$-$?$J$i!"IaDL$O$=$N%0%k!<%W$KF~$C$FA4$F$N5-;v$rAw\e(B
 \e$B$j$^$9!#\e(B
 
-
 @node Select Methods
 @chapter \e$BA*BrJ}K!\e(B
 @cindex foreign groups
@@ -8929,35 +9529,35 @@ Articles})\e$B!#\e(B
 \e$B$N%0%k!<%W$G$"$C$?$j!";v<B>e$N%0%k!<%W$G$"$C$?$j!"8D?ME*$J%a!<%k%0%k!<%W\e(B
 \e$B$G$"$C$?$j$9$k$G$7$g$&!#\e(B
 
-\e$B30It%0%k!<%W\e(B (\e$B$b$7$/$O!"K\Ev$KA4$F%0%k!<%W\e(B) \e$B$O\e(B @dfn{\e$BL>A0\e(B} \e$B$H\e(B
- @dfn{\e$BA*BrJ}K!\e(B} \e$B$G;XDj$5$l$^$9!#8e<T$r@h$KNc$K=P$9$H!"A*BrJ}K!$O:G=i$NMW\e(B
-\e$BAG$,$I$N%P%C%/%(%s%I$r;H$&$+\e(B (\e$B$?$H$($P!"\e(B@code{nntp}\e$B!"\e(B@code{nnspool}\e$B!"\e(B
-@code{nnml}) \e$B$G!"\e(B2\e$B$D$a$NMWAG$,\e(B @dfn{\e$B%5!<%P!<L>\e(B} \e$B$G$"$kO"A[%j%9%H$G$9!#A*\e(B
-\e$BBrJ}K!$K$O!"$=$NEv$N%P%C%/%(%s%I$K$H$C$FFCJL$N0UL#$r;}$DCM$G$"$kDI2C$NMW\e(B
-\e$BAG$,$"$k$+$bCN$l$^$;$s!#\e(B
+\e$B30It%0%k!<%W\e(B (\e$B$b$7$/$O!"K\Ev$KA4$F%0%k!<\e(B
+\e$B%W\e(B) \e$B$O\e(B @dfn{\e$BL>A0\e(B} \e$B$H\e(B @dfn{\e$BA*BrJ}K!\e(B} \e$B$G;XDj$5$l$^$9!#8e<T$r@h$KNc$K=P$9$H!"\e(B
+\e$BA*BrJ}K!$O:G=i$NMWAG$,$I$N%P%C%/%(%s%I$r;H$&$+\e(B (\e$B$?$H$($P!"\e(B@code{nntp}, @code{nnspool}, @code{nnml}) \e$B$G!"\e(B
+\e$BFs$D$a$NMWAG$,\e(B @dfn{\e$B%5!<%P!<L>\e(B} \e$B$G$"$kO"A[%j%9%H$G$9!#A*BrJ}K!$K$O!"$=$N\e(B
+\e$BEv$N%P%C%/%(%s%I$K$H$C$FFCJL$N0UL#$r;}$DCM$G$"$kDI2C$NMWAG$,$"$k$+$bCN$l\e(B
+\e$B$^$;$s!#\e(B
 
 \e$BA*BrJ}K!$O\e(B @dfn{\e$B;v<B>e$N%5!<%P!<\e(B} \e$B$rDj5A$9$k$H8@$&$3$H$,$G$-$k$+$b$7$l$^\e(B
-\e$B$;$s\e(B---\e$B$G$9$+$i;d$?$A$O$A$g$&$I$=$l$r$7$^$7$?\e(B (@pxref{The Server
-Buffer})\e$B!#\e(B
+\e$B$;$s\e(B---\e$B$G$9$+$i;d$?$A$O$A$g$&$I$=$l$r$7$^$7\e(B
+\e$B$?\e(B (@pxref{The Server Buffer})\e$B!#\e(B
 
 \e$B%0%k!<%W$N\e(B @dfn{\e$BL>A0\e(B} \e$B$O%P%C%/%(%s%I$,%0%k!<%W$rG'<1$9$kL>A0$G$9!#\e(B
 
-\e$B$?$H$($P!"\e(B@sc{nntp} \e$B%5!<%P!<$N%0%k!<%W\e(B @samp{soc.motss} \e$B$OL>A0\e(B
-@samp{soc.motss} \e$B$HA*BrJ}K!\e(B @code{(nntp "some.where.edu")} \e$B$r;}$A$^$9!#\e(B
+\e$B$?$H$($P!"\e(B@sc{nntp} \e$B%5!<%P!<$N%0%k!<%W\e(B @samp{soc.motss} \e$B$OL>\e(B
+\e$BA0\e(B @samp{soc.motss} \e$B$HA*BrJ}K!\e(B @code{(nntp "some.where.edu")} \e$B$r;}$A$^$9!#\e(B
 @code{nntp} \e$B%P%C%/%(%s%I$O$3$N%0%k!<%W$r\e(B @samp{soc.motss} \e$B$H$7$FCN$C$F$$\e(B
-\e$B$k$@$1$G$9$,!"\e(Bgnus \e$B$O$3$N%0%k!<%W$r\e(B @samp{nntp+some.where.edu:soc.motss}
-\e$B$H8F$S$^$9!#\e(B
+\e$B$k$@$1$G$9$,!"\e(Bgnus \e$B$O$3$N%0%k!<%W\e(B
+\e$B$r\e(B @samp{nntp+some.where.edu:soc.motss}\e$B$H8F$S$^$9!#\e(B
 
 \e$B$b$A$m$s!"0c$C$?J}K!$OA4$F$=$lFCM-$N$b$N$,$"$j$^$9!#\e(B
 
 @menu
-* The Server Buffer::     \e$B;v<B>e$N%5!<%P!<$r:n$C$FJT=8$9$k!#\e(B
-* Getting News::          USENET \e$B%K%e!<%9$r\e(B gnus \e$B$GFI$`!#\e(B
-* Getting Mail::          \e$B8D?ME*$J%a!<%k$r\e(B gnus \e$B$GFI$`!#\e(B
-* Browsing the Web::      Getting messages from a plethora of Web sources.
-* Other Sources::         \e$B%G%#%l%/%H%j!<!"%U%!%$%k!"\e(BSOUP \e$B%Q%1%C%H$rFI$`!#\e(B
-* Combined Groups::       \e$BJ#?t$N%0%k!<%W$r0l$D$N%0%k!<%W$K7k9g$9$k!#\e(B
-* Gnus Unplugged::        \e$B%K%e!<%9$H%a!<%k$r%*%U%i%$%s$GFI$`!#\e(B
+* The Server Buffer:: \e$B;v<B>e$N%5!<%P!<$r:n$C$FJT=8$9$k\e(B
+* Getting News::      USENET \e$B%K%e!<%9$r\e(B gnus \e$B$GFI$`\e(B
+* Getting Mail::      \e$B8D?ME*$J%a!<%k$r\e(B gnus \e$B$GFI$`\e(B
+* Browsing the Web::  \e$B2a>j$J%&%'%V$N;q8;$+$i%a%C%;!<%8$r<hF@$9$k\e(B
+* Other Sources::     \e$B%G%#%l%/%H%j!<!"%U%!%$%k!"\e(BSOUP \e$B%Q%1%C%H$rFI$`\e(B
+* Combined Groups::   \e$BJ#?t$N%0%k!<%W$r0l$D$N%0%k!<%W$K7k9g$9$k\e(B
+* Gnus Unplugged::    \e$B%K%e!<%9$H%a!<%k$r%*%U%i%$%s$GFI$`\e(B
 @end menu
 
 @node The Server Buffer
@@ -8967,17 +9567,19 @@ Buffer})\e$B!#\e(B
 \e$B$+%=%U%H%&%'%"$G$9!#\e(B
 
 @menu
-* Server Buffer Format::      \e$B$3$N%P%C%U%!$N308+$r%+%9%?%^%$%:$G$-$k!#\e(B
-* Server Commands::           \e$B%5!<%P!<$rA`$kL?Na!#\e(B
-* Example Methods::           \e$B%5!<%P!<;XDj$NNc!#\e(B
-* Creating a Virtual Server:: \e$B%;%C%7%g%s$NNc!#\e(B
-* Server Variables::          \e$B$I$NJQ?t$r@_Dj$9$k$+!#\e(B
-* Servers and Methods::       \e$B%5!<%P!<L>$rA*BrJ}K!$H$7$F;H$&;v$,$G$-$k!#\e(B
-* Unavailable Servers::       \e$B@\B3$7$h$&$H;n$_$?%5!<%P!<$N$$$/$D$+$,Mn$A$F$$$k$+$b$7$l$J$$!#\e(B
+* Server Buffer Format::      \e$B$3$N%P%C%U%!$N308+$r%+%9%?%^%$%:$G$-$k\e(B
+* Server Commands::           \e$B%5!<%P!<$rA`$kL?Na\e(B
+* Example Methods::           \e$B%5!<%P!<;XDj$NNc\e(B
+* Creating a Virtual Server:: \e$B%;%C%7%g%s$NNc\e(B
+* Server Variables::          \e$B$I$NJQ?t$r@_Dj$9$k$+\e(B
+* Servers and Methods::       \e$B%5!<%P!<L>$rA*BrJ}K!$H$7$F;H$&;v$,$G$-$k\e(B
+* Unavailable Servers::       \e$B@\B3$7$h$&$H;n$_$?%5!<%P!<$N$$$/$D$+$,Mn$A\e(B
+                              \e$B$F$$$k$+$b$7$l$J$$\e(B
 @end menu
 
 @vindex gnus-server-mode-hook
-\e$B%5!<%P!<%P%C%U%!$r:n@.$9$k$H$-$K\e(B @code{gnus-server-mode-hook} \e$B$,<B9T$5$l$^$9!#\e(B
+\e$B%5!<%P!<%P%C%U%!$r:n@.$9$k$H$-$K\e(B @code{gnus-server-mode-hook} \e$B$,<B9T$5$l\e(B
+\e$B$^$9!#\e(B
 
 @node Server Buffer Format
 @subsection \e$B%5!<%P!<%P%C%U%!$NI=<(MM<0\e(B
@@ -9018,7 +9620,6 @@ Buffer})\e$B!#\e(B
 
 @pxref{Formatting Variables} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
 
-
 @node Server Commands
 @subsection \e$B%5!<%P!<L?Na\e(B
 @cindex server commands
@@ -9069,20 +9670,19 @@ Buffer})\e$B!#\e(B
 @item s
 @kindex s (\e$B%5!<%P!<\e(B)
 @findex gnus-server-scan-server
-\e$B%5!<%P!<$K$=$N;q8;$+$i?7$7$$5-;v$rD4$Y$k$h$&$KMW5a$7$^$9\e(B
-(@code{gnus-server-scan-server})\e$B!#$3$l$O<g$K%a!<%k%5!<%P!<$KBP$7$F0UL#$r\e(B
-\e$B;}$A$^$9!#\e(B
+\e$B%5!<%P!<$K$=$N;q8;$+$i?7$7$$5-;v$rD4$Y$k$h$&$KMW5a$7$^\e(B
+\e$B$9\e(B (@code{gnus-server-scan-server})\e$B!#$3$l$O<g$K%a!<%k%5!<%P!<$KBP$7$F0U\e(B
+\e$BL#$r;}$A$^$9!#\e(B
 
 @item g
 @kindex g (\e$B%5!<%P!<\e(B)
 @findex gnus-server-regenerate-server
-\e$B%5!<%P!<$,A4$F$N%G!<%?9=B$$r:F:n@.$9$k$h$&$K5a$a$^$9\e(B
-(@code{gnus-server-regenerate-server})\e$B!#$3$l$OF14|$+$i$O$:$l$F$7$^$C$?%a!<\e(B
-\e$B%k%P%C%/%(%s%I$,$"$k$H$-$KLr$KN)$A$^$9!#\e(B
+\e$B%5!<%P!<$,A4$F$N%G!<%?9=B$$r:F:n@.$9$k$h$&$K5a$a$^\e(B
+\e$B$9\e(B (@code{gnus-server-regenerate-server})\e$B!#$3$l$OF14|$+$i$O$:$l$F$7$^$C\e(B
+\e$B$?%a!<%k%P%C%/%(%s%I$,$"$k$H$-$KLr$KN)$A$^$9!#\e(B
 
 @end table
 
-
 @node Example Methods
 @subsection \e$BJ}K!$NNc\e(B
 
@@ -9098,15 +9698,15 @@ Buffer})\e$B!#\e(B
 (nnspool "")
 @end lisp
 
-\e$B8+$?$H$*$j!"A*BrJ}K!$N:G=i$NMWAG$O%P%C%/%(%s%I$NL>A0$G!"\e(B2\e$BHVL\$O\e(B
-@dfn{\e$B%"%I%l%9\e(B} (address) \e$B!"$b$7$/$O$=$&8F$S$?$$$N$G$"$l$P!"\e(B@dfn{\e$BL>A0\e(B} \e$B$G\e(B
-\e$B$9!#\e(B
+\e$B8+$?$H$*$j!"A*BrJ}K!$N:G=i$NMWAG$O%P%C%/%(%s%I$NL>A0$G!"FsHVL\\e(B
+\e$B$O\e(B @dfn{\e$B%"%I%l%9\e(B} (address)\e$B!"$b$7$/$O$=$&8F$S$?$$$N$G$"$l$P!"\e(B
+@dfn{\e$BL>A0\e(B} \e$B$G$9!#\e(B
 
-\e$B$3$l$i$N\e(B2\e$B$D$NMWAG$N8e$K$O!"G$0U$N?t$N\e(B @code{(@var{\e$BJQ?t\e(B} @var{\e$BMM<0\e(B})} \e$B$N\e(B
-\e$BBP$rF~$l$k;v$,$G$-$^$9!#\e(B
+\e$B$3$l$i$NFs$D$NMWAG$N8e$K$O!"G$0U$N?t\e(B
+\e$B$N\e(B @code{(@var{\e$BJQ?t\e(B} @var{\e$BMM<0\e(B})} \e$B$NBP$rF~$l$k;v$,$G$-$^$9!#\e(B
 
-\e$B:G=i$NNc$KLa$j$^$7$g$&\e(B---\e$B$=$N%^%7%s$N%]!<%H\e(B15\e$B$+$iFI$_$?$+$C$?$H;W$C$F$/\e(B
-\e$B$@$5$$!#$3$l$,$=$N;~$K!"$J$k$Y$-A*BrJ}K!$G$9\e(B:
+\e$B:G=i$NNc$KLa$j$^$7$g$&\e(B---\e$B$=$N%^%7%s$N%]!<%H\e(B 15 \e$B$+$iFI$_$?$+$C$?$H;W$C$F\e(B
+\e$B$/$@$5$$!#$3$l$,$=$N;~$K!"$J$k$Y$-A*BrJ}K!$G$9\e(B:
 
 @lisp
 (nntp "news.funet.fi" (nntp-port-number 15))
@@ -9116,7 +9716,7 @@ Buffer})\e$B!#\e(B
 \e$BFI$`$Y$-$G$7$g$&$,!"$3$l$O\e(B @code{nnmh} \e$B$NNc$G$9!#\e(B
 
 @code{nnml} \e$B$O%9%W!<%k$N$h$&$J9=B$$GFI$`%a!<%k%P%C%/%(%s%I$G$9!#Nc$($P!"\e(B
-\e$B@\?($r?^$j$?$$\e(B2\e$B$D$N9=B$$,$"$k$H$7$^$7$g$&\e(B: \e$B0l$D$O$"$J$?$N;dE*$J%a!<%k%9\e(B
+\e$B@\?($r?^$j$?$$Fs$D$N9=B$$,$"$k$H$7$^$7$g$&\e(B: \e$B0l$D$O$"$J$?$N;dE*$J%a!<%k%9\e(B
 \e$B%W!<%k$G!"B>J}$O8xE*$J$b$N$G$9!#$3$l$O;dE*$J%a!<%k$N$?$a$K;HMQ2DG=$J;XDj\e(B
 \e$B$G$9\e(B:
 
@@ -9135,9 +9735,12 @@ Buffer})\e$B!#\e(B
       (nnmh-get-new-mail nil))
 @end lisp
 
+@cindex proxy
+@cindex firewall
+
 \e$BKIJI\e(B (firewall) \e$B$NCf$K$$$F!"KIJI%^%7%s$+$i$N\e(B @sc{nntp} \e$B%5!<%P!<$X$N@\B3\e(B
-\e$B$7$+$J$$$N$G$"$l$P!"\e(Bgnus \e$B$KKIJI%^%7%s$K\e(B @code{rlogin} \e$B$7$F!"$=$3$+$i\e(B
-@sc{nntp} \e$B%5!<%P!<$K\e(B telnet \e$B$r$9$k$h$&$K;X<($9$k;v$,$G$-$^$9!#\e(B
+\e$B$7$+$J$$$N$G$"$l$P!"\e(Bgnus \e$B$KKIJI%^%7%s$K\e(B @code{rlogin} \e$B$7$F!"$=$3$+\e(B
+\e$B$i\e(B @sc{nntp} \e$B%5!<%P!<$K\e(B telnet \e$B$r$9$k$h$&$K;X<($9$k;v$,$G$-$^$9!#\e(B
 \e$B$3$l$r$9$k;v$O>/$7$P$+$i$7$$$G$9$,!";v<B>e$N%5!<%P!<$NDj5A$O$*$=$i$/$3$N\e(B
 \e$B$h$&$J$b$N$K$J$k$Y$-$G$9\e(B:
 
@@ -9165,9 +9768,8 @@ Buffer})\e$B!#\e(B
 @end lisp
 
 \e$B$3$l$O$b$A$m$s!"<+F0G'>Z$rDs6!$9$k$?$a$K\e(B @code{ssh-agent} \e$B$rE,@Z$K@_Dj$7\e(B
-\e$B$J$1$l$P$J$j$^$;$s!#05=L$5$l$?@\B3$rF@$k$?$a$K$O!"\e(B@code{ssh}\e$B$N%U%!%$%k\e(B
-@file{config} \e$B$G\e(B @samp{Compression} \e$B%*%W%7%g%s$,$"$kI,MW$,$"$j$^$9!#\e(B
-
+\e$B$J$1$l$P$J$j$^$;$s!#05=L$5$l$?@\B3$rF@$k$?$a$K$O!"\e(B@code{ssh}\e$B$N%U%!%$\e(B
+\e$B%k\e(B @file{config} \e$B$G\e(B @samp{Compression} \e$B%*%W%7%g%s$,$"$kI,MW$,$"$j$^$9!#\e(B
 
 @node Creating a Virtual Server
 @subsection \e$B;v<B>e$N%5!<%P!<$r:n@.$9$k\e(B
@@ -9204,7 +9806,6 @@ Buffer})\e$B!#\e(B
 \e$B<B>e$N%5!<%P!<$G\e(B @kbd{RET} \e$B$r2!$9$H!"1\Mw%P%C%U%!$KF~$k$Y$-$G!"I=<($5$l\e(B
 \e$B$F$$$k$I$N%0%k!<%W$K$G$bF~$k;v$,$G$-$k$O$:$G$9!#\e(B
 
-
 @node Server Variables
 @subsection \e$B%5!<%P!<JQ?t\e(B
 
@@ -9214,8 +9815,8 @@ Buffer})\e$B!#\e(B
 \e$B$-=P$5$l$?\e(B" \e$BJQ?t$OJQ99$5$l$^$;$s!#\e(B
 
 \e$B$3$l$OIaDL$O%G%#%l%/%H%j!<$d%U%!%$%k$NJQ?t$K1F6A$7$^$9!#Nc$($P!"\e(B
-@code{nnml-directory} \e$B$O%G%#%U%)%k%H$G\e(B @file{~/Mail} \e$B$G$9$,!"A4$F$N\e(B
-@code{nnml} \e$B%G%#%l%/%H%j!<JQ?t$O$=$NJQ?t$K$h$C$F=i4|2=$5$l$k$N$G!"\e(B
+@code{nnml-directory} \e$B$O%G%#%U%)%k%H$G\e(B @file{~/Mail} \e$B$G$9$,!"A4$F\e(B
+\e$B$N\e(B @code{nnml} \e$B%G%#%l%/%H%j!<JQ?t$O$=$NJQ?t$K$h$C$F=i4|2=$5$l$k$N$G!"\e(B
 @code{nnml-active-file} \e$B$O\e(B @file{~/Mail/active} \e$B$K$J$j$^$9!#$b$7?7$7$$;v\e(B
 \e$B<B>e$N\e(B @code{nnml} \e$B%5!<%P!<$rDj5A$7$?>l9g!"\e(B@code{nnml-directory} \e$B$r@_Dj\e(B
 \e$B$9$k$@$1$G$O=<J,$G$O\e(B@emph{\e$B$"$j$^$;$s\e(B}---\e$B$"$J$?$OK>$s$@>uBV$K$J$k$h$&$K!"\e(B
@@ -9231,7 +9832,6 @@ Buffer})\e$B!#\e(B
       (nnml-newsgroups-file "~/my-mail/newsgroups"))
 @end lisp
 
-
 @node Servers and Methods
 @subsection \e$B%5!<%P!<$HJ}K!\e(B
 
@@ -9241,7 +9841,6 @@ Buffer})\e$B!#\e(B
 \e$B%I$rC!$+$J$/$F$9$`2DG=@-$,$"$j$^$9!#$=$7$F!"A4$F$K$o$?$C$F!"$=$NJ}$,NI$$\e(B
 \e$B$G$9!#\e(B
 
-
 @node Unavailable Servers
 @subsection \e$B;HMQIT2DG=$J%5!<%P!<\e(B
 
@@ -9252,18 +9851,18 @@ Buffer})\e$B!#\e(B
 \e$B$2$^$9!#\e(B
 
 \e$B$=$l$O9T57$,0-$$$H;W$&;v$,$"$k$+$b$7$l$^$;$s$,!"$=$l$O$?$$$F$$$N$H$-$K$O\e(B
-\e$BNI$$J}K!$G$9!#Nc$($P!"%5!<%P!<\e(B @samp{nephelococcdyia.com} \e$B$K\e(B10\e$B8D9XFI$7$F\e(B
-\e$B$$$k%0%k!<%W$,$"$k$H$7$^$7$g$&!#%5!<%P!<$O$I$3$+Hs>o$K1s$/$K$"$j!"%^%7%s\e(B
-\e$B$O$H$F$bCY$$$N$G!"$=$l$,:#F|$O$"$J$?$H$N@\B3$r5qH]$9$k$+$I$&$+$rD4$Y$k$@\e(B
-\e$B$1$G\e(B1\e$BJ,$+$+$j$^$9!#$b$7\e(B gnus \e$B$,$=$l$r\e(B10\e$B2s;n$9$h$&$K$J$C$F$$$?$J$i!"$"$J\e(B
-\e$B$?$OHs>o$K$&$k$5$/;W$&$G$7$g$&!#$G$9$+$i!"\e(Bgnus \e$B$O$=$l$r;n$=$&$H$O$7$^$;\e(B
-\e$B$s!#\e(B1\e$BEY\e(B ``connection refused'' (\e$B@\B3$O5qH]$5$l$^$7$?\e(B) \e$B$r<u$1<h$k$H!"$=$l\e(B
-\e$B$O%5!<%P!<$,\e(B ``down'' (\e$BMn$A$F$$$k\e(B) \e$B$G$"$k$H$_$J$7$^$9!#\e(B
+\e$BNI$$J}K!$G$9!#Nc$($P!"%5!<%P!<\e(B @samp{nephelococcdyia.com} \e$B$K\e(B 10 \e$B8D9XFI$7\e(B
+\e$B$F$$$k%0%k!<%W$,$"$k$H$7$^$7$g$&!#%5!<%P!<$O$I$3$+Hs>o$K1s$/$K$"$j!"%^%7\e(B
+\e$B%s$O$H$F$bCY$$$N$G!"$=$l$,:#F|$O$"$J$?$H$N@\B3$r5qH]$9$k$+$I$&$+$rD4$Y$k\e(B
+\e$B$@$1$G0lJ,$+$+$j$^$9!#$b$7\e(B gnus \e$B$,$=$l$r\e(B 10 \e$B2s;n$9$h$&$K$J$C$F$$$?$J$i!"\e(B
+\e$B$"$J$?$OHs>o$K$&$k$5$/;W$&$G$7$g$&!#$G$9$+$i!"\e(Bgnus \e$B$O$=$l$r;n$=$&$H$O$7\e(B
+\e$B$^$;$s!#0lEY\e(B ``connection refused'' (\e$B@\B3$O5qH]$5$l$^$7$?\e(B) \e$B$r<u$1<h$k$H!"\e(B
+\e$B$=$l$O%5!<%P!<$,\e(B ``down'' (\e$BMn$A$F$$$k\e(B) \e$B$G$"$k$H$_$J$7$^$9!#\e(B
 
 \e$B$=$l$G!"0l;~E*$K$=$N%^%7%s$N5!7y$,0-$$$@$1$@$H2?$,5/$3$k$N$G$7$g$&\e(B? \e$B$I$&\e(B
 \e$B$d$C$F%^%7%s$,La$C$F$-$F$$$k$+$I$&$+$C$r:F$SD4$Y$k;v$,$G$-$k$G$N$7$g$&\e(B?
 
-\e$B%5!<%P!<%P%C%U%!$KHt$S0\$C$F\e(B (@pxref{The Server Buffer}) \e$B!"0J2<$NL?Na$G\e(B
+\e$B%5!<%P!<%P%C%U%!$KHt$S0\$C$F\e(B (@pxref{The Server Buffer})\e$B!"0J2<$NL?Na$G\e(B
 \e$B$D$D$/$@$1$G$G$-$^$9\e(B:
 
 @table @kbd
@@ -9271,8 +9870,8 @@ Buffer})\e$B!#\e(B
 @item O
 @kindex O (\e$B%5!<%P!<\e(B)
 @findex gnus-server-open-server
-\e$B8=:_$N9T$N%5!<%P!<$H$N@\B3$r3NN)$7$h$&$H$7$^$9\e(B
-(@code{gnus-server-open-server})\e$B!#\e(B
+\e$B8=:_$N9T$N%5!<%P!<$H$N@\B3$r3NN)$7$h$&$H$7$^\e(B
+\e$B$9\e(B (@code{gnus-server-open-server})\e$B!#\e(B
 
 @item C
 @kindex C (\e$B%5!<%P!<\e(B)
@@ -9282,14 +9881,14 @@ Buffer})\e$B!#\e(B
 @item D
 @kindex D (\e$B%5!<%P!<\e(B)
 @findex gnus-server-deny-server
-\e$B8=:_$N%5!<%P!<$K@\B3IT2DG=$N0u$rIU$1$^$9\e(B
-(@code{gnus-server-open-all-server})\e$B!#\e(B
+\e$B8=:_$N%5!<%P!<$K@\B3IT2DG=$N0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-server-open-all-server})\e$B!#\e(B
 
 @item M-c
 @kindex M-c (\e$B%5!<%P!<\e(B)
 @findex gnus-server-close-to-all-servers
-\e$B%P%C%U%!$K$"$kA4$F$N%5!<%P!<$H$N@\B3$rJD$8$^$9\e(B
-(@code{gnus-server-close-all-servers})\e$B!#\e(B
+\e$B%P%C%U%!$K$"$kA4$F$N%5!<%P!<$H$N@\B3$rJD$8$^\e(B
+\e$B$9\e(B (@code{gnus-server-close-all-servers})\e$B!#\e(B
 
 @item R
 @kindex R (\e$B%5!<%P!<\e(B)
@@ -9298,34 +9897,32 @@ Gnus \e$B$,$I$l$+$N%5!<%P!<$+$i@\B35qH]$r<u$1$?$+$I$&$+$NA4$F$N0u$r>C5n$7$^\e(B
 \e$B$9\e(B (@code{gnus-server-remove-denials})\e$B!#\e(B
 @end table
 
-
 @node Getting News
 @section \e$B%K%e!<%9$N<hF@\e(B
 @cindex reading news
 @cindex newsbackends
 
 \e$B%K%e!<%9%j!<%@!<$OIaDL$O%K%e!<%9$rFI$`;v$K;H$o$l$^$9!#\e(BGnus \e$B$O8=:_$O%K%e!<\e(B
-\e$B%:$r<hF@$9$k$?$a$K\e(B2\e$B$D$@$1$NJ}K!$rDs6!$7$F$$$^$9\e(B---@sc{nntp} \e$B%5!<%P!<$+!"\e(B
+\e$B%:$r<hF@$9$k$?$a$KFs$D$@$1$NJ}K!$rDs6!$7$F$$$^$9\e(B---@sc{nntp} \e$B%5!<%P!<$+!"\e(B
 \e$B%m!<%+%k%9%W!<%k$+$iFI$`;v$,$G$-$^$9!#\e(B
 
 @menu
-* NNTP::               @sc{nntp} \e$B%5!<%P!<$+$i%K%e!<%9$rFI$`!#\e(B
-* News Spool::         \e$B%m!<%+%k%9%W!<%k$+$i%K%e!<%9$rFI$`!#\e(B
+* NNTP::       @sc{nntp} \e$B%5!<%P!<$+$i%K%e!<%9$rFI$`\e(B
+* News Spool:: \e$B%m!<%+%k%9%W!<%k$+$i%K%e!<%9$rFI$`\e(B
 @end menu
 
-
 @node NNTP
 @subsection @sc{nntp}
 @cindex nntp
 
-@sc{nntp} \e$B%5!<%P!<$N30It%0%k!<%W$r9XFI$9$k$N$OHf3SE*4JC1$G$9!#C1$K\e(B
-@code{nntp} \e$B$rJ}K!$H$7$F;XDj$7!"\e(B@sc{nntp} \e$B%5!<%P!<$N%"%I%l%9\e(B (address)
-\e$B$r!"$&!<$s!"%"%I%l%9$H$7$F;XDj$9$k$@$1$G$9!#\e(B
+@sc{nntp} \e$B%5!<%P!<$N30It%0%k!<%W$r9XFI$9$k$N$OHf3SE*4JC1$G$9!#C1\e(B
+\e$B$K\e(B @code{nntp} \e$B$rJ}K!$H$7$F;XDj$7!"\e(B@sc{nntp} \e$B%5!<%P!<$N%"%I%l\e(B
+\e$B%9\e(B (address) \e$B$r!"$&!<$s!"%"%I%l%9$H$7$F;XDj$9$k$@$1$G$9!#\e(B
 
 \e$B$b$7\e(B @sc{nntp} \e$B%5!<%P!<$,I8=`$G$J$$%]!<%H\e(B (port) \e$B$K0LCV$7$F$$$k$H$-$O!"\e(B
-\e$BA*BrJ}K!$N\e(B3\e$BHVL\$NMWAG$r$3$N%]!<%H$N?t;z$K@_Dj$9$k;v$G@5$7$$%]!<%H$K@\B3\e(B
-\e$B$9$k;v$,$G$-$k$G$7$g$&!#$=$N$?$a$K%0%k!<%W>pJs$rJT=8$7$J$1$l$P$J$j$^$;$s\e(B
-(@pxref{Foreign Groups})\e$B!#\e(B
+\e$BA*BrJ}K!$N;0HVL\$NMWAG$r$3$N%]!<%H$N?t;z$K@_Dj$9$k;v$G@5$7$$%]!<%H$K@\B3\e(B
+\e$B$9$k;v$,$G$-$k$G$7$g$&!#$=$N$?$a$K%0%k!<%W>pJs$rJT=8$7$J$1$l$P$J$j$^$;\e(B
+\e$B$s\e(B (@pxref{Foreign Groups})\e$B!#\e(B
 
 \e$B30It%0%k!<%W$NL>A0$O4pK\%0%k!<%W$HF1$8$G$"$k;v$,$G$-$^$9!#<B:]!"$"$J$?$N\e(B
 \e$B;W$&$^$^$KF1$8%0%k!<%W$r2DG=$J8B$j$N0c$C$?%5!<%P!<$+$i9XFI$9$k;v$,$G$-$^\e(B
@@ -9344,8 +9941,8 @@ Gnus \e$B$,$I$l$+$N%5!<%P!<$+$i@\B35qH]$r<u$1$?$+$I$&$+$NA4$F$N0u$r>C5n$7$^\e(B
 @findex nntp-send-authinfo
 @findex nntp-send-mode-reader
 \e$B$O@\B3$,$G$-$?8e$K<B9T$5$l$^$9!#$=$l$O\e(B @sc{nntp} \e$B%5!<%P!<$K@\?($7$?8e$K\e(B
-\e$B$=$l$KL?Na$rAw$k$?$a$K;H$o$l$k;v$,$G$-$^$9!#%G%#%U%)%k%H$G$O4X?t\e(B
-@code{nntp-send-mode-reader} \e$B$K$h$jL?Na\e(B @code{MODE READER} \e$B$,%5!<%P!<\e(B
+\e$B$=$l$KL?Na$rAw$k$?$a$K;H$o$l$k;v$,$G$-$^$9!#%G%#%U%)%k%H$G$O4X\e(B
+\e$B?t\e(B @code{nntp-send-mode-reader} \e$B$K$h$jL?Na\e(B @code{MODE READER} \e$B$,%5!<%P!<\e(B
 \e$B$KAw$i$l$^$9!#$=$N4X?t$O>o$K$3$N%U%C%/$K$"$k$Y$-$G$9!#\e(B
 
 @item nntp-authinfo-function
@@ -9353,27 +9950,29 @@ Gnus \e$B$,$I$l$+$N%5!<%P!<$+$i@\B35qH]$r<u$1$?$+$I$&$+$NA4$F$N0u$r>C5n$7$^\e(B
 @findex nntp-send-authoinfo
 @vindex nntp-authinfo-file
 \e$B$3$N4X?t$O\e(B @sc{nntp} \e$B%5!<%P!<$K\e(B @samp{AUTHINFO} \e$B$rAw$k$?$a$K;H$o$l$^$9!#\e(B
-\e$B%G%#%U%)%k%H$N4X?t$O\e(B @code{nntp-send-authinfo} \e$B$G!"\e(B@file{~/.authinfo}
-(\e$B$b$7$/$OJQ?t\e(B @code{nntp-authinfo-file} \e$B$K@_Dj$7$?$I$N$h$&$J$b$N$G$b\e(B) \e$B$r\e(B
-\e$B;HMQ2DG=$J5-:\$rD4$Y$k$?$a$KC5$7$^$9!#$b$70l$D$b8+$D$+$i$J$+$C$?$i!"$"$J\e(B
-\e$B$?$K%m%0%$%sL>$H%Q%9%o!<%I$NF~NO$rB%?J$7$^$9!#%U%!%$%k\e(B
-@file{~/.authinfo} \e$B$NMM<0$O\e(B (\e$B$[$H$s$I\e(B) @code{ftp} \e$B$N%U%!%$%k\e(B
-@file{~/.netrc} \e$B$HF1$8$G!"$=$l$O\e(B @code{ftp} \e$B$N%^%K%e%"%k%Z!<%8$KDj5A$5$l\e(B
-\e$B$F$$$^$9$,!"$3$3$N$b$N$O82Cx$J;v<B$G$9\e(B:
+\e$B%G%#%U%)%k%H$N4X?t$O\e(B @code{nntp-send-authinfo} \e$B$G!"\e(B
+@file{~/.authinfo} (\e$B$b$7$/$OJQ?t\e(B @code{nntp-authinfo-file} \e$B$K@_Dj$7$?$I\e(B
+\e$B$N$h$&$J$b$N$G$b\e(B) \e$B$r;HMQ2DG=$J5-:\$rD4$Y$k$?$a$KC5$7$^$9!#$b$70l$D$b8+$D\e(B
+\e$B$+$i$J$+$C$?$i!"$"$J$?$K%m%0%$%sL>$H%Q%9%o!<%I$NF~NO$rB%?J$7$^$9!#%U%!%$\e(B
+\e$B%k\e(B @file{~/.authinfo} \e$B$NMM<0$O\e(B (\e$B$[$H$s$I\e(B) @code{ftp} \e$B$N%U%!%$\e(B
+\e$B%k\e(B @file{~/.netrc} \e$B$HF1$8$G!"$=$l$O\e(B @code{ftp} \e$B$N%^%K%e%"%k%Z!<%8$KDj5A\e(B
+\e$B$5$l$F$$$^$9$,!"$3$3$N$b$N$O82Cx$J;v<B$G$9\e(B:
 
 @enumerate
 @item
 \e$B%U%!%$%k$O0l$D0J>e$N9T$r4^$_!"$=$l$>$l$O0l$D$N%5!<%P!<$rDj5A$7$^$9!#\e(B
 
 @item
-\e$B$=$l$>$l$N9T$OG$0U$N?t$N\e(B \e$B6h@Z$j0u\e(B/\e$BCM\e(B \e$B$NBP$r4^$`;v$,$G$-$^$9!#M-8z$J6h@Z\e(B
-\e$B$j0u$O\e(B @samp{machine}\e$B!"\e(B@samp{login}\e$B!"\e(B@samp{password}\e$B!"\e(B@samp{default}\e$B!"\e(B
-@samp{force} \e$B$G$9!#\e(B(\e$B:G8e$N$b$N$OM-8z$J\e(B @code{.netrc}/@code{ftp} \e$B$N6h@Z$j\e(B
-\e$B0u$G$O$"$j$^$;$s!#$3$l$,%U%!%$%k\e(B @file{.authinfo} \e$B$,\e(B @file{.netrc} \e$B%U%!\e(B
-\e$B%$%kMM<0$+$i0o$l$kM#0l$NJ}K!$G$9!#\e(B)
-
+\e$B$=$l$>$l$N9T$OG$0U$N?t$N\e(B \e$B6h@Z$j0u\e(B/\e$BCM\e(B \e$B$NBP$r4^$`;v$,$G$-$^$9!#\e(B
 @end enumerate
 
+\e$BM-8z$J6h@Z$j0u$O\e(B @samp{machine}, @samp{login}, @samp{password},
+@samp{default} \e$B$G$9!#\e(Bgnus \e$B$O\e(B @file{.netrc}/@code{ftp} \e$B$N9=J8$N867?$K$O8=\e(B
+\e$B$l$J$$Fs$D$N?7$7$$6h@Z$j0u!"L>IU$1$F\e(B @samp{port} \e$B$H\e(B @samp{force} \e$B$rF3F~\e(B
+\e$B$7$^$9!#\e(B(\e$B$3$l$,\e(B @file{.authinfo} \e$B%U%!%$%k$NMM<0$,\e(B @file{.netrc} \e$B%U%!%$%k\e(B
+\e$B$NMM<0$+$i0o$l$kM#0l$NJ}K!$G$9!#\e(B) @samp{port} \e$B$O%5!<%P!<$N$I$N%]!<%H$rG'\e(B
+\e$B>Z$KMQ$$$k$+$r<($7!"\e(B@samp{force} \e$B$O0J2<$G@bL@$7$^$9!#\e(B
+
 \e$B$3$l$,$=$N%U%!%$%k$NNc$G$9\e(B:
 
 @example
@@ -9386,13 +9985,13 @@ machine nntp.ifi.uio.no login larsi force yes
 
 \e$B$3$NNc$G$O!"%m%0%$%sL>$H%Q%9%o!<%I$NN>J}$,A0<T$N%5!<%P!<$K$OM?$($i$l$F$$\e(B
 \e$B$k$N$KBP$7$F!"8e<T$O%m%0%$%sL>$@$1$r5s$2$F$$$F!"MxMQ<T$O%Q%9%o!<%I$NF~NO\e(B
-\e$B$rB%?J$5$l$^$9!#8e<T$O\e(B @samp{force} \e$B%?%0$b;}$C$F$$$F!"$=$l$O@\B3;~$K\e(B
-@var{nntp} \e$B%5!<%P!<$KG'>Z>pJs\e(B (authinfo) \e$B$,Aw$i$l$k$H$$$&;v$G$9!#%G%#%U%)\e(B
-\e$B%k%H\e(B (\e$B$9$P$o$A!"\e(B@samp{force} \e$B%?%0$,L5$$$H$-\e(B) \e$B$G$O\e(B @var{nntp} \e$B%5!<%P!<$,\e(B
-\e$BG'>Z>pJs$r?R$M$J$$8B$j$=$l$r\e(B @var{nntp} \e$B%5!<%P!<$KAw$j$^$;$s!#\e(B
+\e$B$rB%?J$5$l$^$9!#8e<T$O\e(B @samp{force} \e$B%?%0$b;}$C$F$$$F!"$=$l$O@\B3;~\e(B
+\e$B$K\e(B @var{nntp} \e$B%5!<%P!<$KG'>Z>pJs\e(B (authinfo) \e$B$,Aw$i$l$k$H$$$&;v$G$9!#%G%#\e(B
+\e$B%U%)%k%H\e(B (\e$B$9$P$o$A!"\e(B@samp{force} \e$B%?%0$,L5$$$H$-\e(B) \e$B$G$O\e(B @var{nntp} \e$B%5!<%P!<\e(B
+\e$B$,G'>Z>pJs$r?R$M$J$$8B$j$=$l$r\e(B @var{nntp} \e$B%5!<%P!<$KAw$j$^$;$s!#\e(B
 
-@samp{machine} \e$B9T$K9gCW$7$J$$A4$F$N%5!<%P!<$KE,MQ$5$l$k\e(B @samp{default}
-\e$B9T$rDI2C$9$k;v$b$G$-$^$9!#\e(B
+@samp{machine} \e$B9T$K9gCW$7$J$$A4$F$N%5!<%P!<$KE,MQ$5$l\e(B
+\e$B$k\e(B @samp{default} \e$B9T$rDI2C$9$k;v$b$G$-$^$9!#\e(B
 
 @example
 default force yes
@@ -9433,9 +10032,10 @@ default force yes
 \e$B$b$7\e(B @sc{nntp} \e$B%5!<%P!<$,\e(B @sc{nov} \e$B%X%C%@!<$N5!G=$rDs6!$7$F$$$J$$$N$G$"\e(B
 \e$B$l$P!"$3$N%P%C%/%(%s%I$OL?Na\e(B @code{head} \e$B$r$$$/$D$bAw$C$F!"%X%C%@!<$r=8\e(B
 \e$B$a$^$9!#$3$NF0:n$rB.$/$9$k$?$a$K!"%P%C%/%(%s%I$OJVEz$rBT$?$:$K$3$NL?Na$r\e(B
-\e$B$?$/$5$sAw$j!"$=$l$+$iA4$F$NJVEz$rFI$_$^$9!#$3$l$OJQ?t\e(B
-@code{nntp-maximum-request} \e$B$K$h$C$F@)8f$5$l!"%G%#%U%)%k%H$G\e(B400\e$B$G$9!#$b\e(B
-\e$B$7%M%C%H%o!<%/$,8N>c$,$A$G$"$k$J$i!"$3$NJQ?t$r\e(B1\e$B$K@_Dj$9$k$Y$-$G$7$g$&!#\e(B
+\e$B$?$/$5$sAw$j!"$=$l$+$iA4$F$NJVEz$rFI$_$^$9!#$3$l$OJQ\e(B
+\e$B?t\e(B @code{nntp-maximum-request} \e$B$K$h$C$F@)8f$5$l!"%G%#%U%)%k%H$G\e(B 400 \e$B$G$9!#\e(B
+\e$B$b$7%M%C%H%o!<%/$,8N>c$,$A$G$"$k$J$i!"$3$NJQ?t$r\e(B 1 \e$B$K@_Dj$9$k$Y$-$G$7$g\e(B
+\e$B$&!#\e(B
 
 @item nntp-connection-timeout
 @vindex nntp-connection-timeout
@@ -9444,9 +10044,8 @@ default force yes
 \e$BJVEz$G$-$J$$$/$i$$Ii2Y$,$+$+$C$F$$$k!"$J$I$NLdBj$,$"$k$G$7$g$&!#$3$l$O:$$C\e(B
 \e$B$?LdBj$K$J$k$3$H$,$"$j$^$9$,!"\e(B@code{nntp-connection-timeout} \e$B$r@_Dj$9$k\e(B
 \e$B;v$K$h$j$"$kDxEY2r>C$9$k;v$,$G$-$^$9!#$3$l$O@\B3$r$"$-$i$a$k$^$($K!"\e(B
-@code{nntp} \e$B%P%C%/%(%s%I$,2?ICBT$D$+$r<($9@0?t$G$9!#$b$7$3$l$,\e(B
-@code{nil} \e$B$G$"$k$H!"$3$l$,=i4|@_Dj$G$9$,!";~4V@Z$l@ZCG$O$J$5$l$^$;\e(B
-\e$B$s!#\e(B
+@code{nntp} \e$B%P%C%/%(%s%I$,2?ICBT$D$+$r<($9@0?t$G$9!#$b$7$3$l\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$k$H!"$3$l$,=i4|@_Dj$G$9$,!";~4V@Z$l@ZCG$O$J$5$l$^$;$s!#\e(B
 
 @c @item nntp-command-timeout
 @c @vindex nntp-command-timeout
@@ -9477,7 +10076,7 @@ default force yes
 @findex nntp-open-network-stream
 @item nntp-open-connection-function
 @vindex nntp-open-connection-function
-\e$B$3$N4X?t$O1s3V%7%9%F%`$K@\B3$9$k$?$a$K;H$o$l$^$9!#\e(B4\e$B$D$N4{@=4X?t$,Ds6!$5\e(B
+\e$B$3$N4X?t$O1s3V%7%9%F%`$K@\B3$9$k$?$a$K;H$o$l$^$9!#;M$D$N4{@=4X?t$,Ds6!$5\e(B
 \e$B$l$F$$$^$9\e(B:
 
 @table @code
@@ -9485,7 +10084,7 @@ default force yes
 \e$B$3$l$O=i4|@_Dj$G!"C1=c$K1s3V%7%9%F%`$N2?$i$+$N%]!<%H$+B>$N$b$K@\B3$7$^$9!#\e(B
 
 @item nntp-open-rlogin
-@samp{rlogin} \e$B$r1s3V%7%9%F%`$K9T$C$F!"$=$3$+$i;EMM2DG=$J\e(B @sc{nntp} \e$B%5!<\e(B
+@samp{rlogin} \e$B$r1s3V%7%9%F%`$K9T$C$F!"$=$3$+$i;HMQ2DG=$J\e(B @sc{nntp} \e$B%5!<\e(B
 \e$B%P!<$K\e(B @samp{telnet} \e$B$r$7$^$9!#\e(B
 
 @code{nntp-open-rlogin} \e$B$K4XO"$7$?JQ?t$G$9\e(B:
@@ -9494,8 +10093,8 @@ default force yes
 
 @item nntp-rlogin-program
 @vindex nntp-rlogin-program
-\e$B1s3V%^%7%s$K%m%0%$%s$r$9$k$?$a$K;H$o$l$k%W%m%0%i%`$G$9!#%G%#%U%)%k%H$O\e(B
-@samp{rsh} \e$B$G$9$,!"\e(B@samp{ssh} \e$B$,?M5$$N$"$kBeBX<jCJ$G$9!#\e(B
+\e$B1s3V%^%7%s$K%m%0%$%s$r$9$k$?$a$K;H$o$l$k%W%m%0%i%`$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @samp{rsh} \e$B$G$9$,!"\e(B@samp{ssh} \e$B$,?M5$$N$"$kBeBX<jCJ$G$9!#\e(B
 
 @item nntp-rlogin-parameters
 @vindex nntp-rlogin-parameters
@@ -9537,8 +10136,8 @@ default force yes
 
 @item nntp-telnet-shell-prompt
 @vindex nntp-telnet-shell-prompt
-\e$B1s3V%^%7%s$G$N%7%'%k$N%W%m%s%W%H$K9gCW$9$k@55,I=8=$G$9!#%G%#%U%)%k%H$O\e(B
-@samp{bash\\|\$ *\r?$\\|> *\r?} \e$B$G$9!#\e(B
+\e$B1s3V%^%7%s$G$N%7%'%k$N%W%m%s%W%H$K9gCW$9$k@55,I=8=$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @samp{bash\\|\$ *\r?$\\|> *\r?} \e$B$G$9!#\e(B
 
 @item nntp-open-telnet-envuser
 @vindex nntp-open-telnet-envuser
@@ -9551,9 +10150,10 @@ default force yes
 @findex nntp-open-ssl-stream
 @item nntp-open-ssl-stream
 \e$B%5!<%P!<$K\e(B @dfn{\e$B0BA4$J\e(B} \e$B%A%c%s%M%k$r;H$C$F%5!<%P!<$K@\B3$7$^$9!#$3$l$r;H\e(B
-\e$B$&$?$a$K$O!"\e(BSSLay \e$B$,%$%s%9%H!<%k$5$l$F$$$J$1$l$P$J$j$^$;$s\e(B
-(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL} \e$B$H!"\e(B@file{ssl.el} (\e$BNc$($P!"\e(B
-W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5A$7$^$9\e(B:
+\e$B$&$?$a$K$O!"\e(BSSLay \e$B$,%$%s%9%H!<%k$5$l$F$$$J$1$l$P$J$j$^$;\e(B
+\e$B$s\e(B (@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL} \e$B$H!"\e(B@file{ssl.el} (\e$BNc$(\e(B
+\e$B$P!"\e(BW3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5A$7\e(B
+\e$B$^$9\e(B:
 
 @lisp
 ;; Type `C-c C-c after you'ver finished editing.
@@ -9561,7 +10161,7 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 ;; "snews" is port 563 and is predefined in our /etc/services
 ;;
 (nntp "snews.bar.com"
-      (nntp-open-connection-function nntp-open ssl-stream)
+      (nntp-open-connection-function nntp-open-ssl-stream)
       (nntp-port-number "snews")
       (nntp-address "snews.bar.com"))
 @end lisp
@@ -9586,6 +10186,49 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 @code{nntp-open-network-stream} \e$B@\B34X?t$r;H$C$F$$$k$H$-$N@\B3$9$k%]!<%H\e(B
 \e$BHV9f$G$9!#\e(B
 
+@item nntp-list-options
+@vindex nntp-list-options
+LIST \e$B%3%^%s%I$N%*%W%7%g%s$K;H$C$F!"\e(B(\e$B%5!<%P!<$N\e(B) \e$B%j%9%H=PNO$r@_Dj$7$?%K%e!<\e(B
+\e$B%9%0%k!<%W$@$1$K@)8B$9$k$?$a$N!"%K%e!<%9%0%k!<%WL>$N%j%9%H$G$9!#$=$l$>$l\e(B
+\e$B$N%K%e!<%9%0%k!<%WL>$K$O\e(B @dfn{fj.*} \e$B$d\e(B @dfn{japan.*} \e$B$N$h$&$J!"%7%'%k7A\e(B
+\e$B<0$N%o%$%k%I%+!<%I$r;H$&$3$H$,$G$-$^$9!#$b$79,1?$K$b%5!<%P!<$,$=$N$h$&$J\e(B
+\e$B%*%W%7%g%s$r<u$1IU$1$F$/$l$l$P!"\e(Bgnus \e$B$rB.$/F0:n$5$;$k$3$H$,$G$-$k$+$b$7\e(B
+\e$B$l$^$;$s!#$3$l$O!"0J2<$N$h$&$K%5!<%P!<JQ?t$H$7$F;H$&$3$H$,$G$-$^$9!#\e(B
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-list-options ("fj.*" "japan.*"))))
+@end lisp
+
+@item nntp-options-subscribe
+@vindex nntp-options-subscribe
+\e$B9gCW$7$?$iL5>r7o$G9VFI$9$k%K%e!<%9%0%k!<%WL>$N@55,I=8=$G$9!#@55,I=8=$NJ8\e(B
+\e$B;zNs$G$O\e(B @dfn{$} \e$B$NBe$o$j$K\e(B @dfn{ } \e$B$r;H$C$F2<$5$$!#%5!<%P!<$,\e(B LIST \e$B%3%^\e(B
+\e$B%s%I$N%*%W%7%g%s$K%7%'%k7A<0$N%o%$%k%I%+!<%I$r<u$1IU$1$F$/$l$J$$>l9g$G$b!"\e(B
+@code{nntp-list-options} \e$B$HF1MM$N8z2L$,$"$k$G$7$g$&!#$3$l$O!"0J2<$N$h$&\e(B
+\e$B$K%5!<%P!<JQ?t$H$7$F;H$&$3$H$,$G$-$^$9!#\e(B
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-options-subscribe "^fj\\.\\|^japan\\.")))
+@end lisp
+
+@item nntp-options-not-subscribe
+@vindex nntp-options-not-subscribe
+\e$B9gCW$7$J$+$C$?$iL5>r7o$G9VFI$9$k%K%e!<%9%0%k!<%WL>$N@55,I=8=$G$9!#@55,I=\e(B
+\e$B8=$NJ8;zNs$G$O\e(B @dfn{$} \e$B$NBe$o$j$K\e(B @dfn{ } \e$B$r;H$C$F2<$5$$!#%5!<%P!<\e(B
+\e$B$,\e(B LIST \e$B%3%^%s%I$N%*%W%7%g%s$K%7%'%k7A<0$N%o%$%k%I%+!<%I$r<u$1IU$1$F$/$l\e(B
+\e$B$J$$>l9g$G$b!"\e(B@code{nntp-list-options} \e$B$HF1MM$N8z2L$,$"$k$G$7$g$&!#$3$l\e(B
+\e$B$O!"0J2<$N$h$&$K%5!<%P!<JQ?t$H$7$F;H$&$3$H$,$G$-$^$9!#\e(B
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-options-not-subscribe "\\.binaries\\.")))
+@end lisp
+
 @item nntp-buggy-select
 @vindex nntp-buggy-select
 \e$B$"$J$?$NA*Br$N0lO"$N:n6H$,8N>c$,$A$G$"$k$H$-$K$3$l$r\e(B @code{nil} \e$B$G$J$$CM\e(B
@@ -9593,9 +10236,9 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 
 @item nntp-nov-is-evil
 @vindex nntp-nov-is-evil
-@sc{nntp} \e$B%5!<%P!<$,\e(B @sc{nov} \e$B5!G=$rDs6!$7$F$$$J$1$l$P$3$NJQ?t$r\e(B
-@code{t} \e$B$K@_Dj$9$k;v$,$G$-$^$9$,!"\e(B@code{nntp} \e$B$OIaDL$O\e(B @sc{nov} \e$B$,;H$o\e(B
-\e$B$l$k$+$I$&$+$r<+F0E*$KD4$Y$^$9!#\e(B
+@sc{nntp} \e$B%5!<%P!<$,\e(B @sc{nov} \e$B5!G=$rDs6!$7$F$$$J$1$l$P$3$NJQ?t\e(B
+\e$B$r\e(B @code{t} \e$B$K@_Dj$9$k;v$,$G$-$^$9$,!"\e(B@code{nntp} \e$B$OIaDL$O\e(B @sc{nov} \e$B$,;H\e(B
+\e$B$o$l$k$+$I$&$+$r<+F0E*$KD4$Y$^$9!#\e(B
 
 @item nntp-xover-commands
 @vindex nntp-xover-commands
@@ -9608,13 +10251,13 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 @vindex nntp-nov-gap
 @code{nntp} \e$B$OIaDL$O%5!<%P!<$K\e(B @sc{nov} \e$B9T$N$?$a$N0l$D$NBg$-$JMW5a$rAw$j\e(B
 \e$B$^$9!#%5!<%P!<$O0l$D$N5pBg$J!"9T$N%j%9%H$G1~Ez$7$^$9!#$7$+$7!"$b$7%0%k!<\e(B
-\e$B%W$N\e(B2-5000\e$B$N5-;v$rFI$s$G!"\e(B1\e$B$H\e(B5001\e$B$rFI$_$?$$$@$1$J$i!"\e(B@code{nntp} \e$B$OI,MW\e(B
-\e$BL5$$\e(B4999\e$B$N\e(B @sc{nov} \e$B9T$r<hF@$9$k;v$K$J$j$^$9!#$3$NJQ?t$O\e(B @code{XOVER}
-\e$BMW5a$,$I$l$/$i$$Bg$-$J\e(B2\e$B$D$NO"B3$7$?5-;v72$N4V$N$X$@$?$j\e(B (gap) \e$B$^$GJ,3d$5\e(B
-\e$B$l$J$$$GAw$i$l$k$+$r7hDj$7$^$9!#%M%C%H%o!<%/$,B.$$>l9g$O!"$3$NJQ?t$rK\Ev\e(B
-\e$B$K>.$5$J?t;z$K@_Dj$9$k$H$*$=$i$/<hF@$,CY$/$J$k$H$$$&;v$KCm0U$7$F$/$@$5$$!#\e(B
-\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"\e(B@code{nntp} \e$B$OMW5a$rJ,3d$7$^$;$s!#%G%#%U%)\e(B
-\e$B%k%H$O\e(B5\e$B$G$9!#\e(B
+\e$B%W$N\e(B 2-5000 \e$B$N5-;v$rFI$s$G!"\e(B1 \e$B$H\e(B 5001 \e$B$rFI$_$?$$$@$1$J$i!"\e(B@code{nntp} \e$B$O\e(B
+\e$BI,MWL5$$\e(B 4999 \e$B$N\e(B @sc{nov} \e$B9T$r<hF@$9$k;v$K$J$j$^$9!#$3$NJQ?t\e(B
+\e$B$O\e(B @code{XOVER} \e$BMW5a$,$I$l$/$i$$Bg$-$JFs$D$NO"B3$7$?5-;v72$N4V$N$X$@$?\e(B
+\e$B$j\e(B (gap) \e$B$^$GJ,3d$5$l$J$$$GAw$i$l$k$+$r7hDj$7$^$9!#%M%C%H%o!<%/$,B.$$>l\e(B
+\e$B9g$O!"$3$NJQ?t$rK\Ev$K>.$5$J?t;z$K@_Dj$9$k$H$*$=$i$/<hF@$,CY$/$J$k$H$$$&\e(B
+\e$B;v$KCm0U$7$F$/$@$5$$!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"\e(B@code{nntp} \e$B$OMW5a\e(B
+\e$B$rJ,3d$7$^$;$s!#%G%#%U%)%k%H$O\e(B 5 \e$B$G$9!#\e(B
 
 @item nntp-prepare-server-hook
 @vindex nntp-prepare-server-hook
@@ -9634,24 +10277,23 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 
 @end table
 
-
 @node News Spool
 @subsection \e$B%K%e!<%9%9%W!<%k\e(B
-@cindex nnsppl
+@cindex nnspool
 @cindex new spool
 
 \e$B%m!<%+%k%9%W!<%k$+$i30It%0%k!<%W$r9XFI$9$k;v$OHs>o$K4JC1$G!"Lr$KN)$A$^$9!#\e(B
-\e$B$?$H$($P!"Hs>o$KBg$-$J5-;v$,$"$k%0%k!<%W\e(B---\e$BNc$($P\e(B
-@samp{alt.binaries.pictures.furniture} \e$B$rFI$`B.EY$,B.$/$J$j$^$9!#\e(B
+\e$B$?$H$($P!"Hs>o$KBg$-$J5-;v$,$"$k%0%k!<%W\e(B---\e$BNc$(\e(B
+\e$B$P\e(B @samp{alt.binaries.pictures.furniture} \e$B$rFI$`B.EY$,B.$/$J$j$^$9!#\e(B
 
-\e$B$H$K$+$/!"\e(B@code{nnspool} \e$B$rJ}K!$H$7$F!"\e(B @code{""} (\e$B$b$7$/$O2?$G$b\e(B) \e$B$r%"\e(B
-\e$B%I%l%9$H$7$F;XDj$9$k$@$1$G$9!#\e(B
+\e$B$H$K$+$/!"\e(B@code{nnspool} \e$B$rJ}K!$H$7$F!"\e(B@code{""} (\e$B$b$7$/$O2?$G$b\e(B) \e$B$r%"%I\e(B
+\e$B%l%9$H$7$F;XDj$9$k$@$1$G$9!#\e(B
 
 \e$B$b$7%m!<%+%k%9%W!<%k$K$D$J$0;v$,2DG=$J$i!"$*$=$i$/$=$l$r4pK\A*BrJ}K!$H$7\e(B
-\e$B$F;H$&$Y$-$G$7$g$&\e(B (@pxref{Finding the News})\e$B!#$=$l$OIaDL$O\e(B @code{nntp}
-\e$BA*BrJ}K!$h$jB.$$$G$9$,!"$=$&$G$J$$$+$b$7$l$^$;$s!#$=$l$O>u67$K0MB8$7$^$9!#\e(B
-\e$B2?$,$"$J$?$N%5%$%H$G0lHVNI$$$+$r8+$D$1$k$?$a$K!"$$$m$$$m$H;n$7$F$_$J$1$l\e(B
-\e$B$P$J$j$^$;$s!#\e(B
+\e$B$F;H$&$Y$-$G$7$g$&\e(B (@pxref{Finding the News})\e$B!#$=$l$OIaDL\e(B
+\e$B$O\e(B @code{nntp} \e$BA*BrJ}K!$h$jB.$$$G$9$,!"$=$&$G$J$$$+$b$7$l$^$;$s!#$=$l$O\e(B
+\e$B>u67$K0MB8$7$^$9!#2?$,$"$J$?$N%5%$%H$G0lHVNI$$$+$r8+$D$1$k$?$a$K!"$$$m$$\e(B
+\e$B$m$H;n$7$F$_$J$1$l$P$J$j$^$;$s!#\e(B
 
 @table @code
 
@@ -9664,18 +10306,18 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 \e$B5-;v$rEj9F$9$k$H$-$K\e(B inews \e$B%W%m%0%i%`$KM?$($i$l$k%Q%i%a!<%?$G$9!#\e(B
 
 @item nnspool-spool-directory
-@code{nnspool} \e$B$,5-;v$rC5$9$H$3$m$G$9!#$3$l$OIaDL$O\e(B
-@file{/usr/spool/news/} \e$B$G$9!#\e(B
+@code{nnspool} \e$B$,5-;v$rC5$9$H$3$m$G$9!#$3$l$OIaDL\e(B
+\e$B$O\e(B @file{/usr/spool/news/} \e$B$G$9!#\e(B
 
 @item nnspool-nov-directory
 @vindex nnspool-nov-directory
-@code{nnspool} \e$B$,\e(B @sc{nov} \e$B%U%!%$%k$rC5$9$H$3$m$G$9!#$3$l$OIaDL$O\e(B
-@file{/usr/spool/news/over.view/} \e$B$G$9!#\e(B
+@code{nnspool} \e$B$,\e(B @sc{nov} \e$B%U%!%$%k$rC5$9$H$3$m$G$9!#$3$l$OIaDL\e(B
+\e$B$O\e(B @file{/usr/spool/news/over.view/} \e$B$G$9!#\e(B
 
 @item nnspool-lib-dir
 @vindex nnspool-lib-dir
-\e$B%K%e!<%9$N%i%$%V%i%j!<%G%#%l%/%H%j!<$N>l=j$G$9\e(B (\e$B%G%#%U%)%k%H$G\e(B
-@file{/usr/lib/news/} \e$B$G$9\e(B)\e$B!#\e(B
+\e$B%K%e!<%9$N%i%$%V%i%j!<%G%#%l%/%H%j!<$N>l=j$G$9\e(B (\e$B%G%#%U%)%k%H\e(B
+\e$B$G\e(B @file{/usr/lib/news/} \e$B$G$9\e(B)\e$B!#\e(B
 
 @item nnspool-active-file
 @vindex nnspool-active-file
@@ -9702,38 +10344,39 @@ W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5
 @vindex nnspool-sift-nov-with-sed
 @cindex sed
 @code{nil} \e$B$G$J$$$H!"$3$l$,%G%#%U%)%k%H$G$9$,!"354Q%U%!%$%k\e(B (overview)
-\e$B$+$i4XO"$9$kItJ,$rF@$k$?$a$K\e(B @code{sed} \e$B$r;H$$$^$9!#$b$7\e(B nil \e$B$@$H!"\e(B
+\e$B$+$i4XO"$9$kItJ,$rF@$k$?$a$K\e(B @code{sed} \e$B$r;H$$$^$9!#$b$7\e(B @code{nil} \e$B$@$H!"\e(B
 @code{nnspool} \e$B$O%U%!%$%kA4BN$r%P%C%U%!$KFI$_9~$s$G!"$=$3$G<B9T$7$^$9!#\e(B
 
 @end table
 
-
 @node Getting Mail
 @section \e$B%a!<%k<hF@\e(B
 @cindex reading mail
 @cindex mail
 
 \e$B%K%e!<%9%j!<%@!<$G%a!<%k$rFI$`\e(B---\e$B$=$l$OL@Gr$KD6<+A3E*$J;v$G$O$J$$$N$G$9\e(B
-\e$B$+!)\e(B \e$B$$$d!"$b$A$m$s$G$-$^$9!#\e(B
+\e$B$+\e(B? \e$B$$$d!"$b$A$m$s$G$-$^$9!#\e(B
 
 @menu
-* Mail in a Newsreader::         \e$B%K%e!<%9%j!<%@$G%a!<%k\e(B (\e$BBg;v$JA0CV$-\e(B)\e$B!#\e(B
-* Getting Started Reading Mail:: \e$B4JC1$JNAM}K\$N$h$&$JNc!#\e(B
-* Splitting Mail::               \e$B$I$N$h$&$K%a!<%k%0%k!<%W$r:n@.$9$k$+!#\e(B
-* Mail Sources::                 Gnus \e$B$K$I$3$+$i%a!<%k$r<h$C$F$/$k$+$rCN$i$;$k!#\e(B
-* Mail Backend Variables::       \e$B%a!<%k$N07$$$r%+%9%?%^%$%:$9$k$?$a$NJQ?t!#\e(B
-* Fancy Mail Splitting::         Gnus \e$B$OF~$C$FMh$?%a!<%k$NLS$N$h$&$JJ,N%$r$9$k$3$H$,$G$-$k!#\e(B
+* Mail in a Newsreader::         \e$B%K%e!<%9%j!<%@$G%a!<%k\e(B (\e$BBg;v$JA0CV$-\e(B)
+* Getting Started Reading Mail:: \e$B4JC1$JNAM}K\$N$h$&$JNc\e(B
+* Splitting Mail::               \e$B$I$N$h$&$K%a!<%k%0%k!<%W$r:n@.$9$k$+\e(B
+* Mail Sources::                 Gnus \e$B$K$I$3$+$i%a!<%k$r<h$C$F$/$k$+$rCN\e(B
+                                 \e$B$i$;$k\e(B
+* Mail Backend Variables::       \e$B%a!<%k$N07$$$r%+%9%?%^%$%:$9$k$?$a$NJQ?t\e(B
+* Fancy Mail Splitting::         Gnus \e$B$OF~$C$FMh$?%a!<%k$NLS$N$h$&$JJ,N%\e(B
+                                 \e$B$r$9$k$3$H$,$G$-$k\e(B
 * Group Mail Splitting::         \e$B%a!<%kJ,3d$r6nF0$9$k$?$a$K%0%k!<%W\e(B
                                    \e$B%+%9%?%^%$%:$r;H$&!#\e(B
 * Incorporating Old Mail::       \e$B$"$J$?$,;}$C$F$$$k8E$$%a!<%k$r$I$&$9$k$+\e(B?
-* Expiring Mail::                \e$BM_$7$/$J$$%a!<%k$r<h$j=|$/!#\e(B
-* Washing Mail::                 \e$B<hF@$7$?%a!<%k$+$i7y$J$b$N$r<h$j=|$/!#\e(B
-* Duplicates::                   \e$B=EJ#$7$?%a!<%k$r07$&!#\e(B
-* Not Reading Mail::             \e$BB>$N%U%!%$%k$rFI$`$?$a$K%a!<%k%P%C%/%(%s%I$r;H$&!#\e(B
-* Choosing a Mail Backend::      Gnus \e$B$O?'!9$J%a!<%kMM<0$rFI$`;v$,$G$-$k!#\e(B
+* Expiring Mail::                \e$BM_$7$/$J$$%a!<%k$r<h$j=|$/\e(B
+* Washing Mail::                 \e$B<hF@$7$?%a!<%k$+$i7y$J$b$N$r<h$j=|$/\e(B
+* Duplicates::                   \e$B=EJ#$7$?%a!<%k$r07$&\e(B
+* Not Reading Mail::             \e$BB>$N%U%!%$%k$rFI$`$?$a$K%a!<%k%P%C%/%(\e(B
+                                 \e$B%s%I$r;H$&\e(B
+* Choosing a Mail Backend::      Gnus \e$B$O?'!9$J%a!<%kMM<0$rFI$`;v$,$G$-$k\e(B
 @end menu
 
-
 @node Mail in a Newsreader
 @subsection \e$B%K%e!<%9%j!<%@$G%a!<%k\e(B
 
@@ -9794,7 +10437,6 @@ gnus \e$B$O%a!<%k$r%K%e!<%9%0%k!<%W$N$h$&$K\e(B ``\e$B%0%k!<%W\e(B'' \e$B$KJB$YJQ$($F
 \e$B$F$/$l$??M$O$=$l$rJ]>Z$7$F$$$^$9!#$"$J$?$bF12=$7$^$9!#$"$J$?$O\e(B gnus \e$B$r0&\e(B
 \e$B$7$^$9!#$"$J$?$O\e(B gnus \e$B$G$N%a!<%k$NJ}K!$r0&$7$^$9!#@dBP$K!#\e(B)
 
-
 @node Getting Started Reading Mail
 @subsection \e$B%a!<%k$rFI$`;v$r;O$a$k\e(B
 
@@ -9812,8 +10454,9 @@ Gnus \e$B$r;H$C$F?7$7$$%a!<%k$rFI$`;v$OHs>o$K4JC1$G$9!#$"$J$?$N%a!<%k%P%C%/\e(B
 
 \e$B:#$d!"<!$K\e(B gnus \e$B$r5/F0$7$?$H$-$K$O!"$3$N%P%C%/%(%s%I$O?7$7$$5-;v$r5a$a!"\e(B
 \e$B$=$l$O$"$J$?$N%9%W!<%k%U%!%$%k$+$iA4$F$N%a%C%;!<%8$r%G%#%l%/%H%j!<!"%G%#\e(B
-\e$B%U%)%k%H$G$O\e(B @code{~/Mail/} \e$B!"$K0\F0$7$^$9!#:n@.$5$l$??7$7$$%0%k!<%W\e(B
-(@samp{mail.misc}) \e$B$,9XFI$5$l!"B>$N%0%k!<%W$HF1$8$h$&$KFI$`;v$,$G$-$^$9!#\e(B
+\e$B%U%)%k%H$G$O\e(B @code{~/Mail/}\e$B!"$K0\F0$7$^$9!#:n@.$5$l$??7$7$$%0%k!<\e(B
+\e$B%W\e(B (@samp{mail.misc}) \e$B$,9XFI$5$l!"B>$N%0%k!<%W$HF1$8$h$&$KFI$`;v$,$G$-$^\e(B
+\e$B$9!#\e(B
 
 \e$B$"$J$?$O$*$=$i$/%a!<%k$r$$$/$D$+$N%0%k!<%W$KJ,3d$7$?$$$G$7$g$&$1$I\e(B:
 
@@ -9824,14 +10467,13 @@ Gnus \e$B$r;H$C$F?7$7$$%a!<%k$rFI$`;v$OHs>o$K4JC1$G$9!#$"$J$?$N%a!<%k%P%C%/\e(B
         ("other" "")))
 @end lisp
 
-\e$B$3$l$O7k2L$H$7$F\e(B3\e$B$D$N?7$7$$\e(B @code{nnml} \e$B%a!<%k%0%k!<%W$r:n$j$^$9\e(B:
-@samp{nnml:junk}\e$B!"\e(B@samp{nnml:crazy}\e$B!"\e(B@samp{nnml:other} \e$B$G$9!#:G=i$N\e(B2\e$B$D$N\e(B
-\e$B%0%k!<%W$K9g$o$J$$%a!<%k$OA4$F:G8e$N%0%k!<%W$KF~$l$i$l$^$9!#\e(B
+\e$B$3$l$O7k2L$H$7$F;0$D$N?7$7$$\e(B @code{nnml} \e$B%a!<%k%0%k!<%W$r:n$j$^\e(B
+\e$B$9\e(B: @samp{nnml:junk}, @samp{nnml:crazy}, @samp{nnml:other} \e$B$G$9!#:G=i\e(B
+\e$B$NFs$D$N%0%k!<%W$K9g$o$J$$%a!<%k$OA4$F:G8e$N%0%k!<%W$KF~$l$i$l$^$9!#\e(B
 
 \e$B$3$l$O\e(B gnus \e$B$G%a!<%k$rFI$`$?$a$K=<J,$G$"$k$O$:$G$9!#%^%K%e%"%k$N$3$NItJ,\e(B
-\e$B$NB>$N9`$r=OFI$7$?$$$H;W$&$+$b$7$l$^$;$s$,!#FC$K\e(B @pxref{Choosing a Mail
-Backend} \e$B$H\e(B @pxref{Expiring Mail} \e$B$r!#\e(B
-
+\e$B$NB>$N9`$r=OFI$7$?$$$H;W$&$+$b$7$l$^$;$s$,!#FC\e(B
+\e$B$K\e(B @pxref{Choosing a Mail Backend} \e$B$H\e(B @pxref{Expiring Mail} \e$B$r!#\e(B
 
 @node Splitting Mail
 @subsection \e$B%a!<%k$NJ,3d\e(B
@@ -9851,8 +10493,8 @@ Backend} \e$B$H\e(B @pxref{Expiring Mail} \e$B$r!#\e(B
 
 \e$B$3$NJQ?t$O%j%9%H$N%j%9%H$G!"$3$l$i$N%j%9%H$N:G=i$N$=$l$>$l$NMWAG$,%a!<%k\e(B
 \e$B%0%k!<%W$NL>A0$G\e(B (\e$B$H$3$m$G!"$=$l$i$O\e(B @samp{mail} \e$B$G;O$^$kI,MW$O$"$j$^$;\e(B
-\e$B$s\e(B)\e$B!"\e(B2\e$B$D$a$NMWAG$,$=$l$>$l$N%a!<%k$N%X%C%@!<$+$i$=$l$,$I$N%0%k!<%W$KB0$9\e(B
-\e$B$k$+$r7hDj$9$k@55,I=8=$G$9!#:G=i$NJ8;zNs$O!"\e(B@code{replace-match} \e$B$K$h$C\e(B
+\e$B$s\e(B)\e$B!"Fs$D$a$NMWAG$,$=$l$>$l$N%a!<%k$N%X%C%@!<$+$i$=$l$,$I$N%0%k!<%W$KB0\e(B
+\e$B$9$k$+$r7hDj$9$k@55,I=8=$G$9!#:G=i$NJ8;zNs$O!"\e(B@code{replace-match} \e$B$K$h$C\e(B
 \e$B$F!"9gCW$7$?J8>O$+$i$NI{I=8=$rA^F~$9$k$?$a$K;H$o$l$k$h$&$J!"\e(B
 @code{samp\\1} \e$B$NMM<0$r4^$`$+$b$7$l$^$;$s!#$?$H$($P\e(B:
 
@@ -9860,7 +10502,7 @@ Backend} \e$B$H\e(B @pxref{Expiring Mail} \e$B$r!#\e(B
 ("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
 @end lisp
 
-2\e$BHVL\$NMWAG$O4X?t$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$=$l$OK!B'$N:G=i$NMWAG\e(B
+\e$BFsHVL\$NMWAG$O4X?t$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$=$l$OK!B'$N:G=i$NMWAG\e(B
 \e$B$r0z?t$H$7$F!"%X%C%@!<$KHO0O$r69$a$F\e(B (narrowed to headers) \e$B8F$P$l$^$9!#\e(B
 \e$B$=$l$O!"%a!<%k$,$=$N%0%k!<%W$KB0$9$k$H9M$($k$N$G$"$l$P!"\e(B@code{nil} \e$B$G$J\e(B
 \e$B$$CM$r5"$9I,MW$,$"$j$^$9!#\e(B
@@ -9894,38 +10536,40 @@ Backend} \e$B$H\e(B @pxref{Expiring Mail} \e$B$r!#\e(B
 @code{nnmh} \e$B$H\e(B @code{nnml} \e$B$OAj8_Ej9F$5$l$?5-;v$K%O!<%I%j%s%/\e(B (hardlink)
 \e$B$r:n$k;v$K$h$C$FAj8_Ej9F$r9T$$$^$9!#$7$+$7!"A4$F$N%U%!%$%k%7%9%F%`$,%O!<\e(B
 \e$B%I%j%s%/$N5!G=$rDs6!$7$F$$$k$o$1$G$O$"$j$^$;$s!#$b$7$"$J$?$,$=$N>l9g$KEv\e(B
-\e$B$F$O$^$k$N$G$"$l$P!"\e(B@code{nnmail-crosspost-link-function} \e$B$r\e(B
-@code{copy-file} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B (\e$B$3$NJQ?t$O%G%#%U%)%k%H$G\e(B
-@code{add-name-to-file} \e$B$G$9!#\e(B)
+\e$B$F$O$^$k$N$G$"$l$P!"\e(B
+@code{nnmail-crosspost-link-function} \e$B$r\e(B @code{copy-file} \e$B$K@_Dj$7$F$/$@\e(B
+\e$B$5$$!#\e(B(\e$B$3$NJQ?t$O%G%#%U%)%k%H$G\e(B @code{add-name-to-file} \e$B$G$9!#\e(B)
 
 @kindex M-x nnmail-split-history
 @kindex nnmail-split-history
 \e$BA0$N%a!<%kJ,3d$,%a%C%;!<%8$r$I$3$KF~$l$?$+$r8+$?$$>l9g$O!"L?Na\e(B @kbd{M-x
-nnmail-split-history} \e$B$r;H$&;v$,$G$-$^$9!#\e(B
+nnmail-split-history} \e$B$r;H$&;v$,$G$-$^$9!#$3$l$+$i%9%W!<%k$7D>$=$&$H$9$k\e(B
+\e$B%a%C%;!<%8$,$I$3$KF~$k$+$r8+$?$$>l9g$O!"\e(B
+@code{gnus-summary-respool-trace} \e$B$H4XO"$9$kL?\e(B
+\e$BNa\e(B (@pxref{Mail Group Commands}) \e$B$r;H$&;v$,$G$-$^$9!#\e(B
 
 Gnus \e$B$O$"$J$?$K<+J,<+?H$KD7$MJV$C$F$/$k$h$&$J2DG=@-$N$"$kA4$F$N5!2q$rDs\e(B
 \e$B6!$7$^$9!#Nc$($P!"$"$J$?$N>e;J$+$i$/$kA4$F$N%a!<%k$r4^$s$@%0%k!<%W$r:n$C\e(B
 \e$B$?$H$7$^$7$g$&!#$=$l$+$i!"6vH/E*$K$=$N%0%k!<%W$N9XFI<h$j;_$a$,5/$3$C$?$H\e(B
 \e$B$7$^$9!#\e(BGnus \e$B$O$=$l$G$b>e;J$+$i$NA4$F$N%a!<%k$rL$9XFI$N%0%k!<%W$KF~$l$^\e(B
-\e$B$9$N$G!">e;J$,\e(B ''\e$B7nMKF|$^$G$K$=$NJs9p=q$r=`Hw$7$J$$$H<s$@!*\e(B'' \e$B$H$$$&%a!<\e(B
+\e$B$9$N$G!">e;J$,\e(B ''\e$B7nMKF|$^$G$K$=$NJs9p=q$r=`Hw$7$J$$$H<s$@\e(B!'' \e$B$H$$$&%a!<\e(B
 \e$B%k$r$"$J$?$KAw$C$F$b!"$"$J$?$O$=$l$r8+$k;v$O$J$/!"2PMKF|$K$J$C$FK\Ev$OMb\e(B
 \e$B7n$N2HDB$rJ'$&$?$a$K6u$N%\%H%k$r=8$a$k$Y$-$G$"$C$F$b!"$^$@M-5k$G8[$o$l$F\e(B
 \e$B$$$k$H?.$8$F$$$k$+$b$7$l$^$;$s!#\e(B
 
-
 @node Mail Sources
 @subsection Mail Sources
 
-\e$B$$$m$s$J$H$3$m$+$i%a!<%k$r<hF@$9$k$3$H$,$G$-$^$9\e(B---\e$B%a!<%k%9%W!<%k!"\e(BPOP
-\e$B%a!<%k%5!<%P!<!"\e(Bprocmail \e$B%G%#%l%/%H%j!<$J$I$,Nc$H$7$F$"$j$^$9!#\e(B
+\e$B$$$m$s$J$H$3$m$+$i%a!<%k$r<hF@$9$k$3$H$,$G$-$^$9\e(B---\e$B%a!<%k%9%W!<%k!"\e(B
+POP \e$B%a!<%k%5!<%P!<!"\e(Bprocmail \e$B%G%#%l%/%H%j!<!"\e(Bmaildir \e$B$J$I$,Nc$H$7$F$"$j\e(B
+\e$B$^$9!#\e(B
 
 @menu
-* Mail Source Specifiers::       \e$B%a!<%k$N85$,$I$3$+$r;XDj$9$k!#\e(B
-* Mail Source Customization::    \e$B@$$NCf$K1F6A$9$k$$$/$D$+$NJQ?t!#\e(B
-* Fetching Mail::                \e$B%a!<%k%=!<%9;X<(;R$r;HMQ$9$k!#\e(B
+* Mail Source Specifiers::    \e$B%a!<%k$N85$,$I$3$+$r;XDj$9$k\e(B
+* Mail Source Customization:: \e$B@$$NCf$K1F6A$9$k$$$/$D$+$NJQ?t\e(B
+* Fetching Mail::             \e$B%a!<%k%=!<%9;X<(;R$r;HMQ$9$k\e(B
 @end menu
 
-
 @node Mail Source Specifiers
 @subsubsection \e$B%a!<%k%=!<%9;X<(;R\e(B
 @cindex POP
@@ -9973,19 +10617,20 @@ Gnus \e$B$O$"$J$?$K<+J,<+?H$KD7$MJV$C$F$/$k$h$&$J2DG=@-$N$"$kA4$F$N5!2q$rDs\e(B
 (file)
 @end lisp
 
-If the mail spool file is not located on the local machine, it's best to 
-use POP or @sc{imap} or the like to fetch the mail.  You can not you ange-ftp 
-file names here---it has no way to lock the mail spool while moving the
-mail.
+\e$B%a!<%k%9%W!<%k%U%!%$%k$,%m!<%+%k%^%7%s$KL5$$>l9g$O!"\e(BPOP \e$B$d\e(B @sc{imap} \e$B$J\e(B
+\e$B$I$G%a!<%k$r<hF@$9$k$N$,:GA1$G$9!#$3$3$G$O\e(B ange-ftp \e$B$N%U%!%$%kL>$O;HMQ$G\e(B
+\e$B$-$^$;$s\e(B---\e$B%a!<%k$r0\F0$7$F$$$k$H$-$K%a!<%k%9%W!<%k$r%m%C%/$9$kJ}K!$,$"\e(B
+\e$B$j$^$;$s!#\e(B
 
-If it's impossible to set up a proper server, you can use ssh instead.
+\e$BE,@Z$J%5!<%P!<$r@_CV$9$k$3$H$,IT2DG=$J$i!"JQ$o$j$K\e(B  ssh \e$B$r;H$&$3$H$,$G$-\e(B
+\e$B$^$9!#\e(B
 
 @lisp
 (setq mail-sources
       '((file :prescript "ssh host bin/getmail >%t")))
 @end lisp
 
-The @samp{getmail} script would look something like the following:
+@samp{getmail} \e$B%9%/%j%W%H$O0J2<$N$h$&$J$b$N$K$J$j$^$9\e(B:
 
 @example
 #!/bin/sh
@@ -9993,17 +10638,18 @@ The @samp{getmail} script would look something like the following:
 #  flu@@iki.fi
 
 MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
-TMP=~/Mail/tmp
+TMP=$HOME/Mail/tmp
 rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
 @end example
 
-Alter this script to fit find the @samp{movemail} you want to use.
-
+\e$BL\E*$K9g$&$h$&$K;HMQ$7$?$$\e(B @samp{movemail} \e$B$K9g$o$;$F%9%/%j%W%H$r=q$-49\e(B
+\e$B$($F$/$@$5$$!#\e(B
 
 @item directory
-\e$B%G%#%l%/%H%j!<Cf$NJ#?t$N%U%!%$%k$+$i%a!<%k$r<hF@$7$^$9!#$3$l$OIaDL$O\e(B
-procmail \e$B$K?7$7$$%a!<%k$r$$$/$D$+$N%U%!%$%k$KJ,3d$5$;$F$$$k$H$-$K;HMQ$5\e(B
-\e$B$l$^$9!#\e(B
+\e$B%G%#%l%/%H%j!<Cf$NJ#?t$N%U%!%$%k$+$i%a!<%k$r<hF@$7$^$9!#$3$l$OIaDL\e(B
+\e$B$O\e(B procmail \e$B$K?7$7$$%a!<%k$r$$$/$D$+$N%U%!%$%k$KJ,3d$5$;$F$$$k$H$-$K;HMQ\e(B
+\e$B$5$l$^$9!#\e(B@code{nnmail-scan-directory-mail-source-once} \e$B$r\e(B @code{nil} \e$B0J\e(B
+\e$B30$K$9$k$H!"\e(Bgnus \e$B$O?7$7$$%a!<%k%=!<%9$r0l2s$@$1D4$Y$k$h$&$K$J$j$^$9!#\e(B
 
 \e$B%-!<%o!<%I\e(B:
 
@@ -10016,9 +10662,9 @@ procmail \e$B$K?7$7$$%a!<%k$r$$$/$D$+$N%U%!%$%k$KJ,3d$5$;$F$$$k$H$-$K;HMQ$5\e(B
 \e$B$9!#\e(B
 
 @item :predicate
-\e$B$3$N=R8l$,\e(B @code{nil} \e$B$G$J$$CM$rJV$9%U%!%$%k$N$_$G$9!#=i4|CM$O\e(B
-@code{identity} \e$B$G$9\e(B. \e$B$3$l$ODI2C$NA*JL4o$H$7$F;HMQ$5$l$^$9\e(B---\e$B@5$7$$@\Hx\e(B
-\e$B8l\e(B @emph{\e$B$H\e(B} \e$B$3$N=R8l$rK~B-$9$k%U%!%$%k$@$1$,9MN8$5$l$^$9!#\e(B
+\e$B$3$N=R8l$,\e(B @code{nil} \e$B$G$J$$CM$rJV$9%U%!%$%k$N$_$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{identity} \e$B$G$9!#$3$l$ODI2C$NA*JL4o$H$7$F;HMQ$5$l$^$9\e(B---\e$B@5$7$$@\\e(B
+\e$BHx8l\e(B @emph{\e$B$H\e(B} \e$B$3$N=R8l$rK~B-$9$k%U%!%$%k$@$1$,9MN8$5$l$^$9!#\e(B
 
 @item :prescript
 @itemx :postscript
@@ -10026,7 +10672,7 @@ procmail \e$B$K?7$7$$%a!<%k$r$$$/$D$+$N%U%!%$%k$KJ,3d$5$;$F$$$k$H$-$K;HMQ$5\e(B
 
 @end table
 
-\e$B%G%#%l%/%H%j!<%a!<%k%=!<%k$NNc$G$9\e(B:
+\e$B%G%#%l%/%H%j!<%a!<%k%=!<%9$NNc$G$9\e(B:
 
 @lisp
 (directory :path "/home/user-name/procmail-dir/"
@@ -10044,7 +10690,10 @@ POP \e$B%5!<%P!<$NL>A0$G$9!#=i4|CM$O\e(B @code{MAILHOST} \e$B4D6-JQ?t$+$i<hF@$5$l$^
 \e$B$9!#\e(B
 
 @item :port
-POP \e$B%5!<%P!<$N%]!<%HHV9f$G$9!#=i4|CM$O\e(B @samp{pop3} \e$B$G$9!#\e(B
+POP \e$B%5!<%P!<$N%]!<%HHV9f$G$9!#$3$l$O?tCM\e(B (\e$BNc$($P\e(B @samp{:port 1234}) \e$B$+J8\e(B
+\e$B;zNs\e(B (\e$BNc$($P\e(B @samp{:port "pop3"}) \e$B$G$9!#$b$7J8;zNs$J$i\e(B Unix \e$B%7%9%F%`$K$*\e(B
+\e$B$1$k\e(B @file{/etc/services} \e$B$K:\$C$F$$$k%5!<%S%9L>$G$J$1$l$P$J$j$^$;$s!#=i\e(B
+\e$B4|CM$O\e(B @samp{pop3} \e$B$G$9!#\e(B
 
 @item :user
 POP \e$B%5!<%P!<$KM?$($kMxMQ<TL>$G$9!#=i4|CM$O%m%0%$%sL>$G$9!#\e(B
@@ -10054,8 +10703,8 @@ POP \e$B%5!<%P!<$KM?$($k%Q%9%o!<%I$G$9!#;XDj$5$l$J$$>l9g$O!"MxMQ<T$OF~NO$rB%\e(B
 \e$B?J$5$l$^$9!#\e(B
 
 @item :program
-POP \e$B%5!<%P!<$+$i%a!<%k$r<hF@$9$k$?$a$K;HMQ$5$l$k%W%m%0%i%`$G$9!#$3$l$O\e(B
-@code{format} \e$B$N$h$&$JJ8;zNs$G$"$k$Y$-$G$9!#Nc$G$9\e(B:
+POP \e$B%5!<%P!<$+$i%a!<%k$r<hF@$9$k$?$a$K;HMQ$5$l$k%W%m%0%i%`$G$9!#$3$l\e(B
+\e$B$O\e(B @code{format} \e$B$N$h$&$JJ8;zNs$G$"$k$Y$-$G$9!#Nc$G$9\e(B:
 
 @example
 fetchmail %u@@%s -P %p %t
@@ -10101,7 +10750,7 @@ POP \e$B%5!<%P!<$+$i%a!<%k$r<hF@$9$k$?$a$K;H$&4X?t$G$9!#$=$N4X?t$O0l$D$N%Q%i\e(B
 
 @end table
 
-@code{:pregram} \e$B$H\e(B @code{:function} \e$B%-!<%o!<%I$,;XDj$5$l$F$$$J$$$H!"\e(B
+@code{:program} \e$B$H\e(B @code{:function} \e$B%-!<%o!<%I$,;XDj$5$l$F$$$J$$$H!"\e(B
 @code{pop3-movemail} \e$B$,;HMQ$5$l$^$9!#\e(B
 
 \e$B$3$l$O$$$/$D$+$NNc$G$9!#=i4|MxMQ<TL>$G!"=i4|\e(B POP \e$B%5!<%P!<$+$i<hF@$7!"=i\e(B
@@ -10125,128 +10774,187 @@ POP \e$B%5!<%P!<$+$i%a!<%k$r<hF@$9$k$?$a$K;H$&4X?t$G$9!#$=$N4X?t$O0l$D$N%Q%i\e(B
 @end lisp
 
 @item maildir
-maildir \e$B$+$i%a!<%k$r<hF@$7$^$9!#$3$l$O8=:_\e(B qmail \e$B$N$_$G%5%]!<%H$5$l$F$$\e(B
-\e$B$k\e(B mailbox \e$B7A<0$G!"FCJL$N%G%#%l%/%H%j!<$N$=$l$>$l$N%U%!%$%k$,@53N$K\e(B1\e$B%a!<\e(B
-\e$B%k$H$J$C$F$$$^$9!#\e(B
+Maildir \e$B$+$i%a!<%k$r<hF@$7$^$9!#$3$l$O8=:_\e(B qmail \e$B$H\e(B postfix \e$B$G$N$_$G%5%]!<\e(B
+\e$B%H$5$l$F$$$k\e(B mailbox \e$B7A<0$G!"FCJL$N%G%#%l%/%H%j!<$N$=$l$>$l$N%U%!%$%k$,\e(B
+\e$B@53N$K\e(B 1 \e$B%a!<%k$H$J$C$F$$$^$9!#\e(B
 
 \e$B%-!<%o!<%I\e(B:
 
 @table @code
 @item :path
-\e$B%a!<%k$,J]B8$5$l$k%G%#%l%/%H%j!<$N%Q%9$G$9!#=i4|CM$O\e(B
-@samp{~/Maildir/new} \e$B$G$9!#\e(B
+\e$B%a!<%k$,J]B8$5$l$k%G%#%l%/%H%j!<$N%Q%9$G$9!#=i4|CM$O4D6-JQ\e(B
+\e$B?t\e(B @code{MAILDIR} \e$B$+$i<hF@$7$?CM$+!"$^$?$O\e(B @samp{~/Maildir/} \e$B$G$9!#\e(B
+@item :subdirs
+Maildir \e$B$N%5%V%G%#%l%/%H%j$G$9!#=i4|CM$O\e(B @samp{("new" "cur")} \e$B$G$9!#\e(B
+
+@c Gnus \e$B$G<hF@$9$kA0$K!"$H$-$I$-\e(B pop3 \e$B%G!<%b%s$G%a!<%k$rC5$9$J$i!"0J2<$N:G\e(B
+@c \e$B=i$NNc$N$h$&$K!"\e(Bmaildir \e$B$NCf$N\e(B @code{cur} \e$B%G%#%l%/%H%j!<$+$i$b%a!<%k$r<h\e(B
+@c \e$BF@$9$kI,MW$,$"$j$^$9!#\e(B
 
-Gnus \e$B$G<hF@$9$kA0$K!"$H$-$I$-\e(B pop3 \e$B%G!<%b%s$G%a!<%k$rC5$9$J$i!"<!$NNc$N\e(B
-\e$B$h$&$K!"\e(Bmaildir \e$B$NCf$N\e(B @code{cur} \e$B%G%#%l%/%H%j!<$+$i$b%a!<%k$r<hF@$9$kI,\e(B
-\e$BMW$,$"$j$^$9!#\e(B
+\e$B%j%b!<%H%^%7%s$+$i%a!<%k$r<h$j4s$;$k$3$H$b=PMh$^$9!#\e(B
+(\e$B$H$$$&$N$b!"\e(Bmaildir \e$B$O%m%C%/$NLdBj$r5$$K$;$:$K:Q$`$+$i!#\e(B)
 
 @end table
 
-maildir \e$B%a!<%k%=!<%9$NNc$G$9\e(B:
+Maildir \e$B%a!<%k%=!<%9$NNc$r$U$?$D\e(B:
+
+@lisp
+(maildir :path "/home/user-name/Maildir/" :subdirs ("cur" "new"))
+@end lisp
 
 @lisp
-(maildir :path "/home/user-name/Maildir/cur")
+(maildir :path "/user@@remotehost.org:~/Maildir/" :subdirs ("new"))
 @end lisp
 
 @item imap
-Get mail from a @sc{imap} server. If you don't want to use @sc{imap} as intended,
-as a network mail reading protocol (ie with nnimap), for some reason or
-other, Gnus let you treat it similar to a POP server and fetches
-articles from a given @sc{imap} mailbox.
+IMAP \e$B%5!<%P!<$+$i%a!<%k$r<hF@$7$^$9!#2?$i$+$NM}M3$G\e(B IMAP \e$B$r0U?^$5$l$?$h\e(B
+\e$B$&$J%M%C%H%o!<%/>e$G%a!<%k$rFI$`%W%m%H%3%k$H$7$F07$$$?$/$J$$$H$-$O!"\e(B
+gnus \e$B$G$O\e(B POP \e$B%5!<%P!<$HF1MM$K07$&$3$H$,$G$-!"M?$($i$l$?\e(B IMAP \e$B%a!<%k%\%C\e(B
+\e$B%/%9$+$i5-;v$r<hF@$7$^$9!#\e(B
 
-Keywords:
+\e$B%-!<%o!<%I\e(B:
 
 @table @code
 @item :server
-The name of the @sc{imap} server.  The default is taken from the
-@code{MAILHOST} environment variable.
+IMAP \e$B%5!<%P!<$NL>A0!#=i4|CM$O4D6-JQ?t\e(B @code{MAILHOST} \e$B$+$iF@$^$9!#\e(B
 
 @item :port
-The port number of the @sc{imap} server.  The default is @samp{143}, or
-@samp{993} for SSL connections.
+IMAP \e$B%5!<%P!<$N%]!<%HHV9f!#IaDL$O=i4|CM$O\e(B @samp{143} \e$B$G!"\e(BSSL \e$B@\B3$K\e(B
+\e$B$O\e(B @samp{993} \e$B$G$9!#\e(B
 
 @item :user
-The user name to give to the @sc{imap} server.  The default is the login
-name.
+IMAP \e$B%5!<%P!<$KEO$9MxMQ<TL>$G$9!#=i4|CM$O%m%0%$%sL>$G$9!#\e(B
 
 @item :password
-The password to give to the @sc{imap} server.  If not specified, the user is
-prompted.
+IMAP \e$B%5!<%P!<$KEO$9%Q%9%o!<%I$G$9!#;XDj$5$l$F$$$J$$$H$-$O!"MxMQ<T$OF~NO\e(B
+\e$B$rB%$5$l$^$9!#\e(B
 
 @item :stream
-What stream to use for connecting to the server, this is one of the
-symbols in @code{imap-stream-alist}. Right now, this means
-@samp{kerberos4}, @samp{ssl} or the default @samp{network}.
+\e$B%5!<%P!<$K@\B3$9$k$H$-$K;H$&%9%H%j!<%`!#\e(B@code{imap-stream-alist} \e$B$K$"$k\e(B
+\e$B%7%s%\%k$NCf$N$R$H$D$r@_Dj$7$^$9!#8=>u$G$O!"\e(B
+@samp{kerberos4} \e$B$+\e(B @samp{ssl} \e$B$+=i4|CM$N\e(B @samp{network} \e$B$K$J$j$^$9!#\e(B
 
-@item :authenticator
-Which authenticator to use for authenticating to the server, this is one
-of the symbols in @code{imap-authenticator-alist}. Right now, this means
-@samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
-@samp{login}.
+@item :authentication
+\e$B%5!<%P!<$G$NG'>Z$K$I$NG'>ZK!$r;H$&$+!#$3$l\e(B
+\e$B$O\e(B @code{imap-authenticator-alist} \e$B$N%7%s%\%k$N0l$D$r@_Dj$7$^$9!#8=>u$G\e(B
+\e$B$O!"\e(B@samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} \e$B$+=i4|CM\e(B
+\e$B$N\e(B @samp{login} \e$B$K$J$j$^$9!#\e(B
 
 @item :mailbox
-The name of the mailbox to get mail from. The default is @samp{INBOX}
-which normally is the mailbox which receive incoming mail.
+\e$B%a!<%k$r<hF@$9$k%a!<%k%\%C%/%9$NL>A0!#=i4|CM$O\e(B @samp{INBOX} \e$B$G!"$3$l$OIa\e(B
+\e$BDL$OF~$C$F$/$k%a!<%k$r<u$1<h$k%a!<%k%\%C%/%9$G$9!#\e(B
 
 @item :predicate
-The predicate used to find articles to fetch. The default, 
-@samp{UNSEEN UNDELETED}, is probably the best choice for most people,
-but if you sometimes peek in your mailbox with a @sc{imap} client and mark
-some articles as read (or; SEEN) you might want to set this to
-@samp{nil}. Then all articles in the mailbox is fetched, no matter
-what. For a complete list of predicates, see RFC2060 §6.4.4.
+\e$B<hF@$9$k5-;v$r7hDj$9$k$?$a$K;H$o$l$k=R8l!#=i4|CM$N!"\e(B@samp{UNSEEN
+UNDELETED} \e$B$O$*$=$i$/$?$$$F$$$N?M$K$O:GNI$NA*Br$G$7$g$&$,!"$H$-$I\e(B
+\e$B$-\e(B @sc{imap} \e$B%/%i%$%"%s%H$G%a!<%k%\%C%/%9$r=|$-!"$$$/$D$+$N5-;v$K4{\e(B
+\e$BFI\e(B (\e$B$b$7$/$O!"\e(BSEEN) \e$B$N0u$rIU$1$k$J$i!"\e(B@samp{nil} \e$B$K@_Dj$7$?$$$+$b$7$l$^\e(B
+\e$B$;$s!#$=$&$9$l$P!"%a!<%k%\%C%/%9$NA4$F$N5-;v$O0u$NG!2?$K4X$o$i$:<hF@$5$l\e(B
+\e$B$^$9!#=R8l$N40A4$J0lMw$O!"\e(BRFC2060 \e.A\eN'6.4.4 \e$B$rFI$s$G$/$@$5$$!#\e(B
 
 @item :fetchflag
-How to flag fetched articles on the server, the default @samp{\Deleted}
-will mark them as deleted, an alternative would be @samp{\Seen} which
-would simply mark them as read. Theese are the two most likely choices,
-but more flags are defined in RFC2060 §2.3.2.
+\e$B%5!<%P!<$G!"<hF@$7$?5-;v$K0u$rIU$1$kJ}K!!#=i4|CM$N\e(B @samp{\Deleted} \e$B$O$=\e(B
+\e$B$l$i$K>C5n$N0u$rIU$1$^$9$,!"B>$K\e(B @samp{\Seen} \e$B$G$OC1$K4{FI$N0u$rIU$1$^$9!#\e(B
+\e$B$3$l$i$O:G$b$"$j$=$&$JFs$D$NA*Br$G$9$,!"B>$N0u$b\e(B RFC2060 \e.A\eN'2.3.2 \e$B$GDj5A$5\e(B
+\e$B$l$F$$$^$9!#\e(B
 
 @item :dontexpunge
-If non-nil, don't remove all articles marked as deleted in the mailbox
-after finishing the fetch.
+@code{nil} \e$B$G$J$+$C$?$i!"5-;v$r<hF@$7$?8e$G!"$=$l$i$K>C5n$N0u$,IU$$$F$$\e(B
+\e$B$F$b:o=|$7$^$;$s!#\e(B
 
 @end table
 
-An example @sc{imap} mail source:
+IMAP \e$B%a!<%k%=!<%9$NNc\e(B:
 
 @lisp
-(imap :server "mail.mycorp.com" :stream kerberos4)
+(imap :server "mail.mycorp.com" :stream kerberos4 :fetchflag "\\Seen")
 @end lisp
 
 @item webmail
-Get mail from a webmail server, such as www.hotmail.com, 
-mail.yahoo.com, and www.netaddress.com. 
+www.hotmail.com, webmail.netscape.com, www.netaddress.com,
+www.my-deja.com \e$B$J$I$N%&%'%V%a!<%k%5!<%P!<$+$i%a!<%k$r<hF@$7$^$9!#\e(B
 
-NOTE: Webmail largely depends on w3 (url) package, whose version of "WWW
-4.0pre.46 1999/10/01" or previous ones may not work.
+\e$BCm\e(B: \e$B8=:_\e(B mail.yahoo.com \e$B$O\e(B POP3 \e$B%5!<%S%9$rDs6!$7$F$$$^$9$N$G!"\e(B
+@sc{pop} \e$B%a!<%k%=!<%9$r;H$&$N$,NI$$$N$G$O$J$$$G$7$g$&$+!#\e(B
 
-WARNING: Mails may lost. NO WARRANTY.
+\e$BCm\e(B: \e$B%&%'%V%a!<%k$O%/%C%-!<$KBg$-$/0MB8$7$^$9!#\e(Burl "4.0pre.46" \e$B$r;H$&>l9g\e(B
+\e$B$O\e(B "one-line-cookie" \e$B%Q%C%A$rEv$F$kI,MW$,$"$j$^$9!#\e(B
 
-Keywords:
+\e$B7Y9p\e(B: \e$B%a!<%k$,<:$o$l$k$+$b$7$l$^$;$s!#L5J]>Z$G$9!#\e(B
+
+\e$B%-!<%o!<%I\e(B:
 
 @table @code
 @item :subtype
-The type of the webmail server.  The default is @code{hotmail}. The
-alternatives are @code{yahoo}, @code{netaddress}.
+\e$B%&%'%V%a!<%k%5!<%P!<$N7?$G$9!#=i4|CM$O\e(B @code{hotmail} \e$B$G$9!#B>$N8uJd\e(B
+\e$B$O\e(B @code{netscape}, @code{netaddress}, @code{my-deja} \e$B$G$9!#\e(B
 
 @item :user
-The user name to give to the webmail server.  The default is the login
-name.
+\e$B%&%'%V%a!<%k%5!<%P!<$NMxMQ<TL>$G$9!#=i4|CM$O%m%0%$%sL>$G$9!#\e(B
 
 @item :password
-The password to give to the webmail server.  If not specified, the user is
-prompted.
+\e$B%&%'%V%a!<%k%5!<%P!<$N%Q%9%o!<%I$G$9!#;XDj$7$J$$>l9g$O!"MxMQ<T$KF~NO$rB%\e(B
+\e$B$7$^$9!#\e(B
 
+@item :dontexpunge
+@code{nil} \e$B$G$J$+$C$?$i!"L$FI$N5-;v$@$1$r<hF@$7$F!"$=$l$i$r$4$_H"$N%U%)\e(B
+\e$B%k%@!<$K0\F0$7$^$;$s!#\e(B
+
+@end table
+
+\e$B%&%'%V%a!<%k$N%=!<%9$NNc$G$9\e(B:
+
+@lisp
+(webmail :subtype 'hotmail :user "user-name" :password "secret")
+@end lisp
 @end table
 
-An example webmail source:
+@table @dfn
+@item Common Keywords
+\e$B6&DL%-!<%o!<%I$O$I$s$J7?$N%a!<%k%=!<%9$K$b;H$&$3$H$,$G$-$^$9!#\e(B
+
+\e$B%-!<%o!<%I\e(B:
+
+@table @code
+@item :plugged
+
+@code{nil} \e$B$G$J$+$C$?$i!"\e(Bgnus \e$B$,\e(B @dfn{unplugged} \e$B$G$"$C$F$b%a!<%k$r<hF@\e(B
+\e$B$7$^$9!#$b$7$"$J$?$,%G%#%l%/%H%j$r%a!<%k%=!<%9$K;H$C$F$$$k$J$i$P!"$3$NNc\e(B
+\e$B$N$h$&$K;XDj$9$k$3$H$,$G$-$^$9\e(B:
 
 @lisp
-(webmail :subtype 'yahoo :user "user-name" :password "secret")
+(setq mail-sources
+      '((directory :path "/home/pavel/.Spool/"
+                   :suffix ""
+                   :plugged t)))
 @end lisp
+
+\e$B$"$J$?$,\e(B @dfn{unplugged} \e$B$G$"$C$F$b\e(B gnus \e$B$O%a!<%k$r<hF@$7$^$9!#$3$l$O!"\e(B
+\e$B%m!<%+%k$N%a!<%k$H%K%e!<%9$r;H$&>l9g$KJXMx$G$9!#\e(B
+
 @end table
+@end table
+
+@subsubsection Function Interface
+
+\e$B>e5-$N$$$/$D$+$N%-!<%o!<%I$O!"<B9T$9$k$?$a$N\e(B Lisp \e$B4X?t$r;XDj$7$^$9!#4X?t\e(B
+\e$B$,<B9T$5$l$F$$$k4V$@$1!"$=$l$>$l$N%-!<%o!<%I\e(B @code{:foo} \e$B$NCM$H$7$F\e(B Lisp
\e$BJQ?t\e(B @code{foo} \e$B$,;H$o$l$^$9!#Nc$($P!"0J2<$N%a!<%k%=!<%9$N@_DjNc$K$D$$\e(B
+\e$B$F9M$($F$_$F2<$5$$!#\e(B
 
+@lisp
+(setq mail-sources '((pop :user "jrl"
+                          :server "pophost" :function fetchfunc)))
+@end lisp
+
+\e$B4X?t\e(B @code{fetchfunc} \e$B$,<B9T$5$l$F$$$k$H$-!"\e(B@code{user} \e$B$H$$$&%7%s%\%k$N\e(B
+\e$BCM$O\e(B @code{"jrl"} \e$B$K$J$j!"\e(B@code{server} \e$B$H$$$&%7%s%\%k$NCM\e(B
+\e$B$O\e(B @code{"pophost"} \e$B$K$J$j$^$9!#\e(B
+@code{port}, @code{password}, @code{program}, @code{prescript}, @code{postscript}, @code{function} \e$B$*\e(B
+\e$B$h$S\e(B @code{authentication} \e$B$NCM$b$^$?!"$=$l$i$N4{DjCM$K$J$j$^$9!#\e(B
+
+\e$B$=$l$>$l$N7?$N%a!<%k%=!<%9$N$?$a$N%-!<%o!<%I$N%j%9%H$K$D$$$F$O!">e5-$r;2\e(B
+\e$B>H$7$F2<$5$$!#\e(B
 
 @node Mail Source Customization
 @subsubsection \e$B%a!<%k%=!<%9$N%+%9%?%^%$%:\e(B
@@ -10257,8 +10965,8 @@ An example webmail source:
 @table @code
 @item mail-source-crash-box
 @vindex mail-source-crash-box
-\e$B%a!<%k$rA`:n$7$F$$$k4V$KJ]B8$5$l$F$$$k>l=j$G$9!#=i4|CM$O\e(B
-@file{~/.emacs-mail-crash-box} \e$B$G$9!#\e(B
+\e$B%a!<%k$rA`:n$7$F$$$k4V$KJ]B8$5$l$F$$$k>l=j$G$9!#=i4|CM\e(B
+\e$B$O\e(B @file{~/.emacs-mail-crash-box} \e$B$G$9!#\e(B
 
 @item mail-source-delete-incoming
 @vindex mail-source-delete-incoming
@@ -10267,28 +10975,34 @@ An example webmail source:
 
 @item mail-source-directory
 @vindex mail-source-directory
-\e$B%U%!%$%k$,\e(B (\e$B$b$7$"$l$P\e(B) \e$BJ]B8$5$l$k%G%#%l%/%H%j!<$G$9!#=i4|CM$O\e(B
-@file{~/Mail/} \e$B$G$9!#8=;~E@$G$O!"$3$l$,;H$o$l$kM#0l$N$b$N$OA0$NJQ?t$,\e(B
-@code{nil} \e$B$G$"$C$?>l9g!"F~$C$F$-$?%U%!%$%k$,J]B8$5$l$k>l=j$N;XDj$G$9!#\e(B
+\e$B%U%!%$%k$,\e(B (\e$B$b$7$"$l$P\e(B) \e$BJ]B8$5$l$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
+\e$B$O\e(B @file{~/Mail/} \e$B$G$9!#8=;~E@$G$O!"$3$l$,;H$o$l$kM#0l$N$b$N$OA0$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$C$?>l9g!"F~$C$F$-$?%U%!%$%k$,J]B8$5$l$k>l=j$N;XDj$G$9!#\e(B
+
+@item mail-source-incoming-file-prefix
+@vindex mail-source-incoming-file-prefix
+\e$BF~$C$F$-$?%a!<%k$rJ]B8$9$k%U%!%$%k$N%W%l%U%#%C%/%9$G$9!#=i4|CM\e(B
+\e$B$O\e(B @file{Incoming} \e$B$G!"$3$N>l9g%U%!%$%k\e(B
+\e$B$O\e(B @file{Incoming30630D_} \e$B$d\e(B @file{Incoming298602ZD} \e$B$N$h$&$K$J$j$^$9!#\e(B
+@code{mail-source-delete-incoming} \e$B$,\e(B @code{nil} \e$B$N>l9g$@$1$G$9$,!#\e(B
 
 @item mail-source-default-file-modes
 @vindex mail-source-default-file-modes
-\e$BA4$F$N?7$7$$%a!<%k%U%!%$%k$O$3$N%U%!%$%k%b!<%I$K$J$j$^$9!#=i4|CM$O\e(B 384
-\e$B$G$9!#\e(B
+\e$BA4$F$N?7$7$$%a!<%k%U%!%$%k$O$3$N%U%!%$%k%b!<%I$K$J$j$^$9!#=i4|CM\e(B
+\e$B$O\e(B 384 \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Fetching Mail
 @subsubsection \e$B%a!<%k$N<hF@\e(B
 
 @vindex mail-sources
 @vindex nnmail-spool-file
 \e$B<B:]$K\e(B gnus \e$B$K$I$3$+$i?7$7$$%a!<%k$r<hF@$9$k$+$r65$($k$K$O!"\e(B
-@code{mail-sources} \e$B$r%a!<%k%=!<%9;X<(;R$N%j%9%H$K@_Dj$9$k$3$H$G$9\e(B
-(@pxref{Mail Source Specifiers}).
+@code{mail-sources} \e$B$r%a!<%k%=!<%9;X<(;R$N%j%9%H$K@_Dj$9$k$3$H$G\e(B
+\e$B$9\e(B (@pxref{Mail Source Specifiers})\e$B!#\e(B
 
-\e$B$3$NJQ?t\e(B (\e$B$H5l<0$N\e(B @code{nnmail-sppl-file}) \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"%a!<\e(B
+\e$B$3$NJQ?t\e(B (\e$B$H5l<0$N\e(B @code{nnmail-spool-file}) \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"%a!<\e(B
 \e$B%k%P%C%/%(%s%I$O7h$7$F<+J,<+?H$G$O%a!<%k$r<hF@$7$h$&$H$7$^$;$s!#\e(B
 
 \e$B%m!<%+%k$N%9%W!<%k$H\e(B POP \e$B%a!<%k%5!<%P!<$NN>J}$+$i%a!<%k$r<hF@$7$?$$$J$i!"\e(B
@@ -10312,11 +11026,10 @@ An example webmail source:
              :password "secret")))
 @end lisp
 
-
 \e$B%a!<%k%P%C%/%(%s%I$r;H$&$H$-$O!"\e(Bgnus \e$B$OA4$F$N%a!<%k$r\e(B inbox \e$B$+$i5[$$>e$2\e(B
 \e$B$F!"%[!<%`%G%#%l%/%H%j!<$KJ|$jEj$2$^$9!#$"$J$?$,%a!<%k%P%C%/%(%s%I$r;H$C\e(B
-\e$B$F$$$J$$>l9g$O!"\e(Bgnus \e$B$O\e(B1\e$BDL$b%a!<%k$r0\F0$7$^$;$s\e(B---\e$B:G=i$KKbK!$N8F$S=P$7\e(B
-\e$B$r$?$/$5$s$7$J$1$l$P$J$j$^$;$s!#$^$:\e(B5\e$B3Q7A$rIA$-!"O9?$$K2P$rIU$1!";3MS$r\e(B
+\e$B$F$$$J$$>l9g$O!"\e(Bgnus \e$B$O0lDL$b%a!<%k$r0\F0$7$^$;$s\e(B---\e$B:G=i$KKbK!$N8F$S=P$7\e(B
+\e$B$r$?$/$5$s$7$J$1$l$P$J$j$^$;$s!#$^$:8^3Q7A$rIA$-!"O9?$$K2P$rIU$1!";3MS$r\e(B
 \e$B@8$1lS$H$7$FJ{$2=*$($?8e$G!"\e(Bgnus \e$B$,$"$J$?$N%a!<%k$r0\F0$7$F$bK\Ev$K$"$^\e(B
 \e$B$j6C$$$F$O$$$1$^$;$s!#\e(B
 
@@ -10346,11 +11059,11 @@ An example webmail source:
 \e$B?t$N0l$D$G$9!#\e(B
 
 @itemx nnmail-post-get-new-mail-hook
-\e$B$3$l$i$OF~$C$F$/$k%a!<%k$r07$&$H$-$K<B9T$5$l$kLr$KN)$D\e(B2\e$B$D$N%U%C%/$G$9\e(B---
-@code{nnmail-pre-get-new-mail-hook} (\e$B$3$l$O?7$7$$%a!<%k$r07$&D>A0$K8F$P\e(B
-\e$B$l$^$9\e(B) \e$B$H\e(B @code{nnmail-post-get-new-mail-hook} (\e$B$3$l$O%a!<%k$N07$$$,=*\e(B
-\e$B$o$C$?$H$-$K8F$P$l$^$9\e(B) \e$B$G$9!#<!$N$b$N$O!"$3$N\e(B2\e$B$D$N%U%C%/$r;H$C$F?7$7$$\e(B
-\e$B%a!<%k%U%!%$%k$KM?$($i$l$k=i4|%U%!%$%k%b!<%I$rJQ99$9$kNc$G$9\e(B:
+\e$B$3$l$i$OF~$C$F$/$k%a!<%k$r07$&$H$-$K<B9T$5$l$kLr$KN)$DFs$D$N%U%C%/$G\e(B
+\e$B$9\e(B---@code{nnmail-pre-get-new-mail-hook} (\e$B$3$l$O?7$7$$%a!<%k$r07$&D>A0$K\e(B
+\e$B8F$P$l$^$9\e(B) \e$B$H\e(B @code{nnmail-post-get-new-mail-hook} (\e$B$3$l$O%a!<%k$N07$$\e(B
+\e$B$,=*$o$C$?$H$-$K8F$P$l$^$9\e(B) \e$B$G$9!#<!$N$b$N$O!"$3$NFs$D$N%U%C%/$r;H$C$F?7\e(B
+\e$B$7$$%a!<%k%U%!%$%k$KM?$($i$l$k=i4|%U%!%$%k%b!<%I$rJQ99$9$kNc$G$9\e(B:
 
 @lisp
 (add-hook 'gnus-pre-get-new-mail-hook
@@ -10366,14 +11079,14 @@ An example webmail source:
 \e$BL>$r;H$$$^$9!#\e(B@samp{mail.misc} \e$B$N$h$&$J%0%k!<%WL>$O\e(B @file{mail.misc} \e$B$H\e(B
 \e$B$$$&%G%#%l%/%H%j!<\e(B (@code{nnml} \e$B%P%C%/%(%s%I$,;H$o$l$F$$$k$H$_$J$9$H\e(B) \e$B$+\e(B
 \e$B%U%!%$%k\e(B (@code{nnfolder} \e$B%P%C%/%(%s%I$,;H$o$l$F$$$k$H$_$J$9$H\e(B) \e$B$H$$$&7k\e(B
-\e$B2L$K$J$j$^$9!#$b$7$=$l$,\e(B @code{nil} \e$B$G$"$k$J$i!"F1$8%0%k!<%W$O\e(B
-@file{mail/misc} \e$B$H$$$&7k2L$K$J$j$^$9!#\e(B
+\e$B2L$K$J$j$^$9!#$b$7$=$l$,\e(B @code{nil} \e$B$G$"$k$J$i!"F1$8%0%k!<%W\e(B
+\e$B$O\e(B @file{mail/misc} \e$B$H$$$&7k2L$K$J$j$^$9!#\e(B
 
 @item nnmail-delete-file-function
 @vindex nnmail-delete-file-function
 @findex delete-file
-\e$B%U%!%$%k$r>C5n$9$k$?$a$K8F$P$l$k4X?t$G$9!#=i4|CM$O\e(B
-@code{delete-file} \e$B$G$9!#\e(B
+\e$B%U%!%$%k$r>C5n$9$k$?$a$K8F$P$l$k4X?t$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{delete-file} \e$B$G$9!#\e(B
 
 @item nnmail-cache-accepted-message-ids
 @vindex nnmail-cache-accepted-message-ids
@@ -10422,7 +11135,7 @@ An example webmail source:
 @end lisp
 
 \e$B$3$NJQ?t$O\e(B @dfn{\e$BJ,3d\e(B} \e$B$NMM<0$K$J$C$F$$$^$9!#J,3d$O\e(B (\e$B$"$k$$$O\e(B) \e$B$=$l$>$l$N\e(B
-\e$BJ,3d$,B>$NJ,3d$r4^$`:F5"E*9=B$$G$9!#$3$l$O;HMQ2DG=$J\e(B5\e$B$D$NJ,3d9=J8$G$9\e(B:
+\e$BJ,3d$,B>$NJ,3d$r4^$`:F5"E*9=B$$G$9!#$3$l$O;HMQ2DG=$J8^$D$NJ,3d9=J8$G$9\e(B:
 
 @enumerate
 
@@ -10431,23 +11144,22 @@ An example webmail source:
 \e$B$9!#IaDL$N@55,I=8=$N9gCW$,$J$5$l$^$9!#Nc$O2<$NJ}$r8+$F2<$5$$!#\e(B
 
 @item
-@code{(@var{field} @var{value} @code{[-} @var{restrict} @code{[-} @var{restrict} @code{[@dots{}]}@code{]]} 
-@var{split})}: \e$B$b$7J,3d$,%j%9%H$G!":G=i$NMWAG$,J8;zNs$G$"$j!"%X%C%@!<\e(B
-@var{field} (\e$B@55,I=8=\e(B) \e$B$,\e(B @var{value} (\e$B$3$l$b@55,I=8=\e(B) \e$B$r4^$s$G$$$k>l9g!"\e(B
-\e$B%a%C%;!<%8$r\e(B @var{split} \e$B$G;XDj$5$l$?$H$3$m$KC_@Q$7$^$9!#\e(B@var{restrict}
- (\e$B$^$?B>$N@55,I=8=\e(B) \e$B$,\e(B @var{field} \e$B$N8e$G!"9gCW$7$?\e(B @var{value} \e$B$N:G8e$N\e(B
-\e$BA0$N$N$$$/$D$+$NJ8;zNs$K9gCW$7$?$i!"\e(B@var{split} \e$B$OL5;k$5$l$^$9!#\e(B
-@var{restrict} \e$B$NJDJq$N$I$l$b$,9gCW$7$J$1$l$P\e(B @var{split} \e$B$,<B9T$5$l$^\e(B
-\e$B$9!#\e(B
+@code{(@var{field} @var{value} @code{[-} @var{restrict} @code{[@dots{}]}@code{]} @var{split})}:
+\e$B$b$7J,3d$,%j%9%H$G!":G=i$NMWAG$,J8;zNs$G$"$j!"%X%C%@!<\e(B @var{field} (\e$B@55,\e(B
+\e$BI=8=\e(B) \e$B$,\e(B @var{value} (\e$B$3$l$b@55,I=8=\e(B) \e$B$r4^$s$G$$$k>l9g!"%a%C%;!<%8\e(B
+\e$B$r\e(B @var{split} \e$B$G;XDj$5$l$?$H$3$m$KC_@Q$7$^$9!#\e(B@var{restrict} (\e$B$^$?B>$N\e(B
+\e$B@55,I=8=\e(B) \e$B$,\e(B @var{field} \e$B$N8e$G!"9gCW$7$?\e(B @var{value} \e$B$N:G8e$NA0$N$$$/$D\e(B
+\e$B$+$NJ8;zNs$K9gCW$7$?$i!"\e(B@var{split} \e$B$OL5;k$5$l$^$9!#\e(B@var{restrict} \e$B$NJD\e(B
+\e$BJq$N$I$l$b$,9gCW$7$J$1$l$P\e(B @var{split} \e$B$,<B9T$5$l$^$9!#\e(B
 
 @item
-@code{(| @var{split}@dots{})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{|}
-(\e$B?bD>K@\e(B) \e$B$G$"$k$H!"$=$l$>$l$N\e(B @var{split} \e$B$r$=$N$&$A$N0l$D$,9gCW$9$k$^$G\e(B
-\e$B<B9T$7$^$9!#\e(B@var{split} \e$B$O%a!<%k%a%C%;!<%8$,0l$D0J>e$N%0%k!<%W$KC_@Q$5$l\e(B
-\e$B$?$H$-$K\e(B ``\e$B9gCW$7$?\e(B'' \e$B$H$7$^$9!#\e(B
+@code{(| @var{split}@dots{})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG\e(B
+\e$B$,\e(B @code{|} (\e$B?bD>K@\e(B) \e$B$G$"$k$H!"$=$l$>$l$N\e(B @var{split} \e$B$r$=$N$&$A$N0l$D$,\e(B
+\e$B9gCW$9$k$^$G<B9T$7$^$9!#\e(B@var{split} \e$B$O%a!<%k%a%C%;!<%8$,0l$D0J>e$N%0%k!<\e(B
+\e$B%W$KC_@Q$5$l$?$H$-$K\e(B ``\e$B9gCW$7$?\e(B'' \e$B$H$7$^$9!#\e(B
 
 @item
-@code{(& @var{split}@dots{})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{t} \e$B$G\e(B
+@code{(& @var{split}@dots{})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{&} \e$B$G\e(B
 \e$B$"$k$H!"%j%9%H$NA4$F$N\e(B @var{split} (\e$BJ#?t\e(B) \e$B$r<B9T$7$^$9!#\e(B
 
 @item
@@ -10456,13 +11168,25 @@ An example webmail source:
 
 @item
 @code{(: @var{function} @var{arg1} @var{arg2} @dots{})}: \e$B$b$7J,3d$,%j%9\e(B
-\e$B%H$G!":G=i$N4X?t$,\e(B @code{:} \e$B$G$"$k$H!"\e(B2\e$BHVL\$NMWAG$,\e(B @var{args} \e$B$r0z?t$H\e(B
+\e$B%H$G!":G=i$NMWAG$,\e(B @code{:} \e$B$G$"$k$H!"FsHVL\$NMWAG$,\e(B @var{args} \e$B$r0z?t$H\e(B
 \e$B$7$F4X?t$H$7$F8F$P$l$^$9!#4X?t$O\e(B @var{split} \e$B$rJV$9$Y$-$G$9!#\e(B
 
+\e$BNc$($P0J2<$N4X?t$O!"5-;v$N%\%G%#$K4p$E$$$?J,3d$K;H$($k$G$7$g$&\e(B:
+
+@lisp
+(defun split-on-body ()
+  (save-excursion
+    (set-buffer " *nnmail incoming*")
+    (goto-char (point-min))
+    (when (re-search-forward "Some.*string" nil t)
+      "string.group")))
+@end lisp
+
 @item
-@code{(! @var{func} @var{split})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{!}
-\e$B$G$"$k$H\e(B @var{split} \e$B$,<B9T$5$l!"\e(B@var{func} \e$B$O\e(B @var{split} \e$B$N7k2L$r0z?t\e(B
-\e$B$H$7$F8F$P$l$^$9!#\e(B@var{func} \e$B$OJ,3d$rJV$9$Y$-$G$9!#\e(B
+@code{(! @var{func} @var{split})}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG\e(B
+\e$B$,\e(B @code{!} \e$B$G$"$k$H\e(B @var{split} \e$B$,<B9T$5$l!"\e(B
+@var{func} \e$B$O\e(B @var{split} \e$B$N7k2L$r0z?t$H$7$F8F$P$l$^$9!#\e(B@var{func} \e$B$OJ,\e(B
+\e$B3d$rJV$9$Y$-$G$9!#\e(B
 
 @item
 @code{nil}: \e$B$b$7J,3d$,\e(B @code{nil} \e$B$G$"$l$P!"$=$l$OL5;k$5$l$^$9!#\e(B
@@ -10485,19 +11209,60 @@ table) \e$B$K=>$C$F40A4$K9gCW$7$J$1$l$P$J$j$^$;$s!#@55,I=8=$G%U%#!<%k%IL>$+\e(B
 @code{nnmail-split-fancy-syntax-table} \e$B$,$3$l$i$NA4$F$NJ,3d$,<B9T$5$l$F\e(B
 \e$B$$$k$H$-$KM-8z$J9=J8%F!<%V%k$G$9!#\e(B
 
-\e$B%X%C%@!<$N$$$/$D$+$N>pJs$K4p$E$$$F!"\e(Bgnus \e$B$KF0E*$K%0%k!<%W$r:n$i$;$?$$$N$G$"$l$P\e(B (\e$BNc$($P!"%0%k!<%WL>$G\e(B @code{replace-match} \e$B$N$h$&$JBeMQ$r$9$k\e(B)\e$B!"<!$N$h$&$J;v$,$G$-$^$9!#\e(B
+\e$B%X%C%@!<$N$$$/$D$+$N>pJs$K4p$E$$$F!"\e(Bgnus \e$B$KF0E*$K%0%k!<%W$r:n$i$;$?$$$N\e(B
+\e$B$G$"$l$P\e(B (\e$BNc$($P!"%0%k!<%WL>$G\e(B @code{replace-match} \e$B$N$h$&$JBeMQ$r$9$k\e(B)\e$B!"\e(B
+\e$B<!$N$h$&$J;v$,$G$-$^$9!#\e(B
 
 @example
 (any "debian-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
 @end example
 
-\e$B$3$NNc$G$O!"\e(B@samp{debian-foo@@lists.debian.org} \e$B$KAw$i$l$?%a!<%k$O\e(B
-@samp{mail.debian.foo} \e$B$H$$$&Iw$K$J$j$^$9!#\e(B
+\e$B$3$NNc$G$O!"\e(B@samp{debian-foo@@lists.debian.org} \e$B$KAw$i$l$?%a!<%k\e(B
+\e$B$O\e(B @samp{mail.debian.foo} \e$B$H$$$&Iw$K$J$j$^$9!#\e(B
 
 \e$B$b$7J8;zNs$,MWAG\e(B @samp{\&} \e$B$r4^$s$G$$$k$H!"Be$o$j$KA0$G9gCW$7$?J8;zNs$,\e(B
-\e$B;H$o$l$^$9!#F1MM$K!"MWAG\e(B @samp{\\1} \e$B$+$i\e(B @samp{\\9} \e$B$^$G$O%0%k!<%WIU$1\e(B 1
-\e$B$+$i\e(B 9 \e$B$^$G$G9gCW$7$?J8;zJ8$GBeBX$5$l$^$9!#\e(B
+\e$B;H$o$l$^$9!#F1MM$K!"MWAG\e(B @samp{\\1} \e$B$+$i\e(B @samp{\\9} \e$B$^$G$O%0%k!<%WIU\e(B
+\e$B$1\e(B 1 \e$B$+$i\e(B 9 \e$B$^$G$G9gCW$7$?J8;zNs$GBeBX$5$l$^$9!#\e(B
+
+@findex nnmail-split-fancy-with-parent
+\e$B4X?t\e(B @code{nnmail-split-fancy-with-parent} \e$B$O!"%U%)%m!<%"%C%W5-;v$r?F5-\e(B
+\e$B;v$HF1$8%0%k!<%W$K?6$jJ,$1$k$?$a$K;H$$$^$9!#%a!<%k$N?6$jJ,$1$r0l@87|L?@_\e(B
+\e$BDj$7$F$_$F$b40`z$K$O$G$-$J$$$3$H$,$"$j$^$9$M!#\e(B \e$BNc$($P!">e;J$+$i8D?M08$F\e(B
+\e$B$N%a!<%k$,FO$$$?$H$7$^$9!#<+J,$,7H$C$F$$$k%W%m%8%'%/%H$H$OJL$NOC$G$9!#$1\e(B
+\e$B$l$I!VB>$N%a!<%k$H6hJL$G$-$k$h$&$K$3$l$3$l$3$&$$$&8@MU$rI=Bj$K=q$$$F$/$@\e(B
+\e$B$5$$!W$H>e;J$K8~$+$C$F;X?^$9$k$o$1$K$O$$$-$^$;$s$+$i!"7k6I<+J,$N<j$rHQ$o\e(B
+\e$B$7$F$R$H$D$R$H$D%a!<%k$r@5$7$$%0%k!<%W$K?6$jJ,$1$k$O$a$K$J$j$^$9!#$=$s$J\e(B
+\e$B$H$-$K$3$N4X?t$r;H$&$H!"$3$NLLE]$J:n6H$r\e(B 1 \e$B%9%l%C%I$K$D$-\e(B 1 \e$B2s$-$j$G:Q$^\e(B
+\e$B$9$3$H$,$G$-$^$9!#\e(B
+
+\e$B$3$N5!G=$rMxMQ$9$k$?$a$K$O!"$^$:JQ?t\e(B @code{nnmail-treat-duplicates} \e$B$NCM\e(B
+\e$B$rHs\e(B nil \e$B$K@_Dj$9$kI,MW$,$"$j$^$9\e(B (\e$B4{DjCM$N$^$^$J$iLdBj$"$j$^$;$s\e(B)\e$B!#$=$l\e(B
+\e$B$,$G$-$?$i\e(B @code{nnmail-split-fancy-with-parent} \e$B$r;H$C$F$_$F$/$@$5$$!#\e(B
+\e$B%3%m%s$r;H$C$F$3$s$JIw$K=q$-$^$9\e(B:
+@lisp
+(setq nnmail-split-fancy
+      '(| (: nnmail-split-fancy-with-parent)
+          ;; \e$B;D$j$N?6$jJ,$1J}$O$3$3$K=q$/\e(B
+        ))
+@end lisp
 
+\e$B$3$N5!G=$O<B:]!"<!$NMM$KF/$$$F$$$^$9\e(B: \e$BJQ?t\e(B
+@code{nnmail-treat-duplicates} \e$B$NCM$,Hs\e(B nil \e$B$N>l9g!"\e(BGnus \e$B$O8+$D$1$?A45-\e(B
+\e$B;v$N%a%C%;!<%8\e(B ID \e$B$r\e(B \e$BJQ?t\e(B @code{nnmail-message-id-cache-file} \e$B$,;XDj$9$k\e(B
+\e$B%U%!%$%k$K5-O?$7$^$9!#$3$N$H$-!"$=$l$>$l$N5-;v$,B8:_$9$k%0%k!<%W$NL>A0$r\e(B
+\e$BJ;5-$7$^$9\e(B (\e$B$?$@$7%a!<%k$N>l9g$@$1!"$5$b$J$1$l$P%0%k!<%WL>$OD4$Y$^$;$s\e(B)\e$B!#\e(B
+\e$B$5$F!"$$$h$$$h%a!<%k$N?6$jJ,$1$,;O$^$k$H!"4X?t\e(B
+@code{nnmail-split-fancy-with-parent} \e$B$O!"BP>]$H$J$k3F5-;v$N\e(B References
+(\e$B$H\e(B In-Reply-To) \e$B%X%C%@$rD4$Y!"\e(B@code{nnmail-message-id-cache-file} \e$B$K;X\e(B
+\e$BDj$5$l$F$$$k%U%!%$%k$K$=$l$i$N%a%C%;!<%8\e(B ID \e$B$,$"$k$+$I$&$+D4$Y$^$9!#?F5-\e(B
+\e$B;v$,8+$D$+$k$H!"$3$N4X?t$OBP1~$9$k%0%k!<%WL>$rJV$9$o$1$G$9!#$3$3$G!"JQ?t\e(B
+@code{nnmail-message-id-cache-length} \e$B$NCM$r4{DjCM$h$j$b4v$i$+Bg$-$JCM$K\e(B
+\e$B@_Dj$9$k$3$H$r$*4+$a$7$^$9!#$=$&$9$k$H!":#D4$Y$i$l$?%a%C%;!<%8\e(B ID \e$BC#$O:#\e(B
+\e$B$7$P$i$/%-%c%C%7%e$NCf$KB8B3$G$-$^$9\e(B (5000 \e$B$K@_Dj$9$k$H%-%c%C%7%e%U%!%$\e(B
+\e$B%k$NBg$-$5$O$@$$$?$$\e(B 300 \e$B%-%m%P%$%H$0$i$$$K$J$k$_$?$$$G$9\e(B)\e$B!#$5$i$K!"\e(B
+\e$BJQ?t\e(B @code{nnmail-cache-accepted-message-ids} \e$B$NCM$rHs\e(B nil \e$B$K@_Dj$9$l$P!"\e(B
+Gnus \e$B$O0\F0$5$l$?5-;v$N%a%C%;!<%8\e(B ID \e$B$r$b5-O?$9$k$N$G!"%U%)%m!<%"%C%W5-\e(B
+\e$B;v$O?F5-;v$N0\F0@h$HF1$8%0%k!<%W$KF~$k$h$&$K$J$j$^$9!#\e(B
 
 @node Group Mail Splitting
 @subsection \e$B%0%k!<%W%a!<%kJ,3d\e(B
@@ -10507,13 +11272,13 @@ table) \e$B$K=>$C$F40A4$K9gCW$7$J$1$l$P$J$j$^$;$s!#@55,I=8=$G%U%#!<%k%IL>$+\e(B
 @findex gnus-group-split
 \e$B$?!<$/$5$s$N%a!<%j%s%0%j%9%H$r9XFI$7$F$$$k$1$l$I!"<j$G%a!<%kJ,3d5,B'$r0]\e(B
 \e$B;}$7$?$/$J$$$H$-$O!"%0%k!<%W%a!<%kJ,3d$H$$$&$b$N$,$"$J$?$N$?$a$K$"$j$^$9!#\e(B
-\e$B%0%k!<%W%Q%i%a!<%?$+%0%k!<%W%+%9%?%^%$%:$G\e(B @var{to-list}\e$B!"\e(B
-@var{to-address} \e$B$NN>J}$b$7$/$O$I$A$i$+$r@_Dj$7$F\e(B 
-@code{nnmail-split-methods} \e$B$r\e(B @code{gnus-group-split} \e$B$K@_Dj$9$k$@$1$G\e(B
-\e$B$9!#J,3d4X?t$OA4$F$N%0%k!<%W$G$3$l$i$N%Q%i%a!<%?$rAv::$7!"$=$l$K=>$C$FJ,\e(B
-\e$B3d$7$^$9!#$9$J$o$A!"%a!<%k%0%k!<%W$N%Q%i%a!<%?\e(B @var{to-list} \e$B$+\e(B 
-@var{to-address} \e$B$G;XDj$5$l$?%"%I%l%9$+$iEj9F$5$l$?$b$N$+!"$=$N%"%I%l%9\e(B
-\e$B$XEj9F$5$l$?%a%C%;!<%8$,$=$N%0%k!<%W$KJ]B8$5$l$^$9!#\e(B
+\e$B%0%k!<%W%Q%i%a!<%?$+%0%k!<%W%+%9%?%^%$%:\e(B
+\e$B$G\e(B @var{to-list}, @var{to-address} \e$B$NN>J}$b$7$/$O$I$A$i$+$r@_Dj$7\e(B
+\e$B$F\e(B @code{nnmail-split-methods} \e$B$r\e(B @code{gnus-group-split} \e$B$K@_Dj$9$k$@$1\e(B
+\e$B$G$9!#J,3d4X?t$OA4$F$N%0%k!<%W$G$3$l$i$N%Q%i%a!<%?$rAv::$7!"$=$l$K=>$C$F\e(B
+\e$BJ,3d$7$^$9!#$9$J$o$A!"%a!<%k%0%k!<%W$N%Q%i%a!<\e(B
+\e$B%?\e(B @var{to-list} \e$B$+\e(B @var{to-address} \e$B$G;XDj$5$l$?%"%I%l%9$+$iEj9F$5$l$?\e(B
+\e$B$b$N$+!"$=$N%"%I%l%9$XEj9F$5$l$?%a%C%;!<%8$,$=$N%0%k!<%W$KJ]B8$5$l$^$9!#\e(B
 
 \e$B$H$-$K$O!"%a!<%j%s%0%j%9%H$K$OJ#?t$N%"%I%l%9$,$"$j!"%a!<%kJ,3d$K$=$l$iA4\e(B
 \e$B$F$rG'<1$5$;$?$$$H;W$&$H$-$,$"$k$+$b$7$l$^$;$s\e(B: @var{extra-aliases} \e$B%0%k!<\e(B
@@ -10521,29 +11286,34 @@ table) \e$B$K=>$C$F40A4$K9gCW$7$J$1$l$P$J$j$^$;$s!#@55,I=8=$G%U%#!<%k%IL>$+\e(B
 \e$B;H$$$?$1$l$P!"\e(B@var{split-regexp} \e$B$r@_Dj$7$F$/$@$5$$!#\e(B
 
 \e$B$3$l$i$NA4$F$N%0%k!<%W$N%Q%i%a!<%?$O!"\e(B@code{nnmail-split-fancy} \e$BJ,3d$r:n\e(B
-\e$B@.$9$k$?$a$K;HMQ$5$l!"$=$l$O\e(B @var{field} \e$B$,\e(B @samp{any} \e$B$G!"\e(B@var{value} 
-\e$B$,\e(B@var{to-list}, @var{to-address}, @var{extra-aliases} \e$B$NA4$F!"\e(B
-@var{split-regexp} \e$B$NA4$F$N9gCW$K9gCW$9$kC1FH$N@55,I=8=!"\e(B@var{split} \e$B$,\e(B
-\e$B%0%k!<%W$NL>A0$K$J$j$^$9!#\e(B@var{restrict} \e$B$b;HMQ$G$-$^$9\e(B:
+\e$B@.$9$k$?$a$K;HMQ$5$l!"$=$l$O\e(B @var{field} \e$B$,\e(B @samp{any} \e$B$G!"\e(B
+@var{value} \e$B$,\e(B @var{to-list}, @var{to-address}, @var{extra-aliases} \e$B$NA4\e(B
+\e$B$F!"\e(B@var{split-regexp} \e$B$NA4$F$N9gCW$K9gCW$9$kC1FH$N@55,I=8=!"\e(B
+@var{split} \e$B$,%0%k!<%W$NL>A0$K$J$j$^$9!#\e(B@var{restrict} \e$B$b;HMQ$G$-$^$9\e(B:
 @var{split-exclude} \e$B%Q%i%a!<%?$r@55,I=8=$N%j%9%H$K@_Dj$9$k$@$1$G$9!#\e(B
 
 \e$B$3$l$i$NA4$F$N%Q%i%a!<%?$r;H$C$F@5$7$$J,3d$,@8@.$5$l$J$$$H$-$d!"2?$+0c$C\e(B
-\e$B$?$b$N$,I,MW$J$H$-$O!"%Q%i%a!<%?\e(B @var{split-spec} \e$B$r\e(B
-@code{nnmail-split-fancy} \e$BJ,3d$K@_Dj$9$k$3$H$,$G$-$^$9!#$3$N>l9g$O!"B>$N\e(B
-\e$BA0$K=q$$$?A4$F$N%Q%i%a!<%?$O\e(B @code{gnus-group-split} \e$B$KL5;k$5$l$^$9!#FC\e(B
-\e$B$K!"\e(B@var{split-spec} \e$B$O\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-!"$=$N>l9g$O%0%k!<\e(B
-\e$B%W$O\e(B @code{gnus-group-split} \e$B$KL5;k$5$l$^$9!#\e(B
+\e$B$?$b$N$,I,MW$J$H$-$O!"%Q%i%a!<\e(B
+\e$B%?\e(B @var{split-spec} \e$B$r\e(B @code{nnmail-split-fancy} \e$BJ,3d$K@_Dj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#$3$N>l9g$O!"B>$NA0$K=q$$$?A4$F$N%Q%i%a!<%?\e(B
+\e$B$O\e(B @code{gnus-group-split} \e$B$KL5;k$5$l$^$9!#FC$K!"\e(B
+@var{split-spec} \e$B$O\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-!"$=$N>l9g$O%0%k!<%W\e(B
+\e$B$O\e(B @code{gnus-group-split} \e$B$KL5;k$5$l$^$9!#\e(B
 
 @vindex gnus-group-split-default-catch-all-group
-@code{gnus-group-split} \e$B$O$=$l$>$l$N%0%k!<%W$K0l$D$NJ,3d$r4^$`C10l$N\e(B 
-@code{&} \e$BFC5iJ,3d$rDj5A$9$k$3$H$G9gCW$9$kA4$F$N%0%k!<%W$KAj8_Ej9F$r$7$^\e(B
-\e$B$9!#%a%C%;!<%8$,$I$NJ,3d$K$b9gCW$7$J$1$l$P!"$I$l$+$N%0%k!<%W$G\e(B 
-@var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$J$$>l9g$O\e(B 
-@code{gnus-group-split-default-catch-all-group} \e$B$G;XDj$5$l$F$$$k%0%k!<%W\e(B
-\e$B$KJ]B8$5$l$^$9!#\e(B@var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$k%0\e(B
-\e$B%k!<%W$,$"$k>l9g$O!"$=$N%0%k!<%W$,A4$F$rJa3M$9$k%0%k!<%W$H$7$F;HMQ$5$l$^\e(B
-\e$B$9!#$3$N>l9g$O!"\e(B@code{|} \e$BFC5iJ,3d$,\e(B @code{&} \e$BJ,3d$HA4$F$rJa3M$9$k%0%k!<\e(B
-\e$B%W$rJDJq$9$k$h$&$K!"Aj8_Ej9F$O9T$o$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B
+@code{gnus-group-split} \e$B$O$=$l$>$l$N%0%k!<%W$K0l$D$NJ,3d$r4^$`C10l\e(B
+\e$B$N\e(B @code{&} \e$BFC5iJ,3d$rDj5A$9$k$3$H$G9gCW$9$kA4$F$N%0%k!<%W$KAj8_Ej9F$r$7\e(B
+\e$B$^$9!#%a%C%;!<%8$,$I$NJ,3d$K$b9gCW$7$J$1$l$P!"$I$l$+$N%0%k!<%W\e(B
+\e$B$G\e(B @var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$J$$>l9g\e(B
+\e$B$O\e(B @code{gnus-group-split-default-catch-all-group} \e$B$G;XDj$5$l$F$$$k%0%k!<\e(B
+\e$B%W$KJ]B8$5$l$^$9!#\e(B@var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$k\e(B
+\e$B%0%k!<%W$,$"$k>l9g$O!"$=$N%0%k!<%W$,A4$F$rJa3M$9$k%0%k!<%W$H$7$F;HMQ$5$l\e(B
+\e$B$^$9!#$3$NJQ?t$O$7$P$7$PC1$K%0%k!<%W$r;XDj$9$k$?$a$K;H$o$l$^$9$,!"G$0U$N\e(B
+\e$BJ#;($JFC5iJ,3d$r$b@_Dj$9$k\e(B (\e$B7k6I!"%0%k!<%WL>$OFC5iJ,3d$J$N$G$9\e(B) \e$B$N$G!"8D\e(B
+\e$B?M$N%a!<%k%U%)%k%@!<$N$I$N%a!<%j%s%0%j%9%H$K$bEv$F$O$^$i$J$$%a!<%k$rJ,3d\e(B
+\e$B$9$k$N$KJXMx$G$7$g$&!#$J$*$3$NFC5iJ,3d$O!"\e(B@code{|} \e$BJ,3d%j%9%H$N:G8e$NMW\e(B
+\e$BAG\e(B - \e$B%0%k!<%W%Q%i%a!<%?$+$iCj=P$5$l$?5,B'$r;}$D\e(B @code{&} \e$BJ,3d$r4^$`\e(B - \e$B$H\e(B
+\e$B$7$FDI2C$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#\e(B
 
 \e$B$=$m$=$mNc$r=P$9$Y$-$G$7$g$&!#0J2<$N%0%k!<%W%Q%i%a!<%?$,Dj5A$5$l$F$$$k$H\e(B
 \e$B$7$^$9\e(B:
@@ -10562,8 +11332,9 @@ nnml:mail.others:
 @end example
 
 @code{nnmail-split-methods} \e$B$r\e(B @code{gnus-group-split} \e$B$K@_Dj$9$k$H!"\e(B
-@code{nnmail-split-fancy} \e$B$,A*Br$5$l$F!"JQ?t\e(B @code{nnmail-split-fancy}
-\e$B$,0J2<$N$h$&$K@_Dj$5$l$F$$$k$+$N$h$&$K?6Iq$$$^$9\e(B:
+@code{nnmail-split-fancy} \e$B$,A*Br$5$l$F!"JQ\e(B
+\e$B?t\e(B @code{nnmail-split-fancy} \e$B$,0J2<$N$h$&$K@_Dj$5$l$F$$$k$+$N$h$&$K?6Iq\e(B
+\e$B$$$^$9\e(B:
 
 @lisp
 (| (& (any "\\(bar@@femail\\.com\\|.*@@femail\\.com\\)" "mail.bar")
@@ -10584,18 +11355,19 @@ nnml:mail.others:
 @var{groups} \e$B$O=PNO$NJ,3d$r@8@.$9$k$?$a$K%Q%i%a!<%?$,Av::$5$l$k%0%k!<%W\e(B
 \e$BL>$N%j%9%H$+@55,I=8=$G$9!#\e(B@var{no-crosspost} \e$B$OAj8_Ej9F$r;HMQ6X;_$K$k$?\e(B
 \e$B$a$K;H$&$3$H$,$G$-$^$9!#$=$N>l9g!"C10l$N\e(B @code{|} \e$BJ,3d$,=PNO$5$l$^$9!#\e(B
-@var{catch-all} \e$B$O=i4|A4Ja3M%0%k!<%W$H$7$F;HMQ$5$l$k%0%k!<%WL>$G$9!#\e(B
-@var{catch-all} \e$B$,\e(B @code{nil} \e$B$G$"$k$+!"\e(B@var{split-regexp} \e$B$,$I$l$+$NA*\e(B
-\e$BBr$5$l$?%0%k!<%W6uJ8;zNs$K9gCW$9$k$H!"A4Ja3MJ,3d$O9T$o$l$^$;$s!#$=$&$G$J\e(B
-\e$B$$>l9g!"%0%k!<%W$K\e(B @var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$k\e(B
-\e$B$b$N$,$"$k$H!"$3$N%0%k!<%W$,\e(B @var{catch-all} \e$B0z?t$r>e=q$-$7$^$9!#\e(B
+@var{catch-all} \e$B$O\e(B @var{gnus-group-split-default-catch-all-group} \e$B$N$h$&\e(B
+\e$B$K!":G8e$N<jCJ$H$7$F;H$o$l$kFC5iJ,3d$G$9!#\e(B@var{catch-all} \e$B$,\e(B @code{nil} \e$B$G\e(B
+\e$B$"$k$+!"\e(B@var{split-regexp} \e$B$,$I$l$+$NA*Br$5$l$?%0%k!<%W6uJ8;zNs$K9gCW$9\e(B
+\e$B$k$H!"A4Ja3MJ,3d$O9T$o$l$^$;$s!#$=$&$G$J$$>l9g!"%0%k!<%W\e(B
+\e$B$K\e(B @var{split-spec} \e$B$,\e(B @code{catch-all} \e$B$K@_Dj$5$l$F$$$k$b$N$,$"$k$H!"$3\e(B
+\e$B$N%0%k!<%W$,\e(B @var{catch-all} \e$B0z?t$r>e=q$-$7$^$9!#\e(B
 
 @findex gnus-group-split-setup
 \e$BIT1?$J$3$H$K!"A4$F$N%0%k%W$H%Q%i%a!<%?$rAv::$9$k$3$H$OHs>o$KCY$$$G$9!#FC\e(B
-\e$B$KA4$F$N%a%C%;!<%8$KBP$7$F$J$5$l$k$3$H$r9M$($k$H!#$1$l$I$b!"@dK>$7$J$$$G\e(B!
-\e$B4X?t\e(B @code{gnus-group-split-setup} \e$B$,\e(B @code{gnus-group-split} \e$B$r$h$j$:$C\e(B
-\e$B$H8zN(E*$JJ}K!$GA*Br$9$k$h$&$K;H$&$3$H$,$G$-$^$9!#$=$l$O\e(B 
-@code{nnmail-split-methods} \e$B$r\e(B @code{nnmail-split-fancy} \e$B$K@_Dj$7!"\e(B
+\e$B$KA4$F$N%a%C%;!<%8$KBP$7$F$J$5$l$k$3$H$r9M$($k$H!#$1$l$I$b!"@dK>$7$J$$\e(B
+\e$B$G\e(B! \e$B4X?t\e(B @code{gnus-group-split-setup} \e$B$,\e(B @code{gnus-group-split} \e$B$r$h$j\e(B
+\e$B$:$C$H8zN(E*$JJ}K!$G;H$&$3$H$,$G$-$^$9!#$=$l\e(B
+\e$B$O\e(B @code{nnmail-split-methods} \e$B$r\e(B @code{nnmail-split-fancy} \e$B$K@_Dj$7!"\e(B
 @code{nnmail-split-fancy} \e$B$r\e(B @code{gnus-group-split-fancy} \e$B$G@8@.$5$l$?\e(B
 \e$BJ,3d$K@_Dj$7$^$9!#$3$&$7$F$I$s$J$KJ,3d$9$k%a%C%;!<%8$,$?$/$5$s$"$C$F$b!"\e(B
 \e$B%0%k!<%W%Q%i%a!<%?$O0lEY$@$1Av::$5$l$^$9!#\e(B
@@ -10611,16 +11383,16 @@ nnml:mail.others:
 (gnus-group-split-setup AUTO-UPDATE CATCH-ALL)
 @end lisp
 
-@var{auto-update} \e$B$,\e(B @code{nil} \e$B$GL5$$$H!"\e(B@code{gnus-group-split-update}
-\e$B$,\e(B @code{nnmail-pre-get-new-mail-hook} \e$B$KDI2C$5$l!"FsEY$H\e(B 
-@code{nnmail-split-fancy} \e$B$N99?7$r?4G[$9$kI,MW$O$"$j$^$;$s!#\e(B
-@var{catch-all} \e$B$r>JN,$7$J$$>l9g$O\e(B (\e$B$=$l$O%*%W%7%g%s$G$9\e(B) 
+@var{auto-update} \e$B$,\e(B @code{nil} \e$B$GL5$$$H!"\e(B
+@code{gnus-group-split-update} \e$B$,\e(B @code{nnmail-pre-get-new-mail-hook} \e$B$K\e(B
+\e$BDI2C$5$l!"FsEY$H\e(B @code{nnmail-split-fancy} \e$B$N99?7$r?4G[$9$kI,MW$O$"$j$^\e(B
+\e$B$;$s!#\e(B@var{catch-all} \e$B$r>JN,$7$J$$>l9g$O\e(B (\e$B$=$l$O%*%W%7%g%s$G\e(B nil \e$B$HF1$8\e(B)\e$B!"\e(B
 @code{gnus-group-split-default-catch-all-group} \e$B$O$=$NCM$K@_Dj$5$l$^$9!#\e(B
 
 @vindex gnus-group-split-updated-hook
 @code{nnmail-split-fancy} \e$B$,\e(B @code{gnus-group-split-update} \e$B$G@_Dj$5$l$?\e(B
-\e$B8e$K!"JQ99$7$?$$$H$-$N$?$a$K!"$3$N4X?t$O\e(B 
-@code{gnus-group-split-update-hook} \e$B$r=*N;$9$kD>A0$K<B9T$7$^$9!#\e(B
+\e$B8e$K!"JQ99$7$?$$$H$-$N$?$a$K!"$3$N4X?t\e(B
+\e$B$O\e(B @code{gnus-group-split-update-hook} \e$B$r=*N;$9$kD>A0$K<B9T$7$^$9!#\e(B
 
 @node Incorporating Old Mail
 @subsection \e$B8E$$%a!<%k$r<h$j9~$`\e(B
@@ -10633,9 +11405,9 @@ nnml:mail.others:
 \e$B$=$l$r$9$k;v$O$H$F$b4JC1$G$9!#\e(B
 
 \e$BNc$r5s$2$^$7$g$&\e(B: @code{nnml} (@pxref{Mail Spool}) \e$B$r;H$C$F%a!<%k$rFI$s\e(B
-\e$B$G$$$F!"\e(B@code{nnmail-split-methods} \e$B$rK~B-$G$-$kCM$K@_Dj$7$F$$$^$9!#8E$$\e(B
-Unix mbox \e$B%U%!%$%k$,=EMW$@$1$l$I8E$$%a!<%k$GK~$?$5$l$F$$$^$9!#$"$J$?$O$=\e(B
-\e$B$l$r\e(B @code{nnml} \e$B%0%k!<%W$K0\F0$7$?$$$H;W$C$F$$$^$9!#\e(B
+\e$B$G$$$F!"\e(B@code{nnmail-split-methods} \e$B$rK~B-$G$-$kCM$K@_Dj$7$F$$$^$9!#8E\e(B
+\e$B$$\e(B Unix mbox \e$B%U%!%$%k$,=EMW$@$1$l$I8E$$%a!<%k$GK~$?$5$l$F$$$^$9!#$"$J$?\e(B
+\e$B$O$=$l$r\e(B @code{nnml} \e$B%0%k!<%W$K0\F0$7$?$$$H;W$C$F$$$^$9!#\e(B
 
 \e$BJ}K!$G$9\e(B:
 
@@ -10652,12 +11424,12 @@ Groups})\e$B!#\e(B
 `SPACE' \e$B$rBG$C$F!"?7$7$/:n$i$l$?%0%k!<%W$KF~$j$^$9!#\e(B
 
 @item
-`M P b' \e$B$rBG$C$F!"%0%k!<%W%P%C%U%!$NA4$F$N5-;v$K<B9T0u$rIU$1$^$9\e(B
-(@pxref{Setting Process Marks})\e$B!#\e(B
+`M P b' \e$B$rBG$C$F!"%0%k!<%W%P%C%U%!$NA4$F$N5-;v$K<B9T0u$rIU$1$^\e(B
+\e$B$9\e(B (@pxref{Setting Process Marks})\e$B!#\e(B
 
 @item
-`B r' \e$B$rBG$C$FA4$F$N%W%m%;%90u$NIU$$$?:F%9%W!<%k$7!"B%?J$5$l$?$H$-$K\e(B
-@samp{nnml} \e$B$HEz$($^$9\e(B (@pxref{Mail Group Commands})\e$B!#\e(B
+`B r' \e$B$rBG$C$FA4$F$N%W%m%;%90u$NIU$$$?:F%9%W!<%k$7!"B%?J$5$l$?$H$-\e(B
+\e$B$K\e(B @samp{nnml} \e$B$HEz$($^$9\e(B (@pxref{Mail Group Commands})\e$B!#\e(B
 @end enumerate
 
 mbox \e$B%U%!%$%k$NA4$F$N%a!<%k%a%C%;!<%8$b:#$d$"$J$?$N\e(B @code{nnml} \e$B%0%k!<%W\e(B
@@ -10666,16 +11438,15 @@ mbox \e$B%U%!%$%k$NA4$F$N%a!<%k%a%C%;!<%8$b:#$d$"$J$?$N\e(B @code{nnml} \e$B%0%k!<%
 \e$B$r9M$($k$+$b$7$l$^$;$s$,!";d$OA4$F$N%a!<%k$,$"$k$Y$-$H$3$m$KG<$^$C$F$$$k\e(B
 \e$B$N$r40A4$K3NG'$9$k$^$G$O!"$=$&$O$7$^$;$s!#\e(B
 
-
 @node Expiring Mail
 @subsection \e$B%a!<%k$N4|8B@Z$l>C5n\e(B
 @cindex article expiry
 
 \e$BEAE}E*$J%a!<%k%j!<%@!<$O!"2?$+!"4{FI$N0u$rIU$1$k$H5-;v$r:o=|$9$k798~$,$"\e(B
-\e$B$j$^$9!#\e(B Gnus \e$B$O%a!<%k$rFI$`;v$KBP$7$F!"4pK\E*$KA4$/0c$C$?J}K!$r<h$j$^$9!#\e(B
+\e$B$j$^$9!#\e(BGnus \e$B$O%a!<%k$rFI$`;v$KBP$7$F!"4pK\E*$KA4$/0c$C$?J}K!$r<h$j$^$9!#\e(B
 
 Gnus \e$B$O4pK\E*$K%a!<%k$rHf3SE*FCJL$JJ}K!$G<u$1<h$i$l$?%K%e!<%9$G$"$k$H$_\e(B
-\e$B$J$7$^$9!#$=$l$O<B:]$K%a!<%k$rJQ99$7$"$j!"%a!<%k%a%C%;!<%8$r>C$98"NO$,$"\e(B
+\e$B$J$7$^$9!#$=$l$O<B:]$K%a!<%k$rJQ99$7$?$j!"%a!<%k%a%C%;!<%8$r>C$98"NO$,$"\e(B
 \e$B$k$H$O9M$($^$;$s!#%a!<%k%0%k!<%W$KF~$C$F!"5-;v$K\e(B ``\e$B4{FI\e(B'' \e$B$N0u$rIU$1$?$j!"\e(B
 \e$BB>$NN.57$G@Z$C$?$j$7$F$b!"%a!<%k5-;v$O$^$@%7%9%F%`$KB8:_$7$F$$$^$9!#7+$j\e(B
 \e$BJV$7$^$9\e(B: gnus \e$B$O$"$J$?$N8E$$!"4{FI%a!<%k$r>C5n$7$^$;$s!#$b$A$m$s!"$"$J\e(B
@@ -10685,14 +11456,14 @@ Gnus \e$B$KK>$^$7$/$J$$%a!<%k$r:o=|$5$;$k$?$a$K$O!"5-;v$r\e(B @dfn{\e$B4|8B@Z$l>C5n
 \e$B2DG=\e(B} (expirable) \e$B$H$7$F0u$rIU$1$J$1$l$P$J$j$^$;$s!#$7$+$7$J$,$i!"$3$l$O\e(B
 \e$B5-;v$,B(:B$K>C$(5n$k$H$$$&;v$G$O$"$j$^$;$s!#0lHLE*$K!"%a!<%k5-;v$O<!$N$h\e(B
 \e$B$&$J>l9g$K%7%9%F%`$K$h$C$F:o=|$5$l$^$9\e(B 1) \e$B4|8B@Z$l>C5n2DG=$N0u$rIU$1$i$l\e(B
-\e$B$k\e(B 2) 1\e$B=54V0J>e7P$C$?5-;v$G$"$k!#\e(B \e$B$b$75-;v$r4|8B@Z$l>C5n2DG=$K$7$J$1$l$P!"\e(B
+\e$B$k\e(B 2) \e$B0l=54V0J>e7P$C$?5-;v$G$"$k!#$b$75-;v$r4|8B@Z$l>C5n2DG=$K$7$J$1$l$P!"\e(B
 \e$B$=$l$OCO9v$,E`$j$D$/$^$G%7%9%F%`$K;D$j$D$E$1$^$9!#$3$l$O$b$&0lEY6/D4IU$-\e(B
-\e$B$G7+$jJV$5$l$k$KB-$k$b$N$G$9\e(B: ``\e$B$b$7\e(B'' \e$B$"$J$?$,5-;v$r\e(B ``\e$B4|8B@Z$l>C5n2DG=\e(B''
-\e$B$G$"$k$H\e(B ``\e$B$7$J$$\e(B'' \e$B$J$i!"\e(Bgnus \e$B$O\e(B ``\e$B7h$7$F\e(B'' \e$B$=$l$i$N\e(B ``\e$B5-;v\e(B'' \e$B$r>C5n$7\e(B
-\e$B$^$;$s!#\e(B
+\e$B$G7+$jJV$5$l$k$KB-$k$b$N$G$9\e(B: ``\e$B$b$7\e(B'' \e$B$"$J$?$,5-;v\e(B
+\e$B$r\e(B ``\e$B4|8B@Z$l>C5n2DG=\e(B'' \e$B$G$"$k$H\e(B ``\e$B$7$J$$\e(B'' \e$B$J$i!"\e(Bgnus \e$B$O\e(B ``\e$B7h$7$F\e(B'' \e$B$=\e(B
+\e$B$l$i$N\e(B ``\e$B5-;v\e(B'' \e$B$r>C5n$7$^$;$s!#\e(B
 
 @vindex gnus-auto-expirable-newsgroups
-\e$B<j$G5-;v$K4|8B@Z$l>C5n2DG=$N0u$rIU$1$J$1$l$P$J$i$J$$$o$G$G$O$"$j$^$;$s!#\e(B
+\e$B<j$G5-;v$K4|8B@Z$l>C5n2DG=$N0u$rIU$1$J$1$l$P$J$i$J$$$o$1$G$O$"$j$^$;$s!#\e(B
 \e$B@55,I=8=\e(B @code{gnus-auto-expirable-newsgroups} \e$B$K9gCW$9$k%0%k!<%W$OA4$F\e(B
 \e$B$N4{FI5-;v$K<+F0E*$K4|8B@Z$l>C5n2DG=$N0u$,IU$1$i$l$^$9!#A4$F$N4|8B@Z$l>C\e(B
 \e$B5n2DG=$N0u$NIU$$$?5-;v$O35N,%P%C%U%!$N:G=i$N7e$K\e(B @samp{E} \e$B$,I=<($5$l$^$9!#\e(B
@@ -10733,12 +11504,12 @@ Gnus \e$B$KK>$^$7$/$J$$%a!<%k$r:o=|$5$;$k$?$a$K$O!"5-;v$r\e(B @dfn{\e$B4|8B@Z$l>C5n
 \e$BJQ?t\e(B @code{nnmail-expiry-wait} \e$B$O4|8B@Z$l>C5n2DG=5-;v$,$I$l$/$i$$$N4|4V\e(B
 \e$B@8B8$7$F$$$k$+$N%G%#%U%)%k%H$N;~4V@_Dj$rDs6!$7$^$9!#\e(BGnus \e$B$O%a%C%;!<%8$,\e(B
 \e$BAw$i$l$?$H$-$G$O$J$/!"$=$l$,\e(B @emph{\e$BE~Ce\e(B} \e$B$7$F$+$i$NF|$r7W;;$7$^$9!#%G%#\e(B
-\e$B%U%)%k%H$O\e(B7\e$BF|4V$G$9!#\e(B
+\e$B%U%)%k%H$O\e(B 7 \e$BF|4V$G$9!#\e(B
 
 Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
-\e$B$9$k$+$r@.8y$K@_Dj$9$k4X?t$bDs6!$7$F$$$^$9!#%0%k!<%W\e(B @samp{mail.private}
-\e$B$O4|8B$r\e(B1\e$B%v7n$K!"%0%k!<%W\e(B @samp{mail.junk} \e$B$G$O4|8B$r\e(B1\e$BF|$K!"$=$NB>$N$b$N\e(B
-\e$B$K$O4|8B$r\e(B6\e$BF|4V$K$9$k$K$O\e(B:
+\e$B$9$k$+$r@.8y$K@_Dj$9$k4X?t$bDs6!$7$F$$$^$9!#%0%k!<\e(B
+\e$B%W\e(B @samp{mail.private} \e$B$O4|8B$r\e(B 1\e$B%v7n$K!"%0%k!<%W\e(B @samp{mail.junk} \e$B$G$O\e(B
+\e$B4|8B$r\e(B 1 \e$BF|$K!"$=$NB>$N$b$N$K$O4|8B$r\e(B 6 \e$BF|4V$K$9$k$K$O\e(B:
 
 @vindex nnmail-expiry-wait-function
 @lisp
@@ -10757,12 +11528,30 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 \e$B$3$N4X?t$KM?$($i$l$k%0%k!<%WL>$O\e(B ``\e$BAu>~L5$7\e(B'' \e$B$N%0%k!<%WL>$G$9\e(B---
 @samp{nnml:} \e$B$d$=$NB>$N;w$?$h$&$J$b$N$OIU$-$^$;$s!#\e(B
 
-\e$BJQ?t\e(B @code{nnmail-expiry-wait} \e$B$H4X?t\e(B @code{nnmail-expiry-wait-function}
-\e$B$O?t;z\e(B (\e$B@0?t$G$"$kI,MW$O$"$j$^$;$s\e(B) \e$B$+%7%s%\%k\e(B @code{immediate} \e$B$+\e(B
-@code{never} \e$B$N$I$A$i$+$G$"$k;v$,$G$-$^$9!#\e(B
+\e$BJQ?t\e(B @code{nnmail-expiry-wait} \e$B$H4X\e(B
+\e$B?t\e(B @code{nnmail-expiry-wait-function} \e$B$O?t;z\e(B (\e$B@0?t$G$"$kI,MW$O$"$j$^$;\e(B
+\e$B$s\e(B) \e$B$+%7%s%\%k\e(B @code{immediate} \e$B$+\e(B @code{never} \e$B$N$I$A$i$+$G$"$k;v$,$G$-\e(B
+\e$B$^$9!#\e(B
 
-\e$B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<%?\e(B
-@code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Group Parameters})\e$B!#\e(B
+\e$B4|8B@Z$l4|4V$rA*BrE*$KJQ99$9$k$?$a$K%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B @code{expiry-wait} \e$B$r;H$&;v$b$G$-$^$9\e(B (@pxref{Group Parameters})\e$B!#\e(B
+
+@vindex nnmail-expiry-target
+\e$B5-;v$N4|8B@Z$l>C5n$NIaDL$NF0:n$O$=$l$i$r>C5n$9$k$3$H$G$9!#$7$+$7!">l9g$K\e(B
+\e$B$h$C$F$O$=$l$i$r>C5n$9$k$h$j$bJL$N%0%k!<%W$K0\F0$7$?J}$,M-0U5A$+$b$7$l$^\e(B
+\e$B$;$s!#JQ?t\e(B @code{nnmail-expiry-target} (\e$B$H%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B @code{expiry-target}) \e$B$O$3$l$r@)8f$7$^$9!#$3$NJQ?t$NCM$O$9$Y$F$N%0%k!<\e(B
+\e$B%W$KBP$9$k%G%#%U%)%k%H$K$J$j$^$9$,!"FCDj$N%0%k!<%W$4$H$K%0%k!<%W%Q%i%a!<\e(B
+\e$B%?$r;H$C$F;XDj$9$l$P>e=q$-$9$k$3$H$,$G$-$^$9!#%G%#%U%)%k%H$NCM\e(B
+\e$B$O\e(B @code{delete} \e$B$G$9$,!"J8;zNs\e(B (\e$B5-;v$r0\F0$9$k@h$N%0%k!<%WL>\e(B) \e$B$^$?$O0\\e(B
+\e$BF0@h$N%0%k!<%WL>$+\e(B @code{delete} \e$B$rJV$94X?t\e(B (\e$B5-;v$KHO0O$r69$a$?%P%C%U%!\e(B
+\e$B$G!"$=$N5-;v$,B8:_$7$F$$$k%0%k!<%WL>$,0z?t$H$7$FM?$($i$l$^$9\e(B) \e$B$K$9$k$3$H\e(B
+\e$B$,$G$-$^$9!#\e(B
+
+\e$B%0%k!<%WL>$r;XDj$9$k>l9g$NNc\e(B:
+@lisp
+(setq nnmail-expiry-target "nnml:expired")
+@end lisp
 
 @vindex nnmail-keep-last-article
 @code{nnmail-keep-last-article} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O%a!<%k%K%e!<\e(B
@@ -10779,9 +11568,9 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 \e$B$^$9!#$3$l$O!"Ev$N%0%k!<%W$N\e(B @emph{\e$BA4$F\e(B} \e$B$N8E$$%a!<%k5-;v$O>/$78e$G:o=|\e(B
 \e$B$5$l$k$H$$$&;v$G$9!#Hs>o$KCm0U$7$F;H$C$F!"$"$J$?$,;HMQ$7$?@55,I=8=$,4V0c$C\e(B
 \e$B$?%0%k!<%W$K9gCW$7$F!"$"$J$?$NA4$F$N=EMW$J%a!<%k$,>C$($F$7$^$C$?$H8@$C$F!"\e(B
-\e$B;d$N$H$3$m$K5c$-IU$$$FMh$J$$$G$/$@$5$$!#\e(B@emph{\e$BCK\e(B}\e$B$K$J$j$J$5$$!*\e(B \e$B$b$7$/$O!"\e(B
-@emph{\e$B=w\e(B} \e$B$K$J$j$J$5$$!*\e(B \e$B$"$J$?$,5$;}$A$h$$$H46$8$kA4$F$N$b$N$H!*\e(B \e$B$G$9$+\e(B
-\e$B$i$=$3$K!*\e(B
+\e$B;d$N$H$3$m$K5c$-IU$$$FMh$J$$$G$/$@$5$$!#\e(B@emph{\e$BCK\e(B}\e$B$K$J$j$J$5$$\e(B! \e$B$b$7$/$O!"\e(B
+@emph{\e$B=w\e(B} \e$B$K$J$j$J$5$$\e(B! \e$B$"$J$?$,5$;}$A$h$$$H46$8$kA4$F$N$b$N$H\e(B! \e$B$G$9$+$i\e(B
+\e$B$=$3$K\e(B!
 
 \e$B$?$$$F$$$N?M$O$[$H$s$I$N%a!<%k%0%k!<%W$r\e(B total-expirable (\e$BA4BN4|8B@Z$l>C\e(B
 \e$B5n2DG=\e(B) \e$B$K$7$^$9$,!#\e(B
@@ -10798,7 +11587,7 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 @cindex incoming mail treatment
 
 \e$B%a%$%i!<\e(B (mailer) \e$B$d%j%9%H%5!<%P!<\e(B (list server) \e$B$OK\Ev$KK\Ev$KGO</$2$?\e(B
-\e$B;v$r$9$k$3$H$G0-L>9b$$$G$9!#\e(B ``\e$B$o$!!"\e(BRFC822 \e$B$O2f!9$N%5!<%P!<$rDL$C$F$$$/\e(B
+\e$B;v$r$9$k$3$H$G0-L>9b$$$G$9!#\e(B``\e$B$o$!!"\e(BRFC822 \e$B$O2f!9$N%5!<%P!<$rDL$C$F$$$/\e(B
 \e$B%a%C%;!<%8$NA4$F$N9T$N:G8e$K\e(B @code{wE aRe ElIte!!!!!1!!} \e$B$r2C$($k;v$rL@\e(B
 \e$B<(E*$K6X;_$O$7$F$$$J$$$>!#$5$!!"$d$C$F$_$h$&\e(B!!!!1'' \e$B$($'!"$=$N$H$*$j$G$9\e(B
 \e$B$,!"\e(BRFC822 \e$B$OG=NO$NDc$$?M$K$h$C$FFI$^$l$k$h$&$K$O=q$+$l$F$$$^$;$s!#L@Gr\e(B
@@ -10810,7 +11599,7 @@ Gnus \e$B$O5-;v$,$I$N%0%k!<%W$KB0$7$F$$$k$+$K4p$E$$$F!"$=$l$,$I$N$/$i$$@8B8\e(B
 
 Gnus \e$B$O5-;v$rI=<($9$k$H$-$K$=$l$r@vBu$9$k$?$a$K2aEY$N4X?t$rDs6!$7$F$$$^\e(B
 \e$B$9$,!"%a!<%k$r%G%#%9%/$KJ]B8$9$kA0$KA*JL$r$9$k$3$H$,$G$-$?J}$,NI$$$G$7$g\e(B
-\e$B$&!#$=$NL\E*$N$?$a$K!"\e(B3\e$B$D$N%U%C%/$H$=$N%U%C%/$KF~$l$k;v$N$G$-$k?'!9$J4X\e(B
+\e$B$&!#$=$NL\E*$N$?$a$K!";0$D$N%U%C%/$H$=$N%U%C%/$KF~$l$k;v$N$G$-$k?'!9$J4X\e(B
 \e$B?t$,$"$j$^$9!#\e(B
 
 @table @code
@@ -10846,6 +11635,7 @@ Gnus \e$B$O5-;v$rI=<($9$k$H$-$K$=$l$r@vBu$9$k$?$a$K2aEY$N4X?t$rDs6!$7$F$$$^\e(B
 \e$B@P4o;~Be$N%a!<%k%X%C%@!<$r;H$C$F$$$k?M$K$ONI$$;v$@$H;W$$$^$9!#$3$N4X?t$O\e(B
 \e$B@55,I=8=\e(B @code{nnmail-list-identifiers} \e$B$K9gCW$9$kJ8;zNs$r<h$j=|$-$^$9!#\e(B
 \e$B$=$l$O@55,I=8=$N%j%9%H$G$"$k;v$b$G$-$^$9!#\e(B
+@code{nnmail-list-identifiers} \e$B$K\e(B @code{\\(..\\)} \e$B$r4^$a$F$O$$$1$^$;$s!#\e(B
 
 \e$BNc$($P!"\e(B@samp{(idm)} \e$B$H\e(B @samp{nagnagnag} \e$BF10l<1JL;R$r<h$j=|$-$?$$$N$J$i\e(B:
 
@@ -10865,8 +11655,8 @@ Gnus \e$B$O5-;v$rI=<($9$k$H$-$K$=$l$r@vBu$9$k$?$a$K2aEY$N4X?t$rDs6!$7$F$$$^\e(B
 @findex nnmail-fix-eudra-headers
 @cindex Eudora
 Eudora \e$B$O2u$l$?\e(B @code{References} \e$B%X%C%@!<$r:n@.$7$^$9$,!"\e(B
-@code{In-Reply-To} \e$B%X%C%@!<$K$O$A$c$s$H$7$?$b$N$rF~$l$^$9!#$3$N4X?t$O\e(B
-@code{References} \e$B%X%C%@!<$r<h$j=|$-$^$9!#\e(B
+@code{In-Reply-To} \e$B%X%C%@!<$K$O$A$c$s$H$7$?$b$N$rF~$l$^$9!#$3$N4X?t\e(B
+\e$B$O\e(B @code{References} \e$B%X%C%@!<$r<h$j=|$-$^$9!#\e(B
 
 @end table
 
@@ -10883,7 +11673,6 @@ Quoted Readable \e$BId9f2=$rI|9f2=$7$^$9!#\e(B
 @end table
 @end table
 
-
 @node Duplicates
 @subsection \e$B=EJ#\e(B
 
@@ -10891,23 +11680,24 @@ Quoted Readable \e$BId9f2=$rI|9f2=$7$^$9!#\e(B
 @vindex nnmail-message-id-cache-length
 @vindex nnmail-message-id-cache-file
 @cindex duplicate mails
-\e$B$$$/$D$+$N%a!<%j%s%0%j%9%H$N%a%s%P!<$J$i!";~!9F1$8%a!<%k$r\e(B2\e$B$D<u$1<h$k;v\e(B
-\e$B$,$"$j$^$9!#$3$l$O$H$F$b$&$k$5$/46$8$k$3$H$b$"$j$^$9$N$G!"\e(B@code{nnmail}
-\e$B$O$=$l$,H/8+$9$k$+$b$7$l$J$$=EJ#$rD4$Y$F07$$$^$9!#$3$l$r$9$k$?$a$K!"8E$$\e(B
-@code{Message-ID} \e$B$rJ]B8$7$^$9\e(B---@code{nnmail-messagge-id-cache-file} \e$B$K!#\e(B
-\e$B$3$l$O%G%#%U%)%k%H$G$O\e(B @file{~/.nnmail-cache} \e$B$G$9!#$=$l$KJ]B8$5$l$k:GBg\e(B
-\e$B?t$N\e(B @code{Message-ID} \e$B$OJQ?t\e(B @code{nnmail-message-id-cache-length} \e$B$K@)\e(B
-\e$B8f$5$l!"$=$l$O%G%#%U%)%k%H$G\e(B1000\e$B$G$9!#\e(B (\e$B$G$9$+$i!"\e(B1000 @code{Message-ID}
-\e$B$,N/$a$i$l$^$9!#\e(B) \e$B$3$l$,62$m$7$$$H;W$C$?$J$i!"\e(B
+\e$B$$$/$D$+$N%a!<%j%s%0%j%9%H$N%a%s%P!<$J$i!";~!9F1$8%a!<%k$rFs$D<u$1<h$k;v\e(B
+\e$B$,$"$j$^$9!#$3$l$O$H$F$b$&$k$5$/46$8$k$3$H$b$"$j$^$9$N$G!"\e(B
+@code{nnmail} \e$B$O$=$l$,H/8+$9$k$+$b$7$l$J$$=EJ#$rD4$Y$F07$$$^$9!#$3$l$r$9\e(B
+\e$B$k$?$a$K!"8E$$\e(B @code{Message-ID} \e$B$rJ]B8$7$^\e(B
+\e$B$9\e(B---@code{nnmail-messagge-id-cache-file} \e$B$K!#$3$l$O%G%#%U%)%k%H$G\e(B
+\e$B$O\e(B @file{~/.nnmail-cache} \e$B$G$9!#$=$l$KJ]B8$5$l$k:GBg?t\e(B
+\e$B$N\e(B @code{Message-ID} \e$B$OJQ?t\e(B @code{nnmail-message-id-cache-length} \e$B$K@)8f\e(B
+\e$B$5$l!"$=$l$O%G%#%U%)%k%H$G\e(B 1000 \e$B$G$9!#\e(B(\e$B$G$9$+$i!"\e(B
+1000 @code{Message-ID} \e$B$,N/$a$i$l$^$9!#\e(B) \e$B$3$l$,62$m$7$$$H;W$C$?$J$i!"\e(B
 @code{nnmail-treat-duplicates} \e$B$r\e(B @code{warn} (\e$B%G%#%U%)%k%H$G$O$=$N$h$&\e(B
 \e$B$K$J$C$F$$$^$9$,\e(B) \e$B$K@_Dj$9$k;v$,$G$-!"$=$&$9$l$P!"\e(B@code{nnmail} \e$B$O=EJ#%a!<\e(B
 \e$B%k$r>C5n$7$^$;$s!#$=$NBe$o$j$K!"%a!<%k$N@hF,$K$3$l$O0c$C$?%a%C%;!<%8$N=E\e(B
 \e$BJ#$G$"$k$H$$$&7Y9p$rA^F~$7$^$9!#\e(B
 
-\e$B$3$NJQ?t$O4X?t$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"4X?t$O\e(B @code{Message-ID}
-\e$B$r0z?t$H$7$F!"Ev$N%a%C%;!<%8$KHO0O$r69$a$i$l$?%P%C%U%!$+$i8F$P$l$^$9!#$3\e(B
-\e$B$N4X?t$O\e(B @code{nil}\e$B!"\e(B@code{warn}\e$B!"\e(B@code{delete} \e$B$N$I$l$+$rJV$5$J$1$l$P$J\e(B
-\e$B$j$^$;$s!#\e(B
+\e$B$3$NJQ?t$O4X?t$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"4X?t\e(B
+\e$B$O\e(B @code{Message-ID} \e$B$r0z?t$H$7$F!"Ev$N%a%C%;!<%8$KHO0O$r69$a$i$l$?%P%C\e(B
+\e$B%U%!$+$i8F$P$l$^$9!#$3$N4X?t$O\e(B @code{nil}, @code{warn}, @code{delete} \e$B$N\e(B
+\e$B$I$l$+$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B
 
 \e$BJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k;v$K$h$C$F!"$3$N5!G=$r40A4$K;H$o$J$$$h$&$K$9\e(B
 \e$B$k;v$,$G$-$^$9!#\e(B
@@ -10938,8 +11728,7 @@ Quoted Readable \e$BId9f2=$rI|9f2=$7$^$9!#\e(B
 \e$B$F$$$F!"\e(B@code{nnmail-treat-duplicates} \e$B$,\e(B @code{delete} \e$B$K@_Dj$7$F$"$k$H!"\e(B
 \e$B$"$J$?$NCN$C$F$$$k!"$=$N?M$,4{$K<u$1<h$C$?%a!<%k$N\e(B @code{Message-ID} \e$B$r\e(B
 \e$B;H$C$F!"9M$($k8B$j$?$/$5$s$NIn?+$rAw$k;v$,$G$-$^$9!#$=$N3Z$7$5$r9M$($F$_\e(B
-\e$B$F$/$@$5$$!*\e(B \e$B$=$N?M$O$=$l$i$r7h$7$F$_$k;v$O$"$j$^$;$s!*\e(B \e$B$o$)!*\e(B
-
+\e$B$F$/$@$5$$\e(B! \e$B$=$N?M$O$=$l$i$r7h$7$F$_$k;v$O$"$j$^$;$s\e(B! \e$B$o$)\e(B!
 
 @node Not Reading Mail
 @subsection \e$B%a!<%k$rFI$`$N$G$O$J$$\e(B
@@ -10957,17 +11746,16 @@ Quoted Readable \e$BId9f2=$rI|9f2=$7$^$9!#\e(B
 @vindex nnml-get-new-mail
 @vindex nnmh-get-new-mail
 @vindex nnfolder-get-new-mail
-\e$BNc$($P!"\e(B@code{nnml} \e$B$G%a!<%k$rFI$`;v$KHs>o$KK~B-$7$F$$$F!"8E$$\e(B
-@sc{rmail} \e$B%U%!%$%k$,\e(B @code{nnbabyl} \e$B$G1#$5$l$F$$$k$N$r$5$C$H8+$?$$$@$1\e(B
-\e$B$J$i!"$3$l$OM>J,$G$7$g$&!#$9$Y$F$N%P%C%/%(%s%I$O\e(B \e$B%P%C%/%(%s%I\e(B-
+\e$BNc$($P!"\e(B@code{nnml} \e$B$G%a!<%k$rFI$`;v$KHs>o$KK~B-$7$F$$$F!"8E\e(B
+\e$B$$\e(B @sc{rmail} \e$B%U%!%$%k$,\e(B @code{nnbabyl} \e$B$G1#$5$l$F$$$k$N$r$5$C$H8+$?$$$@\e(B
+\e$B$1$J$i!"$3$l$OM>J,$G$7$g$&!#$9$Y$F$N%P%C%/%(%s%I$O\e(B \e$B%P%C%/%(%s%I\e(B-
 @code{get-new-mail} \e$B$H$$$&JQ?t$r;}$C$F$$$^$9!#$b$7\e(B @code{nnbabyl} \e$B$N%a!<\e(B
-\e$B%kFI$_9~$_$r;HMQIT2D$K$7$?$$$N$G$"$l$P!"%0%k!<%W$N;v<B>e$N%5!<%P!<$r\e(B
-@code{nnbabyl-get-new-mail} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$h$&$KJT=8$7$^$9!#\e(B
+\e$B%kFI$_9~$_$r;HMQIT2D$K$7$?$$$N$G$"$l$P!"%0%k!<%W$N;v<B>e$N%5!<%P!<\e(B
+\e$B$r\e(B @code{nnbabyl-get-new-mail} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$h$&$KJT=8$7$^$9!#\e(B
 
 \e$BA4$F$N%a!<%k%P%C%/%(%s%I$OF~$C$F$/$k%a!<%k$rFI$_9~$`$H$-$K!"J]B8$5$l$k$Y\e(B
 \e$B$-5-;v$KHO0O$r69$a$F\e(B @code{nn}*@code{-prepare-save-mail-hook} \e$B$r8F$S$^$9!#\e(B
 
-
 @node Choosing a Mail Backend
 @subsection \e$B%a!<%k%P%C%/%(%s%I$rA*$V\e(B
 
@@ -10975,20 +11763,19 @@ Gnus \e$B$O%a!<%k%0%k!<%W$rF0:n$9$k$h$&$K$9$k$H%a!<%k%9%W!<%k$rFI$_9~$_$^$9!#\e(B
 \e$B%a!<%k%U%!%$%k$O$^$:$"$J$?$N%[!<%`%G%#%l%/%H%j!<$KJ#<L$5$l$^$9!#$=$N8e$K\e(B
 \e$B2?$,5/$3$k$+$O%a!<%k$r$I$NMM<0$GN/$a$?$$$+$K$h$C$FJQ$o$j$^$9!#\e(B
 
-\e$BI8=`$N\e(B gnus \e$B$G$O\e(B5\e$B$D$N0c$C$?%a!<%k%P%C%/%(%s%I$,$"$j!"8DJL$K$5$i$J$k%P%C\e(B
+\e$BI8=`$N\e(B gnus \e$B$G$O8^$D$N0c$C$?%a!<%k%P%C%/%(%s%I$,$"$j!"8DJL$K$5$i$J$k%P%C\e(B
 \e$B%/%(%s%I$r;HMQ2DG=$G$9!#$[$H$s$I$N?M$,;H$&%a!<%k%P%C%/%(%s%I$O\e(B (\e$B$H$$$&$N\e(B
 \e$B$O:GB.$G=@Fp$@$+$i\e(B) @code{nnml} \e$B$G$9\e(B (@pxref{Mail Spool})\e$B!#\e(B
 
 @menu
-* Unix Mail Box::               (\e$B$H$F$b\e(B) \e$BI8=`E*$J\e(B Un*x mbox \e$B$r;H$&!#\e(B
-* Rmail Babyl::                 Emacs \e$B$N%W%m%0%i%`$O\e(B rmail \e$B$N\e(B babyl format \e$B$r;H$&!#\e(B
-* Mail Spool::                  \e$B$"$J$?$N%a!<%k$r;dE*$J%9%W!<%k$KN/$a$k!)\e(B
-* MH Spool::                    mhspool \e$B$N$h$&$J%P%C%/%(%s%I!#\e(B
-* Mail Folders::                \e$B$=$l$>$l$N%0%k!<%W$KBP$7$F0l$D$N%U%!%$%k$r;}$D!#\e(B
-* Comparing Mail Backends::     \e$BF@<:$N?<$$F6;!!#\e(B
+* Unix Mail Box::           (\e$B$H$F$b\e(B) \e$BI8=`E*$J\e(B Un*x mbox \e$B$r;H$&\e(B
+* Rmail Babyl::             Emacs \e$B$N%W%m%0%i%`$O\e(B rmail \e$B$N\e(B babyl format \e$B$r;H$&\e(B
+* Mail Spool::              \e$B$"$J$?$N%a!<%k$r;dE*$J%9%W!<%k$KN/$a$k\e(B?
+* MH Spool::                mhspool \e$B$N$h$&$J%P%C%/%(%s%I\e(B
+* Mail Folders::            \e$B$=$l$>$l$N%0%k!<%W$KBP$7$F0l$D$N%U%!%$%k$r;}$D\e(B
+* Comparing Mail Backends:: \e$BF@<:$N?<$$F6;!\e(B
 @end menu
 
-
 @node Unix Mail Box
 @subsubsection Unix \e$B%a!<%k%\%C%/%9\e(B
 @cindex nnmbox
@@ -11017,7 +11804,6 @@ Gnus \e$B$O%a!<%k%0%k!<%W$rF0:n$9$k$h$&$K$9$k$H%a!<%k%9%W!<%k$rFI$_9~$_$^$9!#\e(B
 \e$B%W$KJ,3d$7$^$9!#\e(B
 @end table
 
-
 @node Rmail Babyl
 @subsubsection Rmail Babyl
 @cindex nnbabyl
@@ -11025,9 +11811,9 @@ Gnus \e$B$O%a!<%k%0%k!<%W$rF0:n$9$k$h$&$K$9$k$H%a!<%k%9%W!<%k$rFI$_9~$_$^$9!#\e(B
 
 @vindex nnbabyl-active-file
 @vindex nnbabyl-mbox-file
-@dfn{nnbabyl} \e$B%P%C%/%(%s%I$O%a!<%k$rC_B"$9$k$?$a$K\e(B babyl \e$B%a!<%k%\%C%/%9\e(B
-(\e$BJLL>\e(B @dfn{rmail mbox}) \e$B$r;H$$$^$9!#\e(B@code{nnbabyl} \e$B$O$=$l$>$l$N5-;v$K$=\e(B
-\e$B$l$,$I$N%0%k!<%W$KB0$7$F$$$k$+$r<($9DI2C$N%X%C%@!<$r2C$($^$9!#\e(B
+@dfn{nnbabyl} \e$B%P%C%/%(%s%I$O%a!<%k$rC_B"$9$k$?$a$K\e(B babyl \e$B%a!<%k%\%C%/\e(B
+\e$B%9\e(B (\e$BJLL>\e(B @dfn{rmail mbox}) \e$B$r;H$$$^$9!#\e(B@code{nnbabyl} \e$B$O$=$l$>$l$N5-;v$K\e(B
+\e$B$=$l$,$I$N%0%k!<%W$KB0$7$F$$$k$+$r<($9DI2C$N%X%C%@!<$r2C$($^$9!#\e(B
 
 \e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
 
@@ -11045,7 +11831,6 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#\e(B
 @code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnbabyl} \e$B$OF~$C$F$/$k%a!<%k$rFI$_9~$_$^$9!#\e(B
 @end table
 
-
 @node Mail Spool
 @subsubsection \e$B%a!<%k%9%W!<%k\e(B
 @cindex nnml
@@ -11056,9 +11841,9 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#\e(B
 
 @vindex nnml-directory
 \e$B$b$7$3$N%P%C%/%(%s%I$r;H$&$H!"\e(Bgnus \e$B$OF~$C$F$/$k%a!<%k$r!"$=$l$>$l$N%a!<\e(B
-\e$B%k$r\e(B1\e$B%U%!%$%k$H$7$F%U%!%$%k$KJ,3d$7!"5-;v$rJQ?t\e(B @code{nnml-directory} \e$B$G\e(B
-\e$B;XDj$5$l$?%G%#%l%/%H%j!<$N2<$NBP1~$9$k%G%#%l%/%H%j!<$KF~$l$^$9!#%G%#%U%)\e(B
-\e$B%k%H$NCM$O\e(B @file{~/Mail/} \e$B$G$9!#\e(B
+\e$B%k$r\e(B 1 \e$B%U%!%$%k$H$7$F%U%!%$%k$KJ,3d$7!"5-;v$rJQ\e(B
+\e$B?t\e(B @code{nnml-directory} \e$B$G;XDj$5$l$?%G%#%l%/%H%j!<$N2<$NBP1~$9$k%G%#%l\e(B
+\e$B%/%H%j!<$KF~$l$^$9!#%G%#%U%)%k%H$NCM$O\e(B @file{~/Mail/} \e$B$G$9!#\e(B
 
 \e$BA0$b$C$F%G%#%l%/%H%j!<$r:n$C$F$*$/I,MW$O$"$j$^$;$s!#$=$l$NLLE]$O\e(B gnus \e$B$,\e(B
 \e$B8+$F$/$l$^$9!#\e(B
@@ -11066,16 +11851,16 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#\e(B
 \e$B$b$7$"$J$?$N%"%+%&%s%H$KC_@Q$G$-$k%U%!%$%k$N?t$K87L)$J@)8B$,$"$k$J$i!"$3\e(B
 \e$B$N%P%C%/%(%s%I$r;H$&$Y$-$G$O$"$j$^$;$s!#$=$l$>$l$N%a!<%k$O$=$l<+?H$N%U%!\e(B
 \e$B%$%k$rF@$^$9$N$G!"?t=54V$G$?$/$5$s$N\e(B i\e$B%N!<%I$r@jM-$9$k2DG=@-$O==J,$K$"$j\e(B
-\e$B$^$9!#JL$K$3$l$,LdBj$G$J$/!"?F@Z$J%7%9%F%`4IM}<T$,!"5$$,68$C$?$h$&$K\e(B
-``\e$BC/$,;d$N\e(B i\e$B%N!<%I$r?)$$$D$V$7$F$$$k$s$@!)\e(B \e$BC/$@!)\e(B \e$BC/!*!)\e(B \e$B$H6+$S$J$,$iJb\e(B
+\e$B$^$9!#JL$K$3$l$,LdBj$G$J$/!"?F@Z$J%7%9%F%`4IM}<T$,!"5$$,68$C$?$h$&\e(B
+\e$B$K\e(B ``\e$BC/$,;d$N\e(B i\e$B%N!<%I$r?)$$$D$V$7$F$$$k$s$@\e(B? \e$BC/$@\e(B? \e$BC/\e(B!?'' \e$B$H6+$S$J$,$iJb\e(B
 \e$B$-2s$k;v$,LdBj$G$J$$$J$i!"$3$l$,$*$=$i$/;H$&;v$N$G$-$k0lHVB.$$MM<0$G$"$k\e(B
-\e$B$H$$$&$3$H$OCN$C$F$*$/$Y$-$G$7$g$&!#?7$7$$%a!<%k$rFI$`$?$a$@$1$KBg$-$J\e(B
-mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
+\e$B$H$$$&$3$H$OCN$C$F$*$/$Y$-$G$7$g$&!#?7$7$$%a!<%k$rFI$`$?$a$@$1$KBg$-\e(B
+\e$B$J\e(B mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 
 @code{nnml} \e$B$O5-;vJ,3d$K4X$7$F$O$*$=$i$/0lHVCY$$%P%C%/%(%s%I$G$7$g$&!#$=\e(B
-\e$B$l$OB?$/$N%U%!%$%k$r:n$i$J$1$l$P$J$i$:!"$=$l$OF~$C$F$/$k%a!<%k$N$?$a$N\e(B
-@sc{nov} \e$B%G!<%?%Y!<%9$b:n@.$7$J$1$l$P$J$j$^$;$s!#$3$l$N$?$a$K!"%a!<%k$r\e(B
-\e$BFI$`;v$K4X$7$F$O:GB.$N%P%C%/%(%s%I$K$J$j$^$9!#\e(B
+\e$B$l$OB?$/$N%U%!%$%k$r:n$i$J$1$l$P$J$i$:!"$=$l$OF~$C$F$/$k%a!<%k$N$?$a\e(B
+\e$B$N\e(B @sc{nov} \e$B%G!<%?%Y!<%9$b:n@.$7$J$1$l$P$J$j$^$;$s!#$3$l$N$?$a$K!"%a!<%k\e(B
+\e$B$rFI$`;v$K4X$7$F$O:GB.$N%P%C%/%(%s%I$K$J$j$^$9!#\e(B
 
 \e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
 
@@ -11090,7 +11875,7 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 
 @item nnml-newsgroups-file
 @vindex nnml-newgroups-file
-@code{nnml} \e$B%0%k!<%W5-=R%U%!%$%k!#\e(B @xref{Newsgroups File Format}\e$B!#\e(B
+@code{nnml} \e$B%0%k!<%W5-=R%U%!%$%k!#\e(B@xref{Newsgroups File Format}\e$B!#\e(B
 
 @item nnml-get-new-mail
 @vindex nnml-get-new-mail
@@ -11114,11 +11899,10 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 @findex nnml-generate-nov-databases
 @code{nnml} \e$B%0%k!<%W$H\e(B @sc{nov} \e$B%U%!%$%k$,40A4$KNI$$>uBV$G$J$/$J$C$F$7$^$C\e(B
 \e$B$?$J$i!"\e(B@kbd{M-x nnml-generate-nov-databases} \e$B$HBG$D;v$K$h$C$F!"40A4$K99\e(B
-\e$B?7$9$k;v$,$G$-$^$9!#$3$NL?Na$O!"$=$l$>$lA4$F$N%U%!%$%k$r8+$k;v$K$h$C$F\e(B
-@code{nnml} \e$B3,AXA4BN$r%H%m!<%k5{LV$G$5$i$$$^$9$N$G!"$=$l$,=*$o$k$^$G$K$O\e(B
-\e$B;~4V$,$+$+$k$+$b$7$l$^$;$s!#$3$N5!G=$X$N$h$jNI$$%$%s%?!<%U%'!<%9$O%5!<%P!<\e(B
-\e$B%P%C%U%!$G8+$D$+$k$G$7$g$&\e(B (@pxref{Server Commands})\e$B!#\e(B
-
+\e$B?7$9$k;v$,$G$-$^$9!#$3$NL?Na$O!"$=$l$>$lA4$F$N%U%!%$%k$r8+$k;v$K$h$C\e(B
+\e$B$F\e(B @code{nnml} \e$B3,AXA4BN$r%H%m!<%k5{LV$G$5$i$$$^$9$N$G!"$=$l$,=*$o$k$^$G\e(B
+\e$B$K$O;~4V$,$+$+$k$+$b$7$l$^$;$s!#$3$N5!G=$X$N$h$jNI$$%$%s%?!<%U%'!<%9$O%5!<\e(B
+\e$B%P!<%P%C%U%!$G8+$D$+$k$G$7$g$&\e(B (@pxref{Server Commands})\e$B!#\e(B
 
 @node MH Spool
 @subsubsection MH \e$B%9%W!<%k\e(B
@@ -11126,10 +11910,10 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 @cindex mh-e mail spool
 
 @code{nnmh} \e$B$O!"\e(B@sc{nov} \e$B%G!<%?%Y!<%9$r:n$i$J$$$3$H$H%"%/%F%#%V%U%!%$%k\e(B
-\e$B$rJ];}$7$J$$;v$r=|$$$F!"\e(B @code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H$O\e(B
-@code{nnmh} \e$B$r\e(B @code{nnml} \e$B$h$j\e(B @emph{\e$B$+$J$j\e(B} \e$BCY$$%P%C%/%(%s%I$K$7$F$$$^\e(B
-\e$B$9$,!"$=$l$O\e(B procmail \e$B$N%9%/%j%W%H$r=q$/$?$a$K$:$C$H$d$j$d$9$/$J$C$F$b$$\e(B
-\e$B$^$9!#\e(B
+\e$B$rJ];}$7$J$$;v$r=|$$$F!"\e(B@code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H\e(B
+\e$B$O\e(B @code{nnmh} \e$B$r\e(B @code{nnml} \e$B$h$j\e(B @emph{\e$B$+$J$j\e(B} \e$BCY$$%P%C%/%(%s%I$K$7$F\e(B
+\e$B$$$^$9$,!"$=$l$O\e(B procmail \e$B$N%9%/%j%W%H$r=q$/$?$a$K$:$C$H$d$j$d$9$/$J$C$F\e(B
+\e$B$b$$$^$9!#\e(B
 
 \e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
 
@@ -11147,9 +11931,9 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 @code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnmh} \e$B$O%U%)%k%@!<$K$"$k5-;v$,<B:]$K\e(B gnus
 \e$B$,9M$($F$$$k$b$N$HF1$8$G$"$k$+$rD4$Y$k$H$$$&GO</$2$?;v$r$d$j$^$9!#$=$l$O\e(B
 \e$BF|IU$HL\$KF~$kA4$F$N>pJs$rD4$Y$^$9$N$G!"$3$l$r\e(B @code{t} \e$B$K@_Dj$9$k;v$O?<\e(B
-\e$B9o$JB.EYDc2<$,5/$3$k$H$$$&;v$G$9!#$b$7\e(B @code{nnmh} \e$B5-;v$rFI$`$N$K\e(B gnus
-\e$B0J30$N$b$N$r;H$C$F$$$J$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$kI,MW$O\e(B
-\e$B$"$j$^$;$s!#\e(B
+\e$B9o$JB.EYDc2<$,5/$3$k$H$$$&;v$G$9!#$b$7\e(B @code{nnmh} \e$B5-;v$rFI$`$N\e(B
+\e$B$K\e(B gnus \e$B0J30$N$b$N$r;H$C$F$$$J$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9\e(B
+\e$B$kI,MW$O$"$j$^$;$s!#\e(B
 @end table
 
 @node Mail Folders
@@ -11177,7 +11961,7 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 
 @item nnfolder-newgroups-file
 @vindex nnfolder-newsgroups-file
-\e$B%0%k!<%W5-=R%U%!%$%k$NL>A0!#\e(B @xref{Newsgroups File Format}\e$B!#\e(B
+\e$B%0%k!<%W5-=R%U%!%$%k$NL>A0!#\e(B@xref{Newsgroups File Format}\e$B!#\e(B
 
 @item nnfolder-get-new-mail
 @vindex nnfolder-get-new-mail
@@ -11209,10 +11993,10 @@ mbox \e$B%U%!%$%k$r=E$$B-<h$j$GC5$9I,MW$O$"$j$^$;$s!#\e(B
 @findex nnfolder-generate-active-file
 @kindex M-x nnfolder-generate-active-file
 @code{nnfolder} \e$B$GFI$_$?$$$H;W$&!"$?$/$5$s$N\e(B @code{nnfolder} \e$B$N$h$&$J%U%!\e(B
-\e$B%$%k$r;}$C$F$$$k$N$G$"$l$P!"\e(B@code{nnfolder} \e$B$K\e(B @code{nnfolder-directory}
-\e$B$K$"$kA4$F$N$=$N$h$&$J%U%!%$%k$K5$IU$+$;$k$?$a$K!"L?Na\e(B @kbd{M-x
-nnfolder-generate-active-file} \e$B$r;H$&;v$,$G$-$^$9!#$3$l$OD9$$%U%!%$%kL>\e(B
-\e$B$r;H$C$F$$$k$H$-$K$N$_F0:n$7$^$9$,!#\e(B
+\e$B%$%k$r;}$C$F$$$k$N$G$"$l$P!"\e(B
+@code{nnfolder} \e$B$K\e(B @code{nnfolder-directory} \e$B$K$"$kA4$F$N$=$N$h$&$J%U%!\e(B
+\e$B%$%k$K5$IU$+$;$k$?$a$K!"L?Na\e(B @kbd{M-x nnfolder-generate-active-file} \e$B$r\e(B
+\e$B;H$&;v$,$G$-$^$9!#$3$l$OD9$$%U%!%$%kL>$r;H$C$F$$$k$H$-$K$N$_F0:n$7$^$9$,!#\e(B
 
 @node Comparing Mail Backends
 @subsubsection \e$B%a!<%k%P%C%/%(%s%I$NHf3S\e(B
@@ -11223,13 +12007,14 @@ nnfolder-generate-active-file} \e$B$r;H$&;v$,$G$-$^$9!#$3$l$OD9$$%U%!%$%kL>\e(B
 \e$B$NA*Br$O!"%a!<%k$r\e(B gnus \e$B$N$9$06a$/$K<hF@$9$k$?$a$KMW5a$5$l$k!"$H$$$&$b$N\e(B
 \e$B$G$9!#\e(B
 
-\e$BF1$835G0$,\e(B Usenet \e$B<+?H$K$bB8:_$7$^$9!#5-;v$X$N@\?($O:#F|$G$O!"IaDL$O\e(B 
-@sc{nntp} \e$B$G$J$5$l$^$9$,!"@N!9$NM+]5$J?<Lk$N;~Be$O!"3'$O5-;v$,B8:_$9$k\e(B
-\e$B%^%7%s\e(B (\e$B:#F|$G$O\e(B @sc{nntp} \e$B%5!<%P!<$H8F$V$b$N\e(B) \e$B$G%j!<%@!<$rF0$+$7!"%j!<\e(B
+\e$BF1$835G0$,\e(B Usenet \e$B<+?H$K$bB8:_$7$^$9!#5-;v$X$N@\?($O:#F|$G$O!"IaDL\e(B
+\e$B$O\e(B @sc{nntp} \e$B$G$J$5$l$^$9$,!"@N!9$NM+]5$J?<Lk$N;~Be$O!"3'$O5-;v$,B8:_$9\e(B
+\e$B$k%^%7%s\e(B (\e$B:#F|$G$O\e(B @sc{nntp} \e$B%5!<%P!<$H8F$V$b$N\e(B) \e$B$G%j!<%@!<$rF0$+$7!"%j!<\e(B
 \e$B%@!<$+$i$N@\B3$O!"D>@\5-;v$N%G%#%l%/%H%j!<%9%W!<%k$KF'$_9~$`$H$$$&$b$N\e(B
 \e$B$G$7$?!#$=$l$G$b!"$?$^$?$^%5!<%P!<\e(B (\e$B$b$7$/$O!"\e(BNFS \e$B$G%9%W!<%k$,FI$a$k$h\e(B
-\e$B$&$J>l9g\e(B) \e$B$K$$$k$h$&$J>l9g$O!"$3$l$i$NJ}K!$rA*$V$?$a$K\e(B @code{nntp} \e$B$d\e(B 
-@code{nnspool} \e$B%P%C%/%(%s%I$N$I$A$i$+$rA*$V$3$H$,$G$-$^$7$?!#\e(B
+\e$B$&$J>l9g\e(B) \e$B$K$$$k$h$&$J>l9g$O!"$3$l$i$NJ}K!$rA*$V$?$a\e(B
+\e$B$K\e(B @code{nntp} \e$B$d\e(B @code{nnspool} \e$B%P%C%/%(%s%I$N$I$A$i$+$rA*$V$3$H$,$G$-\e(B
+\e$B$^$7$?!#\e(B
 
 \e$B%a!<%k%P%C%/%(%s%I$rA*Br$9$k$3$H$N%4!<%k$O!"85$N7A<0$r07$&$N$KE,$7$?J}K!\e(B
 \e$B$H!">-Mh;HMQ$9$k$?$a$KJXMx$J7A<0$K%a!<%k$r;D$9$3$H$NN>J}$rF1;~$KI=8=$9$k\e(B
@@ -11240,7 +12025,7 @@ nnfolder-generate-active-file} \e$B$r;H$&;v$,$G$-$^$9!#$3$l$OD9$$%U%!%$%kL>\e(B
 
 UNIX \e$B%7%9%F%`$ONr;KE*$KC10l$N!"Hs>o$K0lHLE*$J!">e<j$/Dj5A$5$l$?7A<0$r;}$C\e(B
 \e$B$F$$$^$9!#A4$F$N%a%C%;!<%8$OC10l$N\e(B @dfn{\e$B%9%W!<%k%U%!%$%k\e(B} \e$B$KE~Ce$7!"@55,\e(B
-\e$BI=8=\e(B @samp{^From_} \e$B$K9gCW$9$k9T$G6h@Z$i$l$F$$$^$9\e(B \e$B!#\e(B(\e$B;d$N\e(B @samp{_} \e$B$N5-\e(B
+\e$BI=8=\e(B @samp{^From_} \e$B$K9gCW$9$k9T$G6h@Z$i$l$F$$$^$9!#\e(B(\e$B;d$N\e(B @samp{_} \e$B$N5-\e(B
 \e$B9f$N;HMQ$O%9%Z!<%9$r0UL#$9$k$?$a$G!"$3$NNc$G$O$3$l$O\e(B RFC \e$B$G;XDj$5$l$F$$\e(B
 \e$B$k\e(B @samp{From:} \e$B%X%C%@!<$GL5$$$3$H$rL@$i$+$K$9$k$?$a$G$9!#\e(B) Emacs \e$B$O!"$=\e(B
 \e$B$l$K\e(B gnus \e$B$b!"Nr;KE*$K\e(B Unix \e$B4D6-$+$i9-$^$j$^$7$?$N$G!"85$N\e(B mailbox \e$B7A<0\e(B
@@ -11259,13 +12044,14 @@ UNIX \e$B%7%9%F%`$ONr;KE*$KC10l$N!"Hs>o$K0lHLE*$J!">e<j$/Dj5A$5$l$?7A<0$r;}$C\e(B
 \e$B%k$rFI$`4D6-$O\e(B Babyl \e$B$H8F$P$l$k$b$N$G$7$?!#$=$N%7%9%F%`$KCe$$$?%a!<%k$,\e(B
 \e$B$I$N$h$&$J7A<0$K$J$C$F$$$?$+$OCN$j$^$;$s$,!"\e(BBabyl \e$B$O%a!<%k$,JQ49$5$l$k!"\e(B
 \e$B$=$lMQ$NFbIt7A<0$r;}$C$F$*$j!"<g$K!"\e(BBabyl \e$BFCM-$N%X%C%@!<$H>uBV%S%C%H$r%U%!\e(B
-\e$B%$%k$N$=$l$>$l$N%a%C%;!<%8$N@hF,$K2C$($k$3$H$r$7$F$$$^$7$?!#\e(BRMAIL \e$B$O\e(B
-Emacs \e$B$N:G=i$N%a!<%k%j!<%@!<$G!"\e(BRichard Stallman \e$B$K$h$C$F=q$+$l!"\e(B
+\e$B%$%k$N$=$l$>$l$N%a%C%;!<%8$N@hF,$K2C$($k$3$H$r$7$F$$$^$7$?!#\e(B
+RMAIL \e$B$O\e(B Emacs \e$B$N:G=i$N%a!<%k%j!<%@!<$G!"\e(BRichard Stallman \e$B$K$h$C$F=q$+$l!"\e(B
 Stallman \e$B$O$=$N\e(B TOPS/Babyl \e$B4D6-$N=P?H$G$"$k$?$a!"\e(BRMAIL \e$B$r4{$KB8:_$7$F$$\e(B
-\e$B$?%a!<%k%U%!%$%k$N0lB2$rM}2r$9$kMM$K=q$-$^$7$?!#\e(BGnus (\e$B$3$NLdBj$K4X$7$F$O\e(B
-VM \e$B$b\e(B) \e$B$3$N7A<0$r%5%]!<%H$7B3$1$F$$$^$9!#$=$l$O!"$=$N%a!<%i!<FCM-$N%X%C\e(B
-\e$B%@!<\e(B/\e$B%S%C%H$H$$$&$b$N$,$J$+$J$+<A$,NI$$$H9M$($i$l$F$$$k$+$i$G$9!#\e(BRMAIL
-\e$B<+?H$b$b$A$m$s$^$@B8:_$7$F$$$F!"$^$@\e(B Stallman \e$B$K$h$C$F0];}$5$l$F$$$^$9!#\e(B
+\e$B$?%a!<%k%U%!%$%k$N0lB2$rM}2r$9$kMM$K=q$-$^$7$?!#\e(BGnus (\e$B$3$NLdBj$K4X$7$F\e(B
+\e$B$O\e(B VM \e$B$b\e(B) \e$B$3$N7A<0$r%5%]!<%H$7B3$1$F$$$^$9!#$=$l$O!"$=$N%a!<%i!<FCM-$N%X%C\e(B
+\e$B%@!<\e(B/\e$B%S%C%H$H$$$&$b$N$,$J$+$J$+<A$,NI$$$H9M$($i$l$F$$$k$+$i$G$9!#\e(B
+RMAIL \e$B<+?H$b$b$A$m$s$^$@B8:_$7$F$$$F!"$^$@\e(B Stallman \e$B$K$h$C$F0];}$5$l$F$$\e(B
+\e$B$^$9!#\e(B
 
 \e$B>e$N7A<0$NN>J}$O%a!<%k$r%U%!%$%k%7%9%F%`$NC1FH$N%U%!%$%k$KF~$l!"%a!<%k$r\e(B
 \e$B8+$k$?$S$K!"%U%!%$%kA4BN$r2r@O$7$J$1$l$P$J$j$^$;$s!#\e(B
@@ -11275,15 +12061,15 @@ VM \e$B$b\e(B) \e$B$3$N7A<0$r%5%]!<%H$7B3$1$F$$$^$9!#$=$l$O!"$=$N%a!<%i!<FCM-$N%X%C
 @code{nnml} \e$B$O$[$H$s$I\e(B @code{nnspool} \e$B@\B3$N\e(B Usenet \e$B%7%9%F%`$rA`:n$7$F$$\e(B
 \e$B$k$h$&$J46$8$N$9$k%P%C%/%(%s%I$G$9!#\e(B(\e$B<B:]$N$H$3$m!"$9$4$/0JA0$K!"\e(B
 @code{nnml} \e$B$O\e(B @code{nnspool} \e$B$+$i;^J,$+$l$7$?$b$N$@$H;W$$$^$9!#\e(B)
-\e$B%a!<%k$O85$N%9%W!<%k%U%!%$%k$+$i<h$j=P$5$l!"$=$l$+$i8D!9$N%U%!%$%k$K\e(B 1:1
-\e$B$GJ,$1$i$l$^$9!#\e(BUsenet \e$BMM<0$N%"%/%F%#%V%U%!%$%k\e(B (INN \e$B$d\e(B CNews \e$B$K4p$E$$$?\e(B
-\e$B%K%e!<%9%7%9%F%`$G\e(B (\e$BNc$($P\e(B) @file{/var/lib/news/active} \e$B$d!"F0;l\e(B
-@samp{NNTP LIST} \e$B$GJV$5$l$k$b$N$KN`;w$7$?$b$N\e(B) \e$B$r0];}$7!":#$+$i$@$H$+$J\e(B
-\e$B$jA0$K\e(B @sc{nntp} \e$B%5!<%P!<$N$?$a$KDj5A$5$l$F$$$k!"\e(B@dfn{overview} \e$B%U%!%$%k\e(B
-\e$B$b!"%0%k!<%W$XF~$k$H$-$N8zN($N$?$a$K:n@.$7$^$9!#%a!<%kJ,3d$G$O!"$?$/$5$s\e(B
-\e$B$N%U%!%$%k$N:n@.$H!"\e(B@code{nnml} \e$B%"%/%F%#%V%U%!%$%k$N99?7!"%a%C%;!<%8Kh$N\e(B
-overview \e$B$X$NDI2C$N$?$a$KCY$/$J$j$^$9$,!";HMQ;~$K$O%"%/%F%#%V%U%!%$%k$H\e(B
-overview \e$B$G$N:w0z5!G=$K$h$j!"$H$F$D$b$J$/B.$/$J$j$^$9!#\e(B
+\e$B%a!<%k$O85$N%9%W!<%k%U%!%$%k$+$i<h$j=P$5$l!"$=$l$+$i8D!9$N%U%!%$%k\e(B
+\e$B$K\e(B 1:1 \e$B$GJ,$1$i$l$^$9!#\e(BUsenet \e$BMM<0$N%"%/%F%#%V%U%!%$%k\e(B (INN \e$B$d\e(B CNews \e$B$K\e(B
+\e$B4p$E$$$?%K%e!<%9%7%9%F%`$G\e(B (\e$BNc$($P\e(B) @file{/var/lib/news/active} \e$B$d!"F0\e(B
+\e$B;l\e(B @samp{NNTP LIST} \e$B$GJV$5$l$k$b$N$KN`;w$7$?$b$N\e(B) \e$B$r0];}$7!":#$+$i$@$H$+\e(B
+\e$B$J$jA0$K\e(B @sc{nntp} \e$B%5!<%P!<$N$?$a$KDj5A$5$l$F$$$k!"\e(B@dfn{overview} \e$B%U%!%$\e(B
+\e$B%k$b!"%0%k!<%W$XF~$k$H$-$N8zN($N$?$a$K:n@.$7$^$9!#%a!<%kJ,3d$G$O!"$?$/$5\e(B
+\e$B$s$N%U%!%$%k$N:n@.$H!"\e(B@code{nnml} \e$B%"%/%F%#%V%U%!%$%k$N99?7!"%a%C%;!<%8Kh\e(B
+\e$B$N\e(B overview \e$B$X$NDI2C$N$?$a$KCY$/$J$j$^$9$,!";HMQ;~$K$O%"%/%F%#%V%U%!%$%k\e(B
+\e$B$H\e(B overview \e$B$G$N:w0z5!G=$K$h$j!"$H$F$D$b$J$/B.$/$J$j$^$9!#\e(B
 
 @code{nnml} \e$B$O\e(B @dfn{inode} \e$B$rHs>o$K$?$/$5$s>CHq$7$^$9!#$9$J$o$A!"%U%!%$\e(B
 \e$B%k%7%9%F%`$G?7$7$$%U%!%$%k$rF~$l$k$?$a$N2DG=$J>l=j$rDj5A$9$k;q8;$r$?$/$5\e(B
@@ -11309,12 +12095,12 @@ Rand MH \e$B%a!<%k1\Mw%7%9%F%`$O\e(B UNIX \e$B%7%9%F%`$K$+$J$jD9$$4VB8:_$7$F$$$^$9!
 
 \e$B4pK\E*$K\e(B @code{nnfolder} \e$B$N8z2L$O%0%k!<%WKh$N\e(B @code{nnmbox} (\e$B>e$G@bL@$5\e(B
 \e$B$l$F$$$k:G=i$NJ}K!\e(B) \e$B$G$9!#$9$J$o$A!"\e(B@code{nnmbox} \e$B<+?H$O\e(B *\e$BA4$F\e(B* \e$B$N%a!<%k\e(B
-\e$B$r0l$D$N%U%!%$%k$KF~$l$^$9\e(B; @code{nnfolder} \e$B$O%a!<%k%0%k!<%W$=$l$>$l$,\e(B
-Unix mail box \e$B%U%!%$%k$r;}$D$h$&$K>/$7:GE,2=$r$7$^$9!#\e(B@code{nnmobx} \e$B$h$j\e(B
-\e$B$b!"$=$l$>$l$N%0%k!<%W$rJL$K2r@O$9$k$N$GB.$/!"$=$N$&$(%a!<%k$r0\F0$5$;$k\e(B
-\e$B$N$K:G>.8B$NO+NO$rMW5a$9$kC1=c$J\e(B Unix mail box \e$B7A<0$rDs6!$7$^$9!#2C$($F!"\e(B
-gnus \e$B$,$=$l$>$l$NJL$N%0%k!<%W$K$I$N$/$i$$$N%a%C%;!<%8$,$"$k$+$rD4$Y$k$?\e(B
-\e$B$a$N\e(B ``\e$B%"%/%F%#%V\e(B'' \e$B%U%!%$%k$r0];}$7$^$9!#\e(B
+\e$B$r0l$D$N%U%!%$%k$KF~$l$^$9\e(B; @code{nnfolder} \e$B$O%a!<%k%0%k!<%W$=$l$>$l\e(B
+\e$B$,\e(B Unix mail box \e$B%U%!%$%k$r;}$D$h$&$K>/$7:GE,2=$r$7$^$9!#\e(B
+@code{nnmobx} \e$B$h$j$b!"$=$l$>$l$N%0%k!<%W$rJL$K2r@O$9$k$N$GB.$/!"$=$N$&$(\e(B
+\e$B%a!<%k$r0\F0$5$;$k$N$K:G>.8B$NO+NO$rMW5a$9$kC1=c$J\e(B Unix mail box \e$B7A<0$r\e(B
+\e$BDs6!$7$^$9!#2C$($F!"\e(Bgnus \e$B$,$=$l$>$l$NJL$N%0%k!<%W$K$I$N$/$i$$$N%a%C%;!<\e(B
+\e$B%8$,$"$k$+$rD4$Y$k$?$a$N\e(B ``\e$B%"%/%F%#%V\e(B'' \e$B%U%!%$%k$r0];}$7$^$9!#\e(B
 
 \e$B$b$7$?$/$5$s$NNL$N%a%C%;!<%8$r<u$1<h$k$3$H$,M=A[$5$l$k%0%k!<%W$,$"$k$J$i!"\e(B
 @code{nnfolder} \e$B$O:GA1$NA*Br$G$O$"$j$^$;$s$,!"$=$l$J$j$NNL$N%a!<%k$7$+<u\e(B
@@ -11323,7 +12109,6 @@ gnus \e$B$,$=$l$>$l$NJL$N%0%k!<%W$K$I$N$/$i$$$N%a%C%;!<%8$,$"$k$+$rD4$Y$k$?\e(B
 
 @end table
 
-
 @node Browsing the Web
 @section Browsing the Web
 @cindex web
@@ -11331,48 +12116,49 @@ gnus \e$B$,$=$l$>$l$NJL$N%0%k!<%W$K$I$N$/$i$$$N%a%C%;!<%8$,$"$k$+$rD4$Y$k$?\e(B
 @cindex www
 @cindex http
 
-Web-based discussion forums are getting more and more popular.  On many
-subjects, the web-based forums have become the most important forums,
-eclipsing the importance of mailing lists and news groups.  The reason
-is easy to understand---they are friendly to new users; you just point
-and click, and there's the discussion.  With mailing lists, you have to
-go through a cumbersome subscription procedure, and most people don't
-even know what a news group is.
+\e$B%&%'%V$K4p$E$$$?5DO@$N>l$O$I$s$I$s9-$^$C$F$$$^$9!#B?$/$NJ,Ln$G!"%&%'%V$N\e(B
+\e$B7G<(HD$O:G$b=EMW$J>l$K$J$j!"%a!<%j%s%0%j%9%H$d%K%e!<%9%0%k!<%W$N=EMW@-$r\e(B
+\e$BfJ$i$;$F$$$^$9!#M}M3$O4JC1$G$9\e(B---\e$B?7$7$$MxMQ<T$,;H$$0W$$$+$i$G$9!#$?$@>l\e(B
+\e$B=j$r%/%j%C%/$9$k$@$1$G!"5DO@$N>l$,$"$j$^$9!#%a!<%j%s%0%j%9%H$G$O!"LLE]$J\e(B
+\e$B9XFI<jB3$-$r$7$J$1$l$P$J$i$:!"$[$H$s$I$N?M$O%K%e!<%9%0%k!<%W$,$I$3$K$"$k\e(B
+\e$B$+$9$iCN$j$^$;$s!#\e(B
 
-The problem with this scenario is that web browsers are not very good at 
-being newsreaders.  They do not keep track of what articles you've read; 
-they do not allow you to score on subjects you're interested in; they do 
-not allow off-line browsing; they require you to click around and drive
-you mad in the end.
+\e$B$3$N6Z=q$-$NLdBj$O!"%&%'%V%V%i%&%6!<$O%K%e!<%9%j!<%@!<$H$7$F$O$"$^$jNI$/\e(B
+\e$B$J$$$H$$$&$3$H$G$9!#$I$s$J5-;v$rFI$s$@$+$r5-O?$7$^$;$s!#6=L#$N$"$kI=Bj$K\e(B
+\e$B%9%3%"$rIU$1$k$3$H$,$G$-$^$;$s!#%*%U%i%$%s$GFI$`$3$H$,$G$-$^$;$s!#2?EY$b\e(B
+\e$B%/%j%C%/$9$k$3$H$rMW5a$7!":G8e$K$O$"$J$?$O7y$K$J$j$^$9!#\e(B
 
-So---if web browsers suck at reading discussion forums, why not use Gnus 
-to do it instead?
+\e$B$=$l$G\e(B---\e$B%&%'%V%V%i%&%6!<$,7G<(HD$rFI$`$N$KE,$7$F$$$J$$$N$J$i!"$I$&$7$F\e(B
+\e$BBe$o$j$K\e(B gnus \e$B$r;H$O$J$$$N$G$7$g$&\e(B?
 
-Gnus has been getting a bit of a collection of backends for providing
-interfaces to these sources.
+Gnus \e$B$O$3$l$i$N%=!<%9$X$N3&LL$rDs6!$9$k%P%C%/%(%s%I72$r>/$7Hw$($D$D$"$j\e(B
+\e$B$^$9!#\e(B
 
 @menu
-* Web Searches::          Creating groups from articles that match a string.
-* Slashdot::              Reading the Slashdot comments.
-* Ultimate::              The Ultimate Bulletin Board systems.
-* Web Archive::           Reading mailing list archived on web.
+* Web Searches::   \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k\e(B
+* Slashdot::       Slashdot \e$B$N%3%a%s%H$rFI$`\e(B
+* Ultimate::       Ultimate Bulletin Board \e$B%7%9%F%`\e(B
+* Web Archive::    \e$B%&%'%V$KJ]4I$5$l$?%a!<%j%s%0%j%9%H$rFI$`\e(B
+* Web Newspaper::  \e$B%&%'%V$KJ]4I$5$l$??7J9$rFI$`\e(B
+* Customizing w3:: Gnus \e$B$+$i\e(B Emacs/w3 \e$B$rA`:n$9$k\e(B
 @end menu
 
-The main caveat with all these web sources is that they probably won't
-work for a very long time.  Gleaning information from the @sc{html} data 
-is guesswork at best, and when the layout is altered, the Gnus backend
-will fail.  If you have reasonably new versions of these backends,
-though, you should be ok.
+\e$B$9$Y$F$N%&%'%V%=!<%9$O!"F0:n$5$;$k$?$a$K\e(B Emacs/w3 \e$B$H\e(B url \e$B%i%$%V%i%j$,I,\e(B
+\e$BMW$G$9!#\e(B
 
-One thing all these Web methods have in common is that the Web sources
-are often down, unavailable or just plain too slow to be fun.  In those
-cases, it makes a lot of sense to let the Gnus Agent (@pxref{Gnus
-Unplugged}) handle downloading articles, and then you can read them at
-leisure from your local disk.  No more World Wide Wait for you.
+\e$B$3$l$i$N%&%'%V%=!<%9$N0lHV$NLdBj$OD94|4V$OF0:n$7$J$$2DG=@-$,9b$$$3$H$G$9!#\e(B
+@sc{html} \e$B%G!<%?$+$i>pJs$r=8$a$k$N$O$;$$$<$$?dB,$G!"9=B$$,JQ2=$7$?$H$-$K\e(B
+\e$B$O!"\e(Bgnus \e$B%P%C%/%(%s%I$OF0:n$7$^$;$s!#$G$b!"$"$kDxEY?7$7$$%P!<%8%g%s$N%P%C\e(B
+\e$B%/%(%s%I$r;H$C$F$$$l$PBg>fIW$N$O$:$G$9!#\e(B
 
+\e$B$3$l$i$N%&%'%VJ}K!$K6&DL$9$k$3$H$O!"%&%'%V%=!<%9$O$7$P$7$PMn$A$F$$$?$j!"\e(B
+\e$B;HMQ2DG=$G$J$+$C$?$j!"C1=c$K3Z$7$`$K$OCY$9$.$k$3$H$,$"$k!"$H$$$&$3$H$G$9!#\e(B
+\e$B$=$&$$$&>l9g$K$O!"\e(BGnu Agent (@pxref{Gnus Unplugged}) \e$B$K5-;v$N%@%&%s%m!<\e(B
+\e$B%I$rG$$;$F!"%m!<%+%k%G%#%9%/$+$i9%$-$J$H$-$KFI$`$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$l$G!"\e(BWorld Wide Wait \e$B$H$O$*$5$i$P$G$9!#\e(B
 
 @node Web Searches
-@subsection Web Searches
+@subsection \e$B%&%'%V8!:w\e(B
 @cindex nnweb
 @cindex DejaNews
 @cindex Alta Vista
@@ -11380,198 +12166,190 @@ leisure from your local disk.  No more World Wide Wait for you.
 @cindex Usenet searches
 @cindex searching the Usenet
 
-It's, like, too neat to search the Usenet for articles that match a
-string, but it, like, totally @emph{sucks}, like, totally, to use one of
-those, like, Web browsers, and you, like, have to, rilly, like, look at
-the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
-searches without having to use a browser.
-
-The @code{nnweb} backend allows an easy interface to the mighty search
-engine.  You create an @code{nnweb} group, enter a search pattern, and
-then enter the group and read the articles like you would any normal
-group.  The @kbd{G w} command in the group buffer (@pxref{Foreign
-Groups}) will do this in an easy-to-use fashion.
-
-@code{nnweb} groups don't really lend themselves to being solid
-groups---they have a very fleeting idea of article numbers.  In fact,
-each time you enter an @code{nnweb} group (not even changing the search
-pattern), you are likely to get the articles ordered in a different
-manner.  Not even using duplicate suppression (@pxref{Duplicate
-Suppression}) will help, since @code{nnweb} doesn't even know the
-@code{Message-ID} of the articles before reading them using some search
-engines (DejaNews, for instance).  The only possible way to keep track
-of which articles you've read is by scoring on the @code{Date}
-header---mark all articles posted before the last date you read the
-group as read.
-
-If the search engine changes its output substantially, @code{nnweb}
-won't be able to parse it and will fail.  One could hardly fault the Web
-providers if they were to do this---their @emph{raison d'être} is to
-make money off of advertisements, not to provide services to the
-community.  Since @code{nnweb} washes the ads off all the articles, one
-might think that the providers might be somewhat miffed.  We'll see.
-
-You must have the @code{url} and @code{w3} package installed to be able
-to use @code{nnweb}.
-
-Virtual server variables:
+\e$B$=$l$O!"$J$s$H$$$&$+!"\e(BUsenet \e$B$+$iJ8;zNs$K%^%C%A$9$k5-;v$r8!:w$9$k$N$O$H\e(B
+\e$B$F$bAG@2$i$7$$$s$@$1$I!"$=$N!"$"$N%&%'%V%V%i%&%6!<$C$F$d$D$r;H$C$F!"$=$s\e(B
+\e$B$G$b$C$F!"@kEA$rFI$^$;$i$l$k$C$F$$$&$N$O!"$=$N!"$J$s$H$$$&$+!"$[$s$H$&\e(B
+\e$B$K\e(B @emph{\e$B!VITMM$M!W\e(B} \e$B$H$$$&$+!"$=$l$G!"\e(Bgnus \e$B$G$O%V%i%&%6!<$r;H$o$:$K!"$=\e(B
+\e$B$N!"\e(B@emph{\e$BD6$+$C$3$h$/\e(B}\e$B$=$l$,$G$-$k!"$C$F$3$H$G$9!#\e(B
+
+@code{nnweb} \e$B%P%C%/%(%s%I$O!"6/NO$J8!:w%(%s%8%s$KBP$7$F4JC1$J%$%s%?!<%U%'!<\e(B
+\e$B%9$rDs6!$7$^$9!#\e(B@code{nnweb} \e$B%0%k!<%W$r:n@.$7!"8!:w%Q%?!<%s$rF~NO$7!"$=\e(B
+\e$B$7$F$=$N%0%k!<%W$KF~$C$FB>$NIaDL$N%0%k!<%W$N$h$&$K5-;v$rFI$_$^$9!#%0%k!<\e(B
+\e$B%W%P%C%U%!\e(B (@pxref{Foreign Groups}) \e$B$N\e(B @kbd{G w} \e$BL?Na$K$h$C$F$*<j7Z$K$3\e(B
+\e$B$l$,$G$-$^$9!#\e(B
+
+@code{nnweb} \e$B%0%k!<%W$O!"8GDj%0%k!<%W$K$J$m$&$H$O$7$^$;$s\e(B --- \e$B$3$N%0%k!<\e(B
+\e$B%W$G$O5-;vHV9f$O$4$/0l;~E*$J$b$N$H$7$F07$$$^$9!#$D$^$j!"\e(B@code{nnweb} \e$B%0\e(B
+\e$B%k!<%W$KF~$k$?$S$K\e(B(\e$B$?$H$(8!:w%Q%?!<%s$rJQ99$7$F$$$J$/$H$b\e(B)\e$B!"5-;v$N=g=x$,\e(B
+\e$B0c$C$F$$$k$+$b$7$l$^$;$s!#$^$?!"=EJ#M^\e(B
+\e$B@)\e(B (@pxref{Duplicate Suppression}) \e$B$r;H$C$F$b$&$^$/F/$+$J$$$G$7$g$&!#$H\e(B
+\e$B$$$&$N$O!"\e(B@code{nnweb} \e$B$O8!:w%(%s%8%s\e(B (\e$BNc$($P\e(B DejaNews) \e$B$r;H$C$F5-;v$rFI\e(B
+\e$B$_9~$`$^$G$O!"\e(B@code{Message-ID} \e$B$rCN$k$3$H$O$G$-$J$$$+$i$G$9!#$"$J$?$,FI\e(B
+\e$B$s$@5-;v$r21$($F$*$/$?$a$NM#0l$NJ}K!$O!"\e(B@code{Date} \e$B%X%C%@!<$r$b$H$K%9%3\e(B
+\e$B%"$rIU$1$k$3$H$@$1$G$9\e(B --- \e$B$D$^$j$"$J$?$,$=$N%0%k!<%W$r:G8e$KFI$s$@F|IU\e(B
+\e$B$h$j!"A0$KEj9F$5$l$?5-;v$rA4$F4{FI$K$9$k!"$H$$$&$3$H$G$9!#\e(B
+
+\e$B$b$78!:w%(%s%8%s$N=PNO7A<0$,JQ99$5$l$k$H!"\e(B@code{nnweb} \e$B$O$=$l$r$&$^$/2r\e(B
+\e$B<a$G$-$:!"=hM}$O<:GT$9$k$G$7$g$&!#$b$7%&%'%VDs6!<TC#$,$=$s$J$3$H$r$7$?$i!"\e(B
+\e$BH`$i$r7c$7$/@U$a$k$Y$-$G$7$g$&\e(B --- \e$B$=$l$O9-9p$G6b$r2T$0$N$,H`$i\e(B
+\e$B$N\e(B @emph{\e$BB8:_M}M3\e(B} \e$B$G$"$j!"<R2q$K%5!<%S%9$rDs6!$9$k$3$H$G$O$J$$$+$i$G$9!#\e(B
+@code{nnweb} \e$B$OA4$F$N5-;v$+$i9-9p$r@v$$N.$7$F$7$^$&$N$G!"Ds6!<T$?$A$,%`\e(B
+\e$B%+$D$$$F$$$k$H;W$o$l$k$+$bCN$l$^$;$s!#$^$"8+$F$F$/$@$5$$!#\e(B
+
+@code{nnweb} \e$B$r;H$&$K$O!"\e(B@code{url} \e$B$H\e(B @code{w3} \e$B%Q%C%1!<%8$r%$%s%9%H!<\e(B
+\e$B%k$7$F$*$+$J$/$F$J$J$j$^$;$s!#\e(B
+
+\e$B0J2<$O2>A[%5!<%P!<JQ?t$G$9!#\e(B
 
 @table @code
 @item nnweb-type
 @vindex nnweb-type
-What search engine type is being used.  The currently supported types
-are @code{dejanews}, @code{dejanewsold}, @code{altavista} and
-@code{reference}.
+\e$B$I$N8!:w%(%s%8%s$r;H$C$F$$$k$+!#8=:_%5%]!<%H$5$l$F$$$k<oN`$O!"\e(B
+@code{dejanews}, @code{dejanewsold}, @code{altavista}, @code{reference} \e$B$G\e(B
+\e$B$9!#\e(B
 
 @item nnweb-search
 @vindex nnweb-search
-The search string to feed to the search engine.
+\e$B8!:w%(%s%8%s$KM?$($k8!:wJ8;zNs!#\e(B
 
 @item nnweb-max-hits
 @vindex nnweb-max-hits
-Advisory maximum number of hits per search to display.  The default is
-100.
+\e$BI=<($9$k8!:w7k2L$N:GBg?t!#=i4|CM$O\e(B 100 \e$B$G$9!#\e(B
 
 @item nnweb-type-definition
 @vindex nnweb-type-definition
-Type-to-definition alist.  This alist says what @code{nnweb} should do
-with the various search engine types.  The following elements must be
-present:
+\e$B7?!&Dj5AO"A[%j%9%H!#$3$NO"A[%j%9%H$O!"$5$^$6$^$J8!:w%(%s%8%s$N<oN`$KBP$7\e(B
+\e$B$F!"\e(B@code{nnweb} \e$B$,$I$&$9$Y$-$+$rM?$($^$9!#0J2<$K<($9MWAG$rM?$($J$/$F$O\e(B
+\e$B$J$j$^$;$s!#\e(B
 
 @table @code
 @item article
-Function to decode the article and provide something that Gnus
-understands.
+\e$B5-;v$rI|9f2=$7!"\e(Bgnus \e$B$,M}2r$G$-$k7A$GDs6!$9$k4X?t!#\e(B
 
 @item map
-Function to create an article number to message header and URL alist.
+\e$B5-;vHV9f$+$i%a%C%;!<%8%X%C%@!<$H\e(B URL \e$B$rF@$kO"A[%j%9%H$r:n@.$9$k4X?t!#\e(B
 
 @item search
-Function to send the search string to the search engine.
+\e$B8!:w%(%s%8%s$K8!:wJ8;zNs$rAw$k4X?t!#\e(B
 
 @item address
-The address the aforementioned function should send the search string
-to.
+\e$BA0=R$N4X?t$,8!:wJ8;zNs$rAw$k$Y$-%"%I%l%9!#\e(B
 
 @item id
-Format string URL to fetch an article by @code{Message-ID}.
+@code{Message-ID} \e$B$r$b$H$K5-;v$r<hF@$9$k$?$a$N\e(B URL \e$B7A<0J8;zNs!#\e(B
 @end table
 
 @end table
 
-
 @node Slashdot
 @subsection Slashdot
 @cindex Slashdot
 @cindex nnslashdot
 
-Slashdot (@file{http://slashdot.org/}) is a popular news site, with
-lively discussion following the news articles.  @code{nnslashdot} will
-let you read this forum in a convenient manner.
+Slashdot (@file{http://slashdot.org/}) \e$B$O?M5$$N$"$k%K%e!<%9%5%$%H$G!"%K%e!<\e(B
+\e$B%95-;v$N8e$K3hH/$J5DO@$,$J$5$l$F$$$^$9!#\e(B@code{nnslashdot} \e$B$G$OJXMx$JJ}K!\e(B
+\e$B$G$3$N2q5D<<$rFI$`$3$H$,$G$-$^$9!#\e(B
 
-The easiest way to read this source is to put something like the
-following in your @file{.gnus.el} file:
+\e$B$3$3$+$iFI$`$?$a$N0lHV4JC1$JJ}K!$O0J2<$N$h$&$J$b$N$r\e(B @file{.gnus.el} \e$B%U%!\e(B
+\e$B%$%k$KF~$l$k$3$H$G$9!#\e(B
 
 @lisp
 (setq gnus-secondary-select-methods
       '((nnslashdot "")))
 @end lisp
 
-This will make Gnus query the @code{nnslashdot} backend for new comments
-and groups.  The @kbd{F} command will subscribe each new news article as
-a new Gnus group, and you can read the comments by entering these
-groups.  (Note that the default subscription method is to subscribe new
-groups as zombies.  Other methods are available (@pxref{Subscription
-Methods}).
+\e$B$3$l$O\e(B gnus \e$B$K\e(B @code{nnslashdot} \e$B%P%C%/%(%s%I$K?7$7$$%3%a%s%H$H%0%k!<%W\e(B
+\e$B$r?R$M$k$h$&$K$7$^$9!#\e(B@kbd{F} \e$BL?Na$O$=$l$>$l$N?7$7$$%K%e!<%95-;v$r?7$7\e(B
+\e$B$$\e(B gnus \e$B$N%0%k!<%W$H$7$F9XFI$7!"$3$l$i$N%0%k!<%W$KF~$k$3$H$G%3%a%s%H$rFI\e(B
+\e$B$`$3$H$,$G$-$^$9!#\e(B(\e$B=i4|@_Dj$N9XFIJ}K!$G$O!"?7$7$$%0%k!<%W$r%>%s%S$H$7$F\e(B
+\e$B9XFI$9$k$3$H$KCm0U$7$F$/$@$5$$!#B>$NJ}K!$b;H$($^\e(B
+\e$B$9\e(B (@pxref{Subscription Methods})\e$B!#\e(B
+
+\e$B$b$7$"$J$?$,8E$$\e(B @code{nnslashdot} \e$B%0%k!<%W$r:o=|$7$?$$$N$J$i$P!"\e(B
+@kbd{G DEL} \e$B$,:G$b<j7Z$JF;6q$G$9\e(B (@pxref{Foreign Groups})\e$B!#\e(B
 
-When following up to @code{nnslashdot} comments (or posting new
-comments), some light @sc{html}izations will be performed.  In
-particular, text quoted with @samp{> } will be quoted with
-@code{blockquote} instead, and signatures will have @code{br} added to
-the end of each line.  Other than that, you can just write @sc{html}
-directly into the message buffer.  Note that Slashdot filters out some
-@sc{html} forms.
+@code{nnslashdot} \e$B%3%a%s%H$K%U%)%m!<%"%C%W\e(B (\e$B$^$?$O?7$7$$%3%a%s%H$NEj9F\e(B)
+\e$B$r$9$k$H$-$O!">/$7\e(B @sc{html} \e$B$KJQ49$5$l$^$9!#FC$K!"\e(B@samp{> } \e$B$G0zMQ$5$l\e(B
+\e$B$?%F%-%9%H$O$=$NBe$o$j$K\e(B @code{blockquote} \e$B$G0zMQ$5$l!"=pL>$K$O$=$l$>$l\e(B
+\e$B$N9T$N:G8e$K\e(B @code{br} \e$B$,DI2C$5$l$^$9!#$=$l0J30$O!"%a%C%;!<%8%P%C%U%!$K\e(B
+\e$BD>@\\e(B @sc{html} \e$B$r=q$/$3$H$,$G$-$^$9!#\e(BSlashdot \e$B$O$$$/$D$+\e(B @sc{html} \e$B$rA*\e(B
+\e$BJL$9$k$3$H$K5$$r$D$1$F$/$@$5$$!#\e(B
 
-The following variables can be altered to change its behavior:
+\e$B0J2<$NJQ?t$G?6$kIq$$$rJQ$($k$3$H$,$G$-$^$9\e(B:
 
 @table @code
 @item nnslashdot-threaded
-Whether @code{nnslashdot} should display threaded groups or not.  The
-default is @code{t}.  To be able to display threads, @code{nnslashdot}
-has to retrieve absolutely all comments in a group upon entry.  If a
-threaded display is not required, @code{nnslashdot} will only retrieve
-the comments that are actually wanted by the user.  Threading is nicer,
-but much, much slower than untreaded.
+@code{nnslashdot} \e$B$,%0%k!<%W$r%9%l%C%I$GI=<($9$k$+$I$&$+!#=i4|CM\e(B
+\e$B$O\e(B @code{t} \e$B$G$9!#%9%l%C%I$rI=<($G$-$k$?$a$K$O!"\e(B@code{nnslashdot} \e$B$O%0%k!<\e(B
+\e$B%W$KF~$k:]$K$=$NA4$F$N%3%a%s%H$r<hF@$9$kI,MW$,$"$j$^$9!#%9%l%C%II=<($,MW\e(B
+\e$B5a$5$l$F$$$J$$$H!"\e(B@code{nnslashdot} \e$B$OMxMQ<T$,M_$7$$%3%a%s%H$@$1$r<hF@$7\e(B
+\e$B$^$9!#%9%l%C%I$NJ}$,$-$l$$$G$9$,!"%9%l%C%IL5$7I=<($h$j!"$:$C$H$:$C$HCY$/\e(B
+\e$B$J$j$^$9!#\e(B
 
 @item nnslashdot-login-name
 @vindex nnslashdot-login-name
-The login name to use when posting.
+\e$BEj9F;~$K;H$&%m%0%$%sL>$G$9!#\e(B
 
 @item nnslashdot-password
 @vindex nnslashdot-password
-The password to use when posting.
+\e$BEj9F;~$K;H$&%Q%9%o!<%I$G$9!#\e(B
 
 @item nnslashdot-directory
 @vindex nnslashdot-directory
-Where @code{nnslashdot} will store its files.  The default value is
-@samp{~/News/slashdot/}.
+@code{nnslashdot} \e$B$,%U%!%$%k$rJ]B8$9$k>l=j$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{~/News/slashdot/} \e$B$G$9!#\e(B
 
 @item nnslashdot-active-url
 @vindex nnslashdot-active-url
-The @sc{url} format string that will be used to fetch the information on 
-news articles and comments.  The default is
-@samp{http://slashdot.org/search.pl?section=&min=%d}.
+\e$B%K%e!<%95-;v$H%3%a%s%H$r<hF@$9$k$?$a$K;H$o$l$k\e(B @sc{url} \e$B$NJ8;zNs$G$9!#=i\e(B
+\e$B4|CM$O\e(B @samp{http://slashdot.org/search.pl?section=&min=%d} \e$B$G$9!#\e(B
 
 @item nnslashdot-comments-url
 @vindex nnslashdot-comments-url
-The @sc{url} format string that will be used to fetch comments.  The
-default is
-@samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d}.
+\e$B%3%a%s%H$r<hF@$9$k$?$a$K;HMQ$5$l$k\e(B @sc{url} \e$BJ8;zNs$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d} \e$B$G\e(B
+\e$B$9!#\e(B
 
 @item nnslashdot-article-url
 @vindex nnslashdot-article-url
-The @sc{url} format string that will be used to fetch the news article.  The
-default is
-@samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.
+\e$B%K%e!<%95-;v$r<hF@$9$k$?$a$K;H$o$l$k\e(B @sc{url} \e$BJ8;zNs$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment} \e$B$G$9!#\e(B
 
 @item nnslashdot-threshold
 @vindex nnslashdot-threshold
-The score threshold.  The default is -1.
+\e$B%9%3%"$N$7$-$$CM$G$9!#=i4|CM$O\e(B -1 \e$B$G$9!#\e(B
 
 @item nnslashdot-group-number
 @vindex nnslashdot-group-number
-The number of old groups, in addition to the ten latest, to keep
-updated.  The default is 0.
+\e$B:G?7$N\e(B 10 \e$B$K2C$($F99?7$rB3$1$k8E$$%0%k!<%W$N?t$G$9!#=i4|CM$O\e(B 0 \e$B$G$9!#\e(B
 
 @end table
 
-
-
 @node Ultimate
 @subsection Ultimate
 @cindex nnultimate
 @cindex Ultimate Bulletin Board
 
-The Ultimate Bulletin Board (@file{http://www.ultimatebb.com/}) is
-probably the most popular Web bulletin board system used.  It has a
-quite regular and nice interface, and it's possible to get the
-information Gnus needs to keep groups updated.
+Ultimate Bulletin Board (@file{http://www.ultimatebb.com/}) \e$B$O$*$=$i$/0l\e(B
+\e$BHVNI$/;H$o$l$F$$$k%&%'%V7G<(HD%7%9%F%`$G$7$g$&!#$H$F$b@0A3$H$7$FNI$$3&LL\e(B
+\e$B$G!"\e(Bgnus \e$B$,%0%k!<%W$r:G?7$N>uBV$KJ]$C$F$*$/$?$a$K>pJs$rF@$k$3$H$,2DG=$G\e(B
+\e$B$9!#\e(B
 
-The easiest way to get started with @code{nnultimate} is to say
-something like the following in the group buffer:  @kbd{B nnultimate RET 
-http://www.tcj.com/messboard/ubbcgi/ RET}.  (Substitute the @sc{url}
-(not including @samp{Ultimate.cgi} or the like at the end) for a forum
-you're interested in; there's quite a list of them on the Ultimate web
-site.)  Then subscribe to the groups you're interested in from the
-server buffer, and read them from the group buffer.
+@code{nnultimate} \e$B$r;O$a$k$?$a$N0lHV4JC1$JJ}K!$O%0%k!<%W%P%C%U%!$G0J2<$N\e(B
+\e$B$h$&$J$b$N$r$9$k$3$H$G$9\e(B: @kbd{B nnultimate RET
+http://www.tcj.com/messboard.ubbcgi/ RET}\e$B!#\e(B(\e$B6=L#$N$"$k2q5D<<\e(B
+\e$B$N\e(B @sc{url} (@samp{Ultimate.cgi} \e$BEy$r:G8e$K4^$s$G$$$J$$$b$N\e(B) \e$B$KJQ$($F$/\e(B
+\e$B$@$5$$!#\e(BUltimate \e$B%&%'%V%5%$%H$K$O$?$/$5$s5s$2$i$l$F$$$^$9!#\e(B) \e$B$=$l$+$i%5!<\e(B
+\e$B%P!<%P%C%U%!$G6=L#$N$"$k%0%k!<%W$r9XFI$7!"%0%k!<%W%P%C%U%!$+$i$=$l$i$rFI\e(B
+\e$B$s$G$/$@$5$$!#\e(B
 
-The following @code{nnultimate} variables can be altered:
+\e$B0J2<$N\e(B @code{nnutimate} \e$BJQ?t$rJQ992DG=$G$9\e(B:
 
 @table @code
 @item nnultimate-directory
 @vindex nnultimate-directory
-The directory where @code{nnultimate} stores its files.  The default is
-@samp{~/News/ultimate/}.
+@code{nnultimate} \e$B$,%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{~/News/ultimate/} \e$B$G$9!#\e(B
 @end table
 
 @node Web Archive
@@ -11579,35 +12357,107 @@ The directory where @code{nnultimate} stores its files.  The default is
 @cindex nnwarchive
 @cindex Web Archive
 
-Some mailing lists only have archives on Web servers, such as
-(@file{http://www.egroups.com/}). It has a quite regular and nice
-interface, and it's possible to get the information Gnus needs to keep
-groups updated.
-
-The easiest way to get started with @code{nnwarchive} is to say
-something like the following in the group buffer: @kbd{M-x
-gnus-group-make-nnwarchive-group RET an_egroup RET egroups RET
-www.egroups.com RET your@@email.address RET}.  (Substitute the
-@sc{an_egroup} with the mailing list you subscribed, the
-@sc{your@@email.address} with your email address.)
+\e$B%a!<%j%s%0%j%9%H$NCf$K$ONc$($P!"\e(B
+@file{http://www.egroups.com/} \e$B$d\e(B @file{http://www.mail-archive.com/} \e$B$N\e(B
+\e$B$h$&$K%&%'%V%5!<%P!<$K$7$+%"!<%+%$%V$,L5$$$b$N$b$"$j$^$9!#$H$F$b@0A3$H$7\e(B
+\e$B$FNI$$3&LL$G!"\e(Bgnus \e$B$,%0%k!<%W$r:G?7$N>uBV$KJ]$C$F$*$/$?$a$K>pJs$rF@$k$3\e(B
+\e$B$H$,2DG=$G$9!#\e(B
+
+@code{nnwarchive} \e$B$r;O$a$k$?$a$N0lHV4JC1$JJ}K!$O%0%k!<%W%P%C%U%!$G0J2<$N\e(B
+\e$B$h$&$J$b$N$r$9$k$3$H$G$9\e(B: @kbd{M-x gnus-group-make-warchive-group RET
+an_egroup RET egroups RET www.egroups.comRET your@@email.address RET}\e$B!#\e(B
+(@sc{an_egroup} \e$B$r9XFI$7$F$$$k%a!<%j%s%0%j%9%H$K!"\e(B
+@sc{your@@emailaddress} \e$B$rEE;R%a!<%k%"%I%l%9$KCV$-49$($F$/$@$5$$!#\e(B)
+\e$B$^$?$O\e(B @kbd{B nnwarchive RET mail-archive RET} \e$B$G%P%C%/%(%s%I$r%V%i%&%:\e(B
+\e$B$7$F2<$5$$!#\e(B
 
-The following @code{nnwarchive} variables can be altered:
+\e$B0J2<$N\e(B @code{nnwarchive} \e$BJQ?t$rJQ$($k$3$H$,2DG=$G$9\e(B:
 
 @table @code
 @item nnwarchive-directory
 @vindex nnwarchive-directory
-The directory where @code{nnwarchive} stores its files.  The default is
-@samp{~/News/warchive/}.
+@code{nnwarchive} \e$B$,%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{~/News/warchive} \e$B$G$9!#\e(B
 
 @item nnwarchive-login
 @vindex nnwarchive-login
-The account name on the web server.
+\e$B%&%'%V%5!<%P!<$G$N%"%+%&%s%HL>$G$9!#\e(B
 
 @item nnwarchive-passwd
 @vindex nnwarchive-passwd
-The password for your account on the web server.
+\e$B%&%'%V%5!<%P!<$G$N%"%+%&%s%H$N%Q%9%o!<%I$G$9!#\e(B
 @end table
 
+@node Web Newspaper
+@subsection Web Newspaper
+@cindex nnshimbun
+@cindex Web Newspaper
+
+\e$B:G6a$G$O!"4v$D$+$N?7J9$,%&%'%V$G8x3+$5$l$F$$$^$9!#\e(BGnus \e$B$O!"$3$l$i$bE,@Z\e(B
+\e$B$K<h$j07$&$3$H$,=PMh$k$h$&$K$J$j$D$D$"$j$^$9!#8=;~E@$G$O!"D+F|?7J9!"FIGd\e(B
+\e$B?7J9!"%9%]%K%A!"\e(BCNET Japan\e$B!"\e(BHOTWIRED Japan \e$B$*$h$S\e(B ZDNet Japan \e$B$KBP1~$7$F\e(B
+\e$B$$$^$9!#\e(B
+
+@code{nnshimbun} \e$B$r;O$a$k$?$a$N0lHV4JC1$JJ}K!$O%0%k!<%W%P%C%U%!$G0J2<$N\e(B
+\e$B$h$&$J$b$N$r$9$k$3$H$G$9\e(B: @kbd{M-x gnus-group-make-shimbun-group RET
+asahi RET an_group RET}\e$B!#\e(B(@sc{an_group} \e$B$r1\Mw$7$?$$5-;v%0%k!<%W$KCV$-49\e(B
+\e$B$($F$/$@$5$$!#\e(B) \e$B$^$?$O\e(B @kbd{B nnshimbun RET asahi RET} \e$B$G%P%C%/%(%s%I$r\e(B
+\e$B%V%i%&%:$7$F2<$5$$!#\e(B
+
+\e$B0J2<$N\e(B @code{nnshimbun} \e$BJQ?t$rJQ$($k$3$H$,2DG=$G$9\e(B:
+
+@table @code
+@item nnshimbun-directory
+@vindex nnshimbun-directory
+@code{nnshimbun} \e$B$,%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{~/News/shimbun} \e$B$G$9!#\e(B
+
+@item nnshimbun-pre-fetch-article
+@vindex nnshimbun-pre-fetch-article
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$NCM$K%;%C%H$5$l$F$$$k$H!"\e(B@code{nnshimbun} \e$B$O\e(B
+\e$B?7Ce5-;v$r8!:w$HF1;~$K5-;v$N%@%&%s%m!<%I$b9T$$$^$9!#$3$l$K$h$C$F!"?7Ce5-\e(B
+\e$B;v$N8!:w$OCY$/$J$j$^$9$,!"5-;v$N1\Mw;~$KBT$?$5$l$k$3$H$O>/$J$/$J$j$^$9!#\e(B
+@end table
+
+\e$B0lHL$K!"%&%'%V>e$G8x3+$5$l$F$$$k?7J9$OJ#?t$N%5!<%P!<$K$h$C$F%_%i!<$5$l$F\e(B
+\e$B$$$^$9!#%G%U%)%k%H$NCM$,5$$KF~$i$J$$>l9g$O!"<!$N$h$&$KL@<(E*$K\e(B URL \e$B$r;X\e(B
+\e$BDj$7$F!"%5!<%P!<$rDj5A$7$F2<$5$$!#\e(B
+
+@lisp
+(nnshimbun "asahi" (nnshimbun-url "http://iij.asahi.com/"))
+@end lisp
+
+@node Customizing w3
+@subsection w3 \e$B$N%+%9%?%^%$%:\e(B
+@cindex w3
+@cindex html
+@cindex url
+@cindex Netscape
+
+Gnus \e$B$O%&%'%V%Z!<%8$r<hF@$9$k$?$a$K\e(B url \e$B%i%$%V%i%j$r!"%&%'%V%Z!<%8$rI=<(\e(B
+\e$B$9$k$?$a$K\e(B Emacs/w3 \e$B$r;H$$$^$9!#\e(BEmacs/w3 \e$B$N$3$H$O$=$N%^%K%e%"%k$K5-:\$5\e(B
+\e$B$l$F$$$^$9$,!"$3$3$G$O\e(B Gnus \e$B$N%f!<%6$K$H$C$F$h$jE,@Z$J$$$/$D$+$N;vJA$r=R\e(B
+\e$B$Y$k$3$H$K$7$^$9!#\e(B
+
+\e$BNc$($P!"$h$/$"$k<ALd$K\e(B Emacs/w3 \e$B$K\e(B @code{browse-url} \e$B$N5!G=\e(B (Netscape \e$B$N\e(B
+\e$B$h$&$J30It%W%i%&%6!<$r;H$&$h$&$K@_Dj$5$l$F$$$k\e(B) \e$B$r;H$C$F%j%s%/$r;2>H$5$;\e(B
+\e$B$k$K$O$I$&$7$?$i$h$$$+!"$H$$$&$N$,$"$j$^$9!#0J2<$O0l$D$NJ}K!$G$9!#\e(B
+
+@lisp
+(eval-after-load "w3"
+  '(progn
+    (fset 'w3-fetch-orig (symbol-function 'w3-fetch))
+    (defun w3-fetch (&optional url target)
+      (interactive (list (w3-read-url-with-default)))
+      (if (eq major-mode 'gnus-article-mode)
+          (browse-url url)
+        (w3-fetch-orig url target)))))
+@end lisp
+
+\e$B$3$l$r$"$J$?$N\e(B .emacs \e$B%U%!%$%k$K=q$-9~$`$3$H$K$h$C$F!"\e(BGnus \e$B$N5-;v%P%C%U%!\e(B
+\e$B$G\e(B @sc{html} \e$B%j%s%/$rC!$1$P!"\e(B@code{browse-url} \e$B$r;H$C$F$=$N%j%s%/$r;2>H\e(B
+\e$B$9$k$h$&$K$J$k$G$7$g$&!#\e(B
+
 @node Other Sources
 @section \e$B$=$NB>$N%0%k!<%W8;\e(B
 
@@ -11617,125 +12467,118 @@ Gnus \e$B$O$?$@C1$K%K%e!<%9$d%a!<%k$rFI$`0J>e$N$3$H$,$G$-$^$9!#0J2<\e(B
 \e$B$9!#\e(B
 
 @menu
-* Directory Groups::      \e$B%G%#%l%/%H%j!<$r%K%e!<%9%0%k!<%W$N$h$&$KFI$`!#\e(B
+* Directory Groups::      \e$B%G%#%l%/%H%j!<$r%K%e!<%9%0%k!<%W$N$h$&$KFI$`\e(B
 * Anything Groups::       Dired?  \e$BC/$,\e(B dired \e$B$J$s$F;H$&$N\e(B?
-* Document Groups::       \e$B8DJL$N%U%!%$%k72$O%0%k!<%W$NAG!#\e(B
-* SOUP::                  @sc{soup} \e$B%Q%1%C%H$r\e(B ``\e$B%*%U%i%$%s\e(B''\e$B$GFI$`!#\e(B
-* Mail-To-News Gateways:: \e$B%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$$rDL$7$F5-;v$rEj9F$9$k!#\e(B
-* IMAP::                  Using Gnus as a @sc{imap} client.
+* Document Groups::       \e$B8DJL$N%U%!%$%k72$O%0%k!<%W$NAG\e(B
+* SOUP::                  @sc{soup} \e$B%Q%1%C%H$r\e(B ``\e$B%*%U%i%$%s\e(B''\e$B$GFI$`\e(B
+* Mail-To-News Gateways:: \e$B%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$$rDL$7$F5-;v\e(B
+                          \e$B$rEj9F$9$k\e(B
+* IMAP::                  Gnus \e$B$r\e(B IMAP \e$B$N%/%i%$%"%s%H$H$7$F;H$&\e(B
 @end menu
 
-
 @node Directory Groups
 @subsection \e$B%G%#%l%/%H%j!<%0%k!<%W\e(B
 @cindex nndir
 @cindex directory groups
 
-\e$B$b$7!"$?$/$5$s$N5-;v$,8DJL$N%U%!%$%k$H$7$FF~$C$F$$$k%G%#%l%/%H%j!<\e(B
-\e$B$,$"$l$P!"$=$l$r%K%e!<%9%0%k!<%W$H$7$F07$&$3$H$,$G$-$^$9!#$b$A$m\e(B
-\e$B$s!"%U%!%$%k$O?t;z$N%U%!%$%kL>$r$b$C$F$$$J$1$l$P$J$j$^$;$s!#\e(B
+\e$B$b$7!"$?$/$5$s$N5-;v$,8DJL$N%U%!%$%k$H$7$FF~$C$F$$$k%G%#%l%/%H%j!<$,$"$l\e(B
+\e$B$P!"$=$l$r%K%e!<%9%0%k!<%W$H$7$F07$&$3$H$,$G$-$^$9!#$b$A$m$s!"%U%!%$%k$O\e(B
+\e$B?t;z$N%U%!%$%kL>$r$b$C$F$$$J$1$l$P$J$j$^$;$s!#\e(B
 
-\e$B$3$3$G\e(B Emacs \e$B$NAG@2$i$7$$%Q%C%1!<%8$NCf$G$b:G$bAG@2$i$7$$\e(B
-@code{ange-ftp} (\e$B$H$=$N8e7Q$N\e(B @code{efs}) \e$B$K$D$$$F?($l$kNI$$5!2q\e(B
-\e$B$G$7$g$&!#;d$,\e(B @code{nndir} \e$B$r=q$$$?$H$-$O!"$3$l\e(B --- \e$B%G%#%l%/%H\e(B
-\e$B%j!<$rFI$`%P%C%/%(%s%I$K$D$$$F$O$"$^$j9M$($F$$$^$;$s$G$7$?!#$H$s\e(B
-\e$B$G$b$J$$$3$H$@$M!#\e(B
+\e$B$3$3$G\e(B Emacs \e$B$NAG@2$i$7$$%Q%C%1!<%8$NCf$G$b:G$bAG@2$i$7\e(B
+\e$B$$\e(B @code{ange-ftp} (\e$B$H$=$N8e7Q$N\e(B @code{efs}) \e$B$K$D$$$F?($l$kNI$$5!2q$G$7$g\e(B
+\e$B$&!#;d$,\e(B @code{nndir} \e$B$r=q$$$?$H$-$O!"$3$l\e(B --- \e$B%G%#%l%/%H%j!<$rFI$`%P%C\e(B
+\e$B%/%(%s%I$K$D$$$F$O$"$^$j9M$($F$$$^$;$s$G$7$?!#$H$s$G$b$J$$$3$H$@$M!#\e(B
 
 @code{ange-ftp} \e$B$O$3$N>p67$r7`E*$KJQ2=$5$;$^$7$?!#Nc$($P!"\e(B
-@code{ange-ftp} \e$B%U%!%$%kL>\e(B
-@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} \e$B$r%G%#%l%/%H%j!<L>\e(B
-\e$B$H$7$FF~NO$7$?$H$9$k$H!"\e(B@code{ange-ftp} \e$B$"$k$$$O\e(B @code{efs} \e$B$O<B\e(B
-\e$B$K!"\e(B@samp{\e$B%7%J\e(B} \e$B$N8~$3$&$N%G%#%l%/%H%j!<$r%K%e!<%9%0%k!<%W$H$7$F\e(B
-\e$BFI$`$3$H$r2DG=$K$9$k$N$G$9!#$*!<$$!"J,;6%K%e!<%9$h\e(B!
+@code{ange-ftp} \e$B%U%!%$%k\e(B
+\e$BL>\e(B @file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} \e$B$r%G%#%l%/%H%j!<L>$H$7$F\e(B
+\e$BF~NO$7$?$H$9$k$H!"\e(B@code{ange-ftp} \e$B$"$k$$$O\e(B @code{efs} \e$B$O<B$K!"\e(B
+@samp{\e$B%7%J\e(B} \e$B$N8~$3$&$N%G%#%l%/%H%j!<$r%K%e!<%9%0%k!<%W$H$7$FFI$`$3$H$r2D\e(B
+\e$BG=$K$9$k$N$G$9!#$*!<$$!"J,;6%K%e!<%9$h\e(B!
 
 @code{nndir} \e$B$O\e(B @sc{nov} \e$B%U%!%$%k$,B8:_$9$l$P$=$l$rMxMQ$7$^$9!#\e(B
 
-@code{nndir} \e$B$O\e(B ``\e$BFI$_=P$7@lMQ\e(B'' \e$B$N%P%C%/%(%s%I$G$9\e(B --- \e$B$3$NA*Br\e(B
-\e$BJ}K!$G$O!"5-;v$N:o=|$d4|8B@Z$l>C5n$r9T$J$&$3$H$O$G$-$^$;$s!#\e(B
-@code{nndir} \e$B$,;H$($k$b$N$J$i2?$G$b\e(B @code{nnmh} \e$B$"$k$$$O\e(B
-@code{nnml} \e$B$r;H$&$3$H$,$G$-$k$N$G!"$b$7FI$_=P$7@lMQ$G$O$J$$\e(B
-@code{nndir} \e$B$,I,MW$@$H;W$C$?$i!"$3$l$i$N$I$A$i$+$NJ}K!$K@Z$jBX\e(B
-\e$B$($k$3$H$b$G$-$^$9!#\e(B
-
+@code{nndir} \e$B$O\e(B ``\e$BFI$_=P$7@lMQ\e(B'' \e$B$N%P%C%/%(%s%I$G$9\e(B --- \e$B$3$NA*BrJ}K!$G$O!"\e(B
+\e$B5-;v$N:o=|$d4|8B@Z$l>C5n$r9T$J$&$3$H$O$G$-$^$;$s!#\e(B@code{nndir} \e$B$,;H$($k\e(B
+\e$B$b$N$J$i2?$G$b\e(B @code{nnmh} \e$B$"$k$$$O\e(B @code{nnml} \e$B$r;H$&$3$H$,$G$-$k$N$G!"\e(B
+\e$B$b$7FI$_=P$7@lMQ$G$O$J$$\e(B @code{nndir} \e$B$,I,MW$@$H;W$C$?$i!"$3$l$i$N$I$A$i\e(B
+\e$B$+$NJ}K!$K@Z$jBX$($k$3$H$b$G$-$^$9!#\e(B
 
 @node Anything Groups
 @subsection \e$B$J$s$G$b%0%k!<%W\e(B
 @cindex nneething
 
-(\e$B0l$D$N%9%W!<%kIw%G%#%l%/%H%j!<$H2r<a$G$-$k\e(B) @code{nndir} \e$B%P%C%/\e(B
-\e$B%(%s%I$+$i\e(B@code{nneething} \e$B$^$G$O!"$[$s$N$9$0$=$3$G$9!#$=$l$O$$\e(B
-\e$B$+$J$k%G%#%l%/%H%j!<$G$b%K%e!<%9%0%k!<%W$K8+$;$+$1$F$7$^$&!"$H$$\e(B
-\e$B$&$b$N$G$9!#IT;W5D$G$9!"$G$b??<B$G$9!#\e(B
-
-@code{nneething} \e$B$K%G%#%l%/%H%j!<$rM?$($k$H!"$=$N%G%#%l%/%H%j!<\e(B
-\e$B$rAv::$7!"3F%U%!%$%k$K5-;vHV9f$r3d$jEv$F$^$9!#$3$N$h$&$J%0%k!<%W\e(B
-\e$B$KF~$C$?$H$-$O!"\e(B@code{nneething} \e$B$O\e(B gnus \e$B$,;H$&\e(B ``\e$B%X%C%@!<\e(B'' \e$B$r\e(B
-\e$B:n$i$J$/$F$O$J$j$^$;$s!#$D$^$k$H$3$m!"\e(Bgnus \e$B$O%K%e!<%9%j!<%@$J$s\e(B
-\e$B$G$9!#K:$l$F$k$+$b$7$l$J$$$N$GG0$N$?$a!#\e(B@code{nneething} \e$B$O$3$l$r\e(B
-2 \e$BCJ3,$G=hM}$7$^$9!#:G=i$K!"LdBj$H$J$k%U%!%$%k$r$=$l$>$lA':w$7$F\e(B
-\e$B$^$o$j$^$9!#$b$7$=$N%U%!%$%k$,5-;v$N$h$&$K8+$($?$J$i\e(B (\e$B$9$J$o$A!"\e(B
-\e$B:G=i$N?t9T$,%X%C%@!<$N$h$&$K8+$($?$i\e(B) \e$B$=$l$r%X%C%@$H$7$F;H$$$^$9!#\e(B
-\e$B$b$7$=$l$,%X%C%@!<$N$J$$$?$@$NE,Ev$J%U%!%$%k\e(B (\e$BNc$($P\e(B C \e$B$N%=!<%9\e(B
-\e$B%U%!%$%k\e(B) \e$B$G$"$C$?$J$i!"\e(B@code{nneething} \e$B$O%X%C%@!<$r5u6u$+$i:n\e(B
-\e$B$j=P$7$^$9!#$3$l$O%U%!%$%k$N=jM-<T!"L>A0!"F|IU$r;H$$!"$3$l$i$NMW\e(B
-\e$BAG$KBP$7$F$G$-$k$3$H$r2?$G$b$d$j$^$9!#\e(B
-
-\e$B$3$l$O$"$J$?$K$H$C$F$OA4$F<+F0E*$K5/$3$k$3$H$G!"$"$J$?$O%K%e!<%9\e(B
-\e$B%0%k!<%W$K$H$F$bNI$/;w$?2?$+$r8+$;$i$l$k$3$H$K$J$k$G$7$g$&!#$[$s\e(B
-\e$B$H$&$K@#J,0c$o$J$$!"%K%e!<%9%0%k!<%W$N$h$&$J$b$N$r!#5-;v$rA*Br$9\e(B
-\e$B$k$H!"$=$l$O$$$D$b$N$h$&$K!"5-;v%P%C%U%!$KI=<($5$l$k$G$7$g$&!#\e(B
-
-\e$B%G%#%l%/%H%j!<$rI=$o$7$F$$$k9T$rA*Br$9$k$H!"\e(Bgnus \e$B$O$"$J$?$r$3$N\e(B
-@code{nneething} \e$B%0%k!<%W$N$?$a$N?7$7$$35N,%P%C%U%!$KO"$l$F9T$/\e(B
-\e$B$G$7$g$&!#0J2<F1MM$G!"$b$7$"$J$?$,$=$&$7$?$1$l$P!"$3$NJ}K!$GA4%G%#\e(B
-\e$B%9%/$r6n$1=d$k$3$H$,$G$-$^$9!#$G$9$,!"\e(Bgnus \e$B$OK\Ev$O\e(B dired \e$B$G$O$J\e(B
-\e$B$/!"$=$N$h$&$K0U?^$5$l$?$b$N$G$b$J$$!"$H$$$&$3$H$O3P$($F$*$$$F$/\e(B
-\e$B$@$5$$!#\e(B
-
-\e$B$3$3$G$NF0:n$K$OA4BNE*$K\e(B 2 \e$B$D$N%b!<%I$,$"$j$^$9\e(B --- \e$B0l;~%b!<%I$H\e(B
-\e$B8GDj%b!<%I$G$9!#0l;~E*$JA`:n$r9T$J$C$F$$$k$H$-$O\e(B(\e$B$9$J$o$A!"%0%k!<\e(B
-\e$B%W%P%C%U%!$G\e(B @kbd{G D} \e$B$H$9$k\e(B)\e$B!"\e(Bgnus \e$B$O$I$N%U%!%$%k$rFI$s$@$+!"\e(B
-\e$B$I$N%U%!%$%k$,?7$7$$$+!"$J$I$N>pJs$r21$($F$*$-$^$;$s!#$b$7\e(B@kbd{G
-m} \e$B$GIaDL$K8GDj\e(B @code{nneething} \e$B%0%k!<%W$r:n$k$H!"\e(Bgnus\e$B$O5-;vHV\e(B
-\e$B9f$H%U%!%$%kL>$NBP1~I=$r21$($F$*$-!"$3$N%0%k!<%W$rB>$N%0%k!<%W$H\e(B
-\e$BF1MM$K07$&$3$H$,$G$-$k$h$&$K$J$j$^$9!#8GDj\e(B@code{nneething} \e$B%0%k!<\e(B
-\e$B%W$r:nF0$5$;$k$H!"L$FI5-;v$,$$$/$D4^$^$l$F$$$k$+$rCN$i$5$l$?$j!"\e(B
-\e$B$J$I$J$I!#\e(B
+(\e$B0l$D$N%9%W!<%kIw%G%#%l%/%H%j!<$H2r<a$G$-$k\e(B) @code{nndir} \e$B%P%C%/%(%s%I$+\e(B
+\e$B$i\e(B @code{nneething} \e$B$^$G$O!"$[$s$N$9$0$=$3$G$9!#$=$l$O$$$+$J$k%G%#%l%/%H\e(B
+\e$B%j!<$G$b%K%e!<%9%0%k!<%W$K8+$;$+$1$F$7$^$&!"$H$$$&$b$N$G$9!#IT;W5D$G$9!"\e(B
+\e$B$G$b??<B$G$9!#\e(B
+
+@code{nneething} \e$B$K%G%#%l%/%H%j!<$rM?$($k$H!"$=$N%G%#%l%/%H%j!<$rAv::$7!"\e(B
+\e$B3F%U%!%$%k$K5-;vHV9f$r3d$jEv$F$^$9!#$3$N$h$&$J%0%k!<%W$KF~$C$?$H$-$O!"\e(B
+@code{nneething} \e$B$O\e(B gnus \e$B$,;H$&\e(B ``\e$B%X%C%@!<\e(B'' \e$B$r:n$i$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$D$^$k$H$3$m!"\e(Bgnus \e$B$O%K%e!<%9%j!<%@$J$s$G$9!#K:$l$F$k$+$b$7$l$J$$$N$GG0\e(B
+\e$B$N$?$a!#\e(B@code{nneething} \e$B$O$3$l$rFsCJ3,$G=hM}$7$^$9!#:G=i$K!"LdBj$H$J$k\e(B
+\e$B%U%!%$%k$r$=$l$>$lA':w$7$F$^$o$j$^$9!#$b$7$=$N%U%!%$%k$,5-;v$N$h$&$K8+$(\e(B
+\e$B$?$J$i\e(B (\e$B$9$J$o$A!":G=i$N?t9T$,%X%C%@!<$N$h$&$K8+$($?$i\e(B) \e$B$=$l$r%X%C%@$H$7\e(B
+\e$B$F;H$$$^$9!#$b$7$=$l$,%X%C%@!<$N$J$$$?$@$NE,Ev$J%U%!%$%k\e(B (\e$BNc$($P\e(B C \e$B$N%=!<\e(B
+\e$B%9%U%!%$%k\e(B) \e$B$G$"$C$?$J$i!"\e(B@code{nneething} \e$B$O%X%C%@!<$r5u6u$+$i:n$j=P$7\e(B
+\e$B$^$9!#$3$l$O%U%!%$%k$N=jM-<T!"L>A0!"F|IU$r;H$$!"$3$l$i$NMWAG$KBP$7$F$G$-\e(B
+\e$B$k$3$H$r2?$G$b$d$j$^$9!#\e(B
+
+\e$B$3$l$O$"$J$?$K$H$C$F$OA4$F<+F0E*$K5/$3$k$3$H$G!"$"$J$?$O%K%e!<%9%0%k!<%W\e(B
+\e$B$K$H$F$bNI$/;w$?2?$+$r8+$;$i$l$k$3$H$K$J$k$G$7$g$&!#$[$s$H$&$K@#J,0c$o$J\e(B
+\e$B$$!"%K%e!<%9%0%k!<%W$N$h$&$J$b$N$r!#5-;v$rA*Br$9$k$H!"$=$l$O$$$D$b$N$h$&\e(B
+\e$B$K!"5-;v%P%C%U%!$KI=<($5$l$k$G$7$g$&!#\e(B
+
+\e$B%G%#%l%/%H%j!<$rI=$o$7$F$$$k9T$rA*Br$9$k$H!"\e(Bgnus \e$B$O$"$J$?$r$3\e(B
+\e$B$N\e(B @code{nneething} \e$B%0%k!<%W$N$?$a$N?7$7$$35N,%P%C%U%!$KO"$l$F9T$/$G$7$g\e(B
+\e$B$&!#0J2<F1MM$G!"$b$7$"$J$?$,$=$&$7$?$1$l$P!"$3$NJ}K!$GA4%G%#%9%/$r6n$1=d\e(B
+\e$B$k$3$H$,$G$-$^$9!#$G$9$,!"\e(Bgnus \e$B$OK\Ev$O\e(B dired \e$B$G$O$J$/!"$=$N$h$&$K0U?^$5\e(B
+\e$B$l$?$b$N$G$b$J$$!"$H$$$&$3$H$O3P$($F$*$$$F$/$@$5$$!#\e(B
+
+\e$B$3$3$G$NF0:n$K$OA4BNE*$KFs$D$N%b!<%I$,$"$j$^$9\e(B --- \e$B0l;~%b!<%I$H8GDj%b!<\e(B
+\e$B%I$G$9!#0l;~E*$JA`:n$r9T$J$C$F$$$k$H$-$O\e(B(\e$B$9$J$o$A!"%0%k!<%W%P%C%U%!\e(B
+\e$B$G\e(B @kbd{G D} \e$B$H$9$k\e(B)\e$B!"\e(Bgnus \e$B$O$I$N%U%!%$%k$rFI$s$@$+!"$I$N%U%!%$%k$,?7$7\e(B
+\e$B$$$+!"$J$I$N>pJs$r21$($F$*$-$^$;$s!#$b$7\e(B @kbd{G m} \e$B$GIaDL$K8G\e(B
+\e$BDj\e(B @code{nneething} \e$B%0%k!<%W$r:n$k$H!"\e(Bgnus \e$B$O5-;vHV9f$H%U%!%$%kL>$NBP1~\e(B
+\e$BI=$r21$($F$*$-!"$3$N%0%k!<%W$rB>$N%0%k!<%W$HF1MM$K07$&$3$H$,$G$-$k$h$&$K\e(B
+\e$B$J$j$^$9!#8GDj\e(B @code{nneething} \e$B%0%k!<%W$r:nF0$5$;$k$H!"L$FI5-;v$,$$$/$D\e(B
+\e$B4^$^$l$F$$$k$+$rCN$i$5$l$?$j!"$J$I$J$I!#\e(B
 
 \e$B$$$/$D$+$NJQ?t$,$"$j$^$9!#\e(B
 
 @table @code
 @item nneething-map-file-directory
 @vindex nneething-map-file-directory
-\e$BA4$F$N8GDj\e(B @code{nneething} \e$B%0%k!<%W$NBP1~I=$O$3$N%G%#%l%/%H%j!<\e(B
-\e$B$K3JG<$5$l$^$9!#$3$N=i4|@_DjCM$O\e(B @file{~/.nneething/} \e$B$G$9!#\e(B
+\e$BA4$F$N8GDj\e(B @code{nneething} \e$B%0%k!<%W$NBP1~I=$O$3$N%G%#%l%/%H%j!<$K3JG<$5\e(B
+\e$B$l$^$9!#$3$N=i4|@_DjCM$O\e(B @file{~/.nneething/} \e$B$G$9!#\e(B
 
 @item nneething-exclude-files
 @vindex nneething-exclude-files
-\e$B$3$N@55,I=8=$K%^%C%A$9$k%U%!%$%k$O$9$Y$FL5;k$5$l$^$9!#<+F0J]B8%U%!\e(B
-\e$B%$%k$J$I$r=|$/$N$KJXMx$K;H$($^$9!#$=$7$F$=$l$,$^$5$K=i4|@_Dj$G9T\e(B
-\e$B$J$o$l$kF0:n$G$9!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$9$k%U%!%$%k$O$9$Y$FL5;k$5$l$^$9!#<+F0J]B8%U%!%$%k$J\e(B
+\e$B$I$r=|$/$N$KJXMx$K;H$($^$9!#$=$7$F$=$l$,$^$5$K=i4|@_Dj$G9T$J$o$l$kF0:n$G\e(B
+\e$B$9!#\e(B
 
 @item nneething-include-files
 @vindex nneething-include-files
-\e$B$=$N%U%!%$%k$r%0%k!<%W$K4^$a$k$+$r<($9@55,I=8=$G$9!#$3$NJQ?t$,\e(B
-@code{nil} \e$B$G$J$1$l$P!"$3$N@55,I=8=$K9gCW$9$k%U%!%$%k$@$1$,4^$^$l$^$9!#\e(B
+\e$B$=$N%U%!%$%k$r%0%k!<%W$K4^$a$k$+$r<($9@55,I=8=$G$9!#$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"$3$N@55,I=8=$K9gCW$9$k%U%!%$%k$@$1$,4^$^$l$^$9!#\e(B
 
 @item nneething-map-file
 @vindex nneething-map-file
 \e$BBP1~I=%U%!%$%k$NL>A0!#\e(B
 @end table
 
-
 @node Document Groups
 @subsection \e$BJ8=q%0%k!<%W\e(B
 @cindex nndoc
 @cindex documentation group
 @cindex help group
 
-@code{nndoc} \e$B$O0l$D$N%U%!%$%k$r%K%e!<%9%0%k!<%W$H$7$FFI$`$3$H$r\e(B
-\e$B$G$-$k$h$&$K$9$k!"$A$g$C$H5$$NMx$$$?$d$D$G$9!#$$$/$D$+$N%U%!%$%k\e(B
-\e$B<oJL$,%5%]!<%H$5$l$F$$$^$9!#\e(B
+@code{nndoc} \e$B$O0l$D$N%U%!%$%k$r%K%e!<%9%0%k!<%W$H$7$FFI$`$3$H$r$G$-$k$h\e(B
+\e$B$&$K$9$k!"$A$g$C$H5$$NMx$$$?$d$D$G$9!#$$$/$D$+$N%U%!%$%k<oJL$,%5%]!<%H$5\e(B
+\e$B$l$F$$$^$9!#\e(B
 
 @table @code
 @cindex babyl
@@ -11778,58 +12621,51 @@ MIME \e$BB>ItJ,%a%C%;!<%8\e(B (multipart) \e$B$G$9!#\e(B
 \e$BHsI8=`$^$H$aAw$j7A<0\e(B --- \e$B$@$$$?$$$O$&$^$/%^%C%A$9$k$,!"$G$b07$$$O2<<j!#\e(B
 @end table
 
-\e$B$^$?!"FCJL$J\e(B ``\e$B%U%!%$%k<oJL\e(B'' @code{guess} \e$B$r;H$&$3$H$b$G$-$^$9!#\e(B
-\e$B$3$l$O\e(B @code{nndoc} \e$B$OCmL\$7$F$$$k%U%!%$%k$N<oJL$r?dB,$7$h$&$H$9\e(B
-\e$B$k!"$H$$$&0UL#$G$9!#\e(B@code{digest} \e$B$O\e(B @code{nndoc} \e$B$K$=$N%U%!%$%k\e(B
-\e$B$,$I$N$^$H$aAw$j7A<0$+$r?dB,$5$;$k$H$$$&0UL#$G$9!#\e(B
-
-@code{nndoc} \e$B$O%U%!%$%k$r=q$-49$($h$&$H$7$?$j!"M>J,$J%X%C%@!<$r\e(B
-\e$BA^F~$7$h$&$H$7$?$j$O$7$^$;$s\e(B --- \e$BC1=c$K!"%U%!%$%k$r$=$N%0%k!<%W\e(B
-\e$B$N<g@.J,$H$7$F;H$($k$h$&$K$9$k!"$H$$$&$h$&$J$b$N$G$9!#$=$l$@$1$N\e(B
-\e$B$3$H$G$9!#\e(B
-
-\e$B$b$7$"$J$?$,8E$$J]B85-;v$r;}$C$F$$$F!"$=$l$r?7$7$/$F$+$C$3$$$$\e(B
-gnus \e$B$N%a!<%k%P%C%/%(%s%I$KDI2C$7$?$$$H$$$&$H$-$O!"$*$=$i$/\e(B
-@code{nndoc} \e$B$,=u$1$K$J$j$^$9!#Nc$($P$"$J$?$,%a!<%k$r8E$$\e(B
-@file{RMAIL} \e$B$G;}$C$F$$$F!"$=$l$r$"$J$?$N?7$7$$\e(B @code{nnml} \e$B%0%k!<\e(B
-\e$B%W$KJ,G[$7$?$$$H$7$^$9!#$"$J$?$O$=$N%U%!%$%k$r\e(B @code{nndoc} \e$B$r;H$C\e(B
-\e$B$F3+$$$F\e(B (\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{G f} \e$BL?Na$r;H$&\e(B
-(@pxref{Foreign Groups}))\e$B!"%P%C%U%!Fb$NA45-;v$K%W%m%;%9%^!<%/$r\e(B
-\e$BIU$1\e(B (\e$BNc$($P\e(B @kbd{M P b})\e$B!"$=$7$F\e(B @code{nnml} \e$B$r;H$C$F:F%9%W!<%k\e(B
-(@kbd{B r}) \e$B$7$^$9!#A4$F$,$&$^$/9T$1$P!"\e(B@file{RMAIL} \e$B%U%!%$%kFb\e(B
-\e$B$NA4$F$N%a!<%k$O$?$/$5$s$N\e(B  @code{nnml} \e$B%G%#%l%/%H%j!<$NCf$K$bJ]\e(B
-\e$BB8$5$l$^$9!#$=$7$F$"$J$?$O$"$NLq2p$J\e(B @file{RMAIL} \e$B$r:o=|$9$k$3$H\e(B
-\e$B$b$G$-$^$9!#$"$J$?$K%,%C%D$,$"$l$P\e(B!
+\e$B$^$?!"FCJL$J\e(B ``\e$B%U%!%$%k<oJL\e(B'' @code{guess} \e$B$r;H$&$3$H$b$G$-$^$9!#$3$l\e(B
+\e$B$O\e(B @code{nndoc} \e$B$OCmL\$7$F$$$k%U%!%$%k$N<oJL$r?dB,$7$h$&$H$9$k!"$H$$$&0U\e(B
+\e$BL#$G$9!#\e(B@code{digest} \e$B$O\e(B @code{nndoc} \e$B$K$=$N%U%!%$%k$,$I$N$^$H$aAw$j7A<0\e(B
+\e$B$+$r?dB,$5$;$k$H$$$&0UL#$G$9!#\e(B
+
+@code{nndoc} \e$B$O%U%!%$%k$r=q$-49$($h$&$H$7$?$j!"M>J,$J%X%C%@!<$rA^F~$7$h\e(B
+\e$B$&$H$7$?$j$O$7$^$;$s\e(B --- \e$BC1=c$K!"%U%!%$%k$r$=$N%0%k!<%W$N<g@.J,$H$7$F;H\e(B
+\e$B$($k$h$&$K$9$k!"$H$$$&$h$&$J$b$N$G$9!#$=$l$@$1$N$3$H$G$9!#\e(B
+
+\e$B$b$7$"$J$?$,8E$$J]B85-;v$r;}$C$F$$$F!"$=$l$r?7$7$/$F$+$C$3$$$$\e(B gnus \e$B$N%a!<\e(B
+\e$B%k%P%C%/%(%s%I$KDI2C$7$?$$$H$$$&$H$-$O!"$*$=$i$/\e(B @code{nndoc} \e$B$,=u$1$K$J\e(B
+\e$B$j$^$9!#Nc$($P$"$J$?$,%a!<%k$r8E$$\e(B @file{RMAIL} \e$B$G;}$C$F$$$F!"$=$l$r$"$J\e(B
+\e$B$?$N?7$7$$\e(B @code{nnml} \e$B%0%k!<%W$KJ,G[$7$?$$$H$7$^$9!#$"$J$?$O$=$N%U%!%$\e(B
+\e$B%k$r\e(B @code{nndoc} \e$B$r;H$C$F3+$$$F\e(B (\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{G f} \e$BL?Na$r;H\e(B
+\e$B$&\e(B (@pxref{Foreign Groups}))\e$B!"%P%C%U%!Fb$NA45-;v$K%W%m%;%9%^!<%/$rIU\e(B
+\e$B$1\e(B (\e$BNc$($P\e(B @kbd{M P b})\e$B!"$=$7$F\e(B @code{nnml} \e$B$r;H$C$F:F%9%W!<\e(B
+\e$B%k\e(B (@kbd{B r}) \e$B$7$^$9!#A4$F$,$&$^$/9T$1$P!"\e(B@file{RMAIL} \e$B%U%!%$%kFb$NA4$F\e(B
+\e$B$N%a!<%k$O$?$/$5$s$N\e(B  @code{nnml} \e$B%G%#%l%/%H%j!<$NCf$K$bJ]B8$5$l$^$9!#$=\e(B
+\e$B$7$F$"$J$?$O$"$NLq2p$J\e(B @file{RMAIL} \e$B$r:o=|$9$k$3$H$b$G$-$^$9!#$"$J$?$K%,%C\e(B
+\e$B%D$,$"$l$P\e(B!
 
 \e$B2>A[%5!<%P!<JQ?t!#\e(B
 
 @table @code
 @item nndoc-article-type
 @vindex nndoc-article-type
-\e$B$3$l$O\e(B @code{mbox}\e$B!"\e(B @code{babyl}\e$B!"\e(B @code{digest}\e$B!"\e(B@code{news}\e$B!"\e(B
-@code{rnews}\e$B!"\e(B @code{mmdf}\e$B!"\e(B @code{forward}\e$B!"\e(B @code{rfc934}\e$B!"\e(B
-@code{rfc822-forward}\e$B!"\e(B @code{mime-digest}\e$B!"\e(B
-@code{standard-digest}\e$B!"\e(B@code{slack-digest}\e$B!"\e(B
-@code{clari-briefs}\e$B!"\e(B@code{guess} \e$B$N$$$:$l$+$G$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$3$l$O\e(B @code{mbox}, @code{babyl}, @code{digest}, @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934}, @code{rfc822-forward}, @code{mime-digest}, @code{standard-digest}, @code{slack-digest}, @code{clari-briefs}, @code{guess} \e$B$N\e(B
+\e$B$$$:$l$+$G$J$/$F$O$J$j$^$;$s!#\e(B
 
 @item nndoc-post-type
 @vindex nndoc-post-type
-\e$B$3$NJQ?t$O\e(B gnus \e$B$K$=$N%0%k!<%W$,%K%e!<%9%0%k!<%W$+%a!<%k%0%k!<%W\e(B
-\e$B$+$r65$($^$9!#@5Ev$JCM$O\e(B 2 \e$B$D$"$j$^$9!#\e(B @code{mail} (\e$B=i4|@_Dj\e(B)\e$B$+\e(B
- @code{news}\e$B$G$9!#\e(B
+\e$B$3$NJQ?t$O\e(B gnus \e$B$K$=$N%0%k!<%W$,%K%e!<%9%0%k!<%W$+%a!<%k%0%k!<%W$+$r65$(\e(B
+\e$B$^$9!#@5Ev$JCM$OFs$D$"$j$^$9!#\e(B@code{mail} (\e$B=i4|@_Dj\e(B)\e$B$+\e(B @code{news}\e$B$G$9!#\e(B
 @end table
 
 @menu
-* Document Server Internals::   \e$B$"$J$?FH<+$NJ8=q<oJL$rDI2C$9$kJ}K!!#\e(B
+* Document Server Internals:: \e$B$"$J$?FH<+$NJ8=q<oJL$rDI2C$9$kJ}K!\e(B
 @end menu
 
-
 @node Document Server Internals
 @subsubsection \e$BJ8=q%5!<%P!<$NFbIt\e(B
 
-@code{nndoc} \e$B$GG'<1$5$l$k?7$7$$J8=q<oJL$rDI2C$9$k$3$H$OFq$7$/$"\e(B
-\e$B$j$^$;$s!#$=$NJ8=q$,$I$N$h$&$K8+$($k$N$+$r4s$;=8$a$F!"$=$NJ8=q<o\e(B
-\e$BJL$rG'<1$9$k=R8l4X?t$r=q$-!"$=$7$F\e(B @code{nndoc} \e$B$K7R$2$k$@$1$G$9!#\e(B
+@code{nndoc} \e$B$GG'<1$5$l$k?7$7$$J8=q<oJL$rDI2C$9$k$3$H$OFq$7$/$"$j$^$;$s!#\e(B
+\e$B$=$NJ8=q$,$I$N$h$&$K8+$($k$N$+$r4s$;=8$a$F!"$=$NJ8=q<oJL$rG'<1$9$k=R8l4X\e(B
+\e$B?t$r=q$-!"$=$7$F\e(B @code{nndoc} \e$B$K7R$2$k$@$1$G$9!#\e(B
 
 \e$B$^$:!"$3$l$,J8=q<oJLDj5A$NNc$G$9!#\e(B
 
@@ -11839,76 +12675,75 @@ gnus \e$B$N%a!<%k%P%C%/%(%s%I$KDI2C$7$?$$$H$$$&$H$-$O!"$*$=$i$/\e(B
  (body-end .  "^\^A\^A\^A\^A\n"))
 @end example
 
-\e$B$3$NDj5A$OC1$K!"M#0l$NL>A0\e(B (@dfn{name}) \e$B$H$=$l$KB3$/@55,I=8=$H2>\e(B
-\e$BA[JQ?t@_Dj$NNs$+$i$J$j$^$9!#0J2<$,$3$l$K;H$($kJQ?t$G$9\e(B --- \e$BJQ?t\e(B
-\e$B$N?t$K05E]$5$l$J$$$G$/$@$5$$!#$[$H$s$I$NJ8=q<oJL$O$4$/$o$:$+$N@_\e(B
-\e$BDj$GDj5A$G$-$^$9!#\e(B
+\e$B$3$NDj5A$OC1$K!"M#0l$NL>A0\e(B (@dfn{name}) \e$B$H$=$l$KB3$/@55,I=8=$H2>A[JQ?t@_\e(B
+\e$BDj$NNs$+$i$J$j$^$9!#0J2<$,$3$l$K;H$($kJQ?t$G$9\e(B --- \e$BJQ?t$N?t$K05E]$5$l$J\e(B
+\e$B$$$G$/$@$5$$!#$[$H$s$I$NJ8=q<oJL$O$4$/$o$:$+$N@_Dj$GDj5A$G$-$^$9!#\e(B
 
 @table @code
 @item first-article
-\e$B$3$l$,$"$l$P!"\e(B@code{nndoc} \e$B$O$3$N@55,I=8=$K%^%C%A$9$k2?$+$,8+$D\e(B
-\e$B$+$k$^$G!"A4$F$N%F%-%9%H$rFI$_Ht$P$7$^$9!#\e(B \e$B%^%C%A$9$kA0$NA4$F$N\e(B
-\e$B%F%-%9%H$O40A4$KL5;k$5$l$^$9!#\e(B
+\e$B$3$l$,$"$l$P!"\e(B@code{nndoc} \e$B$O$3$N@55,I=8=$K%^%C%A$9$k2?$+$,8+$D$+$k$^$G!"\e(B
+\e$BA4$F$N%F%-%9%H$rFI$_Ht$P$7$^$9!#%^%C%A$9$kA0$NA4$F$N%F%-%9%H$O40A4$KL5;k\e(B
+\e$B$5$l$^$9!#\e(B
 
 @item article-begin
-\e$B$3$N@_Dj$OA4$F$NJ8=q<oJLDj5A$K$*$$$FI,$:$J$/$F$O$J$j$^$;$s!#$3$l\e(B
-\e$B$O3F5-;v$N;O$^$j$,$I$N$h$&$K8+$($k$+$r;XDj$7$^$9!#\e(B
+\e$B$3$N@_Dj$OA4$F$NJ8=q<oJLDj5A$K$*$$$FI,$:$J$/$F$O$J$j$^$;$s!#$3$l$O3F5-;v\e(B
+\e$B$N;O$^$j$,$I$N$h$&$K8+$($k$+$r;XDj$7$^$9!#\e(B
 
 @item head-begin-function
-\e$B$3$l$,$"$k>l9g!"$3$l$O5-;v$N@hF,$K%]%$%s%H$r0\F0$5$;$k4X?t$G$J$/\e(B
-\e$B$F$O$J$j$^$;$s!#\e(B
+\e$B$3$l$,$"$k>l9g!"$3$l$O5-;v$N@hF,$K%]%$%s%H$r0\F0$5$;$k4X?t$G$J$/$F$O$J$j\e(B
+\e$B$^$;$s!#\e(B
 
 @item nndoc-head-begin
-\e$B$3$l$,$"$k>l9g!"$3$l$O5-;v$N%X%C%@!<$K%^%C%A$9$k@55,I=8=$G$J$/$F\e(B
-\e$B$O$J$j$^$;$s!#\e(B
+\e$B$3$l$,$"$k>l9g!"$3$l$O5-;v$N%X%C%@!<$K%^%C%A$9$k@55,I=8=$G$J$/$F$O$J$j$^\e(B
+\e$B$;$s!#\e(B
 
 @item nndoc-head-end
-\e$B$3$l$O5-;v$N%X%C%@!<$N:G8e$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#$3$N=i4|\e(B
-\e$B@_DjCM$O\e(B @samp{^$} --- \e$B6u9T$G$9!#\e(B
+\e$B$3$l$O5-;v$N%X%C%@!<$N:G8e$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#$3$N=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{^$} --- \e$B6u9T$G$9!#\e(B
 
 @item body-begin-function
-\e$B$3$l$,$"$k>l9g!"$3$N4X?t$O5-;v$N%\%G%#$N3+;O0LCV$K%]%$%s%H$r0\F0\e(B
-\e$B$5$;$k4X?t$G$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$3$l$,$"$k>l9g!"$3$N4X?t$O5-;v$N%\%G%#$N3+;O0LCV$K%]%$%s%H$r0\F0$5$;$k4X\e(B
+\e$B?t$G$J$/$F$O$J$j$^$;$s!#\e(B
 
 @item body-begin
-\e$B$3$l$O5-;v$N%\%G%#$N3+;O0LCV$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#$3$N=i\e(B
-\e$B4|@_DjCM$O\e(B @samp{^\n} \e$B$G$9!#\e(B
+\e$B$3$l$O5-;v$N%\%G%#$N3+;O0LCV$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#$3$N=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{^\n} \e$B$G$9!#\e(B
 
 @item body-end-function
-\e$B$3$l$,$"$k>l9g!"$3$N4X?t$O5-;v$N%\%G%#$N:G8e$N0LCV$K%]%$%s%H$r0\\e(B
-\e$BF0$5$;$k4X?t$G$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$3$l$,$"$k>l9g!"$3$N4X?t$O5-;v$N%\%G%#$N:G8e$N0LCV$K%]%$%s%H$r0\F0$5$;$k\e(B
+\e$B4X?t$G$J$/$F$O$J$j$^$;$s!#\e(B
 
 @item body-end
 \e$B$3$l$,$"$l$P!"5-;v$N%\%G%#$N:G8e$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#\e(B
 
 @item file-end
-\e$B$3$l$,$"$k>l9g!"$3$l$O%U%!%$%k$N:G8e$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#\e(B
-\e$B$3$N@55,I=8=$N8e$m$N%F%-%9%H$OA4$F!"40A4$KL5;k$5$l$^$9!#\e(B
+\e$B$3$l$,$"$k>l9g!"$3$l$O%U%!%$%k$N:G8e$K%^%C%A$7$J$/$F$O$J$j$^$;$s!#$3$N@5\e(B
+\e$B5,I=8=$N8e$m$N%F%-%9%H$OA4$F!"40A4$KL5;k$5$l$^$9!#\e(B
 
 @end table
 
-\e$B$3$N$h$&$K!"$3$l$i$NJQ?t$r;H$C$F\e(B @code{nndoc} \e$B$OJ8=q%U%!%$%k$r!"\e(B
-\e$B$=$l$>$l%X%C%@!<$H%\%G%#$r;}$C$?5-;v$NO"$J$j$H$7$F2rK6$9$k$3$H$,\e(B
-\e$B$G$-$^$9!#$7$+$7!"A4$F$NJ8=q<oJL$,A4$F$3$N$h$&$J%K%e!<%9Iw$K$J$C\e(B
-\e$B$F$k$o$1$G$O$J$$$N$G!"$5$i$K$$$/$D$+$NJQ?t\e(B --- \e$B%X%C%@!<$d%\%G%#\e(B
-\e$B$r\e(B gnus \e$B$N<qL#$K9g$&$h$&$KJQ7A$5$;$kJQ?t$,I,MW$K$J$j$^$9!#\e(B
+\e$B$3$N$h$&$K!"$3$l$i$NJQ?t$r;H$C$F\e(B @code{nndoc} \e$B$OJ8=q%U%!%$%k$r!"$=$l$>$l\e(B
+\e$B%X%C%@!<$H%\%G%#$r;}$C$?5-;v$NO"$J$j$H$7$F2rK6$9$k$3$H$,$G$-$^$9!#$7$+$7!"\e(B
+\e$BA4$F$NJ8=q<oJL$,A4$F$3$N$h$&$J%K%e!<%9Iw$K$J$C$F$k$o$1$G$O$J$$$N$G!"$5$i\e(B
+\e$B$K$$$/$D$+$NJQ?t\e(B --- \e$B%X%C%@!<$d%\%G%#$r\e(B gnus \e$B$N<qL#$K9g$&$h$&$KJQ7A$5$;\e(B
+\e$B$kJQ?t$,I,MW$K$J$j$^$9!#\e(B
 
 @table @code
 @item prepare-body-function
-\e$B$3$l$,$"$l$P!"$3$N4X?t$O5-;v$,MW5a$5$l$?$H$-$K8F$S=P$5$l$^$9!#$3\e(B
-\e$B$l$O%\%G%#$N3+;O0LCV$N%]%$%s%H$H$H$b$K8F$S=P$5$l!"J8=q$NFbMF$N0l\e(B
-\e$BIt$,Id9f2=$5$l$F$$$k>l9g$KM-MQ$G$9!#\e(B
+\e$B$3$l$,$"$l$P!"$3$N4X?t$O5-;v$,MW5a$5$l$?$H$-$K8F$S=P$5$l$^$9!#$3$l$O%\%G%#\e(B
+\e$B$N3+;O0LCV$N%]%$%s%H$H$H$b$K8F$S=P$5$l!"J8=q$NFbMF$N0lIt$,Id9f2=$5$l$F$$\e(B
+\e$B$k>l9g$KM-MQ$G$9!#\e(B
 
 @item article-transform-function
-\e$B$3$l$,$"$l$P!"$3$N4X?t$O5-;v$,MW5a$5$l$?$H$-$K8F$S=P$5$l$^$9!#$3\e(B
-\e$B$l$O!"5-;v$N%X%C%@!<$H%\%G%#$NN>J}$K$h$j9-HO0O$JJQ7A$r9T$J$&$?$a\e(B
-\e$B$K;H$o$l$k$b$N$G$9!#\e(B
+\e$B$3$l$,$"$l$P!"$3$N4X?t$O5-;v$,MW5a$5$l$?$H$-$K8F$S=P$5$l$^$9!#$3$l$O!"5-\e(B
+\e$B;v$N%X%C%@!<$H%\%G%#$NN>J}$K$h$j9-HO0O$JJQ7A$r9T$J$&$?$a$K;H$o$l$k$b$N$G\e(B
+\e$B$9!#\e(B
 
 @item generate-head-function
-\e$B$3$l$,$"$l$P!"$3$N4X?t$O\e(B gnus \e$B$,M}2r$G$-$k%X%C%@!<$r@8@.$9$k$?$a\e(B
-\e$B$K8F$S=P$5$l$^$9!#$3$l$O5-;vHV9f$r%Q%i%a!<%?$H$7$F8F$S=P$5$l!"Ld\e(B
-\e$BBj$N5-;v$N$-$l$$$J%X%C%@!<$r@8@.$9$k$3$H$r5a$a$i$l$^$9!#$3$l$OA4\e(B
-\e$B$F$N5-;v$N%X%C%@!<$,MW5a$5$l$k$H$-$K8F$S=P$5$l$^$9!#\e(B
+\e$B$3$l$,$"$l$P!"$3$N4X?t$O\e(B gnus \e$B$,M}2r$G$-$k%X%C%@!<$r@8@.$9$k$?$a$K8F$S=P\e(B
+\e$B$5$l$^$9!#$3$l$O5-;vHV9f$r%Q%i%a!<%?$H$7$F8F$S=P$5$l!"LdBj$N5-;v$N$-$l$$\e(B
+\e$B$J%X%C%@!<$r@8@.$9$k$3$H$r5a$a$i$l$^$9!#$3$l$OA4$F$N5-;v$N%X%C%@!<$,MW5a\e(B
+\e$B$5$l$k$H$-$K8F$S=P$5$l$^$9!#\e(B
 
 @end table
 
@@ -11926,108 +12761,103 @@ gnus \e$B$N%a!<%k%P%C%/%(%s%I$KDI2C$7$?$$$H$$$&$H$-$O!"$*$=$i$/\e(B
  (subtype digest guess))
 @end example
 
-70 \e$BJ8;z$N%@%C%7%e\e(B(`-')\e$B$N9T$h$jA0$OA4$FL5;k$5$l$k$H$$$&$N$,J,$+$j$^\e(B
-\e$B$9!#$^$?\e(B @samp{^End of} \e$B$G;O$^$k9T$h$j8e$m$bA4$FL5;k$5$l$^$9!#3F\e(B
-\e$B5-;v$O\e(B30 \e$BJ8;z$N%@%C%7%e$N9T$G;O$^$j!"%X%C%@!<$H%\%G%#$N6h@Z$j$N\e(B
-\e$B9T$O0l8D$N%9%Z!<%9$r4^$`$3$H$,$"$j!"$=$7$F%\%G%#$O$=$l$,EO$5$l$k\e(B
-\e$BA0$K\e(B @code{nndoc-unquote-dashes} \e$B$rDL$5$l$^$9!#\e(B
+70 \e$BJ8;z$N%@%C%7%e\e(B(`-')\e$B$N9T$h$jA0$OA4$FL5;k$5$l$k$H$$$&$N$,J,$+$j$^$9!#$^\e(B
+\e$B$?\e(B @samp{^End of} \e$B$G;O$^$k9T$h$j8e$m$bA4$FL5;k$5$l$^$9!#3F5-;v$O\e(B 30 \e$BJ8;z\e(B
+\e$B$N%@%C%7%e$N9T$G;O$^$j!"%X%C%@!<$H%\%G%#$N6h@Z$j$N9T$O0l8D$N%9%Z!<%9$r4^\e(B
+\e$B$`$3$H$,$"$j!"$=$7$F%\%G%#$O$=$l$,EO$5$l$kA0\e(B
+\e$B$K\e(B @code{nndoc-unquote-dashes} \e$B$rDL$5$l$^$9!#\e(B
 
 \e$B$"$J$?FH<+$NJ8=qDj5A$r\e(B @code{nndoc} \e$B$K@\B3$9$k$K$O!"\e(B
-@code{nndoc-add-type} \e$B4X?t$r;HMQ$7$^$9!#$3$l$OFs$D$N%Q%i%a!<%?$r\e(B
-\e$B$H$j$^$9\e(B --- \e$B0l$DL\$O$=$NDj5A<+?H$G!"Fs$DL\$N\e(B (\e$B>JN,2DG=$J\e(B) \e$B%Q%i\e(B
-\e$B%a!<%?$O$3$NDj5A$r!"J8=q<oJLDj5AO"A[%j%9%H$N$I$3$KCV$/$+$r;XDj$7\e(B
-\e$B$^$9!#$3$NO"A[%j%9%H$O=gHV$KAv::$5$l!"M?$($i$l$?<oJL\e(B @code{TYPE}
-\e$B$KBP$7$F\e(B @code{nndoc-TYPE-type-p} \e$B$,8F$S=P$5$l$^$9!#$3$N$h$&$KJ8\e(B
-\e$B=q$,\e(B @code{mmdf} \e$B<oJL$G$"$k$+$I$&$+$rD4$Y$k$?$a$K\e(B
-@code{nndoc-mmdf-type-p} \e$B$,8F$S=P$5$l!"$=$7$F0J2<F1MM$KB3$-$^$9!#\e(B
-\e$B$3$l$i$N<oJL=R8l4X?t$O!"$=$NJ8=q$,$=$N<oJL$G$J$$>l9g$O\e(B
-@code{nil} \e$B$rJV$7!"$=$N<oJL$G$"$k>l9g$O\e(B @code{t} \e$B$rJV$7!"$=$N<o\e(B
-\e$BJL$+$b$7$l$J$$$H$-$O?t;z$rJV$5$J$/$F$O$J$j$^$;$s!#9b$$?t;z$O9b$$\e(B
-\e$B2DG=@-$r0UL#$7!"Dc$$?t;z$ODc$$2DG=@-$r0UL#$7$^$9!#\e(B@samp{0} \e$B$O@5\e(B
-\e$B$7$$CM$NCf$G$b$C$H$bDc$$?t;z$G$9!#\e(B
-
+@code{nndoc-add-type} \e$B4X?t$r;HMQ$7$^$9!#$3$l$OFs$D$N%Q%i%a!<%?$r$H$j$^\e(B
+\e$B$9\e(B --- \e$B0l$DL\$O$=$NDj5A<+?H$G!"Fs$DL\$N\e(B (\e$B>JN,2DG=$J\e(B) \e$B%Q%i%a!<%?$O$3$NDj\e(B
+\e$B5A$r!"J8=q<oJLDj5AO"A[%j%9%H$N$I$3$KCV$/$+$r;XDj$7$^$9!#$3$NO"A[%j%9%H$O\e(B
+\e$B=gHV$KAv::$5$l!"M?$($i$l$?<oJL\e(B @code{TYPE} \e$B$KBP$7\e(B
+\e$B$F\e(B @code{nndoc-TYPE-type-p} \e$B$,8F$S=P$5$l$^$9!#$3$N$h$&$KJ8=q\e(B
+\e$B$,\e(B @code{mmdf} \e$B<oJL$G$"$k$+$I$&$+$rD4$Y$k$?$a\e(B
+\e$B$K\e(B @code{nndoc-mmdf-type-p} \e$B$,8F$S=P$5$l!"$=$7$F0J2<F1MM$KB3$-$^$9!#$3$l\e(B
+\e$B$i$N<oJL=R8l4X?t$O!"$=$NJ8=q$,$=$N<oJL$G$J$$>l9g$O\e(B @code{nil} \e$B$rJV$7!"$=\e(B
+\e$B$N<oJL$G$"$k>l9g$O\e(B @code{t} \e$B$rJV$7!"$=$N<oJL$+$b$7$l$J$$$H$-$O?t;z$rJV$5\e(B
+\e$B$J$/$F$O$J$j$^$;$s!#9b$$?t;z$O9b$$2DG=@-$r0UL#$7!"Dc$$?t;z$ODc$$2DG=@-$r\e(B
+\e$B0UL#$7$^$9!#\e(B@samp{0} \e$B$O@5$7$$CM$NCf$G$b$C$H$bDc$$?t;z$G$9!#\e(B
 
 @node SOUP
 @subsection SOUP
 @cindex SOUP
 @cindex offline
 
-PC \e$B$N@$3&$N?M!9$O$h$/!"\e(B``\e$B%*%U%i%$%s\e(B'' \e$B%K%e!<%9%j!<%@$K$D$$$FOC$r\e(B
-\e$B$7$F$$$^$9!#$3$l$O%j!<%@$H%K%e!<%9G[Aw$r9gBN$5$;$?!"<B:_$9$k%b%s\e(B
-\e$B%9%?!<$G$9!#FbB"%b%G%`%W%m%0%i%`IU$-$G$M!#$-$c$O$O\e(B!
+PC \e$B$N@$3&$N?M!9$O$h$/!"\e(B``\e$B%*%U%i%$%s\e(B'' \e$B%K%e!<%9%j!<%@$K$D$$$FOC$r$7$F$$$^\e(B
+\e$B$9!#$3$l$O%j!<%@$H%K%e!<%9G[Aw$r9gBN$5$;$?!"<B:_$9$k%b%s%9%?!<$G$9!#FbB"\e(B
+\e$B%b%G%`%W%m%0%i%`IU$-$G$M!#$-$c$O$O\e(B!
 
-\e$B$b$A$m$s!"2f$i$,\e(B Unix \e$B%-%A%,%$$N?M4V6!$O\e(B @code{uucp} \e$B$@$H$+\e(B
-@code{nntpd} \e$B$N$h$&$J$b$N$r;H$$!"?@$NNN0h$?$k%a!<%k!"%K%e!<%9$N\e(B
-\e$BG[Aw$r@5$7$/@_Dj$9$k$N$G$9!#$=$7$FKM$?$A$O$?$@IaDL$N%K%e!<%9%j!<\e(B
-\e$B%@$r;H$$$^$9!#\e(B
+\e$B$b$A$m$s!"2f$i$,\e(B Unix \e$B%-%A%,%$$N?M4V6!$O\e(B @code{uucp} \e$B$@$H\e(B
+\e$B$+\e(B @code{nntpd} \e$B$N$h$&$J$b$N$r;H$$!"?@$NNN0h$?$k%a!<%k!"%K%e!<%9$NG[Aw$r\e(B
+\e$B@5$7$/@_Dj$9$k$N$G$9!#$=$7$FKM$?$A$O$?$@IaDL$N%K%e!<%9%j!<%@$r;H$$$^$9!#\e(B
 
-\e$B$7$+$7!"$"$J$?$,$H$F$bCY$$%b%G%`$r;}$C$F$$$F$3$l$i$r@5$7$/@_Dj$9\e(B
-\e$B$k$3$H$K6=L#$,L5$1$l$P!"G>$_$=$K3Z$r$5$;$kJ}$r$9$k$N$b;~$K$OJXMx\e(B
-\e$B$G$9!#\e(B
+\e$B$7$+$7!"$"$J$?$,$H$F$bCY$$%b%G%`$r;}$C$F$$$F$3$l$i$r@5$7$/@_Dj$9$k$3$H$K\e(B
+\e$B6=L#$,L5$1$l$P!"G>$_$=$K3Z$r$5$;$kJ}$r$9$k$N$b;~$K$OJXMx$G$9!#\e(B
 
-@sc{soup} \e$B$H8F$P$l$k%U%!%$%k7A<0$O%K%e!<%9$H%a!<%k$r%5!<%P!<$+$i\e(B
-\e$B2H$N%^%7%s$X$HE>Aw$7!"$=$l$r$^$?La$9$?$a$K3+H/$5$l$^$7$?!#$A$g$C\e(B
-\e$B$HLLE]$/$5$$$+$b$7$l$J$$$1$I$M!#\e(B
+@sc{soup} \e$B$H8F$P$l$k%U%!%$%k7A<0$O%K%e!<%9$H%a!<%k$r%5!<%P!<$+$i2H$N%^%7\e(B
+\e$B%s$X$HE>Aw$7!"$=$l$r$^$?La$9$?$a$K3+H/$5$l$^$7$?!#$A$g$C$HLLE]$/$5$$$+$b\e(B
+\e$B$7$l$J$$$1$I$M!#\e(B
 
 \e$B$O$8$a$K$$$/$D$+MQ8l$r!#\e(B
 
 @table @dfn
 
 @item server
-\e$B$3$l$O30$N@$3&$K7R$,$C$F$$$F!"$"$J$?$,%K%e!<%9$H%a!<%k$rAw<u?.$9\e(B
-\e$B$k%^%7%s$G$9!#\e(B
+\e$B$3$l$O30$N@$3&$K7R$,$C$F$$$F!"$"$J$?$,%K%e!<%9$H%a!<%k$rAw<u?.$9$k%^%7%s\e(B
+\e$B$G$9!#\e(B
 
 @item home machine
-\e$B$3$l$O$"$J$?$,<B:]$KFI$s$@$jJV;v$r=q$$$?$j$7$?$$%^%7%s$G$9!#$3$l\e(B
-\e$B$OIaDL!"B>$N@$3&$H$$$+$J$k7A$G$b@\B3$5$l$F$$$^$;$s!#\e(B
+\e$B$3$l$O$"$J$?$,<B:]$KFI$s$@$jJV;v$r=q$$$?$j$7$?$$%^%7%s$G$9!#$3$l$OIaDL!"\e(B
+\e$BB>$N@$3&$H$$$+$J$k7A$G$b@\B3$5$l$F$$$^$;$s!#\e(B
 
 @item packet
 \e$B%a%C%;!<%8$HL?Na$r4^$s$@$b$N!#%Q%1%C%H$K$OFs<oN`$"$j$^$9!#\e(B
 
 @table @dfn
 @item message packets
-\e$B$3$l$O%5!<%P!<$G:n$i$l$k%Q%1%C%H$G!"IaDL$O$"$J$?$,FI$`$?$a$N$?\e(B
-\e$B$/$5$s$N%a%C%;!<%8$,4^$^$l$F$$$^$9!#$3$l$i$O=i4|@_Dj$G$O\e(B
-@file{SoupoutX.tgz} \e$B$H$$$&L>A0$G$9!#$3$3$G\e(B @var{x} \e$B$O?t;z$G$9!#\e(B
+\e$B$3$l$O%5!<%P!<$G:n$i$l$k%Q%1%C%H$G!"IaDL$O$"$J$?$,FI$`$?$a$N$?$/$5$s$N%a%C\e(B
+\e$B%;!<%8$,4^$^$l$F$$$^$9!#$3$l$i$O=i4|@_Dj$G$O\e(B @file{SoupoutX.tgz} \e$B$H$$$&\e(B
+\e$BL>A0$G$9!#$3$3$G\e(B @var{x} \e$B$O?t;z$G$9!#\e(B
 
 @item response packets
-(\e$BJV?.%Q%1%C%H\e(B)
-\e$B$3$N%Q%1%C%H$O<+Bp%^%7%s$G:n$i$l$k%Q%1%C%H$G!"IaDL$O$"$J$?$N=q$$\e(B
-\e$B$?JV;v$,4^$^$l$F$$$^$9!#$3$l$i$O=i4|@_Dj$G$O\e(B
-@file{SoupinX.tgz} \e$B$H$$$&L>A0$G$9!#$3$3$G\e(B @var{x} \e$B$O?t;z$G$9!#\e(B
+(\e$BJV?.%Q%1%C%H\e(B) \e$B$3$N%Q%1%C%H$O<+Bp%^%7%s$G:n$i$l$k%Q%1%C%H$G!"IaDL$O$"$J\e(B
+\e$B$?$N=q$$$?JV;v$,4^$^$l$F$$$^$9!#$3$l$i$O=i4|@_Dj$G\e(B
+\e$B$O\e(B @file{SoupinX.tgz} \e$B$H$$$&L>A0$G$9!#$3$3$G\e(B @var{x} \e$B$O?t;z$G$9!#\e(B
 
 @end table
 
 @end table
 
-
 @enumerate
 
 @item
 \e$B$^$:\e(B @sc{soup} \e$B%Q%1%C%H$r:n$k$?$a$K%5!<%P!<$K%m%0%$%s$7$^$9!#\e(B
-@sc{soup} \e$B$N$?$a$N@lMQ$N%V%D\e(B (@code{awk} \e$B%W%m%0%i%`$N$h$&$J\e(B) \e$B$r\e(B
-\e$B;H$C$F$bNI$$$7!"\e(B gnus \e$B$N\e(B @sc{soup} \e$BL?Na$r;H$C$F%Q%1%C%H$r:n$C$F\e(B
-\e$B$bNI$$$G$9\e(B (@kbd{O s} \e$B$"$k$$$O\e(B @kbd{G s b} \e$B$=$7$F\e(B @kbd{G s p})
+@sc{soup} \e$B$N$?$a$N@lMQ$N%V%D\e(B (@code{awk} \e$B%W%m%0%i%`$N$h$&$J\e(B) \e$B$r;H$C$F$b\e(B
+\e$BNI$$$7!"\e(Bgnus \e$B$N\e(B @sc{soup} \e$BL?Na$r;H$C$F%Q%1%C%H$r:n$C$F$bNI$$$G\e(B
+\e$B$9\e(B (@kbd{O s} \e$B$"$k$$$O\e(B @kbd{G s b} \e$B$=$7$F\e(B @kbd{G s p})
+
 (@pxref{SOUP Commands})\e$B!#\e(B
 
 @item
-\e$B%Q%1%C%H$r<+Bp$KE>Aw$7$^$9!#EE<V$G!"A%$G!"<+F0<V$G!"$"$k$$$O%b%G\e(B
-\e$B%`$G!"2?$G$b$$$$$G$9!#\e(B
+\e$B%Q%1%C%H$r<+Bp$KE>Aw$7$^$9!#EE<V$G!"A%$G!"<+F0<V$G!"$"$k$$$O%b%G%`$G!"2?\e(B
+\e$B$G$b$$$$$G$9!#\e(B
 
 @item
 \e$B%Q%1%C%H$r$"$J$?$N%[!<%`%G%#%l%/%H%j!<$KCV$-$^$9!#\e(B
 
 @item
-Gnus \e$B$r$"$J$?$N<+Bp%^%7%s$G$+$CHt$P$7$F!"\e(B @code{nnsoup} \e$B%P%C%/%(\e(B
-\e$B%s%I$r4pK\%5!<%P!<$"$k$$$OFs<!%5!<%P!<$H$7$F;HMQ$7$^$9!#\e(B
+Gnus \e$B$r$"$J$?$N<+Bp%^%7%s$G$+$CHt$P$7$F!"\e(B@code{nnsoup} \e$B%P%C%/%(%s%I$r4p\e(B
+\e$BK\%5!<%P!<$"$k$$$OFs<!%5!<%P!<$H$7$F;HMQ$7$^$9!#\e(B
 
 @item
-\e$B5-;v$d%a!<%k$rFI$s$GI,MW$J$d$D$KJV;v$r=q$$$F%U%)%m!<%"%C%W5-;v$r\e(B
-\e$B=q$-$^$9\e(B (@pxref{SOUP Replies})\e$B!#\e(B
+\e$B5-;v$d%a!<%k$rFI$s$GI,MW$J$d$D$KJV;v$r=q$$$F%U%)%m!<%"%C%W5-;v$r=q$-$^\e(B
+\e$B$9\e(B (@pxref{SOUP Replies})\e$B!#\e(B
 
 @item
-@kbd{G s r} \e$BL?Na$r<B9T$7$F!"$3$l$i$NJV;v$r\e(B @sc{soup} \e$B%Q%1%C%H$K\e(B
-\e$B:-Jq$7$^$9!#\e(B
+@kbd{G s r} \e$BL?Na$r<B9T$7$F!"$3$l$i$NJV;v$r\e(B @sc{soup} \e$B%Q%1%C%H$K:-Jq$7$^\e(B
+\e$B$9!#\e(B
 
 @item
 \e$B$3$N%Q%1%C%H$r%5!<%P!<$KE>Aw$7$^$9!#\e(B
@@ -12040,17 +12870,16 @@ Gnus \e$B$+$i\e(B @kbd{G s s} \e$BL?Na$r;H$C$F$3$N%Q%1%C%H$+$i%a!<%k$r=P$7$^$9!#\e(B
 
 @end enumerate
 
-\e$B$D$^$j4pK\E*$KFs<TJ,3d%7%9%F%`$,$G$-$?$3$H$K$J$j$^$9\e(B ---
-@code{nnsoup} \e$B$rFI$`$?$a$K!"\e(Bgnus \e$B$r\e(B @sc{soup} \e$B%Q%1%C%H$N:-Jq$HAw\e(B
+\e$B$D$^$j4pK\E*$KFs<TJ,3d%7%9%F%`$,$G$-$?$3$H$K$J$j$^\e(B
+\e$B$9\e(B --- @code{nnsoup} \e$B$rFI$`$?$a$K!"\e(Bgnus \e$B$r\e(B @sc{soup} \e$B%Q%1%C%H$N:-Jq$HAw\e(B
 \e$B=P$K;H$$$^$9!#\e(B
 
 @menu
-* SOUP Commands::     @sc{soup} \e$B%Q%1%C%H$r:n@.!"Aw=P$9$kL?Na!#\e(B
-* SOUP Groups::       @sc{soup} \e$B%Q%1%C%H$rFI$`%P%C%/%(%s%I!#\e(B
-* SOUP Replies::      @code{nnsoup} \e$B$K%a!<%k$H%K%e!<%9$r0z$-7Q$,$;$kJ}K!!#\e(B
+* SOUP Commands:: @sc{soup} \e$B%Q%1%C%H$r:n@.!"Aw=P$9$kL?Na\e(B
+* SOUP Groups::   @sc{soup} \e$B%Q%1%C%H$rFI$`%P%C%/%(%s%I\e(B
+* SOUP Replies::  @code{nnsoup} \e$B$K%a!<%k$H%K%e!<%9$r0z$-7Q$,$;$kJ}K!\e(B
 @end menu
 
-
 @node SOUP Commands
 @subsubsection SOUP \e$BL?Na\e(B
 
@@ -12060,27 +12889,26 @@ Gnus \e$B$+$i\e(B @kbd{G s s} \e$BL?Na$r;H$C$F$3$N%Q%1%C%H$+$i%a!<%k$r=P$7$^$9!#\e(B
 @item G s b
 @kindex G s b (Group)
 @findex gnus-group-brew-soup
-\e$B8=:_$N%0%k!<%W$NA4$F$NL$FI5-;v$r:-Jq$9$k\e(B
-(@code{gnus-group-brew-soup})\e$B!#$3$N%3%^%s%I$O%W%m%;%9\e(B/\e$B@\F,0z?t$N\e(B
-\e$B=,47$K=>$$$^$9!#\e(B
+\e$B8=:_$N%0%k!<%W$NA4$F$NL$FI5-;v$r:-Jq$9\e(B
+\e$B$k\e(B (@code{gnus-group-brew-soup})\e$B!#$3$N%3%^%s%I$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B
+\e$B$K=>$$$^$9!#\e(B
 
 @item G s w
 @kindex G s w (Group)
 @findex gnus-soup-save-areas
-\e$BA4$F$N\e(B @sc{soup} \e$B%G!<%?%U%!%$%k$rJ]B8$7$^$9\e(B
-(@code{gnus-soup-save-areas})\e$B!#\e(B
+\e$BA4$F$N\e(B @sc{soup} \e$B%G!<%?%U%!%$%k$rJ]B8$7$^\e(B
+\e$B$9\e(B (@code{gnus-soup-save-areas})\e$B!#\e(B
 
 @item G s s
 @kindex G s s (Group)
 @findex gnus-soup-send-replies
-\e$BJV?.%Q%1%C%H$+$iA4$F$NJV?.$rAw=P$9$k\e(B
-(@code{gnus-soup-send-replies})\e$B!#\e(B
+\e$BJV?.%Q%1%C%H$+$iA4$F$NJV?.$rAw=P$9$k\e(B (@code{gnus-soup-send-replies})\e$B!#\e(B
 
 @item G s p
 @kindex G s p (Group)
 @findex gnus-soup-pack-packet
-\e$BA4$F$N%U%!%$%k$r\e(B  @sc{soup} \e$B%Q%1%C%H$K:-Jq$9$k\e(B
-(@code{gnus-soup-pack-packet})\e$B!#\e(B
+\e$BA4$F$N%U%!%$%k$r\e(B  @sc{soup} \e$B%Q%1%C%H$K:-Jq$9\e(B
+\e$B$k\e(B (@code{gnus-soup-pack-packet})\e$B!#\e(B
 
 @item G s r
 @kindex G s r (Group)
@@ -12091,21 +12919,20 @@ Gnus \e$B$+$i\e(B @kbd{G s s} \e$BL?Na$r;H$C$F$3$N%Q%1%C%H$+$i%a!<%k$r=P$7$^$9!#\e(B
 @kindex O s (Summary)
 @findex gnus-soup-add-article
 \e$B$3$N35N,%b!<%IL?Na$O!"8=:_$N5-;v$r\e(B @sc{soup} \e$B%Q%1%C%H$KDI2C$7$^\e(B
-\e$B$9\e(B (@code{gnus-soup-add-article})\e$B!#$3$l$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B
-\e$B$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B$9\e(B (@code{gnus-soup-add-article})\e$B!#$3$l$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$K=>$$$^\e(B
+\e$B$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @end table
 
-
-gnus \e$B$,$3$l$i$N<BBN$r$I$3$KCV$/$+$r%+%9%?%^%$%:$9$k$$$/$D$+$NJQ\e(B
-\e$B?t$,$"$j$^$9!#\e(B
+gnus \e$B$,$3$l$i$N<BBN$r$I$3$KCV$/$+$r%+%9%?%^%$%:$9$k$$$/$D$+$NJQ?t$,$"$j\e(B
+\e$B$^$9!#\e(B
 
 @table @code
 
 @item gnus-soup-directory
 @vindex gnus-soup-directory
-@sc{soup} \e$B%Q%1%C%H$r:n@.Cf$K\e(B gnus \e$B$,Cf4V%U%!%$%k$rJ]B8$9$k%G%#%l\e(B
-\e$B%/%H%j!<!#=i4|@_DjCM$O\e(B @file{~/SoupBrew/}\e$B!#\e(B
+@sc{soup} \e$B%Q%1%C%H$r:n@.Cf$K\e(B gnus \e$B$,Cf4V%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<!#\e(B
+\e$B=i4|@_DjCM$O\e(B @file{~/SoupBrew/}\e$B!#\e(B
 
 @item gnus-soup-replies-directory
 @vindex gnus-soup-replies-directory
@@ -12114,18 +12941,18 @@ gnus \e$B$,$3$l$i$N<BBN$r$I$3$KCV$/$+$r%+%9%?%^%$%:$9$k$$$/$D$+$NJQ\e(B
 
 @item gnus-soup-prefix-file
 @vindex gnus-soup-prefix-file
-gnus \e$B$,:G8e$K;H$C$?@\F,0z?t$rJ]B8$9$k%U%!%$%kL>!#=i4|@_DjCM$O\e(B
-@samp{gnus-prefix}\e$B!#\e(B
+gnus \e$B$,:G8e$K;H$C$?@\F,0z?t$rJ]B8$9$k%U%!%$%kL>!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{gnus-prefix}\e$B!#\e(B
 
 @item gnus-soup-packer
 @vindex gnus-soup-packer
-@sc{soup} \e$B%Q%1%C%H$r:-Jq$9$kL?NaJ8;zNs$N7A<0!#=i4|@_DjCM$O\e(B
-@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}\e$B!#\e(B
+@sc{soup} \e$B%Q%1%C%H$r:-Jq$9$kL?NaJ8;zNs$N7A<0!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}\e$B!#\e(B
 
 @item gnus-soup-unpacker
 @vindex gnus-soup-unpacker
-@sc{soup} \e$B%Q%1%C%H$r<h$j=P$9L?NaJ8;zNs$N7A<0!#=i4|@_DjCM$O\e(B
-@samp{gunzip -c %s | tar xvf -}\e$B!#\e(B
+@sc{soup} \e$B%Q%1%C%H$r<h$j=P$9L?NaJ8;zNs$N7A<0!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{gunzip -c %s | tar xvf -}\e$B!#\e(B
 
 @item gnus-soup-packet-directory
 @vindex gnus-soup-packet-directory
@@ -12133,19 +12960,18 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item gnus-soup-packet-regexp
 @vindex gnus-soup-packet-regexp
-@code{gnus-soup-packet-directory} \e$BFb$N\e(B @sc{soup} \e$B%Q%1%C%H$K%^%C\e(B
-\e$B%A$9$k@55,I=8=!#\e(B
+@code{gnus-soup-packet-directory} \e$BFb$N\e(B @sc{soup} \e$B%Q%1%C%H$K%^%C%A$9$k@5\e(B
+\e$B5,I=8=!#\e(B
 
 @end table
 
-
 @node SOUP Groups
 @subsubsection @sc{soup} \e$B%0%k!<%W\e(B
 @cindex nnsoup
 
-@code{nnsoup} \e$B$O\e(B @sc{soup} \e$B%Q%1%C%H$rFI$`$?$a$N%P%C%/%(%s%I$G$9!#\e(B
-\e$B$3$l$OF~$C$F$-$?%Q%1%C%H$rFI$_!"$=$l$r<h$j=P$7$F!"$"$J$?$,2K$J$H\e(B
-\e$B$-$KFI$`%G%#%l%/%H%j!<$KE83+$7$^$9!#\e(B
+@code{nnsoup} \e$B$O\e(B @sc{soup} \e$B%Q%1%C%H$rFI$`$?$a$N%P%C%/%(%s%I$G$9!#$3$l$O\e(B
+\e$BF~$C$F$-$?%Q%1%C%H$rFI$_!"$=$l$r<h$j=P$7$F!"$"$J$?$,2K$J$H$-$KFI$`%G%#%l\e(B
+\e$B%/%H%j!<$KE83+$7$^$9!#\e(B
 
 \e$B$3$l$i$O$3$N?6$kIq$$$r%+%9%?%^%$%:$G$-$kJQ?t$G$9!#\e(B
 
@@ -12153,36 +12979,36 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item nnsoup-tmp-directory
 @vindex nnsoup-tmp-directory
-@code{nnsoup} \e$B$,\e(B @sc{soup} \e$B%Q%1%C%H$r<h$j=P$9$H$-!"$3$N%G%#%l%/\e(B
-\e$B%H%jFb$G9T$J$&\e(B (\e$B=i4|@_Dj$O\e(B @file{/tmp/})\e$B!#\e(B
+@code{nnsoup} \e$B$,\e(B @sc{soup} \e$B%Q%1%C%H$r<h$j=P$9$H$-!"$3$N%G%#%l%/%H%jFb$G\e(B
+\e$B9T$J$&\e(B (\e$B=i4|@_Dj$O\e(B @file{/tmp/})\e$B!#\e(B
 
 @item nnsoup-directory
 @vindex nnsoup-directory
-\e$B$=$7$F\e(B @code{nnsoup} \e$B$,$=$l$>$l$N%a%C%;!<%8$H:w0z%U%!%$%k$r$3$N\e(B
-\e$B%G%#%l%/%H%j!<$K0\F0$5$;$k!#=i4|@_Dj$O\e(B @file{~/SOUP/}\e$B!#\e(B
+\e$B$=$7$F\e(B @code{nnsoup} \e$B$,$=$l$>$l$N%a%C%;!<%8$H:w0z%U%!%$%k$r$3$N%G%#%l%/\e(B
+\e$B%H%j!<$K0\F0$5$;$k!#=i4|@_Dj$O\e(B @file{~/SOUP/}\e$B!#\e(B
 
 @item nnsoup-replies-directory
 @vindex nnsoup-replies-directory
-\e$BA4$F$NJV?.$O!"JV?.%Q%1%C%H$K:-Jq$5$l$kA0$K$3$N%G%#%l%/%H%j!<$K3J\e(B
-\e$BG<$5$l$k!#=i4|@_Dj$O\e(B @file{~/SOUP/replies/"}\e$B!#\e(B
+\e$BA4$F$NJV?.$O!"JV?.%Q%1%C%H$K:-Jq$5$l$kA0$K$3$N%G%#%l%/%H%j!<$K3JG<$5$l$k!#\e(B
+\e$B=i4|@_Dj$O\e(B @file{~/SOUP/replies/"}\e$B!#\e(B
 
 @item nnsoup-replies-format-type
 @vindex nnsoup-replies-format-type
-\e$BJV?.%Q%1%C%H$N\e(B @sc{soup} \e$B7A<0!#=i4|@_DjCM$O\e(B @samp{?n} (rnews)
-\e$B$G!"$3$NJQ?t$K$O?($k$Y$-$G$O$J$$$H;d$O;W$$$^$9!#$?$V$sJ8=q$KL@5-\e(B
-\e$B$9$Y$-$G$5$($J$+$C$?$M!#$A$'$C\e(B! \e$B$b$&<jCY$l$+!#\e(B
+\e$BJV?.%Q%1%C%H$N\e(B @sc{soup} \e$B7A<0!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{?n} (rnews) \e$B$G!"$3$NJQ?t$K$O?($k$Y$-$G$O$J$$$H;d$O;W$$$^$9!#$?\e(B
+\e$B$V$sJ8=q$KL@5-$9$Y$-$G$5$($J$+$C$?$M!#$A$'$C\e(B! \e$B$b$&<jCY$l$+!#\e(B
 
 @item nnsoup-replies-index-type
 @vindex nnsoup-replies-index-type
-\e$BJV?.%Q%1%C%H$N:w0z$N<oN`!#=i4|@_DjCM$O\e(B @samp{?n} \e$B$G!"0UL#$O\e(B
-``\e$B$J$7\e(B''\e$B!#$3$l$b$$$8$k$s$8$c$J$$$h\e(B!
+\e$BJV?.%Q%1%C%H$N:w0z$N<oN`!#=i4|@_DjCM$O\e(B @samp{?n} \e$B$G!"0UL#$O\e(B ``\e$B$J$7\e(B''\e$B!#$3\e(B
+\e$B$l$b$$$8$k$s$8$c$J$$$h\e(B!
 
 @item nnsoup-active-file
 @vindex nnsoup-active-file
-@code{nnsoup} \e$B$,$?$/$5$s$N>pJs$r3JG<$9$k>l=j!#$3$l$O\e(B @code{nntp}
-\e$B$N0UL#$G$N\e(B ``\e$B%"%/%F%#%V%U%!%$%k\e(B'' \e$B$G$O$J$/!"\e(BEmacs Lisp \e$B$N%U%!%$\e(B
-\e$B%k$G$9!#$3$N%U%!%$%k$rL5$/$7$F$7$^$C$?$j!"2?$+2u$7$F$7$^$C$?$i!"\e(B
-\e$B$"$J$?$O;`$K$^$9!#=i4|@_DjCM$O\e(B @file{~/SOUP/active} \e$B$G$9!#\e(B
+@code{nnsoup} \e$B$,$?$/$5$s$N>pJs$r3JG<$9$k>l=j!#$3$l$O\e(B @code{nntp} \e$B$N0UL#\e(B
+\e$B$G$N\e(B ``\e$B%"%/%F%#%V%U%!%$%k\e(B'' \e$B$G$O$J$/!"\e(BEmacs Lisp \e$B$N%U%!%$%k$G$9!#$3$N%U%!\e(B
+\e$B%$%k$rL5$/$7$F$7$^$C$?$j!"2?$+2u$7$F$7$^$C$?$i!"$"$J$?$O;`$K$^$9!#=i4|@_\e(B
+\e$BDjCM$O\e(B @file{~/SOUP/active} \e$B$G$9!#\e(B
 
 @item nnsoup-packer
 @vindex nnsoup-packer
@@ -12191,13 +13017,12 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item nnsoup-unpacker
 @vindex nnsoup-unpacker
-\e$BF~$C$F$/$k\e(B @sc{soup} \e$B%Q%1%C%H$r<h$j=P$9$?$a$NL?NaJ8;zNs$N7A<0!#\e(B
-\e$B=i4|@_DjCM$O\e(B @samp{gunzip -c %s | tar xvf -}\e$B!#\e(B
+\e$BF~$C$F$/$k\e(B @sc{soup} \e$B%Q%1%C%H$r<h$j=P$9$?$a$NL?NaJ8;zNs$N7A<0!#=i4|@_Dj\e(B
+\e$BCM$O\e(B @samp{gunzip -c %s | tar xvf -}\e$B!#\e(B
 
 @item nnsoup-packet-directory
 @vindex nnsoup-packet-directory
-\e$BF~$C$F$-$?%Q%1%C%H$r\e(B @code{nnsoup} \e$B$,C5$9>l=j!#=i4|@_DjCM$O\e(B
-@file{~/}\e$B!#\e(B
+\e$BF~$C$F$-$?%Q%1%C%H$r\e(B @code{nnsoup} \e$B$,C5$9>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item nnsoup-packet-regexp
 @vindex nnsoup-packet-regexp
@@ -12206,23 +13031,20 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item nnsoup-always-save
 @vindex nnsoup-always-save
-@code{nil} \e$B0J30$G$"$l$P!"%a%C%;!<%8$rEj9F$7$?8e$KJV?.%P%C%U%!$r\e(B
-\e$BJ]B8$9$k!#\e(B
+@code{nil} \e$B0J30$G$"$l$P!"%a%C%;!<%8$rEj9F$7$?8e$KJV?.%P%C%U%!$rJ]B8$9$k!#\e(B
 
 @end table
 
-
 @node SOUP Replies
 @subsubsection SOUP \e$BJV?.\e(B
 
-\e$BC1$K\e(B @code{nnsoup} \e$B$r;H$&$@$1$G$O!"\e(B@sc{soup} \e$BJV?.%Q%1%C%HCf$N$"\e(B
-\e$B$J$?$NEj9F$H%a!<%k$NAw?.$,!"KbK!$N$h$&$K<+F0E*$K=*N;$9$k$o$1$G$O\e(B
-\e$B$"$j$^$;$s!#$=$l$r5/$3$9$K$O$b$&$A$g$C$HF/$+$J$/$F$O$$$1$^$;$s!#\e(B
+\e$BC1$K\e(B @code{nnsoup} \e$B$r;H$&$@$1$G$O!"\e(B@sc{soup} \e$BJV?.%Q%1%C%HCf$N$"$J$?$NEj\e(B
+\e$B9F$H%a!<%k$NAw?.$,!"KbK!$N$h$&$K<+F0E*$K=*N;$9$k$o$1$G$O$"$j$^$;$s!#$=$l\e(B
+\e$B$r5/$3$9$K$O$b$&$A$g$C$HF/$+$J$/$F$O$$$1$^$;$s!#\e(B
 
 @findex nnsoup-set-variables
-@code{nnsoup-set-variables} \e$BL?Na$O!"$"$J$?$NA4$F$N%U%)%m!<%"%C%W\e(B
-\e$B5-;v$HJV?.$r\e(B @sc{soup} \e$B%7%9%F%`$K3N<B$K=*N;$5$;$k$h$&$K!"E,@Z$J\e(B
-\e$BJQ?t$r@_Dj$7$^$9!#\e(B
+@code{nnsoup-set-variables} \e$BL?Na$O!"$"$J$?$NA4$F$N%U%)%m!<%"%C%W5-;v$HJV\e(B
+\e$B?.$r\e(B @sc{soup} \e$B%7%9%F%`$K3N<B$K=*N;$5$;$k$h$&$K!"E,@Z$JJQ?t$r@_Dj$7$^$9!#\e(B
 
 \e$BFCJL$K!"$3$l$,<B:]$K9T$o$l$k$3$H$G$9!#\e(B
 
@@ -12231,23 +13053,22 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 (setq message-send-mail-function 'nnsoup-request-mail)
 @end lisp
 
-\e$B$=$l$@$1$G$9!"$[$s$H$K!#$b$7\e(B @sc{soup} \e$B%7%9%F%`$K%K%e!<%9$@$1$r\e(B
-\e$BF~$l$?$+$C$?$i!":G=i$N9T$@$1$r;H$C$F$/$@$5$$!#$b$7%a!<%k$@$1$r\e(B
-@sc{soup} \e$B$5$;$?$+$C$?$i!"FsHVL\$r;H$C$F$/$@$5$$!#\e(B
-
+\e$B$=$l$@$1$G$9!"$[$s$H$K!#$b$7\e(B @sc{soup} \e$B%7%9%F%`$K%K%e!<%9$@$1$rF~$l$?$+$C\e(B
+\e$B$?$i!":G=i$N9T$@$1$r;H$C$F$/$@$5$$!#$b$7%a!<%k$@$1$r\e(B @sc{soup} \e$B$5$;$?$+$C\e(B
+\e$B$?$i!"FsHVL\$r;H$C$F$/$@$5$$!#\e(B
 
 @node Mail-To-News Gateways
 @subsection \e$B%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$\e(B
 @cindex mail-to-news gateways
 @cindex gateways
 
-\e$B$b$7$"$J$?$N%m!<%+%k$N\e(B @code{nntp} \e$B%5!<%P!<$,!"2?$i$+$NM}M3$GEj\e(B
-\e$B9F$r5v2D$7$F$$$J$1$l$P!"?t$"$k%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$\e(B
-\e$B$r;H$C$FEj9F$9$k$3$H$,$G$-$^$9!#\e(B@code{nngateway} \e$B%P%C%/%(%s%I$O\e(B
-\e$B$3$N%$%s%?!<%U%'!<%9$rDs6!$7$^$9!#\e(B
+\e$B$b$7$"$J$?$N%m!<%+%k$N\e(B @code{nntp} \e$B%5!<%P!<$,!"2?$i$+$NM}M3$GEj9F$r5v2D\e(B
+\e$B$7$F$$$J$1$l$P!"?t$"$k%a!<%k$+$i%K%e!<%9$X$N%2!<%H%&%'%$$r;H$C$FEj9F$9$k\e(B
+\e$B$3$H$,$G$-$^$9!#\e(B@code{nngateway} \e$B%P%C%/%(%s%I$O$3$N%$%s%?!<%U%'!<%9$rDs\e(B
+\e$B6!$7$^$9!#\e(B
 
-\e$B$3$N%P%C%/%(%s%I$+$i$O2?$bFI$_=P$;$J$$$3$H$KCm0U$7$F$/$@$5$$\e(B ---
-\e$B$3$l$OEj9F$9$k$?$a$@$1$K;H$o$l$^$9!#\e(B
+\e$B$3$N%P%C%/%(%s%I$+$i$O2?$bFI$_=P$;$J$$$3$H$KCm0U$7$F$/$@$5$$\e(B --- \e$B$3$l$O\e(B
+\e$BEj9F$9$k$?$a$@$1$K;H$o$l$^$9!#\e(B
 
 \e$B0J2<$O%5!<%P!<JQ?t$G$9!#\e(B
 
@@ -12258,16 +13079,16 @@ gnus \e$B$,JV?.%Q%1%C%H$rC5$7$K9T$/>l=j!#=i4|@_DjCM$O\e(B @file{~/}\e$B!#\e(B
 
 @item nngateway-header-transformation
 @vindex nngateway-header-transformation
-\e$B%K%e!<%9%X%C%@!<$O!"%a!<%k!&%K%e!<%9%2!<%H%&%'%$$,<u$1IU$1$i$l$k\e(B
-\e$B$h$&$K!"4qL/$J7A$KJQ7A$7$F$*$+$J$/$F$O$J$i$J$$;~$,$"$j$^$9!#$3$N\e(B
-\e$BJQ?t$O$I$s$JJQ7A=hM}$,8F$S=P$5$l$k$Y$-$+$r<($7$F$*$j!"=i4|@_DjCM\e(B
-\e$B$O\e(B @code{nngateway-simple-header-transformation} \e$B$K$J$C$F$$$^$9!#\e(B
-\e$B$3$N4X?t$OJQ7A$9$k%X%C%@!<$KNN0h@)8B\e(B(narrow)\e$B$5$l$F8F$S=P$5$l!"0l\e(B
-\e$B8D$N0z?t\e(B --- \e$B%2!<%H%&%'%$$N%"%I%l%9$rM?$($i$l$^$9!#\e(B
+\e$B%K%e!<%9%X%C%@!<$O!"%a!<%k!&%K%e!<%9%2!<%H%&%'%$$,<u$1IU$1$i$l$k$h$&$K!"\e(B
+\e$B4qL/$J7A$KJQ7A$7$F$*$+$J$/$F$O$J$i$J$$;~$,$"$j$^$9!#$3$NJQ?t$O$I$s$JJQ7A\e(B
+\e$B=hM}$,8F$S=P$5$l$k$Y$-$+$r<($7$F$*$j!"=i4|@_DjCM\e(B
+\e$B$O\e(B @code{nngateway-simple-header-transformation} \e$B$K$J$C$F$$$^$9!#$3$N4X\e(B
+\e$B?t$OJQ7A$9$k%X%C%@!<$KNN0h@)8B\e(B(narrow)\e$B$5$l$F8F$S=P$5$l!"0l8D$N0z\e(B
+\e$B?t\e(B --- \e$B%2!<%H%&%'%$$N%"%I%l%9$rM?$($i$l$^$9!#\e(B
 
-\e$B=i4|@_DjCM$N4X?t$OC1$K?7$7$$\e(B @code{To} \e$B%X%C%@!<$r!"\e(B
-@code{Newsgroups} \e$B%X%C%@!<$H%2!<%H%&%'%$%"%I%l%9$r$b$H$KA^F~$7$^\e(B
-\e$B$9!#Nc$($P!"0J2<$N$h$&$J\e(B @code{Newsgroups} \e$B%X%C%@!<\e(B
+\e$B=i4|@_DjCM$N4X?t$OC1$K?7$7$$\e(B @code{To} \e$B%X%C%@!<$r!"\e(B@code{Newsgroups} \e$B%X%C\e(B
+\e$B%@!<$H%2!<%H%&%'%$%"%I%l%9$r$b$H$KA^F~$7$^$9!#Nc$($P!"0J2<$N$h$&\e(B
+\e$B$J\e(B@code{Newsgroups} \e$B%X%C%@!<\e(B
 
 @example
 Newsgroups: alt.religion.emacs
@@ -12304,7 +13125,6 @@ To: alt-religion-emacs@@GATEWAY
 
 @end table
 
-
 @end table
 
 \e$B$D$^$j!"$3$l$r;H$&$K$O!"$3$s$JIw$K$9$k$@$1$G$9!#\e(B
@@ -12313,140 +13133,241 @@ To: alt-religion-emacs@@GATEWAY
 (setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
 @end lisp
 
-
-
 @node IMAP
-@subsection @sc{imap}
+@subsection IMAP
 @cindex nnimap
-@cindex @sc{imap}
+@cindex IMAP
+
+IMAP \e$B$O%a!<%k\e(B (\e$B$b$7$/$O!"%K%e!<%9!"$b$7$/$O\e(B ...) \e$B$rFI$`$?$a$N%M%C%H%o!<\e(B
+\e$B%/%W%m%H%3%k$G$9!#8=BeIw$N\e(B NNTP \e$B$H9M$($F$/$@$5$$!#\e(BIMAP \e$B%5!<%P!<$X$N@\B3\e(B
+\e$B$O%K%e!<%9%5!<%P!<$X$N@\B3$HHs>o$K;w$F$$$F!"$=$N%5!<%P!<$N%M%C%H%o!<%/%"\e(B
+\e$B%I%l%9$r;XDj$9$k$@$1$K$J$C$F$$$^$9!#\e(B
 
-@sc{imap} is a network protocol for reading mail (or news, or ...), think of
-it as a modernized @sc{nntp}. Connecting to a @sc{imap} server is much similar to
-connecting to a news server, you just specify the network address of the
-server.
+\e$B$$$/$D$+$N\e(B @sc{imap} \e$B%5!<%P!<$r\e(B @code{~/.gnus} \e$B$G@_Dj$9$k$H!"$?$V$s$3$N\e(B
+\e$B$h$&$J$b$N$K$J$k$G$7$g$&\e(B:
 
-The following variables can be used to create a virtual @code{nnimap}
-server:
+@lisp
+(setq gnus-secondary-select-methods
+      '((nnimap "simpleserver") ; \e$BIaDL$N@_Dj\e(B
+        ; SSH \e$B%]!<%H$r%U%)%o!<%I$7$?%5!<%P!<\e(B:
+        (nnimap "dolk"
+                (nnimap-address "localhost")
+                (nnimap-server-port 1430))
+        ; \e$B%m!<%+%k%[%9%H$G1?E>$7$F$$$k\e(B UW \e$B%5!<%P!<\e(B:
+        (nnimap "barbar"
+                (nnimap-server-port 143)
+                (nnimap-address "localhost")
+                (nnimap-list-pattern ("INBOX" "mail/*")))
+        ; \e$BF?L>$G;H$($k\e(B cyrus \e$B$N8x=0%5!<%P!<\e(B:
+        (nnimap "cyrus.andrew.cmu.edu"
+                (nnimap-authenticator anonymous)
+                (nnimap-list-pattern "archive.*")
+                (nnimap-stream network))
+        ; \e$BI8=`$G$O$J$$%]!<%H$N\e(B SSL \e$B%5!<%P!<\e(B:
+        (nnimap "vic20"
+                (nnimap-address "vic20.somewhere.com")
+                (nnimap-server-port 9930)
+                (nnimap-stream ssl))))
+@end lisp
+
+\e$B0J2<$NJQ?t$O2>A[\e(B @code{nnimap} \e$B%5!<%P!<$r:n@.$9$k$?$a$K;H$&$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
 
 @table @code
 
 @item nnimap-address
 @vindex nnimap-address
 
-The address of the remote @sc{imap} server. Defaults to the virtual server
-name if not specified.
+\e$B1s3V\e(B IMAP \e$B%5!<%P!<$N%"%I%l%9$G$9!#;XDj$5$l$F$$$J$$>l9g$O2>A[%5!<%P!<$N$b\e(B
+\e$B$N$K$J$j$^$9!#\e(B
 
 @item nnimap-server-port
 @vindex nnimap-server-port
-Port on server to contact. Defaults to port 143, or 993 for SSL.
+\e$B@\B3$r;n$_$k%5!<%P!<$N%]!<%H$G$9!#=i4|CM$G$O!"%]!<%H\e(B 143 \e$B$+!"\e(BSSL \e$B$G\e(B
+\e$B$O\e(B 993 \e$B$G$9!#\e(B
+
+\e$B$3$l$O@0?t$G$J$1$l$P$J$j$^$;$s!#0J2<$O%5!<%P!<;XDj$NNc$G$9!#\e(B
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-server-port 4711))
+@end lisp
 
 @item nnimap-list-pattern
 @vindex nnimap-list-pattern
-String or list of strings of mailboxes to limit available groups
-to. This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via @sc{imap},
-you'll probably want to limit the mailboxes to those in @file{~/Mail/*}
-then.
+\e$B;HMQ2DG=$J%a!<%k%\%C%/%9$r@)8B$9$k$?$a$NJ8;zNs$+%j%9%H$G$9!#$3$l$O!"%5!<\e(B
+\e$B%P!<$KHs>o$KB?$/$N%a!<%k%\%C%/%9$,$"$k$1$l$I!"6=L#$N$"$k$b$N$O>/$7$@$1$G\e(B
+\e$B$"$k$H$-$K;HMQ$7$^$9!#%5!<%P!<$K$O%[!<%`%G%#%l%/%H%j!<$r\e(B IMAP \e$B7PM3$G=P$9\e(B
+\e$B$b$N$b$"$j$^$9$N$G!"$=$N>l9g$O$*$=$i$/%a!<%k%\%C%/%9\e(B
+\e$B$r\e(B @file{~/Mail/*} \e$B$K@)8B$7$?$$$G$7$g$&!#\e(B
 
-The string can also be a cons of REFERENCE and the string as above, what
-REFERENCE is used for is server specific, but on the University of
-Washington server it's a directory that will be concatenated with the
-mailbox.
+\e$BJ8;zNs$O\e(B REFERENCE \e$B$H>e$NJ8;zNs$H$N\e(B cons \e$B$G$"$k$3$H$b$G$-$^$9!#$I\e(B
+\e$B$N\e(B REFERENCE \e$B$,;HMQ$5$l$k$+$O%5!<%P!<FCM-$G$9$,!"%o%7%s%H%sBg3X$N%5!<%P!<\e(B
+\e$B$G$O!"%a!<%k%\%C%/%9$HO"7k$5$l$?%G%#%l%/%H%j!<$G$9!#\e(B
 
-Example:
+\e$B0J2<$O%5!<%P!<;XDj$NNc$G$9!#\e(B
 
 @lisp
-("INBOX" "Mail/*" "alt.sex.*" ("~friend/Mail/" . "list/*"))
+(nnimap "mail.server.com"
+        (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
+                               ("~friend/Mail/" . "list/*"))))
 @end lisp
 
 @item nnimap-stream
 @vindex nnimap-stream
-The type of stream used to connect to your server. By default, nnimap
-will use the most secure stream your server is capable of.
+\e$B%5!<%P!<$K@\B3$9$k$H$-$K;H$o$l$k%9%H%j!<%`$N7?$G$9!#=i4|@_Dj$G\e(B
+\e$B$O\e(B nnimap \e$B$O\e(B SSL \e$B$r=|$/0J2<$N$9$Y$F$r<+F0E*$K8!CN$7$F$=$l$r;H$$$^$9!#\e(B
+(SSL \e$B$O\e(B STARTTLS \e$B$GCV$-49$($i$l$F$$$^$9!#$3$l$O<+F08!=P$G$-$^$9$,!"$^$@\e(B
+\e$B9-HO0O$KG[Hw$5$l$F$$$^$;$s!#\e(B)
+
+\e$B0J2<$O%5!<%P!<;XDj$NNc$G$9!#\e(B
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-stream ssl))
+@end lisp
+
+@code{nnimap-stream} \e$B$NCM$O%7%s%\%k$G$J$1$l$P$J$i$J$$$3$H$KCm0U$7$F2<$5\e(B
+\e$B$$\e(B!
 
 @itemize @bullet
 @item
-@dfn{kerberos4:} Uses the `imtest' program.
+@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B kerberos 5) \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m\e(B
+\e$B%0%i%`$,I,MW$G$9!#\e(B
+@item
+@dfn{kerberos4:} kerberos 4 \e$B$r;H$$$^$9!#\e(B@samp{imtest} \e$B%W%m%0%i%`$,I,MW$G\e(B
+\e$B$9!#\e(B
 @item
-@dfn{ssl:} Uses OpenSSL or SSLeay.
+@dfn{starttls:} STARTTLS (SSL \e$B$KN`;w\e(B) \e$B$r;H$$$^$9!#30It%i%$%V%i\e(B
+\e$B%j\e(B @samp{starttls.el} \e$B$H\e(B @samp{starttls} \e$B%W%m%0%i%`$,I,MW$G$9!#\e(B
 @item
-@dfn{network:} Plain, TCP/IP network connection.
+@dfn{ssl:} SSL \e$B$r;H$$$^$9!#\e(BOpenSSL (@samp{openssl} \e$B%W%m%0%i\e(B
+\e$B%`\e(B) \e$B$+\e(B SSLeay (@samp{s_client}) \e$B$,I,MW$G$9!#\e(B
+@item
+@dfn{shell:} \e$B%7%'%kL?Na$r;H$C$F\e(B IMAP \e$B@\B3$r3+;O$7$^$9!#\e(B
+@item
+@dfn{network:} \e$B@8$N!"\e(BTCP/IP \e$B$N%M%C%H%o!<%/@\B3$G$9!#\e(B
 @end itemize
 
+@vindex imap-kerberos4-program
+@samp{imtest} \e$B%W%m%0%i%`$O\e(B Cyrus IMAPD \e$B$K4^$^$l$F$$$^$9!#\e(B
+nnimap \e$B$O\e(B @samp{imtest} \e$B%P!<%8%g%s\e(B 1.5.x \e$B$H\e(B 1.6.x \e$B$NN>J}$r%5%]!<%H$7$^$9!#\e(B
+\e$BJQ?t\e(B @code{imap-kerberos4-program} \e$B$O\e(B imtest \e$B%W%m%0%i%`$KEO$9%Q%?%a!<%?\e(B
+\e$B$r4^$_$^$9!#\e(B
+
+@vindex imap-ssl-program
+SSL \e$B@\B3$N$?$a$N\e(B OpenSSL \e$B%W%m%0%i%`$O\e(B @file{http://www.openssl.org/} \e$B$+\e(B
+\e$B$iF~<j$G$-$^$9!#\e(BOpenSSL \e$B$O0JA0$O\e(B SSLeay \e$B$H$7$FCN$i$l$F$$$?$b$N$G!"\e(B
+nnimap \e$B$O$=$l$b%5%]!<%H$7$^$9!#$7$+$7!"\e(BSSLeay \e$B$N:G?7HG$G$"$k\e(B 0.9.x \e$B$K$O\e(B
+\e$B=EBg$J%P%0$,$"$k$?$a;H$($^$;$s!#0JA0$NHG!"FC$K\e(B SSLeay 0.8.x \e$B$O;H$($k$3$H\e(B
+\e$B$,$o$+$C$F$$$^$9!#JQ?t\e(B @code{imap-ssl-program} \e$B$O\e(B OpenSSL/SSLeay \e$B$KEO$9\e(B
+\e$B%Q%?%a!<%?$r4^$_$^$9!#\e(B
+
+@vindex imap-shell-program
+@vindex imap-shell-host
+IMAP \e$B@\B3$K\e(B @code{shell} \e$B%9%H%j!<%`$r;H$&>l9g!"JQ\e(B
+\e$B?t\e(B @code{imap-shell-program} \e$B$O2?$N%W%m%0%i%`$r8F$V$+$r;XDj$7$^$9!#\e(B
+
 @item nnimap-authenticator
 @vindex nnimap-authenticator
 
-The authenticator used to connect to the server. By default, nnimap will
-use the most secure authenticator your server is capable of.
+\e$B%5!<%P!<$K@\B3$9$k$?$a$K;H$o$l$kG'>Z$G$9!#=i4|@_Dj$G$O!"\e(Bnnimap \e$B$O%5!<%P!<\e(B
+\e$B$,;HMQ2DG=$J0lHV0BA4$JG'>Z$r;HMQ$7$^$9!#\e(B
+
+\e$B0J2<$O%5!<%P!<;XDj$NNc$G$9!#\e(B
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-authenticator anonymous))
+@end lisp
+
+@code{nnimap-authenticator} \e$B$NCM$O%7%s%\%k$G$J$1$l$P$J$i$J$$$3$H$KCm0U$7\e(B
+\e$B$F2<$5$$\e(B!
 
 @itemize @bullet
 @item
-@dfn{kerberos4:} Kerberos authentication.
+@dfn{gssapi:} GSSAPI (\e$BIaDL$O\e(B kerberos 5) \e$BG'>Z$G$9!#30It%W%m%0%i\e(B
+\e$B%`\e(B @code{imtest} \e$B$,I,MW$G$9!#\e(B
+@item
+@dfn{kerberos4:} Kerberos \e$BG'>Z$G$9!#30It%W%m%0%i%`\e(B @code{imtest} \e$B$,I,MW\e(B
+\e$B$G$9!#\e(B
 @item
-@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
+@dfn{digest-md5:} DIGEST-MD5 \e$B$G0E9f2=$5$l$?\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#30\e(B
+\e$BIt%i%$%V%i%j\e(B @code{digest-md5.el} \e$B$,I,MW$G$9!#\e(B
 @item
-@dfn{login:} Plain-text username/password via LOGIN.
+@dfn{cram-md5:} CRAM-MD5 \e$B$G0E9f2=$5$l$?\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#\e(B
 @item
-@dfn{anonymous:} Login as `anonymous', supplying your emailadress as password.
+@dfn{login:} LOGIN \e$B7PM3$G$N@8$N\e(B \e$BMxMQ<TL>\e(B/\e$B%Q%9%o!<%I\e(B \e$B$G$9!#\e(B
+@item
+@dfn{anonymous:} \e$BEE;R%a!<%k%"%I%l%9$r%Q%9%o!<%I$H$7!"\e(B`anonymous' \e$B$H$7$F\e(B
+\e$B%m%0%$%s$7$^$9!#\e(B
 @end itemize
 
 @item nnimap-expunge-on-close
 @cindex Expunging
 @vindex nnimap-expunge-on-close
-Unlike Parmenides the @sc{imap} designers has decided that things that
-doesn't exist actually does exist. More specifically, @sc{imap} has this
-concept of marking articles @code{Deleted} which doesn't actually delete
-them, and this (marking them @code{Deleted}, that is) is what nnimap
-does when you delete a article in Gnus (with @kbd{G DEL} or similair).
 
-Since the articles aren't really removed when we mark them with the
-@code{Deleted} flag we'll need a way to actually delete them. Feel like
-running in circles yet?
+\e$B%Q%k%a%K%G%9$H0c$C$F!"\e(BIMAP \e$B$N@_7W<TC#$O!"B8:_$7$F$$$J$$$b$N$,<B:]$K$OB8\e(B
+\e$B:_$7$F$$$k$H7h$a$^$7$?!#$b$C$H>\$7$/@bL@$9$k$H!"\e(BIMAP \e$B$O<B:]$K$O5-;v$r>C\e(B
+\e$B5n$7$J$$!"5-;v$K\e(B @code{Deleted} \e$B$H$$$&0u$rIU$1$k35G0$,$"$j!"$3$l\e(B (\e$B$($C\e(B
+\e$B$H!"\e(B@code{Deleted} \e$B$H$$$&0u$rIU$1$k$3$H$G$9\e(B) \e$B$,\e(B nnimap \e$B$,\e(B Gnus \e$B$G5-;v$r\e(B
+\e$B>C5n$9$k$H$-$K$9$k$3$H$G$9\e(B (@kbd{G DEL} \e$B$J$I$G\e(B)\e$B!#\e(B
+(\e$BLuCm\e(B: \e$B%Q%k%a%K%G%9$O5*85A0\e(B 5 \e$B@$5*$N%.%j%7%"$N\e(B Elea \e$BGI$NE/3X<T\e(B)
+
+\e$B5-;v$r\e(B @code{Deleted} \e$B%U%i%0$G0u$rIU$1$?$H$-$K$OK\Ev$O>C5n$5$l$F$$$J$$$N\e(B
+\e$B$G!"<B:]$K>C5n$9$k$?$a$NJ}K!$,I,MW$H$J$j$^$9!#=[4D$7$F$$$k$h$&$K46$8$^$9\e(B
+\e$B$+\e(B?
 
-Traditionally, nnimap has removed all articles marked as @code{Deleted}
-when closing a mailbox but this is now configurable by this server
-variable.
+\e$BEAE}E*$K!"\e(Bnnimap \e$B$O%a!<%k%\%C%/%9$rJD$8$k$H$-$K\e(B @code{Deleted} \e$B$H$$$&0u\e(B
+\e$B$NIU$$$?A4$F$N5-;v$r>C5n$7$F$-$^$7$?$,!":#$O%5!<%P!<JQ?t$K$h$j@_Dj2DG=$G\e(B
+\e$B$9!#\e(B
 
-The possible options are:
+\e$BA*Br;h$O\e(B:
 
 @table @code
 
 @item always
-The default behaviour, delete all articles marked as "Deleted" when
-closing a mailbox.
+\e$B=i4|@_Dj$N?6Iq$$!"%a!<%k%\%C%/%9$rJD$8$k$H$-$K\e(B @code{Deleted} \e$B$H0u$NIU$$\e(B
+\e$B$?5-;v$r>C5n$7$^$9!#\e(B
 @item never
-Never actually delete articles. Currently there is no way of showing the
-articles marked for deletion in nnimap, but other @sc{imap} clients may allow
-you to do this. If you ever want to run the EXPUNGE command manually,
-@xref{Expunging mailboxes}.
+\e$B7h$7$F5-;v$r>C5n$7$^$;$s!#8=:_$O!">C5n$N0u$,IU$$$?5-;v$r\e(B nnimap \e$B$GI=<($9\e(B
+\e$B$kJ}K!$O$"$j$^$;$s$,!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$O$G$O$G$-$k$+$b$7$l$^$;$s!#\e(B
+\e$B<j$G\e(B EXPUNGE \e$B%3%^%s%I$rH/9T$7$?$$$H$-$O!"\e(B@xref{Expunging mailboxes}\e$B!#\e(B
 @item ask
-When closing mailboxes, nnimap will ask if you wish to expunge deleted
-articles or not.
+\e$B%a!<%k%\%C%/%9$rJD$8$k$H$-$K!"\e(Bnnimap \e$B$,>C5n$5$l$?5-;v$r:o=|$9$k$+$I$&$+\e(B
+\e$B$r?R$M$^$9!#\e(B
+
 @end table
 
+@item nnimap-authinfo-file
+@vindex nnimap-authinfo-file
+
+\e$B%5!<%P$K%m%0%$%s$9$k$?$a$K;H$&G'>Z>pJs\e(B (authinfo) \e$B$r4^$`%U%!%$%k$G$9!#$=\e(B
+\e$B$N7A<0$O\e(B (\e$B$[$H$s$I\e(B) @code{ftp} \e$B$N\e(B @file{~/.netrc} \e$B%U%!%$%k$HF1$8$G$9!#87\e(B
+\e$BL)$JDj5A$O!"JQ?t\e(B @code{nntp-authinfo-file} \e$B$*$h$S\e(B @xref{NNTP} \e$B$r8+$F2<$5\e(B
+\e$B$$!#\e(B
+
 @end table
 
 @menu
-* Splitting in IMAP::     Splitting mail with nnimap.
-* Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::   Equivalent of a "compress mailbox" button.
+* Splitting in IMAP::   nnimap \e$B$G%a!<%k$rJ,3d$9$k\e(B
+* Editing IMAP ACLs::   \e$B%a!<%k%\%C%/%9$X$NB>$NMxMQ<T$N;HMQ$r@)8B\e(B/\e$B5v2D$9$k\e(B
+* Expunging mailboxes:: "\e$B%a!<%k%\%C%/%905=L\e(B" \e$B%\%?%s$HEy2A$J$b$N\e(B
 @end menu
 
-
-
 @node Splitting in IMAP
-@subsubsection Splitting in @sc{imap}
+@subsubsection IMAP \e$B$G$NJ,3d\e(B
 @cindex splitting imap mail
 
-Splitting is something Gnus users has loved and used for years, and now
-the rest of the world is catching up. Yeah, dream on, not many @sc{imap}
-server has server side splitting and those that have splitting seem to
-use some non-standard protocol. This means that @sc{imap} support for Gnus
-has to do it's own splitting.
+\e$BJ,3d$O\e(B gnus \e$B$NMxMQ<T$,2?G/$b$N4V0&$7$F$-$?$b$N$G!":#$d;D$j$N@$3&$bDI$$$D\e(B
+\e$B$3$&$H$7$F$$$^$9!#$O$$!"A[A|$7$F$/$@$5$$!"\e(BIMAP \e$B%5!<%P!<$N$J$+$K%5!<%P!<\e(B
+\e$BB&$GJ,3d$G$-$k$b$N$O$"$^$jB?$/$J$/!"$7$+$b$=$l$i$OI8=`$G$J$$%W%m%H%3%k$r\e(B
+\e$B;H$C$F$$$k$h$&$G$9!#$3$l$O!"\e(Bgnus \e$B$N\e(B IMAP \e$B%5%]!<%H$O<+J,<+?H$GJ,3d$r$7$J\e(B
+\e$B$1$l$P$J$i$J$$$H$$$&$3$H$G$9!#\e(B
 
-And it does.
+\e$B$=$7$F<B:]$K$7$^$9!#\e(B
 
-There are three variables of interest:
+\e$B4XO"$9$kJQ?t$O;0$D$G$9\e(B:
 
 @table @code
 
@@ -12455,110 +13376,166 @@ There are three variables of interest:
 @cindex crosspost
 @vindex nnimap-split-crosspost
 
-If non-nil, do crossposting if several split methods match the mail. If
-nil, the first match in @code{nnimap-split-rule} found will be used.
+nil \e$B$G$J$1$l$P!"$$$/$D$+$NJ,3dJ}K!$,%a!<%k$H9gCW$7$?$H$-$KAj8_Ej9F$r$7$^\e(B
+\e$B$9!#\e(Bnil \e$B$J$i$P!"\e(B@code{nnimap-split-rule} \e$B$G:G=i$K8+$D$+$C$?$b$N$,;H$o$l\e(B
+\e$B$^$9!#\e(B
 
-Nnmail equivalent: @code{nnmail-crosspost}.
+Nnmail \e$B$GBP1~$9$k$b$N\e(B: @code{nnmail-crosspost}.
 
 @item nnimap-split-inbox
 @cindex splitting, inbox
 @cindex inbox
 @vindex nnimap-split-inbox
 
-A string or a list of strings that gives the name(s) of @sc{imap} mailboxes
-to split from. Defaults to nil, which means that splitting is disabled!
+\e$BJ,3d$N85$H$J$k\e(B IMAP \e$B$N%a!<%k%\%C%/%9$NL>A0$r;XDj$7$?J8;zNs$+J8;zNs$N%j%9\e(B
+\e$B%H$G$9!#=i4|CM$O\e(B @code{nil} \e$B$G!"J,3d$O;HMQ$7$J$$$h$&$K$J$C$F$$$^$9\e(B!
 
 @lisp
-(setq nnimap-split-inbox '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
+(setq nnimap-split-inbox
+      '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
 @end lisp
 
-No nnmail equivalent.
+Nnmail \e$B$KBP1~$9$k$b$N$O$"$j$^$;$s!#\e(B
 
 @item nnimap-split-rule
 @cindex Splitting, rules
 @vindex nnimap-split-rule
 
-New mail found in @code{nnimap-split-inbox} will be split according to
-this variable.
+@code{nnimap-split-inbox} \e$B$G8+$D$+$C$??7$7$$%a!<%k$O$3$NJQ?t$K=>$C$FJ,3d\e(B
+\e$B$5$l$^$9!#\e(B
 
-This variable contains a list of lists, where the first element in the
-sublist gives the name of the @sc{imap} mailbox to move articles matching the
-regexp in the second element in the sublist. Got that? Neither did I, we
-need examples.
+\e$B$3$NJQ?t$O%j%9%H$N%j%9%H$+$i@.$j$^$9!#I{%j%9%H$N:G=i$NMWAG$O\e(B IMAP \e$B$N%a!<\e(B
+\e$B%k%\%C%/%9$G!"Fs$D$a$NMWAG$N@55,I=8=$K9gCW$7$?5-;v$N0\F0@h$r;XDj$7$^$9!#\e(B
+\e$B$o$+$j$^$7$?$+\e(B? \e$B$$$$$(!";d$b$o$+$j$^$;$s!#Nc$,I,MW$G$9!#\e(B
 
 @lisp
 (setq nnimap-split-rule
-        '(("INBOX.nnimap"        "^Sender: owner-nnimap@@vic20.globalcom.se")
-          ("INBOX.junk"          "^Subject:.*MAKE MONEY")
-          ("INBOX.private"       "")))
+      '(("INBOX.nnimap"  "^Sender: owner-nnimap@@vic20.globalcom.se")
+        ("INBOX.junk"    "^Subject:.*MAKE MONEY")
+        ("INBOX.private" "")))
 @end lisp
 
-This will put all articles from the nnimap mailing list into mailbox
-INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
-into INBOX.spam and everything else in INBOX.private.
+\e$B$3$l$O\e(B nnimap \e$B%a!<%j%s%0%j%9%H$+$i$NA4$F$N5-;v$r%a!<%k%\%C%/\e(B
+\e$B%9\e(B INBOX.nnimap \e$B$KF~$l!"\e(BSubject: \e$B9T$K\e(B MAKE MONEY \e$B$N$"$kA4$F$N5-;v\e(B
+\e$B$r\e(B INBOX.spam \e$B$KF~$l!"$=$NB>A4$F$N$b$N$r\e(B INBOX.private \e$B$KF~$l$^$9!#\e(B
 
-The first string may contain `\\1' forms, like the ones used by
-replace-match to insert sub-expressions from the matched text. For
-instance:
+\e$B:G=i$NJ8;zNs$O!"\e(Breplace-match \e$B$G9gCW$7$?%F%-%9%H$+$iI{I=8=$rA^F~$9$k$H$-\e(B
+\e$B$K;HMQ$5$l$k$N$HF1$8$h$&$J!"\e(B`\\1' \e$B7A<0$r4^$`$3$H$,$G$-$^$9!#Nc$($P\e(B:
 
 @lisp
 ("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
 @end lisp
 
-The second element can also be a function. In that case, it will be
-called with the first element of the rule as the argument, in a buffer
-containing the headers of the article. It should return a non-nil value
-if it thinks that the mail belongs in that group.
+\e$BFs$DL\$NMWAG$O4X?t$G$"$k$3$H$b$G$-$^$9!#$=$N>l9g$O!"5-;v$N%X%C%@!<$,$"$k\e(B
+\e$B%P%C%U%!$G!"$=$N5,B'$N:G=i$NMWAG$r0z?t$H$7$F8F$P$l$^$9!#%a!<%k$,$=$N%0%k!<\e(B
+\e$B%W$KB0$9$k$H9M$($k>l9g$O!"\e(B@code{nil} \e$B$G$J$$CM$rJV$9I,MW$,$"$j$^$9!#\e(B
+
+Nnmail \e$B$NMxMQ<T$O:G8e$N@55,I=8=$OA4$F$N5-;v$K9gCW$9$k$h$&$K6u$G$J$/$F$O\e(B
+\e$B$J$i$J$$$3$H$r3P$($F$$$k$+$b$7$l$^$;$s\e(B (\e$B>e$NNc$N$h$&$K\e(B)\e$B!#$3$l\e(B
+\e$B$O\e(B nnimap \e$B$G$OI,MW$G$O$"$j$^$;$s!#@55,I=8=$N$I$l$K$b9gCW$7$J$$5-;v\e(B
+\e$B$O\e(B inbox \e$B$+$i0\F0$5$l$^$;$s!#\e(B(inbox \e$B$KL$FI5-;v$rBgNL$KCV$$$F$*$/$H!"J,3d\e(B
+\e$B$N%3!<%I$O?7$7$$%a!<%k$r<hF@$9$k$H$-$K$=$l$iA4$F$rD4$Y$k$N$G!"<B9TB.EY$K\e(B
+\e$B1F6A$9$k2DG=@-$,$"$j$^$9!#\e(B)
+
+\e$B$3$l$i$N5,B'$OO"A[%j%9%H$N:G=i$+$i=*$j$K8~$+$C$F<B9T$5$l$^$9!#Aj8_Ej9F$,\e(B
+\e$B;HMQ2DG=$K$J$C$F$$$J$$$+$.$j!":G=i$K9gCW$7$?5,B'$,\e(B "\e$B>!$A\e(B" \e$B$^$9!#Aj8_Ej9F\e(B
+\e$B$r$7$F$$$k>l9g$O!"A4$F$N9gCW$7$?5,B'$,\e(B "\e$B>!$A\e(B" \e$B$^$9!#\e(B
 
-Nnmail users might recollect that the last regexp had to be empty to
-match all articles (like in the example above). This is not required in
-nnimap. Articles not matching any of the regexps will not be moved out
-of your inbox. (This might might affect performance if you keep lots of
-unread articles in your inbox, since the splitting code would go over
-them every time you fetch new mail.)
+\e$B$3$NJQ?t$O$=$NCM$H$7$F4X?t$r;}$D$3$H$b$G$-$^$9!#$=$N4X?t$O5-;v$N%X%C%@$N\e(B
+\e$BItJ,$KHO0O$,69$a$i$l$?>uBV$G8F$P$l!"5-;v$N0\F0@h$@$H;W$&%0%k!<%W$rJV$9$b\e(B
+\e$B$N$G$J$1$l$P$J$j$^$;$s!#\e(B@code{nnimap-split-fancy} \e$B$r;2>H$7$F2<$5$$!#\e(B
 
-These rules are processed from the beginning of the alist toward the
-end. The first rule to make a match will "win", unless you have
-crossposting enabled. In that case, all matching rules will "win".
+\e$BJ,3d%3!<%I$OI,MW$J$i%a!<%k%\%C%/%9$r:n@.$7$^$9!#\e(B
 
-The splitting code tries to create mailboxes if it need too.
+\e$B0[$J$k2>A[%5!<%P!<Kh$K0c$&J,3d$N5,B'$r;H$C$?$j!"$=$l$I$3$m$+F1$8%5!<%P!<\e(B
+\e$B$N0[$J$k\e(B inbox \e$BKh$K0c$&J,3d$N5,B'$r;H$&$3$H$,$G$-$k$h$&$K$9$k$?$a$K!"$3\e(B
+\e$B$NJQ?t$N9=J8$O0J2<$N$h$&$K3HD%$5$l$F$$$^$9!#\e(B
 
-Nnmail equivalent: @code{nnmail-split-methods}.
+@lisp
+(setq nnimap-split-rule
+      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
+                                  ("junk"    "From:.*Simon")))
+        ("my2server"    ("INBOX" nnimap-split-fancy))
+        ("my[34]server" (".*"    (("private" "To:.*Simon")
+                                  ("junk"    my-junk-func)))))
+@end lisp
+
+\e$B2>A[%5!<%P!<L>$O<B:]$K$O@55,I=8=$J$N$G!"F1$85,B'$r$$$/$D$+$N%5!<%P!<$KE,\e(B
+\e$BMQ$G$-$k$G$7$g$&!#$3$NNc$G$O%5!<\e(B
+\e$B%P!<\e(B @code{my3server} \e$B$H\e(B @code{my4server} \e$B$,F1$85,B'$r;H$$$^$9!#F1MM\e(B
+\e$B$K\e(B inbox \e$BJ8;zNs$b@55,I=8=$G$9!#>e5-$NJ,3d$N5,B'$N<BNc$O!"4X?t!"$^$?$O%0\e(B
+\e$B%k!<%W$N@55,I=8=$+%0%k!<%W$N4X?t!"$NN>J}$G$9!#\e(B
+
+Nnmail \e$B$GBP1~$9$k$b$N\e(B: @code{nnmail-split-methods}.
+
+@item nnimap-split-predicate
+@cindex splitting
+@vindex nnimap-split-predicate
+
+\e$B$3$N=R8l$K%^%C%A$9$k\e(B @code{nnimap-split-inbox} \e$B$K$"$k%a!<%k$OJ,3d$5$l$^\e(B
+\e$B$9!#$3$l$OJ8;zNs$G4{DjCM$O\e(B @samp{UNSEEN UNDELETED} \e$B$G$9!#\e(B
+
+\e$B$b$7$"$J$?$,\e(B inbox \e$B$K$"$k%a!<%k$rFI$`$?$a$KJL$N\e(B @sc{imap} \e$B%/%i%$%"%s%H$r\e(B
+\e$B;H$C$F$$$k$,!"9XFIEY$K4X$o$i$:$K$9$Y$F$N5-;v$r\e(B gnus \e$B$KJ,3d$5$;$?$$$J$i$P!"\e(B
+\e$B$3$l$OLr$KN)$D$+$b$7$l$^$;$s!#$=$N>l9g$O\e(B @samp{UNDELETED} \e$B$KJQ$($l$PNI$$\e(B
+\e$B$G$7$g$&!#\e(B
+
+@item nnimap-split-fancy
+@cindex splitting, fancy
+@findex nnimap-split-fancy
+@vindex nnimap-split-fancy
+
+\e$B$b$7$"$J$?$,FC5iJ,3d$r;H$$$?$$$J$i$P!"\e(B@code{nnimap-split-rule} \e$B$NCM\e(B
+\e$B$r\e(B @code{nnmail-split-fancy} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+@xref{Fancy Mail Splitting}\e$B!#\e(B
+
+\e$B$7$+$7\e(B nnmail \e$B$H\e(B nnimap \e$B$H$G0[$J$kFC5iJ,3dJ}<0$r;}$D$h$&$K$9$k$K$O!"\e(B
+@code{nnimap-split-rule} \e$B$NCM$r\e(B @code{nnimap-split-fancy} \e$B$K@_Dj$7$F!"\e(B
+nnimap \e$BFCM-$NFC5iJ,3dJ}<0$r\e(B @code{nnimap-split-fancy} \e$B$KDj5A$7$F2<$5$$!#\e(B
+
+\e$BNc\e(B:
+
+@lisp
+(setq nnimap-split-rule 'nnimap-split-fancy
+      nnimap-split-fancy ...)
+@end lisp
+
+Nnmail \e$B$GBP1~$9$k$b$N\e(B: @code{nnmail-split-fancy}.
 
 @end table
 
 @node Editing IMAP ACLs
-@subsubsection Editing @sc{imap} ACLs
+@subsubsection IMAP \e$B$N\e(B ACL \e$B$rJT=8$9$k!#\e(B
 @cindex editing imap acls
 @cindex Access Control Lists
-@cindex Editing @sc{imap} ACLs
+@cindex Editing IMAP ACLs
 @kindex G l
 @findex gnus-group-nnimap-edit-acl
 
-ACL stands for Access Control List.  ACLs are used in @sc{imap} for limiting
-(or enabling) other users access to your mail boxes. Not all @sc{imap}
-servers support this, this function will give an error if it doesn't.
+ACL \e$B$O\e(B Access Control List (\e$B;HMQ@)8B0lMw\e(B) \e$B$NN,$G$9!#\e(BIMAP \e$B$G$O\e(B ACL \e$B$OB>$N\e(B
+\e$BMxMQ<T$K$h$k$"$J$?$N%a!<%k%\%C%/%9$N;HMQ$r@)8B\e(B (\e$B$b$7$/$O5v2D\e(B) \e$B$9$k$?$a$K\e(B
+\e$B;H$o$l$F$$$^$9!#\e(BIMAP \e$B%5!<%P!<A4$F$K$3$N5!G=$,$"$k$o$1$G$O$J$/!"L5$$%5!<\e(B
+\e$B%P!<$G$3$l$i$N4X?t$r;H$&$H%(%i!<$,H/@8$7$^$9!#\e(B
 
-To edit a ACL for a mailbox, type @kbd{G l}
-(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
-editing window with detailed instructions.
+\e$B%a!<%k%\%C%/%9$X$N\e(B ACL \e$B$rJT=8$9$k$?$a$K$O!"\e(B
+@kbd{G l} (@code{gnus-group-edit-nnimap-acl}) \e$B$rF~NO$7$^$9!#$=$&$9$k$H!"\e(B
+\e$B>\$7$$;X<($H$H$b$K\e(B ACL \e$BJT=8%&%#%s%I%&$,8=$l$^$9!#\e(B
 
-Some possible uses:
+\e$B;HMQ$NNc\e(B:
 
 @itemize @bullet
 @item
-Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
-on your mailing list mailboxes enables other users on the same server to
-follow the list without subscribing to it.
+\e$B%a!<%j%s%0%j%9%H$N%a!<%k%\%C%/%9$G\e(B "anyone" \e$B$K\e(B "lrs" \e$B5v\e(B
+\e$B2D\e(B (lookup, read, seen/unseen \e$B%U%i%0$NJ];}\e(B) \e$B$rM?$($k$3$H$G!"F1$8%5!<%P!<\e(B
+\e$B$NB>$NMxMQ<T$,$=$l$r9XFI$9$k$3$H$J$/FI$`$3$H$,$G$-$^$9!#\e(B
 @item
-At least with the Cyrus server, you are required to give the user
-"anyone" posting ("p") capabilities to have "plussing" work (that is,
-mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
-INBOX.mailbox).
+\e$B>/$J$/$H$b\e(B Cyrus \e$B$N%5!<%P!<$K$*$$$F$O!"\e(B"plussing" \e$B$,F0:n$9$k$?$a$K\e(B (\e$B$D$^\e(B
+\e$B$j!"\e(Buser+mail@@domain \e$B$,\e(B INBOX.mailbox \e$B$H$$$&\e(B IMAP \e$B$N%a!<%k%\%C%/%9$K$J\e(B
+\e$B$k\e(B)\e$B!"MxMQ<T\e(B "anyone" \e$B$KEj9F\e(B ("p") \e$B$N5v2D$rM?$($kI,MW$,$"$j$^$9!#\e(B
 @end itemize
 
 @node Expunging mailboxes
-@subsubsection Expunging mailboxes
+@subsubsection \e$B%a!<%k%\%C%/%9$N:o=|\e(B
 @cindex expunging
 
 @cindex Expunge
@@ -12566,96 +13543,90 @@ INBOX.mailbox).
 @kindex G x
 @findex gnus-group-nnimap-expunge
 
-If you're using the @code{never} setting of @code{nnimap-expunge-close},
-you may want the option of expunging all deleted articles in a mailbox
-manually. This is exactly what @kbd{G x} does.
-
-Currently there is no way of showing deleted articles, you can just
-delete them.
-
+@code{nnimap-expunge-close} \e$B$K\e(B @code{never} \e$B$r@_Dj$7$F$$$l$P!"%a!<%k%\%C\e(B
+\e$B%/%9$NA4$F$N>C5n$5$l$?5-;v$r<jF0$G:o=|$7$?$$$H;W$&$G$7$g$&!#\e(B@kbd{G x} \e$B$,\e(B
+\e$B$^$5$K$3$N$3$H$r$7$^$9!#\e(B
 
+\e$B8=;~E@$G$O!">C5n$5$l$?5-;v$rI=<($9$kJ}K!$O$"$j$^$;$s!#$?$@>C5n$G$-$k$@$1\e(B
+\e$B$G$9!#\e(B
 
 @node Combined Groups
 @section \e$B7k9g%0%k!<%W\e(B
 
-Gnus \e$B$O!"A4$F$N%0%k!<%W$N<oN`$r:.9g$7$F!"Bg$-$J%0%k!<%W$K7k9g$9\e(B
-\e$B$k$3$H$,$G$-$^$9!#\e(B
+Gnus \e$B$O!"A4$F$N%0%k!<%W$N<oN`$r:.9g$7$F!"Bg$-$J%0%k!<%W$K7k9g$9$k$3$H$,\e(B
+\e$B$G$-$^$9!#\e(B
 
 @menu
-* Virtual Groups::     \e$B$?$/$5$s$N%0%k!<%W$N5-;v$r7k9g$9$k!#\e(B
-* Kibozed Groups::     \e$B%K%e!<%9%9%W!<%k$NCf$+$i$N5-;v$r8!:w$9$k!#\e(B
+* Virtual Groups:: \e$B$?$/$5$s$N%0%k!<%W$N5-;v$r7k9g$9$k\e(B
+* Kibozed Groups:: \e$B%K%e!<%9%9%W!<%k$NCf$+$i$N5-;v$r8!:w$9$k\e(B
 @end menu
 
-
 @node Virtual Groups
 @subsection \e$B2>A[%0%k!<%W\e(B
 @cindex nnvirtual
 @cindex virtual groups
 
-nnvirtual \e$B%0%k!<%W\e(B (@dfn{nnvirtual group}) \e$B$O<B$OB>$N%0%k!<%W$N\e(B
-\e$B=89g0J>e$N2?J*$G$b$"$j$^$;$s!#\e(B
+nnvirtual \e$B%0%k!<%W\e(B (@dfn{nnvirtual group}) \e$B$O<B$OB>$N%0%k!<%W$N=89g0J>e\e(B
+\e$B$N2?J*$G$b$"$j$^$;$s!#\e(B
 
-\e$BNc$($P!"$b$7>.$5$J%0%k!<%W$r$?$/$5$sFI$`$N$,7y$K$J$C$F$-$?$i!"$=\e(B
-\e$B$l$i$r0l$D$NBg$-$J%0%k!<%W$KF~$l$F!"7y$K$J$k$/$i$$5pBg$G<j$KIi$(\e(B
-\e$B$J$$%0%k!<%W$rFI$`$3$H$,$G$-$^$9!#$3$l$,%3%s%T%e!<%?!<$N3Z$7$_$@\e(B
-\e$B$M\e(B!
+\e$BNc$($P!"$b$7>.$5$J%0%k!<%W$r$?$/$5$sFI$`$N$,7y$K$J$C$F$-$?$i!"$=$l$i$r0l\e(B
+\e$B$D$NBg$-$J%0%k!<%W$KF~$l$F!"7y$K$J$k$/$i$$5pBg$G<j$KIi$($J$$%0%k!<%W$rFI\e(B
+\e$B$`$3$H$,$G$-$^$9!#$3$l$,%3%s%T%e!<%?!<$N3Z$7$_$@$M\e(B!
 
-\e$BA*BrJ}K!$H$7$F\e(B @code{nnvirtual} \e$B$r;XDj$7$F$/$@$5$$!#%"%I%l%9$O!"\e(B
-\e$B$=$l$r9=@.$9$k%0%k!<%W$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
+\e$BA*BrJ}K!$H$7$F\e(B @code{nnvirtual} \e$B$r;XDj$7$F$/$@$5$$!#%"%I%l%9$O!"$=$l$r9=\e(B
+\e$B@.$9$k%0%k!<%W$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
 
-\e$B2>A[%0%k!<%WFb$GIU$1$i$l$?A4$F$N0u$O!"$=$N9=@.%0%k!<%W$N5-;v$K$/$C\e(B
-\e$B$D$1$i$l$^$9!#$D$^$j!"$b$72>A[%0%k!<%WFb$G5-;v$K2D;k5-;v$N0u$r$D\e(B
-\e$B$1$k$H!"$=$N5-;v$O$b$H$b$H$N9=@.%0%k!<%W$NCf$G$b2D;k5-;v$K$J$j$^\e(B
-\e$B$9!#\e(B (\e$B$=$7$F5U$b@.$jN)$A$^$9\e(B --- \e$B9=@.%0%k!<%WFb$GIU$1$?0u$O2>A[\e(B
-\e$B%0%k!<%WFb$G$bI=<($5$l$^$9!#\e(B)
+\e$B2>A[%0%k!<%WFb$GIU$1$i$l$?A4$F$N0u$O!"$=$N9=@.%0%k!<%W$N5-;v$K$/$C$D$1$i\e(B
+\e$B$l$^$9!#$D$^$j!"$b$72>A[%0%k!<%WFb$G5-;v$K2D;k5-;v$N0u$r$D$1$k$H!"$=$N5-\e(B
+\e$B;v$O$b$H$b$H$N9=@.%0%k!<%W$NCf$G$b2D;k5-;v$K$J$j$^$9!#\e(B(\e$B$=$7$F5U$b@.$jN)\e(B
+\e$B$A$^$9\e(B --- \e$B9=@.%0%k!<%WFb$GIU$1$?0u$O2>A[%0%k!<%WFb$G$bI=<($5$l$^$9!#\e(B)
 
-\e$B$3$l$,!"\e(BAndrea Dworkin \e$B$K4X$9$kA4$F$N%K%e!<%9%0%k!<%W$r!"0l$D$N\e(B
-\e$B5pBg$G%7%"%o%;$J%K%e!<%9%0%k!<%W$K$^$H$a$k\e(B @code{nnvirtual} \e$BJ}K!\e(B
-\e$B$NNc$G$9!#\e(B
+\e$B$3$l$,!"\e(BAndrea Dworkin \e$B$K4X$9$kA4$F$N%K%e!<%9%0%k!<%W$r!"0l$D$N5pBg$G%7\e(B
+\e$B%"%o%;$J%K%e!<%9%0%k!<%W$K$^$H$a$k\e(B @code{nnvirtual} \e$BJ}K!$NNc$G$9!#\e(B
 
 @lisp
 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
 @end lisp
 
-\e$B9=@.%0%k!<%W$O4pK\%0%k!<%W$G$b30It%0%k!<%W$G$b9=$$$^$;$s!#A4$FLd\e(B
-\e$BBjL5$/F0$/$O$:$G$9$,!"$b$7$"$J$?$N%3%s%T%e!<%?!<$,GzH/$G$b$7$F$7\e(B
-\e$B$^$C$?$i!"$=$l$O$?$V$s;d$,0-$$$s$G$7$g$&$M!#\e(B
+\e$B9=@.%0%k!<%W$O4pK\%0%k!<%W$G$b30It%0%k!<%W$G$b9=$$$^$;$s!#A4$FLdBjL5$/F0\e(B
+\e$B$/$O$:$G$9$,!"$b$7$"$J$?$N%3%s%T%e!<%?!<$,GzH/$G$b$7$F$7$^$C$?$i!"$=$l$O\e(B
+\e$B$?$V$s;d$,0-$$$s$G$7$g$&$M!#\e(B
 
-\e$B$$$/$D$+$N%5!<%P!<$+$iF1$8%0%k!<%W$r=8$a$k$3$H$O!"MxMQ<T$,\e(B
-Distribution \e$B%X%C%@!<$r;H$C$FG[I[HO0O$r@)8B$7$F$$$k>l9g$O!"Hs>o\e(B
-\e$B$KNI$$$+$bCN$l$^$;$s!#$b$7$"$J$?$,\e(B @samp{soc.motss} \e$B$r!"F|K\$N%5!<\e(B
-\e$B%P!<$H%N%k%&%'!<$N%5!<%P!<$NN>J}$+$iFI$_$?$1$l$P!"%0%k!<%W$N@55,\e(B
-\e$BI=8=$H$7$F0J2<$NCM$,;H$($^$9!#\e(B
+\e$B$$$/$D$+$N%5!<%P!<$+$iF1$8%0%k!<%W$r=8$a$k$3$H$O!"MxMQ<T\e(B
+\e$B$,\e(B Distribution \e$B%X%C%@!<$r;H$C$FG[I[HO0O$r@)8B$7$F$$$k>l9g$O!"Hs>o$KNI$$\e(B
+\e$B$+$bCN$l$^$;$s!#$b$7$"$J$?$,\e(B @samp{soc.motss} \e$B$r!"F|K\$N%5!<%P!<$H%N%k%&%'!<\e(B
+\e$B$N%5!<%P!<$NN>J}$+$iFI$_$?$1$l$P!"%0%k!<%W$N@55,I=8=$H$7$F0J2<$NCM$,;H$(\e(B
+\e$B$^$9!#\e(B
 
 @example
 "^nntp\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"
 @end example
 
-(\e$B$G$b$A$g$C$HCm0U!#\e(B@kbd{G m} \e$B$G%0%k!<%W$r:n@.$9$k$H$-$O!"%P%C%/\e(B
-\e$B%9%i%C%7%e$rFs=E$KIU$1$F$O$$$1$^$;$s!#$=$7$FJ8;zNs$N:G=i$H:G8e$N\e(B
-\e$B0zMQ5-9f$b<h$jJ'$C$F$/$@$5$$!#\e(B)
+(\e$B$G$b$A$g$C$HCm0U!#\e(B@kbd{G m} \e$B$G%0%k!<%W$r:n@.$9$k$H$-$O!"%P%C%/%9%i%C%7%e\e(B
+\e$B$rFs=E$KIU$1$F$O$$$1$^$;$s!#$=$7$FJ8;zNs$N:G=i$H:G8e$N0zMQ5-9f$b<h$jJ'$C\e(B
+\e$B$F$/$@$5$$!#\e(B)
 
-\e$B$3$l$O$A$g$C$H$&$^$/F0:n$9$k$O$:$G$9\e(B --- \e$BN>J}$N%0%k!<%W$N5-;v$O\e(B
-\e$BA4It40A4$K0l$D$N%0%k!<%W$K$J$j!"=EJ#$bL5$$$O$:$G$9!#%9%l%C%II=<(\e(B
-(\e$B$H$=$NB>\e(B)\e$B$bDL>oDL$j$&$^$/F0:n$9$k$G$7$g$&$1$I!"5-;v$NJB$V=g=x$K\e(B
-\e$B$OLdBj$,$"$k$+$b$7$l$^$;$s!#F|IU$K$h$kJB$YBX$($O$3$3$G$O;EMM30$H\e(B
-\e$B$J$k$+$b$7$l$^$;$s\e(B (@pxref{Selecting a Group})\e$B!#\e(B
+\e$B$3$l$O$A$g$C$H$&$^$/F0:n$9$k$O$:$G$9\e(B --- \e$BN>J}$N%0%k!<%W$N5-;v$OA4It40A4\e(B
+\e$B$K0l$D$N%0%k!<%W$K$J$j!"=EJ#$bL5$$$O$:$G$9!#%9%l%C%II=<(\e(B (\e$B$H$=$NB>\e(B) \e$B$bDL\e(B
+\e$B>oDL$j$&$^$/F0:n$9$k$G$7$g$&$1$I!"5-;v$NJB$V=g=x$K$OLdBj$,$"$k$+$b$7$l$^\e(B
+\e$B$;$s!#F|IU$K$h$kJB$YBX$($O$3$3$G$O;EMM30$H$J$k$+$b$7$l$^$;\e(B
+\e$B$s\e(B (@pxref{Selecting a Group})\e$B!#\e(B
 
-\e$B$J$*!"$3$3$G0l$D$@$1@)8B$,$"$j$^$9\e(B --- \e$B2>A[%0%k!<%W$K4^$^$l$k%0\e(B
-\e$B%k!<%W$OA4$F@8$-$F$$$k\e(B(\e$B$9$J$o$A!"9XFI$^$?$OHs9XFI$N\e(B)\e$B>uBV$G$J$/$F\e(B
-\e$B$O$J$j$^$;$s!#:o=|$"$k$$$O%>%s%S%0%k!<%W$O\e(B @code{nnvirtual} \e$B%0%k!<\e(B
-\e$B%W$N9=@.%0%k!<%W$K$J$k$3$H$O$G$-$^$;$s!#\e(B
+\e$B$J$*!"$3$3$G0l$D$@$1@)8B$,$"$j$^$9\e(B --- \e$B2>A[%0%k!<%W$K4^$^$l$k%0%k!<%W$O\e(B
+\e$BA4$F@8$-$F$$$k\e(B(\e$B$9$J$o$A!"9XFI$^$?$OHs9XFI$N\e(B)\e$B>uBV$G$J$/$F$O$J$j$^$;$s!#:o\e(B
+\e$B=|$"$k$$$O%>%s%S%0%k!<%W$O\e(B @code{nnvirtual} \e$B%0%k!<%W$N9=@.%0%k!<%W$K$J$k\e(B
+\e$B$3$H$O$G$-$^$;$s!#\e(B
 
 @vindex nnvirtual-always-rescan
 @code{nnvirtual-always-rescan} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"\e(B
-@code{nnvirtual} \e$B$O2>A[%0%k!<%W$KF~$C$?$H$->o$K!"L$FI5-;v$rAv::\e(B
-\e$B$7$^$9!#$3$NJQ?t$,\e(B @code{nil} (\e$B$3$l$,=i4|@_Dj\e(B)\e$B$G$"$C$F!"2>A[%0%k!<\e(B
-\e$B%W$r:n@.$7$?8e$K9=@.%0%k!<%WFb$N5-;v$rFI$s$@>l9g$O!"$=$N9=@.%0%k!<\e(B
-\e$B%W$GFI$^$l$?5-;v$O!"2>A[%0%k!<%W$KF~$C$?$H$-$KI=<($5$l\e(B \e$B$k$G$7$g\e(B
-\e$B$&!#$b$76&DL$N9=@.%0%k!<%W$r;}$DFs$D$N2>A[%0%k!<%W$,$"$k>l9g$K$b\e(B
-\e$B$3$N1F6A$,$"$j$^$9!#$=$N>l9g$O$3$NJQ?t$r\e(B @code{t} \e$B$K$7$?J}$,NI$$\e(B
-\e$B$G$9!#$"$k$$$O2>A[%0%k!<%W$KF~$k;~$K!"Kh2s$=$N%0%k!<%W$N>e$G\e(B
-@code{M-g} \e$B$rC!$$$F$bNI$$$G$9\e(B --- \e$B$3$l$O$[$\F1MM$N8z2L$,$"$j$^$9!#\e(B
+@code{nnvirtual} \e$B$O2>A[%0%k!<%W$KF~$C$?$H$->o$K!"L$FI5-;v$rAv::$7$^$9!#\e(B
+\e$B$3$NJQ?t$,\e(B @code{nil} (\e$B$3$l$,=i4|@_Dj\e(B)\e$B$G$"$C$F!"2>A[%0%k!<%W$r:n@.$7$?8e\e(B
+\e$B$K9=@.%0%k!<%WFb$N5-;v$rFI$s$@>l9g$O!"$=$N9=@.%0%k!<%W$GFI$^$l$?5-;v$O!"\e(B
+\e$B2>A[%0%k!<%W$KF~$C$?$H$-$KI=<($5$l\e(B \e$B$k$G$7$g$&!#$b$76&DL$N9=@.%0%k!<%W$r\e(B
+\e$B;}$DFs$D$N2>A[%0%k!<%W$,$"$k>l9g$K$b$3$N1F6A$,$"$j$^$9!#$=$N>l9g$O$3$NJQ\e(B
+\e$B?t$r\e(B @code{t} \e$B$K$7$?J}$,NI$$$G$9!#$"$k$$$O2>A[%0%k!<%W$KF~$k;~$K!"Kh2s$=\e(B
+\e$B$N%0%k!<%W$N>e$G\e(B @code{M-g} \e$B$rC!$$$F$bNI$$$G$9\e(B --- \e$B$3$l$O$[$\F1MM$N8z2L\e(B
+\e$B$,$"$j$^$9!#\e(B
 
 @code{nnvirtual} \e$B$O%a!<%k$H%K%e!<%9$NN>J}$N%0%k!<%W$r9=@.%0%k!<%W$H$9$k\e(B
 \e$B;v$,$G$-$^$9!#\e(B@code{nnvirtual} \e$B%0%k!<%W$N5-;v$KJVEz$9$k$H$-$O!"\e(B
@@ -12663,67 +13634,62 @@ Distribution \e$B%X%C%@!<$r;H$C$FG[I[HO0O$r@)8B$7$F$$$k>l9g$O!"Hs>o\e(B
 \e$B%9$N%P%C%/%(%s%I$G$"$k$+%a!<%k$N%P%C%/%(%s%I$G$"$k$+$r?R$M$J$1$l$P$J$j$^\e(B
 \e$B$;$s!#$7$+$7!"\e(B@kbd{^} \e$B$r$7$?$H$-$K$O!"IaDL$O9=@.%P%C%/%(%s%I$,$3$l$rCN$k\e(B
 \e$B3N$+$JJ}K!$O$J$/!"$=$N>l9g$O!"\e(B@code{nnvirtual} \e$B$O\e(B gnus \e$B$K5-;v$O%K%e!<%9\e(B
-\e$B$G$J$$%P%C%/%(%s%I$+$iMh$?$H9p$2$k;v$K$J$j$^$9!#\e(B (\e$B0BA4$N$?$a$K!#\e(B)
+\e$B$G$J$$%P%C%/%(%s%I$+$iMh$?$H9p$2$k;v$K$J$j$^$9!#\e(B(\e$B0BA4$N$?$a$K!#\e(B)
 
 \e$B$3$N$h$&$J>l9g$O!"%a%C%;!<%8%P%C%U%!$G$N\e(B @kbd{C-c C-t} \e$B$,1~Ez$7$h$&$H$7\e(B
 \e$B$F$$$k5-;v$+$i\e(B @code{Newsgroups} \e$B9T$rH4$-=P$7$FA^F~$7$^$9!#\e(B
 
-
-
 @node Kibozed Groups
 @subsection Kiboze \e$B%0%k!<%W\e(B
 @cindex nnkiboze
 @cindex kibozing
 
-@dfn{Kiboze} \e$B$9$k!"$H$O!"\e(B``\e$B%K%e!<%9%9%W!<%kA4It\e(B(\e$B$"$k$$$O$=$N0lIt\e(B)
-\e$B$+$i\e(B grep \e$B$9$k$3$H\e(B'' \e$B$H%*%C%/%9%U%)!<%IBg<-E5$K$h$C$FDj5A$5$l$F$$\e(B
-\e$B$^$9!#\e(B@code{nnkiboze} \e$B$O$3$l$r$"$J$?$N$?$a$K9T$C$F$/$l$k%P%C%/%(\e(B
-\e$B%s%I$G$9!#4r$7$$$M\e(B! \e$B$3$l$G$I$s$J\e(B @sc{nntp} \e$B%5!<%P!<$G$b!"Lr$KN)\e(B
-\e$B$?$J$$MW5a$G;_$^$C$F$7$^$&$^$G9s;H$9$k$3$H$,$G$-$k$M!#$"$"!"$J$s\e(B
-\e$B$F9,$;$J$s$@\e(B!
+@dfn{Kiboze} \e$B$9$k!"$H$O!"\e(B``\e$B%K%e!<%9%9%W!<%kA4It\e(B (\e$B$"$k$$$O$=$N0lIt\e(B) \e$B$+\e(B
+\e$B$i\e(B grep \e$B$9$k$3$H\e(B'' \e$B$H%*%C%/%9%U%)!<%IBg<-E5$K$h$C$FDj5A$5$l$F$$$^$9!#\e(B
+@code{nnkiboze} \e$B$O$3$l$r$"$J$?$N$?$a$K9T$C$F$/$l$k%P%C%/%(%s%I$G$9!#4r$7\e(B
+\e$B$$$M\e(B! \e$B$3$l$G$I$s$J\e(B @sc{nntp} \e$B%5!<%P!<$G$b!"Lr$KN)$?$J$$MW5a$G;_$^$C$F$7\e(B
+\e$B$^$&$^$G9s;H$9$k$3$H$,$G$-$k$M!#$"$"!"$J$s$F9,$;$J$s$@\e(B!
 
 @kindex G k (Group)
-kiboze \e$B%0%k!<%W$r:n@.$9$k$K$O!"%0%k!<%W%P%C%U%!$G\e(B @kbd{G k} \e$BL?Na\e(B
-\e$B$r;H$$$^$9!#\e(B
+kiboze \e$B%0%k!<%W$r:n@.$9$k$K$O!"%0%k!<%W%P%C%U%!$G\e(B @kbd{G k} \e$BL?Na$r;H$$$^\e(B
+\e$B$9!#\e(B
 
-@code{nnkiboze} \e$BJ}K!$K$*$1$k%"%I%l%9Ms$O!"\e(B@code{nnvirtual} \e$B$HF1\e(B
-\e$BMM$K!"\e(B@code{nnkiboze} \e$B$K\e(B ``\e$B4^$a$?$$\e(B'' \e$B%0%k!<%W$K%^%C%A$9$k@55,I=\e(B
-\e$B8=$G$9!#$3$3$,\e(B @code{nnkiboze} \e$B$H\e(B @code{nnvirtual} \e$B%P%C%/%(%s%I\e(B
-\e$B$N:G$bN`;w$7$F$$$kE@$G$9!#\e(B
+@code{nnkiboze} \e$BJ}K!$K$*$1$k%"%I%l%9Ms$O!"\e(B@code{nnvirtual} \e$B$HF1MM$K!"\e(B
+@code{nnkiboze} \e$B$K\e(B ``\e$B4^$a$?$$\e(B'' \e$B%0%k!<%W$K%^%C%A$9$k@55,I=8=$G$9!#$3$3\e(B
+\e$B$,\e(B @code{nnkiboze} \e$B$H\e(B @code{nnvirtual} \e$B%P%C%/%(%s%I$N:G$bN`;w$7$F$$$kE@\e(B
+\e$B$G$9!#\e(B
 
-\e$B$3$N9=@.%0%k!<%W$rNs5s$9$k@55,I=8=$K2C$($F!"\e(B@code{nnkiboze} \e$B%0%k!<\e(B
-\e$B%W$K$O!"%0%k!<%WFb$N$I$N5-;v$r4^$a$k$+$r7h$a$k%9%3%"%U%!%$%k$,$J\e(B
-\e$B$/$F$O$J$j$^$;$s\e(B (@pxref{Scoring})\e$B!#\e(B
+\e$B$3$N9=@.%0%k!<%W$rNs5s$9$k@55,I=8=$K2C$($F!"\e(B@code{nnkiboze} \e$B%0%k!<%W$K$O!"\e(B
+\e$B%0%k!<%WFb$N$I$N5-;v$r4^$a$k$+$r7h$a$k%9%3%"%U%!%$%k$,$J$/$F$O$J$j$^$;\e(B
+\e$B$s\e(B (@pxref{Scoring})\e$B!#\e(B
 
 @kindex M-x nnkiboze-generate-groups
 @findex nnkiboze-generate-groups
 \e$B$"$J$?$NM_$7$$\e(B @code{nnkiboze} \e$B%0%k!<%W$r:n@.$7$?8e$K$O!"\e(B
-@kbd{M-x nnkiboze-generate-groups} \e$B$r<B9T$7$J$1$l$P$J$j$^$;$s!#\e(B
-\e$B$3$NL?Na$O;~4V$,$+$+$j$^$9!#$H$C$F$b$+$+$j$^$9!#$9$4$/!"$9$4!<$/\e(B
-\e$B$+$+$j$^$9!#\e(BGnus \e$B$O$=$N\e(B @code{nnkiboze} \e$B%0%k!<%W$N0lIt$H$J$k$Y$-\e(B
-\e$B5-;v$,$"$k$+$I$&$+$rD4$Y$k$?$a$K!"A4It$N9=@.%0%k!<%W$NA4It$N5-;v\e(B
-\e$B$KBP$7$F%X%C%@!<$r<hF@$7!"$=$l$iA4$F$KBP$7$F%9%3%"=hM}$r<B9T$7$J\e(B
-\e$B$/$F$O$J$i$J$$$N$G$9!#\e(B
+@kbd{M-x nnkiboze-generate-groups} \e$B$r<B9T$7$J$1$l$P$J$j$^$;$s!#$3$NL?Na\e(B
+\e$B$O;~4V$,$+$+$j$^$9!#$H$C$F$b$+$+$j$^$9!#$9$4$/!"$9$4!<$/$+$+$j$^$9!#\e(B
+Gnus \e$B$O$=$N\e(B @code{nnkiboze} \e$B%0%k!<%W$N0lIt$H$J$k$Y$-5-;v$,$"$k$+$I$&$+$r\e(B
+\e$BD4$Y$k$?$a$K!"A4It$N9=@.%0%k!<%W$NA4It$N5-;v$KBP$7$F%X%C%@!<$r<hF@$7!"$=\e(B
+\e$B$l$iA4$F$KBP$7$F%9%3%"=hM}$r<B9T$7$J$/$F$O$J$i$J$$$N$G$9!#\e(B
 
-\e$B9=@.%0%k!<%W$N?t$rM^$($k$h$&$K!"8BDj$7$?@55,I=8=$r;H$C$F$/$@$5$$!#\e(B
-\e$B$5$b$J$$$H!"$"$J$?$N$H$3$m$N%7%9%F%`4IM}<T$rE\$i$;$F$7$^$C$F!"\e(B
-@sc{nntp} \e$B%5!<%P!<$+$i$"$J$?$rDI$$=P$7$FFsEY$HF~$l$J$$$h$&$K$7$F\e(B
-\e$B$7$^$&$+$bCN$l$^$;$s!#IT47$l$J?M$,$h$/$d$k$3$H$G$9!#\e(B
+\e$B9=@.%0%k!<%W$N?t$rM^$($k$h$&$K!"8BDj$7$?@55,I=8=$r;H$C$F$/$@$5$$!#$5$b$J\e(B
+\e$B$$$H!"$"$J$?$N$H$3$m$N%7%9%F%`4IM}<T$rE\$i$;$F$7$^$C$F!"\e(B@sc{nntp} \e$B%5!<%P!<\e(B
+\e$B$+$i$"$J$?$rDI$$=P$7$FFsEY$HF~$l$J$$$h$&$K$7$F$7$^$&$+$bCN$l$^$;$s!#IT47\e(B
+\e$B$l$J?M$,$h$/$d$k$3$H$G$9!#\e(B
 
-@code{nnkiboze} \e$B$N9=@.%0%k!<%W$O@8$-$F$$$kI,MW$O$"$j$^$;$s\e(B ---
-\e$B;`$s$G$F$bNI$$$7!"30It%0%k!<%W$G$b9=$$$^$;$s!#L5@)8B$G$9!#\e(B
+@code{nnkiboze} \e$B$N9=@.%0%k!<%W$O@8$-$F$$$kI,MW$O$"$j$^$;$s\e(B --- \e$B;`$s$G$F\e(B
+\e$B$bNI$$$7!"30It%0%k!<%W$G$b9=$$$^$;$s!#L5@)8B$G$9!#\e(B
 
 @vindex nnkiboze-directory
-@code{nnkiboze} \e$B%0%k!<%W$N@8@.$K$h$C$F!"Fs$D$N%U%!%$%k$,\e(B
-@code{nnkiboze-directory} \e$BFb$K:n@.$5$l$^$9!#$3$N=i4|@_DjCM$O\e(B
-@file{~/News/} \e$B$G$9!#0lJ}$N%U%!%$%k$O$=$N%0%k!<%W$NA45-;v$N\e(B
-@sc{nov} \e$B%X%C%@!<9T$r4^$s$G$$$F!"$b$&0lJ}$O9=@.5-;v$r8+$D$1$k$?\e(B
-\e$B$a$K$I$N%0%k!<%W$,8!:w$5$l$?$+$N>pJs$r3JG<$9$k!"\e(B@file{.newsrc}
-\e$B$NJd=u%U%!%$%k$G$9!#\e(B
-
-@code{nnkiboze} \e$B%0%k!<%WFb$N4{FI$H$J$C$?5-;v$O!"$=$N5-;v$N\e(B
-@sc{nov} \e$B9T$,\e(B @sc{nov} \e$B%U%!%$%k$+$i:o=|$5$l$^$9!#\e(B
+@code{nnkiboze} \e$B%0%k!<%W$N@8@.$K$h$C$F!"Fs$D$N%U%!%$%k\e(B
+ @code{nnkiboze-directory} \e$BFb$K:n@.$5$l$^$9!#$3$N=i4|@_DjCM\e(B
+\e$B$O\e(B @file{~/News/} \e$B$G$9!#0lJ}$N%U%!%$%k$O$=$N%0%k!<%W$NA45-;v\e(B
+\e$B$N\e(B @sc{nov} \e$B%X%C%@!<9T$r4^$s$G$$$F!"$b$&0lJ}$O9=@.5-;v$r8+$D$1$k$?$a$K$I\e(B
+\e$B$N%0%k!<%W$,8!:w$5$l$?$+$N>pJs$r3JG<$9$k!"\e(B@file{.newsrc} \e$B$NJd=u%U%!%$%k\e(B
+\e$B$G$9!#\e(B
 
+@code{nnkiboze} \e$B%0%k!<%WFb$N4{FI$H$J$C$?5-;v$O!"$=$N5-;v$N\e(B @sc{nov} \e$B9T\e(B
+\e$B$,\e(B @sc{nov} \e$B%U%!%$%k$+$i:o=|$5$l$^$9!#\e(B
 
 @node Gnus Unplugged
 @section Gnus \e$B$N@Z$jN%$7\e(B
@@ -12733,123 +13699,121 @@ kiboze \e$B%0%k!<%W$r:n@.$9$k$K$O!"%0%k!<%W%P%C%U%!$G\e(B @kbd{G k} \e$BL?Na\e(B
 @cindex Gnus Agent
 @cindex Gnus Unplugged
 
-\e$B$$$K$7$($N;~Be\e(B(\e$B$*$h$=\e(B 1988 \e$BG/\e(B 2 \e$B7n:"\e(B)\e$B!"?M!9$O%K%e!<%9%j!<%@!<$r!"\e(B
-\e$BBg$-$J%^%7%s$N>e$G%M%C%H%o!<%/$K1JB3E*$K@\B3$7$FAv$i$;$F$$$^$7$?!#\e(B
-\e$B%K%e!<%9$NG[Aw$O%K%e!<%9%5!<%P!<$K$h$C$F<h$j07$o$l!"A4$F$N%K%e!<\e(B
-\e$B%9%j!<%@!<$,$9$Y$-$3$H$O!"%K%e!<%9$rFI$`$3$H$G$"$C$?$N$G$9!#?.$8\e(B
-\e$B$i$l$J$$$+$b$7$l$^$;$s$,!#\e(B
-
-\e$B:#F|$G$O!"B?$/$N?M!9$O<+Bp$G%K%e!<%9$d%a!<%k$rFI$_!"%M%C%H%o!<%/\e(B
-\e$B$K@\B3$9$k$?$a$K%b%G%`$NN`$r;H$$$^$9!#EEOCBe$N@A5a=q$,G|Bg$J$b$N\e(B
-\e$B$K>e$i$J$$$h$&$K!"A4$F$N%K%e!<%9$H%a!<%k$r5[$$>e$2!"EEOC$r@Z$j!"\e(B
-\e$B?t;~4V3]$1$FFI$_!"$=$7$FAw$j$?$$JV?.$rA4$FAw?.$9$k!"$H$$$&<jCJ$r\e(B
-\e$B;}$D$3$H$ONI$$$3$H$G$"$j$^$7$g$&!#$"$H$O$3$N<j=g$r7+$jJV$9$N$G$9!#\e(B
-
-\e$B$b$A$m$s!"$3$l$r9T$&$?$a$K%K%e!<%9%5!<%P!<$r;H$&$3$H$b$G$-$^$9!#\e(B
-\e$B;d$O\e(B @code{inn} \e$B$r\e(B @code{slurp}\e$B!"\e(B@code{pop}\e$B!"\e(B @code{sendmail} \e$B$H\e(B
-\e$B0l=o$K$3$3?tG/;H$C$F$-$^$7$?$,!"$7$+$7$3$l$OB`6~$J;E;v$G$9!#$b$7\e(B
-\e$B$"$k%^%7%s>e$G%K%e!<%9$rFI$`?M$,$"$J$?$7$+$$$J$1$l$P!"%K%e!<%9%5!<\e(B
-\e$B%P!<$N5!G=$r%K%e!<%9%j!<%@!<$KG$$;$k$h$&$K$9$k$3$H$OM}$K$+$J$C$F\e(B
-\e$B$$$^$9!#\e(B
+\e$B$$$K$7$($N;~Be\e(B(\e$B$*$h$=\e(B 1988 \e$BG/\e(B2\e$B7n:"\e(B)\e$B!"?M!9$O%K%e!<%9%j!<%@!<$r!"Bg$-$J%^\e(B
+\e$B%7%s$N>e$G%M%C%H%o!<%/$K1JB3E*$K@\B3$7$FAv$i$;$F$$$^$7$?!#%K%e!<%9$NG[Aw\e(B
+\e$B$O%K%e!<%9%5!<%P!<$K$h$C$F<h$j07$o$l!"A4$F$N%K%e!<%9%j!<%@!<$,$9$Y$-$3$H\e(B
+\e$B$O!"%K%e!<%9$rFI$`$3$H$G$"$C$?$N$G$9!#?.$8$i$l$J$$$+$b$7$l$^$;$s$,!#\e(B
 
-Gnus \e$B$r\e(B ``\e$B%*%U%i%$%s\e(B'' \e$B$N%K%e!<%9%j!<%@!<$H$7$F;H$&$N$O6K$a$F4J\e(B
-\e$BC1$G$9!#\e(B
+\e$B:#F|$G$O!"B?$/$N?M!9$O<+Bp$G%K%e!<%9$d%a!<%k$rFI$_!"%M%C%H%o!<%/$K@\B3$9\e(B
+\e$B$k$?$a$K%b%G%`$NN`$r;H$$$^$9!#EEOCBe$N@A5a=q$,G|Bg$J$b$N$K>e$i$J$$$h$&$K!"\e(B
+\e$BA4$F$N%K%e!<%9$H%a!<%k$r5[$$>e$2!"EEOC$r@Z$j!"?t;~4V3]$1$FFI$_!"$=$7$FAw\e(B
+\e$B$j$?$$JV?.$rA4$FAw?.$9$k!"$H$$$&<jCJ$r;}$D$3$H$ONI$$$3$H$G$"$j$^$7$g$&!#\e(B
+\e$B$"$H$O$3$N<j=g$r7+$jJV$9$N$G$9!#\e(B
+
+\e$B$b$A$m$s!"$3$l$r9T$&$?$a$K%K%e!<%9%5!<%P!<$r;H$&$3$H$b$G$-$^$9!#;d\e(B
+\e$B$O\e(B @code{inn} \e$B$r\e(B @code{slurp}, @code{pop}, @code{sendmail} \e$B$H0l=o$K$3$3\e(B
+\e$B?tG/;H$C$F$-$^$7$?$,!"$7$+$7$3$l$OB`6~$J;E;v$G$9!#$b$7$"$k%^%7%s>e$G%K%e!<\e(B
+\e$B%9$rFI$`?M$,$"$J$?$7$+$$$J$1$l$P!"%K%e!<%9%5!<%P!<$N5!G=$r%K%e!<%9%j!<%@!<\e(B
+\e$B$KG$$;$k$h$&$K$9$k$3$H$OM}$K$+$J$C$F$$$^$9!#\e(B
+
+Gnus \e$B$r\e(B ``\e$B%*%U%i%$%s\e(B'' \e$B$N%K%e!<%9%j!<%@!<$H$7$F;H$&$N$O6K$a$F4JC1$G$9!#\e(B
 
 @itemize @bullet
 @item
-\e$B$^$:!"%M%C%H%o!<%/$K40A4$K7R$,$C$F$$$k%^%7%s>e$GF0:n$5$;$k$N$HF1\e(B
-\e$B$8$h$&$K!"\e(Bgnus \e$B$r@_Dj$7$^$9!#$^$:$d$C$F$*$$$G!#KM$O$3$3$GBT$C$F\e(B
-\e$B$k$+$i!#\e(B
+\e$B$^$:!"%M%C%H%o!<%/$K40A4$K7R$,$C$F$$$k%^%7%s>e$GF0:n$5$;$k$N$HF1$8$h$&$K!"\e(B
+gnus \e$B$r@_Dj$7$^$9!#$^$:$d$C$F$*$$$G!#KM$O$3$3$GBT$C$F$k$+$i!#\e(B
 
 @item
-\e$B$=$7$?$i!"0J2<$NKbK!$N<vJ8$r$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$N\e(B
-\e$B:G8e$K=q$$$F$/$@$5$$!#\e(B
+\e$B$=$7$?$i!"0J2<$NKbK!$N<vJ8$r$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$N:G8e$K=q\e(B
+\e$B$$$F$/$@$5$$!#\e(B
 
 @lisp
 (gnus-agentize)
 @end lisp
 @end itemize
 
-\e$B$3$s$@$1$G$9!#$3$l$G\e(B gnus \e$B$O\e(B ``\e$B%*%U%i%$%s\e(B'' \e$B%K%e!<%9%j!<%@!<$K$J$C\e(B
-\e$B$F$7$^$$$^$7$?!#\e(B
+\e$B$3$s$@$1$G$9!#$3$l$G\e(B gnus \e$B$O\e(B ``\e$B%*%U%i%$%s\e(B'' \e$B%K%e!<%9%j!<%@!<$K$J$C$F$7$^\e(B
+\e$B$$$^$7$?!#\e(B
 
-\e$B$b$A$m$s!"$3$l$r%*%U%i%$%s%K%e!<%9%j!<%@!<$H$7$F;H$&$K$O!"$$$/$D\e(B
-\e$B$+?7$7$$L?Na$r3P$($J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$b$A$m$s!"$3$l$r%*%U%i%$%s%K%e!<%9%j!<%@!<$H$7$F;H$&$K$O!"$$$/$D$+?7$7$$\e(B
+\e$BL?Na$r3P$($J$/$F$O$J$j$^$;$s!#\e(B
 
 @menu
-* Agent Basics::           \e$B$3$l$i$O$I$&F0$/$N$+!#\e(B
-* Agent Categories::       \e$B2?$r%@%&%s%m!<%I$9$k$+$r\e(B gnus \e$B%(!<%8%'%s%H$K65$($kJ}K!!#\e(B
-* Agent Commands::         \e$B3F%P%C%U%!!<$G$N?7$7$$L?Na!#\e(B
-* Agent Expiry::           \e$B8E$$5-;v$r>C$9J}K!!#\e(B
-* Outgoing Messages::      \e$BEj9F!"%a!<%k$r=P$9$H$-$K$J$K$,5/$3$k$N$+\e(B?
-* Agent Variables::        \e$B%+%9%?%^%$%:$O3Z$7!#\e(B
-* Example Setup::          \e$B%*%U%i%$%s?M4V$N$?$a$N\e(B @file{.gnus.el} \e$B$NNc!#\e(B
-* Batching Agents::        @code{cron} \e$B%8%g%V$K$h$k%K%e!<%9<hF@J}K!!#\e(B
-* Agent Caveats::          \e$B$"$J$?$,M=A[$9$k$3$H$H!"$=$l$,<B:]$K$9$k$3$H!#\e(B
-* Control Agents::         Offline \e$B$r%3%s%H%m!<%k$9$k\e(B gnus-offline
+* Agent Basics::      \e$B$3$l$i$O$I$&F0$/$N$+\e(B
+* Agent Categories::  \e$B2?$r%@%&%s%m!<%I$9$k$+$r\e(B gnus \e$B%(!<%8%'%s%H$K65$($kJ}K!\e(B
+* Agent Commands::    \e$B3F%P%C%U%!!<$G$N?7$7$$L?Na\e(B
+* Agent Expiry::      \e$B8E$$5-;v$r>C$9J}K!\e(B
+* Agent and IMAP::    \e$B%(!<%8%'%s%H$r\e(B IMAP \e$B$G;H$&J}K!\e(B
+* Outgoing Messages:: \e$BEj9F!"%a!<%k$r=P$9$H$-$K$J$K$,5/$3$k$N$+\e(B?
+* Agent Variables::   \e$B%+%9%?%^%$%:$O3Z$7\e(B
+* Example Setup::     \e$B%*%U%i%$%s?M4V$N$?$a$N\e(B @file{.gnus.el} \e$B$NNc\e(B
+* Batching Agents::   @code{cron} \e$B%8%g%V$K$h$k%K%e!<%9<hF@J}K!\e(B
+* Agent Caveats::     \e$B$"$J$?$,M=A[$9$k$3$H$H!"$=$l$,<B:]$K$9$k$3$H\e(B
+* Control Agents::    Offline \e$B$r%3%s%H%m!<%k$9$k\e(B gnus-offline
 @end menu
 
-
 @node Agent Basics
 @subsection \e$B%(!<%8%'%s%H$N4pAC\e(B
 
 \e$B$^$:!"$$$/$D$+$NMQ8l$rJRIU$1$F$*$-$^$7$g$&!#\e(B
 
-\e$B$"$J$?$,%M%C%H%o!<%/$H$NDL?.$,@Z$l$F$$$k$H$-\e(B(\e$B$G%(!<%8%'%s%H$,$=\e(B
-\e$B$l$rCN$i$5$l$F$$$k$H$-\e(B)\e$B$O!"\e(Bgnus \e$B%(!<%8%'%s%H$O@Z$jN%$5$l$F$$$k\e(B
-(@dfn{unplugged})\e$B!"$H8@$$$^$9!#%M%C%H%o!<%/$NDL?.$,I|3h$7\e(B (\e$B$=$7\e(B
-\e$B$F\e(B gnus \e$B$,$=$l$rCN$l$P\e(B)\e$B!"%(!<%8%'%s%H$O:9$79~$^$l$F$$$k\e(B
-(@dfn{plugged})\e$B!"$H8@$$$^$9!#\e(B
+\e$B$"$J$?$,%M%C%H%o!<%/$H$NDL?.$,@Z$l$F$$$k$H$-\e(B(\e$B$G%(!<%8%'%s%H$,$=$l$rCN$i\e(B
+\e$B$5$l$F$$$k$H$-\e(B)\e$B$O!"\e(Bgnus \e$B%(!<%8%'%s%H$O@Z$jN%$5$l$F$$$k\e(B (@dfn{unplugged})\e$B!"\e(B
+\e$B$H8@$$$^$9!#%M%C%H%o!<%/$NDL?.$,I|3h$7\e(B (\e$B$=$7$F\e(B gnus \e$B$,$=$l$rCN$l$P\e(B)\e$B!"%(!<\e(B
+\e$B%8%'%s%H$O:9$79~$^$l$F$$$k\e(B (@dfn{plugged})\e$B!"$H8@$$$^$9!#\e(B
 
-\e$B%m!<%+%k\e(B (@dfn{local}) \e$B%^%7%s$H$O!"$"$J$?$,?($C$F$$$k%^%7%s$G!"\e(B
-\e$B%M%C%H%o!<%/$K7QB3E*$K@\B3$5$l$F$$$k$b$N$G$O$"$j$^$;$s!#\e(B
+\e$B%m!<%+%k\e(B (@dfn{local}) \e$B%^%7%s$H$O!"$"$J$?$,?($C$F$$$k%^%7%s$G!"%M%C%H%o!<\e(B
+\e$B%/$K7QB3E*$K@\B3$5$l$F$$$k$b$N$G$O$"$j$^$;$s!#\e(B
 
-\e$B%@%&%s%m!<%I\e(B (@dfn{download}) \e$B$H$O%M%C%H%o!<%/$+$i2?$+$r$"$J$?$N\e(B
-\e$B%m!<%+%k%^%7%s$K<h$C$F$/$k$3$H$r0UL#$7$^$9!#%"%C%W%m!<%I\e(B
-(@dfn{upload}) \e$B$O$=$N5U$r$9$k$3$H$G$9!#\e(B
+\e$B%@%&%s%m!<%I\e(B (@dfn{download}) \e$B$H$O%M%C%H%o!<%/$+$i2?$+$r$"$J$?$N%m!<%+%k\e(B
+\e$B%^%7%s$K<h$C$F$/$k$3$H$r0UL#$7$^$9!#%"%C%W%m!<%I\e(B (@dfn{upload}) \e$B$O$=$N5U\e(B
+\e$B$r$9$k$3$H$G$9!#\e(B
 
 \e$B%(!<%8%'%s%H$r;H$C$?E57?E*$J\e(B gnus \e$B$NBPOCA`:n$r8+$F$_$^$7$g$&!#\e(B
 
 @itemize @bullet
 
 @item
-Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'\e(B
-\e$B%s%H$r@Z$jN%$5$l$F$$$k>uBV$G5/F0$7$^$9!#$3$N>uBV$G$O!"$9$G$K<hF@\e(B
-\e$B$7$F$$$k%K%e!<%95-;v$OA4$FFI$`$3$H$,$G$-$^$9!#\e(B
+Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'%s%H$r@Z\e(B
+\e$B$jN%$5$l$F$$$k>uBV$G5/F0$7$^$9!#$3$N>uBV$G$O!"$9$G$K<hF@$7$F$$$k%K%e!<%9\e(B
+\e$B5-;v$OA4$FFI$`$3$H$,$G$-$^$9!#\e(B
 
 @item
-\e$B$=$7$F!"?7$7$$%K%e!<%9$,E~Ce$7$F$$$k$+$I$&$+$rD4$Y$k$3$H$K$7$^$9!#\e(B
-\e$B$"$J$?$O\e(B (PPP \e$B$+2?$+$r;H$C$F\e(B) \e$B$"$J$?$N%^%7%s$r%M%C%H%o!<%/$K@\B3\e(B
-\e$B$7!"$=$7$F\e(B gnus \e$B$r:9$79~$`$?$a$K\e(B @kbd{J j} \e$B$rC!$-$^$9!#\e(B
+\e$B$=$7$F!"?7$7$$%K%e!<%9$,E~Ce$7$F$$$k$+$I$&$+$rD4$Y$k$3$H$K$7$^$9!#$"$J$?\e(B
+\e$B$O\e(B (PPP \e$B$+2?$+$r;H$C$F\e(B) \e$B$"$J$?$N%^%7%s$r%M%C%H%o!<%/$K@\B3$7!"\e(Bgnus \e$B$r:9\e(B
+\e$B$79~$`$?$a$K\e(B @kbd{J j} \e$B$rC!$-!"$=$7$FIaDL$O?7Ce%a!<%k$r8!::$9$k$?$a\e(B
+\e$B$K\e(B @kbd{g} \e$B$r;H$$$^$9!#\e(Bgnus \e$B%(!<%8%'%s%H$,@Z$jN%$5$l$F$$\e(B
+\e$B$k\e(B (@dfn{unplugged}) \e$B$H$-$N?7Ce%a!<%k$N8!::$K$D$$$F\e(B
+\e$B$O\e(B @pxref{Mail Source Specifiers} \e$B$r;2>H$7$F2<$5$$!#\e(B
 
 @item
-\e$B$=$7$F!"$=$N>l$G$9$0$K?7$7$$%K%e!<%9$rFI$`$3$H$b$G$-$^$9$7!"%K%e!<\e(B
-\e$B%9$r%m!<%+%k%^%7%s$K%@%&%s%m!<%I$9$k$3$H$b$G$-$^$9!#8e<T$r<B9T$7\e(B
-\e$B$?$1$l$P!"\e(B@kbd{J s} \e$B$r2!$7$F!"A4%0%k!<%W$+$iE,@Z$J5-;v$rA4$F<hF@\e(B
-\e$B$7$^$9!#\e(B(Gnus \e$B$K$I$N5-;v$r%@%&%s%m!<%I$7$?$$$+$r;XDj$9$k$K$O\e(B
-@pxref{Agent Categories} \e$B$r;2>H$7$F$/$@$5$$!#\e(B)
+\e$B$=$7$F!"$=$N>l$G$9$0$K?7$7$$%K%e!<%9$rFI$`$3$H$b$G$-$^$9$7!"%K%e!<%9$r%m!<\e(B
+\e$B%+%k%^%7%s$K%@%&%s%m!<%I$9$k$3$H$b$G$-$^$9!#8e<T$r<B9T$7$?$1$l$P!"\e(B
+@kbd{g} \e$B$r2!$7$F?7Ce%a!<%k$r8!::$7$F$+$i\e(B @kbd{J s} \e$B$GA4%0%k!<%W$+$iE,@Z\e(B
+\e$B$J5-;v$rA4$F<hF@$7$^$9!#\e(B(Gnus \e$B$K$I$N5-;v$r%@%&%s%m!<%I$7$?$$$+$r;XDj$9$k\e(B
+\e$B$K$O\e(B @pxref{Agent Categories} \e$B$r;2>H$7$F$/$@$5$$!#\e(B)
 
 @item
-\e$B5-;v$r<hF@$7$?8e$O\e(B @kbd{J j} \e$B$r2!$7$F!"\e(Bgnus \e$B$r:F$S@Z$jN%$7>uBV$K\e(B
-\e$B$5$;!"\e(BPPP \e$B4X78\e(B(\e$B$J$I\e(B)\e$B$rJD$8$^$9!#$=$&$7$F%K%e!<%9$r%*%U%i%$%s$GFI\e(B
-\e$B$`$3$H$,$G$-$^$9!#\e(B
+\e$B5-;v$r<hF@$7$?8e$O\e(B @kbd{J j} \e$B$r2!$7$F!"\e(Bgnus \e$B$r:F$S@Z$jN%$7>uBV$K$5$;!"\e(B
+PPP \e$B4X78\e(B(\e$B$J$I\e(B)\e$B$rJD$8$^$9!#$=$&$7$F%K%e!<%9$r%*%U%i%$%s$GFI$`$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
 
 @item
-\e$B$=$7$FBh\e(B 2 \e$B%9%F%C%W$KLa$j$^$9!#\e(B
+\e$B$=$7$FBhFs%9%F%C%W$KLa$j$^$9!#\e(B
 @end itemize
 
-\e$B0J2<$K%(!<%8%'%s%H$r=i$a$F\e(B(\e$B$+$=$3$i$K\e(B)\e$B;H$&$H$-$KI,MW$J$$$/$D$+$N\e(B
-\e$B:n6H$r<($7$^$9!#\e(B
+\e$B0J2<$K%(!<%8%'%s%H$r=i$a$F\e(B(\e$B$+$=$3$i$K\e(B)\e$B;H$&$H$-$KI,MW$J$$$/$D$+$N:n6H$r<(\e(B
+\e$B$7$^$9!#\e(B
 
 @itemize @bullet
 
 @item
-\e$B$I$N%5!<%P!<$r%(!<%8%'%s%H$GLLE]$r8+$k$+$r7h$a$^$9!#$b$7%a!<%k%P%C\e(B
-\e$B%/%(%s%I$,$"$l$P!"$=$l$r%(!<%8%'%s%H$KLLE]$r8+$5$;$k$N$O$*$=$i$/\e(B
-\e$BL50UL#$G$7$g$&!#%5!<%P!<%P%C%U%!!<$K0\F0$7\e(B (\e$B%0%k!<%W%P%C%U%!!<$G\e(B
-@kbd{^})\e$B!"%(!<%8%'%s%H$K07$C$FM_$7$$%5!<%P!<\e(B(\e$BJ#?t2D\e(B)\e$B$G\e(B @kbd{J a}
-\e$B$r2!$7$^$9\e(B (@pxref{Server Agent Commands})\e$B!#$3$l$OBgDq$N>l9g!"%P%C\e(B
-\e$B%U%!!<$N2<$K0lMwI=<($5$l$F$$$k4pK\A*BrJ}K!$@$1$G$7$g$&!#\e(B
+\e$B$I$N%5!<%P!<$r%(!<%8%'%s%H$GLLE]$r8+$k$+$r7h$a$^$9!#$b$7%a!<%k%P%C%/%(%s\e(B
+\e$B%I$,$"$l$P!"$=$l$r%(!<%8%'%s%H$KLLE]$r8+$5$;$k$N$O$*$=$i$/L50UL#$G$7$g$&!#\e(B
+\e$B%5!<%P!<%P%C%U%!!<$K0\F0$7\e(B (\e$B%0%k!<%W%P%C%U%!!<$G\e(B @kbd{^})\e$B!"%(!<%8%'%s%H\e(B
+\e$B$K07$C$FM_$7$$%5!<%P!<\e(B(\e$BJ#?t2D\e(B)\e$B$G\e(B @kbd{J a} \e$B$r2!$7$^\e(B
+\e$B$9\e(B (@pxref{Server Agent Commands})\e$B!#$3$l$OBgDq$N>l9g!"%P%C%U%!!<$N2<$K0l\e(B
+\e$BMwI=<($5$l$F$$$k4pK\A*BrJ}K!$@$1$G$7$g$&!#\e(B
 
 @item
 \e$B%@%&%s%m!<%IJ}?K$r7hDj$7$^$9!#\e(B@xref{Agent Categories}.
@@ -12858,16 +13822,15 @@ Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'\e
 \e$B$($($H!D!"0J>e$G$9!#\e(B
 @end itemize
 
-
 @node Agent Categories
 @subsection \e$B%(!<%8%'%s%HJ,N`\e(B
 
-\e$B%K%e!<%9G[Aw5!9=$H%K%e!<%9%j!<%@!<$rE}9g$9$k0l$D$NBg$-$JM}M3$O!"\e(B
-\e$B$I$N5-;v$r%@%&%s%m!<%I$9$k$+$K$D$$$F!"$h$jNI$$@)8f$r2DG=$H$9$k$3\e(B
-\e$B$H$G$9!#G|Bg$JNL$N5-;v$r%@%&%s%m!<%I$7$F$b$"$^$j0UL#$O$J$/!"$=$l\e(B
-\e$B$i$rFI$s$G$b$"$^$jLLGr$/$J$$$3$H$,J,$+$k$@$1$G$9!#2?$r%@%&%s%m!<\e(B
-\e$B%I$9$k$+$NA*Br$O$b$C$H?5=E$G$"$k$Y$-$G$"$j!"$=$N5-;v$,LLGr$$$HJ,\e(B
-\e$B$+$C$?;~E@$G!"%@%&%s%m!<%I$9$k$?$a$N0u$r<jF0$GIU$1$k$Y$-$J$N$G$9!#\e(B
+\e$B%K%e!<%9G[Aw5!9=$H%K%e!<%9%j!<%@!<$rE}9g$9$k0l$D$NBg$-$JM}M3$O!"$I$N5-;v\e(B
+\e$B$r%@%&%s%m!<%I$9$k$+$K$D$$$F!"$h$jNI$$@)8f$r2DG=$H$9$k$3$H$G$9!#G|Bg$JNL\e(B
+\e$B$N5-;v$r%@%&%s%m!<%I$7$F$b$"$^$j0UL#$O$J$/!"$=$l$i$rFI$s$G$b$"$^$jLLGr$/\e(B
+\e$B$J$$$3$H$,J,$+$k$@$1$G$9!#2?$r%@%&%s%m!<%I$9$k$+$NA*Br$O$b$C$H?5=E$G$"$k\e(B
+\e$B$Y$-$G$"$j!"$=$N5-;v$,LLGr$$$HJ,$+$C$?;~E@$G!"%@%&%s%m!<%I$9$k$?$a$N0u$r\e(B
+\e$B<jF0$GIU$1$k$Y$-$J$N$G$9!#\e(B
 
 \e$B2?$r%@%&%s%m!<%I$9$k$+$r@)8f$9$k<g$JJ}K!$O!"J,N`\e(B (@dfn{category}) \e$B$r:n@.\e(B
 \e$B$7$F!"$=$7$F$=$NJ,N`$K$$$/$D$+\e(B (\e$B$"$k$$$OA4It\e(B) \e$B$N%0%k!<%W$r3d$jEv$F$^$9!#\e(B
@@ -12875,12 +13838,11 @@ Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'\e
 \e$B@.$H4IM}$N$?$a$NFH<+$N%P%C%U%!!<$r;}$C$F$$$^$9!#\e(B
 
 @menu
-* Category Syntax::       \e$BJ,N`$H$O$I$s$J$b$N$+!#\e(B
-* The Category Buffer::   \e$BJ,N`$r4IM}$9$k%P%C%U%!!<!#\e(B
-* Category Variables::    \e$B%+%9%?%^%$%6\e(B"\e$B$i\e(B"\e$B%9\e(B
+* Category Syntax::     \e$BJ,N`$H$O$I$s$J$b$N$+\e(B
+* The Category Buffer:: \e$BJ,N`$r4IM}$9$k%P%C%U%!!<\e(B
+* Category Variables::  \e$B%+%9%?%^%$%6\e(B"\e$B$i\e(B"\e$B%9\e(B
 @end menu
 
-
 @node Category Syntax
 @subsubsection \e$BJ,N`$NJ8K!\e(B
 
@@ -12888,18 +13850,18 @@ Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'\e
 
 @enumerate
 @item
-(\e$BDL>o\e(B) \e$B$I$N5-;v$r%@%&%s%m!<%I$9$k$N$,E,Ev$+$H$$$&Bg$^$+$JNX3T$r\e(B
-\e$BM?$($k=R8l!#$=$7$F\e(B
+(\e$BDL>o\e(B) \e$B$I$N5-;v$r%@%&%s%m!<%I$9$k$N$,E,Ev$+$H$$$&Bg$^$+$JNX3T$rM?$($k=R\e(B
+\e$B8l!#$=$7$F\e(B
 
 @item
-(\e$BDL>o\e(B) \e$B$I$N5-;v$r%@%&%s%m!<%I$9$k$+$r7h$a$k$H$-$N$h$j$-$a$N:Y$+\e(B
-\e$B$$%9%3%"5,B'!#\e(B(\e$B$3$N%@%&%s%m!<%I%9%3%"\e(B (@dfn{download score}) \e$B$O\e(B
-\e$BDL>o$N%9%3%"$H$OI,$:$7$b4X78$,L5$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B)
+(\e$BDL>o\e(B) \e$B$I$N5-;v$r%@%&%s%m!<%I$9$k$+$r7h$a$k$H$-$N$h$j$-$a$N:Y$+$$%9%3%"\e(B
+\e$B5,B'!#\e(B(\e$B$3$N%@%&%s%m!<%I%9%3%"\e(B (@dfn{download score}) \e$B$ODL>o$N%9%3%"$H$O\e(B
+\e$BI,$:$7$b4X78$,L5$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B)
 @end enumerate
 
 \e$B=R8l$N0lHVC1=c$J7A<0$O\e(B @code{true} \e$B$d\e(B @code{false} \e$B$N$h$&$JC1FH$N=R8l$+\e(B
-\e$B$i$J$j$^$9!#$3$l$i$N\e(B2\e$B$D$O$=$l$>$l!"A4$F$N2DG=$J5-;v$r%@%&%s%m!<%I$9$k$+!"\e(B
-\e$BA4$/2?$b$7$J$$$+!"$G$9!#$3$l$i$N\e(B2\e$B$D$NFCJL$J=R8l$N>l9g$O!"DI2C$N%9%3%"5,\e(B
+\e$B$i$J$j$^$9!#$3$l$i$NFs$D$O$=$l$>$l!"A4$F$N2DG=$J5-;v$r%@%&%s%m!<%I$9$k$+!"\e(B
+\e$BA4$/2?$b$7$J$$$+!"$G$9!#$3$l$i$NFs$D$NFCJL$J=R8l$N>l9g$O!"DI2C$N%9%3%"5,\e(B
 \e$BB'$OM>J,$G$9!#\e(B
 
 @code{high} \e$B$d\e(B @code{low} \e$B$H$$$&=R8l$O2<$G@bL@$5$l$F$$$k$h$&$K!"\e(B
@@ -12907,19 +13869,19 @@ Gnus \e$B$r\e(B @code{gnus-unplugged} \e$B$G5/F0$7$^$9!#$3$l$O\e(B gnus \e$B%(!<%8%'\e
 \e$B%3%"$H$N4X78$K$h$j5-;v$r%@%&%s%m!<%I$7$^$9!#\e(B
 
 \e$B%@%&%s%m!<%I$,E,@Z$+$I$&$+$N!"$5$i$K:Y$+$$@)8f$rF@$k$?$a$K!"=R8l$OO@M}1i\e(B
-\e$B;;;R$,4V$K;6$j$P$a$i$l$?=R8l$NAH$_9g$o$;$+$i$J$k$3$H$,$G$-$^$9\e(B
+\e$B;;;R$,4V$K;6$j$P$a$i$l$?=R8l$NAH$_9g$o$;$+$i$J$k$3$H$,$G$-$^$9!#\e(B
 
 \e$B$*$=$i$/$$$/$D$+$NNc$,$=$N$^$^;H$($^$9!#\e(B
 
-\e$B0J2<$O4JC1$J=R8l$G$9!#\e(B(\e$B$3$l$O=i4|@_Dj$N=R8l$G$9!#$D$^$j!"B>$N$I\e(B
-\e$B$NJ,N`$K$b4^$^$l$J$$A4$F$N%0%k!<%W$KBP$7$F;HMQ$5$l$^$9!#\e(B)
+\e$B0J2<$O4JC1$J=R8l$G$9!#\e(B(\e$B$3$l$O=i4|@_Dj$N=R8l$G$9!#$D$^$j!"B>$N$I$NJ,N`$K\e(B
+\e$B$b4^$^$l$J$$A4$F$N%0%k!<%W$KBP$7$F;HMQ$5$l$^$9!#\e(B)
 
 @lisp
 short
 @end lisp
 
-\e$B$H$C$F$b4JC1$G$7$g\e(B? \e$B$3$N=R8l$O!"5-;v$,C;$$\e(B(``\e$BC;$$\e(B'' \e$B2ACM$,$"$k\e(B)
-\e$B>l9g$K8B$j??$K$J$j$^$9!#\e(B
+\e$B$H$C$F$b4JC1$G$7$g\e(B? \e$B$3$N=R8l$O!"5-;v$,C;$$\e(B(``\e$BC;$$\e(B'' \e$B2ACM$,$"$k\e(B) \e$B>l9g$K8B\e(B
+\e$B$j??$K$J$j$^$9!#\e(B
 
 \e$B$3$l$O$b$C$HJ#;($J=R8l$G$9!#\e(B
 
@@ -12930,38 +13892,36 @@ short
      (not long)))
 @end lisp
 
-\e$B$3$N0UL#$O!"9b$$%9%3%"$r;}$C$F$$$k$+!"$"$k$$$O%9%3%"$,Dc$/$J$/$F\e(B
-\e$B$+$DD9$/$J$$!"$H$$$&5-;v$r%@%&%s%m!<%I$9$k!"$H$$$&$3$H$G$9!#$o$+\e(B
-\e$B$k$@$m!#\e(B
+\e$B$3$N0UL#$O!"9b$$%9%3%"$r;}$C$F$$$k$+!"$"$k$$$O%9%3%"$,Dc$/$J$/$F$+$DD9$/\e(B
+\e$B$J$$!"$H$$$&5-;v$r%@%&%s%m!<%I$9$k!"$H$$$&$3$H$G$9!#$o$+$k$@$m!#\e(B
 
-\e$B;H$C$F$b$h$$O@M}1i;;;R$O!"\e(B@code{or}\e$B!"\e(B @code{and}\e$B!"\e(B@code{not} \e$B$G\e(B
-\e$B$9!#\e(B(\e$B$b$7;H$$$?$1$l$P!"$h$j\e(B ``C'' \e$BIw$N1i;;;R\e(B @samp{|}\e$B!"\e(B@code{&}\e$B!"\e(B
-@code{!} \e$B$rBe$j$K;H$&$3$H$,$G$-$^$9!#\e(B)
+\e$B;H$C$F$b$h$$O@M}1i;;;R$O!"\e(B@code{or}, @code{and}, @code{not} \e$B$G$9!#\e(B(\e$B$b$7\e(B
+\e$B;H$$$?$1$l$P!"$h$j\e(B ``C'' \e$BIw$N1i;;;R\e(B @samp{|}, @code{&}, @code{!} \e$B$rBe$j\e(B
+\e$B$K;H$&$3$H$,$G$-$^$9!#\e(B)
 
-\e$B0J2<$N=R8l$O$"$i$+$8$aDj5A$5$l$F$$$^$9$,!"$3$l$i$N$I$l$b$"$J$?$N\e(B
-\e$B$d$j$?$$$3$H$K0lCW$7$J$1$l$P!"<+J,$GFH<+$N$b$N$r=q$/$3$H$b$G$-$^$9!#\e(B
+\e$B0J2<$N=R8l$O$"$i$+$8$aDj5A$5$l$F$$$^$9$,!"$3$l$i$N$I$l$b$"$J$?$N$d$j$?$$\e(B
+\e$B$3$H$K0lCW$7$J$1$l$P!"<+J,$GFH<+$N$b$N$r=q$/$3$H$b$G$-$^$9!#\e(B
 
 @table @code
 @item short
-\e$B5-;v$,\e(B @code{gnus-agent-short-article} \e$B9T$h$jC;$+$1$l$P??!#\e(B
-\e$B=i4|@_DjCM$O\e(B 100\e$B!#\e(B
+\e$B5-;v$,\e(B @code{gnus-agent-short-article} \e$B9T$h$jC;$+$1$l$P??!#=i4|@_DjCM\e(B
+\e$B$O\e(B 100\e$B!#\e(B
 
 @item long
-\e$B5-;v$,\e(B @code{gnus-agent-long-article} \e$B9T$h$jD9$1$l$P??!#=i4|@_Dj\e(B
-\e$BCM$O\e(B 200\e$B!#\e(B
+\e$B5-;v$,\e(B @code{gnus-agent-long-article} \e$B9T$h$jD9$1$l$P??!#=i4|@_DjCM$O\e(B 200\e$B!#\e(B
 
 @item low
-\e$B5-;v$N%@%&%s%m!<%I%9%3%"$,\e(B @code{gnus-agent-low-score} \e$B0J2<$G$"\e(B
-\e$B$l$P??!#=i4|@_DjCM$O\e(B 0\e$B!#\e(B
+\e$B5-;v$N%@%&%s%m!<%I%9%3%"$,\e(B @code{gnus-agent-low-score} \e$B0J2<$G$"$l$P??!#\e(B
+\e$B=i4|@_DjCM$O\e(B 0\e$B!#\e(B
 
 @item high
-\e$B5-;v$N%@%&%s%m!<%I%9%3%"$,\e(B @code{gnus-agent-high-score} \e$B0J>e$G$"\e(B
-\e$B$l$P??!#=i4|@_DjCM$O\e(B 0\e$B!#\e(B
+\e$B5-;v$N%@%&%s%m!<%I%9%3%"$,\e(B @code{gnus-agent-high-score} \e$B0J>e$G$"$l$P??!#\e(B
+\e$B=i4|@_DjCM$O\e(B 0\e$B!#\e(B
 
 @item spam
-gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
-\e$B<jK!$O!":#8eJQ99$5$l$k$+$b$7$l$^$;$s$,!"8=;~E@$G$O!"$3$l$O%A%'%C\e(B
-\e$B%/%5%`$r7W;;$75-;v$,0lCW$9$k$+$I$&$+$rD4$Y$F$$$^$9!#\e(B
+gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*<jK!$O!"\e(B
+\e$B:#8eJQ99$5$l$k$+$b$7$l$^$;$s$,!"8=;~E@$G$O!"$3$l$O%A%'%C%/%5%`$r7W;;$75-\e(B
+\e$B;v$,0lCW$9$k$+$I$&$+$rD4$Y$F$$$^$9!#\e(B
 
 @item true
 \e$B>o$K??!#\e(B
@@ -12970,9 +13930,11 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 \e$B>o$K56!#\e(B
 @end table
 
-\e$B$"$J$?$,<+J,$NFH<+$N=R8l4X?t$r:n@.$7$?$1$l$P!"$3$l$rCN$C$F$*$$$F\e(B
-\e$B$/$@$5$$\e(B: \e$B4X?t$O0z?tL5$7$G8F$S=P$5$l$^$9$,!"\e(B@code{gnus-headers}
-\e$B$H\e(B @code{gnus-score} \e$BF0E*JQ?t$K$OJXMx$JCM$,B+G{$5$l$^$9!#\e(B
+\e$B$"$J$?$,<+J,$NFH<+$N=R8l4X?t$r:n@.$7$?$1$l$P!"$3$l$rCN$C$F$*$$$F$/$@$5\e(B
+\e$B$$\e(B:
+\e$B4X?t$O0z?tL5$7$G8F$S=P$5$l$^$9$,!"\e(B
+@code{gnus-headers} \e$B$H\e(B @code{gnus-score} \e$BF0E*JQ?t$K$OJXMx$JCM$,B+G{$5$l\e(B
+\e$B$^$9!#\e(B
 
 \e$BNc$($P!"0lDj$NF|IU0J>eA0$KEj9F$5$l$?5-;v\e(B (\e$BNc$($P!"\e(B
 @code{gnus-agent-expire-days} \e$B0JA0$KEj9F$5$l$?$b$N\e(B) \e$B$r%@%&%s%m!<%I$7$J$$\e(B
@@ -12991,15 +13953,15 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 (not my-article-old-p)
 @end lisp
 
-\e$B$b$7$/$O!"\e(B@file{~/.gnus.el} \e$B$d2?$+B>$N$b$N$G$b!"4{Dj$N\e(B
-@code{gnus-category-predicate-list} \e$B$K<+J,$N=R8l$rDI2C$9$k$3$H$b$G$-$^$9!#\e(B
-(\e$BCm0U\e(B: \e$B$3$l$O!"\e(B@code{gnus-agent} \e$B$G\e(B @code{(gnus-agentize)} \e$B$,FI$_9~$^$l\e(B
-\e$B$?8e$G$"$kI,MW$,$"$k$G$7$g$&\e(B)
+\e$B$b$7$/$O!"\e(B@file{~/.gnus.el} \e$B$d2?$+B>$N$b$N$G$b!"4{Dj\e(B
+\e$B$N\e(B @code{gnus-category-predicate-list} \e$B$K<+J,$N=R8l$rDI2C$9$k$3$H$b$G$-\e(B
+\e$B$^$9!#\e(B(\e$BCm0U\e(B: \e$B$3$l$O!"\e(B@code{gnus-agent} \e$B$G\e(B @code{(gnus-agentize)} \e$B$,FI$_\e(B
+\e$B9~$^$l$?8e$G$"$kI,MW$,$"$k$G$7$g$&\e(B)
 
 @lisp
-(defvar  gnus-category-predicate-alist
-  (append gnus-category-predicate-alist
-        '((old . my-article-old-p))))
+(setq gnus-category-predicate-alist
+      (append gnus-category-predicate-alist
+             '((old . my-article-old-p))))
 @end lisp
 
 \e$B$=$7$F!"C1$K<!$N$h$&$K=R8l$r;XDj$7$^$9\e(B:
@@ -13012,7 +13974,6 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 \e$B!<%i!<$,$"$j!"5-;v$NF|IU$O$$$DEj9F$5$l$?$+$r>o$K3N<B$K<($9$o$1$G$O$"$j$^\e(B
 \e$B$;$s!#$"$!!"$=$l$rA4$/5$$K$7$J$$?M$b$$$^$9!#\e(B
 
-
 \e$B>e$N=R8l$O$=$NJ,N`$KB0$9$k\e(B*\e$BA4$F\e(B*\e$B$N%0%k!<%W$KE,MQ$5$l$^$9!#$7$+$7!"J,N`Cf\e(B
 \e$B$N8D!9$N%0%k!<%W$KFCDj$N=R8l$rK>$s$@$j!"BUBF2a$.$F?7$7$$J,N`$r@_Dj$G$-$J\e(B
 \e$B$$$H$-$O!"%0%k!<%W$N8D!9$N=R8l$r%0%k!<%W%Q%i%a!<%?$G<!$N$h$&$K$9$k$3$H$,\e(B
@@ -13026,7 +13987,6 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 \e$B$F$$$k$H$-$O!"\e(B@code{agent-predicate} \e$B;X<($O%I%C%HBP5-K!$G$"$kI,MW$,$"$k\e(B
 \e$B$3$H$KCm0U$7$F$/$@$5$$!#\e(B
 
-
 \e$B>e$N$b$N$HEy2A$JD9$$J}$NNc$O\e(B:
 
 @lisp
@@ -13036,18 +13996,15 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 \e$BJ,N`$N;XDj$GMW5a$5$l$k30$N4]3g8L$O$3$3$G$OF~NO$5$l$F$*$i$:!"%I%C%HBP$N5-\e(B
 \e$BK!$G$b$J$/!"=R8l$NCM$O%j%9%H$"$k$H$_$J$5$l$^$9!#\e(B
 
-
 \e$B$5$F!"%@%&%s%m!<%I%9%3%"$NJ8K!$ODL>o$N%9%3%"%U%!%$%k$NJ8K!$HF1$8$G$9$,!"\e(B
 \e$BNc30$H$7$F!"<B:]$K5-;v<+?H$rD4$Y$kI,MW$,$"$kMWAG$O6X;_$5$l$F$$$^$9!#$D$^\e(B
-\e$B$j!"0J2<$N%X%C%@!<$N$_$,%9%3%"IU$1$G$-$^$9\e(B: @code{Subject}, @code{From},
-@code{Date}, @code{Message-ID}, @code{References}, @code{Chars},
-@code{Lines}, and @code{Xref}.
+\e$B$j!"0J2<$N%X%C%@!<$N$_$,%9%3%"IU$1$G$-$^$9\e(B: @code{Subject}, @code{From}, @code{Date}, @code{Message-ID}, @code{References}, @code{Chars}, @code{Lines} and @code{Xref}.
 
 \e$B=R8l$HF1MM!"%0%k!<%W$K4X$7$F\e(B @code{\e$B%@%&%s%m!<%I%9%3%"5,B'\e(B} \e$B$N;XDj$N;HMQ\e(B
 \e$B$O!"$=$3$NA4$F$N%0%k!<%W$KE,MQ2DG=$J$iJ,N`$NDj5A!"%0%k!<%W$KFCM-$J$i%0\e(B
 \e$B%k!<%W%Q%i%a!<%?!"$N$I$A$i$+$K$G$-$^$9!#\e(B
 
-\e$BN>J}$N>l=j$G!"\e(B@code{\e$B%@%&%s%m!<%I%9%3%"5,B'\e(B} \e$B$O0J2<$N\e(B3\e$B$D$N7A<0$r<h$k$3$H\e(B
+\e$BN>J}$N>l=j$G!"\e(B@code{\e$B%@%&%s%m!<%I%9%3%"5,B'\e(B} \e$B$O0J2<$N;0$D$N7A<0$r<h$k$3$H\e(B
 \e$B$,$G$-$^$9\e(B:
 
 @enumerate
@@ -13119,10 +14076,10 @@ gnus \e$B%(!<%8%'%s%H$,$=$N5-;v$r\e(B SPAM \e$B$@$H8+Pv$7$?$i??!#$3$NH/8+E*\e(B
 @item
 @code{\e$BIaDL\e(B} \e$B$N%9%3%"%U%!%$%k$N;HMQ\e(B
 
-\e$B0l$D$N%0%k!<%W$G\e(B2\e$B$D$N%9%3%"5,B'$r0];}$7$?$/$J$/!"%0%k!<%W$NK>$_$N\e(B@code{
-\e$B%@%&%s%m!<%I\e(B} \e$B$N4p=`$,\e(B @code{\e$BFI$`\e(B} \e$B4p=`$HF1$8$J$i!"%(!<%8%'%s%H$K2?$r%@\e(B
-\e$B%&%s%m!<%I$9$k$+$r7h$a$k:]$K\e(B @code{\e$BIaDL\e(B} \e$B$N%9%3%"%U%!%$%k$r;2>H$9$k$h$&\e(B
-\e$B$K$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B0l$D$N%0%k!<%W$GFs$D$N%9%3%"5,B'$r0];}$7$?$/$J$/!"%0%k!<%W$NK>$_\e(B
+\e$B$N\e(B @code{\e$B%@%&%s%m!<%I\e(B} \e$B$N4p=`$,\e(B @code{\e$BFI$`\e(B} \e$B4p=`$HF1$8$J$i!"%(!<%8%'%s%H\e(B
+\e$B$K2?$r%@%&%s%m!<%I$9$k$+$r7h$a$k:]$K\e(B @code{\e$BIaDL\e(B} \e$B$N%9%3%"%U%!%$%k$r;2>H\e(B
+\e$B$9$k$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
 
 \e$BJ,N`Dj5A$+!"%0%k!<%W%Q%i%a!<%?$N$3$l$i$N;X<($O%(!<%8%'%s%H$K%0%k!<%W$KE,\e(B
 \e$BMQ2DG=$JA4$F$N%9%3%"%U%!%$%k$rFI$^$;!"%9%3%"IU$1%-!<%o!<%I$N;HMQ2DG=$JIt\e(B
@@ -13145,7 +14102,6 @@ file
 @end itemize
 @end enumerate
 
-
 @node The Category Buffer
 @subsubsection \e$BJ,N`%P%C%U%!!<\e(B
 
@@ -13153,7 +14109,6 @@ file
 \e$B$+$i\e(B @kbd{J c} \e$BL?Na$K$h$C$F\e(B) \e$B=i$a$F$3$l$KF~$C$?$H$-!"=i4|@_Dj$N\e(B
 \e$BJ,N`$@$1$,I=<($5$l$^$9!#\e(B
 
-
 \e$B0J2<$NL?Na$,$3$N%P%C%U%!!<$G;HMQ$G$-$^$9!#\e(B
 
 @table @kbd
@@ -13185,14 +14140,14 @@ file
 @item g
 @kindex g (Category)
 @findex gnus-category-edit-groups
-\e$B8=:_$NJ,N`$KB0$9$k%0%k!<%W$N0lMw$rJT=8$9$k\e(B
-(@code{gnus-category-edit-groups})\e$B!#\e(B
+\e$B8=:_$NJ,N`$KB0$9$k%0%k!<%W$N0lMw$rJT=8$9\e(B
+\e$B$k\e(B (@code{gnus-category-edit-groups})\e$B!#\e(B
 
 @item s
 @kindex s (Category)
 @findex gnus-category-edit-score
-\e$B8=:_$NJ,N`$N%@%&%s%m!<%I%9%3%"5,B'$rJT=8$9$k\e(B
-(@code{gnus-category-edit-score})\e$B!#\e(B
+\e$B8=:_$NJ,N`$N%@%&%s%m!<%I%9%3%"5,B'$rJT=8$9\e(B
+\e$B$k\e(B (@code{gnus-category-edit-score})\e$B!#\e(B
 
 @item l
 @kindex l (Category)
@@ -13200,7 +14155,6 @@ file
 \e$BA4$F$NJ,N`$rI=<($9$k\e(B (@code{gnus-category-list})\e$B!#\e(B
 @end table
 
-
 @node Category Variables
 @subsubsection \e$BJ,N`JQ?t\e(B
 
@@ -13243,7 +14197,6 @@ file
 
 @end table
 
-
 @node Agent Commands
 @subsection \e$B%(!<%8%'%s%HL?Na\e(B
 
@@ -13251,7 +14204,6 @@ file
 @kbd{J j} (@code{gnus-agent-toggle-plugged}) \e$BL?Na$OA4$F$N%b!<%I\e(B
 \e$B$GF0:n$7!"\e(Bgnus \e$B%(!<%8%'%s%H$N@Z$jN%$7\e(B/\e$B:9$79~$_>uBV$r@Z$jBX$($^$9!#\e(B
 
-
 @menu
 * Group Agent Commands::
 * Summary Agent Commands::
@@ -13266,8 +14218,6 @@ file
 $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @end example
 
-
-
 @node Group Agent Commands
 @subsubsection \e$B%0%k!<%W%(!<%8%'%s%HL?Na\e(B
 
@@ -13275,43 +14225,45 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @item J u
 @kindex J u (Agent Group)
 @findex gnus-agent-fetch-groups
-\e$B8=:_$N%0%k!<%W$NE,3J$J5-;v$rA4$F<hF@$9$k\e(B
-(@code{gnus-agent-fetch-groups})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$NE,3J$J5-;v$rA4$F<hF@$9\e(B
+\e$B$k\e(B (@code{gnus-agent-fetch-groups})\e$B!#\e(B
 
 @item J c
 @kindex J c (Agent Group)
 @findex gnus-enter-category-buffer
-\e$B%(!<%8%'%s%HJ,N`%P%C%U%!!<$KF~$k\e(B
-(@code{gnus-enter-category-buffer})\e$B!#\e(B
+\e$B%(!<%8%'%s%HJ,N`%P%C%U%!!<$KF~$k\e(B (@code{gnus-enter-category-buffer})\e$B!#\e(B
 
 @item J s
 @kindex J s (Agent Group)
 @findex gnus-agent-fetch-session
-\e$BA4%0%k!<%W$NE,3J$J5-;v$rA4$F<hF@$9$k\e(B
-(@code{gnus-agent-fetch-session})\e$B!#\e(B
+\e$BA4%0%k!<%W$NE,3J$J5-;v$rA4$F<hF@$9$k\e(B (@code{gnus-agent-fetch-session})\e$B!#\e(B
 
 @item J S
 @kindex J S (Agent Group)
 @findex gnus-group-send-drafts
-\e$B2<=q$-%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9$k\e(B
-(@code{gnus-group-send-drafts})\e$B!#\e(B @xref{Drafts}.
+\e$B2<=q$-%0%k!<%W$K$"$kAw?.2DG=$J%a%C%;!<%8$rA4$FAw?.$9\e(B
+\e$B$k\e(B (@code{gnus-group-send-drafts})\e$B!#\e(B@xref{Drafts}.
 
 @item J a
 @kindex J a (Agent Group)
 @findex gnus-agent-add-group
-\e$B8=:_$N%0%k!<%W$r%(!<%8%'%s%HJ,N`$KDI2C$9$k\e(B
-(@code{gnus-agent-add-group})\e$B!#\e(B \e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$rM}2r$7\e(B
-\e$B$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$r%(!<%8%'%s%HJ,N`$KDI2C$9$k\e(B (@code{gnus-agent-add-group})\e$B!#\e(B
+\e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$rM}2r$7$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item J r
 @kindex J r (Agent Group)
 @findex gnus-agent-remove-group
-\e$B8=:_$N%0%k!<%W$r!"$b$7B8:_$7$F$$$l$P!"$=$NJ,N`$+$i>C5n$7$^$9\e(B
-(@code{gnus-agent-remove-group})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$rM}2r\e(B
-\e$B$7$^$9!#\e(B(@pxref{Process/Prefix})\e$B!#\e(B
+\e$B8=:_$N%0%k!<%W$r!"$b$7B8:_$7$F$$$l$P!"$=$NJ,N`$+$i>C5n$7$^\e(B
+\e$B$9\e(B (@code{gnus-agent-remove-group})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,<-$N=,47$rM}\e(B
+\e$B2r$7$^$9!#\e(B(@pxref{Process/Prefix})\e$B!#\e(B
 
-@end table
+@item J Y
+@kindex J Y (Agent Group)
+@findex gnus-agent-synchronize-flags
+\e$B%j%b!<%H%5!<%P!<$,\e(B @dfn{unplugged} \e$B$N$H$-$KJQ99$5$l$?%U%i%0$,$"$l$PF14|\e(B
+\e$B$5$;$^$9!#\e(B
 
+@end table
 
 @node Summary Agent Commands
 @subsubsection \e$B35N,%(!<%8%'%s%HL?Na\e(B
@@ -13320,30 +14272,26 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @item J #
 @kindex J # (Agent Summary)
 @findex gnus-agent-mark-article
-\e$B5-;v$K%@%&%s%m!<%I$9$k$h$&$K0u$rIU$1$k\e(B
-(@code{gnus-agent-mark-article})\e$B!#\e(B
+\e$B5-;v$K%@%&%s%m!<%I$9$k$h$&$K0u$rIU$1$k\e(B (@code{gnus-agent-mark-article})\e$B!#\e(B
 
 @item J M-#
 @kindex J M-# (Agent Summary)
 @findex gnus-agent-unmark-article
-\e$B5-;v$+$i%@%&%s%m!<%I$9$k0u$r>C5n$9$k\e(B
-(@code{gnus-agent-unmark-article})\e$B!#\e(B
+\e$B5-;v$+$i%@%&%s%m!<%I$9$k0u$r>C5n$9$k\e(B (@code{gnus-agent-unmark-article})\e$B!#\e(B
 
 @item @@
 @kindex @@ (Agent Summary)
 @findex gnus-agent-toggle-mark
-\e$B5-;v$r%@%&%s%m!<%I$9$k$+$I$&$+$r@Z$jBX$($k\e(B
-(@code{gnus-agent-toggle-mark})\e$B!#\e(B
+\e$B5-;v$r%@%&%s%m!<%I$9$k$+$I$&$+$r@Z$jBX$(\e(B
+\e$B$k\e(B (@code{gnus-agent-toggle-mark})\e$B!#\e(B
 
 @item J c
 @kindex J c (Agent Summary)
 @findex gnus-agent-catchup
-\e$B%@%&%s%m!<%I0u$NL5$$5-;v$rA4$F4{FI$K$9$k\e(B
-(@code{gnus-agent-catchup})\e$B!#\e(B
+\e$B%@%&%s%m!<%I0u$NL5$$5-;v$rA4$F4{FI$K$9$k\e(B (@code{gnus-agent-catchup})\e$B!#\e(B
 
 @end table
 
-
 @node Server Agent Commands
 @subsubsection \e$B%5!<%P!<%(!<%8%'%s%HL?Na\e(B
 
@@ -13351,18 +14299,17 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @item J a
 @kindex J a (Agent Server)
 @findex gnus-agent-add-server
-\e$B8=:_$N%5!<%P!<$r!"\e(Bgnus \e$B%(!<%8%'%s%H$G07$o$l$k%5!<%P!<$N0lMw$KDI\e(B
-\e$B2C$9$k\e(B (@code{gnus-agent-add-server})\e$B!#\e(B
+\e$B8=:_$N%5!<%P!<$r!"\e(Bgnus \e$B%(!<%8%'%s%H$G07$o$l$k%5!<%P!<$N0lMw$KDI2C$9\e(B
+\e$B$k\e(B (@code{gnus-agent-add-server})\e$B!#\e(B
 
 @item J r
 @kindex J r (Agent Server)
 @findex gnus-agent-remove-server
-\e$B8=:_$N%5!<%P!<$r!"\e(Bgnus \e$B%(!<%8%'%s%H$G07$o$l$k%5!<%P!<$N0lMw$+$i\e(B
-\e$B:o=|$9$k\e(B (@code{gnus-agent-remove-server})\e$B!#\e(B
+\e$B8=:_$N%5!<%P!<$r!"\e(Bgnus \e$B%(!<%8%'%s%H$G07$o$l$k%5!<%P!<$N0lMw$+$i:o=|$9\e(B
+\e$B$k\e(B (@code{gnus-agent-remove-server})\e$B!#\e(B
 
 @end table
 
-
 @node Agent Expiry
 @subsection \e$B%(!<%8%'%s%H4|8B@Z$l>C5n\e(B
 
@@ -13373,32 +14320,85 @@ $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
 @cindex Gnus Agent expiry
 @cindex expiry
 
-@code{nnagent} \e$B$O4|8B@Z$l>C5n$r07$$$^$;$s!#$=$NBe$o$j$K!"FCJL$J\e(B
-@code{gnus-agent-expire} \e$BL?Na$,\e(B @code{gnus-agent-expire-days} \e$BF|\e(B
-\e$B$h$j$b8E$$4{FI5-;v$rA4$F>C5n$7$^$9!#$3$l$O$"$J$?$,%G%#%9%/MFNL$r\e(B
-\e$B;H$$@Z$j$=$&$@$H;W$C$?$H$-$K$$$D$G$b<B9T$9$k$3$H$,$G$-$^$9!#$3$l\e(B
-\e$B$OFC$KB.$/$b$J$/8zN(E*$G$b$J$/!"0lC6;O$a$F$7$^$C$?$i\e(B (@kbd{C-g}
-\e$B$d$=$NB>$G\e(B) \e$BCfCG$9$k$3$H$b$"$^$jNI$$$3$H$G$O$"$j$^$;$s!#\e(B
+@code{nnagent} \e$B$O4|8B@Z$l>C5n$r07$$$^$;$s!#$=$NBe$o$j$K!"FCJL\e(B
+\e$B$J\e(B @code{gnus-agent-expire} \e$BL?Na$,\e(B @code{gnus-agent-expire-days} \e$BF|$h$j\e(B
+\e$B$b8E$$4{FI5-;v$rA4$F>C5n$7$^$9!#$3$l$O$"$J$?$,%G%#%9%/MFNL$r;H$$@Z$j$=$&\e(B
+\e$B$@$H;W$C$?$H$-$K$$$D$G$b<B9T$9$k$3$H$,$G$-$^$9!#$3$l$OFC$KB.$/$b$J$/8zN(\e(B
+\e$BE*$G$b$J$/!"0lC6;O$a$F$7$^$C$?$i\e(B (@kbd{C-g} \e$B$d$=$NB>$G\e(B) \e$BCfCG$9$k$3$H$b$"\e(B
+\e$B$^$jNI$$$3$H$G$O$"$j$^$;$s!#\e(B
 
 @vindex gnus-agent-expire-all
-@code{gnus-agent-expire-all} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"$3$NL?Na\e(B
-\e$B$OA4$F$N5-;v\e(B --- \e$BL$FI!"4{FI!"2D;k!"J]N15-;v$r>C5n$7$^$9!#$b$7\e(B
-@code{nil} (\e$B$3$l$,=i4|@_DjCM\e(B) \e$B$G$"$l$P!"4{FI5-;v$N$_$,>C5n$NBP>]\e(B
-\e$B$H$J$j!"L$FI!"2D;k!"J]N15-;v$O$5$i$KL54|8B$KJ];}$7$^$9!#\e(B
+@code{gnus-agent-expire-all} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"$3$NL?Na$OA4$F$N\e(B
+\e$B5-;v\e(B --- \e$BL$FI!"4{FI!"2D;k!"J]N15-;v$r>C5n$7$^$9!#$b$7\e(B @code{nil} (\e$B$3$l$,\e(B
+\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$P!"4{FI5-;v$N$_$,>C5n$NBP>]$H$J$j!"L$FI!"2D;k!"J]N15-\e(B
+\e$B;v$O$5$i$KL54|8B$KJ];}$7$^$9!#\e(B
+
+@node Agent and IMAP
+@subsection \e$B%(!<%8%'%s%H$r\e(B IMAP \e$B$G;H$&J}K!\e(B
+
+\e$B%(!<%8%'%s%H$O\e(B nnimap \e$B$r4^$`\e(B gnus \e$B$N$I$s$J%P%C%/%(%s%I$G$bF0:n$7$^$9!#$7\e(B
+\e$B$+$7\e(B NNTP \e$B$H\e(B IMAP \e$B$K$O$$$/$D$+$N35G0$N0c$$$,$"$k$N$G!"$3$N9`$G$O\e(B gnus \e$B%(!<\e(B
+\e$B%8%'%s%H$r\e(B IMAP \e$B$N\e(B @dfn{unplugged} \e$B$J%b!<%I$N%/%i%$%"%s%H$H$7$F1_3j$K;H\e(B
+\e$B$($k$h$&$K$9$k$?$a$N!"$$$/$D$+$N>pJs$rDs6!$7$^$9!#\e(B
+
+\e$B?4$KN1$a$F$*$/:G=i$N$3$H$O!"A4$F$N%U%i%0\e(B (read, ticked \e$B$J$I\e(B) \e$B$O\e(B nntp \e$B$N\e(B
+\e$B>l9g$K$*$1$k\e(B @code{.newsrc} \e$B$G$O$J$/$F\e(B IMAP \e$B%5!<%P!<$KJ];}$5$l$k$H$$$&$3\e(B
+\e$B$H$G$9!#$7$?$,$C$F!"\e(Bgnus \e$B$O\e(B @dfn{unplugged} \e$B$N$H$-$N%U%i%0$NJQ2=$r3P$($F\e(B
+\e$B$*$$$F!":F$S@\B3$7$?$H$-$K$=$l$i$N%U%i%0$rF14|$5$;$kI,MW$,$"$j$^$9!#\e(B
+
+gnus \e$B$O%(!<%8%'%s%H$N85$G\e(B nnimap \e$B%0%k!<%W$rFI$`$H$-!"%G%#%U%)%k%H$G%U%i\e(B
+\e$B%0$NJQ2=$K@d$($:Cm0U$7$F$$$^$9!#$"$J$?$,:F$S@\B3$7$?$H$-!"%G%#%U%)%k%H\e(B
+\e$B$G\e(B gnus \e$B$O$"$J$?$,2?$i$+$N%U%i%0$rJQ99$7$?$+$I$&$+$rD4$Y$F!"$"$J$?$,$=$l\e(B
+\e$B$i$r%5!<%P!<$HF14|$5$;$?$$$+$I$&$+$r?R$M$^$9!#$3$N5sF0\e(B
+\e$B$O\e(B @code{gnus-agent-synchronize-flags} \e$B$G%+%9%?%^%$%:$9$k$3$H$,$G$-$^$9!#\e(B
+
+@vindex gnus-agent-synchronize-flags
+\e$B$b$7\e(B @code{gnus-agent-synchronize-flags} \e$B$,\e(B @code{nil} \e$B$@$C$?$i!"%(!<%8%'\e(B
+\e$B%s%H$O<+F0E*$K%U%i%0$rF14|$5$;$k$3$H$O$7$^$;$s!#$b$7$=$l$,=i4|CM\e(B
+\e$B$N\e(B @code{ask} \e$B$@$C$?$i!"%(!<%8%'%s%H$O$"$J$?$,:F@\B3$7$?$H$-$K$"$J$?$,2?\e(B
+\e$B$i$+$NJQ99$r9T$J$C$F$$$?$+$I$&$+$rD4$Y$F!"$=$l$i$rF14|$5$;$?$$$+$I$&$+$r\e(B
+\e$B?R$M$^$9!#$b$7$=$l$i0J30$NCM$@$C$?>l9g$O!"A4$F$N%U%i%0$O<+F0E*$KF14|$5$;\e(B
+\e$B$i$l$^$9!#\e(B
+
+\e$B$b$7$"$J$?$,!":F@\B3$7$?$H$-$K<+F0$G%U%i%0$rF14|$5$;$?$/$J$$$J$i!"<jF0$G\e(B
+\e$B9T$J$&$3$H$b$G$-$^$9!#$3$l$K$O%G%#%U%)%k%H$G%0%k!<%W%P%C%U%!$N\e(B @kbd{J Y}
+\e$B%-!<$K3d$jEv$F$i$l$?\e(B @code{gnus-agent-synchronize-flags} \e$B%3%^%s%I$r;H$$\e(B
+\e$B$^$9!#\e(B
+
+\e$B$"$J$?$,!"\e(B@dfn{unplugged} \e$B$N$H$-$N\e(B IMAP \e$B%/%i%$%"%s%H$K4|BT$9$k$G$"$m$&$$\e(B
+\e$B$/$D$+$N5!G=$O!"8=:_$N%(!<%8%'%s%H$K$O@9$j9~$^$l$F$$$^$;$s!#$=$l$i$O0J2<\e(B
+\e$B$NDL$j$G$9!#\e(B
+
+@itemize @bullet
+
+@item
+@dfn{unplugged} \e$B$N$H$-$N\e(B nnimap \e$B%0%k!<%W$X$N%3%T!<$H0\F0!#\e(B
+
+@item
+@dfn{unplugged} \e$B$N$H$-$N\e(B nnimap \e$B%0%k!<%W$N:n@.$H:o=|!#\e(B
 
+@end itemize
+
+\e$B5;=QE*Cm<a\e(B: \e$BA4$F$N%m!<%+%k$J%U%i%0$r0lEY$K%5!<%P!<$K2!$79~$`F14|$O$G$-$^\e(B
+\e$B$;$s$,!"%f!<%6$,0l$D$:$D%U%i%0$r99?7$9$k$3$H$O2DG=$G$9!#$7$?$,$C$F!"$"$J\e(B
+\e$B$?$,5-;v$N0l$D$N%U%i%0$r%;%C%H$7$F!"$=$N%0%k!<%W$rH4$1=P$F$+$i:FEY$=$N%0\e(B
+\e$B%k!<%W$rA*Br$7$F$=$N%U%i%0$r>C$;$P!"$"$J$?$,!VF14|!W$NA`:n$r9T$J$C$?$H$-\e(B
+\e$B$K!"$=$N%U%i%0$O%;%C%H$5$l$F%5!<%P!<$+$i$O:o=|$5$l$^$9!#\e(B
+@c FIXMETGNUS Does it make sense?
+"The queued flag" \e$B$K4X$9$kF0:n$O!"%(!<%8%'%s%H%G%#%l%/%H%j$K$"$k%5!<%P!<\e(B
+\e$BKh$N\e(B @code{flags} \e$B%U%!%$%k$NCf$G8+$D$+$k$G$7$g$&!#$=$l$i$O$"$J$?$,%U%i%0\e(B
+\e$B$rF14|$5$;$?$H$-$K6u$K$J$j$^$9!#\e(B
 
 @node Outgoing Messages
 @subsection \e$B:9=PMQ%a%C%;!<%8\e(B
 
-Gnus \e$B$,@Z$jN%$5$l$F$$$k$H$-!"A4$F$N:9=PMQ%a%C%;!<%8\e(B (\e$B%a!<%k$H%K%e!<\e(B
-\e$B%9$NN>J}\e(B) \e$B$O2<=q$-%0%k!<%W\e(B (@pxref{Drafts}) \e$B$K3JG<$5$l$^$9!#Ej9F\e(B
-\e$B$7$?8e$G$b!"$3$3$G$=$N%a%C%;!<%8$r8+$?$j!"JT=8$7$?$j$9$k$N$O0U$N\e(B
-\e$B$^$^$G$9!#\e(B
+Gnus \e$B$,@Z$jN%$5$l$F$$$k$H$-!"A4$F$N:9=PMQ%a%C%;!<%8\e(B (\e$B%a!<%k$H%K%e!<%9$N\e(B
+\e$BN>J}\e(B) \e$B$O2<=q$-%0%k!<%W\e(B (@pxref{Drafts}) \e$B$K3JG<$5$l$^$9!#Ej9F$7$?8e$G$b!"\e(B
+\e$B$3$3$G$=$N%a%C%;!<%8$r8+$?$j!"JT=8$7$?$j$9$k$N$O0U$N$^$^$G$9!#\e(B
 
-Gnus \e$B$,:F$S:9$79~$^$l$?$H$-!"%a%C%;!<%8$rAw?.$9$k$?$a$K!"FCJL$J\e(B
-\e$BL?Na$r;H$C$F2<=q$-%0%k!<%W$+$iAw$k$3$H$b!"%0%k!<%W%P%C%U%!Fb$G\e(B
-@kbd{J S} \e$B$r;H$C$F!"2<=q$-%0%k!<%WFb$NA4$F$NAw?.2DG=%a%C%;!<%8Aw\e(B
-\e$B?.$9$k$3$H$b$G$-$^$9!#\e(B
+Gnus \e$B$,:F$S:9$79~$^$l$?$H$-!"%a%C%;!<%8$rAw?.$9$k$?$a$K!"FCJL$JL?Na$r;H$C\e(B
+\e$B$F2<=q$-%0%k!<%W$+$iAw$k$3$H$b!"%0%k!<%W%P%C%U%!Fb$G\e(B @kbd{J S} \e$B$r;H$C$F!"\e(B
+\e$B2<=q$-%0%k!<%WFb$NA4$F$NAw?.2DG=%a%C%;!<%8Aw?.$9$k$3$H$b$G$-$^$9!#\e(B
 
 @node Agent Variables
 @subsection \e$B%(!<%8%'%s%HJQ?t\e(B
@@ -13406,15 +14406,15 @@ Gnus \e$B$,:F$S:9$79~$^$l$?$H$-!"%a%C%;!<%8$rAw?.$9$k$?$a$K!"FCJL$J\e(B
 @table @code
 @item gnus-agent-directory
 @vindex gnus-agent-directory
-Gnus \e$B%(!<%8%'%s%H$,%U%!%$%k$r3JG<$9$k>l=j!#=i4|@_DjCM$O\e(B
-@file{~/News/agent/}\e$B!#\e(B
+Gnus \e$B%(!<%8%'%s%H$,%U%!%$%k$r3JG<$9$k>l=j!#=i4|@_DjCM\e(B
+\e$B$O\e(B @file{~/News/agent/}\e$B!#\e(B
 
 @item gnus-agent-handle-level
 @vindex gnus-agent-handle-level
-\e$B$3$NJQ?t$NCM$h$j9b$$%l%Y%k\e(B (@pxref{Group Levels}) \e$B$N%0%k!<%W$O!"\e(B
-\e$B%(!<%8%'%s%H$+$i$OL5;k$5$l$^$9!#=i4|@_DjCM$O\e(B
-@code{gnus-level-subscribed} \e$B$G!"$3$l$O=i4|@_Dj$G$O!"9XFI$7$F$$\e(B
-\e$B$k%0%k!<%W$N$_$,%(!<%8%'%s%H$N=hM}$NBP>]$H$J$k$H$$$&$3$H$G$9!#\e(B
+\e$B$3$NJQ?t$NCM$h$j9b$$%l%Y%k\e(B (@pxref{Group Levels}) \e$B$N%0%k!<%W$O!"%(!<%8%'\e(B
+\e$B%s%H$+$i$OL5;k$5$l$^$9!#=i4|@_DjCM$O\e(B @code{gnus-level-subscribed} \e$B$G!"$3\e(B
+\e$B$l$O=i4|@_Dj$G$O!"9XFI$7$F$$$k%0%k!<%W$N$_$,%(!<%8%'%s%H$N=hM}$NBP>]$H$J\e(B
+\e$B$k$H$$$&$3$H$G$9!#\e(B
 
 @item gnus-agent-plugged-hook
 @vindex gnus-agent-plugged-hook
@@ -13426,13 +14426,12 @@ Gnus \e$B%(!<%8%'%s%H$,%U%!%$%k$r3JG<$9$k>l=j!#=i4|@_DjCM$O\e(B
 
 @end table
 
-
 @node Example Setup
 @subsection \e$B@_DjNc\e(B
 
-\e$B$b$7$"$J$?$,$3$N%^%K%e%"%k$rFI$_$?$/$J$/$F!"$4$/I8=`E*$J@_Dj$,$5\e(B
-\e$B$l$F$$$k$H$9$k$J$i!"$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$K0J2<$N$h\e(B
-\e$B$&$J@_Dj$r$9$k$H$3$m$+$i;O$a$i$l$k$G$7$g$&!#\e(B
+\e$B$b$7$"$J$?$,$3$N%^%K%e%"%k$rFI$_$?$/$J$/$F!"$4$/I8=`E*$J@_Dj$,$5$l$F$$$k\e(B
+\e$B$H$9$k$J$i!"$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$K0J2<$N$h$&$J@_Dj$r$9$k$H\e(B
+\e$B$3$m$+$i;O$a$i$l$k$G$7$g$&!#\e(B
 
 @lisp
 ;;; Gnus \e$B$,$I$N$h$&$K%K%e!<%9$r<hF@$9$k$+$rDj5A$9$k!#$3$3$G$O\e(B
@@ -13451,34 +14450,32 @@ Gnus \e$B%(!<%8%'%s%H$,%U%!%$%k$r3JG<$9$k>l=j!#=i4|@_DjCM$O\e(B
 (gnus-agentize)
 @end lisp
 
-\e$B4pK\E*$K$O$3$l$@$1$GNI$$$O$:$G$9!#$3$l$r$"$J$?$N\e(B
-@file{~/.gnus.el} \e$B%U%!%$%k$KF~$l$F!"$"$J$?$NMWK>$K9g$o$;$FJT=8$7!"\e(B
-PPP (\e$B$d2?$+\e(B) \e$B$r5/F0$7$F!"\e(B@kbd{M-x gnus} \e$B$HBG80$7$F$/$@$5$$!#\e(B
+\e$B4pK\E*$K$O$3$l$@$1$GNI$$$O$:$G$9!#$3$l$r$"$J$?$N\e(B @file{~/.gnus.el} \e$B%U%!\e(B
+\e$B%$%k$KF~$l$F!"$"$J$?$NMWK>$K9g$o$;$FJT=8$7!"\e(BPPP (\e$B$d2?$+\e(B) \e$B$r5/F0$7$F!"\e(B
+@kbd{M-x gnus} \e$B$HBG80$7$F$/$@$5$$!#\e(B
 
-\e$B$"$J$?$,=i$a$F\e(B gnus \e$B$r<B9T$9$k$7$?$H$-$O!"$$$/$D$+$N%K%e!<%9%0%k!<\e(B
-\e$B%W$,=i4|@_Dj$H$7$F<+F0E*$K9XFI$5$l$^$9!#$*$=$i$/$b$C$H$?$/$5$s$N\e(B
-\e$B%0%k!<%W$r9XFI$7$?$/$J$k$G$7$g$&$1$I!"$=$N$?$a$K$O!"\e(B@kbd{A A} \e$BL?\e(B
-\e$BNa$G\e(B @sc{nntp} \e$B%5!<%P!<$KA4%0%k!<%W$N0lMw$rLd$$9g$o$;$J$1$l$P$J\e(B
-\e$B$j$^$;$s!#$3$l$ODL>o$H$F$b;~4V$,$+$+$j$^$9$,!"0lEY$@$1$7$+<B9T$9\e(B
-\e$B$kI,MW$O$"$j$^$;$s!#\e(B
+\e$B$"$J$?$,=i$a$F\e(B gnus \e$B$r<B9T$9$k$7$?$H$-$O!"$$$/$D$+$N%K%e!<%9%0%k!<%W$,=i\e(B
+\e$B4|@_Dj$H$7$F<+F0E*$K9XFI$5$l$^$9!#$*$=$i$/$b$C$H$?$/$5$s$N%0%k!<%W$r9XFI\e(B
+\e$B$7$?$/$J$k$G$7$g$&$1$I!"$=$N$?$a$K$O!"\e(B@kbd{A A} \e$BL?Na$G\e(B @sc{nntp} \e$B%5!<%P!<\e(B
+\e$B$KA4%0%k!<%W$N0lMw$rLd$$9g$o$;$J$1$l$P$J$j$^$;$s!#$3$l$ODL>o$H$F$b;~4V$,\e(B
+\e$B$+$+$j$^$9$,!"0lEY$@$1$7$+<B9T$9$kI,MW$O$"$j$^$;$s!#\e(B
 
-\e$B$7$P$i$/$NFI$_9~$_$H2r@O$N8e$K!"%0%k!<%W$N0lMw$rDs<($5$;$i$l$k$G\e(B
-\e$B$7$g$&!#\e(B@kbd{u} \e$BL?Na$GFI$_$?$$%0%k!<%W$r9XFI$7$^$9!#FI$_$?$$%0%k!<\e(B
-\e$B%W$rA4It9XFI$7$?$i!"\e(B@kbd{l} \e$B$G:o=|%0%k!<%W$rA4$F2hLL$+$i>C5n$7$^\e(B
-\e$B$9!#\e(B(@kbd{A k} \e$B$G:o=|%0%k!<%W$OA4$FLa$C$F$-$^$9!#\e(B)
+\e$B$7$P$i$/$NFI$_9~$_$H2r@O$N8e$K!"%0%k!<%W$N0lMw$rDs<($5$;$i$l$k$G$7$g$&!#\e(B
+@kbd{u} \e$BL?Na$GFI$_$?$$%0%k!<%W$r9XFI$7$^$9!#FI$_$?$$%0%k!<%W$rA4It9XFI$7\e(B
+\e$B$?$i!"\e(B@kbd{l} \e$B$G:o=|%0%k!<%W$rA4$F2hLL$+$i>C5n$7$^$9!#\e(B(@kbd{A k} \e$B$G:o=|\e(B
+\e$B%0%k!<%W$OA4$FLa$C$F$-$^$9!#\e(B)
 
-\e$B$5$F!"$3$3$G$=$N>l$G%0%k!<%W$rFI$`$3$H$b$G$-$^$9$7!"$"$k$$$O\e(B
-@kbd{J s} \e$BL?Na$G5-;v$r%@%&%s%m!<%I$9$k$3$H$b$G$-$^$9!#$"$H$O$3$N\e(B
-\e$B%^%K%e%"%k$N;D$j$rFI$s$G!"$=$NB>$N2?I42/$N9`L\$+$i%+%9%?%^%$%:$7\e(B
-\e$B$?$$$3$H$r8+$D$1=P$7$F$/$@$5$$!#\e(B
+\e$B$5$F!"$3$3$G$=$N>l$G%0%k!<%W$rFI$`$3$H$b$G$-$^$9$7!"$"$k$$\e(B
+\e$B$O\e(B @kbd{J s} \e$BL?Na$G5-;v$r%@%&%s%m!<%I$9$k$3$H$b$G$-$^$9!#$"$H$O$3$N%^%K%e\e(B
+\e$B%"%k$N;D$j$rFI$s$G!"$=$NB>$N2?I42/$N9`L\$+$i%+%9%?%^%$%:$7$?$$$3$H$r8+$D\e(B
+\e$B$1=P$7$F$/$@$5$$!#\e(B
 
 @node Batching Agents
 @subsection \e$B0l3g%(!<%8%'%s%H=hM}\e(B
 
-Gnus \e$B%(!<%8%'%s%H$K5-;v$r<hF@$5$;$k$N$O\e(B (\e$B$=$7$F$"$J$?$N=q$$$?2?\e(B
-\e$B$+$N%a%C%;!<%8$rEj9F$9$k$N$O\e(B)\e$B!"0lC6J*;v$r@5$7$/@_Dj$7$F$7$^$($P\e(B
-\e$BHs>o$K4JC1$G$9!#0J2<$N%7%'%k%9%/%j%W%H$OI,MW$J$3$H$rA4$F$d$C$F$/\e(B
-\e$B$l$k$G$7$g$&!#\e(B
+Gnus \e$B%(!<%8%'%s%H$K5-;v$r<hF@$5$;$k$N$O\e(B (\e$B$=$7$F$"$J$?$N=q$$$?2?$+$N%a%C\e(B
+\e$B%;!<%8$rEj9F$9$k$N$O\e(B)\e$B!"0lC6J*;v$r@5$7$/@_Dj$7$F$7$^$($PHs>o$K4JC1$G$9!#\e(B
+\e$B0J2<$N%7%'%k%9%/%j%W%H$OI,MW$J$3$H$rA4$F$d$C$F$/$l$k$G$7$g$&!#\e(B
 
 @example
 #!/bin/sh
@@ -13507,8 +14504,8 @@ gnus-offline \e$B$O$=$N5!G=$rDs6!$7$^$9!#\e(B(\e$BI.<T$N<qL#$G\e(B gnus-agent \e$B$r;
 \e$B$^$G$r9T$$$^$9!#\e(B
 
 \e$B%$%s%9%H!<%k$O$$$?$C$F4JC1!#\e(B(\e$B$3$3$^$G$G\e(B gnus-agent \e$B$N@_Dj$O=*$C$F$$$k$H\e(B
-\e$B2>Dj$7$^$9\e(B)
-@file{~/.emacs} \e$B$N\e(B gnus-agent \e$B$N@_Dj$N$A$g$$$HA0$K\e(B
+\e$B2>Dj$7$^\e(B
+\e$B$9\e(B) @file{~/.emacs} \e$B$N\e(B gnus-agent \e$B$N@_Dj$N$A$g$$$HA0$K\e(B
 
 @lisp
 (load "gnus-ofsetup")
@@ -13521,28 +14518,26 @@ gnus-offline \e$B$O$=$N5!G=$rDs6!$7$^$9!#\e(B(\e$BI.<T$N<qL#$G\e(B gnus-agent \e$B$r;
 \e$B<ALd$,=*$k$H!"@_DjMQ$N%U%!%$%k\e(B @file{~/.gnus-offline.el} \e$B$,:n@.$5$l$^$9!#\e(B
 \e$B$3$3$K!"I,MW$J@_DjA4$F$,=q$+$l$F$$$^$9!#\e(B
 Gnus \e$B$N5/F0$,=*$j!"\e(B(\e$BB?J,\e(B POP \e$B%5!<%P!<$N\e(B password \e$B$rJ9$+$l$k$H;W$$$^$9$,\e(B)
-*Group* \e$B%P%C%U%!$K$J$C$?$i!"\e(B@kbd{J j} \e$B$d\e(B @kbd{J S} \e$BEy$NA`:n$OI,MW$"$j$^$;$s!#\e(B
-News/Mail \e$B$r?75,$G<hF@$7$?$1$l$P!"\e(B*Group* \e$B%P%C%U%!$G\e(B @kbd{g} \e$B$r2!$9$@$1\e(B
-\e$B$G$9!#\e(B
+*Group* \e$B%P%C%U%!$K$J$C$?$i!"\e(B@kbd{J j} \e$B$d\e(B @kbd{J S} \e$BEy$NA`:n$OI,MW$"$j$^\e(B
+\e$B$;$s!#\e(BNews/Mail \e$B$r?75,$G<hF@$7$?$1$l$P!"\e(B*Group* \e$B%P%C%U%!$G\e(B @kbd{g} \e$B$r2!\e(B
+\e$B$9$@$1$G$9!#\e(B
 
 @code{MIEE} = Message Intercepting and Entrusting Emacs library.
 Message \e$B$r2#<h$j$7$F!"\e(Boffline \e$B$G\e(B post/send \e$B$9$k$?$a$NHFMQ%i%$%V%i%j$G$9!#\e(B
 
 \e$B$3$N\e(B @code{MIEE} \e$B$r;H$&$H\e(B @code{gnus-offline} \e$B$rMQ$$$F\e(B@code{nnspool} \e$B$b\e(B
-\e$B%3%s%H%m!<%k$9$k;v$,$G$-$^$9\e(B(\e$B$3$3$G$O=R$Y$^$;$s$,!D\e(B)\e$B!#\e(B
-(\e$B$b$A$m$s\e(B @code{gnus-agent} + @code{MIEE} \e$B$H$$$&AH9g$;$b2DG=$G$9\e(B)
-@code{MIEE} \e$B$O\e(B @file{http://www.shiojiri.ne.jp/%7Et-ichi/lisp/miee.el}
-\e$B$+$i<h$C$FMh$k;v$,$G$-$^$9!#\e(B
-@code{gnus-setup-for-offline} \e$B$G@_Dj$7$?>l9g$K$O!"\e(B@code{MIEE} \e$B$N@_Dj$O\e(B
-\e$B$$$C$5$$$7$J$/$F$b$+$^$$$^$;$s!#\e(B
+\e$B%3%s%H%m!<%k$9$k;v$,$G$-$^$9\e(B(\e$B$3$3$G$O=R$Y$^$;$s$,!D\e(B)\e$B!#\e(B(\e$B$b$A$m\e(B
+\e$B$s\e(B @code{gnus-agent} + @code{MIEE} \e$B$H$$$&AH9g$;$b2DG=$G\e(B
+\e$B$9\e(B) @code{MIEE} \e$B$O\e(B @file{http://www.shiojiri.ne.jp/%7Et-ichi/lisp/miee.el} \e$B$+\e(B
+\e$B$i<h$C$FMh$k;v$,$G$-$^$9!#\e(B@code{gnus-setup-for-offline} \e$B$G@_Dj$7$?>l9g$K\e(B
+\e$B$O!"\e(B@code{MIEE} \e$B$N@_Dj$O$$$C$5$$$7$J$/$F$b$+$^$$$^$;$s!#\e(B
 
 @table @code
 @vindex gnus-offline-articles-to-fetch
 @item gnus-offline-articles-to-fetch
-\e$B$3$NJQ?t$O<hF@$9$k5-;v$N<oN`$r;XDj$7$^$9!#\e(B
-'mail \e$B$N>l9g$O!"\e(BMail \e$B$@$1$r<hF@$7$^$9!#\e(B
-'news \e$B$N>l9g$O!"\e(BNews \e$B$@$1$r<hF@$7$^$9!#\e(B
-'both \e$B$N>l9g$O!"\e(BMail/News \e$BN>J}$r<hF@$7$^$9!#\e(B
+\e$B$3$NJQ?t$O<hF@$9$k5-;v$N<oN`$r;XDj$7$^$9!#\e(B'mail \e$B$N>l9g$O!"\e(BMail \e$B$@$1$r<h\e(B
+\e$BF@$7$^$9!#\e(B'news \e$B$N>l9g$O!"\e(BNews \e$B$@$1$r<hF@$7$^$9!#\e(B'both \e$B$N>l9g$O!"\e(B
+Mail/News \e$BN>J}$r<hF@$7$^$9!#\e(B
 
 @vindex gnus-offline-load-hook
 @item gnus-offline-load-hook
@@ -13554,13 +14549,14 @@ Message \e$B$r2#<h$j$7$F!"\e(Boffline \e$B$G\e(B post/send \e$B$9$k$?$a$NHFMQ%i%$%V%i
 
 @vindex gnus-offline-after-online-hook
 @item gnus-offline-after-online-hook
-\e$B$3$NJQ?t$O\e(B Gnus \e$B$,\e(B Offline(UnPlugged) \e$B>uBV$K$J$C$?8e$KI>2A$5$l$k\e(B hook \e$B$G$9!#\e(B
+\e$B$3$NJQ?t$O\e(B Gnus \e$B$,\e(B Offline(UnPlugged) \e$B>uBV$K$J$C$?8e$KI>2A$5$l$k\e(B hook \e$B$G\e(B
+\e$B$9!#\e(B
 
 @vindex gnus-offline-interval-time
 @item gnus-offline-interval-time
-\e$B$3$NJQ?t$G;XDj$5$l$?4V3V\e(B(\e$BIC?t\e(B)\e$B$G\e(B@code{gnus-offline-articles-to-fetch} \e$B$G\e(B
-\e$B;XDj$5$l$?\e(B article \e$B$r<hF@$7$^$9!#\e(B
-\e$BF0:n$K$O\e(B@code{gnus-daemon} \e$B$r;HMQ$7$F$$$^$9!#\e(B
+\e$B$3$NJQ?t$G;XDj$5$l$?4V\e(B
+\e$B3V\e(B (\e$BIC?t\e(B) \e$B$G\e(B @code{gnus-offline-articles-to-fetch} \e$B$G;XDj$5$l\e(B
+\e$B$?\e(B article \e$B$r<hF@$7$^$9!#F0:n$K$O\e(B@code{gnus-daemon} \e$B$r;HMQ$7$F$$$^$9!#\e(B
 
 @vindex gnus-offline-dialup-function
 @item gnus-offline-dialup-function
@@ -13573,7 +14569,6 @@ Message \e$B$r2#<h$j$7$F!"\e(Boffline \e$B$G\e(B post/send \e$B$9$k$?$a$NHFMQ%i%$%V%i
 \e$B$^$9!#\e(B
 @end table
 
-
 @node Agent Caveats
 @subsection \e$B%(!<%8%'%s%H$NLdBjE@\e(B
 
@@ -13595,54 +14590,53 @@ Gnus Agent \e$B$O$h$/$"$kB>$N%*%U%i%$%s%K%e!<%9%j!<%@!<$N$h$&$K$OF0:n$7$^$;\e(B
 \e$BMWLs$9$k$H!"\e(Bgnus \e$B$,@Z$jN%$5$l$F$$$k$H$-$O!"%m!<%+%k$KJ]B8$5$l$?5-;v$r8+\e(B
 \e$B$k$@$1$G$9!#@\B3$5$l$F$$$k$H$-$O!"\e(BISP \e$B$HOC$9$@$1$G$9!#\e(B
 
-
 @node Scoring
 @chapter \e$B%9%3%"\e(B
 @cindex scoring
 
 \e$BB>$N?M!9$O\e(B @dfn{\e$B:o=|%U%!%$%k\e(B} \e$B$r;H$$$^$9$,!"$3$3\e(B gnus \e$B%?%o!<$O:o=|$h$j$b\e(B
 \e$B%9%3%"$NJ}$r9%$_$^$9$N$G!"B>$H3JF.$9$k$h$j$O@Z$jBX$($k;v$K$7$^$7$?!#$=$l\e(B
-\e$B$i$O40A4$K0c$&;v$r$7$^$9$N$G!"??$CD>$0$K:B$C$FCm0U$rJ'$C$F$/$@$5$$!*\e(B
+\e$B$i$O40A4$K0c$&;v$r$7$^$9$N$G!"??$CD>$0$K:B$C$FCm0U$rJ'$C$F$/$@$5$$\e(B!
 
 @vindex gnus-summary-below
-\e$BA4$F$N5-;v$O%9%3%"$N=i4|CM$r;}$C$F$*$j\e(B
-(@code{gnus-summary-default-score})\e$B!"$3$l$O%G%#%U%)%k%H$G\e(B 0 \e$B$G$9!#$3$N%9\e(B
-\e$B%3%"$OBPOCE*$d!"%9%3%"%U%!%$%k\e(B (score file) \e$B$NJ}K!$K$h$j!">e$2$i$l$?$j2<\e(B
-\e$B$2$i$l$?$j$7$^$9!#\e(B@code{gnus-summary-bark-below} \e$B$h$j$bDc$$%9%3%"$N5-;v\e(B
-\e$B$K$O4{FI$N0u$,IU$-$^$9!#\e(B
+\e$BA4$F$N5-;v$O%9%3%"$N=i4|CM$r;}$C$F$*\e(B
+\e$B$j\e(B (@code{gnus-summary-default-score})\e$B!"$3$l$O%G%#%U%)%k%H$G\e(B 0 \e$B$G$9!#$3\e(B
+\e$B$N%9%3%"$OBPOCE*$d!"%9%3%"%U%!%$%k\e(B (score file) \e$B$NJ}K!$K$h$j!">e$2$i$l$?\e(B
+\e$B$j2<$2$i$l$?$j$7$^$9!#\e(B@code{gnus-summary-bark-below} \e$B$h$j$bDc$$%9%3%"$N\e(B
+\e$B5-;v$K$O4{FI$N0u$,IU$-$^$9!#\e(B
 
-Gnus \e$B$O35N,%P%C%U%!$r:n@.$9$kA0$K!"8=:_$N%0%k!<%W$KE,MQ$5$l$k$I$s$J\e(B
-@dfn{\e$B%9%3%"%U%!%$%k\e(B} \e$B$bFI$_9~$_$^$9!#\e(B
+Gnus \e$B$O35N,%P%C%U%!$r:n@.$9$kA0$K!"8=:_$N%0%k!<%W$KE,MQ$5$l$k$I$s\e(B
+\e$B$J\e(B @dfn{\e$B%9%3%"%U%!%$%k\e(B} \e$B$bFI$_9~$_$^$9!#\e(B
 
 \e$B8=:_$N5-;v$K4p$E$$$F%9%3%"$NEPO?$rA^F~$9$k$$$/$D$+$NL?Na$,35N,%P%C%U%!$K\e(B
 \e$B$"$j$^$9!#Nc$($P!"\e(Bgnus \e$B$KFCDj$NI=Bj$N5-;v$N%9%3%"$r2<$2$?$j>e$2$?$j$9$k\e(B
 \e$B$h$&$K5a$a$k;v$,$G$-$^$9!#\e(B
 
-2\e$B<oN`$N%9%3%"EPO?$,$"$j$^$9\e(B: \e$B1JB3$H0l;~E*$G$9!#0l;~E*%9%3%"EPO?$O<+J,<+\e(B
-\e$B?H$G4|8B$,$/$k$H:o=|$9$kEPO?$G$9!#Nc$($P!"\e(B1\e$B=54V0J>e;H$o$l$F$$$J$$$I$s$J\e(B
+\e$BFs<oN`$N%9%3%"EPO?$,$"$j$^$9\e(B: \e$B1JB3$H0l;~E*$G$9!#0l;~E*%9%3%"EPO?$O<+J,<+\e(B
+\e$B?H$G4|8B$,$/$k$H:o=|$9$kEPO?$G$9!#Nc$($P!"0l=54V0J>e;H$o$l$F$$$J$$$I$s$J\e(B
 \e$BEPO?$b!"%9%3%"%U%!%$%k$NBg$-$5$r>.$5$/$9$k$?$a$K!"@E$+$K:o=|$5$l$^$9!#\e(B
 
 @menu
-* Summary Score Commands::   \e$B8=:_$N%0%k!<%W$N$?$a$N%9%3%"EPO?$rDI2C$9$k!#\e(B
-* Group Score Commands::     \e$B0lHLE*$J%9%3%"L?Na!#\e(B
-* Score Variables::          \e$B$"$J$?$N%9%3%"$r%+%9%?%^%$%:$9$k!#\e(B
-                             (\e$B$^$!!"$J$s$FMQ8l$G$7$g$&\e(B)\e$B!#\e(B
-* Score File Format::        \e$B%9%3%"%U%!%$%k$K2?$rF~$l$k$+!#\e(B
-* Score File Editing::       \e$B<j$G%9%3%"%U%!%$%k$rJT=8$9$k;v$b$G$-$k!#\e(B
-* Adaptive Scoring::         \e$BBg;P\e(B gnus \e$B$O$"$J$?$,2?$rFI$s$@$+CN$C$F$$$k!#\e(B
-* Home Score File::          \e$B?7$7$$%9%3%"EPO?$,$I$3$X9T$/$+$r$I$N$h$&$K;XDj$9$k$+!#\e(B
-* Followups To Yourself::    \e$B?M$,$"$J$?$KJVEz$7$?$H$-$K\e(B gnus \e$B$K5$IU$+$;$k!#\e(B
-* Scoring Tips::             \e$B$I$&$d$C$F8z2LE*$K%9%3%"$rIU$1$k$+!#\e(B
-* Reverse Scoring::          \e$B8E$$$b$N$N;R$G$"$k$H$$$&LdBj$OLdBj$G$O$J$$!#\e(B
-* Global Score Files::       \e$BCO$r$D$+$_!"<*$r@Z$jNv$/%9%3%"%U%!%$%k!#\e(B
-* Kill Files::               \e$B$=$l$i$O$^$@$3$3$K$"$j$^$9$,!"L5;k$9$k;v$,$G$-$k!#\e(B
-* Converting Kill Files::    \e$B:o=|%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k!#\e(B
-* GroupLens::                \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k!#\e(B
-* Advanced Scoring::         \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&!#\e(B
-* Score Decays::             \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k!#\e(B
+* Summary Score Commands:: \e$B8=:_$N%0%k!<%W$N$?$a$N%9%3%"EPO?$rDI2C$9$k\e(B
+* Group Score Commands::   \e$B0lHLE*$J%9%3%"L?Na\e(B
+* Score Variables::        \e$B$"$J$?$N%9%3%"$r%+%9%?%^%$%:$9$k\e(B
+                           (\e$B$^$!!"$J$s$FMQ8l$G$7$g$&\e(B)\e$B!#\e(B
+* Score File Format::      \e$B%9%3%"%U%!%$%k$K2?$rF~$l$k$+\e(B
+* Score File Editing::     \e$B<j$G%9%3%"%U%!%$%k$rJT=8$9$k;v$b$G$-$k\e(B
+* Adaptive Scoring::       \e$BBg;P\e(B gnus \e$B$O$"$J$?$,2?$rFI$s$@$+CN$C$F$$$k\e(B
+* Home Score File::        \e$B?7$7$$%9%3%"EPO?$,$I$3$X9T$/$+$r$I$N$h$&$K;X\e(B
+                           \e$BDj$9$k$+\e(B
+* Followups To Yourself::  \e$B?M$,$"$J$?$KJVEz$7$?$H$-$K\e(B gnus \e$B$K5$IU$+$;$k\e(B
+* Scoring Tips::           \e$B$I$&$d$C$F8z2LE*$K%9%3%"$rIU$1$k$+\e(B
+* Reverse Scoring::        \e$B8E$$$b$N$N;R$G$"$k$H$$$&LdBj$OLdBj$G$O$J$$\e(B
+* Global Score Files::     \e$BCO$r$D$+$_!"<*$r@Z$jNv$/%9%3%"%U%!%$%k\e(B
+* Kill Files::             \e$B$=$l$i$O$^$@$3$3$K$"$j$^$9$,!"L5;k$9$k;v$,$G$-$k\e(B
+* Converting Kill Files::  \e$B>C5n%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k\e(B
+* GroupLens::              \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k\e(B
+* Advanced Scoring::       \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&\e(B
+* Score Decays::           \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k\e(B
 @end menu
 
-
 @node Summary Score Commands
 @section \e$B35N,%9%3%"L?Na\e(B
 @cindex score commands
@@ -13676,21 +14670,21 @@ Gnus \e$B$O35N,%P%C%U%!$r:n@.$9$kA0$K!"8=:_$N%0%k!<%W$KE,MQ$5$l$k$I$s$J\e(B
 @item V t
 @kindex V t (\e$B35N,\e(B)
 @findex gnus-score-find-trace
-\e$B8=:_$N5-;v$K;H$o$l$F$$$kA4$F$N%9%3%"K!B'\e(B (score rule) \e$B$rI=<($7$^$9\e(B
-(@code{gnus-score-find-trace})\e$B!#\e(B
+\e$B8=:_$N5-;v$K;H$o$l$F$$$kA4$F$N%9%3%"K!B'\e(B (score rule) \e$B$rI=<($7$^\e(B
+\e$B$9\e(B (@code{gnus-score-find-trace})\e$B!#\e(B
 
 @item V R
 @kindex V R (\e$B35N,\e(B)
 @findex gnus-summary-rescore
-\e$B8=:_$N35N,$G%9%3%"2aDx$r<B9T$7$^$9\e(B (@code{gnus-summay-rescore})\e$B!#$3$l$O\e(B
-gnus \e$B$N8e$m$G$$$m$$$m$H%9%3%"%U%!%$%k$GM7$s$G!"$=$l$N8z2L$r8+$?$$$H$-$K\e(B
-\e$BLrN)$D$+$b$7$l$^$;$s!#\e(B
+\e$B8=:_$N35N,$G%9%3%"2aDx$r<B9T$7$^$9\e(B (@code{gnus-summay-rescore})\e$B!#$3$l\e(B
+\e$B$O\e(B gnus \e$B$N8e$m$G$$$m$$$m$H%9%3%"%U%!%$%k$GM7$s$G!"$=$l$N8z2L$r8+$?$$$H$-\e(B
+\e$B$KLrN)$D$+$b$7$l$^$;$s!#\e(B
 
 @item V c
 @kindex V c (\e$B35N,\e(B)
 @findex gnus-score-change-score-file
-\e$B0c$C$?%9%3%"%U%!%$%k$r8=:_$N$b$N$K$7$^$9\e(B
-(@code{gnus-score-change-score-file})\e$B!#\e(B
+\e$B0c$C$?%9%3%"%U%!%$%k$r8=:_$N$b$N$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-score-change-score-file})\e$B!#\e(B
 
 @item V e
 @kindex V e (\e$B35N,\e(B)
@@ -13702,8 +14696,8 @@ File Editing})\e$B!#\e(B
 @item V f
 @kindex V f (\e$B35N,\e(B)
 @findex gnus-score-edit-file
-\e$B%9%3%"%U%!%$%k$rJT=8$7$F!"$3$N%9%3%"%U%!%$%k$r8=:_$N$b$N$K$7$^$9\e(B
-(@code{gnus-score-edit-file})\e$B!#\e(B
+\e$B%9%3%"%U%!%$%k$rJT=8$7$F!"$3$N%9%3%"%U%!%$%k$r8=:_$N$b$N$K$7$^\e(B
+\e$B$9\e(B (@code{gnus-score-edit-file})\e$B!#\e(B
 
 @item V F
 @kindex V F (\e$B35N,\e(B)
@@ -13714,8 +14708,8 @@ File Editing})\e$B!#\e(B
 @item V C
 @kindex V C (\e$B35N,\e(B)
 @findex gnus-score-customize
-\e$B;k3PE*$G4r$7$$J}K!$G%9%3%"%U%!%$%k$r%+%9%?%^%$%:$7$^$9\e(B
-(@code{gnus-score-customize})\e$B!#\e(B
+\e$B;k3PE*$G4r$7$$J}K!$G%9%3%"%U%!%$%k$r%+%9%?%^%$%:$7$^\e(B
+\e$B$9\e(B (@code{gnus-score-customize})\e$B!#\e(B
 
 @end table
 
@@ -13733,8 +14727,8 @@ File Editing})\e$B!#\e(B
 @kindex V x (\e$B35N,\e(B)
 @findex gnus-score-set-expunge-below
 \e$B%9%3%"$NF~NO$rB%?J$7!"$=$N%9%3%"$h$jDc$$A4$F$N5-;v$r:o=|$9$k$?$a$N%9%3%"\e(B
-\e$BK!B'$r8=:_$N%9%3%"%U%!%$%k$KIU$12C$($^$9\e(B
-(@code{gnus-score-set-expunge-below})\e$B!#\e(B
+\e$BK!B'$r8=:_$N%9%3%"%U%!%$%k$KIU$12C$($^\e(B
+\e$B$9\e(B (@code{gnus-score-set-expunge-below})\e$B!#\e(B
 @end table
 
 \e$B<B:]$K%9%3%"EPO?$r$9$k$?$a$N%-!<BG$A9~$_$OHs>o$K5,B'@5$7$$K!B'$K=>$$$^$9\e(B
@@ -13748,7 +14742,7 @@ File Editing})\e$B!#\e(B
 \e$B:G=i$N%-!<$O%9%3%"$rA}$d$9$?$a$N\e(B @kbd{I} (i \e$B$NBgJ8;z\e(B) \e$B$+!"%9%3%"$r2<$2$k\e(B
 \e$B$?$a$N\e(B @kbd{L} \e$B$G$9!#\e(B
 @item
-2\e$BHVL\$N%-!<$O$I$N%X%C%@!<$K%9%3%"$r$7$?$$$+$rI=$7$^$9!#0J2<$N%-!<$,;HMQ\e(B
+\e$BFsHVL\$N%-!<$O$I$N%X%C%@!<$K%9%3%"$r$7$?$$$+$rI=$7$^$9!#0J2<$N%-!<$,;HMQ\e(B
 \e$B2DG=$G$9\e(B:
 @table @kbd
 
@@ -13789,7 +14783,7 @@ File Editing})\e$B!#\e(B
 @end table
 
 @item
-3\e$BHVL\$N%-!<$O9gCW$9$k7?$G$9!#$I$N9gCW$N7?$,M-8z$+$O$I$N%X%C%@!<$K%9%3%"\e(B
+\e$B;0HVL\$N%-!<$O9gCW$9$k7?$G$9!#$I$N9gCW$N7?$,M-8z$+$O$I$N%X%C%@!<$K%9%3%"\e(B
 \e$B$rIU$1$h$&$H$7$F$$$k$+$K0M$j$^$9!#\e(B
 
 @table @code
@@ -13839,7 +14833,7 @@ File Editing})\e$B!#\e(B
 @end table
 
 @item
-4\e$B$D$a$G!":G8e$N%-!<$O$3$l$,0l;~E*\e(B (\e$B$9$J$o$A!"4|8B@Z$l>C5n\e(B) \e$B$N%9%3%"EPO?\e(B
+\e$B;M$D$a$G!":G8e$N%-!<$O$3$l$,0l;~E*\e(B (\e$B$9$J$o$A!"4|8B@Z$l>C5n\e(B) \e$B$N%9%3%"EPO?\e(B
 \e$B$+!"1JB3E*$J\e(B (\e$B$9$J$o$A!"4|8B@Z$l>C5n$G$J$$\e(B) \e$B%9%3%"EPO?$G$"$k$+$H$$$&$3$H!"\e(B
 \e$B$b$7$/$O$9$0$K$J$5$l$k$Y$-$+!"%9%3%"%U%!%$%k$KDI2C$9$k;v$O$7$J$$$+$H$$$&\e(B
 \e$B;v$r;XDj$7$^$9!#\e(B
@@ -13857,25 +14851,27 @@ File Editing})\e$B!#\e(B
 
 @end enumerate
 
-\e$B$G$9$+$i!"8=:_$NCx<T$K@53N$J9gCW$G1JB3E*$K%9%3%"$rA}$d$7$?$$$H$7$^$7$g$&\e(B:
+\e$B$G$9$+$i!"8=:_$NCx<T$K@53N$J9gCW$G1JB3E*$K%9%3%"$rA}$d$7$?$$$H$7$^$7$g\e(B
+\e$B$&\e(B:
 @kbd{I a e p}\e$B!#I=Bj$K4p$E$$$F%9%3%"$r2<$2$?$/$F!"J8;zNs$NItJ,$N9gCW$r;H\e(B
 \e$B$$!"0l;~E*$J%9%3%"EPO?$r$7$?$$$N$G$"$l$P\e(B: @kbd{L s s t}\e$B!#Hs>o$K4JC1$G$9!#\e(B
 
-\e$BJ*;v$rJ#;($K$9$k$N$O!"C;=LBG80$,B8:_$9$k$+$i$G$9!#\e(B2\e$BHVL\$+\e(B3\e$BHVL\$NJ8;z$KBg\e(B
-\e$BJ8;z$r;H$&$H!"\e(Bgnus \e$B$O;D$k\e(B1\e$B$D$+\e(B2\e$B$D$NBG80$K=i4|CM$r;H$$$^$9!#=i4|CM$O\e(B ``\e$BJ8\e(B
-\e$B;zNs$N0lIt\e(B'' \e$B$H\e(B ``\e$B0l;~E*\e(B'' \e$B$G$9!#$G$9$+$i!"\e(B@kbd{I A} \e$B$O\e(B @kbd{I a s t} \e$B$H\e(B
-\e$BF1$8$G!"\e(B@kbd{I a R} \e$B$O\e(B @kbd{I a r t} \e$B$HF1$8$G$9!#\e(B
+\e$BJ*;v$rJ#;($K$9$k$N$O!"C;=LBG80$,B8:_$9$k$+$i$G$9!#FsHVL\$+;0HVL\$NJ8;z$K\e(B
+\e$BBgJ8;z$r;H$&$H!"\e(Bgnus \e$B$O;D$k0l$D$+Fs$D$NBG80$K=i4|CM$r;H$$$^$9!#=i4|CM\e(B
+\e$B$O\e(B ``\e$BJ8;zNs$N0lIt\e(B'' \e$B$H\e(B ``\e$B0l;~E*\e(B'' \e$B$G$9!#$G$9$+$i!"\e(B
+@kbd{I A} \e$B$O\e(B @kbd{I a s t} \e$B$HF1$8$G!"\e(B@kbd{I a R} \e$B$O\e(B @kbd{I a r t} \e$B$HF1$8\e(B
+\e$B$G$9!#\e(B
 
-\e$B$3$l$i$N4X?t$O?t;z@\F,0z?t$H!"%7%s%\%k@\F,0z?t$r<u$1IU$1$^$9\e(B
-(@pxref{Symbolic Prefixes})\e$B!#?t;z@\F,0z?t$O$I$N$/$i$$5-;v$N%9%3%"$r2<$2\e(B
-\e$B$k\e(B (\e$B$b$7$/$O>e$2$k\e(B) \e$B$+$r;XDj$7$^$9!#%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$OL?Na$,8=\e(B
-\e$B:_$N%9%3%"%U%!%$%k$G$O$J$/%U%!%$%k\e(B @file{all.SCORE} \e$B$r;H$&;v$r;XDj$7$^$9!#\e(B
+\e$B$3$l$i$N4X?t$O?t;z@\F,0z?t$H!"%7%s%\%k@\F,0z?t$r<u$1IU$1$^\e(B
+\e$B$9\e(B (@pxref{Symbolic Prefixes})\e$B!#?t;z@\F,0z?t$O$I$N$/$i$$5-;v$N%9%3%"$r2<\e(B
+\e$B$2$k\e(B (\e$B$b$7$/$O>e$2$k\e(B) \e$B$+$r;XDj$7$^$9!#%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$OL?Na$,\e(B
+\e$B8=:_$N%9%3%"%U%!%$%k$G$O$J$/%U%!%$%k\e(B @file{all.SCORE} \e$B$r;H$&;v$r;XDj$7$^\e(B
+\e$B$9!#\e(B
 
 @vindex gnus-score-mimic-keymap
 @code{gnus-score-mimic-keymap} \e$B$O$3$l$i$NL?Na$,%-!<%^%C%W$G$"$k$+$N$h$&\e(B
 \e$B$K?6$kIq$&$+$I$&$+$r;XDj$7$^$9!#\e(B
 
-
 @node Group Score Commands
 @section \e$B%0%k!<%W%9%3%"L?Na\e(B
 @cindex group score commands
@@ -13888,8 +14884,8 @@ File Editing})\e$B!#\e(B
 @kindex W f (\e$B%0%k!<%W\e(B)
 @findex gnus-score-flush-cache
 Gnus \e$B$O2?EY$b%9%3%"O"A[%j%9%H$rFI$_9~$`$N$rHr$1$k$?$a$K!"$=$l$N%-%c%C%7%e\e(B
-\e$B$rJ];}$7$F$$$^$9!#$3$NL?Na$O%-%c%C%7%e$r=q$-=P$7$^$9\e(B
-(@code{gnus-score-flush-cache})\e$B!#\e(B
+\e$B$rJ];}$7$F$$$^$9!#$3$NL?Na$O%-%c%C%7%e$r=q$-=P$7$^\e(B
+\e$B$9\e(B (@code{gnus-score-flush-cache})\e$B!#\e(B
 
 @end table
 
@@ -13902,7 +14898,6 @@ Gnus \e$B$O2?EY$b%9%3%"O"A[%j%9%H$rFI$_9~$`$N$rHr$1$k$?$a$K!"$=$l$N%-%c%C%7%e\e(B
 & emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
 @end example
 
-
 @node Score Variables
 @section \e$B%9%3%"JQ?t\e(B
 @cindex score variables
@@ -13921,18 +14916,18 @@ Gnus \e$B$O2?EY$b%9%3%"O"A[%j%9%H$rFI$_9~$`$N$rHr$1$k$?$a$K!"$=$l$N%-%c%C%7%e\e(B
 \e$B$,!"$b$7:o=|%U%!%$%k$r%0%k!<%W$KE,MQ$7$F$$$k$H$-$K!":o=|%U%!%$%k$rJQ99$7!"\e(B
 \e$B$b$C$HB?$/$N5-;v$r:o=|$9$k$?$a$K$=$l$r:F<B9T$7$F$b!"$=$l$OF0:n$7$J$$$H$$\e(B
 \e$B$&;v$K$J$j$^$9!#$=$l$r$9$k$?$a$K$O$3$NJQ?t$r\e(B @code{t} \e$B$K<B9T$7$J$1$l$P$J\e(B
-\e$B$j$^$;$s!#\e(B (\e$B$3$l$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B)
+\e$B$j$^$;$s!#\e(B(\e$B$3$l$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B)
 
 @item gnus-kill-files-directory
 @vindex gnus-kill-files-directory
 \e$BA4$F$N:o=|$H%9%3%"$N%U%!%$%k$O$3$N%G%#%l%/%H%j!<$KC_@Q$5$l!"$=$l$O=i4|@_\e(B
-\e$BDj$G4D6-JQ?t\e(B @code{SAVEDIR} \e$B$K$h$C$F=i4|2=$5$l$^$9!#$3$l$O=i4|@_Dj$G\e(B
-@file{~/News/} \e$B$G$9!#\e(B
+\e$BDj$G4D6-JQ?t\e(B @code{SAVEDIR} \e$B$K$h$C$F=i4|2=$5$l$^$9!#$3$l$O=i4|@_Dj\e(B
+\e$B$G\e(B @file{~/News/} \e$B$G$9!#\e(B
 
 @item gnus-score-file-suffix
 @vindex gnus-score-file-suffix
-\e$B%9%3%"%U%!%$%k$K$?$I$jCe$/$?$a$K%0%k!<%WL>$K2C$($k@\Hx8l$G$9\e(B (\e$B=i4|CM$G\e(B
-@samp{SCORE} \e$B$G$9!#\e(B)
+\e$B%9%3%"%U%!%$%k$K$?$I$jCe$/$?$a$K%0%k!<%WL>$K2C$($k@\Hx8l$G$9\e(B (\e$B=i4|CM\e(B
+\e$B$G\e(B @samp{SCORE} \e$B$G$9!#\e(B)
 
 @item gnus-score-uncacheable-files
 @vindex gnus-score-uncacheable-files
@@ -13942,29 +14937,29 @@ Gnus \e$B$O2?EY$b%9%3%"O"A[%j%9%H$rFI$_9~$`$N$rHr$1$k$?$a$K!"$=$l$N%-%c%C%7%e\e(B
 \e$B$N$G$"$l$P!":F$SI,MW$H$5$l$J$$$h$&$J%9%3%"%U%!%$%k$r=|5n$9$k$?$a$K$3$N@5\e(B
 \e$B5,I=8=$r;H$&;v$,$G$-$^$9!#\e(B@file{all.SCORE} \e$B$N%-%c%C%7%e$r;_$a$k$N$O0-$$\e(B
 \e$B9M$($G$9$,!"\e(B@file{comp.infosystems.www.authoring.misc.ADAPT} \e$B$r%-%c%C%7%e\e(B
-\e$B$7$J$$$N$ONI$$9M$($G$7$g$&!#<B:]$N$H$3$m!"$3$NJQ?t$O=i4|@_Dj$G\e(B
-@samp{ADAPT$} \e$B$G!"E,1~%9%3%"%U%!%$%k$O%-%c%C%7%e$5$l$^$;$s!#\e(B
+\e$B$7$J$$$N$ONI$$9M$($G$7$g$&!#<B:]$N$H$3$m!"$3$NJQ?t$O=i4|@_Dj\e(B
+\e$B$G\e(B @samp{ADAPT$} \e$B$G!"E,1~%9%3%"%U%!%$%k$O%-%c%C%7%e$5$l$^$;$s!#\e(B
 
 @item gnus-save-score
 @vindex gnus-save-score
 \e$B$b$7K\Ev$KJ#;($J%9%3%"%U%!%$%k$r;}$C$F$$$F!"$?$/$5$s$N0l3g%9%3%"$r$9$k$N\e(B
-\e$B$G$"$l$P!"$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$HNI$$$+$b$7$l$^$;$s!#$3$l$O\e(B
-gnus \e$B$K%9%3%"$r\e(B @file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$9$k$h$&$K$5$;$^$9!#\e(B
+\e$B$G$"$l$P!"$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$HNI$$$+$b$7$l$^$;$s!#$3$l\e(B
+\e$B$O\e(B gnus \e$B$K%9%3%"$r\e(B @file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$9$k$h$&$K$5$;$^$9!#\e(B
 
-\e$B$3$l$r\e(B @code{t} \e$B$K@_Dj$7$J$1$l$P!"<jF0%9%3%"\e(B (@kbd{V s}
-(@code{gnus-summary-set-score}) \e$B$G@_Dj$5$l$?$h$&$J$b$N\e(B) \e$B$O%0%k!<%W0\F0;~\e(B
-\e$B$KJ]B8$5$l$^$;$s!#\e(B
+\e$B$3$l$r\e(B @code{t} \e$B$K@_Dj$7$J$1$l$P!"<jF0%9%3\e(B
+\e$B%"\e(B (@kbd{V s} (@code{gnus-summary-set-score}) \e$B$G@_Dj$5$l$?$h$&$J$b$N\e(B) \e$B$O\e(B
+\e$B%0%k!<%W0\F0;~$KJ]B8$5$l$^$;$s!#\e(B
 
 @item gnus-score-interactive-default-score
 @vindex gnus-score-interactive-default-score
 \e$BA4$F$NBPOCE*%9%3%">e$2\e(B/\e$B2<$2L?Na$K$h$C$F;H$o$l$k>e$2\e(B/\e$B2<$2$9$k%9%3%"$G$9!#\e(B
-\e$B%G%#%U%)%k%H$O\e(B1000\e$B$G!"2a>j$@$H;W$&$+$b$7$l$^$;$s$,!"$3$l$OE,1~%9%3%"IU$1\e(B
-\e$B$r$9$kM>CO$NB8:_$9$k;v$r3N<B$K$9$k$?$a$G$9!#<j$GEPO?$5$l$?%G!<%?$rE,1~%9\e(B
-\e$B%3%"$G$N>.$5$JJQ99$G>e=q$-$5$l$?$/$O$"$j$^$;$s!#\e(B
+\e$B%G%#%U%)%k%H$O\e(B 1000 \e$B$G!"2a>j$@$H;W$&$+$b$7$l$^$;$s$,!"$3$l$OE,1~%9%3%"IU\e(B
+\e$B$1$r$9$kM>CO$NB8:_$9$k;v$r3N<B$K$9$k$?$a$G$9!#<j$GEPO?$5$l$?%G!<%?$rE,1~\e(B
+\e$B%9%3%"$G$N>.$5$JJQ99$G>e=q$-$5$l$?$/$O$"$j$^$;$s!#\e(B
 
 @item gnus-summary-default-score
 @vindex gnus-summary-default-score
-\e$B5-;v$N%9%3%"$N=i4|CM$G!"=i4|@_Dj$G$O\e(B0\e$B$K$J$C$F$$$^$9!#\e(B
+\e$B5-;v$N%9%3%"$N=i4|CM$G!"=i4|@_Dj$G$O\e(B 0 \e$B$K$J$C$F$$$^$9!#\e(B
 
 @item gnus-summary-expunge-below
 @vindex gnus-summary-expunge-below
@@ -13975,12 +14970,12 @@ gnus \e$B$K%9%3%"$r\e(B @file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$9$k$h$&$K$5$;$^$9!#\e(
 
 @item gnus-score-over-mark
 @vindex gnus-score-over-mark
-\e$B=i4|@_Dj$N%9%3%"$h$jBg$-$J%9%3%"$r;}$D5-;v$KBP$7$F\e(B (3\e$B7eL\$K\e(B) \e$B;H$o$l$k0u\e(B
+\e$B=i4|@_Dj$N%9%3%"$h$jBg$-$J%9%3%"$r;}$D5-;v$KBP$7$F\e(B (\e$B;07eL\$K\e(B) \e$B;H$o$l$k0u\e(B
 \e$B$G$9!#=i4|@_Dj$O\e(B @samp{+} \e$B$G$9!#\e(B
 
 @item gnus-score-below-mark
 @vindex gnus-score-below-mark
-\e$B=i4|@_Dj$N%9%3%"$h$j>.$5$J%9%3%"$r;}$D5-;v$KBP$7$F\e(B (3\e$B7eL\$K\e(B) \e$B;H$o$l$k0u\e(B
+\e$B=i4|@_Dj$N%9%3%"$h$j>.$5$J%9%3%"$r;}$D5-;v$KBP$7$F\e(B (\e$B;07eL\$K\e(B) \e$B;H$o$l$k0u\e(B
 \e$B$G$9!#=i4|@_Dj$O\e(B @samp{-} \e$B$G$9!#\e(B
 
 @item gnus-score-find-score-files-function
@@ -13999,9 +14994,10 @@ gnus \e$B$K%9%3%"$r\e(B @file{.newsrc.eld} \e$B%U%!%$%k$KJ]B8$9$k$h$&$K$5$;$^$9!#\e(
 @findex gnus-score-find-bnews
 bnews \e$B9=J8$r;H$C$F!"A4$F$N9gCW$9$k%9%3%"%U%!%$%k$rE,MQ$7$^$9!#$3$l$,=i4|\e(B
 \e$B@_Dj$G$9!#Nc$($P!"8=:_$N%0%k!<%W$,\e(B @samp{gnu.emacs.gnus} \e$B$J$i$P!"\e(B
-@file{gnu.all.SCORE}\e$B!"\e(B@file{not.alt.SCORE} \e$B$H\e(B @file{gnu.all.SCORE} \e$B$,$9\e(B
-\e$B$Y$FE,MQ$5$l$^$9!#MW$9$k$K!"%9%3%"%U%!%$%kL>$N\e(B @samp{all} \e$B$,\e(B @samp{.*}
-\e$B$KJQ49$5$l!"$=$l$+$i@55,I=8=$N9gCW$,$J$5$l$^$9!#\e(B
+@file{gnu.all.SCORE}, @file{not.alt.SCORE} \e$B$H\e(B @file{gnu.all.SCORE} \e$B$,$9\e(B
+\e$B$Y$FE,MQ$5$l$^$9!#MW$9$k$K!"%9%3%"%U%!%$%kL>\e(B
+\e$B$N\e(B @samp{all} \e$B$,\e(B @samp{.*} \e$B$KJQ49$5$l!"$=$l$+$i@55,I=8=$N9gCW$,$J$5$l$^\e(B
+\e$B$9!#\e(B
 
 \e$B$3$l$O!"A4$F$N%0%k!<%W$KE,MQ$7$?$$%9%3%"EPO?$,$$$/$D$+$"$k>l9g$O!"$=$l$i\e(B
 \e$B$NEPO?$r\e(B @file{all.SCORE} \e$B%U%!%$%k$KF~$l$k$H$$$&$3$H$G$9!#\e(B
@@ -14013,32 +15009,38 @@ Gnus \e$B$O0lHLE*$J%9%3%"%U%!%$%k$rFCDj$N%9%3%"%U%!%$%k8~$1$N$b$N$h$jA0$KE,\e(B
 
 @item gnus-score-find-hierarchical
 @findex gnus-score-find-hierarchical
-\e$BA4$F$N?F%0%k!<%W$+$i$NA4$F$N%9%3%"%U%!%$%k$rE,MQ$7$^$9!#$3$l$O\e(B
-@file{all.SCORE} \e$B$N$h$&$J%9%3%"%U%!%$%k$r;}$D;v$O$G$-$J$$$1$l$I!"\e(B
-@file{SCORE}\e$B!"\e(B@file{comp.SCORE} \e$B$H\e(B @file{comp.emacs.SCORE} \e$B$r;}$D;v$,$G\e(B
-\e$B$-$k$H$$$&;v$G$9!#\e(B
+\e$BA4$F$N?F%0%k!<%W$+$i$NA4$F$N%9%3%"%U%!%$%k$rE,MQ$7$^$9!#$3$l\e(B
+\e$B$O\e(B @file{all.SCORE} \e$B$N$h$&$J%9%3%"%U%!%$%k$r;}$D;v$O$G$-$J$$$1$l$I!"\e(B
+@file{SCORE}, @file{comp.SCORE} \e$B$H\e(B @file{comp.emacs.SCORE} \e$B$r!"$=$l$>$l\e(B
+\e$B$N%5!<%P!<$KBP$7$F;}$D;v$,$G$-$k$H$$$&;v$G$9!#\e(B
 
 @end table
 \e$B$3$NJQ?t$O4X?t$N%j%9%H$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$3$l$i$NA4$F$N4X?t\e(B
-\e$B$,8F$P$l!"%9%3%"%U%!%$%k$NJV$5$l$?A4$F$N%j%9%H$,E,MQ$5$l$^$9!#$3$l$i$N4X\e(B
-\e$B?t$OD>@\%9%3%"O"A[%j%9%H$N%j%9%H$rJV$9;v$b$G$-$^$9!#$=$N>l9g$O!"$=$l$i$N\e(B
-\e$B%U%!%$%k$G$J$$%9%3%"O"A[%j%9%H$rJV$94X?t$O!"JV$5$l$k:G8e$N%9%3%"%U%!%$%k\e(B
-\e$B$,%m!<%+%k%9%3%"%U%!%$%k$G$"$k;v$r3N<B$K$9$k$?$a$K!"$*$=$i$/\e(B ``\e$BK\Ev$N\e(B''
-\e$B%9%3%"%U%!%$%k4X?t$h$j$bA0$KCV$+$l$k$Y$-$G$7$g$&!#$U$%!#\e(B
+\e$B$,%0%k!<%WL>$r0z?t$H$7$F8F$P$l!"%9%3%"%U%!%$%k$NJV$5$l$?A4$F$N%j%9%H$,E,\e(B
+\e$BMQ$5$l$^$9!#$3$l$i$N4X?t$OD>@\%9%3%"O"A[%j%9%H$N%j%9%H$rJV$9;v$b$G$-$^$9!#\e(B
+\e$B$=$N>l9g$O!"$=$l$i$N%U%!%$%k$G$J$$%9%3%"O"A[%j%9%H$rJV$94X?t$O!"JV$5$l$k\e(B
+\e$B:G8e$N%9%3%"%U%!%$%k$,%m!<%+%k%9%3%"%U%!%$%k$G$"$k;v$r3N<B$K$9$k$?$a$K!"\e(B
+\e$B$*$=$i$/\e(B ``\e$BK\Ev$N\e(B'' \e$B%9%3%"%U%!%$%k4X?t$h$j$bA0$KCV$+$l$k$Y$-$G$7$g$&!#$U$%!#\e(B
+
+\e$BNc$($P!"%5!<%P!<$rFCDj$7$J$$A4BN%9%3%"%U%!%$%k$r;H$C$F!"?F%0%k!<%W$K=`$8\e(B
+\e$B$?%9%3%"IU$1$r9T$J$&$J$i$P!"<!$NCM$r;H$($PNI$$$G$7$g$&!#\e(B
+@example
+(list (lambda (group) ("all.SCORE")) 'gnus-score-find-hierarchical)
+@end example
 
 @item gnus-score-expiry-days
 @vindex gnus-score-expiry-days
 \e$B$3$NJQ?t$O;H$o$l$F$$$J$$%9%3%"%U%!%$%kEPO?$,4|8B@Z$l:o=|$5$l$k$^$G$I$N$/\e(B
 \e$B$i$$$NF|$,7P$D$Y$-$+$r;XDj$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"%9%3%"\e(B
-\e$B%U%!%$%kEPO?$O:o=|$5$l$^$;$s!#=i4|CM$O\e(B7\e$B$G$9!#\e(B
+\e$B%U%!%$%kEPO?$O:o=|$5$l$^$;$s!#=i4|CM$O\e(B 7 \e$B$G$9!#\e(B
 
 @item gnus-update-score-entry-dates
 @vindex gnus-update-score-entry-dates
 \e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"9gCW$9$k%9%3%"EPO?$OF|IU$,99?7$5$l$^$9!#\e(B
 (\e$B$3$l$O\e(B gnus \e$B$,4|8B@Z$l>C5n$rA`:n$7$F$$$kJ}K!$G$9\e(B---\e$BA4$F$N9gCW$7$J$$EPO?\e(B
-\e$B$O8E$/$J$j$9$.!"9gCW$9$kEPO?$r?7A/$G<c$$$^$^$G$9!#\e(B) \e$B$7$+$7!"$3$NJQ?t$r\e(B
-@code{nil} \e$B$K@_Dj$9$k$H!"9gCW$9$kEPO?$G$5$($b8E$/$J$j!"$"$N7y$J;`?@$HD>\e(B
-\e$BLL$9$k;v$K$J$k$G$7$g$&!#\e(B
+\e$B$O8E$/$J$j$9$.!"9gCW$9$kEPO?$r?7A/$G<c$$$^$^$G$9!#\e(B) \e$B$7$+$7!"$3$NJQ?t\e(B
+\e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$H!"9gCW$9$kEPO?$G$5$($b8E$/$J$j!"$"$N7y$J;`?@$H\e(B
+\e$BD>LL$9$k;v$K$J$k$G$7$g$&!#\e(B
 
 @item gnus-score-after-write-file-function
 @vindex gnus-score-after-write-file-function
@@ -14053,7 +15055,6 @@ Gnus \e$B$O0lHLE*$J%9%3%"%U%!%$%k$rFCDj$N%9%3%"%U%!%$%k8~$1$N$b$N$h$jA0$KE,\e(B
 
 @end table
 
-
 @node Score File Format
 @section \e$B%9%3%"%U%!%$%kMM<0\e(B
 @cindex score file format
@@ -14091,30 +15092,29 @@ Gnus \e$B$O0lHLE*$J%9%3%"%U%!%$%k$rFCDj$N%9%3%"%U%!%$%k8~$1$N$b$N$h$jA0$KE,\e(B
 \e$B$3$NNc$O$?$$$F$$$N%9%3%"%U%!%$%k$NMWAG$r@bL@$7$F$$$^$9!#0c$C$?J}K!$K$D$$\e(B
 \e$B$F$O!"\e(B@pxref{Advanced Scoring} \e$B$r8+$F$/$@$5$$!#\e(B
 
-\e$B$3$l$O\e(B lisp \e$B%3!<%I$N$h$&$K8+$($^$9$,!"<B:]$O$3$3$K$"$k$b$N$O2?$b\e(B
-@code{\e$BI>2A\e(B} (eval) \e$B$5$l$^$;$s!#$7$+$7!"\e(Blisp \e$B%j!<%@!<$,$3$NMM<0$rFI$_9~$`\e(B
-\e$B$N$K;H$o$l$^$9$N$G!"0UL#E*$KM-8z$G$J$$$H$7$F$b!"J8K!E*$K$OM-8z$G$9!#\e(B
+\e$B$3$l$O\e(B lisp \e$B%3!<%I$N$h$&$K8+$($^$9$,!"<B:]$O$3$3$K$"$k$b$N$O2?\e(B
+\e$B$b\e(B @code{\e$BI>2A\e(B} (eval) \e$B$5$l$^$;$s!#$7$+$7!"\e(Blisp \e$B%j!<%@!<$,$3$NMM<0$rFI$_\e(B
+\e$B9~$`$N$K;H$o$l$^$9$N$G!"0UL#E*$KM-8z$G$J$$$H$7$F$b!"J8K!E*$K$OM-8z$G$9!#\e(B
 
-\e$B$3$NO"A[%j%9%H$G$O\e(B6\e$B$D$N%-!<$r;H$&;v$,$G$-$^$9!#\e(B
+\e$B$3$NO"A[%j%9%H$G$OO;$D$N%-!<$r;H$&;v$,$G$-$^$9!#\e(B
 
 @table @code
 
 @item \e$BJ8;zNs\e(B (STRING)
 \e$B$b$7%-!<$,J8;zNs$G$"$k$H!"$=$l$O9gCW$,<B9T$5$l$k%X%C%@!<$NL>A0$G$9!#%9%3\e(B
-\e$B%"$O$3$l$i$N\e(B8\e$B$D$N%X%C%@!<$@$1$K<B9T$5$l$^$9\e(B: @code{From}\e$B!"\e(B@code{Subject}\e$B!"\e(B
-@code{References}\e$B!"\e(B@code{Message-ID}\e$B!"\e(B@code{Xref}\e$B!"\e(B@code{Lines}\e$B!"\e(B
-@code{Chars}\e$B!"\e(B@code{Date} \e$B$G$9!#$3$l$i$N%X%C%@!<$K2C$($F!"\e(Bgnus \e$B$K5-;vA4\e(B
-\e$BBN$r<hF@$7$F\e(B,\e$B5-;v$N$h$jBg$-$JItJ,$G9gCW$r9T$&$h$&$K$9$k\e(B3\e$B$D$NJ8;zNs$,$"$j\e(B
-\e$B$^$9\e(B: @code{Body} \e$B$O5-;v$NK\BN\e(B (Body) \e$B$G9gCW$r<B9T$7!"\e(B@code{Head} \e$B$O5-;v\e(B
-\e$B$N%X%C%@!<\e(B (Head) \e$B$G9gCW$r<B9T$7!"\e(B@code{All} \e$B$O5-;vA4BN$G9gCW$r<B9T$7$^\e(B
-\e$B$9!#:G8e$N$3$l$i$N\e(B3\e$B$D$N%-!<$r;H$&;v$O%0%k!<%W$KF~$k$H$-$KB.EY$r\e(B @emph{\e$B$+\e(B
-\e$B$J$j\e(B} \e$BCY$/$9$k;v$K5$$rIU$1$F$/$@$5$$!#%9%3%"$rIU$1$k;v$N$G$-$k:G8e$N\e(B
-``\e$B%X%C%@!<\e(B'' \e$B$O\e(B @code{Followup} \e$B$G$9!#$3$l$i$N%9%3%"EPO?$O$=$l$K9gCW$9$k\e(B
-\e$B5-;v$X$NA4$F$N%U%)%m!<%"%C%W$N$?$a$N?7$7$$%9%3%"EPO?$,IU$12C$($i$l$k;v$K\e(B
-\e$B$J$j$^$9!#\e(B
-
-\e$B$3$N%-!<$KB3$/$N$OG$0U$N?t$N%9%3%"EPO?$G!"$=$l$>$l$N%9%3%"EPO?$O\e(B1\e$B$D$+$i\e(B4
-\e$B$D$^$G$NMWAG$r;}$A$^$9!#\e(B
+\e$B%"$O$3$l$i$NH,$D$N%X%C%@!<$@$1$K<B9T$5$l$^$9\e(B: @code{From}, @code{Subject}, @code{References}, @code{Message-ID}, @code{Xref}, @code{Lines}, @code{Chars}@code{Date} \e$B$G\e(B
+\e$B$9!#$3$l$i$N%X%C%@!<$K2C$($F!"\e(Bgnus \e$B$K5-;vA4BN$r<hF@$7$F\e(B,\e$B5-;v$N$h$jBg$-$J\e(B
+\e$BItJ,$G9gCW$r9T$&$h$&$K$9$k;0$D$NJ8;zNs$,$"$j$^$9\e(B: @code{Body} \e$B$O5-;v$NK\\e(B
+\e$BBN\e(B (Body) \e$B$G9gCW$r<B9T$7!"\e(B@code{Head} \e$B$O5-;v$N%X%C%@!<\e(B (Head) \e$B$G9gCW$r<B\e(B
+\e$B9T$7!"\e(B@code{All} \e$B$O5-;vA4BN$G9gCW$r<B9T$7$^$9!#:G8e$N$3$l$i$N;0$D$N%-!<\e(B
+\e$B$r;H$&;v$O%0%k!<%W$KF~$k$H$-$KB.EY$r\e(B @emph{\e$B$+$J$j\e(B} \e$BCY$/$9$k;v$K5$$rIU$1\e(B
+\e$B$F$/$@$5$$!#%9%3%"$rIU$1$k;v$N$G$-$k:G8e\e(B
+\e$B$N\e(B ``\e$B%X%C%@!<\e(B'' \e$B$O\e(B @code{Followup} \e$B$G$9!#$3$l$i$N%9%3%"EPO?$O$=$l$K9gCW\e(B
+\e$B$9$k5-;v$X$NA4$F$N%U%)%m!<%"%C%W$N$?$a$N?7$7$$%9%3%"EPO?$,IU$12C$($i$l$k\e(B
+\e$B;v$K$J$j$^$9!#\e(B
+
+\e$B$3$N%-!<$KB3$/$N$OG$0U$N?t$N%9%3%"EPO?$G!"$=$l$>$l$N%9%3%"EPO?$O0l$D$+$i\e(B
+\e$B;M$D$^$G$NMWAG$r;}$A$^$9!#\e(B
 @enumerate
 
 @item
@@ -14122,39 +15122,41 @@ Gnus \e$B$O0lHLE*$J%9%3%"%U%!%$%k$rFCDj$N%9%3%"%U%!%$%k8~$1$N$b$N$h$jA0$KE,\e(B
 \e$B$,!"\e(BLines \e$B$H\e(B Chars \e$B%X%C%@!<$G$O$3$l$O@0?t$G$J$1$l$P$J$j$^$;$s!#\e(B
 
 @item
-\e$B$b$7\e(B2\e$BHVL\$NMWAG$,B8:_$9$k$J$i!"$=$l$O?t;z$G$"$k$Y$-$G$9\e(B---@dfn{\e$B%9%3%"MW\e(B
-\e$BAG\e(B}\e$B!#$3$N?t;z$OIi$NL58BBg$+$i@5$NL58BBg$^$G$N4V$N@0?t$G$"$k$Y$-$G$9!#$b\e(B
-\e$B$79gCW$,@.8y$9$l$P!"$3$N?t;z$,5-;v$N%9%3%"$K2C$($i$l$^$9!#$b$7$3$NMWAG$,\e(B
-\e$BB8:_$7$F$$$J$1$l$P!"?t;z\e(B @code{gnus-score-interactive-default-score} \e$B$,\e(B
-\e$BBe$o$j$K;H$o$l$^$9!#$3$l$O=i4|@_Dj$G\e(B1000\e$B$G$9!#\e(B
+\e$B$b$7FsHVL\$NMWAG$,B8:_$9$k$J$i!"$=$l$O?t;z$G$"$k$Y$-$G\e(B
+\e$B$9\e(B---@dfn{\e$B%9%3%"MWAG\e(B}\e$B!#$3$N?t;z$OIi$NL58BBg$+$i@5$NL58BBg$^$G$N4V$N@0?t\e(B
+\e$B$G$"$k$Y$-$G$9!#$b$79gCW$,@.8y$9$l$P!"$3$N?t;z$,5-;v$N%9%3%"$K2C$($i$l$^\e(B
+\e$B$9!#$b$7$3$NMWAG$,B8:_$7$F$$$J$1$l$P!"?t\e(B
+\e$B;z\e(B @code{gnus-score-interactive-default-score}\e$B$,Be$o$j$K;H$o$l$^$9!#$3$l\e(B
+\e$B$O=i4|@_Dj$G\e(B 1000 \e$B$G$9!#\e(B
 
 @item
-\e$B$b$7\e(B3\e$BHVL\$NMWAG$,B8:_$7$F$$$k$H!"$=$l$O?t;z$G$"$k$Y$-$G$9\e(B---@dfn{\e$BF|IUMW\e(B
-\e$BAG\e(B} \e$B$G$9!#$3$NF|IU$O:G8e$K$3$N%9%3%"EPO?$,9gCW$7$?;~9o$r<($7!"$3$l$O%9%3\e(B
-\e$B%"EPO?$N4|8B@Z$l>C5n5!9=$N5!G=$N$?$a$K;H$o$l$^$9!#$3$NMWAG$,B8:_$7$F$$$J\e(B
-\e$B$1$l$P!"%9%3%"EPO?$O1JB3$7$^$9!#F|IU$O5*85A0\e(B1\e$BG/\e(B12\e$B7n\e(B31\e$BF|$+$i7P2a$7$?F|$K\e(B
-\e$B$A$N?t$GI=$5$l$^$9!#\e(B
+\e$B$b$7;0HVL\$NMWAG$,B8:_$7$F$$$k$H!"$=$l$O?t;z$G$"$k$Y$-$G\e(B
+\e$B$9\e(B---@dfn{\e$BF|IUMWAG\e(B} \e$B$G$9!#$3$NF|IU$O:G8e$K$3$N%9%3%"EPO?$,9gCW$7$?;~9o$r\e(B
+\e$B<($7!"$3$l$O%9%3%"EPO?$N4|8B@Z$l>C5n5!9=$N5!G=$N$?$a$K;H$o$l$^$9!#$3$NMW\e(B
+\e$BAG$,B8:_$7$F$$$J$1$l$P!"%9%3%"EPO?$O1JB3$7$^$9!#F|IU$O5*85A0\e(B 1\e$BG/\e(B12\e$B7n\e(B31\e$BF|\e(B
+\e$B$+$i7P2a$7$?F|$K$A$N?t$GI=$5$l$^$9!#\e(B
 
 @item
-\e$B$b$7\e(B4\e$BHVL\$NMWAG$,B8:_$7$F$$$k$H!"$=$l$O%7%s%\%k$G$"$k$Y$-$G$9\e(B---@dfn{\e$B7?\e(B
-\e$BMWAG\e(B} \e$B$G$9!#$3$NMWAG$O$3$N%9%3%"EPO?$,5-;v$K9gCW$9$k$+$I$&$+$rD4$Y$k$N$K\e(B
-\e$B$I$N4X?t$,;H$o$l$k$Y$-$G$"$k$+$r;XDj$7$^$9!#\e(B
+\e$B$b$7;MHVL\$NMWAG$,B8:_$7$F$$$k$H!"$=$l$O%7%s%\%k$G$"$k$Y$-$G\e(B
+\e$B$9\e(B---@dfn{\e$B7?MWAG\e(B} \e$B$G$9!#$3$NMWAG$O$3$N%9%3%"EPO?$,5-;v$K9gCW$9$k$+$I$&$+\e(B
+\e$B$rD4$Y$k$N$K$I$N4X?t$,;H$o$l$k$Y$-$G$"$k$+$r;XDj$7$^$9!#\e(B
 
 @table @dfn
 
 @item From, Subject, References, Xref, Message-ID
-\e$B$?$$$F$$$N%X%C%@!<$N7?$KBP$7$F!"\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$B7?!"\e(B@code{e} \e$B$H\e(B
-@code{E} (\e$B@53N$J9gCW\e(B) (exact match)\e$B!"\e(B@code{w} (\e$B8l$N9gCW\e(B) (word match) \e$B7?\e(B
-\e$B$,B8:_$7$^$9!#$b$7$3$NMWAG$,B8:_$7$J$$$H!"\e(Bgnus \e$B$OJ8;zNs$N0lIt$N9gCW$,MQ\e(B
-\e$B$$$i$l$k$Y$-$G$"$k$H$_$J$7$^$9!#\e(B@code{R}\e$B!"\e(B@code{S}\e$B!"\e(B@code{E} \e$B$O9gCW$,BgJ8\e(B
-\e$B;z$H>.J8;z$r6hJL$9$kJ}K!$G9T$o$l$k$H$$$&E@$GB>$N$b$N$H0[$J$j$^$9!#A4$F$N\e(B
-\e$B$3$l$i$N0lJ8;z7?$OK\Ev$O\e(B @code{regexp}\e$B!"\e(B@code{exact}\e$B!"\e(B@code{word} \e$B7?$NC;\e(B
-\e$B=L7A$G!"$b$7$=$&$7$?$$$H;W$($P$3$A$i$rBe$o$j$K;H$&;v$,$G$-$^$9!#\e(B
+\e$B$?$$$F$$$N%X%C%@!<$N7?$KBP$7$F!"\e(B@code{r} \e$B$H\e(B @code{R} (\e$B@55,I=\e(B
+\e$B8=\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$B7?!"\e(B
+@code{e} \e$B$H\e(B @code{E} (\e$B@53N$J9gCW\e(B) (exact match)\e$B!"\e(B
+@code{w} (\e$B8l$N9gCW\e(B) (word match) \e$B7?$,B8:_$7$^$9!#$b$7$3$NMWAG$,B8:_$7$J\e(B
+\e$B$$$H!"\e(Bgnus \e$B$OJ8;zNs$N0lIt$N9gCW$,MQ$$$i$l$k$Y$-$G$"$k$H$_$J$7$^$9!#\e(B
+@code{R}, @code{S}, @code{E} \e$B$O9gCW$,BgJ8;z$H>.J8;z$r6hJL$9$kJ}K!$G9T$o\e(B
+\e$B$l$k$H$$$&E@$GB>$N$b$N$H0[$J$j$^$9!#A4$F$N$3$l$i$N0lJ8;z7?$OK\Ev\e(B
+\e$B$O\e(B @code{regexp}, @code{exact}, @code{word} \e$B7?$NC;=L7A$G!"$b$7$=$&$7$?$$\e(B
+\e$B$H;W$($P$3$A$i$rBe$o$j$K;H$&;v$,$G$-$^$9!#\e(B
 
 @item Lines, Chars
-\e$B$3$l$i$N\e(B2\e$B$D$N%X%C%@!<$O0c$C$?9gCW$N7?$r;H$$$^$9\e(B: @code{<}\e$B!"\e(B@code{>}\e$B!"\e(B
-@code{=}\e$B!"\e(B@code{>=}\e$B!"\e(B@code{<=} \e$B$G$9!#\e(B
+\e$B$3$l$i$NFs$D$N%X%C%@!<$O0c$C$?9gCW$N7?$r;H$$$^$9\e(B: @code{<}, @code{>}, @code{=}, @code{>=}, @code{<=} \e$B$G\e(B
+\e$B$9!#\e(B
 
 \e$B$3$l$i$N=R8l$O$b$7\e(B
 
@@ -14162,55 +15164,57 @@ Gnus \e$B$O0lHLE*$J%9%3%"%U%!%$%k$rFCDj$N%9%3%"%U%!%$%k8~$1$N$b$N$h$jA0$KE,\e(B
 (PREDICATE HEADER MATCH)
 @end example
 
-\e$B$NI>2A$,\e(B @code{nil} \e$B$G$J$$$H!"??$H$J$j$^$9!#Nc$($P!">e5i9gCW\e(B
-@code{("lines" 4 <)} (@pxref{Advanced Scoring}) \e$B$O7k2L$H$7$F0J2<$N<0$K$J\e(B
-\e$B$j$^$9!#\e(B
+\e$B$NI>2A$,\e(B @code{nil} \e$B$G$J$$$H!"??$H$J$j$^$9!#Nc$($P!">e5i9g\e(B
+\e$BCW\e(B @code{("lines" 4 <)} (@pxref{Advanced Scoring}) \e$B$O7k2L$H$7$F0J2<$N<0\e(B
+\e$B$K$J$j$^$9!#\e(B
 
 @lisp
 (< header-value 4)
 @end lisp
 
 \e$B$b$7$/$OB>$NJ}K!$K$7$^$7$g$&\e(B: @code{<} \e$B$r\e(B @code{Lines} \e$B$G\e(B 4 \e$B$r9gCW$H$7$F\e(B
-\e$B;H$C$F$$$k$H$-$O!"5-;v$,\e(B4\e$B9T$h$j$b>/$J$$$H$-$K%9%3%"$,DI2C$5$l$^$9!#\e(B(\e$B:.Mp\e(B
-\e$B$7$F!"H?BP$G$O$J$$$+$H9M$(0W$$$G$9!#$G$b!"$=$&$G$O$J$$$N$G$9!#;d$,;W$&$K!#\e(B)
-
-\e$B9gCW$,\e(B @code{Lines} \e$B$G$J$5$l$F$$$k$H!"$$$/$D$+$N%P%C%/%(%s%I\e(B
-(@code{nndir}\e$B$N$h$&$J$b$N\e(B) \e$B$O\e(B @code{Lines} \e$B%X%C%@!<$r:n@.$7$J$$$?$a$KA4\e(B
-\e$B$F$N5-;v$,\e(B 0 \e$B9T$G$"$k$H$7$F07$o$l$k;v$K5$$rIU$1$F$/$@$5$$!#$3$l$O$b$7>/\e(B
-\e$B$7$N9T$7$+$J$$5-;v$N%9%3%"$r2<$2$F$$$k$N$J$i!"JQ$J7k2L$,5/$3$jF@$k;v$K$J\e(B
-\e$B$j$^$9!#\e(B
+\e$B;H$C$F$$$k$H$-$O!"5-;v$,\e(B 4 \e$B9T$h$j$b>/$J$$$H$-$K%9%3%"$,DI2C$5$l$^$9!#\e(B(\e$B:.\e(B
+\e$BMp$7$F!"H?BP$G$O$J$$$+$H9M$(0W$$$G$9!#$G$b!"$=$&$G$O$J$$$N$G$9!#;d$,;W$&\e(B
+\e$B$K!#\e(B)
+
+\e$B9gCW$,\e(B @code{Lines} \e$B$G$J$5$l$F$$$k$H!"$$$/$D$+$N%P%C%/%(%s\e(B
+\e$B%I\e(B (@code{nndir}\e$B$N$h$&$J$b$N\e(B) \e$B$O\e(B @code{Lines} \e$B%X%C%@!<$r:n@.$7$J$$$?$a$K\e(B
+\e$BA4$F$N5-;v$,\e(B 0 \e$B9T$G$"$k$H$7$F07$o$l$k;v$K5$$rIU$1$F$/$@$5$$!#$3$l$O$b$7\e(B
+\e$B>/$7$N9T$7$+$J$$5-;v$N%9%3%"$r2<$2$F$$$k$N$J$i!"JQ$J7k2L$,5/$3$jF@$k;v$K\e(B
+\e$B$J$j$^$9!#\e(B
 
 @item Date
-Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O\e(B3\e$B$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j$^$9\e(B:
-@code{before}\e$B!"\e(B@code{at}\e$B!"\e(B@code{after} \e$B$G$9!#;d$OK\Ev$K$3$l$,LrN)$D$h$&\e(B
+Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O;0$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j$^$9\e(B:
+@code{before}, @code{at}, @code{after} \e$B$G$9!#;d$OK\Ev$K$3$l$,LrN)$D$h$&\e(B
 \e$B$J5!2q$rA[A|$G$-$J$$$N$G$9$,!"$3$N4X?t$rDs6!$7$J$$$N$b$J$s$H$J$/$P$+$2$F\e(B
 \e$B$$$^$9!#$=$&$7$?>l9g$N$?$a$K$"$k$N$G$9!#$$$DI,MW$K$J$k$+$OC/$K$b$o$+$j$^\e(B
-\e$B$;$s!#E>$P$L@h$N>s$G$9!#0lEY>F$1$k$H\e(B2\e$BEYCQ$:$+$7$$!"$G$9!#K\$r%+%P!<$GH=\e(B
-\e$BCG$7$F$O9T$1$^$;$s!#:G=i$NF|$K@-9T0Y$r9T$C$F$$$O9T$1$^$;$s!#\e(B (\e$B$7$+$7!";d\e(B
+\e$B$;$s!#E>$P$L@h$N>s$G$9!#0lEY>F$1$k$HFsEYCQ$:$+$7$$!"$G$9!#K\$r%+%P!<$GH=\e(B
+\e$BCG$7$F$O9T$1$^$;$s!#:G=i$NF|$K@-9T0Y$r9T$C$F$$$O9T$1$^$;$s!#\e(B(\e$B$7$+$7!";d\e(B
 \e$B$O>/$J$/$H$b0l?M!"0zMQ$7$^$9$,!"\e(B``\e$B$3$N4X?t$O7g$+$;$J$$$b$N$G$"$k;v$,$o$+$C\e(B
 \e$B$?\e(B'' \e$B$H8@$C$??M$,F~$k$HJ9$$$F$$$^$9!#\e(B)
 
 @cindex ISO8601
 @cindex date
 \e$B$b$C$HLrN)$D9gCW$N7?$O\e(B @code{\e$B@55,I=8=\e(B} \e$B$G$9!#$=$l$K$h$C$FF|IUJ8;zNs$K@5\e(B
-\e$B5,I=8=$rMQ$$$F9gCW$5$;$k;v$,$G$-$^$9!#F|IU$O$^$:\e(B ISO8601 \e$BC;=LMM<0\e(B
-(compact format) \e$B$KI8=`2=$5$l$^$9\e(B---@var{YYYYMMDD}@code{T}@var{HHMMSS}
-\e$B$G$9!#Nc$($P!"$b$7A4$F$NG/$N\e(B4\e$B7n\e(B1\e$BF|$KEj9F$5$l$?A4$F$N5-;v$K$,<#$5$;$?$$$N\e(B
-\e$B$G$"$l$P!"\e(B@samp{....0401.........} \e$B$r9gCWJ8;zNs$H$7$F;H$&;v$,$G$-$^$9!#\e(B
-(\e$BF|IU$O85!9$NI8=`;~$GJ]B8$5$l$F$$$^$9$N$G!"$=$N5-;v$,Ej9F$5$l$?$H$3$m$G\e(B4
-\e$B7n\e(B1\e$BF|$KEj9F$5$l$?5-;v$K9gCW$9$k;v$KCm0U$7$F$/$@$5$$!#I8=`;~$O0l2H$K$H$C\e(B
-\e$B$FHs>o$KM-1W$J3Z$7$_$G$7$g$&!)\e(B)
+\e$B5,I=8=$rMQ$$$F9gCW$5$;$k;v$,$G$-$^$9!#F|IU$O$^$:\e(B ISO8601 \e$BC;=LMM\e(B
+\e$B<0\e(B (compact format) \e$B$KI8=`2=$5$l$^\e(B
+\e$B$9\e(B---@var{YYYYMMDD}@code{T}@var{HHMMSS} \e$B$G$9!#Nc$($P!"$b$7A4$F$NG/\e(B
+\e$B$N\e(B 4\e$B7n\e(B1\e$BF|\e(B \e$B$KEj9F$5$l$?A4$F$N5-;v$K$,<#$5$;$?$$$N$G$"$l$P!"\e(B
+@samp{....0401.........} \e$B$r9gCWJ8;zNs$H$7$F;H$&;v$,$G$-$^$9!#\e(B(\e$BF|IU$O85!9\e(B
+\e$B$NI8=`;~$GJ]B8$5$l$F$$$^$9$N$G!"$=$N5-;v$,Ej9F$5$l$?$H$3$m$G\e(B 4\e$B7n\e(B1\e$BF|\e(B \e$B$KEj\e(B
+\e$B9F$5$l$?5-;v$K9gCW$9$k;v$KCm0U$7$F$/$@$5$$!#I8=`;~$O0l2H$K$H$C$FHs>o$KM-\e(B
+\e$B1W$J3Z$7$_$G$7$g$&\e(B?)
 
 @item Head, Body All
-\e$B$3$l$i$N\e(B3\e$B$D$N9gCW$N%-!<$O\e(B @code{From} \e$B%X%C%@!<\e(B (\e$B$J$I\e(B) \e$B$HF1$89gCW$N7?$r;H\e(B
-\e$B$$$^$9!#\e(B
+\e$B$3$l$i$N;0$D$N9gCW$N%-!<$O\e(B @code{From} \e$B%X%C%@!<\e(B (\e$B$J$I\e(B) \e$B$HF1$89gCW$N7?$r\e(B
+\e$B;H$$$^$9!#\e(B
 
 @item Followup
 \e$B$3$N9gCW$N%-!<$O>/$7FCJL$G!"$=$l$O\e(B @code{From} \e$B%X%C%@!<$K9gCW$7!"9gCW$7\e(B
 \e$B$?5-;v$@$1$G$J$/$=$N5-;v$X$NA4$F$N%U%)%m!<%"%C%W$N%9%3%"$K$b1F6A$7$^$9!#\e(B
 \e$B$3$l$O$?$H$($P!"$"$J$?<+?H$N5-;v$X$N%U%)%m!<%"%C%W$N%9%3%"$rA}$d$7$?$j!"\e(B
 \e$BNI$/CN$i$l$?LdBj;y$X$N%U%)%m!<%"%C%W5-;v$N%9%3%"$r2<$2$?$j$9$k$N$K;H$o$l\e(B
-\e$B$^$9!#\e(B@code{From} \e$B%X%C%@!<$,;H$&$N$HF1$87?$N9gCW$r;H$$$^$9!#\e(B (\e$B$3$N9gCW%-!<\e(B
+\e$B$^$9!#\e(B@code{From} \e$B%X%C%@!<$,;H$&$N$HF1$87?$N9gCW$r;H$$$^$9!#\e(B(\e$B$3$N9gCW%-!<\e(B
 \e$B$r;H$&$H!"%U%!%$%k\e(B @file{ADAPT} \e$B$r:n$k;v$K$J$j$^$9!#\e(B)
 
 @item Thread
@@ -14218,12 +15222,12 @@ Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O\e(B3\e$B$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j
 @code{Message-ID} @var{x} \e$B$G;O$^$C$F$$$k\e(B (\e$BI{\e(B)\e$B%9%l%C%I$K%9%3%"$rIU$1$?$$\e(B
 \e$B$N$G$"$l$P!"\e(B@samp{thread} \e$B9gCW$rIU$12C$($^$9!#$3$l$O\e(B @code{Reference} \e$B%X%C\e(B
 \e$B%@!<$K\e(B @var{x} \e$B$r;}$D$=$l$>$l$N5-;v$K?7$7$$\e(B @samp{thread} \e$B9gCW$rDI2C$7$^\e(B
-\e$B$9!#\e(B (\e$B$3$l$i$N?7$7$$\e(B @samp{thread} \e$B9gCW$O$3$l$i$N9gCW$9$k5-;v$N\e(B
-@code{Message-ID} \e$B$r;H$$$^$9!#\e(B) \e$B$3$l$O%9%l%C%I$N$$$/$D$+$N5-;v$,40A4$J\e(B
-@code{References} \e$B%X%C%@!<$r;}$C$F$$$J$+$C$?$H$7$F$b!"%9%l%C%IA4BN$N%9%3\e(B
-\e$B%"$r>e$2\e(B/\e$B2<$2$G$-$k;v$rJ]>Z$7$^$9!#$3$l$r;H$&$H!"%9%l%C%I$N5-;v$K7hDjE*\e(B
-\e$B$G$J$$%9%3%"$,IU$/$+$b$7$l$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#\e(B (\e$B$3$N9gCW%-!<\e(B
-\e$B$r;H$&$H!"%U%!%$%k\e(B @file{ADAPT} \e$B$r:n$k;v$K$J$j$^$9!#\e(B)
+\e$B$9!#\e(B(\e$B$3$l$i$N?7$7$$\e(B @samp{thread} \e$B9gCW$O$3$l$i$N9gCW$9$k5-;v\e(B
+\e$B$N\e(B @code{Message-ID} \e$B$r;H$$$^$9!#\e(B) \e$B$3$l$O%9%l%C%I$N$$$/$D$+$N5-;v$,40A4\e(B
+\e$B$J\e(B @code{References} \e$B%X%C%@!<$r;}$C$F$$$J$+$C$?$H$7$F$b!"%9%l%C%IA4BN$N\e(B
+\e$B%9%3%"$r>e$2\e(B/\e$B2<$2$G$-$k;v$rJ]>Z$7$^$9!#$3$l$r;H$&$H!"%9%l%C%I$N5-;v$K7h\e(B
+\e$BDjE*$G$J$$%9%3%"$,IU$/$+$b$7$l$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#\e(B(\e$B$3$N9g\e(B
+\e$BCW%-!<$r;H$&$H!"%U%!%$%k\e(B @file{ADAPT} \e$B$r:n$k;v$K$J$j$^$9!#\e(B)
 @end table
 @end enumerate
 
@@ -14252,8 +15256,9 @@ Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O\e(B3\e$B$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j
 \e$B$9!#\e(B
 
 @item exclude-files
-\e$B$3$NEPO?$N<j$,$+$j$OG$0U$N?t$N%U%!%$%kL>$G$"$k$Y$-$G$9!#$3$l$i$N%U%!%$%k$O2?\e(B
-\e$B$i$+$NM}M3$GIaDL$OFI$_9~$^$l$k$h$&$K$J$C$F$$$?$H$7$F$b!"FI$_9~$^$l$^$;$s!#\e(B
+\e$B$3$NEPO?$N<j$,$+$j$OG$0U$N?t$N%U%!%$%kL>$G$"$k$Y$-$G$9!#$3$l$i$N%U%!%$%k\e(B
+\e$B$O2?$i$+$NM}M3$GIaDL$OFI$_9~$^$l$k$h$&$K$J$C$F$$$?$H$7$F$b!"FI$_9~$^$l$^\e(B
+\e$B$;$s!#\e(B
 
 @item eval
 \e$B$3$NEPO?$NCM$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#$3$NMWAG$OA4BNE*%9%3%"%U%!%$%k$r07$C\e(B
@@ -14268,10 +15273,10 @@ Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O\e(B3\e$B$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j
 @item orphan
 \e$B$3$NEPO?$NCM$O?t;z$G$"$k$Y$-$G$9!#?F5-;v$r;}$?$J$$5-;v$O%9%3%"$K$3$N?t;z\e(B
 \e$B$,2C$($i$l$^$9!#\e(B@samp{comp.lang.c} \e$B$N$h$&$JNL$NB?$$%K%e!<%9%0%k!<%W$rDI\e(B
-\e$B$$$+$1$F$$$k$H$7$F$/$@$5$$!#$*$=$i$/\e(B2,3\e$B$N%9%l%C%I$H?7$7$$%9%l%C%I$@$1$r\e(B
-\e$BDI$$$?$$$G$7$g$&!#\e(B
+\e$B$$$+$1$F$$$k$H$7$F$/$@$5$$!#$*$=$i$/Fs!";0$N%9%l%C%I$H?7$7$$%9%l%C%I$@$1\e(B
+\e$B$rDI$$$?$$$G$7$g$&!#\e(B
 
-\e$B0J2<$N\e(B2\e$B$D$N%9%3%"%U%!%$%kEPO?$K$h$C$F$=$l$r$9$k;v$,$G$-$^$9\e(B:
+\e$B0J2<$N;0$D$N%9%3%"%U%!%$%kEPO?$K$h$C$F$=$l$r$9$k;v$,$G$-$^$9\e(B:
 
 @example
         (orphan -500)
@@ -14283,20 +15288,22 @@ Date (\e$BF|IU\e(B) \e$B%X%C%@!<$K$O\e(B3\e$B$D$N$J$s$H$J$/$P$+$2$F$$$k9gCW$N7?$,$"$j
 \e$B$h$C$F\e(B)\e$B!";D$j$rL5;k\e(B (@kbd{C y}) \e$B$7$^$9!#<!$K%0%k!<%W$KF~$C$?$H$-$O!"$*$b\e(B
 \e$B$7$m$$%9%l%C%I$N?7$7$$5-;v$HA4$/?7$7$$%9%l%C%I$r8+$k;v$K$J$j$^$9!#\e(B
 
-\e$B$9$J$o$A\e(B---orphan (\e$B8I;y\e(B) \e$B%9%3%"%"%H%`$OIaDL$N%9%3%"K!B'$G$OH/8+$G$-$J$$6=L#?<$$%9%l%C%I$,>/$7B8:_$7$9$kNL$NB?$$%0%k!<%W$N$?$a$K$"$j$^$9!#\e(B
+\e$B$9$J$o$A\e(B---orphan (\e$B8I;y\e(B) \e$B%9%3%"%"%H%`$OIaDL$N%9%3%"K!B'$G$OH/8+$G$-$J$$\e(B
+\e$B6=L#?<$$%9%l%C%I$,>/$7B8:_$7$9$kNL$NB?$$%0%k!<%W$N$?$a$K$"$j$^$9!#\e(B
 
 @item adapt
 \e$B$3$NEPO?$OE,1~%9%3%"$r@)8f$7$^$9!#$b$7$3$l$,\e(B @code{t} \e$B$G$"$k$H!"=i4|@_Dj\e(B
 \e$B$NE,1~%9%3%"K!B'$,;H$o$l$^$9!#$b$7$3$l$,\e(B @code{ignore} \e$B$G$"$k$H!"$3$N%0\e(B
 \e$B%k!<%W$K$OE,1~%9%3%"$O<B9T$5$l$^$;$s!#$b$7%j%9%H$G$"$k$H!"$=$N%j%9%H$OE,\e(B
-\e$B1~%9%3%"K!B'$H$7$FMQ$$$i$l$^$9!#$b$7$=$l$,B8:_$7$J$$$+!"\e(B@code{t} \e$B$d\e(B
-@code{ignore} \e$B$G$J$$B>$N$b$N$G$"$l$P!"=i4|@_Dj$NE,1~%9%3%"K!B'$,;H$o$l$^\e(B
-\e$B$9!#$?$$$F$$$N%0%k!<%W$KE,1~%9%3%"$r;H$$$?$$$N$G$"$l$P!"\e(B
+\e$B1~%9%3%"K!B'$H$7$FMQ$$$i$l$^$9!#$b$7$=$l$,B8:_$7$J$$$+!"\e(B
+@code{t} \e$B$d\e(B @code{ignore} \e$B$G$J$$B>$N$b$N$G$"$l$P!"=i4|@_Dj$NE,1~%9%3%"K!\e(B
+\e$BB'$,;H$o$l$^$9!#$?$$$F$$$N%0%k!<%W$KE,1~%9%3%"$r;H$$$?$$$N$G$"$l$P!"\e(B
 @code{gnus-use-adaptive-scorint} \e$B$r\e(B @code{t} \e$B$K@_Dj$7!"\e(B@code{(adapt
 ignore)} \e$B$rE,1~%9%3%"$r$7$?$/$J$$%0%k!<%W$KA^F~$9$k$G$7$g$&!#>/$7$N%0%k!<\e(B
-\e$B%W$G$@$1E,1~%9%3%"$r9T$$$?$$$N$G$"$l$P!"\e(B@code{gnus-use-adaptive-scoring}
-\e$B$r\e(B @code{nil} \e$B$K@_Dj$7!"\e(B@code{(adaptive t)} \e$B$r$=$l$r9T$$$?$$%0%k!<%W$N%9\e(B
-\e$B%3%"%U%!%$%k$KA^F~$9$k$G$7$g$&!#\e(B
+\e$B%W$G$@$1E,1~%9%3%"$r9T$$$?$$$N$G$"$l$P!"\e(B
+@code{gnus-use-adaptive-scoring} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7!"\e(B
+@code{(adaptive t)} \e$B$r$=$l$r9T$$$?$$%0%k!<%W$N%9%3%"%U%!%$%k$KA^F~$9$k$G\e(B
+\e$B$7$g$&!#\e(B
 
 @item adaptive-file
 \e$BA4$F$NE,1~%9%3%"EPO?$O$3$NEPO?$K$h$C$FL>$E$1$i$l$?%U%!%$%k$KF~$j$^$9!#$=\e(B
@@ -14306,14 +15313,13 @@ ignore)} \e$B$rE,1~%9%3%"$r$7$?$/$J$$%0%k!<%W$KA^F~$9$k$G$7$g$&!#>/$7$N%0%k!<\e(B
 
 @item local
 @cindex local variables
-\e$B$3$NEPO?$NCM$O\e(B @code{(VAR VALUE)} \e$BBP$N%j%9%H$G$"$k$Y$-$G$9!#$=$l$>$l$N\e(B
-@var{var} \e$B$O8=:_$N35N,%P%C%U%!$N%P%C%U%!8GM-$K$J$j!";XDj$5$l$?CM\e(B (value)
-\e$B$K@_Dj$5$l$^$9!#$3$l$OJXMx$J!"$b$7>/$7JQ$@$H$7$F$b!"%U%C%/$r$"$^$j9%$^$J\e(B
-\e$B$$$$$/$D$+$N%0%k!<%W$GJQ?t$r@_Dj$9$kJ}K!$G$9!#\e(B@var{value} \e$B$OI>2A$5$l$J$$\e(B
-\e$B;v$KCm0U$7$F$/$@$5$$!#\e(B
+\e$B$3$NEPO?$NCM$O\e(B @code{(VAR VALUE)} \e$BBP$N%j%9%H$G$"$k$Y$-$G$9!#$=$l$>$l\e(B
+\e$B$N\e(B @var{var} \e$B$O8=:_$N35N,%P%C%U%!$N%P%C%U%!8GM-$K$J$j!";XDj$5$l$?\e(B
+\e$BCM\e(B (value) \e$B$K@_Dj$5$l$^$9!#$3$l$OJXMx$J!"$b$7>/$7JQ$@$H$7$F$b!"%U%C%/$r\e(B
+\e$B$"$^$j9%$^$J$$$$$/$D$+$N%0%k!<%W$GJQ?t$r@_Dj$9$kJ}K!$G$9!#\e(B@var{value} \e$B$O\e(B
+\e$BI>2A$5$l$J$$;v$KCm0U$7$F$/$@$5$$!#\e(B
 @end table
 
-
 @node Score File Editing
 @section \e$B%9%3%"%U%!%$%kJT=8\e(B
 
@@ -14328,8 +15334,8 @@ ignore)} \e$B$rE,1~%9%3%"$r$7$?$/$J$$%0%k!<%W$KA^F~$9$k$G$7$g$&!#>/$7$N%0%k!<\e(B
 @item C-c C-c
 @kindex C-c C-c (\e$B%9%3%"\e(B)
 @findex gnus-score-edit-done
-\e$B$"$J$?$,9T$C$?JQ99$rJ]B8$7$F35N,%P%C%U%!$KLa$j$^$9\e(B
-(@code{gnus-score-edit-done})\e$B!#\e(B
+\e$B$"$J$?$,9T$C$?JQ99$rJ]B8$7$F35N,%P%C%U%!$KLa$j$^\e(B
+\e$B$9\e(B (@code{gnus-score-edit-done})\e$B!#\e(B
 
 @item C-c C-d
 @kindex C-c C-d (\e$B%9%3%"\e(B)
@@ -14356,7 +15362,6 @@ ignore)} \e$B$rE,1~%9%3%"$r$7$?$/$J$$%0%k!<%W$KA^F~$9$k$G$7$g$&!#>/$7$N%0%k!<\e(B
 \e$B35N,%P%C%U%!$G$O!"\e(B@kbd{V f} \e$B$d\e(B @kbd{V e} \e$B$N$h$&$JL?Na$G%9%3%"%U%!%$%k$N\e(B
 \e$BJT=8$r;O$a$k;v$,$G$-$^$9!#\e(B
 
-
 @node Adaptive Scoring
 @section \e$BE,1~@-%9%3%"\e(B
 @cindex adaptive scoring
@@ -14367,110 +15372,101 @@ gnus \e$B$K$O$3$l$i$rA4$F<+F0E*$K\e(B --- \e$B$^$k$GKbK!$G$b;H$C$?$h$&$K:n@.\e(B
 \e$B$+$J!#\e(B
 
 @vindex gnus-use-adaptive-scoring
-\e$B5-;v$rFI$s$@$H$-!"$"$k$$$O5-;v$K4{FI$N0u$r$D$1$?$H$-!"5-;v$r:o=|\e(B
-\e$B$7$?$H$-$K!"$=$N0u$r;D$7$F$*$$$F$/$@$5$$!#%0%k!<%W$+$i=P$k$H$-$K\e(B
-gnus \e$B$O!"$=$l$i$N0u$NJU$j$rSL$.2s$j!"2?$N0u$r8+$D$1$?$+$K0MB8$7\e(B
-\e$B$F%9%3%"MWAG$rDI2C$7$^$9!#$3$N5!G=$O\e(B
-@code{gnus-use-adaptive-scoring} \e$B$r\e(B @code{t} \e$B$+\e(B @code{(line)} \e$B$K\e(B
-\e$B@_Dj$9$k$3$H$GM-8z$K$J$j$^$9!#$b$7%9%3%"$r!"I=Bj$K8=$l$k8DJL$NC1\e(B
-\e$B8l$r$b$H$KE,1~$5$;$?$1$l$P!"$3$NJQ?t$r\e(B @code{(word)} \e$B$K@_Dj$7$F\e(B
-\e$B$/$@$5$$!#N>J}$NE,1~J}K!$r;H$$$?$1$l$P!"$3$NJQ?t$r\e(B@code{(word
-line)} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+\e$B5-;v$rFI$s$@$H$-!"$"$k$$$O5-;v$K4{FI$N0u$r$D$1$?$H$-!"5-;v$r:o=|$7$?$H$-\e(B
+\e$B$K!"$=$N0u$r;D$7$F$*$$$F$/$@$5$$!#%0%k!<%W$+$i=P$k$H$-$K\e(Bgnus \e$B$O!"$=$l$i\e(B
+\e$B$N0u$NJU$j$rSL$.2s$j!"2?$N0u$r8+$D$1$?$+$K0MB8$7$F%9%3%"MWAG$rDI2C$7$^$9!#\e(B
+\e$B$3$N5!G=\e(B
+\e$B$O\e(B @code{gnus-use-adaptive-scoring} \e$B$r\e(B @code{t} \e$B$+\e(B @code{(line)} \e$B$K@_Dj\e(B
+\e$B$9$k$3$H$GM-8z$K$J$j$^$9!#$b$7%9%3%"$r!"I=Bj$K8=$l$k8DJL$NC18l$r$b$H$KE,\e(B
+\e$B1~$5$;$?$1$l$P!"$3$NJQ?t$r\e(B @code{(word)} \e$B$K@_Dj$7$F$/$@$5$$!#N>J}$NE,1~\e(B
+\e$BJ}K!$r;H$$$?$1$l$P!"$3$NJQ?t$r\e(B@code{(wordline)} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
 
 @vindex gnus-default-adaptive-score-alist
-@code{gnus-default-adaptive-score-alist} \e$BJQ?t$r%+%9%?%^%$%:$9$k\e(B
-\e$B$3$H$G!"%9%3%"IU$1$N=hM}$r40A4$K@)8f$G$-$^$9!#Nc$($P!"$3$N$h$&$J\e(B
-\e$B46$8$K$J$j$^$9!#\e(B
+@code{gnus-default-adaptive-score-alist} \e$BJQ?t$r%+%9%?%^%$%:$9$k$3$H$G!"\e(B
+\e$B%9%3%"IU$1$N=hM}$r40A4$K@)8f$G$-$^$9!#Nc$($P!"$3$N$h$&$J46$8$K$J$j$^$9!#\e(B
 
 @lisp
-(defvar gnus-default-adaptive-score-alist
-  '((gnus-unread-mark)
-    (gnus-ticked-mark (from 4))
-    (gnus-dormant-mark (from 5))
-    (gnus-del-mark (from -4) (subject -1))
-    (gnus-read-mark (from 4) (subject 2))
-    (gnus-expirable-mark (from -1) (subject -1))
-    (gnus-killed-mark (from -1) (subject -3))
-    (gnus-kill-file-mark)
-    (gnus-ancient-mark)
-    (gnus-low-score-mark)
-    (gnus-catchup-mark (from -1) (subject -1))))
+(setq gnus-default-adaptive-score-alist
+      '((gnus-unread-mark)
+       (gnus-ticked-mark (from 4))
+       (gnus-dormant-mark (from 5))
+       (gnus-del-mark (from -4) (subject -1))
+       (gnus-read-mark (from 4) (subject 2))
+       (gnus-expirable-mark (from -1) (subject -1))
+       (gnus-killed-mark (from -1) (subject -3))
+       (gnus-kill-file-mark)
+       (gnus-ancient-mark)
+       (gnus-low-score-mark)
+       (gnus-catchup-mark (from -1) (subject -1))))
 @end lisp
 
-\e$B8+$F$*J,$+$j$N$h$&$K!"$3$NO"A[%j%9%H$N3FMWAG$O!"%-!<$H$7$F0u\e(B (\e$BJQ\e(B
-\e$B?tL>$+$b$7$/$O\e(B ``\e$BK\Ev$N\e(B'' \e$B0u\e(B --- \e$B$D$^$jJ8;z\e(B)\e$B$r;}$A$^$9!#$3$N%-!<\e(B
-\e$B$N8e$K$OG$0U$N?t$N%X%C%@!<\e(B/\e$B%9%3%"$NAH$,B3$-$^$9!#$b$7$=$N%-!<$N\e(B
-\e$B8e$K%X%C%@!<\e(B/\e$B%9%3%"$NAH$,0l$D$b$J$1$l$P!"$=$N%-!<$,5-;v$N0u$H$7\e(B
-\e$B$F$D$$$F$$$k5-;v$KBP$7$F$OE,1~@-%9%3%"$O<B9T$5$l$^$;$s!#Nc$($P>e\e(B
-\e$B5-$NNc$G$O!"\e(B@code{gnus-unread-mark} \e$B$,$D$$$F$$$k5-;v$OE,1~@-%9%3\e(B
-\e$B%"$NEPO?9`L\$K$O$J$j$^$;$s!#\e(B
-
-\e$B3F5-;v$O$?$@0l$D$N0u$7$+;}$AF@$J$$$N$G!"$=$l$>$l$N5-;v$K$O$3$l$i\e(B
-\e$B$N5,B'$N$&$A$?$@0l$D$7$+E,MQ$5$l$^$;$s!#\e(B
-
-@code{gnus-del-mark} \e$B$rNc$K<h$j$^$7$g$&\e(B --- \e$B$3$NO"A[%j%9%H$G$N0U\e(B
-\e$BL#$O!"$3$N0u\e(B (\e$B$9$J$o$A\e(B @samp{D} \e$B$N0u\e(B)\e$B$,$D$$$F$$$k5-;v$OA4$F!"\e(B
-@code{From} \e$B%X%C%@!<$r$b$H$K\e(B -4 \e$B2<$2$i$l\e(B @code{Subject} \e$B$G\e(B -1 \e$B2<\e(B
-\e$B$2$i$l$k%9%3%"EPO?$,DI2C$5$l$^$9!#$3$l$r$"$J$?$NJP8+$K9g$o$;$FJQ\e(B
-\e$B99$7$F$/$@$5$$!#\e(B
-
-\e$B$b$7\e(B 10 \e$B8D$N5-;v$KF1$8\e(B subject \e$B$G\e(B @code{gnus-del-mark} \e$B$N0u$,$D\e(B
-\e$B$$$F$$$?$H$9$k$H!"$3$N0u$KBP$9$k5,B'$O==2sE,MQ$5$l$^$9!#$=$l$O$D\e(B
-\e$B$^$j!"$=$N\e(B subject \e$B$O\e(B -1 \e$B$N==G\$N%9%3%"$rF@$^$9!#$=$NCM$O!";d$,\e(B
-\e$BBg$-$/8m2r$7$F$$$J$$$+$.$j!"\e(B-10 \e$B$N$O$:$G$9!#\e(B
-
-\e$B$b$7<+F04|8B@Z$l>C5n\e(B (\e$B%a!<%k\e(B) \e$B%0%k!<%W\e(B (@pxref{Expiring Mail})
-\e$B$,$"$l$P!"4{FI5-;v$K$OA4$F\e(B @samp{E} \e$B0u$,$D$1$i$l$^$9!#$3$l$O$*$=\e(B
-\e$B$i$/!"E,1~@-%9%3%"IU$1$r$A$g$C$H$P$+$jIT2DG=$K$9$k$N$G!"<+F04|8B\e(B
-\e$B@Z$l>C5n$HE,1~@-%9%3%"$O0l=o$K$O$&$^$/$d$C$F$$$1$^$;$s!#\e(B
-
-\e$B%9%3%"$r$D$1$i$l$k%X%C%@!<$K$O\e(B @code{from}\e$B!"\e(B @code{subject}\e$B!"\e(B
-@code{message-id}\e$B!"\e(B @code{references}\e$B!"\e(B @code{xref}\e$B!"\e(B
-@code{lines}\e$B!"\e(B@code{chars}\e$B!"\e(B@code{date} \e$B$,$"$j$^$9!#$5$i$K\e(B
-@code{followup} \e$B$K$b%9%3%"IU$1$G$-$^$9!#$3$l$O8=:_$N5-;v$N\e(B
-@code{Message-ID} \e$B$r;HMQ$7$F\e(B @code{References} \e$B%X%C%@!<$K%^%C%A!"\e(B
-\e$B$9$J$o$A$3$l$KB3$$$?%9%l%C%I$K%^%C%A$9$kE,1~@-%9%3%"EPO?$r:n@.$7\e(B
-\e$B$^$9!#\e(B
-
-\e$B$^$?\e(B @code{thread} \e$B$K$b%9%3%"IU$1$9$k$3$H$,$G$-$^$9!#$3$l$O%9%l%C\e(B
-\e$B%ICf$NA4$F$N5-;v$K%9%3%"IU$1$7$h$&$H$7$^$9!#\e(B@code{thread} \e$B$N%^%C\e(B
-\e$B%A$O!"\e(B@code{Message-ID} \e$B$r;H$C$F5-;v$N\e(B @code{References} \e$B%X%C%@!<\e(B
-\e$B$K%^%C%A$5$;$^$9!#%^%C%A$,5/$3$C$?$i$=$N5-;v$N\e(B @code{Message-ID}
-\e$B$,\e(B @code{thread} \e$B5,B'$KDI2C$5$l$^$9!#\e(B(\e$B$A$g$C$H9M$($F$_$F$/$@$5$$!#\e(B
-\e$B8e$GF,DKLt$rFsN3$*4+$a$7$H$-$^$9$,\e(B)
-
-\e$B$3$N5!9=$r;H$&$J$i$P!"$H$-$I$-5-;v$r4{FI$K$7$F$7$^$&>.$5$JJQ99$r\e(B
-\e$BHr$1$k$?$a$K!"%9%3%"%U%!%$%k$N\e(B @code{mark} \e$B%"%H%`$r2?$+>.$5$$CM\e(B
---- \e$B$3$H$K$h$l$P\e(B -300 \e$B$/$i$$$K@_Dj$7$F$*$$$?J}$,NI$$$G$9!#\e(B
-
-\e$BE,1~@-%9%3%"$r0l=54V$+$=$3$i;H$C$F$/$k$H!"\e(Bgnus \e$B$O$=$lAj1~$KD465\e(B
-\e$B$5$l!"$"$J$?$,2?$b8@$o$J$/$F$b!"$"$J$?$N9%$-$JEj9F<T$r6/D4$7!"$"\e(B
-\e$B$^$j9%$-$G$O$J$$Ej9F<T$r>C5n$9$k$h$&$K$J$k$O$:$G$9!#\e(B
-
-\e$B$I$N%0%k!<%W$K$*$$$FE,1~@-%9%3%"$r:nF0$5$;$k$+$O!"%9%3%"%U%!%$%k\e(B
-(@pxref{Score File Format}) \e$B$r;H$&$3$H$K$h$C$F@)8f$G$-$^$9!#$^$?\e(B
-\e$B$3$l$r;H$C$F!"0c$C$?%0%k!<%W$KBP$7$F0c$C$?5,B'$r;H$&$h$&$K$b$G$-\e(B
-\e$B$^$9!#\e(B
+\e$B8+$F$*J,$+$j$N$h$&$K!"$3$NO"A[%j%9%H$N3FMWAG$O!"%-!<$H$7$F0u\e(B (\e$BJQ?tL>$+$b\e(B
+\e$B$7$/$O\e(B ``\e$BK\Ev$N\e(B'' \e$B0u\e(B --- \e$B$D$^$jJ8;z\e(B)\e$B$r;}$A$^$9!#$3$N%-!<$N8e$K$OG$0U$N?t\e(B
+\e$B$N%X%C%@!<\e(B/\e$B%9%3%"$NAH$,B3$-$^$9!#$b$7$=$N%-!<$N8e$K%X%C%@!<\e(B/\e$B%9%3%"$NAH$,\e(B
+\e$B0l$D$b$J$1$l$P!"$=$N%-!<$,5-;v$N0u$H$7$F$D$$$F$$$k5-;v$KBP$7$F$OE,1~@-%9\e(B
+\e$B%3%"$O<B9T$5$l$^$;$s!#Nc$($P>e5-$NNc$G$O!"\e(B@code{gnus-unread-mark} \e$B$,$D$$\e(B
+\e$B$F$$$k5-;v$OE,1~@-%9%3%"$NEPO?9`L\$K$O$J$j$^$;$s!#\e(B
+
+\e$B3F5-;v$O$?$@0l$D$N0u$7$+;}$AF@$J$$$N$G!"$=$l$>$l$N5-;v$K$O$3$l$i$N5,B'$N\e(B
+\e$B$&$A$?$@0l$D$7$+E,MQ$5$l$^$;$s!#\e(B
+
+@code{gnus-del-mark} \e$B$rNc$K<h$j$^$7$g$&\e(B --- \e$B$3$NO"A[%j%9%H$G$N0UL#$O!"$3\e(B
+\e$B$N0u\e(B (\e$B$9$J$o$A\e(B @samp{D} \e$B$N0u\e(B)\e$B$,$D$$$F$$$k5-;v$OA4$F!"\e(B@code{From} \e$B%X%C%@!<\e(B
+\e$B$r$b$H$K\e(B -4 \e$B2<$2$i$l\e(B @code{Subject} \e$B$G\e(B -1 \e$B2<$2$i$l$k%9%3%"EPO?$,DI2C$5$l\e(B
+\e$B$^$9!#$3$l$r$"$J$?$NJP8+$K9g$o$;$FJQ99$7$F$/$@$5$$!#\e(B
+
+\e$B$b$7\e(B 10 \e$B8D$N5-;v$KF1$8\e(B subject \e$B$G\e(B @code{gnus-del-mark} \e$B$N0u$,$D$$$F$$$?\e(B
+\e$B$H$9$k$H!"$3$N0u$KBP$9$k5,B'$O==2sE,MQ$5$l$^$9!#$=$l$O$D$^$j!"$=\e(B
+\e$B$N\e(B subject \e$B$O\e(B -1 \e$B$N==G\$N%9%3%"$rF@$^$9!#$=$NCM$O!";d$,Bg$-$/8m2r$7$F$$\e(B
+\e$B$J$$$+$.$j!"\e(B-10 \e$B$N$O$:$G$9!#\e(B
+
+\e$B$b$7<+F04|8B@Z$l>C5n\e(B (\e$B%a!<%k\e(B) \e$B%0%k!<%W\e(B (@pxref{Expiring Mail})\e$B$,$"$l$P!"\e(B
+\e$B4{FI5-;v$K$OA4$F\e(B @samp{E} \e$B0u$,$D$1$i$l$^$9!#$3$l$O$*$=$i$/!"E,1~@-%9%3%"\e(B
+\e$BIU$1$r$A$g$C$H$P$+$jIT2DG=$K$9$k$N$G!"<+F04|8B@Z$l>C5n$HE,1~@-%9%3%"$O0l\e(B
+\e$B=o$K$O$&$^$/$d$C$F$$$1$^$;$s!#\e(B
+
+\e$B%9%3%"$r$D$1$i$l$k%X%C%@!<$K\e(B
+\e$B$O\e(B @code{from}, @code{subject}, @code{message-id}, @code{references}, @code{xref}, @code{lines}, @code{chars}, @code{date} \e$B$,\e(B
+\e$B$"$j$^$9!#$5$i$K\e(B @code{followup} \e$B$K$b%9%3%"IU$1$G$-$^$9!#$3$l$O8=:_$N5-\e(B
+\e$B;v$N\e(B @code{Message-ID} \e$B$r;HMQ$7$F\e(B @code{References} \e$B%X%C%@!<$K%^%C%A!"$9\e(B
+\e$B$J$o$A$3$l$KB3$$$?%9%l%C%I$K%^%C%A$9$kE,1~@-%9%3%"EPO?$r:n@.$7$^$9!#\e(B
+
+\e$B$^$?\e(B @code{thread} \e$B$K$b%9%3%"IU$1$9$k$3$H$,$G$-$^$9!#$3$l$O%9%l%C%ICf$N\e(B
+\e$BA4$F$N5-;v$K%9%3%"IU$1$7$h$&$H$7$^$9!#\e(B@code{thread} \e$B$N%^%C%A$O!"\e(B
+@code{Message-ID} \e$B$r;H$C$F5-;v$N\e(B @code{References} \e$B%X%C%@!<$K%^%C%A$5$;\e(B
+\e$B$^$9!#%^%C%A$,5/$3$C$?$i$=$N5-;v$N\e(B @code{Message-ID} \e$B$,\e(B @code{thread} \e$B5,\e(B
+\e$BB'$KDI2C$5$l$^$9!#\e(B(\e$B$A$g$C$H9M$($F$_$F$/$@$5$$!#8e$GF,DKLt$rFsN3$*4+$a$7\e(B
+\e$B$H$-$^$9$,\e(B)
+
+\e$B$3$N5!9=$r;H$&$J$i$P!"$H$-$I$-5-;v$r4{FI$K$7$F$7$^$&>.$5$JJQ99$rHr$1$k$?\e(B
+\e$B$a$K!"%9%3%"%U%!%$%k$N\e(B @code{mark} \e$B%"%H%`$r2?$+>.$5$$CM\e(B --- \e$B$3$H$K$h$l\e(B
+\e$B$P\e(B -300 \e$B$/$i$$$K@_Dj$7$F$*$$$?J}$,NI$$$G$9!#\e(B
+
+\e$BE,1~@-%9%3%"$r0l=54V$+$=$3$i;H$C$F$/$k$H!"\e(Bgnus \e$B$O$=$lAj1~$KD465$5$l!"$"\e(B
+\e$B$J$?$,2?$b8@$o$J$/$F$b!"$"$J$?$N9%$-$JEj9F<T$r6/D4$7!"$"$^$j9%$-$G$O$J$$\e(B
+\e$BEj9F<T$r>C5n$9$k$h$&$K$J$k$O$:$G$9!#\e(B
+
+\e$B$I$N%0%k!<%W$K$*$$$FE,1~@-%9%3%"$r:nF0$5$;$k$+$O!"%9%3%"%U%!%$\e(B
+\e$B%k\e(B (@pxref{Score File Format}) \e$B$r;H$&$3$H$K$h$C$F@)8f$G$-$^$9!#$^$?$3$l\e(B
+\e$B$r;H$C$F!"0c$C$?%0%k!<%W$KBP$7$F0c$C$?5,B'$r;H$&$h$&$K$b$G$-$^$9!#\e(B
 
 @vindex gnus-adaptive-file-suffix
-\e$BE,1~@-%9%3%"EPO?9`L\$O!"%0%k!<%WL>$K\e(B
-@code{gnus-adaptive-file-suffix} \e$B$rIU2C$7$?L>A0$N%U%!%$%k$KF~$l\e(B
-\e$B$i$l$^$9!#=i4|@_DjCM$O\e(B @samp{ADAPT} \e$B$G$9!#\e(B
+\e$BE,1~@-%9%3%"EPO?9`L\$O!"%0%k!<%WL>$K\e(B @code{gnus-adaptive-file-suffix} \e$B$r\e(B
+\e$BIU2C$7$?L>A0$N%U%!%$%k$KF~$l$i$l$^$9!#=i4|@_DjCM$O\e(B @samp{ADAPT} \e$B$G$9!#\e(B
 
 @vindex gnus-score-exact-adapt-limit
-\e$BE,1~@-%9%3%"$r9T$&$H$-$O!"ItJ,J8;zNs0lCW$d%U%!%8!<$J0lCW$r9T$C$?\e(B
-\e$BJ}$,!"$*$=$i$/$[$H$s$I$N>l9g$K$*$$$FNI$$7k2L$,F@$i$l$k$G$7$g$&!#\e(B
-\e$B$7$+$7!"%X%C%@!<$N0lCW$7$?ItJ,$,C;$$>l9g!"0U?^$KH?$9$k$h$&$JF0:n\e(B
-\e$B$r$9$k2DG=@-$,Bg$-$/$J$k$N$G!"\e(B
-@code{gnus-score-exact-adapt-limit} \e$B$h$jC;$$D9$5$7$+0lCW$7$J$$>l\e(B
-\e$B9g$O40A40lCW$,9T$o$l$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$P!"$3$NLd\e(B
-\e$BBj$,5/$3$i$J$$$h$&$K>o$K40A40lCW$,9T$o$l$^$9!#\e(B
+\e$BE,1~@-%9%3%"$r9T$&$H$-$O!"ItJ,J8;zNs0lCW$d%U%!%8!<$J0lCW$r9T$C$?J}$,!"$*\e(B
+\e$B$=$i$/$[$H$s$I$N>l9g$K$*$$$FNI$$7k2L$,F@$i$l$k$G$7$g$&!#$7$+$7!"%X%C%@!<\e(B
+\e$B$N0lCW$7$?ItJ,$,C;$$>l9g!"0U?^$KH?$9$k$h$&$JF0:n$r$9$k2DG=@-$,Bg$-$/$J$k\e(B
+\e$B$N$G!"\e(B@code{gnus-score-exact-adapt-limit} \e$B$h$jC;$$D9$5$7$+0lCW$7$J$$>l9g\e(B
+\e$B$O40A40lCW$,9T$o$l$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$P!"$3$NLdBj$,5/$3$i\e(B
+\e$B$J$$$h$&$K>o$K40A40lCW$,9T$o$l$^$9!#\e(B
 
 @vindex gnus-default-adaptive-word-score-alist
-\e$B>e$G=R$Y$?$h$&$K!"8DJL$NC18l$KBP$7$F$b%X%C%@!<A4BN$KBP$7$F$bE,1~\e(B
-\e$B$r9T$&$3$H$,$G$-$^$9!#C18l$KBP$7$FE,1~$r9T$C$?>l9g!"\e(B
-@code{gnus-default-adaptive-word-score-alist} \e$BJQ?t$K$h$C$F!"3FC1\e(B
-\e$B8l$KBP$7$F$"$k0u$X$I$s$J%9%3%"$rM?$($k$+$r;XDj$7$^$9!#\e(B
+\e$B>e$G=R$Y$?$h$&$K!"8DJL$NC18l$KBP$7$F$b%X%C%@!<A4BN$KBP$7$F$bE,1~$r9T$&$3\e(B
+\e$B$H$,$G$-$^$9!#C18l$KBP$7$FE,1~$r9T$C$?>l9g!"\e(B
+@code{gnus-default-adaptive-word-score-alist} \e$BJQ?t$K$h$C$F!"3FC18l$KBP$7\e(B
+\e$B$F$"$k0u$X$I$s$J%9%3%"$rM?$($k$+$r;XDj$7$^$9!#\e(B
 
 @lisp
 (setq gnus-default-adaptive-word-score-alist
@@ -14481,24 +15477,24 @@ line)} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
 @end lisp
 
 \e$B$3$l$,=i4|@_DjCM$G$9!#C18l$KBP$9$kE,1~$rM-8z$K$9$k$H!"\e(B
-@code{gnus-read-mark} \e$B$N0u$N$D$$$?5-;v$NI=Bj$K8=$l$kA4$F$NC18l$,!"\e(B
-\e$B%9%3%"$K\e(B 30 \e$BE@DI2C$9$k$H$$$&%9%3%"5,B'$r@8$_=P$7$^$9!#\e(B
+@code{gnus-read-mark} \e$B$N0u$N$D$$$?5-;v$NI=Bj$K8=$l$kA4$F$NC18l$,!"%9%3%"\e(B
+\e$B$K\e(B 30 \e$BE@DI2C$9$k$H$$$&%9%3%"5,B'$r@8$_=P$7$^$9!#\e(B
 
 @vindex gnus-default-ignored-adaptive-words
 @vindex gnus-ignored-adaptive-words
-@code{gnus-default-ignored-adaptive-words} \e$B$N%j%9%H$K8=$l$kC18l\e(B
-\e$B$OL5;k$5$l$^$9!#L5;k$7$?$$C18l$rDI2C$7$?$$$H$-$O!"$3$NJQ?t$G$O$J\e(B
+@code{gnus-default-ignored-adaptive-words} \e$B$N%j%9%H$K8=$l$kC18l$OL5;k$5\e(B
+\e$B$l$^$9!#L5;k$7$?$$C18l$rDI2C$7$?$$$H$-$O!"$3$NJQ?t$G$O$J\e(B
 \e$B$/\e(B @code{gnus-ignored-adaptive-words} \e$B%j%9%H$NJ}$r;H$C$F$/$@$5$$!#\e(B
 
 @vindex gnus-adaptive-word-syntax-table
-\e$B%9%3%"IU$1$,=*N;$7$?$H$-!"\e(B@code{gnus-adaptive-word-syntax-table}
-\e$B$NJ8K!I=$,$=$N1F6A$r<u$1$^$9!#$3$l$OI8=`$NJ8K!I=$H;w$F$$$^$9$,!"\e(B
-\e$BC18l$N9=@.MWAG$H$J$i$J$$J8;z$N?t$b9MN8$7$^$9!#\e(B
+\e$B%9%3%"IU$1$,=*N;$7$?$H$-!"\e(B@code{gnus-adaptive-word-syntax-table} \e$B$NJ8K!\e(B
+\e$BI=$,$=$N1F6A$r<u$1$^$9!#$3$l$OI8=`$NJ8K!I=$H;w$F$$$^$9$,!"C18l$N9=@.MWAG\e(B
+\e$B$H$J$i$J$$J8;z$N?t$b9MN8$7$^$9!#\e(B
 
 @vindex gnus-adaptive-word-minimum
-\e$B$b$7\e(B @code{gnus-adaptive-word-minimum} \e$B$K?t;z$,@_Dj$5$l$F$$$k$H!"\e(B
-\e$BC18lE,1~@-%9%3%"IU$1=hM}$K$*$$$F!"5-;v$N%9%3%"$,$3$N?t;z$h$j$b>.\e(B
-\e$B$5$/$J$k$3$H$O$"$j$^$;$s!#=i4|@_DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
+\e$B$b$7\e(B @code{gnus-adaptive-word-minimum} \e$B$K?t;z$,@_Dj$5$l$F$$$k$H!"C18lE,\e(B
+\e$B1~@-%9%3%"IU$1=hM}$K$*$$$F!"5-;v$N%9%3%"$,$3$N?t;z$h$j$b>.$5$/$J$k$3$H$O\e(B
+\e$B$"$j$^$;$s!#=i4|@_DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
 
 @vindex gnus-adaptive-word-no-group-words
 @code{gnus-acaptive-word-no-group-words} \e$B$,\e(B @code{t} \e$B$K@_Dj$5$l$F$$$k$H!"\e(B
@@ -14506,44 +15502,41 @@ gnus \e$B$O%0%k!<%WL>$NA4$F$N8l$K$D$$$F!"C18lE,1~@-%9%3%"$r$7$^$;$s!#$[$H$s\e(B
 \e$B$I$NI=Bj$,\e(B @samp{emacs} \e$B$H$$$&8l$r4^$s$G$$$k\e(B @samp{comp.editor.emacs} \e$B$N\e(B
 \e$B$h$&$J%0%k!<%W$GJXMx$G$9!#\e(B
 
-\e$B$3$N5!9=$r$7$P$i$/;H$C$F$_$?8e$K$O!"$"$J$?$,$I$s$JC18l$,9%$-$G\e(B
-\e$B$I$s$JC18l$,7y$$$+$r!"$3$N5,B'$rDL$7$F?GCG$9$kMxMQ<T@:?@J,@OL?Na\e(B
-@code{gnus-psychoanalyze-user} \e$B$r=q$$$F$_$k$HNI$$$+$b$7$l$^$;$s!#\e(B
-\e$B$$$d!"NI$/$J$$$+$J!#\e(B
-
-\e$BC18lE,1~@-%9%3%"IU$1$OHs>o$K<B83E*$J$b$N$G$"$C$F!":#8eJQ99$5$l$k\e(B
-\e$B$G$"$m$&$H$$$&$3$H$O?4$KN1$a$F$*$$$F$/$@$5$$!#Bh0l0u>]$G$O!"$3$l\e(B
-\e$B$O8=>u$G$OA4$/;H$$J*$K$J$i$J$$$h$&$K;W$($^$9!#$3$l$r$b$C$H;H$($k\e(B
-\e$B$h$&$K$9$k$?$a$K$O!"\e(B(\e$B$h$j87L)$JE}7WE*<jK!$r4,$-E:$($K$7$F\e(B) \e$B$5$i\e(B
-\e$B$J$k:n6H$,I,MW$H$J$k$G$7$g$&!#\e(B
+\e$B$3$N5!9=$r$7$P$i$/;H$C$F$_$?8e$K$O!"$"$J$?$,$I$s$JC18l$,9%$-$G$I$s$JC18l\e(B
+\e$B$,7y$$$+$r!"$3$N5,B'$rDL$7$F?GCG$9$kMxMQ<T@:?@J,@OL?\e(B
+\e$BNa\e(B @code{gnus-psychoanalyze-user} \e$B$r=q$$$F$_$k$HNI$$$+$b$7$l$^$;$s!#$$$d!"\e(B
+\e$BNI$/$J$$$+$J!#\e(B
 
+\e$BC18lE,1~@-%9%3%"IU$1$OHs>o$K<B83E*$J$b$N$G$"$C$F!":#8eJQ99$5$l$k$G$"$m$&\e(B
+\e$B$H$$$&$3$H$O?4$KN1$a$F$*$$$F$/$@$5$$!#Bh0l0u>]$G$O!"$3$l$O8=>u$G$OA4$/;H\e(B
+\e$B$$J*$K$J$i$J$$$h$&$K;W$($^$9!#$3$l$r$b$C$H;H$($k$h$&$K$9$k$?$a$K$O!"\e(B(\e$B$h\e(B
+\e$B$j87L)$JE}7WE*<jK!$r4,$-E:$($K$7$F\e(B) \e$B$5$i$J$k:n6H$,I,MW$H$J$k$G$7$g$&!#\e(B
 
 @node Home Score File
 @section \e$B%[!<%`%9%3%"%U%!%$%k\e(B
 
-\e$B?7$7$$%9%3%"%U%!%$%kEPO?9`L\$,F~$l$i$l$k%9%3%"%U%!%$%k$O!"%[!<%`\e(B
-\e$B%9%3%"%U%!%$%k\e(B @dfn{home score file} \e$B$H8F$P$l$^$9!#$3$l$ODL>o\e(B
-(\e$B=i4|@_Dj$G\e(B) \e$B$=$N%0%k!<%WMQ$N%9%3%"%U%!%$%k$K$J$j$^$9!#Nc$($P!"\e(B
-@samp{gnu.emacs.gnus} \e$BMQ$N%[!<%`%9%3%"%U%!%$%k$O\e(B
-@file{gnu.emacs.gnus.SCORE} \e$B$H$J$k$o$1$G$9!#\e(B
+\e$B?7$7$$%9%3%"%U%!%$%kEPO?9`L\$,F~$l$i$l$k%9%3%"%U%!%$%k$O!"%[!<%`%9%3%"%U%!\e(B
+\e$B%$%k\e(B @dfn{home score file} \e$B$H8F$P$l$^$9!#$3$l$ODL>o\e(B (\e$B=i4|@_Dj$G\e(B) \e$B$=$N%0\e(B
+\e$B%k!<%WMQ$N%9%3%"%U%!%$%k$K$J$j$^$9!#Nc$($P!"\e(B@samp{gnu.emacs.gnus} \e$BMQ$N%[!<\e(B
+\e$B%`%9%3%"%U%!%$%k$O\e(B @file{gnu.emacs.gnus.SCORE} \e$B$H$J$k$o$1$G$9!#\e(B
 
-\e$B$7$+$7$J$,$i!"$3$l$O$"$J$?$N$*K>$_$G$O$J$$$+$b$7$l$^$;$s!#$?$/$5\e(B
-\e$B$s$N%0%k!<%W4V$G6&DL$N%[!<%`%9%3%"%U%!%$%k$r6&M-$9$k$HJXMx$J$H$-\e(B
-\e$B$,B?$$$G$7$g$&\e(B --- \e$BNc$($PA4$F$N\e(B @samp{emacs} \e$B%0%k!<%W$GF1$8%[!<\e(B
-\e$B%`%9%3%"%U%!%$%k$r;H$&$3$H$b$G$-$^$9!#\e(B
+\e$B$7$+$7$J$,$i!"$3$l$O$"$J$?$N$*K>$_$G$O$J$$$+$b$7$l$^$;$s!#$?$/$5$s$N%0%k!<\e(B
+\e$B%W4V$G6&DL$N%[!<%`%9%3%"%U%!%$%k$r6&M-$9$k$HJXMx$J$H$-$,B?$$$G$7$g\e(B
+\e$B$&\e(B --- \e$BNc$($PA4$F$N\e(B @samp{emacs} \e$B%0%k!<%W$GF1$8%[!<%`%9%3%"%U%!%$%k$r;H\e(B
+\e$B$&$3$H$b$G$-$^$9!#\e(B
 
 @vindex gnus-home-score-file
-\e$B$3$l$r@)8f$9$kJQ?t$,\e(B @code{gnus-home-score-file} \e$B$G$9!#$3$l$O0J\e(B
-\e$B2<$NCM$r<h$jF@$^$9!#\e(B
+\e$B$3$l$r@)8f$9$kJQ?t$,\e(B @code{gnus-home-score-file} \e$B$G$9!#$3$l$O0J2<$NCM$r\e(B
+\e$B<h$jF@$^$9!#\e(B
 
 @enumerate
 @item
-\e$BJ8;zNs!#$3$N>l9g$3$N%U%!%$%k$,A4$F$N%0%k!<%W$G%[!<%`%9%3%"%U%!%$\e(B
-\e$B%k$H$7$F;HMQ$5$l$^$9!#\e(B
+\e$BJ8;zNs!#$3$N>l9g$3$N%U%!%$%k$,A4$F$N%0%k!<%W$G%[!<%`%9%3%"%U%!%$%k$H$7$F\e(B
+\e$B;HMQ$5$l$^$9!#\e(B
 
 @item
-\e$B4X?t!#$3$N4X?t$N7k2L$,%[!<%`%9%3%"%U%!%$%k$H$7$F;HMQ$5$l$^$9!#$3\e(B
-\e$B$N4X?t$O%0%k!<%W$NL>A0$r0z?t$H$7$F8F$S=P$5$l$^$9!#\e(B
+\e$B4X?t!#$3$N4X?t$N7k2L$,%[!<%`%9%3%"%U%!%$%k$H$7$F;HMQ$5$l$^$9!#$3$N4X?t$O\e(B
+\e$B%0%k!<%W$NL>A0$r0z?t$H$7$F8F$S=P$5$l$^$9!#\e(B
 
 @item
 \e$B%j%9%H!#$3$N%j%9%H$NMWAG$O0J2<$NCM$r<h$jF@$^$9!#\e(B
@@ -14554,29 +15547,29 @@ gnus \e$B$O%0%k!<%WL>$NA4$F$N8l$K$D$$$F!"C18lE,1~@-%9%3%"$r$7$^$;$s!#$[$H$s\e(B
 \e$B$9$l$P!"\e(B@var{file-name} \e$B$,%[!<%`%9%3%"%U%!%$%k$H$7$F;HMQ$5$l$^$9!#\e(B
 
 @item
-\e$B4X?t!#$3$N4X?t$,\e(B @code{nil} \e$B0J30$rJV$;$P!"$=$NJV5QCM$,%[!<%`%9%3\e(B
-\e$B%"%U%!%$%k$H$7$F;HMQ$5$l$^$9!#\e(B
+\e$B4X?t!#$3$N4X?t$,\e(B @code{nil} \e$B0J30$rJV$;$P!"$=$NJV5QCM$,%[!<%`%9%3%"%U%!%$\e(B
+\e$B%k$H$7$F;HMQ$5$l$^$9!#\e(B
 
 @item
-\e$BJ8;zNs!#\e(B \e$B$3$NJ8;zNs$r%[!<%`%9%3%"%U%!%$%k$H$7$F;HMQ$7$^$9!#\e(B
+\e$BJ8;zNs!#$3$NJ8;zNs$r%[!<%`%9%3%"%U%!%$%k$H$7$F;HMQ$7$^$9!#\e(B
 @end enumerate
 
-\e$B$3$N%j%9%H$NCf$+$i%^%C%A$9$k$b$N$r!":G=i$+$i8e$m$NJ}$K8~$+$C$FC5\e(B
-\e$B$7$F$$$-$^$9!#\e(B
+\e$B$3$N%j%9%H$NCf$+$i%^%C%A$9$k$b$N$r!":G=i$+$i8e$m$NJ}$K8~$+$C$FC5$7$F$$$-\e(B
+\e$B$^$9!#\e(B
 
 @end enumerate
 
-\e$B$H$$$&$o$1$G!"C1$K0l8D$N%9%3%"%U%!%$%k$r;H$$$?$$>l9g$O!"0J2<$N$h\e(B
-\e$B$&$K$9$l$P$G$-$^$9!#\e(B
+\e$B$H$$$&$o$1$G!"C1$K0l8D$N%9%3%"%U%!%$%k$r;H$$$?$$>l9g$O!"0J2<$N$h$&$K$9$l\e(B
+\e$B$P$G$-$^$9!#\e(B
 
 @lisp
 (setq gnus-home-score-file
       "my-total-score-file.SCORE")
 @end lisp
 
-\e$B$b$7A4\e(B @samp{gnu} \e$B%0%k!<%W$KBP$7$F\e(B @file{gnu.SCORE} \e$B$r!"\e(B
-\e$BA4\e(B @samp{rec} \e$B%0%k!<%W$KBP$7$F\e(B @file{rec.SCORE} (\e$BEy!9\e(B) \e$B$r;H$$$?\e(B
-\e$B$1$l$P!"$3$N$h$&$K$G$-$^$9!#\e(B
+\e$B$b$7A4\e(B @samp{gnu} \e$B%0%k!<%W$KBP$7$F\e(B @file{gnu.SCORE} \e$B$r!"A4\e(B @samp{rec} \e$B%0\e(B
+\e$B%k!<%W$KBP$7$F\e(B @file{rec.SCORE} (\e$BEy!9\e(B) \e$B$r;H$$$?$1$l$P!"$3$N$h$&$K$G$-$^\e(B
+\e$B$9!#\e(B
 
 @findex gnus-hierarchial-home-score-file
 @lisp
@@ -14584,8 +15577,8 @@ gnus \e$B$O%0%k!<%WL>$NA4$F$N8l$K$D$$$F!"C18lE,1~@-%9%3%"$r$7$^$;$s!#$[$H$s\e(B
       'gnus-hierarchial-home-score-file)
 @end lisp
 
-\e$B$3$l$OJXMx$J$h$&$K$"$i$+$8$aDs6!$5$l$F$$$k4X?t$G$9!#\e(B
-\e$BB?$N4X?t$O0J2<$N0J2<$N$b$N$r4^$_$^$9\e(B
+\e$B$3$l$OJXMx$J$h$&$K$"$i$+$8$aDs6!$5$l$F$$$k4X?t$G$9!#B?$N4X?t$O0J2<$N0J2<\e(B
+\e$B$N$b$N$r4^$_$^$9!#\e(B
 
 @table @code
 @item gnus-current-home-scre-file
@@ -14595,9 +15588,9 @@ gnus \e$B$O%0%k!<%WL>$NA4$F$N8l$K$D$$$F!"C18lE,1~@-%9%3%"$r$7$^$;$s!#$[$H$s\e(B
 
 @end table
 
-\e$B$b$7\e(B @samp{emacs} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$H!"$=$l$H$OJL$N\e(B
-@samp{comp} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$r;H$$!"B>$NA4It$N%0%k!<%W\e(B
-\e$B$G$O$=$l$>$lFH<+$N%9%3%"%U%!%$%k$r;H$$$?$$$N$G$"$l$P!"\e(B
+\e$B$b$7\e(B @samp{emacs} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$H!"$=$l$H$OJL\e(B
+\e$B$N\e(B @samp{comp} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$r;H$$!"B>$NA4It$N%0%k!<%W$G$O\e(B
+\e$B$=$l$>$lFH<+$N%9%3%"%U%!%$%k$r;H$$$?$$$N$G$"$l$P!"\e(B
 
 @lisp
 (setq gnus-home-score-file
@@ -14608,58 +15601,54 @@ gnus \e$B$O%0%k!<%WL>$NA4$F$N8l$K$D$$$F!"C18lE,1~@-%9%3%"$r$7$^$;$s!#$[$H$s\e(B
 @end lisp
 
 @vindex gnus-home-adapt-file
-@code{gnus-home-adapt-file} \e$B$O\e(B @code{gnus-home-score-file} \e$B$HA4\e(B
-\e$B$/F1$8$h$&$KF0:n$7$^$9$,!"$3$l$OBe$o$j$K2?$r%[!<%`E,MQ%9%3%"%U%!\e(B
-\e$B%$%k$K$9$k$+$r;XDj$7$^$9!#?7$7$$E,MQ%U%!%$%kEPO?9`L\$OA4$F!"$3$N\e(B
-\e$BJQ?t$G;XDj$5$l$k%U%!%$%k$KF~$l$i$l$^$9!#CM$K$OF1$8J8K!$,5v$5$l$^\e(B
-\e$B$9!#\e(B
-
-@code{gnus-home-score-file} \e$B$H\e(B @code{gnus-home-adapt-file} \e$B$N;H\e(B
-\e$BMQ$K2C$($F!"%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$H%H%T%C\e(B
-\e$B%/%Q%i%a!<%?\e(B (@pxref{Topic Parameters}) \e$B$r;H$C$F$[$\F1MM$N$3$H$,\e(B
-\e$B$G$-$^$9!#%0%k!<%W!"%H%T%C%/%Q%i%a!<%?$O$3$NJQ?t$h$j$bM%@h$5$l$^$9!#\e(B
+@code{gnus-home-adapt-file} \e$B$O\e(B @code{gnus-home-score-file} \e$B$HA4$/F1$8$h\e(B
+\e$B$&$KF0:n$7$^$9$,!"$3$l$OBe$o$j$K2?$r%[!<%`E,MQ%9%3%"%U%!%$%k$K$9$k$+$r;X\e(B
+\e$BDj$7$^$9!#?7$7$$E,MQ%U%!%$%kEPO?9`L\$OA4$F!"$3$NJQ?t$G;XDj$5$l$k%U%!%$%k\e(B
+\e$B$KF~$l$i$l$^$9!#CM$K$OF1$8J8K!$,5v$5$l$^$9!#\e(B
 
+@code{gnus-home-score-file} \e$B$H\e(B @code{gnus-home-adapt-file} \e$B$N;HMQ$K2C$(\e(B
+\e$B$F!"%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$H%H%T%C%/%Q%i%a!<\e(B
+\e$B%?\e(B (@pxref{Topic Parameters}) \e$B$r;H$C$F$[$\F1MM$N$3$H$,$G$-$^$9!#%0%k!<%W!"\e(B
+\e$B%H%T%C%/%Q%i%a!<%?$O$3$NJQ?t$h$j$bM%@h$5$l$^$9!#\e(B
 
 @node Followups To Yourself
 @section \e$B<+J,<+?H$X$N%U%)%m!<%"%C%W\e(B
 
-Gnus \e$B$O8=:_$N%P%C%U%!!<$+$i\e(B @code{Message-ID} \e$B%X%C%@!<$r8+$D$1=P\e(B
-\e$B$9$?$a$KFs$D$NL?Na$rDs6!$7$F$$$^$9!#\e(B \e$B$=$7$F\e(B gnus \e$B$O!"B>$N5-;v$K\e(B
-\e$B$*$1$k\e(B@code{References} \e$B%X%C%@!<Cf$K$3$N\e(B @code{Message-ID} \e$B$r;H$C\e(B
-\e$B$F$$$kF@E@$r!"%9%3%"5,B'$H$7$FDI2C$7$^$9!#$3$l$O<B<AE*$K!"$=$N5-\e(B
-\e$B;v$XJVEz$7$?5-;v$G!"8=:_$N%P%C%U%!!<$K$"$k$b$NA4$F$KBP$7$F%9%3%"\e(B
-\e$B$rA}2C$5$;$^$9!#$3$l$O$"$J$?$N8@$C$?$3$H$KBP$7$F$_$s$J$,Ez$($F$/\e(B
-\e$B$l$?$H$-!"$9$0$K$=$l$KL\$r8~$1$?$$$H$-$K$H$F$bJXMx$G$9$M!#\e(B
+Gnus \e$B$O8=:_$N%P%C%U%!!<$+$i\e(B @code{Message-ID} \e$B%X%C%@!<$r8+$D$1=P$9$?$a$K\e(B
+\e$BFs$D$NL?Na$rDs6!$7$F$$$^$9!#$=$7$F\e(B gnus \e$B$O!"B>$N5-;v$K$*$1\e(B
+\e$B$k\e(B @code{References} \e$B%X%C%@!<Cf$K$3$N\e(B @code{Message-ID} \e$B$r;H$C$F$$$kF@E@\e(B
+\e$B$r!"%9%3%"5,B'$H$7$FDI2C$7$^$9!#$3$l$O<B<AE*$K!"$=$N5-;v$XJVEz$7$?5-;v$G!"\e(B
+\e$B8=:_$N%P%C%U%!!<$K$"$k$b$NA4$F$KBP$7$F%9%3%"$rA}2C$5$;$^$9!#$3$l$O$"$J$?\e(B
+\e$B$N8@$C$?$3$H$KBP$7$F$_$s$J$,Ez$($F$/$l$?$H$-!"$9$0$K$=$l$KL\$r8~$1$?$$$H\e(B
+\e$B$-$K$H$F$bJXMx$G$9$M!#\e(B
 
 @table @code
 
 @item gnus-score-followup-article
 @findex gnus-score-followup-article
-\e$B$3$l$O$"$J$?<+?H$N5-;v$KD>@\%U%)%m!<%"%C%W$7$?5-;v$K%9%3%"$r2C;;\e(B
-\e$B$7$^$9!#\e(B
+\e$B$3$l$O$"$J$?<+?H$N5-;v$KD>@\%U%)%m!<%"%C%W$7$?5-;v$K%9%3%"$r2C;;$7$^$9!#\e(B
 
 @item gnus-score-followup-thread
 @findex gnus-score-followup-thread
-\e$B$3$l$O$"$J$?$N5-;v$h$j\e(B ``\e$B2<\e(B'' \e$B$N%9%l%C%I$K8=$l$k5-;vA4$F$KBP$7$F\e(B
-\e$B%9%3%"$r2C;;$7$^$9!#\e(B
+\e$B$3$l$O$"$J$?$N5-;v$h$j\e(B ``\e$B2<\e(B'' \e$B$N%9%l%C%I$K8=$l$k5-;vA4$F$KBP$7$F%9%3%"$r\e(B
+\e$B2C;;$7$^$9!#\e(B
 @end table
 
 @vindex message-sent-hook
-\e$B$3$l$iFs$D$N4X?t$O!"4pK\E*$K$O$I$A$i$b\e(B @code{message-sent-hook}
-\e$B$N$h$&$J%U%C%/$NCf$G;H$&$?$a$N$b$N$G$9!#\e(B
+\e$B$3$l$iFs$D$N4X?t$O!"4pK\E*$K$O$I$A$i$b\e(B @code{message-sent-hook} \e$B$N$h$&$J\e(B
+\e$B%U%C%/$NCf$G;H$&$?$a$N$b$N$G$9!#\e(B
 
-\e$B$"$J$?$N<+J,$N\e(B @code{Message-ID} \e$B$r$8$C$/$j$HD/$a$F$_$k$H!"$O$8\e(B
-\e$B$a$NFs!";0J8;z$O>o$KF1$8$G$"$k$3$H$K5$$,$D$/$G$7$g$&!#0J2<$NFs$D\e(B
-\e$B$O;d$N$b$N$G$9!#\e(B
+\e$B$"$J$?$N<+J,$N\e(B @code{Message-ID} \e$B$r$8$C$/$j$HD/$a$F$_$k$H!"$O$8$a$NFs!"\e(B
+\e$B;0J8;z$O>o$KF1$8$G$"$k$3$H$K5$$,$D$/$G$7$g$&!#0J2<$NFs$D$O;d$N$b$N$G$9!#\e(B
 
 @example
 <x6u3u47icf.fsf@@eyesore.no>
 <x6sp9o7ibw.fsf@@eyesore.no>
 @end example
 
-\e$B$D$^$j$3$N%^%7%s>e$G$N\e(B ``\e$B;d$N\e(B'' \e$B$N<1JL$O\e(B @samp{x6} \e$B$G$"$k$H$$$&\e(B
-\e$B$3$H$G$9!#$3$l$O;H$($^$9\e(B --- \e$B0J2<$N5,B'$O;d<+?H$X$N%U%)%m!<%"%C\e(B
-\e$B%WA4$F$KBP$7$F%9%3%"$rA}2C$5$;$k$G$7$g$&!#\e(B
+\e$B$D$^$j$3$N%^%7%s>e$G$N\e(B ``\e$B;d$N\e(B'' \e$B$N<1JL$O\e(B @samp{x6} \e$B$G$"$k$H$$$&$3$H$G$9!#\e(B
+\e$B$3$l$O;H$($^$9\e(B --- \e$B0J2<$N5,B'$O;d<+?H$X$N%U%)%m!<%"%C%WA4$F$KBP$7$F%9%3\e(B
+\e$B%"$rA}2C$5$;$k$G$7$g$&!#\e(B
 
 @lisp
 ("references"
@@ -14667,9 +15656,8 @@ Gnus \e$B$O8=:_$N%P%C%U%!!<$+$i\e(B @code{Message-ID} \e$B%X%C%@!<$r8+$D$1=P\e(B
   1000 nil r))
 @end lisp
 
-``\e$B$"$J$?$N\e(B'' \e$B$,:G=i$NFsJ8;z$K$J$k$+:G=i$N;0J8;z$K$J$k$+$O%7%9%F\e(B
-\e$B%`$K0MB8$7$^$9!#\e(B
-
+``\e$B$"$J$?$N\e(B'' \e$B$,:G=i$NFsJ8;z$K$J$k$+:G=i$N;0J8;z$K$J$k$+$O%7%9%F%`$K0MB8\e(B
+\e$B$7$^$9!#\e(B
 
 @node Scoring Tips
 @section \e$B%9%3%"IU$1$N1|5A\e(B
@@ -14680,55 +15668,56 @@ Gnus \e$B$O8=:_$N%P%C%U%!!<$+$i\e(B @code{Message-ID} \e$B%X%C%@!<$r8+$D$1=P\e(B
 @item \e$B%/%m%9%]%9%H\e(B
 @cindex crossposts
 @cindex scoring crossposts
-\e$B%/%m%9%]%9%H$N%9%3%"$rDc$/$7$?$1$l$P!"%^%C%A$5$;$k$Y$-9T$O\e(B
-@code{Xref} \e$B%X%C%@!<$G$9!#\e(B
+\e$B%/%m%9%]%9%H$N%9%3%"$rDc$/$7$?$1$l$P!"%^%C%A$5$;$k$Y$-9T\e(B
+\e$B$O\e(B @code{Xref} \e$B%X%C%@!<$G$9!#\e(B
+
 @lisp
 ("xref" (" talk.politics.misc:" -1000))
 @end lisp
 
 @item \e$BJ#?t$N%/%m%9%]%9%H\e(B
-\e$B$"$k?t!"Nc$($P\e(B 3 \e$B$D0J>e$N%0%k!<%W$K%/%m%9%]%9%H$5$l$F$$$k5-;v$N\e(B
-\e$B%9%3%"$rDc$/$7$?$1$l$P!"\e(B
+\e$B$"$k?t!"Nc$($P;0$D0J>e$N%0%k!<%W$K%/%m%9%]%9%H$5$l$F$$$k5-;v$N%9%3%"$rDc\e(B
+\e$B$/$7$?$1$l$P!"\e(B
+
 @lisp
 ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
 @end lisp
 
 @item \e$BK\J8$X$N%^%C%A\e(B
-\e$B$3$l$O0lHLE*$K$O$"$^$jNI$$9M$($G$O$"$j$^$;$s\e(B --- \e$B$=$l$O$H$F$bD9\e(B
-\e$B;~4V$+$+$C$F$7$^$&$+$i$G$9!#<B:]\e(B gnus \e$B$O!"$=$l$>$l$N5-;v$r8DJL$K\e(B
-\e$B%5!<%P!<$+$i<hF@$7$F$3$J$1$l$P$J$i$J$$$N$G$9!#$G$b!"$"$J$?$O$=$l\e(B
-\e$B$G$b$d$j$?$$$+$bCN$l$^$;$s$M!#%^%C%A$5$;$k%-!<$O;0$D\e(B
-(@code{Head}\e$B!"\e(B@code{Body}\e$B!"\e(B @code{All}) \e$B$"$k$N$G$9$,!"%9%3%"%U%!\e(B
-\e$B%$%kKh$K0l$DA*$s$G$=$l$K8GDj$7$?J}$,NI$$$G$9!#$b$7Fs$D$r;H$&$H!"\e(B
-\e$B$=$l$>$l$N5-;v$O\e(B @emph{\e$BFs2s\e(B} \e$B<hF@$5$l$F$7$^$$$^$9!#$b$7\e(B
-@code{Head} \e$B$+$i$A$g$C$H$@$1!"\e(B@code{Body} \e$B$+$i$A$g$C$H$@$1%^%C%A\e(B
-\e$B$5$;$?$$!"$H$$$&$N$G$"$l$P!"AGD>$K\e(B @code{All} \e$B$r;H$C$FA4It%^%C%A\e(B
-\e$B$5$;$F$/$@$5$$!#\e(B
+\e$B$3$l$O0lHLE*$K$O$"$^$jNI$$9M$($G$O$"$j$^$;$s\e(B --- \e$B$=$l$O$H$F$bD9;~4V$+$+$C\e(B
+\e$B$F$7$^$&$+$i$G$9!#<B:]\e(B gnus \e$B$O!"$=$l$>$l$N5-;v$r8DJL$K%5!<%P!<$+$i<hF@$7\e(B
+\e$B$F$3$J$1$l$P$J$i$J$$$N$G$9!#$G$b!"$"$J$?$O$=$l$G$b$d$j$?$$$+$bCN$l$^$;$s\e(B
+\e$B$M!#%^%C%A$5$;$k%-!<$O;0$D\e(B(@code{Head}, @code{Body}, @code{All}) \e$B$"$k$N\e(B
+\e$B$G$9$,!"%9%3%"%U%!%$%kKh$K0l$DA*$s$G$=$l$K8GDj$7$?J}$,NI$$$G$9!#$b$7Fs$D\e(B
+\e$B$r;H$&$H!"$=$l$>$l$N5-;v$O\e(B @emph{\e$BFs2s\e(B} \e$B<hF@$5$l$F$7$^$$$^$9!#$b\e(B
+\e$B$7\e(B @code{Head} \e$B$+$i$A$g$C$H$@$1!"\e(B@code{Body} \e$B$+$i$A$g$C$H$@$1%^%C%A$5$;\e(B
+\e$B$?$$!"$H$$$&$N$G$"$l$P!"AGD>$K\e(B @code{All} \e$B$r;H$C$FA4It%^%C%A$5$;$F$/$@$5\e(B
+\e$B$$!#\e(B
 
 @item \e$B4{FI$N0uIU$1\e(B
-\e$B$"$k0lDj?t;z0J2<$N%9%3%"$r;}$D5-;v$K$O!"$*$=$i$/4{FI$N0u$r$D$1$F\e(B
-\e$B$7$^$$$?$/$J$k$G$7$g$&!#$3$l$O\e(B @file{all.SCORE} \e$B%U%!%$%k$K0J2<$N\e(B
-\e$B$b$N$rF~$l$F$*$/$3$H$K$h$C$F:G$b4JC1$K<B8=$G$-$^$9!#\e(B
+\e$B$"$k0lDj?t;z0J2<$N%9%3%"$r;}$D5-;v$K$O!"$*$=$i$/4{FI$N0u$r$D$1$F$7$^$$$?\e(B
+\e$B$/$J$k$G$7$g$&!#$3$l$O\e(B @file{all.SCORE} \e$B%U%!%$%k$K0J2<$N$b$N$rF~$l$F$*$/\e(B
+\e$B$3$H$K$h$C$F:G$b4JC1$K<B8=$G$-$^$9!#\e(B
+
 @lisp
 ((mark -100))
 @end lisp
+
 @code{expunge} \e$B$r;H$C$FF1MM$N$3$H$r9M$($k$3$H$b$G$-$^$9!#\e(B
 
 @item \e$BH]DjJ8;z%/%i%9\e(B
-\e$B$b$7\e(B @code{[^abcd]*} \e$B$_$?$$$J$b$N$r;XDj$9$k$H!"$?$V$s4|BTDL$j$N\e(B
-\e$B7k2L$OF@$i$l$J$$$G$7$g$&!#$3$l$O2~9TJ8;z$K$b%^%C%A$7$F$7$^$$!"$(!<\e(B
-\e$B$H!"L$CN$N@$3&$^$GB3$/$+$b$7$l$^$;$s!#Be$o$j$K\e(B@code{[^abcd\n]*}
-\e$B$r;H$C$F$/$@$5$$!#\e(B
+\e$B$b$7\e(B @code{[^abcd]*} \e$B$_$?$$$J$b$N$r;XDj$9$k$H!"$?$V$s4|BTDL$j$N7k2L$OF@\e(B
+\e$B$i$l$J$$$G$7$g$&!#$3$l$O2~9TJ8;z$K$b%^%C%A$7$F$7$^$$!"$(!<$H!"L$CN$N@$3&\e(B
+\e$B$^$GB3$/$+$b$7$l$^$;$s!#Be$o$j$K\e(B@code{[^abcd\n]*} \e$B$r;H$C$F$/$@$5$$!#\e(B
 @end table
 
-
 @node Reverse Scoring
 @section \e$B5U%9%3%"\e(B
 @cindex reverse scoring
 
-\e$B$b$7!"I=Bj%X%C%@!<$K\e(B @samp{Sex with Emacs} \e$B$H$$$&J8;z$,$"$k5-;v\e(B
-\e$B$@$1$r;D$7$F!"$=$NB>$N5-;vA4$F$r>C5n$7$F$7$^$$$?$1$l$P!"%9%3%"%U%!\e(B
-\e$B%$%k$K0J2<$N$h$&$J$b$N$rF~$l$k$3$H$b$G$-$^$9!#\e(B
+\e$B$b$7!"I=Bj%X%C%@!<$K\e(B @samp{Sex with Emacs} \e$B$H$$$&J8;z$,$"$k5-;v$@$1$r;D\e(B
+\e$B$7$F!"$=$NB>$N5-;vA4$F$r>C5n$7$F$7$^$$$?$1$l$P!"%9%3%"%U%!%$%k$K0J2<$N$h\e(B
+\e$B$&$J$b$N$rF~$l$k$3$H$b$G$-$^$9!#\e(B
 
 @lisp
 (("subject"
@@ -14737,36 +15726,33 @@ Gnus \e$B$O8=:_$N%P%C%U%!!<$+$i\e(B @code{Message-ID} \e$B%X%C%@!<$r8+$D$1=P\e(B
  (expunge 1))
 @end lisp
 
-\e$B$=$7$F\e(B @samp{Sex with Emacs} \e$B$K%^%C%A$9$kA4$F$N5-;v$r=8$a$F!";D\e(B
-\e$B$j$r=3Ht$P$9$?$a$K4{FI$N0u$r$D$1!">C5n$7$^$9!#\e(B
-
+\e$B$=$7$F\e(B @samp{Sex with Emacs} \e$B$K%^%C%A$9$kA4$F$N5-;v$r=8$a$F!";D$j$r=3Ht\e(B
+\e$B$P$9$?$a$K4{FI$N0u$r$D$1!">C5n$7$^$9!#\e(B
 
 @node Global Score Files
 @section \e$B%0%m!<%P%k%9%3%"%U%!%$%k\e(B
 @cindex global score files
 
-\e$B4V0c$$$J$/!"B>$N%K%e!<%9%j!<%@!<$O\e(B ``\e$B%0%m!<%P%k:o=|%U%!%$%k\e(B
-(global kill file)'' \e$B$r;}$C$F$$$^$9!#$3$l$OIaDL!"A4$F$N%0%k!<%W\e(B
-\e$B$KE,MQ$5$l$k!"%f!<%6!<$N%[!<%`%G%#%l%/%H%j!<$K3JG<$5$l$F$$$k0l$D\e(B
-\e$B$N:o=|%U%!%$%k0J>e$N2?J*$G$b$"$j$^$;$s!#$O$s\e(B! \e$B$A$C$]$1$J%K%e!<%9\e(B
-\e$B%j!<%@!<$@$M!#<e$9$.!#\e(B
+\e$B4V0c$$$J$/!"B>$N%K%e!<%9%j!<%@!<$O\e(B ``\e$B%0%m!<%P%k:o=|%U%!%$\e(B
+\e$B%k\e(B (global kill file)'' \e$B$r;}$C$F$$$^$9!#$3$l$OIaDL!"A4$F$N%0%k!<%W$KE,MQ\e(B
+\e$B$5$l$k!"%f!<%6!<$N%[!<%`%G%#%l%/%H%j!<$K3JG<$5$l$F$$$k0l$D$N:o=|%U%!%$%k\e(B
+\e$B0J>e$N2?J*$G$b$"$j$^$;$s!#$O$s\e(B! \e$B$A$C$]$1$J%K%e!<%9%j!<%@!<$@$M!#<e$9$.!#\e(B
 
-\e$BKM$,$3$3$GOC$7$F$$$k$N$O%0%m!<%P%k%9%3%"%U%!%$%k$G$9!#A4@$3&Cf$+\e(B
-\e$B$i$N!";j$k=j$+$i$N%f!<%6!<$K$h$k%9%3%"%U%!%$%k!"@$3&$N9q!9$rA4$F!"\e(B
-\e$B5pBg$J0l$D$N9,$;$J%9%3%"%U%!%$%kF1LA$KCD7k$5$;$k%9%3%"%U%!%$%k\e(B!
-Ange-score! \e$B?7$7$/$F%F%9%H$7$F$$$J$$\e(B!
+\e$BKM$,$3$3$GOC$7$F$$$k$N$O%0%m!<%P%k%9%3%"%U%!%$%k$G$9!#A4@$3&Cf$+$i$N!";j\e(B
+\e$B$k=j$+$i$N%f!<%6!<$K$h$k%9%3%"%U%!%$%k!"@$3&$N9q!9$rA4$F!"5pBg$J0l$D$N9,\e(B
+\e$B$;$J%9%3%"%U%!%$%kF1LA$KCD7k$5$;$k%9%3%"%U%!%$%k\e(B !Ange-score! \e$B?7$7$/$F%F\e(B
+\e$B%9%H$7$F$$$J$$\e(B!
 
 @vindex gnus-global-score-files
 \e$BB>$N?M$N%9%3%"%U%!%$%k$r;H$&$?$a$K$7$J$1$l$P$J$i$J$$$3$H$O!"\e(B
-@code{gnus-global-score-files} \e$BJQ?t$r@_Dj$9$k$3$H$@$1$G$9!#$=$l\e(B
-\e$B$>$l$N%9%3%"%U%!%$%kKh$K!"$"$k$$$O$=$l$>$l$N%9%3%"%U%!%$%k%G%#%l\e(B
-\e$B%/%H%jKh$KBP$7$F0l$D$N9`L\$K$J$j$^$9!#\e(BGnus \e$B$O$I$N%9%3%"%U%!%$%k\e(B
-\e$B$r$I$N%0%k!<%W$K;H$&$N$,E,@Z$G$"$k$+$r<+J,$G7hDj$7$^$9!#\e(B
+@code{gnus-global-score-files} \e$BJQ?t$r@_Dj$9$k$3$H$@$1$G$9!#$=$l$>$l$N%9\e(B
+\e$B%3%"%U%!%$%kKh$K!"$"$k$$$O$=$l$>$l$N%9%3%"%U%!%$%k%G%#%l%/%H%jKh$KBP$7$F\e(B
+\e$B0l$D$N9`L\$K$J$j$^$9!#\e(BGnus \e$B$O$I$N%9%3%"%U%!%$%k$r$I$N%0%k!<%W$K;H$&$N$,\e(B
+\e$BE,@Z$G$"$k$+$r<+J,$G7hDj$7$^$9!#\e(B
 
-\e$BNc$($P\e(B
-@file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE}
-\e$B$N%9%3%"%U%!%$%k$H\e(B @file{/ftp@@ftp.some-where:/pub/score} \e$B%G%#%l\e(B
-\e$B%/%H%j$K$"$kA4$F$N%9%3%"%U%!%$%k$r;H$$$?$1$l$P!"\e(B
+\e$BNc$($P\e(B @file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE} \e$B$N\e(B
+\e$B%9%3%"%U%!%$%k$H\e(B @file{/ftp@@ftp.some-where:/pub/score} \e$B%G%#%l%/%H%j$K$"\e(B
+\e$B$kA4$F$N%9%3%"%U%!%$%k$r;H$$$?$1$l$P!"\e(B
 
 @lisp
 (setq gnus-global-score-files
@@ -14775,22 +15761,20 @@ Ange-score! \e$B?7$7$/$F%F%9%H$7$F$$$J$$\e(B!
 @end lisp
 
 @findex gnus-score-search-global-directories
-\e$B$I$&$@$$!"4JC1$@$m$&\e(B? \e$B%G%#%l%/%H%jL>$O\e(B @samp{/} \e$B$G=*$o$i$J$/$F$O\e(B
-\e$B$J$j$^$;$s!#$3$l$i$N%G%#%l%/%H%j$OIaDL$O!"0l2s$N\e(B gnus \e$B;HMQ4|4VCf\e(B
-\e$B$K0l2s$@$1$7$+FI$_9~$_$^$;$s!#$b$71s3V%G%#%l%/%H%j$r<jF0$G:FFI$_\e(B
-\e$B9~$_$9$kI,MW$,=P$F$-$?$i!"\e(B
-@code{gnus-score-search-global-directories} \e$BL?Na$r;H$&$3$H$,$G$-\e(B
-\e$B$^$9!#\e(B
+\e$B$I$&$@$$!"4JC1$@$m$&\e(B? \e$B%G%#%l%/%H%jL>$O\e(B @samp{/} \e$B$G=*$o$i$J$/$F$O$J$j$^$;\e(B
+\e$B$s!#$3$l$i$N%G%#%l%/%H%j$OIaDL$O!"0l2s$N\e(B gnus \e$B;HMQ4|4VCf$K0l2s$@$1$7$+FI\e(B
+\e$B$_9~$_$^$;$s!#$b$71s3V%G%#%l%/%H%j$r<jF0$G:FFI$_9~$_$9$kI,MW$,=P$F$-$?$i!"\e(B
+@code{gnus-score-search-global-directories} \e$BL?Na$r;H$&$3$H$,$G$-$^$9!#\e(B
 
-\e$B$?$@$78=;~E@$G$O!"$3$N%*%W%7%g%s$r;H$&$H%0%k!<%W$KF~$k$N$,$$$/$i\e(B
-\e$B$+CY$/$J$j$^$9!#\e(B(\e$B$D$^$j\e(B --- \e$B$+$J$j!"$G$9$1$I\e(B)
+\e$B$?$@$78=;~E@$G$O!"$3$N%*%W%7%g%s$r;H$&$H%0%k!<%W$KF~$k$N$,$$$/$i$+CY$/$J\e(B
+\e$B$j$^$9!#\e(B(\e$B$D$^$j\e(B --- \e$B$+$J$j!"$G$9$1$I\e(B)
 
-\e$B$b$7%9%3%"%U%!%$%k$r!"B>$N?M$?$A$K;H$C$F$b$i$&$h$&$K0];}$7$?$/$J$C\e(B
-\e$B$F$-$?$i!"C1$K$"$J$?$N%9%3%"%U%!%$%k$rF?L>\e(B FTP \e$B$KCV$$$F!"@$3&Cf\e(B
-\e$B$K8xI=$7$F$/$@$5$$!#5U;J2q<T$K$J$l$k$h\e(B! \e$B$=$N8e$KB3$$$F4V0c$$$J$/\e(B
-\e$B5/$3$k5U;J2q<T@oAh!"$9$J$o$A?M!9$N6&46$r>!$A<h$k$?$a$N5U;J2q<T$N\e(B
-\e$B@o$$$K;22C$9$k$3$H$G!"H`$i$N%9%3%"%U%!%$%k$K4V0c$C$?A0Ds$r;H$o$;\e(B
-\e$B$k$h$&$KM6F3$9$k$N$@\e(B! \e$B$d$C$?\e(B! \e$B$3$l$G%M%C%H$O5_$o$l$k\e(B!
+\e$B$b$7%9%3%"%U%!%$%k$r!"B>$N?M$?$A$K;H$C$F$b$i$&$h$&$K0];}$7$?$/$J$C$F$-$?\e(B
+\e$B$i!"C1$K$"$J$?$N%9%3%"%U%!%$%k$rF?L>\e(B FTP \e$B$KCV$$$F!"@$3&Cf$K8xI=$7$F$/$@\e(B
+\e$B$5$$!#5U;J2q<T$K$J$l$k$h\e(B! \e$B$=$N8e$KB3$$$F4V0c$$$J$/5/$3$k5U;J2q<T@oAh!"$9\e(B
+\e$B$J$o$A?M!9$N6&46$r>!$A<h$k$?$a$N5U;J2q<T$N@o$$$K;22C$9$k$3$H$G!"H`$i$N%9\e(B
+\e$B%3%"%U%!%$%k$K4V0c$C$?A0Ds$r;H$o$;$k$h$&$KM6F3$9$k$N$@\e(B! \e$B$d$C$?\e(B! \e$B$3$l$G%M%C\e(B
+\e$B%H$O5_$o$l$k\e(B!
 
 \e$B0J2<$K!"5U;J2q<T$J$j$?$,$j$N$?$a$NHk5;$r$$$/$D$+!"B(@J$G=R$Y$^$9!#\e(B
 
@@ -14803,43 +15787,40 @@ Ange-score! \e$B?7$7$/$F%F%9%H$7$F$$$J$$\e(B!
 @item
 \e$BFC$KAG@2$i$7$$Ej9F<T$?$A$O1JB3E*$J<gLrC#$H$7$F2C;;$9$k!#\e(B
 @item
-\e$B$=$N%0%k!<%W$N7{>OL5;k$NEj9F$rIQHK$K7+$jJV$9Ej9F<T$O!"@dLG$5$;$F\e(B
-\e$B$7$^$C$F:9$7;Y$($J$$!#\e(B
+\e$B$=$N%0%k!<%W$N7{>OL5;k$NEj9F$rIQHK$K7+$jJV$9Ej9F<T$O!"@dLG$5$;$F$7$^$C$F\e(B
+\e$B:9$7;Y$($J$$!#\e(B
 @item
-@code{mark} \e$B$H\e(B @code{expunge} \e$B%"%H%`$r@_Dj$7!"1x$i$o$7$$5-;v$r40\e(B
-\e$BA4$KAr$j5n$k!#\e(B
+@code{mark} \e$B$H\e(B @code{expunge} \e$B%"%H%`$r@_Dj$7!"1x$i$o$7$$5-;v$r40A4$KAr$j\e(B
+\e$B5n$k!#\e(B
 
 @item
-\e$B>C5n$N%9%3%"9`L\$r;H$C$F%U%!%$%k$NBg$-$5$r>.$5$/M^$($k!#$G$b$*$=\e(B
-\e$B$i$/$O!"%5%$%H$K$h$C$F8E$$5-;v$rD94|4VJ]B8$9$k$h$&$K!"4|8B@Z$l>C\e(B
-\e$B5n$N4|4V$OD9$/<h$k$G$7$g$&$1$l$I$b!#\e(B
+\e$B>C5n$N%9%3%"9`L\$r;H$C$F%U%!%$%k$NBg$-$5$r>.$5$/M^$($k!#$G$b$*$=$i$/$O!"\e(B
+\e$B%5%$%H$K$h$C$F8E$$5-;v$rD94|4VJ]B8$9$k$h$&$K!"4|8B@Z$l>C5n$N4|4V$OD9$/<h\e(B
+\e$B$k$G$7$g$&$1$l$I$b!#\e(B
 @end itemize
 
-... \e$B2L$?$7$FB>$N%K%e!<%9%j!<%@!<$O>-Mh!"%0%m!<%P%k%9%3%"%U%!%$%k\e(B
-\e$B$r%5%]!<%H$9$k$G$7$g$&$+\e(B? @emph{\e$B$&$U$U\e(B}\e$B!#$=$&!"$I$&9M$($F$_$?$C\e(B
-\e$B$F!"\e(BBlue Wave \e$B$d\e(B xrn \e$B$d\e(B 1stReader \e$B$H$+$$$C$?%K%e!<%9%j!<%@!<$O%9\e(B
-\e$B%3%"$r%5%]!<%H$9$k$Y$-$@$M!#:#$O8GBC$r0{$s$G8+<i$k$3$H$K$7$^$7$g\e(B
-\e$B$&$+\e(B?
-
+... \e$B2L$?$7$FB>$N%K%e!<%9%j!<%@!<$O>-Mh!"%0%m!<%P%k%9%3%"%U%!%$%k$r%5%]!<\e(B
+\e$B%H$9$k$G$7$g$&$+\e(B? @emph{\e$B$&$U$U\e(B}\e$B!#$=$&!"$I$&9M$($F$_$?$C$F!"\e(B
+Blue Wave \e$B$d\e(B xrn \e$B$d\e(B 1stReader \e$B$H$+$$$C$?%K%e!<%9%j!<%@!<$O%9%3%"$r%5%]!<\e(B
+\e$B%H$9$k$Y$-$@$M!#:#$O8GBC$r0{$s$G8+<i$k$3$H$K$7$^$7$g$&$+\e(B?
 
 @node Kill Files
 @section \e$B>C5n%U%!%$%k\e(B
 @cindex kill files
 
-Gnus \e$B$O$^$@!"$"$N$&$6$C$?$$8E$$>C5n%U%!%$%k$r%5%]!<%H$7$F$$$^$9!#\e(B
-\e$B<B:]>C5n%U%!%$%k$N9`L\$O$b$&>C$7$F$b$h$$$N$G$9$,!"$=$l$O\e(B Daniel
-Quinlan \e$B$,%9%3%"%U%!%$%k$r9M$(=P$9A0$K;d$,=q$$$?$b$N$J$N$G!"$=$N\e(B
-\e$B%3!<%I$O$^$@;D$C$F$$$^$9!#\e(B
+Gnus \e$B$O$^$@!"$"$N$&$6$C$?$$8E$$>C5n%U%!%$%k$r%5%]!<%H$7$F$$$^$9!#<B:]>C\e(B
+\e$B5n%U%!%$%k$N9`L\$O$b$&>C$7$F$b$h$$$N$G$9$,!"$=$l$O\e(B Daniel Quinlan \e$B$,%9%3\e(B
+\e$B%"%U%!%$%k$r9M$(=P$9A0$K;d$,=q$$$?$b$N$J$N$G!"$=$N%3!<%I$O$^$@;D$C$F$$$^\e(B
+\e$B$9!#\e(B
 
-\e$BMW$9$k$K!">C5n=hM}$O%9%3%"=hM}$h$j$b$+$J$jCY$$$N$G\e(B (\e$B;d$N8@$$$?$$\e(B
-\e$B$N$O\e(B @emph{\e$B$b$N$9$4$/\e(B})\e$B!"$"$J$?$N>C5n%U%!%$%k$O%9%3%"%U%!%$%k$K\e(B
-\e$B=q$-49$($?J}$,NI$$$+$b$7$l$^$;$s!#\e(B
+\e$BMW$9$k$K!">C5n=hM}$O%9%3%"=hM}$h$j$b$+$J$jCY$$$N$G\e(B (\e$B;d$N8@$$$?$$$N\e(B
+\e$B$O\e(B @emph{\e$B$b$N$9$4$/\e(B})\e$B!"$"$J$?$N>C5n%U%!%$%k$O%9%3%"%U%!%$%k$K=q$-49$($?\e(B
+\e$BJ}$,NI$$$+$b$7$l$^$;$s!#\e(B
 
-\e$B$$$:$l$K$;$h!">C5n%U%!%$%k$OIaDL$N\e(B @code{emacs-lisp} \e$B%U%!%$%k$G$9!#\e(B
-\e$B$3$N%U%!%$%k$NCf$K$O$I$s$J7A<0$G$bF~$l$k$3$H$,$G$-$^$9!#$D$^$j>C\e(B
-\e$B5n%U%!%$%k$r%0%k!<%W$KF~$C$?$H$-$K<B9T$9$k0l<o$N86;OE*$J%U%C%/4X\e(B
-\e$B?t$N$h$&$K;H$&$3$H$,$G$-$^$9!#$^$"$=$l$,$"$^$j$$$$J}K!$G$O$J$$$H\e(B
-\e$B$7$F$b$M!#\e(B
+\e$B$$$:$l$K$;$h!">C5n%U%!%$%k$OIaDL$N\e(B @code{emacs-lisp} \e$B%U%!%$%k$G$9!#$3$N\e(B
+\e$B%U%!%$%k$NCf$K$O$I$s$J7A<0$G$bF~$l$k$3$H$,$G$-$^$9!#$D$^$j>C5n%U%!%$%k$r\e(B
+\e$B%0%k!<%W$KF~$C$?$H$-$K<B9T$9$k0l<o$N86;OE*$J%U%C%/4X?t$N$h$&$K;H$&$3$H$,\e(B
+\e$B$G$-$^$9!#$^$"$=$l$,$"$^$j$$$$J}K!$G$O$J$$$H$7$F$b$M!#\e(B
 
 \e$BDL>o$N>C5n%U%!%$%k$O0J2<$N$h$&$K$J$j$^$9!#\e(B
 
@@ -14849,29 +15830,27 @@ Quinlan \e$B$,%9%3%"%U%!%$%k$r9M$(=P$9A0$K;d$,=q$$$?$b$N$J$N$G!"$=$N\e(B
 (gnus-expunge "X")
 @end lisp
 
-\e$B$3$l$O;d$,=q$$$?A4$F$N5-;v$K4{FI$N0u$r$D$1!"35N,%P%C%U%!$+$i0u$N\e(B
-\e$B$D$$$?5-;v$r:o=|$7$^$9!#$H$C$F$bJXMx$G$9!#$"$J$?$b$=$&;W$&$G$7$g!#\e(B
+\e$B$3$l$O;d$,=q$$$?A4$F$N5-;v$K4{FI$N0u$r$D$1!"35N,%P%C%U%!$+$i0u$N$D$$$?5-\e(B
+\e$B;v$r:o=|$7$^$9!#$H$C$F$bJXMx$G$9!#$"$J$?$b$=$&;W$&$G$7$g!#\e(B
 
-\e$BB>$N%W%m%0%i%`$G$OA4$/0c$&>C5n%U%!%$%k$N9=J8$r;H$C$F$$$^$9!#$b$7\e(B
-gnus \e$B$,\e(B @code{rn} \e$B$N>C5n%U%!%$%k$i$7$-$b$N$K=P2q$C$?$i!"2?$H$+$=\e(B
-\e$B$l$r2r<a$7$h$&$H$7$^$9!#\e(B
+\e$BB>$N%W%m%0%i%`$G$OA4$/0c$&>C5n%U%!%$%k$N9=J8$r;H$C$F$$$^$9!#$b\e(B
+\e$B$7\e(B gnus \e$B$,\e(B @code{rn} \e$B$N>C5n%U%!%$%k$i$7$-$b$N$K=P2q$C$?$i!"2?$H$+$=$l$r\e(B
+\e$B2r<a$7$h$&$H$7$^$9!#\e(B
 
-GNUS \e$B>C5n%U%!%$%k$rJT=8$9$k$?$a$NFs$D$N35N,%P%C%U%!4X?t$,$"$j$^\e(B
-\e$B$9!#\e(B
+GNUS \e$B>C5n%U%!%$%k$rJT=8$9$k$?$a$NFs$D$N35N,%P%C%U%!4X?t$,$"$j$^$9!#\e(B
 
 @table @kbd
 
 @item M-k
 @kindex M-k (Summary)
 @findex gnus-summary-edit-local-kill
-\e$B$=$N%0%k!<%W$N>C5n%U%!%$%k$rJT=8$9$k\e(B
-(@code{gnus-summary-edit-local-kill})\e$B!#\e(B
+\e$B$=$N%0%k!<%W$N>C5n%U%!%$%k$rJT=8$9\e(B
+\e$B$k\e(B (@code{gnus-summary-edit-local-kill})\e$B!#\e(B
 
 @item M-K
 @kindex M-K (Summary)
 @findex gnus-summary-edit-global-kill
-\e$B0lHL>C5n%U%!%$%k$rJT=8$9$k\e(B
-(@code{gnus-summary-edit-global-kill})\e$B!#\e(B
+\e$B0lHL>C5n%U%!%$%k$rJT=8$9$k\e(B (@code{gnus-summary-edit-global-kill})\e$B!#\e(B
 @end table
 
 \e$B>C5n%U%!%$%k$rJT=8$9$kFs$D$N%0%k!<%W%b!<%I4X?t$,$"$j$^$9!#\e(B
@@ -14881,8 +15860,7 @@ GNUS \e$B>C5n%U%!%$%k$rJT=8$9$k$?$a$NFs$D$N35N,%P%C%U%!4X?t$,$"$j$^\e(B
 @item M-k
 @kindex M-k (Group)
 @findex gnus-group-edit-local-kill
-\e$B$=$N%0%k!<%W$N>C5n%U%!%$%k$rJT=8$9$k\e(B
-(@code{gnus-group-edit-local-kill})\e$B!#\e(B
+\e$B$=$N%0%k!<%W$N>C5n%U%!%$%k$rJT=8$9$k\e(B (@code{gnus-group-edit-local-kill})\e$B!#\e(B
 
 @item M-K
 @kindex M-K (Group)
@@ -14895,29 +15873,26 @@ GNUS \e$B>C5n%U%!%$%k$rJT=8$9$k$?$a$NFs$D$N35N,%P%C%U%!4X?t$,$"$j$^\e(B
 @table @code
 @item gnus-kill-file-name
 @vindex gnus-kill-file-name
-@samp{soc.motss} \e$B%0%k!<%WMQ$N>C5n%U%!%$%k$ODL>o\e(B
-@file{soc.motss.KILL} \e$B$H$$$&L>A0$G$9!#$3$N%U%!%$%kL>$rF@$k$?$a$K\e(B
-\e$B%0%k!<%WL>$KIU2C$5$l$k@\Hx<-$O!"\e(B@code{gnus-kill-file-name} \e$BJQ?t\e(B
-\e$B$GM?$($i$l$^$9!#\e(B``\e$B%0%m!<%P%k\e(B'' \e$B>C5n%U%!%$%k$O\e(B (\e$B%9%3%"%U%!%$%k$N\e(B
-\e$B0UL#$G$N\e(B ``\e$B%0%m!<%P%k\e(B'' \e$B$8$c$J$$$h!"$b$A$m$s\e(B) \e$BC1$K\e(B @file{KILL}\e$B$H\e(B
-\e$B$$$&L>A0$G$9!#\e(B
+@samp{soc.motss} \e$B%0%k!<%WMQ$N>C5n%U%!%$%k$ODL\e(B
+\e$B>o\e(B @file{soc.motss.KILL} \e$B$H$$$&L>A0$G$9!#$3$N%U%!%$%kL>$rF@$k$?$a$K%0%k!<\e(B
+\e$B%WL>$KIU2C$5$l$k@\Hx<-$O!"\e(B@code{gnus-kill-file-name} \e$BJQ?t$GM?$($i$l$^$9!#\e(B
+``\e$B%0%m!<%P%k\e(B'' \e$B>C5n%U%!%$%k$O\e(B (\e$B%9%3%"%U%!%$%k$N0UL#$G\e(B
+\e$B$N\e(B ``\e$B%0%m!<%P%k\e(B'' \e$B$8$c$J$$$h!"$b$A$m$s\e(B) \e$BC1$K\e(B @file{KILL}\e$B$H$$$&L>A0$G$9!#\e(B
 
 @vindex gnus-kill-save-kill-file
 @item gnus-kill-save-kill-file
-\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$G$"$l$P!"\e(Bgnus \e$B$O=hM}$N8e$K>C5n%U%!%$\e(B
-\e$B%k$rJ]B8$7$^$9!#$3$l$O4|8B@Z$l:o=|$r9T$&>C5n$r;H$C$F$$$k$H$-$KI,\e(B
-\e$BMW$G$9!#\e(B
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$G$"$l$P!"\e(Bgnus \e$B$O=hM}$N8e$K>C5n%U%!%$%k$rJ]B8\e(B
+\e$B$7$^$9!#$3$l$O4|8B@Z$l:o=|$r9T$&>C5n$r;H$C$F$$$k$H$-$KI,MW$G$9!#\e(B
 
 @item gnus-apply-kill-hook
 @vindex gnus-apply-kill-hook
 @findex gnus-apply-kill-file-unless-scored
 @findex gnus-apply-kill-file
-\e$B%0%k!<%W$K>C5n%U%!%$%k$rE,MQ$9$k$?$a$K8F$S=P$5$l$k%U%C%/!#$3$l$O\e(B
-\e$B=i4|@_Dj$G$O\e(B @code{(gnus-apply-kill-file)} \e$B$G$9!#$b$7F1$8%0%k!<\e(B
-\e$B%W$KBP$7$F%9%3%"%U%!%$%k$,$"$k>l9g$K$O>C5n%U%!%$%k$rL5;k$7$?$1$l\e(B
-\e$B$P!"$3$N%U%C%/$r\e(B @code{(gnus-apply-kill-file-unless-scored)} \e$B$K\e(B
-\e$B@_Dj$7$^$9!#>C5n%U%!%$%k$r=hM}$5$;$?$/$J$1$l$P!"$3$NJQ?t$r\e(B
-@code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+\e$B%0%k!<%W$K>C5n%U%!%$%k$rE,MQ$9$k$?$a$K8F$S=P$5$l$k%U%C%/!#$3$l$O=i4|@_Dj\e(B
+\e$B$G$O\e(B @code{(gnus-apply-kill-file)} \e$B$G$9!#$b$7F1$8%0%k!<%W$KBP$7$F%9%3%"\e(B
+\e$B%U%!%$%k$,$"$k>l9g$K$O>C5n%U%!%$%k$rL5;k$7$?$1$l$P!"$3$N%U%C%/\e(B
+\e$B$r\e(B @code{(gnus-apply-kill-file-unless-scored)} \e$B$K@_Dj$7$^$9!#>C5n%U%!%$\e(B
+\e$B%k$r=hM}$5$;$?$/$J$1$l$P!"$3$NJQ?t$r\e(B@code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
 
 @item gnus-kill-file-mode-hook
 @vindex gnus-kill-file-mode-hook
@@ -14925,28 +15900,25 @@ GNUS \e$B>C5n%U%!%$%k$rJT=8$9$k$?$a$NFs$D$N35N,%P%C%U%!4X?t$,$"$j$^\e(B
 
 @end table
 
-
 @node Converting Kill Files
 @section \e$B>C5n%U%!%$%k$NJQ49\e(B
 @cindex kill files
 @cindex converting kill files
 
-\e$B$"$J$?$,8E$$>C5n%U%!%$%k$r$I$C$5$j;}$C$F$$$k$N$G$"$l$P!"$=$l$i$r\e(B
-\e$B%9%3%"%U%!%$%k$KJQ49$7$?$/$J$k$G$7$g$&!#$b$7$=$l$i$,\e(B ``\e$BIaDL$N\e(B''
-\e$B$d$D$G$"$l$P!"\e(B@file{gnus-kill-to-score.el} \e$B%Q%C%1!<%8$r;H$&$3$H\e(B
-\e$B$,$G$-$^$9!#$=$&$G$J$1$l$P!"<j$GJQ49$7$J$1$l$P$J$i$J$$$G$7$g$&!#\e(B
+\e$B$"$J$?$,8E$$>C5n%U%!%$%k$r$I$C$5$j;}$C$F$$$k$N$G$"$l$P!"$=$l$i$r%9%3%"%U%!\e(B
+\e$B%$%k$KJQ49$7$?$/$J$k$G$7$g$&!#$b$7$=$l$i$,\e(B ``\e$BIaDL$N\e(B''\e$B$d$D$G$"$l$P!"\e(B
+@file{gnus-kill-to-score.el} \e$B%Q%C%1!<%8$r;H$&$3$H$,$G$-$^$9!#$=$&$G$J$1\e(B
+\e$B$l$P!"<j$GJQ49$7$J$1$l$P$J$i$J$$$G$7$g$&!#\e(B
 
-\e$B>C5n%U%!%$%k$+$i%9%3%"%U%!%$%k$X$NJQ49%Q%C%1!<%8$O!"I8=`$G$O\e(B
-gnus \e$B$K$O4^$^$l$^$;$s!#\e(B
-@file{http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}
-\e$B$+$iF~<j$9$k$3$H$,$G$-$^$9!#\e(B
-
-\e$B$b$7$"$J$?$N>C5n%U%!%$%k$,Hs>o$KJ#;($J$b$N$G$"$l$P\e(B --- \e$B$=$l$K\e(B
-@code{gnus-kill} \e$B7A<00J30$N$b$N$,$?$/$5$s4^$^$l$F$$$l$P!"$=$l$i\e(B
-\e$B$r<j$GJQ49$7$J$1$l$P$J$j$^$;$s!#$"$k$$$OC1$K$=$l$i$r!"$=$N$^$^$K\e(B
-\e$B$7$F$*$$$F$/$@$5$$!#\e(BGnus \e$B$O0JA0F1MM$K$=$l$i$r;H$C$F$/$l$k$G$7$g\e(B
-\e$B$&!#\e(B
+\e$B>C5n%U%!%$%k$+$i%9%3%"%U%!%$%k$X$NJQ49%Q%C%1!<%8$O!"I8=`$G$O\e(Bgnus \e$B$K$O4^\e(B
+\e$B$^$l$^$;$s!#\e(B
+@file{http://www.stud.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el} \e$B$+\e(B
+\e$B$iF~<j$9$k$3$H$,$G$-$^$9!#\e(B
 
+\e$B$b$7$"$J$?$N>C5n%U%!%$%k$,Hs>o$KJ#;($J$b$N$G$"$l$P\e(B --- \e$B$=$l\e(B
+\e$B$K\e(B @code{gnus-kill} \e$B7A<00J30$N$b$N$,$?$/$5$s4^$^$l$F$$$l$P!"$=$l$i$r<j$G\e(B
+\e$BJQ49$7$J$1$l$P$J$j$^$;$s!#$"$k$$$OC1$K$=$l$i$r!"$=$N$^$^$K$7$F$*$$$F$/$@\e(B
+\e$B$5$$!#\e(BGnus \e$B$O0JA0F1MM$K$=$l$i$r;H$C$F$/$l$k$G$7$g$&!#\e(B
 
 @node GroupLens
 @section GroupLens
@@ -14964,20 +15936,19 @@ GoupLens \e$B$O!"KhF|:n@.$5$l$kB?$/$NNL$N%K%e!<%95-;v$+$i<A$NNI$$5-;v$rB>$N\e(B
 \e$B$O$3$NM=8@$r5-;v$rFI$_$?$$$+$I$&$+$r7hDj$9$k$N$KLrN)$F$k;v$,$G$-$^$9!#\e(B
 
 @menu
-* Using GroupLens::          \e$B$I$N$h$&$K\e(B gnus \e$B$K\e(B GroupLens \e$B$r;H$o$;$k$h$&\e(B
-                             \e$B$K$9$k$+!#\e(B
-* Rating Articles::          GropLens \e$B$K$"$J$?$,$I$N$h$&$KCM$rIU$1$k$+$r\e(B
-                             \e$BCN$i$;$k!#\e(B
-* Displaying Predictions::   GropuLens \e$B$K$h$C$FM?$($i$l$?M=8@$rI=<($9$k!#\e(B
-* GroupLens Variables::      GoupLens \e$B$r%+%9%?%^%$%:$9$k!#\e(B
+* Using GroupLens::        \e$B$I$N$h$&$K\e(B gnus \e$B$K\e(B GroupLens \e$B$r;H$o$;$k$h$&$K\e(B
+                           \e$B$9$k$+!#\e(B
+* Rating Articles::        GropLens \e$B$K$"$J$?$,$I$N$h$&$KCM$rIU$1$k$+$rCN\e(B
+                           \e$B$i$;$k!#\e(B
+* Displaying Predictions:: GropuLens \e$B$K$h$C$FM?$($i$l$?M=8@$rI=<($9$k\e(B
+* GroupLens Variables::    GoupLens \e$B$r%+%9%?%^%$%:$9$k\e(B
 @end menu
 
-
 @node Using GroupLens
 @subsection GroupLens \e$B$r;H$&\e(B
 
-GroupLens \e$B$r;H$&$?$a$K$O!"%m!<%+%k$N\e(B Better Bit Berau (BBB) \e$B$KI.L>\e(B
-(pseudonym) \e$B$rEPO?$7$J$1$l$P$J$j$^$;$s!#\e(B
+GroupLens \e$B$r;H$&$?$a$K$O!"%m!<%+%k$N\e(B Better Bit Berau (BBB) \e$B$KI.\e(B
+\e$BL>\e(B (pseudonym) \e$B$rEPO?$7$J$1$l$P$J$j$^$;$s!#\e(B
 @samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} \e$B$,8=:_!"$A$^$?\e(B
 \e$B$KB8:_$9$kM#0l$N\e(B better bit \e$B$G$9!#\e(B
 
@@ -15008,34 +15979,35 @@ GroupLens \e$B$NM=8@$rF@$?$$$H;W$&%0%k!<%W$N%j%9%H$G$9!#\e(B
 GroupLens \e$B$,$"$J$?$KDs6!$9$k%9%3%"$O$"$J$?$,IaCJG<F@$9$k$h$&$J0U8+$r;}$C\e(B
 \e$B$??M$,4{$KCM$rIU$1$?4p$E$$$F8D?M2=$5$l$^$9!#\e(B
 
-
 @node Rating Articles
 @subsection Rating Articles
 
-GroupLens \e$B$G$O!"5-;v$O\e(B1\e$B$+$i\e(B5\e$B$^$G$G$=$l$r4^$s$@HO0O$GCM$rIU$1$i$l$^$9!#\e(B1
-\e$B$OBS0h$NL5BL8/$$$N$h$&$J$b$N$@$H9M$($i$l!"\e(B5\e$B$O5-;v$,K\Ev$KNI$$$H9M$($i$l\e(B
-\e$B$k$$$&;v$r0UL#$7$^$9!#$"$J$?$,<+J,<+?H$K?R$M$k4pK\E*$J<ALd$O!"\e(B``1\e$B$+$i\e(B5\e$B$N\e(B
-\e$BHO0O$NCf$G!"$3$l$HF1$8$h$&$J5-;v$r$b$C$HFI$_$?$$$@$m$&$+!)\e(B'' \e$B$G$9!#\e(B
+GroupLens \e$B$G$O!"5-;v$O\e(B 1 \e$B$+$i\e(B 5 \e$B$^$G$G$=$l$r4^$s$@HO0O$GCM$rIU$1$i$l$^$9!#\e(B
+1 \e$B$OBS0h$NL5BL8/$$$N$h$&$J$b$N$@$H9M$($i$l!"\e(B5 \e$B$O5-;v$,K\Ev$KNI$$$H9M$($i\e(B
+\e$B$l$k$$$&;v$r0UL#$7$^$9!#$"$J$?$,<+J,<+?H$K?R$M$k4pK\E*$J<ALd$O!"\e(B
+``1 \e$B$+$i\e(B 5 \e$B$NHO0O$NCf$G!"$3$l$HF1$8$h$&$J5-;v$r$b$C$HFI$_$?$$$@$m$&\e(B
+\e$B$+\e(B?'' \e$B$G$9!#\e(B
 
-GroupLens \e$B$G!"5-;v$NCM$rEPO?$9$k$?$a$N\e(B4\e$B$D$NJ}K!$,$"$j$^$9!#\e(B
+GroupLens \e$B$G!"5-;v$NCM$rEPO?$9$k$?$a$N;M$D$NJ}K!$,$"$j$^$9!#\e(B
 
 @table @kbd
 
 @item r
 @kindex r (GroupLens)
 @findex bbb-summary-rate-article
-\e$B$3$N4X?t$O\e(B1\e$B$+$i\e(B5\e$B$NHO0O$NCMIU$1$NF~NO$rB%?J$7$^$9!#\e(B
+\e$B$3$N4X?t$O\e(B 1 \e$B$+$i\e(B 5 \e$B$NHO0O$NCMIU$1$NF~NO$rB%?J$7$^$9!#\e(B
 
 @item k
 @kindex k (GroupLens)
 @findex grouplens-score-thread
-\e$B$3$N4X?t$OCMIU$1$NF~NO$rB%?J$7!"%9%l%C%I$NA4$F$N5-;v$rCMIU$1$^$9!#$3$l$O\e(B
-rec.humor \e$B$K$"$k$h$&$J$"$ND9$$4VB3$/%9%l%C%I$KBP$7$FHs>o$KLr$KN)$A$^$9!#\e(B
+\e$B$3$N4X?t$OCMIU$1$NF~NO$rB%?J$7!"%9%l%C%I$NA4$F$N5-;v$rCMIU$1$^$9!#$3$l\e(B
+\e$B$O\e(B rec.humor \e$B$K$"$k$h$&$J$"$ND9$$4VB3$/%9%l%C%I$KBP$7$FHs>o$KLr$KN)$A$^\e(B
+\e$B$9!#\e(B
 
 @end table
 
-\e$B<!$N\e(B2\e$B$D$NL?Na!"\e(B@kbd{n} \e$B$H\e(B @kbd{,} \e$B$O!"$"$J$?$,FI$s$G$$$k5-;v$N%9%3%"$K$J\e(B
-\e$B$k?tCM@\F,0z?t$r$H$j$^$9!#\e(B
+\e$B<!$NFs$D$NL?Na!"\e(B@kbd{n} \e$B$H\e(B @kbd{,} \e$B$O!"$"$J$?$,FI$s$G$$$k5-;v$N%9%3%"$K\e(B
+\e$B$J$k?tCM@\F,0z?t$r$H$j$^$9!#\e(B
 
 @table @kbd
 
@@ -15051,34 +16023,34 @@ rec.humor \e$B$K$"$k$h$&$J$"$ND9$$4VB3$/%9%l%C%I$KBP$7$FHs>o$KLr$KN)$A$^$9!#\e(B
 
 @end table
 
-\e$B$b$78=:_$N5-;v$K%9%3%"\e(B4\e$B$rIU$1!"<!$N5-;v$K0\F0$7$?$$$N$G$"$l$P!"\e(B@kbd{4 n}
-\e$B$HC!$$$F$/$@$5$$!#\e(B
-
+\e$B$b$78=:_$N5-;v$K%9%3%"\e(B 4 \e$B$rIU$1!"<!$N5-;v$K0\F0$7$?$$$N$G$"$l$P!"\e(B
+@kbd{4 n} \e$B$HC!$$$F$/$@$5$$!#\e(B
 
 @node Displaying Predictions
 @subsection \e$BM=8@I=<(\e(B
 
 GroupLens \e$B$O$"$J$?$,%K%e!<%95-;v$r$I$l$/$i$$5$$KF~$k$+$NM=8@$r$7$^$9!#\e(B
-GroupLens \e$B$+$i$NM=8@$O\e(B1\e$B$+$i\e(B5\e$B$NHO0O$K$"$j!"\e(B1\e$B$,:G0-$G\e(B5\e$B$,:GNI$G$9!#\e(B
+GroupLens \e$B$+$i$NM=8@$O\e(B 1 \e$B$+$i\e(B 5 \e$B$NHO0O$K$"$j!"\e(B1 \e$B$,:G0-$G\e(B 5 \e$B$,:GNI$G$9!#\e(B
 GroupLens \e$B$+$i$NM=8@$rJQ?t\e(B @code{gnus-grouplens-override-scoring} \e$B$K$h$C\e(B
-\e$B$F@)8f$5$l$k\e(B3\e$B$D$NFb$N\e(B1\e$B$D$K$h$C$F;H$&;v$,$G$-$^$9!#\e(B
+\e$B$F@)8f$5$l$k;0$D$NFb$N0l$D$K$h$C$F;H$&;v$,$G$-$^$9!#\e(B
 
 @vindex gnus-grouplens-override-scoring
-grouplens \e$B$GM=8@$rI=<($9$k$?$a$K\e(B3\e$B$D$NJ}K!$,$"$j$^$9!#\e(BGroupLens \e$B$N%9%3%"\e(B
+grouplens \e$B$GM=8@$rI=<($9$k$?$a$K;0$D$NJ}K!$,$"$j$^$9!#\e(BGroupLens \e$B$N%9%3%"\e(B
 \e$B$rIaDL$N\e(B gnus \e$B%9%3%"5!9=$K9W8%$9$k$+!">e=q$-$9$k$+$rA*$V;v$,$G$-$^$9!#>e\e(B
 \e$B=q$-$,=i4|@_Dj$G$9!#$7$+$7!"\e(Bgnus \e$B$N%9%3%"$r\e(B grouplens \e$B$N%9%3%"$KB-$9$N$r\e(B
 \e$B9%$`?M$b$$$^$9!#J,N%%9%3%"$N?6$kIq$$$rF@$k$?$a$K$O!"\e(B
 @code{gnus-grouplens-override-scoring} \e$B$r\e(B @code{'separate} \e$B$K@_Dj$9$kI,\e(B
 \e$BMW$,$"$j$^$9!#\e(BGroupLens \e$B$NM=8@$H\e(B grouplens \e$B%9%3%"$r7k9g$9$k$?$a$K$O$=$l\e(B
-\e$B$r\e(B @code{'override} \e$B$K@_Dj$7!"%9%3%"$r7k9g$9$k$?$a$K$O\e(B
-@code{gnus-grouplens-override-scoring} \e$B$r\e(B @code{'combine} \e$B$K@_Dj$7$^$9!#\e(B
-\e$B7k9gIU2C5!G=$rMQ$$$k$H$-$O!"\e(B@code{grouplens-prediction-offset} \e$B$H\e(B
-@code{grouplens-score-scale-factor} \e$B$NCM$r@_Dj$7$?$$$H;W$&$G$7$g$&!#\e(B
+\e$B$r\e(B @code{'override} \e$B$K@_Dj$7!"%9%3%"$r7k9g$9$k$?$a$K\e(B
+\e$B$O\e(B @code{gnus-grouplens-override-scoring} \e$B$r\e(B @code{'combine} \e$B$K@_Dj$7$^\e(B
+\e$B$9!#7k9gIU2C5!G=$rMQ$$$k$H$-$O!"\e(B
+@code{grouplens-prediction-offset} \e$B$H\e(B @code{grouplens-score-scale-factor} \e$B$N\e(B
+\e$BCM$r@_Dj$7$?$$$H;W$&$G$7$g$&!#\e(B
 
 @vindex grouplens-prediction-display
-\e$B$I$A$i$N>l9g$G$b!"\e(BGroupLens \e$B$O\e(B2,3\e$B$NM=8@$,$I$N$h$&I=<($5$l$?$$$+$NA*Br$r\e(B
-\e$BM?$($^$9!#M=8@$NI=<($OJQ?t\e(B @code{grouplens-prediction-display} \e$B$K$h$C$F\e(B
-\e$B@)8f$5$l$^$9!#\e(B
+\e$B$I$A$i$N>l9g$G$b!"\e(BGroupLens \e$B$OFs!";0$NM=8@$,$I$N$h$&I=<($5$l$?$$$+$NA*Br\e(B
+\e$B$rM?$($^$9!#M=8@$NI=<($OJQ?t\e(B @code{grouplens-prediction-display} \e$B$K$h$C\e(B
+\e$B$F@)8f$5$l$^$9!#\e(B
 
 \e$B0J2<$N$b$N$,$=$NJQ?t$GM-8z$JCM$G$9!#\e(B
 
@@ -15106,7 +16078,6 @@ grouplens \e$B$GM=8@$rI=<($9$k$?$a$K\e(B3\e$B$D$NJ}K!$,$"$j$^$9!#\e(BGroupLens \e$B$N
 
 @end table
 
-
 @node GroupLens Variables
 @subsection GroupLens \e$BJQ?t\e(B
 
@@ -15122,47 +16093,45 @@ bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$G$9!#\e(B@samp{goruplens.cs.umn.edu} \e$B$,
 \e$B=i4|@_Dj$G$9!#\e(B
 
 @item grouplens-bbb-port
-bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B9000\e$B$G$9!#\e(B
+bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B 9000 \e$B$G$9!#\e(B
 
 @item grouplens-score-offset
 \e$BM=8@$+$i:9$70z$-$5$l$kCM$G$9!#$D$^$j!"0UL#$N$"$k%9%3%"$K$9$k$?$a$KM=8@$N\e(B
-\e$BCM$+$i$3$N?t;z$r0z$-;;$7$^$9!#=i4|CM$O\e(B0\e$B$G$9!#\e(B
+\e$BCM$+$i$3$N?t;z$r0z$-;;$7$^$9!#=i4|CM$O\e(B 0 \e$B$G$9!#\e(B
 
 @item grouplens-score-scale-factor
 \e$BMxMQ<T$O$3$NJQ?t$r;H$C$F\e(B GroupLens \e$B$N%9%3%"$r3HBg$9$k;v$,$G$-$^$9!#3]$1\e(B
-\e$B;;$NMWAG$O:9$70z$-$N8e$KE,MQ$5$l$^$9!#=i4|CM$O\e(B1\e$B$G$9!#\e(B
+\e$B;;$NMWAG$O:9$70z$-$N8e$KE,MQ$5$l$^$9!#=i4|CM$O\e(B 1 \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Advanced Scoring
 @section \e$B>e5i%9%3%"IU$1\e(B
 
 \e$BI=Bj$d\e(B From \e$B%X%C%@!<$K%9%3%"$rIU$1$k$N$O==J,AGE($G$9$,!"$"$k?MFCDj$NBj$K\e(B
-\e$B4X$7$F8@$C$F$$$k;v$K$@$1K\Ev$K6=L#$,$"$k>l9g$O$I$&$9$l$PNI$$$N$G$7$g$&!)\e(B
-\e$B$b$7$/$O!"\e(BA\e$B$5$s$,\e(B B\e$B$5$s$K%U%)%m!<%"%C%W$7$F$$$k$H$-$K8@$C$F$$$k;v$rFI$_\e(B
-\e$B$?$/$J$$$1$l$I!"\e(BC\e$B$5$s$K%U%)%m!<%"%C%W$7$F$$$k$H$-$O2?$r8@$C$F$$$k$+$rCN\e(B
-\e$B$j$?$$$H$$$&>l9g$O!)\e(B
+\e$B4X$7$F8@$C$F$$$k;v$K$@$1K\Ev$K6=L#$,$"$k>l9g$O$I$&$9$l$PNI$$$N$G$7$g\e(B
+\e$B$&\e(B? \e$B$b$7$/$O!"\e(BA \e$B$5$s$,\e(B B \e$B$5$s$K%U%)%m!<%"%C%W$7$F$$$k$H$-$K8@$C$F$$$k;v\e(B
+\e$B$rFI$_$?$/$J$$$1$l$I!"\e(BC\e$B$5$s$K%U%)%m!<%"%C%W$7$F$$$k$H$-$O2?$r8@$C$F$$$k\e(B
+\e$B$+$rCN$j$?$$$H$$$&>l9g$O\e(B?
 
 \e$B>e5i%9%3%"K!B'$r;H$&;v$G!"G$0U$NJ#;($J%9%3%"$NIU$1J}$r:n@.$9$k;v$,$G$-$^\e(B
 \e$B$9!#\e(B
 
 @menu
-* Advanced Scoring Syntax::     \e$BDj5A!#\e(B
-* Advanced Scoring Examples::   \e$B$I$N$h$&$K8+$($k$+!#\e(B
-* Advanced Scoring Tips::       \e$B$=$l$r:GBg8BMxMQ$9$k!#\e(B
+* Advanced Scoring Syntax::   \e$BDj5A\e(B
+* Advanced Scoring Examples:: \e$B$I$N$h$&$K8+$($k$+\e(B
+* Advanced Scoring Tips::     \e$B$=$l$r:GBg8BMxMQ$9$k\e(B
 @end menu
 
-
 @node Advanced Scoring Syntax
 @subsection \e$B>e5i%9%3%"IU$19=J8\e(B
 
 \e$BIaDL$N%9%3%"K!B'$OK!B'$N:G=i$NMWAG$KJ8;zNs$,$"$j$^$9!#>e5i%9%3%"IU$1K!B'\e(B
-\e$B$O:G=i$NMWAG$K%j%9%H$,$"$j$^$9!#\e(B2\e$BHVL\$N%j%9%H$O:G=i$NMWAG$,\e(B @code{nil}
-\e$B$G$J$$CM$KI>2A$5$l$?$H$-$KE,MQ$5$l$^$9!#\e(B
+\e$B$O:G=i$NMWAG$K%j%9%H$,$"$j$^$9!#FsHVL\$N%j%9%H$O:G=i$NMWAG\e(B
+\e$B$,\e(B @code{nil} \e$B$G$J$$CM$KI>2A$5$l$?$H$-$KE,MQ$5$l$^$9!#\e(B
 
-\e$B$3$l$i$N%j%9%H$O\e(B3\e$B$D$NO@M}:nMQ;R$+$i$J$C$F$*$j!"$=$l$i$O\e(B1\e$BJ}8~:nMQ;R$G!"?'!9\e(B
-\e$B$J9gCW:nMQ;R$G$9!#\e(B
+\e$B$3$l$i$N%j%9%H$O;0$D$NO@M}:nMQ;R$+$i$J$C$F$*$j!"$=$l$i$O0lJ}8~:nMQ;R$G!"\e(B
+\e$B?'!9$J9gCW:nMQ;R$G$9!#\e(B
 
 \e$BO@M}:nMQ;R\e(B:
 
@@ -15176,12 +16145,12 @@ bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B9000\e$B$G$9!#\e(B
 @item |
 @itemx or
 \e$B$3$NO@M}:nMQ;R$O$=$l$>$l$N0z?t$r\e(B @code{true} \e$B$KI>2A$5$l$k$b$N$r8+$D$1$k\e(B
-\e$B$^$GI>2A$7$^$9!#$b$7$I$N0z?t$b\e(B @code{true} \e$B$G$J$$$H!"$3$N:nMQ;R$O\e(B
-@code{false} \e$B$rJV$7$^$9!#\e(B
+\e$B$^$GI>2A$7$^$9!#$b$7$I$N0z?t$b\e(B @code{true} \e$B$G$J$$$H!"$3$N:nMQ;R\e(B
+\e$B$O\e(B @code{false} \e$B$rJV$7$^$9!#\e(B
 
 @item !
 @itemx not
-@itemx ¬
+@itemx \e.A\eN,
 \e$B$3$NO@M}:nMQ;R$OC10l$N0z?t$N$_$r$H$j$^$9!#$=$l$O$=$N0z?t$NCM$NO@M}H]Dj$r\e(B
 \e$BJV$7$^$9!#\e(B
 
@@ -15198,7 +16167,6 @@ bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B9000\e$B$G$9!#\e(B
 \e$B:nMQ;R$O\e(B @samp{("form" "Lars Ingebrigtsen" s)} \e$B$N$h$&$J$b$N$G$9!#%X%C%@!<\e(B
 \e$BL>$OC1=c$J%9%3%"IU$1$r$9$k$H$-$N$b$N$HF1$8$G!"9gCW$N7?$bF1$8$G$9!#\e(B
 
-
 @node Advanced Scoring Examples
 @subsection \e$B>e5i%9%3%"IU$1$NNc\e(B
 
@@ -15212,7 +16180,7 @@ Lars \e$B$,\e(B Gnus \e$B$K4X$7$FOC$r$7$F$$$k$H$-$KH`$K$h$C$F=q$+$l$?5-;v$N%9%3%"$r
  1000)
 @end example
 
-\e$B$M!"$H$F$bC1=c$G$7$g!)\e(B
+\e$B$M!"$H$F$bC1=c$G$7$g\e(B?
 
 \e$BD9$$5-;v$r=q$$$F$$$k$H$-$O!";~!92?$+AGE($J;v$r8@$$$^$9\e(B:
 
@@ -15253,18 +16221,18 @@ Redmondo \e$B$,>C$($?7$2<$K$D$$$F=q$$$?$H$-$K%U%)%m!<%"%C%W$7$?A4$F$N?M$O%9\e(B
 
 \e$B2DG=@-$OL58BBg$G$9!#\e(B
 
-
 @node Advanced Scoring Tips
 @subsection \e$B>e5i%9%3%"$N$A$g$C$H$7$?Hk7m\e(B
 
 @code{&} \e$B$H\e(B @code{|} \e$BO@M}:nMQ;R$O!"C;=L2sO)O@M}$r9T$$$^$9!#$9$J$o$A!"$=\e(B
 \e$B$N:nMQ$N7k2L$,L@$i$+$K$J$C$F;~E@$G!"0z?t$r<B9T2aDx$K$+$1$k;v$r;_$a$^$9!#\e(B
 \e$BNc$($P!"\e(B@code{&} \e$B$N0z?t$NI>2A$,\e(B @code{false} \e$B$K$J$k$H!";D$j$N0z?t$rI>2A\e(B
-\e$B$9$kL\E*$OB8:_$7$J$/$J$j$^$9!#$3$l$OCY$$9gCW\e(B (@samp{body} \e$B$d\e(B
-@samp{header}) \e$B$r:G8e$K;}$C$F$-$F!"B.$$9gCW\e(B (@samp{from} \e$B$d\e(B
-@samp{subject}) \e$B$r:G=i$K;}$C$F$/$k$Y$-$G$"$k$H$$$&;v$r0UL#$7$^$9!#\e(B
+\e$B$9$kL\E*$OB8:_$7$J$/$J$j$^$9!#$3$l$OCY$$9g\e(B
+\e$BCW\e(B (@samp{body} \e$B$d\e(B @samp{header}) \e$B$r:G8e$K;}$C$F$-$F!"B.$$9g\e(B
+\e$BCW\e(B (@samp{from} \e$B$d\e(B @samp{subject}) \e$B$r:G=i$K;}$C$F$/$k$Y$-$G$"$k$H$$$&;v\e(B
+\e$B$r0UL#$7$^$9!#\e(B
 
-\e$B4V@\:nMQ;R\e(B (@code{1-} \e$B$J$I\e(B) \e$B$O$=$l$i$N0z?t$r%9%l%C%I$N\e(B1\e$B@$BeA0$K:nMQ$9$k\e(B
+\e$B4V@\:nMQ;R\e(B (@code{1-} \e$B$J$I\e(B) \e$B$O$=$l$i$N0z?t$r%9%l%C%I$N0l@$BeA0$K:nMQ$9$k\e(B
 \e$B$h$&$K$7$^$9!#<!$N$h$&$J;v$r$9$l$P\e(B:
 
 @example
@@ -15293,7 +16261,6 @@ Redmondo \e$B$,>C$($?7$2<$K$D$$$F=q$$$?$H$-$K%U%)%m!<%"%C%W$7$?A4$F$N?M$O%9\e(B
  (1- ("subject" "Gnus")))
 @end example
 
-
 @node Score Decays
 @section \e$B%9%3%"IeGT\e(B
 @cindex score decays
@@ -15308,7 +16275,7 @@ Redmondo \e$B$,>C$($?7$2<$K$D$$$F=q$$$?$H$-$K%U%)%m!<%"%C%W$7$?A4$F$N?M$O%9\e(B
 @findex gnus-decay-score
 @vindex gnus-decay-score-function
 Gnus \e$B$O$3$NLdBj$N2r7h$r=u$1$k$?$a$K%9%3%"$rIe$i$;$k5!9=$rDs6!$7$^$9!#%9\e(B
-\e$B%3%"%U%!%$%k$OFI$_9~$^$l!"\e(B @code{gnus-decay-scores} \e$B$,\e(B @code{nil} \e$B$G$J$$\e(B
+\e$B%3%"%U%!%$%k$OFI$_9~$^$l!"\e(B@code{gnus-decay-scores} \e$B$,\e(B @code{nil} \e$B$G$J$$\e(B
 \e$B$H!"\e(Bgnus \e$B$O%9%3%"%U%!%$%k$rIeGT5!9=$rDL$7!"A4$F$N1JB3$G$J$$%9%3%"K!B'$N\e(B
 \e$B%9%3%"$r2<$2$^$9!#IeGT<+?H$O4X?t\e(B @code{gnus-decay-score-function} \e$B$K$h$C\e(B
 \e$B$F<B9T$5$l!"=i4|@_Dj$O\e(B @code{gnus-decay-score} \e$B$G$9!#0J2<$O$=$N4X?t$NDj\e(B
@@ -15330,54 +16297,53 @@ and `gnus-score-decay-scale'."
 
 @vindex gnus-score-decay-scale
 @vindex gnus-score-decay-constant
-@code{gnus-score-decay-constant} \e$B$O=i4|CM$H$7$F\e(B3\e$B$r;}$A$G!"\e(B
-@code{gnus-score-decay-scale} \e$B$O=i4|CM$H$7$F\e(B0.05\e$B$r;}$A$^$9!#$3$l$O0J2<$N\e(B
-\e$B$h$&$J;v$r0z$-5/$3$7$^$9\e(B:
+@code{gnus-score-decay-constant} \e$B$O=i4|CM$H$7$F\e(B 3 \e$B$r;}$A$G!"\e(B
+@code{gnus-score-decay-scale} \e$B$O=i4|CM$H$7$F\e(B 0.05 \e$B$r;}$A$^$9!#$3$l$O0J2<\e(B
+\e$B$N$h$&$J;v$r0z$-5/$3$7$^$9\e(B:
 
 @enumerate
 @item
--3\e$B$+$i\e(B3\e$B$N4V$N%9%3%"$O$3$N4X?t$,8F$P$l$?$H$-$K\e(B0\e$B$K@_Dj$5$l$^$9!#\e(B
+-3 \e$B$+$i\e(B 3 \e$B$N4V$N%9%3%"$O$3$N4X?t$,8F$P$l$?$H$-$K\e(B 0 \e$B$K@_Dj$5$l$^$9!#\e(B
 
 @item
-3\e$B$+$i\e(B60\e$B$^$G$N4V$NBg$-$5$N%9%3%"$O\e(B3\e$B$D8:$i$5$l$^$9!#\e(B
+3 \e$B$+$i\e(B 60 \e$B$^$G$N4V$NBg$-$5$N%9%3%"$O;0$D8:$i$5$l$^$9!#\e(B
 
 @item
-60\e$B$h$jBg$-$$%9%3%"$O%9%3%"$N\e(B5%\e$B$K8:$i$5$l$^$9!#\e(B
+60 \e$B$h$jBg$-$$%9%3%"$O%9%3%"$N\e(B 5% \e$B$K8:$i$5$l$^$9!#\e(B
 @end enumerate
 
 \e$B$b$7$3$NIeGT4X?t$r9%$-$G$J$$$J$i!"<+J,<+?H$N4X?t$r=q$$$F$/$@$5$$!#$=$l$O\e(B
 \e$BIeGT$9$k$Y$-%9%3%"$rM#0l$N0z?t$H$7$F8F$P$l!"@0?t$G$"$k$Y$-?7$7$$%9%3%"$r\e(B
 \e$BJV$5$J$1$l$P$J$j$^$;$s!#\e(B
 
-Gnus \e$B$O\e(B1\e$BF|$K\e(B1\e$B2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus \e$B$r\e(B4\e$BF|4V<B\e(B
-\e$B9T$7$F$$$J$$$H!"\e(Bgnus \e$B$O\e(B4\e$B2s%9%3%"$rIe$i$;$^$9!#\e(B
-
+Gnus \e$B$O0lF|$K0l2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus \e$B$r;MF|\e(B
+\e$B4V<B9T$7$F$$$J$$$H!"\e(Bgnus \e$B$O;M2s%9%3%"$rIe$i$;$^$9!#\e(B
 
 @node Various
 @chapter \e$B$$$m$$$m\e(B
 
 @menu
-* Process/Prefix::             \e$BB?$/$N07$$L?Na$G;H$o$l$k=,47!#\e(B
-* Interactive::                Gnus \e$B$KB?$/$N<ALd$r?R$M$5$;$k!#\e(B
-* Symbolic Prefixes::          \e$B$$$/$D$+$N\e(B gnus \e$B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!!#\e(B
-* Formatting Variables::       \e$B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v$,$G$-$k!#\e(B
-* Windows Configuration::      Gnus \e$B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k!#\e(B
-* Faces and Fonts::            \e$B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k!#\e(B
-* Compilation::                \e$B$I$N$h$&$K$7$F\e(B gnus \e$B$NB.EY$r>e$2$k$+!#\e(B
-* Mode Lines::                 \e$B%b!<%I9T$K>pJs$rI=<($9$k!#\e(B
-* Highlighting and Menus::     \e$B%P%C%U%!$rAGE($G?4CO$h$/8+$;$k!#\e(B
-* Buttons::                    \e$B4JC1$J\e(B10\e$BJb$G%"%-%l%9g'$rF@$k!#\e(B
-* Daemons::                    Gnus \e$B$O$"$J$?$NN"$GJ*;v$r<B9T$9$k;v$,$G$-$k!#\e(B
-* NoCeM::                      Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!!#\e(B
-* Undo::                       \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k!#\e(B
-* Moderation::                 \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+!#\e(B
-* XEmacs Enhancements::        XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_$9$k!#\e(B
-* Fuzzy Matching::             \e$BBg$-$JLJLS$C$F2?!)\e(B
-* Thwarting Email Spam::       \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!!#\e(B
-* Various Various::            \e$BK\Ev$K$$$m$$$m$J$b$N!#\e(B
+* Process/Prefix::         \e$BB?$/$N07$$L?Na$G;H$o$l$k=,47\e(B
+* Interactive::            Gnus \e$B$KB?$/$N<ALd$r?R$M$5$;$k\e(B
+* Symbolic Prefixes::      \e$B$$$/$D$+$N\e(B gnus \e$B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!\e(B
+* Formatting Variables::   \e$B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v\e(B
+                           \e$B$,$G$-$k\e(B
+* Windows Configuration::  Gnus \e$B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k\e(B
+* Faces and Fonts::        \e$B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k\e(B
+* Compilation::            \e$B$I$N$h$&$K$7$F\e(B gnus \e$B$NB.EY$r>e$2$k$+\e(B
+* Mode Lines::             \e$B%b!<%I9T$K>pJs$rI=<($9$k\e(B
+* Highlighting and Menus:: \e$B%P%C%U%!$rAGE($G?4CO$h$/8+$;$k\e(B
+* Buttons::                \e$B4JC1$J==Jb$G%"%-%l%9g'$rF@$k\e(B
+* Daemons::                Gnus \e$B$O$"$J$?$NN"$GJ*;v$r<B9T$9$k;v$,$G$-$k\e(B
+* NoCeM::                  Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!\e(B
+* Undo::                   \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k\e(B
+* Moderation::             \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+\e(B
+* XEmacs Enhancements::    XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_$9$k\e(B
+* Fuzzy Matching::         \e$BBg$-$JLJLS$C$F2?\e(B?
+* Thwarting Email Spam::   \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!\e(B
+* Various Various::        \e$BK\Ev$K$$$m$$$m$J$b$N\e(B
 @end menu
 
-
 @node Process/Prefix
 @section \e$B%W%m%;%9\e(B/\e$B@\F,0z?t\e(B
 @cindex process/prefix convention
@@ -15390,14 +16356,13 @@ Gnus \e$B$O\e(B1\e$BF|$K\e(B1\e$B2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus
 \e$B$=$l$O$3$N$h$&$J46$8$G$9\e(B:
 
 \e$B$b$7?tCM@\F,0z?t$,\e(B N \e$B$G$"$k$H!"8=:_$N5-;v$+$i;O$a$F!"<!$N\e(B N \e$B5-;v$K:n6H$r\e(B
-\e$B<B9T$7$^$9!#$b$7?tCM@\F,0z?t$,Ii$G$"$k$H!"8=:_$N5-;v$+$i;O$a$F!"A0$N\e(B N
-\e$B5-;v$K:n6H$r<B9T$7$^$9!#\e(B
+\e$B<B9T$7$^$9!#$b$7?tCM@\F,0z?t$,Ii$G$"$k$H!"8=:_$N5-;v$+$i;O$a$F!"A0\e(B
+\e$B$N\e(B N \e$B5-;v$K:n6H$r<B9T$7$^$9!#\e(B
 
 @vindex transient-mark-mode
 @code{transient-mark-mode} \e$B$,\e(B @code{nil} \e$B$G$J$/!"%j!<%8%g%s$,A`:n$5$l$F\e(B
 \e$B$$$k$H!"%j!<%8%g%s$K$"$kA4$F$N5-;v$K:n6H$,$J$5$l$^$9!#\e(B
 
-
 \e$B$b$7@\F,0z?t$,L5$$$1$l$I!"$$$/$D$+$N5-;v$O%W%m%;%90u$,IU$$$F$$$k$H$$$&>l\e(B
 \e$B9g$O!"%W%m%;%90u$NIU$$$F$$$k5-;v$K:n6H$,<B9T$5$l$^$9!#\e(B
 
@@ -15408,17 +16373,22 @@ Gnus \e$B$O\e(B1\e$BF|$K\e(B1\e$B2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus
 \e$B$/I,MW$,$"$k$N$G$9!#\e(B
 
 \e$B%W%m%;%90u$KH?1~$9$k5-;v$O8=:_$N%W%m%;%90u$NIU$$$F$$$k5-;v$N%j%9%H$r%9%?%C\e(B
-\e$B%/$K@Q$_!"A4$F$N%W%m%;%90u$N5-;v$N%j%9%H$r>C5n$7$^$9!#A02s$N@_Dj$r\e(B
-@kbd{M P y} \e$B$GI|5l$5$;$k;v$,$G$-$^$9\e(B (@pxref{Setting Process Marks})\e$B!#\e(B
+\e$B%/$K@Q$_!"A4$F$N%W%m%;%90u$N5-;v$N%j%9%H$r>C5n$7$^$9!#A02s$N@_Dj\e(B
+\e$B$r\e(B @kbd{M P y} \e$B$GI|5l$5$;$k;v$,$G$-$^$9\e(B (@pxref{Setting Process Marks})\e$B!#\e(B
 
 @vindex gnus-summary-goto-unread
 \e$BB?$/$N?M!9$r6C$+$;!"62$,$i$;$k$H;W$o$l$k$3$H$O!"Nc$($P!"\e(B@kbd{3 d} \e$B$OK\Ev\e(B
 \e$B$K\e(B @kbd{d} @kbd{d} @kbd{d} \e$B$HF1$8;v$r$9$k;v$G$9!#$=$l$>$l$N\e(B @kbd{d} (\e$B$3\e(B
 \e$B$l$O8=:_$N5-;v$K4{FI$N0u$rIU$1$^$9\e(B) \e$B$O=i4|@_Dj$G$O0u$rIU$1$?8e$K<!$NL$FI\e(B
-\e$B5-;v$K0\F0$9$k$N$G!"\e(B@kbd{3 d} \e$B$O35N,%P%C%U%!$,$I$N$h$&$G$"$C$F$b!"<!$N\e(B3
-\e$B$D$NL$FI5-;v$r4{FI$K$7$^$9!#$b$C$HJ,$+$j$d$9$$F0:n$N$?$a$K$O\e(B
-@code{gnus-summary-goto-unread} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
-
+\e$B5-;v$K0\F0$9$k$N$G!"\e(B@kbd{3 d} \e$B$O35N,%P%C%U%!$,$I$N$h$&$G$"$C$F$b!"<!\e(B
+\e$B$N;0$D$NL$FI5-;v$r4{FI$K$7$^$9!#$b$C$HJ,$+$j$d$9$$F0:n$N$?$a$K\e(B
+\e$B$O\e(B @code{gnus-summary-goto-unread} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+\e$BB?$/$N%3%^%s%I$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H$$$^$;$s!#$H$$$&$3$H$O!"$3$N\e(B
+\e$B%^%K%e%"%k$G$O$C$-$j$H=R$Y$F$$$^$9!#%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$r;H$o$J$$%3\e(B
+\e$B%^%s%I$KE,MQ$9$k$K$O!"\e(B@kbd{M-&} \e$B%3%^%s%I$r;H$$$^$7$g$&!#Nc$($P!"$=$N%0%k!<\e(B
+\e$B%W$N$9$Y$F$N5-;v$r4|8B@Z$l:o=|2DG=$H$7$F0u$rIU$1$k$K$O\e(B `M P b M-& E' \e$B$H\e(B
+\e$B$7$^$9!#\e(B
 
 @node Interactive
 @section \e$BBPOCE*\e(B
@@ -15430,7 +16400,7 @@ Gnus \e$B$O\e(B1\e$BF|$K\e(B1\e$B2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus
 @vindex gnus-novice-user
 \e$B$b$7$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"$"$J$?$O\e(B Usenet \e$B$N@$3&$K?7$7$/F~$C$F\e(B
 \e$BMh$??M$G$"$k$+!"Hs>o$K?5=E$J?M$G!"$3$l$OK\Ev$KNI$$;v$G$9!#2?$+4m81$J;v$r\e(B
-\e$B$9$kA0$K!"\e(B``\e$BK\Ev$K$3$l$r$7$?$$$N$G$9$+!)\e(B'' \e$B$H$$$&$h$&$J<ALd$r<u$1$^$9!#\e(B
+\e$B$9$kA0$K!"\e(B``\e$BK\Ev$K$3$l$r$7$?$$$N$G$9$+\e(B?'' \e$B$H$$$&$h$&$J<ALd$r<u$1$^$9!#\e(B
 \e$B$3$l$O=i4|@_Dj$G$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @item gnus-expert-user
@@ -15449,32 +16419,33 @@ Gnus \e$B$O\e(B1\e$BF|$K\e(B1\e$B2s%9%3%"$rIeGT$5$;$h$&$H$7$^$9!#Nc$($P!"$b$7\e(B gnus
 Gnus \e$B$r=*N;$9$kA0$K3NG'$rMW5a$7$^$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
 @end table
 
-
 @node Symbolic Prefixes
 @section \e$B%7%s%\%k$N@\F,0z?t\e(B
 @cindex symbolic prefixes
 
 \e$BHs>o$KB?$/$N\e(B Emacs \e$B$NL?Na$O\e(B (\e$B?tCM\e(B) \e$B@\F,0z?t$KH?1~$7$^$9!#Nc$($P!"\e(B
-@kbd{C-u 4 C-f} \e$B$O%]%$%s%H$r\e(B4\e$BJ8;z@h$K0\F0$7!"\e(B@kbd{C-u 9 0 0 I s s p} \e$B$O\e(B
-\e$B1JB3\e(B @code{Suject} \e$BJ8;zNs$N0lIt%9%3%"K!B'$N\e(B900\e$B$r8=:_$N5-;v$K2C$($^$9!#\e(B
+@kbd{C-u 4 C-f} \e$B$O%]%$%s%H$r\e(B 4 \e$BJ8;z@h$K0\F0$7!"\e(B
+@kbd{C-u 9 0 0 I s s p} \e$B$O1JB3\e(B @code{Suject} \e$BJ8;zNs$N0lIt%9%3%"K!B'\e(B
+\e$B$N\e(B 900 \e$B$r8=:_$N5-;v$K2C$($^$9!#\e(B
 
 \e$B$3$l$OAGE($GNI$$$N$G$9$,!"L?Na$K$b$&>/$7DI2C$N>pJs$rM?$($?$$$H$-$O$I$&$9\e(B
-\e$B$l$PNI$$$N$G$7$g$&!)$(!<$H!"$?$$$F$$$NL?Na$,$7$F$$$k;v$O!"\e(B``\e$B@8$N\e(B'' \e$B@\F,\e(B
+\e$B$l$PNI$$$N$G$7$g$&\e(B? \e$B$(!<$H!"$?$$$F$$$NL?Na$,$7$F$$$k;v$O!"\e(B``\e$B@8$N\e(B'' \e$B@\F,\e(B
 \e$B0z?t$rFCJL$JJ}K!$G2r<a$9$k;v$G$9!#Nc$($P!"\e(B@kbd{C-u 0 C-x C-s} \e$B$O8=:_$N5-\e(B
 \e$B;v$rJ]B8$9$k$H$-$K%P%C%/%"%C%W%U%!%$%k$r:n$i$J$$$GM_$7$$$H$$$&$3$H$r0UL#\e(B
 \e$B$7$^$9!#$G$b!"%P%C%/%"%C%W%U%!%$%k$r:n$i$J$$$GJ]B8$7!"F1;~$K\e(B Emacs \e$B$K8w$C\e(B
-\e$B$FM_$7$/!"AGE($J2;3Z$r1iAU$7$FM_$7$$$H$-$O$I$&$9$l$PNI$$$G$7$g$&!)$=$l$O\e(B
+\e$B$FM_$7$/!"AGE($J2;3Z$r1iAU$7$FM_$7$$$H$-$O$I$&$9$l$PNI$$$G$7$g$&\e(B? \e$B$=$l$O\e(B
 \e$BIT2DG=$G!"$*$=$i$/$=$l$,IT2DG=$G$"$C$F$b$"$J$?$O9,$;$G$7$g$&!#\e(B
 
 @kindex M-i (\e$B35N,\e(B)
 @findex gnus-symbolic-argument
-\e$B;d$O$=$&$G$O$"$j$^$;$s!#$G$9$+$i!";d$O\e(B2\e$B$D$a$N@\F,0z?t\e(B---@dfn{\e$B%7%s%\%k@\\e(B
-\e$BF,0z?t\e(B} \e$B$r2C$($^$7$?!#@\F,%-!<$O\e(B @kbd{M-i}
-(@code{gnus-symbolic-argument}) \e$B$G!"<!$K2!$5$l$kJ8;z$,CM$G$9!#K>$`$@$1B?\e(B
-\e$B$/$N\e(B @kbd{M-i} \e$B@\F,8l$r@Q$_=E$M$k;v$,$G$-$^$9!#\e(B@kbd{M-i a M-C-u} \e$B$O\e(B ``\e$BL?\e(B
-\e$BNa\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$rM?$($k\e(B'' \e$B$H$$$&$3$H$G$9!#\e(B
-@kbd{M-i a M-i b M-C-u} \e$B$OL?Na\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a}
-@code{b} \e$B$rM?$($k\e(B'' \e$B$H$$$&;v$G$9!#<q;]$OJ,$+$C$?$G$7$g$&!#\e(B
+\e$B;d$O$=$&$G$O$"$j$^$;$s!#$G$9$+$i!";d$OFs$D$a$N@\F,0z\e(B
+\e$B?t\e(B---@dfn{\e$B%7%s%\%k@\F,0z?t\e(B} \e$B$r2C$($^$7$?!#@\F,%-!<\e(B
+\e$B$O\e(B @kbd{M-i} (@code{gnus-symbolic-argument}) \e$B$G!"<!$K2!$5$l$kJ8;z$,CM$G\e(B
+\e$B$9!#K>$`$@$1B?$/$N\e(B @kbd{M-i} \e$B@\F,8l$r@Q$_=E$M$k;v$,$G$-$^$9!#\e(B
+@kbd{M-i a M-C-u} \e$B$O\e(B ``\e$BL?Na\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$rM?\e(B
+\e$B$($k\e(B'' \e$B$H$$$&$3$H$G$9!#\e(B@kbd{M-i a M-i b M-C-u} \e$B$OL?Na\e(B @kbd{M-C-u} \e$B$K%7%s\e(B
+\e$B%\%k@\F,0z?t\e(B @code{a} @code{b} \e$B$rM?$($k\e(B'' \e$B$H$$$&;v$G$9!#<q;]$OJ,$+$C$?$G\e(B
+\e$B$7$g$&!#\e(B
 
 \e$B%7%s%\%k@\F,0z?t$r<u$1IU$1$J$$L?Na$K$=$l$rBG80$9$k;v$O2?$b0-$$;v$r$7$^$;\e(B
 \e$B$s$,!"NI$$;v$b2?$b$7$^$;$s!#8=:_$N$H$3$m!"$"$^$jB?$/$N4X?t$,%7%s%\%k@\F,\e(B
@@ -15483,36 +16454,31 @@ Gnus \e$B$r=*N;$9$kA0$K3NG'$rMW5a$7$^$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9
 \e$B$b$7$I$N$h$&$K\e(B gnus \e$B$,$3$l$r<BAu$7$F$$$k$+$K6=L#$,$"$k$J$i!"\e(B
 @pxref{Extended Interactive} \e$B$r8+$F$/$@$5$$!#\e(B
 
-
 @node Formatting Variables
 @section \e$B=qK!;EMMJQ?t\e(B
 @cindex formatting variables
 
-\e$B$3$N%^%K%e%"%k$rDL$7$F!"$"$J$?$O$*$=$i$/\e(B @code{gnus-group-line-format}
-\e$B$d\e(B @code{gnus-summary-mode-line-format} \e$B$N$h$&$K8F$P$l$k$?$/$5$s$NJQ?t$,\e(B
-\e$B$"$k;v$K5$IU$$$?$G$7$g$&!#$3$l$i$O\e(B gnus \e$B$,?'!9$J%P%C%U%!$G$I$N$h$&$K9T$r\e(B
-\e$B=PNO$9$k$+$r@)8f$7$^$9!#Hs>o$K$?$/$5$s$N$b$N$,$"$j$^$9!#9,1?$J;v$K!"$=$l\e(B
-\e$B$i$O$9$Y$FF1$89=J8$r;H$$$^$9$N$G!"$"$^$j7y$JL\$K$O2q$o$J$$$G$7$g$&!#\e(B
+\e$B$3$N%^%K%e%"%k$rDL$7$F!"$"$J$?$O$*$=$i\e(B
+\e$B$/\e(B @code{gnus-group-line-format} \e$B$d\e(B @code{gnus-summary-mode-line-format} \e$B$N\e(B
+\e$B$h$&$K8F$P$l$k$?$/$5$s$NJQ?t$,$"$k;v$K5$IU$$$?$G$7$g$&!#$3$l$i$O\e(B gnus \e$B$,\e(B
+\e$B?'!9$J%P%C%U%!$G$I$N$h$&$K9T$r=PNO$9$k$+$r@)8f$7$^$9!#Hs>o$K$?$/$5$s$N$b\e(B
+\e$B$N$,$"$j$^$9!#9,1?$J;v$K!"$=$l$i$O$9$Y$FF1$89=J8$r;H$$$^$9$N$G!"$"$^$j7y\e(B
+\e$B$JL\$K$O2q$o$J$$$G$7$g$&!#\e(B
 
 \e$B=qK!;EMM\e(B (format) \e$B;XDj$NNc$,$"$j$^$9\e(B (\e$B%0%k!<%W%P%C%U%!$h$j\e(B):
 @samp{%M%S%5y: %(%g%)\n}\e$B!#$=$l$O<B:]$KHs>o$K=9$/!"$?$/$5$s$N%Q!<%;%s%H5-\e(B
 \e$B9f$,$I$3$K$G$b$"$j$^$9!#\e(B
 
 @menu
-* Formatting Basics::     \e$B=qK!;EMMJQ?t$O4pK\E*$K=qK!;XDjJ8;zNs$G$"$k!#\e(B
-* Mode Line Formatting::  \e$B%b!<%I9T$N=qK!;EMMJQ?t$K4X$9$k$$$/$D$+$N5,B'!#\e(B
-* Advanced Formatting::   \e$B?'!9$JJ}K!$G=PNO$r=$@5$9$k!#\e(B
-* User-Defined Specs::    Gnus \e$B$K$"$J$?<+?H$N4X?t$r8F$P$;$k!#\e(B
-* Formatting Fonts::      \e$B;EMM$rB?:L$GAGE($K8+$;$k!#\e(B
+* Formatting Basics::    \e$B=qK!;EMMJQ?t$O4pK\E*$K=qK!;XDjJ8;zNs$G$"$k\e(B
+* Mode Line Formatting:: \e$B%b!<%I9T$N=qK!;EMMJQ?t$K4X$9$k$$$/$D$+$N5,B'\e(B
+* Advanced Formatting::  \e$B?'!9$JJ}K!$G=PNO$r=$@5$9$k\e(B
+* User-Defined Specs::   Gnus \e$B$K$"$J$?<+?H$N4X?t$r8F$P$;$k\e(B
+* Formatting Fonts::     \e$B;EMM$rB?:L$GAGE($K8+$;$k\e(B
 @end menu
 
 \e$B8=:_$N$H$3$m!"\e(Bgnus \e$B$O0J2<$N=qK!;EMMJQ?t$r;H$$$^$9\e(B:
-@code{gnus-group-line-format}\e$B!"\e(B@code{gnus-summary-line-format}\e$B!"\e(B
-@code{gnus-server-line-format}\e$B!"\e(B@code{gnus-topic-line-format}\e$B!"\e(B
-@code{gnus-group-mode-line-format}\e$B!"\e(B@code{gnus-summary-mode-line-format}\e$B!"\e(B
-@code{gnus-article-mode-line-format}\e$B!"\e(B
-@code{gnus-server-mode-line-format}\e$B!"\e(B
-@code{gnus-summary-pick-line-format}\e$B!#\e(B
+@code{gnus-group-line-format}, @code{gnus-summary-line-format}, @code{gnus-server-line-format}, @code{gnus-topic-line-format}, @code{gnus-group-mode-line-format}, @code{gnus-summary-mode-line-format}, @code{gnus-article-mode-line-format}, @code{gnus-server-mode-line-format}, @code{gnus-summary-pick-line-format}\e$B!#\e(B
 
 \e$B$3$l$iA4$F$N=qK!;EMMJQ?t$OG$0U$N\e(B elisp \e$B<0$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"\e(B
 \e$B$=$l$i$OMW5a$5$l$k9T$KA^F~$9$k$?$a$K\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#\e(B
@@ -15524,32 +16490,29 @@ Gnus \e$B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k<jEA$$$r$9$kL?Na$rHw$($F$$$^$9!#\e(B
 \e$B$7!"7k2L$N\e(B lisp \e$B<0$r<B9T$7$F9T$r:n@.$9$k;v$r<B83$G$-$k%P%C%U%!$K0\F0$7$^\e(B
 \e$B$9!#\e(B
 
-
-
 @node Formatting Basics
 @subsection \e$B=qK!;EMM$N4pK\\e(B
 
 \e$B$=$l$>$l$NMWAG\e(B @samp{%} \e$B$OEv$N%P%C%U%!$,:n@.$5$l$k$H$-$K2?$i$+$NJ8;zNs$d\e(B
-\e$BB>$N$b$N$GCV$-49$($i$l$^$9!#\e(B@samp{%5y} \e$B$O\e(B ``@samp{y} \e$B;XDj$rA^F~$7!"\e(B5\e$BJ8;z\e(B
-\e$B$N>l=j$rF@$k$?$a$K6uGr$rF~$l$J$5$$\e(B'' \e$B$H$$$&;v$G$9!#\e(B
+\e$BB>$N$b$N$GCV$-49$($i$l$^$9!#\e(B@samp{%5y} \e$B$O\e(B ``@samp{y} \e$B;XDj$rA^F~$7!"\e(B5 \e$BJ8\e(B
+\e$B;z$N>l=j$rF@$k$?$a$K6uGr$rF~$l$J$5$$\e(B'' \e$B$H$$$&;v$G$9!#\e(B
 
-\e$BIaDL$N\e(B C \e$B$d\e(B Emacs Lisp \e$B$N=qK!;EMM\e(B (format) \e$BJ8;zNs$HF1$8$h$&$K!"\e(B@samp{%}
-\e$B$H=qK!;EMM$N7?$NJ8;z$N4V$N?tCM=$>~;R$O>o$K>/$J$/$H$b$=$ND9$5$K$J$k$h$&$K!"\e(B
-\e$B=PNO$K\e(B @dfn{\e$B5M$a\e(B} \e$B$l$i$l$^$9!#\e(B@samp{%5y} \e$B$O$=$NItJ,$r>o$K\e(B (\e$B>/$J$/$H$b\e(B) 5
-\e$BJ8;z$ND9$5$K$J$k$h$&$K!":8$K6uGr$r5M$a$^$9!#$b$7\e(B @samp{%-5y} \e$B$H$9$l$P!"\e(B
-\e$BBe$o$j$K1&B&$K5M$a9~$_$^$9!#\e(B
+\e$BIaDL$N\e(B C \e$B$d\e(B Emacs Lisp \e$B$N=qK!;EMM\e(B (format) \e$BJ8;zNs$HF1$8$h$&$K!"\e(B
+@samp{%} \e$B$H=qK!;EMM$N7?$NJ8;z$N4V$N?tCM=$>~;R$O>o$K>/$J$/$H$b$=$ND9$5$K\e(B
+\e$B$J$k$h$&$K!"=PNO$K\e(B @dfn{\e$B5M$a\e(B} \e$B$l$i$l$^$9!#\e(B@samp{%5y} \e$B$O$=$NItJ,$r>o\e(B
+\e$B$K\e(B (\e$B>/$J$/$H$b\e(B) 5 \e$BJ8;z$ND9$5$K$J$k$h$&$K!":8$K6uGr$r5M$a$^$9!#$b\e(B
+\e$B$7\e(B @samp{%-5y} \e$B$H$9$l$P!"Be$o$j$K1&B&$K5M$a9~$_$^$9!#\e(B
 
 \e$BFC$KD9$$CM$+$i$=$NItJ,$rJ]8n$9$k$?$a$K!"D9$5$r@)8B$7$?$$$H$b;W$&$G$7$g$&!#\e(B
-\e$B$=$N$?$a$K$O!"\e(B@samp{%4,6y} \e$B$H$9$k;v$,$G$-$F!"$3$l$O$=$NNN0h$O7h$7$F\e(B6\e$BJ8;z\e(B
-\e$B$rD6$($kD9$5$K$O$J$i$:!"\e(B4\e$BJ8;z$h$j>/$J$$D9$5$K$J$i$J$$$H$$$&;v$G$9!#\e(B
-
+\e$B$=$N$?$a$K$O!"\e(B@samp{%4,6y} \e$B$H$9$k;v$,$G$-$F!"$3$l$O$=$NNN0h$O7h$7$F\e(B 6 \e$BJ8\e(B
+\e$B;z$rD6$($kD9$5$K$O$J$i$:!"\e(B4 \e$BJ8;z$h$j>/$J$$D9$5$K$J$i$J$$$H$$$&;v$G$9!#\e(B
 
 @node Mode Line Formatting
 @subsection \e$B%b!<%I9T=qK!;EMM\e(B
 
 \e$B%b!<%I9T=qK!;EMMJQ?t\e(B (\e$B$9$J$o$A!"\e(B@code{gnus-summary-mode-line-format}) \e$B$O\e(B
-\e$B0J2<$N\e(B2\e$B$D$N0c$$0J30$O!"%P%C%U%!9T$K4p$E$/=qK!;EMMJQ?t$H\e(B
-(@pxref{Formatting Basics}) \e$BF1$8$h$&$J5,B'$K=>$$$^$9\e(B:
+\e$B0J2<$NFs$D$N0c$$0J30$O!"%P%C%U%!9T$K4p$E$/=qK!;EMMJQ?t\e(B
+\e$B$H\e(B (@pxref{Formatting Basics}) \e$BF1$8$h$&$J5,B'$K=>$$$^$9\e(B:
 
 @enumerate
 
@@ -15559,14 +16522,14 @@ Gnus \e$B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k<jEA$$$r$9$kL?Na$rHw$($F$$$^$9!#\e(B
 @item
 \e$BFCJL$J\e(B @samp{%%b} \e$B;XDj$r%P%C%U%!L>$rI=<($9$k$?$a$K;H$&$3$H$,$G$-$^$9!#$(!<\e(B
 \e$B$H!"K\Ev$O$=$l$O;XDj$G$O$J$$$N$G$9\e(B---@samp{%%} \e$B$OC1$K=qK!;EMM$,5!3#E*$K\e(B
-\e$B@Z$jNv$/$N$r@Z$jH4$1$F\e(B @samp{%} \e$B$r$=$N$^$^EO$9$?$a$NJ}K!$G!"\e(BEmacs \e$B$,\e(B
-@samp{%b} \e$B$r<u$1<h$k$H!"\e(BEmacs \e$B$N%b!<%I9TI=<($NItJ,$,$=$l$r\e(B ``\e$B%P%C%U%!L>\e(B
-\e$B$rI=<($7$J$5$$\e(B'' \e$B$H2r<a$7$^$9!#\e(BEmacs \e$B$,M}2r$9$k%b!<%I9T;XDj$N40A4$J0lMw\e(B
-\e$B$r8+$k$?$a$K$O!"JQ?t\e(B @code{mode-line-format} \e$B$N@bL@J8$r8+$F2<$5$$!#\e(B
+\e$B@Z$jNv$/$N$r@Z$jH4$1$F\e(B @samp{%} \e$B$r$=$N$^$^EO$9$?$a$NJ}K!$G!"\e(B
+Emacs \e$B$,\e(B @samp{%b} \e$B$r<u$1<h$k$H!"\e(BEmacs \e$B$N%b!<%I9TI=<($NItJ,$,$=$l\e(B
+\e$B$r\e(B ``\e$B%P%C%U%!L>$rI=<($7$J$5$$\e(B'' \e$B$H2r<a$7$^$9!#\e(BEmacs \e$B$,M}2r$9$k%b!<%I9T;X\e(B
+\e$BDj$N40A4$J0lMw$r8+$k$?$a$K$O!"JQ?t\e(B @code{mode-line-format} \e$B$N@bL@J8$r8+\e(B
+\e$B$F2<$5$$!#\e(B
 
 @end enumerate
 
-
 @node Advanced Formatting
 @subsection \e$B>e5i=qK!;EMM\e(B
 
@@ -15600,7 +16563,7 @@ Gnus \e$B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k<jEA$$$r$9$kL?Na$rHw$($F$$$^$9!#\e(B
 \e$B;XDj$5$l$??t$NJ8;z$r1&B&$+$i@Z$jMn$H$7$^$9!#\e(B
 
 @item ignore
-\e$BNN0h$,;XDj$5$l$?CM$HEy$7$1$l$P\e(B (equal) \e$B!"6uJ8;zNs$rJV$7$^$9!#\e(B
+\e$BNN0h$,;XDj$5$l$?CM$HEy$7$1$l$P\e(B (equal)\e$B!"6uJ8;zNs$rJV$7$^$9!#\e(B
 
 @item form
 @samp{@@} \e$B;XDj$,;H$o$l$?$H$-$K!";XDj$5$l$?<0$rNN0h$NCM$H$7$F;H$$$^$9!#\e(B
@@ -15608,69 +16571,70 @@ Gnus \e$B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k<jEA$$$r$9$kL?Na$rHw$($F$$$^$9!#\e(B
 
 \e$BNc$r=P$7$F$_$^$7$g$&!#35N,%b!<%I9T$G$N\e(B @samp{%o} \e$B;XDj$O>.7?$N\e(B ISO0861 \e$BMM\e(B
 \e$B<0$NF|IU$rJV$7$^$9\e(B---@samp{19960809T230410} \e$B$G$9!#$3$l$OH/2;$7$K$/$$$N$G!"\e(B
-\e$B@$5*$rI=$9?t$H;~4V$r:o$.Mn$H$7$F!"\e(B6\e$BJ8;z$NF|IU$r;D$7$?$$$H;W$$$^$9!#$=$l\e(B
+\e$B@$5*$rI=$9?t$H;~4V$r:o$.Mn$H$7$F!"\e(B6 \e$BJ8;z$NF|IU$r;D$7$?$$$H;W$$$^$9!#$=$l\e(B
 \e$B$O\e(B @samp{%~(cut-left 2)~(max-right 6)~(pad 6)o} \e$B$H$J$k$G$7$g$&!#\e(B(\e$B@Z$jMn\e(B
 \e$B$H$7\e(B (cutting) \e$B$O\e(B \e$B:GBg8B\e(B (maxing) \e$B$h$j@h$K$J$5$l$^$9$N$G!"7e$GAGE($K8+$(\e(B
-\e$B$k$h$&$K$9$k$?$a$KF|IU$,\e(B6\e$BJ8;z$h$j>/$J$/L5$/$J$i$J$$;v$rJ]>Z$9$k$?$a$K5M\e(B
-\e$B$a9~$_\e(B (padding) \e$B$,I,MW$K$J$j$^$9!#\e(B)
+\e$B$k$h$&$K$9$k$?$a$KF|IU$,\e(B 6 \e$BJ8;z$h$j>/$J$/L5$/$J$i$J$$;v$rJ]>Z$9$k$?$a$K\e(B
+\e$B5M$a9~$_\e(B (padding) \e$B$,I,MW$K$J$j$^$9!#\e(B)
 
 \e$BL5;k\e(B (ignore) \e$B$,:G=i$K$J$5$l$^$9!#$=$l$+$i@Z$jMn$H$7\e(B (cut) \e$B$,9T$o$l$^$9!#\e(B
 \e$B$=$7$F!"$=$l$+$i:G8e$NA`:n!"5M$a9~$_\e(B (pad) \e$B$,9T$o$l$^$9!#\e(B
 
-\e$B$b$7$3$l$i$N>e5i;2>H$r$?$/$5$s;H$C$F$$$k$J$i!"\e(Bgnus \e$B$,$H$F$bCY$/$J$k$N$,\e(B
-\e$B$o$+$k$G$7$g$&!#$3$l$O$"$J$?$N9T$N308+$KK~B-$7$?$H$-$K\e(B @kbd{M-x
-gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
-@xref{Compilation}\e$B!#\e(B
-
+@vindex gnus-compile-user-specs
+\e$B$b$7$"$J$?$,6/$$8D@-$N;}$A<g$G\e(B @code{gnus-compile-user-specs} \e$B$r\e(B
+@code{nil} \e$B$K$7$F$$$F\e(B (\e$B=i4|CM$O\e(B@code{t})\e$B!"$3$l$i$N>e5i;2>H$r$?$/$5$s;H$C\e(B
+\e$B$F$$$k$J$i!"\e(BT-gnus \e$B$,$H$F$bCY$/$J$k$N$,$o$+$k$G$7$g$&!#$3$l$O$"$J$?$,9T\e(B
+\e$B$N308+$KK~B-$7$?$H$-$K\e(B @kbd{M-x gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc\e(B
+\e$B2<$r8:$i$9;v$,$G$-$^$9!#\e(B@xref{Compilation}\e$B!#\e(B
 
 @node User-Defined Specs
 @subsection \e$BMxMQ<TDj5A$N;XDj\e(B
 
 \e$BA4$F$N;XDj$OMxMQ<TDj5A\e(B---@samp{u} \e$B$N;XDj$rA^F~$9$k;v$,$G$-$^$9!#=qK!;EMM\e(B
-\e$BJ8;zNs$N<!$NJ8;z$O%"%k%U%!%Y%C%H$G$"$kI,MW$,$"$j$^$9!#\e(BGnus \e$B$O4X?t\e(B
-@code{gnus-user-format-function-}@samp{X} \e$B$r8F$S!"$3$3$G\e(B @samp{X} \e$B$O\e(B
-@samp{%u} \e$B$KB3$/%"%k%U%!%Y%C%H$G$9!#4X?t$K$OC10l$N0z?t$,M?$($i$l$^$9\e(B---
-\e$B0z?t$N0UL#$O4X?t$,$I$N%P%C%U%!$+$i8F$P$l$F$$$k$+$K$h$C$FJQ$o$j$^$9!#4X?t\e(B
-\e$B$OJ8;zNs$rJV$9$Y$-$G!"$=$l$OB>$N;XDj$+$i$N>pJs$HA4$/F1$8$h$&$K%P%C%U%!$K\e(B
-\e$BA^F~$5$l$^$9!#4X?t$O0UL#$NL5$$CM$H6&$K8F$P$l$k;v$b$"$j$($^$9$N$G!"$=$l$N\e(B
-\e$BBP:v$r$9$k$Y$-$G$9!#\e(B
-
-\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formatting})
-\e$B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
-(count-lines (point-min) (point)))@@}\e$B!#$3$3$GM?$($i$l$?<0$OI>2A$5$l$F!"\e(B
-\e$B8=:_$N9T?t$r$b$?$i$7!"$=$l$+$iA^F~$5$l$^$9!#\e(B
-
+\e$BJ8;zNs$N<!$NJ8;z$O%"%k%U%!%Y%C%H$G$"$kI,MW$,$"$j$^$9!#\e(BGnus \e$B$O4X\e(B
+\e$B?t\e(B @code{gnus-user-format-function-}@samp{X} \e$B$r8F$S!"$3$3\e(B
+\e$B$G\e(B @samp{X} \e$B$O\e(B @samp{%u} \e$B$KB3$/%"%k%U%!%Y%C%H$G$9!#4X?t$K$OC10l$N0z?t$,\e(B
+\e$BM?$($i$l$^$9\e(B---\e$B0z?t$N0UL#$O4X?t$,$I$N%P%C%U%!$+$i8F$P$l$F$$$k$+$K$h$C$F\e(B
+\e$BJQ$o$j$^$9!#4X?t$OJ8;zNs$rJV$9$Y$-$G!"$=$l$OB>$N;XDj$+$i$N>pJs$HA4$/F1$8\e(B
+\e$B$h$&$K%P%C%U%!$KA^F~$5$l$^$9!#4X?t$O0UL#$NL5$$CM$H6&$K8F$P$l$k;v$b$"$j$(\e(B
+\e$B$^$9$N$G!"$=$l$NBP:v$r$9$k$Y$-$G$9!#\e(B
+
+\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~\e(B
+\e$B;R\e(B (@pxref{Advanced Formatting}) \e$B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G\e(B
+\e$B$-$^$9!#Nc$G$9\e(B: @samp{%~(form (count-lines (point-min) (point)))@@}\e$B!#\e(B
+\e$B$3$3$GM?$($i$l$?<0$OI>2A$5$l$F!"8=:_$N9T?t$r$b$?$i$7!"$=$l$+$iA^F~$5$l$^\e(B
+\e$B$9!#\e(B
 
 @node Formatting Fonts
 @subsection \e$B=qK!;EMM%U%)%s%H\e(B
 
 \e$B%O%$%i%$%H$N$?$a$N;XDj$,$"$j!"$=$l$i$OA4$F$N=qK!;EMMJQ?t$K$h$C$F6&M-$5$l\e(B
-\e$B$F$$$^$9!#\e(B@samp{%(} \e$B$H\e(B @samp{%)} \e$B;XDj$N4V$NJ8>O$OFCJL$J\e(B
-@code{mouse-face} \e$B%W%m%Q%F%#$,@_Dj$5$l!"$=$l$O$=$3$K%^%&%9$N%]%$%s%?!<$r\e(B
-\e$B$"$o$;$?$H$-$K\e(B (@code{gnus-mouse-face} \e$B$K$h$C$F\e(B) \e$B%O%$%i%$%H$5$l$k$3$H$K\e(B
-\e$B$J$j$^$9!#\e(B
-
+\e$B$F$$$^$9!#\e(B@samp{%(} \e$B$H\e(B @samp{%)} \e$B;XDj$N4V$NJ8>O$OFCJL\e(B
+\e$B$J\e(B @code{mouse-face} \e$B%W%m%Q%F%#$,@_Dj$5$l!"$=$l$O$=$3$K%^%&%9$N%]%$%s%?!<\e(B
+\e$B$r$"$o$;$?$H$-$K\e(B (@code{gnus-mouse-face} \e$B$K$h$C$F\e(B) \e$B%O%$%i%$%H$5$l$k$3$H\e(B
+\e$B$K$J$j$^$9!#\e(B
 
 @samp{%@{} \e$B$H\e(B @samp{%@}} \e$B;XDj$N4V$NJ8>O$O\e(B @code{gnus-face-0} \e$B$r;H$C$FIa\e(B
-\e$BDL$N%U%'%$%9$,@_Dj$5$l!"$=$l$O=i4|@_Dj$G\e(B @code{bold} \e$B$G$9!#$b$7\e(B
-@samp{%@{1} \e$B$H$7$?$J$i!"Be$o$j$K\e(B @code{gnus-face-1} \e$B$rF@!"0J2<F1MM$G$9!#\e(B
-\e$BM_$7$$$@$1$?$/$5$s$N%U%'%$%9$r:n$C$F$/$@$5$$!#F1$8;v$,\e(B @code{mouse-face}
-\e$B;XDj$K$b8@$($^$9\e(B---@samp{hello} \e$B$,\e(B @code{gnus-mouse-face-3} \e$B$G%^%&%9!]%O\e(B
-\e$B%$%i%$%H$5$l$k$?$a$K$O!"\e(B@samp{%3(hello%)} \e$B$H$9$k;v$,$G$-$^$9!#\e(B
-
-@samp{%<} \e$B$H\e(B @samp{%>} \e$B;X<(;R$N4V$N%F%-%9%H$OFCJL$J\e(B  @code{balloon-help}
-\e$B%W%m%Q%F%#$,\e(B @code{gnus-balloon-face-0} \e$B$K@_Dj$5$l$^$9!#\e(B@samp{%1<} \e$B$H$9\e(B
-\e$B$k$H!"\e(B@code{gnus-balloon-face-1} \e$B$rF@$F!"B>$bF1MM$G$9!#\e(B
-@code{gnus-balloon-face-*} \e$BJQ?t$OJ8;zNs$+J8;zNs$rJV$94X?t$r;X$9%7%s%\%k\e(B
-\e$B$N$I$A$i$+$G$"$kI,MW$,$"$j$^$9!#\e(B@code{balloon-help-mode} \e$B$G$O!"%^%&%9$,\e(B
-\e$B%W%m%Q%F%#$N@_Dj$5$l$F$$$k%F%-%9%H$N>e$rDL2a$9$k$H!"%P%k!<%s%&%#%s%I%&$,\e(B
-\e$B8=$l$F!"J8;zNs$rI=<($7$^$9!#$3$l$N>\$7$$>pJs$O\e(B @code{balloon-help-mode}
-\e$B$N@bL@J8;zNs$r;2>H$7$F$/$@$5$$!#\e(B
+\e$BDL$N%U%'%$%9$,@_Dj$5$l!"$=$l$O=i4|@_Dj$G\e(B @code{bold} \e$B$G$9!#$b\e(B
+\e$B$7\e(B @samp{%@{1} \e$B$H$7$?$J$i!"Be$o$j$K\e(B @code{gnus-face-1} \e$B$rF@!"0J2<F1MM$G\e(B
+\e$B$9!#M_$7$$$@$1$?$/$5$s$N%U%'%$%9$r:n$C$F$/$@$5$$!#F1$8;v\e(B
+\e$B$,\e(B @code{mouse-face} \e$B;XDj$K$b8@$($^\e(B
+\e$B$9\e(B---@samp{hello} \e$B$,\e(B @code{gnus-mouse-face-3} \e$B$G%^%&%9!]%O%$%i%$%H$5$l$k\e(B
+\e$B$?$a$K$O!"\e(B@samp{%3(hello%)} \e$B$H$9$k;v$,$G$-$^$9!#\e(B
+
+@samp{%<} \e$B$H\e(B @samp{%>} \e$B;X<(;R$N4V$N%F%-%9%H$OFCJL\e(B
+\e$B$J\e(B @code{balloon-help} \e$B%W%m%Q%F%#$,\e(B @code{gnus-balloon-face-0} \e$B$K@_Dj$5\e(B
+\e$B$l$^$9!#\e(B@samp{%1<} \e$B$H$9$k$H!"\e(B@code{gnus-balloon-face-1} \e$B$rF@$F!"B>$bF1MM\e(B
+\e$B$G$9!#\e(B@code{gnus-balloon-face-*} \e$BJQ?t$OJ8;zNs$+J8;zNs$rJV$94X?t$r;X$9%7\e(B
+\e$B%s%\%k$N$I$A$i$+$G$"$kI,MW$,$"$j$^$9!#\e(B@code{balloon-help-mode} \e$B$G$O!"%^\e(B
+\e$B%&%9$,%W%m%Q%F%#$N@_Dj$5$l$F$$$k%F%-%9%H$N>e$rDL2a$9$k$H!"%P%k!<%s%&%#%s\e(B
+\e$B%I%&$,8=$l$F!"J8;zNs$rI=<($7$^$9!#$3$l$N>\$7$$>pJs\e(B
+\e$B$O\e(B @code{balloon-help-mode} \e$B$N@bL@J8;zNs$r;2>H$7$F$/$@$5$$!#\e(B
 
 \e$B$3$l$O%0%k!<%W%P%C%U%!$NBeBX<jK!$G$9\e(B:
 
 @lisp
-;; 3\e$B$D$N%U%'%$%9$N7?$r:n$k!#\e(B
+;; \e$B;0$D$N%U%'%$%9$N7?$r:n$k!#\e(B
 (setq gnus-face-1 'bold)
 (setq gnus-face-3 'italic)
 
@@ -15688,12 +16652,11 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 @end lisp
 
 \e$B$"$J$?$,$3$N0F$r;H$C$F40A4$KFI$a$J$/$FHs>o$K2<IJ$JI=<($r:n$k;v$,$G$-$k$H\e(B
-\e$B3N?.$7$F$$$^$9!#3Z$7$s$G$/$@$5$$!*\e(B
+\e$B3N?.$7$F$$$^$9!#3Z$7$s$G$/$@$5$$\e(B!
 
 @samp{%(} \e$B;XDj\e(B (\e$B$d$=$NN`$N$b$N\e(B) \e$B$O%b!<%I9TJQ?t$G$OA4$/0UL#$r$J$5$J$$;v$K\e(B
 \e$BCm0U$7$F$/$@$5$$!#\e(B
 
-
 @node Windows Configuration
 @section \e$B%&%#%s%I%&$N@_Dj\e(B
 @cindex windows configuration
@@ -15702,8 +16665,8 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 
 @vindex gnus-use-full-window
 \e$B$b$7\e(B @code{gnus-use-full-window} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$OA4$F$NB>\e(B
-\e$B$N%&%#%s%I%&$r>C$7$F!"\e(BEmacs \e$B$N2hLLA4BN$r@jM-$7$^$9!#$3$l$O=i4|@_Dj$G\e(B
-@code{t} \e$B$G$9!#\e(B
+\e$B$N%&%#%s%I%&$r>C$7$F!"\e(BEmacs \e$B$N2hLLA4BN$r@jM-$7$^$9!#$3$l$O=i4|@_Dj\e(B
+\e$B$G\e(B @code{t} \e$B$G$9!#\e(B
 
 \e$B$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k$N$O$=$l$J$j$KF0:n$7$^$9$,!"LdBj$b$"$j$^\e(B
 \e$B$9!#4m81$r3P8g$N>e$G;H$C$F$/$@$5$$!#\e(B
@@ -15720,9 +16683,9 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 @end lisp
 
 \e$B$3$l$OO"A[%j%9%H$G$9!#\e(B@dfn{\e$B%-!<\e(B} \e$B$O2?$i$+$NF0:n$dB>$N$b$N$rG$L?$9$k%7%s\e(B
-\e$B%\%k$G$9!#Nc$($P!"%0%k!<%W%P%C%U%!$rI=<($9$k$H$-$O!"%&%#%s%I%&@_Dj4X?t$O\e(B
-@code{group} \e$B$r%-!<$H$7$F;H$$$^$9!#;HMQ2DG=$JL>A0$N40A4$J0lMw$O2<$K5s$2\e(B
-\e$B$i$l$F$$$^$9!#\e(B
+\e$B%\%k$G$9!#Nc$($P!"%0%k!<%W%P%C%U%!$rI=<($9$k$H$-$O!"%&%#%s%I%&@_Dj4X?t\e(B
+\e$B$O\e(B @code{group} \e$B$r%-!<$H$7$F;H$$$^$9!#;HMQ2DG=$JL>A0$N40A4$J0lMw$O2<$K5s\e(B
+\e$B$2$i$l$F$$$^$9!#\e(B
 
 @dfn{\e$BCM\e(B} (\e$B$9$J$o$A!"\e(B@dfn{\e$BJ,3d\e(B}) \e$B$O$=$l$>$l$N%P%C%U%!$,$I$l$/$i$$$r@j$a$k\e(B
 \e$B$Y$-$+$r;XDj$7$^$9!#\e(B@code{article} \e$BJ,3d$rNc$K<h$k$H\e(B -
@@ -15737,13 +16700,13 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 \e$B$-$NDL$j!"\e(B100% + 25% \e$B$O<B:]$O\e(B 125% \e$B$G$9\e(B (\e$B$($'!"3'$5$s$N7W;;$O$3$NMM$K$J$C\e(B
 \e$B$?$H;W$$$^$9!#\e(B) \e$B$7$+$7!"FCJL$J?t;z\e(B @code{1.0} \e$B$O!";D$j$N%P%C%U%!$,I,MW$J\e(B
 \e$B$b$N$r<h$j5n$C$?8e$K!";HMQ2DG=$J;D$j$N6u4VA4$F$r5[$$<h$k!"$H$$$&;v$r9g?^\e(B
-\e$B$9$k$?$a$K;H$o$l$^$9!#\e(B1\e$B$D$NJ,3d$K$D$-!"\e(B@code{1.0} \e$B$NBg$-$5;XDj$N%P%C%U%!\e(B
+\e$B$9$k$?$a$K;H$o$l$^$9!#0l$D$NJ,3d$K$D$-!"\e(B@code{1.0} \e$B$NBg$-$5;XDj$N%P%C%U%!\e(B
 \e$B$O0l$D$@$1$G$J$/$F$O$J$j$^$;$s!#\e(B
 
-\e$B%]%$%s%H$O>JN,2DG=$J\e(B3\e$B$DL\$NMWAG!"\e(B@code{point} \e$B$r;}$D%P%C%U%!$KCV$+$l$^$9!#\e(B
-@code{frame} \e$BJ,3d$G$O!"%?%0\e(B @code{frame-focus} \e$B$,9=@.MWAG$G$"$k\e(B (\e$B$9$J$o\e(B
-\e$B$A!"\e(B@code{point} \e$B%?%0$,B8:_$9$k$+$I$&$+$K$h$C$F!"%j%9%H$N\e(B3\e$BHVL\$+\e(B4\e$BHVL\$+\e(B
-\e$B$KB8:_$9$kMWAG\e(B) \e$BMUJ,3d$r;}$D:G8e$NI{J,3d$,>GE@$rF@$k;v$K$J$j$^$9!#\e(B
+\e$B%]%$%s%H$O>JN,2DG=$J;0$DL\$NMWAG!"\e(B@code{point} \e$B$r;}$D%P%C%U%!$KCV$+$l$^\e(B
+\e$B$9!#\e(B@code{frame} \e$BJ,3d$G$O!"%?%0\e(B @code{frame-focus} \e$B$,9=@.MWAG$G$"$k\e(B (\e$B$9\e(B
+\e$B$J$o$A!"\e(B@code{point} \e$B%?%0$,B8:_$9$k$+$I$&$+$K$h$C$F!"%j%9%H$N;0HVL\$+;M\e(B
+\e$BHVL\$+$KB8:_$9$kMWAG\e(B) \e$BMUJ,3d$r;}$D:G8e$NI{J,3d$,>GE@$rF@$k;v$K$J$j$^$9!#\e(B
 
 \e$B<!$O$b$C$HJ#;($JNc$G$9\e(B:
 
@@ -15760,11 +16723,11 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
 \e$B$b$7\e(B @dfn{\e$BJ,3d\e(B} \e$B$,\e(B @code{\e$BI>2A\e(B} \e$B$5$l$k$b$N$N$h$&$K8+$($k$H$-$O\e(B (\e$BL@3N$K$9\e(B
 \e$B$k$H\e(B---\e$BJ,3d$N\e(B @code{car} \e$B$,4X?t$+86;O4X?t\e(B (subr) \e$B$G$"$k$H$-$O\e(B)\e$B!"$3$NJ,3d\e(B
 \e$B$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#7k2L$,\e(B @code{nil} \e$B$G$J$$$J$i!"$=$l$OJ,3d$H$7$F\e(B
-\e$BMQ$$$i$l$^$9!#$3$l$O!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$"$l$P\e(B3\e$B$D$N%P%C\e(B
-\e$B%U%!$,!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$J$$$J$i!"\e(B4\e$B$D$N%P%C%U%!$,B8:_\e(B
-\e$B$9$k$H$$$&;v$G$9!#\e(B
+\e$BMQ$$$i$l$^$9!#$3$l$O!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$"$l$P;0$D$N%P%C\e(B
+\e$B%U%!$,!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$J$$$J$i!";M$D$N%P%C%U%!$,B8\e(B
+\e$B:_$9$k$H$$$&;v$G$9!#\e(B
 
-\e$B$^$@J#;($G$O$J$$$G$9$C$F!)\e(B \e$B$=$l$G$O!"Bg$-$5$K$3$l$r;n$7$F$_$F2<$5$$\e(B:
+\e$B$^$@J#;($G$O$J$$$G$9$C$F\e(B? \e$B$=$l$G$O!"Bg$-$5$K$3$l$r;n$7$F$_$F2<$5$$\e(B:
 
 @lisp
 (article (horizontal 1.0
@@ -15777,11 +16740,11 @@ gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
                  (article 1.0))))
 @end lisp
 
-\e$B$*$)$C$H!#\e(B2\e$B$D$N%P%C%U%!$KIT;W5D$J\e(B 100% \e$B%?%0$,IU$$$F$$$^$9!#$=$7$F!"$"$N\e(B
-@code{horizontal} \e$B$C$F$$$&$b$N$O2?$G$7$g$&!)\e(B
+\e$B$*$)$C$H!#Fs$D$N%P%C%U%!$KIT;W5D$J\e(B 100% \e$B%?%0$,IU$$$F$$$^$9!#$=$7$F!"$"\e(B
+\e$B$N\e(B @code{horizontal} \e$B$C$F$$$&$b$N$O2?$G$7$g$&\e(B?
 
 \e$B$b$7J,3d$N0l$D$N:G=i$NMWAG$,\e(B @code{horizontal} \e$B$G$"$C$?$J$i!"\e(Bgnus \e$B$O\e(B \e$B%&%#\e(B
-\e$B%s%I%&$r?eJ?$KJ,3d$7!"\e(B2\e$B$D$N%&%#%s%I%&$r2#$KJB$Y$^$9!#$3$l$i$N$=$l$>$l$N\e(B
+\e$B%s%I%&$r?eJ?$KJ,3d$7!"Fs$D$N%&%#%s%I%&$r2#$KJB$Y$^$9!#$3$l$i$N$=$l$>$l$N\e(B
 \e$B>.JR$NCf$G$O!"A4$F$rIaDL$NN.57$G9T$&;v$,$G$-$^$9!#\e(B@code{horizontal} \e$B$N8e\e(B
 \e$B$N?t;z$O!"$3$N>.JR$K2hLL$N$I$l$/$i$$$N3d9g$,M?$($i$l$k$+$r;XDj$7$^$9!#\e(B
 
@@ -15804,35 +16767,35 @@ buffer-name = group | article | summary ...
 
 \e$B@)8B$K$O!"\e(B@code{frame} \e$B$O:G>e0L$NJ,3d$H$7$F$7$+8=$l$k;v$,$G$-$J$$$H$$$&\e(B
 \e$B$b$N$,$"$j$^$9!#\e(B@var{form} \e$B$OM-8z$JJ,3d$rJV$9\e(B Emacs Lisp \e$B$N<0\e(B (form) \e$B$G\e(B
-\e$B$J$1$l$P$J$j$^$;$s!#$=$l$>$l$NJ,3d$O40A4$K:F5"E*$G!"G$0U$N?t$N\e(B
-@code{vertical} \e$B$H\e(B @code{horizontal} \e$BJ,3d$r4^$`;v$,$G$-$^$9!#\e(B
+\e$B$J$1$l$P$J$j$^$;$s!#$=$l$>$l$NJ,3d$O40A4$K:F5"E*$G!"G$0U$N?t\e(B
+\e$B$N\e(B @code{vertical} \e$B$H\e(B @code{horizontal} \e$BJ,3d$r4^$`;v$,$G$-$^$9!#\e(B
 
 @vindex gnus-window-min-width
 @vindex gnus-window-min-height
 @cindex window height
 @cindex window width
-\e$B@5$7$$Bg$-$5$r8+$D$1$k$N$O>/$7J#;($G$9!#$I$N%&%#%s%I%&$b\e(B
-@code{gnus-window-min-height} (\e$B=i4|CM\e(B 1) \e$B$NJ8;z$N9b$5$h$j$b>.$5$/$F$O$J\e(B
-\e$B$i$:!">/$J$/$H$b\e(B @code{gnus-window-min-width} (\e$B=i4|CM\e(B 1) \e$B$NJ8;zI}$G$J$/\e(B
-\e$B$F$O$J$j$^$;$s!#\e(BGnus \e$B$OJ,3d$rE,MQ$9$kA0$K$3$l$r6/@)$7$h$&$H;n$_$^$9!#$b\e(B
-\e$B$7IaDL$N\e(B Emacs \e$B$N%&%#%s%I%&$NI}\e(B/\e$B9b$5@)8B$r;H$$$?$$$J$i!"$3$N\e(B2\e$B$D$NJQ?t$r\e(B
-@code{nil} \e$B$K$9$k$@$1$GNI$$$G$9!#\e(B
-
-\e$B$b$7\e(B Emacs \e$B$NMQ8l$K$J$8$s$G$$$J$$$N$J$i!"\e(B@code{horizontal} \e$B$H\e(B
-@code{vertical} \e$BJ,3d$O!"4|BT$9$k$b$N$HH?BP$NF0:n$r$9$k$G$7$g$&!#\e(B
-@code{horizontal} \e$BJ,3d$NCf$N%&%#%s%I%&$O2#$KJB$s$GI=<($5$l!"\e(B
+\e$B@5$7$$Bg$-$5$r8+$D$1$k$N$O>/$7J#;($G$9!#$I$N%&%#%s%I%&\e(B
+\e$B$b\e(B @code{gnus-window-min-height} (\e$B=i4|CM\e(B 1) \e$B$NJ8;z$N9b$5$h$j$b>.$5$/$F$O\e(B
+\e$B$J$i$:!">/$J$/$H$b\e(B @code{gnus-window-min-width} (\e$B=i4|CM\e(B 1) \e$B$NJ8;zI}$G$J\e(B
+\e$B$/$F$O$J$j$^$;$s!#\e(BGnus \e$B$OJ,3d$rE,MQ$9$kA0$K$3$l$r6/@)$7$h$&$H;n$_$^$9!#\e(B
+\e$B$b$7IaDL$N\e(B Emacs \e$B$N%&%#%s%I%&$NI}\e(B/\e$B9b$5@)8B$r;H$$$?$$$J$i!"$3$NFs$D$NJQ?t\e(B
+\e$B$r\e(B @code{nil} \e$B$K$9$k$@$1$GNI$$$G$9!#\e(B
+
+\e$B$b$7\e(B Emacs \e$B$NMQ8l$K$J$8$s$G$$$J$$$N$J$i!"\e(B
+@code{horizontal} \e$B$H\e(B @code{vertical} \e$BJ,3d$O!"4|BT$9$k$b$N$HH?BP$NF0:n$r\e(B
+\e$B$9$k$G$7$g$&!#\e(B@code{horizontal} \e$BJ,3d$NCf$N%&%#%s%I%&$O2#$KJB$s$GI=<($5$l!"\e(B
 @code{vertical} \e$BJ,3d$NCf$N%&%#%s%I%&$O>e2<$KI=<($5$l$^$9!#\e(B
 
 @findex gnus-configure-frame
-\e$B%&%#%s%I%&$N@_CV$K4X$7$F<B83$r$7$F$_$?$$$N$G$"$l$P!"$h$$J}K!$OJ,3d$GD>@\\e(B
-@code{gnus-configure-frame} \e$B$r8F$V$3$H$G$9!#$3$l$O%P%C%U%!$rJ,3d$9$k$H$-\e(B
-\e$B$KA4$F$NK\Ev$N;E;v$r$9$k4X?t$G$9!#2<$N$b$N$O\e(B5\e$B%&%#%s%I%&$N$H$F$b$P$+$2$?\e(B
-\e$B@_Dj$G$9!#\e(B2\e$B$D$r%0%k!<%W%P%C%U%!$K!"\e(B3\e$B$D$r5-;v%P%C%U%!$N$?$a$K=<$F$^$9!#\e(B
-(\e$B$=$l$O$P$+$2$F$$$k$H8@$C$?$G$7$g!#\e(B) \e$B$b$72<$NJ8$r\e(B @code{\e$BI>2A\e(B} \e$B$9$k$H!"Ia\e(B
-\e$BDL$N\e(B gnus \e$B$N7PO)$r;H$o$J$$$G!"$9$0$K$=$l$,$I$N$h$&$K8+$($k$+$N9M$($rF@$k\e(B
-\e$B;v$,$G$-$^$9!#K~B-$9$k$^$G$=$l$GM7$s$G!"$=$l$+$i\e(B
-@code{gnus-add-configuration} \e$B$r;H$C$F?7$7$$A[A|$r%P%C%U%!@_Dj%j%9%H$K2C\e(B
-\e$B$($F2<$5$$!#\e(B
+\e$B%&%#%s%I%&$N@_CV$K4X$7$F<B83$r$7$F$_$?$$$N$G$"$l$P!"$h$$J}K!$OJ,3d$GD>\e(B
+\e$B@\\e(B @code{gnus-configure-frame} \e$B$r8F$V$3$H$G$9!#$3$l$O%P%C%U%!$rJ,3d$9$k\e(B
+\e$B$H$-$KA4$F$NK\Ev$N;E;v$r$9$k4X?t$G$9!#2<$N$b$N$O\e(B 5 \e$B%&%#%s%I%&$N$H$F$b$P\e(B
+\e$B$+$2$?@_Dj$G$9!#Fs$D$r%0%k!<%W%P%C%U%!$K!";0$D$r5-;v%P%C%U%!$N$?$a$K=<$F\e(B
+\e$B$^$9!#\e(B(\e$B$=$l$O$P$+$2$F$$$k$H8@$C$?$G$7$g!#\e(B) \e$B$b$72<$NJ8$r\e(B @code{\e$BI>2A\e(B} \e$B$9$k\e(B
+\e$B$H!"IaDL$N\e(B gnus \e$B$N7PO)$r;H$o$J$$$G!"$9$0$K$=$l$,$I$N$h$&$K8+$($k$+$N9M$(\e(B
+\e$B$rF@$k;v$,$G$-$^$9!#K~B-$9$k$^$G$=$l$GM7$s$G!"$=$l$+\e(B
+\e$B$i\e(B @code{gnus-add-configuration} \e$B$r;H$C$F?7$7$$A[A|$r%P%C%U%!@_Dj%j%9%H\e(B
+\e$B$K2C$($F2<$5$$!#\e(B
 
 @lisp
 (gnus-configure-frame
@@ -15874,9 +16837,9 @@ The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
 @code{gnus-buffer-configuration} \e$B$K;HMQ2DG=$JA4$F$N%-!<$N0lMw$O$=$N=i4|\e(B
 \e$BCM$G8+$D$1$k$3$H$,$G$-$^$9!#\e(B
 
-\e$B%-!<\e(B @code{message} \e$B$O\e(B @code{gnus-group-mail} \e$B$H\e(B
-@code{gnus-summary-mail-other-window} \e$B$NN>J}$G;H$o$l$k;v$KCm0U$7$F2<$5$$!#\e(B
-\e$B$b$7\e(B2\e$B$D$r6hJL$9$k$[$&$,K>$^$7$$$J$i!"$3$N$h$&$JJ*$r;H$&;v$,$G$-$^$9\e(B:
+\e$B%-!<\e(B @code{message} \e$B$O\e(B @code{gnus-group-mail} \e$B$H\e(B @code{gnus-summary-mail-other-window} \e$B$N\e(B
+\e$BN>J}$G;H$o$l$k;v$KCm0U$7$F2<$5$$!#$b$7Fs$D$r6hJL$9$k$[$&$,K>$^$7$$$J$i!"\e(B
+\e$B$3$N$h$&$JJ*$r;H$&;v$,$G$-$^$9\e(B:
 
 @lisp
 (message (horizontal 1.0
@@ -15915,20 +16878,56 @@ The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
                (article 1.0))))
 @end lisp
 
-\e$BIaDL$O$3$l$i$N\e(B @code{gnus-add-configuration} \e$B8F$S=P$7$r%U%!%$%k\e(B
-@code{.gnus.el} \e$B$KF~$l$k$+!"2?$i$+$N5/F0;~$N%U%C%/$KF~$l$k$G$7$g$&\e(B---\e$B$=\e(B
-\e$B$l$i$O\e(B gnus \e$B$,FI$_9~$^$l$?8e$K<B9T$5$l$k$Y$-$G$9!#\e(B
+\e$BIaDL$O$3$l$i$N\e(B @code{gnus-add-configuration} \e$B8F$S=P$7$r%U%!%$\e(B
+\e$B%k\e(B @code{.gnus.el} \e$B$KF~$l$k$+!"2?$i$+$N5/F0;~$N%U%C%/$KF~$l$k$G$7$g\e(B
+\e$B$&\e(B---\e$B$=$l$i$O\e(B gnus \e$B$,FI$_9~$^$l$?8e$K<B9T$5$l$k$Y$-$G$9!#\e(B
 
 @vindex gnus-always-force-window-configuration
 \e$B$b$7@_Dj$G8@5Z$5$l$?A4$F$N%&%#%s%I%&$,4{$K8+$($F$$$k$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B
 \e$B%&%#%s%I%&$N@_Dj$rJQ99$7$^$;$s!#$b$7>o$K\e(B ``\e$B@5$7$$\e(B'' \e$B%&%#%s%I%&@_Dj$r6/@)\e(B
-\e$B$7$?$$$N$G$"$l$P!"\e(B@code{gnus-always-force-window-configuration} \e$B$r\e(B
-@code{nil} \e$B$G$J$$CM$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+\e$B$7$?$$$N$G$"$l$P!"\e(B
+@code{gnus-always-force-window-configuration} \e$B$r\e(B @code{nil} \e$B$G$J$$CM$K@_\e(B
+\e$BDj$9$k;v$,$G$-$^$9!#\e(B
 
 \e$BLZI=<($r;H$C$F$$$F\e(B (@pxref{Tree Display})\e$B!"LZ%&%#%s%I%&$O?bD>J}8~$KJL$N\e(B
 \e$B%&%#%s%I%&$GI=<($5$l$k$J$i!"%&%#%s%I%&$NBg$-$5$,JQ99$5$l$k$3$H$rHr$1$k$?\e(B
 \e$B$a$K\e(B @code{gnus-tree-minimize-window} \e$B$r$$$8$k$N$,NI$$$G$7$g$&!#\e(B
 
+@subsection \e$B%&%#%s%I%&@_Dj$NNc\e(B
+
+@itemize @bullet
+@item
+\e$B:8B&$r69$a$F%0%k!<%W%P%C%U%!$K!#1&B&$rJ,3d$7$F35N,%P%C%U%!\e(B (\e$B>e\e(B 1/6) \e$B$H\e(B
+\e$B5-;v%P%C%U%!\e(B (\e$B2<\e(B) \e$B$K!#\e(B
+
+@ifinfo
+@example
++---+---------+
+| G | Summary |
+| r +---------+
+| o |         |
+| u | Article |
+| p |         |
++---+---------+
+@end example
+@end ifinfo
+
+@lisp
+(gnus-add-configuration
+ '(article
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0
+                         (summary 0.16 point)
+                         (article 1.0)))))
+
+(gnus-add-configuration
+ '(summary
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0 (summary 1.0 point)))))
+@end lisp
+@end itemize
 
 @node Faces and Fonts
 @section \e$B%U%'%$%9$H%U%)%s%H\e(B
@@ -15940,7 +16939,6 @@ The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
 \e$B$G$9!#C1$K\e(B @kbd{M-x customize-face} \e$B$H$d$C$F!"JQ$($?$$%U%'%$%9$rA*$S=P$7\e(B
 \e$B$F!"I8=`$N%+%9%?%^%$%:%$%s%?!<%U%'!<%9$r;H$C$FJQ99$9$k;v$,$G$-$^$9!#\e(B
 
-
 @node Compilation
 @section \e$B%3%s%Q%$%k\e(B
 @cindex compilation
@@ -15948,21 +16946,28 @@ The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
 
 @findex gnus-compile
 
-\e$B$"$N9T=qK!;EMM;XDjJQ?t$r3P$($F$$$^$9$+!)\e(B @code{gnus-summary-line-format}\e$B!"\e(B
-@code{gnus-group-line-format} \e$B$J$I$J$I$G$9!#$5$F!"\e(Bgnus \e$B$O$b$A$m$s$3$l$i\e(B
-\e$B$NJQ?t$,$I$N$h$&$J$b$N$G$bCm0U$7$^$9$,!"IT1?$J;v$K!"$=$l$i$rJQ99$9$k$H!"\e(B
-\e$BBgJQ=EBg$JB.EYDc2<$r0z$-5/$3$9;v$K$J$j$^$9!#\e(B (\e$B$3$l$i$NJQ?t$N=i4|CM$O$=$l\e(B
-\e$B$i$K4XO"IU$1$i$l$?%P%$%H%3%s%Q%$%k$5$l$?4X?t$r;}$C$F$$$^$9$,!"MxMQ<T:n@.\e(B
-\e$B$N$b$N$O$b$A$m$s$=$&$G$O$"$j$^$;$s!#\e(B)
+\e$B$"$N9T=qK!;EMM;XDjJQ?t$r3P$($F$$$^$9\e(B
+\e$B$+\e(B? @code{gnus-summary-line-format}, @code{gnus-group-line-format} \e$B$J$I\e(B
+\e$B$J$I$G$9!#DL>o\e(B T-gnus \e$B$O$3$l$i$NJQ?t$r%P%$%H%3%s%Q%$%k$7$F;H$&$N$G!"B.EY\e(B
+\e$BDc2<$O:G>.8B$K?)$$;_$a$i$l$^$9!#$7$+\e(B
+\e$B$7\e(B @code{gnus-compile-user-specs} \e$B$r\e(B @code{nil} (\e$B=i4|CM$O\e(B @code{t}) \e$B$K$7\e(B
+\e$B$?>l9g$O!"IT1?$J;v$K$=$l$i$rJQ99$9$k$HBgJQ=EBg$JB.EYDc2<$r0z$-5/$3$9;v$K\e(B
+\e$B$J$j$^$9!#\e(B(\e$B$3$l$i$NJQ?t$N=i4|CM$O$=$l$i$K4XO"IU$1$i$l$?%P%$%H%3%s%Q%$%k\e(B
+\e$B$5$l$?4X?t$r;}$C$F$$$^$9$,!"MxMQ<T:n@.$N$b$N$O$b$A$m$s$=$&$G$O$"$j$^$;$s!#\e(B)
 
 \e$B$3$l$r2~A1$9$k$?$a$K!"JQ?t$rO.$j$^$o$7$F!"\e(B(\e$B$J$s$H$J$/\e(B) \e$BK~B-$7$?$H46$8$?\e(B
 \e$B8e$G!"\e(B@kbd{M-x gnus-compile} \e$B$r<B9T$9$k;v$,$G$-$^$9!#$3$l$O?7$7$$;XDj$,\e(B
-\e$B%P%$%H%3%s%Q%$%k$5$l!"$b$&0lEY:G9bB.EY$KI|5"$G$-$k$H$$$&;v$G$9!#\e(BGnus \e$B$O\e(B
-\e$B$3$l$i$N%3%s%Q%$%k$5$l$?;XDj$r%U%!%$%k\e(B @file{.newsrc.eld} \e$B$KJ]B8$7$^$9!#\e(B
-(\e$BMxMQ<TDj5A$N4X?t$O!"$3$N4X?t$G$O%3%s%Q%$%k$5$l$^$;$s$,\e(B--\e$B$=$l$i$r%3%s%Q\e(B
-\e$B%$%k$9$k$?$a$K$O!"$=$l$i$r%U%!%$%k\e(B @code{.gnus.el} \e$B$KFM$C9~$s$G!"$=$N%U%!\e(B
-\e$B%$%k$r%P%$%H%3%s%Q%$%k$9$k$Y$-$G$9!#\e(B)
+\e$B%P%$%H%3%s%Q%$%k$5$l!"$b$&0lEY:G9bB.EY$KI|5"$G$-$k$H$$$&;v$G$9!#$?$@\e(B
+\e$B$7\e(B T-gnus \e$B$O$3$l$i$N%P%$%H%3%s%Q%$%k$5$l$?;XDj$r%U%!%$\e(B
+\e$B%k\e(B @file{.newsrc.eld} \e$B$KJ]B8$7$^$;$s!#\e(B
 
+@table @code
+@item gnus-compile-user-specs
+@vindex gnus-compile-user-specs
+\e$B$3$NCM$r\e(B @code{nil} \e$B0J30$K$7$F$*$/$H!"MxMQ<T$,:n@.$7$?9T=qK!;EMMJQ?t$r<+\e(B
+\e$BF0E*$K%3%s%Q%$%k$7$^$9!#=i4|CM$O\e(B @code{t} \e$B$G!"\e(B
+@code{gnus-*-line-format-spec} \e$B$N3FFbItJQ?t$NCM$K1F6A$7$^$9!#\e(B
+@end table
 
 @node Mode Lines
 @section \e$B%b!<%I9T\e(B
@@ -15971,10 +16976,11 @@ The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
 @vindex gnus-update-mode-lines
 @code{gnus-updated-mode-lines} \e$B$O$I$N%P%C%U%!$,$=$N%b!<%I9T$r>o$K:G?7$N\e(B
 \e$B$b$N$K$7$F$*$/$+$r;XDj$7$^$9!#$=$l$O%7%s%\%k$N%j%9%H$G$9!#;H$&;v$N$G$-$k\e(B
-\e$B%7%s%\%k$O\e(B @code{group} \e$B!"\e(B@code{article}\e$B!"\e(B@code{summary}\e$B!"\e(B@code{server}\e$B!"\e(B
-@code{browse}\e$B!"\e(B@code{tree} \e$B$J$I$G$9!#$b$7BP1~$9$k%7%s%\%k$,B8:_$9$k$H!"\e(B
-gnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil}
-\e$B$G$"$k$J$i!"2hLL$N:FIA2h$O$b$C$HB.$$$G$7$g$&!#\e(B
+\e$B%7%s%\%k\e(B
+\e$B$O\e(B @code{group}, @code{article}, @code{summary}, @code{server}, @code{browse}, @code{tree} \e$B$J\e(B
+\e$B$I$G$9!#$b$7BP1~$9$k%7%s%\%k$,B8:_$9$k$H!"\e(Bgnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G\e(B
+\e$B%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$J$i!"2hLL$N:FIA2h$O$b$C\e(B
+\e$B$HB.$$$G$7$g$&!#\e(B
 
 @cindex display-time
 
@@ -16002,7 +17008,6 @@ gnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil}
 \e$B$$@_Dj$G$O$J$$$H$$$&;v$KCm0U$7$F2<$5$$!#MxMQ<T$,<+J,$N@_Dj$K9g$&$h$&$K$3\e(B
 \e$B$NJQ?t$rE,@Z$K@_Dj$7$J$1$l$P$J$j$^$;$s!#\e(B
 
-
 @node Highlighting and Menus
 @section \e$B%O%$%i%$%H$H%a%K%e!<\e(B
 @cindex visual
@@ -16015,7 +17020,7 @@ gnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil}
 \e$B$?$j$7$h$&$H$7$^$;$s!#$3$l$O%U%!%$%k\e(B @file{gnus-vis.el} \e$B$rFI$_9~$`;v$b6X\e(B
 \e$B;_$7$^$9!#\e(B
 
-\e$B$3$NJQ?t$O;EMM2DG=$J;k3PE*%W%m%Q%F%#$N%j%9%H$G$"$k;v$,$G$-$^$9!#0J2<$NMW\e(B
+\e$B$3$NJQ?t$O;HMQ2DG=$J;k3PE*%W%m%Q%F%#$N%j%9%H$G$"$k;v$,$G$-$^$9!#0J2<$NMW\e(B
 \e$BAG$OM-8z$G!"=i4|@_Dj$G$9$Y$F4^$^$l$F$$$^$9\e(B:
 
 @table @code
@@ -16056,17 +17061,17 @@ gnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil}
 (setq gnus-visual '(highlight))
 @end lisp
 
-@code{gnus-visual} \e$B$,\e(B @code{t} \e$B$G$"$k$H!"%O%$%i%$%H$H%a%K%e!<$OA4$F$N\e(B
-gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
+@code{gnus-visual} \e$B$,\e(B @code{t} \e$B$G$"$k$H!"%O%$%i%$%H$H%a%K%e!<$OA4$F\e(B
+\e$B$N\e(B gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
 
 \e$BB>$NA4$F$N%P%C%U%!$N308+$K1F6A$9$kAm9gE*$JJQ?t$O\e(B:
 
 @table @code
 @item gnus-mouse-face
 @vindex gnus-mouse-face
-\e$B$3$l$O\e(B gnus \e$B$G%^%&%9$N%O%$%i%$%H$K;H$o$l$k%U%'%$%9\e(B (\e$B$9$J$o$A!"%U%)%s%H\e(B)
-\e$B$G$9!#\e(B@code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$G$"$k$H!"%^%&%9%O%$%i%$%H$O$J$5\e(B
-\e$B$l$^$;$s!#\e(B
+\e$B$3$l$O\e(B gnus \e$B$G%^%&%9$N%O%$%i%$%H$K;H$o$l$k%U%'%$%9\e(B (\e$B$9$J$o$A!"%U%)%s\e(B
+\e$B%H\e(B) \e$B$G$9!#\e(B@code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$G$"$k$H!"%^%&%9%O%$%i%$%H$O\e(B
+\e$B$J$5$l$^$;$s!#\e(B
 
 @end table
 
@@ -16100,7 +17105,6 @@ gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
 
 @end table
 
-
 @node Buttons
 @section \e$B%\%?%s\e(B
 @cindex buttons
@@ -16108,19 +17112,18 @@ gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
 @cindex click
 
 \e$B:G6a$G$O!":G?7N.9T$N%^%&%9\e(B @dfn{mouse} \e$BAuCV$,!"$A$c$s$H$7$?A`:nK!$r3X$S\e(B
-\e$B$?$,$i$J$$%J%&$J%d%s%0$N4V$GBg?M5$$G$9!#$=$l$G$O!";d$,\e(BTops 20 \e$B%7%9%F%`>e\e(B
-\e$B$G\e(B Emacs \e$B$r;H$C$F$$$?:"$N\e(B '89 \e$BG/$N2F$r;W$$5/$3$7$F$_$^$7$g$&!#\e(B300 \e$B?M$NMx\e(B
-\e$BMQ<T$,!"0l$D$N%^%7%s>e$G!"$_$s$J$,\e(B Simula \e$B%3%s%Q%$%i$rAv$i$;$F$$$^$7$?!#\e(B
+\e$B$?$,$i$J$$%J%&$J%d%s%0$N4V$GBg?M5$$G$9!#$=$l$G$O!";d$,\e(B Tops 20 \e$B%7%9%F%`\e(B
+\e$B>e$G\e(B Emacs \e$B$r;H$C$F$$$?:"$N\e(B '89 \e$BG/$N2F$r;W$$5/$3$7$F$_$^$7$g$&!#\e(B300 \e$B?M$N\e(B
+\e$BMxMQ<T$,!"0l$D$N%^%7%s>e$G!"$_$s$J$,\e(B Simula \e$B%3%s%Q%$%i$rAv$i$;$F$$$^$7$?!#\e(B
 \e$B$"$"!"$P$+$P$+$7$$\e(B!
 
 \e$B$[$s$H$K$=$&$@$M!#\e(B
 
 @vindex gnus-carpal
-\e$B$^$:$G$9$M!"\e(B@code{gnus-carpal} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$K$h$C\e(B
-\e$B$F!"%/%j%C%/$9$k$@$1$G2?$G$b$G$-$k%\%?%s$@$i$1$N%P%C%U%!$r\e(B gnus
-\e$B$KI=<($5$;$k$3$H$,$G$-$^$9!#$H$C$F$b4JC1$G$9!"$[$s$H$K!#;X05NEK!\e(B
-\e$B$N@h@8$K65$($F$"$2$F!#\e(B(\e$BLuCm\e(B: carpal \e$B$H$O<j<s$N9|$N$3$H\e(B)
-
+\e$B$^$:$G$9$M!"\e(B@code{gnus-carpal} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$K$h$C$F!"%/%j%C\e(B
+\e$B%/$9$k$@$1$G2?$G$b$G$-$k%\%?%s$@$i$1$N%P%C%U%!$r\e(B gnus \e$B$KI=<($5$;$k$3$H$,\e(B
+\e$B$G$-$^$9!#$H$C$F$b4JC1$G$9!"$[$s$H$K!#;X05NEK!$N@h@8$K65$($F$"$2$F!#\e(B(\e$BLu\e(B
+\e$BCm\e(B: carpal \e$B$H$O<j<s$N9|$N$3$H\e(B)
 
 @table @code
 
@@ -16130,7 +17133,6 @@ gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
 
 @item gnus-carpal-button-face
 @vindex gnus-carpal-button-face
-Face used on buttons.
 \e$B%\%?%s$K;H$o$l$k%U%'%$%9!#\e(B
 
 @item gnus-carpal-header-face
@@ -16155,35 +17157,34 @@ Face used on buttons.
 @end table
 
 \e$BA4$F$N\e(B @code{buttons} \e$BJQ?t$O%j%9%H$G$9!#$3$N%j%9%H$NMWAG$O!"\e(B
-@code{car} \e$B$,I=<($5$l$kJ8$G\e(B @code{cdr} \e$B$,4X?t%7%s%\%k$N\e(B cons \e$B%;\e(B
-\e$B%k$+!"$b$7$/$O$?$@$NJ8;zNs$N$I$A$i$+$G$9!#\e(B
-
+@code{car} \e$B$,I=<($5$l$kJ8$G\e(B @code{cdr} \e$B$,4X?t%7%s%\%k$N\e(B cons \e$B%;%k$+!"$b\e(B
+\e$B$7$/$O$?$@$NJ8;zNs$N$I$A$i$+$G$9!#\e(B
 
 @node Daemons
 @section \e$B%G!<%b%s\e(B
 @cindex demons
 @cindex daemons
 
-Gnus\e$B!"$=$l$O\e(B(\e$B8@$$EA$($K$h$l$P\e(B)\e$B$+$D$F=q$+$l$?$$$+$J$k%W%m%0%i%`$h\e(B
-\e$B$j$bBg$-$/!"$"$J$?$,$d$C$FM_$7$$$H;W$&$5$^$6$^$J4qL/$J$3$H$r!"$"\e(B
-\e$B$J$?$N$$$J$$$H$3$m$G9T$C$F$/$l$k$b$N$G$9!#Nc$($P!"$"$J$?$O;~$?$^\e(B
-\e$B?7Ce%a!<%k$r%A%'%C%/$7$F$b$i$$$?$/$J$k$+$bCN$l$^$;$s!#$"$k$$$O\e(B
-Emacs \e$B$r$7$P$i$/J|$C$F$*$$$?$H$-A4$F$N%5!<%P$N@\B3$r@ZCG$7$F$b$i\e(B
-\e$B$$$?$/$J$k$+$b$7$l$^$;$s!#B>$K$b2?$+$=$&$$$C$?$3$H$G$9!#\e(B
+Gnus\e$B!"$=$l$O\e(B(\e$B8@$$EA$($K$h$l$P\e(B)\e$B$+$D$F=q$+$l$?$$$+$J$k%W%m%0%i%`$h$j$bBg$-\e(B
+\e$B$/!"$"$J$?$,$d$C$FM_$7$$$H;W$&$5$^$6$^$J4qL/$J$3$H$r!"$"$J$?$N$$$J$$$H$3\e(B
+\e$B$m$G9T$C$F$/$l$k$b$N$G$9!#Nc$($P!"$"$J$?$O;~$?$^?7Ce%a!<%k$r%A%'%C%/$7$F\e(B
+\e$B$b$i$$$?$/$J$k$+$bCN$l$^$;$s!#$"$k$$$O\e(B Emacs \e$B$r$7$P$i$/J|$C$F$*$$$?$H$-\e(B
+\e$BA4$F$N%5!<%P$N@\B3$r@ZCG$7$F$b$i$$$?$/$J$k$+$b$7$l$^$;$s!#B>$K$b2?$+$=$&\e(B
+\e$B$$$C$?$3$H$G$9!#\e(B
 
-Gnus \e$B$O$5$^$6$^$J@)8f;R\e(B @dfn{handlers} \e$B$rDj5A$9$k$3$H$K$h$C$F$=\e(B
-\e$B$N$h$&$J$3$H$r2DG=$K$7$^$9!#3F@)8f;R$O;0$D$NMWAG$+$i@.$j$^$9!#\e(B
-@var{\e$B4X?t\e(B}\e$B!"\e(B@var{\e$B;~4V\e(B}\e$B!"\e(B@var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$G$9!#\e(B
+Gnus \e$B$O$5$^$6$^$J@)8f;R\e(B @dfn{handlers} \e$B$rDj5A$9$k$3$H$K$h$C$F$=$N$h$&$J\e(B
+\e$B$3$H$r2DG=$K$7$^$9!#3F@)8f;R$O;0$D$NMWAG$+$i@.$j$^$9!#\e(B
+@var{\e$B4X?t\e(B}, @var{\e$B;~4V\e(B}, @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$G$9!#\e(B
 
-\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$J$$6uE>>uBV$,;0==J,B3$$$?$H$-$K@\B3$r@ZCG\e(B
-\e$B$9$k@)8f;R$NNc$G$9!#\e(B
+\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$J$$6uE>>uBV$,;0==J,B3$$$?$H$-$K@\B3$r@ZCG$9$k@)8f\e(B
+\e$B;R$NNc$G$9!#\e(B
 
 @lisp
 (gnus-demon-close-connections nil 30)
 @end lisp
 
-\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$F$$$J$$$H$-!"0l;~4VKh$K\e(B PGP \e$B%X%C%@!<$rAv::\e(B
-\e$B$9$k@)8f;R$G$9!#\e(B
+\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$F$$$J$$$H$-!"0l;~4VKh$K\e(B PGP \e$B%X%C%@!<$rAv::$9$k@)8f\e(B
+\e$B;R$G$9!#\e(B
 
 @lisp
 (gnus-demon-scan-pgp 60 t)
@@ -16193,29 +17194,27 @@ Gnus \e$B$O$5$^$6$^$J@)8f;R\e(B @dfn{handlers} \e$B$rDj5A$9$k$3$H$K$h$C$F$=\e(B
 \e$B@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var{\e$B6uE>\e(B} \e$B$,\e(B @code{nil} \e$B$N\e(B
 \e$B;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
 
-\e$B$b$7\e(B @var{\e$B6uE>\e(B} \e$B$,\e(B @code{t} \e$B$G$"$l$P!"$3$N4X?t$O\e(B Emacs \e$B$,2?$b$7\e(B
-\e$B$F$$$J$$;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,8e$K8F$S=P$5$l$^$9!#0lC6\e(B Emacs \e$B$,\e(B
-\e$B$:$C$H6uE>>uBV$K$J$C$?8e$O!"$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5\e(B
-\e$B$l$^$9!#\e(B
+\e$B$b$7\e(B @var{\e$B6uE>\e(B} \e$B$,\e(B @code{t} \e$B$G$"$l$P!"$3$N4X?t$O\e(B Emacs \e$B$,2?$b$7$F$$$J$$\e(B
+\e$B;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,8e$K8F$S=P$5$l$^$9!#0lC6\e(B Emacs \e$B$,$:$C$H6uE>>uBV$K\e(B
+\e$B$J$C$?8e$O!"$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
 
-@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$b?t$G$"$k>l9g!"$3$N4X?t$O!"\e(B Emacs
-\e$B$N6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$$$?;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S\e(B
-\e$B=P$5$l$^$9!#\e(B
+@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$b?t$G$"$k>l9g!"$3$N4X?t$O!"\e(BEmacs \e$B$N6uE>>u\e(B
+\e$BBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$$$?;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
 
-@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$,\e(B @code{nil} \e$B$N>l9g!"$3$N4X?t$O!"\e(B
-Emacs \e$B$N6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$/EY$K0lEY8F$S=P$5$l$^$9!#\e(B
+@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$,\e(B @code{nil} \e$B$N>l9g!"$3$N4X?t$O!"\e(BEmacs \e$B$N\e(B
+\e$B6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$/EY$K0lEY8F$S=P$5$l$^$9!#\e(B
 
-\e$B$=$7$F\e(B @var{\e$B;~4V\e(B} \e$B$,J8;zNs$N>l9g$O!"\e(B@samp{07:31} \e$B$N$h$&$J7A<0$G\e(B
-\e$B$J$1$l$P$J$i$:!"$3$N4X?t$OKhF|$=$N:"$N;~4V$K$J$k$H0lEY8F$S=P$5$l\e(B
-\e$B$^$9!#$b$A$m$s!"\e(B@var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$GF0:n$,JQ$o$j$^$9!#\e(B
+\e$B$=$7$F\e(B @var{\e$B;~4V\e(B} \e$B$,J8;zNs$N>l9g$O!"\e(B@samp{07:31} \e$B$N$h$&$J7A<0$G$J$1$l$P\e(B
+\e$B$J$i$:!"$3$N4X?t$OKhF|$=$N:"$N;~4V$K$J$k$H0lEY8F$S=P$5$l$^$9!#$b$A$m$s!"\e(B
+@var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$GF0:n$,JQ$o$j$^$9!#\e(B
 
 @vindex gnus-demon-timestep
-(\e$B$3$3$G\e(B ``\e$BJ,\e(B'' \e$B$H8@$C$?$H$-!"$=$l$O<B:]$K$O\e(B
-@code{gnus-demon-timestep} \e$BIC$N$3$H$G$9!#$3$l$O=i4|@_Dj$G$O\e(B 60\e$B$G\e(B
-\e$B$9!#$b$7$3$NJQ?t$rJQ99$9$k$H!"A4$F$N@)8f;R$N7W;~$K1F6A$rM?$($^$9!#\e(B)
+(\e$B$3$3$G\e(B ``\e$BJ,\e(B'' \e$B$H8@$C$?$H$-!"$=$l$O<B:]$K\e(B
+\e$B$O\e(B @code{gnus-demon-timestep} \e$BIC$N$3$H$G$9!#$3$l$O=i4|@_Dj$G$O\e(B 60 \e$B$G$9!#\e(B
+\e$B$b$7$3$NJQ?t$rJQ99$9$k$H!"A4$F$N@)8f;R$N7W;~$K1F6A$rM?$($^$9!#\e(B)
 
-\e$B$H$$$&$o$1$G!"@)8f;R$rDI2C$7$?$1$l$P!"\e(B @file{.gnus} \e$B%U%!%$%k$K!"\e(B
-\e$B0J2<$N$h$&$J$b$N$r=q$/$3$H$,$G$-$^$9!#\e(B
+\e$B$H$$$&$o$1$G!"@)8f;R$rDI2C$7$?$1$l$P!"\e(B@file{.gnus} \e$B%U%!%$%k$K!"0J2<$N$h\e(B
+\e$B$&$J$b$N$r=q$/$3$H$,$G$-$^$9!#\e(B
 
 @findex gnus-demon-add-handler
 @lisp
@@ -16228,118 +17227,90 @@ Emacs \e$B$N6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$/EY$K0lEY8F$S=P$5$l$^$9!#\e(B
 @findex gnus-demon-add-scan-timestamps
 @findex gnus-demon-add-disconnection
 \e$B$3$N$?$a$N4{@=4X?t$,$$$/$D$+:n@.$5$l$F$$$^$9!#\e(B
-@code{gnus-demon-add-nocem}\e$B!"\e(B
-@code{gnus-demon-add-disconnection}\e$B!"\e(B
-@code{gnus-demon-add-nntp-close-connection}\e$B!"\e(B
-@code{gnus-demon-add-scan-timestamps}\e$B!"\e(B
-@code{gnus-demon-add-rescan}\e$B!"\e(B@code{gnus-demon-add-scanmail} \e$B$G\e(B
-\e$B$9!#$3$l$i$NG=NO$,M_$7$1$l$P!"C1$K$3$l$i$N4X?t$r\e(B @file{.gnus} \e$B$K\e(B
-\e$BF~$l$F$/$@$5$$!#\e(B
+@code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, @code{gnus-demon-add-nntp-close-connection}, @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, @code{gnus-demon-add-scanmail} \e$B$G\e(B
+\e$B$9!#$3$l$i$NG=NO$,M_$7$1$l$P!"C1$K$3$l$i$N4X?t$r\e(B @file{.gnus} \e$B$KF~$l$F$/\e(B
+\e$B$@$5$$!#\e(B
 
 @findex gnus-demon-init
 @findex gnus-demon-cancel
 @vindex gnus-demon-handlers
-\e$B$b$7\e(B @code{gnus-demon-handlers} \e$B$G@)8f;R$rD>@\DI2C$7$?>l9g$K$O!"\e(B
-\e$B$=$l$r8z$+$;$k$?$a$K\e(B @code{gnus-demon-init} \e$B$r<B9T$7$F$/$@$5$$!#\e(B
-\e$BA4$F$N%G!<%b%s$r<h$j>C$9$K$O!"\e(B@code{gnus-demon-cancel} \e$B4X?t$r;H\e(B
-\e$B$&$3$H$,$G$-$^$9!#\e(B
-
-\e$B%G!<%b%s$NDI2C$O!"$d$j$9$.$k$N$O$H$C$F$b$*9T57$N$h$/$J$$$3$H$G$9!#\e(B
-\e$BA4$F$N%5!<%P!<$+$iA4$F$N%K%e!<%9$H%a!<%k$rFsICKh$KD4$Y$^$o$94X?t\e(B
-\e$B$rIU$12C$($A$c$C$?$j$9$k$H!"$I$s$JN)GI$J%7%9%F%`$G$b4V0c$$$J$/$*\e(B
-\e$BJ'$$H"$K$7$F$7$^$$$^$9!#$=$&F0$/$s$@$b$s!#\e(B
+\e$B$b$7\e(B @code{gnus-demon-handlers} \e$B$G@)8f;R$rD>@\DI2C$7$?>l9g$K$O!"$=$l$r8z\e(B
+\e$B$+$;$k$?$a$K\e(B @code{gnus-demon-init} \e$B$r<B9T$7$F$/$@$5$$!#A4$F$N%G!<%b%s$r\e(B
+\e$B<h$j>C$9$K$O!"\e(B@code{gnus-demon-cancel} \e$B4X?t$r;H$&$3$H$,$G$-$^$9!#\e(B
 
+\e$B%G!<%b%s$NDI2C$O!"$d$j$9$.$k$N$O$H$C$F$b$*9T57$N$h$/$J$$$3$H$G$9!#A4$F$N\e(B
+\e$B%5!<%P!<$+$iA4$F$N%K%e!<%9$H%a!<%k$rFsICKh$KD4$Y$^$o$94X?t$rIU$12C$($A$c$C\e(B
+\e$B$?$j$9$k$H!"$I$s$JN)GI$J%7%9%F%`$G$b4V0c$$$J$/$*J'$$H"$K$7$F$7$^$$$^$9!#\e(B
+\e$B$=$&F0$/$s$@$b$s!#\e(B
 
 @node NoCeM
 @section NoCeM
 @cindex nocem
 @cindex spam
 
-\e$B%9%Q%`\e(B @dfn{Spam} \e$B$H$O!"F1$85-;v$r2?2s$b2?2s$b2?2s$bEj9F$9$k$3$H\e(B
-\e$B$G$9!#%9%Q%`$O0-$$$3$H$G$9!#%9%Q%`$O6'0-$G$9!#\e(B
+\e$B%9%Q%`\e(B @dfn{Spam} \e$B$H$O!"F1$85-;v$r2?2s$b2?2s$b2?2s$bEj9F$9$k$3$H$G$9!#%9\e(B
+\e$B%Q%`$O0-$$$3$H$G$9!#%9%Q%`$O6'0-$G$9!#\e(B
 
-\e$B%9%Q%`$ODL>o0lF|$+$=$3$i$G!"$5$^$6$^$JH?%9%Q%`5!4X$+$i<h$j>C$7$5\e(B
-\e$B$l$^$9!#$3$l$i$N5!4X$ODL>o0l=o$K!"\e(B@dfn{NoCeM} \e$B%a%C%;!<%8$bAw?.$7\e(B
-\e$B$^$9!#\e(B@dfn{NoCeM} \e$B$O\e(B ``no see-'em'' (\e$BH`$i$r8+$?$/$J$$\e(B)\e$B$HH/2;$5$l!"\e(B
-\e$B0UL#$O$=$NL>A0$NDL$j$G$9\e(B --- \e$B$3$N%a%C%;!<%8$O!":a$rHH$7$F$$$k5-\e(B
-\e$B;v$r!"$D$^$j!">C$7$F$7$^$$$^$9!#\e(B
+\e$B%9%Q%`$ODL>o0lF|$+$=$3$i$G!"$5$^$6$^$JH?%9%Q%`5!4X$+$i<h$j>C$7$5$l$^$9!#\e(B
+\e$B$3$l$i$N5!4X$ODL>o0l=o$K!"\e(B@dfn{NoCeM} \e$B%a%C%;!<%8$bAw?.$7$^$9!#\e(B
+@dfn{NoCeM} \e$B$O\e(B ``no see-'em'' (\e$BH`$i$r8+$?$/$J$$\e(B)\e$B$HH/2;$5$l!"0UL#$O$=$NL>\e(B
+\e$BA0$NDL$j$G$9\e(B --- \e$B$3$N%a%C%;!<%8$O!":a$rHH$7$F$$$k5-;v$r!"$D$^$j!">C$7$F\e(B
+\e$B$7$^$$$^$9!#\e(B
 
-\e$B$I$&$;$=$N5-;v$,<h$j>C$7$5$l$F$7$^$&$N$J$i!"$3$l$i\e(B NoCeM \e$B%a%C%;!<\e(B
-\e$B%8$O2?$K;H$o$l$k$N$G$7$g$&\e(B? \e$B$"$k%5%$%H$G$O<h$j>C$7%a%C%;!<%8$r0z\e(B
-\e$B$-<u$1$:!"$"$k%5%$%H$G$OFCDj$N?t?M$+$i$N<h$j>C$7%a%C%;!<%8$N$_$7\e(B
-\e$B$+0z$-<u$1$^$;$s!#$=$l$G!"$"$J$?$O\e(B NoCeM \e$B%a%C%;!<%8$r;H$$$?$/$J\e(B
-\e$B$k$+$b$7$l$J$$$o$1$G$9!#$3$l$i$O\e(B @samp{alt.nocem.misc} \e$B%K%e!<%9\e(B
-\e$B%0%k!<%W$GG[I[$5$l$F$$$^$9!#\e(B
+\e$B$I$&$;$=$N5-;v$,<h$j>C$7$5$l$F$7$^$&$N$J$i!"$3$l$i\e(B NoCeM \e$B%a%C%;!<%8$O2?\e(B
+\e$B$K;H$o$l$k$N$G$7$g$&\e(B? \e$B$"$k%5%$%H$G$O<h$j>C$7%a%C%;!<%8$r0z$-<u$1$:!"$"$k\e(B
+\e$B%5%$%H$G$OFCDj$N?t?M$+$i$N<h$j>C$7%a%C%;!<%8$N$_$7$+0z$-<u$1$^$;$s!#$=$l\e(B
+\e$B$G!"$"$J$?$O\e(B NoCeM \e$B%a%C%;!<%8$r;H$$$?$/$J$k$+$b$7$l$J$$$o$1$G$9!#$3$l$i\e(B
+\e$B$O\e(B @samp{alt.nocem.misc} \e$B%K%e!<%9%0%k!<%W$GG[I[$5$l$F$$$^$9!#\e(B
 
-Gnus \e$B$O$3$N%0%k!<%W$N%a%C%;!<%8$r<+F0E*$KFI$_!"2r<a$9$k$3$H$,$G\e(B
-\e$B$-!"$3$l$G%9%Q%`$r>C$75n$j$^$9!#\e(B
+Gnus \e$B$O$3$N%0%k!<%W$N%a%C%;!<%8$r<+F0E*$KFI$_!"2r<a$9$k$3$H$,$G$-!"$3$l\e(B
+\e$B$G%9%Q%`$r>C$75n$j$^$9!#\e(B
 
 \e$B$b$A$m$s!"$3$l$i$r%+%9%?%^%$%:$9$k$?$a$NJQ?t$,$$$/$D$+$"$j$^$9!#\e(B
 
 @table @code
 @item gnus-use-nocem
 @vindex gnus-use-nocem
-\e$B$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$G3hF0$r3+;O$5$;$^$9!#=i4|@_Dj\e(B
-\e$B$G$O\e(B @code{nil} \e$B$G$9!#\e(B
+\e$B$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$G3hF0$r3+;O$5$;$^$9!#=i4|@_Dj$G\e(B
+\e$B$O\e(B @code{nil} \e$B$G$9!#\e(B
 
 @item gnus-nocem-groups
 @vindex gnus-nocem-groups
-Gnus \e$B$O$3$N%0%k!<%W%j%9%H$+$i\e(B NoCeM \e$B%a%C%;!<%8$rC5$7$^$9!#=i4|@_\e(B
-\e$BDjCM$O\e(B @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
-"alt.nocem.misc" "news.admin.net-abuse.announce")} \e$B$G$9!#\e(B
+Gnus \e$B$O$3$N%0%k!<%W%j%9%H$+$i\e(B NoCeM \e$B%a%C%;!<%8$rC5$7$^$9!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{("news.lists.filters" "news.admin.net-abuse.bulletins" "alt.nocem.misc" "news.admin.net-abuse.announce")} \e$B$G\e(B
+\e$B$9!#\e(B
 
 @item gnus-nocem-issuers
 @vindex gnus-nocem-issuers
-NoCeM \e$B%a%C%;!<%8$rH/9T$9$k?M$O$?$/$5$s$$$^$9!#$3$N%j%9%H$G$O!"C/\e(B
-\e$B$N8@$&$3$H$K=>$$$?$$$+$r;XDj$7$^$9!#=i4|@_DjCM$O\e(B @code{("Automoose-1"
-"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
-"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
-(Richard E. Depew)")} \e$B$G$9!#H`$i$O$_$s$J!"N)GI$G9b7i$J;TL1$G$9!#\e(B
-
-\e$B$3$N%j%9%H$K4^$a$i$l$kM-L>$JH?%9%Q%`2H$O0J2<$G$9!#\e(B
+NoCeM \e$B%a%C%;!<%8$rH/9T$9$k?M$O$?$/$5$s$$$^$9!#$3$N%j%9%H$G$O!"C/$N8@$&$3\e(B
+\e$B$H$K=>$$$?$$$+$r;XDj$7$^$9!#=i4|@_DjCM$O\e(B @code{(("Automoose-1"
+"clewis@@ferret.ocunix.on.ca" "cosmo.roadkill" "SpamHippo"
+"hweede@@snafu.de")} \e$B$G$9!#H`$i$O$_$s$J!"N)GI$G9b7i$J;TL1$G$9!#\e(B
 
-@table @samp
-@item clewis@@ferret.ocunix.on.ca;
-@cindex Chris Lewis
-Chris Lewis --- \e$B<gMW$J%+%J%@$NH?%9%Q%`2H!#$*$=$i$/C/$h$j$bB?$/!"\e(B
-\e$B%M%C%H%K%e!<%9$NMtMQ$r<h$j>C$7$F$$$^$9!#\e(B
-
-@item Automoose-1
-@cindex CancelMoose[tm]
-\e$B<+F01?E>$N\e(B CancelMoose[tm]\e$B!#\e(B CancelMoose[tm] \e$B$O%N%k%&%'!<?M$H$5\e(B
-\e$B$l!"\e(BNoCeM \e$B$rH/L@$7$??M$G$7$?!#\e(B
-
-@item jem@@xpat.com;
-@cindex Jem
-John Milburn --- \e$B4Z9q$NH?%9%Q%`2H!#:G6a$O$+$J$jK;$7$/$J$C$F$-$F\e(B
-\e$B$$$k$h$&$G$9!#\e(B
-
-@item red@@redpoll.mrfs.oh.us (Richard E. Depew)
-Richard E. Depew --- \e$B%"%a%j%+$NC1FHH?%9%Q%`2H!#<g$KHs%P%$%J%j%0\e(B
-\e$B%k!<%W$X$N%P%$%J%jEj9F$N<h$j>C$7$H!"\e(Bspew (\e$B5UN.5-;v\e(B) \e$B$r:o=|$7$F$$\e(B
-\e$B$^$9!#\e(B
-@end table
+\e$B$3$N%j%9%H$K4^$a$i$l$kM-L>$JH?%9%Q%`2H$?$A\e(B
+\e$B$O\e(B @file{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html} \e$B$K:\$C$F\e(B
+\e$B$$$^$9!#\e(B
 
 \e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B --- \e$B8@$&$3\e(B
 \e$B$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM\e$B%a%C%;!<%8A4$F$r<u\e(B
 \e$B$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C\e(B
 \e$B%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O\e(B
-\e$B87L)$J!"DxEY$M!#$?$$$F$$$O>/$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B
-@samp{spew}\e$B!"\e(B @samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r\e(B
-\e$B;XDj$9$k$K$O!"%j%9%H$NCf$G\e(B @code{(@var{\e$BH/9T<T\e(B} @var{\e$B>r7o\e(B} @dots{})} \e$BMWAG\e(B
-\e$B$r;H$&I,MW$,$"$j$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) 
-\e$B$+!"$^$?$O\e(B @code{(not @var{\e$BJ8;zNs\e(B})} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B
-@var{\e$BJ8;zNs\e(B} \e$B$O;H$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
+\e$B87L)$J!"DxEY$M!#$?$$$F$$$O>/$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B
+@samp{spam}, @samp{spew}, @samp{mmf}, @samp{binary}, @samp{troll} \e$B$,$"$j\e(B
+\e$B$^$9!#$3$l$r;XDj$9$k$K$O!"%j%9%H$NCf$G\e(B @code{(@var{\e$BH/9T<T\e(B} @var{\e$B>r\e(B
+\e$B7o\e(B} @dots{})} \e$BMWAG$r;H$&I,MW$,$"$j$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C\e(B
+\e$B%A$9$k@55,I=8=\e(B) \e$B$+!"$^$?$O\e(B @code{(not @var{\e$BJ8;zNs\e(B})} \e$B$H$$$&7A<0$N%j%9%H\e(B
+\e$B$G$9!#$3$N>l9g$O\e(B @var{\e$BJ8;zNs\e(B} \e$B$O;H$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9\e(B
 
-\e$BNc$($P!"\e(BChris Lewis \e$B$+$i$N\e(B NoCeM \e$B%a%C%;!<%8$G!"\e(B@samp{troll} \e$B%a%C\e(B
-\e$B%;!<%80J30$NA4$F$rM_$7$$>l9g$K$O!"\e(B
+\e$BNc$($P!"\e(BChris Lewis \e$B$+$i$N\e(B NoCeM \e$B%a%C%;!<%8$G!"\e(B@samp{troll} \e$B%a%C%;!<%80J\e(B
+\e$B30$NA4$F$rM_$7$$>l9g$K$O!"\e(B
 
 @lisp
 ("clewis@@ferret.ocunix.on.ca" ".*" (not "troll"))
 @end lisp
 
-\e$B0lJ}!"H`$N\e(B @samp{spam} \e$B$H\e(B @samp{spew} \e$B%a%C%;!<%80J30$O2?$b$7$?$/\e(B
-\e$B$J$1$l$P!"0J2<$N$h$&$K$G$-$^$9!#\e(B
+\e$B0lJ}!"H`$N\e(B @samp{spam} \e$B$H\e(B @samp{spew} \e$B%a%C%;!<%80J30$O2?$b$7$?$/$J$1$l$P!"\e(B
+\e$B0J2<$N$h$&$K$G$-$^$9!#\e(B
 
 @lisp
 ("clewis@@ferret.ocunix.on.ca" (not ".*") "spew" "spam")
@@ -16347,19 +17318,16 @@ Richard E. Depew --- \e$B%"%a%j%+$NC1FHH?%9%Q%`2H!#<g$KHs%P%$%J%j%0\e(B
 
 \e$B$3$N;XDj$O:8$+$i1&$KE,MQ$5$l$^$9!#\e(B
 
-
 @item gnus-nocem-verifyer
 @vindex gnus-nocem-verifyer
 @findex mc-verify
-\e$B$3$l$O\e(B NoCeM \e$BH/9T<T$,C/$G$"$k$+$H8@$C$F$$$k$+$r>ZL@$9$k4X?t$G$J\e(B
-\e$B$/$F$O$J$j$^$;$s!#=i4|@_Dj$G$O\e(B @code{mc-verify} \e$B$G$"$j!"$3$l$O\e(B
-Mailcrypt \e$B4X?t$G$9!#$b$7$3$l$,Hs>o$KCY$/$F!"$"$J$?$,>ZL@7k2L$r5$\e(B
-\e$B$K$7$J$$\e(B (\e$B$3$l$O$?$V$s4m81$G$9\e(B) \e$B$N$G$"$l$P!"$3$NJQ?t$r\e(B
-@code{nil} \e$B$K$9$k$3$H$,$G$-$^$9!#\e(B
-
-\e$B$b$7=pL>:Q$_$N\e(B NoCeM \e$B%a%C%;!<%8$r>ZL@:Q$_!"L$=pL>$N%a%C%;!<%8$r\e(B
-\e$BL$>ZL@\e(B(\e$B$G$b$=$l$r;H$&\e(B)\e$B$H$7$?$$$N$J$i!"0J2<$N$h$&$K$9$k$3$H$,$G$-\e(B
-\e$B$^$9!#\e(B
+\e$B$3$l$O\e(B NoCeM \e$BH/9T<T$,C/$G$"$k$+$H8@$C$F$$$k$+$r>ZL@$9$k4X?t$G$J$/$F$O$J\e(B
+\e$B$j$^$;$s!#=i4|@_Dj$G$O\e(B @code{mc-verify} \e$B$G$"$j!"$3$l$O\e(B Mailcrypt \e$B4X?t$G\e(B
+\e$B$9!#$b$7$3$l$,Hs>o$KCY$/$F!"$"$J$?$,>ZL@7k2L$r5$$K$7$J$$\e(B (\e$B$3$l$O$?$V$s4m\e(B
+\e$B81$G$9\e(B) \e$B$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$b$7=pL>:Q$_$N\e(B NoCeM \e$B%a%C%;!<%8$r>ZL@:Q$_!"L$=pL>$N%a%C%;!<%8$rL$>Z\e(B
+\e$BL@\e(B (\e$B$G$b$=$l$r;H$&\e(B) \e$B$H$7$?$$$N$J$i!"0J2<$N$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
 
 @lisp
 (setq gnus-nocem-verifyer 'my-gnus-mc-verify)
@@ -16376,74 +17344,80 @@ Mailcrypt \e$B4X?t$G$9!#$b$7$3$l$,Hs>o$KCY$/$F!"$"$J$?$,>ZL@7k2L$r5$\e(B
 
 @item gnus-nocem-directory
 @vindex gnus-nocem-directory
-\e$B$3$l$O\e(B gnus \e$B$,\e(B NoCeM \e$B%-%c%C%7%e%U%!%$%k$rJ]B8$9$k>l=j$G$9!#=i4|\e(B
-\e$B@_DjCM$O\e(B @file{~/News/NoCeM/} \e$B$G$9!#\e(B
+\e$B$3$l$O\e(B gnus \e$B$,\e(B NoCeM \e$B%-%c%C%7%e%U%!%$%k$rJ]B8$9$k>l=j$G$9!#=i4|@_DjCM\e(B
+\e$B$O\e(B @file{~/News/NoCeM/} \e$B$G$9!#\e(B
 
 @item gnus-nocem-expiry-wait
 @vindex gnus-nocem-expiry-wait
-\e$B8E$$\e(B NoCeM \e$B9`L\$r%-%c%C%7%e$+$i>C$9$^$G$NF|?t!#=i4|@_DjCM$O\e(B 15
-\e$B$G$9!#$3$l$rC;$/$9$k$[$I\e(B gnus \e$B$OB.$/$J$j$^$9$,!"8E$$%9%Q%`$r8+$k\e(B
-\e$B$3$H$K$J$C$F$7$^$&$+$b$7$l$^$;$s!#\e(B
+\e$B8E$$\e(B NoCeM \e$B9`L\$r%-%c%C%7%e$+$i>C$9$^$G$NF|?t!#=i4|@_DjCM$O\e(B 15 \e$B$G$9!#$3\e(B
+\e$B$l$rC;$/$9$k$[$I\e(B gnus \e$B$OB.$/$J$j$^$9$,!"8E$$%9%Q%`$r8+$k$3$H$K$J$C$F$7$^\e(B
+\e$B$&$+$b$7$l$^$;$s!#\e(B
+
+@item gnus-nocem-check-from
+@vindex gnus-nocem-check-from
+\e$BHs\e(B@code{nil} \e$B$G$O!"5-;v$N%\%G%#$K$"$kH/9T?M$N@5Ev@-$rD4$Y$^$9!#$=$&$G$J\e(B
+\e$B$$>l9g$O!"Cx<T$,@5$7$$H/9T?M$G$J$/$F$b5$$K$;$:$K5-;v$r<h$j9~$_$^$9$,!"$b\e(B
+\e$B$7$"$J$?$,@5$7$$H/9T?M$r8+J,$1$i$l$k$J$i$P!"$=$&$7$?J}$,$H$F$bB.$/$J$k$G\e(B
+\e$B$7$g$&!#\e(B
 
-@end table
+@item gnus-nocem-check-article-limit
+@vindex gnus-nocem-check-article-limit
+\e$BHs\e(B@code{nil} \e$B$G!"A4$F$N\e(B NoCeM \e$B%0%k!<%W$K$*$1$k%A%'%C%/$9$k5-;v$N:GBg?t$r\e(B
+\e$B;XDj$7$^$9!#\e(BNoCeM \e$B%0%k!<%W$O5pBg$K$J$k$3$H$,$"$j!"$=$&$J$k$H=hM}$,$H$F$b\e(B
+\e$BCY$/$J$j$^$9!#\e(B
 
-NoCeM \e$B$r;H$&$H!"$b$7$+$9$k$H%a%b%j6t$$$K$J$k$+$b$7$l$^$;$s!#$"$J\e(B
-\e$B$?$,$?$/$5$s$N@8$-$?%0%k!<%W\e(B (\e$B$D$^$j9XFI$"$k$$$OHs9XFI%0%k!<%W\e(B)
-\e$B$r;}$C$F$$$k$N$J$i!"\e(BEmacs \e$B%W%m%;%9$OBg$-$/$J$C$F$7$^$&$G$7$g$&!#\e(B
-\e$B$b$7$3$l$,LdBj$G$"$l$P!"Hs9XFI$N%0%k!<%W$rA4It\e(B (\e$B$"$k$$$O$=$NB?$/\e(B
-\e$B$r\e(B) \e$B>C$75n$C$F$7$^$C$?J}$,NI$$$G$9\e(B (@pxref{Subscription
-Commands})\e$B!#\e(B
+@end table
 
+NoCeM \e$B$r;H$&$H!"$b$7$+$9$k$H%a%b%j6t$$$K$J$k$+$b$7$l$^$;$s!#$"$J$?$,$?$/\e(B
+\e$B$5$s$N@8$-$?%0%k!<%W\e(B (\e$B$D$^$j9XFI$"$k$$$OHs9XFI%0%k!<%W\e(B) \e$B$r;}$C$F$$$k$N$J\e(B
+\e$B$i!"\e(BEmacs \e$B%W%m%;%9$OBg$-$/$J$C$F$7$^$&$G$7$g$&!#$b$7$3$l$,LdBj$G$"$l$P!"\e(B
+\e$BHs9XFI$N%0%k!<%W$rA4It\e(B (\e$B$"$k$$$O$=$NB?$/$r\e(B) \e$B>C$75n$C$F$7$^$C$?J}$,NI$$$G\e(B
+\e$B$9\e(B (@pxref{Subscription Commands})\e$B!#\e(B
 
 @node Undo
 @section \e$B$d$jD>$7\e(B
 @cindex undo
 
-\e$B<B9T$7$?$3$H$N$d$jD>$7$,$G$-$k$H!"$H$F$bJXMx$G$9!#IaDL$N\e(B Emacs
-\e$B%P%C%U%!$G$O!"$3$l$O==J,4JC1$G$9\e(B --- \e$BC1$K\e(B @code{undo} \e$B%\%?%s$r2!\e(B
-\e$B$9$@$1$G$9!#$7$+$7\e(B gnus \e$B$N%P%C%U%!$G$O!"$3$l$O4JC1$G$O$"$j$^$;$s!#\e(B
-
-Gnus \e$B$,%P%C%U%!!<Fb$KI=<($7$F$$$k$b$N$O!"\e(Bgnus \e$B$K$H$C$F$OA4$/2?$N\e(B
-\e$B2ACM$b$"$j$^$;$s\e(B --- \e$B$3$l$O$_$s$J!"MxMQ<T$K4qNo$K8+$($k$h$&$K%G\e(B
-\e$B%6%$%s$5$l$F$$$k$?$@$N%G!<%?$J$N$G$9!#\e(B@kbd{C-k} \e$B$G%0%k!<%W%P%C%U%!\e(B
-\e$B$+$i%0%k!<%W$r>C5n$9$k$N$O!"$=$N9T$O>C$(5n$j$^$9$,!"$=$l$O<B:]$N\e(B
-\e$BF0:n\e(B --- \e$BLdBj$N%0%k!<%W$r\e(B gnus \e$B$NFbIt9=B$BN$+$i:o=|$9$k$3$H!"$N\e(B
-\e$BC1$J$kI{:nMQ$G$7$+$"$j$^$;$s!#$3$l$i$N$d$jD>$7$O!"DL>o$N\e(B Emacs
-\e$B$N\e(B @code{undo} \e$B4X?t$G$O9T$J$&$3$H$,$G$-$^$;$s!#\e(B
-
-Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r\e(B
-\e$B9T$J$&F0:n$rDs6!$9$k$3$H$K$h$C$F!"$3$l$r2?$H$+5_:Q$7$h$&$H$7$^$9!#\e(B
-\e$B$=$7$FMxMQ<T$,\e(B @code{undo} \e$B%-!<$r2!$7$?$H$-!"\e(Bgnus \e$B$O$=$N0l$D<jA0\e(B
-\e$B$NF0:n$"$k$$$OF0:n72$N5U$N%3!<%I$r<B9T$7$^$9!#$7$+$7!"A4$F$NF0:n\e(B
-\e$B$,4JC1$K2D5U$G$"$k$o$1$G$O$J$$$N$G!"\e(Bgnus \e$B$O8=:_!"$d$jD>$72DG=$J\e(B
-\e$B%-!<4X?t$O6O$+$7$+Ds6!$7$F$$$^$;$s!#$3$l$i$O!"%0%k!<%W$N:o=|!"%0%k!<\e(B
-\e$B%W$NE=$jIU$1!"%0%k!<%W$N4{FI5-;v$N%j%9%H$NJQ99!"$=$l$@$1$J$s$G$9!#\e(B
-\e$B>-Mh$O$b$C$H4X?t$,DI2C$5$l$k$+$b$7$l$^$;$s$,!"4X?t$NDI2C$O$=$l$>\e(B
-\e$B$lJ]B8$9$k$Y$-%G!<%?$rA}$d$9$3$H$K$J$k$N$G!"\e(Bgnus \e$B$O7h$7$F40A4$d\e(B
-\e$B$jD>$72DG=$K$O$J$i$J$$$G$7$g$&!#\e(B
+\e$B<B9T$7$?$3$H$N$d$jD>$7$,$G$-$k$H!"$H$F$bJXMx$G$9!#IaDL$N\e(B Emacs \e$B%P%C%U%!\e(B
+\e$B$G$O!"$3$l$O==J,4JC1$G$9\e(B --- \e$BC1$K\e(B @code{undo} \e$B%\%?%s$r2!$9$@$1$G$9!#$7$+\e(B
+\e$B$7\e(B gnus \e$B$N%P%C%U%!$G$O!"$3$l$O4JC1$G$O$"$j$^$;$s!#\e(B
+
+Gnus \e$B$,%P%C%U%!!<Fb$KI=<($7$F$$$k$b$N$O!"\e(Bgnus \e$B$K$H$C$F$OA4$/2?$N2ACM$b$"\e(B
+\e$B$j$^$;$s\e(B --- \e$B$3$l$O$_$s$J!"MxMQ<T$K4qNo$K8+$($k$h$&$K%G%6%$%s$5$l$F$$$k\e(B
+\e$B$?$@$N%G!<%?$J$N$G$9!#\e(B@kbd{C-k} \e$B$G%0%k!<%W%P%C%U%!$+$i%0%k!<%W$r>C5n$9$k\e(B
+\e$B$N$O!"$=$N9T$O>C$(5n$j$^$9$,!"$=$l$O<B:]$NF0:n\e(B --- \e$BLdBj$N%0%k!<%W\e(B
+\e$B$r\e(B gnus \e$B$NFbIt9=B$BN$+$i:o=|$9$k$3$H!"$NC1$J$kI{:nMQ$G$7$+$"$j$^$;$s!#$3\e(B
+\e$B$l$i$N$d$jD>$7$O!"DL>o$N\e(B Emacs \e$B$N\e(B @code{undo} \e$B4X?t$G$O9T$J$&$3$H$,$G$-$^\e(B
+\e$B$;$s!#\e(B
+
+Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r9T$J$&F0\e(B
+\e$B:n$rDs6!$9$k$3$H$K$h$C$F!"$3$l$r2?$H$+5_:Q$7$h$&$H$7$^$9!#$=$7$FMxMQ<T\e(B
+\e$B$,\e(B @code{undo} \e$B%-!<$r2!$7$?$H$-!"\e(Bgnus \e$B$O$=$N0l$D<jA0$NF0:n$"$k$$$OF0:n72\e(B
+\e$B$N5U$N%3!<%I$r<B9T$7$^$9!#$7$+$7!"A4$F$NF0:n$,4JC1$K2D5U$G$"$k$o$1$G$O$J\e(B
+\e$B$$$N$G!"\e(Bgnus \e$B$O8=:_!"$d$jD>$72DG=$J%-!<4X?t$O6O$+$7$+Ds6!$7$F$$$^$;$s!#\e(B
+\e$B$3$l$i$O!"%0%k!<%W$N:o=|!"%0%k!<%W$NE=$jIU$1!"%0%k!<%W$N4{FI5-;v$N%j%9%H\e(B
+\e$B$NJQ99!"$=$l$@$1$J$s$G$9!#>-Mh$O$b$C$H4X?t$,DI2C$5$l$k$+$b$7$l$^$;$s$,!"\e(B
+\e$B4X?t$NDI2C$O$=$l$>$lJ]B8$9$k$Y$-%G!<%?$rA}$d$9$3$H$K$J$k$N$G!"\e(Bgnus \e$B$O7h\e(B
+\e$B$7$F40A4$d$jD>$72DG=$K$O$J$i$J$$$G$7$g$&!#\e(B
 
 @findex gnus-undo-mode
 @vindex gnus-use-undo
 @findex gnus-undo
-\e$B$d$jD>$75!G=$O\e(B @code{gnus-undo-mode} \e$B%^%$%J!<%b!<%I$K$h$C$FDs6!\e(B
-\e$B$5$l$^$9!#$3$l$O\e(B @code{gnus-use-undo} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P\e(B
-\e$B;HMQ$5$l!"$3$l$,=i4|@_Dj$G$9!#\e(B@kbd{M-C-_} \e$B%-!<$,\e(B
-@code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$ODL>o$N\e(B Emacs \e$B$N\e(B
-@code{undo} \e$BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#\e(B
-
+\e$B$d$jD>$75!G=$O\e(B @code{gnus-undo-mode} \e$B%^%$%J!<%b!<%I$K$h$C$FDs6!$5$l$^$9!#\e(B
+\e$B$3$l$O\e(B @code{gnus-use-undo} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P;HMQ$5$l!"$3$l$,=i\e(B
+\e$B4|@_Dj$G$9!#\e(B@kbd{M-C-_} \e$B%-!<$,\e(B @code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$O\e(B
+\e$BDL>o$N\e(B Emacs \e$B$N\e(B @code{undo} \e$BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#\e(B
 
 @node Moderation
 @section \e$B;J2qLr\e(B
 @cindex moderation
 
-\e$B$b$7$"$J$?$,;J2q<T\e(B (\e$B%b%G%l!<%?!<\e(B) \e$B$J$i$P!"\e(B@file{gnus-mdrtn.el}
-\e$B%Q%C%1!<%8$r;H$&$3$H$,$G$-$^$9!#$3$l$OI8=`\e(B gnus \e$B%Q%C%1!<%8$K$O4^\e(B
-\e$B$^$l$^$;$s!#\e(B@samp{larsi@@gnus.org} \e$B$K!"$I$N%0%k!<%W$N;J2q$r9T$J\e(B
-\e$B$&$N$+$r=R$Y$?%a!<%k$r=q$$$F$/$@$5$$!#$=$&$9$l$P%3%T!<$r<j$KF~$l\e(B
-\e$B$i$l$^$9!#\e(B
+\e$B$b$7$"$J$?$,;J2q<T\e(B (\e$B%b%G%l!<%?!<\e(B) \e$B$J$i$P!"\e(B@file{gnus-mdrtn.el} \e$B%Q%C%1!<\e(B
+\e$B%8$r;H$&$3$H$,$G$-$^$9!#$3$l$OI8=`\e(B gnus \e$B%Q%C%1!<%8$K$O4^$^$l$^$;$s!#\e(B
+@samp{larsi@@gnus.org} \e$B$K!"$I$N%0%k!<%W$N;J2q$r9T$J$&$N$+$r=R$Y$?%a!<%k\e(B
+\e$B$r=q$$$F$/$@$5$$!#$=$&$9$l$P%3%T!<$r<j$KF~$l$i$l$^$9!#\e(B
 
-\e$B;J2q<TMQ%Q%C%1!<%8$O35N,%P%C%U%!$N%^%$%J!<%b!<%I$H$7$F<BAu$5$l$F\e(B
-\e$B$$$^$9!#\e(B
+\e$B;J2q<TMQ%Q%C%1!<%8$O35N,%P%C%U%!$N%^%$%J!<%b!<%I$H$7$F<BAu$5$l$F$$$^$9!#\e(B
 
 @lisp
 (add-hook 'gnus-summary-mode-hook 'gnus-moderate)
@@ -16451,18 +17425,18 @@ Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r\e(B
 
 \e$B$r$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$KF~$l$F$/$@$5$$!#\e(B
 
-\e$B$"$J$?$,\e(B @samp{rec.zoofle} \e$B$N;J2q<T$@$H$9$k$H!"$3$l$O0J2<$N$h$&\e(B
-\e$B$KF0:n$9$k$h$&$K$J$C$F$$$^$9!#\e(B
+\e$B$"$J$?$,\e(B @samp{rec.zoofle} \e$B$N;J2q<T$@$H$9$k$H!"$3$l$O0J2<$N$h$&$KF0:n$9\e(B
+\e$B$k$h$&$K$J$C$F$$$^$9!#\e(B
 
 @enumerate
 @item
-@samp{Newsgroups:.*rec.zoofle} \e$B$K%^%C%A$9$k<u?.%a!<%k$rJ,N%$7$^\e(B
-\e$B$9!#$3$l$OEj9F$5$l$h$&$H$7$F$$$k5-;v$rA4$F$"$k%a!<%k%0%k!<%W\e(B ---
-\e$BNc$($P\e(B @samp{nnml:rec.zoofle} \e$B$KF~$l$^$9!#\e(B
+@samp{Newsgroups:.*rec.zoofle} \e$B$K%^%C%A$9$k<u?.%a!<%k$rJ,N%$7$^$9!#$3$l\e(B
+\e$B$OEj9F$5$l$h$&$H$7$F$$$k5-;v$rA4$F$"$k%a!<%k%0%k!<%W\e(B --- \e$BNc$(\e(B
+\e$B$P\e(B @samp{nnml:rec.zoofle} \e$B$KF~$l$^$9!#\e(B
 
 @item
-\e$B$"$J$?$O;~@^$3$N%0%k!<%W$KF~$j!"\e(B@kbd{e} (edit-and-post) \e$B$"$k$$$O\e(B
-@kbd{s} (just send unedited) \e$BL?Na$r;H$C$F5-;v$rEj9F$7$^$9!#\e(B
+\e$B$"$J$?$O;~@^$3$N%0%k!<%W$KF~$j!"\e(B@kbd{e} (edit-and-post) \e$B$"$k$$\e(B
+\e$B$O\e(B @kbd{s} (just send unedited) \e$BL?Na$r;H$C$F5-;v$rEj9F$7$^$9!#\e(B
 
 @item
 @samp{rec.zoofle} \e$B%K%e!<%9%0%k!<%W$rFI$s$G$$$kESCf$G!"$b$7$"$J$?$,>5G'$7\e(B
@@ -16476,22 +17450,20 @@ Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r\e(B
       "^nnml:rec.zoofle$\\|^rec.zoofle$")
 @end lisp
 
-
 @node XEmacs Enhancements
 @section XEmacs \e$B3HD%\e(B
 @cindex XEmacs
 
-XEmacs \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(Bgnus \e$B$O$3$l\e(B
-\e$B$rMxMQ$9$k$3$H$K$7$^$9!#\e(B
+XEmacs \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(Bgnus \e$B$O$3$l$rMxMQ$9\e(B
+\e$B$k$3$H$K$7$^$9!#\e(B
 
 @menu
-* Picons::    \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!!#\e(B
-* Smileys::   \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!!#\e(B
-* Toolbar::   \e$B%/%j%C%/1n!#\e(B
-* XVarious::  \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t!#\e(B
+* Picons::   \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!\e(B
+* Smileys::  \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!\e(B
+* Toolbar::  \e$B%/%j%C%/1n\e(B
+* XVarious:: \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t\e(B
 @end menu
 
-
 @node Picons
 @subsection Picons
 
@@ -16501,20 +17473,20 @@ XEmacs \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(Bgnus \e$B$O$3$l\e(B
 @end iflatex
 @end iftex
 
-\e$B$=$l$G!D!"$"$J$?$O$3$N%K%e!<%9%j!<%@!<$r$5$i$K$b$C$HCY$/$7$?$$$C\e(B
-\e$B$F$o$1$@$M\e(B! \e$B$3$l$O$=$&$9$k$N$K$T$C$?$j$JJ}K!$G$9!#$5$i$K$3$l$O!"\e(B
-\e$B$"$J$?$,%K%e!<%9$rFI$s$G$$$k$s$@$H$$$&$3$H$r!"$"$J$?$N8*1[$7$K8+\e(B
-\e$B$D$a$F$$$k?M$K0u>]$E$1$k$?$a$NAG@2$i$7$$J}K!$G$b$"$j$^$9!#\e(B
+\e$B$=$l$G!D!"$"$J$?$O$3$N%K%e!<%9%j!<%@!<$r$5$i$K$b$C$HCY$/$7$?$$$C$F$o$1$@\e(B
+\e$B$M\e(B! \e$B$3$l$O$=$&$9$k$N$K$T$C$?$j$JJ}K!$G$9!#$5$i$K$3$l$O!"$"$J$?$,%K%e!<%9\e(B
+\e$B$rFI$s$G$$$k$s$@$H$$$&$3$H$r!"$"$J$?$N8*1[$7$K8+$D$a$F$$$k?M$K0u>]$E$1$k\e(B
+\e$B$?$a$NAG@2$i$7$$J}K!$G$b$"$j$^$9!#\e(B
 
 @menu
-* Picon Basics::           picon \e$B$H$O2?$G!"$I$&$d$C$F<j$KF~$l$k$N$+!#\e(B
-* Picon Requirements::     XEmacs \e$B$r;H$C$F$J$1$l$P$3$3$+$i$OFI$^$J$$$G!#\e(B
-* Easy Picons::            picon \e$B$NI=<(\e(B --- \e$B3Z$JJ}K!!#\e(B
-* Hard Picons::            \e$BK\Mh$9$Y$-$3$H!#2?$+$r3X$V$3$H$,$G$-$k$@$m$&!#\e(B
-* Picon Useless Configuration:: \e$B$=$NB>$N$V$C2u$7$?$j$R$M$C$?$j$$$8$C$?$jM7$s$@$j$9$kJQ?t!#\e(B
+* Picon Basics::                picon \e$B$H$O2?$G!"$I$&$d$C$F<j$KF~$l$k$N$+\e(B
+* Picon Requirements::          XEmacs \e$B$r;H$C$F$J$1$l$P$3$3$+$i$OFI$^$J$$$G\e(B
+* Easy Picons::                 picon \e$B$NI=<(\e(B --- \e$B3Z$JJ}K!\e(B
+* Hard Picons::                 \e$BK\Mh$9$Y$-$3$H!#2?$+$r3X$V$3$H$,$G$-$k$@$m$&\e(B
+* Picon Useless Configuration:: \e$B$=$NB>$N$V$C2u$7$?$j$R$M$C$?$j$$$8$C$?$j\e(B
+                                \e$BM7$s$@$j$9$kJQ?t\e(B
 @end menu
 
-
 @node Picon Basics
 @subsubsection Picon \e$B$N4pAC\e(B
 
@@ -16527,72 +17499,66 @@ Picon \e$B$H$O$J$s$G$7$g$&\e(B? Picons \e$B%&%'%V%5%$%H$+$iD>@\0zMQ$7$^$7$g$&!#\e(B
 @end iftex
 
 @quotation
-@dfn{Picon} \e$B$H$O!"\e(B``\e$B8D?M%"%$%3%s\e(B (personal icons)'' \e$B$NN,$G$9!#$3\e(B
-\e$B$l$O!"%M%C%H>e$NMxMQ<T$d%I%a%$%s$rI=8=$9$k$N$K;H$o$l$k$?$a$N>.$5\e(B
-\e$B$J2hA|$G!"%G!<%?%Y!<%9$r;}$?$;$F!"$"$kEE;R%a!<%k%"%I%l%9$,$"$C$?\e(B
-\e$B$i!"$=$l$KE,@Z$J2hA|$r8+$D$1$i$l$k$h$&$K$7$F$*$/$b$N$G$9!#MxMQ<T\e(B
-\e$B$H%I%a%$%s0J30$K$b!"\e(BUsenet \e$B%K%e!<%9%0%k!<%W$dE75$M=Js$N$?$a$N\e(B
-picon \e$B%G!<%?%Y!<%9$,$"$j$^$9!#\e(Bpicon \e$B$OGr9u$N\e(B @code{XBM} \e$B7A<0$G$b\e(B
-\e$B%+%i!<$N\e(B @code{XPM} \e$B7A<0$G$b\e(B @code{GIF} \e$B7A<0$G$b9=$$$^$;$s!#\e(B
+@dfn{Picon} \e$B$H$O!"\e(B``\e$B8D?M%"%$%3%s\e(B (personal icons)'' \e$B$NN,$G$9!#$3$l$O!"%M%C\e(B
+\e$B%H>e$NMxMQ<T$d%I%a%$%s$rI=8=$9$k$N$K;H$o$l$k$?$a$N>.$5$J2hA|$G!"%G!<%?%Y!<\e(B
+\e$B%9$r;}$?$;$F!"$"$kEE;R%a!<%k%"%I%l%9$,$"$C$?$i!"$=$l$KE,@Z$J2hA|$r8+$D$1\e(B
+\e$B$i$l$k$h$&$K$7$F$*$/$b$N$G$9!#MxMQ<T$H%I%a%$%s0J30$K$b!"\e(BUsenet \e$B%K%e!<%9\e(B
+\e$B%0%k!<%W$dE75$M=Js$N$?$a$N\e(Bpicon \e$B%G!<%?%Y!<%9$,$"$j$^$9!#\e(Bpicon \e$B$OGr9u\e(B
+\e$B$N\e(B @code{XBM} \e$B7A<0$G$b%+%i!<$N\e(B @code{XPM} \e$B7A<0$G$b\e(B @code{GIF} \e$B7A<0$G$b9=\e(B
+\e$B$$$^$;$s!#\e(B
 @end quotation
 
 @vindex gnus-picons-piconsearch-url
 \e$B$"$J$?$,%$%s%?!<%M%C%H$X>o;~@\B3$7$F$$$k$N$J$i$P!"\e(B
-@code{gnus-picons-piconsearch-url} \e$B$KJ8;zNs\e(B @*
-@file{http://www.cs.indiana.edu/picons/search.html} \e$B$r@_Dj$9$k$3\e(B
-\e$B$H$G!"\e(BSteve Kinzler \e$B$N\e(B picon \e$B8!:w%(%s%8%s$r;H$&$3$H$,$G$-$^$9!#\e(B
+@code{gnus-picons-piconsearch-url} \e$B$KJ8;z\e(B
+\e$BNs\e(B @file{http://www.cs.indiana.edu/picons/search.html} \e$B$r@_Dj$9$k$3$H$G!"\e(B
+Steve Kinzler \e$B$N\e(B picon \e$B8!:w%(%s%8%s$r;H$&$3$H$,$G$-$^$9!#\e(B
 
 @vindex gnus-picons-database
 \e$B$=$&$G$J$1$l$P!"H`$N%G!<%?%Y!<%9$r<j85$KJ#@=$9$kI,MW$,$"$j$^$9!#\e(Bpicon \e$B%G!<\e(B
-\e$B%?%Y!<%9$NF~<j$H%$%s%9%H!<%k$N<j=g$O!"%&%'%V%V%i%&%6!<$G\e(B @*
-@file{http://www.cs.indiana.edu/picons/ftp/index.html} \e$B$K9T$C$F$_$F$/$@\e(B
-\e$B$5$$!#\e(BGnus \e$B$O\e(B picons \e$B$,\e(B @code{gnus-picons-database} \e$B$G<($5$l$k>l=j$K%$%s\e(B
-\e$B%9%H!<%k$7$F$"$k$b$N$H4|BT$7$^$9!#\e(B
-
+\e$B%?%Y!<%9$NF~<j$H%$%s%9%H!<%k$N<j=g$O!"%&%'%V%V%i%&%6!<\e(B
+\e$B$G\e(B @file{http://www.cs.indiana.edu/picons/ftp/index.html} \e$B$K9T$C$F$_$F$/\e(B
+\e$B$@$5$$!#\e(BGnus \e$B$O\e(B picons \e$B$,\e(B @code{gnus-picons-database} \e$B$G<($5$l$k>l=j$K%$\e(B
+\e$B%s%9%H!<%k$7$F$"$k$b$N$H4|BT$7$^$9!#\e(B
 
 @node Picon Requirements
 @subsubsection Picon \e$B$NF0:n>r7o\e(B
 
-Gnus \e$B$K\e(B picon \e$B$rI=<($5$;$k$K$O!"\e(BXEmacs 19.13 \e$B$+$=$l0J9_$r<B9T$7\e(B
-\e$B$F$$$J$1$l$P$J$j$^$;$s!#B>$NHG$N\e(B Emacs \e$B$G$O$I$l$b$^$@2hA|$rI=<(\e(B
-\e$B$G$-$J$$$+$i$G$9!#\e(B
+Gnus \e$B$K\e(B picon \e$B$rI=<($5$;$k$K$O!"\e(BXEmacs 19.13 \e$B$+$=$l0J9_$r<B9T$7$F$$$J$1\e(B
+\e$B$l$P$J$j$^$;$s!#B>$NHG$N\e(B Emacs \e$B$G$O$I$l$b$^$@2hA|$rI=<($G$-$J$$$+$i$G$9!#\e(B
 
-\e$B$5$i$K!"\e(B@code{x} \e$B%5%]!<%HIU$-$G\e(B XEmacs \e$B$r%3%s%Q%$%k$7$F$$$J$/$F\e(B
-\e$B$O$J$j$^$;$s!#Gr9u$h$j$b$b$C$H4qNo$J?'IU$-$N\e(B picon \e$B$rI=<($9$k$?\e(B
-\e$B$a$K$O!"\e(B@code{xpm} \e$B$+\e(B @code{gif} \e$B$I$A$i$+$r\e(B XEmacs \e$B$H0l=o$K%3%s\e(B
-\e$B%Q%$%k$7$F$$$kI,MW$b$"$j$^$9!#\e(B
+\e$B$5$i$K!"\e(B@code{x} \e$B%5%]!<%HIU$-$G\e(B XEmacs \e$B$r%3%s%Q%$%k$7$F$$$J$/$F$O$J$j$^\e(B
+\e$B$;$s!#Gr9u$h$j$b$b$C$H4qNo$J?'IU$-$N\e(B picon \e$B$rI=<($9$k$?$a$K$O!"\e(B
+@code{xpm} \e$B$+\e(B @code{gif} \e$B$I$A$i$+$r\e(B XEmacs \e$B$H0l=o$K%3%s%Q%$%k$7$F$$$kI,\e(B
+\e$BMW$b$"$j$^$9!#\e(B
 
 @vindex gnus-picons-convert-x-face
-@code{X-Face} \e$B%X%C%@!<$N4i$rI=<($7$?$$$N$J$i!"\e(BXEmacs \e$B$r\e(B
-@code{xface} \e$B%5%]!<%HIU$-$G%3%s%Q%$%k$7$J$1$l$P$J$j$^$;$s!#$=$&\e(B
-\e$B$G$J$1$l$P!"\e(B@code{netpbm} \e$B%f!<%F%#%j%F%#$r%$%s%9%H!<%k$7$F$*$/$+!"\e(B
-\e$B$"$k$$$OB>$N2?$+$r;H$&$h$&$K\e(B @code{gnus-picons-convert-x-face}
-\e$BJQ?t$r$$$8$/$C$F$/$@$5$$!#\e(B
-
+@code{X-Face} \e$B%X%C%@!<$N4i$rI=<($7$?$$$N$J$i!"\e(BXEmacs \e$B$r\e(B @code{xface} \e$B%5\e(B
+\e$B%]!<%HIU$-$G%3%s%Q%$%k$7$J$1$l$P$J$j$^$;$s!#$=$&$G$J$1$l$P!"\e(B
+@code{netpbm} \e$B%f!<%F%#%j%F%#$r%$%s%9%H!<%k$7$F$*$/$+!"$"$k$$$OB>$N2?$+$r\e(B
+\e$B;H$&$h$&$K\e(B @code{gnus-picons-convert-x-face} \e$BJQ?t$r$$$8$/$C$F$/$@$5$$!#\e(B
 
 @node Easy Picons
 @subsubsection \e$B3Z!9\e(B Picons
 
-picon \e$BI=<($rM-8z$K$9$k$K$O!"C1$K0J2<$N9T$r\e(B @file{~/.gnus} \e$B%U%!%$\e(B
-\e$B%k$KF~$l$F!"\e(Bgnus \e$B$r5/F0$7$F$/$@$5$$!#\e(B
+picon \e$BI=<($rM-8z$K$9$k$K$O!"C1$K0J2<$N9T$r\e(B @file{~/.gnus} \e$B%U%!%$%k$KF~$l\e(B
+\e$B$F!"\e(Bgnus \e$B$r5/F0$7$F$/$@$5$$!#\e(B
 
 @lisp
 (setq gnus-use-picons t)
 (setq gnus-treat-display-picons t)
 @end lisp
 
-@code{gnus-picons-database} \e$B$,\e(B picon \e$B%G!<%?%Y!<%9$,4^$^$l$F$$$k\e(B
-\e$B%G%#%l%/%H%j$r;X$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#\e(B
+@code{gnus-picons-database} \e$B$,\e(B picon \e$B%G!<%?%Y!<%9$,4^$^$l$F$$$k%G%#%l%/\e(B
+\e$B%H%j$r;X$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#\e(B
 
-\e$B$=$NBe$o$j$K\e(B Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$r;H$$$?$1$l$P!"$3$l$rDI\e(B
-\e$B2C$7$^$9!#\e(B
+\e$B$=$NBe$o$j$K\e(B Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$r;H$$$?$1$l$P!"$3$l$rDI2C$7$^$9!#\e(B
 
 @lisp
 (setq gnus-picons-piconsearch-url
       "http://www.cs.indiana.edu:800/piconsearch")
 @end lisp
 
-
 @node Hard Picons
 @subsubsection \e$BFq2r\e(B Picons
 
@@ -16602,60 +17568,58 @@ picon \e$BI=<($rM-8z$K$9$k$K$O!"C1$K0J2<$N9T$r\e(B @file{~/.gnus} \e$B%U%!%$\e(B
 @end iflatex
 @end iftex
 
-Gnus \e$B$O!"%0%k!<%W$d5-;v$KF~$C$?$j=P$?$j$9$k$N$K=>$C$F\e(B picon \e$B$rI=\e(B
-\e$B<($9$k$3$H$,$G$-$^$9!#\e(BGnus \e$B$O\e(B picon \e$B%G!<%?%Y!<%9$N;0$D$N>O$H$I$&\e(B
-\e$BAj8_:nMQ$9$l$P$h$$$+$rCN$C$F$$$^$9!#$9$J$o$A!"\e(Bgnus \e$B$O%K%e!<%9%0\e(B
-\e$B%k!<%W$N3(!"Cx<T$N4i$N3(!"Cx<T$N%I%a%$%s$N\e(B picon \e$B$rI=<($9$k$3$H\e(B
-\e$B$,$G$-$^$9!#$3$N5!G=$rM-8z$K$9$k$K$O!"\e(Bpicon \e$B$r$I$3$+$i;}$C$F$/$k\e(B
-\e$B$+!"$=$7$F$I$3$KI=<($9$k$+$rA*Br$9$kI,MW$,$"$j$^$9!#\e(B
+Gnus \e$B$O!"%0%k!<%W$d5-;v$KF~$C$?$j=P$?$j$9$k$N$K=>$C$F\e(B picon \e$B$rI=<($9$k$3\e(B
+\e$B$H$,$G$-$^$9!#\e(BGnus \e$B$O\e(B picon \e$B%G!<%?%Y!<%9$N;0$D$N>O$H$I$&Aj8_:nMQ$9$l$P$h\e(B
+\e$B$$$+$rCN$C$F$$$^$9!#$9$J$o$A!"\e(Bgnus \e$B$O%K%e!<%9%0%k!<%W$N3(!"Cx<T$N4i$N3(!"\e(B
+\e$BCx<T$N%I%a%$%s$N\e(B picon \e$B$rI=<($9$k$3$H$,$G$-$^$9!#$3$N5!G=$rM-8z$K$9$k$K\e(B
+\e$B$O!"\e(Bpicon \e$B$r$I$3$+$i;}$C$F$/$k$+!"$=$7$F$I$3$KI=<($9$k$+$rA*Br$9$kI,MW$,\e(B
+\e$B$"$j$^$9!#\e(B
 
 @table @code
 
 @item gnus-picons-database
 @vindex gnus-picons-database
-picon \e$B%G!<%?%Y!<%9$N>l=j!#\e(B@file{news}\e$B!"\e(B @file{domains}\e$B!"\e(B
-@file{users} (\e$B$J$I$J$I\e(B) \e$B$N%5%V%G%#%l%/%H%j!<$,4^$^$l$F$$$k%G%#%l\e(B
-\e$B%/%H%j!<$r;X$7$F$$$J$1$l$P$J$j$^$;$s!#$3$l$O\e(B
-@code{gnus-picons-piconsearch-url} \e$B$,\e(B @code{nil} \e$B$G$"$k$H$-$N$_\e(B
-\e$B;HMQ$5$l$^$9!#=i4|@_DjCM$O\e(B @file{/usr/local/faces/} \e$B$G$9!#\e(B
+picon \e$B%G!<%?%Y!<%9$N>l=j!#\e(B@file{news}, @file{domains}, @file{users} (\e$B$J\e(B
+\e$B$I$J$I\e(B) \e$B$N%5%V%G%#%l%/%H%j!<$,4^$^$l$F$$$k%G%#%l%/%H%j!<$r;X$7$F$$$J$1$l\e(B
+\e$B$P$J$j$^$;$s!#$3$l$O\e(B @code{gnus-picons-piconsearch-url} \e$B$,\e(B @code{nil} \e$B$G\e(B
+\e$B$"$k$H$-$N$_;HMQ$5$l$^$9!#=i4|@_DjCM$O\e(B @file{/usr/local/faces/} \e$B$G$9!#\e(B
 
 @item gnus-picons-piconsearch-url
 @vindex gnus-picons-piconsearch-url
-Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$N\e(B URL\e$B!#8=:_CN$i$l$F$$$kM#0l$N%(%s%8\e(B
-\e$B%s$O\e(B @file{http://www.cs.indiana.edu:800/piconsearch} \e$B$G$9!#%M%C\e(B
-\e$B%H%o!<%/CY1d$r2sHr$9$k$?$a$K\e(B icon \e$B$O%P%C%/%0%i%&%s%I$G<hF@$5$l$^\e(B
-\e$B$9!#$b$7$3$l$,\e(B @code{nil} (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(Bpicon \e$B$O\e(B
-@code{gnus-picons-database} \e$B$G<($5$l$k%m!<%+%k$N%G!<%?%Y!<%9$+$i\e(B
-\e$B<hF@$5$l$^$9!#\e(B
+Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$N\e(B URL\e$B!#8=:_CN$i$l$F$$$kM#0l$N%(%s%8%s\e(B
+\e$B$O\e(B @file{http://www.cs.indiana.edu:800/piconsearch} \e$B$G$9!#%M%C%H%o!<%/CY\e(B
+\e$B1d$r2sHr$9$k$?$a$K\e(B icon \e$B$O%P%C%/%0%i%&%s%I$G<hF@$5$l$^$9!#$b$7$3$l$,\e(B
+@code{nil} (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(B
+picon \e$B$O\e(B @code{gnus-picons-database} \e$B$G<($5$l$k%m!<%+%k$N%G!<%?%Y!<%9$+\e(B
+\e$B$i<hF@$5$l$^$9!#\e(B
 
 @item gnus-picons-display-where
 @vindex gnus-picons-display-where
-picon \e$B2hA|$,I=<($5$l$k>l=j!#$3$l$O=i4|@_Dj$G$O\e(B @code{picons} \e$B$G\e(B
-\e$B$9\e(B (\e$B$3$l$O=i4|@_Dj$G\e(B @samp{*Picons*} \e$B%P%C%U%!$K0LCV$7$^$9\e(B)\e$B!#B>$N\e(B
-\e$BM-8z$J>l=j$H$7$F$O\e(B @code{article}\e$B!"\e(B @code{summary}\e$B!"$"$k$$$O\e(B
-@samp{*scratch*} \e$B$@$m$&$HCN$C$?$3$H$G$O$"$j$^$;$s!#$?$@$=$N%P%C\e(B
-\e$B%U%!$rI8=`$N\e(B gnus \e$BAkG[CV=hM}\e(B --- @pxref{Windows Configuration}\e$B$K\e(B
-\e$B$h$C$F8+$($k$h$&$K$7$F$*$/$3$H$r3NG'$7$F$/$@$5$$!#\e(B
+picon \e$B2hA|$,I=<($5$l$k>l=j!#$3$l$O=i4|@_Dj$G$O\e(B @code{picons} \e$B$G$9\e(B (\e$B$3$l\e(B
+\e$B$O=i4|@_Dj$G\e(B @samp{*Picons*} \e$B%P%C%U%!$K0LCV$7$^$9\e(B)\e$B!#B>$NM-8z$J>l=j$H$7$F\e(B
+\e$B$O\e(B @code{article}, @code{summary} \e$B$"$k$$$O\e(B @samp{*scratch*} \e$B$@$m$&$HCN$C\e(B
+\e$B$?$3$H$G$O$"$j$^$;$s!#$?$@$=$N%P%C%U%!$rI8=`$N\e(B gnus \e$BAkG[CV=h\e(B
+\e$BM}\e(B --- @pxref{Windows Configuration} \e$B$K$h$C$F8+$($k$h$&$K$7$F$*$/$3$H$r\e(B
+\e$B3NG'$7$F$/$@$5$$!#\e(B
 
 @item gnus-picons-group-excluded-groups
 @vindex gnus-picons-group-excluded-groups
-\e$B$3$N@55,I=8=$K%^%C%A$9$k%0%k!<%W$G$O$=$N%0%k!<%W%"%$%3%s$rI=<($5\e(B
-\e$B$;$^$;$s!#\e(B
+\e$B$3$N@55,I=8=$K%^%C%A$9$k%0%k!<%W$G$O$=$N%0%k!<%W%"%$%3%s$rI=<($5$;$^$;$s!#\e(B
 
 @end table
 
-\e$BCm0U\e(B: \e$B$b$7\e(B @code{gnus-use-picons} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$H!"AkG[\e(B
-\e$BCV$K\e(B @code{picons} \e$B%P%C%U%!$r4^$a$k$h$&$K@_Dj$5$l$^$9!#\e(B
+\e$BCm0U\e(B: \e$B$b$7\e(B @code{gnus-use-picons} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$H!"AkG[CV\e(B
+\e$B$K\e(B @code{picons} \e$B%P%C%U%!$r4^$a$k$h$&$K@_Dj$5$l$^$9!#\e(B
 
-\e$B$5$F!"$3$l$i$r7hDj$7$?8e$K$O!"$3$l$i$N3($,@5$7$$;~$KI=<($5$l$k$h\e(B
-\e$B$&$K!"0J2<$N4X?t$rE,@Z$J%U%C%/$KDI2C$9$kI,MW$,$"$j$^$9!#\e(B
+\e$B$5$F!"$3$l$i$r7hDj$7$?8e$K$O!"$3$l$i$N3($,@5$7$$;~$KI=<($5$l$k$h$&$K!"0J\e(B
+\e$B2<$N4X?t$rE,@Z$J%U%C%/$KDI2C$9$kI,MW$,$"$j$^$9!#\e(B
 
 @vindex gnus-picons-display-where
 @table @code
 @item gnus-article-display-picons
 @findex gnus-article-display-picons
-\e$BCx<T$HCx<T$N%I%a%$%s$N\e(B picon \e$B$rC5$7!"\e(B
-@code{gnus-picons-display-where} \e$B%P%C%U%!$KI=<($7$^$9!#\e(B
+\e$BCx<T$HCx<T$N%I%a%$%s$N\e(B picon \e$B$rC5$7!"\e(B@code{gnus-picons-display-where} \e$B%P%C\e(B
+\e$B%U%!$KI=<($7$^$9!#\e(B
 
 @item gnus-picons-article-display-x-face
 @findex gnus-article-display-picons
@@ -16663,8 +17627,6 @@ X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#\e(B
 
 @end table
 
-
-
 @node Picon Useless Configuration
 @subsubsection \e$BL50UL#$J\e(B Picon \e$B@_Dj\e(B
 
@@ -16674,67 +17636,64 @@ X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#\e(B
 @end iflatex
 @end iftex
 
-\e$B0J2<$NJQ?t$O!"$5$i$K$3$l$i$r$I$&<B9T$9$k$+!"$I$3$KG[CV$9$k$+!"$=\e(B
-\e$B$NB>Lr$K$bN)$?$J$$$I$&$G$b$h$$$3$H$r@)8f$G$-$k$h$&$K$7$^$9!#\e(B
+\e$B0J2<$NJQ?t$O!"$5$i$K$3$l$i$r$I$&<B9T$9$k$+!"$I$3$KG[CV$9$k$+!"$=$NB>Lr$K\e(B
+\e$B$bN)$?$J$$$I$&$G$b$h$$$3$H$r@)8f$G$-$k$h$&$K$7$^$9!#\e(B
 
 @table @code
 
 @item gnus-picons-news-directories
 @vindex gnus-picons-news-directories
-@code{gnus-picons-database} \e$B$+$i%K%e!<%9%0%k!<%W%U%'%$%9$rC5$9$?\e(B
-\e$B$a$N%5%V%G%#%l%/%H%j!<$N%j%9%H!#\e(B@code{("news")} \e$B$,=i4|@_DjCM$G$9!#\e(B
+@code{gnus-picons-database} \e$B$+$i%K%e!<%9%0%k!<%W%U%'%$%9$rC5$9$?$a$N%5%V\e(B
+\e$B%G%#%l%/%H%j!<$N%j%9%H!#\e(B@code{("news")} \e$B$,=i4|@_DjCM$G$9!#\e(B
 
 @item gnus-picons-user-directories
 @vindex gnus-picons-user-directories
-@code{gnus-picons-database} \e$B$+$iMxMQ<T%U%'%$%9$rC5$9$?$a$N%5%V%G%#\e(B
-\e$B%l%/%H%j!<$N%j%9%H!#\e(B @code{("local" "users" "usenix" "misc")} \e$B$,\e(B
-\e$B=i4|@_DjCM$G$9!#\e(B
+@code{gnus-picons-database} \e$B$+$iMxMQ<T%U%'%$%9$rC5$9$?$a$N%5%V%G%#%l%/%H\e(B
+\e$B%j!<$N%j%9%H!#\e(B@code{("local" "users" "usenix" "misc")} \e$B$,=i4|@_DjCM$G$9!#\e(B
 
 @item gnus-picons-domain-directories
 @vindex gnus-picons-domain-directories
-@code{gnus-picons-database} \e$B$+$i%I%a%$%sL>%U%'%$%9$rC5$9$?$a$N%5\e(B
-\e$B%V%G%#%l%/%H%j!<$N%j%9%H!#=i4|@_DjCM$O\e(B @code{("domains")} \e$B$G$9!#\e(B
-\e$B$3$N%j%9%H$K\e(B @samp{"unknown"} \e$B$rDI2C$7$F$*$-$?$/$J$k?M$b$$$k$G$7$g\e(B
-\e$B$&!#\e(B
+@code{gnus-picons-database} \e$B$+$i%I%a%$%sL>%U%'%$%9$rC5$9$?$a$N%5%V%G%#%l\e(B
+\e$B%/%H%j!<$N%j%9%H!#=i4|@_DjCM$O\e(B @code{("domains")} \e$B$G$9!#$3$N%j%9%H\e(B
+\e$B$K\e(B @samp{"unknown"} \e$B$rDI2C$7$F$*$-$?$/$J$k?M$b$$$k$G$7$g$&!#\e(B
 
 @item gnus-picons-convert-x-face
 @vindex gnus-picons-convert-x-face
-\e$B$b$7\e(B XEmacs \e$B$K\e(B @code{xface} \e$B%5%]!<%H$,AH$_9~$^$l$F$$$J$1$l$P!"$3\e(B
-\e$B$NL?Na$,\e(B @code{X-Face} \e$B%X%C%@!<$r\e(B X \e$B%S%C%H%^%C%W\e(B (@code{xbm}) \e$B$K\e(B
-\e$BJQ49$9$k$N$K;HMQ$5$l$^$9!#=i4|@_DjCM$O\e(B @code{(format "@{ echo '/* Width=48,
-Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"
-gnus-picons-x-face-file-name)} \e$B$G$9!#\e(B
+\e$B$b$7\e(B XEmacs \e$B$K\e(B @code{xface} \e$B%5%]!<%H$,AH$_9~$^$l$F$$$J$1$l$P!"$3$NL?Na$,\e(B
+@code{X-Face} \e$B%X%C%@!<$r\e(B X \e$B%S%C%H%^%C%W\e(B (@code{xbm}) \e$B$KJQ49$9$k$N$K;HMQ\e(B
+\e$B$5$l$^$9!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{(format "@{ echo '/* Width=48, Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name)} \e$B$G\e(B
+\e$B$9!#\e(B
 
 @item gnus-picons-x-face-file-name
 @vindex gnus-picons-x-face-file-name
-@code{X-Face} \e$B%S%C%H%^%C%W$r3JG<$7$F$*$/0l;~%U%!%$%k$NL>A0!#=i4|\e(B
-\e$B@_DjCM$O\e(B @code{(format "/tmp/picon-xface.%s.xbm"
-(user-login-name))}\e$B!#\e(B
+@code{X-Face} \e$B%S%C%H%^%C%W$r3JG<$7$F$*$/0l;~%U%!%$%k$NL>A0!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}\e$B!#\e(B
 
 @item gnus-picons-has-modeline-p
 @vindex gnus-picons-has-modeline-p
-@code{gnus-picons-display-where} \e$B$r\e(B @code{picons} \e$B$K@_Dj$7$F$7$^\e(B
-\e$B$&$H!"\e(BXEmacs \e$B$N%U%l!<%`$O$a$A$c$a$A$c$K$J$C$F$7$^$&$G$7$g$&!#$3\e(B
-\e$B$l$rB?>/$J$j$H$b7Z8:$9$k$K$O!"\e(B@code{gnus-picons-has-modeline-p}
-\e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#$3$l$O\e(B picon \e$B%P%C%U%!$+$i%b!<\e(B
-\e$B%I9T$r<h$j=|$-$^$9!#$3$l$O\e(B @code{gnus-picons-display-where} \e$B$,\e(B
-@code{picons} \e$B$N$H$-$N$_0UL#$,$"$j$^$9!#\e(B
+@code{gnus-picons-display-where} \e$B$r\e(B @code{picons} \e$B$K@_Dj$7$F$7$^$&$H!"\e(B
+XEmacs \e$B$N%U%l!<%`$O$a$A$c$a$A$c$K$J$C$F$7$^$&$G$7$g$&!#$3$l$rB?>/$J$j$H\e(B
+\e$B$b7Z8:$9$k$K$O!"\e(B@code{gnus-picons-has-modeline-p} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7\e(B
+\e$B$F$/$@$5$$!#$3$l$O\e(B picon \e$B%P%C%U%!$+$i%b!<%I9T$r<h$j=|$-$^$9!#$3$l$O\e(B
+@code{gnus-picons-display-where} \e$B$,\e(B @code{picons} \e$B$N$H$-$N$_0UL#$,$"$j$^\e(B
+\e$B$9!#\e(B
 
 @item gnus-picons-refresh-before-display
 @vindex gnus-picons-refresh-before-display
-nil \e$B0J30$G$"$l$P!"\e(Bpicon \e$B$r7W;;$9$kA0$K5-;v%P%C%U%!$rI=<(!#\e(B
-\e$B=i4|@_DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
+nil \e$B0J30$G$"$l$P!"\e(Bpicon \e$B$r7W;;$9$kA0$K5-;v%P%C%U%!$rI=<(!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{nil} \e$B$G$9!#\e(B
 
 @item gnus-picons-display-as-address
 @vindex gnus-picons-display-as-address
-@code{t} \e$B$G$"$l$P3($H0l=o$KJ8;z$GEE;R%a!<%k%"%I%l%9$rI=<(!#\e(B
-\e$B=i4|@_DjCM$O\e(B @code{t} \e$B$G$9!#\e(B
+@code{t} \e$B$G$"$l$P3($H0l=o$KJ8;z$GEE;R%a!<%k%"%I%l%9$rI=<(!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @item gnus-picons-file-suffixes
 @vindex gnus-picons-file-suffixes
-picon \e$B%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=g=x%j%9%H!#=i4|@_DjCM$O\e(B
-@code{("xpm" "gif" "xbm")} \e$B$+$i\e(B XEmacs \e$B$KAH$_9~$^$l$F$$$J$$$b$N\e(B
-\e$B$r0z$$$?$b$N$G$9!#\e(B
+picon \e$B%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=g=x%j%9%H!#=i4|@_DjCM\e(B
+\e$B$O\e(B @code{("xpm" "gif" "xbm")} \e$B$+$i\e(B XEmacs \e$B$KAH$_9~$^$l$F$$$J$$$b$N$r0z$$\e(B
+\e$B$?$b$N$G$9!#\e(B
 
 @item gnus-picons-setup-hook
 @vindex gnus-picons-setup-hook
@@ -16742,22 +17701,22 @@ picon \e$B$,$b$7I=<($5$l$F$$$l$P!"\e(Bpicon \e$B%P%C%U%!$G<B9T$5$l$k%U%C%/$G$9!#\e(B
 
 @item gnus-picons-display-article-move-p
 @vindex gnus-picons-display-article-move-p
-picon \e$B$rI=<($7$F$$$k$H$-$K%+!<%=%k0LCV$r:G=i$N6u9T$^$GF0$+$9$+$I\e(B
-\e$B$&$+$r;XDj!#$3$l$O\e(B @code{gnus-picons-display-where} \e$B$NCM$,\e(B
-@code{article} \e$B$G$"$k$H$-$N$_8z2L$,$"$j$^$9!#\e(B
+picon \e$B$rI=<($7$F$$$k$H$-$K%+!<%=%k0LCV$r:G=i$N6u9T$^$GF0$+$9$+$I$&$+$r;X\e(B
+\e$BDj!#$3$l$O\e(B @code{gnus-picons-display-where} \e$B$NCM$,\e(B @code{article} \e$B$G$"$k\e(B
+\e$B$H$-$N$_8z2L$,$"$j$^$9!#\e(B
 
 @code{nil} \e$B$G$"$l$P!"\e(Bpicon \e$B$r\e(B @code{From} \e$B$H\e(B @code{Newsgroup} \e$B$N4V$KI=<(\e(B
 \e$B$7$^$9!#$3$l$,=i4|@_Dj$G$9!#\e(B
 
 @item gnus-picons-clear-cache-on-shutdown
 @vindex gnus-picons-clear-cache-on-shutdown
-Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
-\e$B$O<B9TCf$K8+$D$1$?\e(B picon \e$B$rA4$F%-%c%C%7%e$7$^$9!#$3$l$O8!:w=hM}\e(B
-\e$B$N;~4V$rB?>/@aLs$G$-$^$9$,!"%a%b%j$r$$$/$i$+?)$$$^$9!#$b$7$3$NJQ\e(B
-\e$B?t$r\e(B @code{nil} \e$B$K@_Dj$9$l$P!"\e(Bgnus \e$B$O$=$N%-%c%C%7%e$r7h$7$F>C$7\e(B
-\e$B$^$;$s!#$=$l$r>C$75n$k$K$O<j$G\e(B @code{gnus-picons-clear-cache} \e$B$r\e(B
-\e$B8F$S=P$9I,MW$,$"$j$^$9!#\e(B@code{nil} \e$B$G$J$1$l$P%-%c%C%7%e$O\e(B gnus
-\e$B$,=*N;$9$k$?$S$K>C5n$5$l$^$9!#=i4|@_DjCM$O\e(B @code{t} \e$B$G$9!#\e(B
+Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus \e$B$O<B9TCf\e(B
+\e$B$K8+$D$1$?\e(B picon \e$B$rA4$F%-%c%C%7%e$7$^$9!#$3$l$O8!:w=hM}$N;~4V$rB?>/@aLs\e(B
+\e$B$G$-$^$9$,!"%a%b%j$r$$$/$i$+?)$$$^$9!#$b$7$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9\e(B
+\e$B$l$P!"\e(Bgnus \e$B$O$=$N%-%c%C%7%e$r7h$7$F>C$7$^$;$s!#$=$l$r>C$75n$k$K$O<j\e(B
+\e$B$G\e(B @code{gnus-picons-clear-cache} \e$B$r8F$S=P$9I,MW$,$"$j$^$9!#\e(B
+@code{nil} \e$B$G$J$1$l$P%-%c%C%7%e$O\e(B gnus \e$B$,=*N;$9$k$?$S$K>C5n$5$l$^$9!#=i\e(B
+\e$B4|@_DjCM$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @iftex
 @iflatex
@@ -16778,38 +17737,37 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
 @end iflatex
 @end iftex
 
-\e$B%9%^%$%j!<\e(B @dfn{smiley} \e$B$O\e(B gnus \e$B$H$OJL$N%Q%C%1!<%8$G$9$,!"%9%^%$\e(B
-\e$B%j!<$r;H$C$F$$$k%Q%C%1!<%8$O8=:_\e(B gnus \e$B$@$1$G$9$N$G!"$3$3$G@bL@$7\e(B
-\e$B$^$9!#\e(B
+\e$B%9%^%$%j!<\e(B @dfn{smiley} \e$B$O\e(B gnus \e$B$H$OJL$N%Q%C%1!<%8$G$9$,!"%9%^%$%j!<$r;H$C\e(B
+\e$B$F$$$k%Q%C%1!<%8$O8=:_\e(B gnus \e$B$@$1$G$9$N$G!"$3$3$G@bL@$7$^$9!#\e(B
 
-\e$B0l8@$G8@$($P\e(B --- gnus \e$B$G%9%^%$%j!<$r;H$&$K$O!"0J2<$r\e(B
-@file{.gnus.el} \e$B$U$!$$$k$K=q$$$F$/$@$5$$!#\e(B
+\e$B0l8@$G8@$($P\e(B --- gnus \e$B$G%9%^%$%j!<$r;H$&$K$O!"0J2<$r\e(B @file{.gnus.el} \e$B%U%!\e(B
+\e$B%$%k$K=q$$$F$/$@$5$$!#\e(B
 
 @lisp
-(setq gnus-treat-display-smiley t)
+(setq gnus-treat-display-smileys t)
 @end lisp
 
-\e$B%9%^%$%j!<$O!"J8;z$N4i%^!<%/\e(B --- @samp{:-)}\e$B!"\e(B@samp{:-=}\e$B!"\e(B
-@samp{:-(} \e$B$J$I$H$$$C$?$b$N\e(B --- \e$B$r3($KBP1~$5$;!"J8;z$N4i%^!<%/$N\e(B
-\e$BBe$o$j$K$=$N3($rI=<($7$^$9!#$3$NJQ49$OJ8;z$K%^%C%A$9$k@55,I=8=$H\e(B
-\e$B$=$l$N%U%!%$%kL>$X$NBP1~$N%j%9%H$G@)8f$5$l$^$9!#\e(B
+\e$B%9%^%$%j!<$O!"J8;z$N4i%^!<%/\e(B --- @samp{:-)}, @samp{:-=}, @samp{:-(} \e$B$J$I\e(B
+\e$B$H$$$C$?$b$N\e(B --- \e$B$r3($KBP1~$5$;!"J8;z$N4i%^!<%/$NBe$o$j$K$=$N3($rI=<($7\e(B
+\e$B$^$9!#$3$NJQ49$OJ8;z$K%^%C%A$9$k@55,I=8=$H$=$l$N%U%!%$%kL>$X$NBP1~$N%j%9\e(B
+\e$B%H$G@)8f$5$l$^$9!#\e(B
 
 @vindex smiley-nosey-regexp-alist
 @vindex smiley-deformed-regexp-alist
 \e$B%9%^%$%j!<$O=i4|@_Dj$G$OFs$D$NJQ49O"A[%j%9%H$NNc$rDs6!$7$F$$$^$9!#\e(B
-@code{smiley-deformed-regexp-alist} (@samp{:)}\e$B!"\e(B @samp{:(} \e$B$J$I\e(B
-\e$B$K%^%C%A$9$k\e(B) \e$B$H!"\e(B@code{smiley-nosey-regexp-alist} (@samp{:-)}\e$B!"\e(B
-@samp{:-(} \e$B$J$I$K%^%C%A$9$k\e(B) \e$B$G$9!#\e(B
+@code{smiley-deformed-regexp-alist} (@samp{:)}, @samp{:(} \e$B$J$I$K%^%C%A\e(B
+\e$B$9$k\e(B) \e$B$H!"\e(B@code{smiley-nosey-regexp-alist} (@samp{:-)}, @samp{:-(} \e$B$J$I\e(B
+\e$B$K%^%C%A$9$k\e(B) \e$B$G$9!#\e(B
 
-\e$B;HMQ$5$l$kO"A[%j%9%H$O\e(B @code{smiley-regexp-alist} \e$BJQ?t$G;XDj$5$l\e(B
-\e$B$^$9!#$3$N=i4|@_DjCM$O\e(B @code{smiley-deformed-regexp-alist} \e$B$G$9!#\e(B
+\e$B;HMQ$5$l$kO"A[%j%9%H$O\e(B @code{smiley-regexp-alist} \e$BJQ?t$G;XDj$5$l$^$9!#$3\e(B
+\e$B$N=i4|@_DjCM$O\e(B @code{smiley-deformed-regexp-alist} \e$B$G$9!#\e(B
 
-\e$B3FMWAG$N:G=i$N9`L\$O%^%C%A$5$;$?$$@55,I=8=$G!"FsHVL\$NMWAG$O3($G\e(B
-\e$BCV$-49$($?$$%0%k!<%W$K%^%C%A$9$k@55,I=8=!"$=$7$F;0HVL\$NMWAG$OI=\e(B
-\e$B<($5$;$?$$%U%!%$%k$NL>A0$G$9!#\e(B
+\e$B3FMWAG$N:G=i$N9`L\$O%^%C%A$5$;$?$$@55,I=8=$G!"FsHVL\$NMWAG$O3($GCV$-49$(\e(B
+\e$B$?$$%0%k!<%W$K%^%C%A$9$k@55,I=8=!"$=$7$F;0HVL\$NMWAG$OI=<($5$;$?$$%U%!%$\e(B
+\e$B%k$NL>A0$G$9!#\e(B
 
-\e$B0J2<$NJQ?t$O!"%9%^%$%j!<$,$3$l$i$N%U%!%$%k$rC5$9>l=j!"$"$k$$$O$I\e(B
-\e$B$N?'$r;H$&$+$H!"$=$NB>$N$b$N$r%+%9%?%^%$%:$7$^$9!#\e(B
+\e$B0J2<$NJQ?t$O!"%9%^%$%j!<$,$3$l$i$N%U%!%$%k$rC5$9>l=j!"$"$k$$$O$I$N?'$r;H\e(B
+\e$B$&$+$H!"$=$NB>$N$b$N$r%+%9%?%^%$%:$7$^$9!#\e(B
 
 @table @code
 
@@ -16839,7 +17797,6 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
 
 @end table
 
-
 @node Toolbar
 @subsection \e$B%D!<%k%P!<\e(B
 
@@ -16854,9 +17811,8 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
 @item gnus-use-toolbar
 @vindex gnus-use-toolbar
 @code{nil} \e$B$J$i$P%D!<%k%P!<$rI=<($7$J$$!#\e(B@code{nil} \e$B0J30$N>l9g$O!"\e(B
-@code{default-toolbar}\e$B!"\e(B@code{top-toolbar}\e$B!"\e(B
-@code{bottom-toolbar}\e$B!"\e(B@code{right-toolbar}\e$B!"\e(B@code{left-toolbar}
-\e$B$N$I$l$+$G$J$/$F$O$J$j$^$;$s!#\e(B
+@code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar}, @code{right-toolbar}, @code{left-toolbar} \e$B$N\e(B
+\e$B$I$l$+$G$J$/$F$O$J$j$^$;$s!#\e(B
 
 @item gnus-group-toolbar
 @vindex gnus-group-toolbar
@@ -16872,35 +17828,31 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
 
 @end table
 
-
 @node XVarious
 @subsection \e$B$5$^$6$^$J\e(B XEmacs \e$BJQ?t\e(B
 
 @table @code
 @item gnus-xmas-glyph-directory
 @vindex gnus-xmas-glyph-directory
-\e$B$3$l$O\e(B gnus \e$B$,3($rC5$9>l=j$G$9!#\e(BGnus \e$B$ODL>o$3$N%G%#%l%/%H%j$r<+\e(B
-\e$BF08!=P$7$^$9$,!"$b$7I8=`E*$G$J$$%G%#%l%/%H%j!<9=B$$r;}$C$F$$$k>l\e(B
-\e$B9g$O!"$3$l$r<jF0$G@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$l$O\e(B gnus \e$B$,3($rC5$9>l=j$G$9!#\e(BGnus \e$B$ODL>o$3$N%G%#%l%/%H%j$r<+F08!=P$7\e(B
+\e$B$^$9$,!"$b$7I8=`E*$G$J$$%G%#%l%/%H%j!<9=B$$r;}$C$F$$$k>l9g$O!"$3$l$r<jF0\e(B
+\e$B$G@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
 
 @item gnus-xmas-logo-color-alist
 @vindex gnus-xmas-logo-color-alist
-\e$B$3$l$OO"A[%j%9%H$G!"%-!<$O<oJL%7%s%\%k!"CM$O%?%$%H%kJG3(J8;z$NA0\e(B
-\e$BLL?'$HGX7J?'$G$9!#\e(B
+\e$B$3$l$OO"A[%j%9%H$G!"%-!<$O<oJL%7%s%\%k!"CM$O%?%$%H%kJG3(J8;z$NA0LL?'$HGX\e(B
+\e$B7J?'$G$9!#\e(B
 
 @item gnus-xmas-logo-color-style
 @vindex gnus-xmas-logo-color-style
-\e$B$3$l$OA05-$NO"A[%j%9%H$G?'$r8!:w$9$k$N$K;H$o$l$k%-!<$G$9!#M-8z$J\e(B
-\e$BCM$K$O\e(B @code{flame}\e$B!"\e(B @code{pine}\e$B!"\e(B @code{moss}\e$B!"\e(B@code{irish}\e$B!"\e(B
-@code{sky}\e$B!"\e(B @code{tin}\e$B!"\e(B @code{velvet}\e$B!"\e(B @code{grape}\e$B!"\e(B
-@code{labia}\e$B!"\e(B @code{berry}\e$B!"\e(B @code{neutral}\e$B!"\e(B@code{september}
-\e$B$,$"$j$^$9!#\e(B
-
+\e$B$3$l$OA05-$NO"A[%j%9%H$G?'$r8!:w$9$k$N$K;H$o$l$k%-!<$G$9!#M-8z$JCM$K\e(B
+\e$B$O\e(B @code{flame}, @code{pine}, @code{moss}, @code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape}, @code{labia}, @code{berry}, @code{neutral}, @code{september} \e$B$,\e(B
+\e$B$"$j$^$9!#\e(B
 
 @item gnus-xmas-modeline-glyph
 @vindex gnus-xmas-modeline-glyph
-\e$BA4$F$N\e(B gnus \e$B%b!<%I9T$GI=<($5$l$k3(J8;z!#$3$l$O=i4|@_Dj$G$O$A$$$5\e(B
-\e$B$J%L!<\e(B (gnu) \e$B$NF,$G$9!#\e(B
+\e$BA4$F$N\e(B gnus \e$B%b!<%I9T$GI=<($5$l$k3(J8;z!#$3$l$O=i4|@_Dj$G$O$A$$$5$J\e(B
+\e$B%L!<\e(B (gnu) \e$B$NF,$G$9!#\e(B
 
 @iftex
 @iflatex
@@ -16910,27 +17862,23 @@ Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
 
 @end table
 
-
-
-
 @node Fuzzy Matching
 @section \e$B%U%!%8!<$J0lCW\e(B
 @cindex fuzzy matching
 
-Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-\e(B
-\e$B$K!"\e(B@code{Subject} \e$B9T$N%U%!%8!<$J0lCW\e(B @dfn{fuzzy matching} \e$BJ}K!\e(B
-\e$B$rDs6!$7$F$$$^$9!#\e(B
+Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-$K!"\e(B
+@code{Subject} \e$B9T$N%U%!%8!<$J0lCW\e(B @dfn{fuzzy matching} \e$BJ}K!$rDs6!$7$F$$\e(B
+\e$B$^$9!#\e(B
 
-\e$B@55,I=8=0lCW$H$O0c$C$F!"%U%!%8!<$J0lCW$O$H$C$F$b%U%!%8!<$G$9!#$"\e(B
-\e$B$^$j$K$b%U%!%8!<$9$.$F!"2?$,%U%!%8!<\e(B @dfn{fuzziness} \e$B$G$"$k$+$H\e(B
-\e$B$$$&Dj5A$5$($"$j$^$;$s$7!"<BAu$b2?EY$bJQ99$5$l$F$$$^$9!#\e(B
+\e$B@55,I=8=0lCW$H$O0c$C$F!"%U%!%8!<$J0lCW$O$H$C$F$b%U%!%8!<$G$9!#$"$^$j$K$b\e(B
+\e$B%U%!%8!<$9$.$F!"2?$,%U%!%8!<\e(B @dfn{fuzziness} \e$B$G$"$k$+$H$$$&Dj5A$5$($"$j\e(B
+\e$B$^$;$s$7!"<BAu$b2?EY$bJQ99$5$l$F$$$^$9!#\e(B
 
 \e$B4pK\E*$K$O!"$3$l$OHf3S$NA0$K9T$+$i<YKbJ*$r<h$j=|$3$&$H$7$^$9!#\e(B
-@samp{Re: } \e$B$dA^F~6g$N0u$d6uGrJ8;zEy!9$OJ8;zNs$+$i=|5n$5$l!"$=$N\e(B
-\e$B7k2L$rHf3S$7$^$9!#$3$l$O$[$H$s$I$N>l9gBEEv$J7k2L$r=P$7$^$9\e(B ---
-\e$B$?$H$(%K%e!<%9%j!<%@!<$N2>LL$r$+$V$C$?J8;zNs@Z$j9o$_5!$G@8@.$5$l\e(B
-\e$B$?J8;zNs$,:9$7=P$5$l$F$b!"$G$9!#\e(B
-
+@samp{Re: } \e$B$dA^F~6g$N0u$d6uGrJ8;zEy!9$OJ8;zNs$+$i=|5n$5$l!"$=$N7k2L$rHf\e(B
+\e$B3S$7$^$9!#$3$l$O$[$H$s$I$N>l9gBEEv$J7k2L$r=P$7$^$9\e(B --- \e$B$?$H$(%K%e!<%9%j!<\e(B
+\e$B%@!<$N2>LL$r$+$V$C$?J8;zNs@Z$j9o$_5!$G@8@.$5$l$?J8;zNs$,:9$7=P$5$l$F$b!"\e(B
+\e$B$G$9!#\e(B
 
 @node Thwarting Email Spam
 @section spam \e$B%a!<%k$NN"$r$+$/\e(B
@@ -16939,44 +17887,42 @@ Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-\e(B
 @cindex UCE
 @cindex unsolicited commercial email
 
-\e$B$3$3:G6a$N\e(B USENET \e$B$G$O!"@kEA$N%O%2%?%+$I$b$,!"H`$i$N:>5=$d@=IJ$r\e(B
-\e$B2!$7IU$1$k$?$a$NEE;R%a!<%k%"%I%l%9$rC5$=$&$H$7$F!"5$0c$$$N$h$&$K\e(B
-\e$B%K%e!<%9>e$r$&$m$D$$$F\e(B grep \e$B$7$^$/$C$F$$$^$9!#$3$l$KBP$9$kH?F0$H\e(B
-\e$B$7$F!"B?$/$N?M!9$,\e(B @code{From} \e$B9T$KL50UL#$J%"%I%l%9$rF~$l$O$8$a\e(B
-\e$B$k$h$&$K$J$C$F$7$^$$$^$7$?!#$3$l$OHs@8;:E*$J$3$H$@$H;d$O;W$$$^$9\e(B
---- \e$B$"$J$?$,=q$$$?$3$H$KBP$9$kJV?.$H$7$F@5Ev$J%a!<%k$rAw$k$3$H$r\e(B
-\e$BLLE]$K$5$;!"$^$?C/$,=q$$$?$b$N$J$N$+$rJ,$+$j$E$i$/$7$^$9!#$3$s$J\e(B
-\e$B=q$-49$($O7k6I$O!"2!$7IU$1@kEA%a!<%k$=$l<+?H$h$j$bBg$-$J6<0R$H$J\e(B
-\e$B$k$+$b$7$l$^$;$s!#\e(B
-
-\e$B;d$K$H$C$F$N\e(B spam \e$B%a!<%k$N:GBg$NLdBj$O!"13$N8}<B$GF~$C$F$/$k$+$i\e(B
-\e$B$G$9!#;d$,\e(B @kbd{g} \e$B$r2!$7$?$H$9$k$H!"\e(Bgnus \e$B$O\e(B 10 \e$BDL$N?7Ce%a!<%k$,\e(B
-\e$B$"$j$^$9$HM[5$$K;d$K65$($F$/$l$^$9!#;d$O\e(B ``\e$B$*$*$C!"$o!<$$\e(B! \e$BKM$C\e(B
-\e$B$F9,$;\e(B!'' \e$B$H8@$C$F%a!<%k%0%k!<%W$rA*Br$7$^$9!#$7$+$7$=$3$K$O!"Fs\e(B
-\e$B$D$N%M%:%_9V$H!"<7$D$N9-9p\e(B (`` \e$B:G?7\e(B! \e$B4q@W$NA}LS%H%K%C%/!"$U$5$U\e(B
-\e$B$5$G$D$d$D$d$NH1$r!"$"$J$?$N$D$^@h$^$G\e(B!'') \e$B$H!"2y$$2~$a?@$r?.$8\e(B
-\e$B$h!"$H$$$&0l$D$N%a!<%k$,$"$k$@$1$J$N$G$9!#\e(B
+\e$B$3$3:G6a$N\e(B USENET \e$B$G$O!"@kEA$N%O%2%?%+$I$b$,!"H`$i$N:>5=$d@=IJ$r2!$7IU$1\e(B
+\e$B$k$?$a$NEE;R%a!<%k%"%I%l%9$rC5$=$&$H$7$F!"5$0c$$$N$h$&$K%K%e!<%9>e$r$&$m\e(B
+\e$B$D$$$F\e(B grep \e$B$7$^$/$C$F$$$^$9!#$3$l$KBP$9$kH?F0$H$7$F!"B?$/$N?M!9\e(B
+\e$B$,\e(B @code{From} \e$B9T$KL50UL#$J%"%I%l%9$rF~$l$O$8$a$k$h$&$K$J$C$F$7$^$$$^$7\e(B
+\e$B$?!#$3$l$OHs@8;:E*$J$3$H$@$H;d$O;W$$$^$9\e(B --- \e$B$"$J$?$,=q$$$?$3$H$KBP$9$k\e(B
+\e$BJV?.$H$7$F@5Ev$J%a!<%k$rAw$k$3$H$rLLE]$K$5$;!"$^$?C/$,=q$$$?$b$N$J$N$+$r\e(B
+\e$BJ,$+$j$E$i$/$7$^$9!#$3$s$J=q$-49$($O7k6I$O!"2!$7IU$1@kEA%a!<%k$=$l<+?H$h\e(B
+\e$B$j$bBg$-$J6<0R$H$J$k$+$b$7$l$^$;$s!#\e(B
+
+\e$B;d$K$H$C$F$N\e(B spam \e$B%a!<%k$N:GBg$NLdBj$O!"13$N8}<B$GF~$C$F$/$k$+$i$G$9!#;d\e(B
+\e$B$,\e(B @kbd{g} \e$B$r2!$7$?$H$9$k$H!"\e(Bgnus \e$B$O==DL$N?7Ce%a!<%k$,$"$j$^$9$HM[5$$K;d\e(B
+\e$B$K65$($F$/$l$^$9!#;d$O\e(B ``\e$B$*$*$C!"$o!<$$\e(B! \e$BKM$C$F9,$;\e(B!'' \e$B$H8@$C$F%a!<%k%0\e(B
+\e$B%k!<%W$rA*Br$7$^$9!#$7$+$7$=$3$K$O!"Fs$D$N%M%:%_9V$H!"<7$D$N9-\e(B
+\e$B9p\e(B (``\e$B:G?7\e(B! \e$B4q@W$NA}LS%H%K%C%/!"$U$5$U$5$G$D$d$D$d$NH1$r!"$"$J$?$N$D$^@h\e(B
+\e$B$^$G\e(B!'') \e$B$H!"2y$$2~$a?@$r?.$8$h!"$H$$$&0l$D$N%a!<%k$,$"$k$@$1$J$N$G$9!#\e(B
 
 \e$B$3$l$OITL{2w$G$9!#\e(B
 
-\e$B$3$l$KBP=h$9$kJ}K!$O!"\e(Bgnus \e$B$KA4$F$N\e(B spam \e$B$r\e(B @samp{spam} \e$B%a!<%k%0\e(B
-\e$B%k!<%W$KJ,N%$5$;$F$7$^$&$3$H$G$9\e(B (@pxref{Splitting Mail})\e$B!#\e(B
+\e$B$3$l$KBP=h$9$kJ}K!$O!"\e(Bgnus \e$B$KA4$F$N\e(B spam \e$B$r\e(B @samp{spam} \e$B%a!<%k%0%k!<%W$K\e(B
+\e$BJ,N%$5$;$F$7$^$&$3$H$G$9\e(B (@pxref{Splitting Mail})\e$B!#\e(B
 
-\e$B:G=i$K!"$"$J$?$KE~C#@-$N$"$k@5$7$$%a!<%k%"%I%l%9$r0l$DA*$S!"$=$l\e(B
-\e$B$rA4$F$N$"$J$?$N%K%e!<%95-;v$N\e(B @code{From} \e$B%X%C%@!<$KF~$l$^$9!#\e(B
-(\e$B$3$3$G$O\e(B @samp{larsi@@trym.ifi.uio.no} \e$B$rA*$S$^$7$?$,!"\e(B
-@samp{larsi+usenet@@ifi.uio.no} \e$B7A<0$N$?$/$5$s$N%"%I%l%9$NJ}$,NI\e(B
-\e$B$$A*Br$G$9!#$"$J$?$N%5%$%H$N\e(B sendmail \e$B$N@_Dj$,%a!<%k%"%I%l%9$N%m!<\e(B
-\e$B%+%kIt$H$7$F$I$s$J%-!<%o!<%I$r<u$1IU$1$k$+$O!"$"$J$?$N%5%$%H$N%7\e(B
-\e$B%9%F%`4IM}<T$KJ9$$$F$/$@$5$$!#\e(B)
+\e$B:G=i$K!"$"$J$?$KE~C#@-$N$"$k@5$7$$%a!<%k%"%I%l%9$r0l$DA*$S!"$=$l$rA4$F$N\e(B
+\e$B$"$J$?$N%K%e!<%95-;v$N\e(B @code{From} \e$B%X%C%@!<$KF~$l$^$9!#\e(B(\e$B$3$3$G$O\e(B
+@samp{larsi@@trym.ifi.uio.no} \e$B$rA*$S$^$7$?$,!"\e(B
+@samp{larsi+usenet@@ifi.uio.no} \e$B7A<0$N$?$/$5$s$N%"%I%l%9$NJ}$,NI$$A*Br$G\e(B
+\e$B$9!#$"$J$?$N%5%$%H$N\e(B sendmail \e$B$N@_Dj$,%a!<%k%"%I%l%9$N%m!<%+%kIt$H$7$F$I\e(B
+\e$B$s$J%-!<%o!<%I$r<u$1IU$1$k$+$O!"$"$J$?$N%5%$%H$N%7%9%F%`4IM}<T$KJ9$$$F$/\e(B
+\e$B$@$5$$!#\e(B)
 
 @lisp
 (setq message-default-news-headers
       "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
 @end lisp
 
-\e$B$=$7$F\e(B @code{nnmail-split-fancy} \e$B$K0J2<$NJ,N%5,B'$rF~$l$^$9\e(B
-(@pxref{Fancy Mail Splitting})\e$B!#\e(B
+\e$B$=$7$F\e(B @code{nnmail-split-fancy} \e$B$K0J2<$NJ,N%5,B'$rF~$l$^\e(B
+\e$B$9\e(B (@pxref{Fancy Mail Splitting})\e$B!#\e(B
 
 @lisp
 (
@@ -16990,18 +17936,17 @@ Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-\e(B
 @end lisp
 
 \e$B$3$N0UL#$O!"$3$N%"%I%l%9$KFO$$$?A4$F$N%a!<%k$r$^$:5?$$$^$9$,!"\e(B
-@samp{Re:} \e$B$G;O$^$k\e(B @code{Subject} \e$B$,$D$$$F$$$k$+!"\e(B
-@code{References} \e$B%X%C%@!<$,$D$$$F$$$l$P$*$=$i$/\e(B OK \e$B$@$m$&!"$H$$\e(B
-\e$B$&$3$H$G$9!#;D$j$OA4$F\e(B @samp{spam} \e$B%0%k!<%W$K9T$-$^$9!#\e(B(\e$B$3$N%"%$\e(B
-\e$B%G%"$O$*$=$i$/\e(B Tim Pierce \e$B;a$K$h$k$b$N$G$9!#\e(B)
-
-\e$B$3$l$K2C$($F!"B?$/$N%a!<%k\e(B spam \e$B20$O!"$"$J$?$N$H$3$m$N\e(B
-@code{smtp} \e$B%5!<%P!<$HD>@\OC$7!"\e(B@code{To} \e$B%X%C%@!<$K$"$J$?$N%a!<\e(B
-\e$B%k%"%I%l%9$,L@<($5$l$J$$$h$&$K$7$^$9!#$J$s$G$=$s$J$3$H$r$9$k$N$+\e(B
-\e$B$O$o$+$j$^$;$s$,\e(B --- \e$B$*$=$i$/;d$?$A$NN"$r$+$/5!9=$NN"$r$+$/$?$a\e(B
-\e$B$+$J\e(B? \e$B$I$A$i$K$7$F$b!"BP=h$O4JC1$J$3$H$G$9\e(B --- \e$B$"$J$?08$F$G\e(B
-\e$B$J$$$b$N$rA4It\e(B @samp{spam} \e$B%0%k!<%W$K$$$l$k$@$1$G$9!#$3$l$O$*9%\e(B
-\e$B$_J,N%5,B'$N:G8e$K$3$s$JIw$KF~$l$k$3$H$G$G$-$^$9!#\e(B
+@samp{Re:} \e$B$G;O$^$k\e(B @code{Subject} \e$B$,$D$$$F$$$k$+!"\e(B@code{References} \e$B%X%C\e(B
+\e$B%@!<$,$D$$$F$$$l$P$*$=$i$/\e(B OK \e$B$@$m$&!"$H$$$&$3$H$G$9!#;D$j$OA4$F\e(B
+@samp{spam} \e$B%0%k!<%W$K9T$-$^$9!#\e(B(\e$B$3$N%"%$%G%"$O$*$=$i$/\e(B Tim Pierce \e$B;a$K\e(B
+\e$B$h$k$b$N$G$9!#\e(B)
+
+\e$B$3$l$K2C$($F!"B?$/$N%a!<%k\e(B spam \e$B20$O!"$"$J$?$N$H$3$m$N\e(B @code{smtp} \e$B%5!<\e(B
+\e$B%P!<$HD>@\OC$7!"\e(B@code{To} \e$B%X%C%@!<$K$"$J$?$N%a!<%k%"%I%l%9$,L@<($5$l$J$$\e(B
+\e$B$h$&$K$7$^$9!#$J$s$G$=$s$J$3$H$r$9$k$N$+$O$o$+$j$^$;$s$,\e(B --- \e$B$*$=$i$/;d\e(B
+\e$B$?$A$NN"$r$+$/5!9=$NN"$r$+$/$?$a$+$J\e(B? \e$B$I$A$i$K$7$F$b!"BP=h$O4JC1$J$3$H$G\e(B
+\e$B$9\e(B --- \e$B$"$J$?08$F$G$J$$$b$N$rA4It\e(B @samp{spam} \e$B%0%k!<%W$K$$$l$k$@$1$G$9!#\e(B
+\e$B$3$l$O$*9%$_J,N%5,B'$N:G8e$K$3$s$JIw$KF~$l$k$3$H$G$G$-$^$9!#\e(B
 
 @lisp
 (
@@ -17010,26 +17955,23 @@ Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-\e(B
  "spam")
 @end lisp
 
-\e$B;d$N7P83$G$O!"$3$l$G;v<B>eA4$F$,@5$7$$%0%k!<%W$KJ,N`$5$l$^$9!#$^\e(B
-\e$B$"!"$=$l$G$b$H$-$I$-\e(B @samp{spam} \e$B%0%k!<%W$r%A%'%C%/$7$F!"@5$7$$\e(B
-\e$B%a!<%k$,$"$k$+%A%'%C%/$7$J$/$F$O$$$1$^$;$s$1$I$M!#$b$7$"$J$?$O<+\e(B
-\e$BJ,$,NI$$%M%C%H%o!<%/;TL1$G$"$k$H;W$C$F$$$k$J$i!"$=$l$>$l$N2!$7IU\e(B
-\e$B$1@kEA%a!<%k$N4X78Ev6I$K6l>p$rAw$jIU$1$k$3$H$5$($b$G$-$^$9\e(B ---
-\e$B2K$J$H$-$K$G$b$M!#\e(B
+\e$B;d$N7P83$G$O!"$3$l$G;v<B>eA4$F$,@5$7$$%0%k!<%W$KJ,N`$5$l$^$9!#$^$"!"$=$l\e(B
+\e$B$G$b$H$-$I$-\e(B @samp{spam} \e$B%0%k!<%W$r%A%'%C%/$7$F!"@5$7$$%a!<%k$,$"$k$+%A%'%C\e(B
+\e$B%/$7$J$/$F$O$$$1$^$;$s$1$I$M!#$b$7$"$J$?$O<+J,$,NI$$%M%C%H%o!<%/;TL1$G$"\e(B
+\e$B$k$H;W$C$F$$$k$J$i!"$=$l$>$l$N2!$7IU$1@kEA%a!<%k$N4X78Ev6I$K6l>p$rAw$jIU\e(B
+\e$B$1$k$3$H$5$($b$G$-$^$9\e(B --- \e$B2K$J$H$-$K$G$b$M!#\e(B
 
 \e$B$^$?!"$"$J$?$,BU$1<T$N%M%C%H%o!<%/;TL1$G$b$"$k$J$i!"\e(B
-@file{gnus-junk.el} \e$B%Q%C%1!<%8$K$h$C$F<+F0E*$K6l>p$r$$$&J}$,NI$$\e(B
-\e$B$H;W$&$+$b$7$l$^$;$s!#$3$l$O\e(B @*
-@file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}
-\e$B$+$i!VL5NA$G!WMxMQ$G$-$^$9!#$[$H$s$I$N\e(B spam \e$B%a!<%k$O<+F0E*$KAw$i\e(B
-\e$B$l$F$$$k$N$G!"$A$g$C$H$@$11'Ch$N%P%i%s%9$,$H$l$k$+$b$7$l$^$;$s!#\e(B
-
-\e$B$3$l$G;d$N$H$3$m$G$OF0$$$F$$$^$9!#$3$l$G$_$s$J$O4JC1$JJ}K!$G;d$K\e(B
-\e$BO"Mm$r<h$k$3$H$,$G$-\e(B (\e$BIaDL$K\e(B @kbd{r} \e$B$r2!$9$@$1$G$G$-$k\e(B)\e$B!";d$O\e(B
-spam \e$B$KHQ$o$5$l$k$3$H$OA4$/$"$j$^$;$s!#F@!9>uBV$G$9!#;d$N0U8+$H\e(B
-\e$B$7$F$O!"\e(B @code{From} \e$B%X%C%@!<$K56B$$7$FB8:_$7$J$$%I%a%$%s$KAw$i\e(B
-\e$B$;$k$N$O%-%?%J%$$G$9!#\e(B
+@file{gnus-junk.el} \e$B%Q%C%1!<%8$K$h$C$F<+F0E*$K6l>p$r$$$&J}$,NI$$$H;W$&$+\e(B
+\e$B$b$7$l$^$;$s!#$3$l\e(B
+\e$B$O\e(B @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>} \e$B$+\e(B
+\e$B$i!VL5NA$G!WMxMQ$G$-$^$9!#$[$H$s$I$N\e(B spam \e$B%a!<%k$O<+F0E*$KAw$i$l$F$$$k$N\e(B
+\e$B$G!"$A$g$C$H$@$11'Ch$N%P%i%s%9$,$H$l$k$+$b$7$l$^$;$s!#\e(B
 
+\e$B$3$l$G;d$N$H$3$m$G$OF0$$$F$$$^$9!#$3$l$G$_$s$J$O4JC1$JJ}K!$G;d$KO"Mm$r<h\e(B
+\e$B$k$3$H$,$G$-\e(B (\e$BIaDL$K\e(B @kbd{r} \e$B$r2!$9$@$1$G$G$-$k\e(B)\e$B!";d$O\e(B spam \e$B$KHQ$o$5$l$k\e(B
+\e$B$3$H$OA4$/$"$j$^$;$s!#F@!9>uBV$G$9!#;d$N0U8+$H$7$F$O!"\e(B@code{From} \e$B%X%C%@!<\e(B
+\e$B$K56B$$7$FB8:_$7$J$$%I%a%$%s$KAw$i$;$k$N$O%-%?%J%$$G$9!#\e(B
 
 @node Various Various
 @section \e$B$$$m$$$m$N$$$m$$$m\e(B
@@ -17039,103 +17981,105 @@ spam \e$B$KHQ$o$5$l$k$3$H$OA4$/$"$j$^$;$s!#F@!9>uBV$G$9!#;d$N0U8+$H\e(B
 @table @code
 
 @item gnus-home-directory
-\e$BA4$F$N\e(B gnus \e$B$N%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=$N=i4|\e(B
-\e$B@_DjCM$O\e(B @file{~/} \e$B$G$9!#\e(B
+\e$BA4$F$N\e(B gnus \e$B$N%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=$N=i4|@_DjCM\e(B
+\e$B$O\e(B @file{~/} \e$B$G$9!#\e(B
 
 @item gnus-directory
 @vindex gnus-directory
-\e$B$?$/$5$s$N\e(B gnus \e$B3JG<%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=\e(B
-\e$B$N=i4|@_DjCM$O\e(B @samp{SAVEDIR} \e$B4D6-JQ?t$NCM$+!"$=$NJQ?t$,@_Dj$5$l\e(B
-\e$B$F$$$J$$>l9g$O\e(B @file{~/News/} \e$B$G$9!#\e(B
+\e$B$?$/$5$s$N\e(B gnus \e$B3JG<%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=$N=i4|@_\e(B
+\e$BDjCM$O\e(B @samp{SAVEDIR} \e$B4D6-JQ?t$NCM$+!"$=$NJQ?t$,@_Dj$5$l$F$$$J$$>l9g\e(B
+\e$B$O\e(B @file{~/News/} \e$B$G$9!#\e(B
 
-@file{.gnus.el} \e$B%U%!%$%k$,FI$^$l$?$H$-$O\e(B gnus \e$B$N$[$H$s$I$O$9$G$K\e(B
-\e$BFI$_9~$^$l$F$$$k$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O$D$^$j!"$3$N\e(B
-\e$BJQ?t$r\e(B @file{.gnus.el} \e$B$NCf$G@_Dj$7$F$b!"$3$NJQ?t$K$h$C$F=i4|2=\e(B
-\e$B$5$l$kB>$N%G%#%l%/%H%j!<JQ?t$O@5$7$/@_Dj$5$l$J$$$@$m$&$H$$$&$3$H\e(B
-\e$B$G$9!#$3$NJQ?t$OBe$o$j$K\e(B @file{.emacs} \e$B$G@_Dj$7$F$/$@$5$$!#\e(B
+@file{.gnus.el} \e$B%U%!%$%k$,FI$^$l$?$H$-$O\e(B gnus \e$B$N$[$H$s$I$O$9$G$KFI$_9~$^\e(B
+\e$B$l$F$$$k$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O$D$^$j!"$3$NJQ?t\e(B
+\e$B$r\e(B @file{.gnus.el} \e$B$NCf$G@_Dj$7$F$b!"$3$NJQ?t$K$h$C$F=i4|2=$5$l$kB>$N%G%#\e(B
+\e$B%l%/%H%j!<JQ?t$O@5$7$/@_Dj$5$l$J$$$@$m$&$H$$$&$3$H$G$9!#$3$NJQ?t$OBe$o$j\e(B
+\e$B$K\e(B @file{.emacs} \e$B$G@_Dj$7$F$/$@$5$$!#\e(B
 
 @item gnus-default-directory
 @vindex gnus-default-directory
-\e$B>e5-$NJQ?t$K$OA4$/4X78$"$j$^$;$s\e(B --- \e$B$3$NJQ?t$OA4$F$N\e(B gnus \e$B%P%C\e(B
-\e$B%U%!!<$N%G%#%U%)%k%H%G%#%l%/%H%j!<$r$I$&$9$Y$-$+$r@_Dj$7$^$9!#$b\e(B
-\e$B$7\e(B @kbd{C-x C-f} \e$B$N$h$&$JL?Na$r<B9T$9$k$H!"8=:_$N%P%C%U%!!<$N%G%#\e(B
-\e$B%U%)%k%H%G%#%l%/%H%j!<$r5/E@$K$7$?%W%m%s%W%H$,=P$F$/$k$G$7$g$&!#\e(B
-
+\e$B>e5-$NJQ?t$K$OA4$/4X78$"$j$^$;$s\e(B --- \e$B$3$NJQ?t$OA4$F$N\e(B gnus \e$B%P%C%U%!!<$N\e(B
+\e$B%G%#%U%)%k%H%G%#%l%/%H%j!<$r$I$&$9$Y$-$+$r@_Dj$7$^$9!#$b\e(B
+\e$B$7\e(B @kbd{C-x C-f} \e$B$N$h$&$JL?Na$r<B9T$9$k$H!"8=:_$N%P%C%U%!!<$N%G%#%U%)%k\e(B
+\e$B%H%G%#%l%/%H%j!<$r5/E@$K$7$?%W%m%s%W%H$,=P$F$/$k$G$7$g$&!#\e(B
 
-
-\e$B$3$NJQ?t$,\e(B @code{nil} (\e$B$3$l$,=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(B gnus \e$B$r5/F0\e(B
-\e$B$7$?$H$-$K$"$J$?$,$$$?%P%C%U%!!<$N%G%#%U%)%k%H%G%#%l%/%H%j!<$,%G%#\e(B
-\e$B%U%)%k%H%G%#%l%/%H%j!<$K$J$k$G$7$g$&!#\e(B
+\e$B$3$NJQ?t$,\e(B @code{nil} (\e$B$3$l$,=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(Bgnus \e$B$r5/F0$7$?$H$-$K\e(B
+\e$B$"$J$?$,$$$?%P%C%U%!!<$N%G%#%U%)%k%H%G%#%l%/%H%j!<$,%G%#%U%)%k%H%G%#%l%/\e(B
+\e$B%H%j!<$K$J$k$G$7$g$&!#\e(B
 
 @item gnus-verbose
 @vindex gnus-verbose
-\e$B$3$NJQ?t$O\e(B 0 \e$B$+$i\e(B 10 \e$B$^$G4V$N@0?t$G$9!#Bg$-$$?t;z$[$I$?$/$5$s$N\e(B
-\e$B%a%C%;!<%8$,I=<($5$l$^$9!#$3$NJQ?t$,\e(B 0 \e$B$G$"$l$P\e(B gnus \e$B$O2?$N%a%C\e(B
-\e$B%;!<%8$b8+$;$^$;$s!#$3$l$,\e(B 7 (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$PFC$K=EMW$J%a%C\e(B
-\e$B%;!<%8$,I=<($5$l!"\e(B10 \e$B$G$"$l$P\e(B gnus \e$B$O7h$7$F$*C}$j$r;_$a$:!"$?$/\e(B
-\e$B$5$s$N%a%C%;!<%8$G$"$J$?$K$a$^$$$r5/$3$5$;$k$G$7$g$&!#\e(B
+\e$B$3$NJQ?t$O\e(B 0 \e$B$+$i\e(B 10 \e$B$^$G4V$N@0?t$G$9!#Bg$-$$?t;z$[$I$?$/$5$s$N%a%C%;!<\e(B
+\e$B%8$,I=<($5$l$^$9!#$3$NJQ?t$,\e(B 0 \e$B$G$"$l$P\e(B gnus \e$B$O2?$N%a%C%;!<%8$b8+$;$^$;\e(B
+\e$B$s!#$3$l$,\e(B 7 (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$PFC$K=EMW$J%a%C%;!<%8$,I=<($5$l!"\e(B10 \e$B$G\e(B
+\e$B$"$l$P\e(B gnus \e$B$O7h$7$F$*C}$j$r;_$a$:!"$?$/$5$s$N%a%C%;!<%8$G$"$J$?$K$a$^$$\e(B
+\e$B$r5/$3$5$;$k$G$7$g$&!#\e(B
 
 @item gnus-verbose-backends
 @vindex gnus-verbose-backends
-\e$B$3$NJQ?t$O\e(B @code{gnus-verbose} \e$B$HF1MM$KF0:n$7$^$9$,!"\e(Bgnus \e$BK\BN$G\e(B
-\e$B$O$J$/\e(B gnus \e$B$N%P%C%/%(%s%I$KBP$7$FE,MQ$5$l$^$9!#\e(B
+\e$B$3$NJQ?t$O\e(B @code{gnus-verbose} \e$B$HF1MM$KF0:n$7$^$9$,!"\e(Bgnus \e$BK\BN$G$O$J\e(B
+\e$B$/\e(B gnus \e$B$N%P%C%/%(%s%I$KBP$7$FE,MQ$5$l$^$9!#\e(B
 
 @item nnheader-max-head-length
 @vindex nnheader-max-head-length
-\e$B%P%C%/%(%s%I$,5-;v$N%X%C%@!<$r$^$C$9$0FI$s$G$$$k$H$-$O!"$G$-$k8B\e(B
-\e$B$j>/$J$$NL$@$1$rFI$b$&$HEXNO$7$^$9!#$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 4096)
-\e$B$O!"%P%C%/%(%s%I$,%X%C%@!<$HK\J8$N4V$N6h@Z$j9T$r8+$D$1$k$^$G$KFI\e(B
-\e$B$_9~$b$&$H$9$k@dBP:GBgD9$r;XDj$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"\e(B
-\e$B$l$P!"FI$_9~$_>e8B$O$"$j$^$;$s!#$b$7\e(B @code{t} \e$B$G$"$l$P!"%P%C%/%(\e(B
-\e$B%s%I$O5-;v$rItJ,ItJ,$GFI$_9~$b$&$H$O$;$:!"5-;vA4BN$rFI$_9~$_$^$9!#\e(B
-\e$B$3$l$O\e(B @code{ange-ftp} \e$B$d\e(B @code{efs} \e$B$N$"$k%P!<%8%g%s$G0UL#$r$b\e(B
-\e$B$A$^$9!#\e(B
+\e$B%P%C%/%(%s%I$,5-;v$N%X%C%@!<$r$^$C$9$0FI$s$G$$$k$H$-$O!"$G$-$k8B$j>/$J$$\e(B
+\e$BNL$@$1$rFI$b$&$HEXNO$7$^$9!#$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 4096) \e$B$O!"%P%C%/%(%s%I\e(B
+\e$B$,%X%C%@!<$HK\J8$N4V$N6h@Z$j9T$r8+$D$1$k$^$G$KFI$_9~$b$&$H$9$k@dBP:GBgD9\e(B
+\e$B$r;XDj$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$P!"FI$_9~$_>e8B$O$"$j$^$;$s!#\e(B
+\e$B$b$7\e(B @code{t} \e$B$G$"$l$P!"%P%C%/%(%s%I$O5-;v$rItJ,ItJ,$GFI$_9~$b$&$H$O$;$:!"\e(B
+\e$B5-;vA4BN$rFI$_9~$_$^$9!#$3$l$O\e(B @code{ange-ftp} \e$B$d\e(B @code{efs} \e$B$N$"$k%P!<\e(B
+\e$B%8%g%s$G0UL#$r$b$A$^$9!#\e(B
 
 @item nnheader-head-chop-length
 @vindex nnheader-head-chop-length
-\e$B$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 2048) \e$B$O!"A05-$NA`:n$r9T$C$F$$$k$H$-$K!"$I\e(B
-\e$B$l$/$i$$$NBg$-$5$NC10L$G3F5-;v$rFI$_9~$`$+$r@_Dj$7$^$9!#\e(B
+\e$B$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 2048) \e$B$O!"A05-$NA`:n$r9T$C$F$$$k$H$-$K!"$I$l$/$i$$\e(B
+\e$B$NBg$-$5$NC10L$G3F5-;v$rFI$_9~$`$+$r@_Dj$7$^$9!#\e(B
 
 @item nnheader-file-name-translation-alist
 @vindex nnheader-file-name-translation-alist
 @cindex file names
 @cindex invalid characters in file names
 @cindex characters in file names
-\e$B$3$l$O%U%!%$%kL>$NJ8;z$r$I$N$h$&$KJQ49$9$k$+$r;XDj$9$kO"A[%j%9%H\e(B
-\e$B$G$9!#Nc$($P!"$b$7\e(B @samp{:} \e$B$,$"$J$?$N%7%9%F%`$G$O%U%!%$%kL>$NJ8\e(B
-\e$B;z$H$7$F$O;H$($J$$>l9g\e(B (\e$B$"$J$?$O\e(B OS/2 \e$B%f!<%6$G$9\e(B) \e$B!"0J2<$N$h$&$K\e(B
-\e$B$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$l$O%U%!%$%kL>$NJ8;z$r$I$N$h$&$KJQ49$9$k$+$r;XDj$9$kO"A[%j%9%H$G$9!#Nc\e(B
+\e$B$($P!"$b$7\e(B @samp{:} \e$B$,$"$J$?$N%7%9%F%`$G$O%U%!%$%kL>$NJ8;z$H$7$F$O;H$($J\e(B
+\e$B$$>l9g\e(B (\e$B$"$J$?$O\e(B OS/2 \e$B%f!<%6$G$9\e(B)\e$B!"0J2<$N$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
 
 @lisp
 (setq nnheader-file-name-translation-alist
       '((?: . ?_)))
 @end lisp
 
-\e$B<B:]$K$O!"$3$l$O\e(B OS/2 \e$B$H\e(B (\e$B$/$=\e(B) MS Windows \e$B%7%9%F%`>e$G$N$3$NJQ\e(B
-\e$B?t$N=i4|@_DjCM$G$9!#\e(B
+\e$B<B:]$K$O!"$3$l$O\e(B OS/2 \e$B$H\e(B (\e$B$/$=\e(B) MS Windows \e$B%7%9%F%`>e$G$N$3$NJQ?t$N=i4|\e(B
+\e$B@_DjCM$G$9!#\e(B
 
 @item gnus-hidden-properties
 @vindex gnus-hidden-properties
-\e$B$3$l$O\e(B ``\e$BIT2D;k\e(B'' \e$B%F%-%9%H$r1#$9$?$a$K;H$o$l$kB0@-$N%j%9%H$G$9!#\e(B
-\e$B$[$H$s$I$N%7%9%F%`$G$O=i4|@_DjCM$O\e(B @code{(invisible t intangible
-t)} \e$B$G!"$3$l$OIT2D;k%F%-%9%H$r8+$($J$/$7$F?($l$J$/$7$^$9!#\e(B
+\e$B$3$l$O\e(B ``\e$BIT2D;k\e(B'' \e$B%F%-%9%H$r1#$9$?$a$K;H$o$l$kB0@-$N%j%9%H$G$9!#$[$H$s$I\e(B
+\e$B$N%7%9%F%`$G$O=i4|@_DjCM$O\e(B @code{(invisible t intangible t)} \e$B$G!"$3$l$O\e(B
+\e$BIT2D;k%F%-%9%H$r8+$($J$/$7$F?($l$J$/$7$^$9!#\e(B
 
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
-\e$B%X%C%@!<$r2r<a$9$kA0$K8F$S=P$5$l$k%U%C%/!#$3$l$ONc$($P!"<hF@$7$?\e(B
-\e$B%X%C%@!<$NE}7W>pJs$r<h$k$H$+!"$"$k$$$O$"$k<o$N%X%C%@!<$r<h$j=|$/\e(B
-\e$B$3$H$K;H$&$3$H$,$G$-$^$9!#$^$"!";d$O2?$G$3$s$J$b$N$,M_$7$$$+$h$/\e(B
-\e$B$o$+$s$J$$$s$@$1$I$M!#\e(B
+\e$B%X%C%@!<$r2r<a$9$kA0$K8F$S=P$5$l$k%U%C%/!#$3$l$ONc$($P!"<hF@$7$?%X%C%@!<\e(B
+\e$B$NE}7W>pJs$r<h$k$H$+!"$"$k$$$O$"$k<o$N%X%C%@!<$r<h$j=|$/$3$H$K;H$&$3$H$,\e(B
+\e$B$G$-$^$9!#$^$"!";d$O2?$G$3$s$J$b$N$,M_$7$$$+$h$/$o$+$s$J$$$s$@$1$I$M!#\e(B
 
 @item gnus-shell-command-separator
 @vindex gnus-shell-command-separator
-\e$BFs$D$N%7%'%kL?Na$r6h@Z$k$N$K;HMQ$5$l$kJ8;zNs!#=i4|@_DjCM$O\e(B
-@samp{;} \e$B$G$9!#\e(B
+\e$BFs$D$N%7%'%kL?Na$r6h@Z$k$N$K;HMQ$5$l$kJ8;zNs!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{;} \e$B$G$9!#\e(B
 
+@item gnus-invalid-group-regexp
+@vindex gnus-invalid-group-regexp
 
-@end table
+\e$B%f!<%6$K%0%k!<%WL>$r3NG'$9$k$H$-$K;H$&!"\e(B``\e$B;H$($J$$\e(B'' \e$B%0%k!<%WL>$K%^%C%A\e(B
+\e$B$9$k@55,I=8=$G$9!#4{DjCM$O\e(B gnus \e$B$NFbItF0:n\e(B (\e$BA*BrJ}K!$H%0%k!<%W$N6-3&$K!"\e(B
+\e$BDL>o\e(B @samp{:} \e$B$r;H$C$F$$$k\e(B) \e$B$r$a$A$c$a$A$c$K$7$F$7$^$&$+$b$7$l$J$$!"$$$/\e(B
+\e$B$D$+$N\e(B @strong{\e$BK\Ev$K\e(B} \e$B;H$($J$$%0%k!<%WL>$rJa$^$($^$9!#\e(B
 
+IMAP \e$B%f!<%6$O%0%k!<%WL>$K\e(B @samp{/} \e$B$r;H$$$?$$$H;W$&$G$7$g$&$1$l$I!#\e(B
 
+@end table
 
 @node The End
 @chapter \e$B=*$o$j\e(B
@@ -17188,22 +18132,20 @@ but at the common table.@*
 \e$BIaDL$N%F!<%V%k$N$H$3$m$G\e(B @*
 @end quotation
 
-
 @node Appendices
 @chapter \e$BIUO?\e(B
 
 @menu
-* History::                        \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+!#\e(B
-* On Writing Manuals::             Why this is not a beginner's guide.
-* Terminology::                    \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&!#\e(B
-* Customization::                  \e$B$"$J$?$NMW5a$K1h$C$F\e(B gnus \e$B$r;EN)$F$k!#\e(B
-* Troubleshooting::                \e$B>e<j$/9T$+$J$+$C$?$H$-$K;n$9$+$b$7$l$J$$;v!#\e(B
-* Gnus Reference Guide::           \e$B?'!9$J5;=QE*$J$b$N!#\e(B
-* Emacs for Heathens::             Emacs \e$B$NMQ8l$N<jC;$JF3F~!#\e(B
-* Frequently Asked Questions::     \e$B<ALd$HEz!#\e(B
+* History::                    \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+\e(B
+* On Writing Manuals::         \e$B$J$<$3$l$,=i?4<TMQ$N0FFb$G$J$$$+\e(B
+* Terminology::                \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&\e(B
+* Customization::              \e$B$"$J$?$NMW5a$K1h$C$F\e(B gnus \e$B$r;EN)$F$k\e(B
+* Troubleshooting::            \e$B>e<j$/9T$+$J$+$C$?$H$-$K;n$9$+$b$7$l$J$$;v\e(B
+* Gnus Reference Guide::       \e$B?'!9$J5;=QE*$J$b$N\e(B
+* Emacs for Heathens::         Emacs \e$B$NMQ8l$N<jC;$JF3F~\e(B
+* Frequently Asked Questions:: \e$B<ALd$HEz\e(B
 @end menu
 
-
 @node History
 @section \e$BNr;K\e(B
 
@@ -17212,34 +18154,59 @@ but at the common table.@*
 \e$B$m!"\e(BLars Magne Ingebrigtsen \e$B$OK0$-$F$-$F!"\e(BGnus \e$B$r=q$-D>$=$&$H7h?4$7$^$7\e(B
 \e$B$?!#\e(B
 
-\e$B$3$NL5Ni$r9T$C$??MJ*$rD4$Y$F$_$?$$$N$J$i!"$"$J$?$N\e(B (\e$B$/$=!*\e(B) \e$B%&%'%V%V%i%&\e(B
-\e$B%6!<$r\e(B @file{http://www.stud.ifi.uio.no/~larsi/} \e$B$K8~$1$k;v$,$G$-$^$9!#\e(B
+\e$B$3$NL5Ni$r9T$C$??MJ*$rD4$Y$F$_$?$$$N$J$i!"$"$J$?$N\e(B (\e$B$/$=\e(B!) \e$B%&%'%V%V%i%&\e(B
+\e$B%6!<$r\e(B @file{http://quimby.gnus.org/~larsi/} \e$B$K8~$1$k;v$,$G$-$^$9!#\e(B
 \e$B$3$l$O?7$7$/$F?h$JHG$N\e(B gnus \e$B$NBh0lG[I[>l=j$G!"\e(BNewsrc \e$B$r$V$C2u$7$F?M!9$r\e(B
 \e$B7cE\$5$l$k%5%$%H$H$7$FCN$i$l$F$$$^$9!#\e(B
 
 \e$B:G=i$N%"%k%U%!HG$N3+H/4|4V$K!"?7$7$$\e(B Gnus \e$B$O\e(B ``(ding) Gnus'' \e$B$H8F$P$l$F\e(B
 \e$B$$$^$7$?!#\e(B@dfn{(ding)} \e$B$O$b$A$m$s!"\e(B@dfn{ding is not Gnus} \e$B$NC;=L7A$G!"$3\e(B
-\e$B$l$OA4$/40A4$J13$G$9$,!"$@$l$,$=$s$J$3$H$r5$$K$9$k$G$7$g$&$+!)\e(B(\e$B$H$3$m$G!"\e(B
+\e$B$l$OA4$/40A4$J13$G$9$,!"$@$l$,$=$s$J$3$H$r5$$K$9$k$G$7$g$&$+\e(B? (\e$B$H$3$m$G!"\e(B
 \e$B$3$NC;=L7A$N\e(B ``Gnus'' \e$B$O$*$=$i$/G_ED$5$s$N0U?^DL$j\e(B ``\e$B%K%e!<%9\e(B'' \e$B$HH/2;$5\e(B
-\e$B$l$k$Y$-$G!"$=$&$9$k$H$b$C$HE,@Z$JL>A0$K$J$j$^$9!#$=$&;W$$$^$;$s$+!)\e(B)
+\e$B$l$k$Y$-$G!"$=$&$9$k$H$b$C$HE,@Z$JL>A0$K$J$j$^$9!#$=$&;W$$$^$;$s$+\e(B?)
 
 \e$B$I$A$i$K$;$h!"A4$F$N%(%M%k%.!<$r?7$7$$855$$NNI$$L>A0$rIU$1$k$N$K;H$$2L$?\e(B
-\e$B$7$?8e!"$=$NL>A0$O\e(B @emph{\e$B$"$^$j$K\e(B} \e$B855$$,NI$9$.$k$H$$$&;v$K$J$j!"$=$l$r\e(B
-``Gnus'' \e$B$H:F$SL?L>$7$^$7$?!#$G$b!":#2s$OBgJ8;z$H>.J8;z$r:.$<$F$$$^$9!#\e(B
-``Gnus'' \e$B$H\e(B ``@sc{gnus}'' \e$B$G$9!#\e(B \e$B?7$7$$$b$N\e(B \e$B$H\e(B \e$B8E$$$b$N!#\e(B
+\e$B$7$?8e!"$=$NL>A0$O\e(B @emph{\e$B$"$^$j$K\e(B} \e$B855$$,NI$9$.$k$H$$$&;v$K$J$j!"$=$l\e(B
+\e$B$r\e(B ``Gnus'' \e$B$H:F$SL?L>$7$^$7$?!#$G$b!":#2s$OBgJ8;z$H>.J8;z$r:.$<$F$$$^$9!#\e(B
+``Gnus'' \e$B$H\e(B ``@sc{gnus}'' \e$B$G$9!#?7$7$$$b$N\e(B \e$B$H\e(B \e$B8E$$$b$N!#\e(B
 
-\e$B:G=i$N\e(B ``\e$BE,@Z$J\e(B'' Gnus 5 \e$B$N%j%j!<%9$O\e(B1995\e$BG/\e(B11\e$B7n$K\e(B Emacs 19.30 \e$B$NG[I[$K4^\e(B
-\e$B$^$l$?$H$-$K$J$5$l$^$7$?\e(B (132 \e$B$N\e(B (ding) Gnus \e$B$N%j%j!<%9\e(B \e$BB-$9$3$H$N\e(B
-Gnus5.0 \e$B$N\e(B15\e$B%j%j!<%9\e(B)\e$B!#\e(B
+@menu
+* Gnus Versions::       What Gnus versions have been released.
+* Other Gnus Versions:: Other Gnus versions that also have been released.
+* Why?::                Gnus \e$B$NL\E*$O2?\e(B?
+* Compatibility::       Gnus \e$B$O\e(B @sc{gnus} \e$B$H$I$l$/$i$$8_49@-$,$"$k$N\e(B?
+* Conformity::          Gnus \e$B$OA4$F$NI8=`$rK~$?$=$&$H$9$k\e(B
+* Emacsen::             Gnus \e$B$O$$$/$D$+$N8=BeE*$J\e(B Emacs \e$B4D6-$G<B9T$G$-$k\e(B
+* Gnus Development::    Gnus \e$B$,3+H/$5$l$F$$$kJ}K!\e(B
+* Contributors::        \e$BBgNL$N?M!9\e(B
+* New Features::        Gnus \e$B$N?7$7$$;v$K4X$9$k<j$,$+$j\e(B
+* Newest Features::     \e$B$"$^$j$K$b?7$7$$$?$a$K$^$@=q$+$l$F$$$J$$$b$N\e(B
+@end menu
+
+@node Gnus Versions
+@subsection Gnus Versions
+@cindex Pterodactyl Gnus
+@cindex ding Gnus
+@cindex September Gnus
+@cindex Quassia Gnus
+
+\e$B:G=i$N\e(B ``\e$BE,@Z$J\e(B'' Gnus 5 \e$B$N%j%j!<%9$O\e(B 1995\e$BG/\e(B11\e$B7n$K\e(B Emacs 19.30 \e$B$NG[I[$K\e(B
+\e$B4^$^$l$?$H$-$K$J$5$l$^$7$?\e(B (132 \e$B$N\e(B (ding) Gnus \e$B$N%j%j!<%9\e(B \e$BB-$9$3$H\e(B
+\e$B$N\e(B Gnus5.0 \e$B$N\e(B 15 \e$B%j%j!<%9\e(B)\e$B!#\e(B
 
-1996\e$BG/\e(B3\e$B7n$K<!$N@$Be$N\e(B Gnus (\e$BJLL>\e(B ``September Gnus'' (99\e$B%j%j!<%9$N8e$G\e(B))
-\e$B$,\e(B ''Gnus 5.2`` \e$B$H$$$&L>A0$G%j%j!<%9$5$l$^$7$?\e(B (40\e$B%j%j!<%9\e(B)\e$B!#\e(B
+1996\e$BG/\e(B3\e$B7n$K<!$N@$Be$N\e(B Gnus (\e$BJLL>\e(B ``September Gnus'' (99 \e$B%j%j!<%9$N8e\e(B
+\e$B$G\e(B)) \e$B$,\e(B ''Gnus 5.2`` \e$B$H$$$&L>A0$G%j%j!<%9$5$l$^$7$?\e(B (40 \e$B%j%j!<%9\e(B)\e$B!#\e(B
 
-1996\e$BG/$N\e(B7\e$B7n\e(B28\e$BF|$K\e(B Red Gnus \e$B$N:n6H$,;O$^$j!"$=$l$O\e(B1997\e$BG/\e(B1\e$B7n\e(B25\e$BF|$K\e(B (84\e$B%j%j!<\e(B
-\e$B%9$N8e$G\e(B) ``Gnus 5.4'' \e$B$H$7$F%j%j!<%9$5$l$^$7$?\e(B (67 \e$B%j%j!<%9\e(B)\e$B!#\e(B
+1996\e$BG/$N\e(B 7\e$B7n\e(B28\e$BF|$K\e(B Red Gnus \e$B$N:n6H$,;O$^$j!"$=$l$O\e(B 1997\e$BG/\e(B1\e$B7n\e(B25\e$BF|\e(B
+\e$B$K\e(B (84 \e$B%j%j!<%9$N8e$G\e(B) ``Gnus 5.4'' \e$B$H$7$F%j%j!<%9$5$l$^$7$?\e(B (67 \e$B%j%j!<\e(B
+\e$B%9\e(B)\e$B!#\e(B
 
-1997\e$BG/\e(B9\e$B7n\e(B13\e$BF|$K!"\e(BQuassia Gnus \e$B$,3+;O$5$l!"\e(B37\e$B%j%j!<%9B3$-$^$7$?!#$=$l$O\e(B
-``Gnus 5.6'' \e$B$H$7$F\e(B1998\e$BG/\e(B3\e$B7n\e(B8\e$BF|$K%j%j!<%9$5$l$^$7$?!#\e(B
+1997\e$BG/\e(B9\e$B7n\e(B13\e$BF|$K!"\e(BQuassia Gnus \e$B$,3+;O$5$l!"\e(B37 \e$B%j%j!<%9B3$-$^$7$?!#$=$l\e(B
+\e$B$O\e(B ``Gnus 5.6'' \e$B$H$7$F\e(B 1998\e$BG/\e(B3\e$B7n\e(B8\e$BF|$K%j%j!<%9$5$l$^$7$?\e(B (46 \e$B%j%j!<%9\e(B)\e$B!#\e(B
+
+1998\e$BG/\e(B8\e$B7n\e(B29\e$BF|$K\e(B Gnus 5.6 \e$B$+$i\e(B Pterodactyl Gnus \e$B$,@8$^$l!"\e(B1999\e$BG/\e(B12\e$B7n\e(B3\e$BF|\e(B
+\e$B$K\e(B (99 \e$B%j%j!<%9$H\e(B CVS \e$B%j%]%8%H%j$G$N:n6H$N8e\e(B) ``Gnus 5.8'' \e$B$H$7$F%j%j!<\e(B
+\e$B%9$5$l$^$7$?!#\e(B
 
 \e$B$b$7@\F,<-$r;}$C$?HG$N\e(B Gnus -- ``(ding) Gnus'', ``September Gnus'',
 ``Red Gnus'', ``Quassia Gnus'' -- \e$B$K=P2q$C$F$b!":.Mp$7$J$$$G$/$@$5$$!#$"\e(B
@@ -17248,22 +18215,23 @@ Gnus5.0 \e$B$N\e(B15\e$B%j%j!<%9\e(B)\e$B!#\e(B
 \e$B5n$j$J$5$$!#E,@Z$K%j%j!<%9$5$l$?HG$N\e(B Gnus \e$B$r8+$D$1$F!"Be$o$j$K$=$l$K4s$j\e(B
 \e$BE:$C$F2<$5$$!#\e(B
 
-@menu
-* Why?::                Gnus \e$B$NL\E*$O2?!)\e(B
-* Compatibility::       Gnus \e$B$O\e(B @sc{gnus} \e$B$H$I$l$/$i$$8_49@-$,$"$k$N!)\e(B
-* Conformity::          Gnus \e$B$OA4$F$NI8=`$rK~$?$=$&$H$9$k!#\e(B
-* Emacsen::             Gnus \e$B$O$$$/$D$+$N8=BeE*$J\e(B Emacs \e$B4D6-$G<B9T$G$-$k!#\e(B
-* Contributors::        \e$BBgNL$N?M!9!#\e(B
-* Gnus Development::    Gnus \e$B$,3+H/$5$l$F$$$kJ}K!!#\e(B
-* New Features::        Gnus \e$B$N?7$7$$;v$K4X$9$k<j$,$+$j!#\e(B
-* Newest Features::     \e$B$"$^$j$K$b?7$7$$$?$a$K$^$@=q$+$l$F$$$J$$$b$N!#\e(B
-@end menu
+@node Other Gnus Versions
+@subsection \e$BB>$N\e(B gnus \e$B$N%P!<%8%g%s\e(B
+@cindex Semi-gnus
+
+Lars \e$B$5$s$,D4@=$7$F%j%j!<%9$7$?\e(B Gnus \e$B$K2C$($F!"F|K\$G$O\e(B Semi-gnus \e$B$N3+H/\e(B
+\e$B$,9T$J$o$l$F$$$^$9!#$3$l$O\e(B SEMI \e$B$H$$$&\e(B MIME \e$B$N5!G=$r<B8=$9$k$?$a$N%i%$%V\e(B
+\e$B%i%j$r;H$&$3$H$rA0Ds$H$7$F$$$^$9!#\e(B
 
+\e$B$3$l$i$N\e(B gnus \e$B$O\e(B Gnus 5.6 \e$B$H\e(B Pterodactyl Gnus \e$B$r85$K$7$F$$$^$9!#$=$l$i\e(B
+\e$B$O\e(B ``Semi-gnus'' \e$B$HAm>N$5$l!"\e(BT-gnus, Nana-gnus \e$B$*$h$S\e(B Chaos \e$B$N0[$J$C$?7O\e(B
+\e$BE}$,$"$j$^$9!#$3$l$i$O6/NO$J\e(B MIME \e$B$N5!G=$H3F9q8lBP1~$N5!G=$rDs6!$9$k$b$N\e(B
+\e$B$G!"FC$KF|K\?M$N%f!<%6$K$H$C$FBg;v$J$b$N$G$9!#\e(B
 
 @node Why?
-@subsection \e$B$J$<!)\e(B
+@subsection \e$B$J$<\e(B?
 
-Gnus \e$B$NL\E*$O2?$G$9$+!)\e(B
+Gnus \e$B$NL\E*$O2?$G$9$+\e(B?
 
 \e$B;d$O!"$"$J$?$N9M$(IU$/;v$rA4$F$G$-$k\e(B ``\e$B$9$P$i$7$$\e(B'' ``\e$B$+$C$3$$$$\e(B'' ``\e$B$$\e(B
 \e$B$+$9\e(B'' ``\e$B$O$d$j$N\e(B'' \e$B%K%e!<%9%j!<%@$rDs6!$7$?$$$H;W$$$^$9!#$3$l$O;d$NBg85\e(B
@@ -17271,9 +18239,9 @@ Gnus \e$B$NL\E*$O2?$G$9$+!)\e(B
 \e$BEv$K@P4o;~Be$KB0$7$F$$$k$H$$$&;v$,L@$i$+$K$J$j$^$7$?!#%K%e!<%9%j!<%@!<$O!"\e(B
 \e$B%$%s%?!<%M%C%H$NMD;y4|$+$i$[$H$s$IH/E8$7$F$$$^$;$s$G$7$?!#$b$78=:_$NA}2C\e(B
 \e$BN($GNL$,A}2C$7$D$E$1$l$P!"A4$F$N8=:_$N%K%e!<%9%j!<%@!<$OA4$/Lr$KN)$?$J$/\e(B
-\e$B$J$k$G$7$g$&!#0lF|$K\e(B1000\e$B$d$b$C$H$?$/$5$s$N?7$7$$5-;v$N$"$k%K%e!<%9%0%k!<\e(B
-\e$B%W$r07$&$K$O$I$&$9$l$PNI$$$N$G$7$g$&!)\e(B \e$BEj9F$r$9$kI4K|$d$=$l$h$jB?$$?M!9\e(B
-\e$B$KCY$l$J$$$h$&$KIU$$$F$$$/$K$O$I$&$9$l$PNI$$$N$G$7$g$&!)\e(B
+\e$B$J$k$G$7$g$&!#0lF|$K\e(B 1000 \e$B$d$b$C$H$?$/$5$s$N?7$7$$5-;v$N$"$k%K%e!<%9%0%k!<\e(B
+\e$B%W$r07$&$K$O$I$&$9$l$PNI$$$N$G$7$g$&\e(B? \e$BEj9F$r$9$kI4K|$d$=$l$h$jB?$$?M!9$K\e(B
+\e$BCY$l$J$$$h$&$KIU$$$F$$$/$K$O$I$&$9$l$PNI$$$N$G$7$g$&\e(B?
 
 Gnus \e$B$O$3$l$i$N<ALd$KK\Ev$N2r7h$rDs0F$7$^$9$,!";d$O\e(B Gnus \e$B$,%K%e!<%9$rFI\e(B
 \e$B$_!"<hF@$9$k$?$a$N?7$7$$J}K!$r<B83$9$k>l$H$7$F;H$o$l$FM_$7$$$G$9!#G_ED$5\e(B
@@ -17284,9 +18252,9 @@ Gnus \e$B$O$3$l$i$N<ALd$KK\Ev$N2r7h$rDs0F$7$^$9$,!";d$O\e(B Gnus \e$B$,%K%e!<%9$rFI
 \e$B%:$N$?$a$N%U%C%/$r2C$($^$7$?!#$=$l$r$9$k;v$K$h$C$F!"C58!$7!"H/L@$7$?$$A4\e(B
 \e$B$F$N?M$r>7$$$F$$$k$N$G$9!#\e(B
 
-\e$B$*$=$i$/\e(B Gnus \e$B$O40@.$9$k;v$O$J$$$N$+$b$7$l$^$;$s!#\e(B @kbd{C-u 100 M-x
-all-hail-emacs} \e$B$H\e(B @kbd{C-u 100 M-x all-hail-xemacs} \e$B$G$9!#\e(B
-
+\e$B$*$=$i$/\e(B Gnus \e$B$O40@.$9$k;v$O$J$$$N$+$b$7$l$^$;$s!#\e(B
+@kbd{C-u 100 M-x all-hail-emacs} \e$B$H\e(B @kbd{C-u 100 M-x all-hail-xemacs} \e$B$G\e(B
+\e$B$9!#\e(B
 
 @node Compatibility
 @subsection \e$B8_49@-\e(B
@@ -17317,26 +18285,26 @@ Articles}.
 \e$B$GL?Na$,<B9T$5$l$k$H!"$3$NJQ99$O!"$"$J$?$,Cm0U$7$F$$$J$$$H!"@5$7$/$J$$CM\e(B
 \e$B$K$J$k$+$bCN$l$^$;$s!#\e(B
 
-@sc{gnus} \e$B$NFbIt$NCN<1$K0MB8$7$?A4$F$N%3!<%I$O<B9T$G$-$J$$$G$7$g$&!#\e(B2\e$B$D\e(B
+@sc{gnus} \e$B$NFbIt$NCN<1$K0MB8$7$?A4$F$N%3!<%I$O<B9T$G$-$J$$$G$7$g$&!#Fs$D\e(B
 \e$BNc$r5s$2$^$9\e(B: @code{gnus-newsrc-alist} \e$B$NJB$SBX$(\e(B (\e$B$b$7$/$O!"<B:]$O2?$i\e(B
-\e$B$+$NJ}K!$G$=$l$rJQ99$9$k;v\e(B) \e$B$O@dBP$K6X;_$5$l$F$$$^$9!#\e(B Gnus \e$B$O$3$NO"A[%j\e(B
+\e$B$+$NJ}K!$G$=$l$rJQ99$9$k;v\e(B) \e$B$O@dBP$K6X;_$5$l$F$$$^$9!#\e(BGnus \e$B$O$3$NO"A[%j\e(B
 \e$B%9%H$NEPO?$r;X$7<($9%O%C%7%e%F!<%V%k$rJ];}$7$F$*$j\e(B (\e$B$=$l$OB?$/$N4X?t$NB.\e(B
 \e$BEY$r>e$2$^$9\e(B)\e$B!"D>@\O"A[%j%9%H$rJQ99$9$k;v$O0[>o$J7k2L$r$b$?$i$9$G$7$g$&!#\e(B
 
 @cindex hilit19
 @cindex highlighting
-\e$B8E$$\e(B hilit19 \e$B$N%3!<%I$OA4$/F0:n$7$^$;$s!#<B:]$N$H$3$m!"$*$=$i$/A4$F$N\e(B
-hilit \e$B%3!<%I$rA4$F$N\e(B Gnus \e$B$N%U%C%/\e(B (@code{gnus-group-prepare-hook} \e$B$H\e(B
-@code{gnus-summary-prepare-hook}) \e$B$+$i<h$j=|$/$Y$-$G$7$g$&!#\e(BGnus \e$B$O%O%$\e(B
-\e$B%i%$%H$N$?$a$N$$$m$$$m$JE}9g$5$l$?4X?t$rDs6!$7$^$9!#$3$l$i$O$b$C$HB.$/$b$C\e(B
-\e$B$H@53N$G$9!#A4$F$N?M$N?M@8$r3Z$K$9$k$?$a$K!"\e(BGnus \e$B$O=i4|@_Dj$GA4$F$N\e(B
-hilit \e$B%U%C%/$+$iA4$F$N\e(B hilit \e$B8F$S=P$7$r<h$j=|$-$^$9!#$-$?$J$$$b$N!*\e(B \e$B$H$s\e(B
-\e$B$G$1!*\e(B
+\e$B8E$$\e(B hilit19 \e$B$N%3!<%I$OA4$/F0:n$7$^$;$s!#<B:]$N$H$3$m!"$*$=$i$/A4$F\e(B
+\e$B$N\e(B hilit \e$B%3!<%I$rA4$F$N\e(B Gnus \e$B$N%U%C\e(B
+\e$B%/\e(B (@code{gnus-group-prepare-hook} \e$B$H\e(B @code{gnus-summary-prepare-hook}) \e$B$+\e(B
+\e$B$i<h$j=|$/$Y$-$G$7$g$&!#\e(BGnus \e$B$O%O%$%i%$%H$N$?$a$N$$$m$$$m$JE}9g$5$l$?4X\e(B
+\e$B?t$rDs6!$7$^$9!#$3$l$i$O$b$C$HB.$/$b$C$H@53N$G$9!#A4$F$N?M$N?M@8$r3Z$K$9\e(B
+\e$B$k$?$a$K!"\e(BGnus \e$B$O=i4|@_Dj$GA4$F$N\e(B hilit \e$B%U%C%/$+$iA4$F$N\e(B hilit \e$B8F$S=P$7\e(B
+\e$B$r<h$j=|$-$^$9!#$-$?$J$$$b$N\e(B! \e$B$H$s$G$1\e(B!
 
 @code{expire-kill} \e$B$N$h$&$J%Q%C%1!<%8$O$b$&F0:n$7$^$;$s!#<B:]!"\e(BGnus \e$B$r;H\e(B
-\e$B$$;O$a$?$H$-$K$O!"$*$=$i$/A4$F$N8E$$\e(B @sc{gnus} \e$B%Q%C%1!<%8\e(B (\e$B$HB>$N%3!<%I\e(B)
-\e$B$r>C5n$9$k$Y$-$G$7$g$&!#\e(B@sc{gnus} \e$B$K<B9T$5$;$k$?$a$K=q$$$?%3!<%I$O!"\e(BGnus
-\e$B$,4{$K<B9T$7$F$$$k$H$$$&;v$ONI$/$"$k;v$G$9!#\e(B (\e$B$/$9$/$9!#\e(B)
+\e$B$$;O$a$?$H$-$K$O!"$*$=$i$/A4$F$N8E$$\e(B @sc{gnus} \e$B%Q%C%1!<%8\e(B (\e$B$HB>$N%3!<\e(B
+\e$B%I\e(B) \e$B$r>C5n$9$k$Y$-$G$7$g$&!#\e(B@sc{gnus} \e$B$K<B9T$5$;$k$?$a$K=q$$$?%3!<%I$O!"\e(B
+Gnus \e$B$,4{$K<B9T$7$F$$$k$H$$$&;v$ONI$/$"$k;v$G$9!#\e(B(\e$B$/$9$/$9!#\e(B)
 
 \e$BJ*;v$r<B9T$9$k8E$$J}K!$O$^$@;HMQ$G$-$^$9$,!"?7$7$$J}K!$@$1$,$3$N%^%K%e%"\e(B
 \e$B%k$K5-:\$5$l$F$$$^$9!#$b$7$3$N%^%K%e%"%k$rFI$s$G$$$k4V$K2?$+$r$9$k?7$7$$\e(B
@@ -17349,15 +18317,14 @@ Gnus \e$B$OA4$F$N\e(B @sc{gnus} \e$B5/F0%U%!%$%k$rM}2r$7$^$9!#\e(B
 @cindex reporting bugs
 @cindex bugs
 \e$BA4BN$H$7$F!"\e(B@sc{gnus} \e$B$NFbIt$K0MB8$7$?%3!<%I$r$[$H$s$I=q$$$F$$$J$$IaDL$N\e(B
-\e$BMxMQ<T$OLdBj$K6l$7$`;v$O$J$$$G$7$g$&!#LdBj$,5/$3$l$P!"KbK!$NL?Na\e(B
-@kbd{M-x gnus-bug} \e$B$r<B9T$9$k;v$K$h$C$F;d$KCN$i$;$F2<$5$$!#\e(B
+\e$BMxMQ<T$OLdBj$K6l$7$`;v$O$J$$$G$7$g$&!#LdBj$,5/$3$l$P!"KbK!$NL?\e(B
+\e$BNa\e(B @kbd{M-x gnus-bug} \e$B$r<B9T$9$k;v$K$h$C$F;d$KCN$i$;$F2<$5$$!#\e(B
 
 @vindex gnus-bug-create-help-buffer
 @emph{\e$BHs>o$K\e(B} \e$B$h$/%P%0Js9p$rAw$kJJ$,$"$k$N$G$"$l$P!"$7$P$i$/$9$k$HLr$KN)\e(B
 \e$B$D\e(B help \e$B%P%C%U%!$,$&$k$5$$$H46$8$k$+$b$7$l$^$;$s!#$=$&$G$"$l$P!"$=$l$,I=\e(B
-\e$B<($5$l$k$N$rHr$1$k$?$a$K!"\e(B@code{gnus-bug-create-help-buffer} \e$B$r\e(B
-@code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
-
+\e$B<($5$l$k$N$rHr$1$k$?$a$K!"\e(B
+@code{gnus-bug-create-help-buffer} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
 
 @node Conformity
 @subsection \e$B0lCW@-\e(B
@@ -17393,17 +18360,17 @@ Gnus \e$B$OA4$F$N\e(B @sc{gnus} \e$B5/F0%U%!%$%k$rM}2r$7$^$9!#\e(B
 
 @item USEFOR
 @cindex USEFOR
-USEFOR \e$B$O!"\e(BIETF \e$B$N\e(B working group \e$B$,\e(B Son-of-RFC 1036 \e$B$K4p$E$$$F!"\e(BRFC 1036
-\e$B$N8e7Q$H$7$F=q$$$F$$$k$b$N$G$9!#%K%e!<%95-;v$NMM<0$KBP$7$F!"$$$m$$$m$JJQ\e(B
-\e$B99$rDs0F$7$?\e(B draft \e$B$r:n@.$7$^$7$?!#\e(BGnus \e$B%?%o!<$O\e(B draft \e$B$,\e(B RFC \e$B$H$7$FG'$a\e(B
-\e$B$i$l$?$H$-$KJQ99$N<BAu$rD4$Y$k$3$H$K$J$k$G$7$g$&!#\e(B
+USEFOR \e$B$O!"\e(BIETF \e$B$N\e(B working group \e$B$,\e(B Son-of-RFC 1036 \e$B$K4p$E$$$F!"\e(B
+RFC 1036 \e$B$N8e7Q$H$7$F=q$$$F$$$k$b$N$G$9!#%K%e!<%95-;v$NMM<0$KBP$7$F!"$$\e(B
+\e$B$m$$$m$JJQ99$rDs0F$7$?\e(B draft \e$B$r:n@.$7$^$7$?!#\e(BGnus \e$B%?%o!<\e(B
+\e$B$O\e(B draft \e$B$,\e(B RFC \e$B$H$7$FG'$a$i$l$?$H$-$KJQ99$N<BAu$rD4$Y$k$3$H$K$J$k$G$7$g\e(B
+\e$B$&!#\e(B
 
 @end table
 
 \e$B>e$K=q$+$l$F$$$kJ8>O$K4X$9$k;v$G!"\e(BGnus \e$B$,$=$l$rK~$?$7$F$$$J$$$h$&$JF0:n\e(B
 \e$B$r$7$F$$$k;v$K5$IU$$$?$i!"$?$a$i$o$:$K\e(B Gnus \e$B%?%o!<$H2f!9$KCN$i$;$F2<$5$$!#\e(B
 
-
 @node Emacsen
 @subsection Emacsen
 @cindex Emacsen
@@ -17416,49 +18383,51 @@ Gnus \e$B$O0J2<$N$b$N$GF0:n$7$^$9\e(B:
 @itemize @bullet
 
 @item
-Emacs 19.32 \e$B$H$=$l0J9_!#\e(B
+Emacs 19.34 \e$B$H$=$l0J>e$N\e(B Mule \e$B5!G=IU$-!#\e(B
 
 @item
-XEmacs 19.14 \e$B$H$=$l0J9_!#\e(B
+XEmacs 21.1.1 \e$B0J>e$N\e(B Mule \e$B5!G=IU$-\e(B
 
 @item
-Emacs 19.32 \e$B$H$=$l0J9_$K4p$E$$$?\e(B Mule\e$B!#\e(B
+Meadow 1.00 \e$B0J>e!#\e(B(Mule for Windows \e$B$G$OF0$-$^$;$s!#\e(B)
 
 @end itemize
 
 \e$B$3$N\e(B Gnus \e$B$NHG$O$3$l$h$j8E$$$I$s$J\e(B Emacsen \e$B$G$b40A4$KF0:n$7$J$$$G$7$g$&!#\e(B
-\e$B>/$J$/$H$b!"?.Mj$G$-$kF0:n$O$7$J$$$G$7$g$&!#8E$$HG$N\e(B gnus \e$B$O8E$$\e(B Emacs
-\e$B$NHG$G$bF0:n$9$k$G$7$g$&!#\e(B
+\e$B>/$J$/$H$b!"?.Mj$G$-$kF0:n$O$7$J$$$G$7$g$&!#8E$$HG$N\e(B gnus \e$B$O8E\e(B
+\e$B$$\e(B Emacs \e$B$NHG$G$bF0:n$9$k$G$7$g$&!#$H$O8@$&$b$N$N!"\e(BT-gnus \e$B$O%P!<%8%g\e(B
+\e$B%s\e(B 21.1.1 \e$BL$K~$N\e(B XEmacs, \e$BNc$($P\e(B 20.4 \e$B$G$b;H$($k$+$b$7$l$^$;$s!#>\$7$$$3\e(B
+\e$B$H$O\e(B T-gnus \e$B$NG[I[$K4^$^$l$F$$$k\e(B README \e$B%U%!%$%k$rFI$s$G2<$5$$!#\e(B
 
 \e$B$$$m$$$m$J%W%i%C%H%U%)!<%`$N\e(B Gnus \e$B$N4V$K$O$$$/$D$+$NGyA3$H$7$?0c$$$,$"$j\e(B
 \e$B$^$9\e(B---XEmacs \e$B$O$b$C$H2hA|5!G=\e(B (\e$B%m%4$H%D!<%k%P!<\e(B) \e$B$rFCD'$K$7$F$$$^$9\e(B--\e$B$7\e(B
 \e$B$+$7!"$=$NB>$O!"A4$F$N\e(B Emacsen \e$B$G$[$H$s$IF1$8$O$:$G$9!#\e(B
 
-
 @node Gnus Development
 @subsection Gnus \e$B$N3+H/\e(B
 
-Gnus \e$B$O\e(B2\e$B$D$NCJ3,$N=[4D$G3+H/$5$l$F$$$^$9!#:G=i$NCJ3,$O\e(B
-@samp{ding@@gnus.org} \e$B$G$N$?$/$5$s$N5DO@$,$"$j!"$=$3$GJQ99$d?7$7$$5!G=$r\e(B
-\e$BDs0F$7$^$9!#$3$NCJ3,$O\e(B @dfn{\e$B%"%k%U%!\e(B} \e$BCJ3,$H8F$P$l$^$9!#$H$$$&$N$O!"$3$N\e(B
-\e$BCJ3,$G%j%j!<%9$5$l$?\e(B Gnusae \e$B$O\e(B @dfn{\e$B%"%k%U%!%j%j!<%9\e(B}\e$B!"$b$7$/$O\e(B (\e$BB>$NCD\e(B
-\e$BBN$G$O$h$jNI$/;H$o$l$k\e(B) @dfn{\e$B%9%J%C%W%7%g%C%H\e(B} \e$B$H8F$P$l$k$b$N$@$+$i$G$9!#\e(B
-\e$B$3$NCJ3,$G$O!"\e(Bgnus \e$B$OIT0BDj$G$"$k$H9M$($i$l$F$*$j!"0lHL$NMxMQ<T$K$h$C$F\e(B
-\e$B;H$o$l$k$b$N$G$O$"$j$^$;$s!#\e(BGnus \e$B%"%k%U%!%j%j!<%9$O\e(B ``Red Gnus'' \e$B$d\e(B
-``Quassia Gnus'' \e$B$N$h$&$JL>A0$K$J$C$F$$$^$9!#\e(B
+Gnus \e$B$OFs$D$NCJ3,$N=[4D$G3+H/$5$l$F$$$^$9!#:G=i$NCJ3,\e(B
+\e$B$O\e(B @samp{ding@@gnus.org} \e$B$G$N$?$/$5$s$N5DO@$,$"$j!"$=$3$GJQ99$d?7$7$$5!\e(B
+\e$BG=$rDs0F$7$^$9!#$3$NCJ3,$O\e(B @dfn{\e$B%"%k%U%!\e(B} \e$BCJ3,$H8F$P$l$^$9!#$H$$$&$N$O!"\e(B
+\e$B$3$NCJ3,$G%j%j!<%9$5$l$?\e(B Gnusae \e$B$O\e(B @dfn{\e$B%"%k%U%!%j%j!<%9\e(B}\e$B!"$b$7$/$O\e(B (\e$BB>\e(B
+\e$B$NCDBN$G$O$h$jNI$/;H$o$l$k\e(B) @dfn{\e$B%9%J%C%W%7%g%C%H\e(B} \e$B$H8F$P$l$k$b$N$@$+$i\e(B
+\e$B$G$9!#$3$NCJ3,$G$O!"\e(Bgnus \e$B$OIT0BDj$G$"$k$H9M$($i$l$F$*$j!"0lHL$NMxMQ<T$K\e(B
+\e$B$h$C$F;H$o$l$k$b$N$G$O$"$j$^$;$s!#\e(BGnus \e$B%"%k%U%!%j%j!<%9\e(B
+\e$B$O\e(B ``Red Gnus'' \e$B$d\e(B ``Quassia Gnus'' \e$B$N$h$&$JL>A0$K$J$C$F$$$^$9!#\e(B
 
 50-100 \e$B$/$i$$$N%j%j!<%9$N8e$G!"\e(BGnus \e$B$O\e(B @dfn{\e$BE`7k\e(B} \e$B$5$l$?$H@k8@$5$l!"%P%0\e(B
-\e$B=$@5$N$_$,E,MQ$5$l$^$9!#\e(BGnus \e$B$O@\F,<-$,<h$l!"$=$NBe$o$j$K\e(B ``Gnus
-5.6.32'' \e$B$N$h$&$K8F$P$l$^$9!#$3$l$iIaDL$N?M$,;H$&$3$H$N$G$-$k$b$N$H9M$(\e(B
-\e$B$i$l!"<g$K\e(B @samp{gnu.emacs.gnus} \e$B%K%e!<%9%0%k!<%W$G5DO@$5$l$F$$$^$9!#\e(B
+\e$B=$@5$N$_$,E,MQ$5$l$^$9!#\e(BGnus \e$B$O@\F,<-$,<h$l!"$=$NBe$o$j\e(B
+\e$B$K\e(B ``Gnus 5.6.32'' \e$B$N$h$&$K8F$P$l$^$9!#$3$l$iIaDL$N?M$,;H$&$3$H$N$G$-$k\e(B
+\e$B$b$N$H9M$($i$l!"<g$K\e(B @samp{gnu.emacs.gnus} \e$B%K%e!<%9%0%k!<%W$G5DO@$5$l$F\e(B
+\e$B$$$^$9!#\e(B
 
 @cindex Incoming*
-@vindex nnmail-delete-incoming
+@vindex mail-source-delete-incoming
 \e$B%"%k%U%!\e(B Gnusae \e$B$H\e(B \e$B%j%j!<%9$5$l$?\e(B Gnusae \e$B$G$OJQ?t$N=i4|CM$,0c$&$b$N$,$"\e(B
-\e$B$j$^$9!#FC$K!"\e(B@code{nnmail-delete-incoming} \e$B$O%"%k%U%!\e(B gnusae \e$B$G$O\e(B
-@code{nil} \e$B$G!"%j%j!<%9$5$l$?\e(B gnusae \e$B$G$O\e(B @code{t} \e$B$G$9!#$3$l$O%a!<%k$r\e(B
-\e$B07$C$F$$$k:]$K!"%"%k%U%!%j%j!<%9$Nsrsw$K$h$j%a!<%k$r<:$J$&$3$H$rHr$1$k$?\e(B
-\e$B$a$G$9!#\e(B
+\e$B$j$^$9!#FC$K!"\e(B@code{mail-source-delete-incoming} \e$B$O%"%k%U%!\e(B Gnusae \e$B$G\e(B
+\e$B$O\e(B @code{nil} \e$B$G!"%j%j!<%9$5$l$?\e(B Gnusae \e$B$G$O\e(B @code{t} \e$B$G$9!#$3$l$O%a!<%k\e(B
+\e$B$r07$C$F$$$k:]$K!"%"%k%U%!%j%j!<%9$Nsrsw$K$h$j%a!<%k$r<:$J$&$3$H$rHr$1$k\e(B
+\e$B$?$a$G$9!#\e(B
 
 ding \e$B%a!<%j%s%0%j%9%H$H\e(B Gnus \e$B%K%e!<%9%0%k!<%W$K$*$1$k5DO@$NJ,N%$O=c?h$K\e(B
 \e$B8x=0$N4X?4$K$h$C$F$J$5$l$F$$$k$o$1$G$O$"$j$^$;$s!#%"%k%U%!\e(B Gnus \e$B%j%j!<%9\e(B
@@ -17470,8 +18439,6 @@ ding \e$B%a!<%j%s%0%j%9%H$H\e(B Gnus \e$B%K%e!<%9%0%k!<%W$K$*$1$k5DO@$NJ,N%$O=c?h$K
 \e$B$k?M$OIaDL$O$3$NB.$$JQ99$KIU$$$F$$$-$^$9$,!"%K%e!<%9%0%k!<%W$N?M$b$=$&$G\e(B
 \e$B$"$k$H$_$J$9$3$H$O$G$-$^$;$s!#\e(B
 
-
-
 @node Contributors
 @subsection \e$B9W8%<T\e(B
 @cindex contributors
@@ -17483,8 +18450,8 @@ ding \e$B%a!<%j%s%0%j%9%H$H\e(B Gnus \e$B%K%e!<%9%0%k!<%W$K$*$1$k5DO@$NJ,N%$O=c?h$K
 \e$BBT$?$:$K$=$l$r$9$0%j%j!<%9$7$h$&\e(B <ship off>\e$B!"$=$l$OA4$/F0:n$7$J$$\e(B <type
 type>\e$B!"$&$s!";d$O$9$0$K=P$=$&\e(B <ship off> \e$B$$$d!"E;$&!"$=$l$OA4$/F0:n$7$J\e(B
 \e$B$$$>\e(B''' \e$B$H$$$&%j%j!<%9$K4X$9$k<g5A$rJQ$($F;n$7$F$-$??M!9$G$9!#\e(B
-Micro$oft---\e$B$"$!!#%"%^%A%e%"!#;d$O\e(B @emph{\e$B$b$C$H\e(B} \e$B0-$$!#\e(B (\e$B$b$7$/$O!"\e(B``\e$B$h\e(B
-\e$B$j0-$$\e(B''\e$B!)\e(B ``\e$B$b$C$H0-$$\e(B''\e$B!)\e(B ``\e$B:G0-\e(B''\e$B!)\e(B)
+Micro$oft---\e$B$"$!!#%"%^%A%e%"!#;d$O\e(B @emph{\e$B$b$C$H\e(B} \e$B0-$$!#\e(B(\e$B$b$7$/$O!"\e(B
+``\e$B$h$j0-$$\e(B''? ``\e$B$b$C$H0-$$\e(B''? ``\e$B:G0-\e(B''?)
 
 \e$B;d$O$3$N5!2q$K$3$N3X2q$K\e(B... \e$B$*$*$C$H!"0c$C$?!#\e(B
 
@@ -17495,9 +18462,8 @@ Micro$oft---\e$B$"$!!#%"%^%A%e%"!#;d$O\e(B @emph{\e$B$b$C$H\e(B} \e$B0-$$!#\e(B (\e$B$b
 
 @item
 Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,
-nnwarchive and many, many other things connected with @sc{mime} and
-other types of en/decoding, as well as general bug fixing, new
-functionality and stuff.
+nnwarchive \e$B$H\e(B @sc{mime} \e$B$HB>$N7A<0$NId9f2=\e(B/\e$BI|9f2=$d%P%0=$@5!"?7$7$$5!G=\e(B
+\e$B$J$I$N$[$s$H$&$KB?$/$N$b$N!#\e(B
 
 @item
 Per Abrahamsen--custom\e$B!"%9%3%"!"%O%$%i%$%H$H\e(B @sc{soup} \e$B%3!<%I\e(B (\e$BB>$NB?$/\e(B
@@ -17507,18 +18473,21 @@ Per Abrahamsen--custom\e$B!"%9%3%"!"%O%$%i%$%H$H\e(B @sc{soup} \e$B%3!<%I\e(B (\e$BB>
 Luis Fernandes---\e$B%G%6%$%s$H%0%i%U%#%C%/!#\e(B
 
 @item
+Justin Sheehy--FAQ \e$B$N%a%$%s%F%$%J!<!#\e(B
+
+@item
 Erik Naggum---\e$B1g=u!"9M$(!"%5%]!<%H!"%3!<%I$H$=$NB>!#\e(B
 
 @item
-Wes Hardaker---@file{gnus-picon.el} \e$B$H\e(B @dfn{picon} \e$B$NItJ,$N%^%K%e%"%k\e(B
-(@pxref{Picons})\e$B!#\e(B
+Wes Hardaker---@file{gnus-picon.el} \e$B$H\e(B @dfn{picon} \e$B$NItJ,$N%^%K%e%"\e(B
+\e$B%k\e(B (@pxref{Picons})\e$B!#\e(B
 
 @item
 Kim-Minh Kaplan---picon \e$B%3!<%I$KCV$1$k99$J$k:n6H!#\e(B
 
 @item
-Brad Miller---@file{gnus-gl.el} \e$B$H\e(B Grouplens \e$B$NItJ,$N%^%K%e%"%k\e(B
-(@pxref{GroupLens})\e$B!#\e(B
+Brad Miller---@file{gnus-gl.el} \e$B$H\e(B Grouplens \e$B$NItJ,$N%^%K%e%"\e(B
+\e$B%k\e(B (@pxref{GroupLens})\e$B!#\e(B
 
 @item
 Sudish Joseph---\e$B?t$(@Z$l$J$$$[$I$N%P%0$N=$@5!#\e(B
@@ -17560,12 +18529,12 @@ Kevin Davidson---@dfn{ding} \e$B$NL>A0$r;W$$IU$-$^$7$?!#$G$9$+$i!"H`$r@U$a$F\e(B
 \e$B2<$5$$!#\e(B
 
 @item
-François Pinard---\e$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H\e(B autoconf \e$B$N\e(B
+Fran\e.A\eNgois Pinard---\e$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H\e(B autoconf \e$B$N\e(B
 \e$B%5%]!<%H!#\e(B
 
 @end itemize
 
-\e$B$3$N%^%K%e%"%k\e(B (Gnus \e$B1Q8lHG\e(B) \e$B$O\e(B Adrian Aichner \e$B$H\e(B Ricardo Nassif\e$B!"\e(BMark
+\e$B$3$N%^%K%e%"%k\e(B (Gnus \e$B1Q8lHG\e(B) \e$B$O\e(B Adrian Aichner \e$B$H\e(B Ricardo Nassif, Mark
 Borges \e$B$K$h$C$F9;@5$5$l!"\e(BJost Krieger \e$B$K$h$C$F0lItJ,$r9;@5$5$l$^$7$?!#\e(B
 
 \e$B0J2<$N?M!9$OB?$/$N%Q%C%A$HDs0F$G9W8%$7$^$7$?\e(B:
@@ -17573,7 +18542,7 @@ Borges \e$B$K$h$C$F9;@5$5$l!"\e(BJost Krieger \e$B$K$h$C$F0lItJ,$r9;@5$5$l$^$7$?!#\e
 Christopher Davis,
 Andrew Eskilsson,
 Kai Grossjohann,
-David Kågedal,
+David K\e.A\eNegedal,
 Richard Pieri,
 Fabrice Popineau,
 Daniel Quinlan,
@@ -17659,7 +18628,7 @@ Gunnar Horrigmo,
 Richard Hoskins,
 Brad Howes,
 Miguel de Icaza,
-François Felix Ingrand,
+Fran\e.A\eNgois Felix Ingrand,
 Tatsuya Ichikawa, @c ?
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson,
@@ -17787,26 +18756,24 @@ Lloyd Zusman.
 \e$B$&!#\e(B
 
 \e$B$o$!!"$3$l$O$J$s$H$bB?$$?M$N%j%9%H$@$J$!!#$*$=$i$/<B:]$K\e(B Gnus \e$BF~$k$H$$$&\e(B
-\e$B;v$K0c$$$J$$$G$7$g$&!#$=$l$KC/$,46<U$7$?$G$7$g$&!*\e(B
-
+\e$B;v$K0c$$$J$$$G$7$g$&!#$=$l$KC/$,46<U$7$?$G$7$g$&\e(B!
 
 @node New Features
 @subsection \e$B?7$7$$5!G=\e(B
 @cindex new features
 
 @menu
-* ding Gnus::          \e$B:G=i$N?7$7$$\e(B Gnus \e$B$G$"$k\e(B Gnus 5.0/5.1 \e$B$N?7$7$$;v!#\e(B
-* September Gnus::     \e$B8x<0$K\e(B GNus 5.2/5.3 \e$B$H$7$FCN$i$l$F$$$k$b$N!#\e(B
-* Red Gnus::           3\e$BHVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
-* Quassia Gnus::       2\e$B$+$1$k\e(B2\e$B$O\e(B4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7\e$B!#\e(B
+* ding Gnus::      \e$B:G=i$N?7$7$$\e(B Gnus \e$B$G$"$k\e(B Gnus 5.0/5.1 \e$B$N?7$7$$;v\e(B
+* September Gnus:: \e$B8x<0$K\e(B GNus 5.2/5.3 \e$B$H$7$FCN$i$l$F$$$k$b$N\e(B
+* Red Gnus::       3 \e$BHVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
+* Quassia Gnus::   2 \e$B$+$1$k\e(B 2 \e$B$O\e(B 4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7
 @end menu
 
-\e$B$3$N%j%9%H$O!"$b$A$m$s!"\e(B@emph{\e$B$?$$$F$$$N\e(B} \e$B=EMW$J?7$7$$5!G=$K4X$9$k\e(B
-@emph{\e$BC;$$\e(B}\e$B354Q$G$7$+$"$j$^$;$s!#$$$$$(!"K\Ev$O$=$&$G$O$"$j$^$;$s!#$b$C\e(B
+\e$B$3$N%j%9%H$O!"$b$A$m$s!"\e(B@emph{\e$B$?$$$F$$$N\e(B} \e$B=EMW$J?7$7$$5!G=$K4X$9\e(B
+\e$B$k\e(B @emph{\e$BC;$$\e(B}\e$B354Q$G$7$+$"$j$^$;$s!#$$$$$(!"K\Ev$O$=$&$G$O$"$j$^$;$s!#$b$C\e(B
 \e$B$H$b$C$H$?$/$5$s$N$b$N$,$"$j$^$9!#$O$$!"2f!9$OAOB$@-$N40A4$J8z2L$r46$8$F\e(B
 \e$B$$$k$N$G$9!#\e(B
 
-
 @node ding Gnus
 @subsubsection (ding) Gnus
 
@@ -17829,14 +18796,14 @@ Groups})\e$B!#\e(B
 
 @item
 \e$BB?$/$N0c$C$?%a!<%kMM<0\e(B (@pxref{Getting Mail}) \e$B$rFI$a$k$h$&$K$J$j$^$7$?!#\e(B
-\e$BA4$F$N%a!<%k%P%C%/%(%s%I$OJXMx$J%a!<%k4|8B@Z$l>C5n5!9=$r<BAu$7$F$$$^$9\e(B
-(@pxref{Expiring Mail})\e$B!#\e(B
+\e$BA4$F$N%a!<%k%P%C%/%(%s%I$OJXMx$J%a!<%k4|8B@Z$l>C5n5!9=$r<BAu$7$F$$$^\e(B
+\e$B$9\e(B (@pxref{Expiring Mail})\e$B!#\e(B
 
 @item
 Gnus \e$B$O:,$C$3\e(B (root) \e$B$r<:$C$?%9%l%C%I$r=8$a$k$?$a$N$$$m$$$m$J@oN,\e(B (\e$B$=$l\e(B
 \e$B$K$h$C$F$^$P$i$JI{%9%l%C%I$r0l$D$N%9%l%C%I$K$9$k\e(B) \e$B$r;H$C$?$j!"0lC6La$C$F\e(B
-\e$B40A4$J%9%l%C%I$r$/$_>e$2$k$N$K==J,$J%X%C%@!<$r<hF@$7$9$k;v$,$G$-$^$9\e(B
-(@pxref{Customizing Threading})\e$B!#\e(B
+\e$B40A4$J%9%l%C%I$r$/$_>e$2$k$N$K==J,$J%X%C%@!<$r<hF@$7$9$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Customizing Threading})\e$B!#\e(B
 
 @item
 \e$B@Z$i$l$?%0%k!<%W\e(B (killed group) \e$B$O$0%k!<%W%P%C%U%!$KI=<($9$k;v$,$G$-$F!"\e(B
@@ -17844,8 +18811,8 @@ Gnus \e$B$O:,$C$3\e(B (root) \e$B$r<:$C$?%9%l%C%I$r=8$a$k$?$a$N$$$m$$$m$J@oN,\e(B (\e
 
 @item
 Gnus \e$B$OItJ,E*%0%k!<%W99?7$r$9$k;v$,$G$-$^$9\e(B---2,3 \e$B$N%0%k!<%W$N?7$7$$5-;v\e(B
-\e$B$rD4$Y$k$?$a$K%"%/%F%#%V%U%!%$%kA4BN$r<hF@$9$kI,MW$O$"$j$^$;$s\e(B
-(@pxref{The Active File})\e$B!#\e(B
+\e$B$rD4$Y$k$?$a$K%"%/%F%#%V%U%!%$%kA4BN$r<hF@$9$kI,MW$O$"$j$^$;\e(B
+\e$B$s\e(B (@pxref{The Active File})\e$B!#\e(B
 
 @item
 Gnus \e$B$O%0%k!<%W$NCJ3,E*9XFIEY$r<BAu$7$^$7$?\e(B (@pxref{Group Levels})\e$B!#\e(B
@@ -17857,8 +18824,8 @@ Gnus \e$B$O%0%k!<%W$NCJ3,E*9XFIEY$r<BAu$7$^$7$?\e(B (@pxref{Group Levels})\e$B!#\e(B
 
 @item
 Gnus \e$B$OIaDL$N\e(B Emacs \e$B$NJ}K!$G<+F0J]B8$5$l$k%I%j%V%k%P%C%U%!$rJ];}$7$F$$$^\e(B
-\e$B$9$N$G!"$"$J$?$N%^%7%s$,Mn$C$3$A$?$H$-$G$b$"$^$j%G!<%?$r<:$o$J$$$G$7$g$&\e(B
-(@pxref{Auto Save})\e$B!#\e(B
+\e$B$9$N$G!"$"$J$?$N%^%7%s$,Mn$C$3$A$?$H$-$G$b$"$^$j%G!<%?$r<:$o$J$$$G$7$g\e(B
+\e$B$&\e(B (@pxref{Auto Save})\e$B!#\e(B
 
 @item
 Gnus \e$B$O:#$d%U%!%$%k\e(B @file{.emacs} \e$B$r$0$A$c$0$A$c$K$9$k;v$rHr$1$k$?$a$K@l\e(B
@@ -17869,20 +18836,20 @@ Gnus \e$B$O:#$d%U%!%$%k\e(B @file{.emacs} \e$B$r$0$A$c$0$A$c$K$9$k;v$rHr$1$k$?$a$K@
 \e$B$K1i;;$r$9$k;v$,$G$-$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
 @item
-\e$B%0%k!<%W$N0lIt$r\e(B grep \e$B$7$F!"$=$N7k2L$+$i%0%k!<%W$r:n$k;v$,$G$-$^$9\e(B
-(@pxref{Kibozed Groups})\e$B!#\e(B
+\e$B%0%k!<%W$N0lIt$r\e(B grep \e$B$7$F!"$=$N7k2L$+$i%0%k!<%W$r:n$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Kibozed Groups})\e$B!#\e(B
 
 @item
-\e$B$(!<$H!"A4$F$K$7$?$,$C$F!"%0%k!<%W$N0lMw$r5s$2$k;v$,$G$-$^$9\e(B
-(@pxref{Listing Groups})\e$B!#\e(B
+\e$B$(!<$H!"A4$F$K$7$?$,$C$F!"%0%k!<%W$N0lMw$r5s$2$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Listing Groups})\e$B!#\e(B
 
 @item
-\e$B30It%5!<%P!<$r354Q$7$F!"$=$l$i$N%5!<%P!<$N%0%k!<%W$r9XFI$9$k;v$,$G$-$^$9\e(B
-(@pxref{Browse Foreign Server})\e$B!#\e(B
+\e$B30It%5!<%P!<$r354Q$7$F!"$=$l$i$N%5!<%P!<$N%0%k!<%W$r9XFI$9$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Browse Foreign Server})\e$B!#\e(B
 
 @item
-Gnus \e$B$O%5!<%P!<$H$N\e(B2\e$B$D@\B3$G!"5-;v$rHsF14|$K$H$C$F$/$k;v$,$G$-$^$9\e(B
-(@pxref{Asynchronous Fetching})\e$B!#\e(B
+Gnus \e$B$O%5!<%P!<$H$NFs$D@\B3$G!"5-;v$rHsF14|$K$H$C$F$/$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Asynchronous Fetching})\e$B!#\e(B
 
 @item
 \e$B5-;v$r%m!<%+%k$K%-%c%C%7%e$9$k;v$,$G$-$^$9\e(B (@pxref{Article Caching})\e$B!#\e(B
@@ -17915,12 +18882,11 @@ Gnus \e$B$N%&%#%s%I%&$H%U%l!<%`$N@_Dj$G$?$/$5$s$NJQ$J;v$r$G$-$k$h$&$K$J$j$^\e(B
 \e$B$7$?\e(B (@pxref{Windows Configuration})\e$B!#\e(B
 
 @item
-\e$B%-!<%\!<%I$r;H$&Be$o$j$K!"%\%?%s$r%/%j%C%/$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Buttons})\e$B!#\e(B
+\e$B%-!<%\!<%I$r;H$&Be$o$j$K!"%\%?%s$r%/%j%C%/$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Buttons})\e$B!#\e(B
 
 @end itemize
 
-
 @node September Gnus
 @subsubsection September Gnus
 
@@ -17935,29 +18901,29 @@ Gnus 5.2/5.3 \e$B$N?7$7$$5!G=\e(B:
 @itemize @bullet
 
 @item
-\e$B?7$7$$%a%C%;!<%8:n@.%b!<%I$,;H$o$l$^$9!#\e(B@code{mail-mode}\e$B!"\e(B
-@code{rnews-reply-mode} \e$B$H\e(B @code{gnus-msg} \e$B$NA4$F$N8E$$%+%9%?%^%$%:JQ?t\e(B
-\e$B$O:#$d5l<0$K$J$j$^$7$?!#\e(B
+\e$B?7$7$$%a%C%;!<%8:n@.%b!<%I$,;H$o$l$^$9!#\e(B
+@code{mail-mode}, @code{rnews-reply-mode} \e$B$H\e(B @code{gnus-msg} \e$B$NA4$F$N8E\e(B
+\e$B$$%+%9%?%^%$%:JQ?t$O:#$d5l<0$K$J$j$^$7$?!#\e(B
 
 @item
 Gnus \e$B$O\e(B @dfn{\e$B$^$P$i\e(B} \e$B%9%l%C%I$r:n@.$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B---\e$B%9%l%C\e(B
-\e$B%I$N<:$o$l$?5-;v$,$"$k$H$3$m$O6u$N@a$GI=8=$5$l$k$h$&$K$J$C$F$$$^$9\e(B
-(@pxref{Customizing Threading})\e$B!#\e(B
+\e$B%I$N<:$o$l$?5-;v$,$"$k$H$3$m$O6u$N@a$GI=8=$5$l$k$h$&$K$J$C$F$$$^\e(B
+\e$B$9\e(B (@pxref{Customizing Threading})\e$B!#\e(B
 
 @lisp
 (setq gnus-build-sparse-threads 'some)
 @end lisp
 
 @item
-\e$B30$K=P$F$$$/5-;v$OFCJL$JJ]4I%5!<%P!<$KJ]B8$5$l$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Archived Messages})\e$B!#\e(B
+\e$B30$K=P$F$$$/5-;v$OFCJL$JJ]4I%5!<%P!<$KJ]B8$5$l$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Archived Messages})\e$B!#\e(B
 
 @item
 \e$B5-;v$,;2>H$5$l$?$H$-$K!"%9%l%C%I$NItJ,:n@.$,5/$3$k$h$&$K$J$j$^$7$?!#\e(B
 
 @item
-Gnus \e$B$O\e(B GroupLens \e$B$NM=8@$r;H$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{GroupLens})\e$B!#\e(B
+Gnus \e$B$O\e(B GroupLens \e$B$NM=8@$r;H$&;v$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{GroupLens})\e$B!#\e(B
 
 @item
 Picons (personal icons) (\e$B8D?M%"%$%3%s\e(B) \e$B$,\e(B XEmacs \e$B$GI=<($G$-$k$h$&$K$J$j\e(B
@@ -17984,8 +18950,8 @@ Display})\e$B!#\e(B
 \e$B$J$j$^$7$?\e(B (@pxref{Binary Groups})\e$B!#\e(B
 
 @item
-Group \e$B$,@^$j>v$_%H%T%C%/3,AX$K%0%k!<%WJ,$1$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Group Topics})\e$B!#\e(B
+Group \e$B$,@^$j>v$_%H%T%C%/3,AX$K%0%k!<%WJ,$1$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Group Topics})\e$B!#\e(B
 
 @lisp
 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
@@ -17996,43 +18962,43 @@ Gnus \e$B$,<:GT%a!<%k$r:FAw$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Summary Mail
 Commands})\e$B!#\e(B
 
 @item
-\e$B%0%k!<%W$,%9%3%"$r;}$D;v$,$G$-$k$h$&$K$J$j!"K,$l$k2s?t$K4p$E$$$FJB$SBX$($r\e(B
-\e$B$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Group Score})\e$B!#\e(B
+\e$B%0%k!<%W$,%9%3%"$r;}$D;v$,$G$-$k$h$&$K$J$j!"K,$l$k2s?t$K4p$E$$$FJB$SBX$(\e(B
+\e$B$r$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Group Score})\e$B!#\e(B
 
 @lisp
 (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
 @end lisp
 
 @item
-\e$B%0%k!<%W$K%W%m%;%90u$rIU$1$i$l$k$h$&$K$J$j!"%0%k!<%W$N$0%k!<%W$KL?Na$,<B9T\e(B
-\e$B$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Marking Groups})\e$B!#\e(B
+\e$B%0%k!<%W$K%W%m%;%90u$rIU$1$i$l$k$h$&$K$J$j!"%0%k!<%W$N$0%k!<%W$KL?Na$,<B\e(B
+\e$B9T$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Marking Groups})\e$B!#\e(B
 
 @item
 \e$B;v<B>e$N%0%k!<%W$G%-%c%C%7%e$,$G$-$k$h$&$K$J$j$^$7$?!#\e(B
 
 @item
 @code{nndoc} \e$B$OA4$F$N=8G[G[Aw!"%a!<%k%\%C%/%9!"\e(Brnews \e$B%K%e!<%90l3g!"\e(B
-ClariNet \e$BC;<}=8!"$=$7$FA4$F$N$=$NB>$rM}2r$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Document Groups})\e$B!#\e(B
+ClariNet \e$BC;<}=8!"$=$7$FA4$F$N$=$NB>$rM}2r$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Document Groups})\e$B!#\e(B
 
 @item
-Gnus \e$B$O\e(B SOUP \e$B%Q%1%C%H$r:n@.\e(B/\e$BFI$_9~$_$r$9$k$?$a$N?7$7$$%P%C%/%(%s%I\e(B
-(@code{nnsoup}) \e$B$r;}$C$F$$$^$9!#\e(B
+Gnus \e$B$O\e(B SOUP \e$B%Q%1%C%H$r:n@.\e(B/\e$BFI$_9~$_$r$9$k$?$a$N?7$7$$%P%C%/%(%s\e(B
+\e$B%I\e(B (@code{nnsoup}) \e$B$r;}$C$F$$$^$9!#\e(B
 
 @item
 Gnus \e$B%-%c%C%7%e$,$:$C$HB.$/$J$j$^$7$?!#\e(B
 
 @item
-\e$B%0%k!<%W$rB?$/$N4p=`$K=>$C$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Sorting Groups})\e$B!#\e(B
+\e$B%0%k!<%W$rB?$/$N4p=`$K=>$C$FJB$SBX$($G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Sorting Groups})\e$B!#\e(B
 
 @item
 \e$B%"%I%l%9$N%j%9%H$H4|8B@Z$l>C5n$N;~4V$r@_Dj$9$k?7$7$$%0%k!<%W%Q%i%a!<%?$,\e(B
 \e$BF3F~$5$l$^$7$?\e(B (@pxref{Group Parameters})\e$B!#\e(B
 
 @item
-\e$BA4$F$N%U%)!<%^%C%H;XDj$,;H$o$l$k%U%'%$%9$r;XDj$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Formatting Fonts})\e$B!#\e(B
+\e$BA4$F$N%U%)!<%^%C%H;XDj$,;H$o$l$k%U%'%$%9$r;XDj$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Formatting Fonts})\e$B!#\e(B
 
 @item
 @kbd{M P} \e$BI{%^%C%W$K%W%m%;%90u$NIU$$$?5-;v$N@_Dj\e(B/\e$B:o=|\e(B/\e$B<B9T$N$?$a$N$$$/$D\e(B
@@ -18044,8 +19010,8 @@ Gnus \e$B%-%c%C%7%e$,$:$C$HB.$/$J$j$^$7$?!#\e(B
 \e$B$F$$$^$9\e(B (@pxref{Limiting})\e$B!#\e(B
 
 @item
-@kbd{*} \e$BL?Na$K$h$C$F!"5-;v$r1JB3$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Persistent Articles})\e$B!#\e(B
+@kbd{*} \e$BL?Na$K$h$C$F!"5-;v$r1JB3$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Persistent Articles})\e$B!#\e(B
 
 @item
 \e$B5-;v$NMWAG$r1#$9A4$F$N4X?t$O@Z$jBX$(4X?t$K$J$j$^$7$?!#\e(B
@@ -18062,16 +19028,16 @@ Washing})\e$B!#\e(B
 \e$B=EJ#%a!<%k$rE,@Z$K07$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Duplicates})\e$B!#\e(B
 
 @item
-\e$BA4$F$N35N,%b!<%IL?Na$,5-;v%P%C%U%!$+$iD>@\;HMQ$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Article Keymap})\e$B!#\e(B
+\e$BA4$F$N35N,%b!<%IL?Na$,5-;v%P%C%U%!$+$iD>@\;HMQ$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Article Keymap})\e$B!#\e(B
 
 @item
-\e$B%U%l!<%`$,\e(B @code{gnus-buffer-configuration} \e$B$NItJ,$K$J$k;v$,$G$-$^$9\e(B
-(@pxref{Windows Configuration})\e$B!#\e(B
+\e$B%U%l!<%`$,\e(B @code{gnus-buffer-configuration} \e$B$NItJ,$K$J$k;v$,$G$-$^\e(B
+\e$B$9\e(B (@pxref{Windows Configuration})\e$B!#\e(B
 
 @item
-\e$B%G!<%b%s$N%W%m%;%9$G%a!<%k$r:FAv::$9$k$3$H$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Daemons})\e$B!#\e(B
+\e$B%G!<%b%s$N%W%m%;%9$G%a!<%k$r:FAv::$9$k$3$H$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Daemons})\e$B!#\e(B
 @iftex
 @iflatex
 \marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}}
@@ -18126,8 +19092,8 @@ Gnus \e$B$,$I$3$K5-;v$rJ]B8$9$k$+$rDs0F$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Saving
 Articles})\e$B!#\e(B
 
 @item
-Gnus \e$B$OJ]B8$9$k$H$-$KF1$8$/$i$$$NB%?J$r$7$J$/$F$bNI$$$h$&$K$J$j$^$7$?\e(B
-(@pxref{Saving Articles})\e$B!#\e(B
+Gnus \e$B$OJ]B8$9$k$H$-$KF1$8$/$i$$$NB%?J$r$7$J$/$F$bNI$$$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Saving Articles})\e$B!#\e(B
 
 @lisp
 (setq gnus-prompt-before-saving t)
@@ -18164,7 +19130,6 @@ Gnus \e$B$OJ]B8$9$k$H$-$KF1$8$/$i$$$NB%?J$r$7$J$/$F$bNI$$$h$&$K$J$j$^$7$?\e(B
 
 @end itemize
 
-
 @node Red Gnus
 @subsubsection Red Gnus
 
@@ -18182,35 +19147,35 @@ Gnus 5.4/5.5 \e$B$N?7$7$$5!G=\e(B:
 @file{nntp.el} \e$B$OHsF14|$NN.57$G40A4$K2~D{$5$l$^$7$?!#\e(B
 
 @item
-\e$B%9%3%"IU$1$O\e(B @code{and}\e$B!"\e(B@code{or}\e$B!"\e(B@code{not} \e$B$N$h$&$JO@M}1i;;;R$H!"?F\e(B
+\e$B%9%3%"IU$1$O\e(B @code{and}, @code{or}, @code{not} \e$B$N$h$&$JO@M}1i;;;R$H!"?F\e(B
 \e$B$N:FJ}8~$G<B9T$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Advanced Scoring})\e$B!#\e(B
 
 @item
-\e$B5-;v$N@vBu>uBV$,5-;v%b!<%I9T$KI=<($5$l$k$h$&$K$J$j$^$7$?\e(B (@pxref{Misc
-Article})\e$B!#\e(B
+\e$B5-;v$N@vBu>uBV$,5-;v%b!<%I9T$KI=<($5$l$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Misc Article})\e$B!#\e(B
 
 @item
 @file{gnus.el} \e$B$,B?$/$N>.$5$$%U%!%$%k$KJ,3d$5$l$^$7$?!#\e(B
 
 @item
-Message-ID \e$B$K4p$E$$$?!"=EJ#5-;v$NM^@)$,$J$5$l$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Duplicate Suppression})\e$B!#\e(B
+Message-ID \e$B$K4p$E$$$?!"=EJ#5-;v$NM^@)$,$J$5$l$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Duplicate Suppression})\e$B!#\e(B
 
 @lisp
 (setq gnus-suppress-duplicates t)
 @end lisp
 
 @item
-\e$B$I$N%9%3%"$HE,1~%U%!%$%k$,%[!<%`$N%9%3%"$HE,1~%U%!%$%k$G$"$k$+$r;XDj$9$k\e(B
-(@pxref{Home Score File}) \e$B?7$7$$JQ?t$,2C$($i$l$^$7$?!#\e(B
+\e$B$I$N%9%3%"$HE,1~%U%!%$%k$,%[!<%`$N%9%3%"$HE,1~%U%!%$%k$G$"$k$+$r;XDj$9\e(B
+\e$B$k\e(B (@pxref{Home Score File}) \e$B?7$7$$JQ?t$,2C$($i$l$^$7$?!#\e(B
 
 @item
-@code{nndoc} \e$B$,4JC1$K3HD%2DG=$K$J$k$h$&$K2~D{$5$l$^$7$?\e(B (@pxref{Document
-Server Internals})\e$B!#\e(B
+@code{nndoc} \e$B$,4JC1$K3HD%2DG=$K$J$k$h$&$K2~D{$5$l$^$7\e(B
+\e$B$?\e(B (@pxref{Document Server Internals})\e$B!#\e(B
 
 @item
-\e$B%0%k!<%W$O?F$N%H%T%C%/$+$i%0%k!<%W%Q%i%a!<%?$r7Q>5$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Topic Parameters})\e$B!#\e(B
+\e$B%0%k!<%W$O?F$N%H%T%C%/$+$i%0%k!<%W%Q%i%a!<%?$r7Q>5$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Topic Parameters})\e$B!#\e(B
 
 @item
 \e$B5-;vJT=8$,2~D{$5$l!"<B:]$K;HMQ2DG=$K$J$j$^$7$?!#\e(B
@@ -18221,8 +19186,8 @@ Signature})\e$B!#\e(B
 
 @item
 \e$B35N,%T%C%/%b!<%I$,$b$C$H\e(B @code{nn} \e$B$N$h$&$K$J$j$^$7$?!#9T?t$,I=<($5$l$F!"\e(B
-\e$BL?Na\e(B @kbd{.} \e$B$,5-;v$r<h$k$?$a$K;H$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@code{Pick and Read})\e$B!#\e(B
+\e$BL?Na\e(B @kbd{.} \e$B$,5-;v$r<h$k$?$a$K;H$&;v$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@code{Pick and Read})\e$B!#\e(B
 
 @item
 \e$B$"$k%5!<%P!<$+$iJL$N%5!<%P!<$X\e(B @file{.newsrc.eld} \e$B$r0\F0$9$kL?Na$,2C$($i\e(B
@@ -18241,8 +19206,8 @@ Signature})\e$B!#\e(B
 \e$B$^$7$?\e(B (@pxref{Score File Format})\e$B!#\e(B
 
 @item
-\e$BI=Bj$K\e(B1\e$B8l\e(B1\e$B8l$r4p$K$7$FE,1~%9%3%"$r$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Adaptive Scoring})\e$B!#\e(B
+\e$BI=Bj$K0l8l0l8l$r4p$K$7$FE,1~%9%3%"$r$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Adaptive Scoring})\e$B!#\e(B
 
 @lisp
 (setq gnus-use-adaptive-scoring '(word))
@@ -18260,8 +19225,8 @@ Signature})\e$B!#\e(B
 \e$BF|IU$O$^$:C;=L\e(B ISO 8601 \e$BMM<0$G@55,2=$5$l$^$9\e(B (@pxref{Score File Format})\e$B!#\e(B
 
 @item
-\e$B4pK\%5!<%P!<$N5-;v$K4X$9$kA4$F$N%G!<%?$r<h$j=|$/L?Na$,2C$($i$l$^$7$?\e(B
-(@pxref{Changing Servers})\e$B!#\e(B
+\e$B4pK\%5!<%P!<$N5-;v$K4X$9$kA4$F$N%G!<%?$r<h$j=|$/L?Na$,2C$($i$l$^$7\e(B
+\e$B$?\e(B (@pxref{Changing Servers})\e$B!#\e(B
 
 @item
 \e$BJ8=q$N=89g$rFI$`$?$a$N?7$7$$L?Na\e(B (@code{nndoc} \e$B$H\e(B @code{nnvirtual} \e$B$N>e\e(B
@@ -18274,26 +19239,26 @@ Process Marks})\e$B!#\e(B
 
 @item
 \e$B?7$7$$%a!<%k$+$i%K%e!<%9$X$N%P%C%/%(%s%I$,\e(B @sc{nntp} \e$B%5!<%P!<$,Ej9F$r\e(B
-\e$B5v2D$7$F$$$J$$>l9g$G$b!"Ej9F$G$-$k$h$&$K$J$j$^$7$?\e(B 
-(@pxref{Mail-To-News Gateways})\e$B!#\e(B
+\e$B5v2D$7$F$$$J$$>l9g$G$b!"Ej9F$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Mail-To-News Gateways})\e$B!#\e(B
 
 @item
-\e$B%&%'%V8!:w%(%s%8%s\e(B (@dfn{DejaNews}\e$B!"\e(B@dfn{Alta Vista}\e$B!"\e(B@dfn{InReference})
-\e$B$+$i$N8!:w7k2L$rFI$`?7$7$$%P%C%/%(%s%I$,2C$($i$l$^$7$?\e(B (@pxref{Web
-Searches})\e$B!#\e(B
+\e$B%&%'%V8!:w%(%s%8\e(B
+\e$B%s\e(B (@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) \e$B$+$i$N8!:w7k2L\e(B
+\e$B$rFI$`?7$7$$%P%C%/%(%s%I$,2C$($i$l$^$7$?\e(B (@pxref{Web Searches})\e$B!#\e(B
 
 @item
 \e$BI8=`$NJB$SBX$(4X?t$r;H$C$F%0%k!<%W$NCf$N%H%T%C%/$rJB$SBe$($9$k;v$,$G$-!"\e(B
-\e$B$=$l$>$l$N%H%T%C%/$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Topic
-Sorting})\e$B!#\e(B
+\e$B$=$l$>$l$N%H%T%C%/$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Topic Sorting})\e$B!#\e(B
 
 @item
-\e$B%0%k!<%W$N0lItJ,$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B
-(@code{Sorting})\e$B!#\e(B
+\e$B%0%k!<%W$N0lItJ,$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@code{Sorting})\e$B!#\e(B
 
 @item
-\e$B%-%c%C%7%e$5$l$?5-;v$,%0%k!<%W$KF~$l$i$l$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Summary Generation Commands})\e$B!#\e(B
+\e$B%-%c%C%7%e$5$l$?5-;v$,%0%k!<%W$KF~$l$i$l$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Summary Generation Commands})\e$B!#\e(B
 @iftex
 @iflatex
 \marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}}
@@ -18301,12 +19266,12 @@ Sorting})\e$B!#\e(B
 @end iftex
 
 @item
-\e$B%9%3%"%U%!%$%k$,$b$C$H?.Mj$G$-$k=gHV$GE,MQ$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Score Variables})\e$B!#\e(B
+\e$B%9%3%"%U%!%$%k$,$b$C$H?.Mj$G$-$k=gHV$GE,MQ$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Score Variables})\e$B!#\e(B
 
 @item
-\e$B%a!<%k%a%C%;!<%8$,$I$3$K9T$/$+$NJs9p$r:n@.$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B
-(@pxref{Splitting Mail})\e$B!#\e(B
+\e$B%a!<%k%a%C%;!<%8$,$I$3$K9T$/$+$NJs9p$r:n@.$9$k;v$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?\e(B (@pxref{Splitting Mail})\e$B!#\e(B
 
 @item
 \e$BF~$C$FMh$?%a!<%k$rJ]B8$9$kA0$K$,$i$/$?$r<h$j=|$/%U%C%/$H4X?t$,$b$C$HDI2C\e(B
@@ -18317,7 +19282,6 @@ Sorting})\e$B!#\e(B
 
 @end itemize
 
-
 @node Quassia Gnus
 @subsubsection Quassia Gnus
 
@@ -18327,8 +19291,8 @@ Gnus 5.6 \e$B$N?7$7$$5!G=\e(B:
 
 @item
 Gnus \e$B$r%*%U%i%$%s%K%e!<%9%j!<%@!<$H$7$F;H$&?75!G=$,2C$($i$l$^$7$?!#2a>j\e(B
-\e$B$J$[$I$N?7$7$$L?Na$H%b!<%I$,DI2C$5$l$^$7$?!#40A4$JOC$KIU$$$F$O\e(B
-@pxref{Gnus Unplugged} \e$B$r8+$F2<$5$$!#\e(B
+\e$B$J$[$I$N?7$7$$L?Na$H%b!<%I$,DI2C$5$l$^$7$?!#40A4$JOC$KIU$$$F\e(B
+\e$B$O\e(B @pxref{Gnus Unplugged} \e$B$r8+$F2<$5$$!#\e(B
 
 @item
 @code{nndraft} \e$B%P%C%/%(%s%I$,La$C$F$-$^$7$?$,!"0MA3$H$O0c$&$h$&$KF0:n$9\e(B
@@ -18393,21 +19357,21 @@ Gnus \e$B$r%*%U%i%$%s%K%e!<%9%j!<%@!<$H$7$F;H$&?75!G=$,2C$($i$l$^$7$?!#2a>j\e(B
 \e$B$K=q$-D>$5$J$1$l$P$J$j$^$;$s!#\e(B
 
 @item
-\e$BEj9F<h$j>C$7$O8=:_$NA*BrJ}K!$r;H$&$h$&$K$J$j$^$7$?!#%7%s%\%k@\F,<-\e(B
-@kbd{a} \e$B$OIaDL$NEj9FJ}K!$r6/@)$7$^$9!#\e(B
+\e$BEj9F<h$j>C$7$O8=:_$NA*BrJ}K!$r;H$&$h$&$K$J$j$^$7$?!#%7%s%\%k@\F,\e(B
+\e$B<-\e(B @kbd{a} \e$B$OIaDL$NEj9FJ}K!$r6/@)$7$^$9!#\e(B
 
 @item
 M******** sm*rtq**t*s \e$B$rE,@Z$JJ8>O$KK]0F$9$k?7$7$$L?Na$,$"$j$^$9\e(B---
 @kbd{W d}\e$B!#\e(B
 
 @item
-@code{nntp} \e$B$N$h$j4JC1$J%G%P%C%0$N$?$a$K!"\e(B@code{nntp-record-commands} \e$B$r\e(B
-@code{nil} \e$B$G$J$$CM$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+@code{nntp} \e$B$N$h$j4JC1$J%G%P%C%0$N$?$a$K!"\e(B
+@code{nntp-record-commands} \e$B$r\e(B @code{nil} \e$B$G$J$$CM$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
 
 @item
-@code{nntp} \e$B$O\e(B @file{~/.authinfo} \e$B$r;H$&$h$&$K$J$j!"$3$l$O\e(B @file{.netrc}
-\e$B$N$h$&$J%U%!%$%k$G!"$I$3$G$I$N$h$&$K\e(B @sc{authinfo} \e$B$r\e(B @sc{nntp} \e$B%5!<%P!<\e(B
-\e$B$KAw$k$+$r@)8f$9$k$?$a$N$b$N$G$9!#\e(B
+@code{nntp} \e$B$O\e(B @file{~/.authinfo} \e$B$r;H$&$h$&$K$J$j!"$3$l\e(B
+\e$B$O\e(B @file{.netrc} \e$B$N$h$&$J%U%!%$%k$G!"$I$3$G$I$N$h$&\e(B
+\e$B$K\e(B @sc{authinfo} \e$B$r\e(B @sc{nntp} \e$B%5!<%P!<$KAw$k$+$r@)8f$9$k$?$a$N$b$N$G$9!#\e(B
 
 @item
 \e$B35N,%P%C%U%!$N%0%k!<%W%Q%i%a!<%?$rJT=8$9$k$?$a$NL?Na$,2C$($i$l$^$7$?!#\e(B
@@ -18450,8 +19414,6 @@ M******** sm*rtq**t*s \e$B$rE,@Z$JJ8>O$KK]0F$9$k?7$7$$L?Na$,$"$j$^$9\e(B---
 
 @end itemize
 
-
-
 @node Newest Features
 @subsection \e$B:G?7$N5!G=\e(B
 @cindex todo
@@ -19050,8 +20012,6 @@ clear up info.
 @item
  group user-defined meta-parameters.
 
-
-
 From: John Griffith <griffith@@sfs.nphil.uni-tuebingen.de>
 @item
  I like the option for trying to retrieve the FAQ for a group and I was
@@ -19063,9 +20023,6 @@ What would be best I suppose is to find the one closest to your site.
 In any case, there is a list of general news group archives at @*
 ftp://ftp.neosoft.com/pub/users/claird/news.lists/newsgroup_archives.html
 
-
-
-
 @item
 @example
 From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
@@ -19081,12 +20038,11 @@ From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
 @end example
 
 @item
- tanken var at når du bruker `gnus-startup-file' som prefix (FOO) til å lete
-opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den være en
+ tanken var at n\e.A\eNer du bruker `gnus-startup-file' som prefix (FOO) til \eNe lete
+opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den v\e.A\eNfre en
 liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
 hatt forskjellige serveres startup-filer forskjellige steder.
 
-
 @item
 LMI> Well, nnbabyl could alter the group info to heed labels like
 LMI> answered and read, I guess.
@@ -19096,7 +20052,6 @@ unix mbox files).
 
 They could be used like this:
 
-
 @example
 `M l <name> RET' add label <name> to current message.
 `M u <name> RET' remove label <name> from current message.
@@ -19113,7 +20068,6 @@ would show all the messages which are labeled `bug' but not labeled
 One could also imagine the labels being used for highlighting, or
 affect the summary line format.
 
-
 @item
 Sender: abraham@@dina.kvl.dk
 
@@ -19155,8 +20109,8 @@ there was a sci.somethingelse group or section, then it should prompt
 for sci? first the sci.something? then sci.somethingelse?...
 
 @item
-Ja, det burde være en måte å si slikt.  Kanskje en ny variabel?
-`gnus-use-few-score-files'?  Så kunne score-regler legges til den
+Ja, det burde v\e.A\eNfre en m\eNete \eNe si slikt.  Kanskje en ny variabel?
+`gnus-use-few-score-files'?  S\e.A\eNe kunne score-regler legges til den
 "mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
 "no.all.SCORE", osv.
 
@@ -19165,7 +20119,6 @@ What i want is for Gnus to treat any sequence or combination of the following
 as a single spoiler warning and hide it all, replacing it with a "Next Page"
 button:
 
-
 ^L's
 
 more than n blank lines
@@ -19175,7 +20128,6 @@ more than m identical lines
 
 any whitespace surrounding any of the above
 
-
 @item
 Well, we could allow a new value to `gnus-thread-ignore-subject' --
 `spaces', or something.  (We could even default to that.)  And then
@@ -19218,7 +20170,6 @@ Group-mode
                 else
                         select-article-under-cursor;
 
-
 Article-mode
         if (key-pressed == SPACE)
                 if (more-pages-in-article)
@@ -19247,7 +20198,6 @@ It would be nice if it also handled
 
 which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.
 
-
 @item
 
   Take a look at w3-menu.el in the Emacs-W3 distribution - this works out
@@ -19260,7 +20210,6 @@ article versions) variable.
   A value of '1' would just put _all_ the menus in a single 'GNUS' menu in
 the main menubar.  This approach works really well for Emacs-W3 and VM.
 
-
 @item
  nndoc should take care to create unique Message-IDs for all its
 articles.
@@ -19486,7 +20435,7 @@ the current process mark set onto the stack.
 
 @item
  gnus-article-hide-pgp
-Selv ville jeg nok ha valgt å slette den dersom teksten matcher
+Selv ville jeg nok ha valgt \e.A\eNe slette den dersom teksten matcher
 @example
 "\\(This\s+\\)?[^ ]+ has been automatically signed by"
 @end example
@@ -19648,7 +20597,7 @@ The jingle is only played on the second invocation of Gnus.
 Bouncing articles should do MIME.
 
 @item
-Crossposted articles should "inherit" the % or @ mark from the other
+Crossposted articles should "inherit" the % or @@ mark from the other
 groups it has been crossposted to, or something.  (Agent.)
 
 @item
@@ -19706,7 +20655,6 @@ Allow "orphan" scores in the Agent scoring.
     just changed to.
 @end example
 
-
 @item
 Remove list identifiers from the subject in the summary when doing `^'
 and the like.
@@ -19714,12 +20662,44 @@ and the like.
 @item
 Have the Agent write out articles, one by one, as it retrieves them,
 to avoid having to re-fetch them all if Emacs should crash while
-fetching. 
+fetching.
 
 @item
 Be able to forward groups of messages as MIME digests.
 
 @item
+nnweb should include the "get whole article" article when getting articles.
+
+@item
+When I type W W c (gnus-article-hide-citation) in the summary
+buffer, the citations are revealed, but the [+] buttons don't turn
+into [-] buttons.  (If I click on one of the [+] buttons, it does
+turn into a [-] button.)
+
+@item
+Perhaps there should be a command to "attach" a buffer of comments to
+a message?  That is, `B WHATEVER', you're popped into a buffer, write
+something, end with `C-c C-c', and then the thing you've written gets
+to be the child of the message you're commenting.
+
+@item
+Handle external-body parts.
+
+@item
+When renaming a group name, nnmail-split-history does not get the group
+name renamed.
+
+@item
+Allow mail splitting on bodies when using advanced mail splitting.
+
+@lisp
+  (body "whatever.text")
+@end lisp
+
+@item
+Be able to run `J u' from summary buffers.
+
+@item
 Solve the halting problem.
 
 @c TODO
@@ -19733,7 +20713,8 @@ Solve the halting problem.
 @cindex colophon
 @cindex manual
 
-\e$B$3$N%^%K%e%"%k$O\e(B TeXinfo \e$B%U%!%$%k$+$i:n@.$5$l!"$=$l$+$i\e(B @code{texi2dvi}
+\e$B$3$N%^%K%e%"%k$O\e(B TeXinfo \e$B%U%!%$%k$+$i:n@.$5$l!"$=$l$+\e(B
+\e$B$i\e(B @code{texi2dvi}
 @iflatex
 \e$B$b$7$/$O!"\e(BLars \e$B$5$s$N:n$i$l$?\e(B Texinfo to \LaTeX \e$BJQ49$rDL$j!"$=$l$+$i!"\e(B
 @code{latex} \e$B$H\e(B @code{dvips}
@@ -19767,41 +20748,38 @@ Solve the halting problem.
 (setq flumphel 'yes)
 @end lisp
 
-@samp{yes} \e$B$H\e(B @code{yes} \e$B$O\e(B2\e$B$D$N\e(B @emph{\e$BA4$/\e(B} \e$B0c$C$?$b$N$G$9\e(B---\e$B@dBP$K:.F1\e(B
-\e$B$7$J$$$G$/$@$5$$!#\e(B
+@samp{yes} \e$B$H\e(B @code{yes} \e$B$OFs$D$N\e(B @emph{\e$BA4$/\e(B} \e$B0c$C$?$b$N$G$9\e(B---\e$B@dBP$K:.\e(B
+\e$BF1$7$J$$$G$/$@$5$$!#\e(B
 
 @iflatex
 @c @head
 \e$B$b$A$m$s!"$3$N%^%K%e%"%k$NA4$F$O=EBg$J6=L#$N$"$k$3$H$G$9$N$G!"$"$J$?$OA4\e(B
 \e$B$FFI$`$Y$-$G$9!#2?EY$b!#$7$+$7!"%^%K%e%"%k$r<P$aFI$_$7$?$$$N$G$"$l$P!"$=\e(B
 \e$B$3$N%^!<%8%s$K$"$k%L!<$NF,$r8+$k$Y$-$G$7$g$&\e(B---\e$B$=$l$O$=$3$G5DO@$5$l$F$$\e(B
-\e$B$k$N$,;D$j$N$b$N$h$j=EMW$G$"$k$H$$$&$3$H$G$9!#\e(B (\e$B0lJ}!"A4$F$,L58B$K=EMW$N\e(B
-\e$B$G$"$l$P!"$I$&$9$l$P$=$l$h$j$b$C$H=EMW$J$b$N$,$G$-$k$N$G$7$g$&!)\e(B \e$B$3$N@$\e(B
-\e$B3&$N!"IT;W5D$N\e(B1\e$B$D$G$7$g$&!"$?$V$s!#\e(B)
+\e$B$k$N$,;D$j$N$b$N$h$j=EMW$G$"$k$H$$$&$3$H$G$9!#\e(B(\e$B0lJ}!"A4$F$,L58B$K=EMW$N\e(B
+\e$B$G$"$l$P!"$I$&$9$l$P$=$l$h$j$b$C$H=EMW$J$b$N$,$G$-$k$N$G$7$g$&\e(B? \e$B$3$N@$3&\e(B
+\e$B$N!"IT;W5D$N0l$D$G$7$g$&!"$?$V$s!#\e(B)
 @end iflatex
 
 @end iftex
 
-
 @node On Writing Manuals
-@section On Writing Manuals
-
-I guess most manuals are written after-the-fact; documenting a program
-that's already there.  This is not how this manual is written.  When
-implementing something, I write the manual entry for that something
-straight away.  I then see that it's difficult to explain the
-functionality, so I write how it's supposed to be, and then I change the 
-implementation.  Writing the documentation and writing the code goes
-hand in hand.
+@section \e$B%^%K%e%"%k$r=q$/\e(B
 
-This, of course, means that this manual has no, or little, flow.  It
-documents absolutely everything in Gnus, but often not where you're
-looking for it.  It is a reference manual, and not a guide to how to get 
-started with Gnus.
+\e$B$*$=$i$/!"$?$$$F$$$N%^%K%e%"%k$O;v<B$N8e$G=q$+$l$F$$$k$H;W$$$^$9!#$9$G$K\e(B
+\e$B$"$k%W%m%0%i%`$rJ8=q2=$7$F$$$^$9!#$3$N%^%K%e%"%k$O$=$&$$$&J}K!$G=q$+$l$F\e(B
+\e$B$$$^$;$s!#2?$+$r<BAu$9$k$H$-$O!"2?$+$r$=$N$^$^%^%K%e%"%k$N0l@a$K=q$-$^$9!#\e(B
+\e$B$=$l$+$i5!G=$N@bL@$,Fq$7$$$3$H$rH/8+$7$F!"$=$l$,$I$N$h$&$K$"$k$Y$-$G$"$k\e(B
+\e$B$+$r=q$-!"$=$l$+$i<BAu$rJQ99$7$^$9!#J8=q$H%3!<%I$r=q$/$N$O0l=o$K9T$J$o$l\e(B
+\e$B$F$$$-$^$9!#\e(B
 
-That would be a totally different book, that should be written using the 
-reference manual as source material.  It would look quite differently.
+\e$B$b$A$m$s!"$3$l$O$3$N%^%K%e%"%k$K$ON.$l9=B$$,$[$H$s$IL5$$$+!"$"$C$F$b>/$7\e(B
+\e$B$@$H$$$&$3$H$G$9!#\e(Bgnus \e$B$N40A4$KA4$F$N$3$H$,@bL@$5$l$F$$$^$9$,!"C5$7$F$$\e(B
+\e$B$k>l=j$G$O$J$$$H$$$&$3$H$,$h$/$"$j$^$9!#$3$l$O%j%U%!%l%s%9%^%K%e%"%k$G$"\e(B
+\e$B$j!"\e(Bgnus \e$B$r;O$a$k$?$a$N<j0z$-$G$O$"$j$^$;$s!#\e(B
 
+\e$B$=$l$O$^$C$?$/0c$C$?K\$K$J$j!"$3$N%j%U%!%l%s%9%^%K%e%"%k$r85$H$7$F;H$C$F\e(B
+\e$B=q$+$l$?$b$N$K$J$k$G$7$g$&!#$H$F$b0c$C$?$b$N$K$J$k$O$:$G$9!#\e(B
 
 @page
 @node Terminology
@@ -19848,12 +20826,12 @@ Gnus \e$B$O$$$D$b0l$D$NJ}K!\e(B (\e$B$H%P%C%/%(%s%I\e(B) \e$B$r%K%e!<%9$rF@$k$?$a$N\e(
 @item \e$B30It\e(B (foreign)
 @cindex foreign
 \e$BF1;~$KG$0U$N?t$N30It%0%k!<%W$r3hF0>uBV$K$9$k$3$H$b$G$-$^$9!#$3$l$i$O%K%e!<\e(B
-\e$B%9$r<hF@$9$k$?$a$N!"4pK\$G$J$/!"\e(B2\e$BHVL\$G$b$J$$%P%C%/%(%s%I$r;H$&%0%k!<%W\e(B
+\e$B%9$r<hF@$9$k$?$a$N!"4pK\$G$J$/!"FsHVL\$G$b$J$$%P%C%/%(%s%I$r;H$&%0%k!<%W\e(B
 \e$B$G$9!#\e(B
 
 @item \e$BFsHVL\\e(B (secondary)
 @cindex secondary
-2\e$BHVL\$N%P%C%/%(%s%I$O!"4pK\$H30It$N4V$/$i$$$K$"$k%P%C%/%(%s%I$G!"$[$H$s\e(B
+\e$BFsHVL\$N%P%C%/%(%s%I$O!"4pK\$H30It$N4V$/$i$$$K$"$k%P%C%/%(%s%I$G!"$[$H$s\e(B
 \e$B$I4pK\$HF1$8$h$&$KF0:n$9$k$b$N$G$9!#\e(B
 
 @item \e$B5-;v\e(B (article)
@@ -19895,10 +20873,10 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 @cindex levels
 \e$B$=$l$>$l$N%0%k!<%W$O2?$i$+$N\e(B @dfn{\e$B%l%Y%k\e(B} \e$B$+B>$N$b$N\e(B (1-9) \e$B$G9XFI$5$l$F\e(B
 \e$B$$$^$9!#Dc$$%l%Y%k$N$b$N$O9b$$%l%Y%k$N$b$N$h$j\e(B ``\e$B$h$j\e(B'' \e$B9XFI$5$l$F$$$^$9!#\e(B
-\e$B<B:]$N$H$3$m!"%l%Y%k\e(B 1-5 \e$B$N%0%k!<%W$O\e(B @dfn{\e$B9XFI\e(B}; 6-7 \e$B$O\e(B @dfn{\e$BL$9XFI\e(B}; 8
-\e$B$O\e(B @dfn{\e$B%>%s%S\e(B}; 9 \e$B$O\e(B @dfn{\e$B@Z$i$l$?\e(B} \e$B$H8+$J$5$l$^$9!#%0%k!<%W$r%j%9%H$7$?\e(B
-\e$B$j!"?7$7$$%0%k!<%W$rAv::$7$?$j$9$kL?Na$O$9$Y$F?tCM@\F,0z?t$r\e(B @dfn{\e$BF0:n%l\e(B
-\e$B%Y%k\e(B} \e$B$H$7$F;H$$$^$9!#\e(B
+\e$B<B:]$N$H$3$m!"%l%Y%k\e(B 1-5 \e$B$N%0%k!<%W$O\e(B @dfn{\e$B9XFI\e(B}; 6-7 \e$B$O\e(B @dfn{\e$BL$9X\e(B
+\e$BFI\e(B}; 8 \e$B$O\e(B @dfn{\e$B%>%s%S\e(B}; 9 \e$B$O\e(B @dfn{\e$B@Z$i$l$?\e(B} \e$B$H8+$J$5$l$^$9!#%0%k!<%W$r%j\e(B
+\e$B%9%H$7$?$j!"?7$7$$%0%k!<%W$rAv::$7$?$j$9$kL?Na$O$9$Y$F?tCM@\F,0z?t\e(B
+\e$B$r\e(B @dfn{\e$BF0:n%l%Y%k\e(B} \e$B$H$7$F;H$$$^$9!#\e(B
 
 @item \e$B@Z$i$l$?%0%k!<%W\e(B (killed groups)
 @cindex killed groups
@@ -19925,8 +20903,8 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 @item \e$B3hF02=\e(B (activating)
 @cindex activating groups
 \e$B%5!<%P!<$K%0%k!<%W$N>pJs$r?R$M!"L$FI5-;v$N?t$r1i;;$9$k9T0Y$O\e(B @dfn{\e$B%0%k!<\e(B
-\e$B%W$r3hF02=$9$k\e(B} \e$B$H8F$P$l$F$$$^$9!#Hs3hF0%0%k!<%W$O%0%k!<%W%P%C%U%!$K\e(B
-@samp{*} \e$B$H$H$b$K0lMwI=<($5$l$^$9!#\e(B
+\e$B%W$r3hF02=$9$k\e(B} \e$B$H8F$P$l$F$$$^$9!#Hs3hF0%0%k!<%W$O%0%k!<%W%P%C%U%!\e(B
+\e$B$K\e(B @samp{*} \e$B$H$H$b$K0lMwI=<($5$l$^$9!#\e(B
 
 @item \e$B%5!<%P!<\e(B (server)
 @cindex server
@@ -19949,9 +20927,9 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 
 @item \e$B0l;~%0%k!<%W\e(B (ephemeral groups)
 @cindex ephemeral groups
-\e$B$?$$$F$$$N%0%k!<%W$O$I$N5-;v$rFI$s$@$+$N%G!<%?$rC_@Q$7$^$9!#\e(B@dfn{\e$B0l;~\e(B}
-\e$B%0%k!<%W$O%G!<%?$,N/$a$i$l$J$$%0%k!<%W$G$9\e(B---\e$B%0%k!<%W$r=P$k$H!"$=$l$OE7\e(B
-\e$B6u$K>C$(5n$j$^$9!#\e(B
+\e$B$?$$$F$$$N%0%k!<%W$O$I$N5-;v$rFI$s$@$+$N%G!<%?$rC_@Q$7$^$9!#\e(B
+@dfn{\e$B0l;~\e(B} \e$B%0%k!<%W$O%G!<%?$,N/$a$i$l$J$$%0%k!<%W$G$9\e(B---\e$B%0%k!<%W$r=P$k$H!"\e(B
+\e$B$=$l$OE76u$K>C$(5n$j$^$9!#\e(B
 
 @item \e$B8GDj%0%k!<%W\e(B (solid groups)
 @cindex solid groups
@@ -19987,7 +20965,6 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 
 @end table
 
-
 @page
 @node Customization
 @section \e$B%+%9%?%^%$%:\e(B
@@ -20000,12 +20977,11 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 @menu
 * Slow/Expensive Connection:: \e$B%m!<%+%k$N\e(B Emacs \e$B$rN)$A>e$2$F!"\e(B
                               \e$BB>$N$H$3$m$+$i%K%e!<%9$rF@$k;v$,$G$-$k!#\e(B
-* Slow Terminal Connection::  \e$B1s3V\e(B Emacs \e$B$r<B9T$9$k!#\e(B
-* Little Disk Space::         \e$BBg$-$J5/F0%U%!%$%k$r;}$D;v$O$^$:$$!#\e(B
-* Slow Machine::              \e$BB.$$5!3#$rGc$*$&$H46$8$k$G$"$m$&!#\e(B
+* Slow Terminal Connection::  \e$B1s3V\e(B Emacs \e$B$r<B9T$9$k\e(B
+* Little Disk Space::         \e$BBg$-$J5/F0%U%!%$%k$r;}$D;v$O$^$:$$\e(B
+* Slow Machine::              \e$BB.$$5!3#$rGc$*$&$H46$8$k$G$"$m$&\e(B
 @end menu
 
-
 @node Slow/Expensive Connection
 @subsection \e$BCY$$\e(B/\e$B9b$$\e(B @sc{nntp} \e$B@\B3\e(B
 
@@ -20019,9 +20995,9 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 \e$B$3$l$r\e(B @code{nil} \e$B$K$7$F2<$5$$!#$=$&$9$l$P!"\e(Bgnus \e$B$K%5!<%P!<$+$i%"%/%F%#\e(B
 \e$B%V%U%!%$%kA4BN$rMW5a$9$k;v$r6X;_$G$-$^$9!#$3$N%U%!%$%k$O$7$P$7$PHs>o$KBg\e(B
 \e$B$-$/$J$C$F$$$^$9!#$=$l$K2C$($F!"\e(Bgnus \e$B$,FMA3$H$K$+$/8=>u%U%!%$%k$r<hF@$7\e(B
-\e$B$h$&$H7hDj$7$J$$;v$r3N<B$K$9$k$?$a$K!"\e(B@code{gnus-check-new-newsgroups}
-\e$B$H\e(B @code{gnus-check-bogus-newsgroups} \e$B$b\e(B @code{nil} \e$B$K@_Dj$7$J$1$l$P$J$j\e(B
-\e$B$^$;$s!#\e(B
+\e$B$h$&$H7hDj$7$J$$;v$r3N<B$K$9$k$?$a$K!"\e(B
+@code{gnus-check-new-newsgroups} \e$B$H\e(B @code{gnus-check-bogus-newsgroups} \e$B$b\e(B @code{nil} \e$B$K\e(B
+\e$B@_Dj$7$J$1$l$P$J$j$^$;$s!#\e(B
 
 @item gnus-nov-is-evil
 \e$B$3$l$b\e(B @code{nil} \e$B$K$7$F$$$J$1$l$P$J$j$^$;$s!#$b$7$=$&$G$J$1$l$P!"\e(B
@@ -20030,7 +21006,6 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 \e$B$"$j$^$;$s!#\e(BGnus \e$B$,<+J,<+?H$G$=$l$r8!::$7$^$9!#\e(B
 @end table
 
-
 @node Slow Terminal Connection
 @subsection \e$BCY$$%?!<%_%J%k@\B3!#\e(B
 
@@ -20042,10 +21017,11 @@ Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
 @table @code
 
 @item gnus-auto-center-summary
-Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l$r\e(B
-@code{nil} \e$B$K@_Dj$7$F2<$5$$!#$3$l$,\e(B @code{vertical} \e$B$G$"$k$H!"?bD>J}8~$N\e(B
-(vertical) \e$BCf?4:F@_Dj$N$_$r$7$^$9!#\e(B@code{nil} \e$B$G$b\e(B @code{vertical} \e$B$G$b\e(B
-\e$BL5$1$l$P!"?eJ?J}8~$H?bD>J}8~$NN>J}$NCf?4:F@_Dj$r9T$$$^$9!#\e(B
+Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l\e(B
+\e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F2<$5$$!#$3$l$,\e(B @code{vertical} \e$B$G$"$k$H!"?bD>J}\e(B
+\e$B8~$N\e(B (vertical) \e$BCf?4:F@_Dj$N$_$r$7$^$9!#\e(B@code{nil} \e$B$G\e(B
+\e$B$b\e(B @code{vertical} \e$B$G$bL5$1$l$P!"?eJ?J}8~$H?bD>J}8~$NN>J}$NCf?4:F@_Dj$r\e(B
+\e$B9T$$$^$9!#\e(B
 
 @item gnus-visible-headers
 \e$B5-;v$K4^$^$l$k%X%C%@!<$r:G>.8B$K8:$i$7$^$9!#<B:]$N$H$3$m!"A4It$J$/$7$F$7\e(B
@@ -20074,7 +21050,6 @@ Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l$r\e(B
 \e$B$N$G!";~4V$r@aLs$G$-$k$G$7$g$&!#\e(B
 @end table
 
-
 @node Little Disk Space
 @subsection \e$B>/$7$N%G%#%9%/MFNL\e(B
 @cindex disk space
@@ -20085,24 +21060,24 @@ Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l$r\e(B
 @table @code
 
 @item gnus-save-newsrc-file
-\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O7h$7$F\e(B @file{.newsrc} \e$B$rJ]B8$7$^$;$s\e(B---
-\e$B$=$l$O\e(B @file{.newsrc.eld} \e$B$N$_$rJ]B8$7$^$9!#$3$l$O!"\e(Bgnus \e$B$NB>$N%K%e!<%9\e(B
-\e$B%j!<%@!<$r;H$($J$$$H$$$&;v$G$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O7h$7$F\e(B @file{.newsrc} \e$B$rJ]B8$7$^$;\e(B
+\e$B$s\e(B---\e$B$=$l$O\e(B @file{.newsrc.eld} \e$B$N$_$rJ]B8$7$^$9!#$3$l$O!"\e(Bgnus \e$B$NB>$N%K%e!<\e(B
+\e$B%9%j!<%@!<$r;H$($J$$$H$$$&;v$G$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
 
 @item gnus-read-newsrc-file
-\e$B$3$l$,\e(B @code{nil} \e$B$G$"$l$P!"\e(Bgnus \e$B$O\e(B @file{.newsrc} \e$B$r7h$7$FFI$_$^$;$s\e(B
----@file{.newsrc.eld} \e$B$@$1$rFI$_$^$9!#$3$l$O!"\e(Bgnus \e$B0J30$N%K%e!<%9%j!<%@!<\e(B
-\e$B$r;H$($J$/$J$k!"$H$$$&$3$H$G$9!#$3$NJQ?t$O=i4|@_Dj$G$O\e(B @code{t} \e$B$G$9!#\e(B
+\e$B$3$l$,\e(B @code{nil} \e$B$G$"$l$P!"\e(Bgnus \e$B$O\e(B @file{.newsrc} \e$B$r7h$7$FFI$_$^$;\e(B
+\e$B$s\e(B ---@file{.newsrc.eld} \e$B$@$1$rFI$_$^$9!#$3$l$O!"\e(Bgnus \e$B0J30$N%K%e!<%9%j!<\e(B
+\e$B%@!<$r;H$($J$/$J$k!"$H$$$&$3$H$G$9!#$3$NJQ?t$O=i4|@_Dj$G$O\e(B @code{t} \e$B$G$9!#\e(B
 
 @item gnus-save-killed-list
 \e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O;`$s$@%0%k!<%W$N%j%9%H$rJ]B8$7$^$;$s!#\e(B
-\e$B$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$7$?$H$-$O!"\e(B@code{gnus-check-new-newsgroups}
-\e$B$r\e(B @code{ask-server} \e$B$K!"\e(B@code{gnus-check-bogus-newsgroups} \e$B$r\e(B
-@code{nil} \e$B$K@_Dj$9$k$Y$-$G$7$g$&!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+\e$B$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$7$?$H$-$O!"\e(B
+@code{gnus-check-new-newsgroups} \e$B$r\e(B @code{ask-server} \e$B$K!"\e(B
+@code{gnus-check-bogus-newsgroups} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$Y$-$G$7$g$&!#\e(B
+\e$B$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Slow Machine
 @subsection \e$BCY$$5!3#\e(B
 @cindex slow machine
@@ -20110,13 +21085,11 @@ Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l$r\e(B
 \e$B$b$7CY$$5!3#$r;}$C$F$$$k$+!"$b$7$/$OC1$KK\Ev$KG&BQNO$,$J$$;~$O!"\e(Bgnus \e$B$N\e(B
 \e$B<B9T$rGD0.$9$k$?$a$K$G$-$k;v$,>/$7$"$j$^$9!#\e(B
 
-\e$B5/F0$rB.$/$9$k$?$a$K\e(B @code{gnus-check-new-newsgroups} \e$B$H\e(B
-@code{gnus-check-bogus-newsgroups} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
-
-\e$B35N,%P%C%U%!$KF~$k;v$HH4$1$k;v$rB.$/$9$k$?$a$K!"\e(B@code{gnus-show-threads}
-\e$B$H\e(B @code{gnus-use-cross-reference} \e$B$H\e(B @code{gnus-nov-is-evil} \e$B$r\e(B
-@code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
-
+\e$B5/F0$rB.$/$9$k$?$a\e(B
+\e$B$K\e(B @code{gnus-check-new-newsgroups} \e$B$H\e(B @code{gnus-check-bogus-newsgroups} \e$B$r\e(B @code{nil} \e$B$K\e(B
+\e$B@_Dj$7$F2<$5$$!#35N,%P%C%U%!$KF~$k;v$HH4$1$k;v$rB.$/$9$k$?$a$K!"\e(B
+@code{gnus-show-threads} \e$B$H\e(B @code{gnus-use-cross-reference} \e$B$H\e(B @code{gnus-nov-is-evil} \e$B$r\e(B @code{nil} \e$B$K\e(B
+\e$B@_Dj$7$F2<$5$$!#\e(B
 
 @page
 @node Troubleshooting
@@ -20134,28 +21107,27 @@ Gnus \e$B$OH"$+$i=P$7$F$9$0$K\e(B @emph{\e$BHs>o$K\e(B} \e$B$h$/F0:n$7$^$9\e(B---\e$B2?
 \e$B$"$J$?$N%3%s%T%e!<%?$N%9%$%C%A$,F~$C$F$$$k;v$r3N$+$a$F2<$5$$!#\e(B
 
 @item
-\e$BK\Ev$K8=9T$N\e(B gnus \e$BHG$rFI$_9~$s$G$$$k;v$r3NG'$7$F2<$5$$!#:#$^$G\e(B @sc{gnus}
-\e$B$r<B9T$7$F$-$?$N$G$"$l$P!"\e(Bgnus \e$B$,F0:n$9$k$h$&$K0lEY\e(B Emacs \e$B$r=*N;$7$F:F5/\e(B
-\e$BF0$9$kI,MW$,$"$j$^$9!#\e(B
+\e$BK\Ev$K8=9T$N\e(B gnus \e$BHG$rFI$_9~$s$G$$$k;v$r3NG'$7$F2<$5$$!#:#$^\e(B
+\e$B$G\e(B @sc{gnus} \e$B$r<B9T$7$F$-$?$N$G$"$l$P!"\e(Bgnus \e$B$,F0:n$9$k$h$&$K0l\e(B
+\e$BEY\e(B Emacs \e$B$r=*N;$7$F:F5/F0$9$kI,MW$,$"$j$^$9!#\e(B
 
 @item
 @kbd{M-x gnus-version} \e$B$r;n$7$F2<$5$$!#$b$7!"\e(B
-@samp{T-gnus 6.13.* (based on Pterodactyl Gnus v0.*; for SEMI 1.1*,
-FLIM 1.1*)} \e$B$N$h$&$J$b$N$,=P$F$-$?$J$i!"@5$7$$%U%!%$%k$,FI$_9~$^$l$F$$$^\e(B
-\e$B$9!#\e(B
-\e$B$b$7!"\e(B@samp{NNTP 3.x} \e$B$d\e(B @samp{nntp flee} \e$B$N$h$&$J$b$N$,=P$F$-$?$H$-$O!"\e(B
-\e$B$=$3$K$"$k$$$/$D$+$N8E$$\e(B @file{.el} \e$B%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#$=$l$i\e(B
-\e$B$r>C$7$F2<$5$$!#\e(B
+@samp{T-gnus 6.14.* (based on Gnus v5.8.8; for SEMI 1.13, FLIM 1.13)} \e$B$N\e(B
+\e$B$h$&$J$b$N$,=P$F$-$?$J$i!"@5$7$$%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#$b$7!"\e(B
+@samp{NNTP 3.x} \e$B$d\e(B @samp{nntp flee} \e$B$N$h$&$J$b$N$,=P$F$-$?$H$-$O!"$=$3$K\e(B
+\e$B$"$k$$$/$D$+$N8E$$\e(B @file{.el} \e$B%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#$=$l$i$r>C$7\e(B
+\e$B$F2<$5$$!#\e(B
 
 @item
-FAQ \e$B$H\e(B how-to \e$B$rFI$`$?$a$K%X%k%W%0%k!<%W\e(B (\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{G h})
-\e$B$rFI$s$G2<$5$$!#\e(B
+FAQ \e$B$H\e(B how-to \e$B$rFI$`$?$a$K%X%k%W%0%k!<%W\e(B (\e$B%0%k!<%W%P%C%U%!\e(B
+\e$B$G\e(B @kbd{G h}) \e$B$rFI$s$G2<$5$$!#\e(B
 
 @item
 @vindex max-lisp-eval-depth
-Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l$J\e(B)
-\e$B;vNc$G$O!"\e(Bgnus \e$B$O:F5"$r\e(B ``\e$B$"$^$j$K?<$/\e(B'' \e$B9_$j$9$.$F!"\e(BEmacs \e$B$,$"$J$?$K%S!<\e(B
-\e$B%W2;$rLD$i$9;v$,$"$j$^$9!#$b$7$3$l$,5/$3$C$?$J$i!"\e(B
+Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l\e(B
+\e$B$J\e(B) \e$B;vNc$G$O!"\e(Bgnus \e$B$O:F5"$r\e(B ``\e$B$"$^$j$K?<$/\e(B'' \e$B9_$j$9$.$F!"\e(BEmacs \e$B$,$"$J$?\e(B
+\e$B$K%S!<%W2;$rLD$i$9;v$,$"$j$^$9!#$b$7$3$l$,5/$3$C$?$J$i!"\e(B
 @code{max-lisp-eval-depth} \e$B$r\e(B 500 \e$B$+$=$l$/$i$$$NCM$K@_Dj$7$F2<$5$$!#\e(B
 @end enumerate
 
@@ -20167,10 +21139,11 @@ Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l$J
 @kindex M-x gnus-bug
 @findex gnus-bug
 \e$B$b$7\e(B gnus \e$B$N%P%0$r8+$D$1$?$J$i!"L?Na\e(B @kbd{M-x gnus-bug} \e$B$K$h$C$F$=$l$rJs\e(B
-\e$B9p$9$k;v$,$G$-$^$9!#\e(B@kbd{M-x set-variable RET debug-on-error RET t RET}
-\e$B$H$7$F!"$=$l$+$i;d$K%P%C%/%H%l!<%9$rAw$C$F2<$5$$!#;d$O%P%0$r=$@5$7$h$&$H\e(B
-\e$B$7$^$9$,!"$"$J$?$,%P%0$r:F8=$5$;$kJ}K!$r@53N$K=q$$$F$/$l$?$H$-$N$_!"$=$l\e(B
-\e$B$r=$@5$9$k;v$,$G$-$^$9!#\e(B
+\e$B9p$9$k;v$,$G$-$^$9!#\e(B
+@kbd{M-x set-variable RET debug-on-error RET t RET} \e$B$H$7$F!"$=$l$+$i;d$K\e(B
+\e$B%P%C%/%H%l!<%9$rAw$C$F2<$5$$!#;d$O%P%0$r=$@5$7$h$&$H$7$^$9$,!"$"$J$?$,%P\e(B
+\e$B%0$r:F8=$5$;$kJ}K!$r@53N$K=q$$$F$/$l$?$H$-$N$_!"$=$l$r=$@5$9$k;v$,$G$-$^\e(B
+\e$B$9!#\e(B
 
 \e$B%P%0Js9p$G$O!">\:Y$9$.$k$3$H$O7h$7$F$"$j$^$;$s!#%P%0Js9p$r$9$k$H$-$O!"$=\e(B
 \e$B$l$,;H$&$?$S$K\e(B 10Kb \e$B%a!<%k$r:n$j!"$b$7$"$J$?$N4D6-$r0JA0;d$K\e(B 500 \e$B2sAw$C\e(B
@@ -20178,10 +21151,10 @@ Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l$J
 
 \e$B;d$O!"5-21$H$$$&<oN`$N$b$N$OA4$/;}$C$F$$$J$$;v$r3P$($F$*$/;v$b=EMW$G$9!#\e(B
 \e$B$b$7$"$J$?$,%P%0Js9p$rAw$k$H!";d$,JVEz$rAw$j$^$9!#$=$7$F!"$=$l$+$i$"$J$?\e(B
-\e$B$,\e(B ``\e$B$$$d!"$=$&$G$O$J$$!*\e(B \e$B$3$N$P$+<T!*\e(B'' \e$B$H$@$1Aw$jJV$7$F$/$k$H!";d$O$"\e(B
-\e$B$J$?$,2?$KBP$7$F;d$rIn?+$7$F$$$k$+$,$o$+$j$^$;$s!#>o$K!"A4$F$r@bL@$7$9$.\e(B
-\e$B$F2<$5$$!#$=$l$O2f!9A4$F$K$H$C$F$b$C$H4JC1$K$J$j$^$9\e(B---\e$B$b$7;d$,I,MW$JA4\e(B
-\e$B$F$N>pJs$rF@$i$l$J$+$C$?$i!";d$O$"$J$?$K%a!<%k$rAw$C$F$5$i$J$k>pJs$r5a$a!"\e(B
+\e$B$,\e(B ``\e$B$$$d!"$=$&$G$O$J$$\e(B! \e$B$3$N$P$+<T\e(B!'' \e$B$H$@$1Aw$jJV$7$F$/$k$H!";d$O$"$J\e(B
+\e$B$?$,2?$KBP$7$F;d$rIn?+$7$F$$$k$+$,$o$+$j$^$;$s!#>o$K!"A4$F$r@bL@$7$9$.$F\e(B
+\e$B2<$5$$!#$=$l$O2f!9A4$F$K$H$C$F$b$C$H4JC1$K$J$j$^$9\e(B---\e$B$b$7;d$,I,MW$JA4$F\e(B
+\e$B$N>pJs$rF@$i$l$J$+$C$?$i!";d$O$"$J$?$K%a!<%k$rAw$C$F$5$i$J$k>pJs$r5a$a!"\e(B
 \e$B$=$N7k2LA4$F$,$h$jB?$/$N;~4V$r<h$k;v$K$J$j$^$9!#\e(B
 
 \e$B$b$7$"$J$?$ND>LL$7$F$$$kLdBj$,Hs>o$K;k3PE*$G!"$=$l$r>e<j$/@bL@$G$-$J$$>l\e(B
@@ -20197,36 +21170,33 @@ Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l$J
 \e$B$^$?!"\e(Bding \e$B%a!<%j%s%0%j%9%H\e(B---@samp{ding@@gnus.org} \e$B$K?V$M$k;v$b$G$-\e(B
 \e$B$^$9!#9XFI$9$k$?$a$K$O\e(B @samp{ding-request@@gnus.org} \e$B$K=q$$$F2<$5$$!#\e(B
 
-
 @page
 @node Gnus Reference Guide
 @section Gnus \e$B$N;2>H%,%$%I\e(B
 
-\e$B;d$N4j$$$O!"B>$NC/$+$,\e(B gnus \e$B$G$G$-$k2?$+8-$$$b$N$r9M$(=P$7!"$=$N\e(B
-\e$B>e$=$N8-$$$b$N$r=q$$$F$/$l$k$H$$$&$3$H$G$9!#$3$l$rMF0W$K$9$k$?$a\e(B
-\e$B$K$O!"\e(Bgnus \e$B$NFbItF0:n$r5-=R$9$k$N$,NI$$J}K!$@$m$&$H;d$O;W$$$^$7\e(B
-\e$B$?!#$"$H!"$=$s$J$KFbIt$8$c$J$$F0:n$r$$$/$D$+$H!";d$,:#$d$C$F$k$3\e(B
-\e$B$H$H!#\e(B
+\e$B;d$N4j$$$O!"B>$NC/$+$,\e(B gnus \e$B$G$G$-$k2?$+8-$$$b$N$r9M$(=P$7!"$=$N>e$=$N8-\e(B
+\e$B$$$b$N$r=q$$$F$/$l$k$H$$$&$3$H$G$9!#$3$l$rMF0W$K$9$k$?$a$K$O!"\e(Bgnus \e$B$NFb\e(B
+\e$BItF0:n$r5-=R$9$k$N$,NI$$J}K!$@$m$&$H;d$O;W$$$^$7$?!#$"$H!"$=$s$J$KFbIt$8$c\e(B
+\e$B$J$$F0:n$r$$$/$D$+$H!";d$,:#$d$C$F$k$3$H$H!#\e(B
 
-\e$B%W%m%0%i%`$NFbIt9=B$$,JQ99$5$l$k$3$H$O$J$$!"$J$I$H;W$C$F$O$$$1$^\e(B
-\e$B$;$s$,!"\e(Bgnus \e$B$H$=$N%P%C%/%(%s%I4V$N%$%s%?!<%U%'!<%9\e(B(\e$B$3$l$O40A4$K\e(B
-\e$B5-=R$5$l$F$$$k\e(B)\e$B$d!"%9%3%"%U%!%$%k$N7A<0\e(B(\e$B$3$l$bF1MM\e(B)\e$B!"%G!<%?9=B$\e(B
-(\e$B$3$l$OB>$h$jJQ99$5$l$d$9$$$b$N$b$"$k\e(B)\e$B!"A`:nMQ$N0lHL%a%=%C%I!"$J\e(B
-\e$B$I$r\e(B(\e$B:YIt$K$o$?$C$F\e(B)\e$BDj5A$7$F$$$-$^$9!#\e(B
+\e$B%W%m%0%i%`$NFbIt9=B$$,JQ99$5$l$k$3$H$O$J$$!"$J$I$H;W$C$F$O$$$1$^$;$s$,!"\e(B
+gnus \e$B$H$=$N%P%C%/%(%s%I4V$N%$%s%?!<%U%'!<%9\e(B (\e$B$3$l$O40A4$K5-=R$5$l$F$$\e(B
+\e$B$k\e(B) \e$B$d!"%9%3%"%U%!%$%k$N7A<0\e(B (\e$B$3$l$bF1MM\e(B)\e$B!"%G!<%?9=B$\e(B (\e$B$3$l$OB>$h$jJQ99\e(B
+\e$B$5$l$d$9$$$b$N$b$"$k\e(B)\e$B!"A`:nMQ$N0lHL%a%=%C%I!"$J$I$r\e(B (\e$B:YIt$K$o$?$C$F\e(B) \e$BDj\e(B
+\e$B5A$7$F$$$-$^$9!#\e(B
 
 @menu
-* Gnus Utility Functions::   \e$B;HMQ$G$-$k6&DL$N4X?t$HJQ?t!#\e(B
-* Backend Interface::        Gnus \e$B$O$I$&$d$C$F%5!<%P!<$HDL?.$9$k$N$+!#\e(B
-* Score File Syntax::        \e$B%9%3%"%U%!%$%k5,3J$N\e(B BNF \e$BDj5A!#\e(B
-* Headers::                  Gnus \e$B$O%X%C%@!<$rFbItE*$K$I$N$h$&$K3JG<$9$k$+!#\e(B
-* Ranges::                   \e$B$?$/$5$s$N?t$r3JG<$9$kJXMx$J7A<0!#\e(B
-* Group Info::               \e$B%0%k!<%W>pJs7A<0!#\e(B
-* Extended Interactive::     \e$B5-9f@\F,<-$J$I!#\e(B
-* Emacs/XEmacs Code::        Gnus \e$B$OA4$F$N6aBe\e(B Emacsen \e$B$GF0:n$9$k!#\e(B
-* Various File Formats::     Gnus \e$B$N;HMQ$9$k%U%!%$%k$N7A<0!#\e(B
+* Gnus Utility Functions:: \e$B;HMQ$G$-$k6&DL$N4X?t$HJQ?t\e(B
+* Backend Interface::      Gnus \e$B$O$I$&$d$C$F%5!<%P!<$HDL?.$9$k$N$+\e(B
+* Score File Syntax::      \e$B%9%3%"%U%!%$%k5,3J$N\e(B BNF \e$BDj5A\e(B
+* Headers::                Gnus \e$B$O%X%C%@!<$rFbItE*$K$I$N$h$&$K3JG<$9$k$+\e(B
+* Ranges::                 \e$B$?$/$5$s$N?t$r3JG<$9$kJXMx$J7A<0\e(B
+* Group Info::             \e$B%0%k!<%W>pJs7A<0\e(B
+* Extended Interactive::   \e$B5-9f@\F,<-$J$I\e(B
+* Emacs/XEmacs Code::      Gnus \e$B$OA4$F$N6aBe\e(B Emacsen \e$B$GF0:n$9$k\e(B
+* Various File Formats::   Gnus \e$B$N;HMQ$9$k%U%!%$%k$N7A<0\e(B
 @end menu
 
-
 @node Gnus Utility Functions
 @subsection Gnus \e$B$NM-MQ$J4X?t\e(B
 @cindex Gnus utility functions
@@ -20324,7 +21294,7 @@ Gnus \e$B=*N;;~$K>C5n$9$k%P%C%U%!$N0lMw$K8=:_$N%P%C%U%!$rDI2C$7$^$9!#\e(B
 
 @item gnus-group-set-parameter
 @findex gnus-group-set-parameter
-\e$B;0$D$N0z?t\e(B @var{group}\e$B!"\e(B @var{parameter}\e$B!"\e(B@var{value} \e$B$r<h$j$^$9!#\e(B
+\e$B;0$D$N0z?t\e(B @var{group}, @var{parameter}, @var{value} \e$B$r<h$j$^$9!#\e(B
 
 @item gnus-narrow-to-body
 @findex gnus-narrow-to-body
@@ -20332,9 +21302,8 @@ Gnus \e$B=*N;;~$K>C5n$9$k%P%C%U%!$N0lMw$K8=:_$N%P%C%U%!$rDI2C$7$^$9!#\e(B
 
 @item gnus-check-backend-function
 @findex gnus-check-backend-function
-\e$BFs$D$N0z?t\e(B @var{function}\e$B!"\e(B@var{group} \e$B$r<h$j$^$9!#\e(B@var{group}
-\e$B%P%C%/%(%s%I$,\e(B @var{function} \e$B$r%5%]!<%H$7$F$$$k$J$i!"\e(B
-@code{nil} \e$B0J30$rJV$7$^$9!#\e(B
+\e$BFs$D$N0z?t\e(B @var{function}, @var{group} \e$B$r<h$j$^$9!#\e(B@var{group} \e$B%P%C%/%(\e(B
+\e$B%s%I$,\e(B @var{function} \e$B$r%5%]!<%H$7$F$$$k$J$i!"\e(B@code{nil} \e$B0J30$rJV$7$^$9!#\e(B
 
 @lisp
 (gnus-check-backend-function "request-scan" "nnml:misc")
@@ -20347,27 +21316,25 @@ Gnus \e$B=*N;;~$K>C5n$9$k%P%C%U%!$N0lMw$K8=:_$N%P%C%U%!$rDI2C$7$^$9!#\e(B
 
 @end table
 
-
 @node Backend Interface
 @subsection \e$B%P%C%/%(%s%I%$%s%?!<%U%'!<%9\e(B
 
-Gnus \e$B$O\e(B @sc{nntp} \e$B$d%9%W!<%k!"%a!<%k!"2>A[%0%k!<%W$K$D$$$F$O2?$K\e(B
-\e$B$bCN$j$^$;$s!#$?$@2>A[%5!<%P!<\e(B @dfn{virtual servers} \e$B$HBPOC$9$k\e(B
-\e$BJ}K!$rCN$C$F$$$k$@$1$G$9!#2>A[%5!<%P!<$O%P%C%/%(%s%I\e(B
-@dfn{backend} \e$B$H$$$/$D$+$N%P%C%/%(%s%IJQ?t\e(B @dfn{backend
-variables} \e$B$+$i$J$j$^$9!#A0<T$NNc$H$7$F$O\e(B @code{nntp}\e$B!"\e(B
-@code{nnspool}\e$B!"\e(B @code{nnmbox} \e$B$J$I$,$"$j$^$9!#8e<T$NNc$H$7$F$O\e(B
-@code{nntp-port-number} \e$B$d\e(B @code{nnmbox-directory} \e$B$,$"$j$^$9!#\e(B
-
-Gnus \e$B$,%P%C%/%(%s%I\e(B --- \e$BNc$($P\e(B @code{nntp} --- \e$B$K2?$+$N>pJs$rMW\e(B
-\e$B5a$9$k$H$-$O!"DL>o4X?t$N0z?t$H$7$F2>A[%5!<%P!<L>$r4^$a$^$9!#\e(B (\e$B$b\e(B
-\e$B$7$J$1$l$P!"%P%C%/%(%s%I$O\e(B ``\e$B8=:_$N\e(B'' \e$B2>A[%5!<%P!<$r;HMQ$7$^$9!#\e(B)
-\e$BNc$($P!"\e(B@code{nntp-request-list} \e$B$O$=$NM#0l$N\e(B (\e$B>JN,2DG=$J\e(B) \e$B0z?t\e(B
-\e$B$H$7$F2>A[%5!<%P!<$r<h$j$^$9!#$b$7$3$N2>A[%5!<%P!<$,3+$+$l$F$$$J\e(B
-\e$B$1$l$P!"$3$N4X?t$O<:GT$7$^$9!#\e(B
+Gnus \e$B$O\e(B @sc{nntp} \e$B$d%9%W!<%k!"%a!<%k!"2>A[%0%k!<%W$K$D$$$F$O2?$K$bCN$j$^\e(B
+\e$B$;$s!#$?$@2>A[%5!<%P!<\e(B @dfn{virtual servers} \e$B$HBPOC$9$kJ}K!$rCN$C$F$$$k\e(B
+\e$B$@$1$G$9!#2>A[%5!<%P!<$O%P%C%/%(%s%I\e(B @dfn{backend} \e$B$H$$$/$D$+$N%P%C%/%(\e(B
+\e$B%s%IJQ?t\e(B @dfn{backend variables} \e$B$+$i$J$j$^$9!#A0<T$NNc$H$7$F\e(B
+\e$B$O\e(B @code{nntp}, @code{nnspool}, @code{nnmbox} \e$B$J$I$,$"$j$^$9!#8e<T$NNc$H\e(B
+\e$B$7$F$O\e(B @code{nntp-port-number} \e$B$d\e(B @code{nnmbox-directory} \e$B$,$"$j$^$9!#\e(B
+
+Gnus \e$B$,%P%C%/%(%s%I\e(B --- \e$BNc$($P\e(B @code{nntp} --- \e$B$K2?$+$N>pJs$rMW5a$9$k$H\e(B
+\e$B$-$O!"DL>o4X?t$N0z?t$H$7$F2>A[%5!<%P!<L>$r4^$a$^$9!#\e(B(\e$B$b$7$J$1$l$P!"%P%C\e(B
+\e$B%/%(%s%I$O\e(B ``\e$B8=:_$N\e(B'' \e$B2>A[%5!<%P!<$r;HMQ$7$^$9!#\e(B) \e$BNc$($P!"\e(B
+@code{nntp-request-list} \e$B$O$=$NM#0l$N\e(B (\e$B>JN,2DG=$J\e(B) \e$B0z?t$H$7$F2>A[%5!<%P!<\e(B
+\e$B$r<h$j$^$9!#$b$7$3$N2>A[%5!<%P!<$,3+$+$l$F$$$J$1$l$P!"$3$N4X?t$O<:GT$7$^\e(B
+\e$B$9!#\e(B
 
-\e$B2>A[%5!<%P!<L>$O!"J*M}E*$J%5!<%P!<L>$H$O2?$N4X78$bL5$$$3$H$KCm0U\e(B
-\e$B$7$F$/$@$5$$!#$3$NNc$r8+$F$/$@$5$$!#\e(B
+\e$B2>A[%5!<%P!<L>$O!"J*M}E*$J%5!<%P!<L>$H$O2?$N4X78$bL5$$$3$H$KCm0U$7$F$/$@\e(B
+\e$B$5$$!#$3$NNc$r8+$F$/$@$5$$!#\e(B
 
 @lisp
 (nntp "odd-one"
@@ -20375,48 +21342,45 @@ Gnus \e$B$,%P%C%/%(%s%I\e(B --- \e$BNc$($P\e(B @code{nntp} --- \e$B$K2?$+$N>pJs$rMW\e(
       (nntp-port-number 4324))
 @end lisp
 
-\e$B$3$3$G!"J*M}%5!<%P!<L>$O\e(B @samp{ifi.uio.no} \e$B$G$"$k$N$KBP$7!"2>A[\e(B
-\e$B%5!<%P!<L>$O\e(B @samp{odd-one} \e$B$G$9!#\e(B
+\e$B$3$3$G!"J*M}%5!<%P!<L>$O\e(B @samp{ifi.uio.no} \e$B$G$"$k$N$KBP$7!"2>A[%5!<%P!<\e(B
+\e$BL>$O\e(B @samp{odd-one} \e$B$G$9!#\e(B
 
-\e$B%P%C%/%(%s%I$OJ#?t$N2>A[%5!<%P!<$r@Z$jBX$(2DG=$G$J$1$l$P$J$j$^$;\e(B
-\e$B$s!#I8=`$N%P%C%/%(%s%I$O$3$l$r!"2>A[%5!<%P!<4D6-$rI,MW$J$H$-$K<h\e(B
-\e$B$j=P$7!&2!$79~$_$r9T$J$&O"A[%j%9%H$rJ];}$9$k$3$H$K$h$C$F<B8=$7$F\e(B
-\e$B$$$^$9!#\e(B
+\e$B%P%C%/%(%s%I$OJ#?t$N2>A[%5!<%P!<$r@Z$jBX$(2DG=$G$J$1$l$P$J$j$^$;$s!#I8=`\e(B
+\e$B$N%P%C%/%(%s%I$O$3$l$r!"2>A[%5!<%P!<4D6-$rI,MW$J$H$-$K<h$j=P$7!&2!$79~$_\e(B
+\e$B$r9T$J$&O"A[%j%9%H$rJ];}$9$k$3$H$K$h$C$F<B8=$7$F$$$^$9!#\e(B
 
-\e$B%$%s%?!<%U%'!<%94X?t$OFs$D$N%0%k!<%W$,$"$j$^$9!#I,$:B8:_$7$J$1$l\e(B
-\e$B$P$J$i$J$$I,?\4X?t\e(B @dfn{required functions} \e$B$H!"\e(Bgnus \e$B$,8F$S=P$7\e(B
-\e$B$r9T$J$&A0$K$=$l$,B8:_$9$k$+$r>o$K3NG'$9$kG$0U4X?t\e(B @dfn{optional
-functions} \e$B$G$9!#\e(B
+\e$B%$%s%?!<%U%'!<%94X?t$OFs$D$N%0%k!<%W$,$"$j$^$9!#I,$:B8:_$7$J$1$l$P$J$i$J\e(B
+\e$B$$I,?\4X?t\e(B @dfn{required functions} \e$B$H!"\e(Bgnus \e$B$,8F$S=P$7$r9T$J$&A0$K$=$l\e(B
+\e$B$,B8:_$9$k$+$r>o$K3NG'$9$kG$0U4X?t\e(B @dfn{optional functions} \e$B$G$9!#\e(B
 
-\e$B$3$l$i$N4X?t$OA4$F!"JV5Q%G!<%?$r\e(B @code{nntp-server-buffer}
-(@samp{ *nntpd*}) \e$B%P%C%U%!!<$KJV$9$3$H$,5a$a$i$l$^$9!#$3$l$O$A$g$C\e(B
-\e$B$HIT1?$JL>A0IU$1$G$9$,!"$3$l$G2fK}$7$J$1$l$P$J$j$^$;$s!#;d$,7k2L\e(B
-\e$B$N%G!<%?\e(B @dfn{resulting data} \e$B$H8@$C$?$H$-$O!"$=$N%P%C%U%!!<$NCf\e(B
-\e$B$N%G!<%?$r;X$7$F$$$^$9!#JV5QCM\e(B @dfn{return value} \e$B$H8@$C$?$H$-$O!"\e(B
-\e$B4X?t8F$S=P$7$K$h$C$FJV$5$l$k4X?t$NCM$N$3$H$r8@$C$F$$$^$9!#4X?t$,\e(B
-\e$B<:GT$7$?$H$-$OJV5QCM$H$7$F\e(B @code{nil} \e$B$rJV$5$J$/$F$O$$$1$^$;$s!#\e(B
+\e$B$3$l$i$N4X?t$OA4$F!"JV5Q%G!<%?\e(B
+\e$B$r\e(B @code{nntp-server-buffer} (@samp{*nntpd*}) \e$B%P%C%U%!!<$KJV$9$3$H$,5a$a\e(B
+\e$B$i$l$^$9!#$3$l$O$A$g$C$HIT1?$JL>A0IU$1$G$9$,!"$3$l$G2fK}$7$J$1$l$P$J$j$^\e(B
+\e$B$;$s!#;d$,7k2L$N%G!<%?\e(B @dfn{resulting data} \e$B$H8@$C$?$H$-$O!"$=$N%P%C%U%!!<\e(B
+\e$B$NCf$N%G!<%?$r;X$7$F$$$^$9!#JV5QCM\e(B @dfn{return value} \e$B$H8@$C$?$H$-$O!"4X\e(B
+\e$B?t8F$S=P$7$K$h$C$FJV$5$l$k4X?t$NCM$N$3$H$r8@$C$F$$$^$9!#4X?t$,<:GT$7$?$H\e(B
+\e$B$-$OJV5QCM$H$7$F\e(B@code{nil} \e$B$rJV$5$J$/$F$O$$$1$^$;$s!#\e(B
 
-\e$B%P%C%/%(%s%I$K$O%5!<%P!<7A<0\e(B @dfn{server-forming} \e$B$N%P%C%/%(%s%I\e(B
-\e$B$G$"$k$H8F$P$l$k$b$N$,$"$j!"$^$?$=$&8F$P$l$J$$$b$N$b$"$j$^$9!#8e\e(B
-\e$B<T$O0lHL$K$O!"F1;~$K$O0l$D$@$1$7$+A`:n$7$J$$%P%C%/%(%s%I$G!"\e(B``\e$B%5!<\e(B
-\e$B%P!<\e(B'' \e$B$N35G0$,$"$j$^$;$s!#$3$N%5!<%P!<$H$O!"%0%k!<%W$r;}$A!"$=\e(B
-\e$B$N%0%k!<%W$K>pJs$rG[Aw$9$k$b$N$G!"$=$l0J>e$N$b$N$G$O$"$j$^$;$s!#\e(B
+\e$B%P%C%/%(%s%I$K$O%5!<%P!<7A<0\e(B @dfn{server-forming} \e$B$N%P%C%/%(%s%I$G$"$k$H\e(B
+\e$B8F$P$l$k$b$N$,$"$j!"$^$?$=$&8F$P$l$J$$$b$N$b$"$j$^$9!#8e<T$O0lHL$K$O!"F1\e(B
+\e$B;~$K$O0l$D$@$1$7$+A`:n$7$J$$%P%C%/%(%s%I$G!"\e(B``\e$B%5!<%P!<\e(B'' \e$B$N35G0$,$"$j$^\e(B
+\e$B$;$s!#$3$N%5!<%P!<$H$O!"%0%k!<%W$r;}$A!"$=$N%0%k!<%W$K>pJs$rG[Aw$9$k$b$N\e(B
+\e$B$G!"$=$l0J>e$N$b$N$G$O$"$j$^$;$s!#\e(B
 
-\e$B$3$3$G$NNc$HDj5A$G$O!"A[A|>e$N%P%C%/%(%s%I\e(B @code{nnchoke} \e$B$r0z$-\e(B
-\e$B9g$$$K=P$9$3$H$K$7$^$9!#\e(B
+\e$B$3$3$G$NNc$HDj5A$G$O!"A[A|>e$N%P%C%/%(%s%I\e(B @code{nnchoke} \e$B$r0z$-9g$$$K=P\e(B
+\e$B$9$3$H$K$7$^$9!#\e(B
 
 @cindex @code{nnchoke}
 
 @menu
-* Required Backend Functions::        \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t!#\e(B
-* Optional Backend Functions::        \e$B<BAu$7$J$/$F$b$h$$4X?t!#\e(B
-* Error Messaging::                   \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!!#\e(B
-* Writing New Backends::              \e$B8E$$%P%C%/%(%s%I$N3HD%!#\e(B
-* Hooking New Backends Into Gnus::    Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H!#\e(B
-* Mail-like Backends::                \e$B%a!<%kIw%P%C%/%(%s%I$N$?$a$N=u8@\e(B
+* Required Backend Functions::     \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t\e(B
+* Optional Backend Functions::     \e$B<BAu$7$J$/$F$b$h$$4X?t\e(B
+* Error Messaging::                \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!\e(B
+* Writing New Backends::           \e$B8E$$%P%C%/%(%s%I$N3HD%\e(B
+* Hooking New Backends Into Gnus:: Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H\e(B
+* Mail-like Backends::             \e$B%a!<%kIw%P%C%/%(%s%I$N$?$a$N=u8@\e(B
 @end menu
 
-
 @node Required Backend Functions
 @subsubsection \e$BI,?\%P%C%/%(%s%I4X?t\e(B
 
@@ -20424,24 +21388,22 @@ functions} \e$B$G$9!#\e(B
 
 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
 
-@var{articles} \e$B$O5-;vHV9f$NHO0O$+$"$k$$$O\e(B @code{Message-ID} \e$B$N%j\e(B
-\e$B%9%H$G$9!#8=:_$N%P%C%/%(%s%I$G$O$I$A$i$b40A4$K$O%5%]!<%H$7$F$$$^\e(B
-\e$B$;$s\e(B --- \e$BO"B3$7$?5-;vHV9f\e(B (\e$B$N%j%9%H\e(B) \e$B$@$1$G!"B?$/$N%P%C%/%(%s%I\e(B
-\e$B$G$O\e(B @code{Message-ID} \e$B$K$h$k<hF@$O%5%]!<%H$7$F$$$^$;$s!#$G$b$I\e(B
-\e$B$A$i$b%5%]!<%H$7$F$$$/$Y$-$G$7$g$&!#\e(B
-
-\e$B7k2L$N%G!<%?$O\e(B HEAD \e$B$+\e(B NOV \e$B9T$N$$$:$l$+$G$"$j!"JV5QCM$O$3$l$rH?\e(B
-\e$B1G$7$?\e(B @code{headers} \e$B$+\e(B @code{nov} \e$B$N$$$:$l$+$G$J$/$F$O$J$j$^$;\e(B
-\e$B$s!#$3$l$O:#8e!"\e(BHEAD \e$B$H\e(B NOV \e$B9T$,:.:_$9$k\e(B @code{various} \e$B$K3HD%$5\e(B
-\e$B$l$k$+$b$7$l$^$;$s$,!"8=:_$N\e(B gnus \e$B$G$O%5%]!<%H$5$l$F$$$^$;$s!#\e(B
-
-@var{fetch-old} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$"$k0UL#$G$N!VM>J,$J\e(B
-\e$B%X%C%@!<!W$r<hF@$7$h$&$H$7$^$9!#$3$l$ODL>o!"\e(B@code{articles} \e$B$NCf\e(B
-\e$B$N:G>.HV9f$N5-;v$h$j$b>.$5$$5-;v$+$i\e(B (\e$B>/$J$/$H$b\e(B)
-@var{fetch-old} \e$B8D$NM>J,$J%X%C%@!<$r<hF@$7!"6u=j$rKd$a$k$3$H$r9T\e(B
-\e$B$J$$$^$9!#$b$7%P%C%/%(%s%I$,$3$NMW5a$K=>$&$3$H$rHQ$o$7$$$H;W$C$?\e(B
-\e$B>l9g$K$O!"$3$N%Q%i%a!<%?$NB8:_$OL5;k$5$l$k$3$H$b$"$j$^$9!#$3$NCM\e(B
-\e$B$,\e(B @code{nil} \e$B$G$b?t;z$G$b$J$1$l$P!":GBg8B$N<hF@$r9T$J$$$^$9!#\e(B
+@var{articles} \e$B$O5-;vHV9f$NHO0O$+$"$k$$$O\e(B @code{Message-ID} \e$B$N%j%9%H$G$9!#\e(B
+\e$B8=:_$N%P%C%/%(%s%I$G$O$I$A$i$b40A4$K$O%5%]!<%H$7$F$$$^$;$s\e(B --- \e$BO"B3$7$?\e(B
+\e$B5-;vHV9f\e(B (\e$B$N%j%9%H\e(B) \e$B$@$1$G!"B?$/$N%P%C%/%(%s%I$G$O\e(B @code{Message-ID} \e$B$K\e(B
+\e$B$h$k<hF@$O%5%]!<%H$7$F$$$^$;$s!#$G$b$I$A$i$b%5%]!<%H$7$F$$$/$Y$-$G$7$g$&\e(B
+
+\e$B7k2L$N%G!<%?$O\e(B HEAD \e$B$+\e(B NOV \e$B9T$N$$$:$l$+$G$"$j!"JV5QCM$O$3$l$rH?1G$7\e(B
+\e$B$?\e(B @code{headers} \e$B$+\e(B @code{nov} \e$B$N$$$:$l$+$G$J$/$F$O$J$j$^$;$s!#$3$l$O:#\e(B
+\e$B8e!"\e(BHEAD \e$B$H\e(B NOV \e$B9T$,:.:_$9$k\e(B @code{various} \e$B$K3HD%$5$l$k$+$b$7$l$^$;$s$,!"\e(B
+\e$B8=:_$N\e(B gnus \e$B$G$O%5%]!<%H$5$l$F$$$^$;$s!#\e(B
+
+@var{fetch-old} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$"$k0UL#$G$N!VM>J,$J%X%C%@!<!W\e(B
+\e$B$r<hF@$7$h$&$H$7$^$9!#$3$l$ODL>o!"\e(B@code{articles} \e$B$NCf$N:G>.HV9f$N5-;v$h\e(B
+\e$B$j$b>.$5$$5-;v$+$i\e(B (\e$B>/$J$/$H$b\e(B) @var{fetch-old} \e$B8D$NM>J,$J%X%C%@!<$r<hF@\e(B
+\e$B$7!"6u=j$rKd$a$k$3$H$r9T$J$$$^$9!#$b$7%P%C%/%(%s%I$,$3$NMW5a$K=>$&$3$H$r\e(B
+\e$BHQ$o$7$$$H;W$C$?>l9g$K$O!"$3$N%Q%i%a!<%?$NB8:_$OL5;k$5$l$k$3$H$b$"$j$^$9!#\e(B
+\e$B$3$NCM$,\e(B @code{nil} \e$B$G$b?t;z$G$b$J$1$l$P!":GBg8B$N<hF@$r9T$J$$$^$9!#\e(B
 
 \e$B$3$l$,\e(B HEAD \e$B$NNc$G$9!#\e(B
 
@@ -20460,8 +21422,8 @@ NNTP-Posting-Host: holmenkollen.ifi.uio.no
 .
 @end example
 
-\e$B$D$^$j!"JV5QCM$,\e(B @code{headers} \e$B$G$"$k$H$-$O!"%G!<%?%P%C%U%!$K$3\e(B
-\e$B$l$i%X%C%@!<$,$$$/$D$+$"$k$H$$$&$3$H$r0UL#$7$^$9!#\e(B
+\e$B$D$^$j!"JV5QCM$,\e(B @code{headers} \e$B$G$"$k$H$-$O!"%G!<%?%P%C%U%!$K$3$l$i%X%C\e(B
+\e$B%@!<$,$$$/$D$+$"$k$H$$$&$3$H$r0UL#$7$^$9!#\e(B
 
 \e$B$3$l$,$=$N%P%C%U%!!<$N\e(B BNF \e$BDj5A$G$9!#\e(B
 
@@ -20474,8 +21436,8 @@ valid-message  = "221 " <number> " Article retrieved." eol
 header         = <text> eol
 @end example
 
-\e$B$b$7JV5QCM$,\e(B @code{nov} \e$B$G$"$l$P!"%G!<%?%P%C%U%!!<$K$O\e(B
-@dfn{network overview database} \e$B9T$,4^$^$l$F$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$b$7JV5QCM$,\e(B @code{nov} \e$B$G$"$l$P!"%G!<%?%P%C%U%!!<$K\e(B
+\e$B$O\e(B @dfn{network overview database} \e$B9T$,4^$^$l$F$J$/$F$O$J$j$^$;$s!#\e(B
 \e$B$3$l$O4pK\E*$K$OJ#?t$NMs$r%?%V$G6h@Z$C$?$b$N$G$9!#\e(B
 
 @example
@@ -20487,7 +21449,6 @@ field      = <text except TAB>
 \e$B$3$l$i$NMs$K$I$N$h$&$J$b$N$,4^$^$l$k$+$r$h$j>\$7$/8+$?$1$l$P!"\e(B
 @pxref{Headers} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
 
-
 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
 
 \e$B$3$3$G$N\e(B @var{server} \e$B$O2>A[%5!<%P!<L>$G$9!#\e(B@var{definitions} \e$B$O\e(B
@@ -20502,7 +21463,6 @@ field      = <text except TAB>
 \e$B$NCM$rJV5Q$7$J$1$l$P$J$j$^$;$s!#$3$N$H$-!"JV$5$l$k7k2L$N%G!<%?$O\e(B
 \e$B$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-close-server &optional SERVER)
 
 @var{server} \e$B$X$N@\B3$rJD$8!"$3$l$K4XO"$9$k$9$Y$F$N;q8;$r3+J|$7\e(B
@@ -20511,7 +21471,6 @@ field      = <text except TAB>
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-close)
 
 \e$BA4$F$N%5!<%P!<$N@\B3$rJD$8!"%P%C%/%(%s%I$,J]M-$7$F$$$kA4$F$N;q8;\e(B
@@ -20521,7 +21480,6 @@ field      = <text except TAB>
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-server-opened &optional SERVER)
 
 \e$B$b$7\e(B @var{server} \e$B$,8=:_$N2>A[%5!<%P!<$G!"$=$NJ*M}%5!<%P!<$X$N@\\e(B
@@ -20531,39 +21489,33 @@ field      = <text except TAB>
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-status-message &optional SERVER)
 
 \e$B$3$N4X?t$O\e(B @var{server} \e$B$+$i$N:G8e$N%(%i!<%a%C%;!<%8$rJV5Q$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
 
-\e$B$3$N4X?t$N7k2L$N%G!<%?$O!"\e(B@var{article} \e$B$G;XDj$5$l$?5-;v$G$9!#$3\e(B
-\e$B$N;XDj$O\e(B @code{Message-ID} \e$B$+HV9f$N$$$:$l$+$G$9!#\e(B
-@code{Message-ID} \e$B$K$h$k5-;v$N<hF@$r<BAu$9$k$+$I$&$+$OG$0U$G$9$,!"\e(B
-\e$B2DG=$G$"$k$H4r$7$$$G$9$M!#\e(B
-
-@var{to-buffer} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"7k2L$N%G!<%?$ODL>o$N\e(B
-\e$B%G!<%?%P%C%U%!$NBe$o$j$K!"$3$N%P%C%U%!$KJV$5$l$^$9!#$3$l$K$h$jB?\e(B
-\e$BNL$N%G!<%?$r$"$k%P%C%U%!$+$iJL$N%P%C%U%!$K%3%T!<$9$k$3$H$rHr$1$k\e(B
-\e$B$3$H$,$G$-!"$=$7$F\e(B gnus \e$B$ODL>o!"5-;v%P%C%U%!$KD>@\5-;v$rA^F~$9$k\e(B
-\e$B$h$&$KMW5a$7$F$$$^$9!#\e(B
-
-\e$B$b$72DG=$G$"$k$N$J$i!"$3$N4X?t$O!"\e(B@code{car}\e$B$,<hF@$7$?5-;v$N$"$k\e(B
-\e$B%0%k!<%WL>$G!"\e(B@code{cdr} \e$B$,5-;vHV9f$G$"$k\e(B cons \e$B%;%k$rJV$9$Y$-$G\e(B
-\e$B$9!#$3$l$K$h$j\e(B @code{Message-ID} \e$B$K$h$C$F5-;v$r<hF@$7$?$H$-!"\e(B
-gnus \e$B$,K\Ev$N%0%k!<%W$H5-;vHV9f$rCN$k$3$H$,$G$-$k$h$&$K$J$k$G$7$g\e(B
-\e$B$&!#$3$l$,IT2DG=$J>l9g$K$O!"5-;v$N<hF@$,@.8y$7$?$H$-$O\e(B @code{t}
-\e$B$rJV$7$^$9!#\e(B
+\e$B$3$N4X?t$N7k2L$N%G!<%?$O!"\e(B@var{article} \e$B$G;XDj$5$l$?5-;v$G$9!#$3$N;XDj\e(B
+\e$B$O\e(B @code{Message-ID} \e$B$+HV9f$N$$$:$l$+$G$9!#\e(B@code{Message-ID} \e$B$K$h$k5-;v\e(B
+\e$B$N<hF@$r<BAu$9$k$+$I$&$+$OG$0U$G$9$,!"2DG=$G$"$k$H4r$7$$$G$9$M!#\e(B
 
+@var{to-buffer} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"7k2L$N%G!<%?$ODL>o$N%G!<%?%P%C\e(B
+\e$B%U%!$NBe$o$j$K!"$3$N%P%C%U%!$KJV$5$l$^$9!#$3$l$K$h$jB?NL$N%G!<%?$r$"$k%P%C\e(B
+\e$B%U%!$+$iJL$N%P%C%U%!$K%3%T!<$9$k$3$H$rHr$1$k$3$H$,$G$-!"$=$7$F\e(B gnus \e$B$ODL\e(B
+\e$B>o!"5-;v%P%C%U%!$KD>@\5-;v$rA^F~$9$k$h$&$KMW5a$7$F$$$^$9!#\e(B
+
+\e$B$b$72DG=$G$"$k$N$J$i!"$3$N4X?t$O!"\e(B@code{car}\e$B$,<hF@$7$?5-;v$N$"$k%0%k!<%W\e(B
+\e$BL>$G!"\e(B@code{cdr} \e$B$,5-;vHV9f$G$"$k\e(B cons \e$B%;%k$rJV$9$Y$-$G$9!#$3$l$K$h\e(B
+\e$B$j\e(B @code{Message-ID} \e$B$K$h$C$F5-;v$r<hF@$7$?$H$-!"\e(Bgnus \e$B$,K\Ev$N%0%k!<%W$H\e(B
+\e$B5-;vHV9f$rCN$k$3$H$,$G$-$k$h$&$K$J$k$G$7$g$&!#$3$l$,IT2DG=$J>l9g$K$O!"5-\e(B
+\e$B;v$N<hF@$,@.8y$7$?$H$-$O\e(B @code{t} \e$B$rJV$7$^$9!#\e(B
 
 @item (nnchoke-request-group GROUP &optional SERVER FAST)
 
-@var{group} \e$B$N%G!<%?$r<hF@$7$^$9!#$3$N4X?t$O!"\e(B@var{group} \e$B$r8=:_\e(B
-\e$B$N%0%k!<%W$K$9$k!"$H$$$&I{:nMQ$b$"$j$^$9!#\e(B
+@var{group} \e$B$N%G!<%?$r<hF@$7$^$9!#$3$N4X?t$O!"\e(B@var{group} \e$B$r8=:_$N%0%k!<\e(B
+\e$B%W$K$9$k!"$H$$$&I{:nMQ$b$"$j$^$9!#\e(B
 
 @var{fast} \e$B$,$"$l$P!"JXMx$J%G!<%?$rJV$9LLE]$r9T$J$o$:$K!"C1$K\e(B
 @var{group} \e$B$r8=:_$N%0%k!<%W$K$7$^$9!#\e(B
@@ -20574,13 +21526,13 @@ gnus \e$B$,K\Ev$N%0%k!<%W$H5-;vHV9f$rCN$k$3$H$,$G$-$k$h$&$K$J$k$G$7$g\e(B
 211 56 1000 1059 ifi.discussion
 @end example
 
-\e$B:G=i$N?t;z$O>uBV$G!"$3$l$O\e(B 211 \e$B$G$J$/$F$O$J$j$^$;$s!#<!$O$=$N%0\e(B
-\e$B%k!<%W$K$"$k5-;v$NAm?t!":G>.$N5-;vHV9f!":GBg$N5-;vHV9f!"$=$7$F:G\e(B
-\e$B8e$,%0%k!<%WL>$G$9!#5-;v$NAm?t$O!":GBg!&:G>.5-;vHV9f$+$iC1=c$K9M\e(B
-\e$B$($i$l$k?t$h$j$b>.$5$$$3$H$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#$$$/$D$+\e(B
-\e$B$N5-;v$O<h$j>C$5$l$F$$$k$+$b$7$l$^$;$s!#\e(BGnus \e$B$OAm?t$OC1$K<N$F$F\e(B
-\e$B$7$^$C$F$$$k$N$G!"\e(B(\e$B$b$7$=$l$,LdBj$H$J$k$H$-$K\e(B) \e$B@5$7$$CM$r@8@.$9\e(B
-\e$B$kLLE]$rIi$&$Y$-$+$I$&$+$O!"FI<T$X$N2]Bj$H$7$F;D$7$F$"$j$^$9!#\e(B
+\e$B:G=i$N?t;z$O>uBV$G!"$3$l$O\e(B 211 \e$B$G$J$/$F$O$J$j$^$;$s!#<!$O$=$N%0%k!<%W$K\e(B
+\e$B$"$k5-;v$NAm?t!":G>.$N5-;vHV9f!":GBg$N5-;vHV9f!"$=$7$F:G8e$,%0%k!<%WL>$G\e(B
+\e$B$9!#5-;v$NAm?t$O!":GBg!&:G>.5-;vHV9f$+$iC1=c$K9M$($i$l$k?t$h$j$b>.$5$$$3\e(B
+\e$B$H$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#$$$/$D$+$N5-;v$O<h$j>C$5$l$F$$$k$+$b$7$l\e(B
+\e$B$^$;$s!#\e(BGnus \e$B$OAm?t$OC1$K<N$F$F$7$^$C$F$$$k$N$G!"\e(B(\e$B$b$7$=$l$,LdBj$H$J$k$H\e(B
+\e$B$-$K\e(B) \e$B@5$7$$CM$r@8@.$9$kLLE]$rIi$&$Y$-$+$I$&$+$O!"FI<T$X$N2]Bj$H$7$F;D$7\e(B
+\e$B$F$"$j$^$9!#\e(B
 
 @example
 group-status = [ error / info ] eol
@@ -20588,15 +21540,13 @@ error        = [ "4" / "5" ] 2<number> " " <Error message>
 info         = "211 " 3* [ <number> " " ] <string>
 @end example
 
-
 @item (nnchoke-close-group GROUP &optional SERVER)
 
-@var{group} \e$B$rJD$8!"$=$l$K@\B3$5$l$F$$$kA4$F$N;q8;$r3+J|$7$^$9!#\e(B
-\e$B$3$l$O$[$H$s$I$N%P%C%/%(%s%I$G$O2?$b$9$k$3$H$,$J$$$G$7$g$&!#\e(B
+@var{group} \e$B$rJD$8!"$=$l$K@\B3$5$l$F$$$kA4$F$N;q8;$r3+J|$7$^$9!#$3$l$O$[\e(B
+\e$B$H$s$I$N%P%C%/%(%s%I$G$O2?$b$9$k$3$H$,$J$$$G$7$g$&!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-list &optional SERVER)
 
 @var{server} \e$B>e$GMxMQ2DG=$JA4$F$N%0%k!<%W$N0lMw$rJV$7$^$9!#$3$l\e(B
@@ -20609,8 +21559,8 @@ ifi.test 0000002200 0000002000 y
 ifi.discussion 3324 3300 n
 @end example
 
-\e$B3F9T$K$O%0%k!<%WL>$,$"$j!"$=$7$F$=$N%0%k!<%WFb$N:GBg$N5-;vHV9f!"\e(B
-\e$B:G>.$N5-;vHV9f!"$=$7$F:G8e$K%U%i%0$G$9!#\e(B
+\e$B3F9T$K$O%0%k!<%WL>$,$"$j!"$=$7$F$=$N%0%k!<%WFb$N:GBg$N5-;vHV9f!":G>.$N5-\e(B
+\e$B;vHV9f!"$=$7$F:G8e$K%U%i%0$G$9!#\e(B
 
 @example
 active-file = *active-line
@@ -20619,26 +21569,23 @@ name        = <string>
 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
 @end example
 
-\e$B%U%i%0$O!"$=$N%0%k!<%W$,FI$_=P$7@lMQ\e(B (@samp{n}) \e$B$G$"$k$+!";J2q<T\e(B
-\e$BIU$-\e(B (@samp{m}) \e$B$G$"$k$+!";`$s$G$$$k\e(B (@samp{x}) \e$B$+!"$I$3$+B>$N%0\e(B
-\e$B%k!<%W$NJLL>\e(B (@samp{=other-group}) \e$B$G$"$k$+!">e5-$N$I$l$G$b$J$$\e(B
-(@samp{y}) \e$B$+!"$H$$$&$3$H$r<($7$F$$$^$9!#\e(B
-
+\e$B%U%i%0$O!"$=$N%0%k!<%W$,FI$_=P$7@lMQ\e(B (@samp{n}) \e$B$G$"$k$+!";J2q<TIU\e(B
+\e$B$-\e(B (@samp{m}) \e$B$G$"$k$+!";`$s$G$$$k\e(B (@samp{x}) \e$B$+!"$I$3$+B>$N%0%k!<%W$NJL\e(B
+\e$BL>\e(B (@samp{=other-group}) \e$B$G$"$k$+!">e5-$N$I$l$G$b$J$$\e(B (@samp{y}) \e$B$+!"$H\e(B
+\e$B$$$&$3$H$r<($7$F$$$^$9!#\e(B
 
 @item (nnchoke-request-post &optional SERVER)
 
-\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$rEj9F$7$^$9!#$3$l$OEj9F$,@.8y$7$?$+$I\e(B
-\e$B$&$+$rJV5Q$7$F$b9=$$$^$;$s$,!"I,?\$G$O$"$j$^$;$s!#Nc$($P!"Ej9F$,\e(B
-\e$BHsF14|$K9T$o$l$k$N$G$"$l$P!"$3$N4X?t$,=*N;$7$?;~E@$G$OEj9F$OIaDL\e(B
-\e$B40N;$7$F$$$^$;$s!#$=$N>l9g$3$N4X?t$O!"Ej9F$r40N;$5$;$k$3$H$,$G$-\e(B
-\e$B$J$$$H$-!"$=$l$r$O$C$-$j$HMxMQ<T$KCN$i$;$k8+D%$j4X?t$N$h$&$J$b$N\e(B
-\e$B$r@_Dj$9$k$Y$-$G$7$g$&!#\e(B
+\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$rEj9F$7$^$9!#$3$l$OEj9F$,@.8y$7$?$+$I$&$+$rJV\e(B
+\e$B5Q$7$F$b9=$$$^$;$s$,!"I,?\$G$O$"$j$^$;$s!#Nc$($P!"Ej9F$,HsF14|$K9T$o$l$k\e(B
+\e$B$N$G$"$l$P!"$3$N4X?t$,=*N;$7$?;~E@$G$OEj9F$OIaDL40N;$7$F$$$^$;$s!#$=$N>l\e(B
+\e$B9g$3$N4X?t$O!"Ej9F$r40N;$5$;$k$3$H$,$G$-$J$$$H$-!"$=$l$r$O$C$-$j$HMxMQ<T\e(B
+\e$B$KCN$i$;$k8+D%$j4X?t$N$h$&$J$b$N$r@_Dj$9$k$Y$-$G$7$g$&!#\e(B
 
 \e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
 @end table
 
-
 @node Optional Backend Functions
 @subsubsection \e$BG$0U%P%C%/%(%s%I4X?t\e(B
 
@@ -20652,8 +21599,8 @@ flags       = "n" / "y" / "m" / "x" / "j" / "=" name
 \e$B$P$J$j$^$;$s!#\e(B
 
 \e$B$3$N4X?t$NJV5QCM$O\e(B @code{active} \e$B$+\e(B @code{group} \e$B$N$$$:$l$+$G!"\e(B
-\e$B7k2L$N%G!<%?$N7A<0$,2?$G$"$k$+$r<($7$^$9!#A0<T$O\e(B
-@code{nnchoke-request-list} \e$B$K$h$k%G!<%?$HF1$87A<0$G$"$j!"0lJ}8e\e(B
+\e$B7k2L$N%G!<%?$N7A<0$,2?$G$"$k$+$r<($7$^$9!#A0<T\e(B
+\e$B$O\e(B @code{nnchoke-request-list} \e$B$K$h$k%G!<%?$HF1$87A<0$G$"$j!"0lJ}8e\e(B
 \e$B<T$O\e(B @code{nnchoke-request-group} \e$B$,M?$($k$b$N$HF1$87A<0$N9T$G%P%C\e(B
 \e$B%U%!$OKd$a$i$l$^$9!#\e(B
 
@@ -20661,29 +21608,27 @@ flags       = "n" / "y" / "m" / "x" / "j" / "=" name
 group-buffer = *active-line / *group-status
 @end example
 
-
 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
 
 Gnus \e$B%0%k!<%W>pJs\e(B (@pxref{Group Info}) \e$B$,JQ992U=j$H$7$F%P%C%/%(\e(B
 \e$B%s%I$KEO$5$l$^$9!#$3$l$O%P%C%/%(%s%I$,\e(B (\e$B2>A[%0%k!<%W$d\e(B imap \e$B%0%k!<\e(B
 \e$B%W$N>l9g$N$h$&$K\e(B) \e$BK\Ev$KA4$F$N>pJs$r;}$C$F$$$k>l9g$KJXMx$K$J$j$^\e(B
-\e$B$9!#$3$N4X?t$O!"$=$NMW5a$KE,9g$5$;$k>pJs$rGK2uE*$KCV$-49$(!"$=$N\e(B
-(\e$BCV$-49$($i$l$?\e(B) \e$B%0%k!<%W>pJs$rJV$7$^$9!#\e(B
+\e$B$9!#$3$N4X?t$O!"$=$NMW5a$KE,9g$5$;$k>pJs$rGK2uE*$KCV$-49$(!"$=\e(B
+\e$B$N\e(B (\e$BCV$-49$($i$l$?\e(B) \e$B%0%k!<%W>pJs$rJV$7$^$9!#\e(B
 
 \e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-type GROUP &optional ARTICLE)
 
-\e$BMxMQ<T$,\e(B ``\e$B%K%e!<%9$rAw?.$9$k\e(B'' \e$BL?Na\e(B (\e$BNc$($P!"35N,%P%C%U%!$G\e(B
-@kbd{F}) \e$B$r<B9T$7$?$H$-!"\e(Bgnus \e$B$OMxMQ<T$,%U%)%m!<%"%C%W$7$h$&$H$7\e(B
-\e$B$F$$$k5-;v$,%K%e!<%9$G$"$k$+%a!<%k$G$"$k$+$rCN$i$J$/$F$O$J$j$^$;\e(B
-\e$B$s!#$3$N4X?t$O\e(B @var{group} \e$B$NCf$N\e(B @var{article} \e$B$,%K%e!<%9$G$"$l\e(B
-\e$B$P\e(B @code{news} \e$B$r!"%a!<%k$G$"$l$P\e(B @code{mail} \e$B$r!"$=$N<oJL$r7hDj\e(B
-\e$B$G$-$J$1$l$P\e(B @code{unknown} \e$B$rJV5Q$7$^$9!#\e(B(@var{article} \e$B0z?t$O!"\e(B
-\e$B%a!<%k%0%k!<%W$H%K%e!<%9%0%k!<%W$,$4$A$c$^$<$K$J$C$F$k$+$b$7$l$J\e(B
-\e$B$$\e(B @code{nnvirtual} \e$B$K$*$$$FI,MW$G$9!#\e(B) @var{group} \e$B$H\e(B
-@var{article} \e$B$ON>J}$H$b\e(B @code{nil} \e$B$G$"$k$+$b$7$l$^$;$s!#\e(B
+\e$BMxMQ<T$,\e(B ``\e$B%K%e!<%9$rAw?.$9$k\e(B'' \e$BL?Na\e(B (\e$BNc$($P!"35N,%P%C%U%!$G\e(B @kbd{F}) \e$B$r\e(B
+\e$B<B9T$7$?$H$-!"\e(Bgnus \e$B$OMxMQ<T$,%U%)%m!<%"%C%W$7$h$&$H$7$F$$$k5-;v$,%K%e!<\e(B
+\e$B%9$G$"$k$+%a!<%k$G$"$k$+$rCN$i$J$/$F$O$J$j$^$;$s!#$3$N4X?t\e(B
+\e$B$O\e(B @var{group} \e$B$NCf$N\e(B @var{article} \e$B$,%K%e!<%9$G$"$l$P\e(B @code{news} \e$B$r!"\e(B
+\e$B%a!<%k$G$"$l$P\e(B @code{mail} \e$B$r!"$=$N<oJL$r7hDj$G$-$J$1$l\e(B
+\e$B$P\e(B @code{unknown} \e$B$rJV5Q$7$^$9!#\e(B(@var{article} \e$B0z?t$O!"%a!<%k%0%k!<%W$H\e(B
+\e$B%K%e!<%9%0%k!<%W$,$4$A$c$^$<$K$J$C$F$k$+$b$7$l$J$$\e(B @code{nnvirtual} \e$B$K$*\e(B
+\e$B$$$FI,MW$G$9!#\e(B) @var{group} \e$B$H\e(B@var{article} \e$B$ON>J}$H$b\e(B @code{nil} \e$B$G$"$k\e(B
+\e$B$+$b$7$l$^$;$s!#\e(B
 
 \e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
@@ -20700,19 +21645,19 @@ ACTION \e$B$O$3$N$h$&$JMM<0$N0u@_Dj$NMW5a$N%j%9%H$G$9\e(B:
 (RANGE ACTION MARK)
 @end example
 
-RANGE \e$B$O0u$rIU$1$?$$5-;v$NHO0O$G$9!#\e(BACTION \e$B$O\e(B @code{set}, @code{add},
-@code{del} \e$B$N$I$l$+$G!"$=$l$>$lA4$F$NB8:_$9$k0u$r>C5n$7$F!";XDj$5$l$?$h\e(B
-\e$B$&$K@_Dj!"0u$NDI2C\e(B (\e$B8@5Z$5$l$F$$$J$$0u$OJ]B8$7$^$9\e(B)\e$B!"0u$N>C5n\e(B (\e$B8@5Z$5$l\e(B
-\e$B$F$$$J$$0u$OJ]B8$7$^$9\e(B) \e$B$G$9!#\e(BMARK \e$B$O0u$N%j%9%H$G$9!#$=$l$>$l$N0u$O%7%s\e(B
-\e$B%\%k$G$9!#8=:_;H$o$l$F$$$k0u$O\e(B @code{read}, @code{tick}, @code{reply},
-@code{expire}, @code{killed}, @code{dormant}, @code{save},
-@code{download}, @code{unsend} \e$B$G$9$,!"$b$72DG=$J$i!"$"$J$?$N%P%C%/%(%s\e(B
-\e$B%I$O$3$l$i$K@)8B$r$9$k$Y$-$G$O$"$j$^$;$s!#\e(B
+RANGE \e$B$O0u$rIU$1$?$$5-;v$NHO0O$G$9!#\e(B
+ACTION \e$B$O\e(B @code{set}, @code{add}, @code{del} \e$B$N$I$l$+$G!"$=$l$>$lA4$F$N\e(B
+\e$BB8:_$9$k0u$r>C5n$7$F!";XDj$5$l$?$h$&$K@_Dj!"0u$NDI2C\e(B (\e$B8@5Z$5$l$F$$$J$$0u\e(B
+\e$B$OJ]B8$7$^$9\e(B)\e$B!"0u$N>C5n\e(B (\e$B8@5Z$5$l$F$$$J$$0u$OJ]B8$7$^$9\e(B) \e$B$G$9!#\e(BMARK \e$B$O0u\e(B
+\e$B$N%j%9%H$G$9!#$=$l$>$l$N0u$O%7%s%\%k$G$9!#8=:_;H$o$l$F$$$k0u\e(B
+\e$B$O\e(B @code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed}, @code{dormant}, @code{save}, @code{download}, @code{unsend} \e$B$G\e(B
+\e$B$9$,!"$b$72DG=$J$i!"$"$J$?$N%P%C%/%(%s%I$O$3$l$i$K@)8B$r$9$k$Y$-$G$O$"$j\e(B
+\e$B$^$;$s!#\e(B
 
 \e$BL7=b$9$kF0:n$,;XDj$5$l$?$H$-!"%j%9%H$N:G8e$NF0:n$,8zNO$r;}$D$b$N$K$J$j$^\e(B
-\e$B$9!#$9$J$o$A!"F0:n$K5-;v\e(B1\e$B$K\e(B @code{\e$B2D;k\e(B} \e$B0u$rDI2C$9$kMW5a$,$"$j!"%j%9%H$N\e(B
-\e$B8e$GF1$85-;v$+$i0u$r>C5n$9$k$3$H$rMW5a$7$F$$$l$P!"0u$O<B:]$K>C5n$5$l$k$Y\e(B
-\e$B$-$G$9!#\e(B
+\e$B$9!#$9$J$o$A!"F0:n$K5-;v\e(B 1 \e$B$K\e(B @code{\e$B2D;k\e(B} \e$B0u$rDI2C$9$kMW5a$,$"$j!"%j%9%H\e(B
+\e$B$N8e$GF1$85-;v$+$i0u$r>C5n$9$k$3$H$rMW5a$7$F$$$l$P!"0u$O<B:]$K>C5n$5$l$k\e(B
+\e$B$Y$-$G$9!#\e(B
 
 \e$BF0:n%j%9%H$NNc$G$9\e(B:
 
@@ -20729,35 +21674,31 @@ RANGE \e$B$O0u$rIU$1$?$$5-;v$NHO0O$G$9!#\e(BACTION \e$B$O\e(B @code{set}, @code{add}
 
 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
 
-\e$B$b$7MxMQ<T$,!"$3$N%P%C%/%(%s%I$N5$$KF~$i$J$$0u$r@_Dj$7$h$&$H$7$?\e(B
-\e$B$i!"$3$N4X?t$,0u$rJQ99$9$k$3$H$,$G$-$^$9!#\e(BGnus \e$B$O$b$H$N\e(B
-@var{mark} \e$B$NBe$o$j$K!"$3$N4X?t$,JV$7$?$b$N$r\e(B @var{article} \e$B$X$N\e(B
-\e$B0u$H$7$F;H$$$^$9!#%P%C%/%(%s%I$,5$$K$9$k$3$H$,FC$K$J$1$l$P!"85$N\e(B
-@var{mark} \e$B$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B@code{nil} \e$B$d$=$NB>$N%4%_$r\e(B
-\e$BJV$7$F$O$$$1$^$;$s!#\e(B
+\e$B$b$7MxMQ<T$,!"$3$N%P%C%/%(%s%I$N5$$KF~$i$J$$0u$r@_Dj$7$h$&$H$7$?$i!"$3$N\e(B
+\e$B4X?t$,0u$rJQ99$9$k$3$H$,$G$-$^$9!#\e(BGnus \e$B$O$b$H$N\e(B @var{mark} \e$B$NBe$o$j$K!"\e(B
+\e$B$3$N4X?t$,JV$7$?$b$N$r\e(B @var{article} \e$B$X$N0u$H$7$F;H$$$^$9!#%P%C%/%(%s%I\e(B
+\e$B$,5$$K$9$k$3$H$,FC$K$J$1$l$P!"85$N\e(B @var{mark} \e$B$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B
+@code{nil} \e$B$d$=$NB>$N%4%_$rJV$7$F$O$$$1$^$;$s!#\e(B
 
-\e$B;d$,CN$C$F$$$k$3$l$N$3$l$NMxMQK!$O!"\e(B@code{nnvirtual} \e$B$,9T$J$C$F\e(B
-\e$B$$$k$3$H$@$1$G$9\e(B --- \e$B$b$79=@.%0%k!<%W$,<+F04|8B@Z$l>C5n2DG=$G$"\e(B
-\e$B$l$P!"$3$N2>A[%0%k!<%W$G4{FI$N0u$rIU$1$k$H!"7k2L$H$7$F$=$N5-;v$K\e(B
-\e$B4|8B@Z$l>C5n$N0u$,IU$1$i$l$^$9!#\e(B
+\e$B;d$,CN$C$F$$$k$3$l$N$3$l$NMxMQK!$O!"\e(B@code{nnvirtual} \e$B$,9T$J$C$F$$$k$3$H\e(B
+\e$B$@$1$G$9\e(B --- \e$B$b$79=@.%0%k!<%W$,<+F04|8B@Z$l>C5n2DG=$G$"$l$P!"$3$N2>A[%0\e(B
+\e$B%k!<%W$G4{FI$N0u$rIU$1$k$H!"7k2L$H$7$F$=$N5-;v$K4|8B@Z$l>C5n$N0u$,IU$1$i\e(B
+\e$B$l$^$9!#\e(B
 
 \e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-scan &optional GROUP SERVER)
 
-\e$B$3$N4X?t$O!"%P%C%/%(%s%I$,E~Ce5-;v$r3NG'$9$kMW5a$r9T$J$&$H$-$K$$\e(B
-\e$B$D$G$b\e(B (gnus \e$B$+$=$l0J30$K$h$C$F\e(B) \e$B!"$"$l$d$3$l$d$H8F$S=P$5$l$k$3\e(B
-\e$B$H$,$"$j$^$9!#%a!<%k%P%C%/%(%s%I$O$3$N4X?t$,5/F0$5$l$?$H$-!"E57?\e(B
-\e$BE*$K$O%9%W!<%k%U%!%$%k$rFI$`$+\e(B POP \e$B%5!<%P!<$KLd$$9g$o$;$K$$$-$^\e(B
-\e$B$9!#\e(B@var{group} \e$B$OFC$K5$$KN1$a$kI,MW$O$"$j$^$;$s\e(B --- \e$B$b$7%P%C%/\e(B
-\e$B%(%s%I$,!"0l$D$@$1$N%0%k!<%W$rAv::$9$k$N$OBgJQ$9$.$k$HH=CG$7$?>l\e(B
-\e$B9g$K$O!"A4%0%k!<%W$NA4Av::$r9T$J$C$F$b9=$$$^$;$s!#$G$9$,!"<BMQE*\e(B
-\e$B$K$G$-$l$P$=$l$r6I=jE*$KJD$8$F$*$/J}$,NI$$$G$7$g$&!#\e(B
+\e$B$3$N4X?t$O!"%P%C%/%(%s%I$,E~Ce5-;v$r3NG'$9$kMW5a$r9T$J$&$H$-$K$$$D$G\e(B
+\e$B$b\e(B (gnus \e$B$+$=$l0J30$K$h$C$F\e(B)\e$B!"$"$l$d$3$l$d$H8F$S=P$5$l$k$3$H$,$"$j$^$9!#\e(B
+\e$B%a!<%k%P%C%/%(%s%I$O$3$N4X?t$,5/F0$5$l$?$H$-!"E57?E*$K$O%9%W!<%k%U%!%$%k\e(B
+\e$B$rFI$`$+\e(B POP \e$B%5!<%P!<$KLd$$9g$o$;$K$$$-$^$9!#\e(B@var{group} \e$B$OFC$K5$$KN1$a\e(B
+\e$B$kI,MW$O$"$j$^$;$s\e(B --- \e$B$b$7%P%C%/%(%s%I$,!"0l$D$@$1$N%0%k!<%W$rAv::$9$k\e(B
+\e$B$N$OBgJQ$9$.$k$HH=CG$7$?>l9g$K$O!"A4%0%k!<%W$NA4Av::$r9T$J$C$F$b9=$$$^$;\e(B
+\e$B$s!#$G$9$,!"<BMQE*$K$G$-$l$P$=$l$r6I=jE*$KJD$8$F$*$/J}$,NI$$$G$7$g$&!#\e(B
 
 \e$B$3$N4X?t$KJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-group-description GROUP &optional SERVER)
 
 \e$B$3$N4X?t$K$h$C$FJV$5$l$k7k2L$N%G!<%?$O!"\e(B@var{group} \e$B$N@bL@$G$9!#\e(B
@@ -20777,88 +21718,78 @@ description      = <text>
 description-buffer = *description-line
 @end example
 
-
 @item (nnchoke-request-newgroups DATE &optional SERVER)
 
 \e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O!"\e(B@samp{date} \e$B0J9_$K:n@.$5$l$?\e(B
 \e$BA4$F$N%0%k!<%W$G$9!#\e(B@samp{date} \e$B$ODL>o$N?M4V$,FI$a$kF|IU$N7A<0$G\e(B
 \e$B$9!#%G!<%?$O\e(B active \e$B%P%C%U%!$N7A<0$G$J$1$l$P$J$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-create-group GROUP &optional SERVER)
 
 \e$B$3$N4X?t$O!"\e(B@var{group} \e$B$H$$$&L>A0$N6u$N%0%k!<%W$r:n@.$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
 
-\e$B$3$N4X?t$O!"\e(B@var{articles} \e$B$NHO0O$NA4$F$N5-;v$KBP$7$F4|8B@Z$l>C\e(B
-\e$B5n=hM}$r9T$J$$$^$9!#\e(B (@var{articles} \e$B$O8=:_$O5-;vHV9f$NC1=c$J%j\e(B
-\e$B%9%H$G$9!#\e(B) \e$B$3$N4X?t$G>C5n$5$l$kA0$N!"5-;v$,$I$l$@$18E$$5-;v$G$"\e(B
-\e$B$k$+$N7hDj$O%P%C%/%(%s%I$KG$$5$l$F$$$^$9!#\e(B@var{force} \e$B$,\e(B
-@code{nil} \e$B0J30$G$"$l$P!"$=$l$,$I$s$J$K?7$7$$$b$N$G$"$C$F$b!"A4\e(B
-\e$B$F$N\e(B @var{articles} \e$B$,>C5n$5$l$^$9!#\e(B
+\e$B$3$N4X?t$O!"\e(B@var{articles} \e$B$NHO0O$NA4$F$N5-;v$KBP$7$F4|8B@Z$l>C5n=hM}$r\e(B
+\e$B9T$J$$$^$9!#\e(B(@var{articles} \e$B$O8=:_$O5-;vHV9f$NC1=c$J%j%9%H$G$9!#\e(B) \e$B$3$N\e(B
+\e$B4X?t$G>C5n$5$l$kA0$N!"5-;v$,$I$l$@$18E$$5-;v$G$"$k$+$N7hDj$O%P%C%/%(%s%I\e(B
+\e$B$KG$$5$l$F$$$^$9!#\e(B@var{force} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$=$l$,$I$s$J$K\e(B
+\e$B?7$7$$$b$N$G$"$C$F$b!"A4$F$N\e(B@var{articles} \e$B$,>C5n$5$l$^$9!#\e(B
 
-\e$B$3$N4X?t$O:o=|$7$J$+$C$?!"$"$k$$$O:o=|$9$k$3$H$,$G$-$J$+$C$?5-;v\e(B
-\e$B$N%j%9%H$rJV$7$^$9!#\e(B
+\e$B$3$N4X?t$O:o=|$7$J$+$C$?!"$"$k$$$O:o=|$9$k$3$H$,$G$-$J$+$C$?5-;v$N%j%9%H\e(B
+\e$B$rJV$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
 &optional LAST)
 
-\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r!"\e(B @var{group} \e$B$+$i\e(B
-@var{accept-form} \e$B$r8F$S=P$7$F0\F0$7$^$9!#\e(B
+\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r!"\e(B@var{group} \e$B$+\e(B
+\e$B$i\e(B @var{accept-form} \e$B$r8F$S=P$7$F0\F0$7$^$9!#\e(B
 
-\e$B$3$N4X?t$O!"LdBj$N5-;v$r0\F0$5$;$k$?$a$N=`Hw$H$7$F!"5-;v$KIU2C$5\e(B
-\e$B$l$?%X%C%@!<9T$rA4$F:o=|$7!"0lHL$K5-;v$r!V$-$l$$$5$C$Q$j!W$K$7$^\e(B
-\e$B$9!#$=$7$F\e(B ``\e$B$-$l$$$J\e(B'' \e$B5-;v$N$"$k%P%C%U%!!<$G\e(B @var{accept-form}
-\e$B$r\e(B @code{eval} \e$B$7$^$9!#$3$l$OK\Ev$KJ#@=$r9T$J$$$^$9!#$b$7\e(B
-@code{eval} \e$B$,\e(B @code{nil} \e$B0J30$NCM$rJV$7$?$i!"$=$N5-;v$O:o=|$5$l\e(B
-\e$B$^$;$s!#\e(B
+\e$B$3$N4X?t$O!"LdBj$N5-;v$r0\F0$5$;$k$?$a$N=`Hw$H$7$F!"5-;v$KIU2C$5$l$?%X%C\e(B
+\e$B%@!<9T$rA4$F:o=|$7!"0lHL$K5-;v$r!V$-$l$$$5$C$Q$j!W$K$7$^$9!#$=$7$F\e(B ``\e$B$-\e(B
+\e$B$l$$$J\e(B'' \e$B5-;v$N$"$k%P%C%U%!!<$G\e(B @var{accept-form} \e$B$r\e(B @code{eval} \e$B$7$^$9!#\e(B
+\e$B$3$l$OK\Ev$KJ#@=$r9T$J$$$^$9!#$b$7\e(B @code{eval} \e$B$,\e(B @code{nil} \e$B0J30$NCM$r\e(B
+\e$BJV$7$?$i!"$=$N5-;v$O:o=|$5$l$^$;$s!#\e(B
 
-@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$ND>8e$K$5$i$KMW5a$,H/9T$5\e(B
-\e$B$l$k8+9~$_$,9b$$!"$H$$$&0UL#$K$J$j!"$3$l$K$h$C$F:GE,2=$,$$$/$i$+\e(B
-\e$B$G$-$k$h$&$K$J$j$^$9!#\e(B
+@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$ND>8e$K$5$i$KMW5a$,H/9T$5$l$k8+9~\e(B
+\e$B$_$,9b$$!"$H$$$&0UL#$K$J$j!"$3$l$K$h$C$F:GE,2=$,$$$/$i$+$G$-$k$h$&$K$J$j\e(B
+\e$B$^$9!#\e(B
 
-\e$B$3$N4X?t$O!"%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV\e(B
-\e$B9f$,\e(B @code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
+\e$B$3$N4X?t$O!"%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV9f$,\e(B
+@code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-accept-article GROUP &optional SERVER LAST)
 
-\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$r<h$j!"$=$l$r\e(B @var{group} \e$B$NCf$KA^F~\e(B
-\e$B$7$^$9!#\e(B@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$N4X?t$X$N$5$i$J$k\e(B
-\e$B8F$S=P$7$,D>$A$K9T$o$l$k$H$$$&0UL#$G$9!#\e(B
+\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$r<h$j!"$=$l$r\e(B @var{group} \e$B$NCf$KA^F~$7$^$9!#\e(B
+@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$N4X?t$X$N$5$i$J$k8F$S=P$7$,D>$A$K\e(B
+\e$B9T$o$l$k$H$$$&0UL#$G$9!#\e(B
 
-\e$B$3$N4X?t$O%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV9f\e(B
-\e$B$,\e(B @code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
+\e$B$3$N4X?t$O%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV9f$,\e(B
+@code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
 
-\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r\e(B @var{group} \e$B$+$i:o=|$7!"Be$o\e(B
-\e$B$j$K\e(B @var{buffer} \e$B$r$=$3$KA^F~$7$^$9!#\e(B
+\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r\e(B @var{group} \e$B$+$i:o=|$7!"Be$o$j$K\e(B
+@var{buffer} \e$B$r$=$3$KA^F~$7$^$9!#\e(B
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
 
-\e$B$3$N4X?t$O\e(B @var{group} \e$B$r>C5n$7$^$9!#\e(B \e$B$b$7\e(B @var{force} \e$B$,$"$l$P!"\e(B
-\e$B$=$N%0%k!<%WFb$NA4$F$N5-;v$rK\Ev$K>C5n$7!"$=$7$F$=$N%0%k!<%W<+?H\e(B
-\e$B$r>C5n$7$^$9!#\e(B (\e$B$b$7\e(B ``\e$B%0%k!<%W<+?H\e(B'' \e$B$H$$$&$b$N$,$"$l$P!#\e(B)
+\e$B$3$N4X?t$O\e(B @var{group} \e$B$r>C5n$7$^$9!#$b$7\e(B @var{force} \e$B$,$"$l$P!"$=$N%0\e(B
+\e$B%k!<%WFb$NA4$F$N5-;v$rK\Ev$K>C5n$7!"$=$7$F$=$N%0%k!<%W<+?H$r>C5n$7$^$9!#\e(B
+(\e$B$b$7\e(B ``\e$B%0%k!<%W<+?H\e(B'' \e$B$H$$$&$b$N$,$"$l$P!#\e(B)
 
 \e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
 
-
 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
 
 \e$B$3$N4X?t$O\e(B @var{group} \e$B$+$i\e(B @var{new-name} \e$B$KL>A0$rJQ99$7$^$9!#\e(B
@@ -20868,18 +21799,16 @@ description-buffer = *description-line
 
 @end table
 
-
 @node Error Messaging
 @subsubsection \e$B%(%i!<%a%C%;!<%8I=<(\e(B
 
 @findex nnheader-report
 @findex nnheader-get-report
-\e$B%P%C%/%(%s%I$O%(%i!<>u67$rJs9p$9$k$N$K\e(B @code{nnheader-report} \e$B$r\e(B
-\e$B;H$o$J$/$F$O$J$j$^$;$s\e(B --- \e$BMW5a$r<B9T$G$-$J$$$H$-$K%(%i!<$r@85/\e(B
-\e$B$5$;$F$O$$$1$^$;$s!#$3$N4X?t$N:G=i$N0z?t$O%P%C%/%(%s%IL>$N%7%s%\\e(B
-\e$B%k$G!";D$j$O!"J#?t$N0z?t$,$"$l$P\e(B @code{format} \e$B$X$N0z?t$H$7$F2r\e(B
-\e$B<a$5$l!"0l$D$G$"$l$P$?$@$NJ8;zNs$K$J$j$^$9!#$3$N4X?t$O>o$K\e(B
-@code{nil} \e$B$rJV$5$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B%P%C%/%(%s%I$O%(%i!<>u67$rJs9p$9$k$N$K\e(B @code{nnheader-report} \e$B$r;H$o$J$/\e(B
+\e$B$F$O$J$j$^$;$s\e(B --- \e$BMW5a$r<B9T$G$-$J$$$H$-$K%(%i!<$r@85/$5$;$F$O$$$1$^$;\e(B
+\e$B$s!#$3$N4X?t$N:G=i$N0z?t$O%P%C%/%(%s%IL>$N%7%s%\%k$G!";D$j$O!"J#?t$N0z?t\e(B
+\e$B$,$"$l$P\e(B @code{format} \e$B$X$N0z?t$H$7$F2r<a$5$l!"0l$D$G$"$l$P$?$@$NJ8;zNs\e(B
+\e$B$K$J$j$^$9!#$3$N4X?t$O>o$K\e(B@code{nil} \e$B$rJV$5$J$/$F$O$J$j$^$;$s!#\e(B
 
 @lisp
 (nnheader-report 'nnchoke "You did something totally bogus")
@@ -20887,60 +21816,59 @@ description-buffer = *description-line
 (nnheader-report 'nnchoke "Could not request group %s" group)
 @end lisp
 
-\e$B0lJ}\e(B gnus \e$B$O!"%5!<%P!<$+$i\e(B @code{nil} \e$B$rJV$5$l$?$H$-$K\e(B
-@code{nnheader-get-report} \e$B$r8F$S=P$7!"$=$7$F$3$N4X?t$,LdBj$N%P%C\e(B
-\e$B%/%(%s%I$KBP$7$F:G8e$KJs9p$5$l$?%a%C%;!<%8$rJV$7$^$9!#$3$N4X?t$O\e(B
-\e$B0l$D$N0z?t\e(B --- \e$B%5!<%P!<$N%7%s%\%k$r<h$j$^$9!#\e(B
-
-\e$BFbItE*$K$O!"$3$l$i$N4X?t$O\e(B @var{backend}@code{-status-string} \e$B$K\e(B
-\e$B%"%/%;%9$^$9!"$D$^$j\e(B @code{nnchoke} \e$B%P%C%/%(%s%I$O$=$N%(%i!<%a%C\e(B
-\e$B%;!<%8$r\e(B @code{nnchoke-status-string} \e$B$K3JG<$7$^$9!#\e(B
+\e$B0lJ}\e(B gnus \e$B$O!"%5!<%P!<$+$i\e(B @code{nil} \e$B$rJV$5$l$?$H$-\e(B
+\e$B$K\e(B @code{nnheader-get-report} \e$B$r8F$S=P$7!"$=$7$F$3$N4X?t$,LdBj$N%P%C%/%(\e(B
+\e$B%s%I$KBP$7$F:G8e$KJs9p$5$l$?%a%C%;!<%8$rJV$7$^$9!#$3$N4X?t$O0l$D$N0z\e(B
+\e$B?t\e(B --- \e$B%5!<%P!<$N%7%s%\%k$r<h$j$^$9!#\e(B
 
+\e$BFbItE*$K$O!"$3$l$i$N4X?t$O\e(B @var{backend}@code{-status-string} \e$B$K%"%/%;%9\e(B
+\e$B$^$9!"$D$^$j\e(B @code{nnchoke} \e$B%P%C%/%(%s%I$O$=$N%(%i!<%a%C%;!<%8\e(B
+\e$B$r\e(B @code{nnchoke-status-string} \e$B$K3JG<$7$^$9!#\e(B
 
 @node Writing New Backends
 @subsubsection \e$B?7$7$$%P%C%/%(%s%I$r=q$/\e(B
 
-\e$BB?$/$N%P%C%/%(%s%I$O$H$F$bN`;w$7$F$$$^$9!#\e(B@code{nnml} \e$B$O\e(B
-@code{nnspool} \e$B$K$H$F$b;w$F$$$^$9$,!"%5!<%P!<>e$N5-;v$rJT=8$9$k\e(B
-\e$B$3$H$,$G$-$^$9!#\e(B@code{nnmh} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"\e(B
+\e$BB?$/$N%P%C%/%(%s%I$O$H$F$bN`;w$7$F$$$^$9!#\e(B
+@code{nnml} \e$B$O\e(B @code{nnspool} \e$B$K$H$F$b;w$F$$$^$9$,!"%5!<%P!<>e$N5-;v$rJT\e(B
+\e$B=8$9$k$3$H$,$G$-$^$9!#\e(B@code{nnmh} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"\e(B
 \e$B$3$l$O%"%/%F%#%V%U%!%$%k$r;H$o$:!"35MW%G!<%?%Y!<%9$bJ];}$7$^$;$s!#\e(B
-@code{nndir} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"$3$l$K$O\e(B ``\e$B%0\e(B
-\e$B%k!<%W\e(B'' \e$B$N35G0$O$J$/!"5-;v$N=$@5$O$G$-$^$;$s!#\e(B
+@code{nndir} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"$3$l$K$O\e(B ``\e$B%0%k!<%W\e(B''
+\e$B$N35G0$O$J$/!"5-;v$N=$@5$O$G$-$^$;$s!#\e(B
 
-\e$B?7$7$$%P%C%/%(%s%I$r=q$/$H$-$KB>$N%P%C%/%(%s%I$+$i4X?t$r\e(B ``\e$B7Q>5\e(B''
-\e$B$9$k$3$H$,2DG=$G$"$C$F$[$7$$!"$H;W$&$N$OM}$KE,$C$F$$$^$9!#$=$7$F\e(B
-\e$B$^$5$K!"$"$J$?$,$=$&$7$?$1$l$P!"$=$l$,$G$-$k$N$G$9!#\e(B(\e$B$"$J$?$,$=\e(B
-\e$B$&$7$?$/$J$1$l$P$7$J$/$F$bNI$$$G$9$h!"$b$A$m$s!#\e(B)
+\e$B?7$7$$%P%C%/%(%s%I$r=q$/$H$-$KB>$N%P%C%/%(%s%I$+$i4X?t$r\e(B ``\e$B7Q>5\e(B'' \e$B$9$k$3\e(B
+\e$B$H$,2DG=$G$"$C$F$[$7$$!"$H;W$&$N$OM}$KE,$C$F$$$^$9!#$=$7$F$^$5$K!"$"$J$?\e(B
+\e$B$,$=$&$7$?$1$l$P!"$=$l$,$G$-$k$N$G$9!#\e(B(\e$B$"$J$?$,$=$&$7$?$/$J$1$l$P$7$J$/\e(B
+\e$B$F$bNI$$$G$9$h!"$b$A$m$s!#\e(B)
 
-\e$BA4$F$N%P%C%/%(%s%I$O8x3+JQ?t$H8x3+4X?t$r!"\e(B @code{nnoo} \e$B$H8F$P$l\e(B
-\e$B$k%Q%C%1!<%8$r;H$C$F@k8@$7$^$9!#\e(B
+\e$BA4$F$N%P%C%/%(%s%I$O8x3+JQ?t$H8x3+4X?t$r!"\e(B@code{nnoo} \e$B$H8F$P$l$k%Q%C%1!<\e(B
+\e$B%8$r;H$C$F@k8@$7$^$9!#\e(B
 
-\e$BB>$N%P%C%/%(%s%I$+$i4X?t$r7Q>5$9$k$K$O\e(B (\e$B$=$7$F8=:_$N%P%C%/%(%s%I\e(B
-\e$B$+$iB>$N%P%C%/%(%s%I$K4X?t$r7Q>5$G$-$k$h$&$K$9$k$K$O\e(B) \e$B!"0J2<$N%^\e(B
-\e$B%/%m$r;HMQ$7$J$1$l$P$J$j$^$;$s!#\e(B
+\e$BB>$N%P%C%/%(%s%I$+$i4X?t$r7Q>5$9$k$K$O\e(B (\e$B$=$7$F8=:_$N%P%C%/%(%s%I$+$iB>$N\e(B
+\e$B%P%C%/%(%s%I$K4X?t$r7Q>5$G$-$k$h$&$K$9$k$K$O\e(B)\e$B!"0J2<$N%^%/%m$r;HMQ$7$J$1\e(B
+\e$B$l$P$J$j$^$;$s!#\e(B
 
 @table @code
 
 @item nnoo-declare
-\e$B$3$N%^%/%m$O!":G=i$N0z?t$r!"$=$N8e$KB3$/0z?t$N;R6!$G$"$k$3$H$r@k\e(B
-\e$B8@$7$^$9!#Nc$($P!"\e(B
+\e$B$3$N%^%/%m$O!":G=i$N0z?t$r!"$=$N8e$KB3$/0z?t$N;R6!$G$"$k$3$H$r@k8@$7$^$9!#\e(B
+\e$BNc$($P!"\e(B
 
 @lisp
 (nnoo-declare nndir
   nnml nnmh)
 @end lisp
 
-\e$B$3$l$G\e(B @code{nndir}\e$B$O!"\e(B@code{nnml} \e$B$H\e(B @code{nnmh} \e$B$NN>J}$+$i4X?t\e(B
-\e$B$r7Q>5$7$h$&$H$7$F$$$k$3$H$r@k8@$7$^$9!#\e(B
+\e$B$3$l$G\e(B @code{nndir}\e$B$O!"\e(B@code{nnml} \e$B$H\e(B @code{nnmh} \e$B$NN>J}$+$i4X?t$r7Q>5$7\e(B
+\e$B$h$&$H$7$F$$$k$3$H$r@k8@$7$^$9!#\e(B
 
 @item defvoo
-\e$B$3$N%^%/%m$O\e(B @code{defvar} \e$B$HF15A$G$9$,!"$=$NJQ?t$r8x3+%5!<%P!<\e(B
-\e$BJQ?t$H$7$FEPO?$7$^$9!#$[$H$s$I$N>uBV;X8~7?$NJQ?t$O\e(B @code{defvar}
-\e$B$G$O$J$/\e(B @code{defvoo} \e$B$K$h$C$F@k8@$9$k$Y$-$G$9!#\e(B
+\e$B$3$N%^%/%m$O\e(B @code{defvar} \e$B$HF15A$G$9$,!"$=$NJQ?t$r8x3+%5!<%P!<JQ?t$H$7\e(B
+\e$B$FEPO?$7$^$9!#$[$H$s$I$N>uBV;X8~7?$NJQ?t$O\e(B @code{defvar} \e$B$G$O$J\e(B
+\e$B$/\e(B @code{defvoo} \e$B$K$h$C$F@k8@$9$k$Y$-$G$9!#\e(B
 
-\e$BDL>o$N\e(B @code{defvar} \e$B0z?t$K2C$($F!"$3$N%^%/%m$O?F%P%C%/%(%s%I$N\e(B
-\e$BJQ?t$N%j%9%H$r<h$j!"$3$N4X?t$,$=$N%P%C%/%(%s%IFb$G<B9T$5$l$k$H$-\e(B
-\e$B$KJQ?t$rCV$-49$($^$9!#\e(B
+\e$BDL>o$N\e(B @code{defvar} \e$B0z?t$K2C$($F!"$3$N%^%/%m$O?F%P%C%/%(%s%I$NJQ?t$N%j\e(B
+\e$B%9%H$r<h$j!"$3$N4X?t$,$=$N%P%C%/%(%s%IFb$G<B9T$5$l$k$H$-$KJQ?t$rCV$-49$(\e(B
+\e$B$^$9!#\e(B
 
 @lisp
 (defvoo nndir-directory nil
@@ -20948,27 +21876,26 @@ description-buffer = *description-line
   nnml-current-directory nnmh-current-directory)
 @end lisp
 
-\e$B$3$l$O\e(B @code{nndir} \e$B$N$?$a$K\e(B @code{nnml} \e$B$N4X?t$,8F$S=P$5$l$?$H\e(B
-\e$B$-$K!"\e(B@code{nnml-current-directory} \e$B$O\e(B @code{nndir-directory} \e$B$K\e(B
-\e$B@_Dj$5$l$k$H$$$&0UL#$G$9!#\e(B(@code{nnmh} \e$B$bF1MM$G$9!#\e(B)
+\e$B$3$l$O\e(B @code{nndir} \e$B$N$?$a$K\e(B @code{nnml} \e$B$N4X?t$,8F$S=P$5$l$?$H$-$K!"\e(B
+@code{nnml-current-directory} \e$B$O\e(B @code{nndir-directory} \e$B$K@_Dj$5$l$k$H$$\e(B
+\e$B$&0UL#$G$9!#\e(B(@code{nnmh} \e$B$bF1MM$G$9!#\e(B)
 
 @item nnoo-define-basics
-\e$B$3$N%^%/%m$O!"$[$H$s$IA4It$N%P%C%/%(%s%I$,;}$D$Y$-6&DL4X?t$r$$$/\e(B
-\e$B$D$+Dj5A$7$^$9!#\e(B
+\e$B$3$N%^%/%m$O!"$[$H$s$IA4It$N%P%C%/%(%s%I$,;}$D$Y$-6&DL4X?t$r$$$/$D$+Dj5A\e(B
+\e$B$7$^$9!#\e(B
 
 @example
 (nnoo-define-basics nndir)
 @end example
 
 @item deffoo
-\e$B$3$N%^%/%m$O$^$5$K\e(B @code{defun} \e$B$N$h$&$J$b$N$G!"F10l$N0z?t$r<h$j\e(B
-\e$B$^$9!#DL>o$N\e(B @code{defun} \e$B=hM}$K2C$($F!"$3$N%^%/%m$O$=$N4X?t$r8x\e(B
-\e$B3+$7$F$$$k$b$N$H$7$FEPO?$7!"B>$N%P%C%/%(%s%I$,$=$l$r7Q>5$G$-$k$h\e(B
-\e$B$&$K$7$^$9!#\e(B
+\e$B$3$N%^%/%m$O$^$5$K\e(B @code{defun} \e$B$N$h$&$J$b$N$G!"F10l$N0z?t$r<h$j$^$9!#DL\e(B
+\e$B>o$N\e(B @code{defun} \e$B=hM}$K2C$($F!"$3$N%^%/%m$O$=$N4X?t$r8x3+$7$F$$$k$b$N$H\e(B
+\e$B$7$FEPO?$7!"B>$N%P%C%/%(%s%I$,$=$l$r7Q>5$G$-$k$h$&$K$7$^$9!#\e(B
 
 @item nnoo-map-functions
-\e$B$3$N%^%/%m$O8=:_$N%P%C%/%(%s%I$N4X?t$+$i?F%P%C%/%(%s%I$N4X?t$X$N\e(B
-\e$BCV$-49$($r9T$J$($k$h$&$K$7$^$9!#\e(B
+\e$B$3$N%^%/%m$O8=:_$N%P%C%/%(%s%I$N4X?t$+$i?F%P%C%/%(%s%I$N4X?t$X$NCV$-49$(\e(B
+\e$B$r9T$J$($k$h$&$K$7$^$9!#\e(B
 
 @example
 (nnoo-map-functions nndir
@@ -20976,15 +21903,14 @@ description-buffer = *description-line
   (nnmh-request-article 0 nndir-current-group 0 0))
 @end example
 
-\e$B$3$l$O\e(B @code{nndir-retrieve-headers} \e$B$,8F$S=P$5$l$?$H$-!"0lHVL\!"\e(B
-\e$B;0HVL\!";MHVL\$N0z?t$,\e(B @code{nnml-retrieve-headers} \e$B$KEO$5$l!"0l\e(B
-\e$BJ}!"FsHVL\$N0z?t$O\e(B @code{nndir-current-group} \e$B$NCM$H$7$F@_Dj$5$l\e(B
-\e$B$k!"$H$$$&0UL#$G$9!#\e(B
+\e$B$3$l$O\e(B @code{nndir-retrieve-headers} \e$B$,8F$S=P$5$l$?$H$-!"0lHVL\!";0HVL\!"\e(B
+\e$B;MHVL\$N0z?t$,\e(B @code{nnml-retrieve-headers} \e$B$KEO$5$l!"0lJ}!"FsHVL\$N0z?t\e(B
+\e$B$O\e(B @code{nndir-current-group} \e$B$NCM$H$7$F@_Dj$5$l$k!"$H$$$&0UL#$G$9!#\e(B
 
 @item nnoo-import
-\e$B$3$N%^%/%m$OB>$N%P%C%/%(%s%I$+$i4X?t$r<h$j9~$_$^$9!#$3$l$OC1$K$^\e(B
-\e$B$@Dj5A$5$l$F$$$J$$4X?t$rDj5A$9$k$@$1$J$N$G!"%=!<%9%U%!%$%k$N:G8e\e(B
-\e$B$N=hM}$H$7$F=q$+$J$1$l$P$J$j$^$;$s!#\e(B
+\e$B$3$N%^%/%m$OB>$N%P%C%/%(%s%I$+$i4X?t$r<h$j9~$_$^$9!#$3$l$OC1$K$^$@Dj5A$5\e(B
+\e$B$l$F$$$J$$4X?t$rDj5A$9$k$@$1$J$N$G!"%=!<%9%U%!%$%k$N:G8e$N=hM}$H$7$F=q$+\e(B
+\e$B$J$1$l$P$J$j$^$;$s!#\e(B
 
 @example
 (nnoo-import nndir
@@ -20994,9 +21920,9 @@ description-buffer = *description-line
   (nnml))
 @end example
 
-\e$B$3$l$O!"\e(B @code{nndir-request-list} \e$B$X$N8F$S=P$7$OC1$K\e(B
-@code{nnmh-request-list} \e$B$K0z$-EO$5$l!"0lJ}!"\e(B@code{nnml} \e$B$N8x3+\e(B
-\e$B4X?t$G$^$@\e(B @code{nndir} \e$B$GDj5A$5$l$F$$$J$$$b$N$r$3$3$GDj5A$7$^$9!#\e(B
+\e$B$3$l$O!"\e(B@code{nndir-request-list} \e$B$X$N8F$S=P$7$OC1\e(B
+\e$B$K\e(B @code{nnmh-request-list} \e$B$K0z$-EO$5$l!"0lJ}!"\e(B@code{nnml} \e$B$N8x3+4X?t$G\e(B
+\e$B$^$@\e(B @code{nndir} \e$B$GDj5A$5$l$F$$$J$$$b$N$r$3$3$GDj5A$7$^$9!#\e(B
 
 @end table
 
@@ -21065,18 +21991,16 @@ description-buffer = *description-line
 (provide 'nndir)
 @end lisp
 
-
 @node Hooking New Backends Into Gnus
 @subsubsection \e$B?7$7$$%P%C%/%(%s%I$r\e(B gnus \e$B$K7R$2$k\e(B
 
 @vindex gnus-valid-select-methods
 \e$B$"$J$?$N?7$7$$%P%C%/%(%s%I$r\e(B gnus \e$B$G;H$$$O$8$a$k$N$O$H$F$b4JC1$G\e(B
-\e$B$9\e(B --- \e$BC1$K\e(B @code{gnus-declare-backend} \e$B4X?t$G@k8@$9$k$@$1$G$9!#\e(B
-\e$B$3$l$O%P%C%/%(%s%I$r\e(B @code{gnus-valid-select-methods} \e$BJQ?t$KDI2C\e(B
-\e$B$7$^$9!#\e(B
+\e$B$9\e(B --- \e$BC1$K\e(B @code{gnus-declare-backend} \e$B4X?t$G@k8@$9$k$@$1$G$9!#$3$l$O%P%C\e(B
+\e$B%/%(%s%I$r\e(B @code{gnus-valid-select-methods} \e$BJQ?t$KDI2C$7$^$9!#\e(B
 
-@code{gnus-declare-backend} \e$B$OFs$D$N0z?t$r<h$j$^$9\e(B --- \e$B%P%C%/%(\e(B
-\e$B%s%I$NL>A0$HE,Ev$J?t$NG=NO\e(B @dfn{abilities} \e$B$G$9!#\e(B
+@code{gnus-declare-backend} \e$B$OFs$D$N0z?t$r<h$j$^$9\e(B --- \e$B%P%C%/%(%s%I$NL>\e(B
+\e$BA0$HE,Ev$J?t$NG=NO\e(B @dfn{abilities} \e$B$G$9!#\e(B
 
 \e$B$3$l$,Nc$G$9!#\e(B
 
@@ -21088,37 +22012,33 @@ description-buffer = *description-line
 
 @table @code
 @item mail
-\e$B$3$l$O%a!<%kIw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$$O\e(B)
-\e$B%a!<%k$GAw$i$l$^$9!#\e(B
+\e$B$3$l$O%a!<%kIw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$$O\e(B) \e$B%a!<%k\e(B
+\e$B$GAw$i$l$^$9!#\e(B
 @item post
-\e$B$3$l$O%K%e!<%9Iw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$\e(B
-\e$B$O\e(B) \e$B%K%e!<%9$GAw$i$l$^$9!#\e(B
+\e$B$3$l$O%K%e!<%9Iw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$$O\e(B) \e$B%K%e!<\e(B
+\e$B%9$GAw$i$l$^$9!#\e(B
 @item post-mail
 \e$B$3$N%P%C%/%(%s%I$O%a!<%k$H%K%e!<%9$NN>J}$r%5%]!<%H$7$^$9!#\e(B
 @item none
-\e$B$3$l$O%K%e!<%9$G$b%a!<%k$G$b$J$$%P%C%/%(%s%I$G$9\e(B --- \e$BA4$/0c$C$?\e(B
-\e$B2?$+$G$9!#\e(B
+\e$B$3$l$O%K%e!<%9$G$b%a!<%k$G$b$J$$%P%C%/%(%s%I$G$9\e(B --- \e$BA4$/0c$C$?2?$+$G$9!#\e(B
 @item respool
-\e$B$3$l$O:F%9%W!<%k$r%5%]!<%H$7$^$9\e(B --- \e$B$H$$$&$h$j$O!"$=$N85$N5-;v\e(B
-\e$B$H%0%k!<%W$r=$@5$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$l$O:F%9%W!<%k$r%5%]!<%H$7$^$9\e(B --- \e$B$H$$$&$h$j$O!"$=$N85$N5-;v$H%0%k!<\e(B
+\e$B%W$r=$@5$9$k$3$H$,$G$-$^$9!#\e(B
 @item address
-\e$B2>A[%5!<%P!<L>$NCf$K%5!<%P!<$NL>A0$,4^$^$k$H$$$&$3$H$G$9!#$3$l$O\e(B
-\e$B$[$H$s$IA4It$N%P%C%/%(%s%I$GI,MW$K$J$j$^$9!#\e(B
+\e$B2>A[%5!<%P!<L>$NCf$K%5!<%P!<$NL>A0$,4^$^$k$H$$$&$3$H$G$9!#$3$l$O$[$H$s$I\e(B
+\e$BA4It$N%P%C%/%(%s%I$GI,MW$K$J$j$^$9!#\e(B
 @item prompt-address
-\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{B} \e$B$J$I$G$3$NL?Na$r<B9T$7$?$H$-!"%f!<%6\e(B
-\e$B$O%"%I%l%9$N%W%m%s%W%HF~NO$r5a$a$i$l$^$9!#$3$l$ONc$($P!"\e(B
-@code{nntp} \e$B$N$h$&$J%P%C%/%(%s%I$G$OI,MW$G!"\e(B@code{nnmbox} \e$B$G$OI,\e(B
-\e$BMW$G$O$"$j$^$;$s!#\e(B
+\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{B} \e$B$J$I$G$3$NL?Na$r<B9T$7$?$H$-!"%f!<%6$O%"%I%l\e(B
+\e$B%9$N%W%m%s%W%HF~NO$r5a$a$i$l$^$9!#$3$l$ONc$($P!"\e(B@code{nntp} \e$B$N$h$&$J%P%C\e(B
+\e$B%/%(%s%I$G$OI,MW$G!"\e(B@code{nnmbox} \e$B$G$OI,MW$G$O$"$j$^$;$s!#\e(B
 @end table
 
-
 @node Mail-like Backends
 @subsubsection \e$B%a!<%kIw%P%C%/%(%s%I\e(B
 
-\e$B%a!<%k%P%C%/%(%s%I$,$=$NB>$N%P%C%/%(%s%I$KBP$7$F0l@~$r2h$7$F$$$k\e(B
-\e$BE@$O!"%a!<%k%P%C%/%(%s%I$O\e(B @file{nnmail.el} \e$B$NCf$N6&DL4X?t$K6/$/\e(B
-\e$B0MB8$7$F$$$k$H$$$&E@$G$9!#Nc$($P!"\e(B@code{nnml-request-scan} \e$B$NDj\e(B
-\e$B5A$O$3$N$h$&$K$J$j$^$9!#\e(B
+\e$B%a!<%k%P%C%/%(%s%I$,$=$NB>$N%P%C%/%(%s%I$KBP$7$F0l@~$r2h$7$F$$$kE@$O!"%a!<\e(B
+\e$B%k%P%C%/%(%s%I$O\e(B @file{nnmail.el} \e$B$NCf$N6&DL4X?t$K6/$/0MB8$7$F$$$k$H$$$&\e(B
+\e$BE@$G$9!#Nc$($P!"\e(B@code{nnml-request-scan} \e$B$NDj5A$O$3$N$h$&$K$J$j$^$9!#\e(B
 
 @lisp
 (deffoo nnml-request-scan (&optional group server)
@@ -21126,16 +22046,15 @@ description-buffer = *description-line
   (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))
 @end lisp
 
-\e$BC1$K\e(B @code{nnmail-get-new-mail} \e$B$K$$$/$D$+0z?t$rM?$($F8F$S=P$9$@\e(B
-\e$B$1$G!"\e(B@code{nnmail} \e$B$,%a!<%k$N0\F0$dJ,N%$rA4$F$NLLE]$r8+$F$/$l$^\e(B
-\e$B$9!#\e(B
+\e$BC1$K\e(B @code{nnmail-get-new-mail} \e$B$K$$$/$D$+0z?t$rM?$($F8F$S=P$9$@$1$G!"\e(B
+@code{nnmail} \e$B$,%a!<%k$N0\F0$dJ,N%$rA4$F$NLLE]$r8+$F$/$l$^$9!#\e(B
 
 \e$B$3$N4X?t$O;M$D$N0z?t$r<h$j$^$9!#\e(B
 
 @table @var
 @item method
-\e$B$3$l$O!"$3$N8F$S=P$7$r$I$N%P%C%/%(%s%I$,@UG$$rIi$&$+$r;X<($9$k%7\e(B
-\e$B%s%\%k$G$9!#\e(B
+\e$B$3$l$O!"$3$N8F$S=P$7$r$I$N%P%C%/%(%s%I$,@UG$$rIi$&$+$r;X<($9$k%7%s%\%k$G\e(B
+\e$B$9!#\e(B
 
 @item exit-function
 \e$B$3$N4X?t$OJ,N%$,<B9T$5$l$?8e$K8F$S=P$5$l$^$9!#\e(B
@@ -21144,29 +22063,27 @@ description-buffer = *description-line
 \e$B0l;~%U%!%$%k$r3JG<$9$k>l=j$G$9!#\e(B
 
 @item group
-\e$B$3$N>JN,2DG=$J0z?t$O!"J,N%$,0l$D$N%0%k!<%W$KBP$7$F$N$_<B9T$5$l$k\e(B
-\e$B$Y$-$G$"$k$H$-$N%0%k!<%WL>$G$9!#\e(B
+\e$B$3$N>JN,2DG=$J0z?t$O!"J,N%$,0l$D$N%0%k!<%W$KBP$7$F$N$_<B9T$5$l$k$Y$-$G$"\e(B
+\e$B$k$H$-$N%0%k!<%WL>$G$9!#\e(B
 @end table
 
-@code{nnmail-get-new-mail} \e$B$O3F5-;v$rJ]B8$9$k$?$a$K\e(B
-@var{backend}@code{-save-mail} \e$B$r8F$S=P$7$^$9!#\e(B
-@var{backend}@code{-active-number} \e$B$O$3$N5-;v$K3d$jEv$F$i$l$?5-\e(B
-\e$B;vHV9f$rD4$Y$k$?$a$K8F$S=P$5$l$^$9!#\e(B
+@code{nnmail-get-new-mail} \e$B$O3F5-;v$rJ]B8$9$k$?$a\e(B
+\e$B$K\e(B @var{backend}@code{-save-mail} \e$B$r8F$S=P$7$^$9!#\e(B
+@var{backend}@code{-active-number} \e$B$O$3$N5-;v$K3d$jEv$F$i$l$?5-;vHV9f$r\e(B
+\e$BD4$Y$k$?$a$K8F$S=P$5$l$^$9!#\e(B
 
 \e$B$3$N4X?t$O<!$NJQ?t$b;HMQ$7$^$9!#\e(B
-@var{backend}@code{-get-new-mail} (\e$B$3$N%P%C%/%(%s%I$N?7Ce%a!<%k\e(B
-\e$B$rD4$Y$k$+$I$&$+\e(B) \e$B$H!"?7$7$$%"%/%F%#%V%U%!%$%k$r@8@.$9$k$?$a$N\e(B
-@var{backend}@code{-group-alist} \e$B$H\e(B
-@var{backend}@code{-active-file} \e$B$G$9!#\e(B
-@var{backend}@code{-group-alist} \e$B%0%k!<%W$N%"%/%F%#%VO"A[%j%9%H\e(B
-\e$B$G!"0J2<$N$h$&$J$b$N$G$9!#\e(B
+@var{backend}@code{-get-new-mail} (\e$B$3$N%P%C%/%(%s%I$N?7Ce%a!<%k$rD4$Y$k\e(B
+\e$B$+$I$&$+\e(B) \e$B$H!"?7$7$$%"%/%F%#%V%U%!%$%k$r@8@.$9$k$?$a\e(B
+\e$B$N\e(B @var{backend}@code{-group-alist} \e$B$H\e(B @var{backend}@code{-active-file} \e$B$G\e(B
+\e$B$9!#\e(B@var{backend}@code{-group-alist} \e$B%0%k!<%W$N%"%/%F%#%VO"A[%j%9%H$G!"\e(B
+\e$B0J2<$N$h$&$J$b$N$G$9!#\e(B
 
 @example
 (("a-group" (1 . 10))
  ("some-group" (34 . 39)))
 @end example
 
-
 @node Score File Syntax
 @subsection \e$B%9%3%"%U%!%$%k$N9=J8\e(B
 
@@ -21238,9 +22155,8 @@ space            = *[ " " / <TAB> / <NEWLINE> ]
 \e$B%$%k$NMM<0$O%W%m%0%i%^!<$KG$$5$l$F$$$k$H$$$&;v$G$9\e(B---\e$BA4$F$r0l$D$ND9!<!<\e(B
 \e$B$$9T$KEG$-=P$9$N$,4JC1$G$"$l$P!"$=$l$O9=$$$^$;$s!#\e(B
 
-\e$B$$$m$$$m$J%"%H%`$N0UL#$O$3$N%^%K%e%"%k$N$I$3$+$G@bL@$5$l$F$$$^$9\e(B
-(@pxref{Score File Format})\e$B!#\e(B
-
+\e$B$$$m$$$m$J%"%H%`$N0UL#$O$3$N%^%K%e%"%k$N$I$3$+$G@bL@$5$l$F$$$^\e(B
+\e$B$9\e(B (@pxref{Score File Format})\e$B!#\e(B
 
 @node Headers
 @subsection \e$B%X%C%@!<\e(B
@@ -21249,34 +22165,34 @@ space            = *[ " " / <TAB> / <NEWLINE> ]
 \e$B$rN/$a$F$*$/MM<0$r;H$$$^$9!#$"$k?M$O!":n<T$,\e(B @sc{nov} \e$B$N;EMM$r8+$FCQ$8$k\e(B
 \e$B;vL5$/A4$F$r\e(B @emph{\e$BEp$s$@\e(B} \e$B$H;W$&$+$b$7$l$^$;$s$,!"$=$N?M$O@5$7$$$G$9!#\e(B
 
-@dfn{\e$B%X%C%@!<\e(B} \e$B$OHs>o$KIiC4$N$+$1$i$l$9$.$?8l$G$9!#\e(B ``\e$B%X%C%@!<\e(B'' \e$B$O\e(B
-RFC1036 \e$B$G$O5-;v$NF,$N9T$N;v\e(B (\e$BNc$($P!"\e(B@code{From}) \e$B$rOC$9$N$KMQ$$$i$l$F\e(B
-\e$B$$$^$9!#$=$l$OB?$/$N?M$+$i\e(B ``\e$B%X%C%I\e(B''---``\e$B%X%C%@!<$HK\BN\e(B'' \e$B$NF15A8l$H$7\e(B
-\e$B$F;H$o$l$F$$$^$9!#\e(B (\e$B$3$l$O!";d$N0U8+$G$OHr$1$i$l$k$Y$-$G$9!#\e(B) \e$B$=$7$F!"\e(B
-gnus \e$B$OFbIt$G$O\e(B ``\e$B%X%C%@!<\e(B'' \e$B$H8F$VMM<0$r;H$C$F$*$j!";d$O$3$3$G$=$l$K$D\e(B
-\e$B$$$F@bL@$7$^$9!#$3$l$O\e(B9\e$B$D$NMWAG$+$i$J$k%Y%/%H%k$G!"4pK\E*$K!"$=$l$>$l$N\e(B
-\e$B%X%C%@!<\e(B (\e$B$"DK\e(B) \e$B$,0l$D$N6u$->l=j$r@j$a$F$$$^$9!#\e(B
-
-\e$B$3$l$i$N6u$->l=j$O!"=gHV$K\e(B: @code{number}\e$B!"\e(B@code{subject}\e$B!"\e(B@code{from}\e$B!"\e(B
-@code{date}\e$B!"\e(B@code{id}\e$B!"\e(B@code{chars}\e$B!"\e(B@code{lines}\e$B!"\e(B@code{xref}\e$B!"\e(B
-@code{extra} \e$B$G$9!#$3$l$i$N6u$->l=j$K?($C$F@_Dj$9$k%^%/%m$,$"$j$^$9\e(B---\e$B$=\e(B
-\e$B$l$i$OA4$F!"$=$l$>$l\e(B @code{mail-header-} \e$B$H\e(B @code{mail-header-set-} \e$B$$$&\e(B
-\e$BM=A[$5$l$kL>A0$r;}$C$F$$$^$9!#\e(B
+@dfn{\e$B%X%C%@!<\e(B} \e$B$OHs>o$KIiC4$N$+$1$i$l$9$.$?8l$G$9!#\e(B
+``\e$B%X%C%@!<\e(B'' \e$B$O\e(B RFC1036 \e$B$G$O5-;v$NF,$N9T$N;v\e(B (\e$BNc$($P!"\e(B@code{From}) \e$B$rOC\e(B
+\e$B$9$N$KMQ$$$i$l$F$$$^$9!#$=$l$OB?$/$N?M$+\e(B
+\e$B$i\e(B ``\e$B%X%C%I\e(B''---``\e$B%X%C%@!<$HK\BN\e(B'' \e$B$NF15A8l$H$7$F;H$o$l$F$$$^$9!#\e(B(\e$B$3$l\e(B
+\e$B$O!";d$N0U8+$G$OHr$1$i$l$k$Y$-$G$9!#\e(B) \e$B$=$7$F!"\e(Bgnus \e$B$OFbIt$G\e(B
+\e$B$O\e(B ``\e$B%X%C%@!<\e(B'' \e$B$H8F$VMM<0$r;H$C$F$*$j!";d$O$3$3$G$=$l$K$D$$$F@bL@$7$^$9!#\e(B
+\e$B$3$l$O6e$D$NMWAG$+$i$J$k%Y%/%H%k$G!"4pK\E*$K!"$=$l$>$l$N%X%C\e(B
+\e$B%@!<\e(B (\e$B$"DK\e(B) \e$B$,0l$D$N6u$->l=j$r@j$a$F$$$^$9!#\e(B
+
+\e$B$3$l$i$N6u$->l=j$O!"=gHV\e(B
+\e$B$K\e(B: @code{number}, @code{subject}, @code{from}, @code{date}, @code{id}, @code{chars}, @code{lines}, @code{xref}, @code{extra} \e$B$G\e(B
+\e$B$9!#$3$l$i$N6u$->l=j$K?($C$F@_Dj$9$k%^%/%m$,$"$j$^$9\e(B---\e$B$=$l$i$OA4$F!"$=\e(B
+\e$B$l$>$l\e(B @code{mail-header-} \e$B$H\e(B @code{mail-header-set-} \e$B$$$&M=A[$5$l$kL>A0\e(B
+\e$B$r;}$C$F$$$^$9!#\e(B
 
 @code{extra} \e$B$N>l=j$O%X%C%@!<\e(B/\e$BCM$NBP$NO"A[%j%9%H$G$"$k0J30$O$3$l$i$NA4$F\e(B
 \e$B$N>l=j$OJ8;zNs$G$9\e(B (@pxref{To From Newsgroups})\e$B!#\e(B
 
-
 @node Ranges
 @subsection \e$BHO0O\e(B
 
 @sc{gnus} \e$B$O;d$K$OHs>o$KLr$KN)$D$H;W$o$l$k35G0$rF3F~$7$^$7$?$N$G!";d$O$=\e(B
 \e$B$l$r$?$/$5$s;H$$!"$+$J$jG0F~$j$K:n$j>e$2$F$-$^$7$?!#\e(B
 
-\e$B<ALd$OC1=c$G$9\e(B: \e$B$b$7$"$J$?$,BgNL$N?t;z$K$h$jF10l@-$rJ]>Z$5$l$k\e(B \e$B$b$N\e(B
-(object) (@emph{\e$BMpK=$J\e(B} \e$BNc$r5s$2$k$H!"5-;v$,$=$&$G$9\e(B) \e$B$r\e(B ``\e$B4^$^$l$F$$$k\e(B''
-\e$B$H$7$F8+$J$7$?$$$H$-$O!"IaDL$NO"B3E*9T0Y$O$"$^$jLr$KN)$A$^$;$s!#\e(B (\e$BD9$5\e(B
-200,000 \e$B$NO"B3J*$O>/$7B)$,D9$9$.$^$9!#\e(B)
+\e$B<ALd$OC1=c$G$9\e(B: \e$B$b$7$"$J$?$,BgNL$N?t;z$K$h$jF10l@-$rJ]>Z$5$l$k\e(B \e$B$b\e(B
+\e$B$N\e(B (object) (@emph{\e$BMpK=$J\e(B} \e$BNc$r5s$2$k$H!"5-;v$,$=$&$G\e(B
+\e$B$9\e(B) \e$B$r\e(B ``\e$B4^$^$l$F$$$k\e(B'' \e$B$H$7$F8+$J$7$?$$$H$-$O!"IaDL$NO"B3E*9T0Y$O$"$^$j\e(B
+\e$BLr$KN)$A$^$;$s!#\e(B(\e$BD9$5\e(B 200,000 \e$B$NO"B3J*$O>/$7B)$,D9$9$.$^$9!#\e(B)
 
 \e$B$3$l$N2r7h:v$O<ALd$HF1$8$/$i$$C1=c$G$9!#C1$K$=$NO"B3J*$r2u$;$PNI$$$@$1$G\e(B
 \e$B$9!#\e(B
@@ -21291,15 +22207,15 @@ gnus \e$B$OFbIt$G$O\e(B ``\e$B%X%C%@!<\e(B'' \e$B$H8F$VMM<0$r;H$C$F$*$j!";d$O$3$3$G$=
 ((1 . 6) (10. 12))
 @end example
 
-\e$B$"$N7y$J\e(B @samp{(13. 13)} \e$B$N$h$&$JMWAG$rHr$1$k$?$a$K!"$=$l$N$_$N\e(B \e$B$b$N\e(B
-(object) \e$B$r<($9$?$a$K\e(B @samp{13} \e$B$OM-8z$JMWAG$K$J$C$F$$$^$9!#\e(B
+\e$B$"$N7y$J\e(B @samp{(13. 13)} \e$B$N$h$&$JMWAG$rHr$1$k$?$a$K!"$=$l$N$_$N\e(B \e$B$b\e(B
+\e$B$N\e(B (object) \e$B$r<($9$?$a$K\e(B @samp{13} \e$B$OM-8z$JMWAG$K$J$C$F$$$^$9!#\e(B
 
 @example
 ((1 . 6) 7 (10 . 12))
 @end example
 
-\e$B$3$l$O\e(B2\e$B$D$NHO0O$rHf3S$7$F$=$l$,Ey2A\e(B (equal) \e$B$G$"$k$+$rD4$Y$k;v$O>/$7<j$N\e(B
-\e$B$3$s$@$3$H$K$J$j$^$9\e(B:
+\e$B$3$l$OFs$D$NHO0O$rHf3S$7$F$=$l$,Ey2A\e(B (equal) \e$B$G$"$k$+$rD4$Y$k;v$O>/$7<j\e(B
+\e$B$N$3$s$@$3$H$K$J$j$^$9\e(B:
 
 @example
 ((1 . 5) 7 8 (10 . 12))
@@ -21326,7 +22242,7 @@ gnus \e$B$OFbIt$G$O\e(B ``\e$B%X%C%@!<\e(B'' \e$B$H8F$VMM<0$r;H$C$F$*$j!";d$O$3$3$G$=
 \e$B$=$7$F!"$3$l$OA0$NHO0O$HEy2A$G$9!#\e(B
 
 \e$B$3$l$OHO0O$N\e(B BNF \e$BDj5A$G$9!#$b$A$m$s!"?t;z$N0UL#>e$NMW5a$O2<9_$7$F$$$J$$\e(B
-\e$B$H$$$&;v$O3P$($F$*$/I,MW$,$"$j$^$9!#\e(B (\e$BG$0U$N2s?t$NF1$8?t;z$N7+$jJV$7$O5v\e(B
+\e$B$H$$$&;v$O3P$($F$*$/I,MW$,$"$j$^$9!#\e(B(\e$BG$0U$N2s?t$NF1$8?t;z$N7+$jJV$7$O5v\e(B
 \e$B$5$l$F$$$^$9$,!"HO0O$N07$$$+$i$O>C$(5n$k798~$,$"$j$^$9!#\e(B)
 
 @example
@@ -21339,20 +22255,19 @@ contents        = "" / simple-range *[ " " contents ] /
 
 Gnus \e$B$O8=:_$N$H$3$m4{FI5-;v$H5-;v$N0u$N>pJs$rIU$1$F$*$/$?$a$KHO0O$r;H$C\e(B
 \e$B$F$$$^$9!#;d$O\e(B \e$B<!$N8"NO<T\e(B \e$B$,;d$K$5$;$F$/$l$k$N$G$"$l$P!"\e(BC \e$B$G?t$NHO0O$N<B\e(B
-\e$BAu$r7W2h$7$F$$$^$9!#\e(B (\e$B;d$O$^$@$=$N?M$K?R$M$F$$$^$;$s!#$H8@$&$N$O!";d$O$=\e(B
+\e$BAu$r7W2h$7$F$$$^$9!#\e(B(\e$B;d$O$^$@$=$N?M$K?R$M$F$$$^$;$s!#$H8@$&$N$O!";d$O$=\e(B
 \e$B$l$rIaDL$NO"B3J*$KJQ49$7D>$5$J$$$G@$$NCf$r40A4$KHO0O$K4p$E$$$?$b$N$K$9$k\e(B
 \e$B$?$a$K$b$&>/$79M$($kI,MW$,$"$k$+$i$G$9!#\e(B)
 
-
 @node Group Info
 @subsection \e$B%0%k!<%W>pJs\e(B
 
 Gnus \e$B$O%0%k!<%W$NA4$F$N1JB3>pJs$r\e(B @dfn{group info} \e$B%j%9%H$KJ]B8$7$^$9!#\e(B
-\e$B$3$N%j%9%H$ND9$5$O\e(B3\e$B$+$i\e(B6 (\e$B$b$7$/$O$b$C$H\e(B) \e$B$NMWAG$GE0DlE*$K%0%k!<%W$r5-=R\e(B
-\e$B$7$^$9!#\e(B
+\e$B$3$N%j%9%H$ND9$5$O\e(B 3 \e$B$+$i\e(B 6 (\e$B$b$7$/$O$b$C$H\e(B) \e$B$NMWAG$GE0DlE*$K%0%k!<%W$r\e(B
+\e$B5-=R$7$^$9!#\e(B
 
-\e$B$3$3$K$"$k$N$O%0%k!<%W>pJs\e(B (group info) \e$B$N\e(B2\e$B$D$NNc$G$9!#\e(B1\e$B$D$OHs>o$KC1=c$J\e(B
-\e$B%0%k!<%W$G!"\e(B2\e$B$D$a$O$b$C$HJ#;($J$b$N$G$9\e(B:
+\e$B$3$3$K$"$k$N$O%0%k!<%W>pJs\e(B (group info) \e$B$NFs$D$NNc$G$9!#0l$D$OHs>o$KC1=c\e(B
+\e$B$J%0%k!<%W$G!"Fs$D$a$O$b$C$HJ#;($J$b$N$G$9\e(B:
 
 @example
 ("no.group" 5 ((1 . 54324)))
@@ -21364,16 +22279,16 @@ Gnus \e$B$O%0%k!<%W$NA4$F$N1JB3>pJs$r\e(B @dfn{group info} \e$B%j%9%H$KJ]B8$7$^$9!#
 @end example
 
 \e$B:G=i$NMWAG$O\e(B @dfn{\e$B%0%k!<%WL>\e(B} \e$B$G$9\e(B---\e$B$I$N$h$&$K$7$m!"\e(Bgnus \e$B$,$=$l$K$h$C$F\e(B
-\e$B%0%k!<%W$rCN$C$F$$$k$b$N$G$9!#\e(B2\e$BHVL\$NMWAG$O\e(B @dfn{\e$B9XFIEY\e(B} \e$B$G!"IaDL$O>.$5\e(B
+\e$B%0%k!<%W$rCN$C$F$$$k$b$N$G$9!#FsHVL\$NMWAG$O\e(B @dfn{\e$B9XFIEY\e(B} \e$B$G!"IaDL$O>.$5\e(B
 \e$B$J@0?t$G$9!#\e(B(\e$B$=$l$O\e(B @dfn{\e$B3,5i\e(B} \e$B$K$J$k;v$b$G$-$^$9!#$=$l$O!"%3%s%9%;%k$G!"\e(B
-@code{car} \e$B$,%l%Y%k$G!"\e(B@code{cdr} \e$B$,%9%3%"$G$9!#\e(B) 3\e$BHVL\$NMWAG$O4{FI5-;v\e(B
-\e$B$NHO0O$N%j%9%H$G$9!#\e(B4\e$BHVL\$NMWAG$O$$$m$$$m$J<oN`$N5-;v$N0u$N%j%9%H$N%j%9\e(B
-\e$B%H$G$9!#\e(B5\e$BHVL\$NMWAG$OA*BrJ}K!$G$9\e(B (\e$B$b$7$/$O!"$3$A$i$NJ}$,NI$$$N$G$"$l$P\e(B
-\e$B;v<B>e$N%5!<%P!<$G$9\e(B)\e$B!#\e(B6\e$BHVL\$NMWAG$O\e(B @dfn{\e$B%0%k!<%W%Q%i%a!<%?\e(B} \e$B$N%j%9%H$G!"\e(B
-\e$B$3$NItJ,$O$=$N$?$a$K$"$j$^$9!#\e(B
-
-\e$B:G8e$N\e(B3\e$B$D$NMWAG$O$I$l$G$b!"I,MW$,L5$1$l$PB8:_$7$J$$;v$b$"$j$^$9!#<B:]!"\e(B
-\e$B%0%k!<%W$NHs>o$KBgItJ,$O:G=i$N\e(B3\e$B$D$NMWAG$@$1$r;}$A!"$=$l$O$?$/$5$s$N%3%s\e(B
+@code{car} \e$B$,%l%Y%k$G!"\e(B@code{cdr} \e$B$,%9%3%"$G$9!#\e(B) \e$B;0HVL\$NMWAG$O4{FI5-;v\e(B
+\e$B$NHO0O$N%j%9%H$G$9!#;MHVL\$NMWAG$O$$$m$$$m$J<oN`$N5-;v$N0u$N%j%9%H$N%j%9\e(B
+\e$B%H$G$9!#8^HVL\$NMWAG$OA*BrJ}K!$G$9\e(B (\e$B$b$7$/$O!"$3$A$i$NJ}$,NI$$$N$G$"$l$P\e(B
+\e$B;v<B>e$N%5!<%P!<$G$9\e(B)\e$B!#O;HVL\$NMWAG$O\e(B @dfn{\e$B%0%k!<%W%Q%i%a!<%?\e(B} \e$B$N%j%9%H\e(B
+\e$B$G!"$3$NItJ,$O$=$N$?$a$K$"$j$^$9!#\e(B
+
+\e$B:G8e$N;0$D$NMWAG$O$I$l$G$b!"I,MW$,L5$1$l$PB8:_$7$J$$;v$b$"$j$^$9!#<B:]!"\e(B
+\e$B%0%k!<%W$NHs>o$KBgItJ,$O:G=i$N;0$D$NMWAG$@$1$r;}$A!"$=$l$O$?$/$5$s$N%3%s\e(B
 \e$B%9%;%k$r@aLs$9$k;v$,$G$-$^$9!#\e(B
 
 \e$B$3$l$O%0%k!<%W>pJsMM<0$N\e(B BNF \e$BDj5A$G$9\e(B:
@@ -21394,9 +22309,9 @@ method        = "(" <string> *elisp-forms ")"
 parameters    = "(" *elisp-forms ")"
 @end example
 
-\e$B<B$N$H$3$mK!B'\e(B @samp{marks} \e$B$O13$G$9!#\e(B@samp{marks} \e$B$O\e(B @samp{<string>} \e$B$,\e(B
-@samp{range} \e$B$N>e$K9;@5$5$l$F$$$k$b$N$G$9$,!"5?;w\e(B BNF \e$B$G$=$l$r8=$9$N$OIT\e(B
-\e$BL{2w$J$b$N$G$9!#\e(B
+\e$B<B$N$H$3$mK!B'\e(B @samp{marks} \e$B$O13$G$9!#\e(B
+@samp{marks} \e$B$O\e(B @samp{<string>} \e$B$,\e(B @samp{range} \e$B$N>e$K9=@.$5$l$F$$$k$b$N\e(B
+\e$B$G$9$,!"5?;w\e(B BNF \e$B$G$=$l$r8=$9$N$OITL{2w$J$b$N$G$9!#\e(B
 
 \e$B$b$7\e(B gnus \e$B>pJs$r;}$C$F$$$F!"MWAG$rD4$Y$?$$$N$H$-$O!"\e(Bgnus \e$B$O$=$l$i$NMWAG\e(B
 \e$B$r<hF@\e(B/\e$B@_Dj\e(B (get/set) \e$B$9$k$?$a$N0lO"$N%^%/%m$rDs6!$7$F$$$^$9!#\e(B
@@ -21451,14 +22366,13 @@ parameters    = "(" *elisp-forms ")"
 \e$B%0%k!<%W%Q%i%a!<%?$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
 @end table
 
-\e$BA4$F$N<hF@4X?t$O\e(B1\e$B$D$N0z?t$r<h$j$^$9\e(B---\e$B>pJs$N%j%9%H$G$9!#@_Dj4X?t$O\e(B2\e$B$D$N\e(B
-\e$B0z?t$r<h$j$^$9\e(B---\e$B>pJs%j%9%H$H?7$7$$CM$G$9!#\e(B
+\e$BA4$F$N<hF@4X?t$O0l$D$N0z?t$r<h$j$^$9\e(B---\e$B>pJs$N%j%9%H$G$9!#@_Dj4X?t$OFs$D\e(B
+\e$B$N0z?t$r<h$j$^$9\e(B---\e$B>pJs%j%9%H$H?7$7$$CM$G$9!#\e(B
 
-\e$B%0%k!<%W>pJs$N:G8e$N\e(B3\e$B$D$NMWAG$O6/@)E*$J$b$N$G$O$"$j$^$;$s$N$G!"MWAG$r@_\e(B
+\e$B%0%k!<%W>pJs$N:G8e$N;0$D$NMWAG$O6/@)E*$J$b$N$G$O$"$j$^$;$s$N$G!"MWAG$r@_\e(B
 \e$BDj$9$kA0$K%0%k!<%W>pJs$r3HD%$9$kI,MW$,$"$k$+$bCN$l$^$;$s!#$b$7$3$l$,I,MW\e(B
-\e$B$J>l9g$O!"$3$l$,<+F0E*$K5/$3$k$?$a$K\e(B @code{nil} \e$B$G$J$$\e(B3\e$BHVL\$N0z?t$r\e(B3\e$B$D$N\e(B
-\e$B:G=*@_Dj4X?t$KM?$($k$@$1$G$9!#\e(B
-
+\e$B$J>l9g$O!"$3$l$,<+F0E*$K5/$3$k$?$a$K\e(B @code{nil} \e$B$G$J$$;0HVL\$N0z?t$r;0$D\e(B
+\e$B$N:G=*@_Dj4X?t$KM?$($k$@$1$G$9!#\e(B
 
 @node Extended Interactive
 @subsection \e$B3HD%BPOC\e(B
@@ -21491,8 +22405,8 @@ Gnus \e$B$O\e(B Emacs \e$B$NI8=`$N\e(B @code{interactive} \e$B;XDj$r%7%s%\%k@\F,<-$r4
 
 @item Y
 @vindex gnus-current-prefix-symbols
-\e$B8=:_$N@\F,0z?t%7%s%\%k$N%j%9%H$G$9\e(B---\e$BJQ?t\e(B
-@code{gnus-current-prefix-symbol} \e$B$G$9!#\e(B
+\e$B8=:_$N@\F,0z?t%7%s%\%k$N%j%9%H$G$9\e(B---\e$BJQ\e(B
+\e$B?t\e(B @code{gnus-current-prefix-symbol} \e$B$G$9!#\e(B
 
 @item A
 \e$B8=:_$N5-;vHV9f$G$9\e(B---\e$B4X?t\e(B @code{gnus-summary-article-number} \e$B$G$9!#\e(B
@@ -21504,13 +22418,12 @@ Gnus \e$B$O\e(B Emacs \e$B$NI8=`$N\e(B @code{interactive} \e$B;XDj$r%7%s%\%k@\F,<-$r4
 \e$B8=:_$N%0%k!<%WL>$G$9\e(B---\e$B4X?t\e(B @code{gnus-group-group-name} \e$B$G$9!#\e(B
 @end table
 
-
 @node Emacs/XEmacs Code
 @subsection Emacs/XEmacs \e$B%3!<%I\e(B
 @cindex XEmacs
 @cindex Emacsen
 
-Gnus \e$B$O\e(B Emacs\e$B!"\e(BXEmacs \e$B$H\e(B Mule \e$B$GF0:n$7$^$9$N$G!"$=$N$&$A$N0l$D$r<g4D6-$H\e(B
+Gnus \e$B$O\e(B Emacs, XEmacs \e$B$H\e(B Mule \e$B$GF0:n$7$^$9$N$G!"$=$N$&$A$N0l$D$r<g4D6-$H\e(B
 \e$B$9$k;v$K7h$a$^$7$?!#;d$O\e(B Emacs \e$B$rA*$S$^$7$?!#;d$,\e(B XEmacs \e$B$d\e(B Mule \e$B$r9%$-\e(B
 \e$B$G$O$J$$$H8@$&;v$G$O$J$/!"$=$l$,%"%k%U%!%Y%C%H$G:G=i$KMh$?$+$i$G$9!#\e(B
 
@@ -21519,14 +22432,15 @@ XEmacs \e$B$O%P%$%H%3%s%Q%$%k$r$7$F$$$k4V$K%.%,%P%$%H$/$i$$$N7Y9p$r=P$9$H8@\e(B
 \e$B$&;v$G$9!#;d$O:3:Y$J<:GT$r8+$D$1=P$9$3$H$r=u$1$k$?$a$K%P%$%H%3%s%Q%$%k$N\e(B
 \e$B7Y9p$r;H$C$F$$$^$9$N$G!"$=$l$OHs>o$KLr$KN)$A$^$9!#\e(B
 
-\e$B;d$O7QB3E*$K\e(B Emacs \e$B$N4X?t$N3&LL\e(B (interface) \e$B$r;H$C$F$-$^$7$?$,!"4X?t$K$O\e(B
-gnus \e$B$NJLL>4X?t\e(B (alias) \e$B$r;H$C$F$-$^$7$?!#Nc$r=P$7$^$7$g$&\e(B: Emacs \e$B$O4X?t\e(B
-@code{run-at-time} \e$B$rDj5A$7$F$$$^$9$,!"\e(BXEmacs \e$B$O4X?t\e(B @code{start-itimer}
-\e$B$rDj5A$7$F$$$^$9!#$=$3$G;d$O\e(B @code{gnus-run-at-time} \e$B$H8F$P$l$k4X?t$rDj\e(B
-\e$B5A$7!"$=$l$O\e(B Emacs \e$B$N\e(B @code{run-at-time} \e$B$HF1$80z?t$r<h$j$^$9!#\e(BGnus \e$B$r\e(B
-Emacs \e$B$G<B9T$7$F$$$k$H$-$O!"A0$N4X?t$OC1$K8e$N$b$N$NJLL>4X?t\e(B (alias) \e$B$K\e(B
-\e$B$J$C$F$$$^$9!#$7$+$7!"\e(BXEmacs \e$B$G<B9T$7$?$H$-$O!"A0<T$O<!$N4X?t$NJLL>4X?t\e(B
-(alias) \e$B$H$J$C$F$$$^$9\e(B:
+\e$B;d$O7QB3E*$K\e(B Emacs \e$B$N4X?t$N3&LL\e(B (interface) \e$B$r;H$C$F$-$^$7$?$,!"4X?t$K\e(B
+\e$B$O\e(B gnus \e$B$NJLL>4X?t\e(B (alias) \e$B$r;H$C$F$-$^$7$?!#Nc$r=P$7$^$7$g$&\e(B: Emacs \e$B$O\e(B
+\e$B4X?t\e(B @code{run-at-time} \e$B$rDj5A$7$F$$$^$9$,!"\e(BXEmacs \e$B$O4X\e(B
+\e$B?t\e(B @code{start-itimer} \e$B$rDj5A$7$F$$$^$9!#$=$3$G;d\e(B
+\e$B$O\e(B @code{gnus-run-at-time} \e$B$H8F$P$l$k4X?t$rDj5A$7!"$=$l\e(B
+\e$B$O\e(B Emacs \e$B$N\e(B @code{run-at-time} \e$B$HF1$80z?t$r<h$j$^$9!#\e(BGnus \e$B$r\e(B Emacs \e$B$G<B\e(B
+\e$B9T$7$F$$$k$H$-$O!"A0$N4X?t$OC1$K8e$N$b$N$NJLL>4X?t\e(B (alias) \e$B$K$J$C$F$$$^\e(B
+\e$B$9!#$7$+$7!"\e(BXEmacs \e$B$G<B9T$7$?$H$-$O!"A0<T$O<!$N4X?t$NJLL>4X?t\e(B (alias) \e$B$H\e(B
+\e$B$J$C$F$$$^$9\e(B:
 
 @lisp
 (defun gnus-xmas-run-at-time (time repeat function &rest args)
@@ -21543,23 +22457,22 @@ Emacs \e$B$G<B9T$7$F$$$k$H$-$O!"A0$N4X?t$OC1$K8e$N$b$N$NJLL>4X?t\e(B (alias) \e$B$K
 \e$BE*$K!"$h$j$-$l$$$K$J$j$^$9!#\e(B
 
 XEmacs \e$B$N4X?t3&LL$NJ}$,L@$i$+$K$-$l$$$J>l9g$O!";d$OBe$o$j$K$=$l$r;H$$$^\e(B
-\e$B$9!#Nc$($P!"\e(B@code{gnus-region-active-p} \e$B$O\e(B XEmacs \e$B$G$O\e(B
-@code{region-active-p} \e$B$NJLL>$G$"$k$N$KBP$7$F!"\e(BEmacs \e$B$G$O4X?t$G$9!#\e(B
+\e$B$9!#Nc$($P!"\e(B@code{gnus-region-active-p} \e$B$O\e(B XEmacs \e$B$G\e(B
+\e$B$O\e(B @code{region-active-p} \e$B$NJLL>$G$"$k$N$KBP$7$F!"\e(BEmacs \e$B$G$O4X?t$G$9!#\e(B
 
 \e$B$b$A$m$s!";d$O\e(B XEmacs \e$B$r;d$N4pK\%W%i%C%H%U%)!<%`$KA*$s$G!"4X?t$N3d$jEv$F\e(B
-\e$B$r5U$K$9$k;v$b$G$-$^$7$?!#$G$b!";d$O$=$&$7$^$;$s$G$7$?!#\e(BXEmacs \e$B$G\e(B gnus
-\e$B$r<B9T$9$k$H$-$K!"$3$&$$$&5U8~$-$N$?$a$NB.EYDc2<$O>/$7$G$7$g$&!#\e(B
-
+\e$B$r5U$K$9$k;v$b$G$-$^$7$?!#$G$b!";d$O$=$&$7$^$;$s$G$7$?!#\e(B
+XEmacs \e$B$G\e(B gnus \e$B$r<B9T$9$k$H$-$K!"$3$&$$$&5U8~$-$N$?$a$NB.EYDc2<$O>/$7$G\e(B
+\e$B$7$g$&!#\e(B
 
 @node Various File Formats
 @subsection \e$B$$$m$$$m$J%U%!%$%kMM<0\e(B
 
 @menu
-* Active File Format::      \e$B;HMQ2DG=$J5-;v%0%k!<%W$N>pJs!#\e(B
-* Newsgroups File Format::  \e$B%0%k!<%W$N5-=R!#\e(B
+* Active File Format::     \e$B;HMQ2DG=$J5-;v%0%k!<%W$N>pJs\e(B
+* Newsgroups File Format:: \e$B%0%k!<%W$N5-=R\e(B
 @end menu
 
-
 @node Active File Format
 @subsubsection \e$B%"%/%F%$%V%U%!%$%kMM<0\e(B
 
@@ -21588,9 +22501,8 @@ low-number  = <positive integer>
 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
 @end example
 
-\e$B$3$N%U%!%$%k$N40A4$J5-=R$rF@$k$?$a$K$O!"\e(B@samp{innd} \e$B$N%^%K%e%"%kJG!"FC$K\e(B
-@samp{active(5)} \e$B$r8+$F2<$5$$!#\e(B
-
+\e$B$3$N%U%!%$%k$N40A4$J5-=R$rF@$k$?$a$K$O!"\e(B@samp{innd} \e$B$N%^%K%e%"%kJG!"FC\e(B
+\e$B$K\e(B @samp{active(5)} \e$B$r8+$F2<$5$$!#\e(B
 
 @node Newsgroups File Format
 @subsubsection \e$B%K%e!<%9%0%k!<%W%U%!%$%kMM<0\e(B
@@ -21610,26 +22522,24 @@ tab           = <TAB>
 description   = <string>
 @end example
 
-
 @page
 @node Emacs for Heathens
 @section \e$B0[65EL$X$N\e(B Emacs
 
 \e$B?.$8$k$+$I$&$+$OCN$j$^$;$s$,!"\e(Bgnus \e$B$r;H$&?M$NCf$K$O\e(B Gnus Love Boat \e$B$G$N\e(B
 \e$BN9$KEk>h$9$kA0$K$"$^$j\e(B Emacs \e$B$r;H$C$?;v$,L5$$$H$$$&?M$,$$$^$9!#$b$7$"$J\e(B
-\e$B$?$,\e(B ``@kbd{M-C-a}'' \e$B$d\e(B ``\e$B%j!<%8%g%s$r@Z$k\e(B''\e$B!"$=$7$F\e(B
-``@code{gnus-flargblossen} \e$B$rO"A[%j%9%H$K@_Dj$7$F$/$@$5$$!#$=$N%-!<$O%0\e(B
-\e$B%k!<%WL>$K9gCW$9$k$?$a$K;H$o$l$k@55,I=8=$G$9\e(B'' \e$B$,>/$7$N0UL#$+A4$/0UL#$N\e(B
-\e$BL5$$KbK!$N8@MU$G$"$kIT9,$J?M$G$"$l$P!"$3$NIUO?$O$"$J$?$N$?$a$K$"$j$^$9!#\e(B
+\e$B$?$,\e(B ``@kbd{M-C-a}'' \e$B$d\e(B ``\e$B%j!<%8%g%s$r@Z$k\e(B''\e$B!"$=$7\e(B
+\e$B$F\e(B ``@code{gnus-flargblossen} \e$B$rO"A[%j%9%H$K@_Dj$7$F$/$@$5$$!#$=$N%-!<$O\e(B
+\e$B%0%k!<%WL>$K9gCW$9$k$?$a$K;H$o$l$k@55,I=8=$G$9\e(B'' \e$B$,>/$7$N0UL#$+A4$/0UL#\e(B
+\e$B$NL5$$KbK!$N8@MU$G$"$kIT9,$J?M$G$"$l$P!"$3$NIUO?$O$"$J$?$N$?$a$K$"$j$^$9!#\e(B
 \e$B$b$7$"$J$?$,4{$K\e(B Emacs \e$B$K?F$7$s$G$$$k$N$G$"$l$P!"$3$l$rL5;k$7$F<V$r2D0&\e(B
 \e$B$,$j$K9T$C$F2<$5$$!#\e(B
 
 @menu
-* Keystrokes::      \e$BJ8>O$rF~NO$7$FL?Na$r<B9T$9$k!#\e(B
-* Emacs Lisp::      \e$BHw$(IU$1$N\e(B Emacs \e$B%W%m%0%i%_%s%08@8l!#\e(B
+* Keystrokes:: \e$BJ8>O$rF~NO$7$FL?Na$r<B9T$9$k\e(B
+* Emacs Lisp:: \e$BHw$(IU$1$N\e(B Emacs \e$B%W%m%0%i%_%s%08@8l\e(B
 @end menu
 
-
 @node Keystrokes
 @subsection \e$BBG80\e(B
 
@@ -21642,11 +22552,11 @@ A: \e$BC<Kv$,%Z%@%k$r;}$C$F$$$?$i$J$!$H4j$&?M$N;v$G$9!#\e(B
 @end itemize
 
 \e$B$O$$!"$"$J$?$,\e(B Emacs \e$B$r;H$&$H!"$"$J$?$O%3%s%H%m!<%k%-!<!"%7%U%H%-!<!"%a\e(B
-\e$B%?%-!<$r$?$/$5$s;H$&$h$&$K$J$k$G$7$g$&!#$3$l$O0lIt$N?M\e(B (\e$B<g$K!"\e(B@code{vi}
-\e$BMxMQ<T\e(B) \e$B$K$OHs>o$K$&$k$5$/46$8$i$l$k$G$7$g$&!#;D$j$N?M!9$O!"$=$l$K$h$j$b\e(B
-\e$B$?$i$5$l$kCO9v$r0&$7$^$9!#$"$-$i$a$FI~=>$7$F2<$5$$!#\e(BEmacs \e$B$OK\Ev$O\e(B
-``Escape-Meta-Alt-Control-Shift'' \e$B$NN,$G!"B>$NI>H=$N0-$$=P=j\e(B (Emacs \e$B$N:n\e(B
-\e$B<T$N$h$&$J\e(B) \e$B$+$iJ9$$$?\e(B ``Editing Macros'' \e$B$G$O$"$j$^$;$s!#\e(B
+\e$B%?%-!<$r$?$/$5$s;H$&$h$&$K$J$k$G$7$g$&!#$3$l$O0lIt$N?M\e(B (\e$B<g$K!"\e(B
+@code{vi} \e$BMxMQ<T\e(B) \e$B$K$OHs>o$K$&$k$5$/46$8$i$l$k$G$7$g$&!#;D$j$N?M!9$O!"$=\e(B
+\e$B$l$K$h$j$b$?$i$5$l$kCO9v$r0&$7$^$9!#$"$-$i$a$FI~=>$7$F2<$5$$!#\e(BEmacs \e$B$OK\\e(B
+\e$BEv$O\e(B ``Escape-Meta-Alt-Control-Shift'' \e$B$NN,$G!"B>$NI>H=$N0-$$=P\e(B
+\e$B=j\e(B (Emacs \e$B$N:n<T$N$h$&$J\e(B) \e$B$+$iJ9$$$?\e(B ``Editing Macros'' \e$B$G$O$"$j$^$;$s!#\e(B
 
 \e$B%7%U%H%-!<$OIaDL$O>.;X$N6a$/$K0LCV$7$F$*$j!"IaDL$OBgJ8;z$d$=$NB>$N$b$rF@\e(B
 \e$B$k$?$a$K;H$o$l$^$9!#$"$J$?$O$:$C$H$=$l$r;H$&;v$G$7$g$&!#%3%s%H%m!<%k%-!<\e(B
@@ -21658,9 +22568,9 @@ A: \e$BC<Kv$,%Z%@%k$r;}$C$F$$$?$i$J$!$H4j$&?M$N;v$G$9!#\e(B
 ``meta-control-m \e$B%-!<$r2!$9\e(B'' \e$B$H$O8@$$$^$;$s!#;d$?$A$O\e(B ``@kbd{M-C-m} \e$B$r\e(B
 \e$B2!$9\e(B'' \e$B$H8@$$$^$9!#\e(B@kbd{M-} \e$B$O\e(B ``\e$B%a%?\e(B'' \e$B$r8=$9@\F,<-$G!"\e(B``C-'' \e$B$O\e(B ``\e$B%3%s\e(B
 \e$B%H%m!<%k\e(B'' \e$B$r0UL#$9$k@\F,<-$G$9!#$G$9$+$i!"\e(B``@kbd{C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%3\e(B
-\e$B%s%H%m!<%k%-!<$r2<$K2!$7!"\e(B@kbd{k} \e$B$r2!$7$F$$$k4V!"$=$l$r2<$KJ]$A$J$5$$\e(B''
-\e$B$H8@$&;v$G$9!#\e(B``@kbd{M-C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%a%?%-!<$H%3%s%H%m!<%k%-!<$r2!\e(B
-\e$B$7$F2<$KJ]$C$?8e$G\e(B @kbd{k} \e$B$r2!$9\e(B'' \e$B$H8@$&;v$G$9!#4JC1$G$7$g!#$M!)\e(B
+\e$B%s%H%m!<%k%-!<$r2<$K2!$7!"\e(B@kbd{k} \e$B$r2!$7$F$$$k4V!"$=$l$r2<$KJ]$A$J$5\e(B
+\e$B$$\e(B'' \e$B$H8@$&;v$G$9!#\e(B``@kbd{M-C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%a%?%-!<$H%3%s%H%m!<%k%-!<\e(B
+\e$B$r2!$7$F2<$KJ]$C$?8e$G\e(B @kbd{k} \e$B$r2!$9\e(B'' \e$B$H8@$&;v$G$9!#4JC1$G$7$g!#$M\e(B?
 
 \e$B$3$l$OA4$F$N%-!<%\!<%I$,%a%?%-!<$r;}$C$F$$$k$o$1$G$O$J$$$H8@$&;v<B$K$h$j\e(B
 \e$B>/$7J#;($K$J$C$F$$$^$9!#$=$N$h$&$J>l9g$O!"\e(B``\e$B%(%9%1!<%W\e(B'' \e$B%-!<$r;H$&;v$,\e(B
@@ -21668,8 +22578,6 @@ A: \e$BC<Kv$,%Z%@%k$r;}$C$F$$$?$i$J$!$H4j$&?M$N;v$G$9!#\e(B
 \e$B$G!"$=$&$$$&>l9g$O!";d$O%a%?%-!<$N$"$k%-!<%\!<%I$r<j$KF~$l$k;v$r63$7$/$*\e(B
 \e$B4+$aCW$7$^$9!#$=$lL5$7$G$O@8$-$F9T$1$J$$$G$7$g$&!#\e(B
 
-
-
 @node Emacs Lisp
 @subsection Emacs Lisp
 
@@ -21680,12 +22588,13 @@ Emacs \e$B$O$=$l$,K\Ev$O\e(B Lisp \e$B%$%s%?!<%W%j%?!<$G$"$k;v$+$i!"%(%G%#%?!<$N2&M
 \e$B$&;v$G$9!#$"$J$?$O!"C1$K!"$=$&$9$l$PNI$$$@$1$G$9!#\e(B
 
 Gnus \e$B$O\e(B Emacs Lisp \e$B$K$h$C$F=q$+$l$F$$$F!"$=$l$O$?$/$5$s$NC`<!2r<a<B9T$5\e(B
-\e$B$l$k4X?t$K$h$j<B9T$5$l$^$9!#\e(B (\e$B$3$l$i$OB.EY$N$?$a$K%P%$%H%3%s%Q%$%k$5$l$F\e(B
+\e$B$l$k4X?t$K$h$j<B9T$5$l$^$9!#\e(B(\e$B$3$l$i$OB.EY$N$?$a$K%P%$%H%3%s%Q%$%k$5$l$F\e(B
 \e$B$$$^$9$,!"$=$l$G$b$^$@C`<!2r<a$5$l$^$9!#\e(B) \e$B$b$7\e(B gnus \e$B$,$9$k$"$k;v$r9%$-$G\e(B
-\e$B$O$J$$$H;W$C$?$J$i!"0c$C$?$h$&$K<B9T$5$;$k$N$O<h$k$KB-$i$J$$;v$G$9!#\e(B (\e$B$(!<\e(B
+\e$B$O$J$$$H;W$C$?$J$i!"0c$C$?$h$&$K<B9T$5$;$k$N$O<h$k$KB-$i$J$$;v$G$9!#\e(B(\e$B$(!<\e(B
 \e$B$H!">/$J$/$H$b\e(B Lisp \e$B%3!<%I$N=q$-J}$rCN$C$F$$$l$P!#\e(B) \e$B$7$+$7!"$=$l$O$3$N%^\e(B
-\e$B%K%e%"%k$NHO0O30$J$N$G!"2f!9$OC1$K\e(B gnus \e$B$r%+%9%?%^%$%:$9$k$?$a$K%U%!%$%k\e(B
-@file{.emacs} \e$B$GIaDL;H$o$l$k$$$/$D$+$NIaDL$N9=J8$K$D$$$F$@$1OC$r$7$^$9!#\e(B
+\e$B%K%e%"%k$NHO0O30$J$N$G!"2f!9$OC1$K\e(B gnus \e$B$r%+%9%?%^%$%:$9$k$?$a$K%U%!%$\e(B
+\e$B%k\e(B @file{.emacs} \e$B$GIaDL;H$o$l$k$$$/$D$+$NIaDL$N9=J8$K$D$$$F$@$1OC$r$7$^\e(B
+\e$B$9!#\e(B
 
 \e$B$b$7JQ?t\e(B@code{gnus-florgbnize} \e$B$r;M\e(B (4) \e$B$K@_Dj$7$?$$$N$G$"$l$P!"0J2<$N$b\e(B
 \e$B$N$r=q$-$^$9\e(B:
@@ -21700,10 +22609,10 @@ Gnus \e$B$O\e(B Emacs Lisp \e$B$K$h$C$F=q$+$l$F$$$F!"$=$l$O$?$/$5$s$NC`<!2r<a<B9T$5
 \e$B%$%k\e(B @code{.emacs} \e$B$rKd$a?T$/$9;v$,$G$-$^$9!#\e(B
 
 \e$B$b$7$"$J$?$,$=$N$h$&$J$b$N$r%U%!%$%k\e(B @code{.emacs} \e$B$KF~$l$?$i!"$=$l$O<!\e(B
-\e$B2s$K\e(B Emacs \e$B$r5/F0$7$?$H$-$KFI$_9~$^$l\e(B @code{\e$BI>2A\e(B} (\e$B$=$l$O\e(B ``\e$B<B9T\e(B'' \e$B$N\e(B
-lisp \e$B8l$G$9\e(B) \e$B$5$l$^$9!#$b$7JQ?t$r$9$0$KJQ99$7$?$$$N$G$"$l$P!"JD$83g8L$N\e(B
-\e$B8e$GC1$K\e(B @kbd{C-x C-e} \e$B$H$9$k$@$1$G$9!#$=$l$OA0$K$"$k\e(B ``\e$B<0\e(B'' \e$B$r\e(B @code{\e$BI>\e(B
-\e$B2A\e(B} \e$B$7!"$=$l$O$3$3$G$O4JC1$J\e(B @code{setq} \e$BJ8$G$9!#\e(B
+\e$B2s$K\e(B Emacs \e$B$r5/F0$7$?$H$-$KFI$_9~$^$l\e(B @code{\e$BI>2A\e(B} (\e$B$=$l$O\e(B ``\e$B<B\e(B
+\e$B9T\e(B'' \e$B$N\e(B lisp \e$B8l$G$9\e(B) \e$B$5$l$^$9!#$b$7JQ?t$r$9$0$KJQ99$7$?$$$N$G$"$l$P!"JD\e(B
+\e$B$83g8L$N8e$GC1$K\e(B @kbd{C-x C-e} \e$B$H$9$k$@$1$G$9!#$=$l$OA0$K$"\e(B
+\e$B$k\e(B ``\e$B<0\e(B'' \e$B$r\e(B @code{\e$BI>2A\e(B} \e$B$7!"$=$l$O$3$3$G$O4JC1$J\e(B @code{setq} \e$BJ8$G$9!#\e(B
 
 \e$B$,$s$P$C$F\e(B---\e$B$b$7$"$J$?$,\e(B Emacs \e$B$NA0$K$"$k$N$G$"$l$P$A$g$C$H;n$7$F2<$5$$!#\e(B
 @kbd{C-x C-e} \e$B$N8e$G!"H?6A6h0h\e(B (echo area) \e$B$K\e(B @samp{4} \e$B$,8=$o$l$k$N$,8+\e(B
@@ -21720,8 +22629,9 @@ lisp \e$B8l$G$9\e(B) \e$B$5$l$^$9!#$b$7JQ?t$r$9$0$KJQ99$7$?$$$N$G$"$l$P!"JD$83g8L$N
 
 \e$B$H8@$&;v$G$9!#\e(B
 
-\e$B0lJ}!"%^%K%e%"%k$,\e(B ``@code{gnus-nntp-server} \e$B$r\e(B @samp{nntp.ifi.uio.no}
-\e$B$K@_Dj$7$J$5$$\e(B'' \e$B$H8@$C$?$J$i!"$=$l$O\e(B:
+\e$B0lJ}!"%^%K%e%"%k\e(B
+\e$B$,\e(B ``@code{gnus-nntp-server} \e$B$r\e(B @samp{nntp.ifi.uio.no} \e$B$K@_Dj$7$J$5$$\e(B'' \e$B$H\e(B
+\e$B8@$C$?$J$i!"$=$l$O\e(B:
 
 @lisp
 (setq gnus-nntp-server "nntp.ifi.uio.no")
index 13a5dc6..4e158d7 100644 (file)
@@ -1,13 +1,14 @@
 \input texinfo                  @c -*-texinfo-*-  -*- coding: iso-latin-1 -*-
 
 @setfilename gnus
-@settitle T-gnus 6.13 Manual
+@settitle T-gnus 6.14 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Gnus: (gnus).         The newsreader Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Gnus: (gnus).         The newsreader Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
 
-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, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 \newpage
 \end{titlepage}
 @end iflatex
 @end iftex
 
-@ifinfo
+@ifnottex
 
 This file documents gnus, the GNU Emacs newsreader.
 
-Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
-
-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.
+Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
 
-@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).
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end ifnottex
 
 @tex
 
 @titlepage
-@title T-gnus 6.13 Manual
+@title T-gnus 6.14 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright @copyright{} 1995,96,97,98,99,2000 Free Software Foundation, Inc.
 
-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, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-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.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
 @end titlepage
 @page
@@ -362,7 +371,7 @@ internationalization/localization and multiscript features based on MULE
 API.  So T-gnus does not discriminate various language communities.
 Oh, if you are a Klingon, please wait Unicode Next Generation.
 
-This manual corresponds to T-gnus 6.13.
+This manual corresponds to T-gnus 6.14.
 
 @end ifinfo
 
@@ -381,8 +390,8 @@ being accused of plagiarism:
 
 Gnus is a message-reading laboratory.  It will let you look at just
 about anything as if it were a newsgroup.  You can read mail with it,
-you can browse directories with it, you can @code{ftp} with it---you can
-even read news with it!
+you can browse directories with it, you can @code{ftp} with it---you
+can even read news with it!
 
 Gnus tries to empower people who read news the same way Emacs empowers
 people who edit text.  Gnus sets no limits to what the user should be
@@ -393,7 +402,6 @@ the program.
 
 @end iftex
 
-
 @menu
 * Starting Up::           Finding news can be a pain.
 * The Group Buffer::      Selecting, subscribing and killing groups.
@@ -407,6 +415,463 @@ the program.
 * Appendices::            Terminology, Emacs intro, FAQ, History, Internals.
 * Index::                 Variable, function and concept index.
 * Key Index::             Key Index.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Starting Gnus
+
+* Finding the News::    Choosing a method for getting news.
+* The First Time::      What does Gnus do the first time you start it?
+* The Server is Down::  How can I read my mail then?
+* Slave Gnusae::        You can have more than one Gnus active at a time.
+* Fetching a Group::    Starting Gnus just to read a group.
+* New Groups::          What is Gnus supposed to do with new groups?
+* Startup Files::       Those pesky startup files---@file{.newsrc}.
+* Auto Save::           Recovering from a crash.
+* The Active File::     Reading the active file over a slow line Takes Time.
+* Changing Servers::    You may want to move from one server to another.
+* Startup Variables::   Other variables you might change.
+
+New Groups
+
+* Checking New Groups::      Determining what groups are new.
+* Subscription Methods::     What Gnus should do with new groups.
+* Filtering New Groups::     Making Gnus ignore certain new groups.
+
+The Group Buffer
+
+* Group Buffer Format::    Information listed and how you can change it.
+* Group Maneuvering::      Commands for moving in the group buffer.
+* Selecting a Group::      Actually reading news.
+* Group Data::             Changing the info for a group.
+* Subscription Commands::  Unsubscribing, killing, subscribing.
+* Group Levels::           Levels? What are those, then?
+* Group Score::            A mechanism for finding out what groups you like.
+* Marking Groups::         You can mark groups for later processing.
+* Foreign Groups::         Creating and editing groups.
+* Group Parameters::       Each group may have different parameters set.
+* Listing Groups::         Gnus can list various subsets of the groups.
+* Sorting Groups::         Re-arrange the group order.
+* Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
+* Browse Foreign Server::  You can browse a server.  See what it has to offer.
+* Exiting Gnus::           Stop reading news and get some work done.
+* Group Topics::           A folding group mode divided into topics.
+* Misc Group Stuff::       Other stuff that you can to do.
+
+Group Buffer Format
+
+* Group Line Specification::       Deciding how the group buffer is to look.
+* Group Modeline Specification::   The group buffer modeline.
+* Group Highlighting::             Having nice colors in the group buffer.
+
+Group Topics
+
+* Topic Variables::    How to customize the topics the Lisp Way.
+* Topic Commands::     Interactive E-Z commands.
+* Topic Sorting::      Sorting each topic individually.
+* Topic Topology::     A map of the world.
+* Topic Parameters::   Parameters that apply to all groups in a topic.
+
+Misc Group Stuff
+
+* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
+* Group Information::     Information and help on groups and Gnus.
+* Group Timestamp::       Making Gnus keep track of when you last read a group.
+* File Commands::         Reading and writing the Gnus files.
+
+The Summary Buffer
+
+* Summary Buffer Format::       Deciding how the summary buffer is to look.
+* Summary Maneuvering::         Moving around the summary buffer.
+* Choosing Articles::           Reading articles.
+* Paging the Article::          Scrolling the current article.
+* Reply Followup and Post::     Posting articles.
+* Marking Articles::            Marking articles as read, expirable, etc.
+* Limiting::                    You can limit the summary buffer.
+* Threading::                   How threads are made.
+* Sorting::                     How articles and threads are sorted.
+* Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
+* Article Caching::             You may store articles in a cache.
+* Persistent Articles::         Making articles expiry-resistant.
+* Article Backlog::             Having already read articles hang around.
+* Saving Articles::             Ways of customizing article saving.
+* Decoding Articles::           Gnus can treat series of (uu)encoded articles.
+* Article Treatment::           The article buffer can be mangled at will.
+* MIME Commands::               Doing MIMEy things with the articles.
+* Charsets::                    Character set issues.
+* Article Commands::            Doing various things with the article buffer.
+* Summary Sorting::             Sorting the summary buffer in various ways.
+* Finding the Parent::          No child support? Get the parent.
+* Alternative Approaches::      Reading using non-default summaries.
+* Tree Display::                A more visual display of threads.
+* Mail Group Commands::         Some commands can only be used in mail groups.
+* Various Summary Stuff::       What didn't fit anywhere else.
+* Exiting the Summary Buffer::  Returning to the Group buffer.
+* Crosspost Handling::          How crossposted articles are dealt with.
+* Duplicate Suppression::       An alternative when crosspost handling fails.
+
+Summary Buffer Format
+
+* Summary Buffer Lines::     You can specify how summary lines should look.
+* To From Newsgroups::       How to not display your own name.
+* Summary Buffer Mode Line:: You can say how the mode line should look.
+* Summary Highlighting::     Making the summary buffer all pretty and nice.
+
+Choosing Articles
+
+* Choosing Commands::        Commands for choosing articles.
+* Choosing Variables::       Variables that influence these commands.
+
+Reply, Followup and Post
+
+* Summary Mail Commands::    Sending mail.
+* Summary Post Commands::    Sending news.
+* Summary Message Commands:: Other Message-related commands.
+* Canceling and Superseding:: ``Whoops, I shouldn't have called him that.''
+
+Marking Articles
+
+* Unread Articles::          Marks for unread articles.
+* Read Articles::            Marks for read articles.
+* Other Marks::              Marks that do not affect readedness.
+* Setting Marks::            How to set and remove marks.
+* Generic Marking Commands:: How to customize the marking.
+* Setting Process Marks::    How to mark articles for later processing.
+
+Threading
+
+* Customizing Threading::    Variables you can change to affect the threading.
+* Thread Commands::          Thread based commands in the summary buffer.
+
+Customizing Threading
+
+* Loose Threads::        How Gnus gathers loose threads into bigger threads.
+* Filling In Threads::   Making the threads displayed look fuller.
+* More Threading::       Even more variables for fiddling with threads.
+* Low-Level Threading::  You thought it was over... but you were wrong!
+
+Decoding Articles
+
+* Uuencoded Articles::    Uudecode articles.
+* Shell Archives::        Unshar articles.
+* PostScript Files::      Split PostScript.
+* Other Files::           Plain save and binhex.
+* Decoding Variables::    Variables for a happy decoding.
+* Viewing Files::         You want to look at the result of the decoding?
+
+Decoding Variables
+
+* Rule Variables::          Variables that say how a file is to be viewed.
+* Other Decode Variables::  Other decode variables.
+* Uuencoding and Posting::  Variables for customizing uuencoding.
+
+Article Treatment
+
+* Article Highlighting::    You want to make the article look like fruit salad.
+* Article Fontisizing::     Making emphasized text look nice.
+* Article Hiding::          You also want to make certain info go away.
+* Article Washing::         Lots of way-neat functions to make life better.
+* Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
+* Article Date::            Grumble, UT!
+* Article Signature::       What is a signature?
+* Article Miscellania::     Various other stuff.
+
+Alternative Approaches
+
+* Pick and Read::               First mark articles and then read them.
+* Binary Groups::               Auto-decode all articles.
+
+Various Summary Stuff
+
+* Summary Group Information::         Information oriented commands.
+* Searching for Articles::            Multiple article commands.
+* Summary Generation Commands::       (Re)generating the summary buffer.
+* Really Various Summary Commands::   Those pesky non-conformant commands.
+
+The Article Buffer
+
+* Hiding Headers::        Deciding what headers should be displayed.
+* Using MIME::            Pushing articles through @sc{mime} before reading them.
+* Customizing Articles::  Tailoring the look of the articles.
+* Article Keymap::        Keystrokes available in the article buffer.
+* Misc Article::          Other stuff.
+
+Composing Messages
+
+* Mail::                 Mailing and replying.
+* Post::                 Posting and following up.
+* Posting Server::       What server should you post via?
+* Mail and Post::        Mailing and posting at the same time.
+* Archived Messages::    Where Gnus stores the messages you've sent.
+* Posting Styles::       An easier way to specify who you are.
+* Drafts::               Postponing messages and rejected messages.
+* Rejected Articles::    What happens if the server doesn't like your article?
+
+Select Methods
+
+* The Server Buffer::     Making and editing virtual servers.
+* Getting News::          Reading USENET news with Gnus.
+* Getting Mail::          Reading your personal mail with Gnus.
+* Browsing the Web::      Getting messages from a plethora of Web sources.
+* Other Sources::         Reading directories, files, SOUP packets.
+* Combined Groups::       Combining groups into one group.
+* Gnus Unplugged::        Reading news and mail offline.
+
+The Server Buffer
+
+* Server Buffer Format::      You can customize the look of this buffer.
+* Server Commands::           Commands to manipulate servers.
+* Example Methods::           Examples server specifications.
+* Creating a Virtual Server:: An example session.
+* Server Variables::          Which variables to set.
+* Servers and Methods::       You can use server names as select methods.
+* Unavailable Servers::       Some servers you try to contact may be down.
+
+Getting News
+
+* NNTP::               Reading news from an @sc{nntp} server.
+* News Spool::         Reading news from the local spool.
+
+Getting Mail
+
+* Mail in a Newsreader::         Important introductory notes.  
+* Getting Started Reading Mail:: A simple cookbook example.
+* Splitting Mail::               How to create mail groups.
+* Mail Sources::                 How to tell Gnus where to get mail from.
+* Mail Backend Variables::       Variables for customizing mail handling.
+* Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
+* Group Mail Splitting::         Use group customize to drive mail splitting.
+* Incorporating Old Mail::       What about the old mail you have?
+* Expiring Mail::                Getting rid of unwanted mail.
+* Washing Mail::                 Removing gruft from the mail you get.
+* Duplicates::                   Dealing with duplicated mail.
+* Not Reading Mail::             Using mail backends for reading other files.
+* Choosing a Mail Backend::      Gnus can read a variety of mail formats.
+
+Mail Sources
+
+* Mail Source Specifiers::       How to specify what a mail source is.
+* Mail Source Customization::    Some variables that influence things.
+* Fetching Mail::                Using the mail source specifiers.
+
+Choosing a Mail Backend
+
+* Unix Mail Box::               Using the (quite) standard Un*x mbox.
+* Rmail Babyl::                 Emacs programs use the rmail babyl format.
+* Mail Spool::                  Store your mail in a private spool?
+* MH Spool::                    An mhspool-like backend.
+* Mail Folders::                Having one file for each group.
+* Comparing Mail Backends::     An in-depth looks at pros and cons.
+
+Browsing the Web
+
+* Web Searches::          Creating groups from articles that match a string.
+* Slashdot::              Reading the Slashdot comments.
+* Ultimate::              The Ultimate Bulletin Board systems.
+* Web Archive::           Reading mailing list archived on web.
+
+Other Sources
+
+* Directory Groups::      You can read a directory as if it was a newsgroup.
+* Anything Groups::       Dired?  Who needs dired?
+* Document Groups::       Single files can be the basis of a group.
+* SOUP::                  Reading @sc{soup} packets ``offline''.
+* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
+* IMAP::                  Using Gnus as a @sc{imap} client.
+
+Document Groups
+
+* Document Server Internals::   How to add your own document types.
+
+SOUP
+
+* SOUP Commands::     Commands for creating and sending @sc{soup} packets
+* SOUP Groups::       A backend for reading @sc{soup} packets.
+* SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
+
+@sc{imap}
+
+* Splitting in IMAP::     Splitting mail with nnimap.
+* Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
+* Expunging mailboxes::   Equivalent of a "compress mailbox" button.
+
+Combined Groups
+
+* Virtual Groups::     Combining articles from many groups.
+* Kibozed Groups::     Looking through parts of the newsfeed for articles.
+
+Gnus Unplugged
+
+* Agent Basics::           How it all is supposed to work.
+* Agent Categories::       How to tell the Gnus Agent what to download.
+* Agent Commands::         New commands for all the buffers.
+* Agent Expiry::           How to make old articles go away.
+* Agent and IMAP::         How to use the Agent with IMAP.
+* Outgoing Messages::      What happens when you post/mail something?
+* Agent Variables::        Customizing is fun.
+* Example Setup::          An example @file{.gnus.el} file for offline people.
+* Batching Agents::        How to fetch news from a @code{cron} job.
+* Agent Caveats::          What you think it'll do and what it does.
+
+Agent Categories
+
+* Category Syntax::       What a category looks like.
+* The Category Buffer::   A buffer for maintaining categories.
+* Category Variables::    Customize'r'Us.
+
+Agent Commands
+
+* Group Agent Commands::
+* Summary Agent Commands::
+* Server Agent Commands::
+
+Scoring
+
+* Summary Score Commands::   Adding score entries for the current group.
+* Group Score Commands::     General score commands.
+* Score Variables::          Customize your scoring.  (My, what terminology).
+* Score File Format::        What a score file may contain.
+* Score File Editing::       You can edit score files by hand as well.
+* Adaptive Scoring::         Big Sister Gnus knows what you read.
+* Home Score File::          How to say where new score entries are to go.
+* Followups To Yourself::    Having Gnus notice when people answer you.
+* Scoring Tips::             How to score effectively.
+* Reverse Scoring::          That problem child of old is not problem.
+* Global Score Files::       Earth-spanning, ear-splitting score files.
+* Kill Files::               They are still here, but they can be ignored.
+* Converting Kill Files::    Translating kill files to score files.
+* GroupLens::                Getting predictions on what you like to read.
+* Advanced Scoring::         Using logical expressions to build score rules.
+* Score Decays::             It can be useful to let scores wither away.
+
+GroupLens
+
+* Using GroupLens::          How to make Gnus use GroupLens.
+* Rating Articles::          Letting GroupLens know how you rate articles.
+* Displaying Predictions::   Displaying predictions given by GroupLens.
+* GroupLens Variables::      Customizing GroupLens.
+
+Advanced Scoring
+
+* Advanced Scoring Syntax::     A definition.
+* Advanced Scoring Examples::   What they look like.
+* Advanced Scoring Tips::       Getting the most out of it.
+
+Various
+
+* Process/Prefix::             A convention used by many treatment commands.
+* Interactive::                Making Gnus ask you many questions.
+* Symbolic Prefixes::          How to supply some Gnus functions with options.
+* Formatting Variables::       You can specify what buffers should look like.
+* Windows Configuration::      Configuring the Gnus buffer windows.
+* Faces and Fonts::            How to change how faces look.
+* Compilation::                How to speed Gnus up.
+* Mode Lines::                 Displaying information in the mode lines.
+* Highlighting and Menus::     Making buffers look all nice and cozy.
+* Buttons::                    Get tendonitis in ten easy steps!
+* Daemons::                    Gnus can do things behind your back.
+* NoCeM::                      How to avoid spam and other fatty foods.
+* Undo::                       Some actions can be undone.
+* Moderation::                 What to do if you're a moderator.
+* XEmacs Enhancements::        There are more pictures and stuff under XEmacs.
+* Fuzzy Matching::             What's the big fuzz?
+* Thwarting Email Spam::       A how-to on avoiding unsolicited commercial email.
+* Various Various::            Things that are really various.
+
+Formatting Variables
+
+* Formatting Basics::     A formatting variable is basically a format string.
+* Mode Line Formatting::  Some rules about mode line formatting variables.
+* Advanced Formatting::   Modifying output in various ways.
+* User-Defined Specs::    Having Gnus call your own functions.
+* Formatting Fonts::      Making the formatting look colorful and nice.
+
+XEmacs Enhancements
+
+* Picons::    How to display pictures of what your reading.
+* Smileys::   Show all those happy faces the way they were meant to be shown.
+* Toolbar::   Click'n'drool.
+* XVarious::  Other XEmacsy Gnusey variables.
+
+Picons
+
+* Picon Basics::           What are picons and How do I get them.
+* Picon Requirements::     Don't go further if you aren't using XEmacs.
+* Easy Picons::            Displaying Picons---the easy way.
+* Hard Picons::            The way you should do it.  You'll learn something.
+* Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
+
+Appendices
+
+* History::                        How Gnus got where it is today.
+* On Writing Manuals::             Why this is not a beginner's guide.
+* Terminology::                    We use really difficult, like, words here.
+* Customization::                  Tailoring Gnus to your needs.
+* Troubleshooting::                What you might try if things do not work.
+* Gnus Reference Guide::           Rilly, rilly technical stuff.
+* Emacs for Heathens::             A short introduction to Emacsian terms.
+* Frequently Asked Questions::     A question-and-answer session.
+
+History
+
+* Gnus Versions::       What Gnus versions have been released.
+* Other Gnus Versions:: Other Gnus versions that also have been released.
+* Why?::                What's the point of Gnus?
+* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
+* Conformity::          Gnus tries to conform to all standards.
+* Emacsen::             Gnus can be run on a few modern Emacsen.
+* Gnus Development::    How Gnus is developed.
+* Contributors::        Oodles of people.
+* New Features::        Pointers to some of the new stuff in Gnus.
+* Newest Features::     Features so new that they haven't been written yet.
+
+New Features
+
+* ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
+* September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
+* Red Gnus::           Third time best---Gnus 5.4/5.5.
+* Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
+
+Customization
+
+* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
+* Slow Terminal Connection::  You run a remote Emacs.
+* Little Disk Space::         You feel that having large setup files is icky.
+* Slow Machine::              You feel like buying a faster machine.
+
+Gnus Reference Guide
+
+* Gnus Utility Functions::   Common functions and variable to use.
+* Backend Interface::        How Gnus communicates with the servers.
+* Score File Syntax::        A BNF definition of the score file standard.
+* Headers::                  How Gnus stores headers internally.
+* Ranges::                   A handy format for storing mucho numbers.
+* Group Info::               The group info format.
+* Extended Interactive::     Symbolic prefixes and stuff.
+* Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.
+* Various File Formats::     Formats of files that Gnus use.
+
+Backend Interface
+
+* Required Backend Functions::        Functions that must be implemented.
+* Optional Backend Functions::        Functions that need not be implemented.
+* Error Messaging::                   How to get messages and report errors.
+* Writing New Backends::              Extending old backends.
+* Hooking New Backends Into Gnus::    What has to be done on the Gnus end.
+* Mail-like Backends::                Some tips on mail backends.
+
+Various File Formats
+
+* Active File Format::      Information on articles and groups available.
+* Newsgroups File Format::  Group descriptions.
+
+Emacs for Heathens
+
+* Keystrokes::      Entering text and executing commands.
+* Emacs Lisp::      The built-in Emacs programming language.
+
+@end detailmenu
 @end menu
 
 @node Starting Up
@@ -585,7 +1050,7 @@ levels.)
 
 You might want to run more than one Emacs with more than one gnus at the
 same time.  If you are using different @file{.newsrc} files (e.g., if you
-are using the two different gnusae to read from two different servers),
+are using the two different Gnusae to read from two different servers),
 that is no problem whatsoever.  You just do it.
 
 The problem appears when you want to run two Gnusae that use the same
@@ -600,7 +1065,7 @@ me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
 Applications}) will be much more expensive, of course.)
 
 Anyways, you start one gnus up the normal way with @kbd{M-x gnus} (or
-however you do it).  Each subsequent slave gnusae should be started with
+however you do it).  Each subsequent slave Gnusae should be started with
 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
 files, but instead save @dfn{slave files} that contain information only
 on what groups have been read in the slave session.  When a master gnus
@@ -866,11 +1331,11 @@ affect which articles Gnus thinks are read.
 Now, you all know about the @file{.newsrc} file.  All subscription
 information is traditionally stored in this file.
 
-Things got a bit more complicated with @sc{GNUS}.  In addition to
+Things got a bit more complicated with @sc{gnus}.  In addition to
 keeping the @file{.newsrc} file updated, it also used a file called
 @file{.newsrc.el} for storing all the information that didn't fit into
 the @file{.newsrc} file.  (Actually, it also duplicated everything in
-the @file{.newsrc} file.)  @sc{GNUS} would read whichever one of these
+the @file{.newsrc} file.)  @sc{gnus} would read whichever one of these
 files was the most recently saved, which enabled people to swap between
 @sc{gnus} and other newsreaders.
 
@@ -1319,16 +1784,18 @@ Here's an example value for this variable that might look nice if the
 background is dark:
 
 @lisp
-(face-spec-set 'my-group-face-1
-               '((t (:foreground "Red" :bold t))))
-(face-spec-set 'my-group-face-2
-               '((t (:foreground "SeaGreen" :bold t))))
-(face-spec-set 'my-group-face-3
-               '((t (:foreground "SpringGreen" :bold t))))
-(face-spec-set 'my-group-face-4
-               '((t (:foreground "SteelBlue" :bold t))))
-(face-spec-set 'my-group-face-5
-               '((t (:foreground "SkyBlue" :bold t))))
+(cond (window-system
+       (setq custom-background-mode 'light)
+       (defface my-group-face-1
+        '((t (:foreground "Red" :bold t))) "First group face")
+       (defface my-group-face-2
+        '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
+       (defface my-group-face-3
+        '((t (:foreground "Green4" :bold t))) "Third group face")
+       (defface my-group-face-4
+        '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+       (defface my-group-face-5
+        '((t (:foreground "Blue" :bold t))) "Fifth group face")))
 
 (setq gnus-group-highlight
       '(((> unread 200) . my-group-face-1)
@@ -1472,6 +1939,14 @@ determines the number of articles gnus will fetch.  If @var{N} is
 positive, gnus fetches the @var{N} newest articles, if @var{N} is
 negative, Gnus fetches the @code{abs(@var{N})} oldest articles.
 
+Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old
+articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u
+- 4 2 SPC} fetches the 42 oldest ones.
+
+When you are in the group (in the Summary buffer), you can type
+@kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old
+ones.
+
 @item RET
 @kindex RET (Group)
 @findex gnus-group-select-group
@@ -1718,6 +2193,27 @@ reasons of efficiency.
 It is recommended that you keep all your mail groups (if any) on quite
 low levels (e.g. 1 or 2).
 
+Maybe the following description of the default behavior of Gnus helps to
+understand what these levels are all about.  By default, Gnus shows you
+subscribed nonempty groups, but by hitting @kbd{L} you can have it show
+empty subscribed groups and unsubscribed groups, too.  Type @kbd{l} to
+go back to showing nonempty subscribed groups again.  Thus, unsubscribed
+groups are hidden, in a way.
+
+Zombie and killed groups are similar to unsubscribed groups in that they
+are hidden by default.  But they are different from subscribed and
+unsubscribed groups in that Gnus doesn't ask the news server for
+information (number of messages, number of unread messages) on zombie
+and killed groups.  Normally, you use @kbd{C-k} to kill the groups you
+aren't interested in.  If most groups are killed, Gnus is faster.
+
+Why does Gnus distinguish between zombie and killed groups?  Well, when
+a new group arrives on the server, Gnus by default makes it a zombie
+group.  This means that you are normally not bothered with new groups,
+but you can type @kbd{A z} to get a list of all new groups.  Subscribe
+the ones you like and kill the ones you don't want.  (@kbd{A k} shows a
+list of killed groups.)
+
 If you want to play with the level variables, you should show some care.
 Set them once, and don't touch them ever again.  Better yet, don't touch
 them at all unless you know exactly what you're doing.
@@ -1738,6 +2234,9 @@ will go to the next group of the same level (or lower).  This might be
 handy if you want to read the most important groups before you read the
 rest.
 
+If this variable is @code{best}, Gnus will make the next newsgroup the
+one with the best level.
+
 @vindex gnus-group-default-list-level
 All groups with a level less than or equal to
 @code{gnus-group-default-list-level} will be listed in the group buffer
@@ -2048,7 +2547,7 @@ The following group parameters can be used:
 Address used by when doing followups and new posts.
 
 @example
-(to-address .  "some@@where.com")
+(to-address . "some@@where.com")
 @end example
 
 This is primarily useful in mail groups that represent closed mailing
@@ -2066,7 +2565,7 @@ list address instead.
 
 @item to-list
 @cindex to-list
-Address used when doing a @kbd{a} in that group.
+Address used when doing @kbd{a} in that group.
 
 @example
 (to-list . "some@@where.com")
@@ -2115,7 +2614,7 @@ news group.
 @item gcc-self
 @cindex gcc-self
 If @code{(gcc-self . t)} is present in the group parameter list, newly
-composed messages will be @code{Gcc}'d to the current group. If
+composed messages will be @code{Gcc}'d to the current group.  If
 @code{(gcc-self . none)} is present, no @code{Gcc:} header will be
 generated, if @code{(gcc-self . "string")} is present, this string will
 be inserted literally as a @code{gcc} header.  This parameter takes
@@ -2203,9 +2702,9 @@ group.  @code{dummy-variable} will be set to the result of the
 
 @item posting-style
 You can store additional posting style information for this group only
-here (@pxref{Posting Styles}). The format is that of an entry in the
+here (@pxref{Posting Styles}).  The format is that of an entry in the
 @code{gnus-posting-styles} alist, except that there's no regexp matching
-the group name (of course). Style elements in this group parameter will
+the group name (of course).  Style elements in this group parameter will
 take precedence over the ones found in @code{gnus-posting-styles}.
 
 For instance, if you want a funky name and signature in this group only,
@@ -2310,6 +2809,16 @@ List all groups that have names that match a regexp
 List all groups that have names or descriptions that match a regexp
 (@code{gnus-group-description-apropos}).
 
+@item A c
+@kindex A c (Group)
+@findex gnus-group-list-cached
+List all groups with cached articles (@code{gnus-group-list-cached}).
+
+@item A ?
+@kindex A ? (Group)
+@findex gnus-group-list-dormant
+List all groups with dormant articles (@code{gnus-group-list-dormant}).
+
 @end table
 
 @vindex gnus-permanently-visible-groups
@@ -2756,6 +3265,18 @@ Copy the current group to some other topic
 (@code{gnus-topic-copy-group}).  This command uses the process/prefix
 convention (@pxref{Process/Prefix}).
 
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-hide-topic
+Hide the current topic (@code{gnus-topic-hide-topic}).  If given
+a prefix, hide the topic permanently.
+
+@item T s
+@kindex T s (Topic)
+@findex gnus-topic-show-topic
+Show the current topic (@code{gnus-topic-show-topic}).  If given
+a prefix, show the topic permanently.
+
 @item T D
 @kindex T D (Topic)
 @findex gnus-topic-remove-group
@@ -3086,8 +3607,29 @@ generated.  It may be used to move point around, for instance.
 Groups matching this regexp will always be listed in the group buffer,
 whether they are empty or not.
 
-@end table
+@item gnus-group-name-charset-method-alist
+@vindex gnus-group-name-charset-method-alist
+An alist of method and the charset for group names. It is used to show
+non-ASCII group names.
 
+For example:
+@lisp
+(setq gnus-group-name-charset-method-alist
+    '(((nntp "news.com.cn") . cn-gb-2312)))
+@end lisp
+
+@item gnus-group-name-charset-group-alist
+@vindex gnus-group-name-charset-group-alist
+An alist of regexp of group name and the charset for group names. 
+It is used to show non-ASCII group names.
+
+For example:
+@lisp
+(setq gnus-group-name-charset-group-alist
+    '(("\\.com\\.cn:" . cn-gb-2312)))
+@end lisp
+
+@end table
 
 @node Scanning New Messages
 @subsection Scanning New Messages
@@ -3380,7 +3922,8 @@ The following format specification characters are understood:
 @item N
 Article number.
 @item S
-Subject string. List identifiers stripped, @code{gnus-list-identifies}. @xref{Article Hiding}.
+Subject string.  List identifiers stripped,
+@code{gnus-list-identifies}.  @xref{Article Hiding}.
 @item s
 Subject if the article is the root of the thread or the previous article
 had a different subject, @code{gnus-summary-same-subject} otherwise.
@@ -3403,7 +3946,8 @@ the @code{a} spec.
 @item L
 Number of lines in the article.
 @item c
-Number of characters in the article.
+Number of characters in the article. This specifier is not supported in some
+methods (like nnfolder).
 @item I
 Indentation based on thread level (@pxref{Customizing Threading}).
 @item T
@@ -3919,11 +4463,24 @@ Scroll the current article one line backward
 @kindex A g (Summary)
 @kindex g (Summary)
 @findex gnus-summary-show-article
+@vindex gnus-summary-show-article-charset-alist
 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
 given a prefix, fetch the current article, but don't run any of the
 article treatment functions.  This will give you a ``raw'' article, just
 the way it came from the server.
 
+If given a numerical prefix, you can do semi-manual charset stuff.
+@kbd{C-u 0 g cn-gb-2312 RET} will decode the message as if it were
+encoded in the @code{cn-gb-2312} charset.  If you have
+
+@lisp
+(setq gnus-summary-show-article-charset-alist 
+      '((1 . cn-gb-2312) 
+        (2 . big5)))
+@end lisp
+
+then you can say @kbd{C-u 1 g} to get the same effect.
+
 @item A <
 @itemx <
 @kindex < (Summary)
@@ -4011,7 +4568,9 @@ message (@code{gnus-summary-wide-reply-with-original}).  This command uses
 the process/prefix convention.
 
 @item S o m
+@itemx C-c C-f
 @kindex S o m (Summary)
+@kindex C-c C-f (Summary)
 @findex gnus-summary-mail-forward
 @c @icon{gnus-summary-mail-forward}
 Forward the current article to some other person
@@ -4063,10 +4622,10 @@ This command understands the process/prefix convention
 
 @item S O m
 @kindex S O m (Summary)
-@findex gnus-uu-digest-mail-forward
+@findex gnus-summary-digest-mail-forward
 Digest the current series (@pxref{Decoding Articles}) and forward the
-result using mail (@code{gnus-uu-digest-mail-forward}).  This command
-uses the process/prefix convention (@pxref{Process/Prefix}).
+result using mail (@code{gnus-summary-digest-mail-forward}).  This
+command uses the process/prefix convention (@pxref{Process/Prefix}).
 
 @item S M-c
 @kindex S M-c (Summary)
@@ -4146,11 +4705,11 @@ headers of the forwarded article.
 
 @item S O p
 @kindex S O p (Summary)
-@findex gnus-uu-digest-post-forward
+@findex gnus-summary-digest-post-forward
 @cindex digests
 @cindex making digests
 Digest the current series and forward the result to a newsgroup
-(@code{gnus-uu-digest-mail-forward}).  This command uses the
+(@code{gnus-summary-digest-post-forward}).  This command uses the
 process/prefix convention.
 
 @item S u
@@ -4158,7 +4717,7 @@ process/prefix convention.
 @findex gnus-uu-post-news
 @c @icon{gnus-uu-post-news}
 Uuencode a file, split it into parts, and post it as a series
-(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
+(@code{gnus-uu-post-news}).  (@pxref{Uuencoding and Posting}).
 @end table
 
 Also @pxref{(message)Header Commands} for more information.
@@ -4658,6 +5217,12 @@ Invert the list of process marked articles
 Mark articles that have a @code{Subject} header that matches a regular
 expression (@code{gnus-uu-mark-by-regexp}).
 
+@item M P G
+@kindex M P G (Summary)
+@findex gnus-uu-unmark-by-regexp
+Unmark articles that have a @code{Subject} header that matches a regular
+expression (@code{gnus-uu-unmark-by-regexp}).
+
 @item M P r
 @kindex M P r (Summary)
 @findex gnus-uu-mark-region
@@ -4723,6 +5288,9 @@ Push the current process mark set onto the stack
 
 @end table
 
+Also see the @kbd{&} command in @pxref{Searching for Articles} for how to
+set process marks based on article body contents.
+
 
 @node Limiting
 @section Limiting
@@ -4757,7 +5325,7 @@ Limit the summary buffer to articles that match some author
 @findex gnus-summary-limit-to-extra
 Limit the summary buffer to articles that match one of the ``extra''
 headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-author}).
+(@code{gnus-summary-limit-to-extra}).
 
 @item / u
 @itemx x
@@ -4779,7 +5347,7 @@ with that mark (@code{gnus-summary-limit-to-marks}).
 @kindex / t (Summary)
 @findex gnus-summary-limit-to-age
 Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
-(@code{gnus-summary-limit-to-marks}).  If given a prefix, limit to
+(@code{gnus-summary-limit-to-age}).  If given a prefix, limit to
 articles younger than that number of days.
 
 @item / n
@@ -5184,10 +5752,10 @@ The default is 4.
 @vindex gnus-sort-gathered-threads-function
 Sometimes, particularly with mailing lists, the order in which mails
 arrive locally is not necessarily the same as the order in which they
-arrived on the mailing list. Consequently, when sorting sub-threads
+arrived on the mailing list.  Consequently, when sorting sub-threads
 using the default @code{gnus-thread-sort-by-number}, responses can end
-up appearing before the article to which they are responding to. Setting
-this variable to an alternate value
+up appearing before the article to which they are responding to.
+Setting this variable to an alternate value
 (e.g. @code{gnus-thread-sort-by-date}), in a group's parameters or in an
 appropriate hook (e.g. @code{gnus-summary-generate-hook}) can produce a
 more logical sub-thread ordering in such instances.
@@ -5202,10 +5770,7 @@ more logical sub-thread ordering in such instances.
 
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
-Hook run before parsing any headers.  The default value is
-@code{(gnus-set-summary-default-charset)}, which sets up local value of
-@code{default-mime-charset} in summary buffer based on variable
-@code{gnus-newsgroup-default-charset-alist}.
+Hook run before parsing any headers.
 
 @item gnus-alter-header-function
 @vindex gnus-alter-header-function
@@ -5322,11 +5887,19 @@ understand the numeric prefix.
 
 @item T n
 @kindex T n (Summary)
+@itemx M-C-n
+@kindex M-C-n (Summary)
+@itemx M-down
+@kindex M-down (Summary)
 @findex gnus-summary-next-thread
 Go to the next thread (@code{gnus-summary-next-thread}).
 
 @item T p
 @kindex T p (Summary)
+@itemx M-C-p
+@kindex M-C-p (Summary)
+@itemx M-up
+@kindex M-up (Summary)
 @findex gnus-summary-prev-thread
 Go to the previous thread (@code{gnus-summary-prev-thread}).
 
@@ -5604,7 +6177,7 @@ feel that it's neat to use twice as much space.
 To limit the caching, you could set @code{gnus-cacheable-groups} to a
 regexp of groups to cache, @samp{^nntp} for instance, or set the
 @code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
-Both variables are @code{nil} by default. If a group matches both
+Both variables are @code{nil} by default.  If a group matches both
 variables, the group is not cached.
 
 @findex gnus-cache-generate-nov-databases
@@ -5786,7 +6359,7 @@ files.
 
 @vindex gnus-default-article-saver
 You can customize the @code{gnus-default-article-saver} variable to make
-gnus do what you want it to.  You can use any of the four ready-made
+gnus do what you want it to.  You can use any of the six ready-made
 functions below, or you can create your own.
 
 @table @code
@@ -6027,7 +6600,7 @@ entire newsgroup, you'd typically do @kbd{M P a}
 (@code{gnus-uu-decode-uu-and-save}).
 
 All this is very much different from how @code{gnus-uu} worked with
-@sc{GNUS 4.1}, where you had explicit keystrokes for everything under
+@sc{gnus 4.1}, where you had explicit keystrokes for everything under
 the sun.  This version of @code{gnus-uu} generally assumes that you mark
 articles in some way (@pxref{Setting Process Marks}) and then press
 @kbd{X u}.
@@ -6272,7 +6845,7 @@ content type based on the file name.  The result will be fed to
 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
 decoding, will save in digests.  If this variable is @code{nil},
 @code{gnus-uu} will just save everything in a file without any
-embellishments.  The digesting almost conforms to RFC1153---no easy way
+embellishments.  The digesting almost conforms to RFC 1153---no easy way
 to specify any meaningful volume and issue numbers were found, so I
 simply dropped them.
 
@@ -6589,16 +7162,18 @@ Signature}.
 @kindex W W l (Summary)
 @findex gnus-article-hide-list-identifiers
 @vindex gnus-list-identifiers
-Hide list identifiers specified in @code{gnus-list-identifiers}. Theese
-are strings some list servers add to the beginning of all @code{Subject}
-headers---for example, @samp{[zebra 4711]}.
+Strip list identifiers specified in @code{gnus-list-identifiers}.  These
+are strings some mailing list servers add to the beginning of all
+@code{Subject} headers---for example, @samp{[zebra 4711]}.  Any leading
+@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
+may not contain @code{\\(..\\)}.
 
 @table @code
 
 @item gnus-list-identifiers
 @vindex gnus-list-identifiers
 A regular expression that matches list identifiers to be removed from
-subject. This can also be a list of regular expressions.
+subject.  This can also be a list of regular expressions.
 
 @end table
 
@@ -6646,7 +7221,9 @@ the @code{banner} group parameter (@pxref{Group Parameters}) to the
 group you want banners stripped from.  The parameter either be a string,
 which will be interpreted as a regular expression matching text to be
 removed, or the symbol @code{signature}, meaning that the (last)
-signature should be removed.
+signature should be removed, or other symbol, meaning that the
+corresponding regular expression in @code{gnus-article-banner-alist} is
+used.
 
 @item W W c
 @kindex W W c (Summary)
@@ -6678,7 +7255,9 @@ Number of lines of hidden text.
 
 @item gnus-cited-lines-visible
 @vindex gnus-cited-lines-visible
-The number of lines at the beginning of the cited text to leave shown.
+The number of lines at the beginning of the cited text to leave
+shown. This can also be a cons cell with the number of lines at the top
+and bottom of the text, respectively, to remain visible.
 
 @end table
 
@@ -6758,10 +7337,12 @@ positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
 is rumored to have employed this form of, uh, somewhat weak encryption.
 
 @item W t
+@item t
 @kindex W t (Summary)
-@findex gnus-summary-toggle-header
+@kindex t (Summary)
+@findex gnus-article-toggle-headers
 Toggle whether to display all headers in the article buffer
-(@code{gnus-summary-toggle-header}).
+(@code{gnus-article-toggle-headers}).
 
 @item W v
 @kindex W v (Summary)
@@ -6785,9 +7366,9 @@ Treat overstrike (@code{gnus-article-treat-overstrike}).
 @findex gnus-article-treat-dumbquotes
 @vindex gnus-article-dumbquotes-map
 @cindex Smartquotes
-@cindex M******** sm*rtq**t*s
+@cindex M****s*** sm*rtq**t*s
 @cindex Latin 1
-Treat M******** sm*rtq**t*s according to
+Treat M****s*** sm*rtq**t*s according to
 @code{gnus-article-dumbquotes-map}
 (@code{gnus-article-treat-dumbquotes}).  Note that this function guesses
 whether a character is a sm*rtq**t* or not, so it should only be used
@@ -6820,6 +7401,31 @@ Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
 CRs into LF (this takes care of Mac line endings)
 (@code{gnus-article-remove-cr}).
 
+@item W 6
+@kindex W 6 (Summary)
+@findex gnus-article-de-base64-unreadable
+Treat base64 (@code{gnus-article-de-base64-unreadable}).
+Base64 is one common @sc{mime} encoding employed when sending non-ASCII
+(i. e., 8-bit) articles.  Note that the this is usually done
+automatically by Gnus if the message in question has a
+@code{Content-Transfer-Encoding} header that says that this encoding has
+been done.
+
+@item W Z
+@kindex W Z (Summary)
+@findex gnus-article-decode-HZ
+Treat HZ or HZP (@code{gnus-article-decode-HZ}).  HZ (or HZP) is one
+common encoding employed when sending Chinese articles.  It typically
+makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
+
+@item W h
+@kindex W h (Summary)
+@findex gnus-article-wash-html
+Treat HTML (@code{gnus-article-wash-html}).  
+Note that the this is usually done automatically by Gnus if the message
+in question has a @code{Content-Type} header that says that this type
+has been done.
+
 @item W f
 @kindex W f (Summary)
 @cindex x-face
@@ -6839,12 +7445,18 @@ If this variable is a string, this string will be executed in a
 sub-shell.  If it is a function, this function will be called with the
 face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
 is a regexp) matches the @code{From} header, the face will not be shown.
-The default action under Emacs is to fork off an @code{xv} to view the
-face; under XEmacs the default action is to display the face before the
+The default action under Emacs is to fork off the @code{display}
+program@footnote{@code{display} is from the ImageMagick package.  For the
+@code{uncompface} and @code{icontopbm} programs look for a package
+like `compface' or `faces-xface' on a GNU/Linux system.}
+to view the face.  Under XEmacs or Emacs 21+ with suitable image
+support, the default action is to display the face before the
 @code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
 support---that will make display somewhat faster.  If there's no native
 X-Face support, Gnus will try to convert the @code{X-Face} header using
-external programs from the @code{pbmplus} package and friends.)  If you
+external programs from the @code{pbmplus} package and
+friends.@footnote{On a GNU/Linux system look for packages with names
+like @code{netpbm} or @code{libgr-progs}.})  If you
 want to have this function in the display hook, it should probably come
 last.
 
@@ -7160,15 +7772,17 @@ Translate the article from one language to another
 @node MIME Commands
 @section @sc{mime} Commands
 @cindex MIME decoding
+@cindex attachments
+@cindex viewing attachments
 
 The following commands all understand the numerical prefix.  For
 instance, @kbd{3 b} means ``view the third @sc{mime} part''.
 
 @table @kbd
 @item b
-@itemx K b
+@itemx K v
 @kindex b (Summary)
-@kindex K b (Summary)
+@kindex K v (Summary)
 View the @sc{mime} part.
 
 @item K o
@@ -7198,13 +7812,17 @@ the same manner:
 @table @kbd
 @item K b
 @kindex K b (Summary)
-Make all the @sc{mime} parts have buttons in from of them.
+Make all the @sc{mime} parts have buttons in front of them.  This is
+mostly useful if you wish to save (or perform other actions) on inlined
+parts.
 
 @item K m
 @kindex K m (Summary)
+@findex gnus-summary-repair-multipart
 Some multipart messages are transmitted with missing or faulty headers.
 This command will attempt to ``repair'' these messages so that they can
-be viewed in a more pleasant manner.
+be viewed in a more pleasant manner
+(@code{gnus-summary-repair-multipart}).
 
 @item X m
 @kindex X m (Summary)
@@ -7221,7 +7839,7 @@ Toggle the buttonized display of the article buffer
 
 @item W M w
 @kindex W M w (Summary)
-Decode RFC2047-encoded words in the article headers
+Decode RFC 2047-encoded words in the article headers
 (@code{gnus-article-decode-mime-words}).
 
 @item W M c
@@ -7310,14 +7928,73 @@ This knowledge is encoded in the @code{gnus-group-charset-alist}
 variable, which is an alist of regexps (to match group names) and
 default charsets to be used when reading these groups.
 
-In addition, some people do use soi-disant @sc{mime}-aware agents that
-aren't.  These blitely mark messages as being in @code{iso-8859-1} even
-if they really are in @code{koi-8}.  To help here, the
-@code{gnus-newsgroup-ignored-charsets} variable can be used.  The
-charsets that are listed here will be ignored.  The variable can be set
-on a group-by-group basis using the group parameters (@pxref{Group
-Parameters}).  The default value is @code{(unknown-8bit)}, which is
-something some agents insist on having in there.
+In addition, some people do use soi-disant @sc{mime}-aware agents that
+aren't.  These blitely mark messages as being in @code{iso-8859-1} even
+if they really are in @code{koi-8}.  To help here, the
+@code{gnus-newsgroup-ignored-charsets} variable can be used.  The
+charsets that are listed here will be ignored.  The variable can be set
+on a group-by-group basis using the group parameters (@pxref{Group
+Parameters}).  The default value is @code{(unknown-8bit)}, which is
+something some agents insist on having in there.
+
+@vindex gnus-group-posting-charset-alist
+When posting, @code{gnus-group-posting-charset-alist} is used to
+determine which charsets should not be encoded using the @sc{mime}
+encodings.  For instance, some hierarchies discourage using
+quoted-printable header encoding.
+
+This variable is an alist of regexps and permitted unencoded charsets
+for posting.  Each element of the alist has the form @code{(}@var{test
+header body-list}@code{)}, where:
+
+@table @var
+@item test
+is either a regular expression matching the newsgroup header or a
+variable to query,
+@item header
+is the charset which may be left unencoded in the header (@code{nil}
+means encode all charsets),
+@item body-list
+is a list of charsets which may be encoded using 8bit content-transfer
+encoding in the body, or one of the special values @code{nil} (always
+encode using quoted-printable) or @code{t} (always use 8bit).
+@end table
+
+@cindex Russian
+@cindex koi8-r
+@cindex koi8-u
+@cindex iso-8859-5
+@cindex coding system aliases
+@cindex preferred charset
+
+Other charset tricks that may be useful, although not Gnus-specific:
+
+If there are several @sc{mime} charsets that encode the same Emacs
+charset, you can choose what charset to use by saying the following:
+
+@lisp
+(put-charset-property 'cyrillic-iso8859-5
+                      'preferred-coding-system 'koi8-r)
+@end lisp
+
+This means that Russian will be encoded using @code{koi8-r} instead of
+the default @code{iso-8859-5} @sc{mime} charset.
+
+If you want to read messages in @code{koi8-u}, you can cheat and say
+
+@lisp
+(define-coding-system-alias 'koi8-u 'koi8-r)
+@end lisp
+
+This will almost do the right thing.
+
+And finally, to read charsets like @code{windows-1251}, you can say
+something like
+
+@lisp
+(codepage-setup 1251)
+(define-coding-system-alias 'windows-1251 'cp1251)
+@end lisp
 
 
 @node Article Commands
@@ -7525,7 +8202,7 @@ Pick the article or thread on the current line
 (@code{gnus-pick-article-or-thread}).  If the variable
 @code{gnus-thread-hide-subtree} is true, then this key selects the
 entire thread when used at the first article of the thread.  Otherwise,
-it selects just the article. If given a numerical prefix, go to that
+it selects just the article.  If given a numerical prefix, go to that
 thread or article and pick it.  (The line number is normally displayed
 at the beginning of the summary pick lines.)
 
@@ -7782,8 +8459,10 @@ disk forever and ever, never to return again.'' Use with caution.
 @kindex B m (Summary)
 @cindex move mail
 @findex gnus-summary-move-article
+@vindex gnus-preserve-marks
 Move the article from one mail group to another
-(@code{gnus-summary-move-article}).
+(@code{gnus-summary-move-article}).  Marks will be preserved if
+@var{gnus-preserve-marks} is non-@code{nil} (which is the default). 
 
 @item B c
 @kindex B c (Summary)
@@ -7791,7 +8470,8 @@ Move the article from one mail group to another
 @findex gnus-summary-copy-article
 @c @icon{gnus-summary-mail-copy}
 Copy the article from one group (mail group or not) to a mail group
-(@code{gnus-summary-copy-article}).
+(@code{gnus-summary-copy-article}).  Marks will be preserved if
+@var{gnus-preserve-marks} is non-@code{nil} (which is the default).
 
 @item B B
 @kindex B B (Summary)
@@ -7816,6 +8496,8 @@ Respool the mail article (@code{gnus-summary-respool-article}).
 @code{gnus-summary-respool-default-method} will be used as the default
 select method when respooling.  This variable is @code{nil} by default,
 which means that the current group select method will be used instead.
+Marks will be preserved if @var{gnus-preserve-marks} is non-@code{nil}
+(which is the default).
 
 @item B w
 @itemx e
@@ -7863,7 +8545,9 @@ If you move (or copy) articles regularly, you might wish to have gnus
 suggest where to put the articles.  @code{gnus-move-split-methods} is a
 variable that uses the same syntax as @code{gnus-split-methods}
 (@pxref{Saving Articles}).  You may customize that variable to create
-suggestions you find reasonable.
+suggestions you find reasonable.  (Note that
+@code{gnus-move-split-methods} uses group names where
+@code{gnus-split-methods} uses file names.)
 
 @lisp
 (setq gnus-move-split-methods
@@ -7918,6 +8602,22 @@ If it is @code{nil} (which is the default), gnus will rename the
 any other article.  If this variable is @code{t}, it won't display the
 article---it'll be as if it never existed.
 
+@vindex gnus-alter-articles-to-read-function
+@item gnus-alter-articles-to-read-function
+This function, which takes two parameters (the group name and the list
+of articles to be selected), is called to allow the user to alter the
+list of articles to be selected.
+
+For instance, the following function adds the list of cached articles to
+the list in one particular group:
+
+@lisp
+(defun my-add-cached-articles (group articles)
+  (if (string= group "some.group")
+      (append gnus-newsgroup-cached articles)
+    articles))
+@end lisp
+
 @end table
 
 
@@ -7978,10 +8678,14 @@ Search through all previous articles for a regexp
 @item &
 @kindex & (Summary)
 @findex gnus-summary-execute-command
-This command will prompt you for a header field, a regular expression to
-match on this field, and a command to be executed if the match is made
-(@code{gnus-summary-execute-command}).  If given a prefix, search
-backward instead.
+This command will prompt you for a header, a regular expression to match
+on this field, and a command to be executed if the match is made
+(@code{gnus-summary-execute-command}).  If the header is an empty
+string, the match is done on the entire article.  If given a prefix,
+search backward instead.
+
+For instance, @kbd{& RET some.*string #} will put the process mark on
+all articles that have heads or bodies that match @samp{some.*string}.
 
 @item M-&
 @kindex M-& (Summary)
@@ -8059,8 +8763,8 @@ If given a prefix, force an @code{article} window configuration.
 Edit the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-edit-parameters}).
 
-@item M-C-g
-@kindex M-C-g (Summary)
+@item M-C-a
+@kindex M-C-a (Summary)
 @findex gnus-summary-customize-parameters
 Customize the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-customize-parameters}).
@@ -8087,7 +8791,7 @@ group and return you to the group buffer.
 @vindex gnus-summary-prepare-exit-hook
 @c @icon{gnus-summary-exit}
 Exit the current group and update all information on the group
-(@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
+(@code{gnus-summary-exit}).  @code{gnus-summary-prepare-exit-hook} is
 called before doing much of the exiting, which calls
 @code{gnus-summary-expire-articles} by default.
 @code{gnus-summary-exit-hook} is called after finishing the exit
@@ -8162,8 +8866,9 @@ command will make exit without updating (the @kbd{Q} command) worthless.
 @end table
 
 @vindex gnus-exit-group-hook
-@code{gnus-exit-group-hook} is called when you exit the current
-group.
+@code{gnus-exit-group-hook} is called when you exit the current group
+with an ``updating'' exit.  For instance @kbd{Q}
+(@code{gnus-summary-exit-no-update}) does not call this hook.
 
 @findex gnus-summary-wake-up-the-dead
 @findex gnus-dead-summary-mode
@@ -8331,7 +9036,7 @@ tell gnus otherwise.
 
 @menu
 * Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing to mime articles as @sc{mime} messages.
+* Using MIME::            Pushing articles through @sc{mime} before reading them.
 * Customizing Articles::  Tailoring the look of the articles.
 * Article Keymap::        Keystrokes available in the article buffer.
 * Misc Article::          Other stuff.
@@ -8383,8 +9088,8 @@ variable is set (and @code{gnus-visible-headers} is @code{nil}), it
 should be a regular expression that matches all lines that you want to
 hide.  All lines that do not match this variable will remain visible.
 
-For instance, if you just want to get rid of the @code{References} field
-and the @code{Xref} field, you might say:
+For instance, if you just want to get rid of the @code{References} line
+and the @code{Xref} line, you might say:
 
 @lisp
 (setq gnus-ignored-headers "^References:\\|^Xref:")
@@ -8579,8 +9284,8 @@ controlling variable is a predicate list, as described above.
 
 The following treatment options are available.  The easiest way to
 customize this is to examine the @code{gnus-article-treat} customization
-group. Values in brackets are suggested sensible values. Others are possible
-but those listed are probably sufficient for most people.
+group.  Values in parenthesis are suggested sensible values.  Others are
+possible but those listed are probably sufficient for most people.
 
 @table @code
 @item gnus-treat-highlight-signature (t, last)
@@ -8724,8 +9429,8 @@ Syntax table used in article buffers.  It is initialized from
 @item gnus-article-mode-line-format
 This variable is a format string along the same lines as
 @code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}).  It
-accepts the same format specifications as that variable, with one
-extension:
+accepts the same format specifications as that variable, with two
+extensions:
 
 @table @samp
 @item w
@@ -8763,11 +9468,10 @@ This is the delimiter mentioned above.  By default, it is @samp{^L}
 
 @kindex C-c C-c (Post)
 All commands for posting and mailing will put you in a message buffer
-where you can edit the article all you like, before you send the article
-by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The Message
-Manual}.  If you are in a foreign news group, and you wish to post the
-article using the foreign server, you can give a prefix to @kbd{C-c C-c}
-to make gnus try to post using the foreign server.
+where you can edit the article all you like, before you send the
+article by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The
+Message Manual}.  Where the message will be posted/mailed to depends
+on your setup (@pxref{Posting Server}).
 
 @menu
 * Mail::                 Mailing and replying.
@@ -8800,6 +9504,12 @@ headers will be included in the sequence they are matched.
 If non-@code{nil}, add a @code{to-list} group parameter to mail groups
 that have none when you do a @kbd{a}.
 
+@item message-send-mail-partially-limit
+@vindex message-send-mail-partially-limit
+The limitation of messages sent as message/partial.
+The lower bound of message size in characters, beyond which the message 
+should be sent in several parts. If it is nil, the size is unlimited.
+
 @end table
 
 
@@ -8899,6 +9609,21 @@ spell-checking via the @code{ispell} package:
 (add-hook 'message-send-hook 'ispell-message)
 @end lisp
 
+If you want to change the @code{ispell} dictionary based on what group
+you're in, you could say something like the following:
+
+@lisp
+(add-hook 'gnus-select-group-hook
+          (lambda ()
+            (cond
+             ((string-match "^de\\." gnus-newsgroup-name)
+              (ispell-change-dictionary "deutsch"))
+             (t
+              (ispell-change-dictionary "english")))))
+@end lisp
+
+Modify to suit your needs.
+
 
 @node Archived Messages
 @section Archived Messages
@@ -8947,6 +9672,16 @@ This variable can be used to do the following:
 @itemize @bullet
 @item a string
 Messages will be saved in that group.
+
+Note that you can include a select method in the group name, then the
+message will not be stored in the select method given by
+@code{gnus-message-archive-method}, but in the select method specified
+by the group name, instead.  Suppose @code{gnus-message-archive-method}
+has the default value shown above.  Then setting
+@code{gnus-message-archive-group} to @code{"foo"} means that outgoing
+messages are stored in @samp{nnfolder+archive:foo}, but if you use the
+value @code{"nnml:foo"}, then outgoing messages will be stored in
+@samp{nnml:foo}.
 @item a list of strings
 Messages will be saved in all those groups.
 @item an alist of regexps, functions and forms
@@ -9084,8 +9819,9 @@ attribute name can be one of @code{signature}, @code{signature-file},
 @code{organization}, @code{address}, @code{name} or @code{body}.  The
 attribute name can also be a string.  In that case, this will be used as
 a header name, and the value will be inserted in the headers of the
-article.  If the attribute name is @code{eval}, the form is evaluated,
-and the result is thrown away.
+article; if the value is @code{nil}, the header name will be removed.
+If the attribute name is @code{eval}, the form is evaluated, and the
+result is thrown away.
 
 The attribute value can be a string (used verbatim), a function with
 zero arguments (the return value will be used), a variable (its value
@@ -9106,27 +9842,35 @@ So here's a new example:
 @lisp
 (setq gnus-posting-styles
       '((".*"
-         (signature-file "~/.signature")
-         (name "User Name")
-         ("X-Home-Page" (getenv "WWW_HOME"))
-         (organization "People's Front Against MWM"))
-        ("^rec.humor"
-         (signature my-funny-signature-randomizer))
-        ((equal (system-name) "gnarly")
-         (signature my-quote-randomizer))
-        ((message-news-p)
-         (signature my-news-signature))
-        ((header "From.*To" "larsi.*org")
-         (Organization "Somewhere, Inc."))
-        ((posting-from-work-p)
-         (signature-file "~/.work-signature")
-         (address "user@@bar.foo")
-         (body "You are fired.\n\nSincerely, your boss.")
-         (organization "Important Work, Inc"))
-        ("^nn.+:"
-         (signature-file "~/.mail-signature"))))
+        (signature-file "~/.signature")
+        (name "User Name")
+        ("X-Home-Page" (getenv "WWW_HOME"))
+        (organization "People's Front Against MWM"))
+       ("^rec.humor"
+        (signature my-funny-signature-randomizer))
+       ((equal (system-name) "gnarly")
+        (signature my-quote-randomizer))
+       ((message-news-p)
+        (signature my-news-signature))
+       (header "From\\|To" "larsi.*org"
+               (Organization "Somewhere, Inc."))
+       ((posting-from-work-p)
+        (signature-file "~/.work-signature")
+        (address "user@@bar.foo")
+        (body "You are fired.\n\nSincerely, your boss.")
+        (organization "Important Work, Inc"))
+       ("nnml:.*"
+        (From (save-excursion
+                (set-buffer gnus-article-buffer)
+                (message-fetch-field "to"))))
+       ("^nn.+:"
+        (signature-file "~/.mail-signature"))))
 @end lisp
 
+The @samp{nnml:.*} rule means that you use the @code{To} address as the
+@code{From} address in all your outgoing replies, which might be handy
+if you fill many roles.
+
 
 @node Drafts
 @section Drafts
@@ -9458,6 +10202,9 @@ Here's the method for a public spool:
       (nnmh-get-new-mail nil))
 @end lisp
 
+@cindex proxy
+@cindex firewall
+
 If you are behind a firewall and only have access to the @sc{nntp}
 server from the firewall machine, you can instruct Gnus to @code{rlogin}
 on the firewall machine and telnet from there to the @sc{nntp} server.
@@ -9699,15 +10446,17 @@ manual page, but here are the salient facts:
 The file contains one or more line, each of which define one server.
 
 @item
-Each line may contain an arbitrary number of token/value pairs.  The
-valid tokens include @samp{machine}, @samp{login}, @samp{password},
-@samp{default} and @samp{force}.  (The latter is not a valid
-@file{.netrc}/@code{ftp} token, which is the only way the
-@file{.authinfo} file format deviates from the @file{.netrc} file
-format.)
-
+Each line may contain an arbitrary number of token/value pairs.  
 @end enumerate
 
+The valid tokens include @samp{machine}, @samp{login}, @samp{password},
+@samp{default}.  Gnus introduce two new tokens, not present in the
+original @file{.netrc}/@code{ftp} syntax, namely @samp{port} and
+@samp{force}.  (This is the only way the @file{.authinfo} file format
+deviates from the @file{.netrc} file format.) @samp{port} is used to
+indicate what port on the server the credentials apply to, @samp{force}
+is explained below.
+
 Here's an example file:
 
 @example
@@ -9925,6 +10674,49 @@ The address of the remote system running the @sc{nntp} server.
 Port number to connect to when using the @code{nntp-open-network-stream}
 connect function.
 
+@item nntp-list-options
+@vindex nntp-list-options
+List of newsgroup name used for a option of the LIST command to restrict
+the listing output to only the specified newsgroups.  Each newsgroup name
+can be a shell-style wildcard, for instance, @dfn{fj.*}, @dfn{japan.*},
+etc.  Fortunately, if the server can accept such a option, it will
+probably make gnus run faster.  You may use it as a server variable as
+follows:
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-list-options ("fj.*" "japan.*"))))
+@end lisp
+
+@item nntp-options-subscribe
+@vindex nntp-options-subscribe
+Regexp matching the newsgroup names which will be subscribed
+unconditionally.  Use @dfn{ } instead of @dfn{$} for a regexp string.
+It may be effective as well as @code{nntp-list-options} even though the
+server could not accept a shell-style wildcard as a option of the LIST
+command.  You may use it as a server variable as follows:
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-options-subscribe "^fj\\.\\|^japan\\.")))
+@end lisp
+
+@item nntp-options-not-subscribe
+@vindex nntp-options-not-subscribe
+Regexp matching the newsgroup names which will not be subscribed
+unconditionally.  Use @dfn{ } instead of @dfn{$} for a regexp string.
+It may be effective as well as @code{nntp-list-options} even though the
+server could not accept a shell-style wildcard as a option of the LIST
+command.  You may use it as a server variable as follows:
+
+@lisp
+(setq gnus-select-method
+      '(nntp "news.somewhere.edu"
+            (nntp-options-not-subscribe "\\.binaries\\.")))
+@end lisp
+
 @item nntp-buggy-select
 @vindex nntp-buggy-select
 Set this to non-@code{nil} if your select routine is buggy.
@@ -10057,7 +10849,7 @@ Reading mail with a newsreader---isn't that just plain WeIrD? But of
 course.
 
 @menu
-* Mail in a Newsreader::         Important introductory notes. 
+* Mail in a Newsreader::         Important introductory notes.
 * Getting Started Reading Mail:: A simple cookbook example.
 * Splitting Mail::               How to create mail groups.
 * Mail Sources::                 How to tell Gnus where to get mail from.
@@ -10105,7 +10897,7 @@ they want to treat a message.
 
 Many people subscribe to several mailing lists.  These are transported
 via SMTP, and are therefore mail.  But we might go for weeks without
-answering, or even reading these messages very carefully. We may not
+answering, or even reading these messages very carefully.  We may not
 need to save them because if we should need to read one again, they are
 archived somewhere else.
 
@@ -10247,7 +11039,10 @@ variable is @code{add-name-to-file} by default.)
 @kindex M-x nnmail-split-history
 @kindex nnmail-split-history
 If you wish to see where the previous mail split put the messages, you
-can use the @kbd{M-x nnmail-split-history} command.
+can use the @kbd{M-x nnmail-split-history} command.  If you wish to see
+where re-spooling messages would put the messages, you can use
+@code{gnus-summary-respool-trace} and related commands (@pxref{Mail
+Group Commands}). 
 
 Gnus gives you all the opportunity you could possibly want for shooting
 yourself in the foot.  Let's say you create a group that will contain
@@ -10264,7 +11059,8 @@ month's rent money.
 @subsection Mail Sources
 
 Mail can be gotten from many different sources---the mail spool, from a
-POP mail server, or from a procmail directory, for instance.
+POP mail server, from a procmail directory, or from a maildir, for
+instance.
 
 @menu
 * Mail Source Specifiers::       How to specify what a mail source is.
@@ -10322,7 +11118,7 @@ Or using the default path:
 @end lisp
 
 If the mail spool file is not located on the local machine, it's best to 
-use POP or @sc{imap} or the like to fetch the mail.  You can not you ange-ftp 
+use POP or @sc{imap} or the like to fetch the mail.  You can not use ange-ftp 
 file names here---it has no way to lock the mail spool while moving the
 mail.
 
@@ -10341,7 +11137,7 @@ The @samp{getmail} script would look something like the following:
 #  flu@@iki.fi
 
 MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
-TMP=~/Mail/tmp
+TMP=$HOME/Mail/tmp
 rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
 @end example
 
@@ -10350,7 +11146,9 @@ Alter this script to fit find the @samp{movemail} you want to use.
 
 @item directory
 Get mail from several files in a directory.  This is typically used when
-you have procmail split the incoming mail into several files.
+you have procmail split the incoming mail into several files.  Setting
+@code{nnmail-scan-directory-mail-source-once} to non-nil force Gnus to
+scan the mail source only once.
 
 Keywords:
 
@@ -10393,7 +11191,10 @@ The name of the POP server.  The default is taken from the
 @code{MAILHOST} environment variable.
 
 @item :port
-The port number of the POP server.  The default is @samp{pop3}.
+The port number of the POP server.  This can be a number (eg,
+@samp{:port 1234}) or a string (eg, @samp{:port "pop3"}).  If it is a
+string, it should be a service name as listed in @file{/etc/services} on
+Unix systems.  The default is @samp{"pop3"}.
 
 @item :user
 The user name to give to the POP server.  The default is the login
@@ -10478,34 +11279,46 @@ Use @samp{movemail} to move the mail:
 @end lisp
 
 @item maildir
-Get mail from a maildir. This is a type of mailbox currently only
-supported by qmail, where each file in a special directory contains
-exactly one mail.
+Get mail from a maildir.  This is a type of mailbox that is supported by
+at least qmail and postfix, where each file in a special directory
+contains exactly one mail.
 
 Keywords:
 
 @table @code
 @item :path
 The path of the directory where the mails are stored.  The default is
-@samp{~/Maildir/new}.
+taken from the @code{MAILDIR} environment variable or
+@samp{~/Maildir/}.
+@item :subdirs
+The subdirectories of the Maildir.  The default is
+@samp{("new" "cur")}.
 
-If you sometimes look at your mail through a pop3 daemon before fetching
-them with Gnus, you may also have to fetch your mails from the
-@code{cur} directory inside the maildir, like in the following example.
+@c If you sometimes look at your mail through a pop3 daemon before fetching
+@c them with Gnus, you may also have to fetch your mails from the
+@c @code{cur} directory inside the maildir, like in the first example
+@c below.
+
+You can also get mails from remote hosts (because maildirs don't suffer
+from locking problems).
 
 @end table
 
-An example maildir mail source:
+Two example maildir mail sources:
+
+@lisp
+(maildir :path "/home/user-name/Maildir/" :subdirs ("cur" "new"))
+@end lisp
 
 @lisp
-(maildir :path "/home/user-name/Maildir/cur")
+(maildir :path "/user@@remotehost.org:~/Maildir/" :subdirs ("new"))
 @end lisp
 
 @item imap
-Get mail from a @sc{imap} server. If you don't want to use @sc{imap} as intended,
-as a network mail reading protocol (ie with nnimap), for some reason or
-other, Gnus let you treat it similar to a POP server and fetches
-articles from a given @sc{imap} mailbox.
+Get mail from a @sc{imap} server.  If you don't want to use @sc{imap} as
+intended, as a network mail reading protocol (ie with nnimap), for some
+reason or other, Gnus let you treat it similar to a POP server and
+fetches articles from a given @sc{imap} mailbox.
 
 Keywords:
 
@@ -10528,32 +11341,32 @@ prompted.
 
 @item :stream
 What stream to use for connecting to the server, this is one of the
-symbols in @code{imap-stream-alist}. Right now, this means
+symbols in @code{imap-stream-alist}.  Right now, this means
 @samp{kerberos4}, @samp{ssl} or the default @samp{network}.
 
-@item :authenticator
+@item :authentication
 Which authenticator to use for authenticating to the server, this is one
-of the symbols in @code{imap-authenticator-alist}. Right now, this means
-@samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
+of the symbols in @code{imap-authenticator-alist}.  Right now, this
+means @samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
 @samp{login}.
 
 @item :mailbox
-The name of the mailbox to get mail from. The default is @samp{INBOX}
+The name of the mailbox to get mail from.  The default is @samp{INBOX}
 which normally is the mailbox which receive incoming mail.
 
 @item :predicate
-The predicate used to find articles to fetch. The default, 
-@samp{UNSEEN UNDELETED}, is probably the best choice for most people,
-but if you sometimes peek in your mailbox with a @sc{imap} client and mark
-some articles as read (or; SEEN) you might want to set this to
-@samp{nil}. Then all articles in the mailbox is fetched, no matter
-what. For a complete list of predicates, see RFC2060 §6.4.4.
+The predicate used to find articles to fetch.  The default, @samp{UNSEEN
+UNDELETED}, is probably the best choice for most people, but if you
+sometimes peek in your mailbox with a @sc{imap} client and mark some
+articles as read (or; SEEN) you might want to set this to @samp{nil}.
+Then all articles in the mailbox is fetched, no matter what.  For a
+complete list of predicates, see RFC 2060 §6.4.4.
 
 @item :fetchflag
 How to flag fetched articles on the server, the default @samp{\Deleted}
 will mark them as deleted, an alternative would be @samp{\Seen} which
-would simply mark them as read. Theese are the two most likely choices,
-but more flags are defined in RFC2060 §2.3.2.
+would simply mark them as read.  These are the two most likely choices,
+but more flags are defined in RFC 2060 §2.3.2.
 
 @item :dontexpunge
 If non-nil, don't remove all articles marked as deleted in the mailbox
@@ -10564,24 +11377,27 @@ after finishing the fetch.
 An example @sc{imap} mail source:
 
 @lisp
-(imap :server "mail.mycorp.com" :stream kerberos4)
+(imap :server "mail.mycorp.com" :stream kerberos4 :fetchflag "\\Seen")
 @end lisp
 
 @item webmail
-Get mail from a webmail server, such as www.hotmail.com, 
-mail.yahoo.com, and www.netaddress.com. 
+Get mail from a webmail server, such as www.hotmail.com,
+webmail.netscape.com, www.netaddress.com, www.my-deja.com.
+
+NOTE: Now mail.yahoo.com provides POP3 service, so @sc{pop} mail source
+is suggested.
 
-NOTE: Webmail largely depends on w3 (url) package, whose version of "WWW
-4.0pre.46 1999/10/01" or previous ones may not work.
+NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
+required for url "4.0pre.46".
 
-WARNING: Mails may lost. NO WARRANTY.
+WARNING: Mails may lost.  NO WARRANTY.
 
 Keywords:
 
 @table @code
 @item :subtype
-The type of the webmail server.  The default is @code{hotmail}. The
-alternatives are @code{yahoo}, @code{netaddress}.
+The type of the webmail server.  The default is @code{hotmail}.  The
+alternatives are @code{netscape}, @code{netaddress}, @code{my-deja}.
 
 @item :user
 The user name to give to the webmail server.  The default is the login
@@ -10591,15 +11407,63 @@ name.
 The password to give to the webmail server.  If not specified, the user is
 prompted.
 
+@item :dontexpunge
+If non-nil, only fetch unread articles and don't move them to trash
+folder after finishing the fetch.
+
 @end table
 
 An example webmail source:
 
 @lisp
-(webmail :subtype 'yahoo :user "user-name" :password "secret")
+(webmail :subtype 'hotmail :user "user-name" :password "secret")
+@end lisp
+@end table
+
+@table @dfn
+@item Common Keywords
+Common keywords can be used in any type of mail source.
+
+Keywords:
+
+@table @code
+@item :plugged
+If non-nil, fetch the mail even when Gnus is unplugged.  If you use
+directory source to get mail, you can specify it as in this example:
+
+@lisp
+(setq mail-sources
+      '((directory :path "/home/pavel/.Spool/" 
+                   :suffix ""
+                   :plugged t)))
 @end lisp
+
+Gnus will then fetch your mail even when you are unplugged.  This is
+useful when you use local mail and news.
+
+@end table
 @end table
 
+@subsubsection Function Interface
+
+Some of the above keywords specify a Lisp function to be executed.
+For each keyword @code{:foo}, the Lisp variable @code{foo} is bound to
+the value of the keyword while the function is executing.  For example,
+consider the following mail-source setting:
+
+@lisp
+(setq mail-sources '((pop :user "jrl"
+                          :server "pophost" :function fetchfunc)))
+@end lisp
+
+While the function @code{fetchfunc} is executing, the symbol @code{user}
+is bound to @code{"jrl"}, and the symbol @code{server} is bound to
+@code{"pophost"}.  The symbols @code{port}, @code{password},
+@code{program}, @code{prescript}, @code{postscript}, @code{function},
+and @code{authentication} are also bound (to their default values).
+
+See above for a list of keywords for each type of mail source.
+
 
 @node Mail Source Customization
 @subsubsection Mail Source Customization
@@ -10625,6 +11489,13 @@ Directory where files (if any) will be stored.  The default is
 where the incoming files will be stored if the previous variable is
 @code{nil}.
 
+@item mail-source-incoming-file-prefix
+@vindex mail-source-incoming-file-prefix
+Prefix for file name for storing incoming mail.  The default is
+@file{Incoming}, in which case files will end up with names like
+@file{Incoming30630D_} or @file{Incoming298602ZD}.  This is really only
+relevant if @code{mail-source-delete-incoming} is @code{nil}.
+
 @item mail-source-default-file-modes
 @vindex mail-source-default-file-modes
 All new mail files will get this file mode.  The default is 384.
@@ -10691,8 +11562,8 @@ use this hook to notify any mail watch programs, if you want to.
 @vindex nnmail-split-hook
 @item nnmail-split-hook
 @findex article-decode-encoded-words
-@findex RFC1522 decoding
-@findex RFC2047 decoding
+@findex RFC 1522 decoding
+@findex RFC 2047 decoding
 Hook run in the buffer where the mail headers of each message is kept
 just before the splitting based on these headers is done.  The hook is
 free to modify the buffer contents in any way it sees fit---the buffer
@@ -10794,14 +11665,14 @@ name.  Normal regexp match expansion will be done.  See below for
 examples.
 
 @item
-@code{(@var{field} @var{value} @code{[-} @var{restrict} @code{[-} @var{restrict} @code{[@dots{}]}@code{]]} 
-@var{split})}: If the split is a list, the first element of which is a
-string, then store the message as specified by @var{split}, if header
-@var{field} (a regexp) contains @var{value} (also a regexp).  If
-@var{restrict} (yet another regexp) matches some string after
-@var{field} and before the end of the matched @var{value}, the
-@var{split} is ignored.  If none of the @var{restrict} clauses match,
-@var{split} is processed.
+@code{(@var{field} @var{value} @code{[-} @var{restrict}
+@code{[@dots{}]}@code{]} @var{split})}: If the split is a list, the
+first element of which is a string, then store the message as
+specified by @var{split}, if header @var{field} (a regexp) contains
+@var{value} (also a regexp).  If @var{restrict} (yet another regexp)
+matches some string after @var{field} and before the end of the
+matched @var{value}, the @var{split} is ignored.  If none of the
+@var{restrict} clauses match, @var{split} is processed.
 
 @item
 @code{(| @var{split}@dots{})}: If the split is a list, and the first
@@ -10815,7 +11686,7 @@ element is @code{&}, then process all @var{split}s in the list.
 
 @item
 @code{junk}: If the split is the symbol @code{junk}, then don't save
-this message. Use with extreme caution.
+this message.  Use with extreme caution.
 
 @item
 @code{(: @var{function} @var{arg1} @var{arg2} @dots{})}:  If the split is
@@ -10823,10 +11694,22 @@ a list, and the first element is @code{:}, then the second element will
 be called as a function with @var{args} given as arguments.  The
 function should return a @var{split}.
 
+For instance, the following function could be used to split based on the
+body of the messages:
+
+@lisp
+(defun split-on-body ()
+  (save-excursion
+    (set-buffer " *nnmail incoming*")
+    (goto-char (point-min))
+    (when (re-search-forward "Some.*string" nil t)
+      "string.group")))
+@end lisp
+
 @item
 @code{(! @var{func} @var{split})}: If the split is a list, and the first
 element is @code{!}, then SPLIT will be processed, and FUNC will be
-called as a function with the result of SPLIT as argument. FUNC should
+called as a function with the result of SPLIT as argument.  FUNC should
 return a split.
 
 @item
@@ -10867,6 +11750,42 @@ matched string will be substituted.  Similarly, the elements @samp{\\1}
 up to @samp{\\9} will be substituted with the text matched by the
 groupings 1 through 9.
 
+@findex nnmail-split-fancy-with-parent
+@code{nnmail-split-fancy-with-parent} is a function which allows you to
+split followups into the same groups their parents are in.  Sometimes
+you can't make splitting rules for all your mail.  For example, your
+boss might send you personal mail regarding different projects you are
+working on, and as you can't tell your boss to put a distinguishing
+string into the subject line, you have to resort to manually moving the
+messages into the right group.  With this function, you only have to do
+it once per thread.
+
+To use this feature, you have to set @code{nnmail-treat-duplicates} to a
+non-nil value.  And then you can include
+@code{nnmail-split-fancy-with-parent} using the colon feature, like so:
+@lisp
+(setq nnmail-split-fancy
+      '(| (: nnmail-split-fancy-with-parent)
+          ;; other splits go here
+        ))
+@end lisp
+
+This feature works as follows: when @code{nnmail-treat-duplicates} is
+non-nil, Gnus records the message id of every message it sees in the
+file specified by the variable @code{nnmail-message-id-cache-file},
+together with the group it is in (the group is omitted for non-mail
+messages).  When mail splitting is invoked, the function
+@code{nnmail-split-fancy-with-parent} then looks at the References (and
+In-Reply-To) header of each message to split and searches the file
+specified by @code{nnmail-message-id-cache-file} for the message ids.
+When it has found a parent, it returns the corresponding group name.  It
+is recommended that you set @code{nnmail-message-id-cache-length} to a
+somewhat higher number than the default so that the message ids are
+still in the cache.  (A value of 5000 appears to create a file some 300
+kBytes in size.)  When @code{nnmail-cache-accepted-message-ids} is
+non-nil, Gnus also records the message ids of moved articles, so that
+the followup messages goes into the new group.
+
 
 @node Group Mail Splitting
 @subsection Group Mail Splitting
@@ -10910,9 +11829,13 @@ by defining a single @code{&} fancy split containing one split for each
 group.  If a message doesn't match any split, it will be stored in the
 group named in @code{gnus-group-split-default-catch-all-group}, unless
 some group has @var{split-spec} set to @code{catch-all}, in which case
-that group is used as the catch-all group.  Note that, in this case,
-there's no cross-posting, as a @code{|} fancy split encloses the
-@code{&} split and the catch-all group.
+that group is used as the catch-all group.  Even though this variable is
+often used just to name a group, it may also be set to an arbitrarily
+complex fancy split (after all, a group name is a fancy split), and this
+may be useful to split mail that doesn't go to any mailing list to
+personal mail folders.  Note that this fancy split is added as the last
+element of a @code{|} split list that also contains a @code{&} split
+with the rules extracted from group parameters.
 
 It's time for an example.  Assume the following group parameters have
 been defined:
@@ -10953,9 +11876,9 @@ splits like this:
 @var{groups} may be a regular expression or a list of group names whose
 parameters will be scanned to generate the output split.
 @var{no-crosspost} can be used to disable cross-posting; in this case, a
-single @code{|} split will be output.  @var{catch-all} may be the name
-of a group to be used as the default catch-all group.  If
-@var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
+single @code{|} split will be output.  @var{catch-all} is the fallback
+fancy split, used like @var{gnus-group-split-default-catch-all-group}.
+If @var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
 empty string in any selected group, no catch-all split will be issued.
 Otherwise, if some group has @var{split-spec} set to @code{catch-all},
 this group will override the value of the @var{catch-all} argument.
@@ -10964,14 +11887,14 @@ this group will override the value of the @var{catch-all} argument.
 Unfortunately, scanning all groups and their parameters can be quite
 slow, especially considering that it has to be done for every message.
 But don't despair!  The function @code{gnus-group-split-setup} can be
-used to select @code{gnus-group-split} in a much more efficient way.  It
+used to enable @code{gnus-group-split} in a much more efficient way.  It
 sets @code{nnmail-split-methods} to @code{nnmail-split-fancy} and sets
 @code{nnmail-split-fancy} to the split produced by
 @code{gnus-group-split-fancy}.  Thus, the group parameters are only
 scanned once, no matter how many messages are split.
 
 @findex gnus-group-split-update
-However, if you change group parameters, you have to update
+However, if you change group parameters, you'd have to update
 @code{nnmail-split-fancy} manually.  You can do it by running
 @code{gnus-group-split-update}.  If you'd rather have it updated
 automatically, just tell @code{gnus-group-split-setup} to do it for
@@ -10984,7 +11907,7 @@ you.  For example, add to your @file{.gnus}:
 If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
 will be added to @code{nnmail-pre-get-new-mail-hook}, so you won't ever
 have to worry about updating @code{nnmail-split-fancy} again.  If you
-don't omit @var{catch-all} (it's optional),
+don't omit @var{catch-all} (it's optional; same as nil),
 @code{gnus-group-split-default-catch-all-group} will be set to its
 value.
 
@@ -11145,6 +12068,26 @@ necessarily an integer) or one of the symbols @code{immediate} or
 You can also use the @code{expiry-wait} group parameter to selectively
 change the expiry period (@pxref{Group Parameters}).
 
+@vindex nnmail-expiry-target
+The normal action taken when expiring articles is to delete them.
+However, in some circumstances it might make more sense to move them to
+other groups instead of deleting them.  The variable @code{nnmail-expiry-target}
+(and the @code{expiry-target} group parameter) controls this.  The
+variable supplies a default value for all groups, which can be
+overridden for specific groups by the group parameter.
+default value is @code{delete}, but this can also be a string (which
+should be the name of the group the message should be moved to), or a
+function (which will be called in a buffer narrowed to the message in
+question, and with the name of the group being moved from as its
+parameter) which should return a target -- either a group name or
+@code{delete}.
+
+Here's an example for specifying a group name:
+@lisp
+(setq nnmail-expiry-target "nnml:expired")
+@end lisp
+
+
 @vindex nnmail-keep-last-article
 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
 expire the final article in a mail newsgroup.  This is to make life
@@ -11180,10 +12123,10 @@ auto-expire turned on.
 @cindex incoming mail treatment
 
 Mailers and list servers are notorious for doing all sorts of really,
-really stupid things with mail.  ``Hey, RFC822 doesn't explicitly
+really stupid things with mail.  ``Hey, RFC 822 doesn't explicitly
 prohibit us from adding the string @code{wE aRe ElItE!!!!!1!!} to the
 end of all lines passing through our server, so let's do that!!!!1!''
-Yes, but RFC822 wasn't designed to be read by morons.  Things that were
+Yes, but RFC 822 wasn't designed to be read by morons.  Things that were
 considered to be self-evident were not discussed.  So.  Here we are.
 
 Case in point:  The German version of Microsoft Exchange adds @samp{AW:
@@ -11228,7 +12171,8 @@ Some list servers add an identifier---for example, @samp{(idm)}---to the
 beginning of all @code{Subject} headers.  I'm sure that's nice for
 people who use stone age mail readers.  This function will remove
 strings that match the @code{nnmail-list-identifiers} regexp, which can
-also be a list of regexp.
+also be a list of regexp.  @code{nnmail-list-identifiers} may not contain
+@code{\\(..\\)}.
 
 For instance, if you want to remove the @samp{(idm)} and the
 @samp{nagnagnag} identifiers:
@@ -11282,7 +12226,7 @@ this, it keeps a cache of old @code{Message-ID}s---
 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
 default.  The approximate maximum number of @code{Message-ID}s stored
 there is controlled by the @code{nnmail-message-id-cache-length}
-variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
+variable, which is 1000 by default.  (So 1000 @code{Message-ID}s will be
 stored.) If all this sounds scary to you, you can set
 @code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
 default), and @code{nnmail} won't delete duplicate mails.  Instead it
@@ -11413,8 +12357,8 @@ into groups.
 @vindex nnbabyl-active-file
 @vindex nnbabyl-mbox-file
 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
-mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
-article to say which group it belongs in.
+mbox}) to store mail.  @code{nnbabyl} will add extra headers to each
+mail article to say which group it belongs in.
 
 Virtual server settings:
 
@@ -11755,8 +12699,11 @@ interfaces to these sources.
 * Slashdot::              Reading the Slashdot comments.
 * Ultimate::              The Ultimate Bulletin Board systems.
 * Web Archive::           Reading mailing list archived on web.
+* Customizing w3::        Doing stuff to Emacs/w3 from Gnus.
 @end menu
 
+All the web sources require Emacs/w3 and the url library to work.
+
 The main caveat with all these web sources is that they probably won't
 work for a very long time.  Gleaning information from the @sc{html} data 
 is guesswork at best, and when the layout is altered, the Gnus backend
@@ -11883,6 +12830,9 @@ groups.  (Note that the default subscription method is to subscribe new
 groups as zombies.  Other methods are available (@pxref{Subscription
 Methods}).
 
+If you want to remove an old @code{nnslashdot} group, the @kbd{G DEL}
+command is the most handy tool (@pxref{Foreign Groups}).
+
 When following up to @code{nnslashdot} comments (or posting new
 comments), some light @sc{html}izations will be performed.  In
 particular, text quoted with @samp{> } will be quoted with
@@ -11973,22 +12923,25 @@ The directory where @code{nnultimate} stores its files.  The default is
 @samp{~/News/ultimate/}.
 @end table
 
+
 @node Web Archive
 @subsection Web Archive
 @cindex nnwarchive
 @cindex Web Archive
 
 Some mailing lists only have archives on Web servers, such as
-(@file{http://www.egroups.com/}). It has a quite regular and nice
+@file{http://www.egroups.com/} and
+@file{http://www.mail-archive.com/}.  It has a quite regular and nice
 interface, and it's possible to get the information Gnus needs to keep
 groups updated.
 
 The easiest way to get started with @code{nnwarchive} is to say
 something like the following in the group buffer: @kbd{M-x
-gnus-group-make-nnwarchive-group RET an_egroup RET egroups RET
+gnus-group-make-warchive-group RET an_egroup RET egroups RET
 www.egroups.com RET your@@email.address RET}.  (Substitute the
 @sc{an_egroup} with the mailing list you subscribed, the
-@sc{your@@email.address} with your email address.)
+@sc{your@@email.address} with your email address.), or to browse the
+backend by @kbd{B nnwarchive RET mail-archive RET}.
 
 The following @code{nnwarchive} variables can be altered:
 
@@ -12007,6 +12960,38 @@ The account name on the web server.
 The password for your account on the web server.
 @end table
 
+
+@node Customizing w3
+@subsection Customizing w3
+@cindex w3
+@cindex html
+@cindex url
+@cindex Netscape
+
+Gnus uses the url library to fetch web pages and Emacs/w3 to display web 
+pages.  Emacs/w3 is documented in its own manual, but there are some
+things that may be more relevant for Gnus users.
+
+For instance, a common question is how to make Emacs/w3 follow links
+using the @code{browse-url} functions (which will call some external web 
+browser like Netscape).  Here's one way:
+
+@lisp
+(eval-after-load "w3"
+  '(progn
+    (fset 'w3-fetch-orig (symbol-function 'w3-fetch))
+    (defun w3-fetch (&optional url target)
+      (interactive (list (w3-read-url-with-default)))
+      (if (eq major-mode 'gnus-article-mode)
+          (browse-url url)
+        (w3-fetch-orig url target)))))
+@end lisp
+
+Put that in your @file{.emacs} file, and hitting links in w3-rendered
+@sc{html} in the Gnus article buffers will use @code{browse-url} to
+follow the link.
+
+
 @node Other Sources
 @section Other Sources
 
@@ -12064,13 +13049,13 @@ true.
 When @code{nneething} is presented with a directory, it will scan this
 directory and assign article numbers to each file.  When you enter such
 a group, @code{nneething} must create ``headers'' that Gnus can use.
-After all, Gnus is a newsreader, in case you're
-forgetting. @code{nneething} does this in a two-step process.  First, it
-snoops each file in question.  If the file looks like an article (i.e.,
-the first few lines look like headers), it will use this as the head.
-If this is just some arbitrary file without a head (e.g. a C source
-file), @code{nneething} will cobble up a header out of thin air.  It
-will use file ownership, name and date and do whatever it can with these
+After all, Gnus is a newsreader, in case you're forgetting.
+@code{nneething} does this in a two-step process.  First, it snoops each
+file in question.  If the file looks like an article (i.e., the first
+few lines look like headers), it will use this as the head.  If this is
+just some arbitrary file without a head (e.g. a C source file),
+@code{nneething} will cobble up a header out of thin air.  It will use
+file ownership, name and date and do whatever it can with these
 elements.
 
 All this should happen automatically for you, and you will be presented
@@ -12696,10 +13681,37 @@ So, to use this, simply say something like:
 @cindex nnimap
 @cindex @sc{imap}
 
-@sc{imap} is a network protocol for reading mail (or news, or ...), think of
-it as a modernized @sc{nntp}. Connecting to a @sc{imap} server is much similar to
-connecting to a news server, you just specify the network address of the
-server.
+@sc{imap} is a network protocol for reading mail (or news, or ...),
+think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap} server
+is much similar to connecting to a news server, you just specify the
+network address of the server.
+
+A server configuration in @code{~/.gnus} with a few @sc{imap} servers
+might look something like this:
+
+@lisp
+(setq gnus-secondary-select-methods 
+      '((nnimap "simpleserver") ; no special configuration
+        ; perhaps a ssh port forwarded server:
+        (nnimap "dolk"
+                (nnimap-address "localhost")
+                (nnimap-server-port 1430))
+        ; a UW server running on localhost
+        (nnimap "barbar"
+                (nnimap-server-port 143)
+                (nnimap-address "localhost")
+                (nnimap-list-pattern ("INBOX" "mail/*")))
+        ; anonymous public cyrus server:
+        (nnimap "cyrus.andrew.cmu.edu"
+                (nnimap-authenticator anonymous)
+                (nnimap-list-pattern "archive.*")
+                (nnimap-stream network))
+        ; a ssl server on a non-standard port:
+        (nnimap "vic20"
+                (nnimap-address "vic20.somewhere.com")
+                (nnimap-server-port 9930)
+                (nnimap-stream ssl))))
+@end lisp
 
 The following variables can be used to create a virtual @code{nnimap}
 server:
@@ -12709,55 +13721,121 @@ server:
 @item nnimap-address
 @vindex nnimap-address
 
-The address of the remote @sc{imap} server. Defaults to the virtual server
-name if not specified.
+The address of the remote @sc{imap} server.  Defaults to the virtual
+server name if not specified.
 
 @item nnimap-server-port
 @vindex nnimap-server-port
-Port on server to contact. Defaults to port 143, or 993 for SSL.
+Port on server to contact.  Defaults to port 143, or 993 for SSL.
+
+Note that this should be a integer, example server specification:
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-server-port 4711))
+@end lisp
 
 @item nnimap-list-pattern
 @vindex nnimap-list-pattern
-String or list of strings of mailboxes to limit available groups
-to. This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via @sc{imap},
-you'll probably want to limit the mailboxes to those in @file{~/Mail/*}
-then.
+String or list of strings of mailboxes to limit available groups to.
+This is used when the server has very many mailboxes and you're only
+interested in a few -- some servers export your home directory via
+@sc{imap}, you'll probably want to limit the mailboxes to those in
+@file{~/Mail/*} then.
 
 The string can also be a cons of REFERENCE and the string as above, what
 REFERENCE is used for is server specific, but on the University of
 Washington server it's a directory that will be concatenated with the
 mailbox.
 
-Example:
+Example server specification:
 
 @lisp
-("INBOX" "Mail/*" "alt.sex.*" ("~friend/Mail/" . "list/*"))
+(nnimap "mail.server.com"
+        (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*" 
+                               ("~friend/Mail/" . "list/*"))))
 @end lisp
 
 @item nnimap-stream
 @vindex nnimap-stream
-The type of stream used to connect to your server. By default, nnimap
-will use the most secure stream your server is capable of.
+The type of stream used to connect to your server.  By default, nnimap
+will detect and automatically use all of the below, with the exception
+of SSL. (SSL is being replaced by STARTTLS, which can be automatically
+detected, but it's not widely deployed yet).
+
+Example server specification:
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-stream ssl))
+@end lisp
+
+Please note that the value of @code{nnimap-stream} is a symbol!
 
 @itemize @bullet
 @item
-@dfn{kerberos4:} Uses the `imtest' program.
+@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Require the
+@samp{imtest} program.
 @item
-@dfn{ssl:} Uses OpenSSL or SSLeay.
+@dfn{kerberos4:} Connect with kerberos 4. Require the @samp{imtest} program.
+@item
+@dfn{starttls:} Connect via the STARTTLS extension (similar to
+SSL). Require the external library @samp{starttls.el} and program
+@samp{starttls}.
+@item
+@dfn{ssl:} Connect through SSL. Require OpenSSL (the
+program @samp{openssl}) or SSLeay (@samp{s_client}).
+@item
+@dfn{shell:} Use a shell command to start IMAP connection.
 @item
 @dfn{network:} Plain, TCP/IP network connection.
 @end itemize
 
+@vindex imap-kerberos4-program
+The @samp{imtest} program is shipped with Cyrus IMAPD, nnimap support
+both @samp{imtest} version 1.5.x and version 1.6.x.  The variable
+@code{imap-kerberos4-program} contain parameters to pass to the imtest
+program. 
+
+@vindex imap-ssl-program
+For SSL connections, the OpenSSL program is available from
+@file{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
+and nnimap support it too - although the most recent versions of
+SSLeay, 0.9.x, are known to have serious bugs making it
+useless. Earlier versions, especially 0.8.x, of SSLeay are known to
+work. The variable @code{imap-ssl-program} contain parameters to pass
+to OpenSSL/SSLeay.
+
+@vindex imap-shell-program
+@vindex imap-shell-host
+For IMAP connections using the @code{shell} stream, the variable
+@code{imap-shell-program} specify what program to call.
+
 @item nnimap-authenticator
 @vindex nnimap-authenticator
 
-The authenticator used to connect to the server. By default, nnimap will
-use the most secure authenticator your server is capable of.
+The authenticator used to connect to the server.  By default, nnimap
+will use the most secure authenticator your server is capable of.
+
+Example server specification:
+
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-authenticator anonymous))
+@end lisp
+
+Please note that the value of @code{nnimap-authenticator} is a symbol!
 
 @itemize @bullet
 @item
-@dfn{kerberos4:} Kerberos authentication.
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
+external program @code{imtest}.
+@item
+@dfn{kerberos4:} Kerberos authentication. Require external program
+@code{imtest}.
+@item
+@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
+external library @code{digest-md5.el}.
 @item
 @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
 @item
@@ -12770,13 +13848,14 @@ use the most secure authenticator your server is capable of.
 @cindex Expunging
 @vindex nnimap-expunge-on-close
 Unlike Parmenides the @sc{imap} designers has decided that things that
-doesn't exist actually does exist. More specifically, @sc{imap} has this
-concept of marking articles @code{Deleted} which doesn't actually delete
-them, and this (marking them @code{Deleted}, that is) is what nnimap
-does when you delete a article in Gnus (with @kbd{G DEL} or similair).
+doesn't exist actually does exist.  More specifically, @sc{imap} has
+this concept of marking articles @code{Deleted} which doesn't actually
+delete them, and this (marking them @code{Deleted}, that is) is what
+nnimap does when you delete a article in Gnus (with @kbd{G DEL} or
+similair).
 
 Since the articles aren't really removed when we mark them with the
-@code{Deleted} flag we'll need a way to actually delete them. Feel like
+@code{Deleted} flag we'll need a way to actually delete them.  Feel like
 running in circles yet?
 
 Traditionally, nnimap has removed all articles marked as @code{Deleted}
@@ -12791,15 +13870,28 @@ The possible options are:
 The default behaviour, delete all articles marked as "Deleted" when
 closing a mailbox.
 @item never
-Never actually delete articles. Currently there is no way of showing the
-articles marked for deletion in nnimap, but other @sc{imap} clients may allow
-you to do this. If you ever want to run the EXPUNGE command manually,
-@xref{Expunging mailboxes}.
+Never actually delete articles.  Currently there is no way of showing
+the articles marked for deletion in nnimap, but other @sc{imap} clients
+may allow you to do this.  If you ever want to run the EXPUNGE command
+manually, @xref{Expunging mailboxes}.
 @item ask
 When closing mailboxes, nnimap will ask if you wish to expunge deleted
 articles or not.
+
 @end table
 
+@item nnimap-authinfo-file
+@vindex nnimap-authinfo-file
+
+A file containing credentials used to log in on servers.  The format
+is (almost) the same as the @code{ftp} @file{~/.netrc} file.  See
+`nntp-authinfo-file' for exact syntax.
+
+A file containing credentials used to log in on servers.  The format is
+(almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
+variable @code{nntp-authinfo-file} for exact syntax; also see
+@xref{NNTP}.
+
 @end table
 
 @menu
@@ -12815,14 +13907,14 @@ articles or not.
 @cindex splitting imap mail
 
 Splitting is something Gnus users has loved and used for years, and now
-the rest of the world is catching up. Yeah, dream on, not many @sc{imap}
-server has server side splitting and those that have splitting seem to
-use some non-standard protocol. This means that @sc{imap} support for Gnus
-has to do it's own splitting.
+the rest of the world is catching up.  Yeah, dream on, not many
+@sc{imap} server has server side splitting and those that have splitting
+seem to use some non-standard protocol.  This means that @sc{imap}
+support for Gnus has to do it's own splitting.
 
 And it does.
 
-There are three variables of interest:
+Here are the variables of interest:
 
 @table @code
 
@@ -12831,7 +13923,7 @@ There are three variables of interest:
 @cindex crosspost
 @vindex nnimap-split-crosspost
 
-If non-nil, do crossposting if several split methods match the mail. If
+If non-nil, do crossposting if several split methods match the mail.  If
 nil, the first match in @code{nnimap-split-rule} found will be used.
 
 Nnmail equivalent: @code{nnmail-crosspost}.
@@ -12841,11 +13933,13 @@ Nnmail equivalent: @code{nnmail-crosspost}.
 @cindex inbox
 @vindex nnimap-split-inbox
 
-A string or a list of strings that gives the name(s) of @sc{imap} mailboxes
-to split from. Defaults to nil, which means that splitting is disabled!
+A string or a list of strings that gives the name(s) of @sc{imap}
+mailboxes to split from.  Defaults to nil, which means that splitting is
+disabled!
 
 @lisp
-(setq nnimap-split-inbox '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
+(setq nnimap-split-inbox
+      '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
 @end lisp
 
 No nnmail equivalent.
@@ -12858,15 +13952,15 @@ New mail found in @code{nnimap-split-inbox} will be split according to
 this variable.
 
 This variable contains a list of lists, where the first element in the
-sublist gives the name of the @sc{imap} mailbox to move articles matching the
-regexp in the second element in the sublist. Got that? Neither did I, we
-need examples.
+sublist gives the name of the @sc{imap} mailbox to move articles
+matching the regexp in the second element in the sublist.  Got that?
+Neither did I, we need examples.
 
 @lisp
 (setq nnimap-split-rule
-        '(("INBOX.nnimap"        "^Sender: owner-nnimap@@vic20.globalcom.se")
-          ("INBOX.junk"          "^Subject:.*MAKE MONEY")
-          ("INBOX.private"       "")))
+      '(("INBOX.nnimap"  "^Sender: owner-nnimap@@vic20.globalcom.se")
+        ("INBOX.junk"    "^Subject:.*MAKE MONEY")
+        ("INBOX.private" "")))
 @end lisp
 
 This will put all articles from the nnimap mailing list into mailbox
@@ -12874,33 +13968,92 @@ INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
 into INBOX.spam and everything else in INBOX.private.
 
 The first string may contain `\\1' forms, like the ones used by
-replace-match to insert sub-expressions from the matched text. For
+replace-match to insert sub-expressions from the matched text.  For
 instance:
 
 @lisp
 ("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
 @end lisp
 
-The second element can also be a function. In that case, it will be
+The second element can also be a function.  In that case, it will be
 called with the first element of the rule as the argument, in a buffer
-containing the headers of the article. It should return a non-nil value
+containing the headers of the article.  It should return a non-nil value
 if it thinks that the mail belongs in that group.
 
 Nnmail users might recollect that the last regexp had to be empty to
-match all articles (like in the example above). This is not required in
-nnimap. Articles not matching any of the regexps will not be moved out
-of your inbox. (This might might affect performance if you keep lots of
+match all articles (like in the example above).  This is not required in
+nnimap.  Articles not matching any of the regexps will not be moved out
+of your inbox.  (This might might affect performance if you keep lots of
 unread articles in your inbox, since the splitting code would go over
 them every time you fetch new mail.)
 
 These rules are processed from the beginning of the alist toward the
-end. The first rule to make a match will "win", unless you have
-crossposting enabled. In that case, all matching rules will "win".
+end.  The first rule to make a match will "win", unless you have
+crossposting enabled.  In that case, all matching rules will "win".
+
+This variable can also have a function as its value, the function will
+be called with the headers narrowed and should return a group where it
+thinks the article should be splitted to.  See @code{nnimap-split-fancy}.
 
 The splitting code tries to create mailboxes if it need too.
 
+To allow for different split rules on different virtual servers, and
+even different split rules in different inboxes on the same server,
+the syntax of this variable have been extended along the lines of:
+
+@lisp
+(setq nnimap-split-rule
+      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
+                                  ("junk"    "From:.*Simon")))
+        ("my2server"    ("INBOX" nnimap-split-fancy))
+        ("my[34]server" (".*"    (("private" "To:.*Simon")
+                                  ("junk"    my-junk-func)))))
+@end lisp
+
+The virtual server name is in fact a regexp, so that the same rules
+may apply to several servers.  In the example, the servers
+@code{my3server} and @code{my4server} both use the same rules.
+Similarly, the inbox string is also a regexp.  The actual splitting
+rules are as before, either a function, or a list with group/regexp or
+group/function elements.
+
 Nnmail equivalent: @code{nnmail-split-methods}.
 
+@item nnimap-split-predicate
+@cindex splitting
+@vindex nnimap-split-predicate
+
+Mail matching this predicate in @code{nnimap-split-inbox} will be
+splitted, it is a string and the default is @samp{UNSEEN UNDELETED}.
+
+This might be useful if you use another @sc{imap} client to read mail in
+your inbox but would like Gnus to split all articles in the inbox
+regardless of readedness. Then you might change this to
+@samp{UNDELETED}.
+
+@item nnimap-split-fancy
+@cindex splitting, fancy
+@findex nnimap-split-fancy
+@vindex nnimap-split-fancy
+
+It's possible to set @code{nnimap-split-rule} to
+@code{nnmail-split-fancy} if you want to use fancy
+splitting. @xref{Fancy Mail Splitting}.
+
+However, to be able to have different fancy split rules for nnmail and
+nnimap backends you can set @code{nnimap-split-rule} to
+@code{nnimap-split-fancy} and define the nnimap specific fancy split
+rule in @code{nnimap-split-fancy}.
+
+Example:
+
+@lisp
+(setq nnimap-split-rule 'nnimap-split-fancy
+      nnimap-split-fancy ...)
+@end lisp
+
+Nnmail equivalent: @code{nnmail-split-fancy}.
+
 @end table
 
 @node Editing IMAP ACLs
@@ -12911,9 +14064,10 @@ Nnmail equivalent: @code{nnmail-split-methods}.
 @kindex G l
 @findex gnus-group-nnimap-edit-acl
 
-ACL stands for Access Control List.  ACLs are used in @sc{imap} for limiting
-(or enabling) other users access to your mail boxes. Not all @sc{imap}
-servers support this, this function will give an error if it doesn't.
+ACL stands for Access Control List.  ACLs are used in @sc{imap} for
+limiting (or enabling) other users access to your mail boxes.  Not all
+@sc{imap} servers support this, this function will give an error if it
+doesn't.
 
 To edit a ACL for a mailbox, type @kbd{G l}
 (@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
@@ -12944,7 +14098,7 @@ INBOX.mailbox).
 
 If you're using the @code{never} setting of @code{nnimap-expunge-close},
 you may want the option of expunging all deleted articles in a mailbox
-manually. This is exactly what @kbd{G x} does.
+manually.  This is exactly what @kbd{G x} does.
 
 Currently there is no way of showing deleted articles, you can just
 delete them.
@@ -13145,6 +14299,7 @@ Of course, to use it as such, you have to learn a few new commands.
 * Agent Categories::       How to tell the Gnus Agent what to download.
 * Agent Commands::         New commands for all the buffers.
 * Agent Expiry::           How to make old articles go away.
+* Agent and IMAP::         How to use the Agent with IMAP.
 * Outgoing Messages::      What happens when you post/mail something?
 * Agent Variables::        Customizing is fun.
 * Example Setup::          An example @file{.gnus.el} file for offline people.
@@ -13181,11 +14336,14 @@ already fetched while in this mode.
 @item
 You then decide to see whether any new news has arrived.  You connect
 your machine to the net (using PPP or whatever), and then hit @kbd{J j}
-to make Gnus become @dfn{plugged}.
+to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail
+as usual.  To check for new mail in unplugged mode, see (@pxref{Mail
+Source Specifiers}).
 
 @item
 You can then read the new news immediately, or you can download the news
-onto your local machine.  If you want to do the latter, you press @kbd{J
+onto your local machine.  If you want to do the latter, you press @kbd{g}
+to check if there are any new news and then @kbd{J
 s} to fetch all the eligible articles in all the groups.  (To let Gnus
 know which articles you want to download, @pxref{Agent Categories}.)
 
@@ -13233,7 +14391,7 @@ you're interested in the articles anyway.
 The main way to control what is to be downloaded is to create a
 @dfn{category} and then assign some (or all) groups to this category.
 Groups that do not belong in any other category belong to the
-@code{default} category. Gnus has its own buffer for creating and
+@code{default} category.  Gnus has its own buffer for creating and
 managing categories.
 
 @menu
@@ -13260,13 +14418,13 @@ score} is not necessarily related to normal scores.)
 @end enumerate
 
 A predicate in its simplest form can be a single predicate such as
-@code{true} or @code{false}. These two will download every available
-article or nothing respectively. In the case of these two special
+@code{true} or @code{false}.  These two will download every available
+article or nothing respectively.  In the case of these two special
 predicates an additional score rule is superfluous.
 
 Predicates of @code{high} or @code{low} download articles in respect of
 their scores in relationship to @code{gnus-agent-high-score} and
-@code{gnus-agent-low-score} as descibed below.
+@code{gnus-agent-low-score} as described below.
 
 To gain even finer control of what is to be regarded eligible for
 download a predicate can consist of a number of predicates with logical
@@ -13362,7 +14520,7 @@ wherever.  (Note: this would have to be at a point *after*
 @code{gnus-agent} has been loaded via @code{(gnus-agentize)})
 
 @lisp
-(defvar  gnus-category-predicate-alist
+(setq  gnus-category-predicate-alist
   (append gnus-category-predicate-alist
         '((old . my-article-old-p))))
 @end lisp
@@ -13375,12 +14533,11 @@ and simply specify your predicate as:
 
 If/when using something like the above, be aware that there are many
 misconfigured systems/mailers out there and so an article's date is not
-always a reliable indication of when it was posted. Hell, some people
+always a reliable indication of when it was posted.  Hell, some people
 just don't give a damm.
 
-
 The above predicates apply to *all* the groups which belong to the
-category. However, if you wish to have a specific predicate for an
+category.  However, if you wish to have a specific predicate for an
 individual group within a category, or you're just too lazy to set up a
 new category, you can enter a group's individual predicate in it's group
 parameters like so:
@@ -13389,10 +14546,9 @@ parameters like so:
 (agent-predicate . short)
 @end lisp
 
-This is the group parameter equivalent of the agent category
-default. Note that when specifying a single word predicate like this,
-the @code{agent-predicate} specification must be in dotted pair
-notation.
+This is the group parameter equivalent of the agent category default.
+Note that when specifying a single word predicate like this, the
+@code{agent-predicate} specification must be in dotted pair notation.
 
 The equivalent of the longer example from above would be:
 
@@ -13482,8 +14638,8 @@ Group Parameter specification
 (agent-score "~/News/agent.SCORE")
 @end lisp
 
-Additional score files can be specified as above. Need I say anything
-about parenthesis.
+Additional score files can be specified as above.  Need I say anything
+about parenthesis?
 @end itemize
 
 @item
@@ -13682,6 +14838,12 @@ Remove the current group from its category, if any
 (@code{gnus-agent-remove-group}).  This command understands the
 process/prefix convention (@pxref{Process/Prefix}).
 
+@item J Y
+@kindex J Y (Agent Group)
+@findex gnus-agent-synchronize-flags
+Synchronize flags changed while unplugged with remote server, if any.
+
+
 @end table
 
 
@@ -13756,6 +14918,60 @@ expire all articles---unread, read, ticked and dormant.  If @code{nil}
 unread, ticked and dormant articles will be kept indefinitely.
 
 
+@node Agent and IMAP
+@subsection Agent and IMAP
+
+The Agent work with any Gnus backend, including nnimap.  However, since
+there are some conceptual differences between NNTP and IMAP, this
+section (should) provide you with some information to make Gnus Agent
+work smoother as a IMAP Disconnected Mode client.
+
+The first thing to keep in mind is that all flags (read, ticked, etc)
+are kept on the IMAP server, rather than in @code{.newsrc} as is the
+case for nntp.  Thus Gnus need to remember flag changes when
+disconnected, and synchronize these flags when you plug back in.
+
+Gnus keep track of flag changes when reading nnimap groups under the
+Agent by default.  When you plug back in, by default Gnus will check if
+you have any changed any flags and ask if you wish to synchronize theese
+with the server.  This behaviour is customizable with
+@code{gnus-agent-synchronize-flags}.
+
+@vindex gnus-agent-synchronize-flags
+If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
+never automatically synchronize flags.  If it is @code{ask}, the
+default, the Agent will check if you made any changes and if so ask if
+you wish to synchronize these when you re-connect.  If it has any other
+value, all flags will be synchronized automatically.
+
+If you do not wish to automatically synchronize flags when you
+re-connect, this can be done manually with the
+@code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}
+in the group buffer by default.
+
+Some things are currently not implemented in the Agent that you'd might
+expect from a disconnected IMAP client, including:
+
+@itemize @bullet
+
+@item
+Copying/moving articles into nnimap groups when unplugged.
+
+@item
+Creating/deleting nnimap groups when unplugged.
+
+@end itemize
+
+Technical note: the synchronization algorithm does not work by "pushing"
+all local flags to the server, but rather incrementally update the
+server view of flags by changing only those flags that were changed by
+the user.  Thus, if you set one flag on a article, quit the group and
+re-select the group and remove the flag; the flag will be set and
+removed from the server when you "synchronize".  The queued flag
+operations can be found in the per-server @code{flags} file in the Agent
+directory.  It's emptied when you synchronize flags.
+
+
 @node Outgoing Messages
 @subsection Outgoing Messages
 
@@ -14303,16 +15519,23 @@ file names---discarding the @samp{all} elements.
 @findex gnus-score-find-hierarchical
 Apply all score files from all the parent groups.  This means that you
 can't have score files like @file{all.SCORE}, but you can have
-@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE}.
+@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE} for each
+server.
 
 @end table
 This variable can also be a list of functions.  In that case, all these
-functions will be called, and all the returned lists of score files will
-be applied.  These functions can also return lists of score alists
-directly.  In that case, the functions that return these non-file score
-alists should probably be placed before the ``real'' score file
-functions, to ensure that the last score file returned is the local
-score file.  Phu.
+functions will be called with the group name as argument, and all the
+returned lists of score files will be applied.  These functions can also
+return lists of score alists directly.  In that case, the functions that
+return these non-file score alists should probably be placed before the
+``real'' score file functions, to ensure that the last score file
+returned is the local score file.  Phu.
+
+For example, to do hierarchical scoring but use a non-server-specific
+overall score file, you could use the value
+@example
+(list (lambda (group) ("all.SCORE")) 'gnus-score-find-hierarchical)
+@end example
 
 @item gnus-score-expiry-days
 @vindex gnus-score-expiry-days
@@ -14686,7 +15909,7 @@ the @code{gnus-default-adaptive-score-alist} variable.  For instance, it
 might look something like this:
 
 @lisp
-(defvar gnus-default-adaptive-score-alist
+(setq gnus-default-adaptive-score-alist
   '((gnus-unread-mark)
     (gnus-ticked-mark (from 4))
     (gnus-dormant-mark (from 5))
@@ -14839,7 +16062,7 @@ A string.  Then this file will be used as the home score file for all
 groups.
 
 @item
-A function. The result of this function will be used as the home score
+A function.  The result of this function will be used as the home score
 file.  The function will be called with the name of the group as the
 parameter.
 
@@ -14852,7 +16075,7 @@ A list.  The elements in this list can be:
 group name, the @var{file-name} will will be used as the home score file.
 
 @item
-A function. If the function returns non-nil, the result will be used as
+A function.  If the function returns non-nil, the result will be used as
 the home score file.
 
 @item
@@ -15215,7 +16438,7 @@ by hand.
 
 The kill to score conversion package isn't included in Gnus by default.
 You can fetch it from
-@file{http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
+@file{http://www.stud.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el}.
 
 If your old kill files are very complex---if they contain more
 non-@code{gnus-kill} forms than not, you'll have to convert them by
@@ -15345,7 +16568,7 @@ from GroupLens in one of three ways controlled by the variable
 @vindex gnus-grouplens-override-scoring
 There are three ways to display predictions in grouplens.  You may
 choose to have the GroupLens scores contribute to, or override the
-regular gnus scoring mechanism. override is the default; however, some
+regular gnus scoring mechanism.  override is the default; however, some
 people prefer to see the Gnus scores plus the grouplens scores.  To get
 the separate scoring behavior you need to set
 @code{gnus-grouplens-override-scoring} to @code{'separate}.  To have the
@@ -15715,6 +16938,12 @@ will mark the next three unread articles as read, no matter what the
 summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
 @code{nil} for a more straightforward action.
 
+Many commands do not use the process/prefix convention.  All commands
+that do explicitly say so in this manual.  To apply the process/prefix
+convention to commands that do not use it, you can use the @kbd{M-&}
+command.  For instance, to mark all the articles in the group as
+expirable, you could say `M P b M-& E'.
+
 
 @node Interactive
 @section Interactive
@@ -15926,9 +17155,12 @@ than 6 characters to make it look nice in columns.)
 Ignoring is done first; then cutting; then maxing; and then as the very
 last operation, padding.
 
-If you use lots of these advanced thingies, you'll find that Gnus gets
-quite slow.  This can be helped enormously by running @kbd{M-x
-gnus-compile} when you are satisfied with the look of your lines.
+@vindex gnus-compile-user-specs
+If @code{gnus-compile-user-specs} is set to @code{nil} (@code{t} by
+default) with your strong personality, and use a lots of these advanced
+thingies, you'll find that Gnus gets quite slow.  This can be helped
+enormously by running @kbd{M-x gnus-compile} when you are satisfied with
+the look of your lines.
 @xref{Compilation}.
 
 
@@ -15969,12 +17201,12 @@ and so on.  Create as many faces as you wish.  The same goes for the
 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
 
 Text inside the @samp{%<} and @samp{%>} specifiers will get the special
-@code{balloon-help} property set to @code{gnus-balloon-face-0}. If you say
-@samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on. The
-@code{gnus-balloon-face-*} variables should be either strings or
-symbols naming functions that return a string. Under @code{balloon-help-mode},
+@code{balloon-help} property set to @code{gnus-balloon-face-0}.  If you
+say @samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on.  The
+@code{gnus-balloon-face-*} variables should be either strings or symbols
+naming functions that return a string.  Under @code{balloon-help-mode},
 when the mouse passes over text with this property set, a balloon window
-will appear and display the string. Please refer to the doc string of
+will appear and display the string.  Please refer to the doc string of
 @code{balloon-help-mode} for more information on this.
 
 Here's an alternative recipe for the group buffer:
@@ -16247,6 +17479,43 @@ window is displayed vertically next to another window, you may also want
 to fiddle with @code{gnus-tree-minimize-window} to avoid having the
 windows resized.
 
+@subsection Example Window Configurations
+
+@itemize @bullet
+@item 
+Narrow left hand side occupied by group buffer.  Right hand side split
+between summary buffer (top one-sixth) and article buffer (bottom).
+
+@ifinfo
+@example
++---+---------+
+| G | Summary |
+| r +---------+
+| o |         |
+| u | Article |
+| p |         |
++---+---------+
+@end example
+@end ifinfo
+
+@lisp
+(gnus-add-configuration
+ '(article
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0
+                         (summary 0.16 point)
+                         (article 1.0)))))
+
+(gnus-add-configuration
+ '(summary
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0 (summary 1.0 point)))))
+@end lisp
+
+@end itemize
+
 
 @node Faces and Fonts
 @section Faces and Fonts
@@ -16269,7 +17538,9 @@ interface.
 
 Remember all those line format specification variables?
 @code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
-on.  Now, Gnus will of course heed whatever these variables are, but,
+on.  By default, T-gnus will use the byte-compiled codes of these
+variables and we can keep a slow-down to a minimum.  However, if you set
+@code{gnus-compile-user-specs} to @code{nil} (@code{t} by default),
 unfortunately, changing them will mean a quite significant slow-down.
 (The default values of these variables have byte-compiled functions
 associated with them, while the user-generated versions do not, of
@@ -16278,10 +17549,16 @@ course.)
 To help with this, you can run @kbd{M-x gnus-compile} after you've
 fiddled around with the variables and feel that you're (kind of)
 satisfied.  This will result in the new specs being byte-compiled, and
-you'll get top speed again.  Gnus will save these compiled specs in the
-@file{.newsrc.eld} file.  (User-defined functions aren't compiled by
-this function, though---you should compile them yourself by sticking
-them into the @code{.gnus.el} file and byte-compiling that file.)
+you'll get top speed again.  Note that T-gnus will not save these
+compiled specs in the @file{.newsrc.eld} file.
+
+@table @code
+@item gnus-compile-user-specs
+@vindex gnus-compile-user-specs
+If it is non-nil, the user-defined format specs will be byte-compiled
+automatically.  The default value of this variable is @code{t}.  It has
+an effect on the values of @code{gnus-*-line-format-spec}.
+@end table
 
 
 @node Mode Lines
@@ -16607,32 +17884,11 @@ default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
 @vindex gnus-nocem-issuers
 There are many people issuing NoCeM messages.  This list says what
 people you want to listen to.  The default is @code{("Automoose-1"
-"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
-"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
-(Richard E. Depew)")}; fine, upstanding citizens all of them.
-
-Known despammers that you can put in this list include:
+"clewis@@ferret.ocunix.on.ca" "cosmo.roadkill" "SpamHippo"
+"hweede@@snafu.de")}; fine, upstanding citizens all of them.
 
-@table @samp
-@item clewis@@ferret.ocunix.on.ca;
-@cindex Chris Lewis
-Chris Lewis---Major Canadian despammer who has probably canceled more
-usenet abuse than anybody else.
-
-@item Automoose-1
-@cindex CancelMoose[tm]
-The CancelMoose[tm] on autopilot.  The CancelMoose[tm] is reputed to be
-Norwegian, and was the person(s) who invented NoCeM.
-
-@item jem@@xpat.com;
-@cindex Jem
-John Milburn---despammer located in Korea who is getting very busy these
-days.
-
-@item red@@redpoll.mrfs.oh.us (Richard E. Depew)
-Richard E. Depew---lone American despammer.  He mostly cancels binary
-postings to non-binary groups and removes spews (regurgitated articles).
-@end table
+Known despammers that you can put in this list are listed at
+@file{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html}.
 
 You do not have to heed NoCeM messages from all these people---just the
 ones you want to listen to.  You also don't have to accept all NoCeM
@@ -16697,6 +17953,18 @@ The number of days before removing old NoCeM entries from the cache.
 The default is 15.  If you make it shorter Gnus will be faster, but you
 might then see old spam.
 
+@item gnus-nocem-check-from
+@vindex gnus-nocem-check-from
+Non-@code{nil} means check for valid issuers in message bodies.
+Otherwise don't bother fetching articles unless their author matches a
+valid issuer; that is much faster if you are selective about the
+issuers.
+
+@item gnus-nocem-check-article-limit
+@vindex gnus-nocem-check-article-limit
+If non-@code{nil}, the maximum number of articles to check in any NoCeM
+group.  NoCeM groups can be huge and very slow to process.
+
 @end table
 
 Using NoCeM could potentially be a memory hog.  If you have many living
@@ -17085,7 +18353,7 @@ In short---to use Smiley in Gnus, put the following in your
 @file{.gnus.el} file:
 
 @lisp
-(setq gnus-treat-display-smiley t)
+(setq gnus-treat-display-smileys t)
 @end lisp
 
 Smiley maps text smiley faces---@samp{:-)}, @samp{:-=}, @samp{:-(} and
@@ -17412,6 +18680,17 @@ some headers.  I don't see why you'd want that, though.
 @vindex gnus-shell-command-separator
 String used to separate two shell commands.  The default is @samp{;}.
 
+@item gnus-invalid-group-regexp
+@vindex gnus-invalid-group-regexp
+
+Regexp to match ``invalid'' group names when querying user for a group
+name.  The default value catches some @strong{really} invalid group
+names who could possibly mess up Gnus internally (like allowing
+@samp{:} in a group name, which is normally used to delimit method and
+group).
+
+IMAP users might want to allow @samp{/} in group names though.
+
 
 @end table
 
@@ -17468,11 +18747,11 @@ but at the common table.@*
 @sc{gnus} was written by Masanobu @sc{Umeda}.  When autumn crept up in
 '94, Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
 
-If you want to investigate the person responsible for this outrage, you
-can point your (feh!) web browser to
-@file{http://www.stud.ifi.uio.no/~larsi/}.  This is also the primary
-distribution point for the new and spiffy versions of Gnus, and is known
-as The Site That Destroys Newsrcs And Drives People Mad.
+If you want to investigate the person responsible for this outrage,
+you can point your (feh!) web browser to
+@file{http://quimby.gnus.org/~larsi/}.  This is also the primary
+distribution point for the new and spiffy versions of Gnus, and is
+known as The Site That Destroys Newsrcs And Drives People Mad.
 
 During the first extended alpha period of development, the new Gnus was
 called ``(ding) Gnus''.  @dfn{(ding)} is, of course, short for
@@ -17486,6 +18765,27 @@ spunky name, we decided that the name was @emph{too} spunky, so we
 renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
 ``@sc{gnus}''.  New vs. old.
 
+@menu
+* Gnus Versions::       What Gnus versions have been released.
+* Other Gnus Versions:: Other Gnus versions that also have been released.
+* Why?::                What's the point of Gnus?
+* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
+* Conformity::          Gnus tries to conform to all standards.
+* Emacsen::             Gnus can be run on a few modern Emacsen.
+* Gnus Development::    How Gnus is developed.
+* Contributors::        Oodles of people.
+* New Features::        Pointers to some of the new stuff in Gnus.
+* Newest Features::     Features so new that they haven't been written yet.
+@end menu
+
+
+@node Gnus Versions
+@subsection Gnus Versions
+@cindex Pterodactyl Gnus
+@cindex ding Gnus
+@cindex September Gnus
+@cindex Quassia Gnus
+
 The first ``proper'' release of Gnus 5 was done in November 1995 when it
 was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
 plus 15 Gnus 5.0 releases).
@@ -17496,8 +18796,12 @@ releases)) was released under the name ``Gnus 5.2'' (40 releases).
 On July 28th 1996 work on Red Gnus was begun, and it was released on
 January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
 
-On September 13th 1997, Quassia Gnus was started and lasted 37
-releases.  If was released as ``Gnus 5.6 on March 8th 1998.
+On September 13th 1997, Quassia Gnus was started and lasted 37 releases.
+If was released as ``Gnus 5.6'' on March 8th 1998 (46 releases).
+
+Gnus 5.6 begat Pterodactyl Gnus on August 29th 1998 and was released as
+``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd
+1999. 
 
 If you happen upon a version of Gnus that has a prefixed name --
 ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
@@ -17506,16 +18810,21 @@ Slowly.  Whatever you do, don't run.  Walk away, calmly, until you're
 out of its reach.  Find a proper released version of Gnus and snuggle up
 to that instead.
 
-@menu
-* Why?::                What's the point of Gnus?
-* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
-* Conformity::          Gnus tries to conform to all standards.
-* Emacsen::             Gnus can be run on a few modern Emacsen.
-* Gnus Development::    How Gnus is developed.
-* Contributors::        Oodles of people.
-* New Features::        Pointers to some of the new stuff in Gnus.
-* Newest Features::     Features so new that they haven't been written yet.
-@end menu
+
+@node Other Gnus Versions
+@subsection Other Gnus Versions
+@cindex Semi-gnus
+
+In addition to the versions of Gnus which have had their releases
+coordinated by Lars, one major development has been Semi-gnus from
+Japan.  It's based on a library called @sc{semi}, which provides
+@sc{mime} capabilities.
+
+These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.
+Collectively, they are called ``Semi-gnus'', and different strains are
+called T-gnus, ET-gnus, Nana-gnus and Chaos.  These provide powerful
+@sc{mime} and multilingualization things, especially important for
+Japanese users.
 
 
 @node Why?
@@ -17542,7 +18851,7 @@ and news from different sources.  I have added hooks for customizations
 everywhere I could imagine it being useful.  By doing so, I'm inviting
 every one of you to explore and invent.
 
-May Gnus never be complete. @kbd{C-u 100 M-x all-hail-emacs} and
+May Gnus never be complete.  @kbd{C-u 100 M-x all-hail-emacs} and
 @kbd{C-u 100 M-x all-hail-xemacs}.
 
 
@@ -17564,7 +18873,7 @@ Our motto is:
 All commands have kept their names.  Some internal functions have changed
 their names.
 
-The @code{gnus-uu} package has changed drastically. @xref{Decoding
+The @code{gnus-uu} package has changed drastically.  @xref{Decoding
 Articles}.
 
 One major compatibility question is the presence of several summary
@@ -17679,13 +18988,15 @@ Gnus should work on :
 Emacs 20.3 and up.
 
 @item
-XEmacs 20.4 and up.
+XEmacs 21.1.1 and up.
 
 @end itemize
 
 This Gnus version will absolutely not work on any Emacsen older than
 that.  Not reliably, at least.  Older versions of Gnus may work on older
-Emacs versions.
+Emacs versions.  However, T-gnus does support ``Mule 2.3 based on Emacs
+19.34'' and possibly the versions of XEmacs prior to 21.1.1, e.g. 20.4.
+See the file ``README'' in the T-gnus distribution for more details.
 
 There are some vague differences between Gnus on the various
 platforms---XEmacs features more graphics (a logo and a toolbar)---but
@@ -17712,9 +19023,9 @@ supposed to be able to use these, and these are mostly discussed on the
 @samp{gnu.emacs.gnus} newsgroup.
 
 @cindex Incoming*
-@vindex nnmail-delete-incoming
+@vindex mail-source-delete-incoming
 Some variable defaults differ between alpha Gnusae and released Gnusae.
-In particular, @code{nnmail-delete-incoming} defaults to @code{nil} in
+In particular, @code{mail-source-delete-incoming} defaults to @code{nil} in
 alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
 lossage of mail if an alpha release hiccups while handling the mail.
 
@@ -17768,6 +19079,9 @@ well as numerous other things).
 Luis Fernandes---design and graphics.
 
 @item
+Justin Sheehy--the FAQ maintainer.
+
+@item
 Erik Naggum---help, ideas, support, code and stuff.
 
 @item
@@ -18000,7 +19314,6 @@ Ralph Schleicher,
 Philippe Schnoebelen,
 Andreas Schwab,
 Randal L. Schwartz,
-Justin Sheehy,
 Danny Siu,
 Matt Simmons,
 Paul D. Smith,
@@ -19978,6 +21291,38 @@ fetching.
 Be able to forward groups of messages as MIME digests.
 
 @item
+nnweb should include the "get whole article" article when getting articles. 
+
+@item
+When I type W W c (gnus-article-hide-citation) in the summary
+buffer, the citations are revealed, but the [+] buttons don't turn
+into [-] buttons.  (If I click on one of the [+] buttons, it does
+turn into a [-] button.)
+
+@item
+Perhaps there should be a command to "attach" a buffer of comments to
+a message?  That is, `B WHATEVER', you're popped into a buffer, write
+something, end with `C-c C-c', and then the thing you've written gets
+to be the child of the message you're commenting.
+
+@item
+Handle external-body parts.
+
+@item
+When renaming a group name, nnmail-split-history does not get the group
+name renamed.
+
+@item
+Allow mail splitting on bodies when using advanced mail splitting.
+
+@lisp
+  (body "whatever.text")
+@end lisp
+
+@item
+Be able to run `J u' from summary buffers.
+
+@item
 Solve the halting problem.
 
 @c TODO
@@ -20253,7 +21598,7 @@ An article that responds to a different article---its parent.
 @item digest
 @cindex digest
 A collection of messages in one file.  The most common digest format is
-specified by RFC1153.
+specified by RFC 1153.
 
 @end table
 
@@ -20409,10 +21754,10 @@ Gnus will work.
 
 @item
 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
-like @samp{T-gnus 6.13.* (based on Pterodactyl Gnus v0.*; for SEMI 1.1*,
-FLIM 1.1*)} you have the right files loaded.  If, on the other hand, you
-get something like @samp{NNTP 3.x} or @samp{nntp flee}, you have some
-old @file{.el} files lying around.  Delete these.
+like @samp{T-gnus 6.14.6 (based on Gnus v5.8.8; for SEMI 1.13, FLIM 1.13)}
+you have the right files loaded.  If, on the other hand, you get
+something like @samp{NNTP 3.x} or @samp{nntp flee}, you have some old
+@file{.el} files lying around.  Delete these.
 
 @item
 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
@@ -20434,7 +21779,7 @@ If all else fails, report the problem as a bug.
 @kindex M-x gnus-bug
 @findex gnus-bug
 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
-command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
+command.  @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
 me the backtrace.  I will fix bugs, but I can only fix them if you send
 me a precise description as to how to reproduce the bug.
 
@@ -20949,11 +22294,11 @@ There should be no result data from this function.
 
 @item (nnchoke-request-set-mark GROUP ACTION &optional SERVER)
 
-Set/remove/add marks on articles. Normally Gnus handles the article
+Set/remove/add marks on articles.  Normally Gnus handles the article
 marks (such as read, ticked, expired etc) internally, and store them in
-@code{~/.newsrc.eld}. Some backends (such as @sc{imap}) however carry all
-information about the articles on the server, so Gnus need to propagate
-the mark information to the server.
+@code{~/.newsrc.eld}.  Some backends (such as @sc{imap}) however carry
+all information about the articles on the server, so Gnus need to
+propagate the mark information to the server.
 
 ACTION is a list of mark setting requests, having this format:
 
@@ -20961,18 +22306,18 @@ ACTION is a list of mark setting requests, having this format:
 (RANGE ACTION MARK)
 @end example
 
-Range is a range of articles you wish to update marks on. Action is
+Range is a range of articles you wish to update marks on.  Action is
 @code{set}, @code{add} or @code{del}, respectively used for removing all
 existing marks and setting them as specified, adding (preserving the
 marks not mentioned) mark and removing (preserving the marks not
-mentioned) marks. Mark is a list of marks; where each mark is a
-symbol. Currently used marks are @code{read}, @code{tick}, @code{reply},
+mentioned) marks.  Mark is a list of marks; where each mark is a symbol.
+Currently used marks are @code{read}, @code{tick}, @code{reply},
 @code{expire}, @code{killed}, @code{dormant}, @code{save},
 @code{download} and @code{unsend}, but your backend should, if possible,
-not limit itself to theese.
+not limit itself to these.
 
 Given contradictory actions, the last action in the list should be the
-effective one. That is, if your action contains a request to add the
+effective one.  That is, if your action contains a request to add the
 @code{tick} mark on article 1 and, later in the list, a request to
 remove the mark on the same article, the mark should in fact be removed.
 
@@ -21506,7 +22851,7 @@ almost suspect that the author looked at the @sc{nov} specification and
 just shamelessly @emph{stole} the entire thing, and one would be right.
 
 @dfn{Header} is a severely overloaded term.  ``Header'' is used in
-RFC1036 to talk about lines in the head of an article (e.g.,
+RFC 1036 to talk about lines in the head of an article (e.g.,
 @code{From}).  It is used by many people as a synonym for
 ``head''---``the header and the body''.  (That should be avoided, in my
 opinion.)  And Gnus uses a format internally that it calls ``header'',
index da186fe..b8e863d 100644 (file)
-% include file for the Gnus refcard and booklet
-\def\progver{5.0}\def\refver{5.0} % program and refcard versions
-\def\date{16 September 1995}
-\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
-\raggedbottom\raggedright
-\newlength{\logowidth}\setlength{\logowidth}{6.861in}
-\newlength{\logoheight}\setlength{\logoheight}{7.013in}
+% -*- mode: latex; TeX-master: "refcard.tex" -*-
+                                % include file for the Gnus refcard and booklet
 \newlength{\keycolwidth}
 \newenvironment{keys}[1]% #1 is the widest key
-  {\nopagebreak%\noindent%
-   \settowidth{\keycolwidth}{#1}%
-   \addtolength{\keycolwidth}{\tabcolsep}%
-   \addtolength{\keycolwidth}{-\columnwidth}%
-   \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
+{\nopagebreak%\noindent%
+  \settowidth{\keycolwidth}{#1}%
+  \addtolength{\keycolwidth}{\tabcolsep}%
+  \addtolength{\keycolwidth}{-\columnwidth}%
+  \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
   {\end{tabular}\\}
-\catcode`\^=12 % allow ^ to be typed literally
-\newcommand{\B}[1]{{\bf#1})}    % bold l)etter
-
-\def\Title{
-\begin{center}
-{\bf\LARGE Gnus \progver\ Reference \Guide\\}
-%{\normalsize \Guide\ version \refver}
-\end{center}
-}
-
-\newcommand\Logo[1]{\centerline{
-\makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
-{\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}}
-
-\def\CopyRight{
-\begin{center}
-Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
-Copyright \copyright\ 1995 \author.\\*
-Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
-Ingebrigtsen.\\*
-and the Emacs Help Bindings feature (C-h b).\\*
-Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
-\end{center}
-
-Permission is granted to make and distribute copies of this reference
-\guide{} provided the copyright notice and this permission are preserved on
-all copies.  Please send corrections, additions and suggestions to the
-above email address. \Guide{} last edited on \date.
-}
-
-\def\Notes{
-\subsec{Notes}
-{\samepage
-Gnus is complex. Currently it has some 346 interactive (user-callable)
-functions. Of these 279 are in the two major modes (Group and
-Summary/Article). Many of these functions have more than one binding, some
-have 3 or even 4 bindings. The total number of keybindings is 389. So in
-order to save 40\% space, every function is listed only once on this
-\guide, under the ``more logical'' binding. Alternative bindings are given
-in parentheses in the beginning of the description.
-
-Many Gnus commands are affected by the numeric prefix. Normally you enter a
-prefix by holding the Meta key and typing a number, but in most Gnus modes
-you don't need to use Meta since the digits are not self-inserting. The
-prefixed behavior of commands is given in [brackets]. Often the prefix is
-used to specify:
-
-\quad [distance] How many objects to move the point over.
-
-\quad [scope] How many objects to operate on (including the current one).
-
-\quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
-determines how many objects to operate on. Else if there are some objects
-marked with the process mark \#, these are operated on. Else only the
-current object is affected.
-
-\quad [level] A group subscribedness level. Only groups with a lower or
-equal level will be affected by the operation. If no prefix is given,
-`gnus-group-default-list-level' is used.  If
-`gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
-commands will also set the default level.
-
-\quad [score] An article score. If no prefix is given,
-`gnus-summary-default-score' is used.
-%Some functions were not yet documented at the time of creating this
-%\guide and are clearly indicated as such.
-\\*[\baselineskip]
-\begin{keys}{C-c C-i}
-C-c C-i & Go to the Gnus online {\bf info}.\\
-C-c C-b & Send a Gnus {\bf bug} report.\\
-\end{keys}
-}}
-
-\def\GroupLevels{
-\subsec{Group Subscribedness Levels}
-The table below assumes that you use the default Gnus levels.
-Fill your user-specific levels in the blank cells.\\[1\baselineskip]
-
-\begin{tabular}{|c|l|l|}
-\hline
-Level & Groups & Status \\
-\hline
-1 & mail groups   &              \\
-2 & mail groups   &              \\
-3 &               & subscribed   \\
-4 &               &              \\
-5 & default list level &         \\
-\hline
-6 &               & unsubscribed \\
-7 &               &              \\
-\hline
-8 &               & zombies      \\
-\hline
-9 &               & killed       \\
-\hline
-\end{tabular}
-}
-
-\def\Marks{
-\subsec{Mark Indication Characters}
-{\samepage If a command directly sets a mark, it is shown in parentheses.\\*
-\newlength{\markcolwidth}
-\settowidth{\markcolwidth}{` '}% widest character
-\addtolength{\markcolwidth}{4\tabcolsep}
-\addtolength{\markcolwidth}{-\columnwidth}
-\newlength{\markdblcolwidth}
-\setlength{\markdblcolwidth}{\columnwidth}
-\addtolength{\markdblcolwidth}{-2\tabcolsep}
-\begin{tabular}{|c|p{-\markcolwidth}|}
-\hline
-\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
-  All these marks appear in the first column of the summary line, and so
-  are mutually exclusive.}\\ 
-\hline
-` ' & (M-u, M SPC, M c) Not read.\\
-!   & (!, M !, M t) Ticked (interesting).\\
-?   & (?, M ?) Dormant (only followups are interesting).\\
-C   & (C, S c) {\bf Canceled} (only for your own articles).\\
-E   & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
-\hline\hline
-\multicolumn{2}{|p{\markdblcolwidth}|}{The marks below mean that the article
-  is read (killed, uninteresting), and have more or less the same effect.
-  Some commands however explicitly differentiate between them (e.g.\ M
-  M-C-r, adaptive scoring).}\\
-\hline
-r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
-C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
-O   & {\bf Old} (marked read in a previous session).\\
-K   & (k, M k; C-k, M K) {\bf Killed}.\\
-R   & {\bf Read} (viewed in actuality).\\
-X   & Killed by a kill file.\\
-Y   & Killed due to low score.\\
-\hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
-\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf Other marks}}\\
-\hline
-\#  & (\#, M \#, M P p) Processable (will be affected by the next operation).\\
-A   & {\bf Answered} (followed-up or replied).\\
-+   & Over default score.\\
-$-$ & Under default score.\\
-=   & Has children (thread underneath it). Add `\%e' to
-      `gnus-summary-line-format'.\\
-\hline
-\end{tabular}
-}}
-
-\def\GroupMode{
-\sec{Group Mode}
-\begin{keys}{C-c M-C-x}
-RET     & (=) Select this group. [Prefix: how many (read) articles to fetch.
-Positive: newest articles, negative: oldest ones.]\\
-SPC     & Select this group and display the first unread article. [Same
-prefix as above.]\\ 
-?       & Give a very short help message.\\
-$<$     & Go to the beginning of the Group buffer.\\
-$>$     & Go to the end of the Group buffer.\\
-,       & Jump to the lowest-level group with unread articles.\\
-.       & Jump to the first group with unread articles.\\
-^       & Enter the Server buffer mode.\\
-a       & Post an {\bf article} to a group.\\
-b       & Find {\bf bogus} groups and delete them.\\
-c       & Mark all unticked articles in this group as read ({\bf catch-up}).
-[p/p]\\ 
-g       & Check the server for new articles ({\bf get}). [level]\\
-j       & {\bf Jump} to a group.\\
-m       & {\bf Mail} a message to someone.\\
-n       & Go to the {\bf next} group with unread articles. [distance]\\
-p       & (DEL) Go to the {\bf previous} group with unread articles.
-[distance]\\ 
-q       & {\bf Quit} Gnus.\\
-r       & Read the init file ({\bf reset}).\\
-s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
-`gnus-save-newsrc-file').\\ 
-z       & Suspend (kill all buffers of) Gnus.\\
-B       & {\bf Browse} a foreign server.\\
-C       & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
-F       & {\bf Find} new groups and process them.\\
-N       & Go to the {\bf next} group. [distance]\\
-P       & Go to the {\bf previous} group. [distance]\\
-Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
-R       & {\bf Restart} Gnus.\\
-V       & Display the Gnus {\bf version} number.\\
-Z       & Clear the dribble buffer.\\
-C-c C-d & Show the {\bf description} of this group. [Prefix: re-read it
-from the server.]\\ 
-C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
-(depending on `gnus-group-sort-function').\\
-C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
-process.\\
-C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
-C-x C-t & {\bf Transpose} two groups.\\
-M-d     & {\bf Describe} ALL groups. [Prefix: re-read the description from the
-server.]\\
-M-f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
-M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
-M-n     & Go to the {\bf previous} unread group on the same or lower level.
-[distance]\\ 
-M-p     & Go to the {\bf next} unread group on the same or lower level.
-[distance]\\ 
-\end{keys}
-}
-
-\def\GroupCommands{
-\subsec{List Groups}
-{\samepage
-\begin{keys}{A m}
-A a     & (C-c C-a) List all groups whose names match a regexp ({\bf
-apropos}).\\ 
-A d     & List all groups whose names or {\bf descriptions} match a regexp.\\ 
-A k     & (C-c C-l) List all {\bf killed} groups.\\
-A m     & List groups that {\bf match} a regexp and have unread articles.
-[level]\\ 
-A s     & (l) List {\bf subscribed} groups with unread articles. [level]\\
-A u     & (L) List all groups (including {\bf unsubscribed}). [If no prefix
-is given, level 7 is the default]\\ 
-A z     & List the {\bf zombie} groups.\\
-A M     & List groups that {\bf match} a regexp.\\
-\end{keys}
-}
-
-\subsec{Create/Edit Foreign Groups}
-{\samepage
-The select methods are indicated in parentheses.\\*
-\begin{keys}{G m}
-G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
-G d     & Make a {\bf directory} group (every file must be a posting and files
-must have numeric names). (nndir)\\
-G e     & (M-e) {\bf Edit} this group's select method.\\
-G f     & Make a group based on a {\bf file}. (nndoc)\\
-G h     & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
-G k     & Make a {\bf kiboze} group. (nnkiboze)\\
-G m     & {\bf Make} a new group.\\
-G p     & Edit this group's {\bf parameters}.\\
-G v     & Add this group to a {\bf virtual} group. [p/p]\\
-G D     & Enter a {\bf directory} as a (temporary) group. (nneething without
-recording articles read.)\\
-G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
-G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
-\end{keys}
-You can also create mail-groups and read your mail with Gnus (very useful
-if you are subscribed to any mailing lists), using one of the methods
-nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
-(C-c C-i g Reading Mail RET).
-}
-
-%\subsubsec{Soup Commands}
-%\begin{keys}{G s w}
-%G s b   & gnus-group-brew-soup: not documented.\\
-%G s p   & gnus-soup-pack-packet: not documented.\\
-%G s r   & nnsoup-pack-replies: not documented.\\
-%G s s   & gnus-soup-send-replies: not documented.\\
-%G s w   & gnus-soup-save-areas: not documented.\\
-%\end{keys}
-
-\subsec{Mark Groups}
-\begin{keys}{M m}
-M m     & (\#) Set the process {\bf mark} on this group. [scope]\\
-M u     & (M-\#) Remove the process mark from this group ({\bf unmark}).
-[scope]\\ 
-M w     & Mark all groups in the current region.\\
-\end{keys}
-
-\subsec{Unsubscribe, Kill and Yank Groups}
-\begin{keys}{S w}
-S k     & (C-k) {\bf Kill} this group.\\
-S l     & Set the {\bf level} of this group. [p/p]\\
-S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
-S t     & (u) {\bf Toggle} subscription to this group. [p/p]\\
-S w     & (C-w) Kill all groups in the region.\\
-S y     & (C-y) {\bf Yank} the last killed group.\\
-S z     & Kill all {\bf zombie} groups.\\
-\end{keys}
-}
-
-\def\SummaryMode{
-\sec{Summary Mode}  %{Summary and Article Modes}
-\begin{keys}{SPC}
-SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
-next one.\\ 
-DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
-RET     & Scroll this article one line forward. [distance]\\
-=       & Expand the Summary window. [Prefix: shrink it to display the
-Article window]\\
-$<$     & (A $<$, A b) Scroll to the beginning of this article.\\
-$>$     & (A $>$, A e) Scroll to the end of this article.\\
-\&      & Execute a command on all articles matching a regexp.
-[Prefix: move backwards.]\\
-j       & (G g) Ask for an article number and then {\bf jump} to that summary
-line.\\ 
-C-t     & Toggle {\bf truncation} of summary lines.\\
-M-\&    & Execute a command on all articles having the process mark.\\
-M-k     & Edit this group's {\bf kill} file.\\
-M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
-[distance]\\ 
-M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article. 
-[distance]\\ 
-M-r     & Search through all previous articles for a regexp.\\
-M-s     & {\bf Search} through all subsequent articles for a regexp.\\
-M-K     & Edit the general {\bf kill} file.\\
-\end{keys}
-}
-
-\def\SortSummary{
-\subsec{Sort the Summary Buffer}
-\begin{keys}{C-c C-s C-a}
-C-c C-s C-a & Sort the summary by {\bf author}.\\
-C-c C-s C-d & Sort the summary by {\bf date}.\\
-C-c C-s C-i & Sort the summary by article score.\\
-C-c C-s C-n & Sort the summary by article {\bf number}.\\
-C-c C-s C-s & Sort the summary by {\bf subject}.\\
-\end{keys}
-}
-
-\def\Asubmap{
-\subsec{Article Buffer Commands}
-\begin{keys}{A m}
-A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: just show the
-article.]\\ 
-A r     & (^, A ^) Go to the parent of this article (the {\bf References}
-header).\\ 
-M-^     & Fetch the article with a given Message-ID.\\
-A s     & (s) Perform an i{\bf search} in the article buffer.\\
-A D     & (C-d) Un{\bf digestify} this article into a separate group.\\
-\end{keys}
-}
-
-\def\Bsubmap{
-\subsec{Mail-Group Commands}
-{\samepage
-These commands (except `B c') are only valid in a mail group.\\*
-\begin{keys}{B M-C-e}
-B DEL   & {\bf Delete} the mail article from disk (!). [p/p]\\
-B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
-B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
-B i     & {\bf Import} a random file into this group.\\
-B m     & {\bf Move} the article from one mail group to another. [p/p]\\
-B q     & {\bf Query} where will the article go during fancy splitting\\
-B r     & {\bf Respool} this mail article. [p/p]\\
-B w     & (e) Edit this article.\\
-B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
-(!). [p/p]\\ 
-\end{keys}
-}}
-
-\def\Gsubmap{
-\subsec{Select Articles}
-{\samepage
-These commands select the target article. They do not understand the prefix.\\*
-\begin{keys}{G C-n}
-G b     & (,) Go to the {\bf best} article (the one with highest score).\\
-G f     & (.) Go to the {\bf first} unread article.\\
-G l     & (l) Go to the {\bf last} article read.\\
-G n     & (n) Go to the {\bf next} unread article.\\
-p       & Go to the {\bf previous} unread article.\\
-G p     & {\bf Pop} an article off the summary history and go to it.\\
-G N     & (N) Go to {\bf the} next article.\\
-G P     & (P) Go to the {\bf previous} article.\\
-G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
-G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
-\end{keys}
-}}
-
-\def\Hsubmap{
-\subsec{Help Commands}
-\begin{keys}{H d}
-H d     & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the description
-from the server.]\\
-H f     & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\
-H h     & Give a very short {\bf help} message.\\
-H i     & (C-c C-i) Go to the Gnus online {\bf info}.\\
-H v     & Display the Gnus {\bf version} number.\\
-\end{keys}
-}
-
-\def\Msubmap{
-\subsec{Mark Articles}
-\begin{keys}{M M-C-r}
-d       & (M d, M r) Mark this article as read and move to the next one.
-[scope]\\ 
-D       & Mark this article as read and move to the previous one. [scope]\\
-u       & (!, M !, M t) Tick this article (mark it as interesting) and move
-to the next one. [scope]\\
-U       & Tick this article and move to the previous one. [scope]\\ 
-M-u     & (M SPC, M c) Clear all marks from this article and move to the next
-one. [scope]\\ 
-M-U     & Clear all marks from this article and move to the previous one.
-[scope]\\ 
-M ?     & (?) Mark this article as dormant (only followups are
-interesting). [scope]\\ 
-M b     & Set a {\bf bookmark} in this article.\\
-M e     & (E, M x) Mark this article as {\bf expirable}. [scope]\\
-M k     & (k) {\bf Kill} all articles with the same subject then select the
-next one.\\ 
-M B     & Remove the {\bf bookmark} from this article.\\
-M C     & {\bf Catch-up} the articles that are not ticked.\\
-M D     & Show all {\bf dormant} articles (normally they are hidden unless they
-have any followups).\\
-M H     & Catch-up (mark read) this group to point ({\bf here}).\\
-M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
-C-w     & Mark all articles between point and mark as read.\\
-M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
-M C-c   & {\bf Catch-up} all articles in this group.\\
-M M-r   & (x) Expunge all {\bf read} articles from this group.\\
-M M-D   & Hide all {\bf dormant} articles.\\
-M M-C-r & Expunge all articles having a given mark.\\
-\end{keys}
-
-\subsubsec{Mark Based on Score}
-\begin{keys}{M s m}
-M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
-M V k   & {\bf Kill} all low-scored articles. [score]\\
-M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
-M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
-\end{keys}
-
-\subsubsec{The Process Mark}
-{\samepage 
-These commands set and remove the process mark \#. You only need to use
-it if the set of articles you want to operate on is non-contiguous. Else
-use a numeric prefix.\\*
-\begin{keys}{M P R}
-M P a   & Mark {\bf all} articles (in series order).\\
-M P p   & (\#, M \#) Mark this article.\\
-M P r   & Mark all articles in the {\bf region}.\\
-M P s   & Mark all articles in the current {\bf series}.\\
-M P t   & Mark all articles in this (sub){\bf thread}.\\
-M P u   & (M-\#, M M-\#) {\bf Unmark} this article.\\
-M P R   & Mark all articles matching a {\bf regexp}.\\
-M P S   & Mark all {\bf series} that already contain a marked article.\\
-M P U   & {\bf Unmark} all articles.\\
-\end{keys}
-}}
-
-\def\Osubmap{
-\subsec{Output Articles}
-\begin{keys}{O m}
-O f     & Save this article in plain {\bf file} format. [p/p]\\
-O h     & Save this article in {\bf mh} folder format. [p/p]\\
-O m     & Save this article in {\bf mail} format. [p/p]\\
-O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
-O p     & ($\mid$) Pipe this article to a shell command. [p/p]\\
-O r     & Save this article in {\bf rmail} format. [p/p]\\
-O v     & Save this article in {\bf vm} format. [p/p]\\
-\end{keys}
-}
-
-\def\Ssubmap{
-\subsec{Post, Followup, Reply, Forward, Cancel}
-{\samepage
-These commands put you in a separate post or mail buffer. After
-editing the article, send it by pressing C-c C-c.  If you are in a
-foreign group and want to post the article using the foreign server, give
-a prefix to C-c C-c.\\* 
-\begin{keys}{S O m}
-S b     & {\bf Both} post a followup to this article, and send a reply.\\
-S c     & (C) {\bf Cancel} this article (only works if it is your own).\\
-S f     & (f) Post a {\bf followup} to this article.\\
-S m     & (m) Send {\bf a} mail to some other person.\\
-S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.\\
-S o p   & Forward this article as a {\bf post} to a newsgroup.\\
-S p     & (a) {\bf Post} an article to this group.\\
-S r     & (r) Mail a {\bf reply} to the author of this article.\\
-S s     & {\bf Supersede} this article with a new one (only for own
-articles).\\ 
-S u     & {\bf Uuencode} a file and post it as a series.\\
-S B     & {\bf Both} post a followup, send a reply, and include the
-original. [p/p]\\ 
-S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
-S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
-S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
-[p/p]\\ 
-S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
-\end{keys}
-If you want to cancel or supersede an article you just posted (before it
-has appeared on the server), go to the *post-news* buffer, change
-`Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
-}}
-
-\def\Tsubmap{
-\subsec{Thread Commands}
-\begin{keys}{T \#}
-T \#    & Mark this thread with the process mark.\\
-T d     & Move to the next article in this thread ({\bf down}). [distance]\\
-T h     & {\bf Hide} this (sub)thread.\\
-T i     & {\bf Increase} the score of this thread.\\
-T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
-tick it, positive prefix: unmark it.]\\
-T l     & (M-C-l) {\bf Lower} the score of this thread.\\
-T n     & (M-C-f) Go to the {\bf next} thread. [distance]\\
-T p     & (M-C-b) Go to the {\bf previous} thread. [distance]\\
-T s     & {\bf Show} the thread hidden under this article.\\
-T u     & Move to the previous article in this thread ({\bf up}). [distance]\\
-T H     & {\bf Hide} all threads.\\
-T S     & {\bf Show} all hidden threads.\\
-T T     & (M-C-t) {\bf Toggle} threading.\\
-\end{keys}
-}
-
-\def\Vsubmap{
-\subsec{Score (Value) Commands}
-{\samepage
-Read about Adaptive Scoring in the online info.\\*
-\begin{keys}{\bf A p m l}
-V a     & {\bf Add} a new score entry, specifying all elements.\\
-V c     & Specify a new score file as {\bf current}.\\
-V e     & {\bf Edit} the current score alist.\\
-V f     & Edit a score {\bf file} and make it the current one.\\
-V m     & {\bf Mark} all articles below a given score as read.\\
-V s     & Set the {\bf score} of this article.\\
-V t     & Display all score rules applied to this article ({\bf track}).\\
-V x     & {\bf Expunge} all low-scored articles. [score]\\
-V C     & {\bf Customize} the current score file through a user-friendly
-interface.\\ 
-V S     & Display the {\bf score} of this article.\\
-\bf A p m l& Make a scoring entry based on this article.\\
-\end{keys}
-
-The four letters stand for:\\*
-\quad \B{A}ction: I)ncrease, L)ower;\\*
-\quad \B{p}art: a)utor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
-message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
-\quad \B{m}atch type:\\*
-\qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
-\qquad date: b)efore, a)t, n)this,\\*
-\qquad number: $<$, =, $>$;\\*
-\quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
-
-If you type the second letter in uppercase, the remaining two are assumed
-to be s)ubstring and t)emporary. 
-If you type the third letter in uppercase, the last one is assumed to be 
-t)emporary.
-
-\quad Extra keys for manual editing of a score file:\\*
-\begin{keys}{C-c C-c}
-C-c C-c & Finish editing the score file.\\
-C-c C-d & Insert the current {\bf date} as number of days.\\
-\end{keys}
-}}
-
-\def\Wsubmap{
-\subsec{Wash the Article Buffer}
-\begin{keys}{W C-c}
-W b     & Make Message-IDs and URLs in the article to mouse-clickable {\bf
-  buttons}.\\  
-W c     & Remove extra {\bf CRs} (^M) from the article.\\
-W f     & Look for and display any X-{\bf Face} headers.\\
-W l     & (w) Remove page breaks ({\bf^L}) from the article.\\
-W m     & Toggle {\bf MIME} processing.\\
-W o     & Treat {\bf overstrike} or underline (^H\_) in the article.\\
-W q     & Treat {\bf quoted}-printable in the article.\\
-W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
-W t     & (t) {\bf Toggle} the displaying of all headers.\\
-v       & Toggle permanent {\bf verbose} displaying of all headers.\\
-W w     & Do word {\bf wrap} in the article.\\
-W T e   & Convert the article timestamp to time {\bf elapsed} since sent.\\
-W T l   & Convert the article timestamp to the {\bf local} timezone.\\
-W T u   & (W T z) Convert the article timestamp to {\bf UTC} ({\bf Zulu},
-GMT).\\ 
-\end{keys}
-
-\subsubsec{Hide/Highlight Parts of the Article}
-\begin{keys}{W W C-c}
-W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
-W W c   & Hide article {\bf citation}.\\
-W W h   & Hide article {\bf headers}.\\
-W W s   & Hide article {\bf signature}.\\
-W W C-c & Hide article {\bf citation} using a more intelligent algorithm.\\
-%\end{keys}
-%
-%\subsubsec{Highlight Parts of the Article}
-%\begin{keys}{W H A}
-W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
-W H c   & Highlight article {\bf citation}.\\
-W H h   & Highlight article {\bf headers}.\\
-W H s   & Highlight article {\bf signature}.\\
-\end{keys}
-}
-
-\def\Xsubmap{
-\subsec{Extract Series (Uudecode etc)}
-{\samepage
-Gnus recognizes if the current article is part of a series (multipart
-posting whose parts are identified by numbers in their subjects, e.g.{}
-1/10\dots10/10) and processes the series accordingly. You can mark and
-process more than one series at a time. If the posting contains any
-archives, they are expanded and gathered in a new group.\\*
-\begin{keys}{X p}
-X b     & Un-{\bf binhex} these series. [p/p]\\
-X o     & Simply {\bf output} these series (no decoding). [p/p]\\ 
-X p     & Unpack these {\bf postscript} series. [p/p]\\
-X s     & Un-{\bf shar} these series. [p/p]\\
-X u     & {\bf Uudecode} these series. [p/p]\\
-\end{keys}
-
-Each one of these commands has four variants:\\*
-\begin{keys}{X v \bf Z}
-X   \bf z & Decode these series. [p/p]\\
-X   \bf Z & Decode and save these series. [p/p]\\
-X v \bf z & Decode and view these series. [p/p]\\
-X v \bf Z & Decode, save and view these series. [p/p]\\
-\end{keys}
-where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
-
-An alternative binding for the most-often used of these commands is\\*
-\begin{keys}{C-c C-v C-v}
-C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
-\end{keys}
-}}
-
-\def\Zsubmap{
-\subsec{Exit the Current Group}
-\begin{keys}{Z G}
-Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
-Z n     & Mark all articles as read and go to the {\bf next} group.\\
-Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
-Z E     & (Q) {\bf Exit} without updating the group information.\\
-Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
-Z N     & Exit and go to {\bf the} next group.\\
-Z P     & Exit and go to the {\bf previous} group.\\
-Z R     & Exit this group, and then enter it again ({\bf reenter}).
-[Prefix: select all articles, read and unread.]\\
-Z Z     & (q, Z Q) Exit this group.\\
-\end{keys}
-}
-
-\def\ArticleMode{
-\sec{Article Mode}
-{\samepage
-% All keys for Summary mode also work in Article mode.
-The normal navigation keys work in Article mode.
-Some additional keys are:\\*
-\begin{keys}{C-c C-m}
-RET     & (middle mouse button) Activate the button at point to follow
-an URL or Message-ID.\\
-TAB     & Move the point to the next button.\\
-h       & (s) Go to the {\bf header} line of the article in the {\bf
-summary} buffer.\\ 
-C-c ^   & Get the article with the Message-ID near point.\\
-C-c C-m & {\bf Mail} reply to the address near point (prefix: include the
-original).\\ 
-\end{keys}
-}}
-
-\def\ServerMode{
-\sec{Server Mode}
-{\samepage
-To enter this mode, press `^' while in Group mode.\\*
-\begin{keys}{SPC}
-SPC     & (RET) Browse this server.\\
-a       & {\bf Add} a new server.\\
-c       & {\bf Copy} this server.\\
-e       & {\bf Edit} a server.\\
-k       & {\bf Kill} this server. [scope]\\
-l       & {\bf List} all servers.\\
-q       & Return to the group buffer ({\bf quit}).\\
-y       & {\bf Yank} the previously killed server.\\
-\end{keys}
-}}
-
-\def\BrowseServer{
-\sec{Browse Server Mode}
-{\samepage
-To enter this mode, press `B' while in Group mode.\\*
-\begin{keys}{RET}
-RET     & Enter the current group.\\
-SPC     & Enter the current group and display the first article.\\
-?       & Give a very short help message.\\
-n       & Go to the {\bf next} group. [distance]\\
-p       & Go to the {\bf previous} group. [distance]\\
-q       & (l) {\bf Quit} browse mode.\\
-u       & Subscribe to the current group. [scope]\\
-\end{keys}
-}}
+
+                                % uncomment the first definition if you do not want pagebreaks in maps
+                                %\newcommand{\esamepage}{\samepage}
+\newcommand{\esamepage}{}
+
+\newcommand*{\B}[1]{{\bf#1})}    % bold l)etter
+
+\newcommand{\Title}{%
+  \begin{center}
+    {\bf\LARGE Gnus \progver\ Reference \Guide\\}
+                                %{\normalsize \Guide\ version \refver}
+  \end{center}
+  }
+
+\newcommand*{\Logo}[1]{\centerline{%
+    \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
+      {\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}}
+
+\newcommand{\Copyright}{%
+  \begin{center}
+    Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
+    Copyright \copyright\ 1995 \author.\\*
+    Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
+    Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
+    Ingebrigtsen.\\*
+    and the Emacs Help Bindings feature (C-h b).\\*
+    Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
+  \end{center}
+
+  Permission is granted to make and distribute copies of this reference
+  \guide{} provided the copyright notice and this permission are preserved on
+  all copies.  Please send corrections, additions and suggestions to the
+  current maintainer's email address. \Guide{} last edited on \date.
+  }
+
+\newcommand{\Notes}{%
+  \subsection*{Notes}
+  {\esamepage
+    Gnus is complex. Currently it has some 346 interactive (user-callable)
+    functions. Of these 279 are in the two major modes (Group and
+    Summary/Article). Many of these functions have more than one binding, some
+    have 3 or even 4 bindings. The total number of keybindings is 389. So in
+    order to save 40\% space, every function is listed only once on this
+    \guide, under the ``more logical'' binding. Alternative bindings are given
+    in parentheses in the beginning of the description.
+
+    Many Gnus commands are affected by the numeric prefix. Normally you enter a
+    prefix by holding the Meta key and typing a number, but in most Gnus modes
+    you don't need to use Meta since the digits are not self-inserting. The
+    prefixed behavior of commands is given in [brackets]. Often the prefix is
+    used to specify:
+
+    \quad [distance] How many objects to move the point over.
+
+    \quad [scope] How many objects to operate on (including the current one).
+
+    \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
+    determines how many objects to operate on. Else if there are some objects
+    marked with the process mark \#, these are operated on. Else only the
+    current object is affected.
+
+    \quad [level] A group subscribedness level. Only groups with a lower or
+    equal level will be affected by the operation. If no prefix is given,
+    `gnus-group-default-list-level' is used.  If
+    `gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
+    commands will also set the default level.
+
+    \quad [score] An article score. If no prefix is given,
+    `gnus-summary-default-score' is used. \\*[\baselineskip]
+                                % some keys
+    \begin{keys}{C-c C-i}
+      M-x gnus           & start Gnus. \\
+      M-x gnus-no-server & start Gnus without trying to connect to server
+      (i.e. to read mail). \\
+      M-x gnus-unplugged & start Gnus in \texttt{unplugged}-mode
+      (first see the manual, C-c C-i g Gnus Unplugged RET).\\
+                                %
+      C-c C-i & Go to the Gnus online {\bf info}.\\
+      C-c C-b & Send a Gnus {\bf bug} report.\\
+    \end{keys}
+    }}
+
+\newcommand{\GroupLevels}{%
+  The table below assumes that you use the default Gnus levels.
+  Fill your user-specific levels in the blank cells.\\[1\baselineskip]
+  \begin{tabular}{|c|l|l|}
+    \hline
+    Level & Groups & Status \\
+    \hline
+    1 & draft/mail groups   &              \\
+    2 & mail groups         &              \\
+    3 &                     & subscribed   \\
+    4 &                     &              \\
+    5 & default list level  &              \\
+    \hline
+    6 &                     & unsubscribed \\
+    7 &                     &              \\
+    \hline
+    8 &                     & zombies      \\
+    \hline
+    9 &                     & killed       \\
+    \hline
+  \end{tabular}}
+
+\newcommand{\MarkCharacters}{%
+  {\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
+    \newlength{\markcolwidth}
+    \settowidth{\markcolwidth}{` '}% widest character
+    \addtolength{\markcolwidth}{4\tabcolsep}
+    \addtolength{\markcolwidth}{-\columnwidth}
+    \newlength{\markdblcolwidth}
+    \setlength{\markdblcolwidth}{\columnwidth}
+    \addtolength{\markdblcolwidth}{-2\tabcolsep}
+    \begin{tabular}{|c|p{-\markcolwidth}|}
+      \hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
+        All these marks appear in the first column of the summary line, and so
+        are mutually exclusive.}\\ 
+      \hline
+      ` ' & (M-u, M SPC, M c) Not read.\\
+      !   & (!, M !, M t) Ticked (interesting).\\
+      ?   & (?, M ?) Dormant (only followups are interesting).\\
+      E   & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
+      G   & (C, B DEL) Canceled article (or deleted in mailgroups).\\
+      \hline\hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}
+      {The marks below mean that the article
+        is read (killed, uninteresting), and have more or less the same effect.
+        Some commands however explicitly differentiate between them (e.g.\ M
+        M-C-r, adaptive scoring).}\\
+      \hline
+      r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
+      C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
+      F   & SOUPed article. See the manual.\\
+      O   & {\bf Old} (read in a previous session).\\
+      K   & (k, M k; C-k, M K) {\bf Killed}.\\
+      M   & Article marked as read by duplicate suppression.\\
+      Q   & Article is part of a sparse thread (see ``Threading''
+      in the manual).\\
+      R   & {\bf Read} (viewed in actuality).\\
+      X   & Killed by a kill file.\\
+      Y   & Killed due to low score.\\
+      \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}
+      {{\bf Marks not affecting visibility}}\\
+      \hline
+      \#  & (\#, M \#, M P p) Processable (will be affected by the next operation).
+      [2]\\
+      A   & {\bf Answered} (followed-up or replied). [2]\\
+      *   & Cached. [2]\\
+      S   & Saved. [2]\\
+      +   & Over default score. [3]\\
+      $-$ & Under default score. [3]\\
+      $=$ & Has children (thread underneath it). Add `\%e' to
+      `gnus-summary-line-format'. [3]\\
+      \hline
+    \end{tabular}
+    }}
+
+\newcommand{\GroupModeGeneral}{%
+  \begin{keys}{C-c M-C-x}
+    RET     & (=) Enter this group. [Prefix: how many (read) articles to fetch.
+    Positive: newest articles, negative: oldest ones; non-numerical:
+    view all articles, not just unread]\\
+    M-RET   & Enter group quickly.\\
+    M-SPC   & Same as RET but does not expunge and hide dormants.\\
+    M-C-RET & Enter group without any processing, changes will not be permanent.\\
+    SPC     & Select this group and display the first (unread) article. [Same
+    prefix as above.]\\
+    ?       & Give a very short help message.\\
+    $<$     & Go to the beginning of the Group buffer.\\
+    $>$     & Go to the end of the Group buffer.\\
+    ,       & Jump to the lowest-level group with unread articles.\\
+    .       & Jump to the first group with unread articles.\\
+    xx & Enter the Server buffer mode.\\
+    a       & Post an {\bf article} to a group.\\
+    b       & Find {\bf bogus} groups and delete them.\\
+    c       & Mark all unticked articles in this group as read ({\bf catch-up}).
+    [p/p]\\ 
+    g       & Check the server for new articles ({\bf get}). [level]\\
+    M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
+    j       & {\bf Jump} to a group.\\
+    m       & {\bf Mail} a message to someone.\\
+    n       & Go to the {\bf next} group with unread articles. [distance]\\
+    M-n     & Go to the {\bf next} group on the same or lower level.
+    [distance]\\ 
+    p       & (DEL) Go to the {\bf previous} group with unread articles.
+    [distance]\\ 
+    M-p     & Go to the {\bf previous} group on the same or lower level. [distance]\\ 
+    q       & {\bf Quit} Gnus.\\
+    r       & Re-read the init file ({\bf reset}).\\
+    s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
+    `gnus-save-newsrc-file').\\ 
+    z       & Suspend (kill all buffers of) Gnus.\\
+    B       & {\bf Browse} a foreign server.\\
+    C       & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
+    F       & {\bf Find} new groups and process them.\\
+    N       & Go to the {\bf next} group. [distance]\\
+    P       & Go to the {\bf previous} group. [distance]\\
+    Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
+    R       & {\bf Restart} Gnus.\\
+    Z       & Clear the dribble buffer.\\
+    M-c     & Clear data from group (marks and list of read articles). \\
+    C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
+    (depending on `gnus-group-sort-function').\\
+    C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
+    process.\\
+    C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
+    C-c M-g & Activate all {\bf groups}.\\
+    C-c C-i & Gnus online-manual ({\bf info}).\\
+    C-x C-t & {\bf Transpose} two groups.\\
+    H f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
+    H v     & (V) Display the Gnus {\bf version} number.\\
+    H d     & (C-c C-d) Show the {\bf description} of this group
+    [Prefix: re-read from server].\\ 
+    M-d     & {\bf Describe} all groups. [Prefix: re-read from server]\\
+  \end{keys}
+  }
+
+\newcommand{\ListGroups}{%
+  {\esamepage
+    \begin{keys}{A M}
+      A d     & List all groups whose names or {\bf descriptions} match a regexp.\\ 
+      A k     & (C-c C-l) List all {\bf killed} groups.
+      [Prefix: look at active-file from server]\\
+      A l     & List all groups on a specific level.
+      [Prefix: also list groups with no unread articles]\\
+      A d     & List all groups that have names or {\bf descriptions} matching
+      a regexp.\\
+      A a     & (C-c C-a) List all groups whose names match a regexp
+      ({\bf apropos}).\\ 
+      A A     & List the server's active-file.\\
+      A M     & List groups that {\bf match} a regexp.\\
+      A m     & List groups that {\bf match} a regexp and have unread articles. 
+      [level]\\ 
+      A s     & (l) List all {\bf subscribed} groups with unread articles.
+      [level; 5 and lower is the default]\\
+      A u     & (L) List all groups (including read and {\bf unsubscribed}).
+      [level; 7 and lower is the default]\\
+      A z     & List all {\bf zombie} groups.\\
+    \end{keys}
+    }
+
+  \newcommand{\CreateEditGroups}{%
+    {\esamepage
+      The select methods are indicated in parentheses.\\*
+      \begin{keys}{G DEL}
+        G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
+        G c     & {\bf Customize} this group's parameters.\\
+        G d     & Make a {\bf directory} group (every file must be a posting and files
+        must have numeric names). (nndir)\\
+        G D     & Enter a {\bf directory} as a (temporary) group.
+        (nneething without recording articles read)\\
+        G e     & (M-e) {\bf Edit} this group's select method.\\
+        G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
+        G f     & Make a group based on a {\bf file}. (nndoc)\\
+        G h     & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
+        G k     & Make a {\bf kiboze} group. (nnkiboze)\\
+        G m     & {\bf Make} a new group.\\
+        G p     & Edit this group's {\bf parameters}.\\
+        G r     & Rename this group (does not work with read-only groups!).\\
+        G u     & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
+        G v     & Add this group to a {\bf virtual} group. [p/p]\\
+        G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
+        G w     & Create ephemeral group based on web-search. [Prefix: make solid group
+        instead]\\
+        G DEL   & {\bf Delete} group [Prefix: delete all articles as well].\\
+      \end{keys}
+      You can also create mail-groups and read your mail with Gnus (very useful
+      if you are subscribed to mailing lists), using one of the methods
+      nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
+      (C-c C-i g Reading Mail RET).
+      }}
+
+                                % TODO:
+  \newcommand{\SoupCommands}{%
+    \begin{keys}{G s w}
+      G s b   & gnus-group-brew-soup: not documented.\\
+      G s p   & gnus-soup-pack-packet: not documented.\\
+      G s r   & nnsoup-pack-replies: not documented.\\
+      G s s   & gnus-soup-send-replies: not documented.\\
+      G s w   & gnus-soup-save-areas: not documented.\\
+    \end{keys}}
+
+  \newcommand{\MarkGroups}{%
+    \begin{keys}{M m}
+      M m     & (\#) Set the process {\bf mark} on this group. [scope]\\
+      M r     & Mark all groups matching regular expression.\\
+      M u     & (M-\#) Remove the process mark from this group ({\bf unmark}).
+      [scope]\\ 
+      M U     & Remove the process mark from all groups (\textbf{umark all}).\\
+      M w     & Mark all groups in the current region.\\
+    \end{keys}}
+
+  \newcommand{\GroupTopicsGeneral}{%
+    {\esamepage
+      Topics are ``categories'' for groups. Press t in the group-buffer to
+      toggle gnus-topic-mode (C-c C-i g Group Topics RET).
+      \begin{keys}{C-c C-x}
+        T n     & Prompt for topic {\bf name} and create it.\\
+        T m     & {\bf Move} the current group to some other topic [p/p].\\
+        T j     & {\bf Jump} to a topic.\\
+        T c     & {\bf Copy} the current group to some other topic [p/p].\\
+        T D     & Remove (not delete) the current group [p/p].\\
+        T M     & {\bf Move} all groups matching a regexp to a topic.\\
+        T C     & {\bf Copy} all groups matching a regexp to a topic.\\
+        T H     & Toggle {\bf hiding} of empty topics.\\
+        T r     & {\bf Rename} a topic.\\
+        T DEL   & Delete an empty topic.\\
+        T \#    & Mark all groups in the current topic with the process-mark.\\
+        T M-\#  & Remove the process-mark from all groups in the current topic.\\
+        T TAB   & (TAB) Indent current topic [Prefix: unindent].\\ 
+        M-TAB   & Unindent the current topic.\\
+        RET     & (SPC) Either unfold topic or enter group [level].\\
+        C-c C-x & Expire all articles in current group or topic.\\
+        C-k     & {\bf Kill} a group or topic.\\
+        C-y     & {\bf Yank} a group or topic.\\
+        A T     & List active-file using {\bf topics}.\\
+        G p     & Edit topic-{\bf parameters}.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\TopicSorting}{%
+    {\esamepage
+      \begin{keys}{T S m}
+        T S a  & Sort {\bf alphabetically}.\\
+        T S u  & Sort by number of {\bf unread} articles.\\
+        T S l  & Sort by group {\bf level}.\\
+        T S v  & Sort by group score ({\bf value}).\\
+        T S r  & Sort by group {\bf rank}.\\
+        T S m  & Sort by {\bf method}.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SubscribeKillYankGroups}{%
+    {\esamepage
+      \begin{keys}{S C-k}
+        S k     & (C-k) {\bf Kill} this group.\\
+        S l     & Set the {\bf level} of this group. [p/p]\\
+        S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
+        S t     & (u) {\bf Toggle} subscription to this group. [p/p]\\
+        S w     & (C-w) Kill all groups in the region.\\
+        S y     & (C-y) {\bf Yank} the last killed group.\\
+        S z     & Kill all {\bf zombie} groups.\\
+        S C-k   & Kill all groups on a certain level.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SummaryModeGeneral}{%
+    {\esamepage
+      \begin{keys}{M-RET}
+        SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
+        next one.\\ 
+        DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
+        RET     & Scroll this article one line forward. [distance]\\
+        M-RET   & Scroll this article one line backward. [distance]\\
+        =       & Expand the Summary window (fullsize).
+        [Prefix: shrink to display article window]\\
+                                %
+        \&      & Execute a command on all articles whose header matches a regexp.
+        [Prefix: move backwards]\\
+        M-\&    & Execute a command on all articles having the process mark.\\
+                                %
+        M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
+        [distance]\\ 
+        M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article. 
+        [distance]\\ 
+        M-s     & {\bf Search} through all subsequent articles for a regexp.\\
+        M-r     & Search through all previous articles for a regexp.\\
+                                %
+        A P     & {\bf Postscript}-print current buffer.\\
+                                %
+        M-k     & Edit this group's {\bf kill} file.\\
+        M-K     & Edit the general {\bf kill} file.\\
+                                %
+        C-t     & Toggle {\bf truncation} of summary lines.\\
+        Y g     & Regenerate the summary-buffer.\\
+        Y c     & Insert all cached articles into the summary-buffer.\\
+                                %
+        M-C-e   & {\bf Edit} the group-parameters.\\
+        M-C-g   & Customize the group-parameters.\\
+                                %
+                                % article handling
+                                %
+        A $<$   & ($<$, A b) Scroll to the beginning of this article.\\
+        A $>$   & ($>$, A e) Scroll to the end of this article.\\
+        A s     & (s) Perform an i{\bf search} in the article buffer.\\
+                                %
+        A D     & (C-d) Un{\bf digestify} this article into a separate group.
+        [Prefix: force digest]\\
+        M-C-d   & Like C-d, but open several documents in nndoc-groups, wrapped
+        in an nnvirtual group [p/p]\\
+                                %
+        A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ 
+        A r     & (\^{}, A \^{}) Fetch the parent(s) of this article.
+        [Prefix: if positive fetch \textit{n} ancestors;
+        negative: fetch only the \textit{n}th ancestor]\\
+        A t     & {\bf Translate} this article.\\
+        A R     & Fetch all articles mentioned in the {\bf References}-header.\\
+        A T     & Fetch full \textbf{thread} in which the current article appears.\\
+        M-\^{}   & Fetch the article with a given Message-ID.\\
+        S y     & {\bf Yank} the current article into an existing message-buffer.
+        [p/p]\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\MIMESummary}{%
+    {\esamepage
+      For the commands operating on one MIME part (a subset of gnus-article-*), a
+      prefix selects which part to operate on. If the point is placed over a
+      MIME button in the article buffer, use the corresponding bindings for the
+      article buffer instead.
+      \begin{keys}{W M w}
+        K v      & (b) {\bf View} the MIME-part.\\
+        K o      & {\bf Save} the MIME part.\\
+        K c      & {\bf Copy} the MIME part.\\
+        K e      & View the MIME part {\bf externally}.\\
+        K i      & View the MIME part {\bf internally}.\\
+        K $\mid$ & Pipe the MIME part to an external command.\\
+        K b      & Make all the MIME parts have buttons in front of them.\\
+        K m      & Try to repair {\bf multipart-headers}.\\
+        X m      & Save all parts matching a MIME type to a directory. [p/p]\\
+        M-t      & Toggle the buttonized display of the article buffer.\\
+        W M w    & Decode RFC2047-encoded words in the article headers.\\
+        W M c    & Decode encoded article bodies. [Prefix: prompt for charset]\\
+        W M v    & View all MIME parts in the current article.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SortSummary}{%
+    {\esamepage
+      \begin{keys}{C-c C-s C-a}
+        C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
+        C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
+        C-c C-s C-i & Sort the summary-buffer by article score.\\
+        C-c C-s C-l & Sort the summary-buffer by amount of lines.\\
+        C-c C-s C-c & Sort the summary-buffer by length.\\
+        C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
+        C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\MailGroups}{% formerly \Bsubmap
+    {\esamepage
+      These commands (except `B c') are only valid in a mail group.\\*
+      \begin{keys}{B M-C-e}
+        B DEL   & (B backspace, B delete) {\bf Delete} the mail article from disk (!).
+        [p/p]\\
+        B B     & Crosspost this article to another group.\\
+        B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
+        B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
+        B i     & {\bf Import} a random file into this group.\\
+        B m     & {\bf Move} the article from one mail group to another. [p/p]\\
+        B p     & Query whether the article was posted as well.\\
+        B q     & {\bf Query} where the article will end up after fancy splitting\\
+        B r     & {\bf Respool} this mail article. [p/p]\\
+        B t     & {\bf Trace} the fancy splitting patterns applied to this article.\\
+        B w     & (e) Edit this article.\\
+        B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
+        (!). [p/p]\\ 
+      \end{keys}
+      }
+    }
+
+  \newcommand{\DraftGroup}{% formerly \Dsubmap
+    {\esamepage
+      The ``drafts''-group contains messages that have been saved but not sent
+      and rejected articles. \\*
+      \begin{keys}{B DEL}
+        D e      & \textbf{edit} message.\\
+        D s      & \textbf{Send} message. [p/p]\\
+        D S      & \textbf{Send} all messages.\\
+        D t      & \textbf{Toggle} sending (mark as unsendable).\\
+        B DEL    & \textbf{Delete} message (like in mailgroup).\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SelectArticles}{% formerly \Gsubmap
+    {\esamepage
+      These commands select the target article. They do not understand the prefix.\\*
+      \begin{keys}{G C-n}
+        h       & Enter article-buffer.\\
+        G b     & (,) Go to the {\bf best} article (the one with highest score).\\
+        G f     & (.) Go to the {\bf first} unread article.\\
+        G n     & (n) Go to the {\bf next} unread article.\\
+        G p     & (p) Go to the {\bf previous} unread article.\\
+                                %
+        G N     & (N) Go to {\bf the} next article.\\
+        G P     & (P) Go to the {\bf previous} article.\\
+                                %
+        G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
+        G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
+                                %
+        G l     & (l) Go to the previously read article ({\bf last-read-article}).\\
+        G o     & Pop an article off the summary history and go to it.\\
+                                %
+        G g     & Search an article via subject.\\
+        G j     & (j) Search an article via Message-Id or subject.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\ArticleModeGeneral}{%
+    {\esamepage
+      The normal navigation keys work in Article mode. Some additional keys are:\\*
+      \begin{keys}{C-c RET}
+        C-c \^{} & Get the article with the Message-ID near point.\\
+        C-c RET & Send reply to address near point.\\
+        h       & Go to the \textbf{header}-line of the article in the
+        summary-buffer.\\
+        s       & Go to \textbf{summary}-buffer.\\
+        RET     & (middle mouse button) Activate the button at point to follow
+        an URL or Message-ID.\\
+        TAB     & Move the point to the next button.\\
+        M-TAB   & Move point to previous button.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\WashArticle}{% formerly \Wsubmap
+    {\esamepage
+      \begin{keys}{W W H}
+        W b     & Make Message-IDs and URLs in the article mouse-clickable
+        {\bf buttons}.\\  
+        W l     & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
+        W c     & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\
+        W d     & Treat {\bf dumbquotes}.\\
+        W f     & Look for and display any X-{\bf Face} headers.\\
+        W m     & Toggle {\bf MIME} processing.\\
+        W o     & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
+        W q     & Treat {\bf quoted}-printable in the article.\\
+        W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
+        W t     & (t) {\bf Toggle} display of all headers.\\
+        W v     & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
+        W w     & Do word {\bf wrap} in the article.\\
+        W B     & Add clickable {\bf buttons} to the article headers.\\
+        W C     & {\bf Capitalize} first word in each sentence.\\
+        W Q     & Fill long lines.\\
+                                %
+        W W H   & Strip certain {\bf headers} from body.\\
+                                %
+        W E l   & Strip blank {\bf lines} from the beginning of the article.\\
+        W E m   & Replace blank lines with empty lines and remove {\bf multiple}
+        blank lines.\\
+        W E t   & Remove {\bf trailing} blank lines.\\
+        W E a   & Strip blank lines at the beginning and the end
+        (W E l, W E m and W E t).\\
+        W E A   & Strip {\bf all} blank lines.\\
+        W E s   & Strip leading blank lines from the article body.\\
+        W E e   & Strip trailing blank lines from the article body.\\
+                                %
+        W T u   & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
+        W T i   & Display the article timestamp in {\bf ISO} 8601.\\
+        W T l   & Display the article timestamp in the {\bf local} timezone.\\
+        W T s   & Display according to `gnus-article-time-format'.\\
+        W T e   & Display the time {\bf elapsed} since it was sent.\\
+        W T o   & Display the {\bf original} timestamp.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\HideHighlightArticle}{%
+    {\esamepage
+      \begin{keys}{W W C-c}
+        W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
+        W W h   & Hide article {\bf headers}.\\
+        W W b   & Hide {\bf boring} headers.\\
+        W W s   & Hide {\bf signature}.\\
+        W W l   & Hide {\bf list} identifiers in subject-header.\\
+        W W p   & Hide {\bf PGP}-signatures.\\
+        W W P   & Hide {\bf PEM} (privacy enhanced messages).\\
+        W W B   & Hide banner specified by group parameter.\\
+        W W c   & Hide {\bf citation}.\\
+        W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
+        W W C   & Hide cited text in articles that aren't roots.\\
+                                %
+        W e     & {\bf Emphasize} article.\\
+                                %
+        W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
+        W H c   & Highlight article {\bf citations}.\\
+        W H h   & Highlight article {\bf headers}.\\
+        W H s   & Highlight article {\bf signature}.\\
+      \end{keys}
+      For all hiding-commands: A positive prefix always hides, and a negative
+      prefix will show what was previously hidden.
+      }}
+
+  \newcommand{\MIMEArticleMode}{%
+    {\esamepage
+      \begin{keys}{M-RET}
+        RET     & (BUTTON-2) Toggle display of the MIME object.\\
+        v       & (M-RET) Prompt for a method and then view object using this method.\\
+        o       & Prompt for a filename and save the MIME object.\\
+        c       & {\bf Copy} the MIME object to a new buffer and display this buffer.\\
+        t       & View the MIME object as a different {\bf type}.\\
+        $\mid$  & Pipe the MIME object to a process.\\
+      \end{keys}
+      }
+    }
+
+  %% end of article mode for reading ..........................................
+
+  \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
+    {\esamepage
+      \begin{keys}{M M-C-r}
+        d       & (M d, M r) Mark this article as read and move to the next one.
+        [scope]\\ 
+        D       & Mark this article as read and move to the previous one. [scope]\\
+        !       & (u, M !, M t) Tick this article (mark it as interesting) and move
+        to the next one. [scope]\\
+        U       & Tick this article and move to the previous one. [scope]\\ 
+        M ?     & (?) Mark this article as dormant (only followups are
+        interesting). [scope]\\ 
+        M D     & Show all {\bf dormant} articles (normally they are hidden unless they
+        have any followups).\\
+        M M-D   & Hide all {\bf dormant} articles.\\
+        C-w     & Mark all articles between point and mark as read.\\
+        M-u     & (M SPC, M c) Clear all marks from this article and move to the next
+        one. [scope]\\ 
+        M-U     & Clear all marks from this article and move to the previous one.
+        [scope]\\
+                                %
+        M e     & (E, M x) Mark this article as {\bf expirable}. [scope]\\
+                                %
+        M k     & (k) {\bf Kill} all articles with the same subject then select the
+        next unread one.\\ 
+        M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
+                                %
+        M C     & {\bf Catch-up} the articles that are not ticked and not dormant.\\
+        M C-c   & {\bf Catch-up} all articles in this group.\\
+        M H     & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\
+                                %
+        M b     & Set a {\bf bookmark} in this article.\\
+        M B     & Remove the {\bf bookmark} from this article.\\
+                                %
+        M M-r   & (x) Expunge all {\bf read} articles from this group.\\
+        M M-C-r & Expunge all articles having a given mark.\\
+        M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
+        M M C-h & Displays some more keys doing ticking slightly differently.\\
+      \end{keys}
+      The variable `gnus-summary-goto-unread' controls what happens after a mark
+      has been set (C-x C-i g Setting Marks RET)
+      }}
+
+  \newcommand{\MarkByScore}{%
+    \begin{keys}{M V m}
+      M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
+      M V k   & {\bf Kill} all low-scored articles. [score]\\
+      M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
+      M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ProcessMark}{%
+  {\esamepage 
+    These commands set and remove the process mark (\#). You only need to use
+    it if the set of articles you want to operate on is non-contiguous. Else
+    use a numeric prefix.\\*
+    \begin{keys}{M P R}
+      M P p   & (\#, M \#) Mark this article.\\
+      M P u   & (M-\#, M M-\#) \textbf{unmark} this article.\\
+      M P b   & Mark all articles in {\bf buffer}.\\
+      M P r   & Mark all articles in the {\bf region}.\\
+      M P R   & Mark all articles matching a {\bf regexp}.\\
+      M P t   & Mark all articles in this (sub){\bf thread}.\\
+      M P s   & Mark all articles in the current {\bf series}.\\
+      M P S   & Mark all {\bf series} that already contain a marked article.\\
+      M P a   & Mark {\bf all} articles (in series order).\\
+      M P U   & \textbf{unmark} all articles.\\
+                                %
+      M P i   & {\bf Invert} the list of process-marked articles.\\
+      M P k   & Push the current process-mark set onto stack and unmark
+      all articles.\\
+      M P y   & Pop process-mark set from stack and restore it.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\Limiting}{%
+  {\esamepage
+    \begin{keys}{/M}
+      //   & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
+      /a   & Limit the summary-buffer to articles matching {\bf author}.\\
+      /x   & Limit depending on ``extra'' headers.\\
+      /u   & (x) Limit to {\bf unread} articles.
+      [Prefix: also exclude ticked and dormant articles]\\
+      /m   & Limit to articles marked with specified {\bf mark}.\\
+      /t   & Ask for a number and exclude articles younger than that many days.
+      [Prefix: exclude older articles]\\
+      /n   & Limit to current article. [p/p]\\
+      /w   & Pop the previous limit off the stack and restore it.
+      [Prefix: pop all limits]\\
+      /v   & Limit to score. [score]\\
+      /E   & (M S) Include all expunged articles in the limit.\\
+      /D   & Include all dormant articles in the limit.\\
+      /*   & Include all cached articles in the limit.\\
+      /d   & Exclude all dormant articles from the limit.\\
+      /M   & Exclude all marked articles.\\
+      /T   & Include all articles from the current thread in the limit.\\
+      /c   & Exclude all dormant articles that have no children from the limit.\\
+      /C   & Mark all excluded unread articles as read.
+      [Prefix: also mark ticked and dormant articles]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\OutputArticles}{% formerly \Osubmap
+  {\esamepage
+    \begin{keys}{O m}
+      O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
+      O b     & Save this article's {\bf body} in plain file format [p/p]\\
+      O f     & Save this article in plain {\bf file} format. [p/p]\\
+      O F     & like O f, but overwrite file's contents. [p/p]\\
+      O h     & Save this article in {\bf mh} folder format. [p/p]\\
+      O m     & Save this article in {\bf mail} format. [p/p]\\
+      O r     & Save this article in {\bf rmail} format. [p/p]\\
+      O v     & Save this article in {\bf vm} format. [p/p]\\
+      O p     & ($\mid$) Pipe this article to a shell command. [p/p]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\PostReplyetc}{% formerly \Ssubmap
+  {\esamepage
+    These commands put you in a separate news or mail buffer. See the section
+    about composing messages for more information.
+                                %After
+                                %editing the article, send it by pressing C-c C-c.  If you are in a
+                                %foreign group and want to post the article using the foreign server, give
+                                %a prefix to C-c C-c.\\* 
+    \begin{keys}{S O m}
+      S p     & (a) {\bf Post} an article to this group.\\
+      S f     & (f) Post a {\bf followup} to this article.\\
+      S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
+      S o p   & Forward this article as a {\bf post} to a newsgroup.
+      [Prefix: include all headers]\\
+      S M-c   & Send a complaint about excessive crossposting to the author of this
+      article. [p/p]\\
+                                %
+      S m     & (m) Send {\bf a} mail to some other person.\\
+      S r     & (r) Mail a {\bf reply} to the author of this article.\\
+      S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
+      S w     & Mail a {\bf wide} reply to this article.\\
+      S W     & Mail a {\bf wide} reply to this article.\\
+      S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.
+      [Prefix: include all headers]\\
+      S D b   & Resend {\bf bounced} mail.\\
+      S D r   & {\bf Resend} mail to a different person.\\
+                                %
+      S n     & Post a followup via {\bf news} even if you got the message
+      through mail.\\
+      S N     & Post a followup via {\bf news} and include the original mail.
+      [p/p]\\
+                                %
+      S c     & (C) {\bf Cancel} this article (only works if it is your own).\\
+      S s     & {\bf Supersede} this article with a new one (only for own
+      articles).\\
+                                %
+      S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
+      S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
+      [p/p]\\ 
+                                %
+      S u     & {\bf Uuencode} a file and post it as a series.\\
+    \end{keys}
+    If you want to cancel or supersede an article you just posted (before it
+    has appeared on the server), go to the *post-news* buffer, change
+    `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
+    }}
+
+\newcommand{\Threading}{% formerly \Tsubmap
+  {\esamepage
+    \begin{keys}{T M-\#}
+      T \#    & Mark this thread with the process mark.\\
+      T M-\#  & Remove process-marks from this thread.\\
+                                %
+      T t     & Re-{\bf thread} the current article's thread.\\
+                                % movement
+      T n     & (M-C-f) Go to the {\bf next} thread. [distance]\\
+      T p     & (M-C-b) Go to the {\bf previous} thread. [distance]\\
+      T d     & {\bf Descend} this thread. [distance]\\
+      T u     & Ascend this thread ({\bf up}-thread). [distance]\\
+      T o     & Go to the top of this thread.\\
+                                %
+      T s     & {\bf Show} the thread hidden under this article.\\
+      T h     & {\bf Hide} this (sub)thread.\\
+                                %
+      T i     & {\bf Increase} the score of this thread.\\
+      T l     & (M-C-l) {\bf Lower} the score of this thread.\\
+                                %
+      T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
+      tick it, positive prefix: unmark it.]\\
+                                %
+      T H     & {\bf Hide} all threads.\\
+      T S     & {\bf Show} all hidden threads.\\
+      T T     & (M-C-t) {\bf Toggle} threading.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\Scoring}{% formerly \Vsubmap
+  {\esamepage
+    Read about Adaptive Scoring in the online info.\\*
+    \begin{keys}{\bf A p m l}
+      V a     & {\bf Add} a new score entry, specifying all elements.\\
+      V c     & Specify a new score file as {\bf current}.\\
+      V e     & {\bf Edit} the current score alist.\\
+      V f     & Edit a score {\bf file} and make it the current one.\\
+      V m     & {\bf Mark} all articles below a given score as read.\\
+      V s     & Set the {\bf score} of this article.\\
+      V t     & Display all score rules applied to this article ({\bf track}).\\
+      V x     & {\bf Expunge} all low-scored articles. [score]\\
+      V C     & {\bf Customize} the current score file through a user-friendly
+      interface.\\ 
+      V S     & Display the {\bf score} of this article.\\
+      \bf A p m l& Make a scoring entry based on this article.\\
+    \end{keys}
+    The four letters stand for:\\*
+    \quad \B{A}ction: I)ncrease, L)ower;\\*
+    \quad \B{p}art: a)utor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
+    message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
+    \quad \B{m}atch type:\\*
+    \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
+    \qquad date: b)efore, a)t, n)this,\\*
+    \qquad number: $<$, =, $>$;\\*
+    \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
+
+    If you type the second letter in uppercase, the remaining two are assumed
+    to be s)ubstring and t)emporary. 
+    If you type the third letter in uppercase, the last one is assumed to be 
+    t)emporary.
+
+    \quad Extra keys for manual editing of a score file:\\*
+    \begin{keys}{C-c C-c}
+      C-c C-c & Finish editing the score file.\\
+      C-c C-d & Insert the current {\bf date} as number of days.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ExtractSeries}{% formerly \Xsubmap
+  {\esamepage
+    Gnus recognizes if the current article is part of a series (multipart
+    posting whose parts are identified by numbers in their subjects, e.g.{}
+    1/10\dots10/10) and processes the series accordingly. You can mark and
+    process more than one series at a time. If the posting contains any
+    archives, they are expanded and gathered in a new group.\\*
+    \begin{keys}{X p}
+      X b     & Un-{\bf binhex} these series. [p/p]\\
+      X o     & Simply {\bf output} these series (no decoding). [p/p]\\ 
+      X p     & Unpack these {\bf postscript} series. [p/p]\\
+      X s     & Un-{\bf shar} these series. [p/p]\\
+      X u     & {\bf Uudecode} these series. [p/p]\\
+    \end{keys}
+
+    Each one of these commands has four variants:\\*
+    \begin{keys}{X v \bf Z}
+      X   \bf z & Decode these series. [p/p]\\
+      X   \bf Z & Decode and save these series. [p/p]\\
+      X v \bf z & Decode and view these series. [p/p]\\
+      X v \bf Z & Decode, save and view these series. [p/p]\\
+    \end{keys}
+    where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
+
+    An alternative binding for the most-often used of these commands is\\*
+    \begin{keys}{C-c C-v C-v}
+      C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
+    \end{keys}
+    }}
+
+\newcommand{\ExitSummary}{% formerly \Zsubmap
+  {\esamepage
+    \begin{keys}{Z G}
+      Z Z     & (q, Z Q) Exit this group.\\
+      Z E     & (Q) {\bf Exit} without updating the group information.\\
+                                %
+      Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
+      Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
+                                %
+      Z n     & Mark all articles as read and go to the {\bf next} group.\\
+      Z N     & Exit and go to {\bf the} next group.\\
+      Z P     & Exit and go to the {\bf previous} group.\\
+                                %
+      Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
+      Z R     & Exit this group, and then enter it again ({\bf reenter}).
+      [Prefix: select all articles, read and unread.]\\
+      Z s     & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionGeneral}{%
+  Press C-c ? in the composition-buffer to get this information.
+  {\esamepage
+    \begin{keys}{C-c C-m}
+                                % sending
+      C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
+      C-c C-s & Send message. [Prefix: send via foreign server]\\
+      C-c C-d & Don't send message (save as \textbf{draft}).\\
+      C-c C-k & \textbf{Kill} message-buffer.\\
+      C-c C-m & {\bf Mail} reply to the address near point.
+      [Prefix: include the original]\\
+                                % modify headers/body
+      C-c C-t & Paste the recipient's address into \textbf{To:}-field.\\
+      C-c C-n & Insert a \textbf{Newsgroups:}-header.\\
+      C-c C-o & Sort headers.\\
+      C-c C-e & \textbf{Elide} region.\\
+      C-c C-v & Kill everything outside region.\\
+      C-c C-r & Do a \textbf{Rot-13} on the body.\\
+      C-c C-w & Insert signature (from `message-signature-file').\\
+      C-c C-z & Kill everything up to signature.\\
+      C-c C-y & \textbf{Yank} original message.\\
+      C-c C-q & Fill the yanked message.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionMovementArticle}{%
+  The following functions create the header-field if necessary.
+  {\esamepage
+    \begin{keys}{C-c C-f C-u}
+      C-c TAB & Move to \textbf{signature}.\\
+      C-c C-b & Move to \textbf{body}.\\
+      C-c C-f C-t & Move to \textbf{To:}.\\
+      C-c C-f C-c & Move to \textbf{Cc:}.\\
+      C-c C-f C-b & Move to \textbf{Bcc:}.\\
+      C-c C-f C-w & Move to \textbf{Fcc:}.\\
+      C-c C-f C-s & Move to \textbf{Subject:}.\\
+      C-c C-f C-r & Move to \textbf{Reply-To:}.\\
+      C-c C-f C-f & Move to \textbf{Followup-To:}.\\
+      C-c C-f C-n & Move to \textbf{Newsgroups:}.\\
+      C-c C-f C-u & Move to \textbf{Summary:}.\\
+      C-c C-f C-k & Move to \textbf{Keywords:}.\\
+      C-c C-f C-d & Move to \textbf{Distribution:}.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionMML}{%
+  {\esamepage
+    \begin{keys}{M-m P}
+      M-m f   & (C-c C-a) Attach \textbf{file}.\\
+      M-m b   & Attach contents of \textbf{buffer}.\\
+      M-m e   & Attach \textbf{external} file (ftp..).\\
+      M-m P   & Create MIME-\textbf{preview} (new buffer).\\
+      M-m v   & \textbf{Validate} article.\\
+      M-m p   & Insert \textbf{part}.\\
+      M-m m   & Insert \textbf{multi}-part.\\
+      M-m q   & \textbf{Quote} region.\\
+                                % TODO: narrow headers (M-m n) ?
+    \end{keys}
+    }
+  }
+
+%% TODO:
+\newcommand{\ServerMode}{%
+  {\esamepage
+    To enter this mode, press `\^' while in Group mode.\\*
+    \begin{keys}{SPC}
+      SPC     & (RET) Browse this server.\\
+      a       & {\bf Add} a new server.\\
+      c       & {\bf Copy} this server.\\
+      e       & {\bf Edit} a server.\\
+      k       & {\bf Kill} this server. [scope]\\
+      l       & {\bf List} all servers.\\
+      q       & Return to the group buffer ({\bf quit}).\\
+      s       & Request that the server scan its sources for new articles.\\
+      g       & Request that the server regenerate its data.\\
+      y       & {\bf Yank} the previously killed server.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\BrowseServer}{%
+  {\esamepage
+    To enter this mode, press `B' while in Group mode.\\*
+    \begin{keys}{RET}
+      RET     & Enter the current group.\\
+      SPC     & Enter the current group and display the first article.\\
+      ?       & Give a very short help message.\\
+      n       & Go to the {\bf next} group. [distance]\\
+      p       & Go to the {\bf previous} group. [distance]\\
+      q       & (l) {\bf Quit} browse mode.\\
+      u       & Subscribe to the current group. [scope]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\GroupUnplugged}{%
+  {\esamepage
+    \begin{keys}{J S}
+      J j & Toggle plugged-state.\\
+      J s & Fetch articles from current group.\\
+      J s & Fetch articles from all groups for offline-reading.\\
+      J S & \textbf{Send} all sendable messages in the drafts group.\\
+                                %
+      J c & Enter \textbf{category} buffer.\\
+      J a & \textbf{Add} this group to an Agent category [p/p].\\
+      J r & \textbf{Remove} this group from its Agent category [p/p].\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\SummaryUnplugged}{%
+  {\esamepage
+    \begin{keys}{J M-\#}
+      J \#   & \textbf{Mark} the article for downloading.\\
+      J M-\# & \textbf{Unmark} the article for downloading.\\
+      @      & \textbf{Toggle} whether to download the article.\\
+      J c    & Mark all undownloaded articles as read (\textbf{catch-up}).\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ServerUnplugged}{%
+  {\esamepage
+    \begin{keys}{J a}
+      J a & \textbf{Add} the current server to the list of servers covered
+      by the agent.\\
+      J r & \textbf{Remove} the current server from the list of servers covered
+      by the agent.\\
+    \end{keys}
+    }
+  }
index 4657d7c..b8721c5 100644 (file)
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message-ja
-@settitle T-gnus 6.13 Message Manual
+@settitle T-gnus 6.14 Message Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Message: (message).   Mail and news composition mode that goes with Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Message-ja: (message-ja).   Mail and news composition mode that goes
+                              with Gnus (Japanese).
+@end direntry
 @iftex
 @finalout
 @end iftex
 @setchapternewpage odd
 
-@ifinfo
+@ifnottex
 
-This file documents Message, the Emacs message composition mode.  
+This file documents Message, the Emacs message composition mode.
 
 \e$B$3$N%U%!%$%k$O\e(B Emacs \e$B$N%a%C%;!<%8:n@.%b!<%I$G$"$k\e(B Message \e$B$K4X$9$k@bL@J8\e(B
 \e$B=q$G$9!#\e(B
 
-Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
-
-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!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$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 also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+Copyright (C) 1996,97,98,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License''.
+
+\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$7$^$9!#JQ99IT2DItJ,$O;XDj$7$^$;$s!#!V\e(BA GNU Manual\e$B!W$OI=I=;f\e(B
+\e$B%F%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$9!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$^\e(B
+\e$B$9!#\e(B
 
-\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
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$j$^$9!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K\e(B
+\e$B$h$C$F=PHG$5$l$^$7$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW\e(B
+\e$B$J;q6b$r=8$a$F$$$^$9!#!W\e(B
 
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
-@end ifinfo
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
+@end ifnottex
 
 @tex
 
 @titlepage
-@title T-gnus 6.13 Message Manual
+@title T-gnus 6.14 Message Manual
 
 @author by Lars Magne Ingebrigtsen
 @translated by members of Semi-gnus mailing-list
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1996,97,98,99 Free Software Foundation, Inc. 
-
-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!"$3$N@bL@=q$N$^$C$?$/\e(B
-\e$BF10l$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.
+Copyright @copyright{} 1996,97,98,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+\e$B$3$NJ8=q$r!"%U%j!<%=%U%H%&%'%":bCDH/9T$N\e(B GNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q\e(B
+\e$BBh\e(B 1.1 \e$BHG$^$?$O$=$l0J9_$NHG$,Dj$a$k>r7o$N2<$GJ#@=!"G[I[!"$"$k$$$OJQ99$9\e(B
+\e$B$k$3$H$r5v2D$7$^$9!#JQ99IT2DItJ,$O;XDj$7$^$;$s!#!V\e(BA GNU Manual\e$B!W$OI=I=;f\e(B
+\e$B%F%-%9%H!"0J2<$N\e(B (a) \e$B$ON"I=;f%F%-%9%H$G$9!#$3$NMxMQ5vBz7@Ls=q$NJ#<L$O\e(B
+\e$B!V\e(BEmacs manual\e$B!W$N!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$H$$$&>O$K4^$^$l$F$$$^\e(B
+\e$B$9!#\e(B
 
-\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
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) FSF \e$B$NN"I=;f%F%-%9%H\e(B:\e$B!V$"$J$?$K$O$3$N\e(B GNU Manual \e$B$r\e(B GNU \e$B%=%U%H%&%'%"\e(B
+\e$B$N$h$&$KJ#@=$7$?$jJQ99$9$k<+M3$,$"$j$^$9!#J#@=$O%U%j!<%=%U%H%&%'%":bCD$K\e(B
+\e$B$h$C$F=PHG$5$l$^$7$?!#\e(B(\e$B%U%j!<%=%U%H%&%'%":bCD$O\e(B) GNU \e$B$N3+H/$N$?$a$KI,MW\e(B
+\e$B$J;q6b$r=8$a$F$$$^$9!#!W\e(B
 
-\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
-\e$B$H$r5v2D$9$k!#\e(B
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
+\e$B$3$NJ8=q$O!V\e(BGNU \e$B%U%j!<J8=qMxMQ5vBz7@Ls=q!W$K4p$E$$$FG[I[$5$l$?<}=8Cx:nJ*\e(B
+\e$B$N0lIt$G$9!#$b$7$"$J$?$,$3$NJ8=q$r<}=8Cx:nJ*$+$iJ,N%$7$FG[I[$7$?$$$H$-$O!"\e(B
+\e$B7@Ls=q$NBh\e(B 6 \e$B9`$K5-=R$5$l$F$$$k$h$&$K!"J8=q$K7@Ls=q$NJ#<L$rIU2C$9$k$3$H\e(B
+\e$B$K$h$C$F!"9T$J$&$3$H$,$G$-$^$9!#\e(B
 @end titlepage
 @page
 
@@ -103,41 +116,39 @@ Gnus \e$B$NA4$F$N%a%C%;!<%8$N:n@.\e(B (\e$B%a!<%k$H%K%e!<%9$NN>J}\e(B) \e$B$O%a%C%;!<
 \e$B%I%P%C%U%!$G9T$o$l$^$9!#\e(B
 
 @menu
-* Interface::         \e$B%a%C%;!<%8%P%C%U%!$r@_Dj$9$k!#\e(B
-* Commands::          \e$B%a%C%;!<%8%b!<%I%P%C%U%!$G<B9T$G$-$kL?Na!#\e(B
-* Variables::         \e$B%a%C%;!<%8%P%C%U%!$r%+%9%?%^%$%:$9$k!#\e(B
-* Compatibility::     \e$B%a%C%;!<%8$r2<0L8_49$K$9$k!#\e(B
-* Appendices::        \e$B$b$C$H5;=QE*$J;v!#\e(B
-* Index::             \e$BJQ?t!"4X?t!"35G0$N:w0z!#\e(B
-* Key Index::         \e$B%a%C%;!<%8%b!<%I%-!<$N0lMw!#\e(B
+* Interface::         \e$B%a%C%;!<%8%P%C%U%!$r@_Dj$9$k\e(B
+* Commands::          \e$B%a%C%;!<%8%b!<%I%P%C%U%!$G<B9T$G$-$kL?Na\e(B
+* Variables::         \e$B%a%C%;!<%8%P%C%U%!$r%+%9%?%^%$%:$9$k\e(B
+* Compatibility::     \e$B%a%C%;!<%8$r2<0L8_49$K$9$k\e(B
+* Appendices::        \e$B$b$C$H5;=QE*$J;v\e(B
+* Index::             \e$BJQ?t!"4X?t!"35G0$N:w0z\e(B
+* Key Index::         \e$B%a%C%;!<%8%b!<%I%-!<$N0lMw\e(B
 @end menu
 
-\e$B$3$N%^%K%e%"%k$O\e(B T-gnus 6.13 Message \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e\e(B
+\e$B$3$N%^%K%e%"%k$O\e(B T-gnus 6.14 Message \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e\e(B
 \e$B%"%k$HF1$8HGHV9f$N\e(B Gnus \e$B$NG[I[$H6&$KG[I[$5$l$^$9!#\e(B
 
-
 @node Interface
 @chapter \e$B3&LL\e(B
 
 \e$B%W%m%0%i%`\e(B (\e$B$b$7$/$O?M\e(B) \e$B$,%a%C%;!<%8$KH?1~$7$?$$$H$-\e(B -- \e$BJVEz!"%U%)%m!<%"%C\e(B
 \e$B%W!"E>Aw!"<h$j>C$7\e(B -- \e$B$=$N%W%m%0%i%`\e(B (\e$B$b$7$/$O?M\e(B) \e$B$O%a%C%;!<%8$,$"$k%P%C\e(B
-\e$B%U%!$K%]%$%s%H$rF~$l$FI,MW$JL?Na$r8F$S=P$9$@$1$GNI$$$Y$-$G$9!#$=$&$9$k$H\e(B 
-@code{Message} \e$B$O?7$7$$\e(B @code{message} \e$B%b!<%I%P%C%U%!$rE,@Z$J%X%C%@!<$r\e(B
-\e$BF~$l$F:n$j=P$7!"MxMQ<T$O%a%C%;!<%8$rAw$kA0$K$=$l$rJT=8$G$-$^$9!#\e(B
+\e$B%U%!$K%]%$%s%H$rF~$l$FI,MW$JL?Na$r8F$S=P$9$@$1$GNI$$$Y$-$G$9!#$=$&$9$k\e(B
+\e$B$H\e(B @code{Message} \e$B$O?7$7$$\e(B @code{message} \e$B%b!<%I%P%C%U%!$rE,@Z$J%X%C%@!<\e(B
+\e$B$rF~$l$F:n$j=P$7!"MxMQ<T$O%a%C%;!<%8$rAw$kA0$K$=$l$rJT=8$G$-$^$9!#\e(B
 
 @menu
-* New News Message::     \e$BA4$/?7$7$$%K%e!<%9%a%C%;!<%8$rJT=8$9$k!#\e(B
-* Reply::                \e$B%a!<%k$GJVEz$9$k!#\e(B
-* Wide Reply::           \e$BA4$F$N?M$K%a!<%k$G1~Ez$9$k!#\e(B
-* Followup::             \e$B%K%e!<%9$G%U%)%m!<%"%C%W$9$k!#\e(B
-* Canceling News::       \e$B?7$7$$5-;v$r<h$j>C$9!#\e(B
-* Superseding::          \e$B%a%C%;!<%8$NBeBX!#\e(B
-* Forwarding::           \e$B%a%C%;!<%8$r%K%e!<%9$b$7$/$O%a!<%k$GE>Aw$9$k!#\e(B
-* Resending::            \e$B%a!<%k%a%C%;!<%8$r:FAw$9$k!#\e(B
-* Bouncing::             \e$B%a!<%k%a%C%;!<%8$N<:GT$r:FAw$9$k!#\e(B
+* New News Message::     \e$BA4$/?7$7$$%K%e!<%9%a%C%;!<%8$rJT=8$9$k\e(B
+* Reply::                \e$B%a!<%k$GJVEz$9$k\e(B
+* Wide Reply::           \e$BA4$F$N?M$K%a!<%k$G1~Ez$9$k\e(B
+* Followup::             \e$B%K%e!<%9$G%U%)%m!<%"%C%W$9$k\e(B
+* Canceling News::       \e$B?7$7$$5-;v$r<h$j>C$9\e(B
+* Superseding::          \e$B%a%C%;!<%8$NBeBX\e(B
+* Forwarding::           \e$B%a%C%;!<%8$r%K%e!<%9$b$7$/$O%a!<%k$GE>Aw$9$k\e(B
+* Resending::            \e$B%a!<%k%a%C%;!<%8$r:FAw$9$k\e(B
+* Bouncing::             \e$B%a!<%k%a%C%;!<%8$N<:GT$r:FAw$9$k\e(B
 @end menu
 
-
 @node New Mail Message
 @section \e$B?7$7$$%a!<%k%a%C%;!<%8\e(B
 
@@ -145,9 +156,8 @@ Gnus \e$B$NA4$F$N%a%C%;!<%8$N:n@.\e(B (\e$B%a!<%k$H%K%e!<%9$NN>J}\e(B) \e$B$O%a%C%;!<
 @code{message-mail} \e$BL?Na$O?7$7$$%P%C%U%!$r:n$jI=<($7$^$9!#\e(B
 
 2\e$B$D$NA*Br<+M3$J0z?t$,<u$1IU$1$i$l$^$9\e(B: \e$B:G=i$N$b$N$O\e(B @code{To} \e$B%X%C%@!<$H\e(B
-\e$B$7$F!"\e(B2\e$BHVL\$O\e(B @code{Subject} \e$B%X%C%@!<$H$7$F;H$o$l$k!#$b$7$3$l$i$,\e(B 
-@code{nil} \e$B$G$"$k$J$i!"$=$l$i$N\e(B2\e$B$D$N%X%C%@!<$O6u$K$J$j$^$9!#\e(B
-
+\e$B$7$F!"\e(B2\e$BHVL\$O\e(B @code{Subject} \e$B%X%C%@!<$H$7$F;H$o$l$k!#$b$7$3$l$i\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$k$J$i!"$=$l$i$N\e(B2\e$B$D$N%X%C%@!<$O6u$K$J$j$^$9!#\e(B
 
 @node New News Message
 @section \e$B?7$7$$%K%e!<%9%a%C%;!<%8\e(B
@@ -155,12 +165,11 @@ Gnus \e$B$NA4$F$N%a%C%;!<%8$N:n@.\e(B (\e$B%a!<%k$H%K%e!<%9$NN>J}\e(B) \e$B$O%a%C%;!<
 @findex message-news
 \e$BL?Na\e(B @code{message-news} \e$B$O?7$7$$%a%C%;!<%8%P%C%U%!$r:n$j!"I=<($7$^$9!#\e(B
 
-\e$B$3$N4X?t$O\e(B2\e$B$D$NA*Br<+M3$J0z?t$r<u$1IU$1$^$9!#:G=i$N$b$N$O\e(B 
-@code{Newsgroups} \e$B%X%C%@!<$H$7$F!"\e(B2\e$B$D$a$N$b$N$O\e(B @code{Subject} \e$B%X%C%@!<\e(B
+\e$B$3$N4X?t$O\e(B2\e$B$D$NA*Br<+M3$J0z?t$r<u$1IU$1$^$9!#:G=i$N$b$N\e(B
+\e$B$O\e(B @code{Newsgroups} \e$B%X%C%@!<$H$7$F!"\e(B2\e$B$D$a$N$b$N$O\e(B @code{Subject} \e$B%X%C%@!<\e(B
 \e$B$H$7$F;H$o$l$^$9!#$b$7$3$l$i$,\e(B @code{nil} \e$B$G$"$k$J$i!"$=$l$i$N\e(B2\e$B$D$N%X%C\e(B
 \e$B%@!<$O6u$K$J$j$^$9!#\e(B
 
-
 @node Reply
 @section \e$BJVEz\e(B
 
@@ -189,16 +198,15 @@ Message \e$B$O2?=h$KJVEz$,9T$/$+$rIaDL$NJ}K!\e(B (@pxref{Responses}) \e$B$G7hDj$7$^
 \e$B$l$^$9!#\e(B
 
 \e$B$4Mw$NDL$j!"$3$N4X?t$O$=$l$,\e(B To \e$B%X%C%@!<$,$I$N$h$&$G$"$k$Y$-$+$K4V$9$k<g\e(B
-\e$BD%$,$"$l$P!"J8;zNs$rJV$9$Y$-$G$9!#$b$7$=$&$G$J$1$l$P!"$=$l$O\e(B @code{nil} 
+\e$BD%$,$"$l$P!"J8;zNs$rJV$9$Y$-$G$9!#$b$7$=$&$G$J$1$l$P!"$=$l$O\e(B @code{nil}
 \e$B$rJV$9$@$1$G!"$=$&$9$l$P\e(B To \e$B%X%C%@!<$r7hDj$9$kIaDL$NJ}K!$,;H$o$l$k$G$7$g\e(B
 \e$B$&!#\e(B
 
-\e$B$3$N4X?t$O%j%9%H$rJV$9;v$b$G$-$^$9!#$=$N$h$&$J>l9g$O!"$=$l$>$l$NMWAG$O\e(B 
-cons \e$B%;%k$G$"$k$Y$-$G!"$=$l$N\e(B car \e$B$O%X%C%@!<$NL>A0\e(B (\e$BNc\e(B @code{Cc}) \e$B$G!"\e(B
+\e$B$3$N4X?t$O%j%9%H$rJV$9;v$b$G$-$^$9!#$=$N$h$&$J>l9g$O!"$=$l$>$l$NMWAG\e(B
+\e$B$O\e(B cons \e$B%;%k$G$"$k$Y$-$G!"$=$l$N\e(B car \e$B$O%X%C%@!<$NL>A0\e(B (\e$BNc\e(B @code{Cc}) \e$B$G!"\e(B
 cdr \e$B$,%X%C%@!<$NCM\e(B (\e$BNc\e(B @samp{larsi@@ifi.uio.no}) \e$B$G$"$k$Y$-$G$9!#A4$F$N\e(B
 \e$B$3$l$i$N%X%C%@!<$O=P$F9T$/%a!<%k$N%X%C%@!<$KA^F~$5$l$^$9!#\e(B
 
-
 @node Wide Reply
 @section \e$B9-$/JVEz\e(B
 
@@ -214,12 +222,10 @@ Message \e$B$OJVEz$,2?=h$K9T$/$+$r7hDj$9$k$?$a$KIaDL$NJ}K!$r;H$$$^$9$,!"\e(B
 \e$BJQ99$9$k;v$,$G$-$^$9!#$=$l$O\e(B @code{message-reply-to-function} \e$B$HF1$8$h$&\e(B
 \e$B$K;H$o$l$^$9\e(B (@pxref{Reply})\e$B!#\e(B
 
-
 @findex message-dont-reply-to-names
-\e$B@55,I=8=\e(B @code{rmail-dont-reply-to-names} \e$B$K9gCW$9$k%"%I%l%9$O\e(B @code{Cc} 
+\e$B@55,I=8=\e(B @code{rmail-dont-reply-to-names} \e$B$K9gCW$9$k%"%I%l%9$O\e(B @code{Cc}
 \e$B%X%C%@!<$+$i<h$j=|$+$l$^$9!#\e(B
 
-
 @node Followup
 @section \e$B%U%)%m!<%"%C%W\e(B
 
@@ -230,7 +236,7 @@ Message \e$B$OJVEz$,2?=h$K9T$/$+$r7hDj$9$k$?$a$KIaDL$NJ}K!$r;H$$$^$9$,!"\e(B
 @vindex message-followup-to-function
 Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 @code{message-followup-to-function} \e$B$rO.$k;v$G!"$"$J$?$NMW5a$K9g$&$h$&$K\e(B
-\e$B?6$kIq$$$rJQ99$9$k;v$,$G$-$^$9!#$=$l$O\e(B @code{message-reply-to-function} 
+\e$B?6$kIq$$$rJQ99$9$k;v$,$G$-$^$9!#$=$l$O\e(B @code{message-reply-to-function}
 \e$B$HF1$8$h$&$K;H$o$l$^$9\e(B (@pxref{Reply})\e$B!#\e(B
 
 @vindex message-use-followup-to
@@ -240,14 +246,12 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 \e$B?R$M$^$9!#$b$7\e(B @code{t} \e$B$G$"$k$H!"$=$l$,\e(B @samp{\e$BEj9F<T\e(B} \e$B$G$J$$8B$j!"CM$r\e(B
 \e$B;H$$$^$9!#\e(B@code{nil} \e$B$G$"$l$P!"CM$r;H$$$^$;$s!#\e(B
 
-
 @node Canceling News
 @section \e$B%K%e!<%9$r<h$j>C$9\e(B
 
 @findex message-cancel-news
 \e$BL?Na\e(B @code{message-cancel-news} \e$B$O8=:_$N%P%C%U%!$N5-;v$r<h$j>C$7$^$9!#\e(B
 
-
 @node Superseding
 @section \e$BBeBX\e(B
 
@@ -257,11 +261,10 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 
 @vindex message-ignored-supersede-headers
 @code{message-ignored-supersedes-headers} \e$B$K9gCW$9$k%X%C%@!<$O?7$7$$%a%C\e(B
-\e$B%;!<%8%P%C%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B 
-@*@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
+\e$B%;!<%8%P%C%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM\e(B
+\e$B$O\e(B @*@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
 ^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:} \e$B$G$9!#\e(B
 
-
 @node Forwarding
 @section \e$BE>Aw\e(B
 
@@ -271,14 +274,13 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 \e$B%K%e!<%9$r;H$$$^$9!#\e(B
 
 @table @code
-@item message-ignored-forward-headers
-@vindex message-ignored-forward-headers
+@item message-forward-ignored-headers
+@vindex message-forward-ignored-headers
 \e$B$3$N@55,I=8=$K9gCW$9$k$9$Y$F$N%X%C%@!<$,!"E>Aw$5$l$k%a%C%;!<%8$+$i:o=|$5\e(B
 \e$B$l$^$9!#\e(B
 
 @end table
 
-
 @node Resending
 @section \e$B:FAw\e(B
 
@@ -290,7 +292,6 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 \e$B@55,I=8=\e(B @code{message-ignored-resent-headers} \e$B$K9gCW$9$k%X%C%@!<$O%a%C\e(B
 \e$B%;!<%8$rAw$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B @code{^Return-receipt} \e$B$G$9!#\e(B
 
-
 @node Bouncing
 @section \e$B<:GT\e(B
 
@@ -302,23 +303,36 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 
 @vindex message-ignored-bounced-headers
 \e$B@55,I=8=\e(B @code{message-ignored-bounced-headers} \e$B$K9gCW$9$k%X%C%@!<$O%P%C\e(B
-\e$B%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B 
-@samp{^\\(Received\\|Return-Path\\):} \e$B$G$9!#\e(B
-
+\e$B%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{^\\(Received\\|Return-Path\\):} \e$B$G$9!#\e(B
 
 @node Commands
 @chapter \e$BL?Na\e(B
 
 @menu
-* Header Commands::     \e$B%X%C%@!<$K0\F0$9$k$?$a$NL?Na!#\e(B
-* Movement::            \e$B%a%C%;!<%8%P%C%U%!$rF0$-2s$k!#\e(B
-* Insertion::           \e$B%a%C%;!<%8%P%C%U%!$KJ*;v$rA^F~$9$k!#\e(B
+* Buffer Entry::        \e$B%a%C%;!<%8%P%C%U%!$KF~$C$?8e$NL?Na\e(B
+* Header Commands::     \e$B%X%C%@!<$K0\F0$9$k$?$a$NL?Na\e(B
+* Movement::            \e$B%a%C%;!<%8%P%C%U%!$rF0$-2s$k\e(B
+* Insertion::           \e$B%a%C%;!<%8%P%C%U%!$KJ*;v$rA^F~$9$k\e(B
 @c * MIME::                @sc{mime} considerations.
-* Various Commands::    \e$B$$$m$$$m$J;v!#\e(B
-* Sending::             \e$B<B:]$K%a%C%;!<%8$rAw$k!#\e(B
-* Mail Aliases::        \e$B$I$N$h$&$K$7$F%a!<%k$NJLL>$r;H$&$+!#\e(B
+* Various Commands::    \e$B$$$m$$$m$J;v\e(B
+* Sending::             \e$B<B:]$K%a%C%;!<%8$rAw$k\e(B
+* Mail Aliases::        \e$B$I$N$h$&$K$7$F%a!<%k$NJLL>$r;H$&$+\e(B
+* Spelling::            Emacs \e$B$K%9%Z%k%A%'%C%/$5$;$k\e(B
 @end menu
 
+@node Buffer Entry
+@section \e$B%P%C%U%!$KF~$k\e(B
+@cindex undo
+@kindex C-_
+
+\e$B2?$+B>$N%a%C%;!<%8$KJVEz$9$k$H$-!"$"$J$?$O$?$$$F$$%a%C%;!<%8%P%C%U%!$G=q\e(B
+\e$B$->e$2$^$9$h$M!#\e(BMessage \e$B$OB?$/$N0zMQJ8$r07$$!"=pL>$N:o=|$dJ8>O$N@07A$r$7\e(B
+\e$B$?$j!"$"$k$$$O$"$?$J$,;H$C$F$$$k@_Dj$K0MB8$7$F$$$^$9!#\e(BMessage \e$B$OIaDL$O$&\e(B
+\e$B$^$/F0:n$7$^$9$,!"$H$-$I$-4V0c$($b$7$^$9!#$=$l$i$N4V0c$$$r%f!<%6$,@5$9$3\e(B
+\e$B$H$,$G$-$k$h$&$K!"\e(BMessage \e$B$O$=$l$>$l<gMW$JF0:n$r9T$J$&A0$K%"%s%I%%$N6-3&\e(B
+\e$B$r@_Dj$7$^$9!#$"$J$?$O2?2s$+%"%s%I%%$N%-!<\e(B (\e$BDL>o\e(B @kbd{C-_}) \e$B$r2!$;$P!"L$\e(B
+\e$BJT=8$N%a%C%;!<%8$KLa$9$3$H$,$G$-$^$9!#\e(B
 
 @node Header Commands
 @section \e$B%X%C%@!<L?Na\e(B
@@ -370,8 +384,8 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 @item C-c C-f C-d
 @kindex C-c C-f C-d
 @findex message-goto-distribution
-@code{Distribution} \e$B%X%C%@!<$K9T$-$^$9\e(B 
-(@code{message-goto-distribution})\e$B!#\e(B
+@code{Distribution} \e$B%X%C%@!<$K9T$-$^\e(B
+\e$B$9\e(B (@code{message-goto-distribution})\e$B!#\e(B
 
 @item C-c C-f C-o
 @kindex C-c C-f C-o
@@ -390,7 +404,6 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 
 @end table
 
-
 @node Movement
 @section \e$B0\F0\e(B
 
@@ -407,7 +420,6 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 
 @end table
 
-
 @node Insertion
 @section \e$BA^F~\e(B
 
@@ -416,12 +428,11 @@ Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
 @item C-c C-y
 @kindex C-c C-y
 @findex message-yank-original
-\e$B%P%C%U%!\e(B @code{gnus-article-copy} \e$B$K$"$k%a%C%;!<%8$r%a%C%;!<%8%P%C%U%!$K\e(B
-\e$BE=$jIU$1$^$9!#IaDL$O\e(B @code{gnus-article-copy} \e$B$O$"$J$?$,JVEz$7$h$&$H$7$F\e(B
-\e$B$$$k%a%C%;!<%8$G$9\e(B (@code{messsage-yank-original})\e$B!#\e(B
+\e$BJV;v$r$9$k%a%C%;!<%8$r%a%C%;!<%8%P%C%U%!$KE=$jIU$1$^\e(B
+\e$B$9\e(B (@code{messsage-yank-original})\e$B!#\e(B
 
-@item C-c C-Y
-@kindex C-c C-Y
+@item C-c M-C-y
+@kindex C-c M-C-y
 @findex message-yank-buffer
 Prompt for a buffer name and yank the contents of that buffer into the
 message buffer (@code{message-yank-buffer}).
@@ -429,12 +440,12 @@ message buffer (@code{message-yank-buffer}).
 @item C-c C-q
 @kindex C-c C-q
 @findex message-fill-yanked-message
-\e$BE=$jIU$1$i$l$?%a%C%;!<%8$r@^$jJV$7$^$9\e(B 
-(@code{message-fill-yanked-message})\e$B!#7Y9p\e(B: \e$B$b$7!"0zMQ$N=,47$,JQ$G$"$k$J\e(B
-\e$B$i!"E=$jIU$1$i$l$?J8>O$r$R$I$/$0$A$c$0$A$c$K$7$F$7$^$&$+$b$7$l$^$;$s!#$=\e(B
-\e$B$l$,0BA4$G$"$k$HCN$k$H!"$9$0$K?M?4CO$D$/$G$7$g$&$,!#$H$K$+$/!"\e(B@kbd{C-x
-u} (@code{undo}) \e$B$,;HMQ2DG=$G!"Bg>fIW$G$"$k$H8@$&;v$r3P$($F$*$$$F2<$5$$!#\e(B
-
+\e$BE=$jIU$1$i$l$?%a%C%;!<%8$r@^$jJV$7$^\e(B
+\e$B$9\e(B (@code{message-fill-yanked-message})\e$B!#7Y9p\e(B: \e$B$b$7!"0zMQ$N=,47$,JQ$G$"\e(B
+\e$B$k$J$i!"E=$jIU$1$i$l$?J8>O$r$R$I$/$0$A$c$0$A$c$K$7$F$7$^$&$+$b$7$l$^$;$s!#\e(B
+\e$B$=$l$,0BA4$G$"$k$HCN$k$H!"$9$0$K?M?4CO$D$/$G$7$g$&$,!#$H$K$+$/!"\e(B
+@kbd{C-x u} (@code{undo}) \e$B$,;HMQ2DG=$G!"Bg>fIW$G$"$k$H8@$&;v$r3P$($F$*$$\e(B
+\e$B$F2<$5$$!#\e(B
 
 @item C-c C-w
 @kindex C-c C-w
@@ -456,8 +467,9 @@ u} (@code{undo}) \e$B$,;HMQ2DG=$G!"Bg>fIW$G$"$k$H8@$&;v$r3P$($F$*$$$F2<$5$$!#\e(B
 
 @item message-citation-line-function
 @vindex message-citation-line-function
-\e$B0zMQ9T$rA^F~$9$k$?$a$K8F$P$l$k4X?t$G$9!#=i4|CM$O\e(B 
-@code{message-insert-citation-line} \e$B$G!"$3$l$O0zMQ9T$r<!$N$h$&$K$7$^$9\e(B:
+\e$B0zMQ9T$rA^F~$9$k$?$a$K8F$P$l$k4X?t$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{message-insert-citation-line} \e$B$G!"$3$l$O0zMQ9T$r<!$N$h$&$K$7$^\e(B
+\e$B$9\e(B:
 
 @example
 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
@@ -470,9 +482,26 @@ Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
 @cindex yanking
 @cindex quoting
 \e$B$"$J$?$,5-;v$KJVEz$+%U%)%m!<%"%C%W$r$7$F$$$k$H$-$O!"IaDL$O$"$J$?$,1~Ez$7\e(B
-\e$B$F$$$k?M$N$b$N$K0zMQId$rIU$1$?$$$G$7$g$&!#0zMQJ8$NA^F~$O\e(B @dfn{\e$BE=$jIU$1\e(B} 
-\e$B$K$h$C$F$J$5$l!"$=$l$>$l$NE=$jIU$1$i$l$?0zMQ9T$O$=$NA0$K\e(B 
-@code{message-yank-prefix} \e$B$rIU$1$i$l$^$9!#=i4|CM$O\e(B @samp{> } \e$B$G$9!#\e(B
+\e$B$F$$$k?M$N$b$N$K0zMQId$rIU$1$?$$$G$7$g$&!#0zMQJ8$NA^F~$O\e(B @dfn{\e$BE=$jIU$1\e(B}
+\e$B$K$h$C$F$J$5$l!"$=$l$>$l$NE=$jIU$1$i$l$?0zMQ9T$O$=$NA0\e(B
+\e$B$K\e(B @code{message-yank-prefix} \e$B$rIU$1$i$l$^$9!#=i4|CM$O\e(B @samp{> } \e$B$G$9!#\e(B
+
+@item message-yank-add-new-references
+@vindex message-yank-add-new-references
+@cindex yanking
+\e$B%3%^%s%I\e(B @code{message-yank-original} \e$B$rBPOCE*$K;H$C$?$H$-$K!"$3$NCM\e(B
+\e$B$,\e(B @code{nil} \e$B$G$J$+$C$?$i!"\e(BReferences \e$B%U%#!<%k%I$K\e(B ID \e$B$,DI2C$5$l$^$9!#\e(B
+\e$B$b$7CM$,%7%s%\%k\e(B @code{message-id-only} \e$B$@$C$?$i\e(B Message-ID \e$B%U%#!<%k%I\e(B
+\e$B$N\e(B ID \e$B$@$1$,;H$o$l$^$9$,!"$=$&$G$J$1$l$P\e(B References\e$B!"\e(BIn-Reply-To \e$B$*$h\e(B
+\e$B$S\e(B Message-ID \e$B%U%#!<%k%I$+$iCj=P$5$l$?\e(B ID \e$B$,;H$o$l$^$9!#\e(B
+
+@item message-list-references-add-position
+@vindex message-list-references-add-position
+@cindex yanking
+\e$B%3%^%s%I\e(B @code{message-yank-original} \e$B$rBPOCE*$K;H$C$?$H$-$K!"$3$NCM$,\e(B
+\e$B@5$N@0?t$@$C$?$i!"$9$G$K$"$k\e(B References \e$B%U%#!<%k%I$N:G8e$+$i$=$N8D?t\e(B
+\e$B$N\e(B ID \e$B$@$1N%$l$?>l=j$K?7$7$$\e(B ID \e$B$,A^F~$5$l$^$9!#$=$l0J30$N>l9g$O:G8e$KA^\e(B
+\e$BF~$5$l$^$9!#\e(B
 
 @item message-indentation-spaces
 @vindex message-indentation-spaces
@@ -487,16 +516,16 @@ Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
 \e$BK\5-;v$r0zMQ$9$k$?$a$N4X?t$G$9!#=i4|CM$O\e(B @code{message-cite-original} \e$B$G!"\e(B
 \e$B$3$l$OC1=c$K$b$H$N%a%C%;!<%8$rA^F~$7!"$=$l$>$l$N9T$NF,$K\e(B @samp{> } \e$B$r$/$C\e(B
 \e$B$D$1$^$9!#\e(B@code{message-cite-original-without-signature} \e$B$OF1MM$N;v$r$7\e(B
-\e$B$^$9$,!"=pL>$O>J$-$^$9!#\e(BSupercite \e$B$r;H$&$?$a$K!"$=$l$r\e(B 
-@code{sc-cite-original} \e$B$K@_Dj$9$k;v$b$G$-$^$9!#\e(B
+\e$B$^$9$,!"=pL>$O>J$-$^$9!#\e(BSupercite \e$B$r;H$&$?$a$K!"$=$l\e(B
+\e$B$r\e(B @code{sc-cite-original} \e$B$K@_Dj$9$k;v$b$G$-$^$9!#\e(B
 
 @item message-indent-citation-function
 @vindex message-indent-citation-function
 \e$B$A$g$&$I%a!<%k%P%C%U%!$KA^F~$5$l$?0zMQJ8$r=$@5$9$k$?$a$N4X?t$G$9!#$3$l$O\e(B
-\e$B4X?t$N%j%9%H$G$"$k;v$b$G$-$^$9!#$=$l$>$l$N4X?t$O\e(B @code{(point)} \e$B$H\e(B 
-@code{(mark t)} \e$B$N4V$G0zMQ$rH/8+$9$k;v$,$G$-$^$9!#$=$7$F!"$=$l$>$l$N4X?t\e(B
-\e$B$O0zMQJ8$,=$@5$5$l$k$H!"$=$N<~$j$K%]%$%s%H$H%^!<%/$r;D$5$J$1$l$P$J$j$^$;\e(B
-\e$B$s!#\e(B
+\e$B4X?t$N%j%9%H$G$"$k;v$b$G$-$^$9!#$=$l$>$l$N4X?t\e(B
+\e$B$O\e(B @code{(point)} \e$B$H\e(B @code{(mark t)} \e$B$N4V$G0zMQ$rH/8+$9$k;v$,$G$-$^$9!#\e(B
+\e$B$=$7$F!"$=$l$>$l$N4X?t$O0zMQJ8$,=$@5$5$l$k$H!"$=$N<~$j$K%]%$%s%H$H%^!<%/\e(B
+\e$B$r;D$5$J$1$l$P$J$j$^$;$s!#\e(B
 
 @item message-signature
 @vindex message-signature
@@ -508,8 +537,8 @@ Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
 
 @item messsage-signature-file
 @vindex message-signature-file
-\e$B%P%C%U%!$N:G8e$KA^F~$5$l$k=pL>$NF~$C$F$$$k%U%!%$%k$G$9!#=i4|CM$O\e(B 
-@samp{~/.signature} \e$B$G$9!#\e(B
+\e$B%P%C%U%!$N:G8e$KA^F~$5$l$k=pL>$NF~$C$F$$$k%U%!%$%k$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{~/.signature} \e$B$G$9!#\e(B
 
 @end table
 
@@ -544,7 +573,6 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 @c language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
 @c Manual}).
 
-
 @node Various Commands
 @section \e$B$$$m$$$m$JL?Na\e(B
 
@@ -553,28 +581,29 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 @item C-c C-r
 @kindex C-c C-r
 @findex message-caesar-buffer-body
-\e$B8=:_$N%a%C%;!<%8$r%7!<%6!<JQ49\e(B (\e$BJLL>\e(B rot13) \e$B$7$^$9\e(B 
-(@code{message-caesar-buffer-body})\e$B!#$b$7HO0O8BDj$,<B9T$5$l$F$$$?$i!"%P%C\e(B
-\e$B%U%!$N8+$($kItJ,$@$1$rJQ49$7$^$9!#?tCM@\F,0z?t$OJ8$r$I$N$/$i$$2sE>$5$;$k\e(B
-\e$B$+$r;XDj$7$^$9!#=i4|CM$O\e(B 13 \e$B$G$9!#\e(B
+\e$B8=:_$N%a%C%;!<%8$r%7!<%6!<JQ49\e(B (\e$BJLL>\e(B rot13) \e$B$7$^\e(B
+\e$B$9\e(B (@code{message-caesar-buffer-body})\e$B!#$b$7HO0O8BDj$,<B9T$5$l$F$$$?$i!"\e(B
+\e$B%P%C%U%!$N8+$($kItJ,$@$1$rJQ49$7$^$9!#?tCM@\F,0z?t$OJ8$r$I$N$/$i$$2sE>$5\e(B
+\e$B$;$k$+$r;XDj$7$^$9!#=i4|CM$O\e(B 13 \e$B$G$9!#\e(B
 
 @item C-c C-e
 @kindex C-c C-e
 @findex message-elide-region
 \e$B%]%$%s%H$H%^!<%/$N4V$NJ8$r>J$-$^$9\e(B (@code{message-elide-region})\e$B!#J8>O$O\e(B
-\e$B@Z$i$l$F\e(B (killed) \e$B>JN,Id9f\e(B (@samp{[...]} \e$B$,$=$N>l=j$KA^F~$5$l$^$9!#\e(B
+\e$B@Z$i$l$F\e(B (killed) \e$BJQ?t\e(B @code{message-elide-ellipsis} \e$B$NCM$GCV$-49$($i$l\e(B
+\e$B$^$9!#%G%#%U%)%k%H$N>JN,Id9f$H$7$F;H$o$l$kCM$O\e(B (@samp{[...]}) \e$B$G$9!#\e(B
 
 @item C-c C-z
 @kindex C-c C-x
 @findex message-kill-to-signature
-\e$B=pL>$^$G$+!"$=$l$,L5$1$l$P5-;v$N:G8e$^$G$NA4$F$NJ8$r@Z$j$^$9\e(B 
-(@code{message-kill-to-signature})\e$B!#\e(B
+\e$B=pL>$^$G$+!"$=$l$,L5$1$l$P5-;v$N:G8e$^$G$NA4$F$NJ8$r@Z$j$^\e(B
+\e$B$9\e(B (@code{message-kill-to-signature})\e$B!#\e(B
 
 @item C-c C-v
 @kindex C-c C-v
 @findex message-delete-not-region
-\e$B%a%C%;!<%8$NK\BN$N%j!<%8%g%s$N30$NA4$F$NJ8$r>C5n$7$^$9\e(B 
-(@code{message-delete-not-region})\e$B!#\e(B
+\e$B%a%C%;!<%8$NK\BN$N%j!<%8%g%s$N30$NA4$F$NJ8$r>C5n$7$^\e(B
+\e$B$9\e(B (@code{message-delete-not-region})\e$B!#\e(B
 
 @item M-RET
 @kindex M-RET
@@ -604,16 +633,16 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 @item C-c C-t
 @kindex C-c C-t
 @findex message-insert-to
-\e$B%U%)%m!<%"%C%W$7$h$&$H$9$k%a%C%;!<%8$N\e(B @code{Reply-To} \e$B$b$7$/$O\e(B 
-@code{From} \e$B%X%C%@!<$r4^$`\e(B @code{To} \e$B%X%C%@!<$rA^F~$7$^$9\e(B 
-(@code{message-insert-to})\e$B!#\e(B
+\e$B%U%)%m!<%"%C%W$7$h$&$H$9$k%a%C%;!<%8$N\e(B @code{Reply-To} \e$B$b$7$/\e(B
+\e$B$O\e(B @code{From} \e$B%X%C%@!<$r4^$`\e(B @code{To} \e$B%X%C%@!<$rA^F~$7$^\e(B
+\e$B$9\e(B (@code{message-insert-to})\e$B!#\e(B
 
 @item C-c C-n
 @kindex C-c C-n
 @findex message-insert-newsgroups
 \e$BJVEz$7$F$$$k5-;v$N\e(B @code{Followup-To} \e$B$b$7$/$O!"\e(B@code{Nesgroups} \e$B%X%C%@!<\e(B
-\e$B$rH?1G$7$?\e(B @code{Newsgroups} \e$B%X%C%@!<$rA^F~$7$^$9\e(B 
-(@code{message-insert-newsgroups})\e$B!#\e(B
+\e$B$rH?1G$7$?\e(B @code{Newsgroups} \e$B%X%C%@!<$rA^F~$7$^\e(B
+\e$B$9\e(B (@code{message-insert-newsgroups})\e$B!#\e(B
 
 @item C-c M-r
 @kindex C-c M-r
@@ -623,7 +652,6 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 
 @end table
 
-
 @node Sending
 @section \e$BAw?.\e(B
 
@@ -631,8 +659,8 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 @item C-c C-c
 @kindex C-c C-c
 @findex message-send-and-exit
-\e$B%a%C%;!<%8$rAw?.$7!"8=:_$N%P%C%U%!$rKd$a$^$9\e(B 
-(@code{message-send-and-exit})\e$B!#\e(B
+\e$B%a%C%;!<%8$rAw?.$7!"8=:_$N%P%C%U%!$rKd$a$^\e(B
+\e$B$9\e(B (@code{message-send-and-exit})\e$B!#\e(B
 
 @item C-c C-s
 @kindex C-c C-s
@@ -651,8 +679,6 @@ RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$
 
 @end table
 
-
-
 @node Mail Aliases
 @section \e$B%a!<%kJLL>\e(B
 @cindex mail aliases
@@ -679,24 +705,66 @@ alias ding "ding@@ifi.uio.no (ding mailing list)"
 \e$B%a%C%;!<%8$rAw$k$H$-$K$O?-D%$O9T$o$l$^$;$s\e(B---\e$BA4$F$N?-D%$OL@<(E*$K9T$o$l\e(B
 \e$B$J$/$F$O$J$j$^$;$s!#\e(B
 
+@node Spelling
+@section Emacs \e$B$K%9%Z%k%A%'%C%/$5$;$k\e(B
+@cindex spelling
+@findex ispell-message
+
+Emacs \e$B$G%9%Z%k%A%'%C%/$9$k$?$a$KIa5Z$7$F$$$kFs$D$NJ}K!!"\e(B
+@code{ispell} \e$B$H\e(B @code{flyspell} \e$B$,$"$j$^$9!#\e(B@code{ispell} \e$B$NJ}$O@N$+$i\e(B
+\e$B$"$C$F!"$?$V$s$h$j0lHLE*$J%Q%C%1!<%8$G$9!#$"$J$?$ONc$K$h$C$F:G=i$K%a%C%;!<\e(B
+\e$B%8$r=q$$$F$+$iA4BN$r\e(B @code{ispell} \e$B$KDL$7!"$9$Y$F$N=q$-B;$8$r=$@5$7$^$9!#\e(B
+\e$B%a%C%;!<%8$rAw?.$9$k$H$-$K$=$l$r<+F0E*$K9T$J$&$?$a$K$O!"\e(B.emacs \e$B%U%!%$%k\e(B
+\e$B$K0J2<$N$h$&$J$b$N$rF~$l$F2<$5$$!#\e(B
+
+@lisp
+(add-hook 'message-send-hook 'ispell-message)
+@end lisp
+
+@vindex ispell-message-dictionary-alist
+\e$B$b$7$"$J$?$,0c$&8@8l$G=q$/=,47$J$i$P!"$=$l$OJQ\e(B
+\e$B?t\e(B @code{ispell-message-dictionary-alist} \e$B$G@)8f$G$-$^$9!#\e(B
+
+@lisp
+(setq ispell-message-dictionary-alist
+      '(("^Newsgroups:.*\\bde\\." . "deutsch8")
+       (".*" . "default")))
+@end lisp
+
+@code{ispell} \e$B$O%$%s%9%H!<%k$5$l$?\e(B @samp{ispell} \e$B%3%^%s%I$K0MB8$7$F$$$^\e(B
+\e$B$9!#\e(B
 
+\e$B$b$&0lJ}$NIa5Z$7$F$$$kJ}K!$O\e(B @code{flyspell} \e$B$r;H$&$3$H$G$9!#$3$N%Q%C%1!<\e(B
+\e$B%8$O$"$J$?$,=q$$$F$$$k:GCf$K%9%Z%k%A%'%C%/$r9T$J$$!"$$$m$s$JJ}K!$G4V0c$C\e(B
+\e$B$?%9%Z%k$N8l$r;XE&$7$F$/$l$^$9!#\e(B
+
+@code{flyspell} \e$B$r;H$&$K$O!"0J2<$N$h$&$J$b$N$r\e(B .emacs \e$B%U%!%$%k$KF~$l$F2<\e(B
+\e$B$5$$!#\e(B
+
+@lisp
+(defun my-message-setup-routine ()
+  (flyspell-mode 1))
+(add-hook 'message-setup-hook 'my-message-setup-routine)
+@end lisp
+
+@code{flyspell} \e$B$O%$%s%9%H!<%k$5$l$?\e(B @samp{ispell} \e$B%3%^%s%I$K0MB8$7$F$$$^\e(B
+\e$B$9!#\e(B
 
 @node Variables
 @chapter \e$BJQ?t\e(B
 
 @menu
-* Message Headers::             \e$B0lHLE*$J%a%C%;!<%8%X%C%@!<$N$h$&$J$b$N!#\e(B
-* Mail Headers::                \e$B%a!<%k%X%C%@!<$r%+%9%?%^%$%:$9$k!#\e(B
-* Mail Variables::              \e$BB>$N%a!<%kJQ?t!#\e(B
-* News Headers::                \e$B%K%e!<%9%X%C%@!<$r%+%9%?%^%$%:$9$k!#\e(B
-* News Variables::              \e$BB>$N%K%e!<%9JQ?t!#\e(B
-* Various Message Variables::   \e$BB>$N%a%C%;!<%8JQ?t!#\e(B
-* Sending Variables::           \e$BAw?.$9$k$?$a$NJQ?t!#\e(B
-* Message Buffers::             Message \e$B$,$=$N%P%C%U%!$NL>A0$rIU$1$kJ}K!!#\e(B
-* Message Actions::             \e$B=*N;$9$k$H$-$K<B9T$5$l$kF0:n!#\e(B
+* Message Headers::             \e$B0lHLE*$J%a%C%;!<%8%X%C%@!<$N$h$&$J$b$N\e(B
+* Mail Headers::                \e$B%a!<%k%X%C%@!<$r%+%9%?%^%$%:$9$k\e(B
+* Mail Variables::              \e$BB>$N%a!<%kJQ?t\e(B
+* News Headers::                \e$B%K%e!<%9%X%C%@!<$r%+%9%?%^%$%:$9$k\e(B
+* News Variables::              \e$BB>$N%K%e!<%9JQ?t\e(B
+* Various Message Variables::   \e$BB>$N%a%C%;!<%8JQ?t\e(B
+* Sending Variables::           \e$BAw?.$9$k$?$a$NJQ?t\e(B
+* Message Buffers::             Message \e$B$,$=$N%P%C%U%!$NL>A0$rIU$1$kJ}K!\e(B
+* Message Actions::             \e$B=*N;$9$k$H$-$K<B9T$5$l$kF0:n\e(B
 @end menu
 
-
 @node Message Headers
 @section \e$B%a%C%;!<%8%X%C%@!<\e(B
 
@@ -740,10 +808,10 @@ Message \e$B$O%a%C%;!<%8:n@.ItJ,$K4X$7$F$OHs>o$K@Q6KE*$G$9!#$=$l$O<!$N$h$&$G\e(B
 \e$B:o=|$5$l$^$9!#5-;v$rEj9F$9$k$H$7$^$7$g$&!#$=$l$+$i!"$o$s$Q$/K7<g$J$"$J$?\e(B
 \e$B$O$=$l$r2?$+B>$N%0%k!<%W$K:F$SEj9F$9$k;v$K7hDj$7$?$N$G!"\e(B
 @code{*post-buf*} \e$B%P%C%U%!$KLa$j!"\e(B@code{Newsgroups} \e$B9T$rJT=8$7!":F$SAw$j\e(B
-\e$B=P$7$?$H$7$^$9!#=i4|@_Dj$G$O!"$3$NJQ?t$OA0$K:n@.$5$l$?8E$$\e(B 
-@code{Message-ID} \e$B$,<h$j=|$+$l!"?7$7$$$b$N$,:n@.$5$l$k;v$r3N<B$K$7$F$$$^\e(B
-\e$B$9!#$b$7$3$l$,$J$5$l$J$$$H!"Dk9qA4BN$O$*$=$i$/Jx2u$7!"L5@/I\<g5A$,?;F)$7!"\e(B
-\e$BG-$,\e(B2\e$BK\$NB-$GJb$-;O$a!"@$3&$r;YG[$9$k$G$7$g$&!#J9$/$H$3$m$K0M$l$P!#\e(B
+\e$B=P$7$?$H$7$^$9!#=i4|@_Dj$G$O!"$3$NJQ?t$OA0$K:n@.$5$l$?8E\e(B
+\e$B$$\e(B @code{Message-ID} \e$B$,<h$j=|$+$l!"?7$7$$$b$N$,:n@.$5$l$k;v$r3N<B$K$7$F\e(B
+\e$B$$$^$9!#$b$7$3$l$,$J$5$l$J$$$H!"Dk9qA4BN$O$*$=$i$/Jx2u$7!"L5@/I\<g5A$,?;\e(B
+\e$BF)$7!"G-$,\e(B2\e$BK\$NB-$GJb$-;O$a!"@$3&$r;YG[$9$k$G$7$g$&!#J9$/$H$3$m$K0M$l$P!#\e(B
 
 @item message-default-headers
 @vindex message-default-headers
@@ -751,19 +819,26 @@ Message \e$B$O%a%C%;!<%8:n@.ItJ,$K4X$7$F$OHs>o$K@Q6KE*$G$9!#$=$l$O<!$N$h$&$G\e(B
 
 @item message-subject-re-regexp
 @vindex message-subject-re-regexp
-\e$B%a%C%;!<%8$X$N1~Ez$O\e(B @samp{Re: } \e$B$G;O$^$j$^$9!#$3$l$O1Q8l$N\e(B ``response'' 
-\e$B$NN,$G$O\e(B @emph{\e$B$"$j$^$;$s\e(B} \e$B$,!"%i%F%s8l$G!"\e(B``\e$B$=$l$K1~Ez$7$F\e(B'' (in
-response to) \e$B$H8@$&0UL#$G$9!#$$$/$D$+$NL53X$NGO</$O$3$N;v<B$rF@$k;v$K<:\e(B
-\e$BGT$7!"H`$i$N%=%U%H%&%'%"$r4w$^$o$7$$\e(B @samp{Aw: } (``antwort'') \e$B$d\e(B 
-@samp{Sv: } (``svar'') \e$B$rBe$o$j$K;H$&$h$&$K\e(B ``\e$B9q:]2=\e(B'' \e$B$7$^$7$?!#$=$l$O\e(B
-\e$B0UL#$,L5$/!"<Y0-$G$9!#$7$+$7!"$3$l$i$N<Y0-$JF;6q$r;H$C$?MxMQ<T$r07$o$J$1\e(B
-\e$B$l$P$J$i$J$$$+$b$7$l$^$;$s$N$G!"$=$N$h$&$J>l9g$O$3$NJQ?t$r$3$l$i$N@\F,8l\e(B
-\e$B$K9g$&$h$&$J@55,I=8=$K@_Dj$9$k$G$7$g$&!#;d<+?H$O!"$=$N$h$&$J5,3J$K=>$o$J\e(B
-\e$B$$%a!<%k$O$?$@<N$F5n$C$F$$$k$@$1$G$9!#\e(B
+\e$B%a%C%;!<%8$X$N1~Ez$O\e(B @samp{Re: } \e$B$G;O$^$j$^$9!#$3$l$O1Q8l\e(B
+\e$B$N\e(B ``response'' \e$B$NN,$G$O\e(B @emph{\e$B$"$j$^$;$s\e(B} \e$B$,!"%i%F%s8l$G!"\e(B``\e$B$=$l$K1~Ez\e(B
+\e$B$7$F\e(B'' (in response to) \e$B$H8@$&0UL#$G$9!#$$$/$D$+$NL53X$NGO</$O$3$N;v<B$r\e(B
+\e$BF@$k;v$K<:GT$7!"H`$i$N%=%U%H%&%'%"$r4w$^$o$7\e(B
+\e$B$$\e(B @samp{Aw: } (``antwort'') \e$B$d\e(B @samp{Sv: } (``svar'') \e$B$rBe$o$j$K;H$&$h\e(B
+\e$B$&$K\e(B ``\e$B9q:]2=\e(B'' \e$B$7$^$7$?!#$=$l$O0UL#$,L5$/!"<Y0-$G$9!#$7$+$7!"$3$l$i$N<Y\e(B
+\e$B0-$JF;6q$r;H$C$?MxMQ<T$r07$o$J$1$l$P$J$i$J$$$+$b$7$l$^$;$s$N$G!"$=$N$h$&\e(B
+\e$B$J>l9g$O$3$NJQ?t$r$3$l$i$N@\F,8l$K9g$&$h$&$J@55,I=8=$K@_Dj$9$k$G$7$g$&!#\e(B
+\e$B;d<+?H$O!"$=$N$h$&$J5,3J$K=>$o$J$$%a!<%k$O$?$@<N$F5n$C$F$$$k$@$1$G$9!#\e(B
+
+@item message-alternative-emails
+@vindex message-alternative-emails
+\e$BBe$o$j$N%a!<%k%"%I%l%9$K9gCW$9$k@55,I=8=$G$9!#:G=i$K%^%C%A$7$?\e(B (\e$BBh0l5A$G\e(B
+\e$B$O$J$$\e(B) \e$B%"%I%l%9$,\e(B @code{From} \e$B%U%#!<%k%I$G;H$o$l$^$9!#\e(B
+(\e$BLuCm\e(B: To \e$B$+\e(B Cc \e$B$K$"$k%"%I%l%9$G!":G=i$K$3$N@55,I=8=$K9gCW$7!"\e(B
+\e$B$+$D\e(B @code{user-mail-address} \e$B$H$O0c$&$b$N$,!"\e(B@code{From} \e$B%U%#!<%k%I$N%a!<\e(B
+\e$B%k%"%I%l%9$H$7$F;H$o$l$^$9!#\e(B)
 
 @end table
 
-
 @node Mail Headers
 @section \e$B%a!<%k%X%C%@!<\e(B
 
@@ -776,8 +851,8 @@ Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
 
 @item message-ignored-mail-headers
 @vindex message-ignored-mail-headers
-\e$B%a!<%k$r=P$9A0$K<h$j=|$+$l$k%X%C%@!<$N@55,I=8=$G$9!#=i4|CM$O\e(B 
-@samp{^[GF]cc:\\|^Resent-Fcc:} \e$B$G$9!#\e(B
+\e$B%a!<%k$r=P$9A0$K<h$j=|$+$l$k%X%C%@!<$N@55,I=8=$G$9!#=i4|CM\e(B
+\e$B$O\e(B @samp{^[GF]cc:\\|^Resent-Fcc:} \e$B$G$9!#\e(B
 
 @item message-default-mail-headers
 @vindex message-default-mail-headers
@@ -786,17 +861,16 @@ Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Mail Variables
 @section \e$B%a!<%kJQ?t\e(B
 
 @table @code
 @item message-send-mail-function
 @vindex message-send-mail-function
-\e$B8=:_$N%P%C%U%!$r%a!<%k$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM$O\e(B 
-@code{message-send-mail-with-sendmail} \e$B$G$9!#$b$7Be$o$j$K\e(B MH \e$B$GAw$k$N$r\e(B
-\e$B9%$`$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{message-send-mail-with-mh} \e$B$K@_Dj$7$F2<\e(B
-\e$B$5$$!#\e(B
+\e$B8=:_$N%P%C%U%!$r%a!<%k$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{message-send-mail-with-sendmail} \e$B$G$9!#$b$7Be$o$j$K\e(B MH \e$B$GAw$k$N\e(B
+\e$B$r9%$`$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{message-send-mail-with-mh} \e$B$K@_Dj$7$F\e(B
+\e$B2<$5$$!#\e(B
 
 @item message-mh-deletable-headers
 @vindex message-mh-deletable-headers
@@ -808,7 +882,6 @@ Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node News Headers
 @section \e$B%K%e!<%9%X%C%@!<\e(B
 
@@ -841,8 +914,8 @@ Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
 \e$B$3$NA*BrG$0U$J%X%C%@!<$OJQ?t\e(B @code{message-user-organization} \e$B$K0MB8$7$F\e(B
 \e$B:n@.$5$l$^$9!#$b$7$3$NJQ?t$,\e(B @code{t} \e$B$G$"$l$P!"\e(B
 @code{message-user-organization-file} \e$B$,;H$o$l$^$9!#$3$NJQ?t$OJ8;zNs$G$"\e(B
-\e$B$k;v$b$G$-\e(B (\e$B$=$N>l9g$O$=$NJ8;zNs$,;H$o$l$^$9\e(B)\e$B!"4X?t$G$"$k;v$b$G$-$^$9\e(B 
-(\e$B$=$N4X?t$O0z?tL5$7$G8F$P$l!";H$o$l$kJ8;zNs$rJV$9I,MW$,$"$j$^$9\e(B)\e$B!#\e(B
+\e$B$k;v$b$G$-\e(B (\e$B$=$N>l9g$O$=$NJ8;zNs$,;H$o$l$^$9\e(B)\e$B!"4X?t$G$"$k;v$b$G$-$^\e(B
+\e$B$9\e(B (\e$B$=$N4X?t$O0z?tL5$7$G8F$P$l!";H$o$l$kJ8;zNs$rJV$9I,MW$,$"$j$^$9\e(B)\e$B!#\e(B
 
 @item Lines
 @cindex Lines
@@ -854,10 +927,11 @@ Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
 @findex system-name
 @cindex Sun
 \e$B$3$NI,MW$J%X%C%@!<$O\e(B Message \e$B$K$h$j:n@.$5$l$^$9!#F|IU!";~4V!"MxMQ<TL>!"\e(B
-\e$B%7%9%F%`L>$K4p$E$$$?B>$KL5$$\e(B ID \e$B$,:n@.$5$l$^$9!#\e(BMessage \e$B$O\e(B 
-@code{system-name} \e$B$r%7%9%F%`L>$r7h$a$k$?$a$K;H$$$^$9!#$b$7$3$l$,\e(B fully
-qualified domain name (FQDN) (\e$B40A4$K>r7o$rK~$?$7$?%I%a%$%sL>\e(B) \e$B$G$J$$$J$i\e(B
-\e$B$P!"\e(BMessage \e$B$O\e(B @code{mail-host-address} \e$B$r\e(B FQDN \e$B$H$7$F;H$$$^$9!#\e(B
+\e$B%7%9%F%`L>$K4p$E$$$?B>$KL5$$\e(B ID \e$B$,:n@.$5$l$^$9!#\e(B
+Message \e$B$O\e(B @code{system-name} \e$B$r%7%9%F%`L>$r7h$a$k$?$a$K;H$$$^$9!#$b$7$3\e(B
+\e$B$l$,\e(B fully qualified domain name (FQDN) (\e$B40A4$K>r7o$rK~$?$7$?%I%a%$%s\e(B
+\e$BL>\e(B) \e$B$G$J$$$J$i\e(B \e$B$P!"\e(BMessage \e$B$O\e(B @code{mail-host-address} \e$B$r\e(B FQDN \e$B$H$7$F;H\e(B
+\e$B$$$^$9!#\e(B
 
 @item X-Newsreader
 @cindex X-Nesreader
@@ -982,15 +1056,14 @@ qualified domain name (FQDN) (\e$B40A4$K>r7o$rK~$?$7$?%I%a%$%sL>\e(B) \e$B$G$J$$$J$
 
 @end table
 
-
 @node News Variables
 @section \e$B?7$7$$JQ?t\e(B
 
 @table @code
 @item message-send-news-function
 @vindex message-send-news-function
-\e$B8=:_$N%P%C%U%!$r%K%e!<%9$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM$O\e(B 
-@code{mesage-send-news} \e$B$G$9!#\e(B
+\e$B8=:_$N%P%C%U%!$r%K%e!<%9$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM\e(B
+\e$B$O\e(B @code{mesage-send-news} \e$B$G$9!#\e(B
 
 @item message-post-method
 @vindex message-post-method
@@ -999,11 +1072,21 @@ qualified domain name (FQDN) (\e$B40A4$K>r7o$rK~$?$7$?%I%a%$%sL>\e(B) \e$B$G$J$$$J$
 
 @end table
 
-
 @node Various Message Variables
 @section \e$B$$$m$$$m$J%a%C%;!<%8JQ?t\e(B
 
 @table @code
+@c @item message-default-charset
+@c @vindex message-default-charset
+@c @cindex charset
+@c Symbol naming a @sc{mime} charset.  Non-ASCII characters in messages are
+@c assumed to be encoded using this charset.  The default is @code{nil},
+@c which means ask the user.  (This variable is used only on non-@sc{mule}
+@c Emacsen.
+@c @xref{Charset Translation, , Charset Translation, emacs-mime,
+@c       Emacs MIME Manual}, for details on the @sc{mule}-to-@sc{mime}
+@c translation process.
+@c
 @item message-signature-separator
 @vindex message-signature-separator
 \e$B=pL>J,N%$K9gCW$9$k@55,I=8=$G$9!#=i4|CM$O\e(B @samp{^-- *$} \e$B$G$9!#\e(B
@@ -1015,8 +1098,8 @@ follows this line--} \e$B$G$9!#\e(B
 
 @item message-directory
 @vindex message-directory
-\e$BB?$/$N%a!<%k$N$b$N$+$i;H$o$l$k%G%#%l%/%H%j!<$G$9!#=i4|CM$O\e(B 
-@file{~/Mail/} \e$B$G$9!#\e(B
+\e$BB?$/$N%a!<%k$N$b$N$+$i;H$o$l$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
+\e$B$O\e(B @file{~/Mail/} \e$B$G$9!#\e(B
 
 @item message-signature-setup-hook
 @vindex message-signature-setup-hook
@@ -1052,8 +1135,8 @@ follows this line--} \e$B$G$9!#\e(B
 @vindex message-send-hook
 \e$B%a%C%;!<%8$rAw$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
 
-\e$B$b$7Aw$kA0$KFCDj$N%X%C%@!<$r2C$($?$$$N$G$"$l$P!"4X?t\e(B 
-@code{message-add-header} \e$B$r$3$N%U%C%/$K;H$&;v$,$G$-$^$9!#Nc$($P\e(B:
+\e$B$b$7Aw$kA0$KFCDj$N%X%C%@!<$r2C$($?$$$N$G$"$l$P!"4X\e(B
+\e$B?t\e(B @code{message-add-header} \e$B$r$3$N%U%C%/$K;H$&;v$,$G$-$^$9!#Nc$($P\e(B:
 @findex message-add-header
 
 @lisp
@@ -1110,12 +1193,8 @@ follows this line--} \e$B$G$9!#\e(B
  (mail message-mail-p message-send-via-mail))
 @end lisp
 
-
-
 @end table
 
-
-
 @node Sending Variables
 @section \e$BAw$k$?$a$NJQ?t\e(B
 
@@ -1124,21 +1203,20 @@ follows this line--} \e$B$G$9!#\e(B
 @item message-fcc-handler-function
 @vindex message-fcc-handler-function
 \e$B=P$F$$$/5-;v$rJ]B8$9$k$?$a$K8F$P$l$k4X?t$G$9!#$3$N4X?t$O5-;v$rC_@Q$9$k$?\e(B
-\e$B$a$N%U%!%$%kL>$H6&$K8F$P$l$^$9!#=i4|@_Dj$N4X?t$O\e(B @code{message-output} 
+\e$B$a$N%U%!%$%kL>$H6&$K8F$P$l$^$9!#=i4|@_Dj$N4X?t$O\e(B @code{message-output}
 \e$B$G!"$=$l$O\e(B Unix mailbox \e$BMM<0$GJ]B8$7$^$9!#\e(B
 
 @item message-courtesy-message
 @vindex messsage-courtesy-messsage
 \e$BJ#9g%a%C%;!<%8$rAw$k$H$-$O!"$3$NJ8;zNs$O%a!<%k$GAw$i$l$?J#@=$NJ}$N:G=i$K\e(B
 \e$BA^F~$5$l$^$9!#$b$7$=$NJ8;zNs$,=qK!;EMM;XDj\e(B @samp{%s} \e$B$r4^$s$G$$$l$P!"5-\e(B
-\e$B;v$,Ej9F$5$l$?%K%e!<%9%0%k!<%W$,$=$3$KA^F~$5$l$^$9!#$b$7$3$NJQ?t$,\e(B 
-@code{nil} \e$B$G$"$l$P!"$=$N$h$&$J?F@Z%a%C%;!<%8$O2C$($i$l$^$;$s!#=i4|CM$O\e(B 
-@samp{"The following message is a courtesy copy of an article\nthat has
+\e$B;v$,Ej9F$5$l$?%K%e!<%9%0%k!<%W$,$=$3$KA^F~$5$l$^$9!#$b$7$3$NJQ?t\e(B
+\e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$=$N$h$&$J?F@Z%a%C%;!<%8$O2C$($i$l$^$;$s!#=i4|CM\e(B
+\e$B$O\e(B @samp{"The following message is a courtesy copy of an article\nthat has
 been posted to %s as well.\n\n"} \e$B$G$9!#\e(B
 
 @end table
 
-
 @node Message Buffers
 @section \e$B%a%C%;!<%8%P%C%U%!\e(B
 
@@ -1157,7 +1235,7 @@ Message \e$B$O$"$J$?$,%a%C%;!<%8%P%C%U%!$rMW5a$7$?$H$-$K!"B>$KL5$$M#0l$N%P%C\e(B
 
 @item message-use-multi-frames
 @vindex message-use-multi-frames
-@code{nil} \e$B$G$J$1$l$P!"?7$7$$%U%l!<%`$r:n@.$7$^$9!#=i4|CM$O\e(B @code{nil} 
+@code{nil} \e$B$G$J$1$l$P!"?7$7$$%U%l!<%`$r:n@.$7$^$9!#=i4|CM$O\e(B @code{nil}
 \e$B$G$9!#\e(B
 
 @item message-delete-frame-on-exit
@@ -1176,7 +1254,7 @@ Message \e$B$O$"$J$?$,%a%C%;!<%8%P%C%U%!$rMW5a$7$?$H$-$K!"B>$KL5$$M#0l$N%P%C\e(B
 
 @item message-send-rename-function
 @vindex message-send-rename-function
-\e$B%a%C%;!<%8$rAw$C$?8e$G!"%P%C%U%!$NL>A0$O!"Nc$($P!"\e(B@samp{*reply to Lars*} 
+\e$B%a%C%;!<%8$rAw$C$?8e$G!"%P%C%U%!$NL>A0$O!"Nc$($P!"\e(B@samp{*reply to Lars*}
 \e$B$+$i\e(B @samp{*sent reply to Lars*} \e$B$KJQ99$5$l$^$9!#$b$7$3$l$r9%$^$J$$$J$i!"\e(B
 \e$B$3$NJQ?t$r$"$J$?$N9%$-$JJ}K!$G%P%C%U%!$NL>A0$rJQ99$9$k4X?t$K@_Dj$7$F2<$5\e(B
 \e$B$$!#$=$b$=$b%P%C%U%!L>$rJQ99$9$k;v$r9%$^$J$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^\e(B
@@ -1192,7 +1270,6 @@ Message \e$B$O$"$J$?$,%a%C%;!<%8%P%C%U%!$rMW5a$7$?$H$-$K!"B>$KL5$$M#0l$N%P%C\e(B
 
 @end table
 
-
 @node Message Actions
 @section \e$B%a%C%;!<%8$NF0:n\e(B
 
@@ -1230,7 +1307,6 @@ Message \e$B$O$3$l$i$N%j%9%H$H:nMQ$9$k4X?t$rDs6!$7$F$$$^$9\e(B:
 @dfn{\e$BF0:n\e(B} \e$B$O<!$N$I$l$+$G$9\e(B: \e$BIaDL$N4X?t!"$b$7$/$O\e(B @code{car} \e$B$,4X?t$G!"\e(B
 @code{cdr} \e$B$,0z?t$N%j%9%H$G$"$k%j%9%H$+!"\e(B@code{\e$BI>2A\e(B} \e$B$5$l$k<0$G$9!#\e(B
 
-
 @node Compatibility
 @chapter \e$B8_49@-\e(B
 @cindex compatibility
@@ -1245,13 +1321,12 @@ Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e
 
 \e$B$3$l$OB?$/$N\e(B Message \e$BJQ?t$rBP1~$9$k%a!<%kJQ?t$+$i=i4|2=$7$^$9!#\e(B
 
-
 @node Appendices
 @chapter \e$BIU5-\e(B
 
 @menu
 * Responses:: \e$B1~Ez$,2?=h$K9T$/$+$r7hDj$9$kI8=`$NK!B'!#\e(B
-@end menu 
+@end menu
 
 @node Responses
 @section \e$B1~Ez\e(B
@@ -1271,7 +1346,6 @@ Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e
 @item From
 @end table
 
-
 @item wide reply
 @dfn{\e$B9-$$JVEz\e(B} (wide reply) \e$B$O$"$J$?$,1~Ez$7$h$&$H$7$F$$$k%a%C%;!<%8$K=q\e(B
 \e$B$+$l$F$$$?\e(B @emph{\e$BA4$F$N\e(B} \e$B<BBN$r4^$`%a!<%k$K$h$k1~Ez$G$9!#0J2<$N%X%C%@!<\e(B
@@ -1289,15 +1363,14 @@ Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e
 @end table
 
 @code{Mail-Copies-To} \e$B%X%C%@!<$,B8:_$7$F$$$k$H!"$=$l$b%a!<%k%\%C%/%9$N%j\e(B
-\e$B%9%H$K2C$($i$l$k$G$7$g$&!#$3$N%X%C%@!<$,\e(B @samp{never} \e$B$G$"$l$P!"$=$l$O\e(B 
-@code{From} (\e$B$b$7$/$O\e(B @code{Reply-To}) \e$B%a!<%k%\%C%/%9$,M^@)$5$l$k$H8@$&\e(B
-\e$B;v$G$9!#\e(B
-
+\e$B%9%H$K2C$($i$l$k$G$7$g$&!#$3$N%X%C%@!<$,\e(B @samp{never} \e$B$G$"$l$P!"$=$l\e(B
+\e$B$O\e(B @code{From} (\e$B$b$7$/$O\e(B @code{Reply-To}) \e$B%a!<%k%\%C%/%9$,M^@)$5$l$k$H8@\e(B
+\e$B$&;v$G$9!#\e(B
 
 @item followup
-@dfn{\e$B%U%)%m!<%"%C%W\e(B} (followup) \e$B$O%K%e!<%9$K$h$k1~Ez$G$9!#0J2<$N%X%C%@!<\e(B 
-(\e$BM%@h=g0L$N9b$$$b$N$+$i5s$2$i$l$F$$$^$9\e(B) \e$B$,2?=h$K1~Ez$,Aw$i$l$k$+$r7hDj\e(B
-\e$B$7$^$9\e(B:
+@dfn{\e$B%U%)%m!<%"%C%W\e(B} (followup) \e$B$O%K%e!<%9$K$h$k1~Ez$G$9!#0J2<$N%X%C\e(B
+\e$B%@!<\e(B (\e$BM%@h=g0L$N9b$$$b$N$+$i5s$2$i$l$F$$$^$9\e(B) \e$B$,2?=h$K1~Ez$,Aw$i$l$k$+$r\e(B
+\e$B7hDj$7$^$9\e(B:
 
 @table @code
 
@@ -1312,8 +1385,6 @@ Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e
 
 @end table
 
-
-
 @node Index
 @chapter Index
 @printindex cp
@@ -1327,4 +1398,3 @@ Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e
 @bye
 
 @c End:
-
index 7543a26..d63486e 100644 (file)
@@ -1,67 +1,70 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle T-gnus 6.13 Message Manual
+@settitle T-gnus 6.14 Message Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Message: (message).   Mail and news composition mode that goes with Gnus.
-@c @end direntry
+@dircategory Editors
+@direntry
+* Message: (message).   Mail and news composition mode that goes with Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
 @setchapternewpage odd
 
-@ifinfo
+@ifnottex
 
 This file documents Message, the Emacs message composition mode.
 
-Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+Copyright (C) 1996,97,98,99,2000 Free Software Foundation, Inc.
 
-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, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-@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).
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also 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
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end ifnottex
 
 @tex
 
 @titlepage
-@title T-gnus 6.13 Message Manual
+@title T-gnus 6.14 Message Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1996,97,98,99 Free Software Foundation, Inc.
-
-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.
-
+Copyright @copyright{} 1996,97,98,99,2000 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 @end titlepage
 @page
 
@@ -83,7 +86,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to T-gnus 6.13 Message.  Message is
+This manual corresponds to T-gnus 6.14 Message.  Message is
 distributed with the Gnus distribution bearing the same version number
 as this manual.
 
@@ -153,7 +156,7 @@ If you want the replies to go to the @code{Sender} instead of the
 (setq message-reply-to-function
       (lambda ()
        (cond ((equal (mail-fetch-field "from") "somebody")
-               (mail-fetch-field "sender"))
+               (list (cons 'To (mail-fetch-field "sender"))))
              (t
               nil))))
 @end lisp
@@ -246,8 +249,8 @@ the message in the current buffer.  If given a prefix, forward using
 news.
 
 @table @code
-@item message-ignored-forward-headers
-@vindex message-ignored-forward-headers
+@item message-forward-ignored-headers
+@vindex message-forward-ignored-headers
 All headers that match this regexp will be deleted when forwarding a message.
 
 @item message-make-forward-subject-function
@@ -275,6 +278,12 @@ the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
 @samp{(fwd)}) removed before the new subject is
 constructed.  The default value is @code{nil}.
 
+@item message-forward-as-mime
+@vindex message-forward-as-mime
+If this variable is @code{t} (the default), forwarded messages are
+included as inline MIME RFC822 parts.  If it's @code{nil}, forwarded
+messages will just be copied inline to the new message, like previous,
+non MIME-savvy versions of gnus would do.
 @end table
 
 
@@ -311,6 +320,7 @@ will be removed before popping up the buffer.  The default is
 @chapter Commands
 
 @menu
+* Buffer Entry::        Commands after entering a Message buffer.
 * Header Commands::     Commands for moving to headers.
 * Movement::            Moving around in message buffers.
 * Insertion::           Inserting things into message buffers.
@@ -318,9 +328,25 @@ will be removed before popping up the buffer.  The default is
 * Various Commands::    Various things.
 * Sending::             Actually sending the message.
 * Mail Aliases::        How to use mail aliases.
+* Spelling::            Having Emacs check your spelling.
 @end menu
 
 
+@node Buffer Entry
+@section Buffer Entry
+@cindex undo
+@kindex C-_
+
+You most often end up in a Message buffer when responding to some other
+message of some sort.  Message does lots of handling of quoted text, and
+may remove signatures, reformat the text, or the like---depending on
+which used settings you're using.  Message usually gets things right,
+but sometimes it stumbles.  To help the user unwind these stumblings,
+Message sets the undo boundary before each major automatic action it
+takes.  If you press the undo key (usually located at @kbd{C-_}) a few
+times, you will get back the un-edited message you're responding to.
+
+
 @node Header Commands
 @section Header Commands
 
@@ -418,12 +444,11 @@ Move to the signature of the message (@code{message-goto-signature}).
 @item C-c C-y
 @kindex C-c C-y
 @findex message-yank-original
-Yank the message in the buffer @code{gnus-article-copy} into the message
-buffer. Normally @code{gnus-article-copy} is what you are replying to
+Yank the message that's being replied to into the message buffer
 (@code{message-yank-original}).
 
-@item C-c C-Y
-@kindex C-c C-Y
+@item C-c M-C-y
+@kindex C-c M-C-y
 @findex message-yank-buffer
 Prompt for a buffer name and yank the contents of that buffer into the
 message buffer (@code{message-yank-buffer}).
@@ -479,6 +504,22 @@ to quote the person you are answering.  Inserting quoted text is done by
 @dfn{yanking}, and each quoted line you yank will have
 @code{message-yank-prefix} prepended to it.  The default is @samp{> }.
 
+@item message-yank-add-new-references
+@vindex message-yank-add-new-references
+@cindex yanking
+Non-@code{nil} means new IDs will be added to References field when an
+article is yanked by the command @code{message-yank-original}
+interactively.  If it is a symbol @code{message-id-only}, only an ID
+from Message-ID field is used, otherwise IDs extracted from References,
+In-Reply-To and Message-ID fields are used.
+
+@item message-list-references-add-position
+@vindex message-list-references-add-position
+@cindex yanking
+Integer value means position for adding to References field when an
+article is yanked by the command @code{message-yank-original}
+interactively.
+
 @item message-indentation-spaces
 @vindex message-indentation-spaces
 Number of spaces to indent yanked messages.
@@ -568,8 +609,9 @@ many places to rotate the text.  The default is 13.
 @kindex C-c C-e
 @findex message-elide-region
 Elide the text between point and mark (@code{message-elide-region}).
-The text is killed and an ellipsis (@samp{[...]}) will be inserted in
-its place.
+The text is killed and replaced with the contents of the variable
+@code{message-elide-ellipsis}. The default value is to use an ellipsis
+(@samp{[...]}).
 
 @item C-c C-z
 @kindex C-c C-x
@@ -685,6 +727,51 @@ No expansion will be performed upon sending of the message---all
 expansions have to be done explicitly.
 
 
+@node Spelling
+@section Spelling
+@cindex spelling
+@findex ispell-message
+
+There are two popular ways to have Emacs spell-check your messages:
+@code{ispell} and @code{flyspell}.  @code{ispell} is the older and
+probably more popular package.  You typically first write the message,
+and then run the entire thing through @code{ispell} and fix all the
+typos.  To have this happen automatically when you send a message, put
+something like the following in your @file{.emacs} file:
+
+@lisp
+(add-hook 'message-send-hook 'ispell-message)
+@end lisp
+
+@vindex ispell-message-dictionary-alist
+If you're in the habit of writing in different languages, this can be
+controlled by the @code{ispell-message-dictionary-alist} variable:
+
+@lisp
+(setq ispell-message-dictionary-alist
+      '(("^Newsgroups:.*\\bde\\." . "deutsch8")
+       (".*" . "default")))
+@end lisp
+
+@code{ispell} depends on having the external @samp{ispell} command
+installed.
+
+The other popular method is using @code{flyspell}.  This package checks
+your spelling while you're writing, and marks any mis-spelled words in
+various ways.
+
+To use @code{flyspell}, put something like the following in your
+@file{.emacs} file:
+
+@lisp
+(defun my-message-setup-routine ()
+  (flyspell-mode 1))
+(add-hook 'message-setup-hook 'my-message-setup-routine)
+@end lisp
+
+@code{flyspell} depends on having the external @samp{ispell} command
+installed.
+
 
 @node Variables
 @chapter Variables
@@ -769,6 +856,11 @@ have to deal with users that use these evil tools, in which case you may
 set this variable to a regexp that matches these prefixes.  Myself, I
 just throw away non-compliant mail.
 
+@item message-alternative-emails
+@vindex message-alternative-emails
+A regexp to match the alternative email addresses.  The first matched
+address (not primary one) is used in the @code{From} field.
+
 @end table
 
 
@@ -1024,6 +1116,17 @@ posting a prepared news message.
 @section Various Message Variables
 
 @table @code
+@item message-default-charset
+@vindex message-default-charset
+@cindex charset
+Symbol naming a @sc{mime} charset.  Non-ASCII characters in messages are
+assumed to be encoded using this charset.  The default is @code{nil},
+which means ask the user.  (This variable is used only on non-@sc{mule}
+Emacsen.  
+@xref{Charset Translation, , Charset Translation, emacs-mime, 
+      Emacs MIME Manual}, for details on the @sc{mule}-to-@sc{mime}
+translation process.
+
 @item message-signature-separator
 @vindex message-signature-separator
 Regexp matching the signature separator.  It is @samp{^-- *$} by
@@ -1143,7 +1246,7 @@ A function to be called if @var{predicate} returns non-@code{nil}.
 @item message-fcc-handler-function
 @vindex message-fcc-handler-function
 A function called to save outgoing articles.  This function will be
-called with the name of the file to store the article in. The default
+called with the name of the file to store the article in.  The default
 function is @code{message-output} which saves in Unix mailbox format.
 
 @item message-courtesy-message
index 3b5f803..a7d0a5c 100644 (file)
 \thispagestyle{empty}
 \vfill
 
-\begin{picture}(10,10)
-\put(90,-10){\makebox(0,0)[tr]{\epsfig{figure=tmp/larsi.ps,height=3cm}}}
-\end{picture}
-
-\hspace*{4cm}\parbox[t]{10cm}{
-This manual was written by Lars Magne Ingebrigtsen (b. 1968) who
+This manual was written by Lars Magne Ingebrigtsen (1968 --- ) who
 resides in Oslo, Norway and poses as a student, but doesn't get much
 studying done, for some strange reason or other.  When not worshipping
 at the altar of Emacs, he can often be found slouching on his couch
 reading while bopping his head gently to some obscure music.  He does
 not have a cat.
 
-Graphics by Luis Fernandes.  Set in Bembo and Futura.
-}
+\marginpar[\vspace*{-2.5cm}\epsfig{figure=tmp/larsi.ps,height=2cm}]{\vspace*{-2.2cm}\epsfig{figure=tmp/larsi.ps,height=2.5cm}}
+
+Graphics by Luis Fernandes.  Set in Adobe Bembo, Adobe Futura and
+Bitstream Courier.
 
 \clearpage
 \mbox{}
index a701cd4..5e5731f 100644 (file)
-% Reference Card for (ding) Gnus, 3 twocolumn pages.
-% To be processed with latex 2.09
+% -*- latex -*-
+% Reference Card for (ding) Gnus 5.8.x: to be processed with LaTeX2e
+\documentclass{article}
 \def\Guide{Card}\def\guide{card}
 \def\logoscale{0.25}
-\def\sec{\section*}
-\def\subsec{\subsection*}
-\def\subsubsec{\subsubsection*}
-\documentstyle{article}
 \textwidth 7.26in \textheight 10in \topmargin -1.0in
 % the same settings work for A4, although there is a bit of space at the
 % top and bottom of the page. 
 \oddsidemargin -0.5in \evensidemargin -0.5in
+
+% README:
+% *** purpose
+% this was originally thought of as a reference card, but as it is now 5+
+% pages long, I doubt that it is more useful than the online-help. It helped
+% to get an overview for the Gnus-functionality.
+%
+% *** files
+% refcard.tex (this file), gnusref.tex ("include"-file) and gnuslogo.refcard
+% (Gnus logo).
+%
+% *** printing (about 5 pages now: write me if you can make it shorter..)
+% if you are using latex-mode, you do C-c C-f (process with latex),
+% C-c C-v (view using xdvi/dvi2tty) and C-c C-p (print)
+% the original author has set up the page dimensions cleverly so that this
+% should print on both letter and a4 (see note above)
+% $latex refcard.tex
+% this creates a file refcard.dvi which you can preview using
+% $xdvi refcard.dvi [C-c C-v]
+% and print using something like
+% $dvips refcard.dvi 
+% which creates refcard.ps (print using 'lpr refcard.ps')
+%
+% *** customization:
+% the part following \begin{document} in this file consists of a macro for
+% each section and section-headers (\section*{..}). It should be easy to
+% reorder things and/or remove sections (put '%' at the beginning of the line).
+% (i.e. you might want to omit \notes in the printed version ?)
+% If you think that the order is not logical and you have ideas for
+% improvements, please send mail to the current maintainer.
+%
+% *** ChangeLog:
+% 2000-03-26  Felix Natter  <fnatter@gmx.net>:
+% refcard updated for Gnus 5.8.x: please send corrections or suggestions
+% to the above email-address
+% changes since 2000-03-26:
+% o Create/Edit Foreign Groups: remove S b and S B (not available in 5.8.3)
+% o Send/Reply etc.: remove w and W (the only bindings are S w and S W)
+% Mon Apr  3 18:41:09 2000:
+% o added C-c C-n and C-c C-t (Article)
+% o C-c C-a as alias for M-m f (Article) + some other M-m *-bindings
+% o added section for ``jumping'' in article-mode
+% o now there's a difference between ``reading'' and ``composition''
+% (article-modes)
+% Apr 24th, 2000:
+% o added D s, D S and D t for nndraft
+% o group-mode: i.e. C-u RET does not actually fetch fewer articles; also ,=>;
+% Fri Jul 14 23:15:43 2000:
+% o added README-section
+% Thu Jul 27 20:51:01 2000:
+% o added Unplugged-commands
+%
+% *** TODO:
+% o (LaTeX) how can you get 'tabular' to wrap around pages ?
+% o some things might not be updated: scoring and server modes, maybe more
+% o Gnus Unplugged category-buffer commands need to be written
+
 \begin{document}
-\twocolumn\scriptsize\pagestyle{empty}
+\newlength{\logowidth} \setlength{\logowidth}{6.861in}
+\newlength{\logoheight} \setlength{\logoheight}{7.013in}
+
+\def\progver{5.8}\def\refver{5.8-4} % program and refcard versions
+\def\date{July 27th, 2000}
+\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
+\raggedbottom\raggedright
+
+\twocolumn
+%\tiny
+\scriptsize
+\pagestyle{plain}
+
+% this contains a set of commands containing the actual sections
+% (and some explanations).
 \input{gnusref}
 
-% page 1, left column
 \Title
 \par
-\vspace{0.5\baselineskip}
 \Logo{refcard}
-\vspace*{\fill}
-\GroupLevels
-\GroupMode
-\pagebreak
-
-% page 1, right column
 \Notes
-\vspace*{\fill}
-\GroupCommands
-\pagebreak
-
-% page 2, left column
-\SummaryMode
-\Asubmap
-\Bsubmap
-\Gsubmap
-\Hsubmap
-\Tsubmap
-\pagebreak
-
-% page 2, right column
-\Msubmap
-\Marks
-\pagebreak
-
-% page 3
-\Osubmap
-\Ssubmap
-\Xsubmap
-\Vsubmap
-\SortSummary
-\Wsubmap
-\Zsubmap
-\ArticleMode
+%
+%
+\section*{Group-Mode}
+\GroupModeGeneral
+    \subsection*{Group Subscribedness-Levels}
+    \GroupLevels
+    \subsection*{List Groups}
+    \ListGroups
+    \subsection*{Create/Edit Foreign Groups}
+    \CreateEditGroups
+    \subsection*{Unsubscribe, Kill and Yank Groups}
+    \SubscribeKillYankGroups
+    \subsection*{Mark Groups}
+    \MarkGroups
+    \subsection*{Group-Unplugged}
+    \GroupUnplugged
+% topics in group-mode
+    \subsection*{Group Topics}
+    \GroupTopicsGeneral
+    \subsubsection*{Topic Sorting}
+    \TopicSorting
+%
+% summary-mode
+\section*{Summary-Mode}
+\SummaryModeGeneral
+    \subsection*{Select Articles}
+    \SelectArticles
+%
+    \subsection*{Threading}
+    \Threading
+%
+    \subsection*{Limiting}
+    \Limiting
+    \subsection*{Sort the Summary-Buffer}
+    \SortSummary
+    \subsection*{Score (Value) Commands}
+    \Scoring
+% 
+    \subsection*{MIME operations from the Summary-Buffer}
+    \MIMESummary
+    \subsection*{Extract Series (Uudecode etc)}
+    \ExtractSeries
+    \subsection*{Output Articles}
+    \OutputArticles
+%
+    \subsection*{Post, Followup, Reply, Forward, Cancel}
+    \PostReplyetc
+    \subsection*{Message-Composition}
+    \MsgCompositionGeneral
+        \subsubsection*{Jumping in message-buffer}
+        \MsgCompositionMovementArticle
+        \subsubsection*{Attachments/MML}
+        \MsgCompositionMML
+% marking articles
+    \subsection*{Mark Articles}
+    \MarkArticlesGeneral
+        \subsubsection*{Mark Based on Score}
+        \MarkByScore
+        \subsubsection*{The Process Mark}
+        \ProcessMark
+        \subsubsection*{Mark Indication-Characters}
+        \MarkCharacters
+%
+    \subsection*{Summary-Unplugged}
+    \SummaryUnplugged
+    \subsection*{Mail-Group Commands}
+    \MailGroups
+    \subsection*{Draft-Group Commands}
+    \DraftGroup
+% exiting
+    \subsection*{Exit the Summary-Buffer}
+    \ExitSummary
+%
+%
+\section*{Article Mode (reading)}
+\ArticleModeGeneral
+    \subsection*{Wash the Article-Buffer}
+    \WashArticle
+    \subsection*{Hide/Highlight Parts of the Article}
+    \HideHighlightArticle
+    \subsection*{MIME operations from the Article-Buffer (reading)}
+    \MIMEArticleMode
+%
+%
+\section*{Server Mode}
 \ServerMode
-
-% page 4
+    \subsection*{Unplugged-Server}
+    \ServerUnplugged
+%
+%
+\section*{Browse Server Mode}
 \BrowseServer
-\pagebreak
-\onecolumn
+
+%\pagebreak
 \vspace*{\fill}
-\CopyRight
+\Copyright
 
 \end{document}
+
+
diff --git a/texi/texi2latex.el b/texi/texi2latex.el
new file mode 100644 (file)
index 0000000..d7436fa
--- /dev/null
@@ -0,0 +1,322 @@
+;;; texi2latex.el --- convert a texi file into a LaTeX file.
+;; Copyright (C) 1996 Lars Magne Ingebrigtsen
+
+(require 'cl)
+
+(defun latexi-discard-until (string)
+  (let ((beg (match-beginning 0)))
+    (unless (re-search-forward (concat "^@end +" string "[ \t]*\n") nil t)
+      (error "No end: %s" string))
+    (delete-region beg (match-end 0))))
+
+(defun latexi-strip-line ()
+  (delete-region (progn (beginning-of-line) (point))
+                (progn (forward-line 1) (point))))
+
+(defun latexi-switch-line (command arg)
+  (latexi-strip-line)
+  (insert (format "\\%s{%s}\n" command arg)))
+
+(defun latexi-index-command (command arg)
+  (latexi-strip-line)
+  (insert (format "\\gnus%sindex{%s}\n" 
+                 (if (equal command "kindex") "k" "")
+                 arg)))
+
+(defun latexi-begin-command (command)
+  (latexi-strip-line)
+  (insert (format "\\begin{%s}\n" command)))
+
+(defun latexi-exchange-command (command arg)
+  (delete-region (match-beginning 0) (match-end 0))
+  (insert (format "\\%s{%s}" command arg)))
+
+(defun latexi-translate ()
+  "Translate."
+  (interactive)
+  (latexi-translate-file "gnus")
+  (latexi-translate-file "gnus-faq"))
+
+(defun latexi-translate-file (file)
+  "Translate file a LaTeX file."
+  (let ((item-string "")
+       (item-stack nil)
+       (list-stack nil)
+       (latexi-buffer (get-buffer-create "*LaTeXi*"))
+       verbatim
+       (regexp 
+        (concat 
+           "@\\([^{} \t\n]+\\)"
+           "\\(\\( +\\(.*$\\)\\|[ \t]*$\\)\\|{\\([^}]*\\)}\\)"))
+       (cur (find-file-noselect (concat (or (getenv "srcdir") ".") 
+                                        "/" file ".texi")))
+       (times 3)
+       (chapter 0)
+       command arg)
+    (pop-to-buffer latexi-buffer)
+    (buffer-disable-undo)
+    (erase-buffer)
+    (insert-buffer-substring cur)
+    (goto-char (point-min))
+    (latexi-strip-line)
+    (latexi-translate-string "%@{" "\\gnuspercent{}\\gnusbraceleft{}")
+    (latexi-translate-string "%@}" "\\gnuspercent{}\\gnusbraceright{}")
+    (latexi-translate-string "%1@{" "\\gnuspercent{}1\\gnusbraceright{}")
+;    (while (re-search-forward "{\"[^\"]*\\(\\\\\\)[^\"]*\"}\\\\" nil t)
+;      (replace-match "\\verb+\\\\+ " t t))
+    (while (not (zerop (decf times)))
+      (goto-char (point-min))
+      (while (re-search-forward regexp nil t)
+       (setq command (match-string 1))
+       (if (match-beginning 3)
+           (progn
+             (setq arg (or (match-string 4) ""))
+             (save-match-data
+               (when (string-match "[ \t]+$" arg)
+                 (setq arg (substring arg 0 (match-beginning 0)))))
+             (cond 
+              ((member command '("c" "comment"))
+               (if (string-match "@icon" (or arg ""))
+                   (progn
+                     (beginning-of-line)
+                     (delete-region (point) (+ (point) 4))
+                     (insert "\\gnus"))
+                 (delete-region (match-beginning 0) 
+                                (progn (end-of-line) (point))))
+               (if (equal arg "@head")
+                   (insert "\\gnusinteresting")))
+              ((member command '("setfilename" 
+                                 "synindex" "setchapternewpage"
+                                 "summarycontents" "bye"
+                                 "top" "iftex" "cartouche" 
+                                 "iflatex" "finalout" "vskip"
+                                 "dircategory"))
+               (latexi-strip-line))
+              ((member command '("menu" "tex" "ifinfo" "ignore" 
+                                 "ifnottex" "direntry"))
+               (latexi-discard-until command))
+              ((member command '("subsection" "subsubsection"))
+               (latexi-switch-line command arg))
+              ((member command '("chapter"))
+               (latexi-switch-line 
+                (format 
+                 "gnus%s{\\epsfig{figure=tmp/new-herd-%d.ps,scale=.5}}"
+                  command (incf chapter))
+                arg))
+              ((member command '("section"))
+               (latexi-switch-line (format "gnus%s" command) arg))
+              ((member command '("cindex" "findex" "kindex" "vindex"))
+               (latexi-index-command command arg))
+              ((member command '("*"))
+               (delete-char -2)
+               (insert "\\\\"))
+              ((equal command "sp")
+               (replace-match "" t t))
+              ((equal command "node")
+               (latexi-strip-line)
+               (insert (format "\\label{%s}\n" arg)))
+              ((equal command "contents")
+               (latexi-strip-line)
+               ;;(insert (format "\\tableofcontents\n" arg))
+               )
+              ((member command '("titlepage"))
+               (latexi-begin-command command))
+              ((member command '("lisp" "example"))
+               (latexi-strip-line)
+               (insert (format "\\begin{verbatim}\n"))
+               (setq verbatim (point)))
+              ((member command '("center"))
+               (latexi-strip-line)
+               (insert (format "\\begin{%s}%s\\end{%s}\n"
+                               command arg command)))
+              ((member command '("end"))
+               (cond
+                ((member arg '("titlepage"))
+                 (latexi-strip-line)
+                 (insert (format "\\end{%s}\n" arg)))
+                ((equal arg "quotation")
+                 (latexi-strip-line)
+                 (insert (format "\\end{verse}\n")))
+                ((member arg '("lisp" "example"))
+                 (latexi-strip-line)
+                 (save-excursion
+                   (save-restriction
+                     (narrow-to-region verbatim (point))
+                     (goto-char (point-min))
+                     (while (search-forward "@{" nil t)
+                       (replace-match "{" t t))
+                     (goto-char (point-min))
+                     (while (search-forward "@}" nil t)
+                       (replace-match "}" t t))))
+                 (setq verbatim nil)
+                 (insert "\\end{verbatim}\n"))
+                ((member arg '("table"))
+                 (setq item-string (pop item-stack))
+                 (latexi-strip-line)
+                 (insert (format "\\end{%slist}\n" (pop list-stack))))
+                ((member arg '("itemize" "enumerate"))
+                 (setq item-string (pop item-stack))
+                 (latexi-strip-line)
+                 (insert (format "\\end{%s}\n" arg)))
+                ((member arg '("iflatex" "iftex" "cartouche"))
+                 (latexi-strip-line))
+                (t
+                 (error "Unknown end arg: %s" arg))))
+              ((member command '("table"))
+               (push item-string item-stack)
+               (push (substring arg 1) list-stack)
+               (setq item-string 
+                     (format "[@%s{%%s}]" (car list-stack)))
+               (latexi-strip-line)
+               (insert (format "\\begin{%slist}\n" (car list-stack))))
+              ((member command '("itemize" "enumerate"))
+               (push item-string item-stack)
+               (cond 
+                ((member arg '("@bullet"))
+                 (setq item-string "[\\gnusbullet]"))
+                (t
+                 (setq item-string "")))
+               (latexi-strip-line)
+               (insert (format "\\begin{%s}\n" command)))
+              ((member command '("item"))
+               (latexi-strip-line)
+               (insert (format "\\%s%s\n" command (format item-string arg))))
+              ((equal command "itemx")
+               (latexi-strip-line)
+               (insert (format "\\gnusitemx{%s}\n" (format item-string arg))))
+              ((eq (aref command 0) ?@)
+               (goto-char (match-beginning 0))
+               (delete-char 2)
+               (insert "duppat{}"))
+              ((equal command "settitle")
+               (latexi-strip-line)
+               (insert (format "\\newcommand{\\gnustitlename}{%s}\n" arg)))
+              ((equal command "title")
+               (latexi-strip-line)
+               (insert (format "\\gnustitlename{%s}\n" arg)))
+              ((equal command "author")
+               (latexi-strip-line)
+               (insert (format "\\gnusauthor{%s}\n" arg)))
+              ((equal command "quotation")
+               (latexi-begin-command "verse"))
+              ((equal command "page")
+               (latexi-strip-line)
+               (insert (format "\\newpage\n" arg)))
+              ((equal command "'s")
+               (goto-char (match-beginning 0))
+               (delete-char 1))
+              ((equal command "include")
+               (latexi-strip-line)
+               (insert "\\input{gnus-faq.latexi}\n"))
+              ((equal command "printindex")
+               (latexi-strip-line)
+               ;;(insert 
+               ;; (format 
+               ;;  "\\begin{theindex}\\input{gnus.%s}\\end{theindex}\n" arg))
+               )
+              (t
+               (error "Unknown command: %s" command))))
+         ;; These are commands with {}.
+         (setq arg (match-string 5))
+         (cond 
+          ((member command '("xref" "pxref"))
+           (latexi-exchange-command (concat "gnus" command) arg))
+          ((member command '("sc" "file" "dfn" "emph" "kbd" 
+                             "code" "samp" "var" "strong" "i"
+                             "result"))
+           (goto-char (match-beginning 0))
+           (delete-char 1)
+           (insert "\\gnus"))
+          ((member command '("copyright" "footnote"))
+           (goto-char (match-beginning 0))
+           (delete-char 1)
+           (insert "\\"))
+          ((member command '("dots"))
+           (goto-char (match-beginning 0))
+           (delete-region (match-beginning 0) (match-end 0))
+           (insert "..."))
+          ((eq (aref command 0) ?@)
+           (goto-char (match-beginning 0))
+           (delete-char 2)
+           (insert "duppat{}"))
+          (t
+           (error "Unknown command: %s" command))))))
+    (latexi-translate-string "$" "\\gnusdollar{}")
+    (latexi-translate-string "&" "\\gnusampersand{}")
+    (latexi-translate-string "%" "\\gnuspercent{}")
+    (latexi-translate-string "#" "\\gnushash{}")
+    (latexi-translate-string "^" "\\gnushat{}")
+    (latexi-translate-string "~" "\\gnustilde{}")
+    (latexi-translate-string "_" "\\gnusunderline{}")
+    (latexi-translate-string "¬" "\\gnusnot{}")
+    (goto-char (point-min))
+    (while (search-forward "duppat{}" nil t)
+      (replace-match "@" t t))
+    (latexi-translate-string "@@" "@")
+    (latexi-translate-string "<" "\\gnusless{}")
+    (latexi-translate-string ">" "\\gnusgreater{}")
+    (goto-char (point-min))
+    (search-forward "label{Top}" nil t)
+    (while (re-search-forward "\\\\[ntr]\\b" nil t)
+      (when (save-match-data
+             (or (not (save-excursion
+                        (search-backward "begin{verbatim}" nil t)))
+                 (> (save-excursion
+                      (search-backward "end{verbatim"))
+                    (save-excursion
+                      (search-backward "begin{verbatim}")))))
+       (goto-char (match-beginning 0))
+       (delete-char 1)
+       (insert "\\gnusbackslash{}")))
+    (latexi-translate-string "\\\\" "\\gnusbackslash{}")
+    (goto-char (point-min))
+    (while (re-search-forward "\\\\[][{}]" nil t)
+      (goto-char (match-beginning 0))
+      (delete-char 1))
+    (latexi-contributors)
+    (let ((coding-system-for-write 'iso-8859-1))
+      (write-region (point-min) (point-max) (concat file ".latexi")))))
+
+(defun latexi-translate-string (in out)
+  (let (yes)
+    (goto-char (point-min))
+    (search-forward "label{Top}" nil t)
+    (while (search-forward in nil t)
+      (when (save-match-data
+             (or (not (save-excursion
+                        (search-backward "begin{verbatim}" nil t)))
+                 (> (save-excursion
+                      (re-search-backward "end{verbatim}\\|end{verse}"))
+                    (save-excursion
+                      (re-search-backward
+                       "begin{verbatim}\\|begin{verse}")))))
+       (replace-match out t t)))))
+
+(defun latexi-contributors ()
+  (goto-char (point-min))
+  (when (re-search-forward "^Also thanks to the following" nil t)
+    (forward-line 2)
+    (narrow-to-region
+     (point)
+     (1- (search-forward "\n\n")))
+    (when (re-search-backward "^and" nil t)
+      (latexi-strip-line))
+    (goto-char (point-min))
+    (while (re-search-forward "[.,] *$" nil t)
+      (replace-match "" t t))
+    (goto-char (point-min))
+    (let (names)
+      (while (not (eobp))
+       (push (buffer-substring (point) (progn (end-of-line) (point)))
+             names)
+       (forward-line 1))
+      (delete-region (point-min) (point-max))
+      (insert "\\begin{tabular}{lll}\n")
+      (setq names (nreverse (delete "" names)))
+      (while names
+       (insert (pop names) " & " (or (pop names) "\\mbox{}") 
+               " & " (or (pop names) "\\mbox{}") 
+               "\\\\\n"))
+      (insert "\\end{tabular}\n")
+      (widen))))
+